Replace pow now that it is published separately on npm.
authorChris Duncan <chris@zoso.dev>
Mon, 13 Jan 2025 15:49:25 +0000 (07:49 -0800)
committerChris Duncan <chris@zoso.dev>
Mon, 13 Jan 2025 15:49:25 +0000 (07:49 -0800)
15 files changed:
package-lock.json
package.json
src/lib/block.ts
src/lib/nano-pow/classes/gl.ts [deleted file]
src/lib/nano-pow/classes/gpu.ts [deleted file]
src/lib/nano-pow/classes/index.ts [deleted file]
src/lib/nano-pow/index.ts [deleted file]
src/lib/nano-pow/shaders/gl-fragment.ts [deleted file]
src/lib/nano-pow/shaders/gl-vertex.ts [deleted file]
src/lib/nano-pow/shaders/gpu-compute.ts [deleted file]
src/lib/nano-pow/shaders/index.ts [deleted file]
src/lib/workers/index.ts
src/lib/workers/nano-pow.ts
src/main.ts
test/perf.block.js

index 7ce0489b3805423da14727639c176068934c4113..bab5394b020d77f9a96970c30e93a96ce7dcdf5b 100644 (file)
@@ -9,7 +9,7 @@
                        "version": "0.0.21",
                        "license": "(GPL-3.0-or-later AND MIT)",
                        "dependencies": {
-                               "nano-pow": "^1.2.2"
+                               "nano-pow": "^1.2.3"
                        },
                        "devDependencies": {
                                "@types/node": "^22.10.1",
                                "@ledgerhq/hw-transport-webusb": "^6.29.4"
                        }
                },
+               "../nano-pow": {
+                       "version": "1.2.3",
+                       "extraneous": true,
+                       "license": "(GPL-3.0-or-later AND MIT)",
+                       "devDependencies": {
+                               "@types/node": "^22.10.5",
+                               "@webgpu/types": "^0.1.52",
+                               "esbuild": "^0.24.2",
+                               "esbuild-plugin-glsl": "^1.2.2",
+                               "nano-webgl-pow": "^1.1.1",
+                               "typescript": "^5.7.3"
+                       },
+                       "funding": {
+                               "type": "nano",
+                               "url": "nano:nano_1zosoqs47yt47bnfg7sdf46kj7asn58b7uzm9ek95jw7ccatq37898u1zoso"
+                       }
+               },
                "node_modules/@esbuild/linux-x64": {
                        "version": "0.24.0",
                        "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz",
                        }
                },
                "node_modules/nano-pow": {
-                       "version": "1.2.2",
-                       "resolved": "https://registry.npmjs.org/nano-pow/-/nano-pow-1.2.2.tgz",
-                       "integrity": "sha512-hOHzDTN9Vanl5GZZDA+bU+a8Iz8SdU1vWAgUL7sQq3TzLK8f+hsg2N65aXchCuBYWzmadEdQlZkox4nwx/U+cQ==",
+                       "version": "1.2.3",
+                       "resolved": "https://registry.npmjs.org/nano-pow/-/nano-pow-1.2.3.tgz",
+                       "integrity": "sha512-wy6AkUIXYdX8KYB2tErQn97dfN4L7/qqsPJCQ63BZ5UnuqSEiy0HyPaFnS3aYUOtL1rtcmsoTXk6mNU+QRMnJQ==",
                        "license": "(GPL-3.0-or-later AND MIT)",
                        "funding": {
                                "type": "nano",
index 69db714c58be882e8c0efe3e09051d39fa46d44d..6c248097b8f3620710bd61541d9bd1f401d924cc 100644 (file)
@@ -58,6 +58,9 @@
                "#workers": "./src/lib/workers/index.js",
                "#workers/*": "./src/lib/workers/*"
        },
+       "dependencies": {
+               "nano-pow": "^1.2.3"
+       },
        "optionalDependencies": {
                "@ledgerhq/hw-transport-web-ble": "^6.29.4",
                "@ledgerhq/hw-transport-webhid": "^6.29.4",
@@ -76,8 +79,5 @@
        "type": "module",
        "exports": "./dist/main.js",
        "types": "dist/main.d.ts",
-       "unpkg": "dist/main.min.js",
-       "dependencies": {
-               "nano-pow": "^1.2.2"
-       }
+       "unpkg": "dist/main.min.js"
 }
index d32c5e19547aee901cf64df554737b24d19cf843..5de8977b2f57723a4635ca805c1e9cc169d6d299 100644 (file)
@@ -8,7 +8,7 @@ import { dec, hex } from './convert.js'
 import { NanoNaCl } from '#workers/nano-nacl.js'
 import { Pool } from './pool.js'
 import { Rpc } from './rpc.js'
-import { NanoPow } from '#workers'
+import { NanoPowWorker } from '#workers'
 
 /**
 * Represents a block as defined by the Nano cryptocurrency protocol. The Block
@@ -16,7 +16,7 @@ import { NanoPow } from '#workers'
 * of three derived classes: SendBlock, ReceiveBlock, ChangeBlock.
 */
 abstract class Block {
-       static #pool: Pool = new Pool(NanoPow)
+       static #pool: Pool = new Pool(NanoPowWorker)
        account: Account
        type: string = 'state'
        abstract subtype: 'send' | 'receive' | 'change'
diff --git a/src/lib/nano-pow/classes/gl.ts b/src/lib/nano-pow/classes/gl.ts
deleted file mode 100644 (file)
index e2bca1b..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-// SPDX-FileCopyrightText: 2024 Chris Duncan <chris@zoso.dev>
-// SPDX-License-Identifier: GPL-3.0-or-later
-// Based on nano-webgl-pow by Ben Green (numtel) <ben@latenightsketches.com>
-// https://github.com/numtel/nano-webgl-pow
-import { NanoPowGlFragmentShader, NanoPowGlVertexShader } from '../shaders/index.js'
-
-export class NanoPowGl {
-       /** Used to set canvas size. Must be a multiple of 256. */
-       static #WORKLOAD: number = 256 * Math.max(1, Math.floor(navigator.hardwareConcurrency))
-
-       static #hexify (arr: number[] | Uint8Array): string {
-               let out = ''
-               for (let i = arr.length - 1; i >= 0; i--) {
-                       out += arr[i].toString(16).padStart(2, '0')
-               }
-               return out
-       }
-
-       static #gl: WebGL2RenderingContext | null
-       static #program: WebGLProgram | null
-       static #vertexShader: WebGLShader | null
-       static #fragmentShader: WebGLShader | null
-       static #positionBuffer: WebGLBuffer | null
-       static #uvBuffer: WebGLBuffer | null
-       static #uboBuffer: WebGLBuffer | null
-       static #workBuffer: WebGLBuffer | null
-       static #query: WebGLQuery | null
-       static #pixels: Uint8Array
-       /**Vertex Positions, 2 triangles */
-       static #positions = new Float32Array([
-               -1, -1, 0, -1, 1, 0, 1, 1, 0,
-               1, -1, 0, 1, 1, 0, -1, -1, 0
-       ])
-       /** Texture Positions */
-       static #uvPosArray = new Float32Array([
-               1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1
-       ])
-
-       /** Compile */
-       static {
-               this.#gl = new OffscreenCanvas(this.#WORKLOAD, this.#WORKLOAD).getContext('webgl2')
-               if (this.#gl == null) throw new Error('WebGL 2 is required')
-               this.#gl.clearColor(0, 0, 0, 1)
-
-               this.#program = this.#gl.createProgram()
-               if (this.#program == null) throw new Error('Failed to create shader program')
-
-               this.#vertexShader = this.#gl.createShader(this.#gl.VERTEX_SHADER)
-               if (this.#vertexShader == null) throw new Error('Failed to create vertex shader')
-               this.#gl.shaderSource(this.#vertexShader, NanoPowGlVertexShader)
-               this.#gl.compileShader(this.#vertexShader)
-               if (!this.#gl.getShaderParameter(this.#vertexShader, this.#gl.COMPILE_STATUS))
-                       throw new Error(this.#gl.getShaderInfoLog(this.#vertexShader) ?? `Failed to compile vertex shader`)
-
-               this.#fragmentShader = this.#gl.createShader(this.#gl.FRAGMENT_SHADER)
-               if (this.#fragmentShader == null) throw new Error('Failed to create fragment shader')
-               this.#gl.shaderSource(this.#fragmentShader, NanoPowGlFragmentShader)
-               this.#gl.compileShader(this.#fragmentShader)
-               if (!this.#gl.getShaderParameter(this.#fragmentShader, this.#gl.COMPILE_STATUS))
-                       throw new Error(this.#gl.getShaderInfoLog(this.#fragmentShader) ?? `Failed to compile fragment shader`)
-
-               this.#gl.attachShader(this.#program, this.#vertexShader)
-               this.#gl.attachShader(this.#program, this.#fragmentShader)
-               this.#gl.linkProgram(this.#program)
-               if (!this.#gl.getProgramParameter(this.#program, this.#gl.LINK_STATUS))
-                       throw new Error(this.#gl.getProgramInfoLog(this.#program) ?? `Failed to link program`)
-
-               /** Construct simple 2D geometry */
-               this.#gl.useProgram(this.#program)
-               const triangleArray = this.#gl.createVertexArray()
-               this.#gl.bindVertexArray(triangleArray)
-
-               this.#positionBuffer = this.#gl.createBuffer()
-               this.#gl.bindBuffer(this.#gl.ARRAY_BUFFER, this.#positionBuffer)
-               this.#gl.bufferData(this.#gl.ARRAY_BUFFER, this.#positions, this.#gl.STATIC_DRAW)
-               this.#gl.vertexAttribPointer(0, 3, this.#gl.FLOAT, false, 0, 0)
-               this.#gl.enableVertexAttribArray(0)
-
-               this.#uvBuffer = this.#gl.createBuffer()
-               this.#gl.bindBuffer(this.#gl.ARRAY_BUFFER, this.#uvBuffer)
-               this.#gl.bufferData(this.#gl.ARRAY_BUFFER, this.#uvPosArray, this.#gl.STATIC_DRAW)
-               this.#gl.vertexAttribPointer(1, 2, this.#gl.FLOAT, false, 0, 0)
-               this.#gl.enableVertexAttribArray(1)
-
-               this.#uboBuffer = this.#gl.createBuffer()
-               this.#gl.bindBuffer(this.#gl.UNIFORM_BUFFER, this.#uboBuffer)
-               this.#gl.bufferData(this.#gl.UNIFORM_BUFFER, 144, this.#gl.DYNAMIC_DRAW)
-               this.#gl.bindBuffer(this.#gl.UNIFORM_BUFFER, null)
-               this.#gl.bindBufferBase(this.#gl.UNIFORM_BUFFER, 0, this.#uboBuffer)
-               this.#gl.uniformBlockBinding(this.#program, this.#gl.getUniformBlockIndex(this.#program, 'UBO'), 0)
-
-               this.#workBuffer = this.#gl.createBuffer()
-               this.#gl.bindBuffer(this.#gl.UNIFORM_BUFFER, this.#workBuffer)
-               this.#gl.bufferData(this.#gl.UNIFORM_BUFFER, 32, this.#gl.STREAM_DRAW)
-               this.#gl.bindBuffer(this.#gl.UNIFORM_BUFFER, null)
-               this.#gl.bindBufferBase(this.#gl.UNIFORM_BUFFER, 1, this.#workBuffer)
-               this.#gl.uniformBlockBinding(this.#program, this.#gl.getUniformBlockIndex(this.#program, 'WORK'), 1)
-
-               this.#pixels = new Uint8Array(this.#gl.drawingBufferWidth * this.#gl.drawingBufferHeight * 4)
-               this.#query = this.#gl.createQuery()
-       }
-
-       /**
-       * Finds a nonce that satisfies the Nano proof-of-work requirements.
-       *
-       * @param {string} hash - Hexadecimal hash of previous block, or public key for new accounts
-       * @param {number} [threshold=0xfffffff8] - Difficulty of proof-of-work calculation
-       */
-       static async search (hash: string, threshold: number = 0xfffffff8): Promise<string> {
-               if (NanoPowGl.#gl == null) throw new Error('WebGL 2 is required')
-               if (!/^[A-F-a-f0-9]{64}$/.test(hash)) throw new Error(`invalid_hash ${hash}`)
-               if (typeof threshold !== 'number') throw new TypeError(`Invalid threshold ${threshold}`)
-               if (this.#gl == null) throw new Error('WebGL 2 is required')
-
-               /** Set up uniform buffer object */
-               const uboView = new DataView(new ArrayBuffer(144))
-               for (let i = 0; i < 64; i += 8) {
-                       const uint32 = hash.slice(i, i + 8)
-                       uboView.setUint32(i * 2, parseInt(uint32, 16))
-               }
-               uboView.setUint32(128, threshold, true)
-               uboView.setFloat32(132, NanoPowGl.#WORKLOAD - 1, true)
-               NanoPowGl.#gl.bindBuffer(NanoPowGl.#gl.UNIFORM_BUFFER, NanoPowGl.#uboBuffer)
-               NanoPowGl.#gl.bufferSubData(NanoPowGl.#gl.UNIFORM_BUFFER, 0, uboView)
-               NanoPowGl.#gl.bindBuffer(NanoPowGl.#gl.UNIFORM_BUFFER, null)
-
-               /** Start drawing to calculate one nonce per pixel */
-               let nonce = null
-               const work = new Uint8Array(8)
-               while (nonce == null) {
-                       this.draw(work)
-                       const found = await this.checkQueryResult()
-                       if (found) {
-                               nonce = this.readResult(work)
-                       }
-               }
-               return nonce
-       }
-
-       static draw (work: Uint8Array): void {
-               if (this.#gl == null || this.#query == null) throw new Error('WebGL 2 is required to draw and query pixels')
-               if (this.#workBuffer == null) throw new Error('Work buffer is required to draw')
-               this.#gl.clear(this.#gl.COLOR_BUFFER_BIT)
-
-               /** Upload work buffer */
-               crypto.getRandomValues(work)
-               this.#gl.bindBuffer(this.#gl.UNIFORM_BUFFER, this.#workBuffer)
-               this.#gl.bufferSubData(this.#gl.UNIFORM_BUFFER, 0, Uint32Array.from(work))
-               this.#gl.bindBuffer(this.#gl.UNIFORM_BUFFER, null)
-
-               this.#gl.beginQuery(this.#gl.ANY_SAMPLES_PASSED_CONSERVATIVE, this.#query)
-               this.#gl.drawArrays(this.#gl.TRIANGLES, 0, 6)
-               this.#gl.endQuery(this.#gl.ANY_SAMPLES_PASSED_CONSERVATIVE)
-       }
-
-       static async checkQueryResult (): Promise<boolean> {
-               if (this.#gl == null || this.#query == null) throw new Error('WebGL 2 is required to check query results')
-               if (this.#gl.getQueryParameter(this.#query, this.#gl.QUERY_RESULT_AVAILABLE)) {
-                       return this.#gl.getQueryParameter(this.#query, this.#gl.QUERY_RESULT)
-               }
-               /** Query result not yet available, check again in the next frame */
-               return new Promise((resolve, reject): void => {
-                       try {
-                               requestAnimationFrame(async (): Promise<void> => {
-                                       const result = await NanoPowGl.checkQueryResult()
-                                       resolve(result)
-                               })
-                       } catch (err) {
-                               reject(err)
-                       }
-               })
-       }
-
-       /**
-       * Reads pixels into the work buffer, checks every 4th pixel for the 'found'
-       * byte, converts the subsequent 3 pixels with the nonce byte values to a hex
-       * string, and returns the result.
-       *
-       * @param work - Buffer with the original random nonce value
-       * @returns Nonce as an 8-byte (16-char) hexadecimal string
-       */
-       static readResult (work: Uint8Array): string {
-               if (this.#gl == null) throw new Error('WebGL 2 is required to read pixels')
-               this.#gl.readPixels(0, 0, this.#gl.drawingBufferWidth, this.#gl.drawingBufferHeight, this.#gl.RGBA, this.#gl.UNSIGNED_BYTE, this.#pixels)
-               for (let i = 0; i < this.#pixels.length; i += 4) {
-                       if (this.#pixels[i] !== 0) {
-                               /** Return the work value with the custom bits */
-                               const hex = this.#hexify(work.subarray(4, 8)) + this.#hexify([
-                                       this.#pixels[i + 2],
-                                       this.#pixels[i + 3],
-                                       work[2] ^ (this.#pixels[i] - 1),
-                                       work[3] ^ (this.#pixels[i + 1] - 1)
-                               ])
-                               return hex
-                       }
-               }
-               throw new Error('Query reported result but nonce value not found')
-       }
-}
diff --git a/src/lib/nano-pow/classes/gpu.ts b/src/lib/nano-pow/classes/gpu.ts
deleted file mode 100644 (file)
index a09a11c..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-// SPDX-FileCopyrightText: 2024 Chris Duncan <chris@zoso.dev>
-// SPDX-License-Identifier: GPL-3.0-or-later
-// BLAKE2b hashing implementation derived from nano-webgl-pow by Ben Green <ben@latenightsketches.com> (https://github.com/numtel/nano-webgl-pow)
-/// <reference types="@webgpu/types" />
-import { NanoPowGpuComputeShader } from '../shaders/index.js'
-
-/**
-* Nano proof-of-work using WebGPU.
-*/
-export class NanoPowGpu {
-
-       // Initialize WebGPU
-       static #busy: boolean = false
-       static #device: GPUDevice | null = null
-       static #uboBuffer: GPUBuffer
-       static #gpuBuffer: GPUBuffer
-       static #cpuBuffer: GPUBuffer
-       static #bindGroupLayout: GPUBindGroupLayout
-       static #pipeline: GPUComputePipeline
-
-       static {
-               this.init()
-       }
-
-       // Initialize WebGPU
-       static async init (): Promise<void> {
-               if (this.#busy) return
-               this.#busy = true
-               // Request device and adapter
-               if (navigator.gpu == null) {
-                       throw new Error('WebGPU is not supported in this browser.')
-               }
-               try {
-                       const adapter = await navigator.gpu.requestAdapter()
-                       if (adapter == null) {
-                               throw new Error('WebGPU adapter refused by browser.')
-                       }
-                       const device = await adapter.requestDevice()
-                       if (!(device instanceof GPUDevice)) {
-                               throw new Error('WebGPU device failed to load.')
-                       }
-                       device.lost.then(this.reset)
-                       this.#device = device
-                       this.setup()
-               } catch (err) {
-                       throw new Error(`WebGPU initialization failed. ${err}`)
-               } finally {
-                       this.#busy = false
-               }
-       }
-
-       static setup (): void {
-               if (this.#device == null) throw new Error(`WebGPU device failed to load.`)
-               // Create buffers for writing GPU calculations and reading from Javascript
-               this.#uboBuffer = this.#device.createBuffer({
-                       size: 48,
-                       usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
-               })
-               this.#gpuBuffer = this.#device.createBuffer({
-                       size: 16,
-                       usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC
-               })
-               this.#cpuBuffer = this.#device.createBuffer({
-                       size: 16,
-                       usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ
-               })
-               // Create binding group data structure and use it later once UBO is known
-               this.#bindGroupLayout = this.#device.createBindGroupLayout({
-                       entries: [
-                               {
-                                       binding: 0,
-                                       visibility: GPUShaderStage.COMPUTE,
-                                       buffer: { type: 'uniform' },
-                               },
-                               {
-                                       binding: 1,
-                                       visibility: GPUShaderStage.COMPUTE,
-                                       buffer: { type: 'storage' },
-                               }
-                       ]
-               })
-               // Create pipeline to connect compute shader to binding layout
-               this.#pipeline = this.#device.createComputePipeline({
-                       layout: this.#device.createPipelineLayout({
-                               bindGroupLayouts: [this.#bindGroupLayout]
-                       }),
-                       compute: {
-                               entryPoint: 'main',
-                               module: this.#device.createShaderModule({
-                                       code: NanoPowGpuComputeShader
-                               })
-                       }
-               })
-       }
-
-       static reset (): void {
-               console.warn(`GPU device lost. Reinitializing...`)
-               NanoPowGpu.#cpuBuffer?.destroy()
-               NanoPowGpu.#gpuBuffer?.destroy()
-               NanoPowGpu.#uboBuffer?.destroy()
-               NanoPowGpu.#busy = false
-               NanoPowGpu.init()
-       }
-
-       /**
-       * Finds a nonce that satisfies the Nano proof-of-work requirements.
-       *
-       * @param {string} hash - Hexadecimal hash of previous block, or public key for new accounts
-       * @param {number} [threshold=0xfffffff8] - Difficulty of proof-of-work calculation
-       */
-       static async search (hash: string, threshold: number = 0xfffffff8): Promise<string> {
-               if (this.#busy) {
-                       return new Promise(resolve => {
-                               setTimeout(async () => {
-                                       const result = this.search(hash, threshold)
-                                       resolve(result)
-                               }, 100)
-                       })
-               }
-               this.#busy = true
-               if (!/^[A-Fa-f0-9]{64}$/.test(hash)) throw new TypeError(`Invalid hash ${hash}`)
-               if (typeof threshold !== 'number') throw new TypeError(`Invalid threshold ${threshold}`)
-
-               // Ensure WebGPU is initialized before calculating
-               let loads = 0
-               while (this.#device == null && loads < 20) {
-                       await new Promise(resolve => {
-                               setTimeout(resolve, 500)
-                       })
-               }
-               if (this.#device == null) throw new Error(`WebGPU device failed to load.`)
-
-               let nonce = 0n
-               do {
-                       // Set up uniform buffer object
-                       // Note: u32 size is 4, but total alignment must be multiple of 16
-                       const uboView = new DataView(new ArrayBuffer(48))
-                       for (let i = 0; i < 64; i += 8) {
-                               const uint32 = hash.slice(i, i + 8)
-                               uboView.setUint32(i / 2, parseInt(uint32, 16))
-                       }
-                       const random = Math.floor((Math.random() * 0xffffffff))
-                       uboView.setUint32(32, random, true)
-                       uboView.setUint32(36, threshold, true)
-                       this.#device.queue.writeBuffer(this.#uboBuffer, 0, uboView)
-
-                       // Reset `found` flag to 0u in WORK before each calculation
-                       this.#device.queue.writeBuffer(this.#gpuBuffer, 8, new Uint32Array([0]))
-
-                       // Bind UBO read and GPU write buffers
-                       const bindGroup = this.#device.createBindGroup({
-                               layout: this.#bindGroupLayout,
-                               entries: [
-                                       {
-                                               binding: 0,
-                                               resource: {
-                                                       buffer: this.#uboBuffer
-                                               },
-                                       },
-                                       {
-                                               binding: 1,
-                                               resource: {
-                                                       buffer: this.#gpuBuffer
-                                               },
-                                       },
-                               ],
-                       })
-
-                       // Create command encoder to issue commands to GPU and initiate computation
-                       const commandEncoder = this.#device.createCommandEncoder()
-                       const passEncoder = commandEncoder.beginComputePass()
-
-                       // Issue commands and end compute pass structure
-                       passEncoder.setPipeline(this.#pipeline)
-                       passEncoder.setBindGroup(0, bindGroup)
-                       passEncoder.dispatchWorkgroups(0xff, 0xff)
-                       passEncoder.end()
-
-                       // Copy 8-byte nonce and 4-byte found flag from GPU to CPU for reading
-                       commandEncoder.copyBufferToBuffer(this.#gpuBuffer, 0, this.#cpuBuffer, 0, 12)
-
-                       // End computation by passing array of command buffers to command queue for execution
-                       this.#device.queue.submit([commandEncoder.finish()])
-
-                       // Read results back to Javascript and then unmap buffer after reading
-                       let data = null
-                       try {
-                               await this.#cpuBuffer.mapAsync(GPUMapMode.READ)
-                               await this.#device.queue.onSubmittedWorkDone()
-                               data = new DataView(this.#cpuBuffer.getMappedRange().slice(0))
-                               this.#cpuBuffer.unmap()
-                       } catch (err) {
-                               console.warn(`Error getting data from GPU. ${err}`)
-                               return this.search(hash, threshold)
-                       }
-                       if (data == null) throw new Error(`Failed to get data from buffer.`)
-                       nonce = data.getBigUint64(0, true)
-                       this.#busy = !data.getUint32(8)
-               } while (this.#busy)
-               return nonce.toString(16).padStart(16, '0')
-       }
-}
diff --git a/src/lib/nano-pow/classes/index.ts b/src/lib/nano-pow/classes/index.ts
deleted file mode 100644 (file)
index b7298fa..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-import { NanoPowGl } from "./gl"
-import { NanoPowGpu } from "./gpu"
-
-export {
-       NanoPowGl,
-       NanoPowGpu
-}
diff --git a/src/lib/nano-pow/index.ts b/src/lib/nano-pow/index.ts
deleted file mode 100644 (file)
index 3e00b77..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-import {
-       NanoPowGpuComputeShader,
-       NanoPowGlFragmentShader,
-       NanoPowGlVertexShader
-} from "./shaders"
-
-import {
-       NanoPowGl,
-       NanoPowGpu
-} from "./classes/"
-
-export {
-       NanoPowGpuComputeShader,
-       NanoPowGlFragmentShader,
-       NanoPowGlVertexShader,
-       NanoPowGl,
-       NanoPowGpu
-}
diff --git a/src/lib/nano-pow/shaders/gl-fragment.ts b/src/lib/nano-pow/shaders/gl-fragment.ts
deleted file mode 100644 (file)
index 2179e16..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-export const NanoPowGlFragmentShader = `#version 300 es
-#pragma vscode_glsllint_stage: frag
-precision highp float;
-precision highp int;
-
-in vec2 uv_pos;
-out vec4 fragColor;
-
-// blockhash - array of precalculated block hash components
-// threshold - 0xfffffff8 for send/change blocks, 0xfffffe00 for all else
-// workload - Defines canvas size
-layout(std140) uniform UBO {
-       uint blockhash[8];
-       uint threshold;
-       float workload;
-};
-
-// Random work values
-// First 2 bytes will be overwritten by texture pixel position
-// Second 2 bytes will be modified if the canvas size is greater than 256x256
-// Last 4 bytes remain as generated externally
-layout(std140) uniform WORK {
-       uvec4 work[2];
-};
-
-// Defined separately from uint v[32] below as the original value is required
-// to calculate the second uint32 of the digest for threshold comparison
-const uint BLAKE2B_IV32_1 = 0x6A09E667u;
-
-// Both buffers represent 16 uint64s as 32 uint32s
-// because that's what GLSL offers, just like Javascript
-
-// Compression buffer, intialized to 2 instances of the initialization vector
-// The following values have been modified from the BLAKE2B_IV:
-// OUTLEN is constant 8 bytes
-// v[0] ^= 0x01010000u ^ uint(OUTLEN);
-// INLEN is constant 40 bytes: work value (8) + block hash (32)
-// v[24] ^= uint(INLEN);
-// It's always the "last" compression at this INLEN
-// v[28] = ~v[28];
-// v[29] = ~v[29];
-uint v[32] = uint[32](
-       0xF2BDC900u, 0x6A09E667u, 0x84CAA73Bu, 0xBB67AE85u,
-       0xFE94F82Bu, 0x3C6EF372u, 0x5F1D36F1u, 0xA54FF53Au,
-       0xADE682D1u, 0x510E527Fu, 0x2B3E6C1Fu, 0x9B05688Cu,
-       0xFB41BD6Bu, 0x1F83D9ABu, 0x137E2179u, 0x5BE0CD19u,
-       0xF3BCC908u, 0x6A09E667u, 0x84CAA73Bu, 0xBB67AE85u,
-       0xFE94F82Bu, 0x3C6EF372u, 0x5F1D36F1u, 0xA54FF53Au,
-       0xADE682F9u, 0x510E527Fu, 0x2B3E6C1Fu, 0x9B05688Cu,
-       0x04BE4294u, 0xE07C2654u, 0x137E2179u, 0x5BE0CD19u
-);
-// Input data buffer
-uint m[32];
-
-// These are offsets into the input data buffer for each mixing step.
-// They are multiplied by 2 from the original SIGMA values in
-// the C reference implementation, which refered to uint64s.
-const uint SIGMA82[192] = uint[192](
-       0u,2u,4u,6u,8u,10u,12u,14u,16u,18u,20u,22u,24u,26u,28u,30u,
-       28u,20u,8u,16u,18u,30u,26u,12u,2u,24u,0u,4u,22u,14u,10u,6u,
-       22u,16u,24u,0u,10u,4u,30u,26u,20u,28u,6u,12u,14u,2u,18u,8u,
-       14u,18u,6u,2u,26u,24u,22u,28u,4u,12u,10u,20u,8u,0u,30u,16u,
-       18u,0u,10u,14u,4u,8u,20u,30u,28u,2u,22u,24u,12u,16u,6u,26u,
-       4u,24u,12u,20u,0u,22u,16u,6u,8u,26u,14u,10u,30u,28u,2u,18u,
-       24u,10u,2u,30u,28u,26u,8u,20u,0u,14u,12u,6u,18u,4u,16u,22u,
-       26u,22u,14u,28u,24u,2u,6u,18u,10u,0u,30u,8u,16u,12u,4u,20u,
-       12u,30u,28u,18u,22u,6u,0u,16u,24u,4u,26u,14u,2u,8u,20u,10u,
-       20u,4u,16u,8u,14u,12u,2u,10u,30u,22u,18u,28u,6u,24u,26u,0u,
-       0u,2u,4u,6u,8u,10u,12u,14u,16u,18u,20u,22u,24u,26u,28u,30u,
-       28u,20u,8u,16u,18u,30u,26u,12u,2u,24u,0u,4u,22u,14u,10u,6u
-);
-
-// G mixing function
-void G (uint ix, uint iy, uint a, uint b, uint c, uint d) {
-       bool carry;
-       uint o0;
-       uint o1;
-       uint xor0;
-       uint xor1;
-
-       // a = a + b;
-       o0 = v[a] + v[b];
-       o1 = v[a+1u] + v[b+1u];
-       carry = o0 < v[a];
-       o1 = o1 + uint(mix(0.0, 1.0, float(carry)));
-       v[a] = o0;
-       v[a+1u] = o1;
-
-       // a = a + m[sigma[r][2*i+0]];
-       o0 = v[a] + m[ix];
-       o1 = v[a+1u] + m[ix+1u];
-       carry = o0 < v[a];
-       o1 = o1 + uint(mix(0.0, 1.0, float(carry)));
-       v[a] = o0;
-       v[a+1u] = o1;
-
-       // d = rotr64(d ^ a, 32);
-       xor0 = v[d] ^ v[a];
-       xor1 = v[d+1u] ^ v[a+1u];
-       v[d] = xor1;
-       v[d+1u] = xor0;
-
-       // c = c + d;
-       o0 = v[c] + v[d];
-       o1 = v[c+1u] + v[d+1u];
-       carry = o0 < v[c];
-       o1 = o1 + uint(mix(0.0, 1.0, float(carry)));
-       v[c] = o0;
-       v[c+1u] = o1;
-
-       // b = rotr64(b ^ c, 24);
-       xor0 = v[b] ^ v[c];
-       xor1 = v[b+1u] ^ v[c+1u];
-       v[b] = (xor0 >> 24u) ^ (xor1 << 8u);
-       v[b+1u] = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b;
-       o0 = v[a] + v[b];
-       o1 = v[a+1u] + v[b+1u];
-       carry = o0 < v[a];
-       o1 = o1 + uint(mix(0.0, 1.0, float(carry)));
-       v[a] = o0;
-       v[a+1u] = o1;
-
-       // a = a + m[sigma[r][2*i+1]];
-       o0 = v[a] + m[iy];
-       o1 = v[a+1u] + m[iy+1u];
-       carry = o0 < v[a];
-       o1 = o1 + uint(mix(0.0, 1.0, float(carry)));
-       v[a] = o0;
-       v[a+1u] = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v[d] ^ v[a];
-       xor1 = v[d+1u] ^ v[a+1u];
-       v[d] = (xor0 >> 16u) ^ (xor1 << 16u);
-       v[d+1u] = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d;
-       o0 = v[c] + v[d];
-       o1 = v[c+1u] + v[d+1u];
-       carry = o0 < v[c];
-       o1 = o1 + uint(mix(0.0, 1.0, float(carry)));
-       v[c] = o0;
-       v[c+1u] = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v[b] ^ v[c];
-       xor1 = v[b+1u] ^ v[c+1u];
-       v[b] = (xor1 >> 31u) ^ (xor0 << 1u);
-       v[b+1u] = (xor0 >> 31u) ^ (xor1 << 1u);
-}
-
-void main() {
-       int i;
-       uvec4 u_work0 = work[0u];
-       uvec4 u_work1 = work[1u];
-       uint uv_x = uint(uv_pos.x * workload);
-       uint uv_y = uint(uv_pos.y * workload);
-       uint x_pos = uv_x % 256u;
-       uint y_pos = uv_y % 256u;
-       uint x_index = (uv_x - x_pos) / 256u;
-       uint y_index = (uv_y - y_pos) / 256u;
-
-       // First 2 work bytes are the x,y pos within the 256x256 area, the next
-       // two bytes are modified from the random generated value, XOR'd with
-       // the x,y area index of where this pixel is located
-       m[0u] = (x_pos ^ (y_pos << 8u) ^ ((u_work0.b ^ x_index) << 16u) ^ ((u_work0.a ^ y_index) << 24u));
-
-       // Remaining bytes are un-modified from the random generated value
-       m[1u] = (u_work1.r ^ (u_work1.g << 8u) ^ (u_work1.b << 16u) ^ (u_work1.a << 24u));
-
-       // Block hash
-       for (uint i = 0u; i < 8u; i = i + 1u) {
-               m[i+2u] = blockhash[i];
-       }
-
-       // twelve rounds of mixing
-       for(uint i = 0u; i < 12u; i = i + 1u) {
-               G(SIGMA82[i * 16u + 0u], SIGMA82[i * 16u + 1u], 0u, 8u, 16u, 24u);
-               G(SIGMA82[i * 16u + 2u], SIGMA82[i * 16u + 3u], 2u, 10u, 18u, 26u);
-               G(SIGMA82[i * 16u + 4u], SIGMA82[i * 16u + 5u], 4u, 12u, 20u, 28u);
-               G(SIGMA82[i * 16u + 6u], SIGMA82[i * 16u + 7u], 6u, 14u, 22u, 30u);
-               G(SIGMA82[i * 16u + 8u], SIGMA82[i * 16u + 9u], 0u, 10u, 20u, 30u);
-               G(SIGMA82[i * 16u + 10u], SIGMA82[i * 16u + 11u], 2u, 12u, 22u, 24u);
-               G(SIGMA82[i * 16u + 12u], SIGMA82[i * 16u + 13u], 4u, 14u, 16u, 26u);
-               G(SIGMA82[i * 16u + 14u], SIGMA82[i * 16u + 15u], 6u, 8u, 18u, 28u);
-       }
-
-       // Pixel data is multipled by threshold test result (0 or 1)
-       // First 4 bytes insignificant, only calculate digest of second 4 bytes
-       if ((BLAKE2B_IV32_1 ^ v[1u] ^ v[17u]) > threshold) {
-               fragColor = vec4(
-                       float(x_index + 1u)/255.0, // +1 to distinguish from 0 (unsuccessful) pixels
-                       float(y_index + 1u)/255.0, // Same as previous
-                       float(x_pos)/255.0, // Return the 2 custom bytes used in work value
-                       float(y_pos)/255.0  // Second custom byte
-               );
-       } else {
-               discard;
-       }
-}
-`
diff --git a/src/lib/nano-pow/shaders/gl-vertex.ts b/src/lib/nano-pow/shaders/gl-vertex.ts
deleted file mode 100644 (file)
index 5480627..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-export const NanoPowGlVertexShader = `#version 300 es
-#pragma vscode_glsllint_stage: vert
-precision highp float;
-layout (location=0) in vec4 position;
-layout (location=1) in vec2 uv;
-
-out vec2 uv_pos;
-
-void main() {
-       uv_pos = uv;
-       gl_Position = position;
-}
-`
diff --git a/src/lib/nano-pow/shaders/gpu-compute.ts b/src/lib/nano-pow/shaders/gpu-compute.ts
deleted file mode 100644 (file)
index 2e7c140..0000000
+++ /dev/null
@@ -1,7667 +0,0 @@
-export const NanoPowGpuComputeShader = `
-struct UBO {
-       blockhash: array<vec4<u32>, 2>,
-       random: u32,
-       threshold: u32
-};
-@group(0) @binding(0) var<uniform> ubo: UBO;
-
-struct WORK {
-       nonce: vec2<u32>,
-       found: atomic<u32>
-};
-@group(0) @binding(1) var<storage, read_write> work: WORK;
-
-/**
-* Defined separately from uint v[32] below as the original value is required
-* to calculate the second uint32 of the digest for threshold comparison
-*/
-const BLAKE2B_IV32_1: u32 = 0x6A09E667u;
-
-/**
-* Main compute function
-* 8-byte work is split into two 4-byte u32. Low 4 bytes are random u32 from
-* UBO. High 4 bytes are the random value XOR'd with index of each thread.
-*/
-@compute @workgroup_size(256)
-fn main(@builtin(global_invocation_id) global_id: vec3<u32>) {
-       if (atomicLoad(&work.found) != 0u) { return; }
-
-       let threshold: u32 = ubo.threshold;
-
-       /**
-       * Initialize (nonce||blockhash) concatenation
-       */
-       var m0: u32 = ubo.random ^ global_id.x;
-       var m1: u32 = ubo.random ^ global_id.y;
-       var m2: u32 = ubo.blockhash[0u].x;
-       var m3: u32 = ubo.blockhash[0u].y;
-       var m4: u32 = ubo.blockhash[0u].z;
-       var m5: u32 = ubo.blockhash[0u].w;
-       var m6: u32 = ubo.blockhash[1u].x;
-       var m7: u32 = ubo.blockhash[1u].y;
-       var m8: u32 = ubo.blockhash[1u].z;
-       var m9: u32 = ubo.blockhash[1u].w;
-
-       /**
-       * Compression buffer intialized to 2 instances of initialization vector
-       * The following values have been modified from the BLAKE2B_IV:
-       * OUTLEN is constant 8 bytes
-       * v[0u] ^= 0x01010000u ^ uint(OUTLEN);
-       * INLEN is constant 40 bytes: work value (8) + block hash (32)
-       * v[24u] ^= uint(INLEN);
-       * It is always the "last" compression at this INLEN
-       * v[28u] = ~v[28u];
-       * v[29u] = ~v[29u];
-       */
-       var v0: u32 = 0xF2BDC900u;
-       var v1: u32 = 0x6A09E667u;
-       var v2: u32 = 0x84CAA73Bu;
-       var v3: u32 = 0xBB67AE85u;
-       var v4: u32 = 0xFE94F82Bu;
-       var v5: u32 = 0x3C6EF372u;
-       var v6: u32 = 0x5F1D36F1u;
-       var v7: u32 = 0xA54FF53Au;
-       var v8: u32 = 0xADE682D1u;
-       var v9: u32 = 0x510E527Fu;
-       var v10: u32 = 0x2B3E6C1Fu;
-       var v11: u32 = 0x9B05688Cu;
-       var v12: u32 = 0xFB41BD6Bu;
-       var v13: u32 = 0x1F83D9ABu;
-       var v14: u32 = 0x137E2179u;
-       var v15: u32 = 0x5BE0CD19u;
-       var v16: u32 = 0xF3BCC908u;
-       var v17: u32 = 0x6A09E667u;
-       var v18: u32 = 0x84CAA73Bu;
-       var v19: u32 = 0xBB67AE85u;
-       var v20: u32 = 0xFE94F82Bu;
-       var v21: u32 = 0x3C6EF372u;
-       var v22: u32 = 0x5F1D36F1u;
-       var v23: u32 = 0xA54FF53Au;
-       var v24: u32 = 0xADE682F9u;
-       var v25: u32 = 0x510E527Fu;
-       var v26: u32 = 0x2B3E6C1Fu;
-       var v27: u32 = 0x9B05688Cu;
-       var v28: u32 = 0x04BE4294u;
-       var v29: u32 = 0xE07C2654u;
-       var v30: u32 = 0x137E2179u;
-       var v31: u32 = 0x5BE0CD19u;
-
-
-
-
-
-       /**
-       * Twelve rounds of G mixing as part of BLAKE2b compression step.
-       * Each sigma r index correlates with the reference implementation, but each
-       * sigma i index, and each v index, is doubled due to using two u32 array
-       * elements to represent one uint64_t.
-       */
-       var o0: u32;
-       var o1: u32;
-       var xor0: u32;
-       var xor1: u32;
-
-       /****************************************************************************
-       *                                                                                                                               ROUND(0)                                                                                                                                        *
-       ****************************************************************************/
-
-       /**
-       * r=0, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v0 + m0;
-       o1 = v1 + m1;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v0 + m2;
-       o1 = v1 + m3;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=0, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v2 + m4;
-       o1 = v3 + m5;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v2 + m6;
-       o1 = v3 + m7;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=0, i=2(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v4 + m8;
-       o1 = v5 + m9;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=0, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=0, i=4(x2), a=v[0-1], b=v[10-11], c=v[20-21], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=0, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=0, i=6(x2), a=v[4-6], b=v[14-15], c=v[16-17], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=0, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /****************************************************************************
-       *                                                                                                                               ROUND(1)                                                                                                                                        *
-       ****************************************************************************/
-
-       /**
-       * r=1, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=1, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v2 + m8;
-       o1 = v3 + m9;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=1, i=2(x2), a=v[4-5], b=v[12-13], c=v[20-21], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=1, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=1, i=4(x2), a=v[0-1], b=v[11-12], c=v[21-22], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v0 + m2;
-       o1 = v1 + m3;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=1, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v2 + m0;
-       o1 = v3 + m1;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v2 + m4;
-       o1 = v3 + m5;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=1, i=6(x2), a=v[4-5], b=v[14-15], c=v[16-17], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=1, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v6 + m6;
-       o1 = v7 + m7;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /****************************************************************************
-       *                                                                                                                               ROUND(2)                                                                                                                                        *
-       ****************************************************************************/
-
-       /**
-       * r=2, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=2, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v2 + m0;
-       o1 = v3 + m1;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=2, i=2(x2), a=v[4-5], b=v[12-13], c=v[20-21], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v4 + m4;
-       o1 = v5 + m5;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=2, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=2, i=4(x2), a=v[0-1], b=v[10-11], c=v[20-21], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=2, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v2 + m6;
-       o1 = v3 + m7;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=2, i=6(x2), a=v[4-5], b=v[14-15], c=v[16-17], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v4 + m2;
-       o1 = v5 + m3;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=2, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v6 + m8;
-       o1 = v7 + m9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /****************************************************************************
-       *                                                                                                                               ROUND(3)                                                                                                                                        *
-       ****************************************************************************/
-
-       /**
-       * r=3, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=3, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v2 + m6;
-       o1 = v3 + m7;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v2 + m2;
-       o1 = v3 + m3;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=3, i=2(x2), a=v[4-5], b=v[12-13], c=v[20-21], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=3, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=3, i=4(x2), a=v[0-1], b=v[10-11], c=v[20-21], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v0 + m4;
-       o1 = v1 + m5;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=3, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=3, i=6(x2), a=v[4-5], b=v[14-15], c=v[16-17], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v4 + m8;
-       o1 = v5 + m9;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v4 + m0;
-       o1 = v5 + m1;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=3, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /****************************************************************************
-       *                                                                                                                               ROUND(4)                                                                                                                                        *
-       ****************************************************************************/
-
-       /**
-       * r=4, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v0 + m0;
-       o1 = v1 + m1;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=4, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=4, i=2(x2), a=v[4-5], b=v[12-13], c=v[20-21], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v4 + m4;
-       o1 = v5 + m5;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v4 + m8;
-       o1 = v5 + m9;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=4, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=4, i=4(x2), a=v[0-1], b=v[10-11], c=v[20-21], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v0 + m2;
-       o1 = v1 + m3;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=4, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=4, i=6(x2), a=v[4-5], b=v[14-15], c=v[16-17], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=4, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v6 + m6;
-       o1 = v7 + m7;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /****************************************************************************
-       *                                                                                                                               ROUND(5)                                                                                                                                        *
-       ****************************************************************************/
-
-       /**
-       * r=5, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v0 + m4;
-       o1 = v1 + m5;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=5, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=5, i=2(x2), a=v[4-5], b=v[12-13], c=v[20-21], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v4 + m0;
-       o1 = v5 + m1;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=5, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v6 + m6;
-       o1 = v7 + m7;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=5, i=4(x2), a=v[0-1], b=v[10-11], c=v[20-21], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v0 + m8;
-       o1 = v1 + m9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=5, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=5, i=6(x2), a=v[4-5], b=v[14-15], c=v[16-17], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=5, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v6 + m2;
-       o1 = v7 + m3;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /****************************************************************************
-       *                                                                                                                               ROUND(6)                                                                                                                                        *
-       ****************************************************************************/
-
-       /**
-       * r=6, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=6, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v2 + m2;
-       o1 = v3 + m3;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=6, i=2(x2), a=v[4-5], b=v[12-13], c=v[20-21], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=6, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v6 + m8;
-       o1 = v7 + m9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=6, i=4(x2), a=v[0-1], b=v[10-11], c=v[20-21], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v0 + m0;
-       o1 = v1 + m1;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=6, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v2 + m6;
-       o1 = v3 + m7;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=6, i=6(x2), a=v[4-5], b=v[14-15], c=v[16-17], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v4 + m4;
-       o1 = v5 + m5;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=6, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /****************************************************************************
-       *                                                                                                                               ROUND(7)                                                                                                                                        *
-       ****************************************************************************/
-
-       /**
-       * r=7, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=7, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=7, i=2(x2), a=v[4-5], b=v[12-13], c=v[20-21], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v4 + m2;
-       o1 = v5 + m3;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=7, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v6 + m6;
-       o1 = v7 + m7;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=7, i=4(x2), a=v[0-1], b=v[10-11], c=v[20-21], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v0 + m0;
-       o1 = v1 + m1;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=7, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v2 + m8;
-       o1 = v3 + m9;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=7, i=6(x2), a=v[4-5], b=v[14-15], c=v[16-17], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=7, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v6 + m4;
-       o1 = v7 + m5;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /****************************************************************************
-       *                                                                                                                               ROUND(8)                                                                                                                                        *
-       ****************************************************************************/
-
-       /**
-       * r=8, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=8, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=8, i=2(x2), a=v[4-5], b=v[12-13], c=v[20-21], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v4 + m6;
-       o1 = v5 + m7;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=8, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v6 + m0;
-       o1 = v7 + m1;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=8, i=4(x2), a=v[0-1], b=v[10-11], c=v[20-21], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v0 + m4;
-       o1 = v1 + m5;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=8, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=8, i=6(x2), a=v[4-5], b=v[14-15], c=v[16-17], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v4 + m2;
-       o1 = v5 + m3;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v4 + m8;
-       o1 = v5 + m9;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=8, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /****************************************************************************
-       *                                                                                                                               ROUND(9)                                                                                                                                        *
-       ****************************************************************************/
-
-       /**
-       * r=9, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v0 + m4;
-       o1 = v1 + m5;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=9, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v2 + m8;
-       o1 = v3 + m9;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=9, i=2(x2), a=v[4-5], b=v[12-13], c=v[20-21], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-  // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=9, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v6 + m2;
-       o1 = v7 + m3;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=9, i=4(x2), a=v[0-1], b=v[10-11], c=v[20-21], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=9, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=9, i=6(x2), a=v[4-5], b=v[14-15], c=v[16-17], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v4 + m6;
-       o1 = v5 + m7;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=9, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v6 + m0;
-       o1 = v7 + m1;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /****************************************************************************
-       *                                                                                                                               ROUND(10)                                                                                                                                       *
-       ****************************************************************************/
-
-       /**
-       * r=10, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v0 + m0;
-       o1 = v1 + m1;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v0 + m2;
-       o1 = v1 + m3;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=10, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v2 + m4;
-       o1 = v3 + m5;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v2 + m6;
-       o1 = v3 + m7;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=10, i=2(x2), a=v[4-5], b=v[12-13], c=v[20-21], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v4 + m8;
-       o1 = v5 + m9;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=10, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=10, i=4(x2), a=v[0-1], b=v[10-11], c=v[20-21], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=10, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=10, i=6(x2), a=v[4-5], b=v[14-15], c=v[16-17], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=10, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /****************************************************************************
-       *                                                                                                                               ROUND(11)                                                                                                                                       *
-       ****************************************************************************/
-
-       /**
-       * r=11, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v0;
-       xor1 = v25 ^ v1;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v24;
-       o1 = v17 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v16;
-       xor1 = v9 ^ v17;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=11, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v2 + m8;
-       o1 = v3 + m9;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v10;
-       o1 = v3 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v2 + 0u;
-       // o1 = v3 + 0u;
-       // if (v2 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v2 = o0;
-       // v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v2;
-       xor1 = v27 ^ v3;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v26;
-       o1 = v19 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v18;
-       xor1 = v11 ^ v19;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=11, i=2(x2), a=v[4-5], b=v[12-13], c=v[20-21], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v12;
-       o1 = v5 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v4;
-       xor1 = v29 ^ v5;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v28;
-       o1 = v21 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v20;
-       xor1 = v13 ^ v21;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=11, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v14;
-       o1 = v7 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v6;
-       xor1 = v31 ^ v7;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v30;
-       o1 = v23 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v22;
-       xor1 = v15 ^ v23;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=11, i=4(x2), a=v[0-1], b=v[10-11], c=v[20-21], d=v[30-31]
-       */
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v0 + m2;
-       o1 = v1 + m3;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = xor1;
-       v31 = xor0;
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v11 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v0 + v10;
-       o1 = v1 + v11;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v0 + 0u;
-       // o1 = v1 + 0u;
-       // if (v0 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v0 = o0;
-       // v1 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v30 ^ v0;
-       xor1 = v31 ^ v1;
-       v30 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v31 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v20 + v30;
-       o1 = v21 + v31;
-       o1 = o1 + select(0u, 1u, o0 < v20);
-       v20 = o0;
-       v21 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v10 ^ v20;
-       xor1 = v11 ^ v21;
-       v10 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v11 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=11, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25]
-       */
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // a = a + m[sigma[r][2*i+0]]
-       o0 = v2 + m0;
-       o1 = v3 + m1;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = xor1;
-       v25 = xor0;
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v13 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v2 + v12;
-       o1 = v3 + v13;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v2 + m4;
-       o1 = v3 + m5;
-       o1 = o1 + select(0u, 1u, o0 < v2);
-       v2 = o0;
-       v3 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v24 ^ v2;
-       xor1 = v25 ^ v3;
-       v24 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v25 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v22 + v24;
-       o1 = v23 + v25;
-       o1 = o1 + select(0u, 1u, o0 < v22);
-       v22 = o0;
-       v23 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v12 ^ v22;
-       xor1 = v13 ^ v23;
-       v12 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v13 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=11, i=6(x2), a=v[4-5], b=v[14-15], c=v[16-17], d=v[26-27]
-       */
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = xor1;
-       v27 = xor0;
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v15 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v4 + v14;
-       o1 = v5 + v15;
-       o1 = o1 + select(0u, 1u, o0 < v4);
-       v4 = o0;
-       v5 = o1;
-
-       // // a = a + m[sigma[r][2*i+1]]
-       // // skip since adding 0u does nothing
-       // o0 = v4 + 0u;
-       // o1 = v5 + 0u;
-       // if (v4 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v4 = o0;
-       // v5 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v26 ^ v4;
-       xor1 = v27 ^ v5;
-       v26 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v27 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v16 + v26;
-       o1 = v17 + v27;
-       o1 = o1 + select(0u, 1u, o0 < v16);
-       v16 = o0;
-       v17 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v14 ^ v16;
-       xor1 = v15 ^ v17;
-       v14 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v15 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /**
-       * r=11, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29]
-       */
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // // a = a + m[sigma[r][2*i+0]]
-       // // skip since adding 0u does nothing
-       // o0 = v6 + 0u;
-       // o1 = v7 + 0u;
-       // if (v6 > 0xFFFFFFFFu - 0u) {
-       //      o1 = o1 + 1u;
-       // }
-       // v6 = o0;
-       // v7 = o1;
-
-       // d = rotr64(d ^ a, 32)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = xor1;
-       v29 = xor0;
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 24)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor0 >> 24u) ^ (xor1 << 8u);
-       v9 = (xor1 >> 24u) ^ (xor0 << 8u);
-
-       // a = a + b
-       o0 = v6 + v8;
-       o1 = v7 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // a = a + m[sigma[r][2*i+1]]
-       o0 = v6 + m6;
-       o1 = v7 + m7;
-       o1 = o1 + select(0u, 1u, o0 < v6);
-       v6 = o0;
-       v7 = o1;
-
-       // d = rotr64(d ^ a, 16)
-       xor0 = v28 ^ v6;
-       xor1 = v29 ^ v7;
-       v28 = (xor0 >> 16u) ^ (xor1 << 16u);
-       v29 = (xor1 >> 16u) ^ (xor0 << 16u);
-
-       // c = c + d
-       o0 = v18 + v28;
-       o1 = v19 + v29;
-       o1 = o1 + select(0u, 1u, o0 < v18);
-       v18 = o0;
-       v19 = o1;
-
-       // b = rotr64(b ^ c, 63)
-       xor0 = v8 ^ v18;
-       xor1 = v9 ^ v19;
-       v8 = (xor1 >> 31u) ^ (xor0 << 1u);
-       v9 = (xor0 >> 31u) ^ (xor1 << 1u);
-
-
-
-
-
-       /****************************************************************************
-       *                                                                                                                       NONCE CHECK                                                                                                                                     *
-       ****************************************************************************/
-
-       /**
-       * Set nonce if it passes the threshold and no other thread has set it
-       */
-       if ((BLAKE2B_IV32_1 ^ v1 ^ v17) > threshold && atomicLoad(&work.found) == 0u) {
-               atomicStore(&work.found, 1u);
-               work.nonce.x = m0;
-               work.nonce.y = m1;
-       }
-       return;
-}
-`
diff --git a/src/lib/nano-pow/shaders/index.ts b/src/lib/nano-pow/shaders/index.ts
deleted file mode 100644 (file)
index 9629261..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-import { NanoPowGpuComputeShader } from "./gpu-compute"
-import { NanoPowGlFragmentShader } from "./gl-fragment"
-import { NanoPowGlVertexShader } from "./gl-vertex"
-
-export {
-       NanoPowGpuComputeShader,
-       NanoPowGlFragmentShader,
-       NanoPowGlVertexShader
-}
index bdb75d9ccf6595244e2ec6c538f72977d21d50a6..d1358bc4ed000c46b27a96c31229f5ce6b6c431d 100644 (file)
@@ -2,10 +2,10 @@
 // SPDX-License-Identifier: GPL-3.0-or-later
 import { default as Bip44Ckd } from '#~/workers/bip44-ckd.js'
 import { default as NanoNaCl } from '#~/workers/nano-nacl.js'
-import { default as NanoPow } from '#~/workers/nano-pow.js'
+import { default as NanoPowWorker } from '#~/workers/nano-pow.js'
 
 export {
        Bip44Ckd,
        NanoNaCl,
-       NanoPow
+       NanoPowWorker
 }
index ef6860a4b38bda83a96bad8306f442f610dda9c8..cbba79ddccf3d0bf78772281725d22228ddb5587 100644 (file)
@@ -1,8 +1,6 @@
 // SPDX-FileCopyrightText: 2024 Chris Duncan <chris@zoso.dev>
 // SPDX-License-Identifier: GPL-3.0-or-later
 import { WorkerInterface } from '#~/pool.js'
-import { NanoPowGpuComputeShader, NanoPowGlFragmentShader, NanoPowGlVertexShader } from '#nano-pow/shaders/index.js'
-import { NanoPowGl, NanoPowGpu } from '#nano-pow/classes/index.js'
 import { NanoPow } from 'nano-pow'
 
 /**
@@ -35,11 +33,7 @@ export class NanoPowWorker extends WorkerInterface {
 }
 
 export default `
-       const NanoPowGpuComputeShader = \`${NanoPowGpuComputeShader}\`
-       const NanoPowGlFragmentShader = \`${NanoPowGlFragmentShader}\`
-       const NanoPowGlVertexShader = \`${NanoPowGlVertexShader}\`
-       const NanoPowGl = ${NanoPowGl}
-       const NanoPowGpu = ${NanoPowGpu}
-       const WorkerInterface = ${WorkerInterface}
        const NanoPow = ${NanoPow}
+       const WorkerInterface = ${WorkerInterface}
+       const NanoPowWorker = ${NanoPowWorker}
 `
index 41c393d4f87600d264dd9d01242b314cf1df230c..8d008c5b9ab58acddd1354e9479fc19566bbef07 100644 (file)
@@ -4,11 +4,10 @@
 import { Account } from './lib/account.js'
 import { Blake2b } from './lib/blake2b.js'
 import { SendBlock, ReceiveBlock, ChangeBlock } from './lib/block.js'
-import { NanoPowGl, NanoPowGpu } from '#nano-pow'
 import { Rpc } from './lib/rpc.js'
 import { Rolodex } from './lib/rolodex.js'
 import { Safe } from './lib/safe.js'
 import { Tools } from './lib/tools.js'
 import { Bip44Wallet, Blake2bWallet, LedgerWallet } from './lib/wallet.js'
 
-export { Account, Blake2b, SendBlock, ReceiveBlock, ChangeBlock, NanoPowGl as PowGl, NanoPowGpu, Rpc, Rolodex, Safe, Tools, Bip44Wallet, Blake2bWallet, LedgerWallet }
+export { Account, Blake2b, SendBlock, ReceiveBlock, ChangeBlock, Rpc, Rolodex, Safe, Tools, Bip44Wallet, Blake2bWallet, LedgerWallet }
index 73f8b916a5a34fe073731eb722a85527530c45c2..46382a7534d59ac4da63747d75f26520c6f42062 100644 (file)
@@ -5,13 +5,15 @@
 
 import { assert, average, skip, suite, test } from '#test/GLOBALS.mjs'
 import { NANO_TEST_VECTORS } from '#test/VECTORS.js'
-import { PowGl, NanoPowGpu, SendBlock } from '#dist/main.js'
+import { SendBlock } from '#dist/main.js'
+import { NanoPow } from 'nano-pow'
 import 'nano-webgl-pow'
 
 await suite('Block performance', async () => {
        const COUNT = 0x200
 
-       await test(`PowGpu: Calculate proof-of-work for 6 unique block hashes`, async () => {
+       await test(`NanoPow: Calculate proof-of-work for 6 unique block hashes`, async () => {
+               if (NanoPow == null) throw new Error('Failed to import NanoPow')
                const times = []
                const hashes = [
                        NANO_TEST_VECTORS.PRIVATE_0,
@@ -23,33 +25,7 @@ await suite('Block performance', async () => {
                ]
                for (let i = 0; i < 6; i++) {
                        const start = performance.now()
-                       const work = await NanoPowGpu.search(hashes[i])
-                       const end = performance.now()
-                       times.push(end - start)
-                       console.log(`${work} (${end - start} ms) ${hashes[i]}`)
-               }
-               const { total, arithmetic, harmonic, geometric, min, max } = average(times)
-               console.log(`Total: ${total} ms`)
-               console.log(`Average: ${arithmetic} ms`)
-               console.log(`Harmonic: ${harmonic} ms`)
-               console.log(`Geometric: ${geometric} ms`)
-               console.log(`Minimum: ${min} ms`)
-               console.log(`Maximum: ${max} ms`)
-       })
-
-       await skip(`PowGl: Calculate proof-of-work for 6 unique block hashes`, async () => {
-               const times = []
-               const hashes = [
-                       NANO_TEST_VECTORS.PRIVATE_0,
-                       NANO_TEST_VECTORS.PRIVATE_1,
-                       NANO_TEST_VECTORS.PRIVATE_2,
-                       NANO_TEST_VECTORS.PUBLIC_0,
-                       NANO_TEST_VECTORS.PUBLIC_1,
-                       NANO_TEST_VECTORS.PUBLIC_2
-               ]
-               for (let i = 0; i < 6; i++) {
-                       const start = performance.now()
-                       const work = await PowGl.search(hashes[i])
+                       const work = await NanoPow.search(hashes[i])
                        const end = performance.now()
                        times.push(end - start)
                        console.log(`${work} (${end - start} ms) ${hashes[i]}`)