From d3618b23349f4c5cbf8f606941741a067462e2e6 Mon Sep 17 00:00:00 2001 From: Rafael Gonzaga Date: Fri, 11 Oct 2024 15:26:42 -0300 Subject: [PATCH 01/93] benchmark: adjust config for deepEqual object MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This should make easier to read on benchmark/compare and when generating graphs PR-URL: https://github.com/nodejs/node/pull/55254 Reviewed-By: Vinícius Lourenço Claro Cardoso --- benchmark/assert/deepequal-object.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/benchmark/assert/deepequal-object.js b/benchmark/assert/deepequal-object.js index 4238129b292b45..c480faf10cbae8 100644 --- a/benchmark/assert/deepequal-object.js +++ b/benchmark/assert/deepequal-object.js @@ -4,10 +4,9 @@ const common = require('../common.js'); const assert = require('assert'); const bench = common.createBenchmark(main, { - n: [25, 2e2, 2e3], - size: [1e2, 1e3, 1e4], - strict: [1], - method: ['deepEqual', 'notDeepEqual'], + n: [25, 2e2], + size: [1e2, 1e4], + method: ['deepEqual', 'notDeepEqual', 'deepStrictEqual', 'notDeepStrictEqual'], }, { combinationFilter: (p) => { return p.size === 1e4 && p.n === 25 || @@ -30,10 +29,7 @@ function createObj(size, add = '') { })); } -function main({ size, n, method, strict }) { - if (strict) { - method = method.replace('eep', 'eepStrict'); - } +function main({ size, n, method }) { const fn = assert[method]; const actual = createObj(size); From d9fde2c45b4603a9f84a66b38e0499fd24ef209a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Oct 2024 19:18:24 +0000 Subject: [PATCH 02/93] meta: bump step-security/harden-runner from 2.9.1 to 2.10.1 Bumps [step-security/harden-runner](https://github.com/step-security/harden-runner) from 2.9.1 to 2.10.1. - [Release notes](https://github.com/step-security/harden-runner/releases) - [Commits](https://github.com/step-security/harden-runner/compare/5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde...91182cccc01eb5e619899d80e4e971d6181294a7) --- updated-dependencies: - dependency-name: step-security/harden-runner dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] PR-URL: https://github.com/nodejs/node/pull/55220 Reviewed-By: Luigi Pinca --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 5bda200cc79aa7..5c6a6edd7d91e1 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -33,7 +33,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 with: egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs From 5ffc721d09a2b6300b1008422e32a1ef1a8228d4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Oct 2024 19:18:39 +0000 Subject: [PATCH 03/93] meta: bump github/codeql-action from 3.26.6 to 3.26.10 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.26.6 to 3.26.10. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/4dd16135b69a43b6c8efb853346f8437d92d3c93...e2b3eafc8d227b0241d48be5f425d47c2d750a13) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] PR-URL: https://github.com/nodejs/node/pull/55221 Reviewed-By: Luigi Pinca --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 5c6a6edd7d91e1..c23dae03fc036c 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -73,6 +73,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: Upload to code-scanning - uses: github/codeql-action/upload-sarif@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6 + uses: github/codeql-action/upload-sarif@e2b3eafc8d227b0241d48be5f425d47c2d750a13 # v3.26.10 with: sarif_file: results.sarif From 335a507027cf112b5738a69c8c438c9a4d46d935 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Oct 2024 19:19:28 +0000 Subject: [PATCH 04/93] meta: bump codecov/codecov-action from 4.5.0 to 4.6.0 Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4.5.0 to 4.6.0. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/e28ff129e5465c2c0dcc6f003fc735cb6ae0c673...b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] PR-URL: https://github.com/nodejs/node/pull/55222 Reviewed-By: Luigi Pinca --- .github/workflows/coverage-linux-without-intl.yml | 2 +- .github/workflows/coverage-linux.yml | 2 +- .github/workflows/coverage-windows.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/coverage-linux-without-intl.yml b/.github/workflows/coverage-linux-without-intl.yml index b2354a0b5d07a2..744e9b30b89ab7 100644 --- a/.github/workflows/coverage-linux-without-intl.yml +++ b/.github/workflows/coverage-linux-without-intl.yml @@ -79,7 +79,7 @@ jobs: - name: Clean tmp run: rm -rf coverage/tmp && rm -rf out - name: Upload - uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4.5.0 + uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4.6.0 with: directory: ./coverage token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/coverage-linux.yml b/.github/workflows/coverage-linux.yml index f9afc41e478fca..68f98937e73ba5 100644 --- a/.github/workflows/coverage-linux.yml +++ b/.github/workflows/coverage-linux.yml @@ -79,7 +79,7 @@ jobs: - name: Clean tmp run: rm -rf coverage/tmp && rm -rf out - name: Upload - uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4.5.0 + uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4.6.0 with: directory: ./coverage token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/coverage-windows.yml b/.github/workflows/coverage-windows.yml index 642cd18e10e8e6..ced6ff661c297a 100644 --- a/.github/workflows/coverage-windows.yml +++ b/.github/workflows/coverage-windows.yml @@ -71,7 +71,7 @@ jobs: - name: Clean tmp run: npx rimraf ./coverage/tmp - name: Upload - uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4.5.0 + uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4.6.0 with: directory: ./coverage token: ${{ secrets.CODECOV_TOKEN }} From 59923d137ed430e1bbdfaeda1d314291848bfd21 Mon Sep 17 00:00:00 2001 From: Aviv Keller Date: Fri, 11 Oct 2024 15:26:47 -0400 Subject: [PATCH 05/93] test: update `compression` wpt PR-URL: https://github.com/nodejs/node/pull/55191 Reviewed-By: Luigi Pinca --- test/fixtures/wpt/README.md | 2 +- .../decompression-buffersource.tentative.any.js | 12 ++++++------ test/fixtures/wpt/versions.json | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/test/fixtures/wpt/README.md b/test/fixtures/wpt/README.md index 2c8a8b9b03afa9..fe5486edb75474 100644 --- a/test/fixtures/wpt/README.md +++ b/test/fixtures/wpt/README.md @@ -11,7 +11,7 @@ See [test/wpt](../../wpt/README.md) for information on how these tests are run. Last update: - common: https://github.com/web-platform-tests/wpt/tree/dbd648158d/common -- compression: https://github.com/web-platform-tests/wpt/tree/5aa50dd415/compression +- compression: https://github.com/web-platform-tests/wpt/tree/da8d6860b2/compression - console: https://github.com/web-platform-tests/wpt/tree/767ae35464/console - dom/abort: https://github.com/web-platform-tests/wpt/tree/0143fe244b/dom/abort - dom/events: https://github.com/web-platform-tests/wpt/tree/0a811c5161/dom/events diff --git a/test/fixtures/wpt/compression/decompression-buffersource.tentative.any.js b/test/fixtures/wpt/compression/decompression-buffersource.tentative.any.js index abb51751c8b4a3..f4316ba1fc876e 100644 --- a/test/fixtures/wpt/compression/decompression-buffersource.tentative.any.js +++ b/test/fixtures/wpt/compression/decompression-buffersource.tentative.any.js @@ -49,7 +49,7 @@ const bufferSourceChunksForDeflate = [ }, { name: 'Float16Array', - value: new Float16Array(new Uint8Array(compressedBytesWithDeflate).buffer) + value: () => new Float16Array(new Uint8Array(compressedBytesWithDeflate).buffer) }, { name: 'Float32Array', @@ -100,7 +100,7 @@ const bufferSourceChunksForGzip = [ }, { name: 'Float16Array', - value: new Float16Array(new Uint8Array(compressedBytesWithGzip).buffer) + value: () => new Float16Array(new Uint8Array(compressedBytesWithGzip).buffer) }, { name: 'Float32Array', @@ -151,7 +151,7 @@ const bufferSourceChunksForDeflateRaw = [ }, { name: 'Float16Array', - value: new Float16Array(new Uint8Array(compressedBytesWithDeflateRaw).buffer) + value: () => new Float16Array(new Uint8Array(compressedBytesWithDeflateRaw).buffer) }, { name: 'Float32Array', @@ -172,7 +172,7 @@ for (const chunk of bufferSourceChunksForDeflate) { const ds = new DecompressionStream('deflate'); const reader = ds.readable.getReader(); const writer = ds.writable.getWriter(); - const writePromise = writer.write(chunk.value); + const writePromise = writer.write(typeof chunk.value === 'function' ? chunk.value() : chunk.value); writer.close(); const { value } = await reader.read(); assert_array_equals(Array.from(value), deflateExpectedChunkValue, 'value should match'); @@ -184,7 +184,7 @@ for (const chunk of bufferSourceChunksForGzip) { const ds = new DecompressionStream('gzip'); const reader = ds.readable.getReader(); const writer = ds.writable.getWriter(); - const writePromise = writer.write(chunk.value); + const writePromise = writer.write(typeof chunk.value === 'function' ? chunk.value() : chunk.value); writer.close(); const { value } = await reader.read(); assert_array_equals(Array.from(value), gzipExpectedChunkValue, 'value should match'); @@ -196,7 +196,7 @@ for (const chunk of bufferSourceChunksForDeflateRaw) { const ds = new DecompressionStream('deflate-raw'); const reader = ds.readable.getReader(); const writer = ds.writable.getWriter(); - const writePromise = writer.write(chunk.value); + const writePromise = writer.write(typeof chunk.value === 'function' ? chunk.value() : chunk.value); writer.close(); const { value } = await reader.read(); assert_array_equals(Array.from(value), deflateRawExpectedChunkValue, 'value should match'); diff --git a/test/fixtures/wpt/versions.json b/test/fixtures/wpt/versions.json index a93ad1762feb80..bc907734cdb7c9 100644 --- a/test/fixtures/wpt/versions.json +++ b/test/fixtures/wpt/versions.json @@ -4,7 +4,7 @@ "path": "common" }, "compression": { - "commit": "5aa50dd4151b5bc1d04d5505366c6e27df30af5b", + "commit": "da8d6860b22271d8ef4dc7894509692aaab9adf8", "path": "compression" }, "console": { From 055d2b891960e8c648e4a2dc7f0371aaa6bc825c Mon Sep 17 00:00:00 2001 From: "Node.js GitHub Bot" Date: Sat, 12 Oct 2024 12:34:27 +0200 Subject: [PATCH 06/93] deps: update amaro to 0.1.9 PR-URL: https://github.com/nodejs/node/pull/55348 Reviewed-By: Marco Ippolito Reviewed-By: Antoine du Hamel Reviewed-By: Zeyu "Alex" Yang --- deps/amaro/dist/index.js | 146 +++++++++++++++++------------------ deps/amaro/dist/package.json | 2 +- deps/amaro/package.json | 2 +- src/amaro_version.h | 2 +- 4 files changed, 76 insertions(+), 76 deletions(-) diff --git a/deps/amaro/dist/index.js b/deps/amaro/dist/index.js index 0122d2a3bd7df9..1ff0cd5799b4f1 100644 --- a/deps/amaro/dist/index.js +++ b/deps/amaro/dist/index.js @@ -37,13 +37,25 @@ var require_wasm = __commonJS({ var imports = {}; imports["__wbindgen_placeholder__"] = module2.exports; var wasm; - var { TextEncoder, TextDecoder } = require("util"); + var { TextDecoder, TextEncoder } = require("util"); var heap = new Array(128).fill(void 0); heap.push(void 0, null, true, false); function getObject(idx) { return heap[idx]; } - var WASM_VECTOR_LEN = 0; + var heap_next = heap.length; + function dropObject(idx) { + if (idx < 132) return; + heap[idx] = heap_next; + heap_next = idx; + } + function takeObject(idx) { + const ret = getObject(idx); + dropObject(idx); + return ret; + } + var cachedTextDecoder = new TextDecoder("utf-8", { ignoreBOM: true }); + cachedTextDecoder.decode(); var cachedUint8ArrayMemory0 = null; function getUint8ArrayMemory0() { if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { @@ -51,6 +63,18 @@ var require_wasm = __commonJS({ } return cachedUint8ArrayMemory0; } + function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); + } + function addHeapObject(obj) { + if (heap_next === heap.length) heap.push(heap.length + 1); + const idx = heap_next; + heap_next = heap[idx]; + heap[idx] = obj; + return idx; + } + var WASM_VECTOR_LEN = 0; var cachedTextEncoder = new TextEncoder("utf-8"); var encodeString = typeof cachedTextEncoder.encodeInto === "function" ? function(arg, view) { return cachedTextEncoder.encodeInto(arg, view); @@ -102,30 +126,6 @@ var require_wasm = __commonJS({ } return cachedDataViewMemory0; } - var cachedTextDecoder = new TextDecoder("utf-8", { ignoreBOM: true }); - cachedTextDecoder.decode(); - function getStringFromWasm0(ptr, len) { - ptr = ptr >>> 0; - return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); - } - var heap_next = heap.length; - function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - heap[idx] = obj; - return idx; - } - function dropObject(idx) { - if (idx < 132) return; - heap[idx] = heap_next; - heap_next = idx; - } - function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; - } function debugString(val) { const type = typeof val; if (type == "number" || type == "boolean" || val == null) { @@ -247,6 +247,43 @@ ${val.stack}`; function __wbg_adapter_57(arg0, arg1, arg2, arg3) { wasm.__wbindgen_export_5(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3)); } + module2.exports.__wbindgen_object_drop_ref = function(arg0) { + takeObject(arg0); + }; + module2.exports.__wbindgen_boolean_get = function(arg0) { + const v = getObject(arg0); + const ret = typeof v === "boolean" ? v ? 1 : 0 : 2; + return ret; + }; + module2.exports.__wbindgen_string_new = function(arg0, arg1) { + const ret = getStringFromWasm0(arg0, arg1); + return addHeapObject(ret); + }; + module2.exports.__wbindgen_string_get = function(arg0, arg1) { + const obj = getObject(arg1); + const ret = typeof obj === "string" ? obj : void 0; + var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); + var len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }; + module2.exports.__wbindgen_is_string = function(arg0) { + const ret = typeof getObject(arg0) === "string"; + return ret; + }; + module2.exports.__wbindgen_is_object = function(arg0) { + const val = getObject(arg0); + const ret = typeof val === "object" && val !== null; + return ret; + }; + module2.exports.__wbindgen_is_undefined = function(arg0) { + const ret = getObject(arg0) === void 0; + return ret; + }; + module2.exports.__wbindgen_in = function(arg0, arg1) { + const ret = getObject(arg0) in getObject(arg1); + return ret; + }; module2.exports.__wbg_new_b85e72ed1bfd57f9 = function(arg0, arg1) { try { var state0 = { a: arg0, b: arg1 }; @@ -281,18 +318,6 @@ ${val.stack}`; const ret = getObject(arg0)[arg1 >>> 0]; return addHeapObject(ret); }; - module2.exports.__wbindgen_string_get = function(arg0, arg1) { - const obj = getObject(arg1); - const ret = typeof obj === "string" ? obj : void 0; - var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - var len1 = WASM_VECTOR_LEN; - getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); - getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); - }; - module2.exports.__wbindgen_string_new = function(arg0, arg1) { - const ret = getStringFromWasm0(arg0, arg1); - return addHeapObject(ret); - }; module2.exports.__wbg_new_525245e2b9901204 = function() { const ret = new Object(); return addHeapObject(ret); @@ -300,31 +325,6 @@ ${val.stack}`; module2.exports.__wbg_set_f975102236d3c502 = function(arg0, arg1, arg2) { getObject(arg0)[takeObject(arg1)] = takeObject(arg2); }; - module2.exports.__wbindgen_object_drop_ref = function(arg0) { - takeObject(arg0); - }; - module2.exports.__wbindgen_is_string = function(arg0) { - const ret = typeof getObject(arg0) === "string"; - return ret; - }; - module2.exports.__wbindgen_is_object = function(arg0) { - const val = getObject(arg0); - const ret = typeof val === "object" && val !== null; - return ret; - }; - module2.exports.__wbindgen_is_undefined = function(arg0) { - const ret = getObject(arg0) === void 0; - return ret; - }; - module2.exports.__wbindgen_in = function(arg0, arg1) { - const ret = getObject(arg0) in getObject(arg1); - return ret; - }; - module2.exports.__wbindgen_boolean_get = function(arg0) { - const v = getObject(arg0); - const ret = typeof v === "boolean" ? v ? 1 : 0 : 2; - return ret; - }; module2.exports.__wbg_self_3093d5d1f7bcb682 = function() { return handleError(function() { const ret = self.self; @@ -437,6 +437,13 @@ ${val.stack}`; module2.exports.__wbindgen_throw = function(arg0, arg1) { throw new Error(getStringFromWasm0(arg0, arg1)); }; + module2.exports.__wbg_then_95e6edc0f89b73b1 = function(arg0, arg1) { + const ret = getObject(arg0).then(getObject(arg1)); + return addHeapObject(ret); + }; + module2.exports.__wbg_queueMicrotask_12a30234db4045d3 = function(arg0) { + queueMicrotask(getObject(arg0)); + }; module2.exports.__wbg_queueMicrotask_48421b3cc9052b68 = function(arg0) { const ret = getObject(arg0).queueMicrotask; return addHeapObject(ret); @@ -458,19 +465,12 @@ ${val.stack}`; const ret = false; return ret; }; - module2.exports.__wbg_then_95e6edc0f89b73b1 = function(arg0, arg1) { - const ret = getObject(arg0).then(getObject(arg1)); - return addHeapObject(ret); - }; - module2.exports.__wbg_queueMicrotask_12a30234db4045d3 = function(arg0) { - queueMicrotask(getObject(arg0)); - }; - module2.exports.__wbindgen_closure_wrapper5961 = function(arg0, arg1, arg2) { - const ret = makeMutClosure(arg0, arg1, 520, __wbg_adapter_38); + module2.exports.__wbindgen_closure_wrapper7256 = function(arg0, arg1, arg2) { + const ret = makeMutClosure(arg0, arg1, 687, __wbg_adapter_38); return addHeapObject(ret); }; var { Buffer: Buffer2 } = require("node:buffer"); - var bytes = Buffer2.from("AGFzbQEAAAABvwRHYAJ/fwBgAX8AYAJ/fwF/YAN/f38Bf2ADf39/AGABfwF/YAR/f39/AGAFf39/f38AYAR/f39/AX9gAAF/YAZ/f39/f38AYAN/f38BfmAHf39/f39/fwBgA39+fwBgBX9/f39/AX9gAX8BfmAHf39/f39/fwF/YAN/fn4AYAJ/fwF+YAAAYAZ/f39/f38Bf2ACfn8AYAN/fn4Bf2ABfgF+YAR/fn9/AGABfgBgA35/fwBgAn5/AX9gAn5+AGAEf3x/fwF/YA1/f39/f39/f39/f39/AGACf3wAYAZ/f39/fn8AYA9/f39/f39/f39/f39/f38Bf2AFf35/f38AYAZ/f39+f38AYAJ/fgF/YAN/f34Bf2ACfn4BfmAOf39/f39/f39/f39/f38Bf2AIf39/f39/f38Bf2AJf39/f39/f39/AGAEf35/fgF+YAZ/fn9/f38AYAl/f39/f39+fn4AYAV/f39/fwF8YAN+f38Bf2ABfwF8YAN/f38BfGACf34AYBd/f39/f39/f39/f39/f39/f39/f39/fwF/YBN/f39/f39/f39/f39/f39/f39/AX9gC39/f39/f39/f39/AX9gA39+fwF/YAR/f398AGAEfn5+fwF+YAF8AX9gBH9/f38BfGAHfn5+f39/fwF+YAABfmACfn8BfmAEf39/fgBgBH9/fn8AYAN/fH8AYAV/f31/fwBgBH99f38AYAV/f3x/fwBgBH98f38AYAV/f35/fwBgAnx8AXxgAXwBfAKmEisYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fGl9fd2JnX25ld19iODVlNzJlZDFiZmQ1N2Y5AAIYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fE19fd2JpbmRnZW5faXNfZmFsc3kABRhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18kX193YmdfZ2V0d2l0aHJlZmtleV9lZGMyYzg5NjBmMGYxMTkxAAIYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fHV9fd2JnX2xlbmd0aF9hZTIyMDc4MTY4YjcyNmY1AAUYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fGl9fd2JnX2dldF8zYmFhNzI4ZjlkNThkM2Y2AAIYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fFV9fd2JpbmRnZW5fc3RyaW5nX2dldAAAGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxVfX3diaW5kZ2VuX3N0cmluZ19uZXcAAhhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18aX193YmdfbmV3XzUyNTI0NWUyYjk5MDEyMDQACRhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18aX193Ymdfc2V0X2Y5NzUxMDIyMzZkM2M1MDIABBhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18aX193YmluZGdlbl9vYmplY3RfZHJvcF9yZWYAARhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18UX193YmluZGdlbl9pc19zdHJpbmcABRhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18UX193YmluZGdlbl9pc19vYmplY3QABRhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18XX193YmluZGdlbl9pc191bmRlZmluZWQABRhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18NX193YmluZGdlbl9pbgACGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxZfX3diaW5kZ2VuX2Jvb2xlYW5fZ2V0AAUYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fG19fd2JnX3NlbGZfMzA5M2Q1ZDFmN2JjYjY4MgAJGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXx1fX3diZ193aW5kb3dfM2JjZmM0ZDMxYmMwMTJmOAAJGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXyFfX3diZ19nbG9iYWxUaGlzXzg2YjIyMmUxM2JkZjMyZWQACRhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18dX193YmdfZ2xvYmFsX2U1YTNmZTU2ZjhiZTk0ODUACRhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18gX193YmdfbmV3bm9hcmdzXzc2MzEzYmQ2ZmYzNWQwZjIAAhhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18bX193YmdfY2FsbF8xMDg0YTExMTMyOWU2OGNlAAIYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fG19fd2JnX2NhbGxfODlhZjA2MGI0ZTE1MjNmMgADGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXx1fX3diZ19sZW5ndGhfODMzOWZjZjVkOGVjZDEyZQAFGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxFfX3diaW5kZ2VuX21lbW9yeQAJGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXx1fX3diZ19idWZmZXJfYjdiMDhhZjc5YjBiMDk3NAAFGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxpfX3diZ19uZXdfZWExODgzZTFlNWU4NjY4NgAFGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxpfX3diZ19zZXRfZDFlNzllMjM4ODUyMGYxOAAEGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxRfX3diaW5kZ2VuX2Vycm9yX25ldwACGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxlfX3diaW5kZ2VuX2pzdmFsX2xvb3NlX2VxAAIYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fFV9fd2JpbmRnZW5fbnVtYmVyX2dldAAAGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXyxfX3diZ19pbnN0YW5jZW9mX1VpbnQ4QXJyYXlfMjQ3YTkxNDI3NTMyNDk5ZQAFGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXy1fX3diZ19pbnN0YW5jZW9mX0FycmF5QnVmZmVyXzYxZGZjMzE5ODM3M2M5MDIABRhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18eX193YmdfZW50cmllc183YTBlMDYyNTU0NTZlYmNkAAUYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fG19fd2JpbmRnZW5fb2JqZWN0X2Nsb25lX3JlZgAFGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxdfX3diaW5kZ2VuX2RlYnVnX3N0cmluZwAAGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxBfX3diaW5kZ2VuX3Rocm93AAAYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fJV9fd2JnX3F1ZXVlTWljcm90YXNrXzQ4NDIxYjNjYzkwNTJiNjgABRhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18WX193YmluZGdlbl9pc19mdW5jdGlvbgAFGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXx5fX3diZ19yZXNvbHZlXzU3MDQ1OGNiOTlkNTZhNDMABRhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18SX193YmluZGdlbl9jYl9kcm9wAAUYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fG19fd2JnX3RoZW5fOTVlNmVkYzBmODliNzNiMQACGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXyVfX3diZ19xdWV1ZU1pY3JvdGFza18xMmEzMDIzNGRiNDA0NWQzAAEYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fHl9fd2JpbmRnZW5fY2xvc3VyZV93cmFwcGVyNTk2MQADA5kllyUKCgAAAAYEBAYGBAcEBwcQFB0EAAQCAAAEBAAAAAcAAAMCAAIKBAcHAAAFAAQEBgYKBAAABAAGBgwMAAACAgIGBgAEBAAAAAAAAAAABgAeHg4IBgYGBgIEBwQEAAACAAQAAAQGBwcKCgAAHwYAAAYFBQAAICAGBAQEAwEAAAQCBAAEBAoMAAAEEAAHAAAHAAAAAAAABAQABAAAAwQEAwACBgYOAAgFAAIGBgUFBAQAAAAGBgABAQEEAAAAAgACBAQEAAQBAAEAAQAGDAYHAAAAAQQHBgQABAEAAQAAAQQEBAYAAQEABgQKAAcABAQEBAQEAAEBAQIBAwEBBgYABgEAAAEBAQcMBgYMACEIACcEAAcACAgAAAcEBAAAAgIMAAQAAAACBgAEAAwEAQIMCAwBCgwABwEHKAcQAAAFBwEBAAMAAAAAAQQABQYCAQAAAAAEBAYGBAgGAAcABQYBBAkBBAcCAQAHAAEBAQACAAUHHQQEAAYDAAACBgEEAAAEBAACAgIAAAADAAAKCgYGKQQUBQoDAAEOAAgBAAAKAAYABgMEBAQFAAIAAAMKBAAAAgIGBgAABAAAAwAABgoKAAEBBAAABAAEAgACACoAAAAABAEBABQHByIAAAIAAQcBAAEBAQEBAQEAAQoDAQEGAQEAAAAAAAAAAAAAAAIEAQEBAQEBAQEBAQEBFAIABgQEBgEEBwEHAhgAAAAABAAHBAcBAAAPEQYBAAECCAQAAgAAAAUEAAQGAAABAQEBBwEEAQEBAQUAAAAHFQErAgQAEAAAAAEAAAQAAQAJAQAAAAAAAAAUAwACASwFBgYEBgECAQYABAIBAAQEAAQAAAAEBAoEAgEFBQQACgAEAgAAAAEAAAQBAA8FAC0ABgYCBAYCGAAGAgACAQEEDhAEBAIAAAAABwcEBAABAQEBAAYGDAADAQUEAgAEBAQuBQcAAAcCLwAGAQgBAAICAgAEBgAEBgIHBwIAAgEABgQEAgQAAAIABAgABAAEAAMAAQQAAQcBBAQEADACAAIEACMAAQEAAgAIAAABAgMCAAQAAQUKAAQBCgAEBAMACAEAAgIABAUCAAIEAAAEAAQCAA8CIwANAAAAAAIBBQQAAAEEABAAAgIBAA0BAQABAQACDQEEBAAEAAQCAAAABAQCAQEAAQAAAAQEAQQCAgAGAggCAAAEAgIAAQEABAECAgAAAQAEAQABBAQAAAQBAAQBAQQCBgEEBAQAAAAAAQAAATEAAAAAAgEAAAEBAgEBAQEBAAEABAAABAAABAABAAICBAEHAQABAQAGBggGBAMKBgQGBgYGAAYBBAoEBjIEBAQCAgQEAAAABAIAAwEAAAQEAQABBAEBAQIBAQEBAQEEAQEBAQYBAQQEAAQBAAECAAQABjMQAgQEAAEAAQAIAQAGAgMCBgAAAxIIAwgOAAQBBAEEBAACBAEBAAAAAAACIQYCAgAiBgAGBQEAAgcCAgEBAAQMAgQHBAQABAEkAAYCBAQABTQCBAUBBgIGAAYFAgEFAQACAAMAAgIAAgUABQAQEwACAAAAAAAAAAAAAgAGAAAAAAAAAAUFBQASBAQCBQAAAQYGAAoBAgIAAQEAAA8AAQACAAEGAQAAAAAAAAAAAAAABAQDAAAAAAQCAAAFAAAAAAAAAAAAAAAAAgQHAAAABQEABgICAgIAAAAMAAICAgICAgICAgICAgICAgIBAAQAAQIGAgAAAAQEAQICAgICNQACBAICAgICAgICAgICAgICAgICAAAAAAACAAUAAAAIBAQABAIBBQYAAAAAAAAEAgUABQUABQMAAgACAAAAAAYAAgIAAQIEBgICAAEFBQUFBgAEBQQCAAAAAQEKAgECBwEAAAILAAACAgIBAQEAAg0OAAEAAgQFBgAABQIEAQAFAAcAAAAANgAAAAAAAAAAAAAAEQgBBwAGBQACAAUGAAAENwAGBgYGAAIAAAUKAAQFAQUlBwICBQADAQIIAAAEAQUAAwAFCgUBBAAABAIABQAAAAAAAAAHAA4CAgAAAAAAAAEAAAAFAAAAAAAAAAAAAAAEAAACAAAAAAAFAQAAAQQEAAgAAAAFBAIABAUDABEAAAEAAAEABgMCAgICAgEGAQICAAcIBgAAAAcCAgICAgICAgICAgICAAcBOAAAAAcAAgIEBAQEBAQCAAQDAgUAAQAAAAAAAQoBAAEFAQACAAMABwEDAQEBJQIBBgAACAQCBwMCAgABAgQFAAABBgYGAQIBAQEBAAEBAQEBBAEAAAQCBQUFDwEAAgICAgICAgICAgIAAAAABRMAAAAECAgAAQEABwICAgIAAAAAAAAABgABAAQEAgIEAAUFBAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUAAAAADQIAAwIBAQEBAQEBAQEBAQABAAABAAEEFwQABAAHAAQAAAQEBQIBAgIBAAACAgIAAAABBQQEBAIAAgAEAgAAABkSAAAFAQAEAgICAgIAAAAAAAAAAAAAAAAEAQAIAAAAAAUCAAEFAQQABwQGBAUFAAQHBwAHBwQBAQUCAgICAgICAgICAgICAgICAAACAgICAgAAAAAAAAEBDwAAAAAAAgQEAgICAAAZBAQEBAQEBQABAQECBQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAEBAAAAAAABAQAEAAAAAgQCAQICAQECAgECAgICAgICGgEBAAABAQEBAgEAAQIEAQEAAAcEAQMEBQUFBQYGBgICAQABAAAAAAAFAQAAAAQAAAAACQMEBAEAAAAAAAAAAAAAAAAAAAEBAAYPAAEBBgAAAQEFAQABAgACAgoAAAUEBQQBAQECAgIEAQABAAEBAQEBBAEBAQIEAgEAAgICAQABAgEEAgICAgICAgICAgICAgICAgECAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDQEBAAEBAQEAAQQSAQEFAwIAAAEBAAE5AQABAQEAAAAAAAAAAAAFAQQCBAAAAgQCCAYCAgIBAQAAAAEFAQEBAQABAgICAQEIAAABAQEBAQAAAAAABAQBBQEFAQEBOgECAgEAAQABAQABAQABAgECAQABDQQAAAQEBAQGAgICBQEEBQMFBAUFBQUFBQUABQQBAQEBAQEBBAAEAQEbAQQFAQEBAQEBAQABAQECDgI7AwQGBQIEAQABAQEBAQABAAAAAAAAAQsNAQEAAQAAAAAAAAAAAAEAAQEBAQEBAQABAQEBBAEAAAAAAQEBAAEFDwICBAgCBAABAQEBAQUIAgUCAgYFAQEBAQEBAAAGAAEBAQEGBAUHAAIWFgICBgICAQIAAAAAAAAAAAILAgICAgYGBgYCAAICAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABICBQIAAgAABQsGAAQXAQIGAAACAgECAgEBAQEBAQANAQEBAAEBAQEFAgEBAQEBAQEBAQEBBQYEERYTAQECEwECExMDAB8ABQMTEwIDAAICAAECBQUAAAEAAAEBBQIVAgAAAgkABQcGBwcFAQMCJgICAAEBAQEBAQEAAQAAAgUAAAUCAgIAAQEAAAAAAAE8AQEBAAAAABoAAQUFAQEBAQEBAAQBAQEBBgAEAAIDAAAAAAAABAEBBwgAAAAABCYAAAAAAQAFAgIEAQIAAQABBAEABAQABBEAAQECPQcABRIFBQEBAQEBAQYBAQEBAQEAAQAaAQQEAQEBAQEAAAQEAgICAQICAAEBAgIBAAABPgICAgIBAQAAAAkCAQEAAggFAQYCAgAAAAAAAQEBBQEBBgYGBgIBAQAAAAABBQEBAQE/AgICAQMAAAABAQQBAgcbAgsGAAAAAAECAgICAgUAAgIJAQEAAAAAAAECAAEAAQcACAIBAAEAAQESAQEAAQMAAAAACQUCBAAAAAAAABcAAAAAAAAAAAEbAAAEAAABAAAAAAASAAIUBAgIAgYFCAELAAYFCwIBAQQAAAIBCwYIBAgAAQEIAQgHDkBCRAADAQEBCwIBAQEBAAEBAQEBAQQBBAQAAAUGABYWAgYAAAAAFQAFBQIFAQUFAQEBBQEBAQEBAQEBAQICAgABAAIBAgUABAEFAQEBAQQEBQQBCAEEBAEACQIFAwgABAMABwQLBQAFAQEBBQEBBQUBAQUBAQEBCQELAQEBAQEBAQAAAQEAAQsAAQABAAEBAQEBAAEBAAkBAQEBAQEEAQEBAQkFAQEFAQEAAQABBAECAgEABAgIAQICAAEBAQEFAQEBAQIBAQUGBgEBAQEBAQIBAQEBAAAAAAABAAQEBAABAQEBAQABAAAAAAAAAAABAQEBAQEBAQEBAQEBAQsBAQEBAQEAAQEBAQEBAQEBAQEBAAAAAQEBAAEBAQECAQAAAAAAAAEBAQEAAAAAAAAGBwMCAAEFCQkJCQkJCQkJCQAAAAAAAQAAAAkJCQACAQABAQEBDwkCAQEBAQUBAAAAAAABAQsLAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAEBAQIBAQEBAAAAAAAAAAABAAUBAgICAAAABwADCwICBQAXAQEBFQ0AAQEDAQkBAQEBCQkJCQkBAQQBAQAAAAEBAQAAAAABAQEBAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAAAAAQAAAQAAAgEBAQAAAAAAAQEBAQEBAAIAAAAAAAAACQEBAAAAAAAAAgICAgEEAAEAAAQCAgICARERAAADAgICAgICAgQCAgICAgAGAgICAgUFAQEBAQEBAQEBBQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAEBAQAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAEBAQEBAQABAQEAAAAAAAAAAQEBAAAAAAAAAAABAQAAAAEBAQEBAQEBAQAAAAAAAAABAAAAAAAAAAABAQEBAQEBAQAAAQEBAQEBAQEBAQEBAQEBAAIAAAEBAQEBAAEBAQEBAQEAAQEBAQEBAQEBBAMBAwAAAAQAAAAAAAAAAQEBAQEBAQEBAAAAAAAAAgECBwIAAQEBBgEEBQUFBQUFBQEZAQEBAQEBAQEBAQEBAQEBBQEBAQEFBQUBAQEBAQEBAQEBAQEBAQEBAQEBAQEIAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQABAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQABAQEBAQEBAQEAAAABAAIAAAAAAQAAAAACAgQAAgEEAgEBAQEBAQEBAQEBAQEEAQUBAQEBAQEBBAAEAQEBAQEBAQEBAQEBAQEBAQEBAAEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAABAQEBAQEBAQQEBAEBAAAAAAAAAAABAQAAAQEBAQAABQQCAQICAwICAQMCCAAAAAABCAABAgIAAQUBAQEBAQEBAQEBAQEB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QZADaikDADcCACALQRBqIAJBiANqKQMANwIAIAtBCGogGikDADcCAEHwAEEIEP4aIg5BCjYCACAOQQRqIAJB6AZqQSQQ7yQaIA4gAzYCKEEAIQNBAAshBSACQcgHahCBHQwSCyAGBEAgAkH9ADoA6AYgASAJIAggAkHoBmoQ+xQLQQAhBgJAIAJBmANqQbCKzABBBRC3FUUNACAHEPMKIgRFDQAgBCgCAEEURw0AIAQtAARBDUcNACANIAwpAgA3AgAgASgCyAIhBCABQSU2AsgCIAEgASkD4AI3A5gDIA1BCGogDEEIaikCADcCACANQRBqIAxBEGooAgA2AgAgAiAENgLoBiACQegGahDgCEEBIQYLIAJB6AZqIgggARCUASACKALsBiETIAIoAugGIhdBBUcEQCACQdgDaiIfIBApAwAiMTcDACACQdADaiIgIAopAwAiMjcDACACIA8pAwAiMzcDyAMgHCAzNwMAIBxBCGogMjcDACAcQRBqIDE3AwAgAiATNgKsAyACIBc2AqgDIAJBkAFqIAJBqANqEOsVIAIgAikDkAE3AuADICRBFWogEkEVaiIEKQAANwAAICRBEGogEkEQaiIDKQEANwEAICRBCGogEkEIaiIFKQEANwEAICQgEikBADcBACACQQA6APoGIAJBAToAgQcgAiABLQDGAjoAhAcgAiABKQGqAjcA6AYgAiABKQGyAjcA8AYgAiABLwG6AjsA+AYgAiABKAC9AjYA+wYgAiABLwDBAjsA/wYgAiABLwHEAjsAggcgByAIELsGIAIgATYC6AMgAkGIAWogAkGYA2oQ6gkCQAJAIAIoAogBIgggAigCjAEiCUGqiMwAQQMQrhhFBEAgCCAJQa2IzABBAxCuGA0BIAggCUGwiswAQQUQrhgNAkHAv8wAQShB5IDMABC8EgALIAIoAvQCIQZBACEIIAJBADsA1wQgAkEAOgDMBSACQQA6AI8IIAIgBjYC2AYgAiABLQCwAjoA1gQgAiABKAGqAjYA0AQgAiABLwGuAjsA1AQgAiABKQCzAjcA2QQgAiABKQC7AjcA4QQgAiABKADDAjYA6QQgFkEVaiAEKQAANwAAIBZBEGogAykBADcBACAWQQhqIAUpAQA3AQAgFiASKQEANwEAIAcgAkHQBGoQuwYgAiABNgLIByACQQA2AuAFIAJC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Ig5C/wGDQgRSDQMMAgsgAyAONwI8IAMgCjYCOCADQTBqIAUQ4wkgA0HwAGogASAIQZACIANBOGogAygCMCADKAI0IANB4ABqIANBzABqELgDIAMtAHBBBEcEQCADKQNwIg5C/wGDQgRSDQMLIANBOGogASAFELsEIAMtADhBBEcEQCADKQM4Ig5C/wGDQgRSDQMLAkAgAy0ATEUEQCADQQE6AEwMAQsgASgCREUNACADQShqIAUQ4wkgA0E4aiABIAMoAixBABCoAiADLQA4QQRGDQAgAykDOCIOQv8Bg0IEUg0DCyADLQBgBEAgASABKAIsQQFrNgIsIANBADoAYAsgBEEBayEEIANBIGogBRDjCSAFQShqIQVBASEKIAMpAyAhDgwACwALIANBOGogASAIIAdFQZACEJkMIAMtADhBBEYNASADKQM4Ig5C/wGDQgRRDQELIA5C/wGDQgRSDQELAkAgCUUNACADQQA2AjggA0HwAGogASADQThqQfDvzgBBARCaDyADLQBwQQRGDQAgAykDcCIOQv8Bg0IEUg0BCwJAIAIoAiRFDQAgA0EANgI4IANB8ABqIAEgA0E4akH4hswAQQEQmg8gAy0AcEEERwRAIAMpA3AiDkL/AYNCBFINAgsCQCABLQBNDQAgA0E4aiABEIAOIAMtADhBBEYNACADKQM4Ig5C/wGDQgRSDQILIANBOGogAkEkaiABEIkLIAMtADhBBEcEQCADKQM4Ig5C/wGDQgRSDQILIAEtAE0NACADQThqIAEQgA4gAy0AOEEERg0AIAMpAzgiDkL/AYNCBFINAQsgA0EANgI4IANB8ABqIAEgA0E4akG1hswAQQIQmg8gAy0AcEEERwRAIAMpA3AiDkL/AYNCBFINAQsCQCACKAIQIgQoAgBBgICAgHhHBEAgA0E4aiABIARBARCXBCADLQA4QQRGDQUgAykDOCIOQv8Bg0IEUQ0FDAELIAEgASgCLEEBajYCLCADQThqIARBBGogARDrISADLQA4QQRHBEAgAykDOCIOQv8Bg0IEUg0BCyABIAEoAixBAWs2AiwMBAsgDkL/AYNCBFENAwsgDkL/AYNCBFENAiAAIA43AgAMAwsgAigCECEHIANBOGogASACKAIMIgRBABDPAgJAIAMtADhBBEcEQCADKQM4Ig5C/wGDQgRSDQELAkAg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IAxBCGogBBCGFAsgBi0AFgRAIAxBGGoiBCARKAIIQZa/xgBBHiAKKAIAEJADIAxBCGogBBCGFAsgBi0AFwRAIAxBGGoiBCARKAIIQbS/xgBBHSAKKAIAEJADIAxBCGogBBCGFAsgBi0AGARAIAxBGGoiBCARKAIIQdG/xgBBFyAKKAIAEJADIAxBCGogBBCGFAsgBi0AGQRAIAxBGGoiBCARKAIIQei/xgBBGiAKKAIAEJADIAxBCGogBBCGFAsgBi0AGgRAIAxBGGoiBCARKAIIQYLAxgBBGCAKKAIAEJADIAxBCGogBBCGFAsgBi0AGwRAIAxBGGoiBCARKAIIQZrAxgBBGSAKKAIAEJADIAxBCGogBBCGFAsgBi0AHARAIAxBGGoiBCARKAIIQbPAxgBBGCAKKAIAEJADIAxBCGogBBCGFAsgBi0AHQRAIAxBGGoiBCARKAIIQcvAxgBBIyAKKAIAEJADIAxBCGogBBCGFAsgBi0AHgRAIAxBGGoiBCARKAIIQe7AxgBBIyAKKAIAEJADIAxBCGogBBCGFAsgBi0AHwRAIAxBGGoiBCARKAIIQZHBxgBBISAKKAIAEJADIAxBCGogBBCGFAsgBi0AIARAIAxBGGoiBCARKAIIQbLBxgBBCSAKKAIAEJADIAxBCGogBBCGFAsgBi0AIQRAIAxBGGoiBCARKAIIQbvBxgBBDCAKKAIAEJADIAxBCGogBBCGFAsgBi0AIgRAIAxBGGoiBCARKAIIQcfBxgBBCCAKKAIAEJADIAxBCGogBBCGFAsgBi0AIwRAIAxBGGoiBCARKAIIQc/BxgBBCCAKKAIAEJADIAxBCGogBBCGFAsgBi0AJARAIAxBGGoiBCARKAIIQdfBxgBBHCAKKAIAEJADIAxBCGogBBCGFAsgBi0AJQRAIAxBGGoiBCARKAIIQfPBxgBBDyAKKAIAEJADIAxBCGogBBCGFAsgBi0AJgRAIAxBGGoiBCARKAIIQYLCxgBBCyAKKAIAEJADIAxBCGogBBCGFAsgBi0AJwRAIAxBGGoiBCARKAIIQfCGzABBByAKKAIAEJADIAxBCGogBBCGFAsgBi0AKARAIAxBGGoiBCARKAIIQaqIzABBAyAKKAIAEJADIAxBCGogBBCGFAsgBi0AKQRAIAxBGGoiBCARKAIIQY3CxgBBECAKKAIAEJAD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NgJEIAMgAjYCQCADIANBI2o2AlAgAyADQSRqNgJMIANBQGsQyQkiAkUEQCADQQA2AswBIANCgICAgMAANwLEASADQcQBaiECDAcLIANBgAFqQQQQ1QwgAygChAEhBCADKAKAAQ0IIAMoAogBIgkgAjYCACADQQE2AswBIAMgCTYCyAEgAyAENgLEASADQZABaiADQdAAaigCADYCACADQYgBaiADQcgAaikCADcDACADIAMpAkA3A4ABQQQhBUEBIQIDQCADIANBgAFqEMkJIgQ2AigCQCAEBEAgAiADKALEAUcNASADQcQBaiACQQEQuAggAygCyAEhCQwBCyADQShqEL4fIANBxAFqIgYhAiADKALMAUEBRw0IIANBADYCzAEgA0GAAWoiACADKALIASgCACICQcAAEO8kGgwJCyAFIAlqIAQ2AgAgAyACQQFqIgI2AswBIAVBBGohBQwACwALIAQgAygCiAEQoiAACyABKAIoIgEoAgBBG0YNBwwJCyAFQRlGDQELIAVBDGsiAkElSyACQQdGcg0AIAVBD0cNBwJAIBVBAWsOAwAICAELIBgNBgsgACAEEKsBDAYLA0AgAiAJRgRAIANBNGoiBiECIAMoAjxBAUcNAiADQQA2AjwgA0GAAWoiACADKAI4KAIAIgJBwAAQ7yQaDAMFIAdBAWohByACQQRqAkACQAJAAkAgAigCACIGKAIAQRlHBEAgAhDuFyECIAcgCkYNASADQTRqIAIgA0EjahDzAxCwCgwECyAGKAIMIQ8gBkEANgIMIAYoAgQhBSAGKAIIIQIgBkKAgICAwAA3AgQgAiAPQQJ0IgZqIRAgByAKRg0BIAMgEDYCjAEgAyAFNgKIASADIAI2AoQBIAMgAjYCgAEgAyADQSNqNgKQAQNAIAIgEEYNAyACKAIAIAJBBGohAiADQSNqEPMDIgVFDQAgAygCPCIGIAMoAjRGBEAgA0E0aiAGQQEQuAgLIAMoAjggBkECdGogBTYCACADIAZBAWo2AjwMAAsACyADQTRqIAIQuBUMAgsgAyAQNgKMASADIAU2AogBIAMgAjYCgAEgD0EBayEFIA9B/////wNxIQ8DQCAGBEAgAigCACEOAkAgBQRAIANBNGogDiADQSNqEPMDELAKDAELIANBNGogDhC4FQsgAkEEaiECIAZBBGshBiAFQQFr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ISsgBCkDyAQhLCAEKQPABCEqQQQhFiAJEJALIgINAgwLCyATIA4pAgA3AgAgASgCKCECIAFBJTYCKCABIAEpA0A3A3ggE0EIaiIWIA5BCGoiHykCADcCACATQRBqIiAgDkEQaiIhKAIANgIAIAQgAjYCuAQgBEG4BGoQ4gggCRD8GCEFAkAgCRCQCyICBEAgAigCAEEHRg0BCyAEQcAEaiAJELkJIARBEGogCRCYECAEQcDTywA2ArwEIARBNDoAuAQgBCgCECAEKAIUIARBuARqEMMQIQIgCRCQCyIFRQ0QIAUoAgBBJEcNECABIAEpA0A3A3ggASgCKCABQSU2AihBJEcNBSABIAEoAiwQ8gkMEAsgEyAOKQIANwIAIAEoAighAiABQSU2AiggASABKQNANwN4IBYgHykCADcCACAgICEoAgA2AgAgBCACNgK4BCAEQbgEahDiCCABKAJ8IQsgBEEgaiABELIFIAQoAiQhByAEKAIgBEAgByECDBALIAQgBzYCkAEgCRCQCyICBEAgAigCAEEORg0DCyAZIAkQuQkgBEEYaiAJEJgQIARB0LbLADYCvAQgBEE0OgC4BCAEKAIYIAQoAhwgBEG4BGoQwxAhAiAJEJALIgVFDQkgBSgCAEEkRw0JIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRw0DIAEgASgCLBDyCQwJCyAEKAK8BCECDA4LIAIoAgBBFUcNCCACLQAEDQggEyAOKQIANwIAIAEoAighAiABQSU2AiggASABKQNANwN4IBNBCGogDkEIaikCADcCACATQRBqIA5BEGooAgA2AgAgBCACNgK4BCAEQbgEaiIHEOIIIARBADsAmgggBCABLQCQAzoAmQggBCABKQGCAzcAiwggBCABKAGKAzYAkwggBCABLwGOAzsAlwggBCABKQCTAzcAnAggBCABKACbAzYApAggHkEVaiAdQRVqKQAANwAAIB5BEGogHUEQaikBADcBACAeQQhqIB1BCGopAQA3AQAgHiAdKQEANwEAICggBEGLCGoQuwYgBCABNgLACCAJEPwYIQUgCRCQCyICRQRAIAEoAtgCIQIgBEEAOgC4BCACIAIgBxDDECECDAcLAkACfwJAAkACQAJAAkACQAJAQRAgAigCAEECayICIAJBI08bIgJBH2sOBAUBAQIACyACQQtG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AighAiABQSU2AiggASABKQNANwN4IARBxARqIA5BCGopAgA3AgAgBEHMBGogDkEQaigCADYCACAEIA4pAgA3ArwEIAQgAjYCuAQgBEG4BGoQ4ggMAgsgAkUNASAEQcQEaiAJELkJIAQgCRCYECAEQRM2AsAEIARB2NfLADYCvAQgBEEwOgC4BCAEKAIAIAQoAgQgBEG4BGoQwxAhAiAJEJALIgVFDQAgBSgCAEEkRw0AIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRw0DIAEgASgCLBDyCQsgEUGAgICAeDYCPCARIAI2AgAgBEE0ahCJHyAXELogIA0QnBIMAQsgESAEKQI0NwI8IBFBxABqIARBPGooAgA2AgAgASgCfCECIBEgDUEwEO8kIgUgFToASCAFIBc2AjggBSAMIAIgAiAMSRs2AjQgBSAMIAIgAiAMSxs2AjALIARBoAlqJAAMAQtBwL/MAEEoQezXywAQvBIACyADKAKEAyIEQYCAgIB4RgRAIAMoAsgCIQwMAgsgAygCzAIhECADKALIAiESIANB6AVqIANB0AJqQTQQ7yQaIANB6ARqIANBkANqKQMANwMAIAMgAykDiAM3A+AEDAMLIANBmAVqEKoeCyAAQYGAgIB4NgKQASAAIAw2AgAMAgsgASgCKCEFIAFBJTYCKCABIAEpA0A3A3ggA0HUAmogD0EIaikCADcCACADQdwCaiAPQRBqKAIANgIAIAMgDykCADcCzAIgAyAFNgLIAiADQcgCahDiCCACIAEoAnwiBSACIAVJGyESIAIgBSACIAVLGyEQQYCAgIB4IQQLIAMgEDYChAEgA0GIAWogA0HoBWpBNBDvJBogA0HIAWogA0HoBGoiGCkDACIqNwMAIAMgAykD4AQ3A8ABIAMgEjYCgAEgAyAENgK8ASADQQA2AtwBIANCgICAgIABNwLUASADQQc6AJQCAkAgKqdB/wFxRSAEQYCAgIB4RnJFBEBBByEGQQAhDCADKALkASENDAELIANB0AJqIQ4gA0HIAmpBBHIhByADQcwCaiELIANBmARqIQkgA0HwA2ohESADQewCaiEZIANB3ANqIRNBACECQQAhDAJAAkADQCAIEJALIgVFBEAgASgC2AIhASADQQA6AMgCIAEgASADQcgCahDDECEFDAMLAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQRAgBSgCAEECayIFIAVBI08bIgVBHmsOBQQFAgIAAQsgASABKQNANwN4IAEoAiggAUElNgIoQSRGDQ9BwL/MAEEoQYjVywAQvBIACyAFQQtGDQELIANB1AJqIAgQuQkgA0EIaiAIEJgQIANBIDYC0AIgA0H41csANgLMAiADQTA6AMgCIAMoAgggAygCDCADQcgCahDDECEFIAgQkAsiAkUNDiACKAIAQSRHDQ4gASABKQNANwN4IAEoAiggAUElNgIoQSRHDQYgASABKAIsEPIJDA4LIAgQ/BgaAkACQAJAIAgQ5A4iBQRAIAUoAgBBB0YNAQsgA0HIAmogARCwAyADKALIAiIFQQJGDQEgGCALKQIANwIAIBhBCGogC0EIaikCADcCACADIAU2AuQEIANBATYC4AQgA0HgBGohDQwMCyAIEPwYIQoCQAJAAkACQAJAIAgQkAsiBQRAIAUoAgBBDUYNAQsgA0HQAmogCBC5CSADQRBqIAgQmBAgA0H4tssANgLMAiADQTQ6AMgCIAMoAhAgAygCFCADQcgCahDDECEFIAgQkAsiAkUNFCACKAIAQSRHDRQgASABKQNANwN4IAEoAiggAUElNgIoQSRGDQFBwL/MAEEoQZDXywAQvBIACyAHIA8pAgA3AgAgASgCKCEFIAFBJTYCKCABIAEpA0A3A3ggB0EIaiIGIA9BCGoiDSkCADcCACAHQRBqIhQgD0EQaiIVKAIANgIAIAMgBTYCyAIgA0HIAmoQ4gggCBCQCyIFBEAgBSgCAEEHRg0CCyADQdACaiAIELkJIANBGGogCBCYECADQcDTywA2AswCIANBNDoAyAIgAygCGCADKAIcIANByAJqEMMQIQUgCBCQCyICRQ0TIAIoAgBBJEcNEyABIAEpA0A3A3ggASgCKCABQSU2AihBJEcNAgsgASABKAIsEPIJDBILIAcgDykCADcCACABKAIoIQUgAUElNgIoIAEgASkDQDcDeCAGIA0pAgA3AgAgFCAVKAIANgIAIAMgBTYCyAIgA0HIAmoQ4gggA0EoaiABEJ8FIAMoAiwhBSADKAIoDREgAyAFNgLoBSAIEJALIhcEQCAXKAIAQQ5GDQILIA4gCBC5CSADQSBqIAgQmBAgA0HQtssANgLMAiADQTQ6AMgCIAMoAiAgAygCJCADQcgCahDDECEFIAgQkAsiAkUNDiACKAIAQSRHDQ4gASABKQNANwN4IAEoAiggAUElNgIoQSRHDQYgASABKAIsEPIJDA4LQcC/zABBKEGA18sAELwSAAsgByAPKQIANwIAIAEoAighFyABQSU2AiggASABKQNANwN4IAYgDSkCADcCACAUIBUoAgA2AgAgAyAXNgLIAiADQcgCahDiCCAKIAEoAnwiDSAKIA1JGyEGIAUNASAGIQUMDwsgAygCzAIhBQwOCyADIAogDSAKIA1LGzYCxAQgAyAGNgLABCADIAU2ArwEIANBAjYCuAQgA0G4BGohDQwJCyADQcgCaiABELAOIAMpA8gCUEUEQCAJIAMpA8gCNwMAIAlBEGogA0HYAmopAwA3AwAgCUEIaiAOKQMANwMAIANBADYCkAQgA0GQBGohDQwJCyADKALQAiEFDAwLIAgQ/BghCgJ/AkACQAJAIAgQ5A4iBUUNACAFKAIAQRRHDQAgBS0ABEEORg0BCyADQcgCaiABIAoQQyADKALIAiEFIAMoAtgDIgpBgYCAgHhGDQ4gCkGAgICAeEcNASADQYAGaiAHQRhqKQIANwMAIANB+AVqIAdBEGopAgA3AwAgA0HwBWogB0EIaikCADcDACADIAcpAgA3A+gFQQQMAgsgASgCKCECIAFBJTYCKCABIAEpA0A3A3ggA0HUAmogD0EIaikCADcCACADQdwCaiAPQRBqKAIANgIAIAMgDykCADcCzAIgAyACNgLIAiADQcgCaiICEOIIIAgQkAsiBUUEQCABKALYAiEBIANBADoAyAIgASABIAIQwxAhBQwOCyAFKAIAQSRGBEAgASABKQNANwN4IAEoAiggAUElNgIoQSRGDQ1BwL/MAEEoQZjVywAQvBIACyAIEJALIgJFDQggAigCAEEkRgRAIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRg0NQcC/zABBKEGo1csAELwSAAsgASgCKCECIAFBJTYCKCABIAEpA0A3A3ggA0HUAmogD0EIaikCADcCACADQdwCaiAPQRBqKAIANgIAIAMgDykCADcCzAIgAyACNgLIAiADQcgCahDiCAJAIAgQkAsiAgRAIAIoAgBBIkYNAQsgA0HIAmoiAiABEO0CIAMoAsgCIQUgAy0A9AIiBkEGRg0OIANB6AVqQQRyIAJBBHJBKBDvJBogA0GXBmogA0H3AmotAAA6AAAgAyADLwD1AjsAlQYgAyAGOgCUBiADIAU2AugFIAgQkAsiAgRAIAIoAgBBIkYNBQsgA0HQAmogCBC5CSADQTBqIAgQmBAgA0Gw18sANgLMAiADQTQ6AMgCIAMoAjAgAygCNCADQcgCahDDECEFIAgQkAsiAkUNCCACKAIAQSRHDQggASABKQNANwN4IAEoAiggAUElNgIoQSRHDQUgASABKAIsEPIJDAgLIAEoAighAiABQSU2AiggASABKQNANwN4IANB1AJqIA9BCGopAgA3AgAgA0HcAmogD0EQaigCADYCACADIA8pAgA3AswCIAMgAjYCyAIgA0HIAmoQ4gggCiABKAJ8IgIgAiAKSxshFCAKIAIgAiAKSRshDUEGIQYMBgtBoAFBCBD+GiIGIAU2AgAgBiAHKQIANwIEIAZBDGogB0EIaikCADcCACAGQRRqIAdBEGopAgA3AgAgBkEcaiAHQRhqKQIANwIAIAZBJGogGUHsABDvJBogBiAKNgKQASAGIBMpAgA3ApQBIAZBnAFqIBNBCGooAgA2AgAgBiEFQQMLIQYgESADKQPoBTcDACARQRhqIANBgAZqKQMANwMAIBFBEGogA0H4BWopAwA3AwAgEUEIaiADQfAFaikDADcDACADIAU2AuwDIAMgBjYC6AMgA0HoA2ohDQwHC0HAv8wAQShB8NbLABC8EgALIAEoAighAiABQSU2AiggASABKQNANwN4IANB1AJqIA9BCGopAgA3AgAgA0HcAmogD0EQaigCADYCACADIA8pAgA3AswCIAMgAjYCyAIgA0HIAmoQ4gggASgCfCECIANBmAVqIANB6AVqQSwQ7yQaIANBqgZqIANBlQZqIgVBAmotAAA6AAAgAyAFLwAAOwGoBiAKIAIgAiAKSxshFCAKIAIgAiAKSRshDQwCC0HAv8wAQShByNfLABC8EgALQcC/zABBKEGY1ssAELwSAAsgA0GcAmoiAiADQZgFakEsEO8kGiADQZoCaiIFIANBqgZqLQAAOgAAIAMgAy8BqAY7AZgCIANB4AFqEKgZIAMgDTYC5AEgAyAUNgLgASADQegBaiACQSwQ7yQaIANBlwJqIAUtAAA6AAAgAyAGOgCUAiADIAMvAZgCOwCVAgwHCyADQegFahCcEgwFCyABKALYAiEBIANBADoAyAIgASABIANByAJqEMMQIQUMBAsgAygC1AEgDEYEQCADQdQBahCyCAsgAygC2AEgAmogDUEoEO8kGiADIAxBAWoiDDYC3AEgAkEoaiECDAELCyADQegFahCNIQwBCyABKAIsIQULIABBgYCAgHg2ApABIAAgBTYCACADQeABahCoGSADQdQBahDjHiAEQYCAgIB4Rg0BIANBgAFqEOAbDAELIBogASgCfCIFIAUgGksbIQIgGiAFIAUgGkkbIQUgA0GVAmohCiADQegBaiERAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIARBgICAgHhGBEAgBkEGaw4CAgEDCyADQcABaiEMIANBiAFqIQcgBkEGaw4CBAMFC0HAv8wAQShByNXLABC8EgALQYCAgIB4IQEgAygC2AEhByADKALUASEGIAIhCiAFIREMDAsgAyANNgLMAiADIBQ2AsgCIANB0AJqIBFBLBDvJCECIANB/wJqIApBAmotAAA6AAAgAyAGOgD8AiADIAovAAA7AP0CIANB1wA6AOgFIBQgDSADQegFahDDECEFIAgQkAsiBkUNCSAGKAIAQSRHDQkgASABKQNANwN4IAEoAiggAUElNgIoQSRHDQMgASABKAIsEPIJDAkLIANBmAVqIAdBNBDvJBogA0GQBWogDEEIaikDADcDACADIAwpAwA3A4gFQQYhGiADKQLYASEqIAMoAtQBIQEgEiEPIBAhGCACIQYgBSEHDAoLIAMgEDYCzAIgAyASNgLIAiADQdACaiAHQTQQ7yQaIANBkANqIAxBCGopAwA3AwAgAyAENgKEAyADIAwpAwA3A4gDIANByAJqEOMGISogA0HYADoA6AUgAyAqNwPwBSAUIA0gA0HoBWoQwxAhAiAIEJALIgVFDQYgBSgCAEEkRw0GIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRw0CIAEgASgCLBDyCQwGCyADIBA2AswCIAMgEjYCyAIgA0HQAmogB0E0EO8kIRAgA0GQA2ogDEEIaikDADcDACADIAQ2AoQDIAMgDCkDADcDiAMgAyANNgLsBSADIBQ2AugFIANB8AVqIBFBLBDvJCEHIANBnwZqIApBAmotAAA6AAAgAyAGOgCcBiADIAovAAA7AJ0GIAMgBxDjBjcDoAYgAyADQcgCahDjBiIqNwOoBiADQaAGaiADQagGaiIGEPEHICoQ2A8gAykDoAYQ2A8NBCADKALsBSECIAMoAugFIANByAJqEOMGISogA0HYADoAqAYgAyAqNwOwBiACIAYQwxAhAiAIEJALIgVFDQMgBSgCAEEkRw0DIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRw0CIAEgASgCLBDyCQwDC0HAv8wAQShBuNXLABC8EgALQcC/zABBKEHY1csAELwSAAtBwL/MAEEoQejVywAQvBIACyAAQYGAgIB4NgKQASAAIAI2AgAgBxCcEiADQcgCahDgGwwDCyADKALMAiEYIAMoAsgCIQ8gA0GYBWogEEE0EO8kGiADQZAFaiADQYgDaiIBQQhqKQMANwMAIANB2AVqIANBjAZqKQIANwMAIANB4AVqIANBlAZqKQIANwMAIAMgASkDADcDiAUgAyADKQKEBjcD0AUgAygChAMhBCADKALUASEBIAMpAtgBISogAygC6AUhDCADKALsBSEKIAMoAvAFIREgAygC9AUhEiADKAL4BSEQIAMoAvwFIRQgAygCgAYhDSADQc4FaiADQZ0GaiIGQQJqLQAAOgAAIAMgBi8AADsBzAUgAy0AnAYhGiACIQYgBSEHDAMLIABBgYCAgHg2ApABIAAgAjYCACADQcgCahDgGwwBCyAAQYGAgIB4NgKQASAAIAU2AgAgAhCcEgsgA0HUAWoQ4x4MAQsgACANNgIgIAAgFDYCHCAAIBA2AhggACASNgIUIAAgETYCECAAIAo2AgwgACAMNgIIIAAgBzYCBCAAIAY2AgAgACADKQPQBTcCJCAAIBo6ADwgACADLwHMBTsAPSAAQSxqIANB2AVqKQMANwIAIABBNGogA0HgBWopAwA3AgAgAEE/aiADQc4Fai0AADoAACAAIBg2AkQgACAPNgJAIABByABqIANBmAVqQTQQ7yQaIAAgBDYCfCAAICo3ApQBIAAgATYCkAEgACADKQOIBTcDgAEgAEGIAWogA0GQBWopAwA3AwALIANB3ABqEKoeCyADQcAGaiQADwtBwL/MAEEoQfjUywAQvBIAC+pLAiZ/BH4jAEHABmsiAyQAAkACQCABQShqIggQ8woiBUUEQCABKAKAAiEBIANBADoAyAIgASABIANByAJqEMMQIQEgAEGB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ASgCnAMhAiARIA1BMBDvJCIFIBU6AEggBSAXNgI4IAUgDCACIAIgDEkbNgI0IAUgDCACIAIgDEsbNgIwCyAEQZAJaiQADAELQcC/zABBKEHs18sAELwSAAsgAygChAMiBEGAgICAeEYEQCADKALIAiEMDAILIAMoAswCIRAgAygCyAIhEiADQegFaiADQdACakE0EO8kGiADQegEaiADQZADaikDADcDACADIAMpA4gDNwPgBAwDCyADQZgFahCBHQsgAEGBgICAeDYCkAEgACAMNgIADAILIAEoAsgCIQUgAUElNgLIAiABIAEpA+ACNwOYAyADQdQCaiAPQQhqKQIANwIAIANB3AJqIA9BEGooAgA2AgAgAyAPKQIANwLMAiADIAU2AsgCIANByAJqEOAIIAIgASgCnAMiBSACIAVJGyESIAIgBSACIAVLGyEQQYCAgIB4IQQLIAMgEDYChAEgA0GIAWogA0HoBWpBNBDvJBogA0HIAWogA0HoBGoiGCkDACIpNwMAIAMgAykD4AQ3A8ABIAMgEjYCgAEgAyAENgK8ASADQQA2AtwBIANCgICAgIABNwLUASADQQc6AJQCAkAgKadB/wFxRSAEQYCAgIB4RnJFBEBBByEGQQAhDCADKALkASENDAELIANB0AJqIQ4gA0HIAmpBBHIhByADQcwCaiELIANBmARqIQkgA0HwA2ohESADQewCaiEZIANB3ANqIRNBACECQQAhDAJAAkADQCAIEPMKIgVFBEAgASgCgAIhASADQQA6AMgCIAEgASADQcgCahDDECEFDAMLAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQRAgBSgCAEECayIFIAVBI08bIgVBHmsOBQQFAgIAAQsgASABKQPgAjcDmAMgASgCyAIgAUElNgLIAkEkRg0PQcC/zABBKEGI1csAELwSAAsgBUELRg0BCyADQdQCaiAIEOsMIANBCGogCBDgDyADQSA2AtACIANB+NXLADYCzAIgA0EwOgDIAiADKAIIIAMoAgwgA0HIAmoQwxAhBSAIEPMKIgJFDQ4gAigCAEEkRw0OIAEgASkD4AI3A5gDIAEoAsgCIAFBJTYCyAJBJEcNBiABIAEoAswCEOsJDA4LIAgQ3hgaAkACQAJAIAgQkg8iBQRAIAUoAgBBB0YNAQsgA0HIAmog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BBCQCyIDRQRAIAEoAtgCIQEgAkEAOgCQASABIAEgAkGQAWoQwxAhASAAQQc2AgAgACABNgIEDAELAkACQAJAAkACQAJAAkACQAJAAkACQEEQIAMoAgBBAmsiAyADQSNPGyIDQQlrDgMBCQIACyADBEAgA0EiRw0JIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRw0IIAEoAiwhASAAQQc2AgAgACABNgIEDAsLIAJByAFqIAEQpgUgAAJ/IAItANwBQQJHBEAgAkGsAWogAkHgAWopAwA3AgAgAkGkAWogAkHYAWopAwA3AgAgAkGcAWogAkHQAWopAwA3AgAgAiACKQPIATcClAEgAEEEaiACQZABakEkEO8kGkEADAELIAAgAigCyAE2AgRBBws2AgAMCgsgBBD8GCEMIAQQkAsiA0UEQCABKALYAiEBIAJBADoAkAEgASABIAJBkAFqEMMQIQEgAEEHNgIAIAAgATYCBAwKCyADKAIAQSRGBEAgASABKQNANwN4IAEoAiggAUElNgIoQSRHDQYgASgCLCEBIABBBzYCACAAIAE2AgQMCgsgASgCKCEDIAFBJTYCKCABIAEpA0A3A3ggAkGcAWogAUE0aikCADcCACACQaQBaiABQTxqKAIANgIAIAIgASkCLDcClAEgAiADNgKQASACQZABaiIQEOIIIAJBADYCaCACQoCAgICAATcCYCABQSxqIQYgEEEEciEJIAJB0AFqIQ4gAkGYAWohCkEAIQMDQCADIA1yRSADQf7/e0tyIQdBACEFAkACfwJAAkACQANAIAQQkAsiC0UNASACQQA2AuACIAIgCzYC5AIgAkHgAmoQtBwgBBCQCyILBEAgCygCAEEMRg0DCyAHRQRAIAJBOzoAkAEgASADIA0gAkGQAWoQoRULAkAgBBCQCyILRQ0AIAsoAgBBEEcNACAJIAYpAgA3AgAgASgCKCELIAFBJTYCKCABIAEpA0A3A3ggCUEIaiAGQQhqKQIANwIAIAlBEGogBkEQaigCADYCACACIAs2ApABIAVBAWohBSACQZABahDiCAwBCwsgBQRAIAIgBTYCuAEgAkEHNgKQASACQeAAaiACQZABahDiBgsgBBD8GCEFIAQQkAsiBwRAIAcoAgBBB0YNAwsgAkGQAWogARCRBCACKAKUASEFIAIoApABIgdBB0YNCiAOIAopAwA3AwAgDkEYaiAKQRhqKQMANwMAIA5BEGogCkEQaikDADcDACAOQQhqIApBCGopAwA3AwAgAiAFNgLMASACIAc2AsgBIAJB4ABqIAJByAFqEIoUQQAMAwsgASgC2AIhAyACQQA6AJABIAIgAyADIAJBkAFqEMMQNgLkAiACQQE2AuACIAJB4AJqELQcCyAEEJALIgNFDQIgAygCAEEMRw0CIAEoAighAyABQSU2AiggASABKQNANwN4IAJBnAFqIAZBCGopAgA3AgAgAkGkAWogBkEQaigCADYCACACIAYpAgA3ApQBIAIgAzYCkAEgAkGQAWoQ4ghBACEDAkAgAS0A+wJFIAEtAPgCQQJHcgRAIAEtAJADRQ0BCyAEEJALIgRFDQAgBCgCAEEXRw0AIAEoAighBCABQSU2AiggASABKQNANwN4IAJBnAFqIAZBCGopAgA3AgAgAkGkAWogBkEQaigCADYCACACIAYpAgA3ApQBIAIgBDYCkAEgAkGQAWoQ4ghBASEDCyAAIAIpAmA3AgQgACADOgAcIABBADYCGCAAQQE2AgAgAEEMaiACQegAaigCADYCACAAIAwgASgCfCIBIAEgDEkbNgIUIAAgDCABIAEgDEsbNgIQDA0LIAkgBikCADcCACABKAIoIQMgAUElNgIoIAEgASkDQDcDeCAJQQhqIAZBCGopAgA3AgAgCUEQaiAGQRBqKAIANgIAIAIgAzYCkAEgAkGQAWoiDxDiCCABKAJ8IQMgDyABEEkgAigCkAEiDUEHRg0GIAJBwAJqIgggCkEIaikDADcDACACQcgCaiIRIApBEGopAwA3AwAgAkHQAmoiEiAKQRhqKQMANwMAIAIgCikDADcDuAIgAigClAEhECABKAJ8IQtBKEEIEP4aIgcgEDYCBCAHIA02AgAgByACKQO4AjcDCCAHQRBqIAgpAwA3AwAgB0EYaiARKQMANwMAIAdBIGogEikDADcDACACQQA2AqgBIAIgBSADIAMgBUkbNgKkASACIAUgAyADIAVLGzYCoAEgAiAFIAsgBSALSxsiDTYCnAEgAiAFIAsgBSALSRsiAzYCmAEgAiAHNgKUASACQQI2ApABIAJB4ABqIA8QihRBAQsgBBCQCyIHBEAgBygCAEEMRg0CCwJAIAQQkAsiBwRAIAcoAgBBEEYNAQsgAkGYAWogBBC5CSACQRBqIAQQmBAgAkHIlswANgKUASACQTQ6AJABIAIoAhAgAigCFCACQZABahDDECEFIAQQkAsiBEUNByAEKAIAQSRHDQcgASABKQNANwN4IAEoAiggAUElNgIoQSRHDQUgASABKAIsEPIJDAcLIAkgBikCADcCACABKAIoIQcgAUElNgIoIAEgASkDQDcDeCAJQQhqIAZBCGopAgA3AgAgCUEQaiAGQRBqKAIANgIAIAIgBzYCkAEgAkGQAWoiEBDiCEUNASAEEJALIgVFDQEgBSgCAEEMRw0BIAEoAnwhBSABKAJ4IQcgAkE6OgCQASABIAcgBSAQEKEVDAELCyACQZgBaiAEELkJIAJBCGogBBCYECACQfi5ywA2ApQBIAJBNDoAkAEgAigCCCACKAIMIAJBkAFqEMMQIQUgBBCQCyIERQ0EIAQoAgBBJEcNBCABIAEpA0A3A3ggASgCKCABQSU2AihBJEcNASABIAEoAiwQ8gkMBAsgAkEAOgBTIAIgASkBggM3AEMgAiABKQCTAzcAVCACIAEoAJsDNgBcIAIgAUGKA2oiAykBADcASyACQfkAaiABQZcDaikAADcAACACQfQAaiABQZIDaikBADcCACACQewAaiADKQEANwIAIAIgASkBggM3AmQgAUGAAWogAkHDAGoQuwYgAiABNgJgIAQQ/BghDiAEEJALIgNFBEAgASgC2AIhASACQQA6AJABIAEgASACQZABahDDECEBIABBBzYCACAAIAE2AgQMCAsCQCADKAIAQSRGBEAgASABKQNANwN4IAEoAiggAUElNgIoQSRGDQFBwL/MAEEoQaSBzAAQvBIACyABKAIoIQMgAUElNgIoIAEgASkDQDcDeCACQZwBaiABQTRqKQIANwIAIAJBpAFqIAFBPGooAgA2AgAgAiABKQIsNwKUASACIAM2ApABIAJBkAFqIhAQ4gggAkEANgKMASACQoCAgICAATcChAEgAUEsaiEGIBBBBHIhCyACQbgCakEEciEJIAJBxAJqIRcgAkG8AmohDSACQcACaiEKIAJBoAJqIQwgAkGgAWohGCACQZgBaiEZQQghEANAIAdBOGwhEgJAA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAEEJALIgMEQCADKAIAQQ5GDQELIAQQ/BghBQJA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QZgCahDwESACKAKUASEDDAYLQcC/zABBKEGY/8sAELwSAAtBwL/MAEEoQfj+ywAQvBIACyAAQQc2AgAgACADNgIEIAJBhAFqEI0fDBILIAAgAikChAE3AgQgACADOgAcIABBADYCGCAAIAw2AhQgACAKNgIQIABBAzYCACAAQQxqIAJBjAFqKAIANgIADBELIAIpA6ACENgPDAELIAIoApQBIQggAkHIAWogGUEwEO8kGiACKAKEASAHRgRAIAJBhAFqENISIAIoAogBIRALIBAgEmoiBSADNgIAIAVBBGogCDYCACAFQQhqIAJByAFqQTAQ7yQaIAIgB0EBaiIHNgKMASAEEJALIgMEQCADKAIAQQ5GDQMLIAQQkAsiAwRAIAMoAgBBEEYNAgsgAkGYAWogBBC5CSACQRhqIAQQmBAgAkHIlswANgKUASACQTQ6AJABIAIoAhggAigCHCACQZABahDDECEDIAQQkAsiBEUNACAEKAIAQSRHDQAgASABKQNANwN4IAEoAiggAUElNgIoQSRHDQUgASABKAIsEPIJCyAAQQc2AgAgACADNgIEIAJBhAFqEI0fDA4LIAsgBikCADcCACABKAIoIQMgAUElNgIoIAEgASkDQDcDeCALQQhqIAZBCGopAgA3AgAgC0EQaiAGQRBqKAIANgIAIAIgAzYCkAEgAkGQAWoQ4gggBBCQCyIDDQELIBJBOGohEgwBCwtBASARIAMoAgBBDkYiAxshESABKQN4IBogAxshGgwBCwtBwL/MAEEoQbSBzAAQvBIACyABKAIsIQEgAEEHNgIAIAAgATYCBAwHC0HAv8wAQShBtNnLABC8EgALQcC/zABBKEGk2csAELwSAAsgAigClAEhBQsgAEEHNgIAIAAgBTYCBCACQeAAahCMHwwEC0HAv8wAQShBlNnLABC8EgALQcC/zABBKEH02csAELwSAAsgAkGcAWogBBC5CSACIAQQmBAgAkEcNgKYASACQYTaywA2ApQBIAJBMDoAkAEgAigCACACKAIEIAJBkAFqEMMQIQMCQCAEEJALIgRFDQAgBCgCAEEkRw0AIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRgRAIAEgASgCLBDyCQwBC0HAv8wAQShBoNrLABC8EgALIABBBzYCACAAIAM2AgQMAQsgAkHgAGoQqh4LIAJB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AiECIAMoAqQCIQQgAygCoAIhBQwBCwtBACEJCyAJRQ0ACyADQaACaiAWQRhrIgJBEGooAgAgAkEUaigCACAJIAQQpwYLIANByAFqIgIgA0GoAmooAgA2AgAgAyADKQKgAjcDwAFBBEHQABCNGSIKRQ0BIApBAjYCCCAKQoGAgIAQNwIAIAogAykDwAE3AgwgCkEUaiACKAIANgIACyAAQeAAahCWGCEWIAAgACgCgAEiEyAUKAIQakEBajYCgAEgA0H4AWpCADcDACADQfABakIANwMAIANB6AFqQgA3AwAgA0IANwPgASADQvPK0cunjNmy9AA3A9gBIANCg9+R85bM3LfkADcD0AEgA0Lh5JXz1uzZvOwANwPIASADQvXKzYPXrNu38wA3A8ABIANBwAFqIgIgFCgCDCIPIBQoAhAiCBCaByADQSBqIAIQygcgA0EoaikDACEdIAMpAyAhHiADQdgCakIANwMAIANB0AJqQgA3AwAgA0HIAmpCADcDACADQgA3A8ACIANC88rRy6eM2bL0ADcDuAIgA0KD35Hzlszct+QANwOwAiADQuHklfPW7Nm87AA3A6gCIANC9crNg9es27fzADcDoAIgCiADQaACaiICEO4EIANBEGogAhDKByADQRhqKQMAIR8gAykDECEcQQQQjhkiAiATNgIAIANBATYCsAEgAyACNgKsASADQQE2AqgBIANBADYCcCADQoCAgIDAADcCaCADQQA2ApABIANCgICAgMAANwKIASAAQYABaiENIAggE2ohEkEEIQlBACEMQQAhAgJAA0ACQAJAIANBiAFqAn8CQAJAAkACQAJAAkACQAJAAkACQCACIAhJBEAgAiAPaiIOLQAAIgRBIEkNAUEBIQYgBEH+AE0NDCACQQAgBMBBv39MGw0CAkACQCAEwEEATg0AIA4tAAFBP3EhBSAEQR9xIQcCQCAEQd8BTQRAIAdBBnQgBXIhBAwBCyAOLQACQT9xIAVBBnRyIQUgBEHwAUkEQCAFIAdBDHRyIQQMAQsgB0ESdEGAgPAAcSAOLQADQT9xIAVBBnRyciIEQYCAxABGDQYLIARBgAFJDQBBAkEDQQQgBEGAgARJGyAEQYAQSRshBiAMIAMoAmhGDQEMCwsgAiATaiEHIARB/wBGDQsgBEEgTw0NDAsLIANB6ABqEKYIIAMoAmwh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ASACQbsBai0AAEEQdHIhBUEkIQMMDwsgAigCKCIKQRB2IREgCkEIdiEQIAIoAhAiCEEIdiEFIAIpAxgiGkIgiKchCyACKQMIIhlCKIinIQQgGUIgiKchBiAapyEOIBmnIQdBJSEDIAIoAiQhDyACKAIgIQ0gAigCLCEBIAIoAhQhDAwRCyACKAIIIQcgAigCBCEJQSYhAwwQC0EnIQMgAigCBCABEKACIQkMDwsgAkFAayIDIAJBBHJBJBDvJBogAkGwAWogAyABEI0WIAIoArgBIgZBCHYhBCACLwC9ASACQb8Bai0AAEEQdHIhBUEoIQMgAigC0AEhDyACKALMASENIAIoAsgBIQsgAigCxAEhDiACKALAASEMIAItALwBIQggAigCtAEhByACKAKwASEJDA4LIAIoAgwiBkEIdiEEIAIvABEgAkETai0AAEEQdHIhBUEpIQMgAi0AECEIIAIoAgghByACKAIEIQkMDQsgAigCDCIGQQh2IQRBKiEDIAIoAgghByACKAIEIAEQTCEJDAwLIAIoAgwiBkEIdiEEQSshAyACKAIIIQcgAigCBCABEEwhCQwLCyACQcgAaiACQQxqKQIANwMAIAIgAikCBDcDQCACQbABaiACQUBrIAEQ3xYgAigCuAEiBkEIdiEEIAIvAL0BIAJBvwFqLQAAQRB0ciEFQSwhAwwGCyACQcgAaiACQQxqKQIANwMAIAIgAikCBDcDQCACQbABaiACQUBrIAEQ3xYgAigCuAEiBkEIdiEEIAIvAL0BIAJBvwFqLQAAQRB0ciEFQS0hAwwFCyACQcgAaiACQQxqKQIANwMAIAIgAikCBDcDQCACQbABaiACQUBrIAEQ3xYgAigCuAEiBkEIdiEEIAIvAL0BIAJBvwFqLQAAQRB0ciEFQS4hAwwECyACKAIQIghBCHYhBSACKQMIIhlCKIinIQQgGUIgiKchBiAZpyEHQS8hAyACKAIUIQwMBwsgAigCDCIGQQh2IQRBMCEDIAItABAhCCACKAIIIQcgAigCBCABEIgLIQkMBgtBMQshAyACKAIIIQcgAigCBCEJDAQLIAItALwBIQggAigCtAEhByACKAKwASEJDAMLIAIoAtQBIQEgAi8B0gEhESACLQDRASEQIAItANABIQogAigCzAEhDyACKALIASENIAIoAsQBIQsgAigC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AgsgAyEECwJAIBoQkAsiAkUNACACKAIAQQ1HDQAgASgCKCECIAFBJTYCKCABIAEpA0A3A3ggCEH0AmogGUEIaiIyKQIANwIAIAhB/AJqIBlBEGoiMygCADYCACAIIBkpAgA3AuwCIAggAjYC6AIgCEHoAmoiAhDiCCAIQdUBaiABQYIDaiInQRVqIjQpAAA3AAAgCEHQAWogJ0EQaiI1KQEANwIAIAhByAFqICdBCGoiNikBADcCACAIIARBAEc6AP4CIAggASkBggM3AOgCIAggASkBigM3APACIAggASgBkgM2APgCIAggAS8BlgM7APwCIAggASgAmQM2AP8CIAggAS8AnQM7AIMDIAggJykBADcCwAEgLCACELsGIAggATYCvAEgCEEANgLoASAIQoCAgICAATcC4AEgCEHwAWohKCAIQZACakEEciEqIAhB8AJqITcgCEGYAmohOEEAIQIDQAJAAkACQAJAAkACQAJAAkACQCAaEJALIgMEQCAIQQA2AuwBIAggAzYC8AEgCEHsAWoQtBwgGhCQCyIDBEAgAygCAEEORg0CCwJAIBoQkAsiA0UNACADKAIAQQ9HDQAgKiAZKQIANwIAIAEoAighAyABQSU2AiggASABKQNANwN4ICpBCGogMikCADcCACAqQRBqIDMoAgA2AgAgCCADNgKQAiAIQZACaiIGEOIIIAEoAnwhAyABKAJ4IQQgCEEKNgKQAiAIIAQgAyADIARJGzYCmAIgCCAEIAMgAyAESxs2ApQCIAhB4AFqIAYQjBQMCwsgKEEVaiA0KQAANwAAIChBEGogNSkBADcBACAoQQhqIDYpAQA3AQAgKCAnKQEANwEAIAhBAToAqQIgCCABLQCaAzoAqAIgCCABLQCeAzoArAIgCCABKQGCAzcAkAIgCCABKQGKAzcAmAIgCCABKQGSAzcAoAIgCCABLwGcAzsAqgIgLCAIQZACaiIHELsGIAggATYC7AFBACEEQQAhCUEAIQtBACEMQQAhDkEAIRBBACERQQAhE0EAIRdBACEYQQAhHEEAIR5BACEfQQAhIEEAISFBACEjQQAhJUEAIStBACEtQQAhLiMAQdAIayIFJAAgAUEoaiIKEPwYIQ0gBUHwBGogAUEAEKIBIAUoAvQEIQMCQAJAAkACQAJAAkACQAJAIAUoAvAEIgZBgICAgHhH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ASACIAIvATw7AbwBIAIgAigCODYCuAEgAkEANgK0ASACQoCAgICAATcCrAEgAkEBOgCoASACQQA2AqQBIAJCgICAgMAANwKcASACQQA2AogBIAJCgICAgIABNwKAASACQYABaiAAKAIMEPIYIAJBrAFqIQYCQCACKAK0ASIABEAgAkEMaiAAEOEgIAJBxABqIAIoArABIAIoArQBEOkHIAIgAigCRDYCWCACIAIoAkgiADYCUCACIAAgAigCTEEEdCIDaiIHNgJcA0AgA0UNAiACQYABaiAAKQMAIAAoAggQ5xEgA0EQayEDIABBEGohAAwACwALIAJB0ABqIgAgAkGAAWpBLBDvJBogBSAAELMUIAYQlBsMCgsgAiAHNgJUIAJB0ABqIgAQgxIgAi0AKEUNCCACQdgAaiAGQQhqKAIANgIAIAIgBikCADcDUCAEIAAQtAsgACACQYABakEsEO8kGiAFIAAQsxQMCQsgAkEUakHg784AKQMAIgg3AgAgAkEAOwE+IAJBADYCNCACQoCAgICAATcCLCACQQE6ACggAkEANgIkIAJCgICAgMAANwIcIAJBADYCCCACQoCAgICAATcCACACQdjvzgApAwAiCTcCDCACIAEvATw7ATwgAiABKAI4NgI4IABBBGogAhDEFSAAQQxqIAIQ6SIgAkGUAWogCDcCACACIAk3AowBIAJBADsBvgEgAiACLwE8OwG8ASACIAIoAjg2ArgBIAJBADYCtAEgAkKAgICAgAE3AqwBIAJBAToAqAEgAkEANgKkASACQoCAgIDAADcCnAEgAkEANgKIASACQoCAgICAATcCgAEgAkGAAWogACgCEBDyGCACQawBaiEFIAJBLGohBCACQRxqIQYCQCACKAK0ASIABEAgAkEMaiAAEOEgIAJBxABqIAIoArABIAIoArQBEOkHIAIgAigCRDYCWCACIAIoAkgiADYCUCACIAAgAigCTEEEdCIDaiIHNgJcA0AgA0UNAiACQYABaiAAKQMAIAAoAggQ5xEgA0EQayEDIABBEGohAAwACwALIAJB0ABqIgAgAkGAAWpBLBDvJBogBiAAELMUIAUQlBsMBwsgAiAHNgJUIAJB0ABqIgAQgxIgAi0AKEUNBSACQdgAaiAFQQhqKAIANgIAIAIgBSkCADcDUCAEIAAQtAsgACACQYABakEsEO8kGiAGIAAQsxQMBgsgAkEUakHg784AKQMAIgg3AgAgAkEAOwE+IAJBADYCNCACQoCAgICAATcCLCACQQE6ACggAkEANgIkIAJCgICAgMAANwIcIAJBADYCCCACQoCAgICAATcCACACQdjvzgApAwAiCTcCDCACIAEvATw7ATwgAiABKAI4NgI4IABBBGogAhDEFSAAQQxqIAIQ6SIgAkGUAWogCDcCACACIAk3AowBIAJBADsBvgEgAiACLwE8OwG8ASACIAIoAjg2ArgBIAJBADYCtAEgAkKAgICAgAE3AqwBIAJBAToAqAEgAkEANgKkASACQoCAgIDAADcCnAEgAkEANgKIASACQoCAgICAATcCgAEgAkGAAWogACgCEBDyGCACQawBaiEFIAJBLGohBCACQRxqIQYCQCACKAK0ASIABEAgAkEMaiAAEOEgIAJBxABqIAIoArABIAIoArQBEOkHIAIgAigCRDYCWCACIAIoAkgiADYCUCACIAAgAigCTEEEdCIDaiIHNgJcA0AgA0UNAiACQYABaiAAKQMAIAAoAggQ5xEgA0EQayEDIABBEGohAAwACwALIAJB0ABqIgAgAkGAAWpBLBDvJBogBiAAELMUIAUQlBsMBAsgAiAHNgJUIAJB0ABqIgAQgxIgAi0AKEUNAiACQdgAaiAFQQhqKAIANgIAIAIgBSkCADcDUCAEIAAQtAsgACACQYABakEsEO8kGiAGIAAQsxQMAwsgAEEIaiABELcCDAkLIABBBGogARDpIgwICyACIAIoArQBENcSIAIgAigCrAE2AlggAiACKAKwASIANgJQIAIgACACKAK0AUEEdCIDaiIFNgJcA0AgAwRAIAIgACkDACAAKAIIQQEQyQUgA0EQayEDIABBEGohAAwBCwsgAiAFNgJUIAJB0ABqIgAQgxIgACACQYABakEsEO8kGiAGIAAQsxQLAkAgAigCNCIABEAgAUEMaiAAEOEgIAJB0ABqIAIoAjAgAigCNBDpByACIAIoAlA2AogBIAIgAigCVCIANgKAASACIAAgAigCWEEEdCIDaiIFNgKMAQNAIANFDQIgAiAAKQMAIAAoAggQ5xEgA0EQayEDIABBEGohAAwACwALIAJBgAFqIgAgAkEsEO8kGiABQRxqIAAQsxQgBBCUGwwHCyACIAU2AoQBIAJBgAFq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ayEEIAMpAwBCf4VCgIGChIiQoMCAf4MhCiADQQhqIQMMAAsACyAAKAIMQShsIQMgACgCCCEEA0AgAwRAIAQgARCZECADQShrIQMgBEEoaiEEDAELCyAAKAIQIgAoAgBBgICAgHhHBEAgACABEOQUDBALIABBBGogARDPJAwPCyACQQA2ApgCIAJBkAJqQeDvzgApAwA3AwAgAkHY784AKQMANwOIAiACQcwAaiIDIAJBuAFqIAJBiAJqIgQgAkGAA2oiBSACKAKEAyACKAKAAxsQoAEgBBD/BkHY784AEMEHIAggAkHAAWopAwA3AwAgAiACKQO4ATcDeCAFEJAgIAMQrBggAigChAEEQCACQQA2ApACIAJCgICAgIABNwKIAiACIAetIA1CMIYgATEAJUIohoQgATEAJEIghoSENwKUAiAAKAIMQShsIQEgAiACQfgAajYCnAIgACgCCCEDA0AgAQRAIAFBKGshASADIAJBiAJqEO0NIANBKGohAwwBCwsCQCAAKAIQIgEoAgBBgICAgHhHBEAgAUEEaigCACABQQhqKAIAIAJBiAJqEL8WDAELIAFBBGooAgAgAkGIAmoQvAILIAAoAiAiAARAIABBBGooAgAgAEEIaigCACACKAKcAhCiFQsgAkGIAmoQjh8LIAJB+ABqEMEHDA4LIABBCGogARDUJAwNCyAAKAIMRQ0MIABBDGogARDPJAwMCyAAQQRqIAEQzyQMCwsgAEEEaiABEM8kDAoLIABBCGoQkhoMCQsgACgCBCABEIoKDAgLIABBBGogARC7DAwHCyAAQQRqIAEQzyQMBgsgAEEEaiABEM8kDAULIABBBGogARDPJAwECyAAQQRqIAEQzyQMAwsgAEEEaiABEM8kDAILIABBBGogARDPJAwBCyAAQQRqIAEQmxYLIAJBkANqJAAL8R0CC38BfiMAQYACayIDJAAgASgCDCEHIANBmAFqIAIgASgCCCIGQQAQzwICQAJAAkACQCADLQCYAUEERwRAIAMpA5gBIg5C/wGDQgRSDQELAkAgBkUNACADQZgBaiACIAYQlBYgAy0AmAFBBEYNACADKQOYASIOQv8Bg0IEUg0CCyADQUBrIAEQ6gkgAygCQCADKAJEQcSKzABBChCuGCIEIAEpAxBQIgZyIQggAUEQaiEFIARFIAZyDQIgA0E4aiAFEOoJQQAhCCADKAI4IAMoAjxB3AAQlxZFDQIgA0EwaiAFEOoJIANBmAFqIAJBAEEAIAMoAjAgAygCNBCIDAJAAkAgAy0AmAFBBEcEQCADKQOYASIOQv8Bg0IEUg0BCwJAIAdFDQAgA0GYAWogAiAHEJQWIAMtAJgBQQRGDQAgAykDmAEiDkL/AYNCBFINAgsgAEEEOgAADAULIAAgDjcCAAwECyAAIA43AgAMAwsgACAONwIADAILIAAgDjcCAAwBCyACLQBRIQYCQCACLQBNIAhyDQAgAi0ATARAIANBKGogBRDqCSADKAIoIAMoAiwQvglFDQELIANBIGogBRDqCSADQZgBaiACQQBBACADKAIgIAMoAiQQiAwCQCADLQCYAUEERwRAIAMpA5gBIg5C/wGDQgRSDQELIABBBDoAAAwCCyAAIA43AgAMAQsgA0EYaiABEOoJIAItAEwhCyADKAIYIQQgA0HUAGogAygCHCIBQQJqEKQPIAMgASAEajYCaCADIAQ2AmQgA0GBgMQANgJgIAZBAkkiDSALQQBHciEFQQAhCANAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgA0HgAGoQxxciAQ4OCQsLCwsLCwsBBgMFAgQACyABQSJGDQcgAUEnRg0GIAFB3ABGDQkgAUGAgMQARw0KIAggDEoNCyADQeABaiIBIAMoAlggAygCXEEiQfzRxAAQ5gQgA0ERNgKMASADQQI2ApwBIANBxNHEADYCmAEMDAsgA0HUAGpB1s/EAEECEI8SDBcLIANB1ABqQdjPxABBAhCPEgwWCyADQdQAakH00MQAQQIQjxIMFQsgA0HUAGpB9tDEAEECEI8SDBQLIANB1ABqQdrPxABBAhCPEgwTCyADQdQAakEJEMQMDBILIANB1ABqQScQxAwgDEEBaiEMDBELIANB1ABqQSIQxAwgCEEBaiEIDBALIAYNDQwOCwJAIANB4ABqEMsWIgEEQCABKAIAQfUARg0BCyADQdQAakH40MQAQQIQjxIMDwsgAyADKAJoNgJ0IAMgAykCYDcCbCADQewAaiIBEMcXGiABEMsWIgFBzM/EABDyFiIKDQMgAUHU0cQAEMEhRQ0LIAFB2NHEABDBIUUNCyADQdQAakHcABDEDAwLCyABQQFrQQ9JDQMgAUHw//8AcUEQRg0EIAFBIGtB3wBJDQUgAUH/AGtBgQFPBEACQAJAAkACQAJAAkACQCABQajAAGsOAgECAAsgAUH//QNGDQIgAUGAAUkNAyABQf//A0sNBSALDQQgA0HUAGogARDEDAwUCyADQdQAakHcz8QAQQYQjxIMEwsgA0HUAGpB4s/EAEEGEI8SDBILIANB1ABqQejPxABBBhCPEgwRCyADQdQAaiABEMQMDBALIANBhgE2AowBIAMgATsBbCADQQE2AvQBIANBATYC5AEgA0GM0cQANgLgASADQQE2AuwBIAMgA0HsAGo2AogBIANBAzoAtAEgA0EINgKwASADQiA3AqgBIANCgICAgMAANwKgASADQQI2ApgBIAMgA0GYAWo2AvABIAMgA0GIAWo2AugBIANB1ABqIANB4AFqEP8cGgwPCyANDQcgC0UEQCADQdQAaiABEMQMDA8LIANBzAA2AowBIAMgATYCbCADQQE2AvQBIANBAjYC5AEgA0GY0cQANgLgASADQQE2AuwBIAMgA0HsAGo2AogBIANBAzoAtAEgA0EINgKwASADQiA3AqgBIANCgICAgMAANwKgASADQQI2ApgBIAMgA0GYAWo2AvABIAMgA0GIAWo2AugBIANB1ABqIANB4AFqEP8cGgwOCyAFDQkgA0HUAGogARDEDAwNCyADQeABaiIBIAMoAlggAygCXEEnQf7RxAAQ5gQgA0ERNgKMASADQQI2ApwBIANBgNLEADYCmAELIANCATcCpAEgAyABNgKIASADIANBiAFqNgKgASADQcgAaiADQZgBahC+ECADKALgASADKALkARDHHCADKAJUIAMoAlgQxxwgAi0AUEUNBiADKAJMIQYgAygCUCEBIANBCDYCbCADIAE2AvwBIAMgBjYC+AEgA0EANgLwASADIAEgBmo2AuwBIAMgBjYC6AEgA0ECNgLgASADIANB7ABqNgL0ASADQRBqIANB6AFqIgUQ2gUgAyADKAIUNgLkASADIAMoAhAiBDYC4AEgA0GYAWoCfyAEBEAgA0GIAWogBiABEMoOIANBsAFqIANB+AFqKQIANwMAIANBqAFqIANB8AFqKQIANwMAIANBoAFqIgcgBSkCADcDACADIAMpAuABNwOYASADQQA2ArgBA0AgAygCmAEhASADQQI2ApgBAn8gAUECRwRAIAMoApwBDAELIANBCGogBxDaBSADKAIIIQEgAygCDAshBCABRQRAIAMoAogBIQggAygCkAEhASADKAKMAQwDCyADIAMoArgBQQFqIgE2ArgBIAMoApABIQUgAygCjAEhCAJAIAEgBGoiBEUNACAEIAVJBEAgBCAIaiwAAEG/f0oNAQwKCyAEIAVHDQkLIAUgAygCiAFGBH8gA0GIAWogBUEBEIMJIAMoAowBBSAICyAEaiIBQQFqIAEgBSAEaxDwJBogAUHcADoAACADIAVBAWo2ApABDAALAAtBgICAgHghCCAGCyIEIAFBzorMAEEEQdKKzABBBxDTAiADQeABaiADKAKcASIBIAMoAqABQdmKzABBA0HciswAQQYQ0wIgAygCSCAGEMccIANB0ABqIANB6AFqKAIANgIAIAMgAykC4AE3A0ggAygCmAEgARDHHCAIIAQQ0RwMBgsgA0HsAGoiARDHFxogARDLFiEBDAcLIANBATYCnAEgA0HM0MQANgKYASADQgE3AqQBIANBhQE2AuQBIAMgAToAiAEgAyADQeABajYCoAEgAyADQYgBajYC4AEgA0HUAGogA0GYAWoQ/xwaDAkLIANBATYCnAEgA0Hwz8QANgKYASADQgE3AqQBIANBhQE2AuQBIAMgAToAiAEgAyADQeABajYCoAEgAyADQYgBajYC4AEgA0HUAGogA0GYAWoQ/xwaDAgLIANB1ABqIAEQxAwMBwsgAyABQYCABGtBCnZBgLADajYCgAEgAyABQf8HcUGAuANyNgJsIANBzAA2ApQBIANBzAA2AowBIANBAjYC9AEgA0ECNgLkASADQezRxAA2AuABIAMgA0HsAGo2ApABIAMgA0GAAWo2AogBIANBAzoA1AEgA0EINgLQASADQqCAgIAQNwLIASADQoCAgIDAADcCwAEgA0ECNgK4ASADQQM6ALQBIANBCDYCsAEgA0IgNwKoASADQoCAgIDAADcCoAEgA0ECNgKYASADIANBmAFqNgLwASADQQI2AuwBIAMgA0GIAWo2AugBIANB1ABqIANB4AFqEP8cGgwGC0G4zsQAQSxB5M7EABC8EgALIANBmAFqIAJBAEEAIAMoAkwiASADKAJQEIgMAkAgAy0AmAFBBEcEQCADKQOYASIOQv8Bg0IEUg0BCyADKAJIIAEQ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AgggBCgCBCEDIARBCDYCBCAEKAIAIREgBEEANgIAIAJBADYCsAEgAkKAgICAgAE3AqgBIAYhBSADIQQDQCAFRQ0DIAJBsAJqIgcgBEE4EO8kGiACQaADaiIQIAdBOBDvJBogAiACQagBajYC3AMgAiACQZABaiIHNgLYAyAQIAJB2ANqEOMHIAIoAtADIhAEQCAQIAcQvAILIAJB6AJqIgcgAkGgA2pBOBDvJBogBUEBayEFIAQgB0E4EO8kQThqIQQMAAsACyACQagBaiIEIA4QsRAgAiAaEJ8PIgM2AtgDIAMgAkGQAWoiBRDaBCACQbACaiAEELsVAkAgAigCpAEgBBDMBUUEQCACQaADaiIHIAQQuxUgAkHYA2oQnw8hBiATIAIpA6ADNwIAIBNBCGogAkGoA2opAwA3AgAgE0EQaiACQbADaikDADcCACACLQCEASEDIAJB2ABqEO0GIAwgAikC+AE3AgAgDEEIaiACQYACaikCADcCACAMQRBqIAJBiAJqKQIANwIAIAxBGGogAkGQAmooAgA2AgAgAkEANgJoIAJBETYCYCACQQk2AlggAiADOgCMASACIAY2AogBQdAAQQgQ9RghAyACQegCaiAEELEQIANCADcDACADQgA3AyAgA0IANwNAIANByABqQQA6AAAgAyACKQPoAjcDCCADQRBqIA0pAwA3AwAgA0EYaiACQfgCaikDADcDACADIAIpA7ACNwMoIANBMGogAkG4AmopAwA3AwAgA0E4aiACQcACaikDADcDACALQgA3AwAgC0EIakEAOgAAIAJBATYCpAMgAiADNgKoAyACQQE2AqwDIAIgCTYCtAMgAiAKNgKwAyACQQI2AqADIAUgBxCZFAwBCyACKQOIASEcIAJBoANqIAJBqAFqELEQIAJB2ANqEJ8PIQYgEiACKQOgAzcCACASQQhqIAJBqANqKQMANwIAIBJBEGogAkGwA2opAwA3AgAgAi0AhAEhAyACQdgAahDtBiAIIAIpAsABNwIAIAhBCGogAkHIAWopAgA3AgAgCEEQaiACQdABaikCADcCACAIQRhqIAJB2AFqKAIANgIAIAJBADYCYCACQQE2AlggAiAcNwOIASACIAM6AIQBIAIgBjYCgAEgAikDsAIQ2A8LIAJB2ANqEKIRIAIpA6gBENgPDAsLIAJBsAJqIgQgDhCxEEHIAEEEEP4aIgNCADcCMCADQYCAgIB4NgIYIANCBDcCECADQgA3AgggA0KAgICAgAE3AgAgA0E4akIANwIAIANBPmpCADcBACACKAKAASEGIAIgAzYCgAEgBiACQZABaiIFEO4QIAJB6AJqIAQQuxUgAigCpAEgBBDMBUUEQCACQaADaiIHIAQQuxUgFSACKQOgAzcCACAVQQhqIAJBqANqKQMANwIAIBVBEGogAkGwA2opAwA3AgAgAi0AhAEhAyACQdgAahDtBiAMIAIpApQCNwIAIAxBCGogAkGcAmopAgA3AgAgDEEQaiACQaQCaikCADcCACAMQRhqIAJBrAJqKAIANgIAIAJBATYCaCACQRE2AmAgAkEJNgJYIAIgAzoAjAEgAiAGNgKIAUHQAEEIEPUYIgNCADcDACADQgA3AyAgA0IANwNAIAMgAikDsAI3AwggA0EQaiACQbgCaikDADcDACADQRhqIAJBwAJqKQMANwMAIAMgAikD6AI3AyggA0EwaiANKQMANwMAIANBOGogAkH4AmopAwA3AwAgA0HIAGpBADoAACACQQE2AqwDIAIgAzYCqAMgAkEBNgKkAyALQgA3AwAgC0EIakEAOgAAIAIgCTYCtAMgAiAKNgKwAyACQQI2AqADIAUgBxCZFAwLCyAUIAIpA7ACNwIAIBRBCGogAkG4AmopAwA3AgAgFEEQaiACQcACaikDADcCACACLQCEASEDIAIpA4gBIRwgAkHYAGoQ7QYgCCACKQLcATcCACAIQQhqIAJB5AFqKQIANwIAIAhBEGogAkHsAWopAgA3AgAgCEEYaiACQfQBaigCADYCACACQQE2AmAgAkEBNgJYIAIgHDcDiAEgAiADOgCEASACIAY2AoABIAIpA+gCENgPDAoLIAIoArABBEAgCBD1ESEEIAIgBjYCqAMgAiADNgKkAyACIBE2AqADIAIgBCkCDDcCrAMgAiAEKAIUNgK0AyACIAQvARg7AbgDIAJBoANqIgUQlg8hAyACQdgAahDtBiACIAM2AmwgAkECNgJoIAJBETYCYCACQQk2AlggBBDQICAWQQhqIAJBsAFqKAIANgIAIBYgAikCqAE3AgAgC0IANwMAIAtBCGpBADoAACACIAk2ArQDIAIgCjYCsAMgAkECNgKgAyACQZABaiAFEJkUDAoLIAgQ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BCgCAEECRw0AIAQtAAhBAkcNACAELQAJQR5GDQELAkAgCBCQCyIERQ0AIAQoAgBBAkcNACAELQAIDQAgBC0ACUEERg0BCyADQQA7ARgMBAsgA0GoAWogARDxASADQQE6ACwgAyADKQCrBDcALSADIAMpALMENwA1IAMgAykAuwQ3AD0gAyADKADDBDYARSADQagCaiADQSxqELsGAkACQCADQdABaiIEEJALIgVFDQAgBSgCAEECRw0AIAUtAAgNACAFLQAJQQRGDQELAkAgBBCQCyIFRQ0AIAUoAgBBAkcNACAFLQAIQQJHDQAgBS0ACUEeRg0DCyADQQA7ARhBAAwDCwwBC0HAv8wAQShByPXLABC8EgALIANB3ABqIANB3AFqKQIANwIAIANB5ABqIANB5AFqKAIANgIAIAMoAtABIQUgA0ElNgLQASADIAMpAtQBNwJUIAMgBTYCUCADIAMpA+gBNwOgAiADQdAAahDiCCADQRBqIANBqAFqELIFIAMoAhQhBQJAAkACQCADKAIQRQRAIAMgBTYCUCADQdAAahCNISAEEJALIgUEQCAFKAIAQQpGDQILIANB2ABqIAQQuQkgA0HoussANgJUIANBNDoAUCADQaACaiADQegBaiADKALQAUElRiIJGygCACIFIANBpAJqIANB7AFqIAkbKAIAIgkgBSAJSRsgBSAJIAUgCUsbIANB0ABqEMMQIQUgBBCQCyIERQ0DIAQoAgBBJEcNAyADIAMpA+gBNwOgAiADKALQASADQSU2AtABQSRHDQIgA0GoAWogAygC1AEQ8gkMAwsgA0EBOgAYIAMgBTYCHEEBDAMLIANB3ABqIANB3AFqKQIANwIAIANB5ABqIANB5AFqKAIANgIAIAMoAtABIQQgA0ElNgLQASADIAMpAtQBNwJUIAMgBDYCUCADIAMpA+gBNwOgAiADQdAAahDiCCADQYACOwEYQQAMAgtBwL/MAEEoQdj1ywAQvBIACyADQQE6ABggAyAFNgIcQQELIANBqAFqEOAMDQAgAy0AGQ0BCyADQRhqELAcDAELIANBkAE6AKgBIAEgDSANIANBqAFqIgIQoRUgASgCfCEBIANBugFqQgA3AQAgA0IANwK0ASADQoCAgICAATcCqAEgA0EANgKwAUEcQQQQ/hoiBCALOgAZIARBADoAGCAEQQA2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NwDTASACIAEvAZoDOwDbASACIAEvAJ0DOwDeASACQfkBaiADQRVqKQAANwAAIAJB9AFqIANBEGopAQA3AgAgAkHsAWogA0EIaikBADcCACACIAMpAQA3AuQBIAogAkHDAWoQuwYgAiABNgLgASACQcACaiABEOohIAIoAsQCIQQgAigCwAIiBUETRwRAIAJBmAFqIAJByAJqQSgQ7yQaIAJB4AFqEKoeDAwLIABBADYCACAAIAQ2AgQgAkHgAWoQqh4MCgsgAiASOgD8ASACIBM6APsBIAJBAToA+gEgAiAUOgD5ASACIBU6APgBIAIgFjoA9wEgAiAXOgD2ASACIBg6APUBIAIgGToA9AEgAiAaOgDzASACIBs6APIBIAIgHDoA8QEgAiAdOgDwASACIB46AO8BIAIgHzoA7gEgAiAgOgDtASACICE6AOwBIAIgIjoA6wEgAiAjOgDqASACICQ6AOkBIAIgJToA6AEgAiAmOgDnASACICc6AOYBIAIgKDoA5QEgAiApOgDkASACICo6AOMBIAIgKzoA4gEgAiAsOgDhASACIC06AOABIAZBFWogA0EVaikAADcAACAGQRBqIANBEGopAQA3AQAgBkEIaiADQQhqKQEANwEAIAYgAykBADcBACAKIAJB4AFqELsGIAIgATYCwAIgAkGEAmogARBvIAIoAogCIQggAigChAIiEEUNBiACQaACaiIRIA5BCGooAgA2AgAgAiAOKQIANwOYAiACQcACahCqHiACKAKEAQRAQTBBCBD+GiIFIAg2AgggBSAQNgIEIAVBCDYCACAFIAIpA5gCNwIMIAVBFGogESgCADYCACABKAJ8IAJBhAFqIAUQ5g4FIAJBhAFqEIsgIA0gAikDmAI3AgAgDUEIaiARKAIANgIAIAIgCDYCiAEgAiAQNgKEAQsMAAsACyAAQQA2AgAgACAJNgIEDAsLIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRw0EIAEgASgCLBDyCQwJCyABIAEpA0A3A3ggASgCKCABQSU2AihBJEcNBCABIAEoAiwQ8gkMCgtBwL/MAEEoQZjzywAQvBIACyADKAIEIQEgAygCAEEEQQQQ/hoiByADNgIAIAIgBzYC7AEgAkEwNgL0ASACQcjzywA2AvABIAIgBTYC6AEgAiAGNgLkASACQbgBOgDgASAB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ISAgAS0AtQIhISABLQC0AiEiIAEtALMCISMgAS0AsgIhJCABLQCxAiElIAEtALACISYgAS0ArwIhJyABLQCuAiEoIAEtAK0CISkgAS0ArAIhKiABLQCrAiErIAEtAKoCISxBASEOA0BBEyEFIAQQ8woiBkUNCiAGKAIAQQJHDQogBi0ACEECRw0KIAYtAAlBCEcNCiAKIAgpAgA3AgAgASgCyAIhBSABQSU2AsgCIAEgASkD4AI3A5gDIApBCGogCEEIaikCADcCACAKQRBqIAhBEGooAgA2AgAgAiAFNgLAAiACQcACahDgCAJAAkAgBBDzCiIFRQ0AIAUoAgBBAkcNACAFLQAIQQJHDQAgBS0ACUEMRg0BC0EAIQ4gAkEAOgDdASACIAEpAaoCNwDDASACIAEpAbICNwDLASACIAEpAboCNwDTASACIAEvAcICOwDbASACIAEvAMUCOwDeASACQfkBaiADQRVqKQAANwAAIAJB9AFqIANBEGopAQA3AgAgAkHsAWogA0EIaikBADcCACACIAMpAQA3AuQBIAQgAkHDAWoQuwYgAiABNgLgASACQcACaiABEMMhIAIoAsQCIQQgAigCwAIiBUETRwRAIAJBmAFqIAJByAJqQSgQ7yQaIAJB4AFqEIEdDAwLIABBADYCACAAIAQ2AgQgAkHgAWoQgR0MCgsgAiAROgD8ASACIBI6APsBIAJBAToA+gEgAiATOgD5ASACIBQ6APgBIAIgFToA9wEgAiAWOgD2ASACIBc6APUBIAIgGDoA9AEgAiAZOgDzASACIBo6APIBIAIgGzoA8QEgAiAcOgDwASACIB06AO8BIAIgHjoA7gEgAiAfOgDtASACICA6AOwBIAIgIToA6wEgAiAiOgDqASACICM6AOkBIAIgJDoA6AEgAiAlOgDnASACICY6AOYBIAIgJzoA5QEgAiAoOgDkASACICk6AOMBIAIgKjoA4gEgAiArOgDhASACICw6AOABIAdBFWogA0EVaikAADcAACAHQRBqIANBEGopAQA3AQAgB0EIaiADQQhqKQEANwEAIAcgAykBADcBACAEIAJB4AFqELsGIAIgATYCwAIgAkGEAmogARBwIAIoAogCIQYgAigChAIiD0UNBiACQaACaiIQIA1BCGooAgA2AgAgAiANKQIANwOYAiACQcACahCBHSAC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BgsgASgCKCEDIAFBJTYCKCABIAEpA0A3A3ggAkGECWogC0EIaikCADcCACACQYwJaiALQRBqKAIANgIAIAIgCykCADcC/AggAiADNgL4CCACQfgIahDiCCACIAo2AqQEIAIgCTYCrAQgAiAGNgKoBCAGIAlBOGxqIQtBACEEIAYhAwJAA0AgAyALRg0BIAMoAjAhBSADQThqIQMCQAJAIAUoAgBBCGsOAgACAQtBASEEDAELIARBACEERQ0ACyABKAJ8IQMgAkHbADoA+AggESADIAMgEUsbIBEgAyADIBFJGyACQfgIahDDECEFIAcQkAsiA0UNBSADKAIAQSRHDQUgASABKQNANwN4IAEoAiggAUElNgIoQSRHDQMgASABKAIsEPIJDAULIApBgICAgHhHDQMLIAYhBQwEC0HAv8wAQShB2MDLABC8EgALQcC/zABBKEHAuMsAELwSAAsgAiARIAEoAnwiAyADIBFJGzYCjAkgAiARIAMgAyARSxs2AogJIAIgCTYChAkgAiAGNgKACSACIAo2AvwIQQcMAgsgAkGkBGoQgB8LIAIgBTYC/AhBFAs2AvgIIAJBmAFqIAJB+AhqENESIAIoApwBIQMgAigCmAEhBQwFCyACQbAFahDSBAsgAiADNgL8CEEUCzYC+AggAkH4AGogAkH4CGoQ0RIgAigCfCEDIAIoAnghBQwCCyACQYQJaiAHELkJIAJBCGogBxCYECACQYUBNgKACSACQezBywA2AvwIIAJBMDoA+AggAigCCCACKAIMIAJB+AhqEMMQIQNBASEFIAcQkAsiBEUNASAEKAIAQSRHDQEgASABKQNANwN4IAEoAiggAUElNgIoQSRGBEAgASABKAIsEPIJDAILQcC/zABBKEH0wssAELwSAAsgASgCLCEDQQEhBQsgGCADNgIEIBggBTYCACACQdAMaiQAIAgoAhQhAyAIKAIQDQggAUEsaiEGIA9BAEchCiAIQdAAakEEciEPA0ACQAJAAkACQCAMENYZDQAgDBCQCyIERQ0AIAQoAgBBC0cNACAPIAYpAgA3AgAgASgCKCEFIAFBJTYCKCABIAEpA0A3A3ggD0EIaiIEIAZBCGoiAikCADcCACAPQRBqIgcgBkEQaiIJKAIANgIAIAggBTYCUCAIQdAAahDiCCAMEJALIgUEQCAFKAIAQQxG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OiANIAo6ADsgDSALOgA8IA0gDDoAPQJAAkACQAJAAkACQCAFEI0RRQRAIAUoAgBBBUcNAiAKRQ0BIA1BKGogBRCUDyANKAIsIQIgDSgCKCEEQbmGzABBBxDrFCEaIA1B4QA6AIABIA0gGjcDiAEgASAEIAIgDUGAAWoQ+xQgDS0APCELDAELIA0gBRCUDyANKAIEIQIgDSgCACANQd8AOgCAASACIA1BgAFqEMMQIQICQCABQShqEPMKIgRFDQAgBCgCAEEkRw0AIAEgASkD4AI3A5gDIAEoAsgCIAFBJTYCyAJBJEcEQEHAv8wAQShByMzLABC8EgALIAEgASgCzAIQ6wkLIABBDTYCACAAIAI2AgQMAgsgC0H/AXFFDQAgDUEgaiAFEJQPIA0oAiQhAiANKAIgIQRBn4jMAEEIEOsUIRogDUHhADoAgAEgDSAaNwOIASABIAQgAiANQYABahD7FAsgAUEoaiECAkACQCABLQCgAkECRgRAIA0tADlFDQELIA1BADoAPgwBCwJAIAIQ8woiBARAIAQoAgBBCEYNAQsgDUEAOgA+DAELIAEoAsgCIQQgAUElNgLIAiABIAEpA+ACNwOYAyANQYwBaiABQdQCaikCADcCACANQZQBaiABQdwCaigCADYCACANIAEpAswCNwKEASANIAQ2AoABIA1BgAFqEOAIIA1BAToAPgsgDUEYaiABEMYMIA0oAhwhCiANKAIYRQRAIA1BAToARSANQQE6AFEgDSABLQC7AjoAUCANIAEoAaoCNgA/IA0gAS8BrgI7AEMgDSABKQCxAjcARiANIAEvALkCOwBOIA0gASkAvQI3AFIgDSABLwDFAjsAWiANQfUAaiABQb8CaikAADcAACANQfAAaiABQboCaikBADcCACANQegAaiABQbICaikBADcCACANIAEpAaoCNwJgIAIgDUE/ahC7BiANIAE2AlwgDUGIAWogBUEIaikDADcDACANQZABaiAFQRBqKQMANwMAIA1BmAFqIAVBGGopAwA3AwAgDUGoAWogA0EIaigCADYCACANIAc2AqwBIA0gCjYC1AEgDSAFKQMANwOAASANIAMpAgA3A6ABIA0gDUEwajYCsAEgDSANQThqNgK0ASANIA1BO2o2AtABIA0gDUE6ajYCzAEgDSANQTlqNgLIASANIA1BPmo2AsQB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IAJBKGoQ3BwMIQsgAkEANgI4IAJBATYCLCACQcCKxgA2AiggAkIENwIwIAEoAhQgASgCGCACQShqENwcDCALIAJBADYCOCACQQE2AiwgAkHIisYANgIoIAJCBDcCMCABKAIUIAEoAhggAkEoahDcHAwfCyACQQA2AjggAkEBNgIsIAJB0IrGADYCKCACQgQ3AjAgASgCFCABKAIYIAJBKGoQ3BwMHgsgAkEANgI4IAJBATYCLCACQdiKxgA2AiggAkIENwIwIAEoAhQgASgCGCACQShqENwcDB0LIAJBADYCOCACQQE2AiwgAkHgisYANgIoIAJCBDcCMCABKAIUIAEoAhggAkEoahDcHAwcCyACQQA2AjggAkEBNgIsIAJB6IrGADYCKCACQgQ3AjAgASgCFCABKAIYIAJBKGoQ3BwMGwsgAkEANgI4IAJBATYCLCACQfCKxgA2AiggAkIENwIwIAEoAhQgASgCGCACQShqENwcDBoLIAJBADYCOCACQQE2AiwgAkH4isYANgIoIAJCBDcCMCABKAIUIAEoAhggAkEoahDcHAwZCyACQQA2AjggAkEBNgIsIAJBgIvGADYCKCACQgQ3AjAgASgCFCABKAIYIAJBKGoQ3BwMGAsgAkEANgI4IAJBATYCLCACQYiLxgA2AiggAkIENwIwIAEoAhQgASgCGCACQShqENwcDBcLIAJBADYCOCACQQE2AiwgAkGQi8YANgIoIAJCBDcCMCABKAIUIAEoAhggAkEoahDcHAwWCyACQQA2AjggAkEBNgIsIAJBmIvGADYCKCACQgQ3AjAgASgCFCABKAIYIAJBKGoQ3BwMFQsgAkEANgI4IAJBATYCLCACQaCLxgA2AiggAkIENwIwIAEoAhQgASgCGCACQShqENwcDBQLIAJBADYCOCACQQE2AiwgAkGoi8YANgIoIAJCBDcCMCABKAIUIAEoAhggAkEoahDcHAwTCyACIABBEGo2AgwgAkECNgIsIAJBwIvGADYCKCACQgE3AjQgAkHVAzYCHCACIAJBGGo2AjAgAiACQQxqNgIYIAEoAhQgASgCGCACQShqENwcDBILIAJBADYCOCACQQE2AiwgAkHQi8YANgIoIAJCBDcCMCABKAIUIAEoAhggAkEoahDcHAwRCyACQQE2AiwgAkGgxMwANgIoIAJCATcCNCAC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AGoiBRCQCyICBEAgAigCAEEJRg0BCyADQbAEaiAFELkJIANBkLvLADYCrAQgA0E0OgCoBCADQcABaiADQYgBaiADKAJwQSVGIgIbKAIAIgEgA0HEAWogA0GMAWogAhsoAgAiAiABIAJJGyABIAIgASACSxsgA0GoBGoQwxAhASAFEJALIgJFDQwgAigCAEEkRg0BDAwLIANBtARqIANB/ABqKQIANwIAIANBvARqIANBhAFqKAIANgIAIAMoAnAhAiADQSU2AnAgAyADKQJ0NwKsBCADIAI2AqgEIAMgAykDiAE3A8ABIANBqARqIgIQ4gggAiADQcgAahCYASADKAKsBCEEIAMoAqgEIglBgICAgHhHBEAgAUGAAWohDCABQYIDaiEKIANB9ABqIQYgAygCsAQhAiADIAQ2AoAIIAMgBCACQQZ0Ig9qIhA2AowIIAMgCTYCiAggCUEGdCELIANB2ARqIRFBACECA0AgBCAIaiENIAIgD0ZFBEAgA0GQCGoiEiACIARqIhNBwAAQ7yQaIANBqARqIBNBwAAQ7yQaIBEQ7R4gDSASQSgQ7yQaIAhBKGohCCACQUBrIQIMAQsLIAMgEDYChAggC0EobiEIIANBgAhqELcOIAQhAgJAIAlFDQAgCyAIQShsIglGDQAgAiALIAkQrxciAkUNBgsgAyACNgL4ByADIAg2AvQHIAMgDSAEa0EobjYC/AcgA0GACGoQoxICQAJAIAUQkAsiAgRAIAIoAgBBCkYNAQsgA0GwBGogBRC5CSADQei6ywA2AqwEIANBNDoAqAQgA0HAAWogA0GIAWogAygCcEElRiICGygCACIBIANBxAFqIANBjAFqIAIbKAIAIgIgASACSRsgASACIAEgAksbIANBqARqEMMQIQEgBRCQCyICRQ0MIAIoAgBBJEYNAQwMCyADQbQEaiAGQQhqKQIANwIAIANBvARqIAZBEGooAgA2AgAgAygCcCECIANBJTYCcCADIAI2AqgEIAMgAykDiAE3A8ABIAMgBikCADcCrAQgA0GoBGoQ4ghBACECAkACQCAFEJALIgRFDQAgBCgCAEETRw0AIANBEGogA0HIAGpBwLXLABDHASADKAIUIQIgAygCEA0BCyADIAI2ApAIIAUQkAsiBARAIAQoAgBBA0YNBQsgA0GwBGogBRC5CSADQYDIywA2AqwEIANBNDoAqAQgA0HAAWogA0GIAWogAygCcEElRiICGygCACIBIANBxAFqIANBjAFqIAIbKAIAIgIgASACSRsgASACIAEgAksbIANBqARqEMMQIQEgBRCQCyICRQ0LIAIoAgBBJEcNCyADIAMpA4gBNwPAASADKAJwIANBJTYCcEEkRw0IIANByABqIAMoAnQQ8gkMCwsgA0GBgICAeDYCkAQgAyACNgKUBAwMCyADIAMpA4gBNwPAASADKAJwIANBJTYCcEEkRw0HIANByABqIAMoAnQQ8gkMCgsgAyAENgKUBCADQYGAgIB4NgKQBAwMCyADIAMpA4gBNwPAASADKAJwIANBJTYCcEEkRw0GIANByABqIAMoAnQQ8gkMCgsgA0G0BGogBkEIaikCADcCACADQbwEaiAGQRBqKAIANgIAIAMoAnAhBCADQSU2AnAgAyAENgKoBCADIAMpA4gBNwPAASADIAYpAgA3AqwEIANBqARqEOIIIANBmARqIANB/AdqKAIANgIAIAMgAjYCoAQgAyAHNgKcBCADIAMpAvQHIhQ3A5AEIBSnIgRBgICAgHhrDgIMCwELIANBgYCAgHg2ApAEIAMgBzYClAQMCgsgAykClAQhFCADQagEaiIGIANByABqQagDEO8kGiABEOAMIAEgBkGoAxDvJCEBIAMgDjoA1wcgAyABKQCDAzcA2AcgAyABKQCLAzcA4AcgAyABKQCTAzcA6AcgAyABKACbAzYA8AcgDCADQdcHahC7BiADQQE7ADIgAyABLQCIAzoAMSADIAEoAYIDNgArIAMgAS8BhgM7AC8gAyABKQCLAzcANCADIAEpAJMDNwA8IAMgASgAmwM2AEQgA0HhAGogCkEVaikAADcAACADQdwAaiAKQRBqKQEANwIAIANB1ABqIApBCGopAQA3AgAgAyAKKQEANwJMIAwgA0ErahC7BiADIAE2AkggAyACNgKkCCADIAc2AqAIIAMgFDcClAggAyAENgKQCCADIANBJGo2ApwIIANBCGogAUEBIBSnIBRCIIinEOUTEP4CIAMoAgwhBQJAIAMoAghFBEAgACADKQKQCDcCACAAQQhqIANBmAhqKAIANgIAIAEoAnwhASADKAIkIQQgBhD2DiAAQQE7ASQgACACNgIgIAAgBzYCHCAAIAQgASABIARJGzYCFCAAIAQgASABIARLGzYCECAAIAU2AgwgACADKALABDYCGCAGEP8YDAELIABBgYCAgHg2AgAgACAFNgIEIANBkAhqEIgfIAcQlyIgA0GkCGoQiCALIANByABqEKoeDAwLAAtBwL/MAEEoQfDJywAQvBIAC0HAv8wAQShBgMrLABC8EgALQcC/zABBKEGQyssAELwSAAsgA0GBgICAeDYCkAQgAyABNgKUBCADQZAIahCIIAwBCyADQYGAgIB4NgKQBCADIAE2ApQECyADQfQHahCIHwwBCyADQYGAgIB4NgKQBCADIAE2ApQECyAHEJciCyADQZAEakEEchCyGwsgA0HIAGoQ4AwLIABBgICAgHg2AgALIANB0AhqJAALtBICEX8BfiMAQcAIayIDJAAgAyACNgIkAkACQAJAAkAgAUEoaiIMEPMKIgJFDQAgAigCAEEURw0AIAItAARBBEYNAQsgDBDzCiICRQ0BIAIoAgBBIUcNAQsgAS0AoAJBAkcNACABLQCqAiEOIANByABqIgIgARDdAiADQQE6AOsDIAMgASkAqwI3AOwDIAMgASkAswI3APQDIAMgASkAuwI3APwDIAMgASgAwwI2AIQEIANB8ABqIgUgA0HrA2oQuwYgA0EYaiACQQBBABB+IAMoAhwhBwJAAkACQAJAAkACQAJAAkACQAJAAkACQCADKAIYRQRAAkACQAJAIAUQ8woiAgRAIAIoAgBBCUYNAQsgA0GoBGogBRDrDCADQZC7ywA2AqQEIANBNDoAoAQgA0HgA2ogA0GoA2ogAygCkANBJUYiAhsoAgAiASADQeQDaiADQawDaiACGygCACICIAEgAkkbIAEgAiABIAJLGyADQaAEahDDECEBIAUQ8woiAkUNDCACKAIAQSRGDQEMDAsgA0GsBGogA0GcA2opAgA3AgAgA0G0BGogA0GkA2ooAgA2AgAgAygCkAMhAiADQSU2ApADIAMgAykClAM3AqQEIAMgAjYCoAQgAyADKQOoAzcD4AMgA0GgBGoiAhDgCCACIANByABqEJcBIAMoAqQEIQQgAygCoAQiCUGAgICAeEcEQCABQaoCaiEKIANBlANqIQYgAygCqAQhAiADIAQ2AvAHIAMgBCACQQZ0Ig9qIhA2AvwHIAMgCTYC+AcgCUEGdCELIANB0ARqIRFBACECA0AgBCAIaiENIAIgD0ZFBEAgA0GACGoiEiACIARqIhNBwAAQ7yQaIANBoARqIBNBwAAQ7yQaIBEQ7R4gDSASQSgQ7yQaIAhBKGohCCACQUBrIQIMAQsLIAMgEDYC9AcgC0EobiEIIANB8AdqELcOIAQhAgJAIAlFDQAgCyAIQShsIglGDQAgC0UEQEEIIQIMAQsgBCALQQggCRC2AiICRQ0GCyADIAI2AugHIAMgCDYC5AcgAyANIARrQShuNgLsByADQfAHahCjEgJAAkAgBRDzCiICBEAgAigCAEEKRg0BCyADQagEaiAFEOsMIANB6LrLADYCpAQgA0E0OgCgBCADQeADaiADQagDaiADKAKQA0ElRiICGygCACIBIANB5ANqIANBrANqIAIbKAIAIgIgASACSRsgASACIAEgAksbIANBoARqEMMQIQEgBRDzCiICRQ0MIAIoAgBBJEYNAQwMCyADQawEaiAGQQhqKQIANwIAIANBtARqIAZBEGooAgA2AgAgAygCkAMhAiADQSU2ApADIAMgAjYCoAQgAyADKQOoAzcD4AMgAyAGKQIANwKkBCADQaAEahDgCEEAIQICQAJAIAUQ8woiBEUNACAEKAIAQRNHDQAgA0EQaiADQcgAakHAtcsAEMYBIAMoAhQhAiADKAIQDQELIAMgAjYCgAggBRDzCiIEBEAgBCgCAEEDRg0FCyADQagEaiAFEOsMIANBgMjLADYCpAQgA0E0OgCgBCADQeADaiADQagDaiADKAKQA0ElRiICGygCACIBIANB5ANqIANBrANqIAIbKAIAIgIgASACSRsgASACIAEgAksbIANBoARqEMMQIQEgBRDzCiICRQ0LIAIoAgBBJEcNCyADIAMpA6gDNwPgAyADKAKQAyADQSU2ApADQSRHDQggA0HIAGogAygClAMQ6wkMCwsgA0GBgICAeDYCiAQgAyACNgKMBAwMCyADIAMpA6gDNwPgAyADKAKQAyADQSU2ApADQSRHDQcgA0HIAGogAygClAMQ6wkMCgsgAyAENgKMBCADQYGAgIB4NgKIBAwMCyADIAMpA6gDNwPgAyADKAKQAyADQSU2ApADQSRHDQYgA0HIAGogAygClAMQ6wkMCgsgA0GsBGogBkEIaikCADcCACADQbQEaiAGQRBqKAIANgIAIAMoApADIQQgA0ElNgKQAyADIAQ2AqAEIAMgAykDqAM3A+ADIAMgBikCADcCpAQgA0GgBGoQ4AggA0GQBGogA0HsB2ooAgA2AgAgAyACNgKYBCADIAc2ApQEIAMgAykC5AciFDcDiAQgFKciBEGAgICAeGsOAgwLAQsgA0GBgICAeDYCiAQgAyAHNgKMBAwKCyADKQKMBCEUIANBoARqIgYgA0HIAGpBoAMQ7yQaIAEQpw0gASAGQaADEO8kIQEgAyAOOgDHByADIAEpAKsCNwDIByADIAEpALMCNwDQByADIAEpALsCNwDYByADIAEoAMMCNgDgByAMIANBxwdqELsGIANBATsAMiADIAEtALACOgAxIAMgASgBqgI2ACsgAyABLwGuAjsALyADIAEpALMCNwA0IAMgASkAuwI3ADwgAyABKADDAjYARCADQeEAaiAKQRVqKQAANwAAIANB3ABqIApBEGopAQA3AgAgA0HUAGogCkEIaikBADcCACADIAopAQA3AkwgDCADQStqELsGIAMgATYCSCADIAI2ApQIIAMgBzYCkAggAyAUNwKECCADIAQ2AoAIIAMgA0EkajYCjAggA0EIaiABQQEgFKcgFEIgiKcQ5RMQgQMgAygCDCEFAkAgAygCCEUEQCAAIAMpAoAINwIAIABBCGogA0GICGooAgA2AgAgASgCnAMhASADKAIkIQQgBhD2DiAAQQE7ASQgACACNgIgIAAgBzYCHCAAIAQgASABIARJGzYCFCAAIAQgASABIARLGzYCECAAIAU2AgwgACADKAK4BDYCGCAGEOMYDAELIABBgYCAgHg2AgAgACAFNgIEIANBgAhqEIgfIAcQlyIgA0GUCGoQ/h4LIANByABqEIEdDAwLAAtBwL/MAEEoQfDJywAQvBIAC0HAv8wAQShBgMrLABC8EgALQcC/zABBKEGQyssAELwSAAsgA0GBgICAeDYCiAQgAyABNgKMBCADQYAIahD+HgwBCyADQYGAgIB4NgKIBCADIAE2AowECyADQeQHahCIHwwBCyADQYGAgIB4NgKIBCADIAE2AowECyAHEJciCyADQYgEakEEchCCGwsgA0HIAGoQpw0LIABBgICAgHg2AgALIANBwAhqJAAL41kCDX8CfiMAQeABayIGJAAgBkEBOgBcIAYgAS0AjgM6AFsgBiABLQCeAzoAayAGIAEpAYIDNwBPIAYg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C0HAv8wAQShB2MXLABC8EgALQcC/zABBKEGIxssAELwSAAtBwL/MAEEoQZjGywAQvBIAC0HAv8wAQShBwMbLABC8EgALQcC/zABBKEGIxcsAELwSAAtBwL/MAEEoQZjFywAQvBIACyAOQgBSDQEgCxC8FQwCCyABKAJ8IQFByABBCBD+GiIHIAU6AEEgByAEOgBAIAdBGGogBkHIAGopAwA3AwAgB0EQaiAGQUBrKQMANwMAIAdBCGogCykDADcDACAHIAYpAzA3AwAgByACIAEgASACSRs2AiQgByACIAEgASACSxs2AiAgByADKQMANwMoIAdBMGogA0EIaikDADcDACAHQThqIANBEGopAwA3AwBBAAwCCyAOIA8QkiILIAMpAwAQ2A9BAQshASAAIAc2AgQgACABNgIAIAZB8ABqJAALpRACCH8EfiMAQYABayICJAAgAUGKA2oiBCkBACELIAFBkgNqIgMoAQAhBSABKQGCAyEKIAEvAZYDIQYgAS0AmAMhCCABKAGaAyEHIAEtAJ4DIQkgAkEwaiAEKQEANwIAIAJBOGogAykBADcCACACQT1qIAFBlwNqKQAANwAAIAIgCToAdCACIAc2AHAgAkEBOgBvIAIgCDoAbiACIAY7AGwgAiAFNgBoIAIgCzcAYCACIAo3AFggAiABKQGCAzcCKCABQYABaiACQdgAaiIHELsGIAIgATYCJCABQShqIgUQ/BghBAJAIAUQkAsiA0UEQCABKALYAiEBIAJBADoAWCABIAEgBxDDECEBIABBBTYCACAAIAE2AgQMAQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkBBECADKAIAQQJrIgMgA0EjTxsiA0EZaw4KBQEGBwEBAQEBAgALIANFDQIgA0EJRg0DCyACQeQAaiAFELkJIAIgBRCYECACQcUANgJgIAJBpILMADYCXCACQTA6AFggAigCACACKAIEIAJB2ABqEMMQIQQgBRCQCyIDRQ0PIAMoAgBBJEYNBgwPCyABIAEpA0A3A3ggASgCKCABQSU2AihBJEcNBiABKAIsIQEgAEEFNgIAIAAgATYCBAwPCyABKAIoIQUgAUElNgIoIAEgASkDQDcDeCACQeQAaiABQTRqKQIANwIAIAJB7ABqIAFBPGooAgA2AgAgAiABKQIsNwJc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IAJBK0cgDEQAAAAAAAAAAGFyDQILRAAAAAAAAPB/IQ0MAQsgAygCfCEBIABCAjcDACAAIAE2AggMAQsgARCqDyICRQRAIANBCGogBSAHIAEoAtABEPsQIAAgAygCCCADKAIMEOsUNwMQIAAgDTkDCCAAQgA3AwAMAQsgAEICNwMAIAAgAjYCCAsgA0GQAWokAAvkDgESfyMAQdABayIDJAACQCABLQD6AkUEQCAAQQA2AgggAEKAgICAwAA3AgAMAQsgA0EANgJMIANCgICAgMAANwJEIAFBLGohCiADQdwAaiETIANB0ABqQQRyIQggA0GsAWohECADQdgAaiEUIAFBKGoiBxD8GCEMQQghEUEEIRICQAJAAn8DQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBxCQCyIEBEAgBCgCAEEFRg0BCyANRQ0BAkAgBxCQCyIERQ0AIAQoAgBBAkcNACAELQAIQQJHDQAgBC0ACUEbRg0DCyAHEJALGgwGCyAHEPwYIQ4gBxCQCyIERQRAIAEoAtgCIQEgA0EAOgBQIAEgASADQdAAahDDECEFDA4LIAQoAgBBJEYEQCABIAEpA0A3A3ggASgCKCABQSU2AihBJEYEQCABKAIsIQUMDwtBwL/MAEEoQYjNywAQvBIACyAIIAopAgA3AgAgASgCKCEFIAFBJTYCKCABIAEpA0A3A3ggCEEIaiIEIApBCGoiCSkCADcCACAIQRBqIgYgCkEQaiIPKAIANgIAIAMgBTYCUCADQdAAahDiCAJAAkACQCAHEJALIgUEQCAFKAIAQQlGDQELIANBkAFqIAFBAEEAEMwBIAMCfyADLQCkAUECRwRAIBAgAykDkAE3AgAgEEEQaiADQaABaikDADcCACAQQQhqIANBmAFqKQMANwIAIAggAykCqAE3AgAgBCADQbABaikCADcCACAGIANBuAFqKQIANwIAIAhBGGogA0HAAWooAgA2AgBBGgwBCyADIAMoApABNgJUQTILNgJQIANBKGogA0HQAGoiBBDOEiADKAIsIQUgAygCKA0QIANBBToAWCADIAU2AlAgA0EgaiABIARBAEEBEDggAygCJCEFIAMoAiBFDQEMEAsgCCAKKQIANwIAIAEoAighBSABQSU2AiggASABKQNANwN4IAQgCSkCADcCACAGIA8oAgA2AgAgAyAF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KAIgIQQgAkGcAWoiCiACQShqIgsQmw0gCkEEIAIoApwBQQFqIgBBfyAAGyIAIABBBE0bEJsLIAIoAqABIQAgAigCnAENCyACKAKkASIGIAQ2AgggBiAQNwMAQQEhBCACQQE2ApgBIAIgBjYClAEgAiAANgKQASAKIAtBKBDvJBpBGCEAA0AgAkEIaiACQZwBaiIKEKQHAkAgAikDCCIQUEUEQCACKAIQIQsgBCACKAKQAUcNASACQcQBaiAKEJsNIAJBkAFqIAQgAigCxAFBAWoiBkF/IAYbEP8SIAIoApQBIQYMAQtCABDkHiACQZwBahDfICACKAKQASEGIAIoApQBIQAMDAsgACAGaiIKIAs2AgAgCkEIayAQNwMAIAIgBEEBaiIENgKYASAAQRBqIQAMAAsACwALAAsgASAOOgA9IAJB0AFqJAAPCyADKAIIQQVHBEAgASADQQhqEJEaCyADQTxqIAEQrB0gA0FAayABEPUbIANBMGogARCrFAwICyABIANBBGoQtgkMBwsgASADQQRqEOgQDAYLIANBJGogARCsHSADQShqIAEQ9RsgA0EsaiABEKsUDAULIANBMGogARCrFCABLQA5IQAgAygCCEEDRgRAIAFBADoAOSADQQxqIAEQ5SILIAFBAToAOSADQTxqIAEQrB0gASAAOgA5IANBQGsgARC9HQwECyABKAIwEJANIQAgCUEIakHg784AKQMAIhA3AgAgCUHY784AKQMAIhE3AgAgAkHYAGogEDcDACAIIAcpAgA3AgAgCEEIaiAHQQhqKAIANgIAIAJBAToAeCACIAE2AnAgAiAANgJ0IAJBAToAiQEgAiARNwNQIAIgAS0APDoAjAEgAiABLwE6OwGKASABLQA4IQAgAiABLQA9OgCNASACIAA6AIgBIANBIGogAkHQAGoiABCEAyAAEOQgDAMLIAEgA0EIahCRGiADQTBqIAMoAjAiBigCCEEGdCEAIAYoAgQhBANAIAAEQCAEQTBqIAEQqxQgAEFAaiEAIARBQGshBAwBCwsgASgCMBCQDSEAIAlBCGpB4O/OACkDACIQNwIAIAlB2O/OACkDACIRNwIAIAJB2ABqIBA3AwAgCCAHKQIANwIAIAhBCGogB0EIaigCADYCACACQQE6AHggAiABNgJwIAIgADYCdCACQQE6AIkBIAIgETcD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IAQpAgA3A4gBIAMpApQBIQ0gAygCnAEgAhCYHiELIANBEGogAiADQYgBahCJAiADIAs2AiQgAyANNwIcIAkgA0EgaikCADcCACAKIANBGGopAgA3AgAgBCADKQIQNwIAIAFBAWshASAEQRhqIQQMAQsLIAAgBSkCADcCBCAAQQxqIAVBCGooAgA2AgAgACAGNgIYIAAgBzYCFCAAIAg2AhAMCQsgASkDCCENIAEoAgQgAhBMIQEgACANNwMIIAAgATYCBAwICyADQYgBaiABKAIEIgRBgAEQ7yQaIAMoAoACIQUgAygChAIhBiADKALoASEHIANBiAJqIANB0AFqIAIQhBgCQCADKAKIASIBQQhGBEAgA0EINgKgAgwBCyADKALMASEIIAMoAsgBIQkCQCABQQdGBEAgA0EHNgLoAgwBCyADIAE2AhAgA0EQaiIBQQRyIANBiAFqQQRyQSQQ7yQaIANB6AJqIAEgAhDhCAsgA0HIAmogA0GwAWogAhCEGCADIAg2AuQCIAMgCTYC4AIgA0GgAmogA0HoAmpBKBDvJBoLAkAgB0GAgICAeEYEQCADQYCAgIB4NgLoAgwBCyADQegCaiADQegBaiACEIQYCyADQegAaiADQZgCaikCADcDACADQeAAaiADQZACaikCADcDACADIAMpAogCNwNYIANBEGoiASADQaACakHIABDvJBogA0GAAWogA0H4AmopAgA3AwAgA0H4AGogA0HwAmopAgA3AwAgAyADKQLoAjcDcCAEIAFB+AAQ7yQiASAGNgJ8IAEgBTYCeCAAIAE2AgQMBwsgASkCDCENIAEoAgghBCABKAIEIAIQTCEBIAAgBCACEIMXNgIIIAAgATYCBCAAIA03AgwMBgsgASkCDCENIAEoAgghBCABKAIEIAIQTCEBIAAgBCACEIMXNgIIIAAgATYCBCAAIA03AgwMBQsgASgCDCABKAIcIAEoAhggASgCFCEKIAEoAhAhCwJ/QQIgASgCBCIFQQJGDQAaIAEoAgghASAFRQRAIAEgAhDcCiEGQQAMAQsgASACEEwhBiAFCyEEIAIQmB4hASACEJgeIQUgAhCDFyECIAAgCjYCFCAAIAs2AhAgACAFNgIcIAAgATYCGCAAIAY2AgggACAENgIEIAAgAjYCDAwECyABKQIUIQ0gASgCECEEIAEoAgwg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IAJBEGogARDmBkEBIQQgAigCFCEDIAIoAhANA0EAIQQgBkHIx8sAEIcbRQ0DQQRBBBD+GiIHIAM2AgAgAkEBNgLwAyACIAc2AuwDIAJBATYC6AMDQCAGQcjHywAQjwxFBEAgASgCnAMhAUHYAEEIEP4aIgNCCjcDACADIAIpA+gDNwMIIANBEGogAkHwA2ooAgA2AgAgAyAFIAEgASAFSRs2AhggAyAFIAEgASAFSxs2AhQMBQsgAkEIaiABEOYGIAIoAgwhAyACKAIIRQRAIAJB6ANqIAMQuBUMAQsLIAJB6ANqEPEeC0EBIQQMAgsgAkH4A2ogAUEAEJoCIAICfyACKAL4A0GBgICAeEcEQCACQcQAaiACQZAEaikCADcCACACQTxqIAJBiARqKQIANwIAIAJBNGogAkGABGopAgA3AgAgAiACKQL4AzcCLEECDAELIAIgAigC/AM2AixBFAs2AiggAkEYaiACQShqENESIAIoAhwhAyACKAIYIQQMAQsgAkH4A2ogAUEBEJoCIAICfyACKAL4A0GBgICAeEcEQCACQcQAaiACQZAEaikCADcCACACQTxqIAJBiARqKQIANwIAIAJBNGogAkGABGopAgA3AgAgAiACKQL4AzcCLEECDAELIAIgAigC/AM2AixBFAs2AiggAkEgaiACQShqENESIAIoAiQhAyACKAIgIQQLIAAgBDYCACAAIAM2AgQgAkGgBGokAAuFDQEIfyMAQaAEayICJAACQAJAAkAgAUEoaiIGEJALIgNFDQAgAygCAEEURw0AIAMtAARBBEYNAQsCQAJAAkAgBhCQCyIDRQ0AIAMoAgBBCUcNACACQSBqIAEQ8QEgAkEBOgDLAyACIAIpAKMDNwDMAyACIAIpAKsDNwDUAyACIAIpALMDNwDcAyACIAIoALsDNgDkAyACQaABaiACQcsDahC7BgJAIAJByABqIgQQkAsiA0UEQCACKAL4AiEDIAJBADoA+AMgAyADIAJB+ANqEMMQIQMMAQsgAygCAEEkRgRAIAIgAikDYDcDmAEgAigCSCACQSU2AkhBJEYEQCACKAJMIQMMAgtBwL/MAEEoQaDKywAQvBIACyACQYQEaiACQdQAaikCADcCACACQYwEaiACQdwAaigCADYCACACKAJIIQMgAkElNgJIIAIgAikCTDcC/AMgAiAD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NgLEASACIAg2AsABIAQQ/BghCAJAAkACQCABLQD4AkECRw0AIAQQkAsiA0UNACADKAIAQRNHDQAgASgCKCEDIAFBJTYCKCABIAEpA0A3A3ggBiAFQQhqKQIANwIAIAcgBUEQaigCADYCACACIAUpAgA3AlwgAiADNgJYIAsQ4gggAkEBOgD7ASACIAEpAYIDNwDvASACIAFBigNqIgMoAQA2APcBIAIgASkAjwM3APwBIAIgAUGXA2oiCikAADcAhAIgAkHxAGogCikAADcAACAHIAFBkgNqKQEANwIAIAYgAykBADcCACACIAEpAYIDNwJcIAFBgAFqIAJB7wFqELsGIAIgATYCWCACQQhqIAEQ4wEgAigCDCEDIAIoAghFBEAgAiADNgKMAiALEKoeQSAhCgJAAkACQCACKALAAUEBaw4GAAAAAgICAQtBGCEKCyABKAJ8IQZBDEEEEP4aIgcgAzYCACAHIAggBiAGIAhJGzYCCCAHIAggBiAGIAhLGzYCBCACQcABaiAKaiIDEIggIAMgBzYCAAwCCyACQYwCahDSBAwBCyACQdgAahCqHgwBCyAEEJALIgMEQCADKAIAQQpGDQILIAJB4ABqIAQQuQkgAiAEEJgQIAJB6LrLADYCXCACQTQ6AFggAigCACACKAIEIAJB2ABqEMMQIQMgBBCQCyIERQ0AIAQoAgBBJEcNACABIAEpA0A3A3ggASgCKCABQSU2AihBJEcNBCABIAEoAiwQ8gkLIAJBwAFqEMIODAILIAEoAighAyABQSU2AiggASABKQNANwN4IAJB5ABqIAVBCGopAgA3AgAgAkHsAGogBUEQaigCADYCACACIAUpAgA3AlwgAiADNgJYIAJB2ABqEOIIIAJBIGogAkHIAWoiA0EIaikDADcDACACQShqIANBEGopAwA3AwAgAkEwaiADQRhqKQMANwMAIAIgAykDADcDGCACKALEASEDIAIoAsABIgVBCEYNAQsgAkHQAGoiCCACQTBqKQMANwMAIAJByABqIgYgAkEoaikDADcDACACQUBrIgcgAkEgaikDADcDACACIAIpAxg3AzggAkHAAWogAUEAEKcFIAJB6ABqIAcpAwA3AwAgAkHwAGogBikDADcDACACQfgAaiAIKQMANwMAIAIgBDYChAEgAiADNgJcIAIgBTYCWCACIAIp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IAFBJTYCKEEkRw0DIAEgASgCLBDyCQwIC0HAv8wAQShB0PHLABC8EgALQcC/zABBKEGA8ssAELwSAAtBwL/MAEEoQZDyywAQvBIAC0HAv8wAQShBoPLLABC8EgALIABBADYCACAAIAU2AgQMBAsgASgCKCEDIAFBJTYCKCABIAEpA0A3A3ggAkHEAGogBUEIaikCADcCACACQcwAaiAFQRBqKAIANgIAIAIgBSkCADcCPCACIAM2AjggAkE4ahDiCCACQRhqIAEQLiACKAIcIQMCQCACKAIYRQRAAkAgAygCAEEORgRAIAJBMGoiCCADQRRqKAIANgIAIAJBKGoiCSADQQxqKQIANwMAIAIgAykCBDcDIEEUQQQQ/hoiB0EQaiAIKAIANgIAIAdBCGogCSkDADcCACAHIAIpAyA3AgAgAygCAEEORw0BDAMLQcC/zABBKEHg8csAELwSAAsgAxD8AwwBCyAAQQA2AgAgACADNgIEDAILIAMQkyILAkACQCAEEJALIgNFDQACQAJAQRAgAygCAEECayIDIANBI08bQQxrDgICAAELIAEoAighBCABQSU2AiggASABKQNANwN4IAJBxABqIAVBCGopAgA3AgAgAkHMAGogBUEQaigCADYCACACIAUpAgA3AjwgAiAENgI4IAJBOGoQ4ggMAQsgBBDWGUUNAQsgACAHNgIEIAAgBjYCAAwDCyACQUBrIAQQuQkgAkEQaiAEEJgQIAJBwJXMADYCPCACQTQ6ADggAigCECACKAIUIAJBOGoQwxAhBQJAIAQQkAsiBEUNACAEKAIAQSRHDQAgASABKQNANwN4IAEoAiggAUElNgIoQSRGBEAgASABKAIsEPIJDAELQcC/zABBKEHw8csAELwSAAsgAEEANgIAIAAgBTYCBCAHEIQbCyAGEPAZDAELIABBADYCACAAIAU2AgQLIAJB0ABqJAALrwwBCn8jAEGQAmsiAiQAIAIgAUEoaiIEEN4YIgk2AhQCQAJAAkAgBBDzCiIDRQ0AIAMoAgBBAkcNACADLQAIQQJHDQAgAy0ACUEDRw0AIAEoAsgCIQMgAUElNgLIAiABIAEpA+ACNwOYAyACQeQAaiABQdQCaikCADcCACACQewAaiABQdwCaigCADYCACACIAEpAswCNwJcIAIgAzYCWCACQdgAahDgCAJAAkACQAJAIAQQ8woiAwRAIAMoAgBBCUYNAQtBByEFDAELIAEoAsgCIQMgAUElNgLIAiABIAEpA+ACNwOYAyACQeQAaiIGIAFBzAJqIgVBCGopAgA3AgAgAkHsAGoiByAFQRBqKAIANgIAIAIgBSkCADcCXCACIAM2AlggAkHYAGoiCxDgCCALIAEQSiACKAJcIQMgAigCWCIIQQdGDQEgAkHgAWogAkH4AGopAwA3AwAgAkHYAWogAkHwAGopAwA3AwAgAkHQAWogAkHoAGopAwA3AwAgAiACKQNgNwPIASACIAM2AsQBIAIgCDYCwAEgBBDeGCEIAkACQAJAIAEtAKACQQJHDQAgBBDzCiIDRQ0AIAMoAgBBE0cNACABKALIAiEDIAFBJTYCyAIgASABKQPgAjcDmAMgBiAFQQhqKQIANwIAIAcgBUEQaigCADYCACACIAUpAgA3AlwgAiADNgJYIAsQ4AggAkEBOgD7ASACIAEpAaoCNwDvASACIAFBsgJqIgMoAQA2APcBIAIgASkAtwI3APwBIAIgAUG/AmoiCikAADcAhAIgAkHxAGogCikAADcAACAHIAFBugJqKQEANwIAIAYgAykBADcCACACIAEpAaoCNwJcIAQgAkHvAWoQuwYgAiABNgJYIAJBCGogARDkASACKAIMIQMgAigCCEUEQCACIAM2AowCIAsQgR1BICEKAkACQAJAIAIoAsABQQFrDgYAAAACAgIBC0EYIQoLIAEoApwDIQZBDEEEEP4aIgcgAzYCACAHIAggBiAGIAhJGzYCCCAHIAggBiAGIAhLGzYCBCACQcABaiAKaiIDEP4eIAMgBzYCAAwCCyACQYwCahDQBAwBCyACQdgAahCBHQwBCyAEEPMKIgMEQCADKAIAQQpGDQILIAJB4ABqIAQQ6wwgAiAEEOAPIAJB6LrLADYCXCACQTQ6AFggAigCACACKAIEIAJB2ABqEMMQIQMgBBDzCiIERQ0AIAQoAgBBJEcNACABIAEpA+ACNwOYAyABKALIAiABQSU2AsgCQSRHDQQgASABKALMAhDrCQsgAkHAAWoQtg4MAgsgASgCyAIhAyABQSU2AsgCIAEgASkD4AI3A5gDIAJB5ABqIAVBCGopAgA3AgAgAkHsAGogBUEQaigCADYCACACIAUpAgA3AlwgAiADNgJYIAJB2ABqEOAIIAJBIGogAkHIAWoiA0EIaikDADcDACACQShqIANBEGopAwA3AwAgAkEwaiADQRhqKQMANwMAIAIgAykDADcDGCACKALEASEDIAIoAsABIgVBCEYNAQsgAkHQAGoiCCACQTBqKQMANwMAIAJByABqIgYgAkEoaikDADcDACACQUBrIgcgAkEgaikDADcDACACIAIpAxg3AzggAkHAAWogAUEAEKMFIAJB6ABqIAcpAwA3AwAgAkHwAGogBikDADcDACACQfgAaiAIKQMANwMAIAIgBDYChAEgAiADNgJcIAIgBTYCWCACIAIpAzg3A2AgAigCwAEgAiACQRRqNgKAAUGAgICAeEcEQCACQaABaiAIKQMANwMAIAJBmAFqIAYpAwA3AwAgAkGQAWogBykDADcDACACQbABaiACQcgBaikCADcDACACQbgBaiACQdABaikCADcDACACIAIpAzg3A4gBIAIgAikCwAE3A6gBIAkgASgCnAMiBCAEIAlLGyEBIAkgBCAEIAlJGyEEDAQLIAIoAsQBIQMgAkHYAGoQhh0LIABBCTYCACAAIAM2AgQMAwtBwL/MAEEoQaj4ywAQvBIAC0EIIQULIAAgAzYCBCAAIAU2AgAgAEEIaiACQYgBakE4EO8kGiAAIAQ2AkQgACABNgJACyACQZACaiQAC70MAgt/AX4jAEGgAWsiAyQAIANBADoAKyADIAEpAYIDNwAbIAMgASkAkwM3ACwgAyABKACbAzYANCADIAFBigNqIgQpAQA3ACMgA0HRAGogAUGXA2opAAA3AAAgA0HMAGogAUGSA2opAQA3AgAgA0HEAGogBCkBADcCACADIAEpAYIDNwI8IAFBgAFqIANBG2oQuwYgAyABNgI4IAFBKGoiBBD8GCEJAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAQQkAsiBgRAIAYoAgBBCUYNAQsgA0GAAWogBBC5CSADIAQQmBAgA0GQu8sANgJ8IANBNDoAeCADKAIAIAMoAgQgA0H4AGoQwxAhAiAEEJALIgRFDQogBCgCAEEkRg0BDAoLIAEoAighBiABQSU2AiggASABKQNANwN4IANBhAFqIAFBNGopAgA3AgAgA0GMAWogAUE8aigCADYCACADIAEpAiw3AnwgAyAGNgJ4IANB+ABqIgUQ4gggBUECENYMIAMoAnwh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C0G0ncIAIQMMAQtBxJ3CACEDCyABIANBECACKAIMEQMADAILIAEgAC0AAUGAAXNBAnQiAEGsjs8AaigCACAAQayGzwBqKAIAIAIoAgwRAwAMAQsgAC8AASEDIAQgAC0AAzoAAyAEIAM7AAEgBCAEQQFqNgIEIAQgBEECajYCCCAEIARBA2o2AgwgBEE8akE3NgIAIARBNGpBNzYCACAEQQM2AhQgBEH4+cEANgIQIARCAzcCHCAEQTc2AiwgBCAEQShqNgIYIAQgBEEMajYCOCAEIARBCGo2AjAgBCAEQQRqNgIoIAEgAiAEQRBqENwcCyAEQUBrJAAL4QsCCH8BfiMAQdABayIDJAAgA0EkaiABEPgQIAMoAiQiAUEoaiIEEN4YIQcCQAJAAkACQCAEIAIQjwxFBEAgBBDzCiIFRQRAIAEoAoACIQUgA0EAOgBoIAUgBSADQegAahDDEBDkEyEFCyADQYwBNgKcASADIAU2ArgBQQEhCCADQQE2AkwgA0GgxMwANgJIIANCATcCVCADIANBuAFqNgKYASADIANBmAFqNgJQIANB8ABqIANByABqEL4QIANBGGogBBDgDyADIAI2AmwgA0E0OgBoIAMoAhggAygCHCADQegAahDDECECIAQQ8woiBEUNBCAEKAIAQSRHDQQgASABKQPgAjcDmAMgASgCyAIgAUElNgLIAkEkRw0BIAEgASgCzAIQ6wkMBAsgBBDeGCEJIAQQ8woiAkUNASACKAIAQQJHDQEgAi0ACA0BIAItAAlBFEcNASADQd0AaiABQb8CaikAADcAACADQdgAaiABQboCaikAADcDACADQdAAaiABQbICaikAADcDACADIAEpAKoCNwNIIAQQkg8iAkUNASACKAIAQQJHDQEgA0HIAGogAi0ACCACQQlqLQAAEP8HDQEgBBDzCiICRQRAIAEoAoACIQEgA0EAOgBoIAEgASADQegAahDDECECDAMLIAIoAgBBJEYEQCABIAEpA+ACNwOYAyABKALIAiABQSU2AsgCQSRGBEAgASgCzAIhAgwEC0HAv8wAQShB0MnLABC8EgALIAEoAsgCIQIgAUElNgLIAiABIAEpA+ACNwOYAyADQfQAaiABQdQCaikCADcCACADQfwAaiABQdwCaigCADYCACADIAEpAswCNwJsIAMgAjYCaCADQegAaiICEOAIQQEhBSAEEPMKDQEgASgCgAIhASADQQA6AGggASABIAIQwxAhAgwCC0HAv8wAQShBwMnLABC8EgALIANB/QBqIAFBvwJqKQAANwAAIANB+ABqIAFBugJqKQAANwMAIANB8ABqIAFBsgJqKQAANwMAIAMgASkAqgI3A2gCQCAEEPMKIgJFDQAgAigCAEECRw0AIANB6ABqIAItAAggAkEJai0AABD/Bw0AIAQQkg8iAkUNACACKAIAQQJHDQAgAi0ACA0AIAItAAlBDkcNACAEEKEZQQFzIQYLIAUgBnJFBEAgA0EQaiABQQAgBxDlBSADKAIUIQIgAygCECEIDAILIANBmAFqIgogARDjAyADKAKgASECIAMpA5gBIgtQDQAgAyADKAKkATYClAEgAyACNgKQASADIAs3A4gBQQAhAgJAAkAgBgRAIAQQ8woiAkUEQCABKAKAAiEBIANBADoAmAEgASABIAoQwxAhAgwDCyACKAIAQSRGBEAgASABKQPgAjcDmAMgASgCyAIgAUElNgLIAkEkRw0CIAEoAswCIQIMAwsgASgCyAIhAiABQSU2AsgCIAEgASkD4AI3A5gDIANBpAFqIAFB1AJqKQIANwIAIANBrAFqIAFB3AJqKAIANgIAIAMgASkCzAI3ApwBIAMgAjYCmAEgA0GYAWoQ4AggA0EIaiABQQAgBBDeGBDlBSADKAIMIQIgAygCCA0CCyABKAKcAyEGIANBuAFqIANBiAFqEOcVIANBrAFqIANByAFqKQMANwIAIANBpAFqIANBwAFqKQMANwIAIAMgAykDuAE3ApwBQdgAQQgQ/hoiBEESNgIAIAQgBToALCAEIAI2AiggBCAJIAYgBiAJSRs2AiQgBCAJIAYgBiAJSxs2AiAgBCADKQKYATcCBCAEQQxqIANBoAFqKQIANwIAIARBFGogA0GoAWopAgA3AgAgBEEcaiADQbABaigCADYCACABKAKcAyEBQQxBBBD+GiICIAQ2AgAgAiAHIAEgASAHSRs2AgggAiAHIAEgASAHSxs2AgQMAwtBwL/MAEEoQeDJywAQvBIACyALENgPC0EBIQgLIANBJGoQgR0gACACNgIEIAAgCDYCACADQdABaiQAC8ILAgh/AX4jAEHQAWsiAyQAIANBJGogARCCESADKAIkIgFBKGoiBBD8GCEHAkACQAJAAkAgBCACEOsLRQRAIAQQkAsiBUUEQCABKALYAiEFIANBADoAaCAFIAUgA0HoAGoQwxAQ+RMhBQsgA0GMATYCnAEgAyAFNgK4AUEBIQggA0EBNgJMIANBoMTMADYCSCADQgE3AlQgAyADQbgBajYCmAEgAyADQZgBajYCUCADQfAAaiADQcgAahC+ECADQRhqIAQQmBAgAyACNgJsIANBNDoAaCADKAIYIAMoAhwgA0HoAGoQwxAhAiAEEJALIgRFDQQgBCgCAEEkRw0EIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRw0BIAEgASgCLBDyCQwECyAEEPwYIQkgBBCQCyICRQ0BIAIoAgBBAkcNASACLQAIDQEgAi0ACUEURw0BIANB3QBqIAFBlwNqKQAANwAAIANB2ABqIAFBkgNqKQAANwMAIANB0ABqIAFBigNqKQAANwMAIAMgASkAggM3A0ggBBDkDiICRQ0BIAIoAgBBAkcNASADQcgAaiACLQAIIAJBCWotAAAQ/wcNASAEEJALIgJFBEAgASgC2AIhASADQQA6AGggASABIANB6ABqEMMQIQIMAwsgAigCAEEkRgRAIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRgRAIAEoAiwhAgwEC0HAv8wAQShB0MnLABC8EgALIAEoAighAiABQSU2AiggASABKQNANwN4IANB9ABqIAFBNGopAgA3AgAgA0H8AGogAUE8aigCADYCACADIAEpAiw3AmwgAyACNgJoIANB6ABqIgIQ4ghBASEFIAQQkAsNASABKALYAiEBIANBADoAaCABIAEgAhDDECECDAILQcC/zABBKEHAycsAELwSAAsgA0H9AGogAUGXA2opAAA3AAAgA0H4AGogAUGSA2opAAA3AwAgA0HwAGogAUGKA2opAAA3AwAgAyABKQCCAzcDaAJAIAQQkAsiAkUNACACKAIAQQJHDQAgA0HoAGogAi0ACCACQQlqLQAAEP8HDQAgBBDkDiICRQ0AIAIoAgBBAkcNACACLQAIDQAgAi0ACUEORw0AIAQQ2RlBAXMhBgsgBSAGckUEQCADQRBqIAFBACAHEOYFIAMoAhQhAiADKAIQIQgMAgsgA0GYAWoiCiABEOQDIAMoAqABIQIgAykDmAEiC1ANACADIAMoAqQBNgKUASADIAI2ApABIAMgCzcDiAFBACECAkACQCAGBEAgBBCQCyICRQRAIAEoAtgCIQEgA0EAOgCYASABIAEgChDDECECDAMLIAIoAgBBJEYEQCABIAEpA0A3A3ggASgCKCABQSU2AihBJEcNAiABKAIsIQIMAwsgASgCKCECIAFBJTYCKCABIAEpA0A3A3ggA0GkAWogAUE0aikCADcCACADQawBaiABQTxqKAIANgIAIAMgASkCLDcCnAEgAyACNgKYASADQZgBahDiCCADQQhqIAFBACAEEPwYEOYFIAMoAgwhAiADKAIIDQILIAEoAnwhBiADQbgBaiADQYgBahDnFSADQawBaiADQcgBaikDADcCACADQaQBaiADQcABaikDADcCACADIAMpA7gBNwKcAUHYAEEIEP4aIgRBEjYCACAEIAU6ACwgBCACNgIoIAQgCSAGIAYgCUkbNgIkIAQgCSAGIAYgCUsbNgIgIAQgAykCmAE3AgQgBEEMaiADQaABaikCADcCACAEQRRqIANBqAFqKQIANwIAIARBHGogA0GwAWooAgA2AgAgASgCfCEBQQxBBBD+GiICIAQ2AgAgAiAHIAEgASAHSRs2AgggAiAHIAEgASAHSxs2AgQMAwtBwL/MAEEoQeDJywAQvBIACyALENgPC0EBIQgLIANBJGoQqh4gACACNgIEIAAgCDYCACADQdABaiQAC94QAQJ/IwBBQGoiBCQAAn8CQAJAAkACQCAALQAAQQFrDgMBAgMACyABIAAtAAFBAnRB4PTOAGooAgBBAiACKAIMEQMADAMLQfT6wQAhAwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAtAAFBAWsOkgEA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akEoEO8kGiADQdwDakHg784AKQMANwIAIAMgAjYC3AYgAyACNgLYBiADIAI2AtwFIANBJTYCsAYgA0ElNgKIBiADQQA2AtADIANCgICAgIABNwPIAyADQQA2AsADIANBADoA5AMgA0HY784AKQMANwLUAyADIAMtAOoFOgDgBiADQQA6AOEGIAMgAy0AhgY6APwGIAMgAykC7AU3AOIGIAMgAykC9AU3AOoGIAMgAykC/AU3APIGIAMgAy8BhAY7APoGIAEgBBC7BiABEN4YIQICQAJAIAEQ8woiAUUEQCADKALABSEBIANBADoAiAcgAyABIAEgA0GIB2oQwxA2AoQHIANBATYCgAcMAQsgA0EANgKAByADIAE2AoQHIAEoAgBBI0cNACADIAMpA6AGNwPYBiADKAKIBiADQSU2AogGQSNHDQEgAykDkAYhCgsgA0GAB2oQ2hsgA0GIB2ogA0HAA2pBAUEBQQAQwQICQCADKAKIByIEQYCAgIB4RwRAIAIgAygC3AYiASABIAJLGyEHIAMoApAHIQggAygCjAchCQwBCyADKAKMByEHIAoQ5B5BgICAgHghBAsgA0HgBmogAygCxAUQvA0gAygC5AYhAiADKALoBiIGIAMoApQBIAMoApwBIgFrSwRAIANBlAFqIAEgBhDnEiADKAKcASEBCyADKAKYASABQQJ0aiACIAZBAnQQ7yQaIANBADYC6AYgAyABIAZqNgKcASACQQAQ6hcgAygC4AYgAhDaGiADKALMAyADKALQAxDIFyADKALIAyADKALMAxDdGiADKALUAyADKALYAxCAEiADKALoAwRAIANB7ANqEJIfIANB8ANqELMfCyADQfwDahCgGSADKALEBRDiDyADKALIBRDiDyADKALMBRCkEiADKALQBRCdEyADQYgGahC+ByADQbAGahC+BwJAIARBgICAgHhHBEAgCEEwbCECIAkhAQNAIAJFDQIgAkEwayECIAEQvwMgAUEwaiEBDAALAAsgAyAHNgLgBiADQQE2AsQDIANBlNDGADYCwAMgA0IBNwLMAyADQe8DNgKkASADIANBoAFqNgLIAyADIANB4AZqNgKgASADQcADakGc0MYAEPIQAAsgChDkHiAAIAg2AgggACAJNgIEIAAgBDYCACAFIAUoAgAiAEEBazYCACAAQQFGBEAgA0GEAWoQ+ggLIAMoAmggAygCbBCfEiADKAJkIAMoAmgQ2hogA0HwAGoQrgcgAygCWCEAIAMoAlwiASgCACICBEAgACACEQEACyABKAIEIgIEQCAAIAIgASgCCBCFDgsgAygCUCADKAJUEJ4SIAMoAkwgAygCUBDeGgJAIAMoAgAiAEELRg0AQRAhAQJAAkBBBiAAQQJrIgAgAEEJTxtBAmsOBQICAgIBAAtBBCEBCyABIANqIgAoAgAgAEEEaigCABDHHAsgAygCmAEiACADKAKcARDqFyADKAKUASAAENoaIANBoAdqJAAPC0HAv8wAQShBtNLLABC8EgAL4woCBH8CfiMAQYABayIDJAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQEEHIAEoAgAiAkEMayIEIARBJk8bQQFrDiQAAQIDBAUGBwgJCgsMHh4NDg8QER4SExQeHhUWFxgZGhscHh0eCyABKAIMQQR0IQQgASgCCCECA0AgBEUNHiACKAIAQQJHBEAgAkEMaiAAEIAkCyACQRBqIQIgBEEQayEEDAALAAsgAUEEaiAAENUHDBwLIAFBCGogABCQJAwbCyABQQRqIAAQgCQMGgsgAC0AECECIABBAToAECABQQxqIAAQgCQgACACOgAQDBkLIAFBBGogABCAJCABQQhqIAAQgCQMGAsgAC0AECEEIABBAToAEAJAAkACQAJAAkACQAJAAkACQAJAAkAgAkEBaw4LAAECAwQFBgcICgkKCyAAIAFBCGoQvRQMCQsgAUEIaiAAEKMbDAgLIAFBBGogABCAJAwHCyABQQRqIAAQ/RUMBgsgAUEEaiAAEIAkDAULIAFBBGogABCAJAwECyABQQRqIAAQgCQMAwsgAUEEaiAAEIAkDAILIAFBBGogABCAJAwBCyABQQhqIQICQAJAIAEoAgRBAWsOAgECAAsgAiAAEIoSDAELIAIgABDbCgsgAEEAOgAQIAFBOGogABCAJCAAIAQ6ABAMFwsgACABQQhqEL0UDBYLIAFBCGogABCjGwwVCyABQQRqIAAQgCQgAUEIaiAAEIAkIAFBDGogABCAJAwUCyABLQAYQQVGBEAgAUEQaiAAEIAkCyABQQRqIAAQsRMMEwsgAUEQaiAAEIAkIAEoAgRBgICAgHhGDRIgAUEEaiAAELETDBILIAFBBGogABDKFAwRCyABQQRqIAAQyhQMEAsgAUEEaiAAEIAkIAEoAgggABDKFAwPCyABKAIMQShsIQIgASgCCCEEA0AgAgRAIAQgABCwECACQShrIQIgBEEoaiEEDAELCyABKAIQIgIoAgBBgICAgHhHBEAgAiAAENIUDA8LIAJBBGogABCAJAwOCyABQQhqIAAQkSQMDQsgASgCDEUNDCABQQxqIAAQgCQMDAsgAUEEaiAAEIAkDAsLIAFBBGogABCAJAwKCyABQQhqEJIaDAkLIAEoAgQgABCICgwICyABQQRqIAAQsgwMBwsgAUEEaiAAEIAkDAYLIAFBBGogABCAJAwFCyABQQRqIAAQgCQMBAsgAUEEaiAAEIAkDAMLIAFBBGogABCAJAwCCyABQQRqIAAQgCQMAQsgAUEEaiAAEP0VCwJAIAAtABANACABKAIAQRRHDQAgASgCKCICKAIAQRpHDQAgA0EIaiACKQMIIAJBGGooAgAQ1xsgAygCECEEIAMpAwghBiADAn4CQAJAAkACQCABKAIIQQFrDgICAQALIAEpAxAQ+BQMAwsCQAJAQQcgASgCDCICKAIAQQxrIgUgBUEmTxtBD2sOAgEAAgsgAigCDA0BIAIoAhhBAUcNASACKAIUIgIpAxBQDQEgAyACQRBqEOoJIAMoAgAgAygCBBDrFAwDCyACKAIIRQ0BC0IAEOQeIAYQ2A8MAgsgAikDEBD4FAsiBzcDKCADIAQ2AiAgAyAGNwMYAkAgACADQRhqEKccIgBFDQAgACgCACICQQJPDQACfiACRQRAIAApAwgQ+BQMAQsgACkDCAshBiADIAI2AnAgAyAGNwN4IANBMGoiACADQfAAahCOBSABEIICIAEgAEHAABDvJBogAykDKCEHIAMpAxghBgsgBiAHEJEiCyADQYABaiQAC4oKAgt/A34jAEHgAWsiAiQAAkACQAJAIAEtABRBAkcEQCABKAIYIQQgAkE0akHg784AKQMAIg03AgAgAkHY784AKQMAIg43AiwgAkEAOwFeIAJBADYCVCACQoCAgICAATcCTCACQQA6AEggAkEANgJEIAJCgICAgMAANwI8IAJBADYCKCACQoCAgICAATcCICACIAAvATw7AVwgAiAAKAI4NgJYIAJBEGogASkDACIPIAEoAhAiCBDXGyACQSBqIAIpAxAgAigCGEEBEMkFIAJB9ABqIA03AgAgAkEANgKUASACQoCAgICAATcCjAEgAkEAOgCIASACQQA2AoQBIAJCgICAgMAANwJ8IAJBADYCaCACIA43AmwgAkEAOwGeASACIAIvAVw7AZwBIAIgAigCWDYCmAEgAkKAgICAgAE3AmAgBEEYaiEJIARBDGogBCgCCEEGdCEBIAJBjAFqIQYgAkHMAGohBSACQTxqIQcgAkEsaiELIAQoAgQhAwJAA0AgAUUNASADKAIAIQwgAUFAaiEBIANBQGshAwJAIAxBAmsOAwABAAELCyACIA8gCBDXGyACQeAAaiACKQMAIAIoAggQ5xELIAJB4ABqIgEQsRQgBCABELoUIAEgCRCHHAJAIAIoApQBIgEEQCALIAEQ4SAgAkGkAWogAigCkAEgAigClAEQ6QcgAiACKAKkATYCuAEgAiACKAKoASIBNgKwASACIAEgAigCrAFBBHQiA2oiBDYCvAEDQCADRQ0CIAJB4ABqIAEpAwAgASgCCBDnESADQRBrIQMgAUEQaiEBDAALAAsgAkGwAWoiASACQeAAakEsEO8kGiAHIAEQsxQgBhCUGwwDCyACIAQ2ArQBIAJBsAFqIgEQgxIgAi0ASEUNASACQbgBaiAGQQhqKAIANgIAIAIgBikCADcDsAEgBSABELQLIAEgAkHgAGpBLBDvJBogByABELMUDAILIAFBGGogABCCIwwCCyACQSBqIAIoApQBENcSIAIgAigCjAE2ArgBIAIgAigCkAEiATYCsAEgAiABIAIoApQBQQR0IgNqIgQ2ArwBA0AgAwRAIAJBIGogASkDACABKAIIQQEQyQUgA0EQayEDIAFBEGohAQwBCwsgAiAENgK0ASACQbABaiIBEIMSIAEgAkHgAGpBLBDvJBogByABELMUCwJAIAIoAlQiAQRAIABBDGogARDhICACQbABaiACKAJQIAIoAlQQ6QcgAiACKAKwATYCaCACIAIoArQBIgE2AmAgAiABIAIoArgBQQR0IgNqIgQ2AmwDQCADRQ0CIAJBIGogASkDACABKAIIEOcRIANBEGshAyABQRBqIQEMAAsACyACQeAAaiIBIAJBIGpBLBDvJBogAEEcaiABELMUIAUQlBsMAQsgAiAENgJkIAJB4ABqIgEQgxIgAC0AKARAIAJB6ABqIAVBCGooAgA2AgAgAiAFKQIANwNgIABBLGogARC0CyABIAJBIGpBLBDvJBogAEEcaiABELMUDAELIAAgAigCVBDXEiACIAIoAkw2AmggAiACKAJQIgE2AmAgAiABIAIoAlRBBHQiA2oiBDYCbANAIAMEQCAAIAEpAwAgASgCCEEBEMkFIANBEGshAyABQRBqIQEMAQsLIAIgBDYCZCACQeAAaiIBEIMSIAEgAkEgakEsEO8kGiAAQRxqIAEQsxQLIAJB4AFqJAAL7QoBAn8jAEHgAGsiAiQAAkACQAJAAkACQAJAA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQEEHIAEoAgBBDGsiAyADQSZPGyIDDhQGEhIBEhISEgIJEgoSEgQMEhISAwALIANBJEYNBAwRCyABLQAcQQJGDRAMAgsgASgCCEEBaw4CDwUECyABLQAcQQJGDQ4LIAAgAUEIahDsCgwOCyABKAIEIgEoAgBBAWsOAwoJBQgLIABB4JbMAEEEEMoODAwLIAJB0ABqIAEoAigQ2wECQCACKAJQQYCAgIB4RgRAIAJBADYCSCACQoCAgIAQNwNADAELIAJByABqIAJB2ABqKAIANgIAIAIgAikCUDcDQAsgAkEsakGdATYCACACQRE2AiQgAkECNgIMIAJB0J/LADYCCCACQgI3AhQgAiABQRBqNgIoIAIgAkFAazYCICACIAJBIGo2AhAgACACQQhqEL4QIAIoAkAgAigCRBDHHAwLCyACQQhqIAEoAigQ2wECQCACKAIIQYCAgIB4RgRAIAJBADYCOCACQoCAgIAQNwMwDAELIAJBOGogAkEQaigCADYCACACIAIpAgg3AzALIAJB0ABqIAEoAgwQ2wECQCACKAJQQYCAgIB4RgRAIAJBADYCSCACQoCAgIAQNwNADAELIAJByABqIAJB2ABqKAIANgIAIAIgAikCUDcDQAsgAkEsakERNgIAIAJBETYCJCACQQI2AgwgAkHQn8sANgIIIAJCAjcCFCACIAJBQGs2AiggAiACQTBqNgIgIAIgAkEgajYCECAAIAJBCGoQvhAgAigCQCACKAJEEMccIAIoAjAgAigCNBDHHAwKCyABKAIIRQ0HIAJBIGogASgCDBDbAQJAIAIoAiBBgICAgHhGBEAgAkEANgJYIAJCgICAgBA3A1AMAQsgAkHYAGogAkEoaigCADYCACACIAIpAiA3A1ALIAJBETYCRCACQQE2AgwgAkHon8sANgIIIAJCATcCFCACIAJB0ABqNgJAIAIgAkFAazYCECAAIAJBCGoQvhAgAigCUCACKAJUEMccDAkLIAEtABhBBUcNBwsgASgCECEBDAELCyABKAIIDQQgACABQRBqEOwKDAULIAJB0ABqIAEoAiAQ2wECQCACKAJQQYCAgIB4RgRAIAJBADYCSCACQoCAgIAQNwNADAELIAJByABqIAJB2ABqKAIANgIAIAIgAikCUDcDQAsgAkEsakGdATYCACACQRE2AiQgAkECNgIMIAJB0J/LADYCCCACQgI3AhQgAiABQQhqNgIoIAIgAkFAazYCICACIAJBIGo2AhAgACACQQhqEL4QIAIoAkAgAigCRBDHHAwECyACQQhqIAEoAiAQ2wECQCACKAIIQYCAgIB4RgRAIAJBADYCOCACQoCAgIAQNwMwDAELIAJBOGogAkEQaigCADYCACACIAIpAgg3AzALIAJB0ABqIAEoAgQQ2wECQCACKAJQQYCAgIB4RgRAIAJBADYCSCACQoCAgIAQNwNADAELIAJByABqIAJB2ABqKAIANgIAIAIgAikCUDcDQAsgAkEsakERNgIAIAJBETYCJCACQQI2AgwgAkHQn8sANgIIIAJCAjcCFCACIAJBQGs2AiggAiACQTBqNgIgIAIgAkEgajYCECAAIAJBCGoQvhAgAigCQCACKAJEEMccIAIoAjAgAigCNBDHHAwDCyAAQYCAgIB4NgIADAILIAJBATYCDCACQeifywA2AgggAkIBNwIUIAJBnQE2AiQgAiABQRBqNgIgIAIgAkEgajYCECAAIAJBCGoQvhAMAQsgAEGAgICAeDYCAAsgAkHgAGokAAu+CQEJfyMAQbABayIEJAAgBCABQShqIgcQ8woiCAR/IAYFIAEoAoACIQYgBEEAOgBAIAYgBiAEQUBrEMMQIQhBAQs2AkAgBCAINgJEIARBQGsQ2hsCf0EAIAcQoRkNABogBEEdaiABQb8CaikAADcAACAEQRhqIAFBugJqKQAANwMAIARBEGogAUGyAmopAAA3AwAgBCABKQCqAjcDCCAHEJIPIghFBEBBAAwBC0EAIAgoAgBBAkcNABpBACAEQQhqIAgtAAggCEEJai0AABD/Bw0AGgJAIAcQ8woiBUUEQCABKAKAAiEBIARBADoAQCABIAEgBEFAaxDDECEFDAELAkACQCAFKAIAQSRGBEAgASABKQPgAjcDmAMgASgCyAIgAUElNgLIAkEkRw0BIAEoAswCIQUMAwsgASgCyAIhBSABQSU2AsgCIAEgASkD4AI3A5gDIARBzABqIAFB1AJqKQIANwIAIARB1ABqIAFB3AJqKAIANgIAIAQgASkCzAI3AkQgBCAFNgJAIARBQGsiBhDgCCAEQQA2AjQgBEKAgICAgAE3AiwgAUHMAmohCCAGQQRyIQkgBEGAAWohCiAEQcgAaiELQQEhBQJAAkADQEEAIQYgBUEBcUUEQCAHEPMKIgZFDQUgBigCAEEQRw0FIAkgCCkCADcCACABKALIAiEGIAFBJTYCyAIgASABKQPgAjcDmAMgCUEIaiAIQQhqKQIANwIAIAlBEGogCEEQaigCADYCACAEIAY2AkAgBEFAaxDgCCAFIQYLIAcQ8woiBQRAIAUoAgBBD0YNAgsgBxDzCiIFBEAgBEEANgI4IAQgBTYCPCAEQThqENobIARBQGsgAUEAQQAQiwIgBCgCRCEFIAQoAkAiDEEHRg0DIAogC0EwEO8kGiAEIAU2AnwgBCAMNgJ4IARBLGogBEH4AGoQhxQgBiEFDAELCyABKAKAAiEFIARBADoAQCAEIAUgBSAEQUBrEMMQNgI8IARBATYCOCAEQThqENobCyABKAKcAyEFIAEoApgDIQYgBEH2ADoAQCABIAYgBSAEQUBrEPsUDAILIARBLGoQ8x4MAgtBwL/MAEEoQej3ywAQvBIACwJAIAEtAKACQQJGDQAgAS0AqQINACABKAKcAyEFIARBBDoAQCABIAIgBSACIAVJGyACIAUgAiAFSxsgBEFAaxD7FAsgAS0AxgJFBEAgASgCnAMhBSAEQQI6AEAgASACIAUgAiAFSRsgAiAFIAIgBUsbIARBQGsQ+xQLIAQoAjRBOGwhBSAEKAIwIQYDQCAFRQRAIAEoApwDIQFBGEEEEP4aIgUgAzoAFCAFQQhqIARBNGooAgA2AgAgBSAEKQIsNwIAIAUgAiABIAEgAkkbNgIQIAUgAiABIAEgAksbNgIMQQAMAwsgBigCAARAIAEoApwDIQcgBEEFOgBAIAEgAiAHIAIgB0kbIAIgByACIAdLGyAEQUBrEPsUCyAGKAIwRQRAIAEoApwDIQcgBEEGOgBAIAEgAiAHIAIgB0kbIAIgByACIAdLGyAEQUBrEPsUCyAGQThqIQYgBUE4ayEFDAALAAtBAQshBiAAIAU2AgQgACAGNgIAIARBsAFqJAALpgkBCX8jAEGwAWsiBCQAIAQgAUEoaiIHEJALIggEfyAGBSABKALYAiEGIARBADoAQCAGIAYgBEFAaxDDECEIQQELNgJAIAQgCDYCRCAEQUBrELQcAn9BACAHENkZDQAaIARBHWogAUGXA2opAAA3AAAgBEEYaiABQZIDaikAADcDACAEQRBqIAFBigNqKQAANwMAIAQgASkAggM3AwggBxDkDiIIRQRAQQAMAQtBACAIKAIAQQJHDQAaQQAgBEEIaiAILQAIIAhBCWotAAAQ/wcNABoCQCAHEJALIgVFBEAgASgC2AIhASAEQQA6AEAgASABIARBQGsQwxAhBQwBCwJAAkAgBSgCAEEkRgRAIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRw0BIAEoAiwhBQwDCyABKAIoIQUgAUElNgIoIAEgASkDQDcDeCAEQcwAaiABQTRqKQIANwIAIARB1ABqIAFBPGooAgA2AgAgBCABKQIsNwJEIAQgBTYCQCAEQUBrIgYQ4gggBEEANgI0IARCgICAgIABNwIsIAFBLGohCCAGQQRyIQkgBEGAAWohCiAEQcgAaiELQQEhBQJAAkADQEEAIQYgBUEBcUUEQCAHEJALIgZFDQUgBigCAEEQRw0FIAkgCCkCADcCACABKAIoIQYgAUElNgIoIAEgASkDQDcDeCAJQQhqIAhBCGopAgA3AgAgCUEQaiAIQRBqKAIANgIAIAQgBjYCQCAEQUBrEOIIIAUhBgsgBxCQCyIFBEAgBSgCAEEPRg0CCyAHEJALIgUEQCAEQQA2AjggBCAFNgI8IARBOGoQtBwgBEFAayABQQBBABCQAiAEKAJEIQUgBCgCQCIMQQdGDQMgCiALQTAQ7yQaIAQgBTYCfCAEIAw2AnggBEEsaiAEQfgAahCHFCAGIQUMAQsLIAEoAtgCIQUgBEEAOgBAIAQgBSAFIARBQGsQwxA2AjwgBEEBNgI4IARBOGoQtBwLIAEoAnwhBSABKAJ4IQYgBEH2ADoAQCABIAYgBSAEQUBrEKEVDAILIARBLGoQ8x4MAgtBwL/MAEEoQej3ywAQvBIACwJAIAEtAPgCQQJGDQAgAS0AgQMNACABKAJ8IQUgBEEEOgBAIAEgAiAFIAIgBUkbIAIgBSACIAVLGyAEQUBrEKEVCyABLQCeA0UEQCABKAJ8IQUgBEECOgBAIAEgAiAFIAIgBUkbIAIgBSACIAVLGyAEQUBrEKEVCyAEKAI0QThsIQUgBCgCMCEGA0AgBUUEQCABKAJ8IQFBGEEEEP4aIgUgAzoAFCAFQQhqIARBNGooAgA2AgAgBSAEKQIsNwIAIAUgAiABIAEgAkkbNgIQIAUgAiABIAEgAksbNgIMQQAMAwsgBigCAARAIAEoAnwhByAEQQU6AEAgASACIAcgAiAHSRsgAiAHIAIgB0sbIARBQGsQoRULIAYoAjBFBEAgASgCfCEHIARBBjoAQCABIAIgByACIAdJGyACIAcgAiAHSxsgBEFAaxChFQsgBkE4aiEGIAVBOGshBQwACwALQQELIQYgACAFNgIEIAAgBjYCACAEQbABaiQAC/kJAQN/IwBBkAFrIgMkAAJAAkAgASgCACICQRpGBEAgACABQQhqEJAJIgBFDQEgA0EIaiICIABBwAAQ7yQaIAEQrgIgASACQcAAEO8kGiAAEJMiDAELAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQQcgAkEMayIEIARBJk8bQQFrDiQAAQIDBAUGBwgJCgsMHh4NDg8QER4SExQeHhUWFxgZGhscHh0eCyABKAIMQQR0IQIgASgCCCEBA0AgAkUNHiABKAIAQQJHBEAgAUEMaiAAEIokCyABQRBqIQEgAkEQayECDAALAAsgAUEEaiAAEIMEDBwLIAFBCGogABCUJAwbCyABQQRqIAAQiiQMGgsgAUEMaiAAEIokDBkLIAFBBGogABCKJCABQQhqIAAQiiQMGAsCQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAkEBaw4LAAECAwQFBgcICwoJCyABQQhqIAAQ/hcMCgsgAUEIaiAAEKgbDAkLIAFBBGogABCKJAwICyABQQRqIAAQuBMMBwsgAUEEaiAAEOIdDAYLIAFBBGogABDiHQwFCyABQQRqIAAQiiQMBAsgAUEEaiAAEOIdDAMLIAFBBGogABDjHQwCCyADQQhqIgQgAUEIahDIDSADQdgAaiADQRhqKQMANwMAIANB0ABqIANBEGopAwA3AwAgAyADKQMINwNIIANBIGoQ/B4gACADQcgAahCQCSICBEAgBCACEMQDIAMoAghBC0YNGyADQeAAaiICIARBMBDvJBogARCuCyABIAJBMBDvJBoLIAMpA0gQ2A8MAQsgAUEIaiECAkACQCABKAIEQQFrDgIBAgALIAIgABDSEAwBCyACIAAQ2goLIAFBOGogABCKJAwXCyABQQhqIAAQ/hcMFgsgAUEIaiAAEKgbDBULIAFBBGogABCKJCABQQhqIAAQiiQgAUEMaiAAEIokDBQLIAEtABhBBUYEQCABQRBqIAAQiiQLIAFBBGogABC3EyABQShqIAAQlBwMEwsgAUEQaiAAEIokIAEoAgRBgICAgHhHBEAgAUEEaiAAELcTCyABQSBqIAAQlBwMEgsgAUEEaiAAEMgUDBELIAFBBGogABDIFAwQCyABQQRqIAAQiiQgAUEYaiAAEJQcIAEoAgggABDIFAwPCyABKAIMQShsIQIgASgCCCEEA0AgAgRAIAAgBBDvByACQShrIQIgBEEoaiEEDAELCwJAIAEoAhAiAigCAEGAgICAeEcEQCACIAAQzxQMAQsgAkEEaiAAEIokCyABKAIgIgIEQCACIAAQzRQLIAEoAiQiAUUNDiABIAAQ2QQMDgsgAUEIaiAAEJUkDA0LIAEoAgxFDQwgAUEMaiAAEIokDAwLIAFBBGogABCKJAwLCyABQQRqIAAQiiQMCgsgAUEIaiAAEN0EDAkLIAEoAgQgABC4CQwICyABQQRqIAAQswwMBwsgAUEEaiAAEOIdDAYLIAFBBGogABCKJAwFCyABQQRqIAAQiiQMBAsgAUEEaiAAEOIdDAMLIAFBBGogABDjHQwCCyABQQRqIAAQ4h0MAQsgAUEEaiAAELgTCyADQZABaiQADwsgAyADKAIMNgJgQdS6zABBKyADQeAAakH4lssAQaiXywAQ2AsAC9gKAQJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQEEHIAAoAgAiACgCACIBQQxrIgIgAkEmTxtBAWsOJAABAgMEBQYHCAkKCwwNDg8QERITIhQVFhciGBkaGxwdHh8gISILIABBBGoQnRIgACgCBCAAQQhqKAIAENAaDCELIABBBGoQ0QcgACgCBCAAQQhqKAIAEN8aDCALIAApAwggAEEcai0AABDWGyAAKAIgIgEQ4xUgASgCACABQQRqKAIAEPUaIAFBDGoQ7R4gASgCGEGAgICAeEcEQCABQRhqEOoeCyABKAI8EMEXIAFBQGsQzR8gAUHIAEEEEIUODB8LIABBBGoQ3wEMHgsgAEEMahDfAQwdCyAAQQRqEN8BIABBCGoQ3wEMHAsCQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAQ4MCgABAgMEBQYHCAsJCwsgAEEIahD8FQwKCyAAQQhqEMAZDAkLIABBBGoQ3wEMCAsgAEEEahCwEwwHCyAAQQRqEOkgDAYLIABBBGoQ6SAMBQsgAEEEahDfAQwECyAAQQRqEOkgDAMLIABBBGoQ1iEMAgsCQAJAAkAgACgCBA4CAAEECyAAQQhqEOAVIAAoAgggAEEMaigCABDxGgwBCyAAQQhqEJINIAAoAgggAEEMaigCABDzGgsgAEEcahDNHwwBCyAAKQMIENgPIABBIGoQzR8LIABBOGoQ3wEMGwsgAEEIahD8FQwaCyAAQQhqEMAZDBkLIABBBGoQ3wEgAEEIahDfASAAQQxqEN8BDBgLIAAtABhBBUYEQCAAQRBqEN8BCyAAQQRqEOgeIAAoAigQuiAMFwsgAEEQahDfASAAKAIEQYCAgIB4RwRAIABBBGoQ6B4LIAAoAiAQuiAMFgsgAEEEahDpHgwVCyAAKQMIENgPDBQLAkACQAJAAkACQCAAKAIIDgYBGBgCAwQACyAAKQMQENgPIAApAxgQ2A8MFwsgACkDECAAQSBqKQMAEJIiDBYLIAApAyAQ5B4MFQsgAEEYaikDACAAQSBqKAIAENkYDBQLIAApAxAQ2A8gACkDGBDYDwwTCyAAQQRqELQgDBILIABBBGoQ3wEgACgCGBC6ICAAKAIIIgEQtCAgAUEgQQQQhQ4MEQsgAEEEahDeFSAAKAIEIABBCGooAgAQ8RoCQCAAKAIQIgEoAgBBgICAgHhHBEAgARDqHgwBCyABQQRqEN8BCyAAKAIQQRhBBBCFDiAAKAIgEMEXIABBJGoQzR8MEAsgACkDCCAAQRxqLQAAENYbIAAoAiAiARDtHiABQQxqEI8GIAEoAgwgAUEQaigCABDyGiABQTBqEM4fIAEoAjQQwRcgASgCOBC6ICABQRhqENwTIAEoAhggAUEcaigCABDQGiAAKAIgQcAAQQQQhQ4MDwsgAEEMahDOHwwOCyAAQQRqEN8BDA0LIABBBGoQ3wEMDAsgAEEIahDfFQwLCyAAKQMIIABBGGopAwAQkSIMCgsgACgCBCIBQUBrEJwSIAFB/ABqENMJIAEoAnwgAUGAAWooAgAQ8hogASgCeBC6ICABQZABahDjHiABLQA8QQZHBEAgAUEQahCcEgsgAUGgAUEIEIUODAkLIABBBGoQ4x4MCAsgAEEEahDpIAwHCyAAQQRqEN8BDAYLIABBBGoQ3wEMBQsgAEEEahDpIAwECyAAQQRqENYhDAMLIABBBGoQ6SAMAgsgACkDCBDYDwwBCyAAQQRqELATCyAAQcAAQQgQhQ4L2AoBAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQQcgACgCACIAKAIAIgFBDGsiAiACQSZPG0EBaw4kAAECAwQFBgcICQoLDA0ODxAREhMiFBUWFyIYGRobHB0eHyAhIgsgAEEEahCdEiAAKAIEIABBCGooAgAQ0BoMIQsgAEEEahDRByAAKAIEIABBCGooAgAQ3xoMIAsgACkDCCAAQRxqLQAAENYbIAAoAiAiARDjFSABKAIAIAFBBGooAgAQ9RogAUEMahDtHiABKAIYQYCAgIB4RwRAIAFBGGoQ6h4LIAEoAjwQwRcgAUFAaxDtHyABQcgAQQQQhQ4MHwsgAEEEahDgAQweCyAAQQxqEOABDB0LIABBBGoQ4AEgAEEIahDgAQwcCwJAAkACQAJAAkACQAJAAkACQAJAAkACQCABDgwKAAECAwQFBgcICwkLCyAAQQhqEIkWDAoLIABBCGoQzRkMCQsgAEEEahDgAQwICyAAQQRqEMATDAcLIABBBGoQgiEMBgsgAEEEahCCIQwFCyAAQQRqEOABDAQLIABBBGoQgiEMAwsgAEEEahDeIQwCCwJAAkACQCAAKAIEDgIAAQQLIABBCGoQ4BUgACgCCCAAQQxqKAIAEPEaDAELIABBCGoQkg0gACgCCCAAQQxqKAIAEPMaCyAAQRxqEO0fDAELIAApAwgQ2A8gAEEgahDtHwsgAEE4ahDgAQwbCyAAQQhqEIkWDBoLIABBCGoQzRkMGQsgAEEEahDgASAAQQhqEOABIABBDGoQ4AEMGAsgAC0AGEEFRgRAIABBEGoQ4AELIABBBGoQ6B4gACgCKBC6IAwXCyAAQRBqEOABIAAoAgRBgICAgHhHBEAgAEEEahDoHgsgACgCIBC6IAwWCyAAQQRqEOkeDBULIAApAwgQ2A8MFAsCQAJAAkACQAJAIAAoAggOBgEYGAIDBAALIAApAxAQ2A8gACkDGBDYDwwXCyAAKQMQIABBIGopAwAQkiIMFgsgACkDIBDkHgwVCyAAQRhqKQMAIABBIGooAgAQ2RgMFAsgACkDEBDYDyAAKQMYENgPDBMLIABBBGoQtCAMEgsgAEEEahDgASAAKAIYELogIAAoAggiARC0ICABQSBBBBCFDgwRCyAAQQRqEN4VIAAoAgQgAEEIaigCABDxGgJAIAAoAhAiASgCAEGAgICAeEcEQCABEOoeDAELIAFBBGoQ4AELIAAoAhBBGEEEEIUOIAAoAiAQwRcgAEEkahDtHwwQCyAAKQMIIABBHGotAAAQ1hsgACgCICIBEO0eIAFBDGoQjwYgASgCDCABQRBqKAIAEPIaIAFBMGoQ7h8gASgCNBDBFyABKAI4ELogIAFBGGoQ3BMgASgCGCABQRxqKAIAENAaIAAoAiBBwABBBBCFDgwPCyAAQQxqEO4fDA4LIABBBGoQ4AEMDQsgAEEEahDgAQwMCyAAQQhqEN8VDAsLIAApAwggAEEYaikDABCRIgwKCyAAKAIEIgFBQGsQnBIgAUH8AGoQ0wkgASgCfCABQYABaigCABDyGiABKAJ4ELogIAFBkAFqEOMeIAEtADxBBkcEQCABQRBqEJwSCyABQaABQQgQhQ4MCQsgAEEEahDjHgwICyAAQQRqEIIhDAcLIABBBGoQ4AEMBgsgAEEEahDgAQwFCyAAQQRqEIIhDAQLIABBBGoQ3iEMAwsgAEEEahCCIQwCCyAAKQMIENgPDAELIABBBGoQwBMLIABBwABBCBCFDgvYCgECfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkBBByAAKAIAIgAoAgAiAUEMayICIAJBJk8bQQFrDiQAAQIDBAUGBwgJCgsMDQ4PEBESEyIUFRYXIhgZGhscHR4fICEiCyAAQQRqEJ0SIAAoAgQgAEEIaigCABDQGgwhCyAAQQRqENEHIAAoAgQgAEEIaigCABDfGgwgCyAAKQMIIABBHGotAAAQ1hsgACgCICIBEOMVIAEoAgAgAUEEaigCABD1GiABQQxqEO0eIAEoAhhBgICAgHhHBEAgAUEYahDqHgsgASgCPBDBFyABQUBrEIUgIAFByABBBBCFDgwfCyAAQQRqEOEBDB4LIABBDGoQ4QEMHQsgAEEEahDhASAAQQhqEOEBDBwLAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEODAoAAQIDBAUGBwgLCQsLIABBCGoQkRYMCgsgAEEIahDUGQwJCyAAQQRqEOEBDAgLIABBBGoQxxMMBwsgAEEEahCJIQwGCyAAQQRqEIkhDAULIABBBGoQ4QEMBAsgAEEEahCJIQwDCyAAQQRqEOQhDAILAkACQAJAIAAoAgQOAgABBAsgAEEIahDgFSAAKAIIIABBDGooAgAQ8RoMAQsgAEEIahCSDSAAKAIIIABBDGooAgAQ8xoLIABBHGoQhSAMAQsgACkDCBDYDyAAQSBqEIUgCyAAQThqEOEBDBsLIABBCGoQkRYMGgsgAEEIahDUGQwZCyAAQQRqEOEBIABBCGoQ4QEgAEEMahDhAQwYCyAALQAYQQVGBEAgAEEQahDhAQsgAEEEahDoHiAAKAIoELogDBcLIABBEGoQ4QEgACgCBEGAgICAeEcEQCAAQQRqEOgeCyAAKAIgELogDBYLIABBBGoQ6R4MFQsgACkDCBDYDwwUCwJAAkACQAJAAkAgACgCCA4GARgYAgMEAAsgACkDEBDYDyAAKQMYENgPDBcLIAApAxAgAEEgaikDABCSIgwWCyAAKQMgEOQeDBULIABBGGopAwAgAEEgaigCABDZGAwUCyAAKQMQENgPIAApAxgQ2A8MEwsgAEEEahC0IAwSCyAAQQRqEOEBIAAoAhgQuiAgACgCCCIBELQgIAFBIEEEEIUODBELIABBBGoQ3hUgACgCBCAAQQhqKAIAEPEaAkAgACgCECIBKAIAQYCAgIB4RwRAIAEQ6h4MAQsgAUEEahDhAQsgACgCEEEYQQQQhQ4gACgCIBDBFyAAQSRqEIUgDBALIAApAwggAEEcai0AABDWGyAAKAIgIgEQ7R4gAUEMahCPBiABKAIMIAFBEGooAgAQ8hogAUEwahD8HyABKAI0EMEXIAEoAjgQuiAgAUEYahDcEyABKAIYIAFBHGooAgAQ0BogACgCIEHAAEEEEIUODA8LIABBDGoQ/B8MDgsgAEEEahDhAQwNCyAAQQRqEOEBDAwLIABBCGoQ3xUMCwsgACkDCCAAQRhqKQMAEJEiDAoLIAAoAgQiAUFAaxCcEiABQfwAahDTCSABKAJ8IAFBgAFqKAIAEPIaIAEoAngQuiAgAUGQAWoQ4x4gAS0APEEGRwRAIAFBEGoQnBILIAFBoAFBCBCFDgwJCyAAQQRqEOMeDAgLIABBBGoQiSEMBwsgAEEEahDhAQwGCyAAQQRqEOEBDAULIABBBGoQiSEMBAsgAEEEahDkIQwDCyAAQQRqEIkhDAILIAApAwgQ2A8MAQsgAEEEahDHEwsgAEHAAEEIEIUOC7cJAgR/AX4jAEEgayIDJAAgAigCHCEGIANBEGogASACKAIYIgVBABDPAgJAAkACQCADLQAQQQRHBEAgAykDECIHQv8Bg0IEUg0BCwJAAkACQAJAAkACQAJAAkAgBUUNACADQRBqIAEgBRCUFiADLQAQQQRGDQAgAykDECIHQv8Bg0IEUg0BC0EHIAIoAiAiBCgCAEEMayIFIAVBJk8bQQxrDgQDAgIBAgsgACAHNwIADAgLIAQoAghBA0YNAwsgA0EQaiACQSBqIAEQ6yEgAy0AEEEERw0BQQAhBQwFC0EAIQUgA0EQaiABIARBBGpBABCGAyADLQAQQQRGDQQgAykDECIHQv8Bg0IEUQ0EIAAgBzcCAAwFC0EAIQUgAykDECIHQv8Bg0IEUg0BDAMLIANBEGogASAEQRBqQQEQdwJAAn8gAy0AEEEERgRAIAMtABEMAQsgAykDECIHQv8Bg0IEUg0BIAdCCIinC0H/AXFBAEchBQwDCyAAIAc3AgAMAwsgACAHNwIADAILIAAgBzcCAAwBCwJAAkACQAJAAkACQAJAAkACQCACKAIAQQFrDgICAAELIANBEGogASACQQRqEIcGIAMtABBBBEYNByADKQMQIgdC/wGDQgRSDQIMBwsgAigCECEEIAVFDQUCQCAEQQJJDQAgA0EQaiABIARBAmtBABDPAiADLQAQQQRGDQAgAykDECIHQv8Bg0IEUg0DCyADQQA2AhAgA0EIaiABIANBEGpBmIfMAEEBEJoPIAMtAAhBBEYNBSADKQMIIgdC/wGDQgRRDQUgACAHNwIADAcLIAIoAhAhBCAFRQ0DAkAgBEECSQ0AIANBEGogASAEQQJrQQAQzwIgAy0AEEEERg0AIAMpAxAiB0L/AYNCBFINAwsgA0EANgIQIANBCGogASADQRBqQZiHzABBARCaDyADLQAIQQRGDQMgAykDCCIHQv8Bg0IEUQ0DIAAgBzcCAAwGCyAAIAc3AgAMBQsgACAHNwIADAQLIAAgBzcCAAwDCwJAAkACQCAERQ0AIANBEGogASAEQQFrQQAQzwIgAy0AEEEERg0AIAMpAxAiB0L/AYNCBFINAQsgA0EANgIQIANBCGogASADQRBqQZiHzABBARCaDyADLQAIQQRHBEAgAykDCCIHQv8Bg0IEUg0CCyADQRBqIAJBCGogARCEBiADLQAQQQRGDQMgAykDECIHQv8Bg0IEUQ0DIAAgBzcCAAwECyAAIAc3AgAMAwsgACAHNwIADAILAkACQAJAIARFDQAgA0EQaiABIARBAWtBABDPAiADLQAQQQRGDQAgAykDECIHQv8Bg0IEUg0BCyADQQA2AhAgA0EIaiABIANBEGpBmIfMAEEBEJoPIAMtAAhBBEcEQCADKQMIIgdC/wGDQgRSDQILIANBEGogAkEIaiABEIoPIAMtABBBBEYNAiADKQMQIgdC/wGDQgRRDQIgACAHNwIADAMLIAAgBzcCAAwCCyAAIAc3AgAMAQsCQAJAIAZFDQAgA0EQaiABIAYQlBYgAy0AEEEERg0AIAMpAxAiB0L/AYNCBFINAQsgAEEEOgAADAELIAAgBzcCAAsgA0EgaiQAC5gKAgp/A34jAEGwAWsiAiQAIAFBKGoiBBD8GCEIIAJB1QBqIAFBlwNqKQAANwAAIAJB0ABqIAFBkgNqKQEAIgw3AgAgAkHIAGogAUGKA2opAQAiDTcCACACQQA6AIMBIAIgAS0AnAM6AIIBIAIgAS0AngM6AIQBIAIgASkBggMiDjcAaCACIA03AHAgAiAMNwB4IAIgAS8BmgM7AIABIAIgDjcCQCABQYABaiIHIAJB6ABqELsGIAIgATYCPCACQTBqIAEQsQEgAigCNCEFAkACQAJAAkACQAJAIAIoAjAEQCAFIQMMAQsgBBDWGQ0EIAQQkAsiA0UNBCADKAIAQQJHDQQgAy0ACEECRw0EIAMtAAlBGkcNBCABKAIoIQMgAUElNgIoIAEgASkDQDcDeCACQfQAaiIGIAFBNGopAgA3AgAgAkH8AGoiCSABQTxqKAIANgIAIAIgASkCLDcCbCACIAM2AmggAkHoAGoiCxDiCCACIAU2AmAgAkGBAWogAUGCA2oiA0EVaikAADcAACAJIANBEGopAQA3AgAgBiADQQhqKQEANwIAIAJBAToAqwEgAiABLQCcAzoAqgEgAiABLQCeAzoArAEgAiABKQGCAzcAkAEgAiABKQGKAzcAmAEgAiABKQGSAzcAoAEgAiABLwGaAzsAqAEgAiADKQEANwJsIAcgAkGQAWoQuwYgAiABNgJoIAJBKGogARCxASACKAIsIQMCQCACKAIoRQRAIAIgAzYCZCALEKoeAkACQCAEEJALIgcEQCAHKAIAQRdGDQELIAJB8ABqIAQQuQkgAkEIaiAEEJgQIAJB6LXLADYCbCACQTQ6AGggAigCCCACKAIMIAJB6ABqEMMQIQMgBBCQCyIFRQ0BIAUoAgBBJEcNASABIAEpA0A3A3ggASgCKCABQSU2AihBJEcNByABIAEoAiwQ8gkMAQsgASgCKCEHIAFBJTYCKCABIAEpA0A3A3ggAkH0AGogAUEsaiIGQQhqKQIANwIAIAJB/ABqIAZBEGooAgA2AgAgAiAGKQIANwJsIAIgBzYCaCACQegAahDiCCACQSBqIAEQ4wEgAigCJCEHIAIoAiAEQCAHIQMMAQsgAiAHNgKQAQJAAkAgBBCQCyIJBEAgCSgCAEETRg0BCyACQfAAaiAEELkJIAJBEGogBBCYECACQcC1ywA2AmwgAkE0OgBoIAIoAhAgAigCFCACQegAahDDECEDIAQQkAsiBUUNASAFKAIAQSRHDQEgASABKQNANwN4IAEoAiggAUElNgIoQSRHDQcgASABKAIsEPIJDAELIAEoAighBCABQSU2AiggASABKQNANwN4IAJB9ABqIAZBCGopAgA3AgAgAkH8AGogBkEQaigCADYCACACIAYpAgA3AmwgAiAENgJoIAJB6ABqEOIIIAJBGGogARDjASACKAIcIQQgAigCGEUNBSAEIQMLIAJBkAFqENIECyACQeQAahDSBAwBCyACQegAahCqHgsgAkHgAGoQ0gQLQQEhCgwECyABKAJ8IQZB2ABBCBD+GiIBIAQ2AhAgASAHNgIMIAEgAzYCCCABIAU2AgQgAUELNgIAIAEgCCAGIAYgCEkbNgIYIAEgCCAGIAYgCEsbNgIUIAEhAwwDC0HAv8wAQShB2LXLABC8EgALQcC/zABBKEGAtssAELwSAAsgBSEDCyACQTxqEKoeIAAgAzYCBCAAIAo2AgAgAkGwAWokAAutCgIJfwN+IwBBsAFrIgIkACABQShqIgQQ3hghCCACQdUAaiABQb8CaikAADcAACACQdAAaiABQboCaikBACILNwIAIAJByABqIAFBsgJqKQEAIgw3AgAgAkEAOgCDASACIAEtAMQCOgCCASACIAEtAMYCOgCEASACIAEpAaoCIg03AGggAiAMNwBwIAIgCzcAeCACIAEvAcICOwCAASACIA03AkAgBCACQegAahC7BiACIAE2AjwgAkEwaiABELABIAIoAjQhBQJAAkACQAJAAkACQCACKAIwBEAgBSEDDAELIAQQohkNBCAEEPMKIgNFDQQgAygCAEECRw0EIAMtAAhBAkcNBCADLQAJQRpHDQQgASgCyAIhAyABQSU2AsgCIAEgASkD4AI3A5gDIAJB9ABqIgcgAUHUAmopAgA3AgAgAkH8AGoiBiABQdwCaigCADYCACACIAEpAswCNwJsIAIgAzYCaCACQegAaiIJEOAIIAIgBTYCYCACQYEBaiABQaoCaiIDQRVqKQAANwAAIAYgA0EQaikBADcCACAHIANBCGopAQA3AgAgAkEBOgCrASACIAEtAMQCOgCqASACIAEtAMYCOgCsASACIAEpAaoCNwCQASACIAEpAbICNwCYASACIAEpAboCNwCgASACIAEvAcICOwCoASACIAMpAQA3AmwgBCACQZABahC7BiACIAE2AmggAkEoaiABELABIAIoAiwhAwJAIAIoAihFBEAgAiADNgJkIAkQgR0CQAJAIAQQ8woiBwRAIAcoAgBBF0YNAQsgAkHwAGogBBDrDCACQQhqIAQQ4A8gAkHotcsANgJsIAJBNDoAaCACKAIIIAIoAgwgAkHoAGoQwxAhAyAEEPMKIgVFDQEgBSgCAEEkRw0BIAEgASkD4AI3A5gDIAEoAsgCIAFBJTYCyAJBJEcNByABIAEoAswCEOsJDAELIAEoAsgCIQcgAUElNgLIAiABIAEpA+ACNwOYAyACQfQAaiABQcwCaiIGQQhqKQIANwIAIAJB/ABqIAZBEGooAgA2AgAgAiAGKQIANwJsIAIgBzYCaCACQegAahDgCCACQSBqIAEQ5AEgAigCJCEHIAIoAiAEQCAHIQMMAQsgAiAHNgKQAQJAAkAgBBDzCiIJBEAgCSgCAEETRg0BCyACQfAAaiAEEOsMIAJBEGogBBDgDyACQcC1ywA2AmwgAkE0OgBoIAIoAhAgAigCFCACQegAahDDECEDIAQQ8woiBUUNASAFKAIAQSRHDQEgASABKQPgAjcDmAMgASgCyAIgAUElNgLIAkEkRw0HIAEgASgCzAIQ6wkMAQsgASgCyAIhBCABQSU2AsgCIAEgASkD4AI3A5gDIAJB9ABqIAZBCGopAgA3AgAgAkH8AGogBkEQaigCADYCACACIAYpAgA3AmwgAiAENgJoIAJB6ABqEOAIIAJBGGogARDkASACKAIcIQQgAigCGEUNBSAEIQMLIAJBkAFqENAECyACQeQAahDQBAwBCyACQegAahCBHQsgAkHgAGoQ0AQLQQEhCgwECyABKAKcAyEGQdgAQQgQ/hoiASAENgIQIAEgBzYCDCABIAM2AgggASAFNgIEIAFBCzYCACABIAggBiAGIAhJGzYCGCABIAggBiAGIAhLGzYCFCABIQMMAwtBwL/MAEEoQdi1ywAQvBIAC0HAv8wAQShBgLbLABC8EgALIAUhAwsgAkE8ahCBHSAAIAM2AgQgACAKNgIAIAJBsAFqJAALvAkCGH8DfiMAQdACayICJAAgACgCBCEOIAAoAgAhDyACQdAAaiAAQUBrEIELIAAoAoABIRAgACgCdCERIAAoAnAhEkEIIQoCQCAAKAKEASIGBEAgBkHYAGwiA0EASCAGQZe60QtLcg0BQQghBCAGIQlBCCADEI0ZIgpFDQELIAZB2ABsIRMgAkGAAWpBBHIhDSACQbABaiEUIAJBsAJqIQggAkHgAWohByACQagCakEEciELIAJBiAJqIRUgAkGQAmohFiAJIQQDQCAERSAFIBNGckUEQAJAIAUgEGoiAygCACIMQQVHBEAgA0EsaigCACEXIANBKGooAgAhGAJAIANBMGoiGSkDAFAEQCAVIANBOGoQ7BkgAkIANwOAAgwBCyADQdAAaikCACEaIAJBgAJqIBkQ7BkgFiADQUBrEOwZIAIgGjcDoAILIAxBBEcEQAJAAkACQAJAAkAgDEEBaw4DAQIDAAsCQAJAAkACQAJAAkACQAJAIANBCGooAgBBAWsOBgECAwQFBgALIAcgA0EQahCOFyACQQA2AtgBDAYLIAJBATYC2AEgAiADQRRqLQAAOgDkASACIANBDGopAgA3AtwBDAULIAJBAjYC2AEgAiADQQxqKQIANwLcAQwECyAHIANBEGoQvRcgAkEDNgLYAQwDCyAHIANBEGoQ3BUgAkEENgLYAQwCCyADQSBqKQIAIRogA0EQaikDABD4FCEbIANBGGopAwAQ+BQhHCACIBo3A/ABIAIgHDcD6AEgAiAbNwPgASACQQU2AtgBDAELIAcgA0EQahCPFyACQQY2AtgBCyAIIAIpA9gBNwMAIAhBGGogAkHwAWopAwA3AwAgCEEQaiACQegBaikDADcDACAIQQhqIAcpAwA3AwAMAwsgCyADQQRqENIODAILIAIgA0EEahDeHjYCrAIMAQsgCyADQQRqEO8WCyACQdgBaiALQSQQ7yQaCyAUIAJBgAJqQSgQ7yQaIAIgDDYCgAEgDSACQdgBakEkEO8kGiACIBc2AqwBIAIgGDYCqAEMAQsgDSADQQRqEPkaIAJBBTYCgAELIAUgCmogAkGAAWpB2AAQ7yQaIARBAWshBCAFQdgAaiEFDAELCyAALQCIASEDAkAgACgCeCIERQRAQQAhBAwBCyAEEPAaIgQQkQ0LIAJBqAJqIABBkAFqEOAEQQYhBSAALQA8QQZHBEAgACkDCCEaIAJBiAFqIABBEGoQgQsgAiAaNwOAASACQRhqIAJBgAFqQTQQ7yQaIAJBFmogAkG3AWotAAA6AAAgAiACLwC1ATsBFCACLQC0ASEFCyACQRBqIgAgAkGwAmooAgA2AAAgAiACKQKoAjcACCABIA42AgQgASAPNgIAIAFBCGogAkEYakE0EO8kGiABIAU6ADwgASACLwEUOwA9IAFBP2ogAkEWai0AADoAACABQUBrIAJB0ABqQTAQ7yQaIAEgAzoAiAEgASAGNgKEASABIAo2AoABIAEgCTYCfCABIAQ2AnggASARNgJ0IAEgEjYCcCABIAIpAAE3AIkBIAFBkQFqIAJBCWopAAA3AAAgAUGYAWogACgAADYAACACQdACaiQADwsgBCADEKIgAAunCgECfyMAQTBrIgIkAAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQQsgACgCAEGAgICAeHMiAyADQRJPG0EBaw4RAQIDBAUGBwgJCgsMDQ4PEBEACyACIABBBGo2AgggAkEBNgIUIAJBoMTMADYCECACQgE3AhwgAkHZADYCLCACIAJBKGo2AhggAiACQQhqNgIoIAEoAhQgASgCGCACQRBqENwcDBELIAIgAEEEajYCCCACQQE2AhQgAkGgxMwANgIQIAJCATcCHCACQdoANgIsIAIgAkEoajYCGCACIAJBCGo2AiggASgCFCABKAIYIAJBEGoQ3BwMEAsgAiAAQQRqNgIIIAJBATYCFCACQYCPxAA2AhAgAkIBNwIcIAJB2wA2AiwgAiACQShqNgIYIAIgAkEIajYCKCABKAIUIAEoAhggAkEQahDcHAwPCyACQQA2AiAgAkEBNgIUIAJBqI/EADYCECACQgQ3AhggASgCFCABKAIYIAJBEGoQ3BwMDgsgAkEANgIgIAJBATYCFCACQdiPxAA2AhAgAkIENwIYIAEoAhQgASgCGCACQRBqENwcDA0LIAJBADYCICACQQE2AhQgAkGAkMQANgIQIAJCBDcCGCABKAIUIAEoAhggAkEQahDcHAwMCyACIAAoAgQ2AgggAkECNgIUIAJBqJDEADYCECACQgE3AhwgAkEINgIsIAIgAkEoajYCGCACIAJBCGo2AiggASgCFCABKAIYIAJBEGoQ3BwMCwsgAiAAKAIENgIIIAJBATYCFCACQdSQxAA2AhAgAkIBNwIcIAJBCDYCLCACIAJBKGo2AhggAiACQQhqNgIoIAEoAhQgASgCGCACQRBqENwcDAoLIAIgACgCBDYCCCACQQE2AhQgAkH0kMQANgIQIAJCATcCHCACQQg2AiwgAiACQShqNgIYIAIgAkEIajYCKCABKAIUIAEoAhggAkEQahDcHAwJCyACQQA2AiAgAkEBNgIUIAJBqJHEADYCECACQgQ3AhggASgCFCABKAIYIAJBEGoQ3BwMCAsgAkEANgIgIAJBATYCFCACQdCRxAA2AhAgAkIENwIYIAEoAhQgASgCGCACQRBqENwcDAcLIAIgADYCCCACQQE2AhQgAkGAksQANgIQIAJCATcCHCACQQY2AiwgAiACQShqNgIYIAIgAkEIajYCKCABKAIUIAEoAhggAkEQahDcHAwGCyACQQA2AiAgAkEBNgIUIAJBrJLEADYCECACQgQ3AhggASgCFCABKAIYIAJBEGoQ3BwMBQsgAkEANgIgIAJBATYCFCACQdiSxAA2AhAgAkIENwIYIAEoAhQgASgCGCACQRBqENwcDAQLIAJBADYCICACQQE2AhQgAkGAk8QANgIQIAJCBDcCGCABKAIUIAEoAhggAkEQahDcHAwDCyACQQA2AiAgAkEBNgIUIAJBmJPEADYCECACQgQ3AhggASgCFCABKAIYIAJBEGoQ3BwMAgsgAiAALQAIOgAMIAIgACgCBDYCCCACQQE2AhQgAkHAk8QANgIQIAJCATcCHCACQdwANgIsIAIgAkEoajYCGCACIAJBCGo2AiggASgCFCABKAIYIAJBEGoQ3BwMAQsgAiAAKAIENgIIIAJBATYCFCACQeSTxAA2AhAgAkIBNwIcIAJBMjYCLCACIAJBKGo2AhggAiACQQhqNgIoIAEoAhQgASgCGCACQRBqENwcCyACQTBqJAALvQkCDn8BfiMAQfACayICJAAgASgCCCEGIAFBADYCCCABKAIAIQggASgCBCEDIAFCgICAgIABNwIAIAIgAyAGQTBsIgRqIgc2AiwgAiAINgIoIAIgAzYCICAAQcQAaiEIIANBMGohBiACQeAAakEEciEKIAJB3AFqIgtBBmohDANAAkACQCACIAQEfyADKAIAIQUgAkEwaiADQQRqQSwQ7yQaIAVBE0cNASAGBSAHCzYCJCACQSBqELISIAEoAghBMGwhByABKAIEIQQDQCAHRQ0CIAdBMGshByAEIgNBMGohBCADKAIAQRFHDQAgAygCCEEGcUEGRw0ACyACQdgBakHg784AKQMANwMAIAJB2O/OACkDADcD0AEgAkG4AWoiAyABQQhqIgQoAgAiBjYCACAEQQA2AgAgASkCACEQIAFCgICAgIABNwIAIANBADYCACACIBA3A7ABIAJBADYCcCACIAY2AmwgAiACKAK0ASIDNgJgIAIgAyAGQTBsIgdqNgJkIAIgAkGwAWo2AmggAkHwAWpBBHIhCANAAkAgBwRA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GyIEQRlHBEAgBEEiRw0BIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRgRAIAEoAiwhBAwHC0HAv8wAQShByMrLABC8EgALIANBQGsgARCGAiADKAJAIgRFDQEgBEEHRg0CQcC/zABBKEGUy8sAELwSAAsgA0HMAGogBRC5CSADIAUQmBAgA0EaNgJIIANB6MrLADYCRCADQTA6AEAgAygCACADKAIEIANBQGsQwxAhBCAFEJALIgJFDQQgAigCAEEkRw0EIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRw0CIAEgASgCLBDyCQwECyADQZABaiADQdQAaikCADcDACADQZgBaiADQdwAaigCADYCACADIAMpAkw3A4gBIAMoAkghBEIBIQkMAgsgAygCRCEEDAILQcC/zABBKEGEy8sAELwSAAsgA0EkaiADQZABaikDADcCACADQSxqIANBmAFqKAIANgIAIAMgBDYCGCADIAk3AxAgAyADKQOIATcCHAJAAkACQAJAIAUQkAsiBARAIAQoAgBBDUYNAQtBAyEHIAUQkAsiBA0BDAMLIANBQGsgARC6BSADKAJAIghBgICAgHhHBEAgA0HoAGogA0HMAGopAgA3AwAgAyADKQJENwNgQQIhBwwDCyADKAJEIQQMAQsCQAJAQRAgBCgCAEECayIEIARBI08bQQxrDgIDAAELIAEoAighBCABQSU2AiggASABKQNANwN4IANBzABqIAFBNGopAgA3AgAgA0HUAGogAUE8aigCADYCACADIAEpAiw3AkQgAyAENgJAIANBQGsQ4ggMAgsgBRDWGQ0BIANByABqIAUQuQkgA0EIaiAFEJgQIANBwJXMADYCRCADQTQ6AEAgAygCCCADKAIMIANBQGsQwxAhBCAFEJALIgJFDQAgAigCAEEkRw0AIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRgRAIAEgASgCLBDyCQwBC0HAv8wAQShB2MrLABC8EgALIANBEGoQ5xcMAQsgASgCfCEFQdgAQQgQ/hoiBCAINgIgIARBGGogA0EoaikDADcDACAEQRBqIANBIGopAwA3AwAgBEEIaiADQRhqKQMANwMAIAQgAykDEDcDACAEQSRqIANB4ABqQSEQ7yQaIAQgBjoAUSAEQQA6AFAgBCACIAUgAiAFSxs2AkwgBCACIAUg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KAJEIQMCQCACKAJARQRAQQAhASACQQA2AiggAiACKAJIIgc2AiQgAiADNgIgIAJBLGogBiAEEJ8RIAMgAigCMCACKAIsa0EwbiIDTw0BIAJBIGpBACADEPUSIAIoAiQhByACKAIoIQEMAQsgAyACKAJIEKIgAAsgAkEYaiACQTxqKAIANgIAIAJBEGogAkE0aikCADcDACACIAIpAiwiDTcDCCAHIAFBMGxqIQUgDachAyACKAIMIQQCfwNAIAMgBEYEQCACQRM2AkAgBAwCCyACQUBrIANBMBDvJBogAigCQEETRwRAIAUgA0EwEPAkQTBqIQUgAUEBaiEBIANBMGohAwwBCwsgA0EwagshAyACQUBrEJ8eIAIgATYCKCACQoiAgICAATcDCCAEIANrQTBuIQUCQCADIARGDQADQCAFRQ0BIAVBAWshBSADEJIDIANBMGohAwwACwALIAJBCGoQ1w4gAigCICABayAISQRAIAJBIGogASAIEPUSIAIoAiQhByACKAIoIQELIAIgCjYCTCACIAs2AkggAiAJNgJAIAhBAnQhBSABIAhB/////wNxaiEEIAcgAUEwbGohAwNAIAUEQCAJKAIAIQEgA0EIakIANwMAIANBBGogATYCACADQRI2AgAgA0EwaiEDIAVBBGshBSAJQQRqIQkMAQsLIAIgCjYCRCACIAQ2AiggAkFAaxCtEiAAKAIkIQMgACgCKCIBIAIoAiAgBGtLBEAgAkEgaiAEIAEQ9RIgAigCKCEECyACKAIkIARBMGxqIAMgAUEwbBDvJBogAEEANgIoIAJBKGoiAyABIARqNgIAIAYQ4RUgACgCICAAKAIkEPQaIAZBCGogAygCADYCACAGIAIpAiA3AgAMAgsgA0EwaiEDIAVBMGshBSAEQQFqIQQMAAsACyACQfAAaiQAC40KAQJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQEEHIAAoAgAiACgCACIBQQxrIgIgAkEmTxtBAWsOJAABAgMEBQYHCAkKCwwNDg8QERITIhQVFhciGBkaGxwdHh8gISILIABBBGoQnRIgACgCBCAAQQhqKAIAENAaDCELIABBBGoQ0QcgACgCBCAAQQhqKAIAEN8aDCAL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v8wAQShByMjLABC8EgALIAIgBDYCJCACQaQBaiABQShqIgMQuQkgAkEIaiADEJgQIAJB1wA2AqABIAJB2MjLADYCnAEgAkEwOgCYASACKAIIIAIoAgwgAkGYAWoQwxAhBAJAIAMQkAsiA0UNACADKAIAQSRHDQAgASABKQNANwN4IAEoAiggAUElNgIoQSRGBEAgASABKAIsEPIJDAELQcC/zABBKEGwycsAELwSAAsgAEGAgICAeDYCACAAIAQ2AgQgDBDtHiACQTBqEMIOIAJBIGoQoxIMCAsgAkGIAWogA0EYaigCADYCACACQYABaiADQRBqKQIANwMAIAJB+ABqIANBCGopAgA3AwAgAiADKQIANwNwDAMLIAJBgAFqIANBEGopAgA3AwAgAkH4AGogA0EIaikCADcDACACIAMpAgA3A3AMAgsgAkGIAWogA0EYaigCADYCACACQYABaiADQRBqKQIANwMAIAJB+ABqIANBCGopAgA3AwAgAiADKQIANwNwDAELIAUgBykCADcCACAFQRhqIAdBGGopAgA3AgAgBUEQaiAHQRBqKQIANwIAIAVBCGogB0EIaikCADcCAAsgAigCFCAIRgRAIAJBFGoQsgggAigCGCEGCyAGIApqIgNBBGsgCzYCACADIAJB8ABqQSQQ7yQaIAIgCEEBaiIINgIcIAwQ7R4gAigCMEEETwRAIAJBMGoQwg4LIAlBQGohCSAKQShqIQoMAAsACyAAQYCAgIB4NgIAIAAgBDYCBAwCCyAAQYCAgIB4NgIAIAAgBDYCBAsgAkEUahDvHgsgAkGwAWokAAvyCQIDfwF+IwBBQGoiAiQAAkACQAJAAkACQAJAAkACQAJAAkAgACgCAEEBaw4HAQIDBAUGBwALIAEgAEEIakEAEJURIAAoAiAgARCrFCABKAIwEJANIQMgAkEYakHg784AKQMAIgU3AwAgAkEIaiAFNwMAIAJBNGogAUE0aigCADYCACACQQE6ACggAiABNgIgIAIgAzYCJCACQdjvzgApAwAiBTcDECACIAU3AwAgAiABKQIsNwIsIAIgAS0APDoAPCACIAEvATo7ATogAS0AOCEDIAIgAS0APToAPSACIAM6ADggAkEBOgA5IABBIGogAhCmAQwHCyAAKAIgQQxqIAEQqxQgASgCMBCQDSEDIAJBGGpB4O/O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IQwgAkE4aiERIAJBgAFqIRIgAkGoAWohEyACQegAaiEGQQAhASAKIQUDQCAFRSABIBBGckUEQAJAIAEgDWoiAygCAARAIAJBDGogAxD5GgwBC0EIQfAAELEgIhRFDQQCQAJAAkACQAJAAkACQEEEIANBBGooAgAiAygCAEEFayIEIARBBk8bQQFrDgUBAgMEBQALIAYgA0EIahC7FSACQQU2AmAMBQsgAkEYaiIEIANBCGoQvQggAiADQShqEN0eNgI4IAYgBEEoEO8kGiACQQY2AmAMBAsgAykDCCEVIAwgA0EQahC7FSACIANBKGoQ3R42AjggAiAVNwMYIAYgAkEYakEoEO8kGiACQQc2AmAMAwsgAygCRCEIIAMoAkAhCyACQdABaiADQQhqEL0IAkAgAygCSCIERQRAQQAhBAwBCyAEEOcaIgQQmRkLIBEgA0EoahC7CyAMIAJB2AFqKQMANwMAIAJBKGogAkHgAWopAwA3AwAgAkEwaiACQegBaikDADcDACACIAg2AlQgAiALNgJQIAIgBDYCWCACIAIpA9ABNwMYIAYgAkEYakHIABDvJBogAkEINgJgDAILIAMoAmQhCCADKAJgIQsgAkHQAWogAxC9CAJAIAMoAiBBB0YEQCACQQc2AhgMAQsgAkEYaiADQSBqENMDCxDoGiEEIAMoAmggBBCsFiATIANByABqELsLIAYgAkHYAWopAwA3AwAgAkHwAGogAkHgAWopAwA3AwAgAkH4AGogAkHoAWopAwA3AwAgAiAINgLEASACIAs2AsABIAIgAikD0AE3A2AgEiACQRhqQSgQ7yQaIAIgBDYCyAEMAQsgAkEYaiIIIANBCGoQvQgQ7BohBCADKAIoIAQQtQQgAiAENgI4IAYgCEEoEO8kGiACQQo2AmALIAIgFCACQeAAakHwABDvJDYCECACQQA2AgwLIAEgCWoiAyACKQIMNwIAIANBCGogAkEUaigCADYCACAFQQFrIQUgAUEMaiEBDAELCyAAIAc2AgggACAJNgIEIAAgCjYCACAAIA42AhAgACAPNgIMIAJB8AFqJAAPCyAFIAEQoiAACwAL0wgBAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQQcgACgCACIAKAIAIgFBDGsiAiACQSZPG0EBaw4kAAECAwQFBgcICQoLDA0ODxAREhMiFBUWFyIYGRobHB0eHyAhIgsgAEEEahCdEiAAKAIEIABBCGooAgAQ0BoMIQsgAEEEahDmHgwgCyAAQQhqEJcdDB8LIABBBGoQnQIMHgsgAEEMahCdAgwdCyAAQQRqEJ0CIABBCGoQnQIMHAsCQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAQ4MAAECAwQFBgcICQsKCwsgAEEIahCpHwwKCyAAQQhqEPIVDAkLIABBCGoQrRkMCAsgAEEEahCdAgwHCyAAQQRqEKATDAYLIABBBGoQ2SAMBQsgAEEEahDZIAwECyAAQQRqEJ0CDAMLIABBBGoQ2SAMAgsgAEEEahDJIQwBCwJAAkAgACgCBA4CAAECCyAAQQhqEIMaDAELIABBCGoQhBoLIABBOGoQnQIMGwsgAEEIahDyFQwaCyAAQQhqEK0ZDBkLIABBBGoQnQIgAEEIahCdAiAAQQxqEJ0CDBgLIAAtABhBBUYEQCAAQRBqEJ0CCyAAQQRqEOgeIAAoAigQuiAMFwsgAEEQahCdAiAAKAIEQYCAgIB4RwRAIABBBGoQ6B4LIAAoAiAQuiAMFgsgAEEEahDpHgwVCyAAKQMIENgPDBQLAkACQAJAAkACQCAAKAIIDgYBGBgCAwQACyAAKQMQENgPIAApAxgQ2A8MFwsgACkDECAAQSBqKQMAEJIiDBYLIAApAyAQ5B4MFQsgAEEYaikDACAAQSBqKAIAENkYDBQLIAApAxAQ2A8gACkDGBDYDwwTCyAAQQRqELQgDBILIABBBGoQnQIgACgCGBC6ICAAKAIIIgEQtCAgAUEgQQQQhQ4MEQsgAEEEahDeFSAAKAIEIABBCGooAgAQ8RoCQCAAKAIQIgEoAgBBgICAgHhHBEAgARDqHgwBCyABQQRqEJ0CCyAAKAIQQRhBBBCFDiAAKAIgEMEXIABBJGoQqh8MEAsgAEEIahDrGwwPCyAAQQxqEKgfDA4LIABBBGoQnQIMDQsgAEEEahCdAgwMCyAAQQhqEN8VDAsLIAApAwggAEEYaikDABCRIgwKCyAAKAIEIgFBQGsQnBIgAUH8AGoQ0wkgASgCfCABQYABaigCABDyGiABKAJ4ELogIAFBkAFqEOMeIAEtADxBBkcEQCABQRBqEJwSCyABQaABQQgQhQ4MCQsgAEEEahDjHgwICyAAQQRqENkgDAcLIABBBGoQnQIMBgsgAEEEahCdAgwFCyAAQQRqENkgDAQLIABBBGoQySEMAwsgAEEEahDZIAwCCyAAKQMIENgPDAELIABBBGoQoBMLIABBwABBCBCFDgvTCAECfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkBBByAAKAIAIgAoAgAiAUEMayICIAJBJk8bQQFrDiQAAQIDBAUGBwgJCgsMDQ4PEBESEyIUFRYXIhgZGhscHR4fICEiCyAAQQRqEJ0SIAAoAgQgAEEIaigCABDQGgwhCyAAQQRqEOYeDCALIABBCGoQiB4MHwsgAEEEahCeAgweCyAAQQxqEJ4CDB0LIABBBGoQngIgAEEIahCeAgwcCwJAAkACQAJAAkACQAJAAkACQAJAAkACQCABDgwAAQIDBAUGBwgJCwoLCyAAQQhqEOYfDAoLIABBCGoQhxYMCQsgAEEIahDLGQwICyAAQQRqEJ4CDAcLIABBBGoQvhMMBgsgAEEEahCAIQwFCyAAQQRqEIAhDAQLIABBBGoQngIMAwsgAEEEahCAIQwCCyAAQQRqENwhDAELAkACQCAAKAIEDgIAAQILIABBCGoQqBoMAQsgAEEIahCpGgsgAEE4ahCeAgwbCyAAQQhqEIcWDBoLIABBCGoQyxkMGQsgAEEEahCeAiAAQQhqEJ4CIABBDGoQngIMGAsgAC0AGEEFRgRAIABBEGoQngILIABBBGoQ6B4gACgCKBC6IAwXCyAAQRBqEJ4CIAAoAgRBgICAgHhHBEAgAEEEahDoHgsgACgCIBC6IAwWCyAAQQRqEOkeDBULIAApAwgQ2A8MFAsCQAJAAkACQAJAIAAoAggOBgEYGAIDBAALIAApAxAQ2A8gACkDGBDYDwwXCyAAKQMQIABBIGopAwAQkiIMFgsgACkDIBDkHgwVCyAAQRhqKQMAIABBIGooAgAQ2RgMFAsgACkDEBDYDyAAKQMYENgPDBMLIABBBGoQtCAMEgsgAEEEahCeAiAAKAIYELogIAAoAggiARC0ICABQSBBBBCFDgwRCyAAQQRqEN4VIAAoAgQgAEEIaigCABDxGgJAIAAoAhAiASgCAEGAgICAeEcEQCABEOoeDAELIAFBBGoQngILIAAoAhBBGEEEEIUOIAAoAiAQwRcgAEEkahDnHwwQCyAAQQhqEKgcDA8LIABBDGoQ6B8MDgsgAEEEahCeAgwNCyAAQQRqEJ4CDAwLIABBCGoQ3xUMCwsgACkDCCAAQRhqKQMAEJEiDAoLIAAoAgQiAUFAaxCcEiABQfwAahDTCSABKAJ8IAFBgAFqKAIAEPIaIAEoAngQuiAgAUGQAWoQ4x4gAS0APEEGRwRAIAFBEGoQnBILIAFBoAFBCBCFDgwJCyAAQQRqEOMeDAgLIABBBGoQgCEMBwsgAEEEahCeAgwGCyAAQQRqEJ4CDAULIABBBGoQgCEMBAsgAEEEahDcIQwDCyAAQQRqEIAhDAILIAApAwgQ2A8MAQsgAEEEahC+EwsgAEHAAEEIEIUOC9MIAQJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQEEHIAAoAgAiACgCACIBQQxrIgIgAkEmTxtBAWsOJAABAgMEBQYHCAkKCwwNDg8QERITIhQVFhciGBkaGxwdHh8gISILIABBBGoQnRIgACgCBCAAQQhqKAIAENAaDCELIABBBGoQ5h4MIAsgAEEIahCUHgwfCyAAQQRqEJ8CDB4LIABBDGoQnwIMHQsgAEEEahCfAiAAQQhqEJ8CDBwLAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEODAABAgMEBQYHCAkLCgsLIABBCGoQ9R8MCgsgAEEIahCLFgwJCyAAQQhqEM8ZDAgLIABBBGoQnwIMBwsgAEEEahDCEwwGCyAAQQRqEIUhDAULIABBBGoQhSEMBAsgAEEEahCfAgwDCyAAQQRqEIUhDAILIABBBGoQ4CEMAQsCQAJAIAAoAgQOAgABAgsgAEEIahCzGgwBCyAAQQhqELQaCyAAQThqEJ8CDBsLIABBCGoQixYMGgsgAEEIahDPGQwZCyAAQQRqEJ8CIABBCGoQnwIgAEEMahCfAgwYCyAALQAYQQVGBEAgAEEQahCfAgsgAEEEahDoHiAAKAIoELogDBcLIABBEGoQnwIgACgCBEGAgICAeEcEQCAAQQRqEOgeCyAAKAIgELogDBYLIABBBGoQ6R4MFQsgACkDCBDYDwwUCwJAAkACQAJAAkAgACgCCA4GARgYAgMEAAsgACkDEBDYDyAAKQMYENgPDBcLIAApAxAgAEEgaikDABCSIgwWCyAAKQMgEOQeDBULIABBGGopAwAgAEEgaigCABDZGAwUCyAAKQMQENgPIAApAxgQ2A8MEwsgAEEEahC0IAwSCyAAQQRqEJ8CIAAoAhgQuiAgACgCCCIBELQgIAFBIEEEEIUODBELIABBBGoQ3hUgACgCBCAAQQhqKAIAEPEaAkAgACgCECIBKAIAQYCAgIB4RwRAIAEQ6h4MAQsgAUEEahCfAgsgACgCEEEYQQQQhQ4gACgCIBDBFyAAQSRqEPYfDBALIABBCGoQqhwMDwsgAEEMahD0HwwOCyAAQQRqEJ8CDA0LIABBBGoQnwIMDAsgAEEIahDfFQwLCyAAKQMIIABBGGopAwAQkSIMCgsgACgCBCIBQUBrEJwSIAFB/ABqENMJIAEoAnwgAUGAAWooAgAQ8hogASgCeBC6ICABQZABahDjHiABLQA8QQZHBEAgAUEQahCcEgsgAUGgAUEIEIUODAkLIABBBGoQ4x4MCAsgAEEEahCFIQwHCyAAQQRqEJ8CDAYLIABBBGoQnwIMBQsgAEEEahCFIQwECyAAQQRqEOAhDAMLIABBBGoQhSEMAgsgACkDCBDYDwwBCyAAQQRqEMITCyAAQcAAQQgQhQ4L1QcCIH8DfiMAQeADayIFJAAgBSAAQaABEO8kIgItADwhECACKAIEIREgAigCACESIAIoAnAhEyACKAJ0IRQgAigCfCEVIAIoAoABIQsgAigChAEhDCACLQCIASEWIAIoAnghFyACQZgCaiACQUBrEOwQIAJByANqIQkgAkHAA2ohGCACQegCaiEZIAJBuANqQQRyIQ0gAkHgAmpBBHIhDiACQZABaiEaIAwhBQNAIAUEQCACQeACaiAKIAtqIgNB2AAQ7yQaAn8gAigC4AIiBEEFRwRAAn8gAikDkAMiIlAEQCACKQOYAyIiQiCIpyEGICKnIQdCACEiIAIoAqQDIQ8gAigCoAMMAQsgAikDoAMiI0IgiKchDyACKAKcAyEGIAIoApgDIQcgAigCrAMhGyACKAKoAyEcIAIoArQDIR0gAigCsAMhHiAjpwsgAigCjAMhICACKAKIAyEhQQQhCCAEQQRHBEACQAJAAkACQAJAIARBAWsOAwECAwALIBggGRCCCQwDCyANIA4gARCYDwwCCyACIAIoAuQCIAEQoAI2ArwDDAELIA0gDiABEI0WCyAEIQgLIAJB0AJqIAlBCGopAwA3AwAgAkHYAmogCUEQaikDADcDACACIAkpAwA3A8gCrSAPrUIghoQhIyAHrSAGrUIghoQhJCACKALEAyEEIAIoAsADIQYgAigCvAMMAQtBBSEIIAIoAuwCIQQgAigC6AIhBiACKALkAiABEEwLIQcgAyAINgIAIANBDGogBDYCACADQQhqIAY2AgAgA0EEaiAHNgIAIANBEGogAikDyAI3AwAgA0EYaiACQdACaikDADcDACADQSBqIAJB2AJqKQMANwMAIANB1ABqIB02AgAgA0HQAGogHjYCACADQcwAaiAbNgIAIANByABqIBw2AgAgA0FAayAjNwMAIANBOGogJDcDACADQTBqICI3AwAgA0EsaiAgNgIAIANBKGogITYCACAFQQFrIQUgCkHYAGohCgwBCwsgAkGgAWogAkGYAmpBMBDvJBogAkHQAWogGiABEK0HAkAgEEEGRgRAIAJBBjoAlAIMAQsgAikDCCEiIAJB6AFqIAJBEGoQ7BAgAiAiNwPgAQsgACARNgIEIAAgEjYCACAAQQhqIAJB4AFqQTgQ7yQaIABBQGsgAkGgAWpBMBDvJBogACAWOgCIASAAIAw2AoQBIAAgCzYCgAEgACAVNgJ8IAAgFzYCeCAAIBQ2AnQgACATNgJwIAAgAikD0AE3A5ABIABBmAFqIAJB2AFqKAIANgIAIAJB4ANqJAAgAAvTCAECfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkBBByAAKAIAIgAoAgAiAUEMayICIAJBJk8bQQFrDiQAAQIDBAUGBwgJCgsMDQ4PEBESEyIUFRYXIhgZGhscHR4fICEiCyAAQQRqEJ0SIAAoAgQgAEEIaigCABDQGgwhCyAAQQRqEOYeDCALIABBCGoQwx4MHwsgAEEEahChAgweCyAAQQxqEKECDB0LIABBBGoQoQIgAEEIahChAgwcCwJAAkACQAJAAkACQAJAAkACQAJAAkACQCABDgwAAQIDBAUGBwgJCwoLCyAAQQhqEJYgDAoLIABBCGoQnxYMCQsgAEEIahDdGQwICyAAQQRqEKECDAcLIABBBGoQzxMMBgsgAEEEahCmIQwFCyAAQQRqEKYhDAQLIABBBGoQoQIMAwsgAEEEahCmIQwCCyAAQQRqEPEhDAELAkACQCAAKAIEDgIAAQILIABBCGoQxxoMAQsgAEEIahDIGgsgAEE4ahChAgwbCyAAQQhqEJ8WDBoLIABBCGoQ3RkMGQsgAEEEahChAiAAQQhqEKECIABBDGoQoQIMGAsgAC0AGEEFRgRAIABBEGoQoQILIABBBGoQ6B4gACgCKBC6IAwXCyAAQRBqEKECIAAoAgRBgICAgHhHBEAgAEEEahDoHgsgACgCIBC6IAwWCyAAQQRqEOkeDBULIAApAwgQ2A8MFAsCQAJAAkACQAJAIAAoAggOBgEYGAIDBAALIAApAxAQ2A8gACkDGBDYDwwXCyAAKQMQIABBIGopAwAQkiIMFgsgACkDIBDkHgwVCyAAQRhqKQMAIABBIGooAgAQ2RgMFAsgACkDEBDYDyAAKQMYENgPDBMLIABBBGoQtCAMEgsgAEEEahChAiAAKAIYELogIAAoAggiARC0ICABQSBBBBCFDgwRCyAAQQRqEN4VIAAoAgQgAEEIaigCABDxGgJAIAAoAhAiASgCAEGAgICAeEcEQCABEOoeDAELIAFBBGoQoQILIAAoAhBBGEEEEIUOIAAoAiAQwRcgAEEkahCUIAwQCyAAQQhqEMEcDA8LIABBDGoQkyAMDgsgAEEEahChAgwNCyAAQQRqEKECDAwLIABBCGoQ3xUMCwsgACkDCCAAQRhqKQMAEJEiDAoLIAAoAgQiAUFAaxCcEiABQfwAahDTCSABKAJ8IAFBgAFqKAIAEPIaIAEoAngQuiAgAUGQAWoQ4x4gAS0APEEGRwRAIAFBEGoQnBILIAFBoAFBCBCFDgwJCyAAQQRqEOMeDAgLIABBBGoQpiEMBwsgAEEEahChAgwGCyAAQQRqEKECDAULIABBBGoQpiEMBAsgAEEEahDxIQwDCyAAQQRqEKYhDAILIAApAwgQ2A8MAQsgAEEEahDPEwsgAEHAAEEIEIUOC/4HAQd/IwBBEGsiBiQAIAAsAAkhBCAALQAAIQgCQCAAELIVIglFBEBBASEDIAFBkPrBAEECIAIoAgwRAwANAQsgAC0AASIHQQRHIgUEQCAGIAAoAAE2AghBASEDIAZBCGogASACEMgBDQELAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAC0ABUEERwRAIAYgACgABTYCDCAHQQRHBEAgAUHNhMwAQQEgAigCDBEDAA0CCyAGQQxqIAEgAhDFAQ0BCyAEIAhyQf8BcUUNFwJAAkAgCEUEQCAERQ0aIARBAXENASAEQQJxRQ0JIAIoAgwhACAHQQRHDQgMCgsgB0EERw0BIAIoAgwhAAwDCyACKAIMIQAgB0EERw0DDAQLQQEhAyABQc2EzABBASACKAIMIgARAwBFDQEMGQtBASEDDBgLQQEhAyABQZL6wQBBASAAEQMADRcgBEUNFUEBIQUgBEEBcUUNAgtBASEDIAFBzYTMAEEBIAARAwANFgtBASEDIAFBk/rBAEEBIAARAwANFUEBIQUgBEECcQ0BDAILIARBAnFFDQELQQEhAyABQc2EzABBASAAEQMARQ0BDBMLIARBBHFFBEAgBEEIcUUNBiACKAIMIQAgBQ0FDAcLIAIoAgwhACAFDQEMAgtBASEDIAFBlPrBAEEBIAARAwANESAEQQRxRQ0CC0EBIQMgAUHNhMwAQQEgABEDAA0QC0EBIQMgAUGV+sEAQQEgABEDAA0PQQEhBSAEQQhxDQEMAgtBASEFIARBCHFFDQELQQEhAyABQc2EzABBASAAEQMARQ0BDA0LAkAgBEEQcUUEQCAEQSBxDQEMCAsgAigCDCEAIAUNAgwDCyACKAIMIQAgBQ0EDAULQQEhAyABQZb6wQBBASAAEQMADQsgBEEQcUUNAgtBASEDIAFBzYTMAEEBIAARAwANCgtBASEDIAFBl/rBAEEBIAARAwANCUEBIQUgBEEgcUUNAwwBC0EBIQUgBEEgcUUNAgtBASEDIAFBzYTMAEEBIAARAwANBwtBASEDIAFBmPrBAEEBIAARAwANBiAEQcAAcQ0BDAMLIARBwABxRQRAIAUhAwwDCyACKAIMIQAgBUUNAQtBASEDIAFBzYTMAEEBIAARAwANBAtBASEDIAFBmfrBAEEBIAARAwANAwsgBEEATg0AAkAgA0UEQCACKAIMIQAMAQtBASEDIAFBzYTMAEEBIAIoAgwiABEDAA0DCyAJIAFBmvrBAEEBIAARAwAiA3INAgwBC0EAIQMgCQ0BIAIoAgwhAAsgAUHQ+cEAQQEgABEDACEDCyAGQRBqJAAgAwu4CAECfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkBBByAAKAIAIgAoAgAiAUEMayICIAJBJk8bQQFrDiQAAQIDBAUGBwgJCgsMDQ4PEBESEyIUFRYXIhgZGhscHR4fICEiCyAAQQRqEJ0SIAAoAgQgAEEIaigCABDQGgwhCyAAQQRqEOYeDCALIABBCGoQxyEMHwsgAEEEahCjAgweCyAAQQxqEKMCDB0LIABBBGoQowIgAEEIahCjAgwcCwJAAkACQAJAAkACQAJAAkACQAJAAkACQCABDgwAAQIDBAUGBwgJCwoLCyAAQQhqENIgDAoLIABBCGoQgBUMCQsgAEEIahDnGAwICyAAQQRqEKMCDAcLIABBBGoQnxMMBgsgAEEEahDTIAwFCyAAQQRqENMgDAQLIABBBGoQowIMAwsgAEEEahDTIAwCCyAAQQRqEMghDAELAkACQCAAKAIEDgIAAQILIABBCGoQgBoMAQsgAEEIahCBGgsgAEE4ahCjAgwbCyAAQQhqEIAVDBoLIABBCGoQ5xgMGQsgAEEEahCjAiAAQQhqEKMCIABBDGoQowIMGAsgAC0AGEEFRgRAIABBEGoQowILIABBBGoQ6B4gACgCKBC6IAwXCyAAQRBqEKMCIAAoAgRBgICAgHhHBEAgAEEEahDoHgsgACgCIBC6IAwWCyAAQQRqEOkeDBULIABBCGoQlQ8MFAsCQAJAAkACQAJAIAAoAggOBgEYGAIDBAALIABBEGoQlQ8gAEEYahCVDwwXCyAAQRBqENQgDBYLIABBIGoQjx0MFQsgAEEQahDMFwwUCyAAQRBqEJUPIABBGGoQlQ8MEwsgAEEEahC0IAwSCyAAQQRqEKMCIAAoAhgQuiAgACgCCCIBELQgIAFBIEEEEIUODBELIABBBGoQ3hUgACgCBCAAQQhqKAIAEPEaAkAgACgCECIBKAIAQYCAgIB4RwRAIAEQ6h4MAQsgAUEEahCjAgsgACgCEEEYQQQQhQ4gACgCIBDBFyAAQSRqEJgfDBALIABBCGoQ1SAMDwsgAEEMahCZHwwOCyAAQQRqEKMCDA0LIABBBGoQowIMDAsgAEEIahDWIAwLCyAAQQhqENcgDAoLIAAoAgQiAUFAaxDpEyABQfwAahDTCSABKAJ8IAFBgAFqKAIAEPIaIAEoAngQuiAgAUGQAWoQ4x4gAS0APEEGRwRAIAFBEGoQ6RMLIAFBoAFBCBCFDgwJCyAAQQRqEOMeDAgLIABBBGoQ0yAMBwsgAEEEahCjAgwGCyAAQQRqEKMCDAULIABBBGoQ0yAMBAsgAEEEahDIIQwDCyAAQQRqENMgDAILIABBCGoQlQ8MAQsgAEEEahCfEwsgAEHAAEEIEIUOC9oHAQJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQQcgACgCACIBQQxrIgIgAkEmTxtBAWsOJAABAhsDBAUGBwgJCgsMDQ4PEBESGBsbExQYFRYdGxsdFx0ZGhgLIABBBGoQnRIgACgCBCAAKAIIENAaDwsgAEEEahDRByAAKAIEIAAoAggQ3xoPCyAAKQMIIAAtABwQ1hsgACgCIBCJEw8LIABBDGoQmx4PCyAAQQRqEJseIABBCGoQmx4PCwJAAkACQAJAAkACQAJAAkACQAJAAkACQCABDgwAAQIDBAUGBwgJCwoLCyAAQQhqEPkfDAoLIABBCGoQjhYMCQsgAEEIahDRGQwICyAAQQRqEJseDAcLIABBBGoQxBMMBgsgAEEEahCGIQwFCyAAQQRqEIYhDAQLIABBBGoQmx4MAwsgAEEEahCGIQwCCyAAQQRqEOEhDAELAkACQCAAKAIEDgIAAQILIABBCGoQtxoMAQsgAEEIahC4GgsgAEE4ahCbHg8LIABBCGoQjhYPCyAAQQhqENEZDwsgAEEEahCbHiAAQQhqEJseIABBDGoQmx4PCyAALQAYQQVGBEAgAEEQahCbHgsgAEEEahDoHiAAKAIoELogDwsgAEEQahCbHiAAKAIEQYCAgIB4RwRAIABBBGoQ6B4LIAAoAiAQuiAPCyAAQQRqEOkeDwsgACkDCBDYDw8LAkACQAJAAkAgACgCCA4GAA4OAQIDEgsgACkDECAAKQMgEJIiDwsgACkDIBDkHg8LIAApAxggACgCIBDZGA8LDA4LIABBBGoQtCAPCyAAQQRqEJseIAAoAhgQuiAgACgCCCIAELQgIABBIEEEEIUODwsgAEEEahDeFSAAKAIEIAAoAggQ8RoCQCAAKAIQIgEoAgBBgICAgHhHBEAgARDqHgwBCyABQQRqEJseCyABQRhBBBCFDiAAKAIgEMEXIABBJGoQ+h8PCyAAKQMIIAAtABwQ1hsgAEEgahCeEQ8LIABBDGoQ+B8PCyAAQQhqEN8VDwsgACkDCCAAKQMYEJEiDwsgACgCBCIAQUBrEJwSIABB/ABqENMJIAAoAnwgAEGAAWooAgAQ8hogACgCeBC6ICAAQZABahDjHiAALQA8QQZHBEAgAEEQahCcEgsgAEGgAUEIEIUODwsgAEEEahDjHg8LIABBBGoQ4SELDwsgACkDCBDYDw8LIABBBGoQxBMPCyAAQQRqEJseDwsgACkDEBDYDyAAKQMYENgPDwsgAEEEahCGIQveBwEGfyMAQYACayIEJAAgBCADNgI0AkAgAUEoaiIIEPMKIgVFDQAgBSgCAEEVRw0AAkACQAJAAkACQAJAAkACQAJAAkAgBS0ABCIJBEACQCAEQTRqIAEtAK0CQQBHEJgLDQAgBEEoaiADEMwCIAQoAiwhBSAEKAIoIQcgAS0AoAJBAkcEQCAEQcAAOgDAASABIAcgBSAEQcABahD7FAwBCyAEQaoBOgDAASABIAcgBSAEQcABahD7FAsgAS0AoAJBAkcNBCADKAIAQRpHDQQgA0EIahDsFQ0BDAQLIARB6ABqIAFBAiADEFogBCgCbCEDIAQoAmgiBUEHRg0JIARBsAFqIARBiAFqKQMANwMAIARBqAFqIARBgAFqKQMANwMAIARBoAFqIARB+ABqKQMANwMAIAQgBCkDcDcDmAEgBCADNgKUASAEIAU2ApABIARBwAFqIgMgBEGQAWoQmgQgBCgCwAFBDEcEQCAEQThqIANBMBDvJBoMBQsgBEEIaiAEQcgBaiICEOMJIAQoAgwhAyAEKAIIIARBwQA6AGggAyAEQegAahDDECEDIAgQ8woiBkUNAiAGKAIAQSRHDQIgASABKQPgAjcDmAMgASgCyAIgAUElNgLIAkEkRw0BIAEgASgCzAIQ6wkMAgsgBEEgaiADEMwCIAQoAiQhBSAEKAIgIQcgBEGGAToAwAEgASAHIAUgBEHAAWoQmxgMAgtBwL/MAEEoQbzjywAQvBIACyACELYODAYLIARBwAFqIgUgAxDvDiAEKALAAUEMRg0BIARBOGogBUEwEO8kGgsgASgCyAIhAyABQSU2AsgCIAEgASkD4AI3A5gDIARBzAFqIAFB1AJqKQIANwIAIARB1AFqIAFB3AJqKAIANgIAIAQgASkCzAI3AsQBIAQgAzYCwAEgBEHAAWoiBRDgCCAEQRBqIAEQvQUgBCgCFCEDIAQoAhANASABKAKcAyEBIAUgBEE4akEwEO8kGiAEIAk6APwBIAQgAzYC+AEgBCACIAEgASACSRs2AvQBIAQgAiABIAEgAksbNgLwASAFENsYIQMMBQsgBCAEKALEASICNgK8ASAEQRhqIAIQzAIgBCgCHCECIAQoAhggBEHBADoAaCACIARB6ABqEMMQIQMgCBDzCiICRQ0CIAIoAgBBJEcNAiABIAEpA+ACNwOYAyABKALIAiABQSU2AsgCQSRHDQEgASABKALMAhDrCQwCCyAEQThqENgJDAILQcC/zABBKEGs48sAELwSAAsgBEG8AWoQviALQQEhBgsgACADNgIEIAAgBjYCACAEQYACaiQAC8wHAQZ/IwBBgAJrIgQkACAEIAM2AjQCQCABQShqIggQkAsiBUUNACAFKAIAQRVHDQACQAJAAkACQAJAAkACQAJAAkACQCAFLQAEIgkEQAJAIARBNGogAS0AhQNBAEcQmAsNACAEQShqIAMQzAIgBCgCLCEFIAQoAighByABLQD4AkECRwRAIARBwAA6AMABIAEgByAFIARBwAFqEKEVDAELIARBqgE6AMABIAEgByAFIARBwAFqEKEVCyABLQD4AkECRw0EIAMoAgBBGkcNBCADQQhqEOwVDQEMBAsgBEHoAGogAUECIAMQWSAEKAJsIQMgBCgCaCIFQQdGDQkgBEGwAWogBEGIAWopAwA3AwAgBEGoAWogBEGAAWopAwA3AwAgBEGgAWogBEH4AGopAwA3AwAgBCAEKQNwNwOYASAEIAM2ApQBIAQgBTYCkAEgBEHAAWoiAyAEQZABahCaBCAEKALAAUEMRwRAIARBOGogA0EwEO8kGgwFCyAEQQhqIARByAFqIgIQ4wkgBCgCDCEDIAQoAgggBEHBADoAaCADIARB6ABqEMMQIQMgCBCQCyIGRQ0CIAYoAgBBJEcNAiABIAEpA0A3A3ggASgCKCABQSU2AihBJEcNASABIAEoAiwQ8gkMAgsgBEEgaiADEMwCIAQoAiQhBSAEKAIgIQcgBEGGAToAwAEgASAHIAUgBEHAAWoQpxgMAgtBwL/MAEEoQbzjywAQvBIACyACEMIODAYLIARBwAFqIgUgAxDvDiAEKALAAUEMRg0BIARBOGogBUEwEO8kGgsgASgCKCEDIAFBJTYCKCABIAEpA0A3A3ggBEHMAWogAUE0aikCADcCACAEQdQBaiABQTxqKAIANgIAIAQgASkCLDcCxAEgBCADNgLAASAEQcABaiIFEOIIIARBEGogARCyBSAEKAIUIQMgBCgCEA0BIAEoAnwhASAFIARBOGpBMBDvJBogBCAJOgD8ASAEIAM2AvgBIAQgAiABIAEgAkkbNgL0ASAEIAIgASABIAJLGzYC8AEgBRDbGCEDDAULIAQgBCgCxAEiAjYCvAEgBEEYaiACEMwCIAQoAhwhAiAEKAIYIARBwQA6AGggAiAEQegAahDDECEDIAgQkAsiAkUNAiACKAIAQSRHDQIgASABKQNANwN4IAEoAiggAUElNgIoQSRHDQEgASABKAIsEPIJDAILIARBOGoQ3QkMAgtBwL/MAEEoQazjywAQvBIACyAEQbwBahCNIQtBASEGCyAAIAM2AgQgACAGNgIAIARBgAJqJAAL/QcCCH8CfiMAQUBqIgIkACABQSxqIQUgACgCCEE4bCEIIAJBLGohBiACQRBqIQcgACgCBCEJQQAhAANAAkACQCAAIAhHBEAgAS0ANEUNAgJAAkACQAJAAkACQAJAQQQgACAJaiIDKAIAQQRrIgQgBEEHTxtBAWsOBgECAwQFBgALIAEoAjAQkA0hBCAHQQhqQeDvzgApAwAiCjcCACAHQdjvzgApAwAiCzcCACACQQhqIAo3AwAgBiAFKQIANwIAIAZBCGogBUEIaigCADYCACACQQE6ACggAiABNgIgIAIgBDYCJCACQQE6ADkgAiALNwMAIAIgAS8AOzsAOyABLQA4IQQgAiABLQA9OgA9IAIgBDoAOCACQQE6ADogA0EcaiACENcKIANBBGogAhC2FCADQRhqIAIQvR0gAhDkIAwICyABKAIwEJANIQQgB0EIakHg784AKQMAIgo3AgAgB0HY784AKQMAIgs3AgAgAkEIaiAKNwMAIAYgBSkCADcCACAGQQhqIAVBCGooAgA2AgAgAkEBOgAoIAIgATYCICACIAQ2AiQgAkEBOgA5IAIgCzcDACACIAEvADs7ADsgAS0AOCEEIAIgAS0APToAPSACIAQ6ADggAkEBOgA6IANBHGogAhDXCiADQQRqIAIQthQgA0EYaiACEL0dIAIQ5CAMBwsgA0EVai0AAEUNBSADQRBqIAEQ5SIMBQsgA0EUai0AAARAIANBBGogARDlIgsgA0EQaiABEL0dDAULIANBNGotAAAEQCADQTBqIAEQ5SILIAEgAxDnEAwECyABKAIwEJANIQQgB0EIakHg784AKQMAIgo3AgAgB0HY784AKQMAIgs3AgAgAkEIaiAKNwMAIAYgBSkCADcCACAGQQhqIAVBCGooAgA2AgAgAkEBOgAoIAIgATYCICACIAQ2AiQgAkEBOgA5IAIgCzcDACACIAEvADs7ADsgAS0AOCEEIAIgAS0APToAPSACIAQ6ADggAkEBOgA6IANBIGogAhDXCiADQSRqLQAABEAgA0EQaiACEOUiCyADQQRqIAIQthQgA0EcaiACEL0dIAIQ5CAMAwsgASADQQRqEOgQDAILIAJBQGskAA8LIAEoAjAQkA0hBCAHQQhqQeDvzgApAwAiCjcCACAHQdjvzgApAwAiCzcCACACQQhqIAo3AwAgBiAFKQIANwIAIAZBCGogBUEIaigCADYCACACQQE6ACggAiABNgIgIAIgBDYCJCACQQE6ADkgAiALNwMAIAIgAS8AOzsAOyABLQA4IQQgAiABLQA9OgA9IAIgBDoAOCACQQE6ADogA0EMaiACEL0dIAIQ5CALIABBOGohAAwACwALygcCA38BfiMAQTBrIgQkAAJAAkAgAgRAIAEoAkQiBkUEQCAAQQQ6AAAMAwsgBEEcaiAGIAIgASgCSCgCNBEEACAEKAIcQYCAgIB4RgRAIABBBDoAAAwDCyAEKAIkQRhsIQYgBCgCICECAkACQAJAA0AgBkUEQCAAQQQ6AAAMBgsgAyABLQBNRXEhBQJAAkACQCACLQAQRQRAIAVFDQEgBEEoaiABQc6EzABBARCBDiAELQAoQQRGDQEgBCkDKCIHQv8Bg0IEUQ0BIAAgBzcCAAwJCwJAIAVFDQAgBEEoaiABQc6EzABBARCBDiAELQAoQQRGDQAgBCkDKCIHQv8Bg0IEUQ0AIAAgBzcCAAwJCwJAAkACQAJAAkAgAigCCCIFRQ0AIARBKGogASAFEJQWIAQtAChBBEYNACAEKQMoIgdC/wGDQgRSDQELIARBKGogAUGPjswAQQIQgQ4gBC0AKEEERwRAIAQpAygiB0L/AYNCBFINAgsgBEEQaiACEOoJIARBKGogASAEKAIQIAQoAhQQgQ4gBC0AKEEERwRAIAQpAygiB0L/AYNCBFINAwsgAigCDCIFQQNJDQMgBEEoaiABIAVBAmsQlBYgBC0AKEEERg0DIAQpAygiB0L/AYNCBFENAyAAIAc3AgAMDAsgACAHNwIADAsLIAAgBzcCAAwKCyAAIAc3AgAMCQsgBEEoaiABQZGOzABBAhCBDgJAAkAgBC0AKEEERwRAIAQpAygiB0L/AYNCBFINAQsgAS0ATQ0DIARBKGogARCADiAELQAoQQRGDQMgBCkDKCIHQv8Bg0IEUg0BDAMLIAAgBzcCAAwJCyAAIAc3AgAMCAsCQCACKAIIIgVFDQAgBEEoaiABIAUQlBYgBC0AKEEERg0AIAQpAygiB0L/AYNCBFINAgsgBEEoaiABQY2OzABBAhCBDiAELQAoQQRHBEAgBCkDKCIHQv8Bg0IEUg0ECyAEQQhqIAIQ6gkgBEEoaiABIAQoAgggBCgCDBCBDiAELQAoQQRHBEAgBCkDKCIHQv8Bg0IEUg0FCwJAIAIoAgwiBUUNACAEQShqIAEgBRCUFiAELQAoQQRGDQAgBCkDKCIHQv8Bg0IEUg0GCyAEQShqIAEQ6w0gBC0AKEEERg0AIAQpAygiB0L/AYNCBFENACAAIAc3AgAMBwsgAkEYaiECIAZBGGshBgwBCwsgACAHNwIADAQLIAAgBzcCAAwDCyAAIAc3AgAMAgsgACAHNwIADAELIABBBDoAAAwBCyAEQRxqEIEbCyAEQTBqJAALpQcBCX8jAEEQayIEJAAgACgCCCEIIABBADYCCCAEIAA2AgAgBCAINgIMIAAoAgQhAwJAA0AgAyECIAEgCEYEQCAIIQEMAgsgAkE4aiEDIAFBAWohASACEKAVDQALIAIQyQZBASEJCyABQThsIQIDQAJAIAEgCEcEQCAAKAIEIgMgAmoiBxCgFUUEQCAHEMkGIAlBAWohCQwCCyADIAIgCUFIbGpqIAdBOBDvJBoMAQsgBCAINgIEIAQgCTYCCCAEEL0OIAAoAgQiCCAAKAIIQThsaiEJA0ACQAJAAkACQAJAAkACQAJAIAkgCCIBRwRAIAFBOGohCCABKAIAIgBBCUYNAQJAIABBAWsOCAkIBwYFCgQDAAsgASgCDCEAQQAhBiABQQA2AgwgBCAANgIMIAQgAUEEajYCAEEAIQNBACECAkADQCAAIAJGBEAgACECDAILIAJBAWohAiABKAIIIgcgA2ohBSADQcgAaiEDIAUpAwAgBUFAay0AABCBGA0ACyADIAdqQcgAaxC0EkEBIQYLIAJByABsIQMDQAJAIAAgAkcEQCABKAIIIgcgA2oiBSkDACAFQUBrLQAAEIEYRQRAIAUQtBIgBkEBaiEGDAILIAcgAyAGQbh/bGpqIAVByAAQ7yQaDAELIAQgADYCBCAEIAY2AgggBBDADiABQRxqEIQeDAsLIANByABqIQMgAkEBaiECDAALAAsgBEEQaiQADwsgAUEIahDqAwwHCyABQQA6ACQMBgsgAUEEahCTJQwFCyABQRBqEIQeDAQLIAEoAgQQ8AIMAwsgAUEQaiEAIAEoAghFBEAgABDCGQwDCyAAEMEZDAILIAEoAgwhAEEAIQYgAUEANgIMIAQgADYCDCAEIAFBBGo2AgBBACEDQQAhAgJAA0AgACACRgRAIAAhAgwCCyACQQFqIQIgASgCCCIHIANqIQUgA0HQAGohAyAFKQMAQgFWDQAgBUHIAGotAABFDQALIAMgB2pB0ABrELMSQQEhBgsgAkHQAGwhAwNAAkAgACACRwRAAkAgASgCCCIHIANqIgUpAwBCAVYNACAFQcgAai0AAEUNACAFELMSIAZBAWohBgwCCyAHIAMgBkGwf2xqaiAFQdAAEO8kGgwBCyAEIAA2AgQgBCAGNgIIIAQQvw4gAUEcahCEHgwDCyADQdAAaiEDIAJBAWohAgwACwALIAFBCGoQnQgMAAsACyACQThqIQIgAUEBaiEBDAALAAvnBwIEfwF+IwBBkAFrIgIkAAJAAkACQAJAAkACQAJ/AkAgAUEoaiIEEJALIgMEQCADKAIAQQtGDQELIAJBAToAMiACIAEtAJgDOgAxIAIgAS0AngM6ADcgAiABKQGCAzcAGyACIAEvAZYDOwAvIAIgASgBmgM2ADMgAiABQYoDaiIDKQEANwAjIAIgAUGSA2oiBSgBADYAKyACQdEAaiABQZcDaikAADcAACACQcwAaiAFKQEANwIAIAJBxABqIAMpAQA3AgAgAiABKQGCAzcCPCABQYABaiACQRtqELsGIAIgATYCOCAEEJALIgNFBEAgASgC2AIhASACQQA6AHggASABIAJB+ABqEMMQIQMMBwsCfwJAAkACQEEQIAMoAgBBAmsiAyADQSNPGyIDQRlrDgMCAQIACyADQSJHDQAgASABKQNANwN4IAEoAiggAUElNgIoQSRGBEAgASgCLCEDDAoLQcC/zABBKEHIv8sAELwSAAsgAkHgAGogARCTCSACKQNgIgZCAlIEQCAGUARAIAIpA2ghBiACKAJ0IQMgAigCcCEEIAJBBzoAeCABIAQgAyACQfgAaiIBEKEVIAIgAzYChAEgAiAENgKAASACIAY3A3ggARDxEiEDQQAMAwsgAkHoAGoQrxYhA0EADAILIAIoAmghA0EBDAELIAIgARCGASACKAIEIQMgAigCAAsNBiACQThqEKoeQQAMAQsgASgCKCEDIAFBJTYCKCABIAEpA0A3A3ggAkHEAGogAUE0aikCADcCACACQcwAaiABQTxqKAIANgIAIAIgASkCLDcCPCACIAM2AjggAkE4ahDiCCACQRBqIAEQsgUgAigCFCEDIAIoAhANAiACIAM2AngCQCAEEJALIgUEQCAFKAIAQQxGDQELIAJBQGsgBBC5CSACQQhqIAQQmBAgAkH4ucsANgI8IAJBNDoAOCACKAIIIAIoAgwgAkE4ahDDECEDIAQQkAsiBEUNBSAEKAIAQSRGDQIMBQsgASgCKCEEIAFBJTYCKCABIAEpA0A3A3ggAkHEAGogAUEsaiIBQQhqKQIANwIAIAJBzABqIAFBEGooAgA2AgAgAiABKQIANwI8IAIgBDYCOCACQThqEOIIQQELIQEgACADNgIEIAAgAToAAAwFCyABIAEpA0A3A3ggASgCKCABQSU2AihBJEcNASABIAEoAiwQ8gkMAgsgAEECOgAAIAAgAzYCBAwDC0HAv8wAQShBuL/LABC8EgALIABBAjoAACAAIAM2AgQgAkH4AGoQjSEMAQsgAEECOgAAIAAgAzYCBCACQThqEKoeCyACQZABaiQAC/kHAgR/AX4jAEGQAWsiAiQAAkACQAJAAkACQAJAAn8CQCABQShqIgQQ8woiAwRAIAMoAgBBC0YNAQsgAkEBOgAyIAIgAS0AwAI6ADEgAiABLQDGAjoANyACIAEpAaoCNwAbIAIgAS8BvgI7AC8gAiABKAHCAjYAMyACIAFBsgJqIgMpAQA3ACMgAiABQboCaiIFKAEANgArIAJB0QBqIAFBvwJqKQAANwAAIAJBzABqIAUpAQA3AgAgAkHEAGogAykBADcCACACIAEpAaoCNwI8IAQgAkEbahC7BiACIAE2AjggBBDzCiIDRQRAIAEoAoACIQEgAkEAOgB4IAEgASACQfgAahDDECEDDAcLAn8CQAJAAkBBECADKAIAQQJrIgMgA0EjTxsiA0EZaw4DAgECAAsgA0EiRw0AIAEgASkD4AI3A5gDIAEoAsgCIAFBJTYCyAJBJEYEQCABKALMAiEDDAoLQcC/zABBKEHIv8sAELwSAAsgAkHgAGogARCOCSACKQNgIgZCAlIEQCAGUARAIAIpA2ghBiACKAJ0IQMgAigCcCEEIAJBBzoAeCABIAQgAyACQfgAaiIBEPsUIAIgAzYChAEgAiAENgKAASACIAY3A3ggARDxEiEDQQAMAwsgAkHoAGoQrxYhA0EADAILIAIoAmghA0EBDAELIAIgARCHASACKAIEIQMgAigCAAsNBiACQThqEIEdQQAMAQsgASgCyAIhAyABQSU2AsgCIAEgASkD4AI3A5gDIAJBxABqIAFB1AJqKQIANwIAIAJBzABqIAFB3AJqKAIANgIAIAIgASkCzAI3AjwgAiADNgI4IAJBOGoQ4AggAkEQaiABEL0FIAIoAhQhAyACKAIQDQIgAiADNgJ4AkAgBBDzCiIFBEAgBSgCAEEMRg0BCyACQUBrIAQQ6wwgAkEIaiAEEOAPIAJB+LnLADYCPCACQTQ6ADggAigCCCACKAIMIAJBOGoQwxAhAyAEEPMKIgRFDQUgBCgCAEEkRg0CDAULIAEoAsgCIQQgAUElNgLIAiABIAEpA+ACNwOYAyACQcQAaiABQcwCaiIBQQhqKQIANwIAIAJBzABqIAFBEGooAgA2AgAgAiABKQIANwI8IAIgBDYCOCACQThqEOAIQQELIQEgACADNgIEIAAgAToAAAwFCyABIAEpA+ACNwOYAyABKALIAiABQSU2AsgCQSRHDQEgASABKALMAhDrCQwCCyAAQQI6AAAgACADNgIEDAMLQcC/zABBKEG4v8sAELwSAAsgAEECOgAAIAAgAzYCBCACQfgAahC+IAwBCyAAQQI6AAAgACADNgIEIAJBOGoQgR0LIAJBkAFqJAALswcBAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkBBByAAKAIAIgFBDGsiAiACQSZPG0EBaw4kAAECGwMEBQYHCAkKCwwNDg8QERIYGxsTFBgVFh0bGx0XHRkaGAsgAEEEahCdEiAAKAIEIAAoAggQ0BoPCyAAQQRqEOYeDwsgAEEIahCMHQ8LIABBDGoQzCAPCyAAQQRqEMwgIABBCGoQzCAPCwJAAkACQAJAAkACQAJAAkACQAJAAkACQCABDgwAAQIDBAUGBwgJCwoLCyAAQQhqEJMfDAoLIABBCGoQ8RUMCQsgAEEIahCpGQwICyAAQQRqEMwgDAcLIABBBGoQnhMMBgsgAEEEahDOIAwFCyAAQQRqEM4gDAQLIABBBGoQzCAMAwsgAEEEahDOIAwCCyAAQQRqEMYhDAELAkACQCAAKAIEDgIAAQILIABBCGoQ/BkMAQsgAEEIahD9GQsgAEE4ahDMIA8LIABBCGoQ8RUPCyAAQQhqEKkZDwsgAEEEahDMICAAQQhqEMwgIABBDGoQzCAPCyAALQAYQQVGBEAgAEEQahDMIAsgAEEEahDoHiAAKAIoELogDwsgAEEQahDMICAAKAIEQYCAgIB4RwRAIABBBGoQ6B4LIAAoAiAQuiAPCyAAQQRqEOkeDwsgACkDCBDYDw8LAkACQAJAAkAgACgCCA4GAA4OAQIDEgsgACkDECAAKQMgEJIiDwsgACkDIBDkHg8LIAApAxggACgCIBClIg8LDA4LIABBBGoQtCAPCyAAQQRqEMwgIAAoAhgQuiAgACgCCCIAELQgIABBIEEEEIUODwsgAEEEahDeFSAAKAIEIAAoAggQ8RoCQCAAKAIQIgEoAgBBgICAgHhHBEAgARDqHgwBCyABQQRqEMwgCyABQRhBBBCFDiAAKAIgEMEXIABBJGoQlB8PCyAAQQhqEOobDwsgAEEMahCWHw8LIABBCGoQ3xUPCyAAKQMIIAApAxgQkSIPCyAAKAIEIgBBQGsQnBIgAEH8AGoQ0wkgACgCfCAAQYABaigCABDyGiAAKAJ4ELogIABBkAFqEOMeIAAtADxBBkcEQCAAQRBqEJwSCyAAQaABQQgQhQ4PCyAAQQRqEOMeDwsgAEEEahDGIQsPCyAAKQMIENgPDwsgAEEEahCeEw8LIABBBGoQzCAPCyAAKQMQENgPIAApAxgQ2A8PCyAAQQRqEM4gC7MHAQJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQQcgACgCACIBQQxrIgIgAkEmTxtBAWsOJAABAhsDBAUGBwgJCgsMDQ4PEBESGBsbExQYFRYdGxsdFx0ZGhgLIABBBGoQnRIgACgCBCAAKAIIENAaDwsgAEEEahDmHg8LIABBCGoQ/h0PCyAAQQxqEOsdDwsgAEEEahDrHSAAQQhqEOsdDwsCQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAQ4MAAECAwQFBgcICQsKCwsgAEEIahDeHwwKCyAAQQhqEIYWDAkLIABBCGoQxhkMCAsgAEEEahDrHQwHCyAAQQRqELwTDAYLIABBBGoQ9yAMBQsgAEEEahD3IAwECyAAQQRqEOsdDAMLIABBBGoQ9yAMAgsgAEEEahDaIQwBCwJAAkAgACgCBA4CAAECCyAAQQhqEKQaDAELIABBCGoQpRoLIABBOGoQ6x0PCyAAQQhqEIYWDwsgAEEIahDGGQ8LIABBBGoQ6x0gAEEIahDrHSAAQQxqEOsdDwsgAC0AGEEFRgRAIABBEGoQ6x0LIABBBGoQ6B4gACgCKBC6IA8LIABBEGoQ6x0gACgCBEGAgICAeEcEQCAAQQRqEOgeCyAAKAIgELogDwsgAEEEahDpHg8LIAApAwgQ2A8PCwJAAkACQAJAIAAoAggOBgAODgECAxILIAApAxAgACkDIBCSIg8LIAApAyAQ5B4PCyAAKQMYIAAoAiAQ2RgPCwwOCyAAQQRqELQgDwsgAEEEahDrHSAAKAIYELogIAAoAggiABC0ICAAQSBBBBCFDg8LIABBBGoQ3hUgACgCBCAAKAIIEPEaAkAgACgCECIBKAIAQYCAgIB4RwRAIAEQ6h4MAQsgAUEEahDrHQsgAUEYQQQQhQ4gACgCIBDBFyAAQSRqEN8fDwsgAEEIahCkHA8LIABBDGoQ2x8PCyAAQQhqEN8VDwsgACkDCCAAKQMYEJEiDwsgACgCBCIAQUBrEJwSIABB/ABqENMJIAAoAnwgAEGAAWooAgAQ8hogACgCeBC6ICAAQZABahDjHiAALQA8QQZHBEAgAEEQahCcEgsgAEGgAUEIEIUODwsgAEEEahDjHg8LIABBBGoQ2iELDwsgACkDCBDYDw8LIABBBGoQvBMPCyAAQQRqEOsdDwsgACkDEBDYDyAAKQMYENgPDwsgAEEEahD3IAunBwECfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQEEHIAAoAgAiAUEMayICIAJBJk8bQQFrDiQAAQIbAwQFBgcICQoLDA0ODxAREhgbGxMUGBUWHRsbHRcdGRoYCyAAQQRqEJ0SIAAoAgQgACgCCBDQGg8LIABBBGoQ0QcgACgCBCAAKAIIEN8aDwsgACkDCCAALQAcENYbIAAoAiAQuBYPCyAAQQxqEO4gDwsgAEEEahDuICAAQQhqEO4gDwsCQCABQQtHBEAgABCuCwwBCwJAAkAgACgCBA4CAAECCyAAQQhqEKsaDAELIABBCGoQrBoLIABBOGoQ7iAPCyAAQQhqEIgWDwsgAEEIahDMGQ8LIABBBGoQ7iAgAEEIahDuICAAQQxqEO4gDwsgAC0AGEEFRgRAIABBEGoQ7iALIABBBGoQ6B4gACgCKBC6IA8LIABBEGoQ7iAgACgCBEGAgICAeEcEQCAAQQRqEOgeCyAAKAIgELogDwsgAEEEahDpHg8LIAApAwgQ2A8PCwJAAkACQAJAIAAoAggOBgAODgECAxILIAApAxAgACkDIBCSIg8LIAApAyAQ5B4PCyAAKQMYIAAoAiAQ2RgPCwwOCyAAQQRqELQgDwsgAEEEahDuICAAKAIYELogIAAoAggiABC0ICAAQSBBBBCFDg8LIABBBGoQ3hUgACgCBCAAKAIIEPEaAkAgACgCECIBKAIAQYCAgIB4RwRAIAEQ6h4MAQsgAUEEahDuIAsgAUEYQQQQhQ4gACgCIBDBFyAAQSRqENEfDwsgACkDCCAALQAcENYbIAAoAiAiABDtHiAAQQxqEI8GIAAoAgwgAEEQaigCABDyGiAAQTBqENkfIAAoAjQQwRcgACgCOBC6ICAAQRhqENwTIAAoAhggAEEcaigCABDQGiAAQcAAQQQQhQ4PCyAAQQxqENkfDwsgAEEIahDqHw8LIAApAwggACkDGBCRIg8LIAAoAgQiAEFAaxC1EiAAQfwAahDTCSAAKAJ8IABBgAFqKAIAEPIaIAAoAngQuiAgAEGQAWoQ4x4gAC0APEEGRwRAIABBEGoQtRILIABBoAFBCBCFDg8LIABBBGoQ4x4PCyAAQQRqEN0hCw8LIAApAwgQ2A8PCyAAQQRqEL8TDwsgAEEEahDuIA8LIAApAxAQ2A8gACkDGBDYDw8LIABBBGoQgSELhQ8BDH8jAEFAaiIFJAAgBUEoaiELIAVBIGohDCAFQRhqIQ0DQAJAAkACQAJAIAFBIU8EQCADRQRAIAAhAiMAQRBrIgMkACABQQF2QQFrIQADQCAAQX9GBEACQCABIQADQCAAQQFNDQEgAiABIABBAWsiAEGUlMQAEJ4JIANBCGogACACIAFBxLLLABC4FyADKAIIIAMoAgxBABCfBgwACwALBSACIAEgABCfBiAAQQFrIQAMAQsLIANBEGokAAwCCyAAIAFBA3YiCEHEAWxqIQYgACAIQfAAbGohByADQQFrIQMCfyABQcAATwRAIAAgByAGIAgQ2ggMAQsgACAAKAIEIgkgBygCBCIOSSAAKAIAIgggBygCACIKSSAIIApGGyIPIAkgBigCBCIQSSAIIAYoAgAiCUkgCCAJRhtHDQAaIAYgByAPIA4gEEkgCSAKSyAJIApGG3MbCyAAa0EcbiEGIAJFDQIgAigCBCAAIAZBHGxqIgcoAgRJIAIoAgAiCCAHKAIAIgdJIAcgCEYbQQFGDQIgACABIAZBtLHLABCeCSAFIABBHGoiAjYCDCALIABBNGooAgA2AgAgDCAAQSxqKQIANwMAIA0gAEEkaikCADcDACAFIAApAhw3AxAgBUEANgI8IAUgAEE4aiIGNgI4IAUgAjYCMCAAIAFBHGwiAmohByAFIAVBEGo2AjQMAwsjAEHgCmsiAyQAAkAgAUECSQ0AQQEhByAAIAFBAXYiCkEcbCIEaiECIANBEGoiBiAEaiEEAkAgAUEITwRAIAAgBhD2AyACIAQQ9gNBBCEHDAELIANBKGogAEEYaigCADYCACADQSBqIABBEGopAgA3AwAgA0EYaiAAQQhqKQIANwMAIAMgACkCADcDECAEIAIpAgA3AgAgBEEIaiACQQhqKQIANwIAIARBEGogAkEQaikCADcCACAEQRhqIAJBGGooAgA2AgALIANCgICAgCA3A9gKIAMgCq1CIIY3A9AKQQAgB2shCyABIAprIQwgACAHQRxsIgJqIQ0gA0EQaiACaiEOA0AgA0EIaiADQdAKahCnESADKAIIRQRAIARBHGshCCAAIAFBHGxBHGsiB2ohBiAHIANBEGoiAmohBwNAIAoEQCAAIAQgAiAEKAIEIAIoAgRJIAQoAgAiCSACKAIAIgtJIAkgC0YbIgsbIgkpAgA3AgAgAEEIaiAJQQhqKQIANwIAIABBEGogCUEQaikCADcCACAAQRhqIAlBGGooAgA2AgAgBiAIIAcgBygCBCAIKAIESSAHKAIAIgkgCCgCACIMSSAJIAxGGyIMGyIJKQIANwIAIAZBCGogCUEIaikCADcCACAGQRBqIAlBEGopAgA3AgAgBkEYaiAJQRhqKAIANgIAIAQgC0EcbGohBCAIIAxBZGxqIQggDEEcbCAHakEcayEHIAIgC0EBc0EcbGohAiAKQQFrIQogBkEcayEGIABBHGohAAwBBSAIQRxqIQYgAUEBcQR/IAAgAiAEIAIgBkkiCBsiASkCADcCACAAQRhqIAFBGGooAgA2AgAgAEEQaiABQRBqKQIANwIAIABBCGogAUEIaikCADcCACAEIAIgBk9BHGxqIQQgAiAIQRxsagUgAgsgBkYgBCAHQRxqRnENBBCpFQALAAsACyALIAwgCiADKAIMIgIbIgYgByAGIAdLG2ohCCANIAJBHGwiCWohAiAJIA5qIQYgA0EQaiAJaiEJA0AgCEUNASAGIAIpAgA3AgAgBkEYaiACQRhqKAIANgIAIAZBEGogAkEQaikCADcCACAGQQhqIAJBCGopAgA3AgAgCSAGEJkGIAhBAWshCCACQRxqIQIgBkEcaiEGDAALAAsACyADQeAKaiQACyAFQUBrJAAPCyABIAZNDQEgACABIAZBtLHLABCeCSAFIABBHGoiBzYCDCALIABBNGooAgA2AgAgDCAAQSxqKQIANwMAIA0gAEEkaikCADcDACAFIAApAhw3AxAgBUEANgI8IAUgAEE4aiIGNgI4IAUgBzYCMCAAIAFBHGwiB2ohCCAFIAVBEGo2AjQDQCAGIAhPBEACQCAFKAIMIAdqQRxrIQcDQCAGIAdGDQEgACAFQQxqIAVBMGoQkAggBSgCOCEGDAALAAsFIAAgBUEMaiAFQTBqEJAIIAUoAjghBgwBCwsgBSAFKAI0NgI4IAAgBUEMaiAFQTBqEJAIIAAgASAFKAI8IgZBxLHLABCeCSAAIAYgAiADIAQQrwIgASAGQX9zaiEBIAAgBkEcbGoiAkEcaiEADAILA0AgBiAHSQRAIAAgBUEMaiAFQTBqEJEIIAUoAjghBgwBCwsgBSgCDCACakEcayECA0AgAiAGRwRAIAAgBUEMaiAFQTBqEJEIIAUoAjghBgwBCwsgBSAFKAI0NgI4IAAgBUEMaiAFQTBqEJEIIAAgASAFKAI8IgJBxLHLABCeCSABIAJBAWoiAkkEQCACIAFB1LHLABCIDQAFIAUgASACazYCBCAFIAAgAkEcbGo2AgBBACECIAUoAgQhASAFKAIAIQAMAgsACwsAC9cGAgp/AX4jAEEQayIMJAACQAJAAkACQAJAAkACQAJAAkACQCAEQRBPBEAgBkEBayEPIAEoAgQhDSABKAIARQRAIAZFDQkgBiANayEIIAEpAwghESABKAIQIQtBACECQQAhAQNAIAIhCSABIgcgBmoiASAESw0MIAcgD2oiCiAETw0DQQAhAiARIAMgCmoxAACIQgGDUA0AIAsgCSAJIAtJGyICIAYgAiAGSxshECADIAdqIQogAiEBAn8CQANAAkAgASAQRgRAIAshAQwBCyABIAdqIARPDQggASAFai0AACABIApqLQAARw0CIAFBAWohAQwBCwsCQAJAA0AgASAJTQ0CIAEgBk8NCiABIAdqIgIgBE8NASABIAVqLQAAIAEgCmotAABGBEAgAUEBayEBDAELCyAIIQIgDQwDCyACIARB1MHBABCHDQALIAYgCU0NCCAEIAcgCWoiCksEQCAIIQIgDSAFIAlqLQAAIAMgCmotAABHDQIaDA4LIAogBEH0wcEAEIcNAAtBACECIAEgC2tBAWoLIAdqIQEMAAsACyAGRQ0IIAEoAhAiAiAGIAIgBksbIQkgASkDCCERIAJBAWsgBk8hC0EAIQEDQCAEIAEiByAGaiIBSQ0LIAcgD2oiCCAETw0IIBEgAyAIajEAAIhCAYNQDQAgAyAHaiEIIAIhAQJAA0AgASAJRgRAIAIhAQNAIAFFDQ4gAUEBayEBIAsNCyABIAdqIgggBE8NAyABIAVqLQAAIAMgCGotAABGDQALIAcgDWohAQwDCyABIAdqIARPDQggASAFai0AACABIAhqLQAARgRAIAFBAWohAQwBCwsgByACayABakEBaiEBDAELCyAIIARBxMLBABCHDQALIAxBCGogASgCKCABKAIsIAMgBCAFIAYQhAkgDCgCDCEHIAwoAgghDgwJCyAKIARBpMHBABCHDQALIAQgAiAHaiIAIAAgBEkbIARBtMHBABCHDQALIAEgBkHEwcEAEIcNAAsgCSAGQeTBwQAQhw0ACyAEIAIgB2oiACAAIARJGyAEQaTCwQAQhw0ACyABIAZBtMLBABCHDQALIAggBEGUwsEAEIcNAAsLQQEhDgsgACAONgIAIAAgBzYCBCAMQRBqJAALlgcCCH8BfiMAQeAAayIEJAAgAUEoaiEFAkACQAJAAkACQAJAAkACQAJAAkAgAkUEQCAFEN4YIQMgBRDzCiICRQRAIAEoAoACIQEgBEEAOgAgIAEgASAEQSBqEMMQIQJBASEGDAsLIAIoAgBBJEYEQCABIAEpA+ACNwOYAyABKALIAiABQSU2AsgCQSRHDQIgASgCzAIhAkEBIQYMCwsgASgCyAIhAiABQSU2AsgCIAEgASkD4AI3A5gDIARBLGogAUHUAmopAgA3AgAgBEE0aiABQdwCaigCADYCACAEIAEpAswCNwIkIAQgAjYCICAEQSBqEOAICwJAIAUQ8woiAkUNACACKAIAQRRHDQAgAi0ABEENRg0CCyADIAEoApwDIgIgAiADSxshCCADIAIgAiADSRshAiABLQC/AiELIAEtAL0CIQkgAS0AsQIhCiABLQCrAiEGIAUQ8woiBwRAIAcoAgBBCkYNAwsgBRDzCiIHBEAgBygCAEEMRg0DCyAFEPMKIgdFDQIgBygCACIHQQJrQSJNIAdBPnFBDkZxDQIgBRCiGQ0CAkAgBRDzCiIHRQ0AIAcoAgBBEEcNACAKRQ0ECyAJQQBHIQYgCUUNByAKRQ0EDAcLQcC/zABBKEHA28sAELwSAAsgBEEYaiAFEOAPIAQoAhwhAiAEKAIYIARBNjoAICACIARBIGoQwxAhAkEBIQYgBRDzCiIDRQ0HIAMoAgBBJEcNByABIAEpA+ACNwOYAyABKALIAiABQSU2AsgCQSRHDQMgASABKALMAhDrCQwHCyAKRQ0AIAlBAEchBgwECyAGRQ0CIARBKDoAICABIAggAiAEQSBqEPsUDAILIARBEGogBRDgDyAEKAIUIQIgBCgCECEFIARB0wA6ACAgASAFIAIgBEEgahD7FAwDC0HAv8wAQShB0NvLABC8EgALQQAhBkGUi8wAQQUQ6xQhDCAEQQA2AjAgBCACNgIsIAQgCDYCKCAEQQA6ADQgBCAMNwMgIARBIGoQxRAhAgwCCyALRSAGcg0AIARB0QA6ACAgASAIIAIgBEEgahD7FAsgBEEIaiABEHZBASEGIAQoAgwhAiAEKAIIDQAgASgCnAMhASAEIAI2AiQgBEEiNgIgIAQgAyABIAEgA0kbNgIsIAQgAyABIAEgA0sbNgIoIARBIGoQ2xghAkEAIQYLIAAgAjYCBCAAIAY2AgAgBEHgAGokAAuDBwIIfwF+IwBB4ABrIgQkACABQShqIQUCQAJAAkACQAJAAkACQAJAAkACQCACRQRAIAUQ/BghAyAFEJALIgJFBEAgASgC2AIhASAEQQA6ACAgASABIARBIGoQwxAhAkEBIQYMCwsgAigCAEEkRgRAIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRw0CIAEoAiwhAkEBIQYMCwsgASgCKCECIAFBJTYCKCABIAEpA0A3A3ggBEEsaiABQTRqKQIANwIAIARBNGogAUE8aigCADYCACAEIAEpAiw3AiQgBCACNgIgIARBIGoQ4ggLAkAgBRCQCyICRQ0AIAIoAgBBFEcNACACLQAEQQ1GDQILIAMgASgCfCICIAIgA0sbIQggAyACIAIgA0kbIQIgAS0AlwMhCyABLQCVAyEJIAEtAIkDIQogAS0AgwMhBiAFEJALIgcEQCAHKAIAQQpGDQMLIAUQkAsiBwRAIAcoAgBBDEYNAwsgBRCQCyIHRQ0CIAcoAgAiB0ECa0EiTSAHQT5xQQ5GcQ0CIAUQ1hkNAgJAIAUQkAsiB0UNACAHKAIAQRBHDQAgCkUNBAsgCUEARyEGIAlFDQcgCkUNBAwHC0HAv8wAQShBwNvLABC8EgALIARBGGogBRCYECAEKAIcIQIgBCgCGCAEQTY6ACAgAiAEQSBqEMMQIQJBASEGIAUQkAsiA0UNByADKAIAQSRHDQcgASABKQNANwN4IAEoAiggAUElNgIoQSRHDQMgASABKAIsEPIJDAcLIApFDQAgCUEARyEGDAQLIAZFDQIgBEEoOgAgIAEgCCACIARBIGoQoRUMAgsgBEEQaiAFEJgQIAQoAhQhAiAEKAIQIQUgBEHTADoAICABIAUgAiAEQSBqEKEVDAMLQcC/zABBKEHQ28sAELwSAAtBACEGQZSLzABBBRDrFCEMIARBADYCMCAEIAI2AiwgBCAINgIoIARBADoANCAEIAw3AyAgBEEgahDFECECDAILIAYgC0VyDQAgBEHRADoAICABIAggAiAEQSBqEKEVCyAEQQhqIAEQdUEBIQYgBCgCDCECIAQoAggNACABKAJ8IQEgBCACNgIkIARBIjYCICAEIAMgASABIANJGzYCLCAEIAMgASABIANLGzYCKCAEQSBqENsYIQJBACEGCyAAIAI2AgQgACAGNgIAIARB4ABqJAAL7AYCBX8BfiMAQUBqIgckACAHQTBqIAIgBSAGIAUQ+hMCQCAHLQAwQQVHBEAgACAHKQMwNwIADAELIAcoAjQaAkACQCAFBEAgByAGQYCACHFFIgs6ACYgBkEDcUUEQCAGQYABcUUNAiABLQBNDQIgB0EwaiABEIAOIActADBBBEYNAiAHKQMwIgxC/wGDQgRRDQIgACAMNwIADAQLAkACQCABLQBNDQAgB0EwaiABEOsNIActADBBBEYNACAHKQMwIgxC/wGDQgRSDQELIAdBADoAJgwCCyAAIAw3AgAMAwsgBkEBcQRAIAEtAE0NAiAHQTBqIAEQ6w0gBy0AMEEERg0CIAcpAzAiDEL/AYNCBFENAiAAIAw3AgAMAwsgBkGAAXFFIAZBgIAQcXINASABLQBNDQEgB0EwaiABEIAOIActADBBBEYNASAHKQMwIgxC/wGDQgRRDQEgACAMNwIADAILAkAgBkHAAHFFDQAgAS0ATQ0AIAEgASgCLEEBajYCLAsgB0EAOgAnIAUhCQNAAkACQCAJRQRAIAdBMGogASACIAMgBiAIIAxCIIinEK8BIActADBBBEYNBCAHKQMwIgxC/wGDQgRSDQEMBAsgByAMNwI0IAcgCDYCMCAHQRhqIAQQ3RAgB0EoaiABIAMgBiAHQTBqIAcoAhggBygCHCAHQSdqIAdBJmoQuAMgBy0AKEEERwRAIAcpAygiDEL/AYNCBFINAQsCQCAEKAIAIgpBAkYiCA0AIAdBMGogASAEEOYHIActADBBBEYNACAHKQMwIgxC/wGDQgRSDQELIActACZFBEAgByALOgAmDAILIAEoAkRFDQEgB0EwaiABAn9BACAIDQAaIAdBEGogBEEMaigCABDMAiAHKAIUIgggCkUNABogBEEEaigCACIKIAggCCAKSRsLQQAQqAIgBy0AMEEERg0BIAcpAzAiDEL/AYNCBFENAQsgACAMNwIADAMLIActACcEQCABIAEoAixBAWs2AiwgB0EAOgAnCyAJQQFrIQkgB0EIaiAEEN0QIARBEGohBEEBIQggBykDCCEMDAALAAsgB0EwaiABIAMgBUUgBhCZDAJAIActADBBBEcEQCAHKQMwIgxC/wGDQgRSDQELIABBBDoAAAwBCyAAIAw3AgALIAdBQGskAAuKBwEFfyMAQYABayICJAACQCABQYCwA3NBgIDEAGtB/4+8f00EQCACQQA2AkQgAkEANgIkIAIgAUH//wNxIgU2AkggAiAFNgJMAkAgAUGA+ANxQYC4A0cEQCACQSRqIgNB3AAQqAsgA0H1ABCoCyACQQE2AmQgAkGgxMwANgJgIAJCATcCbCACQc0ANgJ8IAIgAkH4AGoiBTYCaCACIAJByABqNgJ4IAJB1ABqIgQgAkHgAGoiBhC+ECADIAIoAlgiASABIAIoAlxqEMUEIAIoAlQgARDHHCADQdwAEKgLIANB9QAQqAsgAkEBNgJkIAJBoMTMADYCYCACQgE3AmwgAkHNADYCfCACIAU2AmggAiACQcwAajYCeCAEIAYQvhAgAyACKAJYIgEgASACKAJcahDFBAwBCyACIAUgBUEKdGpBgLj/Gms2AlAgAkEkaiIBQdwAEKgLIAFB9QAQqAsgAkEBNgJkIAJBoMTMADYCYCACQgE3AmwgAkHNADYCfCACIAJB+ABqNgJoIAIgAkHQAGo2AnggAkHUAGogAkHgAGoQvhAgASACKAJYIgEgASACKAJcahDFBAsgAigCVCABEMccIAIgAkEkakEkEO8kGgwBCyACQQA2AiQgAkEANgJEIAJBJGoiAyABEKgLIAIgA0EkEO8kGgsgAkEEaiEFIAJBIGohBgNAAkACQCACKAIgIgFBCE8EQCACKAIEBEAgAigCBCEBIAIoAgghBCAFIQMMAwsgAUEISQ0BIAIoAghBBCABQQJ0EM0cDAELIAUhBCAGIQMgAQ0BCyACQYABaiQADwsCfwJAIAEEQCADIAFBAWs2AgAgBCgCACEDIAQgBEEEaiABQQJ0QQRrEPAkGiADQYABTwRAIAJBADYCJCADQYAQSQ0CIANBgIAESQRAIAIgA0EMdkHgAXI6ACQgAiADQQZ2QT9xQYABcjoAJUECIQRBAwwECyACIANBEnZB8AFyOgAkIAIgA0EGdkE/cUGAAXI6ACYgAiADQQx2QT9xQYABcjoAJUEDIQRBBAwDCyAAKAIIIgEgACgCAEYEQCAAEOkICyAAIAFBAWo2AgggACgCBCABaiADOgAADAMLQYjjxABBHUGo48QAELwSAAsgAiADQQZ2QcABcjoAJEEBIQRBAgshASAEIAJBJGoiBHIgA0E/cUGAAXI6AAAgACAEIAEQjxIMAAsAC7YHAQF/IwBB8ABrIg8kACAPIA02AgQgDyAMNgIAQQEhDQJAIAAgASACIAQQzggNACAAIAEgAiAFIAMgBiAHQQAQ4QINACAIQQRqIQcgCSAKQQN0aiEFIA9BPGohBiAIKAIEIQpBASEAA0AgBSAJRyEDIAUgCUYEQCADIQ0MAgsgACAJKAIEQQFqIgQgACAESxsiDCAAayEAIAlBCGohBANAIABFBEAgCSgCACIAKAIAIAsQxggEQAJAAkACQAJAIA5B/wFxQQFrDgIBAgALIA9BLGogCCgCABDLDiAPQSBqIgMgDygCMCIAIA8oAjRBAhCIBiAPQeQAakECNgIAIA9B3ABqQRE2AgAgD0EyNgJUIA8gCEEkajYCUCAPQQM2AjwgD0HYpssANgI4IA9CAzcCRCAPIA82AmAgDyADNgJYIA8gD0HQAGo2AkAgD0EUaiAPQThqEL4QIA8oAiAgDygCJBDHHCAPKAIsIAAQxxwgD0EQaiAPQRxqKAIANgIAIA8gDykCFDcDCAwCCyAPQewAakECNgIAIA9B5ABqQTI2AgAgD0HcAGpBMjYCACAPQQQ2AjwgD0HwpssANgI4IA9CBDcCRCAPQTI2AlQgDyAINgJYIA8gCEE8ajYCYCAPIAhBJGo2AlAgDyAPQdAAajYCQCAPIA82AmggD0EIaiAPQThqEL4QDAELIA9BxABqQQI2AgAgD0ECNgJUIA9BxKLLADYCUCAPQgI3AlwgD0EyNgI8IA8gBzYCOCAPIA9BOGo2AlggDyAPNgJAIA9BCGogD0HQAGoQvhALIA9BxABqIAtBHGovAQA7AQAgD0ECNgJUIA9B1KLLADYCUCAPQgE3AlwgD0EwNgIwIA8gCykCFDcCPCAPIA9BLGo2AlggDyAPQThqNgIsIA8gD0EIajYCOCABIA9B0ABqIAIoAhQRAgAhDSAPKAIIIA8oAgwQxxwMBAsgD0EsaiIJIAoQyw4gBiAAKAIAIgApAhQ3AgAgBkEIaiAAQRxqLwEAOwEAIA9BATYCVCAPQaDEzAA2AlAgD0IBNwJcIA9BMDYCJCAPIA9BIGo2AlggDyAJNgI4IA8gD0E4ajYCICABIA9B0ABqIAIoAhQRAgAgDygCLCAPKAIwEMccIAMhDQ0DIAxBAWohACAEIQkMAgsgD0EANgJgQQEhDSAPQQE2AlQgD0GQp8sANgJQIA9CBDcCWCABIA9B0ABqIAIoAhQRAgANAiAAQQFrIQAMAAsACwALIA9B8ABqJAAgDQvfBgEFfwJAAkACQAJAAkAgAEEEayIFKAIAIgdBeHEiBEEEQQggB0EDcSIGGyABak8EQCAGQQAgAUEnaiIIIARJGw0BAkACQCACQQlPBEAgAiADEI8FIgINAUEADwtBACECIANBzP97Sw0BQRAgA0ELakF4cSADQQtJGyEBAkAgBkUEQCABQYACSSAEIAFBBHJJciAEIAFrQYGACE9yDQEMCQsgAEEIayIGIARqIQgCQAJAAkACQCABIARLBEAgCEGUxs8AKAIARg0EIAhBkMbPACgCAEYNAiAIKAIEIgdBAnENBSAHQXhxIgcgBGoiBCABSQ0FIAggBxDNBSAEIAFrIgJBEEkNASAFIAEgBSgCAEEBcXJBAnI2AgAgASAGaiIBIAJBA3I2AgQgBCAGaiIDIAMoAgRBAXI2AgQgASACEMwEDA0LIAQgAWsiAkEPSw0CDAwLIAUgBCAFKAIAQQFxckECcjYCACAEIAZqIgEgASgCBEEBcjYCBAwLC0GIxs8AKAIAIARqIgQgAUkNAgJAIAQgAWsiA0EPTQRAIAUgB0EBcSAEckECcjYCACAEIAZqIgEgASgCBEEBcjYCBEEAIQNBACEBDAELIAUgASAHQQFxckECcjYCACABIAZqIgEgA0EBcjYCBCAEIAZqIgIgAzYCACACIAIoAgRBfnE2AgQLQZDGzwAgATYCAEGIxs8AIAM2AgAMCgsgBSABIAdBAXFyQQJyNgIAIAEgBmoiASACQQNyNgIEIAggCCgCBEEBcjYCBCABIAIQzAQMCQtBjMbPACgCACAEaiIEIAFLDQcLIAMQVSIBRQ0BIAEgAEF8QXggBSgCACIBQQNxGyABQXhxaiIBIAMgASADSRsQ7yQgABCOAw8LIAIgACABIAMgASADSRsQ7yQaIAUoAgAiA0F4cSIFIAFBBEEIIANBA3EiARtqSQ0DIAFBACAFIAhLGw0EIAAQjgMLIAIPC0GdmMQAQS5BzJjEABC8EgALQdyYxABBLkGMmcQAELwSAAtBnZjEAEEuQcyYxAAQvBIAC0HcmMQAQS5BjJnEABC8EgALIAUgASAHQQFxckECcjYCACABIAZqIgIgBCABayIBQQFyNgIEQYzGzwAgATYCAEGUxs8AIAI2AgAgAA8LIAALjAgCBn8BfiMAQcABayICJAACQAJAAkACQAJAAkACQAJAIAAoAgBBAWsOBwECAwcHBAUACyACIAApAwggACgCGBDXGyABIAIpAwAgAigCCEEAEMkFIABBIGogARCBIwwGCyACQTBqIAApAwgiCCAAKAIYIgYQ1xsgASACKQMwIAIoAjhBARDJBSAAKAIgIgUoAghBBnQhAyAFKAIEIQACQANAIAMiBEUNASAAKAIAIQcgA0FAaiEDIABBQGshAAJAIAdBAmsOAwABAAELCyACQSBqIAggBhDXGyABIAIpAyAgAigCKBDnEQsgAkHYAGpB4O/OACkDADcCACACQQA7AYIBIAJBADYCeCACQoCAgICAATcCcCACQQA6AGwgAkEANgJoIAJCgICAgMAANwJgIAJBADYCTCACQoCAgICAATcCRCACQdjvzgApAwA3AlAgAiABLwE8OwGAASACIAEoAjg2AnwgBARAIAJBEGogCCAGENcbIAJBxABqIAIpAxAgAigCGBDnEQsgAkHwAGohBCAFQQxqIAJBxABqIgAQsRQgBSAAELoUIAAgBUEYahCHHAJAIAIoAngiAARAIAFBDGogABDhICACQYQBaiACKAJ0IAIoAngQ6QcgAiACKAKEATYCmAEgAiACKAKIASIANgKQASACIAAgAigCjAFBBHQiA2oiBTYCnAEDQCADRQ0CIAJBxABqIAApAwAgACgCCBDnESADQRBrIQMgAEEQaiEADAALAAsgAkGQAWoiACACQcQAakEsEO8kGiABQRxqIAAQsxQgBBCUGwwGCyAC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ACgCBCIAQUBrEJwSIABB/ABqENMJIAAoAnwgAEGAAWooAgAQ8hogACgCeBC6ICAAQZABahDjHiAALQA8QQZHBEAgAEEQahCcEgsgAEGgAUEIEIUODwsgAEEEahDjHg8LIABBBGoQ2CELDwsgACkDCBDYDw8LIABBBGoQuhMPCyAAQQRqEPIgDwsgACkDEBDYDyAAKQMYENgPDwsgAEEEahD0IAvRBgIHfwN+IwBB0AJrIgIkACABKAIQIQYgAkGQAmpBBHIhBCABKAIEIQMgASgCDCEHAkACQANAIAMgB0cEQCABIANBIGoiBTYCBCACQagCaiADQRhqKQMANwMAIAJBoAJqIANBEGopAwA3AwAgAkGYAmogA0EIaikDADcDACACIAMpAwAiCTcDkAICQCAGLQAARSAJpyIDQQFLckUEQCACQZACahDTFwwBCyACQegBaiAEQRhqKAIANgIAIAJB4AFqIARBEGopAgA3AwAgAkHYAWogBEEIaikCADcDACACIAQpAgA3A9ABIANBBEcNAwsgBSEDDAELCyAAQRM2AgAMAQsgAkHMAGogAkHoAWooAgA2AgAgAkHEAGogAkHgAWopAwA3AgAgAkE8aiACQdgBaikDADcCACACIAIpA9ABNwI0IAIgAzYCMCACQSBqIAEoAhQiASkDACABQRBqKAIAENcbIAIoAighBiACKQMgIQkgAkHQAGoiASACQTBqEI4FIAJBEGogCSAGENcbIAJCADcD2AEgAkEAOgDkASACIAIoAhg2AuABIAIgAikDEDcD0AEgAikDQBD4FCEKIAJB0AFqIgcQxRAhBSACQbACakIANwMAIAJCADcDqAIgAiAKNwOgAiACQQA2ApgCIAJBGzYCkAIgAkGQAmoiCBDbGCEEIAEQ2xghASACQQA6AMwBIAIgATYCyAEgAkIANwPAASACIAU2ArgBIAJCADcDsAEgAkIANwOgASACIAQ2ApwBIAJBAjYCmAEgAkEBNgKQASADBEAgChD4FCELIAJB8AFqQgA3AwAgAkIANwPoASACIAs3A+ABIAJBADYC2AEgAkEbNgLQASACIAkgBhDXGyACQgA3A5gCIAJBADoApAIgAiACKAIINgKgAiACIAIpAwA3A5ACIAgQxRAhBSACQZABahDbGCEEIAcQ2xghAQsgAikDSCELIAJBADoAzAIg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IANBAmoiBCACTw0CIAEgBGosAABBv39MDQMLQoCAgICAwAALIQpCgICAgBAhCQsgACAKIAOthCAJhDcCBCAAQQE2AgAPCyAEQQFqIQMMAgsgA0EBaiEDDAELIAIgA00NAANAIAEgA2osAABBAEgNASACIANBAWoiA0cNAAsMAgsgAiADSw0ACwsgACACNgIIIAAgATYCBCAAQQA2AgALnAYBBH8jAEEQayIBJABB+MvPACgCACIABEAgAUEIaiAAQQRqEI4VQQEhAiABKAIMIQMCQCABKAIIIgAtAAANACAALQABDQAgAC0AAg0AIAAtAAMNACAALQAEDQAgAC0ABQ0AIAAtAAYNACAALQAHDQAgAC0ACA0AIAAtAAkNACAALQAKDQAgAC0ACw0AIAAtAAwNACAALQANDQAgAC0ADg0AIAAtAA8NACAALQAQDQAgAC0AEQ0AIAAtABINACAALQATDQAgAC0AFA0AIAAtABUNACAALQAWDQAgAC0AFw0AIAAtABgNACAALQAZDQAgAC0AGg0AIAAtABsNACAALQAcDQAgAC0AHQ0AIAAtAB4NACAALQAfDQAgAC0AIA0AIAAtACENACAALQAiDQAgAC0AIw0AIAAtACQNACAALQAlDQAgAC0AJg0AIAAtACcNACAALQAoDQAgAC0AKQ0AIAAtACoNACAALQArDQAgAC0ALA0AIAAtAC0NACAALQAuDQAgAC0ALw0AIAAtADANACAALQAxDQAgAC0AMg0AIAAtADMNACAALQA0DQAgAC0ANQ0AIAAtADYNACAALQA3DQAgAC0AOA0AIAAtADkNACAALQA6DQAgAC0AOw0AIAAtADwNACAALQA9DQAgAC0APg0AIAAtAD8NACAALQBADQAgAC0AQQ0AIAAtAEINACAALQBDDQAgAC0ARA0AIAAtAEUNACAALQBGDQAgAC0ARw0AIAAtAEgNACAALQBJDQAgAC0ASg0AIAAtAEsNACAALQBMDQAgAC0ATQ0AIAAtAE4NACAALQBPDQAgAC0AUA0AIAAtAFENACAALQBSDQAgAC0AUw0AIAAtAFQNACAALQBVDQAgAC0AVg0AIAAtAFcNACAALQBYDQAgAC0AWQ0AIAAtAFoNACAALQBbDQAgAC0AXA0AIAAtAF0NACAALQBeDQAgAC0AXw0AIAAtAGANACAALQBh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IAIoAggLIQAgAiABNgIIIAAgATYCDCABIAI2AgwgASAANgIIDwtB8MPPACgCACIBBEADQCAAQQFqIQAgASgCCCIBDQALC0Goxs8AQf8fIAAgAEH/H00bNgIAIAMgBE8NAEGgxs8AQX82AgALC9gFAQR/AkACQAJAAkACQAJAAkADQAJAQQghA0EEIQICQAJAAkACQAJAAkACQCAAKAIAIgAoAgBBAmsOEgABAgMGBwYGDwQJBgYFCgsMDQ4LIAAoAgRBgICAgHhGBEAgAEEIaiABEMsUIAEgAEEgahCbHCAAQRRqIAEQliQPCyAAQQRqIAEQyxQgASAAQRxqEJscIABBEGogARCWJA8LIABBEGoQ7hggASAAQShqENQdDwsgAEEQaiECAkAgAC0AREEERgRAIAIQ7hgMAQsgAiABEKIYCyABIABB0ABqENQdDwsgACgCDEE4bCEDIAAoAgghBEEAIQADQCAAIANGDQsCQAJAAkACQAJAAkACQAJAQQQgACAEaiICKAIAQQRrIgUgBUEHTxtBAWsOBgECAwQFBgALIAJBBGogARDLFCABIAJBGGoQ2B0gASACQRxqEJscDAYLIAJBBGogARDLFCABIAJBGGoQ2B0gASACQRxqEJscDAULIAJBEGogARCIJCABIAJBDGoQ2B0MBAsgAkEEaiABEIgkIAEgAkEQahDYHQwDCyACQTBqIAEQiCQgAiABEIgSDAILIAJBEGogARCIJCACQQRqIAEQyxQgASACQRxqENgdIAEgAkEgahCbHAwBCyACQQRqIAEQ0x0LIABBOGohAAwACwALIABBBGogARCPAyAAQQhqIAEQjwNBECEDQQwhAgsgACACaiABEI8DIAMhAgsgACACaiEADAELCyAAKAIMQThsIQIgACgCCCEAA0AgAkUNBiAAKAIAQQdHBEAgACABEOgNCyAAQTBqIAEQjwMgAkE4ayECIABBOGohAAwACwALIABBEGogARCrGw8LIABBEGogARCrGyABIABBQGsQ2R0gASAAQcQAahDZHQ8LIAAoAghBhICAgHhIDQIMAwsgASAAQShqENgdDwsgAEEIaiABEKIYCw8LIABBCGogARDDFAvfBQIEfwJ+IwBBwAFrIgUkACAFIAM2AgQgBSACNgIAIAEQ7QQhAUGwiMwAQQcQ6xQhCRCUEyAFQQA6AJwB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uBkMBgsgAEEIaiABEPYjDAULIABBCGogARD2IwwECwJAIAAoAgQNACAAKAIIIgMtABlBAWtB/wFxQQJJDQAgAyABEJAlCyAAQQxqIAEQ9iMMAwsgASAAKAIEIAAoAggQoRggAEEQaiABEPYjDAILIAEgACgCBCAAKAIIEKEYIABBEGogARD2IwwBCyAAQQhqIAEQ8AQLIAJBIGokAAunBQIEfwF+IwBB4ABrIgEkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIAQQFrDgoBAgMEBQYHCAkKAAsgAUEYaiICIABBIGopAwA3AwAgAUEQaiAAQRhqIgMpAwA3AwAgAUEIaiAAQRBqIgQpAwA3AwAgASAAKQMINwMAIAIQ/B4gAUE0aiADKQIANwIAIAFBLGogBCkCADcCACABIAApAgg3AiRBwABBCBD+GiIAQRo2AgAgACABKQIgNwIEIABBDGogAUEoaikCADcCACAAQRRqIAFBMGopAgA3AgAgAEEcaiABQThqKAIANgIADAoLIAFBKGogAEEIakEoEO8kGiABQRQ2AiAgAUEgahDbGCEADAkLIAFBKGogAEEIakEoEO8kGiABQRU2AiAgAUEgahDbGCEADAgLIAFBLGogAEEMaigCADYCACABQSM2AiAgASAAKQIENwIkIAFBIGoQ2xghAAwHCyABQSxqIABBDGopAgA3AgAgAUEwNgIgIAEgACkCBDcCJCABQSBqENsYIQAMBgsgAUEsaiAAQQxqKQIANwIAIAFBLDYCICABIAApAgQ3AiQgAUEgahDbGCEADAULIAFBLGogAEEMaikCADcCACABQS42AiAgASAAKQIENwIkIAFBIGoQ2xghAAwECyABQSxqIABBDGooAgA2AgAgAUErNgIgIAEgACkCBDcCJCABQSBqENsYIQAMAwsgAUEsaiAAQQxqKQIANwIAIAFBKTYCICABIAApAgQ3AiQgAUEgahDbGCEADAILIAFBLGogAEEMaikCADcCACABQS02AiAgASAAKQIENwIkIAFBIGoQ2xghAAwBCyAAKQIEIQUgAUExNgIgIAEgBTcCJCABQSBqENsYIQALIAFB4ABqJAAgAAuuBQEGfyMAQUBqIgUkAAJAIARFDQACQCABLQA8RQ0AIAEoAighCCABKAIMIQcgASgCCCEJIAEoAiwiCiEGA0AgBgRAIAggCSAHEJAHIAZBAWshBgwBBSABKAI4BEAgASABKAI0IAcgCmxqNgI0CyABQQA6ADwgASgCACABQQA2AgBFDQIgASABKAIEEMUDCwsLIAIoAgAiCgRAIAEgAigCBBDFAwsgASgCKCADIAQQkAcCQCABKAI4RQ0AQQAhByAFQQA2AjwgBUEANgIoIAUgAzYCNCAFIAMgBGo2AjhBACEIA0ACQCAFQSBqIAVBKGoQlA0gBSgCJCIGRQ0AIAUoAiAhCQJAAkAgBi0AAEEKaw4EAAMDAQMLIAlBAWohByAIQQFqIQgMAgsCQCAFKAIoBEAgBSgCMCEGDAELAkAgBSgCNCIGIAUoAjhGBEBBACEGDAELIAUgBkEBajYCNCAFIAUoAjwiB0EBajYCPAsgBSAGNgIwIAUgBzYCLCAFQQE2AigLIAhBAWohCAJAIAYEQCAGLQAAQQpGDQELIAlBAWohBwwCCyAJQQJqIQcgBUEYaiAFQShqEJQNDAELCyABIAEoAjAgCGo2AjAgBUEQaiAHIAMgBBCcDyAFKAIQIgkEQCAFKAIUIQNBACEGIAVBADsBMCAFIAk2AiggBSADIAlqNgIsQQAhAwNAAkAgBQJ/IAZB//8DcUUEQCAFQQhqIAVBKGoQlwggBSgCCARAIAUoAgwiBEH//wNNBEAgBS8BMCEGDAQLIARB/wdxQYC4f3IMAgsgAUEAIAEoAjQgCBsgA2o2AjQMBQtBAAsiBjsBMAsgA0EBaiEDDAALAAsgAyAEIAcgBEG4iMwAENMeAAsgCkUNACABIAIoAggQxQMLIABBBDoAACAFQUBrJAALrQUCBH8FfiMAQYABayIEJAAgAb0hCAJ/QQIgASABYg0AGiAIQv////////8HgyIMQoCAgICAgIAIhCAIQgGGQv7///////8PgyAIQjSIp0H/D3EiBRsiCkIBgyELIAhCgICAgICAgPj/AIMhCQJAAkAgDFAEQEEDIAlCgICAgICAgPj/AFENAxogCVBFDQFBBAwDCyAJUA0BC0KAgICAgICAICAKQgGGIApCgICAgICAgAhRIgcbIQpCAkIBIAcbIQlBy3dBzHcgBxsgBWohBSALUAwBCyAFQbMIayEFQgEhCSALUAshBiAEIAU7AXggBCAJNwNwIARCATcDaCAEIAo3A2AgBCAGOgB6An8CQAJAAkAgBkECayIHBEBBASEGQeSxzABB2oTMACAIQgBTIgUbQeSxzABBASAFGyACGyEFQQEgCEI/iKcgAhshAkEDIAdB/wFxIgcgB0EDTxtBAmsOAgMCAQsgBEEDNgIoIARBzJXLADYCJCAEQQI7ASBBASEFQQAhAkEBIQYgBEEgagwDCyAEQQM2AiggBEHYuMAANgIkIARBAjsBICAEQSBqDAILIARBIGogBEHgAGoiBiAEQQ9qIgcQigECQCAEKAIgRQRAIARB0ABqIAYgBxA9DAELIARB2ABqIARBKGooAgA2AgAgBCAEKQIgNwNQCyAEIAQoAlAgBCgCVCAELwFYIAMgBEEgahCxBSAEKAIEIQYgBCgCAAwBC0ECIQYgBEECOwEgIAMEQCAEQTBqQQE2AgAgBEEAOwEsIARBAjYCKCAEQf/SxAA2AiQgBEEgagwBC0EBIQYgBEEBNgIoIARBocXCADYCJCAEQSBqCyEDIAQgBjYCXCAEIAM2AlggBCACNgJUIAQgBTYCUCAAIARB0ABqENkDIARBgAFqJAALqQUBAn8jAEGgAWsiAyQAAkACQCACRQRAIANB9QBqIAFBvwJqKQAANwAAIANB8ABqIAFBugJqKQAANwMAIANB6ABqIAFBsgJqKQAANwMAIAMgASkAqgI3A2ACQAJAAkAgAUEoaiIEEPMKIgJFDQAgAigCAEECRw0AIANB4ABqIAItAAggAkEJai0AABD/B0UNAQtBAiECAkAgAS0AoAJBAkcNACAEEPMKIgRFDQAgBCgCAEECRw0AIAQtAAhBAkcNACAELQAJQRdGDQELDAELIANBgAFqIAEQogUgAygCgAEhASADLQCUASICQQJGDQIgA0E4aiADQYwBaikCADcDACADIAMpAoQBNwMwIAMgAykAlQE3AyAgAyADQZwBaigAADYAJwsgA0HcAGogAygAJzYAACADQcwAaiADQThqKQMANwIAIAMgAykDMDcCRCADIAMpAyA3AFUgAyABNgJAIAMgAjoAVCACQQJHBEAgA0HYAGoQ/h4gA0EYaiADQdAAaigCADYCACADQRBqIANByABqKQMANwMAIANBBmogA0HVAGoiAUECai0AADoAACADIAMpA0A3AwggAyABLwAAOwEECyAAIAMpAwg3AwAgACACOgAUIAAgAy8BBDsAFSAAQRBqIANBGGooAgA2AgAgAEEIaiADQRBqKQMANwMAIABBF2ogA0EGai0AADoAAAwCCyADQYABaiABEKIFAn8gAy0AlAEiAUECRwRAIANBmAFqEP4eIAAgAykChAE3AgQgAEEMaiADQYwBaikCADcCACAAIAMvAJUBOwAVIABBF2ogA0GXAWotAAA6AAAgAygCgAEMAQtBAyEBIAMoAoABCyECIAAgAToAFCAAIAI2AgAMAQsgAEEDOgAUIAAgATYCAAsgA0GgAWokAAupBQECfyMAQaABayIDJAACQAJAIAJFBEAgA0H1AGogAUGXA2opAAA3AAAgA0HwAGogAUGSA2opAAA3AwAgA0HoAGogAUGKA2opAAA3AwAgAyABKQCCAzcDYAJAAkACQCABQShqIgQQkAsiAkUNACACKAIAQQJHDQAgA0HgAGogAi0ACCACQQlqLQAAEP8HRQ0BC0ECIQICQCABLQD4AkECRw0AIAQQkAsiBEUNACAEKAIAQQJHDQAgBC0ACEECRw0AIAQtAAlBF0YNAQsMAQsgA0GAAWogARCmBSADKAKAASEBIAMtAJQBIgJBAkYNAiADQThqIANBjAFqKQIANwMAIAMgAykChAE3AzAgAyADKQCVATcDICADIANBnAFqKAAANgAnCyADQdwAaiADKAAnNgAAIANBzABqIANBOGopAwA3AgAgAyADKQMwNwJEIAMgAykDIDcAVSADIAE2AkAgAyACOgBUIAJBAkcEQCADQdgAahCIICADQRhqIANB0ABqKAIANgIAIANBEGogA0HIAGopAwA3AwAgA0EGaiADQdUAaiIBQQJqLQAAOgAAIAMgAykDQDcDCCADIAEvAAA7AQQLIAAgAykDCDcDACAAIAI6ABQgACADLwEEOwAVIABBEGogA0EYaigCADYCACAAQQhqIANBEGopAwA3AwAgAEEXaiADQQZqLQAAOgAADAILIANBgAFqIAEQpgUCfyADLQCUASIBQQJHBEAgA0GYAWoQiCAgACADKQKEATcCBCAAQQxqIANBjAFqKQIANwIAIAAgAy8AlQE7ABUgAEEXaiADQZcBai0AADoAACADKAKAAQwBC0EDIQEgAygCgAELIQIgACABOgAUIAAgAjYCAAwBCyAAQQM6ABQgACABNgIACyADQaABaiQAC6MFAQJ/AkACQAJAAkACQAJAAkAC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ARDjAyADKAJAIQQCQAJAAkACQAJAAkAgAykDOCIJUEUEQCADIAMoAkQ2AiwgAyAENgIoIAMgCTcDIEEBIQYgA0EYaiABQQFBABDaCyADKAIcIQcgAygCGARAIAchBAwFCyADQRBqIAFBmLnLAEHthMwAQQEQigYgAygCFCEIIAMoAhAEQCAIIQQMBAsgAyAINgI0IAFBKGoiBRDzCiIERQ0FAkACQEEQIAQoAgBBAmsiBCAEQSNPG0EMaw4CBwABCyABKALIAiEEIAFBJTYCyAIgASABKQPgAjcDmAMgA0HEAGogAUHUAmopAgA3AgAgA0HMAGogAUHcAmooAgA2AgAgAyABKQLMAjcCPCADIAQ2AjggA0E4ahDgCAwGCyAFEKIZDQUgA0FAayAFEOsMIANBCGogBRDgDyADQcCVzAA2AjwgA0E0OgA4IAMoAgggAygCDCADQThqEMMQIQQgBRDzCiICRQ0CIAIoAgBBJEcNAiABIAEpA+ACNwOYAyABKALIAiABQSU2AsgCQSRHDQEgASABKALMAhDrCQwCC0EBIQYMBQtBwL/MAEEoQcDDywAQvBIACyADQTRqENAECyAHEL0gCyAJENgPDAELIAEoApwDIQEgA0E4aiADQSBqEOcVQTBBCBD+GiIEIAIgASABIAJJGzYCBCAEIAIgASABIAJLGzYCAEEAIQYgBEEAOgAoIAQgCDYCJCAEIAc2AiAgBCADKQM4NwMIIARBEGogA0FAaykDADcDACAEQRhqIANByABqKQMANwMACyAAIAQ2AgQgACAGNgIAIANB0ABqJAAL7AQCBn8BfiMAQdAAayIDJAAgA0E4aiABEOQDIAMoAkAhBAJAAkACQAJAAkACQCADKQM4IglQRQRAIAMgAygCRDYCLCADIAQ2AiggAyAJNwMgQQEhBiADQRhqIAFBAUEAEOALIAMoAhwhByADKAIYBEAgByEEDAULIANBEGogAUGYucsAQe2EzABBARCLBiADKAIUIQggAygCEARAIAghBAwECyADIAg2AjQgAUEoaiIFEJALIgRFDQUCQAJAQRAgBCgCAEECayIEIARBI08bQQxrDgIHAAELIAEoAighBCABQSU2AiggASABKQNANwN4IANBxABqIAFBNGopAgA3AgAgA0HMAGogAUE8aigCADYCACADIAEpAiw3AjwgAyAE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CyABQRBqIQIgAUEMaiEBDAULIAFBFGohAiABQRBqIQEMBAsgAUEYaiECIAFBFGohAQwDCyABQRhqIQIgAUEUaiEBDAILAkACQAJAAkACQAJAAkACQCABKAIIQQFrDgcBAgMEBQYHAAsgASgCKCIBQShqIQIgAUEkaiEBDAgLIAEoAigiAUE0aiECIAFBMGohAQwHCyABKAIMIgFBEGohAiABQQxqIQEMBgsgASgCDCIBQRBqIQIgAUEMaiEBDAULIAEoAgwiAUEEaiECDAQLIAEoAgwiAUEEaiECDAMLIAEoAgwiAUEcaiECIAFBGGohAQwCCyABKAIMIgFBzABqIQIgAUHIAGohAQwBCyABQQxqIQIgAUEIaiEBCyAAIAIoAgA2AgQgACABKAIANgIAC8YEAgZ/AX4jAEHgAGsiAiQAEIIXIQYCfwJ/AkACQAJAAkACQAJAIAAoAgBBAWsOBAECAwQACyAAKQMQIQggACgCDCEEIAAoAggMBgsgAkHQAGogAEEQaikCADcCACACQdgAaiAAQRhqKQIANwIAIAIgACkCCDcCSCACQRRqIAJBzABqKQIANwIAIAJBHGogAkHUAGopAgA3AgAgAkEkaiACQdwAaigCADYCACACQQA2AgggAkEbNgIAIAIgAikCRDcCDCACENsYIQVBAiEDQQAMBAsgAkHQAGogAEEQaikCADcCACACQdgAaiAAQRhqKQIANwIAIAIgACkCCDcCSCACQRRqIAJBzABqKQIANwIAIAJBHGogAkHUAGopAgA3AgAgAkEkaiACQdwAaigCADYCACACQQM2AggMAgsgACgCDCEEIAAoAgQhBUECIQMgACgCCAwDCyACQdAAaiAAQRBqKQIANwIAIAJB2ABqIABBGGopAgA3AgAgAiAAKQIINwJIIAJBFGogAkHMAGopAgA3AgAgAkEcaiACQdQAaikCADcCACACQSRqIAJB3ABqKAIANgIAIAJBBDYCCAsgAkEbNgIAIAIgAikCRDcCDCACENsYIQVBAiEDQQALIQRBAAshByABENsYIQFBwAAQjhkiAEEAOgA8IAAgATYCOCAAQgA3AzAgACAGNgIoIABCADcDICAAIAg3AxggACAENgIUIAAgBzYCECAAIAU2AgwgACADNgIIIABBATYCACACQeAAaiQAIAAL0QYBCH8CQAJAAkACQAJAAkACQCAAKAIAQQFrDgcBAgMGBgQFAAsgACgCICIHIAEQ3BQgBygCECIFIAcoAhRB2ABsaiEIA0AgCCAFIgJHBEAgAkHYAGohBQJAAkACQAJAAkACQAJAIAIoAgAiAEEEa0EAIABBBWtBCEkbQQFrDggBAgMECAgFBgALIAEgAhCwCSACKAJEIgYgAigCSEEGdGohCQNAIAkgBiIDRwRAIANBQGshBiADKAIAQQdGBEAgAygCOEEMbCEAIAMoAjQhBANAIAAEQCAEIAEQtyQgAEEMayEAIARBDGohBAwBCwsgAy0AHEECRw0CIANBCGogARCaHgUgAyABEKAeCwwBCwsgAigCIEGAgICAeEYNByACQSBqIAEQ2xQMBwsgASACQQhqELAJIAJBMGogARC/JAwGCyABQQA6AAQgAkEgaiABEL8kDAULIAEgAkEIahCwCSACQTxqIAEQmR4gAkEwaiABENwUDAQLIAFBADoABCACQSRqIAEQmR4gAkEsaiABENwUDAMLIAJBBGogARDbFAwCCwJAIAIoAghBBUYEQCABQQA6AAQMAQsgASACQQhqELAJCyACQTxqIAEQmR4gAkEwaiABENwUDAELCyAHQTBqIAEQmR4PCyAAKAIgIAEQ6xAPCyAAKAIEIAEQ2RAPCyAAKAIEIAEQ2RAPCyAAKAIEIgAoAihBMGwhBCAAKAIkQShqIQADQCAERQ0CIAAoAgAEQCAAIAEQtyQLIARBMGshBCAAQTBqIQAMAAsACyAAKAIEIgAtAEVBA0YNACAAQSBqIQADQCAALQAlQQJGBEACQCAAKAIIQThsIQMgACgCBCEFQQAhAANAAkAgACADRwRAIAAgBWoiAigCACIGQQlHBEACQAJAAkACQAJAAkACQCAGQQFrDggBAgMEBQkGCQALIAJBHGogARCuHAwICyACQQhqIAEQ0gMMBwsgAkEcaiABEK4cDAYLIAJBCGooAgBBAkYNBSABQQA6AAQMBQsgASACQQRqKAIAEJEDDAQLIAJBEGogARCuHAwDCyACQQRqIAEQtyQMAgsgAkEIaiABEKMEDAELDAILIABBOGohAAwACwALBSAAKAIgIQAMAQsLCwvoBAIFfwJ+IwBBIGsiAiQAAkACQAJAAkACQAJAAkACQAJAIAEoAgBBAWsOBgECAwQFBgALIAEoAhghAyABKAIUIQQgASgCECEGIAEpAwgiB0IDg1AEQCAHp0EIayIFIAUoAgAiBUEBajYCACAFQQBIDQgLIAEtABwhBSAAIAFBIGoQmBk2AiAgACAFOgAcIAAgAzYCGCAAIAQ2AhQgACAGNgIQIAAgBzcDCCAAQQA2AgAMBgsgASkDECEHIAJBBGogAUEEahCuCSABLQAcIQMgAUEYahCYGSEBIAJBHGoiBCADOgAAIABBATYCACAAIAIpAgQ3AgQgAiAHNwIQIABBDGogAkEMaikCADcCACACIAE2AhggAEEUaiACQRRqKQIANwIAIABBHGogBCgCADYCAAwFCyABKQMIIQcgASkDECEIIAFBBGoQ3B4hAyAAIAFBGGoQmBk2AhggACAINwMQIAAgBzcDCCAAIAM2AgQgAEECNgIADAQLIAEpAxAhByACQQRqIAFBBGoQ6AUgAS0AHCEDIAFBGGoQmBkhASACQRxqIgQgAzoAACAAQQM2AgAgACACKQIENwIEIAIgBzcCECAAQQxqIAJBDGopAgA3AgAgAiABNgIYIABBFGogAkEUaikCADcCACAAQRxqIAQoAgA2AgAMAwsgASkCDCEHIAFBBGoQ3B4hAyABQQhqEN0eIQEgACAHNwIMIAAgATYCCCAAIAM2AgQgAEEENgIADAILIABBBTYCACAAIAEpAgQ3AgQMAQsgAUEEahDdHiEBIABBBjYCACAAIAE2AgQLIAJBIGokAA8LAAv6BAECfyMAQTBrIgMkAAJ/AkACQAJAAkACQAJAAkACQAJAQQYgACgCAEECayIEIARBCU8bQQFrDggBAgMEBQYHCAALIANBATYCFCADQaDEzAA2AhAgA0IBNwIcIANBggE2AgwgAyAAKQIINwIoIAMgA0EIajYCGCADIANBKGo2AgggASACIANBEGoQ3BwMCAsgAyAAQQRqNgIIIANBAjYCFCADQYC7xAA2AhAgA0IBNwIcIANBBjYCLCADIANBKGo2AhggAyADQQhqNgIoIAEgAiADQRBqENwcDAcLIANBADYCICADQQE2AhQgA0Gku8QANgIQIANCBDcCGCABIAIgA0EQahDcHAwGCyADQQA2AiAgA0EBNgIUIANBtLvEADYCECADQgQ3AhggASACIANBEGoQ3BwMBQsgA0EANgIgIANBATYCFCADQdC7xAA2AhAgA0IENwIYIAEgAiADQRBqENwcDAQLIANBADYCICADQQE2AhQgA0Hwu8QANgIQIANCBDcCGCABIAIgA0EQahDcHAwDCyADIAA2AgggA0EBNgIUIANBoMTMADYCECADQgE3AhwgA0GDATYCLCADIANBKGo2AhggAyADQQhqNgIoIAEgAiADQRBqENwcDAILIAMgAEEEajYCCCADQQI2AhQgA0H4u8QANgIQIANCATcCHCADQQY2AiwgAyADQShqNgIYIAMgA0EIajYCKCABIAIgA0EQahDcHAwBCyADIABBBGo2AgggA0EBNgIUIANBoMTMADYCECADQgE3AhwgA0EGNgIsIAMgA0EoajYCGCADIANBCGo2AiggASACIANBEGoQ3BwLIANBMGokAAu/BAIDfwF+IwBBQGoiBiQAIAZBMGogAiAFQZAKIAUQ+hMCQCAGLQAwQQVHBEAgACAGKQMwNwIADAELIAYoAjQaAkAgBUUNACAGQQE6ACYgBkEAOgAnIAUhBwNAAkACQCAHRQRAIAZBMGogASACIANBkAogCCAJQiCIpxCvASAGLQAwQQRGDQQgBikDMCIJQv8Bg0IEUg0BDAQLIAYgCTcCNCAGIAg2AjAgBkEYaiAEEKENIAZBKGogASADQZAKIAZBMGogBigCGCAGKAIcIAZBJ2ogBkEmahC4AyAGLQAoQQRHBEAgBikDKCIJQv8Bg0IEUg0BCyAGQTBqIAQgARCcByAGLQAwQQRHBEAgBikDMCIJQv8Bg0IEUg0BCyAGLQAmRQRAIAZBAToAJgwCCyABKAJERQ0BIAZBMGogAQJ/AkACQAJAAkAgBCgCAEEBaw4DAQIDAAsgBkEQaiAEQQhqEOUQIAYoAhQMAwsgBEEUaigCAAwCCyAEQQxqKAIADAELIARBFGooAgALQQAQqAIgBi0AMEEERg0BIAYpAzAiCUL/AYNCBFENAQsgACAJNwIADAMLIAYtACcEQCABIAEoAixBAWs2AiwgBkEAOgAnCyAHQQFrIQcgBkEIaiAEEKENIARBKGohBEEBIQggBikDCCEJDAALAAsgBkEwaiABIAMgBUVBkAoQmQwCQCAGLQAwQQRHBEAgBikDMCIJQv8Bg0IEUg0BCyAAQQQ6AAAMAQsgACAJNwIACyAGQUBrJAAL1wQCA38BfiMAQSBrIgMkACACKAIUIQQgA0EIaiABIAIoAhAiBUEAEM8CAkACQAJAAkAgAy0ACEEERwRAIAMpAwgiBkL/AYNCBFINAQsgAi0AGEUNAiADQQA2AgggAyABIANBCGpBh4fMAEEIEJoPIAMtAABBBEcEQCADKQMAIgZC/wGDQgRSDQILIAEtAE0NAiADQQhqIAEQgA4gAy0ACEEERg0CIAMpAwgiBkL/AYNCBFENAiAAIAY3AgAMAwsgACAGNwIADAILIAAgBjcCAAwBCyADQQA2AhQgA0EIaiABIANBFGpBgIfMAEEBEJoPAkAgAy0ACEEERg0AIAMpAwgiBkL/AYNCBFENACAAIAY3AgAMAQsgA0EIaiABIAUgBCACKAIEIAIoAggQ1QMCQAJAAkAgAy0ACEEERwRAIAMpAwgiBkL/AYNCBFINAQsgA0EIaiABIANBFGpBgYfMAEEBEJoPIAMtAAhBBEcEQCADKQMIIgZC/wGDQgRSDQILAkACQAJAIAIoAgxFDQAgA0EIaiABIANBFGpB+IbMAEEBEJoPIAMtAAhBBEcEQCADKQMIIgZC/wGDQgRSDQYLAkAgAS0ATQ0AIANBCGogARCADiADLQAIQQRGDQAgAykDCCIGQv8Bg0IEUg0CCyADQQhqIAJBDGogARCJCyADLQAIQQRGDQAgAykDCCIGQv8Bg0IEUg0CCyAAQQQ6AAAMBQsgACAGNwIADAQLIAAgBjcCAAwDCyAAIAY3AgAMAgsgACAGNwIADAELIAAgBjcCAAsgA0EgaiQAC8cEAQR/IwBBgAFrIgIkACABIAAQiRogASgCKCEBIAJBGGpB4O/OACkDADcCACACQdjvzgApAwA3AhAgAkEAOwFCIAJBADYCOCACQoCAgICAATcCMCACQQA6ACwgAkEANgIoIAJCgICAgMAANwIgIAJBADYCDCACQoCAgICAATcCBCACIAAvATw7AUAgAiAAKAI4NgI8IAFBDGogAkEEaiIDELEUIAEgAxC6FCADIAFBGGoQhxwgAkEwaiEEAkACQCACKAI4IgEEQCAAQQxqIAEQ4SAgAkHEAGogAigCNCACKAI4EOkHIAIgAigCRDYCWCACIAIoAkgiATYCUCACIAEgAigCTEEEdCIDaiIFNgJcA0AgA0UNAiACQQRqIAEpAwAgASgCCBDnESADQRBrIQMgAUEQaiEBDAALAAsgAkHQAGoiASACQQRqQSwQ7yQaIABBHGogARCzFCAEEJQbDAELIAIgBTYCVCACQdAAaiIBEIMSIAAtACgEQCACQdgAaiAEQQhqKAIANgIAIAIgBCkCADcDUCAAQSxqIAEQtAsgASACQQRqQSwQ7yQaIABBHGogARCzFAwBCyAAIAIoAjgQ1xIgAiACKAIwNgJYIAIgAigCNCIBNgJQIAIgASACKAI4QQR0IgNqIgQ2AlwDQCADBEAgACABKQMAIAEoAghBARDJBSADQRBrIQMgAUEQaiEBDAELCyACIAQ2AlQgAkHQAGoiARCDEiABIAJBBGpBLBDvJBogAEEcaiABELMUCyACQYABaiQAC58EAgl/BH4CQCAAKAIAIgJFDQACQAJAAkAgAUE/cSIIQQF0IgFB8JTAAGovAQAiA0H/D3EiBEGdCkkEQCADQQt2IQNBACACayEFIABBCGohCSAEIAFB8pTAAGovAQBB/w9xayEKQeR1IQEDQCABIApqQeR1Rg0EIAEgBGoiBkUNBCABIAVqQeR1Rg0CIAFB5HtGDQMgASAJaiABQQFqIQFBnApqLQAAIgcgBkGOoMAAai0AACIGRg0ACyADIAYgB0trIQMMAwsgBEGcCkGQoMAAEIgNAAsgA0EBayEDDAELQYAGQYAGQaCgwAAQhw0ACyAAQQdqIgQgA2ohBSAIrSEOA0AgAiIBQQFrIQICQAJAIAFBgQZJBEAgASAEajEAACAOhiANfCILIAtCCoAiDUJ2fnwhDCACIANqQYAGSQ0BIAxQDQIgAEEBOgCIBgwCCyACQYAGQaCUwAAQhw0ACyABIAVqIAw8AAALIAINAAsgC0IKWgRAIANBB2ohAgNAIA0iCyALQgqAIg1Cdn58IQwCQCACQQhrQYAGTwRAIAxQDQEgAEEBOgCIBgwBCyAAIAJqIAw8AAALIAJBAWshAiALQgpaDQALCyAAIAAoAgQgA2o2AgQgAEGABiAAKAIAIANqIgEgAUGABk8bIgI2AgAgAUUNACACQQdqIQIDQCAAIAJqLQAADQEgACACQQhrNgIAIAJBAWsiAkEHRw0ACwsLuwQBCX8jAEEQayIEJAACQAJAAn8CQCAAKAIABEAgACgCBCEGIAQgASgCDCIDNgIMIAQgASgCCCICNgIIIAQgASgCBCIFNgIEIAQgASgCACIBNgIAIAAtACAhCSAAKAIQIQogAC0AHEEIcQ0BIAohCCAJDAILIAAoAhQgACgCGCABEOIDIQIMAwsgACgCFCABIAUgACgCGCgCDBEDAA0BIABBAToAIEEwIQggAEEwNgIQIARCATcCACAGIAVrIQFBACEFIAFBACABIAZNGyEGQQELIQcgAwRAIANBDGwhAwNAAn8CQAJAAkAgAi8BAEEBaw4CAgEACyACKAIEDAILIAIoAggMAQsgAi8BAiIBQegHTwRAQQRBBSABQZDOAEkbDAELQQEgAUEKSQ0AGkECQQMgAUHkAEkbCyACQQxqIQIgBWohBSADQQxrIgMNAAsLAn8CQCAFIAZJBEAgBiAFayEDAkACQAJAIAdB/wFxIgJBAWsOAwABAAILIAMhAkEAIQMMAQsgA0EBdiECIANBAWpBAXYhAwsgAkEBaiECIAAoAhghByAAKAIUIQEDQCACQQFrIgJFDQIgASAIIAcoAhARAgBFDQALDAMLIAAoAhQgACgCGCAEEOIDDAELIAEgByAEEOIDDQFBACECAn8DQCADIAIgA0YNARogAkEBaiECIAEgCCAHKAIQEQIARQ0ACyACQQFrCyADSQshAiAAIAk6ACAgACAKNgIQDAELQQEhAgsgBEEQaiQAIAIL6AQCBn8BfiMAQdAAayICJAACQAJAAkACQAJAAn8CQCAAKAIAIgNBAkcEQCADRQRAQQEhBCABKAIUIgMgACgCECAAKAIUIAEoAhgoAgwiAREDAA0IDAcLIAIgAEEEajYCACABKAIcIAIgATYCDCACQoCAgICAyNAHNwIEIAKtQoCAgIDQC4QhCEEEcUUNASACIAg3AyggAkEBNgIkIAJBATYCFCACQaDEzAA2AhAgAkEBNgIcIAJBAzoATCACQQQ2AkggAkIgNwJAIAJBAjYCOCACQQI2AjAgAiACQTBqNgIgIAIgAkEoajYCGCACQQRqQaTAwgAgAkEQahC9AwwCCyAAKAIkIgNFDQYgACgCICEAA0AgAkEwaiAAIAMQiAMCQAJAIAIoAjBFBEAgASACKAI0IAIoAjgQ6wINAQwKCyACLQA5IQUgAi0AOCEGIAIoAjQhByABQZGlxABBAxDrAkUNAQtBASEEDAgLIAZBAXFFDQcgBSAHaiIFIANNBEAgACAFaiEAIAMgBWsiAw0BDAgLCyAFIANByKXEABCIDQALIAJBATYCNCACQaDEzAA2AjAgAkIBNwI8IAIgCDcDECACIAJBEGo2AjggAkEEakGkwMIAIAJBMGoQvQMLIgNBACACKAIEIgQbRQRAIANFDQEMAwsgASgCFEHoycIAQRQgASgCGCgCDBEDAA0CDAELIARFDQBBjMrCAEE3IAJBMGpB/MnCAEHEysIAENgLAAsgASgCFCEDIAEoAhgoAgwhAQwBC0EBIQQMAQsgAyAAKAIYIAAoAhwgAREDACEECyACQdAAaiQAIAQLnAQCDH8BfiAAKAIEQQFqIglBA3YgCUEHcUEAR2ohBSAAKAIAIgchBANAIAUEQCAEIAQpAwAiEEJ/hUIHiEKBgoSIkKDAgAGDIBBC//79+/fv37//AIR8NwMAIARBCGohBCAFQQFrIQUMAQUCQCAJQQhPBEAgByAJaiAHKQAANwAADAELIAdBCGogByAJEPAkGgtBACADayEHA0ACQAJAIAYgCUcEQCAAKAIAIgQgBmotAABBgAFHDQIgBCALaiENIAQgBkF/cyADbGohDgNAIAYgASAAIAYgAhELACIQpyIIIAAoAgQiBHEiDGsgACgCACIFIAQgEBD1CyIKIAxrcyAEcUEISQ0CIAUgCmoiDC0AACAMIAhBGXYiCDoAACAAKAIAIApBCGsgBHFqQQhqIAg6AAAgBSAKQX9zIANsaiEFQf8BRwRAIAchBANAIARFDQIgBCANaiIKLQAAIQggCiAFLQAAOgAAIAUgCDoAACAFQQFqIQUgBEEBaiEEDAALAAsLIAAoAgQhBCAAKAIAIAZqQf8BOgAAIAAoAgAgBCAGQQhrcWpBCGpB/wE6AAAgBSAOIAMQ7yQaDAILIAAgACgCBCIBIAFBAWpBA3ZBB2wgAUEISRsgACgCDGs2AggPCyAFIAZqIAhBGXYiBToAACAAKAIAIAQgBkEIa3FqQQhqIAU6AAALIAZBAWohBiALIANrIQsMAAsACwALAAucBAIMfwF+IAAoAgRBAWoiCUEDdiAJQQdxQQBHaiEFIAAoAgAiByEEA0AgBQRAIAQgBCkDACIQQn+FQgeIQoGChIiQoMCAAYMgEEL//v379+/fv/8AhHw3AwAgBEEIaiEEIAVBAWshBQwBBQJAIAlBCE8EQCAHIAlqIAcpAAA3AAAMAQsgB0EIaiAHIAkQ8CQaC0EAIANrIQcDQAJAAkAgBiAJRwRAIAAoAgAiBCAGai0AAEGAAUcNAiAEIAtqIQ0gBCAGQX9zIANsaiEOA0AgBiABIAAgBiACEQsAIhCnIgggACgCBCIEcSIMayAAKAIAIgUgBCAQEKoNIgogDGtzIARxQQhJDQIgBSAKaiIMLQAAIAwgCEEZdiIIOgAAIAAoAgAgCkEIayAEcWpBCGogCDoAACAFIApBf3MgA2xqIQVB/wFHBEAgByEEA0AgBEUNAiAEIA1qIgotAAAhCCAKIAUtAAA6AAAgBSAIOgAAIAVBAWohBSAEQQFqIQQMAAsACwsgACgCBCEEIAAoAgAgBmpB/wE6AAAgACgCACAEIAZBCGtxakEIakH/AToAACAFIA4gAxDvJBoMAgsgACAAKAIEIgEgAUEBakEDdkEHbCABQQhJGyAAKAIMazYCCA8LIAUgBmogCEEZdiIFOgAAIAAoAgAgBCAGQQhrcWpBCGogBToAAAsgBkEBaiEGIAsgA2shCwwACwALAAsAC74EAQh/IAAgARDWFCAAKAIQIgcgACgCFEHYAGxqIQgDQCAIIAciAkcEQCACQdgAaiEHAkACQAJAAkACQAJAAkACQCACKAIAIgNBBGtBACADQQVrQQhJG0EBaw4IAQIDBAUJBgcACyACIAEQoBogAigCRCIDIAIoAkhBBnRqIQkDQCADIAlHBEAgA0FAayEGIAMoAgBBB0YEQCADKAI4QQxsIQQgAygCNCEFA0AgBARAIAUgARCKJCAEQQxrIQQgBUEMaiEFDAELCyADQQhqIQQgAy0AHEECRwRAIAQgARCdHCAGIQMMAwsgBCABEPYdIAYhAwwCBSADIAEQ9x0gBiEDDAILAAsLIAIoAiBBgICAgHhGDQggAkEgaiABEM8UDAgLIAJBCGogARCgGiACQTBqIAEQkyQMBwsgAkEgaiABEJMkDAYLIAJBCGogARCgGiACQTxqIAEQ7x0gAkFAayABEKMcIAJBMGogARDWFAwFCyACQSRqIAEQ7x0gAkEoaiABEKMcIAJBLGogARDWFAwECyACQQRqIAEQ3h0MAwsgAkEEaiABEM8UDAILIAIoAghBBUcEQCACQQhqIAEQoBoLIAJBPGogARDvHSACQUBrIAEQoxwgAkEwaiABENYUDAELCyAAQTBqIAEQ7x0gACgCNCIDBEAgAyABEM0UCyAAKAI4IgMEQCADIAEQxBQLIAAoAiBBBHQhBCAAKAIcIQUDQCAEBEAgBSABEOQdIARBEGshBCAFQRBqIQUMAQsLC/MEAQd/IwBBQGoiAiQAIAJCgICAgMAANwIUIAJBADYCHCABQcABaiIGEP0RIAZB+wAQ1RIhBCABKALQASEIIAJBIGogAUEAQQQgBBsQ8QUCQAJAAn8CQAJ/IAIoAiBBAUcEQCABKALQASEBIAJBEkEQIAQbNgIwIAJB9N7EAEG43sQAIAQbNgIsIAJBJDoAKCACQQhqIAEgASACQShqEOcTIAIoAgwMAQsgAigCJCIFQYCAxABJDQEgASgC0AEhASACQSxBECAEGzYCMCACQcjexABBuN7EACAEGzYCLCACQSQ6ACggAiABIAEgAkEoahDnEyACKAIECyEBIABBgICAgHg2AgAgACABNgIEIAJBIGoQixtBBCEDQQAMAQsgAkEgahCLGwJAAkAgBUGAsANzQYCAxABrQYCQvH9PDQAgBiAIEPUWIAJBFGoiA0HcABC4FSADQfUAELgVIARFBEBBBCEDA0AgA0UNAyABKALAASABKALEARCwFiIFQYCAxABHBEAgBhD9ESACQRRqIAUQuBULIANBAWshAwwACwALQfsAIQNBBiEHA0AgAkEUaiADELgVIAdFBEBB/QAhBQwCC0H9ACEFIAEoAsABIAEoAsQBELAWIgNB/QBGIANBgIDEAEZyDQEgBhD9ESAHQQFrIQcMAAsACyACQRRqIAUQuBULIARFDQEgBkH9ABDVEg0BIAJBIzoAKCABKALQASAIIAJBKGoQoyIhASAAQYCAgIB4NgIAIAAgATYCBCACKAIYIQMgAigCFAsgAxDaGgwBCyAAIAIpAhQ3AgAgAEEIaiACQRxqKAIANgIACyACQUBrJAAL0wQCAn8BfiMAQTBrIgMkAAJAAkACQAJAAkACQAJAAkACQAJAIAIoAgBBAWsOBAECAwQACyADQSBqIAEgAigCECIEQQAQzwIgAy0AIEEERg0EIAMpAyAiBUL/AYNCBFENBCAAIAU3AgAMCAsgA0EgaiACQQhqIAEQXyADLQAgQQRGDQQgAykDICIFQv8Bg0IEUQ0EIAAgBTcCAAwHCyADQSBqIAJBCGogARDRDyADLQAgQQRGDQMgAykDICIFQv8Bg0IEUQ0DIAAgBTcCAAwGCyADQSBqIAEgAkEEahCHBiADLQAgQQRGDQIgAykDICIFQv8Bg0IEUQ0CIAAgBTcCAAwFCyADQSBqIAJBCGogARCIAiADLQAgQQRGDQEgAykDICIFQv8Bg0IEUQ0BIAAgBTcCAAwECwJAIARFDQAgA0EgaiABIAQQlBYgAy0AIEEERg0AIAMpAyAiBUL/AYNCBFINAgsgAkEIaiECIAEtAExFBEAgA0EgaiACIAEQig8gAy0AIEEERg0BIAMpAyAiBUL/AYNCBFENASAAIAU3AgAMBAsgAyACEOoJIANBIGogAygCACADKAIEEJECIANBFGogAygCJCICIAMoAihBASABLQBREIMBIANBCGogASADKAIYIgEgAygCHBCtDSADLQAIQQRHBEAgAykDCCIFQv8Bg0IEUg0DCyADKAIUIAEQ0RwgAygCICACENEcCyAAQQQ6AAAMAgsgACAFNwIADAELIAAgBTcCACADKAIUIAEQ0RwgAygCICACENEcCyADQTBqJAALuAwCDX8CfiMAQfAAayIDJAACQCAALQA8IAAtAChyBEAgA0EYakHg784AKQMAIg83AwAgA0EoaiAPNwMAIANBADsANSADQdjvzgApAwAiDzcDECADIA83AyAgAyAANgIwIAMgAC0AODoANCADIAEoAgQiBSABKAIIQThsajYCQCADIAU2AjwgAyADQRBqNgJEQQAhBUEEIQQCQCADQTxqEOkKIgJFDQAgA0EIakEEQRAQtRcgAygCCCIERQ0CIAQgAjYCACADQdAAaiADQcQAaigCADYCACADIAMpAjw3A0hBASEFQQQhBwNAIANByABqEOkKIgpFDQECQCAFIAdHBEAgBUEBaiECDAELAkAgBUF/RgR/QQAFQQQgBUEBdCIHIAVBAWoiAiACIAdJGyIIIAhBBE0bIgdBAnQhCSAIQYCAgIACSUECdCEIIAMgBQR/IAMgBDYCZCADIAVBAnQ2AmxBBAVBAAs2AmggA0HYAGogCCAJIANB5ABqEPYIIAMoAlhFDQEgAygCYCEGIAMoAlwLIAYQoiAACyADKAJcIQQLIAQgBUECdGogCjYCACACIQUMAAsACyAFQQJ0IQUDQCAFIAZHBEAgBCAGaigCACADQRBqEMAFIAZBBGohBgwBCwsgBwRAIARBBCAHQQJ0EM0cCyADQRBqEOogCyMAQUBqIgQkACAAQRBq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LGogAEEQaikCADcCACABQSRqIABBCGopAgA3AgAgAUHQAGogBSACIAMbIgBBGGooAgA2AgAgAUHIAGogAEEQaikCADcCACABQUBrIABBCGopAgA3AgAgASAAKQIANwI4IAEgBCAGIAgbIgApAgA3AlQgAUHcAGogAEEIaikCADcCACABQeQAaiAAQRBqKQIANwIAIAFB7ABqIABBGGooAgA2AgALwgQCBX8CfiMAQYABayICJAAgASgCGEEMaiAAEKsUIABBLGohAyABQRhqIQQCQCABLQAUQQJHBEAgACgCMBCQDSEFIAJBGGpB4O/OACkDACIHNwMAIAJBCGogBzcDACACQTRqIgYgA0EIaigCADYCACACQQE6ACggAiAANgIgIAIgBTYCJCACQQE6ADkgAkHY784AKQMAIgg3AxAgAiAINwMAIAIgAykCADcCLCACIAAtADw6ADwgAiAALwE6OwE6IAAtADghAyACIAAtAD06AD0gAiADOgA4IAIgAUEDEJURIAIoAjAQkA0hACACQdgAaiAHNwMAIAJByABqIAc3AwAgAkH0AGogBigCADYCACACQQE6AGggAiAANgJkIAJBAToAeSACIAg3A1AgAiAINwNAIAIgAikCLDcCbCACIAItADw6AHwgAiACLwE6OwF6IAIgAjYCYCACLQA4IQAgAiACLQA9OgB9IAIgADoAeCAEIAJBQGsiABCEAyAAEOQgIAIQ5CAMAQsgACgCMBCQDSEBIAJB2ABqQeDvzgApAwAiBzcDACACQcgAaiAHNwMAIAJB9ABqIANBCGooAgA2AgAgAkEBOgBoIAIgADYCYCACIAE2AmQgAkEBOgB5IAJB2O/OACkDACIHNwNQIAIgBzcDQCACIAMpAgA3AmwgAiAALQA8OgB8IAIgAC8BOjsBeiAALQA4IQEgAiAALQA9OgB9IAIgAToAeCAEIAJBQGsiABCEAyAAEOQgCyACQYABaiQAC4gEAQh/IAEoAgQiBQRAIAEoAgAhBANAAkAgA0EBaiECAn8gAiADIARqLQAAIgjAIglBAE4NABoCQAJAAkACQAJAAkACQAJAAkACQAJAIAhB/9XEAGotAABBAmsOAwABAgwLQYDlxAAgAiAEaiACIAVPGy0AAEHAAXFBgAFHDQsgA0ECagwKC0GA5cQAIAIgBGogAiAFTxssAAAh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AwIIfwJ+IwBBQGoiASQAIAEgADYCDCABQQA2AjAgAARAAn8CQEHMxs8AKAIAIgIEQCACEK8YIAJBCGoiBSgCACACQQxqIgMoAgBBAEHct8QAEJMYKAIIIQQgBSgCACADKAIAQQBB7LfEABCTGCgCDCEHIAFBEGogAkEQaiIGIAQgABD7BSACQQRqIQUCfyABKAIQRQRAIAEoAiAMAQsgASgCKCABKQMYIAEpAyAhCiABIAMoAgAiAzYCPCABIAM2AjggASAENgI0IAEgADYCMCAFIAFBMGoiBBCJESABIAM2AjggASAKNwIwIAQQwgoLQQRrKAIAIQMgAUEQaiAGQQAgABD7BSABKAIQDQEgASgCIAwCC0G4mMwAQcgAEIkiAAsgAkEMaigCACEEIAEoAiggASkDGCABKQMgIQogASAHNgI8IAEgAzYCOCABQQA2AjQgASAANgIwIAUgAUEwaiIAEIkRIAEgBDYCOCABIAo3AjAgABDCCgtBBGsoAgAgAhDYFyABQUBrJAAPCyABQQA2AhAgAUEMaiABQTBqIAFBEGpBzLfEABD1FAALtAMBBn8jAEEgayICJAAgAUEGIAAoAghBAmsiBCAEQQlPGyIEENUYAkACQAJAAkACQAJAIAQOCQAEBQUFBQMCAQULQQAhBCACQRhqQQAgACgCECAAKAIUQdi+xAAQxhYgAigCHCEGIAIoAhghBwNAIAQiACAGRgRAIAEgAyAGSQR/IAJBCGogAyAHIAZB6L7EABDGFiABIAIoAgggAigCDCIAEJoHIAAgBWpBHncFIAULEP8KDAYLIABBAWohBCAAIAdqLQAAQS9HDQAgACADSwRAIAEgAyAHaiAAIANrIgAQmgcgACAFakEedyEFCyACQRBqIAQgByAGQfi+xAAQxhYgAigCECEDAn8CQAJAAkAgAigCFA4CAgABC0EBIAMtAABBLkYNAhoMAQsgAy0AAEEuRw0AQQEgAy0AAUEvRg0BGgtBAAsgBGohAwwACwALIABBEGooAgAgAEEUaigCACABENseDAMLIABBEGooAgAgAEEUaigCACABENseDAILIABBHGooAgAgAEEgaigCACABENseDAELIABBEGooAgAgAEEUaigCACABENseCyACQSBqJAALywMCBH8BfiMAQSBrIgIkACABLQCaAyEEAkACQAJAIAFB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IAEgASgCDEEBazYCDEGAgICAeCAGQQAgCmtBBHRqQRBrIgZBBGooAgAiAUGAgICAeEYNABogACAGQQhqKQIANwIEIAELNgIAC6wDAgd/AX4jAEEgayICJAAgAUEoaiIDEN4YIQQgAkEIaiABENEEIAIoAgghBQJAAkAgAi0AHEECRwRAIAIoAhQhByACKAIQIQggAigCDCEGAkAgAxDzCiIDBEAgAygCAEETRg0BCyAAIAc2AhwgACAINgIYIABCADcDCCAAQQA2AgAgACAFrSAGrUIghoQ3AxAMAwsgASgCyAIhAyABQSU2AsgCIAEgASkD4AI3A5gDIAJBFGogAUHUAmopAgA3AgAgAkEcaiABQdwCaigCADYCACACIAEpAswCNwIMIAIgAzYCCCACQQhqIgMQ4AggAyABENEEIAItABxBAkYEQCACKAIIIQEMAgsgAigCECEBIAIpAwgiCVANASAAIAIoAhQiAzYCJCAAIAE2AiAgACAJNwMYIAAgBzYCFCAAIAg2AhAgAEEANgIAIAAgBCADIAMgBEkbNgIsIAAgBCADIAMgBEsbNgIoIAAgBa0gBq1CIIaENwMIDAILIABBATYCACAAIAU2AgQMAQsgAEEBNgIAIAAgATYCBCAFrSAGrUIghoQQ2A8LIAJBIGokAAuKBAEFfyAAKAIEIQIgACgCACEBIABCiICAgIABNwIAIAIgAWtBOG4hAwJAIAEgAkYNAANAIANFDQECQCABKAIAIgJBCUcEQAJAAkACQAJAAkACQAJAAkACQCACDggBAgMEBQYHCAALIAFBEGoQlQ8MCQsgAUEIaiICKAIAIAFBDGooAgAQ2AwgAUEEaigCACACKAIAEPcaIAFBEGooAgAQ2CAgAUEcaigCABCEGwwICyABQQhqEOQHDAcLIAFBCGoiAigCACABQQxqKAIAELcNIAFBBGooAgAgAigCABD4GiABQRhqKAIAIgIEQCACENggCyABQRxqKAIAEIQbDAYLAkACQAJAIAFBCGooAgAOAgECAAsgAUEMaigCABD3FgwHCyABQRBqENUgDAYLIAFBEGoQxyEMBQsgAUEEahCjAgwECyABQQRqKAIAENggIAFBEGooAgAQhBsMAwsgAUEEaigCACICQShqEJUPAkAgAikDAFAEQCACQQhqELMWDAELIAIQ1CALIAJByABB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IAJB+LbLADYCDCACQTQ6AAggAigCACACKAIEIAJBCGoQwxAhBCADEJALIgNFDQIgAygCAEEkRg0BDAILIAEoAighAyABQSU2AiggASABKQNANwN4IAJBFGogAUE0aikCADcCACACQRxqIAFBPGooAgA2AgAgAiABKQIsNwIMIAIgAzYCCCACQQhqIgMQ4gggAyABQQBB0LbLABAwIAIoAgwhAyACKAIIIgVBgICAgHhHBEAgACACKAIQNgIIIAAgAzYCBCAAIAU2AgAgACAEIAEoAnwiASABIARJGzYCECAAIAQgASABIARLGzYCDAwDCyAAQYCAgIB4NgIAIAAgAzYCBAwCCyABIAEpA0A3A3ggASgCKCABQSU2AihBJEcEQEHAv8wAQShB3L7LABC8EgALIAEgASgCLBDyCQsgAEGAgICAeDYCACAAIAQ2AgQLIAJBIGokAAuRAwEGfyMAQTBrIgMkACABKALQASEEIAEtAL0BIQggAUHAAWoiBRD9ESACQf8BcSIHQSZGIQYCQAJAIAVBPRDVEkUEQCABKALAASABKALEARCwFiAHRg0BIABBEkEQIAYbOgAEIABBFDYCAAwCCyAAQRU2AgAgAEELQQkgBhs6AAQMAQsgBRD9EQJAIAEoAsABIgYgASgCxAEiBxCwFkE9RwRAIAACfyACQf8BcUEmRiICQQEgCBsEQEEVQRQgAhsMAQsgBiAHQeDdxABBBhCRHw0CQRQLOgAEIABBFDYCACAAIAMpAB03AAUgAEENaiADQSVqKQAANwAAIABBFGogA0EsaigAADYAAAwCCyAFEP0RIABBFTYCACAAQQ1BDiACQf8BcUEmRhs6AAQMAQsgA0GbAToAACABKALcASABLQCCAiAEIARBB2oiAiACIARLGyIFIAQgAiACIARJGyICIAMQ9Q0gAUEFENgEIAEQmwcgBSACIAMQwxAhASAAQSU2AgAgACABNgIECyADQTBqJAAL0wMBAX8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAoAgAiAC0ACCIBQSxrDgkBExMTAgMTEwQACwJAIAFBnwFrDgcNExMTDg8QAAsCQCABQewAaw4ECBMTCQALAkAgAUH5AGsOAgoLAAsCQCABQbcBaw4CERIACyABQYIBRg0LIAFBJ0cEQCAB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IAMpAig3AgRBACEBIABBADoAJCAAIAI2AiAMAQsgACADKQMQNwMIIABBGGogBSkDADcDACAAQRBqIAQpAwA3AwAgA0EMahDaDgsgACABNgIAIANB4ABqJAALuwICBX8DfiMAQeAAayIDJAAgAyACNgIMIANBwgA6AEggA0EoaiABIANByABqEL8LQQghASADQRhqIgQgA0E4aiIGKQMANwMAIANBIGoiBSADQUBrIgcpAwA3AwAgAyADKQMwNwMQAkAgAykDKFAEQCADQdgAaiAFKQMAIgg3AwAgA0HQAGogBCkDACIJNwMAIAMgAykDECIKNwNIIANBPGogCDcCACADQTRqIAk3AgAgAyAKNwIsIABBHGogBygCADYCACAAQRRqIAYpAgA3AgAgAEEMaiADQTBqKQIANwIAIAAgAykCKDcCBCAAQQA6ACQgACACNgIgQQEhAQwBCyAAIAMpAxA3AwggAEEYaiAFKQMANwMAIABBEGogBCkDADcDACADQQxqEIESCyAAIAE2AgAgA0HgAGokAAvgAgELfyMAQSBrIgMkACABQcABaiEIIAEoAtABIQsgASgCnAEhCUGAgMQAIQQDQAJAAkACQAJAAkACQAJAIAEoAsABIgwgASgCxAEiDRCwFiIFQd8ARwRAIAVBgIDEAEYNASADIAVBEBD4DiADKAIAQQFHDQEgAygCBCAIEP0RIAZB/////wBLDQQgBkEEdCIEaiIGIARJDQRBASEKIAUhBCAHQQFqIgdB/wFxIAJB/wFxRw0IDAILIAwgDRDtFSIFQYCAxABGDQUgBUEQELEWRQ0FIAQQ6BMNBSAFEOgTDQUMBgsgAkH/AXEiAUUNACAHQf8BcSABRw0BCyAAIAY2AgQgACAKNgIADAILIABBADYCAAwBCyADQSM6AAggCSAJIANBCGoQwxAhASAAQQI2AgAgACABNgIECyADQSBqJAAPCyADQe4AOgAIIAEgCyADQQhqEOkbCyAIEP0RDAALAAu+AgIFfwF+IwBBMGsiBSQAQSchAwJAIABCkM4AVARAIAAhCAwBCwNAIAVBCWogA2oiBEEEayAAQpDOAIAiCELwsQN+IAB8pyIGQf//A3FB5ABuIgdBAXRB0IrEAGovAAA7AAAgBEECayAHQZx/bCAGakH//wNxQQF0QdCKxABqLwAAOwAAIANBBGshAyAAQv/B1y9WIAghAA0ACwsgCKciBEHjAEsEQCADQQJrIgMgBUEJamogCKciBkH//wNxQeQAbiIEQZx/bCAGakH//wNxQQF0QdCKxABqLwAAOwAACwJAIARBCk8EQCADQQJrIgMgBUEJamogBEEBdEHQisQAai8AADsAAAwBCyADQQFrIgMgBUEJamogBEEwcjoAAAsgAiABQQFBACAFQQlqIANqQScgA2sQugMgBUEwaiQAC8ICAQV/IABBC3QhAkEhIQNBISEEAkADQCACIANBAXYgAWoiA0ECdEHsscEAaigCAEELdCIFRwRAIAMgBCACIAVJGyIEIANBAWogASACIAVLGyIBayEDIAEgBEkNAQwCCwsgA0EBaiEBCwJAIAFBIE0EQCABQQJ0IgNB7LHBAGoiBSgCAEEVdiECQdcFIQQCfwJAIAFBIEYNACAFQQRqKAIAQRV2IQQgAQ0AQQAMAQsgA0HoscEAaigCAEH///8AcQshAQJAIAQgAkF/c2pFDQAgACABayEFQdcFIAIgAkHXBU0bIQMgBEEBayEAQQAhAQNAIAIgA0YNAyABIAJB8LLBAGotAABqIgEgBUsNASAAIAJBAWoiAkcNAAsgACECCyACQQFxDwtBIUEhQZTRwAAQhw0ACyADQdcFQaTRwAAQhw0AC8oCAQN/IwBB4ABrIgUkACABQShqIQYgAgR/QQEFIAYQ3hgaQQALIQdBASECIAVBEGogASAHIAMgBEEBQQAQZCAFKAIQIQQCQAJAIAUtACQiA0EDRg0AIAVB1ABqIAVBHGopAgA3AgAgBUHfAGogBUEnai0AADoAACAFIAUpAhQ3AkwgBSAFLwAlOwBdIAUgAzoAXCAFIAQ2AkggBUEwaiAFQcgAaiAFKAIoEIkOIAUtADBBuwFGBEBBACECIAUoAjQhBAwBCyAFQQhqIAYQ4A8gBSgCCCAFKAIMIAVBMGoQwxAhBCAGEPMKIgNFDQAgAygCAEEkRw0AIAEgASkD4AI3A5gDIAEoAsgCIAFBJTYCyAJBJEcNASABIAEoAswCEOsJCyAAIAQ2AgQgACACNgIAIAVB4ABqJAAPC0HAv8wAQShBlNLLABC8EgAL0gIBA38jAEEwayICJAACQAJAIAEoAsABIAEoAsQBELQWIgNB3ABGDQACfyADQYABTwRAIANBA3ZBP3FBgOXEACADQQl2QcjFzABqIANB/8cMSxstAABBBXRqQYDXzABqLQAAQQEgA0EHcXRxDAELIANBgOTEAGotAAALDQAgASgC0AEhBCABQcABahD/ESACQSE6ABggAiADNgIcIAIgBCAEIAJBGGoQ+xkgAigCBCEBIAIoAgAiA0EnRwRAIAAgAikDCDcDCCAAQRBqIAJBEGopAwA3AwAgACABNgIEIAAgAzYCAAwCCyAAQSY2AgAgACABNgIEDAELIAJBGGogARCVAyACKAIYQSVHBEAgACACKQMYNwMAIABBEGogAkEoaikDADcDACAAQQhqIAJBIGopAwA3AwAMAQsgACACKAIcNgIEIABBJjYCAAsgAkEwaiQAC+ECAgR/AX4CQAJAAkACQAJAAkACQAJAAkACQAJAIAAoAgBBAWsOCQECAwoEBQoGBwALIAAoAgxByABsIQMgACgCCCECA0AgAwRAAkACfyACKQMAQgN9IgZCAVYgBkL/////D4NC/////w9RckUEQEEQIQRBIAwBCyABIAIpAyAgAkEwaigCABCKFSACKQMAUEUNAUEIIQRBGAshBSABIAIgBGopAwAgAiAFaigCABCKFQsgAkHIAGohAiADQcgAayEDDAELCwwICyAAQQhqIAEQsQcPCyAAKAIYDQUMBgsCQAJAIAAoAghBAWsOAgEGAAsgAEEQaiABELofDwsgAEEQaiABELkfDwsgAEEQaiABEIscDwsgASAAKAIEIgApAyggAEE4aigCABCKFQ8LIAEgACkDECAAKAIgEIoVDwsgAEEIaiABEOwDCw8LIABBHGogARCLHA8LIABBBGogARDnIgvFAgEDfyMAQeAAayIFJAAgAUEoaiEGIAIEf0EBBSAGEPwYGkEACyEHQQEhAiAFQRBqIAEgByADIARBAUEAEGMgBSgCECEEAkACQCAFLQAkIgNBA0YNACAFQdQAaiAFQRxqKQIANwIAIAVB3wBqIAVBJ2otAAA6AAAgBSAFKQIUNwJMIAUgBS8AJTsAXSAFIAM6AFwgBSAENgJIIAVBMGogBUHIAGogBSgCKBCJDiAFLQAwQbsBRgRAQQAhAiAFKAI0IQQMAQsgBUEIaiAGEJgQIAUoAgggBSgCDCAFQTBqEMMQIQQgBhCQCyIDRQ0AIAMoAgBBJEcNACABIAEpA0A3A3ggASgCKCABQSU2AihBJEcNASABIAEoAiwQ8gkLIAAgBDYCBCAAIAI2AgAgBUHgAGokAA8LQcC/zABBKEGU0ssAELwSAAv0AwEHfyMAQRBrIgMkAAJAAn8CQCABQYABTwRAIANBADYCDCABQYAQSQ0BIAFBgIAESQRAIAMgAUE/cUGAAXI6AA4gAyABQQx2QeABcjoADCADIAFBBnZBP3FBgAFyOgANQQMMAwsgAyABQT9xQYABcjoADyADIAFBBnZBP3FBgAFyOgAOIAMgAUEMdkE/cUGAAXI6AA0gAyABQRJ2QQdxQfABcjoADEEEDAILIAAoAggiByAAKAIARgRAIwBBIGsiAiQAIAAoAgAiBEF/RgRAQQBBABCiIAALQQEhCEEIIARBAXQiBSAEQQFqIgYgBSAGSxsiBSAFQQhNGyIFQX9zQR92IQYCQCAERQRAQQAhCAwBCyACIAQ2AhwgAiAAKAIENgIUCyACIAg2AhggAkEIaiAGIAUgAkEUahCVCiACKAIIBEAgAigCDCACKAIQEKIgAAsgAigCDCEEIAAgBTYCACAAIAQ2AgQgAkEgaiQACyAAIAdBAWo2AgggACgCBCAHaiABOgAADAILIAMgAUE/cUGAAXI6AA0gAyABQQZ2QcABcjoADEECCyEBIAEgACgCACAAKAIIIgJrSwRAIAAgAiABEIMJIAAoAgghAgsgACgCBCACaiADQQxqIAEQ7yQaIAAgASACajYCCAsgA0EQaiQAQQALpwMDBH8HfgJ8RAAAAAAAAABAIQ1EAAAAAAAAAEBEAAAAAAAA8D8CfgJAAkACQAJAIAAoAggiAQ4CAwEACyABQQJ0IQIgACgCBCIDQQRrIQQgAyABEMkWIQcDQAJAAkAgAgRAQsAAIAh9IgogB0IBfUIfgyILQgF8IgkgCSAKVhshBSACIARqIQMgCELAAFINAQwCCyABRQ0FDAQLIAYgBYYgAzUCACAJIAV9iIQhBgsgCiALWARAIAYgAzUCACAFIAl9hkIAUq2EIQYLIAJBBGshAiAHIAV9IQcgBSAIfCEIDAALAAsgACgCBEEBQQBBoM3BABCSGDUCACEGCyABrUIFhiAAKAIEIAFBAnRqQQRrKAIAZ619DAELQgALQsAAIAZ5fUL/AYN9IgWnIgJBH3UiASACcyABayIBQQFxGyEMIAFBAk8EQANAIAwgDSANoiINRAAAAAAAAPA/IAFBAnEboiEMIAFBA0sgAUEBdiEBDQALC0QAAAAAAADwf0QAAAAAAADwPyAMoyAMIAJBAEgbIAa6oiAFQoAIVhsiDCAMmiAALQAMGwvbAgIDfwF+IwBBIGsiAiQAAkACQAJAAkACQCABKAIAQQFrDgMBAgMACyAAQQhqIAFBCGoQ0RsgAEEANgIADAMLIAEpAxAhBSACQQRqIAFBBGoQrgkgAS0AHCEDIAFBGGoQmBkhASACQRxqIgQgAzoAACAAQQE2AgAgACACKQIENwIEIAIgBTcCECAAQQxqIAJBDGopAgA3AgAgAiABNgIYIABBFGogAkEUaikCADcCACAAQRxqIAQoAgA2AgAMAgsgAEEEaiABQQRqENsTIABBAjYCAAwBCyABKQMQIQUgAkEEaiABQQRqEOgFIAEtABwhAyABQRhqEJgZIQEgAkEcaiIEIAM6AAAgAEEDNgIAIAAgAikCBDcCBCACIAU3AhAgAEEMaiACQQxqKQIANwIAIAIgATYCGCAAQRRqIAJBFGopAgA3AgAgAEEcaiAEKAIANgIACyACQSBqJAALtgYCDH8EfiABQRBqIQggASgCBCIGIAJBufPd8XlsQQV3IANzQbnz3fF5bCIFcSEEIAWtIhJCGYhCgYKEiJCgwIABfiETIAEoAgAhBQNAIAQgBWopAAAiESAThSIQQn+FIBBCgYKEiJCgwIABfYNCgIGChIiQoMCAf4MhEAJAIAACfwJAA0AgEFBFBEAgAiAFIBB6p0EDdiAEaiAGcUF0bGoiB0EMaygCAEYEQCAHQQhrKAIAIANGDQMLIBBCAX0gEIMhEAwBCwsgESARQgGGg0KAgYKEiJCgwIB/g1ANAiABKAIIRQRAAkBBACEHIwBBQGoiBCQAIAQgCDYCDCABKAIMIQYgBCAEQQxqNgIQIAZBf0cEQAJ/AkAgASgCBCIFIAVBAWpBA3ZBB2wgBUEISRsiBUEBdiAGTQRAIARBMGpBDCAGIAUgBSAGSRtBAWoQ/gcgBCgCNCIIIAQoAjAiBUUNAhogBCgCOCEMIAQgBCgCPDYCLCAEIAw2AiggBCAINgIkIARCjICAgIABNwIYIAQgAUEQajYCFCAEIAU2AiAgBUEIaiENIAEoAgAiCSkDAEJ/hUKAgYKEiJCgwIB/gyEQIARBIGohDgNAAkAgBgRAA0AgEEIAUg0CIAdBCGohByAJKQMIQn+FQoCBgoSIkKDAgH+DIRAgCUEIaiEJDAALAAsgBCABKAIMIgY2AiwgBCAMIAZrNgIoIAEgDhDJEiAEQRRqEMIQDAMLIAUgBSAIIARBEGogASAQeqdBA3YgB2oiCxD0FCIREPULIgpqIBFCGYinIg86AAAgDSAKQQhrIAhxaiAPOgAAIAUgCkF/c0EMbGoiCiABKAIAIAtBf3NBDGxqIgspAAA3AAAgCkEIaiALQQhqKAAANgAAIAZBAWshBiAQQgF9IBCDIRAMAAsACyABIARBEGpB/ABBDBDbAwtBAAsaIARBQGskAAwBCxCsFQALCyAAIAE2AhggACADNgIUIAAgAjYCECAAIBI3AwhBAQwBCyAAIAE2AhQgACAHNgIQIABBATYCBCAAIAKtIAOtQiCGhDcDCEEACzYCAA8LIAQgCUEIaiIJaiAGcSEEDAALAAudAwEHfyMAQTBrIgMkACAAKAIEIQICQCAAKAIIIgFFBEBBACEBDAELIAIoAgANACADQRBqIAJBCGoQ6gkgAygCECADKAIUQeCWzABBBBCuGEUNACADQQhqQQBBASABEPETIAMoAgwhBCAAIAMoAggiBTYCCCADIAA2AiQgA0KIgICAgAE3AhwgAyAENgIoIAMgASAEazYCLAJAIAQgBUYNACACIARBBnRqIAIgBUEGdGoiAmtBBnYhAQNAIAFFDQEgAkEwahDtHiACEMcNIAFBAWshASACQUBrIQIMAAsACyADQRxqIgIoAhAiAQRAIAIoAgwiBiACKAIIIgQoAggiBUcEQCAEKAIEIgcgBUEGdGogByAGQQZ0aiABQQZ0EPAkGiACKAIQIQELIAQgASAFajYCCAsgACgCCCEBIAAoAgQhAgsgAUEGdCEBA0AgAQRAIAFBQGohASACEPwgIAJBQGshAgwBCwsgAEEMahCeFSAAKAIYQYCAgIB4RwRAIABBGGoQzgcLIABBPGoQ/SAgAEFAaxDXISADQTBqJAALrQIBBn8jAEEgayIEJAACQCABIANPBEAgBEEEaiAAIAAgA0ECdCIFaiIHIAIgAiAFahDAECAEKAIYIgAgBCgCFCICayIFQQAgACAFTxshACACQQJ0IgIgBCgCDGohBSAEKAIEIAJqIQIDQCAABEAgAiAGIAIoAgAiCCAFKAIAaiIGaiIJNgIAIAYgCEkgBiAJS3IhBiAAQQFrIQAgBUEEaiEFIAJBBGohAgwBCwtBACEFIAZFDQEgAUECdCADQQJ0ayECA0AgAkUEQEEBIQUMAwsgByAHKAIAQQFqIgA2AgAgAkEEayECIAdBBGohByAARQ0ACwwBCyAEQQA2AhQgBEEBNgIIIARB5J7MADYCBCAEQgQ3AgwgBEEEakG89sEAEPIQAAsgBEEgaiQAIAULlAIBBX4gACAAKQMYIgFCEIkgASAAKQMIfCIBhSICQhWJIAIgACkDECIEIAApAwB8IgVCIIl8IgKFIgNCEIkgAyABIARCDYkgBYUiBHwiAUIgiXwiBYUiA0IViSADIAIgASAEQhGJhSIBfCICQiCJfCIEhSIDQhCJIAMgBSABQg2JIAKFIgF8IgJCIIl8IgWFIgNCFYkgAyAEIAFCEYkgAoUiAXwiAkIgiXwiBIUiA0IQiSADIAUgAUINiSAChSIBfCICQiCJfCIFhSIDIAQgAUIRiSAChSIBfCICQiCJfCIENwMAIAAgA0IViSAEhTcDGCAAIAFCDYkgAoUiAUIRiSABIAV8IgGFNwMQIAAgAUIgiTcDCAvNAgIFfwJ+IwBBMGsiAiQAIAEoAgAiA0EIaiEFIAMgASgCBCIEakEBaiEGIAMpAwBCf4VCgIGChIiQoMCAf4MhCCABKAIMIQECfyAERQRAQQAMAQsgAkEIIARBAWoQ4wsgAjUCBCADIAIoAghrrUIghoQhByACKAIACyEEIAAgAUEBakEBdiABIAAoAgwbIABBEGoQjxogAiAHNwIkIAIgBDYCICACIAE2AhggAiADNgIQIAIgBjYCDCACIAU2AgggAiAINwMAAkADQCABRQ0BIAIQqAwhAyACIAIoAhhBAWsiATYCGCADBEAgACADQQhrKQMAENIHDAELCyABRQ0AA0AgAhCoDCEAIAIgAigCGEEBayIBNgIYIABFDQEgAEEIaykDABDYDyABDQALCyACKAIgIgAEQCACKAIoIAAgAigCJBDNHAsgAkEwaiQAC7UCAQZ/IwBBMGsiAyQAQQohAgJAIABBkM4ASQRAIAAhBAwBCwNAIANBCGogAmoiBUEEayAAIABBkM4AbiIEQZDOAGxrIgZB//8DcUHkAG4iB0EBdEHQisQAai8AADsAACAFQQJrIAYgB0HkAGxrQf//A3FBAXRB0IrEAGovAAA7AAAgAkEEayECIABB/8HXL0sgBCEADQALCwJAIARB4wBNBEAgBCEADAELIAJBAmsiAiADQQhqaiAEIARB5ABuIgBB5ABsa0EBdEHQisQAai8AADsAAAsCQCAAQQpPBEAgAkECayICIANBCGpqIABBAXRB0IrEAGovAAA7AAAMAQsgAkEBayICIANBCGpqIABBMHI6AAALIAMgASADQQhqIAJqQQogAmsQ6xwgAxCYEyADQTBqJAAL6AIBAX8jAEEQayICJAACfwJAAkACQAJAAkACQAJAAkACQCAAKAIAIgAoAgBBAWsOCAECAwQFBgcIAAsgAiAAQQRqNgIMIAFB2ofGAEEGIAJBDGpB8gEQ3QgMCAsgAiAAQQhqNgIMIAFB0YbGAEEKIAJBDGpB8wEQ3QgMBwsgAiAAQQRqNgIMIAFB4IfGAEELIAJBDGpB9AEQ3QgMBgsgAiAAQQhqNgIMIAFB64fGAEERIAJBDGpB9QEQ3QgMBQsgAiAAQQRqNgIMIAFB/IfGAEERIAJBDGpB9gEQ3QgMBAsgAiAAQQRqNgIMIAFBvIbGAEEJIAJBDGpB9wEQ3QgMAwsgAiAAQQRqNgIMIAFBjYjGAEEOIAJBDGpB+AEQ3QgMAgsgAiAAQQRqNgIMIAFBm4jGAEESIAJBDGpB+QEQ3QgMAQsgAiAAQQhqNgIMIAFBrYjGAEERIAJBDGpB+gEQ3QgLIAJBEGokAAvvAgEBfyMAQfAAayICJAAgACgCACEAIAJB6ABqQcCFxgA2AgAgAkHgAGpBuO3EADYCACACQdgAakG47cQANgIAIAJB0ABqQbjtxAA2AgAgAkHIAGpBuO3EADYCACACQUBrQbjtxAA2AgAgAkE4akHY8MQANgIAIAJBMGpByPDEADYCACACQShqQbjtxAA2AgAgAkEgakG48MQANgIAIAJBGGpBhPDEADYCACACQRBqQajwxAA2AgAgAiAAQcEAajYCXCACIABBQGs2AlQgAiAAQT9qNgJMIAIgAEE+ajYCRCACIABBPWo2AjwgAiAAQcMAajYCNCACIABBKGo2AiwgAiAAQTxqNgIkIAIgAEE4ajYCHCACIABBNGo2AhQgAiAANgIMIAJBoIXGADYCCCACIABBIGo2AgQgAiAAQcIAajYCbCACIAJB7ABqNgJkIAFB5PHEAEEJQfzwxABBDSACQQRqQQ0Q9QYgAkHwAGokAAvLAgEIfyMAQSBrIgIkACACQRRqIAEoAgQgASgCCEEQEH0gAigCHCEDAkAgAS0ADARAIAIoAhghBAwBCyACKAIUIANGBEAgAkEUahDpCAsgAigCGCIEIANqQS06AAAgAiADQQFqIgM2AhwLIAJBCGogA0EBdiIBIAQgAUGIsMwAELgXIAIoAgwhBSACKAIIIQcgAiABIAMgBGogAWsgAUGYsMwAELgXIAFBAWshAUEAIQMgAigCBCEEIAIoAgAhCAJAAkADQCABQX9GDQEgAyAFRg0CIAEgBEkEQCADIAdqIgYtAAAhCSAGIAEgCGoiBi0AADoAACAGIAk6AAAgAUEBayEBIANBAWohAwwBCwsgASAEQbiwzAAQhw0ACyAAIAIpAhQ3AgAgAEEIaiACQRxqKAIANgIAIAJBIGokAA8LIAUgBUGosMwAEIcNAAvQAgIDfwF+IwBBIGsiAyQAIAEoAgwhBSADQRBqIAIgASgCCCIEQQAQzwICQAJAAkACQAJAIAMtABBBBEcEQCADKQMQIgZC/wGDQgRSDQELAkAgBEUNACADQRBqIAIgBBCUFiADLQAQQQRGDQAgAykDECIGQv8Bg0IEUg0CCyADQQA2AhAgA0EIaiACIANBEGpB84vMAEEBEJoPIAMtAAhBBEcEQCADKQMIIgZC/wGDQgRSDQMLIANBEGogAiAEIAFBABDJBCADLQAQQQRHBEAgAykDECIGQv8Bg0IEUg0ECwJAAkAgBUUNACADQRBqIAIgBRCUFiADLQAQQQRGDQAgAykDECIGQv8Bg0IEUg0BCyAAQQQ6AAAMBQsgACAGNwIADAQLIAAgBjcCAAwDCyAAIAY3AgAMAgsgACAGNwIADAELIAAgBjcCAAsgA0EgaiQAC7UCAQV/AkACQAJAAkAgAkEDakF8cSIEIAJGDQAgBCACayIEIAMgAyAESxsiBUUNAEEAIQQgAUH/AXEhB0EBIQYDQCACIARqLQAAIAdGDQQgBSAEQQFqIgRHDQALIAUgA0EIayIGSw0CDAELIANBCGshBkEAIQULIAFB/wFxQYGChAhsIQQDQCACIAVqIgdBBGooAgAgBHMiCEGBgoQIayAIQX9zcSAHKAIAIARzIgdBgYKECGsgB0F/c3FyQYCBgoR4cQ0BIAVBCGoiBSAGTQ0ACwsCQCADIAVGDQAgAyAFayEDIAIgBWohAkEAIQQgAUH/AXEhAQNAIAEgAiAEai0AAEcEQCAEQQFqIgQgA0cNAQwCCwsgBCAFaiEEQQEhBgwBC0EAIQYLIAAgBDYCBCAAIAY2AgALxAIBB38jAEEwayICJAACQCABKAIAQYCAgIB4RgRAIABBgICAgHg2AgAMAQsgASgCBCEGIAJBIGogASgCCCIEEMMLIAIoAiQhBQJAAkAgAigCIEUEQCACQQA2AhAgAiACKAIoIgc2AgwgAiAFNgIIIAQgBU0EQCAERQ0DDAILIAJBCGpBACAEEKAIIAIoAgwhByACKAIQIQMMAQsgBSACKAIoEKIgAAsgAyAEaiABQRRqIQggByADQQxsaiEBIAJBJGohAwNAIANBCGogCEEIai8BADsBACADIAgpAgA3AgAgAiAGNgIgIAJBFGogAkEgahDhCiABQQhqIAJBHGooAgA2AgAgASACKQIUNwIAIAFBDGohASAGQQxqIQYgBEEBayIEDQALIQMLIAAgAikCCDcCACAAQQhqIAM2AgALIAJBMGokAAvRAgICfwF+IwBBIGsiAyQAAkACQAJAAkAgAigCBCIERQ0AIANBGGogASAEEJQWIAMtABhBBEYNACADKQMYIgVC/wGDQgRSDQELIANBADYCDCADQRhqIAEgA0EMakGAh8wAQQEQmg8gAy0AGEEERg0BIAMpAxgiBUL/AYNCBFENASAAIAU3AgAMAgsgACAFNwIADAELIANBGGogAiABEOshAkACQCADLQAYQQRHBEAgAykDGCIFQv8Bg0IEUg0BCyADQRhqIAEgA0EMakGBh8wAQQEQmg8gAy0AGEEERwRAIAMpAxgiBUL/AYNCBFINAgsCQAJAIAIoAggiAkUNACADQRhqIAEgAhCUFiADLQAYQQRGDQAgAykDGCIFQv8Bg0IEUg0BCyAAQQQ6AAAMAwsgACAFNwIADAILIAAgBTcCAAwBCyAAIAU3AgALIANBIGokAAuxAgIEfwF+IwBBEGsiBSQAAn8gA0UEQEEBIQRBAAwBCwJAAkAgAq0gA61+IghCIIhQBEACQAJAAkAgCKciBkUEQEEBIQQMAQsgBkEASA0BQaDNzwAtAAAaIAYQVSIERQ0CCyAFQQA2AgwgBSAENgIIIAUgBjYCBCACIAZLBEAgBUEEakEAIAIQgwkgBSgCDCEHIAUoAgghBAsgBCAHaiABIAIQ7yQaIAIgB2ohAiADQQFHBEADQCACIARqIAQgAhDvJBogAkEBdCECIANBBEkgA0EBdiEDRQ0ACwsgAiAGRw0DDAQLEKUVAAsAC0G4684AQRFBrITAABDIDgALIAIgBGogBCAGIAJrEO8kGgsgBSgCBAshAiAAIAY2AgggACAENgIEIAAgAjYCACAFQRBqJAALrQIBBX8jAEGAAWsiBCQAAn8CQAJAIAEoAhwiAkEQcUUEQCACQSBxDQEgADUCAEEBIAEQ8gUMAwsgACgCACEAQf8AIQIDQCAEIAIiA2oiBSAAQQ9xIgJBMHIgAkHXAGogAkEKSRs6AAAgA0EBayECIABBEEkgAEEEdiEARQ0ACwwBCyAAKAIAIQBB/wAhAgNAIAQgAiIDaiIFIABBD3EiAkEwciACQTdqIAJBCkkbOgAAIANBAWshAiAAQRBJIABBBHYhAEUNAAsgA0GBAU8EQCADQYABQeS8wAAQiA0ACyABQQFBnIrMAEECIAVBgAEgA2sQugMMAQsgA0GBAU8EQCADQYABQeS8wAAQiA0ACyABQQFBnIrMAEECIAVBgAEgA2sQugMLIARBgAFqJAAL5wIBA38jAEHwAGsiBSQAIAVBEGogARD4EAJAAkAgBSgCECIGQShqIgcgAhCPDEUEQCAHEPMKIgFFBEAgBigCgAIhASAFQQA6AFggASABIAVB2ABqEMMQEOQTIQELIAVBjAE2AlAgBSABNgJUQQEhASAFQQE2AjggBUGgxMwANgI0IAVCATcCQCAFIAVB1ABqNgJMIAUgBUHMAGo2AjwgBUHkAGogBUE0ahC+ECAFQQhqIAcQ4A8gBSAENgJgIAUgAzYCXCAFQTA6AFggBSgCCCAFKAIMIAVB2ABqEMMQIQIgBxDzCiIDRQ0CIAMoAgBBJEcNAiAGIAYpA+ACNwOYAyAGKALIAiAGQSU2AsgCQSRHDQEgBiAGKALMAhDrCQwCCyAFIAYQ5AEgBSgCBCECIAUoAgAhAQwBC0HAv8wAQShB0MPLABC8EgALIAVBEGoQgR0gACACNgIEIAAgATYCACAFQfAAaiQAC+ICAQN/IwBB8ABrIgUkACAFQRBqIAEQghECQAJAIAUoAhAiBkEoaiIHIAIQ6wtFBEAgBxCQCyIBRQRAIAYoAtgCIQEgBUEAOgBYIAEgASAFQdgAahDDEBD5EyEBCyAFQYwBNgJQIAUgATYCVEEBIQEgBUEBNgI4IAVBoMTMADYCNCAFQgE3AkAgBSAFQdQAajYCTCAFIAVBzABqNgI8IAVB5ABqIAVBNGoQvhAgBUEIaiAHEJgQIAUgBDYCYCAFIAM2AlwgBUEwOgBYIAUoAgggBSgCDCAFQdgAahDDECECIAcQkAsiA0UNAiADKAIAQSRHDQIgBiAGKQNANwN4IAYoAiggBkElNgIoQSRHDQEgBiAGKAIsEPIJDAILIAUgBhDjASAFKAIEIQIgBSgCACEBDAELQcC/zABBKEHQw8sAELwSAAsgBUEQahCqHiAAIAI2AgQgACABNgIAIAVB8ABqJAALqgICAX4EfyMAQYABayIFJAAgACgCACkDACECAn8CQAJAIAEoAhwiAEEQcUUEQCAAQSBxDQEgAkEBIAEQ8gUMAwtB/wAhAANAIAUgACIEaiIGIAKnQQ9xIgNBMHIgA0HXAGogA0EKSRs6AAAgAEEBayEAIAJCEFQgAkIEiCECRQ0ACwwBC0H/ACEAA0AgBSAAIgRqIgYgAqdBD3EiA0EwciADQTdqIANBCkkbOgAAIABBAWshACACQhBUIAJCBIghAkUNAAsgBEGBAU8EQCAEQYABQeS8wAAQiA0ACyABQQFBnIrMAEECIAZBgAEgBGsQugMMAQsgBEGBAU8EQCAEQYABQeS8wAAQiA0ACyABQQFBnIrMAEECIAZBgAEgBGsQugMLIAVBgAFqJAALswICDX8BfiMAQTBrIgMkACAAKAIEIQggACgCECEJIAAoAgwhCkEIIQcCQCAAKAIIIgAEQCAAQTBsIgJBAEggAEGq1aoVS3INAUEIIQQgACEGQQggAhCNGSIHRQ0BCyAGIABB/////wBxIgQgBCAGSxshBCADQQhqIQsDQCAEBEAgBSAIaiICKQIAIQ8gCyACQQhqELsVIAJBKGovAQAhDCACQSpqLQAAIQ0gAkEgahDxHCEOIAJBJGoQ8RwhAiADIA06ACogAyAMOwEoIAMgDzcDACADIAI2AiQgAyAONgIgIAUgB2ogA0EwEO8kGiAEQQFrIQQgBUEwaiEFDAELCyABIAk2AhAgASAKNgIMIAEgADYCCCABIAc2AgQgASAGNgIAIANBMGokAA8LIAQgAhCiIAALpwICAn8BfiMAQUBqIgIkAAJAAkACQAJAAkAgASkDAEIDfSIEp0EBakEAIARCAlQbQQFrDgIBAgALIAEtAEANAyACIAEpAyAgASgCMBDXGyACIAIoAgg2AjggAiACKQMAIgQ3AzAgACgCAEEQaiACQTBqIgEQ8AdFBEAgACgCBCABEPAHIQMgAikDMBDYDwwECyAEENgPDAMLIAJBEGogASkDECABKAIgENcbIAIgAigCGDYCOCACIAIpAxAiBDcDMAwBCyACQSBqIAEpAxAgASgCIBDXGyACIAIoAig2AjggAiACKQMgIgQ3AzALIAAoAgBBEGogAkEwaiIBEPAHRQRAIAAoAgQgARDwByEDIAIpAzAQ2A8MAQsgBBDYDwsgAkFAayQAIAMLzwIBAn8gACgCCCECIAAoAgQhAANAIAIEQAJAAkACQAJAAkACQAJAAkACQCAAKAIAIgFBBGtBACABQQVrQQhJGw4IAQIDBAUGCAcACwJAIABBCGoiASgCAEEFRgRAIABBEGopAwAQ2A8MAQsgARCrEQsgAEE8ahDsHiAAQUBrEOseIABBMGoQ7R4MBwsgABCrESAAQUBrIgEQ1wwgASgCACAAQcQAaigCABD1GiAAQSBqEPQcDAYLIABBCGoQqxEgAEEwahD7EQwFCyAAQQhqKQMAENgPIABBIGoQ+xEMBAsgAEEIahCrESAAQTxqEOweIABBQGsQ6x4gAEEwahDtHgwDCyAAQQhqKQMAENgPIABBJGoQ7B4gAEEoahDrHiAAQSxqEO0eDAILIABBBGoQtSAMAQsgAEEEahDqHgsgAkEBayECIABB2ABqIQAMAQsLC8oCAgR/AX4jAEFAaiICJAACQAJAAkAgASgCACIEIAEoAgRGDQAgASAEQRhqNgIAAkAgASgCECIDIAEoAhRGDQAgASADQQpqNgIQIAMtAAAiBUECRg0AIAJBKGogA0EJai0AADoAACACIAMpAAE3AyAMAgsgASABKAIMIgU2AhQgASABKAIIIgM2AhAgAyAFRg0AIAEgA0EKajYCECACQShqIANBCWotAAA6AAAgAiADKQABNwMgIAMtAAAiBUECRw0BCyAAQYGAgIB4NgIADAELIAJBGGogAkEoai0AADoAACACIAIpAyAiBjcDECACQSxqIAIoABc2AAAgAiAFOgAkIAIgBDYCICACIAY3ACUgAkEIaiAEELYYIAJBNGoiASACKAIIIAIoAgwQ5hkgACABIAQoAgwgBCgCECACQSRqELwECyACQUBrJAALowIBBn8jAEEgayIEJAAgASADTwRAIARBBGogACAAIANBAnQiBWoiByACIAIgBWoQwBBBACEFIAQoAhgiACAEKAIUIgJrIgZBACAAIAZPGyEAIAJBAnQiAiAEKAIMaiEGIAQoAgQgAmohAgNAIAAEQCACIAUgAigCACIIIAYoAgBqIgVqIgk2AgAgBSAISSAFIAlLciEFIABBAWshACAGQQRqIQYgAkEEaiECDAELCwJAIAVFDQAgAUECdCADQQJ0ayECA0AgAkUNASAHIAcoAgBBAWoiADYCACACQQRrIQIgB0EEaiEHIABFDQALCyAEQSBqJAAPCyAEQQA2AhQgBEEBNgIIIARB5J7MADYCBCAEQgQ3AgwgBEEEakG89sEAEPIQAAvmRQEHfyMAQTBrIgUkAAJAAkACQAJAAkACQCABLQAIQbgBRgRAIAEoAhAhAyABKAIMIQQgASgCHCEGIAEoAhghByAFIAEoAhQiCCgCACACEJIGIAAgBSAEIAMgByAGELMLIgIpAgA3AgAgAEEIaiACQQhqKAIANgIAIAgQ2SIgAS0ACEG4AUcNAQwFCyABKAIEIQcgASgCACEIIAUgARDwFSAFQRhqIQMgBSEBIwBB0ABrIgQkAAJAAkACfwJAAkACQAJAAkACQANAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABLQAAQQFrDroBAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKCkqKywtLi8wwQExMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBugEACyADQQ42AgggA0HYjMUANgIEIANBgICAgHg2AgAMwQELIANBGjYCCCADQcmNxQA2AgQgA0GAgICAeDYCAAzAAQsgA0EgNgIIIANB443FADYCBCADQYCAgIB4NgIADL8BCyADQS82AgggA0GDjsUANgIEIANBgICAgHg2AgAMvgELIANB0wA2AgggA0GyjsUANgIEIANBgICAgHg2AgAMvQELIANBKTYCCCADQYWPxQA2AgQgA0GAgICAeDYCAAy8AQsgA0EmNgIIIANBro/FADYCBCADQYCAgIB4NgIADLsBCyADQSo2AgggA0HUj8UANgIEIANBgICAgHg2AgAMugELIANBETYCCCADQf6PxQA2AgQgA0GAgICAeDYCAAy5AQsgA0EXNgIIIANBj5DFADYCBCADQYCAgIB4NgIADLgBCyADQSw2AgggA0GmkMUANgIEIANBgICAgHg2AgAMtwELIANB4gA2AgggA0HSkMUANgIEIANBgICAgHg2AgAMtgELIANBGjYCCCADQbSRxQA2AgQgA0GAgICAeDYCAAy1AQsgA0ElNgIIIANBzpHFADYCBCADQYCAgIB4NgIADLQBCyADQRw2AgggA0HzkcUANgIEIANBgICAgHg2AgAMswELIANBJzYCCCADQY+SxQA2AgQgA0GAgICAeDYCAAyyAQsgA0EnNgIIIANBtpLFADYCBCADQYCAgIB4NgIADLEBCyADQSc2AgggA0HdksUANgIEIANBgICAgHg2AgAMsAELIANBMDYCCCADQYSTxQA2AgQgA0GAgICAeDYCAAyvAQsgA0EpNgIIIANBtJPFADYCBCADQYCAgIB4NgIADK4BCyADQTU2AgggA0Hdk8UANgIEIANBgICAgHg2AgAMrQELIANBMzYCCCADQZKUxQA2AgQgA0GAgICAeDYCAAysAQsgA0EfNgIIIANBxZTFADYCBCADQYCAgIB4NgIADKsBCyABLQABQQJrIgFBB3QgAUH+AXFBAXZyQf8BcQ4IpAGjAaMBpQGmAaMBowGnAaMBCyADQSg2AgggA0G8lcUANgIEIANBgICAgHg2AgAMqQELIANBJTYCCCADQeSVxQA2AgQgA0GAgICAeDYCAAyoAQsgA0EaNgIIIANBiZbFADYCBCADQYCAgIB4NgIADKcBCyADQRw2AgggA0GjlsUANgIEIANBgICAgHg2AgAMpgELIANBFzYCCCADQb+WxQA2AgQgA0GAgICAeDYCAAylAQsgBCABQQhqNgIgIARBATYCPCAEQYSXxQA2AjggBEIBNwJEIARB1QM2AjAgBCAEQSxqNgJAIAQgBEEgajYCLCAEQRBqIARBOGoQvhAgA0EIaiAEQRhqKAIANgIAIAMgBCkCEDcCAAykAQsgA0EbNgIIIANBjJfFADYCBCADQYCAgIB4NgIADKMBCyADQRU2AgggA0Gnl8UANgIEIANBgICAgHg2AgAMogELIANBHzYCCCADQbyXxQA2AgQgA0GAgICAeDYCAAyhAQsgBCABQQRqNgIgIARBATYCPCAEQfCXxQA2AjggBEIBNwJEIARB0AM2AjAgBCAEQSxqNgJAIAQgBEEgajYCLCAEQRBqIARBOGoQvhAgA0EIaiAEQRhqKAIANgIAIAMgBCkCEDcCAAygAQsgA0EVNgIIIANB+JfFADYCBCADQYCAgIB4NgIADJ8BCyADQRY2AgggA0GNmMUANgIEIANBgICAgHg2AgAMngELIAQgAUEEajYCICAEQQE2AjwgBEHMmMUANgI4IARCATcCRCAEQRk2AjAgBCAEQSxqNgJAIAQgBEEgajYCLCAEQRBqIARBOGoQvhAgA0EIaiAEQRhqKAIANgIAIAMgBCkCEDcCAAydAQsgA0EmNgIIIANB1JjFADYCBCADQYCAgIB4NgIADJwBCyADQS02AgggA0H6mMUANgIEIANBgICAgHg2AgAMmwELIAQgAUEIajYCICAEQQI2AjwgBEHYmcUANgI4IARCATcCRCAEQdUDNgIwIAQgBEEsajYCQCAEIARBIGo2AiwgBEEQaiAEQThqEL4QIANBCGogBEEYaigCADYCACADIAQpAhA3AgAMmgELIANBOzYCCCADQeiZxQA2AgQgA0GAgICAeDYCAAyZAQsgA0HMADYCCCADQaOaxQA2AgQgA0GAgICAeDYCAAyYAQsgA0E6NgIIIANB75rFADYCBCADQYCAgIB4NgIADJcBCyADQcoANgIIIANBqZvFADYCBCADQYCAgIB4NgIADJYBCyADQTE2AgggA0Hzm8UANgIEIANBgICAgHg2AgAMlQELIANBFDYCCCADQaScxQA2AgQgA0GAgICAeDYCAAyUAQsgA0EfNgIIIANBuJzFADYCBCADQYCAgIB4NgIADJMBCyADQTI2AgggA0HXnMUANgIEIANBgICAgHg2AgAMkgELIAQgAUEMajYCDCAEIAFBBGo2AiAgBEEcakEZNgIAIARBAjYCPCAEQaidxQA2AjggBEICNwJEIARBBjYCFCAEIARBEGo2AkAgBCAEQSBqNgIYIAQgBEEMajYCECAEQSxqIARBOGoQvhAgA0EIaiAEQTRqKAIANgIAIAMgBCkCLDcCAAyRAQsgA0EeNgIIIANB/J3FADYCBCADQYCAgIB4NgIADJABCyADQSU2AgggA0GansUANgIEIANBgICAgHg2AgAMjwELIAQgAUEEajYCDCAEIAFBCGo2AiAgBEEcakEGNgIAIARBAzYCPCAEQdSexQA2AjggBEICNwJEIARBjgE2AhQgBCAEQRBqNgJAIAQgBEEgajYCGCAEIARBDGo2AhAgBEEsaiAEQThqEL4QIANBCGogBEE0aigCADYCACADIAQpAiw3AgAMjgELIANBGjYCCCADQeyexQA2AgQgA0GAgICAeDYCAAyNAQsgA0HVADYCCCADQYafxQA2AgQgA0GAgICAeDYCAAyMAQsgA0EyNgIIIANB25/FADYCBCADQYCAgIB4NgIADIsBCyADQdIANgIIIANBjaDFADYCBCADQYCAgIB4NgIADIoBCyADQSw2AgggA0HfoMUANgIEIANBgICAgHg2AgAMiQELIANBMzYCCCADQYuhxQA2AgQgA0GAgICAeDYCAAyIAQsgA0EiNgIIIANBvqHFADYCBCADQYCAgIB4NgIADIcBCyADQTc2AgggA0HgocUANgIEIANBgICAgHg2AgAMhgELIANBKDYCCCADQZeixQA2AgQgA0GAgICAeDYCAAyFAQsgA0ENNgIIIANBv6LFADYCBCADQYCAgIB4NgIADIQBCyADQRE2AgggA0HMosUANgIEIANBgICAgHg2AgAMgwELIANBFTYCCCADQd2ixQA2AgQgA0GAgICAeDYCAAyCAQsgA0EZNgIIIANB8qLFADYCBCADQYCAgIB4NgIADIEBCyADQQ42AgggA0GLo8UANgIEIANBgICAgHg2AgAMgAELIANBGjYCCCADQZmjxQA2AgQgA0GAgICAeDYCAAx/CyAEIAFBCGo2AiAgBEECNgI8IARB0KPFADYCOCAEQgE3AkQgBEHVAzYCMCAEIARBLGo2AkAgBCAEQSBqNgIsIARBEGogBEE4ahC+ECADQQhqIARBGGooAgA2AgAgAyAEKQIQNwIADH4LIANBJTYCCCADQeCjxQA2AgQgA0GAgICAeDYCAAx9CyADQS02AgggA0GFpMUANgIEIANBgICAgHg2AgAMfAsgA0E8NgIIIANBsqTFADYCBCADQYCAgIB4NgIADHsLIANBNDYCCCADQe6kxQA2AgQgA0GAgICAeDYCAAx6CyADQSs2AgggA0GipcUANgIEIANBgICAgHg2AgAMeQsgA0EtNgIIIANBzaXFADYCBCADQYCAgIB4NgIADHgLIANBJDYCCCADQfqlxQA2AgQgA0GAgICAeDYCAAx3CyADQR02AgggA0GepsUANgIEIANBgICAgHg2AgAMdgsgA0EoNgIIIANBu6bFADYCBCADQYCAgIB4NgIADHULIANBLjYCCCADQeOmxQA2AgQgA0GAgICAeDYCAAx0CyADQSo2AgggA0GRp8UANgIEIANBgICAgHg2AgAMcwsgA0E2NgIIIANBu6fFADYCBCADQYCAgIB4NgIADHILIANBPjYCCCADQfGnxQA2AgQgA0GAgICAeDYCAAxxCyADQTM2AgggA0GvqMUANgIEIANBgICAgHg2AgAMcAsgA0EpNgIIIANB4qjFADYCBCADQYCAgIB4NgIADG8LIANBGTYCCCADQYupxQA2AgQgA0GAgICAeDYCAAxuCyADQTs2AgggA0GkqcUANgIEIANBgICAgHg2AgAMbQsgA0E9NgIIIANB36nFADYCBCADQYCAgIB4NgIADGwLIANBLTYCCCADQZyqxQA2AgQgA0GAgICAeDYCAAxrCyAEIAFBCGo2AiAgBEECNgI8IARB+KrFADYCOCAEQgE3AkQgBEHVAzYCMCAEIARBLGo2AkAgBCAEQSBqNgIsIARBEGogBEE4ahC+ECADQQhqIARBGGooAgA2AgAgAyAEKQIQNwIADGoLIANBOjYCCCADQYirxQA2AgQgA0GAgICAeDYCAAxpCyADQfAANgIIIANBwqvFADYCBCADQYCAgIB4NgIADGgLIANBNTYCCCADQbKsxQA2AgQgA0GAgICAeDYCAAxnCyADQckANgIIIANB56zFADYCBCADQYCAgIB4NgIADGYLIANBKTYCCCADQbCtxQA2AgQgA0GAgICAeDYCAAxlCyADQSY2AgggA0HZrcUANgIEIANBgICAgHg2AgAMZAsgA0E7NgIIIANB/63FADYCBCADQYCAgIB4NgIADGMLIANBODYCCCADQbquxQA2AgQgA0GAgICAeDYCAAxiCyAEIAFBCGo2AiAgBEECNgI8IARBqK/FADYCOCAEQgE3AkQgBEHVAzYCMCAEIARBLGo2AkAgBCAEQSBqNgIsIARBEGogBEE4ahC+ECADQQhqIARBGGooAgA2AgAgAyAEKQIQNwIADGELIANBJzYCCCADQbivxQA2AgQgA0GAgICAeDYCAAxgCyADQRs2AgggA0Hfr8UANgIEIANBgICAgHg2AgAMXwsgA0EhNgIIIANB+q/FADYCBCADQYCAgIB4NgIADF4LIANBJTYCCCADQZuwxQA2AgQgA0GAgICAeDYCAAxdCyADQc4ANgIIIANBwLDFADYCBCADQYCAgIB4NgIADFwLIANBHTYCCCADQY6xxQA2AgQgA0GAgICAeDYCAAxbCyADQTk2AgggA0GrscUANgIEIANBgICAgHg2AgAMWgsgA0E5NgIIIANB5LHFADYCBCADQYCAgIB4NgIADFkLIANBOTYCCCADQZ2yxQA2AgQgA0GAgICAeDYCAAxYCyADQS42AgggA0HWssUANgIEIANBgICAgHg2AgAMVwsgBCABQQhqNgIgIARBAjYCPCAEQayzxQA2AjggBEIBNwJEIARB1QM2AjAgBCAEQSxqNgJAIAQgBEEgajYCLCAEQRBqIARBOGoQvhAgA0EIaiAEQRhqKAIANgIAIAMgBCkCEDcCAAxWCyADQT82AgggA0G8s8UANgIEIANBgICAgHg2AgAMVQsgA0E2NgIIIANB+7PFADYCBCADQYCAgIB4NgIADFQLIAQgAUEIajYCICAEQQI2AjwgBEGQtcUANgI4IARCATcCRCAEQdUDNgIwIAQgBEEsajYCQCAEIARBIGo2AiwgBEEQaiAEQThqEL4QIANBCGogBEEYaigCADYCACADIAQpAhA3AgAMUwsgA0HGADYCCCADQaC1xQA2AgQgA0GAgICAeDYCAAxSCyADQSg2AgggA0HmtcUANgIEIANBgICAgHg2AgAMUQsgBCABQQRqNgIgIARBAjYCPCAEQbS2xQA2AjggBEIBNwJEIARB1gM2AjAgBCAEQSxqNgJAIAQgBEEgajYCLCAEQRBqIARBOGoQvhAgA0EIaiAEQRhqKAIANgIAIAMgBCkCEDcCAAxQCyADQSE2AgggA0HEtsUANgIEIANBgICAgHg2AgAMTwsgA0EWNgIIIANB5bbFADYCBCADQYCAgIB4NgIADE4LIANBFDYCCCADQfu2xQA2AgQgA0GAgICAeDYCAAxNCyADQR02AgggA0GPt8UANgIEIANBgICAgHg2AgAMTAsgA0ExNgIIIANBrLfFADYCBCADQYCAgIB4NgIADEsLIANBMzYCCCADQd23xQA2AgQgA0GAgICAeDYCAAxKCyAEIAFBCGo2AgwgBCABQRBqNgIgIARBHGpB1QM2AgAgBEEDNgI8IARBtLjFADYCOCAEQgI3AkQgBEHVAzYCFCAEIARBEGo2AkAgBCAEQSBqNgIYIAQgBEEMajYCECAEQSxqIARBOGoQvhAgA0EIaiAEQTRqKAIANgIAIAMgBCkCLDcCAAxJCyAEIAFBCGo2AiAgBEECNgI8IARB5LjFADYCOCAEQgE3AkQgBEHVAzYCMCAEIARBLGo2AkAgBCAEQSBqNgIsIARBEGogBEE4ahC+ECADQQhqIARBGGooAgA2AgAgAyAEKQIQNwIADEgLIANBPzYCCCADQfS4xQA2AgQgA0GAgICAeDYCAAxHCyADQcUANgIIIANBs7nFADYCBCADQYCAgIB4NgIADEYLIANBJDYCCCADQfi5xQA2AgQgA0GAgICAeDYCAAxFCyADQSM2AgggA0GcusUANgIEIANBgICAgHg2AgAMRAsgA0ErNgIIIANBv7rFADYCBCADQYCAgIB4NgIADEMLIANBODYCCCADQeq6xQA2AgQgA0GAgICAeDYCAAxCCyADQc4ANgIIIANBorvFADYCBCADQYCAgIB4NgIADEELIAQgAUEIajYCICAEQQI2AjwgBEGovMUANgI4IARCATcCRCAEQdUDNgIwIAQgBEEsajYCQCAEIARBIGo2AiwgBEEQaiAEQThqEL4QIANBCGogBEEYaigCADYCACADIAQpAhA3AgAMQAsgA0E6NgIIIANBuLzFADYCBCADQYCAgIB4NgIADD8LIANBMjYCCCADQfK8xQA2AgQgA0GAgICAeDYCAAw+CyADQSM2AgggA0GkvcUANgIEIANBgICAgHg2AgAMPQsgA0EpNgIIIANBx73FADYCBCADQYCAgIB4NgIADDwLIANBOTYCCCADQfC9xQA2AgQgA0GAgICAeDYCAAw7CyADQdYANgIIIANBqb7FADYCBCADQYCAgIB4NgIADDoLIANBPzYCCCADQf++xQA2AgQgA0GAgICAeDYCAAw5CyADQSo2AgggA0G+v8UANgIEIANBgICAgHg2AgAMOAsgA0ETNgIIIANB6L/FADYCBCADQYCAgIB4NgIADDcLIANBDTYCCCADQfu/xQA2AgQgA0GAgICAeDYCAAw2CyADQQ82AgggA0GIwMUANgIEIANBgICAgHg2AgAMNQsgA0HTADYCCCADQZfAxQA2AgQgA0GAgICAeDYCAAw0CyADQcYANgIIIANB6sDFADYCBCADQYCAgIB4NgIADDMLIANBKTYCCCADQbDBxQA2AgQgA0GAgICAeDYCAAwyCyADQTI2AgggA0HZwcUANgIEIANBgICAgHg2AgAMMQsgA0EsNgIIIANBi8LFADYCBCADQYCAgIB4NgIADDALIANBMDYCCCADQbfCxQA2AgQgA0GAgICAeDYCAAwvCyADQT02AgggA0HnwsUANgIEIANBgICAgHg2AgAMLgsgA0EeNgIIIANBpMPFADYCBCADQYCAgIB4NgIADC0LIANBMjYCCCADQcLDxQA2AgQgA0GAgICAeDYCAAwsCyADQSY2AgggA0H0w8UANgIEIANBgICAgHg2AgAMKwsgA0EgNgIIIANBmsTFADYCBCADQYCAgIB4NgIADCoLIANBODYCCCADQbrExQA2AgQgA0GAgICAeDYCAAwpCyADQRw2AgggA0HyxMUANgIEIANBgICAgHg2AgAMKAsgA0EiNgIIIANBjsXFADYCBCADQYCAgIB4NgIADCcLIANBOjYCCCADQbDFxQA2AgQgA0GAgICAeDYCAAwmCyADQTM2AgggA0HqxcUANgIEIANBgICAgHg2AgAMJQsgA0HEADYCCCADQZ3GxQA2AgQgA0GAgICAeDYCAAwkCyAEIAFBCGo2AgwgBCABQRBqNgIgIARBHGpB1QM2AgAgBEEDNgI8IARBhMfFADYCOCAEQgI3AkQgBEHVAzYCFCAEIARBEGo2AkAgBCAEQSBqNgIYIAQgBEEMajYCECAEQSxqIARBOGoQvhAgA0EIaiAEQTRqKAIANgIAIAMgBCkCLDcCAAwjCyADQTo2AgggA0Gcx8UANgIEIANBgICAgHg2AgAMIgsgA0EuNgIIIANB1sfFADYCBCADQYCAgIB4NgIADCELIANBLTYCCCADQYTIxQA2AgQgA0GAgICAeDYCAAwgCyAEIAFBCGo2AiAgBEECNgI8IARB4MjFADYCOCAEQgE3AkQgBEHVAzYCMCAEIARBLGo2AkAgBCAEQSBqNgIsIARBEGogBEE4ahC+ECADQQhqIARBGGooAgA2AgAgAyAEKQIQNwIADB8LIAQgAUEIajYCICAEQQI2AjwgBEHEycUANgI4IARCATcCRCAEQdUDNgIwIAQgBEEsajYCQCAEIARBIGo2AiwgBEEQaiAEQThqEL4QIANBCGogBEEYaigCADYCACADIAQpAhA3AgAMHgsgBCABQQhqNgIgIARBAjYCPCAEQaTKxQA2AjggBEIBNwJEIARB1QM2AjAgBCAEQSxqNgJAIAQgBEEgajYCLCAEQRBqIARBOGoQvhAgA0EIaiAEQRhqKAIANgIAIAMgBCkCEDcCAAwdCyADQegANgIIIANBtMrFADYCBCADQYCAgIB4NgIADBwLIANB6AA2AgggA0Gcy8UANgIEIANBgICAgHg2AgAMGwsgA0HEADYCCCADQYTMxQA2AgQgA0GAgICAeDYCAAwaCyADQdMANgIIIANByMzFADYCBCADQYCAgIB4NgIADBkLIANB1wA2AgggA0GbzcUANgIEIANBgICAgHg2AgAMGAsgA0HaADYCCCADQfLNxQA2AgQgA0GAgICAeDYCAAwXCyADQRI2AgggA0HMzsUANgIEIANBgICAgHg2AgAMFgsgA0EZNgIIIANB3s7FADYCBCADQYCAgIB4NgIADBULIANBKTYCCCADQffOxQA2AgQgA0GAgICAeDYCAAwUCyADQckANgIIIANBoM/FADYCBCADQYCAgIB4NgIADBMLIANBzgA2AgggA0Hpz8UANgIEIANBgICAgHg2AgAMEgsgA0HXADYCCCADQbfQxQA2AgQgA0GAgICAeDYCAAwRCyADQT42AgggA0GO0cUANgIEIANBgICAgHg2AgAMEAsgA0HqADYCCCADQczRxQA2AgQgA0GAgICAeDYCAAwPCyADQeEANgIIIANBttLFADYCBCADQYCAgIB4NgIADA4LIANBwwA2AgggA0GX08UANgIEIANBgICAgHg2AgAMDQsgA0E1NgIIIANB2tPFADYCBCADQYCAgIB4NgIADAwLIAQgAUEIajYCICAEQQI2AjwgBEHM1MUANgI4IARCATcCRCAEQdUDNgIwIAQgBEEsajYCQCAEIARBIGo2AiwgBEEQaiAEQThqEL4QIANBCGogBEEYaigCADYCACADIAQpAhA3AgAMCwsgASgCDCgCAEEIaiEBDAELCyADQeEANgIIIANB3NTFADYCBCADQYCAgIB4NgIADAgLIANB7gA2AgggA0G91cUANgIEIANBgICAgHg2AgAMBwtBwL/MAEEoQayVxQAQvBIACyAEQeSUxQA2AixBCAwDCyAEQeyUxQA2AixBCAwCCyAEQfSUxQA2AixBCQwBCyAEQf2UxQA2AixBDQshASAEQQI2AiQgBCABNgIwIARBAjYCPCAEQZyVxQA2AjggBEIBNwJEIAQgBEEsajYCICAEIARBIGo2AkAgBEEQaiAEQThqEL4QIANBCGogBEEYaigCADYCACADIAQpAhA3AgAMAQsCQCABKAIMIgZBA08EQCAEQSxqIgkgASgCCCIBIAZBAWsiBkG4ncUAQQMQgwMgBEEBNgI8IARBwJ3FADYCOCAEQgE3AkQgBEECNgIkIAQgASAGQQN0ajYCICAEIARBIGo2AkAgBEEQaiAEQThqEL4QIAkgBCgCFCIBIAQoAhgQjxIgBEEoaiAEQTRqKAIANgIAIAQgBCkCLDcDICAEKAIQIAEQxxwMAQsgBEEgaiAB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ACgCACICQQlHBEACQAJAAkACQAJAAkACQAJAAkAgAkEBaw4IAQIDBAUGBwgACyAAKAIMQcgAbCEEIAAoAgghAgNAIAQEQAJAAkACQAJAIAIpAwBCA30iB6dBAWpBACAHQgJUG0EBaw4CAQIACyABIAJBIGoQpQcgAiABEPobDAILIAEgAkEQahClBwwBCyABIAJBEGoQpQcLIAJByABqIQIgBEHIAGshBAwBCwsgAEEcaiABEPsbDAkLIABBCGogARCcBgwICyAAKAIMQdAAbCEEIAAoAgghAgNAIAQEQAJAAkACQAJAQgIgAikDAEICfSIHIAdCAlobp0EBaw4CAQIACyACQQhqIAEQjRoMAgsgASACQQhqEKUHDAELIAIgARCNGiACQSBqIAEQ+hsLIAJB0ABqIQIgBEHQAGshBAwBCwsgAEEcaiABEPsbDAcLAkACQCAAKAIIQQFrDgIBCAALIABBEGogARC3HwwHCyABIABBEGoQ+g0MBgsgAEEEaiABEOIiDAULIABBEGogARD7GwwECyABIAAoAgRBKGoQpQcMAwsgAEEEaiABEOIiDAILIAEgAEEQahClBwUgAEEIaiABEO8DCwwACwALBSABIAJBCGoQpQcgAigCICECDAELCwsgBUEQaiQAC8kCAQR/IwBBIGsiAyQAIAFBKGoiBBD8GCEGAkACQAJAAkACQCAEEJALIgVFDQAgBSgCAEECRw0AIAUtAAgNACAFLQAJQQJGDQELIANBEGogBBC5CSADIAQQmBAgA0GwzssANgIMIANBNDoACCADKAIAIAMoAgQgA0EIahDDECEFIAQQkAsiBEUNAiAEKAIAQSRGDQEMAgsgASgCKCEEIAFBJTYCKCABIAEpA0A3A3ggA0EUaiABQTRqKQIANwIAIANBHGogAUE8aigCADYCACADIAEpAiw3AgwgAyAENgIIIANBCGoQ4gggACABQQEgBiACENwFDAILIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRwRAQcC/zABBKEHIzssAELwSAAsgASABKAIsEPIJCyAAQQg2AgAgACAFNgIEIAIQ7R4LIANBIGokAAusAgIEfwJ+IwBBIGsiAiQAAkACQAJAIAEOAgACAQsgAEEANgIIDAELAkAgAWlBAUcEQCAAKAIIQQJ0IQMgAa0hByAAKAIEIQEMAQsg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IAAoAiAgARBCDAULIABBIGogARCSJAwECyAAKAIEIAEQzQ8MAwsgACgCBCABEM0PDAILIAAoAgQiACgCKEEwbCECIAAoAiRBKGohAANAIAJFDQIgACgCAARAIAAgARCGJAsgAkEwayECIABBMGohAAwACwALIAMgACgCBCIAQQhqQQAgACkDAFAbENMQIAMpAwAiBFANASABKAIIIQIgASADKAIINgIIIAEpAwAhBSABIAQ3AwAgAC0ARUEDRwR+IABBIGogARCGDCABKQMABSAECxDkHiABIAI2AgggASAFNwMACyADQRBqJAAPC0HQkssAQSpB/JLLABDIDgALhgIBA38jAEEQayICJAACQAJ/AkAgAUGAAU8EQCACQQA2AgwgAUGAEEkNASABQYCABEkEQCACIAFBDHZB4AFyOgAMIAIgAUEGdkE/cUGAAXI6AA1BAiEDQQMMAwsgAiABQQZ2QT9xQYABcjoADiACIAFBDHZBP3FBgAFyOgANIAIgAUESdkEHcUHwAXI6AAxBAyEDQQQMAgsgACgCCCIEIAAoAgBGBEAgABDpCAsgACAEQQFqNgIIIAAoAgQgBGogAToAAAwCCyACIAFBBnZBwAFyOgAMQQEhA0ECCyEEIAMgAkEMaiIDciABQT9xQYABcjoAACAAIAMgBBCPEgsgAkEQaiQAQQALlwICAn8BfiMAQSBrIgMkACABQRhqIQQCQAJAAkACQAJAIAEtACxBAkYEQCADQRBqIAQoAgAgAhDbBiADLQAQQQRGDQIgAykDECIFQv8Bg0IEUg0BDAILIANBEGogBCACEOcOIAMtABBBBEYNASADKQMQIgVC/wGDQgRRDQELIAVC/wGDQgRSDQELIANBADYCECADQQhqIAIgA0EQakGYh8wAQQEQmg8gAy0ACEEERwRAIAMpAwgiBUL/AYNCBFINAgsgA0EQaiABIAIQig8CQCADLQAQQQRHBEAgAykDECIFQv8Bg0IEUg0BCyAAQQQ6AAAMAwsgACAFNwIADAILIAAgBTcCAAwBCyAAIAU3AgALIANBIGokAAv/AQEGfyMAQYABayICJAAgAUEEaiEFIAJBOGohBgNAIAJBNGogARDWBAJAAkAgAigCNARAIAAgAikCNDcCACAAQRhqIAJBzABqKAIANgIAIABBEGogAkHEAGopAgA3AgAgAEEI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ELwdIABBJGoQpAMPCyAAKAIEIgBCADcDGCAAQgA3AwggACgCKEEwbCEBIAAoAiQhA0EAIQADQCAAIAFGDQIgACADaiICQRBqQgA3AgAgAkEgakIANwIAIAJBKGoiAigCAARAIAIQ+CQLIABBMGohAAwACwALIAAoAgQiAEIANwNIIABCADcDECAALQBFQQNGDQAgAEEgaiEBA0AgAS0AJUECRgRAAkAgAUIANwIMIAEoAgQiACABKAIIQThsaiEGA0ACQAJAAkACQAJAAkACQCAAIAZHBEAgAEE4aiECIAAoAgAiAUEJRg0BAkACQAJAIAFBAWsOCAECCgkIBwYFAAsgAEIANwIUIAAoAgxByABsIQQgACgCCCEFQQAhAQNAIAEgBEcEQAJAAkACQAJAIAEgBWoiAykDAEIDfSIHp0EBakEAIAdCAlQbQQFrDgIBAgALIANBKGpCADcCACADQThqQgA3AgAgAxD9GwwCCyADQRhqQgA3AgAgA0EIakIANwIADAELIANBGGpCADcCACADQQhqQgA3AgALIAFByABqIQEMAQsLIAAoAhBCADcDCCAAQRxqEL8dIAIhAAwKCyAAQgA3AjAgAEEIahCVByACIQAMCQsgAEIANwIQIAAoAgxB0ABsIQQgACgCCCEFQQAhAQNAAkAgASAERwRAAkACQAJAQgIgASAFaiIDKQMAQgJ9IgcgB0ICWhunQQFrDgIBAgALIANBGGpCADcCACADQShqQgA3AgAMAwsgA0EQakIANwIADAILIANBEGpCADcCACADQUBrQgA3AgAgA0EgahD9GwwBCyAAKAIYIgEEQCABQgA3AggLIABBHGoQvx0gAiEADAoLIAFB0ABqIQEMAAsACwwICyAAQQhqEL8DIAIhAAwGCyAAQgA3AhggAEIANwIIIAIhAAwFCyAAQgA3AgggAEEEahD4JCACIQAMBAsgACgCBCIAQgA3AzAgAEIANwMgIAApAwBQBEAgAEEIahCkFyACIQAMBAsgAEIANwMIIABCADcDGCACIQAMAwsgAEIANwIIIAAoAgRCADcDCCAAQRBqEL8dIAIhAAwCCyAAQgA3AgggAEEEahD4JCACIQAMAQsgAEIANwIwAkACQAJAIAAoAghBAWsOAgECAAsgAEEQahCzGSACIQAMAgsgAEEQahCyGSACIQAMAQsgAEEM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IAJrIAFBCBCFDgsLjAIBAX8jAEHQAGsiAiQAIAAoAgAhACACQcgAakHAhcYANgIAIAJBQGtBuO3EADYCACACQThqQbjtxAA2AgAgAkEwakHY8MQANgIAIAJBKGpBuO3EADYCACACQSBqQfjyxAA2AgAgAkEYakHo8sQANgIAIAJBEGpBtPTEADYCACACIABBIGo2AjwgAiAAQR9qNgI0IAIgAEEcajYCLCACIABBHmo2AiQgAiAAQR1qNgIcIAIgAEEYajYCFCACIAA2AgwgAkGghcYANgIIIAIgAEEQajYCBCACIABBIWo2AkwgAiACQcwAajYCRCABQbnyxABBDUGI88QAQQkgAkEEakEJEPUGIAJB0ABqJAALjAIBAX8jAEHQAGsiAiQAIAAoAgAhACACQcgAakHAhcYANgIAIAJBQGtBuO3EADYCACACQThqQbjtxAA2AgAgAkEwakHY8MQANgIAIAJBKGpBuO3EADYCACACQSBqQfjyxAA2AgAgAkEYakHo8sQANgIAIAJBEGpBqPDEADYCACACIABBLmo2AjwgAiAAQS1qNgI0IAIgAEExajYCLCACIABBLGo2AiQgAiAAQTBqNgIcIAIgAEEoajYCFCACIAA2AgwgAkGghcYANgIIIAIgAEEgajYCBCACIABBL2o2AkwgAiACQcwAajYCRCABQdDzxABBC0GI88QAQQkgAkEEakEJEPUGIAJB0ABqJAAL1wIBAX8CQAJAAkACQAJAAkACQCAAKAIAQQFrDgcBAgMGBgQFAAsgAEEIaiABEJ4bDwsgAEEIaiABEJ8bDwsgACgCBCABEMUPDwsgACgCBCABEMUPDwsgASAAKAIEIgApAwAgAEEQaigCABCKFSAAKAIoQTBsIQIgACgCJEEoaiEAA0AgAkUNAiAAQShrKQMAUARAIAEgAEEgaykDACAAQRBrKAIAEIoVCyAAKAIABEAgACABEOciCyACQTBrIQIgAEEwaiEADAALAAsgACgCBCIAKQMAUARAIAEgACkDCCAAQRhqKAIAEIoVCyAALQBFQQNGDQAgAEEgaiEAA0AgAC0AJUECRgRAAkAgACgCCEE4bCECIAAoAgQhAANAIAJFDQEgACABEPYFIAJBOGshAiAAQThqIQAMAAsACwUgASAAKQMIIAAoAhgQihUgACgCICEADAELCwsLiQIB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QQhqIgcgA0HoAGpBKBDvJBogBCAHQSgQ7yQiBEE0aiAKOgAAIARBMGogBTYCACAEQSxqIAk2AgAgBEEoaiAINgIAIAZBAWshBiAEQThqIQQMAQsLIAAgASkCADcCACAAQQhqIAFBCGooAgA2AgAgA0GQAWokAAv3AQEDfyMAQTBrIgMkACABIAAtAIUDQQBHEOQJRQRAIANBEGogARDNAiADKAIUIQQgAygCECEFIANBqgE6ABggACAFIAQgA0EYahChFQsCQCAALQD4AkECRw0AIAAtAPwCDQACQCABKAIAQRpHDQAgAUEIahDsFUUNACADIAEQzQIgAygCBCEBIAMoAgAhAiADQYYBOgAYIAAgAiABIANBGGoQpxgMAQsgASAALQCFA0EARxDkCQ0AIAEgAhCjEEUNACADQQhqIAEQzQIgAygCDCEBIAMoAgghAiADQaoBOgAYIAAgAiABIANBGGoQoRULIANBMGokAAv+AQEHfyMAQRBrIgMkACACKAIEIQQgASgCBCEFIAItAAwhCCABLQAMIQkCQAJAAkAgASgCCCIGBEAgAigCCCIHDQELIANBCGpB1IPMACgCADYCACADQcyDzAApAgA3AwAMAQsgB0EBRgRAIANBCGogAUEIaigCADYCACADIAEpAgA3AwAgAyAEKAIAEJ4GIAQhBSACIQEMAgsgBkEBRgRAIANBCGogAkEIaigCADYCACADIAIpAgA3AwAgAyAFKAIAEJ4GDAILIAMgBSAGIAQgBxDECwsgAigCACAEENoaCyABKAIAIAUQ2hogACAJIAgQhhEgAxDsDiADQRBqJAAL8gECBH8IfiMAQSBrIgIkACACQRBqIgQgAUEQaikDADcDACACQQhqIgMgAUEIaikDADcDACACQRhqIgUgASkDMCABNQI4QjiGhCIGIAFBGGopAwCFNwMAIAIgASkDADcDACACEKMJIAMgAykDAELuAYU3AwAgAiACKQMAIAaFNwMAIAIQ/gUgBCAEKQMAIgZC3QGFNwMAIAMpAwAhByACKQMAIQggBSkDACEJIAIQ/gUgBSkDACEKIAMpAwAhCyAEKQMAIQwgAikDACENIAAgBiAJIAcgCIWFhTcDACAAIAogCyAMIA2FhYU3AwggAkEgaiQAC/YBAQN/IwBBIGsiAiQAIAJBEGogARBzIAIoAhQhAwJA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QQhrcWpBCGogAzoAACAAIAAoAgxBAWo2AgwgACAAKAIIIAZBAXFrNgIIIAQgBUEDdGtBCGsgBzcDAAsgAkEgaiQAC/EBAQN/IAAoAghBDGwhAyAAKAIEIQADQCADBEACQCAAKAIABEAgACABEIIkDAELAkACQAJAAkACQEEEIAAoAgQiAigCAEEFayIEIARBBk8bQQFrDgUAAQIDBAULIAJBCGogARCaGiACQShqIAEQgiQMBAsgAkEoaiABEIIkDAMLIAJBCGogARCaGiACQShqIAEQkRwMAgsgAiABEJoaIAIoAiBBB0cEQCABIAJBIGoQzwYLIAEgAigCaBDPBiACQcgAaiABEJEcDAELIAJBCGogARCaGiACQShqIAEQhSQLIABBDGohACADQQxrIQMMAQsLC/EBAQN/IAAoAghBDGwhAyAAKAIEIQADQCADBEACQCAAKAIABEAgACABEIEkDAELAkACQAJAAkACQEEEIAAoAgQiAigCAEEFayIEIARBBk8bQQFrDgUAAQIDBAULIAJBCGogARCdGiACQShqIAEQgSQMBAsgAkEoaiABEIEkDAMLIAJBCGogARCdGiACQShqIAEQlxwMAgsgAiABEJ0aIAIoAiBBB0cEQCACQSBqIAEQkhALIAIoAmggARCSECACQcgAaiABEJccDAELIAJBCGogARCdGiACQShqIAEQjCQLIABBDGohACADQQxrIQMMAQsLC/EBAQN/IAAoAghBDGwhAyAAKAIEIQADQCADBEACQCAAKAIABEAgACABEIAkDAELAkACQAJAAkACQEEEIAAoAgQiAigCAEEFayIEIARBBk8bQQFrDgUAAQIDBAULIAJBCGogARCeGiACQShqIAEQgCQMBAsgAkEoaiABEIAkDAMLIAJBCGogARCeGiACQShqIAEQmBwMAgsgAiABEJ4aIAIoAiBBB0cEQCACQSBqIAEQsBALIAIoAmggARCwECACQcgAaiABEJgcDAELIAJBCGogARCeGiACQShqIAEQjyQLIABBDGohACADQQxrIQMMAQsLC/EBAQN/IAAoAghBDGwhAyAAKAIEIQADQCADBEACQCAAKAIABEAgACABEIYkDAELAkACQAJAAkACQEEEIAAoAgQiAigCAEEFayIEIARBBk8bQQFrDgUAAQIDBAULIAJBCGogARCfGiAC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IABBCGo2AgwgAUGJicYAQQMgAkEMakHNARDdCAwDCyACIABBBGo2AgwgAUGsgcUAQQQgAkEMakHOARDdCAwCCyACIABBCGo2AgwgAUG3gcUAQQYgAkEMakHRARDdCAwBCyACIAA2AgwgAUGP+cUAQQMgAkEMakHLAxDdCAsgAkEQaiQAC+gBAQF/AkACQAJAAkACQAJAIAEoAgBBAWsOBgECAwQFBQALIAAgAUEIahDeCw8LIAEoAgxBKGwhAiABKAIIIQEDQCACRQ0EIAEoAgBBB0cEQCAAIAEQwAgLIAFBKGohASACQShrIQIMAAsACyABQQRqIAAQiSUPCyABKAIMQThsIQIgASgCCCEBA0AgAkUNAgJAAkACQAJAIAEoAgBBAWsOAgECAAsgAUEoaiAAEP4iDAILIAAgAUEQahDeCwwBCyABQQRqIAAQiSULIAFBOGohASACQThrIQIMAAsACyABQQRqIAAQ/iILC+oBAQF/IwBB0ABrIgMkACAAQQA2AjggAEIANwIwIABBADYCFCAAQoCAgIDAADcCDCADQcwAakEAOwEAIAAgASkCADcCACAAIAIpAgA3AhggAEEIaiABQQhqKAIANgIAIABBIGogAkEIaikCADcCACAAQShqIAJBEGopAgA3AgAgA0EANgJAIANCADcCOCADQgQ3AhggA0IANwIQIANCgICAgIABNwIIIANCADcCRCADQYCAgIB4NgIgIABBxABqQQA7AQAgAEIANwI8IANBCGoQ/x4gA0EUahDtHiADQSBqEPQcIANB0ABqJAAL2gEBBX8gACgCACAAKAIEIAEQuR4gACgCRCICIAAoAkhBBnRqIQYDQCACIAZHBEAgAkFAayEDIAIoAgBBB0YEQCACKAI4QQxsIQQgAigCNCEFA0AgBARAIAUoAgAgARCsJSAEQQxrIQQgBUEMaiEFDAELCyACLQAcQQJHBEAgAkEIaiABKAIUENIkIAMhAgwDCyACKAIIIAEQqCUgAigCDCABEKwlIAMhAgwCBSACIAEQxRwgAyECDAILAAsLIAAoAiBBgICAgHhHBEAgACgCJCAAKAIoIAEQvxYLC8wBAQN/IwBBIGsiBCQAAn9BACACIAIgA2oiA0sNABpBASECQQggASgCACIGQQF0IgUgAyADIAVJGyIDIANBCE0bIgNBf3NBH3YhBQJAIAZFBEBBACECDAELIAQgBjYCHCAEIAEoAgQ2AhQLIAQgAjYCGCAEQQhqIAUgAyAEQRRqEPYIIAQoAghFBEAgBCgCDCECIAEgAzYCACABIAI2AgRBgYCAgHgMAQsgBCgCECEBIAQoAgwLIQIgACABNgIEIAAgAjYCACAEQSBqJAAL0gEBAX8jAEEQayITJAAgACgCFCABIAIgACgCGCgCDBEDACEBIBNBADoADSATIAE6AAwgEyAANgIIIBNBCGogAyAEIAUgBhDSBSAHIAggCSAKENIFIAsgDCANIA4Q0gUgDyAQIBEgEhDSBSECIBMtAAwhAQJ/IAFBAEcgEy0ADUUNABpBASABDQAaIAIoAgAiAC0AHEEEcUUEQCAAKAIUQf/IwgBBAiAAKAIYKAIMEQMADAELIAAoAhRBuIbMAEEBIAAoAhgoAgwRAwALIBNBEGokAAvOAQEBfyMAQRBrIgckACAHIAAoAhQgASACIAAoAhgoAgwRAwA6AAwgByAANgIIIAdBADoADSAHQQA2AgQgB0EEaiADIAQQzgYgBSAGEM4GIQAgBy0ADCEBAn8gAUEARyAAKAIAIgJFDQAaQQEgAQ0AGiAHKAIIIQECQCACQQFHDQAgBy0ADUUNACABLQAcQQRxDQBBASABKAIUQbSJzABBASABKAIYKAIMEQMADQEaCyABKAIUQfDvzgBBASABKAIYKAIMEQMACyAHQRBqJAALzQEBCH8CQAJAIAAoAgAiAkGAgICAeEYgASgCACIDQYCAgIB4RnJFBEAgACgCCCICIAEoAghHDQIgAkEBaiEFIAAoAgRBCGohAiABKAIEQQhqIQMDQCAFQQFrIgVFDQIgA0EEayEGIAJBBGsgAygCACEIIAIoAgAhCSACQQxqIQIgA0EMaiEDKAIAIAkgBigCACAIEK4YDQALDAILIAJBgICAgHhHIANBgICAgHhHcg0BCyAAKAIMIAEoAgxGIAAoAhAgASgCEEZxIQQLIAQLwwEBBn8gAUHgAGoQlhgCQCACRQRAQQAhAQwBCyABKAJoIQYgASgCbCIFIQEDQCABIANrQQFNBEBBACEBIAMgBU8NAiAGIANBAnRqKAIAIgEgASgCACIDQQFqNgIAIANBAE4NAgALIAUgASADakEBdiIETQRAIAQgBUGws8QAEIcNAAUgAyAEIAYgBEECdGooAgAoAjAgAksiCBshAyAEIAEgCBshAQwBCwALAAsQ2BcgACABIAIgARs2AgQgACABRTYCAAvIAQICfwF+IAFBFGwhAQNAIAEEQCAAKAIMIABBEGooAgAgAhCwICACIAAoAgQgACgCCBCaByACIAIoAjhBAWo2AjggAiACKQMwQv8BIAIoAjwiA0EDdEE4ca2GhCIFNwMwIABBFGohACACAn9BCCADayIEQQFNBEAgAiACKQMYIAWFNwMYIAIQowkgAikDMCEFIAJC/wEgBEEDdK2INwMwIAIgBSACKQMAhTcDACADQQdrDAELIANBAWoLNgI8IAFBFGshAQwBCwsLvwECB38BfiABKAIEIQdBBCEGAkAgASgCCCIDBEAgA0EMbCIBQQBIIANBqtWq1QBLcg0BQQQhAiADIQVBBCABEI0ZIgZFDQELIAUgA0H/////A3EiASABIAVLGyEBA0AgAQRAIAQgB2oiAkEEaikCACEJIAIQ3R4hCCAEIAZqIgJBBGogCTcCACACIAg2AgAgAUEBayEBIARBDGohBAwBCwsgACADNgIIIAAgBjYCBCAAIAU2AgAPCyACIAEQoiAAC/EBAAJAAkACQAJAAkACQAJAAkAgACgCAA4HAQIDBAUGBwALIAAoAgQiABDnFyAALQBFQQNHBEAgAEEgahDRFgsgABCeIg8LIAApAwgQ2A8gAEEgahDEIA8LIAApAwgQ2A8gACgCIBD0Fg8LIAAoAgQQmyIPCyAAKAIEEMAgDwsgACgCBCIAKQMIENgPIAAoAiAQvSAgAEE4ahDuHiAAQSRqEPAeIABByABBCBCFDg8LIAAoAgQiACkDCBDYDyAAKAIgEL0gIABBJGoQ0AQgAEEwQQgQhQ4PCyAAKAIEIgApAwAQ2A8gAEEgahCGHyAAEJ8iC9wBAQN/IAAoAghBDGwhAyAAKAIEIQADQCADBEACQCAAKAIABEAgACABEOciDAELAkACQAJAAkACQAJAQQQgACgCBCICKAIAQQVrIgQgBEEGTxtBAWsOBQECAwQFAAsgASACKQMIIAJBGGooAgAQihUMBQsgASACQQhqEIgaIAJBKGogARDnIgwECyABIAIpAxAgAkEgaigCABCKFSACQShqIAEQ5yIMAwsgAkEIaiABEKUdDAILIAIgARChFwwBCyACQQhqIAEQux8LIABBDGohACADQQxrIQMMAQsLC7ACAQF/AkACQAJAAkACQAJAAkAgACgCAEEBaw4HAQIDBgYEBQALIABBADYCGCAAKAIgEJ4FDwsgAEEANgIYIAAoAiAQjhAPCyAAKAIEEK4QDwsgACgCBBCuEA8LIAAoAgQiAEEANgIQIAAoAihBMGwhASAAKAIkQShqIQADQCABRQ0CIABBKGspAwBQBEAgAEEQa0EANgIACyAAKAIABEAgABD6JAsgAUEwayEBIABBMGohAAwACwALIAAoAgQiACkDAFAEQCAAQQA2AhgLIAAtAEVBA0YNACAAQSBqIQADQCAALQAlQQJGBEACQCAAKAIIQThsIQEgACgCBCEAA0AgAUUNASABQThrIQEgABD8BCAAQThqIQAMAAsACwUgAEEANgIYIAAoAiAhAAwBCwsLC84BAgN/AX4gASgCDCABQQxrKAIASQRAIwBBEGsiA0EIaiABQQhqKAIANgIAIAMgASkCADcDACABQSRrIQIgASkCECEFIAEoAgwhAQJAA0AgAkE0aiACQRxqKQIANwIAIAJBLGogAkEUaikCADcCACACQSRqIAJBDGoiBCkCADcCACAAIARGDQEgAigCACEEIAJBGGshAiABIARJDQALIAJBJGohAAsgACADKQMANwIAIAAgBTcCECAAIAE2AgwgAEEIaiADQQhqKAIANgIACwvtAQEBfyMAQfAAayIEJAAgBEEsakEANgIAIARBJGpBMjYCACAEIAM2AiggBCAAQRxqNgIgIARBAjYCHCAEQaDEzAA2AhggBEHsAGpBAzoAACAEQegAakEANgIAIARB4ABqQqCAgIAQNwIAIARB2ABqQoKAgIAgNwIAIARBAjYCFCAEQQM2AgQgBEHEocsANgIAIARBAjYCUCAEQQM6AEwgBEEANgJIIARCIDcCQCAEQoGAgIAgNwI4IARBAjYCMCAEIARBMGo2AhAgBEEDNgIMIAQgBEEYajYCCCABIAQgAigCFBECACAEQfAAaiQAC/EBAAJAAkACQAJAAkACQAJAAkAgACgCAA4HAQIDBAUGBwALIAAoAgQiABDnFyAALQBFQQNHBEAgAEEgahDRFgsgABCeIg8LIAApAwgQ2A8gAEEgahCQIQ8LIAApAwgQ2A8gACgCIBCEFw8LIAAoAgQQmyIPCyAAKAIEEMAgDwsgACgCBCIAKQMIENgPIAAoAiAQvSAgAEE4ahDuHiAAQSRqEPAeIABByABBCBCFDg8LIAAoAgQiACkDCBDYDyAAKAIgEL0gIABBJGoQ0gQgAEEwQQgQhQ4PCyAAKAIEIgApAwAQ2A8gAEEgahCGHyAAEJ8iC9IBAQZ/IAAgARDEGiAAKAJEIgIgACgCSEEGdGohBgNAIAIgBkcEQCACQUBrIQUgAigCAEEHRgRAIAEtACghByABQQE6ACggAigCOEEMbCEEIAIoAjQhAwNAIAQEQCADIAEQ0SQgBEEMayEEIANBDGohAwwBCwsgAkEIaiEDAkAgAi0AHEECRwRAIAMgARCNEwwBCyADIAEQyh4LIAEgBzoAKCAFIQIMAgUgASACENUXIAUhAgwCCwALCyAAKAIgQYCAgIB4RwRAIABBIGogARDlFAsLzAEBA38jAEEgayIEJAACf0EAIAIgAiADaiIDSw0AGkEBIQJBCCABKAIAIgZBAXQiBSADIAMgBUkbIgMgA0EITRsiA0F/c0EfdiEFAkAgBkUEQEEAIQIMAQsgBCAGNgIcIAQgASgCBDYCFAsgBCACNgIYIARBCGogBSADIARBFGoQ8QggBCgCCEUEQCAEKAIMIQIgASADNgIAIAEgAjYCBEGBgICAeAwBCyAEKAIQIQEgBCgCDAshAiAAIAE2AgQgACACNgIAIARBIGokAAvsAQECfyMAQTBrIgIkAAJAIAArAwCZRAAAAAAAAPB/Y0UEQCACQQE2AhQgAkGgxMwANgIQIAJCATcCHCACQcIANgIsIAIgADYCKCACIAJBKGo2AhggASgCFCABKAIYIAJBEGoQ3BwhAwwBCyACQQA6AAwgAiABNgIIQQEhAyACQQE2AhQgAkGgxMwANgIQIAJCATcCHCACQcIANgIsIAIgADYCKCACIAJBKGo2AhggAkEIaiACQRBqEOccDQAgAi0ADEUEQCABKAIUQc/2wwBBAiABKAIYKAIMEQMADQELQQAhAwsgAkEwaiQAIAMLwwEBBH8jAEEQayIDJAAgA0EIaiAAIAIQ4wogAygCCCEEAkAgAy0ADCIFQQNGBEAgBCECDAELIAJBDGwhACAFQQFGIQYDQCAABEAgA0EIaiICIAQoAgAgBhCWGSACEJgTIgINAiABQQRqKAIAIAFBCGooAgAgBCgCABCIIiICDQIgAUEMaiEBIANBBDoACCAAQQxrIQBBACEGQQIhBSADQQhqEJgTIgJFDQEMAgsLIAQoAgAgBRDGEiECCyADQRBqJAAgAgvaAQEBfyMAQUBqIgIkACAAKAIAIQAgAkE4akGEi8UANgIAIAJBMGpBgILFADYCACACQShqQeSCxQA2AgAgAkEgakHsg8UANgIAIAJBGGpB7IPFADYCACACQRBqQcyCxQA2AgAgAiAAQRhqNgIsIAIgADYCJCACIABBIWo2AhwgAiAAQSBqNgIUIAIgAEEMajYCDCACQaCFxgA2AgggAiAAQRBqNgIEIAIgAEEcajYCPCACIAJBPGo2AjQgAUGUiMUAQRFBlIvFAEEHIAJBBGpBBxD1BiACQUBrJAALxAEBBH8jAEEgayIEJABBgYCAgHghBQJAIAEoAgAiByACayADTw0AIAIgAiADaiIGSwRAQQAhBQwBCyAGQRRsIQMgBkHnzJkzSUECdCECIAQgBwR/IAQgB0EUbDYCHCAEIAEoAgQ2AhRBBAVBAAs2AhggBEEIaiACIAMgBEEUahD2CCAEKAIIBEAgBCgCECECIAQoAgwhBQwBCyAEKAIMIQIgASAGNgIAIAEgAjYCBAsgACACNgIEIAAgBTYCACAEQSBqJAAL3wEBAX8CQAJAAkACQAJAAkACQAJAAkAgASgCAEEBaw4HAQIDBAUGBwALIAEoAiAiAkEoaiEBIAJBJGohAgwHCyABKAIgIgJBNGohASACQTBqIQIMBgsgASgCBCICQRBqIQEgAkEMaiECDAULIAEoAgQiAkEQaiEBIAJBDGohAgwECyABKAIEIgJBBGohAQwDCyABKAIEIgJBBGohAQwCCyABKAIEIgJBHGohASACQRhqIQIMAQsgASgCBCICQcwAaiEBIAJByABqIQILIAAgASgCADYCBCAAIAIoAgA2AgALxQECA38BfiABKAIMIgQgAUEMaygCAEkEQCMAQRBrIgNBCGogAUEIaigCADYCACADIAEpAgA3AwAgAUEkayECIAEpAhAhBQJAA0AgAkE0aiACQRxqKQIANwIAIAJBLGogAkEUaikCADcCACACQSRqIAJBDGoiASkCADcCACAAIAFGDQEgAigCACACQRhrIQIgBEsNAAsgAkEkaiEACyAAIAMpAwA3AgAgACAFNwIQIAAgBDYCDCAAQQhqIANBCGooAgA2AgALC+gBAQF/IwBB8ABrIgMkACADQSxqQQA2AgAgA0EkakEyNgIAIAMgAjYCKCADIABBHGo2AiAgA0ECNgIcIANBoMTMADYCGCADQewAakEDOgAAIANB6ABqQQA2AgAgA0HgAGpCoICAgBA3AgAgA0HYAGpCgoCAgCA3AgAgA0ECNgIUIANBAzYCBCADQcShywA2AgAgA0ECNgJQIANBAzoATCADQQA2AkggA0IgNwJAIANCgYCAgCA3AjggA0ECNgIwIAMgA0EwajYCECADQQM2AgwgAyADQRhqNgIIIAEgAxDjHCADQfAAaiQAC8kBAQN/IwBBEGsiAyQAIABBCGohAAJAA0AgAUEDTQRAAkAgAUEBSw0ADAMLBSAAKAAAIANBBCAAIAFB1LrEABDGFiACQQV3c0G5893xeWwhAiADKAIEIQEgAygCACEADAELCyAALwAAIANBCGpBAiAAIAFBxLrEABDGFiACQQV3c0G5893xeWwhAiADKAIMIQEgAygCCCEACyABBEAgAC0AACACQQV3c0G5893xeWwhAgsgA0EQaiQAIAJBBXdB/wFzQbnz3fF5bK0LuQEBBX8gA0H4////AXEEQCAAIAAgA0EDdiIDQfAAbCIFaiAAIANBxAFsIgRqIAMQ2gghACABIAEgBWogASAEaiADENoIIQEgAiACIAVqIAIgBGogAxDaCCECCyAAKAIEIgQgASgCBCIGSSAAKAIAIgMgASgCACIFSSADIAVGGyIHIAQgAigCBCIISSADIAIoAgAiBEkgAyAERhtGBH8gAiABIAcgBiAISSAEIAVLIAQgBUYbcxsFIAALC80BAQJ/IwBBIGsiAyQAIANBDGogACACIAERBAACfyADKAIMQYCAgIB4RwRAIAMoAhAiAiADKAIUQRhsaiEEAkADQCACIARGDQECQCACLQAQRQ0AIAJBGGogAyACEOoJIAMgAygCACIBNgIYIAMgASADKAIEajYCHANAAkAgA0EYahDtFCIBQQprDgQCAQECAAsgAUGowABrQQJJDQEgAUGAgMQARw0ACyECDAELCyADQQxqEIEbQQEMAgsgA0EMahCBGwtBAAsgA0EgaiQAC7kBAQV/IANB+P///wFxBEAgACAAIANBA3YiA0GgAWwiBWogACADQZgCbCIEaiADENwIIQAgASABIAVqIAEgBGog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AhQiBCABKAIQIgNJDQIgAEEANgIADAMLAkAgA0EgRiIDRQRAIAEtABgNAQsgASADOgAYDAELCyACQRBqIAEoAgwgASgCECABKAIUIAIoAhgiA0GctMwAEJ4LIAAgAigCECACKAIUELENIAFBADoAGCABIAM2AhQMAQsgAkEIaiABKAIMIAMgBEGMtMwAEKIPIAAgAigCCCACKAIMELENIAEgAzYCFAsgAkEgaiQAC8YBAQF/IwBBMGsiAiQAAn8gAC0ABARAIAIgAC0ABToAByACQQI2AhwgAkG0wcAANgIYIAJCAjcCJCACIACtQoCAgICAAYQ3AxAgAiACQQdqrUKAgICA8AGENwMIIAIgAkEIajYCICABKAIUIAEoAhggAkEYahC9AwwBCyACQQE2AhwgAkHwwcAANgIYIAJCATcCJCACIACtQoCAgICAAYQ3AwggAiACQQhqNgIgIAEoAhQgASgCGCACQRhqEL0DCyACQTBqJAALugEBA38jAEEgayIDJAACQCABIAEgAmoiAksEf0EABUEBIQFBCCAAKAIAIgVBAXQiBCACIAIgBEkbIgIgAkEITRsiAkF/c0EfdiEEAkAgBUUEQEEAIQEMAQsgAyAFNgIcIAMgACgCBDYCFAsgAyABNgIYIANBCGogBCACIANBFGoQ+AggAygCCEUNASADKAIQIQAgAygCDAsgABCiIAALIAMoAgwhASAAIAI2AgAgACABNgIEIANBIGokAAvCAQEHfyMAQRBrIgMkAAJAIAAoAggiAUUEQEEAIQEMAQsgAUECdCIEIAAoAgQiBWpBBGsoAgANACAFQQRrIQYgASEFAkADQCAFIQIgBEUEQEEAIQIMAgsgAkEBayEFIAQgBmogBEEEayEEKAIARQ0ACyABIAJJDQELIAAgAjYCCCACIQELAkAgASAAKAIAQQJ2Tw0AIANBCGogACABEIsMIAMoAggiAEGBgICAeEYNACAAIAMoAgwQoiAACyADQRBqJAALugEBBX8jAEEgayIBJAACQCAAKAIAIgJBf0YEf0EABUEBIQVBCCACQQF0IgMgAkEBaiIEIAMgBEsbIgMgA0EITRsiA0F/c0EfdiEEAkAgAkUEQEEAIQUMAQsgASACNgIcIAEgACgCBDYCFAsgASAFNgIYIAFBCGogBCADIAFBFGoQ8QggASgCCEUNASAB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AjYCICADQQE2AhwgARClASAAQdwAaiICEK8YIAAtAF0gAhDYF0UEQCAAKAIADQILIAVBBGoQoQlBASAGENEaQQRBABClFkEAQQQQ0hogBUEQaiQADwtBBEEIEKIgAAtB0MbPAEHQxs8AKAIAIgBBAWo2AgACQCAAQQBIDQBBsMbPAC0AAA0AQazGzwBBrMbPACgCAEEBajYCAEGwxs8AQQA6AAALAAulAQEEfyABRQRAQQAPCyABQQNxIQQCQCABQQRJBEAMAQsgACECIAFBfHEiBSEBA0AgAyACLAAAQb9/SmogAkEBaiwAAEG/f0pqIAJBAmosAABBv39KaiACQQNqLAAAQb9/SmohAyACQQRqIQIgAUEEayIBDQALCyAEBEAgACAFaiECA0AgAyACLAAAQb9/SmohAyACQQFqIQIgBEEBayIEDQALCyADC9MBAQF/IwBBEGsiAiQAAn8CQAJAAkACQAJAIAAoAgBBAWsOBAECAwQACyACIABBCGo2AgwgAUGkg8wAQQUgAkEMakHqARDdCAwECyACIABBCGo2AgwgAUGJicYAQQMgAkEMakHNARDdCAwDCyACIABBCGo2AgwgAUG0gcUAQQMgAkEMakHQARDdCAwCCyACIABBBGo2AgwgAUHXgcUAQQggAkEMakHxAhDdCAwBCyACIABBCGo2AgwgAUG3gcUAQQYgAkEMakHRARDdCAsgAkEQaiQAC84BAgR/AX4jAEEgayIBJAAgACgCBCIDBEAgACgCACECAkAgACgCDCIARQ0AIAIpAwAhBSABIAA2AhggASACNgIQQQEhACABIAIgA2pBAWo2AgwgASACQQhqNgIIIAEgBUJ/hUKAgYKEiJCgwIB/gzcDAANAIABFDQEgARCDDCEEIAEgASgCGEEBayIANgIYIARFDQEgBEEQaykDABDYDwwACwALIAFBEEEIIANBAWoQkwsgAiABKAIIayABKAIAIAEoAgQQzRwLIAFBIGokAAvOAQIEfwF+IwBBIGsiASQAIAAoAgQiAwRAIAAoAgAhAgJAIAAoAgwiAEUNACACKQMAIQUgASAANgIYIAEgAjYCEEEBIQAgASACIANqQQFqNgIMIAEgAkEIajYCCCABIAVCf4VCgIGChIiQoMCAf4M3AwADQCAARQ0BIAEQqAwhBCABIAEoAhhBAWsiADYCGCAE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ARCPIAsgAEEMaiEAIANBDGshAwwBCwsLqAECA38BfCMAQRBrIgIkACACIAA2AgwCQCAAQQRPBEBBfwJ/IAC4nyIERAAAAAAAAPBBYyAERAAAAAAAAAAAZiIAcQRAIASrDAELQQALQQAgABsgBEQAAOD////vQWQbIQEDQCACQQxqIAEiABDcFyIBIABLDQALA0AgACABIgNNDQIgAkEMaiABENwXIQEgAyEADAALAAsgAEEARyEACyACQRBqJAAgAAuqAQEJfyMAQRBrIgQkACAAKAIIQQFqIQEgACgCECEFIAAoAgwhBiAAKAIAIQMgACgCBCEHAkADQCADIAdHBEAgACADQQRqIgg2AgAgBigCACEJIAMQ7hchAiABIAlGBEAgACABNgIIDAMLIAIgBRDzAyECIAAgATYCCCABQQFqIQEgCCEDIAJFDQEMAgsLQQAhAiAEQQA2AgwgBEEMahC+HwsgBEEQaiQAIAILswEBA38jAEEgayIBJAAgACgCACICKAIAIQMgAkEANgIAIAMoAhAhAiADQQA2AhAgAgRAIAFBCGogAhEBACAAKAIEIgMoAgAiACgCAEGAgICAeEcEQCAAEOoeIAMoAgAhAAsgACABKQIINwIAIABBCGogAUEQaigCADYCACABQSBqJABBAQ8LIAFBADYCGCABQQE2AgwgAUHUxMwANgIIIAFCBDcCECABQQhqQbjFzAAQ8hAAC7sBAgJ/AX4jAEEwayICJAACQAJAAkACQCABKAIADggCAgMDAwMAAQMLIAJBEGogASgCBCIBKQMAIAFBEGooAgAQ1xsgAigCGCEDIAIpAxAhBAwCCyABKAIEIgEpAwBCAFINASACQSBqIAEpAwggAUEYaigCABDXGyACKAIoIQMgAikDICEEDAELIAIgASkDCCABKAIYENcbIAIoAgghAyACKQMAIQQLIAAgAzYCCCAAIAQ3AwAgAkEwaiQAC6IPAhR/Bn4jAEEQayILJAACfiABKAIIIgVBB08EQAJ/IAAhBiABKAIEIQAjAEEQayICJAACQANAIAVBA00EQCAFQQFNDQIFIAAoAAAgAkEEIAAgBUHUusQAEMYWIANBBXdzQbnz3fF5bCEDIAIoAgQhBSACKAIAIQAMAQsLIAAvAAAgAkEIakECIAAgBUHEusQAEMYWIANBBXdzQbnz3fF5bCED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HA8LIANBOGohAwwACwALmgEBBH8gACgCCEE4bCEDIAAoAgQhBEEAIQADQAJAIAAgA0cEQAJAAkACQCAAIARqIgIoAgBBAWsOAgECAAsgAkEIaiABEJ4aIAJBKGogARCrJAwDCyABLQAQIQUgAUEAOgAQIAJBMGoiAigCAARAIAIgARCAJAsgASAFOgAQDAILIAJBBGogARCfJQwBCw8LIABBOGohAAwACwALjAECBH8BfiMAQSBrIgIkACAAQRhqIgMvAQAhBCAAKAIUIQUgACkCDCEGIAJBBGogACABEMcHIAJBHGoiASAEOwEAIAAgAikCBDcCACACIAY3AhAgAEEIaiACQQxqKQIANwIAIAIgBTYCGCAAQRBqIAJBFGopAgA3AgAgAyABKAIANgIAIAJBIGokACAAC4kBAAJAAkACQAJAAkACQAJAIAAoAgBBAWsOCQAFAQYCBAYEAwULIABBCGogARBdDwsCQAJAIAAoAghBAWsOAgEEAAsgAEEQaiABENQkDwsgAEEQaiABENMkDwsgAEEQaiABEL0cDwsgAEEIaiABEKQECw8LIABBHGogARC9HA8LIABBBGogARDPJAuNAQEDfyAALQAIIQEgACgCACIDRQRAIAFBAEcPC0EBIQICQCABRQRAIAAoAgQhASADQQFHDQEgAC0ACUUNASABLQAcQQRxDQEgASgCFEG0icwAQQEgASgCGCgCDBEDAEUNAQsgACACOgAIIAIPCyAAIAEoAhRB8O/OAEEBIAEoAhgoAgwRAwAiADoACCAAC6ABAQF/IwBBQGoiAiQAIAJBADYCFCACQoCAgIAQNwIMIAJBAzoAOCACQSA2AiggAkEANgI0IAJB9MPBADYCMCACQQA2AiAgAkEANgIYIAIgAkEMajYCLCABIAJBGGoQlBJFBEAgACACKQIMNwIAIABBCGogAkEUaigCADYCACACQUBrJAAPC0GUkMwAQTcgAkE/akGMxMEAQcyQzAAQ2AsAC6ABAQF/IwBBQGoiAiQAIAJBADYCFCACQoCAgIAQNwIMIAJBAzoAOCACQSA2AiggAkEANgI0IAJB9MPBADYCMCACQQA2AiAgAkEANgIYIAIgAkEMajYCLCABIAJBGGoQ1RNFBEAgACACKQIMNwIAIABBCGogAkEUaigCADYCACACQUBrJAAPC0GUkMwAQTcgAkE/akGMxMEAQcyQzAAQ2AsAC6ABAQF/IwBBQGoiAiQAIAJBADYCFCACQoCAgIAQNwIMIAJBAzoAOCACQSA2AiggAkEANgI0IAJBoMXBADYCMCACQQA2AiAgAkEANgIYIAIgAkEMajYCLCABIAJBGGoQlBJFBEAgACACKQIMNwIAIABBCGogAkEUaigCADYCACACQUBrJAAPC0GUkMwAQTcgAkE/akG4xcEAQcyQzAAQ2AsAC4YBAQJ/IANB+P///wFxBEAgACAAIANBA3YiA0HgAGwiBGogACADQagBbCIFaiADEOIKIQAgASABIARqIAEgBWogAxDiCiEBIAIgAiAEaiACIAVqIAMQ4gohAgsgACACIAEgACgCDCIAIAEoAgwiAUkiAyABIAIoAgwiAklzGyADIAAgAklzGwuUAQEDfyMAQRBrIgMkACADQQhqIgQgASgCACIFQYCHzABBARDrHAJAIAQQmBMiBEUEQCACBEAgAEEBOgAEIAAgATYCAAwCCyADQQhqIgIgBRC5ISACEJgTIgJFBEAgAEEAOgAEIAAgATYCAAwCCyAAQQM6AAQgACACNgIADAELIABBAzoABCAAIAQ2AgALIANBEGokAAuUAQEDfyMAQRBrIgMkACADQQhqIgQgASgCACIFQbeGzABBARDrHAJAIAQQmBMiBEUEQCACBEAgAEEBOgAEIAAgATYCAAwCCyADQQhqIgIgBRC6ISACEJgTIgJFBEAgAEEAOgAEIAAgATYCAAwCCyAAQQM6AAQgACACNgIADAELIABBAzoABCAAIAQ2AgALIANBEGokAAugAQEBfyMAQUBqIgIkACACQQA2AhQgAkKAgICAEDcCDCACQQM6ADggAkEgNgIoIAJBADYCNCACQZDOxAA2AjAgAkEANgIgIAJBADYCGCACIAJBDGo2AiwgASACQRhqELEhRQRAIAAgAikCDDcCACAAQQhqIAJBFGooAgA2AgAgAkFAayQADwtBlJDMAEE3IAJBP2pBqM7EAEHMkMwAENgLAAuoAQECfyABKALAASABKALEARCwFiIDQYCAxABHBEAgAUHAAWoiBBD9EQJ/QQAgA0ENRw0AGkENIQNBACABKALAASABKALEARCwFkEKRw0AGiAEEP0RQQFBAiACGyEDQc6+zABBzL7MACACGwshAiAAIAM2AgggACACNgIEIABBADYCACABIAEoAtABNgKkASABIAEoAqABQQFqNgKgAQ8LQdTYxAAQryEAC5wBAQJ/IwBBEGsiAiQAAn8CQAJAAkBBASAAKAIAIgAtACxBA2siAyADQf8BcUEDTxtB/wFxQQFrDgIBAgALIAIgADYCBCABQaSDzABBBSACQQRqQawBEN0IDAILIAIgADYCCCABQZj+xQBBDSACQQhqQbYBEN0IDAELIAIgADYCDCABQf35xQBBESACQQxqQbcBEN0ICyACQRBqJAALnwEBAn8gAEFAaxCVFSAAKAKEAUHYAGwhAiAAKAKAASEBA0ACQCACBEACQAJAAkACQCABKAIAQQFrDgUAAQIFAwULIAFBBGoQ8RsMBAsgAUEEahCKJQwDCyABQQRqEJoNDAILIAFBBGoQ+iQMAQsgAEGQAWoQmg0gAC0APEEGRwRAIABBEGoQlRULDwsgAUHYAGohASACQdgAayECDAALAAudAQEFfyAAKAIIIQMgACgCACECIAAoAgQhBANAAkAgBCACIgFGBEBBACEBDAELIAAgAUE4aiICNgIAAkACQCABKAIAIgVBAUcEQCAFQQlHDQMgASgCCEERRw0DIAEoAhBBAWsOAgIBAwsCQCABKAIIQQFrDgICAAMLIAEoAgwtABkNAgwBCyABKAIULQAZDQELIAEgAxDABQwBCwsgAQuYAQECfyMAQeAAayIEJAACQAJAAkACQCACKAIAQRFHDQAgAigCCEEGaw4CAQIACyAAIAJBMBDvJBoMAgsgBEEIaiIFIAIoAgwiAkEwEO8kGiAAIAEgBSADEIABIAIQnyIMAQsgBEEIaiIDIAIoAgwiAkHYABDvJBogACABKQMAIAEoAgggA0EAEPUIIAIQniILIARB4ABqJAALoAEBAX8jAEFAaiICJAAgAkEANgIUIAJCgICAgBA3AgwgAkEDOgA4IAJBIDYCKCACQQA2AjQgAkGwlMsANgIwIAJBADYCICACQQA2AhggAiACQQxqNgIsIAEgAkEYahDYFUUEQCAAIAIpAgw3AgAgAEEIaiACQRRqKAIANgIAIAJBQGskAA8LQZSQzABBNyACQT9qQciUywBBzJDMABDYCwALoAEBAX8jAEFAaiICJAAgAkEANgIUIAJCgICAgBA3AgwgAkEDOgA4IAJBIDYCKCACQQA2AjQgAkHEnssANgIwIAJBADYCICACQQA2AhggAiACQQxqNgIsIAEgAkEYahDYFUUEQCAAIAIpAgw3AgAgAEEIaiACQRRqKAIANgIAIAJBQGskAA8LQZSQzABBNyACQT9qQdyeywBBzJDMABDYCwALoAEBAX8jAEFAaiICJAAgAkEANgIUIAJCgICAgBA3AgwgAkEDOgA4IAJBIDYCKCACQQA2AjQgAkGcocsANgIwIAJBADYCICACQQA2AhggAiACQQxqNgIsIAEgAkEYahCUEkUEQCAAIAIpAgw3AgAgAEEIaiACQRRqKAIANgIAIAJBQGskAA8LQZSQzABBNyACQT9qQbShywBBzJDMABDYCwALoAEBAX8jAEFAaiICJAAgAkEANgIUIAJCgICAgBA3AgwgAkEDOgA4IAJBIDYCKCACQQA2AjQgAkGcocsANgIwIAJBADYCICACQQA2AhggAiACQQxqNgIsIAEgAkEYahDVE0UEQCAAIAIpAgw3AgAgAEEIaiACQRRqKAIANgIAIAJBQGskAA8LQZSQzABBNyACQT9qQbShywBBzJDMABDYCwALoAEBAX8jAEFAaiICJAAgAkEANgIUIAJCgICAgBA3AgwgAkEDOgA4IAJBIDYCKCACQQA2AjQgAkGUjswANgIwIAJBADYCICACQQA2AhggAiACQQxqNgIsIAEgAkEYahChIkUEQCAAIAIpAgw3AgAgAEEIaiACQRRqKAIANgIAIAJBQGskAA8LQZSQzABBNyACQT9qQayOzABBzJDMABDYCwALoAEBAX8jAEFAaiICJAAgAkEANgIUIAJCgICAgBA3AgwgAkEDOgA4IAJBIDYCKCACQQA2AjQgAkGUjswANgIwIAJBADYCICACQQA2AhggAiACQQxqNgIsIAEgAkEYahD/E0UEQCAAIAIpAgw3AgAgAEEIaiACQRRqKAIANgIAIAJBQGskAA8LQZSQzABBNyACQT9qQayOzABBzJDMABDYCwALoQEBAn8jAEEQayIDJAACQAJAIAJBAE4EQCACQfX///8HTw0CIANBBCACQQtqQXxxELUXIAMoAgAiBA0BAAtB1LrMAEErIANBD2pBvIHEAEHMgcQAENgLAAsgBEKBgICAEDcCACAEQQhqIAEgAhDvJBogACACNgIEIAAgBDYCACADQRBqJAAPC0HUuswAQSsgA0EPakGAhMAAQdiEwAAQ2AsAC2sAAkACQAJAAkACQCAAQQFrDgIBAgALIAEoAggiAEUNAgwDCyABKAIIIgBFDQEMAgsgARDfDw8LQQEPCyABKAIEIABBOGxqQThrIgEoAjAiAEUEQCABEN8PDwsgACgCACAAQQhqKAIAELkNC4wBAQN/IwBB0ABrIgEkACAAQaACaiECIAAoAqACQSVGBEAgAUEoaiIDIABByAJqQSgQ7yQaIABBJTYCyAICQCABKAIoQSVGBEAgASAAED4gAxCAHQwBCyABIAFBKGpBKBDvJBoLIAIQgB0gAiABQSgQ7yQiAEEAIAAoAgBBJUcbIQILIAFB0ABqJAAgAgugAQIDfwF+IwBB0ABrIgIkACACQRRqIgMgARD4ECACQcQAaiACKAIUIgFB1AJqKQIANwIAIAJBzABqIAFB3AJqKAIANgIAIAEoAsgCIQQgAUElNgLIAiABIAEpA+ACNwOYAyACIAEpAswCNwI8IAIgBDYCOCACQThqEOAIIAJBCGogARDkASACKQMIIQUgAxCBHSAAIAU3AwAgAkHQAGokAAuMAQEDfyMAQdAAayIBJAAgAEGgAmohAiAAKAKgAkElRgRAIAFBKGoiAyAAQcgCakEoEO8kGiAAQSU2AsgCAkAgASgCKEElRgRAIAEgABA+IAMQvggMAQsgASABQShqQSgQ7yQaCyACEL4IIAIgAUEoEO8kIgBBACAAKAIAQSVHGyECCyABQdAAaiQAIAILjAEBA38jAEHQAGsiASQAIABBoAJqIQIgACgCoAJBJUYEQCABQShqIgMgAEHIAmpBKBDvJBogAEElNgLIAgJAIAEoAihBJUYEQCABIAAQPiADEJMHDAELIAEgAUEoakEoEO8kGgsgAhCTByACIAFBKBDvJCIAQQAgACgCAEElRxshAgsgAUHQAGokACACC78BAQF/IAFBIGoiAiAAEOYiIAEoAgBBAk8EQCAAIAFBBGoQtBkLAkACQAJAAkACQAJAQQcgAigCACIBKAIAQQxrIgIgAkEmTxtBAmsOIwAEBAQEBAUFBAECBAUFBQUEBAQFBAUFBQUFBQUFBQUFBQUDBQsgAC0AJCAALQAlQQIgABCuEg0EDAMLIAAtACQgAC0AJUEBQQEQrhINAgwDCyABKAIEQYCAgIB4Rg0BDAILIAAtACcNAQsgACABEKsBCwuOAQECfyMAQRBrIgEkACAAKAIYBH8DQCABQQhqIAAQkhIgASgCCEEBRkUEQCAAIAAoAhBBIGs2AhAgACAAKAIIIgJBCGo2AgggACACKQMAQn+FQoCBgoSIkKDAgH+DNwMADAELCyABKAIMIQIgACAAKAIYQQFrNgIYIAAoAhAgAkECdGsFQQALIAFBEGokAAuBAQEDfyMAQUBqIgQkACABQThsIAAoAghBOGwiA2shASAAKAIEIANqIQMCQANAIAFFDQEgBEEIaiIFIAIQ6hAgBCgCCEEKRwRAIAMgBUE4EO8kIAAgACgCCEEBajYCCCABQThrIQFBOGohAwwBCwsgBEEIahC2BgsgBEFAayQAIAFFC5kBAgN/AX4jAEHQAGsiAiQAIAJBFGoiAyABEIIRIAJBxABqIAIoAhQiAUE0aikCADcCACACQcwAaiABQTxqKAIANgIAIAEoAighBCABQSU2AiggASABKQNANwN4IAIgASkCLDcCPCACIAQ2AjggAkE4ahDiCCACQQhqIAEQ4wEgAikDCCEFIAMQqh4gACAFNwMAIAJB0ABqJAALkwEBBH8jAEEQayICJABBASEEAkAgASgCFCIDQScgASgCGCIFKAIQIgERAgANACACQQRqIAAoAgBBgQIQ8QICQCACLQAEQYABRgRAIAMgAigCCCABEQIARQ0BDAILIAMgAi0ADiIAIAJBBGpqIAItAA8gAGsgBSgCDBEDAA0BCyADQScgARECACEECyACQRBqJAAgBAuYAQEDfyMAQRBrIgIkAAJAAkAgASgCAEGAgICAeEYEQCABKAIEIQMgAkEEaiABKAIIIgEQpAsgAigCCCEEIAIoAgQNAiACKAIMIAMgARDvJCEDIAAgATYCCCAAIAM2AgQgACAENgIADAELIAAgASkCADcCACAAQQhqIAFBCGooAgA2AgALIAJBEGokAA8LIAQgAigCDBCiIAALlgEBAX8jAEFAaiICJAAgAkIANwM4IAJBOGogACgCABAiIAIgAigCPCIANgI0IAIgAigCODYCMCACIAA2AiwgAkERNgIoIAJBAjYCECACQfTvzgA2AgwgAkIBNwIYIAIgAkEsajYCJCACIAJBJGo2AhQgASgCFCABKAIYIAJBDGoQvQMgAigCLCACKAIwEMccIAJBQGskAAuoAQEDfyMAQRBr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AQALAkAgAUF/Rg0AIAEgASgCBCIDQQFrNgIEIANBAUcNAEEEIAAgAEEETRsiACACKAIEakEHakEAIABrcSICRQ0AIAEgAiAAEIUOCwt8AAJAAkAgAyAESw0AAkAgA0UNACACIANLBEAgASADaiwAAEG/f0oNAQwCCyACIANHDQELIARFDQEgAiAESwRAIAEgBGosAABBv39MDQEMAgsgAiAERg0BCyABIAIgAyAEIAUQ0x4ACyAAIAQgA2s2AgQgACABIANqNgIAC4ABAQF/IAFBLUErIABBAEgbOgAAIAAgAEEfdSICcyACayIAQeMATARAIABBCUwEQCABIABBMGo6AAFBAg8LIAEgAEEBdEHQisQAai8AADsAAUEDDwsgASAAQeQAbiICQTBqOgABIAEgACACQeQAbGtBAXRB0IrEAGovAAA7AAJBBAuJAQEEfyAAKAIIQThsIQMgACgCBCEEA0ACQCACIANHBEACQAJAAkAgAiAEaiIBKAIAQQFrDgIBAgALIAFBCGoQohsgAUEoahCdJQwDCyABQRBqEMwdIAFBMGoiASgCAEUNAiABEJElDAILIAFBBGoQ8CAMAQsgAEEUahD1HQ8LIAJBOGohAgwACwALiQECA38BfiMAQSBrIgIkAEEBIQMCQCABKQMAIgVCAVYNACABLQBIIgRFIQMgBUIAUiAEcg0AQQEhAyAAKAIAKAIADQAgAiABKQMIIAEoAhgQ1xsgAiACKAIINgIYIAIgAikDACIFNwMQIAAoAgQgAkEQahDUFyAFENgPQQFzIQMLIAJBIGokACADC38AAkACQCADIARLDQACQCADRQ0AIAIgA0sEQCABIANqLAAAQb9/Sg0BDAILIAIgA0cNAQsgBEUNASACIARLBEAgASAEaiwAAEG/f0wNAQwCCyACIARGDQELIAEgAiADIARBsK3LABDTHgALIAAgBCADazYCBCAAIAEgA2o2AgALoQEBAX8gACgCDCIBIAAoAhAQyBcgACgCCCABEN0aIAAoAhQgACgCGBCAEgJAIAAoAoABRQ0AIAAoAoQBBEAgAEGEAWoQoRALIAAoAogBRQ0AIABBiAFqEKIQCyAAQZQBahCgGSAAKALcAhDiDyAAKALgAhDiDyAAKALkAhCkEiAAKALoAhCdEyAAKAKgAxDJEyAAQShqELQeIABB0ABqELQeC4EBAQN/IwBBEGsiAyQAAkAgAQRAIAFBAEgEQCAAQQA2AgRBASECDAILQQEhAiADQQhqQQEgARC1FyADKAIIIgQEQCAAIAQ2AgggACABNgIEQQAhAgwCCyAAIAE2AgggAEEBNgIEDAELIABCgICAgBA3AgQLIAAgAjYCACADQRBqJAALgQEBA38jAEEQayIDJAACQCABBEAgAUEASARAIABBADYCBEEBIQIMAgtBASECIANBCGpBASABENcTIAMoAggiBARAIAAgBDYCCCAAIAE2AgRBACECDAILIAAgATYCCCAAQQE2AgQMAQsgAEKAgICAEDcCBAsgACACNgIAIANBEGokAAuCAQEBfyMAQTBrIgIkACACIAAoAgAoAgAiADYCKCACQQM2AgQgAkGcucAANgIAIAJCAjcCDCACIAJBLGqtQoCAgICQCYQ3AyAgAiACQShqrUKAgICAoAmENwMYIAIgAGg2AiwgAiACQRhqNgIIIAEoAhQgASgCGCACEL0DIAJBMGokAAtwAgF/AX5BBCEDAn4gAkEESQRAQQAhA0IADAELIAAgAWo1AAALIQQgAiADQQFySwRAIAAgA2ogAWozAAAgA0EDdK2GIASEIQQgA0ECciEDCyACIANLBH4gACABIANqajEAACADQQN0rYYgBIQFIAQLC34BBH9BByEFAn8gACgCICICQQdNBEAgAEEgaiEDIABBBGohBCACDAELIABBBGohAyAAKAIIIQQgAiEFIAAoAgQLIQIgAiAFRgR/IAAQqQ0gAEEEaiEDIAAoAgghBCAAKAIEBSACC0ECdCAEaiABNgIAIAMgAygCAEEBajYCAAuEAQIBfwN+IwBBIGsiAiQAIAIgAUEAEKEBAkAgAikDACIEQgJSBEAgAikDECEFIAIpAwghAyAEUAR/QR0FIAIgAz4CGCACKQMYIQNBHgshASAAIAM3AxAgACAFNwMIIAAgATYCAAwBCyACKAIIIQEgAEEmNgIAIAAgATYCBAsgAkEgaiQAC5ABAQF/IwBBEGsiAiQAAn8CQAJAAkAgACgCACIAKAIAQQFrDgIBAgALIAIgAEEIajYCBCABQYL7xQBBCCACQQRqQdQCEN0IDAILIAIgAEEIajYCCCABQbiDzABBBiACQQhqQdUCEN0IDAELIAIgAEEEajYCDCABQa6DzABBBCACQQxq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DAELIABBCGpBjMfBACkCADcCACAAQYTHwQApAgA3AgAgAygCCCADKAIMENoaCyADQSBqJAALigEBA38gAEG5893xeWwhAwJAA0BB7MHPACgCACIARQRAEOAQIQALIANBACAAKAIIa3YiASAAKAIEIgJPDQEgACgCACABQQZ0aiIBIAEoAgAiAkEBIAIbNgIAIAIEQCABEKUNCyAAQezBzwAoAgBHBEAgARCKFwwBCwsgAQ8LIAEgAkH4u8IAEIcNAAufAQAjAEEgayIBJABB1LDPACgCAEECRwRAIAFB1LDPADYCCCABQdiwzwA2AgwgASABQR9qNgIYIAEgAUEMajYCFCABIAFBCGo2AhBB1LDPACABQRBqQfyzxAAQ+gMLAkBB2LDPACgCAEGAgICAeEYEQCAAQYCAgIB4NgIADAELIABB3LDPACgCAEHgsM8AKAIAIAIgAxCnBgsgAUEgaiQAC4UBAgJ/AX4jAEEgayICJAACQCABKAIAQYCAgIB4RgRAIABBgICAgHg2AgAMAQsgASgCFCEDIAEpAgwhBCACQQhqIAEQ0gkgACACKQIINwIAIAIgBDcCFCAAQQhqIAJBEGopAgA3AgAgAiADNgIcIABBEGogAkEYaikCADcCAAsgAkEgaiQAC4ABAQR/QYABIQUCfyAAKAKEASICQYABTQRAIABBhAFqIQMgAEEBaiEEIAIMAQsgAEEEaiEDIAAoAgghBCACIQUgACgCBAshAiACIAVGBEAgABCoDSAAQQRqIQMgACgCCCEEIAAoAgQhAgsgAiAEaiABOgAAIAMgAygCAEEBajYCAAt+AQN/AkACQCAAQShqIgMQ8woiAQRAQQEhAiABKAIAQQlGDQELIAAtAKACQQJHDQECQCADEPMKIgFFDQAgASgCAEEURw0AQQEhAiABLQAEQQRGDQELIAAtAKACQQJHDQFBACECIAMQ8woiAEUNACAAKAIAQSFGDwsgAg8LQQALjgEBAn8jAEEQayICJAAgACgCACIDQQRqIQACfwJAAkACQCADKAIAQQFrDgIBAgALIAIgADYCBCABQamDzABBBSACQQRqQZMBEN0IDAILIAIgADYCCCABQbKDzABBBiACQQhqQZUBEN0IDAELIAIgADYCDCABQb6DzABBByACQQxqQZcBEN0ICyACQRBqJAALfQEBfyAAQQhq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AUEgaiACQRBqKQMANwMAIAFBKGogAkEYaikDADcDACACQSBqJAALbwEDfyACQTBsIQMgAUEwayECAkADQCADRQ0BIAJBMGoiASgCAEESRw0BIAJBNGooAgAiBSgCAEEbRw0BIAUoAggNASADQTBrIQMgASECQRIgBRCfEEUNAAsgACACKQIINwIEQQEhBAsgACAENgIAC3sBAn8gACgCDCAAKAIEIgFrQShuIQIDQCACBEACQAJAAkACQAJAIAEoAgAOAwECAwALIAFBBGoQ/RkMAwsgAUEIahCTHwwCCyABQQRqEPwZDAELIAFBBGoQzSALIAJBAWshAiABQShqIQEMAQsLIAAoAgggACgCABDxGgt6AgF+A38gACgCECECIAAoAgghAyAAKQMAIQEDfyABUAR/IAAgAkGAAWsiAjYCECAAIANBCGoiBDYCCCAAIAMpAwBCf4VCgIGChIiQoMCAf4MiATcDACAEIQMMAQUgACABQgF9IAGDNwMAIAIgAXqnQQF0QfABcWsLCwtyAQJ/IAAoAghBBnQhAiAAKAIEIQMDQCACBEAgAyABEPcdIAJBQGohAiADQUBrIQMMAQsLIABBDGogARDWFCAAKAIYQYCAgIB4RwRAIABBGGogARDPFAsgACgCPCICBEAgAiABEM0UCyAAQUBrIAEQoxwLeAICfwF+IwBBIGsiAyQAQQEhBAJAIAFBBkcNAEEAIQQgAi0AQQ0AQQEhBCACLQBADQAgACgCACADIAIpAyggAkE4aigCABDXGyADIAMoAgg2AhggAyADKQMAIgU3AxAgA0EQahDwByEEIAUQ2A8LIANBIGokACAEC4EBAgJ/An4jAEEQayICJAACQCAALQAlQQJGBEAgASAAEHQMAQsgAiAAKQMIIAAoAhgQ1xsgASgCCCEDIAIpAwAhBCABIAIoAgg2AgggASkDACEFIAEgBDcDACAAKAIgIAEQhgwgASkDABDkHiABIAM2AgggASAFNwMACyACQRBqJAALaAEDfwJAIAAtAEVBA0YNACAAQSBqIQADQCAALQAlQQJGBEAgACgCCEE4bCEBIAAoAgQhAANAIAFBAEchAiABRQ0DIAFBOGshASAAEN8LIABBOGohAEUNAAsFIAAoAiAhAAwBCwsLIAILdAIBfwF+IwBBIGsiBiQAAkACQCAFBEAgASACEMUDIAZBADYCFCAGQQhqIAEgBkEUaiAEIAUQmQMgBi0ACEEERwRAIAYpAwgiB0L/AYNCBFINAgsgASADEMUDCyAAQQQ6AAAMAQsgACAHNwIACyAGQSBqJAALeAECfyAALQAEIQIgAC0ABUUEQCACQQBHDwtBASEBIAJFBEAgACgCACIBLQAcQQRxRQRAIAAgASgCFEH/yMIAQQIgASgCGCgCDBEDACIAOgAEIAAPCyABKAIUQbiGzABBASABKAIYKAIMEQMAIQELIAAgAToABCABC3ICA38BfiMAQRBrIgIkAAJAIAAoAgAiACkDGCIEUA0AIASnQQhrIgEgASgCACIDQQFrNgIAIAIgATYCDCADQQFHDQAgAkEMahCKDAsgACgCDCIBBEAgACgCCCABQQEQhQ4LIABBKEEIEIUOIAJBEGokAAt6AQR/An9BgYCAgHggASgCACIDRQ0AGiADQQJ0IQQgASgCBCEFAkAgAkUEQEEEIQYgBUEEIAQQzRwMAQtBBCAFIARBBCACQQJ0IgMQtgIiBkUNARoLIAEgAjYCACABIAY2AgRBgYCAgHgLIQEgACADNgIEIAAgATYCAAtpAQR/IwBBEGsiAiQAIAJBCGogASgCACIDQRBqKAIAIANBFGooAgAgASgCBCIDEOESIAAgAigCCCIEBH8gAigCDCEFIAEgA0EBajYCBCAAQQRqIAQgBRDQDkEDBUEGCzoAACACQRBqJAALawIDfwF+IwBBEGsiAiQAA0AgAQRAAkAgACkDACIFQgODQgBSDQAgBadBCGsiAyADKAIAIgRBAWs2AgAgAiADNgIMIARBAUcNACACQQxqEIoMCyABQQFrIQEgAEEYaiEADAELCyACQRBqJAALagECfyABQQR0IQEDQCABBEAgAEEEaigCACAAQQhqKAIAIAIQ2x4gAkELIAAtAAwiBEEJayIDIANB/wFxQQ1PG0H/AXEiAxDVGCADQQtGBEAgBCACEL8hCyAAQRBqIQAgAUEQayEBDAELCwt6AQJ/IwBBIGsiAiQAIAAgARCHGyIBBEAgACgCoAIhAyAAQSU2AqACIAAgACkDuAI3A/ACIAJBFGogAEGsAmopAgA3AgAgAkEcaiAAQbQCaigCADYCACACIAApAqQCNwIMIAIgAzYCCCACQQhqEOAICyACQSBqJAAgAQt6AQN/IwBBEGsiAyQAAkACQAJAIAEoAgBBAWsOAgEBAAsgA0EIaiABQQhqEOsVIAMoAggiAiABKAIoEJEMIgQgAiAESRshASACIAQgAiAESxshAgwBCyABKAIMIQIgASgCCCEBCyAAIAI2AgQgACABNgIAIANBEGokAAt5AQF/IwBBEGsiASQAAn8CQAJAAkACQAJAAkAgACgCAEEBaw4GAgECAwQFAAsgASAAQQhqEOUQIAEoAgQMBQsgACgCDAwECyAAKAIUDAMLIAAoAhAMAgsgACgCCAwBCyABQQhqIAAoAgQQzAIgASgCDAsgAUEQaiQAC2sBAX8jAEEgayICJAAgAkEIaiABQSUQuQcCQCACKAIIQSVHBEAgACACKQMINwMAIABBEGogAkEYaikDADcDACAAQQhqIAJBEGopAwA3AwAMAQsgACACKAIMNgIEIABBJjYCAAsgAkEgaiQAC2sBAX8jAEEgayICJAAgAkEIaiABQSYQuwUCQCACKAIIQSVHBEAgACACKQMINwMAIABBEGogAkEYaikDADcDACAAQQhqIAJBEGopAwA3AwAMAQsgACACKAIMNgIEIABBJjYCAAsgAkEgaiQAC2sBAX8jAEEgayICJAAgAkEIaiABQSoQuQcCQCACKAIIQSVHBEAgACACKQMINwMAIABBEGogAkEYaikDADcDACAAQQhqIAJBEGopAwA3AwAMAQsgACACKAIMNgIEIABBJjYCAAsgAkEgaiQAC2wBAX8jAEEgayICJAAgAkEIaiABQfwAELsFAkAgAigCCEElRwRAIAAgAikDCDcDACAAQRBqIAJBGGopAwA3AwAgAEEIaiACQRBqKQMANwMADAELIAAgAigCDDYCBCAAQSY2AgALIAJBIGokAAttAQF/IwBBIGsiAiQAIAJBCGogARC7FQJAIAEoAhgiAUUEQEEAIQEMAQsgARDnGiIBEJkZCyAAIAIpAwg3AwAgACABNgIYIABBEGogAkEYaikDADcDACAAQQhqIAJBEGopAwA3AwAgAkEgaiQAC3MBBH8jAEEQayICJAAgAkEIakEAQQAgASgCCCIEEPETIAIoAgwhAyABIAIoAggiBTYCCCAAIAM2AgwgACABNgIIIAAgBCADazYCECAAIAEoAgQiASADQdgAbGo2AgQgACABIAVB2ABsajYCACACQRBqJAALegEDfyMAQRBrIgMkAAJAAkACQCABKAIAQQFrDgIBAQALIANBCGogAUEIahCTFiADKAIIIgIgASgCKBCRDCIEIAIgBEkbIQEgAiAEIAIgBEsbIQIMAQsgASgCDCECIAEoAgghAQsgACACNgIEIAAgATYCACADQRBqJAALeAIBfwF+IwBBEGsiBSQAAkACQCAEQYA8cUGAPEYEQCADRQ0BIAVBCGogASACQQEQzwIgBS0ACEEERg0BIAUpAwgiBkL/AYNCBFENASAAIAY3AgAMAgsgAEEEOgAADAELQcC/zABBKEGAzsQAELwSAAsgBUEQaiQAC30BAX8jAEEQayICJAAgAkEEaiABKAIEIAEoAggQiAMCQCACKAIERQRAIABBgICAgHg2AgAgACABKQIANwIEIABBDGogAUEIaigCADYCAAwBCyAAIAIpAgg3AgwgACABKQIANwIAIABBCGogAUEIaigCADYCAAsgAkEQaiQAC2sBAX8jAEEQayIFJAACQCAEBEACQCABIANHBEAgBUEIaiADIAQQtRcgBSgCCCIDDQFBACEDDAMLIAAgAiABIAQQtgIhAwwCCyADIAAgBBDvJBoLIAJFDQAgACACIAEQhQ4LIAVBEGokACADC3IBAn8jAEEQayICJAACQCABQYABTwRAIAJBADYCDCACIAEgAkEMahDyByAAIAIoAgAgAigCBBCVEgwBCyAAKAIIIgMgACgCAEYEQCAAEMESCyAAIANBAWo2AgggACgCBCADaiABOgAACyACQRBqJABBAAtcAQJ/AkACQCAALQAAIgMgAS0AAEcNAAJAIANBAWsOAwICAAILIAAtAAEgAS0AAUcNACAALQACIAEtAAJHDQAgAC0AAyABLQADRiECCyACDwsgAC0AASABLQABRgtpAQF/IwBBIGsiAiQAIAJBCGogARCVAwJAIAIoAghBJUcEQCAAIAIpAwg3AwAgAEEQaiACQRhqKQMANwMAIABBCGogAkEQaikDADcDAAwBCyAAIAIoAgw2AgQgAEEmNgIACyACQSBqJAAL3QICBX8DfiMAQSBrIgQkACAEQQhqIQIjAEEgayIDJAAgAUHAAWohBQJAIAEoAsABIAEoAsQBEO0VIgZBgIDEAEYEQCAFEP0RIAJBBjYCAAwBCwJAIAZBMGtBCk8EQCAFEP0RIAZBLkYEQCABKALAASAB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CyAAQQRqIAEQ7iMMAQsgAEEEaiABEKsMCyAAQShqIQAgAkEoayECDAELCwt5AQF/IAAoAghBKGwhAiAAKAIEIQADQCACBEACQAJAAkACQAJAIAAoAgBBAWsOBAABAgMECyAAQQRqIAEQmxsMAwsgAEEEaiABEOUiDAILIABBBGogARDtIwwBCyAAQQRqIAEQrAwLIABBKGohACACQShrIQIMAQsLC3kBAX8gACgCCEEobCECIAAoAgQhAANAIAIEQAJAAkACQAJAAkAgACgCAEEBaw4EAAECAwQLIABBBGogARClGwwDCyAAQQRqIAEQgiQMAgsgAEEEaiABELEkDAELIABBBGogARCtDAsgAEEoaiEAIAJBKGshAgwBCwsLeQEBfyAAKAIIQShsIQIgACgCBCEAA0AgAgRAAkACQAJAAkACQCAAKAIAQQFrDgQAAQIDBAsgAEEEaiABEKcbDAMLIABBBGogARCIJAwCCyAAQQRqIAEQsCQMAQsgAEEEaiABEK4MCyAAQShqIQAgAkEoayECDAELCwt5AQF/IAAoAghBKGwhAiAAKAIEIQADQCACBEACQAJAAkACQAJAIAAoAgBBAWsOBAABAgMECyAAQQRqIAEQqRsMAwsgAEEEaiABEIckDAILIABBBGogARCvJAwBCyAAQQRqIAEQrwwLIABBKGohACACQShrIQIMAQsLC3kBAX8gACgCCEEobCECIAAoAgQhAANAIAIEQAJAAkACQAJAAkAgACgCAEEBaw4EAAECAwQLIABBBGogARCmGwwDCyAAQQRqIAEQhiQMAgsgAEEEaiABELIkDAELIABBBGogARCwDAsgAEEoaiEAIAJBKGshAgwBCwsLeQEBfyAAKAIIQShsIQIgACgCBCEAA0AgAgRAAkACQAJAAkACQCAAKAIAQQFrDgQAAQIDBAsgAEEEaiABEKQbDAMLIABBBGogARCBJAwCCyAAQQRqIAEQtCQMAQsgAEEEaiABELEMCyAAQShqIQAgAkEoayECDAELCwt5AQF/IAAoAghBKGwhAiAAKAIEIQADQCACBEACQAJAAkACQAJAIAAoAgBBAWsOBAABAgMECyAAQQRqIAEQoxsMAwsgAEEEaiABEIAkDAILIABBBGogARC1JAwBCyAAQQRqIAEQsgwLIABBKGohACACQShrIQIMAQsLC3kBAX8gACgCCEEobCECIAAoAgQhAANAIAIEQAJAAkACQAJAAkAgACgCAEEBaw4EAAECAwQLIABBBGogARCoGwwDCyAAQQRqIAEQiiQMAgsgAEEEaiABELMkDAELIABBBGogARCzDAsgAEEoaiEAIAJBKGshAgwBCwsLegEEfyABKAIkIQMgASgCICEEIAEoAhwhBSABKAIYIQYCfyABKAIARQRAIAAgASkDEDcDECAAIAEpAwg3AwhBAAwBCyAAQQRqIAFBBGogAhDQGUEBCyEBIAAgAzYCJCAAIAQ2AiAgACAFNgIcIAAgBjYCGCAAIAE2AgALeQEBfyAAKAIIQShsIQIgACgCBCEAA0AgAgRAAkACQAJAAkACQCAAKAIAQQFrDgQAAQIDBAsgAEEEaiABEK8bDAMLIABBBGogARC3JAwCCyAAQQRqIAEQvSQMAQsgAEEEaiABELUMCyAAQShqIQAgAkEoayECDAELCwt5AQF/IAAoAghBKGwhAiAAKAIEIQADQCACBEACQAJAAkACQAJAIAAoAgBBAWsOBAABAgMECyAAQQRqIAEQrhsMAwsgAEEEaiABELYkDAILIABBBGogARC+JAwBCyAAQQRqIAEQtgwLIABBKGohACACQShrIQIMAQsLC3IBAn8jAEEQayICJAACQCABQYABTwRAIAJBADYCDCACIAEgAkEMahDzBiAAIAIoAgAgAigCBBCPEgwBCyAAKAIIIgMgACgCAEYEQCAAEOkICyAAIANBAWo2AgggACgCBCADaiABOgAACyACQRBqJABBAAt5AQF/IAAoAghBKGwhAiAAKAIEIQADQCACBEACQAJAAkACQAJAIAAoAgBBAWsOBAABAgMECyAAQQRqIAEQuRsMAwsgAEEEaiABEMokDAILIABBBGogARDjJAwBCyAAQQRqIAEQuAwLIABBKGohACACQShrIQIMAQsLC3kBAX8gACgCCEEobCECIAAoAgQhAANAIAIEQAJAAkACQAJAAkAgACgCAEEBaw4EAAECAwQLIABBBGogARDBGwwDCyAAQQRqIAEQ0CQMAgsgAEEEaiABEOUkDAELIABBBGogARC5DAsgAEEoaiEAIAJBKGshAgwBCwsLbwECfyAAKAIIQQZ0IQIgACgCBCEDA0AgAgRAIAMgARDFHCACQUBqIQIgA0FAayEDDAELCyAAKAIQIAAoAhQgARCeFiAAQRhqIAEQ3BkgACgCPCIABEAgAEEEaigCACAAQQhqKAIAIAEoAhQQohULC3kBAX8gACgCCEEobCECIAAoAgQhAANAIAIEQAJAAkACQAJAAkAgACgCAEEBaw4EAAECAwQLIABBBGogARC4GwwDCyAAQQRqIAEQzyQMAgsgAEEEaiABEOQkDAELIABBBGogARC7DAsgAEEoaiEAIAJBKGshAgwBCwsLeQEBfyAAKAIIQShsIQIgACgCBCEAA0AgAgRAAkACQAJAAkACQCAAKAIAQQFrDgQAAQIDBAsgAEEEaiABELobDAMLIABBBGogARDRJAwCCyAAQQRqIAEQ4iQMAQsgAEEEaiABELwMCyAAQShqIQAgAkEoayECDAELCwtkAQF/AkACfyAAQQh2IgEEQCABQTBHBEAgAUEgRg0DQQAgAUEWRw0CGiAAQYAtRg8LIABBgOAARg8LIABB/wFxQcy8zABqLQAAQQFxCw8LIABB/wFxQcy8zABqLQAAQQJxQQF2C2YBBX4gACAAKQMYIgFCEIkgASAAKQMIfCIBhSICIAApAxAiAyAAKQMAfCIEQiCJfCIFNwMAIAAgAkIViSAFhTcDGCAAIAEgA0INiSAEhSICfCIBIAJCEYmFNwMQIAAgAUIgiTcDCAtwAQJ/IwBBEGsiAiQAAkAgAUGAAU8EQCACQQA2AgwgAiABIAJBDGoQ8gcgACACKAIAIAIoAgQQlRIMAQsgACgCCCIDIAAoAgBGBEAgABDBEgsgACADQQFqNgIIIAAoAgQgA2ogAToAAAsgAkEQaiQAC2wBA38DQAJAIAEEQCAAKAIAIABBBGooAgAQ0RwgAEEYaigCACEDIABBHGooAgAiBCgCACICBEAgAyACEQEACyAEKAIEIgJFDQEgAyACIAQoAggQhQ4MAQsPCyABQQFrIQEgAEEgaiEADAALAAt5AQJ/QRAhAQJAAkACQEEGIAAoAgAiACgCCEECayICIAJBCU8bQQJrDgUCAgICAQALQQQhAQsgAEEIaiABaiIBKAIAIAFBBGooAgAQxxwLAkAgAEF/Rg0AIAAgACgCBCIBQQFrNgIEIAFBAUcNACAAQdAAQQQQhQ4LC3kBAX8jAEEQayIDJAAgAyACNgIMIAMgASgCAEEIakHMxsQAEPcUIAMoAgQhAQJAIAMoAgAgA0EMahCRByICRQRAIABBgICAgHg2AgAMAQsgACACQQRqKAIAIAJBCGooAgAQ1gYLIAEgASgCAEEBazYCACADQRBqJAALeQEBfyMAQRBrIgMkACADIAI2AgwgAyABKAIEQQhqQazHxAAQ9xQgAygCBCEBAkAgAygCACADQQxqEJEHIgJFBEAgAEGAgICAeDYCAAwBCyAAIAJBBGooAgAgAkEIaigCABDWBgsgASABKAIAQQFrNgIAIANBEGokAAtwAQJ/IwBBEGsiAiQAAkAgAUGAAU8EQCACQQA2AgwgAiABIAJBDGoQ8gcgACACKAIAIAIoAgQQjxIMAQsgACgCCCIDIAAoAgBGBEAgABDpCAsgACADQQFqNgIIIAAoAgQgA2ogAToAAAsgAkEQaiQAC2IBBH8CQCABIANHDQAgAUEBaiEBA0AgAUEBayIBRSEEIAFFDQEgAkEEaiEDIABBBGohBSACKAIAIQYgACgCACACQQhqIQIgAEEIaiEAIAUoAgAgBiADKAIAEK4YDQALCyAEC2EBBH8jAEEQayICJAAgAAJ/IAFBKGoiBBDzCiIFRQRAQQAMAQtBACAFKAIAQRNHDQAaIAJBCGogAUEBIAQQ3hgQ5QUgAigCCCEDIAIoAgwLNgIEIAAgAzYCACACQRBqJAALdAEFfyMAQRBrIgIkACABKAIAIQQgASgCBCEFIAJBCGogARCXCAJAIAIoAghFBEBBgIDEACEDDAELIAIoAgwhAyABIAEoAgAgASgCCCIGIAVqIAQgASgCBGprajYCCAsgACADNgIEIAAgBjYCACACQRBqJAALeAECfyAAKAIAIQMgAEEANgIAQQhBMBCxICICRQRAAAsgAkKBgICAEDcDACACIAM2AiggAiABKQMANwMIIAJBEGogAUEIaikDADcDACACQRhqIAFBEGopAwA3AwAgAkEgaiABQRhqKQMANwMAIAAQkh8gACACNgIAC20BAn8jAEEgayIBJAACQCAAKAIAQQJGBEAgAEEEaiECDAELIAEgADYCCCABIABBBGoiAjYCDCABIAFBH2o2AhggASABQQxqNgIUIAEgAUEIajYCECAAIAFBEGpBgMzGABD6AwsgAUEgaiQAIAILcwEFfyABKAIUIQMgASgCECEEIAEoAgwhBSABKAIcIQYgASgCGCEHIAAgASACEJcQ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IAVBCGogASAFQRRqIANBABA4IAUoAgwhASAAIAUoAgg2AgAgACABNgIEIAVBIGokAAtzAAJAAkACQAJAAkACQAJAIAAoAgBBAWsOBgECAwQGBQALIABBCGogARC4EA8LIAEgAEEEahCwCw8LIABBBGogARCOIA8LIAEgAEEEahCfCA8LIABBBGogARDOJCAAQQhqIAEQyiQPCyAAQQRqIAEQyiQLC3UBAn8jAEEQayICJAAgASgCFEGAo8wAQQUgASgCGCgCDBEDACEDIAJBADoACSACIAM6AAggAiABNgIEIAIgADYCDCACQQRqQYWjzABBByACQQxqQf8DENIFQYyjzABBBiAAQQhqQYAEENIFEIkMIAJBEGokAAt1AQJ/IwBBEGsiAiQAIAEoAhRBgKPMAEEFIAEoAhgoAgwRAwAhAyACQQA6AAkgAiADOgAIIAIgATYCBCACIAA2AgwgAkEEakGFo8wAQQcgAkEMakH/AxDSBUGMo8wAQQYgAEEIakGBBBDSBRCJDCACQRBqJAALfAEBfyMAQRBrIgMkAAJAIAAoAgRBA0YNACABKQMAQp3Kgvjp5dLUDVINACABKQMIQrGYhY3eg4muWFINACABKAIQDQAgASAAQQRqNgIQCyADQQhqIAAgACgCACgCBBEAACADKAIIIAEgAiADKAIMKAIoEQQAIANBEGokAAtqAgF/AX4jAEEwayIDJAAgAyABNgIEIAMgADYCACADQQM2AgwgA0GQhcAANgIIIANCAjcCFCADQoCAgICAASIEIANBBGqthDcDKCADIAQgA62ENwMgIAMgA0EgajYCECADQQhqIAIQ8hAAC2oCAX8BfiMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQfS6wAA2AgggA0ICNwIUIANCgICAgIABIgQgA62ENwMoIAMgBCADQQRqrYQ3AyAgAyADQSBqNgIQIANBCGogAhDyEAALagIBfwF+IwBBMGsiAyQAIAMgADYCACADIAE2AgQgA0ECNgIMIANBzL/AADYCCCADQgI3AhQgA0KAgICAgAEiBCADQQRqrYQ3AyggAyAEIAOthDcDICADIANBIGo2AhAgA0EIaiACEPIQAAtqAgF/AX4jAEEwayIDJAAgAyAANgIAIAMgATYCBCADQQI2AgwgA0Hsv8AANgIIIANCAjcC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BGogARDYCg8LIABBBGogARDBHQ8LIABBBGogARDpIgsLZwECfwJAIABFDQAgACgCCEEMbCECIAAoAgQhAANAIAJFDQECQCAAKAIADQAgACgCBCIDKAIAQQhHDQAgAygCKEGAgICAeEYNACABIANBKGoQuBkLIABBDGohACACQQxrIQIMAAsACwtiAQJ/IAAoAghBBHQhAiAAKAIEIQADQAJAIAIEQCABLQA0RQ0BIAEtADohAyABQQE6ADogACABEOUiIABBDGogARC+HSABIAM6ADoMAQsPCyAAQRBqIQAgAkEQayECDAALAAtuAAJAAkACQAJAAkACQAJAIAAoAgBBAWsOBgECAwQGBQALIAApAwggACgCGCABEIEWDwsgAEEEaiABENEQDwsgAEEEaiABENodDwsgAEEEaiABELcJDwsgAEEEaiABENAdDwsgAEEEaiABEIgkCwt1AQJ/AkACQAJAAkACQAJAAkAgACgCAEEBaw4HAAEFBgYCAwQLIAAtACRFDQQMBQsgACgCBC0AGEUNAwwECyAAKAIELQAsRQ0CDAMLIAAoAgQiAi0AUA0CIAItAFFFDQEMAgsgAC0AJA0BCyAAEIUWIQELIAELbwEBfyMAQSBrIgAkAEGYwc8AKAIAQQJHBEAgAEGQwc8ANgIIIABBkMHPADYCDCAAIABBH2o2AhggACAAQQxqNgIUIAAgAEEIajYCEEGYwc8AIABBEGpBiKHLABD6AwtBlMHPACgCABogAEEgaiQAC2sBAn8gASgCACECIAFBADYCAAJAIAEtADwNACABKAIEIQMgASgCKCABKAIQIAEoAhQQkAcgASgCOARAIAFBADYCNCABIAEoAjBBAWo2AjALIAFBAToAPCACRQ0AIAEgAxDFAwsgAEEEOgAAC2QBAn8jAEEQayICJAACfyABKAIAIgMEQCACQQhqIAMgASgCBBDxESACKAIIIQMgAigCDAwBCyACIAEoAgQQmAggAigCACEDIAIoAgQLIQEgACADNgIAIAAgATYCBCACQRBqJAALbAACQAJAAkACQAJAAkACQCAAKAIAQQFrDgYBAgMEBgUACyAAQQhqIAEoAhQQ0iQPCyAAQQRqIAEQ4hQPCyAAQQRqIAEQryUPCyAAQQRqIAEQswMPCyAAQQRqIAEQzB4PCyAAQQRqIAEQ0CQLC2ABAn8j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IABB7QBB/LXEAEEDIABBDGpBxgBB/7XEAEEVIABBGGpB7gBBlLbEAEENIAJBDGpB7wAQxAggAkEQaiQAC2gBAX8jAEEQayICJAAgAiAAKAIAIgBBJGo2AgwgAUHfv8QAQQ1BmK/LAEEFIABBPGpB8gBBna/LAEEHIABB8wBBz6fMAEEEIABBDGpB9ABB7L/EAEELIAJBDGpB9QAQxAggAkEQaiQAC2IBAX8jAEFAaiIDJAAgA0EYaiABQRBqKQMANwMAIANBEGogAUEIaikDADcDACADIAI2AiAgA0EPNgIAIAMgASkDADcDCCADENsYIQEgAEG7AToAACAAIAE2AgQgA0FAayQAC3ICA38CfiABIAEoAuQCIgI2ApwDIAEgASgC4AIiAzYCmAMgASgCyAIgAUElNgLIAkEgRwRAQcC/zABBKEHo08sAELwSAAsgASkD2AIhBSABKQPQAiEGIAAgAjYCFCAAIAM2AhAgACAFNwMIIAAgBjcDAAtaAQF/IwBBQGoiASQAIAFBFGogAEEQaikCADcCACABQQxqIABBCGopAgA3AgAgAUEYNgIAIAFBHGogAEEYaikCADcCACABIAApAgA3AgQgARDbGCABQUBrJAALWgEBfyMAQUBqIgEkACABQSBqIABBGGopAwA3AwAgAUEYaiAAQRBqKQMANwMAIAFBEGogAEEIaikDADcDACABQRs2AgAgASAAKQMANwMIIAEQ2xggAUFAayQAC2IBAX8jAEFAaiIDJAAgA0EYaiABQRBqKQMANwMAIANBEGogAUEIaikDADcDACADIAI2AiAgA0EfNgIAIAMgASkDADcDCCADENsYIQEgAEG7AToAACAAIAE2AgQgA0FAayQAC2QBAX8CfyABKAIAQYGAgIB4RwRAQRhBBBD+GiICQRBqIAFBEGopAgA3AgAgAkEIaiABQQhqKQIANwIAIAIgASkCADcCAEEADAELIAEoAgQhAkEBCyEBIAAgAjYCBCAAIAE2AgALaAEBfyMAQRBrIgIkACACIAAoAgAiAEEUajYCDCABQZDuxABBCEHPp8wAQQQgAEEMakHqAEGY7sQAQQUgAEGaAUHXhcYAQQggAEEYakHuAEGUhsYAQQggAkEMakGZARDECCACQRBqJAALaAEBfyMAQRBrIgIkACACIAAoAgAiAEEUajYCDCABQdnt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IAJBEGokAAuQAQAgAEHIAGpB+AAQzQ4gAEHUAGpBIRDNDiAAQeAAakE+EM0OIABC/ICAgOALNwJAIABC/ICAgMAPNwI4IABC24CAgNALNwIwIABCp4CAgOALNwIoIABCroCAgIAMNwIgIABCrICAgOAONwIYIABC3oCAgOAHNwIQIABCq4CAgKAHNwIIIABCrYCAgMAPNwIAC1sBAX8jAEEwayIDJAAgAyABNgIMIAMgADYCCCADQQE2AhQgA0GgxMwANgIQIANCATcCHCADIANBCGqtQoCAgIDAAYQ3AyggAyADQShqNgIYIANBEGogAhDyEAALZgECfyMAQSBrIgEkAAJAAkACQCAApyICQQNxQQFrDgICAAELIAFBATYCCCABQbC/wQA2AgQgAUIANwIQIAEgAUEcajYCDCABQQRqQbi/wQAQ8hAACyACKQMIIQALIAFBIGokACAAC10BAn8jAEEQayIDJAAgA0EEaiACEKULIAMoAgghBCADKAIERQRAIAMoAgwgASACEO8kIQEgACACNgIIIAAgATYCBCAAIAQ2AgAgA0EQaiQADwsgBCADKAIMEKIgAAtWAQF/IwBBIGsiAiQAIAJBADYCECACQQhqIAEgAkEQahDyByACQRRqIAIoAgggAigCDBDKDiAAQQhqIAJBHGooAgA2AgAgACACKQIUNwIAIAJBIGokAAtbAQJ/IwBBEGsiAyQAIANBBGogAhClCyADKAIIIQQgAygCBARAIAQgAygCDBCiIAALIAMoAgwgASACEO8kIQEgACACNgIIIAAgATYCBCAAIAQ2AgAgA0EQaiQAC1sBA38jAEEQayICJAAgAkEEakEBEKULIAIoAgghAyACKAIEBEAgAyACKAIMEKIgAAsgAigCDCEEIABBATYCCCAAIAQ2AgQgACADNgIAIAQgAToAACACQRBqJAALUwECfyMAQRBrIgUkAAJAIAIgBEkEQCAFQQRqIgYgAyAEEO4NIAAgBiABIAIQoAcMAQsgBUEEaiIGIAEgAhDuDSAAIAYgAyAEEKAHCyAFQRBqJAALWAECfyMAQRBrIgIkACABLQAAQQNHBH9BAAUgAkEIaiABKAIEIgEoAgAgASgCBCgCGBEAACACKAIMIQMgAigCCAshASAAIAM2AgQgACABNgIAIAJBEGokAAtdAQJ/IwBBEGsiAyQAIANBBGogAhCkCyADKAIIIQQgAygCBEUEQCADKAIMIAEgAhDvJCEBIAAgAjYCCCAAIAE2AgQgACAENgIAIANBEGokAA8LIAQgAygCDBCiIAALWAECfyMAQRBrIgIkACABLQAAQQNHBH9BAAUgAkEIaiABKAIEIgEoAgAgASgCBCgCJBEAACACKAIMIQMgAigCCAshASAAIAM2AgQgACABNgIAIAJBEGokAAthAQR/IAEoAhAhAyABKAIMIQQCfyABKAIARQRAIAEoAgQhAiABKAIIIQFBAAwBCyABQQRqEN0eIQJBAQshBSAAIAM2AhAgACAENgIMIAAgATYCCCAAIAI2AgQgACAFNgIAC2kBAX8jAEEgayIDJAAgAyACOgAJIAMgASgBqgI2AAMgAyABLwGuAjsAByADIAEpALECNwAKIAMgASkAuQI3ABIgAyABKADBAjYAGiADIAEvAMUCOwAeIAAgASADQQNqEMQQIANBIGokAAtZAQJ/A0ACQCABIgMgAygCCCIBIAAgACABSRs2AgwgAyABIAAgACABSxs2AgggAygCECIERQ0AIARBBGohASAEKAIAQQhGDQELCyADQRBqEJAfIAMgAjYCEAtTAQJ/An8gACgChAEiAUGAAU0EQCAAQYQBaiECIABBAWoMAQsgAEEEaiECIAAoAgQhASAAKAIICyABRQRAQQ0PCyACIAFBAWsiATYCACABai0AAAtSAQJ/IwBBEGsiAiQAAn8gACgCACIDQQFqQX5xIANGBEAgACgCCAwBCyACQQhqIAAQ8hQgAigCCCEDIAIoAgwLIQAgASADIAAQ6wIgAkEQaiQAC1QBBX8gACgCECIBBEAgACgCDCIEIAAoAggiAigCCCIDRwRAIAIoAgQiBSADQTBsaiAFIARBMGxqIAFBMGwQ8CQaIAAoAhAhAQsgAiABIANqNgIICwtaAQF/IwBBEGsiAiQAAn8gAC0AFEECRgRAIAIgADYCCCABQZj+xQBBDSACQQhqQfABEN0IDAELIAIgADYCDCABQaSDzABBBSACQQxqQawBEN0ICyACQRBqJAALYwEBfyMAQRBrIgIkACACIABBFGo2AgwgAUGkg8wAQQVBz6fMAEEEIABBCGpB6gBB0IXGAEEEIABBEGpB3gFB1IXGAEEDIABBoAJB14XGAEEIIAJBDGpBoQIQxAgg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ahC3GyAAQcQAahCFFyAAQRhqELcbIAAoAjBBgICAgHhHBEAgAEEwahC3GwsgACgCKCIDIQEgACgCLCECA0ACQAJAIAIEQCABKAIARQ0BIAEQ3xcgAUEQaigCACABQRRqKAIAEMkbDAELDAELIAJBAWshAiABQRxqIQEMAQsLIAAoAiQgAxDLGwtRAQN/IwBBEGsiAiQAIAIgATYCCCABEMIbBH9BAAUgAkEIaiACQQ9qQfj9wwAQlAQhA0EBCyEEIAEQ0R4gACADNgIEIAAgBDYCACACQRBqJAALSAEBfwJAIAAgASACIAMQsA1FDQBBASEEIAAgAksNACAAIAFqIgEgAk0NACAAQQEgAyADQQFNGyACaiIATyAAIAFLciEECyAEC1IBA38gAEEBNgIEIAAgASgCBCIDIAEoAgAiBGtBGG4iAiACQQAgASgCDCABKAIIRyIBGyADIARGGzYCCCAAIAJBf0EAIAEbIgAgACACSxs2AgALVgEDfyMAQRBrIgIkACACQQRqIAFBARDNCSACKAIIIQMgAigCBARAIAMgAigCDBCiIAALIAIoAgwhBCAAIAE2AgggACAENgIEIAAgAzYCACACQRBqJAALVgECfyMAQRBrIgIkACACQQRqIAFBABDNCSACKAIIIQEgAigCBARAIAEgAigCDBCiIAALIAIoAgwhAyAAQQA2AgggACADNgIEIAAgATYCACACQRBqJAALUAECfyMAQRBrIgIkACABKAIAIgEoAgBBAUcEf0EABSACQQhqIAFBBGoQzw4gAigCDCEDIAIoAggLIQEgACADNgIEIAAgATYCACACQRBqJAALUQEDfyMAQTBrIgIkACAAQcgCaiEBIAAoAsgCQSVGBEAgAkEIaiIDIAAQPiABEJMHIAEgA0EoEO8kQQAgACgCyAJBJUcbIQELIAJBMGokACABC1gBAX8jAEEQayICJAACfyABBEAgAkEIaiAAEOoJQQEgAigCCCACKAIMQZSLzABBBRCuGA0BGgsgAiAAEOoJQYiFxgAgAigCACACKAIEELEDCyACQRBqJAALUgECfyMAQRBrIgIkACAAAn8gASgCAEEFRgRAIAEoAhQhAyABKAIQDAELIAJBCGogARDrFSACKAIMIQMgAigCCAs2AgAgACADNgIEIAJBEGokAAtTAgJ/AX4jAEEQayIBJAAC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ayICJAACfyAALQAUQQNGBEAgASgCFEHhwMwAQQQgASgCGCgCDBEDAAwBCyACIAA2AgwgAUHlwMwAQQQgAkEMakGnAxDdCAsgAkEQaiQAC1YBAX8jAEEQayICJAACfyAALQAAQQNGBEAgASgCFEHhwMwAQQQgASgCGCgCDBEDAAwBCyACIAA2AgwgAUHlwMwAQQQgAkEMakHOAxDdCAsgAkEQaiQAC1YBAX8jAEEQayICJAACfyAAKAIAQQhGBEAgASgCFEHhwMwAQQQgASgCGCgCDBEDAAwBCyACIAA2AgwgAUHlwMwAQQQgAkEMakHXAxDdCAsgAkEQaiQAC1YBAX8jAEEQayICJAACfyAAKQMAQgJRBEAgASgCFEHhwMwAQQQgASgCGCgCDBEDAAwBCyACIAA2AgwgAUHlwMwAQQQgAkEMakHgAxDdCAsgAkEQaiQAC1UCAX8BfgJAIAEoAgBFDQAgASgCBCICIAEoAgxHBEAgASACQRBqNgIEIAIoAgghASACKQMAIQMMAQsgARC9HyABQQA2AgALIAAgATYCCCAAIAM3AwALUwECfyAAKAIIQThsIQIgACgCBCEAA0AgAgRAIAAgARCQECABLwEkIQMgAUECOgAkIABBMGogARCvHSABIAM7ASQgAkE4ayECIABBOGohAAwBCwsLUAEBfyAAKAIIQThsIQIgACgCBEEwaiEAA0ACQCACBEAgAEEwayABEIwQIAAoAgBFDQEgACABEOgiDAELDwsgAkE4ayECIABBOGohAAwACwALUAEBfyAAKAIIQThsIQIgACgCBEEwaiEAA0ACQCACBEAgAEEwayABEP0NIAAoAgBFDQEgACABEOciDAELDwsgAkE4ayECIABBOGohAAwACwALUAEBfyAAKAIIQThsIQIgACgCBEEwaiEAA0ACQCACBEAgAEEwayABEI8QIAAoAgBFDQEgACABEOQiDAELDwsgAkE4ayECIABBOGohAAwACwALUwECfyAAKAIIQThsIQIgACgCBCEAA0AgAgRAIAEtADkhAyABQQA6ADkgACABEP4NIAEgAzoAOSAAQTBqIAEQrB0gAkE4ayECIABBOGohAAwBCwsLXQACQAJAAkACQAJAAkACQCAAKAIAQQFrDgYBAgMEBgUACyAAQQhqEMwdDwsgAEEEahD/EA8LIABBBGoQ8CAP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IAEEQCAAQTBrEI0QIAAoAgBFDQEgABD6JAwBCw8LIAFBOGshASAAQThqIQAMAAsAC9ECAgV/AX4CQCAAKAIIIgVBAk8NACMAQRBrIgMkACAAQQhqIgEoAgghAiABKAIEIQQgASgCAARAIANBCGogBCACEJEYIAMoAgghBCADKAIMIQILIAQgACACKAI0EQAAIANBEGokACAAKQMAIQYjAEEQayIDJAAgASgCCCECIAEoAgQhBCABKAIABEAgA0EIaiAEIAIQkRggAygCCCEEIAMoAgwhAgsgBCAGIAIoAkARJAAaIANBEGokACAFRQ0AIAAoAgwiASABKAIAIgFBAWs2AgAgAUEBRw0AIABBDGoiASgCACEAIAEoAgQiAygCCCEBIAMoAgAiAgRAIAAgAUEBa0F4cWpBCGogAhEBAAsCQCAAQX9GDQAgACAAKAIEIgJBAWs2AgQgAkEBRw0AIABBBCABIAFBBE0bIgAgACADKAIEakEHakEAIABrcRDNHAsLC1sAAkACQAJAAkACQAJAIAAoAgBBAWsOBgABAgMFBAULIABBBGogARCKEg8LIABBBGogARCfJQ8LIABBBGogARDbCg8LIAEgAEEEahC7Fg8LIAEgACgCBBDZAQsLgQECAn4Bf0Hgxs8AKQMAUARAQQFBABDrFCECQeDGzwApAwBB4MbPACACNwMAEPEOC0Hgxs8AKQMAEPgUIQIgAEEQaiABQRBqKQMANwMAIABBCGogAUEIaiIEKQMANwMAIAAgASkDADcDACAEQgA3AwAgASACNwMAIAFBDWpCADcAAAtMAQF/IAAoAghBOGwhASAAKAIEQTBqIQADQAJAIAEEQCAAQTBrEMgPIAAoAgBFDQEgABCRJQwBCw8LIAFBOGshASAAQThqIQAMAAsAC0wBAX8gACgCCEE4bCEBIAAoAgRBMGohAANAAkAgAQRAIABBMGsQyQ8gACgCAEUNASAAEJMlDAELDwsgAUE4ayEBIABBOGohAAwACwALpQEBBX8gACgCBCEDIAAoAgAhASAAQoiAgICAATcCACADIAFrQdgAbiECAkAgASADRg0AA0AgAkUNASACQQFrIQIgARD9BiABQdgAaiEBDAALAAsgACgCECIBBEAgACgCDCIEIAAoAggiAigCCCIDRwRAIAIoAgQiBSADQdgAbGogBSAEQdgAbGogAUHYAGwQ8CQaIAAoAhAhAQsgAiABIANqNgIICwtMAQJ/IAAoAghBKGwhAiAAKAIEIQEDQCACBEAgASgCAEEHRwRAIAEQyQ8LIAFBKGohASACQShrIQIMAQsLIABBFGoQ1yEgAEEAOgAYC0UBBH8gACgCBCEFIAAoAgAhAwJAA0AgASACRg0BIAMgBUcEQCAAIANBDGoiAzYCACACQQFqIQIMAQsLIAEgAmshBAsgBAtQAQN/IAAtAABBA0YEQCAAKAIEIgAoAgAhAiAAKAIEIgMoAgAiAQRAIAIgAREBAAsgAygCBCIBBEAgAiABIAMoAggQhQ4LIABBDEEEEIUOCwtOAQF/IAAoAhgiAiABEMwYIAAtABQEQCABAn8gAgRAIAEoAhwgASgCICACKAIEQQFrEM8MDAELIAEoAhwgASgCICAAKAIMEKINCxCxFwsLVwECfwJAAkACQAJAAkBBCyAAKAIAIgJBgICAgHhzIgEgAUESTxsiAQ4DAgEDAAsgAUELRg0DCw8LIABBBGoQtxAPCyAAQQRqEM4TDwsgAiAAKAIEEMccC0wBAX8jAEEQayICJAAgAkEAOgAIIAIgATYCBCACIAA2AgAgAiACNgIMIAJBDGpBvI/AABAAIAItAAhBA0cEQCACEM0aCyACQRBqJAALSwEBfyMAQRBrIgMkACADQQhqIAEgAhA/IABBACADKAIMIgIgAygCCCIBGzYCACAAIAFBAEc2AgggACACQQAgARs2AgQgA0EQaiQAC00BAX8jAEEwayIBJAAgAUEBNgIMIAFB4LnAADYCCCABQgE3AhQgASABQS9qrUKAgICAsAOENwMgIAEgAUEgajYCECABQQhqIAAQ8hAAC00BAX8jAEEwayIBJAAgAUEBNgIMIAFBhLrAADYCCCABQgE3AhQgASABQS9qrUKAgICAwAOENwMgIAEgAUEgajYCECABQQhqIAAQ8hAAC1kBAX8gASgCDCECAkACQAJAAkAgASgCBA4CAAECCyACDQFBASEBQQAhAgwCCyACDQAgASgCACIBKAIEIQIgASgCACEBDAELIAAgARCwBQ8LIAAgASACEMoOC0wBAn8gAEH/AXFBA0YEQCABKAIAIQAgASgCBCIDKAIAIgIEQCAAIAIRAQALIAMoAgQiAgRAIAAgAiADKAIIEIUOCyABQQxBBBCFDgsLSwAgAEEANgIQIAAgBDYCDCAAIAM2AgggACACNgIEIAAgATYCACAAIAIgAWtBAnYiATYCGCAAIAEgBCADa0ECdiIAIAAgAUsbNgIUC0wBA38gASEDIAIhBCABKAKIAiIFBEAgAS8BkAMhBCACQQFqIQMLIAFByANBmAMgAhtBCBCFDiAAIAU2AgAgACADrSAErUIghoQ3AgQLTQECfyMAQRBrIgEkACAAKAIQIgIEQCABQQRqIAAoAgQgACgCCCACQQFqEJMLIAAoAgwgASgCDGsgASgCBCABKAIIEM0cCyABQRBqJAALUgEBf0Ggzc8ALQAAGkEgEFUiA0UEQAALIAMgATYCBCADIAA2AgAgAyACKQMANwMIIANBEGogAkEIaikDADcDACADQRhqIAJBEGopAwA3AwAgAwtRACAAIAEpAaoCNwEEIABBGWogAUG/AmopAAA3AAAgAEEUaiABQboCaikBADcBACAAQQxqIAFBsgJqKQEANwEAIAFBKGogAhC7BiAAIAE2AgALSgEBfyMAQUBqIgEkACABQRhqIABBEGopAwA3AwAgAUEQaiAAQQhqKQMANwMAIAFBGjYCACABIAApAwA3AwggARDbGCABQUBrJAALSgEBfyMAQUBqIgEkACABQRRqIABBEGooAgA2AgAgAUEMaiAAQQhqKQIANwIAIAFBGTYCACABIAApAgA3AgQgARDbGCABQUBrJAALSgEBfyMAQUBqIgEkACABQRRqIABBEGooAgA2AgAgAUEMaiAAQQhqKQIANwIAIAFBFjYCACABIAApAgA3AgQgARDbGCABQUBrJAALSgEBfyMAQUBqIgEkACABQRRqIABBEGopAgA3AgAgAUEMaiAAQQhqKQIANwIAIAFBHTYCACABIAApAgA3AgQgARDbGCABQUBrJAALSwEBfyMAQRBrIgQkACAEQQA2AgwgBCADOgAMIAEgAiAEQQxqQQEQsBghAyAAIAJBAWs2AgQgACABQQFqQQAgAxs2AgAgBEEQaiQAC1sAAkAgAiADQZmLzABBBRCuGEUEQCACIANBu4fMAEEHEK4YDQEgAiADQcKHzABBBhCuGEUEQCAAQQY6AAAPCyAAQYA8OwEADwsgAEGCAjsBAA8LIABBgD47AQALWwACQCACIANBtIvMAEEGEK4YRQRAIAIgA0GHh8wAQQgQ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CDcDCCAAIAEpAxg3AxggACABKQMANwMAIAAgASkDIDcDICAAIAEpAxA3AxAgAEEFOgAsC0kBAn8jAEEQayICJAAgAkEIaiABEJUWIAAgAigCCCIDIAEoAiAQkQwiASABIANJGzYCBCAAIAMgASABIANLGzYCACACQRBqJAALSAECfyAAKAIIQQZ0IQIgACgCBCEDA0AgAgRAIAMgARDLHiACQUBqIQIgA0FAayEDDAELCyAAQQxqIAEQ6RQgAEEYaiABEMMcC0gBAn8gACgCCEEGdCECIAAoAgQhAwNAIAIEQCADIAEQzR4gAkFAaiECIANBQGshAwwBCwsgAEEMaiABEOoUIABBGGogARC5HAtIAQJ/IAAoAghBBnQhAiAAKAIEIQMDQCACBEAgASADENUXIAJBQGohAiADQUBrIQMMAQsLIABBDGogARDnFCAAQRhqIAEQxhwLUAEBfyMAQRBrIgIkACACQQhqIAEgASgCACgCBBEAACACIAIoAgggAigCDCgCGBEAACACKAIEIQEgACACKAIANgIAIAAgATYCBCACQRBqJAALqAIBA38jAEEgayICJAAgAkEQaiIDIABBEGopAgA3AwAgAkEIaiIEIABBCGopAgA3AwAgAkEBOwEcIAIgATYCGCACIAApAgA3AwAjAEEgayIAJAAgAigCGCEBIABBEGogAykCADcDACAAQQhqIAQpAgA3AwAgACACNgIcIAAgATYCGCAAIAIpAgA3AwBBACECIwBBEGsiASQAIAAoAgwhAwJAAkACQAJAIAAoAgQOAgABAgsgAw0BQQEhAwwCCyADDQAgACgCACIDKAIEIQIgAygCACEDDAELIAFBgICAgHg2AgAgASAANgIMIAFB4gAgACgCHCIALQAcIAAtAB0Q6AwACyABIAI2AgQgASADNgIAIAFB4wAgACgCHCIALQAcIAAtAB0Q6AwAC0oBA38gACgCACICBEAgACgCBCIDKAIAIgEEQCACIAERAQALIAMoAgQiAQRAIAIgAygCCCABEM0cCyAAKAIMIAAoAggoAgwRAQALC1IBAn8jAEEQayIBJABB0LDPAEHQsM8AKAIAIgJBAWo2AgAgAUHAABDeCCAAQQhqIAFBCGopAgA3AgAgACABKQIANwIAIAAgAjYCECABQRBqJAALTAECfyMAQRBrIgIkACACQQhq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AUGUhsYAQQggAkEMakGZARCVCSACQRBqJAALUwACQAJAAkACQAJAIAAoAgAOBAECAwQACyAAKQMQIAAoAhgQpSIPCyAAKQMIENgPDwsgACkDCCAAKQMYEJIiDwsgACkDGBDkHg8LIABBBGoQzCALPgACQCABRQRAQQAhAgwBC0F/IAJBAWtndkEAIAJBAk8bIgFBf0chAiABQQFqIQELIAAgATYCBCAAIAI2AgALSgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQbLgxABBCUHPp8wAQQQgAEEEakHqAEGQhsUAQQMgAkEMakGRARCVCSACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiAEEIajYCDCABQcTgxABBCkHPp8wAQQQgAEHqAEGQhsUAQQMgAkEMakHLARCVCSACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQfPgxABBEEHPp8wAQQQgAEEMakHqAEGMicYAQQQgAkEMakHUARCVCSACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiAEEIajYCDCABQYvixABBDEHPp8wAQQQgAEHqAEHDiMUAQQUgAkEMakHhARCVCSACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQeH2xABBDUHg7cQAQQogAEEEakHqAEGMicYAQQQgAkEMakGRARCVCSACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQd+FxgBBCUHPp8wAQQQgAEEIakHqAEHUhcYAQQMgAkEMakHsARCVCSACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiAEEIajYCDCABQbHixABBEUHPp8wAQQQgAEHqAEHzhcYAQQQgAkEMakHuARCVCSACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiAEEIajYCDCABQY7gxABBCUHPp8wAQQQgAEHqAEHDiMUAQQUgAkEMakHhARCVCSACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQfbfxABBCEHPp8wAQQQgAEEEakHqAEGMicYAQQQgAkEMakGRARCVCSACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQaPixABBDkHPp8wAQQQgAEEEakHqAEGM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IANBEGokAAs+AQF/IwBBEGsiAyQAIANBCGogACABIAIQjQggAygCCCIAQYGAgIB4RwRAIAAgAygCDBCiIAALIANBEGokAAs+AQF/IwBBEGsiAyQAIANBCGogACABIAIQ+wcgAygCCCIAQYGAgIB4RwRAIAAgAygCDBCiIAALIANBEGokAAs6AAJAIAIgA00EQEEAIQMMAQsgASADQQN0aiIBKAIAQQhqIQMgASgCBCECCyAAIAI2AgQgACADNgIACzwBAX8jAEEQayICJAAgAiAAKAIAIgA2AgwgAUG4vcQAQRAgAEEMakHqACACQQxqQesAEMUIIAJBEGokAAs8AQF/IwBBEGsiAiQAIAIgACgCACIAQQxqNgIMIAFB1L/EAEEHIABBxgAgAkEMakH6ABDFCCACQRBqJAALOwEBfyAAKAIAKAIAIgIpAwAgACgCBCgCACABQQR0a0EQayIAKQMAhSACQQhqKQMAIABBCGopAwCFhFALRQEBf0HMxs8AKAIAIgFFBEBBuJjMAEHIABCJIgALIAEQrxggAUEIaigCACABQQxqKAIAIABBnLjEABCTGCgCACABENgXCz0AAkAgACgCACIAKAIAQQNHBEAgABDdFQwBCyAAQRBqENoCIABBBGoQ6B4gAEEgahDlHgsgAEEoQQgQhQ4LPgEBfyMAQRBrIgMkACADQQhqIAAgASACEIYIIAMoAggiAEGBgICAeEcEQCAAIAMoAgwQoiAACyADQRBqJAALOAEBfyAAKAKEASIBQYABTQR/IABBAWoFIAAoAgQhASAAKAIICyABRQRAQQBBAEGQtssAEIcNAAsLMgECfyACQQN0IQIDQCACIgMEQCACQQhrIQIgASAAEPEHIAFBCGohAUUNAQsLIANBAEcLOgEBfyMAQUBqIgEkACABQQxqIABBCGopAgA3AgAgAUEgNgIAIAEgACkCADcCBCABENsYIAFBQGskAAs+AQF/IwBBEGsiAyQAIANBCGogACABIAIQgwggAygCCCIAQYGAgIB4RwRAIAAgAygCDBCiIAALIANBEGokAAs6AQF/IwBBQGoiASQAIAFBDGogAEEIaigCADYCACABQSo2AgAgASAAKQIANwIEIAEQ2xggAUFAayQACzoBAX8jAEFAaiIBJAAgAUEMaiAAQQhqKQIANwIAIAFBETYCACABIAApAgA3AgQgARDbGCABQUBrJAALOgEBfyMAQUBqIgEkACABQQxqIABBCGopAgA3AgAgAUEwNgIAIAEgACkCADcCBCABENsYIAFBQGskAAs6AQF/IwBBQGoiASQAIAFBDGogAEEIaikCADcCACABQS02AgAgASAAKQIANwIEIAEQ2xggAUFAayQACzoBAX8jAEFAaiIBJAAgAUEMaiAAQQhqKAIANgIAIAFBITYCACABIAApAgA3AgQgARDbGCABQUBrJAALOgEBfyMAQUBqIgEkACABQRBqIABBCGopAwA3AwAgAUEvNgIAIAEgACkDADcDCCABENsYIAFBQGskAAs6AQF/IwBBQGoiASQAIAFBDGogAEEIaikCADcCACABQSw2AgAgASAAKQIANwIEIAEQ2xggAUFAayQACzwBAX8jAEEQayICJAAgAkEIaiAAIAEQggggAigCCCIAQYGAgIB4RwRAIAAgAigCDBCiIAALIAJBEGokAAs6AQF/IwBBQGoiASQAIAFBDGogAEEIaigCADYCACABQSM2AgAgASAAKQIANwIEIAEQ2xggAUFAayQACz4BAX8jAEEQayIDJAAgA0EIaiAAIAEgAhCBCCADKAIIIgBBgYCAgHhHBEAgACADKAIMEKIgAAsgA0EQaiQAC0EAIAAQ4xUgACgCACAAQQRqKAIAEPUaIABBDGoQ7R4gAEEYahD0HCAAKAI8EMEXIABBQGsQlB8gAEHIAEEEEIUOC0EAIAAQ4xUgACgCACAAQQRqKAIAEPUaIABBDGoQ7R4gAEEYahD0HCAAKAI8EMEXIABBQGsQmB8gAEHIAEEEEIUOC0EAIAAQ4xUgACgCACAAQQRqKAIAEPUaIABBDGoQ7R4gAEEYahD0HCAAKAI8EMEXIABBQGsQqh8gAEHIAEEEEIUOCz0AAkAgACgCACIAKAIAQQNHBEAgABCDFQwBCyAAQRBqEPYCIABBBGoQ6B4gAEEgahCbHQsgAEEoQQgQhQ4LPQACQCAAKAIAIgAoAgBBA0cEQCAAEIYVDAELIABBEGoQhAIgAEEEahDoHiAAQSBqEJsdCyAAQShBCBCFDgtIAAJAAkACQAJAAkAgACgCAEEBaw4EAQIDBAALIABCADcDEA8LIABCADcDEA8LIABCADcDCA8LIABBBGoQzSEPCyAAQgA3AwgLQQAgABDjFSAAKAIAIABBBGooAgAQ9RogAEEMahDtHiAAQRhqEPQcIAAoAjwQwRcgAEFAaxC/HyAAQcgAQQQQhQ4LOwEBfwNAIAIEQCAALQAAIQMgACABLQAAOgAAIAEgAzoAACACQQFrIQIgAUEBaiEBIABBAWohAAwBCwsLQQEBfyAALQAmIQIgAEEAOgAmIAEgABD9IiABQQRqIAAQ5iIgACACOgAmIAEoAgQiASgCAEEZRgRAIAAgARCrAQsLPgEBfyMAQRBrIgMkACADQQhqIAAgASACEIgIIAMoAggiAEGBgICAeEcEQCAAIAMoAgwQoiAACyADQRBqJAALQQAgABDjFSAAKAIAIABBBGooAgAQ9RogAEEMahDtHiAAQRhqEPQcIAAoAjwQwRcgAEFAaxDGHyAAQcgAQQQQhQ4LQQAgABDjFSAAKAIAIABBBGooAgAQ9RogAEEMahDtHiAAQRhqEPQcIAAoAjwQwRcgAEFAaxDWHyAAQcgAQQQQhQ4LPAEBfyMAQUBqIgIkACACIAE2AhggAkIANwMQIAJBADoAHCACIAA3AwggAkEaNgIAIAIQ2xggAkFAayQAC0EAIAAQ4xUgACgCACAAQQRqKAIAEPUaIABBDGoQ7R4gAEEYahD0HCAAKAI8EMEXIABBQGsQ3x8gAEHIAEEEEIUOCz4BAX8jAEEQayIDJAAgA0EIaiAAIAEgAhCECCADKAIIIgBBgYCAgHhHBEAgACADKAIMEKIgAAsgA0EQaiQACzoBAX8jAEFAaiIBJAAgAUEMaiAAQQhqKQIANwIAIAFBEDYCACABIAApAgA3AgQgARDbGCABQUBrJAALQQAgABDjFSAAKAIAIABBBGooAgAQ9RogAEEMahDtHiAAQRhqEPQcIAAoAjwQwRcgAEFAaxDnHyAAQcgAQQQQhQ4LQQAgABDjFSAAKAIAIABBBGooAgAQ9RogAEEMahDtHiAAQRhqEPQcIAAoAjwQwRcgAEFAaxDyHyAAQcgAQQQQhQ4LQQAgABDjFSAAKAIAIABBBGooAgAQ9RogAEEMahDtHiAAQRhqEPQcIAAoAjwQwRcgAEFAaxD2HyAAQcgAQQQQhQ4LQQAgABDjFSAAKAIAIABBBGooAgAQ9RogAEEMahDtHiAAQRhqEPQcIAAoAjwQwRcgAEFAaxD6HyAAQcgAQQQQhQ4LQQAgABDjFSAAKAIAIABBBGooAgAQ9RogAEEMahDtHiAAQRhqEPQcIAAoAjwQwRcgAEFAaxD+HyAAQcgAQQQQhQ4LQQAgABDjFSAAKAIAIABBBGooAgAQ9RogAEEMahDtHiAAQRhqEPQcIAAoAjwQwRcgAEFAaxCCICAAQcgAQQQQhQ4LPAEBfyAAKAJAIgEgASgCACIBQQFrNgIAIAFBAUYEQCAAQUBrELYHCyAAKAIcIgEEQCAAKAIYIAEQuBILCz4CAX8BfiMAQSBrIgIkACABLQAoBEAgAkEIaiAAELsVIAEgAikDCCIDIAIoAhgQsQ4gAxDYDwsgAkEgaiQAC0EAIAAQ4xUgACgCACAAQQRqKAIAEPUaIABBDGoQ7R4gAEEYahD0HCAAKAI8EMEXIABBQGsQlCAgAEHIAEEEEIUOCz8AAkACQAJAIAAoAgAOAgECAAsgAEEEahCnIQ8LIABBCGoQ9BEgAEEoahDFHg8LIABBEGoQliAgAEEwahCTIAtBACAAEOMVIAAoAgAgAEEEaigCABD1GiAAQQxqEO0eIABBGGoQ9BwgACgCPBDBFyAAQUBrEJggIABByABBBBCFDgs4AAJAIAFpQQFHQYCAgIB4IAFrIABJcg0AIAAEQEGgzc8ALQAAGiAAIAEQ4xkiAUUNAQsgAQ8LAAs5AAJAAn8gAkGAgMQARwRAQQEgACACIAEoAhARAgANARoLIAMNAUEACw8LIAAgAyAEIAEoAgwRAwALuAEBBX8gACgCACECIAEoAhwiAEEQcUUEQCAAQSBxRQRAIAIgARCzIQ8LIAItAAAhAyMAQYABayIFJABB/wAhAgNAIAUgAiIEaiIGIANBD3EiAEEwciAAQTdqIABBCkkbOgAAIAJBAWshAiADIgBBBHYhAyAAQRBPDQALIARBgQFPBEAgBEGAAUHkvMAAEIgNAAsgAUEBQZyKzABBAiAGQYABIARrELoDIAVBgAFqJAAPCyACIAEQlwoLcQICfgF/AkBB2MHPACkDAEIAUg0AQQFBABDrFCEBQdjBzwApAwAhAEHYwc8AIAE3AwAgAFANACAAENgPCwJAQdjBzwApAwAiAEIDg0IAUg0AIACnQQhrIgIgAigCACICQQFqNgIAIAJBAE4NAAALIAALsAEBAn8jAEEQayIDJAAgA0EANgIMIANBDGohBCADAn8CQCACQYABTwRAIAJBgBBPDQEgBCACQT9xQYABcjoAASAEIAJBBnZBwAFyOgAAQQIMAgsgBCACOgAAQQEMAQsgBCACQT9xQYABcjoAAiAEIAJBDHZB4AFyOgAAIAQgAkEGdkE/cUGAAXI6AAFBAws2AgQgAyAENgIAIAAgASADKAIAIAMoAgQQsBggA0EQaiQACzwBAX8gACgCCCIDIAAoAgBGBEAgABCkCAsgACADQQFqNgIIIAAoAgQgA0EDdGoiACACNgIEIAAgATYCAAtGAEEUQQQQzhoiAUEAOgARIAFChICAgMAANwAJIAFBADoACCABIAM2AgQgASACNgIAIABBATYCCCAAIAE2AgQgAEEBNgIACzUBAn8jAEEQayIBJAAgAC0AAEEERwRAIAEgACkCADcDCCABQQhqENUVIQILIAFBEGokACACCzwBAX8gACgCACgCACEAIAEoAhwiAkEQcUUEQCACQSBxRQRAIAAgARCxIQ8LIAAgARCZCg8LIAAgARCWCgs8AQF/IAAoAggiAyAAKAIARgRAIAAQpggLIAAgA0EBajYCCCAAKAIEIANBA3RqIgAgAjYCBCAAIAE2AgALPQACQCAAKAIAIgAoAgBBA0cEQCAAEOUVDAELIABBEGoQuSAgAEEEahDoHiAAKAIgELogCyAAQShBCBCFDgs7AQF+EJQTIABBADYCGCAAIAEpAwA3AwAgAEEQaiABQRBqKQMANwMAIABBCGogAUEIaikDADcDABDYDws+AQF/IAAgACgCAEEBayIBNgIAAkAgAQ0AIABBCGoQxAYgACAAKAIEQQFrIgE2AgQgAQ0AIABBHEEEEIUOCws9AAJAIAAoAgAiACgCAEEDRwRAIAAQ8RUMAQsgAEEQahDMICAAQQRqEOgeIAAoAiAQuiALIABBKEEIEIUOCz0AAkAgACgCACIAKAIAQQNHBEAgABCAFQwBCyAAQRBqEKMCIABBBGoQ6B4gACgCIBC6IAsgAEEoQQgQhQ4LPQACQCAAKAIAIgAoAgBBA0cEQCAAEPIVDAELIABBEGoQnQIgAEEEahDoHiAAKAIgELogCyAAQShBCBCFDgs9AAJAIAAoAgAiACgCAEEDRwRAIAAQhRUMAQsgAEEQahDuASAAQQRqEOgeIAAoAiAQuiALIABBKEEIEIUOCzcBAX8gACgCCEEEdCECIAAoAgQhAANAIAIEQCAAQQxqIAEQ4iIgAkEQayECIABBEGohAAwBCwsLOQEBfyAAQgA3AgwgACgCCEEwbCEBIAAoAgQhAANAIAEEQCABQTBrIQEgABC/GCAAQTBqIQAMAQsLCzcBAX8gACgCCEEEdCECIAAoAgQhAANAIAIEQCAAQQxqIAEQ5CIgAkEQayECIABBEGohAAwBCwsLOAAgACgCACIAKAIAQQNHBEAgACABEPMXDwsgAEEQaiABEOUiIABBBGogARCmEyAAQSBqIAEQ8hsLNwEBfyAAKAIIQQR0IQIgACgCBCEAA0AgAgRAIABBDGogARDlIiACQRBrIQIgAEEQaiEADAELCws3AQF/IAAoAghBBHQhAiAAKAIEIQADQCACBEAgAEEMaiABEOciIAJBEGshAiAAQRBqIQAMAQsLCzcBAX8gACgCCEEEdCECIAAoAgQhAANAIAIEQCAAQQxqIAEQ6CIgAkEQayECIABBEGohAAwBCwsLNwEBfyAAKAIIQQR0IQIgACgCBCEAA0AgAgRAIABBDGogARDpIiACQRBrIQIgAEEQaiEADAELCws9AAJAIAAoAgAiACgCAEEDRwRAIAAQ+BUMAQsgAEEQahDwASAAQQRqEOgeIAAoAiAQuiALIABBKEEIEIUOCzgAIAEgAkECdGtBBGsoAgAiASAAKAIEIgJPBEAgASACQfDLxgAQhw0ACyAAKAIAIAFBFGxqNQIQCzwBAX8gACgCCCIDIAAoAgBGBEAgABDYEgsgACADQQFqNgIIIAAoAgQgA0EEdGoiACACNgIIIAAgATcDAAs9AAJAIAAoAgAiACgCAEEDRwRAIAAQ+hUMAQsgAEEQahDlICAAQQRqEOgeIAAoAiAQuiALIABBKEEIEIUOCz0AAkAgACgCACIAKAIAQQNHBEAgABD7FQwBCyAAQRBqEMYdIABBBGoQ6B4gACgCIBC6IAsgAEEoQQgQhQ4LQQEBfwJAAkACQEEBIAAtACxBA2siAiACQf8BcUEDTxtB/wFxQQFrDgIBAgALIAAgARCnDA8LIABBGGogARD4FwsLPQACQCAAKAIAIgAoAgBBA0cEQCAAEPwVDAELIABBEGoQ3wEgAEEEahDoHiAAKAIgELogCyAAQShBCBCFDgs3AQF/IAAoAghBBHQhAiAAKAIEIQADQCACBEAgAEEMaiABEIAkIAJBEGshAiAAQRBqIQAMAQsLCzcBAX8gACgCCEEEdCECIAAoAgQhAANAIAIEQCAAQQxqIAEQgSQgAkEQayECIABBEGohAAwBCwsLNwEBfyAAKAIIQQR0IQIgACgCBCEAA0AgAgRAIABBDGogARCCJCACQRBrIQIgAEEQaiEADAELCws3AQF/IAAoAghBBHQhAiAAKAIEIQADQCACBEAgAEEMaiABEIYkIAJBEGshAiAAQRBqIQAMAQsLCzgAIAAoAgAiACgCAEEDRwRAIAAgARD9Fw8LIABBEGogARCIJCAAQQRqIAEQthMgAEEgaiABEJIcCzcBAX8gACgCCEEEdCECIAAoAgQhAANAIAIEQCAAQQxqIAEQiCQgAkEQayECIABBEGohAAwBCwsLNwEBfyAAKAIIQQR0IQIgACgCBCEAA0AgAgRAIABBDGogARCKJCACQRBrIQIgAEEQaiEADAELCws4ACAAKAIAIgAoAgBBA0cEQCAAIAEQ/hcPCyAAQRBqIAEQiiQgAEEEaiABELcTIABBIGogARCUHAs3AQF/IAAoAghBBHQhAiAAKAIEIQADQCACBEAgAEEMaiABEIckIAJBEGshAiAAQRBqIQAMAQsLCz0AAkAgACgCACIAKAIAQQNHBEAgABCDFgwBCyAAQRBqEPIgIABBBGoQ6B4gACgCIBC6IAsgAEEoQQgQhQ4LTwEBfwJAAkACQAJAIAEoAgAiAkEBaw4DAQIDAAsgACABKQMIEPgUNwMIDAILIAAgASsDCDkDCAwBCyAAIAEoAgQQ2SE2AgQLIAAgAjYCAAs9AAJAIAAoAgAiACgCAEEDRwRAIAAQhhYMAQsgAEEQahDrHSAAQQRqEOgeIAAoAiAQuiALIABBKEEIEIUOCz0AAkAgACgCACIAKAIAQQNHBEAgABD6IAwBCyAAQRBqEPggIABBBGoQ6B4gACgCIBC6IAsgAEEoQQgQhQ4LPQACQCAAKAIAIgAoAgBBA0cEQCAAEIcWDAELIABBEGoQngIgAEEEahDoHiAAKAIgELogCyAAQShBCBCFDgs9AAJAIAAoAgAiACgCAEEDRwRAIAAQiBYMAQsgAEEQahDuICAAQQRqEOgeIAAoAiAQuiALIABBKEEIEIUOCz0AAkAgACgCACIAKAIAQQNHBEAgABCJFgwBCyAAQRBqEOABIABBBGoQ6B4gACgCIBC6IAsgAEEoQQgQhQ4LPQACQCAAKAIAIgAoAgBBA0cEQCAAEIoWDAELIABBEGoQgyEgAEEEahDoHiAAKAIgELogCyAAQShBCBCFDgs9AAJAIAAoAgAiACgCAEEDRwRAIAAQixYMAQsgAEEQahCfAiAAQQRqEOgeIAAoAiAQuiALIABBKEEIEIUOCzcBAX8gACgCCEEEdCECIAAoAgQhAANAIAIEQCAAQQxqIAEQtiQgAkEQayECIABBEGohAAwBCwsLPQACQCAAKAIAIgAoAgBBA0cEQCAAEI4WDAELIABBEGoQmx4gAEEEahDoHiAAKAIgELogCyAAQShBCBCFDgs9AAJAIAAoAgAiACgCAEEDRwRAIAAQjxYMAQsgAEEQahCNAiAAQQRqEOgeIAAoAiAQuiALIABBKEEIEIUOCz0AAkAgACgCACIAKAIAQQNHBEAgABCQFgwBCyAAQRBqEI4CIABBBGoQ6B4gACgCIBC6IAsgAEEoQQgQhQ4LPQACQCAAKAIAIgAoAgBBA0cEQCAAEJEWDAELIABBEGoQ4QEgAEEEahDoHiAAKAIgELogCyAAQShBCBCFDgs+AQF/AkAgASACELYQDQAgASgCACICIAEoAgRGDQAgASACQQxqNgIAIAIhAwsgAEHEq8sANgIEIAAgAzYCAAs+AQF/IAAgACgCAEEBayIBNgIAAkAgAQ0AIABBDGoQthsgACAAKAIEQQFrIgE2AgQgAQ0AIABBGEEEEIUOCws3AQF/IAAoAghBBHQhAiAAKAIEIQADQCACBEAgAEEMaiABEM8kIAJBEGshAiAAQRBqIQAMAQsLCzcBAX8gACgCCEEEdCECIAAoAgQhAANAIAIEQCAAQQxqIAEQyiQgAkEQayECIABBEGohAAwBCwsLNwEBfyAAKAIIQQR0IQIgACgCBCEAA0AgAgRAIABBDGogARDRJCACQRBrIQIgAEEQaiEADAELCws3AQF/EOoNIAEoAghBAnQhAiABKAIEIQEDQCACBEAgASAAENAkIAJBBGshAiABQQRqIQEMAQsLC0UBAX8CQAJAAkAgACgCACIAKAIADgIAAQILIAAoAggiAUUNASAAKAIEIAFBARCFDgwBCyAAQQRqELcQCyAAQRRBBBCFDgs9AAJAIAAoAgAiACgCAEEDRwRAIAAQnxYMAQsgAEEQahChAiAAQQRqEOgeIAAoAiAQuiALIABBKEEIEIUOCz0AAkAgACgCACIAKAIAQQNHBEAgABCgFgwBCyAAQRBqEKghIABBBGoQ6B4gACgCIBC6IAsgAEEoQQgQhQ4LQgEBfwJAAkACQEEBIAAtACxBA2siAiACQf8BcUEDTxtB/wFxQQFrDgIBAgALIAEoAhQgABDMBRoPCyAAIAEQ5RYLCzsBAX8gAC0AFCEBIABBAToAFAJAIAFFBEAgAEEIayIAIAAoAgBBAWoiATYCACABRQ0BIAAQ6yQLDwsACzYBAn8jAEEQayIBJAAgAUEEaiAAEPcJIAEoAggiACABKAIMEBsgASgCBCAAEMccIAFBEGokAAvyAQICfwJ+IwBBQGoiASQAAkBBuMHPACgCAA0AIAFBCGpBBHIQ9BAgAUEANgIIQbjBzwApAgAhA0HAwc8AKQIAIQRBvMHPACABKQMINwIAQbjBzwBBATYCACABQThqQdDBzwAoAgA2AgAgAUEwakHIwc8AKQIANwMAIAFBKGoiAiAENwMAQcTBzwAgAUEQaikDADcCAEHMwc8AIAFBGGopAwA3AgAgASADNwMgIAOnRQ0AIAIQxAYLIAFBQGskAEG8wc8AIgEoAgAEQEGovsEAELwQAAsgAUF/NgIAIAFBBGogABDMCSABIAEoAgBBAWo2AgALPgEEf0EBIQICQCAAQQRqIgMgASgCFCIEIAEoAhgiBRCiAg0AIAAoAgAgARC4Bg0AIAMgBCAFELcYIQILIAILQAECf0EBIQICQCAAQQRqIgMgASgCFCABKAIYEKICDQAgACgCACABELEhDQAgAyABKAIUIAEoAhgQtxghAgsgAgs6AQF/IwBBEGsiAyQAIANBCGogASACQQAQgRQgAygCDCEBIAAgAygCCDYCACAAIAE2AgQgA0EQaiQACzABAX9BfyABIANHIAEgA0kbIgQEfyAEBSAAIAAgAUECdGogAiACIANBAnRqEOcMCws5AQF/IAAoAgAhACABKAIcIgJBEHFFBEAgAkEgcUUEQCAAIAEQsSEPCyAAIAEQmQoPCyAAIAEQlgoLMwAgAUEDdCEBA0AgAQRAIAAoAgAgAEEEaigCACACELAgIAFBCGshASAAQQhqIQAMAQsLC0ECAn4BfyABKQIEIQIgASkCDCEDIAEQ3B4hBCABQRRqEJgZIQEgACADNwIMIAAgAjcCBCAAIAE2AhQgACAENgIACzcBAX8gACgCCCEBIAAoAgQhAANAIAEEQCAAENoCIABBDGoQ5R4gAUEBayEBIABBEGohAAwBCwsLPAACQAJAAkACQCAAKAIADgMBAgMACyAAQQRqEO4ZDwsgAEEIahDnHg8LIABBBGoQ7RkPCyAAQQRqELggCzcBAX8gACgCCCEBIAAoAgQhAANAIAEEQCAAEPYcIABBMGoQmQQgAUEBayEBIABBOGohAAwBCwsLNwEBfyAAKAIIIQEgACgCBCEAA0AgAQRAIABBFGoQ7B4gABDqHiABQQFrIQEgAEEYaiEADAELCws3AQF/IAAoAgghASAAKAIEIQADQCABBEAgABCpDyAAQTBqEOweIAFBAWshASAAQThqIQAMAQsLCzUBAn8jAEEwayIBJABBCEEwELEgIgJFBEAACyABIAAoAgAQiwEgAiABQTAQ7yQgAUEwaiQACzIBAX9BASEEIAJFIAAgAXJFIABB/v97S3JyBH8gBAUgAiABQQFrIAMoAhQRAgBBAXMLCy4BAn8gAUEGdCEBA0AgASICBEAgAUFAaiEBIAAoAgAgAEFAayEARQ0BCwsgAkULLAEBfyMAQRBrIgEkACABIAA2AgwgAUEBNgIIIAFBCGoQ2hsgAUEQaiQAQQALLgECfyABQShsIQEDQCABIgIEQCABQShrIQEgACgCACAAQShqIQBFDQELCyACRQsyAQN/IABB/wFxQQ1GIgIgAUH/AXEiA0ENRnEhBCACIANBDUZyBH8gBAUgACABEO0MCwtGAQJ/IwBBEGsiBCQAIARBCGoiBSACIAEgAxDDEDYCBCAFQQE2AgAgBCgCDCEBIAAgBCgCCDYCACAAIAE2AgQgBEEQaiQACzUBAX9BASEBIABBLkYgAEHYAEZyIABB3wBGIABB+ABGcnIgAEGAgMQARnJFBEBBACEBCyABCz0BAX8CQAJAAkBBASAALQAsQQNrIgEgAUH/AXFBA08bQf8BcQ4CAQIACyAAENcgDwsgABCVDw8LIAAQ1iALOwAgAC0AJUECRgRAIAAQrAUgACgCACAAKAIEEPMaDwsgAEEIahCVDyAAKAIgIgAQ6hMgAEEoQQgQhQ4LPQEBfwJAAkACQEEBIAAtACxBA2siASABQf8BcUEDTxtB/wFxDgIBAgALIAAQ1yAPCyAAEJUPDwsgABCEFQs9AQF/AkACQAJAQQEgAC0ALEEDayIBIAFB/wFxQQNPG0H/AXEOAgECAAsgABDXIA8LIAAQlQ8PCyAAENwgCzUBAX8gACgCCEEEdCEBIAAoAgQhAANAIAEEQCAAQQxqEPokIAFBEGshASAAQRBqIQAMAQsLCz8AAkACQAJAAkAgACgCAEEBaw4DAQIDAAsgAEEIahC4Hw8LIABBBGoQghIPCyAAQQRqEMAYDwsgAEEEahCvCgs/AQJ/IAAtADkhAiAAQQE6ADkgAC0AOiEDIAFBGGogABC9HSAAIAI6ADkgASAAEKcMIAAgAjoAOSAAIAM6ADoLPgEBfyAALwA9IQIgAEEAOgA9IAAgAC0AP0EBczoAPiABQTBqIAAQsRQgAEEBOgA9IAEgABDlDSAAIAI7AD0LPAACQCABIAJNBEAgAiADTQ0BIAIgA0Gg7c4AEIkNAAsgASACQaDtzgAQig0ACyAAIAI2AgQgACABNgIACzgBAX8gAC0ANARAIAFBCGogABCnDCAALQA5IQIgAUEkaiAAEModIAFBIGogABDKHSAAIAI6ADkLCzUBAX8gACgCCEEEdCEBIAAoAgQhAANAIAEEQCAAQQxqEJElIAFBEGshASAAQRBqIQAMAQsLCzUBAX8gACgCCEEEdCEBIAAoAgQhAANAIAEEQCAAQQxqEJMlIAFBEGshASAAQRBqIQAMAQsLCz8AAkACQAJAAkAgACgCAEEBaw4DAQIDAAsgAEEIahDMHQ8LIABBBGoQ/xAPCyAAQQRqEPAgDwsgAEEEahCgCws4AAJAIAAoAgBBCUcNACAAKAIIQRFHDQAgACgCEEEHRw0AIAAoAhQtAEVBA0YNACAAQQhqEOcECwtCAAJAAkACQAJAIAFBAWsOAgECAAsgAiADENwKGgwCCyACIAMQywwaDAELIAIgAxDKFRoLIAAgAjYCBCAAIAE2AgALQwIBfwJ+IAEoAhQhAyABKQIEIQQgASkCDCEFIAEoAgAgAhDKFSEBIAAgBTcCDCAAIAQ3AgQgACADNgIUIAAgATYCAAssAQF/IwBBEGsiASQAIAEgADYCDCABQQE2AgggAUEIahC0HCABQRBqJABBAAs/AAJAIARFBEBBBCEEIANBgIABcQ0BC0EFIQQgA0GAPHFBgDxHDQBBwL/MAEEoQfDNxAAQvBIACyAAIAQ6AAALOAAgACgCACIAKAIAQQNHBEAgACABEIoYDwsgAEEQaiABEMokIABBBGogARDLEyAAKAIgIAEQzRgLOAEBfyMAQRBrIgIkACACQQhqIAAgACgCACgCBBEAACACKAIIIAEgAigCDCgCEBECACACQRBqJAALTgAgAEEcaiAAQSRqQQAgAkKwq6+uxMqL2AxRG0EAIAFCn5vAsPa+x+MsURsiACACQu26rbbNhdT14wBRGyAAIAFC+IKZvZXuxsW5f1EbC08AIABBHGogAEEkakEAIAJCy56yzqOpr9Wwf1EbQQAgAULOl6WUuJrBkTFRGyIAIAJC7bqtts2F1PXjAFEbIAAgAUL4gpm9le7Gxbl/URsLOAIBfwF8IAEoAhxBAXEhAiAAKwMAIQMgASgCCARAIAEgAyACIAEoAgwQPA8LIAEgAyACQQAQmgMLOwEEf0EBIQICQCAAQQRqIgMgASgCFCIEIAEoAhgiBRCiAg0AIAAgARCAIg0AIAMgBCAFELcYIQILIAILagACQCACRQ0AIANFBEBBoM3PAC0AABogAiABEOMZIQEMAQsCQAJ/IAFBCU8EQCABIAIQjwUMAQsgAhBVCyIBRQ0AIAFBBGstAABBA3FFDQAgAUEAIAIQ7iQaCwsgACACNgIEIAAgATYCAAs1AQF/IwBBEGsiAiQAIAJBCGogABDqCSACKAIIIAIoAgwgASgCFCABKAIYEL4CIAJBEGokAAs5AQF/IwBBEGsiAiQAIAIgACgCADYCDCABQaG2xABBDEGttsQAQQUgAkEMakH4ABCxCSACQRBqJAALOwAgAC0AJUECRgRAIAAQrAUgACgCACAAKAIEEPMaDwsgACkDCBDYDyAAKAIgIgAQhBQgAEEoQQgQhQ4LRwEBf0EBIQICQEHYhMYAIAAgARCxAw0AIAAgAUGUi8wAQQUQrhgNAEGIhcYAIAAgARCxAw0AQfCExgAgACABELEDIQILIAILNgEBfyAAKAIIIgIgACgCAEYEQCAAEM0SCyAAKAIEIAJBMGxqIAFBMBDvJBogACACQQFqNgIICzYBAX8gACgCCCICIAAoAgBGBEAgABCxCAsgACgCBCACQThsaiABQTgQ7yQaIAAgAkEBajYCCAvtAQEGfyAAKAIIIgYgACgCAEYEQCMAQSBrIgIkAAJAIAAoAgAiA0F/RgR/QQAFQQQgA0EBdCIEIANBAWoiBSAEIAVLGyIEIARBBE0bIgVByABsIQcgBEHyuJwOSUEDdCEEIAIgAwR/IAIgA0HIAGw2AhwgAiAAKAIENgIUQQgFQQALNgIYIAJBCGogBCAHIAJBFGoQ9gggAigCCEUNASACKAIQIQMgAigCDAsgAxCiIAALIAIoAgwhAyAAIAU2AgAgACADNgIEIAJBIGokAAsgACgCBCAGQcgAbGogAUHIABDvJBogACAGQQFqNgIICzgBAX8gACgCCCICIAAoAgBGBEAgABCvCAsgACgCBCACQdAAbGogAUHQABDvJBogACACQQFqNgIIC24BA38gACgCCCIDIAAoAgBGBEAjAEEQayICJAAgAkEIaiAAIAAoAgBBARCFCCACKAIIIgRBgYCAgHhHBEAgBCACKAIMEKIgAAsgAkEQaiQACyAAKAIEIANBKGxqIAFBKBDvJBogACADQQFqNgIICzYBAX8gACgCCCICIAAoAgBGBEAgABCyCAsgACgCBCACQShsaiABQSgQ7yQaIAAgAkEBajYCCAs4AQF/IAAoAggiAiAAKAIARgRAIAAQ1BILIAAoAgQgAkHYAGxqIAFB2AAQ7yQaIAAgAkEBajYCCAs3AQF/IAAoAggiAiAAKAIARgRAIAAQqwgLIAAoAgQgAkEGdGogAUHAABDvJBogACACQQFqNgIICzkBAX8jAEEQayICJAAgAiAAKAIANgIMIAFBvoPMAEEHQc+nzABBBCACQQxqQfYAELEJIAJBEGokAAs5AgF/AX4jAEEQayIDJAAgAyACNgIMIAMgATYCCCADQYCAgIB4NgIEIAAgA0EEahDMCSADQRBqJAALOQEBfyMAQRBrIgIkACACIAAoAgA2AgwgAUHE4sQAQRJBz6fMAEEEIAJBDGpB9gAQsQkgAkEQaiQACzkBAX8jAEEQayICJAAgAiAAKAIANgIMIAFBv9/EAEEMQc+nzABBBCACQQxqQfYAELEJIAJBEGokAAs5AQF/IwBBEGsiAiQAIAIgACgCADYCDCABQZfixABBDEHPp8wAQQQgAkEMakH2ABCxCSACQRBqJAALOQEBfyMAQRBrIgIkACACIAAoAgA2AgwgAUGX4MQAQQlBz6fMAEEEIAJBDGpB9gAQsQkgAkEQaiQACz8AIAIgA0Gfh8wAQQYQrhhFBEAgAiADQaqIzABBAxCuGEUEQCAAQQY6AAAPCyAAQYAsOwEADwsgAEGADDsBAAs/ACACIANBsovMAEECEK4YRQRAIAIgA0G1h8wAQQYQrhhFBEAgAEEGOgAADwsgAEGAODsBAA8LIABBgAg7AQALQAAgAiADQc+EzABBAxCuGEUEQCACIANB44TMAEEEEK4YRQRAIABBBjoAAA8LIABBgsIAOwEADwsgAEGCIjsBAAs/ACACIANBqIvMAEEFEK4YRQRAIAIgA0G5icwAQQQQrhhFBEAgAEEGOgAADwsgAEGCKjsBAA8LIABBgig7AQALOQEBfyMAQRBrIgIkACACIAAoAgA2AgwgAUHA7sQAQQhBz6fMAEEEIAJBDGpB9gAQsQkgAkEQaiQACzYBAX8gACgCCCICIAAoAgBGBEAgABDSEgsgACgCBCACQThsaiABQTgQ7yQaIAAgAkEBajYCCAs5AQF/IwBBEGsiAiQAIAIgACgCADYCDCABQbCBxQBBBEHPp8wAQQQgAkEMakH2ABCxCSACQRBqJAALOQEBfyMAQRBrIgIkACACIAAoAgA2AgwgAUGMgMYAQQpBz6fMAEEEIAJBDGpB9gAQsQkgAkEQaiQACzkBAX8jAEEQayICJAAgAiAAKAIANgIMIAFBgKPMAEEFQf6gzABBBSACQQxqQdMDELEJIAJBEGokAAs5AQF/IwBBEGsiAiQAIAIgACgCADYCDCABQfKJxgBBFkGoicYAQQggAkEMakGsARCxCSACQRBqJAALNAEBfyAAKAIIQShsIQIgACgCBCEAA0AgAgRAIAAgARDtGyACQShrIQIgAEEoaiEADAELCws0AQF/IAEoAghBAnQhAiABKAIEIQEDQCACBEAgASAAEOIiIAJBBGshAiABQQRqIQEMAQsLCzQBAX8gACgCCEEwbCECIAAoAgQhAANAIAIEQCAAIAEQ7wMgAkEwayECIABBMGohAAwBCwsLNAEBfyAAKAIIQShsIQIgACgCBCEAA0AgAgRAIAEgABCAHCACQShrIQIgAEEoaiEADAELCws0AQF/IAAoAghBAnQhAiAAKAIEIQADQCACBEAgACABEOciIAJBBGshAiAAQQRqIQAMAQsLCzQBAX8gACgCCEEwbCECIAAoAgQhAANAIAIEQCAAIAEQ7AMgAkEwayECIABBMGohAAwBCwsLNAEBfyAAKAIIQQJ0IQIgACgCBCEAA0AgAgRAIAAgARDpIiACQQRrIQIgAEEEaiEADAELCws0AQF/IAAoAghBAnQhAiAAKAIEIQADQCACBEAgACABEOgiIAJBBGshAiAAQQRqIQAMAQsLCzQBAX8gACgCCEEobCECIAAoAgQhAANAIAIEQCABIAAQ/xsgAkEoayECIABBKGohAAwBCwsLNAEBfyAAKAIIQTBsIQIgACgCBCEAA0AgAgRAIAAgARCCBCACQTBrIQIgAEEwaiEADAELCws0AQF/IAAoAghBAnQhAiAAKAIEIQADQCACBEAgACABEOUiIAJBBGshAiAAQQRqIQAMAQsLCzQBAX8gACgCCEECdCECIAAoAgQhAANAIAIEQCAAIAEQ5CIgAkEEayECIABBBGohAAwBCwsLNAEBfyAAKAIIQQJ0IQIgACgCBCEAA0AgAgRAIAAgARDmIiACQQRrIQIgAEEEaiEADAELCws0AQF/IAAoAghBDGwhAiAAKAIEIQADQCACBEAgACABEOUiIAJBDGshAiAAQQxqIQAMAQsLCzQBAX8gACgCCEEMbCECIAAoAgQhAANAIAIEQCAAIAEQ5CIgAkEMayECIABBDGohAAwBCwsLNAEBfyAAKAIIQQxsIQIgACgCBCEAA0AgAgRAIAAgARDiIiACQQxrIQIgAEEMaiEADAELCws0AQF/IAAoAghBDGwhAiAAKAIEIQADQCACBEAgACABEOYiIAJBDGshAiAAQQxqIQAMAQsLCzQBAX8gACgCCEEMbCECIAAoAgQhAANAIAIEQCAAIAEQ6CIgAkEMayECIABBDGohAAwBCwsLNAEBfyAAKAIIQQxsIQIgACgCBCEAA0AgAgRAIAAgARDnIiACQQxrIQIgAEEMaiEADAELCws0AQF/IAAoAghBDGwhAiAAKAIEIQADQCACBEAgACABEOkiIAJBDGshAiAAQQxqIQAMAQsLCzMBAX8gACgCCEEwbCECIAAoAgQhAANAIAIEQCAAIAEQVCACQTBrIQIgAEEwaiEADAELCwv0AQEHfyAAKAIIIgYgACgCAEYEQCMAQSBrIgIkAAJAIAAoAgAiA0F/RgR/QQAFQQQhB0EEIANBAXQiBCADQQFqIgUgBCAFSxsiBCAEQQRNGyIFQSxsIQggBEGv9KIXSUECdCEEAkAgA0UEQEEAIQcMAQsgAiADQSxsNgIcIAIgACgCBDYCFAsgAiAHNgIYIAJBCGogBCAIIAJBFGoQ9gggAigCCEUNASACKAIQIQMgAigCDAsgAxCiIAALIAIoAgwhAyAAIAU2AgAgACADNgIEIAJBIGokAAsgACgCBCAGQSxsaiABQSwQ7yQaIAAgBkEBajYCCAs0AQF/IAAoAghBMGwhAiAAKAIEIQADQCACBEAgACABEJwEIAJBMGshAiAAQTBqIQAMAQsLCzQBAX8gACgCCEECdCECIAAoAgQhAANAIAIEQCAAIAEQ9yIgAkEEayECIABBBGohAAwBCwsLNAEBfyAAKAIIQShsIQIgACgCBCEAA0AgAgRAIAEgABDnECACQShrIQIgAEEoaiEADAELCws0AQF/IAAoAghBKGwhAiAAKAIEIQADQCACBEAgASAAEIEcIAJBKGshAiAAQShqIQAMAQsLCzQBAX8gACgCCEEobCECIAAoAgQhAANAIAIEQCAAIAEQ9BsgAkEoayECIABBKGohAAwBCwsLNAEBfyAAKAIIQShsIQIgACgCBCEAA0AgAgRAIAAgARCCHCACQShrIQIgAEEoaiEADAELCws0AQF/IAAoAghBBnQhAiAAKAIEIQADQCACBEAgASAAEPATIAJBQGohAiAAQUBrIQAMAQsLCzQBAX8gACgCCEEwbCECIAAoAgQhAANAIAIEQCABIAAQpwEgAkEwayECIABBMGohAAwBCwsLPgEBfwJAAkACQEEBIAAtACxBA2siAiACQf8BcUEDTxtB/wFxQQFrDgIBAgALIAEgABClBw8LIAAgARCgFwsLOAEBfyAALQAQIQIgAEEAOgAQIAFBIGogABCAJCABKAIAQQJPBEAgAUEEaiAAEIAkCyAAIAI6ABALNAEBfyABKAIIQQJ0IQIgASgCBCEBA0AgAgRAIAEgABCCJCACQQRrIQIgAUEEaiEBDAELCws0AQF/IAAoAghBMGwhAiAAKAIEIQADQCACBEAgACABEJ4EIAJBMGshAiAAQTBqIQAMAQsLCzQBAX8gACgCCEECdCECIAAoAgQhAANAIAIEQCAAIAEQiCQgAkEEayECIABBBGohAAwBCwsLNAEBfyAAKAIIQTBsIQIgACgCBCEAA0AgAgRAIAAgARCrGyACQTBrIQIgAEEwaiEADAELCws0AQF/IAAoAghBDGwhAiAAKAIEIQADQCACBEAgACABEIgkIAJBDGshAiAAQQxqIQAMAQsLCzQBAX8gACgCCEECdCECIAAoAgQhAANAIAIEQCAAIAEQjwMgAkEEayECIABBBGohAAwBCwsLNAEBfyAAKAIIQQJ0IQIgACgCBCEAA0AgAgRAIAAgARDZBCACQQRrIQIgAEEEaiEADAELCws0AQF/IAAoAghBAnQhAiAAKAIEIQADQCACBEAgACABEIckIAJBBGshAiAAQQRqIQAMAQsLCzQBAX8gACgCCEEwbCECIAAoAgQhAANAIAIEQCAAIAEQ7QMgAkEwayECIABBMGohAAwBCwsLNAEBfyAAKAIIQQJ0IQIgACgCBCEAA0AgAgRAIAAgARCBJCACQQRrIQIgAEEEaiEADAELCws0AQF/IAAoAghBAnQhAiAAKAIEIQADQCACBEAgACABEIokIAJBBGshAiAAQQRqIQAMAQsLCzQBAX8gACgCCEECdCECIAAoAgQhAANAIAIEQCAAIAEQhiQgAkEEayECIABBBGohAAwBCwsLNAEBfyAAKAIIQQJ0IQIgACgCBCEAA0AgAgRAIAAgARCAJCACQQRrIQIgAEEEaiEADAELCws0AQF/IAAoAghBKGwhAiAAKAIEIQADQCACBEAgACABEIgSIAJBKGshAiAAQShqIQAMAQsLCzQBAX8gACgCCEEobCECIAAoAgQhAANAIAIEQCAAIAEQsBIgAkEoayECIABBKGohAAwBCwsLNAEBfyAAKAIIQTBsIQIgACgCBCEAA0AgAgRAIAAgARCsGyACQTBrIQIgAEEwaiEADAELCws0ACAAIAFCAFIgAEEQahCOGgNAIAFQRQRAIAAgASACEPsGQgAhAQwBCwtCABDkHkIAEOQeCzQBAX8gACgCCEEwbCECIAAoAgQhAANAIAIEQCAAIAEQnwQgAkEwayECIABBMGohAAwBCwsLNAEBfyAAKAIIQTBsIQIgACgCBCEAA0AgAgRAIAAgARCdBCACQTBrIQIgAEEwaiEADAELCws0AQF/IAAoAghBOGwhAiAAKAIEIQADQCACBEAgASAAEOsHIAJBOGshAiAAQThqIQAMAQsLCzQBAX8gACgCCEEwbCECIAAoAgQhAANAIAIEQCAAIAEQoQQgAkEwayECIABBMGohAAwBCwsLNAEBfyAAKAIIQQxsIQIgACgCBCEAA0AgAgRAIAAgARCAJCACQQxrIQIgAEEMaiEADAELCws0AQF/IAAoAghBDGwhAiAAKAIEIQADQCACBEAgACABEIYkIAJBDGshAiAAQQxqIQAMAQsLCzQBAX8gACgCCEEMbCECIAAoAgQhAANAIAIEQCAAIAEQgSQgAkEMayECIABBDGohAAwBCwsLNAEBfyAAKAIIQQxsIQIgACgCBCEAA0AgAgRAIAAgARCKJCACQQxrIQIgAEEMaiEADAELCws0AQF/IAAoAghBDGwhAiAAKAIEIQADQCACBEAgACABEIIkIAJBDGshAiAAQQxqIQAMAQsLCzQBAX8gACgCCEEMbCECIAAoAgQhAANAIAIEQCAAIAEQhyQgAkEMayECIABBDGohAAwBCwsLNAEBfyAAKAIIQQJ0IQIgACgCBCEAA0AgAgRAIAAgARC2JCACQQRrIQIgAEEEaiEADAELCws0AQF/IAAoAghBMGwhAiAAKAIEIQADQCACBEAgACABEKIEIAJBMGshAiAAQTBqIQAMAQsLCzQBAX8gACgCCEEwbCECIAAoAgQhAANAIAIEQCAAIAEQowQgAkEwayECIABBMGohAAwBCwsLNAEBfyAAKAIIQQxsIQIgACgCBCEAA0AgAgRAIAAgARC3JCACQQxrIQIgAEEMaiEADAELCws0AQF/IAAoAghBMGwhAiAAKAIEIQADQCACBEAgACABEJ0DIAJBMGshAiAAQTBqIQAMAQsLCzQBAX8gACgCCEEMbCECIAAoAgQhAANAIAIEQCAAIAEQyiQgAkEMayECIABBDGohAAwBCwsLNAEBfyAAKAIIQQJ0IQIgACgCBCEAA0AgAgRAIAAgARDKJCACQQRrIQIgAEEEaiEADAELCws0AQF/IAAoAghBAnQhAiAAKAIEIQADQCACBEAgACABENEkIAJBBGshAiAAQQRqIQAMAQsLCzQBAX8gACgCCEECdCECIAAoAgQhAANAIAIEQCAAIAEQzyQgAkEEayECIABBBGohAAwBCwsLNAEBfyAAKAIIQShsIQIgACgCBCEAA0AgAgRAIAAgARC7HCACQShrIQIgAEEoaiEADAELCws0AQF/IAAoAghBKGwhAiAAKAIEIQADQCACBEAgACABELocIAJBKGshAiAAQShq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AC0AIA4EAQICAAILQQghAQsgACABahDNGiAAKAIAENEeIAAoAgQQ0R4LCygBAX8jAEEQayICJAAgAiAAKAIANgIMIAJBDGogARCJBiACQRBqJAALJwEBfyAAIAJqIAOnQRl2IgQ6AAAgACACQQhrIAFxakEIaiAEOgAACygAIAEgA0sEQCABIAMgBBCIDQALIAAgAyABazYCBCAAIAEgAmo2AgALKwEBfyABKAIAIgIEQCAAIAIRAQALIAEoAgQiAgRAIAAgAiABKAIIEIUOCwswAQF/IAAoAgAiAUGBgMQARgRAIAAgAEEEahD5CCIBNgIACyAAQQAgAUGAgMQARxsLIgAgAUUEQEIADwsgAa1CBYYgAUECdCAAakEEaygCAGetfQslAQJ/IwBBEGsiASQAIAFBCGoiAiAAELwhIAIQmBMgAUEQaiQACzABAX8gACgCACIBQYGAxABGBEAgACAAQQRqEO0UIgE2AgALIABBACABQYCAxABHGws1AQF/IABBBGohAQJAAkACQCAAKAIADgIBAgALIAEQiB0PCyABKAIAEJsiDwsgASgCABDAIAssAQF/IAAoAgAiAUECRwRAIABBBGohACABRQRAIAAoAgAQmyIPCyAAEL4gCwstAAJAIAAoAgAiACgCAEEDRwRAIAAQwyAMAQsgAEEEahDhGwsgAEEoQQgQhQ4LMQACQCAAKAIAIgAoAgBBgICAgHhHBEAgABDqHgwBCyAAQQRqEL4gCyAAQRhBBBCFDgsvACAAEO0eIABBDGoQih8gAEEwahCDHyAAKAI0EL0gIAAoAjgQuiAgAEEYahDuHgsuACAALQAlQQJGBEAgABCOHw8LIAApAwgQ2A8gACgCICIAENEWIABBKEEIEIUOCysAIAEgA0sEQCABIANBuIDFABCIDQALIAAgAyABazYCBCAAIAEgAmo2AgALMQACQCAAKAIAIgAoAgBBgICAgHhHBEAgABDqHgwBCyAAQQRqEPYCCyAAQRhBBBCFDgssACAAQgA3AxggAEEgahD4JCAAKAIAQQJHBEAgAEIANwMQDwsgAEEEahDNIQssACAAQgA3AxggAEEgakIANwMAIAAoAgBFBEAgAEIANwMQDwsgAEEEahDNIQsyAQF/IAAgACgCAEECdCIBQZCmzwBqKAIAakEANgIAIAAgAUGsps8AaigCAGpBADYCAAsvACAAQgA3AxACQCAALQAsQQJGBEAgACgCGBDXFgwBCyAAQgA3AyALIABCADcDCAsrACAAQgA3AxAgAEIANwMAIAAtADRBA0cEQCAAQSBqEKQXCyAAQThqEMMfCzABAX8gAUEMaiICIAAQ5iICQCABKAIADQAgAigCACIBKAIAQSBHDQAgACABEKsBCws1AQF/IABBBGohAQJAAkACQCAAKAIADgIBAgALIAEQ5yAPCyABKAIAENAgDwsgASgCABDAIAsvACABKAIQEOUSIAAoAixGBEAgAUEANgIQCyAAQQE6ADogASAAEKcMIABBADoAOgssAQF/IwBBEGsiAyQAIAMgACABENcbIAIgAykDACADKAIIEPsGIANBEGokAAs4AQF/IABBBGohAQJAAkACQCAAKAIAQQFrDgIBAgALIAEQmyUPCyABKAIAELMQDwsgASgCABDJDwszAgF/AX4gASgCACEDIAEpAgQhBCAAIAEoAgwgAhBMNgIMIAAgBDcCBCAAIANBAEc2AgALNAIBfgF/IAEpAgQhAyABKAIMIQQgASgCACACEEwhASAAIAQ2AgwgACADNwIEIAAgATYCAAstAAJAIAAoAgAiACgCAEEDRwRAIAAQjyEMAQsgAEEEahCzHAsgAEEoQQgQhQ4LMQACQCAAKAIAIgAoAgBBgICAgHhHBEAgABDqHgwBCyAAQQRqEI0hCyAAQRhBBBCFDgsvACAAEO0eIABBDGoQih8gAEEwahCHICAAKAI0EL0gIAAoAjgQuiAgAEEYahDuHgs1AQF/IABBBGohAQJAAkACQCAAKAIADgIBAgALIAEQrR4PCyABKAIAEJsiDwsgASgCABDAIAssAQF/IAAoAgAiAUECRwRAIABBBGohACABRQRAIAAoAgAQmyIPCyAAEI0hCwsuAQF/A0AgAEEYaiECIAAtACxBAkdFBEAgAigCACEADAELCyABKAIUIAIQzAUaCzABAX8gAUEIayICIAIoAgBBAWoiAjYCACACRQRAAAsgACABNgIEIABBwPLOADYCAAsqAQF/IwBBEGsiAyQAIAMgACgCADYCDCADQQxqIAEgAhCFByADQRBqJAALKgAgASgCAEUEQCABQX82AgAgACABNgIEIAAgAUEEajYCAA8LIAIQvBAACzMAIAEoAhQgACgCAC0AAEECdCIA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AQwBCwsQtRUACwsLIwAgACACQQdxIANBA3RyNgIEIAAgAkH4AXFBA3YgAXI2AgALMAAgASgCFCAALQAAQQJ0IgBBpK/EAGooAgAgAEGArsQAaigCACABKAIYKAIMEQMACzAAIAEoAhQgAC0AAEECdCIAQbiXzwBqKAIAIABBlJfPAGooAgAgASgCGCgCDBEDAAswAQJ+IAEpAwghAiABKQMAEPgUIQMgACABKQMQENIbNwMQIAAgAzcDACAAIAI3AwgLMAECfiABKQMQIQIgASkDABD4FCEDIAAgASkDCBD4FDcDCCAAIAM3AwAgACACNwMQCy8CAX4BfyABKQIAIQIgASgCCCEDIAAgAUEMahDdHjYCDCAAIAM2AgggACACNwIACy8CAX4BfyABKQIIIQIgARDdHiEDIAAgAUEEahDgHjYCBCAAIAM2AgAgACACNwIICy8CAX4BfyABKQIIIQIgARDdHiEDIAAgAUEEahD0HjYCBCAAIAM2AgAgACACNwIICyoAIAApAwggACkDGBCSIiAALQA0QQNHBEAgAEEgahC8FQsgACgCOBC6IAsqACAAKQMIIAApAxgQkiIgAC0ANEEDRwRAIABBIGoQvBULIAAoAjgQ/xoLLwACQAJAAkAgACgCAA4CAQIACyAAQQRqEL4gDwsgACkDCBDYDw8LIAApAwgQ2A8LKwEBfwJAAkACQCAAQQprDgQBAgIBAAsgAEGowABrQQJPDQELQQEhAQsgAQssAQF/IABBBGohASAAKAIAIgBBgICAgHhHBEAgACABKAIAEMccDwsgARCKGwssACAAKQMIENgPIAAoAiAQwRcgAEE4ahDuHiAAQSRqEPAeIABByABBCBCFDgsoAEEGIQEgACACIANB74fMAEEFEK4YBH8gAEELOgABQQAFIAELOgAACygAQQYhASAAIAIgA0HShMwAQQMQrhgEfyAAQRI6AAFBAgUgAQs6AAALKABBBiEBIAAgAiADQYTgywBBBBCuGAR/IABBJDoAAUEABSABCzoAAAsoAEEGIQEgACACIANBrYvMAEEFEK4YBH8gAEEdOgABQQIFIAELOgAACykAIAAgAWosAABBAE4EfyAAKQMAQoCBgoSIkKDAgH+DeqdBA3YFIAELCyUAIABBCGoQ1CAgAC0ANEEDRwRAIABBIGoQsxYLIABBOGoQmx0LJQAgAEEIahDUICAALQA0QQNHBEAgAEEgahC2FgsgAEE4ahCbHQsqAQF/A0AgAEEYaiECIAAtACxBAkdFBEAgAigCACEADAELCyABIAIQpQcLKQAgASAAEIgaIAEgAEEgahCAHCAAQegAaiABEPsiIABByABqIAEQgxwLKQAgACABEIkaIAEgAEEgahCBHCAAQegAaiABEPwiIABByABqIAEQhRwLKQAgASAAEIoaIAEgAEEgahD/GyAAQegAaiABEPoiIABByABqIAEQhBwLKAAgAC0AFEECRgRAIAAoAgAiAEIANwMQIABBGGoQpBcLIABCADcDCAsuAQF/QQRB0AAQsSAiAUUEQAALIAFCgYCAgBA3AgAgAUEIaiAAQcgAEO8kGiABCyoAIAApAwggACkDGBCSIiAALQA0QQNHBEAgAEEgahC6FgsgACgCOBC6IAsqACAALQAlQQJGBEAgABCOHw8LIAApAwgQ2A8gACgCICIAEKcXIAAQhCMLLwACQAJAAkAgACgCAA4CAQIACyAAQQRqEPggDwsgACkDCBDYDw8LIAApAwgQ2A8LKQAgAC0AFEECRgRAIAAoAgAiABDqHyAAQTBBCBCFDg8LIAApAwAQ2A8LKAACQCAAQQNHDQAgAi0ABSABmUQAAAAAAADwf2JyDQAgAkEAOgAECwsuACAAKAIIIgBBBGooAgAgAEEIaigCAEG8rMsAENsbIgAoAgQgACgCCCABEMMkCy4AIAAoAhQiAEEUaigCACAAQRhqKAIAQZCsywAQ2xsiACgCBCAAKAIIIAEQwyQLMAAgASgCFCAALQAAQQJ0IgBBkKjPAGooAgAgAEHsp88AaigCACABKAIYKAIMEQMACy8AAkACQAJAIAAoAgAOAgECAAsgAEEEahCNIQ8LIAApAwgQ2A8PCyAAKQMIENgPCyQAIAJFBEAgAQRAIAAgAUEIEIUOC0EIDwsgACABQQggAhC2AgsnAQF/IwBBIGsiAiQAIAJBCDYCCCAAIAEgAkEIahCpGCACQSBqJAALJwEBfyMAQSBrIgIkACACQRc2AgggACABIAJBCGoQqRggAkEgaiQACykAIAAgARDEGiABIABBIGoQxBwgAEHoAGogARDmJCAAQcgAaiABEMYcCyYBAX8gAC0AFCAAQQE6ABQgAEEIayEARQRAIAAQ6yQPCyAAEPMLC14BAX8gACgCACIBIAEoAgAiAUEBazYCACABQQFGBEAgACgCACIAKAIMIABBEGooAgAQxxwCQCAAQX9GDQAgACAAKAIEIgFBAWs2AgQgAUEBRw0AIABBGEEEEIUOCwsLJwAgAgRAQaDNzwAtAAAaIAIgARDjGSEBCyAAIAI2AgQgACABNgIACycBAX8CQCAAKAIAIgFFDQAgACgCCCIARQ0AIAFBBCAAQQN0EM0cCwsrAQF/QQEhAiABQf8BcQR/IAIFIAAoAhRBgYfMAEEBIAAoAhgoAgwRAwALCyMAIAEgA00EQCAAIAE2AgQgACACNgIADwsgASADIAQQiQ0ACzMBAX9BfyECA0AgAkEBaiECIABCzZmz5syZs+ZMfiIAQrTmzJmz5syZM1QNAAsgASACTQssAQF/QQEhAiABKAIUQeS6xABBAiABKAIYKAIMEQMABH8gAgUgACABEKsVCwsgACABKAIAIAJBaGxqQRhrIgApAwAgAEEIaikDABDZFQslACACIAMgAUEBEIgXIQEgACADQQFrNgIEIAAgAkEAIAEbNgIACy8CAX4BfCABKQMAIQIgASsDCCEDIAAgASkDEBDSGzcDECAAIAM5AwggACACNwMACyoAIAAgARCWCCAAIAFBDGoQmBk2AgwgACABLwEYOwEYIAAgASkCEDcCEAsrAQF+IAEpAhghAiAAIAEQ3gkgAEEMaiABKAIQIAEoAhQQvQcgACACNwIYCyUBAX8jAEEwayICJAAgAiAAENoHIAEgAkEwEO8kGiACQTBqJAALJQAgAARAIAAQ4hUgACgCACAAQQRqKAIAEPQaIABBFEEEEIUOCwstACAALQAAQQJ0IgBB6JfPAGooAgAgAEHcl88AaigCACABKAIUIAEoAhgQvgILLQAgAC0AAEECdCIAQYCYzwBqKAIAIABB9JfPAGooAgAgASgCFCABKAIYEL4CCy0AIAAtAABBAnQiAEHwmM8AaigCACAAQYyYzwBqKAIAIAEoAhQgASgCGBC+AgstACAALQAAQQJ0IgBBlJrPAGooAgAgAEHUmc8AaigCACABKAIUIAEoAhgQvgILLQAgAC0AAEECdCIAQfCazwBqKAIAIABB1JrPAGooAgAgASgCFCABKAIYEL4CCysBAX8gACgCACEBIABBgYDEADYCACABQYGAxABGBH8gAEEE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BgsbACAAKAIAQRBqIABBCGogAC0AFEECRhsoAgALHQAgASgCACIBRQRAIABBBDoAAA8LIAAgAiABEDELHQEBfyAAKAIIIgEEQCAAKAIAQQQgAUECdBDNHAsLGQAgASACTQRAIAIgASADEIcNAAsgACACagsdAQF/IAAoAggiAQRAIAAoAgBBBCABQQN0EM0cCwsbACABIAIQ0w8EQCAAQQA2AgAPCyAAIAEQ+gQLGwAgASACENQPBEAgAEEANgIADwsgACABEOUICyEAIAAoAgAgACgCBBDHHCAAKAIMIgAgACgCACgCABEBAAshAQF/IAEoAgAhAiABQQA2AgAgACACIAEoAgQQ4hkQsw4LGgEBf0Ggzc8ALQAAGkEIEFUiAARAIAAPCwALGgAgAQR/QaDNzwAtAAAaIAEgABDjGQUgAAsLGABBoM3PAC0AABogABBVIgAEQCAADwsACx8AIABFBEBB4PLOAEEyEPshAAsgACACIAEoAhARAgALFQAgAiADaiICIABPIAIgACABak1xCyEBAX8gAS0ADCECIAAgASgCBCABKAIIEO4NIAAgAjoADAsfACAAIAEgAigCBCIAIAIoAggQ0hUgAigCACAAENoaCxcAIAAgAU0EQCAADwsgACABIAIQiQ0ACyEBAX9BoM3PAC0AABogARBVIQIgACABNgIEIAAgAjYCAAseACAAQQA2AhAgACACNgIEIAAgATYCACAAQQA2AggLHgAgAkUEQCAAIAFBtInMAEEBEOscDwsgAEEEOgAACxsAIAEoAgAgAkEEdGtBEGsoAgBBufPd8XlsrQscACAAKAIAIgBFBEBBAA8LIAAQ5xoiABCZGSAACyABAX4gACkCBCECIAAQ4B4hACABIAI3AgQgASAANgIACxwAIAAoAgAiAEUEQEEADwsgABDwGiIAEI0GIAALHAAgACgCAEUEQCAAKQMIENgPDwsgAEEEahDaAgsaACAAKAIAIgAEQCAAEOYeIABBFEEEEIUOCwscACAAKAIARQRAIAApAwgQ2A8PCyAAQQRqELkgCxwAIAAoAgAiAEUEQEEADwsgABDwGiIAEJENIAALHwAgACkDCCAAKQMYEJIiIABBIGoQgx0gACgCOBC6IAsfAQF/IAAoAoQBIgFBgQFPBEAgACgCCEEBIAEQzRwLCxsAIAAQkg8aIAAoAsgC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GiABQSBqIAAQgiMLEwAgASAAEIoaIABBIGogARCEHAsWACAAKAIAQYCAgIB4RwRAIAAQjRULCxIAIAAoAgBBB0cEQCAAEI0QCwsVACAAKAIAIgAQigQgAEEMQQQQhQ4LEQAgACgCAARAIAAgARDlIgsLEQAgACgCAARAIAAgARDkIgsLEQAgACgCAARAIAAgARDiIgsLEQAgACgCAARAIAAgARDmIgsLEwAgASAAEIoaIABBKGogARDxIgsRACAAKAIABEAgACABEOgiCwsTACAAIAEQ+iIgAEEEaiABEOgiCxMAIABBMGogARCvFCAAIAEQjBALEwAgASAAEIgaIABBKGogARDzIgsRACAAKAIABEAgACABEOciCwsTACAAIAEQ+yIgAEEEaiABEOciCxMAIABBMGogARCwFCAAIAEQ/Q0LEQAgACgCAARAIAAgARDpIgsLEwAgACABEOMiIABBBGogARDiIgsTACAAIAEQ7iIgAEEEaiABEOQiCxMAIABBMGogARCsFCAAIAEQjxALEQAgACgCACIABEAgABCjEwsLEQAgACgCAARAIAAgARD/IwsLEQAgACgCAARAIAAgARD4IgsLEQAgACgCACIABEAgABCqBwsLEwAgACABEOUiIABBBGogARD4IgsTACAAIAEQ/CIgAEEEaiABEOkiCxMAIAEgABD/IiABQRRqIAAQvR0LEwAgASAAEP8iIAFBBGogABDlIgsVACAAKAIAIgAQqQQgAEEMQQQQhQ4LEgAgAC0ACEEFRgRAIAAQxh0LCxYAIAAoAgAiABDyASAAQcAAQQgQhQ4LFQAgACgCACIAEIsEIABBDEEEEIUOCxEAIAAoAgAiAARAIAAQtwgLCxUAIAAoAgAiABCMBCAAQQxBBBCFDgsRACAAKAIABEAgACABEPciCwsRACAAKAIAIgAEQCAAEJcVCwsRACAAKAIYIgAEQCAAEJkFCwsWACAAKAIAQYCAgIB4RwRAIAAQmRULCxMAIAAgARCIJCAAQQRqIAEQjwMLEwAgACABEIgkIABBBGogARCXJAsTACAAIAEQqCQgAEEEaiABEIgkCxMAIABBMGogARDCFCAAIAEQ6A0LEQAgACgCAARAIAAgARCIJAsLEwAgACABEMsUIAEgAEEMahDYHQsRACABKAIABEAgASAAEJckCwsWACAAKAIA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q6+uxMqL2Aw3AwggAEKfm8Cw9r7H4yw3AwALEwAgAEENNgIEIABBg6HMADYCAAshACAAQqTj9P+ru6f9bTcDCCAAQqijquKUxaG25gA3AwALEwAgAEEfNgIEIABByKzMADYCAAshACAAQtu+vunn9auATjcDCCAAQtSxr43xuarJkn83AwALIAAgAEKNvbns74zRy1M3AwggAEKZn+3Js9nT+jo3AwALIQAgAEKW7aWwybj0ycIANwMIIABCu5TjvrGTr6ZkNwMACyEAIABC3sKxz8bpxI1mNwMIIABC9amk2N+wo6TDADcDAAsQACAAEMAcIABBOEEEEIUOCxAAIAAQwR4gAEEwQQQQhQ4LEwAgAEGYoswANgIEIAAgATYCAAsTACAAQdSizAA2AgQgACABNgIACw8AIAAQoQIgAEEEahCyBAsPACAAEMUeIABBFGoQlCALEQAgACgCACIAEIcCIAAQkyILDwAgABCoISAAQQRqEJIECyEAIABCy56yzqOpr9WwfzcDCCAAQs6XpZS4msGRMTcDAAsiACAAQtzuu/id34Gj4AA3AwggAELU+a7bxoTujPoANwMACw8AQaDNzwAtAAAaIAAQVQsOACAAKAIMIAEgAhCFDQsLACAAIAEQDUEBRgsPAEGMusAAQSsgABC8EgALDAAgAEEMaiABEOYICw4AIAA1AgBBASABEPIFCw0AIAAgASACEI8SQQALDgAgADEAAEEBIAEQ8gULDgAgACkDAEEBIAEQ8gULDwAgACgCCCAAKAIAENoaCw0AIAAgASACEJUSQQALDAAgACABEJ0MQQFzCw0AIAAgASACIAMQ2BMLEAAgACABQYGHzABBARDrHAsQACAAIAFBuIbMAEEBEOscCxAAIAAgAUH4hswAQQEQ6xwLEAAgACABQd2HzABBBBDrHAsPACAAKAIAIAAoAgQQxxwLDQAgACABIAIgAxCuGAsNACABIABB/wFxENUYCw8AIAAQuSAgACgCBBC8IAsMACAAIAEQ8hZBAXMLDwAgACgCACABKAIAEKsDCw0AIAAgAUEAQQAQ9gELDwAgABC+ICAAKAIEELwgCw4AIAAQhhsiABC6AiAACw8AIAAQzCAgACgCBBC8IAsPACAAEJAdIAAoAhgQ9xILDwAgABCjAiAAKAIEELwgCw8AIAAQnQIgACgCBBC8IAsP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IAAoAhgiASAAKAIcELoDIQMgARDHHCAAQSBqJAAgAwwBCyAFIAVBqLDMABCHDQALCwwAIAAoAgAgARDSAQsLACABIAAgAhCkIgsLACAAIAEgAhDDEAsMACABEP8ZIAAQ5B4LDAAgAEHwAEEIEIUOCwwAIAAoAgAgARCiAwsMACAAKAIAIAEQpBALDAAgACgCACABEIsHCwwAIAAoAgAgARC1DwsMACAAKAIAIAEQghQLDAAgACgCACABENkOCwwAIAAoAgAgARD4BgsLACAAIAFBIRCxBgsLACAAIAFBKxC6BwsLACAAIAFBLRC6BwsLACAAIAFBPRCxBgsMACAAIAFBowIQ1wELDAAgACABQaQCENcBCwwAIAAgAUGlAhDXAQsMACAAIAFBpgIQ1wELDAAgACABQacCENcBCwwAIAAgAUGoAhDXAQsMACAAIAFBqQIQ1wELDAAgACABQaoCENcBCwwAIAAgAUGrAhDXAQsMACAAIAFBrAIQ1wELDAAgACABQa0CENcBCwwAIAAgAUGuAhDXAQsMACAAIAFBrwIQ1wELDAAgACABQbACENcBCwwAIAAgAUGxAhDXAQsMACAAIAFBsgIQ1wELDAAgACABQbMCENcBCwwAIAAgAUG0AhDXAQsMACAAIAFBtQIQ1wELDAAgACABQbYCENcBCwwAIAAgAUG3AhDXAQsMACAAKAIAIAEQyAoLDAAgACgCACABEMkKCwwAIAAoAgAgARDKCgsMACAAKAIAIAEQlgMLDAAgACgCACABEMsKCwwAIAAoAgAgARD8CAsMACAAKAIAIAEQphALDAAgACgCACABENcRCwwAIAAoAgAgARCCFQsMACAAKAIAIAEQowcLDAAgACgCACABEKgQCwwAIAAoAgAgARDMEAsMACAAKAIAIAEQ/wgLDAAgACgCACABEKcQCwwAIAAoAgAgARCzDwsMACAAKAIAIAEQuQ8LCwAgAEEBOgAMQQELDAAgACgCACABEN4OCwsAIABBBEEEEIUOCwsAIABBIEEIEIUOCwwAIAAoAgAgARD/EwsMACAAKAIAIAEQuAYLDAAgACgCACABENgVCwwAIAAoAgAgARCcIgsMACAAKAIAIAEQixALDAAgACgCACABEKEiCwwAIAAoAgAgARDhDQulBgECfwJAAkACQAJAAkACQAJAAkACQAJAAkAC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BEACQAJAAkACQAJAAkACQAJAIAIgBmoiACgCACIEQQRrQQAgBEEFa0EISRtBAWsOCAECAwQHBwUGAAsgACABENYJDAYLIABBCGogARCwHQwFCyAAQSBqIAEQ8SIMBAsgASAAQQhqEIoaIABBPGogARCxHSAAQTBqIAEQrxQMAwsgAEEkaiABELEdIABBLGogARCvFAwCCyAAQQRqIAEQpxQMAQsgAEEIaiIEKAIAQQVHBEAgASAEEIoaCyAAQTxqIAEQsR0gAEEwaiABEK8UCyACQdgAaiECDAELCyADQTBqIAEQsR0LDAAgACgCGCABEPoMCwwAIAEgACgCGBDuAgsMACAAKAIAIAEQjxALDAAgACgCGCABEIEPCwwAIAAoAhggARCFBQsMACAAKAIAIAEQgg8LDAAgASAAKAIYEOEDCwwAIAAoAgAgARD/DgsMACAAKAIAIAEQgQ8LDAAgACgCACABEP4OCwwAIAAoAgAgARD6DAuBCAIEfwF+IAAoAgAhACMAQUBqIgIkACABLQA0BEAgAS0AOiEEIAEtADkhBSABQYECOwA5AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgACgCAEECaw4SAAECAwQFERAPDg0MCwoJCAcGEgsgACgCBEGAgICAeEYEQCABKAIwEJANIQMgAkEYakHg784AKQMAIgY3AwAgAkEIaiAGNwMAIAJBNGogAUE0aigCADYCACACQQE6ACggAiABNgIgIAIgAzYCJCACQQE6ADkgAkHY784AKQMAIgY3AxAgAiAGNwMAIAIgASkCLDcCLCACIAEvADs7ADsgAS0AOCEDIAIgAS0APToAPSACIAM6ADggAkEBOgA6IABBIGogAhDXCiAAQQhqIAIQthQgAEEUaiACEP8jIAIQ5CAMEgsgASgCMBCQDSEDIAJBGGpB4O/OACkDACIGNwMAIAJBCGogBjcDACACQTRqIAFBNGooAgA2AgAgAkEBOgAoIAIgATYCICACIAM2AiQgAkEBOgA5IAJB2O/OACkDACIGNwMQIAIgBjcDACACIAEpAiw3AiwgAiABLwA7OwA7IAEtADghAyACIAEtAD06AD0gAiADOgA4IAJBAToAOiAAQRxqIAIQ1wogAEEEaiACELYUIABBEGogAhD/IyACEOQgDBELIABBEGog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KAIAEN4BCwwAIAAoAgAgARCEDwsMACAAKAIAIAEQhQ8LDAAgACgCGCABEIUPCwwAIAAoAhggARCHBQsMACAAKAIAIAEQhg8LDAAgACgCGCABEIYPCwwAIAAoAhggARCIBQsMACAAKAIAIAEQhw8LDAAgACgCACABEIQMCwwAIAAoAhggARCEDAsMACAAKAIYIAEQ3QMLDAAgACgCACABEI8DCwwAIAAoAgAgARDDFAsMACAAKAIAIAEQ2QQLDAAgACgCACABEMQUCwwAIABByABBCBCFDgsMACAAKAIAIAEQnwQLDAAgACgCACABEIgPCwwAIAAoAgAgARCdBAsMACAAKAIAIAEQyw8LDAAgACgCACABEJ4ECwwAIAAoAgAgARDRFAsMACAAKAIAIAEQoQQLDAAgACgCACABEMwPCwwAIAAoAgAgARCgBAsMACAAKAIAIAEQzQ8LDAAgACgCACABEO0DCwwAIAAoAgAgARDODwsMACABEOQeIAAQ2A8LDAAgACgCACABEOgNCwwAIAAoAgAgARCREAsMACAAKAIAIAEQkhALDAAgACgCACABELAQCwwAIAAoAgAgARCTEAsMACABIAAoAgAQ7wcLDAAgASAAKAIAEM8GCwwAIAAoAgAgARDuCQsMACAAKAIAIAEQwgkLDAAgACgCACABEIQKCwwAIAAoAgAgARCFCgsMACAAKAIAIAEQuAkLDAAgACgCACABEIcKCwwAIAAoAgAgARCICgsMACABIAAoAgAQiQELDAAgASAAKAIAEJEDCwwAIAEgACgCGBCtHAsMACAAKAIAIAEQogQLDAAgACgCACABENgQCwwAIAAoAgAgARCjBAsMACAAKAIAIAEQ2RALDAAgACgCACABEMUJCwwAIAAoAgAgARCJCgsMACAAKAIAIAEQ6xALDAAgACgCACABEKwHCwwAIAAoAgAgARDBDgsKACAAEPILGkEBCwsAIAIgACABEOsCCw0AIAAoAggtADwQ5iELDAAgACABKQIQNwMACw0AIAAoAhQtAEwQ5iELCwAgACABEN0GQQALCgAgACABIAIQXwsMACABIAAoAhgQtAELDAAgACgCACABENEBCwwAIAAoAhggARCbCAsMACAAKAIAIAEQmwgLCwAgACABIAIQmhMLDAAgACgCACABEIINCwsAIAAoAgAgARBeCwwA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L2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9hbnlob3ctMS4wLjg2L3NyYy9lcnJvci5ycwAAABAEEABZAAAAqwMAAA4AAAAKCkNhdXNlZCBieTp8BBAADAAAAAoKAACQBBAAAgAAAHN0YWNrIGJhY2t0cmFjZTpTdGFjayBiYWNrdHJhY2U6CgAAAKwEEAARAAAAUwAAAAAAAAAEAAAABAAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IGludmFsaWQgT25jZSBzdGF0ZdgEEAA8AAAAL3J1c3RjLzUwNjk4NTY0OTU4NzA0ODYxMzRkZDJjYTBiMGUyNTE2MzA4YzVjMmEvbGlicmFyeS9zdGQvc3JjL3N5cy9zeW5jL29uY2Uvbm9fdGhyZWFkcy5ycwAcBRAAWwAAADYAAAASAAAAOAIAADkCAAA6AgAAOwIAADwCAAA9AgAAPgIAAD8CAABAAgAAQQIAQbiLwAALBgEAAABCAgBByIvAAAsGAQAAAEMCAEHYi8AACwYBAAAARAIAQeiLwAALBgEAAABFAgBB+IvAAAsGAQAAAEYCAEGIjMAACwYBAAAAQwIAQZiMwAALBgEAAABHAgBBqIzAAAsGAQAAAEgCAEG4jMAACwYBAAAASQIAQciMwAALBgEAAABKAgBB2IzAAAvrEwEAAABDAgAAdmVyYmF0aW1Nb2R1bGVTeW50YXhuYXRpdmVDbGFzc1Byb3BlcnRpZXNpbXBvcnROb3RVc2VkQXNWYWx1ZXNub0VtcHR5RXhwb3J0aW1wb3J0RXhwb3J0QXNzaWduQ29uZmlndHNFbnVtSXNNdXRhYmxlAAASfRAAAQAAAAAAAAAIAAAABAAAAEsCAABMAgAABAAAAAQAAABNAgAATgIAAE8CAABQAgAABAEAAAQAAABRAgAAUgIAAGVycm9yIHN0cmluZyBzaG91bGQgYmUgdXRmOC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19lcnJvcl9yZXBvcnRlcnMtMC4yMS4wL3NyYy9oYW5kbGVyLnJzADMHEABoAAAAbwAAACwAAABTAgAAJAAAAAQAAABUAgAAAAAAAAQAAAAEAAAAVQIAAFYCAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi93YXNtLWJpbmRnZW4tZnV0dXJlcy0wLjQuNDMvc3JjL2xpYi5ycwAAANAHEABlAAAA3wAAABUAAABXAgAAFAAAAAQAAAABAgAAYmluZGluZ190eXBlc2NyaXB0X3dhc20vc3JjL2xpYi5ycwAAWAgQACIAAAAWAAAAFwAAAHRzeACMCBAAAwAAAGR+EQAKAAAAc3RyaXAtb25seXRyYW5zZm9ybQCgCBAACgAAAKoIEAAJAAAAZmlsZW5hbWVwYXJzZXJtb2Rlc291cmNlTWFwAJkDEwAGAAAAxAgQAAgAAADMCBAABgAAANIIEAAEAAAAqggQAAkAAADWCBAACQAAAGludmFsaWQgbGVuZ3RoIAAQCRAADwAAANr+EAALAAAAZHVwbGljYXRlIGZpZWxkIGAAAAAwCRAAEQAAAEkDEwABAAAAdW5rbm93biB2YXJpYW50IGBgLCBleHBlY3RlZCAAAABUCRAAEQAAAGUJEAAMAAAAY2FsbGVkIGBPcHRpb246OnVud3JhcF90aHJvdygpYCBvbiBhIGBOb25lYCB2YWx1ZWNhbGxlZCBgUmVzdWx0Ojp1bndyYXBfdGhyb3coKWAgb24gYW4gYEVycmAgdmFsdWVsaWJyYXJ5L2NvcmUvc3JjL251bS9kZWMyZmx0L2RlY2ltYWwucnMAAADmCRAAJwAAAFEAAAAnAAAA5gkQACcAAAB9AAAAEwAAAOYJEAAnAAAAoQAAACAAAADmCRAAJwAAALgAAAAlAAAA5gkQACcAAADlAAAAFQAAAOYJEAAnAAAA7wAAABgAAAAAAAAIAQgDCAYQCRANEBIYFxgdGCQgKyAzIDwgRihQKFsoZzBzMIAwjjicOKs4uzjMQN1A70ACSRVJKUk+UVNRaVGAUZhZsFnJWeNh/WEYYjRqUGptaotqqnLJculyCnsre017cIOTg7eD3IMCjCiMT4x3lJ+UyJTynBwFHAUcBRwFBQIFAQIFBgIFAwECBQEFBgIFBwgBAgUDCQAGAgUBCQUDAQIFCQcGBQYCBQQICAIIAQIFAgQEAQQABgIFAQICAAcAAwECBQYBAAMFAQUGAgUDAAUBBwUHCAECBQEFAgUIBwgJAAYCBQcGAgkDCQQFAwECBQMIAQQGCQcCBgUGAgUBCQAHAwQIBgMCCAECBQkFAwYHBAMBBgQABgIFBAcGCAMHAQUIAgADAQIFAgMIBAEIBQcJAQABBQYCBQEBCQIACQIICQUFAAcIAQIFBQkGAAQGBAQHBwUDCQAGAgUCCQgAAgMCAgMIBwYJBQMBAgUBBAkAAQEGAQEJAwgEBwYFBgIFBwQFAAUIAAUJBgkCAwgCCAECBQMHAgUCCQACCQgEBgEJAQQABgIFAQgGAgYEBQEECQIDAAkFBwADAQIFCQMBAwICBQcEBgEFBAcIBQEFBgIFBAYFBgYBAggHAwAHBwMJAgUHCAECBQIDAggDAAYEAwYFAwgGCQYCCAkABgIFAQEGBAEFAwIBCAIGCQMECAEEBAUDAQIFBQgCAAcGBgAJAQMEBgcEAAcCAgYFBgIFAgkBAAMIAwAEBQYHAwMHAAMGAQMCCAECBQEEBQUBCQEFAgIIAwYGCAUBCAAGBgQABgIFBwIHBQkFBwYBBAEIAwQCBQkAAwMCAAMBAgUDBgMHCQcICAAHAAkBBwECCQUBBgYAAQUGAgUBCAEICQgJBAADBQQFCAUGBAcFCAMAAAcIAQIFCQAJBAkEBwABBwcCCQIIAgMHCQEFAAMJAAYCBQQFBAcEBwMFAAgIBgQGBAEBCAkFBwUBCQUDAQIFAgIHAwcDBgcFBAQDAgMCAAUJBAcIBwUJBwYFBgIFAQEDBggGCAMHBwIBBgEGAAIJBwMJAwcJCAgCCAECBQUGCAQDBAEICAYACAAIAAEECAYJBggJCQQBBAAGAgUCCAQCAQcACQQDAAQABAAABwQDBAgEBAkHAAcAAwECBQEEAgEACAUEBwEFAgACAAADBwEHBAICBAgFAwUBBQYCBQcBAAUEAgcDBQcGAAEAAAEIBQgHAQECBAIGBwUHCAECBQMFBQIHAQMGBwgIAAAFAAAJAgkDBQUGAgEDAwcICQAGAgUBBwcGAwUGCAMJBAAAAgUABAYEBgcHCAEABgYICQQFAwECBQgICAEHCAQBCQcAAAECBQIDAgMDCAkABQMDBAQHAgYFBgIFBAQEAAgJAgAJCAUAAAYCBgEGAQYJBAUCBgYHAgMGAwIIAQIFAgICAAQEBgAECQIF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ZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL251bS1iaWdpbnQtMC40LjYvc3JjL2JpZ2ludC9zaGlmdC5ycwAkeRAAYwAAAGYAAAAoAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvbnVtLWJpZ2ludC0wLjQuNi9zcmMvYmlndWludC9zdWJ0cmFjdGlvbi5ycwAAmHkQAGoAAAA0AAAAGgAAAJh5EABqAAAANQAAABoAAABDYW5ub3Qgc3VidHJhY3QgYiBmcm9tIGEgYmVjYXVzZSBiIGlzIGxhcmdlciB0aGFuIGEuJHoQADQAAACYeRAAagAAAEUAAAAFAAAAmHkQAGoAAABdAAAAGgAAAJh5EABqAAAAXgAAABoAAABhc3NlcnRpb24gZmFpbGVkOiBhX2hpLmlzX2VtcHR5KCkAAACYeRAAagAAAGIAAAAFAAAAmHkQAGoAAABlAAAABQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL251bS1iaWdpbnQtMC40LjYvc3JjL2JpZ3VpbnQvYWRkaXRpb24ucnMA1HoQAGcAAAA7AAAAGgAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL251bS1iaWdpbnQtMC40LjYvc3JjL2JpZ3VpbnQvc2hpZnQucnNMexAAZAAAACgAAAAZAAAATHsQAGQAAABKAAAAIwAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL251bS1pbnRlZ2VyLTAuMS40Ni9zcmMvcm9vdHMucnMAANB7EABeAAAAgwEAAAEAAAAAAAAABAAAAAQAAABnAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvb25jZV9jZWxsLTEuMTkuMC9zcmMvaW1wX3N0ZC5ycwAAUHwQAF4AAAChAAAANgAAAFB8EABeAAAAmwAAAAkAAABtMzg7MjsAANF8EAAFAAAATQITAAEAAABNAhMAAQAAADQ4OzI7AAAA8HwQAAUAAABNAhMAAQAAAE0CEwABAAAAG1sxMjM0NTY3ODkbWzBtABt9EAAEAAAAMzAzMTMyMzMzNDM1MzYzNzM5OTA5MTkyOTM5NDk1OTY5NzQwNDE0MjQzNDQ0NTQ2NDc0OTEwMDEwMTEwMjEwMzEwNDEwNTEwNjEwNzM4OzI7MjQwOzI0ODsyNTUzODsyOzI1MDsyMzU7MjE1Mzg7MjswMDA7MjU1OzI1NTM4OzI7MTI3OzI1NTsyMTIzODsyOzI0MDsyNTU7MjU1Mzg7MjsyNDU7MjQ1OzIyMDM4OzI7MjU1OzIyODsxOTYzODsyOzAwMDswMDA7MDAwMzg7MjsyNTU7MjM1OzIwNTM4OzI7MDAwOzAwMDsyNTUzODsyOzEzODswNDM7MjI2Mzg7MjsxNjU7MDQyOzA0MjM4OzI7MjIyOzE4NDsxMzUzODsyOzA5NTsxNTg7MTYwMzg7MjsxMjc7MjU1OzAwMDM4OzI7MjEwOzEwNTswMzAzODsyOzI1NTsxMjc7MDgwMzg7MjsxMDA7MTQ5OzIzNzM4OzI7MjU1OzI0ODsyMjAzODsyOzIyMDswMjA7MDYwMzg7MjswMDA7MDAwOzEzOTM4OzI7MDAwOzEzOTsxMzkzODsyOzE4NDsxMzQ7MDExMzg7MjsxNjk7MTY5OzE2OTM4OzI7MDAwOzEwMDswMDAzODsyOzE4OTsxODM7MTA3Mzg7MjsxMzk7MDAwOzEzOTM4OzI7MDg1OzEwNzswNDczODsyOzI1NTsxNDA7MDAwMzg7MjsxNTM7MDUwOzIwNDM4OzI7MTM5OzAwMDswMDAzODsyOzIzMzsxNTA7MTIyMzg7MjsxNDM7MTg4OzE0MzM4OzI7MDcyOzA2MTsxMzkzODsyOzA0NzswNzk7MDc5Mzg7MjswMDA7MjA2OzIwOTM4OzI7MTQ4OzAwMDsyMTEzODsyOzI1NTswMjA7MTQ3Mzg7MjswMDA7MTkxOzI1NTM4OzI7MTA1OzEwNTsxMDUzODsyOzAzMDsxNDQ7MjU1Mzg7MjsxNzg7MDM0OzAzNDM4OzI7MjU1OzI1MDsyNDAzODsyOzAzNDsxMzk7MDM0Mzg7MjsyNTU7MDAwOzI1NTM4OzI7MjIwOzIyMDsyMjAzODsyOzI0ODsyNDg7MjU1Mzg7MjsyNTU7MjE1OzAwMDM4OzI7MjE4OzE2NTswMzIzODsyOzEyODsxMjg7MTI4Mzg7MjswMDA7MTI4OzAwMDM4OzI7MTczOzI1NTswNDczODsyOzI0MDsyNTU7MjQwMzg7MjsyNTU7MTA1OzE4MDM4OzI7MjA1OzA5MjswOTIzODsyOzA3NTswMDA7MTMwMzg7MjsyNTU7MjU1OzI0MDM4OzI7MjQwOzIzMDsxNDAzODsyOzIzMDsyMzA7MjUwMzg7MjsyNTU7MjQwOzI0NTM4OzI7MTI0OzI1MjswMDAzODsyOzI1NTsyNTA7MjA1Mzg7MjsxNzM7MjE2OzIzMDM4OzI7MjQwOzEyODsxMjgzODsyOzIyNDsyNTU7MjU1Mzg7MjsyNTA7MjUwOzIxMDM4OzI7MjExOzIxMTsyMTEzODsyOzE0NDsyMzg7MTQ0Mzg7MjsyNTU7MTgyOzE5MzM4OzI7MjU1OzE2MDsxMjIzODsyOzAzMjsxNzg7MTcwMzg7MjsxMzU7MjA2OzI1MDM4OzI7MTE5OzEzNjsxNTMzODsyOzE3NjsxOTY7MjIyMzg7MjsyNTU7MjU1OzIyNDM4OzI7MDAwOzI1NTswMDAzODsyOzA1MDsyMDU7MDUwMzg7MjsyNTA7MjQwOzIzMDM4OzI7MTI4OzAwMDswMDAzODsyOzEwMjsyMDU7MTcwMzg7MjswMDA7MDAwOzIwNTM4OzI7MTg2OzA4NTsyMTEzODsyOzE0NzsxMTI7MjE5Mzg7MjswNjA7MTc5OzExMzM4OzI7MTIzOzEwNDsyMzgzODsyOzAwMDsyNTA7MTU0Mzg7MjswNzI7MjA5OzIwNDM4OzI7MTk5OzAyMTsxMzMzODsyOzAyNTswMjU7MTEyMzg7MjsyNDU7MjU1OzI1MDM4OzI7MjU1OzIyODsyMjUzODsyOzI1NTsyMjg7MTgxMzg7MjsyNTU7MjIyOzE3MzM4OzI7MDAwOzAwMDsxMjgzODsyOzI1MzsyNDU7MjMwMzg7MjsxMjg7MTI4OzAwMDM4OzI7MTA3OzE0MjswMzUzODsyOzI1NTsxNjU7MDAwMzg7MjsyNTU7MDY5OzAwMDM4OzI7MjE4OzExMjsyMTQzODsyOzIzODsyMzI7MTcwMzg7MjsxNTI7MjUxOzE1MjM4OzI7MTc1OzIzODsyMzgzODsyOzIxOTsxMTI7MTQ3Mzg7MjsyNTU7MjM5OzIxMzM4OzI7MjU1OzIxODsxODUzODsyOzIwNTsxMzM7MDYzMzg7MjsyNTU7MTkyOzIwMzM4OzI7MjIxOzE2MDsyMjEzODsyOzE3NjsyMjQ7MjMwMzg7MjsxMjg7MDAwOzEyODM4OzI7MTAyOzA1MTsxNTMzODsyOzI1NTswMDA7MDAwMzg7MjsxODg7MTQzOzE0MzM4OzI7MDY1OzEwNTsyMjUzODsyOzEzOTswNjk7MDE5Mzg7MjsyNTA7MTI4OzExNDM4OzI7MjQ0OzE2NDswOTYzODsyOzA0NjsxMzk7MDg3Mzg7MjsyNTU7MjQ1OzIzODM4OzI7MTYwOzA4MjswNDUzODsyOzE5MjsxOTI7MTkyMzg7MjsxMzU7MjA2OzIzNTM4OzI7MTA2OzA5MDsyMDUzODsyOzExMjsxMjg7MTQ0Mzg7MjsyNTU7MjUwOzI1MDM4OzI7MDAwOzI1NTsxMjczODsyOzA3MDsxMzA7MTgwMzg7MjsyMTA7MTgwOzE0MDM4OzI7MDAwOzEyODsxMjgzODsyOzIxNjsxOTE7MjE2Mzg7MjsyNTU7MDk5OzA3MTM4OzI7MDY0OzIyNDsyMDgzODsyOzIzODsxMzA7MjM4Mzg7MjsyNDU7MjIyOzE3OTM4OzI7MjU1OzI1NTsyNTUzODsyOzI0NTsyNDU7MjQ1Mzg7MjsyNTU7MjU1OzAwMDM4OzI7MTU0OzIwNTswNTA0ODsyOzI0MDsyNDg7MjU1NDg7MjsyNTA7MjM1OzIxNTQ4OzI7MDAwOzI1NTsyNTU0ODsyOzEyNzsyNTU7MjEyNDg7MjsyNDA7MjU1OzI1NTQ4OzI7MjQ1OzI0NTsyMjA0ODsyOzI1NTsyMjg7MTk2NDg7MjswMDA7MDAwOzAwMDQ4OzI7MjU1OzIzNTsyMDU0ODsyOzAwMDswMDA7MjU1NDg7MjsxMzg7MDQzOzIyNjQ4OzI7MTY1OzA0MjswNDI0ODsyOzIyMjsxODQ7MTM1NDg7MjswOTU7MTU4OzE2MDQ4OzI7MTI3OzI1NTswMDA0ODsyOzIxMDsxMDU7MDMwNDg7MjsyNTU7MTI3OzA4MDQ4OzI7MTAwOzE0OTsyMzc0ODsyOzI1NTsyNDg7MjIwNDg7MjsyMjA7MDIwOzA2MDQ4OzI7MDAwOzAwMDsxMzk0ODsyOzAwMDsxMzk7MTM5NDg7MjsxODQ7MTM0OzAxMTQ4OzI7MTY5OzE2OTsxNjk0ODsyOzAwMDsxMDA7MDAwNDg7MjsxODk7MTgzOzEwNzQ4OzI7MTM5OzAwMDsxMzk0ODsyOzA4NTsxMDc7MDQ3NDg7MjsyNTU7MTQwOzAwMDQ4OzI7MTUzOzA1MDsyMDQ0ODsyOzEzOTswMDA7MDAwNDg7MjsyMzM7MTUwOzEyMjQ4OzI7MTQzOzE4ODsxNDM0ODsyOzA3MjswNjE7MTM5NDg7MjswNDc7MDc5OzA3OTQ4OzI7MDAwOzIwNjsyMDk0ODsyOzE0ODswMDA7MjExNDg7MjsyNTU7MDIwOzE0NzQ4OzI7MDAwOzE5MTsyNTU0ODsyOzEwNTsxMDU7MTA1NDg7MjswMzA7MTQ0OzI1NTQ4OzI7MTc4OzAzNDswMzQ0ODsyOzI1NTsyNTA7MjQwNDg7MjswMzQ7MTM5OzAzNDQ4OzI7MjU1OzAwMDsyNTU0ODsyOzIyMDsyMjA7MjIwNDg7MjsyNDg7MjQ4OzI1NTQ4OzI7MjU1OzIxNTswMDA0ODsyOzIxODsxNjU7MDMyNDg7MjsxMjg7MTI4OzEyODQ4OzI7MDAwOzEyODswMDA0ODsyOzE3MzsyNTU7MDQ3NDg7MjsyNDA7MjU1OzI0MDQ4OzI7MjU1OzEwNTsxODA0ODsyOzIwNTswOTI7MDkyNDg7MjswNzU7MDAwOzEzMDQ4OzI7MjU1OzI1NTsyNDA0ODsyOzI0MDsyMzA7MTQwNDg7MjsyMzA7MjMwOzI1MDQ4OzI7MjU1OzI0MDsyNDU0ODsyOzEyNDsyNTI7MDAwNDg7MjsyNTU7MjUwOzIwNTQ4OzI7MTczOzIxNjsyMzA0ODsyOzI0MDsxMjg7MTI4NDg7MjsyMjQ7MjU1OzI1NTQ4OzI7MjUwOzI1MDsyMTA0ODsyOzIxMTsyMTE7MjExNDg7MjsxNDQ7MjM4OzE0NDQ4OzI7MjU1OzE4MjsxOTM0ODsyOzI1NTsxNjA7MTIyNDg7MjswMzI7MTc4OzE3MDQ4OzI7MTM1OzIwNjsyNTA0ODsyOzExOTsxMzY7MTUzNDg7MjsxNzY7MTk2OzIyMjQ4OzI7MjU1OzI1NTsyMjQ0ODsyOzAwMDsyNTU7MDAwNDg7MjswNTA7MjA1OzA1MDQ4OzI7MjUwOzI0MDsyMzA0ODsyOzEyODswMDA7MDAwNDg7MjsxMDI7MjA1OzE3MDQ4OzI7MDAwOzAwMDsyMDU0ODsyOzE4NjswODU7MjExNDg7MjsxNDc7MTEyOzIxOTQ4OzI7MDYwOzE3OTsxMTM0ODsyOzEyMzsxMDQ7MjM4NDg7MjswMDA7MjUwOzE1NDQ4OzI7MDcyOzIwOTsyMDQ0ODsyOzE5OTswMjE7MTMzNDg7MjswMjU7MDI1OzExMjQ4OzI7MjQ1OzI1NTsyNTA0ODsyOzI1NTsyMjg7MjI1NDg7MjsyNTU7MjI4OzE4MTQ4OzI7MjU1OzIyMjsxNzM0ODsyOzAwMDswMDA7MTI4NDg7MjsyNTM7MjQ1OzIzMDQ4OzI7MTI4OzEyODswMDA0ODsyOzEwNzsxNDI7MDM1NDg7MjsyNTU7MTY1OzAwMDQ4OzI7MjU1OzA2OTswMDA0ODsyOzIxODsxMTI7MjE0NDg7MjsyMzg7MjMyOzE3MDQ4OzI7MTUyOzI1MTsxNTI0ODsyOzE3NTsyMzg7MjM4NDg7MjsyMTk7MTEyOzE0NzQ4OzI7MjU1OzIzOTsyMTM0ODsyOzI1NTsyMTg7MTg1NDg7MjsyMDU7MTMzOzA2MzQ4OzI7MjU1OzE5MjsyMDM0ODsyOzIyMTsxNjA7MjIxNDg7MjsxNzY7MjI0OzIzMDQ4OzI7MTI4OzAwMDsxMjg0ODsyOzEwMjswNTE7MTUzNDg7MjsyNTU7MDAwOzAwMDQ4OzI7MTg4OzE0MzsxNDM0ODsyOzA2NTsxMDU7MjI1NDg7MjsxMzk7MDY5OzAxOTQ4OzI7MjUwOzEyODsxMTQ0ODsyOzI0NDsxNjQ7MDk2NDg7MjswNDY7MTM5OzA4NzQ4OzI7MjU1OzI0NTsyMzg0ODsyOzE2MDswODI7MDQ1NDg7MjsxOTI7MTkyOzE5MjQ4OzI7MTM1OzIwNjsyMzU0ODsyOzEwNjswOTA7MjA1NDg7MjsxMTI7MTI4OzE0NDQ4OzI7MjU1OzI1MDsyNTA0ODsyOzAwMDsyNTU7MTI3NDg7MjswNzA7MTMwOzE4MDQ4OzI7MjEwOzE4MDsxNDA0ODsyOzAwMDsxMjg7MTI4NDg7MjsyMTY7MTkxOzIxNjQ4OzI7MjU1OzA5OTswNzE0ODsyOzA2NDsyMjQ7MjA4NDg7MjsyMzg7MTMwOzIzODQ4OzI7MjQ1OzIyMjsxNzk0ODsyOzI1NTsyNTU7MjU1NDg7MjsyNDU7MjQ1OzI0NTQ4OzI7MjU1OzI1NTswMDA0ODsyOzE1NDsyMDU7MDUwMzg7NTswMzg7NTsxMzg7NTsyMzg7NTszMzg7NTs0Mzg7NTs1Mzg7NTs2Mzg7NTs3Mzg7NTs4Mzg7NTs5Mzg7NTsxMDM4OzU7MTEzODs1OzEyMzg7NTsxMzM4OzU7MTQzODs1OzE1Mzg7NTsxNjM4OzU7MTczODs1OzE4Mzg7NTsxOTM4OzU7MjAzODs1OzIxMzg7NTsyMjM4OzU7MjMzODs1OzI0Mzg7NTsyNTM4OzU7MjYzODs1OzI3Mzg7NTsyODM4OzU7MjkzODs1OzMwMzg7NTszMTM4OzU7MzIzODs1OzMzMzg7NTszNDM4OzU7MzUzODs1OzM2Mzg7NTszNzM4OzU7MzgzODs1OzM5Mzg7NTs0MDM4OzU7NDEzODs1OzQyMzg7NTs0MzM4OzU7NDQzODs1OzQ1Mzg7NTs0NjM4OzU7NDczODs1OzQ4Mzg7NTs0OTM4OzU7NTAzODs1OzUxMzg7NTs1MjM4OzU7NTMzODs1OzU0Mzg7NTs1NTM4OzU7NTYzODs1OzU3Mzg7NTs1ODM4OzU7NTkzODs1OzYwMzg7NTs2MTM4OzU7NjIzODs1OzYzMzg7NTs2NDM4OzU7NjUzODs1OzY2Mzg7NTs2NzM4OzU7NjgzODs1OzY5Mzg7NTs3MDM4OzU7NzEzODs1OzcyMzg7NTs3MzM4OzU7NzQzODs1Ozc1Mzg7NTs3NjM4OzU7NzczODs1Ozc4Mzg7NTs3OTM4OzU7ODAzODs1OzgxMzg7NTs4MjM4OzU7ODMzODs1Ozg0Mzg7NTs4NTM4OzU7ODYzODs1Ozg3Mzg7NTs4ODM4OzU7ODkzODs1OzkwMzg7NTs5MTM4OzU7OTIzODs1OzkzMzg7NTs5NDM4OzU7OTUzODs1Ozk2Mzg7NTs5NzM4OzU7OTgzODs1Ozk5Mzg7NTsxMDAzODs1OzEwMTM4OzU7MTAyMzg7NTsxMDMzODs1OzEwNDM4OzU7MTA1Mzg7NTsxMDYzODs1OzEwNzM4OzU7MTA4Mzg7NTsxMDkzODs1OzExMDM4OzU7MTExMzg7NTsxMTIzODs1OzExMzM4OzU7MTE0Mzg7NTsxMTUzODs1OzExNjM4OzU7MTE3Mzg7NTsxMTgzODs1OzExOTM4OzU7MTIwMzg7NTsxMjEzODs1OzEyMjM4OzU7MTIzMzg7NTsxMjQzODs1OzEyNTM4OzU7MTI2Mzg7NTsxMjczODs1OzEyODM4OzU7MTI5Mzg7NTsxMzAzODs1OzEzMTM4OzU7MTMyMzg7NTsxMzMzODs1OzEzNDM4OzU7MTM1Mzg7NTsxMzYzODs1OzEzNzM4OzU7MTM4Mzg7NTsxMzkzODs1OzE0MDM4OzU7MTQxMzg7NTsxNDIzODs1OzE0MzM4OzU7MTQ0Mzg7NTsxNDUzODs1OzE0NjM4OzU7MTQ3Mzg7NTsxNDgzODs1OzE0OTM4OzU7MTUwMzg7NTsxNTEzODs1OzE1MjM4OzU7MTUzMzg7NTsxNTQzODs1OzE1NTM4OzU7MTU2Mzg7NTsxNTczODs1OzE1ODM4OzU7MTU5Mzg7NTsxNjAzODs1OzE2MTM4OzU7MTYyMzg7NTsxNjMzODs1OzE2NDM4OzU7MTY1Mzg7NTsxNjYzODs1OzE2NzM4OzU7MTY4Mzg7NTsxNjkzODs1OzE3MDM4OzU7MTcxMzg7NTsxNzIzODs1OzE3MzM4OzU7MTc0Mzg7NTsxNzUzODs1OzE3NjM4OzU7MTc3Mzg7NTsxNzgzODs1OzE3OTM4OzU7MTgwMzg7NTsxODEzODs1OzE4MjM4OzU7MTgzMzg7NTsxODQzODs1OzE4NTM4OzU7MTg2Mzg7NTsxODczODs1OzE4ODM4OzU7MTg5Mzg7NTsxOTAzODs1OzE5MTM4OzU7MTkyMzg7NTsxOTMzODs1OzE5NDM4OzU7MTk1Mzg7NTsxOTYzODs1OzE5NzM4OzU7MTk4Mzg7NTsxOTkzODs1OzIwMDM4OzU7MjAxMzg7NTsyMDIzODs1OzIwMzM4OzU7MjA0Mzg7NTsyMDUzODs1OzIwNjM4OzU7MjA3Mzg7NTsyMDgzODs1OzIwOTM4OzU7MjEwMzg7NTsyMTEzODs1OzIxMjM4OzU7MjEzMzg7NTsyMTQzODs1OzIxNTM4OzU7MjE2Mzg7NTsyMTczODs1OzIxODM4OzU7MjE5Mzg7NTsyMjAzODs1OzIyMTM4OzU7MjIyMzg7NTsyMjMzODs1OzIyNDM4OzU7MjI1Mzg7NTsyMjYzODs1OzIyNzM4OzU7MjI4Mzg7NTsyMjkzODs1OzIzMDM4OzU7MjMxMzg7NTsyMzIzODs1OzIzMzM4OzU7MjM0Mzg7NTsyMzUzODs1OzIzNjM4OzU7MjM3Mzg7NTsyMzgzODs1OzIzOTM4OzU7MjQwMzg7NTsyNDEzODs1OzI0MjM4OzU7MjQzMzg7NTsyNDQzODs1OzI0NTM4OzU7MjQ2Mzg7NTsyNDczODs1OzI0ODM4OzU7MjQ5Mzg7NTsyNTAzODs1OzI1MTM4OzU7MjUyMzg7NTsyNTMzODs1OzI1NDM4OzU7MjU1NDg7NTswNDg7NTsxNDg7NTsyNDg7NTszNDg7NTs0NDg7NTs1NDg7NTs2NDg7NTs3NDg7NTs4NDg7NTs5NDg7NTsxMDQ4OzU7MTE0ODs1OzEyNDg7NTsxMzQ4OzU7MTQ0ODs1OzE1NDg7NTsxNjQ4OzU7MTc0ODs1OzE4NDg7NTsxOTQ4OzU7MjA0ODs1OzIxNDg7NTsyMjQ4OzU7MjM0ODs1OzI0NDg7NTsyNTQ4OzU7MjY0ODs1OzI3NDg7NTsyODQ4OzU7Mjk0ODs1OzMwNDg7NTszMTQ4OzU7MzI0ODs1OzMzNDg7NTszNDQ4OzU7MzU0ODs1OzM2NDg7NTszNzQ4OzU7Mzg0ODs1OzM5NDg7NTs0MDQ4OzU7NDE0ODs1OzQyNDg7NTs0MzQ4OzU7NDQ0ODs1OzQ1NDg7NTs0NjQ4OzU7NDc0ODs1OzQ4NDg7NTs0OTQ4OzU7NTA0ODs1OzUxNDg7NTs1MjQ4OzU7NTM0ODs1OzU0NDg7NTs1NTQ4OzU7NTY0ODs1OzU3NDg7NTs1ODQ4OzU7NTk0ODs1OzYwNDg7NTs2MTQ4OzU7NjI0ODs1OzYzNDg7NTs2NDQ4OzU7NjU0ODs1OzY2NDg7NTs2NzQ4OzU7Njg0ODs1OzY5NDg7NTs3MDQ4OzU7NzE0ODs1OzcyNDg7NTs3MzQ4OzU7NzQ0ODs1Ozc1NDg7NTs3NjQ4OzU7Nzc0ODs1Ozc4NDg7NTs3OTQ4OzU7ODA0ODs1OzgxNDg7NTs4MjQ4OzU7ODM0ODs1Ozg0NDg7NTs4NTQ4OzU7ODY0ODs1Ozg3NDg7NTs4ODQ4OzU7ODk0ODs1OzkwNDg7NTs5MTQ4OzU7OTI0ODs1OzkzNDg7NTs5NDQ4OzU7OTU0ODs1Ozk2NDg7NTs5NzQ4OzU7OTg0ODs1Ozk5NDg7NTsxMDA0ODs1OzEwMTQ4OzU7MTAyNDg7NTsxMDM0ODs1OzEwNDQ4OzU7MTA1NDg7NTsxMDY0ODs1OzEwNzQ4OzU7MTA4NDg7NTsxMDk0ODs1OzExMDQ4OzU7MTExNDg7NTsxMTI0ODs1OzExMzQ4OzU7MTE0NDg7NTsxMTU0ODs1OzExNjQ4OzU7MTE3NDg7NTsxMTg0ODs1OzExOTQ4OzU7MTIwNDg7NTsxMjE0ODs1OzEyMjQ4OzU7MTIzNDg7NTsxMjQ0ODs1OzEyNTQ4OzU7MTI2NDg7NTsxMjc0ODs1OzEyODQ4OzU7MTI5NDg7NTsxMzA0ODs1OzEzMTQ4OzU7MTMyNDg7NTsxMzM0ODs1OzEzNDQ4OzU7MTM1NDg7NTsxMzY0ODs1OzEzNzQ4OzU7MTM4NDg7NTsxMzk0ODs1OzE0MDQ4OzU7MTQxNDg7NTsxNDI0ODs1OzE0MzQ4OzU7MTQ0NDg7NTsxNDU0ODs1OzE0NjQ4OzU7MTQ3NDg7NTsxNDg0ODs1OzE0OTQ4OzU7MTUwNDg7NTsxNTE0ODs1OzE1MjQ4OzU7MTUzNDg7NTsxNTQ0ODs1OzE1NTQ4OzU7MTU2NDg7NTsxNTc0ODs1OzE1ODQ4OzU7MTU5NDg7NTsxNjA0ODs1OzE2MTQ4OzU7MTYyNDg7NTsxNjM0ODs1OzE2NDQ4OzU7MTY1NDg7NTsxNjY0ODs1OzE2NzQ4OzU7MTY4NDg7NTsxNjk0ODs1OzE3MDQ4OzU7MTcxNDg7NTsxNzI0ODs1OzE3MzQ4OzU7MTc0NDg7NTsxNzU0ODs1OzE3NjQ4OzU7MTc3NDg7NTsxNzg0ODs1OzE3OTQ4OzU7MTgwNDg7NTsxODE0ODs1OzE4MjQ4OzU7MTgzNDg7NTsxODQ0ODs1OzE4NTQ4OzU7MTg2NDg7NTsxODc0ODs1OzE4ODQ4OzU7MTg5NDg7NTsxOTA0ODs1OzE5MTQ4OzU7MTkyNDg7NTsxOTM0ODs1OzE5NDQ4OzU7MTk1NDg7NTsxOTY0ODs1OzE5NzQ4OzU7MTk4NDg7NTsxOTk0ODs1OzIwMDQ4OzU7MjAxNDg7NTsyMDI0ODs1OzIwMzQ4OzU7MjA0NDg7NTsyMDU0ODs1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LGAgb3IgYH1gZXhwZWN0ZWQgaWRlbnRleHBlY3RlZCB2YWx1ZWV4cGVjdGVkIGAiYGludmFsaWQgZXNjYXBlaW52YWxpZCBudW1iZXJudW1iZXIgb3V0IG9mIHJhbmdlaW52YWxpZCB1bmljb2RlIGNvZGUgcG9pbnRjb250cm9sIGNoYXJhY3RlciAoXHUwMDAwLVx1MDAxRikgZm91bmQgd2hpbGUgcGFyc2luZyBhIHN0cmluZ2tleSBtdXN0IGJlIGEgc3RyaW5naW52YWxpZCB2YWx1ZTogZXhwZWN0ZWQga2V5IHRvIGJlIGEgbnVtYmVyIGluIHF1b3Rlc2Zsb2F0IGtleSBtdXN0IGJlIGZpbml0ZSAoZ290IE5hTiBvciArLy1pbmYpbG9uZSBsZWFkaW5nIHN1cnJvZ2F0ZSBpbiBoZXggZXNjYXBldHJhaWxpbmcgY29tbWF0cmFpbGluZyBjaGFyYWN0ZXJzdW5leHBlY3RlZCBlbmQgb2YgaGV4IGVzY2FwZXJlY3Vyc2lvbiBsaW1pdCBleGNlZWRlZCBhdCBsaW5lICBjb2x1bW4gAAAAAQAAAAAAAADA/RAACQAAAMn9EAAIAAAARXJyb3IoLCBsaW5lOiAsIGNvbHVtbjog7P0QAAYAAADy/RAACAAAAPr9EAAKAAAA8LcTAAEAAAAvcnVzdGMvNTA2OTg1NjQ5NTg3MDQ4NjEzNGRkMmNhMGIwZTI1MTYzMDhjNWMyYS9saWJyYXJ5L2FsbG9jL3NyYy9jb2xsZWN0aW9ucy9idHJlZS9uYXZpZ2F0ZS5ycwAk/hAAXwAAAMcAAAAnAAAAJP4QAF8AAAAXAgAALwAAACT+EABfAAAAogAAACQAAAAkAgAADAAAAAQAAABuAgAAbwIAAHACAABpbnZhbGlkIHR5cGU6ICwgZXhwZWN0ZWQgAAAAzP4QAA4AAADa/hAACwBBgP7DAAuLAQEAAABxAgAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc2VyZGUtd2FzbS1iaW5kZ2VuLTAuNi41L3NyYy9saWIucnMAAAj/EABiAAAANQAAAA4AAABMYXlvdXRzaXplYWxpZ24AQZT/wwALpQIBAAAAcgIAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3NtYXJ0c3RyaW5nLTEuMC4xL3NyYy9pbmxpbmUucnMAAJz/EABeAAAAKwAAACsAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9zbWFydHN0cmluZy0xLjAuMS9zcmMvYm94ZWQucnMAAAAMABEAXQAAAEEAAAAOAAAADAARAF0AAAB2AAAAJAAAAGh0dHA6aHR0cHM6AAEAAAAAAAAArAITAAEAAABNaXNhbGlnbkVycm9yAAAAAQBBxIHEAAvDAQEAAAByAgAA1CETAEkAAAC6BwAAKQAAAExheW91dEVycm9yL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc2VyZGVfanNvbi0xLjAuMTIwL3NyYy9zZXIucnMA5wARAFwAAAALBgAAEgAAAOcAEQBcAAAALggAADMAAAB1dXV1dXV1dWJ0bnVmcnV1dXV1dXV1dXV1dXV1dXV1dQAAIgBBwIPEAAsBXABB5ITEAAueD+cAEQBcAAAAIQgAAEAAAABcdGxpbmVjb2x1bW5vZmZzZXRtYXBuYW1lc21hcHBpbmdzdmVyc2lvbmZpbGVzb3VyY2Vzc291cmNlUm9vdHNvdXJjZXNDb250ZW50c2VjdGlvbnNyYW5nZU1hcHBpbmdzeF9mYWNlYm9va19vZmZzZXRzeF9tZXRyb19tb2R1bGVfcGF0aHN4X2ZhY2Vib29rX3NvdXJjZXNkZWJ1Z19pZHJhbmdlICBvdXQgb2YgYm91bmRzOiAAFQMRAAYAAAAbAxEAEAAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL2JpdHZlYy0xLjAuMS9zcmMvc2xpY2UvYXBpLnJzPAMRAFwAAACOCgAAAQAAAFcCAAAUAAAABAAAAAECAAAAAAAACAAAAAQAAABzAgAAZAYRAFgAAABPAQAAKQAAAGxvYWRCaXRTcGFuRXJyb3I8Pjo63AMRAA0AAADpAxEAAwAAAE1pc2FsaWduZWRUb29Mb25nVG9vSGlnaC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3NvdXJjZW1hcC05LjAuMC9zcmMvZW5jb2Rlci5yc2ludmFsaWQgYnl0ZQAAABQEEQBdAAAAIwAAABIAAABpbnZhbGlkIHV0ZjgUBBEAXQAAAGYAAAAhAAAAQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLy91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3d5ei0wLjUuMS9zcmMvY29tdS5yc+wEEQBUAAAAJwEAAAUAAAAwMDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MjAyMTIyMjMyNDI1MjYyNzI4MjkzMDMxMzIzMzM0MzUzNjM3MzgzOTQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NTA1MTUyNTM1NDU1NTY1NzU4NTk2MDYxNjI2MzY0NjU2NjY3Njg2OTcwNzE3MjczNzQ3NTc2Nzc3ODc5ODA4MTgyODM4NDg1ODY4Nzg4ODk5MDkxOTI5Mzk0OTU5Njk3OTg5OU51bGxQdHJFcnJvcnU4SW5jbHVkZWRFeGNsdWRlZFVuYm91bmRlZGluZGV4ICBvdXQgb2YgcmFuZ2U6ID8GEQAGAAAARQYRAA8AAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9iaXR2ZWMtMS4wLjEvc3JjL3NsaWNlLnJzZAYRAFgAAAAxBgAACQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3NvdXJjZW1hcC05LjAuMC9zcmMvYnVpbGRlci5yc0Nhbm5vdCBzZXQgc291cmNlcyBmb3IgdG9tYnN0b25lIHNvdXJjZSBpZADMBhEAXQAAAHkAAAAJAAAAzAYRAF0AAAB9AAAAHQAAAGJhZCBqc29uOiAAAHQHEQAKAAAAbGVmdG92ZXIgY3VyL3NoaWZ0IGluIHZscSBkZWNvZGWIBxEAIAAAAHZscSBkZWNvZGUgZGlkIG5vdCBwcm9kdWNlIGFueSB2YWx1ZXMAAACwBxEAJQAAAHZscSBkZWNvZGUgY2F1c2VkIGFuIG92ZXJmbG93AAAA4AcRAB0AAABnb3QgIHNlZ21lbnRzLCBleHBlY3RlZCA0IG9yIDUAAAgIEQAEAAAADAgRABoAAABiYWQgcmVmZXJlbmNlIHRvIHNvdXJjZSAjAAAAOAgRABkAAABiYWQgcmVmZXJlbmNlIHRvIG5hbWUgIwBcCBEAFwAAAGVuY291bnRlcmVkIGluY29tcGF0aWJsZSBzb3VyY2VtYXAgZm9ybWF0AAAAfAgRACkAAAB0aGUgcHJvdmlkZWQgZGF0YSBVUkwgaXMgaW52YWxpZLAIEQAgAAAAY2Fubm90IGZsYXR0ZW4gdGhlIGluZGV4ZWQgc291cmNlbWFwOiAAANgIEQAmAAAAaW52YWxpZCBtYWdpYyBudW1iZXIgZm9yIHJhbSBidW5kbGUACAkRACMAAABpbnZhbGlkIG1vZHVsZSBpbmRleCBpbiByYW0gYnVuZGxlAAA0CREAIgAAAGludmFsaWQgcmFtIGJ1bmRsZSBtb2R1bGUgZW50cnkAYAkRAB8AAABub3QgYSByYW0gYnVuZGxliAkRABAAAABpbnZhbGlkIHJhbmdlIG1hcHBpbmcgaW5kZXg6IAAAAKAJEQAdAAAAaW52YWxpZCBiYXNlNjQgY2hhcmFjdGVyOiAAAMgJEQAaAAAAJAIAAAwAAAAEAAAAJQIAACYCAAB0AgBBjJTEAAvqHAEAAAAsAgAA5NgSAGAAAAAcAAAADwAAAGF0dGVtcHQgdG8gam9pbiBpbnRvIGNvbGxlY3Rpb24gd2l0aCBsZW4gPiB1c2l6ZTo6TUFYL3J1c3RjLzUwNjk4NTY0OTU4NzA0ODYxMzRkZDJjYTBiMGUyNTE2MzA4YzVjMmEvbGlicmFyeS9hbGxvYy9zcmMvc3RyLnJzAAAAWQoRAEgAAACbAAAACgAAAFkKEQBIAAAAsgAAABYAAABjYW5ub3QgIGJpdHMgZnJvbSBhIC1iaXQgcmVnaW9uAMQKEQAHAAAATgITAAEAAADLChEADQAAANgKEQALAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvYml0dmVjLTEuMC4xL3NyYy9maWVsZC5ycwQLEQBYAAAADgIAAAUAAAByZWVudHJhbnQgaW5pdAAAbAsRAA4AAAAvcnVzdGMvNTA2OTg1NjQ5NTg3MDQ4NjEzNGRkMmNhMGIwZTI1MTYzMDhjNWMyYS9saWJyYXJ5L2NvcmUvc3JjL2NlbGwvb25jZS5ycwAAAIQLEQBNAAAAJAEAAEIAAAAAAAAABAAAAAQAAAB1AgAAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuNi9zcmMvZGxtYWxsb2MucnNhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA+PSBzaXplICsgbWluX292ZXJoZWFkAPQLEQApAAAAqAQAAAkAAABhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA8PSBzaXplICsgbWF4X292ZXJoZWFkAAD0CxEAKQAAAK4EAAANAAAAQWNjZXNzRXJyb3J1c2Ugb2Ygc3RkOjp0aHJlYWQ6OmN1cnJlbnQoKSBpcyBub3QgcG9zc2libGUgYWZ0ZXIgdGhlIHRocmVhZCdzIGxvY2FsIGRhdGEgaGFzIGJlZW4gZGVzdHJveWVkbGlicmFyeS9zdGQvc3JjL3RocmVhZC9tb2QucnMAAAUNEQAdAAAAAQMAABMAAABmYWlsZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIHRocmVhZCBJRDogYml0c3BhY2UgZXhoYXVzdGVkADQNEQA3AAAABQ0RAB0AAADUBAAADQAAAGxpYnJhcnkvc3RkL3NyYy9iYWNrdHJhY2UucnN1bnN1cHBvcnRlZCBiYWNrdHJhY2VkaXNhYmxlZCBiYWNrdHJhY2UAhA0RABwAAACKAQAAHQAAAHYCAAAQAAAABAAAAHcCAAB4AgAAZW50aXR5IG5vdCBmb3VuZHBlcm1pc3Npb24gZGVuaWVkY29ubmVjdGlvbiByZWZ1c2VkY29ubmVjdGlvbiByZXNldGhvc3QgdW5yZWFjaGFibGVuZXR3b3JrIHVucmVhY2hhYmxlY29ubmVjdGlvbiBhYm9ydGVkbm90IGNvbm5lY3RlZGFkZHJlc3MgaW4gdXNlYWRkcmVzcyBub3QgYXZhaWxhYmxlbmV0d29yayBkb3duYnJva2VuIHBpcGVlbnRpdHkgYWxyZWFkeSBleGlzdHNvcGVyYXRpb24gd291bGQgYmxvY2tub3QgYSBkaXJlY3RvcnlpcyBhIGRpcmVjdG9yeWRpcmVjdG9yeSBub3QgZW1wdHlyZWFkLW9ubHkgZmlsZXN5c3RlbSBvciBzdG9yYWdlIG1lZGl1bWZpbGVzeXN0ZW0gbG9vcCBvciBpbmRpcmVjdGlvbiBsaW1pdCAoZS5nLiBzeW1saW5rIGxvb3Apc3RhbGUgbmV0d29yayBmaWxlIGhhbmRsZWludmFsaWQgaW5wdXQgcGFyYW1ldGVyaW52YWxpZCBkYXRhdGltZWQgb3V0d3JpdGUgemVyb25vIHN0b3JhZ2Ugc3BhY2VzZWVrIG9uIHVuc2Vla2FibGUgZmlsZWZpbGVzeXN0ZW0gcXVvdGEgZXhjZWVkZWRmaWxlIHRvbyBsYXJnZXJlc291cmNlIGJ1c3lleGVjdXRhYmxlIGZpbGUgYnVzeWRlYWRsb2NrY3Jvc3MtZGV2aWNlIGxpbmsgb3IgcmVuYW1ldG9vIG1hbnkgbGlua3NpbnZhbGlkIGZpbGVuYW1lYXJndW1lbnQgbGlzdCB0b28gbG9uZ29wZXJhdGlvbiBpbnRlcnJ1cHRlZHVuc3VwcG9ydGVkdW5leHBlY3RlZCBlbmQgb2YgZmlsZW91dCBvZiBtZW1vcnlvdGhlciBlcnJvcnVuY2F0ZWdvcml6ZWQgZXJyb3JPc0tpbmRDdXN0b20gKG9zIGVycm9yIAEAAAAAAAAA5RARAAsAAADwtxMAAQAAADogbGlicmFyeS9zdGQvc3JjL3BhdGgucnMAAAAKEREAFwAAANQCAAAhAAAAChERABcAAAD7AgAALAAAAAoREQAXAAAA/QIAACYAAAAKEREAFwAAAAoDAAAnAAAAChERABcAAAAWAwAAJwAAAAoREQAXAAAAgAMAACkAAAAKEREAFwAAAIEDAAArAAAAChERABcAAACWAwAALwAAAAoREQAXAAAAjgMAAC8AAAAKEREAFwAAAJwDAAArAAAAbGlicmFyeS9zdGQvc3JjL3N5bmMvbGF6eV9sb2NrLnJzAAAAxBERACEAAACdAAAAEwAAAGNhbm5vdCByZWN1cnNpdmVseSBhY3F1aXJlIG11dGV4+BERACAAAABsaWJyYXJ5L3N0ZC9zcmMvc3lzL3N5bmMvbXV0ZXgvbm9fdGhyZWFkcy5ycyASEQAsAAAAFAAAAAkAAABsaWJyYXJ5L3N0ZC9zcmMvc3luYy9vbmNlLnJzXBIRABwAAADZAAAAFAAAADx1bmtub3duPu+/vWxpYnJhcnkvc3RkL3NyYy8uLi8uLi9iYWNrdHJhY2Uvc3JjL3N5bWJvbGl6ZS9tb2QucnOUEhEANAAAAGcBAAAwAAAAAQAAAAAAAAAIEREAAgAAACAtIAABAAAAAAAAAOgSEQADAAAAICAgICAgICAgICAgICAgICAgIGF0IE5vdEZvdW5kUGVybWlzc2lvbkRlbmllZENvbm5lY3Rpb25SZWZ1c2VkQ29ubmVjdGlvblJlc2V0SG9zdFVucmVhY2hhYmxlTmV0d29ya1VucmVhY2hhYmxlQ29ubmVjdGlvbkFib3J0ZWROb3RDb25uZWN0ZWRBZGRySW5Vc2VBZGRyTm90QXZhaWxhYmxlTmV0d29ya0Rvd25Ccm9rZW5QaXBlQWxyZWFkeUV4aXN0c1dvdWxkQmxvY2tOb3RBRGlyZWN0b3J5SXNBRGlyZWN0b3J5RGlyZWN0b3J5Tm90RW1wdHlSZWFkT25seUZpbGVzeXN0ZW1GaWxlc3lzdGVtTG9vcFN0YWxlTmV0d29ya0ZpbGVIYW5kbGVJbnZhbGlkSW5wdXRJbnZhbGlkRGF0YVRpbWVkT3V0V3JpdGVaZXJvU3RvcmFnZUZ1bGxOb3RTZWVrYWJsZUZpbGVzeXN0ZW1RdW90YUV4Y2VlZGVkRmlsZVRvb0xhcmdlUmVzb3VyY2VCdXN5RXhlY3V0YWJsZUZpbGVCdXN5RGVhZGxvY2tDcm9zc2VzRGV2aWNlc1Rvb01hbnlMaW5rc0ludmFsaWRGaWxlbmFtZUFyZ3VtZW50TGlzdFRvb0xvbmdJbnRlcnJ1cHRlZFVuc3VwcG9ydGVkVW5leHBlY3RlZEVvZk91dE9mTWVtb3J5T3RoZXJVbmNhdGVnb3JpemVkb3BlcmF0aW9uIHN1Y2Nlc3NmdWxPbmNlIGluc3RhbmNlIGhhcyBwcmV2aW91c2x5IGJlZW4gcG9pc29uZWQAAEQVEQAqAAAAb25lLXRpbWUgaW5pdGlhbGl6YXRpb24gbWF5IG5vdCBiZSBwZXJmb3JtZWQgcmVjdXJzaXZlbHl4FREAOAAAABAAAAARAAAAEgAAABAAAAAQAAAAEwAAABIAAAANAAAADgAAABUAAAAMAAAACwAAABUAAAAVAAAADwAAAA4AAAATAAAAJgAAADgAAAAZAAAAFwAAAAwAAAAJAAAACgAAABAAAAAXAAAAGQAAAA4AAAANAAAAFAAAAAgAAAAbAAAADgAAABAAAAAWAAAAFQAAAAsAAAAWAAAADQAAAAsAAAATAAAA7A0RAPwNEQANDhEAHw4RAC8OEQA/DhEAUg4RAGQOEQBxDhEAfw4RAJQOEQCgDhEAqw4RAMAOEQDVDhEA5A4RAPIOEQAFDxEAKw8RAGMPEQB8DxEAkw8RAJ8PEQCoDxEAsg8RAMIPEQDZDxEA8g8RAAAQEQANEBEAIRARACkQEQBEEBEAUhARAGIQEQB4EBEAjRARAJgQEQCuEBEAuxARAMYQEQAIAAAAEAAAABEAAAAPAAAADwAAABIAAAARAAAADAAAAAkAAAAQAAAACwAAAAoAAAANAAAACgAAAA0AAAAMAAAAEQAAABIAAAAOAAAAFgAAAAwAAAALAAAACAAAAAkAAAALAAAACwAAABcAAAAMAAAADAAAABIAAAAIAAAADgAAAAwAAAAPAAAAEwAAAAsAAAALAAAADQAAAAsAAAAFAAAADQAAABITEQAaExEAKhMRADsTEQBKExEAWRMRAGsTEQB8ExEAiBMRAJETEQChExEArBMRALYTEQDDExEAzRMRANoTEQDmExEA9xMRAAkUEQAXFBEALRQRADkUEQBEFBEATBQRAFUUEQBgFBEAaxQRAIIUEQCOFBEAmhQRAKwUEQC0FBEAwhQRAM4UEQDdFBEA8BQRAPsUEQAGFREAExURAB4VEQAjFREAAAAAAAQAAAAEAAAAeQIAAHoCAAB7AgAAJAIAAAwAAAAEAAAAJQIAAHwCAAB0AgBBgLHEAAsWAQAAACwCAAAAAAAABAAAAAQAAAB9AgBBoLHEAAvhEwEAAAB/AgAAgAIAAIECAABM1hIAYgAAABsBAAAnAAAATNYSAGIAAAA/AQAAJwAAADogYnBvcyA9IDsgbGluZWJwb3MgPSAAAAEAAAAAAAAA0BgRAAkAAADZGBEADQAAAE0CEwABAAAATNYSAGIAAABAAQAAEQAAAEzWEgBiAAAAVQEAAD8AAABM1hIAYgAAAHYBAAA/AAAAbWFwLnN0YXJ0X3BvcyA9IDsgdG90YWxfZXh0cmFfYnl0ZXMgPSA7IGJwb3MgPSAAOBkRABAAAABIGREAFgAAAF4ZEQAJAAAATNYSAGIAAADfAwAACQAAAEzWEgBiAAAAHAQAADAAAABM1hIAYgAAAAgEAAAwAAAATNYSAGIAAABJBAAAEAAAAEzWEgBiAAAACQUAADoAAABM1hIAYgAAACoFAAAjAAAATNYSAGIAAABpBQAAEAAAAE5vRmlsZUZvcgAAAAAAAAAMAAAABAAAAIICAACDAgAAbm8gZXJyb3JzIGVuY291bnRlcmVkIGV2ZW4gdGhvdWdoIGBkZWxheV9zcGFuX2J1Z2AgaXNzdWVkAAAAEBoRADkAAACcIBEAYgAAAJgBAAARAAAAZW5jb3VudGVyZWQgZXJyb3Igd2l0aCBgLVogdHJlYXRfZXJyX2FzX2J1ZwBkGhEAKwAAAJwgEQBiAAAAZQIAAA0AAABNYWNoaW5lQXBwbGljYWJsZUhhc1BsYWNlaG9sZGVyc01heWJlSW5jb3JyZWN0VW5zcGVjaWZpZWRDb2RlU3VnZ2VzdGlvbnN1YnN0aXR1dGlvbnNtc2dzaG93X2NvZGVfd2hlbl9pbmxpbmVhcHBsaWNhYmlsaXR5U3Vic3RpdHV0aW9ucGFydHNTdWJzdGl0dXRpb25QYXJ0c25pcHBldAAAAIQCAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9zd2NfY29tbW9uLTAuMzcuNC9zcmMvc3ludGF4X3Bvcy9oeWdpZW5lLnJzAABQGxEAagAAAPAAAAAdAAAAUBsRAGoAAACXAQAADQAAAFAbEQBqAAAAoAEAAC0AAABQGxEAagAAAKIBAAAgAAAAUBsRAGoAAADtAQAAMgAAAFAbEQBqAAAA7gEAACkAAABQGxEAagAAAGUCAAA2AAAATWFya01haW5IZWFkZXJNc2dIZWFkZXJNc2dMaW5lQW5kQ29sdW1uTGluZU51bWJlclF1b3RhdGlvblVuZGVybGluZVByaW1hcnlVbmRlcmxpbmVTZWNvbmRhcnlMYWJlbFByaW1hcnlMYWJlbFNlY29uZGFyeU9sZFNjaG9vbE5vdGVUZXh0Tm9TdHlsZUxldmVsSGlnaGxpZ2h0AAAAAAQAAAAEAAAAhQIAAAAAAAAEAAAABAAAAGYAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9ydXN0Yy1oYXNoLTEuMS4wL3NyYy9saWIucnMAAOgcEQBaAAAAZwAAABsAAADoHBEAWgAAAF8AAAAbAAAALi4AAAEAAAAAAAAAZB0RAAIAAAAgbWFjcm9zPp4CEwABAAAAeB0RAAgAAAA8cXVvdGUgZXhwYW5zaW9uPgAAAJAdEQARAAAAPGFub24+AACsHREABgAAADxtYWNybyBleHBhbnNpb24+AAAAvB0RABEAAAA8cHJvYy1tYWNybyBzb3VyY2UgY29kZT7YHREAGAAAAJ4CEwABAAAAoQITAAEAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9zd2NfY29tbW9uLTAuMzcuNC9zcmMvc3ludGF4X3Bvcy5yc2Fzc2VydGlvbiBmYWlsZWQ6IGxpbmVfaW5kZXggPCBzZWxmLmxpbmVzLmxlbigpIGFzIGlzaXplAAAIHhEAYgAAALgDAAAJAAAAhgIAAFByaW1hcnlTcGFuTGFiZWxCeXRlUG9zb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybQDPHhEAKAAAACQAAAAAAAAAAgAAAPgeEQAvcnVzdGMvNTA2OTg1NjQ5NTg3MDQ4NjEzNGRkMmNhMGIwZTI1MTYzMDhjNWMyYS9saWJyYXJ5L3N0ZC9zcmMvcGF0aC5ycwAQHxEARwAAAHgMAAAbAAAAEB8RAEcAAACbDAAAIQAAABAfEQBHAAAAjgwAACIAAAA1tRMASwAAAFcHAAAkAAAAYXNzZXJ0aW9uIGZhaWxlZDogc2VsZi5pc19jaGFyX2JvdW5kYXJ5KGVuZCk1tRMASwAAAFkHAAAJAAAATWVzc2FnZUxpbnRTdWJEaWFnbm9zdGljcmVuZGVyX3NwYW5FcnJvciBjb25zdHJ1Y3RlZCBidXQgbm90IGVtaXR0ZWQvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9zd2NfY29tbW9uLTAuMzcuNC9zcmMvZXJyb3JzL2RpYWdub3N0aWNfYnVpbGRlci5ycwAAABggEQBxAAAAWQEAAA0AAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9zd2NfY29tbW9uLTAuMzcuNC9zcmMvZXJyb3JzL21vZC5ycwAAnCARAGIAAABQAwAAHwAAAGFzc2VydGlvbiBmYWlsZWQ6IHN0YXJ0IDw9IGVuZC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19jb21tb24tMC4zNy40L3NyYy9pbnB1dC5ycwAuIREAXQAAAB8AAAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogc291cmNlX2ZpbGVfZW5kID49IGxhc3RfbGluZV9zdGFydC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19jb21tb24tMC4zNy40L3NyYy9zeW50YXhfcG9zL2FuYWx5emVfc291cmNlX2ZpbGUucnMAANAhEQB2AAAAKgAAAAkAAADQIREAdgAAAGoAAAAYAAAA0CERAHYAAABqAAAALQAAACNfX1BVUkVfXwBBjMXEAAv9BgEAAACHAgAAiAIAAIkCAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9zd2NfY29tbW9uLTAuMzcuNC9zcmMvY29tbWVudHMucnOcIhEAYAAAAKcBAAAWAAAAnCIRAGAAAACsAQAADgAAAJwiEQBgAAAAswEAACcAAACcIhEAYAAAAL8BAAAyAAAAnCIRAGAAAADHAQAAFgAAAJwiEQBgAAAAywEAABYAAACcIhEAYAAAAM8BAAAXAAAAnCIRAGAAAADUAQAADgAAAJwiEQBgAAAA2wEAACgAAACcIhEAYAAAAOcBAAAzAAAA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NmYxN2QyMmJiYTE1MDAxZi9zd2NfZWNtYV9wYXJzZXItMC4xNDkuMC9zcmMvbGV4ZXIvbW9kLnJzAGguEQBnAAAArAAAABkAAAB8fHx8fCAAAGguEQBnAAAApgEAABYAAAAyIGhleCBjaGFyYWN0ZXJzPT09PWguEQBnAAAAmAIAABwAAAA8PDw8PCA+Pj4+IABoLhEAZwAAAMoCAAAWAAAANCBoZXggY2hhcmFjdGVyczEtNiBoZXggY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgMCB0byAxMEZGRkYuMS02IGhleCBjaGFyYWN0ZXJzAABoLhEAZwAAAPcDAAAgAAAAaC4RAGcAAAAqBQAAHgAAAAAAAAAIAAAABAAAAJACAABKU1hBdHRySlNYRW1wdHlFeHBySWZTdG10Rm9yU3RtdENhcGFjaXR5T3ZlcmZsb3dBbGxvY0VycmxheW91dEV4cHJTdG10V2l0aFN0bXRQYXJhbXBhdEJyZWFrU3RtdEVtcHR5U3RtdEZvckluU3RtdEZvck9mU3RtdFRocm93U3RtdFdoaWxlU3RtdFJldHVyblN0bXRTd2l0Y2hDYXNlU3dpdGNoU3RtdGRpc2NyaW1pbmFudGNhc2VzSlNYRXhwckNvbnRhaW5lckNhdGNoQ2xhdXNlRG9XaGlsZVN0bXRMYWJlbGVkU3RtdC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3NtYWxsdmVjLTEuMTMuMi9zcmMvbGliLnJzTW9kdWxlRGVjbFN0bXRDb250aW51ZVN0bXREZWJ1Z2dlclN0bXRKU1hTcHJlYWRDaGlsZEpTWENsb3NpbmdFbGVtZW50bnNKU1hDbG9zaW5nRnJhZ21lbnRKU1hPcGVuaW5nRnJhZ21lbnSkMBEAWQAAAFIBAAAuAAAApDARAFkAAADOBAAADgAAAGFzc2VydGlvbiBmYWlsZWQ6IGluZGV4IDwgbGVuAAAApDARAFkAAABIBQAADQAAAGFzc2VydGlvbiBmYWlsZWQ6IG5ld19jYXAgPj0gbGVupDARAFkAAACZBAAADQBBpOTEAAsBAQBBweTEAAs6AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBhOXEAAsCkQIAQYjmxAAL0RGSAgAAkwIAAJQCAACVAgAAlgIAAJcCAACTAgAAmAIAAJkCAACaAgAAmwIAAJwCAACdAgAAngIAAJ8CAACgAgAAoQIAAKECAAChAgAAoQIAAKECAAChAgAAoQIAAKECAAChAgAAogIAAKMCAACkAgAApQIAAKQCAACmAgAApwIAAJUCAACVAgAAlQIAAJUCAACVAgAAlQIAAJUCAACVAgAAlQIAAJUCAACVAgAAlQIAAJUCAACVAgAAlQIAAJUCAACVAgAAlQIAAJUCAACVAgAAlQIAAJUCAACVAgAAlQIAAJUCAACVAgAAqAIAAJUCAACpAgAAqgIAAJUCAACrAgAArAIAAK0CAACuAgAArwIAALACAACxAgAAsgIAAJUCAACzAgAAlQIAALQCAAC1AgAAtgIAALcCAAC4AgAAuQIAAJUCAAC6AgAAuwIAALwCAAC9AgAAvgIAAL8CAACVAgAAwAIAAJUCAADBAgAAwgIAAMMCAADEAgAAxQIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIAAMYCAADGAgAAxgIA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XoERAAgAAACXQhEACgAAAL4FEwAHAAAAVHNUeXBlUGFyYW1leHByX25hbWVUc1VuaW9uVHlwZXR5cGVzVHNFbnVtTWVtYmVyaW5pdGFyZ3F1YWxpZmllcgAAAAABAAAAAQAAAOcCAADoAgAAMAAAAAgAAADpAgAAbmFtZV90eXBlAAAAzxMTAAQAAACHAxMACAAAAKFBEQAKAAAAPEMRAAkAAADXghEACAAAABSDEQAIAAAAVHNUcGxMaXRUeXBlUHVibGljUHJvdGVjdGVkUHJpdmF0ZVRydWVQbHVzTWludXNUc05vbk51bGxFeHByVHNDYWxsU2lnbmF0dXJlRGVjbFRzQ29uc3RydWN0U2lnbmF0dXJlRGVjbFRzUHJvcGVydHlTaWduYXR1cmVUc0dldHRlclNpZ25hdHVyZVRzU2V0dGVyU2lnbmF0dXJlVHNNZXRob2RTaWduYXR1cmVUc0luZGV4U2lnbmF0dXJlVHNUdXBsZUVsZW1lbnRsYWJlbHR5b3BUc0ludGVyZmFjZUJvZHlUc1NhdGlzZmllc0V4cHJwYXJhbV9uYW1laXNfc3RhdGljY2hlY2tfdHlwZWV4dGVuZHNfdHlwZXRydWVfdHlwZWZhbHNlX3R5cGVUc0NvbnN0cnVjdG9yVHlwZWNvbXB1dGVkVHNBbnlLZXl3b3JkVHNVbmtub3duS2V5d29yZFRzTnVtYmVyS2V5d29yZFRzT2JqZWN0S2V5d29yZFRzQm9vbGVhbktleXdvcmRUc0JpZ0ludEtleXdvcmRUc1N0cmluZ0tleXdvcmRUc1N5bWJvbEtleXdvcmRUc1ZvaWRLZXl3b3JkVHNVbmRlZmluZWRLZXl3b3JkVHNOdWxsS2V5d29yZFRzTmV2ZXJLZXl3b3JkVHNJbnRyaW5zaWNLZXl3b3JkAAAAAAAABAAAAAQAAADBAQAAzxMTAAQAAAD6QBEAAwAAALdEEQAIAAAA14IRAAgAAACAfxEABgAAABSDEQAIAAAAiH4RAAsAAABUc0V4cHJXaXRoVHlwZUFyZ3NUc0ludGVyc2VjdGlvblR5cGVvYmpfdHlwZWluZGV4X3R5cGUAAM8TEwAEAAAAhwMTAAgAAAD6QBEAAwAAALdEEQAIAAAA14IRAAgAAAAUgxEACAAAAFRzTmFtZXNwYWNlRXhwb3J0RGVjbHN0cnVjdCBUc1N5bnRheFVuZXhwZWN0ZWQgZW9mL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc3djX2VjbWFfcGFyc2VyLTAuMTQ5LjAvc3JjL2Vycm9yLnJzRGVjbGFyYXRpb24gaXMgbm90IGFsbG93ZWRVc2luZyBkZWNsYXJhdGlvbiBpcyBub3QgYWxsb3dlZFVzaW5nIGRlY2xhcmF0aW9uIGlzIG5vdCBhbGxvd2VkIGluIGZvci1pbiBsb29wVXNpbmcgZGVjbGFyYXRpb24gaXMgbm90IGVuYWJsZWQuIFNldCBqc2MucGFyc2VyLmV4cGxpY2l0UmVzb3VyY2VNYW5hZ2VtZW50IHRvIHRydWVVc2luZyBkZWNsYXJhdGlvbiBvbmx5IGFsbG93cyBpZGVudGlmaWVyc1VzaW5nIGRlY2xhcmF0aW9uIHJlcXVpcmVzIGluaXRpYWxpemVycHJpdmF0ZSBuYW1lcyBhcmUgbm90IGFsbG93ZWQgaW4gaW50ZXJmYWNlSW52YWxpZCBgc3VwZXIoKWBJbnZhbGlkIGFjY2VzcyB0byBzdXBlckluZGV4IHN1cGVyIHdpdGggcHJpdmF0ZSBuYW1lIGlzIG5vdCBhbGxvd2VkJ25ldy50YXJnZXQnIGlzIG9ubHkgYWxsb3dlZCBpbiB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLCBmdW5jdGlvbiBleHByZXNzaW9uLCBvciBjbGFzcy5JbXBvcnQgaXMgbm90IGFsbG93ZWQgaGVyZUFuIGFycm93IGZ1bmN0aW9uIGlzIG5vdCBhbGxvd2VkIGhlcmVgZXhwb3J0YCBpcyBub3QgYWxsb3dlZCBoZXJlQSBnZXR0ZXIgb3IgYSBzZXR0ZXIgY2Fubm90IGJlIHJlYWRvbmx5QSBnZXR0ZXIgb3IgYSBzZXR0ZXIgY2Fubm90IGJlIG9wdGlvbmFsQSBgZ2V0YCBhY2Nlc3NvciBjYW5ub3QgaGF2ZSBwYXJhbWV0ZXJzQSBgc2V0YCBhY2Nlc3NvciBtdXN0IGhhdmUgZXhhY3RseSBvbmUgcGFyYW1ldGVydG9wIGxldmVsIGF3YWl0IGlzIG9ubHkgYWxsb3dlZCBpbiBtb2R1bGVMZWdhY3kgZGVjaW1hbCBlc2NhcGUgaXMgbm90IHBlcm1pdHRlZCBpbiBzdHJpY3QgbW9kZUxlZ2FjeSBvY3RhbCBlc2NhcGUgaXMgbm90IHBlcm1pdHRlZCBpbiBzdHJpY3QgbW9kZUludmFsaWQgY2hhcmFjdGVyIGluIGlkZW50aWZpZXJhIGJpbmFyeWFuIG9jdGFsYSBkZWNpbWFsYSBoZXhhZGVjaW1hbEV4cGVjdGVkICBkaWdpdAAAAIpKEQAJAAAAk0oRAAYAAABmRhEAYwAAAEIBAAAaAAAAU2V0dGVyIHNob3VsZCBoYXZlIGV4YWN0bHkgb25lIHBhcmFtZXRlclJlc3QgcGF0dGVybiBpcyBub3QgYWxsb3dlZCBpbiBzZXR0ZXJVbnRlcm1pbmF0ZWQgYmxvY2sgY29tbWVudFVudGVybWluYXRlZCBzdHJpbmcgY29uc3RhbnRFeHBlY3RlZCB1bmljb2RlIGVzY2FwZVVuZXhwZWN0ZWQgZXNjYXBlIHNlcXVlbmNlIGluIHJlc2VydmVkIHdvcmQ6IABWSxEALQAAAFVudGVybWluYXRlZCByZWdleHAgbGl0ZXJhbFVudGVybWluYXRlZCB0ZW1wbGF0ZUlkZW50aWZpZXIgY2Fubm90IGZvbGxvdyBudW1iZXJVbmV4cGVjdGVkIGNoYXJhY3RlciDbSxEAFQAAAEludmFsaWQgc3RyaW5nIGVzY2FwZUludmFsaWQgdW5pY29kZSBlc2NhcGVCYWQgY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZSwgZXhwZWN0ZWQgACNMEQAoAAAARXhwZWN0ZWQgKywgLSBvciBkZWNpbWFsIGRpZ2l0IGFmdGVyIGVMZWdhY3kgY29tbWVudHMgY2Fubm90IGJlIHVzZWQgaW4gbW9kdWxlIGNvZGVgIGNhbm5vdCBiZSB1c2VkIGFzIGFuIGlkZW50aWZpZXIgaW4gc3RyaWN0IG1vZGUASQMTAAEAAACnTBEAMAAAAGBhd2FpdGAgY2Fubm90IGJlIHVzZWQgYXMgYW4gaWRlbnRpZmllciBpbiBhbiBhc3luYyBjb250ZXh0J2V2YWwnIGFuZCAnYXJndW1lbnRzJyBjYW5ub3QgYmUgdXNlZCBhcyBhIGJpbmRpbmcgaWRlbnRpZmllciBpbiBzdHJpY3QgbW9kZSdhcmd1bWVudHMnIGlzIG9ubHkgYWxsb3dlZCBpbiBmdW5jdGlvbnMgYW5kIGNsYXNzIG1ldGhvZHNJbGxlZ2FsICd1c2Ugc3RyaWN0JyBkaXJlY3RpdmUgaW4gZnVuY3Rpb24gd2l0aCBub24tc2ltcGxlIHBhcmFtZXRlciBsaXN0LicqKicgY2Fubm90IGJlIGFwcGxpZWQgdG8gdW5hcnkvYXdhaXQgZXhwcmVzc2lvbi5VbmV4cGVjdGVkIHRva2VuICcjJ0xpbmVCcmVhayBjYW5ub3QgZm9sbG93ICd0aHJvdydVbmV4cGVjdGVkIGxpbmUgYnJlYWsgYmV0d2VlbiBhcnJvdyBoZWFkIGFuZCBhcnJvd1VuZXhwZWN0ZWQgdG9rZW4gYGAuIEV4cGVjdGVkIACJThEAEgAAAJtOEQAMAAAAICwgb3IgAAC7ThEAAwAAACBvciBVbmV4cGVjdGVkIHRva2VuLiBEaWQgeW91IG1lYW4gAMxOEQAfAAAAdwMTAAEAAABjYW5ub3QgaW1wb3J0IGFzIHJlc2VydmVkIHdvcmRhc3NpZ25tZW50IHByb3BlcnR5IGlzIGludmFsaWQgc3ludGF4RXhwZWN0ZWQgJycsIGdvdCAnJwAAP08RAAoAAABJTxEACAAAAFFPEQABAAAARXhwZWN0ZWQgJzsnLCAnfScgb3IgPGVvZj5hd2FpdCogaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBhc3luYyBmdW5jdGlvbnMgcHJvcG9zYWwuIFVzZSBQcm9taXNlLmFsbCgpIGluc3RlYWQuQ2Fubm90IHVzZSBhIHJlc2VydmVkIHdvcmQgYXMgYSBzaG9ydGhhbmQgcHJvcGVydHlOdWxsaXNoIGNvYWxlc2Npbmcgb3BlcmF0b3IoPz8pIHJlcXVpcmVzIHBhcmVucyB3aGVuIG1peGluZyB3aXRoIGxvZ2ljYWwgb3BlcmF0b3JzQSBzd2l0Y2ggYmxvY2sgY2Fubm90IGhhdmUgbXVsdGlwbGUgZGVmYXVsdHNUcmFpbGluZyBjb21tYSBpc24ndCBwZXJtaXR0ZWQgYWZ0ZXIgYSByZXN0IGVsZW1lbnRSZXN0IGVsZW1lbnQgbXVzdCBiZSBmaW5hbCBlbGVtZW50UGFyZW50aGVzaXplZCBleHByZXNzaW9uIGNhbm5vdCBjb250YWluIHNwcmVhZCBvcGVyYXRvclBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbiBjYW5ub3QgYmUgZW1wdHlOb3QgYSBwYXR0ZXJuTm90IGFuIGV4cHJlc3Npb25DYW5ub3QgYXNzaWduIHRvIHRoaXNJbnZhbGlkIGFzc2lnbm1lbnQgdGFyZ2V0RXhwZWN0ZWQgaWRlbnRFeHBlY3RlZCAnOycgb3IgbGluZSBicmVha0xhYmVsICBpcyBhbHJlYWR5IGRlY2xhcmVkAAAAs1ERAAYAAAC5UREAFAAAAEFuIGFzeW5jIGZ1bmN0aW9uIGNhbm5vdCBiZSBnZW5lcmF0b3InaW1wb3J0JywgYW5kICdleHBvcnQnIGFyZSBub3QgcGVybWl0dGVkIGhlcmUnaW1wb3J0JywgYW5kICdleHBvcnQnIGNhbm5vdCBiZSB1c2VkIG91dHNpZGUgb2YgbW9kdWxlIGNvZGUnaW1wb3J0Lm1ldGEnIGNhbm5vdCBiZSB1c2VkIG91dHNpZGUgb2YgbW9kdWxlIGNvZGUuRGVzdHJ1Y3R1cmluZyBiaW5kaW5ncyByZXF1aXJlIGluaXRpYWxpemVyc1dpdGggc3RhdGVtZW50IGFyZSBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZVJldHVybiBzdGF0ZW1lbnQgaXMgbm90IGFsbG93ZWQgaGVyZUV4cGVjdGVkIG9uZSB2YXJpYWJsZSBiaW5kaW5nVW5leHBlY3RlZCBpbml0aWFsaXplciBpbiBmb3IgaW4vb2YgbG9vcEdlbmVyYXRvciBvciBhc3luYyBmdW5jdGlvbiBjYW5ub3QgYmUgbGFiZWxsZWRGdW5jdGlvbiBjYW5ub3QgYmUgbGFiZWxsZWQgaW4gc3RyaWN0IG1vZGUneWllbGQnIGNhbm5vdCBiZSB1c2VkIGFzIGEgcGFyYW1ldGVyIHdpdGhpbiBnZW5lcmF0b3JgYXdhaXRgIGV4cHJlc3Npb25zIGNhbm5vdCBiZSB1c2VkIGluIGEgcGFyYW1ldGVyIGluaXRpYWxpemVyLmZvciBhd2FpdCBzeW50YXggaXMgdmFsaWQgb25seSBmb3IgZm9yLW9mIHN0YXRlbWVudGF3YWl0IGlzbid0IGFsbG93ZWQgaW4gbm9uLWFzeW5jIGZ1bmN0aW9uVW50ZXJtaW5hdGVkIEpTWCBjb250ZW50c0pTWCBhdHRyaWJ1dGVzIG11c3Qgb25seSBiZSBhc3NpZ25lZCBhIG5vbi1lbXB0eSBleHByZXNzaW9uSlNYIHZhbHVlIHNob3VsZCBiZSBlaXRoZXIgYW4gZXhwcmVzc2lvbiBvciBhIHF1b3RlZCBKU1ggdGV4dEV4cGVjdGVkIGNvcnJlc3BvbmRpbmcgSlNYIGNsb3NpbmcgdGFnIGZvciA8PkV4cGVjdGVkIGNvcnJlc3BvbmRpbmcgSlNYIGNsb3NpbmcgdGFnIGZvciA8AAAASVURACwAAAChAhMAAQAAAExlYWRpbmcgZGVjb3JhdG9ycyBtdXN0IGJlIGF0dGFjaGVkIHRvIGEgY2xhc3MgZGVjbGFyYXRpb25Vc2luZyB0aGUgZXhwb3J0IGtleXdvcmQgYmV0d2VlbiBhIGRlY29yYXRvciBhbmQgYSBjbGFzcyBpcyBub3QgYWxsb3dlZC4gUGxlYXNlIHVzZSBgZXhwb3J0IEBkZWMgY2xhc3NgIGluc3RlYWQuQSByZXF1aXJlZCBlbGVtZW50IGNhbm5vdCBmb2xsb3cgYW4gb3B0aW9uYWwgZWxlbWVudC5UeXBlc2NyaXB0IHBhcmFtZXRlciBwcm9wZXJ0eSBtdXN0IGJlIGFuIGlkZW50aWZpZXIgb3IgYXNzaWdubWVudCBwYXR0ZXJuVW5leHBlY3RlZCBzcGFjZSBiZXR3ZWVuICMgYW5kIGlkZW50aWZpZXJDb25zdHJ1Y3RvciBjYW4ndCBiZSBhbiBhc3luYyBmdW5jdGlvbkNsYXNzZXMgbWF5IG5vdCBoYXZlIGEgbm9uLXN0YXRpYyBmaWVsZCBuYW1lZCAnY29uc3RydWN0b3InQ2xhc3NlcyBjYW4ndCBoYXZlIGEgcHJpdmF0ZSBmaWVsZCBuYW1lZCAnI2NvbnN0cnVjdG9yJy4nIG1vZGlmaWVyIGNhbm5vdCBiZSB1c2VkIHdpdGggYSBwcml2YXRlIGlkZW50aWZpZXIAAABRTxEAAQAAAHJXEQAzAAAAQ2xhc3MgY29uc3RydWN0b3IgY2FuJ3QgYmUgYW4gYWNjZXNzb3IuQSBtZXRob2QgY2Fubm90IGJlIHJlYWRvbmx5QSBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgZ2VuZXJhdG9yQSBjbGFzcyBjYW4gb25seSBoYXZlIG9uZSBjb25zdHJ1Y3RvckEgYmluZGluZyBwYXR0ZXJuIHBhcmFtZXRlciBjYW5ub3QgYmUgb3B0aW9uYWwgaW4gYW4gaW1wbGVtZW50YXRpb24gc2lnbmF0dXJlLlN1cGVyIGNhbGwgY2Fubm90IGJlIG9wdGlvbmFsQ29uc3RydWN0b3IgaW4vYWZ0ZXIgYW4gb3B0aW9uYWwgY2hhaW5pbmcgaXMgbm90IGFsbG93ZWQuVGFnZ2VkIHRlbXBsYXRlIGxpdGVyYWwgaXMgbm90IGFsbG93ZWQgaW4gb3B0aW9uYWwgY2hhaW4uVHJhaWxpbmcgY29tbWEgaXMgZGlzYWxsb3dlZCBpbnNpZGUgaW1wb3J0KC4uLikgYXJndW1lbnRzZXhwb3J0IGRlZmF1bHQgc3RhdGVtZW50cyByZXF1aXJlZCBmcm9tICcuLi4nO2AgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBgZnJvbWAgY2xhdXNlAABJAxMAAQAAAIRZEQAmAAAAYC4uLmAgbXVzdCBiZSBmb2xsb3dlZCBieSBhbiBpZGVudGlmaWVyIGluIGRlY2xhcmF0aW9uIGNvbnRleHRzQSBudW1lcmljIHNlcGFyYXRvciBpcyBvbmx5IGFsbG93ZWQgYmV0d2VlbiB0d28gZGlnaXRzQSBzdHJpbmcgbGl0ZXJhbCBjYW5ub3QgYmUgdXNlZCBhcyBhbiBpbXBvcnRlZCBiaW5kaW5nLgotIERpZCB5b3UgbWVhbiBgaW1wb3J0IHsgIiIgYXMgZm9vIH1gPwAxWhEAUgAAAINaEQAMAAAAQSBzdHJpbmcgbGl0ZXJhbCBjYW5ub3QgYmUgdXNlZCBhcyBhbiBleHBvcnRlZCBiaW5kaW5nIHdpdGhvdXQgYGZyb21gLidjb25zdCcgZGVjbGFyYXRpb25zIG11c3QgYmUgaW5pdGlhbGl6ZWREdXBsaWNhdGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFnICcnLg5bEQAkAAAAMlsRAAIAAABVbmtub3duIHJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFncy5FeHBlY3RlZCBhbiBpZGVudGlmaWVyRXhwZWN0ZWQgYSBzZW1pY29sb25UcmFpbGluZyBjb21tYSBpcyBub3QgYWxsb3dlZEEgcmVzdCBwYXJhbWV0ZXIgbXVzdCBiZSBsYXN0IGluIGEgcGFyYW1ldGVyIGxpc3RQYXJhbWV0ZXIgY2Fubm90IGhhdmUgcXVlc3Rpb24gbWFyayBhbmQgaW5pdGlhbGl6ZXInIG1vZGlmaWVyIG11c3QgcHJlY2VkZSAnJyBtb2RpZmllci5RTxEAAQAAABBcEQAZAAAAKVwRAAsAAAAnIG1vZGlmaWVyIGFscmVhZHkgc2Vlbi5RTxEAAQAAAExcEQAYAAAAYGRlY2xhcmVgIG1vZGlmaWVyIGNhbm5vdCBhcHBlYXIgb24gY2xhc3MgZWxlbWVudHMgb2YgdGhpcyBraW5kYGRlY2xhcmVgIG1vZGlmaWVyIG5vdCBhbGxvd2VkIGZvciBjb2RlIGFscmVhZHkgaW4gYW4gYW1iaWVudCBjb250ZXh0YGFzeW5jYCBtb2RpZmllciBjYW5ub3QgYmUgdXNlZCBoZXJlQSByZXN0IHBhcmFtZXRlciBjYW5ub3QgYmUgb3B0aW9uYWxBIHJlc3QgcGFyYW1ldGVyIGNhbm5vdCBoYXZlIGFuIGluaXRpYWxpemVyanNjLnRhcmdldCBzaG91bGQgYmUgZXM1IG9yIHVwcGVyIHRvIHVzZSBnZXR0ZXIgLyBzZXR0ZXJMZWdhY3kgb2N0YWwgbGl0ZXJhbHMgYXJlIG5vdCBhdmFpbGFibGUgd2hlbiB0YXJnZXRpbmcgRUNNQVNjcmlwdCA1IGFuZCBoaWdoZXInIG1vZGlmaWVyIGNhbm5vdCBhcHBlYXIgb24gYSBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbgAAAFFPEQABAAAA8F0RADUAAABUeXBlIHBhcmFtZXRlcnMgY2Fubm90IGFwcGVhciBvbiBhIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uQW4gaW5kZXggc2lnbmF0dXJlIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBwYXJhbWV0ZXJUeXBlIHBhcmFtZXRlciBsaXN0IGNhbm5vdCBiZSBlbXB0eUludmFsaWQgdXNlIG9mICdhcmd1bWVudHMnIGluIHN0cmljdCBtb2RlJ2RlbGV0ZScgY2Fubm90IGJlIGNhbGxlZCBvbiBhbiBpZGVudGlmaWVyIGluIHN0cmljdCBtb2RlQSAnYnJlYWsnIHN0YXRlbWVudCBjYW4gb25seSBiZSB1c2VkIHdpdGhpbiBhbiBlbmNsb3NpbmcgaXRlcmF0aW9uIG9yIHN3aXRjaCBzdGF0ZW1lbnRUaGUgbGVmdC1oYW5kIHNpZGUgb2YgYSBgZm9yLi4ub2ZgIHN0YXRlbWVudCBtYXkgbm90IGJlIGBhc3luY2BKdW1wIHRhcmdldCBjYW5ub3QgY3Jvc3MgZnVuY3Rpb24gYm91bmRhcnlFeHByZXNzaW9uIGV4cGVjdGVkdHlwZSBleHBlY3RlZER1cGxpY2F0ZSBsYWJlbEEgJ2NvbnRpbnVlJyBzdGF0ZW1lbnQgY2FuIG9ubHkganVtcCB0byBhIGxhYmVsIG9mIGFuIGVuY2xvc2luZyBpdGVyYXRpb24gc3RhdGVtZW50QSAnYnJlYWsnIHN0YXRlbWVudCBjYW4gb25seSBqdW1wIHRvIGEgbGFiZWwgb2YgYW4gZW5jbG9zaW5nIHN0YXRlbWVudFZhcmlhYmxlIGRlY2xhcmF0aW9uIGxpc3QgY2Fubm90IGJlIGVtcHR5bGl0ZXJhbCBpbiBhbiBpbXBvcnQgdHlwZSBzaG91bGQgYmUgc3RyaW5nIGxpdGVyYWxBbiBvYmplY3QgbWVtYmVyIGNhbm5vdCBiZSBkZWNsYXJlZCBvcHRpb25hbENvbXB1dGVkIHByb3BlcnR5IG5hbWVzIGFyZSBub3QgYWxsb3dlZCBpbiBlbnVtc0EgY29tbWEgZXhwcmVzc2lvbiBpcyBub3QgYWxsb3dlZCBpbiBhIGNvbXB1dGVkIHByb3BlcnR5IG5hbWVgZXh0ZW5kc2AgY2xhdXNlIGFscmVhZHkgc2Vlbi4nZXh0ZW5kcycgY2xhdXNlIG11c3QgcHJlY2VkZSAnaW1wbGVtZW50cycgY2xhdXNlLkNsYXNzZXMgY2FuIG9ubHkgZXh0ZW5kIGEgc2luZ2xlIGNsYXNzYGltcGxlbWVudHNgIGNsYXVzZSBhbHJlYWR5IHNlZW5BbiBpbXBsZW1lbnRhdGlvbiBjYW5ub3QgYmUgZGVjbGFyZWQgaW4gYW1iaWVudCBjb250ZXh0c01vZGlmaWVycyBjYW5ub3QgYXBwZWFyIGhlcmVNZXJnZSBjb25mbGljdCBtYXJrZXIgZW5jb3VudGVyZWQuVHlwZSBhbm5vdGF0aW9uIGNhbm5vdCBhcHBlYXIgb24gYSBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbkNhdGNoIGNsYXVzZSB2YXJpYWJsZSBjYW5ub3QgaGF2ZSBhIHR5cGUgYW5ub3RhdGlvbmBhYnN0cmFjdGAgbW9kaWZpZXIgY2FuIG9ubHkgYXBwZWFyIG9uIGEgY2xhc3Mgb3IgbWV0aG9kIGRlY2xhcmF0aW9uJyBtb2RpZmllciBjYW5ub3QgYmUgdXNlZCB3aXRoICcAAABRTxEAAQAAAGFjEQAgAAAAKVwRAAsAAABBYnN0cmFjdCBtZXRob2RzIGNhbiBvbmx5IGFwcGVhciB3aXRoaW4gYW4gYWJzdHJhY3QgY2xhc3MuQWJzdHJhY3QgbWV0aG9kIGNhbm5vdCBoYXZlIGFuIGltcGxlbWVudGF0aW9uLkFic3RyYWN0IHByb3BlcnR5IGNhbm5vdCBoYXZlIGFuIGluaXRpYWxpemVyLicgbW9kaWZpZXIgY2Fubm90IGFwcGVhciBvbiBhIHR5cGUgcGFyYW1ldGVyAAAAUU8RAAEAAAAxZBEALAAAACcgbW9kaWZpZXIgY2FuIG9ubHkgYXBwZWFyIG9uIGEgdHlwZSBwYXJhbWV0ZXIgb2YgYSBjbGFzcywgaW50ZXJmYWNlIG9yIHR5cGUgYWxpYXMAAFFPEQABAAAAcGQRAFIAAAAnIG1vZGlmaWVyIGNhbiBvbmx5IGFwcGVhciBvbiBhIHR5cGUgcGFyYW1ldGVyIG9mIGEgZnVuY3Rpb24sIG1ldGhvZCBvciBjbGFzcwAAAFFPEQABAAAA1GQRAE0AAABUaGUgJ3R5cGUnIG1vZGlmaWVyIGNhbm5vdCBiZSB1c2VkIG9uIGEgbmFtZWQgaW1wb3J0IHdoZW4gJ2ltcG9ydCB0eXBlJyBpcyB1c2VkIG9uIGl0cyBpbXBvcnQgc3RhdGVtZW50LlRoZSAndHlwZScgbW9kaWZpZXIgY2Fubm90IGJlIHVzZWQgb24gYSBuYW1lZCBleHBvcnQgd2hlbiAnZXhwb3J0IHR5cGUnIGlzIHVzZWQgb24gaXRzIGV4cG9ydCBzdGF0ZW1lbnQuQSBwYXJhbWV0ZXIgcHJvcGVydHkgaXMgb25seSBhbGxvd2VkIGluIGEgY29uc3RydWN0b3IgaW1wbGVtZW50YXRpb25BIHBhcmFtZXRlciBpbml0aWFsaXplciBpcyBvbmx5IGFsbG93ZWQgaW4gYSBmdW5jdGlvbiBvciBjb25zdHJ1Y3RvciBpbXBsZW1lbnRhdGlvblRoZSBsZWZ0LWhhbmQgc2lkZSBvZiBhbiBhc3NpZ25tZW50IGV4cHJlc3Npb24gbXVzdCBiZSBhIHZhcmlhYmxlIG9yIGEgcHJvcGVydHkgYWNjZXNzLlRoZSAnd2l0aCcgc3RhdGVtZW50IGlzIG5vdCBzdXBwb3J0ZWQuIEFsbCBzeW1ib2xzIGluIGEgJ3dpdGgnIGJsb2NrIHdpbGwgaGF2ZSB0eXBlICdhbnknLkludmFsaWQgY2xhc3MgbmFtZWludGVyZmFjZSBuYW1lIGlzIGludmFsaWRBbiBlbnVtIG1lbWJlciBjYW5ub3QgaGF2ZSBhIG51bWVyaWMgbmFtZVRoZSBsZWZ0LWhhbmQgc2lkZSBvZiBhICdmb3IuLi5vZicgc3RhdGVtZW50IGNhbm5vdCB1c2UgYSB0eXBlIGFubm90YXRpb25UaGUgbGVmdC1oYW5kIHNpZGUgb2YgYSAnZm9yLi4uaW4nIHN0YXRlbWVudCBjYW5ub3QgYmUgYSBkZXN0cnVjdHVyaW5nIHBhdHRlcm5BbiBpbnRlcmZhY2UgY2FuIG9ubHkgZXh0ZW5kIGFuIGlkZW50aWZpZXIvcXVhbGlmaWVkLW5hbWUgd2l0aCBvcHRpb25hbCB0eXBlIGFyZ3VtZW50cy5UaGUgb3BlcmFuZCBvZiBhIGRlbGV0ZSBvcGVyYXRvciBtdXN0IGJlIGEgcHJvcGVydHkgcmVmZXJlbmNlLlRoaXMgbWVtYmVyIGNhbm5vdCBoYXZlIGFuICdvdmVycmlkZScgbW9kaWZpZXIgYmVjYXVzZSBpdHMgY29udGFpbmluZyBjbGFzcyBkb2VzIG5vdCBleHRlbmQgYW5vdGhlciBjbGFzcy5EZWNvcmF0b3JzIG1heSBub3QgYXBwZWFyIGFmdGVyIGBleHBvcnRgIG9yIGBleHBvcnQgZGVmYXVsdGAgaWYgdGhleSBhbHNvIGFwcGVhciBiZWZvcmUgYGV4cG9ydGAuQW4gYWNjZXNzaWJpbGl0eSBtb2RpZmllciBjYW5ub3QgYmUgdXNlZCB3aXRoIGEgcHJpdmF0ZSBpZGVudGlmaWVyLlR5cGUgYW5ub3RhdGlvbnMgbXVzdCBjb21lIGJlZm9yZSBkZWZhdWx0IGFzc2lnbm1lbnRzVHlwZXNjcmlwdCBub24tbnVsbCBhc3NlcnRpb24gb3BlcmF0b3IgaXMgbm90IGFsbG93ZWQgd2l0aCAnAA9qEQA8AAAAUU8RAAEAAABUaGlzIHN5bnRheCBpcyByZXNlcnZlZCBpbiBmaWxlcyB3aXRoIHRoZSAubXRzIG9yIC5jdHMgZXh0ZW5zaW9uLiBVc2UgYW4gYGFzYCBleHByZXNzaW9uIGluc3RlYWQuVGhpcyBzeW50YXggaXMgcmVzZXJ2ZWQgaW4gZmlsZXMgd2l0aCB0aGUgLm10cyBvciAuY3RzIGV4dGVuc2lvbi4gQWRkIGEgdHJhaWxpbmcgY29tbWEsIGFzIGluIGA8VCw+KCkgPT4gLi4uYC5UaGlzIGlzIHRoZSBleHByZXNzaW9uIHBhcnQgb2YgYW4gZXhwcmVzc2lvbiBzdGF0ZW1lbnRwcmV2aW91cyBkZWZhdWx0IGNhc2UgaXMgZGVjbGFyZWQgYXQgaGVyZWNvbnRleHQuY3VycmVudCgpIGlmIFBhcmVuU3RtdCwgc28gcHJldiB0b2tlbiBjYW5ub3QgYmUgTm9uZQAAUBQTAGkAAAAnAgAAGgAAAFAUEwBpAAAA5QEAAC0AAABFb2ZEZWNsTm90QWxsb3dlZFVzaW5nRGVjbE5vdEFsbG93ZWRVc2luZ0RlY2xOb3RBbGxvd2VkRm9yRm9ySW5Mb29wVXNpbmdEZWNsTm90RW5hYmxlZEludmFsaWROYW1lSW5Vc2luZ0RlY2xJbml0UmVxdWlyZWRGb3JVc2luZ0RlY2xQcml2YXRlTmFtZUluSW50ZXJmYWNlSW52YWxpZFN1cGVyQ2FsbEludmFsaWRTdXBlckludmFsaWRTdXBlclByaXZhdGVOYW1lSW52YWxpZE5ld1RhcmdldEludmFsaWRJbXBvcnRBcnJvd05vdEFsbG93ZWRFeHBvcnROb3RBbGxvd2VkR2V0dGVyU2V0dGVyQ2Fubm90QmVSZWFkb25seUdldHRlclNldHRlckNhbm5vdEJlT3B0aW9uYWxHZXR0ZXJQYXJhbVNldHRlclBhcmFtVG9wTGV2ZWxBd2FpdEluU2NyaXB0TGVnYWN5RGVjaW1hbExlZ2FjeU9jdGFsSW52YWxpZElkZW50Q2hhckV4cGVjdGVkRGlnaXRyYWRpeFNldHRlclBhcmFtUmVxdWlyZWRSZXN0UGF0SW5TZXR0ZXJVbnRlcm1pbmF0ZWRCbG9ja0NvbW1lbnRVbnRlcm1pbmF0ZWRTdHJMaXRFeHBlY3RlZFVuaWNvZGVFc2NhcGVFc2NhcGVJblJlc2VydmVkV29yZHdvcmRVbnRlcm1pbmF0ZWRSZWdFeHBVbnRlcm1pbmF0ZWRUcGxJZGVudEFmdGVyTnVtVW5leHBlY3RlZENoYXJjSW52YWxpZFN0ckVzY2FwZUludmFsaWRVbmljb2RlRXNjYXBlQmFkQ2hhcmFjdGVyRXNjYXBlU2VxdWVuY2VleHBlY3RlZE51bUxpdFRlcm1pbmF0ZWRXaXRoRXhwTGVnYWN5Q29tbWVudEluTW9kdWxlSW52YWxpZElkZW50SW5TdHJpY3RJbnZhbGlkSWRlbnRJbkFzeW5jRXZhbEFuZEFyZ3VtZW50c0luU3RyaWN0QXJndW1lbnRzSW5DbGFzc0ZpZWxkSWxsZWdhbExhbmd1YWdlTW9kZURpcmVjdGl2ZVVuYXJ5SW5FeHBsZWZ0X3NwYW5IYXNoTGluZUJyZWFrSW5UaHJvd0xpbmVCcmVha0JlZm9yZUFycm93VW5leHBlY3RlZGdvdFVuZXhwZWN0ZWRUb2tlbldpdGhTdWdnZXN0aW9uc2NhbmRpZGF0ZV9saXN0UmVzZXJ2ZWRXb3JkSW5JbXBvcnRBc3NpZ25Qcm9wZXJ0eUV4cGVjdGVkRXhwZWN0ZWRTZW1pRm9yRXhwclN0bXRBd2FpdFN0YXJSZXNlcnZlZFdvcmRJbk9ialNob3J0aGFuZE9yUGF0TnVsbGlzaENvYWxlc2NpbmdXaXRoTG9naWNhbE9wTXVsdGlwbGVEZWZhdWx0cHJldmlvdXNDb21tYUFmdGVyUmVzdEVsZW1lbnROb25MYXN0UmVzdFBhcmFtU3ByZWFkSW5QYXJlbkV4cHJFbXB0eVBhcmVuRXhwckludmFsaWRQYXRJbnZhbGlkRXhwck5vdFNpbXBsZUFzc2lnbkludmFsaWRBc3NpZ25UYXJnZXRFeHBlY3RlZElkZW50RXhwZWN0ZWRTZW1pRHVwbGljYXRlTGFiZWxBc3luY0dlbmVyYXRvck5vblRvcExldmVsSW1wb3J0RXhwb3J0SW1wb3J0RXhwb3J0SW5TY3JpcHRJbXBvcnRNZXRhSW5TY3JpcHRQYXRWYXJXaXRob3V0SW5pdFdpdGhJblN0cmljdFJldHVybk5vdEFsbG93ZWRUb29NYW55VmFySW5Gb3JJbkhlYWRWYXJJbml0aWFsaXplckluRm9ySW5IZWFkTGFiZWxsZWRHZW5lcmF0b3JPckFzeW5jTGFiZWxsZWRGdW5jdGlvbkluU3RyaWN0WWllbGRQYXJhbUluR2VuQXdhaXRQYXJhbUluQXN5bmNBd2FpdEZvclN0bXRBd2FpdEluRnVuY3Rpb25VbnRlcm1pbmF0ZWRKU1hDb250ZW50c0VtcHR5SlNYQXR0ckludmFsaWRKU1hWYWx1ZUpTWEV4cGVjdGVkQ2xvc2luZ1RhZ0Zvckx0R3RKU1hFeHBlY3RlZENsb3NpbmdUYWd0YWdJbnZhbGlkTGVhZGluZ0RlY29yYXRvckRlY29yYXRvck9uRXhwb3J0VHNSZXF1aXJlZEFmdGVyT3B0aW9uYWxUc0ludmFsaWRQYXJhbVByb3BQYXRTcGFjZUJldHdlZW5IYXNoQW5kSWRlbnRBc3luY0NvbnN0cnVjdG9yUHJvcGVydHlOYW1lZENvbnN0cnVjdG9yUHJpdmF0ZUNvbnN0cnVjdG9yUHJpdmF0ZU5hbWVNb2RpZmllckNvbnN0cnVjdG9yQWNjZXNzb3JSZWFkT25seU1ldGhvZEdlbmVyYXRvckNvbnN0cnVjdG9yRHVwbGljYXRlQ29uc3RydWN0b3JUc0JpbmRpbmdQYXRDYW5ub3RCZU9wdGlvbmFsU3VwZXJDYWxsT3B0aW9uYWxPcHRDaGFpbkNhbm5vdEZvbGxvd0NvbnN0cnVjdG9yQ2FsbFRhZ2dlZFRwbEluT3B0Q2hhaW5UcmFpbGluZ0NvbW1hSW5zaWRlSW1wb3J0RXhwb3J0RGVmYXVsdFdpdGhPdXRGcm9tRXhwb3J0RXhwZWN0RnJvbURvdHNXaXRob3V0SWRlbnRpZmllck51bWVyaWNTZXBhcmF0b3JJc0FsbG93ZWRPbmx5QmV0d2VlblR3b0RpZ2l0c0ltcG9ydEJpbmRpbmdJc1N0cmluZ0V4cG9ydEJpbmRpbmdJc1N0cmluZ0NvbnN0RGVjbGFyYXRpb25zUmVxdWlyZUluaXRpYWxpemF0aW9uRHVwbGljYXRlZFJlZ0V4cEZsYWdzVW5rbm93blJlZ0V4cEZsYWdzVFMxMDAzVFMxMDA1VFMxMDA5VFMxMDE0VFMxMDE1VFMxMDI5VFMxMDMwVFMxMDMxVFMxMDM4VFMxMDQyVFMxMDQ3VFMxMDQ4VFMxMDU2VFMxMDg1VFMxMDg5VFMxMDkyVFMxMDk2VFMxMDk4VFMxMTAwVFMxMTAyVFMxMTA1VFMxMTA2VFMxMTA3VFMxMTA5VFMxMTEwVFMxMTE0VFMxMTE1VFMxMTE2VFMxMTIzVFMxMTQxVFMxMTYyVFMxMTY0VFMxMTcxVFMxMTcyVFMxMTczVFMxMTc0VFMxMTc1VFMxMTgzVFMxMTg0VFMxMTg1VFMxMDkzVFMxMTk2VFMxMjQyVFMxMjQzVFMxMjQ0VFMxMjQ1VFMxMjY3VFMxMjczVFMxMjc0VFMxMjc3VFMyMjA2VFMyMjA3VFMyMzY5VFMyMzcxVFMyNDA2VFMyNDEwVFMyNDE0VFMyNDI3VFMyNDUyVFMyNDgzVFMyNDkxVFMyNDk5VFMyNzAzVFM0MTEyVFM4MDM4VFMxODAxMFRTVHlwZUFubm90YXRpb25BZnRlckFzc2lnblRzTm9uTnVsbEFzc2VydGlvbk5vdEFsbG93ZWRXaXRoTGFiZWxpbm5lcm5vdGVSZXNlcnZlZFR5cGVBc3NlcnRpb25SZXNlcnZlZEFycm93VHlwZVBhcmFtL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc3djX2VjbWFfcGFyc2VyLTAuMTQ5LjAvc3JjL2xleGVyL3V0aWwucnMAAAAAAAAAAQAAAAEAAAD4AQAAUGFyc2VJbnRFcnJvcmZhaWxlZCB0byBwYXJzZSBzdHJpbmcgYXMgbnVtYmVyL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc3djX2VjbWFfcGFyc2VyLTAuMTQ5LjAvc3JjL2xleGVyL2pzeC5yc1l3EQBnAAAAhwAAAC8AAABmYWlsZWQgdG8gcGFyc2UgbnVtYmVyIGFzIGNoYXIAAFl3EQBnAAAAiQAAAA4AAABxdW90YW1wYXBvc2x0Z3RuYnNwaWV4Y2xjZW50cG91bmRjdXJyZW55ZW5icnZiYXJzZWN0dW1sY29weW9yZGZsYXF1b25vdHNoeXJlZ21hY3JkZWdwbHVzbW5zdXAyc3VwM2FjdXRlbWljcm9wYXJhbWlkZG90Y2VkaWxzdXAxb3JkbXJhcXVvZnJhYzE0ZnJhYzEyZnJhYzM0aXF1ZXN0QWdyYXZlQWFjdXRlQWNpcmNBdGlsZGVBdW1sQXJpbmdBRWxpZ0NjZWRpbEVncmF2ZUVhY3V0ZUVjaXJjRXVtbElncmF2ZUlhY3V0ZUljaXJjSXVtbEVUSE50aWxkZU9ncmF2ZU9hY3V0ZU9jaXJjT3RpbGRlT3VtbHRpbWVzT3NsYXNoVWdyYXZlVWFjdXRlVWNpcmNVdW1sWWFjdXRlVEhPUk5zemxpZ2FncmF2ZWFhY3V0ZWFjaXJjYXRpbGRlYXVtbGFyaW5nYWVsaWdjY2VkaWxlZ3JhdmVlYWN1dGVlY2lyY2V1bWxpZ3JhdmVpYWN1dGVpY2lyY2l1bWxldGhudGlsZGVvZ3JhdmVvYWN1dGVvY2lyY290aWxkZW91bWxkaXZpZGVvc2xhc2h1Z3JhdmV1YWN1dGV1Y2lyY3V1bWx5YWN1dGV0aG9ybnl1bWxPRWxpZ29lbGlnU2Nhcm9uc2Nhcm9uWXVtbGZub2ZjaXJjdGlsZGVBbHBoYUJldGFHYW1tYURlbHRhRXBzaWxvblpldGFFdGFUaGV0YUlvdGFLYXBwYUxhbWJkYU11TnVYaU9taWNyb25QaVJob1NpZ21hVGF1VXBzaWxvblBoaUNoaVBzaU9tZWdhYWxwaGFiZXRhZ2FtbWFkZWx0YWVwc2lsb256ZXRhZXRhdGhldGFpb3Rha2FwcGFsYW1iZGFtdW51eGlvbWljcm9ucGlyaG9zaWdtYWZzaWdtYXRhdXVwc2lsb25waGljaGlwc2lvbWVnYXRoZXRhc3ltdXBzaWhwaXZlbnNwZW1zcHRoaW5zcHp3bmp6d2pscm1ybG1uZGFzaG1kYXNobHNxdW9yc3F1b3NicXVvbGRxdW9yZHF1b2JkcXVvZGFnZ2VyRGFnZ2VyYnVsbGhlbGxpcHBlcm1pbHByaW1lUHJpbWVsc2FxdW9yc2FxdW9vbGluZWZyYXNsZXVyb2ltYWdld2VpZXJwcmVhbHRyYWRlYWxlZnN5bWxhcnJ1YXJycmFycmRhcnJoYXJyY3JhcnJsQXJydUFycnJBcnJkQXJyaEFycmZvcmFsbHBhcnRleGlzdGVtcHR5bmFibGFpc2lubm90aW5uaXByb2RzdW1taW51c2xvd2FzdHJhZGljaW5maW5hbmdhbmRvcmNhcGN1cGludHRoZXJlNHNpbWNvbmdhc3ltcG5lZXF1aXZsZWdlc3Vic3VwbnN1YnN1YmVzdXBlb3BsdXNvdGltZXNwZXJwc2RvdGxjZWlscmNlaWxsZmxvb3JyZmxvb3JsYW5ncmFuZ2xvenNwYWRlc2NsdWJzaGVhcnRzZGlhbXNyYXdUcGxleHByc3F1YXNpc1RoaXNVbmFyeVVwZGF0ZUJpbk1lbWJlclN1cGVyUHJvcENvbmRDYWxsTmV3U2VxTGl0VGFnZ2VkVHBsQXJyb3dZaWVsZE1ldGFQcm9wQXdhaXRQYXJlbkpTWE1lbWJlckpTWE5hbWVzcGFjZWROYW1lSlNYRW1wdHlKU1hFbGVtZW50SlNYRnJhZ21lbnRUc1R5cGVBc3NlcnRpb25Uc0NvbnN0QXNzZXJ0aW9uVHNOb25OdWxsVHNBc1RzSW5zdGFudGlhdGlvblRzU2F0aXNmaWVzT3B0Q2hhaW5TaG9ydGhhbmRLZXlWYWx1ZUdldHRlclNldHRlck1ldGhvZEJsb2NrRGVidWdnZXJXaXRoUmV0dXJuTGFiZWxlZEJyZWFrQ29udGludWVJZlN3aXRjaFRocm93VHJ5V2hpbGVEb1doaWxlRm9yRm9ySW5Gb3JPZkRlY2zPAgAADAAAAAQAAADkAAAA6gIAAAwAAAAEAAAA6wIAAOwCAAAEAAAABAAAABIBAAAAAAAAAQAAAAEAAABuAAAAywIAAAQAAAAEAAAAmAEAAO0CAAAEAAAABAAAAIsBAAAAAAAABAAAAAQAAADuAgAAZGVjb3JhdG9yc2JvZHlzdXBlcl9jbGFzc2lzX2Fic3RyYWN0dHlwZV9wYXJhbXNzdXBlcl90eXBlX3BhcmFtc88TEwAEAAAA0IIRAAQAAABkfhEACgAAAG5+EQAEAAAAcn4RAAsAAAB9fhEACwAAAIh+EQALAAAAk34RABEAAAAkBhMACgAAAFZhckRlY2xraW5kZGVjbHNUcnlTdG10YmxvY2toYW5kbGVyZmluYWxpemVySlNYTWVtYmVyRXhwclVzaW5nRGVjbGlzX2F3YWl0T2JqZWN0TGl0cHJvcHNvcGVuaW5nY2xvc2luZ0Jsb2NrU3RtdHN0bXRz7wIAAAwAAAAEAAAA8AIAAPECAAAYAAAABAAAANcCAABwYXJhbXNpc19nZW5lcmF0b3Jpc19hc3luY3JldHVybl90eXBlAAAAgH8RAAYAAABkfhEACgAAAM8TEwAEAAAA0IIRAAQAAABufhEABAAAAIZ/EQAMAAAAkn8RAAgAAACIfhEACwAAAJp/EQALAAAARnVuY3Rpb25vYmpwcm9wVHNLZXl3b3JkVHlwZVRzVGhpc1R5cGVUc0ZuT3JDb25zdHJ1Y3RvclR5cGVUc1R5cGVSZWZUc1R5cGVRdWVyeVRzVHlwZUxpdFRzQXJyYXlUeXBlVHNUdXBsZVR5cGVUc09wdGlvbmFsVHlwZVRzUmVzdFR5cGVUc1VuaW9uT3JJbnRlcnNlY3Rpb25UeXBlVHNDb25kaXRpb25hbFR5cGVUc0luZmVyVHlwZVRzUGFyZW50aGVzaXplZFR5cGVUc1R5cGVPcGVyYXRvclRzSW5kZXhlZEFjY2Vzc1R5cGVUc01hcHBlZFR5cGVUc0xpdFR5cGVUc1R5cGVQcmVkaWNhdGVUc0ltcG9ydFR5cGVUc1R5cGVBbm5KU1hPcGVuaW5nRWxlbWVudGF0dHJzc2VsZl9jbG9zaW5ndHlwZV9hcmdzAN8CAAAYAAAACAAAAJgAAABUc0VudW1EZWNsaXNfY29uc3RtZW1iZXJzVHNRdWFsaWZpZWROYW1lVHNNb2R1bGVEZWNs8gIAAAwAAAAEAAAA8wIAAAAAAAAEAAAABAAAAPQCAADPExMABAAAAESoEQACAAAAOQMTAAcAAACIfhEACwAAAHADEwAHAAAAbn4RAAQAAABUc01vZHVsZUJsb2NrVHNOYW1lc3BhY2VEZWNsbGVmdHJpZ2h0VHNUeXBlQWxpYXNEZWNsVHNUeXBlUGFyYW1EZWNsVHNJbXBvcnRFcXVhbHNEZWNsaXNfZXhwb3J0bW9kdWxlX3JlZlRzVHlwZVBhcmFtSW5zdGFudGlhdGlvbkwkEQAIAAAAjCQRACUAAAAnyz3b0YA3swwmEQABAAAAFCYRAAIAAACNf7muNDOp1rQlEQACAAAAxCURAAkAAAAnyz3b0YA3swAAAAAIAAAABAAAAGoAAAAAAAAABAAAAAQAAADeAAAAAAAAAAQAAAAEAAAAIQEAAGN0eHRzeW1vcHRpb25hbElkZW50TmFtZVByaXZhdGVOYW1lbmFtZQAAAAAABAAAAAQAAACZAAAAQmluZGluZ0lkZW50dHlwZV9hbm71AgAABAAAAAQAAADhAQAAAAAAAAEAAAABAAAAbgAAAEV4cG9ydEFsbHNyY3R5cGVfb25seUV4cG9ydERlY2xkZWNsAPYCAAAMAAAABAAAAPcCAAD4AgAABAAAAAQAAAD5AgAAAAAAAAQAAAAEAAAAcwEAAHNwZWNpZmllcnNwaGFzZQDPExMABAAAAJCDEQAKAAAARYMRAAMAAABIgxEACQAAALkEEwAEAAAAmoMRAAUAAABJbXBvcnREZWNsSW1wb3J0RXhwb3J0TmFtZWRFeHBvcnREZWZhdWx0RGVjbEV4cG9ydERlZmF1bHRFeHByVHNJbXBvcnRFcXVhbHNUc0V4cG9ydEFzc2lnbm1lbnRUc05hbWVzcGFjZUV4cG9ydENsYXNzRm5Uc0ludGVyZmFjZURlY2xFdmFsdWF0aW9uU291cmNlRGVmZXJOYW1lZEV4cG9ydE5hbWVzcGFjZURlZmF1bHROYW1lZFN0cmV4cHJFeHBvcnROYW1lZFNwZWNpZmllcm9yaWdleHBvcnRlZGlzX3R5cGVfb25seUltcG9ydE5hbWVkU3BlY2lmaWVybG9jYWxpbXBvcnRlZEltcG9ydFN0YXJBc1NwZWNpZmllckV4cG9ydERlZmF1bHRTcGVjaWZpZXJJbXBvcnREZWZhdWx0U3BlY2lmaWVyRXhwb3J0TmFtZXNwYWNlU3BlY2lmaWVyAAA1AxMAAgAAAPMFEwABAAAAkQUTAAEAAACYAxMAAQAAAH0DEwADAAAAWwITAAEAAAA0AxMAAQAAAPC3EwABAAAAgAMTAAEAAACBAxMAAQAAADcDEwABAAAAOAMTAAEAAABNAhMAAQAAALQEEwABAAAASQMTAAEAAAB0ZW1wbGF0ZSB0b2tlbiAosIURABAAAADwtxMAAQAAAHgDEwABAAAAXAMTAAIAAAB3AxMAAQAAAMUCEwACAAAAxwITAAIAAABcAhMAAQAAAHN0cmluZyBsaXRlcmFsICgAhhEAEAAAAGwbEwACAAAA8LcTAAEAAAByZWdleHAgbGl0ZXJhbCAoKIYRABAAAABsGxMAAgAAAPC3EwABAAAAbnVtZXJpYyBsaXRlcmFsICgAAABQhhEAEQAAAGwbEwACAAAA8LcTAAEAAABiaWdpbnQgbGl0ZXJhbCAofIYRABAAAABsGxMAAgAAAPC3EwABAAAAanN4IG5hbWUgKAAApIYRAAoAAADwtxMAAQAAAGpzeCB0ZXh0ICgAAMCGEQAKAAAA8LcTAAEAAADo3hIAEQAAAD4gKGpzeCB0YWcgZW5kKQDkhhEADwAAAPwEEwACAAAAPGxleGluZyBlcnJvcjogAASHEQAPAAAAoQITAAEAAAABAAAAAAAAAJgDEwABAAAAAQAAAAAAAAB4AxMAAQAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IFVzaW5nIGlzIG5vdCBhIHZhbGlkIGRlY2xhcmF0aW9uIGZvciBgZGVjbGFyZWAga2V5d29yZESHEQBgAAAAPNoSAG8AAAACCwAAHAAAAHBhY2thZ2UAUacRAHIAAAD9AAAAAQAAAF9hcHBseV9kZWNvcmF0ZWRfZGVzY3JpcHRvckBzd2MvaGVscGVycy9fL19hcHBseV9kZWNvcmF0ZWRfZGVzY3JpcHRvcl9hcnJheV9saWtlX3RvX2FycmF5QHN3Yy9oZWxwZXJzL18vX2FycmF5X2xpa2VfdG9fYXJyYXlfYXJyYXlfd2l0aF9ob2xlc0Bzd2MvaGVscGVycy9fL19hcnJheV93aXRoX2hvbGVzX2FycmF5X3dpdGhvdXRfaG9sZXNAc3djL2hlbHBlcnMvXy9fYXJyYXlfd2l0aG91dF9ob2xlc19hc3NlcnRfdGhpc19pbml0aWFsaXplZEBzd2MvaGVscGVycy9fL19hc3NlcnRfdGhpc19pbml0aWFsaXplZF9hc3luY19nZW5lcmF0b3JAc3djL2hlbHBlcnMvXy9fYXN5bmNfZ2VuZXJhdG9yX2FzeW5jX2dlbmVyYXRvcl9kZWxlZ2F0ZUBzd2MvaGVscGVycy9fL19hc3luY19nZW5lcmF0b3JfZGVsZWdhdGVfYXN5bmNfaXRlcmF0b3JAc3djL2hlbHBlcnMvXy9fYXN5bmNfaXRlcmF0b3JfYXN5bmNfdG9fZ2VuZXJhdG9yQHN3Yy9oZWxwZXJzL18vX2FzeW5jX3RvX2dlbmVyYXRvcl9hd2FpdF9hc3luY19nZW5lcmF0b3JAc3djL2hlbHBlcnMvXy9fYXdhaXRfYXN5bmNfZ2VuZXJhdG9yX2F3YWl0X3ZhbHVlQHN3Yy9oZWxwZXJzL18vX2F3YWl0X3ZhbHVlX2NoZWNrX3ByaXZhdGVfcmVkZWNsYXJhdGlvbkBzd2MvaGVscGVycy9fL19jaGVja19wcml2YXRlX3JlZGVjbGFyYXRpb25fY2xhc3NfYXBwbHlfZGVzY3JpcHRvcl9kZXN0cnVjdHVyZUBzd2MvaGVscGVycy9fL19jbGFzc19hcHBseV9kZXNjcmlwdG9yX2Rlc3RydWN0dXJlX2NsYXNzX2FwcGx5X2Rlc2NyaXB0b3JfZ2V0QHN3Yy9oZWxwZXJzL18vX2NsYXNzX2FwcGx5X2Rlc2NyaXB0b3JfZ2V0X2NsYXNzX2FwcGx5X2Rlc2NyaXB0b3Jfc2V0QHN3Yy9oZWxwZXJzL18vX2NsYXNzX2FwcGx5X2Rlc2NyaXB0b3Jfc2V0X2NsYXNzX2FwcGx5X2Rlc2NyaXB0b3JfdXBkYXRlQHN3Yy9oZWxwZXJzL18vX2NsYXNzX2FwcGx5X2Rlc2NyaXB0b3JfdXBkYXRlX2NsYXNzX2NhbGxfY2hlY2tAc3djL2hlbHBlcnMvXy9fY2xhc3NfY2FsbF9jaGVja19jbGFzc19jaGVja19wcml2YXRlX3N0YXRpY19maWVsZF9kZXNjcmlwdG9yQHN3Yy9oZWxwZXJzL18vX2NsYXNzX2NoZWNrX3ByaXZhdGVfc3RhdGljX2ZpZWxkX2Rlc2NyaXB0b3JfY2xhc3NfZXh0cmFjdF9maWVsZF9kZXNjcmlwdG9yQHN3Yy9oZWxwZXJzL18vX2NsYXNzX2V4dHJhY3RfZmllbGRfZGVzY3JpcHRvcl9jbGFzc19uYW1lX3Rkel9lcnJvckBzd2MvaGVscGVycy9fL19jbGFzc19uYW1lX3Rkel9lcnJvcl9jbGFzc19wcml2YXRlX2ZpZWxkX2dldEBzd2MvaGVscGVycy9fL19jbGFzc19wcml2YXRlX2ZpZWxkX2dldF9jbGFzc19wcml2YXRlX2ZpZWxkX2luaXRAc3djL2hlbHBlcnMvXy9fY2xhc3NfcHJpdmF0ZV9maWVsZF9pbml0X2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZUBzd2MvaGVscGVycy9fL19jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2VfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9rZXlAc3djL2hlbHBlcnMvXy9fY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9rZXlfY2xhc3NfcHJpdmF0ZV9maWVsZF9zZXRAc3djL2hlbHBlcnMvXy9fY2xhc3NfcHJpdmF0ZV9maWVsZF9zZXRfY2xhc3NfcHJpdmF0ZV9maWVsZF91cGRhdGVAc3djL2hlbHBlcnMvXy9fY2xhc3NfcHJpdmF0ZV9maWVsZF91cGRhdGVfY2xhc3NfcHJpdmF0ZV9tZXRob2RfZ2V0QHN3Yy9oZWxwZXJzL18vX2NsYXNzX3ByaXZhdGVfbWV0aG9kX2dldF9jbGFzc19wcml2YXRlX21ldGhvZF9pbml0QHN3Yy9oZWxwZXJzL18vX2NsYXNzX3ByaXZhdGVfbWV0aG9kX2luaXRfY2xhc3NfcHJpdmF0ZV9tZXRob2Rfc2V0QHN3Yy9oZWxwZXJzL18vX2NsYXNzX3ByaXZhdGVfbWV0aG9kX3NldF9jbGFzc19zdGF0aWNfcHJpdmF0ZV9maWVsZF9zcGVjX2dldEBzd2MvaGVscGVycy9fL19jbGFzc19zdGF0aWNfcHJpdmF0ZV9maWVsZF9zcGVjX2dldF9jbGFzc19zdGF0aWNfcHJpdmF0ZV9maWVsZF9zcGVjX3NldEBzd2MvaGVscGVycy9fL19jbGFzc19zdGF0aWNfcHJpdmF0ZV9maWVsZF9zcGVjX3NldF9jbGFzc19zdGF0aWNfcHJpdmF0ZV9maWVsZF91cGRhdGVAc3djL2hlbHBlcnMvXy9fY2xhc3Nfc3RhdGljX3ByaXZhdGVfZmllbGRfdXBkYXRlX2NvbnN0cnVjdEBzd2MvaGVscGVycy9fL19jb25zdHJ1Y3RfY3JlYXRlX2NsYXNzQHN3Yy9oZWxwZXJzL18vX2NyZWF0ZV9jbGFzc19kZWNvcmF0ZUBzd2MvaGVscGVycy9fL19kZWNvcmF0ZV9kZWZhdWx0c0Bzd2MvaGVscGVycy9fL19kZWZhdWx0c19kZWZpbmVfZW51bWVyYWJsZV9wcm9wZXJ0aWVzQHN3Yy9oZWxwZXJzL18vX2RlZmluZV9lbnVtZXJhYmxlX3Byb3BlcnRpZXNfZGVmaW5lX3Byb3BlcnR5QHN3Yy9oZWxwZXJzL18vX2RlZmluZV9wcm9wZXJ0eV9leHBvcnRfc3RhckBzd2MvaGVscGVycy9fL19leHBvcnRfc3Rhcl9leHRlbmRzQHN3Yy9oZWxwZXJzL18vX2V4dGVuZHNfZ2V0QHN3Yy9oZWxwZXJzL18vX2dldF9nZXRfcHJvdG90eXBlX29mQHN3Yy9oZWxwZXJzL18vX2dldF9wcm90b3R5cGVfb2ZfaW5oZXJpdHNAc3djL2hlbHBlcnMvXy9faW5oZXJpdHNfaW5oZXJpdHNfbG9vc2VAc3djL2hlbHBlcnMvXy9faW5oZXJpdHNfbG9vc2VfaW5pdGlhbGl6ZXJfZGVmaW5lX3Byb3BlcnR5QHN3Yy9oZWxwZXJzL18vX2luaXRpYWxpemVyX2RlZmluZV9wcm9wZXJ0eV9pbml0aWFsaXplcl93YXJuaW5nX2hlbHBlckBzd2MvaGVscGVycy9fL19pbml0aWFsaXplcl93YXJuaW5nX2hlbHBlcl9pbnN0YW5jZW9mQHN3Yy9oZWxwZXJzL18vX2luc3RhbmNlb2ZfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZF9pc19uYXRpdmVfZnVuY3Rpb25Ac3djL2hlbHBlcnMvXy9faXNfbmF0aXZlX2Z1bmN0aW9uX2l0ZXJhYmxlX3RvX2FycmF5QHN3Yy9oZWxwZXJzL18vX2l0ZXJhYmxlX3RvX2FycmF5X2l0ZXJhYmxlX3RvX2FycmF5X2xpbWl0QHN3Yy9oZWxwZXJzL18vX2l0ZXJhYmxlX3RvX2FycmF5X2xpbWl0X2l0ZXJhYmxlX3RvX2FycmF5X2xpbWl0X2xvb3NlQHN3Yy9oZWxwZXJzL18vX2l0ZXJhYmxlX3RvX2FycmF5X2xpbWl0X2xvb3NlX2pzeEBzd2MvaGVscGVycy9fL19qc3hfbmV3X2Fycm93X2NoZWNrQHN3Yy9oZWxwZXJzL18vX25ld19hcnJvd19jaGVja19ub25faXRlcmFibGVfcmVzdEBzd2MvaGVscGVycy9fL19ub25faXRlcmFibGVfcmVzdF9ub25faXRlcmFibGVfc3ByZWFkQHN3Yy9oZWxwZXJzL18vX25vbl9pdGVyYWJsZV9zcHJlYWRfb2JqZWN0X2Rlc3RydWN0dXJpbmdfZW1wdHlAc3djL2hlbHBlcnMvXy9fb2JqZWN0X2Rlc3RydWN0dXJpbmdfZW1wdHlfb2JqZWN0X3NwcmVhZEBzd2MvaGVscGVycy9fL19vYmplY3Rfc3ByZWFkX29iamVjdF9zcHJlYWRfcHJvcHNAc3djL2hlbHBlcnMvXy9fb2JqZWN0X3NwcmVhZF9wcm9wc19vYmplY3Rfd2l0aG91dF9wcm9wZXJ0aWVzQHN3Yy9oZWxwZXJzL18vX29iamVjdF93aXRob3V0X3Byb3BlcnRpZXNfb2JqZWN0X3dpdGhvdXRfcHJvcGVydGllc19sb29zZUBzd2MvaGVscGVycy9fL19vYmplY3Rfd2l0aG91dF9wcm9wZXJ0aWVzX2xvb3NlX3Bvc3NpYmxlX2NvbnN0cnVjdG9yX3JldHVybkBzd2MvaGVscGVycy9fL19wb3NzaWJsZV9jb25zdHJ1Y3Rvcl9yZXR1cm5fcmVhZF9vbmx5X2Vycm9yQHN3Yy9oZWxwZXJzL18vX3JlYWRfb25seV9lcnJvcl9zZXRAc3djL2hlbHBlcnMvXy9fc2V0X3NldF9wcm90b3R5cGVfb2ZAc3djL2hlbHBlcnMvXy9fc2V0X3Byb3RvdHlwZV9vZl9za2lwX2ZpcnN0X2dlbmVyYXRvcl9uZXh0QHN3Yy9oZWxwZXJzL18vX3NraXBfZmlyc3RfZ2VuZXJhdG9yX25leHRfc2xpY2VkX3RvX2FycmF5QHN3Yy9oZWxwZXJzL18vX3NsaWNlZF90b19hcnJheV9zbGljZWRfdG9fYXJyYXlfbG9vc2VAc3djL2hlbHBlcnMvXy9fc2xpY2VkX3RvX2FycmF5X2xvb3NlX3N1cGVyX3Byb3BfYmFzZUBzd2MvaGVscGVycy9fL19zdXBlcl9wcm9wX2Jhc2VfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxAc3djL2hlbHBlcnMvXy9fdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2VAc3djL2hlbHBlcnMvXy9fdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2VfdGhyb3dAc3djL2hlbHBlcnMvXy9fdGhyb3dfdG9fYXJyYXlAc3djL2hlbHBlcnMvXy9fdG9fYXJyYXlfdG9fY29uc3VtYWJsZV9hcnJheUBzd2MvaGVscGVycy9fL190b19jb25zdW1hYmxlX2FycmF5X3RvX3ByaW1pdGl2ZUBzd2MvaGVscGVycy9fL190b19wcmltaXRpdmVfdG9fcHJvcGVydHlfa2V5QHN3Yy9oZWxwZXJzL18vX3RvX3Byb3BlcnR5X2tleV91cGRhdGVAc3djL2hlbHBlcnMvXy9fdXBkYXRlX3R5cGVfb2ZAc3djL2hlbHBlcnMvXy9fdHlwZV9vZl91bnN1cHBvcnRlZF9pdGVyYWJsZV90b19hcnJheUBzd2MvaGVscGVycy9fL191bnN1cHBvcnRlZF9pdGVyYWJsZV90b19hcnJheV93cmFwX2FzeW5jX2dlbmVyYXRvckBzd2MvaGVscGVycy9fL193cmFwX2FzeW5jX2dlbmVyYXRvcl93cmFwX25hdGl2ZV9zdXBlckBzd2MvaGVscGVycy9fL193cmFwX25hdGl2ZV9zdXBlcl93cml0ZV9vbmx5X2Vycm9yQHN3Yy9oZWxwZXJzL18vX3dyaXRlX29ubHlfZXJyb3JfY2xhc3NfcHJpdmF0ZV9maWVsZF9kZXN0cnVjdHVyZUBzd2MvaGVscGVycy9fL19jbGFzc19wcml2YXRlX2ZpZWxkX2Rlc3RydWN0dXJlX2NsYXNzX3N0YXRpY19wcml2YXRlX2ZpZWxkX2Rlc3RydWN0dXJlQHN3Yy9oZWxwZXJzL18vX2NsYXNzX3N0YXRpY19wcml2YXRlX2ZpZWxkX2Rlc3RydWN0dXJlX2NsYXNzX3N0YXRpY19wcml2YXRlX21ldGhvZF9nZXRAc3djL2hlbHBlcnMvXy9fY2xhc3Nfc3RhdGljX3ByaXZhdGVfbWV0aG9kX2dldF9jbGFzc19jaGVja19wcml2YXRlX3N0YXRpY19hY2Nlc3NAc3djL2hlbHBlcnMvXy9fY2xhc3NfY2hlY2tfcHJpdmF0ZV9zdGF0aWNfYWNjZXNzX2lzX25hdGl2ZV9yZWZsZWN0X2NvbnN0cnVjdEBzd2MvaGVscGVycy9fL19pc19uYXRpdmVfcmVmbGVjdF9jb25zdHJ1Y3RfY3JlYXRlX3N1cGVyQHN3Yy9oZWxwZXJzL18vX2NyZWF0ZV9zdXBlcl9jcmVhdGVfZm9yX29mX2l0ZXJhdG9yX2hlbHBlcl9sb29zZUBzd2MvaGVscGVycy9fL19jcmVhdGVfZm9yX29mX2l0ZXJhdG9yX2hlbHBlcl9sb29zZV90c19kZWNvcmF0ZUBzd2MvaGVscGVycy9fL190c19kZWNvcmF0ZV90c19nZW5lcmF0b3JAc3djL2hlbHBlcnMvXy9fdHNfZ2VuZXJhdG9yX3RzX21ldGFkYXRhQHN3Yy9oZWxwZXJzL18vX3RzX21ldGFkYXRhX3RzX3BhcmFtQHN3Yy9oZWxwZXJzL18vX3RzX3BhcmFtX3RzX3ZhbHVlc0Bzd2MvaGVscGVycy9fL190c192YWx1ZXNfYXBwbHlfZGVjc18yMjAzX3JAc3djL2hlbHBlcnMvXy9fYXBwbHlfZGVjc18yMjAzX3JfaWRlbnRpdHlAc3djL2hlbHBlcnMvXy9faWRlbnRpdHlfZGlzcG9zZUBzd2MvaGVscGVycy9fL19kaXNwb3NlX3VzaW5nQHN3Yy9oZWxwZXJzL18vX3VzaW5nX3VzaW5nX2N0eEBzd2MvaGVscGVycy9fL191c2luZ19jdHhhcHBseV9kZWNvcmF0ZWRfZGVzY3JpcHRvcmFycmF5X2xpa2VfdG9fYXJyYXlhcnJheV93aXRoX2hvbGVzYXJyYXlfd2l0aG91dF9ob2xlc2Fzc2VydF90aGlzX2luaXRpYWxpemVkYXN5bmNfZ2VuZXJhdG9yYXN5bmNfZ2VuZXJhdG9yX2RlbGVnYXRlYXN5bmNfaXRlcmF0b3Jhc3luY190b19nZW5lcmF0b3Jhd2FpdF9hc3luY19nZW5lcmF0b3Jhd2FpdF92YWx1ZWNoZWNrX3ByaXZhdGVfcmVkZWNsYXJhdGlvbmNsYXNzX2FwcGx5X2Rlc2NyaXB0b3JfZGVzdHJ1Y3R1cmVjbGFzc19hcHBseV9kZXNjcmlwdG9yX2dldGNsYXNzX2FwcGx5X2Rlc2NyaXB0b3Jfc2V0Y2xhc3NfYXBwbHlfZGVzY3JpcHRvcl91cGRhdGVjbGFzc19jYWxsX2NoZWNrY2xhc3NfY2hlY2tfcHJpdmF0ZV9zdGF0aWNfZmllbGRfZGVzY3JpcHRvcmNsYXNzX2V4dHJhY3RfZmllbGRfZGVzY3JpcHRvcmNsYXNzX25hbWVfdGR6X2Vycm9yY2xhc3NfcHJpdmF0ZV9maWVsZF9nZXRjbGFzc19wcml2YXRlX2ZpZWxkX2luaXRjbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2VjbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleWNsYXNzX3ByaXZhdGVfZmllbGRfc2V0Y2xhc3NfcHJpdmF0ZV9maWVsZF91cGRhdGVjbGFzc19wcml2YXRlX21ldGhvZF9nZXRjbGFzc19wcml2YXRlX21ldGhvZF9pbml0Y2xhc3NfcHJpdmF0ZV9tZXRob2Rfc2V0Y2xhc3Nfc3RhdGljX3ByaXZhdGVfZmllbGRfc3BlY19nZXRjbGFzc19zdGF0aWNfcHJpdmF0ZV9maWVsZF9zcGVjX3NldGNsYXNzX3N0YXRpY19wcml2YXRlX2ZpZWxkX3VwZGF0ZWNvbnN0cnVjdGNyZWF0ZV9jbGFzc2RlY29yYXRlZGVmYXVsdHNkZWZpbmVfZW51bWVyYWJsZV9wcm9wZXJ0aWVzZGVmaW5lX3Byb3BlcnR5ZXhwb3J0X3N0YXJnZXRfcHJvdG90eXBlX29maW5oZXJpdHNpbmhlcml0c19sb29zZWluaXRpYWxpemVyX2RlZmluZV9wcm9wZXJ0eWluaXRpYWxpemVyX3dhcm5pbmdfaGVscGVyaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRpbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmRpc19uYXRpdmVfZnVuY3Rpb25pdGVyYWJsZV90b19hcnJheWl0ZXJhYmxlX3RvX2FycmF5X2xpbWl0aXRlcmFibGVfdG9fYXJyYXlfbGltaXRfbG9vc2Vqc3huZXdfYXJyb3dfY2hlY2tub25faXRlcmFibGVfcmVzdG5vbl9pdGVyYWJsZV9zcHJlYWRvYmplY3RfZGVzdHJ1Y3R1cmluZ19lbXB0eW9iamVjdF9zcHJlYWRvYmplY3Rfc3ByZWFkX3Byb3Bzb2JqZWN0X3dpdGhvdXRfcHJvcGVydGllc29iamVjdF93aXRob3V0X3Byb3BlcnRpZXNfbG9vc2Vwb3NzaWJsZV9jb25zdHJ1Y3Rvcl9yZXR1cm5yZWFkX29ubHlfZXJyb3JzZXRfcHJvdG90eXBlX29mc2tpcF9maXJzdF9nZW5lcmF0b3JfbmV4dHNsaWNlZF90b19hcnJheXNsaWNlZF90b19hcnJheV9sb29zZXN1cGVyX3Byb3BfYmFzZXRhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2V0b19hcnJheXRvX2NvbnN1bWFibGVfYXJyYXl0b19wcmltaXRpdmV0b19wcm9wZXJ0eV9rZXl1cGRhdGV0eXBlX29mdW5zdXBwb3J0ZWRfaXRlcmFibGVfdG9fYXJyYXl3cmFwX2FzeW5jX2dlbmVyYXRvcndyYXBfbmF0aXZlX3N1cGVyd3JpdGVfb25seV9lcnJvcmNsYXNzX3ByaXZhdGVfZmllbGRfZGVzdHJ1Y3R1cmVjbGFzc19zdGF0aWNfcHJpdmF0ZV9maWVsZF9kZXN0cnVjdHVyZWNsYXNzX3N0YXRpY19wcml2YXRlX21ldGhvZF9nZXRjbGFzc19jaGVja19wcml2YXRlX3N0YXRpY19hY2Nlc3Npc19uYXRpdmVfcmVmbGVjdF9jb25zdHJ1Y3RjcmVhdGVfc3VwZXJjcmVhdGVfZm9yX29mX2l0ZXJhdG9yX2hlbHBlcl9sb29zZXRzX2RlY29yYXRldHNfZ2VuZXJhdG9ydHNfbWV0YWRhdGF0c19wYXJhbXRzX3ZhbHVlc2FwcGx5X2RlY3NfMjIwM19yaWRlbnRpdHlkaXNwb3NldXNpbmdfY3R4kKURAF0AAAAtAAAAIwAAAGluZGV4IG5vdCBmb3VuZACQpREAXQAAADoAAAAKAAAAkKURAF0AAABTAQAAPQAAAJClEQBdAAAAOwIAADQAAACQpREAXQAAADwCAAA0AAAAkKURAF0AAAC6AQAALAAAAJClEQBdAAAAsAEAACIAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9pbmRleG1hcC0yLjIuNi9zcmMvbWFwL2NvcmUucnMAAACQpREAXQAAACUAAAAPAAAAAAAAAAwAAAAEAAAA+gIAAPsCAABjYWxsZWQgZXhwZWN0IG9uIAAAABSmEQARAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc3djX2VjbWFfYXN0LTAuMTE4LjIvc3JjL3BhdC5ycwAAMKYRAF4AAAANAAAAFAAAAPwCAAAEAAAABAAAAI8AAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9zd2NfZWNtYV90cmFuc2Zvcm1zX2Jhc2UtMC4xNDQuMC9zcmMvZml4ZXIucnOwphEAbAAAAMUAAABAAAAAsKYRAGwAAACyAgAAFgAAALCmEQBsAAAAFQQAACAAAAAkbmFtZS91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19lY21hX3RyYW5zZm9ybXNfYmFzZS0wLjE0NC4wL3NyYy9oZWxwZXJzL21vZC5yc2ludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IEVycm9yIG9jY3VycmVkIHdoaWxlIHBhcnNpbmcgZXJyb3I6IAAAAMOnEQBOAAAAUacRAHIAAAAoAAAACQAAAEBzd2MvaGVscGVycy9fL18sqBEAEAAAAGlkcmVzb3VyY2VfX/0CAABmdW5jdGlvbiBfYXBwbHlfZGVjb3JhdGVkX2Rlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eSwgZGVjb3JhdG9ycywgZGVzY3JpcHRvciwgY29udGV4dCkgewogICAgdmFyIGRlc2MgPSB7fTsKICAgIE9iamVjdFsia2UiICsgInlzIl0oZGVzY3JpcHRvcikuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKICAgICAgICBkZXNjW2tleV0gPSBkZXNjcmlwdG9yW2tleV07CiAgICB9KTsKICAgIGRlc2MuZW51bWVyYWJsZSA9ICEhZGVzYy5lbnVtZXJhYmxlOwogICAgZGVzYy5jb25maWd1cmFibGUgPSAhIWRlc2MuY29uZmlndXJhYmxlOwogICAgaWYgKCJ2YWx1ZSIgaW4gZGVzYyB8fCBkZXNjLmluaXRpYWxpemVyKSB7CiAgICAgICAgZGVzYy53cml0YWJsZSA9IHRydWU7CiAgICB9CiAgICBkZXNjID0gZGVjb3JhdG9ycy5zbGljZSgpLnJldmVyc2UoKS5yZWR1Y2UoZnVuY3Rpb24oZGVzYywgZGVjb3JhdG9yKSB7CiAgICAgICAgcmV0dXJuIGRlY29yYXRvciA/IGRlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5LCBkZXNjKSB8fCBkZXNjIDogZGVzYzsKICAgIH0sIGRlc2MpOwogICAgdmFyIGhhc0FjY2Vzc29yID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRlc2MsICJnZXQiKSB8fCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGVzYywgInNldCIpOwogICAgaWYgKGNvbnRleHQgJiYgZGVzYy5pbml0aWFsaXplciAhPT0gdm9pZCAwICYmICFoYXNBY2Nlc3NvcikgewogICAgICAgIGRlc2MudmFsdWUgPSBkZXNjLmluaXRpYWxpemVyID8gZGVzYy5pbml0aWFsaXplci5jYWxsKGNvbnRleHQpIDogdm9pZCAwOwogICAgICAgIGRlc2MuaW5pdGlhbGl6ZXIgPSB1bmRlZmluZWQ7CiAgICB9CiAgICBpZiAoaGFzQWNjZXNzb3IpIHsKICAgICAgICBkZWxldGUgZGVzYy53cml0YWJsZTsKICAgICAgICBkZWxldGUgZGVzYy5pbml0aWFsaXplcjsKICAgICAgICBkZWxldGUgZGVzYy52YWx1ZTsKICAgIH0KICAgIGlmIChkZXNjLmluaXRpYWxpemVyID09PSB2b2lkIDApIHsKICAgICAgICBPYmplY3RbImRlZmluZSIgKyAiUHJvcGVydHkiXSh0YXJnZXQsIHByb3BlcnR5LCBkZXNjKTsKICAgICAgICBkZXNjID0gbnVsbDsKICAgIH0KICAgIHJldHVybiBkZXNjOwp9CmZ1bmN0aW9uIF9hcnJheV9saWtlX3RvX2FycmF5KGFyciwgbGVuKSB7CiAgICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTsKICAgIHJldHVybiBhcnIyOwp9CmZ1bmN0aW9uIF9hcnJheV93aXRoX2hvbGVzKGFycikgewogICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsKfQpmdW5jdGlvbiBfYXJyYXlfd2l0aG91dF9ob2xlcyhhcnIpIHsKICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlfbGlrZV90b19hcnJheShhcnIpOwp9CmZ1bmN0aW9uIF9hc3NlcnRfdGhpc19pbml0aWFsaXplZChzZWxmKSB7CiAgICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7CiAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTsKICAgIH0KICAgIHJldHVybiBzZWxmOwp9CmZ1bmN0aW9uIF9hc3luY19nZW5lcmF0b3IoZ2VuKSB7CiAgICB2YXIgZnJvbnQsIGJhY2s7CiAgICBmdW5jdGlvbiBzZW5kKGtleSwgYXJnKSB7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewogICAgICAgICAgICB2YXIgcmVxdWVzdCA9IHsga2V5OiBrZXksIGFyZzogYXJnLCByZXNvbHZlOiByZXNvbHZlLCByZWplY3Q6IHJlamVjdCwgbmV4dDogbnVsbCB9OwogICAgICAgICAgICBpZiAoYmFjaykgewogICAgICAgICAgICAgICAgYmFjayA9IGJhY2submV4dCA9IHJlcXVlc3Q7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBmcm9udCA9IGJhY2sgPSByZXF1ZXN0OwogICAgICAgICAgICAgICAgcmVzdW1lKGtleSwgYXJnKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQogICAgZnVuY3Rpb24gcmVzdW1lKGtleSwgYXJnKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGdlbltrZXldKGFyZyk7CiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTsKICAgICAgICAgICAgdmFyIHdyYXBwZWRBd2FpdCA9IHZhbHVlIGluc3RhbmNlb2YgX2F3YWl0X3ZhbHVlOwogICAgICAgICAgICBQcm9taXNlLnJlc29sdmUod3JhcHBlZEF3YWl0ID8gdmFsdWUud3JhcHBlZCA6IHZhbHVlKS50aGVuKGZ1bmN0aW9uKGFyZykgewogICAgICAgICAgICAgICAgaWYgKHdyYXBwZWRBd2FpdCkgewogICAgICAgICAgICAgICAgICAgIHJlc3VtZSgibmV4dCIsIGFyZyk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc2V0dGxlKHJlc3VsdC5kb25lID8gInJldHVybiIgOiAibm9ybWFsIiwgYXJnKTsKICAgICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgICAgICAgICByZXN1bWUoInRocm93IiwgZXJyKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIHNldHRsZSgidGhyb3ciLCBlcnIpOwogICAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHNldHRsZSh0eXBlLCB2YWx1ZSkgewogICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICAgICBjYXNlICJyZXR1cm4iOgogICAgICAgICAgICAgICAgZnJvbnQucmVzb2x2ZSh7IHZhbHVlOiB2YWx1ZSwgZG9uZTogdHJ1ZSB9KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ0aHJvdyI6CiAgICAgICAgICAgICAgICBmcm9udC5yZWplY3QodmFsdWUpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBmcm9udC5yZXNvbHZlKHsgdmFsdWU6IHZhbHVlLCBkb25lOiBmYWxzZSB9KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBmcm9udCA9IGZyb250Lm5leHQ7CiAgICAgICAgaWYgKGZyb250KSB7CiAgICAgICAgICAgIHJlc3VtZShmcm9udC5rZXksIGZyb250LmFyZyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYmFjayA9IG51bGw7CiAgICAgICAgfQogICAgfQogICAgdGhpcy5faW52b2tlID0gc2VuZDsKICAgIGlmICh0eXBlb2YgZ2VuLnJldHVybiAhPT0gImZ1bmN0aW9uIikgewogICAgICAgIHRoaXMucmV0dXJuID0gdW5kZWZpbmVkOwogICAgfQp9CmlmICh0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5hc3luY0l0ZXJhdG9yKSB7CiAgICBfYXN5bmNfZ2VuZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpczsKICAgIH07Cn0KX2FzeW5jX2dlbmVyYXRvci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGFyZykgewogICAgcmV0dXJuIHRoaXMuX2ludm9rZSgibmV4dCIsIGFyZyk7Cn07Cl9hc3luY19nZW5lcmF0b3IucHJvdG90eXBlLnRocm93ID0gZnVuY3Rpb24oYXJnKSB7CiAgICByZXR1cm4gdGhpcy5faW52b2tlKCJ0aHJvdyIsIGFyZyk7Cn07Cl9hc3luY19nZW5lcmF0b3IucHJvdG90eXBlLnJldHVybiA9IGZ1bmN0aW9uKGFyZykgewogICAgcmV0dXJuIHRoaXMuX2ludm9rZSgicmV0dXJuIiwgYXJnKTsKfTsKZnVuY3Rpb24gX2FzeW5jX2dlbmVyYXRvcl9kZWxlZ2F0ZShpbm5lciwgYXdhaXRXcmFwKSB7CiAgICB2YXIgaXRlciA9IHt9LCB3YWl0aW5nID0gZmFsc2U7CiAgICBmdW5jdGlvbiBwdW1wKGtleSwgdmFsdWUpIHsKICAgICAgICB3YWl0aW5nID0gdHJ1ZTsKICAgICAgICB2YWx1ZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHsKICAgICAgICAgICAgcmVzb2x2ZShpbm5lcltrZXldKHZhbHVlKSk7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBhd2FpdFdyYXAodmFsdWUpIH07CiAgICB9CiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wuaXRlcmF0b3IpIHsKICAgICAgICBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfTsKICAgIH0KICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgaWYgKHdhaXRpbmcpIHsKICAgICAgICAgICAgd2FpdGluZyA9IGZhbHNlOwogICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwdW1wKCJuZXh0IiwgdmFsdWUpOwogICAgfTsKICAgIGlmICh0eXBlb2YgaW5uZXIudGhyb3cgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBpdGVyLnRocm93ID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgaWYgKHdhaXRpbmcpIHsKICAgICAgICAgICAgICAgIHdhaXRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHRocm93IHZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBwdW1wKCJ0aHJvdyIsIHZhbHVlKTsKICAgICAgICB9OwogICAgfQogICAgaWYgKHR5cGVvZiBpbm5lci5yZXR1cm4gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBpdGVyLnJldHVybiA9IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiBwdW1wKCJyZXR1cm4iLCB2YWx1ZSk7CiAgICAgICAgfTsKICAgIH0KICAgIHJldHVybiBpdGVyOwp9CmZ1bmN0aW9uIF9hc3luY19pdGVyYXRvcihpdGVyYWJsZSkgewogICAgdmFyIG1ldGhvZCwgYXN5bmMsIHN5bmMsIHJldHJ5ID0gMjsKICAgIGZvciAoInVuZGVmaW5lZCIgIT0gdHlwZW9mIFN5bWJvbCAmJiAoYXN5bmMgPSBTeW1ib2wuYXN5bmNJdGVyYXRvciwgc3luYyA9IFN5bWJvbC5pdGVyYXRvcik7IHJldHJ5LS07KSB7CiAgICAgICAgaWYgKGFzeW5jICYmIG51bGwgIT0gKG1ldGhvZCA9IGl0ZXJhYmxlW2FzeW5jXSkpIHJldHVybiBtZXRob2QuY2FsbChpdGVyYWJsZSk7CiAgICAgICAgaWYgKHN5bmMgJiYgbnVsbCAhPSAobWV0aG9kID0gaXRlcmFibGVbc3luY10pKSByZXR1cm4gbmV3IEFzeW5jRnJvbVN5bmNJdGVyYXRvcihtZXRob2QuY2FsbChpdGVyYWJsZSkpOwogICAgICAgIGFzeW5jID0gIkBAYXN5bmNJdGVyYXRvciIsIHN5bmMgPSAiQEBpdGVyYXRvciI7CiAgICB9CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgaXMgbm90IGFzeW5jIGl0ZXJhYmxlIik7Cn0KZnVuY3Rpb24gQXN5bmNGcm9tU3luY0l0ZXJhdG9yKHMpIHsKICAgIGZ1bmN0aW9uIEFzeW5jRnJvbVN5bmNJdGVyYXRvckNvbnRpbnVhdGlvbihyKSB7CiAgICAgICAgaWYgKE9iamVjdChyKSAhPT0gcikgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IociArICIgaXMgbm90IGFuIG9iamVjdC4iKSk7CiAgICAgICAgdmFyIGRvbmUgPSByLmRvbmU7CiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyLnZhbHVlKS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogZG9uZSB9OwogICAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIEFzeW5jRnJvbVN5bmNJdGVyYXRvciA9IGZ1bmN0aW9uKHMpIHsKICAgICAgICB0aGlzLnMgPSBzLCB0aGlzLm4gPSBzLm5leHQ7CiAgICB9LAogICAgICAgIEFzeW5jRnJvbVN5bmNJdGVyYXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgIHM6IG51bGwsCiAgICAgICAgICAgIG46IG51bGwsCiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIEFzeW5jRnJvbVN5bmNJdGVyYXRvckNvbnRpbnVhdGlvbih0aGlzLm4uYXBwbHkodGhpcy5zLCBhcmd1bWVudHMpKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmV0dXJuOiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICAgICAgdmFyIHJldCA9IHRoaXMucy5yZXR1cm47CiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAwID09PSByZXQKICAgICAgICAgICAgICAgICAgICA/IFByb21pc2UucmVzb2x2ZSh7IHZhbHVlOiB2YWx1ZSwgZG9uZTogITAgfSkKICAgICAgICAgICAgICAgICAgICA6IEFzeW5jRnJvbVN5bmNJdGVyYXRvckNvbnRpbnVhdGlvbihyZXQuYXBwbHkodGhpcy5zLCBhcmd1bWVudHMpKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdGhyb3c6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgICAgICB2YXIgdGhyID0gdGhpcy5zLnJldHVybjsKICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIDAgPT09IHRociA/IFByb21pc2UucmVqZWN0KHZhbHVlKSA6IEFzeW5jRnJvbVN5bmNJdGVyYXRvckNvbnRpbnVhdGlvbih0aHIuYXBwbHkodGhpcy5zLCBhcmd1bWVudHMpKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbmV3IEFzeW5jRnJvbVN5bmNJdGVyYXRvcihzKTsKfQpmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7CiAgICB0cnkgewogICAgICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTsKICAgICAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICByZWplY3QoZXJyb3IpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChpbmZvLmRvbmUpIHsKICAgICAgICByZXNvbHZlKHZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOwogICAgfQp9CmZ1bmN0aW9uIF9hc3luY190b19nZW5lcmF0b3IoZm4pIHsKICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgc2VsZiA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewogICAgICAgICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7CiAgICAgICAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7CiAgICAgICAgICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csICJuZXh0IiwgdmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHsKICAgICAgICAgICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgInRocm93IiwgZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfbmV4dCh1bmRlZmluZWQpOwogICAgICAgIH0pOwogICAgfTsKfQpmdW5jdGlvbiBfYXdhaXRfYXN5bmNfZ2VuZXJhdG9yKHZhbHVlKSB7CiAgICByZXR1cm4gbmV3IF9hd2FpdF92YWx1ZSh2YWx1ZSk7Cn0KZnVuY3Rpb24gX2F3YWl0X3ZhbHVlKHZhbHVlKSB7CiAgICB0aGlzLndyYXBwZWQgPSB2YWx1ZTsKfQpmdW5jdGlvbiBfY2hlY2tfcHJpdmF0ZV9yZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsKICAgIGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iik7CiAgICB9Cn0KZnVuY3Rpb24gX2NsYXNzX2FwcGx5X2Rlc2NyaXB0b3JfZGVzdHJ1Y3R1cmUocmVjZWl2ZXIsIGRlc2NyaXB0b3IpIHsKICAgIGlmIChkZXNjcmlwdG9yLnNldCkgewogICAgICAgIGlmICghKCJfX2Rlc3RyT2JqIiBpbiBkZXNjcmlwdG9yKSkgewogICAgICAgICAgICBkZXNjcmlwdG9yLl9fZGVzdHJPYmogPSB7CiAgICAgICAgICAgICAgICBzZXQgdmFsdWUodikgewogICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0LmNhbGwocmVjZWl2ZXIsIHYpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGVzY3JpcHRvci5fX2Rlc3RyT2JqOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAoIWRlc2NyaXB0b3Iud3JpdGFibGUpIHsKICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSB0aHJvdyBpbiBzdHJpY3QgbW9kZSwgYnV0IGNsYXNzIGJvZGllcyBhcmUKICAgICAgICAgICAgLy8gYWx3YXlzIHN0cmljdCBhbmQgcHJpdmF0ZSBmaWVsZHMgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUKICAgICAgICAgICAgLy8gY2xhc3MgYm9kaWVzLgogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkZXNjcmlwdG9yOwogICAgfQp9CmZ1bmN0aW9uIF9jbGFzc19hcHBseV9kZXNjcmlwdG9yX2dldChyZWNlaXZlciwgZGVzY3JpcHRvcikgewogICAgaWYgKGRlc2NyaXB0b3IuZ2V0KSB7CiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3IuZ2V0LmNhbGwocmVjZWl2ZXIpOwogICAgfQogICAgcmV0dXJuIGRlc2NyaXB0b3IudmFsdWU7Cn0KZnVuY3Rpb24gX2NsYXNzX2FwcGx5X2Rlc2NyaXB0b3Jfc2V0KHJlY2VpdmVyLCBkZXNjcmlwdG9yLCB2YWx1ZSkgewogICAgaWYgKGRlc2NyaXB0b3Iuc2V0KSB7CiAgICAgICAgZGVzY3JpcHRvci5zZXQuY2FsbChyZWNlaXZlciwgdmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAoIWRlc2NyaXB0b3Iud3JpdGFibGUpIHsKICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSB0aHJvdyBpbiBzdHJpY3QgbW9kZSwgYnV0IGNsYXNzIGJvZGllcyBhcmUKICAgICAgICAgICAgLy8gYWx3YXlzIHN0cmljdCBhbmQgcHJpdmF0ZSBmaWVsZHMgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUKICAgICAgICAgICAgLy8gY2xhc3MgYm9kaWVzLgogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7CiAgICAgICAgfQogICAgICAgIGRlc2NyaXB0b3IudmFsdWUgPSB2YWx1ZTsKICAgIH0KfQpmdW5jdGlvbiBfY2xhc3NfYXBwbHlfZGVzY3JpcHRvcl91cGRhdGUocmVjZWl2ZXIsIGRlc2NyaXB0b3IpIHsKICAgIGlmIChkZXNjcmlwdG9yLnNldCkgewogICAgICAgIGlmICghZGVzY3JpcHRvci5nZXQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHJlYWQgc2V0IG9ubHkgcHJpdmF0ZSBmaWVsZCIpOwogICAgICAgIH0KICAgICAgICBpZiAoISgiX19kZXN0cldyYXBwZXIiIGluIGRlc2NyaXB0b3IpKSB7CiAgICAgICAgICAgIGRlc2NyaXB0b3IuX19kZXN0cldyYXBwZXIgPSB7CiAgICAgICAgICAgICAgICBzZXQgdmFsdWUodikgewogICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0LmNhbGwocmVjZWl2ZXIsIHYpOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGdldCB2YWx1ZSgpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvci5nZXQuY2FsbChyZWNlaXZlcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIHJldHVybiBkZXNjcmlwdG9yLl9fZGVzdHJXcmFwcGVyOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAoIWRlc2NyaXB0b3Iud3JpdGFibGUpIHsKICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSB0aHJvdyBpbiBzdHJpY3QgbW9kZSwgYnV0IGNsYXNzIGJvZGllcyBhcmUKICAgICAgICAgICAgLy8gYWx3YXlzIHN0cmljdCBhbmQgcHJpdmF0ZSBmaWVsZHMgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUKICAgICAgICAgICAgLy8gY2xhc3MgYm9kaWVzLgogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkZXNjcmlwdG9yOwogICAgfQp9CmZ1bmN0aW9uIF9jbGFzc19jYWxsX2NoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgewogICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsKICAgIH0KfQpmdW5jdGlvbiBfY2xhc3NfY2hlY2tfcHJpdmF0ZV9zdGF0aWNfZmllbGRfZGVzY3JpcHRvcihkZXNjcmlwdG9yLCBhY3Rpb24pIHsKICAgIGlmIChkZXNjcmlwdG9yID09PSB1bmRlZmluZWQpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIiArIGFjdGlvbiArICIgcHJpdmF0ZSBzdGF0aWMgZmllbGQgYmVmb3JlIGl0cyBkZWNsYXJhdGlvbiIpOwogICAgfQp9CmZ1bmN0aW9uIF9jbGFzc19leHRyYWN0X2ZpZWxkX2Rlc2NyaXB0b3IocmVjZWl2ZXIsIHByaXZhdGVNYXAsIGFjdGlvbikgewogICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIiArIGFjdGlvbiArICIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTsKICAgIH0KICAgIHJldHVybiBwcml2YXRlTWFwLmdldChyZWNlaXZlcik7Cn0KZnVuY3Rpb24gX2NsYXNzX25hbWVfdGR6X2Vycm9yKG5hbWUpIHsKICAgIHRocm93IG5ldyBFcnJvcigiQ2xhc3MgXCIiICsgbmFtZSArICJcIiBjYW5ub3QgYmUgcmVmZXJlbmNlZCBpbiBjb21wdXRlZCBwcm9wZXJ0eSBrZXlzLiIpOwp9CmZ1bmN0aW9uIF9jbGFzc19wcml2YXRlX2ZpZWxkX2dldChyZWNlaXZlciwgcHJpdmF0ZU1hcCkgewogICAgdmFyIGRlc2NyaXB0b3IgPSBfY2xhc3NfZXh0cmFjdF9maWVsZF9kZXNjcmlwdG9yKHJlY2VpdmVyLCBwcml2YXRlTWFwLCAiZ2V0Iik7CiAgICByZXR1cm4gX2NsYXNzX2FwcGx5X2Rlc2NyaXB0b3JfZ2V0KHJlY2VpdmVyLCBkZXNjcmlwdG9yKTsKfQpmdW5jdGlvbiBfY2xhc3NfcHJpdmF0ZV9maWVsZF9pbml0KG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHsKICAgIF9jaGVja19wcml2YXRlX3JlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlTWFwKTsKICAgIHByaXZhdGVNYXAuc2V0KG9iaiwgdmFsdWUpOwp9CmZ1bmN0aW9uIF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UocmVjZWl2ZXIsIHByaXZhdGVLZXkpIHsKICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlY2VpdmVyLCBwcml2YXRlS2V5KSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byB1c2UgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTsKICAgIH0KICAgIHJldHVybiByZWNlaXZlcjsKfQp2YXIgaWQgPSAwOwpmdW5jdGlvbiBfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9rZXkobmFtZSkgewogICAgcmV0dXJuICJfX3ByaXZhdGVfIiArIGlkKysgKyAiXyIgKyBuYW1lOwp9CmZ1bmN0aW9uIF9jbGFzc19wcml2YXRlX2ZpZWxkX3NldChyZWNlaXZlciwgcHJpdmF0ZU1hcCwgdmFsdWUpIHsKICAgIHZhciBkZXNjcmlwdG9yID0gX2NsYXNzX2V4dHJhY3RfZmllbGRfZGVzY3JpcHRvcihyZWNlaXZlciwgcHJpdmF0ZU1hcCwgInNldCIpOwogICAgX2NsYXNzX2FwcGx5X2Rlc2NyaXB0b3Jfc2V0KHJlY2VpdmVyLCBkZXNjcmlwdG9yLCB2YWx1ZSk7CiAgICByZXR1cm4gdmFsdWU7Cn0KZnVuY3Rpb24gX2NsYXNzX3ByaXZhdGVfZmllbGRfdXBkYXRlKHJlY2VpdmVyLCBwcml2YXRlTWFwKSB7CiAgICB2YXIgZGVzY3JpcHRvciA9IF9jbGFzc19leHRyYWN0X2ZpZWxkX2Rlc2NyaXB0b3IocmVjZWl2ZXIsIHByaXZhdGVNYXAsICJ1cGRhdGUiKTsKICAgIHJldHVybiBfY2xhc3NfYXBwbHlfZGVzY3JpcHRvcl91cGRhdGUocmVjZWl2ZXIsIGRlc2NyaXB0b3IpOwp9CmZ1bmN0aW9uIF9jbGFzc19wcml2YXRlX21ldGhvZF9nZXQocmVjZWl2ZXIsIHByaXZhdGVTZXQsIGZuKSB7CiAgICBpZiAoIXByaXZhdGVTZXQuaGFzKHJlY2VpdmVyKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTsKICAgIH0KICAgIHJldHVybiBmbjsKfQpmdW5jdGlvbiBfY2xhc3NfcHJpdmF0ZV9tZXRob2RfaW5pdChvYmosIHByaXZhdGVTZXQpIHsKICAgIF9jaGVja19wcml2YXRlX3JlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsKICAgIHByaXZhdGVTZXQuYWRkKG9iaik7Cn0KZnVuY3Rpb24gX2NsYXNzX3ByaXZhdGVfbWV0aG9kX3NldCgpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byByZWFzc2lnbiBwcml2YXRlIG1ldGhvZCIpOwp9CmZ1bmN0aW9uIF9jbGFzc19zdGF0aWNfcHJpdmF0ZV9maWVsZF9zcGVjX2dldChyZWNlaXZlciwgY2xhc3NDb25zdHJ1Y3RvciwgZGVzY3JpcHRvcikgewogICAgX2NsYXNzX2NoZWNrX3ByaXZhdGVfc3RhdGljX2FjY2VzcyhyZWNlaXZlciwgY2xhc3NDb25zdHJ1Y3Rvcik7CiAgICBfY2xhc3NfY2hlY2tfcHJpdmF0ZV9zdGF0aWNfZmllbGRfZGVzY3JpcHRvcihkZXNjcmlwdG9yLCAiZ2V0Iik7CiAgICByZXR1cm4gX2NsYXNzX2FwcGx5X2Rlc2NyaXB0b3JfZ2V0KHJlY2VpdmVyLCBkZXNjcmlwdG9yKTsKfQpmdW5jdGlvbiBfY2xhc3Nfc3RhdGljX3ByaXZhdGVfZmllbGRfc3BlY19zZXQocmVjZWl2ZXIsIGNsYXNzQ29uc3RydWN0b3IsIGRlc2NyaXB0b3IsIHZhbHVlKSB7CiAgICBfY2xhc3NfY2hlY2tfcHJpdmF0ZV9zdGF0aWNfYWNjZXNzKHJlY2VpdmVyLCBjbGFzc0NvbnN0cnVjdG9yKTsKICAgIF9jbGFzc19jaGVja19wcml2YXRlX3N0YXRpY19maWVsZF9kZXNjcmlwdG9yKGRlc2NyaXB0b3IsICJzZXQiKTsKICAgIF9jbGFzc19hcHBseV9kZXNjcmlwdG9yX3NldChyZWNlaXZlciwgZGVzY3JpcHRvciwgdmFsdWUpOwogICAgcmV0dXJuIHZhbHVlOwp9CmZ1bmN0aW9uIF9jbGFzc19zdGF0aWNfcHJpdmF0ZV9maWVsZF91cGRhdGUocmVjZWl2ZXIsIGNsYXNzQ29uc3RydWN0b3IsIGRlc2NyaXB0b3IpIHsKICAgIF9jbGFzc19jaGVja19wcml2YXRlX3N0YXRpY19hY2Nlc3MocmVjZWl2ZXIsIGNsYXNzQ29uc3RydWN0b3IpOwogICAgX2NsYXNzX2NoZWNrX3ByaXZhdGVfc3RhdGljX2ZpZWxkX2Rlc2NyaXB0b3IoZGVzY3JpcHRvciwgInVwZGF0ZSIpOwogICAgcmV0dXJuIF9jbGFzc19hcHBseV9kZXNjcmlwdG9yX3VwZGF0ZShyZWNlaXZlciwgZGVzY3JpcHRvcik7Cn0KZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7CiAgICBpZiAoX2lzX25hdGl2ZV9yZWZsZWN0X2NvbnN0cnVjdCgpKSB7CiAgICAgICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0OwogICAgfSBlbHNlIHsKICAgICAgICBfY29uc3RydWN0ID0gZnVuY3Rpb24gY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHsKICAgICAgICAgICAgdmFyIGEgPSBbbnVsbF07CiAgICAgICAgICAgIGEucHVzaC5hcHBseShhLCBhcmdzKTsKICAgICAgICAgICAgdmFyIENvbnN0cnVjdG9yID0gRnVuY3Rpb24uYmluZC5hcHBseShQYXJlbnQsIGEpOwogICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTsKICAgICAgICAgICAgaWYgKENsYXNzKSBfc2V0X3Byb3RvdHlwZV9vZihpbnN0YW5jZSwgQ2xhc3MucHJvdG90eXBlKTsKICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgICAgIH07CiAgICB9CiAgICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpOwp9CmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOwogICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsKICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7CiAgICAgICAgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOwogICAgfQp9CmZ1bmN0aW9uIF9jcmVhdGVfY2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7CiAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsKICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsKICAgIHJldHVybiBDb25zdHJ1Y3RvcjsKfQpmdW5jdGlvbiBfZGVjb3JhdGUoZGVjb3JhdG9ycywgZmFjdG9yeSwgc3VwZXJDbGFzcykgewogICAgdmFyIHIgPSBmYWN0b3J5KGZ1bmN0aW9uIGluaXRpYWxpemUoTykgewogICAgICAgIF9pbml0aWFsaXplSW5zdGFuY2VFbGVtZW50cyhPLCBkZWNvcmF0ZWQuZWxlbWVudHMpOwogICAgfSwgc3VwZXJDbGFzcyk7CiAgICB2YXIgZGVjb3JhdGVkID0gX2RlY29yYXRlQ2xhc3MoX2NvYWxlc2NlQ2xhc3NFbGVtZW50cyhyLmQubWFwKF9jcmVhdGVFbGVtZW50RGVzY3JpcHRvcikpLCBkZWNvcmF0b3JzKTsKICAgIF9pbml0aWFsaXplQ2xhc3NFbGVtZW50cyhyLkYsIGRlY29yYXRlZC5lbGVtZW50cyk7CiAgICByZXR1cm4gX3J1bkNsYXNzRmluaXNoZXJzKHIuRiwgZGVjb3JhdGVkLmZpbmlzaGVycyk7Cn0KCmZ1bmN0aW9uIF9jcmVhdGVFbGVtZW50RGVzY3JpcHRvcihkZWYpIHsKICAgIHZhciBrZXkgPSBfdG9fcHJvcGVydHlfa2V5KGRlZi5rZXkpOwogICAgdmFyIGRlc2NyaXB0b3I7CiAgICBpZiAoZGVmLmtpbmQgPT09ICJtZXRob2QiKSB7CiAgICAgICAgZGVzY3JpcHRvciA9IHsgdmFsdWU6IGRlZi52YWx1ZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UgfTsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVmLnZhbHVlLCAibmFtZSIsIHsgdmFsdWU6IF90eXBlX29mKGtleSkgPT09ICJzeW1ib2wiID8gIiIgOiBrZXksIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTsKICAgIH0gZWxzZSBpZiAoZGVmLmtpbmQgPT09ICJnZXQiKSB7CiAgICAgICAgZGVzY3JpcHRvciA9IHsgZ2V0OiBkZWYudmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UgfTsKICAgIH0gZWxzZSBpZiAoZGVmLmtpbmQgPT09ICJzZXQiKSB7CiAgICAgICAgZGVzY3JpcHRvciA9IHsgc2V0OiBkZWYudmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UgfTsKICAgIH0gZWxzZSBpZiAoZGVmLmtpbmQgPT09ICJmaWVsZCIpIHsKICAgICAgICBkZXNjcmlwdG9yID0geyBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlIH07CiAgICB9CiAgICB2YXIgZWxlbWVudCA9IHsKICAgICAgICBraW5kOiBkZWYua2luZCA9PT0gImZpZWxkIiA/ICJmaWVsZCIgOiAibWV0aG9kIiwKICAgICAgICBrZXk6IGtleSwKICAgICAgICBwbGFjZW1lbnQ6IGRlZi5zdGF0aWMgPyAic3RhdGljIiA6IGRlZi5raW5kID09PSAiZmllbGQiID8gIm93biIgOiAicHJvdG90eXBlIiwKICAgICAgICBkZXNjcmlwdG9yOiBkZXNjcmlwdG9yCiAgICB9OwogICAgaWYgKGRlZi5kZWNvcmF0b3JzKSBlbGVtZW50LmRlY29yYXRvcnMgPSBkZWYuZGVjb3JhdG9yczsKICAgIGlmIChkZWYua2luZCA9PT0gImZpZWxkIikgZWxlbWVudC5pbml0aWFsaXplciA9IGRlZi52YWx1ZTsKICAgIHJldHVybiBlbGVtZW50Owp9CmZ1bmN0aW9uIF9jb2FsZXNjZUdldHRlclNldHRlcihlbGVtZW50LCBvdGhlcikgewogICAgaWYgKGVsZW1lbnQuZGVzY3JpcHRvci5nZXQgIT09IHVuZGVmaW5lZCkgewogICAgICAgIG90aGVyLmRlc2NyaXB0b3IuZ2V0ID0gZWxlbWVudC5kZXNjcmlwdG9yLmdldDsKICAgIH0gZWxzZSB7CiAgICAgICAgb3RoZXIuZGVzY3JpcHRvci5zZXQgPSBlbGVtZW50LmRlc2NyaXB0b3Iuc2V0OwogICAgfQp9CmZ1bmN0aW9uIF9jb2FsZXNjZUNsYXNzRWxlbWVudHMoZWxlbWVudHMpIHsKICAgIHZhciBuZXdFbGVtZW50cyA9IFtdOwogICAgdmFyIGlzU2FtZUVsZW1lbnQgPSBmdW5jdGlvbiBpc1NhbWVFbGVtZW50KG90aGVyKSB7CiAgICAgICAgcmV0dXJuIG90aGVyLmtpbmQgPT09ICJtZXRob2QiICYmIG90aGVyLmtleSA9PT0gZWxlbWVudC5rZXkgJiYgb3RoZXIucGxhY2VtZW50ID09PSBlbGVtZW50LnBsYWNlbWVudDsKICAgIH07CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBlbGVtZW50c1tpXTsKICAgICAgICB2YXIgb3RoZXI7CiAgICAgICAgaWYgKGVsZW1lbnQua2luZCA9PT0gIm1ldGhvZCIgJiYgKG90aGVyID0gbmV3RWxlbWVudHMuZmluZChpc1NhbWVFbGVtZW50KSkpIHsKICAgICAgICAgICAgaWYgKF9pc0RhdGFEZXNjcmlwdG9yKGVsZW1lbnQuZGVzY3JpcHRvcikgfHwgX2lzRGF0YURlc2NyaXB0b3Iob3RoZXIuZGVzY3JpcHRvcikpIHsKICAgICAgICAgICAgICAgIGlmIChfaGFzRGVjb3JhdG9ycyhlbGVtZW50KSB8fCBfaGFzRGVjb3JhdG9ycyhvdGhlcikpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoIkR1cGxpY2F0ZWQgbWV0aG9kcyAoIiArIGVsZW1lbnQua2V5ICsgIikgY2FuJ3QgYmUgZGVjb3JhdGVkLiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgb3RoZXIuZGVzY3JpcHRvciA9IGVsZW1lbnQuZGVzY3JpcHRvcjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChfaGFzRGVjb3JhdG9ycyhlbGVtZW50KSkgewogICAgICAgICAgICAgICAgICAgIGlmIChfaGFzRGVjb3JhdG9ycyhvdGhlcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlY29yYXRvcnMgY2FuJ3QgYmUgcGxhY2VkIG9uIGRpZmZlcmVudCBhY2Nlc3NvcnMgd2l0aCBmb3IgIiArICJ0aGUgc2FtZSBwcm9wZXJ0eSAoIiArIGVsZW1lbnQua2V5ICsgIikuIgogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBvdGhlci5kZWNvcmF0b3JzID0gZWxlbWVudC5kZWNvcmF0b3JzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX2NvYWxlc2NlR2V0dGVyU2V0dGVyKGVsZW1lbnQsIG90aGVyKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5ld0VsZW1lbnRzLnB1c2goZWxlbWVudCk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ld0VsZW1lbnRzOwp9CmZ1bmN0aW9uIF9oYXNEZWNvcmF0b3JzKGVsZW1lbnQpIHsKICAgIHJldHVybiBlbGVtZW50LmRlY29yYXRvcnMgJiYgZWxlbWVudC5kZWNvcmF0b3JzLmxlbmd0aDsKfQpmdW5jdGlvbiBfaXNEYXRhRGVzY3JpcHRvcihkZXNjKSB7CiAgICByZXR1cm4gZGVzYyAhPT0gdW5kZWZpbmVkICYmICEoZGVzYy52YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlc2Mud3JpdGFibGUgPT09IHVuZGVmaW5lZCk7Cn0KZnVuY3Rpb24gX2luaXRpYWxpemVDbGFzc0VsZW1lbnRzKEYsIGVsZW1lbnRzKSB7CiAgICB2YXIgcHJvdG8gPSBGLnByb3RvdHlwZTsKICAgIFsibWV0aG9kIiwgImZpZWxkIl0uZm9yRWFjaChmdW5jdGlvbihraW5kKSB7CiAgICAgICAgZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7CiAgICAgICAgICAgIHZhciBwbGFjZW1lbnQgPSBlbGVtZW50LnBsYWNlbWVudDsKICAgICAgICAgICAgaWYgKGVsZW1lbnQua2luZCA9PT0ga2luZCAmJiAocGxhY2VtZW50ID09PSAic3RhdGljIiB8fCBwbGFjZW1lbnQgPT09ICJwcm90b3R5cGUiKSkgewogICAgICAgICAgICAgICAgdmFyIHJlY2VpdmVyID0gcGxhY2VtZW50ID09PSAic3RhdGljIiA/IEYgOiBwcm90bzsKICAgICAgICAgICAgICAgIF9kZWZpbmVDbGFzc0VsZW1lbnQocmVjZWl2ZXIsIGVsZW1lbnQpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKfQpmdW5jdGlvbiBfaW5pdGlhbGl6ZUluc3RhbmNlRWxlbWVudHMoTywgZWxlbWVudHMpIHsKICAgIFsibWV0aG9kIiwgImZpZWxkIl0uZm9yRWFjaChmdW5jdGlvbihraW5kKSB7CiAgICAgICAgZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7CiAgICAgICAgICAgIGlmIChlbGVtZW50LmtpbmQgPT09IGtpbmQgJiYgZWxlbWVudC5wbGFjZW1lbnQgPT09ICJvd24iKSB7CiAgICAgICAgICAgICAgICBfZGVmaW5lQ2xhc3NFbGVtZW50KE8sIGVsZW1lbnQpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKfQpmdW5jdGlvbiBfZGVmaW5lQ2xhc3NFbGVtZW50KHJlY2VpdmVyLCBlbGVtZW50KSB7CiAgICB2YXIgZGVzY3JpcHRvciA9IGVsZW1lbnQuZGVzY3JpcHRvcjsKICAgIGlmIChlbGVtZW50LmtpbmQgPT09ICJmaWVsZCIpIHsKICAgICAgICB2YXIgaW5pdGlhbGl6ZXIgPSBlbGVtZW50LmluaXRpYWxpemVyOwogICAgICAgIGRlc2NyaXB0b3IgPSB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IGRlc2NyaXB0b3IuZW51bWVyYWJsZSwKICAgICAgICAgICAgd3JpdGFibGU6IGRlc2NyaXB0b3Iud3JpdGFibGUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZGVzY3JpcHRvci5jb25maWd1cmFibGUsCiAgICAgICAgICAgIHZhbHVlOiBpbml0aWFsaXplciA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5pdGlhbGl6ZXIuY2FsbChyZWNlaXZlcikKICAgICAgICB9OwogICAgfQogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlY2VpdmVyLCBlbGVtZW50LmtleSwgZGVzY3JpcHRvcik7Cn0KZnVuY3Rpb24gX2RlY29yYXRlQ2xhc3MoZWxlbWVudHMsIGRlY29yYXRvcnMpIHsKICAgIHZhciBuZXdFbGVtZW50cyA9IFtdOwogICAgdmFyIGZpbmlzaGVycyA9IFtdOwogICAgdmFyIHBsYWNlbWVudHMgPSB7IHN0YXRpYzogW10sIHByb3RvdHlwZTogW10sIG93bjogW10gfTsKICAgIGVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkgewogICAgICAgIF9hZGRFbGVtZW50UGxhY2VtZW50KGVsZW1lbnQsIHBsYWNlbWVudHMpOwogICAgfSk7CiAgICBlbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgICAgICBpZiAoIV9oYXNEZWNvcmF0b3JzKGVsZW1lbnQpKSByZXR1cm4gbmV3RWxlbWVudHMucHVzaChlbGVtZW50KTsKICAgICAgICB2YXIgZWxlbWVudEZpbmlzaGVyc0V4dHJhcyA9IF9kZWNvcmF0ZUVsZW1lbnQoZWxlbWVudCwgcGxhY2VtZW50cyk7CiAgICAgICAgbmV3RWxlbWVudHMucHVzaChlbGVtZW50RmluaXNoZXJzRXh0cmFzLmVsZW1lbnQpOwogICAgICAgIG5ld0VsZW1lbnRzLnB1c2guYXBwbHkobmV3RWxlbWVudHMsIGVsZW1lbnRGaW5pc2hlcnNFeHRyYXMuZXh0cmFzKTsKICAgICAgICBmaW5pc2hlcnMucHVzaC5hcHBseShmaW5pc2hlcnMsIGVsZW1lbnRGaW5pc2hlcnNFeHRyYXMuZmluaXNoZXJzKTsKICAgIH0pOwogICAgaWYgKCFkZWNvcmF0b3JzKSB7CiAgICAgICAgcmV0dXJuIHsgZWxlbWVudHM6IG5ld0VsZW1lbnRzLCBmaW5pc2hlcnM6IGZpbmlzaGVycyB9OwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9kZWNvcmF0ZUNvbnN0cnVjdG9yKG5ld0VsZW1lbnRzLCBkZWNvcmF0b3JzKTsKICAgIGZpbmlzaGVycy5wdXNoLmFwcGx5KGZpbmlzaGVycywgcmVzdWx0LmZpbmlzaGVycyk7CiAgICByZXN1bHQuZmluaXNoZXJzID0gZmluaXNoZXJzOwogICAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBfYWRkRWxlbWVudFBsYWNlbWVudChlbGVtZW50LCBwbGFjZW1lbnRzLCBzaWxlbnQpIHsKICAgIHZhciBrZXlzID0gcGxhY2VtZW50c1tlbGVtZW50LnBsYWNlbWVudF07CiAgICBpZiAoIXNpbGVudCAmJiBrZXlzLmluZGV4T2YoZWxlbWVudC5rZXkpICE9PSAtMSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkR1cGxpY2F0ZWQgZWxlbWVudCAoIiArIGVsZW1lbnQua2V5ICsgIikiKTsKICAgIH0KICAgIGtleXMucHVzaChlbGVtZW50LmtleSk7Cn0KZnVuY3Rpb24gX2RlY29yYXRlRWxlbWVudChlbGVtZW50LCBwbGFjZW1lbnRzKSB7CiAgICB2YXIgZXh0cmFzID0gW107CiAgICB2YXIgZmluaXNoZXJzID0gW107CiAgICBmb3IgKHZhciBkZWNvcmF0b3JzID0gZWxlbWVudC5kZWNvcmF0b3JzLCBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIHZhciBrZXlzID0gcGxhY2VtZW50c1tlbGVtZW50LnBsYWNlbWVudF07CiAgICAgICAga2V5cy5zcGxpY2Uoa2V5cy5pbmRleE9mKGVsZW1lbnQua2V5KSwgMSk7CiAgICAgICAgdmFyIGVsZW1lbnRPYmplY3QgPSBfZnJvbUVsZW1lbnREZXNjcmlwdG9yKGVsZW1lbnQpOwogICAgICAgIHZhciBlbGVtZW50RmluaXNoZXJFeHRyYXMgPSBfdG9FbGVtZW50RmluaXNoZXJFeHRyYXMoKDAsIGRlY29yYXRvcnNbaV0pKGVsZW1lbnRPYmplY3QpIHx8IGVsZW1lbnRPYmplY3QpOwogICAgICAgIGVsZW1lbnQgPSBlbGVtZW50RmluaXNoZXJFeHRyYXMuZWxlbWVudDsKICAgICAgICBfYWRkRWxlbWVudFBsYWNlbWVudChlbGVtZW50LCBwbGFjZW1lbnRzKTsKICAgICAgICBpZiAoZWxlbWVudEZpbmlzaGVyRXh0cmFzLmZpbmlzaGVyKSB7CiAgICAgICAgICAgIGZpbmlzaGVycy5wdXNoKGVsZW1lbnRGaW5pc2hlckV4dHJhcy5maW5pc2hlcik7CiAgICAgICAgfQogICAgICAgIHZhciBuZXdFeHRyYXMgPSBlbGVtZW50RmluaXNoZXJFeHRyYXMuZXh0cmFzOwogICAgICAgIGlmIChuZXdFeHRyYXMpIHsKICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuZXdFeHRyYXMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICAgIF9hZGRFbGVtZW50UGxhY2VtZW50KG5ld0V4dHJhc1tqXSwgcGxhY2VtZW50cyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXh0cmFzLnB1c2guYXBwbHkoZXh0cmFzLCBuZXdFeHRyYXMpOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiB7IGVsZW1lbnQ6IGVsZW1lbnQsIGZpbmlzaGVyczogZmluaXNoZXJzLCBleHRyYXM6IGV4dHJhcyB9Owp9CmZ1bmN0aW9uIF9kZWNvcmF0ZUNvbnN0cnVjdG9yKGVsZW1lbnRzLCBkZWNvcmF0b3JzKSB7CiAgICB2YXIgZmluaXNoZXJzID0gW107CiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIHZhciBvYmogPSBfZnJvbUNsYXNzRGVzY3JpcHRvcihlbGVtZW50cyk7CiAgICAgICAgdmFyIGVsZW1lbnRzQW5kRmluaXNoZXIgPSBfdG9DbGFzc0Rlc2NyaXB0b3IoKDAsIGRlY29yYXRvcnNbaV0pKG9iaikgfHwgb2JqKTsKICAgICAgICBpZiAoZWxlbWVudHNBbmRGaW5pc2hlci5maW5pc2hlciAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIGZpbmlzaGVycy5wdXNoKGVsZW1lbnRzQW5kRmluaXNoZXIuZmluaXNoZXIpOwogICAgICAgIH0KICAgICAgICBpZiAoZWxlbWVudHNBbmRGaW5pc2hlci5lbGVtZW50cyAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIGVsZW1lbnRzID0gZWxlbWVudHNBbmRGaW5pc2hlci5lbGVtZW50czsKICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBlbGVtZW50cy5sZW5ndGggLSAxOyBqKyspIHsKICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSBqICsgMTsgayA8IGVsZW1lbnRzLmxlbmd0aDsgaysrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzW2pdLmtleSA9PT0gZWxlbWVudHNba10ua2V5ICYmIGVsZW1lbnRzW2pdLnBsYWNlbWVudCA9PT0gZWxlbWVudHNba10ucGxhY2VtZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkR1cGxpY2F0ZWQgZWxlbWVudCAoIiArIGVsZW1lbnRzW2pdLmtleSArICIpIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHsgZWxlbWVudHM6IGVsZW1lbnRzLCBmaW5pc2hlcnM6IGZpbmlzaGVycyB9Owp9CmZ1bmN0aW9uIF9mcm9tRWxlbWVudERlc2NyaXB0b3IoZWxlbWVudCkgewogICAgdmFyIG9iaiA9IHsga2luZDogZWxlbWVudC5raW5kLCBrZXk6IGVsZW1lbnQua2V5LCBwbGFjZW1lbnQ6IGVsZW1lbnQucGxhY2VtZW50LCBkZXNjcmlwdG9yOiBlbGVtZW50LmRlc2NyaXB0b3IgfTsKICAgIHZhciBkZXNjID0geyB2YWx1ZTogIkRlc2NyaXB0b3IiLCBjb25maWd1cmFibGU6IHRydWUgfTsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIFN5bWJvbC50b1N0cmluZ1RhZywgZGVzYyk7CiAgICBpZiAoZWxlbWVudC5raW5kID09PSAiZmllbGQiKSBvYmouaW5pdGlhbGl6ZXIgPSBlbGVtZW50LmluaXRpYWxpemVyOwogICAgcmV0dXJuIG9iajsKfQpmdW5jdGlvbiBfdG9FbGVtZW50RGVzY3JpcHRvcnMoZWxlbWVudE9iamVjdHMpIHsKICAgIGlmIChlbGVtZW50T2JqZWN0cyA9PT0gdW5kZWZpbmVkKSByZXR1cm47CiAgICByZXR1cm4gX3RvX2FycmF5KGVsZW1lbnRPYmplY3RzKS5tYXAoZnVuY3Rpb24oZWxlbWVudE9iamVjdCkgewogICAgICAgIHZhciBlbGVtZW50ID0gX3RvRWxlbWVudERlc2NyaXB0b3IoZWxlbWVudE9iamVjdCk7CiAgICAgICAgX2Rpc2FsbG93UHJvcGVydHkoZWxlbWVudE9iamVjdCwgImZpbmlzaGVyIiwgIkFuIGVsZW1lbnQgZGVzY3JpcHRvciIpOwogICAgICAgIF9kaXNhbGxvd1Byb3BlcnR5KGVsZW1lbnRPYmplY3QsICJleHRyYXMiLCAiQW4gZWxlbWVudCBkZXNjcmlwdG9yIik7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9KTsKfQpmdW5jdGlvbiBfdG9FbGVtZW50RGVzY3JpcHRvcihlbGVtZW50T2JqZWN0KSB7CiAgICB2YXIga2luZCA9IFN0cmluZyhlbGVtZW50T2JqZWN0LmtpbmQpOwogICAgaWYgKGtpbmQgIT09ICJtZXRob2QiICYmIGtpbmQgIT09ICJmaWVsZCIpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKAogICAgICAgICAgICAiQW4gZWxlbWVudCBkZXNjcmlwdG9yJ3MgLmtpbmQgcHJvcGVydHkgbXVzdCBiZSBlaXRoZXIgXCJtZXRob2RcIiBvciIKICAgICAgICAgICAgICAgICsgIiBcImZpZWxkXCIsIGJ1dCBhIGRlY29yYXRvciBjcmVhdGVkIGFuIGVsZW1lbnQgZGVzY3JpcHRvciB3aXRoIiArICIgLmtpbmQgXCIiICsga2luZCArICJcIiIKICAgICAgICApOwogICAgfQogICAgdmFyIGtleSA9IF90b19wcm9wZXJ0eV9rZXkoZWxlbWVudE9iamVjdC5rZXkpOwogICAgdmFyIHBsYWNlbWVudCA9IFN0cmluZyhlbGVtZW50T2JqZWN0LnBsYWNlbWVudCk7CiAgICBpZiAocGxhY2VtZW50ICE9PSAic3RhdGljIiAmJiBwbGFjZW1lbnQgIT09ICJwcm90b3R5cGUiICYmIHBsYWNlbWVudCAhPT0gIm93biIpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKAogICAgICAgICAgICAiQW4gZWxlbWVudCBkZXNjcmlwdG9yJ3MgLnBsYWNlbWVudCBwcm9wZXJ0eSBtdXN0IGJlIG9uZSBvZiBcInN0YXRpY1wiLCIKICAgICAgICAgICAgICAgICsgIiBcInByb3RvdHlwZVwiIG9yIFwib3duXCIsIGJ1dCBhIGRlY29yYXRvciBjcmVhdGVkIGFuIGVsZW1lbnQgZGVzY3JpcHRvciIgKyAiIHdpdGggLnBsYWNlbWVudCBcIiIgKyBwbGFjZW1lbnQgKyAiXCIiCiAgICAgICAgKTsKICAgIH0KICAgIHZhciBkZXNjcmlwdG9yID0gZWxlbWVudE9iamVjdC5kZXNjcmlwdG9yOwogICAgX2Rpc2FsbG93UHJvcGVydHkoZWxlbWVudE9iamVjdCwgImVsZW1lbnRzIiwgIkFuIGVsZW1lbnQgZGVzY3JpcHRvciIpOwogICAgdmFyIGVsZW1lbnQgPSB7IGtpbmQ6IGtpbmQsIGtleToga2V5LCBwbGFjZW1lbnQ6IHBsYWNlbWVudCwgZGVzY3JpcHRvcjogT2JqZWN0LmFzc2lnbih7fSwgZGVzY3JpcHRvcikgfTsKICAgIGlmIChraW5kICE9PSAiZmllbGQiKSB7CiAgICAgICAgX2Rpc2FsbG93UHJvcGVydHkoZWxlbWVudE9iamVjdCwgImluaXRpYWxpemVyIiwgIkEgbWV0aG9kIGRlc2NyaXB0b3IiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgX2Rpc2FsbG93UHJvcGVydHkoZGVzY3JpcHRvciwgImdldCIsICJUaGUgcHJvcGVydHkgZGVzY3JpcHRvciBvZiBhIGZpZWxkIGRlc2NyaXB0b3IiKTsKICAgICAgICBfZGlzYWxsb3dQcm9wZXJ0eShkZXNjcmlwdG9yLCAic2V0IiwgIlRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIG9mIGEgZmllbGQgZGVzY3JpcHRvciIpOwogICAgICAgIF9kaXNhbGxvd1Byb3BlcnR5KGRlc2NyaXB0b3IsICJ2YWx1ZSIsICJUaGUgcHJvcGVydHkgZGVzY3JpcHRvciBvZiBhIGZpZWxkIGRlc2NyaXB0b3IiKTsKICAgICAgICBlbGVtZW50LmluaXRpYWxpemVyID0gZWxlbWVudE9iamVjdC5pbml0aWFsaXplcjsKICAgIH0KICAgIHJldHVybiBlbGVtZW50Owp9CmZ1bmN0aW9uIF90b0VsZW1lbnRGaW5pc2hlckV4dHJhcyhlbGVtZW50T2JqZWN0KSB7CiAgICB2YXIgZWxlbWVudCA9IF90b0VsZW1lbnREZXNjcmlwdG9yKGVsZW1lbnRPYmplY3QpOwogICAgdmFyIGZpbmlzaGVyID0gX29wdGlvbmFsQ2FsbGFibGVQcm9wZXJ0eShlbGVtZW50T2JqZWN0LCAiZmluaXNoZXIiKTsKICAgIHZhciBleHRyYXMgPSBfdG9FbGVtZW50RGVzY3JpcHRvcnMoZWxlbWVudE9iamVjdC5leHRyYXMpOwogICAgcmV0dXJuIHsgZWxlbWVudDogZWxlbWVudCwgZmluaXNoZXI6IGZpbmlzaGVyLCBleHRyYXM6IGV4dHJhcyB9Owp9CmZ1bmN0aW9uIF9mcm9tQ2xhc3NEZXNjcmlwdG9yKGVsZW1lbnRzKSB7CiAgICB2YXIgb2JqID0geyBraW5kOiAiY2xhc3MiLCBlbGVtZW50czogZWxlbWVudHMubWFwKF9mcm9tRWxlbWVudERlc2NyaXB0b3IpIH07CiAgICB2YXIgZGVzYyA9IHsgdmFsdWU6ICJEZXNjcmlwdG9yIiwgY29uZmlndXJhYmxlOiB0cnVlIH07CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBTeW1ib2wudG9TdHJpbmdUYWcsIGRlc2MpOwogICAgcmV0dXJuIG9iajsKfQpmdW5jdGlvbiBfdG9DbGFzc0Rlc2NyaXB0b3Iob2JqKSB7CiAgICB2YXIga2luZCA9IFN0cmluZyhvYmoua2luZCk7CiAgICBpZiAoa2luZCAhPT0gImNsYXNzIikgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoCiAgICAgICAgICAgICJBIGNsYXNzIGRlc2NyaXB0b3IncyAua2luZCBwcm9wZXJ0eSBtdXN0IGJlIFwiY2xhc3NcIiwgYnV0IGEgZGVjb3JhdG9yIiArICIgY3JlYXRlZCBhIGNsYXNzIGRlc2NyaXB0b3Igd2l0aCAua2luZCBcIiIgKyBraW5kCiAgICAgICAgICAgICAgICArICJcIiIKICAgICAgICApOwogICAgfQogICAgX2Rpc2FsbG93UHJvcGVydHkob2JqLCAia2V5IiwgIkEgY2xhc3MgZGVzY3JpcHRvciIpOwogICAgX2Rpc2FsbG93UHJvcGVydHkob2JqLCAicGxhY2VtZW50IiwgIkEgY2xhc3MgZGVzY3JpcHRvciIpOwogICAgX2Rpc2FsbG93UHJvcGVydHkob2JqLCAiZGVzY3JpcHRvciIsICJBIGNsYXNzIGRlc2NyaXB0b3IiKTsKICAgIF9kaXNhbGxvd1Byb3BlcnR5KG9iaiwgImluaXRpYWxpemVyIiwgIkEgY2xhc3MgZGVzY3JpcHRvciIpOwogICAgX2Rpc2FsbG93UHJvcGVydHkob2JqLCAiZXh0cmFzIiwgIkEgY2xhc3MgZGVzY3JpcHRvciIpOwogICAgdmFyIGZpbmlzaGVyID0gX29wdGlvbmFsQ2FsbGFibGVQcm9wZXJ0eShvYmosICJmaW5pc2hlciIpOwogICAgdmFyIGVsZW1lbnRzID0gX3RvRWxlbWVudERlc2NyaXB0b3JzKG9iai5lbGVtZW50cyk7CiAgICByZXR1cm4geyBlbGVtZW50czogZWxlbWVudHMsIGZpbmlzaGVyOiBmaW5pc2hlciB9Owp9CmZ1bmN0aW9uIF9kaXNhbGxvd1Byb3BlcnR5KG9iaiwgbmFtZSwgb2JqZWN0VHlwZSkgewogICAgaWYgKG9ialtuYW1lXSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihvYmplY3RUeXBlICsgIiBjYW4ndCBoYXZlIGEgLiIgKyBuYW1lICsgIiBwcm9wZXJ0eS4iKTsKICAgIH0KfQpmdW5jdGlvbiBfb3B0aW9uYWxDYWxsYWJsZVByb3BlcnR5KG9iaiwgbmFtZSkgewogICAgdmFyIHZhbHVlID0gb2JqW25hbWVdOwogICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgJyIgKyBuYW1lICsgIicgdG8gYmUgYSBmdW5jdGlvbiIpOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwp9CmZ1bmN0aW9uIF9ydW5DbGFzc0ZpbmlzaGVycyhjb25zdHJ1Y3RvciwgZmluaXNoZXJzKSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbmlzaGVycy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBuZXdDb25zdHJ1Y3RvciA9ICgwLCBmaW5pc2hlcnNbaV0pKGNvbnN0cnVjdG9yKTsKICAgICAgICBpZiAobmV3Q29uc3RydWN0b3IgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBpZiAodHlwZW9mIG5ld0NvbnN0cnVjdG9yICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJGaW5pc2hlcnMgbXVzdCByZXR1cm4gYSBjb25zdHJ1Y3Rvci4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdHJ1Y3RvciA9IG5ld0NvbnN0cnVjdG9yOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKfQpmdW5jdGlvbiBfZGVmYXVsdHMob2JqLCBkZWZhdWx0cykgewogICAgdmFyIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhkZWZhdWx0cyk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTsKICAgICAgICB2YXIgdmFsdWUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGRlZmF1bHRzLCBrZXkpOwogICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5jb25maWd1cmFibGUgJiYgb2JqW2tleV0gPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gb2JqOwp9CmZ1bmN0aW9uIF9kZWZpbmVfZW51bWVyYWJsZV9wcm9wZXJ0aWVzKG9iaiwgZGVzY3MpIHsKICAgIGZvciAodmFyIGtleSBpbiBkZXNjcykgewogICAgICAgIHZhciBkZXNjID0gZGVzY3Nba2V5XTsKICAgICAgICBkZXNjLmNvbmZpZ3VyYWJsZSA9IGRlc2MuZW51bWVyYWJsZSA9IHRydWU7CiAgICAgICAgaWYgKCJ2YWx1ZSIgaW4gZGVzYykgZGVzYy53cml0YWJsZSA9IHRydWU7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCBkZXNjKTsKICAgIH0KICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7CiAgICAgICAgdmFyIG9iamVjdFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGRlc2NzKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdFN5bWJvbHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHN5bSA9IG9iamVjdFN5bWJvbHNbaV07CiAgICAgICAgICAgIHZhciBkZXNjID0gZGVzY3Nbc3ltXTsKICAgICAgICAgICAgZGVzYy5jb25maWd1cmFibGUgPSBkZXNjLmVudW1lcmFibGUgPSB0cnVlOwogICAgICAgICAgICBpZiAoInZhbHVlIiBpbiBkZXNjKSBkZXNjLndyaXRhYmxlID0gdHJ1ZTsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgc3ltLCBkZXNjKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gb2JqOwp9CmZ1bmN0aW9uIF9kZWZpbmVfcHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7CiAgICBpZiAoa2V5IGluIG9iaikgewogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7CiAgICB9IGVsc2UgewogICAgICAgIG9ialtrZXldID0gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gb2JqOwp9CmZ1bmN0aW9uIF9leHBvcnRfc3Rhcihmcm9tLCB0bykgewogICAgT2JqZWN0LmtleXMoZnJvbSkuZm9yRWFjaChmdW5jdGlvbihrKSB7CiAgICAgICAgaWYgKGsgIT09ICJkZWZhdWx0IiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRvLCBrKSkgewogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodG8sIGssIHsKICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmcm9tW2tdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9KTsKICAgIHJldHVybiBmcm9tOwp9CmZ1bmN0aW9uIF9leHRlbmRzKCkgewogICAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHRhcmdldCkgewogICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsKICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7CiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdGFyZ2V0OwogICAgfTsKICAgIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwp9CmZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsKICAgIGlmICh0eXBlb2YgUmVmbGVjdCAhPT0gInVuZGVmaW5lZCIgJiYgUmVmbGVjdC5nZXQpIHsKICAgICAgICBfZ2V0ID0gUmVmbGVjdC5nZXQ7CiAgICB9IGVsc2UgewogICAgICAgIF9nZXQgPSBmdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsKICAgICAgICAgICAgdmFyIGJhc2UgPSBfc3VwZXJfcHJvcF9iYXNlKHRhcmdldCwgcHJvcGVydHkpOwogICAgICAgICAgICBpZiAoIWJhc2UpIHJldHVybjsKICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTsKICAgICAgICAgICAgaWYgKGRlc2MuZ2V0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZGVzYy5nZXQuY2FsbChyZWNlaXZlciB8fCB0YXJnZXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlOwogICAgICAgIH07CiAgICB9CiAgICByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpOwp9CmZ1bmN0aW9uIF9nZXRfcHJvdG90eXBlX29mKG8pIHsKICAgIF9nZXRfcHJvdG90eXBlX29mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YobykgewogICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7CiAgICB9OwogICAgcmV0dXJuIF9nZXRfcHJvdG90eXBlX29mKG8pOwp9CmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgewogICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAiZnVuY3Rpb24iICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpOwogICAgfQogICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7CiAgICAgICAgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0KICAgIH0pOwogICAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRfcHJvdG90eXBlX29mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsKfQpmdW5jdGlvbiBfaW5oZXJpdHNfbG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsKICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpOwogICAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7CiAgICBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOwp9CmZ1bmN0aW9uIF9pbml0aWFsaXplcl9kZWZpbmVfcHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvciwgY29udGV4dCkgewogICAgaWYgKCFkZXNjcmlwdG9yKSByZXR1cm47CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgewogICAgICAgIGVudW1lcmFibGU6IGRlc2NyaXB0b3IuZW51bWVyYWJsZSwKICAgICAgICBjb25maWd1cmFibGU6IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlLAogICAgICAgIHdyaXRhYmxlOiBkZXNjcmlwdG9yLndyaXRhYmxlLAogICAgICAgIHZhbHVlOiBkZXNjcmlwdG9yLmluaXRpYWxpemVyID8gZGVzY3JpcHRvci5pbml0aWFsaXplci5jYWxsKGNvbnRleHQpIDogdm9pZCAwCiAgICB9KTsKfQpmdW5jdGlvbiBfaW5pdGlhbGl6ZXJfd2FybmluZ19oZWxwZXIoZGVzY3JpcHRvciwgY29udGV4dCkgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICJEZWNvcmF0aW5nIGNsYXNzIHByb3BlcnR5IGZhaWxlZC4gUGxlYXNlIGVuc3VyZSB0aGF0ICIgKyAicHJvcG9zYWwtY2xhc3MtcHJvcGVydGllcyBpcyBlbmFibGVkIGFuZCBzZXQgdG8gdXNlIGxvb3NlIG1vZGUuICIKICAgICAgICAgICAgKyAiVG8gdXNlIHByb3Bvc2FsLWNsYXNzLXByb3BlcnRpZXMgaW4gc3BlYyBtb2RlIHdpdGggZGVjb3JhdG9ycywgd2FpdCBmb3IgIgogICAgICAgICAgICArICJ0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGRlY29yYXRvcnMgaW4gc3RhZ2UgMi4iCiAgICApOwp9CmZ1bmN0aW9uIF9pbnN0YW5jZW9mKGxlZnQsIHJpZ2h0KSB7CiAgICBpZiAocmlnaHQgIT0gbnVsbCAmJiB0eXBlb2YgU3ltYm9sICE9PSAidW5kZWZpbmVkIiAmJiByaWdodFtTeW1ib2wuaGFzSW5zdGFuY2VdKSB7CiAgICAgICAgcmV0dXJuICEhcmlnaHRbU3ltYm9sLmhhc0luc3RhbmNlXShsZWZ0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGxlZnQgaW5zdGFuY2VvZiByaWdodDsKICAgIH0KfQpmdW5jdGlvbiBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQob2JqKSB7CiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsKfQpmdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUobm9kZUludGVyb3ApIHsKICAgIGlmICh0eXBlb2YgV2Vha01hcCAhPT0gImZ1bmN0aW9uIikgcmV0dXJuIG51bGw7CiAgICB2YXIgY2FjaGVCYWJlbEludGVyb3AgPSBuZXcgV2Vha01hcCgpOwogICAgdmFyIGNhY2hlTm9kZUludGVyb3AgPSBuZXcgV2Vha01hcCgpOwogICAgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbihub2RlSW50ZXJvcCkgewogICAgICAgIHJldHVybiBub2RlSW50ZXJvcCA/IGNhY2hlTm9kZUludGVyb3AgOiBjYWNoZUJhYmVsSW50ZXJvcDsKICAgIH0pKG5vZGVJbnRlcm9wKTsKfQpmdW5jdGlvbiBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkKG9iaiwgbm9kZUludGVyb3ApIHsKICAgIGlmICghbm9kZUludGVyb3AgJiYgb2JqICYmIG9iai5fX2VzTW9kdWxlKSB7CiAgICAgICAgcmV0dXJuIG9iajsKICAgIH0KICAgIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iaiAhPT0gImZ1bmN0aW9uIikgewogICAgICAgIHJldHVybiB7IGRlZmF1bHQ6IG9iaiB9OwogICAgfQogICAgdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKG5vZGVJbnRlcm9wKTsKICAgIGlmIChjYWNoZSAmJiBjYWNoZS5oYXMob2JqKSkgewogICAgICAgIHJldHVybiBjYWNoZS5nZXQob2JqKTsKICAgIH0KICAgIHZhciBuZXdPYmogPSB7IF9fcHJvdG9fXzogbnVsbCB9OwogICAgdmFyIGhhc1Byb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwogICAgZm9yICh2YXIga2V5IGluIG9iaikgewogICAgICAgIGlmIChrZXkgIT09ICJkZWZhdWx0IiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7CiAgICAgICAgICAgIHZhciBkZXNjID0gaGFzUHJvcGVydHlEZXNjcmlwdG9yID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkgOiBudWxsOwogICAgICAgICAgICBpZiAoZGVzYyAmJiAoZGVzYy5nZXQgfHwgZGVzYy5zZXQpKSB7CiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIG5ld09iai5kZWZhdWx0ID0gb2JqOwogICAgaWYgKGNhY2hlKSB7CiAgICAgICAgY2FjaGUuc2V0KG9iaiwgbmV3T2JqKTsKICAgIH0KICAgIHJldHVybiBuZXdPYmo7Cn0KZnVuY3Rpb24gX2lzX25hdGl2ZV9mdW5jdGlvbihmbikgewogICAgcmV0dXJuIEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoZm4pLmluZGV4T2YoIltuYXRpdmUgY29kZV0iKSAhPT0gLTE7Cn0KZnVuY3Rpb24gX2l0ZXJhYmxlX3RvX2FycmF5KGl0ZXIpIHsKICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAidW5kZWZpbmVkIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyWyJAQGl0ZXJhdG9yIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7Cn0KZnVuY3Rpb24gX2l0ZXJhYmxlX3RvX2FycmF5X2xpbWl0KGFyciwgaSkgewogICAgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gInVuZGVmaW5lZCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyWyJAQGl0ZXJhdG9yIl07CiAgICBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOwogICAgdmFyIF9hcnIgPSBbXTsKICAgIHZhciBfbiA9IHRydWU7CiAgICB2YXIgX2QgPSBmYWxzZTsKICAgIHZhciBfcywgX2U7CiAgICB0cnkgewogICAgICAgIGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsKICAgICAgICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTsKICAgICAgICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOwogICAgICAgIH0KICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIF9kID0gdHJ1ZTsKICAgICAgICBfZSA9IGVycjsKICAgIH0gZmluYWxseSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKCFfbiAmJiBfaVsicmV0dXJuIl0gIT0gbnVsbCkgX2lbInJldHVybiJdKCk7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgaWYgKF9kKSB0aHJvdyBfZTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gX2FycjsKfQpmdW5jdGlvbiBfaXRlcmFibGVfdG9fYXJyYXlfbGltaXRfbG9vc2UoYXJyLCBpKSB7CiAgICB2YXIgX2kgPSBhcnIgJiYgKHR5cGVvZiBTeW1ib2wgIT09ICJ1bmRlZmluZWQiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFyclsiQEBpdGVyYXRvciJdKTsKICAgIGlmIChfaSA9PSBudWxsKSByZXR1cm47CiAgICB2YXIgX2FyciA9IFtdOwogICAgZm9yIChfaSA9IF9pLmNhbGwoYXJyKSwgX3N0ZXA7ICEoX3N0ZXAgPSBfaS5uZXh0KCkpLmRvbmU7KSB7CiAgICAgICAgX2Fyci5wdXNoKF9zdGVwLnZhbHVlKTsKICAgICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7CiAgICB9CiAgICByZXR1cm4gX2FycjsKfQp2YXIgUkVBQ1RfRUxFTUVOVF9UWVBFOwpmdW5jdGlvbiBfanN4KHR5cGUsIHByb3BzLCBrZXksIGNoaWxkcmVuKSB7CiAgICBpZiAoIVJFQUNUX0VMRU1FTlRfVFlQRSkgewogICAgICAgIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLmZvciAmJiBTeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50IikgfHwgMHhlYWM3OwogICAgfQogICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUgJiYgdHlwZS5kZWZhdWx0UHJvcHM7CiAgICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMzsKICAgIGlmICghcHJvcHMgJiYgY2hpbGRyZW5MZW5ndGggIT09IDApIHsKICAgICAgICBwcm9wcyA9IHsgY2hpbGRyZW46IHZvaWQgMCB9OwogICAgfQogICAgaWYgKHByb3BzICYmIGRlZmF1bHRQcm9wcykgewogICAgICAgIGZvciAodmFyIHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykgewogICAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB2b2lkIDApIHsKICAgICAgICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9IGVsc2UgaWYgKCFwcm9wcykgewogICAgICAgIHByb3BzID0gZGVmYXVsdFByb3BzIHx8IHt9OwogICAgfQogICAgaWYgKGNoaWxkcmVuTGVuZ3RoID09PSAxKSB7CiAgICAgICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJlbjsKICAgIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7CiAgICAgICAgdmFyIGNoaWxkQXJyYXkgPSBuZXcgQXJyYXkoY2hpbGRyZW5MZW5ndGgpOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykgewogICAgICAgICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAzXTsKICAgICAgICB9CiAgICAgICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5OwogICAgfQogICAgcmV0dXJuIHsgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSwgdHlwZTogdHlwZSwga2V5OiBrZXkgPT09IHVuZGVmaW5lZCA/IG51bGwgOiAiIiArIGtleSwgcmVmOiBudWxsLCBwcm9wczogcHJvcHMsIF9vd25lcjogbnVsbCB9Owp9CmZ1bmN0aW9uIF9uZXdfYXJyb3dfY2hlY2soaW5uZXJUaGlzLCBib3VuZFRoaXMpIHsKICAgIGlmIChpbm5lclRoaXMgIT09IGJvdW5kVGhpcykgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbnN0YW50aWF0ZSBhbiBhcnJvdyBmdW5jdGlvbiIpOwogICAgfQp9CmZ1bmN0aW9uIF9ub25faXRlcmFibGVfcmVzdCgpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoCiAgICAgICAgIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIKICAgICk7Cn0KZnVuY3Rpb24gX25vbl9pdGVyYWJsZV9zcHJlYWQoKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKAogICAgICAgICJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIgogICAgKTsKfQpmdW5jdGlvbiBfb2JqZWN0X2Rlc3RydWN0dXJpbmdfZW1wdHkobykgewogICAgaWYgKG8gPT09IG51bGwgfHwgbyA9PT0gdm9pZCAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgZGVzdHJ1Y3R1cmUgIiArIG8pOwogICAgcmV0dXJuIG87Cn0KZnVuY3Rpb24gX29iamVjdF9zcHJlYWQodGFyZ2V0KSB7CiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OwogICAgICAgIHZhciBvd25LZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsKICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgb3duS2V5cyA9IG93bktleXMuY29uY2F0KAogICAgICAgICAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpLmZpbHRlcihmdW5jdGlvbihzeW0pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIHN5bSkuZW51bWVyYWJsZTsKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIG93bktleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKICAgICAgICAgICAgX2RlZmluZV9wcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOwogICAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIHRhcmdldDsKfQpmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsKICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsKICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7CiAgICAgICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7CiAgICAgICAgaWYgKGVudW1lcmFibGVPbmx5KSB7CiAgICAgICAgICAgIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbihzeW0pIHsKICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOwogICAgfQogICAgcmV0dXJuIGtleXM7Cn0KZnVuY3Rpb24gX29iamVjdF9zcHJlYWRfcHJvcHModGFyZ2V0LCBzb3VyY2UpIHsKICAgIHNvdXJjZSA9IHNvdXJjZSAhPSBudWxsID8gc291cmNlIDoge307CiAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOwogICAgfSBlbHNlIHsKICAgICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsKICAgICAgICB9KTsKICAgIH0KICAgIHJldHVybiB0YXJnZXQ7Cn0KZnVuY3Rpb24gX29iamVjdF93aXRob3V0X3Byb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgewogICAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307CiAgICB2YXIgdGFyZ2V0ID0gX29iamVjdF93aXRob3V0X3Byb3BlcnRpZXNfbG9vc2Uoc291cmNlLCBleGNsdWRlZCk7CiAgICB2YXIga2V5LCBpOwogICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsKICAgICAgICB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOwogICAgICAgICAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOwogICAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiB0YXJnZXQ7Cn0KZnVuY3Rpb24gX29iamVjdF93aXRob3V0X3Byb3BlcnRpZXNfbG9vc2Uoc291cmNlLCBleGNsdWRlZCkgewogICAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307CiAgICB2YXIgdGFyZ2V0ID0ge307CiAgICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7CiAgICB2YXIga2V5LCBpOwogICAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBrZXkgPSBzb3VyY2VLZXlzW2ldOwogICAgICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7CiAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsKICAgIH0KICAgIHJldHVybiB0YXJnZXQ7Cn0KZnVuY3Rpb24gX3Bvc3NpYmxlX2NvbnN0cnVjdG9yX3JldHVybihzZWxmLCBjYWxsKSB7CiAgICBpZiAoY2FsbCAmJiAoX3R5cGVfb2YoY2FsbCkgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBjYWxsID09PSAiZnVuY3Rpb24iKSkgewogICAgICAgIHJldHVybiBjYWxsOwogICAgfQogICAgcmV0dXJuIF9hc3NlcnRfdGhpc19pbml0aWFsaXplZChzZWxmKTsKfQpmdW5jdGlvbiBfcmVhZF9vbmx5X2Vycm9yKG5hbWUpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlwiIiArIG5hbWUgKyAiXCIgaXMgcmVhZC1vbmx5Iik7Cn0KZnVuY3Rpb24gc2V0KHRhcmdldCwgcHJvcGVydHksIHZhbHVlLCByZWNlaXZlcikgewogICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSAidW5kZWZpbmVkIiAmJiBSZWZsZWN0LnNldCkgewogICAgICAgIHNldCA9IFJlZmxlY3Quc2V0OwogICAgfSBlbHNlIHsKICAgICAgICBzZXQgPSBmdW5jdGlvbiBzZXQodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUsIHJlY2VpdmVyKSB7CiAgICAgICAgICAgIHZhciBiYXNlID0gX3N1cGVyX3Byb3BfYmFzZSh0YXJnZXQsIHByb3BlcnR5KTsKICAgICAgICAgICAgdmFyIGRlc2M7CiAgICAgICAgICAgIGlmIChiYXNlKSB7CiAgICAgICAgICAgICAgICBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICAgICBpZiAoZGVzYy5zZXQpIHsKICAgICAgICAgICAgICAgICAgICBkZXNjLnNldC5jYWxsKHJlY2VpdmVyLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFkZXNjLndyaXRhYmxlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHJlY2VpdmVyLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgIGlmIChkZXNjKSB7CiAgICAgICAgICAgICAgICBpZiAoIWRlc2Mud3JpdGFibGUpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkZXNjLnZhbHVlID0gdmFsdWU7CiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVjZWl2ZXIsIHByb3BlcnR5LCBkZXNjKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIF9kZWZpbmVfcHJvcGVydHkocmVjZWl2ZXIsIHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfTsKICAgIH0KICAgIHJldHVybiBzZXQodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUsIHJlY2VpdmVyKTsKfQpmdW5jdGlvbiBfc2V0KHRhcmdldCwgcHJvcGVydHksIHZhbHVlLCByZWNlaXZlciwgaXNTdHJpY3QpIHsKICAgIHZhciBzID0gc2V0KHRhcmdldCwgcHJvcGVydHksIHZhbHVlLCByZWNlaXZlciB8fCB0YXJnZXQpOwogICAgaWYgKCFzICYmIGlzU3RyaWN0KSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJmYWlsZWQgdG8gc2V0IHByb3BlcnR5Iik7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7Cn0KZnVuY3Rpb24gX3NldF9wcm90b3R5cGVfb2YobywgcCkgewogICAgX3NldF9wcm90b3R5cGVfb2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YobywgcCkgewogICAgICAgIG8uX19wcm90b19fID0gcDsKICAgICAgICByZXR1cm4gbzsKICAgIH07CiAgICByZXR1cm4gX3NldF9wcm90b3R5cGVfb2YobywgcCk7Cn0KZnVuY3Rpb24gX3NraXBfZmlyc3RfZ2VuZXJhdG9yX25leHQoZm4pIHsKICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgaXQgPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgIGl0Lm5leHQoKTsKICAgICAgICByZXR1cm4gaXQ7CiAgICB9Owp9CmZ1bmN0aW9uIF9zbGljZWRfdG9fYXJyYXkoYXJyLCBpKSB7CiAgICByZXR1cm4gX2FycmF5X3dpdGhfaG9sZXMoYXJyKSB8fCBfaXRlcmFibGVfdG9fYXJyYXlfbGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRfaXRlcmFibGVfdG9fYXJyYXkoYXJyLCBpKSB8fCBfbm9uX2l0ZXJhYmxlX3Jlc3QoKTsKfQpmdW5jdGlvbiBfc2xpY2VkX3RvX2FycmF5X2xvb3NlKGFyciwgaSkgewogICAgcmV0dXJuIF9hcnJheV93aXRoX2hvbGVzKGFycikgfHwgX2l0ZXJhYmxlX3RvX2FycmF5X2xpbWl0X2xvb3NlKGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkX2l0ZXJhYmxlX3RvX2FycmF5KGFyciwgaSkKICAgICAgICB8fCBfbm9uX2l0ZXJhYmxlX3Jlc3QoKTsKfQpmdW5jdGlvbiBfc3VwZXJfcHJvcF9iYXNlKG9iamVjdCwgcHJvcGVydHkpIHsKICAgIHdoaWxlICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKSB7CiAgICAgICAgb2JqZWN0ID0gX2dldF9wcm90b3R5cGVfb2Yob2JqZWN0KTsKICAgICAgICBpZiAob2JqZWN0ID09PSBudWxsKSBicmVhazsKICAgIH0KICAgIHJldHVybiBvYmplY3Q7Cn0KZnVuY3Rpb24gX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsKHN0cmluZ3MsIHJhdykgewogICAgaWYgKCFyYXcpIHsKICAgICAgICByYXcgPSBzdHJpbmdzLnNsaWNlKDApOwogICAgfQogICAgcmV0dXJuIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3RyaW5ncywgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUocmF3KSB9IH0pKTsKfQpmdW5jdGlvbiBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2Uoc3RyaW5ncywgcmF3KSB7CiAgICBpZiAoIXJhdykgewogICAgICAgIHJhdyA9IHN0cmluZ3Muc2xpY2UoMCk7CiAgICB9CiAgICBzdHJpbmdzLnJhdyA9IHJhdzsKICAgIHJldHVybiBzdHJpbmdzOwp9CmZ1bmN0aW9uIF90aHJvdyhlKSB7CiAgICB0aHJvdyBlOwp9CmZ1bmN0aW9uIF90b19hcnJheShhcnIpIHsKICAgIHJldHVybiBfYXJyYXlfd2l0aF9ob2xlcyhhcnIpIHx8IF9pdGVyYWJsZV90b19hcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZF9pdGVyYWJsZV90b19hcnJheShhcnIpIHx8IF9ub25faXRlcmFibGVfcmVzdCgpOwp9CmZ1bmN0aW9uIF90b19jb25zdW1hYmxlX2FycmF5KGFycikgewogICAgcmV0dXJuIF9hcnJheV93aXRob3V0X2hvbGVzKGFycikgfHwgX2l0ZXJhYmxlX3RvX2FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkX2l0ZXJhYmxlX3RvX2FycmF5KGFycikgfHwgX25vbl9pdGVyYWJsZV9zcHJlYWQoKTsKfQpmdW5jdGlvbiBfdG9fcHJpbWl0aXZlKGlucHV0LCBoaW50KSB7CiAgICBpZiAoX3R5cGVfb2YoaW5wdXQpICE9PSAib2JqZWN0IiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0OwogICAgdmFyIHByaW0gPSBpbnB1dFtTeW1ib2wudG9QcmltaXRpdmVdOwogICAgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkgewogICAgICAgIHZhciByZXMgPSBwcmltLmNhbGwoaW5wdXQsIGhpbnQgfHwgImRlZmF1bHQiKTsKICAgICAgICBpZiAoX3R5cGVfb2YocmVzKSAhPT0gIm9iamVjdCIpIHJldHVybiByZXM7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKTsKICAgIH0KICAgIHJldHVybiAoaGludCA9PT0gInN0cmluZyIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTsKfQpmdW5jdGlvbiBfdG9fcHJvcGVydHlfa2V5KGFyZykgewogICAgdmFyIGtleSA9IF90b19wcmltaXRpdmUoYXJnLCAic3RyaW5nIik7CiAgICByZXR1cm4gX3R5cGVfb2Yoa2V5KSA9PT0gInN5bWJvbCIgPyBrZXkgOiBTdHJpbmcoa2V5KTsKfQpmdW5jdGlvbiBfdXBkYXRlKHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyLCBpc1N0cmljdCkgewogICAgcmV0dXJuIHsKICAgICAgICBnZXQgXygpIHsKICAgICAgICAgICAgcmV0dXJuIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpOwogICAgICAgIH0sCiAgICAgICAgc2V0IF8odmFsdWUpIHsKICAgICAgICAgICAgX3NldCh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSwgcmVjZWl2ZXIsIGlzU3RyaWN0KTsKICAgICAgICB9CiAgICB9Owp9CmZ1bmN0aW9uIF90eXBlX29mKG9iaikgewogICAgIkBzd2MvaGVscGVycyAtIHR5cGVvZiI7CiAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgIT09ICJ1bmRlZmluZWQiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gInN5bWJvbCIgOiB0eXBlb2Ygb2JqOwp9CmZ1bmN0aW9uIF91bnN1cHBvcnRlZF9pdGVyYWJsZV90b19hcnJheShvLCBtaW5MZW4pIHsKICAgIGlmICghbykgcmV0dXJuOwogICAgaWYgKHR5cGVvZiBvID09PSAic3RyaW5nIikgcmV0dXJuIF9hcnJheV9saWtlX3RvX2FycmF5KG8sIG1pbkxlbik7CiAgICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7CiAgICBpZiAobiA9PT0gIk9iamVjdCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsKICAgIGlmIChuID09PSAiTWFwIiB8fCBuID09PSAiU2V0IikgcmV0dXJuIEFycmF5LmZyb20obik7CiAgICBpZiAobiA9PT0gIkFyZ3VtZW50cyIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlfbGlrZV90b19hcnJheShvLCBtaW5MZW4pOwp9CmZ1bmN0aW9uIF93cmFwX2FzeW5jX2dlbmVyYXRvcihmbikgewogICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBuZXcgX2FzeW5jX2dlbmVyYXRvcihmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTsKICAgIH07Cn0KZnVuY3Rpb24gX3dyYXBfbmF0aXZlX3N1cGVyKENsYXNzKSB7CiAgICB2YXIgX2NhY2hlID0gdHlwZW9mIE1hcCA9PT0gImZ1bmN0aW9uIiA/IG5ldyBNYXAoKSA6IHVuZGVmaW5lZDsKICAgIF93cmFwX25hdGl2ZV9zdXBlciA9IGZ1bmN0aW9uIHdyYXBOYXRpdmVTdXBlcihDbGFzcykgewogICAgICAgIGlmIChDbGFzcyA9PT0gbnVsbCB8fCAhX2lzX25hdGl2ZV9mdW5jdGlvbihDbGFzcykpIHJldHVybiBDbGFzczsKICAgICAgICBpZiAodHlwZW9mIENsYXNzICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgX2NhY2hlICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICBpZiAoX2NhY2hlLmhhcyhDbGFzcykpIHJldHVybiBfY2FjaGUuZ2V0KENsYXNzKTsKICAgICAgICAgICAgX2NhY2hlLnNldChDbGFzcywgV3JhcHBlcik7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIFdyYXBwZXIoKSB7CiAgICAgICAgICAgIHJldHVybiBfY29uc3RydWN0KENsYXNzLCBhcmd1bWVudHMsIF9nZXRfcHJvdG90eXBlX29mKHRoaXMpLmNvbnN0cnVjdG9yKTsKICAgICAgICB9CiAgICAgICAgV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENsYXNzLnByb3RvdHlwZSwgewogICAgICAgICAgICBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogV3JhcHBlciwgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBfc2V0X3Byb3RvdHlwZV9vZihXcmFwcGVyLCBDbGFzcyk7CiAgICB9OwogICAgcmV0dXJuIF93cmFwX25hdGl2ZV9zdXBlcihDbGFzcyk7Cn0KZnVuY3Rpb24gX3dyaXRlX29ubHlfZXJyb3IobmFtZSkgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiXCIiICsgbmFtZSArICJcIiBpcyB3cml0ZS1vbmx5Iik7Cn0KZnVuY3Rpb24gX2NsYXNzX3ByaXZhdGVfZmllbGRfZGVzdHJ1Y3R1cmUocmVjZWl2ZXIsIHByaXZhdGVNYXApIHsKICAgIHZhciBkZXNjcmlwdG9yID0gX2NsYXNzX2V4dHJhY3RfZmllbGRfZGVzY3JpcHRvcihyZWNlaXZlciwgcHJpdmF0ZU1hcCwgInNldCIpOwogICAgcmV0dXJuIF9jbGFzc19hcHBseV9kZXNjcmlwdG9yX2Rlc3RydWN0dXJlKHJlY2VpdmVyLCBkZXNjcmlwdG9yKTsKfQpmdW5jdGlvbiBfY2xhc3Nfc3RhdGljX3ByaXZhdGVfZmllbGRfZGVzdHJ1Y3R1cmUocmVjZWl2ZXIsIGNsYXNzQ29uc3RydWN0b3IsIGRlc2NyaXB0b3IpIHsKICAgIF9jbGFzc19jaGVja19wcml2YXRlX3N0YXRpY19hY2Nlc3MocmVjZWl2ZXIsIGNsYXNzQ29uc3RydWN0b3IpOwogICAgX2NsYXNzX2NoZWNrX3ByaXZhdGVfc3RhdGljX2ZpZWxkX2Rlc2NyaXB0b3IoZGVzY3JpcHRvciwgInNldCIpOwogICAgcmV0dXJuIF9jbGFzc19hcHBseV9kZXNjcmlwdG9yX2Rlc3RydWN0dXJlKHJlY2VpdmVyLCBkZXNjcmlwdG9yKTsKfQpmdW5jdGlvbiBfY2xhc3Nfc3RhdGljX3ByaXZhdGVfbWV0aG9kX2dldChyZWNlaXZlciwgY2xhc3NDb25zdHJ1Y3RvciwgbWV0aG9kKSB7CiAgICBfY2xhc3NfY2hlY2tfcHJpdmF0ZV9zdGF0aWNfYWNjZXNzKHJlY2VpdmVyLCBjbGFzc0NvbnN0cnVjdG9yKTsKICAgIHJldHVybiBtZXRob2Q7Cn0KZnVuY3Rpb24gX2NsYXNzX2NoZWNrX3ByaXZhdGVfc3RhdGljX2FjY2VzcyhyZWNlaXZlciwgY2xhc3NDb25zdHJ1Y3RvcikgewogICAgaWYgKHJlY2VpdmVyICE9PSBjbGFzc0NvbnN0cnVjdG9yKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBzdGF0aWMgYWNjZXNzIG9mIHdyb25nIHByb3ZlbmFuY2UiKTsKICAgIH0KfQpmdW5jdGlvbiBfaXNfbmF0aXZlX3JlZmxlY3RfY29uc3RydWN0KCkgewogICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAidW5kZWZpbmVkIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsKICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7CiAgICBpZiAodHlwZW9mIFByb3h5ID09PSAiZnVuY3Rpb24iKSByZXR1cm4gdHJ1ZTsKICAgIHRyeSB7CiAgICAgICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbigpIHt9KSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9CmZ1bmN0aW9uIF9jcmVhdGVfc3VwZXIoRGVyaXZlZCkgewogICAgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNfbmF0aXZlX3JlZmxlY3RfY29uc3RydWN0KCk7CiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7CiAgICAgICAgdmFyIFN1cGVyID0gX2dldF9wcm90b3R5cGVfb2YoRGVyaXZlZCksIHJlc3VsdDsKICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgewogICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldF9wcm90b3R5cGVfb2YodGhpcykuY29uc3RydWN0b3I7CiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZV9jb25zdHJ1Y3Rvcl9yZXR1cm4odGhpcywgcmVzdWx0KTsKICAgIH07Cn0KZnVuY3Rpb24gX2NyZWF0ZV9mb3Jfb2ZfaXRlcmF0b3JfaGVscGVyX2xvb3NlKG8sIGFsbG93QXJyYXlMaWtlKSB7CiAgICB2YXIgaXQgPSB0eXBlb2YgU3ltYm9sICE9PSAidW5kZWZpbmVkIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0gfHwgb1siQEBpdGVyYXRvciJdOwogICAgaWYgKGl0KSByZXR1cm4gKGl0ID0gaXQuY2FsbChvKSkubmV4dC5iaW5kKGl0KTsKICAgIC8vIEZhbGxiYWNrIGZvciBlbmdpbmVzIHdpdGhvdXQgc3ltYm9sIHN1cHBvcnQKICAgIGlmIChBcnJheS5pc0FycmF5KG8pIHx8IChpdCA9IF91bnN1cHBvcnRlZF9pdGVyYWJsZV90b19hcnJheShvKSkgfHwgYWxsb3dBcnJheUxpa2UgJiYgbyAmJiB0eXBlb2Ygby5sZW5ndGggPT09ICJudW1iZXIiKSB7CiAgICAgICAgaWYgKGl0KSBvID0gaXQ7CiAgICAgICAgdmFyIGkgPSAwOwogICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKGkgPj0gby5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUgfTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IG9baSsrXSB9OwogICAgICAgIH07CiAgICB9CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKAogICAgICAgICJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIKICAgICk7Cn0KZnVuY3Rpb24gX3RzX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7CiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkOwogICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAib2JqZWN0IiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gImZ1bmN0aW9uIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpOwogICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjsKICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7Cn1mdW5jdGlvbiBfdHNfZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHsKICAgIHZhciBmLCB5LCB0LCBnLCBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24gKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9OwogICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksICJ0aHJvdyI6IHZlcmIoMSksICJyZXR1cm4iOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pLCBnOwogICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9CiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7CiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTsKICAgICAgICB3aGlsZSAoXykgdHJ5IHsKICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVsicmV0dXJuIl0gOiBvcFswXSA/IHlbInRocm93Il0gfHwgKCh0ID0geVsicmV0dXJuIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0OwogICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07CiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHsKICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTsKICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTsKICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9CiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH0KICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH0KICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpOwogICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7CiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfQogICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9OwogICAgfQp9ZnVuY3Rpb24gX3RzX21ldGFkYXRhKGssIHYpIHsKICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gIm9iamVjdCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09ICJmdW5jdGlvbiIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpOwp9ZnVuY3Rpb24gX3RzX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikgewogICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9Cn1mdW5jdGlvbiBfdHNfdmFsdWVzKG8pIHsKICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwOwogICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7CiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09ICJudW1iZXIiKSByZXR1cm4gewogICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDsKICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9OwogICAgICAgIH0KICAgIH07CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyAiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iIDogIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTsKfS8qIEBtaW5WZXJzaW9uIDcuMjAuMCAqLwoKLyoqCiAgRW51bXMgYXJlIHVzZWQgaW4gdGhpcyBmaWxlLCBidXQgbm90IGFzc2lnbmVkIHRvIHZhcnMgdG8gYXZvaWQgbm9uLWhvaXN0YWJsZSB2YWx1ZXMKCiAgQ09OU1RSVUNUT1IgPSAwOwogIFBVQkxJQyA9IDE7CiAgUFJJVkFURSA9IDI7CgogIEZJRUxEID0gMDsKICBBQ0NFU1NPUiA9IDE7CiAgTUVUSE9EID0gMjsKICBHRVRURVIgPSAzOwogIFNFVFRFUiA9IDQ7CgogIFNUQVRJQyA9IDU7CgogIENMQVNTID0gMTA7IC8vIG9ubHkgdXNlZCBpbiBhc3NlcnRWYWxpZFJldHVyblZhbHVlCiovCgpmdW5jdGlvbiBhcHBseURlY3MyMjAzUkZhY3RvcnkoKSB7CiAgICBmdW5jdGlvbiBjcmVhdGVBZGRJbml0aWFsaXplck1ldGhvZChpbml0aWFsaXplcnMsIGRlY29yYXRvckZpbmlzaGVkUmVmKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGFkZEluaXRpYWxpemVyKGluaXRpYWxpemVyKSB7CiAgICAgICAgICAgIGFzc2VydE5vdEZpbmlzaGVkKGRlY29yYXRvckZpbmlzaGVkUmVmLCAiYWRkSW5pdGlhbGl6ZXIiKTsKICAgICAgICAgICAgYXNzZXJ0Q2FsbGFibGUoaW5pdGlhbGl6ZXIsICJBbiBpbml0aWFsaXplciIpOwogICAgICAgICAgICBpbml0aWFsaXplcnMucHVzaChpbml0aWFsaXplcik7CiAgICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBtZW1iZXJEZWMoCiAgICAgICAgZGVjLAogICAgICAgIG5hbWUsCiAgICAgICAgZGVzYywKICAgICAgICBpbml0aWFsaXplcnMsCiAgICAgICAga2luZCwKICAgICAgICBpc1N0YXRpYywKICAgICAgICBpc1ByaXZhdGUsCiAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgdmFsdWUKICAgICkgewogICAgICAgIHZhciBraW5kU3RyOwoKICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAgICAgY2FzZSAxIC8qIEFDQ0VTU09SICovOgogICAgICAgICAgICAgICAga2luZFN0ciA9ICJhY2Nlc3NvciI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAyIC8qIE1FVEhPRCAqLzoKICAgICAgICAgICAgICAgIGtpbmRTdHIgPSAibWV0aG9kIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDMgLyogR0VUVEVSICovOgogICAgICAgICAgICAgICAga2luZFN0ciA9ICJnZXR0ZXIiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgNCAvKiBTRVRURVIgKi86CiAgICAgICAgICAgICAgICBraW5kU3RyID0gInNldHRlciI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGtpbmRTdHIgPSAiZmllbGQiOwogICAgICAgIH0KCiAgICAgICAgdmFyIGN0eCA9IHsKICAgICAgICAgICAga2luZDoga2luZFN0ciwKICAgICAgICAgICAgbmFtZTogaXNQcml2YXRlID8gIiMiICsgbmFtZSA6IG5hbWUsCiAgICAgICAgICAgIHN0YXRpYzogaXNTdGF0aWMsCiAgICAgICAgICAgIHByaXZhdGU6IGlzUHJpdmF0ZSwKICAgICAgICAgICAgbWV0YWRhdGE6IG1ldGFkYXRhLAogICAgICAgIH07CgogICAgICAgIHZhciBkZWNvcmF0b3JGaW5pc2hlZFJlZiA9IHsgdjogZmFsc2UgfTsKCiAgICAgICAgY3R4LmFkZEluaXRpYWxpemVyID0gY3JlYXRlQWRkSW5pdGlhbGl6ZXJNZXRob2QoCiAgICAgICAgICAgIGluaXRpYWxpemVycywKICAgICAgICAgICAgZGVjb3JhdG9yRmluaXNoZWRSZWYKICAgICAgICApOwoKICAgICAgICB2YXIgZ2V0LCBzZXQ7CiAgICAgICAgaWYgKGtpbmQgPT09IDAgLyogRklFTEQgKi8pIHsKICAgICAgICAgICAgaWYgKGlzUHJpdmF0ZSkgewogICAgICAgICAgICAgICAgZ2V0ID0gZGVzYy5nZXQ7CiAgICAgICAgICAgICAgICBzZXQgPSBkZXNjLnNldDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGdldCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tuYW1lXTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICBzZXQgPSBmdW5jdGlvbiAodikgewogICAgICAgICAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB2OwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gMiAvKiBNRVRIT0QgKi8pIHsKICAgICAgICAgICAgZ2V0ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGRlc2MudmFsdWU7CiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gcmVwbGFjZSB3aXRoIHZhbHVlcyB0aGF0IHdpbGwgZ28gdGhyb3VnaCB0aGUgZmluYWwgZ2V0dGVyIGFuZCBzZXR0ZXIKICAgICAgICAgICAgaWYgKGtpbmQgPT09IDEgLyogQUNDRVNTT1IgKi8gfHwga2luZCA9PT0gMyAvKiBHRVRURVIgKi8pIHsKICAgICAgICAgICAgICAgIGdldCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVzYy5nZXQuY2FsbCh0aGlzKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChraW5kID09PSAxIC8qIEFDQ0VTU09SICovIHx8IGtpbmQgPT09IDQgLyogU0VUVEVSICovKSB7CiAgICAgICAgICAgICAgICBzZXQgPSBmdW5jdGlvbiAodikgewogICAgICAgICAgICAgICAgICAgIGRlc2Muc2V0LmNhbGwodGhpcywgdik7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGN0eC5hY2Nlc3MgPQogICAgICAgICAgICBnZXQgJiYgc2V0ID8geyBnZXQ6IGdldCwgc2V0OiBzZXQgfSA6IGdldCA/IHsgZ2V0OiBnZXQgfSA6IHsgc2V0OiBzZXQgfTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuIGRlYyh2YWx1ZSwgY3R4KTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICBkZWNvcmF0b3JGaW5pc2hlZFJlZi52ID0gdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gYXNzZXJ0Tm90RmluaXNoZWQoZGVjb3JhdG9yRmluaXNoZWRSZWYsIGZuTmFtZSkgewogICAgICAgIGlmIChkZWNvcmF0b3JGaW5pc2hlZFJlZi52KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICAgICAgICJhdHRlbXB0ZWQgdG8gY2FsbCAiICsgZm5OYW1lICsgIiBhZnRlciBkZWNvcmF0aW9uIHdhcyBmaW5pc2hlZCIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gYXNzZXJ0Q2FsbGFibGUoZm4sIGhpbnQpIHsKICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoaGludCArICIgbXVzdCBiZSBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGFzc2VydFZhbGlkUmV0dXJuVmFsdWUoa2luZCwgdmFsdWUpIHsKICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTsKCiAgICAgICAgaWYgKGtpbmQgPT09IDEgLyogQUNDRVNTT1IgKi8pIHsKICAgICAgICAgICAgaWYgKHR5cGUgIT09ICJvYmplY3QiIHx8IHZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKAogICAgICAgICAgICAgICAgICAgICJhY2Nlc3NvciBkZWNvcmF0b3JzIG11c3QgcmV0dXJuIGFuIG9iamVjdCB3aXRoIGdldCwgc2V0LCBvciBpbml0IHByb3BlcnRpZXMgb3Igdm9pZCAwIgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodmFsdWUuZ2V0ICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIGFzc2VydENhbGxhYmxlKHZhbHVlLmdldCwgImFjY2Vzc29yLmdldCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh2YWx1ZS5zZXQgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgYXNzZXJ0Q2FsbGFibGUodmFsdWUuc2V0LCAiYWNjZXNzb3Iuc2V0Iik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHZhbHVlLmluaXQgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgYXNzZXJ0Q2FsbGFibGUodmFsdWUuaW5pdCwgImFjY2Vzc29yLmluaXQiKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICB2YXIgaGludDsKICAgICAgICAgICAgaWYgKGtpbmQgPT09IDAgLyogRklFTEQgKi8pIHsKICAgICAgICAgICAgICAgIGhpbnQgPSAiZmllbGQiOwogICAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09IDEwIC8qIENMQVNTICovKSB7CiAgICAgICAgICAgICAgICBoaW50ID0gImNsYXNzIjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGhpbnQgPSAibWV0aG9kIjsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKAogICAgICAgICAgICAgICAgaGludCArICIgZGVjb3JhdG9ycyBtdXN0IHJldHVybiBhIGZ1bmN0aW9uIG9yIHZvaWQgMCIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gYXBwbHlNZW1iZXJEZWMoCiAgICAgICAgcmV0LAogICAgICAgIGJhc2UsCiAgICAgICAgZGVjSW5mbywKICAgICAgICBuYW1lLAogICAgICAgIGtpbmQsCiAgICAgICAgaXNTdGF0aWMsCiAgICAgICAgaXNQcml2YXRlLAogICAgICAgIGluaXRpYWxpemVycywKICAgICAgICBtZXRhZGF0YQogICAgKSB7CiAgICAgICAgdmFyIGRlY3MgPSBkZWNJbmZvWzBdOwoKICAgICAgICB2YXIgZGVzYywgaW5pdCwgdmFsdWU7CgogICAgICAgIGlmIChpc1ByaXZhdGUpIHsKICAgICAgICAgICAgaWYgKGtpbmQgPT09IDAgLyogRklFTEQgKi8gfHwga2luZCA9PT0gMSAvKiBBQ0NFU1NPUiAqLykgewogICAgICAgICAgICAgICAgZGVzYyA9IHsKICAgICAgICAgICAgICAgICAgICBnZXQ6IGRlY0luZm9bM10sCiAgICAgICAgICAgICAgICAgICAgc2V0OiBkZWNJbmZvWzRdLAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSBlbHNlIGlmIChraW5kID09PSAzIC8qIEdFVFRFUiAqLykgewogICAgICAgICAgICAgICAgZGVzYyA9IHsKICAgICAgICAgICAgICAgICAgICBnZXQ6IGRlY0luZm9bM10sCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09IDQgLyogU0VUVEVSICovKSB7CiAgICAgICAgICAgICAgICBkZXNjID0gewogICAgICAgICAgICAgICAgICAgIHNldDogZGVjSW5mb1szXSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkZXNjID0gewogICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkZWNJbmZvWzNdLAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoa2luZCAhPT0gMCAvKiBGSUVMRCAqLykgewogICAgICAgICAgICBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlLCBuYW1lKTsKICAgICAgICB9CgogICAgICAgIGlmIChraW5kID09PSAxIC8qIEFDQ0VTU09SICovKSB7CiAgICAgICAgICAgIHZhbHVlID0gewogICAgICAgICAgICAgICAgZ2V0OiBkZXNjLmdldCwKICAgICAgICAgICAgICAgIHNldDogZGVzYy5zZXQsCiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIGlmIChraW5kID09PSAyIC8qIE1FVEhPRCAqLykgewogICAgICAgICAgICB2YWx1ZSA9IGRlc2MudmFsdWU7CiAgICAgICAgfSBlbHNlIGlmIChraW5kID09PSAzIC8qIEdFVFRFUiAqLykgewogICAgICAgICAgICB2YWx1ZSA9IGRlc2MuZ2V0OwogICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gNCAvKiBTRVRURVIgKi8pIHsKICAgICAgICAgICAgdmFsdWUgPSBkZXNjLnNldDsKICAgICAgICB9CgogICAgICAgIHZhciBuZXdWYWx1ZSwgZ2V0LCBzZXQ7CgogICAgICAgIGlmICh0eXBlb2YgZGVjcyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICBuZXdWYWx1ZSA9IG1lbWJlckRlYygKICAgICAgICAgICAgICAgIGRlY3MsCiAgICAgICAgICAgICAgICBuYW1lLAogICAgICAgICAgICAgICAgZGVzYywKICAgICAgICAgICAgICAgIGluaXRpYWxpemVycywKICAgICAgICAgICAgICAgIGtpbmQsCiAgICAgICAgICAgICAgICBpc1N0YXRpYywKICAgICAgICAgICAgICAgIGlzUHJpdmF0ZSwKICAgICAgICAgICAgICAgIG1ldGFkYXRhLAogICAgICAgICAgICAgICAgdmFsdWUKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gdm9pZCAwKSB7CiAgICAgICAgICAgICAgICBhc3NlcnRWYWxpZFJldHVyblZhbHVlKGtpbmQsIG5ld1ZhbHVlKTsKCiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gMCAvKiBGSUVMRCAqLykgewogICAgICAgICAgICAgICAgICAgIGluaXQgPSBuZXdWYWx1ZTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gMSAvKiBBQ0NFU1NPUiAqLykgewogICAgICAgICAgICAgICAgICAgIGluaXQgPSBuZXdWYWx1ZS5pbml0OwogICAgICAgICAgICAgICAgICAgIGdldCA9IG5ld1ZhbHVlLmdldCB8fCB2YWx1ZS5nZXQ7CiAgICAgICAgICAgICAgICAgICAgc2V0ID0gbmV3VmFsdWUuc2V0IHx8IHZhbHVlLnNldDsKCiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB7IGdldDogZ2V0LCBzZXQ6IHNldCB9OwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ld1ZhbHVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IGRlY3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgICAgIHZhciBkZWMgPSBkZWNzW2ldOwoKICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gbWVtYmVyRGVjKAogICAgICAgICAgICAgICAgICAgIGRlYywKICAgICAgICAgICAgICAgICAgICBuYW1lLAogICAgICAgICAgICAgICAgICAgIGRlc2MsCiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXJzLAogICAgICAgICAgICAgICAgICAgIGtpbmQsCiAgICAgICAgICAgICAgICAgICAgaXNTdGF0aWMsCiAgICAgICAgICAgICAgICAgICAgaXNQcml2YXRlLAogICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLAogICAgICAgICAgICAgICAgICAgIHZhbHVlCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gdm9pZCAwKSB7CiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0VmFsaWRSZXR1cm5WYWx1ZShraW5kLCBuZXdWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0luaXQ7CgogICAgICAgICAgICAgICAgICAgIGlmIChraW5kID09PSAwIC8qIEZJRUxEICovKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0luaXQgPSBuZXdWYWx1ZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09IDEgLyogQUNDRVNTT1IgKi8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5pdCA9IG5ld1ZhbHVlLmluaXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGdldCA9IG5ld1ZhbHVlLmdldCB8fCB2YWx1ZS5nZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldCA9IG5ld1ZhbHVlLnNldCB8fCB2YWx1ZS5zZXQ7CgogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHsgZ2V0OiBnZXQsIHNldDogc2V0IH07CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBuZXdWYWx1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmIChuZXdJbml0ICE9PSB2b2lkIDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluaXQgPT09IHZvaWQgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG5ld0luaXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluaXQgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBbaW5pdCwgbmV3SW5pdF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0LnB1c2gobmV3SW5pdCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChraW5kID09PSAwIC8qIEZJRUxEICovIHx8IGtpbmQgPT09IDEgLyogQUNDRVNTT1IgKi8pIHsKICAgICAgICAgICAgaWYgKGluaXQgPT09IHZvaWQgMCkgewogICAgICAgICAgICAgICAgLy8gSWYgdGhlIGluaXRpYWxpemVyIHdhcyB2b2lkIDAsIHN1YiBpbiBhIGR1bW15IGluaXRpYWxpemVyCiAgICAgICAgICAgICAgICBpbml0ID0gZnVuY3Rpb24gKGluc3RhbmNlLCBpbml0KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluaXQ7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbml0ICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICB2YXIgb3duSW5pdGlhbGl6ZXJzID0gaW5pdDsKCiAgICAgICAgICAgICAgICBpbml0ID0gZnVuY3Rpb24gKGluc3RhbmNlLCBpbml0KSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaW5pdDsKCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvd25Jbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBvd25Jbml0aWFsaXplcnNbaV0uY2FsbChpbnN0YW5jZSwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBvcmlnaW5hbEluaXRpYWxpemVyID0gaW5pdDsKCiAgICAgICAgICAgICAgICBpbml0ID0gZnVuY3Rpb24gKGluc3RhbmNlLCBpbml0KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsSW5pdGlhbGl6ZXIuY2FsbChpbnN0YW5jZSwgaW5pdCk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXQucHVzaChpbml0KTsKICAgICAgICB9CgogICAgICAgIGlmIChraW5kICE9PSAwIC8qIEZJRUxEICovKSB7CiAgICAgICAgICAgIGlmIChraW5kID09PSAxIC8qIEFDQ0VTU09SICovKSB7CiAgICAgICAgICAgICAgICBkZXNjLmdldCA9IHZhbHVlLmdldDsKICAgICAgICAgICAgICAgIGRlc2Muc2V0ID0gdmFsdWUuc2V0OwogICAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09IDIgLyogTUVUSE9EICovKSB7CiAgICAgICAgICAgICAgICBkZXNjLnZhbHVlID0gdmFsdWU7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gMyAvKiBHRVRURVIgKi8pIHsKICAgICAgICAgICAgICAgIGRlc2MuZ2V0ID0gdmFsdWU7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gNCAvKiBTRVRURVIgKi8pIHsKICAgICAgICAgICAgICAgIGRlc2Muc2V0ID0gdmFsdWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChpc1ByaXZhdGUpIHsKICAgICAgICAgICAgICAgIGlmIChraW5kID09PSAxIC8qIEFDQ0VTU09SICovKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goZnVuY3Rpb24gKGluc3RhbmNlLCBhcmdzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5nZXQuY2FsbChpbnN0YW5jZSwgYXJncyk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goZnVuY3Rpb24gKGluc3RhbmNlLCBhcmdzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5zZXQuY2FsbChpbnN0YW5jZSwgYXJncyk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09IDIgLyogTUVUSE9EICovKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2godmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXQucHVzaChmdW5jdGlvbiAoaW5zdGFuY2UsIGFyZ3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmNhbGwoaW5zdGFuY2UsIGFyZ3MpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGJhc2UsIG5hbWUsIGRlc2MpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGFwcGx5TWVtYmVyRGVjcyhDbGFzcywgZGVjSW5mb3MsIG1ldGFkYXRhKSB7CiAgICAgICAgdmFyIHJldCA9IFtdOwogICAgICAgIHZhciBwcm90b0luaXRpYWxpemVyczsKICAgICAgICB2YXIgc3RhdGljSW5pdGlhbGl6ZXJzOwoKICAgICAgICB2YXIgZXhpc3RpbmdQcm90b05vbkZpZWxkcyA9IG5ldyBNYXAoKTsKICAgICAgICB2YXIgZXhpc3RpbmdTdGF0aWNOb25GaWVsZHMgPSBuZXcgTWFwKCk7CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVjSW5mb3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIGRlY0luZm8gPSBkZWNJbmZvc1tpXTsKCiAgICAgICAgICAgIC8vIHNraXAgY29tcHV0ZWQgcHJvcGVydHkgbmFtZXMKICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRlY0luZm8pKSBjb250aW51ZTsKCiAgICAgICAgICAgIHZhciBraW5kID0gZGVjSW5mb1sxXTsKICAgICAgICAgICAgdmFyIG5hbWUgPSBkZWNJbmZvWzJdOwogICAgICAgICAgICB2YXIgaXNQcml2YXRlID0gZGVjSW5mby5sZW5ndGggPiAzOwoKICAgICAgICAgICAgdmFyIGlzU3RhdGljID0ga2luZCA+PSA1OyAvKiBTVEFUSUMgKi8KICAgICAgICAgICAgdmFyIGJhc2U7CiAgICAgICAgICAgIHZhciBpbml0aWFsaXplcnM7CgogICAgICAgICAgICBpZiAoaXNTdGF0aWMpIHsKICAgICAgICAgICAgICAgIGJhc2UgPSBDbGFzczsKICAgICAgICAgICAgICAgIGtpbmQgPSBraW5kIC0gNSAvKiBTVEFUSUMgKi87CiAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIHN0YXRpY0luaXRpYWxpemVycyB3aGVuIHdlIHNlZSBhIG5vbi1maWVsZCBzdGF0aWMgbWVtYmVyCiAgICAgICAgICAgICAgICBzdGF0aWNJbml0aWFsaXplcnMgPSBzdGF0aWNJbml0aWFsaXplcnMgfHwgW107CiAgICAgICAgICAgICAgICBpbml0aWFsaXplcnMgPSBzdGF0aWNJbml0aWFsaXplcnM7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBiYXNlID0gQ2xhc3MucHJvdG90eXBlOwogICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBwcm90b0luaXRpYWxpemVycyB3aGVuIHdlIHNlZSBhIG5vbi1maWVsZCBtZW1iZXIKICAgICAgICAgICAgICAgIHByb3RvSW5pdGlhbGl6ZXJzID0gcHJvdG9Jbml0aWFsaXplcnMgfHwgW107CiAgICAgICAgICAgICAgICBpbml0aWFsaXplcnMgPSBwcm90b0luaXRpYWxpemVyczsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGtpbmQgIT09IDAgLyogRklFTEQgKi8gJiYgIWlzUHJpdmF0ZSkgewogICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nTm9uRmllbGRzID0gaXNTdGF0aWMKICAgICAgICAgICAgICAgICAgICA/IGV4aXN0aW5nU3RhdGljTm9uRmllbGRzCiAgICAgICAgICAgICAgICAgICAgOiBleGlzdGluZ1Byb3RvTm9uRmllbGRzOwoKICAgICAgICAgICAgICAgIHZhciBleGlzdGluZ0tpbmQgPSBleGlzdGluZ05vbkZpZWxkcy5nZXQobmFtZSkgfHwgMDsKCiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdLaW5kID09PSB0cnVlIHx8CiAgICAgICAgICAgICAgICAgICAgKGV4aXN0aW5nS2luZCA9PT0gMyAvKiBHRVRURVIgKi8gJiYga2luZCAhPT0gNCkgLyogU0VUVEVSICovIHx8CiAgICAgICAgICAgICAgICAgICAgKGV4aXN0aW5nS2luZCA9PT0gNCAvKiBTRVRURVIgKi8gJiYga2luZCAhPT0gMykgLyogR0VUVEVSICovCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICJBdHRlbXB0ZWQgdG8gZGVjb3JhdGUgYSBwdWJsaWMgbWV0aG9kL2FjY2Vzc29yIHRoYXQgaGFzIHRoZSBzYW1lIG5hbWUgYXMgYSBwcmV2aW91c2x5IGRlY29yYXRlZCBwdWJsaWMgbWV0aG9kL2FjY2Vzc29yLiBUaGlzIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IHRoZSBkZWNvcmF0b3JzIHBsdWdpbi4gUHJvcGVydHkgbmFtZSB3YXM6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICBuYW1lCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWV4aXN0aW5nS2luZCAmJiBraW5kID4gMiAvKiBNRVRIT0QgKi8pIHsKICAgICAgICAgICAgICAgICAgICBleGlzdGluZ05vbkZpZWxkcy5zZXQobmFtZSwga2luZCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nTm9uRmllbGRzLnNldChuYW1lLCB0cnVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgYXBwbHlNZW1iZXJEZWMoCiAgICAgICAgICAgICAgICByZXQsCiAgICAgICAgICAgICAgICBiYXNlLAogICAgICAgICAgICAgICAgZGVjSW5mbywKICAgICAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgICAgICBraW5kLAogICAgICAgICAgICAgICAgaXNTdGF0aWMsCiAgICAgICAgICAgICAgICBpc1ByaXZhdGUsCiAgICAgICAgICAgICAgICBpbml0aWFsaXplcnMsCiAgICAgICAgICAgICAgICBtZXRhZGF0YQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcHVzaEluaXRpYWxpemVycyhyZXQsIHByb3RvSW5pdGlhbGl6ZXJzKTsKICAgICAgICBwdXNoSW5pdGlhbGl6ZXJzKHJldCwgc3RhdGljSW5pdGlhbGl6ZXJzKTsKICAgICAgICByZXR1cm4gcmV0OwogICAgfQoKICAgIGZ1bmN0aW9uIHB1c2hJbml0aWFsaXplcnMocmV0LCBpbml0aWFsaXplcnMpIHsKICAgICAgICBpZiAoaW5pdGlhbGl6ZXJzKSB7CiAgICAgICAgICAgIHJldC5wdXNoKGZ1bmN0aW9uIChpbnN0YW5jZSkgewogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplcnNbaV0uY2FsbChpbnN0YW5jZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBhcHBseUNsYXNzRGVjcyh0YXJnZXRDbGFzcywgY2xhc3NEZWNzLCBtZXRhZGF0YSkgewogICAgICAgIGlmIChjbGFzc0RlY3MubGVuZ3RoID4gMCkgewogICAgICAgICAgICB2YXIgaW5pdGlhbGl6ZXJzID0gW107CiAgICAgICAgICAgIHZhciBuZXdDbGFzcyA9IHRhcmdldENsYXNzOwogICAgICAgICAgICB2YXIgbmFtZSA9IHRhcmdldENsYXNzLm5hbWU7CgogICAgICAgICAgICBmb3IgKHZhciBpID0gY2xhc3NEZWNzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgICAgICB2YXIgZGVjb3JhdG9yRmluaXNoZWRSZWYgPSB7IHY6IGZhbHNlIH07CgogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dE5ld0NsYXNzID0gY2xhc3NEZWNzW2ldKG5ld0NsYXNzLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6ICJjbGFzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEluaXRpYWxpemVyOiBjcmVhdGVBZGRJbml0aWFsaXplck1ldGhvZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29yYXRvckZpbmlzaGVkUmVmCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgICAgICBkZWNvcmF0b3JGaW5pc2hlZFJlZi52ID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAobmV4dE5ld0NsYXNzICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBhc3NlcnRWYWxpZFJldHVyblZhbHVlKDEwIC8qIENMQVNTICovLCBuZXh0TmV3Q2xhc3MpOwogICAgICAgICAgICAgICAgICAgIG5ld0NsYXNzID0gbmV4dE5ld0NsYXNzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgZGVmaW5lTWV0YWRhdGEobmV3Q2xhc3MsIG1ldGFkYXRhKSwKICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplcnNbaV0uY2FsbChuZXdDbGFzcyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXTsKICAgICAgICB9CiAgICAgICAgLy8gVGhlIHRyYW5zZm9ybWVyIHdpbGwgbm90IGVtaXQgYXNzaWdubWVudCB3aGVuIHRoZXJlIGFyZSBubyBjbGFzcyBkZWNvcmF0b3JzLAogICAgICAgIC8vIHNvIHdlIGRvbid0IGhhdmUgdG8gcmV0dXJuIGFuIGVtcHR5IGFycmF5IGhlcmUuCiAgICB9CgogICAgZnVuY3Rpb24gZGVmaW5lTWV0YWRhdGEoQ2xhc3MsIG1ldGFkYXRhKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgKICAgICAgICAgICAgQ2xhc3MsCiAgICAgICAgICAgIFN5bWJvbC5tZXRhZGF0YSB8fCBTeW1ib2wuZm9yKCJTeW1ib2wubWV0YWRhdGEiKSwKICAgICAgICAgICAgeyBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBtZXRhZGF0YSB9CiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgIEJhc2ljIHVzYWdlOgogIAogICAgYXBwbHlEZWNzKAogICAgICBDbGFzcywKICAgICAgWwogICAgICAgIC8vIG1lbWJlciBkZWNvcmF0b3JzCiAgICAgICAgWwogICAgICAgICAgZGVjLCAgICAgICAgICAgICAgICAvLyBkZWMgb3IgYXJyYXkgb2YgZGVjcwogICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAvLyBraW5kIG9mIHZhbHVlIGJlaW5nIGRlY29yYXRlZAogICAgICAgICAgJ3Byb3AnLCAgICAgICAgICAgICAvLyBuYW1lIG9mIHB1YmxpYyBwcm9wIG9uIGNsYXNzIGNvbnRhaW5pbmcgdGhlIHZhbHVlIGJlaW5nIGRlY29yYXRlZCwKICAgICAgICAgICcjcCcsICAgICAgICAgICAgICAgLy8gdGhlIG5hbWUgb2YgdGhlIHByaXZhdGUgcHJvcGVydHkgKGlmIGlzIHByaXZhdGUsIHZvaWQgMCBvdGhlcndpc2UpLAogICAgICAgIF0KICAgICAgXSwKICAgICAgWwogICAgICAgIC8vIGNsYXNzIGRlY29yYXRvcnMKICAgICAgICBkZWMxLCBkZWMyCiAgICAgIF0KICAgICkKICAgIGBgYAogIAogICAgRnVsbHkgdHJhbnNwaWxlZCBleGFtcGxlOgogIAogICAgYGBganMKICAgIEBkZWMKICAgIGNsYXNzIENsYXNzIHsKICAgICAgQGRlYwogICAgICBhID0gMTIzOwogIAogICAgICBAZGVjCiAgICAgICNhID0gMTIzOwogIAogICAgICBAZGVjCiAgICAgIEBkZWMyCiAgICAgIGFjY2Vzc29yIGIgPSAxMjM7CiAgCiAgICAgIEBkZWMKICAgICAgYWNjZXNzb3IgI2IgPSAxMjM7CiAgCiAgICAgIEBkZWMKICAgICAgYygpIHsgY29uc29sZS5sb2coJ2MnKTsgfQogIAogICAgICBAZGVjCiAgICAgICNjKCkgeyBjb25zb2xlLmxvZygncHJpdkMnKTsgfQogIAogICAgICBAZGVjCiAgICAgIGdldCBkKCkgeyBjb25zb2xlLmxvZygnZCcpOyB9CiAgCiAgICAgIEBkZWMKICAgICAgZ2V0ICNkKCkgeyBjb25zb2xlLmxvZygncHJpdkQnKTsgfQogIAogICAgICBAZGVjCiAgICAgIHNldCBlKHYpIHsgY29uc29sZS5sb2coJ2UnKTsgfQogIAogICAgICBAZGVjCiAgICAgIHNldCAjZSh2KSB7IGNvbnNvbGUubG9nKCdwcml2RScpOyB9CiAgICB9CiAgCiAgCiAgICAvLyBiZWNvbWVzCiAgICBsZXQgaW5pdGlhbGl6ZUluc3RhbmNlOwogICAgbGV0IGluaXRpYWxpemVDbGFzczsKICAKICAgIGxldCBpbml0QTsKICAgIGxldCBpbml0UHJpdkE7CiAgCiAgICBsZXQgaW5pdEI7CiAgICBsZXQgaW5pdFByaXZCLCBnZXRQcml2Qiwgc2V0UHJpdkI7CiAgCiAgICBsZXQgcHJpdkM7CiAgICBsZXQgcHJpdkQ7CiAgICBsZXQgcHJpdkU7CiAgCiAgICBsZXQgQ2xhc3M7CiAgICBjbGFzcyBfQ2xhc3MgewogICAgICBzdGF0aWMgewogICAgICAgIGxldCByZXQgPSBhcHBseURlY3MoCiAgICAgICAgICB0aGlzLAogICAgICAgICAgWwogICAgICAgICAgICBbZGVjLCAwLCAnYSddLAogICAgICAgICAgICBbZGVjLCAwLCAnYScsIChpKSA9PiBpLiNhLCAoaSwgdikgPT4gaS4jYSA9IHZdLAogICAgICAgICAgICBbW2RlYywgZGVjMl0sIDEsICdiJ10sCiAgICAgICAgICAgIFtkZWMsIDEsICdiJywgKGkpID0+IGkuI3ByaXZCRGF0YSwgKGksIHYpID0+IGkuI3ByaXZCRGF0YSA9IHZdLAogICAgICAgICAgICBbZGVjLCAyLCAnYyddLAogICAgICAgICAgICBbZGVjLCAyLCAnYycsICgpID0+IGNvbnNvbGUubG9nKCdwcml2QycpXSwKICAgICAgICAgICAgW2RlYywgMywgJ2QnXSwKICAgICAgICAgICAgW2RlYywgMywgJ2QnLCAoKSA9PiBjb25zb2xlLmxvZygncHJpdkQnKV0sCiAgICAgICAgICAgIFtkZWMsIDQsICdlJ10sCiAgICAgICAgICAgIFtkZWMsIDQsICdlJywgKCkgPT4gY29uc29sZS5sb2coJ3ByaXZFJyldLAogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgZGVjCiAgICAgICAgICBdCiAgICAgICAgKQogIAogICAgICAgIGluaXRBID0gcmV0WzBdOwogIAogICAgICAgIGluaXRQcml2QSA9IHJldFsxXTsKICAKICAgICAgICBpbml0QiA9IHJldFsyXTsKICAKICAgICAgICBpbml0UHJpdkIgPSByZXRbM107CiAgICAgICAgZ2V0UHJpdkIgPSByZXRbNF07CiAgICAgICAgc2V0UHJpdkIgPSByZXRbNV07CiAgCiAgICAgICAgcHJpdkMgPSByZXRbNl07CiAgCiAgICAgICAgcHJpdkQgPSByZXRbN107CiAgCiAgICAgICAgcHJpdkUgPSByZXRbOF07CiAgCiAgICAgICAgaW5pdGlhbGl6ZUluc3RhbmNlID0gcmV0WzldOwogIAogICAgICAgIENsYXNzID0gcmV0WzEwXQogIAogICAgICAgIGluaXRpYWxpemVDbGFzcyA9IHJldFsxMV07CiAgICAgIH0KICAKICAgICAgYSA9IChpbml0aWFsaXplSW5zdGFuY2UodGhpcyksIGluaXRBKHRoaXMsIDEyMykpOwogIAogICAgICAjYSA9IGluaXRQcml2QSh0aGlzLCAxMjMpOwogIAogICAgICAjYkRhdGEgPSBpbml0Qih0aGlzLCAxMjMpOwogICAgICBnZXQgYigpIHsgcmV0dXJuIHRoaXMuI2JEYXRhIH0KICAgICAgc2V0IGIodikgeyB0aGlzLiNiRGF0YSA9IHYgfQogIAogICAgICAjcHJpdkJEYXRhID0gaW5pdFByaXZCKHRoaXMsIDEyMyk7CiAgICAgIGdldCAjYigpIHsgcmV0dXJuIGdldFByaXZCKHRoaXMpOyB9CiAgICAgIHNldCAjYih2KSB7IHNldFByaXZCKHRoaXMsIHYpOyB9CiAgCiAgICAgIGMoKSB7IGNvbnNvbGUubG9nKCdjJyk7IH0KICAKICAgICAgI2MoLi4uYXJncykgeyByZXR1cm4gcHJpdkModGhpcywgLi4uYXJncykgfQogIAogICAgICBnZXQgZCgpIHsgY29uc29sZS5sb2coJ2QnKTsgfQogIAogICAgICBnZXQgI2QoKSB7IHJldHVybiBwcml2RCh0aGlzKTsgfQogIAogICAgICBzZXQgZSh2KSB7IGNvbnNvbGUubG9nKCdlJyk7IH0KICAKICAgICAgc2V0ICNlKHYpIHsgcHJpdkUodGhpcywgdik7IH0KICAgIH0KICAKICAgIGluaXRpYWxpemVDbGFzcyhDbGFzcyk7CiAgICovCgogICAgcmV0dXJuIGZ1bmN0aW9uIGFwcGx5RGVjczIyMDNSKHRhcmdldENsYXNzLCBtZW1iZXJEZWNzLCBjbGFzc0RlY3MsIHBhcmVudENsYXNzKSB7CiAgICAgICAgaWYgKHBhcmVudENsYXNzICE9PSB2b2lkIDApIHsKICAgICAgICAgICAgdmFyIHBhcmVudE1ldGFkYXRhID0KICAgICAgICAgICAgICAgIHBhcmVudENsYXNzW1N5bWJvbC5tZXRhZGF0YSB8fCBTeW1ib2wuZm9yKCJTeW1ib2wubWV0YWRhdGEiKV07CiAgICAgICAgfQogICAgICAgIHZhciBtZXRhZGF0YSA9IE9iamVjdC5jcmVhdGUoCiAgICAgICAgICAgIHBhcmVudE1ldGFkYXRhID09PSB2b2lkIDAgPyBudWxsIDogcGFyZW50TWV0YWRhdGEKICAgICAgICApOwogICAgICAgIHZhciBlID0gYXBwbHlNZW1iZXJEZWNzKHRhcmdldENsYXNzLCBtZW1iZXJEZWNzLCBtZXRhZGF0YSk7CiAgICAgICAgaWYgKCFjbGFzc0RlY3MubGVuZ3RoKSBkZWZpbmVNZXRhZGF0YSh0YXJnZXRDbGFzcywgbWV0YWRhdGEpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGU6IGUsCiAgICAgICAgICAgIC8vIExhemlseSBhcHBseSBjbGFzcyBkZWNvcmF0aW9ucyBzbyB0aGF0IG1lbWJlciBpbml0IGxvY2FscyBjYW4gYmUgcHJvcGVybHkgYm91bmQuCiAgICAgICAgICAgIGdldCBjKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGFwcGx5Q2xhc3NEZWNzKHRhcmdldENsYXNzLCBjbGFzc0RlY3MsIG1ldGFkYXRhKTsKICAgICAgICAgICAgfSwKICAgICAgICB9OwogICAgfTsKfQoKZnVuY3Rpb24gX2FwcGx5X2RlY3NfMjIwM19yKHRhcmdldENsYXNzLCBtZW1iZXJEZWNzLCBjbGFzc0RlY3MsIHBhcmVudENsYXNzKSB7CiAgICByZXR1cm4gKF9hcHBseV9kZWNzXzIyMDNfciA9IGFwcGx5RGVjczIyMDNSRmFjdG9yeSgpKSgKICAgICAgICB0YXJnZXRDbGFzcywKICAgICAgICBtZW1iZXJEZWNzLAogICAgICAgIGNsYXNzRGVjcywKICAgICAgICBwYXJlbnRDbGFzcwogICAgKTsKfQpmdW5jdGlvbiBfaWRlbnRpdHkoeCkgeyByZXR1cm4geDsgfQovKiBAbWluVmVyc2lvbiA3LjIyLjAgKi8KZnVuY3Rpb24gZGlzcG9zZV9TdXBwcmVzc2VkRXJyb3Ioc3VwcHJlc3NlZCwgZXJyb3IpIHsKICAgIGlmICh0eXBlb2YgU3VwcHJlc3NlZEVycm9yICE9PSAidW5kZWZpbmVkIikgewogICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZgogICAgICAgIGRpc3Bvc2VfU3VwcHJlc3NlZEVycm9yID0gU3VwcHJlc3NlZEVycm9yOwogICAgfSBlbHNlIHsKICAgICAgICBkaXNwb3NlX1N1cHByZXNzZWRFcnJvciA9IGZ1bmN0aW9uIFN1cHByZXNzZWRFcnJvcihzdXBwcmVzc2VkLCBlcnJvcikgewogICAgICAgICAgICB0aGlzLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkOwogICAgICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7CiAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjazsKICAgICAgICB9OwogICAgICAgIGRpc3Bvc2VfU3VwcHJlc3NlZEVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlLCB7CiAgICAgICAgICAgIGNvbnN0cnVjdG9yOiB7CiAgICAgICAgICAgICAgICB2YWx1ZTogZGlzcG9zZV9TdXBwcmVzc2VkRXJyb3IsCiAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgfSwKICAgICAgICB9KTsKICAgIH0KICAgIHJldHVybiBuZXcgZGlzcG9zZV9TdXBwcmVzc2VkRXJyb3Ioc3VwcHJlc3NlZCwgZXJyb3IpOwp9CgpmdW5jdGlvbiBfZGlzcG9zZShzdGFjaywgZXJyb3IsIGhhc0Vycm9yKSB7CiAgICBmdW5jdGlvbiBuZXh0KCkgewogICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICB2YXIgciA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgICAgICAgdmFyIHAgPSByLmQuY2FsbChyLnYpOwogICAgICAgICAgICAgICAgaWYgKHIuYSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwKS50aGVuKG5leHQsIGVycik7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBlcnIoZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGhhc0Vycm9yKSB0aHJvdyBlcnJvcjsKICAgIH0KCiAgICBmdW5jdGlvbiBlcnIoZSkgewogICAgICAgIGVycm9yID0gaGFzRXJyb3IgPyBuZXcgZGlzcG9zZV9TdXBwcmVzc2VkRXJyb3IoZSwgZXJyb3IpIDogZTsKICAgICAgICBoYXNFcnJvciA9IHRydWU7CgogICAgICAgIHJldHVybiBuZXh0KCk7CiAgICB9CgogICAgcmV0dXJuIG5leHQoKTsKfWZ1bmN0aW9uIF91c2luZyhzdGFjaywgdmFsdWUsIGlzQXdhaXQpIHsKICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gdmFsdWU7CiAgICBpZiAoT2JqZWN0KHZhbHVlKSAhPT0gdmFsdWUpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJ1c2luZyBkZWNsYXJhdGlvbnMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIG9iamVjdHMsIGZ1bmN0aW9ucywgbnVsbCwgb3IgdW5kZWZpbmVkLiIpOwogICAgfQogICAgLy8gY29yZS1qcy1wdXJlIHVzZXMgU3ltYm9sLmZvciBmb3IgcG9seWZpbGxpbmcgd2VsbC1rbm93biBzeW1ib2xzCiAgICBpZiAoaXNBd2FpdCkgewogICAgICAgIHZhciBkaXNwb3NlID0KICAgICAgICAgICAgdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZSB8fCBTeW1ib2wuZm9yKCJTeW1ib2wuYXN5bmNEaXNwb3NlIildOwogICAgfQogICAgaWYgKGRpc3Bvc2UgPT09IG51bGwgfHwgZGlzcG9zZSA9PT0gdm9pZCAwKSB7CiAgICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5kaXNwb3NlIHx8IFN5bWJvbC5mb3IoIlN5bWJvbC5kaXNwb3NlIildOwogICAgfQogICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgUHJvcGVydHkgW1N5bWJvbC5kaXNwb3NlXSBpcyBub3QgYSBmdW5jdGlvbi5gKTsKICAgIH0KICAgIHN0YWNrLnB1c2goeyB2OiB2YWx1ZSwgZDogZGlzcG9zZSwgYTogaXNBd2FpdCB9KTsKICAgIHJldHVybiB2YWx1ZTsKfWZ1bmN0aW9uIF91c2luZ19jdHgoKSB7CiAgICB2YXIgX2Rpc3Bvc2VTdXBwcmVzc2VkRXJyb3IgPQogICAgICAgIHR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09ICJmdW5jdGlvbiIKICAgICAgICAgICAgPyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWYKICAgICAgICAgICAgU3VwcHJlc3NlZEVycm9yCiAgICAgICAgICAgIDogKGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCkgewogICAgICAgICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcigpOwogICAgICAgICAgICAgICAgZXJyLm5hbWUgPSAiU3VwcHJlc3NlZEVycm9yIjsKICAgICAgICAgICAgICAgIGVyci5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZDsKICAgICAgICAgICAgICAgIGVyci5lcnJvciA9IGVycm9yOwogICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgICAgfSksCiAgICAgICAgZW1wdHkgPSB7fSwKICAgICAgICBzdGFjayA9IFtdOwogICAgZnVuY3Rpb24gdXNpbmcoaXNBd2FpdCwgdmFsdWUpIHsKICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICAgICAgICBpZiAoT2JqZWN0KHZhbHVlKSAhPT0gdmFsdWUpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgInVzaW5nIGRlY2xhcmF0aW9ucyBjYW4gb25seSBiZSB1c2VkIHdpdGggb2JqZWN0cywgZnVuY3Rpb25zLCBudWxsLCBvciB1bmRlZmluZWQuIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gY29yZS1qcy1wdXJlIHVzZXMgU3ltYm9sLmZvciBmb3IgcG9seWZpbGxpbmcgd2VsbC1rbm93biBzeW1ib2xzCiAgICAgICAgICAgIGlmIChpc0F3YWl0KSB7CiAgICAgICAgICAgICAgICB2YXIgZGlzcG9zZSA9CiAgICAgICAgICAgICAgICAgICAgdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZSB8fCBTeW1ib2wuZm9yKCJTeW1ib2wuYXN5bmNEaXNwb3NlIildOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChkaXNwb3NlID09IG51bGwpIHsKICAgICAgICAgICAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuZGlzcG9zZSB8fCBTeW1ib2wuZm9yKCJTeW1ib2wuZGlzcG9zZSIpXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodHlwZW9mIGRpc3Bvc2UgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFByb3BlcnR5IFtTeW1ib2wuZGlzcG9zZV0gaXMgbm90IGEgZnVuY3Rpb24uYCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3RhY2sucHVzaCh7IHY6IHZhbHVlLCBkOiBkaXNwb3NlLCBhOiBpc0F3YWl0IH0pOwogICAgICAgIH0gZWxzZSBpZiAoaXNBd2FpdCkgewogICAgICAgICAgICAvLyBwcm92aWRlIHRoZSBudWxsaXNoIGB2YWx1ZWAgYXMgYGRgIGZvciBtaW5pZmljYXRpb24gZ2FpbgogICAgICAgICAgICBzdGFjay5wdXNoKHsgZDogdmFsdWUsIGE6IGlzQXdhaXQgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KICAgIHJldHVybiB7CiAgICAgICAgLy8gZXJyb3IKICAgICAgICBlOiBlbXB0eSwKICAgICAgICAvLyB1c2luZwogICAgICAgIHU6IHVzaW5nLmJpbmQobnVsbCwgZmFsc2UpLAogICAgICAgIC8vIGF3YWl0IHVzaW5nCiAgICAgICAgYTogdXNpbmcuYmluZChudWxsLCB0cnVlKSwKICAgICAgICAvLyBkaXNwb3NlCiAgICAgICAgZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLmU7CgogICAgICAgICAgICBmdW5jdGlvbiBuZXh0KCkgewogICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZQogICAgICAgICAgICAgICAgd2hpbGUgKChyZXNvdXJjZSA9IHN0YWNrLnBvcCgpKSkgewogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2FsUmVzdWx0ID0gcmVzb3VyY2UuZCAmJiByZXNvdXJjZS5kLmNhbGwocmVzb3VyY2Uudik7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZS5hKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRpc3Bvc2FsUmVzdWx0KS50aGVuKG5leHQsIGVycik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnIoZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGVycm9yICE9PSBlbXB0eSkgdGhyb3cgZXJyb3I7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZ1bmN0aW9uIGVycihlKSB7CiAgICAgICAgICAgICAgICBlcnJvciA9IGVycm9yICE9PSBlbXB0eSA/IG5ldyBfZGlzcG9zZVN1cHByZXNzZWRFcnJvcihlcnJvciwgZSkgOiBlOwoKICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7CiAgICAgICAgfSwKICAgIH07Cn0AADjIEgBzAAAAogYAADYAAABhc3NlcnRpb24gZmFpbGVkOiBpbmRpY2VzLmNhcGFjaXR5KCkgLSBpbmRpY2VzLmxlbigpID49IGVudHJpZXMubGVuKCkvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9pbmRleG1hcC0yLjIuNi9zcmMvbWFwL2NvcmUvcmF3LnJzAACFxxIAYQAAAA4AAAAFAAAATWFya2VyIHByb3ZpZGVkIHRvIHJlc29sdmVyIHNob3VsZCBub3QgYmUgdGhlIHJvb3QgbWFyawD4xxIANwAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19lY21hX3RyYW5zZm9ybXNfYmFzZS0wLjE0NC4wL3NyYy9yZXNvbHZlci9tb2QucnMAOMgSAHMAAACKAAAABQAAAGIDAAAoAAAACAAAAI0AAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlOiBkZXN0cnVjdHVyaW5nIHBhdHRlcm4gaW5zaWRlIFRzUGFyYW1ldGVyUHJvcGVydHkAAMzIEgBaAAAAdM4SAHYAAAC1AAAAIQAAAHTOEgB2AAAA/AAAAEcAAABPbmx5IGFtYmllbnQgbW9kdWxlcyBjYW4gdXNlIHF1b3RlZCBuYW1lcy4AAHTOEgB2AAAAGgEAABIAAAB0zhIAdgAAAJkBAAANAAAAdM4SAHYAAAC5AgAAEgAAAF9rZXl0zhIAdgAAABEDAABRAAAAdM4SAHYAAAAbAwAAJwAAAF9jcmVhdGVSZXF1aXJlX19yZXF1aXJlZXhwb3J0c2NyZWF0ZVJlcXVpcmV1cmwAAHTOEgB2AAAAggQAABoAAAB0zhIAdgAAAIQEAAAaAAAAdM4SAHYAAADpBAAAOwAAACQCAAAMAAAABAAAACUCAABjAwAAdAIAQdCUywALigoBAAAALAIAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19lY21hX3RyYW5zZm9ybXNfdHlwZXNjcmlwdC0wLjE5Ny4xL3NyYy90c19lbnVtLnJzTmFOAFjKEgB0AAAApwAAABIAAABYyhIAdAAAANAAAAAaAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc3djX2VjbWFfdHJhbnNmb3Jtc190eXBlc2NyaXB0LTAuMTk3LjEvc3JjL3R5cGVzY3JpcHQucnMA8MoSAHcAAABAAAAALAAAAGQDAAAEAAAABAAAAI8AAABub3QgaW1wbGVtZW50ZWQAbM8SAGAAAACUDAAAPgAAAGzPEgBgAAAAWgwAACoAAABJbXBvcnQgZGVjbGFyYXRpb25zIGluIGEgbmFtZXNwYWNlIGNhbm5vdCByZWZlcmVuY2UgYSBtb2R1bGUuRVNNLXN0eWxlIG1vZHVsZSBkZWNsYXJhdGlvbnMgYXJlIG5vdCBwZXJtaXR0ZWQgaW4gYSBuYW1lc3BhY2UuSW1wb3J0IGFzc2lnbm1lbnQgY2Fubm90IGJlIHVzZWQgd2hlbiB0YXJnZXRpbmcgRUNNQVNjcmlwdCBtb2R1bGVzLiBDb25zaWRlciB1c2luZyBgaW1wb3J0ICogYXMgbnMgZnJvbSAibW9kImAsIGBpbXBvcnQge2F9IGZyb20gIm1vZCJgLCBgaW1wb3J0IGQgZnJvbSAibW9kImAsIG9yIGFub3RoZXIgbW9kdWxlIGZvcm1hdCBpbnN0ZWFkLkV4cG9ydCBhc3NpZ25tZW50IGNhbm5vdCBiZSB1c2VkIHdoZW4gdGFyZ2V0aW5nIEVDTUFTY3JpcHQgbW9kdWxlcy4gQ29uc2lkZXIgdXNpbmcgYGV4cG9ydCBkZWZhdWx0YCBvciBhbm90aGVyIG1vZHVsZSBmb3JtYXQgaW5zdGVhZC4AAGUDAAAEAAAABAAAAI8AAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9zd2NfZWNtYV90cmFuc2Zvcm1zX3R5cGVzY3JpcHQtMC4xOTcuMS9zcmMvc3RyaXBfdHlwZS5ycwCMzRIAdwAAAMkAAAApAAAAaW50ZXJuYWwgZXJyb3I6IGVudGVyZWQgdW5yZWFjaGFibGUgY29kZTogb25seSBuYW1lZCBleHBvcnQgaXMgYWxsb3dlZCBmb3Igc3JjID0gTm9uZQAAABTOEgBVAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc3djX2VjbWFfdHJhbnNmb3Jtc190eXBlc2NyaXB0LTAuMTk3LjEvc3JjL3RyYW5zZm9ybS5ycwAAdM4SAHYAAADwAwAAHgAAAHN0cnVjdCBDb25maWdlbnVtIFRzSW1wb3J0RXhwb3J0QXNzaWduQ29uZmlnZW51bSBJbXBvcnRzTm90VXNlZEFzVmFsdWVzACQCAAAMAAAABAAAACUCAABjAwAAdAIAQeSeywALzgIBAAAALAIAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19lY21hX3V0aWxzLTAuMTM0LjEvc3JjL2xpYi5yc18AAAABAAAAAAAAAMzPEgABAAAAc3VwZXJfAADgzxIABgAAAMzPEgABAAAAL3Vzci9sb2NhbC9jYXJnby9y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ZU11bHRpU3BhbnByaW1hcnlfc3BhbnNzcGFuX2xhYmVscwAAAAAAAAEAAAABAAAAiAMAAIkDAAAMAAAABAAAAHMAAACKAwAAEAAAAAQAAACLAwAAjAMAABgAAAAEAAAAdAAAAI0DAAAMAAAABAAAAI4DAAAAAAAABAAAAAQAAACPAwAAbGV2ZWxtZXNzYWdlY29kZWNoaWxkcmVuc3VnZ2VzdGlvbnMAmNcSAAUAAACd1xIABwAAAKTXEgAEAAAAzxMTAAQAAACo1xIACAAAALDXEgALAAAARGlhZ25vc3RpYwAAJAIAAAwAAAAEAAAAXQIAAGECAAB0AgBBmLDLAAupBQEAAAAsAgAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAADwIBMATwAAAPsBAAA3AAAAL3J1c3RjLzUwNjk4NTY0OTU4NzA0ODYxMzRkZDJjYTBiMGUyNTE2MzA4YzVjMmEvbGlicmFyeS9jb3JlL3NyYy9zbGljZS9zb3J0L3Vuc3RhYmxlL3F1aWNrc29ydC5ycwAAAFDYEgBhAAAAbQAAAAcAAABQ2BIAYQAAAHwAAAAHAAAAUNgSAGEAAAA3AAAAGwAAAC9ydXN0Yy81MDY5ODU2NDk1ODcwNDg2MTM0ZGQyY2EwYjBlMjUxNjMwOGM1YzJhL2xpYnJhcnkvY29yZS9zcmMvc2xpY2Uvc29ydC91bnN0YWJsZS9oZWFwc29ydC5yc+TYEgBgAAAAHQAAAB0AAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi90eXBlZC1hcmVuYS0yLjAuMi9zcmMvbGliLnJzAFTZEgBbAAAAwgAAACYAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9zd2NfZWNtYV9wYXJzZXItMC4xNDkuMC9zcmMvcGFyc2VyL3N0bXQucnMAAADA2RIAaQAAANwFAAAJAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc3djX2VjbWFfcGFyc2VyLTAuMTQ5LjAvc3JjL3Bh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aW5zdGFuY2VvZioqPz8rKy0tL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc3djX2VjbWFfY29kZWdlbi0wLjE1NS4wL3NyYy90eXBlc2NyaXB0LnJzYXMoPT57fWRlY2xhcmVuYW1lc3BhY2VgAADJAhMAaQAAALYBAAAiAAAAJHsAAMkCEwBpAAAAuQEAACEAAABleHRlbmRzPzplbnVtLi4uW11pbmZlcnJlYWRvbmx5b3V0aW1wb3J0Lm1vZHVsZWdsb2JhbGFueXVua25vd25udW1iZXJvYmplY3Rib29sZWFuYmlnaW50c3RyaW5nc3ltYm9sdW5kZWZpbmVkbnVsbG5ldmVyaW50cmluc2lja2V5b2Z1bmlxdWVpbnRlcmZhY2VleHBvcnRzYXRpc2ZpZXNhc3NlcnRzaXN0eXBlYWJzdHJhY3RuZXdnZXRzZXRyZXF1aXJlANgBEwB1AAAAdAAAABoAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9zd2NfZWNtYV9jb2RlZ2VuLTAuMTU1LjAvc3JjL2xpYi5yc3N1cGVyZGVmZXIsZnJvbXdpdGhhc3NlcnRhc3NlcnRpb24gZmFpbGVkOiBuLnNwZWNpZmllcnMubGVuKCkgPD0gMkgEEwBiAAAAZAEAABUAAAAjIQAASAQTAGIAAABPDgAAEgAAAG4tMHgRBRMAAwAAADB4AAAcBRMAAgAAAGZ1bmN0aW9uYXN5bmNpZmVsc2U8aW52YWxpZD51c2Ugc3RyaWN0PCEtLVx4M2MhLS0tLT4tLVx4M2UAAEgEEwBiAAAArwcAACIAAABIBBMAYgAAALIHAAAhAAAAZm9ydHJ5ZmluYWxseUA/LmF3YWl0YnJlYWtjbGFzc3Rocm93d2hpbGV5aWVsZG9mcmV0dXJuY2FzZWRlZmF1bHQAAABIBBMAYgAAAFwNAAAaAAAASAQTAGIAAABfDQAAOwAAAHN3aXRjaGNhdGNoI3B1YmxpY3Byb3RlY3RlZHByaXZhdGVhY2Nlc3NvcmNvbnRpbnVlZGVidWdnZXJkb2ltcGxlbWVudHNuZXcudGFyZ2V0aW1w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AAC8AwAAzBATAL4DAAC/AwAADwIAAL4DAAAJAAAAwAMAADAAAAAEAAAAEwIAAMADAAAwAAAABAAAABQCAAATAgAACBETABUCAADBAwAAFwIAABUCAAAYAgAAwgMAADgAAAAEAAAAEwIAAMIDAAA4AAAABAAAABQCAAATAgAARBETABUCAADDAwAAFwIAABUCAAAYAgAARXJyb3Jjb250ZXh0c291cmNlAADEAwAADAAAAAQAAADFAwAAxAMAAAwAAAAEAAAAAAIAAMUDAACUERMALwIAAMYDAAAPAgAAxwMAAAkAAADIAwAAyQMAAMoDAADLAwAAzAMAAM0DAADOAwAAzwMAANADAADRAwAAaW50ZXJuYWwgZXJyb3I6IGVudGVyZWQgdW5yZWFjaGFibGUgY29kZTogTW9kdWxlIGlzIGhhbmRsZWQgYWJvdmUAAAD4ERMAQQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19lY21hX3BhcnNlci0wLjE0OS4wL3NyYy9wYXJzZXIvbW9kLnJzRBITAGgAAACwAAAAMgAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19lY21hX3BhcnNlci0wLjE0OS4wL3NyYy9wYXJzZXIvcGF0LnJzvBITAGgAAACRAgAAKgAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19lY21hX3BhcnNlci0wLjE0OS4wL3NyYy9wYXJzZXIvZXhwci5ycwAAADQTEwBpAAAApwMAABoAAABUb2tlbkFuZFNwYW50b2tlbmhhZF9saW5lX2JyZWFrc3Bhbi91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19lY21hX3BhcnNlci0wLjE0OS4wL3NyYy9wYXJzZXIvaW5wdXQucnMAAADTExMAagAAAMcAAAArAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc3djX2VjbWFfcGFyc2VyLTAuMTQ5LjAvc3JjL2xleGVyL3N0YXRlLnJzAAAAUBQTAGkAAAB/AAAALgAAAFAUEwBpAAAAgAAAADgAAABQFBMAaQAAAIEAAAAZAAAAPGVvZj5kZXNjcmlwdGlvbigpIGlzIGRlcHJlY2F0ZWQ7IHVzZSBEaXNwbGF5SW9VdGY4QmFkSnNvblZscUxlZnRvdmVyVmxxTm9WYWx1ZXNWbHFPdmVyZmxvd0JhZFNlZ21lbnRTaXplQmFkU291cmNlUmVmZXJlbmNlQmFkTmFtZVJlZmVyZW5jZUluY29tcGF0aWJsZVNvdXJjZU1hcEludmFsaWREYXRhVXJsQ2Fubm90RmxhdHRlbkludmFsaWRSYW1CdW5kbGVNYWdpY0ludmFsaWRSYW1CdW5kbGVJbmRleEludmFsaWRSYW1CdW5kbGVFbnRyeU5vdEFSYW1CdW5kbGVJbnZhbGlkUmFuZ2VNYXBwaW5nSW5kZXhJbnZhbGlkQmFzZTY0AAAAAAgAAAAEAAAArQMAAFJlZkNlbGx2YWx1ZTxib3Jyb3dlZD4AADQWEwAKAAAAaW52YWxpZCB1dGYtODogY29ycnVwdCBjb250ZW50cy9ydXN0Yy81MDY5ODU2NDk1ODcwNDg2MTM0ZGQyY2EwYjBlMjUxNjMwOGM1YzJhL2xpYnJhcnkvY29yZS9zcmMvc2xpY2Uvc29ydC9zdGFibGUvZHJpZnQucnMAAGcWEwBbAAAAAQEAABkAAABnFhMAWwAAAPQAAAASAAAAZxYTAFsAAADQAAAAJAAAAGcWEwBbAAAA0wAAACQAAABnFhMAWwAAAEIAAAAiAAAASBgTAFoAAAArAQAAKQAAAEgYEwBaAAAAOgEAACUAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi91bmljb2RlLXdpZHRoLTAuMS4xMy9zcmMvdGFibGVzLnJzAAAANBcTAGEAAAAnAAAAGQAAADQXEwBhAAAALQAAAB0AAAAvcnVzdGMvNTA2OTg1NjQ5NTg3MDQ4NjEzNGRkMmNhMGIwZTI1MTYzMDhjNWMyYS9saWJyYXJ5L2Nv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EwBhAAAAYQAAABcAAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlL3J1c3RjLzUwNjk4NTY0OTU4NzA0ODYxMzRkZDJjYTBiMGUyNTE2MzA4YzVjMmEvbGlicmFyeS9hbGxvYy9zcmMvYm9ycm93LnJzAOgfEwBLAAAAGAEAACUAAABVdGY4RXJyb3J2YWxpZF91cF90b2Vycm9yX2xlbk5vbmVTb21lL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvdGV4dHdyYXAtMC4xNi4xL3NyYy93cmFwX2FsZ29yaXRobXMucnMAAGkgEwBlAAAAcQEAABoAAABpIBMAZQAAAGsBAAAiAAAAL3J1c3RjLzUwNjk4NTY0OTU4NzA0ODYxMzRkZDJjYTBiMGUyNTE2MzA4YzVjMmEvbGlicmFyeS9jb3JlL3NyYy9zdHIvcGF0dGVybi5ycwDwIBMATwAAAL8BAAA3AAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvdGV4dHdyYXAtMC4xNi4xL3NyYy93b3JkX3NwbGl0dGVycy5yc1AhEwBkAAAAmQAAACQAAABQIRMAZAAAAJoAAAAkAAAAL3J1c3RjLzUwNjk4NTY0OTU4NzA0ODYxMzRkZDJjYTBiMGUyNTE2MzA4YzVjMmEvbGlicmFyeS9hbGxvYy9zcmMvc3luYy5ycwAAAAEAAAAAAAAATGF6eSBpbnN0YW5jZSBoYXMgcHJldmlvdXNseSBiZWVuIHBvaXNvbmVkAAAoIhMAKgAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL29uY2VfY2VsbC0xLjE5LjAvc3JjL2xpYi5ycwAAXCITAFoAAAAfBQAAGQAAAAQLDxMXGx8jJy0xNDg8QAJFAAAAAABJAE0ABQUFBQUFBQUFBQUFBgUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVRVFhcBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQBBxMbMAAsoAWAoZGhscCt0dnp+goaKjpKWnKAFMqQAAAAAlwUFpgAAAAAAAAAFrABB/MbMAAsTBa8AswUFBQUFBQUFBQUFQwUFtwBBn8fMAAsImlK5AAAAALwAQbLHzAALmgLExgAAAK3M0NS62AAA3AAAAAAAAAAABQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXeBQUFBQUFBd/hBQUFBQUFBQUFBeQFBQUFBQUFBQUFBQUF4gXnAAAAAAXpAAAFBQUFBQUFBQXlBQUFBQUFBesAAAAAAAAIDREVGR0hJSovMTY6PkICRwAAAAAASwBPAAUFBQUFBQUFBQUFBQYFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFUVZaXgUFBQUFBQUFBQUFBQUFBQUFBQUFBQkAQdzJzAALKAFiKGZqbnIrdHh8gISIjJCUmZ6iBTKkAAAAAJcFBakAAAAAAAAABawAQZTKzAALEwWxALUFBQUFBQUFBQUFBUMFBbcAQbfKzAALuwGaUrkAAAAAvwAAAAAAAAAAp6rCxMgAygCtztLWutoAANwAAAAAAL0AAAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3gUFBQUFBQXf4QUFBQUFBQUFBQXkBQUFBQUFBQUFBQUFBeIF5wAAAAAF6QAABQUFBQUFBQUF5QUFBQUFBQXrAEHg1swACwHAAEHA18wAC0D/////////////////////////////////////////////Pz//////Pz//qv///z/////////fX9wfzw//H9wfAEGV2MwAC2MEIAT//3////9///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AQZXZzAALaQSgBP//f////3///////////////////////////////////////////////////////////////////////w8A//9/+P//////D////////////////////////////////8P/AwAfUABBjtrMAAuEBt+8QNf///v///////////+//////////////////////////////////8P/AwAfUAAA///////////////////fvMDX///7////////////v///////////////////////A/z///////////////////////////7///9/Av//////AQAAAAAAAAAA////hwcA//////////////////////v8///////////////////////////+////fwL//////wH+/////7+2AP///4cHAAAAAAD//////wcAAADA/v//////////////LwBgwACcAAD9////AAAA4P////////////8/AAIAAPz///8HMAQAAP8H////////////w////////////////++f//3/nwAA/////////+f///////////////8DAP///////z8k//8/BBABAAD///8B/wf///9+AAD//////wMAAAAAAADw////////IwAAAf8DAP7/4Z/5///9xSMAQACwAwADEP//////PwAA////D/8H////fgD////////////7////////////////////z//+/++f+f///cXzn3mAsM//A1Dgh/n///1tAwAAAF4AABwA4L/7///97SMAAAEAAwAAAuCf+f///e0jAAAAsAMAAgDoxz3WGMf/AwAAAQAAAAAA7of5///9bdOHOQJewP8/AO6/+////e3zvzsBAM//AP7un/n///3t85854LDP/wIA7Mc91hjH/8PHPYEAwP8AAODf/f///f8jAAAAJwMAAADh3/3///3vIwAAAGADAAYA8N/9/////ycAQHCAAwAA/OD/f/z///svfwAAAAAAAAD/3/3///3/8989YCfP/wAA79/9///97/PfPWBgz/8OAP/f/f//////333wgM//APzu/3/8///7L3+EX//A/wwA/v//////DQB/AAAAAAAAANb3//+v/w0gXwAA8AAAAAABAAAAAAAAAP/+////HwAAAB8AQaDgzAAL1AP+////////B/9//wMAAAAA1vf//6///z9ff//zAAAAAAEAAAP/A6DC//7///8f/v/f///+////H0AAAAAAAAAA//////8HAIAAAD88YsDh/wNAAAD/////vyD///////f///////////////////////////////////////////////////8/AAD///////////z///////8AAAAAAP8P////////////A////////////z//////vyD///////f//////////////////////////////////////////////////38A//8/AP8AAAC////////9BwAAAAAAAAAA////////////PX89//////89/////z1/Pf9//////////z3//////////wcAAAAA//8AAP////////////8/P////////////z1/Pf//////Pf////89fz3/f/////////89///////////nAP4DAP//AAD/////////////Pz/+/////////////////////////////////////////////////////////////////////////////////////////////////////////////wMAQYDkzAALiwL/////////////////n////v//B////////////8f/Af//A4D//wMA//8DAP/fAQD///////8PAAAAgBAAAAAA/////////////////5////7//wf////////////H/wH//z+A//8fAP//DwD/3w0A/////////////48w/wMAAAAAAAD//////////////wH//////wX//////////z8A////fwAAAAAAAP///z8fAP//////D////wMAAAAAAAAAuP8D//////////////8B//////8H//////////8/AP///3//D/8PwP////8/HwD//////w////8D/wcAAAAA//9/AP///////x8AQZTmzAALAYAAQaDmzAAL/wHg//////8PAOAfAAAAAAAA+P///wHAAPz/////PwAAAP///w//////////f////5//A/8DgAD/v/9/AAAAAAAA////////////H/8DAPgPAP//////////////////DwD/////DwAAAADgAPz///8//wH//////+cAAAAAAN5vBP///////////////////////////////wAAAAAAAAAA/////////wD/4///////P/8B///////nAAD3/////wf///////////////////////////////////////////////////////////////////////////////////8AQa7ozAALBgKAAAD/HwBBwOjMAAsShPwvP1D9//PgQwAA//////8BAEHh6MwACzEwAAAAAACAAQAQAAAAAoAAAP8fAAAAAAAA/x/i/wEAhPwvP1D9//PgQwAA//////8BAEGg6cwAC+AG/////////////////////////////////////x94DAD/////vyD/////////gAAA//9/AH9/f39/f39/AAAAAP////////////////////////////////////8f+A8A/////78g/////////4AAgP//fwB/f39/f39/f//////gAAAA/gM+H/7///////////9/+P7/////////////9+D///////7/////////////fwAA/////wAAAAAAAP//4AAAAP7/Ph/+////////////f/7+//////////////fg///////+/////////////38AAP////8AAAAAAAD/////////////////////////HwAAAAAAAAAA//////8/////////////////////////////////////////////////BwAEAAAAJwDwAP////////////////////////8f//8ADAAA//////9/AID///8//////////////wAAAACA//z////////////////5/////////wfrAwAA/P//H////w8AAP////////C///////////////////8DAAAAgP/8////////////////+f////////8H6wMAAPz/u/f//wcAAAD///////8PAPz//////w8AAAAAAAAA/GgA/P//PwD//38AAAD///8f8P//////BwAAgAAA3/8AfP//////EAAA////////DwD//////////z8A/wP////o//////8//////w8A////H///////////AYD/A////3///////wEAAPcPAAD//3/E////////Yj4FAAA4/wccAH5+fgB/f///////9/8D//////////////////8HAAAA////////fwD/P/8D//9//P//////////BwAAOP//fAB+fn4Af3////////f/A////////////////////zf/A/////////////////8//////////////////wMAAAAAfwD4oP/9f1/b/////////////////wMAAAD4////////////////////////P/////////////////8DAAAAAH8A+OD//X9f2/////////////////8DAAAA+P//////AEGO8MwAC6EB3/////////////////////8fAAAAAP7//wf+//8HwP////////////9//Pz8HAAAAAD//wAA//8YAADgAAAAAN//////////////////////HwAA/wP+//+H/v//B8D/////////////f/z8/BwAAAAA/+///3///7f/P/8/AAAAAP///////////////////wcAAAAAAAAAAP///////x8AQcDxzAALL//v//9///+3/z//PwAAAAD///////////////////8HAAAAAAAAAAD///////8fAEH/8cwACwEgAEGQ8swACyv///8f////////AQAAAAAA/////wDg////B/////8/AP///z//////D/8+AEHQ8swAC6MC////H////////wEAAQAAAP////8A4P///wf//////wf///8//////w//PgAAAAAA/////////////////////////z8AAP////8P/////w///////wD///////8PAP/3//e3//v/+xsAAAAAAAAAAP////////////////////////8//wP/////D/////8P//////8A////////DwD/9//3t//7//sbAAAAAAAAAAA//f////+/kf//PwD//38A////fwAAAAAAAAAA//83AP//PwD///8DAAAAAAAAAAD/////////wAAAAAAAAAAAAQDv/v//PwAAAAAA////H////x8AAAAA//7//x8AAAD///////8/AP//PwD//wcA//8DAEGA9cwACzNv8O/+//8/hwAAAAD///8f////HwAAAAD//v//fwAAAP///////z8A//8/AP//BwD//wMAQcD1zAALJf///////////wEAAAAAAAD///////8HAP///////wcA/////w8AQYD2zAALKP///////////wEAAAAAAAD///////8HAP///////wcA//////8A/wMAQdD2zAALB///////AwMAQeD2zAALH////x+AAP//PwAAAAAA//8DAAAAAAD//x8AAAD//38AQZD3zAAL3QH//////xsDAAAAAAAAAADg////H4AA/////wEAAAD//z8AAAAAAP//HwAAAP//fwD4////////AAAAAAAAACYA+P//////AAAAAP///wEAAPj///9/AAAAkAD/////RwD4//////8HAB4AABQAAAAA//////////9/AAAAwP8/gP////////8HBAD///8B/wP////////f//AA/////08A//////////8f3v8XAAAAAP//+///DwCAAQAAAAAAAAB/vf+//wH//////38AAAAA4J/5///97SMAAAHgAwBBgPnMAAsv///7/////8ADAAAAAAAAAH+9/7//Af////////8H/wPvn/n///3t+585geDPHx8AQcD5zAALGf///////x8AgAcAgAMAAAD///////8AALAAQfD5zAALLP//////fwAAAAAADwAAAAD///////////8H/8MDAAAA//////////+/AP8DAEGw+swACzn///////8//wEAAD8AAAAA////////AAAQAAAAAAAAAP//////BwABAAAAAAAAAAD///8HAAAAAH8AQYD7zAALKf//////////EQD/AwAAAAD/////////Af8DAAAAAAAA////5/8P/wN/AEHA+8wACwb//////w8AQdT7zAALFf//////////AAAAgH/yb////wCAAgBB9PvMAAsU//z/////AQAKAAAA/////////wcAQZT8zAALTP///////////wMAgH/yb////7/5DwD/AwAAAAAAAAAA//z///////wbAAAAAfj/////BwQAAAHw//////8DACAAAP///////////wEAQZL9zAALLv///////////////wEA/////////3+AAP///////////yMAAP///////////wEAQf79zAALFO9v//3///9/AAABAAAAAAD8////AEGg/swACxR/+/////8BAEAAAAC//f///wMAAQBBwP7MAAsX//3/////f/8BAP8DAAD8/////P///n8AQeD+zAALFn/7/////3+0/wD/A7/9////f/sB/wMAQZz/zAALC///BwD0//3///8PAEG2/8wACwEBAEHc/8wACxD//38A///9/////8cHAP8DAEH2/8wACwEBAEGAgM0ACyn/////////////////fwAA////////////////////////////////DwBBwIDNAAsJ////////AAB+AEGAgc0ACwn//////z///38AQaCBzQALC////////wAA//8/AEHsgc0ACwrg4wf45w8AAAA8AEGAgs0ACwn//////////38AQcCCzQALBv///3/gBwBB4ILNAAsy/////////wH///9/AAD///////////9/AAD///8/AAD///////8AAA8AAAD4///g//8AQaCDzQALMv////////8B////f/8D////////////f/8D////Px8A////////fwAPAP8D+P//4P//AEHog80ACwj//////////wBBgITNAAsd////////////BwEAAAAAAAAA+P8AAAAAAAAAAAsAQaiEzQALCP//////////AEHAhM0AC0L///////////+H/////////4D//wAAAAAAAAAAGwADAP//////////////////////////////////PwAAAAAA/wEAQaCFzQALIP////////////////////////////////////////8PAEH8hc0ACxh/b/9//////////////////wf/H/8B/wMAQd6GzQALFv8D/////////////////wf/H/8B/2MAQaCHzQALHv///////////////////////////////////////wBByIfNAAsBHABBgIjNAAvWAf/////////////f///////////fZN7/6+//////////v+ff3////3tf/P3//////////////////////////////////////////////////////z/////9///3////9///3////9///3////9//////f////3///cPAAAAAAAA//////////////////////////8//////f//9/////f//9/////f//9/////f/////3////9///3z////////////////3/4//////8fIAAQAAD4/v8AQYaKzQALCP////////8/AEGgis0ACwr//////x+APwBAAEHAis0ACxJ////52wf/////////PwAAAIAAQeCKzQALCv//////H/8//0MAQZKLzQALDP///z8AAP//////DwBB0ovNAAsO////fwAA/////////wMAQZqMzQALBP///w8AQdqMzQALBv//////AwBBgI3NAAsq////////////////////////////////HwAAAAAAAAD//////////w8IAEHAjc0ACyz///////////////////////////////8fAH8AAAAAAP///////////w//AwBBgI7NAAsY7////5b+9wqE6paqlvf3Xv/7/w/u+/8PAEHAjs0AC6wC/////////////////////////////////////wAAAAD///////////////////////////////////////////////////8D////////////////////////////////////P/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8BAP////////////////////////////8DAP///////////////////////////////////////////////////////////////////wf///////////////////////////////////////////8/AEGgkc0ACwT///8/AEHgkc0ACzb///////////////////////////////////////////////////////////////////////8AQcKSzQALlqQBQAB/AL8A9wD3APcA9wD3APcA9wAwAXABoQHhAfcA9wD3AB4C9wAuAl8ClgLWAhYDSwP3AHwDtgPrAwUERQSFBMUE9gQsBWgFpgXlBSMGYgagBt8GHQddB5sH2QcXCFcIlQjUCBIJUgmQCdAJEApPCo8KzgoOC04LjgvICwgMSAyIDLgM8gwyDVINcg2aDfcA2g0RDk8Ofg6jDsYO5g4mD/cA9wD3APcA9wD3APcA9wD3AGYPhg/GDwYQSAxGEIYQphDmEBYRVhGWEdYRDBI1ElYSlhLHEgcTQhOCE7wT+BM4FHgUtRT3APcA9wD1FPcA9wD3APcANRVvFSkCrxXvFS0WbRarFusWFxdRF38Xvxf9FzsYexizGPcA9wDeGBIZUhlyGXMZchmmGeYZIhpiGqIa4hofG1wbhRu7G/Yb9wD3APcA9wD3APcAMxxbHPcA9wD3APcA9wCZHM8c9wD3APcA9wDmHCYdVh2WHbYd9h02HnYekR7RHtEe0R77Hjsfex+4H/UfNSDRHoEeZiBGIKYg0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R73ANEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0SDRHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEeBCE9IfcA9wD3APcAfSG9IfshGyL3APcA9wBbIpki2SIZI1MjkyPMIwwkSySLJMskSAwIJUcldyX3AKcl5yXvJfcl/yXrJfMl+yXnJe8l9yX/Jesl8yX7Jecl7yX3Jf8l6yXzJfsl5yXvJfcl/yXrJfMl+yXnJe8l9yX/Jesl8yX7Jecl7yX3Jf8l6yXzJfsl5yXvJfcl/yXrJfMl+yXnJe8l9yX/Jesl8yX7Jecl7yX3Jf8l6yXzJfsl5yXvJfcl/yXrJfMl+yXnJe8l9yX/Jesl8yX7Jecl7yX3Jf8l6yXzJfsl5yXvJfcl/yXrJfMl+yXnJe8l9yX/Jesl8yX7Jecl7yX3Jf8l6yXzJfsl5yXvJfcl/yXrJfMl+yXnJe8l9yX/Jesl8yX7Jecl7yX3Jf8l6yXzJfsl5yXvJfcl/yXrJfMl+yXnJe8l9yX/Jesl8yX7Jecl7yX3Jf8l6yXzJfsl5yXvJfcl/yXrJfMl+yXnJe8l9yX/Jesl8yX7Jecl7yX3Jf8l6yXzJfsl5yXvJfcl/yXrJfMlMyZsJqwmrCasJqwmrCasJqwmrCasJqwmrCasJqwmrCasJqwmrCasJqwmrCasJqwmrCasJqwmrCasJqwmrCasJqwmrCbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJtEe0R7RHtEe0R7RHtEe0R4sJ2wn9wCpJ/cA9wD3APcAvCf3APwnNCh0KLAo9wDmKCYpZCmVKdQpYAp+CpsKugraCtoK2grbCtoK2graCtsK+wr7CvsK+wr7CvsK+wr7CvsK+wr7CvsK+wr7CvsK+wr7CvsK+wr7CvsK+wr7CvsK+wr7CvsK+wr7CvsK+wr7CvsK+wr7CvsK+wr7CvsK+wobC/cB9wD8ARQqaAJoAuwm7Cb3APcA9wD3APcA9wD3AOUEJCr3APcA4wn3APcA9wD3APQB2gktB+wm7Cb3APcAKyrsJuwm7CbsJuwm7CbsJuwm9wDaCfcA9wD3AC0HJwIHCPcA9wCpHfcA5QT3APcAOyr3AEsq9wD3AJ8lWirsJuwm9wD3APcA9wD3APcA9wD3APcAaAK7CPcA9wCfJfcABwj3APcAywf3APcA9wBcKvgB+AFrKgECeSrsJuwm7CbsJvcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcARRH3AEYRywfsJv0B9wD3AIkq7CbsJuwm7CaZKvcA9wCjKvcAsir3APcA9wD0AQ8D7CbsJuwm9wC/KvcAyir3AOYE7CbsJuwm7Cb3APcA9wCbJfcAdgL3APcA2irpBvcA6iq2D/oq9wD3APcA9wDsJuwm9wD3AAorGiv3APcA9wAqK/cAcAL3AO0E9wA6Kw0D7CbsJuwm7CbsJvcA9wD3APcAtg/sJuwm7Cb3APcA9wA2GfcA9wD3ALwP9wD3ANQPuwjsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7Cb3APQB9wD3AEorNxnsJuwm7Cb6EvcA9wDLB/cAagFaK+wm9wBqK+wm7Cb3AAcI7Cb3AEURJQL3APcAaAF6K3YCaAuKKyUC9wD3AJkrpyv3ALYPuwglAvcAaQG3K8cr9wD3ANcrJQL3APcAbQHnK/cr7gE0GfcAAQJkAQcsFizsJuwm7CYmLPUBNSz3APcAYQHLErsIRSx1AvoBVCybB2QscizREuwm7CbsJuwm7CbsJuwm7Cb3APcA9wBrAYIskiw3Gewm9wD3APcAcAGiLLsI7CbsJuwm7CbsJuwm7CbsJuwm7Cb3APcAYQGyLMEsyizsJuwm9wD3APcAcAHaLLsI6izsJvcA9wBlAfosuwjsJuwm7CZIDAELfgoKLQQl7CbsJuwm7CbsJuwm7CbsJuwm7CbsJvcA9wBkASsE7CbsJuwm7CbsJuwm9wD3APcA9wCsAzAnGi0mLfcANi1ELbsI7CbsJuwm7CZuAvcA9wBULWMt7CbwIfcA9wBzLYMtky33APcAZgGjLbIt9wD3APcA9wC2D8It7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm+gH3AGEB2QvSLawD2gniLfcAvQvYC88S7CbsJuwm7CYJB/cA9wDxLQAuuwgQLvcAQhIgLrsI7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJvcAMC5ALu0B9wBMLlouuwjsJuwm7CbsJuwmLQf3AGoueS6HLvcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wDWDuwm7CbsJuwm7CbsJvcA9wD3APcA9wD3APQBli73APcA9wD3APcA9wD3APcA9wD3APcA9wA1Gewm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm9wD3APcA9wD3APcANhn3APcA9wD3APcApi73APcAtC73APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcAvi73APcA9wD3APcA9wD3APcAzi7eLtAS7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJvcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcAcw/3APcA9wD3AEUR7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm9wD3APcAtg/3APQB7i73APcA9wD3APQBuwj3AGgC/i73APcA9wAOLxovKi8BAugE9wDsJuwm7CbsJuwm7CbsJvcA9wD3APcA9wA1L+wm7CbsJuwm7CbsJvcA9wD3APcACAhvAXABcAFFLyUC7CbsJuwm7CZVL9QS0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R69HtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wBGEewm7Ca8Huwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwmhwbRHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R4OH2Mv7CZzL38v0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEeuR7sJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJvcA9wD3APcA9wD3AOUE2gm2D48v0hLsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CZwAXAB6ANwAc8S9wD3APcA9wD3APcA9wA1Gewm7CbsJvcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3AEYR9wD3AG8C9wD3APcAny9wAawv9wC4L/cA9wD3AOUE7Cb3APcA9wD3AMYv7CbsJuwm7CbsJuwm7Cb3ADUZ9wA1GfcA9wD3APcA9wBFEfcAtg/sJuwm7CbsJuwm7CbsJuwm9wD3APcA9wD3AP4B9wD3APcA9gHUL+Iv/wH3APcA9wDdDYYG9wAQDu8v7QH3APcA9wD3APcA9wD3APcA9wD3AHAC9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APkvBzAHMAcwcAFwAXABmC1wAXABxAEXMCMw/BKmAuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJvcA9AEvMOwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm2Qs/ME0w9wD3APcAaALsJvgS7CbsJuwm7CbsJuwm7Cb3APcA2gldMFsk7CbsJuwm7CbsJuwm7CbsJuwm7CbsJvcAbTDsJvcA9wBkAX0w7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7Cb3AGQBuwjsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CaNMPQB9wD3APcA9wD3APcA9wD3APcA9wD3APcAcQLPEuwm7Cb3APcA9wD3AJ0wrTDsJuwm7CbsJuwm7CbsJuwm7CbsJu4B9wD3AGQovTDsJuwm7CbsJu4B9wD3AGgC7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm/wH3AMww2TDnMPcwBTENMfkBBwgcMQcI7CbsJuwmNxnsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEeLDFyGaQZchlyGXIZPDFyGXIZchksMdEe0R7RHkkxTzHRHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R5fMWUx0R5sMXox0R7RHocx0R7RHtEe0R6XMaYxsDG3McYx1DHkMfIx0R7RHtEe0R4YG2MuAjIQGRUb0R7RHg4y0R4eMtEe0R7RHioy0R42MtEe0R7RHtEeQTL3APcAUTLRHtEeYTFhMmcy0R7RHtEe9wD3APcA9wD3APcA9wB3MvcA9wD3APcA9wACMtEe0R4CGfcA9wD3ABcbFRv3APcAFxv3AAAZ0R7RHtEe0R7RHocyrjHPMZYy0R7RHtEezjHRHtEe0R6lMqkxtDLRHtEe9wD3APcA9wD3AHcy0R7RHtEe0R7RHtEeYjLRHtEenjH3APcA9wD3APcA9wD3APcA9wAAAvcA9wDlBOwm7Ca7CNEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEetx4tCOwmcAFwAXABcAFwAXAB7CbsJuwm7CbsJuwm7CbsJnABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAewmNQRVBHUElQS1BNUE9QQPBS8FTwVvBY8FrwXPBe8FCgYqBjEGUQaAA4ADgAOAA2YGKgaGBqMGgAOAA4ADgAOAA8MG4AaAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAyoGAAeAAxwHygDKAMoAygDKAMoAygDKADwHygBcB28HgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAB6AHtweAA4ADgAOAA9cHgAOAA4ADgAOAA4ADgAPnBwcIJwhHCF0IKgZ9CIADjQitCMQI1wjnCAcJgAMgCUAJYAmACaAJwAngCQAKygAgCsoAygDKAMoAygDKAMoAygDKAMoAygDKAMoAygDKAMoAygDKAMoAygDKAMoAygDKAMoAygDKAMoAygDKAMoAygAgCoADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgANACgMDAwMDAwMDAwwCAAABAwMDAwMDAwMDAwMDAwMDAwMDCRIWHRoZHRYVER0aFw4XGxgYGBgYGBgYGBgXFx0dHRIdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0VGhEdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRUMEB0DAwMDAwQDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwgVGRoaGh0cHB0cFh0MHR0ZGhwcDR0cHBwcHBYcHBwVHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0cHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRwdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHA0cHBwNHB0dHB0dHR0dHR0cHBwcHRwdDR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwgDAwMDAwMDAwMDAwMICAgICAgIAwMDAwMDAwMDAwMDAx0dHR0dHR0dKiodHR0dFx0qKioqHR0dHR0dHSodKh0dHR0dHR0dHR0dHR0dHR0dHR0dKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAwMDAwMDAx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSoqHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dFwwqKh0dGioDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMMAx0DAx0DAxIDKioqKioqKiojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMqKioqIyMjIx0dKioqKioqKioqKiodHR0dHR0dHR0ZGRkXFx0dAwMDAwMDAwMDAwMSAxISEh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAwMDAwMDAwMDAwMDAwMDAwMDAwMDGBgYGBgYGBgYGBkYGB0dHQMdHR0dHR0dHR0dHR0dHR0dHR0dHRIdAwMDAwMDAx0dAwMDAwMDHR0DAx0DAwMDHR0YGBgYGBgYGBgYHR0dHR0dHR0dHR0dHR0qHR0DHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAwMDAwMDAwMDAwMDAwMDAyoqHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAwMDAwMDAwMDAwMdKioqKioqKioqKioqKioYGBgYGBgYGBgYHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAwMDAwMDAwMDHR0dHRcSHSoqAxoaHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQMDAwMdAwMDAwMDAwMDHQMDAx0DAwMDAyoqHR0dHR0dHR0dHR0dHR0dKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0DAwMqKh0qHR0dHR0dHR0dHR0qKioqKh0dHR0dHR0dHR0dHR0dHR0qHR0qKioqKioDAwMDAwMDAx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDHQMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAwMDHQMDAwMDAwMDAwMDAwMDAwMdAwMDAwMDAx0dHR0dHR0dHR0DAwwMGBgYGBgYGBgYGB0dHR0dHR0dHR0dHR0dHR0DAwMqHR0dHR0dHR0qKh0dKiodHR0dHR0dHR0dHR0dHR0dHR0dHR0dKh0dHR0dHR0qHSoqKh0dHR0qKgMdAwMDAwMqKgMDKioDAwMdKioqKioqKioDKioqKh0dKh0dHQMDKioYGBgYGBgYGBgYHR0ZGR0dHR0dGR0aHR0DKgMDAyodHR0dHR0qKioqHR0qKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qHR0dHR0dHSodHSodHSodHSoqAyoDAwMqKioqAwMqKgMDAyoqKgMqKioqKioqHR0dHSodKioqKioqKhgYGBgYGBgYGBgDAx0dHQMdKioqKioqKioqAwMDKh0dHR0dHR0dHSodHR0qHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSodHR0dHR0dKh0dKh0dHR0dKioDHQMDAwMDAyoDAwMqAwMDKiodKioqKioqKioqKioqKioqHR0DAyoqGBgYGBgYGBgYGB0aKioqKioqKh0DAwMDAwMqAwMDKh0dHR0dHR0dKiodHSoqHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSodHR0dHR0dKh0dKh0dHR0dKioDHQMDAwMDKioDAyoqAwMDKioqKioqKgMDAyoqKiodHSodHR0DAyoqGBgYGBgYGBgYGB0dHR0dHR0dKioqKioqKioDHSodHR0dHR0qKiodHR0qHR0dHSoqKh0dKh0qHR0qKiodHSoqKh0dHSoqKh0dHR0dHR0dHR0dHSoqKioDAwMqKioDAwMqAwMDAyoqHSoqKioqKgMqKioqKioqKioqKioqKhgYGBgYGBgYGBgdHR0dHR0dHR0aHSoqKioqAwMDAwMdHR0dHR0dHSodHR0qHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qHR0dHR0dHR0dHR0dHR0dHSoqAx0DAwMDAyoDAwMqAwMDAyoqKioqKioDAyodHR0qKh0qKh0dAwMqKhgYGBgYGBgYGBgqKioqKioqDR0dHR0dHR0dAwMDDR0dHR0dHR0dKh0dHSodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSodHR0dHR0dHR0dKh0dHR0dKioDHQMDAwMDKgMDAyoDAwMDKioqKioqKgMDKioqKioqHR0qHR0DAyoqGBgYGBgYGBgYGCodHQMqKioqKioqKioqKioDAwMDHR0dHR0dHR0dKh0dHSodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQMDHQMDAwMDKgMDAyoDAwMDHR0qKioqHR0dAx0dHR0dHR0dHR0DAyoqGBgYGBgYGBgYGB0dHR0dHR0dHRkdHR0dHR0qAwMDKh0dHR0dHR0dHR0dHR0dHR0dHSoqKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSodHR0dHR0dHR0qHSoqHR0dHR0dHSoqKgMqKioqAwMDAwMDKgMqAwMDAwMDAwMqKioqKioYGBgYGBgYGBgYKioDAx0qKioqKioqKioqKikpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkqKioqGikpKSkpKSkpKSkpKSkpKR0YGBgYGBgYGBgYDAwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopKSopKikpKSkpKikpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSopKikpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKiopKSkpKSopKikpKSkpKSkqGBgYGBgYGBgYGCoqKSkpKSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqHQ0NDQ0dDQ0IDQ0MCBISEhISCB0SHR0dAwMdHR0dHR0YGBgYGBgYGBgYHR0dHR0dHR0dHQwDHQMdAxUQFRADAx0dHR0dHR0dKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSoqKioDAwMDAwMDAwMDAwMDAwwDAx0dHR0dAwMDAwMDAwMDAwMqAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDKgwMHR0dHR0dAx0dHR0dHSodHQ0NDA0dHR0dHQgIKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKikpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkYGBgYGBgYGBgYDAwdHR0dKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpGBgYGBgYGBgYGCkpKSkpKR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dKh0qKioqKh0qKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJx0dHR0dHR0dHSodHR0dKiodHR0dHR0dKh0qHR0dHSoqHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qHR0dHSoqHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dKh0dHR0qKh0dHR0dHR0qHR0dHSoqHR0dHR0dHR0dHR0dHR0dKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qHR0dHSoqHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSoqAwMDHQwdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qKioqKiodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qKh0dHR0dHSoqDB0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQwdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRUQKioqHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQwMDB0dHR0dHR0dHR0dKioqKioqKh0dHR0dHR0dHR0dHR0dHR0dHQMDAwMqKioqKioqKiodHR0dHR0dHR0dHR0dHR0dHR0dAwMDDAwqKioqKioqKiodHR0dHR0dHR0dHR0dHR0dHR0DAyoqKioqKioqKioqKh0dHR0dHR0dHR0dHR0qHR0dKgMDKioqKioqKioqKioqKSkpKSkpKSkpKSkpKSkpKSkpKSkMDBQpDB0MGikpKioYGBgYGBgYGBgYKioqKioqHR0dHR0dHR0dHSoqKioqKh0dEhIMDA0dEhIdAwMDCAMYGBgYGBgYGBgYKioqKioqHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dKioqKioqKh0dHR0dAwMdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAx0qKioqKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSoqKioqKioqKiodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dKgMDAwMDAwMDAwMDAyoqKioDAwMDAwMDAwMDAwMqKioqHSoqKhISGBgYGBgYGBgYGCkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSoqKSkpKSkqKioqKioqKioqKikpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKioqKikpKSkpKSkpKSkpKSkpKSkqKioqKioYGBgYGBgYGBgYKSoqKikpHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0DAwMDAyoqHR0pKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSopKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSoqAxgYGBgYGBgYGBgqKioqKioYGBgYGBgYGBgYKioqKioqKSkpKSkpKSkpKSkpKSkqKgMDAwMDAwMDAwMDAwMDAwMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqAwMDAwMdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQMDAwMDAwMDAwMDAx0dHR0dHR0dKioqGBgYGBgYGBgYGAwMHQwMDAwdHR0dHR0dHR0dAwMDAwMDAwMDHR0dHR0dHR0dDAwqAwMDHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAwMDAwMDAwMDAwMDAx0dGBgYGBgYGBgYGB0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAwMDAwMDAwMDAwMDAwMqKioqKioqKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQMDAwMDAwMDAwMDAwMDAwMDAwMDKioqDAwMDAwYGBgYGBgYGBgYKioqHR0dGBgYGBgYGBgYGB0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQwMHR0dHR0dHR0dKioqKioqKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qKh0dHR0dHR0dKioqKioqKioDAwMdAwMDAwMDAwMDAwMDAwMDAwMDAwMDHR0dHQMdHR0dHR0DHR0DAwMdKioqKioDAwMDAwMDAwMDAwMDCAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMIAwMDHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSoqHR0dHR0dKiodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSoqHR0dHR0dKiodHR0dHR0dHSodKh0qHSodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dKiodHR0dHSodHR0dHR0dHR0dHR0dHSoqHR0dHR0dKh0dHR0dHR0dHR0dHR0dHR0dHR0qKh0dHSodHR0dHR0dDR0qDAwMDAwMDAgMDAwHAwoDAwwIDAwLHBwdFhYVFhYWFRYcHB0dExMTDAAAAwMDAwMIGRkZGRkZGRkdFhYcFBQdHR0dFxUQFBQUHR0dHR0dHR0dHR0dDBkMDAwMHQwMDAYdHR0dKgMDAwMDAwMDAwMdHSoqHB0dHR0dHR0dFRAcHRwcHBwdHR0dHR0dHRUQKh0dHR0dHR0dHR0dHR0qKioaGhoaGhoaGRoaGhoaGhoaGhoaGhoaGRoaGhoZGhoZGhoaGhoaGhoaGhoaGhoaAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDKioqKioqKioqKioqKioqHR0dGR0cHR0dGR0dHR0dHR0dHRwdHRodHR0dHR0dHR0dHBwdHR0dHR0dHRwdHR0dHR0dHR0dHR0dHR0dHR0dHRwcHR0dHR0cHR0cHRwcHBwcHBwcHBwcHB0dHR0cHBwcHBwcHBwcHR0dHR0dHR0dHB0dKioqKhwcHBwcHBwcHBwdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRwdHB0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0cHRwcHR0dHBwdHRwdHR0cHRwaGh0cHR0dHRwdHRwcHBwdHRwdHB0cHBwcHBwdHB0dHR0dHBwcHB0dHR0cHB0dHR0dHR0dHB0dHRwdHR0dHRwdHR0dHR0dHR0dHR0dHBwdHRwcHBwdHRwcHR0cHB0dHR0dHR0dHR0dHR0dHR0cHB0dHBwdHR0dHR0dHR0dHR0dHB0dHRwdHR0dHR0dHR0dHRwdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHB0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dEx0dHR0dHR0dHR0dHR0dHR0VEBUQHR0dHR0dHB0dHR0dHR0kJB0dHR0dHR0dHR0dHR0VEB0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSQkJCQdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qKioqKioqKioqKioqKioqKioqKioqKioqHR0dHR0dHR0dHR0qKioqKioqKioqKioqKioqKioqKiocHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHR0dHRwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwdHR0dHR0dHR0dHRwcHBwcHBwcHBwcHBwcHBwdHRwcHBwdHR0dHR0dHR0dHBwdHBwcHBwcHB0dHR0dHR0dHBwdHRwcHR0dHRwcHR0dHRwcHB0dHB0dHBwcHB0dHR0dHR0dHR0dHR0dHR0cHBwcHR0dHR0dHR0dHB0dHR0dHR0dHR0dHR0dHR0kJCQkHRwcHR0cHR0dHRwcHR0dHSQkHBwkHSQkJB8kJB0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0kJCQdHR0dHB0cHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0cHB0cHBwdHCQcHB0cHB0cHR0dHR0dHR0dHR0dHR0dJB0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRwcHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0kJCQkJCQkJCQcHBwcJB0kJCQcJCQcHBwkJBwcJBwcJCQkHRwdHR0dHBwkHBwcHBwcJCQkJCQcJCQfJBwcJCQkJCQdHR0kJB8fHx8dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRwdHR0WFhYWFhYdEhIkHR0dFRAVEBUQFRAVEBUQFRAcHBwcHBwcHBwcHBwcHBwcHBwcHB0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dFRAdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dFRAVEBUQFRAVEB0dHR0dHR0dHR0dHR0dHR0VEBUQFRAVEBUQFRAVEBUQFRAVEBUQHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dFRAVEB0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dFRAdHR0dHR0dHR0dHR0dHR0dHR0dHR0cHBwcHB0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dKiodHR0dHR0dHR0dHR0dHR0dHR0dHR0dKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAwMDHR0qKioqKhIMDAwdEgwdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSodKioqKiodKiodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dKioqKioqKh0MKioqKioqKioqKioqKioDHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qKioqKioqKiodHR0dHR0dKh0dHR0dHR0qHR0dHR0dHSodHR0dHR0dKgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFhYWFhYWFhYWFhYWFhYMDAwMDAwMDB0MFQwdHRYWHR0WFhUQFRAVEBUQDAwMDBIdDAwdDAwdHR0dHQsLDAwMHQwMFQwMDAwMDAwMHQwdDAwdHR0SEhUQFRAVEBUQDCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiokJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCokJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkKioqKioqKioqKioqJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCoqKioqKioqKioqKioqKioqKioqKioqKioqJCQkJCQkJCQkJCQkKioqKgwQECQkFCQkFRAVEBUQFRAVECQkFRAVEBUQFRAUFRAQJCQkJCQkJCQkJAMDAwMDAyQkJCQkAyQkJCQkFBQkJCQqHiQeJB4kHiQeJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJB4kJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkHiQeJB4kJCQkJCQeJCQkJCQkHh4qKgMDFBQUFCQUHiQeJB4kHiQeJCQkJCQkJCQkJCQkJCQkJCQkJCQkJB4kJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkHiQeJB4kJCQkJCQeJCQkJCQkHh4kJCQkFB4UFCQqKioqKiQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQqJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkKioqKioqKioqKioqHh4eHh4eHh4eHh4eHh4eHiQkJCQkJCQkHBwcHBwcHBwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQUJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkKioqJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkKioqKioqKioqHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQwMHR0dHR0dHR0dHR0dHQwSDB0dHR0dHR0dHR0dHR0dHR0YGBgYGBgYGBgYHR0qKioqKioqKioqKioqKioqKioqKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAwMDAx0DAwMDAwMDAwMDHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAwMdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0DAx0MDAwMDCoqKioqKioqHR0dHR0dHR0dHR0qKioqKh0dKh0qHR0dHR0qKioqKioqKioqKioqKioqKioqKioqKiodHR0dHR0dHR0dHR0dHQMdHR0DHR0dHQMdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQMDAwMDHR0dHQMqKiodHR0dHR0dHRkdKioqKioqHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQ0NEhIqKioqKioqKgMDHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0DAwMDAwMDAwMDAwMqKioqKioqKgwMGBgYGBgYGBgYGCoqKioqKgMDAwMDAwMDAwMDAwMDAwMDAx0dHR0dHR0dHR0NHR0DGBgYGBgYGBgYGB0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0DAwMDAwMDAwwMHR0dHR0dHR0dHR0dHR0dHQMDAwMDAwMDAwMDAwMqKioqKioqKioqKh0lJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSoqKgMDAwMdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQMDAwMDAwMDAwMDAwMdHR0dHR0MDAwdHR0dKh0YGBgYGBgYGBgYKioqKh0dKSkpKSkpKSkpKSkpKSkpKRgYGBgYGBgYGBgpKSkpKSodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQMDAwMDAwMDAwMDAwMDKioqKioqKioqHR0dAx0dHR0dHR0dAwMqKhgYGBgYGBgYGBgqKh0MDAwpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSoqKioqKioqKioqKioqKioqKioqKioqKikpKSkpHR0dHR0dHR0dHR0DAwMDAwwMHR0dAwMqKioqKioqKiodHR0dHR0qKh0dHR0dHSoqHR0dHR0dKioqKioqKioqHR0dHR0dHSodHR0dHR0dKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dKioqKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAwMDAwMDAwMMAwMqKhgYGBgYGBgYGBgqKioqKiohIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiISIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiEiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIhIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiKioqKioqKioqKioqJiYmJiYmJiYmJiYmJiYmJioqKionJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnKioqKgUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqHR0dHR0dHSoqKioqKioqKioqKh0dHR0dKioqKiojAyMjIyMjIyMjIyMdIyMjIyMjIyMjIyMjIyojIyMjIyojKiMjKiMjKiMjIyMjIyMjIyMdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qKioqKioqKioqKioqKioqHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0QFR0dHR0dHR0dHR0dHR0dHR0qKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qKioqKioqHSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqHR0dHR0dHR0dHR0dGR0dHQMDAwMDAwMDAwMDAwMDAwMXEBAXFxISFRATKioqKioqAwMDAwMDAwMDAwMDAwMDAyQkJCQkFRAVEBUQFRAVEBUQJCQVECQkJCQkJCQQJBAqFBQSEiQVEBUQFRAkJCQkJCQkJCokGhkkKioqKh0dHR0dKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qKgYqEiQkGhkkJBUQJCQQJBAkJCQkJCQkJCQkJBQUJCQkEiQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJBUkECQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJBUkECQVEBAVEBAUJB4eHh4eHh4eHh4kJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQUFCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQqKiQkJCQkJCoqJCQkJCQkKiokJCQkJCQqKiQkJCoqKhkaJCQkGhoqHR0dHR0dHSoqKioqKioqKioDAwMPHCoqHR0dHR0dHR0dHR0qHR0qHQwMDCoqKiodHR0dHR0dHR0dHR0dAyoqHR0dHR0dAwMDAwMqKioqKh0dHR0dHR0dHR0dHR0dKgwdHR0dHSoqKioqKioqKioqHR0dKh0dKh0dHR0dHR0dHSodHR0dHR0dKh0dKioqHSodHR0dHR0dHR0qKioqKh0dHR0dHSoqHSodHR0dHR0qHR0qKiodKiodHR0dHR0qDB0dHR0dHR0dKh0dKioqKiodHR0dHR0dHR0dHR0qKioMHQMDAyoDAyoqKioqAwMDAx0dHR0dHSoqAwMDKioqKgMMDAwMDAwMDB0qKioqKioqHR0dHR0DAyoqKiodHR0dHQwMDAwMDBMqKioqKioqKiodHR0dHR0qKioMDAwMDAwMHR0qKioqKioqHR0dHSoqKh0dHR0dHR0dHR0qAwMMKioDHR0dHR0dHR0dKioqKioqHR0DAwMDHR0dHSoqKioqKgMDAwMDAwMMDB0dHR0dKioDHR0DAx0qKioqKioqKioDAwMDAwMDAwMDAx0dHQwMAyoqKioqKioqKiodKioDAwMDAyoYGBgYGBgYGBgYDAwMDB0DAx0qKioqKioqKh0dHQMdDR0qKioqKioqKioDHR0dHQwMHQwDAwMDHQMDGBgYGBgYGBgYGB0NHQwMDAMDAwMDAwMDDAwdDAwdAx0DKioqKioqKioqKioqKiodHR0dHR0dKh0qHR0dHSodHR0dHR0dHR0MKioqKioqAwMDAyodHR0dHR0dHSoqHSodHSodHR0dHSoDAx0DAx0qKioqKioDKioqKiodHR0DAyoqAwMDAwMDAyoqKgMDAwMDAwMdHR0dDAwMDB0YGBgYGBgYGBgYDAwqHQMdAwMDAx0dHR0qKioqKioqKgMDAwMDAyoqAwMDAwMDAwMNDAwSEh0dHQwMDAwMDAwMHR0dHQMDKioDDAwdHSoqKioqKioqKioqDQ0NDQ0NDQ0NDQ0NDSoqKgMDAwMDAwMDHR0qKioqKioYGBgYGBgYGBgYKSkMDAwpHR0dHR0dHSoqHSoqHR0dHSodHSodHR0dHR0dHQMDAwMDAyoDAyoqAwMDAx0DAwwMDCoqKioqKioqKh0DAwMDAwMDKioDAwMDAwMdDR0DKioqKioqKioqKiodHR0DAwMDAwMDHQMDAwMNHQwMDAwNHQMqKioqKioqKh0DAwMDAwMDAwMDAx0dHR0DAwMDAwMDAwMDDAwMHQ0NDAwqKioqKioqKioqKioqDQ0NDQ0NDQ0NDSoqKioqKh0MDAwMDCoqKioqKioqKioNEh0dHR0dHR0dHR0dHR0dAwMDAwMDKioqAyoDAyoDAwMDAwMdAyoqKioqKioqHR0dHR0dKh0dKh0dHR0dHQMDKgMDAwMDHSoqKioqKiodHR0DAwMDHR0qKioqKioqAwMdAx0dHR0dHR0dHR0dHQMDAwMDAwMqKioDAwMMDCQkJCQkJCQkJCQkHR0dHR0dHR0dHR0dHRkZGR0dHR0dHR0dHR0dHR0dHSoqKioqKioqKioqKioMDAwMDCoqKioqKioqKioqHR0dHR0dHR0VFRUQEBAdHRAdHR0VEBUQHR0dHR0dHR0dFRAQHR0dHQgICAgICAgVEAgICBUQFRADHR0dHR0dAwMDAwMDAwMDGBgYGBgYGBgYGCoqKioMDAMDAwMDDCoqKioqKioqKioDAwMDAwMDDAwMHR0dHR0dDB0qKioqKioqKioqGBgYGBgYGBgYGCodHR0dHR0dDAwdHSoqKioqAwMDAwMDAwMqKioqKioqAxQUFBQIKioqKioqKioqKioeKioqKioqKioqKioqKh4eHioqHioqKioqKioqKioeHh4eKioqKioqKiodHR0dHR0dHR0dKiodAwMMHR0dHR0DAwMDAx0dHQMDAx0dAwMDAwMDAx0dHR0dHR0dHR0DAwMDHR0DAwMdKioqKioqKioqKh0qKh0dKiodHR0dKh0dHR0dHR0dHR0qHSodHR0dHSodKioqHR0dHR0dHR0dHR0dKioYGBgYGBgYGBgYGBgYGBgYHR0dHR0DHR0dHR0dHR0dHQMdHQwMDAwdKioqKiodHR0dHR0qKioqKgMDAwMDAwMDAyoqAwMDAwMqAwMqAwMDAwMqKioqKgMDAwMDAwMdHR0dHR0dKiodHR0dHR0dHR0dHR0dHQMqGBgYGBgYGBgYGCoqKioqGh0dHR0dHR0qHR0dHSodHSodHR0dAwMDAwMDAx0qKioqGBgYGBgYGBgYGCoqKioVFRkdHR0dKioqKioqKioqKiodHSodKiodKh0dHR0dHR0qHR0dHSodKh0qKioqHSoqKiodKh0qHSodHR0qHR0qHSoqHSodKh0qHSodHSodKiodHR0dKh0dHR0qHR0dHSodKh0dHSodHR0dHSodHR0dHRwcHBwcHBwcHBwcHBwkJCQcHBwcHBwcHBwcHR0dJCQkJCQkKCgoKCgoKCgoKCgoKCgoKCQkJCQkHyQkJCQkJCQkJCQkJB0dJCQkJCQdJCQk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VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVe1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVd11Vx//Vd/1VVVVVV1VVVVVVVVVXVVVVV1f1dV1VVVVVVVVVVVVVVAEHczM4ACylVVVVVVdVVVVVVVVVVVVVVVVVVVRUAUFVVVVVVVVVVVVVVVVVVVVVVAQBBj83OAAu0ARBBEFVVVVVVVVVVVVVVVVVVVVFVVQAAQFRVVVVVVVVVVVVVFQAAAAAAVVVVVVRVVVVVVVVVVQUAFAAUBFBVVVVVVVVVFVFVVVVVVVVVAAAAAAAAQFVVVVVVVVVVVVVVVVVVVVVVVVVVVVUFAABUVVVVVVVVVVVVVVVVVRUAAFVVUVVVVVVVBRAAAAEBUFVVVVVVVVVVVVUBVVVVVVVVVVVVVVVVVVBVAABVVVVVVVVVVVVVBQBB0M7OAAvjDUBVVVVVVVVVVVVVVVVVRVQBAFRRAQBVVQVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVRAFUVVFVFVVVBVVVVVVVVUVBVVVVVVVVVVVVVVVVVVVUQRUUUFFVVVVVVVVVUFFVVQEQVFFVVVVVBVVVVVVVBQBRVVVVVVVVVVVVVVVVVVUEAVRVUVUBVVUFVVVVVVVVVUVVVVVVVVVVVVVVVVVVVUVUVVVRVRVVVVVVVVVVVVVVVFRVVVVVVVVVVVVVVVVVBFQFBFBVQVVVBVVVVVVVVVVRVVVVVVVVVVVVVVVVVVUURAUEUFVBVVUFVVVVVVVVVVBVVVVVVVVVVVVVVVVVFUQBVFVRVRVVVQVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVVVVVRRUFRFUVVVVVVVVVVVVVVVVVVVVVVVVVVVVRAEBVVRUAQFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVEAAFRVVQBAVVVVVVVVVVVVVVVVVVVVVVVVUFVVVVVVVRFRVVVVVVVVVVVVVVVVVQEAAEAABFUBAAABAAAAAAAAAABUVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAQQAQUFVVVVVVVVQBVRVVVUBVFVVRUFVUVVVVVFVVVVVVVVVVaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqgAAAAAAAAAAVVVVVVVVVQFVVVVVVVVVVVVVVVUFVFVVVVVVVQVVVVVVVVVVBVVVVVVVVVUFVVVVVVVVVVVVVVVVVVVVVRAAUFVFAQAAVVVRVVVVVVVVVVVVVRUAVVVVVVVVVVVVVVVVVUFVVVVVVVVVVVFVVVVVVVVVVVVVVVVVQBVUVUVVAVVVVVVVVRUUVVVVVVVVVVVVVVVVVVVFAEBEAQBUFQAAFFVVVVVVVVVVVVVVVQAAAAAAAABAVVVVVVVVVVVVVVVVAFVVVVVVVVVVVVVVVQAAUAVVVVVVVVVVVVUVAABVVVVQVVVVVVVVVQVQEFBVVVVVVVVVVVVVVVVVRVARUFVVVVVVVVVVVVVVVVVVAAAFVVVVVVVVQAAAAAQAVFFVVFBVVVUVANd/X19//wVA913VdVVVVVVVVVVVAAAAAFVXVVX9V1VVVVVVVVVVVVdVVVVVVVVVVQAAAAAAAAAAVFVVVdVdXVXVdVVVfVVVVVVVVVVVVVVV1VfVf////1X//19VVVVdVf///1VVVVV1VVVfVVVVVfV1V1VVVdVVVVVVVVX319/XXV11/df//3dV/1VfXVVfV3VVVVV///X1X1VVVfX/X1VVXV1VVV1VVVVVVdVVVVVVdVWlVVVVaVVVVVVVVVVVVVVVVVVVValWllVVVVVVVVVVVVVV/////////////////////////////////////////////9///////////1X///////////9VVVX/////9V9VVd//X1X19VVfX/XX9V9VVVX1X1XVVVVVaVV9XfVVWlV3VVVVVVVVVVV3VaqqqlVVVd/ff99VVVWVVVVVVZVVVfVZVaVVVVVV6VX6/+///v//31Xv/6/77/tVWaVVVVVVVVVVVlVVVVVdVVVVZpWaVVVVVVVVVfX//1VVVVVVqVVVVVVVVVZVVZVVVVVVVVWVVlVVVVVVVVVVVVVVVVb5X1VVVVVVVVVVVVVVVVVVVVVVVVVVFVBVVVVVVVVVVVVVVVVVVVVVVVUVVVVVVVVVVVUAAAAAAAAAAKqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVVVVqqqqqqpaVVVVVVVVqqqqqqqqqqqqqqqqqqoKAKqqqmqpqqqqqqqqqqqqqqqqqqqqqqqqqqpqgaqqqqqqqqqqqlWpqqqqqqqqqqqqqqmqqqqqqqqqqqqqqqqoqqqqqqqqqqqqaqqqqqqqqqqqqqqqqqqqqqqqqqqqqlVVlaqqqqqqqqqqqqqqaqqqqqqqqqqqqqr//6qqqqqqqqqqqqqqqqqqqlaqqqqqqqqqqqqqqqqqalVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVQAAAUFVVVVVVVVUFVVVVVVVVVVVVVVVVVVVVVVVVVVVQVVVVRUUVVVVVVVVVQVVUVVVVVVVQVVVVVVVVAAAAAFBVRRVVVVVVVVVVVVUFAFBVVVVVVRUAAFBVVVWqqqqqqqqqVkBVVVVVVVVVVVVVVRUFUFBVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVQFAQUFVVRVVVVRVVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVUEFFQFUVVVVVVVVVVVVVVQVUVVVVVVVVVVVVVVVVFUUVVVVVWqqqqqqqqqqqpVVVUAAAAAAEAVAEG/3M4AC6EIVVVVVVVVVVVFVVVVVVVVVVUAAAAAqqpaVQAAAACqqqqqqqqqqmqqqqqqaqpVVVVVVaqqqqqqqqqqVlVVVVVVVVVVVVVVVVVVBVRVVVVVVVVVVVVVVVVVVVWqalVVAABUXVVVVVVVVVVVVVVVVVVVVVFVVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVVVVQVAVQFBVQBVVVVVVVVVVVVVQBVVVVVVVVVVVVVBVVVVVVVVVVVVVVVVVVVVAFVVVVVVVVVVVVVVVVVVVVUVVFVVVVVVVVVVVVVVVVVVVVVVVVUBVQUAAFRVVVVVVVVVVVVVVQVQVVVVVVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVQAAAEBVVVVVVVVVVVVVFFRVFVBVVVVVVVVVVVVVVRVAQVVFVVVVVVVVVVVVVVVVVVVVQFVVVVVVVVVVFQABAFRVVVVVVVVVVVVVVVVVVRVVVVVQVVVVVVVVVVVVVVVVBQBAVVUBFFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVAEVUVVVVVVVVVVFRUAQFVVVVVVVFVVVVUVVVVVBQBUAFRVVVVVVVVVVVVVVVVVVVVVAAAFRFVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVVVVVFABEEQRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRUFUFUQVFVVVVVVVVBVVVVVVVVVVVVVVVVVVVVVVVVVVRUAQBFUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVRABBVVVVVVVVVVVUBBRAAVVVVVVVVVVVVVVVVVVVVVRUAAEFVVVVVVVVVVVVVVVVVVFUVRBVVVVVVVVVVVVVVVVVVVVVVVVVVVQAFVVRVVVVVVVVVAQBAVVVVVVVVVVVVFQAUQFUVVVUBQAFVVVVVVVVVVVVVVQUAAEBQVVVVVVVVVVVVVVVVVVVVVVVVVVVVAEAAEFVVVVUFAAAAAAAFAARBVVVVVVVVVVVVVVVVVVUBQEUQABBVVVVVVVVVVVVVVVVVVVVVVVVQEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVFVVUFVVVVVVVVVVVVVVVQVAVURVVVVVVVVVVVVVVVVVVVVUFQAAAFBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAFRVVVVVVVVVVVVVVVVVVQBAVVVVVVUVVVVVVVVVVVVVVVVVVVVVFUBVVVVVVVVVVVVVVVVVVVVVVVVVqlRVVVpVVVWqqqqqqqqqqqqqqqqqqlVVqqqqqqpaVVVVVVVVVVVVVaqqVlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWqqappqqqqqqqqqqpqVVVVZVVVVVVVVVVqWVVVVapVVaqqqqqqqqqqqqqqqqqqqqqqqqpVVVVVVVVVVUEAVVVVVVVVVQBB6+TOAAtFUAAAAAAAQFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVEVAFAAAAAEABAFVVVVVVVVUFUFVVVVUFVFVVVVVVVVVVVVVVVVVVAEG95c4ACwJAFQBBy+XOAAuQClRVUVVVVVRVVVVVFQABAAAAVVVVVQBAAAAAABQAEARAVVVVVVVVVVVVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVVUAVVVVVVVVVVUAQFVVVVVVVVVVVVVVAEBVVVVVVVVVVVVVVVVVVVZVVVVVVVVVVVVVVVVVVVVVVZVVVVVVVVVVVVVVVVX//39V/////////1///////////////////19V/////////++rqur/////V1VVVVVqVVVVqqqqqqqqqqqqqqpVqqpWVVpVVVWqWlVVVVVVVaqqqqqqqqqqVlVVqaqaqqqqqqqqqqqqqqqqqqqqqqqmqqqqqqpVVVWqqqqqqqqqqqqqapWqVVVVqqqqqlZWqqqqqqqqqqqqqqqqqqqqqqpqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpaqqqqqqqqqqqqqqqqqqqpaVVWVaqqqqqqqqlVVVVVlVVVVVVVVaVVVVVZVVVVVVVVVVVVVVVVVVVVVVVVVVZWqqqqqqlVVVVVVVVVVVVVVVapaVVZqqVWqVVWVVlWqqlZVVVVVVVVVVaqqqlVWVVVVVVVVqqqqqqqqqqqqqqpqqqqaqqqqqqqqqqqqqqqqqqpVVVVVVVVVVVVVVVWqqqpWqqpWVaqqqqqqqqqqqqqqmqpaVaWqqqpVqqpWVaqqVlX///////////////////9fRW1wdHlJbnZhbGlkRGlnaXRQb3NPdmVyZmxvd05lZ092ZXJmbG93WmVyb2Fzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaXNfY2hhcl9ib3VuZGFyeShuKS9ydXN0Yy81MDY5ODU2NDk1ODcwNDg2MTM0ZGQyY2EwYjBlMjUxNjMwOGM1YzJhL2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5yczW1EwBLAAAAhQcAAB0AAAA1tRMASwAAAI0HAAAdAAAAJAIAAAwAAAAEAAAAbgIAAG8CAAB0AgAAY2FwYWNpdHkgb3ZlcmZsb3cAAAC4tRMAEQAAAC9ydXN0Yy81MDY5ODU2NDk1ODcwNDg2MTM0ZGQyY2EwYjBlMjUxNjMwOGM1YzJhL2xpYnJhcnkvYWxsb2Mvc3JjL3ZlYy9zcGVjX2Zyb21faXRlcl9uZXN0ZWQucnMAANS1EwBeAAAAOwAAABIAAAAvcnVzdGMvNTA2OTg1NjQ5NTg3MDQ4NjEzNGRkMmNhMGIwZTI1MTYzMDhjNWMyYS9saWJyYXJ5L2FsbG9jL3NyYy92ZWMvbW9kLnJzRLYTAEwAAAA3DAAADQAAAES2EwBMAAAAmQgAACQAAAAwMTIzNDU2Nzg5YWJjZGVmL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvdXVpZC0xLjEwLjAvc3JjL2ZtdC5ycwAAAMC2EwBVAAAAuQAAAA0AAADAthMAVQAAALEAAAAVAAAAwLYTAFUAAAC0AAAADQAAAMC2EwBVAAAAtQAAAA0AAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi93YXNtLWJpbmRnZW4tMC4yLjkzL3NyYy9jYWNoZS9pbnRlcm4ucnMAAFi3EwBmAAAAGwAAACsAAAD//////////9C3EwBB6O/OAAsZSnNWYWx1ZSgpAAAA6LcTAAgAAADwtxMAAQBBjPDOAAuPQAEAAADbAwAAY2Fubm90IGFjY2VzcyBhIFRocmVhZCBMb2NhbCBTdG9yYWdlIHZhbHVlIGR1cmluZyBvciBhZnRlciBkZXN0cnVjdGlvbi9ydXN0Yy81MDY5ODU2NDk1ODcwNDg2MTM0ZGQyY2EwYjBlMjUxNjMwOGM1YzJhL2xpYnJhcnkvc3RkL3NyYy90aHJlYWQvbG9jYWwucnMAAABauBMATwAAAAQBAAAaAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvd2FzbS1iaW5kZ2VuLWZ1dHVyZXMtMC40LjQzL3NyYy90YXNrL3NpbmdsZXRocmVhZC5ycwC8uBMAcwAAACEAAAAVAAAA3AMAAN0DAADeAwAA3wMAALy4EwBzAAAAZgAAACUAAABjbG9zdXJlIGludm9rZWQgcmVjdXJzaXZlbHkgb3IgYWZ0ZXIgYmVpbmcgZHJvcHBlZAAA4AMAAAQAAAAEAAAA4QMAAOIDAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi93YXNtLWJpbmRnZW4tZnV0dXJlcy0wLjQuNDMvc3JjL3F1ZXVlLnJzAKi5EwBnAAAAJQAAAC4AAACouRMAZwAAACgAAAApAAAAqLkTAGcAAAA+AAAAGgAAAAYAAAAGAAAACAAAAAcAAABUXhAAWl4QAGBeEABoXhAAKH0QACp9EAAsfRAALn0QADB9EAAyfRAANH0QADZ9EAA4fRAAOn0QADx9EAA+fRAAQH0QAEJ9EABEfRAARn0QAEh9EAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgA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", "base64"); + var bytes = Buffer2.from("AGFzbQEAAAABzwRJYAJ/fwBgAX8AYAJ/fwF/YAN/f38Bf2ADf39/AGABfwF/YAR/f39/AGAFf39/f38AYAZ/f39/f38AYAR/f39/AX9gAAF/YAd/f39/f39/AGADf39/AX5gA39+fwBgBX9/f39/AX9gAX8BfmACf38BfmACfn8AYAd/f39/f39/AX9gA39+fgBgAABgBn9/f39/fwF/YAJ/fgBgA39+fgF/YAF+AX5gAn5+AGAEf35/fwBgBH9/f34AYAN/f34Bf2ABfgBgBH98f38Bf2ANf39/f39/f39/f39/fwBgAn98AGAGf39/f35/AGAPf39/f39/f39/f39/f39/AX9gBH9/fn8AYAZ/f39+f38AYAN/fn8Bf2ACf34Bf2AEfn5/fwF+YAN+f38AYAJ+fwF/YAJ+fgF+YAN/f34AYA5/f39/f39/f39/f39/fwF/YAh/f39/f39/fwF/YAp/f39/f39/f39/AGAEf35/fgF+YAl/f39/f39+fn4AYAV/f39/fwF8YAF8AXxgBn9/fn9+fwBgA35/fwF/YAF/AXxgBX9/f39+AGADf39/AXxgF39/f39/f39/f39/f39/f39/f39/f39/AX9gE39/f39/f39/f39/f39/f39/f38Bf2ALf39/f39/f39/f38Bf2AEf39/fABgAXwBf2AEfn5+fwF+YAR/fn5/AGAEf39/fwF8YAd+fn5/f39/AX5gAAF+YAJ+fwF+YAN/fH8AYAV/f31/fwBgBH99f38AYAV/f3x/fwBgBH98f38AYAV/f35/fwACphIrGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxpfX3diaW5kZ2VuX29iamVjdF9kcm9wX3JlZgABGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxZfX3diaW5kZ2VuX2Jvb2xlYW5fZ2V0AAUYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fFV9fd2JpbmRnZW5fc3RyaW5nX25ldwACGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxVfX3diaW5kZ2VuX3N0cmluZ19nZXQAABhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18UX193YmluZGdlbl9pc19zdHJpbmcABRhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18UX193YmluZGdlbl9pc19vYmplY3QABRhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18XX193YmluZGdlbl9pc191bmRlZmluZWQABRhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18NX193YmluZGdlbl9pbgACGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxpfX3diZ19uZXdfYjg1ZTcyZWQxYmZkNTdmOQACGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxNfX3diaW5kZ2VuX2lzX2ZhbHN5AAUYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fJF9fd2JnX2dldHdpdGhyZWZrZXlfZWRjMmM4OTYwZjBmMTE5MQACGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXx1fX3diZ19sZW5ndGhfYWUyMjA3ODE2OGI3MjZmNQAFGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxpfX3diZ19nZXRfM2JhYTcyOGY5ZDU4ZDNmNgACGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxpfX3diZ19uZXdfNTI1MjQ1ZTJiOTkwMTIwNAAKGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxpfX3diZ19zZXRfZjk3NTEwMjIzNmQzYzUwMgAEGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxtfX3diZ19zZWxmXzMwOTNkNWQxZjdiY2I2ODIAChhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18dX193Ymdfd2luZG93XzNiY2ZjNGQzMWJjMDEyZjgAChhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18hX193YmdfZ2xvYmFsVGhpc184NmIyMjJlMTNiZGYzMmVkAAoYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fHV9fd2JnX2dsb2JhbF9lNWEzZmU1NmY4YmU5NDg1AAoYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fIF9fd2JnX25ld25vYXJnc183NjMxM2JkNmZmMzVkMGYyAAIYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fG19fd2JnX2NhbGxfMTA4NGExMTEzMjllNjhjZQACGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxtfX3diZ19jYWxsXzg5YWYwNjBiNGUxNTIzZjIAAxhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18dX193YmdfbGVuZ3RoXzgzMzlmY2Y1ZDhlY2QxMmUABRhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18RX193YmluZGdlbl9tZW1vcnkAChhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18dX193YmdfYnVmZmVyX2I3YjA4YWY3OWIwYjA5NzQABRhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18aX193YmdfbmV3X2VhMTg4M2UxZTVlODY2ODYABRhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18aX193Ymdfc2V0X2QxZTc5ZTIzODg1MjBmMTgABBhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18UX193YmluZGdlbl9lcnJvcl9uZXcAAhhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18ZX193YmluZGdlbl9qc3ZhbF9sb29zZV9lcQACGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxVfX3diaW5kZ2VuX251bWJlcl9nZXQAABhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18sX193YmdfaW5zdGFuY2VvZl9VaW50OEFycmF5XzI0N2E5MTQyNzUzMjQ5OWUABRhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18tX193YmdfaW5zdGFuY2VvZl9BcnJheUJ1ZmZlcl82MWRmYzMxOTgzNzNjOTAyAAUYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fHl9fd2JnX2VudHJpZXNfN2EwZTA2MjU1NDU2ZWJjZAAFGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxtfX3diaW5kZ2VuX29iamVjdF9jbG9uZV9yZWYABRhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18XX193YmluZGdlbl9kZWJ1Z19zdHJpbmcAABhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18QX193YmluZGdlbl90aHJvdwAAGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxtfX3diZ190aGVuXzk1ZTZlZGMwZjg5YjczYjEAAhhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18lX193YmdfcXVldWVNaWNyb3Rhc2tfMTJhMzAyMzRkYjQwNDVkMwABGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXyVfX3diZ19xdWV1ZU1pY3JvdGFza180ODQyMWIzY2M5MDUyYjY4AAUYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fFl9fd2JpbmRnZW5faXNfZnVuY3Rpb24ABRhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18eX193YmdfcmVzb2x2ZV81NzA0NThjYjk5ZDU2YTQzAAUYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fEl9fd2JpbmRnZW5fY2JfZHJvcAAFGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXx5fX3diaW5kZ2VuX2Nsb3N1cmVfd3JhcHBlcjcyNTYAAwP5LfctCAgAAAAEBgQEBAYGBAQHBwcSFQYGHgAGBAAEBgIHBAQAAAAEBAADAAAAAggABAAACAcHBAAFBAQGBgQIBAAGAAICBgAACwsIAAYGAAIGAgYABgYGCQAAAAgEBAYIAAAAAAIADgkfHwAGBgYEBAICBwgIBAQCAAAECAcECwAHAAYAAAAICCAAAAUCBQYEAAYEAAQhIQcLCAYEAgEEBwAAAAQCBAQLBAYIAAMLAAAHEgcHBwcAAAAAAAcCAAAHAAAAAAQEAAAEBAAECAIGBgYAAA4FAAQFCQIBBAAABgYAAAECBQABAQgACAAGBgQCCAcHAAQEAAoBAQEAAAEEBAsHAQAGAAAABwQBAQQEBgcGAAMBBAEIBgECBgQAAAEBAgcGAAABAAAEAQQECAQEBAYBAQEBAAEBBQMBAAYGAAYGAAABAAAAAAsJAQkABAAAAAsEBAUiAAcCAiwHBwcDAgYAAAAACwYEBgYAAQQJAgQLAAECAAUBBAsAAAELAwMHAAEIAAAHAgEALQASBgIABQAJBgQGAAQEBAAJAAEACAcGBwABAAAEAgEBBAEAAAcCBgUBAAcBAQIEBgQDAwcHAAAHHgIBAAQDBwAAAAQEBgACAgIABQAAABUDCAgABQYGBC4DAA4DCQEAAQAABAQGBAYDBgABBgYACAMDBgAAAgEAAAMCBAAEAAQABAYGCAAECAAAAwIAAAgIBgEBBAQLGgQAAgkAAQAIAAAAAAAAAAABAQACABUIBgYABgIAAC8AAQQCAQEBAQEBAQEAAQEDAQADAgEBAAACBAIBAQEBAQEBAQEBAQEBFQAAAAABBAQAAQQABAsAAggAAAcABAADAQEGCwcBAAAHBgMBDxMCAQEJAAQCCAAAAAIIBwAFBQUAAQEBAQEBAQEAAQQABQYEAAEHAREBAAAEAQIGAgQEAwAHAAAAAQAAAAAACAAEAjAEAAIIAAABAAQHBQoEAAQaAgACAQAEBAYCBAQIBgYGAQQEAgEAAAQCBgYAAwAEEgAEAAABAAYGAQEGAA8AMQYEAAYGBgIAAAUEAhUEBQUFAAICBAYCBAAHAQABMgIEBgAABAQIBQAAAgYSAAAzBAQAAAYCAQEBAQ4EBQQLDwEjAzQbBAYHBQIGBwIAAAIICAMEAAIEAgMIBAAAAwIHNQAHAAEBBAQAAAcEAgIABAAGCAQABAIAAAcHBgYCBQIAAQQABAQEAAICAAEAAAAEBAYGAAAENgABAAIAAAIBBwEICQQBBwIGBgIAAgMBAQYEBQEkAAEAAgAAAAQACQICCQIDADcEAQgAAAACBQgAAQEIAAQEBwMDCAIACQgEAAEFAgQAAAgACAQABAAkBAIAAAQNAAEFAQMAAQAAAgQECQQAAA8CAgEAJQEBAAABAAQIEgIABAANBAQABgIHAgQAAgACAgEBAQABAgQEAQIABAAEAQQCAAYGAAEAAQUABAQABAICBAIAAAgIAgAABgEAAAECBAEACAAGBAQAAAIAAAgECQkEAAAAAAEACAgABAQBBAECAAEEBgAACQAAAAECAgABFgEDAQABBAABBgEAAAAGBAAAAQEBAQEBBAEABgQEAQMBAQAEBQABAgcBAgYECQABAAACBAcEBgYABAQDAQQGABYAAgQACDgAAQcABAAAAAMABAYBAQIEBAIHBgAJBAgBAgAEAAQACAEEAAQCAgQBAgABBRIGAwICAgA5CRAEAwEECQACBAYAAQEEBAEADgABAgcCAAABAAIEAAMGAgAFAgYHBAAAAAIiAgADBgQCAgIBAQMCAgYCCwIEBAYCAAYEAAAGBiYAAAAGAgMEAAUDBAAEBQQIAgI6AAEAAQUFBAEJAAMFCAYGBgYDBQAAAAADAwAAAgUFCAgCAAYCAgYEAAAAAAADAAUAAAACEgQCAAECAgACBAABAQEBAAAAAAUFAAUWDhAGBgICAQYGAgAAAAYAAAYGAgECAgEAAQEAAQYIBQUFAAAAAAAAAQAAAQEEBQQAAAAAAAAGAQAAAwYGAwACAAUCDwAAAAAAAAAAAAAEBAEHBQQFAgAAAgICAgAAAAABAgIFBgIAAAAFAAICAQMHAAAABQACAAICAgIAAQMDBAALAAUCAAABBQABAgECAAsCAgICAgICAgICAgICAgICAQAEAgEGAQAABAIAAAAAAgICAgIJAAAACQICAgIAAgIABAQEAgICAgAABAICAgICAgICAgICAgICAgICBQAAAAAAAAAAAAQEBgYGAAAAAgUABQUABQAACgUEAgQDBgIAAAAAAg4CAQQGAgUBBQUFBgQJAgUCAhYCAAABCAEIAQgGBgEAAQIAAQcBAwIMAgMIAAcJAgQCAAIAAgIBAQABAgAGAg0AAQACAAQFBAAGBAAGBAUAAgQBAAAAAQcCOwAFAAAAAAAAAAMAEwcDBAAAAAYCADwGAAADBAAHCAg9AAUGBgYGCAIFCQABAAEEBQQAAAEFBQEIHAAAAgUCAgABBQUAAgADAAUCAAQBCQUEAQUDAAUFCAEFBAUDBwkABAUFAgAFAAAAAAYABgAHAAUCCAICAAInJwAFAwAAAAAAAAAAAAAAAAAABQAAAAAAAAACAwAAAAAAAAQACAQAAgEAAAAABgABBAQACQAAAAAEABMCAAUAAAUBAAAGAgICAgIBAAYBAgcEAAcACQAABwECAgICAgICAgICAgIABwAAAAAHAAICBAUEBAQEAAQEAAQECAADAgAFAQAAAAEIAAAADQEAAQECAAgJBAkHAQQCAAMAHAEAAwUBAAIcAQYAAgABAgQABQICAQMHAgMCAgAFAQQAAQYGBgIBBQEBAQEBAQEBAQQBAAIEAAEGAwEBAAIFDwEAAgICAgICAgICAgAAAAAAAAUAFAAAAD4AAAAEAQkJAAUFAQAHAgICAgIAAAAAAAEAAAAGAAEABAICAggGAAAABgICAQAFBAICBQUEAAUFBAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAA0ABAMCAAAGAAEBAQEBAQEAAAAAAQEBAAEAAAAAAQEBAAEABgEAAAIAAgQCARgAAAcCAwgBAAEBBwEBAAAAAAAEBAUCAAICAgICAQAAAQAFBAQEAgAABgACBAAAAgICAgYAAgICAgIAAAICAgICAAIAABAAAAUABAICAgICAgAFAAQBAAAABAkABQQCAwEACAAFBgYABAQEBAUCAAEABwQEBQUAAQIHBwABAgICAgICAgIDAgAAAgcHBAEBBQICAgICAgICAgICAgICAgICAgICAgICAAAAAAAADwEBAAAAAAACBAQCAgICBAACAAQEAgUCBQIAAQECBQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAEAAAAAAQABAAEBAAACBgAEBAIFAQoIBQQHAgICAQIAAgEBAQICAgICAgIBAQEoAQIAAAEBAQEBAgcBAQAEBAICAQQAAQEAAAACAgABBAQABgEEAAMEBQUFBQYAAAYGAgACAAEBAAAFBQABAAEEAAQAAAADCgEABgQABAEABwkEBAABAAABAQEAAAAAAAAAAQcGBAEEAAYEAQUBAAUABAEPAAEBBgAEAAENBQEBAAACAgICAAYCAAAAAAAAAAAAAwgAAAEAAwECCAUEBQQBAQICAgEABAEBAQABAQEBAQEBAgACAgECAgICAgQEAgICAQECBAICAQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAQIBBQABAAEBAQEBAQEEARABAQEBAQgBAQMDAgEBAQEAAAEBAQQCAQEFAQEHAQoBAQUBAQEBAQABAQEAAT8BAQEAAAAAAAAAAAAAAAAAAAAAAAICBwICAgECAAACBwkGAQICAgICAgICAAgCAgIAAQcBAgACAgICAAEBAAABBQEBAQEAAQIAAAECAgEBAQABAQEBAQEAAAAHAAAFAAQBBQUEAQUBBQAAAAAFAgIAAAAAAQAAAQAAAUACAgEBAAIAAgIBAQ0EAAAABQQABAAJBAQCCAAGAgICBQEFBQMFBQUFBQUFBQUBAQEBAQEBAQABKQEBAQEFAQEBBQEBAQECAAILBgBBBAQBCQQJAAQHAwECBQABAB0BAQEBAQEAAAABAAAAAAENAAEBDAABAQAAAAAAAAABAQEBAQEBAQABAQEEAQABAAAAAQABBAUCDwICAgQJBgEBAAsCAAwMAQUAAwIEAAEBAQEBBQkCBgICBgUBAQEBBgEAAQABAQEAAQYCFxcAAgIFAAMGDgIAAAABAgIEAAACAgAAAAACAgUFAQICAAAAAAAAAAIMBgYGBgICAgICAgIAAAICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwIHBAICEBACBQIABgICAgICBQACAgICBgACAgEGBAICAAAFHQYADBgBAgAAAgIBAgIBAQEAAQEADQABAQEBAQIBAQEBAQEBAQEBAQEFAAQTARcCAAIAFBQBAgEBFBQAACAABQMUFAUCAQECAwICAgIJAgAWAgICAgICAAICBgMAAgIAAQIFBQABBQAFAQIBAREAAAIFAgICBwcFBgICAgYHAgICAgICAgIAAgIABAQHAAcCAAIDAgECBQUCBwcFAQEDAioCAgUBAQEBAQABAQEAAgUAAAUCAgIAAQEBAQAAAAAAAAEBAQFCAQAAACgAAAEFAQEBBQUBAQEAAQEBBgAEAAMAAAAEAQAAAAcBCQAFAAAAAAAFBCoAAAEAAAAABAAFAAAABQEABQICBAIBAAEAAQABBAQABBMAAQECGwcABRAAAQEBDAAAAgcGAgcFBQEBAQEBAQYBAQEBAAUBAAEbBQANAQEBAQEAAAQEAQACBwIFAAICIysBAQIJAQICAgABAQICAQAAAgICAgEBAQAAAAoBAQoBAAICAgsGBAkEBQEBBAAEAgICAgILBgYGAgIAAAAAAAEBAQUBAQYGBgYBAQAAAAABAQEBAQICAgEDAAABBwYEBQkGAgIBAQcCBAcBBQUGKQICDAYAAAABBQICAgICBQAGAgIBAQEAAAAAAQACBgAAAQgCAQABAAAAAAAHAAkCAQEBAQEAAAAABgEFAAABAQAACQMFAgABAwMGAAAAAQEAARABAQAAAwAAAAAAAAIEAAAAAAAAAAAAABgBAAAAAABDAAABABAAAAAAAAAAAwkJCQkBCQMHBwEBFQQDCQMDKwEDAwMDAwcJAhYJAgkGAgUMAAUEAQEMAgEADAIJBAkBAAEJBAUEAAEJBw5ERkgAAwEBBQUFEAEEAgICAwEEBAYGBgEBAQEMAgEBAAEBAQEBAQEBAQQABAAABQAGBAQKCgICCQIXFwYAAQEBAQAFAgABBQAAAAAAEQUCBQEBAQEBCgEBAQEBAQEBAAABAgICEQECBQQFAQEBAQQEBQQEBAoBBQUEBAAAAQIAAgMJAAQDAQIABQICBAMHBAwBAQEBBQUBAQUBAQEBCgEBAQwBAQEBAQAAAQEAAAABAQEAAQwBAQEBAQEBAQEBCgEBAQEBCgUBAQUBAQABAQQEAgIBAQQJCQEBAgIFBAMCAAEBAQEFAQEBAQIBAQEGBgEBAQEBAQEBAQEBAQAAAAAAAAAAAAAEAAEBAQAAAAEBBAABAQEAAAAAAAAEAQEBAQAAAAAAAAAAAAABAQEBDAQBAQEBAQEBAQEBAQEBAQEBAAABAQEBAQEAAQQBAQAAAAAAAAEBAQEAAAAAAQEBAAEBBgACAQEBAQEBAQcDAQEAAQAAAQEABAEEAgEEAAoKCgoKCgoKCgoKCgoBAQABAQEBDwoCBQEBAQEBAQEBAQAADAwBAQEBAAAAAQECAQEBAQEAAAABAgICAgIBBQUKAwEABAQDBwwCAgUYAAEBEQENAQEBAQoBAQEBCgoKCgoFAQQBAQEBAAEBAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQAAAAEAAAAAAAEAAAACAAAAAAAAAAABAQAAAQAAAQIAAAABAQEBAQEBAAIAAAAAAAAAAAAAAAAAAQECAgIBBAADAAICAgIEAgICARMTAAACAAEAAgICAgICAgACBAECAQEBAgEBAQEBAQEBAQABBQEBAQEBAQEBAQEBAgEBAQEBAQICAgICAgICBQUBAQEBAQEBAQEFAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAQEAAAABAAAAAAEBAQEBAAAAAAAAAAAAAAAAAAAAAQEBAQEAAQEBAQEBAQABAQEBAQAAAAAAAAABAQEBAQEBAQEAAAABAQEBAQEBAQAAAQABAQEBAQEBAQAAAQAAAQEBAAAAAAABAQEBAAABAQEBAQEAAQEBAQEBAQEEAwEDAAAABAAAAAAAAAAAAAABAQAAAAABAQEBAQECAQUFBQMFAgcCAAEBAQEBAgUBAAEDAQYBAQEBAQEBAQEBAQEBAR0BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBARkBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAQEBAQEBAQEBAQEAAAABAAICAgICAgIBAAAAAAEAAAACBAYBAQEBAQIDAAEBAQEAAgEEAQEBAQEBAQEBAQEFAQEE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DCkCADcCACABKALIAiEEIAFBJTYCyAIgASABKQPgAjcDmAMgDUEIaiAMQQhqKQIANwIAIA1BEGogDEEQaigCADYCACACIAQ2AugGIAJB6AZqIggQvgogCCABQQEQvBIgAkGwAWogAigC6AYQsQYgAigCtAEhAyACKAKwASAIEPUkDQIgASgCnAMhBCACKAL0AiEGIBsgBSkDADcDACACIAIpA5gDNwOABSAIIAJBgAVqEIocQfAAQQgQkSAiDiAGIAQgBCAGSRs2AgwgDiAGIAQgBCAGSxs2AgggDkEHNgIAIA4gAzYCKCAOIAIpA+gGNwMQIA5BGGogDykDADcDACAOQSBqIAJB+AZqKQMANwMADAELIAJB0AdqIAUpAwA3AwAgAiACKQOYAzcDyAcgAkGABWogAkHIB2oQihwgC0EQaiACQZAFaikDADcCACALQQhqIBspAwA3AgAgCyACKQOABTcCAEHwAEEIEJEgIg5BBTYCACAOIAIpAugGNwIEIA5BDGogDykCADcCACAOQRRqIAJB+AZqKQIANwIAIA5BHGogAkGAB2ooAgA2AgALQQAhA0EAIQUMFwsgAikDmAMQ3RpBASEFDBYLIAJB6AZqEPUkCwJAAkACQCAHEMgNIgQEQCAEKAIAQQlGDQELIA8gBxCEECACQcABaiAHEPATIAJBkN/fADYC7AYgAkE0OgDoBiACKALAASACKALEASACQegGahDwFCEEIAcQyA0iA0UNASADKAIAQSRHDQEgASABKQPgAjcDmAMgASgCyAIgAUElNgLIAkEkRw0gIAEgASgCzAIQ+wsMAQsgDSAMKQIANwIAIAEoAsgCIQQgAUElNgLIAiABIAEpA+ACNwOYAyANQQhqIgkgDEEIaiIRKQIANwIAIA1BEGoiECAMQRBqIhYoAgA2AgAgAiAENgLoBiACQegGaiISEL4KIAJBADoA4wQgAkEBOgDlBCACIAItAJAEOgDXBCACIAItAKAGOgDYBCACIAEtALACOgDWBCACIAEtAL4COgDkBCACIAEtAMYCOgDsBCACIAEoAaoCNgDQBCACIAEvAa4COwDUBCACIAEpALMCNwDZBCACIAEvALsCOwDhBCACIAEoAsACNgDmBCACIAEvAcQCOwDqBCALQRVqIAMpAAA3AAAgC0EQaiAFKQEANwEAIAtBCGogCCkB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AkHgA2o2AvQEIARBgICAgHhHBEAgAiAKNgKIBSACIAM2AoQFIAIgBDYCgAUgLyACQagEakEkEPYGIChBEGogAkGgBGopAwA3AgAgKEEIaiACQZgEaikDADcCACAoIAIpA5AENwIAIAIgCjYC1AUgAiADNgLQBSACIAQ2AswFIAJBBzYC2AUgAiAKQQJPBH8gAkHIB2oiBCACQcwFahCgFSACQdgFaiIDEPokIAMgBEEoEPYGGiAsENwmIAIoAtAFIQMgAigC1AUhCiACKALMBQUgBAs2AuAGIAIgAzYC2AYgAiADIApBBnRqNgLkBiACIAM2AtwGAkACQCAKBEAgAygCCCEFIAMoAgQhBCADKAIAIQ4gAkHABmoiBiADQRRqKQIANwMAIAJByAZqIgggA0EcaikCADcDACACQdAGaiIKIANBJGooAgA2AgAgAykCDCEyIAJBqAZqIhEgA0EwaikDADcDACACQbAGaiIQIANBOGopAwA3AwAgAiADQUBrNgLcBiACIAMpAyg3A6AGIAIgMjcDuAYgDkEHRw0BCyACKALgAyEEIAIoAuQDIQMgAkESOgDIByABIAQgAyACQcgHahCvGUEFIQ5BACEFQQAhBAwBCyAgIAIpA7gGNwIAICcgAikDoAY3AwAgIEEIaiAGKQMANwIAICBBEGogCCkDADcCACAgQRhqIAooAgA2AgAgJ0EIaiARKQMANwMAICdBEGogECkDADcDACACIAU2AtAHIAIgBDYCzAcgAiAONgLIByACQZgGaiAKKAIANgIAIAJBkAZqIAgpAwA3AwAgAkGIBmogBikDADcDACACIAIpA7gGNwOABiAsENwmC0EoQQgQkSAiAyAFNgIIIAMgBDYCBCADIA42AgAgAyACKQOABjcCDCADQRRqIAJBiAZqKQMANwIAIANBHGogAkGQBmopAwA3AgAgA0EkaiACQZgGaigCADYCACACQdgGahDDFyABKAKcAyEEIAIoAvQCIQYgLiACQdgFakEoEPYGGiACQYAHaiACQegEaikDADcDACACQfgGaiACQeAEaikDADcDACAPIBcpAwA3AwAgJiAlKQIANwIAICZBCGogJUEIaikCADcCACAmQRBqICVBEGopAgA3AgAgAiACKQPQBDcD6AZB8ABBCBCRICIOIAJB6AZqQeAAEPYGIgUgAzYCaCAF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IAIoAuQDIQQgAigC4AMhAyACQYABOgCABSABIAMgBCACQYAFahCvGQsgAkHQB2ogFykDADcDACACQdgHaiACQeAEaikDADcDACACQeAHaiACQegEaikDADcDACAjICIpAgA3AgAgI0EIaiAiQQhqKQIANwIAICNBEGogIkEQaikCADcCACACIAIpA9AENwPIByABKAKcAyEEIAIoAvQCIQMgFCACQcgHakE4EPYGGkHwAEEIEJEgIg5BCDYCACAOQQRqIAJBgAVqQTwQ9gYaIA4gBjYCSCAOIAMgBCADIARLGzYCRCAOIAMgBCADIARJGzYCQCACQegGahDmJiAVENwmIAIoAqQHEMQoC0EAIQNBAAwCCyACQdAEahCMFgtBAQshBSACQegDahD1JCACKQOYAxDdGiACKAL4AkUNACACQfgCahCMFgsgBQ0BCyACKALwAiIEIAIoAugCRgRAIAJB6AJqEO8WCyACKALsAiAEQQxsaiIGIDA2AgggBiAONgIEIAYgAzYCACACIARBAWo2AvACIAcQyA0iBARAIAQoAgBBDkYNBAsgBxDIDSIEBEAgBCgCAEEQRg0CCyACQfAGaiAHEIQQIAIgBxDwEyACQYi+4AA2AuwGIAJBNDoA6AYgAigCACACKAIEIAJB6AZqEPAUIQMgBxDIDSIERQ0AIAQoAgBBJEcNACABIAEpA+ACNwOYAyABKALIAiABQSU2AsgCQSRHDQIgASABKALMAhD7CwsgAkHoAmoQzyYMAwsgDSAMKQIANwIAIAEoAsgCIQQgAUElNgLIAiABIAEpA+ACNwOYAyANQQhqIAxBCGopAgA3AgAgDUEQaiAMQRBqKAIANgIAIAIgBDYC6AYgAkHoBmoQvgogBxDIDSIERQ0BQQEgKSAEKAIAQQ5GIgQbISkgASkDmAMgMSAEGyExDAELC0HZ5OAAQShB9KXgABDhFwALQQELIQEgAkHEAmoQ9SQgACADNgIEIAAgATYCACACQZAIaiQADwtB2eTgAEEoQZDy3wAQ4RcAC0HZ5OAAQShBoPLfABDhFwALqIABAjB/BH4jAEGQCGsiAiQAIAJBADoAtwIgAiABKQGCAzcApwIgAiABQYoDaiIEKQEANwCvAiACIAEpAJMDNwC4AiACIAEoAJsDNgDAAiACQd0CaiABQZcDaikAADcAACACQdgC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yAIgASABKQPgAjcDmAMgBEHMBWogFUEIaikCADcCACAEQdQFaiAVQRBqKAIANgIAIAQgFSkCADcCxAUgBCADNgLABSAEQcAFahC+CgsgCSAEQagBahDHCCAEQZgBaiAEQcwBahC9BiAEKAKcASEMIAQoApgBIgNBgICAgHhGDQAgACAEKAKgATYCCCAAIAw2AgQgACADNgIAIAAgMiABKAKcAyIBIAEgMkkbNgIQIAAgMiABIAEgMksbNgIMDAILIABBgICAgHg2AgAgACAMNgIEDAELIABBgICAgHg2AgAgACADNgIECyAEQfAHaiQAC6BWAiN/A34jAEHgA2siAyQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAigCAEEBaw4HABYBAgMEBwULIAMgAigCBCIFIAIoAghqNgL0AiADIAU2AvACIAMgATYC+AICQCABLQALQQFxRQRAIANB8ABqIANB8AJqEPIXDAELIANB8ABqIANB8AJqEPMXCyADKAJwIgVBK0YNBCADKAJ4IQIgAygCdCEEIAVBKkcNFCADQdQBaiEIA0ACQCABLQALQQFxRQRAIANByAFqIANB8AJqEPIXDAELIANByAFqIANB8AJqEPMXCyADKALIASIGQStGBEAgACACNgIIIAAgBDYCBCAAQSo2AgAMHAsgAygC0AEhBSADKALMASEHIAZBKkcNFCADQYADaiABIAIgBxDOCCADKAKAAyICQSpGBEAgBSECDAELCyAAQQRqIANBgANqQQRyQTwQ9gYaIAAgAjYCAAwaCyACKAIEaEECdEHw0eMAaigCACECIAEtAAtBAXEEQCACaEECdEG40uMAaigCACECCyADQdAAaiABQSBqQbiuwwAQpR0gAygCVCEBIAMoAlAhBSADIAI2AtABIANCAzcCyAEgA0GAA2ogBSADQcgBahDeCCABIAEoAgBBAWo2AgAgAEEIaiEBIAMoAoQDIQICQCADKAKAAyIFQSpGBEAgASACNgIADAELIAEgA0GIA2pBOBD2BhoLIAAgBTYCACAAIAI2AgQMGQsCQCACKAIQIgQgAigCBCIFRXJFIAIoAggiBkEBRnFFBEAgBQ0BIAAgASACKAIMIAItABQgBBDaAQwaCyACKAIMIQQCQCACLQAURQRAIANBgANqIAEQ4xIMAQsgA0GAA2ogARDkEgsgAygChAMhAiADKAKAAyIFQSpHDREgA0GAA2oiBSABIAQQMCADKAKIAyEGIAMoAoQDIQcgAygCgAMiBEEqRw0QIAUgARCtFyADKAKEAyEEIAMoAoADIghBKkcNDyAFIAEgAiAHEM4IIAMoAoADIgdBKkcNDiAFIAEgAiAEEM4IIAMoAoADIgdBKkcNDSAFIAEgBiAEEM4IIAMoAoADIgFBKkYEQCAAIAQ2AgggACACNgIEIABBKjYCAAwaCyAAQQRqIANBgANqQQRyQTwQ9gYaIAAgATYCAAwZCyACKAIMIQggBCAGRwRAIAItABQgA0GAA2ogASAIIAQQsAYgAygCiAMhBSADKAKEAyEJIAMoAoADIgdBKkcEQCAAQQxqIANBjANqQTQQ9gYaIAAgBTYCCCAAIAk2AgQgACAHNgIADBoLIANBgANqIAEQrRcgAygChAMhByADKAKAAyIKQSpHDQwgBiAEayIEQQAgBCAGTRshBkEBcSEPA0AgBkUEQCADQYADaiABIAUgBxDOCCADKAKAAyIBQSpGBEAgACAHNgIIIAAgCTYCBCAAQSo2AgAMHAsgAEEEaiADQYADakEEckE8EPYGGiAAIAE2AgAMGwsCQCAPRQRAIANBgANqIAEQ4xIMAQsgA0GAA2ogARDkEgsgAygChAMhBCADKAKAAyICQSpHDQwgA0GAA2oiCiABIAgQMCADKAKIAyECIAMoAoQDIQ4gAygCgAMiC0EqRw0LIAogASAFIAQQzgggAygCgAMiBUEqRw0KIAogASAEIA4QzgggAygCgAMiBUEqRw0JIAogASAEIAcQzgggAygCgAMiBUEqRgRAIAZBAWshBiACIQUMAQsLIABBBGogA0GAA2pBBHJBPBD2BhogACAFNgIADBkLIAAgASAIIAQQsAYMGAsgACABIAIoAgggAigCDCACKAIQIAIoAgQQvgIMFwsgAyACKAIIIgU2AvACIAMgBSACKAIMQRxsajYC9AIgAyABNgL4AgJAIAEtAAtBAXFFBEAgA0HwAGogA0HwAmoQrBsMAQsgA0HwAGogA0HwAmoQzBoLIAMoAnAiBUErRw0BCyAAIAEQyhEMFQsgAygCeCECIAMoAnQhBCAFQSpHDQIgA0HUAWohCANAAkAgAS0AC0EBcUUEQCADQcgBaiADQfACahCsGwwBCyADQcgBaiADQfACahDMGgsgAygCyAEiBkErRgRAIAAgAjYCCCAAIAQ2AgQgAEEqNgIADBYLIAMoAtABIQUgAygCzAEhByAGQSpHDQIgA0GAA2ogASACIAcQzgggAygCgAMiAkEqRgRAIAUhAgwBCwsgAEEEaiADQYADakEEckE8EPYGGiAAIAI2AgAMFAsgAigCCCIFIAIoAgwiB0EcbGohDAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAHRQ0AIAUhAiAHIQYDQCAEIAIoAgBBAUZqIQQgAkEcaiECIAZBAWsiBg0ACyAEQQJJDQAgBCAHTw0BCyADIAE2AvgCIAMgDDYC9AIgAyAFNgLwAiADQYADaiADQfACahDqGyADKAKAAyICQStGBEAgACABEL8MDB8LIAMoAogDIQYgAygChAMhByACQSpHDQogA0GAA2ogA0HwAmoQ6hsgAygCgAMiAkErRgRAIAAgBjYCCCAAIAc2AgQgAEEqNgIADB8LIAMoAogDIQggAygChAMhCiACQSpHDQkgA0GAA2oiAiABEOQSIAMoAoQDIQUgAygCgAMiBEEqRw0IIAIgARCtFyADKAKEAyEEIAMoAoADIglBKkcNByACIAEgBSAHEM4IIAMoAoADIgdBKkcNBiACIAEgBiAEEM4IIAMoAoADIgZBKkcNBSACIAEgBSAKEM4IIAMoAoADIgZBKkcNBCACIAEgCCAEEM4IIAMoAoADIgJBKkcNAyADQfgAaiADQfgCaigCADYCACADIAMpAvACNwNwIANB1AFqIQgDQCADQcgBaiADQfAAahDqGyADKALIASICQStGBEAgACAENgIIIAAgBTYCBCAAQSo2AgAMIAsgAygC0AEhBiADKALMASEHIAJBKkcNAyADQYADaiICIAEgBSAHEM4IIAMoAoADIgdBKkcNAiACIAEgBiAEEM4IIAMoAoADIgZBKkYNAAsgAEEEaiACQQRyQTwQ9gYaIAAgBjYCAAweCyABLQALIQZBGEEEEJEgIgtCBDcCECALQgA3AgggC0KAgICAwAA3AgAgAyAGQQFxOgB8IANBATYCeCADIAs2AnQgA0EBNgJwQQEhCkEBIQdBASEEAkACQANAIAUgDEYEQCADQeAAaiABQSBqQbiswwAQpR0gAygCZCEKIANBgANqIAMoAmAiCBDgHiADKAKEAyEGIAMoAoADIgFBKkcNHSADQQA2ApQCIANCgICAgMAANwKMAiADQZgCaiADKAJ0IAMoAnhBAEGMk8QAELcfEL0KIAatIScgA0GcAmohCSADQbACaiEFIANBpAJqIQcgA0HYAWohDgJAA0AgAygCeCECIAMoAnQhBANAIAMoAsgCIgEgAygCzAJHBEAgAyABQQhqNgLIAiAEIAIgASgCACILQZyTxAAQtx8gATEABCImQiiGICZCIIaEISYoAghFBEAgByAmICeEEK0bDAILIAcgJhCtGyADKAKUAiIPIAMoAowCRgRAIwBBEGsiASQAIAFBCGogA0GMAmoiDCAMKAIAQQFBBEE4EMQIIAEoAggiDEGBgICAeEcEQCAMIAEoAgwQxCkACyABQRBqJAALIAMoApACIA9BOGxqIANBmAJqIgFBOBD2BhogAyAPQQFqNgKUAiABIAQgAiALQayTxAAQtx8QvQoMAQsLAkACQAJAAkAgAygCrAIOAgMAAQsgA0EANgKsAiADQYADaiAIIAMoAqgCKQIAELEdIAMoAoQDIQIgAygCgAMiBEEqRg0BDCMLIANB2AJqIAdBCGooAgA2AgAgAyAHKQIANwPQAiADQQA2AqwCIANCgICAgMAANwKkAiADQYADaiAIIANB0AJqEJMYIAMoAoQDIQIgAygCgAMiBEEqRg0ADCILIANBmAJqIAIQjxsLIANB2ABqIAUQxA0gAygCWCIBBEAgAygCXCECIANBmAJqIAYQjxsgAyABNgLIAiADIAEgAkEDdGo2AswCDAELIANB6AJqIANBoAJqKAIANgIAIAMgAykCmAI3A+ACIANBgANqIAggA0HgAmoQlBggAygChAMhAiADKAKAAyIBQSpGBEACQCADKAKUAiIBBEAgAyABQQFrIgE2ApQCIAMoApACIAFBOGxqIgEoAgAiC0GAgICAeEcNAQsgACAGNgIIIAAgAjYCBCAAQSo2AgAMIwsgASgCFCEEIAEoAhAhDyADQfgCaiIMIAFBDGooAgA2AgAgA0HQAWoiECABQSBqKQIANwMAIA4gAUEoaikCADcDACADQeABaiINIAFBMGopAgA3AwAgAyABKQIENwPwAiADIAEpAhg3A8gBIARFDQIgBEEDdCAPakEIayACNgIA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DCIMIAIoAhAiAhC4Hw0BAkAgAS0AC0EBcUUEQCADQcgAaiABQSBqQdiswwAQpR0gAygCTCEFIAMoAkghBCADQUBrIAFB4ABqQeiswwAQpR0gAygCRCEBIANBgANqIAQgAygCQBDCBiADQdABaiIEIANBjANqKAIANgIAIAMgAykChAM3A8gBIAMoAoADIgZBKkcNASADQfgAaiAEKAIANgIAIAMgAykDyAE3A3AgDCACQQN0aiECA0AgAiAMRgRAIAAgA0HwAGoQ5wYgASABKAIAQQFqNgIAIAUgBSgCAEEBajYCAAwNCyADQcgBaiAMKAIAIAwoAgQQ2RwgDEEIaiEMA0AgA0HgAmogA0HIAWoQ7gIgAy0A4AJBBEYEQCADKALIASADKALMARDRKQwCCyADQfgCaiADQegCai0AADoAACADIAMpAOACNwPwAiADQThqIANB8AJqEJ8gIANBgANqIgQgA0HwAGogAygCOCADKAI8EN8EIAMoAoADIgZBKkYNAAsLIABBBGogBEEEckE8EPYGGiAAIAY2AgAgAygCyAEgAygCzAEQ0SkMBgsCQAJAIAEtAAxBAXFFBEAgASgC2AENAiABQX82AtgBIAFB3AFqIQUgASgC5AFFDQEgASABLwHsAUEBaiIEOwHsASAEQf//A3EgBEYNByADQQA2AogDIANCADcDgAMgA0EAOwGMAyADQcgBaiADQYADaiABKALoARDvByABKALcASABQeABaigCABDQKSAFQQhqIANB0AFqKAIANgIAIAUgAykCyAE3AgAMBwsgASgChAFFBEAgAUF/NgKEASABQYgBaiIQEJgHIAFBoAFqIRggAUGsAWohGSAMIAJBA3RqIR0gA0HMAWohDyADQfAAakECciEUIANB4QJqIRogAUGwAWohHiABQZABaiEVIAFBjAFqIRYgA0HUAWohHyADQc4BaiEgIANB0QFqISEgAUGkAWohIgJAAkADQAJAIAwgHUYEQCADQRBqIAFBIGpBiK3DABClHSADKAIUIQUgAygCECECIANBCGogAUHgAGpBmK3DABClHSADKAIMIQYgA0GAA2ogAiADKAIIEMIGIANB0AFqIgIgA0GMA2ooAgA2AgAgAyADKQKEAzcDyAEgAygCgAMiBEEqRw0BIANB+ABqIAIoAgA2AgAgAyADKQPIATcDcCAB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/wGDQgRRDSMgACAONwIADCQLIANBOGogASACKAIIIgRBABDRAQJAIAMtADhBBEcEQCADKQM4Ig5C/wGDQgRSDQELAkAgBEUNACADQThqIAEgBBC6HCADLQA4QQRGDQAgAykDOCIOQv8Bg0IEUg0BCyACQQRqIQQgA0EIaiIHIAItABAiBsBBAnQiBUG07+MAaigCADYCBCAHIAVB0O/jAGooAgA2AgAgAygCDCEHIAMoAgghBQJAAkACQCAGQQNNBEAgA0EANgI4IANB8ABqIAEgA0E4aiAFIAcQmhMgAy0AcEEERwRAIAMpA3AiDkL/AYNCBFINBQsgBCgCACAGEOQKDQEMAwsgA0EANgI4IANB8ABqIAEgA0E4aiAFIAcQmhMgAy0AcEEERwRAIAMpA3AiDkL/AYNCBFINBAsgBCgCACAGEOQKRQ0BCyADQThqIAEQvREgAy0AOEEERg0BIAMpAzgiDkL/AYNCBFENAQwCCyABLQBNDQAgA0E4aiABEL0RIAMtADhBBEYNACADKQM4Ig5C/wGDQgRSDQELIANBOGogBCABEKgqIAMtADhBBEYNIyADKQM4Ig5C/wGDQgRRDSMLIA5C/wGDQgRRDSIgACAONwIADCMLIANBOGogASACKAIEIgRBABDRAQJAIAMtADhBBEcEQCADKQM4Ig5C/wGDQgRSDQELAkAgBEUNACADQThqIAEgBBC6HCADLQA4QQRGDQAgAykDOCIOQv8Bg0IEUg0BCyACLQARRQRAIANBOGogAkEMaiABEKgqIAMtADhBBEcEQCADKQM4Ig5C/wGDQgRSDQILIANBADYCOCADQfAAaiABIANBOGpBh6rgAEGFquAAIAItABAbQQIQmhMgAy0AcEEERg0jIAMpA3AiDkL/AYNCBFINAQwjCyADQQA2AjggA0HwAGogASADQThqQYeq4ABBhargACACLQAQG0ECEJoTIAMtAHBBBEcEQCADKQNwIg5C/wGDQgRSDQELIANBOGogAkEMaiABEKgqIAMtADhBBEYNIiADKQM4Ig5C/wGDQgRRDSILIA5C/wGDQgRRDSEgACAONwIADCILIANBOGogASACKAIMIgRBABDRAQJAIAMtADhBBEcEQCADKQM4Ig5C/wGDQgRSDQELAkAgBEUNACADQThqIAEgBBC6HCADLQA4QQRGDQAgAykD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orDgAEEDEJoTIAMtADhBBEcEQCADKQM4IhNC/wGDQgRSDQkLQQEgBygCAHRBFXENAiABLQBNDQMgA0EoaiABEL0RIAMtAChBBEYNAyADKQMoIhNC/wGDQgRRDQMMCAsgA0EANgIoIANBOGogASADQShqQaWw4ABBAxCaEyADLQA4QQRHBEAgAykDOCITQv8Bg0IEUg0IC0EBIAcoAgB0QRVxDQMgAS0ATQ0EIANBKGogARC9ESADLQAoQQRGDQQgAykDKCITQv8Bg0IEUQ0EDAcLIAItAEVFDQQgA0EANgIoIANBOGogASADQShqQcyy4ABBBRCaEyADLQA4QQRHBEAgAykDOCITQv8Bg0IEUg0HCyADQShqIAEQvREgAy0AKEEERg0EIAMpAygiE0L/AYNCBFENBAwGCyADQShqIAEQvREgAy0AKEEERg0AIAMpAygiE0L/AYNCBFINBQsgA0EoaiABIAcQtwQgAy0AKEEERg0DIAMpAygiE0L/AYNCBFENAwwECyADQShqIAEQvREgAy0AKEEERg0AIAMpAygiE0L/AYNCBFINAwsgA0EoaiABIAcQtwQgAy0AKEEERg0BIAMpAygiE0L/AYNCBFINAgwBCwJAIAItAERFDQAgA0EANgIoIANBOGogASADQShqQeup4ABBARCaEyADLQA4QQRGDQAgAykDOCITQv8Bg0IEUg0CCyADQShqIAEgBxC3BCADLQAoQQRGDQAgAykDKCITQv8Bg0IEUg0BCwJAIAQtADZFDQAgA0EANgIoIANBOGogASADQShqQe+u4ABBARCaEyADLQA4QQRGDQAgAykDOCITQv8Bg0IEUg0BCwJAIAIoAjxFDQAgAyACQTxqNgI4IANBKGogA0E4aiABEKcpIAMtAChBBEYNACADKQMoIhNC/wGDQgRSDQELIANBADYCQCADQShqIAEgA0FAa0GrruAAQQEQmhMgAy0AKEEERwRAIAMpAygiE0L/AYNCBFINAQsgA0EoaiABIAIoAjAgAigCNCACKAIEIAIoAggQnwUgAy0AKEEERwRAIAMpAygiE0L/AYNCBFINAQsgA0EoaiABIANBQGtB8JnjAEEBEJoTIAMtAChBBEcEQCADKQMoIhNC/wGDQgRSDQELAkAgAigCQEUNACADQShqIAEgA0FAa0HwruAAQQEQmhMgAy0A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EMIXQf8BcUEKEPANRQ0KIAgQoRUgAkEANgKEAiACQoCAgIAQNwL8ASABKALQASEGDAILQQAhAyACQQA2AtgBIAIgBjYC1AEgAiAENgLQAUEBIQcDQCACQfgAaiACQdABahDjDyACKAJ8IgVBgIDEAEYNAyACKAJ4IQgCQCAHBEAgBRDUEQ0BDAULIAUQ1REgBUEtRg0ARQ0ECwJ/QQEgBUGAAUkNABpBAiAFQYAQSQ0AGkEDQQQgBUGAgARJGwsgCGohA0EAIQcMAAsACyAIEKEVQSIhBwwLCwJAAn8DQCABKALAASABKALEARDjHCIDQYCAxABGBEAgASgCnAEhBCACQRs6ANABIAEgBCACQdABahC6IyABKALQASEEDAMLIAEoAtABIQQgA0HcAEYEQCACQZABaiAIIAYgBBDAFSACQfwBaiIEIAIoApABIAIoApQBEN0dIARB3AAQ9wcgCBChFSABKALQASEGDAELIAMgBUYNAiADQSZGBEAgAkGYAWogCCAGIAQQwBUgAkH8AWoiAyACKAKYASACKAKcARDdHSACQdABaiABEEEgAigC1AEiByACKALQASIEQYCAxABGDQIaIAIoAtgBIQkgAyAEEPcHIAEoAtABIQYgByAJEK0kDAELIAMQ8x1FBEAgCBChFQwBCyACQaABaiAIIAYgBBDAFSACQfwBaiIHIAIoAqABIAIoAqQBEN0dIAJB0AFqIAFBABCjDSACKALQAUUEQCACKALYASEGAkAgAigC1AEiCQRAIAcgCSAGEN0dDAELIAJB/AFqIAYQ9wcLAn9BASADQYABSQ0AGkECIANBgBBJDQAaQQNBBCADQYCABEkbCyAEaiEGDAELCyACKALUAQshBSACKAL8ASACKAKAAhCtJAwNCyACKAKEAiEDIAJBiAFqIAggBiAEEMAVIAIoAowBIQQgAigCiAEhBQJ+IAMEQCACQfwBaiIGIAUgBBDdHSABKALoAUEIaiAGENsLDAELIAEoAugBQQhqIAUgBBDtGQshFCABKALAASABKALEARCSHEGAgMQARwRAIAgQoRULIAJBgAFqIAggCiABKALQARDAFSABKALoAUEIaiACKAKAASACKAKEARDtGSEVIANFBEAgAigC/AEgAigCgAIQrSQLIAIgFTcDuAEgAiAUNwOwAUEbIQcMCgsgASAGNgLE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BEIANwMIIAQgPDcDACADQfImakIANwEAIARBEGpCADcDACADQgA3AuwmIAMgBDYC6CYgA0EANgLYJiAQIANB2CZqEOYZCyALLQALBEAgDygCABCFBCEJQfec2gBBCxDAGiE9IANBvMLfAEEBEMAaNwO4BCADQgA3A8AEIANB4CZqIgQgA0G4BGoQihwgA0GgBGoiByAEKQMANwMAIANBqARqIgggA0HoJmopAwA3AwAgA0GwBGoiBCADQfAmaikDADcDACADQgA3A5gEQYKd2gBBGhDAGiE8QcgAENIgIgVCADcDOCAFQQA6ADQgBSAJNgIwIAVCADcDKCAFID03AyAgBUEYaiAEKQMANwMAIAVBEGogCCkDADcDACAFQQhqIAcpAwA3AwAgBSADKQOYBDcDACAFQUBrQQA6AAAgA0EBNgLkJiADIAU2AuAmIANBATYC3CZBGBDSICIEQgA3AwggBCA8NwMAIANB8iZqQgA3AQAgBEEQakIANwMAIANCADcC7CYgAyAENgLoJiADQQA2AtgmIBAgA0HYJmoQ5hkLIAstAAwEQCAPKAIAEIUEIQlBnJ3aAEEcEMAaIT0gA0G8wt8AQQEQwBo3A+gEIANCADcD8AQgA0HgJmoiBCADQegEahCKHCADQdAEaiIHIAQpAwA3AwAgA0HYBGoiCCADQegmaikDADcDACADQeAEaiIEIANB8CZqKQMANwMAIANCADcDyARBuJ3aAEErEMAaITxByAAQ0iAiBUIANwM4IAVBADoANCAFIAk2AjAgBUIANwMoIAUgPTcDICAFQRhqIAQpAwA3AwAgBUEQaiAIKQMANwMAIAVBCGogBykDADcDACAFIAMpA8gENwMAIAVBQGtBADoAACADQQE2AuQmIAMgBTYC4CYgA0EBNgLcJkEYENIgIgRCADcDCCAEIDw3AwAgA0HyJmpCADcBACAEQRBqQgA3AwAgA0IANwLsJiADIAQ2AugmIANBADYC2CYgECADQdgmahDmGQsgCy0ADQRAIA8oAgAQhQQhCUHjndoAQSMQwBohPSADQbzC3wBBARDAGjcDmAUgA0IANwOgBSADQeAmaiIEIANBmAVqEIocIANBgAVqIgcgBCkDADcDACADQYgFaiIIIANB6CZqKQMANwMAIANBkAVqIgQgA0HwJmopAwA3AwAgA0IANwP4BEGG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BCADQZgIahCKHCADQYAIaiIHIAQpAwA3AwAgA0GICGoiCCADQegmaikDADcDACADQZAIaiIEIANB8CZqKQMANwMAIANCADcD+AdBw6LaAEEnEMAaITxByAAQ0iAiBUIANwM4IAVBADoANCAFIAk2AjAgBUIANwMoIAUgPTcDICAFQRhqIAQpAwA3AwAgBUEQaiAIKQMANwMAIAVBCGogBykDADcDACAFIAMpA/gHNwMAIAVBQGtBADoAACADQQE2AuQmIAMgBTYC4CYgA0EBNgLcJkEYENIgIgRCADcDCCAEIDw3AwAgA0HyJmpCADcBACAEQRBqQgA3AwAgA0IANwLsJiADIAQ2AugmIANBADYC2CYgECADQdgmahDmGQsgCy0AFgRAIA8oAgAQhQQhCUHqotoAQRkQwBohPSADQbzC3wBBARDAGjcDyAggA0IANwPQCCADQeAmaiIEIANByAhqEIocIANBsAhqIgcgBCkDADcDACADQbgIaiIIIANB6CZqKQMANwMAIANBwAhqIgQgA0HwJmopAwA3AwAgA0IANwOoCEGDo9oAQSgQwBohPEHIABDSICIFQgA3AzggBUEAOgA0IAUgCTYCMCAFQgA3AyggBSA9NwMgIAVBGGogBCkDADcDACAFQRBqIAgpAwA3AwAgBUEIaiAHKQMANwMAIAUgAykDqAg3AwAgBUFAa0EAOgAAIANBATYC5CYgAyAFNgLgJiADQQE2AtwmQRgQ0iAiBEIANwMIIAQgPDcDACADQfImakIANwEAIARBEGpCADcDACADQgA3AuwmIAMgBDYC6CYgA0EANgLYJiAQIANB2CZqEOYZCyALLQAXBEAgDygCABCFBCEJQauj2gBBHxDAGiE9IANBvMLfAEEBEMAaNwP4CCADQgA3A4AJIANB4CZqIgQgA0H4CGoQihwgA0HgCGoiByAEKQMANwMAIANB6AhqIgggA0HoJmopAwA3AwAgA0HwCGoiBCADQfAmaikDADcDACADQgA3A9gIQcqj2gBBLhDAGiE8QcgAENIgIgVCADcDOCAFQQA6ADQgBSAJNgIwIAVCADcDKCAFID03AyAgBUEYaiAEKQMANwMAIAVBEGogCCkDADcDACAFQQhqIAcpAwA3AwAgBSADKQPYCDcDACAFQUBrQQA6AAAgA0EBNgLkJiADIAU2AuAmIANBATYC3CZBGBDSICIEQgA3AwggBCA8NwMAIANB8iZqQgA3AQAgBEEQakIANwMAIANCADcC7CYgAyAENgLoJiADQQA2AtgmIBAgA0HYJmoQ5hkLIAstABgEQCAPKAIAEIUEIQlB+KPaAEEeEMAaIT0gA0G8wt8AQQEQwBo3A6gJIANCADcDsAkgA0HgJmoiBCADQagJahCKHCADQZAJaiIHIAQpAwA3AwAgA0GYCWoiCCADQegmaikDADcDACADQaAJaiIEIANB8CZqKQMANwMAIANCADcDiAlBlqTaAEEtEMAaITxByAAQ0iAiBUIANwM4IAVBADoANCAFIAk2AjAgBUIANwMoIAUgPTcDICAFQRhqIAQpAwA3AwAgBUEQaiAIKQMANwMAIAVBCGogBykDADcDACAFIAMpA4gJNwMAIAVBQGtBADoAACADQQE2AuQmIAMgBTYC4CYgA0EBNgLcJkEYENIgIgRCADcDCCAEIDw3AwAgA0HyJmpCADcBACAEQRBqQgA3AwAgA0IANwLsJiADIAQ2AugmIANBADYC2CYgECADQdgmahDmGQsgCy0AGQRAIA8oAgAQhQQhCUHDpNoAQRgQwBohPSADQbzC3wBBARDAGjcD2AkgA0IANwPgCSADQeAmaiIEIANB2AlqEIocIANBwAlqIgcgBCkDADcDACADQcgJaiIIIANB6CZqKQMANwMAIANB0AlqIgQgA0HwJmopAwA3AwAgA0IANwO4CUHbpNoAQScQwBohPEHIABDSICIFQgA3AzggBUEAOgA0IAUgCTYCMCAFQgA3AyggBSA9NwMgIAVBGGogBCkDADcDACAFQRBqIAgpAwA3AwAgBUEIaiAHKQMANwMAIAUgAykDuAk3AwAgBUFAa0EAOgAAIANBATYC5CYgAyAFNgLgJiADQQE2AtwmQRgQ0iAiBEIANwMIIAQgPDcDACADQfImakIANwEAIARBEGpCADcDACADQgA3AuwmIAMgBDYC6CYgA0EANgLYJiAQIANB2CZqEOYZCyALLQAaBEAgDygCABCFBCEJQYKl2gBBGxDAGiE9IANBvMLfAEEBEMAaNwOICiADQgA3A5AKIANB4CZqIgQgA0GICmoQihwgA0HwCWoiByAEKQMANwMAIANB+AlqIgggA0HoJmopAwA3AwAgA0GACmoiBCADQfAmaikDADcD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IANB8CZqKQMANwMAIANCADcD2A5Bn6vaAEEbEMAaITxByAAQ0iAiBUIANwM4IAVBADoANCAFIAk2AjAgBUIANwMoIAUgPTcDICAFQRhqIAQpAwA3AwAgBUEQaiAIKQMANwMAIAVBCGogBykDADcDACAFIAMpA9gONwMAIAVBQGtBADoAACADQQE2AuQmIAMgBTYC4CYgA0EBNgLcJkEYENIgIgRCADcDCCAEIDw3AwAgA0HyJmpCADcBACAEQRBqQgA3AwAgA0IANwLsJiADIAQ2AugmIANBADYC2CYgECADQdgmahDmGQsgCy0AKARAIA8oAgAQhQQhCUG6q9oAQQgQwBohPSADQbzC3wBBARDAGjcDqA8gA0IANwOwDyADQeAmaiIEIANBqA9qEIocIANBkA9qIgcgBCkDADcDACADQZgPaiIIIANB6CZqKQMANwMAIANBoA9qIgQgA0HwJmopAwA3AwAgA0IANwOID0HCq9oAQRcQwBohPEHIABDSICIFQgA3AzggBUEAOgA0IAUgCTYCMCAFQgA3AyggBSA9NwMgIAVBGGogBCkDADcDACAFQRBqIAgpAwA3AwAgBUEIaiAHKQMANwMAIAUgAykDiA83AwAgBUFAa0EAOgAAIANBATYC5CYgAyAFNgLgJiADQQE2AtwmQRgQ0iAiBEIANwMIIAQgPDcDACADQfImakIANwEAIARBEGpCADcDACADQgA3AuwmIAMgBDYC6CYgA0EANgLYJiAQIANB2CZqEOYZCyALLQApBEAgDygCABCFBCEJQdmr2gBBBBDAGiE9IANBvMLfAEEBEMAaNwPYDyADQgA3A+APIANB4CZqIgQgA0HYD2oQihwgA0HAD2oiByAEKQMANwMAIANByA9qIgggA0HoJmopAwA3AwAgA0HQD2oiBCADQfAmaikDADcDACADQgA3A7gPQd2r2gBBExDAGiE8QcgAENIgIgVCADcDOCAFQQA6ADQgBSAJNgIwIAVCADcDKCAFID03AyAgBUEYaiAEKQMANwMAIAVBEGogCCkDADcDACAFQQhqIAcpAwA3AwAgBSADKQO4DzcDACAFQUBrQQA6AAAgA0EBNgLkJiADIAU2AuAmIANBATYC3CZBGBDSICIEQgA3AwggBCA8NwMAIANB8iZqQgA3AQAgBEEQakIANwMAIANCADcC7CYgAyAENgLoJiADQQA2AtgmIBAgA0HYJmoQ5hkLIAstACoEQCAPKAIAEIUEIQlB8KvaAEEREMAaIT0gA0G8wt8AQQEQwBo3A4gQIANCADcDkBAgA0HgJmoiBCADQYgQahCKHCADQfAPaiIHIAQpAwA3AwAgA0H4D2oiCCADQegmaikDADcDACADQYAQaiIEIANB8CZqKQMANwMAIANCADcD6A9BgazaAEEgEMAaITxByAAQ0iAiBUIANwM4IAVBADoANCAFIAk2AjAgBUIANwMoIAUgPTcDICAFQRhqIAQpAwA3AwAgBUEQaiAIKQMANwMAIAVBCGogBykDADcDACAFIAMpA+gPNwMAIAVBQGtBADoAACADQQE2AuQmIAMgBTYC4CYgA0EBNgLcJkEYENIgIgRCADcDCCAEIDw3AwAgA0HyJmpCADcBACAEQRBqQgA3AwAgA0IANwLsJiADIAQ2AugmIANBADYC2CYgECADQdgmahDmGQsgCy0AKwRAIA8oAgAQhQQhCUGhrNoAQQkQwBohPSADQbzC3wBBARDAGjcDuBAgA0IANwPAECADQeAmaiIEIANBuBBqEIocIANBoBBqIgcgBCkDADcDACADQagQaiIIIANB6CZqKQMANwMAIANBsBBqIgQgA0HwJmopAwA3AwAgA0IANwOYEEGqrNoAQRgQwBohPEHIABDSICIFQgA3AzggBUEAOgA0IAUgCTYCMCAFQgA3AyggBSA9NwMgIAVBGGogBCkDADcDACAFQRBqIAgpAwA3AwAgBUEIaiAHKQMANwMAIAUgAykDmBA3AwAgBUFAa0EAOgAAIANBATYC5CYgAyAFNgLgJiADQQE2AtwmQRgQ0iAiBEIANwMIIAQgPDcDACADQfImakIANwEAIARBEGpCADcDACADQgA3AuwmIAMgBDYC6CYgA0EANgLYJiAQIANB2CZqEOYZCyALLQAsBEAgDygCABCFBCEJQcKs2gBBDxDAGiE9IANBvMLfAEEBEMAaNwPoECADQgA3A/AQIANB4CZqIgQgA0HoEGoQihwgA0HQEGoiByAEKQMANwMAIANB2BBqIgggA0HoJmopAwA3AwAgA0HgEGoiBCADQfAmaikDADcDACADQgA3A8gQQdGs2gBBHhDAGiE8QcgAENIgIgVCADcDOCAFQQA6ADQgBSAJNgIwIAVCADcDKCAFID03AyAgBUEYaiAEKQMANwMAIAVBEGogCCkDADcDACAFQQhqIAcpAwA3AwAgBSADKQPIEDcDACAFQUBrQQA6AAAgA0EBNgLkJiADIAU2AuAmIANBATYC3CZBGBDSICIEQgA3AwggBCA8NwMAIANB8iZqQgA3AQAgBEEQakIANwMAIANCADcC7CYgAyAENgLoJiADQQA2AtgmIBAgA0HYJmoQ5hkLIAstAC0EQCAPKAIAEIUEIQlB76zaAEEcEMAaIT0gA0G8wt8AQQEQwBo3A5gRIANCADcDoBEgA0HgJmoiBCADQZgRahCKHCADQYARaiIHIAQpAwA3AwAgA0GIEWoiCCADQegmaikDADcDACADQZARaiIEIANB8CZqKQMANwMAIANCADcD+BBBi63aAEErEMAaITxByAAQ0iAiBUIANwM4IAVBADoANCAFIAk2AjAgBUIANwMoIAUgPTcDICAFQRhqIAQpAwA3AwAgBUEQaiAIKQMANwMAIAVBCGogBykDADcDACAFIAMpA/gQNwMAIAVBQGtBADoAACADQQE2AuQmIAMgBTYC4CYgA0EBNgLcJkEYENIgIgRCADcDCCAEIDw3AwAgA0HyJmpCADcBACAEQRBqQgA3AwAgA0IANwLsJiADIAQ2AugmIANBADYC2CYgECADQdgmahDmGQsgCy0ALgRAIA8oAgAQhQQhCUG2rdoAQRsQwBohPSADQbzC3wBBARDAGjcDyBEgA0IANwPQESADQeAmaiIEIANByBFqEIocIANBsBFqIgcgBCkDADcDACADQbgRaiIIIANB6CZqKQMANwMAIANBwBFqIgQgA0HwJmopAwA3AwAgA0IANwOoEUHRrdoAQSoQwBohPEHIABDSICIFQgA3AzggBUEAOgA0IAUgCTYCMCAFQgA3AyggBSA9NwMgIAVBGGogBCkDADcDACAFQRBqIAgpAwA3AwAgBUEIaiAHKQMANwMAIAUgAykDqBE3AwAgBUFAa0EAOgAAIANBATYC5CYgAyAFNgLgJiADQQE2AtwmQRgQ0iAiBEIANwMIIAQgPDcDACADQfImakIANwEAIARBEGpCADcDACADQgA3AuwmIAMgBDYC6CYgA0EANgLYJiAQIANB2CZqEOYZCyALLQAvBEAgDygCABCFBCEJQfut2gBBCxDAGiE9IANBvMLfAEEBEMAaNwP4ESADQgA3A4ASIANB4CZqIgQgA0H4EWoQihwgA0HgEWoiByAEKQMANwMAIANB6BFqIgggA0HoJmopAwA3AwAgA0HwEWoiBCADQfAmaikDADcDACADQgA3A9gRQYau2gBBGhDAGiE8QcgAENIgIgVCADcDOCAFQQA6ADQgBSAJNgIwIAVCADcDKCAFID03AyAgBUEYaiAEKQMANwMAIAVBEGogCCkDADcDACAFQQhqIAcpAwA3AwAgBSADKQPYETcDACAFQUBrQQA6AAAgA0EBNgLkJiADIAU2AuAmIANBATYC3CZBGBDSICIEQgA3AwggBCA8NwMAIANB8iZqQgA3AQAgBEEQakIANwMAIANCADcC7CYgAyAENgLoJiADQQA2AtgmIBAgA0HYJmoQ5hkLIAstADAEQCAPKAIAEIUEIQlBoK7aAEEYEMAaIT0gA0G8wt8AQQEQwBo3A6gSIANCADcDsBIgA0HgJmoiBCADQagSahCKHCADQZASaiIHIAQpAwA3AwAgA0GYEmoiCCADQegmaikDADcDACADQaASaiIEIANB8CZqKQMANwMAIANCADcDiBJBuK7aAEEnEMAaITxByAAQ0iAiBUIANwM4IAVBADoANCAFIAk2AjAgBUIANwMoIAUgPTcDICAFQRhqIAQpAwA3AwAgBUEQaiAIKQMANwMAIAVBCGogBykDADcDACAFIAMpA4gSNwMAIAVBQGtBADoAACADQQE2AuQmIAMgBTYC4CYgA0EBNgLcJkEYENIgIgRCADcDCCAEIDw3AwAgA0HyJmpCADcBACAEQRBqQgA3AwAgA0IANwLsJiADIAQ2AugmIANBADYC2CYgECADQdgmahDmGQsgCy0AMQRAIA8oAgAQhQQhCUHfrtoAQRkQwBohPSADQbzC3wBBARDAGjcD2BIgA0IANwPgEiADQeAmaiIEIANB2BJqEIocIANBwBJqIgcgBCkDADcDACADQcgSaiIIIANB6CZqKQMANwMAIANB0BJqIgQgA0HwJmopAwA3AwAgA0IANwO4EkH4rtoAQSgQwBohPEHIABDSICIFQgA3AzggBUEAOgA0IAUgCTYCMCAFQgA3AyggBSA9NwMgIAVBGGogBCkDADcDACAFQRBqIAgpAwA3AwAgBUEIaiAHKQMANwMAIAUgAykDuBI3AwAgBUFAa0EAOgAAIANBATYC5CYgAyAFNgLgJiADQQE2AtwmQRgQ0iAiBEIANwMIIAQgPDcDACADQfImakIANwEAIARBEGpCADcDACADQgA3AuwmIAMgBDYC6CYgA0EANgLYJiAQIANB2CZqEOYZCyALLQAyBEAgDygCABCFBCEJQaCv2gBBExDAGiE9IANBvMLfAEEBEMAaNwOIEyADQgA3A5ATIANB4CZqIgQgA0GIE2oQihwgA0HwEmoiByAEKQMANwMAIANB+BJqIgggA0HoJmopAwA3AwAgA0GAE2oiBCADQfAmaikDADcDACADQgA3A+gSQbOv2gBBIhDAGiE8QcgAENIgIgVCADcDOCAFQQA6ADQgBSAJNgIwIAVCADcDKCAFID03AyAgBUEYaiAEKQMANwMAIAVBEGogCCkDADcDACAFQQhqIAcpAwA3AwAgBSADKQPoEjcDACAFQUBrQQA6AAAgA0EBNgLkJiADIAU2AuAmIANBATYC3CZBGBDSICIEQgA3AwggBCA8NwMAIANB8iZqQgA3AQAgBEEQakIANwMAIANCADcC7CYgAyAENgLoJiADQQA2AtgmIBAgA0HYJmoQ5hkLIAstADMEQCAPKAIAEIUEIQlB1a/aAEESEMAaIT0gA0G8wt8AQQEQwBo3A7gTIANCADcDwBMgA0HgJmoiBCADQbgTahCKHCADQaATaiIHIAQpAwA3AwAgA0GoE2oiCCADQegmaikDADcDACADQbATaiIEIANB8CZqKQMANwMAIANCADcDmBNB56/aAEEhEMAaITxByAAQ0iAiBUIANwM4IAVBADoANCAFIAk2AjAgBUIANwMoIAUgPTcDICAFQRhqIAQpAwA3AwAgBUEQaiAIKQMANwMAIAVBCGogBykDADcDACAFIAMpA5gTNwMAIAVBQGtBADoAACADQQE2AuQmIAMgBTYC4CYgA0EBNgLcJkEYENIgIgRCADcDCCAEIDw3AwAgA0HyJmpCADcBACAEQRBqQgA3AwAgA0IANwLsJiADIAQ2AugmIANBADYC2CYgECADQdgmahDmGQsgCy0ANARAIA8oAgAQhQQhCUGIsNoAQRgQwBohPSADQbzC3wBBARDAGjcD6BMgA0IANwPwEyADQeAmaiIEIANB6BNqEIocIANB0BNqIgcgBCkDADcDACADQdgTaiIIIANB6CZqKQMA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IT0gA0G8wt8AQQEQwBo3A+gWIANCADcD8BYgA0HgJmoiBCADQegWahCKHCADQdAWaiIHIAQpAwA3AwAgA0HYFmoiCCADQegmaikDADcDACADQeAWaiIEIANB8CZqKQMANwMAIANCADcDyBZBxrPaAEEjEMAaITxByAAQ0iAiBUIANwM4IAVBADoANCAFIAk2AjAgBUIANwMoIAUgPTcDICAFQRhqIAQpAwA3AwAgBUEQaiAIKQMANwMAIAVBCGogBykDADcDACAFIAMpA8gWNwMAIAVBQGtBADoAACADQQE2AuQmIAMgBTYC4CYgA0EBNgLcJkEYENIgIgRCADcDCCAEIDw3AwAgA0HyJmpCADcBACAEQRBqQgA3AwAgA0IANwLsJiADIAQ2AugmIANBADYC2CYgECADQdgmahDmGQsgCy0APQRAIA8oAgAQhQQhCUHps9oAQRoQwBohPSADQbzC3wBBARDAGjcDmBcgA0IANwOgFyADQeAmaiIEIANBmBdqEIocIANBgBdqIgcgBCkDADcDACADQYgXaiIIIANB6CZqKQMANwMAIANBkBdqIgQgA0HwJmopAwA3AwAgA0IANwP4FkGDtNoAQSkQwBohPEHIABDSICIFQgA3AzggBUEAOgA0IAUgCTYCMCAFQgA3AyggBSA9NwMgIAVBGGogBCkDADcDACAFQRBqIAgpAwA3AwAgBUEIaiAHKQMANwMAIAUgAykD+BY3AwAgBUFAa0EAOgAAIANBATYC5CYgAyAFNgLgJiADQQE2AtwmQRgQ0iAiBEIANwMIIAQgPDcDACADQfImakIANwEAIARBEGpCADcDACADQgA3AuwmIAMgBDYC6CYgA0EANgLYJiAQIANB2CZqEOYZCyALLQA+BEAgDygCABCFBCEJQay02gBBIBDAGiE9IANBvMLfAEEBEMAaNwPIFyADQgA3A9AXIANB4CZqIgQgA0HIF2oQihwgA0GwF2oiByAEKQMANwMAIANBuBdqIgggA0HoJmopAwA3AwAgA0HAF2oiBCADQfAmaikDADcDACADQgA3A6gXQcy02gBBLxDAGiE8QcgAENIgIgVCADcDOCAFQQA6ADQgBSAJNgIwIAVCADcDKCAFID03AyAgBUEYaiAEKQMANwMAIAVBEGogCCkDADcDACAFQQhqIAcpAwA3AwAgBSADKQOoFzcDACAFQUBrQQA6AAAgA0EBNgLkJiADIAU2AuAmIANBATYC3CZBGBDSICIEQgA3AwggBCA8NwMAIANB8iZqQgA3AQAgBEEQakIANwMAIANCADcC7CYgAyAENgLoJiADQQA2AtgmIBAgA0HYJmoQ5hkLIAstAD8EQCAPKAIAEIUEIQlB+7TaAEEcEMAaIT0gA0G8wt8AQQEQwBo3A/gXIANCADcDgBggA0HgJmoiBCADQfgXahCKHCADQeAXaiIHIAQpAwA3AwAgA0HoF2oiCCADQegmaikDADcDACADQfAXaiIEIANB8CZqKQMANwMAIANCADcD2BdBl7XaAEErEMAaITxByAAQ0iAiBUIANwM4IAVBADoANCAFIAk2AjAgBUIANwMoIAUgPTcDICAFQRhqIAQpAwA3AwAgBUEQaiAIKQMANwMAIAVBCGogBykDADcDACAFIAMpA9gXNwMAIAVBQGtBADoAACADQQE2AuQmIAMgBTYC4CYgA0EBNgLcJkEYENIgIgRCADcDCCAEIDw3AwAgA0HyJmpCADcBACAEQRBqQgA3AwAgA0IANwLsJiADIAQ2AugmIANBADYC2CYgECADQdgmahDmGQsgCy0AQARAIA8oAgAQhQQhCUHCtdoAQRAQwBohPSADQbzC3wBBARDAGjcDqBggA0IANwOwGCADQeAmaiIEIANBqBhqEIocIANBkBhqIgcgBCkDADcDACADQZgYaiIIIANB6CZqKQMANwMAIANBoBhqIgQgA0HwJmopAwA3AwAgA0IANwOIGEHStdoAQR8QwBohPEHIABDSICIFQgA3AzggBUEAOgA0IAUgCTYCMCAFQgA3AyggBSA9NwMgIAVBGGogBCkDADcDACAFQRBqIAgpAwA3AwAgBUEIaiAHKQMANwMAIAUgAykDiBg3AwAgBUFAa0EAOgAAIANBATYC5CYgAyAFNgLgJiADQQE2AtwmQRgQ0iAiBEIANwMIIAQgPDcDACADQfImakIANwEAIARBEGpCADcDACADQgA3AuwmIAMgBDYC6CYgA0EANgLYJiAQIANB2CZqEOYZCyALLQBBBEAgDygCABCFBCEJQfG12gBBBBDAGiE9IANBvMLfAEEBEMAaNwPYGCADQgA3A+AYIANB4CZqIgQgA0HYGGoQihwgA0HAGGoiByAEKQMANwMAIANByBhqIgggA0HoJmopAwA3AwAgA0HQGGoiBCADQfAmaikDADcDACADQgA3A7gYQfW12gBBExDAGiE8QcgAENIgIgVCADcDOCAFQQA6ADQgBSAJNgIwIAVCADcDKCAFID03AyAgBUEYaiAEKQMANwMAIAVBEGogCCkDADcDACAFQQhqIAcpAwA3AwAgBSADKQO4GDcDACAFQUBrQQA6AAAgA0EBNgLkJiADIAU2AuAmIANBATYC3CZBGBDSICIEQgA3AwggBCA8NwMAIANB8iZqQgA3AQAgBEEQakIANwMAIANCADcC7CYgAyAENgLoJiADQQA2AtgmIBAgA0HYJmoQ5hkLIAstAEIEQCAPKAIAEIUEIQlBiLbaAEEREMAaIT0gA0G8wt8AQQEQwBo3A4gZIANCADcDkBkgA0HgJmoiBCADQYgZahCKHCADQfAYaiIHIAQpAwA3AwAgA0H4GGoiCCADQegmaikDADcDACADQYAZaiIEIANB8CZqKQMANwMAIANCADcD6BhBmbbaAEEgEMAaITxByAAQ0iAiBUIANwM4IAVBADoANCAFIAk2AjAgBUIANwMoIAUgPTcDICAFQRhqIAQpAwA3AwAgBUEQaiAIKQMANwMAIAVBCGogBykDADcDACAFIAMpA+gYNwMAIAVBQGtBADoAACADQQE2AuQmIAMgBTYC4CYgA0EBNgLcJkEYENIgIgRCADcDCCAEIDw3AwAgA0HyJmpCADcBACAEQRBqQgA3AwAgA0IANwLsJiADIAQ2AugmIANBADYC2CYgECADQdgmahDmGQsgCy0AQwRAIA8oAgAQhQQhCUG5ttoAQRoQwBohPSADQbzC3wBBARDAGjcDuBkgA0IANwPAGSADQeAmaiIEIANBuBlqEIocIANBoBlqIgcgBCkDADcDACADQagZaiIIIANB6CZqKQMANwMAIANBsBlqIgQgA0HwJmopAwA3AwAgA0IANwOYGUHTttoAQSkQwBohPEHIABDSICIFQgA3AzggBUEAOgA0IAUgCTYCMCAFQgA3AyggBSA9NwMgIAVBGGogBCkDADcDACAFQRBqIAgpAwA3AwAgBUEIaiAHKQMANwMAIAUgAykDmBk3AwAgBUFAa0EAOgAAIANBATYC5CYgAyAFNgLgJiADQQE2AtwmQRgQ0iAiBEIANwMIIAQgPDcDACADQfImakIANwEAIARBEGpCADcDACADQgA3AuwmIAMgBDYC6CYgA0EANgLYJiAQIANB2CZqEOYZCyALLQBEBEAgDygCABCFBCEJQfy22gBBEBDAGiE9IANBvMLfAEEBEMAaNwPoGSADQgA3A/AZIANB4CZqIgQgA0HoGWoQihwgA0HQGWoiByAEKQMANwMAIANB2BlqIgggA0HoJmopAwA3AwAgA0HgGWoiBCADQfAmaikDADcDACADQgA3A8gZQYy32gBBHxDAGiE8QcgAENIgIgVCADcDOCAFQQA6ADQgBSAJNgIwIAVCADcDKCAFID03AyAgBUEYaiAEKQMANwMAIAVBEGogCCkDADcDACAFQQhqIAcpAwA3AwAgBSADKQPIGTcDACAFQUBrQQA6AAAgA0EBNgLkJiADIAU2AuAmIANBATYC3CZBGBDSICIEQgA3AwggBCA8NwMAIANB8iZqQgA3AQAgBEEQakIANwMAIANCADcC7CYgAyAENgLoJiADQQA2AtgmIBAgA0HYJmoQ5hkLIAstAEUEQCAPKAIAEIUEIQlBq7faAEEWEMAaIT0gA0G8wt8AQQEQwBo3A5gaIANCADcDoBogA0HgJmoiBCADQZgaahCKHCADQYAaaiIHIAQpAwA3AwAgA0GIGmoiCCADQegmaikDADcDACADQZAaaiIEIANB8CZqKQMANwMAIANCADcD+BlBwbfaAEElEMAaITxByAAQ0iAiBUIANwM4IAVBADoANCAFIAk2AjAgBUIANwMoIAUgPTcDICAFQRhqIAQpAwA3AwAgBUEQaiAIKQMANwMAIAVBCGogBykDADcDACAFIAMpA/gZNwMAIAVBQGtBADoAACADQQE2AuQmIAMgBTYC4CYgA0EBNgLcJkEYENIgIgRCADcDCCAEIDw3AwAgA0HyJmpCADcBACAEQRBqQgA3AwAgA0IANwLsJiADIAQ2AugmIANBADYC2CYgECADQdgmahDmGQsgCy0ARgRAIA8oAgAQhQQhCUHmt9oAQRAQwBohPSADQbzC3wBBARDAGjcDyBogA0IANwPQGiADQeAmaiIEIANByBpqEIocIANBsBpqIgcgBCkDADcDACADQbgaaiIIIANB6CZqKQMANwMAIANBwBpqIgQgA0HwJmopAwA3AwAgA0IANwOoGkH2t9oAQR8QwBohPEHIABDSICIFQgA3AzggBUEAOgA0IAUgCTYCMCAFQgA3AyggBSA9NwMgIAVBGGogBCkDADcDACAFQRBqIAgpAwA3AwAgBUEIaiAHKQMANwMAIAUgAykDqBo3AwAgBUFAa0EAOgAAIANBATYC5CYgAyAFNgLgJiADQQE2AtwmQRgQ0iAiBEIANwMIIAQgPDcDACADQfImakIANwEAIARBEGpCADcDACADQgA3AuwmIAMgBDYC6CYgA0EANgLYJiAQIANB2CZqEOYZCyALLQBHBEAgDygCABCFBCEJQZW42gBBGBDAGiE9IANBvMLfAEEBEMAaNwP4GiADQgA3A4AbIANB4CZqIgQgA0H4GmoQihwgA0HgGmoiByAEKQMANwMAIANB6BpqIgggA0HoJmopAwA3AwAgA0HwGmoiBCADQfAmaikDADcDACADQgA3A9gaQa242gBBJxDAGiE8QcgAENIgIgVCADcDOCAFQQA6ADQgBSAJNgIwIAVCADcDKCAFID03AyAgBUEYaiAEKQMANwMAIAVBEGogCCkDADcDACAFQQhqIAcpAwA3AwAgBSADKQPYGjcDACAFQUBrQQA6AAAgA0EBNgLkJiADIAU2AuAmIANBATYC3CZBGBDSICIEQgA3AwggBCA8NwMAIANB8iZqQgA3AQAgBEEQakIANwMAIANCADcC7CYgAyAENgLoJiADQQA2AtgmIBAgA0HYJmoQ5hkLIAstAEgEQCAPKAIAEIUEIQlB1LjaAEEeEMAaIT0gA0G8wt8AQQEQwBo3A6gbIANCADcDsBsgA0HgJmoiBCADQagbahCKHCADQZAbaiIHIAQpAwA3AwAgA0GYG2oiCCADQegmaikDADcDACADQaAbaiIEIANB8CZqKQMANwMAIANCADcDiBtB8rjaAEEtEMAaITxByAAQ0iAiBUIANwM4IAVBADoANCAFIAk2AjAgBUIANwMoIAUgPTcDICAFQRhqIAQpAwA3AwAgBUEQaiAIKQMANwMAIAVBCGogBykDADcDACAFIAMpA4gbNwMAIAVBQGtBADoAACADQQE2AuQmIAMgBTYC4CYgA0EBNgLcJkEYENIgIgRCADcDCCAEIDw3AwAgA0HyJmpCADcBACAEQRBqQgA3AwAgA0IANwLsJiADIAQ2AugmIANBADYC2CYgECADQdgmahDmGQsgCy0ASQRAIA8oAgAQhQQhCUGfudoAQQYQwBohPSADQbzC3wBBARDAGjcD2BsgA0IANwPgGyADQeAmaiIEIANB2BtqEIocIANBwBtqIgcgBCkDADcDACADQcgbaiIIIANB6CZqKQMANwMAIANB0BtqIgQgA0HwJmopAwA3AwAgA0IANwO4G0GludoAQRUQwBohPEHIABDSICIFQgA3AzggBUEAOgA0IAUgCTYCMCAFQgA3AyggBSA9NwMgIAVBGGogBCkDADcDACAFQRBqIAgpAwA3AwAgBUEIaiAHKQMANwMAIAUgAykDuBs3AwAgBUFAa0EAOgAAIANBATYC5CYgAyAFNgLgJiADQQE2AtwmQRgQ0iAiBEIANwMIIAQgPDcDACADQfImakIANwEAIARBEGpCADcDACADQgA3AuwmIAMgBDYC6CYgA0EANgLYJiAQIANB2CZqEOYZCyALLQBKBEAgDygCABCFBCEJQbq52gBBCRDAGiE9IANBvMLfAEEBEMAaNwOIHCADQgA3A5AcIANB4CZqIgQgA0GIHGoQihwgA0HwG2oiByAEKQMANwMAIANB+BtqIgggA0HoJmopAwA3AwAgA0GAHGoiBCADQfAmaikDADcDACADQgA3A+gbQcO52gBBGBDAGiE8QcgAENIgIgVCADcDOCAFQQA6ADQgBSAJNgIwIAVCADcDKCAFID03AyAgBUEYaiAEKQMANwMAIAVBEGogCCkDADcDACAFQQhqIAcpAwA3AwAgBSADKQPoGzcDACAFQUBrQQA6AAAgA0EBNgLkJiADIAU2AuAmIANBATYC3CZBGBDSICIEQgA3AwggBCA8NwMAIANB8iZqQgA3AQAgBEEQakIANwMAIANCADcC7CYgAyAENgLoJiADQQA2AtgmIBAgA0HYJmoQ5hkLIAstAEsEQCAPKAIAEIUEIQlB27naAEEUEMAaIT0gA0G8wt8AQQEQwBo3A7gcIANCADcDwBwgA0HgJmoiBCADQbgcahCKHCADQaAcaiIHIAQpAwA3AwAgA0GoHGoiCCADQegmaikDADcDACADQbAcaiIEIANB8CZqKQMANwMAIANCADcDmBxB77naAEEjEMAaITxByAAQ0iAiBUIANwM4IAVBADoANCAFIAk2AjAgBUIANwMoIAUgPTcDICAFQRhqIAQpAwA3AwAgBUEQaiAIKQMANwMAIAVBCGogBykDADcDACAFIAMpA5gcNwMAIAVBQGtBADoAACADQQE2AuQmIAMgBTYC4CYgA0EBNgLcJkEYENIgIgRCADcDCCAEIDw3AwAgA0HyJmpCADcBACAEQRBqQgA3AwAgA0IANwLsJiADIAQ2AugmIANBADYC2CYgECADQdgmahDmGQsgCy0ATARAIA8oAgAQhQQhCUGSutoAQQ0QwBohPSADQbzC3wBBARDAGjcD6BwgA0IANwPwHCADQeAmaiIEIANB6BxqEIocIANB0BxqIgcgBCkDADcDACADQdgcaiIIIANB6CZqKQMANwMAIANB4BxqIgQgA0HwJmopAwA3AwAgA0IANwPIHEGfutoAQRwQwBohPEHIABDSICIFQgA3AzggBUEAOgA0IAUgCTYCMCAFQgA3AyggBSA9NwMgIAVBGGogBCkDADcDACAFQRBqIAgpAwA3AwAgBUEIaiAHKQMANwMAIAUgAykDyBw3AwAgBUFAa0EAOgAAIANBATYC5CYgAyAFNgLgJiADQQE2AtwmQRgQ0iAiBEIANwMIIAQgPDcDACADQfImakIANwEAIARBEGpCADcDACADQgA3AuwmIAMgBDYC6CYgA0EANgLYJiAQIANB2CZqEOYZCyALLQBNBEAgDygCABCFBCEJQbu62gBBEBDAGiE9IANBvMLfAEEBEMAaNwOYHSADQgA3A6AdIANB4CZqIgQgA0GYHWoQihwgA0GAHWoiByAEKQMANwMAIANBiB1qIgggA0HoJmopAwA3AwAgA0GQHWoiBCADQfAmaikDADcDACADQgA3A/gcQcu62gBBHxDAGiE8QcgAENIgIgVCADcDOCAFQQA6ADQgBSAJNgIwIAVCADcDKCAFID03AyAgBUEYaiAEKQMANwMAIAVBEGogCCkDADcDACAFQQhqIAcpAwA3AwAgBSADKQP4HDcDACAFQUBrQQA6AAAgA0EBNgLkJiADIAU2AuAmIANBATYC3CZBGBDSICIEQgA3AwggBCA8NwMAIANB8iZqQgA3AQAgBEEQakIANwMAIANCADcC7CYgAyAENgLoJiADQQA2AtgmIBAgA0HYJmoQ5hkLIAstAE4EQCAPKAIAEIUEIQlB6rraAEEHEMAaIT0gA0G8wt8AQQEQwBo3A8gdIANCADcD0B0gA0HgJmoiBCADQcgdahCKHCADQbAdaiIHIAQpAwA3AwAgA0G4HWoiCCADQegmaikDADcDACADQcAdaiIEIANB8CZqKQMANwMAIANCADcDqB1B8braAEEWEMAaITxByAAQ0iAiBUIANwM4IAVBADoANCAFIAk2AjAgBUIANwMoIAUgPTcDICAFQRhqIAQpAwA3AwAgBUEQaiAIKQMANwMAIAVBCGogBykDADcDACAFIAMpA6gdNwMAIAVBQGtBADoAACADQQE2AuQmIAMgBTYC4CYgA0EBNgLcJkEYENIgIgRCADcDCCAEIDw3AwAgA0HyJmpCADcBACAEQRBqQgA3AwAgA0IANwLsJiADIAQ2AugmIANBADYC2CYgECADQdgmahDmGQsgCy0ATwRAIA8oAgAQhQQhCUGHu9oAQQgQwBohPSADQbzC3wBBARDAGjcD+B0gA0IANwOAHiADQeAmaiIEIANB+B1qEIocIANB4B1qIgcgBCkDADcDACADQegdaiIIIANB6CZqKQMANwMAIANB8B1qIgQgA0HwJmopAwA3AwAgA0IANwPYHUGPu9oAQRcQwBohPEHIABDSICIFQgA3AzggBUEAOgA0IAUgCTYCMCAFQgA3AyggBSA9NwMgIAVBGGogBCkDADcDACAFQRBqIAgpAwA3AwAgBUEIaiAHKQMANwMAIAUgAykD2B03AwAgBUFAa0EAOgAAIANBATYC5CYgAyAFNgLgJiADQQE2AtwmQRgQ0iAiBEIANwMIIAQgPDcDACADQfImakIANwEAIARBEGpCADcDACADQgA3AuwmIAMgBDYC6CYgA0EANgLYJiAQIANB2CZqEOYZCyALLQBQBEAgDygCABCFBCEJQaa72gBBHhDAGiE9IANBvMLfAEEBEMAaNwOoHiADQgA3A7AeIANB4CZqIgQgA0GoHmoQihwgA0GQHmoiByAEKQMANwMAIANBmB5qIgggA0HoJmopAwA3AwAgA0GgHmoiBCADQfAmaikDADcDACADQgA3A4geQcS72gBBLRDAGiE8QcgAENIgIgVCADcDOCAFQQA6ADQgBSAJNgIwIAVCADcDKCAFID03AyAgBUEYaiAEKQMANwMAIAVBEGogCCkDADcDACAFQQhqIAcpAwA3AwAgBSADKQOIHjcDACAFQUBrQQA6AAAgA0EBNgLkJiADIAU2AuAmIANBATYC3CZBGBDSICIEQgA3AwggBCA8NwMAIANB8iZqQgA3AQAgBEEQakIANwMAIANCADcC7CYgAyAENgLoJiADQQA2AtgmIBAgA0HYJmoQ5hkLIAstAFEEQCAPKAIAEIUEIQlB8bvaAEEVEMAaIT0gA0G8wt8AQQEQwBo3A9geIANCADcD4B4gA0HgJmoiBCADQdgeahCKHCADQcAeaiIHIAQpAwA3AwAgA0HIHmoiCCADQegmaikDADcDACADQdAeaiIEIANB8CZqKQMANwMAIANCADcDuB5BhrzaAEEkEMAaITxByAAQ0iAiBUIANwM4IAVBADoANCAFIAk2AjAgBUIANwMoIAUgPTcDICAFQRhqIAQpAwA3AwAgBUEQaiAIKQMANwMAIAVBCGogBykDADcDACAFIAMpA7geNwMAIAVBQGtBADoAACADQQE2AuQmIAMgBTYC4CYgA0EBNgLcJkEYENIgIgRCADcDCCAEIDw3AwAgA0HyJmpCADcBACAEQRBqQgA3AwAgA0IANwLsJiADIAQ2AugmIANBADYC2CYgECADQdgmahDmGQsgCy0AUgRAIA8oAgAQhQQhCUGqvNoAQRIQwBohPSADQbzC3wBBARDAGjcDiB8gA0IANwOQHyADQeAmaiIEIANBiB9qEIocIANB8B5qIgcgBCkDADcDACADQfgeaiIIIANB6CZqKQMANwMAIANBgB9qIgQgA0HwJmopAwA3AwAgA0IANwPoHkG8vNoAQSEQwBohPEHIABDSICIFQgA3AzggBUEAOgA0IAUgCTYCMCAFQgA3AyggBSA9NwMgIAVBGGogBCkDADcDACAFQRBqIAgpAwA3AwAgBUEIaiAHKQMANwMAIAUgAykD6B43AwAgBUFAa0EAOgAAIANBATYC5CYgAyAFNgLgJiADQQE2AtwmQRgQ0iAiBEIANwMIIAQgPDcDACADQfImakIANwEAIARBEGpCADcDACADQgA3AuwmIAMgBDYC6CYgA0EANgLYJiAQIANB2CZqEOYZCyALLQBTBEAgDygCABCFBCEJQd282gBBERDAGiE9IANBvMLfAEEBEMAaNwO4HyADQgA3A8AfIANB4CZqIgQgA0G4H2oQihwgA0GgH2oiByAEKQMANwMAIANBqB9qIgggA0HoJmopAwA3AwAgA0GwH2oiBCADQfAmaikDADcDACADQgA3A5gfQe682gBBIBDAGiE8QcgAENIgIgVCADcDOCAFQQA6ADQgBSAJNgIwIAVCADcDKCAFID03AyAgBUEYaiAEKQMANwMAIAVBEGogCCkDADcDACAFQQhqIAcpAwA3AwAgBSADKQOYHzcDACAFQUBrQQA6AAAgA0EBNgLkJiADIAU2AuAmIANBATYC3CZBGBDSICIEQgA3AwggBCA8NwMAIANB8iZqQgA3AQAgBEEQakIANwMAIANCADcC7CYgAyAENgLoJiADQQA2AtgmIBAgA0HYJmoQ5hkLIAstAFQEQCAPKAIAEIUEIQlBjr3aAEEgEMAaIT0gA0G8wt8AQQEQwBo3A+gfIANCADcD8B8gA0HgJmoiBCADQegfahCKHCADQdAfaiIHIAQpAwA3AwAgA0HYH2oiCCADQegmaikDADcDACADQeAfaiIEIANB8CZqKQMANwMAIANCADcDyB9Brr3aAEEvEMAaITxByAAQ0iAiBUIANwM4IAVBADoANCAFIAk2AjAgBUIANwMoIAUgPTcDICAFQRhqIAQpAwA3AwAgBUEQaiAIKQMANwMAIAVBCGogBykDADcDACAFIAMpA8gfNwMAIAVBQGtBADoAACADQQE2AuQmIAMgBTYC4CYgA0EBNgLcJkEYENIgIgRCADcDCCAEIDw3AwAgA0HyJmpCADcBACAEQRBqQgA3AwAgA0IANwLsJiADIAQ2AugmIANBADYC2CYgECADQdgmahDmGQsgCy0AVQRAIA8oAgAQhQQhCUHdvdoAQScQwBohPSADQbzC3wBBARDAGjcDmCAgA0IANwOgICADQeAmaiIEIANBmCBqEIocIANBgCBqIgcgBCkDADcDACADQYggaiIIIANB6CZqKQMANwMAIANBkCBqIgQgA0HwJmopAwA3AwAgA0IANwP4H0GEvtoAQTYQwBohPEHIABDSICIFQgA3AzggBUEAOgA0IAUgCTYCMCAFQgA3AyggBSA9NwMgIAVBGGogBCkDADcDACAFQRBqIAgpAwA3AwAgBUEIaiAHKQMANwMAIAUgAykD+B83AwAgBUFAa0EAOgAAIANBATYC5CYgAyAFNgLgJiADQQE2AtwmQRgQ0iAiBEIANwMIIAQgPDcDACADQfImakIANwEAIARBEGpCADcDACADQgA3AuwmIAMgBDYC6CYgA0EANgLYJiAQIANB2CZqEOYZCyALLQBWBEAgDygCABCFBCEJQbq+2gBBIBDAGiE9IANBvMLfAEEBEMAaNwPIICADQgA3A9AgIANB4CZqIgQgA0HIIGoQihwgA0GwIGoiByAEKQMANwMAIANBuCBqIgggA0HoJmopAwA3AwAgA0HAIGoiBCADQfAmaikDADcDACADQgA3A6ggQdq+2gBBLxDAGiE8QcgAENIgIgVCADcDOCAFQQA6ADQgBSAJNgIwIAVCADcDKCAFID03AyAgBUEYaiAEKQMANwMAIAVBEGogCCkDADcDACAFQQhqIAcpAwA3AwAgBSADKQOoIDcDACAFQUBrQQA6AAAgA0EBNgLkJiADIAU2AuAmIANBATYC3CZBGBDSICIEQgA3AwggBCA8NwMAIANB8iZqQgA3AQAgBEEQakIANwMAIANCADcC7CYgAyAENgLoJiADQQA2AtgmIBAgA0HYJmoQ5hkLIAstAFcEQCAPKAIAEIUEIQhBib/aAEEiEMAaIT0gA0G8wt8AQQEQwBo3A/ggIANCADcDgCEgA0HgIGoiBCADQfggahCKHCADQgA3A9ggQau/2gBBMRDAGiE8QcgAENIgIgdCADcDOCAHQQA6ADQgByAINgIwIAdCADcDKCAHID03AyAgB0EYaiADQfAgaikDADcDACAHQRBqIANB6CBqKQMANwMAIAdBCGogBCkDADcDACAHIAMpA9ggNwMAIAdBQGtBADoAACADQQE2AuQmIAMgBzYC4CYgA0EBNgLcJkEYENIgIgRCADcDCCAEIDw3AwAgA0HyJmpCADcBACAEQRBqQgA3AwAgA0IANwLsJiADIAQ2AugmIANBADYC2CYgECADQdgmahDmGQsgCy0AWARAIA8oAgAQhQQhCEHcv9oAQRwQwBohPSADQbzC3wBBARDAGjcDqCEgA0IANwOwISADQZAhaiIEIANBqCFqEIocIANCADcDiCFB+L/aAEErEMAaITxByAAQ0iAiB0IANwM4IAdBADoANCAHIAg2AjAgB0IANwMoIAcgPTcDICAHQRhqIANBoCFqKQMANwMAIAdBEGogA0GYIWopAwA3AwAgB0EIaiAEKQMANwMAIAcgAykDiCE3AwAgB0FAa0EAOgAAIANBATYC5CYgAyAHNgLgJiADQQE2AtwmQRgQ0iAiBEIANwMIIAQgPDcDACADQfImakIANwEAIARBEGpCADcDACADQgA3AuwmIAMgBDYC6CYgA0EANgLYJiAQIANB2CZqEOYZCyALLQBZBEAgDygCABCFBCEIQaPA2gBBDRDAGiE9IANBvMLfAEEBEMAaNwPYISADQgA3A+AhIANBwCFqIgQgA0HYIWoQihwgA0IANwO4IUGwwNoAQRwQwBohPEHIABDSICIHQgA3AzggB0EAOgA0IAcgCDYCMCAHQgA3AyggByA9NwMgIAdBGGogA0HQIWopAwA3AwAgB0EQaiADQcghaikDADcDACAHQQhqIAQpAwA3AwAgByADKQO4ITcDACAHQUBrQQA6AAAgA0EBNgLkJiADIAc2AuAmIANBATYC3CZBGBDSICIEQgA3AwggBCA8NwMAIANB8iZqQgA3AQAgBEEQakIANwMAIANCADcC7CYgAyAENgLoJiADQQA2AtgmIBAgA0HYJmoQ5hkLIAstAFoEQCAPKAIAEIUEIQhBzMDaAEEkEMAaIT0gA0G8wt8AQQEQwBo3A4giIANCADcDkCIgA0HwIWoiBCADQYgiahCKHCADQgA3A+ghQfDA2gBBMxDAGiE8QcgAENIgIgdCADcDOCAHQQA6ADQgByAINgIwIAdCADcDKCAHID03AyAgB0EYaiADQYAiaikDADcDACAHQRBqIANB+CFqKQMANwMAIAdBCGogBCkDADcDACAHIAMpA+ghNwMAIAdBQGtBADoAACADQQE2AuQmIAMgBzYC4CYgA0EBNgLcJkEYENIgIgRCADcDCCAEIDw3AwAgA0HyJmpCADcBACAEQRBqQgA3AwAgA0IANwLsJiADIAQ2AugmIANBADYC2CYgECADQdgmahDmGQsgCy0AWwRAIA8oAgAQhQQhCEGjwdoAQQwQwBohPSADQbzC3wBBARDAGjcDuCIgA0IANwPAIiADQaAiaiIEIANBuCJqEIocIANCADcDmCJBr8HaAEEbEMAaITxByAAQ0iAiB0IANwM4IAdBADoANCAHIAg2AjAgB0IANwMoIAcgPTcDICAHQRhqIANBsCJqKQMANwMAIAdBEGogA0GoImopAwA3AwAgB0EIaiAEKQMANwMAIAcgAykDmCI3AwAgB0FAa0EAOgAAIANBATYC5CYgAyAHNgLgJiADQQE2AtwmQRgQ0iAiBEIANwMIIAQgPDcDACADQfImakIANwEAIARBEGpCADcDACADQgA3AuwmIAMgBDYC6CYgA0EANgLYJiAQIANB2CZqEOYZCyALLQBcBEAgDygCABCFBCEIQcrB2gBBDRDAGiE9IANBvMLfAEEBEMAaNwPoIiADQgA3A/AiIANB0CJqIgQgA0HoImoQihwgA0IANwPIIkHXwdoAQRwQwBohPEHIABDSICIHQgA3AzggB0EAOgA0IAcgCDYCMCAHQgA3AyggByA9NwMgIAdBGGogA0HgImopAwA3AwAgB0EQaiADQdgiaikDADcDACAHQQhqIAQpAwA3AwAgByADKQPIIjcDACAHQUBrQQA6AAAgA0EBNgLkJiADIAc2AuAmIANBATYC3CZBGBDSICIEQgA3AwggBCA8NwMAIANB8iZqQgA3AQAgBEEQakIANwMAIANCADcC7CYgAyAENgLoJiADQQA2AtgmIBAgA0HYJmoQ5hkLIAstAF0EQCAPKAIAEIUEIQhB88HaAEEMEMAaIT0gA0G8wt8AQQEQwBo3A5gjIANCADcDoCMgA0GAI2oiBCADQZgjahCKHCADQgA3A/giQf/B2gBBGxDAGiE8QcgAENIgIgdCADcDOCAHQQA6ADQgByAINgIwIAdCADcDKCAHID03AyAgB0EYaiADQZAjaikDADcDACAHQRBqIANBiCNqKQMANwMAIAdBCGogBCkDADcDACAHIAMpA/giNwMAIAdBQGtBADoAACADQQE2AuQmIAMgBzYC4CYgA0EBNgLcJkEYENIgIgRCADcDCCAEIDw3AwAgA0HyJmpCADcBACAEQRBqQgA3AwAgA0IANwLsJiADIAQ2AugmIANBADYC2CYgECADQdgmahDmGQsgCy0AXgRAIA8oAgAQhQQhCEGawtoAQQkQwBohPSADQbzC3wBBARDAGjcDyCMgA0IANwPQIyADQbAjaiIEIANByCNqEIocIANCADcDqCNBo8LaAEEYEMAaITxByAAQ0iAiB0IANwM4IAdBADoANCAHIAg2AjAgB0IANwMoIAcgPTcDICAHQRhqIANBwCNqKQMANwMAIAdBEGogA0G4I2opAwA3AwAgB0EIaiAEKQMANwMAIAcgAykDqCM3AwAgB0FAa0EAOgAAIANBATYC5CYgAyAHNgLgJiADQQE2AtwmQRgQ0iAiBEIANwMIIAQgPDcDACADQfImakIANwEAIARBEGpCADcDACADQgA3AuwmIAMgBDYC6CYgA0EANgLYJiAQIANB2CZqEOYZCyALLQBfBEAgDygCABCFBCEIQbvC2gBBChDAGiE9IANBvMLfAEEBEMAaNwP4IyADQgA3A4AkIANB4CNqIgQgA0H4I2oQihwgA0IANwPYI0HFwtoAQRkQwBohPEHIABDSICIHQgA3AzggB0EAOgA0IAcgCDYCMCAHQgA3AyggByA9NwMgIAdBGGogA0HwI2opAwA3AwAgB0EQaiADQegjaikDADcDACAHQQhqIAQpAwA3AwAgByADKQPYIzcDACAHQUBrQQA6AAAgA0EBNgLkJiADIAc2AuAmIANBATYC3CZBGBDSICIEQgA3AwggBCA8NwMAIANB8iZqQgA3AQAgBEEQakIANwMAIANCADcC7CYgAyAENgLoJiADQQA2AtgmIBAgA0HYJmoQ5hkLIAstAGAEQCAPKAIAEIUEIQhB3sLaAEEbEMAaIT0gA0G8wt8AQQEQwBo3A6gkIANCADcDsCQgA0GQJGoiBCADQagkahCKHCADQgA3A4gkQfnC2gBBKhDAGiE8QcgAENIgIgdCADcDOCAHQQA6ADQgByAINgIwIAdCADcDKCAHID03AyAgB0EYaiADQaAkaikDADcDACAHQRBqIANBmCRqKQMANwMAIAdBCGogBCkDADcDACAHIAMpA4gkNwMAIAdBQGtBADoAACADQQE2AuQmIAMgBzYC4CYgA0EBNgLcJkEYENIgIgRCADcDCCAEIDw3AwAgA0HyJmpCADcBACAEQRBqQgA3AwAgA0IANwLsJiADIAQ2AugmIANBADYC2CYgECADQdgmahDmGQsgCy0AYQRAIA8oAgAQhQQhCEGjw9oAQRUQwBohPSADQbzC3wBBARDAGjcD2CQgA0IANwPgJCADQcAkaiIEIANB2CRqEIocIANCADcDuCRBuMPaAEEkEMAaITxByAAQ0iAiB0IANwM4IAdBADoANCAHIAg2AjAgB0IANwMoIAcgPTcDICAHQRhqIANB0CRqKQMANwMAIAdBEGogA0HIJGopAwA3AwAgB0EIaiAEKQMANwMAIAcgAykDuCQ3AwAgB0FAa0EAOgAAIANBATYC5CYgAyAHNgLgJiADQQE2AtwmQRgQ0iAiBEIANwMIIAQgPDcDACADQfImakIANwEAIARBEGpCADcDACADQgA3AuwmIAMgBDYC6CYgA0EANgLYJiAQIANB2CZqEOYZCyALLQBiBEAgDygCABCFBCEIQdzD2gBBEhDAGiE9IANBvMLfAEEBEMAaNwOIJSADQgA3A5AlIANB8CRqIgQgA0GIJWoQihwgA0IANwPoJEHuw9oAQSEQwBohPEHIABDSICIHQgA3AzggB0EAOgA0IAcgCDYCMCAHQgA3AyggByA9NwMgIAdBGGogA0GAJWopAwA3AwAgB0EQaiADQfgkaikDADcDACAHQQhqIAQpAwA3AwAgByADKQPoJDcDACAHQUBrQQA6AAAgA0EBNgLkJiADIAc2AuAmIANBATYC3CZBGBDSICIEQgA3AwggBCA8NwMAIANB8iZqQgA3AQAgBEEQakIANwMAIANCADcC7CYgAyAENgLoJiADQQA2AtgmIBAgA0HYJmoQ5hkLIAstAGMEQCAPKAIAEIUEIQhBj8TaAEEJEMAaIT0gA0G8wt8AQQEQwBo3A7glIANCADcDwCUgA0GgJWoiBCADQbglahCKHCADQgA3A5glQZjE2gBBGBDAGiE8QcgAENIgIgdCADcDOCAHQQA6ADQgByAINgIwIAdCADcDKCAHID03AyAgB0EYaiADQbAlaikDADcDACAHQRBqIANBqCVqKQMANwMAIAdBCGogBCkDADcDACAHIAMpA5glNwMAIAdBQGtBADoAACADQQE2AuQmIAMgBzYC4CYgA0EBNgLcJkEYENIgIgRCADcDCCAEIDw3AwAgA0HyJmpCADcBACAEQRBqQgA3AwAgA0IANwLsJiADIAQ2AugmIANBADYC2CYgECADQdgmahDmGQsgCy0AZARAIA8oAgAQhQQhCEGwxNoAQQgQwBohPSADQbzC3wBBARDAGjcD6CUgA0IANwPwJSADQdAlaiIEIANB6CVqEIocIANCADcDyCVBuMTaAEEXEMAaITxByAAQ0iAiB0IANwM4IAdBADoANCAHIAg2AjAgB0IANwMoIAcgPTcDICAHQRhqIANB4CVqKQMANwMAIAdBEGogA0HYJWopAwA3AwAgB0EIaiAEKQMANwMAIAcgAykDyCU3AwAgB0FAa0EAOgAAIANBATYC5CYgAyAHNgLgJiADQQE2AtwmQRgQ0iAiBEIANwMIIAQgPDcDACADQfImakIANwEAIARBEGpCADcDACADQgA3Auwm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QYi8xAAQwikACyAEQbgBaiAEKQBvNwAAIAQgBToAsAEgBCAEKQNoNwCxASAEQYgBaiIFIAMoAgAiARCSDCAEKAKIAUEQRg0CIARBgAFqIARBoAFqKAIANgIAIARB+ABqIARBmAFqKQIANwMAIARB8ABqIARBkAFqKQIANwMAIAQgBCkCiAE3A2ggBEHAAWoiAiAEQegAahDtDyACIARBsAFqEPkXIARBlAFqIARByAFqKQIANwIAIAQgBCkCwAE3AowBIARBCTYCiAEgASAFEJEYIAQoArABIAQoArQBENEpC0GAgICAeCEBCyAAIAE2AgAgBEHQAWokAA8LQei7xAAQwikAC9EtAht/AX4jAEGAAmsiAiQAIAJBKGogACAAKAIAKAIEEQAAIAIgAigCLCIDNgI0IAIgAigCKCIENgIwAkACQAJAAkACQAJAIAEtABxBBHFFBEBBASEJIAJBATYCtAEgAkHI7+AANgKwASACQgE3ArwBIAJBPTYCWCACIAJB1ABqNgK4ASACIAJBMGo2AlQgASgCFCABKAIYIAJBsAFqEJskDQIgAkEgaiAEIAMoAhgRAAAgAigCICIFRQ0BIAIoAiQhAyACQQA2AsABIAJBATYCtAEgAkHovsAANgKwASACQgQ3ArgBIAEoAhQgASgCGCACQbABahCbJA0CIAJBGGogBSADKAIYEQAAIAIoAhggAkEANgJkIAIgAzYCXCACIAU2AlggAkEANgJUQQBHIQZBACEJIAICfwJAA0AgBUUEQCACIAk2AmQgAiADNgJcIAJBADYCWCACQdQAahDXIAwFCyACQRBqIAUgAygCGBEAACACKAIUIQggAigCECEEIAIgAzYC9AEgAiAFNgLwASACQQA2AsABIAJBATYCtAEgAkH4x98ANgKwASACQgQ3ArgBIAEoAhQgASgCGCACQbABaiIDEJskRQRAIAJBADoAlAEgAiAJNgKMASACIAY2AogBIAIgATYCkAEgAkEBNgK0ASACQcjv4AA2ArABIAJCATcCvAEgAkE9NgJ8IAIgAkH4AGo2ArgBIAIgAkHwAWo2AnggAkGIAWogAxCqJA0CIAlBAWohCSAIIQMgBCEFDAELCyAJQQFqDAELIAlBAWoLNgJkIAIgCDYCXCACIAQ2AlggAkHUAGoQ1yBBASEJDAILIAQgASADKAIMEQIA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gICAeDYCkAEgACABNgIADAMLIAMtAMwCQQRHDQFBAQshBSABQcwCaiENIANByAJqEL4KIANBADoATCADIAU6AFcgAyABLQC2AjoASyADIAEpAaoCNwA/IAMgAUGyAmoiBSgBADYARyADIAEpA7gCNwBNIAMgAS8BwAI7AFUgAyABKADDAjYAWCADQfUAaiABQb8CaikAADcAACADQfAAaiABQboCaikBADcCACADQegAaiAFKQEANwIAIAMgASkBqgI3AmAgCCADQT9qEMcIIAMgATYCXAJAAkACQCAIEMgNIgUEQCAFKAIAQSJGDQELIANBADoAqQIgAyABLQC2AjoAqAIgAyABLQDGAjoAuAIgAyABKQGqAjcAnAIgAyABKAGyAjYApAIgAyABKQO4AjcAqgIgAyABKALAAjYAsgIgAyABLwHEAjsAtgIgA0GxBWogAUGqAmoiBUEVaikAADcAACADQawFaiAFQRBqKQEANwIAIANBpAVqIAVBCGopAQA3AgAgAyAFKQEANwKcBSAIIANBnAJqEMcIIAMgATYCmAUgA0HIAmoiCiABEKsDIAMoAsgCIQ4CQCADLQD0AiIFQQZHBEAgA0HgAWoiE0EEciAKQQRyQSgQ9gYaIANBjwJqIANB9wJqLQAAOgAAIAMgAy8A9QI7AI0CIAMgBToAjAIgAyAONgLgASADQZgFahD1JCACIQ4jAEGQCWsiBCQAIAFBKGohCQJAIAEtAKACQQJHDQAgCRDIDSICRQ0AIAIoAgBBFEcNACACLQAEQQRHDQAgAS0AoAJBAkcNACABLQCqAiEFIARBkAFqIgIgARCcAyAEQQE6APsHIAQgASkAqwI3APwHIAQgASkAswI3AIQIIAQgASkAuwI3AIwIIAQgASgAwwI2AJQIIARBuAFqIARB+wdqEMcIIARBKGogAhDuASAEIAQoAiwiHDYC/AggBCAEKAIoIg82AvgIIA8EQCAEQfgIahD1HyACEM8QQQAhHAwBCyAEQbAEaiICIARBkAFqQaADEPYGGiABEM8QIAEgAkGgAxD2BiECIAQgBToAsAggBCACKQCrAjcAsQggBCACKQCzAjcAuQggBCACKQC7AjcAwQggBCACKADDAjYAyQggCSAEQbAIahDHCAsgBEKAgICAgAE3AjQgAUGqAmohHyABQcwCaiEPIARB3Ahq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CGopAgA3AwAgAyAHKQIANwPoBUEEDAILIAEoAsgCIQIgAUElNgLIAiABIAEpA+ACNwOYAyADQdQCaiANQQhqKQIANwIAIANB3AJqIA1BEGooAgA2AgAgAyANKQIANwLMAiADIAI2AsgCIANByAJqIgIQvgogCBDIDSIFRQRAIAEoAoACIQEgA0EAOgDIAiABIAEgAhDwFCEFDA4LIAUoAgBBJEYEQCABIAEpA+ACNwOYAyABKALIAiABQSU2AsgCQSRGDQ1B2eTgAEEoQZj53wAQ4RcACyAIEMgNIgJFDQggAigCAEEkRgRAIAEgASkD4AI3A5gDIAEoAsgCIAFBJTYCyAJBJEYNDUHZ5OAAQShBqPnfABDhFwALIAEoAsgCIQIgAUElNgLIAiABIAEpA+ACNwOYAyADQdQCaiANQQhqKQIANwIAIANB3AJqIA1BEGooAgA2AgAgAyANKQIANwLMAiADIAI2AsgCIANByAJqEL4KAkAgCBDIDSICBEAgAigCAEEiRg0BCyADQcgCaiICIAEQqwMgAygCyAIhBSADLQD0AiIGQQZGDQ4gA0HoBWpBBHIgAkEEckEoEPYGGiADQZcGaiADQfcCai0AADoAACADIAMvAPUCOwCVBiADIAY6AJQGIAMgBTYC6AUgCBDIDSICBEAgAigCAEEiRg0FCyADQdACaiAIEIQQIANBMGogCBDwEyADQbD73wA2AswCIANBNDoAyAIgAygCMCADKAI0IANByAJqEPAUIQUgCBDIDSICRQ0IIAIoAgBBJEcNCCABIAEpA+ACNwOYAyABKALIAiABQSU2AsgCQSRHDQUgASABKALMAhD7CwwICyABKALIAiECIAFBJTYCyAIgASABKQPgAjcDmAMgA0HUAmogDUEIaikCADcCACADQdwCaiANQRBqKAIANgIAIAMgDSkCADcCzAIgAyACNgLIAiADQcgCahC+CiALIAEoApwDIgIgAiALSxshFiALIAIgAiALSRshCkEGIQYMBgtBoAFBCBCRICIGIAU2AgAgBiAHKQIANwIEIAZBDGogB0EIaikCADcCACAGQRRqIAdBEGopAgA3AgAgBkEcaiAHQRhqKQIANwIAIAZBJGogFkHsABD2BhogBiALNgKQASAGIBopAgA3ApQBIAZBnAFqIBpBCGooAgA2AgAgBiEFQQMLIQYg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AlggAyAHNgJUIAMgAjYCUCADIANBM2o2AmAgAyADQTRqNgJcIANB0ABqENgLIgJFBEAgA0EANgLcASADQoCAgIDAADcC1AEgA0HUAWohAgwJCyADQQRBBEEEEOwUIAMoAgAhBSADKAIEIgQgAjYCACADQQE2AtwBIAMgBDYC2AEgAyAFNgLUASADQaABaiADQeAAaigCADYCACADQZgBaiADQdgAaikCADcDACADIAMpAlA3A5ABQQQhBUEBIQgDQCADIANBkAFqENgLIgI2AjggAgRAIAMoAtQBIAhGBEAgA0HUAWpBARD3HiADKALYASEECyAEIAVqIAI2AgAgAyAIQQFqIgg2AtwBIAVBBGohBQwBCwsgA0E4ahCiJyADKALcAUEBRg0GIANB1AFqIQIMCAsDQCACIAdGBEAgAygCTEEBRwRAIANBxABqIQIMCgsgA0EANgJMIANBkAFqIgAgAygCSCgCACICQcAAEPYGGiABEKkDIAEgAEHAABD2BhogA0HEAGoMCAUgBkEBaiEGIAJBBGoCQAJAAkAgAigCACIFKAIAQRlHBEAgAhC4IyECIAYgCkYNASADQcQAaiACIANBM2oQ2wQQyw4MAwsgBSgCDCENIAVBADYCDCAFKAIEIQggBSgCCCECIAVCgICAgMAANwIEIAIgDUECdCIFaiEMIAYgCkcEQCADIAw2ApwBIAMgCDYCmAEgAyACNgKUASADIAI2ApABIAMgA0EzajYCoAEDQCACIAxGDQMgAigCACACQQRqIQIgA0EzahDbBCIIRQ0AIAMoAkwiBSADKAJERgRAIANBxABqQQEQ9x4LIAMoAkggBUECdGogCDYCACADIAVBAWo2AkwMAAsACyADIAw2ApwBIAMgCDYCmAEgAyACNgKQASANQQFrIQggDUH/////A3EhCQNAIAUEQCACKAIAIQ0CQCAIBEAgA0HEAGogDSADQTNqENsEEMsODAELIANBxABqIA0QuRsLIAJBBGohAiAFQQRrIQUgCEEBayEIDAEFIAMgCTYCoAEgAyAMNgKUASADQZABahDRFwwECwALAAsgA0HEAGogAhC5GwwBCyADQQA2AlAgAyAMNgKUASADQdAAahCiJyADQQA2AjggA0E4ahCiJyADQZABahDRFwshAgwBCwALAAsgBCADKAKYARDEKQALIAEoAigiASgCAEEbRg0GDAgLIAJBGUYNAQsgAkEMayIFQSVLIAVBB0ZyDQAgAkEPRw0GAkAgEEEBaw4DAAcHAQsgEUEBcQ0FCyAAIAQQyQEMBQsgA0EANgLcASADQZABaiIAIAMoAtgBKAIAIgJBwAAQ9gYaIAEQqQMgASAAQcAAEPYGGiADQdQBagsgAhD1KhDSJgwDCyADQThqIQpBACEGIwBBIGsiBSQAIAUgAigCCCIENgIAAkAgBEECTQRAIAogAikCADcCACAKQQhqIAJBCGooAgA2AgAMAQsgAigCACEMIAIoAgQhAkEAIQggBUEANgIUIAUgAiAEQQJ0IgdqIgk2AhAgBSAMNgIMIAUgAjYCBCAFIAU2AhggAiEEA0ACQAJAIAcgCEcEQCAFIAIgCGooAgAiDTYCHAJAAkACQAJAIA0oAgAiC0Ebaw4EAgMDAQALIAtBD0cNAiAFKAIYKAIAIAZBAWpHDQQMAgsgBSgCGCgCACAGQQFqRg0BDAMLIAUoAhgoAgAgBkEBakcNAgsgBCANNgIAIARBBGohBCAFKAIUIQYMAgsgBSAJNgIIIAVBBGoiBhCREiAKIAQgAmtBAnY2AgggCiACNgIEIAogDDYCACAGENEXDAMLIAVBHGoQjgILIAUgBkEBaiIGNgIUIAhBBGohCAwACwALIAVBIGokAAJAIAAtACQgAC0AJUEAIAMQlRpFDQAgAygCQEUNACADKAI8KAIAIgIoAgBBF0cNACACLQAYQQVHDQAgAigCECICKAIAQQ9HDQAgACACEMkBIAAtACQhEAsgA0HcAGogA0FAaygCADYCACADIAMpAjg3AlQgA0EZNgJQIAMgASkDEDcDYCAQQQJGBEAgACADQdAAahDJAQsgA0GQAWoiACADQdAAakHAABD2BhogARCpAyABIABBwAAQ9gYaDAILIAEoAghBA0cNASABKwMYIiQgJGJEAAAAAAAA8D8gJKZEAAAAAAAA8L9icg0BIAAgARDJAQwBCyAAIAEQyQELIANB4AFqJAAPCyADQQhqIAAgAkEBEMUJIAMoAggiAkGBgICAeEYNACACIAMoAgwQxCkACyAAKAIAIQUgACgCCCECCyACIAVGBEAgABD0FgsgACACQQFqNgIIIAAoAgQgAkEUbGoiAiAYNgIQIAIgFzYCDCACIBY2AgggAiAVNgIEIAIgFDYCAAwACwAL1SoCF38BfiMAQYADayIDJAACQCABQShqIgQQ5Q0iBkUEQCABKALYAiEBIANBADoAkAEgASABIANBkAFqEPAUIQEgAEEHNgIAIAAgATYCBAwBCwJAAkACQAJAAkACQAJAAkACQAJAAkACQCAGKAIAIgZBC2sOAwEJAgALIAZBAkcEQCAGQSRHDQkgASABKQNANwN4IAEoAiggAUElNgIoQSRHDQggASgCLCEBIABBBzYCACAAIAE2AgQMDAsgA0HIAWogASACEJcEIAACfyADLQDcAUECRwRAIANBrAFqIANB4AFqKQMANwIAIANBpAFqIANB2AFqKQMANwIAIANBnAFqIANB0AFqKQMANwIAIAMgAykDyAE3ApQBIABBBGogA0GQAWpBJBD2BhpBAAwBCyAAIAMoAsgBNgIEQQcLNgIADAsLIAQQxCAhDCAEEOUNIgJFBEAgASgC2AIhASADQQA6AJABIAEgASADQZABahDwFCEBIABBBzYCACAAIAE2AgQMCwsgAigCAEEkRgRAIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRw0GIAEoAiwhASAAQQc2AgAgACABNgIEDAsLIAEoAighAiABQSU2AiggASABKQNANwN4IANBnAFqIAFBNGopAgA3AgAgA0GkAWogAUE8aigCADYCACADIAEpAiw3ApQBIAMgAjYCkAEgA0GQAWoiAhC/CiADQQA2AmggA0KAgICAgAE3AmAgAUEsaiEGIAJBBHIhCSADQdABaiEOIANBmAFqIQpBACECAkADQCACIA1yRSACQf7/e0tyIQhBACEFAkACfwJAAkACQANAIAQQ5Q0iC0UNASADQQA2AuACIAMgCzYC5AIgA0HgAmoQgiQgBBDlDSILBEAgCygCAEEMRg0DCyAIRQRAIANBOzoAkAEgASACIA0gA0GQAWoQwhkLAkAgBBDlDSILRQ0AIAsoAgBBEEcNACAJIAYpAgA3AgAgASgCKCELIAFBJTYCKCABIAEpA0A3A3ggCUEIaiAGQQhqKQIANwIAIAlBEGogBkEQaigCADYCACADIAs2ApABIAVBAWohBSADQZABahC/CgwBCwsgBQRAIAMgBTYCuAEgA0EHNgKQASADQeAAaiADQZABahCDCQsgBBDEICEFIAQQ5Q0iCARAIAgoAgBBB0YNAwsgA0GQAWogARDlBCADKAKUASEFIAMoApABIghBB0YNCyAOIAopAwA3AwAgDkEYaiAKQRhqKQMANwMAIA5BEGogCkEQaikDADcDACAOQQhqIApBCGopAwA3AwAgAyAFNgLMASADIAg2AsgBIANB4ABqIANByAFqEOkZQQAMAwsgASgC2AIhAiADQQA6AJABIAMgAiACIANBkAFqEPAUNgLkAiADQQE2AuACIANB4AJqEIIkCyAEEOUNIgJFDQIgAigCAEEMRw0CIAEoAighAiABQSU2AiggASABKQNANwN4IANBnAFqIAZBCGopAgA3AgAgA0GkAWogBkEQaigCADYCACADIAYpAgA3ApQBIAMgAjYCkAEgA0GQAWoQvwogAS0A+AJBAkYEQCABLQD7AkEBcQ0FC0EAIQIgAS0AkANBAXENBAwOCyAJIAYpAgA3AgAgASgCKCECIAFBJTYCKCABIAEpA0A3A3ggCUEIaiAGQQhqKQIANwIAIAlBEGogBkEQaigCADYCACADIAI2ApABIANBkAFqIg8QvwogASgCfCECIA8gAUEAEE4gAygCkAEiDUEHRg0HIANBwAJqIgcgCkEIaikDADcDACADQcgCaiIRIApBEGopAwA3AwAgA0HQAmoiEiAKQRhqKQMANwMAIAMgCikDADcDuAIgAygClAEhECABKAJ8IQtBKEEIEJEgIgggEDYCBCAIIA02AgAgCCADKQO4AjcDCCAIQRBqIAcpAwA3AwAgCEEYaiARKQMANwMAIAhBIGogEikDADcDACADQQA2AqgBIAMgBSACIAIgBUkbNgKkASADIAUgAiACIAVLGzYCoAEgAyAFIAsgBSALSxsiDTYCnAEgAyAFIAsgBSALSRsiAjYCmAEgAyAINgKUASADQQI2ApABIANB4ABqIA8Q6RlBAQsgBBDlDSIIBEAgCCgCAEEMRg0CCwJAIAQQ5Q0iCARAIAgoAgBBEEYNAQsgA0GYAWogBBDmCyADQRBqIAQQpBQgA0GIvuAANgKUASADQTQ6AJABIAMoAhAgAygCFCADQZABahDwFCEFIAQQ5Q0iAkUNCCACKAIAQSRHDQggASABKQNANwN4IAEoAiggAUElNgIoQSRHDQYgASABKAIsEIIMDAgLIAkgBikCADcCACABKAIoIQggAUElNgIoIAEgASkDQDcDeCAJQQhqIAZBCGopAgA3AgAgCUEQaiAGQRBqKAIANgIAIAMgCDYCkAEgA0GQAWoiEBC/CkUNASAEEOUNIgVFDQEgBSgCAEEMRw0BIAEoAnwhBSABKAJ4IQggA0E6OgCQASABIAggBSAQEMIZDAELCyADQZgBaiAEEOYLIANBCGogBBCkFCADQfjd3wA2ApQBIANBNDoAkAEgAygCCCADKAIMIANBkAFqEPAUIQUgBBDlDSICRQ0FIAIoAgBBJEcNBSABIAEpA0A3A3ggASgCKCABQSU2AihBJEcNAiABIAEoAiwQggwMBQtBACECIAQQ5Q0iBEUNCSAEKAIAQRdHDQkgASgCKCECIAFBJTYCKCABIAEpA0A3A3ggA0GcAWogBkEIaikCADcCACADQaQBaiAGQRBqKAIANgIAIAMgBikCADcClAEgAyACNgKQASADQZABahC/CkEBIQIMCQsgA0EAOgBTIAMgASkBggM3AEMgAyABKQCTAzcAVCADIAEoAJsDNgBcIAMgAUGKA2oiAikBADcASyADQfkAaiABQZcDaikAADcAACADQfQAaiABQZIDaikBADcCACADQewAaiACKQEANwIAIAMgASkBggM3AmQgAUGAAWogA0HDAGoQvwggAyABNgJgIAQQxCAhDiAEEOUNIgJFBEAgASgC2AIhASADQQA6AJABIAEgASADQZABahDwFCEBIABBBzYCACAAIAE2AgQMCAsCQCACKAIAQSRGBEAgASABKQNANwN4IAEoAiggAUElNgIoQSRGDQFB2eTgAEEoQeSl4AAQ4RcACyABKAIoIQIgAUElNgIoIAEgASkDQDcDeCADQZwBaiABQTRqKQIANwIAIANBpAFqIAFBPGooAgA2AgAgAyABKQIsNwKUASADIAI2ApABIANBkAFqIgIQvwogA0EANgKMASADQoCAgICAATcChAEgAUEsaiEGIAJBBHIhCyADQbgCakEEciEJIANBxAJqIRcgA0G8AmohDSADQcACaiEKIANBoAJqIQwgA0GgAWohGCADQZgBaiEZQQghEANAIAhBOGwhEgJAA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAEEOUNIgIEQCACKAIAQQ5GDQELIAQQxCAhBQJAAkACQAJAIAQQ5Q0iAgRAIAIoAgBBB0YNAQsgA0G4AmogARCsASADKAK8AiECIAMoArgCIgdBBUYNDSAMIAopAwA3AwAgDEEQaiAKQRBqIg8pAwA3AwAgDEEIaiAKQQhqIhQpAwA3AwAgAyACNgKcAiADIAc2ApgCIAQQ5Q0iAgRAIAIoAgBBE0YNAgsgBw0CQQAhAgJAIAQQ5Q0iB0UNACAHKAIAQRVHDQAgBy0ABA0AIAkgBikCADcCACABKAIoIQIgAUElNgIoIAEgASkDQDcDeCAJQQhqIAZBCGopAgA3AgAgCUEQaiAGQRBqKAIANgIAIAMgAjYCuAIgA0G4AmoiDxC/CiAPIAFBARDMEiADQSBqIAMoArgCEKYGIAMoAiQhAiADKAIgIA8QkCYNBAsgASgCfCEHIBggDBDmIiADIAI2AsABQQEhAiADQQE2ApABIAMgBSAHIAUgB0sbNgKcASADIAUgByAFIAdJGzYCmAEMDAsgCSAGKQIANwIAIAEoAighAiABQSU2AiggASABKQNANwN4IAlBCGogBkEIaikCADcCACAJQRBqIAZBEGooAgA2AgAgAyACNgK4AiADQbgCaiICEL8KIAEoAnwhByACIAFBABBOIAMoArgCIg9BB0cEQCADQYACaiIUIApBCGopAwA3AwAgA0GIAmoiFSAKQRBqKQMANwMAIANBkAJqIhYgCkEYaikDADcDACADIAopAwA3A/gBIAMoArwCIRNBKEEIEJEgIgIgEzYCBCACIA82AgAgAiADKQP4ATcDCCACQRBqIBQpAwA3AwAgAkEYaiAVKQMANwMAIAJBIGogFikDADcDACADQQA2AqgBIAMgBSAHIAUgB0sbNgKkASADIAUgByAFIAdJGzYCoAEgAyACNgKUAUECIQIgA0ECNgKQASADIAUgASgCfCIHIAUgB0sbNgKcASADIAUgByAFIAdJGzYCmAEMDAsgAygCvAIhAgwMCyAJIAYpAgA3AgAgASgCKCECIAFBJTYCKCABIAEpA0A3A3ggCUEIaiAGQQhqKQIANwIAIAlBEGogBkEQaigCADYCACADIAI2ArgCIANBuAJqIhMQvwogEyABEOUEIAMoArwCIQIgAygCuAIiFUEHRg0DIANB+AJqIgcgCkEYaikDADcDACADQfACaiIWIA8pAwA3AwAgA0HoAmoiDyAUKQMANwMAIAMgCikDADcD4AJBKEEIEJEgIgUgAjYCBCAFIBU2AgAgBSADKQPgAjcDCCAFQRBqIA8pAwA3AwAgBUEYaiAWKQMANwMAIAVBIGogBykDADcDACANQRhqIANBsAJqKQMANwIAIA1BEGogA0GoAmopAwA3AgAgDUEIaiAMKQMANwIAIA0gAykDmAI3AgBBACECIANBADYCkAEgCyATQSQQ9gYaIAMgBTYCuAEMCgsgFyAEEOYLIANBKGogBBCkFCADQQ02AsACIANByKPgADYCvAIgA0EwOgC4AiADKAIoIAMoAiwgA0G4AmoQ8BQhAgJAIAQQ5Q0iBEUNACAEKAIAQSRHDQAgASABKQNANwN4IAEoAiggAUElNgIoQSRHDQUgASABKAIsEIIMCyADIAI2ApQBDAMLIAMpA6ACEN0aDAkLIAEoAighAiABQSU2AiggASABKQNANwN4IANBnAFqIAZBCGopAgA3AgAgA0GkAWogBkEQaigCADYCACADIAYpAgA3ApQBIAMgAjYCkAEgA0GQAWoQvwogDiABKAJ8IgIgAiAOSxshCiAOIAIgAiAOSRshDCADKAKMASICQThsIQUgAkEBayEIIBpCIIinIQ4gGqchCyADKAKIASECIBFBAXEhDQNAIAVFBEACQCABLQD4AkECRgRAIAEtAPsCQQFxDQELQQAhAiABLQCQA0EBcUUNCAtBACECIAQQ5Q0iBEUNByAEKAIAQRdHDQcgASgCKCECIAFBJTYCKCABIAEpA0A3A3ggA0GcAWogBkEIaikCADcCACADQaQBaiAGQRBqKAIANgIAIAMgBikCADcClAEgAyACNgKQASADQZABahC/CkEBIQIMBwsgAigCACEJAkACQCAIBEAgCUECRw0BIANBOGogAhCjDyADKAI8IQkgAygCOCEHIANBOzoAkAEgASAHIAkgA0GQAWoQwhkMAQsgCUECRw0AIAIoAgQoAgANASANRQ0AIANBOjoAkAEgASALIA4gA0GQAWoQwhkLIAJBOGohAiAIQQFrIQggBUE4ayEFDAELCyADQTBqIAIQow8gAygCNCECIAMoAjAgA0HtADoAkAEgAiADQZABahDwFCECIAQQ5Q0iBEUNBCAEKAIAQSRHDQQgASABKQNANwN4IAEoAiggAUElNgIoQSRHDQMgASABKAIsEIIMDAQLIAMgAjYClAEgB0UNBQsgA0GYAmoQ0RYgAygClAEhAgwGC0HZ5OAAQShB2KPgABDhFwALQdnk4ABBKEG4o+AAEOEXAAsgAEEHNgIAIAAgAjYCBCADQYQBahD0JgwSCyAAIAMpAoQBNwIEIAAgAjoAHCAAQQA2AhggACAMNgIUIAAgCjYCECAAQQM2AgAgAEEMaiADQYwBaigCADYCAAwRCyADKQOgAhDdGgwBCyADKAKUASEHIANByAFqIBlBMBD2BhogAygChAEgCEYEQCADQYQBahD9FiADKAKIASEQCyAQIBJqIgUgAjYCACAFQQRqIAc2AgAgBUEIaiADQcgBakEwEPYGGiADIAhBAWoiCDYCjAEgBBDlDSICBEAgAigCAEEORg0DCyAEEOUNIgIEQCACKAIAQRBGDQILIANBmAFqIAQQ5gsgA0EYaiAEEKQUIANBiL7gADYClAEgA0E0OgCQASADKAIYIAMoAhwgA0GQAWoQ8BQhAiAEEOUNIgRFDQAgBCgCAEEkRw0AIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRw0FIAEgASgCLBCCDAsgAEEHNgIAIAAgAjYCBCADQYQBahD0JgwOCyALIAYpAgA3AgAgASgCKCECIAFBJTYCKCABIAEpA0A3A3ggC0EIaiAGQQhqKQIANwIAIAtBEGogBkEQaigCADYCACADIAI2ApABIANBkAFqEL8KIAQQ5Q0iAg0BCyASQThqIRIMAQsLQQEgESACKAIAQQ5GIgIbIREgASkDeCAaIAIbIRoMAQsLQdnk4ABBKEH0peAAEOEXAAsgASgCLCEBIABBBzYCACAAIAE2AgQMBwtB2eTgAEEoQfT93wAQ4RcAC0HZ5OAAQShB5P3fABDhFwALIAMoApQBIQULIABBBzYCACAAIAU2AgQgA0HgAGoQ8yYMBQtB2eTgAEEoQdT93wAQ4RcAC0HZ5OAAQShBtP7fABDhFwALIANBnAFqIAQQ5gsgAyAEEKQUIANBHDYCmAEgA0HE/t8ANgKUASADQTA6AJABIAMoAgAgAygCBCADQZABahDwFCECAkAgBBDlDSIERQ0AIAQoAgBBJEcNACABIAEpA0A3A3ggASgCKCABQSU2AihBJEYEQCABIAEoAiwQggwMAQtB2eTgAEEoQeD+3wAQ4RcACyAAQQc2AgAgACACNgIEDAILIANB4ABqEJAmDAELIAAgAykCYDcCBCAAIAI6ABwgAEEANgIYIABBATYCACAAQQxqIANB6ABqKAIANgIAIAAgDCABKAJ8IgEgASAMSRs2AhQgACAMIAEgASAMSxs2AhALIANBgANqJAALxCsCF38BfiMAQYADayIDJAACQCABQShqIgQQyA0iBkUEQCABKAKAAiEBIANBADoAkAEgASABIANBkAFqEPAUIQEgAEEHNgIAIAAgATYCBAwBCwJAAkACQAJAAkACQAJAAkACQAJAAkACQCAGKAIAIgZBC2sOAwEJAgALIAZBAkcEQCAGQSRHDQkgASABKQPgAjcDmAMgASgCyAIgAUElNgLIAkEkRw0IIAEoAswCIQEgAEEHNgIAIAAgATYCBAwMCyADQcgBaiABIAIQlQQgAAJ/IAMtANwBQQJHBEAgA0GsAWogA0HgAWopAwA3AgAgA0GkAWogA0HYAWopAwA3AgAgA0GcAWogA0HQAWopAwA3AgAgAyADKQPIATcClAEgAEEEaiADQZABakEkEPYGGkEADAELIAAgAygCyAE2AgRBBws2AgAMCwsgBBCqICEMIAQQyA0iAkUEQCABKAKAAiEBIANBADoAkAEgASABIANBkAFqEPAUIQEgAEEHNgIAIAAgATYCBAwLCyACKAIAQSRGBEAgASABKQPgAjcDmAMgASgCyAIgAUElNgLIAkEkRw0GIAEoAswCIQEgAEEHNgIAIAAgATYCBAwLCyABKALIAiECIAFBJTYCyAIgASABKQPgAjcDmAMgA0GcAWogAUHUAmopAgA3AgAgA0GkAWogAUHcAmooAgA2AgAgAyABKQLMAjcClAEgAyACNgKQASADQZABaiICEL4KIANBADYCaCADQoCAgICAATcCYCABQcwCaiEGIAJBBHIhCSADQdABaiEOIANBmAFqIQpBACECAkADQCACIA1yRSACQf7/e0tyIQhBACEFAkACfwJAAkACQANAIAQQyA0iC0UNASADQQA2AuACIAMgCzYC5AIgA0HgAmoQqyMgBBDIDSILBEAgCygCAEEMRg0DCyAIRQRAIANBOzoAkAEgASACIA0gA0GQAWoQrxkLAkAgBBDIDSILRQ0AIAsoAgBBEEcNACAJIAYpAgA3AgAgASgCyAIhCyABQSU2AsgCIAEgASkD4AI3A5gDIAlBCGogBkEIaikCADcCACAJQRBqIAZBEGooAgA2AgAgAyALNgKQASAFQQFqIQUgA0GQAWoQvgoMAQsLIAUEQCADIAU2ArgBIANBBzYCkAEgA0HgAGogA0GQAWoQgwkLIAQQqiAhBSAEEMgNIggEQCAIKAIAQQdGDQMLIANBkAFqIAEQ5AQgAygClAEhBSADKAKQASIIQQdGDQsgDiAKKQMANwMAIA5BGGogCkEYaikDADcDACAOQRBqIApBEGopAwA3AwAgDkEIaiAKQQhqKQMANwMAIAMgBTYCzAEgAyAINgLIASADQeAAaiADQcgBahDpGUEADAMLIAEoAoACIQIgA0EAOgCQASADIAIgAiADQZABahDwFDYC5AIgA0EBNgLgAiADQeACahCrIwsgBBDIDSICRQ0CIAIoAgBBDEcNAiABKALIAiECIAFBJTYCyAIgASABKQPgAjcDmAMgA0GcAWogBkEIaikCADcCACADQaQBaiAGQRBqKAIANgIAIAMgBikCADcClAEgAyACNgKQASADQZABahC+CiABLQCgAkECRgRAIAEtAKMCQQFxDQULQQAhAiABLQC4AkEBcQ0EDA4LIAkgBikCADcCACABKALIAiECIAFBJTYCyAIgASABKQPgAjcDmAMgCUEIaiAGQQhqKQIANwIAIAlBEGogBkEQaigCADYCACADIAI2ApABIANBkAFqIg8QvgogASgCnAMhAiAPIAFBABBPIAMoApABIg1BB0YNByADQcACaiIHIApBCGopAwA3AwAgA0HIAmoiESAKQRBqKQMANwMAIANB0AJqIhIgCkEYaikDADcDACADIAopAwA3A7gCIAMoApQBIRAgASgCnAMhC0EoQQgQkSAiCCAQNgIEIAggDTYCACAIIAMpA7gCNwMIIAhBEGogBykDADcDACAIQRhqIBEpAwA3AwAgCEEgaiASKQMANwMAIANBADYCqAEgAyAFIAIgAiAFSRs2AqQBIAMgBSACIAIgBUsbNgKgASADIAUgCyAFIAtLGyINNgKcASADIAUgCyAFIAtJGyICNgKYASADIAg2ApQBIANBAjYCkAEgA0HgAGogDxDpGUEBCyAEEMgNIggEQCAIKAIAQQxGDQILAkAgBBDIDSIIBEAgCCgCAEEQRg0BCyADQZgBaiAEEIQQIANBEGogBBDwEyADQYi+4AA2ApQBIANBNDoAkAEgAygCECADKAIUIANBkAFqEPAUIQUgBBDI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A0HE/t8ANgKUASADQTA6AJABIAMoAgAgAygCBCADQZABahDwFCECAkAgBBDIDSIERQ0AIAQoAgBBJEcNACABIAEpA+ACNwOYAyABKALIAiABQSU2AsgCQSRGBEAgASABKALMAhD7CwwBC0HZ5OAAQShB4P7fABDhFwALIABBBzYCACAAIAI2AgQMAgsgA0HgAGoQ9SQMAQsgACADKQJgNwIEIAAgAjoAHCAAQQA2AhggAEEBNgIAIABBDGogA0HoAGooAgA2AgAgACAMIAEoApwDIgEgASAMSRs2AhQgACAMIAEgASAMSxs2AhALIANBgANqJAALwCoDHn8CfgF8IwBBoARrIgIkACAAIAEQpBogAkHYAGogAUGIAWoiAygCADYCACADQQA2AgAgASkCgAEhICABQoCAgICAATcDgAEgASkCjAEhISABQoCAgIDAADcCjAEgAUGUAWoiAygCACEGIANBADYCACACQegAaiAGNgIAIAIgIDcDUCACICE3A2AgAUGMAWohCiABQYABaiEMIABBDGohEyAAKAIQIgcgACgCFEHYAGxqIRQgAkGoAmohFSACQbwDaiERIAJBmAFqIRYDQAJAAkACQAJAAkACQCAUIAciA0cEQCADQdgAaiEHAkAgAygCACIGQQRrQQAgBkEFa0EISRtBAWsOCAcGBQQICAMCAAsgAygCSEEGdCEXIAMoAkQhGkEAIQgDQAJAAn8CQCAIIBdHBEAgCCAaaiIGKAIAQQdHDQMgBkEIaiEJIAZBHGoiEi0AAEECRwRAIAJBQGsgCSkDACAGQRhqKAIAEKkjIAIoAkghBCACKQNAISAgAkHIA2oiDSAJELwbQQAhCyACQQA2ApADIAIgAikD0AM3A6ADIAIgAikDyAM3A5gDIBYgCRC8GyACQRo2ApABIAJBsANqIAkQvBtBACEFIAZBIGooAgAiDwRAENgiIQUgDykCBCEhENwiIQ4gDSAPKAIAEKcBIA4gDUHYABD2BiENIAUgITcCBCAFIA02AgALIAJB0ANqIBFBCGooAgA2AgAgAiARKQIANwPIAyACKAK4AyENIAIoArQDIQ8gAigCsAMhECACQZADaiACQZABahCmBAwDCyAJKAIAIgsoAgBFDQEgAkEBNgLMAyACQfC13wA2AsgDIAJCADcC1AMgAiACQZADajYC0AMgAkHI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ApQDIgY2AqACIAIgBjYCpAIgAiAGIAIoApgDIglB2ABsajYCrAIgCQRAIAJByANqIAkQmxEgAigC0AMgAigC1AMgAkGgAmoQggsLIAJBoAJqEPQGCyACQcgDahDQFCADEIQXIARBBUcNASACQYABagsQ0iYLIABBMGogARDIJSACQaAEaiQADwsgAygCCEEFRwRAIANBCGogARCDIgsgA0E8aiABEMglIANBMGogARCkGgwFCyABIANBBGoQ4gYMBAsgA0EkaiABEMglIANBLGogARCkGgwDCyADQQhqIAEQgyIgA0E8aiABEMglIANBMGogARCkGgwCCyADQSBqIAEQ/ywMAQsgA0EIaiABEIMiIANBMGogARD/LAwACwALjSwCF38IfiMAQeACayIDJAACQAJAIAIoAgQiBSACKAIIIgRB//0DEJkLRQ0AQQMgBEG0v9gAEN8gGgJAIARBBE8EQCAFLAADQb9/Sg0BDAMLIARBA0cNAiACQQA2AggMAQsgAkEANgIIIAUgBUEDaiAEQQNrIgQQvS0aIAIgBDYCCAtBFEEEEJEgIhBCgYCAgBA3AgAgECACKQIANwIIIBBBEGogAkEIaigCADYCACABIAEoAgAiAkEBajYCACADIAE2AjQCQCACQQBIDQAgASILKAIIIhdBAkYEQCAAKAJQIhggACgCVEEYbGohDSADQckBaiEVIANBqQJqIREgASgCFCEPIAEoAhAhEgJAA0AgGCANIgpHIhlFBEAgA0GgAmogEiAPEOUTDAILIApBEGsoAgAhAkEAIQkgDwRAIBItAABBL0YhCQsgCkEUaygCACEEIApBGGshDSADIAIEfyAELQAAQS9GBUEACzoA3gFBBiEFIANBBjoAyAEgAyACNgLEASADIAQ2AsABIANBgAQ7AdwBQQAhCEECIQsgDyEEIBIhBgJAA0AgBUH/AXEiDkEGRiITRQRAIANBtwFqIANB3wBqKAAANgAAIANBsAFqIANB2ABqKQAANwMAIAMgAykAUDcDqAELIBEgAykDqAE3AAAgEUEIaiIUIANBsAFqKQMANwAAIBFBD2oiFiADQbcBaigAADYAACADIAU6AKgCIAMgBDYCpAIgAyAGNgKgAiADIAk6AL4CIAMgCzoAvQIgAyAIOgC8AiADQegAaiADQaACahD+AiADQYgBaiADQcAB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DQMgDiALIAIQjxUNAwwCCyAIIBNHDQIMAQsgBCAFRw0BIAcgBiAEEI8VDQELIANB2ABqIBQpAAA3AwAgA0HfAGogFigAADYAACADIBEpAAA3A1AgAy0AvgIhCSADLQC9AiELIAMtALwCIQggAy0AqAIhBSADKAKkAiEEIAMoAqACIQYMAQsLQQAhBwsgB0UNAAsgA0GgAmogCkEIaygCACAKQQRrKAIAIAcgBBDTBwsgA0HIAWoiAiADQagCaigCADYCACADIAMpAqACNwPAAUHQAEEEEJEgIgtBAjYCCCALQoGAgIAQNwIAIAsgAykDwAE3AgwgC0EUaiACKAIANgIACyAAQeAAahC/HyEMIAAgACgCgAEiBiAQKAIQakEBajYCgAEgA0H4AWpCADcDACADQfABakIANwMAIANB6AFqQgA3AwAgA0IANwPgASADQvPK0cunjNmy9AA3A9gBIANCg9+R85bM3LfkADcD0AEgA0Lh5JXz1uzZvOwANwPIASADQvXKzYPXrNu38wA3A8ABIANBwAFqIgIgECgCDCISIBAoAhAiBxDlCCADQSBqIAIQrAkgA0EoaikDACEaIAMpAyAhGyADQdgCakIANwMAIANB0AJqQgA3AwAgA0HIAmpCADcDACADQgA3A8ACIANC88rRy6eM2bL0ADcDuAIgA0KD35Hzlszct+QANwOwAiADQuHklfPW7Nm87AA3A6gCIANC9crNg9es27fzADcDoAIgCyADQaACaiICELkEIANBEGogAhCsCSADQRhqKQMAIRwgAykDECEeQQQQ0iAiAiAGNgIAIANBATYCsAEgAyACNgKsASADQQE2AqgBIANBADYCcCADQoCAgIDAADcCaCADQQA2ApABIANCgICAgMAANwKIASAAQYABaiEOIAYgB2ohD0EEIQ1BACEJQQAhAgNAAkACQCADQYgBagJ/AkACQAJAAkACQAJAAkACQAJAAkACQCACIAdJBEAgAiASaiIFLQAAIgRBIEkNAUEBIQggBEH+AE0NDSACQQAgBMBBv39MGw0CAkACQCAEwEEATg0AIAUtAAFBP3EhCiAEQR9xIQgCQCAEQd8BTQRAIAhBBnQgCnIhBAwBCyAFLQACQT9xIApBBnRyIQogBEHwAUkEQCAKIAhBDHRyIQQMAQsgCEESdEGAgPAAcSAFLQADQT9xIApBBnRyciIEQYCAxABGDQYLIARBgAFJDQBBAkEDQQQgBEGAgARJGyAEQYAQSRshCCAJIAMoAmhGDQEMCwsgAiAGaiEFQQEhCCAEQf8ARg0LIARBH0sNDgwLCyADQegAahDnFiADKAJsIQ0MCQsCQCADKAKwASICRQ0AIA8gAygCrAEgAkEBayICQQJ0aigCACIESQ0EIAQgD0cNACADIAI2ArABCyADQagCaiADQbABaigCACICNgIAIANBtAJqIANB8ABqIgQoAgAiBzYCACADQcACaiIJIANBkAFqIgUoAgA2AgAgA0HYAGoiCCACNgIAIAMgAykCqAEiHTcDoAIgAyADKQJoIh83AqwCIAMgAykCiAE3A7gCIAMgHTcDUCAFIAc2AgAgAyAfNwOIASAEIAkoAgA2AgAgAyADKQO4AjcDaEHoAEEIEJEgIgIgHDcDICACIB43AxggAiAaNwMQIAIgGzcDCCACIBA2AjwgAiALNgI4IAIgDzYCNCACIAY2AjAgAkEANgIsIAIgATYCKCACQoGAgIAQNwMAIAIgAykDUDcDQCACQcgAaiAIKAIANgIAIAIgAykDiAE3AkwgAkHUAGogBSgCADYCACACQeAAaiAEKAIANgIAIAIgAykDaDcDWCACIBk6AGQgAiADLwCgAjsAZSACQecAaiADQaICai0AADoAACACIAIoAgAiAUEBajYCACABQQBIDQ8gACgCbCIBIAAoAmRGBEAgAEHkAGoQ7BYLIAAoAmggAUECdGogAjYCACAAIAFBAWo2AmwgA0HYAmpCADcDACADQdACakIANwMAIANByAJqQgA3AwAgA0IANwPAAiADQvPK0cunjNmy9AA3A7gCIANCg9+R85bM3LfkADcDsAIgA0Lh5JXz1uzZvOwANwOoAiADQvXKzYPXrNu38wA3A6ACIAsgA0GgAmoiARC5BCABIAItAGQQ2wwgASACKAIoIgRBAEcQ2wwgBARAIAQgARC5BAsgAykD0AIhGiADNQLYAiEbIANB0AFqIgQgA0GwAmopAwA3AwAgA0HIAWoiASADQagCaikDADcDACADQdgBaiIFIBogG0I4hoQiGiADQbgCaikDAIU3AwAgAyADKQOgAjcDwAEgA0HAAWoiBhCSCyABIAEpAwBC7gGFNwMAIAMgAykDwAEgGoU3A8ABIAYQmQcg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twkMAQsLQgAQ2yYgAkHYAWoQoRQLIAYgAykDADcDACACIAIpA8gCNwPYASACQYgDahDnCiACQbgCaiACQdgBahCdByACQbACaiACQcACaikCADcDACACIAIpArgCNwOoAgJAIAEoAhwiA0UNACACQagCahCdEyEEIAEoAhAiBSkDACAEIANBAWpBAXYgAyACKAK0AhsgEhDgISAFQQhqIQdCf4VCgIGChIiQoMCAf4MhFgNAIBZQRQRAIAQgBSAWeqdBAXRB8AFxa0EQaykDABDhGhC3CSADQQFrIQMgFkIBfSAWgyEWDAELIANFDQEgBUGAAWshBSAHKQMAQn+FQoCBgoSIkKDAgH+DIRYgB0EIaiEHDAALAAsgAkEANgK4AyAIIBc3AwAgAiAYNwOoAyACQawBaiACQZgCaiAQIAJBqANqIgMgAkGoAmogAigCrAIgAigCqAIbEMcBIAMQwQggASgCAEUNASABIAIoAqQCEKopIAIoApgCIgMpAwAhFiACKAKcAiEEIAIgAigCpAI2AvABIAIgAzYC6AEgAiADIARqQQFqNgLkASACIANBCGo2AuABIAIgFkJ/hUKAgYKEiJCgwIB/gzcD2AEDQCACQYABaiACQdgBahCnFSACKAKAASIDRQ0CIAIgAigChAEiBDYCiAMgAkHwAGogAykDACADQQhqKAIAEKkjIAJBqANqIgUgASACKQNwIAIoAngQ9QYgAikDqANQDQkgBSAEKQMAEOEaENkLDAALAAsgBCABEKItDAYLIAYgDSkDADcDACACIAIpA5gCNwPYASACQagCahCDKCACQawBahDPHyACKALkAQRAIAJBADYCsAMgAkKAgICAgAE3AqgDIAIgATUCQCABMQBGQjCGIAExAEVCKIaEIAExAERCIIaEhDcCtAMgAiACQdgBajYCvAMgCSgCACACQagDaiIDEPktIAMQ9SYLIAJB2AFqEMIKDAULIAZBCGogARCqIiAGQTxqIAEQnSYgBkEwaiABELMaDAQLIAZBJGogARCdJiAGQSxqIAEQsxoMAwsgBkEEaiABEK0aDAILIAYoAghBBUcEQCAGQQhqIAEQqiILIAZBPGogARCdJiAGQTBqIAEQsxoMAQsLIABBMGogARCdJiACQZAEaiQADwsgAigCsAMhACACQQM2AswCIAJB6MfgADYCyAIgAkIDNwLUAiACQdgENgL0AiACQdgENgLsAiACQcUCNgLkAiACIAM2AuACIAIgAEEIazYCmAMgAiACQeACajYC0AIgAiACQYgDajYC8AIgAiACQZgDajYC6AIgAkHIAmpB9MjgABCoHQALqiYCFH8EfiMAQZAEayICJAAgAUEwaiERIAFBIGohEiAAKAIEIgMgACgCCEEMbGohFSACQbgCaiETIAJB2AJqIRQgAkHgA2ohDiACQegBaiEJIAJBwANqIQogAkGwA2ohCCACQYQCaiELIAJB1ANqIQ8CQANAIAMgFUcEQCADQQxqIQAgAygCAARAIAMgARCfLSAAIQMMAgsgAygCBCEGIAAhAwJAAkACQAJAAkBBBCAGKAIAQQVrIgQgBEEGTxtBAWsOBQABAgMEBgsgBkEIaiABEKoiIAZBKGogARCfLQwFCyAGQShqIAEQny0MBAsgBkEIaiEDAkACQCABLQBGRQRAIAJBgAI7AKgDIAMgAkGoA2oQnCUgAi0AqAMNAQsgASgCQCEEIAJBqANqIgcQwBEgAiAENgKQAiACQQA6AJQCIAIgAi0A5QM6AJUCIAIgAi8B5gM7AZYCIAJB2AFqIgwgB0EsEPYGGiALQQhqIA9BCGooAgA2AgAgCyAPKQIANwIAIAMgDBCaJSACQawBaiIEIAxBLBD2BhogCxD3IiAEEK0IIAJBoAJqIhBB2JjjACkDACIXNwMAIAJB0JjjACkDACIYNwOYAiACQbgCaiASEOIIIAggFzcDACACIBg3A6gDIAMgBxCZJSACQYADaiAIKQMANwMAIAIgAikDqAM3A/gCIAhBCGoiBCAXNwIAIAggGDcCACAKIBg3AgAgCkEIaiIFIBc3AgAgAkEAOgDQAyACQQA2AqgDIAMgBxCgJiACQeABaiINIAQpAgAiFjcDACAJIAopAgA3AgAgCUEIaiIDIAUpAgA3AgAgAiAIKQIAIhk3A9gBIAJBkANqIBY3AwAgAkGgA2ogAykCADcDACACIBk3A4gDIAIgCSkCADcDmAMgByACQfgCahDSCyAOIAJBmANqENILIAIgAkGIA2o2AtgDIAJB0AJqIgMgFzcDACACIBg3A8gCIAwgBxDBDiACQcgCaiACKALYASAUEOAhIAIoAsgDQYGAgIB4RwRAIAwgB0EwEPYGGgNAAkAgAkEoaiACQdgBahDOFCACKQMoIhZQDQAgAigCMCEEIAIgFjcD4AIgAiAENgLoAiACQYgDaiACQeACahDpCQRAIAIpA+ACEN0aDAIFIAJByAJqIBYQtwkMAgsACwtCABDbJiACQdgBahChFAsgAigCgARBgYCAgHhHBEAgAkHYAWogDkEwEPYGGgNAIAJBGGogAkHYAWoQzhQgAikDGCIWUEUEQCACQcgCaiAWELcJDAELC0IAENsmIAJB2AFqEKEUCyANIAMpAwA3AwAgAiACKQPIAjcD2AEgAkGIA2oQ5wogAkG4AmogAkHYAWoQnQcgAkGwAmogAkHAAmopAgA3AwAgAiACKQK4AjcDqAICQCABKAIcIgRFDQAgAkGoAmoQnRMhByABKAIQIgUpAwAgByAEQQFqQQF2IAQgAigCtAIbIBMQ4CEgBUEIaiEDQn+FQoCBgoSIkKDAgH+DIRYDQCAWUEUEQCAHIAUgFnqnQQF0QfABcWtBEGspAwAQ4RoQtwkgBEEBayEEIBZCAX0gFoMhFgwBCyAERQ0BIAVBgAFrIQUgAykDAEJ/hUKAgYKEiJCgwIB/gyEWIANBCGohAwwACwALIAJBADYCuAMgCCAXNwMAIAIgGDcDqAMgAkGsAWogAkGYAmogESACQagDaiIDIAJBqAJqIAIoAqwCIAIoAqgCGxDHASADEMEIIAEoAgBFDQEgASACKAKkAhCqKSACKAKYAiIDKQMAIRYgAigCnAIhBCACIAIoAqQCNgLwASACIAM2AugBIAIgAyAEakEBajYC5AEgAiADQQhqNgLgASACIBZCf4VCgIGChIiQoMCAf4M3A9gBA0AgAkEQaiACQdgBahCnFSACKAIQIgNFDQIgAiACKAIUIgQ2AogDIAIgAykDACADQQhqKAIAEKkjIAJBqANqIgUgASACKQMAIAIoAggQ9QYgAikDqANQDQcgBSAEKQMAEOEaENkLDAALAAsgAyABEKoiIAEgBkEoahCKJCAAIQMMBAsgDSAQKQMANwMAIAIgAikDmAI3A9gBIAJBqAJqEIMoIAJBrAFqEM8fIAIoAuQBBEAgAkEANgKwAyACQoCAgICAATcCqAMgAiABNQJAIAExAEZCMIYgATEARUIohoQgATEAREIghoSENwK0AyACIAJB2AFqNgK8AyAGKAIIIAZBDGooAgAgAkGoA2oiAxCeJiAGQShqIAMQpiEgAxD1JgsgAkHYAWoQwgogACEDDAMLAkACQCABLQBGRQRAIAJBgAI7AKgDIAYgAkGoA2oQ/h0gAi0AqAMNAQsgASgCQCEDIAJBqANqIgUQwBEgAiADNgKQAiACQQA6AJQCIAIgAi0A5QM6AJUCIAIgAi8B5gM7AZYCIAJB2AFqIgcgBUEsEPYGGiALQQhqIA9BCGooAgA2AgAgCyAPKQIANwIAIAYgBxDzGiACQawBaiIDIAdBLBD2BhogCxD3IiADEK0IIAJBoAJqIhBB2JjjACkDACIXNwMAIAJB0JjjACkDACIYNwOYAiACQbgCaiASEOIIIAggFzcDACACIBg3A6gDIAYgBRD9HSACQYADaiAIKQMANwMAIAIgAikDqAM3A/gCIAhBCGoiAyAXNwIAIAggGDcCACAKIBg3AgAgCkEIaiIEIBc3AgAgAkEAOgDQAyACQQA2AqgDIAYgBRCHGyACQeABaiINIAMpAgAiFjcDACAJIAopAgA3AgAgCUEIaiIDIAQpAgA3AgAgAiAIKQIAIhk3A9gBIAJBkANqIBY3AwAgAkGgA2ogAykCADcDACACIBk3A4gDIAIgCSkCADcDmAMgBSACQfgCahDSCyAOIAJBmANqENILIAIgAkGIA2o2AtgDIAJB0AJqIgMgFzcDACACIBg3A8gCIAcgBRDBDiACQcgCaiACKALYASAUEOAhIAIoAsgDQYGAgIB4RwRAIAcgBUEwEPYGGgNAAkAgAkHgAGogAkHYAWoQzhQgAikDYCIWUA0AIAIoAmghBCACIBY3A+ACIAIgBDYC6AIgAkGIA2ogAkHgAmoQ6QkEQCACKQPgAhDdGgwCBSACQcgCaiAWELcJDAILAAsLQgAQ2yYgAkHYAWoQoRQLIAIoAoAEQYGAgIB4RwRAIAJB2AFqIA5BMBD2BhoDQCACQdAAaiACQdgBahDOFCACKQNQIhZQRQRAIAJByAJqIBYQtwkMAQsLQgAQ2yYgAkHYAWoQoRQLIA0gAykDADcDACACIAIpA8gCNwPYASACQYgDahDnCiACQbgCaiACQdgBahCdByACQbACaiACQcACaikCADcDACACIAIpArgCNwOoAgJAIAEoAhwiBEUNACACQagCahCdEyEHIAEoAhAiBSkDACAHIARBAWpBAXYgBCACKAK0AhsgExDgISAFQQhqIQNCf4VCgIGChIiQoMCAf4MhFgNAIBZQRQRAIAcgBSAWeqdBAXRB8AFxa0EQaykDABDhGhC3CSAEQQFrIQQgFkIBfSAWgyEWDAELIARFDQEgBUGAAWshBSADKQMAQn+FQoCBgoSIkKDAgH+DIRYgA0EIaiEDDAALAAsgAkEANgK4AyAIIBc3AwAgAiAYNwOoAyACQawBaiACQZgCaiARIAJBqANqIgMgAkGoAmogAigCrAIgAigCqAIbEMcBIAMQwQggASgCAEUNASABIAIoAqQCEKopIAIoApgCIgMpAwAhFiACKAKcAiEEIAIgAigCpAI2AvABIAIgAzYC6AEgAiADIARqQQFqNgLkASACIANBCGo2AuABIAIgFkJ/hUKAgYKEiJCgwIB/gzcD2AEDQCACQcgAaiACQdgBahCnFSACKAJIIgNFDQIgAiACKAJMIgQ2AogDIAJBOGogAykDACADQQhqKAIAEKkjIAJBqANqIgUgASACKQM4IAIoAkAQ9QYgAikDqANQDQYgBSAEKQMAEOEaENkLDAALAAsgBiABEKoiIAZBIGogARCJJCAGQegAaiABEKQtIAEgBkHIAGoQiiQMAwsgDSAQKQMANwMAIAIgAikDmAI3A9gBIAJBqAJqEIMoIAJBrAFqEM8fIAIoAuQBBEAgAkEANgKwAyACQoCAgICAATcCqAMgAiABNQJAIAExAEZCMIYgATEARUIohoQgATEAREIghoSENwK0AyACIAJB2AFqNgK8AyAGKAIAIAZBBGooAgAgAkGoA2oiAxCeJiAGKAIgQQdHBEAgBkEgaiADEKERCyAGKAJoIAJBqANqIgMQoREgBkHIAGogAxCmISADEPUmCyACQdgBahDCCiAAIQMMAgsgBkEIaiEDAkACQCABLQBGRQRAIAJBgAI7AKgDIAMgAkGoA2oQqicgAi0AqAMNAQsgASgCQCEEIAJBqANqIgcQwBEgAiAENgKQAiACQQA6AJQCIAIgAi0A5QM6AJUCIAIgAi8B5gM7AZYCIAJB2AFqIgwgB0EsEPYGGiALQQhqIA9BCGooAgA2AgAgCyAPKQIANwIAIAwgAxCbJSACQawBaiIEIAxBLBD2BhogCxD3IiAEEK0IIAJBoAJqIhBB2JjjACkDACIXNwMAIAJB0JjjACkDACIYNwOYAiACQbgCaiASEOIIIAggFzcDACACIBg3A6gDIAMgBxCpJyACQYADaiAIKQMANwMAIAIgAikDqAM3A/gCIAhBCGoiBCAXNwIAIAggGDcCACAKIBg3AgAgCkEIaiIFIBc3AgAgAkEAOgDQAyACQQA2AqgDIAMgBxChJiACQeABaiINIAQpAgAiFjcDACAJIAopAgA3AgAgCUEIaiIDIAUpAgA3AgAgAiAIKQIAIhk3A9gBIAJBkANqIBY3AwAgAkGgA2ogAykCADcDACACIBk3A4gDIAIgCSkCADcDmAMgByACQfgCahDSCyAOIAJBmANqENILIAIgAkGIA2o2AtgDIAJB0AJqIgMgFzcDACACIBg3A8gCIAwgBxDBDiACQcgCaiACKALYASAUEOAhIAIoAsgDQYGAgIB4RwRAIAwgB0EwEPYGGgNAAkAgAkGYAWogAkHYAWoQzhQgAikDmAEiFlANACACKAKgASEEIAIgFjcD4AIgAiAENgLoAiACQYgDaiACQeACahDpCQRAIAIpA+ACEN0aDAIFIAJByAJqIBYQtwkMAgsACwtCABDbJiACQdgBahChFAsgAigCgARBgYCAgHhHBEAgAkHYAWogDkEwEPYGGgNAIAJBiAFqIAJB2AFqEM4UIAIpA4gBIhZQRQRAIAJByAJqIBYQtwkMAQsLQgAQ2yYgAkHYAWoQoRQLIA0gAykDADcDACACIAIpA8gCNwPYASACQYgDahDnCiACQbgCaiACQdgBahCdByACQbACaiACQcACaikCADcDACACIAIpArgCNwOoAgJAIAEoAhwiBEUNACACQagCahCdEyEHIAEoAhAiBSkDACAHIARBAWpBAXYgBCACKAK0AhsgExDgISAFQQhqIQNCf4VCgIGChIiQoMCAf4MhFgNAIBZQRQRAIAcgBSAWeqdBAXRB8AFxa0EQaykDABDhGhC3CSAEQQFrIQQgFkIBfSAWgyEWDAELIARFDQEgBUGAAWshBSADKQMAQn+FQoCBgoSIkKDAgH+DIRYgA0EIaiEDDAALAAsgAkEANgK4AyAIIBc3AwAgAiAYNwOoAyACQawBaiACQZgCaiARIAJBqANqIgMgAkGoAmogAigCrAIgAigCqAIbEMcBIAMQwQggASgCAEUNASABIAIoAqQCEKopIAIoApgCIgMpAwAhFiACKAKcAiEEIAIgAigCpAI2AvABIAIgAzYC6AEgAiADIARqQQFqNgLkASACIANBCGo2AuABIAIgFkJ/hUKAgYKEiJCgwIB/gzcD2AEDQCACQYABaiACQdgBahCnFSACKAKAASIDRQ0CIAIgAigChAEiBDYCiAMgAkHwAGogAykDACADQQhqKAIAEKkjIAJBqANqIgUgASACKQNwIAIoAngQ9QYgAikDqANQDQUgBSAEKQMAEOEaENkLDAALAAsgAyABEKoiIAZBKGogARCiLSAAIQMMAgsgDSAQKQMANwMAIAIgAikDmAI3A9gBIAJBqAJqEIMoIAJBrAFqEM8fIAIoAuQBBEAgAkEANgKwAyACQoCAgICAATcCqAMgAiABNQJAIAExAEZCMIYgATEARUIohoQgATEAREIghoSENwK0AyACIAJB2AFqNgK8AyAGKAIIIAZBDGooAgAgAkGoA2oiAxCeJiAGKAIoIAMQ+S0gAxD1JgsgAkHYAWoQwgogACEDDAELCyACQZAEaiQADwsgAigCsAMhACACQQM2AswCIAJB6MfgADYCyAIgAkIDNwLUAiACQdgENgL0AiACQdgENgLsAiACQcUCNgLkAiACIAM2AuACIAIgAEEIazYCmAMgAiACQeACajYC0AIgAiACQYgDajYC8AIgAiACQZgDajYC6AIgAkHIAmpB9MjgABCoHQAL8iYCC38CfiMAQaACayICJAACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQQcgASgCACIEQQxrIgMgA0EmTxtBAWsOJQECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUACyAAQQw2AgAgACABKQIENwIEDCoLIAEoAgghByABKAIUIQggASgCECEGIAJBCGogASgCDCIEQQRBEBDsFCAEQQR0IQlBACEBIAIoAgwhBSACKAIIIgohAwNAIANFIAEgCUZyRQRAAkAgASAHaiILKAIAQQJGBEAgAkECNgJADAELIAJBQGsgCxDtHQsgAikCQCENIAEgBWoiC0EIaiACQcgAaikCADcCACALIA03AgAgA0EBayEDIAFBEGohAQwBCwsgACAINgIUIAAgBjYCECAAIAQ2AgwgACAFNgIIIAAgCjYCBCAAQQ02AgAMKQsgASgCECEDIAEoAhQhBCACQUBrIAFBBGoQ8QMgAEEUaiAENgIAIABBDjYCACAAIAIpAkA3AgQgAiADNgJMIABBDGogAkHIAGopAgA3AgAMKAsgAkEYaiABQQhqEKYgENoiIAJBkAFqIAEoAiAiARCKDCACQaABaiABQQxqEMULIAEoAjghBCABKAI0IQUgASgCMCEHAkAgASgCGEGAgICAeEYEQCACQYCAgIB4NgLYAQwBCyACQdgBaiABQRhqEMEfCyABLwFEIQggAUE8ahCXDyEGIAFBQGsQgBwhCSACQcgAaiACQZgBaigCADYCACACQdQAaiACQagBaigCADYCACACQeAAaiACQeABaikCADcDACACQegAaiACQegBaikCADcDACACIAIpApABNwNAIAIgAikCoAE3AkwgAiACKQLYATcDWCACQUBrQTAQ9gYiASAIOwFEIAEgCTYCQCABIAY2AjwgASAENgI4IAEgBTYCNCABIAc2AjAgAEEYaiACQShqKQMANwMAIABBEGogAkEgaikDADcDACAAIAIpAxg3AwggACABNgIgIABBDzYCAAwnCyABKQMIIQ0gAS0AECEDIAFBBGoQ3xwhASAAIAM6ABAgACANNwMIIAAgATYCBCAAQRA2AgAMJgsgASkCBCENIAEvARAhAyABQQxqEN8cIQEgACADOwEQIAAgATYCDCAAIA03AgQgAEERNgIADCULIAEpAgwhDSABLQAUIQMgAUEEahDfHCEEIAFBCGoQ3xwhASAAIAM6ABQgACANNwIMIAAgATYCCCAAIAQ2AgQgAEESNgIADCQLIAEtADwhCiABKAI0IQsgASgCMCEMIARBC0cEQAJAAkACQAJAAkACQAJAAkACQCAEQQFrDgoBAioDBAUqBgcIAAsgAkFAayABQQhqELwbIAIgAUEgahCAHDYCWCACQZgCaiACQdQAaikCADcDACACIAIpAkw3A5ACIAIoAkQhBSACKAJIIQggAigCXCEGIAIoAkAMKwsgAkFAayABQQhqELsJDCkLIAJBQGsgAUEIahDaCgwoCyACQUBrIAFBBGoQyAcMJQsgAkFAayABQQRqEO4dDCQLIAJBQGsgAUEEahDuHQwjCyACQUBrIAFBBGoQ7h0MIgsgAkFAayABQQRqEO8dDCEL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gAJqIAUpAgAiDjcDACACQZACaiAGKQIAIg03AwAgAkGwA2ogDTcDACACIAIpAsADIg03A/gBIAIgAikC0AMiDzcDiAIgAkGgA2ogDjcDACACIA83A6gDIAIgDTcDmAMgAyACQYgDahDSCyACQfADaiIFIAJBqANqENILIAIgAkGYA2o2AugDIAJB4AJqIAs3AwAgAiAMNwPYAiAEIAMQwQ4gAkHYAmogAigC+AEgAkHoAmoQ4CEgAigC2ANBgYCAgHhHBEAgBCADQTAQ9gYaA0ACQCACQYgBaiACQfgBahDOFCACKQOIASILUA0AIAIoApABIQMgAiALNwPwAiACIAM2AvgCIAJBmANqIAJB8AJqEOkJBEAgAikD8AIQ3RoFIAJB2AJqIAsQtwkLDAELC0IAENsmIAJB+AFqEKEUCyACKAKQBEGBgICAeEcEQCACQfgBaiAFQTAQ9gYaA0AgAkH4AGogAkH4AWoQzhQgAikDeCILUEUEQCACQdgCaiALELcJDAELC0IAENsmIAJB+AFqEKEUCyACQYACaiACQeACaikDADcDACACIAIpA9gCNwP4ASACQZgDahDnCiACQcgCaiACQfgBahCdByACQbADaiACQdACaikCADcDACACIAIpAsgCNwOoAwJAIAEoAhwiBUUNACACQagDahCdEyEGIAgoAgAiBCkDACAGIAVBAWpBAXYgBSAGKAIMGyAGQRBqEOAhIARBCGohA0J/hUKAgYKEiJCgwIB/gyELA0AgC1BFBEAgBiAEIAt6p0EBdEHwAXFrQRBrKQMAEOEaELcJIAVBAWshBSALQgF9IAuDIQsMAQsgBUUNASAEQYABayEEIAMpAwBCf4VCgIGChIiQoMCAf4MhCyADQQhqIQMMAAsACyACQQA2AsgDIAJBwANqQdiY4wApAwA3AwAgAkHQmOMAKQMANwO4AyACQcwBaiACQbgCaiABQTBqIAJBuANqIgMgAkGoA2ogAigCrAMgAigCqAMbEMcBIAMQwQggASgCAEUNASABIAIoAsQCEKopIAIoArgCIgMpAwAhCyACKAK8AiEEIAIgAigCxAI2ApACIAIgAzYCiAIgAiADIARqQQFqNgKEAiACIANBCGo2AoACIAIgC0J/hUKAgYKEiJCgwIB/gzcD+AEDQCACQfAAaiACQfgBahCnFSACKAJwIgNFDQIgAiACKAJ0IgQ2AogDIAJB4ABqIAMpAwAgA0EIaigCABCpIyACQbgDaiIFIAEgAikDYCACKAJoEPUGIAIpA7gDUA0MIAUgBCkDABDhGhDZCwwACwALIABBIGogARCiLQwJCyACQYACaiACQcACaikDADcDACACIAIpA7gCNwP4ASACQagDahCDKCACQcwBahDPHyAJDQUMBgsgAEEEaiABEKEtDAcLIABBBGogARChLQwGCyAAKAIEIgAoAihBMGwhAyAAKAIkIQQDQCADRQ0GIARBKGogARCdJiADQTBrIQMgBEEwaiEEDAALAAsgACgCBCIALQBFQQNGDQQgAEEgaiEAA0AgAC0AJUECRgRAAkAgACgCCEE4bCEDIAAoAgQhAANAIANFDQEgACABEMMMIANBOGshAyAAQThqIQAMAAsACwUgACgCICEADAELCwwECyAIIAJBuAFqEMYGDAILIAggAkG4AWoQxgYLIAIoAoQCBEAgAkEANgLAAyACQoCAgICAATcCuAMgAiABNQJAIAExAEZCMIYgATEARUIohoQgATEAREIghoSENwLEAyACIAJB+AFqIgE2AswDIAEgBxD1BRogACgCICACQbgDaiIAEPktIAAQ9SYLIAJB+AFqEMIKIAIpA7gBEN0aDAELAkAgAigChAJFDQAgAkEANgLAAyACQoCAgICAATcCuAMgAiABNQJAIAExAEZCMIYgATEARUIohoQgATEAREIghoSENwLEAyACIAJB+AFqIgE2AswDIAEgBxD1BRogACgCICIFQQRqKAIAIAVBCGooAgAgAkG4A2oQwBwgBSgCECIBIAUoAhRB2ABsaiEHA0ACQAJAIAcgASIARwRAIABB2ABqIQECQAJAAkACQAJAAkAgACgCACIDQQRrQQAgA0EFa0EISRtBAWsOCAECAwQFCQgHAAsgACACQbgDahDbCgwICyAAQQhqIAJBuANqEI0jDAcLIAAoAiAgAkG4A2oQ+S0MBgsgACgCCCAAQQxqKAIAIAJBuANqIgMQniYgACgCPCADEIQoIABBNGooAgAgAEE4aigCACADEMAcDAULIAAoAiQgAkG4A2oiAxCEKCAAQTBqKAIAIABBNGooAgAgAxDAHAwECyAAKAIIIgMgACgCDEEobGohBgNAIAMgBkYNBCADQShqAkACQAJAAkACQCAD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ADcCACADQYwDaiADQegBaiINKQIANwIAIAMgAykC4AE3AoQDIANBHDYCgAMgAyADQYADaiIPEMMoNgKMAiADQQI2AogCIAUoAgAhCyADKAKYASEOIAMoApwBIQggAyADKAKkATYCoAIgAyAKNgKYAiADIAogB0EFdGo2AqQCIAMgCjYCnAIgB0UNBiANIApBCGopAwA3AwAgCSAKQRBqKQMANwMAIAMgCkEgajYCnAIgAyAKKQMANwPgASADIAooABk2AtgCIAMgCkEcaigAADYA2wIgCi0AGCIHQQJGDQYgBCADKADbAjYAACADQZADaiIFIAkpAwA3AwAgA0GIA2oiBCANKQMANwMAIAMgAykD4AE3A4ADIAMgBzoAmAMgAyADKALYAjYAmQMgA0HAAmogDxC3DSADKQOAAyAFKQMAEP0sIAMoAsACQYCAgIB4Rg0GIANBsAJqIANByAJqIgYoAgA2AgAgAyADKQLAAjcDqAIgBCADQaACaikCADcDACADIAMpApgCNwOAAyADQQA2AqgDIANCADcDoAMgAyAIIAtBAnQiC2o2ApwDIAMgDjYCmAMgAyAINgKUAyADIAg2ApADIAMoAoQDIQcgAygCjAMhDCADQfkBaiIKQQNqIQ8DQAJAAkAgByAMRg0AIAMgB0EgaiIFNgKEAyAHLQAYIg5BAkYNACALDQEgBykDACAHKQMQEP0sCyADQYADahCNKSADQagCahCRGSEZIABBADYCACAAIBk3AwggA0GIAmoQgiAMCQsgBiAHQQhqKQMAIhs3AwAgA0HQAmogB0EQaikDACIaNwMAIAMgCEEEaiIENgKUAyADIAcpAwAiGTcDwAIgAyAHKAAZNgK4AiADIAdBHGooAAA2ALsCIAgoAgAhByAJIBo3AwAgDSAbNwMAIAogAygCuAI2AAAgDyADKAC7AjYAACADIBk3A+ABIAMgDjoA+AEgA0HYAmogASAHEFgCQAJAAkACQCADKALYAiIODgIBAgALIAAgAykDiAI3AwAgAEEIaiADQZACaikDADcDACADQdgCahCCICADKQPgASADKQPwARD9LCADQYADahCNKSADKAKoAiADKAKsAhC+KQwLCyADIAMpA+ACNwP4AiADQewCaiADQfgCahC3DSADKQP4AhDdGgwBCyADQewCaiADKwPgAhCwAQsgA0Go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IRogHEIBfSIcIBlVDQALIBkhHAsCQCAaIB19IhlCAFMNACAZIhpCAFINACAQRAAAAAAAAAAAogwBCwJAIBpC/////////wdWBEAgGiEZDAELA0AgHEIBfSEcIBpCgICAgICAgARUIBpCAYYiGSEaDQALCyAeQoCAgICAgICAgH+DIBlCASAcfYggGUKAgICAgICACH0gHEI0hoQgHEIAVxuEvwsMBwsgECARowwGCyAQIBGiDAULIBAgEaEMBAsgECARoAwDCyAQEMwOIBEQzA52uAwCCyAQEMwOIBEQzA51twwBCyAQEMwOIBEQzA50twshECAAQQE2AgAgACAQOQMIQQALIANBzAFqEIspIA8EQCADQeABahCCIAsNBQwEC0HZ5OAAQShBxL/fABDhFwALQQAhAQsgA0HQAmogA0HcAWooAgA2AgAgA0HIAmogA0HUAWopAgA3AwAgAyADKQLMATcDwAIgA0GAA2oiBCADQeABahD4BRCZISAEQcAAEPYGIQQgA0HMAWoQjCkgAyAENgLAAiAPQQFLCwJAIAFBAk8EQCADQcACahCEFSEBIAgQgiAMAQsgA0GAA2oiASAIEPgFEJkhIAFBwAAQ9gYhBCADQcACaiIBQQRyEIwpIAMgBDYCxAIgARCEFSEBCyAAQQI2AgAgACABNgIEIANB4AFqIQhFDQELIAgQgiALIAIoAgBBEGsiAEETSw0BQQEgAHRBlaggcQ0DIABBC0cNAQsgAigCCA4EAgEBAgELIAIQvQIMAQsgAkEIahCjFAsgAhD1KgwBCyAAQQI2AgAgACACNgIECyADQcADaiQAC6QiAh1/AX4jAEGwAmsiAiQAIAJBMGogASgCCCIDQQRBHBDsFCACQQA2AkAgAiACKQMwNwI4IAEoAgAhBSACIAEoAgQiASADQRxsIgNqIgs2ArwBIAIgBTYCuAEgAiABNgKwASABQRxqIQcgAkHIAGohEQJAAkACQAJAAkACQANAAkACQCACIAMEfyABKAIAIgVBCEcNASAHBSALCzYCtAEgAkGwAWoQsxcCQAJAAkAgAigCQCIFDgIEAAELIAJBADYCQCACKAI8IgMoAgAiAUEIRg0BIAAgATYCACAAIAMpAgQ3AgQgAEEMaiADQQxqKQIANwIAIABBFGogA0EUaikCADcCAAwFCyACKAI8IQFBACED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4wApAwA3A+gCIAJB/ABqIAJB6AFqIAFBMGogAkHoAmoiAyACQdgCaiACKALcAiACKALYAhsQxwEgAxDBCCABKAIARQ0BIAEgAigC9AEQqikgAigC6AEiAykDACEIIAIoAuwBIQQgAiACKAL0ATYCwAEgAiADNgK4ASACIAMgBGpBAWo2ArQBIAIgA0EIajYCsAEgAiAIQn+FQoCBgoSIkKDAgH+DNwOoAQNAIAJBGGogAkGoAWoQpxUgAigCGCIDRQ0CIAIgAigCHCIENgK4AiACQQhqIAMpAwAgA0EIaigCABCpIyACQegCaiIFIAEgAikDCCACKAIQEPUGIAIpA+gCUA0fIAUgBCkDABDhGhDZCwwACwALIAYgARCqLQwcCyACQbABaiACQfABaikDADcDACACIAIpA+gBNwOoASACQdgCahCDKCACQfwAahDPHyACKAK0AQRAIAJBADYC8AIgAkKAgICAgAE3AugCIAIgATUCQCABMQBGQjCGIAExAEVCKIaEIAExAERCIIaEhDcC9AIgAC0AHCACIAJBqAFqIgM2AvwCQQJHBEAgAyAGEPUFGgsgACgCICACQegCaiIAEP8SIAAQ9SYLIAJBqAFqEMIKDBsLIABBBGogARCfLQwaCyAAQQxqIAEQny0MGQsgAEEEaiABEJ8tIABBCGogARCfLQwYCyAAQThqAkACQAJAAkACQAJAAkACQAJAAkACQCADQQFrDgsAAQIDBAUGBwgKCQoLIABBCGogARCaHwwJCyAAQQhqIAEQsiIMCAsgAEEEaiABEJ8tDAcLIABBBGogARDDHAwGCyAAQQRqIAEQny0MBQsgAEEEaiABEJ8tDAQLIABBBGogARCfLQwDCyAAQQRqIAEQny0MAgsgAEEEaiABEJ8tDAELIABBCGohAwJAAkAgACgCBEEBaw4CAQIACyADIAEQlBcMAQsgAyABEMoPCyABEJ8tDBcLIABBCGogARCaHwwWCyAAQQhqIAEQsiIMFQsgAEEEaiABEJ8tIABBCGogARCfLSAAQQxqIAEQny0MFAsgAC0AGEEFRgRAIABBEGogARCfLQsgAEEEaiABEIgZDBMLIABBEGogARCfLSAAKAIEQYCAgIB4Rg0SIABBBGogARCIGQwSCyAAQQRqIAEQuBoMEQsgAEEEaiABELgaDBALIABBBGogARCf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IAMoAjAiBCADKAI0EI0PIAMtAHhBBEYNASADKQN4IhdC/wGDQgRRDQEgACAXNwIACyADKAIsIAQQvikMAQsgAygCLCAEEL4pIABBBDoAAAsgA0HwBmokAAusIQIGfwJ+IwBBwAFrIgIkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAoAgBBAWsOEg8PAQIDDw8EBQYHCAkKCwwNDgALIAEgAEEEahDTBAwOCyAAQQRqIAEQxysgAEEIaiABEN8rDA0LIABBDGogARClJQwMCyAAQShqIAEQ3ysMCwsgAEEEaiABEMcrIABBCGogARDfKyAAKAIURQ0KIABBFGogARDfKwwKCyAAQRBqIAEQxysgACgCDEEYbCEDIAAoAgghAANAIANFDQogAEEUaiABEKUlIAAgARCIGiADQRhrIQMgAEEYaiEADAALAAsgAEEEaiABEMcrDAgLIAEgACgCBCIEQcgAahDTBAJAIAQoAgBBCEYNACACQZQBakHYmOMAKQMANwIAIAJBADoAvwEgAkEAOwC9ASACQQA2ArQBIAJCgICAgIABNwKsASACQQE6AKgBIAJBADYCpAEgAkKAgICAwAA3ApwBIAJBADYCiAEgAkKAgICAgAE3AoABIAJB0JjjACkDADcCjAEgAiABLQA8OgC8ASACIAEoAjg2ArgBIAEtAD0hACAEQShqIAJBgAFqIgMQiBogAkEBOgC/ASACQQE6AL0BIAQoAgBBB0cEQCAEIAMQlxELIAJBrAFqIQUgAkEAOgC/ASACIAA6AL0BAkAgAigCtAEiAARAIAFBDGogABDoKCACQdAAaiACKAKwASACKAK0ARCZCiACIAIoAlA2AgggAiACKAJUIgA2AgAgAiAAIAIoAlhBBHQiA2oiBjYCDANAIANFDQIgAkGAAWogACkDACAAKAIIELgQIANBEGshAyAAQRBqIQAMAAsACyABQRxqIAIgAkGAAWpBLBD2BhCJGiAFEPciDAELIAIgBjYCBCACEIQXIAEtAChFBEAgASACKAK0ARD/HSACIAIoAqwBNgIIIAIgAigCsAEiADYCACACIAAgAigCtAFBBHQiA2oiBTYCDANAIAMEQCABIAApAwAgACgCCEEBEIYGIANBEGshAyAAQRBqIQAMAQsLIAIgBTYCBCACEIQXIAFBHGogAiACQYABakEsEPYGEIkaDAELIAJBCGogBUEIaigCADYCACACIAUpAgA3AwAgAUEsaiACEJMQIAFBHGogAiACQYABakEsEPYGEIkaCyAEQeAAaiABENAjDAcLIABBBGogARDHKyAAQQhqIAEQ3ysMBgsgAEEEaiABEMcrIABBCGogARDfKwwFCyACQRRqQdiY4wApAwAiCDcCACACQQA7AT4gAkEANgI0IAJCgICAgIABNwIsIAJBAToAKCACQQA2AiQgAkKAgICAwAA3AhwgAkEANgIIIAJCgICAgIABNwIAIAJB0JjjACkDACIJNwIMIAIgAS8BPDsBPCACIAEoAjg2AjgCQCAAKAIEIgRBAkYNACAAQQhqIQMgBEEBcUUEQCADIAIQ4CsMAQsgAyACEMcrCyACQSxqIQQgAkEcaiEFIABBGGogAhClJSAAQRxqIAIQpSUgAkGUAWogCDcCACACIAk3AowBIAJBADsBvgEgAiACLwE8OwG8ASACIAIoAjg2ArgBIAJBADYCtAEgAkKAgICAgAE3AqwBIAJBAToAqAEgAkEANgKkASACQoCAgIDAADcCnAEgAkEANgKIASACQoCAgICAATcCgAEgAkGAAWogACgCDBC5ICACQawBaiEGAkACQCACKAK0ASIABEAgAkEMaiAAEOgoIAJBxABqIAIoArABIAIoArQBEJkKIAIgAigCRDYCWCACIAIoAkgiADYCUCACIAAgAigCTEEEdCIDaiIHNgJcA0AgA0UNAiACQYABaiAAKQMAIAAoAggQuBAgA0EQayEDIABBEGohAAwACwALIAJB0ABqIgAgAkGAAWpBLBD2BhogBSAAEIkaIAYQ9yIMAQsgAiAHNgJUIAJB0ABqEIQXIAItAChFBEAgAiACKAK0ARD/HSACIAIoAqwBNgJYIAIgAigCsAEiADYCUCACIAAgAigCtAFBBHQiA2oiBjYCXANAIAMEQCACIAApAwAgACgCCEEBEIYGIANBEGshAyAAQRBqIQAMAQsLIAIgBjYCVCACQdAAaiIAEIQXIAAgAkGAAWpBLBD2BhogBSAAEIkaDAELIAJB2ABqIAZBCGooAgA2AgAgAiAGKQIANwNQIAQgAkHQAGoiABCTECAAIAJBgAFqQSwQ9gYaIAUgABCJGgsCQCACKAI0IgAEQCABQQxqIAAQ6CggAkHQAGogAigCMCACKAI0EJkKIAIgAigCUDYCiAEgAiACKAJUIgA2AoABIAIgACACKAJYQQR0IgNqIgU2AowBA0AgA0UNAiACIAApAwAgACgCCBC4ECADQRBrIQMgAEEQaiEADAALAAsgAkGAAWoiACACQSwQ9gYaIAFBHGogABCJGiAEEPciDAULIAIgBTYChAEgAkGAAWoQhBcgAS0AKEUEQCABIAIoAjQQ/x0gAiACKAIsNgKIASACIAIoAjAiADYCgAEgAiAAIAIoAjRBBHQiA2oiBDYCjAEDQCADBEAgASAAKQMAIAAoAghBARCGBiADQRBrIQMgAEEQaiEADAELCyACIAQ2AoQBIAJBgAFqIgAQhBcgACACQSwQ9gYaIAFBHGogABCJGgwFCyACQYgBaiAEQQhqKAIANgIAIAIgBCkCADcDgAEgAUEsaiACQYABaiIAEJMQIAAgAkEsEPYGGiABQRxqIAAQiRoMBAsgAkEUakHYmOMAKQMAIgg3AgAgAkEAOwE+IAJBADYCNCACQoCAgICAATcCLCACQQE6ACggAkEANgIkIAJCgICAgMAANwIcIAJBADYCCCACQoCAgICAATcCACACQdCY4wApAwAiCTcCDCACIAEvATw7ATwgAiABKAI4NgI4IABBBGogAhCdHCAAQQxqIAIQxysgAkGUAWogCDcCACACIAk3AowBIAJBADsBvgEgAiACLwE8OwG8ASACIAIoAjg2ArgBIAJBADYCtAEgAkKAgICAgAE3AqwBIAJBAToAqAEgAkEANgKkASACQoCAgIDAADcCnAEgAkEANgKIASACQoCAgICAATcCgAEgAkGAAWogACgCEBC5ICACQawBaiEFIAJBLGohBCACQRxqIQYCQAJAIAIoArQBIgAEQCACQQxqIAAQ6CggAkHEAGogAigCsAEgAigCtAEQmQogAiACKAJENgJYIAIgAigCSCIANgJQIAIgACACKAJMQQR0IgNqIgc2AlwDQCADRQ0CIAJBgAFqIAApAwAgACgCCBC4ECADQRBrIQMgAEEQaiEADAALAAsgAkHQAGoiACACQYABakEsEPYGGiAGIAAQiRogBRD3IgwBCyACIAc2AlQgAkHQAGoQhBcgAi0AKEUEQCACIAIoArQBEP8dIAIgAigCrAE2AlggAiACKAKwASIANgJQIAIgACACKAK0AUEEdCIDaiIFNgJcA0AgAwRAIAIgACkDACAAKAIIQQEQhgYgA0EQayEDIABBEGohAAwBCwsgAiAFNgJUIAJB0ABqIgAQhBcgACACQYABakEsEPYGGiAGIAAQiRoMAQsgAkHYAGogBUEIaigCADYCACACIAUpAgA3A1AgBCACQdAAaiIAEJMQIAAgAkGAAWpBLBD2BhogBiAAEIkaCwJAIAIoAjQiAARAIAFBDGogABDoKCACQdAAaiACKAIwIAIoAjQQmQogAiACKAJQNgKIASACIAIoAlQiADYCgAEgAiAAIAIoAlhBBHQiA2oiBTYCjAEDQCADRQ0CIAIgACkDACAAKAIIELgQIANBEGshAyAAQRBqIQAMAAsACyACQYABaiIAIAJBLBD2BhogAUEcaiAAEIkaIAQQ9yIMBAsgAiAFNgKEASACQYABahCEFyABLQAoRQRAIAEgAigCNBD/HSACIAIoAiw2AogBIAIgAigCMCIANgKAASACIAAgAigCNEEEdCIDaiIENgKMAQNAIAMEQCABIAApAwAgACgCCEEBEIYGIANBEGshAyAAQRBqIQAMAQsLIAIgBDYChAEgAkGAAWoiABCEFyAAIAJBLBD2BhogAUEcaiAAEIkaDAQLIAJBiAFqIARBCGooAgA2AgAgAiAEKQIANwOAASABQSxqIAJBgAFqIgAQkxAgACACQSwQ9gYaIAFBHGogABCJGgwDCyACQRRqQdiY4wApAwAiCDcCACACQQA7AT4gAkEANgI0IAJCgICAgIABNwIsIAJBAToAKCACQQA2AiQgAkKAgICAwAA3AhwgAkEANgIIIAJCgICAgIABNwIAIAJB0JjjACkDACIJNwIMIAIgAS8BPDsBPCACIAEoAjg2AjggAEEEaiACEJ0cIABBDGogAhDHKyACQZQBaiAINwIAIAIgCTcCjAEgAkEAOwG+ASACIAIvATw7AbwBIAIgAigCODYCuAEgAkEANgK0ASACQoCAgICAATcCrAEgAkEBOgCoASACQQA2AqQBIAJCgICAgMAANwKcASACQQA2AogBIAJCgICAgIABNwKAASACQYABaiAAKAIQELkgIAJBrAFqIQUgAkEsaiEEIAJBHGohBgJAAkAgAigCtAEiAARAIAJBDGogABDoKCACQcQAaiACKAKwASACKAK0ARCZCiACIAIoAkQ2Algg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NgLUASADQfzZ2AA2AtABIANBATYC3AEgAyADQfQAajYCgAEgA0EDOgCsASADQQg2AqgBIANCIDcCoAEgA0KAgICAwAA3ApgBIANBAjYCkAEgAyADQZABajYC4AEgAyADQYABajYC2AEgA0HcAGogA0HQAWoQ8yQaDBALIA0NCyADQdwAaiABEOAPDA8LIANB0AFqIgEgAygCYCADKAJkQSdB4trYABDOBiADQT42AoQBIANBAjYClAEgA0Hk2tgANgKQAQsgA0IBNwKcASADIAE2AoABIAMgA0GAAWo2ApgBIANB0ABqIANBkAFqEO8UIAMoAtABIAMoAtQBEL4pIAMoAlwgAygCYBC+KSACLQBQRQ0IIAMoAlQhBCADKAJYIQEgA0EINgJoIAMgATYC7AEgAyAENgLoASADQQA2AuABIAMgASAEajYC3AEgAyAENgLYASADQQI2AtABIAMgA0HoAGo2AuQBIANBEGogA0HYAWoiBRDhBiADIAMoAhQ2AtQBIAMgAygCECIGNgLQASAGQQFxBEAgA0EIaiABELsUIAMoAgghByADKAIMIgYgBCABEPYGIQQgAyABNgKIASADIAQ2AoQBIAMgBzYCgAEgA0GoAWogA0HoAWopAgA3AwAgA0GgAWogA0HgAWopAgA3AwAgA0GYAWoiByAFKQIANwMAIAMgAykC0AE3A5ABIANBADYCsAEDQCADKAKQASEEIANBAjYCkAECfyAEQQJHBEAgAygClAEMAQsgAyAHEOEGIAMoAgAhBCADKAIECyEFIARFDQcgAyADKAKwASIIQQFqIgQ2ArABAkAgBCAFaiIERQ0AIAEgBEsEQCAEIAZqLAAAQb9/Sg0BDAsLIAEgBEcNCgsgAygCgAEgAUYEQCADQYABaiABQQEQzwogAygChAEhBgsgBCAGaiIEQQFqIAQgBSAIakF/cyABahC9LRogBEHcADoAACADIAFBAWoiATYCiAEMAAsAC0GAgICAeCEFIAQMBgsgA0HQAWoiARCuHhogARCJHSEBDAkLIANBATYClAEgA0Gw2dgANgKQASADQgE3ApwBIANB1AE2AtQBIAMgAToAgAEgAyADQdABajYCmAEgAyADQYABajYC0AEgA0HcAGogA0GQAWoQ8yQaDAsLIANBATYClAEgA0HU2NgANgKQASADQgE3ApwBIANB1AE2AtQBIAMgAToAgAEgAyADQdABajYCmAEgAyADQYABajYC0AEgA0HcAGogA0GQAWoQ8yQaDAoLIANB3ABqIAEQ4A8MCQsgAyABQYCABGtBCnZBgLADajYCfCADIAFB/wdxQYC4A3I2AnQgA0HLADYCjAEgA0HLADYChAEgA0ECNgLkASADQQI2AtQBIANB0NrYADYC0AEgAyADQfQAajYCiAEgAyADQfwAajYCgAEgA0EDOgDMASADQQg2AsgBIANCoICAgBA3AsABIANCgICAgMAANwK4ASADQQI2ArABIANBAzoArAEgA0EINgKoASADQiA3AqABIANCgICAgMAANwKYASADQQI2ApABIAMgA0GQAWo2AuABIANBAjYC3AEgAyADQYABajYC2AEgA0HcAGogA0HQAWoQ8yQaDAgLIAMoAoABIQUgAygCVCEEIAMoAoQBCyIGIAFB6rLgAEEEQe6y4ABBBxDGBCADQdABaiADKAKUASIBIAMoApgBQfWy4ABBA0H4suAAQQYQxgQgAygCUCAEEL4pIANB2ABqIANB2AFqKAIANgIAIAMgAykC0AE3A1AgAygCkAEgARC+KSAFIAYQnCQMAQtBhNfYAEEsQbDX2AAQ4RcACyADQZABaiACQQBBACADKAJUIgEgAygCWBCNDwJAIAMtAJABQQRHBEAgAykDkAEiDkL/AYNCBFINAQsgAygCUCABEL4pIABBBDoAAAwHCyAAIA43AgAgAygCUCABEL4pDAYLIANBATYClAEgA0HU2NgANgKQASADQgE3ApwBIANB1AE2AtQBIAMgAToAgAEgAyADQdABajYCmAEgAyADQYABajYC0AEgA0HcAGogA0GQAWoQ8yQaDAMLAkACQAJAAkAgAQRAIAEoAgBBIHJB5ABGDQELIAkNASADQdwAakHcABDgDwwGCyADQQA2ApgBIANCgICAgBA3ApABIANBkAFqIgRB3AAQ4A8gBEH1ABDgDyAJDQEMAgsgA0HcAGpB3NnYAEECEN0dDAQLIANBkAFqQfsAEOAPCyADQZABaiABKAIAEOAPIANB0AFqEK4eGkEDIQQCQAJAAkACQAJAAkADQCAERQRAIAlFDQIMAwsgA0HQAWoQrh4iAUGAgMQARiABQTBrQQpJIAFB4QBrQQZJckUgAUHBAGtBBUtxckUEQCADQZAB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IAkgCkE6EOgGQQEhBSADKAJAQQFGBEAgA0EgaiAJIAogAygCRCIBQZSnxAAQmRUgA0GAAWogAygCICADKAIkEKYRIANBGGogCSAKIAFBAWpBpKfEABC1FCADQcABaiADKAIYIAMoAhwQphEgAzUCiAEgAzUCwAFCIIaEIRwgAykCxAEhHSADKAKEASEHIAMoAoABIQEgA0HgAGoMAgsgA0E4aiAJIApBPRDoBiADKAI4QQFGBEAgA0EwaiAJIAogAygCPCIBQbSnxAAQmRUgA0GAAWogAygCMCADKAI0EKYRIANBKGogCSAKIAFBAWpBxKfEABC1FCADQcABaiADKAIoIAMoAiwQphEgAzUCiAEgAzUCwAFCIIaEIRwgAykCxAEhHSADKAKEASEHIAMoAoABIQFBACEFIANB4ABqDAILIANBwAFqIAkgChCmESADKQLEASEcIAMoAsABIQdBACEFQYGAgIB4IQEgA0HgAGoMAQsgA0EQaiAJIAogB0H0psQAEJkVIANBgAFqIAMoAhAgAygCFBCmEUECIQUgA0EIaiAJIAogB0ECakGEp8QAELUUIANBwAFqIAMoAgggAygCDBCmESADNQKIASADNQLAAUIghoQhHCADKQLEASEdIAMoAoQBIQcgAygCgAEhASADQeAAagshBiADQaABaiIEIAZBCGooAgAiCTYCACADQawBaiALQdgAaigCADYCACAIIAU6ABwgCCAdNwIUIAggHDcCDCAIIAc2AgggCCABNgIEIAggBikCACIcNwIgIANBuAFqIAk2AgAgAyALKQJQNwKkASAIQShqIAQpAwA3AgAgCEEwaiADQagBaikDADcCACADIBw3A7ABIAMgHDcDmAEgCEEiNgIAIAggE0HQAEY6ADgLIBEgESgCAEEBajYCACADQYACaiQAIAIoAqQCIQEgAkGYAWoiBSACQagCakE4EPYGGiABQSJGDQQgAigC4AIhBiAAQQRqIAVBOBD2BhogACAGNgI8DAULIAJBmANqIAEQ4AogAkGcAmogAkGsA2ooAgA2AgAgAkGQAmogAkEYaigCADYCACACIAIpAqQDNwKUAiACIAIpAxA3A4gCIAJBIDYCmAEgAkGkAmoiBSABKAIEIAEoAgggAkGIAmogAkGYAWoQkw8gACAFQcAAEPYGGgweC0EBIAN0QeubgIABcUUNBgwHCyAELQBlRQRAIAJBmANqIAEQ4AogAkGcAmogAkGsA2ooAgA2AgAgAkGQAmogAkEYaigCADYCACACIAIpAqQDNwKUAiACIAIpAxA3A4gCIAJBIDYCmAEgAkGkAmoiBSABKAIEIAEoAgggAkGIAmogAkGYAWoQkw8gACAFQcAAEPYGGgwdCyACQSBqIQYjAEEgayIFJAACQAJAIAEoAgAiBC0AZQRAIAEQvAxBMEkNASABELwMQThPDQEgBCkCVCEcIAQoAlAhAwNAIAEQ8AhFDQMgARC8DEEwSQ0DIAEQvAxBN0sNAyAEKAJQIANrQQNJDQALDAILQfChxABBJUGYosQAEOEXAAtBqKLEAEE6QeSixAAQ4RcACyAEKQJUIR0gBUEIaiABKAIEIAEoAgggAyAEKAJQIgFB9KLEABD2DSAFQRRqIAUoAgggBSgCDEEIEMEEAkACQCAFLQAUQQFHBEAgBSgCGCIEQYCwA3NBgIDEAGtB/4+8f00NASAGQQM6ABwgBiAdNwIUIAYgATYCECAGIBw3AgggBiADNgIEIAYgBDYCACAFQSBqJAAMAgsgBSAFLQAVOgAfQYSjxABBEiAFQR9qQZiYxABBmKPEABDDDgALQaijxABBFEG8o8QAEKYSAAsgAkEsaiACQRhqKAIANgIAIABCooCAgKCAgICAfzcCACAAQRhqIAJBMGopAgA3AgAgAEEgaiACQThqKQIANwIAIAIgAikDEDcCJCAAIAIpAiA3AgggAEEQaiACQShqKQIANwIADBwLIAJBADYCpAIgAkEMakGoocQAIAJBpAJqQayhxAAQ1hoACyACQeAAaiIFIAJBmAFqQTgQ9gYaIAJBhAFqIAJBGGooAgA2AgAgAiACKQMQNwJ8IABBBGogBUE4EPYGGgsgACABNgIADBkLIAJByABqIgMgASkDADcDACACQdAAaiAFKQMAIhw3AwAgAkHYAGogBikDACIdNwMAIAJBzABqIAJBGGooAgA2AgAgAiACKQOYATcDQCAAQYKAgIB4NgIEIABBGGogHDcCACAAQSBqIB03AgAgAiACKQMQNwJEIAAgAikDQDcCCCAAQRBqIAMpAwA3AgALIAAgBDYCAAwXCyAFQdsAa0EESSAFQfsAa0EESXINACAFQTBrQQpJIAVB/wBLciAFQcEAa0EaSSAFQeEAa0EaSXJyRSAFQf0AcUE8R3ENAiAFQTxrDgcPBBAEBAsOAQsgACACKQPwATcCDCAAQQE6ACQgACAFNgIIIABCooCAgKCAgICAfzcCACAAQRxqIAJBgAJqKQMANwIAIABBFGogAkH4AWopAwA3AgAMFQsCQCAFQfIAaw4JCAMGAwkDAwMLAAsgBUHhAGsOBgMLAgICBAELIAAgAikD8AE3AgwgAEECOgAkIAAgBTYCCCAAQqKAgICggICAgH83AgAgAEEcaiACQYACaikDADcCACAAQRRqIAJB+AFqKQMANwIADBMLIAVB7gBGDQQLIAJBCzYCmAEgAkGkAmoiBSABKAIEIAEoAgggAkHwAWogAkGYAWoQkw8gACAFQcAAEPYGGgwRCyAAIAIpA/ABNwIMIABBBjsBJCAAQQc2AgggAEKigICAoICAgIB/NwIAIABBHGogAkGAAmopAwA3AgAgAEEUaiACQfgBaikDADcCAAwQCyAAIAIpA/ABNwIMIABBhgI7ASQgAEEMNgIIIABCooCAgKCAgICAfzcCACAAQRxqIAJBgAJqKQMANwIAIABBFGogAkH4AWopAwA3AgAMDwsgACACKQPwATcCDCAAQYYEOwEkIABBCTYCCCAAQqKAgICggICAgH83AgAgAEEcaiACQYACaikDADcCACAAQRRqIAJB+AFqKQMANwIADA4LIAAgAikD8AE3AgwgAEGGBjsBJCAAQQo2AgggAEKigICAoICAgIB/NwIAIABBHGogAkGAAmopAwA3AgAgAEEUaiACQfgBaikDADcCAAwNCyAAIAIpA/ABNwIMIABBhgg7ASQgAEENNgIIIABCooCAgKCAgICAfzcCACAAQRxqIAJBgAJqKQMANwIAIABBFGogAkH4AWopAwA3AgAMDAsgACACKQPwATcCDCAAQYYKOwEkIABBCzYCCCAAQqKAgICggICAgH83AgAgAEEcaiACQYACaikDADcCACAAQRRqIAJB+AFqKQMANwIADAsLIAAgAikD8AE3AgggAEECOgAgIABCooCAgLCAgICAfzcCACAAQRhqIAJBgAJqKQMANwIAIABBEGogAkH4AWopAwA3AgAMCgsgACACKQPwATcCCCAAQQM6ACAgAEKigICAsICAgIB/NwIAIABBGGogAkGAAmopAwA3AgAgAEEQaiACQfgBaikDADcCAAwJCyACQZgCaiIKIAJBgAJqKQMANwMAIAJBkAJqIgsgAkH4AWopAwA3AwAgAiACKQPwATcDiAJBBCEFIAEoAggiAyAGKAIARg0HIAEQvAxB+wBHDQcgAiABELwMIgc2AuQCIAdB+wBHDQQgAkHwAmogBkEIaiIHKAIANgIAIAIgBikCADcD6AIgARCcHg0DIAJBrANqIAcoAgA2AgAgAkGgA2ogAkEYaigCADYCACACIAIpAxA3A5gDIAIgBikCADcCpAMgAkEeNgKYASACQaQCaiABKAIEIAMgAkGYA2ogAkGYAWoQkw8MBgsgACACKQPwATcCCCAAQQU6ACAgAEKigICAsICAgIB/NwIAIABBGGogAkGAAmopAwA3AgAgAEEQaiACQfgBaikDADcCAAwHCyAAIAIpA/ABNwIIIABBCDoAICAAQqKAgICwgICAgH83AgAgAEEYaiACQYACaikDADcCACAAQRBqIAJB+AFqKQMANwIADAYLIAAgAikD8AE3AgggAEEJOgAgIABCooCAgLCAgICAfzcCACAAQRhqIAJBgAJqKQMANwIAIABBEGogAkH4AWopAwA3AgAMBQsgAkGAA2ogBygCADYCACACIAYpAgA3A/gCIAEQvAwiB0EtRiAHQd///wBxQcEAa0EaSXJFBEAgBiACKQPoAjcCACAGQQhqIAJB8AJqKAIANgIADAQLIAIgBEFAa0G8ocQAEKUdIAIoAgQhBCACKAIAIgdBADYCCANAAkACQAJAAkAgBigCACADRg0AIAEQvAwiCEEtRiAIQd///wBxQcEAa0EaSXINAyAGKAIAIANGDQAgARC8DEH9AEYNAQsgAkGsA2ogBkEIaigCADYCACACQaADaiACQfACaigCADYCACACIAIpA+gCNwOYAyACIAYpAgA3AqQDIAJBHDYCmAEMAQsgAkGQA2ogBkEIaigCADYCACACIAYpAgA3A4gDIAEQ8AgaIAcoAgQiCCAHKAIIIglB+azEAEEFENIfBEBBBiEHDAULIAggCUH+rMQAQQMQ0h8EQEEHIQcMBQtBCiEHIAggCUHMocQAQQoQ0h8NBCAIIAlB1qHEAEEIENIfBEBBCyEHDAULIAJBoANqIAJBgANqKAIANgIAIAJBrANqIAJBkANqKAIANgIAIAIgAikD+AI3A5gDIAIgAikDiAM3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BSACQfgCaikDADcDACACQagDaiIDIA4pAwA3AwAgAiACKQPoAjcDoAMgBhDuJCAGQgA3AwAgBiACKQOgAzcDCCAGQRBqIAMpAwA3AwAgBkEYaiAFKQMANwMADAQLIAIpA+gCEN0aDAMLIAIoAqQBIAZBEGoQ9QUaDAILIAIoAqQBIAZBEGoQ9QUaDAELIBYgAkGQAWoQhyQMDQsgBkHIAGohBiAEQcgAayEEDAALAAsgAkEUahDIFyACQQhqIAAQyxcgARD1JiABQQhqIAJBEGooAgA2AgAgASACKQIINwIAIAJB4ANqJAAPCyACKAKMASEHIAIoAogBIQoCQAJAAkACQCACKAJgDgMBAgAMCyACKAJkIgQoAgghBSAEQQA2AgggBCgCBCEDIARBCDYCBCAEKAIAIQggBEEANgIAIAJBADYCsAEgAkKAgICAgAE3AqgBIAUhBiADIQQDQCAGRQ0DIAJBsAJqIg0gBEE4EPYGGiACQaADaiIbIA1BOBD2BhogAiACQagBajYC3AMgAiACQZABaiIcNgLYAyAbIAJB2ANqEL4JIAIoAtADIg0EQCANIBwQ9AILIAJB6AJqIg0gAkGgA2pBOBD2BhogBkEBayEGIAQgDUE4EPYGQThqIQQMAAsACyACQagBaiIEIA8QzRQgAiAZEJ4TIgM2AtgDIAMgAkGQAWoiBhDQBSACQbACaiAEELwbAkAgAigCpAEgBBD1BUUEQCACQaADaiIIIAQQvBsgAkHYA2oQnhMhBSASIAIpA6ADNwIAIBJBCGogAkGoA2opAwA3AgAgEkEQaiACQbADaikDADcCACACLQCEASEDIAJB2ABqEKgIIAwgAikC+AE3AgAgDEEIaiACQYACaikCADcCACAMQRBqIAJBiAJqKQIANwIAIAxBGGogAkGQAmooAgA2AgAgAkEANgJoIAJBETYCYCACQQk2AlggAiADOgCMASACIAU2AogBQdAAQQgQkSAhAyACQegCaiAEEM0UIANCADcDACADQgA3AyAgA0IANwNAIANByABqQQA6AAAgAyACKQPoAjcDCCADQRBqIA4pAwA3AwAgA0EYaiACQfgCaikDADcDACADIAIpA7ACNwMoIANBMGogAkG4AmopAwA3AwAgA0E4aiACQcACaikDADcDACALQgA3AwAgC0EIakEAOgAAIAJBATYC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ICNCIIinIQMgI0IIiKchEyAjpyEUQQEhEiAFIQEMAAsACwALCyAVIAFBwKbAABChEAALIAwgAUHwpcAAEKEQAAsgECABQdClwAAQoRAAC0EBIQULIAJBoAFqJAAgBQ8LIA8gCUHgi8QAEJ8QAAvRFwIKfwV+IwBBQGoiAiQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAALQAAQQFrDgUAAQIDBQQLIAJBCGoiBSABKAIAQZm24ABBlLbgACAALQABIgAbQQRBBSAAGxC3GyAFENUYIQEMDAsCQAJAAkAgACgCCEEBaw4CAQIAC0EUIQMgACkDECINQpDOAFQEQCANIQwMDQsDQCACQQhqIANqIgBBBGsgDSANQpDOAIAiDEKQzgB+faciBUH//wNxQeQAbiIEQQF0QfCN2ABqLwAAOwAAIABBAmsgBSAEQeQAbGtB//8DcUEBdEHwjdgAai8AADsAACADQQRrIQMgDUL/wdcvViAMIQ0NAAsMDAtBFCEDIAApAxAiDiAOQj+HIgyFIAx9Ig1CkM4AVARAIA0hDAwLCwNAIAJBCGogA2oiAEEEayANIA1CkM4AgCIMQpDOAH59pyIFQf//A3FB5ABuIgRBAXRB8I3YAGovAAA7AAAgAEECayAFIARB5ABsa0H//wNxQQF0QfCN2ABqLwAAOwAAIANBBGshAyANQv/B1y9WIAwhDQ0ACwwKCyAAKQMQIgxC////////////AINC//////////f/AFgEQCAMQv////////8HgyENIAxCNIinIQAgDEIAUw0FIAJBCGohBQwJCyACQQhqIgAgASgCABDxKSAAENUYIQEMCwsgASgCACAAKAIIIAAoAgwQ+xshAQwKCyABIABBBGoQ7wohAQwJCyABKAIAEIgdIQEMCAsgAkEIaiABIAAoAgwiARCcDSACLQAMIgpBA0YNASACKAIIIQkgACgCCCEDIAIgAUEAIAAoAgQiABsiCzYCKCACIAM2AiQgAiAANgIgIAJBADYCHCACIABBAEciCDYCGCACIAM2AhQgAiAANgIQIAJBADYCDCACIAg2AghBACEAA0AgC0UNBCACIAtBAWsiCzYCKAJAIAhFIAByRQRAIAIoAhAhAANAIAMEQCADQQFrIQMgACgCmAMhAAwBBSACQgA3AhAgAiAANgIMQQEhCEEA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ARC8G0IADAELIBMgARDrHUIBCzcDQEEDIQEgBC0ARUEDRwRAIAJB4ABqIgEgBEEgahDaDSACQRhqIAFBJRD2BhogAi8BhgEhIyACLQCFASEBCyACQcgBaiACQdgAaikDADcDACACQcABaiACQdAAaikDADcDACAHIBMpAwA3AwAgAiACKQNANwOwASAWIAJBGGpBJRD2BhogBiACQbABakHFABD2BiIEIAk6AFEgBCAFOgBQIAQgCzYCTCAEIAw2AkggBCAjOwFGIAQgAToARQsgJCEQICUhBSAmIQkgJyEMICghCyApDA0LIAMoAgghCyADKAIUIQkgAygCECEFIAJBCGogAygCDCIGQQhB0AAQ7BQgBkHQAGwhDEEAIQEgAigCDCEPIAIoAggiCCEKA0AgCkUgASAMRnJFBEACQAJAAkACQEICIAEgC2oiBCkDAEICfSIvIC9CAlobp0EBaw4CAQIACyAEQShqKQIAIS8gAkGwAWoiDSAEQQhqENYYIAIgLzcD0AEgEiANQSgQ9gYaIAJCAjcDYAwCCyASIARBCGoQvBsgAkIDNwNgDAELIARBQGspAgAhLyACQbABaiINIAQQ1hggFiAEQSBqEKUgIAIgLzcD8AEgAiAEQcgAai0AADoA+AEgAkHgAGogDUHQABD2BhoLIAEgD2ogAkHgAGpB0AAQvS0aIApBAWshCiABQdAAaiEBDAELCyADKAIYIgEEfyABEIgRBUEACyEEIAMtACAhCyADQRxqEKsOIQwMCQsgAygCNCEKIAMoAjAhDQJAAkACQAJAIAMoAggiD0EBaw4CAQIACyACQbABaiADQRBqEKYgIAIgA0EoahD6CzYCyAEMAgsgAkGwAWogA0EQahCmICACIANBKGoQ+Qs2AsgBDAELIANBDGoQkwshBgsgAiACLwHCATsBGCACLQDBASEQIAItAMABIQsgAigCvAEhDCACKAK4ASEEIAIoArQBIQkgAigCsAEhBSACKALEASEBIAIpA8gBIS8MDAsgAygCDCEGIAMoAgghDyADQQRqEN8cIQgMBwsgAygCDCEGIAMoAgghDyADKAIEEIgRIQggAy0AFCADQRBqEKsOIQUgMCEvICpBgH5xciIJISogHAwHC0EIQcgAEJsoIghFDQQgAygCBCIBLQBBIQogAS0AQCENIAEoAiQhFCABKAIgIREgAkHgAGogAUEoahC8GwJAIAEpAwBQBEAgByABQQhqEL8LIAJCADcDsAEMAQsgASkDGCEvIAJBsAFqIAEQ6x0gAiAvNwPIAQsgCCACKQOwATcDACAIIBQ2AiQgCCARNgIgIAggAikDYDcDKCAIIAo6AEEgCCANOgBAIAhBGGogAkHIAWopAwA3AwAgCEEQaiACQcABaikDADcDACAIQQhqIAcpAwA3AwAgCEEwaiASKQMANwMAIAhBOGogAkHwAGopAwA3AwAMBQsgAygCDCEGIAMoAgghDyADQQRqEN8cIQgMBAsgAykCCCEvIAcgA0EQahC8GyACIAIvAcoBOwEYIC9CIIinIQYgAigCuAEhBSACKAK8ASEJIAIoAsABIQQgAigCxAEhDCACLQDIASELIAItAMkBIRAgL6chDyAwIS8gAigCzAEMBAsgAkGwAWogA0EIahBvIAIgAi8BygE7AWAgAi0AyAEhESACKALEASEdIAIoAsABIR4gAigCvAEhHyACKAK4ASEgIAIpA7ABITEgAigCzAEhASACKQPQASEvIAIoAtgBIQ0gAigC3AEhCiACLQDJAQwHCyAAIBk2AgggACAaNgIEIAAgIjYCACACQYACaiQADwsACyAwIS8gHAshASArIQogLCENDAILIAIgAToAzAEgAiACLwHCATsBYCACKAKwASEFIAIoArQBIQkgAigCvAEhDCACLQDAASELIAItAMEBIRAgAigCxAEhLSACKQPIASEyIC4hBiACKAK4AQshBCACIAIvAWA7ARggECEkIDIhLyAtIQEgBiEuIAUhJSAJISYgBCEpIAwhJyALISgLIAIgAi8BGDsBYCAPrSAGrUIghoQhMSAvITAgASEcIAUhICAJIR8gBCEeIAwhHSALIREgCiErIA0hLCAQCyEUIBdBAWshFyADQThqIQMgAiACLwFgOwGwASAaIBhBOGxqIg4gFDoAISAOIBE6ACAgDiAdNgIcIA4gHjYCGCAOIB82AhQgDiAgNgIQIA4gMTcCCCAOIAg2AgQgDiAbNgIAIA4gCjYCNCAOIA02AjAgDiAvNwIoIA4gATYCJCAOIAIvAbABOwAiIBhBAWohGAwACwALzBkCDn8CfiMAQbACayICJAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJA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EOUkIQsgAS0APCEMIAFBNGoQlw8hDQJAIAEoAjgiBUUEQAwBCxDbIiEDIAUoAgwhDiAFKAIQIQ8gAkEgaiAFEKINIANBEGogDzYCACADIAIpAiA3AgAgAiAONgIsIANBCGogAkEoaikCADcCAAsgAkE4aiABQRhqEPwKIAJBKGogAkGYAmooAgA2AgAgAkE0aiACQagBaigCADYCACACIAc2AkwgAiAJNgJIIAIgCjYCRCACIAw6AFwgAiALNgJQIAIgAzYCWCACIA02AlQgAiACKQKQAjcDICACIAIpAqABNwIsIAQgAkEgakHAABD2BhoMBwsgAkHoAWogAUEQahC8GyABLQAsIQYQ2iIhBCACQYQCaiABKAIoIgEQigwgAkGQAmogAUEMahDFCyABKAI4IQUgASgCNCEHIAEoAjAhCSACQaABaiABQRhqEKMgIAEtAEUhCiABLQBEIQsgAUE8ahCXDyEMAkAgASgCQCIBRQRADAELENgiIQMgASkCBCEQIAEQ4RkhASADIBA3AgQgAyABNgIACyACQShqIAJBjAJqKAIANgIAIAJBNGogAkGYAmooAgA2AgAgAkFAayACQagBaikCADcDACACQcgAaiACQbABaikCADcDACACIAIpAoQCNwMgIAIgAikCkAI3AiwgAiACKQKgATcDOCAEIAJBIGpBMBD2BiIBIAo6AEUgASALOgBEIAEgAzYCQCABIAw2AjwgASAFNgI4IAEgBzYCNCABIAk2AjAMBgsgAUEMahDcDCEDDAULIAFBDGoQhQ8hAwwECxDiIiEDIAEoAgwiASkDACEQIAJBKGogAUEIahC8GyABLQBEIQQgAUEgahCXDyEGIAJB2ABqIAFBOGoQ/AogASgCMCEFIAEoAjQhByACQaABaiABQSRqEJIDIAJB1ABqIAc2AgAgAiAFNgKsASACQcwAaiACQagBaikCADcCACACIAQ6AGQgAiAQNwMgIAIgBjYCQCACIAIpAqABNwJEIAMgAkEgakHIABD2BhoMAwsQ4CIhAyABKAIMIgEpAwAhECABLQAoIQQgAkEoaiABQQhqELwbIAFBIGoQlw8hBiABQSRqEOEZIQEgAiAEOgBIIAIgEDcDICACIAE2AkQgAiAGNgJAIAMgAkEgakEwEPYGGgwCCxDgIiEDIAEoAgwiASkDGCEQIAEvASwh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AgAgACAEKQPYATcDCCAAIAI6ACQgACAFNgIgIAAgBC8B1AE7ACUgAEEQaiAEQeABaikDADcDACAAQRhqIARB6AFqKQMANwMAIABBJ2ogBEHWAWotAAA6AAAMDwsgBCgCjAEhASAAQQk2AgAgACABNgIEDA4LIARB8AFqIAEgBCgCJCIBIAEgA0EAEIIEIAQoAvABIgZBCEcEQCAEQfgBaiEDIAQoApACIQECQCAGRQRAIARBkAFqIAFBCGooAgA2AgAgBEGcAWogAUEUaigCADYCACAEQagBaiABQSBqKAIANgIAIAQgASkCADcDiAEgBCABKQIMNwKUASAEIAEpAhg3A6ABIAEpAighCiABKQIwIQsgASgCOCEHIAEtADwhCCAEKAIoIQlBwABBBBCRICICIARBiAFqQSQQ9gYiBSAIOgA8IAUgBzYCOCAFIAs3AjAgBSAKNwIoIAUgCTYCJCAEQcABaiADQQhqKQMANwMAIARByAFqIANBEGopAwA3AwAgBCADKQMANwO4ASABEIArQQEhBQwBCyAELQCUAiEFIARBwAFqIANBCGopAwA3AwAgBEHIAWogA0EQaikDADcDACAEQbYBaiAEQZcCai0AADoAACAEIAQvAJUCOwG0ASAEIAMpAwA3A7gBIAQoAvQBIQMgASECCyAAIAM2AgQgACAGNgIAIAAgBCkDuAE3AwggACAFOgAkIAAgAjYCICAAIAQvAbQBOwAlIABBEGogBEHAAWopAwA3AwAgAEEYaiAEQcgBaikDADcDACAAQSdqIARBtgFqLQAAOgAADA4LIAQoAvQBIQEgAEEJNgIAIAAgATYCBAwNCyACEOUNIgNFBEAgASgC2AIhASAEQQA6APABIAEgASAEQfABahDwFCEBIABBCTYCACAAIAE2AgQMDAsgAygCAEEkRgRAIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRw0FIAEoAiwhASAAQQk2AgAgACABNgIEDAwLIAEoAighAyABQSU2AiggASABKQNANwN4IARB/AFqIAFBNGopAgA3AgAgBEGEAmogAUE8aigCADYCACAEIAEpAiw3AvQBIAQgAzYC8AEgBEHwAWoQvwogAhDlDSIDRQ0DIAMoAgBBJEYEQCABIAEpA0A3A3ggASgCKCABQSU2AihBJEcNBiABKAIsIQEgAEEJNgIA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IAgoAgBBAkcNACAILQAIQQJHDQAgCC0ACUEMRg0BC0EAIQogAkEAOgDdASACIAEpAaoCNwDDASACIAEpAbICNwDLASACIAEpAboCNwDTASACIAEvAcICOwDbASACIAEvAMUCOwDeASACQfkBaiADQRVqKQAANwAAIAJB9AFqIANBEGopAQA3AgAgAkHsAWogA0EIaikBADcCACACIAMpAQA3AuQBIAQgAkHDAWoQxwggAiABNgLgASACQcACaiABEIEqIAIoAsQCIQggAigCwAIiBUETRwRAIAJBmAFqIAJByAJqQSgQ9gYaIAJB4AFqEPUkDAwLIABBADYCACAAIAg2AgQgAkHgAWoQ9SQMCgsgAiAQOgD8ASACIBE6APsBIAJBAToA+gEgAiASOgD5ASACIBM6APgBIAIgFDoA9wEgAiAVOgD2ASACIBY6APUBIAIgFzoA9AEgAiAYOgDzASACIBk6APIBIAIgGjoA8QEgAiAbOgDwASACIBw6AO8BIAIgHToA7gEgAiAeOgDtASACIB86AOwBIAIgIDoA6wEgAiAhOgDqASACICI6AOkBIAIgIzoA6AEgAiAkOgDnASACICU6AOYBIAIgJjoA5QEgAiAnOgDkASACICg6AOMBIAIgKToA4gEgAiAqOgDhASACICs6AOABIAlBFWogA0EVaikAADcAACAJQRBqIANBEGopAQA3AQAgCUEIaiADQQhqKQEANwEAIAkgAykBADcBACAEIAJB4AFqEMcIIAIgATYCwAIgAkGEAmogARCCASACKAKIAiEGIAIoAoQCIghFDQYgAkGgAmoiCiAPQQhqKAIANgIAIAIgDykCADcDmAIgAkHAAmoQ9SQgAigChAEEQEEwQQgQkSAiBSAGNgIIIAUgCDYCBCAFQQg2AgAgBSACKQOYAjcCDCAFQRRqIAooAgA2AgAgASgCnAMgAkGEAWogBRC9EgUgAkGEAWoQ7CYgDiACKQOYAjcCACAOQQhqIAooAgA2AgAgAiAGNgKIASACIAg2AoQBCwwACwALIABBADYCACAAIAs2AgQMCwsgASABKQPgAjcDmAMgASgCyAIgAUElNgLIAkEkRw0EIAEgASgCzAIQ+wsMCQsgASABKQPgAjcDmAMgASgCyAIgAUElNgLIAkEkRw0EIAEgASgCzAIQ+wsMCgtB2eTgAEEoQdiX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QCAHEOUNIgMEQCADKAIAQRdGDQELIAJB8ARqIA1BCGopAwA3AwAgAkH4BGogDUEQaikDADcDACACQYAFaiANQRhqKQMANwMAIAIgDSkDADcD6AQgBiABKAJ8IgMgAyAGSxshFiAGIAMgAyAGSRshFSACKAKMBSEFIAIoAogFIQkMAQsgCiALKQIANwIAIAEoAighAyABQSU2AiggASABKQNANwN4IApBCGogC0EIaikCADcCACAKQRBqIAtBEGooAgA2AgAgAiADNgL4CCACQfgIahC/CiACQfAEaiANQQhqKQMANwMAIAJB+ARqIA1BEGopAwA3AwAgAkGABWogDUEYaikDADcDACACIA0pAwA3A+gEIAEoAnwhECACKAKIBSEJIAIoAowFIQVB2ABBCBCRICIDIAYgECAGIBBLGyIVNgIMIAMgBiAQIAYgEEkbIhY2AgggAyAENgIEIANBCDYCACADIQQLIAlBCEYNGyACQeAEaiIQIAJBgAVqKQMANwMAIAJB2ARqIhQgAkH4BGopAwA3AwAgAkHQBGoiFyACQfAEaikDADcDACACIAIpA+gENwPIBCACKALEBCITIAIoArwERgRAIAJBvARqEP0WCyACKALABCIGIBNBOGxqIgMgBTYCBCADIAk2AgAgAyACKQPIBDcCCCADIAQ2AjAgAyAVNgIsIAMgFjYCKCADQRBqIBcpAwA3AgAgA0EYaiAUKQMANwIAIANBIGogECkDADcCACACIBNBAWoiCTYCxAQCQCAHEOUNIgMEQCADKAIAQRBGDQELIAJB+AhqIAFBAhDMCCACLQD4CA0BIAItAPkIDR0gBxDlDSIDBEAgAygCAEEQRg0DCyACQYAJaiAHEOYLIAJBsAFqIAcQpBQgAkGIvuAANgL8CCACQTQ6APgIIAIoArABIAIoArQBIAJB+AhqEPAUIQUgBxDlDSIDRQ0cIAMoAgBBJEcNHCABIAEpA0A3A3ggASgCKCABQSU2AihBJEcNAyABIAEoAiwQggwMHAsgCiALKQIANwIAIAEoAighAyABQSU2AiggASABKQNANwN4IApBCGogC0EIaikCADcCACAKQRBqIAtBEGooAgA2AgAgAiADNgL4CCACQfgIahC/CiAEIQMMAwsgAigC/AghBQwaCyAKIAspAgA3AgAgASgCKCEDIAFBJTYCKCABIAEpA0A3A3ggCkEIaiALQQhqKQIANwIAIApBEGogC0EQaigCADYCACACIAM2AvgIIAJB+AhqEL8KIAQhAwwBCwtB2eTgAEEoQbDr3wAQ4RcAC0HZ5OAAQShBuOTfABDhFwALIAIgBSAGIAUgBksbNgKECSACIAQ2AoAJIAIgAzYC/AhBDQwbC0HZ5OAAQShBuOnfABDhFwALQdnk4ABBKEGo6d8AEOEXAAsgBS0ABEEMRw0ZIAcQxCAhBCACQYQJaiABQTRqKQIANwIAIAJBjAlqIAFBPGooAgA2AgAgASgCKCEDIAFBJTYCKCABIAEpA0A3A3ggAiABKQIsNwL8CCACIAM2AvgIIAJB+AhqIgUQvwogBxDlDSIDRQRAIAEoAtgCIQMgAkEAOgD4CCADIAMgBRDwFCEDQQEhBQwcCwJAAkACQAJAIAMoAgAiA0Eda0ECTwRAIANBJEYEQCABIAEpA0A3A3ggASgCKCABQSU2AihBJEYNIEHZ5OAAQShB+OTfABDhFwALIAJBhAlqIAcQ5gsgAkGoAmogBxCkFCACQSE2AoAJIAJBiOXfADYC/AggAkEwOgD4CCACKAKoAiACKAKsAiACQfgIahDwFCEDQQEhBSAHEOUNIgRFDSAgBCgCAEEkRw0gIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRw0BIAEgASgCLBCCDAwgCyACQfgIaiABEMUCIAIoAvgIIgNBB0YNCyACKAKQCSEGIAIpA4gJIScgAigChAkhByACKAKACSEKAkACQAJAIANBA2sOAgECAAtB2eTgAEEoQdzl3wAQ4RcACyACNQKUCSEoIAIgJzcD4AIgAkGwBWoiA0GY3OAAQQEQsBUCfCAGrSAoQiCGhCIoUEUEQCACICg3A/gIIAJBsAJqIAJB+AhqEJEMIAMgAigCsAIgAigCtAIQ3R0gAikD+AgQ3RogJ78MAQsgAkEBNgL8CCACQcjv4AA2AvgIIAJCATcChAkgAkH0ATYC7AIgAiACQegCajYCgAkgAiACQeACajYC6AIgAkGwBWogAkH4CGoQ8yQNAyACKwPgAgsgAkGACWogAkG4BWooAgA2AgAgAiACKQKwBTcD+AggAkH4CGoQkRkiKEKAgICAcIMhJ5ohKSAopyEGQYCAgIB4IQkMBAsgAiAGNgKIBSACQbAFaiIDQZjc4ABBARCwFQJAICdQRQRAIAIgJzcD+AggAkG4AmogAkH4CGoQkQwgAyACKAK4AiACKAK8AhDdHSACKQP4CBDdGgwBCyACQQE2AvwIIAJByO/gADYC+AggAkIBNwKECSACQbgCNgLsAiACIAJB6AJqNgKACSACIAJBiAVqNgLoAiACQbAFaiACQfgIahDzJA0DIAIoAogFIQYLIAJBgAlqIgMgBkEIaigCADYCACACQeoCaiIFIAZBD2otAAA6AAAgAiAGKQIANwP4CCACIAYvAA07AegCIAYtAAwhCUEQQQQQkSAiBkECIAlrOgAMIAZBCGogAygCADYCACAGIAIpA/gINwIAIAYgAi8B6AI7AA0gBkEPaiAFLQAAOgAAIAMgAkG4BWooAgA2AgAgAiACKQKwBTcD+AggAkH4CGoQkRkgAigCiAUQ+iq/ISlCACEnQYOAgIB4IQkMAwtB2eTgAEEoQazl3wAQ4RcAC0GU4+AAQSsgAkH4CGpB1KfgAEG85d8AEMMOAAtBlOPgAEErIAJB+AhqQdSn4ABBzOXfABDDDgALIAEoAnwhBUHYAEEIEJEgIgMgJyAGrYQ3AyAgAyApOQMYIAMgBzYCFCADIAo2AhAgAyAJNgIIIANBETYCACADIAQgBSAEIAVLGzYCLCADIAQgBSAEIAVJGzYCKAwJCwJAIAUtAAkiA0EXaw4LBBkZGRkCARkZAwEACyADQQJPDRgLAkAgBxDlDSIDRQ0AIAMoAgBBAkcNACADLQAIDQAgAy0ACUEURw0AIAcQyxIiA0UNACADKAIAQQJHDQAgAy0ACEECRw0AIAMtAAlBF0YNBAsgBxDlDSIDRQ0EIAMoAgBBAkcNBCADLQAIQQJHDQQgAy0ACUEhRw0EQQghBQwNCyACQegCaiIDIAEQ3wEgAgJ/IAItAJwDQQRHBEAgAkG0BWogA0HAABD2BhogAkH4CGpBBHIgAkGwBWpBxAAQ9gYaQRMMAQsgAiACKALoAjYC/AhBFAs2AvgIIAJBMGogAkH4CGoQgxggAigCNCEDIAIoAjAhBQwYCyAHEMQgIQYCQAJAAkAgBxDlDSIDRQ0AIAMoAgBBAkcNACADLQAIQQJHDQAgAy0ACUEgRg0BCyACQYAJaiAHEOYLIAJBQGsgBxCkFCACQbDd3wA2AvwIIAJBNDoA+AggAigCQCACKAJEIAJB+AhqEPAUIQMgBxDlDSIERQ0BIAQoAgBBJEcNASABIAEpA0A3A3ggASgCKCABQSU2AihBJEcNCCABIAEoAiwQggwMAQsgASgCKCEDIAFBJTYCKCABIAEpA0A3A3ggAkGECWogAUE0aikCADcCACACQYwJaiABQTxqKAIANgIAIAIgASkCLDcC/AggAiADNgL4CCACQfgIahC/CgJAAkACQCAHEOUNIgNFDQAgAygCAEECRw0AIAMtAAhBAkcNACADLQAJQRxGDQELIAJB+AhqIAFBARDTAiACKAL4CCEDIAItAIwJQQNGDQIgAkHEBWogAkGMCWooAgA2AgAgAkG8BWogAkGECWopAgA3AgAgAiACKQL8CDcCtAVBBCEEDAELIAJB+AhqIgUgARDfASACKAL4CCEDIAItAKwJIgRBBEYNASACQbAFakEEciAFQQRyQTAQ9gYaIAJB7AVqIAJBtAlqKAAANgAAIAIgAikArQk3AOUFCyACIAQ6AOQFIAIgAzYCsAVBACEDAkACQCAHEKAhDQAgBxDlDSIFRQ0AIAUoAgBBFEcNACAFLQAEQQRHDQAgAkEAOgD1AiACIAEtAI4DOgD0AiACIAEtAJ4DOgCEAyACIAEpAYIDNwDoAiACIAEpA5ADNwD2AiACIAEoApgDNgD+AiACIAEvAZwDOwCCAyACIAFBigNqIgMoAQA2APACIAJBkQlqIAFBlwNqKQAANwAAIAJBjAlqIAFBkgNqKQEANwIAIAJBhAlqIAMpAQA3AgAgAiABKQGCAzcC/AggAUGAAWogAkHoAmoQvwggAiABNgL4CCACQcgAaiABEO8BIAIoAkwhAyACKAJIIAJB+AhqEJAmDQEgAi0A5AUhBAsgASgCfCEHIAJBuANqIAJBsAVqQTQQ9gYaIAIgAkHsBWooAAA2AK8DIAIgAikA5QU3A6gDIAYgByAGIAdJGyEFIARB/wFxQQVHDQkgBSEDDAELIAJBsAVqEMYhCyACIAM2AvwIQRQhBwwKCyAHEMQgIQYgAkH4CGoiCSABEM0HIAIoAvgIDQIgAigCgAkhBCACKAL8CCEFIAcQoCENAyAHEOUNIgNFDQMgAygCAEECRw0DIAMtAAgNAyADLQAJQQ5HDQMgAkHoAmoiAyABIAZBACAFIAQQhQggAgJ/IAItAIwDQQJHBEAgAkG0BWogA0EoEPYGGiAJQQRyIAJBsAVqQSwQ9gYaQRIMAQsgAiACKALoAjYC/AhBFAs2AvgIIAJBKGogAkH4CGoQgxggAigCLCEDIAIoAighBQwWCyABKAIoIQMgAUElNgIoIAEgASkDQDcDeCACQYQJaiABQTRqKQIANwIAIAJBjAlqIAFBPGooAgA2AgAgAiABKQIsNwL8CCACIAM2AvgIIAJB+AhqIgMQvwogAyABEM0HIAIoAvgIDQEgAkHoAmoiBSABIARBASACKAL8CCACKAKACRCFCCACAn8gAi0AjANBAkcEQCACQbQFaiAFQSgQ9gYaIANBBHIgAkGwBWpBLBD2BhpBEgwBCyACIAIoAugCNgL8CEEUCzYC+AggAkEgaiACQfgIahCDGCACKAIkIQMgAigCICEFDBULIAcQ5Q0iAw0FDAYLIAIoAvwIIQNBASEFDBMLQdgAQQgQkSAiAyAENgIIIAMgBTYCBCADQQE2AgALQQAhBQwRC0HZ5OAAQShByN3fABDhFwALIAIgBiAHIAYgB0sbNgKECSACIAU2AoAJIAJBiAlqIAJBuANqQTQQ9gYaIAJBxAlqIAIoAK8DNgAAIAIgBDoAvAkgAiADNgLICSACIAIpA6gDNwC9CUEEIQcMAgsgAygCAEECRw0AIAMtAAhBA0cNAEEKIQUMAgsCQCAHEOUNIgNFDQAgAygCAEECRw0AIAMtAAgNACADLQAJQRhHDQBBACEFDAILAkAgBxDlDSIDRQ0AIAMoAgBBAkcNACADLQAIDQAgAy0ACUEfRw0AQQQhBQwCCwJAIAcQ5Q0iA0UNACADKAIAQQJHDQAgAy0ACA0AIAMtAAlBHkcNAEEFIQUMAgsCQCAHEOUNIgNFDQAgAygCAEECRw0AIAMtAAgNACADLQAJQSBHDQBBCyEFDAILAkAgBxDlDSIDRQ0AIAMoAgBBAkcNACADLQAIDQAgAy0ACUEdRw0AQQIhBQwCCwJAIAcQ5Q0iA0UNACADKAIAQQJHDQAgAy0ACA0AIAMtAAlBHEcNAEEDIQUMAgsCQCAHEOUNIgNFDQAgAygCAEECRw0AIAMtAAgNACADLQAJQRtHDQBBBiEFDAILAkAgBxDlDSIDRQ0AIAMoAgBBAkcNACADLQAIDQAgAy0ACUEQRw0AQQchBQwCCwJAIAcQ5Q0iA0UNACADKAIAQQJHDQAgAy0ACA0AIAMtAAlBGkcNAEEBIQUMAgsCQCAHEOUNIgNFDQAgAygCAEECRw0AIAMtAAgNACADLQAJQRFHDQBBCSEFDAILQQ0hBSAHEOUNIgNFDQEgAygCAEECRw0BIAMtAAgNAUEMQQ0gAy0ACUEZRhshBQwBCyACIAc2AvgIIAJBOGogAkH4CGoQgxggAigCPCEDIAIoAjghBQwMCyAHEMsSIgMEfyADKAIAQQZGBUEAC0UgBUENR3FFBEAgBxDEICEFIAJB+AhqIgQgARD9BwJAAkAgAi0A+AhFBEAgAi0A+QggBCABQQEQ0wIgAigC+AghAyACLQCMCSIGQQNGDQEgAkH0AmogAkGECWoiCikCADcCACACQf8CaiACQY8Jai0AADoAACACIAIpAvwINwLsAiACIAIvAI0JOwD9AiACIAY6APwCIAIgAzYC6AJBACEDAkAgBxCgIQ0AIAcQ5Q0iBkUNACAGKAIAQRRHDQAgBi0ABEEERw0AIAJBADoAvQUgAiABLQCOAzoAvAUgAiABLQCeAzoAzAUgAiABKQGCAzcAsAUgAiABKQOQAzcAvgUgAiABKAKYAzYAxgUgAiABLwGcAzsAygUgAiABQYoDaiIDKAEANgC4BSACQZEJaiABQZcDaikAADcAACACQYwJaiABQZIDaikBADcCACAKIAMpAQA3AgAgAiABKQGCAzcC/AggAUGAAWogAkGwBWoQvwggAiABNgL4CCACQRhqIAEQ7wEgAigCHCEDIAIoAhggBBCQJkUNACACQegCahC9GwwCC0EBcQRAIAEoAnwhBCACQagBOgD4CCABIAUgBCAEIAVLGyAFIAQgBCAFSRsgAkH4CGoQwhkLIAJB0AJqIgkgAkHwAmopAwA3AwAgAkHYAmoiCiACQfgCaigCADYCACACQcYCaiILIAJB/QJqIgRBAmotAAA6AAAgAiACKQPoAjcDyAIgAiAELwAAOwHEAiAFIAEoAnwiBiAFIAZJGyEEQQMhByACLQD8AiINQQNGBEAgBCEDDAILIAJBkAlqIAkpAwA3AwAgAkGYCWogCigCADYCACACQZ8JaiALLQAAOgAAIAIgBSAGIAUgBksbNgKECSACIAQ2AoAJIAIgAikDyAI3A4gJIAIgDToAnAkgAiACLwHEAjsAnQkgAiADNgKgCQwCCyACKAL8CCEDCyACIAM2AvwIQRQhBwsgAiAHNgL4CCACQRBqIAJB+AhqEIMYIAIoAhQhAyACKAIQIQUMDAsgASgCKCEDIAFBJTYCKCABIAEpA0A3A3ggAkGECWogAUE0aikCADcCACACQYwJaiABQTxqKAIANgIAIAIgASkCLDcC/AggAiADNgL4CCACQfgIahC/CiABKAJ8IQZB2ABBCBCRICIDIAU6AAxBACEFIANBADYCACADIAQgBiAEIAZLGzYCCCADIAQgBiAEIAZJGzYCBAwLCyAHEMQgIQogAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAcQ5Q0iAwRAIAMoAgBBEUYNAQsgAkH4CGogARDFAiACKAL8CCEDIAIoAvgIIgZBB0YNESACQcgFaiACQZAJaikDADcDACACQcAFaiACQYgJaikDADcDACACIAIpA4AJNwO4BSACIAM2ArQFIAIgBjYCsAUgBg4FAgUBAwQBCyAHEMQgIQsgBxDlDSIDRQRAIAEoAtgCIQMgAkEAOgD4CCADIAMgAkH4CGoQ8BQhAwwRCyADKAIAQSRGBEAgASABKQNANwN4IAEoAiggAUElNgIoQSRHDQkgASgCLCEDDBELIAEoAighAyABQSU2AiggASABKQNANwN4IAJBhAlqIAFBNGopAgA3AgAgAkGMCWogAUE8aigCADYCACACIAEpAiw3AvwIIAIgAzYC+AggAkH4CGoiBhC/CiACQQA2AvAEIAJCgICAgMAANwLoBCACQbAFaiINIAFBABDFBCACKAKwBSEDIAItAMgFIglBAkYNDyABQSxqIQQgAkH4AmoiDiACQcQFaigCADYCACACQfACaiIRIAJBvAVqKQIANwMAIAIgAikCtAU3A+gCIAIgAigAyQU2AqAMIAIgAkHMBWooAAA2AKMMQSBBCBCRICIFIAM2AgAgBSAJOgAYIAUgAikD6AI3AgQgBUEMaiARKQMANwIAIAVBFGogDigCADYCACAFIAIoAqAMNgAZIAVBHGogAigAoww2AAAgAkEBNgKQBSACIAU2AowFIAJBATYCiAUgDUEEciEFIAJBkQlqIQ0gBkEEciEGIAJByQVqIQ4DQCAJQQFxRQRAAkAgBxDlDSIDBEAgAygCAEEWRg0BCyACQbgFaiAHEOYLIAJB4ABqIAcQpBQgAkHg6N8ANgK0BSACQTQ6ALAFIAIoAmAgAigCZCACQbAFahDwFCEDIAcQ5Q0iBEUNESAEKAIAQSRHDREgASABKQNANwN4IAEoAiggAUElNgIoQSRHDQogASABKAIsEIIMDBELIAUgBCkCADcCACABKAIoIQMgAUElNgIoIAEgASkDQDcDeCAFQQhqIhEgBEEIaiIJKQIANwIAIAVBEGoiEiAEQRBqIhAoAgA2AgAgAiADNgKwBSACQbAFahC/CiACQfAAaiABEJECIAIoAnQhAyACKAJwDRAgAkHoBGogAxC5GwJAIAcQ5Q0iAwRAIAMoAgBBDkYNAQsgAkG4BWogBxDmCyACQegAaiAHEKQUIAJB0NrfADYCtAUgAkE0OgCwBSACKAJoIAIoAmwgAkGwBWoQ8BQhAyAHEOUNIgRFDREgBCgCAEEkRw0RIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRw0JIAEgASgCLBCCDAwRCyAFIAQpAgA3AgAgASgCKCEDIAFBJTYCKCABIAEpA0A3A3ggESAJKQIANwIAIBIgECgCADYCACACIAM2ArAFIAJBsAVqIgMQvwogAyABQQAQxQQgAigCsAUhAyACLQDIBSIJQQJGDRAgBiAFKQIANwIAIA0gDigAADYAACAGQRBqIBIoAgA2AgAgBkEIaiARKQIANwIAIA1BA2ogDkEDaigAADYAACACIAk6AJAJIAIgAzYC+AggAkGIBWogAkH4CGoQshAMAQsLIAJB0ARqIgYgAkGQBWooAgA2AgAgAiACKQKIBTcDyAQgAigC7AQhAyACKALoBCIFQYCAgIB4Rg0QIAIoAvAEIQkgAkG4BWogBigCADYCACACIAIpA8gENwOwBSACIAk2AvACIAIgAzYC7AIgAiAFNgLoAiAHEOUNIgYEQCAGKAIAQRFGDQYLIAJBgAlqIAcQ5gsgAkHYAGogBxCkFCACQYDj3wA2AvwIIAJBNDoA+AggAigCWCACKAJcIAJB+AhqEPAUIQMgBxDlDSIERQ0NIAQoAgBBJEcNDSABIAEpA0A3A3ggASgCKCABQSU2AihBJEcNCSABIAEoAiwQggwMDQtB2eTgAEEoQajj3wAQ4RcAC0GBgICAeCEFDAgLQYCAgIB4IQUMBwtBg4CAgHghBQwGCyACKQO4BSEnIAJBsAVqEKUUQYKAgIB4IQUMBgsgASgCKCEGIAFBJTYCKCABIAEpA0A3A3ggAkGECWogBEEIaikCADcCACACQYwJaiAEQRBqKAIANgIAIAIgBCkCADcC/AggAiAGNgL4CCACQfgIahC/CiAFQYSAgIB4Rg0KIAsgASgCfCIHIAcgC0kbIQYgCyAHIAcgC0sbIQQgCa0gAjUCsAVCIIaEIScgAikCtAUhKAwGC0HZ5OAAQShB0OjfABDhFwALQdnk4ABBKEH46N8AEOEXAAtB2eTgAEEoQezi3wAQ4RcAC0HZ5OAAQShBmOPfABDhFwALIAIoAswFIQYgAigCyAUhBCACKQPABSEoIAIpA7gFIScLIAEoAnwhBwsgAiAGNgKcCSACIAQ2ApgJIAIgKDcDkAkgAiAnNwOICSACIAM2AoQJIAIgBTYCgAkgAiAKIAcgByAKSRs2AqQJIAIgCiAHIAcgCksbNgKgCUERDAQLIAJBsAVqEOQiIAJB6AJqENkmDAILIAJBiAVqEOQiCyACQegEahDZJgsgAiADNgL8CEEUCzYC+AggAkHQAGogAkH4CGoQgxggAigCVCEDIAIoAlAhBQwKCyACQfgIaiABEM8CIAJBAToA6AIgAiACKQD7CzcA6QIgAiACKQCDDDcA8QIgAiACKQCLDDcA+QIgAiACKACTDDYAgQMgAkH4CWogAkHoAmoQvwggAkGUBWogAkGsCWopAgA3AgAgAkGcBWogAkG0CWooAgA2AgAgAigCoAkhAyACQSU2AqAJIAIgAikDuAk3A/AJIAIgAikCpAk3AowFIAIgAzYCiAUgAkGIBWoQvwogAkGkCWohAyACAn8CQAJAAkACQAJAAkACQAJAAn8CQAJAIAJBoAlqIgQQ5Q0iBUUNACAFKAIAQRRHDQAgBS0ABEELRg0BCwJAIAQQ5Q0iBUUNACAFKAIAQRRHDQAgBS0ABEEMRg0BCwJAIAQQ5Q0iBUUNACAFKAIAQQJHDQAgBS0ACA0AIAUtAAlBCUcNACACQZQFaiADQQhqKQIANwIAIAJBnAVqIANBEGooAgA2AgAgAigCoAkhBSACQSU2AqAJIAIgBTYCiAUgAiACKQO4CTcD8AkgAiADKQIANwKMBSACQYgFahC/CgsgBBDlDSIFRQ0CIAUoAgBBC0cNAiACQZQFaiIGIANBCGopAgA3AgAgAkGcBWoiCSADQRBqKAIANgIAIAIoAqAJIQUgAkElNgKgCSACIAU2AogFIAIgAikDuAk3A/AJIAIgAykCADcCjAUgAkGIBWoiChC/CiACQbgFaiACQfoLaiIFQQhqKQAANwMAIAJBwAVqIAVBEGopAAA3AwAgAkHFBWogBUEVaikAADcAACACIAUpAAA3A7AFIAQQ5Q0iBUUNAiAFKAIAQQJHDQIgAkGwBWogBS0ACCAFQQlqLQAAENYJDQIgBiADQQhqKQIANwIAIAkgA0EQaigCADYCACACKAKgCSEFIAJBJTYCoAkgAiAFNgKIBSACIAIpA7gJNwPwCSACIAMpAgA3AowFIAoQvwogBBDlDSIDRQ0CIAMoAgBBAkcNAiADLQAIQQJHDQJBHgwBCyACQZQFaiADQQhqKQIANwIAIAJBnAVqIANBEGooAgA2AgAgAigCoAkhBSACQSU2AqAJIAIgBTYCiAUgAiACKQO4CTcD8AkgAiADKQIANwKMBSACQYgFahC/CiAEEOUNIgNFDQEgAygCAEECRw0BIAMtAAgNAUEJCyEEIAMtAAkgAkH4CGoQ+A8gBEcNASAHEMQgIQogBxDlDSIDBEAgAygCAEENRg0DCyACQYAJaiAHEOYLIAJB2AFqIAcQpBQgAkH42t8ANgL8CCACQTQ6APgIIAIoAtgBIAIoAtwBIAJB+AhqEPAUIQUgBxDlDSIDRQ0HIAMoAgBBJEcNByABIAEpA0A3A3ggASgCKCABQSU2AihBJEcNAyABIAEoAiwQggwMBwsgAkH4CGoQ+A8LIAcQxCAhAyACQbAFaiABEEsgAigCtAUhBCACAn8gAigCsAUiBUGAgICAeEcEQCACIAIoArgFNgKECSACIAQ2AoAJIAIgBTYC/AggAiADIAEoAnwiBCADIARLGzYCjAkgAiADIAQgAyAESRs2AogJQQUMAQsgAiAENgL8CEEUCzYC+AggAkHIAWogAkH4CGoQgxggAigCzAEhAyACKALIASEFDBALIAEoAighAyABQSU2AiggASABKQNANwN4IAJBhAlqIAFBNGopAgA3AgAgAkGMCWogAUE8aigCADYCACACIAEpAiw3AvwIIAIgAzYC+AggAUEsaiEGIAJB+AhqEL8KAkACQAJAAkACQAJAAkACQAJAIAcQ5Q0iA0UNACADKAIAQRRHDQAgAy0ABEELRg0BCyAHEOUNIgNFDQEgAygCAEEURw0BIAMtAARBDEcNAQtBAiEJAkAgBxDlDSIDRQ0AIAMoAgBBFEcNAEEBQQIgAy0ABEELRhshCQsgASgCKCEDIAFBJTYCKCABIAEpA0A3A3ggAkGECWogBkEIaikCADcCACACQYwJaiAGQRBqKAIANgIAIAIgBikCADcC/AggAiADNgL4CCACQfgIahC/CgJAIAcQ5Q0iA0UNACADKAIAQQJHDQAgAy0ACA0AIAMtAAlBCUYNAgsgAkGACWogBxDmCyACQaACaiAHEKQUIAJBuN/fADYC/AggAkE0OgD4CCACKAKgAiACKAKkAiACQfgIahDwFCEFIAcQ5Q0iA0UNCyADKAIAQSRHDQsgASABKQNANwN4IAEoAiggAUElNgIoQSRHDQMgASABKAIsEIIMDAsLQQMhCSAHEOUNIgNFDQEgAygCAEECRw0BIAMtAAgNASADLQAJQQlHDQEgASgCKCEDIAFBJTYCKCABIAEpA0A3A3ggAkGECWogBkEIaikCADcCACACQYwJaiAGQRBqKAIANgIAIAIgBikCADcC/AggAiADNgL4CCACQfgIahC/CkEAIQkMAQsgASgCKCEDIAFBJTYCKCABIAEpA0A3A3ggAkGECWogBkEIaikCADcCACACQYwJaiAGQRBqKAIANgIAIAIgBikCADcC/AggAiADNgL4CCACQfgIahC/CgsCQCAHEOUNIgMEQCADKAIAQQtGDQELIAJBgAlqIAcQ5gsgAkHgAWogBxCkFCACQeDf3wA2AvwIIAJBNDoA+AggAigC4AEgAigC5AEgAkH4CGoQ8BQhBSAHEOUNIgNFDQkgAygCAEEkRw0JIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRw0CIAEgASgCLBCCDAwJCyABKAIoIQMgAUElNgIoIAEgASkDQDcDeCACQYQJaiAGQQhqKQIANwIAIAJBjAlqIAZBEGooAgA2AgAgAiAGKQIANwL8CCACIAM2AvgIIAJB+AhqEL8KIAcQxCAhBCACQegCaiABEM4EIAIoAvACIQUgAikD6AIiJ1ANCCACIAIoAvQCNgKUBSACIAU2ApAFIAIgJzcDiAUgAkGYAmogAUGY6N8AQfWp4ABBAhCuByACKAKcAiEDIAIoApgCBEAgJxDdGiADIQUMCQsgASgCfCELIAJBgAlqIAJBiAVqEIocQQAhBSACQZ8JakEANgAAIAJBADYCnAkgAiADNgKYCSACIAQgCyAEIAtLGzYC/AggAiAEIAsgBCALSRsiAzYC+AggAkGwBWpBBHIgAkH4CGoiBEEEckEmEPYGGiACQd8FaiACQacJai0AADoAACACIAIoAKMJNgDbBSACQQA6ANoFIAIgAzYCsAUCQCAHEOUNIgNFDQAgAygCAEECRw0AIAMtAAgNACADLQAJQQFHDQAgASgCKCEDIAFBJTYCKCABIAEpA0A3A3ggAkGECWogBkEIaikCADcCACACQYwJaiAGQRBqKAIANgIAIAIgBikCADcC/AggAiADNgL4CCAEEL8KIAJBkAJqIAEQkQIgAigClAIhBSACKAKQAg0ICyACIAU2AogFAkACQCAHEOUNIgNFDQAgAygCAEEMRw0AIAEoAighAyABQSU2AiggASABKQNANwN4IAJBhAlqIAZBCGopAgA3AgAgAkGMCWogBkEQaigCADYCACACIAYpAgA3AvwIIAIgAzYC+AggAkH4CGoQvwoCQCAHEOUNIgNFDQAgAygCAEEURw0AIAMtAARBC0YNAgsCQCAHEOUNIgNFDQAgAygCAEEURw0AIAMtAARBDEYNAgtBAyEDIAcQ5Q0iBEUNByAEKAIAQRdHDQcgASgCKCEDIAFBJTYCKCABIAEpA0A3A3ggAkGECWogBkEIaikCADcCACACQYwJaiAGQRBqKAIANgIAIAIgBikCADcC/AggAiADNgL4CCACQfgIahC/CkEAIQMMBwsgAkGACWogBxDmCyACQegBaiAHEKQUIAJB+N3fADYC/AggAkE0OgD4CCACKALoASACKALsASACQfgIahDwFCEFIAcQ5Q0iA0UNByADKAIAQSRHDQcgASABKQNANwN4IAEoAiggAUElNgIoQSRHDQMgASABKAIsEIIMDAcLQQIhAwJAIAcQ5Q0iBEUNACAEKAIAQRRHDQBBAUECIAQtAARBC0YbIQMLIAEoAighBCABQSU2AiggASABKQNANwN4IAJBhAlqIgsgBkEIaikCADcCACACQYwJaiINIAZBEGooAgA2AgAgAiAGKQIANwL8CCACIAQ2AvgIIAJB+AhqIgQQvwoCQCAHEOUNIg5FDQAgDigCAEEXRw0AIAEoAighDiABQSU2AiggASABKQNANwN4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AtwBIAVBEHYhEkEHIQggDS0APiETIA0tADshFCANLQA6IRUgDS0APSEWIA0tADkhFyANLQA3IRggDS0AqwEhDyANLQCqASEQIA0tAKkBIREgDS0AqAEhBCANKQOgASEaIA0tADghGSAFQQh2DAELIA1B5AFqIANBCGooAgA2AgAgDSADKQIANwLcASANKAIwIgMgASgCfCIBIAEgA0sbIQkgAyABIAEgA0kbIQxBACEHIA0tAD0hDyANLQA5IRAgDSkCpAEhGiANKAKgASECIA0tADghESAKIQYgBSEOIA0tADohBSANLQA+CyEBIAAgCDYCACAAIA0pAtgBNwIEIAAgGDoASyAAIBM6AEogACAUOgBJIAAgFToASCAAIBY6AEcgACAXOgBGIAAgAzoARSAAIBk6AEQgACAKNgJAIAAgEjsBPiAAIAE6AD0gACAFOgA8IAAgDzoAOyAAIBA6ADogACAROgA5IAAgBDoAOCAAIBo3AzAgACACNgIsIAAgBjYCKCAAIA42AiQgACAHNgIgIAAgDDYCHCAAIAk2AhggACALNgIUIABBDGogDUHgAWopAgA3AgAMAQsgACADKQIANwIwIABBOGogA0EIaigCADYCACANQeQBaiANQYgBaikDADcCACANQewBaiANQZABaikDADcCACANQfQBaiANQZgBaikDADcCACANIA0pA4ABNwLcASABKAJ8IQEgDSgCMCECIA0tADghAyANLQA8IQQgDS0APSEGIA0tAD4hByANLQA3IQggAEEMNgIAIABBBGogDUHYAWpBJBD2BhogACAIOgBIIAAgBzoARyAAIAY6AEYgACAEOgBFIAAgAzoARCAAIAo2AkAgACAFNgI8IAAgAiABIAEgAkkbNgIsIAAgAiABIAEgAksbNgIoCyANQdwAahCQJgsgDUGAAmokAAvpEwINfwF+IwBBgAJrIg0kACANIAQ6ADcgDSACNgIwIA0gBjoAOCANIAg6ADkgDSAJOgA6IA0gCjoAOyANIAs6ADwgDSAMOgA9AkACQAJAAkACQCAFEOcVRQRAIAUoAgBBBUcNAQJAIApFBEAgCw0BDAMLIA1BKGogBRCXEyANKAIsIQIgDSgCKCEEQbCu4ABBBxDAGiEaIA1B4QA6AIABIA0gGjcDiAEgASAEIAIgDUGAAWoQrxkgDS0APEEBcUUNAgsgDUEgaiAFEJcTIA0oAiQhAiANKAIgIQRBl7DgAEEIEMAaIRogDUHhADoAgAEgDSAaNwOIASABIAQgAiANQYABahCvGQwBCyANIAUQlxMgDSgCBCECIA0oAgAgDUHfADoAgAEgAiANQYABahDwFCECAkAgAUEoahDIDSIERQ0AIAQoAgBBJEcNACABIAEpA+ACNwOYAyABKALIAiABQSU2AsgCQSRHBEBB2eTgAEEoQcjw3wAQ4RcACyABIAEoAswCEPsLCyAAQQ02AgAgACACNgIEDAELIAFBKGohAgJAAkAgAS0AoAJBAkYEQCANLQA5QQFHDQELIA1BADoAPgwBCwJAIAIQyA0iBARAIAQoAgBBCEYNAQsgDUEAOgA+DAELIAEoAsgCIQQgAUElNgLIAiABIAEpA+ACNwOYAyANQYwBaiABQdQCaikCADcCACANQZQBaiABQdwCaigCADYCACANIAEpAswCNwKEASANIAQ2AoABIA1BgAFqEL4KIA1BAToAPgsgDUEYaiABEOIPIA0oAhwhCyANKAIYRQRAIA1BAToARSANQQE6AFEgDSABLQC7AjoAUCANIAEoAaoCNgA/IA0gAS8BrgI7AEMgDSABKQCxAjcARiANIAEvALkCOwBOIA0gASkAvQI3AFIgDSABLwDFAjsAWiANQfUAaiABQb8CaikAADcAACANQfAAaiABQboCaikBADcCACANQegAaiABQbICaikBADcCACANIAEpAaoCNwJgIAIgDUE/ahDHCCANIAE2AlwgDUGIAWogBUEIaikDADcDACANQZABaiAFQRBqKQMANwMAIA1BmAFqIAVBGGopAwA3AwAgDUGoAWogA0EIaigCADYCACANIAc2AqwBIA0gCzYC1AEgDSAFKQMANwOAASANIAMpAgA3A6ABIA0gDUEwajYCsAEgDSANQThqNgK0ASANIA1BO2o2AtABIA0gDUE6ajYCzAEgDSANQTlqNgLIASANIA1BPmo2AsQBIA0gDUE9ajYCwAEgDSANQTxqNgK8ASANIA1BN2o2ArgBQQAhBSACEMgNIgRFDQIgBCgCAEEVRw0CIAQtAAQNAgJAIAIQyA0iBEUEQCABKAKAAiEBIA1BADoA2AEgASABIA1B2AFqEPAUIQUMAQsgBCgCAEEkRgRAIAEgASkD4AI3A5gDIAEoAsgCIAFBJTYCyAJBJEYEQCABKALMAiEFDAILQdnk4ABBKEHY8N8AEOEXAAsgASgCyAIhBCABQSU2AsgCIAEgASkD4AI3A5gDIA1B5AFqIAFB1AJqKQIANwIAIA1B7AFqIAFB3AJqKAIANgIAIA0gASkCzAI3AtwBIA0gBDYC2AEgDUHYAWoQvgogDUEQaiABELEGIA0oAhQhBSANKAIQRQ0DCyANQaABaiANQdQBaiAAQQ02AgAgACAFNgIEAkAgDSgCgAFBBUYEQCANKQOIARDdGgwBCyANQYABahCMFgsQ5SYQ3CYMAwsgAEENNgIAIAAgCzYCBAsgBRD1ICADENwmDAILAkAgAhDIDSIERQ0AAkACQCAEKAIAQQ5rDgICAAELIAEoAsgCIQIgAUElNgLIAiABIAEpA+ACNwOYAyANQeQBaiABQdQCaikCADcCACANQewBaiABQdwCaigCADYCACANIAEpAswCNwLcASANIAI2AtgBIA1B2AFqEL4KDAELIAIQ8CANACANQQhqIAIQ8BMgDSgCDCECIA0oAgghBCANQfUAOgDYASABIAQgAiANQdgBahCvGQsgBygCAEUEQAJ/AkACQAJAAkAgDSgCgAFBBUYEQEEDIQRBCCEIIA1BiAFqIQMgDSgClAEhCiANLQA3QQNHDQEMBAsgDSgCMCICIAEoApwDIgMgAiADSRshBiACIAMgAiADSxshAiANLQA8IQMgDSgCnAEhDiANKAKYASEHIA0oApQBIQwgDSgCkAEhCSANKAKMASEKIAVFDQIgA0EBcQ0BDAILIAEoApwDIQIgDSgCMCEEIA1BtQE6ANgBIAEgBCACIAIgBEsbIgIgCiACIApJGyACIAogAiAKSxsgDUHYAWoQrxkgDS0ANyEEDAILIA1BogE6ANgBIAEgBiACIA1B2AFqEK8ZIA0tADwhAwsgDUHkAWogDUGIAWooAgA2AgAgDSANKQOAATcC3AEgBUEQdiESQQchCCANLQA+IRMgDS0AOyEUIA0tADohFSANLQA9IRYgDS0AOSEXIA0tADchGCANLQCrASEPIA0tAKoBIRAgDS0AqQEhESANLQCoASEEIA0pA6ABIRogDS0AOCEZIAVBCHYMAQsgDUHkAWogA0EIaigCADYCACANIAMpAgA3AtwBIA0oAjAiAyABKAKcAyIBIAEgA0sbIQkgAyABIAEgA0kbIQxBACEHIA0tAD0hDyANLQA5IRAgDSkCpAEhGiANKAKgASECIA0tADghESAFIQ4gCyEGIA0tADohBSANLQA+CyEBIAAgCDYCACAAIA0pAtgBNwIEIAAgGDoASyAAIBM6AEogACAUOgBJIAAgFToASCAAIBY6AEcgACAXOgBGIAAgAzoARSAAIBk6AEQgACALNgJAIAAgEjsBPiAAIAE6AD0gACAFOgA8IAAgDzoAOyAAIBA6ADogACAROgA5IAAgBDoAOCAAIBo3AzAgACACNgIsIAAgBjYCKCAAIA42AiQgACAHNgIgIAAgDDYCHCAAIAk2AhggACAKNgIUIABBDGogDUHgAWopAgA3AgAMAQsgACADKQIANwIwIABBOGogA0EIaigCADYCACANQeQBaiANQYgBaikDADcCACANQewBaiANQZABaikDADcCACANQfQBaiANQZgBaikDADcCACANIA0pA4ABNwLcASABKAKcAyEBIA0oAjAhAiANLQA4IQMgDS0APCEEIA0tAD0hBiANLQA+IQcgDS0ANyEIIABBDDYCACAAQQRqIA1B2AFqQSQQ9gYaIAAgCDoASCAAIAc6AEcgACAGOgBGIAAgBDoARSAAIAM6AEQgACALNgJAIAAgBTYCPCAAIAIgASABIAJJGzYCLCAAIAIgASABIAJLGzYCKAsgDUHcAGoQ9SQLIA1BgAJqJAALnxMCBn8BfiMAQfABayICJAACfyAALQAMIgUgASgCACIDQRlGDQAaIAUgA0EjRg0AGiAAQQA6AAxBAAshBAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQEEHIANBDGsiBiAGQSZPG0EBaw4kAAEdAgMEBQYHCAkKCx0dDA0ODxAdERITHR0UFRYXGBkaGx0cHQsgASgCDEEEdCEEIAEoAgghAwNAIARFDR0gAygCAEECRwRAIANBDGogABCHLQsgA0EQaiEDIARBEGshBAwACwALIAFBBGogABCGDQwbCyABQQRqIAAQhy0MGgsgAUEMaiAAEIctDBkLIAFBBGogABCHLSABQQhqIAAQhy0MGAsgAUE4agJAAkACQAJAAkACQAJAAkACQAJAAkAgA0EBaw4LAAECAwQFBgcICgkKCyABQQhqIAAQjx8MCQsgAUEIaiAAEJoiDAgLIAFBBGogABCHLQwHCyABQQRqIAAQtBwMBgsgAUEEaiAAEIctDAULIAFBBGogABCHLQwECyABQQRqIAAQhy0MAwsgAUEEaiAAEIctDAILIAFBBGogABCHLQwBCyABQQhqIQQCQAJAIAEoAgRBAWsOAgECAAsgBCAAEJEXDAELIAQgABC+DgsgABCHLQwXCyABQQhqIAAQjx8MFgsgAUEIaiAAEJoiDBULIAFBBGogABCHLSABQQhqIAAQhy0gAUEMaiAAEIctDBQLIAEtABhBBUYEQCABQRBqIAAQhy0LIAFBBGogABCAGQwTCyABQRBqIAAQhy0gASgCBEGAgICAeEYNEiABQQRqIAAQgBkMEgsgASgCDCIDRQ0RIABBAToADCABIANBAWsiAzYCDCABKAIIIANBAnRqKAIAIQMgAUEEaiIGIAAQqBogACAEOgAMIAAgAxCSASABKAIMIgQgASgCBEYEQCAGEOwWCyABIARBAWo2AgwgASgCCCAEQQJ0aiADNgIADBELIAFBBGogABCoGgwQCyABQQRqIAAQhy0gASgCCCAAEKgaDA8LIAEoAgxBKGwhAyABKAIIIQQDQCADBEAgBCAAEJwSIANBKGshAyAEQShqIQQMAQsLIAEoAhAiBCgCAEGAgICAeEcEQCAEIAAQqRoMDwsgBEEEaiAAEIctDA4LIAFBCGogABCKLQwNCyABKAIMRQ0MIAFBDGogABCHLQwMCyABQQRqIAAQhy0MCwsgAUEEaiAAEIctDAoLIAFBCGoQ6SEMCQsgASgCBCAAEKMMDAgLIAFBBGogABDHDwwHCyABQQRqIAAQhy0MBgsgAUEEaiAAEIctDAULIAFBBGogABCHLQwECyABQQRqIAAQhy0MAwsgAUEEaiAAEIctDAILIAFBBGogABCHLQwBCyABQQRqIAAQtBwLIAAgBToADAJAIAEoAgBBF0cNACABLQAYQQNHDQAgAEEBOgANIAJBEGoiBCABQcAAEPYGGiABQQA2AgggAUIxNwMAIAJB1ABqIAAQoQ1BwABBCBCRICIDIARBwAAQ9gYhBCACKAJYIgAgAigCXEECdGohBiACKAJUIQcCfwJAIAVBAXFFBEAgAiAGNgJ0IAIgBzYCcCACIAA2AmwgAiAANgJoIAIgBDYCZCACQQE2AmAgAkHkAWogAkHgAGoiBhCWECACKALoAUEBRgRAIAJBCGogAigC7AFBBEEQEOwUQQAhBCACQQA2AuABIAIgAigCDCIANgLcASACIAIoAggiBTYC2AEgAkG4AWogBhCWECACKAK8AUEBRgRAIAUgAigCwAEiBUkEQCACQdgBakEAIAVBBEEQELQXIAIoAuABIQQgAigC3AEhAAsgAkH4AGpBBHIhBSACQegAaiEGIAAgBEEEdGohAANAIAIgAzYCuAEgAwRAIABBADYCACAAQQxqIAM2AgAgAEEQaiEAIARBAWohBEEAIQMMAQsLIAJBADYC5AEgAkG4AWoQ8ScgAkHkAWoQ8ScgAkHAAWogBkEIaikCADcDACACIAYpAgA3A7gBIAQgAigCxAEiBCACKAK8ASIDa0ECdmohBgNAIAMgBEYNBCAAQQxqIAMoAgA2AgAgAEEANgIAIABBEGohACADQQRqIQMMAAsACyACQQA2AsgBIAJBATYCvAEgAkH8wt8ANgK4ASACQgQ3AsABIAJBuAFqQfTD3wAQqB0ACyACQQA2AsgBIAJBATYCvAEgAkH8wt8ANgK4ASACQgQ3AsABIAJBuAFqQeTD3wAQqB0ACyACIAY2AswBIAIgBzYCyAEgAiAANgLEASACIAA2AsABIAIgBDYCvAEgAkEBNgK4ASACQeAAaiACQbgBaiIAEJYQIAIoAmRBAUYEQCACIAIoAmhBBEEEEOwUIAJBADYC7AEgAiACKQMANwLkASACQfgAaiAAEJYQIAIoAnxBAUYEQCACQcABaiEFIAJB5AFqIAIoAoABEPceIAIoAugBIAIoAuwBIgRBAnRqIQADQCACIAM2AnggAwRAIAAgAzYCACAAQQRqIQAgBEEBaiEEQQAhAwwBCwsgAkEANgJgIAJB+ABqEPEnIAJB4ABqEPEnIAJBgAFqIAVBCGopAgA3AwAgAiAFKQIANwN4IAQgAigChAEiBCACKAJ8IgNrQQJ2aiEFA0AgAyAERkUEQCAAIAMoAgA2AgAgAEEEaiEAIANBBGohAwwBCwsgAiAFNgLsASACIAM2AnwgAkH4AGoQ0RcgAikC6AEhCCACKALkASEAQRkMAwsgAkEANgKIASACQQE2AnwgAkH8wt8ANgJ4IAJCBDcCgAEgAkH4AGpB9MPfABCoHQALIAJBADYCiAEgAkEBNgJ8IAJB/MLfADYCeCACQgQ3AoABIAJB+ABqQeTD3wAQqB0ACyACQeABaiIAIAY2AgAgAiADNgK8ASACQbgBahDRFyAFQQhqIAAoAgA2AgAgBSACKQLYATcCACACQgA3A4gBIAJBDTYCeCACQfgAahDDKCEEIAJBxAFqQgA3AgAgAkHMAWpCADcCACACQgA3ArwBIAJBjAFqIAJBwAFqKQIANwIAIAJBlAFqIAJByAFqKQIANwIAIAJBnAFqIAJB0AFqKAIANgIAIAJBAzYCgAEgAkEbNgJ4IAIgAikCuAE3AoQBIAJB+ABqEMMorUIghkIChCEIQRQLIQMgARChAiABIAQ2AiggAUIANwMgIAFCADcDECABIAg3AwggASAANgIEIAEgAzYCAAsgAkHwAWokAAvfEwITfwN+IwBBwARrIgQkACAEQSxqIAEQvRUgBEHQAGoiBiAEKAIsIgVBPGoiARCxECAEQQA6AOACIARBADYC5AMgBEHgAmoiDyAGEJ4YLQAAEKwOIARB2AFqIgYgD0GIARD2BhogARCrICABIAZBiAEQ9gYhEyAFQShqIgcQqiAhEAJAAkACQAJAAkACQAJAIAcQyA0iAUUNACABKAIAQRRHDQAgAS0ABEEERg0BCyAHEMgNIgFFDQEgASgCAEEhRw0BCyAFKALIAiEBIAVBJTYCyAIgBSAFKQPgAjcDmAMgBEHsAmogBUHUAmopAgA3AgAgBEH0AmogBUHcAmooAgA2AgAgBCAFKQLMAjcC5AIgBCABNgLgAiAEQeACaiIBEL4KIARBADYC/AMgBEKAgICAgAE3AvQDIAVBzAJqIQogAUEEciELQQghDwNAAkAgBEHgAmogBUEEEMgIAkACQCAELQDgAg0AIAQtAOECDQUgBxCqIBpBACEUIAcQqiAhEUEAIQZBACENA0AgBEHgAmoiEiAFQdDc3wBBCUEAELcCIAQoAuQCIQEgBCgC4AINBwJAAkAgAQRAIAEgBCgC6AIiCEGVqeAAQQUQ0h9FBEAgASAIQfWp4ABBAhDSH0UEQCABIAhBh6/gAEEDENIfRQRAIAUoApwDIQkgBSgCmAMhDiABIAgQwBohFyAEQaMBOgDgAiAEIBc3A+gCIAUgDiAJIBIQrxkMBgsgAkUEQCAFKAKcAyEBIAUoApgDIQZBh6/gAEEDEMAaIRcgBEGkAToA4AIgBCAXNwPoAiAFIAYgASAEQeACahCvGUEBIQYMBgsgBkEBIQZFDQUgBSgCnAMhASAFKAKYAyEGQYev4ABBAxDAGiEXIARB+gA6AOACIAQgFzcD6AIgBSAGIAEgBEHgAmoQrxlBASEGDAULIAJFBEAgBSgCnAMhASAFKAKYAyEIQfWp4ABBAhDAGiEXIARBpAE6AOACIAQgFzcD6AIgBSAIIAEgBEHgAmoQrxlBASENDAULIA0NAkEBIQ0gBkEAIQZFDQQgBSgCnAMhASAFKAKYAyEGQfWp4ABBAhDAGiEXIARBh6/gAEEDEMAaNwPwAiAEIBc3A+gCIARB+QA6AOACIAUgBiABIARB4AJqEK8ZQQEhBgwEC0EBIRQgAw0DIAUoApwDIQEgBSgCmAMhCEGVqeAAQQUQwBohFyAEQaUBOgDgAiAEIBc3A+gCIAUgCCABIARB4AJqEK8ZDAMLIARB4AJqIgggBRC9FSAEQaAEaiAEKALgAhDMBCAEKAKoBCEBAkACQAJAIAQpA6AEIhdQRQRAIAQgBCgCrAQ2ArwEIAQgATYCuAQgBCAXNwOwBCAEQdgBaiAEQbAEahCKHCAIEPUkIARBIGogBUGY3N8AEOkQIAQoAiQhCCAEKAIgRQ0BIAghAQwCCyAEQeACahD1JAwMCyAEIAg2AuACIARBGGogBUGY3d8AEOkQIAQoAhwhASAEKAIYRQ0BIARB4AJqEOgmCyAEKQPYARDdGgwKCyAEQZAEaiISIARB4AFqKQMANwMAIARBmARqIhUgBEHoAWopAwA3AwAgBCAEKQPYATcDiAQgESAFKAKcAyIOIA4gEUsbIRYgBCgC9AMgDEYEQCAEQfQDahD5FiAEKAL4AyEPCyAPIAxBMGxqIgkgESAOIA4gEUkbNgIEIAkgFjYCACAVKQMAIRcgEikDACEYIAQpA4gEIRkgCSAUOgAqIAkgBjoAKSAJIA06ACggCSABNgIkIAkgCDYCICAJIBk3AgggCSAEKACDBDYAKyAJQS9qIARBhwRqLQAAOgAAIAlBEGogGDcCACAJQRhqIBc3AgAgBCAMQQFqIgw2AvwDIAcQyA0iAQRAIAEoAgBBEEYNAgsgBEHgAmogBUEEEMgIIAQtAOACDQMgBC0A4QINCCAHEMgNIgEEQCABKAIAQRBGDQULIARB6AJqIAcQhBAgBEEQaiAHEPATIARBiL7gADYC5AIgBEE0OgDgAiAEKAIQIAQoAhQgBEHgAmoQ8BQhASAHEMgNIgJFDQkgAigCAEEkRw0JIAUgBSkD4AI3A5gDIAUoAsgCIAVBJTYCyAJBJEcNBSAFIAUoAswCEPsLDAkLIAUoApwDIQEgBSgCmAMhCEH1qeAAQQIQwBohFyAEQfoAOgDgAiAEIBc3A+gCIAUgCCABIARB4AJqEK8ZQQEhDQwBCwsgCyAKKQIANwIAIAUoAsgCIQEgBUElNgLIAiAFIAUpA+ACNwOYAyALQQhqIApBCGopAgA3AgAgC0EQaiAKQRBqKAIANgIAIAQgATYC4AIgBEHgAmoQvgoMAwsgBCgC5AIhAQwFCyALIAopAgA3AgAgBSgCyAIhASAFQSU2AsgCIAUgBSkD4AI3A5gDIAtBCGogCkEIaikCADcCACALQRBqIApBEGooAgA2AgAgBCABNgLgAiAEQeACahC+CgwBCwtB2eTgAEEoQbDr3wAQ4RcACyAEQewCaiAHEIQQIAQgBxDwEyAEQRE2AugCIARB6OHfADYC5AIgBEEwOgDgAiAEKAIAIAQoAgQgBEHgAmoQ8BQhAUEBIQIgBxDIDSIDRQ0DIAMoAgBBJEcNAyAFIAUpA+ACNwOYAyAFKALIAiAFQSU2AsgCQSRGBEAgBSAFKALMAhD7CwwEC0HZ5OAAQShB/OHfABDhFwALIAQoAvgDIQIgBCgC9AMiBkGAgICAeEYEQCACIQEMAgsgBCAMNgLwAyAEIAI2AuwDIAQgBjYC6AMCQAJAIAcQyA0iAUUNACABKAIAQRRHDQAgAS0ABEEGRg0BCyAEQegCaiAHEIQQIARBCGogBxDwEyAEQaDb3wA2AuQCIARBNDoA4AIgBCgCCCAEKAIMIARB4AJqEPAUIQECQAJAIAcQyA0iAkUNACACKAIAQSRHDQAgBSAFKQPgAjcDmAMgBSgCyAIgBUElNgLIAkEkRw0BIAUgBSgCzAIQ+wsLIARB6ANqEOkmDAMLQdnk4ABBKEHI5N8AEOEXAAsgBSgCyAIhASAFQSU2AsgCIAUgBSkD4AI3A5gDIARB7AJqIApBCGopAgA3AgAgBEH0AmogCkEQaigCADYCACAEIAopAgA3AuQCIAQgATYC4AIgBEHgAmoQvgogBSgCnAMhA0EUQQQQkSAiASAMNgIIIAEgAjYCBCABIAY2AgAgASAQIAMgAyAQSRs2AhAgASAQIAMgAyAQSxs2AgxBACECDAILIARB9ANqEOkmC0EBIQILIARB4AJqIgMgBEHQAGpBiAEQ9gYaIBMQqyAgEyADQYgBEPYGGiAEQSxqEPUkIAAgATYCBCAAIAI2AgAgBEHABGokAAutEwITfwN+IwBBwARrIgQkACAEQSxqIAEQyRUgBEHQAGoiBiAEKAIsIgVBlAFqIgEQsRAgBEEAOgDgAiAEQQA2AuQDIARB4AJqIg8gBhCeGC0AABCsDiAEQdgBaiIGIA9BiAEQ9gYaIAEQqyAgASAGQYgBEPYGIRMgBUEoaiIHEMQgIRACQAJAAkACQAJAAkACQCAHEOUNIgFFDQAgASgCAEEURw0AIAEtAARBBEYNAQsgBxDlDSIBRQ0BIAEoAgBBIUcNAQsgBSgCKCEBIAVBJTYCKCAFIAUpA0A3A3ggBEHsAmogBUE0aikCADcCACAEQfQCaiAFQTxqKAIANgIAIAQgBSkCLDcC5AIgBCABNgLgAiAEQeACaiIBEL8KIARBADYC/AMgBEKAgICAgAE3AvQDIAVBLGohCiABQQRyIQtBCCEPA0ACQCAEQeACaiAFQQQQzAgCQAJAIAQtAOACDQAgBC0A4QINBSAHEMQgGkEAIRQgBxDEICERQQAhBkEAIQ0DQCAEQeACaiISIAVB0NzfAEEJQQAQsAIgBCgC5AIhASAEKALgAg0HAkACQCABBEAgASAEKALoAiIIQZWp4ABBBRDSH0UEQCABIAhB9angAEECENIfRQRAIAEgCEGHr+AAQQMQ0h9FBEAgBSgCfCEJIAUoAnghDiABIAgQwBohFyAEQaMBOgDgAiAEIBc3A+gCIAUgDiAJIBIQwhkMBgsgAkUEQCAFKAJ8IQEgBSgCeCEGQYev4ABBAxDAGiEXIARBpAE6AOACIAQgFzcD6AIgBSAGIAEgBEHgAmoQwhlBASEGDAYLIAZBASEGRQ0FIAUoAnwhASAFKAJ4IQZBh6/gAEEDEMAaIRcgBEH6ADoA4AIgBCAXNwPoAiAFIAYgASAEQeACahDCGUEBIQYMBQsgAkUEQCAFKAJ8IQEgBSgCeCEIQfWp4ABBAhDAGiEXIARBpAE6AOACIAQgFzcD6AIgBSAIIAEgBEHgAmoQwhlBASENDAULIA0NAkEBIQ0gBkEAIQZFDQQgBSgCfCEBIAUoAnghBkH1qeAAQQIQwBohFyAEQYev4ABBAxDAGjcD8AIgBCAXNwPoAiAEQfkAOgDgAiAFIAYgASAEQeACahDCGUEBIQYMBAtBASEUIAMNAyAFKAJ8IQEgBSgCeCEIQZWp4ABBBRDAGiEXIARBpQE6AOACIAQgFzcD6AIgBSAIIAEgBEHgAmoQwhkMAwsgBEHgAmoiCCAFEMkVIARBoARqIAQoAuACEM4EIAQoAqgEIQECQAJAAkAgBCkDoAQiF1BFBEAgBCAEKAKsBDYCvAQgBCABNgK4BCAEIBc3A7AEIARB2AFqIARBsARqEIocIAgQkCYgBEEgaiAFQZjc3wAQ+xAgBCgCJCEIIAQoAiBFDQEgCCEBDAILIARB4AJqEJAmDAwLIAQgCDYC4AIgBEEYaiAFQZjd3wAQ+xAgBCgCHCEBIAQoAhhFDQEgBEHgAmoQ+ycLIAQpA9gBEN0aDAoLIARBkARqIhIgBEHgAWopAwA3AwAgBEGYBGoiFSAEQegBaikDADcDACAEIAQpA9gBNwOIBCARIAUoAnwiDiAOIBFLGyEWIAQoAvQDIAxGBEAgBEH0A2oQ+RYgBCgC+AMhDwsgDyAMQTBsaiIJIBEgDiAOIBFJGzYCBCAJIBY2AgAgFSkDACEXIBIpAwAhGCAEKQOIBCEZIAkgFDoAKiAJIAY6ACkgCSANOgAoIAkgATYCJCAJIAg2AiAgCSAZNwIIIAkgBCgAgwQ2ACsgCUEvaiAEQYcEai0AADoAACAJQRBqIBg3AgAgCUEYaiAXNwIAIAQgDEEBaiIMNgL8AyAHEOUNIgEEQCABKAIAQRBGDQILIARB4AJqIAVBBBDMCCAELQDgAg0DIAQtAOECDQggBxDlDSIBBEAgASgCAEEQRg0FCyAEQegCaiAHEOYLIARBEGogBxCkFCAEQYi+4AA2AuQCIARBNDoA4AIgBCgCECAEKAIUIARB4AJqEPAUIQEgBxDlDSICRQ0JIAIoAgBBJEcNCSAFIAUpA0A3A3ggBSgCKCAFQSU2AihBJEcNBSAFIAUoAiwQggwMCQsgBSgCfCEBIAUoAnghCEH1qeAAQQIQwBohFyAEQfoAOgDgAiAEIBc3A+gCIAUgCCABIARB4AJqEMIZQQEhDQwBCwsgCyAKKQIANwIAIAUoAighASAFQSU2AiggBSAFKQNANwN4IAtBCGogCkEIaikCADcCACALQRBqIApBEGooAgA2AgAgBCABNgLgAiAEQeACahC/CgwDCyAEKALkAiEBDAULIAsgCikCADcCACAFKAIoIQEgBUElNgIoIAUgBSkDQDcDeCALQQhqIApBCGopAgA3AgAgC0EQaiAKQRBqKAIANgIAIAQgATYC4AIgBEHgAmoQvwoMAQsLQdnk4ABBKEGw698AEOEXAAsgBEHsAmogBxDmCyAEIAcQpBQgBEERNgLoAiAEQejh3wA2AuQCIARBMDoA4AIgBCgCACAEKAIEIARB4AJqEPAUIQFBASECIAcQ5Q0iA0UNAyADKAIAQSRHDQMgBSAFKQNANwN4IAUoAiggBUElNgIoQSRGBEAgBSAFKAIsEIIMDAQLQdnk4ABBKEH84d8AEOEXAAsgBCgC+AMhAiAEKAL0AyIGQYCAgIB4RgRAIAIhAQwCCyAEIAw2AvADIAQgAjYC7AMgBCAGNgLoAwJAAkAgBxDlDSIBRQ0AIAEoAgBBFEcNACABLQAEQQZGDQELIARB6AJqIAcQ5gsgBEEIaiAHEKQUIARBoNvfADYC5AIgBEE0OgDgAiAEKAIIIAQoAgwgBEHgAmoQ8BQhAQJAAkAgBxDlDSICRQ0AIAIoAgBBJEcNACAFIAUpA0A3A3ggBSgCKCAFQSU2AihBJEcNASAFIAUoAiwQggwLIARB6ANqEOkmDAMLQdnk4ABBKEHI5N8AEOEXAAsgBSgCKCEBIAVBJTYCKCAFIAUpA0A3A3ggBEHsAmogCkEIaikCADcCACAEQfQCaiAKQRBqKAIANgIAIAQgCikCADcC5AIgBCABNgLgAiAEQeACahC/CiAFKAJ8IQNBFEEEEJEgIgEgDDYCCCABIAI2AgQgASAGNgIAIAEgECADIAMgEEkbNgIQIAEgECADIAMgEEsbNgIMQQAhAgwCCyAEQfQDahDpJgtBASECCyAEQeACaiIDIARB0ABqQYgBEPYGGiATEKsgIBMgA0GIARD2BhogBEEsahCQJiAAIAE2AgQgACACNgIAIARBwARqJAALvhEDCX8BfAF+IwBB8ABrIgQkAAJAAkACQAJAAkAgAgRAIANpQQFGDQEgA0EKRw0CIARBDGogASACEPscukRxo3kJT5MKQKObIg1EAAAAAAAA8L9kRSANRAAAAAAAAPBBY0VyBH9BAAUgDasLEM8ZIARBGGogASACELMVIAQoAiAiA0HAAEkNAyAEQdAAakGQzgAQgBEgAxDVCyEKQQEhAQNAIAogBCgCWCIFTQRAA0AgBCgCHCADIAQoAlQiAiAFEKIXRQRAIAQoAlAgAhDBKQwHCyAEQThqIARBGGogBEHQAGoQtQIgBEEwaiICIARBQGsoAgA2AgAgBCAEKQI4NwMoIAQoAkQhCSAEKAJIIQggBCgCTCELIAQoAhggBCgCHBDBKSAEQSBqIAIoAgA2AgAgBCAEKQMoNwMYQQAhBgNAIAEgBkYEQCAJIAgQwSkgBCgCWCEFIAQoAiAhAwwCBSAEIAs2AmggBCAINgJkIAQgCTYCYCAEQThqIARB4ABqQZDOABDZBiAEKAI4IQkgBCgCPCEIIAQoAkAhCyAEKAJEIQdBBCEFA0AgBQRAIARBDGogByAHQQpuIgdBCmxrENIcIAVBAWshBQwBCwsgBkEBaiEGDAELAAsACwAFIARBOGogBCgCVCICIAUgAiAFEMMQIAQoAlAgAhDBKSAEQdgAaiAEQUBrKAIANgIAIAQgBCkCODcDUCABQQF0IQEMAQsACwALAn9B+I/kAC0AABpBARBgIgEEQCABDAELAAsiA0EwOgAAQQEhCEEBIQYMBAtBIEEfIANnayIKQf8BcSIJbiIHIApsQf8BcUEgRwRAIARBOGpBfyABIAIQ+xwgCqwQ0RwiDqcgDkKAgICAEFobEM8ZIAEgAkECdGohAkF/IAp0QX9zIQZBACEDA0ACQAJAIAEgAkYEQCAFQf8BcQRAIARBOGogAxDSHAsgBCgCQEEBayEFIAQoAjghCCAEKAI8IQMDQCAFQX9GBEBBACEGDAkLIAMgBWotAAANAiAFQQFrIQUMAAsACyABKAIAIgcgBXQgA3IhAyAFQSBqIQUDQCAFQf8BcSIIIAlJDQIgBEE4aiADIAZxENIcIAcgCiAFa3YgAyAKdiAIQSBLGyEDIAUgCmshBQwACwALIAVBAWohBgwFCyABQQRqIQEMAAsACyAEQThqQX8gASACEPscIAqsENEcIg6nIA5CgICAgBBaGxDPGUF/IAp0QX9zIQYgASACQQFrIghBAnRqIQsgASEJA0ACQAJAIAkgC0YEQCABIAIgCEHQhcIAEJ4fKAIAIQUDQCAFRQ0CIARBOGogBSAGcRDSHCAFIAp2IQUMAAsACyAJKAIAIQNBACEFA0AgBUH/AXEgB08NAiAEQThqIAMgBnEQ0hwgAyAKdiEDIAVBAWohBQwACwALIAQoAkAhBiAEKAI8IQMgBCgCOCEIDAQLIAlBBGohCQwACwALIARBDGogASACEPscuiADuBDSBqObIg1EAAAAAAAA8L9kRSANRAAAAAAAAPBBY0VyBH9BAAUgDasLEM8ZIARBGGogASACELMVIANBA3QiAUH8lcIAaigCACEKIAFB+JXCAGooAgAhDAJAIAQoAiAiBkHAAEkNACAEQdAAaiAMEIARIAYQ1QshCUEBIQIDQCAJIAQoAlgiBU0EQANAIAQoAhwgBiAEKAJUIgEgBRCiF0UEQCAEKAJQIAEQwSkMBAsgBEE4aiAEQRhqIARB0ABqELUCIARBMGoiBSAEQUBrKAIANgIAIAQgBCkCODcDKCAEKAJEIQsgBCgCSCEJIAQoAkwhASAEKAIYIAQoAhwQwSkgBEEgaiAFKAIANgIAIAQgBCkDKDcDGEEAIQgDQCACIAhGBEAgCyAJEMEpIAQoAlghBSAEKAIgIQYMAgUgBCABNgJoIAQgCTYCZCAEIAs2AmAgBEE4aiAEQeAAaiAMENkGIAQoAjghCyAEKAI8IQkgBCgCQCEBIAQoAkQhByAKIQUDQCAFBEAgBEEMaiAHIAcgA24iByADbGsQ0hwgBUEBayEFDAELCyAIQQFqIQgMAQsACwALAAUgBEE4aiAEKAJUIgEgBSABIAUQwxAgBCgCUCABEMEpIARB2ABqIARBQGsoAgA2AgAgBCAEKQI4NwNQIAJBAXQhAgwBCwALAAsDQAJAIAQoAiAiAUEBTQRAIAQoAhwgAUEAQeCFwgAQnh8oAgAhBQNAIAVFDQIgBEEMaiAFIAUgA24iBSADbGsQ0hwMAAsACyAEQegAaiAEQSBqKAIANgIAIAQgBCkCGDcDYCAEQThqIARB4ABqIAwQ2QYgBEHYAGogBEFAaygCADYCACAEIAQpAjg3A1AgBCgCRCEHIAohBQNAIAUEQCAEQQxqIAcgByADbiIHIANsaxDSHCAFQQFrIQUMAQUgBEEgaiAEQdgAaigCADYCACAEIAQpA1A3AxgMAwsACwALCyAEKAIUIQYgBCgCECEDIAQoAgwhCCAEKAIYIAQoAhwQwSkMAQsDQAJAIAQoAiAiAUEBTQRAIAQoAhwgAUEAQeCFwgAQnh8oAgAhBQNAIAVFDQIgBEEMaiAFIAVBCm4iBUEKbGsQ0hwMAAsACyAEQegAaiAEQSBqKAIANgIAIAQgBCkCGDcDYCAEQThqIARB4ABqQZDOABDZBiAEQdgAaiAEQUBrKAIANgIAIAQgBCkCODcDUCAEKAJEIQdBBCEFA0AgBQRAIARBDGogByAHQQpuIgdBCmxrENIcIAVBAWshBQwBBSAEQSBqIARB2ABqKAIANgIAIAQgBCkDUDcDGAwDCwALAAsLIAQoAhQhBiAEKAIQIQMgBCgCDCEIIAQoAhggBCgCHBDBKQtBACEFA0AgBSAGRg0BIAMgBWoiASABLQAAIgFBMHIgAUHXAGogAUEKSRs6AAAgBUEBaiEFDAALAAsgACAGNgIIIAAgAzYCBCAAIAg2AgAgBEHwAGokAAvrEgIGfwJ+IwBBkBJrIgMkAAJAIAJFBEAgAEGHgICAeDYCAAwBCyACQQR0IQQgASEGAkADQCAERQ0BIARBEGshBCAGKAIIIAZBEGohBg0ACyAAQYeAgIB4NgIADAELAkACfwJAAkACQAJAAkACQAJAIAJBAUYEQCABKAIEIQQgASgCCCIFQQFHDQEgAEGAgICAeDYCACAAIAQtAAA6AAQMCgsCQAJAIAJBAkYEQCABQQhqIQZBACEEA0AgBEEgRg0CIAQgBmogBEEQaiEEKAIAQQFGDQALC0EAIQUgAkEDRg0BDAgLIAFBCGooAgBFDQIgASgCGEUNAyABKAIEIQIgAEGBgICAeDYCACAAIAItAAA6AAQgACABKAIULQAAOgAFDAoLQQghBANAIARBOEcEQCABIARqIARBEGohBCgCAEEBRg0BDAgLCyABKAIIRQ0DIAEoAhhFDQQgASgCKEUNBSABKAIULQAAQRB0IAEoAgQtAABBCHRyIAEoAiQtAABBGHRyIQVBAQwHCyADQcgAaiIGIAQgBRCXAyADIAYQ6QsgAygCOEECRg0HIANBzABqIANByAAQ9gYaIABBg4CAgHg2AgAgAEEEaiAGQcwAEPYGGgwIC0EAQQBBiLjDABCfEAALQQBBAEGYuMMAEJ8QAAtBAEEAQbi4wwAQnxAAC0EAQQBByLjDABCfEAALQQBBAEHYuMMAEJ8QAAtBAAsgBXJBAXEEQCAAQYKAgIB4NgIAIABBBmogBUEYdjoAACAAIAVBCHY7AQQMAgsgA0ECNgI4CyADEMQkIAEoAgghBiACQQFHBEAgAUEYaiEEIAJBAWtB/////wBxIQUDQCAGIAQoAgAiByAGIAdJGyEGIARBEGohBCAFQQFrIgUNAAsLIANBAjsB3AwgA0GAgogQNgLYDCADQv////8PNwLMDCADQgQ3AsQMIANCADcCvAwgA0KAgICAwAA3ArQMQQAhBCADQQA6ANQMIAJBBHQhBQNAIAQgBUcEQAJAIAMtAN0MDQAgAygCvAxBgAFPBEAgA0EBOgDdDCADQbQMahDdFAwBCyABIARqIgdBCGooAgAiCARAIANBtAxqIAdBBGooAgAgCBDGCQwBCyADQQE6AN0MIANBtAxqEN0UCyAEQRBqIQQMAQsLIANBmA9qIgQgA0G0DGoiBRD6AQJAAkAgAygCmA8iB0GAgICAeEcEQCADQdwDaiADQZwPakEsEPYGGiADIAc2AtgDIAUQsB8gA0EDNgLACSADQQA7AMUJIANBggI7AcgJIANBAToAxAkgBCADQcAJaiABIAIQwgEgAygCmA9BAUYEQCADQfAGaiADQagPaikDADcDACADQfgGaiADQbAPaikDADcDACADIAMpA6APNwPoBgwCCyADQbQMaiIFIANBmA9qQQRyQeQCEPYGGiADQdAJaiIEIAVB5AIQ9gYaIANB4AZqIAMtAMgJIAMtAMkJIAQQfiAEEOIXIAMoAuAGQQFxDQEgAygC5AYhBCADQYgEaiIFIANB6AZqQdgCEPYGGiAEQYCAgIB4Rg0BIANB/ABqIAVB2AIQ9gYaIANByABqIgUgA0HYA2pBMBD2BhogAyAGNgLUAyADIAQ2AnggAygCSEGAgICAeEYNAiAAIAVBkAMQ9gYaDAMLIANBgICAgHg2AkggA0G0DGoQsB8MAQsgA0GAgICAeDYCSCADQdgDahCgEwsgA0HIAGoiBBDFJCAEQQBBgAIQhQsaIAJBBHQhBiABIQQCQANAIAYEQCAEKAIIQQFHDQIgBCgCBC0AACADQcgAampBAToAACAGQRBrIQYgBEEQaiEEDAELCyADLQBIIQQgA0GYD2oiBiADQckAakH/ARD2BhogBEECRg0AIAAgBDoABCAAQQVqIAZB/wEQ9gYaIABBhYCAgHg2AgAMAQsgA0EDNgKkBCADQQA7AKkEIANBADoAkgQgA0EAOgCeBCADQQE6AJQEIANCgoCAgDA3AogEIANBAkEBIAJB9QNJIgYbIgQ6AKwEIANBAzYCmAQgA0EBOgCoBCADQQA6AK0EIANBgAI7AaAEIANBATsBnAQgA0EBOwGQBCADQcgAaiIFIANBpARqIAEgAhDCAQJAAkACQAJAAkAgAygCSEUEQCADQegGaiIBIANB5gBqLwEAOwEAIAMgAykBXjcD4AYgAykCTCEJIAMpAlQhCiADLwFcIQIgA0G0D2ogA0HoAGoiB0HIAhD2BhogA0GyD2ogAS8BADsBACADIAI7AagPIAMgCjcCoA8gAyAJNwKYDyADIAMpA+AGNwGqDyAGRQRAIAVBAkEBIANBmA9qEIYBIAMoAkgiAUGAgICAeEcEQCADQcgJaiICIANB5gBqLwEAOwEAIAMgAykBXjcDwAkgAykCTCEJIAMpAlQhCiADLwFcIQYgA0HgBmoiBSAHQagCEPYGGiADQe4JaiACLwEAOwEAIAMgBjsB5AkgAyAKNwLcCSADIAk3AtQJIAMgATYC0AkgAyADKQPACTcB5gkgA0HwCWogBUGoAhD2BhpBvIjEACEFIANB0AlqEOMfIQEMBQsMAgsgA0HIAGpBAEEBIANBmA9qEH4gAygCSEUEQCADQegGaiIBIANB5gBqLwEAOwEAIAMgAykBXjcD4AYgAykCTCEJIAMpAlQhCiADLwFcIQIgA0HQDGogA0HoAGpBwAIQ9gYaIANBzgxqIAEvAQA7AQAgAyACOwHEDCADIAo3ArwMIAMgCTcCtAwgAyADKQPgBjcBxgxBwInEACEFIANBtAxqEOQfIQEMBAsMAQsgA0GIEmogA0HmAGovAQA7AQAgAyADKQFeNwOAEiADLQBdIQYgAy0AXCEEIAMoAlghBSADKAJUIQEgAygCUCECDAELIANBiBJqIANB5gBqLwEAOwEAIAMgAykBXjcDgBIgAy0AXSEGIAMtAFwhBCADKAJYIQUgAygCVCEBIAMoAlAhAiADQZgPahDiFwsgAkEDRg0BIANBAzoA4QMMAgsgAy0ArQQhBiADQZgPahDiFwsgAyAEOgDgAyADIAU2AtwDIAMgATYC2AMgAyADLwGAEjsB4gMgAyAGOgDhAyAGQf8BcUEDRg0AIAAgAykC2AM3AgQgAEGGgICAeDYCACAAQQxqIANB4ANqKAIANgIADAELIANB2ANqEMYkIABBh4CAgHg2AgALIANBkBJqJAALpREBCH8jAEHwAGsiAyQAAkACQAJAAkACQAJAAkADQAJAAkACQAJAAkAgAigCAEEBaw4HAQYAAgMIBAALIANBAToAVCADQQA2AlAgA0KAgICAEDcCSCAAIANByABqENoZDAsLIAIoAgQhBCADQQhqIAIoAggiAkEBQQEQ7BQgAygCCCEGIAMoAgwgBCACEPYGIQQgA0EBOgBUIAMgAjYCUCADIAQ2AkwgAyAGNgJIIANBKGoiAiADQcgAahDaGSABKAIIIAEtABAgAhDmICAAQQhqIANBMGooAgA2AgAgACADKQIoNwIADAoLIANBHGogASACKAIMEJcBIAIoAgQhBiACKAIQIgRFBEAgAi0AFAJAIAYEQCACKAIIQQFGDQELIANBHGoQtRcLQQAhAiADQQA2AlAgA0KAgICAEDcCSCADQQE6AFQgA0EoaiADQcgAahDaGUEBcQ0FA0AgAkEMRg0GIANBHGogAmoiBCgCACEGIAQgA0EoaiACaiIEKAIANgIAIAQgBjYCACACQQRqIQIMAAsACyAEIAEoAgQiByAEIAdJGyEFAkAgBkUNACAEIAIoAghHDQAgA0EBOgBUIANBADYCUCADQoCAgIAQNwJIIANBPGogA0HIAGoQ2hkDQAJAIAVFDQAgA0E8aiIGEOsPDQAgA0EwaiADQcQAaigCADYCACADIAMpAjw3AyggA0HIAGoiAiADQRxqEMIJIAYgASADQShqIAIQ9gEgBUEBayEFIAIQvyQMAQsLIAQgB00NCSADQTxqELUXDAkLIANBAToAVCADQQA2AlAgA0KAgICAEDcCSCADQTxqIANByABqENoZA0AgBUUNCCADQTxqIgQQ6w8NCCADQTBqIANBxABqKAIANgIAIAMgAykCPDcDKCADQcgAaiICIANBHGoQwgkgBCABIANBKGogAhD2ASAFQQFrIQUgAhC/JAwACwALIAIoAgQhAgwBCwsgAigCDEEcbCEFIAEtABAhCCABKAIMIQogAigCCCEHQQQhBEEAIQIDQCAFRSACQYCAgIB4RnJFBEAgAyAGNgIwIAMgBDYCLCADIAI2AiggA0HIAGoiCSABIAcQlwEgA0E8aiAKIAggA0EoaiAJEIAGIAVBHGshBSAHQRxqIQcgAygCPCECIAMoAkAhBCADKAJEIQYgCRC/JAwBCwsgACAGNgIIIAAgBDYCBCAAIAI2AgAMBgsgAigCBA0CIAIoAgwiBCACKAIQQQN0IgVqIQggASgCACEGIAQhAgJAA0AgBQRAIAYgB0kNAiAFQQhrIQUgAigCBCACKAIAayAHakEBaiEHIAJBCGohAgwBCwsgBiAHSQ0AIANBADYCJCADQoCAgIDAADcCHANAIAQgCEYEQCABKAIIIAEtABAgA0EcahDmICAAQQhqIANBJGooAgA2AgAgACADKQIcNwIADAgFIARBCGogBCgCBCEHIAQoAgAhAkEAIQUCQANAIAVBAXEgAiAHS3INASADQQA2AjggA0EQaiACIANBOGoQ2gkgAygCFCEEIAMoAhAgA0EANgJEIANCgICAgBA3AjwgA0EDOgBoIANBIDYCWCADQQA2AmQgA0HEr8QANgJgIANBADYCUCADQQA2AkggAyADQTxqNgJcIAQgA0HIAGoQ3CpFBEAgA0EwaiADQcQAaigCADYCACADIAMpAjw3AyggA0EBOgA0IAJBgMADIAJBAWogAkH/rwNGGyACIAdPIgUbIQIgA0EcaiADQShqEIEPDAELC0GIt+AAQTcgA0EoakHcr8QAQYy44AAQww4ACyEEDAELAAsACyAAQYCAgIB4NgIADAULIANB0ABqIANBJGooAgA2AgAgAyADKQIcNwNIIAAgASgCDCABLQAQIANByABqIANBKGoiABCABiAAEL8kDAQLIAIoAgwhBCACKAIIIQUgAS0AEEUEQCADQQE6AFQgA0EANgJQIANCgICAgBA3AkggBEEcbCECIANBPGogA0HIAGoQ2hkDQAJAIAJFDQAgA0E8aiIGEOsPDQAgA0EwaiADQcQAaigCADYCACADIAMpAjw3AyggA0HIAGoiBCABIAUQlwEgBiABIANBKGogBBD2ASACQRxrIQIgBUEcaiEFIAQQvyQMAQsLIAAgAykCPDcCACAAQQhqIANBxABqKAIANgIADAQLIANBAToAVCADQQA2AlAgA0KAgICAEDcCSCAEQRxsIQIgBUEcayEEIANBPGogA0HIAGoQ2hkDQAJAIAJFDQAgA0E8aiIFEOsPDQAgA0EwaiADQcQAaigCADYCACADIAMpAjw3AyggA0HIAGoiBiABIAIgBGoQlwEgBSABIANBKGogBhD2ASACQRxrIQIgBhC/JAwBCwsgACADKQI8NwIAIABBCGogA0HEAGooAgA2AgAMAwsgAigCDCIGIAIoAhBBAXQiBWohCCABKAIAIQQgBiECAkACQAJAA0AgBQRAIAQgB0kNAiACLQABIgogAi0AACIJSQ0EIAJBAmohAiAFQQJrIQUgCiAJa0H/AXEgB2pBAWohBwwBCwsgBCAHSQ0AIANBADYCMCADQoCAgIDAADcCKAwBCyAAQYCAgIB4NgIADAQLA0AgBiAIRgRAIAEoAgggAS0AECADQShqEOYgIABBCGogA0EwaigCADYCACAAIAMpAig3AgAMBQUgBi0AASEFIAYtAAAhAkEAIQQDQAJAIARBAXENACAFIAJB/wFxIgdJDQBBAUEBEJEgIgQgAjoAACADQQE6AFQgA0EBNgJQIAMgBDYCTCADQQE2AkggBSAHTSEEIAIgBSAHS2ohAiADQShqIANByABqEIEPDAELCyAGQQJqIQYMAQsACwALQYStxAAQwikACyADQTxqELUXCyAAIAMpAjw3AgAgAEEIaiADQcQAaigCADYCACADQRxqEL8kCyADQfAAaiQAC+0SAgx/AX4jAEGwAWsiAiQAIAJBADYCSEEBIQUgAkEBNgI8IAJB3I/AADYCOCACQgQ3AkACQCABKAIUIAEoAhggAkE4ahCbJA0AIAAoAgQhAyACIAAoAggiDDYCMCACQQA2AiwgAiADNgIkIAIgAyAMQRRsajYCKCACQYQBaiEIIAAoAtwCIQogACgC2AIhDSABKAIYIQMgASgCFCEEIAAoAtQCIQsDQCACQRhqIAJBJGoQgRMgAigCHCIGRQRAIAJBAjYCPCACQeyhwAA2AjggAkIBNwJEIAJBDjYClAEgAiAAQeACajYCkAEgAiACQZABaiIINgJAQQEhBSAEIAMgAkE4ahCbJA0CIAJBAjYCPCACQYiiwAA2AjggAkIBNwJEIAJBDzYClAEgAiAAKAI8IgFBAEc6AHggAiAINgJAIAIgAkH4AGoiCjYCkAEgBCADIAJBOGoQmyQNAiACQQI2AjwgAkH4lMMANgI4IAJCATcCRCACQRA2ApQBIAIgDDYCeCACIAg2AkAgAiAKNgKQASAEIAMgAkE4ahCbJA0CIAJBAjYCPCACQZiVwwA2AjggAkIBNwJEIAJBEDYClAEgAiAAKAI4IgY2AnggAiAINgJAIAIgCjYCkAEgBCADIAJBOGoQmyQNAiACQQI2AjwgAkG0osAANgI4IAJCATcCRCACQRA2ApQBIAIgAEHIAmo2ApABIAIgCDYCQCAEIAMgAkE4ahCbJA0CIAJBAjYCPCACQdyiwAA2AjggAkIBNwJEIAJBEDYClAEgAiAAQcwCajYCkAEgAiAINgJAIAQgAyACQThqEJskDQIgAkHAo8AANgI4IAJCATcCRCACQRA2ApQBIAAoAkQhCSAAKAIUIQcgACgCLCELIAAoAiAhACACQQI2AjwgAiAHQQlsIAxBFGxqIAtBA3RqIAlBACABG2ogACAGakECdGo2AnggAiAINgJAIAIgCjYCkAEgBCADIAJBOGoQmyQNAiACQQA2AkggAkEBNgI8IAJB1MLDADYCOCACQgQ3AkAgBCADIAJBOGoQmyQhBQwCCwJAAkACQAJAAkAgAigCGCIBDgIBAAILIAJBCTYCfCACQQE2AqwBIAJBATYCpAEgAkECNgKUASACQbChwAA2ApABIAJBATYCnAEgAiACQawBajYCeCACQQM6AFQgAkEINgJQIAJCIDcCSCACQoCAgIDgADcCQCACQQI2AjggAiACQThqNgKgASACIAJB+ABqNgKYASAEIAMgAkGQAWoQmyRFDQQMAwsgAkEANgJIIAJBATYCPCACQYSWwwA2AjggAkIENwJAIAQgAyACQThqEJskRQ0BDAILIAEgDUYgASAKRnIhBQJAIAEgC0sEQCAFDQEgAkEANgJIIAJBATYCPCACQeyVwwA2AjggAkIENwJAIAQgAyACQThqEJskRQ0CDAMLIAVFBEAgAkEANgJIIAJBATYCPCACQfiVwwA2AjggAkIENwJAIAQgAyACQThqEJskRQ0CDAMLIAJBADYCSCACQQE2AjwgAkHwqcAANgI4IAJCBDcCQCAEIAMgAkE4ahCbJEUNAQwCCyACQQA2AkggAkEBNgI8IAJB5KnAADYCOCACQgQ3AkAgBCADIAJBOGoQmyQNAQsgAiABNgI0IAJBCTYCfCACIAYoAgw2AqwBIAJBCTYChAEgAiACQawBajYCgAEgAiACQTRqNgJ4IAJBAzoAdCACQQg2AnAgAkKggICAEDcCaCACQoCAgIDgADcCYCACQQI2AlggAkEDOgBUIAJBCDYCUCACQiA3AkggAkKAgICA4AA3AkAgAkECNgI4IAJBAjYCpAEgAkEDNgKUASACQfigwAA2ApABIAIgAkE4ajYCoAEgAkECNgKcASACIAJB+ABqNgKYASAEIAMgAkGQAWoQmyQNACACQRBqIAAgARCMICACKQMQIQ4gAkEANgKMASACIA43AoQBIAJBADYCeANAIAJBOGogCBDVEAJAAkACQAJAAkACQAJAIAItADhBAUYEQCACKAA6IQYgAjEAOSEOIAIoAngNASAOQgiGIAatQiCGhCAOhCEODAcLIAIoAnggAkEANgJ4QQFxRQ0DIAIoAoABIQkgAi0AfSEHIAItAHwhBQwBCyACLQB8IQUgAigCgAEiCSAGRg0BIAJBATYCeCACLQB9IQcgAiAOQgiGIAatQiCGhCAOhDcCfAsgAiACKAKMASIGQQFqNgKMASAGDQIMAwsgBa1C/wGDIAatQiCGIA5CCIaEhCEODAMLIAJBADYCSCACQQE2AjwgAkH4x98ANgI4IAJCBDcCQCAEIAMgAkE4ahCbJA0EIAFBAWsgC08NBSACQQA2AkggAkEBNgI8IAJBpKHAADYCOCACQgQ3AkAgBCADIAJBOGoQmyQNBCACQQhqIAAgARCNIEEAIQUgAigCDCEBIAIoAggiBkEsaiEJIAZBKGohBgNAIAFFBEAgAkEANgJIIAJBATYCPCACQfjH3wA2AjggAkIENwJAIAQgAyACQThqEJskRQ0HDAYLIAYoAgAgCSgCACABQeyMxAAQoR8iBygCBCEBIAcoAgAhByAFBEAgAkEANgJIIAJBATYCPCACQdTEwwA2AjggAkIENwJAIAQgAyACQThqEJskDQYLIAJBATYCPCACQcjv4AA2AjggAkIBNwJEIAJBCTYClAEgAiAHNgJ4IAVBAWshBSACIAJBkAFqNgJAIAIgAkH4AGo2ApABIAQgAyACQThqEJskRQ0ACwwECyACQQA2AkggAkEBNgI8IAJB1MTDADYCOCACQgQ3AkAgBCADIAJBOGoQmyQNAwsgByAFQf8BcUcEQCACIAU6AKsBIAIgBzoANCACQQM2ApQBIAJBlMbDADYCkAEgAkIDNwKcASACQRA2AkwgAkERNgJEIAJBETYCPCACIAk2AqwBIAIgAkE4ajYCmAEgAiACQawBajYCSCACIAJBNGo2AkAgAiACQasBajYCOCAEIAMgAkGQAWoQmyRFDQIMAwsgAiAFOgA0IAJBAjYCPCACQeDEwwA2AjggAkICNwJEIAJBEDYCnAEgAkERNgKUASACIAk2AqwBIAIgAkGQAWo2AkAgAiACQawBajYCmAEgAiACQTRqNgKQASAEIAMgAkE4ahCbJEUNAQwCCyACIA43AnwgAkEBNgJ4DAALAAsLQQEhBQsgAkGwAWokACAFC7ATAQJ/IwBBQGoiAiQAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQRAgACgCAEECayIDIANBI08bQQFrDiIBAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiAAsgAiAAQQhqNgIMIAJBATYCLCACQcjv4AA2AiggAkIBNwI0IAJB1wQ2AhwgAiACQRhqNgIwIAIgAkEMajYCGCABKAIUIAEoAhggAkEoahCbJAwiCyACQQA2AjggAkEBNgIsIAJBvI/ZADYCKCACQgQ3AjAgASgCFCABKAIYIAJBKGoQmyQMIQsgAkEANgI4IAJBATYCLCACQcSP2QA2AiggAkIENwIwIAEoAhQgASgCGCACQShqEJskDCALIAJBADYCOCACQQE2AiwgAkHMj9kANgIoIAJCBDcCMCABKAIUIAEoAhggAkEoahCbJAwfCyACQQA2AjggAkEBNgIsIAJB1I/ZADYCKCACQgQ3AjAgASgCFCABKAIYIAJBKGoQmyQMHgsgAkEANgI4IAJBATYCLCACQdyP2QA2AiggAkIENwIwIAEoAhQgASgCGCACQShqEJskDB0LIAJBADYCOCACQQE2AiwgAkHkj9kANgIoIAJCBDcCMCABKAIUIAEoAhggAkEoahCbJAwcCyACQQA2AjggAkEBNgIsIAJB7I/ZADYCKCACQgQ3AjAgASgCFCABKAIYIAJBKGoQmyQMGwsgAkEANgI4IAJBATYCLCACQfSP2QA2AiggAkIENwIwIAEoAhQgASgCGCACQShqEJskDBoLIAJBADYCOCACQQE2AiwgAkH8j9kANgIoIAJCBDcCMCABKAIUIAEoAhggAkEoahCbJAwZCyACQQA2AjggAkEBNgIsIAJBhJDZADYCKCACQgQ3AjAgASgCFCABKAIYIAJBKGoQmyQMGAsgAkEANgI4IAJBATYCLCACQYyQ2QA2AiggAkIENwIwIAEoAhQgASgCGCACQShqEJskDBcLIAJBADYCOCACQQE2AiwgAkGUkNkANgIoIAJCBDcCMCABKAIUIAEoAhggAkEoahCbJAwWCyACQQA2AjggAkEBNgIsIAJBnJDZADYCKCACQgQ3AjAgASgCFCABKAIYIAJBKGoQmyQMFQsgAkEANgI4IAJBATYCLCACQaSQ2QA2AiggAkIENwIwIAEoAhQgASgCGCACQShqEJskDBQLIAJBADYCOCACQQE2AiwgAkGskNkANgIoIAJCBDcCMCABKAIUIAEoAhggAkEoahCbJAwTCyACIABBEGo2AgwgAkECNgIsIAJBxJDZADYCKCACQgE3AjQgAkHYBDYCHCACIAJBGGo2AjAgAiACQQxqNgIYIAEoAhQgASgCGCACQShqEJskDBILIAJBADYCOCACQQE2AiwgAkHUkNkANgIoIAJCBDcCMCABKAIUIAEoAhggAkEoahCbJAwRCyACQQE2AiwgAkHI7+AANgIoIAJCATcCNCACQQI2AhAgAiAALQAEQQJ0IgBBuN/jAGooAgA2AhwgAiAAQZTg4wBqKAIANgIYIAIgAkEMajYCMCACIAJBGGo2AgwgASgCFCABKAIYIAJBKGoQmyQMEAsgAkEBNgIsIAJByO/gADYCKCACQgE3AjQgAkECNgIQIAIgAC0ABEECdCIAQfDg4wBqKAIANgIcIAIgAEGw4eMAaigCADYCGCACIAJBDGo2AjAgAiACQRhqNgIMIAEoAhQgASgCGCACQShqEJskDA8LIAJBADYCOCACQQE2AiwgAkHckNkANgIoIAJCBDcCMCABKAIUIAEoAhggAkEoahCbJAwOCyACQQA2AjggAkEBNgIsIAJB5JDZADYCKCACQgQ3AjAgASgCFCABKAIYIAJBKGoQmyQMDQsgAkEANgI4IAJBATYCLCACQeyQ2QA2AiggAkIENwIwIAEoAhQgASgCGCACQShqEJskDAwLIAJBADYCOCACQQE2AiwgAkH0kNkANgIoIAJCBDcCMCABKAIUIAEoAhggAkEoahCbJAwLCyACQQA2AjggAkEBNgIsIAJB/JDZADYCKCACQgQ3AjAgASgCFCABKAIYIAJBKGoQmyQMCgsgAiAAQQhqNgIUIAIgAEEQajYCDCACQQM2AiwgAkGUkdkANgIoIAJCAjcCNCACQdgENgIkIAJB2AQ2AhwgAiACQRhqNgIwIAIgAkEMajYCICACIAJBFGo2AhggASgCFCABKAIYIAJBKGoQmyQMCQsgAiAAQQhqNgIUIAIgAEEQajYCDCACQQM2AiwgAkG8kdkANgIoIAJCAjcCNCACQdgENgIkIAJB2AQ2AhwgAiACQRhqNgIwIAIgAkEMajYCICACIAJBFGo2AhggASgCFCABKAIYIAJBKGoQmyQMCAsgAiAAQRBqNgIUIAIgAEEIajYCDCACQQM2AiwgAkHokdkANgIoIAJCAjcCNCACQdgENgIkIAJB2QQ2AhwgAiACQRhqNgIwIAIgAkEMajYCICACIAJBFGo2AhggASgCFCABKAIYIAJBKGoQmyQMBwsgAiAAQRBqNgIUIAIgAEEIajYCDCACQQM2AiwgAkGQktkANgIoIAJCAjcCNCACQdgENgIkIAJB2gQ2AhwgAiACQRhqNgIwIAIgAkEMajYCICACIAJBFGo2AhggASgCFCABKAIYIAJBKGoQmyQMBgsgAiAAQQhqNgIMIAJBAjYCLCACQbSS2QA2AiggAkIBNwI0IAJB2AQ2AhwgAiACQRhqNgIwIAIgAkEMajYCGCABKAIUIAEoAhggAkEoahCbJAwFCyACIABBEGo2AgwgAkECNgIsIAJB0JLZADYCKCACQgE3AjQgAkHYBDYCHCACIAJBGGo2AjAgAiACQQxqNgIYIAEoAhQgASgCGCACQShqEJskDAQLIAJBADYCOCACQQE2AiwgAkHgktkANgIoIAJCBDcCMCABKAIUIAEoAhggAkEoahCbJAwDCyACQQA2AjggAkEBNgIsIAJB+JLZADYCKCACQgQ3AjAgASgCFCABKAIYIAJBKGoQmyQMAgsgAkEANgI4IAJBATYCLCACQYCT2QA2AiggAkIENwIwIAEoAhQgASgCGCACQShqEJskDAELIAIgAEEEajYCDCACQQI2AiwgAkGYk9kANgIoIAJCATcCNCACQdsENgIcIAIgAkEYajYCMCACIAJBDGo2AhggASgCFCABKAIYIAJBKGoQmyQLIAJBQGskAAvDEgEEfyMAQZABayIFJAACQAJAAkAgAkEDTQRAIAFBAWshByACIQYDQCAGRQ0DIAYgB2ogBkEBayEGLAAAQQBODQALDAELIAEoAABBgIGChHhxDQBBBCABQQNqQXxxIgYgAWsgASAGRhshBiACQQRrIQcDQCAGIAdJBEAgASAGaigCAEGAgYKEeHENAiAGQQRqIQYMAQsLIAEgB2ooAABBgIGChHhxRQ0BCyAFIAJBCGoQuxQgBUEANgIQIAUgBSkDADcCCCAFQYGAxAA2AhQgBSABNgIYIAUgASACajYCHCAEQf8BcUECSSEIQQAhBEEBIQIDQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAFQRRqEK4eIgEODggLCwsLCwsLCgUCBAEDAAsgAUEiRg0GIAFBJ0YNBSABQdwARg0IIAFBgIDEAEcNCiAEDQsgACAFKQIINwIAIABBCGogBUEQaigCADYCAAwWCyAFQQhqQbzY2ABBAhDdHQwSCyAFQQhqQdjZ2ABBAhDdHQwRCyAFQQhqQdrZ2ABBAhDdHQwQCyAFQQhqQb7Y2ABBAhDdHQwPCyAFQQhqQQkQ4A8MDgsgBUEIakEnEOAPDA0LIAVBCGpBIhDgDwwMCyADRQRAQQAhAiAFQQA2AkQgBUEBNgI4IAVB0NnYADYCNCAFQgQ3AjwgBUEIaiAFQTRqEPMkGgwNC0EAIQIgBUEANgJEQQEhBCAFQQE2AjggBUH02NgANgI0IAVCBDcCPCAFQQhqIAVBNGoQ8yQaDAwLAkAgBUEUahCJHSIBBEAgASgCAEH1AEYNAQsgBUEIakHc2dgAQQIQ3R0MCwsgBSAFKAIcNgKAASAFIAUpAhQ3AnggBUH4AGoiARCuHhogARCJHSIGQbDY2AAQvR0iBwRAIAVB+ABqEK4eGiAFQfgAahCJHSEGCwJAIAYEQCAGKAIAQSByQeQARg0BCyAFQQhqQdzZ2ABBAhDdHQwLCyAFQQA2AjwgBUKAgICAEDcCNCAFQTRqIgFB3AAQ4A8gAUH1ABDgDyAHDQMMCQsgBUEIakG62NgAQQIQ3R0MCQsgAUEBa0EPTwRAAkACQAJAAkACQCABQfD//wBxQRBHBEAgAUEga0HfAEkNCSABQf8Aa0GBAUkNBCABQajAAGsOAgECAwsgAkEBcUUNBAwKCyAFQQhqQcDY2ABBBhDdHQwNCyAFQQhqQcbY2ABBBhDdHQwMCyABQf/9A0cNByAFQQhqQczY2ABBBhDdHQwLCyADRQRAIAVBATYCOCAFQeTZ2AA2AjQgBUIBNwJAIAVB1AE2AnwgBSABOgAkIAUgBUH4AGo2AjwgBSAFQSRqNgJ4IAVBCGogBUE0ahDzJBoMCwtBASEEIAVBATYCOCAFQdTY2AA2AjQgBUIBNwJAIAVB1AE2AnwgBSABOgAkIAUgBUH4AGo2AjwgBSAFQSRqNgJ4IAVBCGogBUE0ahDzJBoMCgsgA0UEQCAFQQE2AjggBUHk2dgANgI0IAVCATcCQCAFQdQBNgJ8IAUgAToAJCAFIAVB+ABqNgI8IAUgBUEkajYCeCAFQQhqIAVBNGoQ8yQaDAoLQQEhBCAFQQE2AjggBUHU2NgANgI0IAVCATcCQCAFQdQBNgJ8IAUgAToAJCAFIAVB+ABqNgI8IAUgBUEkajYCeCAFQQhqIAVBNGoQ8yQaDAkLIAJBAXFFDQMMBQsgBUECNgI4IAVBqNrYADYCNCAFQgE3AkAgBUE+NgJ8IAUgBUH4AGo2AjwgBSAFQQhqNgJ4IAAgBUE0ahDvFCAFKAIIIAUoAgwQvikMCgsgBUE0akH7ABDgDwwFCyAFQQhqIAEQ4A8MBQsgA0UEQCAFQQE2AjggBUHk2dgANgI0IAVCATcCQCAFQdQBNgJ8IAUgAToAJCAFIAVB+ABqNgI8IAUgBUEkajYCeCAFQQhqIAVBNGoQ8yQaDAULQQEhBCAFQQE2AjggBUHU2NgANgI0IAVCATcCQCAFQdQBNgJ8IAUgAToAJCAFIAVB+ABqNgI8IAUgBUEkajYCeCAFQQhqIAVBNGoQ8yQaDAQLIAFBgAFJDQAgAUH//wNLDQEgBUGwAjYCKCAFIAE7AXQgBUEBNgKMASAFQQE2AnwgBUHw2dgANgJ4IAVBATYChAEgBSAFQfQAajYCJCAFQQM6AFAgBUEINgJMIAVCIDcCRCAFQoCAgIDAADcCPCAFQQI2AjQgBSAFQTRqNgKIASAFIAVBJGo2AoABIAVBCGogBUH4AGoQ8yQaDAMLIAVBCGogARDgDwwCCyAIRQRAIAVBywA2AiggBSABNgJ0IAVBATYCjAEgBUECNgJ8IAVB/NnYADYCeCAFQQE2AoQBIAUgBUH0AGo2AiQgBUEDOgBQIAVBCDYCTCAFQiA3AkQgBUKAgICAwAA3AjwgBUECNgI0IAUgBUE0ajYCiAEgBSAFQSRqNgKAASAFQQhqIAVB+ABqEPMkGgwCCyAFIAFBgIAEa0EKdkGAsANqNgIgIAUgAUH/B3FBgLgDcjYCdCAFQcsANgIwIAVBywA2AiggBUECNgKMASAFQQM2AnwgBUGQ2tgANgJ4IAUgBUH0AGo2AiwgBSAFQSBqNgIkIAVBAzoAcCAFQQg2AmwgBUKggICAEDcCZCAFQoCAgIDAADcCXCAFQQI2AlQgBUEDOgBQIAVBCDYCTCAFQiA3AkQgBUKAgICAwAA3AjwgBUECNgI0IAUgBUE0ajYCiAEgBUECNgKEASAFIAVBJGo2AoABIAVBCGogBUH4AGoQ8yQaDAELIAVBNGogBigCABDgDyAFQfgAahCuHhpBAyECA0ACQAJAIAJFBEBBBSEGIAcEQCAFQTRqQf0AEOAPQQchBgsgBUEIaiAFKAI4IAUoAjwQ3R0DQCAGRQ0CIAZBAWshBiAFQRRqEK4eGgwACwALIAVB+ABqEK4eIgFBgIDEAEcEQCABQTBrQQpJIAFBwQBrQQZJciABQeEAa0EGSXINAgsgB0UNACAFQTRqQf0AEOAPCyAFKAI0IAUoAjgQvikMAgsgBUE0aiABEOAPIAJBAWshAgwACwALQQAhAgwACwALIAAgAjYCCCAAIAE2AgQgAEGAgICAeDYCAAsgBUGQAWokAAuZDwEMfyMAQTBrIg0kACACQQJrIRACQAJAAkADQAJAAkACQAJAAkACQCABQSFPBEAgBA0BIAAgASACIANBARDdAQwKCyABQQJJDQkgAUEQaiADSw0FIAFBAXYhAyABQQ9LDQEgAUEHSwRAIAAgAhDdBiAAIANBAXQiBGogAiAEahDdBkEEIQcMCQsgAiAALwAAOwAAQQEhByACIANBAXQiBGogACAEai8AADsAAAwICyAAIAFBeHFqIQYgACABQQN2IghBDmxqIQwgBEEBayEEIA0CfyABQcAATwRAIAAgBiAMIAgQlwkMAQsgAAJ/IAAtAAAiCCAGLQAAIgtHBEAgCCALSQwBCyAALQABIAYtAAFJCyIHAn8gDC0AACIJIAhHBEAgCCAJSQwBCyAALQABIAwtAAFJC0cNABogDCAGIAkgC0cEfyAJIAtLBSAGLQABIAwtAAFJCyAHcxsLIgotAAEiCDoAFyANIAotAAAiBjoAFiAKIABrQQF2IQwgBUUNASAGIAUtAAAiC0YEQCAFLQABIAhPDQMMAgsgBiALSw0BDAILIAAgAiACIAFBAXRqIgQQ7h8gACADQQF0IgVqIAIgBWogBEEQahDuH0EIIQcMBgsgASADSw0CIAIgAUEBdCIRaiEJQQAhCCAAIQYgDCELA0AgACALQQNrIgdBACAHIAtNG0EBdGohDwNAIAYgD09FBEAgCEEBdCACIAlBAmsCfyAGLQAAIgcgCi0AACIORwRAIAcgDkkMAQsgBi0AASAKLQABSQsiBxtqIAYvAAA7AAAgByAIaiIIQQF0IAIgCUEEawJ/IA4gBi0AAiIHRwRAIAcgDkkMAQsgBi0AAyAKLQABSQsiBxtqIAYvAAI7AAAgByAIaiIOQQF0IAIgCUEGawJ/IAYtAAQiByAKLQAAIghHBEAgByAISQwBCyAGLQAFIAotAAFJCyIHG2ogBi8ABDsAACAHIA5qIg5BAXQgAiAJQQhrIgkCfyAIIAYtAAYiB0cEQCAHIAhJDAELIAYtAAcgCi0AAUkLIgcbaiAGLwAGOwAAIAZBCGohBiAHIA5qIQgMAQsLIAAgC0EBdGohDgNAIAYgDk8EQAJAIAEgC0YNACAJQQJrIgkgCEEBdGogBi8AADsAACAGQQJqIQYgASELDAMLBSAIQQF0IAIgCUECayIJAn8gBi0AACIHIAotAAAiD0cEQCAHIA9JDAELIAYtAAEgCi0AAUkLIgcbaiAGLwAAOwAAIAZBAmohBiAHIAhqIQgMAQsLCyABIAhrIQsgECARaiEJIAAgAiAIIgZBAXQiBxD2BiAHaiIOIQcDQCABIAZGRQRAIAcgCS8AADsAACAGQQFqIQYgCUECayEJIAdBAmohBwwBCwsgCEUNACABIAhPDQEgDUEANgIoIA1BATYCHCANQcy/4AA2AhggDUIENwIgIA1BGGpB1L/gABCoHQALIAEgA0sNASACIAFBAXQiC2ohCUEAIQggACEGA0AgACAMQQNrIgVBACAFIAxNG0EBdGohDgNAIAYgDk9FBEAgCEEBdCAJQQJrIAICfyAKLQAAIgUgBi0AACIHRwRAIAUgB0kMAQsgCi0AASAGLQABSQsiBxtqIAYvAAA7AAAgCCAHRWoiCEEBdCAJQQRrIAICfyAGLQACIgcgBUcEQCAFIAdJDAELIAotAAEgBi0AA0kLIgcbaiAGLwACOwAAIAggB0EBc2oiCEEBdCAJQQZrIAICfyAKLQAAIgUgBi0ABCIHRwRAIAUgB0kMAQsgCi0AASAGLQAFSQsiBxtqIAYvAAQ7AAAgCCAHRWoiCEEBdCAJQQhrIgkgAgJ/IAYtAAYiByAFRwRAIAUgB0kMAQsgCi0AASAGLQAHSQsiBxtqIAYvAAY7AAAgBkEIaiEGIAggB0EBc2ohCAwBCwsgACAMQQF0aiEFA0AgBSAGTQRAAkAgASAMRg0AIAIgCEEBdGogBi8AADsAACAGQQJqIQYgCEEBaiEIIAlBAmshCSABIQwMAwsFIAhBAXQgCUECayIJIAICfyAKLQAAIgcgBi0AACIORwRAIAcgDkkMAQsgCi0AASAGLQABSQsiBxtqIAYvAAA7AAAgBkECaiEGIAggB0EBc2ohCAwBCwsLIAsgEGohCSABIAhrIgwhBiAAIAIgCEEBdCIAEPYGIABqIgAhCgNAIAYEQCAKIAkvAAA7AAAgBkEBayEGIAlBAmshCSAKQQJqIQoMAQsLIAEgCEkNA0EAIQUgDCEBDAILIA4gCyACIAMgBCANQRZqEJsBIAghAQwBCwsACyAIIAFB5L/gABCgEAALIA1CgICAgCA3AyAgDSADrUIghjcDGEEAIAdrIQUgASADayEMIAAgB0EBdCIEaiELIAIgBGohCgNAIA1BCGogDUEYahD9FSANKAIIRQRAIAIgASAAEMkGDAILIAUgDCADIA0oAgwiBBsiBiAHIAYgB0sbaiEJIAsgBEEBdCIEaiEIIAQgCmohBiACIARqIQQDQCAJRQ0BIAYgCC8AADsAACAEIAYQkQsgCUEBayEJIAhBAmohCCAGQQJqIQYMAAsACwALIA1BMGokAAuZDwEMfyMAQTBrIg0kACACQQhrIRACQAJAAkADQAJAAkACQAJAAkACQCABQSFPBEAgBA0BIAAgASACIANBARDcAQwKCyABQQJJDQkgAUEQaiADSw0FIAFBAXYhAyABQQ9LDQEgAUEHSwRAIAAgAhDcBiAAIANBA3QiBGogAiAEahDcBkEEIQcMCQsgAiAAKQIANwIAIAIgA0EDdCIEaiAAIARqKQIANwIAQQEhBwwICyAAIAFBA3YiCEE4bGohBiAAIAhBBXRqIQwgBEEBayEEIA0CfyABQcAATwRAIAAgDCAGIAgQlgkMAQsgAAJ/IAAoAgAiCCAMKAIAIgtHBEAgCCALSQwBCyAAKAIEIAwoAgRJCyIHAn8gBigCACIJIAhHBEAgCCAJSQwBCyAAKAIEIAYoAgRJC0cNABogBiAMIAkgC0cEfyAJIAtLBSAMKAIEIAYoAgRJCyAHcxsLIgooAgQiCDYCFCANIAooAgAiBjYCECAKIABrQQN2IQwgBUUNASAGIAUoAgAiC0YEQCAFKAIEIAhPDQMMAgsgBiALSw0BDAILIAAgAiACIAFBA3RqIgQQ7R8gACADQQN0IgVqIAIgBWogBEFAaxDtH0EIIQcMBgsgASADSw0CIAIgAUEDdCIRaiEJQQAhCCAAIQYgDCELA0AgACALQQNrIgdBACAHIAtNG0EDdGohDwNAIAYgD09FBEAgCEEDdCACIAlBCGsCfyAGKAIAIgcgCigCACIORwRAIAcgDkkMAQsgBigCBCAKKAIESQsiBxtqIAYpAgA3AgAgByAIaiIIQQN0IAIgCUEQawJ/IA4gBigCCCIHRwRAIAcgDkkMAQsgBigCDCAKKAIESQsiBxtqIAYpAgg3AgAgByAIaiIOQQN0IAIgCUEYawJ/IAYoAhAiByAKKAIAIghHBEAgByAISQwBCyAGKAIUIAooAgRJCyIHG2ogBikCEDcCACAHIA5qIg5BA3QgAiAJQSBrIgkCfyAIIAYoAhgiB0cEQCAHIAhJDAELIAYoAhwgCigCBEkLIgcbaiAGKQIYNwIAIAZBIGohBiAHIA5qIQgMAQsLIAAgC0EDdGohDgNAIAYgDk8EQAJAIAEgC0YNACAJQQhrIgkgCEEDdGogBikCADcCACAGQQhqIQYgASELDAMLBSAIQQN0IAIgCUEIayIJAn8gBigCACIHIAooAgAiD0cEQCAHIA9JDAELIAYoAgQgCigCBEkLIgcbaiAGKQIANwIAIAZBCGohBiAHIAhqIQgMAQsLCyABIAhrIQsgECARaiEJIAAgAiAIIgZBA3QiBxD2BiAHaiIOIQcDQCABIAZGRQRAIAcgCSkCADcCACAGQQFqIQYgCUEIayEJIAdBCGohBwwBCwsgCEUNACABIAhPDQEgDUEANgIoIA1BATYCHCANQcy/4AA2AhggDUIENwIgIA1BGGpB1L/gABCoHQALIAEgA0sNASACIAFBA3QiC2ohCUEAIQggACEGA0AgACAMQQNrIgVBACAFIAxNG0EDdGohDgNAIAYgDk9FBEAgCEEDdCAJQQhrIAICfyAKKAIAIgUgBigCACIHRwRAIAUgB0kMAQsgCigCBCAGKAIESQsiBxtqIAYpAgA3AgAgCCAHRWoiCEEDdCAJQRBrIAICfyAGKAIIIgcgBUcEQCAFIAdJDAELIAooAgQgBigCDEkLIgcbaiAGKQIINwIAIAggB0EBc2oiCEEDdCAJQRhrIAICfyAKKAIAIgUgBigCECIHRwRAIAUgB0kMAQsgCigCBCAGKAIUSQsiBxtqIAYpAhA3AgAgCCAHRWoiCEEDdCAJQSBrIgkgAgJ/IAYoAhgiByAFRwRAIAUgB0kMAQsgCigCBCAGKAIcSQsiBxtqIAYpAhg3AgAgBkEgaiEGIAggB0EBc2ohCAwBCwsgACAMQQN0aiEFA0AgBSAGTQRAAkAgASAMRg0AIAIgCEEDdGogBikCADcCACAGQQhqIQYgCEEBaiEIIAlBCGshCSABIQwMAwsFIAhBA3QgCUEIayIJIAICfyAKKAIAIgcgBigCACIORwRAIAcgDkkMAQsgCigCBCAGKAIESQsiBxtqIAYpAgA3AgAgBkEIaiEGIAggB0EBc2ohCAwBCwsLIAsgEGohCSABIAhrIgwhBiAAIAIgCEEDdCIAEPYGIABqIgAhCgNAIAYEQCAKIAkpAgA3AgAgBkEBayEGIAlBCGshCSAKQQhqIQoMAQsLIAEgCEkNA0EAIQUgDCEBDAILIA4gCyACIAMgBCANQRBqEJwBIAghAQwBCwsACyAIIAFB5L/gABCgEAALIA1CgICAgCA3AyAgDSADrUIghjcDGEEAIAdrIQUgASADayEMIAAgB0EDdCIEaiELIAIgBGohCgNAIA1BCGogDUEYahD9FSANKAIIRQRAIAIgASAAEMwGDAILIAUgDCADIA0oAgwiBBsiBiAHIAYgB0sbaiEJIAsgBEEDdCIEaiEIIAQgCmohBiACIARqIQQDQCAJRQ0BIAYgCCkCADcCACAEIAYQqQsgCUEBayEJIAhBCGohCCAGQQhqIQYMAAsACwALIA1BMGokAAufEgIRfwF+IwBB0AhrIgMkACADIAI2AiQCQAJAAkACQCABQShqIgQQ5Q0iAkUNACACKAIAQRRHDQAgAi0ABEEERg0BCyAEEOUNIgJFDQEgAigCAEEhRw0BCyABLQD4AkECRw0AIAEtAIIDIQ4gA0HIAGoiAiABEM8CIANBAToA8wMgAyABKQCDAzcA9AMgAyABKQCLAzcA/AMgAyABKQCTAzcAhAQgAyABKACbAzYAjAQgA0HIAWogA0HzA2oQvwggA0EYaiACQQBBABCUASADKAIcIQcCQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAygCGEUEQAJAAkACQCADQfAAaiIFEOUNIgIEQCACKAIAQQlGDQELIANBsARqIAUQ5gsgA0GQ398ANgKsBCADQTQ6AKgEIANBwAFqIANBiAFqIAMoAnBBJUYiAhsoAgAiASADQcQBaiADQYwBaiACGygCACICIAEgAkkbIAEgAiABIAJLGyADQagEahDwFCEBIAUQ5Q0iAkUNDCACKAIAQSRGDQEMDAsgA0G0BGogA0H8AGopAgA3AgAgA0G8BGogA0GEAWooAgA2AgAgAygCcCECIANBJTYCcCADIAMpAnQ3AqwEIAMgAjYCqAQgAyADKQOIATcDwAEgA0GoBGoiAhC/CiACIANByABqELIBIAMoAqwEIQQgAygCqAQiCUGAgICAeEcEQCABQYABaiEMIAFBggNqIQogA0H0AGohBiADKAKwBCECIAMgBDYCgAggAyAEIAJBBnQiD2oiEDYCjAggAyAJNgKICCAJQQZ0IQsgA0HYBGohEUEAIQIDQCAEIAhqIQ0gAiAPRkUEQCADQZAIaiISIAIgBGoiE0HAABD2BhogA0GoBGogE0HAABD2BhogERDcJiANIBJBKBD2BhogCEEoaiEIIAJBQGshAgwBCwsgAyAQNgKECCALQShuIQggA0GACGoQiBIgBCECAkAgCUUNACALIAhBKGwiCUYNACACIAsgCRCJHiICRQ0GCyADIAI2AvgHIAMgCDYC9AcgAyANIARrQShuNgL8ByADQYAIahDDFwJAAkAgBRDlDSICBEAgAigCAEEKRg0BCyADQbAEaiAFEOYLIANB6N7fADYCrAQgA0E0OgCoBCADQcABaiADQYgBaiADKAJwQSVGIgIbKAIAIgEgA0HEAWogA0GMAWogAhsoAgAiAiABIAJJGyABIAIgASACSxsgA0GoBGoQ8BQhASAFEOUNIgJFDQwgAigCAEEkRg0BDAwLIANBtARqIAZBCGopAgA3AgAgA0G8BGogBkEQaigCADYCACADKAJwIQIgA0ElNgJwIAMgAjYCqAQgAyADKQOIATcDwAEgAyAGKQIANwKsBCADQagEahC/CkEAIQICQAJAIAUQ5Q0iBEUNACAEKAIAQRNHDQAgA0EQaiADQcgAakHA2d8AEPMBIAMoAhQhAiADKAIQDQELIAMgAjYCkAggBRDlDSIEBEAgBCgCAEEDRg0FCyADQbAEaiAFEOYLIANBgOzfADYCrAQgA0E0OgCoBCADQcABaiADQYgBaiADKAJwQSVGIgIbKAIAIgEgA0HEAWogA0GMAWogAhsoAgAiAiABIAJJGyABIAIgASACSxsgA0GoBGoQ8BQhASAFEOUNIgJFDQsgAigCAEEkRw0LIAMgAykDiAE3A8ABIAMoAnAgA0ElNgJwQSRHDQggA0HIAGogAygCdBCCDAwLCyADQYGAgIB4NgKQBCADIAI2ApQEDAwLIAMgAykDiAE3A8ABIAMoAnAgA0ElNgJwQSRHDQcgA0HIAGogAygCdBCCDAwKCyADIAQ2ApQEIANBgYCAgHg2ApAEDAwLIAMgAykDiAE3A8ABIAMoAnAgA0ElNgJwQSRHDQYgA0HIAGogAygCdBCCDAwKCyADQbQEaiAGQQhqKQIANwIAIANBvARqIAZBEGooAgA2AgAgAygCcCEEIANBJTYCcCADIAQ2AqgEIAMgAykDiAE3A8ABIAMgBikCADcCrAQgA0GoBGoQvwogA0GYBGogA0H8B2ooAgA2AgAgAyACNgKgBCADIAc2ApwEIAMgAykC9AciFDcDkAQgFKciBEGAgICAeGsOAgwLAQsgA0GBgICAeDYCkAQgAyAHNgKUBAwKCyADKQKUBCEUIANBqARqIgYgA0HIAGpBqAMQ9gYaIAEQ+A8gASAGQagDEPYGIQEgAyAOOgDXByADIAEpAIMDNwDYByADIAEpAIsDNwDgByADIAEpAJMDNwDoByADIAEoAJsDNgDwByAMIANB1wdqEL8IIANBATsAMiADIAEtAIgDOgAxIAMgASgBggM2ACsgAyABLwGGAzsALyADIAEpAIsDNwA0IAMgASkAkwM3ADwgAyABKACbAzYARCADQeEAaiAKQRVqKQAANwAAIANB3ABqIApBEGopAQA3AgAgA0HUAGogCkEIaikBADcCACADIAopAQA3AkwgDCADQStqEL8IIAMgATYCSCADIAI2AqQIIAMgBzYCoAggAyAUNwKUCCADIAQ2ApAIIAMgA0EkajYCnAggA0EIaiABQQEgFKcgFEIgiKcQsBkQugMgAygCDCEFAkAgAygCCEUEQCAAIAMpApAINwIAIABBCGogA0GYCGooAgA2AgAgASgCfCEBIAMoAiQhBCAGEL8UIABBATsBJCAAIAI2AiAgACAHNgIcIAAgBCABIAEgBEkbNgIUIAAgBCABIAEgBEsbNgIQIAAgBTYCDCAAIAMoAsAENgIYIAYQxyAMAQsgAEGBgICAeDYCACAAIAU2AgQgA0GQCGoQ7yYgBxD7KiADQaQIahD6JwsgA0HIAGoQkCYMDAsAC0HZ5OAAQShB8O3fABDhFwALQdnk4ABBKEGA7t8AEOEXAAtB2eTgAEEoQZDu3wAQ4RcACyADQYGAgIB4NgKQBCADIAE2ApQEIANBkAhqEPonDAELIANBgYCAgHg2ApAEIAMgATYClAQLIANB9AdqEO8mDAELIANBgYCAgHg2ApAEIAMgATYClAQLIAcQ+yoLIANBkARqQQRyEIQjCyADQcgAahD4DwsgAEGAgICAeDYCAAsgA0HQCGokAAu1EgIRfwF+IwBBwAhrIgMkACADIAI2AiQCQAJAAkACQCABQShqIgwQyA0iAkUNACACKAIAQRRHDQAgAi0ABEEERg0BCyAMEMgNIgJFDQEgAigCAEEhRw0BCyABLQCgAkECRw0AIAEtAKoCIQ4gA0HIAGoiAiABEJwDIANBAToA6wMgAyABKQCrAjcA7AMgAyABKQCzAjcA9AMgAyABKQC7AjcA/AMgAyABKADDAjYAhAQgA0HwAGoiBSADQesDahDHCCADQRhqIAJBAEEAEJMBIAMoAhwhBwJAAkACQAJAAkACQAJAAkACQAJAAkACQCADKAIYRQRAAkACQAJAIAUQyA0iAgRAIAIoAgBBCUYNAQsgA0GoBGogBRCEECADQZDf3wA2AqQEIANBNDoAoAQgA0HgA2ogA0GoA2ogAygCkANBJUYiAhsoAgAiASADQeQDaiADQawDaiACGygCACICIAEgAkkbIAEgAiABIAJLGyADQaAEahDwFCEBIAUQyA0iAkUNDCACKAIAQSRGDQEMDAsgA0GsBGogA0GcA2opAgA3AgAgA0G0BGogA0GkA2ooAgA2AgAgAygCkAMhAiADQSU2ApADIAMgAykClAM3AqQEIAMgAjYCoAQgAyADKQOoAzcD4AMgA0GgBGoiAhC+CiACIANByABqELEBIAMoAqQEIQQgAygCoAQiCUGAgICAeEcEQCABQaoCaiEKIANBlANqIQYgAygCqAQhAiADIAQ2AvAHIAMgBCACQQZ0Ig9qIhA2AvwHIAMgCTYC+AcgCUEGdCELIANB0ARqIRFBACECA0AgBCAIaiENIAIgD0ZFBEAgA0GACGoiEiACIARqIhNBwAAQ9gYaIANBoARqIBNBwAAQ9gYaIBEQ3CYgDSASQSgQ9gYaIAhBKGohCCACQUBrIQIMAQsLIAMgEDYC9AcgC0EobiEIIANB8AdqEIgSIAQhAgJAIAlFDQAgCyAIQShsIglGDQAgC0UEQEEIIQIMAQsgBCALQQggCRDzAiICRQ0GCyADIAI2AugHIAMgCDYC5AcgAyANIARrQShuNgLsByADQfAHahDDFwJAAkAgBRDIDSICBEAgAigCAEEKRg0BCyADQagEaiAFEIQQIANB6N7fADYCpAQgA0E0OgCgBCADQeADaiADQagDaiADKAKQA0ElRiICGygCACIBIANB5ANqIANBrANqIAIbKAIAIgIgASACSRsgASACIAEgAksbIANBoARqEPAUIQEgBRDIDSICRQ0MIAIoAgBBJEYNAQwMCyADQawEaiAGQQhqKQIANwIAIANBtARqIAZBEGooAgA2AgAgAygCkAMhAiADQSU2ApADIAMgAjYCoAQgAyADKQOoAzcD4AMgAyAGKQIANwKkBCADQaAEahC+CkEAIQICQAJAIAUQyA0iBEUNACAEKAIAQRNHDQAgA0EQaiADQcgAakHA2d8AEPEBIAMoAhQhAiADKAIQDQELIAMgAjYCgAggBRDIDSIEBEAgBCgCAEEDRg0FCyADQagEaiAFEIQQIANBgOzfADYCpAQgA0E0OgCgBCADQeADaiADQagDaiADKAKQA0ElRiICGygCACIBIANB5ANqIANBrANqIAIbKAIAIgIgASACSRsgASACIAEgAksbIANBoARqEPAUIQEgBRDIDSICRQ0LIAIoAgBBJEcNCyADIAMpA6gDNwPgAyADKAKQAyADQSU2ApADQSRHDQggA0HIAGogAygClAMQ+wsMCwsgA0GBgICAeDYCiAQgAyACNgKMBAwMCyADIAMpA6gDNwPgAyADKAKQAyADQSU2ApADQSRHDQcgA0HIAGogAygClAMQ+wsMCgsgAyAENgKMBCADQYGAgIB4NgKIBAwMCyADIAMpA6gDNwPgAyADKAKQAyADQSU2ApADQSRHDQYgA0HIAGogAygClAMQ+wsMCgsgA0GsBGogBkEIaikCADcCACADQbQEaiAGQRBqKAIANgIAIAMoApADIQQgA0ElNgKQAyADIAQ2AqAEIAMgAykDqAM3A+ADIAMgBikCADcCpAQgA0GgBGoQvgogA0GQBGogA0HsB2ooAgA2AgAgAyACNgKYBCADIAc2ApQEIAMgAykC5AciFDcDiAQgFKciBEGAgICAeGsOAgwLAQsgA0GBgICAeDYCiAQgAyAHNgKMBAwKCyADKQKMBCEUIANBoARqIgYgA0HIAGpBoAMQ9gYaIAEQzxAgASAGQaADEPYGIQEgAyAOOgDHByADIAEpAKsCNwDIByADIAEpALMCNwDQByADIAEpALsCNwDYByADIAEoAMMCNgDgByAMIANBxwdqEMcIIANBATsAMiADIAEtALACOgAxIAMgASgBqgI2ACsgAyABLwGuAjsALyADIAEpALMCNwA0IAMgASkAuwI3ADwgAyABKADDAjYARCADQeEAaiAKQRVqKQAANwAAIANB3ABqIApBEGopAQA3AgAgA0HUAGogCkEIaikBADcCACADIAopAQA3AkwgDCADQStqEMcIIAMgATYCSCADIAI2ApQIIAMgBzYCkAggAyAUNwKECCADIAQ2AoAIIAMgA0EkajYCjAggA0EIaiABQQEgFKcgFEIgiKcQsBkQvAMgAygCDCEFAkAgAygCCEUEQCAAIAMpAoAINwIAIABBCGogA0GICGooAgA2AgAgASgCnAMhASADKAIkIQQgBhC/FCAAQQE7ASQgACACNgIgIAAgBzYCHCAAIAQgASABIARJGzYCFCAAIAQgASABIARLGzYCECAAIAU2AgwgACADKAK4BDYCGCAGEK4gDAELIABBgYCAgHg2AgAgACAFNgIEIANBgAhqEO8mIAcQ+yogA0GUCGoQ5SYLIANByABqEPUkDAwLAAtB2eTgAEEoQfDt3wAQ4RcAC0HZ5OAAQShBgO7fABDhFwALQdnk4ABB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QcABakEBQQAQOyAFKAJEIQMgBSgCQCEIDAELQQAhCAsgBUHsAGoQ9SQgACADNgIEIAAgCDYCACAFQeABaiQAC+gPAhd+CX8jAEEwayIdJAACQAJ/AkACQAJAAkACQAJAAkACQCABKQMAIgRQRQRAIAEpAwgiBVANASABKQMQIgNQDQIgAyAEfCIDIARUDQMgBCAFVA0EIANCgICAgICAgIAgWg0FIB0gAS8BGCIBOwEIIB0gBCAFfSIFNwMAIAEgAUEgayABIANCgICAgBBUIhobIhtBEGsgGyADQiCGIAMgGhsiA0KAgICAgIDAAFQiGhsiG0EIayAbIANCEIYgAyAaGyIDQoCAgICAgICAAVQiGhsiG0EEayAbIANCCIYgAyAaGyIDQoCAgICAgICAEFQiGhsiG0ECayAbIANCBIYgAyAaGyIDQoCAgICAgICAwABUIhobIANCAoYgAyAaGyIJQgBZIhtrIhprwSIcQQBIDQYgHSAFIBytIgOGIgcgA4giBjcDECAFIAZSDQogHSABOwEIIB0gBDcDACAdIAQgA0I/gyIFhiIDIAWIIgU3AxAgBCAFUg0KQaB/IBprwUHQAGxBsKcFakHOEG0iAUHRAE8NByABQQR0IgFB2N7AAGopAwAiBUL/////D4MiBCADQiCIIg5+IgZCIIgiFSAFQiCIIgggDn4iFnwgCCADQv////8PgyIDfiIFQiCIIhd8IQ8gBkL/////D4MgAyAEfkIgiHwgBUL/////D4N8QoCAgIAIfEIgiCENQgFBACAaIAFB4N7AAGovAQBqa0E/ca0iBoYiCkIBfSEMIAQgB0IgiCIDfiIFQv////8PgyAEIAdC/////w+DIgd+QiCIfCAHIAh+IgdC/////w+DfEKAgICACHxCIIghECADIAh+IREgB0IgiCEHIAVCIIghBSABQeLewABqLwEAIQEgCCAJIButhiIDQiCIIhJ+IhggBCASfiIJQiCIIhN8IAggA0L/////D4MiA34iC0IgiCIUfCAJQv////8PgyADIAR+QiCIfCALQv////8Pg3wiGUKAgICACHxCIIh8QgF8IgsgBoinIhtBkM4ATwRAIBtBwIQ9SQ0JIBtBgMLXL08EQEEIQQkgG0GAlOvcA0kiGhshHkGAwtcvQYCU69wDIBobDAsLQQZBByAbQYCt4gRJIhob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JEYEQCABIAEoAiwQggwMAQtB2eTgAEEoQaSm4AAQ4RcACyAAQQU2AgAgACAENgIEIAJByABqEJ4pDAILIAAgBDYCFCAAIAU2AhAgACALNwMIIAAgAzYCBCAAIAE2AgAgACAKIAathDcDGAwBCyAAQQU2AgAgACAENgIECyACQSRqEJAmIAJBgAFqJAAL2BACCH8EfiMAQYABayICJAAgAUGyAmoiBCkBACELIAFBugJqIgMoAQAhBSABKQGqAiEKIAEvAb4CIQYgAS0AwAIhCCABKAHCAiEHIAEtAMYCIQkgAkEwaiAEKQEANwIAIAJBOGogAykBADcCACACQT1qIAFBvwJqKQAANwAAIAIgCToAdCACIAc2AHAgAkEBOgBvIAIgCDoAbiACIAY7AGwgAiAFNgBoIAIgCzcAYCACIAo3AFggAiABKQGqAjcCKCABQShqIgUgAkHYAGoiBxDHCCACIAE2AiQgBRCqICEEAkAgBRDIDSIDRQRAIAEoAoACIQEgAkEAOgBYIAEgASAHEPAUIQEgAEEFNgIAIAAgATYCBAwBCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADKAIAIgNBG2sOCgUBBgcBAQEBAQIACyADQQJGDQIgA0ELRg0DCyACQeQAaiAFEIQQIAIgBRDwEyACQcUANgJgIAJB5KbgADYCXCACQTA6AFggAigCACACKAIEIAJB2ABqEPAUIQQgBRDIDSIDRQ0PIAMoAgBBJEYNBgwPCyABIAEpA+ACNwOYAyABKALIAiABQSU2AsgCQSRHDQYgASgCzAIhASAAQQU2AgAgACABNgIEDA8LIAEoAsgCIQUgAUElNgLIAiABIAEpA+ACNwOYAyACQeQAaiABQdQCaikCADcCACACQewAaiABQdwCaigCADYCACACIAEpAswCNwJcIAIgBTYCWCAFQQJHDQYgAkHgAGoQiREhCyAEIAEoApwDIgEgASAESxshBSAEIAEgASAESRshBEEAIQFCACEKDAwLIAEoAsgCIQMgAUElNgLIAiABIAEpA+ACNwOYAyACQeQAaiABQdQCaikCADcCACACQewAaiABQdwCaigCADYCACACIAEpAswCNwJcIAIgAzYCWCACQdgAaiIGEL4KIAUQqiAhCCAGIAFBARC8EiACQRhqIAIoAlgQ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IANBgAFqIAMoAhggAygCHBC3ISADKAKAAUGAgICAeEYEQCADQYCAgIB4NgJwIANBAToAdAwJCyADQfgAaiADQYgBaikCADcDACADIAMpAoABNwNwDAgLIANBIGpB2NrUAEENIAcgBhDYCiADQYABaiADKAIgIAMoAiQQtyEgAygCgAFBgICAgHhGBEAgA0GAgICAeDYCcCADQQE6AHQMCAsgA0H4AGogA0GIAWopAgA3AwAgAyADKQKAATcDcAwHCyADQShqQai31gBBDiAHIAYQ2AogA0GAAWogAygCKCADKAIsELchIAMoAoABQYCAgIB4RgRAIANBgICAgHg2AnAgA0EBOgB0DAcLIANB+ABqIANBiAFqKQIANwMAIAMgAykCgAE3A3AMBgsgA0EwakHwndUAQRIgByAGENgKIANBgAFqIAMoAjAgAygCNBC3ISADKAKAAUGAgICAeEYEQCADQYCAgIB4NgJwIANBAToAdAwGCyADQfgAaiADQYgBaikCADcDACADIAMpAoABNwNwDAULIANBgICAgHg2AnAgA0EBOgB0IAMoAqgBIAMoAqwBENEpDAQLIARBoANqIQVBgJjKACEEA0AgBQRAIANBgAFqIgYgBCgCCCAEKAIMENkKIANBqAFqIAYQ+RcgAygCgAEgAygChAEQ0SkgBUEQayEFIARBEGohBAwBBSADQfgAaiADQbABaikCADcDACADIAMpAqgBNwNwDAULAAsACyADQRBqQaDnzQBBowEgBSAEENgKIANBgAFqIAMoAhAgAygCFBC3ISADKAKAAUGAgICAeEYEQCADQYCAgIB4NgJwIANBAToAdAwDCyADQfgAaiADQYgBaikCADcDACADIAMpAoABNwNwDAILIANB8ABqIAUgBBCnBwwBCyAFIARB/MrIAEEOENIfRQRAIAUgBEGjncgAQQsQ0h9FBEAgA0EIakHI/dMAQTwgBSAEENgKIANBgAFqIAMoAgggAygCDBC3ISADKAKAAUGAgICAeEYEQCADQYCAgIB4NgJwIANBADoAdAwDCyADQfgAaiADQYgBaikCADcDACADIAMpAoABNwNwDAILIANB8ABqEN4qDAELIANB8ABqEN8qCyADQcgAaiABKAIEIAEoAgggCCADQfAAahDwFgJAIAMoAkhBgICAgHhGBEAgA0GAAWogCiAC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AkEYahCbJAwdCyACQQA2AiggAkEBNgIcIAJB3LjHADYCGCACQgQ3AiAgASgCFCABKAIYIAJBGGoQmyQMHAsgAkEANgIoIAJBATYCHCACQfy4xwA2AhggAkIENwIgIAEoAhQgASgCGCACQRhqEJskDBsLIAJBADYCKCACQQE2AhwgAkGguccANgIYIAJCBDcCICABKAIUIAEoAhggAkEYahCbJAwaCyACQQA2AiggAkEBNgIcIAJB3LnHADYCGCACQgQ3AiAgASgCFCABKAIYIAJBGGoQmyQMGQsgAkEANgIoIAJBATYCHCACQYC6xwA2AhggAkIENwIgIAEoAhQgASgCGCACQRhqEJskDBgLIAJBADYCKCACQQE2AhwgAkHIuscANgIYIAJCBDcCICABKAIUIAEoAhggAkEYahCbJAwXCyACQQA2AiggAkEBNgIcIAJB7LrHADYCGCACQgQ3AiAgASgCFCABKAIYIAJBGGoQmyQMFgsgAkEANgIoIAJBATYCHCACQZS7xwA2AhggAkIENwIgIAEoAhQgASgCGCACQRhqEJskDBULIAJBADYCKCACQQE2AhwgAkGsu8cANgIYIAJCBDcCICABKAIUIAEoAhggAkEYahCbJAwUCyACQQA2AiggAkEBNgIcIAJB1LvHADYCGCACQgQ3AiAgASgCFCABKAIYIAJBGGoQmyQMEwsgAkEANgIoIAJBATYCHCACQYC8xwA2AhggAkIENwIgIAEoAhQgASgCGCACQRhqEJskDBILIAJBADYCKCACQQE2AhwgAkGcvMcANgIYIAJCBDcCICABKAIUIAEoAhggAkEYahCbJAwRCyACQQA2AiggAkEBNgIcIAJBwLzHADYCGCACQgQ3AiAgASgCFCABKAIYIAJBGGoQmyQMEAsgAkEANgIoIAJBATYCHCACQeC8xwA2AhggAkIENwIgIAEoAhQgASgCGCACQRhqEJskDA8LIAJBADYCKCACQQE2AhwgAkGIvccANgIYIAJCBDcCICABKAIUIAEoAhggAkEYahCbJAwOCyACQQA2AiggAkEBNgIcIAJBrL3HADYCGCACQgQ3AiAgASgCFCABKAIYIAJBGGoQmyQMDQsgAkEANgIoIAJBATYCHCACQcS9xwA2AhggAkIENwIgIAEoAhQgASgCGCACQRhqEJskDAwLIAJBADYCKCACQQE2AhwgAkHcvccANgIYIAJCBDcCICABKAIUIAEoAhggAkEYahCbJAwLCyACIAAoAgQ2AgwgAkECNgIcIAJBoL7HADYCGCACQgE3AiQgAkEJNgIUIAIgAkEQajYCICACIAJBDGo2AhAgASgCFCABKAIYIAJBGGoQmyQMCgsgAkEANgIoIAJBATYCHCACQey+xwA2AhggAkIENwIgIAEoAhQgASgCGCACQRhqEJskDAkLIAJBADYCKCACQQE2AhwgAkGkv8cANgIYIAJCBDcCICABKAIUIAEoAhggAkEYahCbJAwICyACQQA2AiggAkEBNgIcIAJByL/HADYCGCACQgQ3AiAgASgCFCABKAIYIAJBGGoQmyQMBwsgAkEANgIoIAJBATYCHCACQfi/xwA2AhggAkIENwIgIAEoAhQgASgCGCACQRhqEJskDAYLIAJBADYCKCACQQE2AhwgAkHUwMcANgIYIAJCBDcCICABKAIUIAEoAhggAkEYahCbJAwFCyACQQA2AiggAkEBNgIcIAJBwMHHADYCGCACQgQ3AiAgASgCFCABKAIYIAJBGGoQmyQMBAsgAkEANgIoIAJBATYCHCACQczCxwA2AhggAkIENwIgIAEoAhQgASgCGCACQRhqEJskDAMLIAJBADYCKCACQQE2AhwgAkH0wscANgIYIAJCBDcCICABKAIUIAEoAhggAkEYahCbJAwCCyACQQA2AiggAkEBNgIcIAJBnMPHADYCGCACQgQ3AiAgASgCFCABKAIYIAJBGGoQmyQMAQsgAkEANgIoIAJBATYCHCACQejDxwA2AhggAkIENwIgIAEoAhQgASgCGCACQRhqEJskCyACQTBqJAALmg4BDn8jAEGwAWsiAyQAIAFBKGoiBRCqICELAkAgBRDIDSIERQRAIAEoAoACIQEgA0EAOgBoIAEgASADQegAahDwFCEBIABBgICAgHg2AgAgACABNgIEDAELAkACQAJAAkACQAJAAkACQAJAAkACQCAEKAIAQSRGBEAgASABKQPgAjcDmAMgASgCyAIgAUElNgLIAkEkRg0BQdnk4ABBKEHQjeAAEOEXAAsgASgCyAIhBCABQSU2AsgCIAEgASkD4AI3A5gDIANB9ABqIgYgAUHUAmopAgA3AgAgA0H8AGoiCCABQdwCaigCADYCACADIAEpAswCNwJsIAMgBDYCaCADQegAaiIKEL4KIANBADYCPCADQoCAgIDAADcCNCAKIAEgAhDEBCADKAJoIQQgAy0AgAEiB0ECRg0FIAFBzAJqIQkgA0HYAGoiDCAIKAIANgIAIANB0ABqIgggBikCADcDACADIAMpAmw3A0ggAyADKACBATYCQCADIANBhAFqKAAANgBDQSBBCBCRICIGIAQ2AgAgBiAHOgAYIAYgAykDSDcCBCAGQQxqIAgpAwA3AgAgBkEUaiAMKAIANgIAIAYgAygCQDYAGSAGQRxqIAMoAEM2AAAgA0EBNgJkIAMgBjYCYCADQQE2AlwgCkEEciEGIANBqQFqIQwgA0GQAWpBBHIhCCADQYEBaiEKA0AgB0EBcUUEQAJAIAUQyA0iBARAIAQoAgBBFkYNAQsgA0HwAGogBRCEECADQRBqIAUQ8BMgA0Hg6N8ANgJsIANBNDoAaCADKAIQIAMoAhQgA0HoAGoQ8BQhBCAFEMgNIgJFDQcgAigCAEEkRw0HIAEgASkD4AI3A5gDIAEoAsgCIAFBJTYCyAJBJEcNCyABIAEoAswCEPsLDAcLIAYgCSkCADcCACABKALIAiEEIAFBJTYCyAIgASABKQPgAjcDmAMgBkEIaiINIAlBCGoiBykCADcCACAGQRBqIg4gCUEQaiIQKAIANgIAIAMgBDYCaCADQegAaiIPEL4KIA8gAUEBELwSIANBIGogAygCaBCIBiADKAIkIQQgAygCIA0FIANBNGogBBC5GyAPEPUkAkAgBRDIDSIEBEAgBCgCAEEORg0BCyADQfAAaiAFEIQQIANBGGogBRDwEyADQdDa3wA2AmwgA0E0OgBoIAMoAhggAygCHCADQegAahDwFCEEIAUQyA0iAkUNByACKAIAQSRHDQcgASABKQPgAjcDmAMgASgCyAIgAUElNgLIAkEkRw0KIAEgASgCzAIQ+wsMBwsgBiAJKQIANwIAIAEoAsgCIQQgAUElNgLIAiABIAEpA+ACNwOYAyANIAcpAgA3AgAgDiAQKAIANgIAIAMgBDYCaCADQegAaiIEEL4KIAQgASACEMQEIAMoAmghBCADLQCAASIHQQJGDQYgCCAGKQIANwIAIAwgCigAADYAACAIQRBqIA4oAgA2AgAgCEEIaiANKQIANwIAIAxBA2ogCkEDaigAADYAACADIAc6AKgBIAMgBDYCkAEgA0HcAGogA0GQAWoQshAMAQsLIANBMGoiAiADQeQAaigCADYCACADIAMpAlw3AyggAygCOCEEIAMoAjQiBkGAgICAeEYNBiADKAI8IQcgA0GYAWogAigCADYCACADIAMpAyg3A5ABIAMgBzYCUCADIAQ2AkwgAyAGNgJIIAUQyA0iAgRAIAIoAgBBEUYNAgsgA0HwAGogBRCEECADQQhqIAUQ8BMgA0GA498ANgJsIANBNDoAaCADKAIIIAMoAgwgA0HoAGoQ8BQhAiAFEMgNIgVFDQogBSgCAEEkRg0CDAoLIAEoAswCIQEgAEGAgICAeDYCACAAIAE2AgQMCgsgASgCyAIhAiABQSU2AsgCIAEgASkD4AI3A5gDIANB9ABqIAlBCGopAgA3AgAgA0H8AGoiBSAJQRBqKAIANgIAIAMgCSkCADcCbCADIAI2AmggA0HoAGoQvgogASgCnAMhASADQfAAaiICIANB0ABqKAIANgIAIAUgA0GYAWooAgA2AgAgACADKQJINwIAIAAgCyABIAEgC0kbNgIcIAAgCyABIAEgC0sbNgIYIAMgAykDkAE3AnQgAEEIaiACKQMANwIAIABBEGogA0H4AGopAwA3AgAMCQsgASABKQPgAjcDmAMgASgCyAIgAUElNgLIAkEkRw0GIAEgASgCzAIQ+wsMBwsgA0HoAGoQ9SQLIANB3ABqEOQiCyADQTRqENImCyAAQYCAgIB4NgIAIAAgBDYCBAwEC0HZ5OAAQShBqIfgABDhFwALQdnk4ABBKEG4h+AAEOEXAAtB2eTgAEEoQeCN4AAQ4RcACyAAQYCAgIB4NgIAIAAgAjYCBCADQZABahDkIiADQcgAahDSJgsgA0GwAWokAAvxDQEOfyMAQbABayIDJAAgAUEoaiIFEMQgIQsCQCAFEOUNIgRFBEAgASgC2AIhASADQQA6AGggASABIANB6ABqEPAUIQEgAEGAgICAeDYCACAAIAE2AgQMAQsCQAJAAkACQAJAAkACQAJAAkACQAJAIAQoAgBBJEYEQCABIAEpA0A3A3ggASgCKCABQSU2AihBJEYNAUHZ5OAAQShB0I3gABDhFwALIAEoAighBCABQSU2AiggASABKQNANwN4IANB9ABqIgYgAUE0aikCADcCACADQfwAaiIIIAFBPGooAgA2AgAgAyABKQIsNwJsIAMgBDYCaCADQegAaiIKEL8KIANBADYCPCADQoCAgIDAADcCNCAKIAEgAhDFBCADKAJoIQQgAy0AgAEiB0ECRg0FIAFBLGohCSADQdgAaiIMIAgoAgA2AgAgA0HQAGoiCCAGKQIANwMAIAMgAykCbDcDSCADIAMoAIEBNgJAIAMgA0GEAWooAAA2AENBIEEIEJEgIgYgBDYCACAGIAc6ABggBiADKQNINwIEIAZBDGogCCkDADcCACAGQRRqIAwoAgA2AgAgBiADKAJANgAZIAZBHGogAygAQzYAACADQQE2AmQgAyAGNgJgIANBATYCXCAKQQRyIQYgA0GpAWohDCADQZABakEEciEIIANBgQFqIQoDQCAHQQFxRQRAAkAgBRDlDSIEBEAgBCgCAEEWRg0BCyADQfAAaiAFEOYLIANBEGogBRCkFCADQeDo3wA2AmwgA0E0OgBoIAMoAhAgAygCFCADQegAahDwFCEEIAUQ5Q0iAkUNByACKAIAQSRHDQcgASABKQNANwN4IAEoAiggAUElNgIoQSRHDQsgASABKAIsEIIMDAcLIAYgCSkCADcCACABKAIoIQQgAUElNgIoIAEgASkDQDcDeCAGQQhqIg0gCUEIaiIHKQIANwIAIAZBEGoiDiAJQRBqIhAoAgA2AgAgAyAENgJoIANB6ABqIg8QvwogDyABQQEQzBIgA0EgaiADKAJoEIsGIAMoAiQhBCADKAIgDQUgA0E0aiAEELkbIA8QkCYCQCAFEOUNIgQEQCAEKAIAQQ5GDQELIANB8ABqIAUQ5gsgA0EYaiAFEKQUIANB0NrfADYCbCADQTQ6AGggAygCGCADKAIcIANB6ABqEPAUIQQgBRDlDSICRQ0HIAIoAgBBJEcNByABIAEpA0A3A3ggASgCKCABQSU2AihBJEcNCiABIAEoAiwQggwMBwsgBiAJKQIANwIAIAEoAighBCABQSU2AiggASABKQNANwN4IA0gBykCADcCACAOIBAoAgA2AgAgAyAENgJoIANB6ABqIgQQvwogBCABIAIQxQQgAygCaCEEIAMtAIABIgdBAkYNBiAIIAYpAgA3AgAgDCAKKAAANgAAIAhBEGogDigCADYCACAIQQhqIA0pAgA3AgAgDEEDaiAKQQNqKAAANgAAIAMgBzoAqAEgAyAENgKQASADQdwAaiADQZABahCyEAwBCwsgA0EwaiICIANB5ABqKAIANgIAIAMgAykCXDcDKCADKAI4IQQgAygCNCIGQYCAgIB4Rg0GIAMoAjwhByADQZgBaiACKAIANgIAIAMgAykDKDcDkAEgAyAHNgJQIAMgBDYCTCADIAY2AkggBRDlDSICBEAgAigCAEERRg0CCyADQfAAaiAFEOYLIANBCGogBRCkFCADQYDj3wA2AmwgA0E0OgBoIAMoAgggAygCDCADQegAahDwFCECIAUQ5Q0iBUUNCiAFKAIAQSRGDQIMCgsgASgCLCEBIABBgICAgHg2AgAgACABNgIEDAoLIAEoAighAiABQSU2AiggASABKQNANwN4IANB9ABqIAlBCGopAgA3AgAgA0H8AGoiBSAJQRBqKAIANgIAIAMgCSkCADcCbCADIAI2AmggA0HoAGoQvwogASgCfCEBIANB8ABqIgIgA0HQAGooAgA2AgAgBSADQZgBaigCADYCACAAIAMpAkg3AgAgACALIAEgASALSRs2AhwgACALIAEgASALSxs2AhggAyADKQOQATcCdCAAQQhqIAIpAwA3AgAgAEEQaiADQfgAaikDADcCAAwJCyABIAEpA0A3A3ggASgCKCABQSU2AihBJEcNBiABIAEoAiwQggwMBwsgA0HoAGoQkCYLIANB3ABqEOQiCyADQTRqENImCyAAQYCAgIB4NgIAIAAgBDYCBAwEC0HZ5OAAQShBqIfgABDhFwALQdnk4ABBKEG4h+AAEOEXAAtB2eTgAEEoQeCN4AAQ4RcACyAAQYCAgIB4NgIAIAAgAjYCBCADQZABahDkIiADQcgAahDSJgsgA0GwAWokAAuBDAENfyMAQTBrIgskACACQQRrIRMCQAJAA0ACQAJAAkACQCABQSFPBEAgBA0BIAAgASACIANBASAGEJgCDAcLIAFBAkkNBiABQRBqIANLDQMgAUEBdiEDIAFBD0sNASABQQdLBEAgACACELkKIAAgA0ECdCIEaiACIARqELkKQQQhDgwGCyACIAAoAgA2AgAgAiADQQJ0IgRqIAAgBGooAgA2AgBBASEODAULIAAgAUEDdiINQRxsaiEHIAAgDUEEdGohCCAEQQFrIQQgCwJ/IAFBwABPBEAgACAIIAcgDRCNDQwBCyAAIAcgCCAAKAIAIg0gCCgCACIISSIKIAggBygCACIHSXMbIAogByANS3MbCyIOKAIAIgc2AhQgDiAAa0ECdiENIAUEQCAFKAIAIAdPDQILIAEgA0sNAiACIAFBAnQiD2ohCUEAIQggACEHIA0hCgNAIAAgCkEDayIMQQAgCiAMTxtBAnRqIRADQCAHIBBPRQRAIAhBAnQgAiAJQQRrIAcoAgAiESAOKAIAIgxJIhIbaiARNgIAIAggEmoiCEECdCACIAlBCGsgBygCBCIRIAxJIhIbaiARNgIAIAggEmoiCEECdCACIAlBDGsgBygCCCIRIAxJIhIbaiARNgIAIAggEmoiCEECdCACIAlBEGsiCSAMIAcoAgwiDEsiERtqIAw2AgAgCCARaiEIIAdBEGohBwwBCwsgACAKQQJ0aiEMA0AgByAMTwRAIAEgCkcEQCAJQQRrIgkgCEECdGogBygCADYCACAHQQRqIQcgASEKDAMLIA8gE2ohCSAAIAIgCCIHQQJ0IgoQ9gYgCmoiDCEKA0AgASAHRkUEQCAKIAkoAgA2AgAgB0EBaiEHIAlBBGshCSAKQQRqIQoMAQsLIAhFDQQgASAISQRAIAtBADYCKCALQQE2AhwgC0HMv+AANgIYIAtCBDcCICALQRhqQdS/4AAQqB0ACyAMIAEgCGsgAiADIAQgC0EUaiAGEM8BIAghAQwGBSAIQQJ0IAIgCUEEayIJIAcoAgAiECAOKAIASSIRG2ogEDYCACAHQQRqIQcgCCARaiEIDAELAAsACwALIAAgAiACIAFBAnRqIgQQ1R8gACADQQJ0IgVqIAIgBWogBEEgahDVH0EIIQ4MAwsgASADSw0AIAIgAUECdCIKaiEJQQAhCCAAIQcDQCAAIA1BA2siBUEAIAUgDU0bQQJ0aiEMA0AgByAMT0UEQCAIQQJ0IAIgCUEEayAOKAIAIgUgBygCACIPTyIQG2ogDzYCACAIIBBqIghBAnQgAiAJQQhrIAUgBygCBCIPTyIQG2ogDzYCACAIIBBqIghBAnQgAiAJQQxrIAUgBygCCCIPTyIQG2ogDzYCACAIIBBqIghBAnQgAiAJQRBrIgkgBSAHKAIMIg9PIgUbaiAPNgIAIAUgCGohCCAHQRBqIQcMAQsLIAAgDUECdGohBQNAIAUgB00EQCABIA1HBEAgAiAIQQJ0aiAHKAIANgIAIAdBBGohByAIQQFqIQggCUEEayEJIAEhDQwDCyABIAhrIQcgCiATaiEJIAAgAiAIQQJ0IgAQ9gYiBSAAaiEKA0AgBwRAIAogCSgCADYCACAHQQFrIQcgCUEEayEJIApBBGohCgwBCwsgC0EIaiAIIAUgARDVGyALKAIMIQEgCygCCCEAQQAhBQwEBSAIQQJ0IAIgCUEEayIJIAcoAgAiDCAOKAIATSIPG2ogDDYCACAHQQRqIQcgCCAPaiEIDAELAAsACwALCwALIAtCgICAgCA3AyAgCyADrUIghjcDGEEAIA5rIQUgASADayEGIAAgDkECdCIEaiENIAIgBGohCgNAIAsgC0EYahD9FSALKAIARQRAIAIgASAAEMkHDAILIAUgBiADIAsoAgQiBBsiByAOIAcgDksbaiEJIA0gBEECdCIEaiEIIAQgCmohByACIARqIQQDQCAJRQ0BIAcgCCgCADYCACAEIAcQ3xQgCUEBayEJIAhBBGohCCAHQQRqIQcMAAsACwALIAtBMGokAAvsDAIJfwR+IwBB8AVrIgMkACADIAI2AhwCQCABKAIAQQFxRQRAIANB4AFqQgA3AwAgA0HYAWpCADcDACADQdABakIANwMAIANCADcDyAEMAQsgA0HgAWogAUEgaikDADcDACADQdgBaiABQRhqKQMANwMAIANB0AFqIAFBEGopAwA3AwAgAyABKQMINwPIAQsCQAJ/AkAgAi8AsQJBswZxRQ0AAkACQCABLQBTQQFxRQRAQYABIQQDQCAEQf8BcUEBaiIFQf8BcSAFRw0CIANByAFqIAQQ3ykgBSEERQ0ACwwCCyADQf8BOgDuASADQYCAAjsB7AEDQCADQRhqIANB7AFqENMSIAMtABhFDQMgA0HIAWogAy0AGRCkEgwACwALIANByAFqQf8BEN8pRQ0BCyAAQbEBNgIQIABB/OLDADYCDEEsIQVBCAwBCyADQcgAaiADQdQBaikCACINNwMAIANB0ABqIANB3AFqKQIAIgw3AwAgA0HYAGogA0HkAWooAgAiBDYCACADQSxqIA03AgAgA0E0aiAMNwIAIANBPGogBDYCACADIAMpAswBIgw3A0AgAyADKALIASIKNgIgIAMgDDcCJAJAIAEtAFIiBEECRiAEQQFxckUEQCADQfABakEAQYACEIULGiADQf8BOgBiIANBADsBYANA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KAIIRQRAIA0hAyAOIQUgAiAGNgKMAiAMEJAmAkACQAJAIAIoAsABIghBAWsOBgAAAAICAgELIAUhAwsgASgCfCEFQQxBBBCRICIJIAY2AgAgCSALIAUgBSALSRs2AgggCSALIAUgBSALSxs2AgQgAxD6JyADIAk2AgAMAgsgAkGMAmoQtwUMAQsgAkHYAGoQkCYMAQsgBBDlDSIDBEAgAygCAEEKRg0CCyACQeAAaiAEEOYLIAIgBBCkFCACQeje3wA2AlwgAkE0OgBYIAIoAgAgAigCBCACQdgAahDwFCEGIAQQ5Q0iA0UNACADKAIAQSRHDQAgASABKQNANwN4IAEoAiggAUElNgIoQSRHDQQgASABKAIsEIIMCyACQcABahCdEgwCCyABKAIoIQMgAUElNgIoIAEgASkDQDcDeCACQeQAaiAHQQhqKQIANwIAIAJB7ABqIAdBEGooAgA2AgAgAiAHKQIANwJcIAIgAzYCWCACQdgAahC/CiACQSBqIAJByAFqIgNBCGopAwA3AwAgAkEoaiADQRBqKQMANwMAIAJBMGogA0EYaikDADcDACACIAMpAwA3AxggAigCxAEhBgsgAkHQAGoiAyACQTBqKQMANwMAIAJByABqIgUgAkEoaikDADcDACACQUBrIgcgAkEgaikDADcDACACIAIpAxg3AzggAkHAAWogAUEAEJEGIAJB6ABqIAcpAwA3AwAgAkHwAGogBSkDADcDACACQfgAaiADKQMANwMAIAIgBDYChAEgAiAGNgJcIAIgCDYCWCACIAIpAzg3A2AgAigCwAEgAiACQRRqNgKAAUGAgICAeEcEQCACQaABaiADKQMANwMAIAJBmAFqIAUpAwA3AwAgAkGQAWogBykDADcDACACQbABaiACQcgBaikCADcDACACQbgBaiACQdABaikCADcDACACIAIpAzg3A4gBIAIgAikCwAE3A6gBIAogASgCfCIDIAMgCksbIQEgCiADIAMgCkkbIQQMBAsgAigCxAEhBiACQdgAahCUJgsgAEEJNgIAIAAgBjYCBAwDC0HZ5OAAQShB6JzgABDhFwALQQghCAsgACAGNgIEIAAgCDYCACAAQQhqIAJBiAFqQTgQ9gYaIAAgBDYCRCAAIAE2AkALIAJBkAJqJAALpwwBDX8jAEGQAmsiAiQAIAIgAUEoaiIEEKogIgo2AhQCQAJAAkAgBBDIDSIDRQ0AIAMoAgBBAkcNACADLQAIQQJHDQAgAy0ACUEDRw0AIAEoAsgCIQMgAUElNgLIAiABIAEpA+ACNwOYAyACQeQAaiABQdQCaikCADcCACACQewAaiABQdwCaigCADYCACACIAEpAswCNwJcIAIgAzYCWCACQdgAahC+CgJAAkACQAJAIAQQyA0iAwRAIAMoAgBBCUYNAQtBByEIDAELIAEoAsgCIQMgAUElNgLIAiABIAEpA+ACNwOYAyACQeQAaiIFIAFBzAJqIgdBCGopAgA3AgAgAkHsAGoiCSAHQRBqKAIANgIAIAIgBykCADcCXCACIAM2AlggAkHYAGoiDBC+CiAMIAFBABBPIAIoAlwhBiACKAJYIghBB0YNASACQeABaiINIAJB+ABqKQMANwMAIAJB2AFqIg4gAkHwAGopAwA3AwAgAkHQAWogAkHoAGopAwA3AwAgAiACKQNgNwPIASACIAY2AsQBIAIgCDYCwAEgBBCqICELAkACQAJAIAEtAKACQQJHDQAgBBDIDSIDRQ0AIAMoAgBBE0cNACABKALIAiEDIAFBJTYCyAIgASABKQPgAjcDmAMgBSAHQQhqKQIANwIAIAkiBiAHQRBqKAIANgIAIAIgBykCADcCXCACIAM2AlggDBC+CiACQQE6APsBIAIgASkBqgI3AO8BIAIgAUGyAmoiAygBADYA9wEgAiABKQC3AjcA/AEgAiABQb8CaiIIKQAANwCEAiACQfEAaiAIKQAANwAAIAYgAUG6AmopAQA3AgAgBSADKQEANwIAIAIgASkBqgI3AlwgBCACQe8BahDHCCACIAE2AlggAkEIaiABEJMCIAIoAgwhBiACKAIIRQRAIA0hAyAOIQUgAiAGNgKMAiAMEPUkAkACQAJAIAIoAsABIghBAWsOBgAAAAICAgELIAUhAwsgASgCnAMhBUEMQQQQkSAiCSAGNgIAIAkgCyAFIAUgC0kbNgIIIAkgCyAFIAUgC0sbNgIEIAMQ5SYgAyAJNgIADAILIAJBjAJqELYFDAELIAJB2ABqEPUkDAELIAQQyA0iAwRAIAMoAgBBCkYNAgsgAkHgAGogBBCEECACIAQQ8BMgAkHo3t8ANgJcIAJBNDoAWCACKAIAIAIoAgQgAkHYAGoQ8BQhBiAEEMgNIgNFDQAgAygCAEEkRw0AIAEgASkD4AI3A5gDIAEoAsgCIAFBJTYCyAJBJEcNBCABIAEoAswCEPsLCyACQcABahCHEgwCCyABKALIAiEDIAFBJTYCyAIgASABKQPgAjcDmAMgAkHkAGogB0EIaikCADcCACACQewAaiAHQRBqKAIANgIAIAIgBykCADcCXCACIAM2AlggAkHYAGoQvgogAkEgaiACQcgBaiIDQQhqKQMANwMAIAJBKGogA0EQaikDADcDACACQTBqIANBGGopAwA3AwAgAiADKQMANwMYIAIoAsQBIQYLIAJB0ABqIgMgAkEwaikDADcDACACQcgAaiIFIAJBKGopAwA3AwAgAkFAayIHIAJBIGopAwA3AwAgAiACKQMYNwM4IAJBwAFqIAFBABCQBiACQegAaiAHKQMANwMAIAJB8ABqIAUpAwA3AwAgAkH4AGogAykDADcDACACIAQ2AoQBIAIgBjYCXCACIAg2AlggAiACKQM4NwNgIAIoAsABIAIgAkEUajYCgAFBgICAgHhHBEAgAkGgAWogAykDADcDACACQZgBaiAFKQMANwMAIAJBkAFqIAcpAwA3AwAgAkGwAWogAkHIAWopAgA3AwAgAkG4AWogAkHQAWopAgA3AwAgAiACKQM4NwOIASACIAIpAsABNwOoASAKIAEoApwDIgMgAyAKSxshASAKIAMgAyAKSRshBAwECyACKALEASEGIAJB2ABqEPokCyAAQQk2AgAgACAGNgIEDAMLQdnk4ABBKEHonOAAEOEXAAtBCCEICyAAIAY2AgQgACAINgIAIABBCGogAkGIAWpBOBD2BhogACAENgJEIAAgATYCQAsgAkGQAmokAAukFgINfwR+IwBBQGoiBiQAA0ACQAJAAkACQCABQSFPBEAgA0UEQCAAIQMjAEEQayIFJAAgASICIAJBAXZqIQQDQCAEBEACfyACIARBAWsiBEsEQCMAQSBrIgEkAAJAIAIgBEsEQCADIARBHGxqIgBBCGoiCCkCACETIABBEGoiCSkCACESIABBGGoiCigCACEHIAMpAgAhFCADIAApAgA3AgAgA0EYaiIMKAIAIQsgDCAHNgIAIANBEGoiBykCACEVIAcgEjcCACADQQhqIgcpAgAhEiAHIBM3AgAgCiALNgIAIAkgFTcCACAIIBI3AgAgACAUNwIA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KAI0IQMDQCAABEAgAyABEOksIABBDGshACADQQxqIQMMAQsLIAItABxBAkcEQCACKQMIIAJBGGooAgAgARCnHCAEIQIMAgsgAkEIaiABENAlBSACIAEQ0SULIAQhAgwACwALIABBCGogARD9ISAAQTBqIAEQ6iwMBgsgAEEgaiABEOosDAULIABBCGogARD9ISAAQTxqIAEQ0iUgAEFAayABEOojIABBMGogARCbGgwECyAAQSRqIAEQ0iUgAEEoaiABEOojIABBLGogARCbGgwDCyAAQQRqIAEQ0yUMAgsgACgCCEEFRwRAIABBCGogARD9IQsgAEE8aiABENIlIABBQGsgARDqIyAAQTBqIAEQmxoMAQsLIAVBMGogARDSJSAFKAI0IgAEQCAAIAEQmhoLIAUoAjgiAARAIAAgARCcGgsgBSgCIEEEdCEDIAUoAhwhAANAIANFDQcgACABEOksIAEgAEEMahDUJSADQRBrIQMgAEEQaiEADAALAAsgACgCDEUNBQwHCyAAQQhqEOkhDwsgACgCBCABELoLDwsgAEEEaiABEMIPDwsgAEEEaiABEM8lDwsgAEEEaiABEPQYCw8LIABBBGogARDpLA8LIABBDGogARDpLA8LIABBBGogARCZGg8LIABBBGogARDOJQu/DAILfwF+IwBBsAFrIgMkACADQQA6ADsgAyABKQGCAzcAKyADIAEpAJMDNwA8IAMgASgAmwM2AEQgAyABQYoDaiIEKQEANwAzIANB4QBqIAFBlwNqKQAANwAAIANB3ABqIAFBkgNqKQEANwIAIANB1ABqIAQpAQA3AgAgAyABKQGCAzcCTCABQYABaiADQStqEL8IIAMgATYCSCABQShqIgQQxCAhCAJAAkACQAJAAkACQAJAAkACQAJAAkAgBBDlDSIGBEAgBigCAEEJRg0BCyADQZABaiAEEOYLIANBCGogBBCkFCADQZDf3wA2AowBIANBNDoAiAEgAygCCCADKAIMIANBiAFqEPAUIQIgBBDlDSIERQ0JIAQoAgBBJEYNAQwJCyABKAIoIQYgAUElNgIoIAEgASkDQDcDeCADQZQBaiABQTRqKQIANwIAIANBnAFqIAFBPGooAgA2AgAgAyABKQIsNwKMASADIAY2AogBIANBiAFqIgUQvwogA0EgakECQQRBEBCqFCADQQA2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bCADIAI2AmggA0HoAGoiAhC+CkEBIQUgBBDIDQ0BIAEoAoACIQEgA0EAOgBoIAEgASACEPAUIQIMAgtB2eTgAEEoQcDt3wAQ4RcACyADQf0AaiABQb8CaikAADcAACADQfgAaiABQboCaikAADcDACADQfAAaiABQbICaikAADcDACADIAEpAKoCNwNoAkAgBBDIDSICRQ0AIAIoAgBBAkcNACADQegAaiACLQAIIAJBCWotAAAQ1gkNACAEEJUTIgJFDQAgAigCAEECRw0AIAItAAgNACACLQAJQQ5HDQAgBBDvIEEBcyEGCyAFIAZyRQRAIANBEGogAUEAIAcQ+gYgAygCFCECIAMoAhAhCAwCCyADQZgBaiIKIAEQzAQgAygCoAEhAiADKQOYASILUA0AIAMgAygCpAE2ApQBIAMgAjYCkAEgAyALNwOIAUEAIQICQAJAIAYEQCAEEMgNIgJFBEAgASgCgAIhASADQQA6AJgBIAEgASAKEPAUIQIMAwsgAigCAEEkRgRAIAEgASkD4AI3A5gDIAEoAsgCIAFBJTYCyAJBJEcNAiABKALMAiECDAMLIAEoAsgCIQIgAUElNgLIAiABIAEpA+ACNwOYAyADQaQBaiABQdQCaikCADcCACADQawBaiABQdwCaigCADYCACADIAEpAswCNwKcASADIAI2ApgBIANBmAFqEL4KIANBCGogAUEAIAQQqiAQ+gYgAygCDCECIAMoAggNAgsgASgCnAMhBiADQbgBaiADQYgBahCKHCADQawBaiADQcgBaikDADcCACADQaQBaiADQcABaikDADcCACADIAMpA7gBNwKcAUHYAEEIEJEgIgRBEjYCACAEIAU6ACwgBCACNgIoIAQgCSAGIAYgCUkbNgIkIAQgCSAGIAYgCUsbNgIgIAQgAykCmAE3AgQgBEEMaiADQaABaikCADcCACAEQRRqIANBqAFqKQIANwIAIARBHGogA0GwAWooAgA2AgAgASgCnAMhAUEMQQQQkSAiAiAENgIAIAIgByABIAEgB0kbNgIIIAIgByABIAEgB0sbNgIEDAMLQdnk4ABBKEHg7d8AEOEXAAsgCxDdGgtBASEICyADQSRqEPUkIAAgAjYCBCAAIAg2AgAgA0HQAWokAAuIDAEHfyMAQaABayICJAAgAC0APSEHIABBADoAPQJA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CwwNDg8REgALIAEgAEEEahC4CwwSCyAAQQRqIAEQwCsgAEEIaiABENUrDBELIAAoAgxFDRAgAEEMaiABEMArDBALIAEtADkhAyABQQI6ADkgAEEQaiABELsPIAEgAzoAOSAAKAIoIQAMAQsLIAEtADkhAyABQQI6ADkgAEEQaiABEMkjIAEgAzoAOQwNCyABLQA5IQMgAUECOgA5IABBEGogARDJIyABIAM6ADkMDAsgAEEEaiABEMArIABBCGogARDVKyAAKAIURQ0LIABBFGogARDVKwwLCyAAQRBqIAEQwCsgASgCMBCrESEDIAJBNGogAUE0aigCADYCACACQQA6ACggAkEYakHYmOMAKQMAIgQ3AwAgAkEIaiAENwMAIAIgATYCICACIAM2AiQgAkEBOgA5IAIgASkCLDcCLCACIAEtADw6ADwgAiABLwE6OwE6IAJB0JjjACkDACIENwMQIAIgBDcDACABLQA4IQMgAiABLQA9OgA9IAIgAzoAOCAAKAIMQRhsIQMgACgCCCEBA0AgA0UNCCACIAEQowsgAUEUaiACEKElIANBGGshAyABQRhqIQEMAAsACyAAQQRqIAEQwCsMCQsgASAAKAIEIgBByABqELgLIAAoAgBBCEcEQCABKAIwEKsRIQMgAkEYakHYmOMAKQMAIgQ3AwAgAkEIaiAENwMAIAJBNGogAUE0aigCADYCACACQQE6ACggAiABNgIgIAIgAzYCJCACQdCY4wApAwAiBDcDECACIAQ3AwAgAiABKQIsNwIsIAIgAS0APDoAPCACIAEvATo7ATogAS0AOCEDIAIgAS0APToAPSACIAM6ADggAkEAOgA5IAAgAhDKIyACQQE6ADkgAigCJCAAQTxqEOEhIAIgAEEoahCjCyACEOcoCyAAQeAAaiIAKAIAQYCAgIB4Rg0IIAEgABC4CwwICyAAQQRqIAEQwCsgAEEIaiABENUrDAcLIABBBGogARDAKyAAQQhqIAEQ1SsMBgsgASgCMBCrESEDIAJBGGpB2JjjACkDACIENwMAIAJBCGogBDcDACACQTRqIAFBNGooAgA2AgAgAkEAOgAoIAIgATYCICACIAM2AiQgAkHQmOMAKQMAIgQ3AxAgAiAENwMAIAIgASkCLDcCLCACIAEtADw6ADwgAiABLwE6OwE6IAEtADghAyACIAEtAD06AD0gAiADOgA4IAJBADoAOQJAIAAoAgQiA0ECRg0AIABBCGohASADQQFxRQRAIAEgAhDWKwwBCyABIAIQwCsLIAJBAToAOSAAQRhqIAIQoSUgAkEBOgA5IABBHGogAhChJSACIAAoAgwQzQoMAgsgASgCMBCrESEDIAJBNGogAUE0aigCADYCACACQQA6ACggAkEYakHYmOMAKQMAIgQ3AwAgAkEIaiAENwMAIAIgATYCICACIAM2AiQgAkEBOgA5IAIgASkCLDcCLCACIAEtADw6ADwgAiABLwE6OwE6IAJB0JjjACkDACIENwMQIAIgBDcDACABLQA4IQMgAiABLQA9OgA9IAIgAzoAOCAAQQRqIAIQxBsgAEEMaiACEMArIAIgACgCEBDNCgwBCyABKAIwEKsRIQMgAkE0aiABQTRqKAIANgIAIAJBADoAKCACQRhqQdiY4wApAwAiBDcDACACQQhqIAQ3AwAgAiABNgIgIAIgAzYCJCACQQE6ADkgAiABKQIsNwIsIAIgAS0APDoAPCACIAEvATo7ATogAkHQmOMAKQMAIgQ3AxAgAiAENwMAIAEtADghAyACIAEtAD06AD0gAiADOgA4IABBBGogAhDEGyAAQQxqIAIQwCsgAiAAKAIQEM0KCyACEOcoDAILIABBCGogARCrAgwBCyAAQQRqIAEQwCsLIAJBQGskAAvlDAELfyMAQaABayICJAACQAJAIAEtAClFBEAgASgCCCIFDQELIABBgICAgHg2AgAMAQsgASgCBCEKIAJBIGogBUEEQQwQqhQgAigCICIHIAVB/////wNxIgMgAyAHSxshAyACKAIkIQYDQCADBEAgBCAKaiIIQQRqKAIAIQkgAkEYaiAIQQhqKAIAIghBAUEBEKoUIAIoAhghCyACKAIcIAkgCBD2BiEMIAQgBmoiCUEIaiAINgIAIAlBBGogDDYCACAJIAs2AgAgA0EBayEDIARBDGohBAwBCwsgAiAFNgIwIAIgBjYCLCACIAc2AiggAkE0aiABKAIQIAEoAhQQ3hQgAiABKQIYNwJAIAIgAS0AJCIEOgBIIAIoAjwhAyACKAI4IQUCQCAERQRAIANBAkkNASADQRVPBEAgAkHQAGohByMAQYAgayIEJAACQCADQQF2IgZBgIn6ACADIANBgIn6AE8bIgggBiAISxsi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IAEQmhAgAkEoayECIANBKGohAwwBCwsgACgCECIAKAIAQYCAgIB4RwRAIAAgARCuGgwBCyAAQQRqIAEQmi0LIAVBIGokAAuGDAIJfwN+IwBBoAdrIgMkACADQfgAakHYmOMAKQMAIg03AgAgA0EANgJsIANCgICAgMAANwJkIANBADoAYCADQQE2AoABIANBlLrYADYCXCADQoCAgIAQNwJUIANCgICAgMAANwJMIANBCzYCACADQdCY4wApAwAiDjcCcCADQcQDakGI1doAQQUQphEgA0EKNgLAAyADQcADaiIFEJYdIQQgBSABIAIQphEgAyADIAQgBRBRIgY2AoQBIANBkAFqQQA7AQAgA0IANwOIASADQQA2ApwBIANCgICAgMAANwKUASAFIAZBCGoQqhEgA0GgAWoiASADQYgBakEBIAVBABDCBSADIAMtAJsDIAMtAJgDQQJGcToA7gYgAyADKQGiAzcA4AYgAyADKAGqAzYA6AYgAyADLwGuAzsA7AYgAyADKQCxAzcA7wYgAyADKAC5AzYA9wYgAyADLwC9AzsA+wYgASADQeAGaiIEEMcIIANB6ANqIAFB9AEQ9gYhASADKAKUAyECIANB4AVqIANBmANqQSgQ9gYaIANB3ANqIA03AgAgAyACNgLcBiADIAI2AtgGIAMgAjYC3AUgA0ElNgKwBiADQSU2AogGIANBADYC0AMgA0KAgICAgAE3A8gDIANBADYCwAMgA0EAOgDkAyADIA43AtQDIAMgAy0A6gU6AOAGIANBADoA4QYgAyADLQCGBjoA/AYgAyADKQLsBTcA4gYgAyADKQL0BTcA6gYgAyADKQL8BTcA8gYgAyADLwGEBjsA+gYgASAEEMcIIAEQqiAhAgJAAkAgARDIDSIBRQRAIAMoAsAFIQEgA0EAOgCIByADIAEgASADQYgHahDwFDYChAcgA0EBNgKABwwBCyADQQA2AoAHIAMgATYChAcgASgCAEEjRw0AIAMgAykDoAY3A9gGIAMoAogGIANBJTYCiAZBI0cNASADKQOQBiEMCyADQYAHahCrIyADQYgHaiADQcADakEBQQFBABCDAwJAIAMoAogHIgdBgICAgHhHBEAgAiADKALcBiIBIAEgAksbIQIgAygCkAchCSADKAKMByEKDAELIAMoAowHIQIgDBDbJkGAgICA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AiggAkKAgICAgAE3AiAgAiAALwE8OwFcIAIgACgCODYCWCACQRBqIAEpAwAiDyABKAIQIggQqSMgAkEgaiACKQMQIAIoAhhBARCGBiACQfQAaiANNwIAIAJBADYClAEgAkKAgICAgAE3AowBIAJBADoAiAEgAkEANgKEASACQoCAgIDAADcCfCACQQA2AmggAiAONwJsIAJBADsBngEgAiACLwFcOwGcASACIAIoAlg2ApgBIAJCgICAgIABNwJgIARBGGohCSAEQQxqIAQoAghBBnQhASACQYwBaiEGIAJBzABqIQUgAkE8aiEHIAJBLGohCyAEKAIEIQMCQANAIAFFDQEgAygCACEMIAFBQGohASADQUBrIQMCQCAMQQJrDgMAAQABCwsgAiAPIAgQqSMgAkHgAGogAikDACACKAIIELgQCyACQeAAaiIBEJAaIAQgARCUGiABIAkQ4yMCQAJAIAIoApQBIgEEQCALIAEQ6CggAkGkAWogAigCkAEgAigClAEQmQogAiACKAKkATYCuAEgAiACKAKoASIBNgKwASACIAEgAigCrAFBBHQiA2oiBDYCvAEDQCADRQ0CIAJB4ABqIAEpAwAgASgCCBC4ECADQRBrIQMgAUEQaiEBDAALAAsgAkGwAWoiASACQeAAakEsEPYGGiAHIAEQiRogBhD3IgwBCyACIAQ2ArQBIAJBsAFqEIQXIAItAEhFBEAgAkEgaiACKAKUARD/HSACIAIoAowBNgK4ASACIAIoApABIgE2ArABIAIgASACKAKUAUEEdCIDaiIENgK8AQNAIAMEQCACQSBqIAEpAwAgASgCCEEBEIYGIANBEGshAyABQRBqIQEMAQsLIAIgBDYCtAEgAkGwAWoiARCEFyABIAJB4ABqQSwQ9gYaIAcgARCJGgwBCyACQbgBaiAGQQhqKAIANgIAIAIgBikCADcDsAEgBSACQbABaiIBEJMQIAEgAkHgAGpBLBD2BhogByABEIkaCwJAIAIoAlQiAQRAIABBDGogARDoKCACQbABaiACKAJQIAIoAlQQmQogAiACKAKwATYCaCACIAIoArQBIgE2AmAgAiABIAIoArgBQQR0IgNqIgQ2AmwDQCADRQ0CIAJBIGogASkDACABKAIIELgQIANBEGshAyABQRBqIQEMAAsACyACQeAAaiIBIAJBIGpB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IAlBgANqJAAPCyAMQQF0IQggCiEHDAILIAcgCCALIAhrEPYGGgsgDEEBdEEBciEIIAohBwwACwALAAutCgIJfwN+IwBBsAFrIgIkACABQShqIgQQqiAhCCACQdUAaiABQb8CaikAADcAACACQdAAaiABQboCaikBACILNwIAIAJByABqIAFBsgJqKQEAIgw3AgAgAkEAOgCDASACIAEtAMQCOgCCASACIAEtAMYCOgCEASACIAEpAaoCIg03AGggAiAMNwBwIAIgCzcAeCACIAEvAcICOwCAASACIA03AkAgBCACQegAahDHCCACIAE2AjwgAkEwaiABENYBIAIoAjQhBQJAAkACQAJAAkACQCACKAIwBEAgBSEDDAELIAQQ8CANBCAEEMgNIgNFDQQgAygCAEECRw0EIAMtAAhBAkcNBCADLQAJQRpHDQQgASgCyAIhAyABQSU2AsgCIAEgASkD4AI3A5gDIAJB9ABqIgcgAUHUAmopAgA3AgAgAkH8AGoiBiABQdwCaigCADYCACACIAEpAswCNwJsIAIgAzYCaCACQegAaiIJEL4KIAIgBTYCYCACQYEBaiABQaoCaiIDQRVqKQAANwAAIAYgA0EQaikBADcCACAHIANBCGopAQA3AgAgAkEBOgCrASACIAEtAMQCOgCqASACIAEtAMYCOgCsASACIAEpAaoCNwCQASACIAEpAbICNwCYASACIAEpAboCNwCgASACIAEvAcICOwCoASACIAMpAQA3AmwgBCACQZABahDHCCACIAE2AmggAkEoaiABENYBIAIoAiwhAwJAIAIoAihFBEAgAiADNgJkIAkQ9SQCQAJAIAQQyA0iBwRAIAcoAgBBF0YNAQsgAkHwAGogBBCEECACQQhqIAQQ8BMgAkHo2d8ANgJsIAJBNDoAaCACKAIIIAIoAgwgAkHoAGoQ8BQhAyAEEMgNIgVFDQEgBSgCAEEkRw0BIAEgASkD4AI3A5gDIAEoAsgCIAFBJTYCyAJBJEcNByABIAEoAswCEPsLDAELIAEoAsgCIQcgAUElNgLIAiABIAEpA+ACNwOYAyACQfQAaiABQcwCaiIGQQhqKQIANwIAIAJB/ABqIAZBEGooAgA2AgAgAiAGKQIANwJsIAIgBzYCaCACQegAahC+CiACQSBqIAEQkwIgAigCJCEHIAIoAiAEQCAH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BAsgACAHNwIADAMLAkACQAJAIARFDQAgA0EQaiABIARBAWtBABDRASADLQAQQQRGDQAgAykDECIHQv8Bg0IEUg0BCyADQQA2AhAgA0EIaiABIANBEGpBkK/gAEEBEJoTIAMtAAhBBEcEQCADKQMIIgdC/wGDQgRSDQILIANBEGogAkEIaiABEKMHIAMtABBBBEYNAyADKQMQIgdC/wGDQgRRDQMgACAHNwIADAQLIAAgBzcCAAwDCyAAIAc3AgAMAgsCQAJAAkAgBEUNACADQRBqIAEgBEEBa0EAENEBIAMtABBBBEYNACADKQMQIgdC/wGDQgRSDQELIANBADYCECADQQhqIAEgA0EQakGQr+AAQQEQmhMgAy0ACEEERwRAIAMpAwgiB0L/AYNCBFINAgsgA0EQaiACQQhqIAEQ/RIgAy0AEEEERg0CIAMpAxAiB0L/AYNCBFENAiAAIAc3AgAMAwsgACAHNwIADAILIAAgBzcCAAwBCwJAAkAgBkUNACADQRBqIAEgBhC6HCADLQAQQQRGDQAgAykDECIHQv8Bg0IEUg0BCyAAQQQ6AAAMAQsgACAHNwIACyADQSBqJAALqAoBAn8jAEEwayICJAACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQEELIAAoAgBBgICAgHhzIgMgA0ESTxtBAWsOEQECAwQFBgcICQoLDA0ODxARAAsgAiAAQQRqNgIIIAJBATYCFCACQcjv4AA2AhAgAkIBNwIcIAJB/QE2AiwgAiACQShqNgIYIAIgAkEIajYCKCABKAIUIAEoAhggAkEQahCbJAwRCyACIABBBGo2AgggAkEBNgIUIAJByO/gADYCECACQgE3AhwgAkH+ATYCLCACIAJBKGo2AhggAiACQQhqNgIoIAEoAhQgASgCGCACQRBqEJskDBALIAIgAEEEajYCCCACQQE2AhQgAkHQktgANgIQIAJCATcCHCACQf8BNgIsIAIgAkEoajYCGCACIAJBCGo2AiggASgCFCABKAIYIAJBEGoQmyQMDwsgAkEANgIgIAJBATYCFCACQfiS2AA2AhAgAkIENwIYIAEoAhQgASgCGCACQRBqEJskDA4LIAJBADYCICACQQE2AhQgAkGok9gANgIQIAJCBDcCGCABKAIUIAEoAhggAkEQahCbJAwNCyACQQA2AiAgAkEBNgIUIAJB0JPYADYCECACQgQ3AhggASgCFCABKAIYIAJBEGoQmyQMDAsgAiAAKAIENgIIIAJBAjYCFCACQfiT2AA2AhAgAkIBNwIcIAJBCTYCLCACIAJBKGo2AhggAiACQQhqNgIoIAEoAhQgASgCGCACQRBqEJskDAsLIAIgACgCBDYCCCACQQE2AhQgAkGklNgANgIQIAJCATcCHCACQQk2AiwgAiACQShqNgIYIAIgAkEIajYCKCABKAIUIAEoAhggAkEQahCbJAwKCyACIAAoAgQ2AgggAkEBNgIUIAJBxJTYADYCECACQgE3AhwgAkEJNgIsIAIgAkEoajYCGCACIAJBCGo2AiggASgCFCABKAIYIAJBEGoQmyQMCQsgAkEANgIgIAJBATYCFCACQfiU2AA2AhAgAkIENwIYIAEoAhQgASgCGCACQRBqEJskDAgLIAJBADYCICACQQE2AhQgAkGgldgANgIQIAJCBDcCGCABKAIUIAEoAhggAkEQahCbJAwHCyACIAA2AgggAkEBNgIUIAJB0JXYADYCECACQgE3AhwgAkEINgIsIAIgAkEoajYCGCACIAJBCGo2AiggASgCFCABKAIYIAJBEGoQmyQMBgsgAkEANgIgIAJBATYCFCACQfyV2AA2AhAgAkIENwIYIAEoAhQgASgCGCACQRBqEJskDAULIAJBADYCICACQQE2AhQgAkGoltgANgIQIAJCBDcCGCABKAIUIAEoAhggAkEQahCbJAwECyACQQA2AiAgAkEBNgIUIAJB0JbYADYCECACQgQ3AhggASgCFCABKAIYIAJBEGoQmyQMAwsgAkEANgIgIAJBATYCFCACQeiW2AA2AhAgAkIENwIYIAEoAhQgASgCGCACQRBqEJskDAILIAIgAC0ACDoADCACIAAoAgQ2AgggAkEBNgIUIAJBkJfYADYCECACQgE3AhwgAkGAAjYCLCACIAJBKGo2AhggAiACQQhqNgIoIAEoAhQgASgCGCACQRBqEJskDAELIAIgACgCBDYCCCACQQE2AhQgAkG0l9gANgIQIAJCATcCHCACQeEANgIsIAIgAkEoajYCGCACIAJBCGo2AiggASgCFCABKAIYIAJBEGoQmyQLIAJBMGokAAumCAIRfwJ+IwBBgANrIgokACABrSIXQv//////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NgIoIAQgCDYCJCAEIAU2AiAgBEEAOgBEIAQgAykDODcDCCAEQRBqIANBQGspAwA3AwAgBEEYaiADQcgAaikDADcDACAEIAMpAyg3AzggBEFAayADQTBqKAIANgIAQQAMBAsgA0E4ahCQJiADQShqEN0mIAcLIQQgBRDEKAsgAykDGBDdGgtBAQshASAAIAQ2AgQgACABNgIAIANB8ABqJAAL5QkCCH8DfiMAQYACayICJAACQAJAAkACQAJAAkAgACgCACIDQQlHBEACQAJAAkACQCADQQFrDggBAgkIBwYFCgALIABBHGogARD3IwwJCyAAQQhqIAEQhAICQAJAAkAgACgCCEECaw4GAAsLCwECCwsgACgCDCEFIAJBADYCwAEgAkKAgICAgAE3ArgBIAUoAghBOGwhAyAFKAIEIQQDQCADBEAgA0E4ayEDIAQgAkG4AWoQmAogBEE4aiEEDAELCyACKAK4ASEDIAIoArwBIQUgAigCwAEhBCACQQhqIAEpAxAgASgCGBDFFSACKQMIIQogAigCECEGIAFBMGoiCCAEQQFqQQF2IAQgASgCPBsgAUFAaxCJIiACQdwBakIANwIAIAJCADcC1AEgAiAGNgLQASACIAo3A8gBIAIgBSAEQQR0aiIBNgLEASACIAM2AsABIAIgBTYCvAEgAiAFNgK4ASAKQgODIQwgCqdBCGshByAFIQMDQCAEBEACfyABIANGBEBCACELIAEMAQsgAygCCCEAIAMpAwAhCyADQRBqIgULIQMgAkHoAWogCCALIAAgClAEfkIABSAMUARAIAcgBygCACIJQQFqNgIAIAlBAEgNBwsgCgsgBhDjBiACKQPoAVBFBEAgAikD8AEQ2yYLIARBAWshBAwBCwsgAiAFNgK8ASACQbgBahCEFyAKENsmDAoLIAJBKGogACgCDCIAKQMAIABBEGooAgAQqSMgAigCMCEAIAIpAyghCiACQRhqIAEpAxAgASgCGBDFFSACQbgBaiABQTBqIAogACACKQMYIAIoAiAQ4wYgAikDuAEgAikDwAEQxCcMCQsgAkHIAGogACgCDBCCFSACKAJQIQAgAikDSCEKIAJBOGogASkDECABKAIYEMUVIAJBuAFqIAFBMGogCiAAIAIpAzggAigCQBDjBiACKQO4ASACKQPAARDEJwwICyABQTBqIQUg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IAJB6ABqENUQIAItAFBFDQIgAi0AUSIJIAZJDQALIAYgCUcNASACKABSC0EBRw0BCyABKAKoAyABKAKsAyAEQYCLwAAQnx8hBAwBCwsCfyABKAKoAyABKAKsAyAEQfyMxAAQnx8oAgQiCQRAIAEoAsADIAEoAsQDIAkgCy0AAGpBjI3EABCeHygCAAwBCyACQRBqIAMgBBCMICACIAIpAxA3AmgCQANAIAJB0ABqIAJB6ABqENUQIAItAFBFDQEgAi0AUSIEIAZJDQALIAQgBkcNACACKABSDAELQQELIQQgASgCqAMgASgCrAMgBUHwisAAEJ8fIAQ2AgwgAkHQAGogAyAEIAUQxQcgAigCUCIFQQNHDQELIAJBCGogAyAHQQEgCBCsFSACKAIMIQggAigCCCEFDAELCwsLIAAgAikCVDcCBCAAQRRqIAJB5ABqKAIANgIAIABBDGogAkHcAGopAgA3AgAgACAFNgIADAELIABBAzYCAAtBACEGIwBBMGsiAyQAAkACQAJAIAJBQGsiACgCAEUNACADIAAoAgQiAQR/IAMgATYCGCADQQA2AhQgAyABNgIIIANBADYCBCADIAAoAggiATYCHCADIAE2AgxBASEGIAAoAgwFQQALNgIgIAMgBjYCECADIAY2AgADQAJAAkACfwJAIAMoAiAiAEUEQCAGRQ0GIAMoAgghASADKAIEIgANASADKAIMIQADQCAABEAgAEEBayEAIAEoAjQhAQwBBSABIQBBAAwECwALAAsgAyAAQQFrNgIgAkACQCAGRQ0AIAMoAgQNACADKAIIIQAgAygCDCEEA0AgBARAIARBAWshBCAAKAI0IQAMAQUgA0IANwIIIAMgADYCBEEBIQYMAwsACwALIAZFDQMgAygCBCEACyADKAIMIQEgAygCCCEEA0AgASAALwEySQ0EIANBJGogACAEENoUIAMoAiQiAEUNByADKAIsIQEgAygCKCEEDAALAAsgAQshBANAIANBJGogACAEENoUIAMoAiQiAEUNBCADKAIoIQQMAAsAC0HIhtgAEMIpAAsgAUEBaiEBAkAgBEUEQCAAIQUMAQsgACABQQJ0akE0aiEBA0AgASgCACIFQTRqIQEgBEEBayIEDQALQQAhAQsgAyABNgIMIANBADYCCCADIAU2AgQgAA0ACwsgA0EwaiQADAEL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/wFxDgICAwELIANBPGogASgCBCAGELMVIAJBAUEAQZiowgAQnh8oAgAiBkUNBSADKAJEIQEgAygCQCEEAkAgBkGAgARPBEAgAUECdCECIARBBGshBEEAIQEDQCACRQ0CIANBGGogASACIARqIgUoAgAgBhCjFyADKAIcIQEgBSADKAIYNgIAIAJBBGshAgwACwALIAFBAnQhAiAEQQRrIQRBACEBA0AgAkUNASADQRBqIAFBEHQgAiAEaiIFKAIAIgFBEHZyIAYQ0BwgAygCECEHIANBCGogAUH//wNxIAMoAhRBEHRyIAYQ0BwgAygCDCEBIAUgAygCCCAHQRB0cjYCACACQQRrIQIMAAsACyADQegAaiADQcQAaigCADYCACADIAMpAjw3A2AgA0HgAGoQxgogA0HQAGpBlKjgACgCADYCACADQYyo4AApAgA3A0ggAa0hCQNAIAlQRQRAIANByABqIAmnEJsbQgAhCQwBCwsgACADKQNINwIMIABBFGogA0HQAGooAgA2AgAgAEEIaiADQegAaigCADYCACAAIAMpA2A3AgAMBwsgAEEMaiABKAIEIAYQsxUgAEEIakGUqOAAKAIANgIAIABBjKjgACkCADcCAAwGC0H4j+QALQAAGkEEEGAiAUUNBCAAQQE2AgggACABNgIEIABBATYCACABQQE2AgAgAEGMqOAAKQIANwIMIABBFGpBlKjgACgCADYCAAwFCyACKAIEIgcgBEECdGpBBGsoAgAiCGciBUUEQCADQcgAaiICIAEoAgQgBhCzFSAAIAIgByAEEKwCDAULIANBMGoiBCABIAUQ6hMgA0E8aiACIAUQ6hMgA0HIAGogBCADKAJAIgEgAygCRBCsAiAAQQhqIANB0ABqKAIANgIAIAAgAykCSDcCACADQShqIANB3ABqKAIANgIAIAMgAykCVDcDICADKAI8IAEQwSkgAEEMaiEAIAMoAiQgA0EgaiIBIAMoAiBBgICAgHhGGygCCARAIAAgASAIRSAFQR9xELUGDAULIAAgA0EgahDlFgwECyADQQA2AlggA0EBNgJMIANBgKjCADYCSCADQgQ3AlAgA0HIAGpBqKjCABCoHQALIABBCGpBlKjgACgCACIBNgIAIABBjKjgACkCACIJNwIAIAAgCTcCDCAAQRRqIAE2AgAMAgsgA0EANgJY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ACgAATYCCCAFQQhqIAMgCRD2Bw0CIAhBBEYNASAFIAAoAAU2AgggA0GNqeAAQQEgAREDAA0CCyAFQQhqIAMgCRDgBw0BCwJAIARBAEcgB3JBAXFFDQACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAHQQFxRQRAIARFDRogBEEBcUUEQCAEQQJxDQIgBkEERyECDAgLIAZBBEcNBAwFCyAGQQRHDQEMAgsgBkEERw0EDAYLIANBjangAEEBIAERAwANGAsgA0GyssIAQQEgAREDAA0XIARFDRYgBEEBcQ0AIARBAnENAgwDCyADQY2p4ABBASABEQMADRYLIANBs7LCAEEBIAERAwANFSAEQQJxRQ0BCyADQY2p4ABBASABEQMARQ0BDBQLIARBBHENASAEQQhxRQ0GIAINBAwHCyADQbSywgBBASABEQMADRIgBEEEcQ0BIARBCHENAwwECyACRQ0BC0EBIQIgA0GNqeAAQQEgAREDAA0QC0EBIQIgA0G1ssIAQQEgAREDAA0PIARBCHFFDQELQQEhAiADQY2p4ABBASABEQMARQ0CDA4LCyAEQRBxRQRAIARBIHFFDQcgAg0FDAgLIAINAQwDC0EBIQIgA0G2ssIAQQEgAREDAA0LIARBEHFFDQELQQEhAiADQY2p4ABBASABEQMARQ0BDAoLIARBIHENAQwCC0EBIQIgA0G3ssIAQQEgAREDAA0IIARBIHFFDQELQQEhAiADQY2p4ABBASABEQMARQ0CDAcLCyAEQcAAcUUNAyACDQEMAgtBASECIANBuLLCAEEBIAERAwANBCAEQcAAcUUNAgtBASECIANBjangAEEBIAERAwANAwtBASECIANBubLCAEEBIAERAwANAgsgBEEATg0AIAIEQEEBIQIgA0GNqeAAQQEgAREDAA0CC0EBIQIgA0G6ssIAQQEgAREDAA0BCyADQZnNyABBASABEQMAIQILIAVBIGokACACC7IIAQp/IwBBQGoiBSQAIAVBNGoiCCACIAQgASABIAMRBwACQAJAIAUoAjRFBEAgBUEIaiAFKAI4IgogBSgCPCILKAIMEQAAIAggBSgCCCAFKAIMEM4DIAUoAjRBAUYNAiAFKAI8IQIgBSgCOCEBIAogCygCGBEFACEHIAogCygC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KQALIARBATYCSCAEQbSGwwA2AkQgBEIANwJQIAQgBEHsAGo2AkwgBEHEAGpBzIbDABCoHQALQdnk4ABBKEHsiMMAEOEXAAtBjIjDABDCKQALQdyFwwAQwikAC0HZ5OAAQShBzIjDABDhFwALQeyHwwAQwikAC0HZ5OAAQShBzIjDABDhFwALQeyHwwAQwikACyAAIAEgAiADEKMEDAILQQALIQEgACAKNgIMIAAgCTYCCCAAIAY2AgQgACABNgIACyAEQfAAaiQAC6kIAgR/AX4jAEHAAWsiAiQAAkACQAJAAkACQAJAAkACQAJAIAAoAgBBAWsOCQECBwYFCAQIAwALIAAoAgxByABsIQQgACgCCCEDA0AgBARAIAIgAyADKQMAQgN9IganQQFqQQAgBkICVBtBAnQiBUHQ5+MAaigCAGopAwAgAyAFQdzn4wBqKAIAaigCABCpIyABIAIpAwAgAigCCEEBEIYGIARByABrIQQgA0HIAGohAwwBCwsgAEEcaiABENIjDAcLIABBCGogARD2AgwGCyAAKAIYDQUgACgCDEHQAGwhBCAAKAIIIQMDQAJAIAQEQCADKQMAIgZCAlogBqdBAXFyDQEgAkEQaiADKQMIIANBGGooAgAQqSMgASACKQMQIAIoAhgQuBAMAQsgAEEcaiABENIjDAcLIANB0ABqIQMgBEHQAGshBAwACwALIABBCGogARBfDAQLIABBBGogARDHKwwDCyAAQRBqIAEQ0iMMAgsgASAAKAIEEPIBDAELAkACQCAAKAIIQQFrDgIBAgALIAAtACRBAkcEQCACQSBqIAApAxAgACgCIBCpIyABIAIpAyAgAigCKEEAEIYGCyACQdgAakHYmOMAKQMANwIAIAJBADsBggEgAkEANgJ4IAJCgICAgIABNwJwIAJBADoAbCACQQA2AmggAkKAgICAwAA3AmAgAkEANgJMIAJCgICAgIABNwJEIAJB0JjjACkDADcCUCACIAEvATw7AYABIAIgASgCODYCfCAAQShqIAJBxABqEOIrIAJB8ABqIQACQCACKAJ4IgMEQCABQQxqIAMQ6CggAkGEAWogAigCdCACKAJ4EJkKIAIgAigChAE2ApgBIAIgAigCiAEiAzYCkAEgAiADIAIoAowBQQR0IgRqIgU2ApwBA0AgBEUNAiACQcQAaiADKQMA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ACAHNwIADAYLIAAgBzcCAAwFCyAAIAc3AgAMBAsgACAHNwIADAMLIAAgBzcCAAwCCyAAIAc3AgAMAQsgACAHNwIACyADQTBqJAALtwgCCX8BfiMAQaABayIBJAAgAUIANwIoIAFCgICAgMAANwIgIAFCCDcCGCABQgA3AhAgAUKAgICAwAA3AggCQAJAAkADQCACQQFxBEAgAUGIAWogASgCDCABKAIQEOQHIAEoAogBIgNBhICAgHhGBEAgAUEIahCdICEDIABBhICAgHg2AgAgACADNgIEDAULIAAgASkCjAE3AgQgAEEMaiABQZQBaigCADYCACAAIAM2AgAMAwsgAUGIAWoiBCACEMgcAkACfwJAIAEoAogBRQRAIAEoAowBIQMgAUEANgJAIAFCgICAgBA3AzggAUIANwMwIAQgAUEwahDJECABKAKIAQ0BQYKAgIB4DAILIAAgASkDkAE3AwggACADNgIEIABBgICAgHg2AgAMBQsgASgCkAFFDQFBg4CAgHgLIQQgACADNgIEIAAgBDYCAAwDCyABQQhqIAMQnQUgAUHYAGogAUFAaygCADYCACABQdAAaiABQThqKQMANwMAIAEgASkDMDcDSCADQQN0IQkDQCABQeAAaiABQcgAahDJECABKAJgRQRAQQEhAgwCCwJAAkACQAJAAkACQCABKAJkIgRB/v///wdNBEAgASgCbCEGIAEoAmghAiABKAIMIAEoAhAiBSADELEfIgcoAgRBAmoiCEH+////B0sNAiAHIAg2AgQgAkUNBCABIAIgBhDFDiABIAEoAgQiBTYCdCABIAEoAgAiAjYCcCABKAIYIgYgASgCHCIHIAMQsh8gAkEIaiIIIAUQhgcNASAGIAcgAxCzHyACIAIoAgAiB0EBajYCACAHQQBIDQUgAiABKAJ0IgcgBBDbByABKAIkIgIgASgCKCIGIANB9JfDABCjHyABKAJwIAcQzRggASABKAIsIAVBAXRqQRRqNgIsIAEoAhAhBQwGCyAAIAM2AgQgAEGBgICAeDYCACAAIAStNwMIDAkLIAFBiAFqIAggBRD/ECABIAM2ApQBIAEoAogBIQIgASgCjAEhBCABKQOQASEKIAFB8ABqEN0eIAJBhICAgHhGDQUMAQsgBK0hCkGBgICAeCECIAMhBAsgACAKNwMIIAAgBDYCBCAA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EL0RIAMtABBBBEYNASADKQMQIgRC/wGDQgRRDQEgACAENwIADAILIAAgBDcCAAwBCyADQRBqIAJBCGogARDOEgJAAkACQCADLQAQQQRHBEAgAykDECIEQv8Bg0IEUg0BCyACKAIgDQEMAgsgACAENwIADAILIANBEGogARC9EQJAAkACQCADLQAQQQRHBEAgAykDECIEQv8Bg0IEUg0BCyADQQA2AhAgA0EIaiABIANBEGpB6K7gAEEHEJoTIAMtAAhBBEcEQCADKQMIIgRC/wGDQgRSDQILIANBEGogARC9ESADLQAQQQRHBEAgAykDECIEQv8Bg0IEUg0DCyADQRBqIAJBIGogARA3IAMtABBBBEYNAyADKQMQIgRC/wGDQgRRDQMgACAENwIADAQLIAAgBDcCAAwDCyAAIAQ3AgAMAgsgACAENwIADAELAkACQAJAAkACQCACKAIkRQ0AAkAgAS0ATQ0AIANBEGogARC9ESADLQAQQQRGDQAgAykDECIEQv8Bg0IEUg0ECyADQQA2AhAgA0EIaiABIANBEGpBrangAEEBEJoTIAMtAAhBBEcEQCADKQMIIgRC/wGDQgRSDQULAkAgAS0ATQ0AIANBEGogARC9ESADLQAQQQRGDQAgAykDECIEQv8Bg0IEUg0CCyADQRBqIAJBJGogARA3IAMtABBBBEYNACADKQMQIgRC/wGDQgRSDQILIABBBDoAAAwECyAAIAQ3AgAMAwsgACAENwIADAILIAAgBDcCAAwBCyAAIAQ3AgALIANBIGokAAu/CAIIfwF+IwBB0ABrIgMkACABQShqIgUQqiAhBgJAAkACQAJAAkACQAJAAkACQAJAAkAgAkUEQAJAIAUQyA0iBEUNACAEKAIAQQJHDQAgBC0ACA0AIAQtAAkNACABKALIAiEEIAFBJTYCyAIgASABKQPgAjcDmAMgA0E0aiABQdQCaikCADcCACADQTxqIAFB3AJqKAIANgIAIAMgASkCzAI3AiwgAyAENgIoIANBKGoQvgpBASEHCwJAAkAgBRDIDSIERQ0AIAQoAgBBAkcNACAELQAIQQJHDQAgBC0ACUEWRg0BCyADQTBqIAUQhBAgA0EgaiAFEPATIANB8OffADYCLCADQTQ6ACggAygCICADKAIkIANBKGoQ8BQhBCAFEMgNIgJFDQsgAigCAEEkRg0CDAsLIAEoAsgCIQQgAUElNgLIAiABIAEpA+ACNwOYAyADQTRqIAFB1AJqKQIANwIAIANBPGogAUHcAmooAgA2AgAgAyABKQLMAjcCLCADIAQ2AiggA0EoahC+CgsgA0EYaiABQQBBARDJDiADKAIcIQggAygCGA0BIAUQyA0iBARAIAQoAgBBCUYNAwsgA0EwaiAFEIQQIANBCGogBRDwEyADQZDf3wA2AiwgA0E0OgAoIAMoAgggAygCDCADQShqEPAUIQQgBRDIDSICRQ0HIAIoAgBBJEYNAwwHCyABIAEpA+ACNwOYAyABKALIAiABQSU2AsgCQSRHDQMgASABKALMAhD7CwwICyAAQYGAgIB4NgIAIAAgCDYCBAwICyABKALIAiEEIAFBJTYCyAIgASABKQPgAjcDmAMgA0E0aiABQdQCaikCADcCACADQTxqIAFB3AJqKAIANgIAIAMgASkCzAI3AiwgAyAENgIoIANBKGoiBBC+CiAEIAEQrQIgAygCLCEEIAMoAigiCUGAgICAeEcEQCADIAMoAjAiCjYCSCADIAQ2AkQgAyAJNgJAIANBEGogAUGA7N8AEPEBIAMoAhQhBSADKAIQDQMgBiABKAKcAyIBIAEgBksbIQQgBiABIAEgBkkbIQECfiACRQRAIAQhAiABIQQgCCEBIAMpAkQMAQtBgICAgHghCSAFIQIgCCEHIAohBSADKQNACyELIAAgBzYCHCAAIAE2AhggACAENgIUIAAgAjYCECAAIAU2AgwgACALNwIEIAAgCTYCAAwICyAAQYGAgIB4NgIAIAAgBDYCBAwFCyABIAEpA+ACNwOYAyABKALIAiABQSU2AsgCQSRHDQIgASABKALMAhD7CwwDC0HZ5OAAQShB8OvfABDhFwALIABBgYCAgHg2AgAgACAFNgIEIANBQGsQ1yYMAgtB2eTgAEEoQZjs3wAQ4RcACyAAQYGAgIB4NgIAIAAgBDYCBAsgCBDEKAwBCyAAQYGAgIB4NgIAIAAgBDYCBAsgA0HQAGokAAufCAIIfwF+IwBB0ABrIgMkACABQShqIgUQxCAhBgJAAkACQAJAAkACQAJAAkACQAJAAkAgAkUEQAJAIAUQ5Q0iBEUNACAEKAIAQQJHDQAgBC0ACA0AIAQtAAkNACABKAIoIQQgAUElNgIoIAEgASkDQDcDeCADQTRqIAFBNGopAgA3AgAgA0E8aiABQTxqKAIANgIAIAMgASkCLDcCLCADIAQ2AiggA0EoahC/CkEBIQcLAkACQCAFEOUNIgRFDQAgBCgCAEECRw0AIAQtAAhBAkcNACAELQAJQRZGDQELIANBMGogBRDmCyADQSBqIAUQpBQgA0Hw598ANgIsIANBNDoAKCADKAIgIAMoAiQgA0EoahDwFCEEIAUQ5Q0iAkUNCyACKAIAQSRGDQIMCwsgASgCKCEEIAFBJTYCKCABIAEpA0A3A3ggA0E0aiABQTRqKQIANwIAIANBPGogAUE8aigCADYCACADIAEpAiw3AiwgAyAENgIoIANBKGoQvwoLIANBGGogAUEAQQEQzQ4gAygCHCEIIAMoAhgNASAFEOUNIgQEQCAEKAIAQQlGDQMLIANBMGogBRDmCyADQQhqIAUQpBQgA0GQ398ANgIsIANBNDoAKCADKAIIIAMoAgwgA0EoahDwFCEEIAUQ5Q0iAkUNByACKAIAQSRGDQMMBwsgASABKQNANwN4IAEoAiggAUElNgIoQSRHDQMgASABKAIsEIIMDAgLIABBgYCAgHg2AgAgACAINgIEDAgLIAEoAighBCABQSU2AiggASABKQNANwN4IANBNGogAUE0aikCADcCACADQTxqIAFBPGooAgA2AgAgAyABKQIsNwIsIAMgBDYCKCADQShqIgQQvwogBCABEK4CIAMoAiwhBCADKAIoIglBgICAgHhHBEAgAyADKAIwIgo2AkggAyAENgJEIAMgCTYCQCADQRBqIAFBgOzfABDzASADKAIUIQUgAygCEA0DIAYgASgCfCIBIAEgBksbIQQgBiABIAEgBkkbIQECfiACRQRAIAQhAiABIQQgCCEBIAMpAkQMAQtBgICAgHghCSAFIQIgCCEHIAohBSADKQNACyELIAAgBzYCHCAAIAE2AhggACAENgIUIAAgAjYCECAAIAU2AgwgACALNwIEIAAgCTYCAAwICyAAQYGAgIB4NgIAIAAgBDYCBAwFCyABIAEpA0A3A3ggASgCKCABQSU2AihBJEcNAiABIAEoAiwQggwMAwtB2eTgAEEoQfDr3wAQ4RcACyAAQYGAgIB4NgIAIAAgBTYCBCADQUBrENcmDAILQdnk4ABBKEGY7N8AEOEXAAsgAEGBgICAeDYCACAA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NwMAIAYgBSkCADcCACAGQQhqIAVBCGooAgA2AgAgAkEBOgAoIAIgATYCICACIAQ2AiQgAkEBOgA5IAIgCzcDACACIAEvADs7ADsgAS0AOCEEIAIgAS0APToAPSACIAQ6ADggAkEBOgA6IANBHGogAhC2DSADQQRqIAIQkhogA0EYaiACELUlIAIQ5ygMCAsgASgCMBCrESEEIAdBCGpB2JjjACkDACIKNwIAIAdB0JjjACkDACILNwIAIAJBCGogCjcDACAGIAUpAgA3AgAgBkEIaiAFQQhqKAIANgIAIAJBAToAKCACIAE2AiAgAiAENgIkIAJBAToAOSACIAs3AwAgAiABLwA7OwA7IAEtADghBCACIAEtAD06AD0gAiAEOgA4IAJBAToAOiADQRxqIAIQtg0gA0EEaiACEJIaIANBGGogAhC1JSACEOcoDAcLIANBFWotAABFDQUgA0EQaiABEMArDAULIANBFGotAABBAUYEQCADQQRqIAEQwCsLIANBEGogARC1JQwFCyADQTRqLQAAQQFGBEAgA0EwaiABEMArCyABIAMQpRUMBAsgASgCMBCrESEEIAdBCGpB2JjjACkDACIKNwIAIAdB0JjjACkDACILNwIAIAJBCGogCjcDACAGIAUpAgA3AgAgBkEIaiAFQQhqKAIANgIAIAJBAToAKCACIAE2AiAgAiAENgIkIAJBAToAOSACIAs3AwAgAiABLwA7OwA7IAEtADghBCACIAEtAD06AD0gAiAEOgA4IAJBAToAOiADQSBqIAIQtg0gA0Ekai0AAEEBRgRAIANBEGogAhDAKwsgA0EEaiACEJIaIANBHGogAhC1JSACEOcoDAMLIAEgA0EEahCkFQwCCyACQUBrJAAPCyABKAIwEKsRIQQgB0EIakHYmOMAKQMAIgo3AgAgB0HQmOMAKQMAIgs3AgAgAkEIaiAKNwMAIAYgBSkCADcCACAGQQhqIAVBCGooAgA2AgAgAkEBOgAoIAIgATYCICACIAQ2AiQgAkEBOgA5IAIgCzcDACACIAEvADs7ADsgAS0AOCEEIAIgAS0APToAPSACIAQ6ADggAkEBOgA6IANBDGogAhC1JSACEOcoCyAAQThqIQAMAAsAC94HAQZ/IwBBgAJrIgQkACAEIAM2AjQCQCABQShqIggQyA0iBUUNACAFKAIAQRVH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gIB4NgIADAkLIAYQoRUgA0EYaiABQQIQ8QYgAygCHCECIAMoAhhBAWsOAgQCAwtBCiEECyAGEKEVQQQQ0iAhASAAQQE2AgggACABNgIEIABBATYCACABIAQ2AgAMBgsgAEGBgICAeDYCACAAIAI2AgQMBQsgA0EQNgIgIANBuOfYADYCHCADQSQ6ABggASgC0AEgBSADQRhqEIUrIQEgAEGBgICAeDYCACAAIAE2AgQMBAtBBBDSICEBIABBATYCCCAAIAE2AgQgAEEBNgIAIAEgAjYCAAwDCyADQQxqIAEQtgQgAygCDEGAgICAeEcEQCAAIAMpAgw3AgAgAEEIaiADQRRqKAIANgIADAMLIANBGGoiAiADKAIQEJMcIAEoAtABIAUgAhCFKyEBIABBgYCAgHg2AgAgACABNgIEDAILIAYQoRUgBkEKEIUYGiAAQYCAgIB4NgIADAELAkACQCACRQRAIANBFToAGCABIAUgA0EYahDRKCAEQTBrIQIgASgCwAEgASgCxAEQ4xxBMGsiBEEITw0BIAYQoRUgAkEDdCAEciECIAEoAsABIAEoAsQBEOMcQTBrIgRBCE8NAiACQf8BcSIFQSBPBEBBBBDSICEBIABBATYCCCAAIAE2AgQgAEEBNgIAIAEgBTYCAAwECyAGEKEVQQQQ0iAhASAAQQE2AgggACABNgIEIABBATYCACABIAJBA3QgBHJB/wFxNgIADAMLIANBFToAGCABKALQASAFIANBGGoQhSshASAAQYGAgIB4NgIAIAAgATYCBAwCC0EEENIgIQEgAEEBNgIIIAAgATYCBCAAQQE2AgAgASACNgIADAELQQQQ0iAhASAAQQE2AgggACABNgIEIABBATYCACABIAJB/wFxNgIACyADQTBqJAALjggCBn8BfiMAQcABayICJAACQAJAAkACQAJAAkACQCAAKAIAQQFrDgcBAgMGBgQFAAsgAiAAKQMIIAAoAhgQqSMgASACKQMAIAIoAghBABCGBiAAQSBqIAEQ4isMBQsgAkEwaiAAKQMIIgggACgCGCIGEKkjIAEgAikDMCACKAI4QQEQhgYgACgCICIFKAIIQQZ0IQMgBSgCBCEAAkADQCADIgRFDQEgACgCACEHIANBQGohAyAAQUBrIQACQCAHQQJrDgMAAQABCwsgAkEgaiAIIAYQqSMg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AkADQAJAAkAgBgRAIAQgCUcNAUHEycMAEMIpAAsgAEHUAmoiBCgCACIGQQFNDQEgA0EANgIwIANBATYCJCADQfjH3wA2AiAgA0IENwIoIAEgAiADQSBqEJskDQQgAEHQAmohBSAEIQBBACEEA0AgBCAGRg0CIAMgBDYCgAEgBSgCACAAKAIAIARB3MLDABCeHygCACEHIANBEDYCFCADQRA2AgwgAyAHNgKcASADQQI2ApgBIANBAzYCiAEgA0H0wsMANgKEASADIANBnAFqNgIQIAMgA0GAAWo2AgggA0EDOgBcIANBADYCWCADQqCAgIAQNwJQIANCgoCAgOAANwJIIANBAjYCQCADQQM6ADwgA0EINgI4IANCIDcCMCADQoCAgIDgADcCKCADQQI2AiAgAyADQSBqNgKUASADQQI2ApABIAMgA0EIajYCjAEgASACIANBhAFqEJskDQQgBEEBaiEEDAALAAsgAyAHNgIEAkAgBCALRwRAIAQgCkcEQCADQSA2AoABDAILIANBPjYCgAEMAQsgA0HeADYCgAELIAdBFGohByADQbQBNgKYASADQRA2ApABIANB4QA2AogBIAMgA0EEajYClAEgAyADQZwBajYCjAEgAyADQYABajYChAEgAyAENgKcASADQQM6AHwgA0EANgJ4IANCoICAgCA3AnAgA0KCgICA4AA3AmggA0ECNgJgIANBAzoAXCADQQg2AlggA0KggICAEDcCUCADQoCAgIDgADcCSCADQQI2AkAgA0EDOgA8IANBADYCOCADQiA3AjAgA0KCgICA4AA3AiggA0ECNgIgIANBAzYCHCADQQQ2AgwgA0GMw8MANgIIIAMgA0EgajYCGCADQQM2AhQgBkEUayEGIARBAWohBCADIANBhAFqNgIQIAEgAiADQQhqEJskRQ0BDAMLCyADQQA2AjAgA0EBNgIkIANB+MffADYCICADQgQ3AiggASACIANBIGoQmyQNACADQQI2AiQgA0HAwsMANgIgIANCATcCLCADQbUBNgKIASADIAg2AoQBIAMgA0GEAWo2AihBASEFIAEgAiADQSBqEJskDQEgA0EANgIwIANBATYCJCADQdTCwwA2AiAgA0IENwIoIAEgAiADQSBqEJskIQUMAQtBASEFCyADQaABaiQAIAULzwYCBn8BfiMAQUBqIgMk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aigCABDkIEUNAwwCCyAAKAIMDQEMAgsgACgCDEUNAQtBHEEEEJEgIQIQsRQhAyAAQRhqIgQoAgAhBSAEIAM2AgAgACkCACEGIABBADYCACACIAY3AgAgAkEIaiAAQQhqKQIANwIAIAJBEGogAEEQaikCADcCACACQRhqIAU2AgBBASEAIAFBATYCFCABIAI2AhAgAUEBNgIMIAFB2ABqIQIDQAJAAkACQAJAAkACQCAARQ0AIAEgAEEBayIANgIUIAFBQGsiAyABKAIQIABBHGxqIgBBDGopAgA3AwAgAUHIAGoiBCAAQRRqKQIANwMAIAEgACkCBDcDOCAAKAIAIgBBCEYNACACIAEpAzg3AgAgAkEIaiADKQMANwIAIAJBEGogBCkDADcCACABIAA2AlQgAEEEaw4EAQIDBAULIAFBDGoQwiYMBgsgASgCYCEAELEUIQMgAUGIAWogAEEYaiIEKAIANgIAIAFBgAFqIABBEGopAgA3AwAgAUH4AGogAEEIaikCADcDACAEIAM2AgAgACkCACEGIABBADYCACABIAY3A3AgAUEMaiABQfAAahCtEAwDCyABKAJYIQAQsRQhAyABQYgBaiAAQRhqIgQoAgA2AgAgAUGAAWogAEEQaikCADcDACABQfgAaiAAQQhqKQIANwMAIAQgAzYCACAAKQIAIQYgAEEANgIAIAEgBjcDcCABQQxqIAFB8ABqEK0QDAILIAEoAmAhACABQQA2AmAgAUEANgKAASABIAA2AnwgASACNgJ4IAEgASgCXCIDNgJwIAEgAyAAQRxsajYCdCABQQxqIAFB8ABqEL4HDAELIAEoAmAhACABQQA2AmAgAUEANgKAASABIAA2AnwgASACNgJ4IAEgASgCXCIDNgJwIAEgAyAAQRxsajYCdCABQQxqIAFB8ABqEL4HCyABQdQAahDJJiABKAIUIQAMAAsACyABQZABaiQAC6oGAQt/IwBBgAFrIgIkACAAIAEQkBogAUEsaiEKIAFBHGohBSABQQxqIQsgACgCECIIIAAoAhRB2ABsaiEMIAJBMGohBiACQRBqIQkDQCAMIAgiA0cEQCADQdgAaiEIAkACQAJAAkACQAJAAkAgAygCACIEQQRrQQAgBEEFa0EISRtBAWsOCAECAwQICAUGAAsgASADEMUDDAcLIAEgA0EIahCxBAwG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IgcgBEEYaigCADYCACAEQTxqIAEoAgA2AgAgBEGQAWogA0EIaigCADYCACAEIAUpAgA3AjQgBEGcAWogBykDADcCACAEQaQBaiAEQThqKQMANwIAIAQgBCkDEDcClAEgBCADKQIANwOIAUEIENIgIgEgCDYCBCABIAY2AgAgBEHYAGogCikDADcCACAEQeAAaiAEQYABaikDADcCACAEIAQpA3A3AlAgBEEoaiIDIARBiAFqQSQQ9gYaIAQgATYCTCAEIAk6AGggAkEIIAMQ6SkQyhggAEEEaiACQSQQ9gYaIABBIjYCAAwCCyAEQZwBaiAFQQhqKAIAIgM2AgAgBEGQAWogAzYCACAEIAUpAgAiCzcClAEgBCALNwOIASAEQRs2AiggACABKAIEIAEoAgggBEGIAWogBEEoahCTDyAEQSBqEL8JCyACEMMmCyAEQbABaiQAC6cFAgR/AX4jAEHgAGsiASQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAoAgBBAWsOCgECAwQFBgcICQoACyABQRhqIgIgAEEgaikDADcDACABQRBqIABBGGoiAykDADcDACABQQhqIABBEGoiBCkDADcDACABIAApAwg3AwAgAhDjJiABQTRqIAMpAgA3AgAgAUEsaiAEKQIANwIAIAEgACkCCDcCJEHAAEEIEL0iIgBBGjYCACAAIAEpAiA3AgQgAEEMaiABQShqKQIANwIAIABBFGogAUEwaikCADcCACAAQRxqIAFBOGooAgA2AgAMCgsgAUEoaiAAQQhqQSgQ9gYaIAFBFDYCICABQSBqEMMoIQAMCQsgAUEoaiAAQQhqQSgQ9gYaIAFBFTYCICABQSBqEMMoIQAMCAsgAUEsaiAAQQxqKAIANgIAIAFBIzYCICABIAApAgQ3AiQgAUEgahDDKCEADAcLIAFBLGogAEEMaikCADcCACABQTA2AiAgASAAKQIENwIkIAFBIGoQwyghAAwGCyABQSxqIABBDGopAgA3AgAgAUEsNgIgIAEgACkCBDcCJCABQSBqEMMoIQAMBQsgAUEsaiAAQQxqKQIANwIAIAFBLjYCICABIAApAgQ3AiQgAUEgahDDKCEADAQLIAFBLGogAEEMaigCADYCACABQSs2AiAgASAAKQIENwIkIAFBIGoQwyghAAwDCyABQSxqIABBDGop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EOUTIAJBkAJqIAEoAmggASgCbBDlEyACQZwCaiABKAJ0IAEoAngQ5RMgAiAWNwL8ASACIBU3AvQBIAIgFDcC7AEgAiATNwLkASACIBI3AtwBIAIgETcC1AEgAiAQNwLMASACIA83AsQBIAIgDjcCvAEgAkG8AmogAUGQAWovAQA7AQAgAkHGAmogAUGaAWovAQA7AQAgAkHQAmogAUGkAWovAQA7AQAgAkHaAmogAUGuAWovAQA7AQAgAkHkAmogAUG4AWovAQA7AQAgAiABKQKIATcCtAIgAiABKQGSATcBvgIgAiABKQKcATcCyAIgAiABKQGmATcB0gIgAiABKQKwATcC3AIgAkHuAmogAUHCAWovAQA7AQAgAiABKQG6ATcB5gIgASgCgAEhBCABKAKEASEFIwBBEGsiAyQAIANBCGogBUEBQQoQqhQgAygCCCEGIAMoAgwgBCAFQQpsEPYGIQcgAkGoAmoiBCAFNgIIIAQgBzYCBCAEIAY2AgAgA0EQaiQAIAJBCGogAkG8AWoiA0HsABD2BhogAkH0AGogBEHIABD2BhogAyABQcQBahDMHiABKALcASIDIAMoAgAiBUEBajYCACAFQQBIBEAACyABKAIEIQUgASgCACEEIAEtAPIBIQYgAS0A8QEhByABLQDwASEKIAEoAuwBIQsgASgC6AEhDCACIAEoAgggASgCDBCmKCABKALgASENIAIpAwAhDiAAQdABaiABQdABahDMHiAAIAg2AuQBIAAgCToA8wEgAEEQaiACQQhqQbQBEPYGGiAAIAY6APIBIAAgBzoA8QEgACAKOgDwASAAIAs2AuwBIAAgDDYC6AEgACANNgLgASAAIAM2AtwBIAAgDjcCCCAAIAU2AgQgACAENgIAIABBzAFqIAJBxAFqKAIANgIAIAAgAikCvAE3AsQBIAJB8AJqJAALnQUCAX8BfiMAQSBrIgMkAAJAAkACQAJAIAIoAjxFDQAgAyACQTxqNgIIIANBGGogA0EIaiABEKcpIAMtABhBBEYNACADKQMYIgRC/wGDQgRSDQELIANBADYCDCADQRhqIAEgA0EMakGrruAAQQEQmhMgAy0AGEEERg0BIAMpAxgiBEL/AYNCBFENASAAIAQ3AgAMAgsgACAENwIADAELIANBGGogASACKAIwIAIoAjQgAigCBCACKAII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AkACQAJAAkACQCABKAIIQQFrDgcBAgMEBQYHAAsgASgCKCIBQShqIQIgAUEkaiEBDAgLIAEoAigiAUE0aiECIAFBMGohAQwHCyABKAIMIgFBEGohAiABQQxqIQEMBgsgASgCDCIBQRBqIQIgAUEMaiEBDAULIAEoAgwiAUEEaiECDAQLIAEoAgwiAUEEaiECDAMLIAEoAgwiAUEcaiECIAFBGGohAQwCCyABKAIMIgFBzABqIQIgAUHIAGohAQwBCyABQQxqIQIgAUEIaiEBCyAAIAIoAgA2AgQgACABKAIANgIAC8YEAgZ/AX4jAEHgAGsiAiQAEMwdIQYCfwJ/AkACQAJAAkACQAJAIAAoAgBBAWsOBAECAwQACyAAKQMQIQggACgCDCEEIAAoAggMBgsgAkHQAGogAEEQaikCADcCACACQdgAaiAAQRhqKQIANwIAIAIgACkCCDcCSCACQRRqIAJBzABqKQIANwIAIAJBHGogAkHUAGopAgA3AgAgAkEkaiACQdwAaigCADYCACACQQA2AgggAkEbNgIAIAIgAikCRDcCDCACEMMoIQVBAiEDQQAMBAsgAkHQAGogAEEQaikCADcCACACQdgAaiAAQRhqKQIANwIAIAIgACkCCDcCSCACQRRqIAJBzABqKQIANwIAIAJBHGogAkHUAGopAgA3AgAgAkEkaiACQdwAaigCADYCACACQQM2AggMAgsgACgCDCEEIAAoAgQhBUECIQMgACgCCAwDCyACQdAAaiAAQRBqKQIANwIAIAJB2ABqIABBGGopAgA3AgAgAiAAKQIINwJIIAJBFGogAkHMAGopAgA3AgAgAkEcaiACQdQAaikCADcCACACQSRqIAJB3ABqKAIANgIAIAJBBDYCCAsgAkEbNgIAIAIgAikCRDcCDCACEMMoIQVBAiEDQQALIQRBAAshByABEMMoIQFBwAAQ0iAiAEEAOgA8IAAgATYCOCAAQgA3AzAgACAGNgIoIABCADcDICAAIAg3AxggACAENgIUIAAgBzYCECAAIAU2AgwgACADNgIIIABBATYCACACQeAAaiQAIAALwQQBCH8jAEFAaiIBJAAgAUEBOgALIAFBATYCJCABQgQ3AhwgAUIANwIUIAFCgICAgMAANwIMIAFBADYCMCABQoCAgIDAADcCKCABIAFBKGo2AjwgASAB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yO/gADYCECADQgE3AhwgA0GpAjYCDCADIAApAgg3AiggAyADQQhqNgIYIAMgA0EoajYCCCABIAIgA0EQahCbJAwICyADIABBBGo2AgggA0ECNgIUIANBpMXYADYCECADQgE3AhwgA0EINgIsIAMgA0EoajYCGCADIANBCGo2AiggASACIANBEGoQmyQMBwsgA0EANgIgIANBATYCFCADQcjF2AA2AhAgA0IENwIYIAEgAiADQRBqEJskDAYLIANBADYCICADQQE2AhQgA0HYxdgANgIQIANCBDcCGCABIAIgA0EQahCbJAwFCyADQQA2AiAgA0EBNgIUIANB9MXYADYCECADQgQ3AhggASACIANBEGoQmyQMBAsgA0EANgIgIANBATYCFCADQZTG2AA2AhAgA0IENwIYIAEgAiADQRBqEJskDAMLIAMgADYCCCADQQE2AhQgA0HI7+AANgIQIANCATcCHCADQaoCNgIsIAMgA0EoajYCGCADIANBCGo2AiggASACIANBEGoQmyQMAgsgAyAAQQRqNgIIIANBAjYCFCADQZzG2AA2AhAgA0IBNwIcIANBCDYCLCADIANBKGo2AhggAyADQQhqNgIoIAEgAiADQRBqEJskDAELIAMgAEEEajYCCCADQQE2AhQgA0HI7+AANgIQIANCATcCHCADQQg2AiwgAyADQShqNgIYIAMgA0EIajYCKCABIAIgA0EQahCbJAsgA0EwaiQAC8EEAQl/IwBBEGsiAyQAAkACQAJ/AkAgACgCAEEBRgRAIAAoAgQhBCADQQhqIAFBCGopAgA3AwAgAyABKQIANwMAIAAtACAhCCAAKAIQIQkgAC0AHEEIcQ0BIAMoAgQhBiAIIQUgCQwCCyAAKAIUIAAoAhggARC7BCEBDAMLIAAoAhQgAygCACADKAIEIgEgACgCGCgCDBEDAA0BQQEhBSAAQQE6ACAgAEEwNgIQIANCATcDACAEIAFrIgFBACABIARNGyEEQTALIQogAygCDCICBEAgAygCCCEBIAJBDGwhAgNAAn8CQAJAAkAgAS8BAEEBaw4CAgEACyABKAIEDAILIAEoAggMAQsgAS8BAiIHQegHTwRAQQRBBSAHQZDOAEkbDAELQQEgB0EKSQ0AGkECQQMgB0HkAEkbCyEHIAFBDGohASAGIAdqIQYgAkEMayICDQAL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ayIGIAYgBUHhAGtJGyIFIANPDQYLIAStIAd+IghCIIinDQIgAUEBaiEBIAJBAWshAiAFIAinIgZqIgQgBk8NAAsLIABBAjoAAQwECyAAQQI6AAEMAwtBACEEA0AgAS0AACIGQTBrIgVBCk8EQEF/IAZBIHIiBUHXAGsiBiAGIAVB4QBrSRsiBSADTw0DCyABQQFqIQEgBSADIARsaiEEIAJBAWsiAg0ACwsgACAENgIEIABBADoAAA8LIABBAToAASAAQQE6AAAPCyAAQQE6AAALtwQBBn8jAEEwayIBJAAgACgCACIDBEAgASADNgIYIAFBADYCFCABIAM2AgggAUEANgIEIAEgACgCBCICNgIcIAEgAjYCDEEBIQQgACgCCCECCyABIAI2AiAgASAENgIQIAEgBDYCAAJAA0ACQAJAAkACfwJAIAJFBEAgBEUNBSABKAIIIQMgASgCBCICDQEgASgCDCECA0AgAgRAIAJBAWshAiADKAKYAyEDDAEFIAMhAkEADAQLAAsACyABIAJBAWs2AiACQAJAIARFDQAgASgCBA0AIAEoAgghAiABKAIMIQADQCAABEAgAEEBayEAIAIoApgDIQIMAQUgAUIANwIIIAEgAjYCBEEBIQQMAwsACwALIARFDQMgASgCBCECCyABKAIMIQMgASgCCCEAA0AgAyACLwGSA0kNBCABQSRqIAIgABDuFCABKAIkIgJFDQcgASgCLCEDIAEoAighAAwACwALIAMLIQADQCABQSRqIAIgABDuFCABKAIkIgJFDQMgASgCKCEADAALAAtByIbYABDCKQALIANBAWohBQJAIABFBEAgAiEGDAELIAIgBUECdGpBmANqIQUDQCAFKAIAIgZBmANqIQUgAEEBayIADQALQQAhBQsgASAFNgIMIAFBADYCCCABIAY2AgQgAkUNACACIANBDGxqIgBBjAJqKAIAIABBkAJqKAIAEL4pIAIgA0EYbGoQ0xggASgCICECDAELCyABQTBqJAAPC0GAgNgAEMIpAAvuBAEBfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAoAgAiACgCAA4TEhIBAgMEBQYHCAkKCwwNDg8QEQALIABBCGoQ8R0MEQsgACgCBEGAgICAeEYEQCAAQQhqENcmIAAoAiAQpx4gAEEU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DwsgAEEEaiABEIctIABBCGogARCLLSAAKAIURQ0GIABBFGogARCLLQ8LIABBEGogARCHLSAAKAIMQRhsIQIgACgCCCEAA0AgAkUNBiAAQRRqIAEQgCYgACABEKkaIAJBGGshAiAAQRhqIQAMAAsACyAAQQRqIAEQhy0PCyAAKAIEIgBByABqIAEQqRogAEHgAGohAgJAAkACQCAAKAIAQQdrDgIBAgALIAAgARCcEgsgAEEoaiABEKkaCyACKAIAQYCAgIB4Rg0DIAIgARCpGg8LAkAgACgCBCIDQQJGDQAgAEEIaiECIANBAXFFBEAgAiABEIwtDAELIAIgARCHLQsgAEEYaiABEIAmIABBHGogARCAJiAAQQxqIAEQiy0PCyAAQQhqIAEQuQ0PCyABLQAMIQIgAUEBOgAMIABBBGogARCHLSABIAI6AAwLDwsgAEEEaiABEIctIABBCGogARCLLQ8LIABBBGoiA0EEaiECAkACQAJAAkAgAygCAEEBaw4CAQIACyACIAEQjC0MAgsgAigCACABENwTDAELIAIoAgAgARCcEgsgAEEMaiABEIctIABBEGogARCLLQv1AwECfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAoAgBBAWsOEgoKCwECCgoDBAUGCwsHDAwICQALIABBBGogARCwGg8LIABBDGogARCiJg8LIABBKGogARCvLQ8LIABBBGogARCrLSAAQQhqIAEQry0gACgCFEUNBiAAQRRqIAEQry0PCyAAQRBqIAEQqy0gACgCDEEYbCECIAAoAgghAANAIAJFDQYgAEEUaiABEKImIAAgARCwGiACQRhrIQIgAEEYaiEADAALAAsgAEEEaiABEKstDwsgACgCBCIAQcgAaiABELAaIAAoAgAiAkEIRwRAIAEtACghAyABQQE6ACggAkEHRwRAIAAgARDBEQsgAUEAOgAoIABBKGogARCwGiABIAM6ACgLIABB4ABqIAEQjiQPCwJAIAAoAgQiA0ECRg0AIABBCGohAiADQQFxRQRAIAIgARCsLQwBCyACIAEQqy0LIABBGGogARCiJiAAQRxqIAEQoiYgAEEMaiABEK8tDwsgAEEIaiABEPQLDwsgAEEEaiABEKstCw8LIABBBGogARCrLSAAQQhqIAEQry0PCyAAQQRqIgNBBGohAgJA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AkACQAJAAkACQAJAAkACQCAAKAIAQQFrDhIKCgsBAgoKAwQFBgsLBwwMCAkACyAAQQRqIAEQhxoPCyAAQQxqIAEQoCUPCyAAQShqIAEQ0SsPCyAAQQRqIAEQwSsgAEEIaiABENErIAAoAhRFDQYgAEEUaiABENErDwsgAEEQaiABEMErIAAoAgxBGGwhAiAAKAIIIQADQCACRQ0GIABBFGogARCgJSAAIAEQhxogAkEYayECIABBGGohAAwACwALIABBBGogARDBKw8LIAAoAgQiAEHIAGogARCHGiAAKAIAQQhHBEAgACABEMYjIABBKGogARCHGgsgASAAQeAAahDFIw8LAkAgACgCBCIDQQJGDQAgAEEIaiECIANBAXFFBEAgAiABENIrDAELIAIgARDBKwsgAEEYaiABEKAlIABBHGogARCgJSAAQQxqIAEQ0SsPCyAAQQhqIAEQtQwPCyAAQQRqIAEQwSsLDwsgAEEEaiABEMErIABBCGogARDRKw8LIABBBGoiA0EEaiECAkACQAJAAkAgAygCAEEBaw4CAQIACyACIAEQ0isMAgsgAigCACABENETDAELIAIgARDKKwsgAEEMaiABEMErIABBEGogARDRKwvmAwECfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAoAgBBAWsOEgoKCwECCgoDBAUGCwsHDAwICQALIABBBGogARCjGg8LIABBDGogARD9JQ8LIABBKGogARCBLQ8LIABBBGogARDnLCAAQQhqIAEQgS0gACgCFEUNBiAAQRRqIAEQgS0PCyAAQRBqIAEQ5ywgACgCDEEYbCECIAAoAgghAANAIAJFDQYgAEEUaiABEP0lIAAgARCjGiACQRhrIQIgAEEYaiEADAALAAsgAEEEaiABEOcsDwsgACgCBCIAQcgAaiABEKMaIAAoAgBBCEcEQCAAIAEQ8CMgAEEoaiABEKMaCyABIABB4ABqEO8jDwsCQCAAKAIEIgNBAkYNACAAQQhqIQIgA0EBcUUEQCACIAEQgi0MAQsgAiABEOcsCyAAQRhqIAEQ/SUgAEEcaiABEP0lIABBDGogARCBLQ8LIABBCGogARC3DA8LIABBBGogARDnLAsPCyAAQQRqIAEQ5ywgAEEIaiABEIEtDwsgAEEEaiIDQQRqIQICQAJAAkACQCADKAIA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IAJBADoACCABIAEgAkEIahDwFCEBIABCADcDACAAIAE2AggMAQsCQAJAAkAgBCgCAEEkRgRAIAEgASkD4AI3A5gDIAEoAsgCIAFBJTYCyAJBJEcNASABKALMAiEBIABCADcDACAAIAE2AggMBAsgASgCyAIhBCABQSU2AsgCIAEgASkD4AI3A5gDIAJBFGogAUHUAmopAgA3AgAgAkEcaiABQdwCaigCADYCACACIAEpAswCNwIMIAIgBDYCCCACQQhqIgYQvgoCQCABKAKcAyAFEKogRwRAIAEoApwDIQQgAkHdADoACCADIAQgAyAESRsgAyAEIAMgBEsbIAYQ8BQhAyAFEMgNIgRFDQQgBCgCAEEkRg0BDAQLIAJBCGogARDMBCACKQMIIgdQRQRAIAAgBzcDACAAIAMgASgCnAMiASABIANJGzYCDCAAIAMgASABIANLGzYCCAwFCyACKAIQIQEgAEIANwMAIAAgATYCCAwECyABIAEpA+ACNwOYAyABKALIAiABQSU2AsgCQSRHDQEgASABKALMAhD7CwwCC0HZ5OAAQShB+KHgABDhFwALQdnk4ABBKEGIouAAEOEXAAsgAEIANwMAIAAgAzYCCAsgAkEgaiQAC8sDAQZ/IwBBIGsiAyQAIAMgATYCECADIAI2AhQgAiABa0EDakECdiEEAkAgACgCICIBQQhJBEAgASECQQchAQwBCyAAKAIEIQILIABBIGohBwJ/QYGAgIB4IAQgASACa00NABogA0EIaiACIARqIgEgAk8gARDCFSADKAIMIQFBACADKAIIQQFxRQ0AGiADIAAgARCFBiADKAIEIQEgAygCAAsgARCXIEEHIQYCfyAHKAIAIgJBB00EQCAAQQRqIQUgByEEIAIMAQsgAEEEaiEEIAAoAgghBSACIQYgACgCBAsiAUECdCAFaiECAkADQCABIAZPBEAgBCABNgIAIAMgAykCEDcCGCAAQQRqIQQDQCADQRhqENUKIghBgIDEAEYNAwJ/IAcoAgAiBUEISQRAIAUhASAEIQZBByEFIAcMAQsgACgCBCEBIAAoAgghBiAECyECIAEgBUYEfyAAEIYQIAAoAgghBiAEIQIgACgCBAUgAQtBAnQgBmogCDYCACACIAIoAgBBAWo2AgAMAAsACyADQRBqENUKIgVBgIDEAEcEQCACIAU2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IGoQux0gAEEUahCJJQwRCyAAQQRqENcmIABBHGoQux0gAEEQahCJJQwQCyAAQRBqEOccIAAoAigQwCgMDwsCQCAAQRBqIgEtADRBBEYEQCABEOccDAELIAEQ0SELIAAoAlAQwCgMDgsgAEEEahC6CSAAKAIEIABBCGooAgAQ+CkMDQsgAEEEahCsBQwMCyAAQQRqEKcZIAAoAgQgAEEIaigCABD4KQwLCyAAQQRqEKwFDAoLIABBBGoQrAUMCQsgAEEIahDZJgwICyAAQQRqEKwFIABBCGoQrAUgAEEMahCsBSAAQRBqEKwFDAcLIABBEGoQ+iAMBgsgAEEEahCsBQwFCyAAQQRqEKwFDAQLIABBBGoQrAUgAEEIahCsBQwDCyAAQRBqEPogIABBQGsQkScgAEHEAGoQkScMAgsCQAJAAkACQEEEIAAoAghBgICAgHhzIgEgAUEETxsOBAECBQMACyAAQQhqENkmIABBFGoQ5CIMBAsgAEEgahCKJQwDCyAAQRBqENooDAILIABBEGoQiyUMAQsgAEEIahCMJSAAQShqEJInCyAAQdgAQQgQwhELqAMBAn8CfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgASgCAEEBaw4TAQIDBAUGBwgJCgsMDQ4PEBESEwALIAFBCGohAiABQQRqDBMLIAFBCGohAiABQQRqDBILIAFBBGoiA0EYQRQgASgCBEGAgICAeEYiARtqIQIgA0EUQRAgARtqDBELIAFBDGohAiABQQhqDBALIAFBDGohAiABQQhqDA8LIAFBFGohAiABQRBqDA4LIAFBDGohAiABQQhqDA0LIAFBFGohAiABQRBqDAwLIAFBDGohAiABQQhqDAsLIAFBDGohAiABQQhqDAoLIAFBGGohAiABQRRqDAkLIAFBGGohAiABQRRqDAgLIAFBDGohAiABQQhqDAcLIAFBDGohAiABQQhqDAYLIAFBDGohAiABQQhqDAULIAFBEGohAiABQQxqDAQLIAFBDGohAiABQQhqDAMLIAFBLGohAiABQShqDAILIAFBJGohAiABQSBqDAELIAFBDGohAiABQQhqCyEDIAAgAigCADYCBCAAIAMoAgA2AgAL/AMBAn8gACABaiECAkACQCAAKAIEIgNBAXENACADQQJxRQ0BIAAo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AjYCpAEgA0ECNgKcASADQQI2ApQBIANBAjYCjAEgA0EANgKEASADIAY2ArAEIAMgIzYCrAQgAyAYNgKoBCADIBI6ALQEIBJBA0YEQCADQagEahC4JEEDIRILIANByQFqId8BIAMoApABIQggAygCmAEhECADKAKgASHjASADKAKoASHgASADLQC9ASELIAMoAogBIQUgA0GsAWoi8wQQuCQgAyBAOgDUASADIA46AMYBIAMgDzoAxQEgAyDdAToAxAEgAyAeOgDDASADIAQ6AMIBIAMgCToAwQEgAyAZOgDAASADQYECOwG+ASADIBI6ALgBIAMgBjYCtAEgAyAjNgKwASADIBg2AqwBIAMgNjYChAEgAyDeASAFIDYbNgKIASADIAc6ALwBIAMgRCALIAdBAXEbOgC9ASADIBM2AqQBIAMg4AEgDCATQQJGGzYCqAEgAyAWNgKcASADIOMBIB0gFkECRhs2AqABIAMgNzYClAEgAyAQIEUgN0ECRhs2ApgBIAMgFzYCjAEgAyAIIAogF0ECRhs2ApABIAMgIjoA1QEgAyARNgLQASADQQJBACAVQQFxGzoAzQEgA0EBQQIgIEEBcRs6AM4BIANBAUECICZBAXEbOgDKASADQQFBAiArQQFxGzoAyQEgAyAhOgDPASADQQFBAiBDQQFxGzoAywEgA0EBQQIgDUEBcRs6AMwBIANBAToAyAEgAyDvBDYC3AEgAyDrBEEIajYC2AEgA0EANgLoASADQoCAgIDAADcC4AEgA0EANgL0ASADQoCAgIDAADcC7AEgA0KAgICAEDcCyAogAyADQeABaiJDNgLECiADIANB2AFqNgLACiADQdQEaiEuIANB2ARqIUAgA0G0BGohNiADQbAEaiE6IANB7ARqISYgA0GgA2ohNyADQZgCaiErIANBiAJqISEDQCADQdgAaiADQcAKahCrDyADKAJcIgVFBEAgA0KAgICAEDcCwAMgAyBDNgK8AyADQQA2AtgDIANCADcC0AMgAyADKALkASIFNgLIAyADIAUgAygC6AFBA3RqNgLMAyADIANB2AFqNgK4AyADQawEaiEhIANBjAJqIR0gA0G8BGohESADQbAEaiEMIANBtApqIQQgA0GgA2ohCSADQYgDaiEKIANB/AFqIR4DQCADQTBqIANBuANqEKsPIANB5AJqIQUC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OgC8EyACQQE6ALsTIAJCgYCAgKABNwOgEyACQoGAgIAwNwOYEyACQQE2ApATIAIgAi8Btg07Ab4TIAIgBSgCDEGAgIABIAUoAggbNgKUEyACIAUtAEkiBUECRiAFckEBcToAuhMgERDLGCAJIA4QwAcgESAJEIEFIQUgAigCuCQiCCAIKAIAIg1BAWo2AgAgDUEASA0IIAJBqBNqIQ0gAkGYFGoiBiAFIAgQ0AEgBRDCJCACKQOYFEICUQ0CIAkgBkGIBRD2BhogAkHQIWoi8gQQyxggAkGIHGoiBiAOEMAHIAJBADoA2BwgAkECOgCsGSACQbAZaiIFIAYgAkGgGWoQhhMgAkEAOgCEGiDyBCAFEIEFIQYggQIggQIoAgAiBUEBajYCACAFQQBIDQggESAGIIECENABIAYQwiQgAikD4AwiigVCAlIEQCACQe8Mai0AACH0BCACQfcMai0AACH1BCACQf8Mai0AACH2BCACQYcNai0AACH3BCACQY8Nai0AACH4BCACQZcNai0AACH5BCACQZ8Nai0AACH6BCACQacNai0AACH7BCACQa8Nai0AACH8BCACQbcNai0AACH9BCACQb8Nai0AACH+BCACQccNai0AACH/BCACQc8Nai0AACGABSACQdcNai0AACGBBSACQd8Nai0AACGCBSACQecNai0AACGDBSACQe8Nai0AACGEBSACQfcNai0AACGFBSACQf8Nai0AACGGBSACQYcOai0AACGHBSACQY8Oai0AACGIBSACQZcOai0AACGJBSACQZ8Oai0AACHtBCACQacOai0AACFHIAJBrw5qLQAAIUggAkG3DmotAAAhSSACQb8Oai0AACFKIAJBxw5qLQAAIUsgAkHPDmotAAAhTCACQdcOai0AACFNIAJB3w5qLQAAIU4gAkHnDmotAAAhTyACQe8Oai0AACFQIAJB9w5qLQAAIVEgAkH/DmotAAAhUiACQYcPai0AACFTIAJBjw9qLQAAIVQgAkGXD2otAAAhVSACQZ8Pai0AACFWIAJBpw9qLQAAIVcgAkGvD2otAAAhWCACQbcPai0AACFZIAJBvw9qLQAAIVogAkHHD2otAAAhWyACQc8Pai0AACFcIAJB1w9qLQAAIV0gAkHfD2otAAAhXiACQecPai0AACFfIAJB7w9qLQAAIWAgAkH3D2otAAAhYSACQf8Pai0AACFiIAJBhxBqLQAAIWMgAkGPEGotAAAhZCACQZcQai0AACFlIAJBnxBqLQAAIWYgAkGnEGotAAAhZyACQa8Qai0AACFoIAJBtxBqLQAAIWkgAkG/EGotAAAhaiACQccQai0AACFrIAJBzxBqLQAAIWwgAkHXEGotAAAhbSACQd8Qai0AACFuIAJB5xBqLQAAIW8gAkHvEGotAAAhcCACQfcQai0AACFxIAJB/xBqLQAAIXIgAkGHEWotAAAhcyACQY8Rai0AACF0IAJBlxFqLQAAIXUgAkGfEWotAAAhdiACQacRai0AACF3IAJBrxFqLQAAIXggAkG3EWotAAAheSACQb8Rai0AACF6IAJBxxFqLQAAIXsgAkHPEWotAAAhfCACQdcRai0AACF9IAJB3xFqLQAAIX4gAkHnEWotAAAhfyACLQDkESG8AiACKALgESG9AiACLQDcESG+AiACKALYESG/AiACLQDUESHAAiACKALQESHBAiACLQDMESHCAiACKALIESHDAiACLQDEESHEAiACKALAESHFAiACLQC8ESHGAiACKAK4ESHHAiACLQC0ESHIAiACKAKwESHJAiACLQCsESHKAiACKAKoESHLAiACLQCkESHMAiACKAKgESHNAiACLQCcESHOAiACKAKYESHPAiACLQCUESHQAiACKAKQESHRAiACLQCMESHSAiACKAKIESHTAiACLQCEESHUAiACKAKAESHVAiACLQD8ECHWAiACKAL4ECHXAiACLQD0ECHYAiACKALwECHZAiACLQDsECHaAiACKALoECHbAiACLQDkECHcAiACKALgECHdAiACLQDcECHeAiACKALYECHfAiACLQDUECHgAiACKALQECHhAiACLQDMECHiAiACKALIECHjAiACLQDEECHkAiACKALAECHlAiACLQC8ECHmAiACKAK4ECHnAiACLQC0ECHoAiACKAKwECHpAiACLQCsECHqAiACKAKoECHrAiACLQCkECHsAiACKAKgECHtAiACLQCcECHuAiACKAKYECHvAiACLQCUECHwAiACKAKQECHxAiACLQCMECHyAiACKAKIECHzAiACLQCEECH0AiACKAKAECH1AiACLQD8DyH2AiACKAL4DyH3AiACLQD0DyH4AiACKALwDyH5AiACLQDsDyH6AiACKALoDyH7AiACLQDkDyH8AiACKALgDyH9AiACLQDcDyH+AiACKALYDyH/AiACLQDUDyGAAyACKALQDyGBAyACLQDMDyGCAyACKALIDyGDAyACLQDEDyGEAyACKALADyGFAyACLQC8DyGGAyACKAK4DyGHAyACLQC0DyGIAyACKAKwDyGJAyACLQCsDyGKAyACKAKoDyGLAyACLQCkDyGMAyACKAKgDyGNAyACLQCcDyGOAyACKAKYDyGPAyACLQCUDyGQAyACKAKQDyGRAyACLQCMDyGSAyACKAKIDyGTAyACLQCEDyGUAyACKAKADyGVAyACLQD8DiGWAyACKAL4DiGXAyACLQD0DiGYAyACKALwDiGZAyACLQDsDiGaAyACKALoDiGbAyACLQDkDiGcAyACKALgDiGdAyACLQDcDiGeAyACKALYDiGfAyACLQDUDiGgAyACKALQDiGhAyACLQDMDiGiAyACKALIDiGjAyACLQDEDiGkAyACKALADiGlAyACLQC8DiGmAyACKAK4DiGnAyACLQC0DiGoAyACKAKwDiGpAyACLQCsDiGqAyACKAKoDiGrAyACLQCkDiGsAyACKAKgDiGtAyACLQCcDiGuAyACKAKYDiGvAyACLQCUDiGwAyACKAKQDiGxAyACLQCMDiGyAyACKAKIDiGzAyACLQCEDiG0AyACKAKADiG1AyACLQD8DSG2AyACKAL4DSG3AyACLQD0DSG4AyACKALwDSG5AyACLQDsDSG6AyACKALoDSG7AyACLQDkDSG8AyACKALgDSG9AyACLQDcDSG+AyACKALYDSG/AyACLQDUDSHAAyACKALQDSHBAyACLQDMDSHCAyACKALIDSHDAyACLQDEDSHEAyACKALADSHFAyACLQC8DSHGAyACKAK4DSHHAyACLQC0DSHIAyACKAKwDSHJAyACLQCsDSHKAyACKAKoDSHLAyACLQCkDSHMAyACKAKgDSHNAyACLQCcDSHOAyACKAKYDSHPAyACLQCUDSHQAyACKAKQDSHRAyACLQCMDSHSAyACKAKIDSHTAyACLQCEDSHUAyACKAKADSHVAyACLQD8DCHWAyACKAL4DCHXAyACLQD0DCHYAyACKALwDCHZAyACLQDsDCHaAyACKALoDCHbAyACLwDtDCACLwD1DCACLwD9DCACLwCFDSACLwCNDSACLwCVDSACLwCdDSACLwClDSACLwCtDSACLwC1DSACLwC9DSACLwDFDSACLwDNDSACLwDVDSACLwDdDSACLwDlDSACLwDtDSACLwD1DSACLwD9DSACLwCFDiACLwCNDiACLwCVDiACLwCdDiACLwClDiACLwCtDiACLwC1DiACLwC9DiACLwDFDiACLwDNDiACLwDVDiACLwDdDiACLwDlDiACLwDtDiACLwD1DiACLwD9DiACLwCFDyACLwCNDyACLwCVDyACLwCdDyACLwClDyACLwCtDyACLwC1DyACLwC9DyACLwDFDyACLwDNDyACLwDVDyACLwDdDyACLwDlDyACLwDtDyACLwD1DyACLwD9DyACLwCFECACLwCNECACLwCVECACLwCdECACLwClECACLwCtECACLwC1ECACLwC9ECACLwDFECACLwDNECACLwDVECACLwDdECACLwDlECACLwDtECACLwD1ECACLwD9ECACLwCFESACLwCNESACLwCVESACLwCdESACLwClESACLwCtESACLwC1ESACLwC9ESACLwDFESACLwDNESACLwDVESACLwDdESACLwDlESDyBBDLGCACQY8Hai0AACHwBCACQZcHai0AACHxBCACQZ8Hai0AACFCIAJBpwdqLQAAIecBIAJBrwdqLQAAITEgAkG3B2otAAAhhQIgAkG/B2otAAAh7gQgAkHHB2otAAAhEiACQc8Hai0AACEjIAJB1wdqLQAAISwgAkHfB2otAAAhLSACQecHai0AACEvIAJB7wdqLQAAITMgAkH3B2otAAAhOyACQf8Hai0AACFBIAJBhwhqLQAAITwgAkGPCGotAAAhRCACQZcIai0AACFFIAJBnwhqLQAAIc8BIAJBpwhqLQAAIdABIAJBrwhqLQAAIdEBIAJBtwhqLQAAIdIBIAJBvwhqLQAAIdMBIAJBxwhqLQAAIdQBIAJBzwhqLQAAIdUBIAJB1whqLQAAIdYBIAJB3whqLQAAIdcBIAJB5whqLQAAIdgBIAJB7whqLQAAIdkBIAJB9whqLQAAIdoBIAJB/whqLQAAIdsBIAJBhwlqLQAAId0BIAJBjwlqLQAAId4BIAJBlwlqLQAAIeEBIAJBnwlqLQAAIeMBIAJBpwlqLQAAIeABIAJBrwlqLQAAIeQBIAJBtwlqLQAAIeUBIAJBvwlqLQAAIegBIAJBxwlqLQAAIekBIAJBzwlqLQAAIeoBIAJB1wlqLQAAIesBIAJB3wlqLQAAIewBIAJB5wlqLQAAIe0BIAJB7wlqLQAAIe4BIAJB9wlqLQAAIe8BIAJB/wlqLQAAIfABIAJBhwpqLQAAIfEBIAJBjwpqLQAAIfIBIAJBlwpqLQAAIfMBIAJBnwpqLQAAIfQBIAJBpwpqLQAAIfUBIAJBrwpqLQAAIfYBIAJBtwpqLQAAIfcBIAJBvwpqLQAAIfgBIAJBxwpqLQAAIfkBIAJBzwpqLQAAIfoBIAJB1wpqLQAAIfsBIAJB3wpqLQAAIfwBIAJB5wpqLQAAIf0BIAJB7wpqLQAAIf4BIAJB9wpqLQAAIf8BIAJB/wpqLQAAIYACIAJBhwtqLQAAITAgAkGPC2otAAAhggIgAkGXC2otAAAhhgIgAkGfC2otAAAhhwIgAkGnC2otAAAhiAIgAkGvC2otAAAhiQIgAkG3C2otAAAhigIgAkG/C2otAAAhiwIgAkHHC2otAAAhjAIgAkHPC2otAAAhjQIgAkHXC2otAAAhjgIgAkHfC2otAAAhjwIgAi0A3Ash3AMgAigC2Ash3QMgAi0A1Ash3gMgAigC0Ash3wMgAi0AzAsh4AMgAigCyAsh4QMgAi0AxAsh4gMgAigCwAsh4wMgAi0AvAsh5AMgAigCuAsh5QMgAi0AtAsh5gMgAigCsAsh5wMgAi0ArAsh6AMgAigCqAsh6QMgAi0ApAsh6gMgAigCoAsh6wMgAi0AnAsh7AMgAigCmAsh7QMgAi0AlAsh7gMgAigCkAsh7wMgAi0AjAsh8AMgAigCiAsh8QMgAi0AhAsh8gMgAigCgAsh8wMgAi0A/Aoh9AMgAigC+Aoh9QMgAi0A9Aoh9gMgAigC8Aoh9wMgAi0A7Aoh+AMgAigC6Aoh+QMgAi0A5Aoh+gMgAigC4Aoh+wMgAi0A3Aoh/AMgAigC2Aoh/QMgAi0A1Aoh/gMgAigC0Aoh/wMgAi0AzAohgAQgAigCyAohgQQgAi0AxAohggQgAigCwAohgwQgAi0AvAohhAQgAigCuAohhQQgAi0AtAohhgQgAigCsAohhwQgAi0ArAohiAQgAigCqAohiQQgAi0ApAohigQgAigCoAohiwQgAi0AnAohjAQgAigCmAohjQQgAi0AlAohjgQgAigCkAohjwQgAi0AjAohkAQgAigCiAohkQQgAi0AhAohkgQgAigCgAohkwQgAi0A/AkhlAQgAigC+AkhlQQgAi0A9AkhlgQgAigC8AkhlwQgAi0A7AkhmAQgAigC6AkhmQQgAi0A5AkhmgQgAigC4AkhmwQgAi0A3AkhnAQgAigC2AkhnQQgAi0A1AkhngQgAigC0AkhnwQgAi0AzAkhoAQgAigCyAkhoQQgAi0AxAkhogQgAigCwAkhowQgAi0AvAkhpAQgAigCuAkhpQQgAi0AtAkhpgQgAigCsAkhpwQgAi0ArAkhqAQgAigCqAkhqQQgAi0ApAkhqgQgAigCoAkhqwQgAi0AnAkhrAQgAigCmAkhrQQgAi0AlAkhrgQgAigCkAkhrwQgAi0AjAkhsAQgAigCiAkhsQQgAi0AhAkhsgQgAigCgAkhswQgAi0A/AghtAQgAigC+AghtQQgAi0A9AghtgQgAigC8AghtwQgAi0A7AghuAQgAigC6AghuQQgAi0A5AghugQgAigC4AghuwQgAi0A3AghvAQgAigC2AghvQQgAi0A1AghvgQgAigC0AghvwQgAi0AzAghwAQgAigCyAghwQQgAi0AxAghwgQgAigCwAghwwQgAi0AvAghxAQgAigCuAghxQQgAi0AtAghxgQgAigCsAghxwQgAi0ArAghyAQgAigCqAghyQQgAi0ApAghygQgAigCoAghywQgAi0AnAghzAQgAigCmAghzQQgAi0AlAghzgQgAigCkAghzwQgAi0AjAgh0AQgAigCiAgh0QQgAi0AhAgh0gQgAigCgAgh0wQgAi0A/Ach1AQgAigC+Ach1QQgAi0A9Ach1gQgAigC8Ach1wQgAi0A7Ach2AQgAigC6Ach2QQgAi0A5Ach2gQgAigC4Ach2wQgAi0A3Ach3AQgAigC2Ach3QQgAi0A1Ach3gQgAigC0Ach3wQgAi0AzAch4AQgAigCyAch4QQgAi0AxAch4gQgAigCwAch4wQgAi0AvAch5AQgAigCuAch5QQgAi0AtAch5gQgAigCsAch5wQgAi0ArAch6QQgAigCqAch6gQgAi0ApAchRiACKAKgByE5IAItAJwHIeIBIAIoApgHIT8gAi0AlAchECACKAKQByEqIAItAIwHIT4gAigCiAchCiACKAKEByHmASAC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IakCIAIoApAgIaoCIAIoAowgIasCIAIoAoggIawCIAIoAoQgIa0CIAIoAoAgIa4CIAIoAvwfIa8CIAIoAvgfIbACIAIoAvQfIbECIAIoAvAfIbICIAIoAuwfIbMCIAIoAugfIREgAigC5B8htAIgAi0A4B8h5wEgAigC3B8htQIgAi0A2B8htgIgAigC1B8htwIgAi0A0B8huAIgAigCzB8huQIgAi0AyB8hugIgAigCxB8huwIgAi0AwB8hFCACKAK8HyESIAItALgfISMgAigCtB8hGiACLQCwHyEtIAIoAqwfITsgAi0AqB8hQSACKAKkHyFEIAItAKAfIUUgAigCnB8hPCACLQCYHyHdASACKAKUHyHeASACLQCQHyHjASACKAKMHyHgASACLQCIHyHhASACKAKEHyHkASACLQCAHyHlASACKAL8HiEbIAItAPgeIRwgAigC9B4hKCACLQDwHiEuIAIoAuweITIgAi0A6B4hOCACKAKMASE6IAItAIgBIRMgAigChAEhFiACLQCAASE2IAIoAnwhNyACLQB4IRcgAigCdCHfASACLQBsIRkgAigCaCEiIAItAGQhFSACKAJgIUAgAi0AXCEvIAIoAlghICACKAK4JCGFAiACLQBUIf8BIAIoAlAhQyACLQBMISYgAigCSCErIAIoArABIiwoAlgiCC0AIEECcUUNASAILQAcQQFxIIsFQgJRcg0BQagNQQgQkSAiASBCOwDVCyABIOkBOwDNCyABIOoBOwDFCyABIOsBOwC9CyABIOwBOwC1CyABIO0BOwCtCyABIO4BOwClCyABIO8BOwCdCyABIPABOwCVCyABIPEBOwCNCyABIPIBOwCFCyABIPMBOwD9CiABIPQBOwD1CiABIPUBOwDtCiABIPYBOwDlCiABIOgBOwDdCiABIPcBOwDVCiABIPgBOwDNCiABIPkBOwDFCiABIPoBOwC9CiABIPsBOwC1CiABIPwBOwCtCiABIP0BOwClCiABIP4BOwCdCiABIH87AJUKIAEgfjsAjQogASB9OwCFCiABIHw7AP0JIAEgezsA9QkgASB6OwDtCSABIHk7AOUJIAEgeDsA3QkgASB3OwDVCSABIHY7AM0JIAEgdTsAxQkgASB0OwC9CSABIHM7ALUJIAEgcjsArQkgASBxOwClCSABIHA7AJ0JIAEg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3wVqIIgBQRB2OgAAIAFB1wVqIIcBQRB2OgAAIAFBzwVqIIYBQRB2OgAAIAFBxwVqIIUBQRB2OgAAIAFBvwVqIIQBQRB2OgAAIAFBtwVqIIMBQRB2OgAAIAFBrwVqIIIBQRB2OgAAIAFBpwVqIIEBQRB2OgAAIAFBnwVqIIABQRB2OgAAIAFBlwVqQQA6AAAgAUGPBWog3AFBEHY6AAAgAUGHBWoglwFBEHY6AAAgAUH/BGogmAFBEHY6AAAgAUH3BGogmQFBEHY6AAAgAUHvBGogmgFBEHY6AAAgAUHnBGogmwFBEHY6AAAgAUHfBGognAFBEHY6AAAgAUHXBGognQFBEHY6AAAgAUHPBGogngFBEHY6AAAgAUHHBGognwFBEHY6AAAgAUG/BGogoAFBEHY6AAAgAUG3BGogoQFBEHY6AAAgAUGvBGogogFBEHY6AAAgAUGnBGogowFBEHY6AAAgAUGfBGogpAFBEHY6AAAgAUGXBGogpQFBEHY6AAAgAUGPBGogpgFBEHY6AAAgAUGHBGogpwFBEHY6AAAgAUH/A2ogqAFBEHY6AAAgAUH3A2ogqQFBEHY6AAAgAUHvA2ogqgFBEHY6AAAgAUHnA2ogqwFBEHY6AAAgAUHfA2ogrAFBEHY6AAAgAUHXA2ogrQFBEHY6AAAgAUHPA2ogrgFBEHY6AAAgAUHHA2ogrwFBEHY6AAAgAUG/A2ogsAFBEHY6AAAgAUG3A2ogsQFBEHY6AAAgAUGvA2ogsgFBEHY6AAAgAUGnA2ogswFBEHY6AAAgAUGfA2ogtAFBEHY6AAAgAUGXA2ogtQFBEHY6AAAgAUGPA2ogtgFBEHY6AAAgAUGHA2ogtwFBEHY6AAAgAUH/AmoguAFBEHY6AAAgAUH3AmoguQFBEHY6AAAgAUHvAmogugFBEHY6AAAgAUHnAmoguwFBEHY6AAAgAUHfAmogvAFBEHY6AAAgAUHXAmogvQFBEHY6AAAgAUHPAmogvgFBEHY6AAAgAUHHAmogvwFBEHY6AAAgAUG/AmogwAFBEHY6AAAgAUG3AmogwQFBEHY6AAAgAUGvAmogwgFBEHY6AAAgAUGnAmogwwFBEHY6AAAgAUGfAmogxAFBEHY6AAAgAUGXAmogxQFBEHY6AAAgAUGPAmogxgFBEHY6AAAgAUGHAmogxwFBEHY6AAAgAUH/AWog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ATsA/QogASD0ATsA9QogASD1ATsA7QogASD2ATsA5QogASDoATsA3QogASD3ATsA1QogASD4ATsAzQogASD5ATsAxQogASD6ATsAvQogASD7ATsAtQogASD8ATsArQogASD9ATsApQogASD+ATsAnQogASB/OwCVCiABIH47AI0KIAEgfTsAhQogASB8OwD9CSABIHs7APUJIAEgejsA7QkgASB5OwDlCSABIHg7AN0JIAEgdzsA1QkgASB2OwDNCSABIHU7AMUJIAEgdDsAvQkgASBzOwC1CSABIHI7AK0JIAEgcTsApQkgASBwOwCdCSABIG87AJUJIAEgbjsAjQkgASBtOwCFCSABIGw7AP0IIAEgazsA9QggASBqOwDtCCABIGk7AOUIIAEgaDsA3QggASBnOwDVCCABIGY7AM0IIAEgZTsAxQggASBkOwC9CCABIGM7ALUIIAEgYjsArQggASBhOwClCCABIGA7AJ0IIAEgXzsAlQggASBeOwCNCCABIF07AIUIIAEgXDsA/QcgASBbOwD1ByABIFo7AO0HIAEgWTsA5QcgASBYOwDdByABIFc7ANUHIAEgVjsAzQcgASBVOwDFByABIFQ7AL0HIAEgUzsAtQcgASBSOwCtByABIFE7AKUHIAEgUDsAnQcgASBPOwCVByABIE47AI0HIAEgTTsAhQcgASBMOwD9BiABIEs7APUGIAEgSjsA7QYgASBJOwDlBiABIEg7AN0GIAEgRzsA1QYgASCWATsAzQYgASCVATsAxQYgASCUATsAvQYgASCTATsAtQYgASCSATsArQYgASCRATsApQYgASCQATsAnQYgASCPATsAlQYgASCOATsAjQYgASCNATsAhQYgASCMATsA/QUgASCLATsA9QUgASCKATsA7QUgASCJATsA5QUgASCIATsA3QUgASCHATsA1QUgASCGATsAzQUgASCFATsAxQUgASCEATsAvQUgASCDATsAtQUgASCCATsArQUgASCBATsApQUgASCAATsAnQUgAUEAOwCVBSABINwBOwCNBSABIJcBOwCFBSABIJgBOwD9BCABIJkBOwD1BCABIJoBOwDtBCABIJsBOwDlBCABIJwBOwDdBCABIJ0BOwDVBCABIJ4BOwDNBCABIJ8BOwDFBCABIKABOwC9BCABIKEBOwC1BCABIKIBOwCtBCABIKMBOwClBCABIKQBOwCdBCABIKUBOwCVBCABIKYBOwCNBCABIKcBOwCFBCABIKgBOwD9AyABIKkBOwD1AyABIKoBOwDtAyABIKsBOwDlAyABIKwBOwDdAyABIK0BOwDVAyABIK4BOwDNAyABIK8BOwDFAyABILABOwC9AyABILEBOwC1AyABILIBOwCtAyABILMBOwClAyABILQBOwCdAyABILUBOwCVAyABILYBOwCNAyABILcBOwCFAyABILgBOwD9AiABILkBOwD1AiABILoBOwDtAiABILsBOwDlAiABILwBOwDdAiABIL0BOwDVAiABIL4BOwDNAiABIL8BOwDFAiABIMABOwC9AiABIMEBOwC1AiABIMIBOwCtAiABIMMBOwClAiABIMQBOwCdAiABIMUBOwCVAiABIMYBOwCNAiABIMcBOwCFAiABIMgBOwD9ASABIMkBOwD1ASABIMoBOwDtASABIMsBOwDlASABIMwBOwDdASABIM0BOwDVASABIM4BOwDNASABIM8BOwDFASABINsBOwC9ASABINoBOwC1ASABINkBOwCtASABINgBOwClASABINcBOwCdASABINYBOwCVASABINUBOwCNASABINQBOwCFASABINMBOwB9IAEg0gE7AHUgASDRATsAbSABINABOwBlIAEggAI7AF0gASAPOwBVIAEgDTsATSABIAU7AEUgASCKBTcDsA0gASALOgCsDSABIAg2AqgNIAFBADYCpA0gASCBAjYCoA0gASCFAjYCnA0gASAsNgKYDSABIIYCNgCUDSABIIcCNgCQDSABIIgCNgCMDSABIIkCNgCIDSABIIoCNgCEDSABIIsCNgCADSABIIwCNgD8DCABII0CNgD4DCABII4CNgD0DCABII8CNgDwDCABIJACNgDsDCABIJECNgDoDCABIJICNgDkDCABIJMCNgDgDCABIJQCNgDcDCABIJUCNgDYDCABIJYCNgDUDCABIJcCNgDQDCABIJgCNgDMDCABIJkCNgDIDCABIJoCNgDEDCABIJsCNgDADCABIJwCNgC8DCABIJ0CNgC4DCABIJ4CNgC0DCABIJ8CNgCwDCABIKACNgCsDCABIKECNgCoDCABIKICNgCkDCABIKMCNgCgDCABIKQCNgCcDCABIKUCNgCYDCABIKYCNgCUDCABIKcCNgCQDCABIKgCNgCMDCABIKkCNgCIDCABIKoCNgCEDCABIKsCNgCADCABIKwCNgD8CyABIK0CNgD4CyABIK4CNgD0CyABIK8CNgDwCyABILACNgDsCyABILECNgDoCyABILICNgDkCyABILMCNgDgCyABIBE6ANwLIAEgtAI2ANgLIAEg5wE6ANQLIAEgtQI2ANALIAEgtgI6AMwLIAEgtwI2AMgLIAEguAI6AMQLIAEguQI2AMALIAEgugI6ALwLIAEguwI2ALgLIAEgFDoAtAsgASASNgCwCyABICM6AKwLIAEgGjYAqAsgASAtOgCkCyABIDs2AKALIAEgQToAnAsgASBENgCYCyABIEU6AJQLIAEgPDYAkAsgASDdAToAjAsgASDeATYAiAsgASDjAToAhAsgASDgATYAgAsgASDhAToA/AogASDkATYA+AogASDlAToA9AogASAbNgDwCiABIBw6AOwKIAEgKDYA6AogASAuOgDkCiABIDI2AOAKIAEgODoA3AogASA6NgDYCiABIBM6ANQKIAEgFjYA0AogASA2OgDMCiABIDc2AMgKIAEgFzoAxAogASDfATYAwAogASAZOgC8CiABICI2ALgKIAEgFToAtAogASBANgCwCiABIC86AKwKIAEgIDYAqAogASD/AToApAogASBDNgKgCiABICY6AJwKIAEgKzYCmAogASC8AjoAlAogASC9AjYCkAogASC+AjoAjAogASC/AjYCiAogASDAAjoAhAogASDBAjYCgAogASDCAjoA/AkgASDDAjYC+AkgASDEAjoA9AkgASDFAjYC8AkgASDGAjoA7AkgASDHAjYC6AkgASDIAjoA5AkgASDJAjYC4AkgASDKAjoA3AkgASDLAjYC2AkgASDMAjoA1AkgASDNAjYC0AkgASDOAjoAzAkgASDPAjYCyAkgASDQAjoAxAkgASDRAjYCwAkgASDSAjoAvAkgASDTAjYCuAkgASDUAjoAtAkgASDVAjYCsAkgASDWAjoArAkgASDXAjYCqAkgASDYAjoApAkgASDZAjYCoAkgASDaAjoAnAkgASDbAjYCmAkgASDcAjoAlAkgASDdAjYCkAkgASDeAjoAjAkgASDfAjYCiAkgASDgAjoAhAkgASDhAjYCgAkgASDiAjoA/AggASDjAjYC+AggASDkAjoA9AggASDlAjYC8AggASDmAjoA7AggASDnAjYC6AggASDoAjoA5AggASDpAjYC4AggASDqAjoA3AggASDrAjYC2AggASDsAjoA1AggASDtAjYC0AggASDuAjoAzAggASDvAjYCyAggASDwAjoAxAggASDxAjYCwAggASDyAjoAvAggASDzAjYCuAggASD0AjoAtAggASD1AjYCsAggASD2AjoArAggASD3AjYCqAggASD4AjoApAggASD5AjYCoAggASD6AjoAnAggASD7AjYCmAggASD8AjoAlAggASD9AjYCkAggASD+AjoAjAggASD/AjYCiAggASCAAzoAhAggASCBAzYCgAggASCCAzoA/AcgASCDAzYC+AcgASCEAzoA9AcgASCFAzYC8AcgASCGAzoA7AcgASCHAzYC6AcgASCIAzoA5AcgASCJAzYC4AcgASCKAzoA3AcgASCLAzYC2AcgASCMAzoA1AcgASCNAzYC0AcgASCOAzoAzAcgASCPAzYCyAcgASCQAzoAxAcgASCRAzYCwAcgASCSAzoAvAcgASCTAzYCuAcgASCUAzoAtAcgASCVAzYCsAcgASCWAzoArAcgASCXAzYCqAcgASCYAzoApAcgASCZAzYCoAcgASCaAzoAnAcgASCbAzYCmAcgASCcAzoAlAcgASCdAzYCkAcgASCeAzoAjAcgASCfAzYCiAcgASCgAzoAhAcgASChAzYCgAcgASCiAzoA/AYgASCjAzYC+AYgASCkAzoA9AYgASClAzYC8AYgASCmAzoA7AYgASCnAzYC6AYgASCoAzoA5AYgASCpAzYC4AYgASCqAzoA3AYgASCrAzYC2AYgASCsAzoA1AYgASCtAzYC0AYgASCuAzoAzAYgASCvAzYCyAYgASCwAzoAxAYgASCxAzYCwAYgASCyAzoAvAYgASCzAzYCuAYgASC0AzoAtAYgASC1AzYCsAYgASC2AzoArAYgASC3AzYCqAYgASC4AzoApAYgASC5AzYCoAYgASC6AzoAnAYgASC7AzYCmAYgASC8AzoAlAYgASC9AzYCkAYgASC+AzoAjAYgASC/AzYCiAYgASDAAzoAhAYgASDBAzYCgAYgASDCAzoA/AUgASDDAzYC+AUgASDEAzoA9AUgASDFAzYC8AUgASDGAzoA7AUgASDHAzYC6AUgASDIAzoA5AUgASDJAzYC4AUgASDKAzoA3AUgASDLAzYC2AUgASDMAzoA1AUgASDNAzYC0AUgASDOAzoAzAUgASDPAzYCyAUgASDQAzoAxAUgASDRAzYCwAUgASDSAzoAvAUgASDTAzYCuAUgASDUAzoAtAUgASDVAzYCsAUgASDWAzoArAUgASDXAzYCqAUgASDYAzoApAUgASDZAzYCoAUgASDaAzoAnAUgASDbAzYCmAUgAUEAOgCUBSABIIICNgKQBSABINwDOgCMBSABIN0DNgKIBSABIN4DOgCEBSABIN8DNgKABSABIOADOgD8BCABIOEDNgL4BCABIOIDOgD0BCABIOMDNgLwBCABIOQDOgDsBCABIOUDNgLoBCABIOYDOgDkBCABIOcDNgLgBCABIOgDOgDcBCABIOkDNgLYBCABIOoDOgDUBCABIOsDNgLQBCABIOwDOgDMBCABIO0DNgLIBCABIO4DOgDEBCABIO8DNgLABCABIPADOgC8BCABIPEDNgK4BCABIPIDOgC0BCABIPMDNgKwBCABIPQDOgCsBCABIPUDNgKoBCABIPYDOgCkBCABIPcDNgKgBCABIPgDOgCcBCABIPkDNgKYBCABIPoDOgCUBCABIPsDNgKQBCABIPwDOgCMBCABIP0DNgKIBCABIP4DOgCEBCABIP8DNgKABCABIIAEOgD8AyABIIEENgL4AyABIIIEOgD0AyABIIMENgLwAyABIIQEOgDsAyABIIUENgLoAyABIIYEOgDkAyABIIcENgLgAyABIIgEOgDcAyABIIkENgLYAyABIIoEOgDUAyABIIsENgLQAyABIIwEOgDMAyABII0ENgLIAyABII4EOgDEAyABII8ENgLAAyABIJAEOgC8AyABIJEENgK4AyABIJIEOgC0AyABIJMENgKwAyABIJQEOgCsAyABIJUENgKoAyABIJYEOgCkAyABIJcENgKgAyABIJgEOgCcAyABIJkENgKYAyABIJoEOgCUAyABIJsENgKQAyABIJwEOgCMAyABIJ0ENgKIAyABIJ4EOgCEAyABIJ8ENgKAAyABIKAEOgD8AiABIKEENgL4AiABIKIEOgD0AiABIKMENgLwAiABIKQEOgDsAiABIKUENgLoAiABIKYEOgDkAiABIKcENgLgAiABIKgEOgDcAiABIKkENgLYAiABIKoEOgDUAiABIKsENgLQAiABIKwEOgDMAiABIK0ENgLIAiABIK4EOgDEAiABIK8ENgLAAiABILAEOgC8AiABILEENgK4AiABILIEOgC0AiABILMENgKwAiABILQEOgCsAiABILUENgKoAiABILYEOgCkAiABILcENgKgAiABILgEOgCcAiABILkENgKYAiABILoEOgCUAiABILsENgKQAiABILwEOgCMAiABIL0ENgKIAiABIL4EOgCEAiABIL8ENgKAAiABIMAEOgD8ASABIMEENgL4ASABIMIEOgD0ASABIMMENgLwASABIMQEOgDsASABIMUENgLoASABIMYEOgDkASABIMcENgLgASABIMgEOgDcASABIMkENgLYASABIMoEOgDUASABIMsENgLQASABIMwEOgDMASABIM0ENgLIASABIM4EOgDEASABIM8ENgLAASABINAEOgC8ASABINEENgK4ASABINIEOgC0ASABINMENgKwASABINQEOgCsASABINUENgKoASABINYEOgCkASABINcENgKgASABINgEOgCcASABINkENgKYASABINoEOgCUASABINsENgKQASABINwEOgCMASABIN0ENgKIASABIN4EOgCEASABIN8ENgKAASABIOAEOgB8IAEg4QQ2AnggASDiBDoAdCABIOMENgJwIAEg5AQ6AGwgASDlBDYCaCABIOYEOgBkIAEg5wQ2AmAgASDpBDoAXCABIOoENgJYIAEgRjoAVCABIDk2AlAgASDiAToATCABID82AkggASAQOgBEIAEgKjYCQCABIO4ENgI8IAEgCjYCOCABIOYBNgI0IAEgNTYCMCABIB02AiwgASA0NgIoIAEgBzYCJCABICc2AiAgASAMNgIcIAEgBDYCGCABID2tIIQCrUIghoQ3AxAgASCLBTcDCCABQQE2AgQgAUEBNgIAIAFBrw1qIA46AAAgAUHfC2og8ARBEHY6AAAgAUHXC2ogQkEQdjoAACABQc8LaiDpAUEQdjoAACABQccLaiDqAUEQdjoAACABQb8LaiDrAUEQdjoAACABQbcLaiDsAUEQdjoAACABQa8LaiDtAUEQdjoAACABQacLaiDuAUEQdjoAACABQZ8LaiDvAUEQdjoAACABQZcLaiDwAUEQdjoAACABQY8LaiDxAUEQdjoAACABQYcLaiDyAUEQdjoAACAB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OgAAIARBhwNqILcBQRB2OgAAIARB/wJqILgBQRB2OgAAIARB9wJqILkBQRB2OgAAIARB7wJqILoBQRB2OgAAIARB5wJqILsBQRB2OgAAIARB3wJqILwBQRB2OgAAIARB1wJqIL0BQRB2OgAAIARBzwJqIL4BQRB2OgAAIARBxwJqIL8BQRB2OgAAIARBvwJqIMABQRB2OgAAIARBtwJqIMEBQRB2OgAAIARBrwJqIMIBQRB2OgAAIARBpwJqIMMBQRB2OgAAIARBnwJqIMQBQRB2OgAAIARBlwJqIMUBQRB2OgAAIARBjwJqIMYBQRB2OgAAIARBhwJqIMcBQRB2OgAAIARB/wFqIMgBQRB2OgAAIARB9wFqIMkBQRB2OgAAIARB7wFqIMoBQRB2OgAAIARB5wFqIMsBQRB2OgAAIARB3wFqIMwBQRB2OgAAIARB1wFqIM0BQRB2OgAAIARBzwFqIM4BQRB2OgAAIARBxwFqIM8BQRB2OgAAIARBvwFqINsBQRB2OgAAIARBtwFqINoBQRB2OgAAIARBrwFqINkBQRB2OgAAIARBpwFqINgBQRB2OgAAIARBnwFqINcBQRB2OgAAIARBlwFqINYBQRB2OgAAIARBjwFqINUBQRB2OgAAIARBhwFqINQBQRB2OgAAIARB/wBqINMBQRB2OgAAIARB9wBqINIBQRB2OgAAIARB7wBqINEBQRB2OgAAIARB5wBqINABQRB2OgAAIARB3wBqIAFBEHY6AAAgBEHXAGogD0EQdjoAACAEQc8AaiANQRB2OgAAIARBxwBqIAVBEHY6AAAgBEE/aiAJQRB2OgAAIAQg5gFB/wFxIAtBCHRyNgI0ICRBuPzCADYCCCAkIAQ2AgQgJEECNgIAIAJBOGoQvCQMBAtByBJBCBCRICIBQQA7AK0NIAEgQjsA1QsgASDpATsAzQsgASDqATsAxQsgASDrATsAvQsgASDsATsAtQsgASDtATsArQsgASDuATsApQsgASDvATsAnQsgASDwATsAlQsgASDxATsAjQsgASDyATsAhQsgASDzATsA/QogASD0ATsA9QogASD1ATsA7QogASD2ATsA5QogASDoATsA3QogASD3ATsA1QogASD4ATsAzQogASD5ATsAxQogASD6ATsAvQogASD7ATsAtQogASD8ATsArQogASD9ATsApQogASD+ATsAnQogASB/OwCVCiABIH47AI0KIAEgfTsAhQogASB8OwD9CSABIHs7APUJIAEgejsA7QkgASB5OwDlCSABIHg7AN0JIAEgdzsA1QkgASB2OwDNCSABIHU7AMUJIAEgdDsAvQkgASBzOwC1CSABIHI7AK0JIAEgcTsApQkgASBwOwCdCSABIG87AJUJIAEgbjsAjQkgASBtOwCFCSABIGw7AP0IIAEgazsA9QggASBqOwDtCCABIGk7AOUIIAEgaDsA3QggASBnOwDVCCABIGY7AM0IIAEgZTsAxQggASBkOwC9CCABIGM7ALUIIAEgYjsArQggASBhOwClCCABIGA7AJ0IIAEgXzsAlQggASBeOwCNCCABIF07AIUIIAEgXDsA/QcgASBbOwD1ByABIFo7AO0HIAEgWTsA5QcgASBYOwDdByABIFc7ANUHIAEgVjsAzQcgASBVOwDFByABIFQ7AL0HIAEgUzsAtQcgASBSOwCtByABIFE7AKUHIAEgUDsAnQcgASBPOwCVByABIE47AI0HIAEgTTsAhQcgASBMOwD9BiABIEs7APUGIAEgSjsA7QYgASBJOwDlBiABIEg7AN0GIAEgRzsA1QYgASCWATsAzQYgASCVATsAxQYgASCUATsAvQYgASCTATsAtQYgASCSATsArQYgASCRATsApQYgASCQATsAnQYgASCPATsAlQYgASCOATsAjQYgASCNATsAhQYgASCMATsA/QUgASCLATsA9QUgASCKATsA7QUgASCJATsA5QUgASCIATsA3QUgASCHATsA1QUgASCGATsAzQUgASCFATsAxQUgASCEATsAvQUgASCDATsAtQUgASCCATsArQUgASCBATsApQUgASCAATsAnQUgAUEAOwCVBSABINwBOwCNBSABIJcBOwCFBSABIJgBOwD9BCABIJkBOwD1BCABIJoBOwDtBCABIJsBOwDlBCABIJwBOwDdBCABIJ0BOwDVBCABIJ4BOwDNBCABIJ8BOwDFBCABIKABOwC9BCABIKEBOwC1BCABIKIBOwCtBCABIKMBOwClBCABIKQBOwCdBCABIKUBOwCVBCABIKYBOwCNBCABIKcBOwCFBCABIKgBOwD9AyABIKkBOwD1AyABIKoBOwDtAyABIKsBOwDlAyABIKwBOwDdAyABIK0BOwDVAyABIK4BOwDNAyABIK8BOwDFAyABILABOwC9AyABILEBOwC1AyABILIBOwCtAyABILMBOwClAyABILQBOwCdAyABILUBOwCVAyABILYBOwCNAyABILcBOwCFAyABILgBOwD9AiABILkBOwD1AiABILoBOwDtAiABILsBOwDlAiABILwBOwDdAiABIL0BOwDVAiABIL4BOwDNAiABIL8BOwDFAiABIMABOwC9AiABIMEBOwC1AiABIMIBOwCtAiABIMMBOwClAiABIMQBOwCdAiABIMUBOwCVAiABIMYBOwCNAiABIMcBOwCFAiABIMgBOwD9ASABIMkBOwD1ASABIMoBOwDtASABIMsBOwDlASABIMwBOwDdASABIM0BOwDVASABIM4BOwDNASABIM8BOwDFASABINsBOwC9ASABINoBOwC1ASABINkBOwCtASABINgBOwClASABINcBOwCdASABINYBOwCVASABINUBOwCNASABINQBOwCFASABINMBOwB9IAEg0gE7AHUgASDRATsAbSABINABOwBlIAEggAI7AF0gASAPOwBVIAEgDTsATSABIAU7AEUgAUEAOgCsDSABIAg2AqgNIAFBADYCpA0gASCBAjYCoA0gASCFAjYCnA0gASAsNgKYDSABIIYCNgKUDSABIIcCNgKQDSABIIgCNgKMDSABIIkCNgKIDSABIIoCNgKEDSABIIsCNgKADSABIIwCNgL8DCABII0CNgL4DCABII4CNgL0DCABII8CNgLwDCABIJACNgLsDCABIJECNgLoDCABIJICNgLkDCABIJMCNgLgDCABIJQCNgLcDCABIJUCNgLYDCABIJYCNgLUDCABIJcCNgLQDCABIJgCNgLMDCABIJkCNgLIDCABIJoCNgLEDCABIJsCNgLADCABIJwCNgK8DCABIJ0CNgK4DCABIJ4CNgK0DCABIJ8CNgKwDCABIKACNgKsDCABIKECNgKoDCABIKICNgKkDCABIKMCNgKgDCABIKQCNgKcDCABIKUCNgKYDCABIKYCNgKUDCABIKcCNgKQDCABIKgCNgKMDCABIKkCNgKIDCABIKoCNgKEDCABIKsCNgKADCABIKwCNgL8CyABIK0CNgL4CyABIK4CNgL0CyABIK8CNgLwCyABILACNgLsCyABILECNgLoCyABILICNgLkCyABILMCNgLgCyABIBE2AtwLIAEgtAI2AtgLIAEg5wE6ANQLIAEgtQI2AtALIAEgtgI6AMwLIAEgtwI2AsgLIAEguAI6AMQLIAEguQI2AsALIAEgugI6ALwLIAEguwI2ArgLIAEgFDoAtAsgASASNgKwCyABICM6AKwLIAEgGjYCqAsgASAtOgCkCyABIDs2AqALIAEgQToAnAsgASBENgKYCyABIEU6AJQLIAEgPDYCkAsgASDdAToAjAsgASDeATYCiAsgASDjAToAhAsgASDgATYCgAsgASDhAToA/AogASDkATYC+AogASDlAToA9AogASAbNgLwCiABIBw6AOwKIAEgKDYC6AogASAuOgDkCiABIDI2AuAKIAEgODoA3AogASA6NgLYCiABIBM6ANQKIAEgFjYC0AogASA2OgDMCiABIDc2AsgKIAEgFzoAxAogASDfATYCwAogASAZOgC8CiABICI2ArgKIAEgFToAtAogASBANgKwCiABIC86AKwKIAEgIDYCqAogASD/AToApAogASBDNgKgCiABICY6AJwKIAEgKzYCmAogASC8AjoAlAogASC9AjYCkAogASC+AjoAjAogASC/AjYCiAogASDAAjoAhAogASDBAjYCgAogASDCAjoA/AkgASDDAjYC+AkgASDEAjoA9AkgASDFAjYC8AkgASDGAjoA7AkgASDHAjYC6AkgASDIAjoA5AkgASDJAjYC4AkgASDKAjoA3AkgASDLAjYC2AkgASDMAjoA1AkgASDNAjYC0AkgASDOAjoAzAkgASDPAjYCyAkgASDQAjoAxAkgASDRAjYCwAkgASDSAjoAvAkgASDTAjYCuAkgASDUAjoAtAkgASDVAjYCsAkgASDWAjoArAkgASDXAjYCqAkgASDYAjoApAkgASDZAjYCoAkgASDaAjoAnAkgASDbAjYCmAkgASDcAjoAlAkgASDdAjYCkAkgASDeAjoAjAkgASDfAjYCiAkgASDgAjoAhAkgASDhAjYCgAkgASDiAjoA/AggASDjAjYC+AggASDkAjoA9AggASDlAjYC8AggASDmAjoA7AggASDnAjYC6AggASDoAjoA5AggASDpAjYC4AggASDqAjoA3AggASDrAjYC2AggASDsAjoA1AggASDtAjYC0AggASDuAjoAzAggASDvAjYCyAggASDwAjoAxAggASDxAjYCwAggASDyAjoAvAggASDzAjYCuAggASD0AjoAtAggASD1AjYCsAggASD2AjoArAggASD3AjYCqAggASD4AjoApAggASD5AjYCoAggASD6AjoAnAggASD7AjYCmAggASD8AjoAlAggASD9AjYCkAggASD+AjoAjAggASD/AjYCiAggASCAAzoAhAggASCBAzYCgAggASCCAzoA/AcgASCDAzYC+AcgASCEAzoA9AcgASCFAzYC8AcgASCGAzoA7AcgASCHAzYC6AcgASCIAzoA5AcgASCJAzYC4AcgASCKAzoA3AcgASCLAzYC2AcgASCMAzoA1AcgASCNAzYC0AcgASCOAzoAzAcgASCPAzYCyAcgASCQAzoAxAcgASCRAzYCwAcgASCSAzoAvAcgASCTAzYCuAcgASCUAzoAtAcgASCVAzYCsAcgASCWAzoArAcgASCXAzYCqAcgASCYAzoApAcgASCZAzYCoAcgASCaAzoAnAcgASCbAzYCmAcgASCcAzoAlAcgASCdAzYCkAcgASCeAzoAjAcgASCfAzYCiAcgASCgAzoAhAcgASChAzYCgAcgASCiAzoA/AYgASCjAzYC+AYgASCkAzoA9AYgASClAzYC8AYgASCmAzoA7AYgASCnAzYC6AYgASCoAzoA5AYgASCpAzYC4AYgASCqAzoA3AYgASCrAzYC2AYgASCsAzoA1AYgASCtAzYC0AYgASCuAzoAzAYgASCvAzYCyAYgASCwAzoAxAYgASCxAzYCwAYgASCyAzoAvAYgASCzAzYCuAYgASC0AzoAtAYgASC1AzYCsAYgASC2AzoArAYgASC3AzYCqAYgASC4AzoApAYgASC5AzYCoAYgASC6AzoAnAYgASC7AzYCmAYgASC8AzoAlAYgASC9AzYCkAYgASC+AzoAjAYgASC/AzYCiAYgASDAAzoAhAYgASDBAzYCgAYgASDCAzoA/AUgASDDAzYC+AUgASDEAzoA9AUgASDFAzYC8AUgASDGAzoA7AUgASDHAzYC6AUgASDIAzoA5AUgASDJAzYC4AUgASDKAzoA3AUgASDLAzYC2AUgASDMAzoA1AUgASDNAzYC0AUgASDOAzoAzAUgASDPAzYCyAUgASDQAzoAxAUgASDRAzYCwAUgASDSAzoAvAUgASDTAzYCuAUgASDUAzoAtAUgASDVAzYCsAUgASDWAzoArAUgASDXAzYCqAUgASDYAzoApAUgASDZAzYCoAUgASDaAzoAnAUgASDbAzYCmAUgAUEAOgCUBSABIIICNgKQBSABINwDOgCMBSABIN0DNgKIBSABIN4DOgCEBSABIN8DNgKABSABIOADOgD8BCABIOEDNgL4BCABIOIDOgD0BCABIOMDNgLwBCABIOQDOgDsBCABIOUDNgLoBCABIOYDOgDkBCABIOcDNgLgBCABIOgDOgDcBCABIOkDNgLYBCABIOoDOgDUBCABIOsDNgLQBCABIOwDOgDMBCABIO0DNgLIBCABIO4DOgDEBCABIO8DNgLABCABIPADOgC8BCABIPEDNgK4BCABIPIDOgC0BCABIPMDNgKwBCABIPQDOgCsBCABIPUDNgKoBCABIPYDOgCkBCABIPcDNgKgBCABIPgDOgCcBCABIPkDNgKYBCABIPoDOgCUBCABIPsDNgKQBCABIPwDOgCMBCABIP0DNgKIBCABIP4DOgCEBCABIP8DNgKABCABIIAEOgD8AyABIIEENgL4AyABIIIEOgD0AyABIIMENgLwAyABIIQEOgDsAyABIIUENgLoAyABIIYEOgDkAyABIIcENgLgAyABIIgEOgDcAyABIIkENgLYAyABIIoEOgDUAyABIIsENgLQAyABIIwEOgDMAyABII0ENgLIAyABII4EOgDEAyABII8ENgLAAyABIJAEOgC8AyABIJEENgK4AyABIJIEOgC0AyABIJMENgKwAyABIJQEOgCsAyABIJUENgKoAyABIJYEOgCkAyABIJcENgKgAyABIJgEOgCcAyABIJkENgKYAyABIJoEOgCUAyABIJsENgKQAyABIJwEOgCMAyABIJ0ENgKIAyABIJ4EOgCEAyABIJ8ENgKAAyABIKAEOgD8AiABIKEENgL4AiABIKIEOgD0AiABIKMENgLwAiABIKQEOgDsAiABIKUENgLoAiABIKYEOgDkAiABIKcENgLgAiABIKgEOgDcAiABIKkENgLYAiABIKoEOgDUAiABIKsENgLQAiABIKwEOgDMAiABIK0ENgLIAiABIK4EOgDEAiABIK8ENgLAAiABILAEOgC8AiABILEENgK4AiABILIEOgC0AiABILMENgKwAiABILQEOgCsAiABILUENgKoAiABILYEOgCkAiABILcENgKgAiABILgEOgCcAiABILkENgKYAiABILoEOgCUAiABILsENgKQAiABILwEOgCMAiABIL0ENgKIAiABIL4EOgCEAiABIL8ENgKAAiABIMAEOgD8ASABIMEENgL4ASABIMIEOgD0ASABIMMENgLwASABIMQEOgDsASABIMUENgLoASABIMYEOgDkASABIMcENgLgASABIMgEOgDcASABIMkENgLYASABIMoEOgDUASABIMsENgLQASABIMwEOgDMASABIM0ENgLIASABIM4EOgDEASABIM8ENgLAASABINAEOgC8ASABINEENgK4ASABINIEOgC0ASABINMENgKwASABINQEOgCsASABINUENgKoASABINYEOgCkASABINcENgKgASABINgEOgCcASABINkENgKYASABINoEOgCUASABINsENgKQASABINwEOgCMASABIN0ENgKIASABIN4EOgCEASABIN8ENgKAASABIOAEOgB8IAEg4QQ2AnggASDiBDoAdCABIOMENgJwIAEg5AQ6AGwgASDlBDYCaCABIOYEOgBkIAEg5wQ2AmAgASDpBDoAXCABIOoENgJYIAEgRjoAVCABIDk2AlAgASDiAToATCABID82AkggASAQOgBEIAEgKjYCQCABIAo2AjggASDmATYCNCABIDU2AjAgASAdNgIsIAEgNDYCKCABIAc2AiQgASAnNgIgIAEgDDYCHCABIAQ2AhggASCKBTcDECABII0FNwMIIAFBATYCBCABQQE2AgAgAUGvDWpBADoAACABQdcLaiBCQRB2OgAAIAFBzwtqIOkBQRB2OgAAIAFBxwtqIOoBQRB2OgAAIAFBvwtqIOsBQRB2OgAAIAFBtwtqIOwBQRB2OgAAIAFBrwtqIO0BQRB2OgAAIAFBpwtqIO4BQRB2OgAAIAFBnwtqIO8BQRB2OgAAIAFBlwtqIPABQRB2OgAAIAFBjwtqIPEBQRB2OgAAIAFBhwtqIPIBQRB2OgAAIAFB/wpqIPMBQRB2OgAAIAFB9wpqIPQBQRB2OgAAIAFB7wpqIPUBQRB2OgAAIAFB5wpqIPYBQRB2OgAAIAFB3wpqIOgBQRB2OgAAIAFB1wpqIPcBQRB2OgAAIAFBzwpqIPgBQRB2OgAAIAFBxwpqIPkBQRB2OgAAIAFBvwpqIPoBQRB2OgAAIAFBtwpqIPsB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QX9GBEBBACEYDAELIBJBBGooAgAiBUEERw0BCyADIBg2ApwDIAMoApQKIgYoAgAiB0H/////B08NASAGIAdBAWo2AgAgAyAGKAIMIgU2AuAKAkAgBUEBRgRAIAYgBzYCACADQagEaiAGEJIMIAMoAqgEQRBHDQFB+LnEABDCKQALIANBADYCqAQgA0HgCmpB1JrYACADQagEakGIusQAEMUaAAsgA0GQBGogA0HABGooAgA2AgAgA0GIBGogA0G4BGopAgA3AwAgA0GABGogDCkCADcDACADIAMpAqgENwP4AyAeIANB+ANqEJIKQYCAgIB4IQVBAQwGCyASKAIAIQsgBCASQQhqKQIANwIAIARBCGogEkEQaigCADYCACADIAU2ArAKIANB+ANqIANBsApqEMwLIAMoAvgDQQRHBEAgA0HICmogA0GABGoiBSkCADcDACADIBg2ApwDIAMgAykC+AMijAU3A8AKIIwFp0EDRw0HIANBDzYCqAQgAygClAogA0GoBGoQkRgMBwsgA0GoBGogA0GUCmogCygCACALQQRqKAIAEEIgAygCqAQiBUGAgICAeEYNASADIBg2ApwDIB4gIUEkEPYGGgwEC0HoucQAEOEUAAsgEkEUayESIBhBAWshGAwACwALIB4gIUEkEPYGGgtBAAsgA0GUA2oQ4B8gAygC/AEhEgRAIAMoApQCIQggAygCkAIhByADKAKMAiEQIAMoAogCIQsgAygChAIhBiADKAKAAiEFIANB+AJqEKkMIAMoAvQBIg4gAygC7AFGBEAgA0HsAWoQ5hYLIAMoAvABIA5BHGxqIg8gCDYCGCAPIAc2AhQgDyAQNgIQIA8gCzYCDCAPIAY2AgggDyAFNgIEIA8gEjYCACADIA5BAWo2AvQBDAMLIANB+ABqIANB8AJqKQIANwMAIAMgAykC6AI3A3AgAygCnAIhKSADKQKUAiGMBSADKQKMAiGOBSADKAKIAiEGIAMoAoQCIRggAygCgAIhIyADQfgCahCpDEEiIQcMBgsgA0HACmoQoBshBiAhIAMpAvgDNwIAICFBCGogBSkCADcCACADIAs2AqgEIANBlANqIANBqARqENcSDAALAAsACyADKAJYIQ0gAyADLQDWAToA3wIgAyADLQDUASIHOgDeAiADIAMtANUBOgDdAiADIAMoAtABNgLY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NgL8ASADQcS61gA2AvgBIANCATcChAIgA0HnADYC5AogAyAGNgLgCiADIAU2AoACIA1B9PbCACAIEJskDQAgAygC+AMgAygC/AMQvikMCgsgAygC+AMgAygC/AMQvikMCwsgA0GwCmpB/gBBzwAQqBAgA0EANgKIAiADQQE2AvwBIANBtLrWADYC+AEgA0IENwKAAiADQaAKakH09sIAIANB+AFqEJskRQ0FDAYLIANBADYCpAMgA0EQIANBwARqIC1BAXEiBRs2AqADIANBKCADQdgEaiAFGzYCnAMgA0EMIANBvARqIAUbKAIANgKYAyADQQggA0G4BGogBRsoAgA2ApQDIANBnANqIQYgA0G4A2ogA0GUA2oiBRChBiADKAKUAyADKAKYAxDbG0UEQCADQQA2AogCIANBATYC/AEgA0G0utYANgL4ASADQgQ3AoACIANBoApqIg1B9PbCACADQfgBaiIIEJskDQogCCAFEKEGIANB+ANqIgcgCBDDAyAIEKUTIANBATYC/AEgA0HI7+AANgL4ASADQgE3AoQCIANBPjYC5AogAyADQeAKaiIFNgKAAiADIAc2AuAKAkAgDUH09sIAIAgQmyQNACADQQE2AvwBIANBxLrWADYC+AEgA0IBNwKEAiADQegANgLkCiADIAY2AuAKIAMgBTYCgAIgDUH09sIAIAgQmyQNACADKAL4AyADKAL8AxC+KQwJCyADKAL4AyADKAL8AxC+KQwKCyADQbAKakH+AEHPABCoECADQQA2AogCIANBATYC/AEgA0G0utYANgL4ASADQgQ3AoACIANBoApqQfT2wgAgA0H4AWoQmyRFDQEMAgsgA0EANgLAAyADQoCAgIAQNwK4AyADQQA2AogCIANBATYC/AEgA0GgnsMANgL4ASADQgQ3AoACIANBuANqQfT2wgAgA0H4AWoQmyRFBEAgECADKQK4AzcCACAQQQhqIANBwANqKAIANgIADAgLDAsLIANBAjYC/AEgA0H4xt8ANgL4ASADQgE3AoQCIANBPjYC/AMgAyADQfgDaiINNgKAAiADIANBsApqIgc2AvgDIANBoApqQfT2wgAgA0H4AWoQmyQNACADQcAKaiIFIANBuANqEMMDIANBATYC/AEgA0HI7+AANgL4ASADQgE3AoQCIANBPjYC/AMgAyANNgKAAiAD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Qf8HIANC/P////////8AgyADIAMgCIYgAlEbIAMgA0IDg0IBURsgAyAFQgJUGyADIAFCBHxCHFQbIgFCAYMgAXwiAUL/////////H1YiDBsgCWoiCUH+D0sNAUIAIAFCAYhC//////////f/AIMgDBshBCAJIQsMAQtBACELIAlBw3dJDQAgA0ECIAlrQT9xrYgiAUIBgyABfCIBQv////////8PViELIAFCAYghBAsgACALNgIIIAAgBDcDACAKQSBqJAALjAQBAn8jAEEwayICJAACfwJAAkACQAJAAkACQAJAIAAoAgAiAC0AAEEBaw4DAAECAwsgAiAAKAIENgIsIAJBATYCGCACQbDbwwA2AhQgAkIBNwIgIAJBCTYCBCACIAI2AhwgAiACQSxqNgIAIAEoAhQgASgCGCACQRRqEJskDAYLIAIgACgCBDYCLCACQQI2AhggAkHY28MANgIUIAJCATcCICACQQk2AgQgAiACNgIcIAIgAkEsajYCACABKAIUIAEoAhggAkEUahCbJAwFCyAAKAIEQQFrDgICAwELIAAtAAEhAyACIAAoAgQ2AiwgAkECNgIYIAJBhNvDADYCFCACQgI3AiAgAkEJNgIMIAJBpAE2AgQgAiADOgATIAIgAjYCHCACIAJBLGo2AgggAiACQRNqNgIAIAEoAhQgASgCGCACQRRqEJskDAMLIAJBADYCJCACQQE2AhggAkGY3MMANgIUIAJCBDcCHCABKAIUIAEoAhggAkEUahCbJAwCCyACQQA2AiQgAkEBNgIYIAJB0NzDADYCFCACQgQ3AhwgASgCFCABKAIYIAJBFGoQmyQMAQsgACgCCCEAIAJBAjYCGCACQYTdwwA2AhQgAkIBNwIgIAJBCTYCBCACIAA2AiwgAiACNgIcIAIgAkEsajYCACABKAIUIAEoAhggAkEUahCbJAsgAkEwaiQAC4UEAQF/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgACgCACIAKAIADhMSEgECAwQFBgcICQoLDA0ODxARAAsgAEEIahDuIAwRCyAAKAIEQYCAgIB4RgRAIABBCGoQ1yYgACgCIBDEKCAAQRRqEPYkDBELIABBBGoQ1yYgACgCHBDEKCAAQRBqEPYkDBALIABBEGoQvRsgACgCKBDAKAwPCyAA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AyQAIANBEGogAhCcHSADAn8gAykDECIFUARAIANBKGogARC8G0EaDAELIAMoAhghBCADQcgBaiABELwbIAMpA8gBIQYgAykD0AEhByADIAUgBBC0GDYCSCADQgA3A0AgAyAHNwM4IAMgBjcDMCADQQA2AihBFAs2AiAgAyACEJwdAkAgAykDACIFUARAIANBADYCxAEgA0IANwK8ASADQoCAgIDAADcCtAEgA0HIAWoiAiABELwbIANB4ABqIAIQoQ8gA0G0AWoQgxUhAgwBCyADKAIIIQIgA0EANgLEASADQgA3ArwBIANCgICAgMAANwK0ASADQcgBaiABELwbIAMpA8gBIQYgAykD0AEhByAFIAIQtBghASADQbQBahCDFSECIAMgATYCiAEgA0IANwOAASADIAc3A3ggAyAGNwNwIANBADYCaCADQQE2AmALIANBADoAnAEgAyACNgKYASADQgA3A5ABIANBIGoQwyghASADQeAAahDDKCECIANByAFqIgQQgh4gA0ETOgCwASADIAI2AqQBIAMgATYCoAEgAyADKQLQATcCqAEgBBD1KCAAIANBoAFqEIQVNgIMIABBADYCACADQeABaiQAC9UDAgx/A34jAEHwAWsiAyQAIAFB2ABsIAAoAghB2ABsIgRrIQEgACgCBCAEaiEFIANBMGohCSADQQxqIQQgA0HQAWohCiADQYgBakEEciEGA0ACQCABBEAgA0GIAWoiByACKAIEIgggAigCDEYEf0EFBSAHQgA3AxAgAiAIQRBqNgIEIAcgCCkDADcDCEEACzYCACADKAKIASIHQQVHDQEgA0ENNgIAIAMQ7SULIANB8AFqJAAgAUUPCyADQYABaiIIIAZBGGooAgA2AgAgA0H4AGoiCyAGQRBqKQIANwMAIANB8ABqIgwgBkEIaikCADcDACADIAYpAgA3A2ggA0GoAWoiDRDTFyADQeAAaiIOIApBCGooAgA2AgAgAyAKKQMANwNYIAMpA8gBIQ8gAykC3AEhECADKQLkASERIA0QyRYgBEEYaiAIKAIANgIAIARBEGogCykDADcCACAEQQhqIAwpAwA3AgAgBCADKQNoNwIAIAkgAykDWDcDACAJQQhqIA4oAgA2AgAgAyARNwJEIAMgEDcCPCADIA83AyggAyAHNgIIIANBBzYCACAFIANB2AAQ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IAIoAghBBUcEQCACQQhqIAEQgSILIAJBPGogARD/JSACQTBqIAEQpxoMAQsLIARBMGogARD/JQusAwIHfwF+IwBBIGsiAiQAIAFBKGoiAxCqICEEIAJBCGogARC9BSACKAIIIQUCQAJAIAItABxBAkcEQCACKAIUIQcgAigCECEIIAIoAgwhBgJAIAMQyA0iAwRAIAMoAgBBE0YNAQsgACAHNgIcIAAgCDYCGCAAQgA3AwggAEEANgIAIAAgBa0gBq1CIIaENwMQDAMLIAEoAsgCIQMgAUElNgLIAiABIAEpA+ACNwOYAyACQRRqIAFB1AJqKQIANwIAIAJBHGogAUHcAmooAgA2AgAgAiABKQLMAjcCDCACIAM2AgggAkEIaiIDEL4KIAMgARC9BSACLQAcQQJGBEAgAigCCCEBDAILIAIoAhAhASACKQMIIglQDQEgACACKAIUIgM2AiQgACABNgIgIAAgCTcDGCAAIAc2AhQgACAINgIQIABBADYCACAAIAQgAyADIARJGzYCLCAAIAQgAyADIARLGzYCKCAAIAWtIAatQiCGhDcDCAwCCyAAQQE2AgAgACAFNgIEDAELIABBATYCACAAIAE2AgQgBa0gBq1CIIaEEN0aCyACQSBqJAALjQQBBX8gACgCBCECIAAoAgAhASAAQoiAgICAATcCACACIAFrQThuIQMCQCABIAJGDQADQCADRQ0BAkAgASgCACICQQlHBEACQAJAAkACQAJAAkACQAJAAkAgAg4IAQIDBAUGBwgACyABQRBqKQMAEN0aDAkLIAFBCGoiAigCACABQQxqKAIAEPAPIAFBBGooAgAgAigCABD8KSABQRBqKAIAEOAoIAFBHGooAgAQ6iIMCAsgAUEIahDXCQwHCyABQQhqIgIoAgAgAUEMaigCABDmECABQQRqKAIAIAIoAgAQ/SkgAUEYaigCACICBEAgAhDgKAsgAUEcaigCABDqIgwGCwJAAkACQCABQQhqKAIADgIBAgALIAFBDGooAgAQxh0MBwsgAUEQahDeKAwGCyABQRBqEIgqDAULIAFBBGoQxAMMBAsgAUEEaigCABDgKCABQRBqKAIAEOoiDAMLIAFBBGooAgAiAikDKBDdGgJAIAIpAwBQBEAgAkEIahC9GwwBCyACEJQnCyACQcgAQQgQwhEMAgsgAUEEahDE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QQFGBEAgACABKQIANwIAIABBCGogAUEIaikCADcCACACKAIAIAIoAgQQwSkMAQsCQAJAAkACQAJAAkAgAS0ADCIFQQFrDgIAAgELIAAgAikCADcCACAAQQhqIAJBCGopAgA3AgAgASgCBCEGDAQLIARFDQEMAgsgBEUNAQsgA0EQaiIEIAEgAhDpDSAAIAUgBBDVEgwCCwJAAkACQCABKAIEIgYgASgCCCACKAIEIgcgAigCCBDaKUH/AXEOAgECAAsgA0EYaiACQQhqKAIANgIAIAMgAikCADcDECADQQRqIgIgA0EQaiABEN4gIAAgBCACENUSDAMLIABBCGpBrP/BACkCADcCACAAQaT/wQApAgA3AgAgAigCACAHEMEpDAELIANBGGogAUEIaigCADYCACADIAEpAgA3AxAgA0EEaiIBIANBEGogAhDeICAAIAUgARDVEgwBCyABKAIAIAYQwSkLIANBIGokAAvXAgEOfyADQRxsIQMgAS0AFSEMIAEtABQhDSABLQATIQ4gAS0AEiEPIAEtABEhECABLQAQIRFBAiEFQQIhBkECIQdBAiEIQQIhCUECIQpBASELA0AgAwRAIAshBEEAIQsCQAJAAkACQAJAAkACQAJAIAItABhBAWsOBwECAwQFBgcACyAEQQFxIQUMBQsgBEEBcSEGDAQLIARBAXEhBwwDCyAEQQFxIQgMAgsgBEEBcSEJDAELIARBAXEhCgsgBCELCyACQRxqIQIgA0EcayEDDAELCyAAIAw6AAUgACANOgAEIAAgDjoAAyAAIA86AAIgACAQOgABIAAgEToAACABIAwgCiAKQQJGGzoAFSABIA0gCSAJQQJGGzoAFCABIA4gCCAIQQJGGzoAEyABIA8gByAHQQJGGzoAEiABIBAgBiAGQQJGGzoAESABIBEgBSAFQQJGGzoAEAvsAgECfyMAQZABayICJAAgAkEAOwASIAIgAS0AsAI6ABEgAiABKAGqAjYACyACIAEvAa4COwAPIAIgASkAswI3ABQgAiABKQC7AjcAHCACIAEoAMMCNgAkIAJB5QBqIAFBvwJqKQAANwAAIAJB4ABqIAFBugJqKQEANwIAIAJB2ABqIAFBsgJqKQEANwIAIAIgASkBqgI3AlAgAUEoaiACQQtqEMcIIAIgATYCTCACQShqIAFBABCVBCACKAIo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BSgCDEkiBhsiBygCDCEJIAAgAyACIAYbIAQbIggoAgwhCiABQRBqIAIgBSAGGyICQRBqKQIANwIAIAFBCGogAkEIaikCADcCACABIAIpAgA3AgAgASAIIAcgCSAKSyIFGyICKQIANwIYIAFBKGogAkEQaikCADcCACABQSBqIAJBCGopAgA3AgAgAUFAayAHIAggBRsiAkEQaikCADcCACABQThqIAJBCGopAgA3AgAgASACKQIANwIwIAEgAyAAIAQbIgApAgA3AkggAUHQAGogAEEIaikCADcCACABQdgAaiAAQRBqKQIANwIAC9UCAQV/IwBBMGsiAiQAAkAgACgCACIABEAgASgCGCEEIAEoAhQhBQNAQQAhAyAARQ0CAkAgAEEAIABrcSIBQQFrIgZBH01BAEEBIAZ0QYuBgoB4cRsgAUHAAEYgAUGAAUZyciABQYACRiABQYAERnIgAUGACEYgAUGAEEZycnINACABQYAgRiABQYDAAEZyIAFBgIABRiABQYCAAkZyciABQYCACEZyDQAgAUGAgARHDQMLQQEhAyACQQE2AhAgAkHI7+AANgIMIAJCATcCGCACQeEANgIoIAIgAGhBAnRBkNTjAGooAgA2AiwgACABcyEAIAIgAkEkajYCFCACIAJBLGo2AiQgBSAEIAJBDGoQmyRFDQALDAELIAJBADYCHCACQQE2AhAgAkGorcQANgIMIAJCBDcCFCABKAIUIAEoAhggAkEMahCbJCEDCyACQTBqJAAgAwutAgEIfyACIAFBBHRBEGsiA2ohBSAAIANqIQYgACABQQF2IghBBHRqIgNBEGshBANAIAgEQCACIAMgACADIAAQ1BkiBxsiCSkCADcCACACQQhqIAlBCGopAgA3AgAgBSAEIAYgBiAEENQZIgkbIgopAgA3AgAgBUEIaiAKQQhqKQIANwIAIAhBAWshCCAFQRBrIQUgAkEQaiECIAMgB0EEdGohAyAAIAdBAXNBBHRqIQAgBCAJQQR0IgdrIQQgBiAHakEQayEGDAEFAkAgBEEQaiEEIAFBAXEEfyACIAAgAyAAIARJIgEbIgUpAgA3AgAgAkEIaiAFQQhqKQIANwIAIAMgACAET0EEdGohAyAAIAFBBHRqBSAACyAERiADIAZBEGpGcQ0AEJAbAAsLCwvVAgEFfyMAQTBrIgIkAAJA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AEEMaiADQTBqKQIANwIAIAAgAykCKDcCBEEAIQEgAEEAOgAkIAAgAjYCIAwBCyAAIAMpAxA3AwggAEEYaiAFKQMANwMAIABBEGogBCkDADcDACADQQxqEO4VCyAAIAE2AgAgA0HgAGokAAu7AgIFfwN+IwBB4ABrIgMkACADIAI2AgwgA0HCADoASCADQShqIAEgA0HIAGoQrg5BCCEBIANBGGoiBCADQThqIgYpAwA3AwAgA0EgaiIFIANBQGsiBykDADcDACADIAMpAzA3AxACQCADKAIoRQRAIANB2ABqIAUpAwAiCDcDACADQdAAaiAEKQMAIgk3AwAgAyADKQMQIgo3A0ggA0E8aiAINwIAIANBNGogCTcCACADIAo3AiwgAEEcaiAHKAIANgIAIABBFGogBikCADcCACAAQQxqIANBMGopAgA3AgAgACADKQIoNwIEIABBADoAJCAAIAI2AiBBASEBDAELIAAgAykDEDcDCCAAQRhqIAUpAwA3AwAgAEEQaiAEKQMANwMAIANBDGoQzBcLIAAgATYCACADQeAAaiQAC9QCAQN/IwBBMGsiAiQAAkACQCABKALAASABKALEARDmHCIDQdwARg0AAkAgA0H/AE0EQCADQYDp2ABqLQAADQIMAQsgA0EDdkE/cUGA6tgAIANBCXZB+PDgAGogA0H/xwxLGy0AAEEFdGpBwILhAGotAAAgA0EHcXZBAXENAQsgASgC0AEhBCABQcABahCiFSACQSE6ABggAiADNgIcIAIgBCAEIAJBGGoQySEgAigCBCEBIAIoAgAiA0EnRwRAIAAgAikDCDcDCCAAQRBqIAJBEGopAwA3AwAgACABNgIEIAAgAzYCAAwCCyAAQSY2AgAgACABNgIEDAELIAJBGGogARDbAyACKAIYQSVHBEAgACACKQMYNwMAIABBEGogAkEoaikDADcDACAAQQhqIAJBIGopAwA3AwAMAQsgACACKAIcNgIEIABBJjYCAAsgAkEwaiQAC80CAgV/An4jAEEwayICJAAgASgCACIDQQhqIQUgAyABKAIEIgRqQQFqIQYgAykDAEJ/hUKAgYKEiJCgwIB/gyEIIAEoAgwhAQJ/IARFBEBBAAwBCyACQQggBEEBahDRDiACNQIEIAMgAigCCGutQiCGhCEHIAIoAgALIQQgACABQQFqQQF2IAEgACgCDBsgAEEQahDgISACIAc3AiQgAiAENgIgIAIgATYCGCACIAM2AhAgAiAGNgIMIAIgBTYCCCACIAg3AwACQANAIAFFDQEgAhDADyEDIAIgAigCGEEBayIBNgIYIAMEQCAAIANBCGspAwAQtwkMAQsLIAFFDQADQCACEMAPIQAgAiACKAIYQQFrIgE2AhggAEUNASAAQQhrKQMAEN0aIAENAAsLIAIoAiAiAARAIAIoAiggACACKAIkEKEkCyACQTBqJAALwQIBBH8jAEEgayIFJAAgBCACIARrIgcgBCAHSxshCEEBIQYCQAJAIARBAXQgAk8NAAJAIAIgBE8EQCADIAdLDQEgAyAESQ0CIAUgAyAEayABIARqIANBuPvBABD4HCAFKAIEIARHDQIgBSgCACECA0ACQCAEQQNNBEAgBEEBSwRAIAIvAAAgAS8AAEcNBiAEQQJrIQQgAkECaiECIAFBAmohAQsgBA0BQQAhBgwGCyACKAAAIAEoAABHDQQgBEEEayEEIAFBBGohASACQQRqIQIMAQsLIAggAyACLQAAIAEtAABHIgYbIQMMAwsgBUEANgIYIAVBATYCDCAFQcy/4AA2AgggBUIENwIQIAVBCGpBqPrBABCoHQALIAMgB0G4+sEAEKEQAAsgCCEDCyAAIAM2AgQgACAGNgIAIAVBIGokAAvMAgEIfyMAQdAAayIDJAAgAkEBaiEIIAEoAgAhCSADQRRqIQYgASgCCCECIAEoAgQiBEEcaiEHIARBGGohCgJAAkACQANAIAcoAgAiASAITQRAIAFFDQIgBEEYaigCACABIAFBAWtB4LLDABCsHyACEIoTIABBKjYCAAwECyAHIAFBAWsiATYCACAKKAIAIAFBBHRqIgEoAgAiBUGAgICAeEYNAiAGIAEpAgQ3AgAgBkEIaiABQQxqKAIANgIAIAMgBTYCECADQRBqIgEgAhCKEyADQQhqIANBGGoiBSgCADYCACADIAMpAhA3AwAgASAJIAQgAxDgBCADKAIUIQIgAygCECIBQSpGDQALIABBCGogBUE4EPYGGiAAIAI2AgQgACABNgIADAILQfSvwwBBD0HQssMAEKYSAAtBxLHDABDCKQALIANB0ABqJAALtQIBBn8jAEEwayIDJABBCiECAkAgAEGQzgBJBEAgACEEDAELA0AgA0EI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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAS0AAEEBaw66AQECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMMEBMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4ABgQGCAYMBhAGFAYYBhwGIAYkBigGLAYwBjQGOAY8BkAGRAZIBkwGUAZUBlgGXAZgBmQGaAZsBnAGdAZ4BnwGgAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwG4AboBAAsgA0EONgIIIANBvKPZADYCBCADQYCAgIB4NgIADMEBCyADQRo2AgggA0GtpNkANgIEIANBgICAgHg2AgAMwAELIANBIDYCCCADQcek2QA2AgQgA0GAgICAeDYCAAy/AQsgA0EvNgIIIANB56TZADYCBCADQYCAgIB4NgIADL4BCyADQdMANgIIIANBlqXZADYCBCADQYCAgIB4NgIADL0BCyADQSk2AgggA0HppdkANgIEIANBgICAgHg2AgAMvAELIANBJjYCCCADQZKm2QA2AgQgA0GAgICAeDYCAAy7AQsgA0EqNgIIIANBuKbZADYCBCADQYCAgIB4NgIADLoBCyADQRE2AgggA0HiptkANgIEIANBgICAgHg2AgAMuQELIANBFzYCCCADQfOm2QA2AgQgA0GAgICAeDYCAAy4AQsgA0EsNgIIIANBiqfZADYCBCADQYCAgIB4NgIADLcBCyADQeIANgIIIANBtqfZADYCBCADQYCAgIB4NgIADLYBCyADQRo2AgggA0GYqNkANgIEIANBgICAgHg2AgAMtQELIANBJTYCCCADQbKo2QA2AgQgA0GAgICAeDYCAAy0AQsgA0EcNgIIIANB16jZADYCBCADQYCAgIB4NgIADLMBCyADQSc2AgggA0HzqNkANgIEIANBgICAgHg2AgAMsgELIANBJzYCCCADQZqp2QA2AgQgA0GAgICAeDYCAAyxAQsgA0EnNgIIIANBwanZADYCBCADQYCAgIB4NgIADLABCyADQTA2AgggA0HoqdkANgIEIANBgICAgHg2AgAMrwELIANBKTYCCCADQZiq2QA2AgQgA0GAgICAeDYCAAyuAQsgA0E1NgIIIANBwarZADYCBCADQYCAgIB4NgIADK0BCyADQTM2AgggA0H2qtkANgIEIANBgICAgHg2AgAMrAELIANBHzYCCCADQamr2QA2AgQgA0GAgICAeDYCAAyrAQsgAS0AAUECayIBQQd0IAFB/gFxQQF2ckH/AXEOCKQBowGjAaUBpgGjAaMBpwGjAQsgA0EoNgIIIANBoKzZADYCBCADQYCAgIB4NgIADKkBCyADQSU2AgggA0HIrNkANgIEIANBgICAgHg2AgAMqAELIANBGjYCCCADQe2s2QA2AgQgA0GAgICAeDYCAAynAQsgA0EcNgIIIANBh63ZADYCBCADQYCAgIB4NgIADKYBCyADQRc2AgggA0GjrdkANgIEIANBgICAgHg2AgAMpQELIAQgAUEIajYCICAEQQE2AjwgBEHordkANgI4IARCATcCRCAEQdgENgIwIAQgBEEsajYCQCAEIARBIGo2AiwgBEEQaiAEQThqEPwUIANBCGogBEEYaigCADYCACADIAQpAhA3AgAMpAELIANBGzYCCCADQfCt2QA2AgQgA0GAgICAeDYCAAyjAQsgA0EVNgIIIANBi67ZADYCBCADQYCAgIB4NgIADKIBCyADQR82AgggA0GgrtkANgIEIANBgICAgHg2AgAMoQELIAQgAUEEajYCICAEQQE2AjwgBEHUrtkANgI4IARCATcCRCAEQYYFNgIwIAQgBEEsajYCQCAEIARBIGo2AiwgBEEQaiAEQThqEPwUIANBCGogBEEYaigCADYCACADIAQpAhA3AgAMoAELIANBFTYCCCADQdyu2QA2AgQgA0GAgICAeDYCAAyfAQsgA0EWNgIIIANB8a7ZADYCBCADQYCAgIB4NgIADJ4BCyAEIAFBBGo2AiAgBEEBNgI8IARBsK/ZADYCOCAEQgE3AkQgBEHIADYCMCAEIARBLGo2AkAgBCAEQSBqNgIsIARBEGogBEE4ahD8FCADQQhqIARBGGooAgA2AgAgAyAEKQIQNwIADJ0BCyADQSY2AgggA0G4r9kANgIEIANBgICAgHg2AgAMnAELIANBLTYCCCADQd6v2QA2AgQgA0GAgICAeDYCAAybAQsgBCABQQhqNgIgIARBAjYCPCAEQbyw2QA2AjggBEIBNwJEIARB2AQ2AjAgBCAEQSxqNgJAIAQgBEEgajYCLCAEQRBqIARBOGoQ/BQgA0EIaiAEQRhqKAIANgIAIAMgBCkCEDcCAAyaAQsgA0E7NgIIIANBzLDZADYCBCADQYCAgIB4NgIADJkBCyADQcwANgIIIANBh7HZADYCBCADQYCAgIB4NgIADJgBCyADQTo2AgggA0HTsdkANgIEIANBgICAgHg2AgAMlwELIANBygA2AgggA0GNstkANgIEIANBgICAgHg2AgAMlgELIANBMTYCCCADQdey2QA2AgQgA0GAgICAeDYCAAyVAQsgA0EUNgIIIANBiLPZADYCBCADQYCAgIB4NgIADJQBCyADQR82AgggA0Gcs9kANgIEIANBgICAgHg2AgAMkwELIANBMjYCCCADQbuz2QA2AgQgA0GAgICAeDYCAAySAQsgBCABQQxqNgIMIAQgAUEEajYCICAEQQI2AjwgBEGMtNkANgI4IARCAjcCRCAEQcgANgIcIARBCDYCFCAEIARBEGo2AkAgBCAEQSBqNgIYIAQgBEEMajYCECAEQSxqIARBOGoQ/BQgA0EIaiAEQTRqKAIANgIAIAMgBCkCLDcCAAyRAQsgA0EeNgIIIANB4LTZADYCBCADQYCAgIB4NgIADJABCyADQSU2AgggA0H+tNkANgIEIANBgICAgHg2AgAMjwELIAQgAUEEajYCDCAEIAFBCGo2AiAgBEEDNgI8IARBuLXZADYCOCAEQgI3AkQgBEEINgIcIARBtgI2AhQgBCAEQRBqNgJAIAQgBEEgajYCGCAEIARBDGo2AhAgBEEsaiAEQThqEPwUIANBCGogBEE0aigCADYCACADIAQpAiw3AgAMjgELIANBGjYCCCADQdC12QA2AgQgA0GAgICAeDYCAAyNAQsgA0HVADYCCCADQeq12QA2AgQgA0GAgICAeDYCAAyMAQsgA0EyNgIIIANBv7bZADYCBCADQYCAgIB4NgIADIsBCyADQdIANgIIIANB8bbZADYCBCADQYCAgIB4NgIADIoBCyADQSw2AgggA0HDt9kANgIEIANBgICAgHg2AgAMiQELIANBMzYCCCADQe+32QA2AgQgA0GAgICAeDYCAAyIAQsgA0EiNgIIIANBorjZADYCBCADQYCAgIB4NgIADIcBCyADQTc2AgggA0HEuNkANgIEIANBgICAgHg2AgAMhgELIANBKDYCCCADQfu42QA2AgQgA0GAgICAeDYCAAyFAQsgA0ENNgIIIANBo7nZADYCBCADQYCAgIB4NgIADIQBCyADQRE2AgggA0GwudkANgIEIANBgICAgHg2AgAMgwELIANBFTYCCCADQcG52QA2AgQgA0GAgICAeDYCAAyCAQsgA0EZNgIIIANB1rnZADYCBCADQYCAgIB4NgIADIEBCyADQQ42AgggA0HvudkANgIEIANBgICAgHg2AgAMgAELIANBGjYCCCADQf252QA2AgQgA0GAgICAeDYCAAx/CyAEIAFBCGo2AiAgBEECNgI8IARBtLrZADYCOCAEQgE3AkQgBEHYBDYCMCAEIARBLGo2AkAgBCAEQSBqNgIsIARBEGogBEE4ahD8FCADQQhqIARBGGooAgA2AgAgAyAEKQIQNwIADH4LIANBJTYCCCADQcS62QA2AgQgA0GAgICAeDYCAAx9CyADQS02AgggA0HputkANgIEIANBgICAgHg2AgAMfAsgA0E8NgIIIANBlrvZADYCBCADQYCAgIB4NgIADHsLIANBNDYCCCADQdK72QA2AgQgA0GAgICAeDYCAAx6CyADQSs2AgggA0GGvNkANgIEIANBgICAgHg2AgAMeQsgA0EtNgIIIANBsbzZADYCBCADQYCAgIB4NgIADHgLIANBJDYCCCADQd682QA2AgQgA0GAgICAeDYCAAx3CyADQR02AgggA0GCvdkANgIEIANBgICAgHg2AgAMdgsgA0EoNgIIIANBn73ZADYCBCADQYCAgIB4NgIADHULIANBLjYCCCADQce92QA2AgQgA0GAgICAeDYCAAx0CyADQSo2AgggA0H1vdkANgIEIANBgICAgHg2AgAMcwsgA0E2NgIIIANBn77ZADYCBCADQYCAgIB4NgIADHILIANBPjYCCCADQdW+2QA2AgQgA0GAgICAeDYCAAxxCyADQTM2AgggA0GTv9kANgIEIANBgICAgHg2AgAMcAsgA0EpNgIIIANBxr/ZADYCBCADQYCAgIB4NgIADG8LIANBGTYCCCADQe+/2QA2AgQgA0GAgICAeDYCAAxuCyADQTs2AgggA0GIwNkANgIEIANBgICAgHg2AgAMbQsgA0E9NgIIIANBw8DZADYCBCADQYCAgIB4NgIADGwLIANBLTYCCCADQYDB2QA2AgQgA0GAgICAeDYCAAxrCyAEIAFBCGo2AiAgBEECNgI8IARB3MHZADYCOCAEQgE3AkQgBEHYBDYCMCAEIARBLGo2AkAgBCAEQSBqNgIsIARBEGogBEE4ahD8FCADQQhqIARBGGooAgA2AgAgAyAEKQIQNwIADGoLIANBOjYCCCADQezB2QA2AgQgA0GAgICAeDYCAAxpCyADQfAANgIIIANBpsLZADYCBCADQYCAgIB4NgIADGgLIANBNTYCCCADQZbD2QA2AgQgA0GAgICAeDYCAAxnCyADQckANgIIIANBy8PZADYCBCADQYCAgIB4NgIADGYLIANBKTYCCCADQZTE2QA2AgQgA0GAgICAeDYCAAxlCyADQSY2AgggA0G9xNkANgIEIANBgICAgHg2AgAMZAsgA0E7NgIIIANB48TZADYCBCADQYCAgIB4NgIADGMLIANBODYCCCADQZ7F2QA2AgQgA0GAgICAeDYCAAxiCyAEIAFBCGo2AiAgBEECNgI8IARBjMbZADYCOCAEQgE3AkQgBEHYBDYCMCAEIARBLGo2AkAgBCAEQSBqNgIsIARBEGogBEE4ahD8FCADQQhqIARBGGooAgA2AgAgAyAEKQIQNwIADGELIANBJzYCCCADQZzG2QA2AgQgA0GAgICAeDYCAAxgCyADQRs2AgggA0HDxtkANgIEIANBgICAgHg2AgAMXwsgA0EhNgIIIANB3sbZADYCBCADQYCAgIB4NgIADF4LIANBJTYCCCADQf/G2QA2AgQgA0GAgICAeDYCAAxdCyADQc4ANgIIIANBpMfZADYCBCADQYCAgIB4NgIADFwLIANBHTYCCCADQfLH2QA2AgQgA0GAgICAeDYCAAxbCyADQTk2AgggA0GPyNkANgIEIANBgICAgHg2AgAMWgsgA0E5NgIIIANByMjZADYCBCADQYCAgIB4NgIADFkLIANBOTYCCCADQYHJ2QA2AgQgA0GAgICAeDYCAAxYCyADQS42AgggA0G6ydkANgIEIANBgICAgHg2AgAMVwsgBCABQQhqNgIgIARBAjYCPCAEQZDK2QA2AjggBEIBNwJEIARB2AQ2AjAgBCAEQSxqNgJAIAQgBEEgajYCLCAEQRBqIARBOGoQ/BQgA0EIaiAEQRhqKAIANgIAIAMgBCkCEDcCAAxWCyADQT82AgggA0GgytkANgIEIANBgICAgHg2AgAMVQsgA0E2NgIIIANB38rZADYCBCADQYCAgIB4NgIADFQLIAQgAUEIajYCICAEQQI2AjwgBEH0y9kANgI4IARCATcCRCAEQdgENgIwIAQgBEEsajYCQCAEIARBIGo2AiwgBEEQaiAEQThqEPwUIANBCGogBEEYaigCADYCACADIAQpAhA3AgAMUwsgA0HGADYCCCADQYTM2QA2AgQgA0GAgICAeDYCAAxSCyADQSg2AgggA0HKzNkANgIEIANBgICAgHg2AgAMUQsgBCABQQRqNgIgIARBAjYCPCAEQZjN2QA2AjggBEIBNwJEIARBiAU2AjAgBCAEQSxqNgJAIAQgBEEgajYCLCAEQRBqIARBOGoQ/BQgA0EIaiAEQRhqKAIANgIAIAMgBCkCEDcCAAxQCyADQSE2AgggA0GozdkANgIEIANBgICAgHg2AgAMTwsgA0EWNgIIIANByc3ZADYCBCADQYCAgIB4NgIADE4LIANBFDYCCCADQd/N2QA2AgQgA0GAgICAeDYCAAxNCyADQR02AgggA0HzzdkANgIEIANBgICAgHg2AgAMTAsgA0ExNgIIIANBkM7ZADYCBCADQYCAgIB4NgIADEsLIANBMzYCCCADQcHO2QA2AgQgA0GAgICAeDYCAAxKCyAEIAFBCGo2AgwgBCABQRBqNgIgIARBAzYCPCAEQZjP2QA2AjggBEICNwJEIARB2AQ2AhwgBEHYBDYCFCAEIARBEGo2AkAgBCAEQSBqNgIYIAQgBEEMajYCECAEQSxqIARBOGoQ/BQgA0EIaiAEQTRqKAIANgIAIAMgBCkCLDcCAAxJCyAEIAFBCGo2AiAgBEECNgI8IARByM/ZADYCOCAEQgE3AkQgBEHYBDYCMCAEIARBLGo2AkAgBCAEQSBqNgIsIARBEGogBEE4ahD8FCADQQhqIARBGGooAgA2AgAgAyAEKQIQNwIADEgLIANBPzYCCCADQdjP2QA2AgQgA0GAgICAeDYCAAxHCyADQcUANgIIIANBl9DZADYCBCADQYCAgIB4NgIADEYLIANBJDYCCCADQdzQ2QA2AgQgA0GAgICAeDYCAAxFCyADQSM2AgggA0GA0dkANgIEIANBgICAgHg2AgAMRAsgA0ErNgIIIANBo9HZADYCBCADQYCAgIB4NgIADEMLIANBODYCCCADQc7R2QA2AgQgA0GAgICAeDYCAAxCCyADQc4ANgIIIANBhtLZADYCBCADQYCAgIB4NgIADEELIAQgAUEIajYCICAEQQI2AjwgBEGM09kANgI4IARCATcCRCAEQdgENgIwIAQgBEEsajYCQCAEIARBIGo2AiwgBEEQaiAEQThqEPwUIANBCGogBEEYaigCADYCACADIAQpAhA3AgAMQAsgA0E6NgIIIANBnNPZADYCBCADQYCAgIB4NgIADD8LIANBMjYCCCADQdbT2QA2AgQgA0GAgICAeDYCAAw+CyADQSM2AgggA0GI1NkANgIEIANBgICAgHg2AgAMPQsgA0EpNgIIIANBq9TZADYCBCADQYCAgIB4NgIADDwLIANBOTYCCCADQdTU2QA2AgQgA0GAgICAeDYCAAw7CyADQdYANgIIIANBjdXZADYCBCADQYCAgIB4NgIADDoLIANBPzYCCCADQePV2QA2AgQgA0GAgICAeDYCAAw5CyADQSo2AgggA0Gi1tkANgIEIANBgICAgHg2AgAMOAsgA0ETNgIIIANBzNbZADYCBCADQYCAgIB4NgIADDcLIANBDTYCCCADQd/W2QA2AgQgA0GAgICAeDYCAAw2CyADQQ82AgggA0Hs1tkANgIEIANBgICAgHg2AgAMNQsgA0HTADYCCCADQfvW2QA2AgQgA0GAgICAeDYCAAw0CyADQcYANgIIIANBztfZADYCBCADQYCAgIB4NgIADDMLIANBKTYCCCADQZTY2QA2AgQgA0GAgICAeDYCAAwyCyADQTI2AgggA0G92NkANgIEIANBgICAgHg2AgAMMQsgA0EsNgIIIANB79jZADYCBCADQYCAgIB4NgIADDALIANBMDYCCCADQZvZ2QA2AgQgA0GAgICAeDYCAAwvCyADQT02AgggA0HL2dkANgIEIANBgICAgHg2AgAMLgsgA0EeNgIIIANBiNrZADYCBCADQYCAgIB4NgIADC0LIANBMjYCCCADQaba2QA2AgQgA0GAgICAeDYCAAwsCyADQSY2AgggA0HY2tkANgIEIANBgICAgHg2AgAMKwsgA0EgNgIIIANB/trZADYCBCADQYCAgIB4NgIADCoLIANBODYCCCADQZ7b2QA2AgQgA0GAgICAeDYCAAwpCyADQRw2AgggA0HW29kANgIEIANBgICAgHg2AgAMKAsgA0EiNgIIIANB8tvZADYCBCADQYCAgIB4NgIADCcLIANBOjYCCCADQZTc2QA2AgQgA0GAgICAeDYCAAwmCyADQTM2AgggA0HO3NkANgIEIANBgICAgHg2AgAMJQsgA0HEADYCCCADQYHd2QA2AgQgA0GAgICAeDYCAAwkCyAEIAFBCGo2AgwgBCABQRBqNgIgIARBAzYCPCAEQejd2QA2AjggBEICNwJEIARB2AQ2AhwgBEHYBDYCFCAEIARBEGo2AkAgBCAEQSBqNgIYIAQgBEEMajYCECAEQSxqIARBOGoQ/BQgA0EIaiAEQTRqKAIANgIAIAMgBCkCLDcCAAwjCyADQTo2AgggA0GA3tkANgIEIANBgICAgHg2AgAMIgsgA0EuNgIIIANBut7ZADYCBCADQYCAgIB4NgIADCELIANBLTYCCCADQeje2QA2AgQgA0GAgICAeDYCAAwgCyAEIAFBCGo2AiAgBEECNgI8IARBxN/ZADYCOCAEQgE3AkQgBEHYBDYCMCAEIARBLGo2AkAgBCAEQSBqNgIsIARBEGogBEE4ahD8FCADQQhqIARBGGooAgA2AgAgAyAEKQIQNwIADB8LIAQgAUEIajYCICAEQQI2AjwgBEGo4NkANgI4IARCATcCRCAEQdgENgIwIAQgBEEsajYCQCAEIARBIGo2AiwgBEEQaiAEQThqEPwUIANBCGogBEEYaigCADYCACADIAQpAhA3AgAMHgsgBCABQQhqNgIgIARBAjYCPCAEQYjh2QA2AjggBEIBNwJEIARB2AQ2AjAgBCAEQSxqNgJAIAQgBEEgajYCLCAEQRBqIARBOGoQ/BQgA0EIaiAEQRhqKAIANgIAIAMgBCkCEDcCAAwdCyADQegANgIIIANBmOHZADYCBCADQYCAgIB4NgIADBwLIANB6AA2AgggA0GA4tkANgIEIANBgICAgHg2AgAMGwsgA0HEADYCCCADQeji2QA2AgQgA0GAgICAeDYCAAwaCyADQdMANgIIIANBrOPZADYCBCADQYCAgIB4NgIADBkLIANB1wA2AgggA0H/49kANgIEIANBgICAgHg2AgAMGAsgA0HaADYCCCADQdbk2QA2AgQgA0GAgICAeDYCAAwXCyADQRI2AgggA0Gw5dkANgIEIANBgICAgHg2AgAMFgsgA0EZNgIIIANBwuXZADYCBCADQYCAgIB4NgIADBULIANBKTYCCCADQdvl2QA2AgQgA0GAgICAeDYCAAwUCyADQckANgIIIANBhObZADYCBCADQYCAgIB4NgIADBMLIANBzgA2AgggA0HN5tkANgIEIANBgICAgHg2AgAMEgsgA0HXADYCCCADQZvn2QA2AgQgA0GAgICAeDYCAAwRCyADQT42AgggA0Hy59kANgIEIANBgICAgHg2AgAMEAsgA0HqADYCCCADQbDo2QA2AgQgA0GAgICAeDYCAAwPCyADQeEANgIIIANBmunZADYCBCADQYCAgIB4NgIADA4LIANBwwA2AgggA0H76dkANgIEIANBgICAgHg2AgAMDQsgA0E1NgIIIANBvurZADYCBCADQYCAgIB4NgIADAwLIAQgAUEIajYCICAEQQI2AjwgBEGw69kANgI4IARCATcCRCAEQdgENgIwIAQgBEEsajYCQCAEIARBIGo2AiwgBEEQaiAEQThqEPwUIANBCGogBEEYaigCADYCACADIAQpAhA3AgAMCwsgASgCDCgCAEEIaiEBDAELCyADQeEANgIIIANBwOvZADYCBCADQYCAgIB4NgIADAgLIANB7gA2AgggA0Gh7NkANgIEIANBgICAgHg2AgAMBwtB2eTgAEEoQZCs2QAQ4RcACyAEQcir2QA2AixBCAwDCyAEQdCr2QA2AixBCAwCCyAEQdir2QA2AixBCQwBCyAEQeGr2QA2AixBDQshASAEQQI2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ABMgAkECNgIsIAJB4MTDADYCKCACQgI3AjQgAkGvATYCICACQaQBNgIYIAIgAzoAJyACIAJBFGo2AjAgAiACQRNqNgIcIAIgAkEnajYCFCAEIAEgAkEoahCbJEUNAQsLQQELIAJBQGskAAv+AgEBfyMAQZABayICJAAgAkGo0eAANgKIASACQaynwwA2AoABIAJBrKfDADYCeCACQaynwwA2AnAgAkHcp8MANgJoIAJB3KfDADYCYCACQaynwwA2AlggAkGsp8MANgJQIAJB7KfDADYCSCACQdynwwA2AkAgAkHcp8MANgI4IAJBzKfDADYCMCACQbynwwA2AiggAkGsp8MANgIgIAJBrKfDADYCGCACQZynwwA2AhAgAiAANgJEIAIgAEHBAGo2AnwgAiAAQUBrNgJ0IAIgAEE/ajYCbCACIABBIGo2AmQgAiAAQRhqNgJcIAIgAEE+ajYCVCACIABBPWo2AkwgAiAAQRBqNgI8IAIgAEEIajYCNCACIABBwgBqNgIsIAIgAEEoajYCJCACIABBPGo2AhwgAiAAQTtqNgIUIAIgAEE6ajYCDCACIABBOGo2AowBIAIgAkGMAWo2AoQBIAFBkv3DAEEGQZipwwBBECACQQxqQRAQxQggAkGQAWokAAuCAwIFfwN+IwBBMGsiAyQAIAAgASgCBCABKAIAa0EcbhDVHiAAKAIEIAAoAgghBCADQRBqIAFBEGooAgA2AgAgA0EIaiABQQhqKQIANwMAIAMgASkCACIHNwMAIARBHGxqIQIgB6chASADKAIEIQUCQANAIAEgBUYNASABKAIAIgZBCEcEQCABQRRqKQIAIQcgAUEMaikCACEIIAEpAgQhCSACIAY2AgAgAkEEaiAJNwIAIAJBDGogCDcCACACQRRqIAc3AgAgAkEcaiECIARBAWohBCABQRxqIQEMAQsLIAFBHGohAQsgACAENgIIIANChICAgMAANwMAIAUgAWtBHG4hAgJAIAEgBUYNAANAIAJFDQEgAkEBayECIAEQzgsgAUEcaiEBDAALAAsgAygCECIABEAgAygCDCIEIAMoAggiASgCCCICRwRAIAEoAgQiBSACQRxsaiAFIARBHGxqIABBHGwQvS0aIAMoAhAhAAsgASAAIAJqNgIICyADQTBqJAALwQIBBH8gACgCCCIDIAAoAgwQ0xwg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QAJAIAIoAgQiAyACKAIIQThsaiEGA0AgAyIAIAZGDQEgAEE4aiEDIAAoAgAiAkEJRwRAAkACQAJAAkACQAJAAkACQAJAIAJBAWsOCAECAwQFBgcIAAsgACgCDEHIAGwhBCAAKAIIIQIDQCAEBEACQAJAAkACQCACKQMAQgN9IgenQQFqQQAgB0ICVBtBAWsOAgECAAsgASACQSBqEPoIIAIgARDfIwwCCyABIAJBEGoQ+ggMAQsgASACQRBqEPoICyACQcgAaiECIARByABrIQQMAQsLIABBHGogARDgIwwJCyAAQQhqIAEQzwcMCAsgACgCDEHQAGwhBCAAKAIIIQIDQCAEBEACQAJAAkACQEICIAIpAwBCAn0iByAHQgJaG6dBAWsOAgECAAsgAkEIaiABEOEjDAILIAEgAkEIahD6CAwBCyACIAEQ4SMgAkEgaiABEN8jCyACQdAAaiECIARB0ABrIQQMAQsLIABBHGogARDgIwwHCwJAAkAgACgCCEEBaw4CAQgACyAAQRBqIAEQpicMBwsgASAAQRBqELURDAYLIABBBGogARDCKwwFCyAAQRBqIAEQ4CMMBAsgASAAKAIEQShqEPoIDAMLIABBBGogARDCKwwCCyABIABBEGoQ+ggFIABBCGogARDSBAsMAAsACwUgASACQQhqEPoIIAIoAiAhAgwBCwsLIAVBEGokAAvPAgECfyMAQUBqIgIkAAJAAkAgASgCAEUEQAJAIAEoAgxBAUcNACABKAIIIgEoAgAiAyABKAIERw0AIAJBADYCCCACIAMgAkEIahDaCSACKAIEIQEgAigCACACQQA2AhQgAkKAgICAEDcCDCACQQM6ADggAkEgNgIoIAJBADYCNCACQYSpxAA2AjAgAkEANgIgIAJBADYCGCACIAJBDGo2AiwgASACQRhqENwqDQMgACACKQIMNwIAIABBCGogAkEUaigCADYCAAwCCyAAQYCAgIB4NgIADAELAkAgASgCDEEBRw0AIAEoAggiAS0AACIDIAEtAAFHDQBBAUEBEJEgIQEgAEEBNgIIIAAgATYCBCAAQQE2AgAgASADOgAADAELIABBgICAgHg2AgALIAJBQGskAA8LQYi34ABBNyACQT9qQZypxABBjLjgABDDDgAL2AIBAn8jAEEQayICJAACfwJAAkACQAJAAkACQAJA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GXYiDzoAACANIAZBCGsgCHFqIA86AAAgDCAGQXRsaiIGIAAoAgAgCkF0bGpBDGsiCikAADcAACAGQQhqIApBCGooAAA2AAAgAkEBayECIBBCAX0gEIMhEAwACwALIAAgAUEQakG7ARCuBAtBAAsaIAFBQGskAAwBCxCWGwALCyAFIAVBFGo2AhggBSAANgIcIAUgACgCACAAKAIEIBEgBUEYakG6ARCgCCAAKAIAIQEgBSgCBCECAkAgBSgCAEUEQCABIAJBdGxqQQRrIAM2AgAgBUEMahDdHgwBCyABIAJqIgQtAAAhByAFKQIMIRAgBCARp0EZdiIEOgAAIAEgACgCBCACQQhrcWpBCGogBDoAACAAIAAoAgggB0EBcWs2AgggACAAKAIMQQFqNgIMIAEgAkF0bGoiAEEEayADNgIAIABBDGsgEDcCAAsgBUEgaiQAC8QCAQF/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQAJAIAAoAgAiACgCAEEBaw4HAQIDBAUGBwALIAIgAEEIajYCDCABQeC03wBBBSACQQxqQc8EEMQKDAcLIAIgAEEIajYCDCABQeW03wBBAiACQQxqQdAEEMQKDAYLIAIgAEEEajYCDCABQee03wBBAyACQQxqQdEEEMQKDAULIAIgAEEEajYCDCABQeq03wBBBSACQQxqQdIEEMQKDAQLIAIgAEEEajYCDCABQe+03wBBCyACQQxqQdMEEMQKDAMLIAIgAEEEajYCDCABQfq03wBBCyACQQxqQdQEEMQKDAILIAIgAEEEajYCDCABQYW13wBBBiACQQxqQdUEEMQKDAELIAIgAEEEajYCDCABQYu13wBBCCACQQxqQdYEEMQKCyACQRBqJAALqQICA38BfiMAQYABayICJAAgAAJ/IAEtABRBAkYEQCACQQhqIAEoAgAiAUEgaikDADcDACACQRBqIAFBKGopAwA3AwAgAkEgaiIEIAFBCGopAwA3AwAgAiABKQMYNwMAIAIgASkDADcDGCABKQMQIQUgAkEoaiIDIAIQ3gdBwABBCBCRICADQcAAEPYGIQMgAkH4AGogBCkDADcCACAAQQA2AgggACADNgIoIAAgBTcDICACIAIpAxg3AnAgACACKQJsNwIMIABBFGogAkH0AGopAgA3AgAgAEEcaiACQfwAaigCADYCACAB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IARBAWoQmg0gAigCECABKAIAIgUgAigCFCIIQQlqEPYGIQYgBSkDACEJIAIgASgCDCIHNgIoIAIgBTYCICACIAQgBWpBAWo2AhwgAiAFQQhqNgIYIAIgCUJ/hUKAgYKEiJCgwIB/gzcDECAHIQQDQAJAIARFDQAgAkEQahCIDyEDIAIgAigCKEEBayIENgIoIANFDQAgAiADQRBrKQMAIANBCGsoAgAQqSMgAikDACEJIAYgAyAFa2oiA0EIayACKAIINgIAIANBEGsgCTcDAAwBCwsgACAHNgIMIAAgCDYCBCAAIAY2AgAgACABKAIINgIICyACQTBqJAALvwIBAX8jAEEQayICJAACfwJAAkACQAJAAkACQAJAAkAgACgCAEEBaw4HAQIDBAUGBwALIAIgAEEIajYCDCABQeC03wBBBSACQQxqQc8EEMQKDAcLIAIgAEEIajYCDCABQeW03wBBAiACQQxqQdAEEMQKDAYLIAIgAEEEajYCDCABQee03wBBAyACQQxqQdEEEMQKDAULIAIgAEEEajYCDCABQeq03wBBBSACQQxqQdIEEMQKDAQLIAIgAEEEajYCDCABQe+03wBBCyACQQxqQdMEEMQKDAMLIAIgAEEEajYCDCABQfq03wBBCyACQQxqQdQEEMQKDAILIAIgAEEEajYCDCABQYW13wBBBiACQQxqQdUEEMQKDAELIAIgAEEEajYCDCABQYu13wBBCCACQQxqQdYEEMQKCyACQRBqJAALvgICCH8EfiMAQeAAayIDJAAgASgCDCIIIAEoAgQiBGtBBHYiAiAAKAIAIAAoAggiBWtLBEAgACAFIAJBCEHYABCYFwsgACgCBCAAKAIIIgZB2ABsaiECIANBMGohBwNAIAQgCEcEQCABIARBEGoiBTYCBCAEKQMAIQogA0EIaiIEENMXIAMpAjwhCyADKQJEIQwgAykDKCENIANB2ABqIgkgB0EIaigCADYCACADIAcpAwA3A1AgBBDMFiACQShqIA03AgAgAkEYakIANwIAIAJBEGogCjcCACACQQhqQQA2AgAgAkEHNgIAIAJBMGogAykDUDcCACACQThqIAkoAgA2AgAgAkHEAGogDDcCACACQTxqIAs3AgAgAkHYAGohAiAGQQFqIQYgBSEEDAELCyAAIAY2AgggA0HgAGokAAujAgIEfwF+IwBBMGsiAiQAAkACQCABQShqEOUNIgMEQCADKAIAQQRGDQELIAJBEGogARCsASACKAIQQQVHBEAgACACKQMQNwMAIABBGGogAkEoaikDADcDACAAQRBqIAJBIGopAwA3AwAgAEEIaiACQRhqKQMANwMADAILIAAgAigCFDYCBCAAQQY2AgAMAQsgAkEQaiIFIAEQpQUgAikDECIGUEUEQCACIAIoAhwiAzYCDCACIAIoAhgiBDYCCCACIAY3AwAgAkHJteAAQQsQuBsEQCACQeAAOgAQIAEgBCADIAUQwhkLIAAgAzYCFCAAIAQ2AhAgACAGNwMIIABBBTYCAAwBCyACKAIYIQEgAEEGNgIAIAAgATYCBAsgAkEwaiQAC7QCAQZ/IwBB0ABrIgIkACABKAIEIQMgASgCDCEGIAEoAhQhBQJAAkACQAJAAkADQCADIAZGDQQgAkEQaiIEIANBKBD2BhogASADQShqIgM2AgQgAigCEEEHRwRAIAJBCGogBBCODCACKAIMIQMgAigCCCACQT86ADggAyACQThqEPAUIQQgASgCECIBQShqEOYNIgNFDQMgAygCAEEkRw0DIAEgASkDQDcDeCABKAIoIAFBJTYCKEEkRw0CIAEgASgCLBCCDAwDCyACKAIYIQQCQCACKAIUIgdBAmsOAgQBAAsLIAAgAikCHDcCCCAAIAQ2AgQgACAHNgIADAQLQdnk4ABBKEGkxeAAEOEXAAsgAkEQahD8EAsgBRCJKCAFIAQ2AgALIABBAjYCAAsgAkHQAGokAAufAgIHfwF+IwBBIGsiAyQAIANBCGogAkEQEK0UIANBADYCHCADIAMoAgwiBDYCGCADIAMoAggiBTYCFCACIAVLBEAgA0EUakEAIAJBBEEQEJgXIAMoAhwhBiADKAIYIQQLIAE1AgAgATEABEIghoQgATEABUIohoQhCiAEIAZBBHRqIQRBASACIAJBAU0bIgdBAWshBSABKAIIIQggAS8BDCEJAkADQCAFBEAgBCAJOwEMIAQgCDYCCCAEIAo3AgAgBUEBayEFIARBEGohBAwBBQJAIAYgB2ohBSACDQAgBUEBayEFDAMLCwsgBCABKQIANwIAIARBCGogAUEIaikCADcCAAsgACADKQIUNwIAIABBCGogBTYCACADQSBqJAALsgIBBH8jAEEwayICJAAC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IAEpAiw3AgwgBiAHNgIIIAZBCGoQvwogBiABQQAgCRDEIBD+BiAGKAIEIQcgBigCAEUNACAAQQI6ACQgACAHNgIAIAStIAWtQiCGhEECEKcjDAELIAAgAzoAJCAAIAc2AiAgAEECOgAUIAAgAiABKAJ8IgEgASACSRs2AhwgACACIAEgASACSxs2AhggACAErSAFrUIghoQ3AwALIAZBIGokAAu0AgEEfyMAQSBrIgMkAAJAAkACQANAAkACQCABKAIAQQFrDgYDAAQABQUBCyABKAIEIQEMAQsLIAFBCGoQjxxFDQIgASgCFCECIAEoAhAhASADQSk6AAggACABIAIgA0EIahC9HgwCCyABKAIMQShsIQIgASgCCCEBA0AgAkUNAiABKAIAQQdHBEAgACABEIYICyABQShqIQEgAkEoayECDAALAAsgASgCDEE4bCECIAEoAgghAQNAIAJFDQFBKCEEAkACQAJAAkAgASgCAEEBaw4CAgABC0EEIQQLIAAgASAEaigCABCGCAwBCyABQRBqEI8cRQ0AIAEoAhwhBCABKAIYIQUgA0EpOgAIIAAgBSAEIANBCGoQvR4LIAFBOGohASACQThrIQIMAAsACyADQSBqJAALsQICAX8BfiMAQSBrIgMkAAJAAkACQAJAAkACQAJAAkAgAkH/AXFBAWsOAwECBAALIANBADYCECADQQhqIAEgA0EQakGQtOAAQQYQmhMgAy0ACEEERg0CIAMpAwgiBEL/AYNCBFENAiAAIAQ3AgAMBgsgA0EANgIQIANBCGogASADQRBqQZa04ABBCRCaEyADLQAIQQRGDQEgAykDCCIEQv8Bg0IEUQ0BIAAgBDcCAAwFCyADQQA2AhAgA0EIaiABIANBEGpBn7TgAEEHEJoTIAMtAAhBBEYNACADKQMIIgRC/wGDQgRSDQILIANBEGogARC9ESADLQAQQQRGDQAgAykDECIEQv8Bg0IEUg0CCyAAQQQ6AAAMAgsgACAENwIADAELIAAgBDcCAAsgA0EgaiQAC6UCAgN/AX4jAEEgayIDJAAgAigCECEEIANBGGogASACKAIMIgVBABDRAQJAAkACQAJAIAMtABhBBEcEQCADKQMYIgZC/wGDQgRSDQELIANBADYCDCADQRhqIAEgA0EMakHeqeAAQQEQmhMgAy0AGEEERwRAIAMp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ARC2JgsgAhC2JgwCCyABDQELIAAgAjoAAUEADAELIAAgBDYCBEEBCzoAACADQSBqJAAL6gEBBn8jAEEgayIEJAACQCABIANPBEAgACADQQJ0aiEGIAMhBwNAIAcEQCAAIAUgACgCACIIIAIoAgBqIgVqIgk2AgAgBSAISSAFIAlLciEFIAdBAWshByACQQRqIQIgAEEEaiEADAELC0EAIQIgBUUNASABQQJ0IANBAnRrIQADQCAARQRAQQEhAgwDCyAGIAYoAgBBAWoiATYCACAAQQRrIQAgBkEEaiEGIAFFDQALDAELIARBADYCGCAEQQE2AgwgBEHMv+AANgIIIARCBDcCECAEQQhqQcSswgAQqB0ACyAEQSBqJAAgAgusAgEEfyMAQRBrIgMkAAJAIAItAAwiBEEBRgRAIAAgARDdIAwBCwJAAkACQAJAAkACQAJAAkAgAS0ADCIFQQFrDgIHAQALIARFDQEMAgsgBEUNAQsgASgCBCIEIAEoAggiASACKAIEIgYgAigCCCICENopQf8BcQ4CAgMBCyADIAEoAgQgASgCCCACKAIEIAIoAggQrBIgACAFIAMQ1RIMBAsgAyAGIAIgBCABENobIABBAiAFayADENUSDAMLIABBCGpBrP/BACkCADcCACAAQaT/wQApAgA3AgAMAgsgAyAEIAEgBiACENobIAAgBSADENUSDAELIAMgAhDdICAAIAMpAgA3AgAgA0ECIAMtAAxrOgAMIABBCGogA0EIaikCADcCAAsgA0EQaiQAC/kBAQh/IABBEGogABDUGSECIABBMEEgIABBMGogAEEgahDUGSIDG2ohBCAAQSBBMCADG2oiBSAAIAJBAXNBBHRqIgMgBCAEIAAgAkEEdGoiABDUGSICGyAFIAMQ1BkiBhsiByAAIAQgAyAGGyACGyIIENQZIQkgAUEIaiAEIAAgAhsiAEEIaikCADcCACABIAApAgA3AgAgAUEYaiAHIAggCRsiAEEIaikCADcCACABIAApAgA3AhAgAUEoaiAIIAcgCRsiAEEIaikCADcCACABIAApAgA3AiAgASADIAUgBhsiACkCADcCMCABQThqIABBCGopAgA3AgALoAIBBH8jAEEwayICJABBgICAgHghBAJAAkAgAUEoahDIDSIDRQ0AIAMoAgBBAkcNACADLQAIQQJHDQAg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AAwKCyABQdAAaiEBDAALAAsMCAsgAEEIahCcBCACIQAMBgsgAEIANwIYIABCADcCCCACIQAMBQsgAEIANwIIIABBBGoQyi0gAiEADAQLIAAoAgQiAEIANwMwIABCADcDICAAKQMAUARAIABBCGoQgB4gAiEADAQLIABCADcDCCAAQgA3AxggAiEADAMLIABCADcCCCAAKAIEQgA3AwggAEEQahC/JSACIQAMAgsgAEIANwIIIABBBGoQyi0gAiEADAELIABCADcCMAJAAkACQCAAKAIIQQFrDgIBAgALIABBEGoQgSEgAiEADAILIABBEGoQgCEgAiEADAELIABBDGoQkBIgAiEADAALAAsFIAFCADcDECABQgA3AwAgASgCICEBDAELCwsLkAIBA38gACgCCEEMbCEDIAAoAgQhAANAIAMEQAJAIAAoAgAEQCAAIAEQ6CwMAQsCQAJAAkACQAJAAkBBBCAAKAIEIgIoAgBBBWsiBCAEQQZPG0EBaw4FAQIDBAUACyABIAIpAwggAkEYaigCABCdHQwFCyACQQhqIAEQgSIgAkEoaiABEOgsDAQLIAEgAikDECACQSBqKAIAEJ0dIAJBKGogARDoLAwDCyACQQhqIAEQgSIgAkEoaiABEO0jDAILIAIgARCBIiACQSBqIAEQ7iMgAkHoAGogARDxLCACQcgAaiABEO0jDAELIAJBCGogARCBIiACKAIoIAEQlhILIABBDGohACADQQxrIQMMAQsLC+wBAQV/IAAgACgCAEEBayIBNgIAAkAgAQ0AAkAgACgCGCICRQRAQQAhAQwBCyAAKAIMIgEgACgCFCIDIAFBACABIANNG2siA2siBSACSQRAIAIgBWshBAwBCyACIANqIQELIABBEGooAgAiAiADQQJ0aiEFIAEgA2shAQNAIAEEQCAFKAIAEO0OIAFBAWshASAFQQRqIQUMAQUDQCAEBEAgAigCABDtDiAEQQFrIQQgAkEEaiECDAELCyAAKAIMIABBEGooAgBBBEEEELsiIAAgACgCBEEBayIBNgIEIAENAiAAQSBBBBDCEQsLCwumAgECfyMAQRBrIgIkAAJ/AkACQAJAAkACQEEEIAAoAgAiACgCAEGAgICAeHMiAyADQQRPG0EBaw4EAQIDBAALIAIgAEEIajYCDCABQfGZwwBBD0GAmsMAQQMgAkEMakGYARDCCwwECyACIABBCGo2AgwgAUGDmsMAQQ1BkJrDAEEHIABBBGpBmQFBl5rDAEEHIAJBDGpBIRCOCwwDCyACIABBBGo2AgwgAUGemsMAQQ1BkJrDAEEHIAJBDGpBmgEQwgsMAgsgAiAAQQRqNgIMIAFBq5rDAEESQZCawwBBByACQQxqQZoBEMILDAELIAIgADYCDCABQb2awwBBCUGQmsMAQQcgAEEMakGZAUHBjdoAQQQgAkEMakGbARCOCwsgAkEQaiQAC5ECAQN/IwBBQGoiBSQAAkAgASgCGCIEQf7///8HTQRAAkACQAJAAkAgAigCAEECaw4GAAMDAwECAwsgAigCDEEDdCEDDAILIAIoAgxBAnQhAwwBCyACKAIMQQJ0IQMLIAEgASgCNCADajYCNCABKAIQIARGBEAgAUEQahDoFgsgASAEQQFqNgIYIAEoAhQgBEEEdGoiAyACKQIANwIAIANBCGogAkEIaikCADcCACAFIAEQ9BcgBSgCACIBQSpGBEAgAEEqNgIAIAAgBDYCBAwCCyAAQQRqIAVBBHJBPBD2BhogACABNgIADAELIABB/////wc2AgggACAENgIEIABBJjYCACACEKAZCyAFQUBrJAAL9QEBC38gASgCCCIDQRxsIQQgA0H/////A3EhCCACLQAYIgtBB0YhCSABKAIEIgYhBwJAA0AgBEUEQCABKAIAIANGBEAgARDmFiABKAIEIQYLIAEgA0EBajYCCCAGIANBHGxqIgEgAikCADcCACABQRhqIAJBGGooAgA2AgAgAUEQaiACQRBqKQIANwIAIAFBCGogAkEIaikCADcCAEEAIQoMAgsCQCAHLQAYIgxBB0YiDSAJc0UEQEEBIQogCSANciALIAxGcg0BCyAHQRxqIQcgBUEBaiEFIARBHGshBAwBCwsgBSEICyAAIAg2AgQgACAKNgIAC7IIAgt/AX4jAEEQayIFJAAgAEHAAWohCgNAQQAhASAFQQA6AAwgBUEANgIIIAUgACgCwAEiAjYCACAFIAAoAsQBIAJrIgI2AgQDQAJAIAEgAk8NACAFKAIAIAFqLQAAQQJ0QZCQ2gBqKAIAIgJFDQAgBSACEQUAIQIgBSgCCCEBIAJFDQAgBSABIAJqIgE2AgggBSgCBCECDAELCyAFLQAMIAogARDSKEEBRgRAIABBAToAvQELAkACQAJAIAAoAsQBIgIgACgCwAEiAUYNACABLQAAQS9HDQAgASACEJAcQS9GDQEgASACEJAcQSpGDQILIAVBEGokAA8LIABBAhC5BQwBC0EAIQIjAEEgayIIJAAgACgC0AEhByAAQcABaiIBQQIQ0iggACgC0AEhCwJAIAAoAsABIgQgACgCxAFGDQAgBC0AAEEqRw0AIAEQoRVBASECC0EBIQYCQCAALQC9AQ0AIAAtALoBIgRBD0YNAAJAAkBBDSAEQQJrIgQgBEENTxtBA2tBH3cOBgAAAgICAQILQQAhBgwBCyAALQC7AUEBcyEGCwNAAkACQAJAIAAoAsABIAAoAsQBEOMcIgRBgIDEAEcEQAJAIAIgBEEvRnFFBEAgBBDzHQ0BDAQLIAEQoRUgACgC0AEhBEEAIQIjAEEQayIBJAAgAUEAOgAMIAFBADYCCCABIAAoAsABIgM2AgAgASAAKALEASADayIDNgIEIABBwAFqA0ACQCACIANPDQAgASgCACACai0AAEECdEGQkNoAaigCACIDRQ0AIAEgAxEFACEDIAEoAgghAiADRQ0AIAEgAiADaiICNgIIIAEoAgQhAwwBCwsgAS0ADCEDIAIQ0iggA0EBRgRAIABBAToAvQELIAFBEGokACAAKALAASIBIAAoAsQBRwR/IAEtAABBO0cgBnEFIAYLQQFxIQkjAEFAaiIBJAACQCAAKAIAQQFHDQAgASAAQcABaiALIAQQwBUgASgCACECAkAgASgCBCIDQQJrIgYEQCADQQJJDQEgAiAGaiwAAEG/f0wNAQsgAEEEaiEDIAAoAugBQQhqIAIgBhDtGSEMIAEgByAEIAQgB0kbNgIUIAEgByAEIAQgB0sbNgIQIAFBAToAGCABIAw3AwggACgCwAEgACgCxAEQkBwaIAlFBEAgAUEoaiABQRBqKQMANwMAIAFBMGogAUEYaikDADcDACABQQE6ADwgASABKQMINwMgIAEgACgCqAE2AjggAyABQSBqENAQDAILIAMgAUEIahDAEgwBCyACIANBACAGQZjm2AAQvSYACyABQUBrJAAMAgsgAEEBOgC9AQwCCyAAKALYASEBIAhBGjoACCAAKALcASAALQCCAiABIAEgCEEIahCvEQsgCEEgaiQADAELIAEQoRUgBEEqRiECDAELCwwA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BAwBC0EAIQMLIAAgATYCBCAAIAM2AgAgAkEgaiQAC+gBAQN/IwBBIGsiAiQAAkAgAygCECIGIAMoAhQiB00EQCABQQRqIQEgAygCAEEBa0ECTwRAIAJBFGoiCCABIAMoAgggAygCDCAGIAcQzwQgAkEEaiAIEOMbDAILIAJBFGoiByABIAMoAgggAygCDCAGIAIQxhEgAkEEaiAHEOMbDAELIAJBADYCBAtBASEDAkAgAigCBEEBRgRAIAIoAhAhASAFRQ0BIAIoAgwhBiAEIAIoAghBAWo2AgAgBUEBRg0BIAQgBkEBajYCBAwBC0EAIQMLIAAgATYCBCAAIAM2AgAgAkEgaiQAC4kCAQJ/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkBBBCAAKAIAKAIAIgAoAgBBBWsiAyADQQZPG0EBaw4FAQIDBAUACyACIABBCGo2AgwgAUHHhdoAQQkgAkEMakHUAhDECgwFCyACIABBCGo2AgwgAUHQhdoAQQggAkEMakGvBBDECgwECyACIABBCGo2AgwgAUH4p+AAQQYgAkEMakGwBBDECgwDCyACIABBCGo2AgwgAUHYhdoAQQYgAkEMakGxBBDECgwCCyACIAA2AgwgAUHehdoAQQYgAkEMakGyBBDECgwBCyACIABBCGo2AgwgAUHkhdoAQQYgAkEMakGzBBDECgsgAkEQaiQAC4ACAQN/IAAoAghBDGwhAyAAKAIEIQADQCADBEACQCAAKAIABEAgACABEMIrDAELAkACQAJAAkACQAJAQQQgACgCBCICKAIAQQVrIgQgBEEGTxtBAWsOBQECAwQFAAsgASACQQhqEPoIDAULIAEgAkEIahDYISACQShqIAEQwisMBAsgASACQRBqEPoIIAJBKGogARDCKwwDCyABIAJBCGoQ2CEgASACQShqEMIjDAILIAEgAhDYISACQSBqIAEQwyMgAkHoAGogARDDKyABIAJByABqEMIjDAELIAEgAkEIahDYISACKAIoIAEQjBILIABBDGohACADQQxrIQMMAQsLC4sCAQN/AkACQAJAAkACQAJAAkAgACgCAEEBaw4GAAECBgUDBAsgACgCDEEobCECIAAoAgghAANAIAJFDQQgACgCAEEHRwRAIAAgARCACQsgAEEoaiEAIAJBKGshAgwACwALIABBBGogARD1LQ8L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AiAGEG0gBCgCKCEFIAQoAiQiCEECRgRAIAAgBTYCBEECIQMMAQsgBCgCLCEGIAhBAUYNAQsLIAAgAzYCAAwCCwJAAkAgBiADKAIMIgFPBEAgASAGRg0BDAILIAMoAgggBmosAABBv39MDQELIAAgBjYCCCAAIAU2AgQgAEEBNgIADAILIAAgBjYCCCAAIAU2AgQgAEEANgIADAELIAAgBjYCCCAAIAU2AgQgAEEBNgIACyAEQTBqJAAMBAsgAUUNASAHKAIIIQUgBygCDAs2AgggACAFNgIEIABBATYCAAwCCyAAQQA2AgAMAQsgBygCCCEBIABBAjYCACAAIAE2AgQLIAdBEGokAAvMAQEDfyMAQSBrIgIkAAJAAkAgAkEUakEMQQgCfyABQQhPBEAgAUH/////AUsNAkF/IAFBA3RBB25BAWtndkEBagwBC0EEQQggAUEESRsLIgEQ6A0gAigCFCIDRQ0AIAIoAhwhBCACQQhqIAMgAigCGBCZHiACKAIIIgNFDQEgAyAEakH/ASABQQhqEIULIQMgACABQQFrIgQ2AgQgAEEANgIMIAAgAzYCACAAIAQgAUEDdkEHbCABQQlJGzYCCCACQSBqJAAPCxCWGwsAC+IBAgp/An4gASgCACACKAIMIgZBHGxqIgNBCGoiBykCACENIANBEGoiCCkCACEOIANBGGoiCSgCACEKIAAoAgQhCyACKAIIIgEoAgQhDCAAKAIAIQQgASgCACEFIAIoAgAiACADKQIANwIAIABBGGogCjYCACAAQRBqIA43AgAgAEEIaiANNwIAIAkgAUEYaigCADYCACAIIAFBEGopAgA3AgAgByABQQhqKQIANwIAIAMgASkCADcCACACIAYgCyAMSyAEIAVLIAQgBUYbajYCDCACIAE2AgAgAiABQRxqNgIIC+IBAgp/An4gASgCACACKAIMIgZBHGxqIgNBCGoiBykCACENIANBEGoiCCkCACEOIANBGGoiCSgCACEKIAAoAgQhCyACKAIIIgEoAgQhDCAAKAIAIQQgASgCACEFIAIoAgAiACADKQIANwIAIABBGGogCjYCACAAQRBqIA43AgAgAEEIaiANNwIAIAkgAUEYaigCADYCACAIIAFBEGopAgA3AgAgByABQQhqKQIANwIAIAMgASkCADcCACACIAYgCyAMTyAEIAVP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ACkDCBDdGgu+AQEGfyAAKAIAIgRBBGogBC8BMiIFQQFqIgcgACgCCCIDIAEQrRUgA0EBaiEAIARBNGohASADQQJqIgggBUECaiIGSQRAIAEgCEECdGogASAAQQJ0aiAFIANrQQJ0EL0tGgsgASAAQQJ0aiACNgIAIAQgBzsBMiAGIAAgACAGSRshAiADQQJ0IARqQThqIQEDQCAAIAJGRQRAIAEoAgAiAyAAOwEwIAMgBDYCACABQQRqIQEgAEEBaiEADAELCwvBAQEEfyMAQSBrIgIkACABKAKABiEDIAJBCGoiBCABQaQDaiIFIAEoAvwFQQEQugYCQCACKAIIIgFBA0YEQCAEIAUgA0EBELoGIAIoAggiAUEDRgRAQQMhAQwCCyAAIAIpAgw3AgQgAEEUaiACQRxqKAIANgIAIABBDGogAkEUaikCADcCAAwBCyAAIAIpAgw3AgQgAEEUaiACQRxqKAIANgIAIABBDGogAkEUaikCADcCAAsgACABNgIAIAJBIGokAAvQAQEHfyACIAAoAgQgACgCABDLGSEDIABBDEEIIAIgACgCDCAAKAIIEMsZIgQbaiEFIAIgAEEIQQwgBBtqIgYgACADQQFzQQJ0aiIEIAUgAiAFKAIAIAAgA0ECdGoiACgCABDLGSIDGyACIAYoAgAgBCgCABDLGSICGyIHKAIAIAAgBSAEIAIbIAMbIggoAgAQyxkhCSABIAUgACADGygCADYCACABIAcgCCAJGygCADYCBCABIAggByAJGygCADYCCCABIAQgBiACGygCADYCDAvNAQEIfwJAAkAgACgCACICQYCAgIB4RiABKAIAIgNBgICAgHhGckUEQCAAKAIIIgIgASgCCEcNAiACQQFqIQUgACgCBEEIaiECIAEoAgRBCGohAwNAIAVBAWsiBUUNAiADQQRrIQYgAkEEayADKAIAIQggAigCACEJIAJBDGohAiADQQxqIQMoAgAgCSAGKAIAIAgQ0h8NAAsMAgsgAkGAgICAeEcgA0GAgICAeEdyDQELIAAoAgwgASgCDEYgACgCECABKAIQRnEhBAsgBAv4AQECfyMAQTBrIgIkAAJAIAApAwBC////////////AINCgICAgICAgPj/AFoEQCACQQE2AhQgAkHI7+AANgIQIAJCATcCHCACQfQBNgIsIAIgADYCKCAC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AyACQQFqQey84AAQzh8iAi0AIEEBRw0AAkACQCACKAIAIgNBCWsOAwECAQALAkAgA0ERaw4EAQICAAILIAItAAQiAkEOS0EBIAJ0QYCwAXFFcg0BCyAEQQxqQZi94AAQrCpFBEAgACABQTsQiRgMAQsgACAGKAIYQTsQiRgLIARBEGokAAu5AQEFfyADQfj///8BcQRAIAAgACADQQN2IgNBoAFsIgVqIAAgA0GYAmwiBGogAxC4CiEAIAEgASAFaiABIARqIAMQuAohASACIAIgBWogAiAEaiADELgKIQILIAAoAhwiBCABKAIcIgZJIAAoAhgiAyABKAIYIgVJIAMgBUYbIgcgBCACKAIcIghJIAMgAigCGCIESSADIARGG0YEfyACIAEgByAGIAhJIAQgBUsgBCAFRhtzGwUgAAsLwQEBCX8gACAAKAIEIgMgACgCACIFSUECdGoiAiAAQQxBCCAAKAIMIAAoAghJIgYbaiIEIAAgAyAFT0ECdGoiAyAAQQhBDCAGG2oiACgCACADKAIASSIFGyAEKAIAIgcgAigCACIISSICGyIGKAIAIQkgACADIAQgAhsgBRsiBCgCACEKIAEgByAIIAIbNgIAIAEgBCAGIAkgCksiAhsoAgA2AgQgASAGIAQgAhsoAgA2AgggASADIAAgBRsoAgA2AgwLyQEBAX8jAEEwayICJAACfyAALQAEQQFGBEAgAiAALQAFOgAHIAJBAjYCHCACQaz4wAA2AhggAkICNwIkIAIgAK1CgICAgJABhDcDECACIAJBB2qtQoCAgIDAB4Q3AwggAiACQQhqNgIgIAEoAhQgASgCGCACQRhqEIoEDAELIAJBATYCHCACQej4wAA2AhggAkIBNwIkIAIgAK1CgICAgJABhDcDCCACIAJBCGo2AiAgASgCFCABKAIYIAJBGGoQigQLIAJBMGokAAvIAQEJfyMAQSBrIgMkACADQQA2AhwgAyABNgIUIAMgATYCDCADIAI2AhAgAyABIAJqIgQ2AhggA0EUaiEHIAEhAgJAA0AgBCEIIAIhCSADIAcQnxMgAygCBCIFQYCAxABGDQEgAygCACEKIAMoAhQhAiADKAIYIQQgBUEJayILQRdNQQBBASALdEGfgIAEcRsNACAFQYABTwRAIAUQ+A4NAQsLIAggCmogBCAJamsgAmohBgsg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BSADSQ0ACwsgAkEDcSECCyACBEAgAiADaiECA0AgAyABOgAAIANBAWoiAyACSQ0ACwsgAAvUAQEEfyMAQRBrIgMkACACQf////8HSQRAIAMgASgCCCIEEMgcAkAgAygCAEUEQCADKAIEIQUgASgC2AIhBiABKAIAIARGBEAgARDZFgsgACAFNgIEIABBAzYCACABIARBAWo2AgggASgCBCAEQRRsaiIAIAI2AhAgACAGNgIMIABBADYCCCAAQgA3AgAMAQsgACADKQMINwMQIABC/v///wc3AwggAEEANgIACyADQRBqJAAPCyADIAKtNwMAQcyJwABBNCADQfCCwABBgIrAABDDDgALuAIBA38CfyABKAIEIgIgASgCEEcEQCAAQQxqIAEQ1hIgAEEUaiEBIABBEGoMAQsgACgCBCIDIAAoAggiACACQQFrIgJB9LvWABCjHyABENYSIAMgACACQYS81gAQox8iAEEIaiEBIABBBGoLIQICQCABKAIAIgBBAkkNACACKAIAIQIgAEEVTwRAIwBBkCBrIgEkAAJAIABBAXYiA0GVrBQgACAAQZWsFE8bIgQgAyAESxsiA0GrAU8EQCABQQhqIANBBEEYEOwUIAIgACABKAIMIgIgASgCCCIDIABBwQBJENgBIAMgAhDYKQwBCyACIAAgAUEQakGqASAAQcEASRDYAQsgAUGQIGokAAwBCyAAQRhsIQBBGCEBA0AgACABRg0BIAIgASACahDcCSABQRhqIQEMAAsACwu+AQEDfyMAQRBrIgMkACAAKAIAIQQCQANAIAJBA00EQAJAIAJBAUsNAAwDCwUgASgAACADQQQgASACQeDP2AAQ+BwgBEEFd3NBufPd8XlsIQQgAygCBCECIAMoAgAhAQwBCwsgAS8AACADQQhqQQIgASACQdDP2AAQ+BwgBEEFd3NBufPd8XlsIQQgAygCDCECIAMoAgghAQsgACACBH8gAS0AACAEQQV3c0G5893xeWwFIAQLNgIAIANBEGokAAvKAQEFfyMAQSBrIgEkACAAKAIIIQQgACgCBCEFQQUhAkEBIQMCQAJAAkAgACgCAEEBaw4CAAIBC0EDIQMLIAFBEGogAEEcaigCADYCACABQQhqIABBFGopAgA3AwAgASAAKQIMNwMAIAMhAgtBKEEIEL0iIgAgBDYCCCAAIAU2AgQgACACNgIAIAAgASkDADcCDCAAQRRqIAFBCGopAwA3AgAgAEEcaiABQRBqKQMANwIAIABBJGogAUEYaigCADYCACABQSBqJAAgAAusAQIHfwF+IwBBEGsiBCQAIARBCGogAkEIQQgQ7BQgAkEDdCEIIAQoAgwhByAEKAIIIgkhBQJAA0AgBUUgAyAIRnJFBEAgASADaikDACIKQgODUARAIAqnQQhrIgYgBigCACIGQQFqNgIAIAZBAEgNAwsgAyAHaiAKNwMAIAVBAWshBSADQQhqIQMMAQsLIAAgAjYCCCAAIAc2AgQgACAJNgIAIARBEGokAA8LAAu4AQEEfyMAQRBrIgYkACABLQCCAiEHIAEtAIECIQggAS0AgAIhCSAGQQhqIAIgAyAEIAVBrJTAABDaFiAGIAkgCCAHIAYoAgggBigCDBDeBCAAAn8CQCAGKAIAQQFxBEAgBigCBCAEaiIFIANJDQEgBSADQbyUwAAQnxAAC0EADAELIAAgBCAFIAEgAiAFai0AAGotAABrIgFBACABIAVNGyIBIAEgBEkbNgIEQQILNgIAIAZBEGokAAu6AQECfyAAIAAtAA0gAS0ADSICIAJBA0YbOgANIAAgAC0ADCABLQAMIgIgAkECRhs6AAwgACAALQALIAEtAAsiAiACQQJGGzoACyAAIAAtAAogAS0ACiICIAJBAkYbOgAKIAAgAUEJaiAAQQlqIAEtAAgiAhstAAA6AAkgACAAKAIAIAEoAgAiAyADQQJGIgMbNgIAIAAgAiAALQAIckEBcToACCAAIABBBGogAUEEaiADGygCADYCBCAAC8EBAQJ/IwBBMGsiAiQAIAJBADYCICACQQE2AhQgAkHUlsMANgIQIAJCBDcCGAJ/QQEgASgCFCIDIAEoAhgiASACQRBqEJskDQAaIAIgACgCADYCCANAIAIgAkEIahCdGUEAIAIoAgBFDQEaIAIgAigCBDYCDCACQQE2AhQgAkG0lsMANgIQIAJCATcCHCACQRA2AiwgAiACQShqNgIYIAIgAkEMajYCKCADIAEgAkEQahCbJEUNAAtBAQsgAkEwaiQAC8cBAQF/IwBBEGsiCyQAIAAoAhQgASACIAAoAhgoAgwRAwAhASALQQA6AA0gCyABOgAMIAsgADYCCCALQQhqIAMgBCAFIAYQ7gYgByAIIAkgChDuBiEBIAstAA0iAiALLQAMIgNyIQACQCADQQFxIAJBAUdyDQAgASgCACIALQAcQQRxRQRAIAAoAhRBu9HWAEECIAAoAhgoAgwRAwAhAAwBCyAAKAIUQa+u4ABBASAAKAIYKAIMEQMAIQALIAtBEGokACAAQQFxC7UBAQV/IwBBIGsiAiQAIAJBCGogAUEEQQQQqhQgAkEANgIcIAIgAikDCDcCFCACQRRqIAEQvx5BASABIAFBAU0bIgVBAWshAyACKAIYIAIoAhwiBkECdGohBAJAA0AgAwRAIARBADYCACADQQFrIQMgBEEEaiEEDAEFAkAgBSAGaiEDIAENACADQQFrIQMMAwsLCyAEQQA2AgALIAAgAikCFDcCACAAQQhqIAM2AgAgAkEgaiQAC80BAQF/IAAQhRIgACgCBCIAQRRqIgEoAgAgAEEYaigCABDNHCAAKAIQIAEoAgAQ0CkgACgCAEECRwRAIAAoAgQgAEEIaigCABCtJAsgACgCHCAAQSBqKAIAENEpIABBLGoiASgCACAAQTBqKAIAEM4cIAAoAiggASgCABDSKSAAQThqIgEoAgAgAEE8aigCABDXECAAKAI0IAEoAgAQzikgAEHEAGoiASgCACAAQcgAaigCABDoEyAAKAJAIAEoAgAQzykgAEHQAEEEEMIRC6YBAQN/AkACQCABLQAAIgMgAUECay0AACICRgRAIAEtAAEiAiABQQFrLQAASQ0BDAILIAIgA00NASABLQABIQILIAFBBGshAQNAAkAgAUEEaiABQQJqIgQvAAA7AAAgACAERg0AAkAgAS0AACIEIANGBEAgAiABQQFqLQAASQ0BDAILIAMgBE8NAQsgAUECayEBDAELCyABQQJqIAJBCHQgA3I7AAALC6ABAQV+IAAgACkDGCIBQhCJIAEgACkDCHwiAYUiAkIViSACIAApAxAiAyAAKQMAfCIEQiCJfCIChSIFQhCJIAUgASADQg2JIASFIgN8IgFCIIl8IgSFIgUgAiABIANCEYmFIgF8IgJCIIl8IgM3AwAgACAFQhWJIAOFNwMYIAAgAUINiSAChSIBQhGJIAEgBHwiAYU3AxAgACABQiCJNwMIC7cBAgZ/AX4jAEHgAGsiASQAEOIiIAAoAgAiACkDACEHIAFBCGogAEEIahC8GyAALQBEIQMgAEEgahCXDyEEIAFBOGogAEE4ahD8CiAAKAIwIQUgACgCNCEGIAFBzABqIABBJGoQkgMgAUE0aiAGNgIAIAEgBTYCWCABQSxqIAFB1ABqKQIANwIAIAEgAzoARCABIAc3AwAgASAENgIgIAEgASkCTDcCJCABQcgAEPYGIAFB4ABqJAALwwEBA38jAEEgayIBJAAgACgCACICKAIAIQMgAkEANgIAIAMoAhAhAiADQQA2AhAgAgRAIAFBCGogAhEBACAAKAIEIgMoAgAiACgCAEGAgICAeEcEQCAAEIgcIAAoAgAgAEEEaigCABD5KSADKAIAIQALIAAgASkCCDcCACAAQQhqIAFBEGooAgA2AgAgAUEgaiQAQQEPCyABQQA2AhggAUEBNgIMIAFB/O/gADYCCCABQgQ3AhAgAUEIakHg8OAAEKgdAAu6AQEJfyMAQRBrIgMkAAJAIAIgACgCCCIFTQRAIAJBFGwhAiAAKAIAIgZBBGshByAAKAIEIQggACgCDCEEA0AgAkUNAiADQQhqIAYgCCABNQIQEJodIAMtAAwhCSADKAIIIQogACAEQQFqIgs2AgwgByAKQQJ0ayAENgIAIAAgBSAJQQFxayIFNgIIIAJBFGshAiABQRRqIQEgCyEEDAALAAtB8LHfAEHFAEGYs98AEOEXAAsgA0EQaiQAC80BAQF/IAAQhRIgACgCBCIAQRRqIgEoAgAgAEEYaigCABDNHCAAKAIQIAEoAgAQ0CkgACgCAEECRwRAIAAoAgQgAEEIaigCABC+KQsgACgCHCAAQSBqKAIAENEpIABBLGoiASgCACAAQTBqKAIAEM4cIAAoAiggASgCABDSKSAAQThqIgEoAgAgAEE8aigCABDXECAAKAI0IAEoAgAQzikgAEHEAGoiASgCACAAQcgAaigCABDoEyAAKAJAIAEoAgAQzykgAEHQAEEEEMIRC9gBAQF/IwBB8ABrIgQkACAEIAM2AiwgBEEANgIoIARB4QA2AiQgBCAAQRxqNgIgIARBAjYCHCAEQcjv4AA2AhggBEECNgIUIARBAzYCBCAEQejF3wA2AgAgBEEDOgBsIARBADYCaCAEQqCAgIAQNwJgIARCgoCAgCA3AlggBEECNgJQIARBAzoATCAEQQA2AkggBEIgNwJAIARCgYCAgCA3AjggBEECNgIwIAQgBEEwajYCECAEQQM2AgwgBCAEQRhqNgIIIAEgBCACKAIUEQIAIARB8ABqJAALzgEBA38jAEHQAGsiAiQAIAFBKGoQxCAhAyACQQA7AB4gAiABLQCQAzoAHSACIAEpAYIDNwAPIAIgAUGKA2oiBCgBADYAFyACIAEvAY4DOwAbIAIgASkAkwM3ACAgAiABKACbAzYAKCACQcUAaiABQZcDaikAADcAACACQUBrIAFBkgNqKQEANwIAIAJBOGogBCkBADcCACACIAEpAYIDNwIwIAFBgAFqIAJBD2oQvwggAiABNgIsIAAgASADEEkgAkEsahCQJiACQdAAaiQAC6QBAQJ/IwBBEGsiAyQAIANBADYCDAJ/IAJBgAFPBEAgAkGAEE8EQCADIAJBP3FBgAFyOgAOIAMgAkEMdkHgAXI6AAwgAyACQQZ2QT9xQYABcjoADUEDDAILIAMgAkE/cUGAAXI6AA0gAyACQQZ2QcABcjoADEECDAELIAMgAjoADEEBCyICIAFNBEAgA0EMaiACIAAgAhDSHyEECyADQRBqJAAgBAusAQECfwJAAkAgAEH/AE8EQCAAQZ8BSwR/IABBBnZB/wBxIABBDXZBgOPiAGotAAAiAkEHdHIhASACQRJLDQIgAEECdkEPcSABQYDl4gBqLQAAIgJBBHRyIQEgAkHuAU8NA0EBIAFBgPjiAGotAAAgAEEBdEEGcXZBA3EiACAAQQNGGwUgAQsPCyAAQR9LDwsgAUGAE0Hc2uAAEJ8QAAsgAUHgHUHs2uAAEJ8QAAu4AQECfyMAQTBrIgYkACAGQQE7ASggBiADNgIkIAYgAjYCICAGIAM2AhxBACEDIAZBADYCGCAGQQRqIgIgBkEYaiIHIAQgBRDSCiAHIAFBMGogAhC2KiAGKAIYIgFBAkcEQCAAIAFBAXEEfyAGKAIcIQEgACAGKAIgNgIIIAAgATYCBEEBBSADCzYCACAGQTBqJAAPCyAGIAYoAhw2AixBiLrDAEEiIAZBLGpB9LXDAEGcu8MAEMMOAAuwAQEDfyMAQSBrIgIkAAJAIAMoAhAiBSADKAIUIgZNBEAgAygCAEEBa0ECTwRAIAJBFGoiBCABIAMoAgggAygCDCAFIAYQhQcgAkEEaiAEEOMbDAILIAJBFGoiBCABIAMoAgggAygCDCAFIAYQmwsgAkEEaiAEEOMbDAELIAJBADYCBAtBACEDIAAgAigCBEEBRgR/IAAgAikCDEIgiTcCBEEBBSADCzYCACACQSBqJAALsAEBA38jAEEgayICJAACQCADKAIQIgUgAygCFCIGTQRAIAMoAgBBAWtBAk8EQCACQRRqIgQgASADKAIIIAMoAgwgBSAGEPcLIAJBBGogBBDjGwwCCyACQRRqIgQgASADKAIIIAMoAgwgBSAGEKkQIAJBBGogBBDjGwwBCyACQQA2AgQLQQAhAyAAIAIoAgRBAUYEfyAAIAIpAgxCIIk3AgRBAQUgAws2AgAgAkEgaiQAC7QBAQN/IwBBEGsiAiQAAkAgAygCECIEIAMoAhQiBU0EQCABQQRqIQEgAygCAEEBa0ECTwRAIAJBBGoiBiABIAMoAgggAygCDCAEIAUQ+gUgACAGEOMbDAILQQAhBQJAIAQgAygCDE8NACABLQAAIAMoAgggBGotAABHDQAgAiAENgIIQQEhBSACIARBAWo2AgwLIAIgBTYCBCAAIAJBBGoQ4xsMAQsgAEEANgIACyACQRBqJAALqAECAn8BfiMAQRBrIgQkACAAAn8CQCACIANqQQFrQQAgAmtxrSABrX4iBkIgiKcNACAGpyIDQYCAgIB4IAJrSw0AIANFBEAgACACNgIIIABBADYCBEEADAILIARBCGogAiADEJkeIAQoAggiBQRAIAAgBTYCCCAAIAE2AgRBAAwCCyAAIAM2AgggACACNgIEQQEMAQsgAEEANgIEQQELNgIAIARBEGokAAu9AQEEfyMAQSBrIgMkAAJAIAFFBEAgAkEBQQAQpgMhAAwBCyADIAE2AgwgAyAANgIIIANBEGogA0EIahDXBCADKAIQIgEEQCACKAIYIQQgAigCFCEFA0AgAygCFCEGIAMoAhxFBEAgAiABIAYQpgMhAAwDC0EBIQAgBSABIAYgBCgCDBEDAA0CIAVB/f8DIAQoAhARAgANAiADQRBqIANBCGoQ1wQgAygCECIBDQALC0EAIQALIANBIGokACAAC7gBAgZ/AX4CQCAAKAIMIgFFBEAgACgCACEADAELIAAoAgghBCABKAIAIgIgAUEEaigCACIFIAApAwAiBxDvDiIAIAJqIgMtAAAhBiADIAenQRl2IgM6AAAgAiAFIABBCGtxakEIaiADOgAAIAEgASgCDEEBajYCDCABIAEoAgggBkEBcWs2AgggAiAAQQR0ayIAQQRrQQA2AgAgAEEMa0KAgICAgAE3AgAgAEEQayAENgIACyAAQQxrC8wBAQR/IwBB0ABrIgIkACABQShqIgMQqiAhBCACQQA7AB4gAiABLQC4AjoAHSACIAEpAaoCNwAPIAIgAUGyAmoiBSgBADYAFyACIAEvAbYCOwAbIAIgASkAuwI3ACAgAiABKADDAjYAKCACQcUAaiABQb8CaikAADcAACACQUBrIAFBugJqKQEANwIAIAJBOGogBSkBADcCACACIAEpAaoCNwIwIAMgAkEPahDHCCACIAE2AiwgACABIAQQSiACQSxqEPUkIAJB0ABqJAALxAECAn8BfiMAQfAAayICJAAgAkEDNgIQIAJBAzYCMCACQQA7AG0gAkHQAGpB2JjjACkDACIENwMAIAJB4ABqIAQ3AwAgAiAANgJoIAIgAC0AODoAbCACQdCY4wApAwAiBDcDSCACIAQ3A1ggAkHIAGoiAyABEJAHIAMQ7CggAkEoahDLFCABKAIIQTBsIQMgASgCBCEBA0AgAwRAIAEgABD5ASADQTBrIQMgAUEwaiEBDAELCyACQQhqEMsUIAJB8ABqJAALwgEBA38gAEFAayABEO4YIABBkAFqIQQgACgChAFB2ABsIQMgACgCgAEhAgNAAkAgAwRAAkACQAJAAkAgAigCAEEBaw4FAAECBQMFCyACQQRqIAEQ8yEMBAsgAkEEaiABEN0sDAMLIAJBBGogARC8DwwCCyACQQRqIAEQwCsMAQsgACgCeCICBEAgASACELceCyAEIAEQvA8gAC0APEEGRwRAIABBEGogARDuGAsPCyACQdgAaiECIANB2ABrIQMMAAsAC8wBAQF/IwBBEGsiAiQAAkAgAC0ABEEBRw0AAkACQAJAAkACQCABKAIAQQFrDgQCAAMEAQsCQCAALQAFDQAgASsDEJlEAAAAAAAA8H9iDQAgAEEAOgAECyAAIAAoAgBBBWo2AgAMBAsgAiABQQhqEJEMIAAgAigCBCAAKAIAakECajYCAAwDCyACQQhqIAFBCGoQkQwgACACKAIMIAAoAgBqQQJqNgIADAILIAFBBGogABCILSAAQQA6AAQMAQsgAEEAOgAECyACQRBqJAALrwEBBX8jAEEwayIDJAAgAUEwbCAAKAIIQTBsIgFrIQQgACgCBCABaiEFIAIoAgQhASACKAIMIQYDQAJAIAQEQAJAIAEgBkYEQCADQRM2AgAMAQsgAiABQTBqIgc2AgQgAyABQTAQ9gYoAgBBE0cNAgsgAxCJJgsgA0EwaiQAIARFDwsgBSABQTAQvS0aIAAgACgCCEEBajYCCCAEQTBrIQQgByEBIAVBMGohBQwACwAL0wEBAX8jAEHwAGsiAyQAIAMgAjYCLCADQQA2AiggA0HhADYCJCADIABBHGo2AiAgA0ECNgIcIANByO/gADYCGCADQQI2AhQgA0EDNgIEIANB6MXfADYCACADQQM6AGwgA0EANgJoIANCoICAgBA3AmAgA0KCgICAIDcCWCADQQI2AlAgA0EDOgBMIANBADYCSCADQiA3AkAgA0KBgICAIDcCOCADQQI2AjAgAyADQTBqNgIQIANBAzYCDCADIANBGGo2AgggASADELYkIANB8ABqJAALwwEBA38jAEGwB2siAiQAIAEoApQNKAK8AiIDIAMoAgAiBEEBajYCACAEQQBOBEAgAiADEOsXIAJB6ARqIAEoAqAKENYeIAJB1AVqIAEoArgKENceIAJB2ARqIAEoAtQKIAEoAvgKEOUOIAJB2AFqIAEQkhUCQCABKQOgDUICUQRAIAJBAjYCoAcMAQsgAkHwBWogAUGgDWoQiwkLIAJBGGogAkHwBWpBwAEQ9gYaIAAgAkHwBRD2BhogAkGwB2okAA8LAAuoAQEDfwJAAkAgASgCACIDIAFBCGsoAgAiAkYEQCABKAIEIgIgAUEEaygCAEkNAQwCCyACIANNDQEgASgCBCECCyABQRBrIQEDQAJAIAFBEGogAUEIaiIEKQIANwIAIAAgBEYNAAJAIAEoAgAiBCADRgRAIAIgAUEEaigCAEkNAQwCCyADIARPDQELIAFBCGshAQwBCwsgAUEIaiADrSACrUIghoQ3AgALC70BAQN/IwBBQGoiAiQAIAIgATYCCCACQQA2AjAgAkIANwIoIAIgACgCSCAAKAJMIAEgAkEoaiIEEOQJIgM2AgwgAyAAKAIoaiIDIAFLBEAgAkEDNgIUIAJB5LvYADYCECACQgM3AhwgAkGWAjYCPCACQQk2AjQgAkGWAjYCLCACIABBKGo2AiggAiAENgIYIAIgAkEIajYCOCACIAJBDGo2AjAgAkEQakH8u9gAEKgdAAsgAkFAayQAIAEgA2sLvQEBA38jAEEgayIBJAAgACgCACICKAIAIQMgAkEANgIAIAMoAhAhAiADQQA2AhAgAgRAIAFBCGogAhEBACAAKAIEIgMoAgAiACgCACICQYKAgIB4TgRAIAIgAEEEaigCABCtJCADKAIAIQALIAAgASkCCDcCACAAQQhqIAFBEGooAgA2AgAgAUEgaiQAQQEPCyABQQA2AhggAUEBNgIMIAFB/O/gADYCCCABQgQ3AhAgAUEIakHg8OAAEKgdAAu+AQEDfyMAQdAAayIBJAAgACgCACICKAIAIQMgAkEANgIAIAMoAlAhAiADQQA2AlAgAgRAIAFBCGogAhEBAAJAIAAoAgQiAygCACIAKAI4IgJBAkYgAkVyDQAgACgCQCICRQ0AIAAoAjwgAkEBEMIRIAMoAgAhAAsgACABQQhqQcgAEPYGGiABQdAAaiQAQQEPCyABQQA2AhggAUEBNgIMIAFB/O/gADYCCCABQgQ3AhAgAUEIakHg8OAAEKgdAAuqAQEEfyMAQUBqIgYkACAGQQA2AhQgBkKAgICAEDcCDCAGQRhqIAMgASACEJ8SA0AgBkE0aiAGQRhqEO4IIAYoAjQEQCAGKAI4IAdrIQMgASAHaiEIIAYoAjwhByAGQQxqIgkgCCADEN0dIAkgBCAFEN0dDAEFIAZBDGogASAHaiACIAdrEN0dIABBCGogBkEUaigCADYCACAAIAYpAgw3AgAgBkFAayQACwsLrgEBA38jAEEQayIGJAAgAS0AgQIhByABLQCAAiEIIAZBCGogAiADIAQgBUGMlMAAENoWIAYgCCAHIAYoAgggBigCDBDoBSAAAn8CQCAGKAIAQQFxBEAgBigCBCAEaiIFIANJDQEgBSADQZyUwAAQnxAAC0EADAELIAAgBCAFIAEgAiAFai0AAGotAABrIgFBACABIAVNGyIBIAEgBEkbNgIEQQILNgIAIAZBEGokAAusAQIEfwJ+IwBBEGsiAiQAQQEhAwJAIAApAwAiBiABKQMAIgdRDQBBACEDIAYgB4VCA4NCAFINACAGEKkSIAcQqRJSDQACQCAGIAeEQgODUEUNACAHpygCECEEIAanKAIQIgVFBEAgBA0BDAILIAQgBUYNAQsgAkEIaiAAEJEMIAIoAgwhACACKAIIIAIgARCRDCAAIAIoAgAgAigCBBDSHyEDCyACQRBqJAAgAwvJAQECfyMAQSBrIgIkACACQQA6ABAgAkLkgICAoB83AgggAkKKgICAoAE3AgAgAkEUaiACIAEQlwECQCACKAIUQYCAgIB4Rg0AIAIoAhxBBHQhASACKAIYIQMDQCABRQ0BIANBADoADCABQRBrIQEgA0EQaiEDDAALAAsgAkEUakEBEJsCAkAgAigCFCIBQYCAgIB4RgRAIABBAjoADAwBCyAAIAIoAhgiACACKAIcIgMQ1A0gACADENUcIAEgABDQKQsgAkEgaiQAC7ABAQN/IwBBEGsiAiQAAkAgAygCECIEIAMoAhQiBU0EQCADKAIAQQFrQQJPBEAgAkEEaiIGIAEgAygCCCADKAIMIAQgBRD4DSAAIAYQ4xsMAgtBACEFAkAgBCADKAIMTw0AIAEgAygCCCAEai0AAGotAABBAUcNACACIAQ2AgggAiAEQQFqNgIMQQEhBQsgAiAFNgIEIAAgAkEEahDjGwwBCyAAQQA2AgALIAJBEGokAAvUAQEBfyMAQRBrIgIkAAJ/AkACQAJAAkACQCAAKAIAKAIAIgAtAABBAWsOBAECAwQACyABKAIUQaudwwBBFCABKAIYKAIMEQMADAQLIAEoAhRBv53DAEEWIAEoAhgoAgwRAwAMAwsgAiAAQQFqNgIIIAFB1Z3DAEERQfH02QBBAyACQQhqQawBEMILDAILIAIgAEEBajYCDCABQeadwwBBFkHx9NkAQQMgAkEMakGsARDCCwwBCyABKAIUQfydwwBBECABKAIYKAIMEQMACyACQRBqJAALqQEBA39BvhYhAiMAQRBrIgMkACADIAA2AgwCQCAAIAFNBEBBACEAA0AgAkEBTQRAIANBDGogASAAQQxsQZymxQBqKAIAEOcgQf8BcUUhAAwDBSAAIAJBAXYiBCAAaiIAIANBDGogASAAQQxsQZymxQBqKAIAEOcgQf8BcUEBRhshACACIARrIQIMAQsACwALQZTA2ABBHkG0yMcAEOEXAAsgA0EQaiQAIAALngEBA38CQCACRQRADAELIAIhBQNAIAVBAU0EQAJAIAEgBEECdGooAgAiASADRyIFBH8gBCABIANJagUgBAsgBWsiBSACTg0AIAVBf3NBH3YhBAwDCwUgBCAFQQF2IgYgBGoiBCABIARBAnRqKAIAIANLGyEEIAUgBmshBQwBCwtBjsfYAEE4QcjH2AAQ4RcACyAAIAU2AgQgACAENgIAC6QBAQN/IwBBEGsiAyQAIAMgAQJ/IAJBCE8EQEF/IAJBA3RBB25BAWtndkEBaiACQf////8BTQ0BGhCWGwALQQRBCCACQQRJGwsQmg0gAygCCCEEIAMoAgQhAQJAIAMoAgAiAgRAIAMoAgwhBSACQf8BIAFBCWoQhQsaIAAgBTYCDAwBC0EAIQILIAAgBDYCCCAAIAE2AgQgACACNgIAIANBEGokAAusAQEHfyMAQSBrIgIkACABKAIEIQcgAkEIaiABKAIIIgRBBEEQEOwUIAIoAggiBSAEQf////8AcSIBIAEgBUsbIQNBACEBIAIoAgwhBgNAIAMEQCACQRBqIAEgB2oQ7R0gASAGaiIIQQhqIAJBGGopAgA3AgAgCCACKQIQNwIAIANBAWshAyABQRBqIQEMAQsLIAAgBDYCCCAAIAY2AgQgACAFNgIAIAJBIGokAAuwAQIFfwF+AkAgASgCGCIFRQ0AIAEoAhAhAyABKAIIIQIgASkDACEHA0AgB0IAUkUEQCABIANBQGoiAzYCECABIAJBCGoiBjYCCCABIAIpAwBCf4VCgIGChIiQoMCAf4MiBzcDACAGIQIMAQsLIAEgBUEBazYCGCABIAdCAX0gB4M3AwAgA0UNACADIAd6p0H4AHFrIgJBBGshASACQQhrIQQLIAAgATYCBCAAIAQ2AgALygECA38BfiMAQUBqIgIkACAAKAIwEKsRIQMgAkE0aiAAQTRqKAIANgIAIAJBADoAKCACQRhqQdiY4wApAwAiBTcDACACQQhqIAU3AwAgAiAANgIgIAIgAzYCJCACQQE6ADkgAiAAKQIsNwIsIAIgAC0APDoAPCACIAAvATo7ATogAkHQmOMAKQMAIgU3AxAgAiAFNwMAIAAtADghBCACIAAtAD06AD0gAiAEOgA4IAMgAUEUahDhISACIAEQowsgAhDnKCACQUBrJAALswEBBn8jAEEQayIDJAAgAUEQaiEFIAAoAghBOGwhBiAAKAIEIQcDQAJAIAQgBkcEQAJAAkACQCAEIAdqIgIoAgBBAWsOAgECAAsgAkEIaiABEP0hIAJBKGogARDrLAwDCyADIAJBEGopAwAgAkEgaigCABCpIyAFIAMpAwAgAygCCBC8CBoMAgsgAkEEaiABEOAlDAELIABBFGogARDqIyADQRBqJAAPCyAEQThqIQQMAAsAC74BAQN/IABBQGsQuyAgAEGQAWohBCAAKAKEAUHYAGwhAyAAKAKAASECA0ACQCADBEACQAJAAkACQCACKAIAQQFrDgUAAQIFAwULIAJBBGogARD8IQwECyACQQRqIAEQ+SwMAwsgAkEEaiABEMIPDAILIAJBBGogARDpLAwBCyAAKAJ4IgIEQCACIAEQnBoLIAQgARDCDyAALQA8QQZHBEAgAEEQahC7IAsPCyACQdgAaiECIANB2ABrIQMMAAsAC6wBAQV/IwBBMGsiAyQAIAFBMGwgACgCCEEwbCIBayEEIAAoAgQgAWohBSACKAIEIQEgAigCDCEGAkADQCAERQ0BIAEgBkcEQCACIAFBBGoiBzYCBCADQgA3AwggA0ESNgIAIAMgASgCADYCBCAFIANBMBD2BiAAIAAoAghBAWo2AgggBEEwayEEQTBqIQUgByEBDAELCyADQRM2AgAgAxCJJgsgA0EwaiQAIARFC7oBAgR/AX4jAEEgayIDJAAgACgCCEE4bCEEIAAoAgQhBUEAIQADQAJAIAAgBEcEQAJAAkACQCAAIAVqIgIoAgBBAWsOAgECAAsgAkEIaiABEKsiIAJBKGogARCtLQwDCyACQTBqIAEQjSQgAS0AKEEBRw0CIANBCGogAkEQahC8GyABIAMpAwgiBiADKAIYEPwRIAYQ3RoMAgsgAkEEaiABEK0tDAELIANBIGokAA8LIABBOGohAAwACwALugECA38BfiMAQSBrIgEkACAAKAIIIgNB/v///wdNBEACQAJAIAAoAhQiAkUNACAAIAJBAWsiAjYCFCAAKAIQIAJBDGxqKQIAIgSnQYCAgIB4Rg0AIAFBADYCECABIAQ3AwgMAQsgAUEANgIQIAFCgICAgMAANwIICyAAIAFBCGoQ2RUgAUEgaiQAIAMPCyABQQA2AhggAUEBNgIMIAFB+KHDADYCCCABQgQ3AhAgAUEIakGAosMAEKgdAAu3AQEBfyMAQSBrIgIkAAJAAkAgARDFLUUEQCACQQRqIAEQ0AcgAigCBEGAgICAeEcEQCACQRhqIAJBDGooAgA2AgAgAiACKQIENwMQIAAgAkEQahDPEQwCC0GAgICAeCACKAIIEJwkIAAgARDlBzYCGCAAQQI2AgAgAEEUaiABQRBqKAIANgIAIABBDGogAUEIaikCADcCACAAIAEpAgA3AgQMAgsgABCnEQsgARCbHgsgAkEgaiQAC64BAgJ/AX4jAEEwayICJAACQCABLQAUQQJGBEAQ4CIhAyABKAIAIgEpAxAhBCACQQhqIAFBGGoQvwsgAkEgaiABELohIAMgBDcDECADQQhqIAJBKGopAwA3AwAgAyACKQMgNwMAIAMgAikDCDcDGCADQSBqIAJBEGopAwA3AwAgA0EoaiACQRhqKQMANwMAIABBAjoAFCAAIAM2AgAMAQsgACABELwbCyACQTBqJAALwQEBA38gAEFAaxC7ICAAQZABaiEEIAAoAoQBQdgAbCEDIAAoAoABIQIDQAJAIAMEQAJAAkACQAJAAkAgAigCAEEBaw4FAQIDBgQACyACKAIIIAJBGGorAwAgARCQHwwFCyACQQRqIAEQoiIMBAsgAkEEaiABEI8tDAMLIAJBBGogARDGDwwCCyABQQA6AAQMAQsgBCABEMYPIAAtADxBBkcEQCAAQRBqELsgCw8LIAJB2ABqIQIgA0HYAGshAwwACwALoQEBAn8CQCABQQNNBEAgAEEBayEAA0AgAUUhAyABRQ0CIAAgAWogAUEBayEBLAAAQQBODQALDAELIAAoAABBgIGChHhxDQBBBCAAQQNqQXxxIgIgAGsgACACRhshAiABQQRrIQEDQCABIAJNBEAgACABaigAAEGAgYKEeHFFIQMMAgsgACACaigCAEGAgYKEeHENASACQQRqIQIMAAsACyADC7wBAQF/IwBBEGsiByQAIAAoAhQgASACIAAoAhgoAgwRAwAhASAHQQA6AA0gByABOgAMIAcgADYCCCAHQQhqIAMgBCAFIAYQ7gYhASAHLQANIgIgBy0ADCIDciEAAkAgA0EBcSACQQFHcg0AIAEoAgAiAC0AHEEEcUUEQCAAKAIUQbvR1gBBAiAAKAIYKAIMEQMAIQAMAQsgACgCFEGvruAAQQEgACgCGCgCDBEDACEACyAHQRBqJAAgAEEBcQu6AQACQAJAAkAgAUEBcUUEQCACKAIAQYaAxABrDgICAwELIAAgAjYCBCAAQQI2AgAgACACKQIANwIIDwsgAEEENgIADwsgAigCBCIBKAIAQYiAxABHBEAgAEIENwIIIAAgATYCBCAAQQA2AgAPCyAAQQE2AgAgACABQQRqNgIEDwsgAigCDCIBBEAgAEEANgIAIAAgAUEBazYCDCAAIAIoAggiATYCBCAAIAFB2ABqNgIIDwsgAEEENgIAC84BAQF/IwBBQGoiAiQAIAAoAgAhACACQayNxAA2AjggAkGw58MANgIwIAIgAEHYBGo2AiwgAkGg58MANgIoIAIgAEHYAmo2AiQgAkGQ58MANgIgIAIgAEHYAGo2AhwgAkGA58MANgIYIAIgAEH8BGo2AhQgAkHw5sMANgIQIAIgAEH4BGo2AgwgAkHg5sMANgIIIAIgADYCBCACIABBgAVqNgI8IAIgAkE8ajYCNCABQdn8wwBBA0Hs58MAQQcgAkEEakEHEMUIIAJBQGskAAuuAQIIfwF+IwBBEGsiAiQAIAEoAgQhCCACQQhqIAEoAggiBUEEQQwQ7BQgAigCCCIGIAVB/////wNxIgEgASAGSxshA0EAIQEgAigCDCEHA0AgAwRAIAEgCGoiBEEEaikCACEKIAQQ3xwhBCABIAdqIglBBGogCjcCACAJIAQ2AgAgA0EBayEDIAFBDGohAQwBCwsgACAFNgIIIAAgBzYCBCAAIAY2AgAgAkEQaiQAC4oDAgh/AX4jAEEQayIDJABB3AAhBUEBIQJBASEGA0ACQAJAIAJFBEAgAUECRw0BDAILQQIgAWsgAk0NASABIAJqIQFBACECCyABQeDb2ABqLQAAIAVBAXRqIQUgBkEBdCEGIAFBAWohAQwBCwsgA0GAAjsBDCADQYGAgOAFNgIIIANBFDYCBCMAQSBrIgEkAEHg29gAQQIQvxohCSABQRhqQeDb2ABBAkEAEOoIIAEoAhwhBCABKAIYIQIgAUEQakHg29gAQQJBARDqCCABQQhqQeDb2ABBAiAEIAEoAhQgAiABKAIQIgRLIgcbIAIgBCAHGyIEEJ4HIAEoAgwhByABKAIIIQggA0EEaiICKAIABH8gACACKQIANwIYIABBIGogAkEIaigCADYCAEEXBUEWCyECIAAgBjYCLCAAIAU2AiggACAENgIQIAAgCTcDCCAAIAg2AgAgACACNgIwIAAgBzYCBCABQSBqJAAgAEECNgJAIABB4NvYADYCPCAAQQA2AjggA0EQaiQAC8gBAQF/IwBBQGoiAiQAIAAoAgAhACACQejz2AA2AjggAkHs6tgANgIwIAIgAEEYajYCLCACQejr2AA2AiggAiAANgIkIAJBmO3YADYCICACIABBIWo2AhwgAkGY7dgANgIYIAIgAEEgajYCFCACQdDr2AA2AhAgAiAAQQxqNgIMIAJBvIPaADYCCCACIABBEGo2AgQgAiAAQRxqNgI8IAIgAkE8ajYCNCABQZfx2ABBEUH489gAQQcgAkEEakEHEMUIIAJBQGskAAvLAQEBfyMAQUBqIgIkACAAKAIAIQAgAkHQiNoANgI4IAJB6JnZADYCMCACIABB0QBqNgIsIAJB0J3ZADYCKCACIABBIGo2AiQgAkHAndkANgIgIAIgAEFAazYCHCACQbiZ2QA2AhggAiAANgIUIAJBxIbaADYCECACIABBzABqNgIMIAJBvIPaADYCCCACIABBOGo2AgQgAiAAQdAAajYCPCACIAJBPGo2AjQgAUH/m9kAQQtB4J3ZAEEHIAJBBGpBBxDFCCACQUBrJAALrgEBCX8jAEEQayICJAAQjiAiBiABKAIAIgQvATIiByABKAIIIgVBf3NqIgM7ATIgBEEEaiIIIAVBAnRqKAIAIQkgAkEIaiADIAZBBGoQjx4gCCAFQQFqIgpBAnRqIAcgCmsgAigCCCACKAIMEI4eIAMQ0SAiAyADELwiIAQgBTsBMiAAIAk2AhAgACAENgIAIABBADYCDCAAIAY2AgggACABKAIENgIEIAJBEGokAAuhAQECfyMAQRBrIgMkAAJAAkACQCAALQAAIgJB5ABPBEAgAyACIAJB5ABuIgJBnH9sakH/AXFBAXRB8I3YAGovAAA7AA5BACEADAELQQIhACACQQpPDQELIANBDWogAGogAkEwcjoAAAwBC0EBIQAgAyACQQF0QfCN2ABqLwAAOwAOCyABQQFBAUEAIANBDWogAGogAEEDcxCABCADQRBqJAALtwEBBX8jAEEQayIDJAAgAi0ADCEGIAEtAAwhBwJAAkAgASgCCCIEBEAgAigCCCIFDQELIANBCGpBlKjgACgCADYCACADQYyo4AApAgA3AwAMAQsgAigCBCECIAEoAgQhASAFQQFGBEAgAyABIAQgAigCABCyFQwBCyAEQQFGBEAgAyACIAUgASgCABCyFQwBCyADIAEgBCACIAUQtA4LIAAgByAGENEVQf8BcSADENUSIANBEGokAAvHAQECfyMA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AgsgAkEEaiABEOcsDAELIAQgARDFDyAALQA8QQZHBEAgAEEQahC7IAsPCyACQdgAaiECIANB2ABrIQMMAAsAC60BAQN/IABBQGsQuyAgAEGQAWohBCAAKAKEAUHYAGwhAyAAKAKAASECA0ACQCADBEACQAJAAkACQCACKAIAQQFrDgUAAQIFAwULIAJBBGogARCaIgwECyACQQRqIAEQkC0MAwsgAkEEaiABEMcPDAILIAJBBGogARCHLQwBCyAEIAEQxw8gAC0APEEGRwRAIABBEGoQuyALDwsgAkHYAGohAiADQdgAayEDDAALAAutAQEDfyAAQUBrELsgIABBkAFqIQQgACgChAFB2ABsIQMgACgCgAEhAgNAAkAgAwRAAkACQAJAAkAgAigCAEEBaw4FAAECBQMFCyACQQRqIAEQsSIMBAsgAkEEaiABELgtDAMLIAJBBGogARDLDwwCCyACQQRqIAEQqy0MAQsgBCABEMsPIAAtADxBBkcEQCAAQRBqELsgCw8LIAJB2ABqIQIgA0HYAGshAwwACwALrQEBA38gAEFAaxC7ICAAQZABaiEEIAAoAoQBQdgAbCEDIAAoAoABIQIDQAJAIAMEQAJAAkACQAJAIAIoAgBBAWsOBQABAgUDBQsgAkEEaiABELIiDAQLIAJBBGogARC5LQwDCyACQQRqIAEQzg8MAgsgAkEEaiABEJ8tDAELIAQgARDODyAALQA8QQZHBEAgAEEQahC7IAsPCyACQdgAaiECIANB2ABrIQMMAAsAC5YBAQR/IwBBEGsiAiQAIAEoAjAhBCABKAIAIQUCfyABKAJgIgNFBEBBASEBQQEMAQsgAkEEaiADIAEoAmQoAhARAAAgAigCCCACKAIERXEhASACKAIMRQshAyAAAn9BACAEDQAaQQAgBQ0AGkEAIAFFDQAaQQAgA0UNABogAEEANgIIQQELNgIEIABBADYCACACQRBqJAALpgECBn8CfiABKAIAIAIoAgwiBEEYbGoiAUEQaiIFKQIAIQkgAUEIaiIGKQIAIQogACgCDCEHIAIoAggiACgCDCEIIAIoAgAiAyABKQIANwIAIANBCGogCjcCACADQRBqIAk3AgAgASAAKQIANwIAIAYgAEEIaikCADcCACAFIABBEGopAgA3AgAgAiAEIAcgCEtqNgIMIAIgADYCACACIABBGGo2AggLpgECBn8CfiABKAIAIAIoAgwiBEEYbGoiAUEQaiIFKQIAIQkgAUEIaiIGKQIAIQogACgCDCEHIAIoAggiACgCDCEIIAIoAgAiAyABKQIANwIAIANBCGogCjcCACADQRBqIAk3AgAgASAAKQIANwIAIAYgAEEIaikCADcCACAFIABBEGopAgA3AgAgAiAEIAcgCE9qNgIMIAIgADYCACACIABBGGo2AggLpgEBBH8gACgCDCECIAAoAggiAyEBA0AgAgRAAkACQAJAAkACQCABKAIAIgRBB2tBACAEQQhPGw4EAAECAwQLIAEQzQsMAwsgAUEEaigCACABQQhqKAIAEL4pDAILIAFBBGooAgAgAUEIaigCABDRKQwBCyABQQRqKAIAIAFBCGooAgAQ3CkLIAJBAWshAiABQRxqIQEMAQsLIAAoAgQgA0EEQRwQuyILpAEBAn8jAEFAaiIFJAAgASgCICEGAkACQCACQQFxRQRAIAZFDQFBupDDAEEsQeiQwwAQ4RcACyAGIANBAWpHDQELIAUgASAEEIYMIAUoAgQhAgJAIAUoAgAiA0EwRgRAIAFBGGogAhCPGwwBCyAAQQhqIAVBCGpBOBD2BhoLIAAgAzYCACAAIAI2AgQgBUFAayQADwtB+JDDAEE5QbSRwwAQ4RcAC5oBAQV/IAAoApANKAJUIAAtAJwKQQJHBEAgACgCkAogACgClAoQpBshAwsgACgClA0QtRUhBSAAKAKYDSIBBEAgARC1FSECC0EAIQEgACgC1ApBA0cEQCAAKAL0CkECdCAAKALoCkEDdGohAQsgAC0AnA1BAUYEQEHZ5OAAQShBxO3DABDhFwALQTRsIANqIAVqIAJqIAFqQTRqC6EBAQJ/IwBBQGoiAyQAIAMgAjYCECADIAE2AgwgASACQQFqTSAAKAIMIgQgAk9xRQRAIANBAjYCGCADQaCt4AA2AhQgA0ICNwIgIANBCTYCOCADQfoANgIwIAMgBDYCPCADIANBLGo2AhwgAyADQTxqNgI0IAMgA0EMajYCLCADQRRqQbCt4AAQqB0ACyAAIAI2AhQgACABNgIQIANBQGskAAuTAQEEfyMAQRBrIgEkAEGAgMQAIQIgACgCACgCUCIDIAAoAggiBEcEQCABIAAoAgQgBAJ/QQEgABC8DCIAQYABSQ0AGkECIABBgBBJDQAaQQNBBCAAQYCABEkbCyADakHomsQAELUUIAEgASgCACIANgIIIAEgACABKAIEajYCDCABQQhqEMIaIQILIAFBEGokACACC7QBAQF/IwBBQGoiAiQAIAAoAgAhACACQey0xwA2AjggAkHctMcANgIwIAIgAEEEajYCLCACQdy0xwA2AiggAiAAQQNqNgIkIAJB3LTHADYCICACIABBAmo2AhwgAkHctMcANgIYIAIgAEEBajYCFCACQdy0xwA2AhAgAiAANgIMIAIgAEEFajYCPCACIAJBPGo2AjQgAUHwtccAQQVBwLXHAEEGIAJBDGpBBhDFCCACQUBrJAALmQEBB38jAEEwayICJAAgASgCBCEHIAIgASgCCCIEQQhBKBDsFCACKAIAIgUgBEH/////AXEiASABIAVLGyEDQQAhASACKAIEIQYDQCADBEAgAkEIaiIIIAEgB2oQjwcgASAGaiAIQSgQ9gYaIANBAWshAyABQShqIQEMAQsLIAAgBDYCCCAAIAY2AgQgACAFNgIAIAJBMGokAAuZAQEHfyMAQTBrIgIkACABKAIEIQcgAiABKAIIIgRBCEEoEOwUIAIoAgAiBSAEQf////8BcSIBIAEgBUsbIQNBACEBIAIoAgQhBgNAIAMEQCACQQhqIgggASAHahCkICABIAZqIAhBKBD2BhogA0EBayEDIAFBKGohAQwBCwsgACAENgIIIAAgBjYCBCAAIAU2AgAgAkEwaiQAC7QBAQF/IwBBQGoiAiQAIAAoAgAhACACQajt2AA2AjggAkGY7dgANgIwIAIgAEE1ajYCLCACQZjt2AA2AiggAiAAQTRqNgIkIAJBiO3YADYCICACIABBNmo2AhwgAkG46tgANgIYIAIgAEEoajYCFCACQbyD2gA2AhAgAiAAQSBqNgIMIAIgADYCPCACIAJBPGo2AjQgAUHo7dgAQQtBuO3YAEEGIAJBDGpBBhDFCCACQUBrJAALtAEBAX8jAEFAaiICJAAgACgCACEAIAJBgIraADYCOCACQZjt2AA2AjAgAiAAQRJqNgIsIAJBmO3YADYCKCACIABBEWo2AiQgAkHQ69gANgIgIAIgAEEMajYCHCACQZjt2AA2AhggAiAAQRBqNgIUIAJBvIPaADYCECACIAA2AgwgAiAAQQhqNgI8IAIgAkE8ajYC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IQMgACgCCCABKAIUQfiu4ABBASABKAIYKAIMEQMAIQQgAkEAOgAJIAIgBDoACCACIAE2AgRBDGwhAQNAIAEEQCACIAM2AgwgAkEEaiACQQxqQSwQ+QcgAUEMayEBIANBDGohAwwBCwsgAkEEahDJHCACQRBqJAALhwEBBX8jAEGAAWsiBCQAQf8AIQIDQCAEIAIiA2oiBSAAQQ9xIgJBMHIgAkE3aiACQQpJGzoAACADQQFrIQIgAEH/AXEiBkEEdiEAIAZBEE8NAAsgA0GBAU8EQCADQYABQbjzwAAQoBAACyABQQFBuLLgAEECIAVBgAEgA2sQgAQgBEGAAWokAAuEAQECfyADQfj///8BcQRAIAAgACADQQN2IgNBBHQiBGogACADQRxsIgVqIAMQjQ0hACABIAEgBGogASAFaiADEI0NIQEgAiACIARqIAIgBWogAxCNDSECCyAAIAIgASAAKAIAIgAgASgCACIBSSIDIAEgAigCACICSXMbIAMgACACSXMbC6ABAQF/IwBBQGoiAiQAIAJBADYCFCACQoCAgIAQNwIMIAJBAzoAOCACQSA2AiggAkEANgI0IAJBlPzBADYCMCACQQA2AiAgAkEANgIYIAIgAkEMajYCLCABIAJBGGoQoBdFBEAgACACKQIMNwIAIABBCGogAkEUaigCADYCACACQUBrJAAPC0GIt+AAQTcgAkE/akGs/MEAQYy44AAQww4AC6ABAQF/IwBBQGoiAiQAIAJBADYCFCACQoCAgIAQNwIMIAJBAzoAOCACQSA2AiggAkEANgI0IAJBlPzBADYCMCACQQA2AiAgAkEANgIYIAIgAkEMajYCLCABIAJBGGoQkxlFBEAgACACKQIMNwIAIABBCGogAkEUaigCADYCACACQUBrJAAPC0GIt+AAQTcgAkE/akGs/MEAQYy44AAQww4AC6ABAQF/IwBBQGoiAiQAIAJBADYCFCACQoCAgIAQNwIMIAJBAzoAOCACQSA2AiggAkEANgI0IAJBwP3BADYCMCACQQA2AiAgAkEANgIYIAIgAkEMajYCLCABIAJBGGoQoBdFBEAgACACKQIMNwIAIABBCGogAkEUaigCADYCACACQUBrJAAPC0GIt+AAQTcgAkE/akHY/cEAQYy44AAQww4AC4YBAQJ/IANB+P///wFxBEAgACAAIANB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JAAPC0GIt+AAQTcgAkE/akHYxd8AQYy44AAQww4AC6ABAQF/IwBBQGoiAiQAIAJBADYCFCACQoCAgIAQNwIMIAJBAzoAOCACQSA2AiggAkEANgI0IAJBwMXfADYCMCACQQA2AiAgAkEANgIYIAIgAkEMajYCLCABIAJBGGoQkxlFBEAgACACKQIMNwIAIABBCGogAkEUaigCADYCACACQUBrJAAPC0GIt+AAQTcgAkE/akHYxd8AQYy44AAQww4AC6ABAQF/IwBBQGoiAiQAIAJBADYCFCACQoCAgIAQNwIMIAJBAzoAOCACQSA2AiggAkEANgI0IAJBuLbgADYCMCACQQA2AiAgAkEANgIYIAIgAkEMajYCLCABIAJBGGoQgytFBEAgACACKQIMNwIAIABBCGogAkEUaigCADYCACACQUBrJAAPC0GIt+AAQTcgAkE/akHQtuAAQYy44AAQww4AC6ABAQF/IwBBQGoiAiQAIAJBADYCFCACQoCAgIAQNwIMIAJBAzoAOCACQSA2AiggAkEANgI0IAJBuLbgADYCMCACQQA2AiAgAkEANgIYIAIgAkEMajYCLCABIAJBGGoQkBlFBEAgACACKQIMNwIAIABBCGogAkEUaigCADYCACACQUBrJAAPC0GIt+AAQTcgAkE/akHQtuAAQYy44AAQww4AC4wBAQJ/IAEtABgEQCAAAn8gASgCFCICBEAgACgCHCAAKAIgIAIoAgRBAWsQwA4MAQsgACgCHCAAKAIgIAEoAhAQyQ8LEIseCyABKAIIQShsIQMgASgCBCECA0AgAwRAIAIoAgBBB0cEQCACIAAQmhALIAJBKGohAiADQShrIQMMAQsLIAEoAhQgABCHIAuTAQICfwF+IwBBEGsiAyQAIAFBCGohBAJAAkACQCABKAIARQRAIANBCGogBCACEM4SIAMtAAhBBEYNASADKQMIIgVC/wGDQgRRDQEgACAFNwIADAMLIANBCGogBCACEGcgAy0ACEEERg0AIAMpAwgiBUL/AYNCBFINAQsgAEEEOgAADAELIAAgBTcCAAsgA0EQaiQAC48BAQJ/IwBBEGsiAyQAAn8gAigCBARAIAIoAggiBEUEQCADQQhqQQQgARCZHiADKAIIIQIgAygCDAwCCyACKAIAIARBBCABEPMCIQIgAQwBCyADQQQgARCZHiAD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DQEgAUH4////B00EQCAAIAI2AgggACABNgIEIABBCDYCAA8LDAILDAELIABBADYCAA8LIABBADYCAAuKAQEBfyMAQTBrIgIkAAJ/QQEgASgCFEEiIAEoAhgoAhARAgANABogAiABNgIMIAJBATYCFCACQcjv4AA2AhAgAkIBNwIcIAJByAA2AiwgAiAANgIoIAIgAkEoajYCGEEBIAJBDGogAkEQahDiJA0AGiABKAIUQSIgASgCGCgCEBECAAsgAkEwaiQAC30BA38jAEGAAmsiAiQAIAJBAEGAAhCFCyEEQQAhAgJAA0ACQCADIARqIAI6AAAgA0H/AUYNACABIAMQyxUEQCACQf8BcUEBaiICQf8BcSACRw0DCyADQQFqIQMMAQsLIAAgBEGAAhD2BhogBEGAAmokAA8LQYCswAAQwikAC4QBAQJ/IwBBIGsiAyQAIANBFGoiBCABIAIQwRAgA0EIaiAEELEVAkAgAygCEARAIAAgAykCCDcCACAAQQI6AAwgAEEIaiADQRBqKAIANgIADAELIABBCGpBrP/BACkCADcCACAAQaT/wQApAgA3AgAgAygCCCADKAIMEMEpCyADQSBqJAALigEBA38gAEG5893xeWwhAwJAA0BB1ITkACgCACIARQRAEJAVIQALIANBACAAKAIIa3YiASAAKAIEIgJPDQEgACgCACABQQZ0aiIBIAEoAgAiAkEBIAIbNgIAIAIEQCABEMQQCyAAQdSE5AAoAgBHBEAgARDbHQwBCwsgAQ8LIAEgAkGY9MIAEJ8QAAt8AQN/IAIgAWtBAnYiBSAAKAIAIAAoAggiA2tLBEAgACADIAVBBEEMEJgXIAAoAgghAwsgACgCBCADQQxsaiEEIAMgBWohAwNAIAEgAkZFBEAgBEEANgIAIARBBGogAkEEayICKAIANgIAIARBDGohBAwBCwsgACADNgIIC30BA38jAEGAAmsiAiQAIAJBAEGAAhCFCyEEQQAhAgJAA0ACQCADIARqIAI6AAAgA0H/AUYNACABIAMQyxUEQCACQf8BcUEBaiICQf8BcSACRw0DCyADQQFqIQMMAQsLIAAgBEGAAhD2BhogBEGAAmokAA8LQcylwwAQwikAC4QBAQR/IwBBEGsiBCQAIAIoAnggAigCfCABLQDXBCIHIANB////P3FqQQFqQaj+wwAQ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A0cEQAJAAkACQCAAIARqIgIoAgBBAWsOAgECAAsgAkEIaiABEN8hIAJBKGogARDKKwwDCyACQTBqIgIoAgBFDQIgAiABEMErDAILIAJBBGogARDiLQwBCw8LIABBOGohAAwACwALhQEBA38gACgCCEE4bCEDIAAoAgQhBEEAIQADQAJAIAAgA0cEQAJAAkACQCAAIARqIgIoAgBBAWsOAgECAAsgAkEIaiABEIAiIAJBKGogARDvLAwDCyACQTBqIgIoAgBFDQIgAiABEOwsDAILIAJBBGogARDtLQwBCw8LIABBOGohAAwACwALhQEBA38gACgCCEE4bCEDIAAoAgQhBEEAIQADQAJAIAAgA0cEQAJAAkACQCAAIARqIgIoAgBBAWsOAgECAAsgAkEIaiABEIEiIAJBKGogARDxLAwDCyACQTBqIgIoAgBFDQIgAiABEOgsDAILIAJBBGogARDsLQwBCw8LIABBOGohAAwACwALhQEBA38gACgCCEE4bCEDIAAoAgQhBEEAIQADQAJAIAAgA0cEQAJAAkACQCAAIARqIgIoAgBBAWsOAgECAAsgAkEIaiABEIIiIAJBKGogARDyLAwDCyACQTBqIgIoAgBFDQIgAiABEOcsDAILIAJBBGogARDuLQwBCw8LIABBOGohAAwACwALhQEBA38gACgCCEE4bCEDIAAoAgQhBEEAIQADQAJAIAAgA0cEQAJAAkACQCAAIARqIgIoAgBBAWsOAgECAAsgAkEIaiABEJsiIAJBKGogARCSLQwDCyACQTBqIgIoAgBFDQIgAiABEIctDAILIAJBBGogARD2LQwBCw8LIABBOGohAAwACwALhwEBAn8gASgCFCICKAI8QQZ0IQEgAigCOEE8aiECAkADQCACIQMgAUUEQEEAIQEMAgsgAUFAaiEBIANBQGshAiADLQAAQQZHDQALIANBPGsiAUEEaigCACABQQhqKAIAQfTP3wAQmCMhAkEEENIgIgEgAjYCAAsgAEHkz98ANgIEIAAgATYCAAtuAQN/QX8hBAJAIAFFDQADQCABQQFNBEACQCAAIANBKGxqKAIYIgAgAkcNAEEAIQQMAwsFIAMgAUEBdiIFIANqIgMgACADQShsaigCGCACSxshAyABIAVrIQEMAQsLIAMgACACSWohAwsgAyAEaguFAQEDfyABKAJY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IARBEGopAgA3AgAgAEEIaiAEQQhqKQIANwIAIAAgBCkCADcCACAAIAMpAgA3AiggAEEwaiADQQhqKQIANwIAIABBOGogA0EQaikCADcCAAtbAQJ/AkAgASADRw0AIAFBAWohAQNAIAFBAWsiAUUhBCABRQ0BIAAtAAAgAi0AAEcNASACQQFqIQMgAEEBaiAAQQJqIQAgAkECaiECLQAAIAMtAABGDQALCyAEC2kBBH8jAEEQayICJAAgAkEIaiABKAIAIgNBEGooAgAgA0EUaigCACABKAIEIgMQmBggACACKAIIIgQEfyACKAIMIQUgASADQQFqNgIEIABBBGogBCAFEKYRQQMFQQYLOgAAIAJBEGokAAtqAQJ/IAFBBHQhAQNAIAEEQCAAQQRqKAIAIABBCGooAgAgAhDSCCACQQsgAC0ADCIEQQlrIgMgA0H/AXFBDU8bQf8BcSIDEKIgIANBC0YEQCAEIAIQ9ikLIABBEGohACABQRBrIQEMAQsLC+ECAhB/AX4jAEEgayIDJAACQCAAKAIAIgFFBEBBACEADAELENsiIQAgASgCDCEKIAEoAhAhCyADQQxqIQUjAEFAaiICJAAgASgCBCEMIAJBCGogASgCCCIHQQhBMBDsFCACKAIIIgggB0H/////AHEiASABIAhLGyEGIAJBGGohDSACKAIMIQkDQCAGBEAgBCAMaiIBKQIAIREgDSABQQhqELwbIAFBKGovAQAhDiABQSpqLQAAIQ8gAUEgahDkJCEQIAFBJGoQ5CQhASACIA86ADogAiAOOwE4IAIgETcDECACIAE2AjQgAiAQNgIwIAQgCWogAkEQakEwEL0tGiAGQQFrIQYgBEEwaiEEDAELCyAFIAc2AgggBSAJNgIEIAUgCDYCACACQUBrJAAgAEEQaiALNgIAIAAgAykCDDcCACADIAo2AhggAEEIaiADQRRqKQIANwIACyADQSBqJAAgAAtyAQR/IwBBIGsiASQAAkAgACgCACICRQRAQQAhAAwBCxDbIiEAIAIoAgwhAyACKAIQIQQgAUEMaiACEKINIABBEGogBDYCACAAIAEpAgw3AgAgASADNgIYIABBCGogAUEUaikCADcCAAsgAUEgaiQAIAALegECfyMAQSBrIgIkACAAIAEQ7SIiAQRAIAAoAqACIQMgAEElNgKgAiAAIAAp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ACADNgIEIAAgBDYCACACQRBqJAALdQECfyAAKAIIIgIgACgCAEYEQCAAEO8WCyAAIAJBAWo2AgggACgCBCACQQxsaiIBQQA2AgggAUKAgICAwAA3AgAgACgCFCIBIAAoAgxGBEAgAEEMahDsFgsgACABQQFqNgIUIAAoAhAgAUECdGpBADYCACACC4EBAQF/IwBBEGsiAyQAIANBBGogACABIAIQwQQCQCADLQAEQQFHBEAgAygCCCIAQYCwA3NBgIDEAGtB/4+8f00NASADQRBqJAAgAA8LIAMgAy0ABToAD0HygNkAQSAgA0EPakGw/dgAQfyB2QAQww4AC0GMgtkAQR5BrILZABCmEgALaQEBfyMAQSBrIgIkACACQQhqIAEQ2wMCQCACKAIIQSVHBEAgACACKQMINwMAIABBEGogAkEYaikDADcDACAAQQhqIAJBEGopAwA3AwAMAQsgACACKAIMNgIEIABBJjYCAAsgAkEgaiQAC+ECAgV/A34jAEEgayIEJAAgBEEIaiECIwBBIGsiAyQAIAFBwAFqIQUCQCABKALAASABKALEARCQHCIGQYCAxABGBEAgBRChFSACQQY2AgAMAQsCQCAGQTBrQQpPBEAgBRChFSAGQS5GBEAgASgCwAEgASgCxAEQkBxBLkYNAgsgAkEGNgIADAILIAMgAUEBELwBIAMpAwAiCEICUgRAIAMpAxAhCSADKQMIIQdBHSEBIAinQQFxBEAgAyAHPgIYIAMpAxghB0EeIQELIAIgBzcDECACIAk3AwggAiABNgIADAILIAIgAygCCDYCBCACQSU2AgAMAQsgBRChFSAFEKEVIAJBBzYCAAsgA0EgaiQAAkAgBCgCCEElRwRAIAAgBCkDCDcDACAAQRBqIARBGGopAwA3AwAgAEEIaiAEQRBqKQMANwMADAELIAAgBCgCDDYCBCAAQSY2AgALIARBIGokAAu7DwMLfwN+AXwjAEEgayILJAAgC0EIaiEJIwBBkAFrIgIkACABIgNBwAFqIQUCQAJAAkACfwJAAkACQAJAAkAgAygCwAEgAygCxAEQkBwiAUHCAEYNACABQc8ARg0BAkAgAUHYAEYNACABQeIARg0BIAFB7wBGDQIgAUH4AEYNACACQfgAaiADQQAQvAEgAikDeCIOQgJSBEAgAikDiAEhDyACKQOAASEN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NgIACyALQSBqJAALcgEBfyMAQSBrIgIkACABQcABahChFSACQQhqQRM2AgACQCACKAIIQSVHBEAgACACKQMINwMAIABBEGogAkEYaikDADcDACAAQQhqIAJBEGopAwA3AwAMAQsgACACKAIMNgIEIABBJjYCAAsgAkEgaiQAC9MBAQR/IwBBIGsiAiQAIAJBCGohAyABKALAASABKALEARCQHCEFIAFBwAFqIgQQoRUCQCAFQT9HBEAgA0EXNgIADAELIAQQoRUgASgCwAEgASgCxAEQ4xxBPUcEQCADQRY6AAQgA0EUNgIADAELIAQQoRUgA0EPOgAEIANBFTYCAAsCQCACKAIIQSVHBEAgACACKQMINwMAIABBEGogAkEYaikDADcDACAAQQhqIAJBEGopAwA3AwAMAQsgACACKAIMNgIEIABBJjYCAAsgAkEgaiQAC2oBA38gAUECdCECAkACfyABQf////8DSwRAQQEhAUEIIQNBBAwBC0EAIQFBBCEDIAJB/P///wdLBEBBACECQQEhAQwCCyACIQRBBCECQQgLIABqIAQ2AgALIAAgA2ogAjYCACAAIAE2AgALeQEBfyAAKAIIQShsIQIgACgCBCEAA0AgAgRAAkACQAJAAkACQCAAKAIAQQFrDgQAAQIDBAsgAEEEaiABEPQhDAMLIABBBGogARDCKwwCCyAAQQRqIAEQ3iwMAQsgAEEEaiABELgPCyAAQShqIQAgAkEoayECDAELCwt5AQF/IAAoAghBKGwhAiAAKAIEIQADQCACBEACQAJAAkACQAJAIAAoAgBBAWsOBAABAgMECyAAQQRqIAEQ7yEMAwsgAEEEaiABEMYrDAILIABBBGogARDYLAwBCyAAQQRqIAEQuQ8LIABBKGohACACQShrIQIMAQsLC3kBAX8gACgCCEEobCECIAAoAgQhAANAIAIEQAJAAkACQAJAAkAgACgCAEEBaw4EAAECAwQLIABBBGogARDxIQwDCyAAQQRqIAEQxSsMAgsgAEEEaiABENosDAELIABBBGogARC6DwsgAEEoaiEAIAJBKGshAgwBCwsLgAEBAX8jAEEQayICJAACQCAAKAIQDQACQAJAIAEtADlBAWsOAgECAAsgASAAIAEtADgQ8BUMAQsgAkEIaiABIABBABDfBiACKAIIQQFGBEAgACACKAIMEIUENgIQDAELIAAgASgCLBCFBDYCECABIAAgAS0AOBDwFQsgAkEQaiQAC3kBAX8gACgCCEEobCECIAAoAgQhAANAIAIEQAJAAkACQAJAAkAgACgCAEEBaw4EAAECAwQLIABBBGogARDzIQwDCyAAQQRqIAEQwCsMAgsgAEEEaiABEN0sDAELIABBBGogARC8DwsgAEEoaiEAIAJBKGshAgwBCwsLeQEBfyAAKAIIQShsIQIgACgCBCEAA0AgAgRAAkACQAJAAkACQCAAKAIAQQFrDgQAAQIDBAsgAEEEaiABENYhDAMLIABBBGogARDBKwwCCyAAQQRqIAEQ2ywMAQsgAEEEaiABEL0PCyAAQShqIQAgAkEoayECDAELCwt5AQF/IAAoAghBKGwhAiAAKAIEIQADQCACBEACQAJAAkACQAJAIAAoAgBBAWsOBAABAgMECyAAQQRqIAEQ8CEMAwsgAEEEaiABEMcrDAILIABBBGogARDZLAwBCyAAQQRqIAEQvg8LIABBKGohACACQShrIQIMAQsLC3kBAX8gACgCCEEobCECIAAoAgQhAANAIAIEQAJAAkACQAJAAkAgACgCAEEBaw4EAAECAwQLIABBBGogARDyIQwDCyAAQQRqIAEQxCsMAgsgAEEEaiABENwsDAELIABBBGogARC/DwsgAEEoaiEAIAJBKGshAgwBCwsLdgIBfgN/IAAoAhAhAiAAKAIIIQMgACkDACEBA38gAVAEfyAAIAJBQGoiAjYCECAAIANBCGoiBDYCCCAAIAMpAwBCf4VCgIGChIiQoMCAf4MiATcDACAEIQMMAQUgACABQgF9IAGDNwMAIAIgAXqnQfgAcWsLCwt5AQF/IAAoAghBKGwhAiAAKAIEIQADQCACBEACQAJAAkACQAJAIAAoAgBBAWsOBAABAgMECyAAQQRqIAEQ+iEMAwsgAEEEaiABEOQsDAILIABBBGogARD7LAwBCyAAQQRqIAEQwQ8LIABBKGohACACQShrIQIMAQsLC3kBAX8gACgCCEEobCECIAAoAgQhAANAIAIEQAJAAkACQAJAAkAgACgCAEEBaw4EAAECAwQLIABBBGogARD8IQwDCyAAQQRqIAEQ6SwMAgsgAEEEaiABEPksDAELIABBBGogARDCDwsgAEEoaiEAIAJBKGshAgwBCwsLeQEBfyAAKAIIQShsIQIgACgCBCEAA0AgAgRAAkACQAJAAkACQCAAKAIAQQFrDgQAAQIDBAsgAEEEaiABEP4hDAMLIABBBGogARDsLAwCCyAAQQRqIAEQ+CwMAQsgAEEEaiABEMMPCyAAQShqIQAgAkEoayECDAELCwt5AQF/IAAoAghBKGwhAiAAKAIEIQADQCACBEACQAJAAkACQAJAIAAoAgBBAWsOBAABAgMECyAAQQRqIAEQ/yEMAwsgAEEEaiABEOgsDAILIABBBGogARD6LAwBCyAAQQRqIAEQxA8LIABBKGohACACQShrIQIMAQsLC3kBAX8gACgCCEEobCECIAAoAgQhAANAIAIEQAJAAkACQAJAAkAgACgCAEEBaw4EAAECAwQLIABBBGogARD7IQwDCyAAQQRqIAEQ5ywMAgsgAEEEaiABEPwsDAELIABBBGogARDFDwsgAEEoaiEAIAJBKGshAgwBCwsLeQEBfyAAKAIIQShsIQIgACgCBCEAA0AgAgRAAkACQAJAAkACQCAAKAIAQQFrDgQAAQIDBAsgAEEEaiABEKIiDAMLIABBBGogARCILQwCCyAAQQRqIAEQjy0MAQsgAEEEaiABEMYPCyAAQShqIQAgAkEoayECDAELCwt5AQF/IAAoAghBKGwhAiAAKAIEIQADQCACBEACQAJAAkACQAJAIAAoAgBBAWsOBAABAgMECyAAQQRqIAEQmiIMAwsgAEEEaiABEIctDAILIABBBGogARCQLQwBCyAAQQRqIAEQxw8LIABBKGohACACQShrIQIMAQsLC3IBAn8jAEEQayICJAACQCABQYABTwRAIAJBADYCDCACIAEgAkEMahDaCSAAIAIoAgAgAigCBBDdHQwBCyAAKAIIIgMgACgCAEYEQCAAEOsWCyAAIANBAWo2AgggACgCBCADaiABOgAACyACQRBqJABBAAteAQJ/AkAgAUUNAAN/IAFBAU0EfyAAIANBKGxqKAIYIgAgAkYNAiADIAAgAklqBSADIAFBAXYiBCADaiIDIAAgA0EobGooAhggAksbIQMgASAEayEBDAELCyEDCyADC3YBAX8gACgCCEE4bCECIAAoAgQhAANAAkAgAgRAAkACQAJAIAAoAgBBAWsOAgECAAsgAEEIaiABEKoiIABBKGogARCkLQwDCyAAQTBqIAEQnSYMAgsg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IABBA3ZBP3FBgOrYACAAQQl2Qfjw4ABqIABB/8cMSxstAABBBXRqQcCC4QBqLQAAIABBB3F2QQFxDAELIABBgOnYAGotAAALQQFxC1cAAn8gAEGAAU8EQCAAQQN2QT9xQYDq2AAgAEEJdkGQ9OAAaiAAQf+DOEsbLQAAQQV0akHAguEAai0AACAAQQdxdkEBcQwBCyAAQYDe2ABqLQAAC0EBcQtiAQF/IwBBQGoiAyQAIANBGGogAUEQaikDADcDACADQRBqIAFBCGopAwA3AwAgAyACNgIgIANBDzYCACADIAEpAwA3AwggAxDDKCEBIABBuwE6AAAgACABNgIEIANBQGskAAtyAgN/An4gASABKALkAiICNgKcAyABIAEoAuACIgM2ApgDIAEoAsgCIAFBJTYCyAJBIEcEQEHZ5OAAQShB6PffABDhFwALIAEpA9gCIQUgASkD0AIhBiAAIAI2AhQgACADNgIQIAAgBTcDCCAAIAY3AwALWgEBfyMAQUBqIgEkACABQRRqIABBEGopAgA3AgAgAUEMaiAAQQhqKQIANwIAIAFBGDYCACABQRxqIABBGGopAgA3AgAgASAAKQIANwIEIAEQwyggAUFAayQAC1oBAX8jAEFAaiIBJAAgAUEgaiAAQRhqKQMANwMAIAFBGGogAEEQaikDADcDACABQRBqIABBCGopAwA3AwAgAUEbNgIAIAEgACkDADcDCCABEMMoIAFBQGskAAtiAQF/IwBBQGoiAyQAIANBGGogAUEQaikDADcDACADQRBqIAFBCGopAwA3AwAgAyACNgIgIANBHzYCACADIAEpAwA3AwggAxDDKCEBIABBuwE6AAAgACABNgIEIANBQGskAAtkAQF/An8gASgCAEGBgICAeEcEQEEYQQQQkSAiAkEQaiABQRBqKQIANwIAIAJBCGogAUEIaikCADcCACACIAEpAgA3AgBBAAwBCyABKAIEIQJBAQshASAAIAI2AgQgACABNgIAC2cBAX8jAEEQayICJAAgAiAAKAIAIgBBFGo2AgwgAUGUmNkAQQhB99TgAEEEIABBDGpB+gBBnJjZAEEFIABBwgJB44jaAEEIIABBGGpBD0GojdoAQQggAkEMakHBAhCxCiACQRBqJAALaAEBfyMAQRBrIgIkACACIAAoAgAiAEEUajYCDCABQe+X2QBB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t4/EAEEIIABBEGpBEEG/j8QAQQkgAkEMakEhELEKIAJBEGokAAtbAQF/IwBBMGsiAyQAIAMgATYCDCADIAA2AgggA0EBNgIUIANByO/gADYCECADQgE3AhwgAyADQQhqrUKAgICAsAGENwMoIAMgA0EoajYCGCADQRBqIAIQqB0AC1YBAX8jAEEgayICJAAgAkEAOgAYIAIgATYCFCACIAA2AhAgAkEBNgIMIAIgAkEMajYCHCACQRxqQdyAwAAQCCACKAIMBEAgAkEQahC5IgsgAkEgaiQAC5ABACAAQcgAakH4ABDkFCAAQdQAakEhEOQUIABB4ABqQT4Q5BQgAEL8gICA4As3AkAgAEL8gICAwA83AjggAELbgICA0As3AjAgAEKngICA4As3AiggAEKugICAgAw3AiAgAEKsgICA4A43AhggAELegICA4Ac3AhAgAEKrgICAoAc3AgggAEKtgICAwA83AgALZgECfyMAQSBrIgEkAAJAAkACQCAApyICQQNxQQFrDgICAAELIAFBATYCCCABQYT3wQA2AgQgAUIANwIQIAEgAUEcajYCDCABQQRqQYz3wQAQqB0ACyACKQMIIQALIAFBIGokACAAC1YBAX8jAEEgayICJAAgAkEANgIQIAJBCGogASACQRBqENoJIAJBFGogAigCCCACKAIMELAVIABBCGogAkEcaigCADYCACAAIAIpAhQ3AgAgAkEgaiQAC1YBAX8jAEEgayICJAAgAkEANgIQIAJBCGogASACQRBqENoJIAJBFGogAigCCCACKAIMEP8QIABBCGogAkEcaigCADYCACAAIAIpAhQ3AgAgAkEgaiQAC1MBAn8jAEEQayIFJAACQCACIARJBEAgBUEEaiIGIAMgBBCzFSAAIAYgASACEOsIDAELIAVBBGoiBiABIAIQsxUgACAGIAMgBBDrCAsgBUEQaiQAC18BAX8jAEEQayICJAAgAiAAQSxqNgIMIAFBvI3EAEEIQcSNxABBCCAAQRhqQR5BzI3EAEEJIABBH0HVjcQAQQsgAEEcakEgQeCNxABBCyACQQxqQSEQsQogAkEQaiQAC1sBAn9BASEDAkAgAkUNAAJAAkAgASACQQFrIgRLBEAgACAEai0AAEEKaw4EAwEBAgELIAQgAUH89MMAEJ8QAAtBAA8LIAEgAk0NACAAIAJq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AWsOBgECAwQGBQALIABBCGoQ2icPCyAAQQRqEM8UDwsgAEEEahCGKQ8LIABBBGoQ3w0PCyAAQQRqEIcpDwsgAEEEahDmLQsLUAEBfyAAKAIIQThsIQIgACgCBEEwaiEAA0ACQCACBEAgAEEwayABEKAUIAAoAgBFDQEgACABEOgsDAELDwsgAkE4ayECIABBOGohAAwACwALUAEBfyAAKAIIQThsIQIgACgCBEEwaiEAA0ACQCACBEAgAEEwayABEJ8UIAAoAgBFDQEgACABEOwsDAELDwsgAkE4ayECIABBOGohAAwACwALUAEBfyAAKAIIQThsIQIgACgCBEEwaiEAA0ACQCACBEAgAEEwayABEKIUIAAoAgBFDQEgACABEOcsDAELDwsgAkE4ayECIABBOGohAAwACwALUAEBfyAAKAIIQThsIQIgACgCBEEwaiEAA0ACQCACBEAgAEEwayABEJwSIAAoAgBFDQEgACABEIctDAELDwsgAkE4ayECIABBOGohAAwACwALUAEBfyAAKAIIQThsIQIgACgCBEEwaiEAA0ACQCACBEAgAEEwayABEIAJIAAoAgBFDQEgACABEIgtDAELDwsgAkE4ayECIABBOGohAAwACwALVgEBfyMAQRBrIgIkAAJ/IAAoAgBBAkYEQCABKAIUQYjo4ABBBCABKAIYKAIMEQMADAELIAIgADYCDCABQYzo4ABBBCACQQxqQaAFEMQKCyACQRBqJAALVAIBfwF+IwBBEGsiAyQAIANBCGogAiABQQAQfQJAAkAgAy0ACEEERwRAIAMpAwgiBEL/AYNCBFINAQsgAEEEOgAADAELIAAgBDcCAAsgA0EQaiQAC1UCAX8BfiMAQRBrIgMkACADQQhqIAEgAkEAEOIEAkACQCADLQAIQQRHBEAgAykDCCIEQv8Bg0IEUg0BCyAAQQQ6AAAMAQsgACAENwIACyADQRBqJAALRQEDfyMAQSBrIgMkAAJAA0AgASACRg0BIANBBGogABDXBSADKAIEBEAgAkEBaiECDAELCyABIAJrIQQLIANBIGokACAEC0UBA38jAEEgayIDJAACQANAIAEgAkYNASADQQRqIAAQwwogAygCBARAIAJBAWohAgwBCwsgASACayEECyADQSBqJAAgBAtSAQF/IwBBEGsiAiQAAn8gACgCAARAIAIg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QQUgAkEMakESEN4KIAJBEGokAAtRAQF/IwBBEGsiAiQAIAIgAEECajYCDCABQfKWwABBD0GolsAAQQUgAEEYQcCWwABBBSAAQQFqQRhB05bAAEEFIAJBDGpBEhDeCiACQRBqJAALUwECfyAAQQA6ACAgACgCCCECIABBADYCCCAAKAIEIQEDQCACBEAgASgCACABQQRqKAIAEL4pIAJBAWshAiABQQxqIQEMAQsLIABCgICAgHA3AhQLTwECfyMAQRBrIgMkACADQQhqIAJBBEEEEKoUIAMoAgghBCADKAIMIAEgAkECdBD2BiEBIAAgAjYCCCAAIAE2AgQgACAENgIAIANBEGokAAtMAQN/IAEoAgAiAiABQQRrIgMoAgAiBEkEQANAAkAgAyIBQQRqIAQ2AgAgACABRg0AIAIgAUEEayIDKAIAIgRJDQELCyABIAI2AgALC00BAX8jAEEwayIBJAAgAUEBNgIMIAFBgO7AADYCCCABQgE3AhQgASABQS9qrUKAgICAkAmENwMgIAEgAUEgajYCECABQQhqIAAQqB0AC00BAX8jAEEwayIBJAAgAUEBNgIMIAFBpO7AADYCCCABQgE3AhQgASABQS9qrUKAgICAoAmENwMgIAEgAUEgajYCECABQQhqIAAQqB0AC1kBAX8gASgCDCECAkACQAJAAkAgASgCBA4CAAECCyACDQFBASEBQQAhAgwCCyACDQAgASgCACIBKAIEIQIgASgCACEBDAELIAAgARCoBg8LIAAgASACELAVC0wBAn8gAEH/AXFBA0YEQCABKAIAIQAgASgCBCIDKAIAIgIEQCAAIAIRAQALIAMoAgQiAgRAIAAgAiADKAIIEMIRCyABQQxBBBDCEQsLTwECfyMAQRBrIgIkACACQQhqQQFBARCOGSACKAIIIgNFBEBBAUEBEMQpAAsgAEEBNgIIIAAgAzYCBCAAQQE2AgAgAyABOgAAIAJBEGokAAtRAQF/IwBBEGsiAiQAIAIgAEEIajYCDCABQfeXxABBCUGAmMQAQQMgAEEzQYOYxABBByAAQQxqQQ9BipjEAEEOIAJBDGpBIRDeCiACQRBqJAALVAEBfyMAQRBrIgIkACACIABBjANqNgIMIAFB643EAEEFQeSXxABBCCAAQZEBQeyXxABBCyAAQTBqQZIBQeCNxABBCyACQQxqQSEQ3gogAkEQaiQAC1kBAX8gASgCDCECAkACQAJAAkAgASgCBA4CAAECCyACDQFBASEBQQAhAgwCCyACDQAgASgCACIBKAIEIQIgASgCACEBDAELIAAgARCoBg8LIAAgASACEP8QC00BAn8jAEEQayIBJAAgACgCECICBEAgAUEEaiAAKAIEIAAoAgggAkEBahDoDSAAKAIMIAEoAgxrIAEoAgQgASgCCBChJAsgAUEQaiQAC08BAn8jAEEQayIDJAAgA0EIaiACQQRBCBDsFCADKAIIIQQgAygCDCABIAJBA3QQ9gYhASAAIAI2AgggACABNgIEIAAgBDYCACADQRBqJAALTwECfyMAQRBrIgMkACADQQhqIAJBAUECEOwUIAMoAgghBCADKAIMIAEgAkEBdBD2BiEBIAAgAjYCCCAAIAE2AgQgACAENgIAIANBEGokAAtZAQF/IAEoAgwhAgJAAkACQAJAIAEoAgQOAgABAgsgAg0BQQEhAUEAIQIMAgsgAg0AIAEoAgAiASgCBCECIAEoAgAhAQwBCyAAIAEQqAYPCyAAIAEgAhC6FQtPAQF/IwBBEGsiBCQAIARBBGogASACIAMQnwsgBCgCCCEBIAQoAgRFBEAgACAEKAIMNgIEIAAgATYCACAEQRBqJAAPCyABIAQoAgwQxCkAC1sBAX8CQAJAAkACQAJAIAAoAgAiAUEHa0EAIAFBCE8bDgQAAQIDBAsgABD9DQ8LIAAoAgQgACgCCBC+KQ8LIAAoAgQgACgCCBDRKQ8LIAAoAgQgACgCCBDcKQsLTAEDfyABIQMgAiEEIAEoAogCIgUEQCABLwGQAyEEIAJBAWohAwsgAUHIA0GYAyACG0EIEMIRIAAgBTYCACAAIAOtIAStQiCGhDcCBAuUAQEDfyABKAIMIQICQAJAAkACQCABKAIEDgIAAQILIAINAUEBIQFBACECDAILIAINACABKAIAIgEoAgQhAiABKAIAIQEMAQsgACABEKgGDwsjAEEQayIDJAAgA0EIaiACELsUIAMoAgghBCADKAIMIAEgAhD2BiEBIAAgAjYCCCAAIAE2AgQgACAENgIAIANBEGokAAtSAQF/QfiP5AAtAAAaQSAQYCIDRQRAAAsgAyABNgIEIAMgADYCACADIAIpAwA3AwggA0EQaiACQQhqKQMANwMAIANBGGogAkEQaikDADcDACADC1EAIAAgASkBqgI3AQQgAEEZaiABQb8CaikAADcAACAAQRRqIAFBugJqKQEANwEAIABBDGogAUGyAmopAQA3AQAgAUEoaiACEMcIIAAgATYCAAtKAQF/IwBBQGoiASQAIAFBGGogAEEQaikDADcDACABQRBqIABBCGopAwA3AwAgAUEaNgIAIAEgACkDADcDCCABEMMoIAFBQGskAAtKAQF/IwBBQGoiASQAIAFBFGogAEEQaigCADYCACABQQxqIABBCGopAgA3AgAgAUEZNgIAIAEgACkCADcCBCABEMMoIAFBQGskAAtKAQF/IwBBQGoiASQAIAFBFGogAEEQaigCADYCACABQQxqIABBCGopAgA3AgAgAUEWNgIAIAEgACkCADcCBCABEMMoIAFBQGskAAtKAQF/IwBBQGoiASQAIAFBFGogAEEQaikCADcCACABQQxqIABBCGopAgA3AgAgAUEdNgIAIAEgACkCADcCBCABEMMoIAFBQGskAAtLAQF/IwBBEGsiBCQAIARBADYCDCAEIAM6AAwgASACIARBDGpBARDYHyEDIAAgAkEBazYCBCAAIAFBAWpBACADGzYCACAEQRBqJAALWQEBfyABKAIMIQICQAJAAkACQCABKAIEDgIAAQILIAINAUEBIQFBACECDAILIAINACABKAIAIgEoAgQhAiABKAIAIQEMAQsgACABEKgGDwsgACABIAIQjhYLTwEBfyMAQRBrIgIkACACQQRqIAFBAUEBEJ8LIAIoAgghASACKAIERQRAIAAgAigCDDYCBCAAIAE2AgAgAkEQaiQADwsgASACKAIMEMQpAAtbAAJAIAIgA0G1s+AAQQUQ0h9FBEAgAiADQbOv4ABBBxDSHw0BIAIgA0G6r+AAQQYQ0h9FBEAgAEEGOgAADwsgAEGAPDsBAA8LIABBggI7AQAPCyAAQYA+OwEAC1sAAkAgAiADQdCz4ABBBhDSH0UEQCACIANB/67gAEEIENIfDQEgAiADQaiw4ABBBxDSH0UEQCAAQQY6AAAPCyAAQYAqOwEADwsgAEGCGjsBAA8LIABBgBI7AQALVAEBfyMAQRBrIgIkACACIABBEGo2AgwgAUHMg9oAQQNB99TgAEEEIABBCGpB+gBB5NjgAEEFIABB3wNBz4PaAEEDIAJBDGpB4AMQ3gogAkEQaiQAC1kBAX8gASgCDCECAkACQAJAAkAgASgCBA4CAAECCyACDQFBASEBQQAhAgwCCyACDQAgASgCACIBKAIEIQIgASgCACEBDAELIAAgARCoBg8LIAAgASACEKYRC1QBAX8jAEEQayICJAAgAiAANgIMIAFB0YnaAEEJQffU4ABBBCAAQQxqQfoAQcSH2gBBBCAAQRRqQeQDQdqJ2gBBBSACQQxqQZ8DEN4KIAJBEGokAAtJAQJ/IAAoAghBKGwhAyAAKAIEIQIDQCADBEAgAigCAEEHRwRAIAIgARC5EQsgAkEoaiECIANBKGshAwwBCwsgAEEUaiABENUjC0YBAX8gACgCDARAIAAoAgQiAQRAIAAoAgBB/wEgAUEJahCFCxoLIABBADYCDCAAIAEgAUEBakEDdkEHbCABQQhJGzYCCAsLVQEBfwJAAkACQEEBIAAtACxBA2siASABQf8BcUEDTxtB/wFxQQFrDgIBAgALIABCADcDCA8LIAAQlB0PCyAAQgA3AxggAEIANwMIIABBIGpCADcDAAtXAQF/QfiP5AAtAAAaQRwQYCICRQRAAAsgAkIANwIIIAJCgICAgIABNwIAIAJBEGpCADcCACACQRhqQQA7AQAgACABQSgQ9gYaIAEgAjYCBCABQQI2AgALWAIBfwF+IwBBEGsiAiQAIAEoAgBBAUYEQEG0t98AQSpB4LffABCmEgALIAIgASkDCCABKAIYEKkjIAIpAwAhAyAAIAIoAgg2AgggACADNwMAIAJBEGokAAtKAQF/IwBBQGoiASQAIAFBFGogAEEQaigCADYCACABQQxqIABBCGopAgA3AgAgAUEONgIAIAEgACkCADcCBCABEMMoIAFBQGskAAtKAQF/IwBBQGoiASQAIAFBFGogAEEQaigCADYCACABQQxqIABBCGopAgA3AgAgAUESNgIAIAEgACkCADcCBCABEMMoIAFBQGskAAtJAQJ/IAAoAghBKGwhAyAAKAIEIQIDQCADBEAgAigCAEEHRwRAIAIgARCZEQsgAkEoaiECIANBKGshAwwBCwsgAEEUaiABEOojC0wBAn8jAEEQayIBJAAgACgCBCICBEAgABCBDCABQQRqQSBBCCACQQFqEOgNIAAoAgAgASgCDGsgASgCBCABKAIIEKEkCyABQRBqJAALgAECAn4C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AgwoAhgRAAAgAigCBCEBIAAgAigCADYCACAAIAE2AgQgAkEQaiQAC0ABAX8jAEEQayICJAAgAiAAIAFBgAFxQQN2aiIAKQMAIABBCGopAwAgAUH/AHEQohEgAigCACACQRBqJABBAXELRgEBfyMAQRBrIgIkACACIAE2AgwgAiAANgIIQX8hAQNAIAFBAWohASACIAJBCGoQoxEgAigCAEEBRg0ACyACQRBqJAAgAQtIAQJ/IwBBEGsiAiQAQQAgABEFACIABEAgACgCACAAIAE2AgAgAkEQaiQADwtB3JrjAEHGACACQQ9qQcya4wBB9JvjABDDDgALTwECfyAAKAIEIQIgACgCACEDAkAgACgCCCIALQAARQ0AIANBvNbgAEEEIAIoAgwRAwBFDQBBAQ8LIAAgAUEKRjoAACADIAEgAigCEBECAAuEAQEDfyAAKAIIIgMgACgCAEYEQCMAQRBrIgIkACACQQhqIAAgACgCAEEBQQRBDBCZCCACKAIIIgRBgYCAgHhHBEAgBCACKAIMEMQpAAsgAkEQaiQACyAAIANBAWo2AgggACgCBCADQQxsaiIAIAEpAgA3AgAgAEEIaiABQQhqKAIANgIAC1MAQfiP5AAtAAAaQRQQYCIBRQRAAAsgAUEAOgARIAFChICAgMAANwAJIAFBADoACCABIAM2AgQgASACNgIAIABBATYCCCAAIAE2AgQgAEEBNgIAC08BAX9BASECAkACQCAAQf8BcUEBRg0AIAEhAgJAAkACQCABQf8BcUEBaw4CAwEACyAAQf8BcQ0BDAMLIABB/wFxDQILQQAhAgsgAg8LQQILSAEBfyAAKAIIIgIgACgCAEYEQCAAEO8WCyAAIAJBAWo2AgggACgCBCACQQxsaiIAIAEpAgA3AgAgAEEIaiABQQhqKAIANgIAC0gBAX8gACgCCCICIAAoAgBGBEAgABDXFgsgACACQQFqNgIIIAAoAgQgAkEJbGoiACABKQAANwAAIABBCGogAUEIai0AADoAAAtcAQF/IAEoAgAiASABKAIAIgJBAWo2AgAgAkEASARAAAsgACABEOsXIABBgICAgHg2AtQFIABBgICAgHg2AugEIABBgICAgHg2AtgEIABBAjYCyAQgAEECNgLIAQtdAQF/IAEoAoACIgEgASgCACICQQFqNgIAIAJBAEgEQAAL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fyMAQRBrIgIkACACIAAoAgAiADYCDCABQbuM2gBBE0H31OAAQQQgAEEEakH6AEGojdoAQQggAkEMakHxAhCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiAEEIajYCDCABQbCM2gBBC0H31OAAQQQgAEH6AEHc7NgAQQogAkEMakGHAxCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQfuM2gBBCUH31OAAQQQgAEEgakH6AEGA7NgAQQMgAkEMakGRBBCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiAEEIajYCDCABQZj12ABBFUH31OAAQQQgAEH6AEGA19oAQQIgAkEMakHUAhCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQYTv2ABBC0H31OAAQQQgAEEMakH6AEGP79gAQQUgAkEMakGQBBCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQcL02ABBEkH31OAAQQQgAEEMakH6AEGP79gAQQUgAkEMakGQBBCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQarw2ABBDUH31OAAQQQgAEEEakH6AEHh9dkAQQQgAkEMakG5AhCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiAEEIajYCDCABQY+L2gBBDUH31OAAQQQgAEH6AEHyiNoAQQQgAkEMakGaBBCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQYOP2gBBDUH31OAAQQQgAEEMakH6AEHSh9oAQQQgAkEMakGgBBCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQZ+N2gBBCUH31OAAQQQgAEEEakH6AEGojdoAQQggAkEMakHxAhCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiAEEgajYCDCABQbTr2ABBDEH4mdkAQQMgAEGMBEHk2OAAQQUgAkEMakG5AhCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQdiL2gBBC0H31OAAQQQgAEEEakH6AEHT7NgAQQkgAkEMakHxAhCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQdiA2QBBDUH2l9kAQQogAEEEakH6AEHh9dkAQQQgAkEMakG5AhCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQbjx2ABBD0H31OAAQQQgAEEMakH6AEHSh9oAQQQgAkEMakHeAxCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQe6L2gBBDkH31OAAQQQgAEEEakH6AEGojdoAQQggAkEMakHxAhCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQeOL2gBBC0H31OAAQQQgAEEMakH6AEHz7dgAQQogAkEMakGsBBCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQceN2QBBEkH31OAAQQQgAEEEakH6AEHh9dkAQQQgAkEMakG5AhCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiAEEgajYCDCABQYbr2ABBCkH4mdkAQQMgAEGMBEHEsuAAQQggAkEMakGtBBCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQbSF2gBBC0H31OAAQQQgAEEIakH6AEHBjdoAQQQgAkEMakH2AhCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiAEEYajYCDCABQab/2ABBCUHql9kAQQUgAEG2BEG6s+AAQQUgAkEMakG3BBCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQez92ABBB0H31OAAQQQgAEEMakH6AEHVg9oAQQUgAkEMakG4BBCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiAEEIajYCDCABQYaN2QBBBkH31OAAQQQgAEH6AEHGjNkAQQUgAkEMakG8BBCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQa//2ABBCUH31OAAQQQgAEEEakH6AEHh9dkAQQQgAkEMakG5AhCOCyACQRBqJAALSgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQfP92ABBCEH31OAAQQQgAEEMakH6AEGcmNkAQQUgAkEMakHGBBCOCyACQRBqJAALSgEB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QCAAIAEQlxELIABBKGohACACQShrIQIMAQsLCz8BAX8gACgCCEEobCECIAAoAgQhAANAIAIEQCAAKAIAQQdHBEAgACABEJ4UCyAAQShqIQAgAkEoayECDAELCws/AQF/IAAoAghBKGwhAiAAKAIEIQADQCACBEAgACgCAEEHRwRAIAEgABCoCQsgAEEoaiEAIAJBKGshAgwBCwsLPwEBfyAAKAIIQShsIQIgACgCBCEAA0AgAgRAIAAoAgBBB0cEQCAAIAEQnxQLIABBKGohACACQShrIQIMAQsLCz8BAX8gACgCCEEobCECIAAoAgQhAANAIAIEQCAAKAIAQQdHBEAgACABEKAUCyAAQShqIQAgAkEoayECDAELCwtMAAJAAkACQAJAIAAoAgBBAWsOAwECAwALIAApAwggACgCGCABEKccDwsgAEEEaiABEIUVDwsgAEEEaiABEOAlDwsgAEEEaiABELkLCz8BAX8gACgCCEEobCECIAAoAgQhAANAIAIEQCAAKAIAQQdHBEAgACABEKIUCyAAQShqIQAgAkEoayECDAELCws/AQF/IAAoAghBKGwhAiAAKAIEIQADQCACBEAgACgCAEEHRwRAIAAgARCcEgsgAEEoaiEAIAJBKGshAgwBCwsLSAIBfgF/IAAgAUICIAEpAwBCAn0iAiACQgJaG6dBAnQiA0HU8eMAaigCAGooAgA2AgQgACABIANByPHjAGooAgBqKAIANgIACz8BAX8gACgCCEEobCECIAAoAgQhAANAIAIEQCAAKAIAQQdHBEAgACABEMERCyAAQShqIQAgAkEoayECDAELCws/AQF/IAAoAghBKGwhAiAAKAIEIQADQCACBEAgACgCAEEHRwRAIAAgARCoFAsgAEEoaiEAIAJBKGshAgwBCwsLPwEBfyAAKAIIQShsIQIgACgCBCEAA0AgAgRAIAAoAgBBB0cEQCAAIAEQoRELIABBKGohACACQShrIQIMAQsLC0MBAX8jAEEQayICJAAgAiAAQQFqNgIMIAFBnJbAAEEMQaiWwABBBSAAQRhBiJ/YAEEGIAJBDGpBGRCOCyACQRBqJAALQwEBfyMAQRBrIgIkACACIABBAWo2AgwgAUHllsAAQQ1BqJbAAEEFIABBGEHAlsAAQQUgAkEMakESEI4LIAJBEGokAAtCAQF/IwBBEGsi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bGogACgCLEEDdGogACgCOCAAKAIgakECdGogACgCREEAIAAoAjwbagtRAQF/IwBBIGsiASQAIAFBADYCGCABQqfRk8nXyoqXqH83AxAgAULJlsKU0KWm4jg3AwggACABQQhqQbS7wABBxQARBAAgASgCGCABQSBqJAALQAEBfyMAQSBrIgMkACADIAI2AhwgAyABNgIYIAMgAjYCFCADQQhqIANBFGoQmBsgACADKQMINwMAIANBIGokAAtJAQF+An5BiI/kAC0AAARAQZCP5AApAwAMAQtBiI/kAEEBOgAAQgALIQFBkI/kAEIANwMAIAAgAUIgiD4CBCAAIAGnQQFGNgIACz0BAn8gACgCACIBRQRAQQAPC0EBIQICQCABQTNJDQAgACgCBCABQQN0QQhrTw0AQQAhAiAAQQA2AgALIAILPwECfwJAIAAoAgAiAUF/Rg0AIAAoAgQhACABIAEoAgQiAkEBazYCBCACQQFHDQAgAUEEIABBC2pBfHEQoSQLCzMBAn8gACgCECICBEAgACgCDCACQQN0akEEaygCACEBCyABIAJBAXRrIgBBACAAIAFNGws+AQF/A0AgAQRAIABBBGoiAigCACAAQQhqKAIAENgVIAAoAgAgAigCABDRKSABQQFrIQEgAEEMaiEADAELCws4AQJ/IABBCGogASgCECIDBH8gASgCDCADQQN0akEEaygCAAUgAgsQ3RIgAEEANgIAIAAgATYCFAtAACABKAIAQQJHBEAgACABKQIANwIAIABBCGogAUEIaikCADcCAA8LIAEoAgQQkQ8hASAAQQI2AgAgACABNgIEC0AAIAEoAgBBAkcEQCAAIAEpAgA3AgAgAEEIaiABQQhqKAIANgIADwsgASgCBBCRDyEBIABBAjYCACAAIAE2AgQLQwEDfyAAEKsMIAAoAqgSIAAoAqwSEKQbIAAoArgSELUVIQMgAC0AvBJBAUYEQEHZ5OAAQShB5O3DABDhFwALaiADaguHAgEDfyMAQRBrIgMkACADIABBAmo2AgwjAEEQayICJAAgAiABKAIUQdGXxABBByABKAIYKAIMEQMAOgAMIAIgATYCCCACQQA6AA0gAkEANgIEIAJBBGogAEEYEIoIIABBAWpBGBCKCCADQQxqQRIQiggoAgAiAEEARyACLQAMIgRyIQECQCAARSAEQQFx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QQxqIABBCGopAgA3AgAgAUEwNgIAIAEgACkCADcCBCABEMMoIAFBQGskAAs6AQF/IwBBQGoiASQAIAFBDGogAEEIaikCADcCACABQS02AgAgASAAKQIANwIEIAEQwyggAUFAayQACzoBAX8jAEFAaiIBJAAgAUEMaiAAQQhqKAIANgIAIAFBITYCACABIAApAgA3AgQgARDDKCABQUBrJAALOgEBfyMAQUBqIgEkACABQRBqIABBCGopAwA3AwAgAUEvNgIAIAEgACkDADcDCCABEMMoIAFBQGskAAs6AQF/IwBBQGoiASQAIAFBDGogAEEIaikCADcCACABQSw2AgAgASAAKQIANwIEIAEQwyggAUFAayQACzoBAX8jAEFAaiIBJAAgAUEMaiAAQQhqKAIANgIAIAFBIzYCACABIAApAgA3AgQgARDDKCABQUBrJAALQQAgABCHHCAAKAIAIABBBGooAgAQ+ykgAEEMahDcJiAAQRhqEOokIAAoAjwQpx4gAEFAaxD8JiAAQcgAQQQQwhELQQAgABCHHCAAKAIAIABBBGooAgAQ+ykgAEEMahDcJiAAQRhqEOokIAAoAjwQpx4gAEFAaxD/JiAAQcgAQQQQwhELPQACQCAAKAIAIgAoAgBBA0cEQCAAEJYcDAELIABBEGoQxAMgAEEEahDQJiAAQSBqEI0lCyAAQShBCBDCEQs9AAJAIAAoAgAiACgCAEEDRwRAIAAQ7RoMAQsgAEEQahC7AiAAQQRqENAmIABBIGoQjSULIABBKEEIEMIRC0EAIAAQhxwgACgCACAAQQRqKAIAEPspIABBDGoQ3CYgAEEYahDqJCAAKAI8EKceIABBQGsQoycgAEHIAEEEEMIRC0gAAkACQAJAAkACQCAAKAIAQQFrDgQBAgMEAAsgAEIANwMQDwsgAEIANwMQDwsgAEIANwMIDwsgAEEEahCNKg8LIABCADcDCAtBACAAEIccIAAoAgAgAEEEaigCABD7KSAAQQxqENwmIABBGGoQ6iQgACgCPBCnHiAAQUBrEK4nIABByABBBBDCEQtBACAAEIccIAAoAgAgAEEEaigCABD7KSAAQQxqENwmIABBGGoQ6iQgACgCPBCnHiAAQUBrELgnIABByABBBBDCEQtBAQF/IAAtACYhAiAAQQA6ACYgASAAEOErIAFBBGogABDE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AQF/IAEoAhwiAkEQcUUEQCACQSBxRQRAIAAgARDKCw8LIAAtAAAgARCMDQ8LIAAgARDSDAs1AQF/IwBBEGsiAiQAIAIgADYCDCABQdiWwABBDUGolsAAQQUgAkEMakESEMILIAJBEGokAAssAQF+A34gAQR+IAFBAWshAUIBIAAxAACGIAKEIQIgAEEBaiEADAEFIAILCws3AgF/AX4jAEEQayICJAAgAiABNgIMIAIgADYCCCACQYCAgIB4NgIEIAJBBGoQkRkgAkEQaiQACy8BA38gACgCACIAKAIMIgMgASgCDCIETQR/IAEoAhAgBGogACgCECADak0FIAILCzIBAn8jAEEQayIBJAAgAUEIaiAAEPYJIAEoAgghACABKAIMIAFBEGokAEGAgMQAIAAbCzABA38gAC0AAEEERiICIAEtAAAiA0EERnEhBCACIANBBEZyBH8gBAUgACABEKoPCws1AQF/IwBBEGsiAiQAIAJBCGogAUEIaigCADYCACACIAEpAgA3AwAgACACENEJIAJBEGokAAs5AQF/IwBBEGsiBCQAIAQgATYCDCAEIAA2AghBACAEQQhqQcTE1gAgBEEMakHExNYAIAIgAxDyBgALNgEBfyMAQRBrIgIkACACIAA2AgwgAUHwjMMAQQ9B/4zDAEEEIAJBDGpBhwEQwgsgAkEQaiQACzYBAX8jAEEQayICJAAgAiAANgIMIAFBoJfEAEELQauXxABBAiACQQxqQYoBEMILIAJBEGokAAs1AQF/IwBBEGsiAiQAIAIgADYCDCABQdiXxABBBkHel8QAQQYgAkEMakEiEMILIAJBEGokAAs2AQF/IwBBEGsiAiQAIAIgADYCDCABQb6NwwBBDkHyiNoAQQQgAkEMakGXARDCCyACQRBqJAALMQEBfyMAQRBrIgIkACACIAE2AgwgAiAANgIIIAJBAzoABCACQQRqEOMeIAJBEGokAAs5AQF/IwBBEGsiASQAIABBgAJPBEBBlOPgAEErIAFBD2pByJrDAEHcpcMAEMMOAAsgAUEQaiQAIAALNAEBfyABKAIEIgIgASgCAEYEQCAAQSs2AgAPCyABIAJBHGsiAjYCBCAAIAFBCGogAhDhKQs2AQF/IwBBEGsiAiQAIAIgADYCDCABQa2XxABBB0HE68MAQQQgAkEMakGtARDCCyACQRBq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ayICJAAgAiAAKAIANgIMIAFBqPzDAEEYIAJBDGpBxQEQxAogAkEQaiQACzEBAX8jAEEQayICJAAgAiAAKAIANgIMIAFB3PzDAEEJIAJBDGpBORDECiACQRBqJAALMgEBfyMAQRBrIgIkACACIAAoAgA2AgwgAUHA/MMAQQ0gAkEMakHHARDECiACQRBqJAALMgEBfyMAQRBrIgIkACACIAAoAgA2AgwgAUHl/MMAQRMgAkEMakHBARDECiACQRBqJAALMAECfyABKAIAIgMgASgCBEkEQCABIANBAWo2AgBBASECCyAAIAM2AgQgACACNgIACy4BAX8CQCAAIAEQ5B4EfyABQQxNDQEgACgACQUgAgsPC0ENIAFBvNfDABChEAALMgEBfyMAQRBrIgIkACACIAAoAgA2AgwgAUHZ/MMAQQMgAkEMakHMARDECiACQRBqJAALNgEBfyABKAIAIgEgAxDfHiABKAIIIgQgASgCBGogAiADEPYGGiAAQQQ6AAAgASADIARqNgIICy8BAX8jAEEQayIDJAAgA0EIaiAAEJEMIAMoAgggAygCDCABIAIQ9SkgA0EQaiQACzMBAX8gACgCCCICIAAoAgBGBEAgABDsFgsgACACQQFqNgIIIAAoAgQgAkECdGogATYCAAsxAQF/IwBBEGsiAiQAIAIgACgCADYCDCABQezH2ABBByACQQxqQTsQxAogAkEQaiQACzEBAX8jAEEQayICJAAgAiAAKAIANgIMIAFB7NDYAEEEIAJBDGpBOxDECiACQRBqJAALPQICfgF/IAEpAwghAiABKAIQIQQgASkDABDhGiEDIAAgBDYCECAAIAI3AwggACADNwMAIAAgAS0AFDoAFAs0ACAALQAUQQJGBEAgACgCACIAQRhqEL0bIAApAwAQ3RogAEEwQQgQwhEPCyAAKQMAEN0aCy0BA38gACgCACICIAEoAgAiA3JFIQQgAkUgA0VyBH8gBAUgACABEIAqC0EBcwstAQF/IwBBQGoiASQAIAFBBHIgAEEoEPYGGiABQRc2AgAgARDDKCABQUBrJAALLQEBfyMAQUBqIgEkACABQQRyIABBKBD2BhogAUEeNgIAIAEQwyggAUFAayQACzsAIAEoAgBBgICAgHhGBEBBpOLYAEEiQbDj2AAQphIACyAAIAEpAgA3AgAgAEEIaiAB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IABBGGohAAwBCwsLPAACQAJAAkACQCAALQAADgcDAwMBAgADAAsgAEEEahDCBA8LIAAoAgQgACgCCBCtJA8LIABBBGoQyyYLCykBAn8jAEEQayIDJAAgA0EIaiIEIAAgASACEPYDIAQQ1RggA0EQaiQACy0BAX8jAEEQayICJAAgAkEIaiAAEJEMIAEgAigCCCACKAIMEKYDIAJBEGokAAtKAQJ/IwBBEGsiAiQAIAJBADYCDCMAQRBrIgMkACADIAE3AwggAyAANwMAIAJBDGogA0EQEIgLIANBEGokACACNQIMIAJBEGokAAsvAQF/IwBBEGsiAiQAIAIgADYCDCABQey82ABBCSACQQxqQZUCEMQKIAJBEGokAAsuAQF/IwBBEGsiAiQAIAIgADYCDCABQezH2ABBByACQQxqQTsQxAogAkEQaiQACzcCAX8BfiAAKAIAIgFFBEBBAA8LENgiIQAgASkCBCECIAEQ4RkhASAAIAI3AgQgACABNgIAIAALLwEBfyAAKAIIIQEgACgCBCEAA0AgAQRAIAFBAWshASAAEOYkIABBKGohAAwBCwsLNwAgAEEgahCaAwJAAkACQCAAKAIADgIBAgALIABBBGoQmgMPCyAAKQMIEN0aDwsgACkDCBDdGgsvAQF/IAAoAgghASAAKAIEIQADQCABBEAgAUEBayEBIAAQthMgAEEoaiEADAELCws3AQF/AkAgAC0ALEECRgRAIAAoAhgiARCEHCABQTBBCBDCEQwBCyAAKQMYEN0aCyAAKQMAEN0aCy8BAX8gACgCCCEBIAAoAgQhAANAIAEEQCABQQFrIQEgABC9ISAAQTBqIQAMAQsLCy0AA0AgAQRAIABBEGopAwAQ2yYgACkDABDdGiABQQFrIQEgAEEgaiEADAELCwsvAQF/IAAoAgghASAAKAIEIQADQCABBEAgAUEBayEBIAAQviggAEFAayEADAELCwsvAQF/IAAoAgghASAAKAIEIQADQCABBEAgAUEBayEBIAAQ3AUgAEEwaiEADAELCws3ACAAQSBqEL8oAkACQAJAIAAoAgAOAgECAAsgAEEEahC/KA8LIAApAwgQ3RoPCyAAKQMIEN0aCzQBA34gASkDACECIAEpAwghAxDIGCAAQQA2AhAgACADNwMIIABBADoAFCAAIAI3AwAQ3RoLLgEBfyMAQUBqIgIkACACIAE2AgggAiAANgIEIAJBMTYCACACEMMoIAJBQGskAAswAQF/IwBBEGsiASQAIAFBCGogABCRDEG4ldkAIAEoAgggASgCDBCBBCABQRBqJAALMAAgAAJ/IAEtAABFBEAgACABLQABOgABQQAMAQsgACABKQMIEOEaNwMIQQELOgAACzgBAX8gACABIAEoAgBBAnQiAkHU3eMAaigCAGooAgA2AgQgACABIAJBwN3jAGooAgBqKAIANgIACzABAX8jAEEQayIBJAAgAUEIaiAAEJEMQdCV2QAgASgCCCABKAIMEIEEIAFBEGokAAssAQF/IwBBEGsiAiQAIAIgATYCDCACIAA2AgggAkEIakEBELkTIAJBEGokAAsrAQF/IwBBEGsiAiQAIAJBCGpB3wAgACABENYNIAIoAgggAkEQaiQAQQFGCywBAX8jAEEQayICJAAgAiABNgIMIAIgADYCCCACQQhqQQIQuRMgAkEQaiQACzEAIAAgASkDCDcDACAAQRBqIAFBGGopAwA3AwAgAEEIaiABQRBqKQMANwMAIAEQvisLNwAgAEEgahDZAgJAAkACQCAAKAIADgIBAgALIABBBGoQ2QIPCyAAKQMIEN0aDwsgACkDCBDdGgs3ACAAQSBqENAoAkACQAJAIAAoAgAOAgECAAsgAEEEahDQKA8LIAApAwgQ3RoPCyAAKQMIEN0aCzcAIABBIGoQxAMCQAJAAkAgACgCAA4CAQIACyAAQQRqEMQDDwsgACkDCBDdGg8LIAApAwgQ3RoLNwAgAEEgahCiAgJAAkACQCAAKAIADgIBAgALIABBBGoQogIPCyAAKQMIEN0aDwsgACkDCBDdGgsuACAAKAIAIgAoAgBBA0cEQCAAIAEQgh8PCyAAQRBqIAEQwSsgAEEEaiABEOIYCy4AIAAoAgAiACgCAEEDRwRAIAAgARCDHw8LIABBEGogARDCKyAAQQRqIAEQ5BgLLgAgACgCACIAKAIAQQNHBEAgACABEIQfDwsgAEEQaiABEMYrIABBBGogARDlGAsuACAAKAIAIgAoAgBBA0cEQCAAIAEQhR8PCyAAQRBqIAEQxSsgAEEEaiABEOYYCy4AIAAoAgAiACgCAEEDRwRAIAEgABCGHw8LIABBEGogARDHKyAAQQRqIAEQ5xgLOwEBfyAAQQRqIQICQAJAAkAgACgCAEEBaw4CAQIACyACIAEQ4CsPCyACKAIAIAEQyhIPCyACIAEQ3isLNwAgAEEgahDaAgJAAkACQCAAKAIADgIBAgALIABBBGoQ2gIPCyAAKQMIEN0aDwsgACkDCBDdGgs3ACAAQSBqELwlAkACQAJAIAAoAgAOAgECAAsgAEEEahC8JQ8LIAApAwgQ3RoPCyAAKQMIEN0aCzcAIABBIGoQ7igCQAJAAkAgACgCAA4CAQIACyAAQQRqEO4oDwsgACkDCBDdGg8LIAApAwgQ3RoLNwAgAEEgahCOAgJAAkACQCAAKAIADgIBAgALIABBBGoQjgIPCyAAKQMIEN0aDwsgACkDCBDdGgswACAAEKkSIgCnQbnz3fF5bEEFdyAAQiCIp3NBufPd8XlsQQV3IAFzQbnz3fF5bK0LNwAgAEEgahD0KAJAAkACQCAAKAIADgIBAgALIABBBGoQ9CgPCyAAKQMIEN0aDwsgACkDCBDdGgs7AQF/IABBBGohAgJAAkACQCAAKAIAQQFrDgIBAgALIAIgARDmLA8LIAIoAgAgARDODQ8LIAIgARD1LAsuACAAKAIAIgAoAgBBA0cEQCABIAAQmBoPCyAAQRBqIAEQ5CwgAEEEaiABEPIYCy4AIAAoAgAiACgCAEEDRwRAIAAgARCLHw8LIABBEGogARDnLCAAQQRqIAEQ8xgLMAEBfyMAQRBrIgMkACADIAAgARCpIyACQRBqIAMpAwAgAygCCBC8CBogA0EQaiQACy4AIAAoAgAiACgCAEEDRwRAIAAgARCNHw8LIABBEGogARDsLCAAQQRqIAEQ9hgLLgAgACgCACIAKAIAQQNHBEAgACABEI4fDwsgAEEQaiABEOgsIABBBGogARD3GAs3ACAAQSBqENsCAkACQAJAIAAoAgAOAgECAAsgAEEEahDbAg8LIAApAwgQ3RoPCyAAKQMIEN0aCy4BAX9BASEBIAAoAgBBAUYEfyAAKAIEIgFB//97SSAAKAIIIAFyQQBHcQUgAQsLNwAgAEEgahCPAgJAAkACQCAAKAIADgIBAgALIABBBGoQjwIPCyAAKQMIEN0aDwsgACkDCBDdGgs3ACAAQSBqEPwoAkACQAJAIAAoAgAOAgECAAsgAEEEahD8KA8LIAApAwgQ3RoPCyAAKQMIEN0aCzcAIABBIGoQsgICQAJAAkAgACgCAA4CAQIACyAAQQRqELICDwsgACkDCBDdGg8LIAApAwgQ3RoLRQEBf0EBIQECQAJAAkACQCAAKAIAQQFrDgcAAwMBAQMCAwsgACgCICgCGEGAgICAeEcPC0EADwsgACgCBBCLDyEBCyABCykBAX8CfyAAKAIAIgFBEUcEQEEBIAFBAUcNARpBAA8LIABBCGoQrxwLCzcAIABBIGoQswICQAJAAkAgACgCAA4CAQIACyAAQQRqELMCDwsgACkDCBDdGg8LIAApAwgQ3RoLNwAgAEEgahDcAgJAAkACQCAAKAIADgIBAgALIABBBGoQ3AIPCyAAKQMIEN0aDwsgACkDCBDdGgs3ACAAQSBqEJIpAkACQAJAIAAoAgAOAgECAAsgAEEEahCSKQ8LIAApAwgQ3RoPCyAAKQMIEN0aCy4AIAAoAgAiACgCAEEDRwRAIAAgARCPHw8LIABBEGogARCHLSAAQQRqIAEQgBkLNwAgAEEgahDGAgJAAkACQCAAKAIADgIBAgALIABBBGoQxgIPCyAAKQMIEN0aDwsgACkDCBDdGgs3ACAAQSBqEMcCAkACQAJAIAAoAgAOAgECAAsgAEEEahDHAg8LIAApAwgQ3RoPCyAAKQMIEN0aCzcAIABBIGoQjCYCQAJAAkAgACgCAA4CAQIACyAAQQRqEIwmDwsgACkDCBDdGg8LIAApAwgQ3RoLNwEBfyABKAIEIQQCQCABKAIARQRAIAEoAgghAwwBCyAEEJ4OIAIhBAsgACADNgIEIAAgBDYCAAs4AQF/IAAgASABKAIAQQJ0IgJBlOvjAGooAgBqKAIANgIEIAAgASACQYDr4wBqKAIAaigCADYCAAs0AAJAIAEoAjhFDQAgAS0APEUEQCABIAIQkwQMAQsgASACNgIEIAFBATYCAAsgAEEEOgAACzgBAX8gACABIAEoAgBBAnQiAkGg7OMAaigCAGooAgA2AgQgACABIAJBjOzjAGooAgBqKAIANgIACyoBAX8jAEEQayIDJAAgA0EIaiACIAAgARDWDSADKAIIIANBEGokAEEBRgs4AQF/IAAgASABKAIAQQJ0IgJBmO/jAGooAgBqKAIANgIEIAAgASACQfzu4wBqKAIAaigCADYCAAs4AQF/IAAgASABKAIAQQJ0IgJBmPHjAGooAgBqKAIANgIEIAAgASACQYTx4wBqKAIAaigCADYCAAsuAQJ/IAAgASgCCCICQQFrIgMgAiACIANLGyADIAIgAiADSRsQzRggASAAEJotCysAIAFBDGwhAQNAIAEEQCAAKAIAIAIQ/C0gAUEMayEBIABBDGohAAwBCwsLNwAgAEEgahCrKQJAAkACQCAAKAIADgIBAgALIABBBGoQqykPCyAAKQMIEN0aDwsgACkDCBDdGgsuACAAKAIAIgAoAgBBA0cEQCAAIAEQmR8PCyAAQRBqIAEQqy0gAEEEaiABEIYZCy4AIAAoAgAiACgCAEEDRwRAIAAgARCaHw8LIABBEGogARCfLSAAQQRqIAEQiBkLLgAgACgCACIAKAIAQQNHBEAgASAAEJsfDwsgAEEQaiABEKUtIAEgAEEEahCLGAsrACABIANLBEAgASADIAQQoBAACyAAIAMgAWs2AgQgACACIAFBKGxqNgIACzcAIABBIGoQ3gICQAJAAkAgACgCAA4CAQIACyAAQQRqEN4CDwsgACkDCBDdGg8LIAApAwgQ3RoLLgACQCADaUEBR0GAgICAeCADayABSXJFBEAgACABIAMgAhDzAiIADQELAAsgAAsrACAAAn8gAUH+////B00EQCAAIAE2AgRBAAwBCyAAIAGtNwMIQQELNgIACzgBAX9BASEBIAAtAARFBEAgACgCACIBKAIUQfmu4ABBASABKAIYKAIMEQMAIQELIAAgAToABCABCyoAA0AgAQRAIAAoAgAgAEEEaigCABC+KSABQQFrIQEgAEEMaiEADAELCwsqAANAIAEEQCAAKAIAIABBBGooAgAQwSkgAUEBayEBIABBDGohAAwBCwsLLwEBf0EBIQICQCABEAVBAUcEQEEAIQIMAQsgARAgIQELIAAgATYCBCAAIAI2AgALKgADQCABBEAgACgCACAAQQRqKAIAEK0kIAFBAWshASAAQRBqIQAMAQsLCyoAA0AgAQRAIAAoAgAgAEEEaigCABCtJCABQQFrIQEgAEEUaiEADAELCws4AQF/QQEhASAALQAERQRAIAAoAgAiASgCFEGvruAAQQEgASgCGCgCDBEDACEBCyAAIAE6AAQgAQssAQF/IAIEQCAAIAEgAm4iAzYCACAAIAEgAiADbGs2AgQPC0HcpsIAEJIbAAsmAQF+IAFQRQRAIAAgAYAiAiAAIAEg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IAEgAyAEEKAQAAsgACADIAFrNgIEIAAgASACajYCAAsrAQF/IAEoAgAiAgRAIAAgAhEBAAsgASgCBCICBEAgACACIAEoAggQwhELCzABAX8gACgCACIBQYGAxABGBEAgACAAQQRqENUKIgE2AgALIABBACABQYCAxABHGwsiACABRQRAQgAPCyABrUIFhiABQQJ0IABqQQRrKAIAZ619Cy4BAX8gAQR/QfiP5AAtAAAaQcAAIAEQ+QUFQcAACyECIAAgATYCBCAAIAI2AgALMAEBfyMAQRBrIgEkACABQQA2AgwgAUKAgICAEDcCBCAAIAFBBGoQsRMgAUEQaiQACzEBAX8jAEEQayIBJAAgAUEANgIMIAFCgICAgMAANwIEIAAgAUEEahCwEyABQRBqJAALLwAgACgCAEEDRwRAIABBJGoQ0B4gACgCDCAAKAIQENYpIAAoAhggACgCHBDBKQsLMAAgACgCECAAKAIUIAAgAkH/AXFqQSxqLQAAIAEgACgCsAJ0akGgk8MAEKEfKQMACy0BAX8gASgCCCICIAEoAgxPBEAgAEErNgIADwsgASACQQFqNgIIIAAgARCvKAstAQF/IAEoAgwiAiABKAIITQRAIABBKzYCAA8LIAEgAkEBazYCDCAAIAEQrygLNAAgASgCFCAAKAIAKAIAaEECdCIAQcjT4wBqKAIAIABBgNPjAGooAgAgASgCGCgCDBEDAAsoACACIANJBEAgAyACIAQQoBAACyAAIAIgA2s2AgQgACABIANqNgIACy8BAX9BASEEAkAgAUEBcUUEQEEAIQQMAQsgAxDbHCECCyAAIAI2AgQgACAENgIACzQAIAEoAhQgACgCACgCAGhBAnQiAEHY1eMAaigCACAAQZDV4wBqKAIAIAEoAhgoAgwRAwALLgAgAEF/IAIgBGoiBCACIARLGzYCBCAAIAFBgICAgHhHIANBgICAgHhHcTYCAAslAQJ/IwBBEGsiASQAIAFBCGoiAiAAEPEpIAIQ1RggAUEQaiQACzABAX8gACgCACIBQYGAxABGBEAgACAAQQRqEMIaIgE2AgALIABBACABQYCAxABHGws1AQF/IABBBGohAQJAAkACQCAAKAIADgIBAgALIAEQ/CQPCyABKAIAEP4qDwsgASgCABDHKAssAQF/IAAoAgAiAUECRwRAIABBBGoh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LQAgASgCAEUEQCABQX82AgAgACABNgIEIAAgAUEEajYCAA8LQZDn2AAQ4BQACzMAIAEoAhQgACgCAC0AAEECdCIAQaze4wBqKAIAIABBoN7jAGooAgAgASgCGCgCDBEDAAszACABKAIUIAAoAgAtAABBAnQiAEHE3uMAaigCACAAQbje4wBqKAIAIAEoAhgoAgwRAwALMwAgASgCFCAAKAIALQAAQQJ0IgBBhN/jAGooAgAgAEHQ3uMAaigCACABKAIYKAIMEQMACzMAIAEoAhQgACgCAC0AAEECdCIAQezm4wBqKAIAIABB4ObjAGooAgAgASgCGCgCDBEDAAssACAAKQMIEN0aIABBIGoQux0gAEE4ahDdJiAAQSRqENgmIABByABBCBDCEQsqACAAKAIAIgAEQCAAELYJIAAoAgAgAEEEaigCABDFKSAAQRRBBBDCEQsLKAAgACgCACIAKAIAQQNHBEAgABD4Hw8LIABBEGoQzS0gAEEEahC5GQssAANAIAAtABRBAkdFBEAgACgCAEEYaiEADAELCyABIAApAwAgACgCEBDyGgsuACABKAIARQRAIAAgASkDCBDhGiAAKAIUEKYICyABQTBqIAAQjBogASAAELYRCysAA0AgAC0AFEECR0UEQCABQQE6ADkgACgCAEEYaiEADAELCyAAIAEQuw8LJwECfyMAQUBqIgAkACAAQQA2AgggAEIMNwMAIAAQwyggAEFAayQACzUBAX8gAEEEaiEBAkACQAJAIAAoAgBBAWsOAgECAAsgARDxLQ8LIAEoAgAQ0hQPCyABEOctCywAIAAQ5iYgAEEMahDcJiAAQRhqEOokIAAoAjwQxCggAEFAaxD6JyAAEPgqCzoBAX9BHBDSICIAQQA2AgggAEKBgICAEDcCACAAQdCY4wApAwA3AgwgAEEUakHYmOMAKQMANwIAIAALLAEBfwJAIAAoAgAiAUUNACABIAEoAgAiAUEBazYCACABQQFHDQAgABDiFQsLKAAgACABEJotIAAoAgwiAARAIAEgAEEMaigCACAAQRBqKAIAEIYgCwswACABKAIUIAAtAABBAnQiAEH0nuMAaigCACAAQeie4wBqKAIAIAEoAhgoAgwRAwALMAAgASgCFCAALQAAQQJ0IgBBmJ/jAGooAgAgAEGMn+MAaigCACABKAIYKAIMEQMA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ABD/FwsLHwADQCABBEAgAUEBayEBIAAQ4AkgAEEoaiEADAELCwsdACAAIAFBaGxqIgBBGGspAwAgAEEQaygCABCiHAslAQF/IABBBGohAiAAKAIAQQJHBEAgAiABEJ4tDwsgAiABEJ0tCyYAIAEoAhggABCvCCABLQAUQQJHBEAgACABKQMAIAEoAhAQ/BELCyYAIAEoAhggABCoFSABLQAUQQJHBEAgACABKQMAIAEoAhAQ/BELCyEAIABBIGogARCrLSAAKAIAQQJPBEAgAEEEaiABEKstCwshACAAQSBqIAEQny0gACgCAEECTwRAIABBBGogARCfLQsLIQAgAUEgaiAAEKUtIAEoAgBBAkYEQCABQQRqIAAQpS0LCyEAIABBIGogARCaLSAAKAIAQQJPBEAgAEEEaiABEJotCwslACAAQQRqKAIAIABBCGooAgAgAiABKAIAdkHkj8AAEJ4fKAIACxwAIAEgAk0EQCACIAEgAxCfEAALIAAgAkECdGoLHAAgASACTQRAIAIgASADEJ8QAAsgACACQRRsagscACABIAJNBEAgAiABIAMQnxAACyAAIAJBCWxqCxwAIAEgAk0EQCACIAEgAxCfEAALIAAgAkEDdGoLJQEBfwJAIAAoAjhFDQAgACgCQCIBRQ0AIAAoAjwgAUEBEMIRCwscACABIAJNBEAgAiABIAMQnxAACyAAIAJBDGxqCx8AIAEgAk0EQCACIAFBkI/EABCfEAALIAAgAkECdGoLHQAgACABIAIgAyABQQFyZ0EBdEE+c0EAIAQQzwELHQAgACABIAIgAyABQQFyZ0EBdEE+c0EAIAQQwAELKgEBfyAAKAIAIAAoAgQQ0SkgACgCECIBIAAoAhQQzhwgACgCDCABENIpCyMBAX8gACgCDCIBBEAgACgCCCABQQEQwhELIABBIEEIEMIRCyUAIABFBEBBhJrjAEEyELIqAAsgACACIAMgBCAFIAEoAhARDgALHwAgACACNgIEIAAgASACKAIIQQFrQXhxakEIajYCAAsdACABRQRAQQAPCyAAIAFqQQFrLQAAIAJB/wFxRgscACABIAJNBEAgAiABIAMQnxAACyAAIAJBBHRqCx8AIAEgAk0EQCACIAFBjI3EABCfEAALIAAgAkECdGoLJQAgAEEEaigCACAAQQhqKAIAIAIgASgCAHZB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9CgLCx0AIABBIGoQ5C0gACgCAEECTwRAIABBBGoQ5C0LCx0AIABBIGoQ5i0gACgCAEECTwRAIABBBGoQ5i0LCx0AIAAtADRBA0cEQCAAQSBqELggCyAAQThqEM0nCyEAA0AgAC0ALEECR0UEQCAAKAIYIQAMAQsLIABBADoALAsnAAJAAkACQCAAKAIADgMAAgECCyAAKQMIEN0aDwsgAEEEahCMKQsLIgEBfyAAQQRqIQEgACgCAEUEQCABKAIAEMAoDwsgARCEIwsiACABKAIAQYCAgIB4RgRAIABBBDoAAA8LIAAgAiABEOATCxwAIAAEQCABIABBDGooAgAgAEEQaigCABCcLQsLGwAgACABIAIgASACSRsgASACIAEgAksbEM0YCxwAIAAEQCABIABBBGooAgAgAEEIaigCABCcLQsLHAAgAARAIABBBGooAgAgAEEIaigCACABEIgbCwsaAQF/IAAoAgBBEUYEfyAAQQhqEKYPBSABCwscACAABEAgASAAQQxqKAIAIABBEGooAgAQhiALCxsAIAAgASACIAMgAUEBcmdBAXRBPnNBABDSAQslACAAIAEoAgQgASgCCCACQdCDwAAQnx8oAgA2AgQgACABNgIACyUAIAAgASgCBCABKAIIIAJB4IPAABCfHygCCDYCBCAAIAE2AgALIAEBf0E0EMAtIgBFBEAACyAAQQA7ATIgAEEANgIAIAALIQEBf0HkABDALSIARQRAAAsgAEEAOwEyIABBADYCACAACyQAIAAtAABFBEAgAUGUtuAAQQUQpgMPCyABQZm24ABBBBCmAwsbAEH4j+QALQAAGiAAIAEQqyEiAARAIAAPCwALGQAgASACTQRAIAIgASADEJ8QAAsgACACagsiACAAKAIQIAAoAhQgASAAKAI8dkECa0Ggj8QAEKMfKAIICygAIABBHGpBACACQoyWr93dyrvZin9RG0EAIAFC8+O2qtnDt4JQURsLKQAgAEEcakEAIAJC7bqtts2F1PXjAFEbQQAgAUL4gpm9le7Gxbl/URsLIQAgAEUEQEGEmuMAQTIQsioACyAAIAIgAyABKAIQEQQACyQAIABBgYCAgHhHBEAgAEUEQEHowt8AQRFBqPTCABDhFwsACwsfAQF/IAAoAggiASAAKAIASQRAIAAgAUEEQRQQ2w8LCx8BAX8gACgC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AgQQvikgACgCDCIAIAAoAgAoAgARAQALGgAgAEELTQRAIAAPCyAAQQtB1J/AABChEAALGABB+I/kAC0AABogABBgIgAEQCAADwsACx0AIABBADYCACAAIAFB3AJB2AIgAhtqKAIANgIECx0AIABBADYCACAAIAFBwAJBvAIgAhtqKAIANgIECxgAIAAgAU0EQA8LIABBAEGExN8AEKEQAAshAQF/QfiP5AAtAAAaIAEQYCECIAAgATYCBCAAIAI2AgALHAEBfyAAKAIAIgEEQCAAKAIIIAFBBEEIELsiCwsYACAAQQFxBEAgAQ8LQajIwABBMRCyKgALIQEBfyABKAIAIQIgAUEANgIAIAAgAiABKAIEENggEM8PCxoAIAEEf0H4j+QALQAAGiABIAAQqyEFIAALCx8AIABFBEBBhJrjAEEyELIqAAsgACACIAEoAhARAgALFQAgAiADaiICIABPIAIgACABak1xCyEBAX8gAS0ADCECIAAgASgCBCABKAIIELMVIAAgAjoADAsfACAAIAEgAigCBCIAIAIoAggQ2RsgAigCACAAEMEpCxcAIAAgAU0EQCAADwsgACABIAIQoRAACxsAIAApAwBCAlIEQCAAELokIABBiAVqELokCwscACABQQNNBEBBBCABQbDUwwAQoRAACyAAKAAACyQAIAAoArABRQRAQZz/wwBBH0G8/8MAEKYSAAsgACABNgK4AQsbACAAKAIAQYiAxABHBEAgABDuDw8LIABBDGoLIgEBfwJAAkACQCAAQQRrDgQAAAEBAgtBAQ8LIAEhAgsgAgsaACAAIAFNBEAgAA8LIAAgAUGExN8AEKEQAAsaACABQQFxRQRAIAIgABCEEg8LIAIgABDFDQsXAEEBQX9BACAAKAIAIAJLGyABIAJJGwseACAAQQA2AhAgACACNgIEIAAgATYCACAAQQA2AggLHgAgAkUEQCAAIAFBzrHgAEEBELcbDwsgAEEEOgAACxsAIAEoAgAgAkEEdGtBEGsoAgBBufPd8XlsrQscACAAKAIARQRAIAApAwgQ3RoPCyAAQQRqEJoDCxoAIAAoAgAiAARAIAAQzyYgAEEUQQQQwhELCxwAIAAoAgBFBEAgACkDCBDdGg8LIABBBGoQvygLHwAgACkDCCAAKQMYEPQqIABBIGoQ9yQgACgCOBDAKAsbACAA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AwALGQAgASgCFEHU7cAAQQsgASgCGCgCDBEDAAsZACABKAIUQd/twABBDiABKAIYKAIMEQMACxUAIABBgICAgHhHBEAgACABEK0kCwsUACABKAIEGiAAQfj9wQAgARCKBAsRACAAIAEgASACQQJ0ahCVGQsSACAALQAMQQJJBEAgABDRHgsLFgAgASAAKAIAIgAoAgQgACgCCBCmAwsTACAAQUBrELskIABB+ARqENAeCxIAIAAtAAxBA0cEQCAAELwkCwsSACAALQAMQQJHBEAgABDRHgsLFwAgACgCACgCACABKAIUIAEoAhgQhgML/wEBCH8gACgCAEGAgICAeEcEQAJAIAAiBigCCCIDQQJJDQAgACgCBCIEIQBBASEBA0AgASADRg0BIABBEGoiAiAAEKQZRQRAIAFBAWohASACIQAMAQsLIAIoAgAgAkEEaigCABC+KSAEQRBqIQcgASEAA0AgAEEBaiECIAcgAEEEdGohACAEIAFBBHRqIgVBEGshCANAIAIgA08EQCAGIAE2AggMAwsgACAIEKQZBEAgACgCACAAQQRqKAIAEL4pIABBEGohACACQQFqIQIMAQUgBSAAKQIANwIAIAVBCGogAEEIaikCADcCACABQQFqIQEgAiEADAILAAsACwALCwsWACAAKAIAQYCAgIB4RwRAIAAQziILCxMAIABBIGoQmBkgAEGkA2oQ4hcLEgAgAC0ADEEDRwRAIAAQ1BwLCxMAIABBQGsQwSQgAEHYAGoQ1QwLEgAgACgCAEEpTQRAIAAQgRELCxIAIAAoAjhBAkcEQCAAEKIfCwsWACAAKAIAQYCAgIB4RwRAIAAQsigLCxIAIAAtAAlBA0cEQCAAENEeCwsQACABBEAgACABQQEQwhELCxUAIAAoAgAiABCFDCAAQRxBBBDCEQsXACAAEKsMIAAoAqANIAAoAqQNEKQbagsVACAAKAIAIgAQ+w0gAEEcQQQQwhELFQAgACgCACIAEL8JIABBCEEEEMIRCxYAIAAoAgAiABCEESAAQfQAQQQQwhELFgAgACgCACIAEIQRIABB2ABBBBDCEQsVACAAKAIAIgAQySYgAEEcQQQQwhELEgAgACgCAEECRwRAIAAQmx4LCxYAIAAoAgAiABCzHSAAQdgAQQQQwhELFgAgACgCACIAELMdIABB9ABBBBDCEQsV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KAIABEAgABCOJQsLDwAgACgCAARAIAAQxAMLCxIAIAApAwAQ3RogAEEYahCVJwsPACAAKAIABEAgABCUBQsLDwAgACgCAARAIAAQvhQLCxIAIAAoAhAQ0CEgAEEIahCKJQsPACAAKAIABEAgABCSJQsLDwAgACgCAARAIAAQzQILCw8AIAAoAgAEQCAAEJgFCwsPACAAKAIABEAgABCUJQsLDwAgACgCAARAIAAQuwILCw8AIAAoAgAEQCAAEPsECwsPACAAKAIABEAgABCEFwsLDwAgACgCAARAIAAQogILCw8AIAAoAgAEQCAAEJUlCwsPACAAKAIABEAgABDsBAsLEQAgAEIANwMIIABBGGoQpyULEwAgACABEMQjIAAoAhggARDHBQsTACAAIAEQgyEgACgCGCABEI0SCxMAIAAgARCDISAAKAIYIAEQrAgLEwAgASAAENshIAAoAiAgARCNEgsTACABIAAQ3iEgACgCICABEI8SCw8AIAAoAgAEQCAAEMotCwsPACAAKAIABEAgABDNLQsLEgAgACkDABDdGiAAQRhqEK4nCw8AIAAoAgAEQCAAEKslCwsPACAAKAIABEAgABDaAgsLDwAgACgCAARAIAAQhQULCxQAIAEgACkDABDhGiAAKAIQEOkYCw8AIAAoAgAEQCAAEL0lCwsPACAAKAIABEAgABC8JQsLDwAgACgCAARAIAAQ7QQLCw8AIAAoAgAEQCAAENgtCwsPACAAKAIABEAgABDsAwsLDwAgACgCAARAIAAQ1y0LCw8AIAAoAgAEQCAAEMElCwsPACAAKAIABEAgABDuKAsLEgAgACkDABDdGiAAQRhqELgnCw8AIAAoAgAEQCAAEIYFCwsRACAAQQxqEP8UIABBADYCCAsPACAAKAIABEAgABDCJQsLDwAgACgCAARAIAAQjgILCw8AIAAoAgAEQCAAEO4ECwsSACAAKQMAEN0aIABBGGoQwScLDwAgACgCAARAIAAQxSULCw8AIAAoAgAEQCAAEPQoCwsPACAAKAIABEAgABCHBQsLDgAgAFBFBEAgARDbJgsLDwAgACgCAARAIAAQiwoLCw8AIAAoAgAEQCAAENsCCwsPACAAKAIABEAgABDkJQsLDwAgACgCAARAIAAQ1BcLCxIAIAApAwAQ3RogAEEYahDKJwsPACAAKAIABEAgABDdJQsLDwAgACgCAARAIAAQiAULCw8AIAAoAgAEQCAAELICCwsPACAAKAIABEAgABDpLQsLDwAgACgCAARAIAAQ/QULCw8AIAAoAgAEQCAAEOgtCwsPACAAKAIABEAgABDjJQsLDwAgACgCAARAIAAQjwILCw8AIAAoAgAEQCAAEO8ECwsSACAAQRhqEIMeIAApAwAQ3RoLEgAgACkDABDdGiAAQRhqEMcnCw8AIAAoAgAEQCAAEPwoCwsPACAAKAIABEAgABCJBQsLEgAgACkDABDdGiAAQRhqENgnCw8AIAAoAgAEQCAAEOclCwsPACAAKAIABEAgABDwBAsLEQAgAEEAOgAUIABBGGoQlyoLDwAgACgCAARAIAAQswILCw8AIAAoAgAEQCAAEO4lCwsPACAAKAIABEAgABDxBAsLEgAgACkDABDdGiAAQRhqENwnCw8AIAAoAgAEQCAAENwCCwsPACAAKAIABEAgABDwJQsLDwAgACgCAARAIAAQigULCxIAIAApAwAQ3RogAEEYahDgJwsOACAABEAgACABEPsJCwsPACAAKAIABEAgABD0JQsLDwAgACgCAARAIAAQjCkLCw8AIAAoAgAEQCAAEPIECwsPACAAKAIABEAgABD3JQsLDwAgACgCAARAIAAQiwULCw8AIAAoAgAEQCAAEOYtCwsPACAAKAIABEAgABCSKQsLEgAgACkDABDdGiAAQRhqEOcnCw8AIAAoAgAEQCAAEOQtCwsSACAAKQMAEN0aIABBGGoQ7icLDwAgACgCAARAIAAQgyYLCw8AIAAoAgAEQCAAEMYCCwsPACAAKAIABEAgABCMBQsLDwAgACgCAARAIAAQxwILCxIAIAApAwAQ3RogAEEYahDzJwsPACAAKAIABEAgABCIJgsLDwAgACgCAARAIAAQjQULCw8AIAAoAgAEQCAAEI0mCwsPACAAKAIABEAgABCMJgsLDwAgACgCAARAIAAQ9AQLCxMAIAAoAgAgACgCBEEEQQwQuyILDwAgACgCAARAIAAQnikLCw8AIAAoAgAEQCAAEJImCwsPACAAKAIABEAgABC3BQsLEgAgACkDABDdGiAAQRhqEPonCw8AIAAoAgAEQCAAEIYjCwsPACAAKAIABEAgABDRBgsLFAAgABCHIyAAKAIcIAAoAiAQwSkLEwAgACgCCCAA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BEFAayINKAIAIAIoAggiCSACKAIMIgggBSAMENUdIAMoAuwBIgBBAWsOAgQGBQsCQAJAIAQoAtwCIgFFDQAgASAEKALUAksNACADQShqIAQgARCNICADIAMpAyg3AoQCIANBIGogA0GEAmpBABD+D0EBIQcgAygCIEEBcUUNASADQeABaiIAIAMoAiQiCSAFIARBNGooAgAgBEE4aigCACAJQbiRxAAQnh8oAgBrIAUQ0hIgCEEBcUUNACAAIQIMCQsgAigCDCIJIAUgBSAJSRshCiAEQcgAaiELIAIoAgghDSAEQQhqIQ4gBEEEaiEPIARBOGohECAEQTRqIREgBEEgaiESIARBHGohEyAFIQADQCAAIAxGBEAgBiADKQPgATcCBCAGIAc2AgAgBkEMaiADQegBaigCADYCAAwLCwJAIAAgCkcEQCAAIA1qLQAAIQICfyAPKAIAIA4oAgAgAUH8jMQAEJ8fKAIEIhQEQCATKAIAIBIoAgAgFCACIAtqLQAAakGMjcQAEJ4fKAIADAELIANBGGogBCABEIwgIAMgAykDGDcC/AEDQCADQYQCaiADQfwBahD6DiADLQCEAkUNDCADLQCFAiIBIAJJDQALIAEgAkcNCyADKACGAgshASADQeABaiECIAFBAUYNCyABIAQoAtACSw0BIAFFDQsgASAEKALUAksNASADQRBqIAQgARCNICADIAMpAxA3AoQCIANBCGogA0GEAmpBABD+DyADKAIIQQFxRQ0NIANB7AFqIgIgAygCDCIUIABBAWoiFSARKAIAIBAoAgAgFEG4kcQAEJ4fKAIAayAVENISIAMoAuwBIAVLDQEgA0HoAWogA0H0AWooAgA2AgAgAyADKQLsATcD4AFBASEHIAhBAXFFDQEMCwsgCiAJQcCpwAAQnxAACyAAQQFqIQAMAAsACwwJCyAGQQA2AgAMBwsgCEEBcUUEQAJAIAQoAtgCIgFFDQAgASAEKALUAksNACADQfgAaiAEIAEQjSAgAyADKQN4NwLgASADQfAAaiADQeABakEAEP4PQQEhByADKAJwQQFxRQ0JIANB7AFqIAMoAnQiACAFIARBNGooAgAgBEE4aigCACAAQbiRxAAQnh8oAgBrIAUQ0hILIAIoAgwiCCAFIAUgCEkbIQkgBEHIAGohDSACKAIIIQ4gBEEIaiECIARBBGohCiAEQThqIQ8gBEE0aiEQIARBIGohESAEQRxqIRIDQCAFIAxGBEAgBiADKQLsATcCBCAGIAc2AgAgBkEMaiADQfQBaigCADYCAAwJCwJAIAUgCUcEQCANIAUgDmotAAAiC2ohEyABIQADQAJAAkACfyAKKAIAIAIoAgAgAEH8jMQAEJ8fKAIEIgEEQCASKAIAIBEoAgAgASATLQAAakGMjcQAEJ4fKAIADAELIANB6ABqIAQgABCMICADIAMpA2g3AoQCA0AgA0HgAWogA0GEAmoQ+g4gAy0A4AFFDQIgAy0A4QEiASALSQ0ACyABIAtHDQEgAygA4gELIgFBAUcNAQsgCigCACACKAIAIABBqJHEABCfHygCDCEADAELCyABIAQoAtACSw0BAkAgAQRAIAEgBCgC1AJNDQEMAwsgBiADKQLsATcCBCAGIAc2AgAgBkEMaiADQfQBaigCADYCAAwLCyADQeAAaiAEIAEQjSAgAyADKQNgNwLgASADQdgAaiADQeABakEAEP4PIAMoAlhBAXFFDQtBASEHIANB7AFqIAMoAlwiACAFQQFqIgsgECgCACAPKAIAIABBuJHEABCeHygCAGsgCxDSEgwBCyAJIAhBwKnAABCfEAALIAVBAWohBQwACwALIAYCfwJAAkAgBCgC2AIiAUUNACABIAQoAtQCSw0AIANB0ABqIAQgARCNICADIAMpA1A3AuABIANByABqIANB4AFqQQAQ/g8gAygCSEEBcUUNCiADQewBaiADKAJMIgAgBSAEQTRqKAIAIARBOGooAgAgAEG4kcQAEJ4fKAIAayAFENISDAELIAIoAgwiByAFIAUgB0kbIQggBEHIAGohCyACKAIIIQ0gBEEIaiECIARBBGohCSAEQSBqIQ4gBEEcaiEPA0AgBSAMRgRAIAZBADYCAAwKCwJAIAUgCEcEQCALIAUgDWotAAAiCmohECABIQADQAJAAn8gCSgCACACKAIAIABB/IzEABCfHygCBCIBBEAgDygCACAOKAIAIAEgEC0AAGpBjI3EABCeHygCAAwBCyADQUBrIAQgABCMICADIAMpA0A3AoQCA0AgA0HgAWogA0GEAmoQ+g4gAy0A4AFFDQIgAy0A4QEiASAKSQ0ACyABIApHDQEgAygA4gELIgFBAUcNAwsgCSgCACACKAIAIABBqJHEABCfHygCDCEADAALAAsgCCAHQcCpwAAQnxAACwJAIAEgBCgC0AJLDQBBACABRQ0DGiABIAQoAtQCSw0AIANBOGogBCABEI0gIAMgAykDODcC4AEgA0EwaiADQeABakEAEP4PIAMoAjBBAXEEQCADQewBaiADKAI0IgAgBUEBaiIBIARBNGooAgAgBEE4aigCACAAQbiRxAAQnh8oAgBrIAEQ0hIMAwsMCwsgBUEBaiEFDAALAAsgBiADKQLsATcCBCAGQQxqIANB9AFqKAIANgIAQQELNgIADAYLAkAgBCgC2AIiAUUNACABIAQoAtQCSw0AIANBqAFqIAQgARCNICADIAMpA6gBNwLsASADQaABaiADQewBakEAEP4PIAMoAqABQQFxRQ0HIANB4AFqIAMoAqQBIgAgBSAEQTRqKAIAIARBOGooAgAgAEG4kcQAEJ4fKAIAayAFENISIAZBATYCACAGQQxqIANB6AFqKAIANgIAIAYgAykC4AE3AgQMBgsgA0HsAWogACAEQUBrIgsoAgAgAigCCCIIIAIoAgwiByAFIAwQ1R0CQAJAAkAgAygC7AEiAEEBaw4CAQACCyAEQcgAaiENIAMoAvABIQIgBEEIaiEJIARBBGohCiAEQSBqIQ4gBEEcaiEPA0AgDCACIgVNBEAgBkEANgIADAkLAkAgBSAHSQRAIA0gBSAIai0AACICaiEQIAEhAANAAkACfyAKKAIAIAkoAgAgAEH8jMQAEJ8fKAIEIgEEQCAPKAIAIA4oAgAgASAQLQAAakGMjcQAEJ4fKAIADAELIANBmAFqIAQgABCMICADIAMpA5gBNwKEAgNAIANB7AFqIANBhAJqEPoOIAMtAOwBRQ0CIAMtAO0BIgEgAkkNAAsgASACRw0BIAMoAO4BCyIBQQFHDQMLIAooAgAgCSgCACAAQaiRxAAQnx8oAgwhAAwACwALIAUgB0HAqcAAEJ8QAAsCQCABIAQoAtACSw0AIAEEQAJAIAQoAtQCIAFPBEAgA0GQAWogBCABEI0gIAMgAykDkAE3AuwBIANBiAFqIANB7AFqQQAQ/g8gAygCiAFBAXENAQwNCyADQewBaiAEKAI8IAsoAgAgCCAHIAUgDBDVHSADQYABaiADKALsASADKALwARCqISADKAKAAUUEQCAGQQA2AgAMDAsgAygChAEiAiAFSw0DDAILIANB4AFqIAMoAowBIgAgBUEBaiIBIARBNGooAgAgBEE4aigCACAAQbiRxAAQnh8oAgBrIAEQ0hIgBkEBNgIAIAZBDGogA0HoAWooAgA2AgAgBiADKQLgATcCBAwKCyAGQQA2AgAMCQsgBUEBaiECDAALAAsgBiADKQLwATcCBCAGQQxqIANB+AFqKAIANgIACyAGIAA2AgAMBQsgBiADKQLwATcCBCAGQQxqIANB+AFqKAIANgIACyAGIAA2AgAMAwsgBEHIAGohDiADKALwASECIARBCGohCiAEQQRqIQsgBEE4aiEPIARBNGohECAEQSBqIREgBEEcaiESA0ACQAJAIAwgAiIFSwRAAkAgBSAISQRAIA4gBSAJai0AACICaiETIAEhAANAAkACfyALKAIAIAooAgAgAEH8jMQAEJ8fKAIEIgEEQCASKAIAIBEoAgAgASATLQAAakGMjcQAEJ4fKAIADAELIANByAFqIAQgABCMICADIAMpA8gBNwKEAgNAIANB7AFqIANBhAJqEPoOIAMtAOwBRQ0CIAMtAO0BIgEgAkkNAAsgASACRw0BIAMoAO4BCyIBQQFHDQMLIAsoAgAgCigCACAAQaiRxAAQnx8oAgwhAAwACwALIAUgCEHAqcAAEJ8QAAsgBCgC0AIgAU8EQCABRQ0DIAQoAtQCIAFPBEAgA0HAAWogBCABEI0gIAMgAykDwAE3AuwBIANBuAFqIANB7AFqQQAQ/g8gAygCuAFBAXENAwwJCyADQewBaiAEKAI8IA0oAgAgCSAIIAUgDBDVHSADQbABaiADKALsASADKALwARCqISADKAKwAUUEQCAGQQA2AgAMCAsgAygCtAEiAiAFSw0ECyAFQQFqIQIMAwsgBiADKQLgATcCBCAGIAc2AgAgBkEMaiADQegBaigCADYCAAwFC0EBIQcgA0HgAWogAygCvAEiACAFQQFqIgIgECgCACAPKAIAIABBuJHEABCeHygCAGsgAhDSEgwBCwsgBiADKQLgATcCBCAGIAc2AgAgBkEMaiADQegBaigCADYCAAwCCyADQeABaiECCyAGIAc2AgAgBiACKQIANwIEIAZBDGogAkEIaigCADYCAAsgA0GQAmokAAwBC0HIkcQAEMIpAAsLDAAgACgCACABEMgZC7UWARN/IAAhBSABIQMjAEEwayIEJAACQAJAAkACQAJAAkACQCACKAIAIgAgAigCBCILTQRAIAItABEgAy0A2AJFciEJAkACQCACLQAQRQRAIAMoAigiCEUNBCAJQQFxDQUgAygC0AIiBkUNASADKALMAiAGTwRAIARBEGogA0EQaigCACADQRRqKAIAIAYgAygCPHZBAmtBgI/EABCjHyIBKAIEIAEoAghBABCkHygCACIBIAAgA0EcaigCACADQSBqKAIAIAFB8I7EABCeHygCAGsgABDSEiADKAIoIQhBASEHCyAEQSBqIAggA0EsaiIJKAIAIAIoAggiCCACKAIMIgIgACALENUdIAQoAiAiAEEBaw4CBggHCyADKALUAiIGRQ0BAkAgBiADKALMAksNACAEQRBqIgEgA0EQaigCACADQRRqKAIAIAYgAygCPHZBAmtBgI/EABCjHyIHKAIEIAcoAghBABCkHygCACIHIAAgA0EcaigCACADQSBqKAIAIAdB8I7EABCeHygCAGsgABDSEkEBIQggCUEBcUUNAAwJCyACKAIMIgcgACAAIAdJGyEKIANBQGshDCACKAIIIQ4gA0EIaiEPIANBBGohECADQRRqIREgA0EQaiENIANBIGohEiADQRxqIRQgACEBA0AgASALRgRAIAUgBCkDEDcCBCAFIAg2AgAgBUEMaiAEQRhqKAIANgIADAsLAkAgASAKRwRAIBAoAgAgDygCACAGIAwgASAOai0AAGotAABqQeCOxAAQnh8oAgAiBiADKALIAksNASAGRQRAIARBEGohAQwMCyAGIAMoAswCSw0BIARBIGoiAiANKAIAIBEoAgAgBiADKAI8dkECa0GAj8QAEKMfIhMoAgQgEygCCEEAEKQfKAIAIhMgAUEBaiIVIBQoAgAgEigCACATQfCOxAAQnh8oAgBrIBUQ0hIgBCgCICAASw0BIARBGGogBEEoaigCADYCACAEIAQpAiA3AxBBASEIIAlBAXFFDQEgAiEBDAsLIAogB0HAqcAAEJ8QAAsgAUEBaiEBDAALAAtBARC7JiEAIAVBAjYCACAFIAA2AgQMCAtBABC7JiEAIAVBAjYCACAFIAA2AgQMBwsgBUEANgIADAYLIAlBAXFFBEAgAygC0AIiBgRAIAMoAswCIAZPBEAgBEEgaiADQRBqKAIAIANBFGooAgAgBiADKAI8dkECa0GAj8QAEKMfIgEoAgQgASgCCEEAEKQfKAIAIgEgACADQRxqKAIAIANBIGooAgAgAUHwjsQAEJ4fKAIAayAAENISQQEhBwsgAigCDCIBIAAgACABSRshCCADQUBrIQkgAigCCCECIANBCGohCiADQQRqIQwgA0EUaiEOIANBEGohDyADQSBqIRAgA0EcaiERA0AgACALRgRAIAUgBCkCIDcCBCAFIAc2AgAgBUEMaiAEQShqKAIANgIADAkLAkAgACAIRwRAIAwoAgAgCigCACAGIAkgACACai0AAGotAABqQeCOxAAQnh8oAgAiBiADKALIAksNAQJAIAYEQCAGIAMoAswCTQ0BDAMLIAUgBCkCIDcCBCAFIAc2AgAgBUEMaiAEQShqKAIANgIADAsLQQEhByAEQSBqIA8oAgAgDigCACAGIAMoAjx2QQJrQYCPxAAQox8iDSgCBCANKAIIQQAQpB8oAgAiDSAAQQFqIhIgESgCACAQKAIAIA1B8I7EABCeHygCAGsgEhDSEgwBCyAIIAFBwKnAABCfEAALIABBAWohAAwACwALQQEQuyYhACAFQQI2AgAgBSAANgIEDAYLIAUCfwJAIAMoAtACIgYEQCAGIAMoAswCTQ0BIAIoAgwiASAAIAAgAUkbIQcgA0FAayEIIAIoAgghAiADQQhqIQkgA0EEaiEKA0AgACALRgRAIAVBADYCAAwKCwJAIAAgB0cEQCAKKAIAIAkoAgAgBiAIIAAgAmotAABqLQAAakHgjsQAEJ4fKAIAIgYgAygCyAJLDQFBACAGRQ0FGiAGIAMoAswCSw0BIABBAWohAAwECyAHIAFBwKnAABCfEAALIABBAWohAAwACwALQQEQuyYhACAFQQI2AgAgBSAANgIEDAcLIARBIGogA0EQaigCACADQRRqKAIAIAYgAygCPHZBAmtBgI/EABCjHyIBKAIEIAEoAghBABCkHygCACIBIAAgA0EcaigCACADQSBqKAIAIAFB8I7EABCeHygCAGsgABDSEiAFQQxqIARBKGooAgA2AgAgBSAEKQIgNwIEQQELNgIADAULAkACQAJAAkAgAygC0AIiBgRAIAMoAswCIAZPBEAgBEEQaiADQRBqKAIAIANBFGooAgAgBiADKAI8dkECa0GAj8QAEKMfIgEoAgQgASgCCEEAEKQfKAIAIgEg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AhwgBUEQaiAKKAIAIAwoAgAgBCAAKAI8dkECa0GAj8QAEKMfIgMoAgQgAygCCCAGEKQfKAIAIgMgASAAQRxqKAIAIABBIGooAgAgA0HwjsQAEJ4fKAIAayABENISIAJBATYCACAIIAUpAhA3AgAgCEEIaiAFQRhqKAIANgIADAgLIAIoAhwiASAAQRBqIgcoAgAgAEEUaiIGKAIAIAQgACgCPHZBAmtBoI/EABCjHygCCE8EQCACQQA2AhggAkEANgIAIAIgAigCIEEBaiIBNgIgDAMLIAJBATYCGCACIAFBAWo2AhwgAigCICEDIAVBEGogBygCACAGKAIAIAQgACgCPHZBAmtBgI/EABCjHyIEKAIEIAQoAgggARCkHygCACIBIANBAWoiAyAAQRxqKAIAIABBIGooAgAgAUHwjsQAEJ4fKAIAayADENISIAJBATYCACAIIAUpAhA3AgAgCEEIaiAFQRhqKAIANgIADAULQQAQuyYhBwwGCyACQQA2AhggAiAENgIUIAJBATYCECACIAE2AiAgAkEANgIACyAAQShqQQAgCRshCSAAQUBrIQwgAygCDCEGIAMoAgghCiAAQQhqIQ0gAEEEaiEOA0AgASALTwRAIAIgBDYCFCACQQE2AhAMBAsCQAJAAkAgASAGSQRAIA4oAgAgDSgCACAEIAwgASAKai0AAGotAABqQeCOxAAQnh8oAgAiBCAAKALIAk0NASABIQMMAgsgASAGQdCpwAAQnxAACyACIAQ2AhQgAkEBNgIQQQAhByAERQ0HIAAoAswCIARPBEAgAkKBgICAEDcCGCAFQRBqIABBEGooAgAgAEEUaigCACAEIAAoAjx2QQJrQYCPxAAQox8iAygCBCADKAIIQQAQpB8oAgAiAyABQQFqIgEgAEEcaigCACAAQSBqKAIAIANB8I7EABCeHygCAGsgARDSEiACQQE2AgAgCCAFKQIQNwIAIAhBCGogBUEYaigCADYCAAwICyAFQRBqIAkoAgAgCUEEaigCACAKIAYgASALENUdIAVBCGogBSgCECAFKAIUEKohIAUoAghFDQcgBSgCDCIBIAIoAiAiA0sNAQsgA0EBaiEBCyACIAE2AiAMAAsACyACQQA2AhggAiAENgIUIAJBATYCECACIAE2AiAgAkEANgIACyABIAsgASALSxshBiABIAMo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ACEBDAYLIBEoAgAgCygCACAKIAxqIAFBAnRqQQJqQYiQxAAQnh8oAgAhAQwFCyARKAIAIAsoAgAgAEEBakHokMQAEJ4fKAIAIQAMAAsACyACIA9BwKnAABCfEAALIAggAykCkAE3AgQgCCAJNgIAIAhBDGogA0GYAWooAgA2AgAMBQsgESgCACALKAIAIABBAmpByJDEABCeHygCACEBCwJAAkAgASAFKAK0AksNACABRQ0BIANBkAFqAn8CQCAFKAK4AiABTwRAIAUoAighACADQfgAaiARKAIAIAsoAgAgAUGIkcQAENIbIAMoAnwiEEUNCiAQAn8gAygCeCIGLQAAIgRB/wFHBEAgBCAEQQJ2aiAEQQNxQQBHakECagwBCyAAQQJqCyIETQ0GIAYgBEECdGooAgAiAEEASA0BIBAgBEEBaiIASwRAIAYgAEECdGooAgAMAwsgACAQQaCLxAAQnxAACyADQaABaiAFKAIcIBQoAgAgEiAPIAIgFRDVHSADQfAAaiADKAKgASADKAKkARCqISADKAJwRQRAIAhBADYCAAwICyADKAJ0IgAgAk0NAgwECyAAQf////8HcQsiBiACQQFqIgAgBUEQaigCACAOKAIAIAZB+JDEABCeHygCAGsgABDSEkEBIQkMAgsgAkEBaiEADAELCyAIIAMpApABNwIEIAggCTYCACAIQQxqIANBmAFqKAIANgIADAILIAQgEEGQi8QAEJ8QAAsgCCARNgIAIAggACkCADcCBCAIQQxqIABBCGooAgA2AgALIANBsAFqJAAMBgsgBCANQaCLxAAQnxAAC0EAQQBBwIvEABCfEAALIAQgDUGQi8QAEJ8QAAsgCiABQeiPxAAQoRAACyAAIAFBoIvEABCfEAALIAAgAUGQi8QAEJ8QAAsLDAAgACgCACABEJYoCwwAIAAoAgAgARCMGwsLACAAKALQAiABTwsLACAAKAK0AiABTwsLACAAKALIAiABTwsOACABQezH1gBBAhCmAwsOACAAQYy3wAAgARCKBAsLACAAIAEgAhCdEAsKACAAQQRqELoiCwkAIAAQBEEBRgsJACAAEAVBAUYLCQAgABAGQQFGCw4AIABBiMPAACABEIoECw4AIABBxPHAACABEIoECwwAIAAoAgAgARCqBwsLACAAIAEQ1w9BAAsMACAAKAIAIAEQ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ACABEMESCwwAIAAoAgAgARDeGQsMACAAKAIAIAEQpRYLDAAgACgCACABEMwTCwwAIAAoAgAgARDEFAsMACAAKAIAIAEQ5goLDAAgACgCACABEMEUCwwAIAAoAgAgARCvCgsMACAAKAIAIAEQ6hoLDAAgACgCACABEPwbCwwAIAAoAgAgARCQGQsMACAAKAIAIAEQgysLDAAgACgCACABEJAUCwwAIAAoAgAgARDkEQsMACAAKAIAIAEQ2gcLDAAgACgCACABEOsDCwwAIAAoAgAgARC5CAsLACAAQQRBBBDCEQsLACAAQSBBCBDCEQsLACAAQQE6AAxBAQuQEAIMfwF+IAAoAgAhAiMAQfABayIAJAAgAS0AOSEKIAFBAToAOSAAQQM2AjACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQEEHIAIoAgAiA0EMayIEIARBJk8bQQFrDiQAAQIDBAUGBwgJCgsMDSEODxAREiETFBUhIRYXGBkaGxwdIR4hCyACKAIMQQR0IQMgAigCCCECA0AgA0UNISACKAIAQQJHBEAgAkEMaiABEMArCyACQRBqIQIgA0EQayEDDAALAAsgASACQQRqELYDDB8LIAEgAkEIahDUBAweCyACQQRqIAEQwCsMHQsgAkEMaiABEMArDBwLIAJBBGogARDAKyACQQhqIAEQwCsMGwsgAkE4agJAAkACQAJAAkACQAJAAkACQAJAAkACQCADQQFrDgsBAgMEBQYHCAkLCgALIAEgAkEIahC6GQwKCyACQQhqIAEQgR8MCQsgASACQQhqEOYhDAgLIAJBBGogARDAKwwHCyACQQRqIAEQ4BgMBgsgASACQQRqELogDAULIAEgAkEEahC6IAwECyACQQRqIAEQwCsMAwsgASACQQRqELogDAILIAJBBGogARC4JQwBCyACQQhqIQMCQAJAIAIoAgRBAWsOAgECAAsgAyABEP4UDAELIAMgARCEDQsgARDAKwwaCyACQQhqIAEQgR8MGQsgASACQQhqEOYhDBgLIAJBBGogARDAKyACQQhqIAEQwCsgAkEMaiABEMArDBcLIAItABhBBUYEQCACQRBqIAEQwCsLIAJBBGogARDhGCACQShqIAEQvyMMFgsgAkEQaiABEMArIAIoAgRBgICAgHhHBEAgAkEEaiABEOEYCyACQSBqIAEQvyMMFQsgAkEEaiABEIQaDBQLIAJBCGogARC7DwwTCyACQQRqIAEQhBoMEgsgAkEEaiABEMArIAJBGGogARC/IyACKAIIIAEQhBoMEQsgAigCECEHQRghCEEAIQQgASgCMBCrESEFIABB4ABqQdiY4wApAwAiDjcDAEEIIQMgAEHQAGogDjcDACAAQfwAaiABQTRqKAIANgIAIABBAToAcCAAIAE2AmggACAFNgJsIABBAToAgQEgAEHQmOMAKQMAIg43A1ggACAONwNIIAAgASkCLDcCdCAAIAEtADw6AIQBIAAgAS8BOjsBggEgAS0AOCEFIAAgAS0APToAhQEgACAFOgCAASACQSBqIABByABqELYNIAAtAIEBIQsgAEEAOgCBASAAIAIoAggiBSACKAIMIgxBKGxqNgKsASAAIAU2AqgBIABBADYCmAEgAEEANgKIASAAQRhqIABBiAFqIgYQkAkgAAJ/IAApAxgiDlAEQCAGEOQoQQAMAQsgACgCICEEIABBvAFqIgYgAEGIAWoiCRC1ECAAQRBqQQQgACgCvAFBAWoiA0F/IAMbIgMgA0EETRtBCEEQEOwUIAAoAhAhDSAAKAIUIgMgBDYCCCADIA43AwAgAEEBNgK4ASAAIAM2ArQBIAAgDTYCsAEgBiAJQSgQ9gYaQQEhBANAIAAgAEG8AWoiBhCQCSAAKQMAIg5QRQRAIAAoAgghCSAAKAKwASAERgRAIABB5AFqIAYQtRAgAEGwAWogACgC5AFBAWoiA0F/IAMbEIAfIAAoArQBIQMLIAMgCGoiBiAJNgIAIAZBCGsgDjcDACAAIARBAWoiBDYCuAEgCEEQaiEIDAELC0IAENsmIABBvAFqEOQoIAAoArQBIQMgACgCsAELNgLEASAAIAM2ArwBIAAgAyAEQQR0IgRqIgg2AsgBA0AgBARAIABByABqIAMpAwBBARDKCCAEQRBrIQQgA0EQaiEDDAEFAkAgACAINgLAASAMQShsIQMgAEG8AWoQhBcDQCADRQ0BIANBKGshAyAFIABByABqELkRIAVBKGohBQwACwALCwsgACALOgCBASAHKAIAQYCAgIB4Rg0OIAAoAmwgB0EUahDhISAALQCFASIDRQRAIAAgBygCCAR/IAcoAgQiBCgCACAEQQRqKAIAELoUBUEACzoAhQELIABByABqIAcQowsgACADOgCFAQwPCyMAQUBqIgMkACACQQhqIgIoAhhBMGogARChJSABKAIwEKsRIQQgA0EYakHYmOMAKQMAIg43AwAgA0EIaiAONwMAIANBNGogAUE0aigCADYCACADQQE6ACggAyABNgIgIAMgBDYCJCADQdCY4wApAwAiDjcDECADIA43AwAgAyABKQIsNwIsIAMgAS0APDoAPCADIAEvATo7ATogAS0AOCEEIAMgAS0APToAPSADIAQ6ADggA0EAOgA5IAIgAxDJIyADQQE6ADkgAkEYaiADEMgBIAMQ5yggA0FAayQADA8LIAIoAgxFDQ4gAkEMaiABEMArDA4LIAJBBGogARDAKwwNCyACQQRqIAEQwCsMDAsgAkEgaiABEIgfDAsLIAIoAgQgARCkCwwKCyACQQRqIAEQvA8MCQsgASACQQRqELogDAgLIAJBBGogARDAKwwHCyACQQRqIAEQwCsMBgsgASACQQRqELogDAULIAJBBGogARC4JQwECyABIAJBBGoQuiAMAwsgAkEEaiABEOAYDAILIAdBBGogAEHIAGoQwCsLIAJBJGogAEHIAGoiAhC1JSACEOcoCyABIAo6ADkgAEEoahDLFCAAQfABaiQAC6gHAgJ/An4CQCAAKAIAIgAoAgAiAkEaRgRAIAEoAgBBAUcNASABKAIEIgIgACgCGEcNASAAKQMIEOEaIQQgACkDECEFIAAtABwhA0HAAEEIEJEgIgEgAzoAHCABIAI2AhggAUIANwMQIAEgBDcDCCABQRo2AgBBvMLfAEEBEMAaIQQgABClAiAAIAE2AiggACAFNwMgIABCADcDGCAAIAQ3AxAgAEEANgIIIABBFDYCAAwBCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQQcgAkEMayIDIANBJk8bQQFrDiQAAQISEwMEBQYHCAkVFhYVCgsMDRYSEg4WFg8QEhISEhISFhEWCyAAKAIMQQR0IQIgACgCCCEAA0AgAkUNFiAAKAIAQQJHBEAgAEEMaiABEMErCyAAQRBqIQAgAkEQayECDAALAAsgAEEEaiABEOUJDBQLIABBCGogARDLKwwTCyAAQQRqIAEQwSsgAEEIaiABEMErDBILIABBOGoCQAJAAkACQAJAAkACQAJAAkACQAJAIAJBAWsOCwABAgMEBQYHCAoJCgsgAEEIaiABEIIfDAkLIABBCGogARDWIQwICyAAQQRqIAEQwSsMBwsgAEEEaiABEJgcDAYLIABBBGogARDBKwwFCyAAQQRqIAEQwSsMBAsgAEEEaiABEMErDAMLIABBBGogARDBKwwCCyAAQQRqIAEQwSsMAQsgAEEIaiECAkACQCAAKAIEQQFrDgIBAgALIAIgARCJFwwBCyACIAEQug4LIAEQwSsMEQsgAEEIaiABEIIfDBALIABBCGogARDWIQwPCyAAQQRqIAEQwSsgAEEIaiABEMErDAsLIAAtABhBBUYEQCAAQRBqIAEQwSsLDAsLIABBEGogARDBKyAAKAIEQYCAgIB4Rg0MDAoLIABBBGogARDBKyAAKAIIIAEQhhoMCwsgACgCDEEobCECIAAoAgghAwNAIAIEQCADIAEQnRQgAkEoayECIANBKGohAwwBCwsgACgCECIAKAIAQYCAgIB4RwRAIAAgARCHGgwLCwwGCyAAQQhqIAEQzCsMCQsgACgCDEUNCAwFCyAAQQhqEOkhDAcLIAAoAgQgARCeDAwGCyAAQQRqIAEQvQ8MBQsgAEEEaiABEJgcDAQLIABBBGogARDBKwwDCyAAQQxqIAEQwSsMAgsgAEEEaiABEOIYDAELIABBBGogARCGGgsLpQYBAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkBBByAAKAIAIgAoAgAiAkEMayIDIANBJk8bQQFrDiQAAQITFAMEBQYHCAkWChcWCwwNDhcTEw8XFxARExMTExMTFxIXCyAAKAIMQQR0IQIgACgCCCEAA0AgAkUNFyAAKAIAQQJHBEAgAEEMaiABEMIrCyAAQRBqIQAgAkEQayECDAALAAsgAEEEaiABEP8IDBULIAEgAEEIahC1EQwUCyAAQQRqIAEQwisgAEEIaiABEMIrDBMLIABBOGoCQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAkEBaw4LAQIDBAUGBwgJCwoACyAAQQhqIAEQzC0MCgsgAEEIaiABEIMfDAkLIAEgAEEIahDXIQwICyAAQQRqIAEQwisMBwsgAEEEaiABEJkcDAYLIABBBGogARDCKwwFCyAAQQRqIAEQwisMBAsgAEEEaiABEMIrDAMLIABBBGogARDCKwwCCyAAQQRqIAEQwisMAQsgAEEIaiECAkACQCAAKAIEQQFrDgIBAgALIAIgARCFFwwBCyACIAEQ8Q0LIAEQwisMEgsgAEEIaiABEIMfDBELIAEgAEEIahDXIQwQCyAAQQRqIAEQwisgAEEIaiABEMIrDAwLIAAtABhBBUYEQCAAQRBqIAEQwisLDAwLIABBEGogARDCKyAAKAIEQYCAgIB4Rg0NDAsLIAEgAEEIahD6CAwMCyAAQQRqIAEQwisgASAAKAIIEP0ZDAsLIAAoAgxBKGwhAiAAKAIIIQMDQCACBEAgAyABELYRIAJBKGshAiADQShqIQMMAQsLIAAoAhAiACgCAEGAgICAeEcEQCAAIAEQ/hkMCwsMBgsgAEEIaiABEKYnDAkLIAAoAgxFDQgMBQsgAEEIaiABEPwdDAcLIAAoAgQgARD9CwwGCyAAQQRqIAEQuA8MBQsgAEEEaiABEJkcDAQLIABBBGogARDCKwwDCyAAQQxqIAEQwisMAgsgAEEEaiABEOQYDAELIAEgAEEEahD9GQsLDAAgACgCACABELYRCwsAIAEgACgCABBNC+QFAQJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkBBByAAKAIAIgAoAgAiAkEMayIDIANBJk8bQQFrDiQAAQISEwMEBQYHCAkUFRUUCgsMDRUSEg4VFQ8QEhISEhISFREVCyAAKAIMQQR0IQIgACgCCCEAA0AgAkUNFSAAKAIAQQJHBEAgAEEMaiABEMUrCyAAQRBqIQAgAkEQayECDAALAAsgAEEEaiABENELDBMLIABBCGogARDIKwwSCyAAQQRqIAEQxSsgAEEIaiABEMUrDBELIABBOGoCQAJAAkACQAJAAkACQAJAAkACQAJAIAJBAWsOCwABAgMEBQYHCAoJCgsgAEEIaiABEIUfDAkLIAEgAEEIahDdIQwICyAAQQRqIAEQxSsMBwsgAEEEaiABEJscDAYLIABBBGogARDFKwwFCyAAQQRqIAEQxSsMBAsgAEEEaiABEMUrDAMLIABBBGogARDFKwwCCyAAQQRqIAEQxSsMAQsgAEEIaiECAkACQCAAKAIEQQFrDgIBAgALIAIgARCHFwwBCyACIAEQuQ4LIAEQxSsMEAsgAEEIaiABEIUfDA8LIAEgAEEIahDdIQwOCyAAQQRqIAEQxSsgAEEIaiABEMUrDAsLIABBBGoCQCAALQAYQQVHDQAgAEEQaiIAIAEQxSsgACgCAEHdvuAAQQQQ9h5FDQAgAUEBOgAACyABEOYYDAwLIABBEGogARDFKyAAKAIEQYCAgIB4Rg0LIABBBGogARDmGAwLCyAAQQRqIAEQxSsgACgCCCABEIIaDAoLIABBBGogARDIEgwJCyAAQQhqIAEQySsMCAsgACgCDEUNBwwFCyAAQSBqELggDAYLIAAoAgQgARCdDAwFCyAAQQRqIAEQug8MBAsgAEEEaiABEJscDAMLIABBBGogARDFKwwCCyAAQQxqIAEQxSsMAQsgAEEEaiABEIIaCwvnBQECfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQEEHIAAoAgAiACgCACICQQxrIgMgA0EmTxtBAWsOJAABAhMUAwQFBgcICRYKFxYLDA0OFxMTDxcXEBETExMTExMXEhcLIAAoAgxBBHQhAiAAKAIIIQADQCACRQ0XIAAoAgBBAkcEQCAAQQxqIAEQxisLIABBEGohACACQRBrIQIMAAsACyAAQQRqIAEQpwoMFQsgAEEIaiABEKcnDBQLIABBBGogARDGKyAAQQhqIAEQxisMEwsgAEE4agJAAkACQAJAAkACQAJAAkACQAJAAkACQCACQQFrDgsBAgMEBQYHCAkLCgALIABBCGogARDmKAwKCyAAQQhqIAEQhB8MCQsgASAAQQhqENohDAgLIABBBGogARDGKwwHCyAAQQRqIAEQmhwMBgsgAEEEaiABEMYrDAULIABBBGogARDGKwwECyAAQQRqIAEQxisMAwsgAEEEaiABEMYrDAILIABBBGogARDGKwwBCyAAQQhqIQICQAJAIAAoAgRBAWsOAgECAAsgAiABEIYXDAELIAIgARDyDQsgARDGKwwSCyAAQQhqIAEQhB8MEQsgASAAQQhqENohDBALIABBBGogARDGKyAAQQhqIAEQxisMDAsgAC0AGEEFRgRAIABBEGogARDGKwsMDAsgAEEQaiABEMYrIAAoAgRBgICAgHhGDQ0MCwsgASAAKQMIIAAoAhgQ8hoMDAsgAEEEaiABEMYrIAAoAgggARD/GQwLCyAAQQRqIAEQxxIMCgsgAEEIaiABEKgnDAkLIAAoAgxFDQgMBQsgAEEgaiABEMkdDAcLIAAoAgQgARD+CwwGCyAAQQRqIAEQuQ8MBQsgAEEEaiABEJocDAQLIABBBGogARDGKwwDCyAAQQxqIAEQxisMAgsgAEEEaiABEOUYDAELIABBBGogARD/GQsLDAAgASAAKAIAEPIBCwwAIAAoAhggARCPEguPAgEFfyAAKAIYIgMgARCRGiADKAIUQdgAbCEFIAMoAhAhBgNAIAIgBUcEQAJAAkACQAJAAkACQAJAAkAgAiAGaiIAKAIAIgRBBGtBACAEQQVrQQhJG0EBaw4IAQIDBAcHBQYACyAAIAEQ5AsMBgsgAEEIaiABEK8lDAULIABBIGogARDjKwwECyABIABBCGoQ3iEgAEE8aiABEKMlIABBMGogARCRGgwDCyAAQSRqIAEQoyUgAEEsaiABEJEaDAILIABBBGogARCDGgwBCyAAQQhqIgQoAgBBBUcEQCABIAQQ3iELIABBPGogARCjJSAAQTBqIAEQkRoLIAJB2ABqIQIMAQsLIANBMGogARCjJQsMACAAKAIAIAEQnRQLDAAgACgCGCABEI4SCwwAIAAoAhggARDuBQsMACAAKAIYIAEQ5A8LDAAgASAAKAIYEKgDCwwAIAAoAgAgARDSBAsMACAAKAIAIAEQhAkLDAAgACgCACABEJAFCwwAIAAoAgAgARDREwsMACABIAAoAgAQygELDAAgACgCACABEMEDCwwAIAAoAgAgARD5AQsMACABIAAoAgAQhx8LDAAgACgCACABENITCwwAIAAoAgAgARCbFAsMACAAKAIAIAEQ+AQLDAAgACgCACABENMTCwwAIAAoAgAgARC4EQsMACAAKAIAIAEQ0AQLDAAgACgCACABENQTCwwAIAAoAgAgARCXEQsLACAAKAIAIAEQXwsMACABIAAoAgAQ+h8LDAAgACgCACABEJ4UCwwAIAAoAgAgARCwAwsMACAAKAIAIAEQjxILDAAgASAAKAIYELoECwwAIAAoAgAgARCNEgsMACAAKAIAIAEQjBILDAAgACgCACABEOQPCwwAIAAoAgAgARCOEgsMACABIAAoAgAQuB4LDAAgACgCACABELkRC4EIAgV/AX4gACgCACEAIwBBQGoiAiQAIAEtADQEQCABLQA6IQQgAS0AOSEFIAFBgQI7ADkCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIAQQJrDhIAAQIDBAUREA8ODQwLCgkIBwYSCyAAKAIEQYCAgIB4RgRAIAEoAjAQqxEhAyACQRhqQdiY4wApAwAiBzcDACACQQhqIAc3AwAgAkE0aiABQTRqKAIANgIAIAJBAToAKCACIAE2AiAgAiADNgIkIAJBAToAOSACQdCY4wApAwAiBzcDECACIAc3AwAgAiABKQIsNwIsIAIgAS8AOzsAOyABLQA4IQMgAiABLQA9OgA9IAIgAzoAOCACQQE6ADogAEEgaiACELYNIABBCGogAhCSGiAAQRRqIAIQ6SsgAhDnKAwSCyABKAIwEKsRIQMgAkEYakHYmOMAKQMAIgc3AwAgAkEIaiAHNwMAIAJBNGogAUE0aigCADYCACACQQE6ACggAiABNgIgIAIgAzYCJCACQQE6ADkgAkHQmOMAKQMAIgc3AxAgAiAHNwMAIAIgASkCLDcCLCACIAEvADs7ADsgAS0AOCEDIAIgAS0APToAPSACIAM6ADggAkEBOgA6IABBHGogAhC2DSAAQQRqIAIQkhogAEEQaiACEOkrIAIQ5ygMEQsgAEEQaiABEMsdIABBKGogARC3JQwQCyAAQdAAaiAAQRBqIQMCQCAALQBEQQRGBEAgAyABEMsdDAELIAEgAxDnIQsgAUGBAjsAOSABELclDA8LIABBBGogARDjAgwOCyAAQQRqIAEQ6ysMDQsgACgCDEE4bCEDIAAoAghBMGohAANAIANFDQ0gAS0ANARAIAFBAToAOSAAIAEQ6ysLIANBOGshAyAAQThqIQAMAAsACyABIABBCGoQ5yEMCwsgAC0AHEECRwRAIABBCGogARC7DwsgAUGBAjsAOSAAQShqIAEQ1SMMCgsgACgCCEGEgICAeEgNCSAAQQhqIAEQkxoMCQsgAUEAOgA5IAEgAEEQahDqGCABQQE6ADkgAEFAayABELolIAFBAToAOSAAQcQAaiABELolDAgLIABBBGogARDrKyAAQQhqIAEQ6ysMBwsgAEEEaiABEOsrIAFBgQI7ADkMBgsgAEEEaiABEOsrDAULIAEgAEEQahDqGCABQQE6ADkMBAsgAEEEaiABEOsrIABBCGogARDrKyAAQQxqIAEQ6ysgAEEQaiABEOsrIAFBAToAOQwDCyAAQQhqIAEQkxogAUEBOgA5DAILIABBBGogARDrKwwBCyAAQQRqIAEQ6ysLIAEgBDoAOiABIAU6ADkLIAJBQGskAAsMACABIAAoAgAQmgoLDwAgAEGQ19oAQe0IEP4BCw8AIABB/d/aAEHDARD+AQsPACAAQcDh2gBBzAAQ/gELDwAgAEGM4toAQeUAEP4BCw8AIABB8eLaAEG9ARD+AQsPACAAQa7k2gBBxRAQ/gELDwAgAEHz9NoAQYYIEP4BCw8AIABB+fzaAEG1DRD+AQsPACAAQa6K2wBB4AYQ/gELDwAgAEGOkdsAQc8AEP4BCw4AIABB3ZHbAEE7EP4BCw8AIABBmJLbAEGoAxD+AQsPACAAQcCV2wBBzQEQ/gELDwAgAEGNl9sAQbMFEP4BCw8AIABBwJzbAEGqARD+AQsPACAAQeqd2wBB7gMQ/gELDwAgAEHYodsAQZsHEP4BCw8AIABB86jbAEGsARD+AQsPACAAQZ+q2wBB4AEQ/gELDwAgAEH/q9sAQfUBEP4BCw8AIABB9K3bAEGIARD+AQsPACAAQfyu2wBBzQEQ/gELDwAgAEHJsNsAQZIBEP4BCw8AIABB27HbAEH0ARD+AQsPACAAQc+z2wBB6wAQ/gELDwAgAEG6tNsAQeYBEP4BCw8AIABBoLbbAEHWARD+AQsPACAAQfa32wBBygEQ/gELDwAgAEHAudsAQYUBEP4BCw8AIABBxbrbAEHqABD+AQsPACAAQa+72wBBoQIQ/gELDwAgAEHQvdsAQboCEP4BCw8AIABBisDbAEGlAhD+AQsPACAAQa/C2wBBlwQQ/gELDwAgAEHGxtsAQdMEEP4BCxAAIABBmcvbAEGw4AAQ/gELDwAgAEHJq9wAQf8CEP4BCw8AIABByK7cAEG+BRD+AQsPACAAQYa03ABB8wEQ/gELDwAgAEH5tdwAQfcCEP4BCw8AIABB8LjcAEG5AxD+AQsPACAAQam83ABBtwQQ/gELDwAgAEHgwNwAQecBEP4BCw8AIABBx8LcAEGoAxD+AQsPACAAQe/F3ABBxQEQ/gELDwAgAEG0x9wAQfsCEP4BCw8AIABBr8rcAEH5AhD+AQsPACAAQajN3ABB6AEQ/gELDwAgAEGQz9wAQeYAEP4BCw8AIABB9s/cAEHHChD+AQsPACAAQb3a3ABB7AAQ/gELDwAgAEGp29wAQaUBEP4BCw8AIABBztzcAEGZBRD+AQsPACAAQefh3ABB6AIQ/gELDwAgAEHP5NwAQeEIEP4BCw8AIABBsO3cAEGiARD+AQsPACAAQdLu3ABB1wEQ/gELDwAgAEGp8NwAQdQBEP4BCw8AIABB/fHcAEGOARD+AQsPACAAQYvz3ABB+AQQ/gELDwAgAEGD+NwAQdUGEP4BCw8AIABB2P7cAEHSBBD+AQsPACAAQaqD3QBB6wIQ/gELDwAgAEGVht0AQcsBEP4BCw8AIABB4IfdAEHeABD+AQsPACAAQb6I3QBBqAoQ/gELDwAgAEHmkt0AQcwBEP4BCw8AIABBspTdAEGdARD+AQsPACAAQc+V3QBBrwEQ/gELDwAgAEH+lt0AQcMBEP4BCw8AIABBwZjdAEHfARD+AQsPACAAQaCa3QBBzgEQ/gELDwAgAEHum90AQZsBEP4BCw4AIABBiZ3dAEEkEP4BCw8AIABBrZ3dAEGZARD+AQsPACAAQcae3QBBqQEQ/gELDwAgAEHvn90AQa0DEP4BCw8AIABBnKPdAEGKARD+AQsPACAAQaak3QBBgQIQ/gELDwAgAEGnpt0AQZ8BEP4BCw8AIABBxqfdAEHCAxD+AQsPACAAQYir3QBBhgEQ/gELDwAgAEGOrN0AQZ8HEP4BCw8AIABBrbPdAEHgABD+AQsPACAAQY203QBB3QEQ/gELDwAgAEHqtd0AQawCEP4BCw8AIABBlrjdAEGpARD+AQsPACAAQb+53QBBxQEQ/gELDwAgAEGEu90AQY8FEP4BCw8AIABBk8DdAEGMBBD+AQsPACAAQZ/E3QBBkgYQ/gELDwAgAEGxyt0AQZgEEP4BCw8AIABByc7dAEHcDRD+AQsPACAAQaXc3QBBjQEQ/gELDwAgAEGy3d0AQfcAEP4BCw8AIABBqd7dAEGsAxD+AQsPACAAQdXh3QBB+QgQ/gELDwAgAEHO6t0AQbwKEP4BCxAAIABBivXdAEHJkwEQ/gELDgAgAEHTiN8AQSQQ/gELDwAgAEH3iN8AQaQKEP4BCw8AIABBm5PfAEGGBhD+AQsPACAAQaGZ3wBBuRQQ/gELDAAgASAAKAIAELceCwwAIAEgACgCABC6BAsLACAAQShBCBDCEQsKACAAEJQLGkEBCwwAIAAoAgAgARD+CwsMACAAKAIAIAEQnwwLDAAgACgCACABEJ0MCwwAIAAoAgAgARCeDAsMACAAKAIAIAEQoAwLDAAgACgCACABEKQLCwwAIAAoAgAgARD9CwsMACAAKAIAIAEQmAoLDAAgACgCACABEMMpCwwAIABByABBCBDCEQsLACAAKAIYIAEQUAsMACAAKAIYIAEQmBILDAAgASAAKAIAEKkBCwwAIAEgACgCABDtAwsMACAAKAIAIAEQzg0LDAAgASAAKAIAEK8CC5sGAQJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQQcgACgCACIAKAIAIgJBDGsiAyADQSZPG0EBaw4kAAECExQDBAUGBwgJFgoXFgsMDQ4XExMPFxcQERMTExMTExcSFwsgACgCDEEEdCECIAAoAgghAANAIAJFDRcgACgCAEECRwRAIABBDGogARDoLAsgAEEQaiEAIAJBEGshAgwACwALIABBBGogARDbCAwVCyAAQSBqIAEQ8CwMFAsgAEEEaiABEOgsIABBCGogARDoLAwTCyAAQThqAkACQAJAAkACQAJAAkACQAJAAkACQCACQQFrDgsAAQIDBAUGBwgKCQoLIABBCGogARCOHwwJCyAAQQhqIAEQ/yEMCAsgAEEEaiABEOgsDAcLIABBBGogARCpHAwGCyAAQQRqIAEQ6CwMBQsgAEEEaiABEOgsDAQLIABBBGogARDoLAwDCyAAQQRqIAEQ6CwMAgsgAEEEaiABEOgsDAELIABBCGohAgJAAkAgACgCBEEBaw4CAQIACyACIAEQjhcMAQsgAiABELwOCyABEOgsDBILIABBCGogARCOHwwRCyAAQQhqIAEQ/yEMEAsgAEEEaiABEOgsIABBCGogARDoLAwMCyAALQAYQQVGBEAgAEEQaiABEOgsCwwMCyAAQRBqIAEQ6CwgACgCBEGAgICAeEYNDQwLCyABIAApAwggACgCGBCdHQwMCyAAQQRqIAEQ6CwgACgCCCABEJ4aDAsLIAAoAgxBKGwhAiAAKAIIIQMDQCACBEAgAyABEKAUIAJBKGshAiADQShqIQMMAQsLIAAoAhAiACgCAEGAgICAeEcEQCAAIAEQoBoMCwsMBgsgAEEgaiABEOoFDAkLIAAoAgxFDQgMBQsgAEEIaiABELseDAcLIAAoAgQgARCADAwGCyAAQQRqIAEQxA8MBQsgAEEEaiABEKkcDAQLIABBBGogARDoLAwDCyAAQQxqIAEQ6CwMAgsgAEEEaiABEPcYDAELIABBBGogARCeGgsLDAAgACgCACABEOsBCwwAIAAoAgAgARCVEAsMACAAKAIAIAEQmRELhQYBAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQQcgACgCACIAKAIAIgJBDGsiAyADQSZPG0EBaw4kAAECEhMDBAUGBwgJFRYWFQoLDA0WEhIOFhYPEBISEhISEhYRFgsgACgCDEEEdCECIAAoAgghAANAIAJFDRYgACgCAEECRwRAIABBDGogARDsLAsgAEEQaiEAIAJBEGshAgwACwALIABBBGogARDnCQwUCyAAQQhqIAEQ7SwMEwsgAEEEaiABEOwsIABBCGogARDsLAwSCyAAQThqAkACQAJAAkACQAJAAkACQAJAAkACQCACQQFrDgsAAQIDBAUGBwgKCQoLIABBCGogARCNHwwJCyAAQQhqIAEQ/iEMCAsgAEEEaiABEOwsDAcLIABBBGogARCoHAwGCyAAQQRqIAEQ7CwMBQsgAEEEaiABEOwsDAQLIABBBGogARDsLAwDCyAAQQRqIAEQ7CwMAgsgAEEEaiABEOwsDAELIABBCGohAgJAAkAgACgCBEEBaw4CAQIACyACIAEQjRcMAQsgAiABELsOCyABEOwsDBELIABBCGogARCNHwwQCyAAQQhqIAEQ/iEMDwsgAEEEaiABEOwsIABBCGogARDsLAwLCyAALQAYQQVGBEAgAEEQaiABEOwsCwwLCyAAQRBqIAEQ7CwgACgCBEGAgICAeEYNDAwKCyAAQQRqIAEQ7CwgACgCCCABEJ0aDAsLIAAoAgxBKGwhAiAAKAIIIQMDQCACBEAgAyABEJ8UIAJBKGshAiADQShqIQMMAQsLIAAoAhAiACgCAEGAgICAeEcEQCAAIAEQnxoMCwsMBgsgAEEIaiABEO4sDAkLIAAoAgxFDQgMBQsgAEEIahDpIQwHCyAAKAIEIAEQoQwMBgsgAEEEaiABEMMPDAULIABBBGogARCoHAwECyAAQQRqIAEQ7CwMAwsgAEEMaiABEOwsDAILIABBBGogARD2GAwBCyAAQQRqIAEQnRoLCwwAIAAoAhggARCVEgsMACAAKAIYIAEQ7wULDAAgACgCACABEJ8UCwwAIAAoAgAgARCWEgsMACAAKAIAIAEQoBQLDAAgACgCACABEKIUCwwAIAAoAhggARCXEgsMACAAKAIYIAEQ8AULDAAgASAAKAIAEKgJCwwAIAAoAgAgARDNAwsMACAAKAIAIAEQnBoLDAAgACgCACABEKEMCwwAIAAoAgAgARC6CwsMACAAKAIAIAEQgAwLDAAgACgCACABEP8LCwwAIAAoAgAgARCiDAsMACABENsmIAAQ3RoLDAAgACgCACABEJUSCwwAIAAoAgAgARCYEgsMACAAKAIAIAEQlxILDAAgACgCACABEJEFCwwAIAAoAgAgARDbEwsMACAAKAIAIAEQkgULDAAgACgCACABENoTCwwAIAAoAgAgARDRBAsMACAAKAIAIAEQ2RMLDAAgASAAKAIAEJIBCwwAIAEgACgCABDVAwtNAQJ/IAAoAgAiACgCCEEGdCECIAAoAgQhAwNAIAIEQCADIAEQhiYgAkFAaiECIANBQGshAwwBCwsgAEEMaiABEKwaIABBGGogARD6IwsMACAAKAIYIAEQkgkLDAAgACgCACABENUECwwAIAAoAgAgARDcEwsMACAAKAIAIAEQ8wQLDAAgACgCACABEN0TCwwAIAAoAgAgARDACwsMACAAKAIAIAEQowwLDAAgACgCACABEIAJCwwAIAAoAgAgARCcEgsKACAAEOsOGkEBCwsAIAAgARDgD0EACwwAIAAgASkCEDcDAAsMACABEP0jIAAQ2yYLCgAgACABIAIQZwsMACABIAAoAhgQ4gELDAAgACgCGCABEPcKCwwAIAAoAgAgARD9AQsMACAAKAIAIAEQ9woLCwAgACABIAIQzRgLDAAgACgCACABEJoQC3oBAn8gACgCACIAKAIIQThsIQIgACgCBCIAQRRqIQMDQCACBEACQCAALQA0QQFHDQAgACgCAA0AIAEgASgCHCABKAIgIAMoAgAQyQ8Qih4LIAAgARCaECAAQTBqIAEQnCYgAkE4ayECIANBOGohAyAAQThqIQAMAQsLCwsAIAAoAgAgARBaCwwAIAAoAgAgARCTBQtD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AAAAPAMAADKZEAABAAAAAAAAAAgAAAAEAAAAPQMAAD4DAAAEAAAABAAAAD8DAABAAwAAQQMAAEIDAAAEAQAABAAAAEMDAABEAwAAZXJyb3Igc3RyaW5nIHNob3VsZCBiZSB1dGY4L3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc3djX2Vycm9yX3JlcG9ydGVycy0xLjAuMC9zcmMvaGFuZGxlci5ycwAAzyEQAGcAAABvAAAALAAAAEUDAAAUAAAABAAAAKwCAABiaW5kaW5nX3R5cGVzY3JpcHRfd2FzbS9zcmMvbGliLnJzAABYIhAAIgAAACEAAAAjAAAAdHN4AIwiEAADAAAAyIMWAAoAAAB2ZXJiYXRpbU1vZHVsZVN5bnRheG5hdGl2ZUNsYXNzUHJvcGVydGllc2ltcG9ydE5vdFVzZWRBc1ZhbHVlc25vRW1wdHlFeHBvcnRpbXBvcnRFeHBvcnRBc3NpZ25Db25maWd0c0VudW1Jc011dGFibGVyZW1vdmVwcmVzZXJ2ZRIjEAAGAAAAGCMQAAgAAABDbGFzc2ljUHJlc2VydmVOb2RlTmV4dEVzTmV4dAAAADAjEAAHAAAANyMQAAgAAAA/IxAACAAAAEcjEAAGAAAAoCIQABQAAAC0IhAAFQAAAMkiEAAVAAAA3iIQAA0AAADrIhAAGAAAAAMjEAAPAAAAaW52YWxpZCBsZW5ndGggAKAjEAAPAAAAhgMWAAsAAABkdXBsaWNhdGUgZmllbGQgYAAAAMAjEAARAAAAQBcYAAEAAAB1bmtub3duIHZhcmlhbnQgYGAsIGV4cGVjdGVkIAAAAOQjEAARAAAA9SMQAAwAAABGAwAARwMAAEgDAABJAwAASgMAAGNhbGxlZCBgT3B0aW9uOjp1bndyYXBfdGhyb3coKWAgb24gYSBgTm9uZWAgdmFsdWVjYWxsZWQgYFJlc3VsdDo6dW53cmFwX3Rocm93KClgIG9uIGFuIGBFcnJgIHZhbHVlY29yZS9zcmMvbnVtL2RlYzJmbHQvZGVjaW1hbC5ycwAAAIokEAAfAAAAUQAAACcAAACKJBAAHwAAAH0AAAATAAAAiiQQAB8AAAChAAAAIAAAAIokEAAfAAAAuAAAACUAAACK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YWxpZCBzeW1ib2xub24temVybyB0cmFpbGluZyBiaXRzaW52YWxpZCBwYWRkaW5nIGxlbmd0aCBhdCAAAAABAAAAAAAAACF6EAAEAAAATGVuZ3RoVHJhaWxpbmdQYWRkaW5nRGVjb2RlRXJyb3Jwb3NpdGlvbi9ydXN0L2RlcHMvaGFzaGJyb3duLTAuMTUuMC9zcmMvcmF3L21vZC5ycwAAYHoQACoAAABUAAAAKAAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL2hzdHItMC4yLjEyL3NyYy9nbG9iYWxfc3RvcmUucnMAAJx6EABeAAAACwAAACAAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9oc3RyLTAuMi4xMi9zcmMvbGliLnJzbm90IHlldCBpbXBsZW1lbnRlZDogc3RhdGljIGhhc2gAAABhexAAIAAAAAx7EABVAAAA6wAAABEAAABub3QgeWV0IGltcGxlbWVudGVkOiBzdGF0aWMgYXNfc3RyAACcexAAIgAAAAx7EABVAAAA+wAAABEAAAAMexAAVQAAAAABAAA8AAAAcmV0dXJuIHRoaXMAPy4WAGoAAABNAAAALgAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL21lbWNoci0yLjcuNC9zcmMvYXJjaC9hbGwvdHdvd2F5LnJzAAAEfBAAYgAAAL8AAAAuAAAABHwQAGIAAADHAAAAKQAAAAR8EABiAAAAzAAAADQAAAAEfBAAYgAAANQAAAAkAAAABHwQAGIAAADUAAAAMQAAAAR8EABiAAAA1wAAACIAAAAEfBAAYgAAANcAAAAzAAAABHwQAGIAAADxAAAALgAAAAR8EABiAAAA+AAAACkAAAAEfBAAYgAAAP0AAAA0AAAABHwQAGIAAAAEAQAAGAAAAAR8EABiAAAABAEAACUAAAAEfBAAYgAAAMIBAAAdAAAABHwQAGIAAADDAQAAGQAAAAR8EABiAAAACgIAABsAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lz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EPgAAAIAAAAJ+gAAAgAAAAT8AAACAAAAAf4AAAIAQYCmwgALilEvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9udW0taW50ZWdlci0wLjEuNDYvc3JjL2xpYi5ycwCTEABcAAAAHgQAAAEAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9udW0tYmlnaW50LTAuNC42L3NyYy9iaWd1aW50L2RpdmlzaW9uLnJzAGyTEABnAAAAHAAAAAYAAABhdHRlbXB0IHRvIGRpdmlkZSBieSB6ZXJvAAAA5JMQABkAAABskxAAZwAAAFcAAAAJAAAAbJMQAGcAAADdAAAAOQAAAGyTEABnAAAA0gAAAAkAAABskxAAZwAAABUBAAAOAAAAbJMQAGcAAAAWAQAADgAAAGyTEABnAAAAIAEAACEAAABskxAAZwAAACEBAAAYAAAAbJMQAGcAAABCAQAAPAAAAGyTEABnAAAARgEAACkAAABskxAAZwAAAEsBAAAPAAAAbJMQAGcAAABOAQAAGwAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL251bS1iaWdpbnQtMC40LjYvc3JjL2JpZ3VpbnQvc2hpZnQucnO4lBAAZAAAACgAAAAZAAAAuJQQAGQAAABKAAAAIwAAAG5lZ2F0aXZlIHZhbHVlcyBhcmUgbm9uLXplcm8vdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9udW0tYmlnaW50LTAuNC42L3NyYy9iaWdpbnQvc2hpZnQucnMAWJUQAGMAAABmAAAAKAAAAAAAAAAEAAAABAAAADsAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9udW0tYmlnaW50LTAuNC42L3NyYy9iaWd1aW50L2FkZGl0aW9uLnJzANyVEABnAAAAOwAAABoAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9udW0tYmlnaW50LTAuNC42L3NyYy9iaWd1aW50L3N1YnRyYWN0aW9uLnJzAABUlhAAagAAADQAAAAaAAAAVJYQAGoAAAA1AAAAGgAAAENhbm5vdCBzdWJ0cmFjdCBiIGZyb20gYSBiZWNhdXNlIGIgaXMgbGFyZ2VyIHRoYW4gYS7glhAANAAAAFSWEABqAAAARQAAAAUAAABUlhAAagAAAF0AAAAaAAAAVJYQAGoAAABeAAAAGgAAAGFzc2VydGlvbiBmYWlsZWQ6IGFfaGkuaXNfZW1wdHkoKQAAAFSWEABqAAAAYgAAAAUAAABUlhAAagAAAGUAAAAFAAAAL3J1c3RjLzU1YTIyZDJhNjMzMzRlMGZhZmYwMjAyYjcyYTMxY2U4MzJiNTYxMjUvbGlicmFyeS9jb3JlL3NyYy9zbGljZS9pdGVyLnJzAACQlxAATgAAAPEFAAAVAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvbnVtLWludGVnZXItMC4xLjQ2L3NyYy9yb290cy5ycwAA8JcQAF4AAACDAQAAAQAAAAAAAAAEAAAABAAAADsAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9vbmNlX2NlbGwtMS4xOS4wL3NyYy9pbXBfc3RkLnJzAABwmBAAXgAAAKEAAAA2AAAAcJgQAF4AAACbAAAACQAAADM4OzI7AAAA8JgQAAUAAACNFBgAAQAAAI0UGAABAAAANDg7MjsAAAAQmRAABQAAAI0UGAABAAAAjRQYAAEAAAAbWzEyMzQ1Njc4ORtbMG0AO5kQAAQAAAAzMDMxMzIzMzM0MzUzNjM3Mzk5MDkxOTI5Mzk0OTU5Njk3NDA0MTQyNDM0NDQ1NDY0NzQ5MTAwMTAxMTAyMTAzMTA0MTA1MTA2MTA3Mzg7MjsyNDA7MjQ4OzI1NTM4OzI7MjUwOzIzNTsyMTUzODsyOzAwMDsyNTU7MjU1Mzg7MjsxMjc7MjU1OzIxMjM4OzI7MjQwOzI1NTsyNTUzODsyOzI0NTsyNDU7MjIwMzg7MjsyNTU7MjI4OzE5NjM4OzI7MDAwOzAwMDswMDAzODsyOzI1NTsyMzU7MjA1Mzg7MjswMDA7MDAwOzI1NTM4OzI7MTM4OzA0MzsyMjYzODsyOzE2NTswNDI7MDQyMzg7MjsyMjI7MTg0OzEzNTM4OzI7MDk1OzE1ODsxNjAzODsyOzEyNzsyNTU7MDAwMzg7MjsyMTA7MTA1OzAzMDM4OzI7MjU1OzEyNzswODAzODsyOzEwMDsxNDk7MjM3Mzg7MjsyNTU7MjQ4OzIyMDM4OzI7MjIwOzAyMDswNjAzODsyOzAwMDswMDA7MTM5Mzg7MjswMDA7MTM5OzEzOTM4OzI7MTg0OzEzNDswMTEzODsyOzE2OTsxNjk7MTY5Mzg7MjswMDA7MTAwOzAwMDM4OzI7MTg5OzE4MzsxMDczODsyOzEzOTswMDA7MTM5Mzg7MjswODU7MTA3OzA0NzM4OzI7MjU1OzE0MDswMDAzODsyOzE1MzswNTA7MjA0Mzg7MjsxMzk7MDAwOzAwMDM4OzI7MjMzOzE1MDsxMjIzODsyOzE0MzsxODg7MTQzMzg7MjswNzI7MDYxOzEzOTM4OzI7MDQ3OzA3OTswNzkzODsyOzAwMDsyMDY7MjA5Mzg7MjsxNDg7MDAwOzIxMTM4OzI7MjU1OzAyMDsxNDczODsyOzAwMDsxOTE7MjU1Mzg7MjsxMDU7MTA1OzEwNTM4OzI7MDMwOzE0NDsyNTUzODsyOzE3ODswMzQ7MDM0Mzg7MjsyNTU7MjUwOzI0MDM4OzI7MDM0OzEzOTswMzQzODsyOzI1NTswMDA7MjU1Mzg7MjsyMjA7MjIwOzIyMDM4OzI7MjQ4OzI0ODsyNTUzODsyOzI1NTsyMTU7MDAwMzg7MjsyMTg7MTY1OzAzMjM4OzI7MTI4OzEyODsxMjgzODsyOzAwMDsxMjg7MDAwMzg7MjsxNzM7MjU1OzA0NzM4OzI7MjQwOzI1NTsyNDAzODsyOzI1NTsxMDU7MTgwMzg7MjsyMDU7MDkyOzA5MjM4OzI7MDc1OzAwMDsxMzAzODsyOzI1NTsyNTU7MjQwMzg7MjsyNDA7MjMwOzE0MDM4OzI7MjMwOzIzMDsyNTAzODsyOzI1NTsyNDA7MjQ1Mzg7MjsxMjQ7MjUyOzAwMDM4OzI7MjU1OzI1MDsyMDUzODsyOzE3MzsyMTY7MjMwMzg7MjsyNDA7MTI4OzEyODM4OzI7MjI0OzI1NTsyNTUzODsyOzI1MDsyNTA7MjEwMzg7MjsyMTE7MjExOzIxMTM4OzI7MTQ0OzIzODsxNDQzODsyOzI1NTsxODI7MTkzMzg7MjsyNTU7MTYwOzEyMjM4OzI7MDMyOzE3ODsxNzAzODsyOzEzNTsyMDY7MjUwMzg7MjsxMTk7MTM2OzE1MzM4OzI7MTc2OzE5NjsyMjIzODsyOzI1NTsyNTU7MjI0Mzg7MjswMDA7MjU1OzAwMDM4OzI7MDUwOzIwNTswNTAzODsyOzI1MDsyNDA7MjMwMzg7MjsxMjg7MDAwOzAwMDM4OzI7MTAyOzIwNTsxNzAzODsyOzAwMDswMDA7MjA1Mzg7MjsxODY7MDg1OzIxMTM4OzI7MTQ3OzExMjsyMTkzODsyOzA2MDsxNzk7MTEzMzg7MjsxMjM7MTA0OzIzODM4OzI7MDAwOzI1MDsxNTQzODsyOzA3MjsyMDk7MjA0Mzg7MjsxOTk7MDIxOzEzMzM4OzI7MDI1OzAyNTsxMTIzODsyOzI0NTsyNTU7MjUwMzg7MjsyNTU7MjI4OzIyNTM4OzI7MjU1OzIyODsxODEzODsyOzI1NTsyMjI7MTczMzg7MjswMDA7MDAwOzEyODM4OzI7MjUzOzI0NTsyMzAzODsyOzEyODsxMjg7MDAwMzg7MjsxMDc7MTQyOzAzNTM4OzI7MjU1OzE2NTswMDAzODsyOzI1NTswNjk7MDAwMzg7MjsyMTg7MTEyOzIxNDM4OzI7MjM4OzIzMjsxNzAzODsyOzE1MjsyNTE7MTUyMzg7MjsxNzU7MjM4OzIzODM4OzI7MjE5OzExMjsxNDczODsyOzI1NTsyMzk7MjEzMzg7MjsyNTU7MjE4OzE4NTM4OzI7MjA1OzEzMzswNjMzODsyOzI1NTsxOTI7MjAzMzg7MjsyMjE7MTYwOzIyMTM4OzI7MTc2OzIyNDsyMzAzODsyOzEyODswMDA7MTI4Mzg7MjsxMDI7MDUxOzE1MzM4OzI7MjU1OzAwMDswMDAzODsyOzE4ODsxNDM7MTQzMzg7MjswNjU7MTA1OzIyNTM4OzI7MTM5OzA2OTswMTkzODsyOzI1MDsxMjg7MTE0Mzg7MjsyNDQ7MTY0OzA5NjM4OzI7MDQ2OzEzOTswODczODsyOzI1NTsyNDU7MjM4Mzg7MjsxNjA7MDgyOzA0NTM4OzI7MTkyOzE5MjsxOTIzODsyOzEzNTsyMDY7MjM1Mzg7MjsxMDY7MDkwOzIwNTM4OzI7MTEyOzEyODsxNDQzODsyOzI1NTsyNTA7MjUwMzg7MjswMDA7MjU1OzEyNzM4OzI7MDcwOzEzMDsxODAzODsyOzIxMDsxODA7MTQwMzg7MjswMDA7MTI4OzEyODM4OzI7MjE2OzE5MTsyMTYzODsyOzI1NTswOTk7MDcxMzg7MjswNjQ7MjI0OzIwODM4OzI7MjM4OzEzMDsyMzgzODsyOzI0NTsyMjI7MTc5Mzg7MjsyNTU7MjU1OzI1NTM4OzI7MjQ1OzI0NTsyNDUzODsyOzI1NTsyNTU7MDAwMzg7MjsxNTQ7MjA1OzA1MDQ4OzI7MjQwOzI0ODsyNTU0ODsyOzI1MDsyMzU7MjE1NDg7MjswMDA7MjU1OzI1NTQ4OzI7MTI3OzI1NTsyMTI0ODsyOzI0MDsyNTU7MjU1NDg7MjsyNDU7MjQ1OzIyMDQ4OzI7MjU1OzIyODsxOTY0ODsyOzAwMDswMDA7MDAwNDg7MjsyNTU7MjM1OzIwNTQ4OzI7MDAwOzAwMDsyNTU0ODsyOzEzODswNDM7MjI2NDg7MjsxNjU7MDQyOzA0MjQ4OzI7MjIyOzE4NDsxMzU0ODsyOzA5NTsxNTg7MTYwNDg7MjsxMjc7MjU1OzAwMDQ4OzI7MjEwOzEwNTswMzA0ODsyOzI1NTsxMjc7MDgwNDg7MjsxMDA7MTQ5OzIzNzQ4OzI7MjU1OzI0ODsyMjA0ODsyOzIyMDswMjA7MDYwNDg7MjswMDA7MDAwOzEzOTQ4OzI7MDAwOzEzOTsxMzk0ODsyOzE4NDsxMzQ7MDExNDg7MjsxNjk7MTY5OzE2OTQ4OzI7MDAwOzEwMDswMDA0ODsyOzE4OTsxODM7MTA3NDg7MjsxMzk7MDAwOzEzOTQ4OzI7MDg1OzEwNzswNDc0ODsyOzI1NTsxNDA7MDAwNDg7MjsxNTM7MDUwOzIwNDQ4OzI7MTM5OzAwMDswMDA0ODsyOzIzMzsxNTA7MTIyNDg7MjsxNDM7MTg4OzE0MzQ4OzI7MDcyOzA2MTsxMzk0ODsyOzA0NzswNzk7MDc5NDg7MjswMDA7MjA2OzIwOTQ4OzI7MTQ4OzAwMDsyMTE0ODsyOzI1NTswMjA7MTQ3NDg7MjswMDA7MTkxOzI1NTQ4OzI7MTA1OzEwNTsxMDU0ODsyOzAzMDsxNDQ7MjU1NDg7MjsxNzg7MDM0OzAzNDQ4OzI7MjU1OzI1MDsyNDA0ODsyOzAzNDsxMzk7MDM0NDg7MjsyNTU7MDAwOzI1NTQ4OzI7MjIwOzIyMDsyMjA0ODsyOzI0ODsyNDg7MjU1NDg7MjsyNTU7MjE1OzAwMDQ4OzI7MjE4OzE2NTswMzI0ODsyOzEyODsxMjg7MTI4NDg7MjswMDA7MTI4OzAwMDQ4OzI7MTczOzI1NTswNDc0ODsyOzI0MDsyNTU7MjQwNDg7MjsyNTU7MTA1OzE4MDQ4OzI7MjA1OzA5MjswOTI0ODsyOzA3NTswMDA7MTMwNDg7MjsyNTU7MjU1OzI0MDQ4OzI7MjQwOzIzMDsxNDA0ODsyOzIzMDsyMzA7MjUwNDg7MjsyNTU7MjQwOzI0NTQ4OzI7MTI0OzI1MjswMDA0ODsyOzI1NTsyNTA7MjA1NDg7MjsxNzM7MjE2OzIzMDQ4OzI7MjQwOzEyODsxMjg0ODsyOzIyNDsyNTU7MjU1NDg7MjsyNTA7MjUwOzIxMDQ4OzI7MjExOzIxMTsyMTE0ODsyOzE0NDsyMzg7MTQ0NDg7MjsyNTU7MTgyOzE5MzQ4OzI7MjU1OzE2MDsxMjI0ODsyOzAzMjsxNzg7MTcwNDg7MjsxMzU7MjA2OzI1MDQ4OzI7MTE5OzEzNjsxNTM0ODsyOzE3NjsxOTY7MjIyNDg7MjsyNTU7MjU1OzIyNDQ4OzI7MDAwOzI1NTswMDA0ODsyOzA1MDsyMDU7MDUwNDg7MjsyNTA7MjQwOzIzMDQ4OzI7MTI4OzAwMDswMDA0ODsyOzEwMjsyMDU7MTcwNDg7MjswMDA7MDAwOzIwNTQ4OzI7MTg2OzA4NTsyMTE0ODsyOzE0NzsxMTI7MjE5NDg7MjswNjA7MTc5OzExMzQ4OzI7MTIzOzEwNDsyMzg0ODsyOzAwMDsyNTA7MTU0NDg7MjswNzI7MjA5OzIwNDQ4OzI7MTk5OzAyMTsxMzM0ODsyOzAyNTswMjU7MTEyNDg7MjsyNDU7MjU1OzI1MDQ4OzI7MjU1OzIyODsyMjU0ODsyOzI1NTsyMjg7MTgxNDg7MjsyNTU7MjIyOzE3MzQ4OzI7MDAwOzAwMDsxMjg0ODsyOzI1MzsyNDU7MjMwNDg7MjsxMjg7MTI4OzAwMDQ4OzI7MTA3OzE0MjswMzU0ODsyOzI1NTsxNjU7MDAwNDg7MjsyNTU7MDY5OzAwMDQ4OzI7MjE4OzExMjsyMTQ0ODsyOzIzODsyMzI7MTcwNDg7MjsxNTI7MjUxOzE1MjQ4OzI7MTc1OzIzODsyMzg0ODsyOzIxOTsxMTI7MTQ3NDg7MjsyNTU7MjM5OzIxMzQ4OzI7MjU1OzIxODsxODU0ODsyOzIwNTsxMzM7MDYzNDg7MjsyNTU7MTkyOzIwMzQ4OzI7MjIxOzE2MDsyMjE0ODsyOzE3NjsyMjQ7MjMwNDg7MjsxMjg7MDAwOzEyODQ4OzI7MTAyOzA1MTsxNTM0ODsyOzI1NTswMDA7MDAwNDg7MjsxODg7MTQzOzE0MzQ4OzI7MDY1OzEwNTsyMjU0ODsyOzEzOTswNjk7MDE5NDg7MjsyNTA7MTI4OzExNDQ4OzI7MjQ0OzE2NDswOTY0ODsyOzA0NjsxMzk7MDg3NDg7MjsyNTU7MjQ1OzIzODQ4OzI7MTYwOzA4MjswNDU0ODsyOzE5MjsxOTI7MTkyNDg7MjsxMzU7MjA2OzIzNTQ4OzI7MTA2OzA5MDsyMDU0ODsyOzExMjsxMjg7MTQ0NDg7MjsyNTU7MjUwOzI1MDQ4OzI7MDAwOzI1NTsxMjc0ODsyOzA3MDsxMzA7MTgwNDg7MjsyMTA7MTgwOzE0MDQ4OzI7MDAwOzEyODsxMjg0ODsyOzIxNjsxOTE7MjE2NDg7MjsyNTU7MDk5OzA3MTQ4OzI7MDY0OzIyNDsyMDg0ODsyOzIzODsxMzA7MjM4NDg7MjsyNDU7MjIyOzE3OTQ4OzI7MjU1OzI1NTsyNTU0ODsyOzI0NTsyNDU7MjQ1NDg7MjsyNTU7MjU1OzAwMDQ4OzI7MTU0OzIwNTswNTAzODs1OzAzODs1OzEzODs1OzIzODs1OzMzODs1OzQzODs1OzUzODs1OzYzODs1OzczODs1OzgzODs1OzkzODs1OzEwMzg7NTsxMTM4OzU7MTIzODs1OzEzMzg7NTsxNDM4OzU7MTUzODs1OzE2Mzg7NTsxNzM4OzU7MTgzODs1OzE5Mzg7NTsyMDM4OzU7MjEzODs1OzIyMzg7NTsyMzM4OzU7MjQzODs1OzI1Mzg7NTsyNjM4OzU7MjczODs1OzI4Mzg7NTsyOTM4OzU7MzAzODs1OzMxMzg7NTszMjM4OzU7MzMzODs1OzM0Mzg7NTszNTM4OzU7MzYzODs1OzM3Mzg7NTszODM4OzU7MzkzODs1OzQwMzg7NTs0MTM4OzU7NDIzODs1OzQzMzg7NTs0NDM4OzU7NDUzODs1OzQ2Mzg7NTs0NzM4OzU7NDgzODs1OzQ5Mzg7NTs1MDM4OzU7NTEzODs1OzUyMzg7NTs1MzM4OzU7NTQzODs1OzU1Mzg7NTs1NjM4OzU7NTczODs1OzU4Mzg7NTs1OTM4OzU7NjAzODs1OzYxMzg7NTs2MjM4OzU7NjMzODs1OzY0Mzg7NTs2NTM4OzU7NjYzODs1OzY3Mzg7NTs2ODM4OzU7NjkzODs1OzcwMzg7NTs3MTM4OzU7NzIzODs1OzczMzg7NTs3NDM4OzU7NzUzODs1Ozc2Mzg7NTs3NzM4OzU7NzgzODs1Ozc5Mzg7NTs4MDM4OzU7ODEzODs1OzgyMzg7NTs4MzM4OzU7ODQzODs1Ozg1Mzg7NTs4NjM4OzU7ODczODs1Ozg4Mzg7NTs4OTM4OzU7OTAzODs1OzkxMzg7NTs5MjM4OzU7OTMzODs1Ozk0Mzg7NTs5NTM4OzU7OTYzODs1Ozk3Mzg7NTs5ODM4OzU7OTkzODs1OzEwMDM4OzU7MTAxMzg7NTsxMDIzODs1OzEwMzM4OzU7MTA0Mzg7NTsxMDUzODs1OzEwNjM4OzU7MTA3Mzg7NTsxMDgzODs1OzEwOTM4OzU7MTEwMzg7NTsxMTEzODs1OzExMjM4OzU7MTEzMzg7NTsxMTQzODs1OzExNTM4OzU7MTE2Mzg7NTsxMTczODs1OzExODM4OzU7MTE5Mzg7NTsxMjAzODs1OzEyMTM4OzU7MTIyMzg7NTsxMjMzODs1OzEyNDM4OzU7MTI1Mzg7NTsxMjYzODs1OzEyNzM4OzU7MTI4Mzg7NTsxMjkzODs1OzEzMDM4OzU7MTMxMzg7NTsxMzIzODs1OzEzMzM4OzU7MTM0Mzg7NTsxMzUzODs1OzEzNjM4OzU7MTM3Mzg7NTsxMzgzODs1OzEzOTM4OzU7MTQwMzg7NTsxNDEzODs1OzE0MjM4OzU7MTQzMzg7NTsxNDQzODs1OzE0NTM4OzU7MTQ2Mzg7NTsxNDczODs1OzE0ODM4OzU7MTQ5Mzg7NTsxNTAzODs1OzE1MTM4OzU7MTUyMzg7NTsxNTMzODs1OzE1NDM4OzU7MTU1Mzg7NTsxNTYzODs1OzE1NzM4OzU7MTU4Mzg7NTsxNTkzODs1OzE2MDM4OzU7MTYxMzg7NTsxNjIzODs1OzE2MzM4OzU7MTY0Mzg7NTsxNjUzODs1OzE2NjM4OzU7MTY3Mzg7NTsxNjgzODs1OzE2OTM4OzU7MTcwMzg7NTsxNzEzODs1OzE3MjM4OzU7MTczMzg7NTsxNzQzODs1OzE3NTM4OzU7MTc2Mzg7NTsxNzczODs1OzE3ODM4OzU7MTc5Mzg7NTsxODAzODs1OzE4MTM4OzU7MTgyMzg7NTsxODMzODs1OzE4NDM4OzU7MTg1Mzg7NTsxODYzODs1OzE4NzM4OzU7MTg4Mzg7NTsxODkzODs1OzE5MDM4OzU7MTkxMzg7NTsxOTIzODs1OzE5MzM4OzU7MTk0Mzg7NTsxOTUzODs1OzE5NjM4OzU7MTk3Mzg7NTsxOTgzODs1OzE5OTM4OzU7MjAwMzg7NTsyMDEzODs1OzIwMjM4OzU7MjAzMzg7NTsyMDQzODs1OzIwNTM4OzU7MjA2Mzg7NTsyMDczODs1OzIwODM4OzU7MjA5Mzg7NTsyMTAzODs1OzIxMTM4OzU7MjEyMzg7NTsyMTMzODs1OzIxNDM4OzU7MjE1Mzg7NTsyMTYzODs1OzIxNzM4OzU7MjE4Mzg7NTsyMTkzODs1OzIyMDM4OzU7MjIxMzg7NTsyMjIzODs1OzIyMzM4OzU7MjI0Mzg7NTsyMjUzODs1OzIyNjM4OzU7MjI3Mzg7NTsyMjgzODs1OzIyOTM4OzU7MjMwMzg7NTsyMzEzODs1OzIzMjM4OzU7MjMzMzg7NTsyMzQzODs1OzIzNTM4OzU7MjM2Mzg7NTsyMzczODs1OzIzODM4OzU7MjM5Mzg7NTsyNDAzODs1OzI0MTM4OzU7MjQyMzg7NTsyNDMzODs1OzI0NDM4OzU7MjQ1Mzg7NTsyNDYzODs1OzI0NzM4OzU7MjQ4Mzg7NTsyNDkzODs1OzI1MDM4OzU7MjUxMzg7NTsyNTIzODs1OzI1MzM4OzU7MjU0Mzg7NTsyNTU0ODs1OzA0ODs1OzE0ODs1OzI0ODs1OzM0ODs1OzQ0ODs1OzU0ODs1OzY0ODs1Ozc0ODs1Ozg0ODs1Ozk0ODs1OzEwNDg7NTsxMTQ4OzU7MTI0ODs1OzEzNDg7NTsxNDQ4OzU7MTU0ODs1OzE2NDg7NTsxNzQ4OzU7MTg0ODs1OzE5NDg7NTsyMDQ4OzU7MjE0ODs1OzIyNDg7NTsyMzQ4OzU7MjQ0ODs1OzI1NDg7NTsyNjQ4OzU7Mjc0ODs1OzI4NDg7NTsyOTQ4OzU7MzA0ODs1OzMxNDg7NTszMjQ4OzU7MzM0ODs1OzM0NDg7NTszNTQ4OzU7MzY0ODs1OzM3NDg7NTszODQ4OzU7Mzk0ODs1OzQwNDg7NTs0MTQ4OzU7NDI0ODs1OzQzNDg7NTs0NDQ4OzU7NDU0ODs1OzQ2NDg7NTs0NzQ4OzU7NDg0ODs1OzQ5NDg7NTs1MDQ4OzU7NTE0ODs1OzUyNDg7NTs1MzQ4OzU7NTQ0ODs1OzU1NDg7NTs1NjQ4OzU7NTc0ODs1OzU4NDg7NTs1OTQ4OzU7NjA0ODs1OzYxNDg7NTs2MjQ4OzU7NjM0ODs1OzY0NDg7NTs2NTQ4OzU7NjY0ODs1OzY3NDg7NTs2ODQ4OzU7Njk0ODs1OzcwNDg7NTs3MTQ4OzU7NzI0ODs1OzczNDg7NTs3NDQ4OzU7NzU0ODs1Ozc2NDg7NTs3NzQ4OzU7Nzg0ODs1Ozc5NDg7NTs4MDQ4OzU7ODE0ODs1OzgyNDg7NTs4MzQ4OzU7ODQ0ODs1Ozg1NDg7NTs4NjQ4OzU7ODc0ODs1Ozg4NDg7NTs4OTQ4OzU7OTA0ODs1OzkxNDg7NTs5MjQ4OzU7OTM0ODs1Ozk0NDg7NTs5NTQ4OzU7OTY0ODs1Ozk3NDg7NTs5ODQ4OzU7OTk0ODs1OzEwMDQ4OzU7MTAxNDg7NTsxMDI0ODs1OzEwMzQ4OzU7MTA0NDg7NTsxMDU0ODs1OzEwNjQ4OzU7MTA3NDg7NTsxMDg0ODs1OzEwOTQ4OzU7MTEwNDg7NTsxMTE0ODs1OzExMjQ4OzU7MTEzNDg7NTsxMTQ0ODs1OzExNTQ4OzU7MTE2NDg7NTsxMTc0ODs1OzExODQ4OzU7MTE5NDg7NTsxMjA0ODs1OzEyMTQ4OzU7MTIyNDg7NTsxMjM0ODs1OzEyNDQ4OzU7MTI1NDg7NTsxMjY0ODs1OzEyNzQ4OzU7MTI4NDg7NTsxMjk0ODs1OzEzMDQ4OzU7MTMxNDg7NTsxMzI0ODs1OzEzMzQ4OzU7MTM0NDg7NTsxMzU0ODs1OzEzNjQ4OzU7MTM3NDg7NTsxMzg0ODs1OzEzOTQ4OzU7MTQwNDg7NTsxNDE0ODs1OzE0MjQ4OzU7MTQzNDg7NTsxNDQ0ODs1OzE0NTQ4OzU7MTQ2NDg7NTsxNDc0ODs1OzE0ODQ4OzU7MTQ5NDg7NTsxNTA0ODs1OzE1MTQ4OzU7MTUyNDg7NTsxNTM0ODs1OzE1NDQ4OzU7MTU1NDg7NTsxNTY0ODs1OzE1NzQ4OzU7MTU4NDg7NTsxNTk0ODs1OzE2MDQ4OzU7MTYxNDg7NTsxNjI0ODs1OzE2MzQ4OzU7MTY0NDg7NTsxNjU0ODs1OzE2NjQ4OzU7MTY3NDg7NTsxNjg0ODs1OzE2OTQ4OzU7MTcwNDg7NTsxNzE0ODs1OzE3MjQ4OzU7MTczNDg7NTsxNzQ0ODs1OzE3NTQ4OzU7MTc2NDg7NTsxNzc0ODs1OzE3ODQ4OzU7MTc5NDg7NTsxODA0ODs1OzE4MTQ4OzU7MTgyNDg7NTsxODM0ODs1OzE4NDQ4OzU7MTg1NDg7NTsxODY0ODs1OzE4NzQ4OzU7MTg4NDg7NTsxODk0ODs1OzE5MDQ4OzU7MTkxNDg7NTsxOTI0ODs1OzE5MzQ4OzU7MTk0NDg7NTsxOTU0ODs1OzE5NjQ4OzU7MTk3NDg7NTsxOTg0ODs1OzE5OTQ4OzU7MjAwNDg7NTsyMDE0ODs1OzIwMjQ4OzU7MjAzNDg7NTsyMDQ0ODs1OzIwNTQ4OzU7MjA2NDg7NTsyMDc0ODs1OzIwODQ4OzU7MjA5NDg7NTsyMTA0ODs1OzIxMTQ4OzU7MjEyNDg7NTsyMTM0ODs1OzIxNDQ4OzU7MjE1NDg7NTsyMTY0ODs1OzIxNzQ4OzU7MjE4NDg7NTsyMTk0ODs1OzIyMDQ4OzU7MjIxNDg7NTsyMjI0ODs1OzIyMzQ4OzU7MjI0NDg7NTsyMjU0ODs1OzIyNjQ4OzU7MjI3NDg7NTsyMjg0ODs1OzIyOTQ4OzU7MjMwNDg7NTsyMzE0ODs1OzIzMjQ4OzU7MjMzNDg7NTsyMzQ0ODs1OzIzNTQ4OzU7MjM2NDg7NTsyMzc0ODs1OzIzODQ4OzU7MjM5NDg7NTsyNDA0ODs1OzI0MTQ4OzU7MjQyNDg7NTsyNDM0ODs1OzI0NDQ4OzU7MjQ1NDg7NTsyNDY0ODs1OzI0NzQ4OzU7MjQ4NDg7NTsyNDk0ODs1OzI1MDQ4OzU7MjUxNDg7NTsyNTI0ODs1OzI1MzQ4OzU7MjU0NDg7NTsyNTU4uhAAaQAAAGsBAAAXAAAAglAWAFkAAABBAQAANgAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3BhcmtpbmdfbG90X2NvcmUtMC45LjEwL3NyYy9wYXJraW5nX2xvdC5ycwAAADi6EABpAAAASgEAAAwAAABQYXJraW5nIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybQAAtLoQACYAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9wYXJraW5nX2xvdF9jb3JlLTAuOS4xMC9zcmMvdGhyZWFkX3Bhcmtlci93YXNtLnJz5LoQAHAAAAAaAAAACQAAAOS6EABwAAAAKgAAAAkAAAAXAwAADAAAAAQAAABXAwAAWAMAAFkDAEGU98IAC7IjAQAAABsDAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9yZWdleC0xLjEwLjYvc3JjL2J1aWxkZXJzLnJzAJy7EABbAAAARwAAAAkAAABTeW50YXgoCgi8EAAIAAAAQ29tcGlsZWRUb29CaWcAAFoDAAAEAAAABAAAAFsDAABcAwAAEAAAAAgAAABdAwAA3MYQAGYAAADHBwAAKgAAANzGEABmAAAAxwcAABMAAADcxhAAZgAAAM4HAAAmAAAA3MYQAGYAAADOBwAADwAAAHJldmVyc2Ugc2VhcmNoIG11c3QgbWF0Y2ggaWYgZm9yd2FyZCBzZWFyY2ggZG9lcy91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3JlZ2V4LWF1dG9tYXRhLTAuNC43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UHJvcGVydGllc0lJbnZhbGlkSW5wdXRBbmNob3JlZEludmFsaWRJbnB1dFVuYW5jaG9yZWRVbnN1cHBvcnRlZFN0cmVhbVVuc3VwcG9ydGVkT3ZlcmxhcHBpbmdVbnN1cHBvcnRlZEVtcHR5ZXJyb3IgYnVpbGRpbmcgTkZBAAAMzxAAEgAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IGZvdW5kIGltcG9zc2libGUgZXJyb3IgaW4gbWV0YSBlbmdpbmU6IAAAACjPEABRAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvcmVnZXgtYXV0b21hdGEtMC40Ljcvc3JjL21ldGEvZXJyb3IucnMAAACEzxAAZQAAAO0AAAARAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvcmVnZXgtYXV0b21hdGEtMC40Ljcvc3JjL25mYS90aG9tcHNvbi9yYW5nZV90cmllLnJzAAD8zxAAcgAAAPoAAAApAAAA/M8QAHIAAAD8AAAAKwAAAPzPEAByAAAADwEAACsAAAD8zxAAcgAAAEsBAAA7AAAA/M8QAHIAAACJAQAAOwAAAPzPEAByAAAAMQEAAA0AAAB0b28gbWFueSBzZXF1ZW5jZXMgYWRkZWQgdG8gcmFuZ2UgdHJpZQAA0NAQACYAAAD8zxAAcgAAALQBAAARAAAA/M8QAHIAAADgAQAANwAAAPzPEAByAAAAGQIAACwAAAD8zxAAcgAAAB4CAAAVAAAA/M8QAHIAAAAjAgAAGQAAAPzPEAByAAAASQIAABoAAABhc3NlcnRpb24gZmFpbGVkOiBsZW4gPiAwAAAA/M8QAHIAAACGAgAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IGxlbiA8PSA0AAD8zxAAcgAAAIcCAAAJAAAA/M8QAHIAAACnAgAAFQAAAPzPEAByAAAARQMAAA0AAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9yZWdleC1hdXRvbWF0YS0wLjQuNy9zcmMvdXRpbC9hbHBoYWJldC5yc0VPSQBA0hAAAwAAAEJ5dGVDbGFzc2VzKEzSEAAMAAAAID0+IFsAAAABAAAAAAAAAGDSEAAFAAAAAQAAAAAAAAAYLhgAAQAAAEJ5dGVDbGFzc2VzKHtzaW5nbGV0b25zfSkAAACI0hAAGQAAANjREABoAAAAGgIAAC4AAADY0RAAaAAAADYCAAA0AAAA2NEQAGgAAADcAgAALgAAANjREABoAAAAgwMAAC8AAABTdGFydEJ5dGVNYXB7AAAA7NIQAA0AAABOb25Xb3JkQnl0ZVdvcmRCeXRlVGV4dExpbmVMRkxpbmVDUkN1c3RvbUxpbmVUZXJtaW5hdG9yUXVpdGJ5dGVHYXZlVXBIYXlzdGFja1Rvb0xvbmdsZW5VbnN1cHBvcnRlZEFuY2hvcmVkbW9kZQBB/KbDAAvbAwEAAADeAwAAUmVnZXhJbmZvSXByb3BzX3VuaW9uAAAAAAAAAAEAAAABAAAAygAAAAAAAAABAAAAAQAAAN8DAADgAwAAEAAAAAQAAAC/AAAAAAAAAAEAAAABAAAA4QMAAAAAAAAIAAAABAAAAOIDAAAAAAAACAAAAAQAAADcAwAAdXRmOF9lbXB0eWF1dG9wcmV3aGljaF9jYXB0dXJlc25mYV9zaXplX2xpbWl0b25lcGFzc19zaXplX2xpbWl0aHlicmlkX2NhY2hlX2NhcGFjaXR5aHlicmlkZGZhZGZhX3NpemVfbGltaXRkZmFfc3RhdGVfbGltaXRvbmVwYXNzYmFja3RyYWNrbGluZV90ZXJtaW5hdG9yAAAAmP4QAAoAAAD80xAACgAAAAbUEAAHAAAAAAwRAAMAAAAN1BAADgAAABvUEAAOAAAAKdQQABIAAAA71BAAFQAAAFDUEAAGAAAAVtQQAAMAAABZ1BAADgAAAGfUEAAPAAAAdtQQAAcAAAB91BAACQAAAKv0EAAMAAAAhtQQAA8AAABHcm91cEluZm9Jbm5lcnNsb3RfcmFuZ2VzbmFtZV90b19pbmRleGluZGV4X3RvX25hbWVtZW1vcnlfZXh0cmEAQeCqwwALyRABAAAAEAMAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3JlZ2V4LWF1dG9tYXRhLTAuNC43L3NyYy9uZmEvdGhvbXBzb24vY29tcGlsZXIucnNo1RAAcAAAALUDAAAWAAAAaNUQAHAAAAC2AwAAFgAAAGjVEABwAAAAtwMAABYAAABo1RAAcAAAALkDAAAOAAAAaNUQAHAAAAC8AwAADgAAAGjVEABwAAAA3QMAAA4AAABo1RAAcAAAADAEAAAoAAAAaNUQAHAAAAAsBAAAFgAAAGjVEABwAAAAnQUAACwAAABo1RAAcAAAAJ4FAAAyAAAAaNUQAHAAAACFBQAAMAAAAGjVEABwAAAAjgUAADAAAABo1RAAcAAAAI8FAAA2AAAAaNUQAHAAAABsBQAAPwAAAGjVEABwAAAAbQUAADsAAABo1RAAcAAAAO0FAAAqAAAAaNUQAHAAAABPBgAAFgAAAGjVEABwAAAAUwYAABYAAABo1RAAcAAAAFoGAAAWAAAAaNUQAHAAAABeBgAAFgAAAGjVEABwAAAAYgYAABYAAABo1RAAcAAAAG0GAAAWAAAAaNUQAHAAAAB0BgAAFgAAAGjVEABwAAAAeAYAABYAAABo1RAAcAAAAHwGAAAWAAAAaNUQAHAAAACFBgAAFgAAAGjVEABwAAAAkAYAABYAAABo1RAAcAAAAJQGAAAWAAAAaNUQAHAAAACYBgAAFgAAAGFzc2VydGlvbiBmYWlsZWQ6IHByZWZpeF9sZW4gPCByYW5nZXMubGVuKCkAaNUQAHAAAAD+BgAACQAAAGjVEABwAAAAAAcAACAAAABub24tZW1wdHkgbm9kZXMAaNUQAHAAAAAiBwAADgAAAGjVEABwAAAAIwcAACYAAABhc3NlcnRpb24gZmFpbGVkOiBzZWxmLnN0YXRlLnVuY29tcGlsZWRbbGFzdF0ubGFzdC5pc19ub25lKClo1RAAcAAAACMHAAAJAAAAaNUQAHAAAAAkBwAAHgAAAGjVEABwAAAAKAcAABkAAABhc3NlcnRpb24gZmFpbGVkOiAhcmFuZ2VzLmlzX2VtcHR5KClo1RAAcAAAABwHAAAJAAAAaNUQAHAAAAA1BwAAOgAAAGjVEABwAAAAPAcAACYAAABhc3NlcnRpb24gZmFpbGVkOiBzZWxmLnN0YXRlLnVuY29tcGlsZWRbMF0ubGFzdC5pc19ub25lKCkAAABo1RAAcAAAADwHAAAJAAAAaNUQAHAAAAA9BwAAJQAAAGjVEABwAAAAOwcAAAkAAABo1RAAcAAAAEYHAAAOAAAAaNUQAHAAAABHBwAAHgAAAEltcGxpY2l0ZXhwZWN0ZWQgbnVtYmVyIG9mIHBhdHRlcm5zIHRvIG1hdGNoIHBhdHRlcm4gSUQAeNkQAC8AAADwBREAagAAADQEAAANAAAA8AURAGoAAABVBAAAOQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL2Foby1jb3Jhc2ljay0xLjEuMy9zcmMvdXRpbC9zZWFyY2gucnPQ2RAAZAAAAE4BAAAJAAAAaW52YWxpZCBtYXRjaCBzcGFuAABE2hAAEgAAANDZEABkAAAAWwMAAAkAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9haG8tY29yYXNpY2stMS4xLjMvc3JjL3BhY2tlZC9hcGkucnMAcNoQAGMAAAAZAgAAHAAAAHDaEABjAAAAHwIAADEAAADjAwAABAAAAAQAAADkAwAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvcmVnZXgtYXV0b21hdGEtMC40Ljcvc3JjL3V0aWwvcHJlZmlsdGVyL2J5dGVzZXQucnMAAAAE2xAAcQAAACMAAAARAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvcmVnZXgtYXV0b21hdGEtMC40Ljcvc3JjL3V0aWwvcHJlZmlsdGVyL21lbWNoci5yc4jbEABwAAAAJwAAAC0AAACI2xAAcAAAAFUAAAAWAAAAiNsQAHAAAABWAAAAFgAAAIjbEABwAAAAZAAAADYAAACI2xAAcAAAAJIAAAAWAAAAiNsQAHAAAACTAAAAFgAAAIjbEABwAAAAlAAAABYAAACI2xAAcAAAAKIAAAA+AAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvcmVnZXgtYXV0b21hdGEtMC40Ljcvc3JjL3V0aWwvcHJlZmlsdGVyL21lbW1lbS5yc3jcEABwAAAAKwAAACcAAAB43BAAcAAAADsAAAAYAAAAYWhvLWNvcmFzaWNrIERGQSBzaG91bGQgbmV2ZXIgZmFpbC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3JlZ2V4LWF1dG9tYXRhLTAuNC43L3NyYy91dGlsL3ByZWZpbHRlci90ZWRkeS5ycwAAACrdEABvAAAAcQAAABIAQbS7wwALyRkBAAAAEAMAAAAAAAAIAAAABAAAANgCAAAAAAAABAAAAAQAAAAQAAAAPy4WAGoAAAC8AAAAKgAAAD8uFgBqAAAAuQAAACoAAAA/LhYAagAAADoAAAAVAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvbWVtY2hyLTIuNy40L3NyYy9tZW1tZW0vc2VhcmNoZXIucnMAAAzeEABiAAAAdAIAABsAAABUcnlGcm9tSW50RXJyb3IvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9yZWdleC1hdXRvbWF0YS0wLjQuNy9zcmMvbmZhL3Rob21wc29uL2JhY2t0cmFjay5yc4/eEABxAAAAogUAABoAAACP3hAAcQAAAAcGAAAqAAAAj94QAHEAAAAJBgAAHgAAAI/eEABxAAAAIQcAABcAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9yZWdleC1hdXRvbWF0YS0wLjQuNy9zcmMvdXRpbC9lc2NhcGUucnMAAEDfEABmAAAAKAAAAD0AAABA3xAAZgAAACUAAAANAAAA+PkQAGQAAABuAwAANQAAAOUDAABYAAAACAAAAOYDAADQAwAABAAAAAQAAACAAAAAAAAAACAAAAAIAAAA5wMAAAAAAAABAAAAAQAAAMoAAADgAwAAEAAAAAQAAAC/AAAAAAAAAAEAAAABAAAA3wMAAAAAAAAoAAAACAAAAOgDAAAAAAAACAAAAAQAAADcAwAAAAAAAAgAAAAEAAAA4gMAAGZvcndhcmRyZXZlcnNldmlzaXRlZF9jYXBhY2l0eUJvdW5kZWRCYWNrdHJhY2tlcgAAAAAIAAAACAAAAMUCAADA9xAAawAAAAgFAAAiAAAAwPcQAGsAAABVBQAAJAAAAMD3EABrAAAAZAUAADIAAADA9xAAawAAAKsFAAApAAAAwPcQAGsAAACsBQAAKwAAAMD3EABrAAAArgUAAB0AAAB0aG9tcHNvbjo6TkZBKAoACOEQAA8AAAB0cmFuc2l0aW9uIGVxdWl2YWxlbmNlIGNsYXNzZXM6ICDhEAAgAAAAEjQYAAEAAAApCgAAUOEQAAIAAADA9xAAawAAAMQFAAAtAAAAU1RBUlQoAABs4RAABgAAAEjlFwADAAAAEjQYAAEAAAABAAAAAAAAAAEAAAAAAAAAlBUWAAIAAAASNBgAAQAAAMD3EABrAAAAoQYAACMAAADA9xAAawAAAKUGAAAjAAAAwPcQAGsAAACqBgAAIQAAAMD3EABrAAAArQYAAD4AAADA9xAAawAAALAGAAAhAAAAwPcQAGsAAAC0BgAAHgAAAMD3EABrAAAAtQYAAB4AAADA9xAAawAAALcGAABBAAAAc3BhcnNlKAAs4hAABwAAAPDMGAABAAAAZGVuc2UoAABE4hAABgAAACAwGAACAAAAID0+IAEAAAAAAAAAXOIQAAQAAAB1bmlvbigAAHDiEAAGAAAA8MwYAAEAAABiaW5hcnktdW5pb24oAAAAiOIQAA0AAAAgMBgAAgAAAPDMGAABAAAAY2FwdHVyZShwaWQ9LCBncm91cD0sIHNsb3Q9KSA9PiCw4hAADAAAALziEAAIAAAAxOIQAAcAAADL4hAABQAAAEZBSUzw4hAABAAAAE1BVENIKAAA/OIQAAYAAADwzBgAAQAAAAEAAAAAAAAAGC4YAAEAAABc4hAABAAAAGFzc2VydGlvbiBmYWlsZWQ6IHN0YWNrLmlzX2VtcHR5KCkvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9yZWdleC1hdXRvbWF0YS0wLjQuNy9zcmMvdXRpbC9kZXRlcm1pbml6ZS9tb2QucnMAAABO4xAAbwAAAHgBAAAFAAAAU21hbGxJbmRleFBhdHRlcm5JRGNhbm5vdCBjcmVhdGUgaXRlcmF0b3IgZm9yIFBhdHRlcm5JRCB3aGVuIG51bWJlciBvZiBlbGVtZW50cyBleGNlZWQgAOPjEABEAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvcmVnZXgtYXV0b21hdGEtMC40Ljcvc3JjL3V0aWwvcHJpbWl0aXZlcy5ycwAAMOQQAGoAAADxAgAAAQAAAFBhdHRlcm5JREVycm9yU3RhdGVJRAAAADDkEABqAAAA8gIAAAEAAABTdGF0ZUlERXJyb3IAAAAACAAAAAgAAADEAgAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvcmVnZXgtYXV0b21hdGEtMC40Ljcvc3JjL2RmYS9yZW1hcHBlci5ycwDw5BAAZwAAAG4AAAASAAAA8OQQAGcAAACIAAAAJAAAAPDkEABnAAAAjQAAACAAAADw5BAAZwAAAI8AAAAdAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvcmVnZXgtYXV0b21hdGEtMC40Ljcvc3JjL25mYS90aG9tcHNvbi9idWlsZGVyLnJzAJjlEABvAAAAiQAAACAAAACY5RAAbwAAAI4AAAAgAAAAbXVzdCBjYWxsICdmaW5pc2hfcGF0dGVybicgZmlyc3Qo5hAAIAAAAJjlEABvAAAAnwEAAAkAAACY5RAAbwAAADICAAAYAAAAmOUQAG8AAAA7AgAALwAAAJjlEABvAAAAPgIAACQAAACY5RAAbwAAAD4CAAASAAAAmOUQAG8AAAA/AgAAFQAAAJjlEABvAAAASAIAAC8AAACY5RAAbwAAAEkCAAAlAAAAmOUQAG8AAABJAgAAFgAAAJjlEABvAAAASgIAABkAAACY5RAAbwAAAMYBAAAaAAAAmOUQAG8AAADJAQAAGgAAAJjlEABvAAAA1wEAABoAAABpbnZhbGlkIGNhcHR1cmUgaW5kZXgAAACY5RAAbwAAAN8BAAAaAAAAYSBzbWFsbCBlbm91Z2ggc2xvdACY5RAAbwAAAOEBAAAvAAAAmOUQAG8AAADiAQAAGgAAAJjlEABvAAAA8gEAABoAAACY5RAAbwAAAPQBAAAaAAAAmOUQAG8AAAD2AQAALwAAAJjlEABvAAAA9wEAABoAAACY5RAAbwAAAAICAAA2AAAAmOUQAG8AAAADAgAAMAAAAJjlEABvAAAAAwIAAB4AAACY5RAAbwAAAAYCAAAtAAAAmOUQAG8AAAAHAgAALQAAAJjlEABvAAAABQIAAB4AAACY5RAAbwAAAAwCAAAeAAAAmOUQAG8AAAAAAgAAHgAAAJjlEABvAAAAEwIAADYAAACY5RAAbwAAABQCAAAwAAAAmOUQAG8AAAAUAgAAHgAAAJjlEABvAAAAFwIAAC0AAACY5RAAbwAAABgCAAAtAAAAmOUQAG8AAAAWAgAAHgAAAJjlEABvAAAAHgIAAB4AAACY5RAAbwAAABECAAAeAAAAmOUQAG8AAAAiAgAAGgAAAJjlEABvAAAAJQIAABoAAACY5RAAbwAAAG8CAAAJAAAAmOUQAG8AAACSAgAAGwAAAG11c3QgY2FsbCAnc3RhcnRfcGF0dGVybicgZmlyc3QAmOUQAG8AAACeAgAAGQAAAJjlEABvAAAA+QMAADMAAACY5RAAbwAAAPwDAABAAAAAmOUQAG8AAAD/AwAAGgAAAJjlEABvAAAA/QMAAB4AAACY5RAAbwAAAH0EAAAaAAAAY2Fubm90IHBhdGNoIGZyb20gYSBzcGFyc2UgTkZBIHN0YXRlfOkQACQAAACY5RAAbwAAAIUEAAARAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvcmVnZXgtYXV0b21hdGEtMC40Ljcvc3JjL3V0aWwvY2FwdHVyZXMucnO46RAAaAAAAH4HAAAwAAAA+PkQAGQAAADLAQAALAAAAPj5EABkAAAA2AEAAAkAAAD4+RAAZAAAANkBAAAJAAAA+PkQAGQAAADaAQAACQAAAPj5EABkAAAA2wEAAAkAQYnVwwALwBsvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9yZWdleC1hdXRvbWF0YS0wLjQuNy9zcmMvdXRpbC9kZXRlcm1pbml6ZS9zdGF0ZS5ycwAAieoQAHEAAADyAAAAIwAAAInqEABxAAAAjQEAAAkAAACJ6hAAcQAAAJgBAAAJAAAAieoQAHEAAACnAQAACQAAAInqEABxAAAArwEAAAkAAACJ6hAAcQAAAL0BAAAjAAAAieoQAHEAAADIAQAAIwAAAInqEABxAAAA4wEAADQAAACJ6hAAcQAAAAwCAAAfAAAAieoQAHEAAAAQAgAAGQAAAInqEABxAAAAIwIAACAAAACJ6hAAcQAAACMCAAA5AAAAieoQAHEAAAAxAgAALwAAAInqEABxAAAAVAIAAA8AAACJ6hAAcQAAAF4CAAAPAAAAieoQAHEAAABnAgAADwAAAInqEABxAAAAbwIAAA8AAACJ6hAAcQAAAIECAAA1AAAAieoQAHEAAACHAgAANQAAAInqEABxAAAAygIAADEAAACJ6hAAcQAAAMYCAAAJAAAAieoQAHEAAAAcAwAAHgAAAFNtYWxsSW5kZXhFcnJvcgAAAAAABAAAAAQAAADpAwAAAAAAAAgAAAAEAAAA6gMAAAAAAAAEAAAABAAAAOsDAABQcm9wZXJ0aWVzKSBhcmUgbm90IHN1cHBvcnRlZCBvciBlbmFibGVk7AMAAAgAAAAEAAAA7QMAAO4DAADuAwAAYXNzZXJ0aW9uIGZhaWxlZDogbS5pc19lbXB0eSgpAAAJFRgAZAAAAKUCAAAJAAAACRUYAGQAAACmAgAAQAAAAFBhdHRlcm5TZXQgc2hvdWxkIGhhdmUgc3VmZmljaWVudCBjYXBhY2l0eQAAFBYYAGYAAADLBAAADgAAAHF1aXQgc2VhcmNoIGFmdGVyIG9ic2VydmluZyBieXRlICBhdCBvZmZzZXQgWO0QACEAAAB57RAACwAAAGdhdmUgdXAgc2VhcmNoaW5nIGF0IG9mZnNldCCU7RAAHAAAAGhheXN0YWNrIG9mIGxlbmd0aCAgaXMgdG9vIGxvbmcAuO0QABMAAADL7RAADAAAAHVuYW5jaG9yZWQgc2VhcmNoZXMgYXJlIG5vdCBzdXBwb3J0ZWQgb3IgZW5hYmxlZOjtEAAwAAAAYW5jaG9yZWQgc2VhcmNoZXMgYXJlIG5vdCBzdXBwb3J0ZWQgb3IgZW5hYmxlZAAAIO4QAC4AAABhbmNob3JlZCBzZWFyY2hlcyBmb3IgYSBzcGVjaWZpYyBwYXR0ZXJuICgAAFjuEAAqAAAApuwQAB4AAABQYXR0ZXJuU2V0SW5zZXJ0RXJyb3JjYXBhY2l0eU5vWWVzUGF0dGVybkFsbAAAAAAAAAAAAQAAAO8DAAAAAAAACAAAAAgAAADwAwAAU3RhbmRhcmRMZWZ0bW9zdEZpcnN0TGVmdG1vc3RMb25nZXN0sf4QAGUAAABTCAAAHwAAALH+EABlAAAAFgkAADoAAABhZGRpbmcgb25lIHN0YXRlIGFmdGVyIGNhY2hlIGNsZWFyIG11c3Qgd29ya7H+EABlAAAAvAkAABIAAABjYW5ub3Qgc2F2ZSBzZW50aW5lbCBzdGF0ZQAAYO8QABoAAACx/hAAZQAAAKkJAAANAAAAsf4QAGUAAADmCQAAQAAAALH+EABlAAAA5wkAAEcAAACx/hAAZQAAAOgJAABHAAAAsf4QAGUAAADpCQAACQAAALH+EABlAAAA6gkAAAkAAACx/hAAZQAAAOsJAAAJAAAAc3RhdGUgc2F2ZXIgZG9lcyBub3QgaGF2ZSBzYXZlZCBzdGF0ZSBJRLH+EABlAAAAFAoAAA4AAABpbnZhbGlkICdmcm9tJyBpZDogACzwEAATAAAAsf4QAGUAAAApCgAACQAAAGludmFsaWQgJ3RvJyBpZDogAAAAWPAQABEAAACx/hAAZQAAACoKAAAJAAAAsf4QAGUAAAAtCgAAGQAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuYXNfcmVmKCkuaXNfdmFsaWQoaWQpsf4QAGUAAAA7CgAACQAAAGF0dGVtcHRlZCB0byBzZWFyY2ggZm9yIGEgc3BlY2lmaWMgcGF0dGVybiB3aXRob3V0IGVuYWJsaW5nIHN0YXJ0c19mb3JfZWFjaF9wYXR0ZXJuANDwEABTAAAAsf4QAGUAAABBCgAAEQAAALH+EABlAAAASgoAABoAAACx/hAAZQAAAJYKAAAbAAAAsf4QAGUAAACyCgAAMwAAALH+EABlAAAAuwoAADMAAABjYW5ub3QgYnVpbGQgbGF6eSBERkFzIGZvciByZWdleGVzIHdpdGggVW5pY29kZSB3b3JkIGJvdW5kYXJpZXM7IHN3aXRjaCB0byBBU0NJSSB3b3JkIGJvdW5kYXJpZXMsIG9yIGhldXJpc3RpY2FsbHkgZW5hYmxlIFVuaWNvZGUgd29yZCBib3VuZGFyaWVzIG9yIHVzZSBhIGRpZmZlcmVudCByZWdleCBlbmdpbmUvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9yZWdleC1hdXRvbWF0YS0wLjQuNy9zcmMvbWV0YS9saXRlcmFsLnJzLfIQAGcAAAAeAAAADQAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IGV4cGVjdGVkIGxpdGVyYWwsIGdvdCCk8hAAQAAAAC3yEABnAAAAOAAAAB4AAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlOiBleHBlY3RlZCBsaXRlcmFsIG9yIGNvbmNhdCwgZ290IAAA/PIQAEoAAAAt8hAAZwAAADwAAAASAAAA5QMAAFgAAAAIAAAA8QMAANADAAAEAAAABAAAAIAAAAAAAAAABAAAAAQAAAAQAAAAAAAAAAABAAABAAAA8gMAAAAAAAAAAQAAAQAAALUAAAAAAAAAIAAAAAgAAADnAwAAc3RyaWRlMnN0YXJ0X21hcGNsYXNzZXNxdWl0c2V0Y2FjaGVfY2FwYWNpdHmo/hAABgAAAK7+EAADAAAAwPMQAAcAAADH8xAACQAAANDzEAAHAAAA1/MQAAcAAADe8xAADgAAAAAAAAABAAAAAQAAAMoAAADgAwAAEAAAAAQAAAC/AAAAAAAAAAEAAAABAAAA3wMAAAAAAAAoAAAACAAAAOgDAAAAAAAACAAAAAQAAADcAwAAAAAAAAgAAAAEAAAA4gMAAAAAAAAEAAAABAAAAPMDAABzdGFydHNfZm9yX2VhY2hfcGF0dGVybmJ5dGVfY2xhc3Nlc3VuaWNvZGVfd29yZF9ib3VuZGFyeXNwZWNpYWxpemVfc3RhcnRfc3RhdGVzc2tpcF9jYWNoZV9jYXBhY2l0eV9jaGVja21pbmltdW1fY2FjaGVfY2xlYXJfY291bnRtaW5pbXVtX2J5dGVzX3Blcl9zdGF0ZZj+EAAKAAAAAAwRAAMAAACU9BAAFwAAAKv0EAAMAAAAt/QQABUAAADX8xAABwAAAMz0EAAXAAAA3vMQAA4AAADj9BAAGQAAAPz0EAAZAAAAFfUQABcAAABDYWNoZUVycm9yAAAAAAAABAAAAAQAAAA7AAAATGF6eVN0YXRlSURMYXp5U3RhdGVJREVycm9yYXR0ZW1wdGVkYml0c3JlZ2V4OiB0aHJlYWQgSUQgYWxsb2NhdGlvbiBzcGFjZSBleGhhdXN0ZWQAyPUQACsAAACIIBgAZAAAAF4BAAARAAAAWgMAAAQAAAAEAAAAWwMAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3JlZ2V4LWF1dG9tYXRhLTAuNC43L3NyYy9tZXRhL3dyYXBwZXJzLnJzHPYQAGgAAACJAAAAGQAAABz2EABoAAAARQEAAB0AAAAc9hAAaAAAAPsBAAAdAAAAHPYQAGgAAAAfAwAAHQAAABz2EABoAAAALAQAAA0AAAAc9hAAaAAAALQEAAAdAAAAHPYQAGgAAABEBQAADQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3JlZ2V4LWF1dG9tYXRhLTAuNC43L3NyYy9uZmEvdGhvbXBzb24vbWFwLnJzAPT2EABrAAAAlgAAAAkAAAD09hAAawAAAJ8AAAAeAAAA9PYQAGsAAAC2AAAAEQAAAPT2EABrAAAACAEAAAkAAAD09hAAawAAABQBAAAeAAAA9PYQAGsAAAAlAQAAEQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3JlZ2V4LWF1dG9tYXRhLTAuNC43L3NyYy9uZmEvdGhvbXBzb24vbmZhLnJzAMD3EABrAAAAeQIAABcAAADA9xAAawAAAIMHAAAUAEHY8MMAC60IAgAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3JlZ2V4LWF1dG9tYXRhLTAuNC43L3NyYy9uZmEvdGhvbXBzb24vcGlrZXZtLnJzAABc+BAAbgAAAIUEAAAKAAAAYnl0ZSBzbGljZSBsZW5ndGhzIG11c3QgYmUgbGVzcyB0aGFuIHVzaXplIE1BWAAA3PgQAC4AAABc+BAAbgAAANgEAAAJAAAAXPgQAG4AAACHBQAACQAAAFz4EABuAAAAzAUAABMAAABc+BAAbgAAAFwGAAAfAAAAXPgQAG4AAADMBgAALwAAAFz4EABuAAAAzwYAAEYAAABc+BAAbgAAAM8GAAAjAAAAXPgQAG4AAACcBgAANAAAAFz4EABuAAAAMAgAAC4AAABzbG90IHRhYmxlIGxlbmd0aCBkb2Vzbid0IG92ZXJmbG93AABc+BAAbgAAAD0IAAAOAAAAXPgQAG4AAABlCAAAGAAAAFz4EABuAAAAbggAABgAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9yZWdleC1hdXRvbWF0YS0wLjQuNy9zcmMvdXRpbC9sb29rLnJz+PkQAGQAAACkAwAAKAAAAPj5EABkAAAAsAMAACYAAAD4+RAAZAAAAL0DAAAQAAAA+PkQAGQAAADMAwAAEAAAAPj5EABkAAAA2gMAADgAAAD4+RAAZAAAADcEAAAxAAAA+PkQAGQAAAA8BAAALAAAAPj5EABkAAAATAQAADgAAAD4+RAAZAAAAFsEAAA4AAAA+PkQAGQAAACeBAAAOAAAAPj5EABkAAAAyAQAADEAAAD4+RAAZAAAAOcEAAAsAAAA+PkQAGQAAAAyBgAAKAAAAPj5EABkAAAAQQYAAC0AAAD///9/c3BhcnNlIHNldCBjYXBhY2l0eSBjYW5ub3QgZXhjY2VkIAAAQPsQACIAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9yZWdleC1hdXRvbWF0YS0wLjQuNy9zcmMvdXRpbC9zcGFyc2Vfc2V0LnJzAABs+xAAagAAAIIAAAAJAAAAIGV4Y2VlZHMgY2FwYWNpdHkgb2YgIHdoZW4gaW5zZXJ0aW5nIAAAAAEAAAAAAAAA6PsQABUAAAD9+xAAEAAAAGz7EABqAAAAsgAAAAkAAABs+xAAagAAALwAAAATAAAAbPsQAGoAAAC9AAAAFAAAAGz7EABqAAAAxQAAACAAAABs+xAAagAAAMYAAAA0AAAAbPsQAGoAAADRAAAAIQBBuPnDAAtLAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEGI+8MAC9UJL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvcmVnZXgtYXV0b21hdGEtMC40Ljcvc3JjL3V0aWwvdXRmOC5yc4j9EABkAAAAQwAAACsAAACI/RAAZAAAAFUAAAA4AAAAiP0QAGQAAABYAAAAGAAAAFBpa2VWTUVuZ2luZUJvdW5kZWRCYWNrdHJhY2tlckVuZ2luZU9uZVBhc3NFbmdpbmVIeWJyaWRFbmdpbmVERkFERkFFbmdpbmVSZXZlcnNlSHlicmlkRW5naW5lUmV2ZXJzZURGQVJldmVyc2VERkFFbmdpbmVDb25maWdtYXRjaF9raW5kUGlrZVZNY29uZmlnbmZhL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvcmVnZXgtYXV0b21hdGEtMC40Ljcvc3JjL2h5YnJpZC9kZmEucnMAALH+EABlAAAAxwQAAB4AAACx/hAAZQAAAOkFAAAeAAAAbm8gcXVpdCBpbiBzdGFydCB3aXRob3V0IGxvb2stYmVoaW5ksf4QAGUAAABFBgAAFgAAAGFzc2VydGlvbiBmYWlsZWQ6IGlkLmlzX21hdGNoKCkAsf4QAGUAAAC1BgAACQAAAG5vIGluLXByb2dyZXNzIHNlYXJjaCB0byB1cGRhdGUAsf4QAGUAAAC3BwAAJAAAAG5vIGluLXByb2dyZXNzIHNlYXJjaCB0byBmaW5pc2gAsf4QAGUAAADDBwAAIgAAALH+EABlAAAAjgoAAB0AAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9yZWdleC1hdXRvbWF0YS0wLjQuNy9zcmMvaHlicmlkL3NlYXJjaC5ycwwAEQBoAAAAWQAAACkAAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlOiBzaWQgYmVpbmcgdW5rbm93biBpcyBhIGJ1Z4QAEQBEAAAADAARAGgAAAAdAQAAEQAAAAwAEQBoAAAAGgEAAC0AAAAMABEAaAAAAFcBAAApAAAADAARAGgAAACtAQAAEQAAAAwAEQBoAAAAqgEAAC0AAAAMABEAaAAAAPsBAAAlAAAADAARAGgAAAAiAgAAEQAAAAwAEQBoAAAAHQIAABUAAAAMABEAaAAAAOICAAAUAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvcmVnZXgtYXV0b21hdGEtMC40Ljcvc3JjL21ldGEvbGltaXRlZC5ycwBgAREAZwAAAI4AAAAlAAAAYAERAGcAAADoAAAAFAAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3JlZ2V4LWF1dG9tYXRhLTAuNC43L3NyYy9tZXRhL3N0b3BhdC5ycwAA6AERAGYAAABuAAAAJQBBgIXEAAvpGi91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3JlZ2V4LWF1dG9tYXRhLTAuNC43L3NyYy91dGlsL2VtcHR5LnJzAAAAgAIRAGUAAAD5AAAAOgAAAEFob0NvcmFzaWNrOjp0cnlfZmluZCBpcyBub3QgZXhwZWN0ZWQgdG8gZmFpbC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL2Foby1jb3Jhc2ljay0xLjEuMy9zcmMvYWhvY29yYXNpY2sucnMAAAAlAxEAZAAAAJYBAAAOAAAA/QIAAGQBAAAEAAAA/gIAAP0CAABkAQAABAAAAP0CAABkAQAABAAAAP8CAAAAAwAAAQMAAN0CAAACAwAAAwMAAAQDAAAFAwAABgMAAAcDAAAIAwAACQMAAAoDAAALAwAADAMAAA0DAAAOAwAA/gIAAJwDEQCsAxEArAMRAKwDEQCsAxEA6wIAAEgBAAAE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ZSBpcyBlbmFibGVkKVVuaWNvZGUtYXdhcmUgY2FzZSBpbnNlbnNpdGl2aXR5IG1hdGNoaW5nIGlzIG5vdCBhdmFpbGFibGUgKG1ha2Ugc3VyZSB0aGUgdW5pY29kZS1jYXNlIGZlYXR1cmUgaXMgZW5hYmxlZCkAnOIRAGAAAADyAQAAHgAAAJziEQBgAAAATwIAAB4AAABDbGFzc1VuaWNvZGVSYW5nZXN0YXJ0ZW5kAAAAnOIRAGAAAAA6BgAANgAAAENsYXNzQnl0ZXNSYW5nZeKIhQAAoxYRAAMAAACc4hEAYAAAAPcLAAASAAAAnOIRAGAAAADoCwAAGQAAAExvb2tDYXB0dXJlU3RhcnRFbmRTdGFydExGRW5kTEZTdGFydENSTEZFbmRDUkxGV29yZEFzY2lpV29yZEFzY2lpTmVnYXRlV29yZFVuaWNvZGVXb3JkVW5pY29kZU5lZ2F0ZVdvcmRTdGFydEFzY2lpV29yZEVuZEFzY2lpV29yZFN0YXJ0VW5pY29kZVdvcmRFbmRVbmljb2RlV29yZFN0YXJ0SGFsZkFzY2lpV29yZEVuZEhhbGZBc2NpaVdvcmRTdGFydEhhbGZVbmljb2RlV29yZEVuZEhhbGZVbmljb2RlaW5kZXhtaW5tYXhncmVlZHkXAwAADAAAAAQAAABXAwAADQQAAFkDAEHkr8QAC6qGAwEAAAAbAwAAAQAAAAEAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9yZWdleC1zeW50YXgtMC44LjQvc3JjL2hpci9saXRlcmFsLnJzYXNzZXJ0aW9uIGZhaWxlZDogc2VxMS5sZW4oKS5tYXBfb3IodHJ1ZSwgfHh8IHggPD0gc2VsZi5saW1pdF90b3RhbCn0FxEAZAAAADkCAAAJAAAA9BcRAGQAAABmAgAACQAAAPQXEQBkAAAAZwYAABgAAAD0FxEAZAAAAHQGAAATAAAA9BcRAGQAAABtBgAAGgAAAPQXEQBkAAAAnAYAABgAAAD0FxEAZAAAAKoGAAATAAAA9BcRAGQAAACjBgAAGgAAAPQXEQBkAAAAeAcAABEAAAAFAAAACgAAAAQAAAAKAAAAAwAAAEAAAAACAAAAQAAAAAEAAAAKAAAA9BcRAGQAAADOCAAAFQAAAPQXEQBkAAAA3ggAACgAAAD0FxEAZAAAAPIIAAAVAAAA9BcRAGQAAADiCAAAHgAAAPQXEQBkAAAA5AgAACcAAAD0FxEAZAAAAOQIAAAzAAAA9BcRAGQAAADlCAAANAAAAPQXEQBkAAAA6wgAACAAAAA3NDMyMTAvLi1n8kJD5SwrKikoJyYlJCMiITggHx4dHP+UpJWIoJut3d6GeujK1+DQ3My7t7OxqLLI4sOauK5+eL+dwqq9oqGWwY6Jq7C5p7pwr8C8nIyPe4WAk4qSct+X+dju7P3j2ub3h7Tx6fb054v18/vrycTw1pi2zbV/G9TT0tXkxamfg6xpUGJgYVHPkXRzkIKZeWuEbW58b1Jsdo1xgXd9pXVcalNIY11BT6bto8e+4dHLxtnbzur4nu//////////////////////////////////////////////////////////////////////////////////////dHJpZWQgdG8gdW53cmFwIGV4cHIgZnJvbSBIaXJGcmFtZSwgZ290OiAAAADUGhEAKQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3JlZ2V4LXN5bnRheC0wLjguNC9zcmMvaGlyL3RyYW5zbGF0ZS5ycwAACBsRAGYAAAABAQAAEgAAAHRyaWVkIHRvIHVud3JhcCBVbmljb2RlIGNsYXNzIGZyb20gSGlyRnJhbWUsIGdvdDogAACAGxEAMgAAAAgbEQBmAAAACgEAABIAAAB0cmllZCB0byB1bndyYXAgYnl0ZSBjbGFzcyBmcm9tIEhpckZyYW1lLCBnb3Q6IADMGxEALwAAAAgbEQBmAAAAFwEAABIAAAB0cmllZCB0byB1bndyYXAgcmVwZXRpdGlvbiBmcm9tIEhpckZyYW1lLCBnb3Q6IAAUHBEALwAAAAgbEQBmAAAAJQEAABEAAAB0cmllZCB0byB1bndyYXAgZ3JvdXAgZnJvbSBIaXJGcmFtZSwgZ290OiAAAFwcEQAqAAAACBsRAGYAAAA0AQAAEQAAAHRyaWVkIHRvIHVud3JhcCBhbHQgcGlwZSBmcm9tIEhpckZyYW1lLCBnb3Q6IAAAAKAcEQAtAAAACBsRAGYAAAA/AQAAEQAAAAgbEQBmAAAATgEAACcAAAAIGxEAZgAAAE8BAAAXAAAACBsRAGYAAABOAQAACQAAAAgbEQBmAAAArAEAAC4AAAAIGxEAZgAAAKMBAAAuAAAACBsRAGYAAAC3AQAAJwAAAAgbEQBmAAAAuAEAABwAAAAIGxEAZgAAALwBAAAnAAAACBsRAGYAAAC9AQAALAAAAAgbEQBmAAAAzgEAACAAAAAIGxEAZgAAAP4BAAAuAAAACBsRAGYAAAD6AQAALgAAAAgbEQBmAAAACgIAAC4AAAAIGxEAZgAAAAYCAAAuAAAACBsRAGYAAAAZAgAALgAAAAgbEQBmAAAAFAIAAC4AAAAIGxEAZgAAACACAAAqAAAACBsRAGYAAAAsAgAALgAAAAgbEQBmAAAAJwIAAC4AAAAIGxEAZgAAAD4CAAAvAAAACBsRAGYAAABFAgAALwAAAAgbEQBmAAAAMwIAAC8AAAAIGxEAZgAAADoCAAAvAAAACBsRAGYAAACMAgAAJgAAAAgbEQBmAAAAjQIAACYAAAAIGxEAZgAAAI4CAAAmAAAACBsRAGYAAABzAgAAJgAAAAgbEQBmAAAAdAIAACYAAAAIGxEAZgAAAHUCAAAmAAAACBsRAGYAAAC4AgAAHAAAAAgbEQBmAAAAwwIAACwAAAAIGxEAZgAAANECAAAsAAAACBsRAGYAAADbAgAAHAAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IGV4cGVjdGVkIGV4cHIgb3IgY29uY2F0LCBnb3QgVW5pY29kZSBjbGFzc/geEQBUAAAACBsRAGYAAADpAgAAEQAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IGV4cGVjdGVkIGV4cHIgb3IgY29uY2F0LCBnb3QgYnl0ZSBjbGFzcwAAAGQfEQBRAAAACBsRAGYAAADsAgAAEQAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IGV4cGVjdGVkIGV4cHIgb3IgY29uY2F0LCBnb3QgcmVwZXRpdGlvbgAAANAfEQBRAAAACBsRAGYAAADvAgAAEQAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IGV4cGVjdGVkIGV4cHIgb3IgY29uY2F0LCBnb3QgZ3JvdXA8IBEATAAAAAgbEQBmAAAA8gIAABEAAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlOiBleHBlY3RlZCBleHByIG9yIGNvbmNhdCwgZ290IGFsdCBtYXJrZXIAAACgIBEAUQAAAAgbEQBmAAAA9QIAABEAAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlOiBleHBlY3RlZCBleHByIG9yIGNvbmNhdCwgZ290IGFsdCBicmFuY2ggbWFya2VyDCERAFgAAAAIGxEAZgAAAPgCAAARAAAAaW50ZXJuYWwgZXJyb3I6IGVudGVyZWQgdW5yZWFjaGFibGUgY29kZTogZXhwZWN0ZWQgZXhwciBvciBhbHQsIGdvdCBVbmljb2RlIGNsYXNzAAAAfCERAFEAAAAIGxEAZgAAAAgDAAARAAAAaW50ZXJuYWwgZXJyb3I6IGVudGVyZWQgdW5yZWFjaGFibGUgY29kZTogZXhwZWN0ZWQgZXhwciBvciBhbHQsIGdvdCBieXRlIGNsYXNzAADoIREATgAAAAgbEQBmAAAACwMAABEAAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlOiBleHBlY3RlZCBleHByIG9yIGFsdCwgZ290IHJlcGV0aXRpb24AAFAiEQBOAAAACBsRAGYAAAAOAwAAEQAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IGV4cGVjdGVkIGV4cHIgb3IgYWx0LCBnb3QgZ3JvdXAAAAC4IhEASQAAAAgbEQBmAAAAEQMAABEAAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlOiBleHBlY3RlZCBleHByIG9yIGFsdCwgZ290IGNvbmNhdCBtYXJrZXIAAAAcIxEAUQAAAAgbEQBmAAAAFAMAABEAAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlOiBleHBlY3RlZCBleHByIG9yIGFsdCwgZ290IGFsdCBicmFuY2ggbWFya2VyAAAAiCMRAFUAAAAIGxEAZgAAABcDAAARAAAAYXNzZXJ0aW9uIGZhaWxlZDogc2VsZi5mbGFncygpLnVuaWNvZGUoKQgbEQBmAAAAQwQAAAkAAAAFYXNzZXJ0aW9uIGZhaWxlZDogIXNlbGYuZmxhZ3MoKS51bmljb2RlKCkAAAgbEQBmAAAAWQQAAAkAAAAwOUFaYXpBWmF6AH8JCSAgAB9/fzA5IX5heiB+IS86QFtge34JCQoKCwsMDA0NICBBWjA5QVpfX2F6MDlBRmFmYQAAAGIAAABjAAAAZQAAAGYAAABnAAAAaAAAAGkAAABqAAAAawAAACohAABsAAAAbQAAAG4AAABvAAAAcAAAAHEAAAByAAAAcwAAAH8BAAB0AAAAdQAAAHYAAAB3AAAAeAAAAHkAAAB6AAAAQQAAAEIAAABDAAAARQAAAEYAAABHAAAASAAAAEkAAABKAAAASwAAACohAABMAAAATQAAAE4AAABPAAAAUAAAAFEAAABSAAAAUwAAAH8BAABUAAAAVQAAAFYAAABXAAAAWAAAAFkAAABaAAAAnAMAALwDAADgAAAA4QAAAOIAAADjAAAA5AAAAOUAAAArIQAA5gAAAOcAAADoAAAA6QAAAOoAAADrAAAA7AAAAO0AAADuAAAA7wAAAPAAAADxAAAA8gAAAPMAAAD0AAAA9QAAAPYAAAD4AAAA+QAAAPoAAAD7AAAA/AAAAP0AAAD+AAAAnh4AAMAAAADBAAAAwgAAAMMAAADEAAAAxQAAACshAADGAAAAxwAAAMgAAADJAAAAygAAAMsAAADMAAAAzQAAAM4AAADPAAAA0AAAANEAAADSAAAA0wAAANQAAADVAAAA1gAAANgAAADZAAAA2gAAANsAAADcAAAA3QAAAN4AAAB4AQAAAQEAAAABAAADAQAAAgEAAAUBAAAEAQAABwEAAAYBAAAJAQAACAEAAAsBAAAKAQAADQEAAAwBAAAPAQAADgEAABEBAAAQAQAAEwEAABIBAAAVAQAAFAEAABcBAAAWAQAAGQEAABgBAAAbAQAAGgEAAB0BAAAcAQAAHwEAAB4BAAAhAQAAIAEAACMBAAAiAQAAJQEAACQBAAAnAQAAJgEAACkBAAAoAQAAKwEAACoBAAAtAQAALAEAAC8BAAAuAQAAMwEAADIBAAA1AQAANAEAADcBAAA2AQAAOgEAADkBAAA8AQAAOwEAAD4BAAA9AQAAQAEAAD8BAABCAQAAQQEAAEQBAABDAQAARgEAAEUBAABIAQAARwEAAEsBAABKAQAATQEAAEwBAABPAQAATgEAAFEBAABQAQAAUwEAAFIBAABVAQAAVAEAAFcBAABWAQAAWQEAAFgBAABbAQAAWgEAAF0BAABcAQAAXwEAAF4BAABhAQAAYAEAAGMBAABiAQAAZQEAAGQBAABnAQAAZgEAAGkBAABoAQAAawEAAGoBAABtAQAAbAEAAG8BAABuAQAAcQEAAHABAABzAQAAcgEAAHUBAAB0AQAAdwEAAHYBAAD/AAAAegEAAHkBAAB8AQAAewEAAH4BAAB9AQAAUwAAAHMAAABDAgAAUwIAAIMBAACCAQAAhQEAAIQBAABUAgAAiAEAAIcBAABWAgAAVwIAAIwBAACLAQAA3QEAAFkCAABbAgAAkgEAAJEBAABgAgAAYwIAAPYBAABpAgAAaAIAAJkBAACYAQAAPQIAAG8CAAByAgAAIAIAAHUCAAChAQAAoAEAAKMBAACiAQAApQEAAKQBAACAAgAAqAEAAKcBAACDAgAArQEAAKwBAACIAgAAsAEAAK8BAACKAgAAiwIAALQBAACzAQAAtgEAALUBAACSAgAAuQEAALgBAAC9AQAAvAEAAPcBAADFAQAAxgEAAMQBAADGAQAAxAEAAMUBAADIAQAAyQEAAMcBAADJAQAAxwEAAMgBAADLAQAAzAEAAMoBAADMAQAAygEAAMsBAADOAQAAzQEAANABAADPAQAA0gEAANEBAADUAQAA0wEAANYBAADVAQAA2AEAANcBAADaAQAA2QEAANwBAADbAQAAjgEAAN8BAADeAQAA4QEAAOABAADjAQAA4gEAAOUBAADkAQAA5wEAAOYBAADpAQAA6AEAAOsBAADqAQAA7QEAAOwBAADvAQAA7gEAAPIBAADzAQAA8QEAAPMBAADxAQAA8gEAAPUBAAD0AQAAlQEAAL8BAAD5AQAA+AEAAPsBAAD6AQAA/QEAAPwBAAD/AQAA/gEAAAECAAAAAgAAAwIAAAICAAAFAgAABAIAAAcCAAAGAgAACQIAAAgCAAALAgAACgIAAA0CAAAMAgAADwIAAA4CAAARAgAAEAIAABMCAAASAgAAFQIAABQCAAAXAgAAFgIAABkCAAAYAgAAGwIAABoCAAAdAgAAHAIAAB8CAAAeAgAAngEAACMCAAAiAgAAJQIAACQCAAAnAgAAJgIAACkCAAAoAgAAKwIAACoCAAAtAgAALAIAAC8CAAAuAgAAMQIAADACAAAzAgAAMgIAAGUsAAA8AgAAOwIAAJoBAABmLAAAfiwAAH8sAABCAgAAQQIAAIABAACJAgAAjAIAAEcCAABGAgAASQIAAEgCAABLAgAASgIAAE0CAABMAgAATwIAAE4CAABvLAAAbSwAAHAsAACBAQAAhgEAAIkBAACKAQAAjwEAAJABAACrpwAAkwEAAKynAACUAQAAjacAAKqnAACXAQAAlgEAAK6nAABiLAAAracAAJwBAABuLAAAnQEAAJ8BAABkLAAApgEAAMWnAACpAQAAsacAAK4BAABEAgAAsQEAALIBAABFAgAAtwEAALKnAACwpwAAmQMAALkDAAC+HwAAcQMAAHADAABzAwAAcgMAAHcDAAB2AwAA/QMAAP4DAAD/AwAA8wMAAKwDAACtAwAArgMAAK8DAADMAwAAzQMAAM4DAACxAwAAsgMAANADAACzAwAAtAMAALUDAAD1AwAAtgMAALcDAAC4AwAA0QMAAPQDAABFAwAAuQMAAL4fAAC6AwAA8AMAALsDAAC1AAAAvAMAAL0DAAC+AwAAvwMAAMADAADWAwAAwQMAAPEDAADCAwAAwwMAAMQDAADFAwAAxgMAANUDAADHAwAAyAMAAMkDAAAmIQAAygMAAMsDAACGAwAAiAMAAIkDAACKAwAAkQMAAJIDAADQAwAAkwMAAJQDAACVAwAA9QMAAJYDAACXAwAAmAMAANEDAAD0AwAARQMAAJkDAAC+HwAAmgMAAPADAACbAwAAtQAAAJwDAACdAwAAngMAAJ8DAACgAwAA1gMAAKEDAADxAwAAowMAAMMDAACjAwAAwgMAAKQDAAClAwAApgMAANUDAACnAwAAqAMAAKkDAAAmIQAAqgMAAKsDAACMAwAAjgMAAI8DAADXAwAAkgMAALIDAACYAwAAuAMAAPQDAACmAwAAxgMAAKADAADAAwAAzwMAANkDAADYAwAA2wMAANoDAADdAwAA3AMAAN8DAADeAwAA4QMAAOADAADjAwAA4gMAAOUDAADkAwAA5wMAAOYDAADpAwAA6AMAAOsDAADqAwAA7QMAAOwDAADvAwAA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FR4AABQeAAAXHgAAFh4AABkeAAAYHgAAGx4AABoeAAAdHgAAHB4AAB8eAAAeHgAAIR4AACAeAAAjHgAAIh4AACUeAAAkHgAAJx4AACYeAAApHgAAKB4AACseAAAqHgAALR4AACweAAAvHgAALh4AADEeAAAwHgAAMx4AADIeAAA1HgAANB4AADceAAA2HgAAOR4AADgeAAA7HgAAOh4AAD0eAAA8HgAAPx4AAD4eAABBHgAAQB4AAEMeAABCHgAARR4AAEQeAABHHgAARh4AAEkeAABIHgAASx4AAEoeAABNHgAATB4AAE8eAABOHgAAUR4AAFAeAABTHgAAUh4AAFUeAABUHgAAVx4AAFYeAABZHgAAWB4AAFseAABaHgAAXR4AAFweAABfHgAAXh4AAGEeAACbHgAAYB4AAJseAABjHgAAYh4AAGUeAABkHgAAZx4AAGYeAABpHgAAaB4AAGseAABqHgAAbR4AAGweAABvHgAAbh4AAHEeAABwHgAAcx4AAHIeAAB1HgAAdB4AAHceAAB2HgAAeR4AAHgeAAB7HgAAeh4AAH0eAAB8HgAAfx4AAH4eAACBHgAAgB4AAIMeAACCHgAAhR4AAIQeAACHHgAAhh4AAIkeAACIHgAAix4AAIoeAACNHgAAjB4AAI8eAACOHgAAkR4AAJAeAACTHgAAkh4AAJUeAACUHgAAYB4AAGEeAADfAAAAoR4AAKAeAACjHgAAoh4AAKUeAACkHgAApx4AAKYeAACpHgAAqB4AAKseAACqHgAArR4AAKweAACvHgAArh4AALEeAACwHgAAsx4AALIeAAC1HgAAtB4AALceAAC2HgAAuR4AALgeAAC7HgAAuh4AAL0eAAC8HgAAvx4AAL4eAADBHgAAwB4AAMMeAADCHgAAxR4AAMQeAADHHgAAxh4AAMkeAADIHgAAyx4AAMoeAADNHgAAzB4AAM8eAADOHgAA0R4AANAeAADTHgAA0h4AANUeAADUHgAA1x4AANYeAADZHgAA2B4AANseAADaHgAA3R4AANweAADfHgAA3h4AAOEeAADgHgAA4x4AAOIeAADlHgAA5B4AAOceAADmHgAA6R4AAOgeAADrHgAA6h4AAO0eAADsHgAA7x4AAO4eAADxHgAA8B4AAPMeAADyHgAA9R4AAPQeAAD3HgAA9h4AAPkeAAD4HgAA+x4AAPoeAAD9HgAA/B4AAP8eAAD+HgAACB8AAAkfAAAKHwAACx8AAAwfAAANHwAADh8AAA8fAAAAHwAAAR8AAAIfAAADHwAABB8AAAUfAAAGHwAABx8AABgfAAAZHwAAGh8AABsfAAAcHwAAHR8AABAfAAARHwAAEh8AABMfAAAUHwAAFR8AACgfAAApHwAAKh8AACsfAAAsHwAALR8AAC4fAAAvHwAAIB8AACEfAAAiHwAAIx8AACQfAAAlHwAAJh8AACcfAAA4HwAAOR8AADofAAA7HwAAPB8AAD0fAAA+HwAAPx8AADAfAAAxHwAAMh8AADMfAAA0HwAANR8AADYfAAA3HwAASB8AAEkfAABKHwAASx8AAEwfAABNHwAAQB8AAEEfAABCHwAAQx8AAEQfAABFHwAAWR8AAFsfAABdHwAAXx8AAFEfAABTHwAAVR8AAFcfAABoHwAAaR8AAGofAABrHwAAbB8AAG0fAABuHwAAbx8AAGAfAABhHwAAYh8AAGMfAABkHwAAZR8AAGYfAABnHwAAuh8AALsfAADIHwAAyR8AAMofAADLHwAA2h8AANsfAAD4HwAA+R8AAOofAADrHwAA+h8AAPsfAACIHwAAiR8AAIofAACLHwAAjB8AAI0fAACOHwAAjx8AAIAfAACBHwAAgh8AAIMfAACEHwAAhR8AAIYfAACHHwAAmB8AAJkfAACaHwAAmx8AAJwfAACdHwAAnh8AAJ8fAACQHwAAkR8AAJIfAACTHwAAlB8AAJUfAACWHwAAlx8AAKgfAACpHwAAqh8AAKsfAACsHwAArR8AAK4fAACvHwAAoB8AAKEfAACiHwAAox8AAKQfAAClHwAAph8AAKcfAAC4HwAAuR8AALwfAACwHwAAsR8AAHAfAABxHwAAsx8AAEUDAACZAwAAuQMAAMwfAAByHwAAcx8AAHQfAAB1HwAAwx8AANgfAADZHwAA0B8AANEfAAB2HwAAdx8AAOgfAADpHwAA7B8AAOAfAADhHwAAeh8AAHsfAADlHwAA/B8AAHgfAAB5HwAAfB8AAH0fAADzHwAAqQMAAMkDAABLAAAAawAAAMUAAADlAAAATiEAADIhAABwIQAAcSEAAHIhAABzIQAAdCEAAHUhAAB2IQAAdyEAAHghAAB5IQAAeiEAAHshAAB8IQAAfSEAAH4hAAB/IQAAYCEAAGEhAABiIQAAYyEAAGQhAABlIQAAZiEAAGchAABoIQAAaSEAAGohAABrIQAAbCEAAG0hAABuIQAAbyEAAIQhAACDIQAA0CQAANEkAADSJAAA0yQAANQkAADVJAAA1iQAANckAADYJAAA2SQAANokAADbJAAA3CQAAN0kAADeJAAA3yQAAOAkAADhJAAA4iQAAOMkAADkJAAA5SQAAOYkAADnJAAA6CQAAOkkAAC2JAAAtyQAALgkAAC5JAAAuiQAALskAAC8JAAAvSQAAL4kAAC/JAAAwCQAAMEkAADCJAAAwyQAAMQkAADFJAAAxiQAAMckAADIJAAAySQAAMokAADLJAAAzCQAAM0kAADOJAAAzyQAADAsAAAxLAAAMiwAADMsAAA0LAAANSwAADYsAAA3LAAAOCwAADksAAA6LAAAOywAADwsAAA9LAAAPiwAAD8sAABALAAAQSwAAEIsAABDLAAARCwAAEUsAABGLAAARywAAEgsAABJLAAASiwAAEssAABMLAAATSwAAE4sAABPLAAAUCwAAFEsAABSLAAAUywAAFQsAABVLAAAViwAAFcsAABYLAAAWSwAAFosAABbLAAAXCwAAF0sAABeLAAAXywAAAAsAAABLAAAAiwAAAMsAAAELAAABSwAAAYsAAAHLAAACCwAAAksAAAKLAAACywAAAwsAAANLAAADiwAAA8sAAAQLAAAESwAABIsAAATLAAAFCwAABUsAAAWLAAAFywAABgsAAAZLAAAGiwAABssAAAcLAAAHSwAAB4sAAAfLAAAICwAACEsAAAiLAAAIywAACQsAAAlLAAAJiwAACcsAAAoLAAAKSwAACosAAArLAAALCwAAC0sAAAuLAAALywAAGEsAABgLAAAawIAAH0dAAB9AgAAOgIAAD4CAABoLAAAZywAAGosAABpLAAAbCwAAGssAABRAgAAcQIAAFACAABSAgAAcywAAHIsAAB2LAAAdSwAAD8CAABAAgAAgSwAAIAsAACDLAAAgiwAAIUsAACELAAAhywAAIYsAACJLAAAiCwAAIssAACKLAAAjSwAAIwsAACPLAAAjiwAAJEsAACQLAAAkywAAJIsAACVLAAAlCwAAJcsAACWLAAAmSwAAJgsAACbLAAAmiwAAJ0sAACcLAAAnywAAJ4sAAChLAAAoCwAAKMsAACiLAAApSwAAKQsAACnLAAApiwAAKksAACoLAAAqywAAKosAACtLAAArCwAAK8sAACuLAAAsSwAALAsAACzLAAAsiwAALUsAAC0LAAAtywAALYsAAC5LAAAuCwAALssAAC6LAAAvSwAALwsAAC/LAAAviwAAMEsAADALAAAwywAAMIsAADFLAAAxCwAAMcsAADGLAAAySwAAMgsAADLLAAAyiwAAM0sAADMLAAAzywAAM4sAADRLAAA0CwAANMsAADSLAAA1SwAANQsAADXLAAA1iwAANksAADYLAAA2ywAANosAADdLAAA3CwAAN8sAADeLAAA4SwAAOAsAADjLAAA4iwAAOwsAADrLAAA7iwAAO0sAADzLAAA8iwAAKAQAAChEAAAohAAAKMQAACkEAAApRAAAKYQAACnEAAAqBAAAKkQAACqEAAAqxAAAKwQAACtEAAArhAAAK8QAACwEAAAsRAAALIQAACzEAAAtBAAALUQAAC2EAAAtxAAALgQAAC5EAAAuhAAALsQAAC8EAAAvRAAAL4QAAC/EAAAwBAAAMEQAADCEAAAwxAAAMQQAADFEAAAxxAAAM0QAABBpgAAQKYAAEOmAABCpgAARaYAAESmAABHpgAARqYAAEmmAABIpgAAiBwAAEumAACIHAAASqYAAE2mAABMpgAAT6YAAE6mAABRpgAAUKYAAFOmAABSpgAAVaYAAFSmAABXpgAAVqYAAFmmAABYpgAAW6YAAFqmAABdpgAAXKYAAF+mAABepgAAYaYAAGCmAABjpgAAYqYAAGWmAABkpgAAZ6YAAGamAABppgAAaKYAAGumAABqpgAAbaYAAGymAACBpgAAgKYAAIOmAACCpgAAhaYAAISmAACHpgAAhqYAAImmAACIpgAAi6YAAIqmAACNpgAAjKYAAI+mAACOpgAAkaYAAJCmAACTpgAAkqYAAJWmAACUpgAAl6YAAJamAACZpgAAmKYAAJumAACapgAAI6cAACKnAAAlpwAAJKcAACenAAAmpwAAKacAACinAAArpwAAKqcAAC2nAAAspwAAL6cAAC6nAAAzpwAAMqcAADWnAAA0pwAAN6cAADanAAA5pwAAOKcAADunAAA6pwAAPacAADynAAA/pwAAPqcAAEGnAABApwAAQ6cAAEKnAABFpwAARKcAAEenAABGpwAASacAAEinAABLpwAASqcAAE2nAABMpwAAT6cAAE6nAABRpwAAUKcAAFOnAABSpwAAVacAAFSnAABXpwAAVqcAAFmnAABYpwAAW6cAAFqnAABdpwAAXKcAAF+nAABepwAAYacAAGCnAABjpwAAYqcAAGWnAABkpwAAZ6cAAGanAABppwAAaKcAAGunAABqpwAAbacAAGynAABvpwAAbqcAAHqnAAB5pwAAfKcAAHunAAB5HQAAf6cAAH6nAACBpwAAgKcAAIOnAACCpwAAhacAAISnAACHpwAAhqcAAIynAACLpwAAZQIAAJGnAACQpwAAk6cAAJKnAADEpwAAl6cAAJanAACZpwAAmKcAAJunAACapwAAnacAAJynAACfpwAAnqcAAKGnAACgpwAAo6cAAKKnAAClpwAApKcAAKenAACmpwAAqacAAKinAABmAgAAXAIAAGECAABsAgAAagIAAJ4CAACHAgAAnQIAAFOrAAC1pwAAtKcAALenAAC2pwAAuacAALinAAC7pwAAuqcAAL2nAAC8pwAAv6cAAL6nAADBpwAAwKcAAMOnAADCpwAAlKcAAIICAACOHQAAyKcAAMenAADKpwAAyacAANGnAADQpwAA16cAANanAADZpwAA2KcAAPanAAD1pwAAs6cAAKATAAChEwAAohMAAKMTAACkEwAApRMAAKYTAACnEwAAqBMAAKkTAACqEwAAqxMAAKwTAACtEwAArhMAAK8TAACwEwAAsRMAALITAACzEwAAtBMAALUTAAC2EwAAtxMAALgTAAC5EwAAuhMAALsTAAC8EwAAvRMAAL4TAAC/EwAAwBMAAMETAADCEwAAwxMAAMQTAADFEwAAxhMAAMcTAADIEwAAyRMAAMoTAADLEwAAzBMAAM0TAADOEwAAzxMAANATAADREwAA0hMAANMTAADUEwAA1RMAANYTAADXEwAA2BMAANkTAADaEwAA2xMAANwTAADdEwAA3hMAAN8TAADgEwAA4RMAAOITAADjEwAA5BMAAOUTAADmEwAA5xMAAOgTAADpEwAA6hMAAOsTAADsEwAA7RMAAO4TAADvEwAAQf8AAEL/AABD/wAARP8AAEX/AABG/wAAR/8AAEj/AABJ/wAASv8AAEv/AABM/wAATf8AAE7/AABP/wAAUP8AAFH/AABS/wAAU/8AAFT/AABV/wAAVv8AAFf/AABY/wAAWf8AAFr/AAAh/wAAIv8AACP/AAAk/wAAJf8AACb/AAAn/wAAKP8AACn/AAAq/wAAK/8AACz/AAAt/wAALv8AAC//AAAw/wAAMf8AADL/AAAz/wAANP8AADX/AAA2/wAAN/8AADj/AAA5/wAAOv8AACgEAQApBAEAKgQBACsEAQAsBAEALQQBAC4EAQAvBAEAMAQBADEEAQAyBAEAMwQBADQEAQA1BAEANgQBADcEAQA4BAEAOQQBADoEAQA7BAEAPAQBAD0EAQA+BAEAPwQBAEAEAQBBBAEAQgQBAEMEAQBEBAEARQQBAEYEAQBHBAEASAQBAEkEAQBKBAEASwQBAEwEAQBNBAEATgQBAE8EAQAABAEAAQQBAAIEAQADBAEABAQBAAUEAQAGBAEABwQBAAgEAQAJBAEACgQBAAsEAQAMBAEADQQBAA4EAQAPBAEAEAQBABEEAQASBAEAEwQBABQEAQAVBAEAFgQBABcEAQAYBAEAGQQBABoEAQAbBAEAHAQBAB0EAQAeBAEAHwQBACAEAQAhBAEAIgQBACMEAQAkBAEAJQQBACYEAQAnBAEA2AQBANkEAQDaBAEA2wQBANwEAQDdBAEA3gQBAN8EAQDgBAEA4QQBAOIEAQDjBAEA5AQBAOUEAQDmBAEA5wQBAOgEAQDpBAEA6gQBAOsEAQDsBAEA7QQBAO4EAQDvBAEA8AQBAPEEAQDyBAEA8wQBAPQEAQD1BAEA9gQBAPcEAQD4BAEA+QQBAPoEAQD7BAEAsAQBALEEAQCyBAEAswQBALQEAQC1BAEAtgQBALcEAQC4BAEAuQQBALoEAQC7BAEAvAQBAL0EAQC+BAEAvwQBAMAEAQDBBAEAwgQBAMMEAQDEBAEAxQQBAMYEAQDHBAEAyAQBAMkEAQDKBAEAywQBAMwEAQDNBAEAzgQBAM8EAQDQBAEA0QQBANIEAQDTBAEAlwUBAJgFAQCZBQEAmgUBAJsFAQCcBQEAnQUBAJ4FAQCfBQEAoAUBAKEFAQCjBQEApAUBAKUFAQCmBQEApwUBAKgFAQCpBQEAqgUBAKsFAQCsBQEArQUBAK4FAQCvBQEAsAUBALEFAQCzBQEAtAUBALUFAQC2BQEAtwUBALgFAQC5BQEAuwUBALwFAQBwBQEAcQUBAHIFAQBzBQEAdAUBAHUFAQB2BQEAdwUBAHgFAQB5BQEAegUBAHwFAQB9BQEAfgUBAH8FAQCABQEAgQUBAIIFAQCDBQEAhAUBAIUFAQCGBQEAhwUBAIgFAQCJBQEAigUBAIwFAQCNBQEAjgUBAI8FAQCQBQEAkQUBAJIFAQCUBQEAlQUBAMAMAQDBDAEAwgwBAMMMAQDEDAEAxQwBAMYMAQDHDAEAyAwBAMkMAQDKDAEAywwBAMwMAQDNDAEAzgwBAM8MAQDQDAEA0QwBANIMAQDTDAEA1AwBANUMAQDWDAEA1wwBANgMAQDZDAEA2gwBANsMAQDcDAEA3QwBAN4MAQDfDAEA4AwBAOEMAQDiDAEA4wwBAOQMAQDlDAEA5gwBAOcMAQDoDAEA6QwBAOoMAQDrDAEA7AwBAO0MAQDuDAEA7wwBAPAMAQDxDAEA8gwBAIAMAQCBDAEAggwBAIMMAQCEDAEAhQwBAIYMAQCHDAEAiAwBAIkMAQCKDAEAiwwBAIwMAQCNDAEAjgwBAI8MAQCQDAEAkQwBAJIMAQCTDAEAlAwBAJUMAQCWDAEAlwwBAJgMAQCZDAEAmgwBAJsMAQCcDAEAnQwBAJ4MAQCfDAEAoAwBAKEMAQCiDAEAowwBAKQMAQClDAEApgwBAKcMAQCoDAEAqQwBAKoMAQCrDAEArAwBAK0MAQCuDAEArwwBALAMAQCxDAEAsgwBAMAYAQDBGAEAwhgBAMMYAQDEGAEAxRgBAMYYAQDHGAEAyBgBAMkYAQDKGAEAyxgBAMwYAQDNGAEAzhgBAM8YAQDQGAEA0RgBANIYAQDTGAEA1BgBANUYAQDWGAEA1xgBANgYAQDZGAEA2hgBANsYAQDcGAEA3RgBAN4YAQDfGAEAoBgBAKEYAQCiGAEAoxgBAKQYAQClGAEAphgBAKcYAQCoGAEAqRgBAKoYAQCrGAEArBgBAK0YAQCuGAEArxgBALAYAQCxGAEAshgBALMYAQC0GAEAtRgBALYYAQC3GAEAuBgBALkYAQC6GAEAuxgBALwYAQC9GAEAvhgBAL8YAQBgbgEAYW4BAGJuAQBjbgEAZG4BAGVuAQBmbgEAZ24BAGhuAQBpbgEAam4BAGtuAQBsbgEAbW4BAG5uAQBvbgEAcG4BAHFuAQBybgEAc24BAHRuAQB1bgEAdm4BAHduAQB4bgEAeW4BAHpuAQB7bgEAfG4BAH1uAQB+bgEAf24BAEBuAQBBbgEAQm4BAENuAQBEbgEARW4BAEZuAQBHbgEASG4BAEluAQBKbgEAS24BAExuAQBNbgEATm4BAE9uAQBQbgEAUW4BAFJuAQBTbgEAVG4BAFVuAQBWbgEAV24BAFhuAQBZbgEAWm4BAFtuAQBcbgEAXW4BAF5uAQBfbgEAIukBACPpAQAk6QEAJekBACbpAQAn6QEAKOkBACnpAQAq6QEAK+kBACzpAQAt6QEALukBAC/pAQAw6QEAMekBADLpAQAz6QEANOkBADXpAQA26QEAN+kBADjpAQA56QEAOukBADvpAQA86QEAPekBAD7pAQA/6QEAQOkBAEHpAQBC6QEAQ+kBAADpAQAB6QEAAukBAAPpAQAE6QEABekBAAbpAQAH6QEACOkBAAnpAQAK6QEAC+kBAAzpAQAN6QEADukBAA/pAQAQ6QEAEekBABLpAQAT6QEAFOkBABXpAQAW6QEAF+kBABjpAQAZ6QEAGukBABvpAQAc6QEAHekBAB7pAQAf6QEAIOkBACHpAQBBAAAArCQRAAEAAABCAAAAsCQRAAEAAABDAAAAtCQRAAEAAABEAAAAPC0WAAEAAABFAAAAuCQRAAEAAABGAAAAvCQRAAEAAABHAAAAwCQRAAEAAABIAAAAxCQRAAEAAABJAAAAyCQRAAEAAABKAAAAzCQRAAEAAABLAAAA0CQRAAIAAABMAAAA2CQRAAEAAABNAAAA3CQRAAEAAABOAAAA4CQRAAEAAABPAAAA5CQRAAEAAABQAAAA6CQRAAEAAABRAAAA7CQRAAEAAABSAAAA8CQRAAEAAABTAAAA9CQRAAIAAABUAAAA/CQRAAEAAABVAAAAACURAAEAAABWAAAABCURAAEAAABXAAAACCURAAEAAABYAAAADCURAAEAAABZAAAAECURAAEAAABaAAAAFCURAAEAAABhAAAAGCURAAEAAABiAAAAHCURAAEAAABjAAAAICURAAEAAABkAAAAOC0WAAEAAABlAAAAJCURAAEAAABmAAAAKCURAAEAAABnAAAALCURAAEAAABoAAAAMCURAAEAAABpAAAANCURAAEAAABqAAAAOCURAAEAAABrAAAAPCURAAIAAABsAAAARCURAAEAAABtAAAASCURAAEAAABuAAAATCURAAEAAABvAAAAUCURAAEAAABwAAAAVCURAAEAAABxAAAA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vC8RAAEAAAA4BAAAwC8RAAEAAAA5BAAAxC8RAAEAAAA6BAAAyC8RAAEAAAA7BAAAzC8RAAEAAAA8BAAA0C8RAAEAAAA9BAAA1C8RAAEAAAA+BAAA2C8RAAIAAAA/BAAA4C8RAAEAAABABAAA5C8RAAEAAABBBAAA6C8RAAIAAABCBAAA8C8RAAMAAABDBAAA/C8RAAEAAABEBAAAADARAAEAAABFBAAABDARAAEAAABGBAAACDARAAEAAABHBAAADDARAAEAAABIBAAAEDARAAEAAABJBAAAFDARAAEAAABKBAAAGDARAAIAAABLBAAAIDARAAEAAABMBAAAJDARAAEAAABNBAAAKDARAAEAAABOBAAALDARAAEAAABPBAAAMDARAAEAAABQBAAANDARAAEAAABRBAAAODARAAEAAABSBAAAPDARAAEAAABTBAAAQDARAAEAAABUBAAARDARAAEAAABVBAAASDARAAEAAABWBAAATDARAAEAAABXBAAAUDARAAEAAABYBAAAVDARAAEAAABZBAAAWDARAAEAAABaBAAAXDARAAEAAABbBAAAYDARAAEAAABcBAAAZDARAAEAAABdBAAAaDARAAEAAABeBAAAbDARAAEAAABfBAAAcDARAAEAAABgBAAAdDARAAEAAABhBAAAeDARAAEAAABiBAAAfDARAAIAAABjBAAAhDARAAIAAABkBAAAjDARAAEAAABlBAAAkDARAAEAAABmBAAAlDARAAEAAABnBAAAmDARAAEAAABoBAAAnDARAAEAAABpBAAAoDARAAEAAABqBAAApDARAAEAAABrBAAAqDARAAEAAABsBAAArDARAAEAAABtBAAAsDARAAEAAABuBAAAtDARAAEAAABvBAAAuDARAAEAAABwBAAAvDARAAEAAABxBAAAwDARAAEAAAByBAAAxDARAAEAAABzBAAAyDARAAEAAAB0BAAAzDARAAEAAAB1BAAA0DARAAEAAAB2BAAA1DARAAEAAAB3BAAA2DARAAEAAAB4BAAA3DARAAEAAAB5BAAA4DARAAEAAAB6BAAA5DARAAEAAAB7BAAA6DARAAEAAAB8BAAA7DARAAEAAAB9BAAA8DARAAEAAAB+BAAA9DARAAEAAAB/BAAA+DARAAEAAACABAAA/DARAAEAAACBBAAAADERAAEAAACKBAAABDERAAEAAACLBAAACDERAAEAAACMBAAADDERAAEAAACNBAAAEDERAAEAAACOBAAAFDERAAEAAACPBAAAGDERAAEAAACQBAAAHDERAAEAAACRBAAAIDERAAEAAACSBAAAJDERAAEAAACTBAAAKDERAAEAAACUBAAALDERAAEAAACVBAAAMDERAAEAAACWBAAANDERAAEAAACXBAAAODERAAEAAACYBAAAPDERAAEAAACZBAAAQDERAAEAAACaBAAARDERAAEAAACbBAAASDERAAEAAACcBAAATDERAAEAAACdBAAAUDERAAEAAACeBAAAVDERAAEAAACfBAAAWDERAAEAAACgBAAAXDERAAEAAAChBAAAYDERAAEAAACiBAAAZDERAAEAAACjBAAAaDERAAEAAACkBAAAbDERAAEAAAClBAAAcDERAAEAAACmBAAAdDERAAEAAACnBAAAeDERAAEAAACoBAAAfDERAAEAAACpBAAAgDERAAEAAACqBAAAhDERAAEAAACrBAAAiDERAAEAAACsBAAAjDERAAEAAACtBAAAkDERAAEAAACuBAAAlDERAAEAAACvBAAAmDERAAEAAACwBAAAnDERAAEAAACxBAAAoDERAAEAAACyBAAApDERAAEAAACzBAAAqDERAAEAAAC0BAAArDERAAEAAAC1BAAAsDERAAEAAAC2BAAAtDERAAEAAAC3BAAAuDERAAEAAAC4BAAAvDERAAEAAAC5BAAAwDERAAEAAAC6BAAAxDERAAEAAAC7BAAAyDERAAEAAAC8BAAAzDERAAEAAAC9BAAA0DERAAEAAAC+BAAA1DERAAEAAAC/BAAA2DERAAEAAADABAAA3DERAAEAAADBBAAA4DERAAEAAADCBAAA5DERAAEAAADDBAAA6DERAAEAAADEBAAA7DERAAEAAADFBAAA8DERAAEAAADGBAAA9DERAAEAAADHBAAA+DERAAEAAADIBAAA/DERAAEAAADJBAAAADIRAAEAAADKBAAABDIRAAEAAADLBAAACDIRAAEAAADMBAAADDIRAAEAAADNBAAAEDIRAAEAAADOBAAAFDIRAAEAAADPBAAAGDIRAAEAAADQBAAAHDIRAAEAAADRBAAAIDIRAAEAAADSBAAAJDIRAAEAAADTBAAAKDIRAAEAAADUBAAALDIRAAEAAADVBAAA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iDQRAAEAAAB3BQAAjDQRAAEAAAB4BQAAkDQRAAEAAAB5BQAAlDQRAAEAAAB6BQAAmDQRAAEAAAB7BQAAnDQRAAEAAAB8BQAAoDQRAAEAAAB9BQAApDQRAAEAAAB+BQAAqDQRAAEAAAB/BQAArDQRAAEAAACABQAAsDQRAAEAAACBBQAAtDQRAAEAAACCBQAAuDQRAAEAAACDBQAAvDQRAAEAAACEBQAAwDQRAAEAAACFBQAAxDQRAAEAAACGBQAAyDQRAAEAAACgEAAAzDQRAAEAAAChEAAA0DQRAAEAAACiEAAA1DQRAAEAAACjEAAA2DQRAAEAAACkEAAA3DQRAAEAAAClEAAA4DQRAAEAAACmEAAA5DQRAAEAAACnEAAA6DQRAAEAAACoEAAA7DQRAAEAAACpEAAA8DQRAAEAAACqEAAA9DQRAAEAAACrEAAA+DQRAAEAAACsEAAA/DQRAAEAAACtEAAAADURAAEAAACuEAAABDURAAEAAACvEAAACDURAAEAAACwEAAADDURAAEAAACxEAAAEDURAAEAAACyEAAAFDURAAEAAACzEAAAGDURAAEAAAC0EAAAHDURAAEAAAC1EAAAIDURAAEAAAC2EAAAJDURAAEAAAC3EAAAKDURAAEAAAC4EAAALDURAAEAAAC5EAAAMDURAAEAAAC6EAAANDURAAEAAAC7EAAAODURAAEAAAC8EAAAPDURAAEAAAC9EAAAQDURAAEAAAC+EAAARDURAAEAAAC/EAAASDURAAEAAADAEAAATDURAAEAAADBEAAAUDURAAEAAADCEAAAVDURAAEAAADDEAAAWDURAAEAAADEEAAAXDURAAEAAADFEAAAYDURAAEAAADHEAAAZDURAAEAAADNEAAAaDURAAEAAADQEAAAbDURAAEAAADREAAAcDURAAEAAADSEAAAdDURAAEAAADTEAAAeDURAAEAAADUEAAAfDURAAEAAADVEAAAgDURAAEAAADWEAAAhDURAAEAAADXEAAAiDURAAEAAADYEAAAjDURAAEAAADZEAAAkDURAAEAAADaEAAAlDURAAEAAADbEAAAmDURAAEAAADcEAAAnDURAAEAAADdEAAAoDURAAEAAADeEAAApDURAAEAAADfEAAAqDURAAEAAADgEAAArDURAAEAAADhEAAAsDURAAEAAADiEAAA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jEARAAEAAADIJAAAkEARAAEAAADJJAAAlEARAAEAAADKJAAAmEARAAEAAADLJAAAnEARAAEAAADMJAAAoEARAAEAAADNJAAApEARAAEAAADOJAAAqEARAAEAAADPJAAArEARAAEAAADQJAAAsEARAAEAAADRJAAAtEARAAEAAADSJAAAuEARAAEAAADTJAAAvEARAAEAAADUJAAAwEARAAEAAADVJAAAxEARAAEAAADWJAAAyEARAAEAAADXJAAAzEARAAEAAADYJAAA0EARAAEAAADZJAAA1EARAAEAAADaJAAA2EARAAEAAADbJAAA3EARAAEAAADcJAAA4EARAAEAAADdJAAA5EARAAEAAADeJAAA6EARAAEAAADfJAAA7EARAAEAAADgJAAA8EARAAEAAADhJAAA9EARAAEAAADiJAAA+EARAAEAAADjJAAA/EARAAEAAADkJAAAAEERAAEAAADlJAAABEERAAEAAADmJAAACEERAAEAAADnJAAADEERAAEAAADoJAAAEEERAAEAAADpJAAAFEERAAEAAAAALAAAGEERAAEAAAABLAAAHEERAAEAAAACLAAAIEERAAEAAAADLAAAJEERAAEAAAAELAAAKEERAAEAAAAFLAAALEERAAEAAAAGLAAAMEERAAEAAAAHLAAANEERAAEAAAAILAAAOEERAAEAAAAJLAAAPEERAAEAAAAKLAAAQEERAAEAAAALLAAAREERAAEAAAAMLAAASEERAAEAAAANLAAATEERAAEAAAAOLAAAUEERAAEAAAAPLAAAVEERAAEAAAAQLAAAWEERAAEAAAARLAAAXEERAAEAAAASLAAAYEERAAEAAAATLAAAZEERAAEAAAAULAAAaEERAAEAAAAVLAAAbEERAAEAAAAWLAAAcEERAAEAAAAXLAAAdEERAAEAAAAYLAAAeEERAAEAAAAZLAAAfEERAAEAAAAaLAAAgEERAAEAAAAbLAAAhEERAAEAAAAcLAAAiEERAAEAAAAdLAAAjEERAAEAAAAeLAAAkEERAAEAAAAfLAAAlEERAAEAAAAgLAAAmEERAAEAAAAhLAAAnEERAAEAAAAiLAAAoEERAAEAAAAjLAAApEERAAEAAAAkLAAAqEERAAEAAAAlLAAArEERAAEAAAAmLAAAsEERAAEAAAAnLAAAtEERAAEAAAAoLAAA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PEURAAEAAABBpgAAQEURAAEAAABCpgAAREURAAEAAABDpgAASEURAAEAAABEpgAATEURAAEAAABFpgAAUEURAAEAAABGpgAAVEURAAEAAABHpgAAWEURAAEAAABIpgAAXEURAAEAAABJpgAAYEURAAEAAABKpgAAZEURAAIAAABLpgAAbEURAAIAAABMpgAAdEURAAEAAABNpgAAeEURAAEAAABOpgAAfEURAAEAAABPpgAAgEURAAEAAABQpgAAhEURAAEAAABRpgAAiEURAAEAAABSpgAAjEURAAEAAABTpgAAkEURAAEAAABUpgAAlEURAAEAAABVpgAAmEURAAEAAABWpgAAnEURAAEAAABXpgAAoEURAAEAAABYpgAApEURAAEAAABZpgAAqEURAAEAAABapgAArEURAAEAAABbpgAAsEURAAEAAABcpgAAtEURAAEAAABdpgAAuEURAAEAAABepgAAvEURAAEAAABfpgAAwEURAAEAAABgpgAAxEURAAEAAABhpgAAyEURAAEAAABipgAAzEURAAEAAABjpgAA0EURAAEAAABkpgAA1EURAAEAAABlpgAA2EURAAEAAABmpgAA3EURAAEAAABnpgAA4EURAAEAAABopgAA5EURAAEAAABppgAA6EURAAEAAABqpgAA7EURAAEAAABrpgAA8EURAAEAAABspgAA9EURAAEAAABtpgAA+EURAAEAAACApgAA/EURAAEAAACBpgAAAEYRAAEAAACCpgAABEYRAAEAAACDpgAACEYRAAEAAACEpgAADEYRAAEAAACFpgAAEEYRAAEAAACGpgAAFEYRAAEAAACHpgAAGEYRAAEAAACIpgAAHEYRAAEAAACJpgAAIEYRAAEAAACKpgAAJEYRAAEAAACLpgAAKEYRAAEAAACMpgAALEYRAAEAAACNpgAAMEYRAAEAAACOpgAANEYRAAEAAACPpgAAOEYRAAEAAACQpgAAPEYRAAEAAACRpgAAQEYRAAEAAACSpgAAREYRAAEAAACTpgAASEYRAAEAAACUpgAATEYRAAEAAACVpgAAUEYRAAEAAACWpgAAVEYRAAEAAACXpgAAWEYRAAEAAACYpgAAXEYRAAEAAACZpgAAYEYRAAEAAACapgAAZEYRAAEAAACbpgAAaEYRAAEAAAAipwAAbEYRAAEAAAAjpwAA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0E8RAAEAAADlDAEA1E8RAAEAAADmDAEA2E8RAAEAAADnDAEA3E8RAAEAAADoDAEA4E8RAAEAAADpDAEA5E8RAAEAAADqDAEA6E8RAAEAAADrDAEA7E8RAAEAAADsDAEA8E8RAAEAAADtDAEA9E8RAAEAAADuDAEA+E8RAAEAAADvDAEA/E8RAAEAAADwDAEAAFARAAEAAADxDAEABFARAAEAAADyDAEACFARAAEAAACgGAEADFARAAEAAAChGAEAEFARAAEAAACiGAEAFFARAAEAAACjGAEAGFARAAEAAACkGAEAHFARAAEAAAClGAEAIFARAAEAAACmGAEAJFARAAEAAACnGAEAKFARAAEAAACoGAEALFARAAEAAACpGAEAMFARAAEAAACqGAEANFARAAEAAACrGAEAOFARAAEAAACsGAEAPFARAAEAAACtGAEAQFARAAEAAACuGAEARFARAAEAAACvGAEASFARAAEAAACwGAEATFARAAEAAACxGAEAUFARAAEAAACyGAEAVFARAAEAAACzGAEAWFARAAEAAAC0GAEAXFARAAEAAAC1GAEAYFARAAEAAAC2GAEAZFARAAEAAAC3GAEAaFARAAEAAAC4GAEAbFARAAEAAAC5GAEAcFARAAEAAAC6GAEAdFARAAEAAAC7GAEAeFARAAEAAAC8GAEAfFARAAEAAAC9GAEAgFARAAEAAAC+GAEAhFARAAEAAAC/GAEAiFARAAEAAADAGAEAjFARAAEAAADBGAEAkFARAAEAAADCGAEAlFARAAEAAADDGAEAmFARAAEAAADEGAEAnFARAAEAAADFGAEAoFARAAEAAADGGAEApFARAAEAAADHGAEAqFARAAEAAADIGAEArFARAAEAAADJGAEAsFARAAEAAADKGAEAtFARAAEAAADLGAEAuFARAAEAAADMGAEAvFARAAEAAADNGAEAwFARAAEAAADOGAEAxFARAAEAAADPGAEAyFARAAEAAADQGAEAzFARAAEAAADRGAEA0FARAAEAAADSGAEA1FARAAEAAADTGAEA2FARAAEAAADUGAEA3FARAAEAAADVGAEA4FARAAEAAADWGAEA5FARAAEAAADXGAEA6FARAAEAAADYGAEA7FARAAEAAADZGAEA8FARAAEAAADaGAEA9FARAAEAAADbGAEA+FARAAEAAADcGAEA/FARAAEAAADdGAEAAFERAAEAAADeGAEABFERAAEAAADfGAEACFERAAEAAABAbgEADFERAAEAAABBbgEAEFERAAEAAABCbgEAFFERAAEAAABDbgEAGFERAAEAAABEbgEAHFERAAEAAABFbgEAIFERAAEAAABGbgEAJFERAAEAAABHbgEAKFERAAEAAABIbgEALFERAAEAAABJbgEAMFERAAEAAABKbgEANFERAAEAAABLbgEAOFERAAEAAABMbgEAPFERAAEAAABNbgEAQFERAAEAAABObgEARFERAAEAAABPbgEASFERAAEAAABQbgEATFERAAEAAABRbgEAUFERAAEAAABSbgEAVFERAAEAAABTbgEAWFERAAEAAABUbgEAXFERAAEAAABVbgEAYFERAAEAAABWbgEAZFERAAEAAABXbgEAaFERAAEAAABYbgEAbFERAAEAAABZbgEAcFERAAEAAABabgEAdFERAAEAAABbbgEAeFERAAEAAABcbgEAfFERAAEAAABdbgEAgFERAAEAAABebgEAhFERAAEAAABfbgEAiFERAAEAAABgbgEAjFERAAEAAABhbgEAkFERAAEAAABibgEAlFERAAEAAABjbgEAmFERAAEAAABkbgEAnFERAAEAAABlbgEAoFERAAEAAABmbgEApFERAAEAAABnbgEAqFERAAEAAABobgEArFERAAEAAABpbgEAsFERAAEAAABqbgEAtFERAAEAAABrbgEAuFERAAEAAABsbgEAvFERAAEAAABtbgEAwFERAAEAAABubgEAxFERAAEAAABvbgEAyFERAAEAAABwbgEAzFERAAEAAABxbgEA0FERAAEAAABybgEA1FERAAEAAABzbgEA2FERAAEAAAB0bgEA3FERAAEAAAB1bgEA4FERAAEAAAB2bgEA5FERAAEAAAB3bgEA6FERAAEAAAB4bgEA7FERAAEAAAB5bgEA8FERAAEAAAB6bgEA9FERAAEAAAB7bgEA+FERAAEAAAB8bgEA/FERAAEAAAB9bgEAAFIRAAEAAAB+bgEABFIRAAEAAAB/bgEACFIRAAEAAAAA6QEADFIRAAEAAAAB6QEAEFIRAAEAAAAC6QEAFFIRAAEAAAAD6QEAGFIRAAEAAAAE6QEAHFIRAAEAAAAF6QEAIFIRAAEAAAAG6QEAJFIRAAEAAAAH6QEAKFIRAAEAAAAI6QEALFIRAAEAAAAJ6QEAMFIRAAEAAAAK6QEANFIRAAEAAAAL6QEAOFIRAAEAAAAM6QEAPFIRAAEAAAAN6QEAQFIRAAEAAAAO6QEARFIRAAEAAAAP6QEASFIRAAEAAAAQ6QEATFIRAAEAAAAR6QEAUFIRAAEAAAAS6QEAVFIRAAEAAAAT6QEAWFIRAAEAAAAU6QEAXFIRAAEAAAAV6QEAYFIRAAEAAAAW6QEAZFIRAAEAAAAX6QEAaFIRAAEAAAAY6QEAbFIRAAEAAAAZ6QEAcFIRAAEAAAAa6QEAdFIRAAEAAAAb6QEAeFIRAAEAAAAc6QEAfFIRAAEAAAAd6QEAgFIRAAEAAAAe6QEAhFIRAAEAAAAf6QEAiFIRAAEAAAAg6QEAjFIRAAEAAAAh6QEAkFIRAAEAAAAi6QEAlFIRAAEAAAAj6QEAmFIRAAEAAAAk6QEAnFIRAAEAAAAl6QEAoFIRAAEAAAAm6QEApFIRAAEAAAAn6QEAqFIRAAEAAAAo6QEArFIRAAEAAAAp6QEAsFIRAAEAAAAq6QEAtFIRAAEAAAAr6QEAuFIRAAEAAAAs6QEAvFIRAAEAAAAt6QEAwFIRAAEAAAAu6QEAxFIRAAEAAAAv6QEAyFIRAAEAAAAw6QEAzFIRAAEAAAAx6QEA0FIRAAEAAAAy6QEA1FIRAAEAAAAz6QEA2FIRAAEAAAA06QEA3FIRAAEAAAA16QEA4FIRAAEAAAA26QEA5FIRAAEAAAA36QEA6FIRAAEAAAA46QEA7FIRAAEAAAA56QEA8FIRAAEAAAA66QEA9FIRAAEAAAA76QEA+FIRAAEAAAA86QEA/FIRAAEAAAA96QEAAFMRAAEAAAA+6QEABFMRAAEAAAA/6QEACFMRAAEAAABA6QEADFMRAAEAAABB6QEAEFMRAAEAAABC6QEAFFMRAAEAAABD6QEAGFMRAAEAAABMaXRlcmFsQ2xhc3NVbmljb2RlQ2xhc3NCeXRlc1JlcGV0aXRpb25Hcm91cG9sZF9mbGFnc0NvbmNhdEFsdGVybmF0aW9uQWx0ZXJuYXRpb25CcmFuY2gAAAAAAAEAAAABAAAA3wMAAAAAAAAEAAAABAAAAA4EAABjYXNlX2luc2Vuc2l0aXZlbXVsdGlfbGluZWRvdF9tYXRjaGVzX25ld19saW5lc3dhcF9ncmVlZHVuaWNvZGVjcmxmAHzaEQAQAAAAjNoRAAoAAACW2hEAFAAAAKraEQAKAAAAtNoRAAcAAAC72hEABAAAAEZsYWdzAAAAFwMAAAwAAAAEAAAAVwMAAA8EAABZAwBBmLbHAAv2gw8BAAAAEAQAAFRyeUZyb21DaGFyRXJyb3JleGNlZWRlZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2FwdHVyaW5nIGdyb3VwcyAoAAAAMNsRADEAAADwzBgAAQAAAGludmFsaWQgZXNjYXBlIHNlcXVlbmNlIGZvdW5kIGluIGNoYXJhY3RlciBjbGFzc3TbEQAwAAAAaW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgcmFuZ2UsIHRoZSBzdGFydCBtdXN0IGJlIDw9IHRoZSBlbmQArNsRADsAAABpbnZhbGlkIHJhbmdlIGJvdW5kYXJ5LCBtdXN0IGJlIGEgbGl0ZXJhbAAAAPDbEQApAAAAdW5jbG9zZWQgY2hhcmFjdGVyIGNsYXNzJNwRABgAAABkZWNpbWFsIGxpdGVyYWwgZW1wdHkAAABE3BEAFQAAAGRlY2ltYWwgbGl0ZXJhbCBpbnZhbGlkAGTcEQAXAAAAaGV4YWRlY2ltYWwgbGl0ZXJhbCBlbXB0eQAAAITcEQAZAAAAaGV4YWRlY2ltYWwgbGl0ZXJhbCBpcyBub3QgYSBVbmljb2RlIHNjYWxhciB2YWx1ZQAAAKjcEQAxAAAAaW52YWxpZCBoZXhhZGVjaW1hbCBkaWdpdAAAAOTcEQAZAAAAaW5jb21wbGV0ZSBlc2NhcGUgc2VxdWVuY2UsIHJlYWNoZWQgZW5kIG9mIHBhdHRlcm4gcHJlbWF0dXJlbHkAAAjdEQA+AAAAdW5yZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZVDdEQAcAAAAZGFuZ2xpbmcgZmxhZyBuZWdhdGlvbiBvcGVyYXRvcgB03REAHwAAAGR1cGxpY2F0ZSBmbGFnAACc3READgAAAGZsYWcgbmVnYXRpb24gb3BlcmF0b3IgcmVwZWF0ZWQAtN0RAB8AAABleHBlY3RlZCBmbGFnIGJ1dCBnb3QgZW5kIG9mIHJlZ2V4AADc3REAIgAAAHVucmVjb2duaXplZCBmbGFnAAAACN4RABEAAABkdXBsaWNhdGUgY2FwdHVyZSBncm91cCBuYW1lJN4RABwAAABlbXB0eSBjYXB0dXJlIGdyb3VwIG5hbWVI3hEAGAAAAGludmFsaWQgY2FwdHVyZSBncm91cCBjaGFyYWN0ZXIAaN4RAB8AAAB1bmNsb3NlZCBjYXB0dXJlIGdyb3VwIG5hbWUAkN4RABsAAAB1bmNsb3NlZCBncm91cAAAtN4RAA4AAAB1bm9wZW5lZCBncm91cAAAzN4RAA4AAABleGNlZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIG5lc3RlZCBwYXJlbnRoZXNlcy9icmFja2V0cyAoAADk3hEAOgAAAPDMGAABAAAAaW52YWxpZCByZXBldGl0aW9uIGNvdW50IHJhbmdlLCB0aGUgc3RhcnQgbXVzdCBiZSA8PSB0aGUgZW5kMN8RADwAAAByZXBldGl0aW9uIHF1YW50aWZpZXIgZXhwZWN0cyBhIHZhbGlkIGRlY2ltYWwAAAB03xEALQAAAHVuY2xvc2VkIGNvdW50ZWQgcmVwZXRpdGlvbgCs3xEAGwAAAHJlcGV0aXRpb24gb3BlcmF0b3IgbWlzc2luZyBleHByZXNzaW9uAADQ3xEAJgAAAHNwZWNpYWwgd29yZCBib3VuZGFyeSBhc3NlcnRpb24gaXMgZWl0aGVyIHVuY2xvc2VkIG9yIGNvbnRhaW5zIGFuIGludmFsaWQgY2hhcmFjdGVyAADgEQBTAAAAdW5yZWNvZ25pemVkIHNwZWNpYWwgd29yZCBib3VuZGFyeSBhc3NlcnRpb24sIHZhbGlkIGNob2ljZXMgYXJlOiBzdGFydCwgZW5kLCBzdGFydC1oYWxmIG9yIGVuZC1oYWxmAFzgEQBjAAAAZm91bmQgZWl0aGVyIHRoZSBiZWdpbm5pbmcgb2YgYSBzcGVjaWFsIHdvcmQgYm91bmRhcnkgb3IgYSBib3VuZGVkIHJlcGV0aXRpb24gb24gYSBcYiB3aXRoIGFuIG9wZW5pbmcgYnJhY2UsIGJ1dCBubyBjbG9zaW5nIGJyYWNlAAAAyOARAIEAAABpbnZhbGlkIFVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzAFThEQAfAAAAYmFja3JlZmVyZW5jZXMgYXJlIG5vdCBzdXBwb3J0ZWR84REAIAAAAGxvb2stYXJvdW5kLCBpbmNsdWRpbmcgbG9vay1haGVhZCBhbmQgbG9vay1iZWhpbmQsIGlzIG5vdCBzdXBwb3J0ZWQApOERAEMAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9yZWdleC1zeW50YXgtMC44LjQvc3JjL2FzdC9tb2QucnPw4REAYAAAAH8CAAAiAAAA8OERAGAAAACYAgAAIgAAAGFsbnVtYmxhbmtncmFwaHByaW50eGRpZ2l0AADw4REAYAAAAPMEAAAjAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvcmVnZXgtc3ludGF4LTAuOC40L3NyYy9oaXIvbW9kLnJznOIRAGAAAAC/BAAALgAAAJziEQBgAAAAwAQAACoAAABFAwAAFAAAAAQAAAARBAAALi49ACzjEQADAAAAIChleGhhdXN0ZWQpOOMRAAwAAABnb3QgY29kZXBvaW50IFUrIHdoaWNoIG9jY3VycyBiZWZvcmUgbGFzdCBjb2RlcG9pbnQgVSsAAEzjEQAQAAAAXOMRACYAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9yZWdleC1zeW50YXgtMC44LjQvc3JjL3VuaWNvZGUucnOU4xEAYAAAAH4AAAANAAAAYXNzZXJ0aW9uIGZhaWxlZDogaSA+IHNlbGYubmV4dACU4xEAYAAAAJsAAAARAAAAlOMRAGAAAAC1AAAACQAAAEdlbmVyYWxfQ2F0ZWdvcnlTY3JpcHRjZnNjbGNBZ2VTY3JpcHRfRXh0ZW5zaW9uc0dyYXBoZW1lX0NsdXN0ZXJfQnJlYWtTZW50ZW5jZV9CcmVha1dvcmRfQnJlYWsAADAAAAA5AAAAQQAAAFoAAABfAAAAXwAAAGEAAAB6AAAAqgAAAKoAAAC1AAAAtQAAALoAAAC6AAAAwAAAANYAAADYAAAA9gAAAPgAAADBAgAAxgIAANECAADgAgAA5AIAAOwCAADsAgAA7gIAAO4CAAAAAwAAdAMAAHYDAAB3AwAAegMAAH0DAAB/AwAAfwMAAIYDAACGAwAA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WRsAALAbAAC5GwAAQBwAAEkcAABQHAAAWRwAACCmAAAppgAA0KgAANmoAAAAqQAACakAANCpAADZqQAA8KkAAPmpAABQqgAAWaoAAPCrAAD5qwAAEP8AABn/AACgBAEAqQQBADANAQA5DQEAZhABAG8QAQDwEAEA+RABADYRAQA/EQEA0BEBANkRAQDwEgEA+RIBAFAUAQBZFAEA0BQBANkUAQBQFgEAWRYBAMAWAQDJFgEAMBcBADkXAQDgGAEA6RgBAFAZAQBZGQEAUBwBAFkcAQBQHQEAWR0BAKAdAQCpHQEAUB8BAFkfAQBgagEAaWoBAMBqAQDJagEAUGsBAFlrAQDO1wEA/9cBAEDhAQBJ4QEA8OIBAPniAQDw5AEA+eQBAFDpAQBZ6QEA8PsBAPn7AQBhc3NpZ25lZGFzY2lpAAAAlOMRAGAAAAD9AQAAQAAAAEFTQ0lJQXNzaWduZWRBbnmU4xEAYAAAAAYCAAAuAAAAYWdlYWhleEFTQ0lJX0hleF9EaWdpdEFscGhhYmV0aWNhbHBoYWJldGljYXNjaWloZXhkaWdpdGJjQmlkaV9DbGFzc2JpZGljQmlkaV9Db250cm9sYmlkaWNsYXNzYmlkaWNvbnRyb2xiaWRpbUJpZGlfTWlycm9yZWRiaWRpbWlycm9yZWRiaWRpbWlycm9yaW5nZ2x5cGhCaWRpX01pcnJvcmluZ19HbHlwaGJpZGlwYWlyZWRicmFja2V0QmlkaV9QYWlyZWRfQnJhY2tldGJpZGlwYWlyZWRicmFja2V0dHlwZUJpZGlfUGFpcmVkX0JyYWNrZXRfVHlwZWJsa2JtZ2JwYmJwdGNhbm9uaWNhbGNvbWJpbmluZ2NsYXNzQ2Fub25pY2FsX0NvbWJpbmluZ19DbGFzc2Nhc2VkQ2FzZWRjYXNlZm9sZGluZ0Nhc2VfRm9sZGluZ2Nhc2VpZ25vcmFibGVDYXNlX0lnbm9yYWJsZWNjY2NlQ29tcG9zaXRpb25fRXhjbHVzaW9uY2hhbmdlc3doZW5jYXNlZm9sZGVkQ2hhbmdlc19XaGVuX0Nhc2Vmb2xkZWRjaGFuZ2Vzd2hlbmNhc2VtYXBwZWRDaGFuZ2VzX1doZW5fQ2FzZW1hcHBlZGNoYW5nZXN3aGVubG93ZXJjYXNlZENoYW5nZXNfV2hlbl9Mb3dlcmNhc2VkY2hhbmdlc3doZW5uZmtjY2FzZWZvbGRlZENoYW5nZXNfV2hlbl9ORktDX0Nhc2Vmb2xkZWRjaGFuZ2Vzd2hlbnRpdGxlY2FzZWRDaGFuZ2VzX1doZW5fVGl0bGVjYXNlZGNoYW5nZXN3aGVudXBwZXJjYXNlZENoYW5nZXNfV2hlbl9VcHBlcmNhc2VkY2ljamthY2NvdW50aW5nbnVtZXJpY2tBY2NvdW50aW5nTnVtZXJpY2Nqa2NvbXBhdGliaWxpdHl2YXJpYW50a0NvbXBhdGliaWxpdHlWYXJpYW50Y2praWljb3Jla0lJQ29yZWNqa2lyZ2dzb3VyY2VrSVJHX0dTb3VyY2Vjamtpcmdoc291cmNla0lSR19IU291cmNlY2praXJnanNvdXJjZWtJUkdfSlNvdXJjZWNqa2lyZ2twc291cmNla0lSR19LUFNvdXJjZWNqa2lyZ2tzb3VyY2VrSVJHX0tTb3VyY2Vjamtpcmdtc291cmNla0lSR19NU291cmNlY2praXJnc3NvdXJjZWtJUkdfU1NvdXJjZWNqa2lyZ3Rzb3VyY2VrSVJHX1RTb3VyY2Vjamtpcmd1a3NvdXJjZWtJUkdfVUtTb3VyY2Vjamtpcmd1c291cmNla0lSR19VU291cmNlY2praXJndnNvdXJjZWtJUkdfVlNvdXJjZWNqa290aGVybnVtZXJpY2tPdGhlck51bWVyaWNjamtwcmltYXJ5bnVtZXJpY2tQcmltYXJ5TnVtZXJpY2Nqa3JzdW5pY29kZWtSU1VuaWNvZGVjb21wZXhGdWxsX0NvbXBvc2l0aW9uX0V4Y2x1c2lvbmNvbXBvc2l0aW9uZXhjbHVzaW9uY3djZmN3Y21jd2tjZmN3bGN3dGN3dWRhc2hEYXNoZGVjb21wb3NpdGlvbm1hcHBpbmdEZWNvbXBvc2l0aW9uX01hcHBpbmdkZWNvbXBvc2l0aW9udHlwZURlY29tcG9zaXRpb25fVHlwZWRlZmF1bHRpZ25vcmFibGVjb2RlcG9pbnREZWZhdWx0X0lnbm9yYWJsZV9Db2RlX1BvaW50ZGVwRGVwcmVjYXRlZGRlcHJlY2F0ZWRkaWRpYURpYWNyaXRpY2RpYWNyaXRpY2RtZHRlYUVhc3RfQXNpYW5fV2lkdGhlYXN0YXNpYW53aWR0aGViYXNlRW1vamlfTW9kaWZpZXJfQmFzZWVjb21wRW1vamlfQ29tcG9uZW50ZW1vZEVtb2ppX01vZGlmaWVyZW1vamlFbW9qaWVtb2ppY29tcG9uZW50ZW1vamltb2RpZmllcmVtb2ppbW9kaWZpZXJiYXNlZW1vamlwcmVzZW50YXRpb25FbW9qaV9QcmVzZW50YXRpb25lcHJlc2VxdWlkZW9FcXVpdmFsZW50X1VuaWZpZWRfSWRlb2dyYXBoZXF1aXZhbGVudHVuaWZpZWRpZGVvZ3JhcGhleHBhbmRzb25uZmNFeHBhbmRzX09uX05GQ2V4cGFuZHNvbm5mZEV4cGFuZHNfT25fTkZEZXhwYW5kc29ubmZrY0V4cGFuZHNfT25fTkZLQ2V4cGFuZHNvbm5ma2RFeHBhbmRzX09uX05GS0RleHRFeHRlbmRlcmV4dGVuZGVkcGljdG9ncmFwaGljRXh0ZW5kZWRfUGljdG9ncmFwaGljZXh0ZW5kZXJleHRwaWN0ZmNuZmtjRkNfTkZLQ19DbG9zdXJlZmNuZmtjY2xvc3VyZWZ1bGxjb21wb3NpdGlvbmV4Y2x1c2lvbmdjZ2NiZ2VuZXJhbGNhdGVnb3J5Z3JhcGhlbWViYXNlR3JhcGhlbWVfQmFzZWdyYXBoZW1lY2x1c3RlcmJyZWFrZ3JhcGhlbWVleHRlbmRHcmFwaGVtZV9FeHRlbmRncmFwaGVtZWxpbmtHcmFwaGVtZV9MaW5rZ3JiYXNlZ3JleHRncmxpbmtoYW5ndWxzeWxsYWJsZXR5cGVIYW5ndWxfU3lsbGFibGVfVHlwZWhleEhleF9EaWdpdGhleGRpZ2l0aHN0aHlwaGVuSHlwaGVuaWRjSURfQ29udGludWVpZGNvbnRpbnVlaWRlb0lkZW9ncmFwaGljaWRlb2dyYXBoaWNpZHNJRF9TdGFydGlkc2JJRFNfQmluYXJ5X09wZXJhdG9yaWRzYmluYXJ5b3BlcmF0b3JpZHN0SURTX1RyaW5hcnlfT3BlcmF0b3JpZHN0YXJ0aWRzdHJpbmFyeW9wZXJhdG9yaW5kaWNwb3NpdGlvbmFsY2F0ZWdvcnlJbmRpY19Qb3NpdGlvbmFsX0NhdGVnb3J5aW5kaWNzeWxsYWJpY2NhdGVnb3J5SW5kaWNfU3lsbGFiaWNfQ2F0ZWdvcnlpbnBjaW5zY2lzY0lTT19Db21tZW50amFtb3Nob3J0bmFtZUphbW9fU2hvcnRfTmFtZWpnSm9pbmluZ19Hcm91cGpvaW5jSm9pbl9Db250cm9sam9pbmNvbnRyb2xqb2luaW5nZ3JvdXBqb2luaW5ndHlwZUpvaW5pbmdfVHlwZWpzbmp0a2FjY291bnRpbmdudW1lcmlja2NvbXBhdGliaWxpdHl2YXJpYW50a2lpY29yZWtpcmdnc291cmNla2lyZ2hzb3VyY2VraXJnanNvdXJjZWtpcmdrcHNvdXJjZWtpcmdrc291cmNla2lyZ21zb3VyY2VraXJnc3NvdXJjZWtpcmd0c291cmNla2lyZ3Vrc291cmNla2lyZ3Vzb3VyY2VraXJndnNvdXJjZWtvdGhlcm51bWVyaWNrcHJpbWFyeW51bWVyaWNrcnN1bmljb2RlbGJMaW5lX0JyZWFrTG93ZXJjYXNlX01hcHBpbmdsaW5lYnJlYWtsb2VMb2dpY2FsX09yZGVyX0V4Y2VwdGlvbmxvZ2ljYWxvcmRlcmV4Y2VwdGlvbmxvd2VyTG93ZXJjYXNlbG93ZXJjYXNlbG93ZXJjYXNlbWFwcGluZ21hdGhNYXRobmFOYW1lbmExVW5pY29kZV8xX05hbWVuYW1lYWxpYXNOYW1lX0FsaWFzbmNoYXJOb25jaGFyYWN0ZXJfQ29kZV9Qb2ludG5mY3FjTkZDX1F1aWNrX0NoZWNrbmZjcXVpY2tjaGVja25mZHFjTkZEX1F1aWNrX0NoZWNrbmZkcXVpY2tjaGVja25ma2NjYXNlZm9sZE5GS0NfQ2FzZWZvbGRuZmtjY2ZuZmtjcWNORktDX1F1aWNrX0NoZWNrbmZrY3F1aWNrY2hlY2tuZmtkcWNORktEX1F1aWNrX0NoZWNrbmZrZHF1aWNrY2hlY2tub25jaGFyYWN0ZXJjb2RlcG9pbnRudE51bWVyaWNfVHlwZW51bWVyaWN0eXBlbnVtZXJpY3ZhbHVlTnVtZXJpY19WYWx1ZW52b2FscGhhT3RoZXJfQWxwaGFiZXRpY29jb21tZW50b2RpT3RoZXJfRGVmYXVsdF9JZ25vcmFibGVfQ29kZV9Qb2ludG9ncmV4dE90aGVyX0dyYXBoZW1lX0V4dGVuZG9pZGNPdGhlcl9JRF9Db250aW51ZW9pZHNPdGhlcl9JRF9TdGFydG9sb3dlck90aGVyX0xvd2VyY2FzZW9tYXRoT3RoZXJfTWF0aG90aGVyYWxwaGFiZXRpY290aGVyZGVmYXVsdGlnbm9yYWJsZWNvZGVwb2ludG90aGVyZ3JhcGhlbWVleHRlbmRvdGhlcmlkY29udGludWVvdGhlcmlkc3RhcnRvdGhlcmxvd2VyY2FzZW90aGVybWF0aG90aGVydXBwZXJjYXNlT3RoZXJfVXBwZXJjYXNlb3VwcGVycGF0c3luUGF0dGVybl9TeW50YXhwYXR0ZXJuc3ludGF4cGF0dGVybndoaXRlc3BhY2VQYXR0ZXJuX1doaXRlX1NwYWNlcGF0d3NwY21QcmVwZW5kZWRfQ29uY2F0ZW5hdGlvbl9NYXJrcHJlcGVuZGVkY29uY2F0ZW5hdGlvbm1hcmtxbWFya1F1b3RhdGlvbl9NYXJrcXVvdGF0aW9ubWFya3JhZGljYWxSYWRpY2FscmVnaW9uYWxpbmRpY2F0b3JSZWdpb25hbF9JbmRpY2F0b3JyaXNic2NmU2ltcGxlX0Nhc2VfRm9sZGluZ3NjcmlwdHNjcmlwdGV4dGVuc2lvbnNzY3hzZFNvZnRfRG90dGVkc2VudGVuY2VicmVha3NlbnRlbmNldGVybWluYWxTZW50ZW5jZV9UZXJtaW5hbHNmY3NpbXBsZWNhc2Vmb2xkaW5nc2ltcGxlbG93ZXJjYXNlbWFwcGluZ1NpbXBsZV9Mb3dlcmNhc2VfTWFwcGluZ3NpbXBsZXRpdGxlY2FzZW1hcHBpbmdTaW1wbGVfVGl0bGVjYXNlX01hcHBpbmdzaW1wbGV1cHBlcmNhc2VtYXBwaW5nU2ltcGxlX1VwcGVyY2FzZV9NYXBwaW5nc2xjc29mdGRvdHRlZHNwYWNlV2hpdGVfU3BhY2VzdGNzdGVybXN1Y3RjVGl0bGVjYXNlX01hcHBpbmd0ZXJtVGVybWluYWxfUHVuY3R1YXRpb250ZXJtaW5hbHB1bmN0dWF0aW9udGl0bGVjYXNlbWFwcGluZ3VjVXBwZXJjYXNlX01hcHBpbmd1aWRlb1VuaWZpZWRfSWRlb2dyYXBodW5pY29kZTFuYW1ldW5pY29kZXJhZGljYWxzdHJva2V1bmlmaWVkaWRlb2dyYXBodXBwZXJVcHBlcmNh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AwAAAOUgEgAEAAAAY2FzZWRsZXR0ZXJDYXNlZF9MZXR0ZXJjY0NvbnRyb2xGb3JtYXRjbG9zZXB1bmN0dWF0aW9uQ2xvc2VfUHVuY3R1YXRpb25jbmNudHJsY29Qcml2YXRlX1VzZWNvbWJpbmluZ21hcmtjb25uZWN0b3JwdW5jdHVhdGlvbkNvbm5lY3Rvcl9QdW5jdHVhdGlvbmNvbnRyb2xjc1N1cnJvZ2F0ZWN1cnJlbmN5c3ltYm9sQ3VycmVuY3lfU3ltYm9sZGFzaHB1bmN0dWF0aW9uRGFzaF9QdW5jdHVhdGlvbmRlY2ltYWxudW1iZXJEZWNpbWFsX051bWJlcmRpZ2l0ZW5jbG9zaW5nbWFya0VuY2xvc2luZ19NYXJrZmluYWxwdW5jdHVhdGlvbkZpbmFsX1B1bmN0dWF0aW9uZm9ybWF0aW5pdGlhbHB1bmN0dWF0aW9uSW5pdGlhbF9QdW5jdHVhdGlvbmxMZXR0ZXJsZXR0ZXJsZXR0ZXJudW1iZXJMZXR0ZXJfTnVtYmVybGluZXNlcGFyYXRvckxpbmVfU2VwYXJhdG9ybGxMb3dlcmNhc2VfTGV0dGVybG1Nb2RpZmllcl9MZXR0ZXJsb090aGVyX0xldHRlcmxvd2VyY2FzZWxldHRlclRpdGxlY2FzZV9MZXR0ZXJsdVVwcGVyY2FzZV9MZXR0ZXJtbWFya21hdGhzeW1ib2xNYXRoX1N5bWJvbG1jU3BhY2luZ19NYXJrbWVtbk5vbnNwYWNpbmdfTWFya21vZGlmaWVybGV0dGVybW9kaWZpZXJzeW1ib2xNb2RpZmllcl9TeW1ib2xuZG5sbm9PdGhlcl9OdW1iZXJub25zcGFjaW5nbWFya29wZW5wdW5jdHVhdGlvbk9wZW5fUHVuY3R1YXRpb25vdGhlcm90aGVybGV0dGVyb3RoZXJudW1iZXJvdGhlcnB1bmN0dWF0aW9uT3RoZXJfUHVuY3R1YXRpb25vdGhlcnN5bWJvbE90aGVyX1N5bWJvbHBQdW5jdHVhdGlvbnBhcmFncmFwaHNlcGFyYXRvclBhcmFncmFwaF9TZXBhcmF0b3JwY3BkcGVwZnBvcHJpdmF0ZXVzZXBzcHVuY3RwdW5jdHVhdGlvbnNTeW1ib2xzZXBhcmF0b3JTZXBhcmF0b3Jza3Ntc29z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BQAAANAtEgACAAAA0i0SAAcAAADZLRIABwAAANItEgAHAAAAYg0SABEAAABzDRIAEgAAAIUNEgACAAAAcw0SABIAAAADKBIAAgAAAOAtEgALAAAAJCgSAAsAAADgLRIACwAAAOstEgABAAAA7C0SAAEAAADtLRIAAQAAAO4tEgABAAAA7y0SAAIAAACMGRYABQAAAEVEFgADAAAA8S0SAAMAAABhZGxhbUFkbGFtYWRsbWFnaGJDYXVjYXNpYW5fQWxiYW5pYW5haG9tQWhvbWFuYXRvbGlhbmhpZXJvZ2x5cGhzQW5hdG9saWFuX0hpZXJvZ2x5cGhzYXJhYkFyYWJpY2FyYWJpY2FybWVuaWFuQXJtZW5pYW5hcm1pSW1wZXJpYWxfQXJhbWFpY2FybW5hdmVzdGFuQXZlc3RhbmF2c3RiYWxpQmFsaW5lc2ViYWxpbmVzZWJhbXVCYW11bWJhbXVtYmFzc0Jhc3NhX1ZhaGJhc3NhdmFoYmF0YWtCYXRha2JhdGtiZW5nQmVuZ2FsaWJlbmdhbGliaGFpa3N1a2lCaGFpa3N1a2liaGtzYm9wb0JvcG9tb2ZvYm9wb21vZm9icmFoQnJhaG1pYnJhaG1pYnJhaUJyYWlsbGVicmFpbGxlYnVnaUJ1Z2luZXNlYnVnaW5lc2VidWhkQnVoaWRidWhpZGNha21DaGFrbWFjYW5hZGlhbmFib3JpZ2luYWxDYW5hZGlhbl9BYm9yaWdpbmFsY2Fuc2NhcmlDYXJpYW5jYXJpYW5jYXVjYXNpYW5hbGJhbmlhbmNoYWttYWNoYW1DaGFtY2hlckNoZXJva2VlY2hlcm9rZWVjaG9yYXNtaWFuQ2hvcmFzbWlhbmNocnNjb21tb25Db21tb25jb3B0Q29wdGljY29wdGljY3BtbkN5cHJvX01pbm9hbmNwcnRDeXByaW90Y3VuZWlmb3JtQ3VuZWlmb3JtY3lwcmlvdGN5cHJvbWlub2FuY3lyaWxsaWNDeXJpbGxpY2N5cmxkZXNlcmV0RGVzZXJldGRldmFEZXZhbmFnYXJpZGV2YW5hZ2FyaWRpYWtEaXZlc19Ba3VydWRpdmVzYWt1cnVkb2dyRG9ncmFkb2dyYWRzcnRkdXBsRHVwbG95YW5kdXBsb3lhbmVneXBFZ3lwdGlhbl9IaWVyb2dseXBoc2VneXB0aWFuaGllcm9nbHlwaHNlbGJhRWxiYXNhbmVsYmFzYW5lbHltRWx5bWFpY2VseW1haWNldGhpRXRoaW9waWNldGhpb3BpY2dlb3JHZW9yZ2lhbmdlb3JnaWFuZ2xhZ0dsYWdvbGl0aWNnbGFnb2xpdGljZ29uZ0d1bmphbGFfR29uZGlnb25tTWFzYXJhbV9Hb25kaWdvdGhHb3RoaWNnb3RoaWNncmFuR3JhbnRoYWdyYW50aGFncmVla0dyZWVrZ3Jla2d1amFyYXRpR3VqYXJhdGlndWpyZ3VuamFsYWdvbmRpZ3VybXVraGlHdXJtdWtoaWd1cnVoYW5IYW5oYW5nSGFuZ3VsaGFuZ3VsaGFuaWhhbmlmaXJvaGluZ3lhSGFuaWZpX1JvaGluZ3lhaGFub0hhbnVub29oYW51bm9vaGF0ckhhdHJhbmhhdHJhbmhlYnJIZWJyZXdoZWJyZXdoaXJhSGlyYWdhbmFoaXJhZ2FuYWhsdXdobW5nUGFoYXdoX0htb25naG1ucE55aWFrZW5nX1B1YWNodWVfSG1vbmdocmt0S2F0YWthbmFfT3JfSGlyYWdhbmFodW5nT2xkX0h1bmdhcmlhbmltcGVyaWFsYXJhbWFpY2luaGVyaXRlZEluaGVyaXRlZGluc2NyaXB0aW9uYWxwYWhsYXZpSW5zY3JpcHRpb25hbF9QYWhsYXZpaW5zY3JpcHRpb25hbHBhcnRoaWFuSW5zY3JpcHRpb25hbF9QYXJ0aGlhbml0YWxPbGRfSXRhbGljamF2YUphdmFuZXNlamF2YW5lc2VrYWl0aGlLYWl0aGlrYWxpS2F5YWhfTGlrYW5hS2F0YWthbmFrYW5uYWRhS2FubmFkYWthdGFrYW5ha2F0YWthbmFvcmhpcmFnYW5ha2F3aUthd2lrYXlhaGxpa2hhcktoYXJvc2h0aGlraGFyb3NodGhpa2hpdGFuc21hbGxzY3JpcHRLaGl0YW5fU21hbGxfU2NyaXB0a2htZXJLaG1lcmtobXJraG9qS2hvamtpa2hvamtpa2h1ZGF3YWRpS2h1ZGF3YWRpa2l0c2tuZGFrdGhpbGFuYVRhaV9UaGFtbGFvTGFvbGFvb2xhdGluTGF0aW5sYXRubGVwY0xlcGNoYWxlcGNoYWxpbWJMaW1idWxpbWJ1bGluYUxpbmVhcl9BbGluYkxpbmVhcl9CbGluZWFyYWxpbmVhcmJsaXN1TGlzdWx5Y2lMeWNpYW5seWNpYW5seWRpTHlkaWFubHlkaWFubWFoYWphbmlNYWhhamFuaW1haGptYWthTWFrYXNhcm1ha2FzYXJtYWxheWFsYW1NYWxheWFsYW1tYW5kTWFuZGFpY21hbmRhaWNtYW5pTWFuaWNoYWVhbm1hbmljaGFlYW5tYXJjTWFyY2hlbm1hcmNoZW5tYXNhcmFtZ29uZGltZWRlZmFpZHJpbk1lZGVmYWlkcmlubWVkZm1lZXRlaW1heWVrTWVldGVpX01heWVrbWVuZE1lbmRlX0tpa2FrdWltZW5kZWtpa2FrdWltZXJjTWVyb2l0aWNfQ3Vyc2l2ZW1lcm9NZXJvaXRpY19IaWVyb2dseXBoc21lcm9pdGljY3Vyc2l2ZW1lcm9pdGljaGllcm9nbHlwaHNtaWFvTWlhb21seW1tb2RpTW9kaW1vbmdNb25nb2xpYW5tb25nb2xpYW5tcm9Ncm9tcm9vbXRlaW11bHRNdWx0YW5pbXVsdGFuaW15YW5tYXJNeWFubWFybXltcm5hYmF0YWVhbk5hYmF0YWVhbm5hZ21OYWdfTXVuZGFyaW5hZ211bmRhcmluYW5kTmFuZGluYWdhcmluYW5kaW5hZ2FyaW5hcmJPbGRfTm9ydGhfQXJhYmlhbm5iYXRuZXdhTmV3YW5ld3RhaWx1ZU5ld19UYWlfTHVlbmtvTmtvbmtvb25zaHVOdXNodW51c2h1bnlpYWtlbmdwdWFjaHVlaG1vbmdvZ2FtT2doYW1vZ2hhbW9sY2hpa2lPbF9DaGlraW9sY2tvbGRodW5nYXJpYW5vbGRpdGFsaWNvbGRub3J0aGFyYWJpYW5vbGRwZXJtaWNPbGRfUGVybWljb2xkcGVyc2lhbk9sZF9QZXJzaWFub2xkc29nZGlhbk9sZF9Tb2dkaWFub2xkc291dGhhcmFiaWFuT2xkX1NvdXRoX0FyYWJpYW5vbGR0dXJraWNPbGRfVHVya2ljb2xkdXlnaHVyT2xkX1V5Z2h1cm9yaXlhT3JpeWFvcmtob3J5YW9zYWdlT3NhZ2Vvc2dlb3NtYU9zbWFueWFvc21hbnlhb3VncnBhaGF3aGhtb25ncGFsbVBhbG15cmVuZXBhbG15cmVuZXBhdWNQYXVfQ2luX0hhdXBhdWNpbmhhdXBlcm1waGFnUGhhZ3NfUGFwaGFnc3BhcGhsaXBobHBQc2FsdGVyX1BhaGxhdmlwaG54UGhvZW5pY2lhbnBob2VuaWNpYW5wbHJkcHJ0aXBzYWx0ZXJwYWhsYXZpcWFhY3FhYWlyZWphbmdSZWphbmdyam5ncm9oZ3J1bmljUnVuaWNydW5yc2FtYXJpdGFuU2FtYXJpdGFuc2FtcnNhcmJzYXVyU2F1cmFzaHRyYXNhdXJhc2h0cmFzZ253U2lnbldyaXRpbmdzaGFyYWRhU2hhcmFkYXNoYXZpYW5TaGF2aWFuc2hhd3NocmRzaWRkU2lkZGhhbXNpZGRoYW1zaWdud3JpdGluZ3NpbmRzaW5oU2luaGFsYXNpbmhhbGFzb2dkU29nZGlhbnNvZ2RpYW5zb2dvc29yYVNvcmFfU29tcGVuZ3NvcmFzb21wZW5nc295b1NveW9tYm9zb3lvbWJvc3VuZFN1bmRhbmVzZXN1bmRhbmVzZXN5bG9TeWxvdGlfTmFncmlzeWxvdGluYWdyaXN5cmNTeXJpYWNzeXJpYWN0YWdhbG9nVGFnYWxvZ3RhZ2JUYWdiYW53YXRhZ2JhbndhdGFpbGVUYWlfTGV0YWl0aGFtdGFpdmlldFRhaV9WaWV0dGFrclRha3JpdGFrcml0YWxldGFsdXRhbWlsVGFtaWx0YW1sdGFuZ1Rhbmd1dHRhbmdzYVRhbmdzYXRhbmd1dHRhdnR0ZWx1VGVsdWd1dGVsdWd1dGZuZ1RpZmluYWdodGdsZ3RoYWFUaGFhbmF0aGFhbmF0aGFpVGhhaXRpYmV0YW5UaWJldGFudGlidHRpZmluYWdodGlyaFRpcmh1dGF0aXJodXRhdG5zYXRvdG9Ub3RvdWdhclVnYXJpdGljdWdhcml0aWNVbmtub3dudmFpVmFpdmFpaXZpdGhWaXRoa3VxaXZpdGhrdXFpd2FuY2hvV2FuY2hvd2FyYVdhcmFuZ19DaXRpd2FyYW5nY2l0aXdjaG94cGVveHN1eHllemlZZXppZGl5ZXppZGl5aVlpeWlpaXphbmFiYXphcnNxdWFyZVphbmFiYXphcl9TcXVhcmV6YW5iemluaHp5eXl6enp6tC8SAAUAAAC5LxIABQAAAL4vEgAEAAAAuS8SAAUAAADCLxIABAAAAMYvEgASAAAA2C8SAAQAAADcLxIABAAAAOAvEgAUAAAA9C8SABUAAAAJMBIABAAAAA0wEgAGAAAAEzASAAYAAAANMBIABgAAABkwEgAIAAAAITASAAgAAAApMBIABAAAAC0wEgAQAAAAPTASAAQAAAAhMBIACAAAAEEwEgAHAAAASDASAAcAAABPMBIABAAAAEgwEgAHAAAAUzASAAQAAABXMBIACAAAAF8wEgAIAAAAVzASAAgAAABnMBIABAAAAGswEgAFAAAAcDASAAUAAABrMBIABQAAAHUwEgAEAAAAeTASAAkAAACCMBIACAAAAHkwEgAJAAAAijASAAUAAACPMBIABQAAAJQwEgAEAAAAjzASAAUAAACYMBIABAAAAJwwEgAHAAAAozASAAcAAACcMBIABwAAAKowEgAJAAAAszASAAkAAAC8MBIABAAAALMwEgAJAAAAwDASAAQAAADEMBIACAAAAMwwEgAIAAAAxDASAAgAAADUMBIABAAAANgwEgAGAAAA3jASAAYAAADYMBIABgAAAOQwEgAEAAAA6DASAAcAAADvMBIABwAAAOgwEgAHAAAA9jASAAQAAAD6MBIACAAAAAIxEgAIAAAA+jASAAgAAAAKMRIABAAAAA4xEgAFAAAAEzESAAUAAAAOMRIABQAAABgxEgAEAAAAHDESAAYAAAAiMRIAEgAAADQxEgATAAAARzESAAQAAAA0MRIAEwAAAEsxEgAEAAAATzESAAYAAABVMRIABgAAAE8xEgAGAAAAWzESABEAAADGLxIAEgAAAGwxEgAGAAAAHDESAAYAAAByMRIABAAAAHYxEgAEAAAAejESAAQAAAB+MRIACAAAAIYxEgAIAAAAfjESAAgAAACOMRIACgAAAJgxEgAKAAAAojESAAQAAACYMRIACgAAAKYxEgAGAAAArDESAAYAAACyMRIABAAAALYxEgAGAAAAvDESAAYAAAC2MRIABgAAAMIxEgAEAAAAxjESAAwAAADSMRIABAAAANYxEgAHAAAA3TESAAkAAADmMRIACQAAAO8xEgAHAAAA1jESAAcAAAD2MRIACwAAAMYxEgAMAAAAATISAAgAAAAJMhIACAAAABEyEgAEAAAACTISAAgAAAAVMhIABwAAABwyEgAHAAAAIzISAAQAAAAnMhIACgAAADEyEgAKAAAA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0R4AANMeAADTHgAA1R4AANUeAADXHgAA1x4AANkeAADZHgAA2x4AANseAADdHgAA3R4AAN8eAADfHgAA4R4AAOEeAADjHgAA4x4AAOUeAADlHgAA5x4AAOceAADpHgAA6R4AAOseAADrHgAA7R4AAO0eAADvHgAA7x4AAPEeAADxHgAA8x4AAPMeAAD1HgAA9R4AAPceAAD3HgAA+R4AAPkeAAD7HgAA+x4AAP0eAAD9HgAA/x4AAAcfAAAQHwAAFR8AACAfAAAnHwAAMB8AADcfAABAHwAARR8AAFAfAABXHwAAYB8AAGcfAABwHwAAfR8AAIAfAACHHwAAkB8AAJcfAACgHwAApx8AALAfAAC0HwAAth8AALcfAAC+HwAAvh8AAMIfAADEHwAAxh8AAMcfAADQHwAA0x8AANYfAADXHwAA4B8AAOcfAADyHwAA9B8AAPYfAAD3HwAACiEAAAohAAAOIQAADyEAABMhAAATIQAALyEAAC8hAAA0IQAANCEAADkhAAA5IQAAPCEAAD0hAABGIQAASSEAAE4hAABOIQAAhCEAAIQhAAAwLAAAXywAAGEsAABhLAAAZSwAAGYsAABoLAAAaCwAAGosAABqLAAAbCwAAGwsAABxLAAAcSwAAHMsAAB0LAAAdiwAAHssAACBLAAAgSwAAIMsAACDLAAAhSwAAIUsAACHLAAAhywAAIksAACJLAAAiywAAIssAACNLAAAjSwAAI8sAACPLAAAkSwAAJEsAACTLAAAkywAAJUsAACVLAAAlywAAJcsAACZLAAAmSwAAJssAACbLAAAnSwAAJ0sAACfLAAAnywAAKEsAAChLAAAoywAAKMsAAClLAAApSwAAKcsAACnLAAAqSwAAKksAACrLAAAqywAAK0sAACtLAAArywAAK8sAACxLAAAsSwAALMsAACzLAAAtSwAALUsAAC3LAAAtywAALksAAC5LAAAuywAALssAAC9LAAAvSwAAL8sAAC/LAAAwSwAAMEsAADDLAAAwywAAMUsAADFLAAAxywAAMcsAADJLAAAySwAAMssAADLLAAAzSwAAM0sAADPLAAAzywAANEsAADRLAAA0ywAANMsAADVLAAA1SwAANcsAADXLAAA2SwAANksAADbLAAA2ywAAN0sAADdLAAA3ywAAN8sAADhLAAA4SwAAOMsAADkLAAA7CwAAOwsAADuLAAA7iwAAPMsAADzLAAAAC0AACUtAAAnLQAAJy0AAC0tAAAtLQAAQaYAAEGmAABDpgAAQ6YAAEWmAABFpgAAR6YAAEemAABJpgAASaYAAEumAABLpgAATaYAAE2mAABPpgAAT6YAAFGmAABRpgAAU6YAAFOmAABVpgAAVaYAAFemAABXpgAAWaYAAFmmAABbpgAAW6YAAF2mAABdpgAAX6YAAF+mAABhpgAAYaYAAGOmAABjpgAAZaYAAGWmAABnpgAAZ6YAAGmmAABppgAAa6YAAGumAABtpgAAbaYAAIGmAACBpgAAg6YAAIOmAACFpgAAhaYAAIemAACHpgAAiaYAAImmAACLpgAAi6YAAI2mAACNpgAAj6YAAI+mAACRpgAAkaYAAJOmAACTpgAAlaYAAJWmAACXpgAAl6YAAJmmAACZpgAAm6YAAJumAAAjpwAAI6cAACWnAAAlpwAAJ6cAACenAAAppwAAKacAACunAAArpwAALacAAC2nAAAvpwAAMacAADOnAAAzpwAANacAADWnAAA3pwAAN6cAADmnAAA5pwAAO6cAADunAAA9pwAAPacAAD+nAAA/pwAAQacAAEGnAABDpwAAQ6cAAEWnAABFpwAAR6cAAEenAABJpwAASacAAEunAABLpwAATacAAE2nAABPpwAAT6cAAFGnAABRpwAAU6cAAFOnAABVpwAAVacAAFenAABXpwAAWacAAFmnAABbpwAAW6cAAF2nAABdpwAAX6cAAF+nAABhpwAAYacAAGOnAABjpwAAZacAAGWnAABnpwAAZ6cAAGmnAABppwAAa6cAAGunAABtpwAAbacAAG+nAABvpwAAcacAAHinAAB6pwAAeqcAAHynAAB8pwAAf6cAAH+nAACBpwAAgacAAIOnAACDpwAAhacAAIWnAACHpwAAh6cAAIynAACMpwAAjqcAAI6nAACRpwAAkacAAJOnAACVpwAAl6cAAJenAACZpwAAmacAAJunAACbpwAAnacAAJ2nAACfpwAAn6cAAKGnAAChpwAAo6cAAKOnAAClpwAApacAAKenAACnpwAAqacAAKmnAACvpwAAr6cAALWnAAC1pwAAt6cAALenAAC5pwAAuacAALunAAC7pwAAvacAAL2nAAC/pwAAv6cAAMGnAADBpwAAw6cAAMOnAADIpwAA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qQkAALEJAACxCQAAswkAALUJAAC6CQAAuwkAAMUJAADGCQAAyQkAAMoJAADPCQAA1gkAANgJAADbCQAA3gkAAN4JAADkCQAA5QkAAP8JAAAACgAABAoAAAQKAAALCgAADgoAABEKAAASCgAAKQoAACkKAAAxCgAAMQoAADQKAAA0CgAANwoAADcKAAA6CgAAOwoAAD0KAAA9CgAAQwoAAEYKAABJCgAASgoAAE4KAABQCgAAUgoAAFgKAABdCgAAXQoAAF8KAABlCgAAdwoAAIAKAACECgAAhAoAAI4KAACOCgAAkgoAAJIKAACpCgAAqQoAALEKAACxCgAAtAoAALQKAAC6CgAAuwoAAMYKAADGCgAAygoAAMoKAADOCgAAzwoAANEKAADfCgAA5AoAAOUKAADyCgAA+AoAAAALAAAACwAABAsAAAQLAAANCwAADgsAABELAAASCwAAKQsAACkLAAAxCwAAMQsAADQLAAA0CwAAOgsAADsLAABFCwAARgsAAEkLAABKCwAATgsAAFQLAABYCwAAWwsAAF4LAABeCwAAZAsAAGULAAB4CwAAgQsAAIQLAACECwAAiwsAAI0LAACRCwAAkQsAAJYLAACYCwAAmwsAAJsLAACdCwAAnQsAAKALAACiCwAApQsAAKcLAACrCwAArQsAALoLAAC9CwAAwwsAAMULAADJCwAAyQsAAM4LAADPCwAA0QsAANYLAADYCwAA5QsAAPsLAAD/CwAADQwAAA0MAAARDAAAEQwAACkMAAApDAAAOgwAADsMAABFDAAARQwAAEkMAABJDAAATgwAAFQMAABXDAAAVwwAAFsMAABcDAAAXgwAAF8MAABkDAAAZQwAAHAMAAB2DAAAjQwAAI0MAACRDAAAkQwAAKkMAACpDAAAtAwAALQMAAC6DAAAuwwAAMUMAADFDAAAyQwAAMkMAADODAAA1AwAANcMAADcDAAA3wwAAN8MAADkDAAA5QwAAPAMAADwDAAA9AwAAP8MAAANDQAADQ0AABENAAARDQAARQ0AAEUNAABJDQAASQ0AAFANAABTDQAAZA0AAGUNAACADQAAgA0AAIQNAACEDQAAlw0AAJkNAACyDQAAsg0AALwNAAC8DQAAvg0AAL8NAADHDQAAyQ0AAMsNAADODQAA1Q0AANUNAADXDQAA1w0AAOANAADlDQAA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FB4AABQeAAAWHgAAFh4AABgeAAAYHgAAGh4AABoeAAAcHgAAHB4AAB4eAAAeHgAAIB4AACAeAAAiHgAAIh4AACQeAAAkHgAAJh4AACYeAAAoHgAAKB4AACoeAAAqHgAALB4AACweAAAuHgAALh4AADAeAAAwHgAAMh4AADIeAAA0HgAANB4AADYeAAA2HgAAOB4AADgeAAA6HgAAOh4AADweAAA8HgAAPh4AAD4eAABAHgAAQB4AAEIeAABCHgAARB4AAEQeAABGHgAARh4AAEgeAABIHgAASh4AAEoeAABMHgAATB4AAE4eAABOHgAAUB4AAFAeAABSHgAAUh4AAFQeAABUHgAAVh4AAFYeAABYHgAAWB4AAFoeAABaHgAAXB4AAFweAABeHgAAXh4AAGAeAABgHgAAYh4AAGIeAABkHgAAZB4AAGYeAABmHgAAaB4AAGgeAABqHgAAah4AAGweAABsHgAAbh4AAG4eAABwHgAAcB4AAHIeAAByHgAAdB4AAHQeAAB2HgAAdh4AAHgeAAB4HgAAeh4AAHoeAAB8HgAAfB4AAH4eAAB+HgAAgB4AAIAeAACCHgAAgh4AAIQeAACEHgAAhh4AAIYeAACIHgAAiB4AAIoeAACKHgAAjB4AAIweAACOHgAAjh4AAJAeAACQHgAAkh4AAJIeAACUHgAAlB4AAJ4eAACeHgAAoB4AAKAeAACiHgAAoh4AAKQeAACkHgAAph4AAKYeAACoHgAAqB4AAKoeAACqHgAArB4AAKweAACuHgAArh4AALAeAACwHgAAsh4AALIeAAC0HgAAtB4AALYeAAC2HgAAuB4AALgeAAC6HgAAuh4AALweAAC8HgAAvh4AAL4eAADAHgAAwB4AAMIeAADCHgAAxB4AAMQeAADGHgAAxh4AAMgeAADIHgAAyh4AAMoeAADMHgAAzB4AAM4eAADOHgAA0B4AANAeAADSHgAA0h4AANQeAADUHgAA1h4AANYeAADYHgAA2B4AANoeAADaHgAA3B4AANweAADeHgAA3h4AAOAeAADgHgAA4h4AAOIeAADkHgAA5B4AAOYeAADmHgAA6B4AAOgeAADqHgAA6h4AAOweAADsHgAA7h4AAO4eAADwHgAA8B4AAPIeAADyHgAA9B4AAPQeAAD2HgAA9h4AAPgeAAD4HgAA+h4AAPoeAAD8HgAA/B4AAP4eAAD+HgAACB8AAA8fAAAYHwAAHR8AACgfAAAvHwAAOB8AAD8fAABIHwAATR8AAFkfAABZHwAAWx8AAFsfAABdHwAAXR8AAF8fAABfHwAAaB8AAG8fAAC4HwAAux8AAMgfAADLHwAA2B8AANsfAADoHwAA7B8AAPgfAAD7HwAAAiEAAAIhAAAHIQAAByEAAAshAAANIQAAECEAABIhAAAVIQAAFSEAABkhAAAdIQAAJCEAACQhAAAmIQAAJiEAACghAAAoIQAAKiEAAC0hAAAwIQAAMyEAAD4hAAA/IQAARSEAAEUhAACDIQAAgyEAAAAsAAAvLAAAYCwAAGAsAABiLAAAZCwAAGcsAABnLAAAaSwAAGksAABrLAAAaywAAG0sAABwLAAAciwAAHIsAAB1LAAAdSwAAH4sAACALAAAgiwAAIIsAACELAAAhCwAAIYsAACGLAAAiCwAAIgsAACKLAAAiiwAAIwsAACMLAAAjiwAAI4sAACQLAAAkCwAAJIsAACSLAAAlCwAAJQsAACWLAAAliwAAJgsAACYLAAAmiwAAJosAACcLAAAnCwAAJ4sAACeLAAAoCwAAKAsAACiLAAAoiwAAKQsAACkLAAApiwAAKYsAACoLAAAqCwAAKosAACqLAAArCwAAKwsAACuLAAAriwAALAsAACwLAAAsiwAALIsAAC0LAAAtCwAALYsAAC2LAAAuCwAALgsAAC6LAAAuiwAALwsAAC8LAAAviwAAL4sAADALAAAwCwAAMIsAADCLAAAxCwAAMQsAADGLAAAxiwAAMgsAADILAAAyiwAAMosAADMLAAAzCwAAM4sAADOLAAA0CwAANAsAADSLAAA0iwAANQsAADULAAA1iwAANYsAADYLAAA2CwAANosAADaLAAA3CwAANwsAADeLAAA3iwAAOAsAADgLAAA4iwAAOIsAADrLAAA6ywAAO0sAADtLAAA8iwAAPIsAABApgAAQKYAAEKmAABCpgAARKYAAESmAABGpgAARqYAAEimAABIpgAASqYAAEqmAABMpgAATKYAAE6mAABOpgAAUKYAAFCmAABSpgAAUqYAAFSmAABUpgAAVqYAAFamAABYpgAAWKYAAFqmAABapgAAXKYAAFymAABepgAAXqYAAGCmAABgpgAAYqYAAGKmAABkpgAAZKYAAGamAABmpgAAaKYAAGimAABqpgAAaqYAAGymAABspgAAgKYAAICmAACCpgAAgqYAAISmAACEpgAAhqYAAIamAACIpgAAiKYAAIqmAACKpgAAjKYAAIymAACOpgAAjqYAAJCmAACQpgAAkqYAAJKmAACUpgAAlKYAAJamAACWpgAAmKYAAJimAACapgAAmqYAACKnAAAipwAAJKcAACSnAAAmpwAAJqcAACinAAAopwAAKqcAACqnAAAspwAALKcAAC6nAAAupwAAMqcAADKnAAA0pwAANKcAADanAAA2pwAAOKcAADinAAA6pwAAOqcAADynAAA8pwAAPqcAAD6nAABApwAAQKcAAEKnAABCpwAARKcAAESnAABGpwAARqcAAEinAABIpwAASqcAAEqnAABMpwAATKcAAE6nAABOpwAAUKcAAFCnAABSpwAAUqcAAFSnAABUpwAAVqcAAFanAABYpwAAWKcAAFqnAABapwAAXKcAAFynAABepwAAXqcAAGCnAABgpwAAYqcAAGKnAABkpwAAZKcAAGanAABmpwAAaKcAAGinAABqpwAAaqcAAGynAABspwAAbqcAAG6nAAB5pwAAeacAAHunAAB7pwAAfacAAH6nAACApwAAgKcAAIKnAACCpwAAhKcAAISnAACGpwAAhqcAAIunAACLpwAAjacAAI2nAACQpwAAkKcAAJKnAACSpwAAlqcAAJanAACYpwAAmKcAAJqnAACapwAAnKcAAJynAACepwAAnqcAAKCnAACgpwAAoqcAAKKnAACkpwAApKcAAKanAACmpwAAqKcAAKinAACqpwAArqcAALCnAAC0pwAAtqcAALanAAC4pwAAuKcAALqnAAC6pwAAvKcAALynAAC+pwAAvqcAAMCnAADApwAAwqcAAMKnAADEpwAAx6cAAMmnAADJpwAA0KcAANCnAADWpwAA1qcAANinAADYpwAA9acAAPWnAAAh/wAAOv8AAAAEAQAnBAEAsAQBANMEAQBwBQEAegUBAHwFAQCKBQEAjAUBAJIFAQCUBQEAlQUBAIAMAQCyDAEAoBgBAL8YAQBAbgEAX24BAADUAQAZ1AEANNQBAE3UAQBo1AEAgdQBAJzUAQCc1AEAntQBAJ/UAQCi1AEAotQBAKXUAQCm1AEAqdQBAKzUAQCu1AEAtdQBANDUAQDp1AEABNUBAAXVAQAH1QEA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ZQkAAAANAAAMDQAADg0AABANAAASDQAARA0AAEYNAABIDQAASg0AAE8NAABUDQAAYw0AAGYNAAB/DQAA2hwAANocAAAwqAAAMqgAAEAGAABABgAAQAgAAFsIAABeCAAAXggAAEAGAABABgAAwAoBAOYKAQDrCgEA9goBAGQJAABlCQAAAB0BAAYdAQAIHQEACR0BAAsdAQA2HQEAOh0BADodAQA8HQEAPR0BAD8dAQBHHQEAUB0BAFkdAQAwqAAAOagAAAAWAQBEFgEAUBYBAFkWAQAAGAAAGRgAACAYAAB4GAAAgBgAAKoYAAAvIAAALyAAAGAWAQBsFgEAZgoAAG8KAACAEgEAhhIBAIgSAQCIEgEAihIBAI0SAQCPEgEAnRIBAJ8SAQCpEgEAABAAAJ8QAAAuqQAALqkAAOCpAAD+qQAAYKoAAH+qAABkCQAAZQkAAOYMAADvDAAA6RwAAOkcAADyHAAA8hwAAPocAAD6HAAAMKgAADWoAACgGQEApxkBAKoZAQDXGQEA2hkBAOQZAQAMBgAADAYAABsGAAAbBgAAHwYAAB8GAADABwAA+gcAAP0HAAD/BwAAPv0AAD/9AACDBAAAgwQAAFADAQB6AwEAQAYAAEAGAADyCgEA8goBAHAPAQCJDwEAUQkAAFIJAABkCQAAZQkAAAELAAADCwAABQsAAAwLAAAPCwAAEAsAABMLAAAoCwAAKgsAADALAAAyCwAAMwsAADULAAA5CwAAPAsAAEQLAABHCwAASAsAAEsLAABNCwAAVQsAAFcLAABcCwAAXQsAAF8LAABjCwAAZgsAAHcLAADaHAAA2hwAAPIcAADyHAAAAhgAAAMYAAAFGAAABRgAAECoAAB3qAAAQAYAAEAGAACACwEAkQsBAJkLAQCcCwEAqQsBAK8LAQBRCQAAUQkAANccAADXHAAA2RwAANkcAADcHAAA3RwAAOAcAADgHAAAgBEBAN8RAQBkCQAAZQkAAIENAACDDQAAhQ0AAJYNAACaDQAAsQ0AALMNAAC7DQAAvQ0AAL0NAADADQAAxg0AAMoNAADKDQAAzw0AANQNAADWDQAA1g0AANgNAADfDQAA5g0AAO8NAADyDQAA9A0AAOERAQD0EQEAQAYAAEAGAAAwDwEAWQ8BAGQJAABlCQAA5gkAAO8JAAAAqAAALKgAAAwGAAAMBgAA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yh4AAMoeAADMHgAAzB4AAM4eAADOHgAA0B4AANAeAADSHgAA0h4AANQeAADUHgAA1h4AANYeAADYHgAA2B4AANoeAADaHgAA3B4AANweAADeHgAA3h4AAOAeAADgHgAA4h4AAOIeAADkHgAA5B4AAOYeAADmHgAA6B4AAOgeAADqHgAA6h4AAOweAADsHgAA7h4AAO4eAADwHgAA8B4AAPIeAADyHgAA9B4AAPQeAAD2HgAA9h4AAPgeAAD4HgAA+h4AAPoeAAD8HgAA/B4AAP4eAAD+HgAACB8AAA8fAAAYHwAAHR8AACgfAAAvHwAAOB8AAD8fAABIHwAATR8AAFkfAABZHwAAWx8AAFsfAABdHwAAXR8AAF8fAABfHwAAaB8AAG8fAACAHwAArx8AALIfAAC0HwAAtx8AALwfAADCHwAAxB8AAMcfAADMHwAA2B8AANsfAADoHwAA7B8AAPIfAAD0HwAA9x8AAPwfAAAmIQAAJiEAACohAAArIQAAMiEAADIhAABgIQAAbyEAAIMhAACDIQAAtiQAAM8kAAAALAAALywAAGAsAABgLAAAYiwAAGQsAABnLAAAZywAAGksAABpLAAAaywAAGssAABtLAAAcCwAAHIsAAByLAAAdSwAAHUsAAB+LAAAgCwAAIIsAACCLAAAhCwAAIQsAACGLAAAhiwAAIgsAACILAAAiiwAAIosAACMLAAAjCwAAI4sAACOLAAAkCwAAJAsAACSLAAAkiwAAJQsAACULAAAliwAAJYsAACYLAAAmCwAAJosAACaLAAAnCwAAJwsAACeLAAAniwAAKAsAACgLAAAoiwAAKIsAACkLAAApCwAAKYsAACmLAAAqCwAAKgsAACqLAAAqiwAAKwsAACsLAAAriwAAK4sAACwLAAAsCwAALIsAACyLAAAtCwAALQsAAC2LAAAtiwAALgsAAC4LAAAuiwAALosAAC8LAAAvCwAAL4sAAC+LAAAwCwAAMAsAADCLAAAwiwAAMQsAADELAAAxiwAAMYsAADILAAAyCwAAMosAADKLAAAzCwAAMwsAADOLAAAziwAANAsAADQLAAA0iwAANIsAADULAAA1CwAANYsAADWLAAA2CwAANgsAADaLAAA2iwAANwsAADcLAAA3iwAAN4sAADgLAAA4CwAAOIsAADiLAAA6ywAAOssAADtLAAA7SwAAPIsAADyLAAAQKYAAECmAABCpgAAQqYAAESmAABEpgAARqYAAEamAABIpgAASKYAAEqmAABKpgAATKYAAEymAABOpgAATqYAAFCmAABQpgAAUqYAAFKmAABUpgAAVKYAAFamAABWpgAAWKYAAFimAABapgAAWqYAAFymAABcpgAAXqYAAF6mAABgpgAAYKYAAGKmAABipgAAZKYAAGSmAABmpgAAZqYAAGimAABopgAAaqYAAGqmAABspgAAbKYAAICmAACApgAAgqYAAIKmAACEpgAAhKYAAIamAACGpgAAiKYAAIimAACKpgAAiqYAAIymAACMpgAAjqYAAI6mAACQpgAAkKYAAJKmAACSpgAAlKYAAJSmAACWpgAAlqYAAJimAACYpgAAmqYAAJqmAAAipwAAIqcAACSnAAAkpwAAJqcAACanAAAopwAAKKcAACqnAAAqpwAALKcAACynAAAupwAALqcAADKnAAAypwAANKcAADSnAAA2pwAANqcAADinAAA4pwAAOqcAADqnAAA8pwAAPKcAAD6nAAA+pwAAQKcAAECnAABCpwAAQqcAAESnAABEpwAARqcAAEanAABIpwAASKcAAEqnAABKpwAATKcAAEynAABOpwAATqcAAFCnAABQpwAAUqcAAFKnAABUpwAAVKcAAFanAABWpwAAWKcAAFinAABapwAAWqcAAFynAABcpwAAXqcAAF6nAABgpwAAYKcAAGKnAABipwAAZKcAAGSnAABmpwAAZqcAAGinAABopwAAaqcAAGqnAABspwAAbKcAAG6nAABupwAAeacAAHmnAAB7pwAAe6cAAH2nAAB+pwAAgKcAAICnAACCpwAAgqcAAISnAACEpwAAhqcAAIanAACLpwAAi6cAAI2nAACNpwAAkKcAAJCnAACSpwAAkqcAAJanAACWpwAAmKcAAJinAACapwAAmqcAAJynAACcpwAAnqcAAJ6nAACgpwAAoKcAAKKnAACipwAApKcAAKSnAACmpwAApqcAAKinAACopwAAqqcAAK6nAACwpwAAtKcAALanAAC2pwAAuKcAALinAAC6pwAAuqcAALynAAC8pwAAvqcAAL6nAADApwAAwKcAAMKnAADCpwAAxKcAAMenAADJpwAAyacAANCnAADQpwAA1qcAANanAADYpwAA2KcAAPWnAAD1pwAA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OB4AADgeAAA6HgAAOh4AADweAAA8HgAAPh4AAD4eAABAHgAAQB4AAEIeAABCHgAARB4AAEQeAABGHgAARh4AAEgeAABIHgAASh4AAEoeAABMHgAATB4AAE4eAABOHgAAUB4AAFAeAABSHgAAUh4AAFQeAABUHgAAVh4AAFYeAABYHgAAWB4AAFoeAABaHgAAXB4AAFweAABeHgAAXh4AAGAeAABgHgAAYh4AAGIeAABkHgAAZB4AAGYeAABmHgAAaB4AAGgeAABqHgAAah4AAGweAABsHgAAbh4AAG4eAABwHgAAcB4AAHIeAAByHgAAdB4AAHQeAAB2HgAAdh4AAHgeAAB4HgAAeh4AAHoeAAB8HgAAfB4AAH4eAAB+HgAAgB4AAIAeAACCHgAAgh4AAIQeAACEHgAAhh4AAIYeAACIHgAAiB4AAIoeAACKHgAAjB4AAIweAACOHgAAjh4AAJAeAACQHgAAkh4AAJIeAACUHgAAlB4AAJ4eAACeHgAAoB4AAKAeAACiHgAAoh4AAKQeAACkHgAAph4AAKYeAACoHgAAqB4AAKoeAACqHgAArB4AAKweAACuHgAArh4AALAeAACwHgAAsh4AALIeAAC0HgAAtB4AALYeAAC2HgAAuB4AALgeAAC6HgAAuh4AALweAAC8HgAAvh4AAL4eAADAHgAAwB4AAMIeAADCHgAAxB4AAMQeAADGHgAAxh4AAMgeAADIHgAAyh4AAMoeAADMHgAAzB4AAM4eAADOHgAA0B4AANAeAADSHgAA0h4AANQeAADUHgAA1h4AANYeAADYHgAA2B4AANoeAADaHgAA3B4AANweAADeHgAA3h4AAOAeAADgHgAA4h4AAOIeAADkHgAA5B4AAOYeAADmHgAA6B4AAOgeAADqHgAA6h4AAOweAADsHgAA7h4AAO4eAADwHgAA8B4AAPIeAADyHgAA9B4AAPQeAAD2HgAA9h4AAPgeAAD4HgAA+h4AAPoeAAD8HgAA/B4AAP4eAAD+HgAACB8AAA8fAAAYHwAAHR8AACgfAAAvHwAAOB8AAD8fAABIHwAATR8AAFkfAABZHwAAWx8AAFsfAABdHwAAXR8AAF8fAABfHwAAaB8AAG8fAACIHwAAjx8AAJgfAACfHwAAqB8AAK8fAAC4HwAAvB8AAMgfAADMHwAA2B8AANsfAADoHwAA7B8AAPgfAAD8HwAAJiEAACYhAAAqIQAAKyEAADIhAAAyIQAAYCEAAG8hAACDIQAAgyEAALYkAADPJAAAACwAAC8sAABgLAAAYCwAAGIsAABkLAAAZywAAGcsAABpLAAAaSwAAGssAABrLAAAbSwAAHAsAAByLAAAciwAAHUsAAB1LAAAfiwAAIAsAACCLAAAgiwAAIQsAACELAAAhiwAAIYsAACILAAAiCwAAIosAACKLAAAjCwAAIwsAACOLAAAjiwAAJAsAACQLAAAkiwAAJIsAACULAAAlCwAAJYsAACWLAAAmCwAAJgsAACaLAAAmiwAAJwsAACcLAAAniwAAJ4sAACgLAAAoCwAAKIsAACiLAAApCwAAKQsAACmLAAApiwAAKgsAACoLAAAqiwAAKosAACsLAAArCwAAK4sAACuLAAAsCwAALAsAACyLAAAsiwAALQsAAC0LAAAtiwAALYsAAC4LAAAuCwAALosAAC6LAAAvCwAALwsAAC+LAAAviwAAMAsAADALAAAwiwAAMIsAADELAAAxCwAAMYsAADGLAAAyCwAAMgsAADKLAAAyiwAAMwsAADMLAAAziwAAM4sAADQLAAA0CwAANIsAADSLAAA1CwAANQsAADWLAAA1iwAANgsAADYLAAA2iwAANosAADcLAAA3CwAAN4sAADeLAAA4CwAAOAsAADiLAAA4iwAAOssAADrLAAA7SwAAO0sAADyLAAA8iwAAECmAABApgAAQqYAAEKmAABEpgAARKYAAEamAABGpgAASKYAAEimAABKpgAASqYAAEymAABMpgAATqYAAE6mAABQpgAAUKYAAFKmAABSpgAAVKYAAFSmAABWpgAAVqYAAFimAABYpgAAWqYAAFqmAABcpgAAXKYAAF6mAABepgAAYKYAAGCmAABipgAAYqYAAGSmAABkpgAAZqYAAGamAABopgAAaKYAAGqmAABqpgAAbKYAAGymAACApgAAgKYAAIKmAACCpgAAhKYAAISmAACGpgAAhqYAAIimAACIpgAAiqYAAIqmAACMpgAAjKYAAI6mAACOpgAAkKYAAJCmAACSpgAAkqYAAJSmAACUpgAAlqYAAJamAACYpgAAmKYAAJqmAACapgAAIqcAACKnAAAkpwAAJKcAACanAAAmpwAAKKcAACinAAAqpwAAKqcAACynAAAspwAALqcAAC6nAAAypwAAMqcAADSnAAA0pwAANqcAADanAAA4pwAAOKcAADqnAAA6pwAAPKcAADynAAA+pwAAPqcAAECnAABApwAAQqcAAEKnAABEpwAARKcAAEanAABGpwAASKcAAEinAABKpwAASqcAAEynAABMpwAATqcAAE6nAABQpwAAUKcAAFKnAABSpwAAVKcAAFSnAABWpwAAVqcAAFinAABYpwAAWqcAAFqnAABcpwAAXKcAAF6nAABepwAAYKcAAGCnAABipwAAYqcAAGSnAABkpwAAZqcAAGanAABopwAAaKcAAGqnAABqpwAAbKcAAGynAABupwAAbqcAAHmnAAB5pwAAe6cAAHunAAB9pwAAfqcAAICnAACApwAAgqcAAIKnAACEpwAAhKcAAIanAACGpwAAi6cAAIunAACNpwAAjacAAJCnAACQpwAAkqcAAJKnAACWpwAAlqcAAJinAACYpwAAmqcAAJqnAACcpwAAnKcAAJ6nAACepwAAoKcAAKCnAACipwAAoqcAAKSnAACkpwAApqcAAKanAACopwAAqKcAAKqnAACupwAAsKcAALSnAAC2pwAAtqcAALinAAC4pwAAuqcAALqnAAC8pwAAvKcAAL6nAAC+pwAAwKcAAMCnAADCpwAAwqcAAMSnAADHpwAAyacAAMmnAADQpwAA0KcAANanAADWpwAA2KcAANinAAD1pwAA9acAACH/AAA6/wAAAAQBACcEAQCwBAEA0wQBAHAFAQB6BQEAfAUBAIoFAQCMBQEAkgUBAJQFAQCVBQEAgAwBALIMAQCgGAEAvxgBAEBuAQBfbgEAAOkBACHpAQBhAAAAegAAALUAAAC1AAAA3wAAAPYAAAD4AAAA/wAAAAEBAAABAQAAAwEAAAMBAAAFAQAABQEAAAcBAAAHAQAACQEAAAkBAAALAQAACwEAAA0BAAANAQAADwEAAA8BAAARAQAAEQEAABMBAAATAQAAFQEAABUBAAAXAQAAFwEAABkBAAAZAQAAGwEAABsBAAAdAQAAHQEAAB8BAAAfAQAAIQEAACEBAAAjAQAAIwEAACUBAAAlAQAAJwEAACcBAAApAQAAKQEAACsBAAArAQAALQEAAC0BAAAvAQAALwEAADEBAAAxAQAAMwEAADMBAAA1AQAANQEAADcBAAA3AQAAOgEAADoBAAA8AQAA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qx4AAKseAACtHgAArR4AAK8eAACvHgAAsR4AALEeAACzHgAAsx4AALUeAAC1HgAAtx4AALceAAC5HgAAuR4AALseAAC7HgAAvR4AAL0eAAC/HgAAvx4AAMEeAADBHgAAwx4AAMMeAADFHgAAxR4AAMceAADHHgAAyR4AAMkeAADLHgAAyx4AAM0eAADNHgAAzx4AAM8eAADRHgAA0R4AANMeAADTHgAA1R4AANUeAADXHgAA1x4AANkeAADZHgAA2x4AANseAADdHgAA3R4AAN8eAADfHgAA4R4AAOEeAADjHgAA4x4AAOUeAADlHgAA5x4AAOceAADpHgAA6R4AAOseAADrHgAA7R4AAO0eAADvHgAA7x4AAPEeAADxHgAA8x4AAPMeAAD1HgAA9R4AAPceAAD3HgAA+R4AAPkeAAD7HgAA+x4AAP0eAAD9HgAA/x4AAAcfAAAQHwAAFR8AACAfAAAnHwAAMB8AADcfAABAHwAARR8AAFAfAABXHwAAYB8AAGcfAABwHwAAfR8AAIAfAACHHwAAkB8AAJcfAACgHwAApx8AALAfAAC0HwAAth8AALcfAAC+HwAAvh8AAMIfAADEHwAAxh8AAMcfAADQHwAA0x8AANYfAADXHwAA4B8AAOcfAADyHwAA9B8AAPYfAAD3HwAATiEAAE4hAABwIQAAfyEAAIQhAACEIQAA0CQAAOkkAAAwLAAAXywAAGEsAABhLAAAZSwAAGYsAABoLAAAaCwAAGosAABqLAAAbCwAAGwsAABzLAAAcywAAHYsAAB2LAAAgSwAAIEsAACDLAAAgywAAIUsAACFLAAAhywAAIcsAACJLAAAiSwAAIssAACLLAAAjSwAAI0sAACPLAAAjywAAJEsAACRLAAAkywAAJMsAACVLAAAlSwAAJcsAACXLAAAmSwAAJksAACbLAAAmywAAJ0sAACdLAAAnywAAJ8sAAChLAAAoSwAAKMsAACjLAAApSwAAKUsAACnLAAApywAAKksAACpLAAAqywAAKssAACtLAAArSwAAK8sAACvLAAAsSwAALEsAACzLAAAsywAALUsAAC1LAAAtywAALcsAAC5LAAAuSwAALssAAC7LAAAvSwAAL0sAAC/LAAAvywAAMEsAADBLAAAwywAAMMsAADFLAAAxSwAAMcsAADHLAAAySwAAMksAADLLAAAyywAAM0sAADNLAAAzywAAM8sAADRLAAA0SwAANMsAADTLAAA1SwAANUsAADXLAAA1ywAANksAADZLAAA2ywAANssAADdLAAA3SwAAN8sAADfLAAA4SwAAOEsAADjLAAA4ywAAOwsAADsLAAA7iwAAO4sAADzLAAA8ywAAAAtAAAlLQAAJy0AACctAAAtLQAALS0AAEGmAABBpgAAQ6YAAEOmAABFpgAARaYAAEemAABHpgAASaYAAEmmAABLpgAAS6YAAE2mAABNpgAAT6YAAE+mAABRpgAAUaYAAFOmAABTpgAAVaYAAFWmAABXpgAAV6YAAFmmAABZpgAAW6YAAFumAABdpgAAXaYAAF+mAABfpgAAYaYAAGGmAABjpgAAY6YAAGWmAABlpgAAZ6YAAGemAABppgAAaaYAAGumAABrpgAAbaYAAG2mAACBpgAAgaYAAIOmAACDpgAAhaYAAIWmAACHpgAAh6YAAImmAACJpgAAi6YAAIumAACNpgAAjaYAAI+mAACPpgAAkaYAAJGmAACTpgAAk6YAAJWmAACVpgAAl6YAAJemAACZpgAAmaYAAJumAACbpgAAI6cAACOnAAAlpwAAJacAACenAAAnpwAAKacAACmnAAArpwAAK6cAAC2nAAAtpwAAL6cAAC+nAAAzpwAAM6cAADWnAAA1pwAAN6cAADenAAA5pwAAOacAADunAAA7pwAAPacAAD2nAAA/pwAAP6cAAEGnAABBpwAAQ6cAAEOnAABFpwAARacAAEenAABHpwAASacAAEmnAABLpwAAS6cAAE2nAABNpwAAT6cAAE+nAABRpwAAUacAAFOnAABTpwAAVacAAFWnAABXpwAAV6cAAFmnAABZpwAAW6cAAFunAABdpwAAXacAAF+nAABfpwAAYacAAGGnAABjpwAAY6cAAGWnAABlpwAAZ6cAAGenAABppwAAaacAAGunAABrpwAAbacAAG2nAABvpwAAb6cAAHqnAAB6pwAAfKcAAHynAAB/pwAAf6cAAIGnAACBpwAAg6cAAIOnAACFpwAAhacAAIenAACHpwAAjKcAAIynAACRpwAAkacAAJOnAACUpwAAl6cAAJenAACZpwAAmacAAJunAACbpwAAnacAAJ2nAACfpwAAn6cAAKGnAAChpwAAo6cAAKOnAAClpwAApacAAKenAACnpwAA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Hx4AACEeAAAhHgAAIx4AACMeAAAlHgAAJR4AACceAAAnHgAAKR4AACkeAAArHgAAKx4AAC0eAAAtHgAALx4AAC8eAAAxHgAAMR4AADMeAAAzHgAANR4AADUeAAA3HgAANx4AADkeAAA5HgAAOx4AADseAAA9HgAAPR4AAD8eAAA/HgAAQR4AAEEeAABDHgAAQx4AAEUeAABFHgAARx4AAEceAABJHgAASR4AAEseAABLHgAATR4AAE0eAABPHgAATx4AAFEeAABRHgAAUx4AAFMeAABVHgAAVR4AAFceAABXHgAAWR4AAFkeAABbHgAAWx4AAF0eAABdHgAAXx4AAF8eAABhHgAAYR4AAGMeAABjHgAAZR4AAGUeAABnHgAAZx4AAGkeAABpHgAAax4AAGseAABtHgAAbR4AAG8eAABvHgAAcR4AAHEeAABzHgAAcx4AAHUeAAB1HgAAdx4AAHceAAB5HgAAeR4AAHseAAB7HgAAfR4AAH0eAAB/HgAAfx4AAIEeAACBHgAAgx4AAIMeAACFHgAAhR4AAIceAACHHgAAiR4AAIkeAACLHgAAix4AAI0eAACNHgAAjx4AAI8eAACRHgAAkR4AAJMeAACTHgAAlR4AAJseAAChHgAAoR4AAKMeAACjHgAApR4AAKUeAACnHgAApx4AAKkeAACpHgAAqx4AAKseAACtHgAArR4AAK8eAACvHgAAsR4AALEeAACzHgAAsx4AALUeAAC1HgAAtx4AALceAAC5HgAAuR4AALseAAC7HgAAvR4AAL0eAAC/HgAAvx4AAMEeAADBHgAAwx4AAMMeAADFHgAAxR4AAMceAADHHgAAyR4AAMkeAADLHgAAyx4AAM0eAADNHgAAzx4AAM8eAADRHgAA0R4AANMeAADTHgAA1R4AANUeAADXHgAA1x4AANkeAADZHgAA2x4AANseAADdHgAA3R4AAN8eAADfHgAA4R4AAOEeAADjHgAA4x4AAOUeAADlHgAA5x4AAOceAADpHgAA6R4AAOseAADrHgAA7R4AAO0eAADvHgAA7x4AAPEeAADxHgAA8x4AAPMeAAD1HgAA9R4AAPceAAD3HgAA+R4AAPkeAAD7HgAA+x4AAP0eAAD9HgAA/x4AAAcfAAAQHwAAFR8AACAfAAAnHwAAMB8AADcfAABAHwAARR8AAFAfAABXHwAAYB8AAGcfAABwHwAAfR8AAIAfAAC0HwAAth8AALcfAAC8HwAAvB8AAL4fAAC+HwAAwh8AAMQfAADGHwAAxx8AAMwfAADMHwAA0B8AANMfAADWHwAA1x8AAOAfAADnHwAA8h8AAPQfAAD2HwAA9x8AAPwfAAD8HwAATiEAAE4hAABwIQAAfyEAAIQhAACEIQAA0CQAAOkkAAAwLAAAXywAAGEsAABhLAAAZSwAAGYsAABoLAAAaCwAAGosAABqLAAAbCwAAGwsAABzLAAAcywAAHYsAAB2LAAAgSwAAIEsAACDLAAAgywAAIUsAACFLAAAhywAAIcsAACJLAAAiSwAAIssAACLLAAAjSwAAI0sAACPLAAAjywAAJEsAACRLAAAkywAAJMsAACVLAAAlSwAAJcsAACXLAAAmSwAAJksAACbLAAAmywAAJ0sAACdLAAAnywAAJ8sAAChLAAAoSwAAKMsAACjLAAApSwAAKUsAACnLAAApywAAKksAACpLAAAqywAAKssAACtLAAArSwAAK8sAACvLAAAsSwAALEsAACzLAAAsywAALUsAAC1LAAAtywAALcsAAC5LAAAuSwAALssAAC7LAAAvSwAAL0sAAC/LAAAvywAAMEsAADBLAAAwywAAMMsAADFLAAAxSwAAMcsAADHLAAAySwAAMksAADLLAAAyywAAM0sAADNLAAAzywAAM8sAADRLAAA0SwAANMsAADTLAAA1SwAANUsAADXLAAA1ywAANksAADZLAAA2ywAANssAADdLAAA3SwAAN8sAADfLAAA4SwAAOEsAADjLAAA4ywAAOwsAADsLAAA7iwAAO4sAADzLAAA8ywAAAAtAAAlLQAAJy0AACctAAAtLQAALS0AAEGmAABBpgAAQ6YAAEOmAABFpgAARaYAAEemAABHpgAASaYAAEmmAABLpgAAS6YAAE2mAABNpgAAT6YAAE+mAABRpgAAUaYAAFOmAABTpgAAVaYAAFWmAABXpgAAV6YAAFmmAABZpgAAW6YAAFumAABdpgAAXaYAAF+mAABfpgAAYaYAAGGmAABjpgAAY6YAAGWmAABlpgAAZ6YAAGemAABppgAAaaYAAGumAABrpgAAbaYAAG2mAACBpgAAgaYAAIOmAACDpgAAhaYAAIWmAACHpgAAh6YAAImmAACJpgAAi6YAAIumAACNpgAAjaYAAI+mAACPpgAAkaYAAJGmAACTpgAAk6YAAJWmAACVpgAAl6YAAJemAACZpgAAmaYAAJumAACbpgAAI6cAACOnAAAlpwAAJacAACenAAAnpwAAKacAACmnAAArpwAAK6cAAC2nAAAtpwAAL6cAAC+nAAAzpwAAM6cAADWnAAA1pwAAN6cAADenAAA5pwAAOacAADunAAA7pwAAPacAAD2nAAA/pwAAP6cAAEGnAABBpwAAQ6cAAEOnAABFpwAARacAAEenAABHpwAASacAAEmnAABLpwAAS6cAAE2nAABNpwAAT6cAAE+nAABRpwAAUacAAFOnAABTpwAAVacAAFWnAABXpwAAV6cAAFmnAABZpwAAW6cAAFunAABdpwAAXacAAF+nAABfpwAAYacAAGGnAABjpwAAY6cAAGWnAABlpwAAZ6cAAGenAABppwAAaacAAGunAABrpwAAbacAAG2nAABvpwAAb6cAAHqnAAB6pwAAfKcAAHynAAB/pwAAf6cAAIGnAACBpwAAg6cAAIOnAACFpwAAhacAAIenAACHpwAAjKcAAIynAACRpwAAkacAAJOnAACUpwAAl6cAAJenAACZpwAAmacAAJunAACbpwAAnacAAJ2nAACfpwAAn6cAAKGnAAChpwAAo6cAAKOnAAClpwAApacAAKenAACnpwAAqacAAKmnAAC1pwAAtacAALenAAC3pwAAuacAALmnAAC7pwAAu6cAAL2nAAC9pwAAv6cAAL+nAADBpwAAwacAAMOnAADDpwAAyKcAAMinAADKpwAAyqcAANGnAADRpwAA16cAANenAADZpwAA2acAAPanAAD2pwAAU6sAAFOrAABwqwAAv6sAAAD7AAAG+wAAE/sAABf7AABB/wAAWv8AACgEAQBPBAEA2AQBAPsEAQCXBQEAoQUBAKMFAQCxBQEAswUBALkFAQC7BQEAvAUBAMAMAQDyDAEAwBgBAN8YAQBgbgEAf24BACLpAQBD6QEALQAAAC0AAACKBQAAigUAAL4FAAC+BQAAABQAAAAUAAAGGAAABhgAABAgAAAVIAAAUyAAAFMgAAB7IAAAeyAAAIsgAACLIAAAEiIAABIiAAAXLgAAFy4AABouAAAaLgAAOi4AADsuAABALgAAQC4AAF0uAABdLgAAHDAAABwwAAAwMAAAMDAAAKAwAACgMAAAMf4AADL+AABY/gAAWP4AAGP+AABj/gAADf8AAA3/AACtDgEArQ4BAK0AAACtAAAATwMAAE8DAAAcBgAAHAYAAF8RAABgEQAAtBcAALUXAAALGAAADxgAAAsgAAAPIAAAKiAAAC4gAABgIAAAbyAAAGQxAABkMQAAAP4AAA/+AAD//gAA//4AAKD/AACg/wAA8P8AAPj/AACgvAEAo7wBAHPRAQB60QEAAAAOAP8PDgBJAQAASQEAAHMGAABzBgAAdw8AAHcPAAB5DwAAeQ8AAKMXAACkFwAAaiAAAG8gAAApIwAAKiMAAAEADgABAA4AXgAAAF4AAABgAAAAYAAAAKgAAACoAAAArwAAAK8AAAC0AAAAtAAAALcAAAC4AAAAsAIAAE4DAABQAwAAVwMAAF0DAABiAwAAdAMAAHUDAAB6AwAAegMAAIQDAACFAwAAgwQAAIcEAABZBQAAWQUAAJEFAAChBQAAowUAAL0FAAC/BQAAvwUAAMEFAADCBQAAxAUAAMQFAABLBgAAUgYAAFcGAABYBgAA3wYAAOAGAADlBgAA5gYAAOoGAADsBgAAMAcAAEoHAACmBwAAsAcAAOsHAAD1BwAAGAgAABkIAACYCAAAnwgAAMkIAADSCAAA4wgAAP4IAAA8CQAAPAkAAE0JAABNCQAAUQkAAFQJAABxCQAAcQkAALwJAAC8CQAAzQkAAM0JAAA8CgAAPAoAAE0KAABNCgAAvAoAALwKAADNCgAAzQoAAP0KAAD/CgAAPAsAADwLAABNCwAATQsAAFULAABVCwAAzQsAAM0LAAA8DAAAPAwAAE0MAABNDAAAvAwAALwMAADNDAAAzQwAADsNAAA8DQAATQ0AAE0NAADKDQAAyg0AAEcOAABMDgAATg4AAE4OAAC6DgAAug4AAMgOAADMDgAAGA8AABkPAAA1DwAANQ8AADcPAAA3DwAAOQ8AADkPAAA+DwAAPw8AAIIPAACEDwAAhg8AAIcPAADGDwAAxg8AADcQAAA3EAAAORAAADoQAABjEAAAZBAAAGkQAABtEAAAhxAAAI0QAACPEAAAjxAAAJoQAACbEAAAXRMAAF8TAAAUFwAAFRcAAMkXAADTFwAA3RcAAN0XAAA5GQAAOxkAAHUaAAB8GgAAfxoAAH8aAACwGgAAvhoAAMEaAADLGgAANBsAADQbAABEGwAARBsAAGsbAABzGwAAqhsAAKsbAAA2HAAANxwAAHgcAAB9HAAA0BwAAOgcAADtHAAA7RwAAPQcAAD0HAAA9xwAAPkcAAAsHQAAah0AAMQdAADPHQAA9R0AAP8dAAC9HwAAvR8AAL8fAADBHwAAzR8AAM8fAADdHwAA3x8AAO0fAADvHwAA/R8AAP4fAADvLAAA8SwAAC8uAAAvLgAAKjAAAC8wAACZMAAAnDAAAPwwAAD8MAAAb6YAAG+mAAB8pgAAfaYAAH+mAAB/pgAAnKYAAJ2mAADwpgAA8aYAAACnAAAhpwAAiKcAAIqnAAD4pwAA+acAAMSoAADEqAAA4KgAAPGoAAArqQAALqkAAFOpAABTqQAAs6kAALOpAADAqQAAwKkAAOWpAADlqQAAe6oAAH2qAAC/qgAAwqoAAPaqAAD2qgAAW6sAAF+rAABpqwAAa6sAAOyrAADtqwAAHvsAAB77AAAg/gAAL/4AAD7/AAA+/wAAQP8AAED/AABw/wAAcP8AAJ7/AACf/wAA4/8AAOP/AADgAgEA4AIBAIAHAQCFBwEAhwcBALAHAQCyBwEAugcBAOUKAQDmCgEAIg0BACcNAQD9DgEA/w4BAEYPAQBQDwEAgg8BAIUPAQBGEAEARhABAHAQAQBwEAEAuRABALoQAQAzEQEANBEBAHMRAQBzEQEAwBEBAMARAQDKEQEAzBEBADUSAQA2EgEA6RIBAOoSAQA8EwEAPBMBAE0TAQBNEwEAZhMBAGwTAQBwEwEAdBMBAEIUAQBCFAEARhQBAEYUAQDCFAEAwxQBAL8VAQDAFQEAPxYBAD8WAQC2FgEAtxYBACsXAQArFwEAORgBADoYAQA9GQEAPhkBAEMZAQBDGQEA4BkBAOAZAQA0GgEANBoBAEcaAQBHGgEAmRoBAJkaAQA/HAEAPxwBAEIdAQBCHQEARB0BAEUdAQCXHQEAlx0BAEc0AQBVNAEA8GoBAPRqAQAwawEANmsBAI9vAQCfbwEA8G8BAPFvAQDwrwEA868BAPWvAQD7rwEA/a8BAP6vAQAAzwEALc8BADDPAQBGzwEAZ9EBAGnRAQBt0QEActEBAHvRAQCC0QEAhdEBAIvRAQCq0QEArdEBADDgAQBt4AEAMOEBADbhAQCu4gEAruIBAOziAQDv4gEA0OgBANboAQBE6QEARukBAEjpAQBK6QEAIwAAACMAAAAqAAAAKgAAADAAAAA5AAAAqQAAAKkAAACuAAAArgAAADwgAAA8IAAASSAAAEkgAAAiIQAAIiEAADkhAAA5IQAAlCEAAJkhAACpIQAAqiEAABojAAAbIwAAKCMAACgjAADPIwAAzyMAAOkjAADzIwAA+CMAAPojAADCJAAAwiQAAKolAACrJQAAtiUAALYlAADAJQAAwCUAAPslAAD+JQAAACYAAAQmAAAOJgAADiYAABEmAAARJgAAFCYAABUmAAAYJgAAGCYAAB0mAAAdJgAAICYAACAmAAAiJgAAIyYAACYmAAAmJgAAKiYAAComAAAuJgAALyYAADgmAAA6JgAAQCYAAEAmAABCJgAAQiYAAEgmAABTJgAAXyYAAGAmAABjJgAAYyYAAGUmAABmJgAAaCYAAGgmAAB7JgAAeyYAAH4mAAB/JgAAkiYAAJcmAACZJgAAmSYAAJsmAACcJgAAoCYAAKEmAACnJgAApyYAAKomAACrJgAAsCYAALEmAAC9JgAAviYAAMQmAADFJgAAyCYAAMgmAADOJgAAzyYAANEmAADRJgAA0yYAANQmAADpJgAA6iYAAPAmAAD1JgAA9yYAAPomAAD9JgAA/SYAAAInAAACJwAABScAAAUnAAAIJwAADScAAA8nAAAPJwAAEicAABInAAAUJwAAFCcAABYnAAAWJwAAHScAAB0nAAAhJwAAIScAACgnAAAoJwAAMycAADQnAABEJwAARCcAAEcnAABHJwAATCcAAEwnAABOJwAATicAAFMnAABVJwAAVycAAFcnAABjJwAAZCcAAJUnAACXJwAAoScAAKEnAACwJwAAsCcAAL8nAAC/JwAANCkAADUpAAAFKwAABysAABsrAAAcKwAAUCsAAFArAABVKwAAVSsAADAwAAAwMAAAPTAAAD0wAACXMgAAlzIAAJkyAACZMgAABPABAATwAQDP8AEAz/ABAHDxAQBx8QEAfvEBAH/xAQCO8QEAjvEBAJHxAQCa8QEA5vEBAP/xAQAB8gEAAvIBABryAQAa8gEAL/IBAC/yAQAy8gEAOvIBAFDyAQBR8gEAAPMBACHzAQAk8wEAk/MBAJbzAQCX8wEAmfMBAJvzAQCe8wEA8PMBAPPzAQD18wEA9/MBAP30AQD/9AEAPfUBAEn1AQBO9QEAUPUBAGf1AQBv9QEAcPUBAHP1AQB69QEAh/UBAIf1AQCK9QEAjfUBAJD1AQCQ9QEAlfUBAJb1AQCk9QEApfUBAKj1AQCo9QEAsfUBALL1AQC89QEAvPUBAML1AQDE9QEA0fUBANP1AQDc9QEA3vUBAOH1AQDh9QEA4/UBAOP1AQDo9QEA6PUBAO/1AQDv9QEA8/UBAPP1AQD69QEAT/YBAID2AQDF9gEAy/YBANL2AQDV9gEA1/YBANz2AQDl9gEA6fYBAOn2AQDr9gEA7PYBAPD2AQDw9gEA8/YBAPz2AQDg9wEA6/cBAPD3AQDw9wEADPkBADr5AQA8+QEARfkBAEf5AQD/+QEAcPoBAHz6AQCA+gEAiPoBAJD6AQC9+gEAv/oBAMX6AQDO+gEA2/oBAOD6AQDo+gEA8PoBAPj6AQAjAAAAIwAAACoAAAAqAAAAMAAAADkAAAANIAAADSAAAOMgAADjIAAAD/4AAA/+AADm8QEA//EBAPvzAQD/8wEAsPkBALP5AQAgAA4AfwAOAPvzAQD/8wEAHSYAAB0mAAD5JgAA+SYAAAonAAANJwAAhfMBAIXzAQDC8wEAxPMBAMfzAQDH8wEAyvMBAMzzAQBC9AEAQ/QBAEb0AQBQ9AEAZvQBAHj0AQB89AEAfPQBAIH0AQCD9AEAhfQBAIf0AQCP9AEAj/QBAJH0AQCR9AEAqvQBAKr0AQB09QEAdfUBAHr1AQB69QEAkPUBAJD1AQCV9QEAlvUBAEX2AQBH9gEAS/YBAE/2AQCj9gEAo/YBALT2AQC29gEAwPYBAMD2AQDM9gEAzPYBAAz5AQAM+QEAD/kBAA/5AQAY+QEAH/kBACb5AQAm+QEAMPkBADn5AQA8+QEAPvkBAHf5AQB3+QEAtfkBALb5AQC4+QEAufkBALv5AQC7+QEAzfkBAM/5AQDR+QEA3fkBAMP6AQDF+gEA8PoBAPj6AQAaIwAAGyMAAOkjAADsIwAA8CMAAPAjAADzIwAA8yMAAP0lAAD+JQAAFCYAABUmAABIJgAAUyYAAH8mAAB/JgAAkyYAAJMmAAChJgAAoSYAAKomAACrJgAAvSYAAL4mAADEJgAAxSYAAM4mAADOJgAA1CYAANQmAADqJgAA6iYAAPImAADzJgAA9SYAAPUmAAD6JgAA+iYAAP0mAAD9JgAABScAAAUnAAAKJwAACycAACgnAAAoJwAATCcAAEwnAABOJwAATicAAFMnAABVJwAAVycAAFcnAACVJwAAlycAALAnAACwJwAAvycAAL8nAAAbKwAAHCsAAFArAABQKwAAVSsAAFUrAAAE8AEABPABAM/wAQDP8AEAjvEBAI7xAQCR8QEAmvEBAObxAQD/8QEAAfIBAAHyAQAa8gEAGvIBAC/yAQAv8gEAMvIBADbyAQA48gEAOvIBAFDyAQBR8gEAAPMBACDzAQAt8wEANfMBADfzAQB88wEAfvMBAJPzAQCg8wEAyvMBAM/zAQDT8wEA4PMBAPDzAQD08wEA9PMBAPjzAQA+9AEAQPQBAED0AQBC9AEA/PQBAP/0AQA99QEAS/UBAE71AQBQ9QEAZ/UBAHr1AQB69QEAlfUBAJb1AQCk9QEApPUBAPv1AQBP9gEAgPYBAMX2AQDM9gEAzPYBAND2AQDS9gEA1fYBANf2AQDc9gEA3/YBAOv2AQDs9gEA9PYBAPz2AQDg9wEA6/cBAPD3AQDw9wEADPkBADr5AQA8+QEARfkBAEf5AQD/+QEAcPoBAHz6AQCA+gEAiPoBAJD6AQC9+gEAv/oBAMX6AQDO+gEA2/oBAOD6AQDo+gEA8PoBAPj6AQCpAAAAqQAAAK4AAACuAAAAPCAAADwgAABJIAAASSAAACIhAAAiIQAAOSEAADkhAACUIQAAmSEAAKkhAACqIQAAGiMAABsjAAAoIwAAKCMAAIgjAACIIwAAzyMAAM8jAADpIwAA8yMAAPgjAAD6IwAAwiQAAMIkAACqJQAAqyUAALYlAAC2JQAAwCUAAMAlAAD7JQAA/iUAAAAmAAAFJgAAByYAABImAAAUJgAAhSYAAJAmAAAFJwAACCcAABInAAAUJwAAFCcAABYnAAAWJwAAHScAAB0nAAAhJwAAIScAACgnAAAoJwAAMycAADQnAABEJwAARCcAAEcnAABHJwAATCcAAEwnAABOJwAATicAAFMnAABVJwAAVycAAFcnAABjJwAAZycAAJUnAACXJwAAoScAAKEnAACwJwAAsCcAAL8nAAC/JwAANCkAADUpAAAFKwAABysAABsrAAAcKwAAUCsAAFArAABVKwAAVSsAADAwAAAwMAAAPTAAAD0wAACXMgAAlzIAAJkyAACZMgAAAPABAP/wAQAN8QEAD/EBAC/xAQAv8QEAbPEBAHHxAQB+8QEAf/EBAI7xAQCO8QEAkfEBAJrxAQCt8QEA5fEBAAHyAQAP8gEAGvIBABryAQAv8gEAL/IBADLyAQA68gEAPPIBAD/yAQBJ8gEA+vMBAAD0AQA99QEARvUBAE/2AQCA9gEA//YBAHT3AQB/9wEA1fcBAP/3AQAM+AEAD/gBAEj4AQBP+AEAWvgBAF/4AQCI+AEAj/gBAK74AQD/+AEADPkBADr5AQA8+QEARfkBAEf5AQD/+gEAAPwBAP3/AQC3AAAAtwAAANACAADRAgAAQAYAAEAGAAD6BwAA+gcAAFULAABVCwAARg4AAEYOAADGDgAAxg4AAAoYAAAKGAAAQxgAAEMYAACnGgAApxoAADYcAAA2HAAAexwAAHscAAAFMAAABTAAADEwAAA1MAAAnTAAAJ4wAAD8MAAA/jAAABWgAAAVoAAADKYAAAymAADPqQAAz6kAAOapAADmqQAAcKoAAHCqAADdqgAA3aoAAPOqAAD0qgAAcP8AAHD/AACBBwEAggcBAF0TAQBdEwEAxhUBAMgVAQCYGgEAmBoBAEJrAQBDawEA4G8BAOFvAQDjbwEA428BADzhAQA94QEAROkBAEbpAQAgAAAAfgAAAKAAAACsAAAArgAAAP8CAABwAwAAdwMAAHoDAAB/AwAAhAMAAIoDAACMAwAAjAMAAI4DAAChAwAAowMAAIIEAACKBAAALwUAADEFAABWBQAAWQUAAIoFAACNBQAAjwUAAL4FAAC+BQAAwAUAAMAFAADDBQAAwwUAAMYFAADGBQAA0AUAAOoFAADvBQAA9AUAAAYGAAAPBgAAGwYAABsGAAAdBgAASgYAAGAGAABvBgAAcQYAANUGAADeBgAA3gYAAOUGAADmBgAA6QYAAOkGAADuBgAADQcAABAHAAAQBwAAEgcAAC8HAABNBwAApQcAALEHAACxBwAAwAcAAOoHAAD0BwAA+gcAAP4HAAAVCAAAGggAABoIAAAkCAAAJAgAACgIAAAoCAAAMAgAAD4IAABACAAAWAgAAF4IAABeCAAAYAgAAGoIAABwCAAAjggAAKAIAADJCAAAAwkAADkJAAA7CQAAOwkAAD0JAABACQAASQkAAEwJAABOCQAAUAkAAFgJAABhCQAAZAkAAIAJAACCCQAAgwkAAIUJAACMCQAAjwkAAJAJAACTCQAAqAkAAKoJAACwCQAAsgkAALIJAAC2CQAAuQkAAL0JAAC9CQAAvwkAAMAJAADHCQAAyAkAAMsJAADMCQAAzgkAAM4JAADcCQAA3QkAAN8JAADhCQAA5gkAAP0JAAADCgAAAwoAAAUKAAAKCgAADwoAABAKAAATCgAAKAoAACoKAAAwCgAAMgoAADMKAAA1CgAANgoAADgKAAA5CgAAPgoAAEAKAABZCgAAXAoAAF4KAABeCgAAZgoAAG8KAAByCgAAdAoAAHYKAAB2CgAAgwoAAIMKAACFCgAAjQoAAI8KAACRCgAAkwoAAKgKAACqCgAAsAoAALIKAACzCgAAtQoAALkKAAC9CgAAwAoAAMkKAADJCgAAywoAAMwKAADQCgAA0AoAAOAKAADhCgAA5goAAPEKAAD5CgAA+QoAAAILAAADCwAABQsAAAwLAAAPCwAAEAsAABMLAAAoCwAAKgsAADALAAAyCwAAMwsAADULAAA5CwAAPQsAAD0LAABACwAAQAsAAEcLAABICwAASwsAAEwLAABcCwAAXQsAAF8LAABhCwAAZgsAAHcLAACDCwAAgwsAAIULAACKCwAAjgsAAJALAACSCwAAlQsAAJkLAACaCwAAnAsAAJwLAACeCwAAnwsAAKMLAACkCwAAqAsAAKoLAACuCwAAuQsAAL8LAAC/CwAAwQsAAMILAADGCwAAyAsAAMoLAADMCwAA0AsAANALAADmCwAA+gsAAAEMAAADDAAABQwAAAwMAAAODAAAEAwAABIMAAAoDAAAKgwAADkMAAA9DAAAPQwAAEEMAABEDAAAWAwAAFoMAABdDAAAXQwAAGAMAABhDAAAZgwAAG8MAAB3DAAAgAwAAIIMAACMDAAAjgwAAJAMAACSDAAAqAwAAKoMAACzDAAAtQwAALkMAAC9DAAAvgwAAMAMAADBDAAAwwwAAMQMAADHDAAAyAwAAMoMAADLDAAA3QwAAN4MAADgDAAA4QwAAOYMAADvDAAA8QwAAPMMAAACDQAADA0AAA4NAAAQDQAAEg0AADoNAAA9DQAAPQ0AAD8NAABADQAARg0AAEgNAABKDQAATA0AAE4NAABPDQAAVA0AAFYNAABYDQAAYQ0AAGYNAAB/DQAAgg0AAIMNAACFDQAAlg0AAJoNAACxDQAAsw0AALsNAAC9DQAAvQ0AAMANAADGDQAA0A0AANENAADYDQAA3g0AAOYNAADvDQAA8g0AAPQNAAABDgAAMA4AADIOAAAzDgAAPw4AAEYOAABPDgAAWw4AAIEOAACCDgAAhA4AAIQOAACGDgAAig4AAIwOAACjDgAApQ4AAKUOAACnDgAAsA4AALIOAACzDgAAvQ4AAL0OAADADgAAxA4AAMYOAADGDgAA0A4AANkOAADcDgAA3w4AAAAPAAAXDwAAGg8AADQPAAA2DwAANg8AADgPAAA4DwAAOg8AAEcPAABJDwAAbA8AAH8PAAB/DwAAhQ8AAIUPAACIDwAAjA8AAL4PAADFDwAAxw8AAMwPAADODwAA2g8AAAAQAAAsEAAAMRAAADEQAAA4EAAAOBAAADsQAAA8EAAAPxAAAFcQAABaEAAAXRAAAGEQAABwEAAAdRAAAIEQAACDEAAAhBAAAIcQAACMEAAAjhAAAJwQAACeEAAAxRAAAMcQAADHEAAAzRAAAM0QAADQEAAASBIAAEoSAABNEgAAUBIAAFYSAABYEgAAWBIAAFoSAABdEgAAYBIAAIgSAACKEgAAjRIAAJASAACwEgAAshIAALUSAAC4EgAAvhIAAMASAADAEgAAwhIAAMUSAADIEgAA1hIAANgSAAAQEwAAEhMAABUTAAAYEwAAWhMAAGATAAB8EwAAgBMAAJkTAACgEwAA9RMAAPgTAAD9EwAAABQAAJwWAACgFgAA+BYAAAAXAAARFwAAFRcAABUXAAAfFwAAMRcAADQXAAA2FwAAQBcAAFEXAABgFwAAbBcAAG4XAABwFwAAgBcAALMXAAC2FwAAthcAAL4XAADFFwAAxxcAAMgXAADUFwAA3BcAAOAXAADpFwAA8BcAAPkXAAAAGAAAChgAABAYAAAZGAAAIBgAAHgYAACAGAAAhBgAAIcYAACoGAAAqhgAAKoYAACwGAAA9RgAAAAZAAAeGQAAIxkAACYZAAApGQAAKxkAADAZAAAxGQAAMxkAADgZAABAGQAAQBkAAEQZAABtGQAAcBkAAHQZAACAGQAAqxkAALAZAADJGQAA0BkAANoZAADeGQAAFhoAABkaAAAaGgAAHhoAAFUaAABXGgAAVxoAAGEaAABhGgAAYxoAAGQaAABtGgAAchoAAIAaAACJGgAAkBoAAJkaAACgGgAArRoAAAQbAAAzGwAAOxsAADsbAAA9GwAAQRsAAEMbAABMGwAAUBsAAGobAAB0GwAAfhsAAIIbAAChGwAAphsAAKcbAACqGwAAqhsAAK4bAADlGwAA5xsAAOcbAADqGwAA7BsAAO4bAADuGwAA8hsAAPMbAAD8GwAAKxwAADQcAAA1HAAAOxwAAEkcAABNHAAAiBwAAJAcAAC6HAAAvRwAAMccAADTHAAA0xwAAOEcAADhHAAA6RwAAOwcAADuHAAA8xwAAPUcAAD3HAAA+hwAAPocAAAAHQAAvx0AAAAeAAAVHwAAGB8AAB0fAAAgHwAARR8AAEgfAABNHwAAUB8AAFcfAABZHwAAWR8AAFsfAABbHwAAXR8AAF0fAABfHwAAfR8AAIAfAAC0HwAAth8AAMQfAADGHwAA0x8AANYfAADbHwAA3R8AAO8fAADyHwAA9B8AAPYfAAD+HwAAACAAAAogAAAQIAAAJyAAAC8gAABfIAAAcCAAAHEgAAB0IAAAjiAAAJAgAACcIAAAoCAAAMAgAAAAIQAAiyEAAJAhAAAmJAAAQCQAAEokAABgJAAAcysAAHYrAACVKwAAlysAAO4sAADyLAAA8ywAAPksAAAlLQAAJy0AACctAAAtLQAALS0AADAtAABnLQAAby0AAHAtAACALQAAli0AAKAtAACmLQAAqC0AAK4tAACwLQAAti0AALgtAAC+LQAAwC0AAMYtAADILQAAzi0AANAtAADWLQAA2C0AAN4tAAAALgAAXS4AAIAuAACZLgAAmy4AAPMuAAAALwAA1S8AAPAvAAD7LwAAADAAACkwAAAwMAAAPzAAAEEwAACWMAAAmzAAAP8wAAAFMQAALzEAADExAACOMQAAkDEAAOMxAADwMQAAHjIAACAyAACMpAAAkKQAAMakAADQpAAAK6YAAECmAABupgAAc6YAAHOmAAB+pgAAnaYAAKCmAADvpgAA8qYAAPemAAAApwAAyqcAANCnAADRpwAA06cAANOnAADVpwAA2acAAPKnAAABqAAAA6gAAAWoAAAHqAAACqgAAAyoAAAkqAAAJ6gAACuoAAAwqAAAOagAAECoAAB3qAAAgKgAAMOoAADOqAAA2agAAPKoAAD+qAAAAKkAACWpAAAuqQAARqkAAFKpAABTqQAAX6kAAHypAACDqQAAsqkAALSpAAC1qQAAuqkAALupAAC+qQAAzakAAM+pAADZqQAA3qkAAOSpAADmqQAA/qkAAACqAAAoqgAAL6oAADCqAAAzqgAANKoAAECqAABCqgAARKoAAEuqAABNqgAATaoAAFCqAABZqgAAXKoAAHuqAAB9qgAAr6oAALGqAACxqgAAtaoAALaqAAC5qgAAvaoAAMCqAADAqgAAwqoAAMKqAADbqgAA66oAAO6qAAD1qgAAAasAAAarAAAJqwAADqsAABGrAAAWqwAAIKsAACarAAAoqwAALqsAADCrAABrqwAAcKsAAOSrAADmqwAA56sAAOmrAADsqwAA8KsAAPmrAAAArAAAo9cAALDXAADG1wAAy9cAAPvXAAAA+QAAbfoAAHD6AADZ+gAAAPsAAAb7AAAT+wAAF/sAAB37AAAd+wAAH/sAADb7AAA4+wAAPPsAAD77AAA++wAAQPsAAEH7AABD+wAARPsAAEb7AADC+wAA0/sAAI/9AACS/QAAx/0AAM/9AADP/QAA8P0AAP/9AAAQ/gAAGf4AADD+AABS/gAAVP4AAGb+AABo/gAAa/4AAHD+AAB0/gAAdv4AAPz+AAAB/wAAnf8AAKD/AAC+/wAAwv8AAMf/AADK/wAAz/8AANL/AADX/wAA2v8AANz/AADg/wAA5v8AAOj/AADu/wAA/P8AAP3/AAAAAAEACwABAA0AAQAmAAEAKAABADoAAQA8AAEAPQABAD8AAQBNAAEAUAABAF0AAQCAAAEA+gABAAABAQACAQEABwEBADMBAQA3AQEAjgEBAJABAQCcAQEAoAEBAKABAQDQAQEA/AEBAIACAQCcAgEAoAIBANACAQDhAgEA+wIBAAADAQAjAwEALQMBAEoDAQBQAwEAdQMBAIADAQCdAwEAnwMBAMMDAQDIAwEA1QMBAAAEAQCdBAEAoAQBAKkEAQCwBAEA0wQBANgEAQD7BAEAAAUBACcFAQAwBQEAYwUBAG8FAQB6BQEAfAUBAIoFAQCMBQEAkgUBAJQFAQCVBQEAlwUBAKEFAQCjBQEAsQUBALMFAQC5BQEAuwUBALwFAQAABgEANgcBAEAHAQBVBwEAYAcBAGcHAQCABwEAhQcBAIcHAQCwBwEAsgcBALoHAQAACAEABQgBAAgIAQAICAEACggBADUIAQA3CAEAOAgBADwIAQA8CAEAPwgBAFUIAQBXCAEAnggBAKcIAQCvCAEA4AgBAPIIAQD0CAEA9QgBAPsIAQAbCQEAHwkBADkJAQA/CQEAPwkBAIAJAQC3CQEAvAkBAM8JAQDSCQEAAAoBABAKAQATCgEAFQoBABcKAQAZCgEANQoBAEAKAQBICgEAUAoBAFgKAQBgCgEAnwoBAMAKAQDkCgEA6woBAPYKAQAACwEANQsBADkLAQBVCwEAWAsBAHILAQB4CwEAkQsBAJkLAQCcCwEAqQsBAK8LAQAADAEASAwBAIAMAQCyDAEAwAwBAPIMAQD6DAEAIw0BADANAQA5DQEAYA4BAH4OAQCADgEAqQ4BAK0OAQCtDgEAsA4BALEOAQAADwEAJw8BADAPAQBFDwEAUQ8BAFkPAQBwDwEAgQ8BAIYPAQCJDwEAsA8BAMsPAQDgDwEA9g8BAAAQAQAAEAEAAhABADcQAQBHEAEATRABAFIQAQBvEAEAcRABAHIQAQB1EAEAdRABAIIQAQCyEAEAtxABALgQAQC7EAEAvBABAL4QAQDBEAEA0BABAOgQAQDwEAEA+RABAAMRAQAmEQEALBEBACwRAQA2EQEARxEBAFARAQByEQEAdBEBAHYRAQCCEQEAtREBAL8RAQDIEQEAzREBAM4RAQDQEQEA3xEBAOERAQD0EQEAABIBABESAQATEgEALhIBADISAQAzEgEANRIBADUSAQA4EgEAPRIBAD8SAQBAEgEAgBIBAIYSAQCIEgEAiBIBAIoSAQCNEgEAjxIBAJ0SAQCfEgEAqRIBALASAQDeEgEA4BIBAOISAQDwEgEA+RIBAAITAQADEwEABRMBAAwTAQAPEwEAEBMBABMTAQAoEwEAKhMBADATAQAyEwEAMxMBADUTAQA5EwEAPRMBAD0TAQA/EwEAPxMBAEETAQBEEwEARxMBAEgTAQBLEwEATRMBAFATAQBQEwEAXRMBAGMTAQAAFAEANxQBAEAUAQBBFAEARRQBAEUUAQBHFAEAWxQBAF0UAQBdFAEAXxQBAGEUAQCAFAEArxQBALEUAQCyFAEAuRQBALkUAQC7FAEAvBQBAL4UAQC+FAEAwRQBAMEUAQDEFAEAxxQBANAUAQDZFAEAgBUBAK4VAQCwFQEAsRUBALgVAQC7FQEAvhUBAL4VAQDBFQEA2xUBAAAWAQAyFgEAOxYBADwWAQA+FgEAPhYBAEEWAQBEFgEAUBYBAFkWAQBgFgEAbBYBAIAWAQCqFgEArBYBAKwWAQCuFgEArxYBALYWAQC2FgEAuBYBALkWAQDAFgEAyRYBAAAXAQAaFwEAIBcBACEXAQAmFwEAJhcBADAXAQBGFwEAABgBAC4YAQA4GAEAOBgBADsYAQA7GAEAoBgBAPIYAQD/GAEABhkBAAkZAQAJGQEADBkBABMZAQAVGQEAFhkBABgZAQAvGQEAMRkBADUZAQA3GQEAOBkBAD0ZAQA9GQEAPxkBAEIZAQBEGQEARhkBAFAZAQBZGQEAoBkBAKcZAQCqGQEA0xkBANwZAQDfGQEA4RkBAOQZAQAAGgEAABoBAAsaAQAyGgEAORoBADoaAQA/GgEARhoBAFAaAQBQGgEAVxoBAFgaAQBcGgEAiRoBAJcaAQCXGgEAmhoBAKIaAQCwGgEA+BoBAAAbAQAJGwEAABwBAAgcAQAKHAEALxwBAD4cAQA+HAEAQBwBAEUcAQBQHAEAbBwBAHAcAQCPHAEAqRwBAKkcAQCxHAEAsRwBALQcAQC0HAEAAB0BAAYdAQAIHQEACR0BAAsdAQAwHQEARh0BAEYdAQBQHQEAWR0BAGAdAQBlHQEAZx0BAGgdAQBqHQEAjh0BAJMdAQCUHQEAlh0BAJYdAQCYHQEAmB0BAKAdAQCpHQEA4B4BAPIeAQD1HgEA+B4BAAIfAQAQHwEAEh8BADUfAQA+HwEAPx8BAEEfAQBBHwEAQx8BAFkfAQCwHwEAsB8BAMAfAQDxHwEA/x8BAJkjAQAAJAEAbiQBAHAkAQB0JAEAgCQBAEMlAQCQLwEA8i8BAAAwAQAvNAEAQTQBAEY0AQAARAEARkYBAABoAQA4agEAQGoBAF5qAQBgagEAaWoBAG5qAQC+agEAwGoBAMlqAQDQagEA7WoBAPVqAQD1agEAAGsBAC9rAQA3awEARWsBAFBrAQBZawEAW2sBAGFrAQBjawEAd2sBAH1rAQCPawEAQG4BAJpuAQAAbwEASm8BAFBvAQCHbwEAk28BAJ9vAQDgbwEA428BAPBvAQDxbwEAAHABAPeHAQAAiAEA1YwBAACNAQAIjQEA8K8BAPOvAQD1rwEA+68BAP2vAQD+rwEAALABACKxAQAysQEAMrEBAFCxAQBSsQEAVbEBAFWxAQBksQEAZ7EBAHCxAQD7sgEAALwBAGq8AQBwvAEAfLwBAIC8AQCIvAEAkLwBAJm8AQCcvAEAnLwBAJ+8AQCfvAEAUM8BAMPPAQAA0AEA9dABAADRAQAm0QEAKdEBAGTRAQBm0QEAZtEBAGrRAQBt0QEAg9EBAITRAQCM0QEAqdEBAK7RAQDq0QEAANIBAEHSAQBF0gEARdIBAMDSAQDT0gEA4NIBAPPSAQAA0wEAVtMBAGDTAQB40wEAANQBAFTUAQBW1AEAnNQBAJ7UAQCf1AEAotQBAKLUAQCl1AEAptQBAKnUAQCs1AEArtQBALnUAQC71AEAu9QBAL3UAQDD1AEAxdQBAAXVAQAH1QEACtUBAA3VAQAU1QEAFtUBABzVAQAe1QEAOdUBADvVAQA+1QEAQNUBAETVAQBG1QEARtUBAErVAQBQ1QEAUtUBAKXWAQCo1gEAy9cBAM7XAQD/2QEAN9oBADraAQBt2gEAdNoBAHbaAQCD2gEAhdoBAIvaAQAA3wEAHt8BACXfAQAq3wEAMOABAG3gAQAA4QEALOEBADfhAQA94QEAQOEBAEnhAQBO4QEAT+EBAJDiAQCt4gEAwOIBAOviAQDw4gEA+eIBAP/iAQD/4gEA0OQBAOvkAQDw5AEA+eQBAODnAQDm5wEA6OcBAOvnAQDt5wEA7ucBAPDnAQD+5wEAAOgBAMToAQDH6AEAz+gBAADpAQBD6QEAS+kBAEvpAQBQ6QEAWekBAF7pAQBf6QEAcewBALTsAQAB7QEAPe0BAADuAQAD7gEABe4BAB/uAQAh7gEAIu4BACTuAQAk7gEAJ+4BACfuAQAp7gEAMu4BADTuAQA37gEAOe4BADnuAQA77gEAO+4BAELuAQBC7gEAR+4BAEfuAQBJ7gEASe4BAEvuAQBL7gEATe4BAE/uAQBR7gEAUu4BAFTuAQBU7gEAV+4BAFfuAQBZ7gEAWe4BAFvuAQBb7gEAXe4BAF3uAQBf7gEAX+4BAGHuAQBi7gEAZO4BAGTuAQBn7gEAau4BAGzuAQBy7gEAdO4BAHfuAQB57gEAfO4BAH7uAQB+7gEAgO4BAInuAQCL7gEAm+4BAKHuAQCj7gEApe4BAKnuAQCr7gEAu+4BAPDuAQDx7gEAAPABACvwAQAw8AEAk/ABAKDwAQCu8AEAsfABAL/wAQDB8AEAz/ABANHwAQD18AEAAPEBAK3xAQDm8QEAAvIBABDyAQA78gEAQPIBAEjyAQBQ8gEAUfIBAGDyAQBl8gEAAPMBANf2AQDc9gEA7PYBAPD2AQD89gEAAPcBAHb3AQB79wEA2fcBAOD3AQDr9wEA8PcBAPD3AQAA+AEAC/gBABD4AQBH+AEAUPgBAFn4AQBg+AEAh/gBAJD4AQCt+AEAsPgBALH4AQAA+QEAU/oBAGD6AQBt+gEAcPoBAHz6AQCA+gEAiPoBAJD6AQC9+gEAv/oBAMX6AQDO+gEA2/oBAOD6AQDo+gEA8PoBAPj6AQAA+wEAkvsBAJT7AQDK+wEA8PsBAPn7AQAAAAIA36YCAACnAgA5twIAQLcCAB24AgAguAIAoc4CALDOAgDg6wIAAPgCAB36AgAAAAMAShMDAFATAwCvIwMAAAMAAG8DAACDBAAAiQQAAJEFAAC9BQAAvwUAAL8FAADBBQAAwgUAAMQFAADFBQAAxwUAAMcFAAAQBgAAGgYAAEsGAABfBgAAcAYAAHAGAADWBgAA3AYAAN8GAADkBgAA5wYAAOgGAADqBgAA7QYAABEHAAARBwAAMAcAAEoHAACmBwAAsAcAAOsHAADzBwAA/QcAAP0HAAAWCAAAGQgAABsIAAAjCAAAJQgAACcIAAApCAAALQgAAFkIAABbCAAAmAgAAJ8IAADKCAAA4QgAAOMIAAACCQAAOgkAADoJAAA8CQAAPAkAAEEJAABICQAATQkAAE0JAABRCQAAVwkAAGIJAABjCQAAgQkAAIEJAAC8CQAAvAkAAL4JAAC+CQAAwQkAAMQJAADNCQAAzQkAANcJAADXCQAA4gkAAOMJAAD+CQAA/gkAAAEKAAACCgAAPAoAADwKAABBCgAAQgoAAEcKAABICgAASwoAAE0KAABRCgAAUQoAAHAKAABxCgAAdQoAAHUKAACBCgAAggoAALwKAAC8CgAAwQoAAMUKAADHCgAAyAoAAM0KAADNCgAA4goAAOMKAAD6CgAA/woAAAELAAABCwAAPAsAADwLAAA+CwAAPwsAAEELAABECwAATQsAAE0LAABVCwAAVwsAAGILAABjCwAAggsAAIILAAC+CwAAvgsAAMALAADACwAAzQsAAM0LAADXCwAA1wsAAAAMAAAADAAABAwAAAQMAAA8DAAAPAwAAD4MAABADAAARgwAAEgMAABKDAAATQwAAFUMAABWDAAAYgwAAGMMAACBDAAAgQwAALwMAAC8DAAAvwwAAL8MAADCDAAAwgwAAMYMAADGDAAAzAwAAM0MAADVDAAA1gwAAOIMAADjDAAAAA0AAAENAAA7DQAAPA0AAD4NAAA+DQAAQQ0AAEQNAABNDQAATQ0AAFcNAABXDQAAYg0AAGMNAACBDQAAgQ0AAMoNAADKDQAAzw0AAM8NAADSDQAA1A0AANYNAADWDQAA3w0AAN8NAAAxDgAAMQ4AADQOAAA6DgAARw4AAE4OAACxDgAAsQ4AALQOAAC8DgAAyA4AAM4OAAAYDwAAGQ8AADUPAAA1DwAANw8AADcPAAA5DwAAOQ8AAHEPAAB+DwAAgA8AAIQPAACGDwAAhw8AAI0PAACXDwAAmQ8AALwPAADGDwAAxg8AAC0QAAAwEAAAMhAAADcQAAA5EAAAOhAAAD0QAAA+EAAAWBAAAFkQAABeEAAAYBAAAHEQAAB0EAAAghAAAIIQAACFEAAAhhAAAI0QAACNEAAAnRAAAJ0QAABdEwAAXxMAABIXAAAUFwAAMhcAADMXAABSFwAAUxcAAHIXAABzFwAAtBcAALUXAAC3FwAAvRcAAMYXAADGFwAAyRcAANMXAADdFwAA3RcAAAsYAAANGAAADxgAAA8YAACFGAAAhhgAAKkYAACpGAAAIBkAACIZAAAnGQAAKBkAADIZAAAyGQAAORkAADsZAAAXGgAAGBoAABsaAAAbGgAAVhoAAFYaAABYGgAAXhoAAGAaAABgGgAAYhoAAGIaAABlGgAAbBoAAHMaAAB8GgAAfxoAAH8aAACwGgAAzhoAAAAbAAADGwAANBsAADobAAA8GwAAPBsAAEIbAABCGwAAaxsAAHMbAACAGwAAgRsAAKIbAAClGwAAqBsAAKkbAACrGwAArRsAAOYbAADmGwAA6BsAAOkbAADtGwAA7RsAAO8bAADxGwAALBwAADMcAAA2HAAANxwAANAcAADSHAAA1BwAAOAcAADiHAAA6BwAAO0cAADtHAAA9BwAAPQcAAD4HAAA+RwAAMAdAAD/HQAADCAAAAwgAADQIAAA8CAAAO8sAADxLAAAfy0AAH8tAADgLQAA/y0AACowAAAvMAAAmTAAAJowAABvpgAAcqYAAHSmAAB9pgAAnqYAAJ+mAADwpgAA8aYAAAKoAAACqAAABqgAAAaoAAALqAAAC6gAACWoAAAmqAAALKgAACyoAADEqAAAxagAAOCoAADxqAAA/6gAAP+oAAAmqQAALakAAEepAABRqQAAgKkAAIKpAACzqQAAs6kAALapAAC5qQAAvKkAAL2pAADlqQAA5akAACmqAAAuqgAAMaoAADKqAAA1qgAANqoAAEOqAABDqgAATKoAAEyqAAB8qgAAfKoAALCqAACwqgAAsqoAALSqAAC3qgAAuKoAAL6qAAC/qgAAwaoAAMGqAADsqgAA7aoAAPaqAAD2qgAA5asAAOWrAADoqwAA6KsAAO2rAADtqwAAHvsAAB77AAAA/gAAD/4AACD+AAAv/gAAnv8AAJ//AAD9AQEA/QEBAOACAQDgAgEAdgMBAHoDAQABCgEAAwoBAAUKAQAGCgEADAoBAA8KAQA4CgEAOgoBAD8KAQA/CgEA5QoBAOYKAQAkDQEAJw0BAKsOAQCsDgEA/Q4BAP8OAQBGDwEAUA8BAIIPAQCFDwEAARABAAEQAQA4EAEARhABAHAQAQBwEAEAcxABAHQQAQB/EAEAgRABALMQAQC2EAEAuRABALoQAQDCEAEAwhABAAARAQACEQEAJxEBACsRAQAtEQEANBEBAHMRAQBzEQEAgBEBAIERAQC2EQEAvhEBAMkRAQDMEQEAzxEBAM8RAQAvEgEAMRIBADQSAQA0EgEANhIBADcSAQA+EgEAPhIBAEESAQBBEgEA3xIBAN8SAQDjEgEA6hIBAAATAQABEwEAOxMBADwTAQA+EwEAPhMBAEATAQBAEwEAVxMBAFcTAQBmEwEAbBMBAHATAQB0EwEAOBQBAD8UAQBCFAEARBQBAEYUAQBGFAEAXhQBAF4UAQCwFAEAsBQBALMUAQC4FAEAuhQBALoUAQC9FAEAvRQBAL8UAQDAFAEAwhQBAMMUAQCvFQEArxUBALIVAQC1FQEAvBUBAL0VAQC/FQEAwBUBANwVAQDdFQEAMxYBADoWAQA9FgEAPRYBAD8WAQBAFgEAqxYBAKsWAQCtFgEArRYBALAWAQC1FgEAtxYBALcWAQAdFwEAHxcBACIXAQAlFwEAJxcBACsXAQAvGAEANxgBADkYAQA6GAEAMBkBADAZAQA7GQEAPBkBAD4ZAQA+GQEAQxkBAEMZAQDUGQEA1xkBANoZAQDbGQEA4BkBAOAZAQABGgEAChoBADMaAQA4GgEAOxoBAD4aAQBHGgEARxoBAFEaAQBWGgEAWRoBAFsaAQCKGgEAlhoBAJgaAQCZGgEAMBwBADYcAQA4HAEAPRwBAD8cAQA/HAEAkhwBAKccAQCqHAEAsBwBALIcAQCzHAEAtRwBALYcAQAxHQEANh0BADodAQA6HQEAPB0BAD0dAQA/HQEARR0BAEcdAQBHHQEAkB0BAJEdAQCVHQEAlR0BAJcdAQCXHQEA8x4BAPQeAQAAHwEAAR8BADYfAQA6HwEAQB8BAEAfAQBCHwEAQh8BAEA0AQBANAEARzQBAFU0AQDwagEA9GoBADBrAQA2awEAT28BAE9vAQCPbwEAkm8BAORvAQDkbwEAnbwBAJ68AQAAzwEALc8BADDPAQBGzwEAZdEBAGXRAQBn0QEAadEBAG7RAQBy0QEAe9EBAILRAQCF0QEAi9EBAKrRAQCt0QEAQtIBAETSAQAA2gEANtoBADvaAQBs2gEAddoBAHXaAQCE2gEAhNoBAJvaAQCf2gEAodoBAK/aAQAA4AEABuABAAjgAQAY4AEAG+ABACHgAQAj4AEAJOABACbgAQAq4AEAj+ABAI/gAQAw4QEANuEBAK7iAQCu4gEA7OIBAO/iAQDs5AEA7+QBANDoAQDW6AEAROkBAErpAQAgAA4AfwAOAAABDgDvAQ4ATQkAAE0JAADNCQAAzQkAAE0KAABNCgAAzQoAAM0KAABNCwAATQsAAM0LAADNCwAATQwAAE0MAADNDAAAzQwAADsNAAA8DQAATQ0AAE0NAADKDQAAyg0AADoOAAA6DgAAug4AALoOAACEDwAAhA8AADkQAAA6EAAAFBcAABUXAAA0FwAANBcAANIXAADSFwAAYBoAAGAaAABEGwAARBsAAKobAACrGwAA8hsAAPMbAAB/LQAAfy0AAAaoAAAGqAAALKgAACyoAADEqAAAxKgAAFOpAABTqQAAwKkAAMCpAAD2qgAA9qoAAO2rAADtqwAAPwoBAD8KAQBGEAEARhABAHAQAQBwEAEAfxABAH8QAQC5EAEAuRABADMRAQA0EQEAwBEBAMARAQA1EgEANRIBAOoSAQDqEgEATRMBAE0TAQBCFAEAQhQBAMIUAQDCFAEAvxUBAL8VAQA/FgEAPxYBALYWAQC2FgEAKxcBACsXAQA5GAEAORgBAD0ZAQA+GQEA4BkBAOAZAQA0GgEANBoBAEcaAQBHGgEAmRoBAJkaAQA/HAEAPxwBAEQdAQBFHQEAlx0BAJcdAQBBHwEAQh8BADAAAAA5AAAAQQAAAEYAAABhAAAAZgAAABD/AAAZ/wAAIf8AACb/AABB/wAARv8AAC0AAAAtAAAArQAAAK0AAACKBQAAigUAAAYYAAAGGAAAECAAABEgAAAXLgAAFy4AAPswAAD7MAAAY/4AAGP+AAAN/wAADf8AAGX/AABl/wAA8C8AAPEvAAD0LwAA+y8AAPIvAADzLwAAMAAAADkAAABBAAAAWgAAAF8AAABfAAAAYQAAAHoAAACqAAAAqgAAALUAAAC1AAAAtwAAALcAAAC6AAAAugAAAMAAAADWAAAA2AAAAPYAAAD4AAAAwQIAAMYCAADRAgAA4AIAAOQCAADsAgAA7AIAAO4CAADuAgAAAAMAAHQDAAB2AwAAdwMAAHoDAAB9AwAAfwMAAH8DAACGAwAAigMAAIwDAACMAwAAjgMAAKEDAACjAwAA9QMAAPcDAACBBAAAgwQAAIcEAACKBAAALwUAADEFAABWBQAAWQUAAFkFAABgBQAAiAUAAJEFAAC9BQAAvwUAAL8FAADBBQAAwgUAAMQFAADFBQAAxwUAAMcFAADQBQAA6gUAAO8FAADyBQAAEAYAABoGAAAgBgAAaQYAAG4GAADTBgAA1QYAANwGAADfBgAA6AYAAOoGAAD8BgAA/wYAAP8GAAAQBwAASgcAAE0HAACxBwAAwAcAAPUHAAD6BwAA+gcAAP0HAAD9BwAAAAgAAC0IAABACAAAWwgAAGAIAABqCAAAcAgAAIcIAACJCAAAjggAAJgIAADhCAAA4wgAAGMJAABmCQAAbwkAAHEJAACDCQAAhQkAAIwJAACPCQAAkAkAAJMJAACoCQAAqgkAALAJAACyCQAAsgkAALYJAAC5CQAAvAkAAMQJAADHCQAAyAkAAMsJAADOCQAA1wkAANcJAADcCQAA3QkAAN8JAADjCQAA5gkAAPEJAAD8CQAA/AkAAP4JAAD+CQAAAQoAAAMKAAAFCgAACgoAAA8KAAAQCgAAEwoAACgKAAAqCgAAMAoAADIKAAAzCgAANQoAADYKAAA4CgAAOQoAADwKAAA8CgAAPgoAAEIKAABHCgAASAoAAEsKAABNCgAAUQoAAFEKAABZCgAAXAoAAF4KAABeCgAAZgoAAHUKAACBCgAAgwoAAIUKAACNCgAAjwoAAJEKAACTCgAAqAoAAKoKAACwCgAAsgoAALMKAAC1CgAAuQoAALwKAADFCgAAxwoAAMkKAADLCgAAzQoAANAKAADQCgAA4AoAAOMKAADmCgAA7woAAPkKAAD/CgAAAQsAAAMLAAAFCwAADAsAAA8LAAAQCwAAEwsAACgLAAAqCwAAMAsAADILAAAzCwAANQsAADkLAAA8CwAARAsAAEcLAABICwAASwsAAE0LAABVCwAAVwsAAFwLAABdCwAAXwsAAGMLAABmCwAAbwsAAHELAABxCwAAggsAAIMLAACFCwAAigsAAI4LAACQCwAAkgsAAJULAACZCwAAmgsAAJwLAACcCwAAngsAAJ8LAACjCwAApAsAAKgLAACqCwAArgsAALkLAAC+CwAAwgsAAMYLAADICwAAygsAAM0LAADQCwAA0AsAANcLAADXCwAA5gsAAO8LAAAADAAADAwAAA4MAAAQDAAAEgwAACgMAAAqDAAAOQwAADwMAABEDAAARgwAAEgMAABKDAAATQwAAFUMAABWDAAAWAwAAFoMAABdDAAAXQwAAGAMAABjDAAAZgwAAG8MAACADAAAgwwAAIUMAACMDAAAjgwAAJAMAACSDAAAqAwAAKoMAACzDAAAtQwAALkMAAC8DAAAxAwAAMYMAADIDAAAygwAAM0MAADVDAAA1gwAAN0MAADeDAAA4AwAAOMMAADmDAAA7wwAAPEMAADzDAAAAA0AAAwNAAAODQAAEA0AABINAABEDQAARg0AAEgNAABKDQAATg0AAFQNAABXDQAAXw0AAGMNAABmDQAAbw0AAHoNAAB/DQAAgQ0AAIMNAACFDQAAlg0AAJoNAACxDQAAsw0AALsNAAC9DQAAvQ0AAMANAADGDQAAyg0AAMoNAADPDQAA1A0AANYNAADWDQAA2A0AAN8NAADmDQAA7w0AAPINAADzDQAAAQ4AADoOAABADgAATg4AAFAOAABZDgAAgQ4AAIIOAACEDgAAhA4AAIYOAACKDgAAjA4AAKMOAAClDgAApQ4AAKcOAAC9DgAAwA4AAMQOAADGDgAAxg4AAMgOAADODgAA0A4AANkOAADcDgAA3w4AAAAPAAAADwAAGA8AABkPAAAgDwAAKQ8AADUPAAA1DwAANw8AADcPAAA5DwAAOQ8AAD4PAABHDwAASQ8AAGwPAABxDwAAhA8AAIYPAACXDwAAmQ8AALwPAADGDwAAxg8AAAAQAABJEAAAUBAAAJ0QAACgEAAAxRAAAMcQAADHEAAAzRAAAM0QAADQEAAA+hAAAPwQAABIEgAAShIAAE0SAABQEgAAVhIAAFgSAABYEgAAWhIAAF0SAABgEgAAiBIAAIoSAACNEgAAkBIAALASAACyEgAAtRIAALgSAAC+EgAAwBIAAMASAADCEgAAxRIAAMgSAADWEgAA2BIAABATAAASEwAAFRMAABgTAABaEwAAXRMAAF8TAABpEwAAcRMAAIATAACPEwAAoBMAAPUTAAD4EwAA/RMAAAEUAABsFgAAbxYAAH8WAACBFgAAmhYAAKAWAADqFgAA7hYAAPgWAAAAFwAAFRcAAB8XAAA0FwAAQBcAAFMXAABgFwAAbBcAAG4XAABwFwAAchcAAHMXAACAFwAA0xcAANcXAADXFwAA3BcAAN0XAADgFwAA6RcAAAsYAAANGAAADxgAABkYAAAgGAAAeBgAAIAYAACqGAAAsBgAAPUYAAAAGQAAHhkAACAZAAArGQAAMBkAADsZAABGGQAAbRkAAHAZAAB0GQAAgBkAAKsZAACwGQAAyRkAANAZAADaGQAAABoAABsaAAAgGgAAXhoAAGAaAAB8GgAAfxoAAIkaAACQGgAAmRoAAKcaAACnGgAAsBoAAL0aAAC/GgAAzhoAAAAbAABMGwAAUBsAAFkbAABrGwAAcxsAAIAbAADzGwAAABwAADccAABAHAAASRwAAE0cAAB9HAAAgBwAAIgcAACQHAAAuhwAAL0cAAC/HAAA0BwAANIcAADUHAAA+hwAAAAdAAAVHwAAGB8AAB0fAAAgHwAARR8AAEgfAABNHwAAUB8AAFcfAABZHwAAWR8AAFsfAABbHwAAXR8AAF0fAABfHwAAfR8AAIAfAAC0HwAAth8AALwfAAC+HwAAvh8AAMIfAADEHwAAxh8AAMwfAADQHwAA0x8AANYfAADbHwAA4B8AAOwfAADyHwAA9B8AAPYfAAD8HwAAPyAAAEAgAABUIAAAVCAAAHEgAABxIAAAfyAAAH8gAACQIAAAnCAAANAgAADcIAAA4SAAAOEgAADlIAAA8CAAAAIhAAACIQAAByEAAAchAAAKIQAAEyEAABUhAAAVIQAAGCEAAB0hAAAkIQAAJCEAACYhAAAmIQAAKCEAACghAAAqIQAAOSEAADwhAAA/IQAARSEAAEkhAABOIQAATiEAAGAhAACIIQAAACwAAOQsAADrLAAA8ywAAAAtAAAlLQAAJy0AACctAAAtLQAALS0AADAtAABnLQAAby0AAG8tAAB/LQAAli0AAKAtAACmLQAAqC0AAK4tAACwLQAAti0AALgtAAC+LQAAwC0AAMYtAADILQAAzi0AANAtAADWLQAA2C0AAN4tAADgLQAA/y0AAAUwAAAHMAAAITAAAC8wAAAxMAAANTAAADgwAAA8MAAAQTAAAJYwAACZMAAAnzAAAKEwAAD6MAAA/DAAAP8wAAAFMQAALzEAADExAACOMQAAoDEAAL8xAADwMQAA/zEAAAA0AAC/TQAAAE4AAIykAADQpAAA/aQAAAClAAAMpgAAEKYAACumAABApgAAb6YAAHSmAAB9pgAAf6YAAPGmAAAXpwAAH6cAACKnAACIpwAAi6cAAMqnAADQpwAA0acAANOnAADTpwAA1acAANmnAADypwAAJ6gAACyoAAAsqAAAQKgAAHOoAACAqAAAxagAANCoAADZqAAA4KgAAPeoAAD7qAAA+6gAAP2oAAAtqQAAMKkAAFOpAABgqQAAfKkAAICpAADAqQAAz6kAANmpAADgqQAA/qkAAACqAAA2qgAAQKoAAE2qAABQqgAAWaoAAGCqAAB2qgAAeqoAAMKqAADbqgAA3aoAAOCqAADvqgAA8qoAAPaqAAABqwAABqsAAAmrAAAOqwAAEasAABarAAAgqwAAJqsAACirAAAuqwAAMKsAAFqrAABcqwAAaasAAHCrAADqqwAA7KsAAO2rAADwqwAA+asAAACsAACj1wAAsNcAAMbXAADL1wAA+9cAAAD5AABt+gAAcPoAANn6AAAA+wAABvsAABP7AAAX+wAAHfsAACj7AAAq+wAANvsAADj7AAA8+wAAPvsAAD77AABA+wAAQfsAAEP7AABE+wAARvsAALH7AADT+wAAPf0AAFD9AACP/QAAkv0AAMf9AADw/QAA+/0AAAD+AAAP/gAAIP4AAC/+AAAz/gAANP4AAE3+AABP/gAAcP4AAHT+AAB2/gAA/P4AABD/AAAZ/wAAIf8AADr/AAA//wAAP/8AAEH/AABa/wAAZv8AAL7/AADC/wAAx/8AAMr/AADP/wAA0v8AANf/AADa/wAA3P8AAAAAAQALAAEADQABACYAAQAoAAEAOgABADwAAQA9AAEAPwABAE0AAQBQAAEAXQABAIAAAQD6AAEAQAEBAHQBAQD9AQEA/QEBAIACAQCcAgEAoAIBANACAQDgAgEA4AIBAAADAQAfAwEALQMBAEoDAQBQAwEAegMBAIADAQCdAwEAoAMBAMMDAQDIAwEAzwMBANEDAQDVAwEAAAQBAJ0EAQCgBAEAqQQBALAEAQDTBAEA2AQBAPsEAQAABQEAJwUBADAFAQBjBQEAcAUBAHoFAQB8BQEAigUBAIwFAQCSBQEAlAUBAJUFAQCXBQEAoQUBAKMFAQCxBQEAswUBALkFAQC7BQEAvAUBAAAGAQA2BwEAQAcBAFUHAQBgBwEAZwcBAIAHAQCFBwEAhwcBALAHAQCyBwEAugcBAAAIAQAFCAEACAgBAAgIAQAKCAEANQgBADcIAQA4CAEAPAgBADwIAQA/CAEAVQgBAGAIAQB2CAEAgAgBAJ4IAQDgCAEA8ggBAPQIAQD1CAEAAAkBABUJAQAgCQEAOQkBAIAJAQC3CQEAvgkBAL8JAQAACgEAAwoBAAUKAQAGCgEADAoBABMKAQAVCgEAFwoBABkKAQA1CgEAOAoBADoKAQA/CgEAPwoBAGAKAQB8CgEAgAoBAJwKAQDACgEAxwoBAMkKAQDmCgEAAAsBADULAQBACwEAVQsBAGALAQByCwEAgAsBAJELAQAADAEASAwBAIAMAQCyDAEAwAwBAPIMAQAADQEAJw0BADANAQA5DQEAgA4BAKkOAQCrDgEArA4BALAOAQCxDgEA/Q4BABwPAQAnDwEAJw8BADAPAQBQDwEAcA8BAIUPAQCwDwEAxA8BAOAPAQD2DwEAABABAEYQAQBmEAEAdRABAH8QAQC6EAEAwhABAMIQAQDQEAEA6BABAPAQAQD5EAEAABEBADQRAQA2EQEAPxEBAEQRAQBHEQEAUBEBAHMRAQB2EQEAdhEBAIARAQDEEQEAyREBAMwRAQDOEQEA2hEBANwRAQDcEQEAABIBABESAQATEgEANxIBAD4SAQBBEgEAgBIBAIYSAQCIEgEAiBIBAIoSAQCNEgEAjxIBAJ0SAQCfEgEAqBIBALASAQDqEgEA8BIBAPkSAQAAEwEAAxMBAAUTAQAMEwEADxMBABATAQATEwEAKBMBACoTAQAwEwEAMhMBADMTAQA1EwEAORMBADsTAQBEEwEARxMBAEgTAQBLEwEATRMBAFATAQBQEwEAVxMBAFcTAQBdEwEAYxMBAGYTAQBsEwEAcBMBAHQTAQAAFAEAShQBAFAUAQBZFAEAXhQBAGEUAQCAFAEAxRQBAMcUAQDHFAEA0BQBANkUAQCAFQEAtRUBALgVAQDAFQEA2BUBAN0VAQAAFgEAQBYBAEQWAQBEFgEAUBYBAFkWAQCAFgEAuBYBAMAWAQDJFgEAABcBABoXAQAdFwEAKxcBADAXAQA5FwEAQBcBAEYXAQAAGAEAOhgBAKAYAQDpGAEA/xgBAAYZAQAJGQEACRkBAAwZAQATGQEAFRkBABYZAQAYGQEANRkBADcZAQA4GQEAOxkBAEMZAQBQGQEAWRkBAKAZAQCnGQEAqhkBANcZAQDaGQEA4RkBAOMZAQDkGQEAABoBAD4aAQBHGgEARxoBAFAaAQCZGgEAnRoBAJ0aAQCwGgEA+BoBAAAcAQAIHAEAChwBADYcAQA4HAEAQBwBAFAcAQBZHAEAchwBAI8cAQCSHAEApxwBAKkcAQC2HAEAAB0BAAYdAQAIHQEACR0BAAsdAQA2HQEAOh0BADodAQA8HQEAPR0BAD8dAQBHHQEAUB0BAFkdAQBgHQEAZR0BAGcdAQBoHQEAah0BAI4dAQCQHQEAkR0BAJMdAQCYHQEAoB0BAKkdAQDgHgEA9h4BAAAfAQAQHwEAEh8BADofAQA+HwEAQh8BAFAfAQBZHwEAsB8BALAfAQAAIAEAmSMBAAAkAQBuJAEAgCQBAEMlAQCQLwEA8C8BAAAwAQAvNAEAQDQBAFU0AQAARAEARkYBAABoAQA4agEAQGoBAF5qAQBgagEAaWoBAHBqAQC+agEAwGoBAMlqAQDQagEA7WoBAPBqAQD0agEAAGsBADZrAQBAawEAQ2sBAFBrAQBZawEAY2sBAHdrAQB9awEAj2sBAEBuAQB/bgEAAG8BAEpvAQBPbwEAh28BAI9vAQCfbwEA4G8BAOFvAQDjbwEA5G8BAPBvAQDxbwEAAHABAPeHAQAAiAEA1YwBAACNAQAIjQEA8K8BAPOvAQD1rwEA+68BAP2vAQD+rwEAALABACKxAQAysQEAMrEBAFCxAQBSsQEAVbEBAFWxAQBksQEAZ7EBAHCxAQD7sgEAALwBAGq8AQBwvAEAfLwBAIC8AQCIvAEAkLwBAJm8AQCdvAEAnrwBAADPAQAtzwEAMM8BAEbPAQBl0QEAadEBAG3RAQBy0QEAe9EBAILRAQCF0QEAi9EBAKrRAQCt0QEAQtIBAETSAQAA1AEAVNQBAFbUAQCc1AEAntQBAJ/UAQCi1AEAotQBAKXUAQCm1AEAqdQBAKzUAQCu1AEAudQBALvUAQC71AEAvdQBAMPUAQDF1AEABdUBAAfVAQAK1QEADdUBABTVAQAW1QEAHNUBAB7VAQA51QEAO9UBAD7VAQBA1QEARNUBAEbVAQBG1QEAStUBAFDVAQBS1QEApdYBAKjWAQDA1gEAwtYBANrWAQDc1gEA+tYBAPzWAQAU1wEAFtcBADTXAQA21wEATtcBAFDXAQBu1wEAcNcBAIjXAQCK1wEAqNcBAKrXAQDC1wEAxNcBAMvXAQDO1wEA/9cBAADaAQA22gEAO9oBAGzaAQB12gEAddoBAITaAQCE2gEAm9oBAJ/aAQCh2gEAr9oBAADfAQAe3wEAJd8BACrfAQAA4AEABuABAAjgAQAY4AEAG+ABACHgAQAj4AEAJOABACbgAQAq4AEAMOABAG3gAQCP4AEAj+ABAADhAQAs4QEAMOEBAD3hAQBA4QEASeEBAE7hAQBO4QEAkOIBAK7iAQDA4gEA+eIBANDkAQD55AEA4OcBAObnAQDo5wEA6+cBAO3nAQDu5wEA8OcBAP7nAQAA6AEAxOgBANDoAQDW6AEAAOkBAEvpAQBQ6QEAWekBAADuAQAD7gEABe4BAB/uAQAh7gEAIu4BACTuAQAk7gEAJ+4BACfuAQAp7gEAMu4BADTuAQA37gEAOe4BADnuAQA77gEAO+4BAELuAQBC7gEAR+4BAEfuAQBJ7gEASe4BAEvuAQBL7gEATe4BAE/uAQBR7gEAUu4BAFTuAQBU7gEAV+4BAFfuAQBZ7gEAWe4BAFvuAQBb7gEAXe4BAF3uAQBf7gEAX+4BAGHuAQBi7gEAZO4BAGTuAQBn7gEAau4BAGzuAQBy7gEAdO4BAHfuAQB57gEAfO4BAH7uAQB+7gEAgO4BAInuAQCL7gEAm+4BAKHuAQCj7gEApe4BAKnuAQCr7gEAu+4BAPD7AQD5+wEAAAACAN+mAgAApwIAObcCAEC3AgAduAIAILgCAKHOAgCwzgIA4OsCAAD4AgAd+gIAAAADAEoTAwBQEwMAryMDAAABDgDvAQ4AQQAAAFoAAABhAAAAegAAAKoAAACqAAAAtQAAALUAAAC6AAAAugAAAMAAAADWAAAA2AAAAPYAAAD4AAAAwQIAAMYCAADRAgAA4AIAAOQCAADsAgAA7AIAAO4CAADuAgAAcAMAAHQDAAB2AwAAdwMAAHoDAAB9AwAAfwMAAH8DAACGAwAAhgMAAIgDAACKAwAAjAMAAIwDAACOAwAAoQMAAKMDAAD1AwAA9wMAAIEEAACKBAAALwUAADEFAABWBQAAWQUAAFkFAABgBQAAiAUAANAFAADqBQAA7wUAAPIFAAAgBgAASgYAAG4GAABvBgAAcQYAANMGAADVBgAA1QYAAOUGAADmBgAA7gYAAO8GAAD6BgAA/AYAAP8GAAD/BgAAEAcAABAHAAASBwAALwcAAE0HAAClBwAAsQcAALEHAADKBwAA6gcAAPQHAAD1BwAA+gcAAPoHAAAACAAAFQgAABoIAAAaCAAAJAgAACQIAAAoCAAAKAgAAEAIAABYCAAAYAgAAGoIAABwCAAAhwgAAIkIAACOCAAAoAgAAMkIAAAECQAAOQkAAD0JAAA9CQAAUAkAAFAJAABYCQAAYQkAAHEJAACACQAAhQkAAIwJAACPCQAAkAkAAJMJAACoCQAAqgkAALAJAACyCQAAsgkAALYJAAC5CQAAvQkAAL0JAADOCQAAzgkAANwJAADdCQAA3wkAAOEJAADwCQAA8QkAAPwJAAD8CQAABQoAAAoKAAAPCgAAEAoAABMKAAAoCgAAKgoAADAKAAAyCgAAMwoAADUKAAA2CgAAOAoAADkKAABZCgAAXAoAAF4KAABeCgAAcgoAAHQKAACFCgAAjQoAAI8KAACRCgAAkwoAAKgKAACqCgAAsAoAALIKAACzCgAAtQoAALkKAAC9CgAAvQoAANAKAADQCgAA4AoAAOEKAAD5CgAA+QoAAAULAAAMCwAADwsAABALAAATCwAAKAsAACoLAAAwCwAAMgsAADMLAAA1CwAAOQsAAD0LAAA9CwAAXAsAAF0LAABfCwAAYQsAAHELAABxCwAAgwsAAIMLAACFCwAAigsAAI4LAACQCwAAkgsAAJULAACZCwAAmgsAAJwLAACcCwAAngsAAJ8LAACjCwAApAsAAKgLAACqCwAArgsAALkLAADQCwAA0AsAAAUMAAAMDAAADgwAABAMAAASDAAAKAwAACoMAAA5DAAAPQwAAD0MAABYDAAAWgwAAF0MAABdDAAAYAwAAGEMAACADAAAgAwAAIUMAACMDAAAjgwAAJAMAACSDAAAqAwAAKoMAACzDAAAtQwAALkMAAC9DAAAvQwAAN0MAADeDAAA4AwAAOEMAADxDAAA8gwAAAQNAAAMDQAADg0AABANAAASDQAAOg0AAD0NAAA9DQAATg0AAE4NAABUDQAAVg0AAF8NAABhDQAAeg0AAH8NAACFDQAAlg0AAJoNAACxDQAAsw0AALsNAAC9DQAAvQ0AAMANAADGDQAAAQ4AADAOAAAyDgAAMw4AAEAOAABGDgAAgQ4AAIIOAACEDgAAhA4AAIYOAACKDgAAjA4AAKMOAAClDgAApQ4AAKcOAACwDgAAsg4AALMOAAC9DgAAvQ4AAMAOAADEDgAAxg4AAMYOAADcDgAA3w4AAAAPAAAADwAAQA8AAEcPAABJDwAAbA8AAIgPAACMDwAAABAAACoQAAA/EAAAPxAAAFAQAABVEAAAWhAAAF0QAABhEAAAYRAAAGUQAABmEAAAbhAAAHAQAAB1EAAAgRAAAI4QAACOEAAAoBAAAMUQAADHEAAAxxAAAM0QAADNEAAA0BAAAPoQAAD8EAAASBIAAEoSAABNEgAAUBIAAFYSAABYEgAAWBIAAFoSAABdEgAAYBIAAIgSAACKEgAAjRIAAJASAACwEgAAshIAALUSAAC4EgAAvhIAAMASAADAEgAAwhIAAMUSAADIEgAA1hIAANgSAAAQEwAAEhMAABUTAAAYEwAAWhMAAIATAACPEwAAoBMAAPUTAAD4EwAA/RMAAAEUAABsFgAAbxYAAH8WAACBFgAAmhYAAKAWAADqFgAA7hYAAPgWAAAAFwAAERcAAB8XAAAxFwAAQBcAAFEXAABgFwAAbBcAAG4XAABwFwAAgBcAALMXAADXFwAA1xcAANwXAADcFwAAIBgAAHgYAACAGAAAqBgAAKoYAACqGAAAsBgAAPUYAAAAGQAAHhkAAFAZAABtGQAAcBkAAHQZAACAGQAAqxkAALAZAADJGQAAABoAABYaAAAgGgAAVBoAAKcaAACnGgAABRsAADMbAABFGwAATBsAAIMbAACgGwAArhsAAK8bAAC6GwAA5RsAAAAcAAAjHAAATRwAAE8cAABaHAAAfRwAAIAcAACIHAAAkBwAALocAAC9HAAAvxwAAOkcAADsHAAA7hwAAPMcAAD1HAAA9hwAAPocAAD6HAAAAB0AAL8dAAAAHgAAFR8AABgfAAAdHwAAIB8AAEUfAABIHwAATR8AAFAfAABXHwAAWR8AAFkfAABbHwAAWx8AAF0fAABdHwAAXx8AAH0fAACAHwAAtB8AALYfAAC8HwAAvh8AAL4fAADCHwAAxB8AAMYfAADMHwAA0B8AANMfAADWHwAA2x8AAOAfAADsHwAA8h8AAPQfAAD2HwAA/B8AAHEgAABxIAAAfyAAAH8gAACQIAAAnCAAAAIhAAACIQAAByEAAAchAAAKIQAAEyEAABUhAAAVIQAAGCEAAB0hAAAkIQAAJCEAACYhAAAmIQAAKCEAACghAAAqIQAAOSEAADwhAAA/IQAARSEAAEkhAABOIQAATiEAAGAhAACIIQAAACwAAOQsAADrLAAA7iwAAPIsAADzLAAAAC0AACUtAAAnLQAAJy0AAC0tAAAtLQAAMC0AAGctAABvLQAAby0AAIAtAACWLQAAoC0AAKYtAACoLQAAri0AALAtAAC2LQAAuC0AAL4tAADALQAAxi0AAMgtAADOLQAA0C0AANYtAADYLQAA3i0AAAUwAAAHMAAAITAAACkwAAAxMAAANTAAADgwAAA8MAAAQTAAAJYwAACbMAAAnzAAAKEwAAD6MAAA/DAAAP8wAAAFMQAALzEAADExAACOMQAAoDEAAL8xAADwMQAA/zEAAAA0AAC/TQAAAE4AAIykAADQpAAA/aQAAAClAAAMpgAAEKYAAB+mAAAqpgAAK6YAAECmAABupgAAf6YAAJ2mAACgpgAA76YAABenAAAfpwAAIqcAAIinAACLpwAAyqcAANCnAADRpwAA06cAANOnAADVpwAA2acAAPKnAAABqAAAA6gAAAWoAAAHqAAACqgAAAyoAAAiqAAAQKgAAHOoAACCqAAAs6gAAPKoAAD3qAAA+6gAAPuoAAD9qAAA/qgAAAqpAAAlqQAAMKkAAEapAABgqQAAfKkAAISpAACyqQAAz6kAAM+pAADgqQAA5KkAAOapAADvqQAA+qkAAP6pAAAAqgAAKKoAAECqAABCqgAARKoAAEuqAABgqgAAdqoAAHqqAAB6qgAAfqoAAK+qAACxqgAAsaoAALWqAAC2qgAAuaoAAL2qAADAqgAAwKoAAMKqAADCqgAA26oAAN2qAADgqgAA6qoAAPKqAAD0qgAAAasAAAarAAAJqwAADqsAABGrAAAWqwAAIKsAACarAAAoqwAALqsAADCrAABaqwAAXKsAAGmrAABwqwAA4qsAAACsAACj1wAAsNcAAMbXAADL1wAA+9cAAAD5AABt+gAAcPoAANn6AAAA+wAABvsAABP7AAAX+wAAHfsAAB37AAAf+wAAKPsAACr7AAA2+wAAOPsAADz7AAA++wAAPvsAAED7AABB+wAAQ/sAAET7AABG+wAAsfsAANP7AAA9/QAAUP0AAI/9AACS/QAAx/0AAPD9AAD7/QAAcP4AAHT+AAB2/gAA/P4AACH/AAA6/wAAQf8AAFr/AABm/wAAvv8AAML/AADH/wAAyv8AAM//AADS/wAA1/8AANr/AADc/wAAAAABAAsAAQANAAEAJgABACgAAQA6AAEAPAABAD0AAQA/AAEATQABAFAAAQBdAAEAgAABAPoAAQBAAQEAdAEBAIACAQCcAgEAoAIBANACAQAAAwEAHwMBAC0DAQBKAwEAUAMBAHUDAQCAAwEAnQMBAKADAQDDAwEAyAMBAM8DAQDRAwEA1QMBAAAEAQCdBAEAsAQBANMEAQDYBAEA+wQBAAAFAQAnBQEAMAUBAGMFAQBwBQEAegUBAHwFAQCKBQEAjAUBAJIFAQCUBQEAlQUBAJcFAQChBQEAowUBALEFAQCzBQEAuQUBALsFAQC8BQEAAAYBADYHAQBABwEAVQcBAGAHAQBnBwEAgAcBAIUHAQCHBwEAsAcBALIHAQC6BwEAAAgBAAUIAQAICAEACAgBAAoIAQA1CAEANwgBADgIAQA8CAEAPAgBAD8IAQBVCAEAYAgBAHYIAQCACAEAnggBAOAIAQDyCAEA9AgBAPUIAQAACQEAFQkBACAJAQA5CQEAgAkBALcJAQC+CQEAvwkBAAAKAQAACgEAEAoBABMKAQAVCgEAFwoBABkKAQA1CgEAYAoBAHwKAQCACgEAnAoBAMAKAQDHCgEAyQoBAOQKAQAACwEANQsBAEALAQBVCwEAYAsBAHILAQCACwEAkQsBAAAMAQBIDAEAgAwBALIMAQDADAEA8gwBAAANAQAjDQEAgA4BAKkOAQCwDgEAsQ4BAAAPAQAcDwEAJw8BACcPAQAwDwEARQ8BAHAPAQCBDwEAsA8BAMQPAQDgDwEA9g8BAAMQAQA3EAEAcRABAHIQAQB1EAEAdRABAIMQAQCvEAEA0BABAOgQAQADEQEAJhEBAEQRAQBEEQEARxEBAEcRAQBQEQEAchEBAHYRAQB2EQEAgxEBALIRAQDBEQEAxBEBANoRAQDaEQEA3BEBANwRAQAAEgEAERIBABMSAQArEgEAPxIBAEASAQCAEgEAhhIBAIgSAQCIEgEAihIBAI0SAQCPEgEAnRIBAJ8SAQCoEgEAsBIBAN4SAQAFEwEADBMBAA8TAQAQEwEAExMBACgTAQAqEwEAMBMBADITAQAzEwEANRMBADkTAQA9EwEAPRMBAFATAQBQEwEAXRMBAGETAQAAFAEANBQBAEcUAQBKFAEAXxQBAGEUAQCAFAEArxQBAMQUAQDFFAEAxxQBAMcUAQCAFQEArhUBANgVAQDbFQEAABYBAC8WAQBEFgEARBYBAIAWAQCqFgEAuBYBALgWAQAAFwEAGhcBAEAXAQBGFwEAABgBACsYAQCgGAEA3xgBAP8YAQAGGQEACRkBAAkZAQAMGQEAExkBABUZAQAWGQEAGBkBAC8ZAQA/GQEAPxkBAEEZAQBBGQEAoBkBAKcZAQCqGQEA0BkBAOEZAQDhGQEA4xkBAOMZAQAAGgEAABoBAAsaAQAyGgEAOhoBADoaAQBQGgEAUBoBAFwaAQCJGgEAnRoBAJ0aAQCwGgEA+BoBAAAcAQAIHAEAChwBAC4cAQBAHAEAQBwBAHIcAQCPHAEAAB0BAAYdAQAIHQEACR0BAAsdAQAwHQEARh0BAEYdAQBgHQEAZR0BAGcdAQBoHQEAah0BAIkdAQCYHQEAmB0BAOAeAQDyHgEAAh8BAAIfAQAEHwEAEB8BABIfAQAzHwEAsB8BALAfAQAAIAEAmSMBAAAkAQBuJAEAgCQBAEMlAQCQLwEA8C8BAAAwAQAvNAEAQTQBAEY0AQAARAEARkYBAABoAQA4agEAQGoBAF5qAQBwagEAvmoBANBqAQDtagEAAGsBAC9rAQBAawEAQ2sBAGNrAQB3awEAfWsBAI9rAQBAbgEAf24BAABvAQBKbwEAUG8BAFBvAQCTbwEAn28BAOBvAQDhbwEA428BAONvAQAAcAEA94cBAACIAQDVjAEAAI0BAAiNAQDwrwEA868BAPWvAQD7rwEA/a8BAP6vAQAAsAEAIrEBADKxAQAysQEAULEBAFKxAQBVsQEAVbEBAGSxAQBnsQEAcLEBAPuyAQAAvAEAarwBAHC8AQB8vAEAgLwBAIi8AQCQvAEAmbwBAADUAQBU1AEAVtQBAJzUAQCe1AEAn9QBAKLUAQCi1AEApdQBAKbUAQCp1AEArNQBAK7UAQC51AEAu9QBALvUAQC91AEAw9QBAMXUAQAF1QEAB9UBAArVAQAN1QEAFNUBABbVAQAc1QEAHtUBADnVAQA71QEAPtUBAEDVAQBE1QEARtUBAEbVAQBK1QEAUNUBAFLVAQCl1gEAqNYBAMDWAQDC1gEA2tYBANzWAQD61gEA/NYBABTXAQAW1wEANNcBADbXAQBO1wEAUNcBAG7XAQBw1wEAiNcBAIrXAQCo1wEAqtcBAMLXAQDE1wEAy9cBAADfAQAe3wEAJd8BACrfAQAw4AEAbeABAADhAQAs4QEAN+EBAD3hAQBO4QEATuEBAJDiAQCt4gEAwOIBAOviAQDQ5AEA6+QBAODnAQDm5wEA6OcBAOvnAQDt5wEA7ucBAPDnAQD+5wEAAOgBAMToAQAA6QEAQ+kBAEvpAQBL6QEAAO4BAAPuAQAF7gEAH+4BACHuAQAi7gEAJO4BACTuAQAn7gEAJ+4BACnuAQAy7gEANO4BADfuAQA57gEAOe4BADvuAQA77gEAQu4BAELuAQBH7gEAR+4BAEnuAQBJ7gEAS+4BAEvuAQBN7gEAT+4BAFHuAQBS7gEAVO4BAFTuAQBX7gEAV+4BAFnuAQBZ7gEAW+4BAFvuAQBd7gEAXe4BAF/uAQBf7gEAYe4BAGLuAQBk7gEAZO4BAGfuAQBq7gEAbO4BAHLuAQB07gEAd+4BAHnuAQB87gEAfu4BAH7uAQCA7gEAie4BAIvuAQCb7gEAoe4BAKPuAQCl7gEAqe4BAKvuAQC77gEAAAACAN+mAgAApwIAObcCAEC3AgAduAIAILgCAKHOAgCwzgIA4OsCAAD4AgAd+gIAAAADAEoTAwBQEwMAryMDAAYwAAAHMAAAITAAACkwAAA4MAAAOjAAAAA0AAC/TQAAAE4AAP+fAAAA+QAAbfoAAHD6AADZ+gAA5G8BAORvAQAAcAEA94cBAACIAQDVjAEAAI0BAAiNAQBwsQEA+7IBAAAAAgDfpgIAAKcCADm3AgBAtwIAHbgCACC4AgChzgIAsM4CAODrAgAA+AIAHfoCAAAAAwBKEwMAUBMDAK8jAwAMIAAADSAAAEAOAABEDgAAwA4AAMQOAAC1GQAAtxkAALoZAAC6GQAAtaoAALaqAAC5qgAAuaoAALuqAAC8qgAAYQAAAHoAAACqAAAAqgAAALUAAAC1AAAAugAAALoAAADfAAAA9gAAAPgAAAD/AAAAAQEAAAEBAAADAQAAAwEAAAUBAAAFAQAABwEAAAcBAAAJAQAACQEAAAsBAAALAQAADQEAAA0BAAAPAQAADwEAABEBAAARAQAAEwEAABMBAAAVAQAAFQEAABcBAAAXAQAAGQEAABkBAAAbAQAAGwEAAB0BAAAdAQAAHwEAAB8BAAAhAQAAIQEAACMBAAAjAQAAJQEAACUBAAAnAQAAJwEAACkBAAApAQAAKwEAACsBAAAtAQAALQEAAC8BAAAvAQAAMQEAADEBAAAzAQAAMwEAADUBAAA1AQAANwEAADgBAAA6AQAAOgEAADwBAAA8AQAAPgEAAD4BAABAAQAAQAEAAEIBAABCAQAARAEAAEQBAABGAQAARgEAAEgBAABJAQAASwEAAEsBAABNAQAATQEAAE8BAABPAQAAUQEAAFEBAABTAQAAUwEAAFUBAABVAQAAVwEAAFcBAABZAQAAWQEAAFsBAABbAQAAXQEAAF0BAABfAQAAXwEAAGEBAABhAQAAYwEAAGMBAABlAQAAZQEAAGcBAABnAQAAaQEAAGkBAABrAQAAawEAAG0BAABtAQAAbwEAAG8BAABxAQAAcQEAAHMBAABzAQAAdQEAAHUBAAB3AQAAdwEAAHoBAAB6AQAAfAEAAHwBAAB+AQAAgAEAAIMBAACDAQAAhQEAAIUBAACIAQAAiAEAAIwBAACNAQAAkgEAAJIBAACVAQAAlQEAAJkBAACbAQAAngEAAJ4BAAChAQAAoQEAAKMBAACjAQAApQEAAKUBAACoAQAAqAEAAKoBAACrAQAArQEAAK0BAACwAQAAsAEAALQBAAC0AQAAtgEAALYBAAC5AQAAugEAAL0BAAC/AQAAxgEAAMYBAADJAQAAyQEAAMwBAADMAQAAzgEAAM4BAADQAQAA0AEAANIBAADSAQAA1AEAANQBAADWAQAA1gEAANgBAADYAQAA2gEAANoBAADcAQAA3QEAAN8BAADfAQAA4QEAAOEBAADjAQAA4wEAAOUBAADlAQAA5wEAAOcBAADpAQAA6QEAAOsBAADrAQAA7QEAAO0BAADvAQAA8AEAAPMBAADzAQAA9QEAAPUBAAD5AQAA+QEAAPsBAAD7AQAA/QEAAP0BAAD/AQAA/wEAAAECAAABAgAAAwIAAAMCAAAFAgAABQIAAAcCAAAHAgAACQIAAAkCAAALAgAACwIAAA0CAAANAgAADwIAAA8CAAARAgAAEQIAABMCAAATAgAAFQIAABUCAAAXAgAAFwIAABkCAAAZAgAAGwIAABsCAAAdAgAAHQIAAB8CAAAfAgAAIQIAACECAAAjAgAAIwIAACUCAAAlAgAAJwIAACcCAAApAgAAKQIAACsCAAArAgAALQIAAC0CAAAvAgAALwIAADECAAAxAgAAMwIAADkCAAA8AgAAPAIAAD8CAABAAgAAQgIAAEICAABHAgAARwIAAEkCAABJAgAASwIAAEsCAABNAgAATQIAAE8CAACTAgAAlQIAALgCAADAAgAAwQIAAOACAADkAgAARQMAAEUDAABxAwAAcQMAAHMDAABzAwAAdwMAAHcDAAB6AwAAfQMAAJADAACQAwAArAMAAM4DAADQAwAA0QMAANUDAADXAwAA2QMAANkDAADbAwAA2wMAAN0DAADdAwAA3wMAAN8DAADhAwAA4QMAAOMDAADjAwAA5QMAAOUDAADnAwAA5wMAAOkDAADpAwAA6wMAAOsDAADtAwAA7QMAAO8DAADzAwAA9QMAAPUDAAD4AwAA+AMAAPsDAAD8AwAAMAQAAF8EAABhBAAAYQQAAGMEAABjBAAAZQQAAGUEAABnBAAAZwQAAGkEAABpBAAAawQAAGsEAABtBAAAbQQAAG8EAABvBAAAcQQAAHEEAABzBAAAcwQAAHUEAAB1BAAAdwQAAHcEAAB5BAAAeQQAAHsEAAB7BAAAfQQAAH0EAAB/BAAAfwQAAIEEAACBBAAAiwQAAIsEAACNBAAAjQQAAI8EAACPBAAAkQQAAJEEAACTBAAAkwQAAJUEAACVBAAAlwQAAJcEAACZBAAAmQQAAJsEAACbBAAAnQQAAJ0EAACfBAAAnwQAAKEEAAChBAAAowQAAKMEAAClBAAApQQAAKcEAACnBAAAqQQAAKkEAACrBAAAqwQAAK0EAACtBAAArwQAAK8EAACxBAAAsQQAALMEAACzBAAAtQQAALUEAAC3BAAAtwQAALkEAAC5BAAAuwQAALsEAAC9BAAAvQQAAL8EAAC/BAAAwgQAAMIEAADEBAAAxAQAAMYEAADGBAAAyAQAAMgEAADKBAAAygQAAMwEAADMBAAAzgQAAM8EAADRBAAA0QQAANMEAADTBAAA1QQAANUEAADXBAAA1wQAANkEAADZBAAA2wQAANsEAADdBAAA3QQAAN8EAADfBAAA4QQAAOEEAADjBAAA4wQAAOUEAADlBAAA5wQAAOcEAADpBAAA6QQAAOsEAADrBAAA7QQAAO0EAADvBAAA7wQAAPEEAADxBAAA8wQAAPMEAAD1BAAA9QQAAPcEAAD3BAAA+QQAAPkEAAD7BAAA+wQAAP0EAAD9BAAA/wQAAP8EAAABBQAAAQUAAAMFAAADBQAABQUAAAUFAAAHBQAABwUAAAkFAAAJBQAACwUAAAsFAAANBQAADQUAAA8FAAAPBQAAEQUAABEFAAATBQAAEwUAABUFAAAVBQAAFwUAABcFAAAZBQAAGQUAABsFAAAbBQAAHQUAAB0FAAAfBQAAHwUAACEFAAAhBQAAIwUAACMFAAAlBQAAJQUAACcFAAAnBQAAKQUAACkFAAArBQAAKwUAAC0FAAAtBQAALwUAAC8FAABgBQAAiAUAANAQAAD6EAAA/BAAAP8QAAD4EwAA/RMAAIAcAACIHAAAAB0AAL8dAAABHgAAAR4AAAMeAAADHgAABR4AAAUeAAAHHgAABx4AAAkeAAAJHgAACx4AAAseAAANHgAADR4AAA8eAAAPHgAAER4AABEeAAATHgAAEx4AABUeAAAVHgAAFx4AABceAAAZHgAAGR4AABseAAAbHgAAHR4AAB0eAAAfHgAAHx4AACEeAAAhHgAAIx4AACMeAAAlHgAAJR4AACceAAAnHgAAKR4AACkeAAArHgAAKx4AAC0eAAAtHgAALx4AAC8eAAAxHgAAMR4AADMeAAAzHgAANR4AADUeAAA3HgAANx4AADkeAAA5HgAAOx4AADseAAA9HgAAPR4AAD8eAAA/HgAAQR4AAEEeAABDHgAAQx4AAEUeAABFHgAARx4AAEceAABJHgAASR4AAEseAABLHgAATR4AAE0eAABPHgAATx4AAFEeAABRHgAAUx4AAFMeAABVHgAAVR4AAFceAABXHgAAWR4AAFkeAABbHgAAWx4AAF0eAABdHgAAXx4AAF8eAABhHgAAYR4AAGMeAABjHgAAZR4AAGUeAABnHgAAZx4AAGkeAABpHgAAax4AAGseAABtHgAAbR4AAG8eAABvHgAAcR4AAHEeAABzHgAAcx4AAHUeAAB1HgAAdx4AAHceAAB5HgAAeR4AAHseAAB7HgAAfR4AAH0eAAB/HgAAfx4AAIEeAACBHgAAgx4AAIMeAACFHgAAhR4AAIceAACHHgAAiR4AAIkeAACLHgAAix4AAI0eAACNHgAAjx4AAI8eAACRHgAAkR4AAJMeAACTHgAAlR4AAJ0eAACfHgAAnx4AAKEeAAChHgAAox4AAKMeAAClHgAApR4AAKceAACnHgAAqR4AAKkeAACrHgAAqx4AAK0eAACtHgAArx4AAK8eAACxHgAAsR4AALMeAACzHgAAtR4AALUeAAC3HgAAtx4AALkeAAC5HgAAux4AALseAAC9HgAAvR4AAL8eAAC/HgAAwR4AAMEeAADDHgAAwx4AAMUeAADFHgAAxx4AAMceAADJHgAAyR4AAMseAADLHgAAzR4AAM0eAADPHgAAzx4AANEeAADRHgAA0x4AANMeAADVHgAA1R4AANceAADXHgAA2R4AANkeAADbHgAA2x4AAN0eAADdHgAA3x4AAN8eAADhHgAA4R4AAOMeAADjHgAA5R4AAOUeAADnHgAA5x4AAOkeAADpHgAA6x4AAOseAADtHgAA7R4AAO8eAADvHgAA8R4AAPEeAADzHgAA8x4AAPUeAAD1HgAA9x4AAPceAAD5HgAA+R4AAPseAAD7HgAA/R4AAP0eAAD/HgAABx8AABAfAAAVHwAAIB8AACcfAAAwHwAANx8AAEAfAABFHwAAUB8AAFcfAABgHwAAZx8AAHAfAAB9HwAAgB8AAIcfAACQHwAAlx8AAKAfAACnHwAAsB8AALQfAAC2HwAAtx8AAL4fAAC+HwAAwh8AAMQfAADGHwAAxx8AANAfAADTHwAA1h8AANcfAADgHwAA5x8AAPIfAAD0HwAA9h8AAPcfAABxIAAAcSAAAH8gAAB/IAAAkCAAAJwgAAAKIQAACiEAAA4hAAAPIQAAEyEAABMhAAAvIQAALyEAADQhAAA0IQAAOSEAADkhAAA8IQAAPSEAAEYhAABJIQAATiEAAE4hAABwIQAAfyEAAIQhAACEIQAA0CQAAOkkAAAwLAAAXywAAGEsAABhLAAAZSwAAGYsAABoLAAAaCwAAGosAABqLAAAbCwAAGwsAABxLAAAcSwAAHMsAAB0LAAAdiwAAH0sAACBLAAAgSwAAIMsAACDLAAAhSwAAIUsAACHLAAAhywAAIksAACJLAAAiywAAIssAACNLAAAjSwAAI8sAACPLAAAkSwAAJEsAACTLAAAkywAAJUsAACVLAAAlywAAJcsAACZLAAAmSwAAJssAACbLAAAnSwAAJ0sAACfLAAAnywAAKEsAAChLAAAoywAAKMsAAClLAAApSwAAKcsAACnLAAAqSwAAKksAACrLAAAqywAAK0sAACtLAAArywAAK8sAACxLAAAsSwAALMsAACzLAAAtSwAALUsAAC3LAAAtywAALksAAC5LAAAuywAALssAAC9LAAAvSwAAL8sAAC/LAAAwSwAAMEsAADDLAAAwywAAMUsAADFLAAAxywAAMcsAADJLAAAySwAAMssAADLLAAAzSwAAM0sAADPLAAAzywAANEsAADRLAAA0ywAANMsAADVLAAA1SwAANcsAADXLAAA2SwAANksAADbLAAA2ywAAN0sAADdLAAA3ywAAN8sAADhLAAA4SwAAOMsAADkLAAA7CwAAOwsAADuLAAA7iwAAPMsAADzLAAAAC0AACUtAAAnLQAAJy0AAC0tAAAtLQAAQaYAAEGmAABDpgAAQ6YAAEWmAABFpgAAR6YAAEemAABJpgAASaYAAEumAABLpgAATaYAAE2mAABPpgAAT6YAAFGmAABRpgAAU6YAAFOmAABVpgAAVaYAAFemAABXpgAAWaYAAFmmAABbpgAAW6YAAF2mAABdpgAAX6YAAF+mAABhpgAAYaYAAGOmAABjpgAAZaYAAGWmAABnpgAAZ6YAAGmmAABppgAAa6YAAGumAABtpgAAbaYAAIGmAACBpgAAg6YAAIOmAACFpgAAhaYAAIemAACHpgAAiaYAAImmAACLpgAAi6YAAI2mAACNpgAAj6YAAI+mAACRpgAAkaYAAJOmAACTpgAAlaYAAJWmAACXpgAAl6YAAJmmAACZpgAAm6YAAJ2mAAAjpwAAI6cAACWnAAAlpwAAJ6cAACenAAAppwAAKacAACunAAArpwAALacAAC2nAAAvpwAAMacAADOnAAAzpwAANacAADWnAAA3pwAAN6cAADmnAAA5pwAAO6cAADunAAA9pwAAPacAAD+nAAA/pwAAQacAAEGnAABDpwAAQ6cAAEWnAABFpwAAR6cAAEenAABJpwAASacAAEunAABLpwAATacAAE2nAABPpwAAT6cAAFGnAABRpwAAU6cAAFOnAABVpwAAVacAAFenAABXpwAAWacAAFmnAABbpwAAW6cAAF2nAABdpwAAX6cAAF+nAABhpwAAYacAAGOnAABjpwAAZacAAGWnAABnpwAAZ6cAAGmnAABppwAAa6cAAGunAABtpwAAbacAAG+nAAB4pwAAeqcAAHqnAAB8pwAAfKcAAH+nAAB/pwAAgacAAIGnAACDpwAAg6cAAIWnAACFpwAAh6cAAIenAACMpwAAjKcAAI6nAACOpwAAkacAAJGnAACTpwAAlacAAJenAACXpwAAmacAAJmnAACbpwAAm6cAAJ2nAACdpwAAn6cAAJ+nAAChpwAAoacAAKOnAACjpwAApacAAKWnAACnpwAAp6cAAKmnAACppwAAr6cAAK+nAAC1pwAAtacAALenAAC3pwAAuacAALmnAAC7pwAAu6cAAL2nAAC9pwAAv6cAAL+nAADBpwAAwacAAMOnAADDpwAAyKcAAMinAADKpwAAyqcAANGnAADRpwAA06cAANOnAADVpwAA1acAANenAADXpwAA2acAANmnAADypwAA9KcAAPanAAD2pwAA+KcAAPqnAAAwqwAAWqsAAFyrAABpqwAAcKsAAL+rAAAA+wAABvsAABP7AAAX+wAAQf8AAFr/AAAoBAEATwQBANgEAQD7BAEAlwUBAKEFAQCjBQEAsQUBALMFAQC5BQEAuwUBALwFAQCABwEAgAcBAIMHAQCFBwEAhwcBALAHAQCyBwEAugcBAMAMAQDyDAEAwBgBAN8YAQBgbgEAf24BABrUAQAz1AEATtQBAFTUAQBW1AEAZ9QBAILUAQCb1AEAttQBALnUAQC71AEAu9QBAL3UAQDD1AEAxdQBAM/UAQDq1AEAA9UBAB7VAQA31QEAUtUBAGvVAQCG1QEAn9UBALrVAQDT1QEA7tUBAAfWAQAi1gEAO9YBAFbWAQBv1gEAitYBAKXWAQDC1gEA2tYBANzWAQDh1gEA/NYBABTXAQAW1wEAG9cBADbXAQBO1wEAUNcBAFXXAQBw1wEAiNcBAIrXAQCP1wEA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Yh4AAGQeAABkHgAAZh4AAGYeAABoHgAAaB4AAGoeAABqHgAAbB4AAGweAABuHgAAbh4AAHAeAABwHgAAch4AAHIeAAB0HgAAdB4AAHYeAAB2HgAAeB4AAHgeAAB6HgAAeh4AAHweAAB8HgAAfh4AAH4eAACAHgAAgB4AAIIeAACCHgAAhB4AAIQeAACGHgAAhh4AAIgeAACIHgAAih4AAIoeAACMHgAAjB4AAI4eAACOHgAAkB4AAJAeAACSHgAAkh4AAJQeAACUHgAAnh4AAJ4eAACgHgAAoB4AAKIeAACiHgAApB4AAKQeAACmHgAAph4AAKgeAACoHgAAqh4AAKoeAACsHgAArB4AAK4eAACuHgAAsB4AALAeAACyHgAAsh4AALQeAAC0HgAAth4AALYeAAC4HgAAuB4AALoeAAC6HgAAvB4AALweAAC+HgAAvh4AAMAeAADAHgAAwh4AAMIeAADEHgAAxB4AAMYeAADGHgAAyB4AAMgeAADKHgAAyh4AAMweAADMHgAAzh4AAM4eAADQHgAA0B4AANIeAADSHgAA1B4AANQeAADWHgAA1h4AANgeAADYHgAA2h4AANoeAADcHgAA3B4AAN4eAADeHgAA4B4AAOAeAADiHgAA4h4AAOQeAADkHgAA5h4AAOYeAADoHgAA6B4AAOoeAADqHgAA7B4AAOweAADuHgAA7h4AAPAeAADwHgAA8h4AAPIeAAD0HgAA9B4AAPYeAAD2HgAA+B4AAPgeAAD6HgAA+h4AAPweAAD8HgAA/h4AAP4eAAAIHwAADx8AABgfAAAdHwAAKB8AAC8fAAA4HwAAPx8AAEgfAABNHwAAWR8AAFkfAABbHwAAWx8AAF0fAABdHwAAXx8AAF8fAABoHwAAbx8AALgfAAC7HwAAyB8AAMsfAADYHwAA2x8AAOgfAADsHwAA+B8AAPsfAAACIQAAAiEAAAchAAAHIQAACyEAAA0hAAAQIQAAEiEAABUhAAAVIQAAGSEAAB0hAAAkIQAAJCEAACYhAAAmIQAAKCEAACghAAAqIQAALSEAADAhAAAzIQAAPiEAAD8hAABFIQAARSEAAGAhAABvIQAAgyEAAIMhAAC2JAAAzyQAAAAsAAAvLAAAYCwAAGAsAABiLAAAZCwAAGcsAABnLAAAaSwAAGksAABrLAAAaywAAG0sAABwLAAAciwAAHIsAAB1LAAAdSwAAH4sAACALAAAgiwAAIIsAACELAAAhCwAAIYsAACGLAAAiCwAAIgsAACKLAAAiiwAAIwsAACMLAAAjiwAAI4sAACQLAAAkCwAAJIsAACSLAAAlCwAAJQsAACWLAAAliwAAJgsAACYLAAAmiwAAJosAACcLAAAnCwAAJ4sAACeLAAAoCwAAKAsAACiLAAAoiwAAKQsAACkLAAApiwAAKYsAACoLAAAqCwAAKosAACqLAAArCwAAKwsAACuLAAAriwAALAsAACwLAAAsiwAALIsAAC0LAAAtCwAALYsAAC2LAAAuCwAALgsAAC6LAAAuiwAALwsAAC8LAAAviwAAL4sAADALAAAwCwAAMIsAADCLAAAxCwAAMQsAADGLAAAxiwAAMgsAADILAAAyiwAAMosAADMLAAAzCwAAM4sAADOLAAA0CwAANAsAADSLAAA0iwAANQsAADULAAA1iwAANYsAADYLAAA2CwAANosAADaLAAA3CwAANwsAADeLAAA3iwAAOAsAADgLAAA4iwAAOIsAADrLAAA6ywAAO0sAADtLAAA8iwAAPIsAABApgAAQKYAAEKmAABCpgAARKYAAESmAABGpgAARqYAAEimAABIpgAASqYAAEqmAABMpgAATKYAAE6mAABOpgAAUKYAAFCmAABSpgAAUqYAAFSmAABUpgAAVqYAAFamAABYpgAAWKYAAFqmAABapgAAXKYAAFymAABepgAAXqYAAGCmAABgpgAAYqYAAGKmAABkpgAAZKYAAGamAABmpgAAaKYAAGimAABqpgAAaqYAAGymAABspgAAgKYAAICmAACCpgAAgqYAAISmAACEpgAAhqYAAIamAACIpgAAiKYAAIqmAACKpgAAjKYAAIymAACOpgAAjqYAAJCmAACQpgAAkqYAAJKmAACUpgAAlKYAAJamAACWpgAAmKYAAJimAACapgAAmqYAACKnAAAipwAAJKcAACSnAAAmpwAAJqcAACinAAAopwAAKqcAACqnAAAspwAALKcAAC6nAAAupwAAMqcAADKnAAA0pwAANKcAADanAAA2pwAAOKcAADinAAA6pwAAOqcAADynAAA8pwAAPqcAAD6nAABApwAAQKcAAEKnAABCpwAARKcAAESnAABGpwAARqcAAEinAABIpwAASqcAAEqnAABMpwAA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LwUAADEFAABWBQAAWQUAAFkFAABgBQAAiAUAANAFAADqBQAA7wUAAPIFAAAgBgAASgYAAG4GAABvBgAAcQYAANMGAADVBgAA1QYAAOUGAADmBgAA7gYAAO8GAAD6BgAA/AYAAP8GAAD/BgAAEAcAABAHAAASBwAALwcAAE0HAAClBwAAsQcAALEHAADKBwAA6gcAAPQHAAD1BwAA+gcAAPoHAAAACAAAFQgAABoIAAAaCAAAJAgAACQIAAAoCAAAKAgAAEAIAABYCAAAYAgAAGoIAABwCAAAhwgAAIkIAACOCAAAoAgAAMkIAAAECQAAOQkAAD0JAAA9CQAAUAkAAFAJAABYCQAAYQkAAHEJAACACQAAhQkAAIwJAACPCQAAkAkAAJMJAACoCQAAqgkAALAJAACyCQAAsgkAALYJAAC5CQAAvQkAAL0JAADOCQAAzgkAANwJAADdCQAA3wkAAOEJAADwCQAA8QkAAPwJAAD8CQAABQoAAAoKAAAPCgAAEAoAABMKAAAoCgAAKgoAADAKAAAyCgAAMwoAADUKAAA2CgAAOAoAADkKAABZCgAAXAoAAF4KAABeCgAAcgoAAHQKAACFCgAAjQoAAI8KAACRCgAAkwoAAKgKAACqCgAAsAoAALIKAACzCgAAtQoAALkKAAC9CgAAvQoAANAKAADQCgAA4AoAAOEKAAD5CgAA+QoAAAULAAAMCwAADwsAABALAAATCwAAKAsAACoLAAAwCwAAMgsAADMLAAA1CwAAOQsAAD0LAAA9CwAAXAsAAF0LAABfCwAAYQsAAHELAABxCwAAgwsAAIMLAACFCwAAigsAAI4LAACQCwAAkgsAAJULAACZCwAAmgsAAJwLAACcCwAAngsAAJ8LAACjCwAApAsAAKgLAACqCwAArgsAALkLAADQCwAA0AsAAAUMAAAMDAAADgwAABAMAAASDAAAKAwAACoMAAA5DAAAPQwAAD0MAABYDAAAWgwAAF0MAABdDAAAYAwAAGEMAACADAAAgAwAAIUMAACMDAAAjgwAAJAMAACSDAAAqAwAAKoMAACzDAAAtQwAALkMAAC9DAAAvQwAAN0MAADeDAAA4AwAAOEMAADxDAAA8gwAAAQNAAAMDQAADg0AABANAAASDQAAOg0AAD0NAAA9DQAATg0AAE4NAABUDQAAVg0AAF8NAABhDQAAeg0AAH8NAACFDQAAlg0AAJoNAACxDQAAsw0AALsNAAC9DQAAvQ0AAMANAADGDQAAAQ4AADAOAAAyDgAAMg4AAEAOAABGDgAAgQ4AAIIOAACEDgAAhA4AAIYOAACKDgAAjA4AAKMOAAClDgAApQ4AAKcOAACwDgAAsg4AALIOAAC9DgAAvQ4AAMAOAADEDgAAxg4AAMYOAADcDgAA3w4AAAAPAAAADwAAQA8AAEcPAABJDwAAbA8AAIgPAACMDwAAABAAACoQAAA/EAAAPxAAAFAQAABVEAAAWhAAAF0QAABhEAAAYRAAAGUQAABmEAAAbhAAAHAQAAB1EAAAgRAAAI4QAACOEAAAoBAAAMUQAADHEAAAxxAAAM0QAADNEAAA0BAAAPoQAAD8EAAASBIAAEoSAABNEgAAUBIAAFYSAABYEgAAWBIAAFoSAABdEgAAYBIAAIgSAACKEgAAjRIAAJASAACwEgAAshIAALUSAAC4EgAAvhIAAMASAADAEgAAwhIAAMUSAADIEgAA1hIAANgSAAAQEwAAEhMAABUTAAAYEwAAWhMAAIATAACPEwAAoBMAAPUTAAD4EwAA/RMAAAEUAABsFgAAbxYAAH8WAACBFgAAmhYAAKAWAADqFgAA7hYAAPgWAAAAFwAAERcAAB8XAAAxFwAAQBcAAFEXAABgFwAAbBcAAG4XAABwFwAAgBcAALMXAADXFwAA1xcAANwXAADcFwAAIBgAAHgYAACAGAAAqBgAAKoYAACqGAAAsBgAAPUYAAAAGQAAHhkAAFAZAABtGQAAcBkAAHQZAACAGQAAqxkAALAZAADJGQAAABoAABYaAAAgGgAAVBoAAKcaAACnGgAABRsAADMbAABFGwAATBsAAIMbAACgGwAArhsAAK8bAAC6GwAA5RsAAAAcAAAjHAAATRwAAE8cAABaHAAAfRwAAIAcAACIHAAAkBwAALocAAC9HAAAvxwAAOkcAADsHAAA7hwAAPMcAAD1HAAA9hwAAPocAAD6HAAAAB0AAL8dAAAAHgAAFR8AABgfAAAdHwAAIB8AAEUfAABIHwAATR8AAFAfAABXHwAAWR8AAFkfAABbHwAAWx8AAF0fAABdHwAAXx8AAH0fAACAHwAAtB8AALYfAAC8HwAAvh8AAL4fAADCHwAAxB8AAMYfAADMHwAA0B8AANMfAADWHwAA2x8AAOAfAADsHwAA8h8AAPQfAAD2HwAA/B8AAHEgAABxIAAAfyAAAH8gAACQIAAAnCAAAAIhAAACIQAAByEAAAchAAAKIQAAEyEAABUhAAAVIQAAGCEAAB0hAAAkIQAAJCEAACYhAAAmIQAAKCEAACghAAAqIQAAOSEAADwhAAA/IQAARSEAAEkhAABOIQAATiEAAGAhAACIIQAAACwAAOQsAADrLAAA7iwAAPIsAADzLAAAAC0AACUtAAAnLQAAJy0AAC0tAAAtLQAAMC0AAGctAABvLQAAby0AAIAtAACWLQAAoC0AAKYtAACoLQAAri0AALAtAAC2LQAAuC0AAL4tAADALQAAxi0AAMgtAADOLQAA0C0AANYtAADYLQAA3i0AAAUwAAAHMAAAITAAACkwAAAxMAAANTAAADgwAAA8MAAAQTAAAJYwAACdMAAAnzAAAKEwAAD6MAAA/DAAAP8wAAAFMQAALzEAADExAACOMQAAoDEAAL8xAADwMQAA/zEAAAA0AAC/TQAAAE4AAIykAADQpAAA/aQAAAClAAAMpgAAEKYAAB+mAAAqpgAAK6YAAECmAABupgAAf6YAAJ2mAACgpgAA76YAABenAAAfpwAAIqcAAIinAACLpwAAyqcAANCnAADRpwAA06cAANOnAADVpwAA2acAAPKnAAABqAAAA6gAAAWoAAAHqAAACqgAAAyoAAAiqAAAQKgAAHOoAACCqAAAs6gAAPKoAAD3qAAA+6gAAPuoAAD9qAAA/qgAAAqpAAAlqQAAMKkAAEapAABgqQAAfKkAAISpAACyqQAAz6kAAM+pAADgqQAA5KkAAOapAADvqQAA+qkAAP6pAAAAqgAAKKoAAECqAABCqgAARKoAAEuqAABgqgAAdqoAAHqqAAB6qgAAfqoAAK+qAACxqgAAsaoAALWqAAC2qgAAuaoAAL2qAADAqgAAwKoAAMKqAADCqgAA26oAAN2qAADgqgAA6qoAAPKqAAD0qgAAAasAAAarAAAJqwAADqsAABGrAAAWqwAAIKsAACarAAAoqwAALqsAADCrAABaqwAAXKsAAGmrAABwqwAA4qsAAACsAACj1wAAsNcAAMbXAADL1wAA+9cAAAD5AABt+gAAcPoAANn6AAAA+wAABvsAABP7AAAX+wAAHfsAAB37AAAf+wAAKPsAACr7AAA2+wAAOPsAADz7AAA++wAAPvsAAED7AABB+wAAQ/sAAET7AABG+wAAsfsAANP7AABd/AAAZPwAAD39AABQ/QAAj/0AAJL9AADH/QAA8P0AAPn9AABx/gAAcf4AAHP+AABz/gAAd/4AAHf+AAB5/gAAef4AAHv+AAB7/gAAff4AAH3+AAB//gAA/P4AACH/AAA6/wAAQf8AAFr/AABm/wAAnf8AAKD/AAC+/wAAwv8AAMf/AADK/wAAz/8AANL/AADX/wAA2v8AANz/AAAAAAEACwABAA0AAQAmAAEAKAABADoAAQA8AAEAPQABAD8AAQBNAAEAUAABAF0AAQCAAAEA+gABAEABAQB0AQEAgAIBAJwCAQCgAgEA0AIBAAADAQAfAwEALQMBAEoDAQBQAwEAdQMBAIADAQCdAwEAoAMBAMMDAQDIAwEAzwMBANEDAQDVAwEAAAQBAJ0EAQCwBAEA0wQBANgEAQD7BAEAAAUBACcFAQAwBQEAYwUBAHAFAQB6BQEAfAUBAIoFAQCMBQEAkgUBAJQFAQCVBQEAlwUBAKEFAQCjBQEAsQUBALMFAQC5BQEAuwUBALwFAQAABgEANgcBAEAHAQBVBwEAYAcBAGcHAQCABwEAhQcBAIcHAQCwBwEAsgcBALoHAQAACAEABQgBAAgIAQAICAEACggBADUIAQA3CAEAOAgBADwIAQA8CAEAPwgBAFUIAQBgCAEAdggBAIAIAQCeCAEA4AgBAPIIAQD0CAEA9QgBAAAJAQAVCQEAIAkBADkJAQCACQEAtwkBAL4JAQC/CQEAAAoBAAAKAQAQCgEAEwoBABUKAQAXCgEAGQoBADUKAQBgCgEAfAoBAIAKAQCcCgEAwAoBAMcKAQDJCgEA5AoBAAALAQA1CwEAQAsBAFULAQBgCwEAcgsBAIALAQCRCwEAAAwBAEgMAQCADAEAsgwBAMAMAQDyDAEAAA0BACMNAQCADgEAqQ4BALAOAQCxDgEAAA8BABwPAQAnDwEAJw8BADAPAQBFDwEAcA8BAIEPAQCwDwEAxA8BAOAPAQD2DwEAAxABADcQAQBxEAEAchABAHUQAQB1EAEAgxABAK8QAQDQEAEA6BABAAMRAQAmEQEARBEBAEQRAQBHEQEARxEBAFARAQByEQEAdhEBAHYRAQCDEQEAshEBAMERAQDEEQEA2hEBANoRAQDcEQEA3BEBAAASAQAREgEAExIBACsSAQA/EgEAQBIBAIASAQCGEgEAiBIBAIgSAQCKEgEAjRIBAI8SAQCdEgEAnxIBAKgSAQCwEgEA3hIBAAUTAQAMEwEADxMBABATAQATEwEAKBMBACoTAQAwEwEAMhMBADMTAQA1EwEAORMBAD0TAQA9EwEAUBMBAFATAQBdEwEAYRMBAAAUAQA0FAEARxQBAEoUAQBfFAEAYRQBAIAUAQCvFAEAxBQBAMUUAQDHFAEAxxQBAIAVAQCuFQEA2BUBANsVAQAAFgEALxYBAEQWAQBEFgEAgBYBAKoWAQC4FgEAuBYBAAAXAQAaFwEAQBcBAEYXAQAAGAEAKxgBAKAYAQDfGAEA/xgBAAYZAQAJGQEACRkBAAwZAQATGQEAFRkBABYZAQAYGQEALxkBAD8ZAQA/GQEAQRkBAEEZAQCgGQEApxkBAKoZAQDQGQEA4RkBAOEZAQDjGQEA4xkBAAAaAQAAGgEACxoBADIaAQA6GgEAOhoBAFAaAQBQGgEAXBoBAIkaAQCdGgEAnRoBALAaAQD4GgEAABwBAAgcAQAKHAEALhwBAEAcAQBAHAEAchwBAI8cAQAAHQEABh0BAAgdAQAJHQEACx0BADAdAQBGHQEARh0BAGAdAQBlHQEAZx0BAGgdAQBqHQEAiR0BAJgdAQCYHQEA4B4BAPIeAQACHwEAAh8BAAQfAQAQHwEAEh8BADMfAQCwHwEAsB8BAAAgAQCZIwEAACQBAG4kAQCAJAEAQyUBAJAvAQDwLwEAADABAC80AQBBNAEARjQBAABEAQBGRgEAAGgBADhqAQBAagEAXmoBAHBqAQC+agEA0GoBAO1qAQAAawEAL2sBAEBrAQBDawEAY2sBAHdrAQB9awEAj2sBAEBuAQB/bgEAAG8BAEpvAQBQbwEAUG8BAJNvAQCfbwEA4G8BAOFvAQDjbwEA428BAABwAQD3hwEAAIgBANWMAQAAjQEACI0BAPCvAQDzrwEA9a8BAPuvAQD9rwEA/q8BAACwAQAisQEAMrEBADKxAQBQsQEAUrEBAFWxAQBVsQEAZLEBAGexAQBwsQEA+7IBAAC8AQBqvAEAcLwBAHy8AQCAvAEAiLwBAJC8AQCZvAEAANQBAFTUAQBW1AEAnNQBAJ7UAQCf1AEAotQBAKLUAQCl1AEAptQBAKnUAQCs1AEArtQBALnUAQC71AEAu9QBAL3UAQDD1AEAxdQBAAXVAQAH1QEACtUBAA3VAQAU1QEAFtUBABzVAQAe1QEAOdUBADvVAQA+1QEAQNUBAETVAQBG1QEARtUBAErVAQBQ1QEAUtUBAKXWAQCo1gEAwNYBAMLWAQDa1gEA3NYBAPrWAQD81gEAFNcBABbXAQA01wEANtcBAE7XAQBQ1wEAbtcBAHDXAQCI1wEAitcBAKjXAQCq1wEAwtcBAMTXAQDL1wEAAN8BAB7fAQAl3wEAKt8BADDgAQBt4AEAAOEBACzhAQA34QEAPeEBAE7hAQBO4QEAkOIBAK3iAQDA4gEA6+IBANDkAQDr5AEA4OcBAObnAQDo5wEA6+cBAO3nAQDu5wEA8OcBAP7nAQAA6AEAxOgBAADpAQBD6QEAS+kBAEvpAQAA7gEAA+4BAAXuAQAf7gEAIe4BACLuAQAk7gEAJO4BACfuAQAn7gEAKe4BADLuAQA07gEAN+4BADnuAQA57gEAO+4BADvuAQBC7gEAQu4BAEfuAQBH7gEASe4BAEnuAQBL7gEAS+4BAE3uAQBP7gEAUe4BAFLuAQBU7gEAVO4BAFfuAQBX7gEAWe4BAFnuAQBb7gEAW+4BAF3uAQBd7gEAX+4BAF/uAQBh7gEAYu4BAGTuAQBk7gEAZ+4BAGruAQBs7gEAcu4BAHTuAQB37gEAee4BAHzuAQB+7gEAfu4BAIDuAQCJ7gEAi+4BAJvuAQCh7gEAo+4BAKXuAQCp7gEAq+4BALvuAQAAAAIA36YCAACnAgA5twIAQLcCAB24AgAguAIAoc4CALDOAgDg6wIAAPgCAB36AgAAAAMAShMDAFATAwCvIwMAU/8RAA8AAADIohMAAwAAAGL/EQAKAAAA4KITANwCAACU/xEADAAAAMC5EwAEAAAAuf8RAA0AAADguRMAcgAAALMAEgAOAAAAcL0TALUBAACKABIABQAAABjLEwCdAAAA8AASABcAAAAA0BMAbgIAABwBEgAXAAAAcOMTAIMAAABIARIAFwAAAIjnEwBhAgAAqQESABcAAACQ+hMAcgIAANUBEgAXAAAAIA4UAHMCAAAHBBIABAAAALghFAAXAAAAcAQSABwAAABwIhQAEQAAAI8EEgAKAAAA+CIUAAgAAACoBBIACQAAADgjFADDAAAAIQUSAAUAAABQKRQAlwAAAPsEEgAPAAAACC4UAAoAAAAOBRIADgAAAFguFAABAAAA4wQSABMAAABgLhQAKAAAAGMFEgASAAAAoC8UAFEAAABCBhIAFQAAACgyFABOAAAAJgYSAAgAAACYNBQAIQAAAMAGEgANAAAAoDUUAGsDAADvBhIADwAAAPhQFABrAQAACgcSAA0AAABQXBQAOAAAAFEHEgAJAAAAEF4UAAYAAABrBxIABgAAAEBeFAAKAAAAsgcSABMAAACQXhQAAgAAANoHEgAUAAAAoF4UAAEAAAB0BxIACwAAAKheFAAAAwAApgcSAAgAAACodhQAkwIAAI0HEgALAAAAQIsUABQAAACpCBIADAAAAOCLFAABAAAA4AkSABcAAADoixQABwAAABEKEgAJAAAAIIwUAJ8CAAA3ChIABAAAABihFACKAAAAagoSABcAAABopRQAEgAAAHkLEgAQAAAA+KUUAPAAAACUCxIAIgAAAHitFAALAAAAvAsSABUAAADQrRQAGQAAANULEgARAAAAmK4UAAQAAADqCxIADgAAALiuFAAEAAAA/gsSAA8AAADYrhQAHAAAABIMEgAKAAAAuK8UAIYAAACcDBIADwAAAOizFAAFAAAAtwwSAA4AAAAQtBQAHAAAAOMMEgATAAAA8LQUAAUAAAD+DBIAHAAAABi1FAAHAAAAOQ0SAA4AAABQtRQADQAAAFsNEgAHAAAAuLUUAAMAAABzDRIAEgAAANC1FAABAAAA4g0SABEAAADYtRQAUAAAALoNEgALAAAAWLgUACIAAADQDhIAFAAAAGi5FABsAAAAHw8SABEAAADIvBQAEAAAAGUPEgAJAAAASL0UAIsCAACbDxIAEgAAAKDRFAAEAAAAow4SAAsAAAC8/BEACgAAAPcPEgAMAAAAwNEUAAcDAAASEBIACQAAAPjpFACaAgAADQAAAA0AAAAAAAAACQAAAAsAAAAMAAAADgAAAB8AAAB/AAAAnwAAAK0AAACtAAAAHAYAABwGAAAOGAAADhgAAAsgAAALIAAADiAAAA8gAAAoIAAALiAAAGAgAABvIAAA//4AAP/+AADw/wAA+/8AADA0AQA/NAEAoLwBAKO8AQBz0QEAetEBAAAADgAfAA4AgAAOAP8ADgDwAQ4A/w8OAAADAABvAwAAgwQAAIkEAACRBQAAvQUAAL8FAAC/BQAAwQUAAMIFAADEBQAAxQUAAMcFAADHBQAAEAYAABoGAABLBgAAXwYAAHAGAABwBgAA1gYAANwGAADfBgAA5AYAAOcGAADoBgAA6gYAAO0GAAARBwAAEQcAADAHAABKBwAApgcAALAHAADrBwAA8wcAAP0HAAD9BwAAFggAABkIAAAbCAAAIwgAACUIAAAnCAAAKQgAAC0IAABZCAAAWwgAAJgIAACfCAAAyggAAOEIAADjCAAAAgkAADoJAAA6CQAAPAkAADwJAABBCQAASAkAAE0JAABNCQAAUQkAAFcJAABiCQAAYwkAAIEJAACBCQAAvAkAALwJAAC+CQAAvgkAAMEJAADECQAAzQkAAM0JAADXCQAA1wkAAOIJAADjCQAA/gkAAP4JAAABCgAAAgoAADwKAAA8CgAAQQoAAEIKAABHCgAASAoAAEsKAABNCgAAUQoAAFEKAABwCgAAcQoAAHUKAAB1CgAAgQoAAIIKAAC8CgAAvAoAAMEKAADFCgAAxwoAAMgKAADNCgAAzQoAAOIKAADjCgAA+goAAP8KAAABCwAAAQsAADwLAAA8CwAAPgsAAD8LAABBCwAARAsAAE0LAABNCwAAVQsAAFcLAABiCwAAYwsAAIILAACCCwAAvgsAAL4LAADACwAAwAsAAM0LAADNCwAA1wsAANcLAAAADAAAAAwAAAQMAAAEDAAAPAwAADwMAAA+DAAAQAwAAEYMAABIDAAASgwAAE0MAABVDAAAVgwAAGIMAABjDAAAgQwAAIEMAAC8DAAAvAwAAL8MAAC/DAAAwgwAAMIMAADGDAAAxgwAAMwMAADNDAAA1QwAANYMAADiDAAA4wwAAAANAAABDQAAOw0AADwNAAA+DQAAPg0AAEENAABEDQAATQ0AAE0NAABXDQAAVw0AAGINAABjDQAAgQ0AAIENAADKDQAAyg0AAM8NAADPDQAA0g0AANQNAADWDQAA1g0AAN8NAADfDQAAMQ4AADEOAAA0DgAAOg4AAEcOAABODgAAsQ4AALEOAAC0DgAAvA4AAMgOAADODgAAGA8AABkPAAA1DwAANQ8AADcPAAA3DwAAOQ8AADkPAABxDwAAfg8AAIAPAACEDwAAhg8AAIcPAACNDwAAlw8AAJkPAAC8DwAAxg8AAMYPAAAtEAAAMBAAADIQAAA3EAAAORAAADoQAAA9EAAAPhAAAFgQAABZEAAAXhAAAGAQAABxEAAAdBAAAIIQAACCEAAAhRAAAIYQAACNEAAAjRAAAJ0QAACdEAAAXRMAAF8TAAASFwAAFBcAADIXAAAzFwAAUhcAAFMXAAByFwAAcxcAALQXAAC1FwAAtxcAAL0XAADGFwAAxhcAAMkXAADTFwAA3RcAAN0XAAALGAAADRgAAA8YAAAPGAAAhRgAAIYYAACpGAAAqRgAACAZAAAiGQAAJxkAACgZAAAyGQAAMhkAADkZAAA7GQAAFxoAABgaAAAbGgAAGxoAAFYaAABWGgAAWBoAAF4aAABgGgAAYBoAAGIaAABiGgAAZRoAAGwaAABzGgAAfBoAAH8aAAB/GgAAsBoAAM4aAAAAGwAAAxsAADQbAAA6GwAAPBsAADwbAABCGwAAQhsAAGsbAABzGwAAgBsAAIEbAACiGwAApRsAAKgbAACpGwAAqxsAAK0bAADmGwAA5hsAAOgbAADpGwAA7RsAAO0bAADvGwAA8RsAACwcAAAzHAAANhwAADccAADQHAAA0hwAANQcAADgHAAA4hwAAOgcAADtHAAA7RwAAPQcAAD0HAAA+BwAAPkcAADAHQAA/x0AAAwgAAAMIAAA0CAAAPAgAADvLAAA8SwAAH8tAAB/LQAA4C0AAP8tAAAqMAAALzAAAJkwAACaMAAAb6YAAHKmAAB0pgAAfaYAAJ6mAACfpgAA8KYAAPGmAAACqAAAAqgAAAaoAAAGqAAAC6gAAAuoAAAlqAAAJqgAACyoAAAsqAAAxKgAAMWoAADgqAAA8agAAP+oAAD/qAAAJqkAAC2pAABHqQAAUakAAICpAACCqQAAs6kAALOpAAC2qQAAuakAALypAAC9qQAA5akAAOWpAAApqgAALqoAADGqAAAyqgAANaoAADaqAABDqgAAQ6oAAEyqAABMqgAAfKoAAHyqAACwqgAAsKoAALKqAAC0qgAAt6oAALiqAAC+qgAAv6oAAMGqAADBqgAA7KoAAO2qAAD2qgAA9qoAAOWrAADlqwAA6KsAAOirAADtqwAA7asAAB77AAAe+wAAAP4AAA/+AAAg/gAAL/4AAJ7/AACf/wAA/QEBAP0BAQDgAgEA4AIBAHYDAQB6AwEAAQoBAAMKAQAFCgEABgoBAAwKAQAPCgEAOAoBADoKAQA/CgEAPwoBAOUKAQDmCgEAJA0BACcNAQCrDgEArA4BAP0OAQD/DgEARg8BAFAPAQCCDwEAhQ8BAAEQAQABEAEAOBABAEYQAQBwEAEAcBABAHMQAQB0EAEAfxABAIEQAQCzEAEAthABALkQAQC6EAEAwhABAMIQAQAAEQEAAhEBACcRAQArEQEALREBADQRAQBzEQEAcxEBAIARAQCBEQEAthEBAL4RAQDJEQEAzBEBAM8RAQDPEQEALxIBADESAQA0EgEANBIBADYSAQA3EgEAPhIBAD4SAQBBEgEAQRIBAN8SAQDfEgEA4xIBAOoSAQAAEwEAARMBADsTAQA8EwEAPhMBAD4TAQBAEwEAQBMBAFcTAQBXEwEAZhMBAGwTAQBwEwEAdBMBADgUAQA/FAEAQhQBAEQUAQBGFAEARhQBAF4UAQBeFAEAsBQBALAUAQCzFAEAuBQBALoUAQC6FAEAvRQBAL0UAQC/FAEAwBQBAMIUAQDDFAEArxUBAK8VAQCyFQEAtRUBALwVAQC9FQEAvxUBAMAVAQDcFQEA3RUBADMWAQA6FgEAPRYBAD0WAQA/FgEAQBYBAKsWAQCrFgEArRYBAK0WAQCwFgEAtRYBALcWAQC3FgEAHRcBAB8XAQAiFwEAJRcBACcXAQArFwEALxgBADcYAQA5GAEAOhgBADAZAQAwGQEAOxkBADwZAQA+GQEAPhkBAEMZAQBDGQEA1BkBANcZAQDaGQEA2xkBAOAZAQDgGQEAARoBAAoaAQAzGgEAOBoBADsaAQA+GgEARxoBAEcaAQBRGgEAVhoBAFkaAQBbGgEAihoBAJYaAQCYGgEAmRoBADAcAQA2HAEAOBwBAD0cAQA/HAEAPxwBAJIcAQCnHAEAqhwBALAcAQCyHAEAsxwBALUcAQC2HAEAMR0BADYdAQA6HQEAOh0BADwdAQA9HQEAPx0BAEUdAQBHHQEARx0BAJAdAQCRHQEAlR0BAJUdAQCXHQEAlx0BAPMeAQD0HgEAAB8BAAEfAQA2HwEAOh8BAEAfAQBAHwEAQh8BAEIfAQBANAEAQDQBAEc0AQBVNAEA8GoBAPRqAQAwawEANmsBAE9vAQBPbwEAj28BAJJvAQDkbwEA5G8BAJ28AQCevAEAAM8BAC3PAQAwzwEARs8BAGXRAQBl0QEAZ9EBAGnRAQBu0QEActEBAHvRAQCC0QEAhdEBAIvRAQCq0QEArdEBAELSAQBE0gEAANoBADbaAQA72gEAbNoBAHXaAQB12gEAhNoBAITaAQCb2gEAn9oBAKHaAQCv2gEAAOABAAbgAQAI4AEAGOABABvgAQAh4AEAI+ABACTgAQAm4AEAKuABAI/gAQCP4AEAMOEBADbhAQCu4gEAruIBAOziAQDv4gEA7OQBAO/kAQDQ6AEA1ugBAETpAQBK6QEA+/MBAP/zAQAgAA4AfwAOAAABDgDvAQ4AABEAAF8RAABgqQAAfKkAAAoAAAAKAAAAAKwAAACsAAAcrAAAHKwAADisAAA4rAAAVKwAAFSsAABwrAAAcKwAAIysAACMrAAAqKwAAKisAADErAAAxKwAAOCsAADgrAAA/KwAAPysAAAYrQAAGK0AADStAAA0rQAAUK0AAFCtAABsrQAAbK0AAIitAACIrQAApK0AAKStAADArQAAwK0AANytAADcrQAA+K0AAPitAAAUrgAAFK4AADCuAAAwrgAATK4AAEyuAABorgAAaK4AAISuAACErgAAoK4AAKCuAAC8rgAAvK4AANiuAADYrgAA9K4AAPSuAAAQrwAAEK8AACyvAAAsrwAASK8AAEivAABkrwAAZK8AAICvAACArwAAnK8AAJyvAAC4rwAAuK8AANSvAADUrwAA8K8AAPCvAAAMsAAADLAAACiwAAAosAAARLAAAESwAABgsAAAYLAAAHywAAB8sAAAmLAAAJiwAAC0sAAAtLAAANCwAADQsAAA7LAAAOywAAAIsQAACLEAACSxAAAksQAAQLEAAECxAABcsQAAXLEAAHixAAB4sQAAlLEAAJSxAACwsQAAsLEAAMyxAADMsQAA6LEAAOixAAAEsgAABLIAACCyAAAgsgAAPLIAADyyAABYsgAAWLIAAHSyAAB0sgAAkLIAAJCyAACssgAArLIAAMiyAADIsgAA5LIAAOSyAAAAswAAALMAAByzAAAcswAAOLMAADizAABUswAAVLMAAHCzAABwswAAjLMAAIyzAACoswAAqLMAAMSzAADEswAA4LMAAOCzAAD8swAA/LMAABi0AAAYtAAANLQAADS0AABQtAAAULQAAGy0AABstAAAiLQAAIi0AACktAAApLQAAMC0AADAtAAA3LQAANy0AAD4tAAA+LQAABS1AAAUtQAAMLUAADC1AABMtQAATLUAAGi1AABotQAA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164AANmuAADzrgAA9a4AAA+vAAARrwAAK68AAC2vAABHrwAASa8AAGOvAABlrwAAf68AAIGvAACbrwAAna8AALevAAC5rwAA068AANWvAADvrwAA8a8AAAuwAAANsAAAJ7AAACmwAABDsAAARbAAAF+wAABhsAAAe7AAAH2wAACXsAAAmbAAALOwAAC1sAAAz7AAANGwAADrsAAA7bAAAAexAAAJsQAAI7EAACWxAAA/sQAAQbEAAFuxAABdsQAAd7EAAHmxAACTsQAAlbEAAK+xAACxsQAAy7EAAM2xAADnsQAA6bEAAAOyAAAFsgAAH7IAACGyAAA7sgAAPbIAAFeyAABZsgAAc7IAAHWyAACPsgAAkbIAAKuyAACtsgAAx7IAAMmyAADjsgAA5bIAAP+yAAABswAAG7MAAB2zAAA3swAAObMAAFOzAABVswAAb7MAAHGzAACLswAAjbMAAKezAACpswAAw7MAAMWzAADfswAA4bMAAPuzAAD9swAAF7QAABm0AAAztAAANbQAAE+0AABRtAAAa7QAAG20AACHtAAAibQAAKO0AACltAAAv7QAAMG0AADbtAAA3bQAAPe0AAD5tAAAE7UAABW1AAAvtQAAMbUAAEu1AABNtQAAZ7UAAGm1AACDtQAAhbUAAJ+1AAChtQAAu7UAAL21AADXtQAA2bUAAPO1AAD1tQAAD7YAABG2AAArtgAALbYAAEe2AABJtgAAY7YAAGW2AAB/tgAAgbYAAJu2AACdtgAAt7YAALm2AADTtgAA1bYAAO+2AADxtgAAC7cAAA23AAAntwAAKbcAAEO3AABFtwAAX7cAAGG3AAB7twAAfbcAAJe3AACZtwAAs7cAALW3AADPtwAA0bcAAOu3AADttwAAB7gAAAm4AAAjuAAAJbgAAD+4AABBuAAAW7gAAF24AAB3uAAAebgAAJO4AACVuAAAr7gAALG4AADLuAAAzbgAAOe4AADpuAAAA7kAAAW5AAAfuQAAIbkAADu5AAA9uQAAV7kAAFm5AABzuQAAdbkAAI+5AACRuQAAq7kAAK25AADHuQAAybkAAOO5AADluQAA/7kAAAG6AAAbugAAHboAADe6AAA5ugAAU7oAAFW6AABvugAAcboAAIu6AACNugAAp7oAAKm6AADDugAAxboAAN+6AADhugAA+7oAAP26AAAXuwAA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MAsAADILAAAzCwAANQsAADkLAAA9CwAAPQsAAFwLAABdCwAAXwsAAGELAABxCwAAcQsAAIMLAACDCwAAhQsAAIoLAACOCwAAkAsAAJILAACVCwAAmQsAAJoLAACcCwAAnAsAAJ4LAACfCwAAowsAAKQLAACoCwAAqgsAAK4LAAC5CwAA0AsAANALAAAFDAAADAwAAA4MAAAQDAAAEgwAACgMAAAqDAAAOQwAAD0MAAA9DAAAWAwAAFoMAABdDAAAXQwAAGAMAABhDAAAgAwAAIAMAACFDAAAjAwAAI4MAACQDAAAkgwAAKgMAACqDAAAswwAALUMAAC5DAAAvQwAAL0MAADdDAAA3gwAAOAMAADhDAAA8QwAAPIMAAAEDQAADA0AAA4NAAAQDQAAEg0AADoNAAA9DQAAPQ0AAE4NAABODQAAVA0AAFYNAABfDQAAYQ0AAHoNAAB/DQAAhQ0AAJYNAACaDQAAsQ0AALMNAAC7DQAAvQ0AAL0NAADADQAAxg0AAAAPAAAADwAAQA8AAEcPAABJDwAAbA8AAIgPAACMDwAAoBAAAMUQAADHEAAAxxAAAM0QAADNEAAA0BAAAPoQAAD8EAAASBIAAEoSAABNEgAAUBIAAFYSAABYEgAAWBIAAFoSAABdEgAAYBIAAIgSAACKEgAAjRIAAJASAACwEgAAshIAALUSAAC4EgAAvhIAAMASAADAEgAAwhIAAMUSAADIEgAA1hIAANgSAAAQEwAAEhMAABUTAAAYEwAAWhMAAIATAACPEwAAoBMAAPUTAAD4EwAA/RMAAAEUAABsFgAAbxYAAH8WAACBFgAAmhYAAKAWAADqFgAA7hYAAPgWAAAAFwAAERcAAB8XAAAxFwAAQBcAAFEXAABgFwAAbBcAAG4XAABwFwAAIBgAAHgYAACAGAAAhBgAAIcYAACoGAAAqhgAAKoYAACwGAAA9RgAAAAZAAAeGQAAABoAABYaAAAFGwAAMxsAAEUbAABMGwAAgxsAAKAbAACuGwAArxsAALobAADlGwAAABwAACMcAABNHAAATxwAAFocAAB9HAAAgBwAAIgcAACQHAAAuhwAAL0cAAC/HAAA6RwAAOwcAADuHAAA8xwAAPUcAAD2HAAA+hwAAPocAAAAHQAAvx0AAAAeAAAVHwAAGB8AAB0fAAAgHwAARR8AAEgfAABNHwAA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QR4AAEEeAABDHgAAQx4AAEUeAABFHgAARx4AAEceAABJHgAASR4AAEseAABLHgAATR4AAE0eAABPHgAATx4AAFEeAABRHgAAUx4AAFMeAABVHgAAVR4AAFceAABXHgAAWR4AAFkeAABbHgAAWx4AAF0eAABdHgAAXx4AAF8eAABhHgAAYR4AAGMeAABjHgAAZR4AAGUeAABnHgAAZx4AAGkeAABpHgAAax4AAGseAABtHgAAbR4AAG8eAABvHgAAcR4AAHEeAABzHgAAcx4AAHUeAAB1HgAAdx4AAHceAAB5HgAAeR4AAHseAAB7HgAAfR4AAH0eAAB/HgAAfx4AAIEeAACBHgAAgx4AAIMeAACFHgAAhR4AAIceAACHHgAAiR4AAIkeAACLHgAAix4AAI0eAACNHgAAjx4AAI8eAACRHgAAkR4AAJMeAACTHgAAlR4AAJ0eAACfHgAAnx4AAKEeAAChHgAAox4AAKMeAAClHgAApR4AAKceAACnHgAAqR4AAKkeAACrHgAAqx4AAK0eAACtHgAArx4AAK8eAACxHgAAsR4AALMeAACzHgAAtR4AALUeAAC3HgAAtx4AALkeAAC5HgAAux4AALseAAC9HgAAvR4AAL8eAAC/HgAAwR4AAMEeAADDHgAAwx4AAMUeAADFHgAAxx4AAMceAADJHgAAyR4AAMseAADLHgAAzR4AAM0eAADPHgAAzx4AANEeAADRHgAA0x4AANMeAADVHgAA1R4AANceAADXHgAA2R4AANkeAADbHgAA2x4AAN0eAADdHgAA3x4AAN8eAADhHgAA4R4AAOMeAADjHgAA5R4AAOUeAADnHgAA5x4AAOkeAADpHgAA6x4AAOseAADtHgAA7R4AAO8eAADvHgAA8R4AAPEeAADzHgAA8x4AAPUeAAD1HgAA9x4AAPceAAD5HgAA+R4AAPseAAD7HgAA/R4AAP0eAAD/HgAABx8AABAfAAAVHwAAIB8AACcfAAAwHwAANx8AAEAfAABFHwAAUB8AAFcfAABgHwAAZx8AAHAfAAB9HwAAgB8AAIcfAACQHwAAlx8AAKAfAACnHwAAsB8AALQfAAC2HwAAtx8AAL4fAAC+HwAAwh8AAMQfAADGHwAAxx8AANAfAADTHwAA1h8AANcfAADgHwAA5x8AAPIfAAD0HwAA9h8AAPcfAABxIAAAcSAAAH8gAAB/IAAAkCAAAJwgAAAKIQAACiEAAA4hAAAPIQAAEyEAABMhAAAvIQAALyEAADQhAAA0IQAAOSEAADkhAAA8IQAAPSEAAEYhAABJIQAATiEAAE4hAABwIQAAfyEAAIQhAACEIQAA0CQAAOkkAAAwLAAAXywAAGEsAABhLAAAZSwAAGYsAABoLAAAaCwAAGosAABqLAAAbCwAAGwsAABxLAAAcSwAAHMsAAB0LAAAdiwAAH0sAACBLAAAgSwAAIMsAACDLAAAhSwAAIUsAACHLAAAhywAAIksAACJLAAAiywAAIssAACNLAAAjSwAAI8sAACPLAAAkSwAAJEsAACTLAAAkywAAJUsAACVLAAAlywAAJcsAACZLAAAmSwAAJssAACbLAAAnSwAAJ0sAACfLAAAnywAAKEsAAChLAAAoywAAKMsAAClLAAApSwAAKcsAACnLAAAqSwAAKksAACrLAAAqywAAK0sAACtLAAArywAAK8sAACxLAAAsSwAALMsAACzLAAAtSwAALUsAAC3LAAAtywAALksAAC5LAAAuywAALssAAC9LAAAvSwAAL8sAAC/LAAAwSwAAMEsAADDLAAAwywAAMUsAADFLAAAxywAAMcsAADJLAAAySwAAMssAADLLAAAzSwAAM0sAADPLAAAzywAANEsAADRLAAA0ywAANMsAADVLAAA1SwAANcsAADXLAAA2SwAANksAADbLAAA2ywAAN0sAADdLAAA3ywAAN8sAADhLAAA4SwAAOMsAADkLAAA7CwAAOwsAADuLAAA7iwAAPMsAADzLAAAAC0AACUtAAAnLQAAJy0AAC0tAAAtLQAAQaYAAEGmAABDpgAAQ6YAAEWmAABFpgAAR6YAAEemAABJpgAASaYAAEumAABLpgAATaYAAE2mAABPpgAAT6YAAFGmAABRpgAAU6YAAFOmAABVpgAAVaYAAFemAABXpgAAWaYAAFmmAABbpgAAW6YAAF2mAABdpgAAX6YAAF+mAABhpgAAYaYAAGOmAABjpgAAZaYAAGWmAABnpgAAZ6YAAGmmAABppgAAa6YAAGumAABtpgAAbaYAAIGmAACBpgAAg6YAAIOmAACFpgAAhaYAAIemAACHpgAAiaYAAImmAACLpgAAi6YAAI2mAACNpgAAj6YAAI+mAACRpgAAkaYAAJOmAACTpgAAlaYAAJWmAACXpgAAl6YAAJmmAACZpgAAm6YAAJ2mAAAjpwAAI6cAACWnAAAlpwAAJ6cAACenAAAppwAAKacAACunAAArpwAALacAAC2nAAAvpwAAMacAADOnAAAzpwAANacAADWnAAA3pwAAN6cAADmnAAA5pwAAO6cAADunAAA9pwAAPacAAD+nAAA/pwAAQacAAEGnAABDpwAAQ6cAAEWnAABFpwAAR6cAAEenAABJpwAASacAAEunAABLpwAATacAAE2nAABPpwAAT6cAAFGnAABRpwAAU6cAAFOnAABVpwAAVacAAFenAABXpwAAWacAAFmnAABbpwAAW6cAAF2nAABdpwAAX6cAAF+nAABhpwAAYacAAGOnAABjpwAAZacAAGWnAABnpwAAZ6cAAGmnAABppwAAa6cAAGunAABtpwAAbacAAG+nAAB4pwAAeqcAAHqnAAB8pwAAfKcAAH+nAAB/pwAAgacAAIGnAACDpwAAg6cAAIWnAACFpwAAh6cAAIenAACMpwAAjKcAAI6nAACOpwAAkacAAJGnAACTpwAAlacAAJenAACXpwAAmacAAJmnAACbpwAAm6cAAJ2nAACdpwAAn6cAAJ+nAAChpwAAoacAAKOnAACjpwAApacAAKWnAACnpwAAp6cAAKmnAACppwAAr6cAAK+nAAC1pwAAtacAALenAAC3pwAAuacAALmnAAC7pwAAu6cAAL2nAAC9pwAAv6cAAL+nAADBpwAAwacAAMOnAADDpwAAyKcAAMinAADKpwAAyqcAANGnAADRpwAA06cAANOnAADVpwAA1acAANenAADXpwAA2acAANmnAADypwAA9KcAAPanAAD2pwAA+KcAAPqnAAAwqwAAWqsAAFyrAABpqwAAcKsAAL+rAAAA+wAABvsAABP7AAAX+wAAQf8AAFr/AAAoBAEATwQBANgEAQD7BAEAlwUBAKEFAQCjBQEAsQUBALMFAQC5BQEAuwUBALwFAQCABwEAgAcBAIMHAQCFBwEAhwcBALAHAQCyBwEAugcBAMAMAQDyDAEAwBgBAN8YAQBgbgEAf24BABrUAQAz1AEATtQBAFTUAQBW1AEAZ9QBAILUAQCb1AEAttQBALnUAQC71AEAu9QBAL3UAQDD1AEAxdQBAM/UAQDq1AEAA9UBAB7VAQA31QEAUtUBAGvVAQCG1QEA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6B4AAOoeAADqHgAA7B4AAOweAADuHgAA7h4AAPAeAADwHgAA8h4AAPIeAAD0HgAA9B4AAPYeAAD2HgAA+B4AAPgeAAD6HgAA+h4AAPweAAD8HgAA/h4AAP4eAAAIHwAADx8AABgfAAAdHwAAKB8AAC8fAAA4HwAAPx8AAEgfAABNHwAAWR8AAFkfAABbHwAAWx8AAF0fAABdHwAAXx8AAF8fAABoHwAAbx8AAIgfAACPHwAAmB8AAJ8fAACoHwAArx8AALgfAAC8HwAAyB8AAMwfAADYHwAA2x8AAOgfAADsHwAA+B8AAPwfAAACIQAAAiEAAAchAAAHIQAACyEAAA0hAAAQIQAAEiEAABUhAAAVIQAAGSEAAB0hAAAkIQAAJCEAACYhAAAmIQAAKCEAACghAAAqIQAALSEAADAhAAAzIQAAPiEAAD8hAABFIQAARSEAAGAhAABvIQAAgyEAAIMhAAC2JAAAzyQAAAAsAAAvLAAAYCwAAGAsAABiLAAAZCwAAGcsAABnLAAAaSwAAGksAABrLAAAaywAAG0sAABwLAAAciwAAHIsAAB1LAAAdSwAAH4sAACALAAAgiwAAIIsAACELAAAhCwAAIYsAACGLAAAiCwAAIgsAACKLAAAiiwAAIwsAACMLAAAjiwAAI4sAACQLAAAkCwAAJIsAACSLAAAlCwAAJQsAACWLAAAliwAAJgsAACYLAAAmiwAAJosAACcLAAAnCwAAJ4sAACeLAAAoCwAAKAsAACiLAAAoiwAAKQsAACkLAAApiwAAKYsAACoLAAAqCwAAKosAACqLAAArCwAAKwsAACuLAAAriwAALAsAACwLAAAsiwAALIsAAC0LAAAtCwAALYsAAC2LAAAuCwAALgsAAC6LAAAuiwAALwsAAC8LAAAviwAAL4sAADALAAAwCwAAMIsAADCLAAAxCwAAMQsAADGLAAAxiwAAMgsAADILAAAyiwAAMosAADMLAAAzCwAAM4sAADOLAAA0CwAANAsAADSLAAA0iwAANQsAADULAAA1iwAANYsAADYLAAA2CwAANosAADaLAAA3CwAANwsAADeLAAA3iwAAOAsAADgLAAA4iwAAOIsAADrLAAA6ywAAO0sAADtLAAA8iwAAPIsAABApgAAQKYAAEKmAABCpgAARKYAAESmAABGpgAARqYAAEimAABIpgAASqYAAEqmAABMpgAATKYAAE6mAABOpgAAUKYAAFCmAABSpgAAUqYAAFSmAABUpgAAVqYAAFamAABYpgAAWKYAAFqmAABapgAAXKYAAFymAABepgAAXqYAAGCmAABgpgAAYqYAAGKmAABkpgAAZKYAAGamAABmpgAAaKYAAGimAABqpgAAaqYAAGymAABspgAAgKYAAICmAACCpgAAgqYAAISmAACEpgAAhqYAAIamAACIpgAAiKYAAIqmAACKpgAAjKYAAIymAACOpgAAjqYAAJCmAACQpgAAkqYAAJKmAACUpgAAlKYAAJamAACWpgAAmKYAAJimAACapgAAmqYAACKnAAAipwAAJKcAACSnAAAmpwAAJqcAACinAAAopwAAKqcAACqnAAAspwAALKcAAC6nAAAupwAAMqcAADKnAAA0pwAANKcAADanAAA2pwAAOKcAADinAAA6pwAAOqcAADynAAA8pwAAPqcAAD6nAABApwAAQKcAAEKnAABCpwAARKcAAESnAABGpwAARqcAAEinAABIpwAASqcAAEqnAABMpwAATKcAAE6nAABOpwAAUKcAAFCnAABSpwAAUqcAAFSnAABUpwAAVqcAAFanAABYpwAAWKcAAFqnAABapwAAXKcAAFynAABepwAAXqcAAGCnAABgpwAAYqcAAGKnAABkpwAAZKcAAGanAABmpwAAaKcAAGinAABqpwAAaqcAAGynAABspwAAbqcAAG6nAAB5pwAAeacAAHunAAB7pwAAfacAAH6nAACApwAAgKcAAIKnAACCpwAAhKcAAISnAACGpwAAhqcAAIunAACLpwAAjacAAI2nAACQpwAAkKcAAJKnAACSpwAAlqcAAJanAACYpwAAmKcAAJqnAACapwAAnKcAAJynAACepwAAnqcAAKCnAACgpwAAoqcAAKKnAACkpwAApKcAAKanAACmpwAAqKcAAKinAACqpwAArqcAALCnAAC0pwAAtqcAALanAAC4pwAAuKcAALqnAAC6pwAAvKcAALynAAC+pwAAvqcAAMCnAADApwAAwqcAAMKnAADEpwAAx6cAAMmnAADJpwAA0KcAANCnAADWpwAA1qcAANinAADYpwAA9acAAPWnAAAh/wAAOv8AAAAEAQAnBAEAsAQBANMEAQBwBQEAegUBAHwFAQCKBQEAjAUBAJIFAQCUBQEA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aWQgdW5pY29kZSBjb2RlIHBvaW50Y29udHJvbCBjaGFyYWN0ZXIgKFx1MDAwMC1cdTAwMUYpIGZvdW5kIHdoaWxlIHBhcnNpbmcgYSBzdHJpbmdrZXkgbXVzdCBiZSBhIHN0cmluZ2ludmFsaWQgdmFsdWU6IGV4cGVjdGVkIGtleSB0byBiZSBhIG51bWJlciBpbiBxdW90ZXNmbG9hdCBrZXkgbXVzdCBiZSBmaW5pdGUgKGdvdCBOYU4gb3IgKy8taW5mKWxvbmUgbGVhZGluZyBzdXJyb2dhdGUgaW4gaGV4IGVzY2FwZXRyYWlsaW5nIGNvbW1hdHJhaWxpbmcgY2hhcmFjdGVyc3VuZXhwZWN0ZWQgZW5kIG9mIGhleCBlc2NhcGVyZWN1cnNpb24gbGltaXQgZXhjZWVkZWQgYXQgbGluZSAgY29sdW1uIAAAAAEAAAAAAAAAbAIWAAkAAAB1AhYACAAAAEVycm9yKCwgbGluZTogLCBjb2x1bW46IJgCFgAGAAAAngIWAAgAAACmAhYACgAAAPDMGAABAAAAFwMAAAwAAAAEAAAAVwMAABwEAAAbBAAAL3J1c3RjLzU1YTIyZDJhNjMzMzRlMGZhZmYwMjAyYjcyYTMxY2U4MzJiNTYxMjUvbGlicmFyeS9hbGxvYy9zcmMvY29sbGVjdGlvbnMvYnRyZWUvbmF2aWdhdGUucnMA6AIWAF8AAADGAAAAJwAAAOgCFgBfAAAAFgIAAC8AAADoAhYAXwAAAKEAAAAkAAAAaW52YWxpZCB0eXBlOiAsIGV4cGVjdGVkIAAAAHgDFgAOAAAAhgMWAAsAQayH2AALiwEBAAAAHQQAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3NlcmRlLXdhc20tYmluZGdlbi0wLjYuNS9zcmMvbGliLnJzAAC0AxYAYgAAADUAAAAOAAAATGF5b3V0c2l6ZWFsaWduAEHAiNgAC/IJAQAAAN4DAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9zbWFydHN0cmluZy0xLjAuMS9zcmMvaW5saW5lLnJzAABIBBYAXgAAACsAAAArAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc21hcnRzdHJpbmctMS4wLjEvc3JjL2JveGVkLnJzAAAAuAQWAF0AAABBAAAADgAAALgEFgBdAAAAdgAAACQAAABodHRwOmh0dHBzOgABAAAAAAAAAOwUGAABAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc291cmNlbWFwLTkuMC4wL3NyYy9idWlsZGVyLnJzQ2Fubm90IHNldCBzb3VyY2VzIGZvciB0b21ic3RvbmUgc291cmNlIGlkAFQFFgBdAAAAeQAAAAkAAABUBRYAXQAAAH0AAAAdAAAAQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL0luY2x1ZGVkRXhjbHVkZWRVbmJvdW5kZWRpbmRleCAgb3V0IG9mIHJhbmdlOiAAAFUGFgAGAAAAWwYWAA8AAACfDBYAWAAAADEGAAADAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvd3l6LTAuNS4xL3NyYy9jb211LnJzjAYWAFQAAAAnAQAAAgAAADAwMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYxNzE4MTkyMDIxMjIyMzI0MjUyNjI3MjgyOTMwMzEzMjMzMzQzNTM2MzczODM5NDA0MTQyNDM0NDQ1NDY0NzQ4NDk1MDUxNTI1MzU0NTU1NjU3NTg1OTYwNjE2MjYzNjQ2NTY2Njc2ODY5NzA3MTcyNzM3NDc1NzY3Nzc4Nzk4MDgxODI4Mzg0ODU4Njg3ODg4OTkwOTE5MjkzOTQ5NTk2OTc5ODk5TnVsbFB0ckVycm9yY2Fubm90ICBiaXRzIGZyb20gYSAtYml0IHJlZ2lvbgDEBxYABwAAAI4UGAABAAAAywcWAA0AAADYBxYACwAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL2JpdHZlYy0xLjAuMS9zcmMvZmllbGQucnMECBYAWAAAAA4CAAACAAAAYXR0ZW1wdCB0byBqb2luIGludG8gY29sbGVjdGlvbiB3aXRoIGxlbiA+IHVzaXplOjpNQVgvcnVzdGMvNTVhMjJkMmE2MzMzNGUwZmFmZjAyMDJiNzJhMzFjZTgzMmI1NjEyNS9saWJyYXJ5L2FsbG9jL3NyYy9zdHIucnMAAAChCBYASAAAAJoAAAAKAAAAoQgWAEgAAACxAAAAFgAAAHjpFwBgAAAAFAAAAA8AAAAeBAAADAAAAAQAAABXAwAAHAQAAB8EAEG8ktgAC7YGAQAAABsDAABiYWQganNvbjogAABECRYACgAAAGxlZnRvdmVyIGN1ci9zaGlmdCBpbiB2bHEgZGVjb2RlWAkWACAAAAB2bHEgZGVjb2RlIGRpZCBub3QgcHJvZHVjZSBhbnkgdmFsdWVzAAAAgAkWACUAAAB2bHEgZGVjb2RlIGNhdXNlZCBhbiBvdmVyZmxvdwAAALAJFgAdAAAAZ290ICBzZWdtZW50cywgZXhwZWN0ZWQgNCBvciA1AADYCRYABAAAANwJFgAaAAAAYmFkIHJlZmVyZW5jZSB0byBzb3VyY2UgIwAAAAgKFgAZAAAAYmFkIHJlZmVyZW5jZSB0byBuYW1lICMALAoWABcAAABlbmNvdW50ZXJlZCBpbmNvbXBhdGlibGUgc291cmNlbWFwIGZvcm1hdAAAAEwKFgApAAAAdGhlIHByb3ZpZGVkIGRhdGEgVVJMIGlzIGludmFsaWSAChYAIAAAAGNhbm5vdCBmbGF0dGVuIHRoZSBpbmRleGVkIHNvdXJjZW1hcDogAACoChYAJgAAAGludmFsaWQgbWFnaWMgbnVtYmVyIGZvciByYW0gYnVuZGxlANgKFgAjAAAAaW52YWxpZCBtb2R1bGUgaW5kZXggaW4gcmFtIGJ1bmRsZQAABAsWACIAAABpbnZhbGlkIHJhbSBidW5kbGUgbW9kdWxlIGVudHJ5ADALFgAfAAAAbm90IGEgcmFtIGJ1bmRsZVgLFgAQAAAAaW52YWxpZCByYW5nZSBtYXBwaW5nIGluZGV4OiAAAABwCxYAHQAAAGludmFsaWQgYmFzZTY0IGNoYXJhY3RlcjogAACYCxYAGgAAAHJhbmdlICBvdXQgb2YgYm91bmRzOiAAALwLFgAGAAAAwgsWABAAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9iaXR2ZWMtMS4wLjEvc3JjL3NsaWNlL2FwaS5yc+QLFgBcAAAAjgoAAAEAAAB1OAAAIAQAABQAAAAEAAAAIQQAAAAAAAAIAAAABAAAACIEAEH8mNgAC5MEAQAAAN4DAAB8NxgASQAAANsHAAApAAAATGF5b3V0RXJyb3IvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9iaXR2ZWMtMS4wLjEvc3JjL3NsaWNlLnJzAJ8MFgBYAAAATwEAACMAAABsb2FkQml0U3BhbkVycm9yPD46OgwNFgANAAAAGQ0WAAMAAABNaXNhbGlnbmVkVG9vTG9uZ1Rvb0hpZ2hNaXNhbGlnbkVycm9yAAAAAQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3NvdXJjZW1hcC05LjAuMC9zcmMvZW5jb2Rlci5yc2ludmFsaWQgYnl0ZQAAAFgNFgBdAAAAIwAAABIAAABpbnZhbGlkIHV0ZjhYDRYAXQAAAGYAAAAhAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc2VyZGVfanNvbi0xLjAuMTI1L3NyYy9zZXIucnPwDRYAXAAAAAsGAAASAAAA8A0WAFwAAAAuCAAAMwAAAHV1dXV1dXV1YnRudWZydXV1dXV1dXV1dXV1dXV1dXV1AAAiAEHIndgACwFcAEHsntgAC8oB8A0WAFwAAAAhCAAAQAAAAFx0bGluZWNvbHVtbm9mZnNldG1hcG5hbWVzbWFwcGluZ3N2ZXJzaW9uZmlsZXNvdXJjZXNzb3VyY2VSb290c291cmNlc0NvbnRlbnRzZWN0aW9uc3JhbmdlTWFwcGluZ3N4X2ZhY2Vib29rX29mZnNldHN4X21ldHJvX21vZHVsZV9wYXRoc3hfZmFjZWJvb2tfc291cmNlc2RlYnVnX2lkAAAAHgQAAAwAAAAEAAAAVwMAAFgDAAAfBABBwKDYAAuyGQEAAAAbAwAAAAAAAAQAAAAEAAAAIwQAAC9ydXN0L2RlcHMvZGxtYWxsb2MtMC4yLjYvc3JjL2RsbWFsbG9jLnJzYXNzZXJ0aW9uIGZhaWxlZDogcHNpemUgPj0gc2l6ZSArIG1pbl9vdmVyaGVhZABYEBYAKQAAAKgEAAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogcHNpemUgPD0gc2l6ZSArIG1heF9vdmVyaGVhZAAAWBAWACkAAACuBAAADQAAAHVzZSBvZiBzdGQ6OnRocmVhZDo6Y3VycmVudCgpIGlzIG5vdCBwb3NzaWJsZSBhZnRlciB0aGUgdGhyZWFkJ3MKICAgICAgICAgbG9jYWwgZGF0YSBoYXMgYmVlbiBkZXN0cm95ZWQAABEWAGcAAABzdGQvc3JjL3RocmVhZC9jdXJyZW50LnJzAAAAcBEWABkAAADrAAAACQAAAEFjY2Vzc0Vycm9yc3RkL3NyYy90aHJlYWQvbW9kLnJzZmFpbGVkIHRvIGdlbmVyYXRlIHVuaXF1ZSB0aHJlYWQgSUQ6IGJpdHNwYWNlIGV4aGF1c3RlZAC8ERYANwAAAKcRFgAVAAAAkQQAAA0AAABzdGQvc3JjL2JhY2t0cmFjZS5yc3Vuc3VwcG9ydGVkIGJhY2t0cmFjZWRpc2FibGVkIGJhY2t0cmFjZQAMEhYAFAAAAIoBAAAdAAAAJAQAABAAAAAEAAAAJQQAACYEAABlbnRpdHkgbm90IGZvdW5kcGVybWlzc2lvbiBkZW5pZWRjb25uZWN0aW9uIHJlZnVzZWRjb25uZWN0aW9uIHJlc2V0aG9zdCB1bnJlYWNoYWJsZW5ldHdvcmsgdW5yZWFjaGFibGVjb25uZWN0aW9uIGFib3J0ZWRub3QgY29ubmVjdGVkYWRkcmVzcyBpbiB1c2VhZGRyZXNzIG5vdCBhdmFpbGFibGVuZXR3b3JrIGRvd25icm9rZW4gcGlwZWVudGl0eSBhbHJlYWR5IGV4aXN0c29wZXJhdGlvbiB3b3VsZCBibG9ja25vdCBhIGRpcmVjdG9yeWlzIGEgZGlyZWN0b3J5ZGlyZWN0b3J5IG5vdCBlbXB0eXJlYWQtb25seSBmaWxlc3lzdGVtIG9yIHN0b3JhZ2UgbWVkaXVtZmlsZXN5c3RlbSBsb29wIG9yIGluZGlyZWN0aW9uIGxpbWl0IChlLmcuIHN5bWxpbmsgbG9vcClzdGFsZSBuZXR3b3JrIGZpbGUgaGFuZGxlaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJpbnZhbGlkIGRhdGF0aW1lZCBvdXR3cml0ZSB6ZXJvbm8gc3RvcmFnZSBzcGFjZXNlZWsgb24gdW5zZWVrYWJsZSBmaWxlZmlsZXN5c3RlbSBxdW90YSBleGNlZWRlZGZpbGUgdG9vIGxhcmdlcmVzb3VyY2UgYnVzeWV4ZWN1dGFibGUgZmlsZSBidXN5ZGVhZGxvY2tjcm9zcy1kZXZpY2UgbGluayBvciByZW5hbWV0b28gbWFueSBsaW5rc2ludmFsaWQgZmlsZW5hbWVhcmd1bWVudCBsaXN0IHRvbyBsb25nb3BlcmF0aW9uIGludGVycnVwdGVkdW5zdXBwb3J0ZWR1bmV4cGVjdGVkIGVuZCBvZiBmaWxlb3V0IG9mIG1lbW9yeWluIHByb2dyZXNzb3RoZXIgZXJyb3J1bmNhdGVnb3JpemVkIGVycm9yT3NLaW5kQ3VzdG9tIChvcyBlcnJvciAAAQAAAAAAAABwFRYACwAAAPDMGAABAAAAOiBzdGQvc3JjL3BhdGgucnMAAACWFRYADwAAANICAAAhAAAAlhUWAA8AAAD5AgAALAAAAJYVFgAPAAAA+wIAACYAAACWFRYADwAAAAgDAAAnAAAAlhUWAA8AAAAUAwAAJwAAAJYVFgAPAAAAfgMAACkAAACWFRYADwAAAH8DAAArAAAAlhUWAA8AAACUAwAALwAAAJYVFgAPAAAAjAMAAC8AAACWFRYADwAAAJoDAAArAAAAc3RkL3NyYy9zeW5jL2xhenlfbG9jay5ycwAAAEgWFgAZAAAA0AAAABMAAABjYW5ub3QgcmVjdXJzaXZlbHkgYWNxdWlyZSBtdXRleHQWFgAgAAAAc3RkL3NyYy9zeXMvc3luYy9tdXRleC9ub190aHJlYWRzLnJznBYWACQAAAAUAAAACQAAAHN0ZC9zcmMvc3luYy9vbmNlLnJz0BYWABQAAADZAAAAFAAAADx1bmtub3duPu+/vXN0ZC9zcmMvLi4vLi4vYmFja3RyYWNlL3NyYy9zeW1ib2xpemUvbW9kLnJzABcWACwAAABnAQAAMAAAAAEAAAAAAAAAlBUWAAIAAAAgLSAAAQAAAAAAAABMFxYAAwAAACAgICAgICAgICAgICAgICAgICBhdCBOb3RGb3VuZFBlcm1pc3Npb25EZW5pZWRDb25uZWN0aW9uUmVmdXNlZENvbm5lY3Rpb25SZXNldEhvc3RVbnJlYWNoYWJsZU5ldHdvcmtVbnJlYWNoYWJsZUNvbm5lY3Rpb25BYm9ydGVkTm90Q29ubmVjdGVkQWRkckluVXNlQWRkck5vdEF2YWlsYWJsZU5ldHdvcmtEb3duQnJva2VuUGlwZUFscmVhZHlFeGlzdHNXb3VsZEJsb2NrTm90QURpcmVjdG9yeUlzQURpcmVjdG9yeURpcmVjdG9yeU5vdEVtcHR5UmVhZE9ubHlGaWxlc3lzdGVtRmlsZXN5c3RlbUxvb3BTdGFsZU5ldHdvcmtGaWxlSGFuZGxlSW52YWxpZElucHV0SW52YWxpZERhdGFUaW1lZE91dFdyaXRlWmVyb1N0b3JhZ2VGdWxsTm90U2Vla2FibGVGaWxlc3lzdGVtUXVvdGFFeGNlZWRlZEZpbGVUb29MYXJnZVJlc291cmNlQnVzeUV4ZWN1dGFibGVGaWxlQnVzeURlYWRsb2NrQ3Jvc3Nlc0RldmljZXNUb29NYW55TGlua3NJbnZhbGlkRmlsZW5hbWVBcmd1bWVudExpc3RUb29Mb25nSW50ZXJydXB0ZWRVbnN1cHBvcnRlZFVuZXhwZWN0ZWRFb2ZPdXRPZk1lbW9yeUluUHJvZ3Jlc3NPdGhlclVuY2F0ZWdvcml6ZWRvcGVyYXRpb24gc3VjY2Vzc2Z1bE9uY2UgaW5zdGFuY2UgaGFzIHByZXZpb3VzbHkgYmVlbiBwb2lzb25lZLIZFgAqAAAAb25lLXRpbWUgaW5pdGlhbGl6YXRpb24gbWF5IG5vdCBiZSBwZXJmb3JtZWQgcmVjdXJzaXZlbHnkGRYAOAAAABAAAAARAAAAEgAAABAAAAAQAAAAEwAAABIAAAANAAAADgAAABUAAAAMAAAACwAAABUAAAAVAAAADwAAAA4AAAATAAAAJgAAADgAAAAZAAAAFwAAAAwAAAAJAAAACgAAABAAAAAXAAAAGQAAAA4AAAANAAAAFAAAAAgAAAAbAAAADgAAABAAAAAWAAAAFQAAAAsAAAAWAAAADQAAAAsAAAALAAAAEwAAAGwSFgB8EhYAjRIWAJ8SFgCvEhYAvxIWANISFgDkEhYA8RIWAP8SFgAUExYAIBMWACsTFgBAExYAVRMWAGQTFgByExYAhRMWAKsTFgDjExYA/BMWABMUFgAfFBYAKBQWADIUFgBCFBYAWRQWAHIUFgCAFBYAjRQWAKEUFgCpFBYAxBQWANIUFgDiFBYA+BQWAA0VFgAYFRYALhUWADsVFgBGFRYAURUWAAgAAAAQAAAAEQAAAA8AAAAPAAAAEgAAABEAAAAMAAAACQAAABAAAAALAAAACgAAAA0AAAAKAAAADQAAAAwAAAARAAAAEgAAAA4AAAAWAAAADAAAAAsAAAAIAAAACQAAAAsAAAALAAAAFwAAAAwAAAAMAAAAEgAAAAgAAAAOAAAADAAAAA8AAAATAAAACwAAAAsAAAANAAAACwAAAAoAAAAFAAAADQAAAHYXFgB+FxYAjhcWAJ8XFgCuFxYAvRcWAM8XFgDgFxYA7BcWAPUXFgAFGBYAEBgWABoYFgAnGBYAMRgWAD4YFgBKGBYAWxgWAG0YFgB7GBYAkRgWAJ0YFgCoGBYAsBgWALkYFgDEGBYAzxgWAOYYFgDyGBYA/hgWABAZFgAYGRYAJhkWADIZFgBBGRYAVBkWAF8ZFgBqGRYAdxkWAIIZFgCMGRYAkRkWAAAAAAAEAAAABAAAACcEAAAoBAAAKQQAAB4EAAAMAAAABAAAAFcDAAAcBAAAHwQAQfy52AALFgEAAAAbAwAAAAAAAAQAAAAEAAAAKgQAQZy62AALyREBAAAALAQAAC0EAAAuBAAA5OgXAGIAAAAeAQAAJwAAAOToFwBiAAAAQgEAACcAAAA6IGJwb3MgPSA7IGxpbmVicG9zID0gAAABAAAAAAAAAEwdFgAJAAAAVR0WAA0AAACNFBgAAQAAAOToFwBiAAAAQwEAABEAAADk6BcAYgAAAFgBAAA/AAAA5OgXAGIAAAB5AQAAPwAAAG1hcC5zdGFydF9wb3MgPSA7IHRvdGFsX2V4dHJhX2J5dGVzID0gOyBicG9zID0gALQdFgAQAAAAxB0WABYAAADaHRYACQAAAOToFwBiAAAA4gMAAAkAAADk6BcAYgAAAB8EAAAwAAAA5OgXAGIAAAALBAAAMAAAAOToFwBiAAAATAQAABAAAADk6BcAYgAAAAwFAAA6AAAA5OgXAGIAAAAtBQAAIwAAAOToFwBiAAAAbAUAABAAAABOb0ZpbGVGb3JubyBlcnJvcnMgZW5jb3VudGVyZWQgZXZlbiB0aG91Z2ggYGRlbGF5X3NwYW5fYnVnYCBpc3N1ZWQAAHUeFgA5AAAAmCQWAGIAAACYAQAAEQAAAGVuY291bnRlcmVkIGVycm9yIHdpdGggYC1aIHRyZWF0X2Vycl9hc19idWcAyB4WACsAAACYJBYAYgAAAGUCAAANAAAATWFjaGluZUFwcGxpY2FibGVIYXNQbGFjZWhvbGRlcnNNYXliZUluY29ycmVjdFVuc3BlY2lmaWVkQ29kZVN1Z2dlc3Rpb25zdWJzdGl0dXRpb25zbXNnc2hvd19jb2RlX3doZW5faW5saW5lYXBwbGljYWJpbGl0eVN1YnN0aXR1dGlvbnBhcnRzU3Vic3RpdHV0aW9uUGFydHNuaXBwZXQAAAAFAAAAvxsYAEsAAACKBwAAJAAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaXNfY2hhcl9ib3VuZGFyeShlbmQpvxsYAEsAAACMBwAACQAAAAAAAAAMAAAABAAAAC8EAAAwBAAAYXNzZXJ0aW9uIGZhaWxlZDogc3RhcnQgPD0gZW5kL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc3djX2NvbW1vbi0wLjQwLjIvc3JjL2lucHV0LnJzADIgFgBdAAAAHwAAAAkAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9zd2NfY29tbW9uLTAuNDAuMi9zcmMvY29tbWVudHMucnOgIBYAYAAAAKcBAAAWAAAAoCAWAGAAAACsAQAADgAAAKAgFgBgAAAAswEAACcAAACgIBYAYAAAAL8BAAAyAAAAoCAWAGAAAADHAQAAFgAAAKAgFgBgAAAAywEAABYAAACgIBYAYAAAAM8BAAAXAAAAoCAWAGAAAADUAQAADgAAAKAgFgBgAAAA2wEAACgAAACgIBYAYAAAAOcBAAAzAAAAoCAWAGAAAADvAQAAFwAAAKAgFgBgAAAA8wEAABcAAACgIBYAYAAAAPkBAAAsAAAAY2Fubm90IGFkZCBwdXJlIGNvbW1lbnQgdG8gemVybyBwb3NpdGlvbtAhFgAoAAAAoCAWAGAAAAD3AQAACQAAACNfX0BfXwAAoCAWAGAAAAAxAgAALQAAAKAgFgBgAAAAZQIAAC4AAADwJxYAagAAAMwAAAAdAAAA8CcWAGoAAAB7AQAALQAAAPAnFgBqAAAAMAIAADYAAAAAAAAABAAAAAQAAAAVAQAAAAAAAAQAAAAEAAAAMQQAAC4uAAABAAAAAAAAAIgiFgACAAAAIG1hY3Jvcz7eFBgAAQAAAJwiFgAIAAAAPHF1b3RlIGV4cGFuc2lvbj4AAAC0IhYAEQAAADxhbm9uPgAA0CIWAAYAAAA8bWFjcm8gZXhwYW5zaW9uPgAAAOAiFgARAAAAPHByb2MtbWFjcm8gc291cmNlIGNvZGU+/CIWABgAAADeFBgAAQAAAOEUGAABAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc3djX2NvbW1vbi0wLjQwLjIvc3JjL3N5bnRheF9wb3MucnNhc3NlcnRpb24gZmFpbGVkOiBsaW5lX2luZGV4IDwgc2VsZi5saW5lcy5sZW4oKSBhcyBpc2l6ZQAALCMWAGIAAADBAwAACQAAAAQAAABQcmltYXJ5U3BhbkxhYmVsQnl0ZVBvc0Vycm9yIGNvbnN0cnVjdGVkIGJ1dCBub3QgZW1pdHRlZC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19jb21tb24tMC40MC4yL3NyYy9lcnJvcnMvZGlhZ25vc3RpY19idWlsZGVyLnJzAAAAFCQWAHEAAABZAQAADQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19jb21tb24tMC40MC4yL3NyYy9lcnJvcnMvbW9kLnJzAACYJBYAYgAAAFADAAAfAAAAYXNzZXJ0aW9uIGZhaWxlZDogc291cmNlX2ZpbGVfZW5kID49IGxhc3RfbGluZV9zdGFydC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19jb21tb24tMC40MC4yL3NyYy9zeW50YXhfcG9zL2FuYWx5emVfc291cmNlX2ZpbGUucnMAAEAlFgB2AAAAKgAAAAkAAABAJRYAdgAAAGoAAAAYAAAAQCUWAHYAAABqAAAALQBB8MvYAAvBCQEAAAAyBAAAMwQAADQEAABvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtACYWACgAAAAkAAAAAAAAAAIAAAAoJhYAL3J1c3RjLzU1YTIyZDJhNjMzMzRlMGZhZmYwMjAyYjcyYTMxY2U4MzJiNTYxMjUvbGlicmFyeS9zdGQvc3JjL3BhdGgucnMAQCYWAEcAAACYDAAAGwAAAEAmFgBHAAAAuwwAACEAAABAJhYARwAAAK4MAAAiAAAATWFpbkhlYWRlck1zZ0hlYWRlck1zZ0xpbmVBbmRDb2x1bW5MaW5lTnVtYmVyUXVvdGF0aW9uVW5kZXJsaW5lUHJpbWFyeVVuZGVybGluZVNlY29uZGFyeUxhYmVsUHJpbWFyeUxhYmVsU2Vjb25kYXJ5T2xkU2Nob29sTm90ZVRleHROb1N0eWxlTGV2ZWxIaWdobGlnaHRNZXNzYWdlTGludFN1YkRpYWdub3N0aWNyZW5kZXJfc3Bhbi91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3J1c3RjLWhhc2gtMS4xLjAvc3JjL2xpYi5ycwAAAHMnFgBaAAAAZwAAABsAAABzJxYAWgAAAF8AAAAbAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc3djX2NvbW1vbi0wLjQwLjIvc3JjL3N5bnRheF9wb3MvaHlnaWVuZS5ycwAA8CcWAGoAAAByAQAADQAAAE1hcmsvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAx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c1R5cGVQYXJhbWV4cHJfbmFtZVRzVW5pb25UeXBldHlwZXNUc0VudW1NZW1iZXJxdWFsaWZpZXIAAAAAAAAAAQAAAAEAAABHBAAASAQAADAAAAAIAAAASQQAAG5hbWVfdHlwZQAAAHcqGAAEAAAAfxcYAAgAAABcNhYACgAAAMw3FgAJAAAAY4QWAAgAAACohhYACAAAAFRzVHBsTGl0VHlwZVByb3RlY3RlZFRydWVQbHVzTWludXNUc05vbk51bGxFeHByVHNDYWxsU2lnbmF0dXJlRGVjbFRzQ29uc3RydWN0U2lnbmF0dXJlRGVjbFRzUHJvcGVydHlTaWduYXR1cmVUc0dldHRlclNpZ25hdHVyZVRzU2V0dGVyU2lnbmF0dXJlVHNNZXRob2RTaWduYXR1cmVUc1R1cGxlRWxlbWVudHR5VHNJbnRlcmZhY2VCb2R5VHNTYXRpc2ZpZXNFeHBycGFyYW1fbmFtZWNoZWNrX3R5cGVleHRlbmRzX3R5cGV0cnVlX3R5cGVmYWxzZV90eXBlVHNDb25zdHJ1Y3RvclR5cGVjb21wdXRlZFRzQW55S2V5d29yZFRzVW5rbm93bktleXdvcmRUc051bWJlcktleXdvcmRUc09iamVjdEtleXdvcmRUc0Jvb2xlYW5LZXl3b3JkVHNCaWdJbnRLZXl3b3JkVHNTdHJpbmdLZXl3b3JkVHNTeW1ib2xLZXl3b3JkVHNWb2lkS2V5d29yZFRzVW5kZWZpbmVkS2V5d29yZFRzTnVsbEtleXdvcmRUc05ldmVyS2V5d29yZFRzSW50cmluc2ljS2V5d29yZAAAAAAAAAAEAAAABAAAABsCAAB3KhgABAAAAPhMFgADAAAAGjkWAAgAAABjhBYACAAAABCFFgAGAAAAqIYWAAgAAADsgxYACwAAAFRzRXhwcldpdGhUeXBlQXJnc1RzSW50ZXJzZWN0aW9uVHlwZW9ial90eXBlaW5kZXhfdHlwZQAAdyoYAAQAAAB/FxgACAAAAPhMFgADAAAAGjkWAAgAAABjhBYACAAAAKiGFgAIAAAAVHNOYW1lc3BhY2VFeHBvcnREZWNsAAAASgQAQbT22AAL25kBSwQAAEwEAABNBAAATgQAAE8EAABQBAAATAQAAFEEAABSBAAAUwQAAFQEAABVBAAAVgQAAFcEAABYBAAAWQQAAFoEAABaBAAAWgQAAFoEAABaBAAAWgQAAFoEAABaBAAAWgQAAFsEAABcBAAAXQQAAF4EAABdBAAAXwQAAGAEAABOBAAATgQAAE4EAABOBAAATgQAAE4EAABOBAAATgQAAE4EAABOBAAATgQAAE4EAABOBAAATgQAAE4EAABOBAAATgQAAE4EAABOBAAATgQAAE4EAABOBAAATgQAAE4EAABOBAAATgQAAGEEAABOBAAAYgQAAGMEAABOBAAAZAQAAGUEAABmBAAAZwQAAGgEAABpBAAAagQAAGsEAABOBAAAbAQAAE4EAABtBAAAbgQAAG8EAABwBAAAcQQAAHIEAABOBAAAcwQAAHQEAAB1BAAAdgQAAHcEAAB4BAAATgQAAHkEAABOBAAAegQAAHsEAAB8BAAAfQQAAH4EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAH8EAAB/BAAAfwQAAAAAAAABAAAAAQAAADEBAABTdXBlckZuRXhwckJpbkV4cHJvcE5ld0V4cHJjYWxsZWVhcmdzT3B0Q2FsbFNlcUV4cHJBcnJheUxpdENhbGxFeHByQ29uZEV4cHJUaGlzRXhwcgCABAAADAAAAAQAAACBBAAAggQAAAQAAAAEAAAAgwQAAAAAAAABAAAAAQAAAA8AAACEBAAABAAAAAQAAAAiAgAAdyoYAAQAAADEgxYABAAAABCFFgAGAAAA0oMWAAQAAAAihRYACAAAABaFFgAMAAAA7IMWAAsAAAAqhRYACwAAAEFycm93RXhwckF3YWl0RXhwckNsYXNzRXhwclBhcmVuRXhwcnRwbFVuYXJ5RXhwcllpZWxkRXhwcmRlbGVnYXRlQXNzaWduRXhwck1lbWJlckV4cHJUcGxFbGVtZW50dGFpbGNvb2tlZFVwZGF0ZUV4cHJwcmVmaXhQYXJzZUludEVycm9yU2ltcGxlRXhwck9yU3ByZWFkc3ByZWFkTWV0YVByb3BFeHByT3B0Q2hhaW5FeHByYmFzZVNwcmVhZFByb3BTcHJlYWRFbGVtZW50U3VwZXJQcm9wRXhwcmZhaWxlZCB0byBwYXJzZSBzdHJpbmcgYXMgbnVtYmVyL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc3djX2VjbWFfcGFyc2VyLTAuMTUyLjIvc3JjL2xleGVyL2pzeC5ycwAAAJJAFgBnAAAAhwAAAC8AAABmYWlsZWQgdG8gcGFyc2UgbnVtYmVyIGFzIGNoYXIAAJJAFgBnAAAAiQAAAA4AAABxdW90YW1wYXBvc2x0Z3RuYnNwaWV4Y2xjZW50cG91bmRjdXJyZW55ZW5icnZiYXJzZWN0dW1sY29weW9yZGZsYXF1b25vdHNoeXJlZ21hY3JkZWdwbHVzbW5zdXAyc3VwM2FjdXRlbWljcm9wYXJhbWlkZG90Y2VkaWxzdXAxb3JkbXJhcXVvZnJhYzE0ZnJhYzEyZnJhYzM0aXF1ZXN0QWdyYXZlQWFjdXRlQWNpcmNBdGlsZGVBdW1sQXJpbmdBRWxpZ0NjZWRpbEVncmF2ZUVhY3V0ZUVjaXJjRXVtbElncmF2ZUlhY3V0ZUljaXJjSXVtbEVUSE50aWxkZU9ncmF2ZU9hY3V0ZU9jaXJjT3RpbGRlT3VtbHRpbWVzT3NsYXNoVWdyYXZlVWFjdXRlVWNpcmNVdW1sWWFjdXRlVEhPUk5zemxpZ2FncmF2ZWFhY3V0ZWFjaXJjYXRpbGRlYXVtbGFyaW5nYWVsaWdjY2VkaWxlZ3JhdmVlYWN1dGVlY2lyY2V1bWxpZ3JhdmVpYWN1dGVpY2lyY2l1bWxldGhudGlsZGVvZ3JhdmVvYWN1dGVvY2lyY290aWxkZW91bWxkaXZpZGVvc2xhc2h1Z3JhdmV1YWN1dGV1Y2lyY3V1bWx5YWN1dGV0aG9ybnl1bWxPRWxpZ29lbGlnU2Nhcm9uc2Nhcm9uWXVtbGZub2ZjaXJjdGlsZGVBbHBoYUJldGFHYW1tYURlbHRhRXBzaWxvblpldGFFdGFUaGV0YUlvdGFLYXBwYUxhbWJkYU11TnVYaU9taWNyb25QaVJob1NpZ21hVGF1VXBzaWxvblBoaUNoaVBzaU9tZWdhYWxwaGFiZXRhZ2FtbWFkZWx0YWVwc2lsb256ZXRhZXRhdGhldGFpb3Rha2FwcGFsYW1iZGFtdW51eGlvbWljcm9ucGlyaG9zaWdtYWZzaWdtYXRhdXVwc2lsb25waGljaGlwc2lvbWVnYXRoZXRhc3ltdXBzaWhwaXZlbnNwZW1zcHRoaW5zcHp3bmp6d2pscm1ybG1uZGFzaG1kYXNobHNxdW9yc3F1b3NicXVvbGRxdW9yZHF1b2JkcXVvZGFnZ2VyRGFnZ2VyYnVsbGhlbGxpcHBlcm1pbHByaW1lUHJpbWVsc2FxdW9yc2FxdW9vbGluZWZyYXNsZXVyb2ltYWdld2VpZXJwcmVhbHRyYWRlYWxlZnN5bWxhcnJ1YXJycmFycmRhcnJoYXJyY3JhcnJsQXJydUFycnJBcnJkQXJyaEFycmZvcmFsbHBhcnRleGlzdGVtcHR5bmFibGFpc2lubm90aW5uaXByb2RzdW1taW51c2xvd2FzdHJhZGljaW5maW5hbmdhbmRvcmNhcGN1cGludHRoZXJlNHNpbWNvbmdhc3ltcG5lZXF1aXZsZWdlc3Vic3VwbnN1YnN1YmVzdXBlb3BsdXNvdGltZXNwZXJwc2RvdGxjZWlscmNlaWxsZmxvb3JyZmxvb3JsYW5ncmFuZ2xvenNwYWRlc2NsdWJzaGVhcnRzZGlhbXOFBAAABAAAAAQAAABeAgAAAAAAAAEAAAABAAAADwAAAEV4cG9ydEFsbHNyY3R5cGVfb25seUV4cG9ydERlY2xkZWNsAIYEAAAMAAAABAAAAIcEAACIBAAABAAAAAQAAACJBAAAAAAAAAQAAAAEAAAAPAIAAHNwZWNpZmllcnNwaGFzZQB3KhgABAAAADxGFgAKAAAA8UUWAAMAAAD0RRYACQAAANMYGAAEAAAARkYWAAUAAABJbXBvcnREZWNsSW1wb3J0RXhwb3J0TmFtZWRFeHBvcnREZWZhdWx0RGVjbEV4cG9ydERlZmF1bHRFeHByVHNJbXBvcnRFcXVhbHNUc0V4cG9ydEFzc2lnbm1lbnRUc05hbWVzcGFjZUV4cG9ydEV2YWx1YXRpb25Tb3VyY2VEZWZlck5hbWVkRXhwb3J0TmFtZXNwYWNlRGVmYXVsdE5hbWVkRXhwb3J0TmFtZWRTcGVjaWZpZXJvcmlnZXhwb3J0ZWRJbXBvcnROYW1lZFNwZWNpZmllcmxvY2FsaW1wb3J0ZWRJbXBvcnRTdGFyQXNTcGVjaWZpZXJFeHBvcnREZWZhdWx0U3BlY2lmaWVySW1wb3J0RGVmYXVsdFNwZWNpZmllckV4cG9ydE5hbWVzcGFjZVNwZWNpZmllcgAAACwXGAACAAAADxoYAAEAAACtGRgAAQAAAJAXGAABAAAAdRcYAAMAAACbFBgAAQAAACsXGAABAAAA8MwYAAEAAAB4FxgAAQAAAHkXGAABAAAALhcYAAEAAAAvFxgAAQAAAI0UGAABAAAAzhgYAAEAAABAFxgAAQAAAHRlbXBsYXRlIHRva2VuICg0SBYAEAAAAPDMGAABAAAAcBcYAAEAAABUFxgAAgAAAG8XGAABAAAABRUYAAIAAAAHFRgAAgAAAJwUGAABAAAAc3RyaW5nIGxpdGVyYWwgKIRIFgAQAAAAIDAYAAIAAADwzBgAAQAAAHJlZ2V4cCBsaXRlcmFsICisSBYAEAAAACAwGAACAAAA8MwYAAEAAABudW1lcmljIGxpdGVyYWwgKAAAANRIFgARAAAAIDAYAAIAAADwzBgAAQAAAGJpZ2ludCBsaXRlcmFsICgASRYAEAAAACAwGAACAAAA8MwYAAEAAABqc3ggbmFtZSAoAAAoSRYACgAAAPDMGAABAAAAanN4IHRleHQgKAAAREkWAAoAAADwzBgAAQAAAOjwFwARAAAAPiAoanN4IHRhZyBlbmQpAGhJFgAPAAAAGBkYAAIAAAA8bGV4aW5nIGVycm9yOiAAiEkWAA8AAADhFBgAAQAAAAEAAAAAAAAAkBcYAAEAAAABAAAAAAAAAHAXGAABAAAAaW50ZXJuYWwgZXJyb3I6IGVudGVyZWQgdW5yZWFjaGFibGUgY29kZTogVXNpbmcgaXMgbm90IGEgdmFsaWQgZGVjbGFyYXRpb24gZm9yIGBkZWNsYXJlYCBrZXl3b3JkyEkWAGAAAABA7BcAbwAAAAELAAAcAAAAcGFja2FnZS91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3NtYXJ0c3RyaW5nLTEuMC4xL3NyYy9vcHMucnMAAEdKFgBbAAAAegAAADsAAAAAAAAA9CgWAAgAAAA0KRYAJQAAACfLPdvRgDeztCoWAAEAAAC8KhYAAgAAAI1/ua40M6nWXCoWAAIAAABsKhYACQAAACfLPdvRgDezSWRlbnROYW1lL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc3djX2VjbWFfcGFyc2VyLTAuMTUyLjIvc3JjL2xleGVyL3V0aWwucnMAAABY6xcAWwAAAOUAAAAmAAAAWOsXAFsAAAD6AAAAQQAAAFjrFwBbAAAA0AAAAA4AAABY6xcAWwAAACsCAAAOAAAAWOsXAFsAAAAuAgAADgAAAFByaXZhdGVQdWJsaWMAAAAAAAAAAQAAAAEAAAAPAAAARm5EZWNsaWRlbnRSZXN0UGF0ZG90M190b2tlbmFyZ0lmU3RtdHRlc3Rjb25zYWx0QXJyYXlQYXRlbGVtc1BhdIoEAAAEAAAABAAAAIoBAABGb3JTdG10aW5pdEFzc2lnblBhdE9iamVjdFBhdE51bUNvbXB1dGVkQmlnSW50RXhwclN0bXRXaXRoU3RtdENsYXNzRGVjbEJyZWFrU3RtdGxhYmVsRW1wdHlTdG10Rm9ySW5TdG10Rm9yT2ZTdG10VGhyb3dTdG10V2hpbGVTdG10AACLBAAAIAAAAAgAAAAMAgAAjAQAAAQAAAAEAAAADQIAAD0EAAAMAAAABAAAALABAAAAAAAAAQAAAAEAAABCBAAAa2V5aXNfc3RhdGljYWNjZXNzaWJpbGl0eWlzX29wdGlvbmFsaXNfb3ZlcnJpZGVkZWZpbml0ZQB3KhgABAAAAPhMFgADAAAAZCwYAAUAAACohhYACAAAAPtMFgAJAAAAyIMWAAoAAAAETRYADQAAAOGDFgALAAAAEU0WAAsAAAAcTRYACwAAAH8XGAAIAAAAMBcYAAcAAAAnTRYACAAAAENsYXNzUHJvcERlY29yYXRvclJldHVyblN0bXRTd2l0Y2hDYXNlU3dpdGNoU3RtdGRpc2NyaW1pbmFudGNhc2VzQ2F0Y2hDbGF1c2VwYXJhbURvV2hpbGVTdG10TGFiZWxlZFN0bXRDb25zdHJ1Y3RvclByaXZhdGVNZXRob2RQcml2YXRlUHJvcFRzSW5kZXhTaWduYXR1cmVTdGF0aWNCbG9ja0F1dG9BY2Nlc3NvcgAAAI0EAAAEAAAABAAAAI4EAAAAAAAAAQAAAAEAAACPBAAAdyoYAAQAAAD4TBYAAwAAAEQZGAAIAAAAcoQWAAQAAAD7TBYACQAAAARNFgANAAAA4YMWAAsAAAARTRYACwAAABxNFgALAAAAQ2xhc3NNZXRob2QAkAQAAAwAAAAEAAAAkQQAAJIEAAAYAAAABAAAAJMEAAB3KhgABAAAAMSDFgAEAAAA+EwWAAMAAAAQhRYABgAAANKDFgAEAAAABE0WAA0AAAARTRYACwAAAJQEAAAQAAAACAAAAJUEAAB3KhgABAAAAMSDFgAEAAAA+EwWAAMAAABkLBgABQAAAKiGFgAIAAAA+0wWAAkAAADIgxYACgAAAARNFgANAAAAEU0WAAsAAAAcTRYACwAAAH8XGAAIAAAAJ00WAAgAAABNb2R1bGVEZWNsU3RtdEFzc2lnblBhdFByb3BDb250aW51ZVN0bXREZWJ1Z2dlclN0bXQAlgQAACAAAAAIAAAAlwQAAHcqGAAEAAAA+EwWAAMAAABkLBgABQAAAKiGFgAIAAAA+0wWAAkAAADIgxYACgAAAARNFgANAAAA4YMWAAsAAAAcTRYACwAAACdNFgAIAAAAVmFyRGVjbGFyYXRvckJpbmRpbmdJZGVudEtleVZhbHVlUGF0UHJvcHN0cnVjdCBUc1N5bnRheAAAAAAACAAAAAQAAACYBAAAQ2FwYWNpdHlPdmVyZmxvd0FsbG9jRXJybGF5b3V0L3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc21hbGx2ZWMtMS4xMy4yL3NyYy9saWIucnMAglAWAFkAAABSAQAALgAAAIJQFgBZAAAAzgQAAA4AAABhc3NlcnRpb24gZmFpbGVkOiBpbmRleCA8IGxlbgAAAIJQFgBZAAAASAUAAA0AAABhc3NlcnRpb24gZmFpbGVkOiBuZXdfY2FwID49IGxlboJQFgBZAAAAmQQAAA0AAABjb250ZXh0LmN1cnJlbnQoKSBpZiBQYXJlblN0bXQsIHNvIHByZXYgdG9rZW4gY2Fubm90IGJlIE5vbmW8KxgAaQAAACcCAAAaAAAADAAAALwrGABpAAAA5QEAAC0AAABVbmV4cGVjdGVkIGVvZi91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19lY21hX3BhcnNlci0wLjE1Mi4yL3NyYy9lcnJvci5yc0RlY2xhcmF0aW9uIGlzIG5vdCBhbGxvd2VkVXNpbmcgZGVjbGFyYXRpb24gaXMgbm90IGFsbG93ZWRVc2luZyBkZWNsYXJhdGlvbiBpcyBub3QgYWxsb3dlZCBpbiBmb3ItaW4gbG9vcFVzaW5nIGRlY2xhcmF0aW9uIGlzIG5vdCBlbmFibGVkLiBTZXQganNjLnBhcnNlci5leHBsaWNpdFJlc291cmNlTWFuYWdlbWVudCB0byB0cnVlVXNpbmcgZGVjbGFyYXRpb24gb25seSBhbGxvd3MgaWRlbnRpZmllcnNVc2luZyBkZWNsYXJhdGlvbiByZXF1aXJlcyBpbml0aWFsaXplcnByaXZhdGUgbmFtZXMgYXJlIG5vdCBhbGxvd2VkIGluIGludGVyZmFjZUludmFsaWQgYHN1cGVyKClgSW52YWxpZCBhY2Nlc3MgdG8gc3VwZXJJbmRleCBzdXBlciB3aXRoIHByaXZhdGUgbmFtZSBpcyBub3QgYWxsb3dlZCduZXcudGFyZ2V0JyBpcyBvbmx5IGFsbG93ZWQgaW4gdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiwgZnVuY3Rpb24gZXhwcmVzc2lvbiwgb3IgY2xhc3MuSW1wb3J0IGlzIG5vdCBhbGxvd2VkIGhlcmVBbiBhcnJvdyBmdW5jdGlvbiBpcyBub3QgYWxsb3dlZCBoZXJlYGV4cG9ydGAgaXMgbm90IGFsbG93ZWQgaGVyZUEgZ2V0dGVyIG9yIGEgc2V0dGVyIGNhbm5vdCBiZSByZWFkb25seUEgZ2V0dGVyIG9yIGEgc2V0dGVyIGNhbm5vdCBiZSBvcHRpb25hbEEgYGdldGAgYWNjZXNzb3IgY2Fubm90IGhhdmUgcGFyYW1ldGVyc0EgYHNldGAgYWNjZXNzb3IgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHBhcmFtZXRlcnRvcCBsZXZlbCBhd2FpdCBpcyBvbmx5IGFsbG93ZWQgaW4gbW9kdWxlTGVnYWN5IGRlY2ltYWwgZXNjYXBlIGlzIG5vdCBwZXJtaXR0ZWQgaW4gc3RyaWN0IG1vZGVMZWdhY3kgb2N0YWwgZXNjYXBlIGlzIG5vdCBwZXJtaXR0ZWQgaW4gc3RyaWN0IG1vZGVJbnZhbGlkIGNoYXJhY3RlciBpbiBpZGVudGlmaWVyYSBiaW5hcnlhbiBvY3RhbGEgZGVjaW1hbGEgaGV4YWRlY2ltYWxFeHBlY3RlZCAgZGlnaXQAAADuVRYACQAAAPdVFgAGAAAAylEWAGMAAABCAQAAGgAAAFNldHRlciBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBwYXJhbWV0ZXJSZXN0IHBhdHRlcm4gaXMgbm90IGFsbG93ZWQgaW4gc2V0dGVyVW50ZXJtaW5hdGVkIGJsb2NrIGNvbW1lbnRVbnRlcm1pbmF0ZWQgc3RyaW5nIGNvbnN0YW50RXhwZWN0ZWQgdW5pY29kZSBlc2NhcGVVbmV4cGVjdGVkIGVzY2FwZSBzZXF1ZW5jZSBpbiByZXNlcnZlZCB3b3JkOiAAulYWAC0AAABVbnRlcm1pbmF0ZWQgcmVnZXhwIGxpdGVyYWxVbnRlcm1pbmF0ZWQgdGVtcGxhdGVJZGVudGlmaWVyIGNhbm5vdCBmb2xsb3cgbnVtYmVyVW5leHBlY3RlZCBjaGFyYWN0ZXIgP1cWABUAAABJbnZhbGlkIHN0cmluZyBlc2NhcGVJbnZhbGlkIHVuaWNvZGUgZXNjYXBlQmFkIGNoYXJhY3RlciBlc2NhcGUgc2VxdWVuY2UsIGV4cGVjdGVkIACHVxYAKAAAAEV4cGVjdGVkICssIC0gb3IgZGVjaW1hbCBkaWdpdCBhZnRlciBlTGVnYWN5IGNvbW1lbnRzIGNhbm5vdCBiZSB1c2VkIGluIG1vZHVsZSBjb2RlYCBjYW5ub3QgYmUgdXNlZCBhcyBhbiBpZGVudGlmaWVyIGluIHN0cmljdCBtb2RlAEAXGAABAAAAC1gWADAAAABgYXdhaXRgIGNhbm5vdCBiZSB1c2VkIGFzIGFuIGlkZW50aWZpZXIgaW4gYW4gYXN5bmMgY29udGV4dCdldmFsJyBhbmQgJ2FyZ3VtZW50cycgY2Fubm90IGJlIHVzZWQgYXMgYSBiaW5kaW5nIGlkZW50aWZpZXIgaW4gc3RyaWN0IG1vZGUnYXJndW1lbnRzJyBpcyBvbmx5IGFsbG93ZWQgaW4gZnVuY3Rpb25zIGFuZCBjbGFzcyBtZXRob2RzSWxsZWdhbCAndXNlIHN0cmljdCcgZGlyZWN0aXZlIGluIGZ1bmN0aW9uIHdpdGggbm9uLXNpbXBsZSBwYXJhbWV0ZXIgbGlzdC4nKionIGNhbm5vdCBiZSBhcHBsaWVkIHRvIHVuYXJ5L2F3YWl0IGV4cHJlc3Npb24uVW5leHBlY3RlZCB0b2tlbiAnIydMaW5lQnJlYWsgY2Fubm90IGZvbGxvdyAndGhyb3cnVW5leHBlY3RlZCBsaW5lIGJyZWFrIGJldHdlZW4gYXJyb3cgaGVhZCBhbmQgYXJyb3dVbmV4cGVjdGVkIHRva2VuIGBgLiBFeHBlY3RlZCAA7VkWABIAAAD/WRYADAAAACAsIG9yIAAAH1oWAAMAAAAgb3IgVW5leHBlY3RlZCB0b2tlbi4gRGlkIHlvdSBtZWFuIAAwWhYAHwAAAG8XGAABAAAAY2Fubm90IGltcG9ydCBhcyByZXNlcnZlZCB3b3JkYXNzaWdubWVudCBwcm9wZXJ0eSBpcyBpbnZhbGlkIHN5bnRheEV4cGVjdGVkICcnLCBnb3QgJycAAKNaFgAKAAAArVoWAAgAAAC1WhYAAQAAAEV4cGVjdGVkICc7JywgJ30nIG9yIDxlb2Y+YXdhaXQqIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgYXN5bmMgZnVuY3Rpb25zIHByb3Bvc2FsLiBVc2UgUHJvbWlzZS5hbGwoKSBpbnN0ZWFkLkNhbm5vdCB1c2UgYSByZXNlcnZlZCB3b3JkIGFzIGEgc2hvcnRoYW5kIHByb3BlcnR5TnVsbGlzaCBjb2FsZXNjaW5nIG9wZXJhdG9yKD8/KSByZXF1aXJlcyBwYXJlbnMgd2hlbiBtaXhpbmcgd2l0aCBsb2dpY2FsIG9wZXJhdG9yc0Egc3dpdGNoIGJsb2NrIGNhbm5vdCBoYXZlIG11bHRpcGxlIGRlZmF1bHRzVHJhaWxpbmcgY29tbWEgaXNuJ3QgcGVybWl0dGVkIGFmdGVyIGEgcmVzdCBlbGVtZW50UmVzdCBlbGVtZW50IG11c3QgYmUgZmluYWwgZWxlbWVudFBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbiBjYW5ub3QgY29udGFpbiBzcHJlYWQgb3BlcmF0b3JQYXJlbnRoZXNpemVkIGV4cHJlc3Npb24gY2Fubm90IGJlIGVtcHR5Tm90IGEgcGF0dGVybk5vdCBhbiBleHByZXNzaW9uQ2Fubm90IGFzc2lnbiB0byB0aGlzSW52YWxpZCBhc3NpZ25tZW50IHRhcmdldEV4cGVjdGVkIGlkZW50RXhwZWN0ZWQgJzsnIG9yIGxpbmUgYnJlYWtMYWJlbCAgaXMgYWxyZWFkeSBkZWNsYXJlZAAAABddFgAGAAAAHV0WABQAAABBbiBhc3luYyBmdW5jdGlvbiBjYW5ub3QgYmUgZ2VuZXJhdG9yJ2ltcG9ydCcsIGFuZCAnZXhwb3J0JyBhcmUgbm90IHBlcm1pdHRlZCBoZXJlJ2ltcG9ydCcsIGFuZCAnZXhwb3J0JyBjYW5ub3QgYmUgdXNlZCBvdXRzaWRlIG9mIG1vZHVsZSBjb2RlJ2ltcG9ydC5tZXRhJyBjYW5ub3QgYmUgdXNlZCBvdXRzaWRlIG9mIG1vZHVsZSBjb2RlLkRlc3RydWN0dXJpbmcgYmluZGluZ3MgcmVxdWlyZSBpbml0aWFsaXplcnNXaXRoIHN0YXRlbWVudCBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGVSZXR1cm4gc3RhdGVtZW50IGlzIG5vdCBhbGxvd2VkIGhlcmVFeHBlY3RlZCBvbmUgdmFyaWFibGUgYmluZGluZ1VuZXhwZWN0ZWQgaW5pdGlhbGl6ZXIgaW4gZm9yIGluL29mIGxvb3BHZW5lcmF0b3Igb3IgYXN5bmMgZnVuY3Rpb24gY2Fubm90IGJlIGxhYmVsbGVkRnVuY3Rpb24gY2Fubm90IGJlIGxhYmVsbGVkIGluIHN0cmljdCBtb2RlJ3lpZWxkJyBjYW5ub3QgYmUgdXNlZCBhcyBhIHBhcmFtZXRlciB3aXRoaW4gZ2VuZXJhdG9yYGF3YWl0YCBleHByZXNzaW9ucyBjYW5ub3QgYmUgdXNlZCBpbiBhIHBhcmFtZXRlciBpbml0aWFsaXplci5mb3IgYXdhaXQgc3ludGF4IGlzIHZhbGlkIG9ubHkgZm9yIGZvci1vZiBzdGF0ZW1lbnRhd2FpdCBpc24ndCBhbGxvd2VkIGluIG5vbi1hc3luYyBmdW5jdGlvblVudGVybWluYXRlZCBKU1ggY29udGVudHNKU1ggYXR0cmlidXRlcyBtdXN0IG9ubHkgYmUgYXNzaWduZWQgYSBub24tZW1wdHkgZXhwcmVzc2lvbkpTWCB2YWx1ZSBzaG91bGQgYmUgZWl0aGVyIGFuIGV4cHJlc3Npb24gb3IgYSBxdW90ZWQgSlNYIHRleHRFeHBlY3RlZCBjb3JyZXNwb25kaW5nIEpTWCBjbG9zaW5nIHRhZyBmb3IgPD5FeHBlY3RlZCBjb3JyZXNwb25kaW5nIEpTWCBjbG9zaW5nIHRhZyBmb3IgPAAAAK1gFgAsAAAA4RQYAAEAAABMZWFkaW5nIGRlY29yYXRvcnMgbXVzdCBiZSBhdHRhY2hlZCB0byBhIGNsYXNzIGRlY2xhcmF0aW9uVXNpbmcgdGhlIGV4cG9ydCBrZXl3b3JkIGJldHdlZW4gYSBkZWNvcmF0b3IgYW5kIGEgY2xhc3MgaXMgbm90IGFsbG93ZWQuIFBsZWFzZSB1c2UgYGV4cG9ydCBAZGVjIGNsYXNzYCBpbnN0ZWFkLkEgcmVxdWlyZWQgZWxlbWVudCBjYW5ub3QgZm9sbG93IGFuIG9wdGlvbmFsIGVsZW1lbnQuVHlwZXNjcmlwdCBwYXJhbWV0ZXIgcHJvcGVydHkgbXVzdCBiZSBhbiBpZGVudGlmaWVyIG9yIGFzc2lnbm1lbnQgcGF0dGVyblVuZXhwZWN0ZWQgc3BhY2UgYmV0d2VlbiAjIGFuZCBpZGVudGlmaWVyQ29uc3RydWN0b3IgY2FuJ3QgYmUgYW4gYXN5bmMgZnVuY3Rpb25DbGFzc2VzIG1heSBub3QgaGF2ZSBhIG5vbi1zdGF0aWMgZmllbGQgbmFtZWQgJ2NvbnN0cnVjdG9yJ0NsYXNzZXMgY2FuJ3QgaGF2ZSBhIHByaXZhdGUgZmllbGQgbmFtZWQgJyNjb25zdHJ1Y3RvcicuJyBtb2RpZmllciBjYW5ub3QgYmUgdXNlZCB3aXRoIGEgcHJpdmF0ZSBpZGVudGlmaWVyAAAAtVoWAAEAAADWYhYAMwAAAENsYXNzIGNvbnN0cnVjdG9yIGNhbid0IGJlIGFuIGFjY2Vzc29yLkEgbWV0aG9kIGNhbm5vdCBiZSByZWFkb25seUEgY29uc3RydWN0b3IgY2Fubm90IGJlIGdlbmVyYXRvckEgY2xhc3MgY2FuIG9ubHkgaGF2ZSBvbmUgY29uc3RydWN0b3JBIGJpbmRpbmcgcGF0dGVybiBwYXJhbWV0ZXIgY2Fubm90IGJlIG9wdGlvbmFsIGluIGFuIGltcGxlbWVudGF0aW9uIHNpZ25hdHVyZS5TdXBlciBjYWxsIGNhbm5vdCBiZSBvcHRpb25hbENvbnN0cnVjdG9yIGluL2FmdGVyIGFuIG9wdGlvbmFsIGNoYWluaW5nIGlzIG5vdCBhbGxvd2VkLlRhZ2dlZCB0ZW1wbGF0ZSBsaXRlcmFsIGlzIG5vdCBhbGxvd2VkIGluIG9wdGlvbmFsIGNoYWluLlRyYWlsaW5nIGNvbW1hIGlzIGRpc2FsbG93ZWQgaW5zaWRlIGltcG9ydCguLi4pIGFyZ3VtZW50c2V4cG9ydCBkZWZhdWx0IHN0YXRlbWVudHMgcmVxdWlyZWQgZnJvbSAnLi4uJztgIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgYGZyb21gIGNsYXVzZQAAQBcYAAEAAADoZBYAJgAAAGAuLi5gIG11c3QgYmUgZm9sbG93ZWQgYnkgYW4gaWRlbnRpZmllciBpbiBkZWNsYXJhdGlvbiBjb250ZXh0c0EgbnVtZXJpYyBzZXBhcmF0b3IgaXMgb25seSBhbGxvd2VkIGJldHdlZW4gdHdvIGRpZ2l0c0Egc3RyaW5nIGxpdGVyYWwgY2Fubm90IGJlIHVzZWQgYXMgYW4gaW1wb3J0ZWQgYmluZGluZy4KLSBEaWQgeW91IG1lYW4gYGltcG9ydCB7ICIiIGFzIGZvbyB9YD8AlWUWAFIAAADnZRYADAAAAEEgc3RyaW5nIGxpdGVyYWwgY2Fubm90IGJlIHVzZWQgYXMgYW4gZXhwb3J0ZWQgYmluZGluZyB3aXRob3V0IGBmcm9tYC4nY29uc3QnIGRlY2xhcmF0aW9ucyBtdXN0IGJlIGluaXRpYWxpemVkRHVwbGljYXRlZCByZWd1bGFyIGV4cHJlc3Npb24gZmxhZyAnJy5yZhYAJAAAAJZmFgACAAAAVW5rbm93biByZWd1bGFyIGV4cHJlc3Npb24gZmxhZ3MuRXhwZWN0ZWQgYW4gaWRlbnRpZmllckV4cGVjdGVkIGEgc2VtaWNvbG9uVHJhaWxpbmcgY29tbWEgaXMgbm90IGFsbG93ZWRBIHJlc3QgcGFyYW1ldGVyIG11c3QgYmUgbGFzdCBpbiBhIHBhcmFtZXRlciBsaXN0UGFyYW1ldGVyIGNhbm5vdCBoYXZlIHF1ZXN0aW9uIG1hcmsgYW5kIGluaXRpYWxpemVyJyBtb2RpZmllciBtdXN0IHByZWNlZGUgJycgbW9kaWZpZXIutVoWAAEAAAB0ZxYAGQAAAI1nFgALAAAAJyBtb2RpZmllciBhbHJlYWR5IHNlZW4utVoWAAEAAACwZxYAGAAAAGBkZWNsYXJlYCBtb2RpZmllciBjYW5ub3QgYXBwZWFyIG9uIGNsYXNzIGVsZW1lbnRzIG9mIHRoaXMga2luZGBkZWNsYXJlYCBtb2RpZmllciBub3QgYWxsb3dlZCBmb3IgY29kZSBhbHJlYWR5IGluIGFuIGFtYmllbnQgY29udGV4dGBhc3luY2AgbW9kaWZpZXIgY2Fubm90IGJlIHVzZWQgaGVyZUEgcmVzdCBwYXJhbWV0ZXIgY2Fubm90IGJlIG9wdGlvbmFsQSByZXN0IHBhcmFtZXRlciBjYW5ub3QgaGF2ZSBhbiBpbml0aWFsaXplcmpzYy50YXJnZXQgc2hvdWxkIGJlIGVzNSBvciB1cHBlciB0byB1c2UgZ2V0dGVyIC8gc2V0dGVyTGVnYWN5IG9jdGFsIGxpdGVyYWxzIGFyZSBub3QgYXZhaWxhYmxlIHdoZW4gdGFyZ2V0aW5nIEVDTUFTY3JpcHQgNSBhbmQgaGlnaGVyJyBtb2RpZmllciBjYW5ub3QgYXBwZWFyIG9uIGEgY29uc3RydWN0b3IgZGVjbGFyYXRpb24AAAC1WhYAAQAAAFRpFgA1AAAAVHlwZSBwYXJhbWV0ZXJzIGNhbm5vdCBhcHBlYXIgb24gYSBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbkFuIGluZGV4IHNpZ25hdHVyZSBtdXN0IGhhdmUgZXhhY3RseSBvbmUgcGFyYW1ldGVyVHlwZSBwYXJhbWV0ZXIgbGlzdCBjYW5ub3QgYmUgZW1wdHlJbnZhbGlkIHVzZSBvZiAnYXJndW1lbnRzJyBpbiBzdHJpY3QgbW9kZSdkZWxldGUnIGNhbm5vdCBiZSBjYWxsZWQgb24gYW4gaWRlbnRpZmllciBpbiBzdHJpY3QgbW9kZUEgJ2JyZWFrJyBzdGF0ZW1lbnQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoaW4gYW4gZW5jbG9zaW5nIGl0ZXJhdGlvbiBvciBzd2l0Y2ggc3RhdGVtZW50VGhlIGxlZnQtaGFuZCBzaWRlIG9mIGEgYGZvci4uLm9mYCBzdGF0ZW1lbnQgbWF5IG5vdCBiZSBgYXN5bmNgSnVtcCB0YXJnZXQgY2Fubm90IGNyb3NzIGZ1bmN0aW9uIGJvdW5kYXJ5RXhwcmVzc2lvbiBleHBlY3RlZHR5cGUgZXhwZWN0ZWREdXBsaWNhdGUgbGFiZWxBICdjb250aW51ZScgc3RhdGVtZW50IGNhbiBvbmx5IGp1bXAgdG8gYSBsYWJlbCBvZiBhbiBlbmNsb3NpbmcgaXRlcmF0aW9uIHN0YXRlbWVudEEgJ2JyZWFrJyBzdGF0ZW1lbnQgY2FuIG9ubHkganVtcCB0byBhIGxhYmVsIG9mIGFuIGVuY2xvc2luZyBzdGF0ZW1lbnRWYXJpYWJsZSBkZWNsYXJhdGlvbiBsaXN0IGNhbm5vdCBiZSBlbXB0eWxpdGVyYWwgaW4gYW4gaW1wb3J0IHR5cGUgc2hvdWxkIGJlIHN0cmluZyBsaXRlcmFsQW4gb2JqZWN0IG1lbWJlciBjYW5ub3QgYmUgZGVjbGFyZWQgb3B0aW9uYWxDb21wdXRlZCBwcm9wZXJ0eSBuYW1lcyBhcmUgbm90IGFsbG93ZWQgaW4gZW51bXNBIGNvbW1hIGV4cHJlc3Npb24gaXMgbm90IGFsbG93ZWQgaW4gYSBjb21wdXRlZCBwcm9wZXJ0eSBuYW1lYGV4dGVuZHNgIGNsYXVzZSBhbHJlYWR5IHNlZW4uJ2V4dGVuZHMnIGNsYXVzZSBtdXN0IHByZWNlZGUgJ2ltcGxlbWVudHMnIGNsYXVzZS5DbGFzc2VzIGNhbiBvbmx5IGV4dGVuZCBhIHNpbmdsZSBjbGFzc2BpbXBsZW1lbnRzYCBjbGF1c2UgYWxyZWFkeSBzZWVuQW4gaW1wbGVtZW50YXRpb24gY2Fubm90IGJlIGRlY2xhcmVkIGluIGFtYmllbnQgY29udGV4dHNNb2RpZmllcnMgY2Fubm90IGFwcGVhciBoZXJlTWVyZ2UgY29uZmxpY3QgbWFya2VyIGVuY291bnRlcmVkLlR5cGUgYW5ub3RhdGlvbiBjYW5ub3QgYXBwZWFyIG9uIGEgY29uc3RydWN0b3IgZGVjbGFyYXRpb25DYXRjaCBjbGF1c2UgdmFyaWFibGUgY2Fubm90IGhhdmUgYSB0eXBlIGFubm90YXRpb25gYWJzdHJhY3RgIG1vZGlmaWVyIGNhbiBvbmx5IGFwcGVhciBvbiBhIGNsYXNzIG9yIG1ldGhvZCBkZWNsYXJhdGlvbicgbW9kaWZpZXIgY2Fubm90IGJlIHVzZWQgd2l0aCAnAAAAtVoWAAEAAADFbhYAIAAAAI1nFgALAAAAQWJzdHJhY3QgbWV0aG9kcyBjYW4gb25seSBhcHBlYXIgd2l0aGluIGFuIGFic3RyYWN0IGNsYXNzLkFic3RyYWN0IG1ldGhvZCBjYW5ub3QgaGF2ZSBhbiBpbXBsZW1lbnRhdGlvbi5BYnN0cmFjdCBwcm9wZXJ0eSBjYW5ub3QgaGF2ZSBhbiBpbml0aWFsaXplci4nIG1vZGlmaWVyIGNhbm5vdCBhcHBlYXIgb24gYSB0eXBlIHBhcmFtZXRlcgAAALVaFgABAAAAlW8WACwAAAAnIG1vZGlmaWVyIGNhbiBvbmx5IGFwcGVhciBvbiBhIHR5cGUgcGFyYW1ldGVyIG9mIGEgY2xhc3MsIGludGVyZmFjZSBvciB0eXBlIGFsaWFzAAC1WhYAAQAAANRvFgBSAAAAJyBtb2RpZmllciBjYW4gb25seSBhcHBlYXIgb24gYSB0eXBlIHBhcmFtZXRlciBvZiBhIGZ1bmN0aW9uLCBtZXRob2Qgb3IgY2xhc3MAAAC1WhYAAQAAADhwFgBNAAAAVGhlICd0eXBlJyBtb2RpZmllciBjYW5ub3QgYmUgdXNlZCBvbiBhIG5hbWVkIGltcG9ydCB3aGVuICdpbXBvcnQgdHlwZScgaXMgdXNlZCBvbiBpdHMgaW1wb3J0IHN0YXRlbWVudC5UaGUgJ3R5cGUnIG1vZGlmaWVyIGNhbm5vdCBiZSB1c2VkIG9uIGEgbmFtZWQgZXhwb3J0IHdoZW4gJ2V4cG9ydCB0eXBlJyBpcyB1c2VkIG9uIGl0cyBleHBvcnQgc3RhdGVtZW50LkEgcGFyYW1ldGVyIHByb3BlcnR5IGlzIG9ubHkgYWxsb3dlZCBpbiBhIGNvbnN0cnVjdG9yIGltcGxlbWVudGF0aW9uQSBwYXJhbWV0ZXIgaW5pdGlhbGl6ZXIgaXMgb25seSBhbGxvd2VkIGluIGEgZnVuY3Rpb24gb3IgY29uc3RydWN0b3IgaW1wbGVtZW50YXRpb25UaGUgbGVmdC1oYW5kIHNpZGUgb2YgYW4gYXNzaWdubWVudCBleHByZXNzaW9uIG11c3QgYmUgYSB2YXJpYWJsZSBvciBhIHByb3BlcnR5IGFjY2Vzcy5UaGUgJ3dpdGgnIHN0YXRlbWVudCBpcyBub3Qgc3VwcG9ydGVkLiBBbGwgc3ltYm9scyBpbiBhICd3aXRoJyBibG9jayB3aWxsIGhhdmUgdHlwZSAnYW55Jy5JbnZhbGlkIGNsYXNzIG5hbWVpbnRlcmZhY2UgbmFtZSBpcyBpbnZhbGlkQW4gZW51bSBtZW1iZXIgY2Fubm90IGhhdmUgYSBudW1lcmljIG5hbWVUaGUgbGVmdC1oYW5kIHNpZGUgb2YgYSAnZm9yLi4ub2YnIHN0YXRlbWVudCBjYW5ub3QgdXNlIGEgdHlwZSBhbm5vdGF0aW9uVGhlIGxlZnQtaGFuZCBzaWRlIG9mIGEgJ2Zvci4uLmluJyBzdGF0ZW1lbnQgY2Fubm90IGJlIGEgZGVzdHJ1Y3R1cmluZyBwYXR0ZXJuQW4gaW50ZXJmYWNlIGNhbiBvbmx5IGV4dGVuZCBhbiBpZGVudGlmaWVyL3F1YWxpZmllZC1uYW1lIHdpdGggb3B0aW9uYWwgdHlwZSBhcmd1bWVudHMuVGhlIG9wZXJhbmQgb2YgYSBkZWxldGUgb3BlcmF0b3IgbXVzdCBiZSBhIHByb3BlcnR5IHJlZmVyZW5jZS5UaGlzIG1lbWJlciBjYW5ub3QgaGF2ZSBhbiAnb3ZlcnJpZGUnIG1vZGlmaWVyIGJlY2F1c2UgaXRzIGNvbnRhaW5pbmcgY2xhc3MgZG9lcyBub3QgZXh0ZW5kIGFub3RoZXIgY2xhc3MuRGVjb3JhdG9ycyBtYXkgbm90IGFwcGVhciBhZnRlciBgZXhwb3J0YCBvciBgZXhwb3J0IGRlZmF1bHRgIGlmIHRoZXkgYWxzbyBhcHBlYXIgYmVmb3JlIGBleHBvcnRgLkFuIGFjY2Vzc2liaWxpdHkgbW9kaWZpZXIgY2Fubm90IGJlIHVzZWQgd2l0aCBhIHByaXZhdGUgaWRlbnRpZmllci5UeXBlIGFubm90YXRpb25zIG11c3QgY29tZSBiZWZvcmUgZGVmYXVsdCBhc3NpZ25tZW50c1R5cGVzY3JpcHQgbm9uLW51bGwgYXNzZXJ0aW9uIG9wZXJhdG9yIGlzIG5vdCBhbGxvd2VkIHdpdGggJwBzdRYAPAAAALVaFgABAAAAVGhpcyBzeW50YXggaXMgcmVzZXJ2ZWQgaW4gZmlsZXMgd2l0aCB0aGUgLm10cyBvciAuY3RzIGV4dGVuc2lvbi4gVXNlIGFuIGBhc2AgZXhwcmVzc2lvbiBpbnN0ZWFkLlRoaXMgc3ludGF4IGlzIHJlc2VydmVkIGluIGZpbGVzIHdpdGggdGhlIC5tdHMgb3IgLmN0cyBleHRlbnNpb24uIEFkZCBhIHRyYWlsaW5nIGNvbW1hLCBhcyBpbiBgPFQsPigpID0+IC4uLmAuVGhpcyBpcyB0aGUgZXhwcmVzc2lvbiBwYXJ0IG9mIGFuIGV4cHJlc3Npb24gc3RhdGVtZW50cHJldmlvdXMgZGVmYXVsdCBjYXNlIGlzIGRlY2xhcmVkIGF0IGhlcmVFb2ZEZWNsTm90QWxsb3dlZFVzaW5nRGVjbE5vdEFsbG93ZWRVc2luZ0RlY2xOb3RBbGxvd2VkRm9yRm9ySW5Mb29wVXNpbmdEZWNsTm90RW5hYmxlZEludmFsaWROYW1lSW5Vc2luZ0RlY2xJbml0UmVxdWlyZWRGb3JVc2luZ0RlY2xQcml2YXRlTmFtZUluSW50ZXJmYWNlSW52YWxpZFN1cGVyQ2FsbEludmFsaWRTdXBlckludmFsaWRTdXBlclByaXZhdGVOYW1lSW52YWxpZE5ld1RhcmdldEludmFsaWRJbXBvcnRBcnJvd05vdEFsbG93ZWRFeHBvcnROb3RBbGxvd2VkR2V0dGVyU2V0dGVyQ2Fubm90QmVSZWFkb25seUdldHRlclNldHRlckNhbm5vdEJlT3B0aW9uYWxHZXR0ZXJQYXJhbVNldHRlclBhcmFtVG9wTGV2ZWxBd2FpdEluU2NyaXB0TGVnYWN5RGVjaW1hbExlZ2FjeU9jdGFsSW52YWxpZElkZW50Q2hhckV4cGVjdGVkRGlnaXRyYWRpeFNldHRlclBhcmFtUmVxdWlyZWRSZXN0UGF0SW5TZXR0ZXJVbnRlcm1pbmF0ZWRCbG9ja0NvbW1lbnRVbnRlcm1pbmF0ZWRTdHJMaXRFeHBlY3RlZFVuaWNvZGVFc2NhcGVFc2NhcGVJblJlc2VydmVkV29yZHdvcmRVbnRlcm1pbmF0ZWRSZWdFeHBVbnRlcm1pbmF0ZWRUcGxJZGVudEFmdGVyTnVtVW5leHBlY3RlZENoYXJjSW52YWxpZFN0ckVzY2FwZUludmFsaWRVbmljb2RlRXNjYXBlQmFkQ2hhcmFjdGVyRXNjYXBlU2VxdWVuY2VleHBlY3RlZE51bUxpdFRlcm1pbmF0ZWRXaXRoRXhwTGVnYWN5Q29tbWVudEluTW9kdWxlSW52YWxpZElkZW50SW5TdHJpY3RJbnZhbGlkSWRlbnRJbkFzeW5jRXZhbEFuZEFyZ3VtZW50c0luU3RyaWN0QXJndW1lbnRzSW5DbGFzc0ZpZWxkSWxsZWdhbExhbmd1YWdlTW9kZURpcmVjdGl2ZVVuYXJ5SW5FeHBsZWZ0X3NwYW5IYXNoTGluZUJyZWFrSW5UaHJvd0xpbmVCcmVha0JlZm9yZUFycm93VW5leHBlY3RlZGdvdFVuZXhwZWN0ZWRUb2tlbldpdGhTdWdnZXN0aW9uc2NhbmRpZGF0ZV9saXN0UmVzZXJ2ZWRXb3JkSW5JbXBvcnRBc3NpZ25Qcm9wZXJ0eUV4cGVjdGVkRXhwZWN0ZWRTZW1pRm9yRXhwclN0bXRleHByQXdhaXRTdGFyUmVzZXJ2ZWRXb3JkSW5PYmpTaG9ydGhhbmRPclBhdE51bGxpc2hDb2FsZXNjaW5nV2l0aExvZ2ljYWxPcE11bHRpcGxlRGVmYXVsdHByZXZpb3VzQ29tbWFBZnRlclJlc3RFbGVtZW50Tm9uTGFzdFJlc3RQYXJhbVNwcmVhZEluUGFyZW5FeHByRW1wdHlQYXJlbkV4cHJJbnZhbGlkUGF0SW52YWxpZEV4cHJOb3RTaW1wbGVBc3NpZ25JbnZhbGlkQXNzaWduVGFyZ2V0RXhwZWN0ZWRJZGVudEV4cGVjdGVkU2VtaUR1cGxpY2F0ZUxhYmVsQXN5bmNHZW5lcmF0b3JOb25Ub3BMZXZlbEltcG9ydEV4cG9ydEltcG9ydEV4cG9ydEluU2NyaXB0SW1wb3J0TWV0YUluU2NyaXB0UGF0VmFyV2l0aG91dEluaXRXaXRoSW5TdHJpY3RSZXR1cm5Ob3RBbGxvd2VkVG9vTWFueVZhckluRm9ySW5IZWFkVmFySW5pdGlhbGl6ZXJJbkZvckluSGVhZExhYmVsbGVkR2VuZXJhdG9yT3JBc3luY0xhYmVsbGVkRnVuY3Rpb25JblN0cmljdFlpZWxkUGFyYW1JbkdlbkF3YWl0UGFyYW1JbkFzeW5jQXdhaXRGb3JTdG10QXdhaXRJbkZ1bmN0aW9uVW50ZXJtaW5hdGVkSlNYQ29udGVudHNFbXB0eUpTWEF0dHJJbnZhbGlkSlNYVmFsdWVKU1hFeHBlY3RlZENsb3NpbmdUYWdGb3JMdEd0SlNYRXhwZWN0ZWRDbG9zaW5nVGFndGFnSW52YWxpZExlYWRpbmdEZWNvcmF0b3JEZWNvcmF0b3JPbkV4cG9ydFRzUmVxdWlyZWRBZnRlck9wdGlvbmFsVHNJbnZhbGlkUGFyYW1Qcm9wUGF0U3BhY2VCZXR3ZWVuSGFzaEFuZElkZW50QXN5bmNDb25zdHJ1Y3RvclByb3BlcnR5TmFtZWRDb25zdHJ1Y3RvclByaXZhdGVDb25zdHJ1Y3RvclByaXZhdGVOYW1lTW9kaWZpZXJDb25zdHJ1Y3RvckFjY2Vzc29yUmVhZE9ubHlNZXRob2RHZW5lcmF0b3JDb25zdHJ1Y3RvckR1cGxpY2F0ZUNvbnN0cnVjdG9yVHNCaW5kaW5nUGF0Q2Fubm90QmVPcHRpb25hbFN1cGVyQ2FsbE9wdGlvbmFsT3B0Q2hhaW5DYW5ub3RGb2xsb3dDb25zdHJ1Y3RvckNhbGxUYWdnZWRUcGxJbk9wdENoYWluVHJhaWxpbmdDb21tYUluc2lkZUltcG9ydEV4cG9ydERlZmF1bHRXaXRoT3V0RnJvbUV4cG9ydEV4cGVjdEZyb21Eb3RzV2l0aG91dElkZW50aWZpZXJOdW1lcmljU2VwYXJhdG9ySXNBbGxvd2VkT25seUJldHdlZW5Ud29EaWdpdHNJbXBvcnRCaW5kaW5nSXNTdHJpbmdFeHBvcnRCaW5kaW5nSXNTdHJpbmdDb25zdERlY2xhcmF0aW9uc1JlcXVpcmVJbml0aWFsaXphdGlvbkR1cGxpY2F0ZWRSZWdFeHBGbGFnc1Vua25vd25SZWdFeHBGbGFnc1RTMTAwM1RTMTAwNVRTMTAwOVRTMTAxNFRTMTAxNVRTMTAyOVRTMTAzMFRTMTAzMVRTMTAzOFRTMTA0MlRTMTA0N1RTMTA0OFRTMTA1NlRTMTA4NVRTMTA4OVRTMTA5MlRTMTA5NlRTMTA5OFRTMTEwMFRTMTEwMlRTMTEwNVRTMTEwNlRTMTEwN1RTMTEwOVRTMTExMFRTMTExNFRTMTExNVRTMTExNlRTMTEyM1RTMTE0MVRTMTE2MlRTMTE2NFRTMTE3MVRTMTE3MlRTMTE3M1RTMTE3NFRTMTE3NVRTMTE4M1RTMTE4NFRTMTE4NVRTMTA5M1RTMTE5NlRTMTI0MlRTMTI0M1RTMTI0NFRTMTI0NVRTMTI2N1RTMTI3M1RTMTI3NFRTMTI3N1RTMjIwNlRTMjIwN1RTMjM2OVRTMjM3MVRTMjQwNlRTMjQxMFRTMjQxNFRTMjQyN1RTMjQ1MlRTMjQ4M1RTMjQ5MVRTMjQ5OVRTMjcwM1RTNDExMlRTODAzOFRTMTgwMTBUU1R5cGVBbm5vdGF0aW9uQWZ0ZXJBc3NpZ25Uc05vbk51bGxBc3NlcnRpb25Ob3RBbGxvd2VkV2l0aExhYmVsaW5uZXJub3RlUmVzZXJ2ZWRUeXBlQXNzZXJ0aW9uUmVzZXJ2ZWRBcnJvd1R5cGVQYXJhbQAAAAAACAAAAAQAAAB6AAAAU3RycmF3VHBsZXhwcnNxdWFzaXNUaGlzVW5hcnlVcGRhdGVCaW5NZW1iZXJTdXBlclByb3BDb25kQ2FsbE5ld1NlcUxpdFRhZ2dlZFRwbEFycm93WWllbGRNZXRhUHJvcEF3YWl0UGFyZW5KU1hNZW1iZXJKU1hOYW1lc3BhY2VkTmFtZUpTWEVtcHR5SlNYRWxlbWVudEpTWEZyYWdtZW50VHNUeXBlQXNzZXJ0aW9uVHNDb25zdEFzc2VydGlvblRzTm9uTnVsbFRzQXNUc0luc3RhbnRpYXRpb25Uc1NhdGlzZmllc1ByaXZhdGVOYW1lT3B0Q2hhaW5TaG9ydGhhbmRLZXlWYWx1ZUdldHRlclNldHRlck1ldGhvZEJsb2NrRGVidWdnZXJXaXRoUmV0dXJuTGFiZWxlZEJyZWFrQ29udGludWVJZlN3aXRjaFRocm93VHJ5V2hpbGVEb1doaWxlRm9yRm9ySW5Gb3JPZkRlY2wAAAAAAAAEAAAABAAAAOQBAAA9BAAADAAAAAQAAACwAQAAmQQAAAwAAAAEAAAAmgQAAJsEAAAEAAAABAAAAIoBAAAAAAAAAQAAAAEAAAAPAAAAhAQAAAQAAAAEAAAAIgIAAJwEAAAEAAAABAAAADkCAAAAAAAABAAAAAQAAACdBAAAY3R4dGRlY29yYXRvcnNib2R5c3VwZXJfY2xhc3Npc19hYnN0cmFjdHR5cGVfcGFyYW1zc3VwZXJfdHlwZV9wYXJhbXN3KhgABAAAAMSDFgAEAAAAyIMWAAoAAADSgxYABAAAANaDFgALAAAA4YMWAAsAAADsgxYACwAAAPeDFgARAAAAQBoYAAoAAAAAAAAABAAAAAQAAACPAAAAc3ltb3B0aW9uYWxWYXJEZWNsa2luZGRlY2xzVHJ5U3RtdGJsb2NraGFuZGxlcmZpbmFsaXplckpTWE1lbWJlckV4cHJVc2luZ0RlY2xpc19hd2FpdE9iamVjdExpdHByb3Bzb3BlbmluZ2Nsb3NpbmdCbG9ja1N0bXRzdG10cwCeBAAADAAAAAQAAACfBAAAoAQAABgAAAAEAAAAkwQAAAAAAAAEAAAABAAAAEEBAABwYXJhbXNpc19nZW5lcmF0b3Jpc19hc3luY3JldHVybl90eXBlAAAAEIUWAAYAAADIgxYACgAAAHcqGAAEAAAAxIMWAAQAAADSgxYABAAAABaFFgAMAAAAIoUWAAgAAADsgxYACwAAACqFFgALAAAARnVuY3Rpb25vYmpwcm9wVHNLZXl3b3JkVHlwZVRzVGhpc1R5cGVUc0ZuT3JDb25zdHJ1Y3RvclR5cGVUc1R5cGVSZWZUc1R5cGVRdWVyeVRzVHlwZUxpdFRzQXJyYXlUeXBlVHNUdXBsZVR5cGVUc09wdGlvbmFsVHlwZVRzUmVzdFR5cGVUc1VuaW9uT3JJbnRlcnNlY3Rpb25UeXBlVHNDb25kaXRpb25hbFR5cGVUc0luZmVyVHlwZVRzUGFyZW50aGVzaXplZFR5cGVUc1R5cGVPcGVyYXRvclRzSW5kZXhlZEFjY2Vzc1R5cGVUc01hcHBlZFR5cGVUc0xpdFR5cGVUc1R5cGVQcmVkaWNhdGVUc0ltcG9ydFR5cGVUc1R5cGVBbm50eXBlX2FubkpTWE9wZW5pbmdFbGVtZW50bmFtZWF0dHJzc2VsZl9jbG9zaW5ndHlwZV9hcmdzAD4EAAAYAAAACAAAAEABAABUc0VudW1EZWNsaXNfY29uc3RtZW1iZXJzVHNRdWFsaWZpZWROYW1lVHNNb2R1bGVEZWNsoQQAAAwAAAAEAAAAogQAAAAAAAAEAAAABAAAAKMEAAB3KhgABAAAAICrFgACAAAAMBcYAAcAAADsgxYACwAAAGgXGAAHAAAA0oMWAAQAAABUc0ludGVyZmFjZURlY2xUc01vZHVsZUJsb2NrVHNOYW1lc3BhY2VEZWNsbGVmdHJpZ2h0VHNUeXBlQWxpYXNEZWNsVHNUeXBlUGFyYW1EZWNsVHNJbXBvcnRFcXVhbHNEZWNsaXNfZXhwb3J0aXNfdHlwZV9vbmx5bW9kdWxlX3JlZlRzVHlwZVBhcmFtSW5zdGFudGlhdGlvbgBBtJDaAAsSpAQAAKUEAACkBAAApAQAAKUEAEGQkdoACwKkBABBkJTaAAuaqgWmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAKYEAACmBAAApgQAAI2qFgByAAAA/QAAAAEAAABfYXBwbHlfZGVjb3JhdGVkX2Rlc2NyaXB0b3JAc3djL2hlbHBlcnMvXy9fYXBwbHlfZGVjb3JhdGVkX2Rlc2NyaXB0b3JfYXJyYXlfbGlrZV90b19hcnJheUBzd2MvaGVscGVycy9fL19hcnJheV9saWtlX3RvX2FycmF5X2FycmF5X3dpdGhfaG9sZXNAc3djL2hlbHBlcnMvXy9fYXJyYXlfd2l0aF9ob2xlc19hcnJheV93aXRob3V0X2hvbGVzQHN3Yy9oZWxwZXJzL18vX2FycmF5X3dpdGhvdXRfaG9sZXNfYXNzZXJ0X3RoaXNfaW5pdGlhbGl6ZWRAc3djL2hlbHBlcnMvXy9fYXNzZXJ0X3RoaXNfaW5pdGlhbGl6ZWRfYXN5bmNfZ2VuZXJhdG9yQHN3Yy9oZWxwZXJzL18vX2FzeW5jX2dlbmVyYXRvcl9hc3luY19nZW5lcmF0b3JfZGVsZWdhdGVAc3djL2hlbHBlcnMvXy9fYXN5bmNfZ2VuZXJhdG9yX2RlbGVnYXRlX2FzeW5jX2l0ZXJhdG9yQHN3Yy9oZWxwZXJzL18vX2FzeW5jX2l0ZXJhdG9yX2FzeW5jX3RvX2dlbmVyYXRvckBzd2MvaGVscGVycy9fL19hc3luY190b19nZW5lcmF0b3JfYXdhaXRfYXN5bmNfZ2VuZXJhdG9yQHN3Yy9oZWxwZXJzL18vX2F3YWl0X2FzeW5jX2dlbmVyYXRvcl9hd2FpdF92YWx1ZUBzd2MvaGVscGVycy9fL19hd2FpdF92YWx1ZV9jYWxsX3N1cGVyQHN3Yy9oZWxwZXJzL18vX2NhbGxfc3VwZXJfY2hlY2tfcHJpdmF0ZV9yZWRlY2xhcmF0aW9uQHN3Yy9oZWxwZXJzL18vX2NoZWNrX3ByaXZhdGVfcmVkZWNsYXJhdGlvbl9jbGFzc19hcHBseV9kZXNjcmlwdG9yX2Rlc3RydWN0dXJlQHN3Yy9oZWxwZXJzL18vX2NsYXNzX2FwcGx5X2Rlc2NyaXB0b3JfZGVzdHJ1Y3R1cmVfY2xhc3NfYXBwbHlfZGVzY3JpcHRvcl9nZXRAc3djL2hlbHBlcnMvXy9fY2xhc3NfYXBwbHlfZGVzY3JpcHRvcl9nZXRfY2xhc3NfYXBwbHlfZGVzY3JpcHRvcl9zZXRAc3djL2hlbHBlcnMvXy9fY2xhc3NfYXBwbHlfZGVzY3JpcHRvcl9zZXRfY2xhc3NfYXBwbHlfZGVzY3JpcHRvcl91cGRhdGVAc3djL2hlbHBlcnMvXy9fY2xhc3NfYXBwbHlfZGVzY3JpcHRvcl91cGRhdGVfY2xhc3NfY2FsbF9jaGVja0Bzd2MvaGVscGVycy9fL19jbGFzc19jYWxsX2NoZWNrX2NsYXNzX2NoZWNrX3ByaXZhdGVfc3RhdGljX2ZpZWxkX2Rlc2NyaXB0b3JAc3djL2hlbHBlcnMvXy9fY2xhc3NfY2hlY2tfcHJpdmF0ZV9zdGF0aWNfZmllbGRfZGVzY3JpcHRvcl9jbGFzc19leHRyYWN0X2ZpZWxkX2Rlc2NyaXB0b3JAc3djL2hlbHBlcnMvXy9fY2xhc3NfZXh0cmFjdF9maWVsZF9kZXNjcmlwdG9yX2NsYXNzX25hbWVfdGR6X2Vycm9yQHN3Yy9oZWxwZXJzL18vX2NsYXNzX25hbWVfdGR6X2Vycm9yX2NsYXNzX3ByaXZhdGVfZmllbGRfZ2V0QHN3Yy9oZWxwZXJzL18vX2NsYXNzX3ByaXZhdGVfZmllbGRfZ2V0X2NsYXNzX3ByaXZhdGVfZmllbGRfaW5pdEBzd2MvaGVscGVycy9fL19jbGFzc19wcml2YXRlX2ZpZWxkX2luaXRfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9iYXNlQHN3Yy9oZWxwZXJzL18vX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZV9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleUBzd2MvaGVscGVycy9fL19jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleV9jbGFzc19wcml2YXRlX2ZpZWxkX3NldEBzd2MvaGVscGVycy9fL19jbGFzc19wcml2YXRlX2ZpZWxkX3NldF9jbGFzc19wcml2YXRlX2ZpZWxkX3VwZGF0ZUBzd2MvaGVscGVycy9fL19jbGFzc19wcml2YXRlX2ZpZWxkX3VwZGF0ZV9jbGFzc19wcml2YXRlX21ldGhvZF9nZXRAc3djL2hlbHBlcnMvXy9fY2xhc3NfcHJpdmF0ZV9tZXRob2RfZ2V0X2NsYXNzX3ByaXZhdGVfbWV0aG9kX2luaXRAc3djL2hlbHBlcnMvXy9fY2xhc3NfcHJpdmF0ZV9tZXRob2RfaW5pdF9jbGFzc19wcml2YXRlX21ldGhvZF9zZXRAc3djL2hlbHBlcnMvXy9fY2xhc3NfcHJpdmF0ZV9tZXRob2Rfc2V0X2NsYXNzX3N0YXRpY19wcml2YXRlX2ZpZWxkX3NwZWNfZ2V0QHN3Yy9oZWxwZXJzL18vX2NsYXNzX3N0YXRpY19wcml2YXRlX2ZpZWxkX3NwZWNfZ2V0X2NsYXNzX3N0YXRpY19wcml2YXRlX2ZpZWxkX3NwZWNfc2V0QHN3Yy9oZWxwZXJzL18vX2NsYXNzX3N0YXRpY19wcml2YXRlX2ZpZWxkX3NwZWNfc2V0X2NsYXNzX3N0YXRpY19wcml2YXRlX2ZpZWxkX3VwZGF0ZUBzd2MvaGVscGVycy9fL19jbGFzc19zdGF0aWNfcHJpdmF0ZV9maWVsZF91cGRhdGVfY29uc3RydWN0QHN3Yy9oZWxwZXJzL18vX2NvbnN0cnVjdF9jcmVhdGVfY2xhc3NAc3djL2hlbHBlcnMvXy9fY3JlYXRlX2NsYXNzX2RlY29yYXRlQHN3Yy9oZWxwZXJzL18vX2RlY29yYXRlX2RlZmF1bHRzQHN3Yy9oZWxwZXJzL18vX2RlZmF1bHRzX2RlZmluZV9lbnVtZXJhYmxlX3Byb3BlcnRpZXNAc3djL2hlbHBlcnMvXy9fZGVmaW5lX2VudW1lcmFibGVfcHJvcGVydGllc19kZWZpbmVfcHJvcGVydHlAc3djL2hlbHBlcnMvXy9fZGVmaW5lX3Byb3BlcnR5X2V4cG9ydF9zdGFyQHN3Yy9oZWxwZXJzL18vX2V4cG9ydF9zdGFyX2V4dGVuZHNAc3djL2hlbHBlcnMvXy9fZXh0ZW5kc19nZXRAc3djL2hlbHBlcnMvXy9fZ2V0X2dldF9wcm90b3R5cGVfb2ZAc3djL2hlbHBlcnMvXy9fZ2V0X3Byb3RvdHlwZV9vZl9pbmhlcml0c0Bzd2MvaGVscGVycy9fL19pbmhlcml0c19pbmhlcml0c19sb29zZUBzd2MvaGVscGVycy9fL19pbmhlcml0c19sb29zZV9pbml0aWFsaXplcl9kZWZpbmVfcHJvcGVydHlAc3djL2hlbHBlcnMvXy9faW5pdGlhbGl6ZXJfZGVmaW5lX3Byb3BlcnR5X2luaXRpYWxpemVyX3dhcm5pbmdfaGVscGVyQHN3Yy9oZWxwZXJzL18vX2luaXRpYWxpemVyX3dhcm5pbmdfaGVscGVyX2luc3RhbmNlb2ZAc3djL2hlbHBlcnMvXy9faW5zdGFuY2VvZl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdEBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmRAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkX2lzX25hdGl2ZV9mdW5jdGlvbkBzd2MvaGVscGVycy9fL19pc19uYXRpdmVfZnVuY3Rpb25faXRlcmFibGVfdG9fYXJyYXlAc3djL2hlbHBlcnMvXy9faXRlcmFibGVfdG9fYXJyYXlfaXRlcmFibGVfdG9fYXJyYXlfbGltaXRAc3djL2hlbHBlcnMvXy9faXRlcmFibGVfdG9fYXJyYXlfbGltaXRfaXRlcmFibGVfdG9fYXJyYXlfbGltaXRfbG9vc2VAc3djL2hlbHBlcnMvXy9faXRlcmFibGVfdG9fYXJyYXlfbGltaXRfbG9vc2VfanN4QHN3Yy9oZWxwZXJzL18vX2pzeF9uZXdfYXJyb3dfY2hlY2tAc3djL2hlbHBlcnMvXy9fbmV3X2Fycm93X2NoZWNrX25vbl9pdGVyYWJsZV9yZXN0QHN3Yy9oZWxwZXJzL18vX25vbl9pdGVyYWJsZV9yZXN0X25vbl9pdGVyYWJsZV9zcHJlYWRAc3djL2hlbHBlcnMvXy9fbm9uX2l0ZXJhYmxlX3NwcmVhZF9vYmplY3RfZGVzdHJ1Y3R1cmluZ19lbXB0eUBzd2MvaGVscGVycy9fL19vYmplY3RfZGVzdHJ1Y3R1cmluZ19lbXB0eV9vYmplY3Rfc3ByZWFkQHN3Yy9oZWxwZXJzL18vX29iamVjdF9zcHJlYWRfb2JqZWN0X3NwcmVhZF9wcm9wc0Bzd2MvaGVscGVycy9fL19vYmplY3Rfc3ByZWFkX3Byb3BzX29iamVjdF93aXRob3V0X3Byb3BlcnRpZXNAc3djL2hlbHBlcnMvXy9fb2JqZWN0X3dpdGhvdXRfcHJvcGVydGllc19vYmplY3Rfd2l0aG91dF9wcm9wZXJ0aWVzX2xvb3NlQHN3Yy9oZWxwZXJzL18vX29iamVjdF93aXRob3V0X3Byb3BlcnRpZXNfbG9vc2VfcG9zc2libGVfY29uc3RydWN0b3JfcmV0dXJuQHN3Yy9oZWxwZXJzL18vX3Bvc3NpYmxlX2NvbnN0cnVjdG9yX3JldHVybl9yZWFkX29ubHlfZXJyb3JAc3djL2hlbHBlcnMvXy9fcmVhZF9vbmx5X2Vycm9yX3NldEBzd2MvaGVscGVycy9fL19zZXRfc2V0X3Byb3RvdHlwZV9vZkBzd2MvaGVscGVycy9fL19zZXRfcHJvdG90eXBlX29mX3NraXBfZmlyc3RfZ2VuZXJhdG9yX25leHRAc3djL2hlbHBlcnMvXy9fc2tpcF9maXJzdF9nZW5lcmF0b3JfbmV4dF9zbGljZWRfdG9fYXJyYXlAc3djL2hlbHBlcnMvXy9fc2xpY2VkX3RvX2FycmF5X3NsaWNlZF90b19hcnJheV9sb29zZUBzd2MvaGVscGVycy9fL19zbGljZWRfdG9fYXJyYXlfbG9vc2Vfc3VwZXJfcHJvcF9iYXNlQHN3Yy9oZWxwZXJzL18vX3N1cGVyX3Byb3BfYmFzZV90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbEBzd2MvaGVscGVycy9fL190YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZUBzd2MvaGVscGVycy9fL190YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZV90aHJvd0Bzd2MvaGVscGVycy9fL190aHJvd190b19hcnJheUBzd2MvaGVscGVycy9fL190b19hcnJheV90b19jb25zdW1hYmxlX2FycmF5QHN3Yy9oZWxwZXJzL18vX3RvX2NvbnN1bWFibGVfYXJyYXlfdG9fcHJpbWl0aXZlQHN3Yy9oZWxwZXJzL18vX3RvX3ByaW1pdGl2ZV90b19wcm9wZXJ0eV9rZXlAc3djL2hlbHBlcnMvXy9fdG9fcHJvcGVydHlfa2V5X3VwZGF0ZUBzd2MvaGVscGVycy9fL191cGRhdGVfdHlwZV9vZkBzd2MvaGVscGVycy9fL190eXBlX29mX3Vuc3VwcG9ydGVkX2l0ZXJhYmxlX3RvX2FycmF5QHN3Yy9oZWxwZXJzL18vX3Vuc3VwcG9ydGVkX2l0ZXJhYmxlX3RvX2FycmF5X3dyYXBfYXN5bmNfZ2VuZXJhdG9yQHN3Yy9oZWxwZXJzL18vX3dyYXBfYXN5bmNfZ2VuZXJhdG9yX3dyYXBfbmF0aXZlX3N1cGVyQHN3Yy9oZWxwZXJzL18vX3dyYXBfbmF0aXZlX3N1cGVyX3dyaXRlX29ubHlfZXJyb3JAc3djL2hlbHBlcnMvXy9fd3JpdGVfb25seV9lcnJvcl9jbGFzc19wcml2YXRlX2ZpZWxkX2Rlc3RydWN0dXJlQHN3Yy9oZWxwZXJzL18vX2NsYXNzX3ByaXZhdGVfZmllbGRfZGVzdHJ1Y3R1cmVfY2xhc3Nfc3RhdGljX3ByaXZhdGVfZmllbGRfZGVzdHJ1Y3R1cmVAc3djL2hlbHBlcnMvXy9fY2xhc3Nfc3RhdGljX3ByaXZhdGVfZmllbGRfZGVzdHJ1Y3R1cmVfY2xhc3Nfc3RhdGljX3ByaXZhdGVfbWV0aG9kX2dldEBzd2MvaGVscGVycy9fL19jbGFzc19zdGF0aWNfcHJpdmF0ZV9tZXRob2RfZ2V0X2NsYXNzX2NoZWNrX3ByaXZhdGVfc3RhdGljX2FjY2Vzc0Bzd2MvaGVscGVycy9fL19jbGFzc19jaGVja19wcml2YXRlX3N0YXRpY19hY2Nlc3NfaXNfbmF0aXZlX3JlZmxlY3RfY29uc3RydWN0QHN3Yy9oZWxwZXJzL18vX2lzX25hdGl2ZV9yZWZsZWN0X2NvbnN0cnVjdF9jcmVhdGVfc3VwZXJAc3djL2hlbHBlcnMvXy9fY3JlYXRlX3N1cGVyX2NyZWF0ZV9mb3Jfb2ZfaXRlcmF0b3JfaGVscGVyX2xvb3NlQHN3Yy9oZWxwZXJzL18vX2NyZWF0ZV9mb3Jfb2ZfaXRlcmF0b3JfaGVscGVyX2xvb3NlX3RzX2RlY29yYXRlQHN3Yy9oZWxwZXJzL18vX3RzX2RlY29yYXRlX3RzX2dlbmVyYXRvckBzd2MvaGVscGVycy9fL190c19nZW5lcmF0b3JfdHNfbWV0YWRhdGFAc3djL2hlbHBlcnMvXy9fdHNfbWV0YWRhdGFfdHNfcGFyYW1Ac3djL2hlbHBlcnMvXy9fdHNfcGFyYW1fdHNfdmFsdWVzQHN3Yy9oZWxwZXJzL18vX3RzX3ZhbHVlc190c19hZGRfZGlzcG9zYWJsZV9yZXNvdXJjZUBzd2MvaGVscGVycy9fL190c19hZGRfZGlzcG9zYWJsZV9yZXNvdXJjZV90c19kaXNwb3NlX3Jlc291cmNlc0Bzd2MvaGVscGVycy9fL190c19kaXNwb3NlX3Jlc291cmNlc19hcHBseV9kZWNzXzIyMDNfckBzd2MvaGVscGVycy9fL19hcHBseV9kZWNzXzIyMDNfcl9pZGVudGl0eUBzd2MvaGVscGVycy9fL19pZGVudGl0eV9kaXNwb3NlQHN3Yy9oZWxwZXJzL18vX2Rpc3Bvc2VfdXNpbmdAc3djL2hlbHBlcnMvXy9fdXNpbmdfdXNpbmdfY3R4QHN3Yy9oZWxwZXJzL18vX3VzaW5nX2N0eGFwcGx5X2RlY29yYXRlZF9kZXNjcmlwdG9yYXJyYXlfbGlrZV90b19hcnJheWFycmF5X3dpdGhfaG9sZXNhcnJheV93aXRob3V0X2hvbGVzYXNzZXJ0X3RoaXNfaW5pdGlhbGl6ZWRhc3luY19nZW5lcmF0b3Jhc3luY19nZW5lcmF0b3JfZGVsZWdhdGVhc3luY19pdGVyYXRvcmFzeW5jX3RvX2dlbmVyYXRvcmF3YWl0X2FzeW5jX2dlbmVyYXRvcmF3YWl0X3ZhbHVlY2FsbF9zdXBlcmNoZWNrX3ByaXZhdGVfcmVkZWNsYXJhdGlvbmNsYXNzX2FwcGx5X2Rlc2NyaXB0b3JfZGVzdHJ1Y3R1cmVjbGFzc19hcHBseV9kZXNjcmlwdG9yX2dldGNsYXNzX2FwcGx5X2Rlc2NyaXB0b3Jfc2V0Y2xhc3NfYXBwbHlfZGVzY3JpcHRvcl91cGRhdGVjbGFzc19jYWxsX2NoZWNrY2xhc3NfY2hlY2tfcHJpdmF0ZV9zdGF0aWNfZmllbGRfZGVzY3JpcHRvcmNsYXNzX2V4dHJhY3RfZmllbGRfZGVzY3JpcHRvcmNsYXNzX25hbWVfdGR6X2Vycm9yY2xhc3NfcHJpdmF0ZV9maWVsZF9nZXRjbGFzc19wcml2YXRlX2ZpZWxkX2luaXRjbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2VjbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleWNsYXNzX3ByaXZhdGVfZmllbGRfc2V0Y2xhc3NfcHJpdmF0ZV9maWVsZF91cGRhdGVjbGFzc19wcml2YXRlX21ldGhvZF9nZXRjbGFzc19wcml2YXRlX21ldGhvZF9pbml0Y2xhc3NfcHJpdmF0ZV9tZXRob2Rfc2V0Y2xhc3Nfc3RhdGljX3ByaXZhdGVfZmllbGRfc3BlY19nZXRjbGFzc19zdGF0aWNfcHJpdmF0ZV9maWVsZF9zcGVjX3NldGNsYXNzX3N0YXRpY19wcml2YXRlX2ZpZWxkX3VwZGF0ZWNvbnN0cnVjdGNyZWF0ZV9jbGFzc2RlY29yYXRlZGVmYXVsdHNkZWZpbmVfZW51bWVyYWJsZV9wcm9wZXJ0aWVzZGVmaW5lX3Byb3BlcnR5ZXhwb3J0X3N0YXJnZXRfcHJvdG90eXBlX29maW5oZXJpdHNpbmhlcml0c19sb29zZWluaXRpYWxpemVyX2RlZmluZV9wcm9wZXJ0eWluaXRpYWxpemVyX3dhcm5pbmdfaGVscGVyaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRpbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmRpc19uYXRpdmVfZnVuY3Rpb25pdGVyYWJsZV90b19hcnJheWl0ZXJhYmxlX3RvX2FycmF5X2xpbWl0aXRlcmFibGVfdG9fYXJyYXlfbGltaXRfbG9vc2Vqc3huZXdfYXJyb3dfY2hlY2tub25faXRlcmFibGVfcmVzdG5vbl9pdGVyYWJsZV9zcHJlYWRvYmplY3RfZGVzdHJ1Y3R1cmluZ19lbXB0eW9iamVjdF9zcHJlYWRvYmplY3Rfc3ByZWFkX3Byb3Bzb2JqZWN0X3dpdGhvdXRfcHJvcGVydGllc29iamVjdF93aXRob3V0X3Byb3BlcnRpZXNfbG9vc2Vwb3NzaWJsZV9jb25zdHJ1Y3Rvcl9yZXR1cm5yZWFkX29ubHlfZXJyb3JzZXRfcHJvdG90eXBlX29mc2tpcF9maXJzdF9nZW5lcmF0b3JfbmV4dHNsaWNlZF90b19hcnJheXNsaWNlZF90b19hcnJheV9sb29zZXN1cGVyX3Byb3BfYmFzZXRhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2V0b19hcnJheXRvX2NvbnN1bWFibGVfYXJyYXl0b19wcmltaXRpdmV0b19wcm9wZXJ0eV9rZXl1cGRhdGV0eXBlX29mdW5zdXBwb3J0ZWRfaXRlcmFibGVfdG9fYXJyYXl3cmFwX2FzeW5jX2dlbmVyYXRvcndyYXBfbmF0aXZlX3N1cGVyd3JpdGVfb25seV9lcnJvcmNsYXNzX3ByaXZhdGVfZmllbGRfZGVzdHJ1Y3R1cmVjbGFzc19zdGF0aWNfcHJpdmF0ZV9maWVsZF9kZXN0cnVjdHVyZWNsYXNzX3N0YXRpY19wcml2YXRlX21ldGhvZF9nZXRjbGFzc19jaGVja19wcml2YXRlX3N0YXRpY19hY2Nlc3Npc19uYXRpdmVfcmVmbGVjdF9jb25zdHJ1Y3RjcmVhdGVfc3VwZXJjcmVhdGVfZm9yX29mX2l0ZXJhdG9yX2hlbHBlcl9sb29zZXRzX2RlY29yYXRldHNfZ2VuZXJhdG9ydHNfbWV0YWRhdGF0c19wYXJhbXRzX3ZhbHVlc3RzX2FkZF9kaXNwb3NhYmxlX3Jlc291cmNldHNfZGlzcG9zZV9yZXNvdXJjZXNhcHBseV9kZWNzXzIyMDNfcmlkZW50aXR5ZGlzcG9zZXVzaW5nX2N0eE1hcmtlciBwcm92aWRlZCB0byByZXNvbHZlciBzaG91bGQgbm90IGJlIHRoZSByb290IG1hcmsAADeqFgA3AAAAzNkXAHMAAACKAAAABQAAACRuYW1lL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc3djX2VjbWFfdHJhbnNmb3Jtc19iYXNlLTAuMTUwLjEvc3JjL2hlbHBlcnMvbW9kLnJzaW50ZXJuYWwgZXJyb3I6IGVudGVyZWQgdW5yZWFjaGFibGUgY29kZTogRXJyb3Igb2NjdXJyZWQgd2hpbGUgcGFyc2luZyBlcnJvcjogAAAA/6oWAE4AAACNqhYAcgAAACgAAAAJAAAAQHN3Yy9oZWxwZXJzL18vX2irFgAQAAAAaWRyZXNvdXJjZV9fpwQAAGZ1bmN0aW9uIF9hcHBseV9kZWNvcmF0ZWRfZGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5LCBkZWNvcmF0b3JzLCBkZXNjcmlwdG9yLCBjb250ZXh0KSB7CiAgICB2YXIgZGVzYyA9IHt9OwogICAgT2JqZWN0WyJrZSIgKyAieXMiXShkZXNjcmlwdG9yKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgewogICAgICAgIGRlc2Nba2V5XSA9IGRlc2NyaXB0b3Jba2V5XTsKICAgIH0pOwogICAgZGVzYy5lbnVtZXJhYmxlID0gISFkZXNjLmVudW1lcmFibGU7CiAgICBkZXNjLmNvbmZpZ3VyYWJsZSA9ICEhZGVzYy5jb25maWd1cmFibGU7CiAgICBpZiAoInZhbHVlIiBpbiBkZXNjIHx8IGRlc2MuaW5pdGlhbGl6ZXIpIHsKICAgICAgICBkZXNjLndyaXRhYmxlID0gdHJ1ZTsKICAgIH0KICAgIGRlc2MgPSBkZWNvcmF0b3JzLnNsaWNlKCkucmV2ZXJzZSgpLnJlZHVjZShmdW5jdGlvbihkZXNjLCBkZWNvcmF0b3IpIHsKICAgICAgICByZXR1cm4gZGVjb3JhdG9yID8gZGVjb3JhdG9yKHRhcmdldCwgcHJvcGVydHksIGRlc2MpIHx8IGRlc2MgOiBkZXNjOwogICAgfSwgZGVzYyk7CiAgICB2YXIgaGFzQWNjZXNzb3IgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGVzYywgImdldCIpIHx8IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkZXNjLCAic2V0Iik7CiAgICBpZiAoY29udGV4dCAmJiBkZXNjLmluaXRpYWxpemVyICE9PSB2b2lkIDAgJiYgIWhhc0FjY2Vzc29yKSB7CiAgICAgICAgZGVzYy52YWx1ZSA9IGRlc2MuaW5pdGlhbGl6ZXIgPyBkZXNjLmluaXRpYWxpemVyLmNhbGwoY29udGV4dCkgOiB2b2lkIDA7CiAgICAgICAgZGVzYy5pbml0aWFsaXplciA9IHVuZGVmaW5lZDsKICAgIH0KICAgIGlmIChoYXNBY2Nlc3NvcikgewogICAgICAgIGRlbGV0ZSBkZXNjLndyaXRhYmxlOwogICAgICAgIGRlbGV0ZSBkZXNjLmluaXRpYWxpemVyOwogICAgICAgIGRlbGV0ZSBkZXNjLnZhbHVlOwogICAgfQogICAgaWYgKGRlc2MuaW5pdGlhbGl6ZXIgPT09IHZvaWQgMCkgewogICAgICAgIE9iamVjdFsiZGVmaW5lIiArICJQcm9wZXJ0eSJdKHRhcmdldCwgcHJvcGVydHksIGRlc2MpOwogICAgICAgIGRlc2MgPSBudWxsOwogICAgfQogICAgcmV0dXJuIGRlc2M7Cn0KZnVuY3Rpb24gX2FycmF5X2xpa2VfdG9fYXJyYXkoYXJyLCBsZW4pIHsKICAgIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldOwogICAgcmV0dXJuIGFycjI7Cn0KZnVuY3Rpb24gX2FycmF5X3dpdGhfaG9sZXMoYXJyKSB7CiAgICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOwp9CmZ1bmN0aW9uIF9hcnJheV93aXRob3V0X2hvbGVzKGFycikgewogICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheV9saWtlX3RvX2FycmF5KGFycik7Cn0KZnVuY3Rpb24gX2Fzc2VydF90aGlzX2luaXRpYWxpemVkKHNlbGYpIHsKICAgIGlmIChzZWxmID09PSB2b2lkIDApIHsKICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpOwogICAgfQogICAgcmV0dXJuIHNlbGY7Cn0KZnVuY3Rpb24gX2FzeW5jX2dlbmVyYXRvcihnZW4pIHsKICAgIHZhciBmcm9udCwgYmFjazsKICAgIGZ1bmN0aW9uIHNlbmQoa2V5LCBhcmcpIHsKICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgICAgICAgIHZhciByZXF1ZXN0ID0geyBrZXk6IGtleSwgYXJnOiBhcmcsIHJlc29sdmU6IHJlc29sdmUsIHJlamVjdDogcmVqZWN0LCBuZXh0OiBudWxsIH07CiAgICAgICAgICAgIGlmIChiYWNrKSB7CiAgICAgICAgICAgICAgICBiYWNrID0gYmFjay5uZXh0ID0gcmVxdWVzdDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGZyb250ID0gYmFjayA9IHJlcXVlc3Q7CiAgICAgICAgICAgICAgICByZXN1bWUoa2V5LCBhcmcpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiByZXN1bWUoa2V5LCBhcmcpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gZ2VuW2tleV0oYXJnKTsKICAgICAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlOwogICAgICAgICAgICB2YXIgd3JhcHBlZEF3YWl0ID0gdmFsdWUgaW5zdGFuY2VvZiBfYXdhaXRfdmFsdWU7CiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSh3cmFwcGVkQXdhaXQgPyB2YWx1ZS53cmFwcGVkIDogdmFsdWUpLnRoZW4oZnVuY3Rpb24oYXJnKSB7CiAgICAgICAgICAgICAgICBpZiAod3JhcHBlZEF3YWl0KSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdW1lKCJuZXh0IiwgYXJnKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzZXR0bGUocmVzdWx0LmRvbmUgPyAicmV0dXJuIiA6ICJub3JtYWwiLCBhcmcpOwogICAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHsKICAgICAgICAgICAgICAgIHJlc3VtZSgidGhyb3ciLCBlcnIpOwogICAgICAgICAgICB9KTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgc2V0dGxlKCJ0aHJvdyIsIGVycik7CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gc2V0dGxlKHR5cGUsIHZhbHVlKSB7CiAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgICAgIGNhc2UgInJldHVybiI6CiAgICAgICAgICAgICAgICBmcm9udC5yZXNvbHZlKHsgdmFsdWU6IHZhbHVlLCBkb25lOiB0cnVlIH0pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInRocm93IjoKICAgICAgICAgICAgICAgIGZyb250LnJlamVjdCh2YWx1ZSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGZyb250LnJlc29sdmUoeyB2YWx1ZTogdmFsdWUsIGRvbmU6IGZhbHNlIH0pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGZyb250ID0gZnJvbnQubmV4dDsKICAgICAgICBpZiAoZnJvbnQpIHsKICAgICAgICAgICAgcmVzdW1lKGZyb250LmtleSwgZnJvbnQuYXJnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBiYWNrID0gbnVsbDsKICAgICAgICB9CiAgICB9CiAgICB0aGlzLl9pbnZva2UgPSBzZW5kOwogICAgaWYgKHR5cGVvZiBnZW4ucmV0dXJuICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgdGhpcy5yZXR1cm4gPSB1bmRlZmluZWQ7CiAgICB9Cn0KaWYgKHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHsKICAgIF9hc3luY19nZW5lcmF0b3IucHJvdG90eXBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzOwogICAgfTsKfQpfYXN5bmNfZ2VuZXJhdG9yLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oYXJnKSB7CiAgICByZXR1cm4gdGhpcy5faW52b2tlKCJuZXh0IiwgYXJnKTsKfTsKX2FzeW5jX2dlbmVyYXRvci5wcm90b3R5cGUudGhyb3cgPSBmdW5jdGlvbihhcmcpIHsKICAgIHJldHVybiB0aGlzLl9pbnZva2UoInRocm93IiwgYXJnKTsKfTsKX2FzeW5jX2dlbmVyYXRvci5wcm90b3R5cGUucmV0dXJuID0gZnVuY3Rpb24oYXJnKSB7CiAgICByZXR1cm4gdGhpcy5faW52b2tlKCJyZXR1cm4iLCBhcmcpOwp9OwpmdW5jdGlvbiBfYXN5bmNfZ2VuZXJhdG9yX2RlbGVnYXRlKGlubmVyLCBhd2FpdFdyYXApIHsKICAgIHZhciBpdGVyID0ge30sIHdhaXRpbmcgPSBmYWxzZTsKICAgIGZ1bmN0aW9uIHB1bXAoa2V5LCB2YWx1ZSkgewogICAgICAgIHdhaXRpbmcgPSB0cnVlOwogICAgICAgIHZhbHVlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkgewogICAgICAgICAgICByZXNvbHZlKGlubmVyW2tleV0odmFsdWUpKTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IGF3YWl0V3JhcCh2YWx1ZSkgfTsKICAgIH0KICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5pdGVyYXRvcikgewogICAgICAgIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9OwogICAgfQogICAgaXRlci5uZXh0ID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICBpZiAod2FpdGluZykgewogICAgICAgICAgICB3YWl0aW5nID0gZmFsc2U7CiAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHB1bXAoIm5leHQiLCB2YWx1ZSk7CiAgICB9OwogICAgaWYgKHR5cGVvZiBpbm5lci50aHJvdyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIGl0ZXIudGhyb3cgPSBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICBpZiAod2FpdGluZykgewogICAgICAgICAgICAgICAgd2FpdGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgdGhyb3cgdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHB1bXAoInRocm93IiwgdmFsdWUpOwogICAgICAgIH07CiAgICB9CiAgICBpZiAodHlwZW9mIGlubmVyLnJldHVybiA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIGl0ZXIucmV0dXJuID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgcmV0dXJuIHB1bXAoInJldHVybiIsIHZhbHVlKTsKICAgICAgICB9OwogICAgfQogICAgcmV0dXJuIGl0ZXI7Cn0KZnVuY3Rpb24gX2FzeW5jX2l0ZXJhdG9yKGl0ZXJhYmxlKSB7CiAgICB2YXIgbWV0aG9kLCBhc3luYywgc3luYywgcmV0cnkgPSAyOwogICAgZm9yICgidW5kZWZpbmVkIiAhPSB0eXBlb2YgU3ltYm9sICYmIChhc3luYyA9IFN5bWJvbC5hc3luY0l0ZXJhdG9yLCBzeW5jID0gU3ltYm9sLml0ZXJhdG9yKTsgcmV0cnktLTspIHsKICAgICAgICBpZiAoYXN5bmMgJiYgbnVsbCAhPSAobWV0aG9kID0gaXRlcmFibGVbYXN5bmNdKSkgcmV0dXJuIG1ldGhvZC5jYWxsKGl0ZXJhYmxlKTsKICAgICAgICBpZiAoc3luYyAmJiBudWxsICE9IChtZXRob2QgPSBpdGVyYWJsZVtzeW5jXSkpIHJldHVybiBuZXcgQXN5bmNGcm9tU3luY0l0ZXJhdG9yKG1ldGhvZC5jYWxsKGl0ZXJhYmxlKSk7CiAgICAgICAgYXN5bmMgPSAiQEBhc3luY0l0ZXJhdG9yIiwgc3luYyA9ICJAQGl0ZXJhdG9yIjsKICAgIH0KICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBpcyBub3QgYXN5bmMgaXRlcmFibGUiKTsKfQpmdW5jdGlvbiBBc3luY0Zyb21TeW5jSXRlcmF0b3IocykgewogICAgZnVuY3Rpb24gQXN5bmNGcm9tU3luY0l0ZXJhdG9yQ29udGludWF0aW9uKHIpIHsKICAgICAgICBpZiAoT2JqZWN0KHIpICE9PSByKSByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcihyICsgIiBpcyBub3QgYW4gb2JqZWN0LiIpKTsKICAgICAgICB2YXIgZG9uZSA9IHIuZG9uZTsKICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiBkb25lIH07CiAgICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gQXN5bmNGcm9tU3luY0l0ZXJhdG9yID0gZnVuY3Rpb24ocykgewogICAgICAgIHRoaXMucyA9IHMsIHRoaXMubiA9IHMubmV4dDsKICAgIH0sCiAgICAgICAgQXN5bmNGcm9tU3luY0l0ZXJhdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgczogbnVsbCwKICAgICAgICAgICAgbjogbnVsbCwKICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gQXN5bmNGcm9tU3luY0l0ZXJhdG9yQ29udGludWF0aW9uKHRoaXMubi5hcHBseSh0aGlzLnMsIGFyZ3VtZW50cykpOwogICAgICAgICAgICB9LAogICAgICAgICAgICByZXR1cm46IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgICAgICB2YXIgcmV0ID0gdGhpcy5zLnJldHVybjsKICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIDAgPT09IHJldAogICAgICAgICAgICAgICAgICAgID8gUHJvbWlzZS5yZXNvbHZlKHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhMCB9KQogICAgICAgICAgICAgICAgICAgIDogQXN5bmNGcm9tU3luY0l0ZXJhdG9yQ29udGludWF0aW9uKHJldC5hcHBseSh0aGlzLnMsIGFyZ3VtZW50cykpOwogICAgICAgICAgICB9LAogICAgICAgICAgICB0aHJvdzogZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgICAgIHZhciB0aHIgPSB0aGlzLnMucmV0dXJuOwogICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gdGhyID8gUHJvbWlzZS5yZWplY3QodmFsdWUpIDogQXN5bmNGcm9tU3luY0l0ZXJhdG9yQ29udGludWF0aW9uKHRoci5hcHBseSh0aGlzLnMsIGFyZ3VtZW50cykpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBuZXcgQXN5bmNGcm9tU3luY0l0ZXJhdG9yKHMpOwp9CmZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsKICAgIHRyeSB7CiAgICAgICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOwogICAgICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIHJlamVjdChlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGluZm8uZG9uZSkgewogICAgICAgIHJlc29sdmUodmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7CiAgICB9Cn0KZnVuY3Rpb24gX2FzeW5jX3RvX2dlbmVyYXRvcihmbikgewogICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBzZWxmID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsKICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgICAgICAgIHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTsKICAgICAgICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHsKICAgICAgICAgICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgIm5leHQiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikgewogICAgICAgICAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCAidGhyb3ciLCBlcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9uZXh0KHVuZGVmaW5lZCk7CiAgICAgICAgfSk7CiAgICB9Owp9CmZ1bmN0aW9uIF9hd2FpdF9hc3luY19nZW5lcmF0b3IodmFsdWUpIHsKICAgIHJldHVybiBuZXcgX2F3YWl0X3ZhbHVlKHZhbHVlKTsKfQpmdW5jdGlvbiBfYXdhaXRfdmFsdWUodmFsdWUpIHsKICAgIHRoaXMud3JhcHBlZCA9IHZhbHVlOwp9CmZ1bmN0aW9uIF9jYWxsX3N1cGVyKF90aGlzLCBkZXJpdmVkLCBhcmdzKSB7CiAgICAvLyBTdXBlcgogICAgZGVyaXZlZCA9IF9nZXRfcHJvdG90eXBlX29mKGRlcml2ZWQpOwogICAgcmV0dXJuIF9wb3NzaWJsZV9jb25zdHJ1Y3Rvcl9yZXR1cm4oCiAgICAgICAgX3RoaXMsCiAgICAgICAgX2lzX25hdGl2ZV9yZWZsZWN0X2NvbnN0cnVjdCgpCiAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgZG9lc24ndCB3b3JrIGlmIHRoaXMuX19wcm90b19fLmNvbnN0cnVjdG9yIGhhcyBiZWVuIG1vZGlmaWVkLgogICAgICAgICAgICA/IFJlZmxlY3QuY29uc3RydWN0KGRlcml2ZWQsIGFyZ3MgfHwgW10sIF9nZXRfcHJvdG90eXBlX29mKF90aGlzKS5jb25zdHJ1Y3RvcikKICAgICAgICAgICAgOiBkZXJpdmVkLmFwcGx5KF90aGlzLCBhcmdzKQogICAgKTsKfQpmdW5jdGlvbiBfY2hlY2tfcHJpdmF0ZV9yZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsKICAgIGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iik7CiAgICB9Cn0KZnVuY3Rpb24gX2NsYXNzX2FwcGx5X2Rlc2NyaXB0b3JfZGVzdHJ1Y3R1cmUocmVjZWl2ZXIsIGRlc2NyaXB0b3IpIHsKICAgIGlmIChkZXNjcmlwdG9yLnNldCkgewogICAgICAgIGlmICghKCJfX2Rlc3RyT2JqIiBpbiBkZXNjcmlwdG9yKSkgewogICAgICAgICAgICBkZXNjcmlwdG9yLl9fZGVzdHJPYmogPSB7CiAgICAgICAgICAgICAgICBzZXQgdmFsdWUodikgewogICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0LmNhbGwocmVjZWl2ZXIsIHYpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGVzY3JpcHRvci5fX2Rlc3RyT2JqOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAoIWRlc2NyaXB0b3Iud3JpdGFibGUpIHsKICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSB0aHJvdyBpbiBzdHJpY3QgbW9kZSwgYnV0IGNsYXNzIGJvZGllcyBhcmUKICAgICAgICAgICAgLy8gYWx3YXlzIHN0cmljdCBhbmQgcHJpdmF0ZSBmaWVsZHMgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUKICAgICAgICAgICAgLy8gY2xhc3MgYm9kaWVzLgogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkZXNjcmlwdG9yOwogICAgfQp9CmZ1bmN0aW9uIF9jbGFzc19hcHBseV9kZXNjcmlwdG9yX2dldChyZWNlaXZlciwgZGVzY3JpcHRvcikgewogICAgaWYgKGRlc2NyaXB0b3IuZ2V0KSB7CiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3IuZ2V0LmNhbGwocmVjZWl2ZXIpOwogICAgfQogICAgcmV0dXJuIGRlc2NyaXB0b3IudmFsdWU7Cn0KZnVuY3Rpb24gX2NsYXNzX2FwcGx5X2Rlc2NyaXB0b3Jfc2V0KHJlY2VpdmVyLCBkZXNjcmlwdG9yLCB2YWx1ZSkgewogICAgaWYgKGRlc2NyaXB0b3Iuc2V0KSB7CiAgICAgICAgZGVzY3JpcHRvci5zZXQuY2FsbChyZWNlaXZlciwgdmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAoIWRlc2NyaXB0b3Iud3JpdGFibGUpIHsKICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSB0aHJvdyBpbiBzdHJpY3QgbW9kZSwgYnV0IGNsYXNzIGJvZGllcyBhcmUKICAgICAgICAgICAgLy8gYWx3YXlzIHN0cmljdCBhbmQgcHJpdmF0ZSBmaWVsZHMgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUKICAgICAgICAgICAgLy8gY2xhc3MgYm9kaWVzLgogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7CiAgICAgICAgfQogICAgICAgIGRlc2NyaXB0b3IudmFsdWUgPSB2YWx1ZTsKICAgIH0KfQpmdW5jdGlvbiBfY2xhc3NfYXBwbHlfZGVzY3JpcHRvcl91cGRhdGUocmVjZWl2ZXIsIGRlc2NyaXB0b3IpIHsKICAgIGlmIChkZXNjcmlwdG9yLnNldCkgewogICAgICAgIGlmICghZGVzY3JpcHRvci5nZXQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHJlYWQgc2V0IG9ubHkgcHJpdmF0ZSBmaWVsZCIpOwogICAgICAgIH0KICAgICAgICBpZiAoISgiX19kZXN0cldyYXBwZXIiIGluIGRlc2NyaXB0b3IpKSB7CiAgICAgICAgICAgIGRlc2NyaXB0b3IuX19kZXN0cldyYXBwZXIgPSB7CiAgICAgICAgICAgICAgICBzZXQgdmFsdWUodikgewogICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0LmNhbGwocmVjZWl2ZXIsIHYpOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGdldCB2YWx1ZSgpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvci5nZXQuY2FsbChyZWNlaXZlcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIHJldHVybiBkZXNjcmlwdG9yLl9fZGVzdHJXcmFwcGVyOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAoIWRlc2NyaXB0b3Iud3JpdGFibGUpIHsKICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSB0aHJvdyBpbiBzdHJpY3QgbW9kZSwgYnV0IGNsYXNzIGJvZGllcyBhcmUKICAgICAgICAgICAgLy8gYWx3YXlzIHN0cmljdCBhbmQgcHJpdmF0ZSBmaWVsZHMgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUKICAgICAgICAgICAgLy8gY2xhc3MgYm9kaWVzLgogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkZXNjcmlwdG9yOwogICAgfQp9CmZ1bmN0aW9uIF9jbGFzc19jYWxsX2NoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgewogICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsKICAgIH0KfQpmdW5jdGlvbiBfY2xhc3NfY2hlY2tfcHJpdmF0ZV9zdGF0aWNfZmllbGRfZGVzY3JpcHRvcihkZXNjcmlwdG9yLCBhY3Rpb24pIHsKICAgIGlmIChkZXNjcmlwdG9yID09PSB1bmRlZmluZWQpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIiArIGFjdGlvbiArICIgcHJpdmF0ZSBzdGF0aWMgZmllbGQgYmVmb3JlIGl0cyBkZWNsYXJhdGlvbiIpOwogICAgfQp9CmZ1bmN0aW9uIF9jbGFzc19leHRyYWN0X2ZpZWxkX2Rlc2NyaXB0b3IocmVjZWl2ZXIsIHByaXZhdGVNYXAsIGFjdGlvbikgewogICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIiArIGFjdGlvbiArICIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTsKICAgIH0KICAgIHJldHVybiBwcml2YXRlTWFwLmdldChyZWNlaXZlcik7Cn0KZnVuY3Rpb24gX2NsYXNzX25hbWVfdGR6X2Vycm9yKG5hbWUpIHsKICAgIHRocm93IG5ldyBFcnJvcigiQ2xhc3MgXCIiICsgbmFtZSArICJcIiBjYW5ub3QgYmUgcmVmZXJlbmNlZCBpbiBjb21wdXRlZCBwcm9wZXJ0eSBrZXlzLiIpOwp9CmZ1bmN0aW9uIF9jbGFzc19wcml2YXRlX2ZpZWxkX2dldChyZWNlaXZlciwgcHJpdmF0ZU1hcCkgewogICAgdmFyIGRlc2NyaXB0b3IgPSBfY2xhc3NfZXh0cmFjdF9maWVsZF9kZXNjcmlwdG9yKHJlY2VpdmVyLCBwcml2YXRlTWFwLCAiZ2V0Iik7CiAgICByZXR1cm4gX2NsYXNzX2FwcGx5X2Rlc2NyaXB0b3JfZ2V0KHJlY2VpdmVyLCBkZXNjcmlwdG9yKTsKfQpmdW5jdGlvbiBfY2xhc3NfcHJpdmF0ZV9maWVsZF9pbml0KG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHsKICAgIF9jaGVja19wcml2YXRlX3JlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlTWFwKTsKICAgIHByaXZhdGVNYXAuc2V0KG9iaiwgdmFsdWUpOwp9CmZ1bmN0aW9uIF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UocmVjZWl2ZXIsIHByaXZhdGVLZXkpIHsKICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlY2VpdmVyLCBwcml2YXRlS2V5KSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byB1c2UgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTsKICAgIH0KICAgIHJldHVybiByZWNlaXZlcjsKfQp2YXIgaWQgPSAwOwpmdW5jdGlvbiBfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9rZXkobmFtZSkgewogICAgcmV0dXJuICJfX3ByaXZhdGVfIiArIGlkKysgKyAiXyIgKyBuYW1lOwp9CmZ1bmN0aW9uIF9jbGFzc19wcml2YXRlX2ZpZWxkX3NldChyZWNlaXZlciwgcHJpdmF0ZU1hcCwgdmFsdWUpIHsKICAgIHZhciBkZXNjcmlwdG9yID0gX2NsYXNzX2V4dHJhY3RfZmllbGRfZGVzY3JpcHRvcihyZWNlaXZlciwgcHJpdmF0ZU1hcCwgInNldCIpOwogICAgX2NsYXNzX2FwcGx5X2Rlc2NyaXB0b3Jfc2V0KHJlY2VpdmVyLCBkZXNjcmlwdG9yLCB2YWx1ZSk7CiAgICByZXR1cm4gdmFsdWU7Cn0KZnVuY3Rpb24gX2NsYXNzX3ByaXZhdGVfZmllbGRfdXBkYXRlKHJlY2VpdmVyLCBwcml2YXRlTWFwKSB7CiAgICB2YXIgZGVzY3JpcHRvciA9IF9jbGFzc19leHRyYWN0X2ZpZWxkX2Rlc2NyaXB0b3IocmVjZWl2ZXIsIHByaXZhdGVNYXAsICJ1cGRhdGUiKTsKICAgIHJldHVybiBfY2xhc3NfYXBwbHlfZGVzY3JpcHRvcl91cGRhdGUocmVjZWl2ZXIsIGRlc2NyaXB0b3IpOwp9CmZ1bmN0aW9uIF9jbGFzc19wcml2YXRlX21ldGhvZF9nZXQocmVjZWl2ZXIsIHByaXZhdGVTZXQsIGZuKSB7CiAgICBpZiAoIXByaXZhdGVTZXQuaGFzKHJlY2VpdmVyKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTsKICAgIH0KICAgIHJldHVybiBmbjsKfQpmdW5jdGlvbiBfY2xhc3NfcHJpdmF0ZV9tZXRob2RfaW5pdChvYmosIHByaXZhdGVTZXQpIHsKICAgIF9jaGVja19wcml2YXRlX3JlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsKICAgIHByaXZhdGVTZXQuYWRkKG9iaik7Cn0KZnVuY3Rpb24gX2NsYXNzX3ByaXZhdGVfbWV0aG9kX3NldCgpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byByZWFzc2lnbiBwcml2YXRlIG1ldGhvZCIpOwp9CmZ1bmN0aW9uIF9jbGFzc19zdGF0aWNfcHJpdmF0ZV9maWVsZF9zcGVjX2dldChyZWNlaXZlciwgY2xhc3NDb25zdHJ1Y3RvciwgZGVzY3JpcHRvcikgewogICAgX2NsYXNzX2NoZWNrX3ByaXZhdGVfc3RhdGljX2FjY2VzcyhyZWNlaXZlciwgY2xhc3NDb25zdHJ1Y3Rvcik7CiAgICBfY2xhc3NfY2hlY2tfcHJpdmF0ZV9zdGF0aWNfZmllbGRfZGVzY3JpcHRvcihkZXNjcmlwdG9yLCAiZ2V0Iik7CiAgICByZXR1cm4gX2NsYXNzX2FwcGx5X2Rlc2NyaXB0b3JfZ2V0KHJlY2VpdmVyLCBkZXNjcmlwdG9yKTsKfQpmdW5jdGlvbiBfY2xhc3Nfc3RhdGljX3ByaXZhdGVfZmllbGRfc3BlY19zZXQocmVjZWl2ZXIsIGNsYXNzQ29uc3RydWN0b3IsIGRlc2NyaXB0b3IsIHZhbHVlKSB7CiAgICBfY2xhc3NfY2hlY2tfcHJpdmF0ZV9zdGF0aWNfYWNjZXNzKHJlY2VpdmVyLCBjbGFzc0NvbnN0cnVjdG9yKTsKICAgIF9jbGFzc19jaGVja19wcml2YXRlX3N0YXRpY19maWVsZF9kZXNjcmlwdG9yKGRlc2NyaXB0b3IsICJzZXQiKTsKICAgIF9jbGFzc19hcHBseV9kZXNjcmlwdG9yX3NldChyZWNlaXZlciwgZGVzY3JpcHRvciwgdmFsdWUpOwogICAgcmV0dXJuIHZhbHVlOwp9CmZ1bmN0aW9uIF9jbGFzc19zdGF0aWNfcHJpdmF0ZV9maWVsZF91cGRhdGUocmVjZWl2ZXIsIGNsYXNzQ29uc3RydWN0b3IsIGRlc2NyaXB0b3IpIHsKICAgIF9jbGFzc19jaGVja19wcml2YXRlX3N0YXRpY19hY2Nlc3MocmVjZWl2ZXIsIGNsYXNzQ29uc3RydWN0b3IpOwogICAgX2NsYXNzX2NoZWNrX3ByaXZhdGVfc3RhdGljX2ZpZWxkX2Rlc2NyaXB0b3IoZGVzY3JpcHRvciwgInVwZGF0ZSIpOwogICAgcmV0dXJuIF9jbGFzc19hcHBseV9kZXNjcmlwdG9yX3VwZGF0ZShyZWNlaXZlciwgZGVzY3JpcHRvcik7Cn0KZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7CiAgICBpZiAoX2lzX25hdGl2ZV9yZWZsZWN0X2NvbnN0cnVjdCgpKSB7CiAgICAgICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0OwogICAgfSBlbHNlIHsKICAgICAgICBfY29uc3RydWN0ID0gZnVuY3Rpb24gY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHsKICAgICAgICAgICAgdmFyIGEgPSBbbnVsbF07CiAgICAgICAgICAgIGEucHVzaC5hcHBseShhLCBhcmdzKTsKICAgICAgICAgICAgdmFyIENvbnN0cnVjdG9yID0gRnVuY3Rpb24uYmluZC5hcHBseShQYXJlbnQsIGEpOwogICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTsKICAgICAgICAgICAgaWYgKENsYXNzKSBfc2V0X3Byb3RvdHlwZV9vZihpbnN0YW5jZSwgQ2xhc3MucHJvdG90eXBlKTsKICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgICAgIH07CiAgICB9CiAgICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpOwp9CmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOwogICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsKICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7CiAgICAgICAgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOwogICAgfQp9CmZ1bmN0aW9uIF9jcmVhdGVfY2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7CiAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsKICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsKICAgIHJldHVybiBDb25zdHJ1Y3RvcjsKfQpmdW5jdGlvbiBfZGVjb3JhdGUoZGVjb3JhdG9ycywgZmFjdG9yeSwgc3VwZXJDbGFzcykgewogICAgdmFyIHIgPSBmYWN0b3J5KGZ1bmN0aW9uIGluaXRpYWxpemUoTykgewogICAgICAgIF9pbml0aWFsaXplSW5zdGFuY2VFbGVtZW50cyhPLCBkZWNvcmF0ZWQuZWxlbWVudHMpOwogICAgfSwgc3VwZXJDbGFzcyk7CiAgICB2YXIgZGVjb3JhdGVkID0gX2RlY29yYXRlQ2xhc3MoX2NvYWxlc2NlQ2xhc3NFbGVtZW50cyhyLmQubWFwKF9jcmVhdGVFbGVtZW50RGVzY3JpcHRvcikpLCBkZWNvcmF0b3JzKTsKICAgIF9pbml0aWFsaXplQ2xhc3NFbGVtZW50cyhyLkYsIGRlY29yYXRlZC5lbGVtZW50cyk7CiAgICByZXR1cm4gX3J1bkNsYXNzRmluaXNoZXJzKHIuRiwgZGVjb3JhdGVkLmZpbmlzaGVycyk7Cn0KCmZ1bmN0aW9uIF9jcmVhdGVFbGVtZW50RGVzY3JpcHRvcihkZWYpIHsKICAgIHZhciBrZXkgPSBfdG9fcHJvcGVydHlfa2V5KGRlZi5rZXkpOwogICAgdmFyIGRlc2NyaXB0b3I7CiAgICBpZiAoZGVmLmtpbmQgPT09ICJtZXRob2QiKSB7CiAgICAgICAgZGVzY3JpcHRvciA9IHsgdmFsdWU6IGRlZi52YWx1ZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UgfTsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVmLnZhbHVlLCAibmFtZSIsIHsgdmFsdWU6IF90eXBlX29mKGtleSkgPT09ICJzeW1ib2wiID8gIiIgOiBrZXksIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTsKICAgIH0gZWxzZSBpZiAoZGVmLmtpbmQgPT09ICJnZXQiKSB7CiAgICAgICAgZGVzY3JpcHRvciA9IHsgZ2V0OiBkZWYudmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UgfTsKICAgIH0gZWxzZSBpZiAoZGVmLmtpbmQgPT09ICJzZXQiKSB7CiAgICAgICAgZGVzY3JpcHRvciA9IHsgc2V0OiBkZWYudmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UgfTsKICAgIH0gZWxzZSBpZiAoZGVmLmtpbmQgPT09ICJmaWVsZCIpIHsKICAgICAgICBkZXNjcmlwdG9yID0geyBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlIH07CiAgICB9CiAgICB2YXIgZWxlbWVudCA9IHsKICAgICAgICBraW5kOiBkZWYua2luZCA9PT0gImZpZWxkIiA/ICJmaWVsZCIgOiAibWV0aG9kIiwKICAgICAgICBrZXk6IGtleSwKICAgICAgICBwbGFjZW1lbnQ6IGRlZi5zdGF0aWMgPyAic3RhdGljIiA6IGRlZi5raW5kID09PSAiZmllbGQiID8gIm93biIgOiAicHJvdG90eXBlIiwKICAgICAgICBkZXNjcmlwdG9yOiBkZXNjcmlwdG9yCiAgICB9OwogICAgaWYgKGRlZi5kZWNvcmF0b3JzKSBlbGVtZW50LmRlY29yYXRvcnMgPSBkZWYuZGVjb3JhdG9yczsKICAgIGlmIChkZWYua2luZCA9PT0gImZpZWxkIikgZWxlbWVudC5pbml0aWFsaXplciA9IGRlZi52YWx1ZTsKICAgIHJldHVybiBlbGVtZW50Owp9CmZ1bmN0aW9uIF9jb2FsZXNjZUdldHRlclNldHRlcihlbGVtZW50LCBvdGhlcikgewogICAgaWYgKGVsZW1lbnQuZGVzY3JpcHRvci5nZXQgIT09IHVuZGVmaW5lZCkgewogICAgICAgIG90aGVyLmRlc2NyaXB0b3IuZ2V0ID0gZWxlbWVudC5kZXNjcmlwdG9yLmdldDsKICAgIH0gZWxzZSB7CiAgICAgICAgb3RoZXIuZGVzY3JpcHRvci5zZXQgPSBlbGVtZW50LmRlc2NyaXB0b3Iuc2V0OwogICAgfQp9CmZ1bmN0aW9uIF9jb2FsZXNjZUNsYXNzRWxlbWVudHMoZWxlbWVudHMpIHsKICAgIHZhciBuZXdFbGVtZW50cyA9IFtdOwogICAgdmFyIGlzU2FtZUVsZW1lbnQgPSBmdW5jdGlvbiBpc1NhbWVFbGVtZW50KG90aGVyKSB7CiAgICAgICAgcmV0dXJuIG90aGVyLmtpbmQgPT09ICJtZXRob2QiICYmIG90aGVyLmtleSA9PT0gZWxlbWVudC5rZXkgJiYgb3RoZXIucGxhY2VtZW50ID09PSBlbGVtZW50LnBsYWNlbWVudDsKICAgIH07CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBlbGVtZW50c1tpXTsKICAgICAgICB2YXIgb3RoZXI7CiAgICAgICAgaWYgKGVsZW1lbnQua2luZCA9PT0gIm1ldGhvZCIgJiYgKG90aGVyID0gbmV3RWxlbWVudHMuZmluZChpc1NhbWVFbGVtZW50KSkpIHsKICAgICAgICAgICAgaWYgKF9pc0RhdGFEZXNjcmlwdG9yKGVsZW1lbnQuZGVzY3JpcHRvcikgfHwgX2lzRGF0YURlc2NyaXB0b3Iob3RoZXIuZGVzY3JpcHRvcikpIHsKICAgICAgICAgICAgICAgIGlmIChfaGFzRGVjb3JhdG9ycyhlbGVtZW50KSB8fCBfaGFzRGVjb3JhdG9ycyhvdGhlcikpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoIkR1cGxpY2F0ZWQgbWV0aG9kcyAoIiArIGVsZW1lbnQua2V5ICsgIikgY2FuJ3QgYmUgZGVjb3JhdGVkLiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgb3RoZXIuZGVzY3JpcHRvciA9IGVsZW1lbnQuZGVzY3JpcHRvcjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChfaGFzRGVjb3JhdG9ycyhlbGVtZW50KSkgewogICAgICAgICAgICAgICAgICAgIGlmIChfaGFzRGVjb3JhdG9ycyhvdGhlcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlY29yYXRvcnMgY2FuJ3QgYmUgcGxhY2VkIG9uIGRpZmZlcmVudCBhY2Nlc3NvcnMgd2l0aCBmb3IgIiArICJ0aGUgc2FtZSBwcm9wZXJ0eSAoIiArIGVsZW1lbnQua2V5ICsgIikuIgogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBvdGhlci5kZWNvcmF0b3JzID0gZWxlbWVudC5kZWNvcmF0b3JzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX2NvYWxlc2NlR2V0dGVyU2V0dGVyKGVsZW1lbnQsIG90aGVyKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5ld0VsZW1lbnRzLnB1c2goZWxlbWVudCk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ld0VsZW1lbnRzOwp9CmZ1bmN0aW9uIF9oYXNEZWNvcmF0b3JzKGVsZW1lbnQpIHsKICAgIHJldHVybiBlbGVtZW50LmRlY29yYXRvcnMgJiYgZWxlbWVudC5kZWNvcmF0b3JzLmxlbmd0aDsKfQpmdW5jdGlvbiBfaXNEYXRhRGVzY3JpcHRvcihkZXNjKSB7CiAgICByZXR1cm4gZGVzYyAhPT0gdW5kZWZpbmVkICYmICEoZGVzYy52YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlc2Mud3JpdGFibGUgPT09IHVuZGVmaW5lZCk7Cn0KZnVuY3Rpb24gX2luaXRpYWxpemVDbGFzc0VsZW1lbnRzKEYsIGVsZW1lbnRzKSB7CiAgICB2YXIgcHJvdG8gPSBGLnByb3RvdHlwZTsKICAgIFsibWV0aG9kIiwgImZpZWxkIl0uZm9yRWFjaChmdW5jdGlvbihraW5kKSB7CiAgICAgICAgZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7CiAgICAgICAgICAgIHZhciBwbGFjZW1lbnQgPSBlbGVtZW50LnBsYWNlbWVudDsKICAgICAgICAgICAgaWYgKGVsZW1lbnQua2luZCA9PT0ga2luZCAmJiAocGxhY2VtZW50ID09PSAic3RhdGljIiB8fCBwbGFjZW1lbnQgPT09ICJwcm90b3R5cGUiKSkgewogICAgICAgICAgICAgICAgdmFyIHJlY2VpdmVyID0gcGxhY2VtZW50ID09PSAic3RhdGljIiA/IEYgOiBwcm90bzsKICAgICAgICAgICAgICAgIF9kZWZpbmVDbGFzc0VsZW1lbnQocmVjZWl2ZXIsIGVsZW1lbnQpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKfQpmdW5jdGlvbiBfaW5pdGlhbGl6ZUluc3RhbmNlRWxlbWVudHMoTywgZWxlbWVudHMpIHsKICAgIFsibWV0aG9kIiwgImZpZWxkIl0uZm9yRWFjaChmdW5jdGlvbihraW5kKSB7CiAgICAgICAgZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7CiAgICAgICAgICAgIGlmIChlbGVtZW50LmtpbmQgPT09IGtpbmQgJiYgZWxlbWVudC5wbGFjZW1lbnQgPT09ICJvd24iKSB7CiAgICAgICAgICAgICAgICBfZGVmaW5lQ2xhc3NFbGVtZW50KE8sIGVsZW1lbnQpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKfQpmdW5jdGlvbiBfZGVmaW5lQ2xhc3NFbGVtZW50KHJlY2VpdmVyLCBlbGVtZW50KSB7CiAgICB2YXIgZGVzY3JpcHRvciA9IGVsZW1lbnQuZGVzY3JpcHRvcjsKICAgIGlmIChlbGVtZW50LmtpbmQgPT09ICJmaWVsZCIpIHsKICAgICAgICB2YXIgaW5pdGlhbGl6ZXIgPSBlbGVtZW50LmluaXRpYWxpemVyOwogICAgICAgIGRlc2NyaXB0b3IgPSB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IGRlc2NyaXB0b3IuZW51bWVyYWJsZSwKICAgICAgICAgICAgd3JpdGFibGU6IGRlc2NyaXB0b3Iud3JpdGFibGUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZGVzY3JpcHRvci5jb25maWd1cmFibGUsCiAgICAgICAgICAgIHZhbHVlOiBpbml0aWFsaXplciA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5pdGlhbGl6ZXIuY2FsbChyZWNlaXZlcikKICAgICAgICB9OwogICAgfQogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlY2VpdmVyLCBlbGVtZW50LmtleSwgZGVzY3JpcHRvcik7Cn0KZnVuY3Rpb24gX2RlY29yYXRlQ2xhc3MoZWxlbWVudHMsIGRlY29yYXRvcnMpIHsKICAgIHZhciBuZXdFbGVtZW50cyA9IFtdOwogICAgdmFyIGZpbmlzaGVycyA9IFtdOwogICAgdmFyIHBsYWNlbWVudHMgPSB7IHN0YXRpYzogW10sIHByb3RvdHlwZTogW10sIG93bjogW10gfTsKICAgIGVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkgewogICAgICAgIF9hZGRFbGVtZW50UGxhY2VtZW50KGVsZW1lbnQsIHBsYWNlbWVudHMpOwogICAgfSk7CiAgICBlbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgICAgICBpZiAoIV9oYXNEZWNvcmF0b3JzKGVsZW1lbnQpKSByZXR1cm4gbmV3RWxlbWVudHMucHVzaChlbGVtZW50KTsKICAgICAgICB2YXIgZWxlbWVudEZpbmlzaGVyc0V4dHJhcyA9IF9kZWNvcmF0ZUVsZW1lbnQoZWxlbWVudCwgcGxhY2VtZW50cyk7CiAgICAgICAgbmV3RWxlbWVudHMucHVzaChlbGVtZW50RmluaXNoZXJzRXh0cmFzLmVsZW1lbnQpOwogICAgICAgIG5ld0VsZW1lbnRzLnB1c2guYXBwbHkobmV3RWxlbWVudHMsIGVsZW1lbnRGaW5pc2hlcnNFeHRyYXMuZXh0cmFzKTsKICAgICAgICBmaW5pc2hlcnMucHVzaC5hcHBseShmaW5pc2hlcnMsIGVsZW1lbnRGaW5pc2hlcnNFeHRyYXMuZmluaXNoZXJzKTsKICAgIH0pOwogICAgaWYgKCFkZWNvcmF0b3JzKSB7CiAgICAgICAgcmV0dXJuIHsgZWxlbWVudHM6IG5ld0VsZW1lbnRzLCBmaW5pc2hlcnM6IGZpbmlzaGVycyB9OwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9kZWNvcmF0ZUNvbnN0cnVjdG9yKG5ld0VsZW1lbnRzLCBkZWNvcmF0b3JzKTsKICAgIGZpbmlzaGVycy5wdXNoLmFwcGx5KGZpbmlzaGVycywgcmVzdWx0LmZpbmlzaGVycyk7CiAgICByZXN1bHQuZmluaXNoZXJzID0gZmluaXNoZXJzOwogICAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBfYWRkRWxlbWVudFBsYWNlbWVudChlbGVtZW50LCBwbGFjZW1lbnRzLCBzaWxlbnQpIHsKICAgIHZhciBrZXlzID0gcGxhY2VtZW50c1tlbGVtZW50LnBsYWNlbWVudF07CiAgICBpZiAoIXNpbGVudCAmJiBrZXlzLmluZGV4T2YoZWxlbWVudC5rZXkpICE9PSAtMSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkR1cGxpY2F0ZWQgZWxlbWVudCAoIiArIGVsZW1lbnQua2V5ICsgIikiKTsKICAgIH0KICAgIGtleXMucHVzaChlbGVtZW50LmtleSk7Cn0KZnVuY3Rpb24gX2RlY29yYXRlRWxlbWVudChlbGVtZW50LCBwbGFjZW1lbnRzKSB7CiAgICB2YXIgZXh0cmFzID0gW107CiAgICB2YXIgZmluaXNoZXJzID0gW107CiAgICBmb3IgKHZhciBkZWNvcmF0b3JzID0gZWxlbWVudC5kZWNvcmF0b3JzLCBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIHZhciBrZXlzID0gcGxhY2VtZW50c1tlbGVtZW50LnBsYWNlbWVudF07CiAgICAgICAga2V5cy5zcGxpY2Uoa2V5cy5pbmRleE9mKGVsZW1lbnQua2V5KSwgMSk7CiAgICAgICAgdmFyIGVsZW1lbnRPYmplY3QgPSBfZnJvbUVsZW1lbnREZXNjcmlwdG9yKGVsZW1lbnQpOwogICAgICAgIHZhciBlbGVtZW50RmluaXNoZXJFeHRyYXMgPSBfdG9FbGVtZW50RmluaXNoZXJFeHRyYXMoKDAsIGRlY29yYXRvcnNbaV0pKGVsZW1lbnRPYmplY3QpIHx8IGVsZW1lbnRPYmplY3QpOwogICAgICAgIGVsZW1lbnQgPSBlbGVtZW50RmluaXNoZXJFeHRyYXMuZWxlbWVudDsKICAgICAgICBfYWRkRWxlbWVudFBsYWNlbWVudChlbGVtZW50LCBwbGFjZW1lbnRzKTsKICAgICAgICBpZiAoZWxlbWVudEZpbmlzaGVyRXh0cmFzLmZpbmlzaGVyKSB7CiAgICAgICAgICAgIGZpbmlzaGVycy5wdXNoKGVsZW1lbnRGaW5pc2hlckV4dHJhcy5maW5pc2hlcik7CiAgICAgICAgfQogICAgICAgIHZhciBuZXdFeHRyYXMgPSBlbGVtZW50RmluaXNoZXJFeHRyYXMuZXh0cmFzOwogICAgICAgIGlmIChuZXdFeHRyYXMpIHsKICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuZXdFeHRyYXMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICAgIF9hZGRFbGVtZW50UGxhY2VtZW50KG5ld0V4dHJhc1tqXSwgcGxhY2VtZW50cyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXh0cmFzLnB1c2guYXBwbHkoZXh0cmFzLCBuZXdFeHRyYXMpOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiB7IGVsZW1lbnQ6IGVsZW1lbnQsIGZpbmlzaGVyczogZmluaXNoZXJzLCBleHRyYXM6IGV4dHJhcyB9Owp9CmZ1bmN0aW9uIF9kZWNvcmF0ZUNvbnN0cnVjdG9yKGVsZW1lbnRzLCBkZWNvcmF0b3JzKSB7CiAgICB2YXIgZmluaXNoZXJzID0gW107CiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIHZhciBvYmogPSBfZnJvbUNsYXNzRGVzY3JpcHRvcihlbGVtZW50cyk7CiAgICAgICAgdmFyIGVsZW1lbnRzQW5kRmluaXNoZXIgPSBfdG9DbGFzc0Rlc2NyaXB0b3IoKDAsIGRlY29yYXRvcnNbaV0pKG9iaikgfHwgb2JqKTsKICAgICAgICBpZiAoZWxlbWVudHNBbmRGaW5pc2hlci5maW5pc2hlciAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIGZpbmlzaGVycy5wdXNoKGVsZW1lbnRzQW5kRmluaXNoZXIuZmluaXNoZXIpOwogICAgICAgIH0KICAgICAgICBpZiAoZWxlbWVudHNBbmRGaW5pc2hlci5lbGVtZW50cyAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIGVsZW1lbnRzID0gZWxlbWVudHNBbmRGaW5pc2hlci5lbGVtZW50czsKICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBlbGVtZW50cy5sZW5ndGggLSAxOyBqKyspIHsKICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSBqICsgMTsgayA8IGVsZW1lbnRzLmxlbmd0aDsgaysrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzW2pdLmtleSA9PT0gZWxlbWVudHNba10ua2V5ICYmIGVsZW1lbnRzW2pdLnBsYWNlbWVudCA9PT0gZWxlbWVudHNba10ucGxhY2VtZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkR1cGxpY2F0ZWQgZWxlbWVudCAoIiArIGVsZW1lbnRzW2pdLmtleSArICIpIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHsgZWxlbWVudHM6IGVsZW1lbnRzLCBmaW5pc2hlcnM6IGZpbmlzaGVycyB9Owp9CmZ1bmN0aW9uIF9mcm9tRWxlbWVudERlc2NyaXB0b3IoZWxlbWVudCkgewogICAgdmFyIG9iaiA9IHsga2luZDogZWxlbWVudC5raW5kLCBrZXk6IGVsZW1lbnQua2V5LCBwbGFjZW1lbnQ6IGVsZW1lbnQucGxhY2VtZW50LCBkZXNjcmlwdG9yOiBlbGVtZW50LmRlc2NyaXB0b3IgfTsKICAgIHZhciBkZXNjID0geyB2YWx1ZTogIkRlc2NyaXB0b3IiLCBjb25maWd1cmFibGU6IHRydWUgfTsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIFN5bWJvbC50b1N0cmluZ1RhZywgZGVzYyk7CiAgICBpZiAoZWxlbWVudC5raW5kID09PSAiZmllbGQiKSBvYmouaW5pdGlhbGl6ZXIgPSBlbGVtZW50LmluaXRpYWxpemVyOwogICAgcmV0dXJuIG9iajsKfQpmdW5jdGlvbiBfdG9FbGVtZW50RGVzY3JpcHRvcnMoZWxlbWVudE9iamVjdHMpIHsKICAgIGlmIChlbGVtZW50T2JqZWN0cyA9PT0gdW5kZWZpbmVkKSByZXR1cm47CiAgICByZXR1cm4gX3RvX2FycmF5KGVsZW1lbnRPYmplY3RzKS5tYXAoZnVuY3Rpb24oZWxlbWVudE9iamVjdCkgewogICAgICAgIHZhciBlbGVtZW50ID0gX3RvRWxlbWVudERlc2NyaXB0b3IoZWxlbWVudE9iamVjdCk7CiAgICAgICAgX2Rpc2FsbG93UHJvcGVydHkoZWxlbWVudE9iamVjdCwgImZpbmlzaGVyIiwgIkFuIGVsZW1lbnQgZGVzY3JpcHRvciIpOwogICAgICAgIF9kaXNhbGxvd1Byb3BlcnR5KGVsZW1lbnRPYmplY3QsICJleHRyYXMiLCAiQW4gZWxlbWVudCBkZXNjcmlwdG9yIik7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9KTsKfQpmdW5jdGlvbiBfdG9FbGVtZW50RGVzY3JpcHRvcihlbGVtZW50T2JqZWN0KSB7CiAgICB2YXIga2luZCA9IFN0cmluZyhlbGVtZW50T2JqZWN0LmtpbmQpOwogICAgaWYgKGtpbmQgIT09ICJtZXRob2QiICYmIGtpbmQgIT09ICJmaWVsZCIpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKAogICAgICAgICAgICAiQW4gZWxlbWVudCBkZXNjcmlwdG9yJ3MgLmtpbmQgcHJvcGVydHkgbXVzdCBiZSBlaXRoZXIgXCJtZXRob2RcIiBvciIKICAgICAgICAgICAgICAgICsgIiBcImZpZWxkXCIsIGJ1dCBhIGRlY29yYXRvciBjcmVhdGVkIGFuIGVsZW1lbnQgZGVzY3JpcHRvciB3aXRoIiArICIgLmtpbmQgXCIiICsga2luZCArICJcIiIKICAgICAgICApOwogICAgfQogICAgdmFyIGtleSA9IF90b19wcm9wZXJ0eV9rZXkoZWxlbWVudE9iamVjdC5rZXkpOwogICAgdmFyIHBsYWNlbWVudCA9IFN0cmluZyhlbGVtZW50T2JqZWN0LnBsYWNlbWVudCk7CiAgICBpZiAocGxhY2VtZW50ICE9PSAic3RhdGljIiAmJiBwbGFjZW1lbnQgIT09ICJwcm90b3R5cGUiICYmIHBsYWNlbWVudCAhPT0gIm93biIpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKAogICAgICAgICAgICAiQW4gZWxlbWVudCBkZXNjcmlwdG9yJ3MgLnBsYWNlbWVudCBwcm9wZXJ0eSBtdXN0IGJlIG9uZSBvZiBcInN0YXRpY1wiLCIKICAgICAgICAgICAgICAgICsgIiBcInByb3RvdHlwZVwiIG9yIFwib3duXCIsIGJ1dCBhIGRlY29yYXRvciBjcmVhdGVkIGFuIGVsZW1lbnQgZGVzY3JpcHRvciIgKyAiIHdpdGggLnBsYWNlbWVudCBcIiIgKyBwbGFjZW1lbnQgKyAiXCIiCiAgICAgICAgKTsKICAgIH0KICAgIHZhciBkZXNjcmlwdG9yID0gZWxlbWVudE9iamVjdC5kZXNjcmlwdG9yOwogICAgX2Rpc2FsbG93UHJvcGVydHkoZWxlbWVudE9iamVjdCwgImVsZW1lbnRzIiwgIkFuIGVsZW1lbnQgZGVzY3JpcHRvciIpOwogICAgdmFyIGVsZW1lbnQgPSB7IGtpbmQ6IGtpbmQsIGtleToga2V5LCBwbGFjZW1lbnQ6IHBsYWNlbWVudCwgZGVzY3JpcHRvcjogT2JqZWN0LmFzc2lnbih7fSwgZGVzY3JpcHRvcikgfTsKICAgIGlmIChraW5kICE9PSAiZmllbGQiKSB7CiAgICAgICAgX2Rpc2FsbG93UHJvcGVydHkoZWxlbWVudE9iamVjdCwgImluaXRpYWxpemVyIiwgIkEgbWV0aG9kIGRlc2NyaXB0b3IiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgX2Rpc2FsbG93UHJvcGVydHkoZGVzY3JpcHRvciwgImdldCIsICJUaGUgcHJvcGVydHkgZGVzY3JpcHRvciBvZiBhIGZpZWxkIGRlc2NyaXB0b3IiKTsKICAgICAgICBfZGlzYWxsb3dQcm9wZXJ0eShkZXNjcmlwdG9yLCAic2V0IiwgIlRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIG9mIGEgZmllbGQgZGVzY3JpcHRvciIpOwogICAgICAgIF9kaXNhbGxvd1Byb3BlcnR5KGRlc2NyaXB0b3IsICJ2YWx1ZSIsICJUaGUgcHJvcGVydHkgZGVzY3JpcHRvciBvZiBhIGZpZWxkIGRlc2NyaXB0b3IiKTsKICAgICAgICBlbGVtZW50LmluaXRpYWxpemVyID0gZWxlbWVudE9iamVjdC5pbml0aWFsaXplcjsKICAgIH0KICAgIHJldHVybiBlbGVtZW50Owp9CmZ1bmN0aW9uIF90b0VsZW1lbnRGaW5pc2hlckV4dHJhcyhlbGVtZW50T2JqZWN0KSB7CiAgICB2YXIgZWxlbWVudCA9IF90b0VsZW1lbnREZXNjcmlwdG9yKGVsZW1lbnRPYmplY3QpOwogICAgdmFyIGZpbmlzaGVyID0gX29wdGlvbmFsQ2FsbGFibGVQcm9wZXJ0eShlbGVtZW50T2JqZWN0LCAiZmluaXNoZXIiKTsKICAgIHZhciBleHRyYXMgPSBfdG9FbGVtZW50RGVzY3JpcHRvcnMoZWxlbWVudE9iamVjdC5leHRyYXMpOwogICAgcmV0dXJuIHsgZWxlbWVudDogZWxlbWVudCwgZmluaXNoZXI6IGZpbmlzaGVyLCBleHRyYXM6IGV4dHJhcyB9Owp9CmZ1bmN0aW9uIF9mcm9tQ2xhc3NEZXNjcmlwdG9yKGVsZW1lbnRzKSB7CiAgICB2YXIgb2JqID0geyBraW5kOiAiY2xhc3MiLCBlbGVtZW50czogZWxlbWVudHMubWFwKF9mcm9tRWxlbWVudERlc2NyaXB0b3IpIH07CiAgICB2YXIgZGVzYyA9IHsgdmFsdWU6ICJEZXNjcmlwdG9yIiwgY29uZmlndXJhYmxlOiB0cnVlIH07CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBTeW1ib2wudG9TdHJpbmdUYWcsIGRlc2MpOwogICAgcmV0dXJuIG9iajsKfQpmdW5jdGlvbiBfdG9DbGFzc0Rlc2NyaXB0b3Iob2JqKSB7CiAgICB2YXIga2luZCA9IFN0cmluZyhvYmoua2luZCk7CiAgICBpZiAoa2luZCAhPT0gImNsYXNzIikgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoCiAgICAgICAgICAgICJBIGNsYXNzIGRlc2NyaXB0b3IncyAua2luZCBwcm9wZXJ0eSBtdXN0IGJlIFwiY2xhc3NcIiwgYnV0IGEgZGVjb3JhdG9yIiArICIgY3JlYXRlZCBhIGNsYXNzIGRlc2NyaXB0b3Igd2l0aCAua2luZCBcIiIgKyBraW5kCiAgICAgICAgICAgICAgICArICJcIiIKICAgICAgICApOwogICAgfQogICAgX2Rpc2FsbG93UHJvcGVydHkob2JqLCAia2V5IiwgIkEgY2xhc3MgZGVzY3JpcHRvciIpOwogICAgX2Rpc2FsbG93UHJvcGVydHkob2JqLCAicGxhY2VtZW50IiwgIkEgY2xhc3MgZGVzY3JpcHRvciIpOwogICAgX2Rpc2FsbG93UHJvcGVydHkob2JqLCAiZGVzY3JpcHRvciIsICJBIGNsYXNzIGRlc2NyaXB0b3IiKTsKICAgIF9kaXNhbGxvd1Byb3BlcnR5KG9iaiwgImluaXRpYWxpemVyIiwgIkEgY2xhc3MgZGVzY3JpcHRvciIpOwogICAgX2Rpc2FsbG93UHJvcGVydHkob2JqLCAiZXh0cmFzIiwgIkEgY2xhc3MgZGVzY3JpcHRvciIpOwogICAgdmFyIGZpbmlzaGVyID0gX29wdGlvbmFsQ2FsbGFibGVQcm9wZXJ0eShvYmosICJmaW5pc2hlciIpOwogICAgdmFyIGVsZW1lbnRzID0gX3RvRWxlbWVudERlc2NyaXB0b3JzKG9iai5lbGVtZW50cyk7CiAgICByZXR1cm4geyBlbGVtZW50czogZWxlbWVudHMsIGZpbmlzaGVyOiBmaW5pc2hlciB9Owp9CmZ1bmN0aW9uIF9kaXNhbGxvd1Byb3BlcnR5KG9iaiwgbmFtZSwgb2JqZWN0VHlwZSkgewogICAgaWYgKG9ialtuYW1lXSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihvYmplY3RUeXBlICsgIiBjYW4ndCBoYXZlIGEgLiIgKyBuYW1lICsgIiBwcm9wZXJ0eS4iKTsKICAgIH0KfQpmdW5jdGlvbiBfb3B0aW9uYWxDYWxsYWJsZVByb3BlcnR5KG9iaiwgbmFtZSkgewogICAgdmFyIHZhbHVlID0gb2JqW25hbWVdOwogICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgJyIgKyBuYW1lICsgIicgdG8gYmUgYSBmdW5jdGlvbiIpOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwp9CmZ1bmN0aW9uIF9ydW5DbGFzc0ZpbmlzaGVycyhjb25zdHJ1Y3RvciwgZmluaXNoZXJzKSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbmlzaGVycy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBuZXdDb25zdHJ1Y3RvciA9ICgwLCBmaW5pc2hlcnNbaV0pKGNvbnN0cnVjdG9yKTsKICAgICAgICBpZiAobmV3Q29uc3RydWN0b3IgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBpZiAodHlwZW9mIG5ld0NvbnN0cnVjdG9yICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJGaW5pc2hlcnMgbXVzdCByZXR1cm4gYSBjb25zdHJ1Y3Rvci4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdHJ1Y3RvciA9IG5ld0NvbnN0cnVjdG9yOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKfQpmdW5jdGlvbiBfZGVmYXVsdHMob2JqLCBkZWZhdWx0cykgewogICAgdmFyIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhkZWZhdWx0cyk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTsKICAgICAgICB2YXIgdmFsdWUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGRlZmF1bHRzLCBrZXkpOwogICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5jb25maWd1cmFibGUgJiYgb2JqW2tleV0gPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gb2JqOwp9CmZ1bmN0aW9uIF9kZWZpbmVfZW51bWVyYWJsZV9wcm9wZXJ0aWVzKG9iaiwgZGVzY3MpIHsKICAgIGZvciAodmFyIGtleSBpbiBkZXNjcykgewogICAgICAgIHZhciBkZXNjID0gZGVzY3Nba2V5XTsKICAgICAgICBkZXNjLmNvbmZpZ3VyYWJsZSA9IGRlc2MuZW51bWVyYWJsZSA9IHRydWU7CiAgICAgICAgaWYgKCJ2YWx1ZSIgaW4gZGVzYykgZGVzYy53cml0YWJsZSA9IHRydWU7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCBkZXNjKTsKICAgIH0KICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7CiAgICAgICAgdmFyIG9iamVjdFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGRlc2NzKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdFN5bWJvbHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHN5bSA9IG9iamVjdFN5bWJvbHNbaV07CiAgICAgICAgICAgIHZhciBkZXNjID0gZGVzY3Nbc3ltXTsKICAgICAgICAgICAgZGVzYy5jb25maWd1cmFibGUgPSBkZXNjLmVudW1lcmFibGUgPSB0cnVlOwogICAgICAgICAgICBpZiAoInZhbHVlIiBpbiBkZXNjKSBkZXNjLndyaXRhYmxlID0gdHJ1ZTsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgc3ltLCBkZXNjKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gb2JqOwp9CmZ1bmN0aW9uIF9kZWZpbmVfcHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7CiAgICBpZiAoa2V5IGluIG9iaikgewogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7CiAgICB9IGVsc2UgewogICAgICAgIG9ialtrZXldID0gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gb2JqOwp9CmZ1bmN0aW9uIF9leHBvcnRfc3Rhcihmcm9tLCB0bykgewogICAgT2JqZWN0LmtleXMoZnJvbSkuZm9yRWFjaChmdW5jdGlvbihrKSB7CiAgICAgICAgaWYgKGsgIT09ICJkZWZhdWx0IiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRvLCBrKSkgewogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodG8sIGssIHsKICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmcm9tW2tdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9KTsKICAgIHJldHVybiBmcm9tOwp9CmZ1bmN0aW9uIF9leHRlbmRzKCkgewogICAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHRhcmdldCkgewogICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsKICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7CiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdGFyZ2V0OwogICAgfTsKICAgIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwp9CmZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsKICAgIGlmICh0eXBlb2YgUmVmbGVjdCAhPT0gInVuZGVmaW5lZCIgJiYgUmVmbGVjdC5nZXQpIHsKICAgICAgICBfZ2V0ID0gUmVmbGVjdC5nZXQ7CiAgICB9IGVsc2UgewogICAgICAgIF9nZXQgPSBmdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsKICAgICAgICAgICAgdmFyIGJhc2UgPSBfc3VwZXJfcHJvcF9iYXNlKHRhcmdldCwgcHJvcGVydHkpOwogICAgICAgICAgICBpZiAoIWJhc2UpIHJldHVybjsKICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTsKICAgICAgICAgICAgaWYgKGRlc2MuZ2V0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZGVzYy5nZXQuY2FsbChyZWNlaXZlciB8fCB0YXJnZXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlOwogICAgICAgIH07CiAgICB9CiAgICByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpOwp9CmZ1bmN0aW9uIF9nZXRfcHJvdG90eXBlX29mKG8pIHsKICAgIF9nZXRfcHJvdG90eXBlX29mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YobykgewogICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7CiAgICB9OwogICAgcmV0dXJuIF9nZXRfcHJvdG90eXBlX29mKG8pOwp9CmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgewogICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAiZnVuY3Rpb24iICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpOwogICAgfQogICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7CiAgICAgICAgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0KICAgIH0pOwogICAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRfcHJvdG90eXBlX29mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsKfQpmdW5jdGlvbiBfaW5oZXJpdHNfbG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsKICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpOwogICAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7CiAgICBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOwp9CmZ1bmN0aW9uIF9pbml0aWFsaXplcl9kZWZpbmVfcHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvciwgY29udGV4dCkgewogICAgaWYgKCFkZXNjcmlwdG9yKSByZXR1cm47CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgewogICAgICAgIGVudW1lcmFibGU6IGRlc2NyaXB0b3IuZW51bWVyYWJsZSwKICAgICAgICBjb25maWd1cmFibGU6IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlLAogICAgICAgIHdyaXRhYmxlOiBkZXNjcmlwdG9yLndyaXRhYmxlLAogICAgICAgIHZhbHVlOiBkZXNjcmlwdG9yLmluaXRpYWxpemVyID8gZGVzY3JpcHRvci5pbml0aWFsaXplci5jYWxsKGNvbnRleHQpIDogdm9pZCAwCiAgICB9KTsKfQpmdW5jdGlvbiBfaW5pdGlhbGl6ZXJfd2FybmluZ19oZWxwZXIoZGVzY3JpcHRvciwgY29udGV4dCkgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICJEZWNvcmF0aW5nIGNsYXNzIHByb3BlcnR5IGZhaWxlZC4gUGxlYXNlIGVuc3VyZSB0aGF0ICIgKyAicHJvcG9zYWwtY2xhc3MtcHJvcGVydGllcyBpcyBlbmFibGVkIGFuZCBzZXQgdG8gdXNlIGxvb3NlIG1vZGUuICIKICAgICAgICAgICAgKyAiVG8gdXNlIHByb3Bvc2FsLWNsYXNzLXByb3BlcnRpZXMgaW4gc3BlYyBtb2RlIHdpdGggZGVjb3JhdG9ycywgd2FpdCBmb3IgIgogICAgICAgICAgICArICJ0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGRlY29yYXRvcnMgaW4gc3RhZ2UgMi4iCiAgICApOwp9CmZ1bmN0aW9uIF9pbnN0YW5jZW9mKGxlZnQsIHJpZ2h0KSB7CiAgICBpZiAocmlnaHQgIT0gbnVsbCAmJiB0eXBlb2YgU3ltYm9sICE9PSAidW5kZWZpbmVkIiAmJiByaWdodFtTeW1ib2wuaGFzSW5zdGFuY2VdKSB7CiAgICAgICAgcmV0dXJuICEhcmlnaHRbU3ltYm9sLmhhc0luc3RhbmNlXShsZWZ0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGxlZnQgaW5zdGFuY2VvZiByaWdodDsKICAgIH0KfQpmdW5jdGlvbiBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQob2JqKSB7CiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsKfQpmdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUobm9kZUludGVyb3ApIHsKICAgIGlmICh0eXBlb2YgV2Vha01hcCAhPT0gImZ1bmN0aW9uIikgcmV0dXJuIG51bGw7CiAgICB2YXIgY2FjaGVCYWJlbEludGVyb3AgPSBuZXcgV2Vha01hcCgpOwogICAgdmFyIGNhY2hlTm9kZUludGVyb3AgPSBuZXcgV2Vha01hcCgpOwogICAgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbihub2RlSW50ZXJvcCkgewogICAgICAgIHJldHVybiBub2RlSW50ZXJvcCA/IGNhY2hlTm9kZUludGVyb3AgOiBjYWNoZUJhYmVsSW50ZXJvcDsKICAgIH0pKG5vZGVJbnRlcm9wKTsKfQpmdW5jdGlvbiBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkKG9iaiwgbm9kZUludGVyb3ApIHsKICAgIGlmICghbm9kZUludGVyb3AgJiYgb2JqICYmIG9iai5fX2VzTW9kdWxlKSB7CiAgICAgICAgcmV0dXJuIG9iajsKICAgIH0KICAgIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iaiAhPT0gImZ1bmN0aW9uIikgewogICAgICAgIHJldHVybiB7IGRlZmF1bHQ6IG9iaiB9OwogICAgfQogICAgdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKG5vZGVJbnRlcm9wKTsKICAgIGlmIChjYWNoZSAmJiBjYWNoZS5oYXMob2JqKSkgewogICAgICAgIHJldHVybiBjYWNoZS5nZXQob2JqKTsKICAgIH0KICAgIHZhciBuZXdPYmogPSB7IF9fcHJvdG9fXzogbnVsbCB9OwogICAgdmFyIGhhc1Byb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwogICAgZm9yICh2YXIga2V5IGluIG9iaikgewogICAgICAgIGlmIChrZXkgIT09ICJkZWZhdWx0IiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7CiAgICAgICAgICAgIHZhciBkZXNjID0gaGFzUHJvcGVydHlEZXNjcmlwdG9yID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkgOiBudWxsOwogICAgICAgICAgICBpZiAoZGVzYyAmJiAoZGVzYy5nZXQgfHwgZGVzYy5zZXQpKSB7CiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIG5ld09iai5kZWZhdWx0ID0gb2JqOwogICAgaWYgKGNhY2hlKSB7CiAgICAgICAgY2FjaGUuc2V0KG9iaiwgbmV3T2JqKTsKICAgIH0KICAgIHJldHVybiBuZXdPYmo7Cn0KZnVuY3Rpb24gX2lzX25hdGl2ZV9mdW5jdGlvbihmbikgewogICAgcmV0dXJuIEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoZm4pLmluZGV4T2YoIltuYXRpdmUgY29kZV0iKSAhPT0gLTE7Cn0KZnVuY3Rpb24gX2l0ZXJhYmxlX3RvX2FycmF5KGl0ZXIpIHsKICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAidW5kZWZpbmVkIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyWyJAQGl0ZXJhdG9yIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7Cn0KZnVuY3Rpb24gX2l0ZXJhYmxlX3RvX2FycmF5X2xpbWl0KGFyciwgaSkgewogICAgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gInVuZGVmaW5lZCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyWyJAQGl0ZXJhdG9yIl07CiAgICBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOwogICAgdmFyIF9hcnIgPSBbXTsKICAgIHZhciBfbiA9IHRydWU7CiAgICB2YXIgX2QgPSBmYWxzZTsKICAgIHZhciBfcywgX2U7CiAgICB0cnkgewogICAgICAgIGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsKICAgICAgICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTsKICAgICAgICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOwogICAgICAgIH0KICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIF9kID0gdHJ1ZTsKICAgICAgICBfZSA9IGVycjsKICAgIH0gZmluYWxseSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKCFfbiAmJiBfaVsicmV0dXJuIl0gIT0gbnVsbCkgX2lbInJldHVybiJdKCk7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgaWYgKF9kKSB0aHJvdyBfZTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gX2FycjsKfQpmdW5jdGlvbiBfaXRlcmFibGVfdG9fYXJyYXlfbGltaXRfbG9vc2UoYXJyLCBpKSB7CiAgICB2YXIgX2kgPSBhcnIgJiYgKHR5cGVvZiBTeW1ib2wgIT09ICJ1bmRlZmluZWQiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFyclsiQEBpdGVyYXRvciJdKTsKICAgIGlmIChfaSA9PSBudWxsKSByZXR1cm47CiAgICB2YXIgX2FyciA9IFtdOwogICAgZm9yIChfaSA9IF9pLmNhbGwoYXJyKSwgX3N0ZXA7ICEoX3N0ZXAgPSBfaS5uZXh0KCkpLmRvbmU7KSB7CiAgICAgICAgX2Fyci5wdXNoKF9zdGVwLnZhbHVlKTsKICAgICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7CiAgICB9CiAgICByZXR1cm4gX2FycjsKfQp2YXIgUkVBQ1RfRUxFTUVOVF9UWVBFOwpmdW5jdGlvbiBfanN4KHR5cGUsIHByb3BzLCBrZXksIGNoaWxkcmVuKSB7CiAgICBpZiAoIVJFQUNUX0VMRU1FTlRfVFlQRSkgewogICAgICAgIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLmZvciAmJiBTeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50IikgfHwgMHhlYWM3OwogICAgfQogICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUgJiYgdHlwZS5kZWZhdWx0UHJvcHM7CiAgICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMzsKICAgIGlmICghcHJvcHMgJiYgY2hpbGRyZW5MZW5ndGggIT09IDApIHsKICAgICAgICBwcm9wcyA9IHsgY2hpbGRyZW46IHZvaWQgMCB9OwogICAgfQogICAgaWYgKHByb3BzICYmIGRlZmF1bHRQcm9wcykgewogICAgICAgIGZvciAodmFyIHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykgewogICAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB2b2lkIDApIHsKICAgICAgICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9IGVsc2UgaWYgKCFwcm9wcykgewogICAgICAgIHByb3BzID0gZGVmYXVsdFByb3BzIHx8IHt9OwogICAgfQogICAgaWYgKGNoaWxkcmVuTGVuZ3RoID09PSAxKSB7CiAgICAgICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJlbjsKICAgIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7CiAgICAgICAgdmFyIGNoaWxkQXJyYXkgPSBuZXcgQXJyYXkoY2hpbGRyZW5MZW5ndGgpOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykgewogICAgICAgICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAzXTsKICAgICAgICB9CiAgICAgICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5OwogICAgfQogICAgcmV0dXJuIHsgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSwgdHlwZTogdHlwZSwga2V5OiBrZXkgPT09IHVuZGVmaW5lZCA/IG51bGwgOiAiIiArIGtleSwgcmVmOiBudWxsLCBwcm9wczogcHJvcHMsIF9vd25lcjogbnVsbCB9Owp9CmZ1bmN0aW9uIF9uZXdfYXJyb3dfY2hlY2soaW5uZXJUaGlzLCBib3VuZFRoaXMpIHsKICAgIGlmIChpbm5lclRoaXMgIT09IGJvdW5kVGhpcykgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbnN0YW50aWF0ZSBhbiBhcnJvdyBmdW5jdGlvbiIpOwogICAgfQp9CmZ1bmN0aW9uIF9ub25faXRlcmFibGVfcmVzdCgpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoCiAgICAgICAgIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIKICAgICk7Cn0KZnVuY3Rpb24gX25vbl9pdGVyYWJsZV9zcHJlYWQoKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKAogICAgICAgICJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIgogICAgKTsKfQpmdW5jdGlvbiBfb2JqZWN0X2Rlc3RydWN0dXJpbmdfZW1wdHkobykgewogICAgaWYgKG8gPT09IG51bGwgfHwgbyA9PT0gdm9pZCAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgZGVzdHJ1Y3R1cmUgIiArIG8pOwogICAgcmV0dXJuIG87Cn0KZnVuY3Rpb24gX29iamVjdF9zcHJlYWQodGFyZ2V0KSB7CiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OwogICAgICAgIHZhciBvd25LZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsKICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgb3duS2V5cyA9IG93bktleXMuY29uY2F0KAogICAgICAgICAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpLmZpbHRlcihmdW5jdGlvbihzeW0pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIHN5bSkuZW51bWVyYWJsZTsKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIG93bktleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKICAgICAgICAgICAgX2RlZmluZV9wcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOwogICAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIHRhcmdldDsKfQpmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsKICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsKICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7CiAgICAgICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7CiAgICAgICAgaWYgKGVudW1lcmFibGVPbmx5KSB7CiAgICAgICAgICAgIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbihzeW0pIHsKICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOwogICAgfQogICAgcmV0dXJuIGtleXM7Cn0KZnVuY3Rpb24gX29iamVjdF9zcHJlYWRfcHJvcHModGFyZ2V0LCBzb3VyY2UpIHsKICAgIHNvdXJjZSA9IHNvdXJjZSAhPSBudWxsID8gc291cmNlIDoge307CiAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOwogICAgfSBlbHNlIHsKICAgICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsKICAgICAgICB9KTsKICAgIH0KICAgIHJldHVybiB0YXJnZXQ7Cn0KZnVuY3Rpb24gX29iamVjdF93aXRob3V0X3Byb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgewogICAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307CiAgICB2YXIgdGFyZ2V0ID0gX29iamVjdF93aXRob3V0X3Byb3BlcnRpZXNfbG9vc2Uoc291cmNlLCBleGNsdWRlZCk7CiAgICB2YXIga2V5LCBpOwogICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsKICAgICAgICB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOwogICAgICAgICAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOwogICAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiB0YXJnZXQ7Cn0KZnVuY3Rpb24gX29iamVjdF93aXRob3V0X3Byb3BlcnRpZXNfbG9vc2Uoc291cmNlLCBleGNsdWRlZCkgewogICAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307CiAgICB2YXIgdGFyZ2V0ID0ge307CiAgICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7CiAgICB2YXIga2V5LCBpOwogICAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBrZXkgPSBzb3VyY2VLZXlzW2ldOwogICAgICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7CiAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsKICAgIH0KICAgIHJldHVybiB0YXJnZXQ7Cn0KZnVuY3Rpb24gX3Bvc3NpYmxlX2NvbnN0cnVjdG9yX3JldHVybihzZWxmLCBjYWxsKSB7CiAgICBpZiAoY2FsbCAmJiAoX3R5cGVfb2YoY2FsbCkgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBjYWxsID09PSAiZnVuY3Rpb24iKSkgewogICAgICAgIHJldHVybiBjYWxsOwogICAgfQogICAgcmV0dXJuIF9hc3NlcnRfdGhpc19pbml0aWFsaXplZChzZWxmKTsKfQpmdW5jdGlvbiBfcmVhZF9vbmx5X2Vycm9yKG5hbWUpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlwiIiArIG5hbWUgKyAiXCIgaXMgcmVhZC1vbmx5Iik7Cn0KZnVuY3Rpb24gc2V0KHRhcmdldCwgcHJvcGVydHksIHZhbHVlLCByZWNlaXZlcikgewogICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSAidW5kZWZpbmVkIiAmJiBSZWZsZWN0LnNldCkgewogICAgICAgIHNldCA9IFJlZmxlY3Quc2V0OwogICAgfSBlbHNlIHsKICAgICAgICBzZXQgPSBmdW5jdGlvbiBzZXQodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUsIHJlY2VpdmVyKSB7CiAgICAgICAgICAgIHZhciBiYXNlID0gX3N1cGVyX3Byb3BfYmFzZSh0YXJnZXQsIHByb3BlcnR5KTsKICAgICAgICAgICAgdmFyIGRlc2M7CiAgICAgICAgICAgIGlmIChiYXNlKSB7CiAgICAgICAgICAgICAgICBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICAgICBpZiAoZGVzYy5zZXQpIHsKICAgICAgICAgICAgICAgICAgICBkZXNjLnNldC5jYWxsKHJlY2VpdmVyLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFkZXNjLndyaXRhYmxlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHJlY2VpdmVyLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgIGlmIChkZXNjKSB7CiAgICAgICAgICAgICAgICBpZiAoIWRlc2Mud3JpdGFibGUpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkZXNjLnZhbHVlID0gdmFsdWU7CiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVjZWl2ZXIsIHByb3BlcnR5LCBkZXNjKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIF9kZWZpbmVfcHJvcGVydHkocmVjZWl2ZXIsIHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfTsKICAgIH0KICAgIHJldHVybiBzZXQodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUsIHJlY2VpdmVyKTsKfQpmdW5jdGlvbiBfc2V0KHRhcmdldCwgcHJvcGVydHksIHZhbHVlLCByZWNlaXZlciwgaXNTdHJpY3QpIHsKICAgIHZhciBzID0gc2V0KHRhcmdldCwgcHJvcGVydHksIHZhbHVlLCByZWNlaXZlciB8fCB0YXJnZXQpOwogICAgaWYgKCFzICYmIGlzU3RyaWN0KSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJmYWlsZWQgdG8gc2V0IHByb3BlcnR5Iik7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7Cn0KZnVuY3Rpb24gX3NldF9wcm90b3R5cGVfb2YobywgcCkgewogICAgX3NldF9wcm90b3R5cGVfb2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YobywgcCkgewogICAgICAgIG8uX19wcm90b19fID0gcDsKICAgICAgICByZXR1cm4gbzsKICAgIH07CiAgICByZXR1cm4gX3NldF9wcm90b3R5cGVfb2YobywgcCk7Cn0KZnVuY3Rpb24gX3NraXBfZmlyc3RfZ2VuZXJhdG9yX25leHQoZm4pIHsKICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgaXQgPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgIGl0Lm5leHQoKTsKICAgICAgICByZXR1cm4gaXQ7CiAgICB9Owp9CmZ1bmN0aW9uIF9zbGljZWRfdG9fYXJyYXkoYXJyLCBpKSB7CiAgICByZXR1cm4gX2FycmF5X3dpdGhfaG9sZXMoYXJyKSB8fCBfaXRlcmFibGVfdG9fYXJyYXlfbGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRfaXRlcmFibGVfdG9fYXJyYXkoYXJyLCBpKSB8fCBfbm9uX2l0ZXJhYmxlX3Jlc3QoKTsKfQpmdW5jdGlvbiBfc2xpY2VkX3RvX2FycmF5X2xvb3NlKGFyciwgaSkgewogICAgcmV0dXJuIF9hcnJheV93aXRoX2hvbGVzKGFycikgfHwgX2l0ZXJhYmxlX3RvX2FycmF5X2xpbWl0X2xvb3NlKGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkX2l0ZXJhYmxlX3RvX2FycmF5KGFyciwgaSkKICAgICAgICB8fCBfbm9uX2l0ZXJhYmxlX3Jlc3QoKTsKfQpmdW5jdGlvbiBfc3VwZXJfcHJvcF9iYXNlKG9iamVjdCwgcHJvcGVydHkpIHsKICAgIHdoaWxlICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKSB7CiAgICAgICAgb2JqZWN0ID0gX2dldF9wcm90b3R5cGVfb2Yob2JqZWN0KTsKICAgICAgICBpZiAob2JqZWN0ID09PSBudWxsKSBicmVhazsKICAgIH0KICAgIHJldHVybiBvYmplY3Q7Cn0KZnVuY3Rpb24gX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsKHN0cmluZ3MsIHJhdykgewogICAgaWYgKCFyYXcpIHsKICAgICAgICByYXcgPSBzdHJpbmdzLnNsaWNlKDApOwogICAgfQogICAgcmV0dXJuIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3RyaW5ncywgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUocmF3KSB9IH0pKTsKfQpmdW5jdGlvbiBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2Uoc3RyaW5ncywgcmF3KSB7CiAgICBpZiAoIXJhdykgewogICAgICAgIHJhdyA9IHN0cmluZ3Muc2xpY2UoMCk7CiAgICB9CiAgICBzdHJpbmdzLnJhdyA9IHJhdzsKICAgIHJldHVybiBzdHJpbmdzOwp9CmZ1bmN0aW9uIF90aHJvdyhlKSB7CiAgICB0aHJvdyBlOwp9CmZ1bmN0aW9uIF90b19hcnJheShhcnIpIHsKICAgIHJldHVybiBfYXJyYXlfd2l0aF9ob2xlcyhhcnIpIHx8IF9pdGVyYWJsZV90b19hcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZF9pdGVyYWJsZV90b19hcnJheShhcnIpIHx8IF9ub25faXRlcmFibGVfcmVzdCgpOwp9CmZ1bmN0aW9uIF90b19jb25zdW1hYmxlX2FycmF5KGFycikgewogICAgcmV0dXJuIF9hcnJheV93aXRob3V0X2hvbGVzKGFycikgfHwgX2l0ZXJhYmxlX3RvX2FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkX2l0ZXJhYmxlX3RvX2FycmF5KGFycikgfHwgX25vbl9pdGVyYWJsZV9zcHJlYWQoKTsKfQpmdW5jdGlvbiBfdG9fcHJpbWl0aXZlKGlucHV0LCBoaW50KSB7CiAgICBpZiAoX3R5cGVfb2YoaW5wdXQpICE9PSAib2JqZWN0IiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0OwogICAgdmFyIHByaW0gPSBpbnB1dFtTeW1ib2wudG9QcmltaXRpdmVdOwogICAgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkgewogICAgICAgIHZhciByZXMgPSBwcmltLmNhbGwoaW5wdXQsIGhpbnQgfHwgImRlZmF1bHQiKTsKICAgICAgICBpZiAoX3R5cGVfb2YocmVzKSAhPT0gIm9iamVjdCIpIHJldHVybiByZXM7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKTsKICAgIH0KICAgIHJldHVybiAoaGludCA9PT0gInN0cmluZyIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTsKfQpmdW5jdGlvbiBfdG9fcHJvcGVydHlfa2V5KGFyZykgewogICAgdmFyIGtleSA9IF90b19wcmltaXRpdmUoYXJnLCAic3RyaW5nIik7CiAgICByZXR1cm4gX3R5cGVfb2Yoa2V5KSA9PT0gInN5bWJvbCIgPyBrZXkgOiBTdHJpbmcoa2V5KTsKfQpmdW5jdGlvbiBfdXBkYXRlKHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyLCBpc1N0cmljdCkgewogICAgcmV0dXJuIHsKICAgICAgICBnZXQgXygpIHsKICAgICAgICAgICAgcmV0dXJuIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpOwogICAgICAgIH0sCiAgICAgICAgc2V0IF8odmFsdWUpIHsKICAgICAgICAgICAgX3NldCh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSwgcmVjZWl2ZXIsIGlzU3RyaWN0KTsKICAgICAgICB9CiAgICB9Owp9CmZ1bmN0aW9uIF90eXBlX29mKG9iaikgewogICAgIkBzd2MvaGVscGVycyAtIHR5cGVvZiI7CiAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgIT09ICJ1bmRlZmluZWQiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gInN5bWJvbCIgOiB0eXBlb2Ygb2JqOwp9CmZ1bmN0aW9uIF91bnN1cHBvcnRlZF9pdGVyYWJsZV90b19hcnJheShvLCBtaW5MZW4pIHsKICAgIGlmICghbykgcmV0dXJuOwogICAgaWYgKHR5cGVvZiBvID09PSAic3RyaW5nIikgcmV0dXJuIF9hcnJheV9saWtlX3RvX2FycmF5KG8sIG1pbkxlbik7CiAgICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7CiAgICBpZiAobiA9PT0gIk9iamVjdCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsKICAgIGlmIChuID09PSAiTWFwIiB8fCBuID09PSAiU2V0IikgcmV0dXJuIEFycmF5LmZyb20obik7CiAgICBpZiAobiA9PT0gIkFyZ3VtZW50cyIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlfbGlrZV90b19hcnJheShvLCBtaW5MZW4pOwp9CmZ1bmN0aW9uIF93cmFwX2FzeW5jX2dlbmVyYXRvcihmbikgewogICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBuZXcgX2FzeW5jX2dlbmVyYXRvcihmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTsKICAgIH07Cn0KZnVuY3Rpb24gX3dyYXBfbmF0aXZlX3N1cGVyKENsYXNzKSB7CiAgICB2YXIgX2NhY2hlID0gdHlwZW9mIE1hcCA9PT0gImZ1bmN0aW9uIiA/IG5ldyBNYXAoKSA6IHVuZGVmaW5lZDsKICAgIF93cmFwX25hdGl2ZV9zdXBlciA9IGZ1bmN0aW9uIHdyYXBOYXRpdmVTdXBlcihDbGFzcykgewogICAgICAgIGlmIChDbGFzcyA9PT0gbnVsbCB8fCAhX2lzX25hdGl2ZV9mdW5jdGlvbihDbGFzcykpIHJldHVybiBDbGFzczsKICAgICAgICBpZiAodHlwZW9mIENsYXNzICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgX2NhY2hlICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICBpZiAoX2NhY2hlLmhhcyhDbGFzcykpIHJldHVybiBfY2FjaGUuZ2V0KENsYXNzKTsKICAgICAgICAgICAgX2NhY2hlLnNldChDbGFzcywgV3JhcHBlcik7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIFdyYXBwZXIoKSB7CiAgICAgICAgICAgIHJldHVybiBfY29uc3RydWN0KENsYXNzLCBhcmd1bWVudHMsIF9nZXRfcHJvdG90eXBlX29mKHRoaXMpLmNvbnN0cnVjdG9yKTsKICAgICAgICB9CiAgICAgICAgV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENsYXNzLnByb3RvdHlwZSwgewogICAgICAgICAgICBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogV3JhcHBlciwgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBfc2V0X3Byb3RvdHlwZV9vZihXcmFwcGVyLCBDbGFzcyk7CiAgICB9OwogICAgcmV0dXJuIF93cmFwX25hdGl2ZV9zdXBlcihDbGFzcyk7Cn0KZnVuY3Rpb24gX3dyaXRlX29ubHlfZXJyb3IobmFtZSkgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiXCIiICsgbmFtZSArICJcIiBpcyB3cml0ZS1vbmx5Iik7Cn0KZnVuY3Rpb24gX2NsYXNzX3ByaXZhdGVfZmllbGRfZGVzdHJ1Y3R1cmUocmVjZWl2ZXIsIHByaXZhdGVNYXApIHsKICAgIHZhciBkZXNjcmlwdG9yID0gX2NsYXNzX2V4dHJhY3RfZmllbGRfZGVzY3JpcHRvcihyZWNlaXZlciwgcHJpdmF0ZU1hcCwgInNldCIpOwogICAgcmV0dXJuIF9jbGFzc19hcHBseV9kZXNjcmlwdG9yX2Rlc3RydWN0dXJlKHJlY2VpdmVyLCBkZXNjcmlwdG9yKTsKfQpmdW5jdGlvbiBfY2xhc3Nfc3RhdGljX3ByaXZhdGVfZmllbGRfZGVzdHJ1Y3R1cmUocmVjZWl2ZXIsIGNsYXNzQ29uc3RydWN0b3IsIGRlc2NyaXB0b3IpIHsKICAgIF9jbGFzc19jaGVja19wcml2YXRlX3N0YXRpY19hY2Nlc3MocmVjZWl2ZXIsIGNsYXNzQ29uc3RydWN0b3IpOwogICAgX2NsYXNzX2NoZWNrX3ByaXZhdGVfc3RhdGljX2ZpZWxkX2Rlc2NyaXB0b3IoZGVzY3JpcHRvciwgInNldCIpOwogICAgcmV0dXJuIF9jbGFzc19hcHBseV9kZXNjcmlwdG9yX2Rlc3RydWN0dXJlKHJlY2VpdmVyLCBkZXNjcmlwdG9yKTsKfQpmdW5jdGlvbiBfY2xhc3Nfc3RhdGljX3ByaXZhdGVfbWV0aG9kX2dldChyZWNlaXZlciwgY2xhc3NDb25zdHJ1Y3RvciwgbWV0aG9kKSB7CiAgICBfY2xhc3NfY2hlY2tfcHJpdmF0ZV9zdGF0aWNfYWNjZXNzKHJlY2VpdmVyLCBjbGFzc0NvbnN0cnVjdG9yKTsKICAgIHJldHVybiBtZXRob2Q7Cn0KZnVuY3Rpb24gX2NsYXNzX2NoZWNrX3ByaXZhdGVfc3RhdGljX2FjY2VzcyhyZWNlaXZlciwgY2xhc3NDb25zdHJ1Y3RvcikgewogICAgaWYgKHJlY2VpdmVyICE9PSBjbGFzc0NvbnN0cnVjdG9yKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBzdGF0aWMgYWNjZXNzIG9mIHdyb25nIHByb3ZlbmFuY2UiKTsKICAgIH0KfQpmdW5jdGlvbiBfaXNfbmF0aXZlX3JlZmxlY3RfY29uc3RydWN0KCkgewogICAgLy8gU2luY2UgUmVmbGVjdC5jb25zdHJ1Y3QgY2FuJ3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCwgc29tZQogICAgLy8gaW1wbGVtZW50YXRpb25zIChlLmcuIGNvcmUtanNAMikgZG9uJ3Qgc2V0IHRoZSBjb3JyZWN0IGludGVybmFsIHNsb3RzLgogICAgLy8gVGhvc2UgcG9seWZpbGxzIGRvbid0IGFsbG93IHVzIHRvIHN1YmNsYXNzIGJ1aWx0LWlucywgc28gd2UgbmVlZCB0bwogICAgLy8gdXNlIG91ciBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbi4KICAgIHRyeSB7CiAgICAgICAgLy8gSWYgdGhlIGludGVybmFsIHNsb3RzIGFyZW4ndCBzZXQsIHRoaXMgdGhyb3dzIGFuIGVycm9yIHNpbWlsYXIgdG8KICAgICAgICAvLyAgIFR5cGVFcnJvcjogdGhpcyBpcyBub3QgYSBCb29sZWFuIG9iamVjdC4KICAgICAgICB2YXIgcmVzdWx0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24oKSB7fSkpOwogICAgfSBjYXRjaCAoXykge30KICAgIHJldHVybiAoX2lzX25hdGl2ZV9yZWZsZWN0X2NvbnN0cnVjdCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAhIXJlc3VsdDsKICAgIH0pKCk7Cn0KZnVuY3Rpb24gX2NyZWF0ZV9zdXBlcihEZXJpdmVkKSB7CiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc19uYXRpdmVfcmVmbGVjdF9jb25zdHJ1Y3QoKTsKICAgIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsKICAgICAgICB2YXIgU3VwZXIgPSBfZ2V0X3Byb3RvdHlwZV9vZihEZXJpdmVkKSwgcmVzdWx0OwogICAgICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7CiAgICAgICAgICAgIHZhciBOZXdUYXJnZXQgPSBfZ2V0X3Byb3RvdHlwZV9vZih0aGlzKS5jb25zdHJ1Y3RvcjsKICAgICAgICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gX3Bvc3NpYmxlX2NvbnN0cnVjdG9yX3JldHVybih0aGlzLCByZXN1bHQpOwogICAgfTsKfQpmdW5jdGlvbiBfY3JlYXRlX2Zvcl9vZl9pdGVyYXRvcl9oZWxwZXJfbG9vc2UobywgYWxsb3dBcnJheUxpa2UpIHsKICAgIHZhciBpdCA9IHR5cGVvZiBTeW1ib2wgIT09ICJ1bmRlZmluZWQiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSB8fCBvWyJAQGl0ZXJhdG9yIl07CiAgICBpZiAoaXQpIHJldHVybiAoaXQgPSBpdC5jYWxsKG8pKS5uZXh0LmJpbmQoaXQpOwogICAgLy8gRmFsbGJhY2sgZm9yIGVuZ2luZXMgd2l0aG91dCBzeW1ib2wgc3VwcG9ydAogICAgaWYgKEFycmF5LmlzQXJyYXkobykgfHwgKGl0ID0gX3Vuc3VwcG9ydGVkX2l0ZXJhYmxlX3RvX2FycmF5KG8pKSB8fCBhbGxvd0FycmF5TGlrZSAmJiBvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gIm51bWJlciIpIHsKICAgICAgICBpZiAoaXQpIG8gPSBpdDsKICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAoaSA+PSBvLmxlbmd0aCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogb1tpKytdIH07CiAgICAgICAgfTsKICAgIH0KICAgIHRocm93IG5ldyBUeXBlRXJyb3IoCiAgICAgICAgIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIgogICAgKTsKfQpmdW5jdGlvbiBfdHNfZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHsKICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7CiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICJvYmplY3QiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSAiZnVuY3Rpb24iKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7CiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByOwogICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjsKfWZ1bmN0aW9uIF90c19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkgewogICAgdmFyIGYsIHksIHQsIGcsIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbiAoKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH07CiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgInRocm93IjogdmVyYigxKSwgInJldHVybiI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSksIGc7CiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH0KICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHsKICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpOwogICAgICAgIHdoaWxlIChfKSB0cnkgewogICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5WyJyZXR1cm4iXSA6IG9wWzBdID8geVsidGhyb3ciXSB8fCAoKHQgPSB5WyJyZXR1cm4iXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7CiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTsKICAgICAgICAgICAgc3dpdGNoIChvcFswXSkgewogICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9OwogICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH0KICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfQogICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfQogICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH0KICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7CiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTsKICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9CiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07CiAgICB9Cn1mdW5jdGlvbiBfdHNfbWV0YWRhdGEoaywgdikgewogICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAib2JqZWN0IiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gImZ1bmN0aW9uIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7Cn1mdW5jdGlvbiBfdHNfcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7CiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH0KfWZ1bmN0aW9uIF90c192YWx1ZXMobykgewogICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7CiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTsKICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gIm51bWJlciIpIHJldHVybiB7CiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwOwogICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07CiAgICAgICAgfQogICAgfTsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/ICJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLiIgOiAiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpOwp9ZnVuY3Rpb24gX3RzX2FkZF9kaXNwb3NhYmxlX3Jlc291cmNlKGVudiwgdmFsdWUsIGFzeW5jKSB7CiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHZvaWQgMCkgewogICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICJvYmplY3QiICYmIHR5cGVvZiB2YWx1ZSAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkLiIpOwogICAgICAgIHZhciBkaXNwb3NlLCBpbm5lcjsKICAgICAgICBpZiAoYXN5bmMpIHsKICAgICAgICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLiIpOwogICAgICAgICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZV07CiAgICAgICAgfQogICAgICAgIGlmIChkaXNwb3NlID09PSB2b2lkIDApIHsKICAgICAgICAgICAgaWYgKCFTeW1ib2wuZGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmRpc3Bvc2UgaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuZGlzcG9zZV07CiAgICAgICAgICAgIGlmIChhc3luYykgaW5uZXIgPSBkaXNwb3NlOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIGRpc3Bvc2UgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBub3QgZGlzcG9zYWJsZS4iKTsKICAgICAgICBpZiAoaW5uZXIpIGRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBpbm5lci5jYWxsKHRoaXMpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGVudi5zdGFjay5wdXNoKHsKICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAogICAgICAgICAgICBkaXNwb3NlOiBkaXNwb3NlLAogICAgICAgICAgICBhc3luYzogYXN5bmMKICAgICAgICB9KTsKICAgIH0gZWxzZSBpZiAoYXN5bmMpIHsKICAgICAgICBlbnYuc3RhY2sucHVzaCh7CiAgICAgICAgICAgIGFzeW5jOiB0cnVlCiAgICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7Cn1mdW5jdGlvbiBfdHNfZGlzcG9zZV9yZXNvdXJjZXMoU3VwcHJlc3NlZEVycm9yKSB7CiAgICByZXR1cm4gZnVuY3Rpb24gKGVudikgewogICAgICAgIGZ1bmN0aW9uIGZhaWwoZSkgewogICAgICAgICAgICBlbnYuZXJyb3IgPSBlbnYuaGFzRXJyb3IgPyBuZXcgU3VwcHJlc3NlZEVycm9yKGUsIGVudi5lcnJvciwgIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC4iKSA6IGU7CiAgICAgICAgICAgIGVudi5oYXNFcnJvciA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHZhciByLAogICAgICAgICAgICBzID0gMDsKICAgICAgICBmdW5jdGlvbiBuZXh0KCkgewogICAgICAgICAgICB3aGlsZSAociA9IGVudi5zdGFjay5wb3AoKSkgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXIuYXN5bmMgJiYgcyA9PT0gMSkgcmV0dXJuIHMgPSAwLCBlbnYuc3RhY2sucHVzaChyKSwgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihuZXh0KTsKICAgICAgICAgICAgICAgICAgICBpZiAoci5kaXNwb3NlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSByLmRpc3Bvc2UuY2FsbChyLnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIuYXN5bmMpIHJldHVybiBzIHw9IDIsIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4obmV4dCwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwoZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dCgpOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgcyB8PSAxOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIGZhaWwoZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHMgPT09IDEpIHJldHVybiBlbnYuaGFzRXJyb3IgPyBQcm9taXNlLnJlamVjdChlbnYuZXJyb3IpIDogUHJvbWlzZS5yZXNvbHZlKCk7CiAgICAgICAgICAgIGlmIChlbnYuaGFzRXJyb3IpIHRocm93IGVudi5lcnJvcjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5leHQoKTsKICAgIH07Cn0gKHR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09ICJmdW5jdGlvbiIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHsKICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpOwogICAgcmV0dXJuIGUubmFtZSA9ICJTdXBwcmVzc2VkRXJyb3IiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7Cn0pOy8qIEBtaW5WZXJzaW9uIDcuMjAuMCAqLwoKLyoqCiAgRW51bXMgYXJlIHVzZWQgaW4gdGhpcyBmaWxlLCBidXQgbm90IGFzc2lnbmVkIHRvIHZhcnMgdG8gYXZvaWQgbm9uLWhvaXN0YWJsZSB2YWx1ZXMKCiAgQ09OU1RSVUNUT1IgPSAwOwogIFBVQkxJQyA9IDE7CiAgUFJJVkFURSA9IDI7CgogIEZJRUxEID0gMDsKICBBQ0NFU1NPUiA9IDE7CiAgTUVUSE9EID0gMjsKICBHRVRURVIgPSAzOwogIFNFVFRFUiA9IDQ7CgogIFNUQVRJQyA9IDU7CgogIENMQVNTID0gMTA7IC8vIG9ubHkgdXNlZCBpbiBhc3NlcnRWYWxpZFJldHVyblZhbHVlCiovCgpmdW5jdGlvbiBhcHBseURlY3MyMjAzUkZhY3RvcnkoKSB7CiAgICBmdW5jdGlvbiBjcmVhdGVBZGRJbml0aWFsaXplck1ldGhvZChpbml0aWFsaXplcnMsIGRlY29yYXRvckZpbmlzaGVkUmVmKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGFkZEluaXRpYWxpemVyKGluaXRpYWxpemVyKSB7CiAgICAgICAgICAgIGFzc2VydE5vdEZpbmlzaGVkKGRlY29yYXRvckZpbmlzaGVkUmVmLCAiYWRkSW5pdGlhbGl6ZXIiKTsKICAgICAgICAgICAgYXNzZXJ0Q2FsbGFibGUoaW5pdGlhbGl6ZXIsICJBbiBpbml0aWFsaXplciIpOwogICAgICAgICAgICBpbml0aWFsaXplcnMucHVzaChpbml0aWFsaXplcik7CiAgICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBtZW1iZXJEZWMoCiAgICAgICAgZGVjLAogICAgICAgIG5hbWUsCiAgICAgICAgZGVzYywKICAgICAgICBpbml0aWFsaXplcnMsCiAgICAgICAga2luZCwKICAgICAgICBpc1N0YXRpYywKICAgICAgICBpc1ByaXZhdGUsCiAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgdmFsdWUKICAgICkgewogICAgICAgIHZhciBraW5kU3RyOwoKICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAgICAgY2FzZSAxIC8qIEFDQ0VTU09SICovOgogICAgICAgICAgICAgICAga2luZFN0ciA9ICJhY2Nlc3NvciI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAyIC8qIE1FVEhPRCAqLzoKICAgICAgICAgICAgICAgIGtpbmRTdHIgPSAibWV0aG9kIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDMgLyogR0VUVEVSICovOgogICAgICAgICAgICAgICAga2luZFN0ciA9ICJnZXR0ZXIiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgNCAvKiBTRVRURVIgKi86CiAgICAgICAgICAgICAgICBraW5kU3RyID0gInNldHRlciI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGtpbmRTdHIgPSAiZmllbGQiOwogICAgICAgIH0KCiAgICAgICAgdmFyIGN0eCA9IHsKICAgICAgICAgICAga2luZDoga2luZFN0ciwKICAgICAgICAgICAgbmFtZTogaXNQcml2YXRlID8gIiMiICsgbmFtZSA6IG5hbWUsCiAgICAgICAgICAgIHN0YXRpYzogaXNTdGF0aWMsCiAgICAgICAgICAgIHByaXZhdGU6IGlzUHJpdmF0ZSwKICAgICAgICAgICAgbWV0YWRhdGE6IG1ldGFkYXRhLAogICAgICAgIH07CgogICAgICAgIHZhciBkZWNvcmF0b3JGaW5pc2hlZFJlZiA9IHsgdjogZmFsc2UgfTsKCiAgICAgICAgY3R4LmFkZEluaXRpYWxpemVyID0gY3JlYXRlQWRkSW5pdGlhbGl6ZXJNZXRob2QoCiAgICAgICAgICAgIGluaXRpYWxpemVycywKICAgICAgICAgICAgZGVjb3JhdG9yRmluaXNoZWRSZWYKICAgICAgICApOwoKICAgICAgICB2YXIgZ2V0LCBzZXQ7CiAgICAgICAgaWYgKGtpbmQgPT09IDAgLyogRklFTEQgKi8pIHsKICAgICAgICAgICAgaWYgKGlzUHJpdmF0ZSkgewogICAgICAgICAgICAgICAgZ2V0ID0gZGVzYy5nZXQ7CiAgICAgICAgICAgICAgICBzZXQgPSBkZXNjLnNldDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGdldCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tuYW1lXTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICBzZXQgPSBmdW5jdGlvbiAodikgewogICAgICAgICAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB2OwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gMiAvKiBNRVRIT0QgKi8pIHsKICAgICAgICAgICAgZ2V0ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGRlc2MudmFsdWU7CiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gcmVwbGFjZSB3aXRoIHZhbHVlcyB0aGF0IHdpbGwgZ28gdGhyb3VnaCB0aGUgZmluYWwgZ2V0dGVyIGFuZCBzZXR0ZXIKICAgICAgICAgICAgaWYgKGtpbmQgPT09IDEgLyogQUNDRVNTT1IgKi8gfHwga2luZCA9PT0gMyAvKiBHRVRURVIgKi8pIHsKICAgICAgICAgICAgICAgIGdldCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVzYy5nZXQuY2FsbCh0aGlzKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChraW5kID09PSAxIC8qIEFDQ0VTU09SICovIHx8IGtpbmQgPT09IDQgLyogU0VUVEVSICovKSB7CiAgICAgICAgICAgICAgICBzZXQgPSBmdW5jdGlvbiAodikgewogICAgICAgICAgICAgICAgICAgIGRlc2Muc2V0LmNhbGwodGhpcywgdik7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGN0eC5hY2Nlc3MgPQogICAgICAgICAgICBnZXQgJiYgc2V0ID8geyBnZXQ6IGdldCwgc2V0OiBzZXQgfSA6IGdldCA/IHsgZ2V0OiBnZXQgfSA6IHsgc2V0OiBzZXQgfTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuIGRlYyh2YWx1ZSwgY3R4KTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICBkZWNvcmF0b3JGaW5pc2hlZFJlZi52ID0gdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gYXNzZXJ0Tm90RmluaXNoZWQoZGVjb3JhdG9yRmluaXNoZWRSZWYsIGZuTmFtZSkgewogICAgICAgIGlmIChkZWNvcmF0b3JGaW5pc2hlZFJlZi52KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICAgICAgICJhdHRlbXB0ZWQgdG8gY2FsbCAiICsgZm5OYW1lICsgIiBhZnRlciBkZWNvcmF0aW9uIHdhcyBmaW5pc2hlZCIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gYXNzZXJ0Q2FsbGFibGUoZm4sIGhpbnQpIHsKICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoaGludCArICIgbXVzdCBiZSBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGFzc2VydFZhbGlkUmV0dXJuVmFsdWUoa2luZCwgdmFsdWUpIHsKICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTsKCiAgICAgICAgaWYgKGtpbmQgPT09IDEgLyogQUNDRVNTT1IgKi8pIHsKICAgICAgICAgICAgaWYgKHR5cGUgIT09ICJvYmplY3QiIHx8IHZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKAogICAgICAgICAgICAgICAgICAgICJhY2Nlc3NvciBkZWNvcmF0b3JzIG11c3QgcmV0dXJuIGFuIG9iamVjdCB3aXRoIGdldCwgc2V0LCBvciBpbml0IHByb3BlcnRpZXMgb3Igdm9pZCAwIgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodmFsdWUuZ2V0ICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIGFzc2VydENhbGxhYmxlKHZhbHVlLmdldCwgImFjY2Vzc29yLmdldCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh2YWx1ZS5zZXQgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgYXNzZXJ0Q2FsbGFibGUodmFsdWUuc2V0LCAiYWNjZXNzb3Iuc2V0Iik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHZhbHVlLmluaXQgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgYXNzZXJ0Q2FsbGFibGUodmFsdWUuaW5pdCwgImFjY2Vzc29yLmluaXQiKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICB2YXIgaGludDsKICAgICAgICAgICAgaWYgKGtpbmQgPT09IDAgLyogRklFTEQgKi8pIHsKICAgICAgICAgICAgICAgIGhpbnQgPSAiZmllbGQiOwogICAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09IDEwIC8qIENMQVNTICovKSB7CiAgICAgICAgICAgICAgICBoaW50ID0gImNsYXNzIjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGhpbnQgPSAibWV0aG9kIjsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKAogICAgICAgICAgICAgICAgaGludCArICIgZGVjb3JhdG9ycyBtdXN0IHJldHVybiBhIGZ1bmN0aW9uIG9yIHZvaWQgMCIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gYXBwbHlNZW1iZXJEZWMoCiAgICAgICAgcmV0LAogICAgICAgIGJhc2UsCiAgICAgICAgZGVjSW5mbywKICAgICAgICBuYW1lLAogICAgICAgIGtpbmQsCiAgICAgICAgaXNTdGF0aWMsCiAgICAgICAgaXNQcml2YXRlLAogICAgICAgIGluaXRpYWxpemVycywKICAgICAgICBtZXRhZGF0YQogICAgKSB7CiAgICAgICAgdmFyIGRlY3MgPSBkZWNJbmZvWzBdOwoKICAgICAgICB2YXIgZGVzYywgaW5pdCwgdmFsdWU7CgogICAgICAgIGlmIChpc1ByaXZhdGUpIHsKICAgICAgICAgICAgaWYgKGtpbmQgPT09IDAgLyogRklFTEQgKi8gfHwga2luZCA9PT0gMSAvKiBBQ0NFU1NPUiAqLykgewogICAgICAgICAgICAgICAgZGVzYyA9IHsKICAgICAgICAgICAgICAgICAgICBnZXQ6IGRlY0luZm9bM10sCiAgICAgICAgICAgICAgICAgICAgc2V0OiBkZWNJbmZvWzRdLAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSBlbHNlIGlmIChraW5kID09PSAzIC8qIEdFVFRFUiAqLykgewogICAgICAgICAgICAgICAgZGVzYyA9IHsKICAgICAgICAgICAgICAgICAgICBnZXQ6IGRlY0luZm9bM10sCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09IDQgLyogU0VUVEVSICovKSB7CiAgICAgICAgICAgICAgICBkZXNjID0gewogICAgICAgICAgICAgICAgICAgIHNldDogZGVjSW5mb1szXSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkZXNjID0gewogICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkZWNJbmZvWzNdLAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoa2luZCAhPT0gMCAvKiBGSUVMRCAqLykgewogICAgICAgICAgICBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlLCBuYW1lKTsKICAgICAgICB9CgogICAgICAgIGlmIChraW5kID09PSAxIC8qIEFDQ0VTU09SICovKSB7CiAgICAgICAgICAgIHZhbHVlID0gewogICAgICAgICAgICAgICAgZ2V0OiBkZXNjLmdldCwKICAgICAgICAgICAgICAgIHNldDogZGVzYy5zZXQsCiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIGlmIChraW5kID09PSAyIC8qIE1FVEhPRCAqLykgewogICAgICAgICAgICB2YWx1ZSA9IGRlc2MudmFsdWU7CiAgICAgICAgfSBlbHNlIGlmIChraW5kID09PSAzIC8qIEdFVFRFUiAqLykgewogICAgICAgICAgICB2YWx1ZSA9IGRlc2MuZ2V0OwogICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gNCAvKiBTRVRURVIgKi8pIHsKICAgICAgICAgICAgdmFsdWUgPSBkZXNjLnNldDsKICAgICAgICB9CgogICAgICAgIHZhciBuZXdWYWx1ZSwgZ2V0LCBzZXQ7CgogICAgICAgIGlmICh0eXBlb2YgZGVjcyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICBuZXdWYWx1ZSA9IG1lbWJlckRlYygKICAgICAgICAgICAgICAgIGRlY3MsCiAgICAgICAgICAgICAgICBuYW1lLAogICAgICAgICAgICAgICAgZGVzYywKICAgICAgICAgICAgICAgIGluaXRpYWxpemVycywKICAgICAgICAgICAgICAgIGtpbmQsCiAgICAgICAgICAgICAgICBpc1N0YXRpYywKICAgICAgICAgICAgICAgIGlzUHJpdmF0ZSwKICAgICAgICAgICAgICAgIG1ldGFkYXRhLAogICAgICAgICAgICAgICAgdmFsdWUKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gdm9pZCAwKSB7CiAgICAgICAgICAgICAgICBhc3NlcnRWYWxpZFJldHVyblZhbHVlKGtpbmQsIG5ld1ZhbHVlKTsKCiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gMCAvKiBGSUVMRCAqLykgewogICAgICAgICAgICAgICAgICAgIGluaXQgPSBuZXdWYWx1ZTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gMSAvKiBBQ0NFU1NPUiAqLykgewogICAgICAgICAgICAgICAgICAgIGluaXQgPSBuZXdWYWx1ZS5pbml0OwogICAgICAgICAgICAgICAgICAgIGdldCA9IG5ld1ZhbHVlLmdldCB8fCB2YWx1ZS5nZXQ7CiAgICAgICAgICAgICAgICAgICAgc2V0ID0gbmV3VmFsdWUuc2V0IHx8IHZhbHVlLnNldDsKCiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB7IGdldDogZ2V0LCBzZXQ6IHNldCB9OwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ld1ZhbHVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IGRlY3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgICAgIHZhciBkZWMgPSBkZWNzW2ldOwoKICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gbWVtYmVyRGVjKAogICAgICAgICAgICAgICAgICAgIGRlYywKICAgICAgICAgICAgICAgICAgICBuYW1lLAogICAgICAgICAgICAgICAgICAgIGRlc2MsCiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXJzLAogICAgICAgICAgICAgICAgICAgIGtpbmQsCiAgICAgICAgICAgICAgICAgICAgaXNTdGF0aWMsCiAgICAgICAgICAgICAgICAgICAgaXNQcml2YXRlLAogICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLAogICAgICAgICAgICAgICAgICAgIHZhbHVlCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gdm9pZCAwKSB7CiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0VmFsaWRSZXR1cm5WYWx1ZShraW5kLCBuZXdWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0luaXQ7CgogICAgICAgICAgICAgICAgICAgIGlmIChraW5kID09PSAwIC8qIEZJRUxEICovKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0luaXQgPSBuZXdWYWx1ZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09IDEgLyogQUNDRVNTT1IgKi8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5pdCA9IG5ld1ZhbHVlLmluaXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGdldCA9IG5ld1ZhbHVlLmdldCB8fCB2YWx1ZS5nZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldCA9IG5ld1ZhbHVlLnNldCB8fCB2YWx1ZS5zZXQ7CgogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHsgZ2V0OiBnZXQsIHNldDogc2V0IH07CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBuZXdWYWx1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmIChuZXdJbml0ICE9PSB2b2lkIDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluaXQgPT09IHZvaWQgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG5ld0luaXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluaXQgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBbaW5pdCwgbmV3SW5pdF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0LnB1c2gobmV3SW5pdCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChraW5kID09PSAwIC8qIEZJRUxEICovIHx8IGtpbmQgPT09IDEgLyogQUNDRVNTT1IgKi8pIHsKICAgICAgICAgICAgaWYgKGluaXQgPT09IHZvaWQgMCkgewogICAgICAgICAgICAgICAgLy8gSWYgdGhlIGluaXRpYWxpemVyIHdhcyB2b2lkIDAsIHN1YiBpbiBhIGR1bW15IGluaXRpYWxpemVyCiAgICAgICAgICAgICAgICBpbml0ID0gZnVuY3Rpb24gKGluc3RhbmNlLCBpbml0KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluaXQ7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbml0ICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICB2YXIgb3duSW5pdGlhbGl6ZXJzID0gaW5pdDsKCiAgICAgICAgICAgICAgICBpbml0ID0gZnVuY3Rpb24gKGluc3RhbmNlLCBpbml0KSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaW5pdDsKCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvd25Jbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBvd25Jbml0aWFsaXplcnNbaV0uY2FsbChpbnN0YW5jZSwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBvcmlnaW5hbEluaXRpYWxpemVyID0gaW5pdDsKCiAgICAgICAgICAgICAgICBpbml0ID0gZnVuY3Rpb24gKGluc3RhbmNlLCBpbml0KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsSW5pdGlhbGl6ZXIuY2FsbChpbnN0YW5jZSwgaW5pdCk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXQucHVzaChpbml0KTsKICAgICAgICB9CgogICAgICAgIGlmIChraW5kICE9PSAwIC8qIEZJRUxEICovKSB7CiAgICAgICAgICAgIGlmIChraW5kID09PSAxIC8qIEFDQ0VTU09SICovKSB7CiAgICAgICAgICAgICAgICBkZXNjLmdldCA9IHZhbHVlLmdldDsKICAgICAgICAgICAgICAgIGRlc2Muc2V0ID0gdmFsdWUuc2V0OwogICAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09IDIgLyogTUVUSE9EICovKSB7CiAgICAgICAgICAgICAgICBkZXNjLnZhbHVlID0gdmFsdWU7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gMyAvKiBHRVRURVIgKi8pIHsKICAgICAgICAgICAgICAgIGRlc2MuZ2V0ID0gdmFsdWU7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gNCAvKiBTRVRURVIgKi8pIHsKICAgICAgICAgICAgICAgIGRlc2Muc2V0ID0gdmFsdWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChpc1ByaXZhdGUpIHsKICAgICAgICAgICAgICAgIGlmIChraW5kID09PSAxIC8qIEFDQ0VTU09SICovKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goZnVuY3Rpb24gKGluc3RhbmNlLCBhcmdzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5nZXQuY2FsbChpbnN0YW5jZSwgYXJncyk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goZnVuY3Rpb24gKGluc3RhbmNlLCBhcmdzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5zZXQuY2FsbChpbnN0YW5jZSwgYXJncyk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09IDIgLyogTUVUSE9EICovKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2godmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXQucHVzaChmdW5jdGlvbiAoaW5zdGFuY2UsIGFyZ3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmNhbGwoaW5zdGFuY2UsIGFyZ3MpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGJhc2UsIG5hbWUsIGRlc2MpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGFwcGx5TWVtYmVyRGVjcyhDbGFzcywgZGVjSW5mb3MsIG1ldGFkYXRhKSB7CiAgICAgICAgdmFyIHJldCA9IFtdOwogICAgICAgIHZhciBwcm90b0luaXRpYWxpemVyczsKICAgICAgICB2YXIgc3RhdGljSW5pdGlhbGl6ZXJzOwoKICAgICAgICB2YXIgZXhpc3RpbmdQcm90b05vbkZpZWxkcyA9IG5ldyBNYXAoKTsKICAgICAgICB2YXIgZXhpc3RpbmdTdGF0aWNOb25GaWVsZHMgPSBuZXcgTWFwKCk7CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVjSW5mb3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIGRlY0luZm8gPSBkZWNJbmZvc1tpXTsKCiAgICAgICAgICAgIC8vIHNraXAgY29tcHV0ZWQgcHJvcGVydHkgbmFtZXMKICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRlY0luZm8pKSBjb250aW51ZTsKCiAgICAgICAgICAgIHZhciBraW5kID0gZGVjSW5mb1sxXTsKICAgICAgICAgICAgdmFyIG5hbWUgPSBkZWNJbmZvWzJdOwogICAgICAgICAgICB2YXIgaXNQcml2YXRlID0gZGVjSW5mby5sZW5ndGggPiAzOwoKICAgICAgICAgICAgdmFyIGlzU3RhdGljID0ga2luZCA+PSA1OyAvKiBTVEFUSUMgKi8KICAgICAgICAgICAgdmFyIGJhc2U7CiAgICAgICAgICAgIHZhciBpbml0aWFsaXplcnM7CgogICAgICAgICAgICBpZiAoaXNTdGF0aWMpIHsKICAgICAgICAgICAgICAgIGJhc2UgPSBDbGFzczsKICAgICAgICAgICAgICAgIGtpbmQgPSBraW5kIC0gNSAvKiBTVEFUSUMgKi87CiAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIHN0YXRpY0luaXRpYWxpemVycyB3aGVuIHdlIHNlZSBhIG5vbi1maWVsZCBzdGF0aWMgbWVtYmVyCiAgICAgICAgICAgICAgICBzdGF0aWNJbml0aWFsaXplcnMgPSBzdGF0aWNJbml0aWFsaXplcnMgfHwgW107CiAgICAgICAgICAgICAgICBpbml0aWFsaXplcnMgPSBzdGF0aWNJbml0aWFsaXplcnM7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBiYXNlID0gQ2xhc3MucHJvdG90eXBlOwogICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBwcm90b0luaXRpYWxpemVycyB3aGVuIHdlIHNlZSBhIG5vbi1maWVsZCBtZW1iZXIKICAgICAgICAgICAgICAgIHByb3RvSW5pdGlhbGl6ZXJzID0gcHJvdG9Jbml0aWFsaXplcnMgfHwgW107CiAgICAgICAgICAgICAgICBpbml0aWFsaXplcnMgPSBwcm90b0luaXRpYWxpemVyczsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGtpbmQgIT09IDAgLyogRklFTEQgKi8gJiYgIWlzUHJpdmF0ZSkgewogICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nTm9uRmllbGRzID0gaXNTdGF0aWMKICAgICAgICAgICAgICAgICAgICA/IGV4aXN0aW5nU3RhdGljTm9uRmllbGRzCiAgICAgICAgICAgICAgICAgICAgOiBleGlzdGluZ1Byb3RvTm9uRmllbGRzOwoKICAgICAgICAgICAgICAgIHZhciBleGlzdGluZ0tpbmQgPSBleGlzdGluZ05vbkZpZWxkcy5nZXQobmFtZSkgfHwgMDsKCiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdLaW5kID09PSB0cnVlIHx8CiAgICAgICAgICAgICAgICAgICAgKGV4aXN0aW5nS2luZCA9PT0gMyAvKiBHRVRURVIgKi8gJiYga2luZCAhPT0gNCkgLyogU0VUVEVSICovIHx8CiAgICAgICAgICAgICAgICAgICAgKGV4aXN0aW5nS2luZCA9PT0gNCAvKiBTRVRURVIgKi8gJiYga2luZCAhPT0gMykgLyogR0VUVEVSICovCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICJBdHRlbXB0ZWQgdG8gZGVjb3JhdGUgYSBwdWJsaWMgbWV0aG9kL2FjY2Vzc29yIHRoYXQgaGFzIHRoZSBzYW1lIG5hbWUgYXMgYSBwcmV2aW91c2x5IGRlY29yYXRlZCBwdWJsaWMgbWV0aG9kL2FjY2Vzc29yLiBUaGlzIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IHRoZSBkZWNvcmF0b3JzIHBsdWdpbi4gUHJvcGVydHkgbmFtZSB3YXM6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICBuYW1lCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWV4aXN0aW5nS2luZCAmJiBraW5kID4gMiAvKiBNRVRIT0QgKi8pIHsKICAgICAgICAgICAgICAgICAgICBleGlzdGluZ05vbkZpZWxkcy5zZXQobmFtZSwga2luZCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nTm9uRmllbGRzLnNldChuYW1lLCB0cnVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgYXBwbHlNZW1iZXJEZWMoCiAgICAgICAgICAgICAgICByZXQsCiAgICAgICAgICAgICAgICBiYXNlLAogICAgICAgICAgICAgICAgZGVjSW5mbywKICAgICAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgICAgICBraW5kLAogICAgICAgICAgICAgICAgaXNTdGF0aWMsCiAgICAgICAgICAgICAgICBpc1ByaXZhdGUsCiAgICAgICAgICAgICAgICBpbml0aWFsaXplcnMsCiAgICAgICAgICAgICAgICBtZXRhZGF0YQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcHVzaEluaXRpYWxpemVycyhyZXQsIHByb3RvSW5pdGlhbGl6ZXJzKTsKICAgICAgICBwdXNoSW5pdGlhbGl6ZXJzKHJldCwgc3RhdGljSW5pdGlhbGl6ZXJzKTsKICAgICAgICByZXR1cm4gcmV0OwogICAgfQoKICAgIGZ1bmN0aW9uIHB1c2hJbml0aWFsaXplcnMocmV0LCBpbml0aWFsaXplcnMpIHsKICAgICAgICBpZiAoaW5pdGlhbGl6ZXJzKSB7CiAgICAgICAgICAgIHJldC5wdXNoKGZ1bmN0aW9uIChpbnN0YW5jZSkgewogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplcnNbaV0uY2FsbChpbnN0YW5jZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBhcHBseUNsYXNzRGVjcyh0YXJnZXRDbGFzcywgY2xhc3NEZWNzLCBtZXRhZGF0YSkgewogICAgICAgIGlmIChjbGFzc0RlY3MubGVuZ3RoID4gMCkgewogICAgICAgICAgICB2YXIgaW5pdGlhbGl6ZXJzID0gW107CiAgICAgICAgICAgIHZhciBuZXdDbGFzcyA9IHRhcmdldENsYXNzOwogICAgICAgICAgICB2YXIgbmFtZSA9IHRhcmdldENsYXNzLm5hbWU7CgogICAgICAgICAgICBmb3IgKHZhciBpID0gY2xhc3NEZWNzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgICAgICB2YXIgZGVjb3JhdG9yRmluaXNoZWRSZWYgPSB7IHY6IGZhbHNlIH07CgogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dE5ld0NsYXNzID0gY2xhc3NEZWNzW2ldKG5ld0NsYXNzLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6ICJjbGFzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEluaXRpYWxpemVyOiBjcmVhdGVBZGRJbml0aWFsaXplck1ldGhvZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29yYXRvckZpbmlzaGVkUmVmCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgICAgICBkZWNvcmF0b3JGaW5pc2hlZFJlZi52ID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAobmV4dE5ld0NsYXNzICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBhc3NlcnRWYWxpZFJldHVyblZhbHVlKDEwIC8qIENMQVNTICovLCBuZXh0TmV3Q2xhc3MpOwogICAgICAgICAgICAgICAgICAgIG5ld0NsYXNzID0gbmV4dE5ld0NsYXNzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgZGVmaW5lTWV0YWRhdGEobmV3Q2xhc3MsIG1ldGFkYXRhKSwKICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplcnNbaV0uY2FsbChuZXdDbGFzcyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXTsKICAgICAgICB9CiAgICAgICAgLy8gVGhlIHRyYW5zZm9ybWVyIHdpbGwgbm90IGVtaXQgYXNzaWdubWVudCB3aGVuIHRoZXJlIGFyZSBubyBjbGFzcyBkZWNvcmF0b3JzLAogICAgICAgIC8vIHNvIHdlIGRvbid0IGhhdmUgdG8gcmV0dXJuIGFuIGVtcHR5IGFycmF5IGhlcmUuCiAgICB9CgogICAgZnVuY3Rpb24gZGVmaW5lTWV0YWRhdGEoQ2xhc3MsIG1ldGFkYXRhKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgKICAgICAgICAgICAgQ2xhc3MsCiAgICAgICAgICAgIFN5bWJvbC5tZXRhZGF0YSB8fCBTeW1ib2wuZm9yKCJTeW1ib2wubWV0YWRhdGEiKSwKICAgICAgICAgICAgeyBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBtZXRhZGF0YSB9CiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgIEJhc2ljIHVzYWdlOgogIAogICAgYXBwbHlEZWNzKAogICAgICBDbGFzcywKICAgICAgWwogICAgICAgIC8vIG1lbWJlciBkZWNvcmF0b3JzCiAgICAgICAgWwogICAgICAgICAgZGVjLCAgICAgICAgICAgICAgICAvLyBkZWMgb3IgYXJyYXkgb2YgZGVjcwogICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAvLyBraW5kIG9mIHZhbHVlIGJlaW5nIGRlY29yYXRlZAogICAgICAgICAgJ3Byb3AnLCAgICAgICAgICAgICAvLyBuYW1lIG9mIHB1YmxpYyBwcm9wIG9uIGNsYXNzIGNvbnRhaW5pbmcgdGhlIHZhbHVlIGJlaW5nIGRlY29yYXRlZCwKICAgICAgICAgICcjcCcsICAgICAgICAgICAgICAgLy8gdGhlIG5hbWUgb2YgdGhlIHByaXZhdGUgcHJvcGVydHkgKGlmIGlzIHByaXZhdGUsIHZvaWQgMCBvdGhlcndpc2UpLAogICAgICAgIF0KICAgICAgXSwKICAgICAgWwogICAgICAgIC8vIGNsYXNzIGRlY29yYXRvcnMKICAgICAgICBkZWMxLCBkZWMyCiAgICAgIF0KICAgICkKICAgIGBgYAogIAogICAgRnVsbHkgdHJhbnNwaWxlZCBleGFtcGxlOgogIAogICAgYGBganMKICAgIEBkZWMKICAgIGNsYXNzIENsYXNzIHsKICAgICAgQGRlYwogICAgICBhID0gMTIzOwogIAogICAgICBAZGVjCiAgICAgICNhID0gMTIzOwogIAogICAgICBAZGVjCiAgICAgIEBkZWMyCiAgICAgIGFjY2Vzc29yIGIgPSAxMjM7CiAgCiAgICAgIEBkZWMKICAgICAgYWNjZXNzb3IgI2IgPSAxMjM7CiAgCiAgICAgIEBkZWMKICAgICAgYygpIHsgY29uc29sZS5sb2coJ2MnKTsgfQogIAogICAgICBAZGVjCiAgICAgICNjKCkgeyBjb25zb2xlLmxvZygncHJpdkMnKTsgfQogIAogICAgICBAZGVjCiAgICAgIGdldCBkKCkgeyBjb25zb2xlLmxvZygnZCcpOyB9CiAgCiAgICAgIEBkZWMKICAgICAgZ2V0ICNkKCkgeyBjb25zb2xlLmxvZygncHJpdkQnKTsgfQogIAogICAgICBAZGVjCiAgICAgIHNldCBlKHYpIHsgY29uc29sZS5sb2coJ2UnKTsgfQogIAogICAgICBAZGVjCiAgICAgIHNldCAjZSh2KSB7IGNvbnNvbGUubG9nKCdwcml2RScpOyB9CiAgICB9CiAgCiAgCiAgICAvLyBiZWNvbWVzCiAgICBsZXQgaW5pdGlhbGl6ZUluc3RhbmNlOwogICAgbGV0IGluaXRpYWxpemVDbGFzczsKICAKICAgIGxldCBpbml0QTsKICAgIGxldCBpbml0UHJpdkE7CiAgCiAgICBsZXQgaW5pdEI7CiAgICBsZXQgaW5pdFByaXZCLCBnZXRQcml2Qiwgc2V0UHJpdkI7CiAgCiAgICBsZXQgcHJpdkM7CiAgICBsZXQgcHJpdkQ7CiAgICBsZXQgcHJpdkU7CiAgCiAgICBsZXQgQ2xhc3M7CiAgICBjbGFzcyBfQ2xhc3MgewogICAgICBzdGF0aWMgewogICAgICAgIGxldCByZXQgPSBhcHBseURlY3MoCiAgICAgICAgICB0aGlzLAogICAgICAgICAgWwogICAgICAgICAgICBbZGVjLCAwLCAnYSddLAogICAgICAgICAgICBbZGVjLCAwLCAnYScsIChpKSA9PiBpLiNhLCAoaSwgdikgPT4gaS4jYSA9IHZdLAogICAgICAgICAgICBbW2RlYywgZGVjMl0sIDEsICdiJ10sCiAgICAgICAgICAgIFtkZWMsIDEsICdiJywgKGkpID0+IGkuI3ByaXZCRGF0YSwgKGksIHYpID0+IGkuI3ByaXZCRGF0YSA9IHZdLAogICAgICAgICAgICBbZGVjLCAyLCAnYyddLAogICAgICAgICAgICBbZGVjLCAyLCAnYycsICgpID0+IGNvbnNvbGUubG9nKCdwcml2QycpXSwKICAgICAgICAgICAgW2RlYywgMywgJ2QnXSwKICAgICAgICAgICAgW2RlYywgMywgJ2QnLCAoKSA9PiBjb25zb2xlLmxvZygncHJpdkQnKV0sCiAgICAgICAgICAgIFtkZWMsIDQsICdlJ10sCiAgICAgICAgICAgIFtkZWMsIDQsICdlJywgKCkgPT4gY29uc29sZS5sb2coJ3ByaXZFJyldLAogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgZGVjCiAgICAgICAgICBdCiAgICAgICAgKQogIAogICAgICAgIGluaXRBID0gcmV0WzBdOwogIAogICAgICAgIGluaXRQcml2QSA9IHJldFsxXTsKICAKICAgICAgICBpbml0QiA9IHJldFsyXTsKICAKICAgICAgICBpbml0UHJpdkIgPSByZXRbM107CiAgICAgICAgZ2V0UHJpdkIgPSByZXRbNF07CiAgICAgICAgc2V0UHJpdkIgPSByZXRbNV07CiAgCiAgICAgICAgcHJpdkMgPSByZXRbNl07CiAgCiAgICAgICAgcHJpdkQgPSByZXRbN107CiAgCiAgICAgICAgcHJpdkUgPSByZXRbOF07CiAgCiAgICAgICAgaW5pdGlhbGl6ZUluc3RhbmNlID0gcmV0WzldOwogIAogICAgICAgIENsYXNzID0gcmV0WzEwXQogIAogICAgICAgIGluaXRpYWxpemVDbGFzcyA9IHJldFsxMV07CiAgICAgIH0KICAKICAgICAgYSA9IChpbml0aWFsaXplSW5zdGFuY2UodGhpcyksIGluaXRBKHRoaXMsIDEyMykpOwogIAogICAgICAjYSA9IGluaXRQcml2QSh0aGlzLCAxMjMpOwogIAogICAgICAjYkRhdGEgPSBpbml0Qih0aGlzLCAxMjMpOwogICAgICBnZXQgYigpIHsgcmV0dXJuIHRoaXMuI2JEYXRhIH0KICAgICAgc2V0IGIodikgeyB0aGlzLiNiRGF0YSA9IHYgfQogIAogICAgICAjcHJpdkJEYXRhID0gaW5pdFByaXZCKHRoaXMsIDEyMyk7CiAgICAgIGdldCAjYigpIHsgcmV0dXJuIGdldFByaXZCKHRoaXMpOyB9CiAgICAgIHNldCAjYih2KSB7IHNldFByaXZCKHRoaXMsIHYpOyB9CiAgCiAgICAgIGMoKSB7IGNvbnNvbGUubG9nKCdjJyk7IH0KICAKICAgICAgI2MoLi4uYXJncykgeyByZXR1cm4gcHJpdkModGhpcywgLi4uYXJncykgfQogIAogICAgICBnZXQgZCgpIHsgY29uc29sZS5sb2coJ2QnKTsgfQogIAogICAgICBnZXQgI2QoKSB7IHJldHVybiBwcml2RCh0aGlzKTsgfQogIAogICAgICBzZXQgZSh2KSB7IGNvbnNvbGUubG9nKCdlJyk7IH0KICAKICAgICAgc2V0ICNlKHYpIHsgcHJpdkUodGhpcywgdik7IH0KICAgIH0KICAKICAgIGluaXRpYWxpemVDbGFzcyhDbGFzcyk7CiAgICovCgogICAgcmV0dXJuIGZ1bmN0aW9uIGFwcGx5RGVjczIyMDNSKHRhcmdldENsYXNzLCBtZW1iZXJEZWNzLCBjbGFzc0RlY3MsIHBhcmVudENsYXNzKSB7CiAgICAgICAgaWYgKHBhcmVudENsYXNzICE9PSB2b2lkIDApIHsKICAgICAgICAgICAgdmFyIHBhcmVudE1ldGFkYXRhID0KICAgICAgICAgICAgICAgIHBhcmVudENsYXNzW1N5bWJvbC5tZXRhZGF0YSB8fCBTeW1ib2wuZm9yKCJTeW1ib2wubWV0YWRhdGEiKV07CiAgICAgICAgfQogICAgICAgIHZhciBtZXRhZGF0YSA9IE9iamVjdC5jcmVhdGUoCiAgICAgICAgICAgIHBhcmVudE1ldGFkYXRhID09PSB2b2lkIDAgPyBudWxsIDogcGFyZW50TWV0YWRhdGEKICAgICAgICApOwogICAgICAgIHZhciBlID0gYXBwbHlNZW1iZXJEZWNzKHRhcmdldENsYXNzLCBtZW1iZXJEZWNzLCBtZXRhZGF0YSk7CiAgICAgICAgaWYgKCFjbGFzc0RlY3MubGVuZ3RoKSBkZWZpbmVNZXRhZGF0YSh0YXJnZXRDbGFzcywgbWV0YWRhdGEpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGU6IGUsCiAgICAgICAgICAgIC8vIExhemlseSBhcHBseSBjbGFzcyBkZWNvcmF0aW9ucyBzbyB0aGF0IG1lbWJlciBpbml0IGxvY2FscyBjYW4gYmUgcHJvcGVybHkgYm91bmQuCiAgICAgICAgICAgIGdldCBjKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGFwcGx5Q2xhc3NEZWNzKHRhcmdldENsYXNzLCBjbGFzc0RlY3MsIG1ldGFkYXRhKTsKICAgICAgICAgICAgfSwKICAgICAgICB9OwogICAgfTsKfQoKZnVuY3Rpb24gX2FwcGx5X2RlY3NfMjIwM19yKHRhcmdldENsYXNzLCBtZW1iZXJEZWNzLCBjbGFzc0RlY3MsIHBhcmVudENsYXNzKSB7CiAgICByZXR1cm4gKF9hcHBseV9kZWNzXzIyMDNfciA9IGFwcGx5RGVjczIyMDNSRmFjdG9yeSgpKSgKICAgICAgICB0YXJnZXRDbGFzcywKICAgICAgICBtZW1iZXJEZWNzLAogICAgICAgIGNsYXNzRGVjcywKICAgICAgICBwYXJlbnRDbGFzcwogICAgKTsKfQpmdW5jdGlvbiBfaWRlbnRpdHkoeCkgeyByZXR1cm4geDsgfQovKiBAbWluVmVyc2lvbiA3LjIyLjAgKi8KZnVuY3Rpb24gZGlzcG9zZV9TdXBwcmVzc2VkRXJyb3Ioc3VwcHJlc3NlZCwgZXJyb3IpIHsKICAgIGlmICh0eXBlb2YgU3VwcHJlc3NlZEVycm9yICE9PSAidW5kZWZpbmVkIikgewogICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZgogICAgICAgIGRpc3Bvc2VfU3VwcHJlc3NlZEVycm9yID0gU3VwcHJlc3NlZEVycm9yOwogICAgfSBlbHNlIHsKICAgICAgICBkaXNwb3NlX1N1cHByZXNzZWRFcnJvciA9IGZ1bmN0aW9uIFN1cHByZXNzZWRFcnJvcihzdXBwcmVzc2VkLCBlcnJvcikgewogICAgICAgICAgICB0aGlzLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkOwogICAgICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7CiAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjazsKICAgICAgICB9OwogICAgICAgIGRpc3Bvc2VfU3VwcHJlc3NlZEVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlLCB7CiAgICAgICAgICAgIGNvbnN0cnVjdG9yOiB7CiAgICAgICAgICAgICAgICB2YWx1ZTogZGlzcG9zZV9TdXBwcmVzc2VkRXJyb3IsCiAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgfSwKICAgICAgICB9KTsKICAgIH0KICAgIHJldHVybiBuZXcgZGlzcG9zZV9TdXBwcmVzc2VkRXJyb3Ioc3VwcHJlc3NlZCwgZXJyb3IpOwp9CgpmdW5jdGlvbiBfZGlzcG9zZShzdGFjaywgZXJyb3IsIGhhc0Vycm9yKSB7CiAgICBmdW5jdGlvbiBuZXh0KCkgewogICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICB2YXIgciA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgICAgICAgdmFyIHAgPSByLmQuY2FsbChyLnYpOwogICAgICAgICAgICAgICAgaWYgKHIuYSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwKS50aGVuKG5leHQsIGVycik7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBlcnIoZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGhhc0Vycm9yKSB0aHJvdyBlcnJvcjsKICAgIH0KCiAgICBmdW5jdGlvbiBlcnIoZSkgewogICAgICAgIGVycm9yID0gaGFzRXJyb3IgPyBuZXcgZGlzcG9zZV9TdXBwcmVzc2VkRXJyb3IoZSwgZXJyb3IpIDogZTsKICAgICAgICBoYXNFcnJvciA9IHRydWU7CgogICAgICAgIHJldHVybiBuZXh0KCk7CiAgICB9CgogICAgcmV0dXJuIG5leHQoKTsKfWZ1bmN0aW9uIF91c2luZyhzdGFjaywgdmFsdWUsIGlzQXdhaXQpIHsKICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gdmFsdWU7CiAgICBpZiAoT2JqZWN0KHZhbHVlKSAhPT0gdmFsdWUpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJ1c2luZyBkZWNsYXJhdGlvbnMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIG9iamVjdHMsIGZ1bmN0aW9ucywgbnVsbCwgb3IgdW5kZWZpbmVkLiIpOwogICAgfQogICAgLy8gY29yZS1qcy1wdXJlIHVzZXMgU3ltYm9sLmZvciBmb3IgcG9seWZpbGxpbmcgd2VsbC1rbm93biBzeW1ib2xzCiAgICBpZiAoaXNBd2FpdCkgewogICAgICAgIHZhciBkaXNwb3NlID0KICAgICAgICAgICAgdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZSB8fCBTeW1ib2wuZm9yKCJTeW1ib2wuYXN5bmNEaXNwb3NlIildOwogICAgfQogICAgaWYgKGRpc3Bvc2UgPT09IG51bGwgfHwgZGlzcG9zZSA9PT0gdm9pZCAwKSB7CiAgICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5kaXNwb3NlIHx8IFN5bWJvbC5mb3IoIlN5bWJvbC5kaXNwb3NlIildOwogICAgfQogICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgUHJvcGVydHkgW1N5bWJvbC5kaXNwb3NlXSBpcyBub3QgYSBmdW5jdGlvbi5gKTsKICAgIH0KICAgIHN0YWNrLnB1c2goeyB2OiB2YWx1ZSwgZDogZGlzcG9zZSwgYTogaXNBd2FpdCB9KTsKICAgIHJldHVybiB2YWx1ZTsKfWZ1bmN0aW9uIF91c2luZ19jdHgoKSB7CiAgICB2YXIgX2Rpc3Bvc2VTdXBwcmVzc2VkRXJyb3IgPQogICAgICAgIHR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09ICJmdW5jdGlvbiIKICAgICAgICAgICAgPyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWYKICAgICAgICAgICAgU3VwcHJlc3NlZEVycm9yCiAgICAgICAgICAgIDogKGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCkgewogICAgICAgICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcigpOwogICAgICAgICAgICAgICAgZXJyLm5hbWUgPSAiU3VwcHJlc3NlZEVycm9yIjsKICAgICAgICAgICAgICAgIGVyci5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZDsKICAgICAgICAgICAgICAgIGVyci5lcnJvciA9IGVycm9yOwogICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgICAgfSksCiAgICAgICAgZW1wdHkgPSB7fSwKICAgICAgICBzdGFjayA9IFtdOwogICAgZnVuY3Rpb24gdXNpbmcoaXNBd2FpdCwgdmFsdWUpIHsKICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICAgICAgICBpZiAoT2JqZWN0KHZhbHVlKSAhPT0gdmFsdWUpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgInVzaW5nIGRlY2xhcmF0aW9ucyBjYW4gb25seSBiZSB1c2VkIHdpdGggb2JqZWN0cywgZnVuY3Rpb25zLCBudWxsLCBvciB1bmRlZmluZWQuIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gY29yZS1qcy1wdXJlIHVzZXMgU3ltYm9sLmZvciBmb3IgcG9seWZpbGxpbmcgd2VsbC1rbm93biBzeW1ib2xzCiAgICAgICAgICAgIGlmIChpc0F3YWl0KSB7CiAgICAgICAgICAgICAgICB2YXIgZGlzcG9zZSA9CiAgICAgICAgICAgICAgICAgICAgdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZSB8fCBTeW1ib2wuZm9yKCJTeW1ib2wuYXN5bmNEaXNwb3NlIildOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChkaXNwb3NlID09IG51bGwpIHsKICAgICAgICAgICAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuZGlzcG9zZSB8fCBTeW1ib2wuZm9yKCJTeW1ib2wuZGlzcG9zZSIpXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodHlwZW9mIGRpc3Bvc2UgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFByb3BlcnR5IFtTeW1ib2wuZGlzcG9zZV0gaXMgbm90IGEgZnVuY3Rpb24uYCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3RhY2sucHVzaCh7IHY6IHZhbHVlLCBkOiBkaXNwb3NlLCBhOiBpc0F3YWl0IH0pOwogICAgICAgIH0gZWxzZSBpZiAoaXNBd2FpdCkgewogICAgICAgICAgICAvLyBwcm92aWRlIHRoZSBudWxsaXNoIGB2YWx1ZWAgYXMgYGRgIGZvciBtaW5pZmljYXRpb24gZ2FpbgogICAgICAgICAgICBzdGFjay5wdXNoKHsgZDogdmFsdWUsIGE6IGlzQXdhaXQgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KICAgIHJldHVybiB7CiAgICAgICAgLy8gZXJyb3IKICAgICAgICBlOiBlbXB0eSwKICAgICAgICAvLyB1c2luZwogICAgICAgIHU6IHVzaW5nLmJpbmQobnVsbCwgZmFsc2UpLAogICAgICAgIC8vIGF3YWl0IHVzaW5nCiAgICAgICAgYTogdXNpbmcuYmluZChudWxsLCB0cnVlKSwKICAgICAgICAvLyBkaXNwb3NlCiAgICAgICAgZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLmU7CgogICAgICAgICAgICBmdW5jdGlvbiBuZXh0KCkgewogICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZQogICAgICAgICAgICAgICAgd2hpbGUgKChyZXNvdXJjZSA9IHN0YWNrLnBvcCgpKSkgewogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2FsUmVzdWx0ID0gcmVzb3VyY2UuZCAmJiByZXNvdXJjZS5kLmNhbGwocmVzb3VyY2Uudik7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZS5hKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRpc3Bvc2FsUmVzdWx0KS50aGVuKG5leHQsIGVycik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnIoZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGVycm9yICE9PSBlbXB0eSkgdGhyb3cgZXJyb3I7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZ1bmN0aW9uIGVycihlKSB7CiAgICAgICAgICAgICAgICBlcnJvciA9IGVycm9yICE9PSBlbXB0eSA/IG5ldyBfZGlzcG9zZVN1cHByZXNzZWRFcnJvcihlcnJvciwgZSkgOiBlOwoKICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7CiAgICAgICAgfSwKICAgIH07Cn1jYWxsZWQgZXhwZWN0IG9uIADa1hcAEQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19lY21hX2FzdC0wLjEyMS4yL3NyYy9wYXQucnMAAPTWFwBeAAAADQAAABQAAAAPBQAABAAAAAQAAAA3AQAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc3djX2VjbWFfdHJhbnNmb3Jtc19iYXNlLTAuMTUwLjEvc3JjL2ZpeGVyLnJzdNcXAGwAAADEAAAAQAAAAHTXFwBsAAAAsQIAABYAAAB01xcAbAAAABYEAAAgAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvaW5kZXhtYXAtMi40LjAvc3JjL21hcC9jb3JlLnJzAAAAENgXAF0AAAAtAAAAIwAAAGluZGV4IG5vdCBmb3VuZAAQ2BcAXQAAADoAAAAKAAAAENgXAF0AAABTAQAAPQAAABDYFwBdAAAAOwIAADQAAAAQ2BcAXQAAADwCAAA0AAAAENgXAF0AAAC6AQAALAAAABDYFwBdAAAAsAEAACIAAABhc3NlcnRpb24gZmFpbGVkOiBpbmRpY2VzLmNhcGFjaXR5KCkgLSBpbmRpY2VzLmxlbigpID49IGVudHJpZXMubGVuKCkvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9pbmRleG1hcC0yLjQuMC9zcmMvbWFwL2NvcmUvcmF3LnJzAAA12RcAYQAAAA4AAAAFAAAAENgXAF0AAAAlAAAADwAAAAAAAAAMAAAABAAAABAFAAARBQAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc3djX2VjbWFfdHJhbnNmb3Jtc19iYXNlLTAuMTUwLjEvc3JjL3Jlc29sdmVyL21vZC5ycwDM2RcAcwAAAJ0GAAA2AAAAEgUAACgAAAAIAAAANQEAAENsYXNzRm5WYXJVc2luZ1RzSW50ZXJmYWNlVHNUeXBlQWxpYXNUc0VudW1Uc01vZHVsZWludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IGRlc3RydWN0dXJpbmcgcGF0dGVybiBpbnNpZGUgVHNQYXJhbWV0ZXJQcm9wZXJ0eQAAAJPaFwBaAAAAQNwXAHYAAAA+AQAAIQAAAEDcFwB2AAAAOwMAAA0AAACQIxgAKgAAAEDcFwB2AAAAygMAAB0AAABA3BcAdgAAAKUDAABAAAAAX2tleUDcFwB2AAAANQQAAFEAAABA3BcAdgAAAD8EAAAnAAAAX2NyZWF0ZVJlcXVpcmVfX3JlcXVpcmVleHBvcnRzY3JlYXRlUmVxdWlyZXVybAAAQNwXAHYAAAArBQAAGgAAAEDcFwB2AAAALQUAABoAAABPbmx5IGFtYmllbnQgbW9kdWxlcyBjYW4gdXNlIHF1b3RlZCBuYW1lcy4AAEDcFwB2AAAA1wUAAA4AAABub3QgaW1wbGVtZW50ZWQA3OAXAGAAAABUDAAAPgAAANzgFwBgAAAAYAwAADwAAADc4BcAYAAAAEEMAAAmAAAAEwUAAAQAAAAEAAAANwEAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19lY21hX3RyYW5zZm9ybXNfdHlwZXNjcmlwdC0wLjIwMy4xL3NyYy90cmFuc2Zvcm0ucnMAAEDcFwB2AAAAugIAADgAAABJbXBvcnQgZGVjbGFyYXRpb25zIGluIGEgbmFtZXNwYWNlIGNhbm5vdCByZWZlcmVuY2UgYSBtb2R1bGUuRVNNLXN0eWxlIG1vZHVsZSBkZWNsYXJhdGlvbnMgYXJlIG5vdCBwZXJtaXR0ZWQgaW4gYSBuYW1lc3BhY2UuSW1wb3J0IGFzc2lnbm1lbnQgY2Fubm90IGJlIHVzZWQgd2hlbiB0YXJnZXRpbmcgRUNNQVNjcmlwdCBtb2R1bGVzLiBDb25zaWRlciB1c2luZyBgaW1wb3J0ICogYXMgbnMgZnJvbSAibW9kImAsIGBpbXBvcnQge2F9IGZyb20gIm1vZCJgLCBgaW1wb3J0IGQgZnJvbSAibW9kImAsIG9yIGFub3RoZXIgbW9kdWxlIGZvcm1hdCBpbnN0ZWFkLkV4cG9ydCBhc3NpZ25tZW50IGNhbm5vdCBiZSB1c2VkIHdoZW4gdGFyZ2V0aW5nIEVDTUFTY3JpcHQgbW9kdWxlcy4gQ29uc2lkZXIgdXNpbmcgYGV4cG9ydCBkZWZhdWx0YCBvciBhbm90aGVyIG1vZHVsZSBmb3JtYXQgaW5zdGVhZC4vdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9zd2NfZWNtYV90cmFuc2Zvcm1zX3R5cGVzY3JpcHQtMC4yMDMuMS9zcmMvdHlwZXNjcmlwdC5ycwAAAIreFwB3AAAAQQAAACwAAAAXAwAADAAAAAQAAABXAwAAWAMAAB8EAEG0vt8AC5YDAQAAABsDAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9zd2NfZWNtYV90cmFuc2Zvcm1zX3R5cGVzY3JpcHQtMC4yMDMuMS9zcmMvdHNfZW51bS5yc05hTgA83xcAdAAAAK8AAAASAAAAPN8XAHQAAADZAAAAGgAAABQFAAAEAAAABAAAADcBAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9zd2NfZWNtYV90cmFuc2Zvcm1zX3R5cGVzY3JpcHQtMC4yMDMuMS9zcmMvc3RyaXBfdHlwZS5ycwDk3xcAdwAAAMkAAAApAAAAc3RydWN0IENvbmZpZ2VudW0gVHNJbXBvcnRFeHBvcnRBc3NpZ25Db25maWdlbnVtIEltcG9ydHNOb3RVc2VkQXNWYWx1ZXMAHgQAAAwAAAAEAAAAVwMAAFgDAAAfBABB1MHfAAuCBAEAAAAbAwAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc3djX2VjbWFfdXRpbHMtMC4xMzguMS9zcmMvbGliLnJzXwAAAAEAAAAAAAAAPOEXAAEAAABzdXBlcl8AAFDhFwAGAAAAPOEXAAEAAABjYXBhY2l0eSBvdmVyZmxvdwAAAGjhFwARAAAAL3J1c3RjLzU1YTIyZDJhNjMzMzRlMGZhZmYwMjAyYjcyYTMxY2U4MzJiNTYxMjUvbGlicmFyeS9hbGxvYy9zcmMvdmVjL3NwZWNfZnJvbV9pdGVyX25lc3RlZC5ycwAAhOEXAF4AAAA5AAAAEgAAAHwsGABMAAAAsQ0AAA0AAAB8LBgATAAAAA4KAAAkAAAAAAAAAAwAAAAEAAAAFQUAABYFAABjb25zdHJ1Y3RvciBzaG91bGQgaGF2ZSBhIGJvZHkvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9zd2NfZWNtYV91dGlscy0wLjEzOC4xL3NyYy9jb25zdHJ1Y3Rvci5ycwAARuIXAGgAAAAOAAAAIAAAAB4EAAAMAAAABAAAAFcDAAA1BAAAHwQAQeDF3wAL+gcBAAAAGwMAAI4UGAABAAAAjhQYAAEAAACOFBgAAQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4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AAkVGABkAAAAfgEAABkAAACIIBgAZAAAAF4CAAAcAAAAiCAYAGQAAABrAgAAMgAAAAIAAACIIBgAZAAAAAEDAAAVAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvcmVnZXgtYXV0b21hdGEtMC40Ljcvc3JjL3V0aWwvc2VhcmNoLnJzaW52YWxpZCBzcGFuICBmb3IgaGF5c3RhY2sgb2YgbGVuZ3RoIAB6FhgADQAAAIcWGAAYAAAAFBYYAGYAAACqAQAACQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19lY21hX2NvZGVnZW4tMC4xNTguMy9zcmMvdHlwZXNjcmlwdC5yc2FzKD0+e31kZWNsYXJlbmFtZXNwYWNlYAAAAMAWGABpAAAAtgEAACIAAAAkewAAwBYYAGkAAAC5AQAAIQAAAGV4dGVuZHM/OmVudW0uLi5bXWluZmVycmVhZG9ubHlvdXRpbXBvcnQubW9kdWxlZ2xvYmFsYW55dW5rbm93bm51bWJlcm9iamVjdGJvb2xlYW5iaWdpbnRzdHJpbmdzeW1ib2x1bmRlZmluZWRudWxsbmV2ZXJpbnRyaW5zaWNrZXlvZnVuaXF1ZWludGVyZmFjZWV4cG9ydHNhdGlzZmllc2Fzc2VydHNpc3R5cGVhYnN0cmFjdG5ld2dldHNldHJlcXVpcmUAGBQYAHUAAABxAAAAGgAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19lY21hX2NvZGVnZW4tMC4xNTguMy9zcmMvbGliLnJzAABAGBgAYgAAANsHAAAvAAAAQBgYAGIAAADVBwAAMAAAAHN1cGVyZGVmZXIsZnJvbXdpdGhhc3NlcnRhc3NlcnRpb24gZmFpbGVkOiBuLnNwZWNpZmllcnMubGVuKCkgPD0gMgAAQBgYAGIAAABoAQAAFQAAACMhAABAGBgAYgAAAGQOAAASAAAAbi0weC0ZGAADAAAAMHgAADgZGAACAAAAZnVuY3Rpb25hc3luY2lmZWxzZTxpbnZhbGlkPnVzZSBzdHJpY3Q8IS0tXHgzYyEtLS0tPi0tXHgzZQAAQBgYAGIAAACzBwAAIgAAAEAYGABiAAAAtgcAACEAAABmb3J0cnlmaW5hbGx5QD8uYXdhaXRicmVha2NsYXNzdGhyb3d3aGlsZXlpZWxkb2ZyZXR1cm5jYXNlZGVmYXVsdAAAAEAYGABiAAAAcQ0AABoAAABAGBgAYgAAAHQNAAA7AAAAc3dpdGNoY2F0Y2gjcHVibGljcHJvdGVjdGVkcHJpdmF0ZWFjY2Vzc29yY29udGludWVkZWJ1Z2dlcmRvaW1wbGVtZW50c25ldy50YXJnZXRpbXBvcnQubWV0YW5vdCBpbXBsZW1lbnRlZDogY29kZWdlbiBvZiBgZXhwb3J0IGRlZmF1bHQgZnJvbSAnZm9vJztgAF8aGAA4AAAAQBgYAGIAAAC2AQAAEQAAAEAYGABiAAAA4AIAADQAAABJbmZpbml0eWVjb25zdHJ1Y3RvckAYGABiAAAAFgoAAEgAAABAGBgAYgAAABcKAAAoAAAAQBgYAGIAAAD/BwAATAAAAEAYGABiAAAAAggAACcAAABmYWxzZXRydWU8LzwvPjw+dXNpbmcvLy8qKi8jX19QVVJFX18XAwAADAAAAAQAAABXAwAADQQAAB8EAEHYtuAACx4BAAAAGwMAABcDAAAMAAAABAAAAFcDAABYAwAAHwQAQYC34AALgQYBAAAAGwMAAGEgRGlzcGxheSBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCBhbiBlcnJvciB1bmV4cGVjdGVkbHkvcnVzdGMvNTVhMjJkMmE2MzMzNGUwZmFmZjAyMDJiNzJhMzFjZTgzMmI1NjEyNS9saWJyYXJ5L2FsbG9jL3NyYy9zdHJpbmcucnMAAL8bGABLAAAAbwoAAA4AAABABQAACAAAAAQAAABBBQAAQgUAAAQAAAAEAAAAQwUAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19mYXN0X3RzX3N0cmlwLTAuMTIuMC9zcmMvbGliLnJzAABEBQAACAAAAAQAAABFBQAARgUAAEcFAABIBQAASQUAAEoFAABLBQAATAUAAE0FAABOBQAATwUAAFAFAABRBQAAUgUAAGZhaWxlZCB0byBwYXJzZQDkHBgADwAAADwcGABiAAAAxAAAAEkAAAA8HBgAYgAAAAkBAAAVAAAAPBwYAGIAAADcAAAAJQAAADwcGABiAAAA6wAAACUAAAA8HBgAYgAAAO8AAAAlAAAAPBwYAGIAAADwAAAAJQAAADwcGABiAAAA9AAAACUAAAA8HBgAYgAAAPUAAAAlAAAAPBwYAGIAAAD2AAAAJQAAADwcGABiAAAA/AAAACUAAAA8HBgAYgAAAP4AAAAlAAAAPBwYAGIAAAD/AAAAJQAAADwcGABiAAAAAAEAACUAAAA8HBgAYgAAAEcBAAAwAAAAZ2VuZXJhdGVkIGNvZGUgd2FzIG5vdCB1dGYtOGZhaWxlZCB0byB3cml0ZSBzb3VyY2UgbWFwc291cmNlIG1hcCB3YXMgbm90IHV0ZjgAAAA8HBgAYgAAAIABAAASAAAAPBwYAGIAAACMAQAAFQAAADwcGABiAAAAmAEAABUAAAA8HBgAYgAAAKYBAAAZAAAAPBwYAGIAAACyAQAAGQAAAAAAAAAPAEGYveAAC3GAHhgAPBwYAGIAAADWAQAAGQAAADwcGABiAAAA4AEAAEAAAAA8HBgAYgAAAOQBAAAkAAAAb3ZlcnJpZGXMHhgACAAAADwcGABiAAAAGgIAADwAAAA8HBgAYgAAAE8CAAAYAAAAc3RhdGljAAAAAAAAEABBoL7gAAvhJHRoaXM8HBgAYgAAAFEEAAAkAAAAc3RydWN0IE9wdGlvbnN2YXJpYW50IGlkZW50aWZpZXJlbnVtIE1vZGVldmFsL3J1c3RjLzU1YTIyZDJhNjMzMzRlMGZhZmYwMjAyYjcyYTMxY2U4MzJiNTYxMjUvbGlicmFyeS9jb3JlL3NyYy9zbGljZS9zb3J0L3N0YWJsZS9xdWlja3NvcnQucnNtaWQgPiBsZW4AAADAHxgACQAAAGEfGABfAAAATAAAAB8AAABhHxgAXwAAAEYAAAAXAAAASGFzaCB0YWJsZSBjYXBhY2l0eSBvdmVyZmxvd/QfGAAcAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvaGFzaGJyb3duLTAuMTQuNS9zcmMvcmF3L21vZC5ycwAAGCAYAF4AAABWAAAAKAAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3JlZ2V4LWF1dG9tYXRhLTAuNC43L3NyYy91dGlsL3Bvb2wucnOIIBgAZAAAAD0CAAAcAAAAaW50ZXJuYWwgZXJyb3I6IGVudGVyZWQgdW5yZWFjaGFibGUgY29kZTogTW9kdWxlIGlzIGhhbmRsZWQgYWJvdmUAAAD8IBgAQQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19lY21hX3BhcnNlci0wLjE1Mi4yL3NyYy9wYXJzZXIvbW9kLnJzSCEYAGgAAACwAAAAMgAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19lY21hX3BhcnNlci0wLjE1Mi4yL3NyYy9wYXJzZXIvcGF0LnJzwCEYAGgAAACaAgAAKgAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19lY21hX3BhcnNlci0wLjE1Mi4yL3NyYy9wYXJzZXIvZXhwci5ycwAAADgiGABpAAAApwMAABoAAABTBQAAVAUAAFUFAABWBQAAVwUAAFgFAABZBQAAWgUAAFsFAABcBQAAY2Fubm90IGFjY2VzcyBhIHNjb3BlZCB0aHJlYWQgbG9jYWwgdmFyaWFibGUgd2l0aG91dCBjYWxsaW5nIGBzZXRgIGZpcnN0L3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc2NvcGVkLXRscy0xLjAuMS9zcmMvbGliLnJzAAAkIxgAWgAAAKgAAAAJAAAAaW50ZXJuYWwgZXJyb3I6IGVudGVyZWQgdW5yZWFjaGFibGUgY29kZTogIGlzIGFscmVhZHkgcmVuYW1lZCB0byAsIGJ1dCBpdCdzIHJlbmFtZWQgYXMgAJAjGAAqAAAAuiMYABcAAADRIxgAFgAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19lY21hX3RyYW5zZm9ybXNfYmFzZS0wLjE1MC4xL3NyYy9yZW5hbWUvbW9kLnJzAAAAACQYAHEAAADMAAAAGQAAAEQFAAAIAAAABAAAAEUFAABGBQAARwUAAEgFAABJBQAASgUAAEsFAABMBQAATQUAAE4FAABPBQAAUAUAAFEFAABSBQAAVHlwZVNjcmlwdCBleHBvcnQgYXNzaWdubWVudCBpcyBub3Qgc3VwcG9ydGVkIGluIHN0cmlwLW9ubHkgbW9kZVR5cGVTY3JpcHQgaW1wb3J0IGVxdWFscyBkZWNsYXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIHN0cmlwLW9ubHkgbW9kZVR5cGVTY3JpcHQgZW51bSBpcyBub3Qgc3VwcG9ydGVkIGluIHN0cmlwLW9ubHkgbW9kZVR5cGVTY3JpcHQgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaW4gc3RyaXAtb25seSBtb2RlVHlwZVNjcmlwdCBwYXJhbWV0ZXIgcHJvcGVydHkgaXMgbm90IHN1cHBvcnRlZCBpbiBzdHJpcC1vbmx5IG1vZGVUaGUgYW5nbGUtYnJhY2tldCBzeW50YXggZm9yIHR5cGUgYXNzZXJ0aW9ucywgYDxUPmV4cHJgLCBpcyBub3Qgc3VwcG9ydGVkIGluIHR5cGUgc3RyaXAgbW9kZS4gSW5zdGVhZCwgdXNlIHRoZSAnYXMnIHN5bnRheDogYGV4cHIgYXMgVGAuZGVzY3JpcHRpb24oKSBpcyBkZXByZWNhdGVkOyB1c2UgRGlzcGxheV0FAAAMAAAABAAAAF4FAABdBQAADAAAAAQAAACrAgAAXgUAALgmGAAeAwAAXwUAALoCAABgBQAARQAAAElvVXRmOEJhZEpzb25WbHFMZWZ0b3ZlclZscU5vVmFsdWVzVmxxT3ZlcmZsb3dCYWRTZWdtZW50U2l6ZUJhZFNvdXJjZVJlZmVyZW5jZUJhZE5hbWVSZWZlcmVuY2VJbmNvbXBhdGlibGVTb3VyY2VNYXBJbnZhbGlkRGF0YVVybENhbm5vdEZsYXR0ZW5JbnZhbGlkUmFtQnVuZGxlTWFnaWNJbnZhbGlkUmFtQnVuZGxlSW5kZXhJbnZhbGlkUmFtQnVuZGxlRW50cnlOb3RBUmFtQnVuZGxlSW52YWxpZFJhbmdlTWFwcGluZ0luZGV4SW52YWxpZEJhc2U2NABABQAACAAAAAQAAABhBQAAQAUAAAgAAAAEAAAAQQUAAGEFAAD0JxgAYgUAAGMFAABkBQAAZQUAAEUAAAAAAAAACAAAAAQAAABmBQAAAAAAAAgAAAAEAAAA2AIAAGYFAAAwKBgAHgMAAGcFAABoBQAAHgMAAEUAAABpBQAABAAAAAQAAABqBQAAaQUAAAQAAAAEAAAAawUAAGoFAABsKBgAbAUAAG0FAAC6AgAAbgUAAEUAAAAAAAAABAAAAAQAAAAtAAAAVXRmOEVycm9ydmFsaWRfdXBfdG9lcnJvcl9sZW5Gcm9tVXRmOEVycm9yYnl0ZXNlcnJvcmludmFsaWQgdXRmLTg6IGNvcnJ1cHQgY29udGVudHNpbnZhbGlkIHV0Zi04bwUAABQAAAAEAAAAcAUAAG8FAAAUAAAABAAAAHEFAABwBQAAGCkYAHIFAABzBQAAugIAAHIFAABFAAAAdAUAABwAAAAEAAAAdQUAAHQFAAAcAAAABAAAAHYFAAB1BQAAVCkYAHcFAAB4BQAAugIAAHcFAABFAAAAeQUAADgAAAAEAAAAvgIAAHkFAAA4AAAABAAAAL8CAAC+AgAAkCkYAMACAAB6BQAAwgIAAMACAADDAgAAewUAADAAAAAEAAAAvgIAAHsFAAAwAAAABAAAAL8CAAC+AgAAzCkYAMACAAB8BQAAwgIAAMACAADDAgAARXJyb3Jjb250ZXh0c291cmNlAABFAwAAFAAAAAQAAAB9BQAARQMAABQAAAAEAAAArAIAAH0FAAAcKhgAHgMAAH4FAAB/BQAAHgMAAEUAAABUb2tlbkFuZFNwYW50b2tlbmhhZF9saW5lX2JyZWFrc3BhbgAAAAAADAAAAAQAAACABQAAgQUAAC9ydXN0Yy81NWEyMmQyYTYzMzM0ZTBmYWZmMDIwMmI3MmEzMWNlODMyYjU2MTI1L2xpYnJhcnkvY29yZS9zcmMvc2xpY2Uvc29ydC9zdGFibGUvZHJpZnQucnMAkCoYAFsAAAD/AAAAGQAAAJAqGABbAAAA8gAAABIAAACQKhgAWwAAAM4AAAAkAAAAkCoYAFsAAADRAAAAJAAAAJAqGABbAAAAQAAAACIAAAAgICAgL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc3djX2VjbWFfcGFyc2VyLTAuMTUyLjIvc3JjL3BhcnNlci9pbnB1dC5ycwAAQCsYAGoAAADHAAAAKwAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N3Y19lY21hX3BhcnNlci0wLjE1Mi4yL3NyYy9sZXhlci9zdGF0ZS5ycwAAALwrGABpAAAAfwAAAC4AAAC8KxgAaQAAAIAAAAA4AAAAvCsYAGkAAACBAAAAGQAAADxlb2Y+UmVmQ2VsbHZhbHVlPGJvcnJvd2VkPgBpLBgACgAAAC9ydXN0Yy81NWEyMmQyYTYzMzM0ZTBmYWZmMDIwMmI3MmEzMWNlODMyYjU2MTI1L2xpYnJhcnkvYWxsb2Mvc3JjL3ZlYy9tb2QucnN8LBgATAAAAJUHAAANAAAAfC0YAFoAAAArAQAAKQAAAHwtGABaAAAAOgEAACUAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi91bmljb2RlLXdpZHRoLTAuMS4xMy9zcmMvdGFibGVzLnJzAAAA+CwYAGEAAAAnAAAAGQAAAPgsGABhAAAALQAAAB0AAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi90ZXh0d3JhcC0wLjE2LjEvc3JjL2NvcmUucnMAAHwtGABaAAAADAEAAB4AAAB0NRgAZAAAAMEAAAAoAAAAdDUYAGQAAADDAAAAJQAAAHQ1GABkAAAAxAAAAC8AAAAtAAAAdDUYAGQAAADOAAAAJQAAAHQ1GABkAAAAzwAAAC8AAAAAAAAAHAAAAAQAAACCBQAAgwUAAIQFAACFBQAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvdGV4dHdyYXAtMC4xNi4xL3NyYy93b3JkX3NlcGFyYXRvcnMucnMAAABYLhgAZQAAANwAAAAoAAAAWC4YAGUAAADSAAAALAAAAIYFAAAsAAAABAAAAIcFAACDBQAAiAUAAIkFAABYLhgAZQAAABYBAAAcAAAAWC4YAGUAAAA1AQAAKAAAAFguGABlAAAALgEAACwAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9zbWF3ay0wLjMuMi9zcmMvbGliLnJzAAAALC8YAFUAAAAeAQAAGwAAACwvGABVAAAAIgEAABQAAAAsLxgAVQAAACIBAAANAAAALC8YAFUAAAAgAQAAEQAAACwvGABVAAAALAEAAAkAAAAsLxgAVQAAACcBAAAXAAAALC8YAFUAAAAIAQAAHAAAACwvGABVAAAACAEAAC8AAAAoaSwgaikgbm90IGFib3ZlIGRpYWdvbmFsOiAoLCAAAAQwGAAcAAAAIDAYAAIAAADwzBgAAQAAACwvGABVAAAAhgEAABQAAAAoaSwgaikgb3V0IG9mIGJvdW5kczogKCksIHNpemU6IEwwGAAXAAAAIDAYAAIAAABjMBgACQAAACwvGABVAAAAhwEAABkAAAAsLxgAVQAAAJIBAAAMAAAALC8YAFUAAACSAQAAKgAAACwvGABVAAAAiAEAABMAAAAsLxgAVQAAAHUBAAAhAAAALC8YAFUAAAB2AQAAGQAAACwvGABVAAAAeQEAACUAAAAsLxgAVQAAAHoBAAAbAAAALC8YAFUAAABzAQAAIQAAAIg2GABxAAAASwEAACAAAACINhgAcQAAAEsBAAAsAAAAiDYYAHEAAABLAQAAMgAAAIg2GABxAAAAUwEAABgAAAATNRgATwAAAMgFAAAUAAAAEzUYAE8AAADIBQAAIQAAABM1GABPAAAAvAUAACEAQYzj4AALlQUBAAAAigUAAGNhbGxlZCBgUmVzdWx0Ojp1bndyYXAoKWAgb24gYW4gYEVycmAgdmFsdWUAEzUYAE8AAABMBAAAJAAAANwyGABlAAAAuQAAAEYAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi90ZXh0d3JhcC0wLjE2LjEvc3JjL3dyYXAucnMAAOAxGABaAAAAFwEAABgAAABPdmVyZmxvd0Vycm9yaW50ZXJuYWwgZXJyb3I6IGVudGVyZWQgdW5yZWFjaGFibGUgY29kZS9ydXN0Yy81NWEyMmQyYTYzMzM0ZTBmYWZmMDIwMmI3MmEzMWNlODMyYjU2MTI1L2xpYnJhcnkvYWxsb2Mvc3JjL2JvcnJvdy5yc4EyGABLAAAAFwEAACUAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi90ZXh0d3JhcC0wLjE2LjEvc3JjL3dyYXBfYWxnb3JpdGhtcy5ycwAAANwyGABlAAAAcQEAABoAAADcMhgAZQAAAGsBAAAiAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvdW5pY29kZS1saW5lYnJlYWstMC4xLjUvc3JjL2xpYi5ycwAAAGQzGABhAAAAYQAAABcAAABkMxgAYQAAADUAAAAYAAAAZDMYAGEAAAA5AAAAGgAAAGQzGABhAAAAPgAAAAUAAABOb25lU29tZQ0KCgICAgICAgICAgMDAQEBAEGz6OAACxABAAAAAAAAAAICAAAAAAACAEHy6OAACwECAEGY6eAACwEBAEGz6eAACwEBAEGT6uAAC9EHL3J1c3RjLzU1YTIyZDJhNjMzMzRlMGZhZmYwMjAyYjcyYTMxY2U4MzJiNTYxMjUvbGlicmFyeS9jb3JlL3NyYy9zdHIvcGF0dGVybi5ycwAAEzUYAE8AAAC+AQAANwAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3RleHR3cmFwLTAuMTYuMS9zcmMvd29yZF9zcGxpdHRlcnMucnN0NRgAZAAAAJkAAAAkAAAAdDUYAGQAAACaAAAAJAAAAC9ydXN0Yy81NWEyMmQyYTYzMzM0ZTBmYWZmMDIwMmI3MmEzMWNlODMyYjU2MTI1L2xpYnJhcnkvY29yZS9zcmMvc2xpY2UvbW9kLnJzAAAA+DUYAE0AAADhAwAAIQAAAPg1GABNAAAA4QMAAC4AAAD4NRgATQAAAOUDAAAgAAAA+DUYAE0AAADlAwAAKwAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3RleHR3cmFwLTAuMTYuMS9zcmMvd3JhcF9hbGdvcml0aG1zL29wdGltYWxfZml0LnJzAAAAiDYYAHEAAACuAAAAIQAAAIg2GABxAAAAtAAAABsAAACINhgAcQAAALQAAAAjAAAAiDYYAHEAAACvAAAAKQAAAIg2GABxAAAAsAAAACwAAACINhgAcQAAALEAAAAfAAAAiDYYAHEAAAB7AQAAGgAAAIg2GABxAAAAfAEAAB4AAAAvcnVzdGMvNTVhMjJkMmE2MzMzNGUwZmFmZjAyMDJiNzJhMzFjZTgzMmI1NjEyNS9saWJyYXJ5L2FsbG9jL3NyYy9zeW5jLnJzAAAAAQAAAAAAAABMYXp5IGluc3RhbmNlIGhhcyBwcmV2aW91c2x5IGJlZW4gcG9pc29uZWQAANA3GAAqAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvb25jZV9jZWxsLTEuMTkuMC9zcmMvbGliLnJzAAAEOBgAWgAAAB8FAAAZAAAA/////wAAAAAECw8TFxsfIyctMTQ4PEACRQAAAAAASQBNAAUFBQUFBQUFBQUFBQYFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFUVRYXAUFBQUFBQUFBQUFBQUFBQUFBQUFBQkAQfTx4AALKAFgKGRobHArdHZ6foKGio6SlpygBTKkAAAAAJcFBaYAAAAAAAAABawAQazy4AALEwWvALMFBQUFBQUFBQUFBUMFBbcAQc/y4AALCJpSuQAAAAC8AEHi8uAAC5oCxMYAAACtzNDUutgAANwAAAAAAAAAAAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3gUFBQUFBQXf4QUFBQUFBQUFBQXkBQUFBQUFBQUFBQUFBeIF5wAAAAAF6QAABQUFBQUFBQUF5QUFBQUFBQXrAAAAAAAACA0RFRkdISUqLzE2Oj5CAkcAAAAAAEsATwAFBQUFBQUFBQUFBQUGBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVFWWl4FBQUFBQUFBQUFBQUFBQUFBQUFBQUJAEGM9eAACygBYihmam5yK3R4fICEiIyQlJmeogUypAAAAACXBQWpAAAAAAAAAAWsAEHE9eAACxMFsQC1BQUFBQUFBQUFBQVDBQW3AEHn9eAAC7sBmlK5AAAAAL8AAAAAAAAAAKeqwsTIAMoArc7S1rraAADcAAAAAAC9AAAFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBd4FBQUFBQUF3+EFBQUFBQUFBQUF5AUFBQUFBQUFBQUFBQXiBecAAAAABekAAAUFBQUFBQUFBeUFBQUFBQUF6wBBkILhAAsBwABBgIPhAAtA/////////////////////////////////////////////z8//////z8//6r///8/////////31/cH88P/x/cHwBB1YPhAAtjBCAE//9/////f///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AEHVhOEAC2kEoAT//3////9///////////////////////////////////////////////////////////////////////8PAP//f/j//////w/////////////////////////////////D/wMAH1AAQc6F4QALhAbfvEDX///7////////////v//////////////////////////////////D/wMAH1AAAP//////////////////37zA1///+////////////7///////////////////////wP8///////////////////////////+////fwL//////wEAAAAAAAAAAP///4cHAP/////////////////////7/P///////////////////////////v///38C//////8B/v////+/tgD///+HBwAAAAAA//////8HAAAAwP7//////////////y8AYMAAnAAA/f///wAAAOD/////////////PwACAAD8////BzAEAAD/B////////////8P////////////////vn//9/58AAP/////////n////////////////AwD///////8/JP//PwQQAQAA////Af8H////fgAA//////8DAAAAAAAA8P///////yMAAAH/AwD+/+Gf+f///cUjAEAAsAMAAxD//////z8AAP///w//B////34A////////////+////////////////////8///v/vn/n///3F8595gLDP/wNQ4If5///9bQMAAABeAAAcAOC/+////e0jAAABAAMAAALgn/n///3tIwAAALADAAIA6Mc91hjH/wMAAAEAAAAAAO6H+f///W3ThzkCXsD/PwDuv/v///3t8787AQDP/wD+7p/5///97fOfOeCwz/8CAOzHPdYYx//Dxz2BAMD/AADg3/3///3/IwAAACcDAAAA4d/9///97yMAAABgAwAGAPDf/f////8nAEBwgAMAAPzg/3/8///7L38AAAAAAAAA/9/9///9//PfPWAnz/8AAO/f/f///e/z3z1gYM//DgD/3/3//////9998IDP/wD87v9//P//+y9/hF//wP8MAP7//////w0AfwAAAAAAAADW9///r/8NIF8AAPAAAAAAAQAAAAAAAAD//v///x8AAAAfAEHgi+EAC9QD/v///////wf/f/8DAAAAANb3//+v//8/X3//8wAAAAABAAAD/wOgwv/+////H/7/3////v///x9AAAAAAAAAAP//////BwCAAAA/PGLA4f8DQAAA/////78g///////3////////////////////////////////////////////////////PwAA///////////8////////AAAAAAD/D////////////wP///////////8//////78g///////3//////////////////////////////////////////////////9/AP//PwD/AAAAv////////QcAAAAAAAAAAP///////////z1/Pf//////Pf////89fz3/f/////////89//////////8HAAAAAP//AAD/////////////Pz////////////89fz3//////z3/////PX89/3//////////Pf//////////5wD+AwD//wAA/////////////z8//v////////////////////////////////////////////////////////////////////////////////////////////////////////////8DAEHAj+EAC4sC/////////////////5////7//wf////////////H/wH//wOA//8DAP//AwD/3wEA////////DwAAAIAQAAAAAP////////////////+f///+//8H////////////x/8B//8/gP//HwD//w8A/98NAP////////////+PMP8DAAAAAAAA//////////////8B//////8F//////////8/AP///38AAAAAAAD///8/HwD//////w////8DAAAAAAAAALj/A///////////////Af//////B///////////PwD///9//w//D8D/////Px8A//////8P////A/8HAAAAAP//fwD///////8fAEHUkeEACwGAAEHgkeEAC/8B4P//////DwDgHwAAAAAAAPj///8BwAD8/////z8AAAD///8P/////////3////+f/wP/A4AA/7//fwAAAAAAAP///////////x//AwD4DwD//////////////////w8A/////w8AAAAA4AD8////P/8B///////nAAAAAADebwT///////////////////////////////8AAAAAAAAAAP////////8A/+P//////z//Af//////5wAA9/////8H////////////////////////////////////////////////////////////////////////////////////AEHuk+EACwYCgAAA/x8AQYCU4QALEoT8Lz9Q/f/z4EMAAP//////AQBBoZThAAsxMAAAAAAAgAEAEAAAAAKAAAD/HwAAAAAAAP8f4v8BAIT8Lz9Q/f/z4EMAAP//////AQBB4JThAAvgBv////////////////////////////////////8feAwA/////78g/////////4AAAP//fwB/f39/f39/fwAAAAD/////////////////////////////////////H/gPAP////+/IP////////+AAID//38Af39/f39/f3//////4AAAAP4DPh/+////////////f/j+//////////////fg///////+/////////////38AAP////8AAAAAAAD//+AAAAD+/z4f/v///////////3/+/v/////////////34P///////v////////////9/AAD/////AAAAAAAA/////////////////////////x8AAAAAAAAAAP//////P////////////////////////////////////////////////wcABAAAACcA8AD/////////////////////////H///AAwAAP//////fwCA////P/////////////8AAAAAgP/8////////////////+f////////8H6wMAAPz//x////8PAAD////////wv///////////////////AwAAAID//P////////////////n/////////B+sDAAD8/7v3//8HAAAA////////DwD8//////8PAAAAAAAAAPxoAPz//z8A//9/AAAA////H/D//////wcAAIAAAN//AHz//////xAAAP///////w8A//////////8/AP8D////6P//////P/////8PAP///x///////////wGA/wP///9///////8BAAD3DwAA//9/xP///////2I+BQAAOP8HHAB+fn4Af3////////f/A///////////////////BwAAAP///////38A/z//A///f/z//////////wcAADj//3wAfn5+AH9////////3/wP///////////////////83/wP/////////////////P/////////////////8DAAAAAH8A+KD//X9f2/////////////////8DAAAA+P///////////////////////z//////////////////AwAAAAB/APjg//1/X9v/////////////////AwAAAPj//////wBBzpvhAAuhAd//////////////////////HwAAAAD+//8H/v//B8D/////////////f/z8/BwAAAAA//8AAP//GAAA4AAAAADf/////////////////////x8AAP8D/v//h/7//wfA/////////////3/8/PwcAAAAAP/v//9///+3/z//PwAAAAD///////////////////8HAAAAAAAAAAD///////8fAEGAneEACy//7///f///t/8//z8AAAAA////////////////////BwAAAAAAAAAA////////HwBBv53hAAsBIABB0J3hAAsr////H////////wEAAAAAAP////8A4P///wf/////PwD///8//////w//PgBBkJ7hAAujAv///x////////8BAAEAAAD/////AOD///8H//////8H////P/////8P/z4AAAAAAP////////////////////////8/AAD/////D/////8P//////8A////////DwD/9//3t//7//sbAAAAAAAAAAD/////////////////////////P/8D/////w//////D///////AP///////w8A//f/97f/+//7GwAAAAAAAAAAP/3/////v5H//z8A//9/AP///38AAAAAAAAAAP//NwD//z8A////AwAAAAAAAAAA/////////8AAAAAAAAAAAAEA7/7//z8AAAAAAP///x////8fAAAAAP/+//8fAAAA////////PwD//z8A//8HAP//AwBBwKDhAAszb/Dv/v//P4cAAAAA////H////x8AAAAA//7//38AAAD///////8/AP//PwD//wcA//8DAEGAoeEACyX///////////8BAAAAAAAA////////BwD///////8HAP////8PAEHAoeEACyj///////////8BAAAAAAAA////////BwD///////8HAP//////AP8DAEGQouEACwf//////wMDAEGgouEACx////8fgAD//z8AAAAAAP//AwAAAAAA//8fAAAA//9/AEHQouEAC90B//////8bAwAAAAAAAAAA4P///x+AAP////8BAAAA//8/AAAAAAD//x8AAAD//38A+P///////wAAAAAAAAAmAPj//////wAAAAD///8BAAD4////fwAAAJAA/////0cA+P//////BwAeAAAUAAAAAP//////////fwAAAMD/P4D/////////BwQA////Af8D////////3//wAP////9PAP//////////H97/FwAAAAD///v//w8AgAEAAAAAAAAAf73/v/8B//////9/AAAAAOCf+f///e0jAAAB4AMAQcCk4QALL///+//////AAwAAAAAAAAB/vf+//wH/////////B/8D75/5///97fufOYHgzx8fAEGApeEACxn///////8fAIAHAIADAAAA////////AACwAEGwpeEACyz//////38AAAAAAA8AAAAA////////////B//DAwAAAP//////////vwD/AwBB8KXhAAs5////////P/8BAAA/AAAAAP///////wAAEAAAAAAAAAD//////wcAAQAAAAAAAAAA////BwAAAAB/AEHApuEACyn//////////xEA/wMAAAAA/////////wH/AwAAAAAAAP///+f/D/8DfwBBgKfhAAsG//////8PAEGUp+EACxX//////////wAAAIB/8m////8AgAIAQbSn4QALFP/8/////wEACgAAAP////////8HAEHUp+EAC0z///////////8DAIB/8m////+/+Q8A/wMAAAAAAAAAAP/8///////8GwAAAAH4/////wcEAAAB8P//////AwAgAAD///////////8BAEHSqOEACy7///////////////8BAP////////9/gAD///////////8jAAD///////////8BAEG+qeEACxTvb//9////fwAAAQAAAAAA/P///wBB4KnhAAsUf/v/////AQBAAAAAv/3///8DAAEAQYCq4QALF//9/////3//AQD/AwAA/P////z///5/AEGgquEACxZ/+/////9/tP8A/wO//f///3/7Af8DAEHcquEACwv//wcA9P/9////DwBB9qrhAAsBAQBBnKvhAAsQ//9/AP///f/////HBwD/AwBBtqvhAAsBAQBBwKvhAAsp/////////////////38AAP///////////////////////////////w8AQYCs4QALCf///////wAAfgBBwKzhAAsJ//////8///9/AEHgrOEACwv///////8AAP//PwBBrK3hAAsK4OMH+OcPAAAAPABBwK3hAAsJ//////////9/AEGAruEACwb///9/4AcAQaCu4QALMv////////8B////fwAA////////////fwAA////PwAA////////AAAPAAAA+P//4P//AEHgruEACzL/////////Af///3//A////////////3//A////z8fAP///////38ADwD/A/j//+D//wBBqK/hAAsI//////////8AQcCv4QALHf///////////wcBAAAAAAAAAPj/AAAAAAAAAAALAEHor+EACwj//////////wBBgLDhAAtC////////////h/////////+A//8AAAAAAAAAABsAAwD//////////////////////////////////z8AAAAAAP8BAEHgsOEACyD/////////////////////////////////////////DwBBvLHhAAsYf2//f/////////////////8H/x//Af8DAEGesuEACxb/A/////////////////8H/x//Af9jAEHgsuEACx7///////////////////////////////////////8AQYiz4QALARwAQcCz4QAL1gH/////////////3///////////32Te/+vv/////////7/n39////97X/z9//////////////////////////////////////////////////////8//////f//9/////f//9/////f//9/////f/////3////9///3DwAAAAAAAP//////////////////////////P/////3///f////3///f////3///f////3/////9/////f//98////////////////9/+P//////HyAAEAAA+P7/AEHGteEACwj/////////PwBB4LXhAAsK//////8fgD8AQABBgLbhAAsSf///+dsH/////////z8AAACAAEGgtuEACwr//////x//P/9DAEHStuEACwz///8/AAD//////w8AQZK34QALDv///38AAP////////8DAEHat+EACwT///8PAEGauOEACwb//////wMAQcC44QALKv///////////////////////////////x8AAAAAAAAA//////////8PCABBgLnhAAss////////////////////////////////HwB/AAAAAAD///////////8P/wMAQcC54QALGO////+W/vcKhOqWqpb3917/+/8P7vv/DwBBgLrhAAusAv////////////////////////////////////8AAAAA////////////////////////////////////////////////////A////////////////////////////////////z//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AQD/////////////////////////////AwD///////////////////////////////////////////////////////////////////8H////////////////////////////////////////////PwBB4LzhAAsE////PwBBoL3hAAs2////////////////////////////////////////////////////////////////////////AEGCvuEAC5akAUAAfwC/APcA9wD3APcA9wD3APcAMAFwAaEB4QH3APcA9wAeAvcALgJfApYC1gIWA0sD9wB8A7YD6wMFBEUEhQTFBPYELAVoBaYF5QUjBmIGoAbfBh0HXQebB9kHFwhXCJUI1AgSCVIJkAnQCRAKTwqPCs4KDgtOC44LyAsIDEgMiAy4DPIMMg1SDXINmg33ANoNEQ5PDn4Oow7GDuYOJg/3APcA9wD3APcA9wD3APcA9wBmD4YPxg8GEEgMRhCGEKYQ5hAWEVYRlhHWEQwSNRJWEpYSxxIHE0ITghO8E/gTOBR4FLUU9wD3APcA9RT3APcA9wD3ADUVbxUpAq8V7xUtFm0WqxbrFhcXURd/F78X/Rc7GHsYsxj3APcA3hgSGVIZchlzGXIZphnmGSIaYhqiGuIaHxtcG4Ubuxv2G/cA9wD3APcA9wD3ADMcWxz3APcA9wD3APcAmRzPHPcA9wD3APcA5hwmHVYdlh22HfYdNh52HpEe0R7RHtEe+x47H3sfuB/1HzUg0R6BHmYgRiCmINEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe9wDRHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEg0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHgQhPSH3APcA9wD3AH0hvSH7IRsi9wD3APcAWyKZItkiGSNTI5MjzCMMJEskiyTLJEgMCCVHJXcl9wCnJecl7yX3Jf8l6yXzJfsl5yXvJfcl/yXrJfMl+yXnJe8l9yX/Jesl8yX7Jecl7yX3Jf8l6yXzJfsl5yXvJfcl/yXrJfMl+yXnJe8l9yX/Jesl8yX7Jecl7yX3Jf8l6yXzJfsl5yXvJfcl/yXrJfMl+yXnJe8l9yX/Jesl8yX7Jecl7yX3Jf8l6yXzJfsl5yXvJfcl/yXrJfMl+yXnJe8l9yX/Jesl8yX7Jecl7yX3Jf8l6yXzJfsl5yXvJfcl/yXrJfMl+yXnJe8l9yX/Jesl8yX7Jecl7yX3Jf8l6yXzJfsl5yXvJfcl/yXrJfMl+yXnJe8l9yX/Jesl8yX7Jecl7yX3Jf8l6yXzJfsl5yXvJfcl/yXrJfMl+yXnJe8l9yX/Jesl8yX7Jecl7yX3Jf8l6yXzJfsl5yXvJfcl/yXrJfMl+yXnJe8l9yX/Jesl8yX7Jecl7yX3Jf8l6yXzJTMmbCasJqwmrCasJqwmrCasJqwmrCasJqwmrCasJqwmrCasJqwmrCasJqwmrCasJqwmrCasJqwmrCasJqwmrCasJqwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbRHtEe0R7RHtEe0R7RHtEeLCdsJ/cAqSf3APcA9wD3ALwn9wD8JzQodCiwKPcA5igmKWQplSnUKWAKfgqbCroK2graCtoK2wraCtoK2grbCvsK+wr7CvsK+wr7CvsK+wr7CvsK+wr7CvsK+wr7CvsK+wr7CvsK+wr7CvsK+wr7CvsK+wr7CvsK+wr7CvsK+wr7CvsK+wr7CvsK+wr7CvsKGwv3AfcA/AEUKmgCaALsJuwm9wD3APcA9wD3APcA9wDlBCQq9wD3AOMJ9wD3APcA9wD0AdoJLQfsJuwm9wD3ACsq7CbsJuwm7CbsJuwm7CbsJvcA2gn3APcA9wAtBycCBwj3APcAqR33AOUE9wD3ADsq9wBLKvcA9wCfJVoq7CbsJvcA9wD3APcA9wD3APcA9wD3AGgCuwj3APcAnyX3AAcI9wD3AMsH9wD3APcAXCr4AfgBayoBAnkq7CbsJuwm7Cb3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3AEUR9wBGEcsH7Cb9AfcA9wCJKuwm7CbsJuwmmSr3APcAoyr3ALIq9wD3APcA9AEPA+wm7CbsJvcAvyr3AMoq9wDmBOwm7CbsJuwm9wD3APcAmyX3AHYC9wD3ANoq6Qb3AOoqtg/6KvcA9wD3APcA7CbsJvcA9wAKKxor9wD3APcAKiv3AHAC9wDtBPcAOisNA+wm7CbsJuwm7Cb3APcA9wD3ALYP7CbsJuwm9wD3APcANhn3APcA9wC8D/cA9wDUD7sI7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm9wD0AfcA9wBKKzcZ7CbsJuwm+hL3APcAywf3AGoBWivsJvcAaivsJuwm9wAHCOwm9wBFESUC9wD3AGgBeit2AmgLiislAvcA9wCZK6cr9wC2D7sIJQL3AGkBtyvHK/cA9wDXKyUC9wD3AG0B5yv3K+4BNBn3AAECZAEHLBYs7CbsJuwmJiz1ATUs9wD3AGEByxK7CEUsdQL6AVQsmwdkLHIs0RLsJuwm7CbsJuwm7CbsJuwm9wD3APcAawGCLJIsNxnsJvcA9wD3AHABoiy7COwm7CbsJuwm7CbsJuwm7CbsJuwm9wD3AGEBsizBLMos7CbsJvcA9wD3AHAB2iy7COos7Cb3APcAZQH6LLsI7CbsJuwmSAwBC34KCi0EJewm7CbsJuwm7CbsJuwm7CbsJuwm7Cb3APcAZAErBOwm7CbsJuwm7CbsJvcA9wD3APcArAMwJxotJi33ADYtRC27COwm7CbsJuwmbgL3APcAVC1jLewm8CH3APcAcy2DLZMt9wD3AGYBoy2yLfcA9wD3APcAtg/CLewm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJvoB9wBhAdkL0i2sA9oJ4i33AL0L2AvPEuwm7CbsJuwmCQf3APcA8S0ALrsIEC73AEISIC67COwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7Cb3ADAuQC7tAfcATC5aLrsI7CbsJuwm7CbsJi0H9wBqLnkuhy73APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA1g7sJuwm7CbsJuwm7Cb3APcA9wD3APcA9wD0AZYu9wD3APcA9wD3APcA9wD3APcA9wD3APcANRnsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJvcA9wD3APcA9wD3ADYZ9wD3APcA9wD3AKYu9wD3ALQu9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3AL4u9wD3APcA9wD3APcA9wD3AM4u3i7QEuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7Cb3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3AHMP9wD3APcA9wBFEewm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJvcA9wD3ALYP9wD0Ae4u9wD3APcA9wD0AbsI9wBoAv4u9wD3APcADi8aLyovAQLoBPcA7CbsJuwm7CbsJuwm7Cb3APcA9wD3APcANS/sJuwm7CbsJuwm7Cb3APcA9wD3AAgIbwFwAXABRS8lAuwm7CbsJuwmVS/UEtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEevR7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHvcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcARhHsJuwmvB7sJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJocG0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEeDh9jL+wmcy9/L9Ee0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHrke7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7Cb3APcA9wD3APcA9wDlBNoJtg+PL9IS7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwmcAFwAegDcAHPEvcA9wD3APcA9wD3APcANRnsJuwm7Cb3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wBGEfcA9wBvAvcA9wD3AJ8vcAGsL/cAuC/3APcA9wDlBOwm9wD3APcA9wDGL+wm7CbsJuwm7CbsJuwm9wA1GfcANRn3APcA9wD3APcARRH3ALYP7CbsJuwm7CbsJuwm7CbsJvcA9wD3APcA9wD+AfcA9wD3APYB1C/iL/8B9wD3APcA3Q2GBvcAEA7vL+0B9wD3APcA9wD3APcA9wD3APcA9wBwAvcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD3APcA9wD5LwcwBzAHMHABcAFwAZgtcAFwAcQBFzAjMPwSpgLsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7Cb3APQBLzDsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJtkLPzBNMPcA9wD3AGgC7Cb4Euwm7CbsJuwm7CbsJuwm9wD3ANoJXTBbJOwm7CbsJuwm7CbsJuwm7CbsJuwm7Cb3AG0w7Cb3APcAZAF9MOwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm9wBkAbsI7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwmjTD0AfcA9wD3APcA9wD3APcA9wD3APcA9wD3AHECzxLsJuwm9wD3APcA9wCdMK0w7CbsJuwm7CbsJuwm7CbsJuwm7CbuAfcA9wBkKL0w7CbsJuwm7CbuAfcA9wBoAuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJv8B9wDMMNkw5zD3MAUxDTH5AQcIHDEHCOwm7CbsJjcZ7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbsJuwm7CbRHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHiwxchmkGXIZchlyGTwxchlyGXIZLDHRHtEe0R5JMU8x0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEeXzFlMdEebDF6MdEe0R6HMdEe0R7RHtEelzGmMbAxtzHGMdQx5DHyMdEe0R7RHtEeGBtjLgIyEBkVG9Ee0R4OMtEeHjLRHtEe0R4qMtEeNjLRHtEe0R7RHkEy9wD3AFEy0R7RHmExYTJnMtEe0R7RHvcA9wD3APcA9wD3APcAdzL3APcA9wD3APcAAjLRHtEeAhn3APcA9wAXGxUb9wD3ABcb9wAAGdEe0R7RHtEe0R6HMq4xzzGWMtEe0R7RHs4x0R7RHtEepTKpMbQy0R7RHvcA9wD3APcA9wB3MtEe0R7RHtEe0R7RHmIy0R7RHp4x9wD3APcA9wD3APcA9wD3APcAAAL3APcA5QTsJuwmuwjRHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHtEe0R7RHrceLQjsJnABcAFwAXABcAFwAewm7CbsJuwm7CbsJuwm7CZwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAHsJjUEVQR1BJUEtQTVBPUEDwUvBU8FbwWPBa8FzwXvBQoGKgYxBlEGgAOAA4ADgANmBioGhgajBoADgAOAA4ADgAPDBuAGgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAMqBgAHgAMcB8oAygDKAMoAygDKAMoAygA8B8oAXAdvB4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAegB7cHgAOAA4ADgAPXB4ADgAOAA4ADgAOAA4AD5wcHCCcIRwhdCCoGfQiAA40IrQjECNcI5wgHCYADIAlACWAJgAmgCcAJ4AkACsoAIArKAMoAygDKAMoAygDKAMoAygDKAMoAygDKAMoAygDKAMoAygDKAMoAygDKAMoAygDKAMoAygDKAMoAygDKAMoAIAqAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADQAoDAwMDAwMDAwMMAgAAAQMDAwMDAwMDAwMDAwMDAwMDAwkSFh0aGR0WFREdGhcOFxsYGBgYGBgYGBgYFxcdHR0SHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dFRoRHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0VDBAdAwMDAwMEAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMIFRkaGhodHBwdHBYdDB0dGRocHA0dHBwcHBwWHBwcFR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHB0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0cHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRwNHBwcDRwdHRwdHR0dHR0dHBwcHB0cHQ0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMIAwMDAwMDAwMDAwMDCAgICAgICAMDAwMDAwMDAwMDAwMdHR0dHR0dHSoqHR0dHRcdKioqKh0dHR0dHR0qHSodHR0dHR0dHR0dHR0dHR0dHR0dHSodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQMDAwMDAwMdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRcMKiodHRoqAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDDAMdAwMdAwMSAyoqKioqKioqIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjKioqKiMjIyMdHSoqKioqKioqKioqHR0dHR0dHR0dGRkZFxcdHQMDAwMDAwMDAwMDEgMSEhIdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQMDAwMDAwMDAwMDAwMDAwMDAwMDAxgYGBgYGBgYGBgZGBgdHR0DHR0dHR0dHR0dHR0dHR0dHR0dHR0SHQMDAwMDAwMdHQMDAwMDAx0dAwMdAwMDAx0dGBgYGBgYGBgYGB0dHR0dHR0dHR0dHR0dKh0dAx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQMDAwMDAwMDAwMDAwMDAwMqKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQMDAwMDAwMDAwMDHSoqKioqKioqKioqKioqGBgYGBgYGBgYGB0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQMDAwMDAwMDAx0dHR0XEh0qKgMaGh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0DAwMDHQMDAwMDAwMDAx0DAwMdAwMDAwMqKh0dHR0dHR0dHR0dHR0dHSodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAwMDKiodKh0dHR0dHR0dHR0dKioqKiodHR0dHR0dHR0dHR0dHR0dKh0dKioqKioqAwMDAwMDAwMdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAx0DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQMDAx0DAwMDAwMDAwMDAwMDAwMDHQMDAwMDAwMdHR0dHR0dHR0dAwMMDBgYGBgYGBgYGBgdHR0dHR0dHR0dHR0dHR0dAwMDKh0dHR0dHR0dKiodHSoqHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSodHR0dHR0dKh0qKiodHR0dKioDHQMDAwMDKioDAyoqAwMDHSoqKioqKioqAyoqKiodHSodHR0DAyoqGBgYGBgYGBgYGB0dGRkdHR0dHRkdGh0dAyoDAwMqHR0dHR0dKioqKh0dKiodHR0dHR0dHR0dHR0dHR0dHR0dHR0dKh0dHR0dHR0qHR0qHR0qHR0qKgMqAwMDKioqKgMDKioDAwMqKioDKioqKioqKh0dHR0qHSoqKioqKioYGBgYGBgYGBgYAwMdHR0DHSoqKioqKioqKgMDAyodHR0dHR0dHR0qHR0dKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qHR0dHR0dHSodHSodHR0dHSoqAx0DAwMDAwMqAwMDKgMDAyoqHSoqKioqKioqKioqKioqKh0dAwMqKhgYGBgYGBgYGBgdGioqKioqKiodAwMDAwMDKgMDAyodHR0dHR0dHSoqHR0qKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qHR0dHR0dHSodHSodHR0dHSoqAx0DAwMDAyoqAwMqKgMDAyoqKioqKioDAwMqKioqHR0qHR0dAwMqKhgYGBgYGBgYGBgdHR0dHR0dHSoqKioqKioqAx0qHR0dHR0dKioqHR0dKh0dHR0qKiodHSodKh0dKioqHR0qKiodHR0qKiodHR0dHR0dHR0dHR0qKioqAwMDKioqAwMDKgMDAwMqKh0qKioqKioDKioqKioqKioqKioqKioYGBgYGBgYGBgYHR0dHR0dHR0dGh0qKioqKgMDAwMDHR0dHR0dHR0qHR0dKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dKh0dHR0dHR0dHR0dHR0dHR0qKgMdAwMDAwMqAwMDKgMDAwMqKioqKioqAwMqHR0dKiodKiodHQMDKioYGBgYGBgYGBgYKioqKioqKg0dHR0dHR0dHQMDAw0dHR0dHR0dHSodHR0qHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qHR0dHR0dHR0dHSodHR0dHSoqAx0DAwMDAyoDAwMqAwMDAyoqKioqKioDAyoqKioqKh0dKh0dAwMqKhgYGBgYGBgYGBgqHR0DKioqKioqKioqKioqAwMDAx0dHR0dHR0dHSodHR0qHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0DAx0DAwMDAyoDAwMqAwMDAx0dKioqKh0dHQMdHR0dHR0dHR0dAwMqKhgYGBgYGBgYGBgdHR0dHR0dHR0ZHR0dHR0dKgMDAyodHR0dHR0dHR0dHR0dHR0dHR0qKiodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qHR0dHR0dHR0dKh0qKh0dHR0dHR0qKioDKioqKgMDAwMDAyoDKgMDAwMDAwMDKioqKioqGBgYGBgYGBgYGCoqAwMdKioqKioqKioqKiopKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKioqKhopKSkpKSkpKSkpKSkpKSkdGBgYGBgYGBgYGAwMKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKSkqKSopKSkpKSopKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkqKSopKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSoqKSkpKSkqKSopKSkpKSkpKhgYGBgYGBgYGBgqKikpKSkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKh0NDQ0NHQ0NCA0NDAgSEhISEggdEh0dHQMDHR0dHR0dGBgYGBgYGBgYGB0dHR0dHR0dHR0MAx0DHQMVEBUQAwMdHR0dHR0dHSodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qKioqAwMDAwMDAwMDAwMDAwMMAwMdHR0dHQMDAwMDAwMDAwMDKgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyoMDB0dHR0dHQMdHR0dHR0qHR0NDQwNHR0dHR0ICCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpGBgYGBgYGBgYGAwMHR0dHSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKRgYGBgYGBgYGBgpKSkpKSkdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSodKioqKiodKiodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0lJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJicnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycdHR0dHR0dHR0qHR0dHSoqHR0dHR0dHSodKh0dHR0qKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dKh0dHR0qKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSodHR0dKiodHR0dHR0dKh0dHR0qKh0dHR0dHR0dHR0dHR0dHSodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dKh0dHR0qKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qKgMDAx0MHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dKioqKioqHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dKiodHR0dHR0qKgwdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0MHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0VECoqKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0MDAwdHR0dHR0dHR0dHSoqKioqKiodHR0dHR0dHR0dHR0dHR0dHR0DAwMDKioqKioqKioqHR0dHR0dHR0dHR0dHR0dHR0dHQMDAwwMKioqKioqKioqHR0dHR0dHR0dHR0dHR0dHR0dAwMqKioqKioqKioqKiodHR0dHR0dHR0dHR0dKh0dHSoDAyoqKioqKioqKioqKikpKSkpKSkpKSkpKSkpKSkpKSkpDAwUKQwdDBopKSoqGBgYGBgYGBgYGCoqKioqKh0dHR0dHR0dHR0qKioqKiodHRISDAwNHRISHQMDAwgDGBgYGBgYGBgYGCoqKioqKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSoqKioqKiodHR0dHQMDHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQMdKioqKiodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qKioqKioqKioqHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSoDAwMDAwMDAwMDAwMqKioqAwMDAwMDAwMDAwMDKioqKh0qKioSEhgYGBgYGBgYGBgpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkqKikpKSkpKioqKioqKioqKiopKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSoqKiopKSkpKSkpKSkpKSkpKSkpKioqKioqGBgYGBgYGBgYGCkqKiopKR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAwMDAwMqKh0dKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkqKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkqKgMYGBgYGBgYGBgYKioqKioqGBgYGBgYGBgYGCoqKioqKikpKSkpKSkpKSkpKSkpKioDAwMDAwMDAwMDAwMDAwMDKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgMDAwMDHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0DAwMDAwMDAwMDAwMdHR0dHR0dHSoqKhgYGBgYGBgYGBgMDB0MDAwMHR0dHR0dHR0dHQMDAwMDAwMDAx0dHR0dHR0dHQwMKgMDAx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQMDAwMDAwMDAwMDAwMdHRgYGBgYGBgYGBgdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQMDAwMDAwMDAwMDAwMDKioqKioqKiodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0DAwMDAwMDAwMDAwMDAwMDAwMDAyoqKgwMDAwMGBgYGBgYGBgYGCoqKh0dHRgYGBgYGBgYGBgdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0MDB0dHR0dHR0dHSoqKioqKiodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dKiodHR0dHR0dHSoqKioqKioqAwMDHQMDAwMDAwMDAwMDAwMDAwMDAwMDAx0dHR0DHR0dHR0dAx0dAwMDHSoqKioqAwMDAwMDAwMDAwMDAwgDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDCAMDAx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qKh0dHR0dHSoqHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qKh0dHR0dHSoqHR0dHR0dHR0qHSodKh0qHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSoqHR0dHR0qHR0dHR0dHR0dHR0dHR0qKh0dHR0dHSodHR0dHR0dHR0dHR0dHR0dHR0dKiodHR0qHR0dHR0dHQ0dKgwMDAwMDAwIDAwMBwMKAwMMCAwMCxwcHRYWFRYWFhUWHBwdHRMTEwwAAAMDAwMDCBkZGRkZGRkZHRYWHBQUHR0dHRcVEBQUFB0dHR0dHR0dHR0dHQwZDAwMDB0MDAwGHR0dHSoDAwMDAwMDAwMDHR0qKhwdHR0dHR0dHRUQHB0cHBwcHR0dHR0dHR0VECodHR0dHR0dHR0dHR0dKioqGhoaGhoaGhkaGhoaGhoaGhoaGhoaGhkaGhoaGRoaGRoaGhoaGhoaGhoaGhoaGgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyoqKioqKioqKioqKioqKh0dHRkdHB0dHRkdHR0dHR0dHR0cHR0aHR0dHR0dHR0dHRwcHR0dHR0dHR0cHR0dHR0dHR0dHR0dHR0dHR0dHR0cHB0dHR0dHB0dHB0cHBwcHBwcHBwcHBwdHR0dHBwcHBwcHBwcHB0dHR0dHR0dHRwdHSoqKiocHBwcHBwcHBwcHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0cHRwdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHB0cHB0dHRwcHR0cHR0dHB0cGhodHB0dHR0cHR0cHBwcHR0cHRwdHBwcHBwcHRwdHR0dHRwcHBwdHR0dHBwdHR0dHR0dHRwdHR0cHR0dHR0cHR0dHR0dHR0dHR0dHRwcHR0cHBwcHR0cHB0dHBwdHR0dHR0dHR0dHR0dHR0dHBwdHRwcHR0dHR0dHR0dHR0dHRwdHR0cHR0dHR0dHR0dHR0cHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRwdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRMdHR0dHR0dHR0dHR0dHR0dFRAVEB0dHR0dHRwdHR0dHR0dJCQdHR0dHR0dHR0dHR0dFRAdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0kJCQkHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dKioqKioqKioqKioqKioqKioqKioqKioqKh0dHR0dHR0dHR0dKioqKioqKioqKioqKioqKioqKioqHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHB0dHR0cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHR0dHR0dHR0dHR0cHBwcHBwcHBwcHBwcHBwcHR0cHBwcHR0dHR0dHR0dHRwcHRwcHBwcHBwdHR0dHR0dHRwcHR0cHB0dHR0cHB0dHR0cHBwdHRwdHRwcHBwdHR0dHR0dHR0dHR0dHR0dHBwcHB0dHR0dHR0dHRwdHR0dHR0dHR0dHR0dHR0dJCQkJB0cHB0dHB0dHR0cHB0dHR0kJBwcJB0kJCQfJCQdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dJCQkHR0dHRwdHB0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHBwdHBwcHRwkHBwdHBwdHB0dHR0dHR0dHR0dHR0dHSQdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0cHB0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dJCQkJCQkJCQkHBwcHCQdJCQkHCQkHBwcJCQcHCQcHCQkJB0cHR0dHRwcJBwcHBwcHCQkJCQkHCQkHyQcHCQkJCQkHR0dJCQfHx8fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0cHR0dFhYWFhYWHRISJB0dHRUQFRAVEBUQFRAVEBUQHBwcHBwcHBwcHBwcHBwcHBwcHBwdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRUQHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRUQFRAVEBUQFRAdHR0dHR0dHR0dHR0dHR0dFRAVEBUQFRAVEBUQFRAVEBUQFRAVEB0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRUQFRAdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRUQHR0dHR0dHR0dHR0dHR0dHR0dHR0dHBwcHBwdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSoqHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQMDAx0dKioqKioSDAwMHRIMHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0qHSoqKioqHSoqHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSoqKioqKiodDCoqKioqKioqKioqKioqAx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dKioqKioqKioqHR0dHR0dHSodHR0dHR0dKh0dHR0dHR0qHR0dHR0dHSoDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxYWFhYWFhYWFhYWFhYWDAwMDAwMDAwdDBUMHR0WFh0dFhYVEBUQFRAVEAwMDAwSHQwMHQwMHR0dHR0LCwwMDB0MDBUMDAwMDAwMDB0MHQwMHR0dEhIVEBUQFRAVEAwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQqJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCoqKioqKioqKioqKiQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQqKioqKioqKioqKioqKioqKioqKioqKioqKiQkJCQkJCQkJCQkJCoqKioMEBAkJBQkJBUQFRAVEBUQFRAkJBUQFRAVEBUQFBUQECQkJCQkJCQkJCQDAwMDAwMkJCQkJAMkJCQkJBQUJCQkKh4kHiQeJB4kHiQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQeJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJB4kHiQeJCQkJCQkHiQkJCQkJB4eKioDAxQUFBQkFB4kHiQeJB4kHiQkJCQkJCQkJCQkJCQkJCQkJCQkJCQeJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJB4kHiQeJCQkJCQkHiQkJCQkJB4eJCQkJBQeFBQkKioqKiokJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkKiQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCoqKioqKioqKioqKh4eHh4eHh4eHh4eHh4eHh4kJCQkJCQkJBwcHBwcHBwcJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkFCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCoqKiQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCoqKioqKioqKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0MDB0dHR0dHR0dHR0dHR0MEgwdHR0dHR0dHR0dHR0dHR0dGBgYGBgYGBgYGB0dKioqKioqKioqKioqKioqKioqKiodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQMDAwMdAwMDAwMDAwMDAx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQMDHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAwMdDAwMDAwqKioqKioqKh0dHR0dHR0dHR0dKioqKiodHSodKh0dHR0dKioqKioqKioqKioqKioqKioqKioqKioqHR0dHR0dHR0dHR0dHR0DHR0dAx0dHR0DHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0DAwMDAx0dHR0DKioqHR0dHR0dHR0ZHSoqKioqKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0NDRISKioqKioqKioDAx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAwMDAwMDAwMDAwMDKioqKioqKioMDBgYGBgYGBgYGBgqKioqKioDAwMDAwMDAwMDAwMDAwMDAwMdHR0dHR0dHR0dDR0dAxgYGBgYGBgYGBgdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAwMDAwMDAwMMDB0dHR0dHR0dHR0dHR0dHR0DAwMDAwMDAwMDAwMDKioqKioqKioqKiodJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUqKioDAwMDHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0DAwMDAwMDAwMDAwMDHR0dHR0dDAwMHR0dHSodGBgYGBgYGBgYGCoqKiodHSkpKSkpKSkpKSkpKSkpKSkYGBgYGBgYGBgYKSkpKSkqHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0DAwMDAwMDAwMDAwMDAyoqKioqKioqKh0dHQMdHR0dHR0dHQMDKioYGBgYGBgYGBgYKiodDAwMKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkqKioqKioqKioqKioqKioqKioqKioqKiopKSkpKR0dHR0dHR0dHR0dAwMDAwMMDB0dHQMDKioqKioqKioqHR0dHR0dKiodHR0dHR0qKh0dHR0dHSoqKioqKioqKh0dHR0dHR0qHR0dHR0dHSodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHSoqKiodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQMDAwMDAwMDDAMDKioYGBgYGBgYGBgYKioqKioqISIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiEiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIhIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiISIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIioqKioqKioqKioqKiYmJiYmJiYmJiYmJiYmJiYqKioqJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJyoqKioFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKh0dHR0dHR0qKioqKioqKioqKiodHR0dHSoqKioqIwMjIyMjIyMjIyMjHSMjIyMjIyMjIyMjIyMqIyMjIyMqIyojIyojIyojIyMjIyMjIyMjHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dKioqKioqKioqKioqKioqKh0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dEBUdHR0dHR0dHR0dHR0dHR0dKiodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dKioqKioqKh0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKh0dHR0dHR0dHR0dHRkdHR0DAwMDAwMDAwMDAwMDAwMDFxAQFxcSEhUQEyoqKioqKgMDAwMDAwMDAwMDAwMDAwMkJCQkJBUQFRAVEBUQFRAVECQkFRAkJCQkJCQkECQQKhQUEhIkFRAVEBUQJCQkJCQkJCQqJBoZJCoqKiodHR0dHSodHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dKioGKhIkJBoZJCQVECQkECQQJCQkJCQkJCQkJCQUFCQkJBIkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQVJBAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQVJBAkFRAQFRAQFCQeHh4eHh4eHh4eJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkFBQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkKiokJCQkJCQqKiQkJCQkJCoqJCQkJCQkKiokJCQqKioZGiQkJBoaKh0dHR0dHR0qKioqKioqKioqAwMDDxwqKh0dHR0dHR0dHR0dKh0dKh0MDAwqKioqHR0dHR0dHR0dHR0dHQMqKh0dHR0dHQMDAwMDKioqKiodHR0dHR0dHR0dHR0dHSoMHR0dHR0qKioqKioqKioqKh0dHSodHSodHR0dHR0dHR0qHR0dHR0dHSodHSoqKh0qHR0dHR0dHR0dKioqKiodHR0dHR0qKh0qHR0dHR0dKh0dKioqHSoqHR0dHR0dKgwdHR0dHR0dHSodHSoqKioqHR0dHR0dHR0dHR0dKioqDB0DAwMqAwMqKioqKgMDAwMdHR0dHR0qKgMDAyoqKioDDAwMDAwMDAwdKioqKioqKh0dHR0dAwMqKioqHR0dHR0MDAwMDAwTKioqKioqKioqHR0dHR0dKioqDAwMDAwMDB0dKioqKioqKh0dHR0qKiodHR0dHR0dHR0dKgMDDCoqAx0dHR0dHR0dHSoqKioqKh0dAwMDAx0dHR0qKioqKioDAwMDAwMDDAwdHR0dHSoqAx0dAwMdKioqKioqKioqAwMDAwMDAwMDAwMdHR0MDAMqKioqKioqKioqHSoqAwMDAwMqGBgYGBgYGBgYGAwMDAwdAwMdKioqKioqKiodHR0DHQ0dKioqKioqKioqAx0dHR0MDB0MAwMDAx0DAxgYGBgYGBgYGBgdDR0MDAwDAwMDAwMDAwwMHQwMHQMdAyoqKioqKioqKioqKioqHR0dHR0dHSodKh0dHR0qHR0dHR0dHR0dDCoqKioqKgMDAwMqHR0dHR0dHR0qKh0qHR0qHR0dHR0qAwMdAwMdKioqKioqAyoqKioqHR0dAwMqKgMDAwMDAwMqKioDAwMDAwMDHR0dHQwMDAwdGBgYGBgYGBgYGAwMKh0DHQMDAwMdHR0dKioqKioqKioDAwMDAwMqKgMDAwMDAwMDDQwMEhIdHR0MDAwMDAwMDB0dHR0DAyoqAwwMHR0qKioqKioqKioqKg0NDQ0NDQ0NDQ0NDQ0qKioDAwMDAwMDAx0dKioqKioqGBgYGBgYGBgYGCkpDAwMKR0dHR0dHR0qKh0qKh0dHR0qHR0qHR0dHR0dHR0DAwMDAwMqAwMqKgMDAwMdAwMMDAwqKioqKioqKiodAwMDAwMDAyoqAwMDAwMDHQ0dAyoqKioqKioqKioqHR0dAwMDAwMDAx0DAwMDDR0MDAwMDR0DKioqKioqKiodAwMDAwMDAwMDAwMdHR0dAwMDAwMDAwMDAwwMDB0NDQwMKioqKioqKioqKioqKg0NDQ0NDQ0NDQ0qKioqKiodDAwMDAwqKioqKioqKioqDRIdHR0dHR0dHR0dHR0dHQMDAwMDAyoqKgMqAwMqAwMDAwMDHQMqKioqKioqKh0dHR0dHSodHSodHR0dHR0DAyoDAwMDAx0qKioqKioqHR0dAwMDAx0dKioqKioqKgMDHQMdHR0dHR0dHR0dHR0DAwMDAwMDKioqAwMDDAwkJCQkJCQkJCQkJB0dHR0dHR0dHR0dHR0ZGRkdHR0dHR0dHR0dHR0dHR0qKioqKioqKioqKioqDAwMDAwqKioqKioqKioqKh0dHR0dHR0dFRUVEBAQHR0QHR0dFRAVEB0dHR0dHR0dHRUQEB0dHR0ICAgICAgIFRAICAgVEBUQAx0dHR0dHQMDAwMDAwMDAxgYGBgYGBgYGBgqKioqDAwDAwMDAwwqKioqKioqKioqAwMDAwMDAwwMDB0dHR0dHQwdKioqKioqKioqKhgYGBgYGBgYGBgqHR0dHR0dHQwMHR0qKioqKgMDAwMDAwMDKioqKioqKgMUFBQUCCoqKioqKioqKioqHioqKioqKioqKioqKioeHh4qKh4qKioqKioqKioqHh4eHioqKioqKioqHR0dHR0dHR0dHSoqHQMDDB0dHR0dAwMDAwMdHR0DAwMdHQMDAwMDAwMdHR0dHR0dHR0dAwMDAx0dAwMDHSoqKioqKioqKiodKiodHSoqHR0dHSodHR0dHR0dHR0dKh0qHR0dHR0qHSoqKh0dHR0dHR0dHR0dHSoqGBgYGBgYGBgYGBgYGBgYGB0dHR0dAx0dHR0dHR0dHR0DHR0MDAwMHSoqKioqHR0dHR0dKioqKioDAwMDAwMDAwMqKgMDAwMDKgMDKgMDAwMDKioqKioDAwMDAwMDHR0dHR0dHSoqHR0dHR0dHR0dHR0dHR0DKhgYGBgYGBgYGBgqKioqKhodHR0dHR0dKh0dHR0qHR0qHR0dHQMDAwMDAwMdKioqKhgYGBgYGBgYGBgqKioqFRUZHR0dHSoqKioqKioqKioqHR0qHSoqHSodHR0dHR0dKh0dHR0qHSodKioqKh0qKioqHSodKh0qHR0dKh0dKh0qKh0qHSodKh0qHR0qHSoqHR0dHSodHR0dKh0dHR0qHSodHR0qHR0dHR0qHR0dHR0cHBwcHBwcHBwcHBwcJCQkHBwcHBwcHBwcHB0dHSQkJCQkJCgoKCgoKCgoKCgoKCgoKCgkJCQkJB8kJCQkJCQkJCQkJCQdHSQkJCQkHSQkJB8fHyQkHyQkHx8fJCQkJCQkJCQkJCQgICAgICQkHx8kJB8fHx8fHx8fHx8kJCQkJCQkJCQkJCQkJCQfHx8fHx8fHx8fJCQkHyQkJB8fHyQfHx8kJCQkJCQkHyQkJCQkJCQkJCQkJCQkHSQdJB0kJCQkJB8kJCQkHR0kJCQkJCQkJCQkJCQkHR0dHR0kJCQkJCQkJCQkJB8fJCQkJB8kJCQkJB8kJCQkHx8kJCQkJCQkJCQdHR0dHR0dHSQkJCQdHR0dHR0kJCQkJCQfHx8kJCQfHx8fHx0dHR0dHRYWFhQUFB0dHR0kJCQkHx8fJCQkJCQkJCQkJCQfJCQkHR0dHSQkJCQkJCQkJCQkJB0dHR0dHR0dHR0dHR8kJB8fHx8fHx8fHx8kJB8fHyQkJCQkHx8kHx8kHyQkJCQfHx8fHx8fHx8fHx8fJCTAwcLdxN3Gx8jJ3cvMzc7P0NHS09TV1tfY2drb3d3U3+Dh4uPk5ebn6N3d68DBAt3E3cbHyMndy8zNzs/Q0dLT1NXW19jZ2tvd3dTf4OHi4+Tl5ufo3d3rwMHC3cTdxsfIyd3LzM3Oz9DR0tPU1dbX2Nna293d1N/g4eLj5OXm5+jd3esAAQIDBB0GBwgJA4sMjQ6PEBESExQVFhcYGRobHR0Un6ChoiOkpaanqB0d68DBwt3E3cbHyMndy8zNzs/Q0dLT1NXW19jZ2tvd3dTf4OHi4+Tl5ufo3d3rAAECHQQdBgcICR2LDI0OjxAREhMUFRYXGBkaGx0dFJ+goaIjpKWmp6gdHesAAQIGBB0GBwgJBgsMDQ4PEBESExQVFhcYGRobHR0UHyAhIiMkJSYnKB0d6wABAp0EnYYHiC2di4yNjo+QkZKTlJWWl5iZmpudnZSfoKGio6SlpqeonZ3rAAECCAQdBgcICQgLDA0ODxAREhMUFRYXGBkaGx0dFB8gISIjJCUmJygdHesAAQKdBJ0GB4gJnYuMjY6PEBESk5SVlheYmZobnZ2Un6ChoqOkpaanqJ2d6wABAgoEHQYHCAkKiwyNDo8QERITFBUWFxgZGhsdHRSfoKGiI6SlpqeoHR3rAAECCwSdBgcIMgsLDI0OjxAREhMUlRYXmJmaG52dFJ+goaKjpKWmp6idnesAAQIMBJ0GB4gJDIsMjQ6PEBESExSVFheYmZobnZ0Un6ChoqOkpaanqJ2d6wABAg0EHQYHCAkNCwwNDo8QERITFBUWFxgZGhsdHRQfICEiIyQlJicoHR3rAAECDgSdBgeICQ6LDI0OjxAREhMUlRYXGJmaG52dFJ+goaKjpKWmp6idnesAAQIPBJ0GBwgJD4uMjY6PEBESk5SVFheYmZobnZ2Un6ChoqOkpaanqJ2d6wABAhAEnQYHCDAQiwyNDo8QERITFJUWF5gZGhudnRSfoKGio6SlpqeonZ3rAAECEQQdBgcIMRGLDI0OjxAREhMUlRYXGBkaGx0dFJ+goaIjpKWmp6gdHesAAQISBJ0GBwgJEosMjQ6PEBESExSVFheYmZobnZ0Un6ChoqOkpaanqJ2d6wABAhMEnQYHCAkTiwyNDo8QERITFJUWF5iZmhudnRSfoKGio6SlpqeonZ3rAAECFASdBgcICRSLDI0OjxAREhMUlRYXmJmaG52dFJ+goaKjpKWmp6idnesAAQIVBB0GBwguFQsMDQ4PEBESExQVFhcYGRobHR0UHyAhIiMkJSYnKB0d6wABAhYEHQYHCC8WCwwNDg8QERITFBUWFxgZGhsdHRQfICEiIyQlJicoHR3rAAECFwQdBgcICReLDI0OjxAREhMUlRYXGJmaGx0dFJ+goaIjpKWmp6gdHesAAQIYBB0GBwgJGIsMjQ6PEBESExQVFhcYGRobHR0Un6ChoiOkpaanqB0d6wABAhkEHQYHCAkZiwyNDo8QERITFBUWFxiZmhsdHRSfoKGiI6SlpqeoHR3rAAECGgQdBgcICRqLDI0OjxAREhMUFRYXGJmaGx0dFB8gISIjJCUmJ6gdHesAAQIbBJ0GBwgJG4sMjQ6PEBESExSVFhcYmZobnZ0Un6ChoiOkpaanqJ2d6wABAh0EHQYHCAkdiwyNDo8QERITFBUWFxgZGhsdHRSfoKGiI6SlpqeoHR3rAAECHQQdBgcICR2LDI0OjxAREhMUFRYXGBkaGx0dFJ+goaIjpKWmp6gdHesAAQIUBJ0GBwgJFIsMjQ6PEBESExSVFheYmZobnZ0Un6ChoqOkpaanqJ2d6wABAh8EnQYHCAkfiwyNDo8QERITFJUWF5gZmhudnRSfIKGio6SlpqeonZ3rAAECIASdBgcICSCLDI0OjxAREhMUlRYXmBmaG52dFJ+goaKjpKWmp6idnesAAQIhBJ0GBwgJIYsMjQ6PEBESExSVFheYGZobnZ0Un6ChoqOkpSYnqJ2d6wABAiIEnQYHCAkiiwyNDo8QERITFJUWF5gZmhudnRSfoKGio6SlpieonZ3rAAECIwQdBgcICSOLM40zjxAREhMUFRYXGBkaGx0dFJ+goaIjpKWmp6gdHesAAQIkBJ0GBwgJJIsMjQ6PEBESExSVFheYGZobnZ0Un6ChoqOkpaanqJ2d6wABAiUEnQYHCAkliwyNDo8QERITFJUWF5gZmhudnRSfoCEio6QlJqeonZ3rAAECJgSdBgcICSaLDI0OjxAREhMUlRYXmBmaG52dFJ+goaKjpKUmJ6idnesAAQInBJ0GBwgJJ4sMjQ6PEBESExSVFheYGZobnZ0Un6ChoqOkpaYnqJ2d6wABAigEnQYHCAkoiwyNDo8QERITFJUWF5iZmhudnRSfoKGio6Slpqc0nZ3rAAECHQQdBgcICR2LDI0OjxAREhMUFRYXGBkaGx0dFJ+goaIjpKWmp6gdHesAAQIdBB0GBwgJHYsMjQ6PEBESExQVFhcYGRobHR0Un6ChoiOkpaanqB0d6wABAp0EnQYHiAmdiwyNDo8QERITFJUWF5iZmhudnRSfoKGio6SlpqeonZ3rAAECHQQdBgcICR0LDA0ODxAREhMUFRYXGBkaGx0dFB8gISIjJCUmJygdHSsAAQKdBJ2GB4gtnYuMjY6PkJGSk5SVlpeYmZqbnZ2Un6ChoqOkpaanqJ2d6wABAh0EHQYHCC4dCwwNDg8QERITFBUWFxgZGhsdHRQfICEiIyQlJicoHR3rAAECnQSdBgeIL52LjI2OjxAREpOUFZYXmJmaG52dlJ+goaKjpKWmp6idnesAAQKdBJ0GB4gwnYuMjY6PEBESkxSVlheYmZobnZ0Un6ChoqOkpaanqJ2d6wABAp0EnQYHiDGdi4yNjo8QERKTFJWWF5iZmhudnRSfoKGio6SlpqeonZ3rAAECnQSdBgeIMp0LjI2OjxAREpOUlZYXmJmaG52dlJ+goaKjpKWmp6idnesAAQIzBB0GBwgJMwsMDQ6PEBESExQVFhcYGRobHR0UHyAhIiMkJSYnKB0d6wABAjQEnQYHCAk0iwyNDo8QERITFJUWF5iZmhudnRSfoKGio6SlpqeonZ3rAEGB4+IAC4cBAQIDAwQFBgcICQoLDA0OAwMDAwMDAw8DAwMDAwMDDwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJEAkJCQkJCQkREREREREREhERERERERESAEGC5eIAC0wBAgAAAAAAAAADBAUGAAAABwAAAAgJCgsADA0ODxAREhMUFRYXGBkaGRscHR4fICEiIyQlJicoKSorLC0uLzAxMgAzNAQEAAAAAAA1AEHc5eIAC0M2Nzg5OgA7ADwAAAA9Pj9AQUJDREUAAEYAAAAEAAAAAAAAAABHSElKS0xNTk9QUQBSAABTAFRVVlVXWFlaW1xdXl9gAEGs5uIAC7QEYWIAAAAAAGMAZABlAABmZzMzM2hpamszbG1ub3BxMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMwAzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM3JzAAAAAAB0dXYAAAAAdwAAeHl6e3x9fn+AAAAAgTMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM4KDAEGA6+IAC21VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMzMzMzMzMzOEAEH46+IACxaFhgBkaoeIiQAAAAAAAACKAAAAiwCMAEGo7OIAC1aNAACOAAAAAAAAAACPAAAAAACQkQCSkwCUlZaXmJmam5wmAJ0kngAAn6ChogAAo6SlpqcAqAAAAKkAAACqqwCsra6vAAAAAACwALEAsrO0AAAAALW2twBB0e3iAAsBuABBq+/iAAsCuboAQb3v4gALeLu8vTMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzvjMzMzMzMzMzMzMzMzMzMzMzMzO/wABBv/HiAAsNwTMzMzPCwzMzMzMzxABB8vHiAAsBxQBBvPLiAAsOxscAAAAAAAAAyMkAAMoAQejy4gALA8vMzQBBgPPiAAsUzgC7ALoAAAAAAM/QAAAAAAAAANAAQaPz4gALA9EA0gBBwPPiAAss0wAA1NXW1wDY2QAA2tvc3d7fM+Dh4uPkM+Uz5gAAAOcAAAAA6OkzMwDq6+wAQYD04gALwAEzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMz4QQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAQYD24gALwAJVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVXtVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVXddVcf/1Xf9VVVVVVdVVVVVVVVVV1VVVVdX9XVdVVVVVVVVVVVVVVQBB3PjiAAspVVVVVVXVVVVVVVVVVVVVVVVVVVUVAFBVVVVVVVVVVVVVVVVVVVVVVQEAQY/54gALtAEQQRBVVVVVVVVVVVVVVVVVVVVRVVUAAEBUVVVVVVVVVVVVVRUAAAAAAFVVVVVUVVVVVVVVVVUFABQAFARQVVVVVVVVVRVRVVVVVVVVVQAAAAAAAEBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVBQAAVFVVVVVVVVVVVVVVVVUVAABVVVFVVVVVVQUQAAABAVBVVVVVVVVVVVVVAVVVVVVVVVVVVVVVVVVQVQAAVVVVVVVVVVVVVQUAQdD64gAL4w1AVVVVVVVVVVVVVVVVVUVUAQBUUQEAVVUFVVVVVVVVVVFVVVVVVVVVVVVVVVVVVUQBVFVRVRVVVQVVVVVVVVVFQVVVVVVVVVVVVVVVVVVVVEEVFFBRVVVVVVVVVVBRVVUBEFRRVVVVVQVVVVVVVQUAUVVVVVVVVVVVVVVVVVVVBAFUVVFVAVVVBVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVFVFVVUVUVVVVVVVVVVVVVVVRUVVVVVVVVVVVVVVVVVQRUBQRQVUFVVQVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVFEQFBFBVQVVVBVVVVVVVVVVQVVVVVVVVVVVVVVVVVRVEAVRVUVUVVVUFVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVVVUUVBURVFVVVVVVVVVVVVVVVVVVVVVVVVVVVUQBAVVUVAEBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRAABUVVUAQFVVVVVVVVVVVVVVVVVVVVVVVVBVVVVVVVURUVVVVVVVVVVVVVVVVVUBAABAAARVAQAAAQAAAAAAAAAAVFVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQEEAEFBVVVVVVVVUAVUVVVVAVRVVUVBVVFVVVVRVVVVVVVVVVWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqoAAAAAAAAAAFVVVVVVVVUBVVVVVVVVVVVVVVVVBVRVVVVVVVUFVVVVVVVVVQVVVVVVVVVVBVVVVVVVVVVVVVVVVVVVVVUQAFBVRQEAAFVVUVVVVVVVVVVVVVUVAFVVVVVVVVVVVVVVVVVBVVVVVVVVVVVRVVVVVVVVVVVVVVVVVUAVVFVFVQFVVVVVVVUVFFVVVVVVVVVVVVVVVVVVRQBARAEAVBUAABRVVVVVVVVVVVVVVVUAAAAAAAAAQFVVVVVVVVVVVVVVVQBVVVVVVVVVVVVVVVUAAFAFVVVVVVVVVVVVFQAAVVVVUFVVVVVVVVUFUBBQVVVVVVVVVVVVVVVVVUVQEVBVVVVVVVVVVVVVVVVVVQAABVVVVVVVVUAAAAAEAFRRVVRQVVVVFQDXf19ff/8FQPdd1XVVVVVVVVVVVQAAAABVV1VV/VdVVVVVVVVVVVVXVVVVVVVVVVUAAAAAAAAAAFRVVVXVXV1V1XVVVX1VVVVVVVVVVVVVVdVX1X////9V//9fVVVVXVX///9VVVVVdVVVX1VVVVX1dVdVVVXVVVVVVVVV99ff111ddf3X//93Vf9VX11VX1d1VVVVf//19V9VVVX1/19VVV1dVVVdVVVVVVXVVVVVVXVVpVVVVWlVVVVVVVVVVVVVVVVVVVWpVpZVVVVVVVVVVVVVVf/////////////////////////////////////////////f//////////9V////////////VVVV//////VfVVXf/19V9fVVX1/11/VfVVVV9V9V1VVVVWlVfV31VVpVd1VVVVVVVVVVd1WqqqpVVVXf33/fVVVVlVVVVVWVVVX1WVWlVVVVVelV+v/v//7//99V7/+v++/7VVmlVVVVVVVVVVZVVVVVXVVVVWaVmlVVVVVVVVX1//9VVVVVValVVVVVVVVWVVWVVVVVVVVVlVZVVVVVVVVVVVVVVVVW+V9VVVVVVVVVVVVVVVVVVVVVVVVVVRVQVVVVVVVVVVVVVVVVVVVVVVVVFVVVVVVVVVVVAAAAAAAAAACqqqqqqqqaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqlVVVaqqqqqqWlVVVVVVVaqqqqqqqqqqqqqqqqqqCgCqqqpqqaqqqqqqqqqqqqqqqqqqqqqqqqqqaoGqqqqqqqqqqqpVqaqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqKqqqqqqqqqqqmqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVVZWqqqqqqqqqqqqqqmqqqqqqqqqqqqqq//+qqqqqqqqqqqqqqqqqqqpWqqqqqqqqqqqqqqqqqmpVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFUAAAFBVVVVVVVVVBVVVVVVVVVVVVVVVVVVVVVVVVVVVUFVVVUVFFVVVVVVVVUFVVFVVVVVVUFVVVVVVVQAAAABQVUUVVVVVVVVVVVVVBQBQVVVVVVUVAABQVVVVqqqqqqqqqlZAVVVVVVVVVVVVVVUVBVBQVVVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVVVUBQEFBVVUVVVVUVVVVVVVVVVVVVVVUVVVVVVVVVVVVVVVVBBRUBVFVVVVVVVVVVVVVUFVFVVVVVVVVVVVVVVVRVFFVVVVVqqqqqqqqqqqqVVVVAAAAAABAFQBBv4jjAAuhCFVVVVVVVVVVRVVVVVVVVVVVAAAAAKqqWlUAAAAAqqqqqqqqqqpqqqqqqmqqVVVVVVWqqqqqqqqqqlZVVVVVVVVVVVVVVVVVVQVUVVVVVVVVVVVVVVVVVVVVqmpVVQAAVF1VVVVVVVVVVVVVVVVVVVVRVVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVUFQFUBQVUAVVVVVVVVVVVVVUAVVVVVVVVVVVVVQVVVVVVVVVVVVVVVVVVVVQBVVVVVVVVVVVVVVVVVVVVVFVRVVVVVVVVVVVVVVVVVVVVVVVVVAVUFAABUVVVVVVVVVVVVVVUFUFVVVVVVVVVVVVVVVVVVUVVVVVVVVVVVVVVVVVUAAABAVVVVVVVVVVVVVRRUVRVQVVVVVVVVVVVVVVUVQEFVRVVVVVVVVVVVVVVVVVVVVUBVVVVVVVVVVRUAAQBUVVVVVVVVVVVVVVVVVVUVVVVVUFVVVVVVVVVVVVVVVQUAQFVVARRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVQBFVFVVVVVVVVVRUVAEBVVVVVVVRVVVVVFVVVVQUAVABUVVVVVVVVVVVVVVVVVVVVVQAABURVVVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVRQARBEEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVBVBVEFRVVVVVVVVQVVVVVVVVVVVVVVVVVVVVVVVVVVUVAEARVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVUQAQVVVVVVVVVVVVAQUQAFVVVVVVVVVVVVVVVVVVVVUVAABBVVVVVVVVVVVVVVVVVVRVFUQVVVVVVVVVVVVVVVVVVVVVVVVVVVUABVVUVVVVVVVVVQEAQFVVVVVVVVVVVRUAFEBVFVVVAUABVVVVVVVVVVVVVVUFAABAUFVVVVVVVVVVVVVVVVVVVVVVVVVVVQBAABBVVVVVBQAAAAAABQAEQVVVVVVVVVVVVVVVVVVVAUBFEAAQVVVVVVVVVVVVVVVVVVVVVVVVUBFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVRVVVBVVVVVVVVVVVVVVVUFQFVEVVVVVVVVVVVVVVVVVVVVVBUAAABQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQBUVVVVVVVVVVVVVVVVVVUAQFVVVVVVFVVVVVVVVVVVVVVVVVVVVRVAVVVVVVVVVVVVVVVVVVVVVVVVVapUVVVaVVVVqqqqqqqqqqqqqqqqqqpVVaqqqqqqWlVVVVVVVVVVVVWqqlZVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVqqmqaaqqqqqqqqqqalVVVWVVVVVVVVVVallVVVWqVVWqqqqqqqqqqqqqqqqqqqqqqqqqVVVVVVVVVVVBAFVVVVVVVVUAQeuQ4wALRVAAAAAAAEBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRFQBQAAAABAAQBVVVVVVVVVBVBVVVVVBVRVVVVVVVVVVVVVVVVVVQBBvZHjAAsCQBUAQcuR4wALiAdUVVFVVVVUVVVVVRUAAQAAAFVVVVUAQAAAAAAUABAEQFVVVVVVVVVVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVAFVVVVVVVVVVAEBVVVVVVVVVVVVVVQBAVVVVVVVVVVVVVVVVVVVWVVVVVVVVVVVVVVVVVVVVVVWVVVVVVVVVVVVVVVVV//9/Vf////////9f//////////////////9fVf/////////vq6rq/////1dVVVVValVVVaqqqqqqqqqqqqqqVaqqVlVaVVVVqlpVVVVVVVWqqqqqqqqqqlZVVamqmqqqqqqqqqqqqqqqqqqqqqqqpqqqqqqqVVVVqqqqqqqqqqqqqmqVqlVVVaqqqqpWVqqqqqqqqqqqqqqqqqqqqqqqaqaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqWqqqqqqqqqqqqqqqqqqqqWlVVlWqqqqqqqqpVVVVVZVVVVVVVVWlVVVVWVVVVVVVVVVVVVVVVVVVVVVVVVVWVqqqqqqpVVVVVVVVVVVVVVVWqWlVWaqlVqlVVlVZVqqpWVVVVVVVVVVWqqqpVVlVVVVVVVaqqqqqqqqqqqqqqaqqqmqqqqqqqqqqqqqqqqqqqVVVVVVVVVVVVVVVVqqqqVqqqVlWqqqqqqqqqqqqqqpqqWlWlqqqqVaqqVlWqqlZV////////////////////X0VtcHR5SW52YWxpZERpZ2l0UG9zT3ZlcmZsb3dOZWdPdmVyZmxvd1plcm8AHgQAAAwAAAAEAAAAVwMAAFgDAAAfBAAAMDEyMzQ1Njc4OWFiY2RlZi91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3V1aWQtMS4xMC4wL3NyYy9mbXQucnMAAAA0yxgAVQAAALkAAAANAAAANMsYAFUAAACxAAAAFQAAADTLGABVAAAAtAAAAA0AAAA0yxgAVQAAALUAAAANAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvd2FzbS1iaW5kZ2VuLTAuMi45My9zcmMvY2FjaGUvaW50ZXJuLnJzAADMyxgAZgAAABsAAAArAAAAAAAAAP//////////SMwYAEHgmOMAC+oBVHJpZWQgdG8gc2hyaW5rIHRvIGEgbGFyZ2VyIGNhcGFjaXR5YMwYACQAAAAvcnVzdGMvNTVhMjJkMmE2MzMzNGUwZmFmZjAyMDJiNzJhMzFjZTgzMmI1NjEyNS9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjLnJzjMwYAEwAAACmAgAACQAAAEpzVmFsdWUoKQAAAOjMGAAIAAAA8MwYAAEAAABjbG9zdXJlIGludm9rZWQgcmVjdXJzaXZlbHkgb3IgYWZ0ZXIgYmVpbmcgZHJvcHBlZAAAiwUAAAQAAAAEAAAAjAUAAI0FAEHUmuMAC/ADAQAAAI4FAABjYW5ub3QgYWNjZXNzIGEgVGhyZWFkIExvY2FsIFN0b3JhZ2UgdmFsdWUgZHVyaW5nIG9yIGFmdGVyIGRlc3RydWN0aW9uL3J1c3RjLzU1YTIyZDJhNjMzMzRlMGZhZmYwMjAyYjcyYTMxY2U4MzJiNTYxMjUvbGlicmFyeS9zdGQvc3JjL3RocmVhZC9sb2NhbC5ycwAAAKLNGABPAAAABAEAABoAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi93YXNtLWJpbmRnZW4tZnV0dXJlcy0wLjQuNDMvc3JjL3F1ZXVlLnJzAATOGABnAAAAJQAAAC4AAAAE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drAQAH6wEACGsBAAjrAQAJawEACesBAAprAQAK6wEAC2sBAAvrAQAMawEADOsBAA1rAQAN6wEADmsBAA7rAQAPawEAD+sBAABrEQAA6xEAAWsRAAHrEQACaxEAAusRAANrEQAD6xEABGsRAATrEQAFaxEABesRAAZrEQAG6xEAB2sRAAfrEQAIaxEACOsRAAlrEQAJ6xEACmsRAArrEQALaxEAC+sRAAxrEQAM6xEADWsRAA3rEQAOaxEADusRAA9rEQAP6xEAAGshAADrIQABayEAAeshAAJrIQAC6yEAA2shAAPrIQAEayEABOshAAVrIQAF6yEABmshAAbrIQAHayEAB+shAA9KoQAPqqEAAAqxAABqsQAAyrEAASqxAAGKsQAB6rEAAkqxAAKqsQADCrEAA3qxAAPqsQAEWrEABMqxAAU6sQAFqrEABhqxAAaKsQAG+rEAB2qxAAfasQAISrEACLqxAAkqsQAJmrEACgqxAAp6sQAK6rEAC1qxAAvKsQAMOrEADKqxAA0asQANirEADfqxAA5qsQAO2rEAD0qxAA+6sQAAKsEAAJrBAAEKwQABesEAAerBAAJawQACysEAAzrBAAOqwQAEGsEABIrBAAT6wQAFasEABdrBAAZKwQAGusEAByrBAAeawQAICsEACHrBAAjqwQAJWsEACcrBAAo6wQAKqsEACxrBAAuKwQAL+sEADGrBAAzawQANSsEADbrBAA4qwQAOmsEADwrBAA96wQAP6sEAAFrRAADK0QABOtEAAarRAAIa0QACitEAAvrRAANq0QAD2tEABErRAAS60QAFKtEABZrRAAYK0QAGetEABurRAAda0QAHytEACDrRAAiq0QAJGtEACYrRAAn60QAKatEACurRAAtq0QAL6tEADGrRAAzq0QANatEADerRAA5q0QAO6tEAD2rRAA/q0QAAauEAAOrhAAFq4QAB6uEAAmrhAALq4QADauEAA+rhAARq4QAE6uEABWrhAAXq4QAGauEABurhAAdq4QAH6uEAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAGqZEABsmRAAbpkQAHCZEABymRAAdJkQAHaZEAB4mRAAepkQAHyZEAB/mRAAgpkQAIWZEACImRAAi5kQAI6ZEACRmRAA1KkQAOSpEAD0qRAABKoQAASqEAAUqhAAJKoQADSqEABEqhAAVKoQAGSqEAB0qhAAhKoQAJSqEACkqhAAtKoQAMSqEADUqhAA5KoQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAARKIQAESiEABEohAAVKIQAGSiEAB0ohAAhKIQAJSiEACkohAAtKIQAMSiEADUohAA5KIQAPSiEAAEoxAAFKMQACSjEAA0oxAARKMQAFSjEABkoxAAdKMQAISjEACUoxAApKMQALSjEAC0oxAAxKMQANSjEADkoxAA9KMQAASkEAAUpBAAJKQQADSkEABEpBAAVKQQAGSkEABkpBAAdKQQAISkEACUpBAApKQQALSkEAC0pBAAxKQQANSkEADkpBAA9KQQAASlEAAUpRAAJKUQADSlEABEpRAAVKUQAFSlEABkpRAAdKUQAISlEACUpRAApKUQALSlEADEpRAA1KUQAOSlEAD0pRAABKYQABSmEAAkphAANKYQAESmEABUphAAZKYQAGSmEAB0phAAhKYQAJSmEACkphAAtKYQAMSmEADEphAA1KYQAOSmEAD0phAABKcQABSnEAAEpRAAJKcQADSnEABEpxAAVKcQAGSnEAB0pxAAhKcQAJSnEACkpxAAtKcQAMSnEADUpxAA5KcQAPSnEAAEqBAAFKgQACSoEAA0qBAARKgQAFSoEABkqBAAdKgQAISoEACUqBAApKgQALSoEADEqBAA1KgQAOSoEAD0qBAABKkQABSpEAAkqRAANKkQAESpEABUqRAAZKkQAHSpEACEqRAAlKkQAKSpEAC0qRAAxKkQAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAYthAAILYQACi2EAAwthAAOLYQAEC2EABIthAAULYQAFi2EABgthAAaLYQAHC2EAB4thAAgLYQAIi2EACQthAAmLYQAKC2EACothAAsLYQALi2EADAthAAyLYQANC2EADYthAA4LYQAOi2EADwthAA+LYQAAC3EAAItxAAELcQABi3EAAgtxAAKLcQADC3EAA4txAAQLcQAEi3EABQtxAAWLcQAGC3EABotxAAcLcQAHi3EACAtxAAiLcQAJC3EACYtxAAoLcQAKi3EACwtxAAuLcQAMC3EADItxAA0LcQANi3EADgtxAA6LcQAPC3EAD4txAAALgQAAi4EAAQuBAAGLgQACC4EAAouBAAMLgQADi4EABAuBAASLgQAFC4EABYuBAAYLgQAGi4EABwuBAAeLgQAIC4EACIuBAAkLgQAJi4EACguBAAqLgQALC4EAC4uBAAwLgQAMi4EADQuBAA2LgQAOC4EADouBAA8LgQAPi4EAAAuRAACLkQABC5EAAYuRAAILkQACi5EAAwuRAAOLkQAEC5EABIuRAAULkQAFi5EABguRAAaLkQAHC5EAB4uRAAgLkQAIi5EACQuRAAmLkQAKC5EACouRAAsLkQALi5EADAuRAAyLkQANC5EADYuRAA4LkQAOi5EADwuRAA+LkQAAC6EAAIuhAAELoQAIayEACMshAAkrIQAJiyEACeshAApLIQAKqyEACwshAAtrIQALyyEADCshAAybIQANCyEADXshAA3rIQAOWyEADsshAA87IQAPqyEAABsxAACLMQAA+zEAAWsxAAHbMQACSzEAArsxAAMrMQADmzEABAsxAAR7MQAE6zEABVsxAA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", "base64"); var wasmModule = new WebAssembly.Module(bytes); var wasmInstance = new WebAssembly.Instance(wasmModule, imports); wasm = wasmInstance.exports; diff --git a/deps/amaro/dist/package.json b/deps/amaro/dist/package.json index 542d98211b5eb9..9c2918a4024b22 100644 --- a/deps/amaro/dist/package.json +++ b/deps/amaro/dist/package.json @@ -4,7 +4,7 @@ "강동윤 " ], "description": "wasm module for swc", - "version": "1.7.14", + "version": "1.7.35", "license": "Apache-2.0", "repository": { "type": "git", diff --git a/deps/amaro/package.json b/deps/amaro/package.json index 210ffca37854bb..2c2aaba75111ac 100644 --- a/deps/amaro/package.json +++ b/deps/amaro/package.json @@ -1,6 +1,6 @@ { "name": "amaro", - "version": "0.1.8", + "version": "0.1.9", "description": "Node.js TypeScript wrapper", "license": "MIT", "type": "commonjs", diff --git a/src/amaro_version.h b/src/amaro_version.h index 5f95a43bb3a95f..af86a58fa70927 100644 --- a/src/amaro_version.h +++ b/src/amaro_version.h @@ -2,5 +2,5 @@ // Refer to tools/dep_updaters/update-amaro.sh #ifndef SRC_AMARO_VERSION_H_ #define SRC_AMARO_VERSION_H_ -#define AMARO_VERSION "0.1.8" +#define AMARO_VERSION "0.1.9" #endif // SRC_AMARO_VERSION_H_ From 48bb87b0593d72ede41caa2707e43640085a3105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Sat, 12 Oct 2024 13:21:09 +0200 Subject: [PATCH 07/93] esm: mark import attributes and JSON module as stable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The two proposals reached stage 4 at the October 2024 meeting. PR-URL: https://github.com/nodejs/node/pull/55333 Reviewed-By: Yagiz Nizipli Reviewed-By: Antoine du Hamel Reviewed-By: Marco Ippolito Reviewed-By: Michaël Zasso Reviewed-By: Matteo Collina Reviewed-By: Luigi Pinca --- doc/api/esm.md | 17 +++++++---------- lib/internal/modules/esm/translators.js | 1 - test/es-module/test-esm-json.mjs | 4 ++-- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/doc/api/esm.md b/doc/api/esm.md index c4c713238f5bea..4d257c37bf01ff 100644 --- a/doc/api/esm.md +++ b/doc/api/esm.md @@ -270,13 +270,9 @@ changes: description: Switch from Import Assertions to Import Attributes. --> -> Stability: 1.1 - Active development - -> This feature was previously named "Import assertions", and using the `assert` -> keyword instead of `with`. Any uses in code of the prior `assert` keyword -> should be updated to use `with` instead. +> Stability: 2 - Stable -The [Import Attributes proposal][] adds an inline syntax for module import +[Import attributes][Import Attributes MDN] are an inline syntax for module import statements to pass on more information alongside the module specifier. ```js @@ -286,13 +282,14 @@ const { default: barData } = await import('./bar.json', { with: { type: 'json' } }); ``` -Node.js supports the following `type` values, for which the attribute is -mandatory: +Node.js only supports the `type` attribute, for which it supports the following values: | Attribute `type` | Needed for | | ---------------- | ---------------- | | `'json'` | [JSON modules][] | +The `type: 'json'` attribute is mandatory when importing JSON modules. + ## Built-in modules [Built-in modules][] provide named exports of their public API. A @@ -631,7 +628,7 @@ separate cache. ## JSON modules -> Stability: 1 - Experimental +> Stability: 2 - Stable JSON files can be referenced by `import`: @@ -1101,7 +1098,7 @@ resolution for ESM specifiers is [commonjs-extension-resolution-loader][]. [Dynamic `import()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import [ES Module Integration Proposal for WebAssembly]: https://github.com/webassembly/esm-integration [Import Attributes]: #import-attributes -[Import Attributes proposal]: https://github.com/tc39/proposal-import-attributes +[Import Attributes MDN]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import/with [JSON modules]: #json-modules [Loading ECMAScript modules using `require()`]: modules.md#loading-ecmascript-modules-using-require [Module customization hooks]: module.md#customization-hooks diff --git a/lib/internal/modules/esm/translators.js b/lib/internal/modules/esm/translators.js index 37a2b997f89214..5426051563047c 100644 --- a/lib/internal/modules/esm/translators.js +++ b/lib/internal/modules/esm/translators.js @@ -365,7 +365,6 @@ translators.set('builtin', function builtinStrategy(url) { // Strategy for loading a JSON file translators.set('json', function jsonStrategy(url, source) { - emitExperimentalWarning('Importing JSON modules'); assertBufferSource(source, true, 'load'); debug(`Loading JSONModule ${url}`); const pathname = StringPrototypeStartsWith(url, 'file:') ? diff --git a/test/es-module/test-esm-json.mjs b/test/es-module/test-esm-json.mjs index 8be7b60d322573..083194ab4237b0 100644 --- a/test/es-module/test-esm-json.mjs +++ b/test/es-module/test-esm-json.mjs @@ -16,12 +16,12 @@ describe('ESM: importing JSON', () => { assert.strictEqual(secret.ofLife, 42); }); - it('should print an experimental warning', async () => { + it('should not print an experimental warning', async () => { const { code, signal, stderr } = await spawnPromisified(execPath, [ fixtures.path('/es-modules/json-modules.mjs'), ]); - assert.match(stderr, /ExperimentalWarning: Importing JSON modules/); + assert.strictEqual(stderr, ''); assert.strictEqual(code, 0); assert.strictEqual(signal, null); }); From fe667bea2879e49984d261571678d01d724a361c Mon Sep 17 00:00:00 2001 From: Xuguang Mei Date: Sun, 13 Oct 2024 22:01:47 +0800 Subject: [PATCH 08/93] assert: fix deepEqual always return true on URL PR-URL: https://github.com/nodejs/node/pull/50853 Fixes: https://github.com/nodejs/node/issues/50836 Reviewed-By: Yagiz Nizipli Reviewed-By: Marco Ippolito Reviewed-By: Ruben Bridgewater --- lib/internal/util/comparisons.js | 5 ++++ lib/internal/util/inspect.js | 10 +++++++ test/parallel/test-assert-deep.js | 44 +++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+) diff --git a/lib/internal/util/comparisons.js b/lib/internal/util/comparisons.js index c98199f7c376a6..b28860e9000ce8 100644 --- a/lib/internal/util/comparisons.js +++ b/lib/internal/util/comparisons.js @@ -27,6 +27,7 @@ const { const { compare } = internalBinding('buffer'); const assert = require('internal/assert'); +const { isURL } = require('internal/url'); const types = require('internal/util/types'); const { isAnyArrayBuffer, @@ -287,6 +288,10 @@ function innerDeepEqual(val1, val2, strict, memos) { } } else if (isWeakMap(val1) || isWeakSet(val1)) { return false; + } else if (isURL(val1)) { + if (!isURL(val2) || val1.href !== val2.href) { + return false; + } } return keyCheck(val1, val2, strict, memos, kNoIterator); diff --git a/lib/internal/util/inspect.js b/lib/internal/util/inspect.js index df90ed34d51d73..ade91b3c5a6711 100644 --- a/lib/internal/util/inspect.js +++ b/lib/internal/util/inspect.js @@ -166,6 +166,11 @@ function pathToFileUrlHref(filepath) { return internalUrl.pathToFileURL(filepath).href; } +function isURL(value) { + internalUrl ??= require('internal/url'); + return typeof value.href === 'string' && value instanceof internalUrl.URL; +} + const builtInObjects = new SafeSet( ArrayPrototypeFilter( ObjectGetOwnPropertyNames(globalThis), @@ -1026,6 +1031,11 @@ function formatRaw(ctx, value, recurseTimes, typedArray) { if (keys.length === 0 && protoProps === undefined) { return base; } + } else if (isURL(value) && !(recurseTimes > ctx.depth && ctx.depth !== null)) { + base = value.href; + if (keys.length === 0 && protoProps === undefined) { + return base; + } } else { if (keys.length === 0 && protoProps === undefined) { if (isExternal(value)) { diff --git a/test/parallel/test-assert-deep.js b/test/parallel/test-assert-deep.js index a8bc5d3cf4e815..a83a9e3329e5e4 100644 --- a/test/parallel/test-assert-deep.js +++ b/test/parallel/test-assert-deep.js @@ -1346,3 +1346,47 @@ test('Comparing two different WeakSet instances', () => { const weakSet2 = new WeakSet(); assertNotDeepOrStrict(weakSet1, weakSet2); }); + +// check URL +{ + const a = new URL('http://foo'); + const b = new URL('http://bar'); + + assertNotDeepOrStrict(a, b); +} + +{ + const a = new URL('http://foo'); + const b = new URL('http://foo'); + + assertDeepAndStrictEqual(a, b); +} + +{ + const a = new URL('http://foo'); + const b = new URL('http://foo'); + a.bar = 1; + b.bar = 2; + assertNotDeepOrStrict(a, b); +} + +{ + const a = new URL('http://foo'); + const b = new URL('http://foo'); + a.bar = 1; + b.bar = 1; + assertDeepAndStrictEqual(a, b); +} + +{ + const a = new URL('http://foo'); + const b = new URL('http://bar'); + assert.throws( + () => assert.deepStrictEqual(a, b), + { + code: 'ERR_ASSERTION', + name: 'AssertionError', + message: /http:\/\/bar/ + } + ); +} From 07ad987aa1498028b2e0e3e428b10735ddd9a84b Mon Sep 17 00:00:00 2001 From: Jason Zhang Date: Mon, 14 Oct 2024 04:41:21 +1030 Subject: [PATCH 09/93] lib: convert transfer sequence to array in js This commit lets `tranfer` passed to `structuredClone` get validated at JS layer by doing webidl conversion. This avoids the C++ to JS function call overhead in the native implementaiton of `structuredClone` PR-URL: https://github.com/nodejs/node/pull/55317 Fixes: https://github.com/nodejs/node/issues/55280 Refs: https://github.com/nodejs/node/pull/50330 Reviewed-By: Joyee Cheung Reviewed-By: Matteo Collina Reviewed-By: James M Snell Reviewed-By: Matthew Aitken --- .../bootstrap/web/exposed-window-or-worker.js | 7 +++- lib/internal/perf/usertiming.js | 2 +- lib/internal/webidl.js | 12 ++++++ lib/internal/webstreams/readablestream.js | 3 +- lib/internal/worker/js_transferable.js | 37 +++++++++++++++++++ src/node_messaging.cc | 29 ++++++--------- test/parallel/test-structuredClone-global.js | 23 +++++++++++- 7 files changed, 89 insertions(+), 24 deletions(-) diff --git a/lib/internal/bootstrap/web/exposed-window-or-worker.js b/lib/internal/bootstrap/web/exposed-window-or-worker.js index d5d844b229003d..d7d9b60b1c8e94 100644 --- a/lib/internal/bootstrap/web/exposed-window-or-worker.js +++ b/lib/internal/bootstrap/web/exposed-window-or-worker.js @@ -38,8 +38,11 @@ const { } = require('internal/process/task_queues'); defineOperation(globalThis, 'queueMicrotask', queueMicrotask); -const { structuredClone } = internalBinding('messaging'); -defineOperation(globalThis, 'structuredClone', structuredClone); +defineLazyProperties( + globalThis, + 'internal/worker/js_transferable', + ['structuredClone'], +); defineLazyProperties(globalThis, 'buffer', ['atob', 'btoa']); // https://html.spec.whatwg.org/multipage/web-messaging.html#broadcasting-to-other-browsing-contexts diff --git a/lib/internal/perf/usertiming.js b/lib/internal/perf/usertiming.js index dfbbcbaf36c538..b2783799067dde 100644 --- a/lib/internal/perf/usertiming.js +++ b/lib/internal/perf/usertiming.js @@ -31,7 +31,7 @@ const { }, } = require('internal/errors'); -const { structuredClone } = internalBinding('messaging'); +const { structuredClone } = require('internal/worker/js_transferable'); const { lazyDOMException, kEnumerableProperty, diff --git a/lib/internal/webidl.js b/lib/internal/webidl.js index 1278f4cac7fb81..351c1398c6d49c 100644 --- a/lib/internal/webidl.js +++ b/lib/internal/webidl.js @@ -38,6 +38,16 @@ converters.any = (V) => { return V; }; +converters.object = (V, opts = kEmptyObject) => { + if (type(V) !== 'Object') { + throw makeException( + 'is not an object', + kEmptyObject, + ); + } + return V; +}; + // https://webidl.spec.whatwg.org/#abstract-opdef-integerpart const integerPart = MathTrunc; @@ -189,6 +199,8 @@ converters.DOMString = function DOMString(V) { return String(V); }; +converters['sequence'] = createSequenceConverter(converters.object); + function codedTypeError(message, errorProperties = kEmptyObject) { // eslint-disable-next-line no-restricted-syntax const err = new TypeError(message); diff --git a/lib/internal/webstreams/readablestream.js b/lib/internal/webstreams/readablestream.js index 10179321c10366..5d9379287e9605 100644 --- a/lib/internal/webstreams/readablestream.js +++ b/lib/internal/webstreams/readablestream.js @@ -74,6 +74,7 @@ const { kTransfer, kTransferList, markTransferMode, + structuredClone, } = require('internal/worker/js_transferable'); const { @@ -88,8 +89,6 @@ const { kControllerErrorFunction, } = require('internal/streams/utils'); -const { structuredClone } = internalBinding('messaging'); - const { ArrayBufferViewGetBuffer, ArrayBufferViewGetByteLength, diff --git a/lib/internal/worker/js_transferable.js b/lib/internal/worker/js_transferable.js index 083702149f29d9..58e377b87a9d11 100644 --- a/lib/internal/worker/js_transferable.js +++ b/lib/internal/worker/js_transferable.js @@ -3,6 +3,13 @@ const { Error, StringPrototypeSplit, } = primordials; +const { + codes: { + ERR_INVALID_ARG_TYPE, + ERR_MISSING_ARGS, + }, +} = require('internal/errors'); +const webidl = require('internal/webidl'); const { messaging_deserialize_symbol, messaging_transfer_symbol, @@ -11,6 +18,7 @@ const { } = internalBinding('symbols'); const { setDeserializerCreateObjectFunction, + structuredClone: nativeStructuredClone, } = internalBinding('messaging'); const { privateSymbols: { @@ -90,9 +98,38 @@ function markTransferMode(obj, cloneable = false, transferable = false) { obj[transfer_mode_private_symbol] = mode; } +function structuredClone(value, options) { + if (arguments.length === 0) { + throw new ERR_MISSING_ARGS('The value argument must be specified'); + } + + // TODO(jazelly): implement generic webidl dictionary converter + const prefix = 'Options'; + const optionsType = webidl.type(options); + if (optionsType !== 'Undefined' && optionsType !== 'Null' && optionsType !== 'Object') { + throw new ERR_INVALID_ARG_TYPE( + prefix, + ['object', 'null', 'undefined'], + options, + ); + } + const key = 'transfer'; + const idlOptions = { __proto__: null, [key]: [] }; + if (options != null && key in options && options[key] !== undefined) { + idlOptions[key] = webidl.converters['sequence'](options[key], { + __proto__: null, + context: 'Transfer', + }); + } + + const serializedData = nativeStructuredClone(value, idlOptions); + return serializedData; +} + module.exports = { markTransferMode, setup, + structuredClone, kClone: messaging_clone_symbol, kDeserialize: messaging_deserialize_symbol, kTransfer: messaging_transfer_symbol, diff --git a/src/node_messaging.cc b/src/node_messaging.cc index 9d9e27c3624e6b..a1c22cf5005121 100644 --- a/src/node_messaging.cc +++ b/src/node_messaging.cc @@ -1578,28 +1578,21 @@ static void StructuredClone(const FunctionCallbackInfo& args) { Realm* realm = Realm::GetCurrent(context); Environment* env = realm->env(); - if (args.Length() == 0) { - return THROW_ERR_MISSING_ARGS(env, "The value argument must be specified"); - } - Local value = args[0]; TransferList transfer_list; - if (!args[1]->IsNullOrUndefined()) { - if (!args[1]->IsObject()) { - return THROW_ERR_INVALID_ARG_TYPE( - env, "The options argument must be either an object or undefined"); - } - Local options = args[1].As(); - Local transfer_list_v; - if (!options->Get(context, env->transfer_string()) - .ToLocal(&transfer_list_v)) { - return; - } + Local options = args[1].As(); + Local transfer_list_v; + if (!options->Get(context, env->transfer_string()) + .ToLocal(&transfer_list_v)) { + return; + } - // TODO(joyeecheung): implement this in JS land to avoid the C++ -> JS - // cost to convert a sequence into an array. - if (!GetTransferList(env, context, transfer_list_v, &transfer_list)) { + Local arr = transfer_list_v.As(); + size_t length = arr->Length(); + transfer_list.AllocateSufficientStorage(length); + for (size_t i = 0; i < length; i++) { + if (!arr->Get(context, i).ToLocal(&transfer_list[i])) { return; } } diff --git a/test/parallel/test-structuredClone-global.js b/test/parallel/test-structuredClone-global.js index 34b6abe32d3fcf..ef6ddc56a73cca 100644 --- a/test/parallel/test-structuredClone-global.js +++ b/test/parallel/test-structuredClone-global.js @@ -8,12 +8,12 @@ assert.throws(() => structuredClone(undefined, ''), { code: 'ERR_INVALID_ARG_TYP assert.throws(() => structuredClone(undefined, 1), { code: 'ERR_INVALID_ARG_TYPE' }); assert.throws(() => structuredClone(undefined, { transfer: 1 }), { code: 'ERR_INVALID_ARG_TYPE' }); assert.throws(() => structuredClone(undefined, { transfer: '' }), { code: 'ERR_INVALID_ARG_TYPE' }); +assert.throws(() => structuredClone(undefined, { transfer: null }), { code: 'ERR_INVALID_ARG_TYPE' }); // Options can be null or undefined. assert.strictEqual(structuredClone(undefined), undefined); assert.strictEqual(structuredClone(undefined, null), undefined); // Transfer can be null or undefined. -assert.strictEqual(structuredClone(undefined, { transfer: null }), undefined); assert.strictEqual(structuredClone(undefined, { }), undefined); // Transferables or its subclasses should be received with its closest transferable superclass @@ -43,6 +43,27 @@ for (const Transferrable of [File, Blob]) { assert.ok(extendedTransfer instanceof Transferrable); } +// Transfer can be iterable +{ + const value = { + a: new ReadableStream(), + b: new WritableStream(), + }; + const cloned = structuredClone(value, { + transfer: { + *[Symbol.iterator]() { + for (const key in value) { + yield value[key]; + } + } + } + }); + for (const key in value) { + assert.ok(value[key].locked); + assert.ok(!cloned[key].locked); + } +} + { // See: https://github.com/nodejs/node/issues/49940 const cloned = structuredClone({}, { From 41f68f59afaed0d82764fa7e00af63aef944d6a7 Mon Sep 17 00:00:00 2001 From: Rafael Gonzaga Date: Sun, 13 Oct 2024 16:14:48 -0300 Subject: [PATCH 10/93] doc: fix ambasador markdown list PR-URL: https://github.com/nodejs/node/pull/55361 Reviewed-By: Marco Ippolito Reviewed-By: Matteo Collina Reviewed-By: Gireesh Punathil Reviewed-By: Luigi Pinca Reviewed-By: Benjamin Gruenbaum --- doc/contributing/advocacy-ambasador-program.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/contributing/advocacy-ambasador-program.md b/doc/contributing/advocacy-ambasador-program.md index f034af248e697c..3b518d092e1feb 100644 --- a/doc/contributing/advocacy-ambasador-program.md +++ b/doc/contributing/advocacy-ambasador-program.md @@ -45,9 +45,9 @@ If there is no objection within 14 days, the nomination is approved. To onboard an ambassador, a member of the TSC will: -* \[] Add the ambassador to the nodejs/ambassadors team. -* \[] Add the ambassador to the nodejs/ambassadors `README.md`. -* \[] Add the ambassador to the OpenJS Slack channel. +* \[ ] Add the ambassador to the nodejs/ambassadors team. +* \[ ] Add the ambassador to the nodejs/ambassadors `README.md`. +* \[ ] Add the ambassador to the OpenJS Slack channel. ## Reviewing content From bdc2c3bb94a0d2d2519df01e48e89b3428c302f7 Mon Sep 17 00:00:00 2001 From: Karl Horky Date: Sun, 13 Oct 2024 21:42:03 +0200 Subject: [PATCH 11/93] doc: add missing return values in buffer docs PR-URL: https://github.com/nodejs/node/pull/55273 Reviewed-By: Luigi Pinca Reviewed-By: Jacob Smith Reviewed-By: Trivikram Kamat --- doc/api/buffer.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/doc/api/buffer.md b/doc/api/buffer.md index bd87ca62c04766..d72e8720c688fa 100644 --- a/doc/api/buffer.md +++ b/doc/api/buffer.md @@ -688,6 +688,7 @@ changes: with. **Default:** `0`. * `encoding` {string} If `fill` is a string, this is its encoding. **Default:** `'utf8'`. +* Returns: {Buffer} Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the `Buffer` will be zero-filled. @@ -782,6 +783,7 @@ changes: --> * `size` {integer} The desired length of the new `Buffer`. +* Returns: {Buffer} Allocates a new `Buffer` of `size` bytes. If `size` is larger than [`buffer.constants.MAX_LENGTH`][] or smaller than 0, [`ERR_OUT_OF_RANGE`][] @@ -852,6 +854,7 @@ changes: --> * `size` {integer} The desired length of the new `Buffer`. +* Returns: {Buffer} Allocates a new `Buffer` of `size` bytes. If `size` is larger than [`buffer.constants.MAX_LENGTH`][] or smaller than 0, [`ERR_OUT_OF_RANGE`][] @@ -1098,6 +1101,7 @@ added: * `offset` {integer} The starting offset within `view`. **Default:**: `0`. * `length` {integer} The number of elements from `view` to copy. **Default:** `view.length - offset`. +* Returns: {Buffer} Copies the underlying memory of `view` into a new `Buffer`. @@ -1117,6 +1121,7 @@ added: v5.10.0 --> * `array` {integer\[]} +* Returns: {Buffer} Allocates a new `Buffer` using an `array` of bytes in the range `0` – `255`. Array entries outside that range will be truncated to fit into it. @@ -1159,6 +1164,7 @@ added: v5.10.0 * `byteOffset` {integer} Index of first byte to expose. **Default:** `0`. * `length` {integer} Number of bytes to expose. **Default:** `arrayBuffer.byteLength - byteOffset`. +* Returns: {Buffer} This creates a view of the [`ArrayBuffer`][] without copying the underlying memory. For example, when passed a reference to the `.buffer` property of a @@ -1271,6 +1277,7 @@ added: v5.10.0 * `buffer` {Buffer|Uint8Array} An existing `Buffer` or [`Uint8Array`][] from which to copy data. +* Returns: {Buffer} Copies the passed `buffer` data onto a new `Buffer` instance. @@ -1314,6 +1321,7 @@ added: v8.2.0 * `object` {Object} An object supporting `Symbol.toPrimitive` or `valueOf()`. * `offsetOrEncoding` {integer|string} A byte-offset or encoding. * `length` {integer} A length. +* Returns: {Buffer} For objects whose `valueOf()` function returns a value not strictly equal to `object`, returns `Buffer.from(object.valueOf(), offsetOrEncoding, length)`. @@ -1372,6 +1380,7 @@ added: v5.10.0 * `string` {string} A string to encode. * `encoding` {string} The encoding of `string`. **Default:** `'utf8'`. +* Returns: {Buffer} Creates a new `Buffer` containing `string`. The `encoding` parameter identifies the character encoding to be used when converting `string` into bytes. From d42522eec5d89e9c62484182a402d90c2d42ca47 Mon Sep 17 00:00:00 2001 From: minkyu_kim Date: Mon, 14 Oct 2024 15:41:11 +0900 Subject: [PATCH 12/93] build: fix make errors that occur in Makefile fix make errors that occur in coverage-clean case and coverage-test in Makefile PR-URL: https://github.com/nodejs/node/pull/55287 Reviewed-By: LiviaMedeiros Reviewed-By: Luigi Pinca --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index b8d29cdae2acb6..7f3f09ecbcbb82 100644 --- a/Makefile +++ b/Makefile @@ -243,7 +243,7 @@ coverage-clean: ## Remove coverage artifacts. $(RM) -r coverage/tmp @if [ -d "out/Release/obj.target" ]; then \ $(FIND) out/$(BUILDTYPE)/obj.target \( -name "*.gcda" -o -name "*.gcno" \) \ - -type f -exec $(RM) {};\ + -type f | xargs $(RM); \ fi .PHONY: coverage @@ -269,7 +269,7 @@ coverage-build-js: ## Build JavaScript coverage files. .PHONY: coverage-test coverage-test: coverage-build ## Run the tests and generate a coverage report. @if [ -d "out/Release/obj.target" ]; then \ - $(FIND) out/$(BUILDTYPE)/obj.target -name "*.gcda" -type f -exec $(RM) {}; \ + $(FIND) out/$(BUILDTYPE)/obj.target -name "*.gcda" -type f | xargs $(RM); \ fi -NODE_V8_COVERAGE=coverage/tmp \ TEST_CI_ARGS="$(TEST_CI_ARGS) --type=coverage" $(MAKE) $(COVTESTS) From eb2fab3da1cc5e3e7a1aa636112561fbcf1f78e2 Mon Sep 17 00:00:00 2001 From: minkyu_kim Date: Mon, 14 Oct 2024 15:41:27 +0900 Subject: [PATCH 13/93] test: update test_util.cc for coverage update test_util.cc for code coverage src/util-inl.h:PopFront() PR-URL: https://github.com/nodejs/node/pull/55291 Reviewed-By: Yagiz Nizipli Reviewed-By: Luigi Pinca --- test/cctest/test_util.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/test/cctest/test_util.cc b/test/cctest/test_util.cc index 79113965f50e36..c3beea15f2dfc4 100644 --- a/test/cctest/test_util.cc +++ b/test/cctest/test_util.cc @@ -27,6 +27,7 @@ TEST_F(UtilTest, ListHead) { List list; EXPECT_TRUE(list.IsEmpty()); + EXPECT_TRUE(list.PopFront() == nullptr); Item one; EXPECT_TRUE(one.node_.IsEmpty()); From bfb3c621c452ec05f60ffd141d8e6b8da5e53e00 Mon Sep 17 00:00:00 2001 From: Santiago Gimeno Date: Fri, 11 Oct 2024 09:30:43 +0200 Subject: [PATCH 14/93] deps: update libuv to 1.49.1 Refs: https://github.com/libuv/libuv/releases/tag/v1.49.1 PR-URL: https://github.com/nodejs/node/pull/55114 Refs: https://github.com/libuv/libuv/releases/tag/v1.49.0 Reviewed-By: Rafael Gonzaga Reviewed-By: Luigi Pinca --- deps/uv/.mailmap | 7 +- deps/uv/AUTHORS | 21 ++ deps/uv/CMakeLists.txt | 29 +- deps/uv/ChangeLog | 241 ++++++++++++++- deps/uv/Makefile.am | 4 + deps/uv/README.md | 12 + deps/uv/configure.ac | 2 +- deps/uv/docs/src/fs.rst | 28 +- deps/uv/docs/src/fs_event.rst | 11 +- deps/uv/docs/src/handle.rst | 4 +- deps/uv/docs/src/loop.rst | 20 +- deps/uv/docs/src/misc.rst | 41 +++ deps/uv/docs/src/poll.rst | 2 +- deps/uv/docs/src/process.rst | 6 +- deps/uv/docs/src/request.rst | 26 +- deps/uv/docs/src/tcp.rst | 58 +++- deps/uv/docs/src/tty.rst | 2 +- deps/uv/docs/src/udp.rst | 79 +++-- deps/uv/include/uv.h | 62 ++-- deps/uv/include/uv/tree.h | 253 +--------------- deps/uv/include/uv/version.h | 4 +- deps/uv/include/uv/win.h | 4 +- deps/uv/src/random.c | 2 +- deps/uv/src/threadpool.c | 2 +- deps/uv/src/unix/async.c | 132 ++++++++- deps/uv/src/unix/core.c | 171 +++++++++-- deps/uv/src/unix/cygwin.c | 40 ++- deps/uv/src/unix/darwin-syscalls.h | 17 ++ deps/uv/src/unix/darwin.c | 8 +- deps/uv/src/unix/freebsd.c | 7 +- deps/uv/src/unix/fs.c | 190 ++++++++++-- deps/uv/src/unix/fsevents.c | 13 +- deps/uv/src/unix/getaddrinfo.c | 2 +- deps/uv/src/unix/getnameinfo.c | 2 +- deps/uv/src/unix/internal.h | 60 +++- deps/uv/src/unix/kqueue.c | 44 +++ deps/uv/src/unix/linux.c | 371 +++++++++++++++++------- deps/uv/src/unix/loop.c | 8 + deps/uv/src/unix/pipe.c | 39 ++- deps/uv/src/unix/process.c | 9 +- deps/uv/src/unix/signal.c | 2 +- deps/uv/src/unix/stream.c | 45 +-- deps/uv/src/unix/tcp.c | 42 ++- deps/uv/src/unix/tty.c | 33 ++- deps/uv/src/unix/udp.c | 193 +++++++----- deps/uv/src/uv-common.h | 8 +- deps/uv/src/win/error.c | 12 +- deps/uv/src/win/fs-event.c | 20 +- deps/uv/src/win/fs.c | 309 ++++++++++++++------ deps/uv/src/win/getaddrinfo.c | 126 ++++---- deps/uv/src/win/getnameinfo.c | 4 +- deps/uv/src/win/internal.h | 2 + deps/uv/src/win/pipe.c | 267 ++++++++++------- deps/uv/src/win/process-stdio.c | 35 ++- deps/uv/src/win/process.c | 75 ++--- deps/uv/src/win/req-inl.h | 10 +- deps/uv/src/win/signal.c | 2 +- deps/uv/src/win/stream.c | 6 +- deps/uv/src/win/tcp.c | 45 +-- deps/uv/src/win/thread.c | 44 +-- deps/uv/src/win/tty.c | 8 +- deps/uv/src/win/udp.c | 12 +- deps/uv/src/win/util.c | 90 +++--- deps/uv/src/win/winapi.c | 12 +- deps/uv/src/win/winapi.h | 61 ++++ deps/uv/test/task.h | 4 + deps/uv/test/test-emfile.c | 8 + deps/uv/test/test-env-vars.c | 5 + deps/uv/test/test-fs-copyfile.c | 6 + deps/uv/test/test-fs-event.c | 305 +++++++++---------- deps/uv/test/test-fs-readdir.c | 86 ++++++ deps/uv/test/test-fs.c | 47 ++- deps/uv/test/test-homedir.c | 9 + deps/uv/test/test-iouring-pollhup.c | 111 +++++++ deps/uv/test/test-list.h | 23 +- deps/uv/test/test-pipe-bind-error.c | 38 ++- deps/uv/test/test-pipe-getsockname.c | 79 ++++- deps/uv/test/test-platform-output.c | 39 +++ deps/uv/test/test-poll.c | 57 +++- deps/uv/test/test-ref.c | 4 +- deps/uv/test/test-spawn.c | 4 +- deps/uv/test/test-tcp-flags.c | 9 +- deps/uv/test/test-tcp-reuseport.c | 248 ++++++++++++++++ deps/uv/test/test-tmpdir.c | 7 + deps/uv/test/test-udp-multicast-join.c | 2 +- deps/uv/test/test-udp-multicast-join6.c | 5 + deps/uv/test/test-udp-recv-in-a-row.c | 21 +- deps/uv/test/test-udp-reuseport.c | 287 ++++++++++++++++++ deps/uv/uv.gyp | 1 + 89 files changed, 3598 insertions(+), 1303 deletions(-) create mode 100644 deps/uv/src/unix/darwin-syscalls.h create mode 100644 deps/uv/test/test-iouring-pollhup.c create mode 100644 deps/uv/test/test-tcp-reuseport.c create mode 100644 deps/uv/test/test-udp-reuseport.c diff --git a/deps/uv/.mailmap b/deps/uv/.mailmap index bf12432495de03..97f5d1f2c004c9 100644 --- a/deps/uv/.mailmap +++ b/deps/uv/.mailmap @@ -4,6 +4,7 @@ Aaron Bieber Alan Gutierrez Andrius Bentkus Andy Fiddaman +Andy Pan Bert Belder Bert Belder Bert Belder @@ -18,6 +19,7 @@ David Carlier Devchandra Meetei Leishangthem Fedor Indutny Frank Denis +Hüseyin Açacak <110401522+huseyinacacak-janea@users.noreply.github.com> Imran Iqbal Isaac Z. Schlueter Jason Williams @@ -37,6 +39,7 @@ Michael Neumann Michael Penick Nicholas Vavilov Nick Logan +Olivier Valentin Rasmus Christian Pedersen Rasmus Christian Pedersen Richard Lau @@ -47,8 +50,8 @@ Sakthipriyan Vairamani Sam Roberts San-Tai Hsu Santiago Gimeno -Saúl Ibarra Corretgé -Saúl Ibarra Corretgé +Saúl Ibarra Corretgé +Saúl Ibarra Corretgé Shigeki Ohtsu Shuowang (Wayne) Zhang TK-one diff --git a/deps/uv/AUTHORS b/deps/uv/AUTHORS index f3942ced3c5703..807440b30e8488 100644 --- a/deps/uv/AUTHORS +++ b/deps/uv/AUTHORS @@ -567,3 +567,24 @@ Ardi Nugraha <33378542+ardi-nugraha@users.noreply.github.com> Anton Bachin Trevor Flynn Andy Pan +Viacheslav Muravyev +Anthony Alayo +Thomas Walter <31201229+waltoss@users.noreply.github.com> +hiiizxf <385122613@qq.com> +Geddy +Farzin Monsef +tgolang <154592711+tgolang@users.noreply.github.com> +josedelinux +Hüseyin Açacak <110401522+huseyinacacak-janea@users.noreply.github.com> +Uilian Ries +Olivier Valentin +郑苏波 (Super Zheng) +zeertzjq +Ian Butterworth +握猫猫 <164346864@qq.com> +Zuohui Yang <274048862@qq.com> +Edigleysson Silva (Edy) +Raihaan Shouhell +Rialbat +Adam +Poul T Lomholt diff --git a/deps/uv/CMakeLists.txt b/deps/uv/CMakeLists.txt index 5e8e0166d743bc..28c6df25666967 100644 --- a/deps/uv/CMakeLists.txt +++ b/deps/uv/CMakeLists.txt @@ -81,15 +81,20 @@ if(TSAN) endif() if(UBSAN) + cmake_minimum_required(VERSION 3.13) list(APPEND uv_defines __UBSAN__=1) if(CMAKE_C_COMPILER_ID MATCHES "AppleClang|GNU|Clang") - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-omit-frame-pointer -fsanitize=undefined") - set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fno-omit-frame-pointer -fsanitize=undefined") - set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fno-omit-frame-pointer -fsanitize=undefined") - elseif(MSVC) - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /fsanitize=undefined") + add_compile_options("-fsanitize=undefined" "-fno-sanitize-recover=undefined") + if (NOT WIN32) + add_link_options("-fsanitize=undefined") + endif() + if(MSVC) + add_compile_options("/Oy-") + else() + add_compile_options("-fno-omit-frame-pointer") + endif() else() - message(SEND_ERROR "UndefinedBehaviorSanitizer support requires clang, gcc, or msvc. Try again with -DCMAKE_C_COMPILER.") + message(SEND_ERROR "UndefinedBehaviorSanitizer support requires clang or gcc. Try again with -DCMAKE_C_COMPILER.") endif() endif() @@ -307,6 +312,7 @@ if(APPLE) endif() if(CMAKE_SYSTEM_NAME STREQUAL "GNU") + list(APPEND uv_defines _GNU_SOURCE _POSIX_C_SOURCE=200112 _XOPEN_SOURCE=500) list(APPEND uv_libraries dl) list(APPEND uv_sources src/unix/bsd-ifaddrs.c @@ -566,6 +572,7 @@ if(LIBUV_BUILD_TESTS) test/test-hrtime.c test/test-idle.c test/test-idna.c + test/test-iouring-pollhup.c test/test-ip4-addr.c test/test-ip6-addr.c test/test-ip-name.c @@ -643,6 +650,7 @@ if(LIBUV_BUILD_TESTS) test/test-tcp-oob.c test/test-tcp-open.c test/test-tcp-read-stop.c + test/test-tcp-reuseport.c test/test-tcp-read-stop-start.c test/test-tcp-rst.c test/test-tcp-shutdown-after-write.c @@ -691,6 +699,7 @@ if(LIBUV_BUILD_TESTS) test/test-udp-send-unreachable.c test/test-udp-try-send.c test/test-udp-recv-in-a-row.c + test/test-udp-reuseport.c test/test-uname.c test/test-walk-handles.c test/test-watcher-cross-stop.c) @@ -787,6 +796,14 @@ if(MSVC) endif() endif() +if(BUILD_SHARED_LIBS) + set(LIB_SELECTED uv) +else() + set(LIB_SELECTED uv_a) +endif() + +add_library(libuv::libuv ALIAS ${LIB_SELECTED}) + message(STATUS "summary of build options: Install prefix: ${CMAKE_INSTALL_PREFIX} Target system: ${CMAKE_SYSTEM_NAME} diff --git a/deps/uv/ChangeLog b/deps/uv/ChangeLog index 05c1cb7e748b43..e1d1aa32989124 100644 --- a/deps/uv/ChangeLog +++ b/deps/uv/ChangeLog @@ -1,4 +1,237 @@ -2024.02.07, Version 1.48.0 (Stable) +2024.10.11, Version 1.49.1 (Stable) + +Changes since version 1.49.0: + +* build: add darwin-syscalls.h to release tarball (Ben Noordhuis) + +* linux: use IORING_SETUP_NO_SQARRAY when available (Ben Noordhuis) + +* linux: use IORING_OP_FTRUNCATE when available (Ben Noordhuis) + +* win: fix pNtQueryDirectoryFile check (Rialbat) + +* win: fix WriteFile() error translation (Santiago Gimeno) + +* win,fs: uv_fs_rmdir() to return ENOENT on file (Santiago Gimeno) + +* win,pipe: ipc code does not support async read (Jameson Nash) + +* netbsd: fix build (Adam) + +* win,fs: fix bug in fs__readdir (Hüseyin Açacak) + +* unix: workaround gcc bug on armv7 (Santiago Gimeno) + +* unix: work around arm-linux-gnueabihf-gcc bug (Ben Noordhuis) + +* unix: fix uv_tcp_keepalive in smartOS (Santiago Gimeno) + +* unix: fix uv_getrusage ru_maxrss on solaris (Poul T Lomholt) + + +2024.09.25, Version 1.49.0 (Stable), d2e56a5e8d3e39947b78405ca6e4727c70f5568a + +Changes since version 1.48.0: + +* test: fix -Wpointer-to-int-cast on 32 bits systems (Ben Noordhuis) + +* build: add alias for libuv to CMakeLists.txt (Anthony Alayo) + +* linux: create io_uring sqpoll ring lazily (Ben Noordhuis) + +* misc: run sample CI when code changes (Jameson Nash) + +* linux: fix uv_available_parallelism using cgroup (Thomas Walter) + +* doc: fix tty example segfault (hiiizxf) + +* udp,unix: fix sendmsg use-after-free (Geddy) + +* cygwin: implement uv_resident_set_memory (Farzin Monsef) + +* win: almost fix race detecting ESRCH in uv_kill (Santiago Gimeno) + +* test: disable env var test under win32+asan (Ben Noordhuis) + +* unix,fs: fix realpath calls that use the system allocator (Saúl Ibarra + Corretgé) + +* sunos: sync tcp keep-alive with other unices (Andy Pan) + +* linux: fix /proc/self/stat executable name parsing (Farzin Monsef) + +* test,ci: fix [AM]San, disable ASLR (Ben Noordhuis) + +* win: remove _alloca usage (Ben Noordhuis) + +* unix: reinstate preadv/pwritev fallback code (Ben Noordhuis) + +* linux: don't delay EPOLL_CTL_DEL operations (Ben Noordhuis) + +* doc: fix typos in ChangeLog (tgolang) + +* unix,win: error on zero delay tcp keepalive (Saúl Ibarra Corretgé) + +* win: simplify uv_once implementation (Saúl Ibarra Corretgé) + +* doc: correct udp socket options documentation (Ben Noordhuis) + +* linux: don't use sendmmsg() for single datagrams (Ben Noordhuis) + +* unix: fix fd leaks in SCM_RIGHTS error path (Ben Noordhuis) + +* win: robustify uv_os_getenv() error checking (Ben Noordhuis) + +* test: use newer ASSERT_MEM_EQ macro (Ben Noordhuis) + +* unix: de-duplicate conditions for using kqueue (Brad King) + +* darwin: simplify uv_hrtime (Saúl Ibarra Corretgé) + +* mailmap: update saghul's main email address (Saúl Ibarra Corretgé) + +* win: remove no longer needed define (Saúl Ibarra Corretgé) + +* doc: fix some typos (josedelinux) + +* linux,darwin: make `uv_fs_copyfile` behaves like `cp -r` (Juan José Arboleda) + +* dragonfly: disable SO_REUSEPORT for UDP socket bindings (Andy Pan) + +* test: remove the obsolete HAVE_KQUEUE macro (Andy Pan) + +* unix: use the presence of SOCK_* instead of OS macros for socketpair (Andy + Pan) + +* bsd: support pipe2() on *BSD (Andy Pan) + +* unix: support SO_REUSEPORT with load balancing for TCP (Andy Pan) + +* doc: add entries for extended getpw (Juan José Arboleda) + +* test: fix the flaky test-tcp-reuseport (Andy Pan) + +* aix,ibmi: fix compilation errors in fs_copyfile (Jeffrey H. Johnson) + +* unix: support SO_REUSEPORT with load balancing for UDP (Andy Pan) + +* tcpkeepalive: distinguish OS versions and use proper time units (Andy Pan) + +* win: map ERROR_BAD_EXE_FORMAT to UV_EFTYPE (Hüseyin Açacak) + +* doc: add instruction how to install with Conan (Uilian Ries) + +* unix,win: remove unused req parameter from macros (Viacheslav Muravyev) + +* build: fix android ci build (Ben Noordhuis) + +* unix,win: export wtf8 functions properly (Ben Noordhuis) + +* hurd: add includes and macro prerequisites (Olivier Valentin) + +* hurd: stub uv_thread_setpriority() (Olivier Valentin) + +* ci: use macOS 12 for macOS and iOS builds (Saúl Ibarra Corretgé) + +* darwin: fix crash on iOS(arm64) (郑苏波 (Super Zheng)) + +* Create dependabot.yml for updating github-actions (Jameson Nash) + +* doc: correct names of Win32 APIs in fs.rst (zeertzjq) + +* ci: bump upload and download-artifact versions (dependabot[bot]) + +* ci: bump actions/setup-python from 4 to 5 (dependabot[bot]) + +* ci: bump KyleMayes/install-llvm-action from 1 to 2 (dependabot[bot]) + +* win,error: remap ERROR_NO_DATA to EAGAIN (Jameson Nash) + +* test: handle zero-length udp datagram (Ben Noordhuis) + +* misc: remove splay trees macros (Viacheslav Muravyev) + +* test,openbsd: remove superfluous ifdef guard (Ben Noordhuis) + +* win,fs: use posix delete semantics, if supported (Ian Butterworth) + +* win: fix env var in uv_os_homedir and uv_os_tmpdir (Hüseyin Açacak) + +* fsevents: detect watched directory removal (Santiago Gimeno) + +* ci: bump actions/checkout to 4 (dependabot[bot]) + +* linux: eliminate a read on eventfd per wakeup (Andy Pan) + +* test: pipe_overlong_path handle ENAMETOOLONG (Abdirahim Musse) + +* win,fs: use the new Windows fast stat API (Hüseyin Açacak) + +* win,pipe: fix race with concurrent readers (Jameson Nash) + +* win,signal: fix data race dispatching SIGWINCH (Jameson Nash) + +* build: ubsan fixes (Matheus Izvekov) + +* linux: disable SQPOLL io_uring by default (Santiago Gimeno) + +* win: fix fs.c ubsan failure (Matheus Izvekov) + +* test: rmdir can return `EEXIST` or `ENOTEMPTY` (Richard Lau) + +* test: check for `UV_CHANGE` or `UV_RENAME` event (Richard Lau) + +* unix,fs: silence -Wunused-result warning (Santiago Gimeno) + +* linux: support abstract unix socket autobinding (Ben Noordhuis) + +* kqueue: use EVFILT_USER for async if available (Andy Pan) + +* win: remove deprecated GetVersionExW call (Shelley Vohr) + +* doc: document uv_loop_option (握猫猫) + +* doc: fix the `uv_*_set_data` series of functions (握猫猫) + +* doc: properly label enumerations and types (握猫猫) + +* doc: document specific macOS fs_event behavior (Santiago Gimeno) + +* win,pipe: restore fallback handling for blocking pipes (Jameson Nash) + +* unix,win: remove unused rb-tree macro parameters (Viacheslav Muravyev) + +* win: compute parallelism from process cpu affinity (Ben Noordhuis) + +* win: use NtQueryInformationProcess in uv_os_getppid (Zuohui Yang) + +* win,pipe: fix missing assignment to success (Jameson Nash) + +* win: fix uv_available_parallelism on win32 (Ben Noordhuis) + +* win,pipe: fix another missing assignment to success (Jameson Nash) + +* kqueue: disallow ill-suited file descriptor kinds (Andy Pan) + +* unix: restore tty attributes on handle close (Ben Noordhuis) + +* test: delete test with invalid assumption (Ben Noordhuis) + +* dragonflybsd: fix compilation failure (Jeffrey H. Johnson) + +* test: run android tests on ci (Edigleysson Silva (Edy)) + +* darwin: add udp mmsg support (Raihaan Shouhell) + +* unix: work around arm-linux-gnueabihf-gcc bug (Ben Noordhuis) + +* unix: expand uv_available_parallelism() to support more platforms (Ondřej + Surý) + +* doc: add known issue in armv7 (Santiago Gimeno) + + +2024.02.07, Version 1.48.0 (Stable), e9f29cb984231524e3931aa0ae2c5dae1a32884e Changes since version 1.47.0: @@ -911,7 +1144,7 @@ Changes since version 1.41.0: * zos: treat __rfim_utok as binary (Shuowang (Wayne) Zhang) -* zos: use execvpe() to set environ explictly (Shuowang (Wayne) Zhang) +* zos: use execvpe() to set environ explicitly (Shuowang (Wayne) Zhang) * zos: use custom proctitle implementation (Shuowang (Wayne) Zhang) @@ -3417,7 +3650,7 @@ Changes since version 1.9.1: * zos: implement uv__io_check_fd (John Barboza) -* unix: unneccessary use const qualifier in container_of (John Barboza) +* unix: unnecessary use const qualifier in container_of (John Barboza) * win,tty: add support for ANSI codes in win10 v1511 (Imran Iqbal) @@ -5520,7 +5753,7 @@ Changes since version 0.11.8: is an int64_t, and no longer an int. (Bert Belder) * process: make uv_spawn() return some types of errors immediately on windows, - instead of passing the error code the the exit callback. This brings it on + instead of passing the error code the exit callback. This brings it on par with libuv's behavior on unix. (Bert Belder) diff --git a/deps/uv/Makefile.am b/deps/uv/Makefile.am index a14228da3bf7b2..f85a41316c8a43 100644 --- a/deps/uv/Makefile.am +++ b/deps/uv/Makefile.am @@ -198,6 +198,7 @@ test_run_tests_SOURCES = test/blackhole-server.c \ test/test-hrtime.c \ test/test-idle.c \ test/test-idna.c \ + test/test-iouring-pollhup.c \ test/test-ip4-addr.c \ test/test-ip6-addr.c \ test/test-ip-name.c \ @@ -275,6 +276,7 @@ test_run_tests_SOURCES = test/blackhole-server.c \ test/test-tcp-flags.c \ test/test-tcp-open.c \ test/test-tcp-read-stop.c \ + test/test-tcp-reuseport.c \ test/test-tcp-read-stop-start.c \ test/test-tcp-rst.c \ test/test-tcp-shutdown-after-write.c \ @@ -324,6 +326,7 @@ test_run_tests_SOURCES = test/blackhole-server.c \ test/test-udp-send-unreachable.c \ test/test-udp-try-send.c \ test/test-udp-recv-in-a-row.c \ + test/test-udp-reuseport.c \ test/test-uname.c \ test/test-walk-handles.c \ test/test-watcher-cross-stop.c @@ -427,6 +430,7 @@ libuv_la_CFLAGS += -D_DARWIN_UNLIMITED_SELECT=1 libuv_la_SOURCES += src/unix/bsd-ifaddrs.c \ src/unix/darwin-proctitle.c \ src/unix/darwin-stub.h \ + src/unix/darwin-syscalls.h \ src/unix/darwin.c \ src/unix/fsevents.c \ src/unix/kqueue.c \ diff --git a/deps/uv/README.md b/deps/uv/README.md index 09e9bf10b6dc31..12c3061a894c56 100644 --- a/deps/uv/README.md +++ b/deps/uv/README.md @@ -232,6 +232,18 @@ $ ./bootstrap-vcpkg.sh # for bash $ ./vcpkg install libuv ``` +### Install with Conan + +You can install pre-built binaries for libuv or build it from source using [Conan](https://conan.io/). Use the following command: + +```bash +conan install --requires="libuv/[*]" --build=missing +``` + +The libuv Conan recipe is kept up to date by Conan maintainers and community contributors. +If the version is out of date, please [create an issue or pull request](https://github.com/conan-io/conan-center-index) on the ConanCenterIndex repository. + + ### Running tests Some tests are timing sensitive. Relaxing test timeouts may be necessary diff --git a/deps/uv/configure.ac b/deps/uv/configure.ac index d4cc003e34388d..e3ee8a840c6872 100644 --- a/deps/uv/configure.ac +++ b/deps/uv/configure.ac @@ -13,7 +13,7 @@ # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. AC_PREREQ(2.57) -AC_INIT([libuv], [1.48.0], [https://github.com/libuv/libuv/issues]) +AC_INIT([libuv], [1.49.1], [https://github.com/libuv/libuv/issues]) AC_CONFIG_MACRO_DIR([m4]) m4_include([m4/libuv-extra-automake-flags.m4]) m4_include([m4/as_case.m4]) diff --git a/deps/uv/docs/src/fs.rst b/deps/uv/docs/src/fs.rst index 891ee74c19d912..7bc8d0cbfd165d 100644 --- a/deps/uv/docs/src/fs.rst +++ b/deps/uv/docs/src/fs.rst @@ -16,7 +16,10 @@ Starting with libuv v1.45.0, some file operations on Linux are handed off to `io_uring ` when possible. Apart from a (sometimes significant) increase in throughput there should be no change in observable behavior. Libuv reverts to using its threadpool when the necessary -kernel features are unavailable or unsuitable. +kernel features are unavailable or unsuitable. Starting with libuv v1.49.0 this +behavior was reverted and Libuv on Linux by default will be using the threadpool +again. In order to enable io_uring the :c:type:`uv_loop_t` instance must be +configured with the :c:type:`UV_LOOP_ENABLE_IO_URING_SQPOLL` option. .. note:: On Windows `uv_fs_*` functions use utf-8 encoding. @@ -129,10 +132,9 @@ Data types uint64_t f_spare[4]; } uv_statfs_t; -.. c:enum:: uv_dirent_t +.. c:enum:: uv_dirent_type_t - Cross platform (reduced) equivalent of ``struct dirent``. - Used in :c:func:`uv_fs_scandir_next`. + Type of dirent. :: @@ -147,6 +149,14 @@ Data types UV_DIRENT_BLOCK } uv_dirent_type_t; + +.. c:type:: uv_dirent_t + + Cross platform (reduced) equivalent of ``struct dirent``. + Used in :c:func:`uv_fs_scandir_next`. + + :: + typedef struct uv_dirent_s { const char* name; uv_dirent_type_t type; @@ -454,7 +464,7 @@ API .. c:function:: int uv_fs_realpath(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) - Equivalent to :man:`realpath(3)` on Unix. Windows uses `GetFinalPathNameByHandle `_. + Equivalent to :man:`realpath(3)` on Unix. Windows uses `GetFinalPathNameByHandleW `_. The resulting string is stored in `req->ptr`. .. warning:: @@ -653,7 +663,7 @@ File open constants .. note:: `UV_FS_O_RANDOM` is only supported on Windows via - `FILE_FLAG_RANDOM_ACCESS `_. + `FILE_FLAG_RANDOM_ACCESS `_. .. c:macro:: UV_FS_O_RDONLY @@ -670,7 +680,7 @@ File open constants .. note:: `UV_FS_O_SEQUENTIAL` is only supported on Windows via - `FILE_FLAG_SEQUENTIAL_SCAN `_. + `FILE_FLAG_SEQUENTIAL_SCAN `_. .. c:macro:: UV_FS_O_SHORT_LIVED @@ -678,7 +688,7 @@ File open constants .. note:: `UV_FS_O_SHORT_LIVED` is only supported on Windows via - `FILE_ATTRIBUTE_TEMPORARY `_. + `FILE_ATTRIBUTE_TEMPORARY `_. .. c:macro:: UV_FS_O_SYMLINK @@ -699,7 +709,7 @@ File open constants .. note:: `UV_FS_O_TEMPORARY` is only supported on Windows via - `FILE_ATTRIBUTE_TEMPORARY `_. + `FILE_ATTRIBUTE_TEMPORARY `_. .. c:macro:: UV_FS_O_TRUNC diff --git a/deps/uv/docs/src/fs_event.rst b/deps/uv/docs/src/fs_event.rst index 54a776ae6f1453..983db1a9d5608a 100644 --- a/deps/uv/docs/src/fs_event.rst +++ b/deps/uv/docs/src/fs_event.rst @@ -45,9 +45,9 @@ Data types be a relative path to a file contained in the directory, or `NULL` if the file name cannot be determined. - The `events` parameter is an ORed mask of :c:type:`uv_fs_event` elements. + The `events` parameter is an ORed mask of :c:enum:`uv_fs_event` elements. -.. c:type:: uv_fs_event +.. c:enum:: uv_fs_event Event types that :c:type:`uv_fs_event_t` handles monitor. @@ -58,7 +58,7 @@ Data types UV_CHANGE = 2 }; -.. c:type:: uv_fs_event_flags +.. c:enum:: uv_fs_event_flags Flags that can be passed to :c:func:`uv_fs_event_start` to control its behavior. @@ -109,10 +109,13 @@ API .. c:function:: int uv_fs_event_start(uv_fs_event_t* handle, uv_fs_event_cb cb, const char* path, unsigned int flags) Start the handle with the given callback, which will watch the specified - `path` for changes. `flags` can be an ORed mask of :c:type:`uv_fs_event_flags`. + `path` for changes. `flags` can be an ORed mask of :c:enum:`uv_fs_event_flags`. .. note:: Currently the only supported flag is ``UV_FS_EVENT_RECURSIVE`` and only on OSX and Windows. + .. note:: On macOS, events collected by the OS immediately before calling + ``uv_fs_event_start`` might be reported to the `uv_fs_event_cb` + callback. .. c:function:: int uv_fs_event_stop(uv_fs_event_t* handle) diff --git a/deps/uv/docs/src/handle.rst b/deps/uv/docs/src/handle.rst index e91d6e8fb2d906..2b1b8eec968844 100644 --- a/deps/uv/docs/src/handle.rst +++ b/deps/uv/docs/src/handle.rst @@ -94,7 +94,7 @@ Public members .. c:member:: uv_handle_type uv_handle_t.type - The :c:type:`uv_handle_type`, indicating the type of the underlying handle. Readonly. + The :c:enum:`uv_handle_type`, indicating the type of the underlying handle. Readonly. .. c:member:: void* uv_handle_t.data @@ -248,7 +248,7 @@ just for some handle types. .. versionadded:: 1.19.0 -.. c:function:: void* uv_handle_set_data(uv_handle_t* handle, void* data) +.. c:function:: void uv_handle_set_data(uv_handle_t* handle, void* data) Sets `handle->data` to `data`. diff --git a/deps/uv/docs/src/loop.rst b/deps/uv/docs/src/loop.rst index 0f5ddfb3ca21b7..d1f41e1c9f4483 100644 --- a/deps/uv/docs/src/loop.rst +++ b/deps/uv/docs/src/loop.rst @@ -16,6 +16,19 @@ Data types Loop data type. +.. c:enum:: uv_loop_option + + Additional loop options. + See :c:func:`uv_loop_configure`. + + :: + + typedef enum { + UV_LOOP_BLOCK_SIGNAL = 0, + UV_METRICS_IDLE_TIME, + UV_LOOP_USE_IO_URING_SQPOLL + } uv_loop_option; + .. c:enum:: uv_run_mode Mode used to run the loop with :c:func:`uv_run`. @@ -73,8 +86,13 @@ API This option is necessary to use :c:func:`uv_metrics_idle_time`. + - UV_LOOP_ENABLE_IO_URING_SQPOLL: Enable SQPOLL io_uring instance to handle + asynchronous file system operations. + .. versionchanged:: 1.39.0 added the UV_METRICS_IDLE_TIME option. + .. versionchanged:: 1.49.0 added the UV_LOOP_ENABLE_IO_URING_SQPOLL option. + .. c:function:: int uv_loop_close(uv_loop_t* loop) Releases all internal loop resources. Call this function only when the loop @@ -238,7 +256,7 @@ API .. versionadded:: 1.19.0 -.. c:function:: void* uv_loop_set_data(uv_loop_t* loop, void* data) +.. c:function:: void uv_loop_set_data(uv_loop_t* loop, void* data) Sets `loop->data` to `data`. diff --git a/deps/uv/docs/src/misc.rst b/deps/uv/docs/src/misc.rst index 989618304d16e5..61883b7e21e527 100644 --- a/deps/uv/docs/src/misc.rst +++ b/deps/uv/docs/src/misc.rst @@ -199,6 +199,18 @@ Data types char* homedir; } uv_passwd_t; +.. c:type:: uv_group_t + + Data type for group file information. + + :: + + typedef struct uv_group_s { + char* groupname; + unsigned long gid; + char** members; + } uv_group_t; + .. c:type:: uv_utsname_t Data type for operating system name and version information. @@ -566,6 +578,35 @@ API .. versionadded:: 1.9.0 +.. c:function:: int uv_os_get_passwd2(uv_passwd_t* pwd, uv_uid_t uid) + + Gets a subset of the password file entry for the provided uid. + The populated data includes the username, euid, gid, shell, + and home directory. On non-Windows systems, all data comes from + :man:`getpwuid_r(3)`. On Windows, uid and gid are set to -1 and have no + meaning, and shell is `NULL`. After successfully calling this function, the + memory allocated to `pwd` needs to be freed with + :c:func:`uv_os_free_passwd`. + + .. versionadded:: 1.45.0 + +.. c:function:: int uv_os_get_group(uv_group_t* group, uv_uid_t gid) + + Gets a subset of the group file entry for the provided uid. + The populated data includes the group name, gid, and members. On non-Windows + systems, all data comes from :man:`getgrgid_r(3)`. On Windows, uid and gid + are set to -1 and have no meaning. After successfully calling this function, + the memory allocated to `group` needs to be freed with + :c:func:`uv_os_free_group`. + + .. versionadded:: 1.45.0 + +.. c:function:: void uv_os_free_group(uv_passwd_t* pwd) + + Frees the memory previously allocated with :c:func:`uv_os_get_group`. + + .. versionadded:: 1.45.0 + .. c:function:: void uv_os_free_passwd(uv_passwd_t* pwd) Frees the `pwd` memory previously allocated with :c:func:`uv_os_get_passwd`. diff --git a/deps/uv/docs/src/poll.rst b/deps/uv/docs/src/poll.rst index f501089279d55e..b598f0737be9e8 100644 --- a/deps/uv/docs/src/poll.rst +++ b/deps/uv/docs/src/poll.rst @@ -45,7 +45,7 @@ Data types Type definition for callback passed to :c:func:`uv_poll_start`. -.. c:type:: uv_poll_event +.. c:enum:: uv_poll_event Poll event types diff --git a/deps/uv/docs/src/process.rst b/deps/uv/docs/src/process.rst index 8d2fdb3e47988d..f15dcf610f55ca 100644 --- a/deps/uv/docs/src/process.rst +++ b/deps/uv/docs/src/process.rst @@ -40,7 +40,7 @@ Data types will indicate the exit status and the signal that caused the process to terminate, if any. -.. c:type:: uv_process_flags +.. c:enum:: uv_process_flags Flags to be set on the flags field of :c:type:`uv_process_options_t`. @@ -190,7 +190,7 @@ Public members Command line arguments. args[0] should be the path to the program. On Windows this uses `CreateProcess` which concatenates the arguments into a string this can cause some strange errors. See the - ``UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS`` flag on :c:type:`uv_process_flags`. + ``UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS`` flag on :c:enum:`uv_process_flags`. .. c:member:: char** uv_process_options_t.env @@ -203,7 +203,7 @@ Public members .. c:member:: unsigned int uv_process_options_t.flags Various flags that control how :c:func:`uv_spawn` behaves. See - :c:type:`uv_process_flags`. + :c:enum:`uv_process_flags`. .. c:member:: int uv_process_options_t.stdio_count .. c:member:: uv_stdio_container_t* uv_process_options_t.stdio diff --git a/deps/uv/docs/src/request.rst b/deps/uv/docs/src/request.rst index a0414431b0e092..aacabe026a7525 100644 --- a/deps/uv/docs/src/request.rst +++ b/deps/uv/docs/src/request.rst @@ -21,17 +21,9 @@ Data types Union of all request types. +.. c:enum:: uv_req_type -Public members -^^^^^^^^^^^^^^ - -.. c:member:: void* uv_req_t.data - - Space for user-defined arbitrary data. libuv does not use this field. - -.. c:member:: uv_req_type uv_req_t.type - - Indicated the type of request. Readonly. + The kind of the libuv request. :: @@ -50,6 +42,18 @@ Public members } uv_req_type; +Public members +^^^^^^^^^^^^^^ + +.. c:member:: void* uv_req_t.data + + Space for user-defined arbitrary data. libuv does not use this field. + +.. c:member:: uv_req_type uv_req_t.type + + The :c:enum:`uv_req_type`, indicating the type of the request. Readonly. + + API --- @@ -95,7 +99,7 @@ API .. versionadded:: 1.19.0 -.. c:function:: void* uv_req_set_data(uv_req_t* req, void* data) +.. c:function:: void uv_req_set_data(uv_req_t* req, void* data) Sets `req->data` to `data`. diff --git a/deps/uv/docs/src/tcp.rst b/deps/uv/docs/src/tcp.rst index cccc86bbfc0335..f9b203c41997d9 100644 --- a/deps/uv/docs/src/tcp.rst +++ b/deps/uv/docs/src/tcp.rst @@ -16,6 +16,28 @@ Data types TCP handle type. +.. c:enum:: uv_tcp_flags + + Flags used in :c:func:`uv_tcp_bind`. + + :: + + enum uv_tcp_flags { + /* Used with uv_tcp_bind, when an IPv6 address is used. */ + UV_TCP_IPV6ONLY = 1, + + /* Enable SO_REUSEPORT socket option when binding the handle. + * This allows completely duplicate bindings by multiple processes + * or threads if they all set SO_REUSEPORT before binding the port. + * Incoming connections are distributed across the participating + * listener sockets. + * + * This flag is available only on Linux 3.9+, DragonFlyBSD 3.6+, + * FreeBSD 12.0+, Solaris 11.4, and AIX 7.2.5+ for now. + */ + UV_TCP_REUSEPORT = 2, + }; + Public members ^^^^^^^^^^^^^^ @@ -65,6 +87,10 @@ API at the end of this procedure, then the handle is destroyed with a ``UV_ETIMEDOUT`` error passed to the corresponding callback. + If `delay` is less than 1 then ``UV_EINVAL`` is returned. + + .. versionchanged:: 1.49.0 If `delay` is less than 1 then ``UV_EINVAL``` is returned. + .. c:function:: int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable) Enable / disable simultaneous asynchronous accept requests that are @@ -77,16 +103,34 @@ API .. c:function:: int uv_tcp_bind(uv_tcp_t* handle, const struct sockaddr* addr, unsigned int flags) - Bind the handle to an address and port. `addr` should point to an - initialized ``struct sockaddr_in`` or ``struct sockaddr_in6``. + Bind the handle to an address and port. When the port is already taken, you can expect to see an ``UV_EADDRINUSE`` - error from :c:func:`uv_listen` or :c:func:`uv_tcp_connect`. That is, - a successful call to this function does not guarantee that the call - to :c:func:`uv_listen` or :c:func:`uv_tcp_connect` will succeed as well. + error from :c:func:`uv_listen` or :c:func:`uv_tcp_connect` unless you specify + ``UV_TCP_REUSEPORT`` in `flags` for all the binding sockets. That is, a successful + call to this function does not guarantee that the call to :c:func:`uv_listen` or + :c:func:`uv_tcp_connect` will succeed as well. + + :param handle: TCP handle. It should have been initialized with :c:func:`uv_tcp_init`. + + :param addr: Address to bind to. It should point to an initialized ``struct sockaddr_in`` + or ``struct sockaddr_in6``. + + :param flags: Flags that control the behavior of binding the socket. + ``UV_TCP_IPV6ONLY`` can be contained in `flags` to disable dual-stack + support and only use IPv6. + ``UV_TCP_REUSEPORT`` can be contained in `flags` to enable the socket option + `SO_REUSEPORT` with the capability of load balancing that distribute incoming + connections across all listening sockets in multiple processes or threads. - `flags` can contain ``UV_TCP_IPV6ONLY``, in which case dual-stack support - is disabled and only IPv6 is used. + :returns: 0 on success, or an error code < 0 on failure. + + .. versionchanged:: 1.49.0 added the ``UV_TCP_REUSEPORT`` flag. + + .. note:: + ``UV_TCP_REUSEPORT`` flag is available only on Linux 3.9+, DragonFlyBSD 3.6+, + FreeBSD 12.0+, Solaris 11.4, and AIX 7.2.5+ at the moment. On other platforms + this function will return an UV_ENOTSUP error. .. c:function:: int uv_tcp_getsockname(const uv_tcp_t* handle, struct sockaddr* name, int* namelen) diff --git a/deps/uv/docs/src/tty.rst b/deps/uv/docs/src/tty.rst index f1acfdc1372940..7a2235210bf62a 100644 --- a/deps/uv/docs/src/tty.rst +++ b/deps/uv/docs/src/tty.rst @@ -98,7 +98,7 @@ API .. c:function:: int uv_tty_set_mode(uv_tty_t* handle, uv_tty_mode_t mode) .. versionchanged:: 1.2.0: the mode is specified as a - :c:type:`uv_tty_mode_t` value. + :c:enum:`uv_tty_mode_t` value. Set the TTY using the specified terminal mode. diff --git a/deps/uv/docs/src/udp.rst b/deps/uv/docs/src/udp.rst index d7da95edd506e2..31f7f7fd71ff47 100644 --- a/deps/uv/docs/src/udp.rst +++ b/deps/uv/docs/src/udp.rst @@ -18,7 +18,7 @@ Data types UDP send request type. -.. c:type:: uv_udp_flags +.. c:enum:: uv_udp_flags Flags used in :c:func:`uv_udp_bind` and :c:type:`uv_udp_recv_cb`.. @@ -28,19 +28,21 @@ Data types /* Disables dual stack mode. */ UV_UDP_IPV6ONLY = 1, /* - * Indicates message was truncated because read buffer was too small. The - * remainder was discarded by the OS. Used in uv_udp_recv_cb. - */ + * Indicates message was truncated because read buffer was too small. The + * remainder was discarded by the OS. Used in uv_udp_recv_cb. + */ UV_UDP_PARTIAL = 2, /* - * Indicates if SO_REUSEADDR will be set when binding the handle in - * uv_udp_bind. - * This sets the SO_REUSEPORT socket flag on the BSDs and OS X. On other - * Unix platforms, it sets the SO_REUSEADDR flag. What that means is that - * multiple threads or processes can bind to the same address without error - * (provided they all set the flag) but only the last one to bind will receive - * any traffic, in effect "stealing" the port from the previous listener. - */ + * Indicates if SO_REUSEADDR will be set when binding the handle. + * This sets the SO_REUSEPORT socket flag on the BSDs (except for + * DragonFlyBSD), OS X, and other platforms where SO_REUSEPORTs don't + * have the capability of load balancing, as the opposite of what + * UV_UDP_REUSEPORT would do. On other Unix platforms, it sets the + * SO_REUSEADDR flag. What that means is that multiple threads or + * processes can bind to the same address without error (provided + * they all set the flag) but only the last one to bind will receive + * any traffic, in effect "stealing" the port from the previous listener. + */ UV_UDP_REUSEADDR = 4, /* * Indicates that the message was received by recvmmsg, so the buffer provided @@ -62,8 +64,20 @@ Data types */ UV_UDP_LINUX_RECVERR = 32, /* - * Indicates that recvmmsg should be used, if available. - */ + * Indicates if SO_REUSEPORT will be set when binding the handle. + * This sets the SO_REUSEPORT socket option on supported platforms. + * Unlike UV_UDP_REUSEADDR, this flag will make multiple threads or + * processes that are binding to the same address and port "share" + * the port, which means incoming datagrams are distributed across + * the receiving sockets among threads or processes. + * + * This flag is available only on Linux 3.9+, DragonFlyBSD 3.6+, + * FreeBSD 12.0+, Solaris 11.4, and AIX 7.2.5+ for now. + */ + UV_UDP_REUSEPORT = 64, + /* + * Indicates that recvmmsg should be used, if available. + */ UV_UDP_RECVMMSG = 256 }; @@ -186,11 +200,24 @@ API with the address and port to bind to. :param flags: Indicate how the socket will be bound, - ``UV_UDP_IPV6ONLY``, ``UV_UDP_REUSEADDR``, and ``UV_UDP_RECVERR`` - are supported. + ``UV_UDP_IPV6ONLY``, ``UV_UDP_REUSEADDR``, ``UV_UDP_REUSEPORT``, + and ``UV_UDP_RECVERR`` are supported. :returns: 0 on success, or an error code < 0 on failure. + .. versionchanged:: 1.49.0 added the ``UV_UDP_REUSEPORT`` flag. + + .. note:: + ``UV_UDP_REUSEPORT`` flag is available only on Linux 3.9+, DragonFlyBSD 3.6+, + FreeBSD 12.0+, Solaris 11.4, and AIX 7.2.5+ at the moment. On other platforms + this function will return an UV_ENOTSUP error. + For platforms where `SO_REUSEPORT`s have the capability of load balancing, + specifying both ``UV_UDP_REUSEADDR`` and ``UV_UDP_REUSEPORT`` in flags is allowed + and `SO_REUSEPORT` will always override the behavior of `SO_REUSEADDR`. + For platforms where `SO_REUSEPORT`s don't have the capability of load balancing, + specifying both ``UV_UDP_REUSEADDR`` and ``UV_UDP_REUSEPORT`` in flags will fail, + returning an UV_ENOTSUP error. + .. c:function:: int uv_udp_connect(uv_udp_t* handle, const struct sockaddr* addr) Associate the UDP handle to a remote address and port, so every @@ -285,7 +312,9 @@ API local sockets. :param handle: UDP handle. Should have been initialized with - :c:func:`uv_udp_init`. + :c:func:`uv_udp_init_ex` as either ``AF_INET`` or ``AF_INET6``, or have + been bound to an address explicitly with :c:func:`uv_udp_bind`, or + implicitly with :c:func:`uv_udp_send()` or :c:func:`uv_udp_recv_start`. :param on: 1 for on, 0 for off. @@ -296,7 +325,9 @@ API Set the multicast ttl. :param handle: UDP handle. Should have been initialized with - :c:func:`uv_udp_init`. + :c:func:`uv_udp_init_ex` as either ``AF_INET`` or ``AF_INET6``, or have + been bound to an address explicitly with :c:func:`uv_udp_bind`, or + implicitly with :c:func:`uv_udp_send()` or :c:func:`uv_udp_recv_start`. :param ttl: 1 through 255. @@ -307,7 +338,9 @@ API Set the multicast interface to send or receive data on. :param handle: UDP handle. Should have been initialized with - :c:func:`uv_udp_init`. + :c:func:`uv_udp_init_ex` as either ``AF_INET`` or ``AF_INET6``, or have + been bound to an address explicitly with :c:func:`uv_udp_bind`, or + implicitly with :c:func:`uv_udp_send()` or :c:func:`uv_udp_recv_start`. :param interface_addr: interface address. @@ -318,7 +351,9 @@ API Set broadcast on or off. :param handle: UDP handle. Should have been initialized with - :c:func:`uv_udp_init`. + :c:func:`uv_udp_init_ex` as either ``AF_INET`` or ``AF_INET6``, or have + been bound to an address explicitly with :c:func:`uv_udp_bind`, or + implicitly with :c:func:`uv_udp_send()` or :c:func:`uv_udp_recv_start`. :param on: 1 for on, 0 for off. @@ -329,7 +364,9 @@ API Set the time to live. :param handle: UDP handle. Should have been initialized with - :c:func:`uv_udp_init`. + :c:func:`uv_udp_init_ex` as either ``AF_INET`` or ``AF_INET6``, or have + been bound to an address explicitly with :c:func:`uv_udp_bind`, or + implicitly with :c:func:`uv_udp_send()` or :c:func:`uv_udp_recv_start`. :param ttl: 1 through 255. diff --git a/deps/uv/include/uv.h b/deps/uv/include/uv.h index a62b3fa69b1087..9e450c5110fe57 100644 --- a/deps/uv/include/uv.h +++ b/deps/uv/include/uv.h @@ -260,7 +260,9 @@ typedef struct uv_metrics_s uv_metrics_t; typedef enum { UV_LOOP_BLOCK_SIGNAL = 0, - UV_METRICS_IDLE_TIME + UV_METRICS_IDLE_TIME, + UV_LOOP_USE_IO_URING_SQPOLL +#define UV_LOOP_USE_IO_URING_SQPOLL UV_LOOP_USE_IO_URING_SQPOLL } uv_loop_option; typedef enum { @@ -604,7 +606,18 @@ UV_EXTERN int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable); enum uv_tcp_flags { /* Used with uv_tcp_bind, when an IPv6 address is used. */ - UV_TCP_IPV6ONLY = 1 + UV_TCP_IPV6ONLY = 1, + + /* Enable SO_REUSEPORT socket option when binding the handle. + * This allows completely duplicate bindings by multiple processes + * or threads if they all set SO_REUSEPORT before binding the port. + * Incoming connections are distributed across the participating + * listener sockets. + * + * This flag is available only on Linux 3.9+, DragonFlyBSD 3.6+, + * FreeBSD 12.0+, Solaris 11.4, and AIX 7.2.5+ for now. + */ + UV_TCP_REUSEPORT = 2, }; UV_EXTERN int uv_tcp_bind(uv_tcp_t* handle, @@ -645,10 +658,13 @@ enum uv_udp_flags { UV_UDP_PARTIAL = 2, /* * Indicates if SO_REUSEADDR will be set when binding the handle. - * This sets the SO_REUSEPORT socket flag on the BSDs and OS X. On other - * Unix platforms, it sets the SO_REUSEADDR flag. What that means is that - * multiple threads or processes can bind to the same address without error - * (provided they all set the flag) but only the last one to bind will receive + * This sets the SO_REUSEPORT socket flag on the BSDs (except for + * DragonFlyBSD), OS X, and other platforms where SO_REUSEPORTs don't + * have the capability of load balancing, as the opposite of what + * UV_UDP_REUSEPORT would do. On other Unix platforms, it sets the + * SO_REUSEADDR flag. What that means is that multiple threads or + * processes can bind to the same address without error (provided + * they all set the flag) but only the last one to bind will receive * any traffic, in effect "stealing" the port from the previous listener. */ UV_UDP_REUSEADDR = 4, @@ -671,6 +687,18 @@ enum uv_udp_flags { * This flag is no-op on platforms other than Linux. */ UV_UDP_LINUX_RECVERR = 32, + /* + * Indicates if SO_REUSEPORT will be set when binding the handle. + * This sets the SO_REUSEPORT socket option on supported platforms. + * Unlike UV_UDP_REUSEADDR, this flag will make multiple threads or + * processes that are binding to the same address and port "share" + * the port, which means incoming datagrams are distributed across + * the receiving sockets among threads or processes. + * + * This flag is available only on Linux 3.9+, DragonFlyBSD 3.6+, + * FreeBSD 12.0+, Solaris 11.4, and AIX 7.2.5+ for now. + */ + UV_UDP_REUSEPORT = 64, /* * Indicates that recvmmsg should be used, if available. */ @@ -1903,17 +1931,17 @@ struct uv_loop_s { UV_EXTERN void* uv_loop_get_data(const uv_loop_t*); UV_EXTERN void uv_loop_set_data(uv_loop_t*, void* data); -/* String utilities needed internally for dealing with Windows. */ -size_t uv_utf16_length_as_wtf8(const uint16_t* utf16, - ssize_t utf16_len); -int uv_utf16_to_wtf8(const uint16_t* utf16, - ssize_t utf16_len, - char** wtf8_ptr, - size_t* wtf8_len_ptr); -ssize_t uv_wtf8_length_as_utf16(const char* wtf8); -void uv_wtf8_to_utf16(const char* wtf8, - uint16_t* utf16, - size_t utf16_len); +/* Unicode utilities needed for dealing with Windows. */ +UV_EXTERN size_t uv_utf16_length_as_wtf8(const uint16_t* utf16, + ssize_t utf16_len); +UV_EXTERN int uv_utf16_to_wtf8(const uint16_t* utf16, + ssize_t utf16_len, + char** wtf8_ptr, + size_t* wtf8_len_ptr); +UV_EXTERN ssize_t uv_wtf8_length_as_utf16(const char* wtf8); +UV_EXTERN void uv_wtf8_to_utf16(const char* wtf8, + uint16_t* utf16, + size_t utf16_len); /* Don't export the private CPP symbols. */ #undef UV_HANDLE_TYPE_PRIVATE diff --git a/deps/uv/include/uv/tree.h b/deps/uv/include/uv/tree.h index 2b28835fdedef2..06bba084f38669 100644 --- a/deps/uv/include/uv/tree.h +++ b/deps/uv/include/uv/tree.h @@ -35,21 +35,7 @@ #endif /* - * This file defines data structures for different types of trees: - * splay trees and red-black trees. - * - * A splay tree is a self-organizing data structure. Every operation - * on the tree causes a splay to happen. The splay moves the requested - * node to the root of the tree and partly rebalances it. - * - * This has the benefit that request locality causes faster lookups as - * the requested nodes move to the top of the tree. On the other hand, - * every lookup causes memory writes. - * - * The Balance Theorem bounds the total access time for m operations - * and n inserts on an initially empty tree as O((m + n)lg n). The - * amortized cost for a sequence of m accesses to a splay tree is O(lg n); - * + * This file defines data structures for red-black trees. * A red-black tree is a binary search tree with the node color as an * extra attribute. It fulfills a set of conditions: * - every search path from the root to a leaf consists of the @@ -61,239 +47,6 @@ * The maximum height of a red-black tree is 2lg (n+1). */ -#define SPLAY_HEAD(name, type) \ -struct name { \ - struct type *sph_root; /* root of the tree */ \ -} - -#define SPLAY_INITIALIZER(root) \ - { NULL } - -#define SPLAY_INIT(root) do { \ - (root)->sph_root = NULL; \ -} while (/*CONSTCOND*/ 0) - -#define SPLAY_ENTRY(type) \ -struct { \ - struct type *spe_left; /* left element */ \ - struct type *spe_right; /* right element */ \ -} - -#define SPLAY_LEFT(elm, field) (elm)->field.spe_left -#define SPLAY_RIGHT(elm, field) (elm)->field.spe_right -#define SPLAY_ROOT(head) (head)->sph_root -#define SPLAY_EMPTY(head) (SPLAY_ROOT(head) == NULL) - -/* SPLAY_ROTATE_{LEFT,RIGHT} expect that tmp hold SPLAY_{RIGHT,LEFT} */ -#define SPLAY_ROTATE_RIGHT(head, tmp, field) do { \ - SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(tmp, field); \ - SPLAY_RIGHT(tmp, field) = (head)->sph_root; \ - (head)->sph_root = tmp; \ -} while (/*CONSTCOND*/ 0) - -#define SPLAY_ROTATE_LEFT(head, tmp, field) do { \ - SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(tmp, field); \ - SPLAY_LEFT(tmp, field) = (head)->sph_root; \ - (head)->sph_root = tmp; \ -} while (/*CONSTCOND*/ 0) - -#define SPLAY_LINKLEFT(head, tmp, field) do { \ - SPLAY_LEFT(tmp, field) = (head)->sph_root; \ - tmp = (head)->sph_root; \ - (head)->sph_root = SPLAY_LEFT((head)->sph_root, field); \ -} while (/*CONSTCOND*/ 0) - -#define SPLAY_LINKRIGHT(head, tmp, field) do { \ - SPLAY_RIGHT(tmp, field) = (head)->sph_root; \ - tmp = (head)->sph_root; \ - (head)->sph_root = SPLAY_RIGHT((head)->sph_root, field); \ -} while (/*CONSTCOND*/ 0) - -#define SPLAY_ASSEMBLE(head, node, left, right, field) do { \ - SPLAY_RIGHT(left, field) = SPLAY_LEFT((head)->sph_root, field); \ - SPLAY_LEFT(right, field) = SPLAY_RIGHT((head)->sph_root, field); \ - SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(node, field); \ - SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(node, field); \ -} while (/*CONSTCOND*/ 0) - -/* Generates prototypes and inline functions */ - -#define SPLAY_PROTOTYPE(name, type, field, cmp) \ -void name##_SPLAY(struct name *, struct type *); \ -void name##_SPLAY_MINMAX(struct name *, int); \ -struct type *name##_SPLAY_INSERT(struct name *, struct type *); \ -struct type *name##_SPLAY_REMOVE(struct name *, struct type *); \ - \ -/* Finds the node with the same key as elm */ \ -static __inline struct type * \ -name##_SPLAY_FIND(struct name *head, struct type *elm) \ -{ \ - if (SPLAY_EMPTY(head)) \ - return(NULL); \ - name##_SPLAY(head, elm); \ - if ((cmp)(elm, (head)->sph_root) == 0) \ - return (head->sph_root); \ - return (NULL); \ -} \ - \ -static __inline struct type * \ -name##_SPLAY_NEXT(struct name *head, struct type *elm) \ -{ \ - name##_SPLAY(head, elm); \ - if (SPLAY_RIGHT(elm, field) != NULL) { \ - elm = SPLAY_RIGHT(elm, field); \ - while (SPLAY_LEFT(elm, field) != NULL) { \ - elm = SPLAY_LEFT(elm, field); \ - } \ - } else \ - elm = NULL; \ - return (elm); \ -} \ - \ -static __inline struct type * \ -name##_SPLAY_MIN_MAX(struct name *head, int val) \ -{ \ - name##_SPLAY_MINMAX(head, val); \ - return (SPLAY_ROOT(head)); \ -} - -/* Main splay operation. - * Moves node close to the key of elm to top - */ -#define SPLAY_GENERATE(name, type, field, cmp) \ -struct type * \ -name##_SPLAY_INSERT(struct name *head, struct type *elm) \ -{ \ - if (SPLAY_EMPTY(head)) { \ - SPLAY_LEFT(elm, field) = SPLAY_RIGHT(elm, field) = NULL; \ - } else { \ - int __comp; \ - name##_SPLAY(head, elm); \ - __comp = (cmp)(elm, (head)->sph_root); \ - if(__comp < 0) { \ - SPLAY_LEFT(elm, field) = SPLAY_LEFT((head)->sph_root, field); \ - SPLAY_RIGHT(elm, field) = (head)->sph_root; \ - SPLAY_LEFT((head)->sph_root, field) = NULL; \ - } else if (__comp > 0) { \ - SPLAY_RIGHT(elm, field) = SPLAY_RIGHT((head)->sph_root, field); \ - SPLAY_LEFT(elm, field) = (head)->sph_root; \ - SPLAY_RIGHT((head)->sph_root, field) = NULL; \ - } else \ - return ((head)->sph_root); \ - } \ - (head)->sph_root = (elm); \ - return (NULL); \ -} \ - \ -struct type * \ -name##_SPLAY_REMOVE(struct name *head, struct type *elm) \ -{ \ - struct type *__tmp; \ - if (SPLAY_EMPTY(head)) \ - return (NULL); \ - name##_SPLAY(head, elm); \ - if ((cmp)(elm, (head)->sph_root) == 0) { \ - if (SPLAY_LEFT((head)->sph_root, field) == NULL) { \ - (head)->sph_root = SPLAY_RIGHT((head)->sph_root, field); \ - } else { \ - __tmp = SPLAY_RIGHT((head)->sph_root, field); \ - (head)->sph_root = SPLAY_LEFT((head)->sph_root, field); \ - name##_SPLAY(head, elm); \ - SPLAY_RIGHT((head)->sph_root, field) = __tmp; \ - } \ - return (elm); \ - } \ - return (NULL); \ -} \ - \ -void \ -name##_SPLAY(struct name *head, struct type *elm) \ -{ \ - struct type __node, *__left, *__right, *__tmp; \ - int __comp; \ - \ - SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL; \ - __left = __right = &__node; \ - \ - while ((__comp = (cmp)(elm, (head)->sph_root)) != 0) { \ - if (__comp < 0) { \ - __tmp = SPLAY_LEFT((head)->sph_root, field); \ - if (__tmp == NULL) \ - break; \ - if ((cmp)(elm, __tmp) < 0){ \ - SPLAY_ROTATE_RIGHT(head, __tmp, field); \ - if (SPLAY_LEFT((head)->sph_root, field) == NULL) \ - break; \ - } \ - SPLAY_LINKLEFT(head, __right, field); \ - } else if (__comp > 0) { \ - __tmp = SPLAY_RIGHT((head)->sph_root, field); \ - if (__tmp == NULL) \ - break; \ - if ((cmp)(elm, __tmp) > 0){ \ - SPLAY_ROTATE_LEFT(head, __tmp, field); \ - if (SPLAY_RIGHT((head)->sph_root, field) == NULL) \ - break; \ - } \ - SPLAY_LINKRIGHT(head, __left, field); \ - } \ - } \ - SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \ -} \ - \ -/* Splay with either the minimum or the maximum element \ - * Used to find minimum or maximum element in tree. \ - */ \ -void name##_SPLAY_MINMAX(struct name *head, int __comp) \ -{ \ - struct type __node, *__left, *__right, *__tmp; \ - \ - SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL; \ - __left = __right = &__node; \ - \ - for (;;) { \ - if (__comp < 0) { \ - __tmp = SPLAY_LEFT((head)->sph_root, field); \ - if (__tmp == NULL) \ - break; \ - if (__comp < 0){ \ - SPLAY_ROTATE_RIGHT(head, __tmp, field); \ - if (SPLAY_LEFT((head)->sph_root, field) == NULL) \ - break; \ - } \ - SPLAY_LINKLEFT(head, __right, field); \ - } else if (__comp > 0) { \ - __tmp = SPLAY_RIGHT((head)->sph_root, field); \ - if (__tmp == NULL) \ - break; \ - if (__comp > 0) { \ - SPLAY_ROTATE_LEFT(head, __tmp, field); \ - if (SPLAY_RIGHT((head)->sph_root, field) == NULL) \ - break; \ - } \ - SPLAY_LINKRIGHT(head, __left, field); \ - } \ - } \ - SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \ -} - -#define SPLAY_NEGINF -1 -#define SPLAY_INF 1 - -#define SPLAY_INSERT(name, x, y) name##_SPLAY_INSERT(x, y) -#define SPLAY_REMOVE(name, x, y) name##_SPLAY_REMOVE(x, y) -#define SPLAY_FIND(name, x, y) name##_SPLAY_FIND(x, y) -#define SPLAY_NEXT(name, x, y) name##_SPLAY_NEXT(x, y) -#define SPLAY_MIN(name, x) (SPLAY_EMPTY(x) ? NULL \ - : name##_SPLAY_MIN_MAX(x, SPLAY_NEGINF)) -#define SPLAY_MAX(name, x) (SPLAY_EMPTY(x) ? NULL \ - : name##_SPLAY_MIN_MAX(x, SPLAY_INF)) - -#define SPLAY_FOREACH(x, name, head) \ - for ((x) = SPLAY_MIN(name, head); \ - (x) != NULL; \ - (x) = SPLAY_NEXT(name, head, x)) - /* Macros that define a red-black tree */ #define RB_HEAD(name, type) \ struct name { \ @@ -730,8 +483,8 @@ name##_RB_MINMAX(struct name *head, int val) \ #define RB_REMOVE(name, x, y) name##_RB_REMOVE(x, y) #define RB_FIND(name, x, y) name##_RB_FIND(x, y) #define RB_NFIND(name, x, y) name##_RB_NFIND(x, y) -#define RB_NEXT(name, x, y) name##_RB_NEXT(y) -#define RB_PREV(name, x, y) name##_RB_PREV(y) +#define RB_NEXT(name, x) name##_RB_NEXT(x) +#define RB_PREV(name, x) name##_RB_PREV(x) #define RB_MIN(name, x) name##_RB_MINMAX(x, RB_NEGINF) #define RB_MAX(name, x) name##_RB_MINMAX(x, RB_INF) diff --git a/deps/uv/include/uv/version.h b/deps/uv/include/uv/version.h index d6a61a10f7c4b5..77a8b2541749f9 100644 --- a/deps/uv/include/uv/version.h +++ b/deps/uv/include/uv/version.h @@ -31,8 +31,8 @@ */ #define UV_VERSION_MAJOR 1 -#define UV_VERSION_MINOR 48 -#define UV_VERSION_PATCH 0 +#define UV_VERSION_MINOR 49 +#define UV_VERSION_PATCH 1 #define UV_VERSION_IS_RELEASE 1 #define UV_VERSION_SUFFIX "" diff --git a/deps/uv/include/uv/win.h b/deps/uv/include/uv/win.h index f4adaa216c6f0c..12ac53b4f217d2 100644 --- a/deps/uv/include/uv/win.h +++ b/deps/uv/include/uv/win.h @@ -290,8 +290,8 @@ typedef struct { #define UV_ONCE_INIT { 0, NULL } typedef struct uv_once_s { - unsigned char ran; - HANDLE event; + unsigned char unused; + INIT_ONCE init_once; } uv_once_t; /* Platform-specific definitions for uv_spawn support. */ diff --git a/deps/uv/src/random.c b/deps/uv/src/random.c index e75f77deb2bdaf..57fc0d911da316 100644 --- a/deps/uv/src/random.c +++ b/deps/uv/src/random.c @@ -82,7 +82,7 @@ static void uv__random_done(struct uv__work* w, int status) { uv_random_t* req; req = container_of(w, uv_random_t, work_req); - uv__req_unregister(req->loop, req); + uv__req_unregister(req->loop); if (status == 0) status = req->status; diff --git a/deps/uv/src/threadpool.c b/deps/uv/src/threadpool.c index dbef67f2f10f1d..45af50dcd04ea6 100644 --- a/deps/uv/src/threadpool.c +++ b/deps/uv/src/threadpool.c @@ -356,7 +356,7 @@ static void uv__queue_done(struct uv__work* w, int err) { uv_work_t* req; req = container_of(w, uv_work_t, work_req); - uv__req_unregister(req->loop, req); + uv__req_unregister(req->loop); if (req->after_work_cb == NULL) return; diff --git a/deps/uv/src/unix/async.c b/deps/uv/src/unix/async.c index 0ff2669e30a628..bc97ec54c4fcc6 100644 --- a/deps/uv/src/unix/async.c +++ b/deps/uv/src/unix/async.c @@ -38,6 +38,34 @@ #include #endif +#if UV__KQUEUE_EVFILT_USER +static uv_once_t kqueue_runtime_detection_guard = UV_ONCE_INIT; +static int kqueue_evfilt_user_support = 1; + + +static void uv__kqueue_runtime_detection(void) { + int kq; + struct kevent ev[2]; + struct timespec timeout = {0, 0}; + + /* Perform the runtime detection to ensure that kqueue with + * EVFILT_USER actually works. */ + kq = kqueue(); + EV_SET(ev, UV__KQUEUE_EVFILT_USER_IDENT, EVFILT_USER, + EV_ADD | EV_CLEAR, 0, 0, 0); + EV_SET(ev + 1, UV__KQUEUE_EVFILT_USER_IDENT, EVFILT_USER, + 0, NOTE_TRIGGER, 0, 0); + if (kevent(kq, ev, 2, ev, 1, &timeout) < 1 || + ev[0].filter != EVFILT_USER || + ev[0].ident != UV__KQUEUE_EVFILT_USER_IDENT || + ev[0].flags & EV_ERROR) + /* If we wind up here, we can assume that EVFILT_USER is defined but + * broken on the current system. */ + kqueue_evfilt_user_support = 0; + uv__close(kq); +} +#endif + static void uv__async_send(uv_loop_t* loop); static int uv__async_start(uv_loop_t* loop); static void uv__cpu_relax(void); @@ -130,8 +158,10 @@ void uv__async_close(uv_async_t* handle) { static void uv__async_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) { +#ifndef __linux__ char buf[1024]; ssize_t r; +#endif struct uv__queue queue; struct uv__queue* q; uv_async_t* h; @@ -139,7 +169,12 @@ static void uv__async_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) { assert(w == &loop->async_io_watcher); +#ifndef __linux__ +#if UV__KQUEUE_EVFILT_USER + for (;!kqueue_evfilt_user_support;) { +#else for (;;) { +#endif r = read(w->fd, buf, sizeof(buf)); if (r == sizeof(buf)) @@ -156,6 +191,7 @@ static void uv__async_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) { abort(); } +#endif /* !__linux__ */ uv__queue_move(&loop->async_handles, &queue); while (!uv__queue_empty(&queue)) { @@ -179,34 +215,58 @@ static void uv__async_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) { static void uv__async_send(uv_loop_t* loop) { - const void* buf; - ssize_t len; int fd; - int r; - - buf = ""; - len = 1; - fd = loop->async_wfd; - -#if defined(__linux__) - if (fd == -1) { - static const uint64_t val = 1; - buf = &val; - len = sizeof(val); - fd = loop->async_io_watcher.fd; /* eventfd */ + ssize_t r; +#ifdef __linux__ + uint64_t val; + + fd = loop->async_io_watcher.fd; /* eventfd */ + for (val = 1; /* empty */; val = 1) { + r = write(fd, &val, sizeof(uint64_t)); + if (r < 0) { + /* When EAGAIN occurs, the eventfd counter hits the maximum value of the unsigned 64-bit. + * We need to first drain the eventfd and then write again. + * + * Check out https://man7.org/linux/man-pages/man2/eventfd.2.html for details. + */ + if (errno == EAGAIN) { + /* It's ready to retry. */ + if (read(fd, &val, sizeof(uint64_t)) > 0 || errno == EAGAIN) { + continue; + } + } + /* Unknown error occurs. */ + break; + } + return; + } +#else +#if UV__KQUEUE_EVFILT_USER + struct kevent ev; + + if (kqueue_evfilt_user_support) { + fd = loop->async_io_watcher.fd; /* magic number for EVFILT_USER */ + EV_SET(&ev, fd, EVFILT_USER, 0, NOTE_TRIGGER, 0, 0); + r = kevent(loop->backend_fd, &ev, 1, NULL, 0, NULL); + if (r == 0) + return; + else + abort(); } #endif + fd = loop->async_wfd; /* write end of the pipe */ do - r = write(fd, buf, len); + r = write(fd, "x", 1); while (r == -1 && errno == EINTR); - if (r == len) + if (r == 1) return; if (r == -1) if (errno == EAGAIN || errno == EWOULDBLOCK) return; +#endif abort(); } @@ -215,6 +275,9 @@ static void uv__async_send(uv_loop_t* loop) { static int uv__async_start(uv_loop_t* loop) { int pipefd[2]; int err; +#if UV__KQUEUE_EVFILT_USER + struct kevent ev; +#endif if (loop->async_io_watcher.fd != -1) return 0; @@ -226,6 +289,36 @@ static int uv__async_start(uv_loop_t* loop) { pipefd[0] = err; pipefd[1] = -1; +#elif UV__KQUEUE_EVFILT_USER + uv_once(&kqueue_runtime_detection_guard, uv__kqueue_runtime_detection); + if (kqueue_evfilt_user_support) { + /* In order not to break the generic pattern of I/O polling, a valid + * file descriptor is required to take up a room in loop->watchers, + * thus we create one for that, but this fd will not be actually used, + * it's just a placeholder and magic number which is going to be closed + * during the cleanup, as other FDs. */ + err = uv__open_cloexec("/dev/null", O_RDONLY); + if (err < 0) + return err; + + pipefd[0] = err; + pipefd[1] = -1; + + /* When using EVFILT_USER event to wake up the kqueue, this event must be + * registered beforehand. Otherwise, calling kevent() to issue an + * unregistered EVFILT_USER event will get an ENOENT. + * Since uv__async_send() may happen before uv__io_poll() with multi-threads, + * we can't defer this registration of EVFILT_USER event as we did for other + * events, but must perform it right away. */ + EV_SET(&ev, err, EVFILT_USER, EV_ADD | EV_CLEAR, 0, 0, 0); + err = kevent(loop->backend_fd, &ev, 1, NULL, 0, NULL); + if (err < 0) + return UV__ERR(errno); + } else { + err = uv__make_pipe(pipefd, UV_NONBLOCK_PIPE); + if (err < 0) + return err; + } #else err = uv__make_pipe(pipefd, UV_NONBLOCK_PIPE); if (err < 0) @@ -236,6 +329,13 @@ static int uv__async_start(uv_loop_t* loop) { uv__io_start(loop, &loop->async_io_watcher, POLLIN); loop->async_wfd = pipefd[1]; +#if UV__KQUEUE_EVFILT_USER + /* Prevent the EVFILT_USER event from being added to kqueue redundantly + * and mistakenly later in uv__io_poll(). */ + if (kqueue_evfilt_user_support) + loop->async_io_watcher.events = loop->async_io_watcher.pevents; +#endif + return 0; } diff --git a/deps/uv/src/unix/core.c b/deps/uv/src/unix/core.c index 965e7f775250cf..0c52ccf2ad7b2d 100644 --- a/deps/uv/src/unix/core.c +++ b/deps/uv/src/unix/core.c @@ -53,7 +53,8 @@ #if defined(__APPLE__) # include -# endif /* defined(__APPLE__) */ +# include +#endif /* defined(__APPLE__) */ #if defined(__APPLE__) && !TARGET_OS_IPHONE @@ -94,6 +95,15 @@ extern char** environ; # define uv__accept4 accept4 #endif +#if defined(__FreeBSD__) +# include +# include +#endif + +#if defined(__NetBSD__) +# include +#endif + #if defined(__linux__) && defined(__SANITIZE_THREAD__) && defined(__clang__) # include #endif @@ -156,7 +166,7 @@ void uv_close(uv_handle_t* handle, uv_close_cb close_cb) { break; case UV_TTY: - uv__stream_close((uv_stream_t*)handle); + uv__tty_close((uv_tty_t*)handle); break; case UV_TCP: @@ -1024,7 +1034,7 @@ int uv_getrusage(uv_rusage_t* rusage) { #if defined(__APPLE__) rusage->ru_maxrss /= 1024; /* macOS and iOS report bytes. */ #elif defined(__sun) - rusage->ru_maxrss /= getpagesize() / 1024; /* Solaris reports pages. */ + rusage->ru_maxrss *= getpagesize() / 1024; /* Solaris reports pages. */ #endif return 0; @@ -1616,6 +1626,7 @@ static int set_nice_for_calling_thread(int priority) { * If the function fails, the return value is non-zero. */ int uv_thread_setpriority(uv_thread_t tid, int priority) { +#if !defined(__GNU__) int r; int min; int max; @@ -1677,10 +1688,14 @@ int uv_thread_setpriority(uv_thread_t tid, int priority) { param.sched_priority = prio; r = pthread_setschedparam(tid, policy, ¶m); if (r != 0) - return UV__ERR(errno); + return UV__ERR(errno); } return 0; +#else /* !defined(__GNU__) */ + /* Simulate success on systems where thread priority is not implemented. */ + return 0; +#endif /* !defined(__GNU__) */ } int uv_os_uname(uv_utsname_t* buffer) { @@ -1864,11 +1879,31 @@ int uv__search_path(const char* prog, char* buf, size_t* buflen) { return UV_EINVAL; } +#if defined(__linux__) || defined (__FreeBSD__) +# define uv__cpu_count(cpuset) CPU_COUNT(cpuset) +#elif defined(__NetBSD__) +static int uv__cpu_count(cpuset_t* set) { + int rc; + cpuid_t i; + + rc = 0; + for (i = 0;; i++) { + int r = cpuset_isset(i, set); + if (r < 0) + break; + if (r) + rc++; + } + + return rc; +} +#endif /* __NetBSD__ */ unsigned int uv_available_parallelism(void) { + long rc = -1; + #ifdef __linux__ cpu_set_t set; - long rc; memset(&set, 0, sizeof(set)); @@ -1877,29 +1912,127 @@ unsigned int uv_available_parallelism(void) { * before falling back to sysconf(_SC_NPROCESSORS_ONLN). */ if (0 == sched_getaffinity(0, sizeof(set), &set)) - rc = CPU_COUNT(&set); - else - rc = sysconf(_SC_NPROCESSORS_ONLN); - - if (rc < 1) - rc = 1; - - return (unsigned) rc; + rc = uv__cpu_count(&set); #elif defined(__MVS__) - int rc; - rc = __get_num_online_cpus(); if (rc < 1) rc = 1; return (unsigned) rc; -#else /* __linux__ */ - long rc; +#elif defined(__FreeBSD__) + cpuset_t set; + + memset(&set, 0, sizeof(set)); + + if (0 == cpuset_getaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, -1, sizeof(set), &set)) + rc = uv__cpu_count(&set); +#elif defined(__NetBSD__) + cpuset_t* set = cpuset_create(); + if (set != NULL) { + if (0 == sched_getaffinity_np(getpid(), sizeof(set), &set)) + rc = uv__cpu_count(&set); + cpuset_destroy(set); + } +#elif defined(__APPLE__) + int nprocs; + size_t i; + size_t len = sizeof(nprocs); + static const char *mib[] = { + "hw.activecpu", + "hw.logicalcpu", + "hw.ncpu" + }; + + for (i = 0; i < ARRAY_SIZE(mib); i++) { + if (0 == sysctlbyname(mib[i], &nprocs, &len, NULL, 0) && + len == sizeof(nprocs) && + nprocs > 0) { + rc = nprocs; + break; + } + } +#elif defined(__OpenBSD__) + int nprocs; + size_t i; + size_t len = sizeof(nprocs); + static int mib[][2] = { +# ifdef HW_NCPUONLINE + { CTL_HW, HW_NCPUONLINE }, +# endif + { CTL_HW, HW_NCPU } + }; + + for (i = 0; i < ARRAY_SIZE(mib); i++) { + if (0 == sysctl(mib[i], ARRAY_SIZE(mib[i]), &nprocs, &len, NULL, 0) && + len == sizeof(nprocs) && + nprocs > 0) { + rc = nprocs; + break; + } + } +#endif /* __linux__ */ + + if (rc < 0) + rc = sysconf(_SC_NPROCESSORS_ONLN); + +#ifdef __linux__ + { + double rc_with_cgroup; + uv__cpu_constraint c = {0, 0, 0.0}; + + if (uv__get_constrained_cpu(&c) == 0 && c.period_length > 0) { + rc_with_cgroup = (double)c.quota_per_period / c.period_length * c.proportions; + if (rc_with_cgroup < rc) + rc = (long)rc_with_cgroup; /* Casting is safe since rc_with_cgroup < rc < LONG_MAX */ + } + } +#endif /* __linux__ */ - rc = sysconf(_SC_NPROCESSORS_ONLN); if (rc < 1) rc = 1; return (unsigned) rc; -#endif /* __linux__ */ +} + +int uv__sock_reuseport(int fd) { + int on = 1; +#if defined(__FreeBSD__) && __FreeBSD__ >= 12 && defined(SO_REUSEPORT_LB) + /* FreeBSD 12 introduced a new socket option named SO_REUSEPORT_LB + * with the capability of load balancing, it's the substitution of + * the SO_REUSEPORTs on Linux and DragonFlyBSD. */ + if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT_LB, &on, sizeof(on))) + return UV__ERR(errno); +#elif (defined(__linux__) || \ + defined(_AIX73) || \ + (defined(__DragonFly__) && __DragonFly_version >= 300600) || \ + (defined(UV__SOLARIS_11_4) && UV__SOLARIS_11_4)) && \ + defined(SO_REUSEPORT) + /* On Linux 3.9+, the SO_REUSEPORT implementation distributes connections + * evenly across all of the threads (or processes) that are blocked in + * accept() on the same port. As with TCP, SO_REUSEPORT distributes datagrams + * evenly across all of the receiving threads (or process). + * + * DragonFlyBSD 3.6.0 extended SO_REUSEPORT to distribute workload to + * available sockets, which made it the equivalent of Linux's SO_REUSEPORT. + * + * AIX 7.2.5 added the feature that would add the capability to distribute + * incoming connections or datagrams across all listening ports for SO_REUSEPORT. + * + * Solaris 11 supported SO_REUSEPORT, but it's implemented only for + * binding to the same address and port, without load balancing. + * Solaris 11.4 extended SO_REUSEPORT with the capability of load balancing. + */ + if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &on, sizeof(on))) + return UV__ERR(errno); +#else + (void) (fd); + (void) (on); + /* SO_REUSEPORTs do not have the capability of load balancing on platforms + * other than those mentioned above. The semantics are completely different, + * therefore we shouldn't enable it, but fail this operation to indicate that + * UV_[TCP/UDP]_REUSEPORT is not supported on these platforms. */ + return UV_ENOTSUP; +#endif + + return 0; } diff --git a/deps/uv/src/unix/cygwin.c b/deps/uv/src/unix/cygwin.c index 4e5413963d6acf..4913108223f4da 100644 --- a/deps/uv/src/unix/cygwin.c +++ b/deps/uv/src/unix/cygwin.c @@ -36,9 +36,45 @@ int uv_uptime(double* uptime) { } int uv_resident_set_memory(size_t* rss) { - /* FIXME: read /proc/meminfo? */ - *rss = 0; + char buf[1024]; + const char* s; + long val; + int rc; + int i; + struct sysinfo si; + + /* rss: 24th element */ + rc = uv__slurp("/proc/self/stat", buf, sizeof(buf)); + if (rc < 0) + return rc; + + /* find the last ')' */ + s = strrchr(buf, ')'); + if (s == NULL) + goto err; + + for (i = 1; i <= 22; i++) { + s = strchr(s + 1, ' '); + if (s == NULL) + goto err; + } + + errno = 0; + val = strtol(s, NULL, 10); + if (val < 0 || errno != 0) + goto err; + + do + rc = sysinfo(&si); + while (rc == -1 && errno == EINTR); + if (rc == -1) + return UV__ERR(errno); + + *rss = val * si.mem_unit; return 0; + +err: + return UV_EINVAL; } int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { diff --git a/deps/uv/src/unix/darwin-syscalls.h b/deps/uv/src/unix/darwin-syscalls.h new file mode 100644 index 00000000000000..dc2d1bd234b1f1 --- /dev/null +++ b/deps/uv/src/unix/darwin-syscalls.h @@ -0,0 +1,17 @@ +#ifndef UV_DARWIN_SYSCALLS_H_ +#define UV_DARWIN_SYSCALLS_H_ + +#include +#include + +/* https://github.com/apple/darwin-xnu/blob/master/bsd/sys/socket.h */ + +struct mmsghdr { + struct msghdr msg_hdr; + size_t msg_len; +}; + +ssize_t recvmsg_x(int s, const struct mmsghdr* msgp, u_int cnt, int flags); +ssize_t sendmsg_x(int s, const struct mmsghdr* msgp, u_int cnt, int flags); + +#endif /* UV_DARWIN_SYSCALLS_H_ */ diff --git a/deps/uv/src/unix/darwin.c b/deps/uv/src/unix/darwin.c index 5e764a65ee4c71..009efbefaa70ee 100644 --- a/deps/uv/src/unix/darwin.c +++ b/deps/uv/src/unix/darwin.c @@ -25,7 +25,6 @@ #include #include -#include #include #include #include /* _NSGetExecutablePath */ @@ -34,7 +33,6 @@ #include /* sysconf */ static uv_once_t once = UV_ONCE_INIT; -static uint64_t (*time_func)(void); static mach_timebase_info_data_t timebase; @@ -56,16 +54,12 @@ void uv__platform_loop_delete(uv_loop_t* loop) { static void uv__hrtime_init_once(void) { if (KERN_SUCCESS != mach_timebase_info(&timebase)) abort(); - - time_func = (uint64_t (*)(void)) dlsym(RTLD_DEFAULT, "mach_continuous_time"); - if (time_func == NULL) - time_func = mach_absolute_time; } uint64_t uv__hrtime(uv_clocktype_t type) { uv_once(&once, uv__hrtime_init_once); - return time_func() * timebase.numer / timebase.denom; + return mach_continuous_time() * timebase.numer / timebase.denom; } diff --git a/deps/uv/src/unix/freebsd.c b/deps/uv/src/unix/freebsd.c index 191bc8bc213ffd..a6de29c558cde4 100644 --- a/deps/uv/src/unix/freebsd.c +++ b/deps/uv/src/unix/freebsd.c @@ -26,7 +26,12 @@ #include #include -#include +#if defined(__DragonFly__) +# include +# include +#else +# include +#endif #include #include #include diff --git a/deps/uv/src/unix/fs.c b/deps/uv/src/unix/fs.c index 3a74350f0e5ab6..239ecda16a7eb9 100644 --- a/deps/uv/src/unix/fs.c +++ b/deps/uv/src/unix/fs.c @@ -31,6 +31,7 @@ #include #include +#include #include #include #include @@ -82,17 +83,6 @@ # include #endif -#if defined(__CYGWIN__) || \ - (defined(__HAIKU__) && B_HAIKU_VERSION < B_HAIKU_VERSION_1_PRE_BETA_5) || \ - (defined(__sun) && !defined(__illumos__)) || \ - (defined(__APPLE__) && !TARGET_OS_IPHONE && \ - MAC_OS_X_VERSION_MIN_REQUIRED < 110000) -#define preadv(fd, bufs, nbufs, off) \ - pread(fd, (bufs)->iov_base, (bufs)->iov_len, off) -#define pwritev(fd, bufs, nbufs, off) \ - pwrite(fd, (bufs)->iov_base, (bufs)->iov_len, off) -#endif - #if defined(_AIX) && _XOPEN_SOURCE <= 600 extern char *mkdtemp(char *template); /* See issue #740 on AIX < 7 */ #endif @@ -149,7 +139,7 @@ extern char *mkdtemp(char *template); /* See issue #740 on AIX < 7 */ #define POST \ do { \ if (cb != NULL) { \ - uv__req_register(loop, req); \ + uv__req_register(loop); \ uv__work_submit(loop, \ &req->work_req, \ UV__WORK_FAST_IO, \ @@ -406,6 +396,123 @@ static ssize_t uv__fs_open(uv_fs_t* req) { } +static ssize_t uv__preadv_or_pwritev_emul(int fd, + const struct iovec* bufs, + size_t nbufs, + off_t off, + int is_pread) { + ssize_t total; + ssize_t r; + size_t i; + size_t n; + void* p; + + total = 0; + for (i = 0; i < (size_t) nbufs; i++) { + p = bufs[i].iov_base; + n = bufs[i].iov_len; + + do + if (is_pread) + r = pread(fd, p, n, off); + else + r = pwrite(fd, p, n, off); + while (r == -1 && errno == EINTR); + + if (r == -1) { + if (total > 0) + return total; + return -1; + } + + off += r; + total += r; + + if ((size_t) r < n) + return total; + } + + return total; +} + + +#ifdef __linux__ +typedef int uv__iovcnt; +#else +typedef size_t uv__iovcnt; +#endif + + +static ssize_t uv__preadv_emul(int fd, + const struct iovec* bufs, + uv__iovcnt nbufs, + off_t off) { + return uv__preadv_or_pwritev_emul(fd, bufs, nbufs, off, /*is_pread*/1); +} + + +static ssize_t uv__pwritev_emul(int fd, + const struct iovec* bufs, + uv__iovcnt nbufs, + off_t off) { + return uv__preadv_or_pwritev_emul(fd, bufs, nbufs, off, /*is_pread*/0); +} + + +/* The function pointer cache is an uintptr_t because _Atomic void* + * doesn't work on macos/ios/etc... + * Disable optimization on armv7 to work around the bug described in + * https://github.com/libuv/libuv/issues/4532 + */ +#if defined(__arm__) && (__ARM_ARCH == 7) +__attribute__((optimize("O0"))) +#endif +static ssize_t uv__preadv_or_pwritev(int fd, + const struct iovec* bufs, + size_t nbufs, + off_t off, + _Atomic uintptr_t* cache, + int is_pread) { + ssize_t (*f)(int, const struct iovec*, uv__iovcnt, off_t); + void* p; + + p = (void*) atomic_load_explicit(cache, memory_order_relaxed); + if (p == NULL) { +#ifdef RTLD_DEFAULT + p = dlsym(RTLD_DEFAULT, is_pread ? "preadv" : "pwritev"); + dlerror(); /* Clear errors. */ +#endif /* RTLD_DEFAULT */ + if (p == NULL) + p = is_pread ? uv__preadv_emul : uv__pwritev_emul; + atomic_store_explicit(cache, (uintptr_t) p, memory_order_relaxed); + } + + /* Use memcpy instead of `f = p` to work around a compiler bug, + * see https://github.com/libuv/libuv/issues/4532 + */ + memcpy(&f, &p, sizeof(p)); + return f(fd, bufs, nbufs, off); +} + + +static ssize_t uv__preadv(int fd, + const struct iovec* bufs, + size_t nbufs, + off_t off) { + static _Atomic uintptr_t cache; + return uv__preadv_or_pwritev(fd, bufs, nbufs, off, &cache, /*is_pread*/1); +} + + +static ssize_t uv__pwritev(int fd, + const struct iovec* bufs, + size_t nbufs, + off_t off) { + static _Atomic uintptr_t cache; + return uv__preadv_or_pwritev(fd, bufs, nbufs, off, &cache, /*is_pread*/0); +} + + static ssize_t uv__fs_read(uv_fs_t* req) { const struct iovec* bufs; unsigned int iovmax; @@ -433,7 +540,7 @@ static ssize_t uv__fs_read(uv_fs_t* req) { if (nbufs == 1) r = pread(fd, bufs->iov_base, bufs->iov_len, off); else if (nbufs > 1) - r = preadv(fd, bufs, nbufs, off); + r = uv__preadv(fd, bufs, nbufs, off); } #ifdef __PASE__ @@ -691,14 +798,23 @@ static ssize_t uv__fs_readlink(uv_fs_t* req) { static ssize_t uv__fs_realpath(uv_fs_t* req) { char* buf; + char* tmp; #if defined(_POSIX_VERSION) && _POSIX_VERSION >= 200809L - buf = realpath(req->path, NULL); - if (buf == NULL) + tmp = realpath(req->path, NULL); + if (tmp == NULL) + return -1; + buf = uv__strdup(tmp); + free(tmp); /* _Not_ uv__free. */ + if (buf == NULL) { + errno = ENOMEM; return -1; + } #else ssize_t len; + (void)tmp; + len = uv__fs_pathmax_size(req->path); buf = uv__malloc(len + 1); @@ -962,7 +1078,10 @@ static ssize_t uv__fs_sendfile(uv_fs_t* req) { return -1; } -#elif defined(__APPLE__) || defined(__DragonFly__) || defined(__FreeBSD__) +/* sendfile() on iOS(arm64) will throw SIGSYS signal cause crash. */ +#elif (defined(__APPLE__) && !TARGET_OS_IPHONE) \ + || defined(__DragonFly__) \ + || defined(__FreeBSD__) { off_t len; ssize_t r; @@ -1112,7 +1231,7 @@ static ssize_t uv__fs_write(uv_fs_t* req) { if (nbufs == 1) r = pwrite(fd, bufs->iov_base, bufs->iov_len, off); else if (nbufs > 1) - r = pwritev(fd, bufs, nbufs, off); + r = uv__pwritev(fd, bufs, nbufs, off); } return r; @@ -1125,6 +1244,7 @@ static ssize_t uv__fs_copyfile(uv_fs_t* req) { uv_file dstfd; struct stat src_statsbuf; struct stat dst_statsbuf; + struct timespec times[2]; int dst_flags; int result; int err; @@ -1202,6 +1322,35 @@ static ssize_t uv__fs_copyfile(uv_fs_t* req) { } } + /** + * Change the timestamps of the destination file to match the source file. + */ +#if defined(__APPLE__) + times[0] = src_statsbuf.st_atimespec; + times[1] = src_statsbuf.st_mtimespec; +#elif defined(_AIX) + times[0].tv_sec = src_statsbuf.st_atime; + times[0].tv_nsec = src_statsbuf.st_atime_n; + times[1].tv_sec = src_statsbuf.st_mtime; + times[1].tv_nsec = src_statsbuf.st_mtime_n; +#else + times[0] = src_statsbuf.st_atim; + times[1] = src_statsbuf.st_mtim; +#endif + + if (futimens(dstfd, times) == -1) { + err = UV__ERR(errno); + goto out; + } + + /* + * Change the ownership and permissions of the destination file to match the + * source file. + * `cp -p` does not care about errors here, so we don't either. Reuse the + * `result` variable to silence a -Wunused-result warning. + */ + result = fchown(dstfd, src_statsbuf.st_uid, src_statsbuf.st_gid); + if (fchmod(dstfd, src_statsbuf.st_mode) == -1) { err = UV__ERR(errno); #ifdef __linux__ @@ -1619,7 +1768,7 @@ static void uv__fs_done(struct uv__work* w, int status) { uv_fs_t* req; req = container_of(w, uv_fs_t, work_req); - uv__req_unregister(req->loop, req); + uv__req_unregister(req->loop); if (status == UV_ECANCELED) { assert(req->result == 0); @@ -1631,7 +1780,7 @@ static void uv__fs_done(struct uv__work* w, int status) { void uv__fs_post(uv_loop_t* loop, uv_fs_t* req) { - uv__req_register(loop, req); + uv__req_register(loop); uv__work_submit(loop, &req->work_req, UV__WORK_FAST_IO, @@ -1766,6 +1915,9 @@ int uv_fs_ftruncate(uv_loop_t* loop, INIT(FTRUNCATE); req->file = file; req->off = off; + if (cb != NULL) + if (uv__iou_fs_ftruncate(loop, req)) + return 0; POST; } diff --git a/deps/uv/src/unix/fsevents.c b/deps/uv/src/unix/fsevents.c index df703f3635fc95..7fb6bb2ec36ae0 100644 --- a/deps/uv/src/unix/fsevents.c +++ b/deps/uv/src/unix/fsevents.c @@ -276,10 +276,6 @@ static void uv__fsevents_event_cb(const FSEventStreamRef streamRef, path += handle->realpath_len; len -= handle->realpath_len; - /* Ignore events with path equal to directory itself */ - if (len <= 1 && (flags & kFSEventStreamEventFlagItemIsDir)) - continue; - if (len == 0) { /* Since we're using fsevents to watch the file itself, * realpath == path, and we now need to get the basename of the file back @@ -793,6 +789,7 @@ int uv__cf_loop_signal(uv_loop_t* loop, /* Runs in UV loop to initialize handle */ int uv__fsevents_init(uv_fs_event_t* handle) { + char* buf; int err; uv__cf_loop_state_t* state; @@ -801,9 +798,13 @@ int uv__fsevents_init(uv_fs_event_t* handle) { return err; /* Get absolute path to file */ - handle->realpath = realpath(handle->path, NULL); - if (handle->realpath == NULL) + buf = realpath(handle->path, NULL); + if (buf == NULL) return UV__ERR(errno); + handle->realpath = uv__strdup(buf); + free(buf); /* _Not_ uv__free. */ + if (handle->realpath == NULL) + return UV_ENOMEM; handle->realpath_len = strlen(handle->realpath); /* Initialize event queue */ diff --git a/deps/uv/src/unix/getaddrinfo.c b/deps/uv/src/unix/getaddrinfo.c index 77337ace9454e0..b7075343666590 100644 --- a/deps/uv/src/unix/getaddrinfo.c +++ b/deps/uv/src/unix/getaddrinfo.c @@ -109,7 +109,7 @@ static void uv__getaddrinfo_done(struct uv__work* w, int status) { uv_getaddrinfo_t* req; req = container_of(w, uv_getaddrinfo_t, work_req); - uv__req_unregister(req->loop, req); + uv__req_unregister(req->loop); /* See initialization in uv_getaddrinfo(). */ if (req->hints) diff --git a/deps/uv/src/unix/getnameinfo.c b/deps/uv/src/unix/getnameinfo.c index 991002a67d7072..959b4c6a821980 100644 --- a/deps/uv/src/unix/getnameinfo.c +++ b/deps/uv/src/unix/getnameinfo.c @@ -58,7 +58,7 @@ static void uv__getnameinfo_done(struct uv__work* w, int status) { char* service; req = container_of(w, uv_getnameinfo_t, work_req); - uv__req_unregister(req->loop, req); + uv__req_unregister(req->loop); host = service = NULL; if (status == UV_ECANCELED) { diff --git a/deps/uv/src/unix/internal.h b/deps/uv/src/unix/internal.h index bcb3be577e5849..568a55b55acb35 100644 --- a/deps/uv/src/unix/internal.h +++ b/deps/uv/src/unix/internal.h @@ -35,6 +35,10 @@ #include #include #include +#if defined(__APPLE__) || defined(__DragonFly__) || \ + defined(__FreeBSD__) || defined(__NetBSD__) +#include +#endif #define uv__msan_unpoison(p, n) \ do { \ @@ -71,8 +75,11 @@ # include #endif /* _AIX */ -#if defined(__APPLE__) && !TARGET_OS_IPHONE -# include +#if defined(__APPLE__) +# include "darwin-syscalls.h" +# if !TARGET_OS_IPHONE +# include +# endif #endif /* @@ -157,7 +164,8 @@ typedef struct uv__stream_queued_fds_s uv__stream_queued_fds_t; /* loop flags */ enum { UV_LOOP_BLOCK_SIGPROF = 0x1, - UV_LOOP_REAP_CHILDREN = 0x2 + UV_LOOP_REAP_CHILDREN = 0x2, + UV_LOOP_ENABLE_IO_URING_SQPOLL = 0x4 }; /* flags of excluding ifaddr */ @@ -243,6 +251,7 @@ int uv__close(int fd); /* preserves errno */ int uv__close_nocheckstdio(int fd); int uv__close_nocancel(int fd); int uv__socket(int domain, int type, int protocol); +int uv__sock_reuseport(int fd); ssize_t uv__recvmsg(int fd, struct msghdr *msg, int flags); void uv__make_close_pending(uv_handle_t* handle); int uv__getiovmax(void); @@ -287,6 +296,9 @@ int uv__tcp_listen(uv_tcp_t* tcp, int backlog, uv_connection_cb cb); int uv__tcp_nodelay(int fd, int on); int uv__tcp_keepalive(int fd, int on, unsigned int delay); +/* tty */ +void uv__tty_close(uv_tty_t* handle); + /* pipe */ int uv__pipe_listen(uv_pipe_t* handle, int backlog, uv_connection_cb cb); @@ -332,6 +344,7 @@ int uv__random_sysctl(void* buf, size_t buflen); /* io_uring */ #ifdef __linux__ int uv__iou_fs_close(uv_loop_t* loop, uv_fs_t* req); +int uv__iou_fs_ftruncate(uv_loop_t* loop, uv_fs_t* req); int uv__iou_fs_fsync_or_fdatasync(uv_loop_t* loop, uv_fs_t* req, uint32_t fsync_flags); @@ -350,6 +363,7 @@ int uv__iou_fs_symlink(uv_loop_t* loop, uv_fs_t* req); int uv__iou_fs_unlink(uv_loop_t* loop, uv_fs_t* req); #else #define uv__iou_fs_close(loop, req) 0 +#define uv__iou_fs_ftruncate(loop, req) 0 #define uv__iou_fs_fsync_or_fdatasync(loop, req, fsync_flags) 0 #define uv__iou_fs_link(loop, req) 0 #define uv__iou_fs_mkdir(loop, req) 0 @@ -472,4 +486,44 @@ uv__fs_copy_file_range(int fd_in, #define UV__CPU_AFFINITY_SUPPORTED 0 #endif +#ifdef __linux__ +typedef struct { + long long quota_per_period; + long long period_length; + double proportions; +} uv__cpu_constraint; + +int uv__get_constrained_cpu(uv__cpu_constraint* constraint); +#endif + +#if defined(__sun) && !defined(__illumos__) +#ifdef SO_FLOW_NAME +/* Since it's impossible to detect the Solaris 11.4 version via OS macros, + * so we check the presence of the socket option SO_FLOW_NAME that was first + * introduced to Solaris 11.4 and define a custom macro for determining 11.4. + */ +#define UV__SOLARIS_11_4 (1) +#else +#define UV__SOLARIS_11_4 (0) +#endif +#endif + +#if defined(EVFILT_USER) && defined(NOTE_TRIGGER) +/* EVFILT_USER is available since OS X 10.6, DragonFlyBSD 4.0, + * FreeBSD 8.1, and NetBSD 10.0. + * + * Note that even though EVFILT_USER is defined on the current system, + * it may still fail to work at runtime somehow. In that case, we fall + * back to pipe-based signaling. + */ +#define UV__KQUEUE_EVFILT_USER 1 +/* Magic number of identifier used for EVFILT_USER during runtime detection. + * There are no Google hits for this number when I create it. That way, + * people will be directed here if this number gets printed due to some + * kqueue error and they google for help. */ +#define UV__KQUEUE_EVFILT_USER_IDENT 0x1e7e7711 +#else +#define UV__KQUEUE_EVFILT_USER 0 +#endif + #endif /* UV_UNIX_INTERNAL_H_ */ diff --git a/deps/uv/src/unix/kqueue.c b/deps/uv/src/unix/kqueue.c index 4d09edc06a0972..876b717086c609 100644 --- a/deps/uv/src/unix/kqueue.c +++ b/deps/uv/src/unix/kqueue.c @@ -99,6 +99,39 @@ int uv__io_fork(uv_loop_t* loop) { int uv__io_check_fd(uv_loop_t* loop, int fd) { struct kevent ev; int rc; + struct stat sb; +#ifdef __APPLE__ + char path[MAXPATHLEN]; +#endif + + if (uv__fstat(fd, &sb)) + return UV__ERR(errno); + + /* On FreeBSD, kqueue only supports EVFILT_READ notification for regular files + * and always reports ready events for writing, resulting in busy-looping. + * + * On Darwin, DragonFlyBSD, NetBSD and OpenBSD, kqueue reports ready events for + * regular files as readable and writable only once, acting like an EV_ONESHOT. + * + * Neither of the above cases should be added to the kqueue. + */ + if (S_ISREG(sb.st_mode) || S_ISDIR(sb.st_mode)) + return UV_EINVAL; + +#ifdef __APPLE__ + /* On Darwin (both macOS and iOS), in addition to regular files, FIFOs also don't + * work properly with kqueue: the disconnection from the last writer won't trigger + * an event for kqueue in spite of what the man pages say. Thus, we also disallow + * the case of S_IFIFO. */ + if (S_ISFIFO(sb.st_mode)) { + /* File descriptors of FIFO, pipe and kqueue share the same type of file, + * therefore there is no way to tell them apart via stat.st_mode&S_IFMT. + * Fortunately, FIFO is the only one that has a persisted file on filesystem, + * from which we're able to make the distinction for it. */ + if (!fcntl(fd, F_GETPATH, path)) + return UV_EINVAL; + } +#endif rc = 0; EV_SET(&ev, fd, EVFILT_READ, EV_ADD, 0, 0, 0); @@ -334,6 +367,17 @@ void uv__io_poll(uv_loop_t* loop, int timeout) { continue; } +#if UV__KQUEUE_EVFILT_USER + if (ev->filter == EVFILT_USER) { + w = &loop->async_io_watcher; + assert(fd == w->fd); + uv__metrics_update_idle_time(loop); + w->cb(loop, w, w->events); + nevents++; + continue; + } +#endif + if (ev->filter == EVFILT_VNODE) { assert(w->events == POLLIN); assert(w->pevents == POLLIN); diff --git a/deps/uv/src/unix/linux.c b/deps/uv/src/unix/linux.c index 5a0800e112e4f9..803a9a9d3f04c9 100644 --- a/deps/uv/src/unix/linux.c +++ b/deps/uv/src/unix/linux.c @@ -126,6 +126,7 @@ enum { UV__IORING_SETUP_SQPOLL = 2u, + UV__IORING_SETUP_NO_SQARRAY = 0x10000u, }; enum { @@ -147,6 +148,7 @@ enum { UV__IORING_OP_MKDIRAT = 37, UV__IORING_OP_SYMLINKAT = 38, UV__IORING_OP_LINKAT = 39, + UV__IORING_OP_FTRUNCATE = 55, }; enum { @@ -159,10 +161,6 @@ enum { UV__IORING_SQ_CQ_OVERFLOW = 2u, }; -enum { - UV__MKDIRAT_SYMLINKAT_LINKAT = 1u, -}; - struct uv__io_cqring_offsets { uint32_t head; uint32_t tail; @@ -475,8 +473,16 @@ static int uv__use_io_uring(void) { use = atomic_load_explicit(&use_io_uring, memory_order_relaxed); if (use == 0) { - /* Disable io_uring by default due to CVE-2024-22017. */ - use = -1; + use = uv__kernel_version() >= +#if defined(__hppa__) + /* io_uring first supported on parisc in 6.1, functional in .51 */ + /* https://lore.kernel.org/all/cb912694-b1fe-dbb0-4d8c-d608f3526905@gmx.de/ */ + /* 6.1.51 */ 0x060133 +#else + /* Older kernels have a bug where the sqpoll thread uses 100% CPU. */ + /* 5.10.186 */ 0x050ABA +#endif + ? 1 : -1; /* But users can still enable it if they so desire. */ val = getenv("UV_USE_IO_URING"); @@ -491,14 +497,6 @@ static int uv__use_io_uring(void) { } -UV_EXTERN int uv__node_patch_is_using_io_uring(void) { - // This function exists only in the modified copy of libuv in the Node.js - // repository. Node.js checks if this function exists and, if it does, uses it - // to determine whether libuv is using io_uring or not. - return uv__use_io_uring(); -} - - static void uv__iou_init(int epollfd, struct uv__iou* iou, uint32_t entries, @@ -509,10 +507,13 @@ static void uv__iou_init(int epollfd, size_t sqlen; size_t maxlen; size_t sqelen; + unsigned kernel_version; + uint32_t* sqarray; uint32_t i; char* sq; char* sqe; int ringfd; + int no_sqarray; sq = MAP_FAILED; sqe = MAP_FAILED; @@ -520,11 +521,15 @@ static void uv__iou_init(int epollfd, if (!uv__use_io_uring()) return; + kernel_version = uv__kernel_version(); + no_sqarray = + UV__IORING_SETUP_NO_SQARRAY * (kernel_version >= /* 6.6 */0x060600); + /* SQPOLL required CAP_SYS_NICE until linux v5.12 relaxed that requirement. * Mostly academic because we check for a v5.13 kernel afterwards anyway. */ memset(¶ms, 0, sizeof(params)); - params.flags = flags; + params.flags = flags | no_sqarray; if (flags & UV__IORING_SETUP_SQPOLL) params.sq_thread_idle = 10; /* milliseconds */ @@ -586,7 +591,6 @@ static void uv__iou_init(int epollfd, iou->sqhead = (uint32_t*) (sq + params.sq_off.head); iou->sqtail = (uint32_t*) (sq + params.sq_off.tail); iou->sqmask = *(uint32_t*) (sq + params.sq_off.ring_mask); - iou->sqarray = (uint32_t*) (sq + params.sq_off.array); iou->sqflags = (uint32_t*) (sq + params.sq_off.flags); iou->cqhead = (uint32_t*) (sq + params.cq_off.head); iou->cqtail = (uint32_t*) (sq + params.cq_off.tail); @@ -600,13 +604,13 @@ static void uv__iou_init(int epollfd, iou->sqelen = sqelen; iou->ringfd = ringfd; iou->in_flight = 0; - iou->flags = 0; - if (uv__kernel_version() >= /* 5.15.0 */ 0x050F00) - iou->flags |= UV__MKDIRAT_SYMLINKAT_LINKAT; + if (no_sqarray) + return; + sqarray = (uint32_t*) (sq + params.sq_off.array); for (i = 0; i <= iou->sqmask; i++) - iou->sqarray[i] = i; /* Slot -> sqe identity mapping. */ + sqarray[i] = i; /* Slot -> sqe identity mapping. */ return; @@ -622,7 +626,7 @@ static void uv__iou_init(int epollfd, static void uv__iou_delete(struct uv__iou* iou) { - if (iou->ringfd != -1) { + if (iou->ringfd > -1) { munmap(iou->sq, iou->maxlen); munmap(iou->sqe, iou->sqelen); uv__close(iou->ringfd); @@ -636,7 +640,7 @@ int uv__platform_loop_init(uv_loop_t* loop) { lfields = uv__get_internal_fields(loop); lfields->ctl.ringfd = -1; - lfields->iou.ringfd = -1; + lfields->iou.ringfd = -2; /* "uninitialized" */ loop->inotify_watchers = NULL; loop->inotify_fd = -1; @@ -645,7 +649,6 @@ int uv__platform_loop_init(uv_loop_t* loop) { if (loop->backend_fd == -1) return UV__ERR(errno); - uv__iou_init(loop->backend_fd, &lfields->iou, 64, UV__IORING_SETUP_SQPOLL); uv__iou_init(loop->backend_fd, &lfields->ctl, 256, 0); return 0; @@ -713,23 +716,17 @@ void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) { * This avoids a problem where the same file description remains open * in another process, causing repeated junk epoll events. * + * Perform EPOLL_CTL_DEL immediately instead of going through + * io_uring's submit queue, otherwise the file descriptor may + * be closed by the time the kernel starts the operation. + * * We pass in a dummy epoll_event, to work around a bug in old kernels. * * Work around a bug in kernels 3.10 to 3.19 where passing a struct that * has the EPOLLWAKEUP flag set generates spurious audit syslog warnings. */ memset(&dummy, 0, sizeof(dummy)); - - if (inv == NULL) { - epoll_ctl(loop->backend_fd, EPOLL_CTL_DEL, fd, &dummy); - } else { - uv__epoll_ctl_prep(loop->backend_fd, - &lfields->ctl, - inv->prep, - EPOLL_CTL_DEL, - fd, - &dummy); - } + epoll_ctl(loop->backend_fd, EPOLL_CTL_DEL, fd, &dummy); } @@ -764,6 +761,23 @@ static struct uv__io_uring_sqe* uv__iou_get_sqe(struct uv__iou* iou, uint32_t mask; uint32_t slot; + /* Lazily create the ring. State machine: -2 means uninitialized, -1 means + * initialization failed. Anything else is a valid ring file descriptor. + */ + if (iou->ringfd == -2) { + /* By default, the SQPOLL is not created. Enable only if the loop is + * configured with UV_LOOP_USE_IO_URING_SQPOLL. + */ + if ((loop->flags & UV_LOOP_ENABLE_IO_URING_SQPOLL) == 0) { + iou->ringfd = -1; + return NULL; + } + + uv__iou_init(loop->backend_fd, iou, 64, UV__IORING_SETUP_SQPOLL); + if (iou->ringfd == -2) + iou->ringfd = -1; /* "failed" */ + } + if (iou->ringfd == -1) return NULL; @@ -787,7 +801,7 @@ static struct uv__io_uring_sqe* uv__iou_get_sqe(struct uv__iou* iou, req->work_req.done = NULL; uv__queue_init(&req->work_req.wq); - uv__req_register(loop, req); + uv__req_register(loop); iou->in_flight++; return sqe; @@ -850,6 +864,26 @@ int uv__iou_fs_close(uv_loop_t* loop, uv_fs_t* req) { } +int uv__iou_fs_ftruncate(uv_loop_t* loop, uv_fs_t* req) { + struct uv__io_uring_sqe* sqe; + struct uv__iou* iou; + + if (uv__kernel_version() < /* 6.9 */0x060900) + return 0; + + iou = &uv__get_internal_fields(loop)->iou; + sqe = uv__iou_get_sqe(iou, loop, req); + if (sqe == NULL) + return 0; + + sqe->fd = req->file; + sqe->len = req->off; + sqe->opcode = UV__IORING_OP_FTRUNCATE; + uv__iou_submit(iou); + + return 1; +} + int uv__iou_fs_fsync_or_fdatasync(uv_loop_t* loop, uv_fs_t* req, uint32_t fsync_flags) { @@ -879,11 +913,10 @@ int uv__iou_fs_link(uv_loop_t* loop, uv_fs_t* req) { struct uv__io_uring_sqe* sqe; struct uv__iou* iou; - iou = &uv__get_internal_fields(loop)->iou; - - if (!(iou->flags & UV__MKDIRAT_SYMLINKAT_LINKAT)) + if (uv__kernel_version() < /* 5.15.0 */0x050F00) return 0; + iou = &uv__get_internal_fields(loop)->iou; sqe = uv__iou_get_sqe(iou, loop, req); if (sqe == NULL) return 0; @@ -904,11 +937,10 @@ int uv__iou_fs_mkdir(uv_loop_t* loop, uv_fs_t* req) { struct uv__io_uring_sqe* sqe; struct uv__iou* iou; - iou = &uv__get_internal_fields(loop)->iou; - - if (!(iou->flags & UV__MKDIRAT_SYMLINKAT_LINKAT)) + if (uv__kernel_version() < /* 5.15.0 */0x050F00) return 0; + iou = &uv__get_internal_fields(loop)->iou; sqe = uv__iou_get_sqe(iou, loop, req); if (sqe == NULL) return 0; @@ -972,11 +1004,10 @@ int uv__iou_fs_symlink(uv_loop_t* loop, uv_fs_t* req) { struct uv__io_uring_sqe* sqe; struct uv__iou* iou; - iou = &uv__get_internal_fields(loop)->iou; - - if (!(iou->flags & UV__MKDIRAT_SYMLINKAT_LINKAT)) + if (uv__kernel_version() < /* 5.15.0 */0x050F00) return 0; + iou = &uv__get_internal_fields(loop)->iou; sqe = uv__iou_get_sqe(iou, loop, req); if (sqe == NULL) return 0; @@ -1155,7 +1186,7 @@ static void uv__poll_io_uring(uv_loop_t* loop, struct uv__iou* iou) { req = (uv_fs_t*) (uintptr_t) e->user_data; assert(req->type == UV_FS); - uv__req_unregister(loop, req); + uv__req_unregister(loop); iou->in_flight--; /* If the op is not supported by the kernel retry using the thread pool */ @@ -1207,6 +1238,10 @@ static void uv__poll_io_uring(uv_loop_t* loop, struct uv__iou* iou) { } +/* Only for EPOLL_CTL_ADD and EPOLL_CTL_MOD. EPOLL_CTL_DEL should always be + * executed immediately, otherwise the file descriptor may have been closed + * by the time the kernel starts the operation. + */ static void uv__epoll_ctl_prep(int epollfd, struct uv__iou* ctl, struct epoll_event (*events)[256], @@ -1218,45 +1253,28 @@ static void uv__epoll_ctl_prep(int epollfd, uint32_t mask; uint32_t slot; - if (ctl->ringfd == -1) { - if (!epoll_ctl(epollfd, op, fd, e)) - return; - - if (op == EPOLL_CTL_DEL) - return; /* Ignore errors, may be racing with another thread. */ - - if (op != EPOLL_CTL_ADD) - abort(); - - if (errno != EEXIST) - abort(); - - /* File descriptor that's been watched before, update event mask. */ - if (!epoll_ctl(epollfd, EPOLL_CTL_MOD, fd, e)) - return; + assert(op == EPOLL_CTL_ADD || op == EPOLL_CTL_MOD); + assert(ctl->ringfd != -1); - abort(); - } else { - mask = ctl->sqmask; - slot = (*ctl->sqtail)++ & mask; + mask = ctl->sqmask; + slot = (*ctl->sqtail)++ & mask; - pe = &(*events)[slot]; - *pe = *e; + pe = &(*events)[slot]; + *pe = *e; - sqe = ctl->sqe; - sqe = &sqe[slot]; + sqe = ctl->sqe; + sqe = &sqe[slot]; - memset(sqe, 0, sizeof(*sqe)); - sqe->addr = (uintptr_t) pe; - sqe->fd = epollfd; - sqe->len = op; - sqe->off = fd; - sqe->opcode = UV__IORING_OP_EPOLL_CTL; - sqe->user_data = op | slot << 2 | (int64_t) fd << 32; + memset(sqe, 0, sizeof(*sqe)); + sqe->addr = (uintptr_t) pe; + sqe->fd = epollfd; + sqe->len = op; + sqe->off = fd; + sqe->opcode = UV__IORING_OP_EPOLL_CTL; + sqe->user_data = op | slot << 2 | (int64_t) fd << 32; - if ((*ctl->sqhead & mask) == (*ctl->sqtail & mask)) - uv__epoll_ctl_flush(epollfd, ctl, events); - } + if ((*ctl->sqhead & mask) == (*ctl->sqtail & mask)) + uv__epoll_ctl_flush(epollfd, ctl, events); } @@ -1396,9 +1414,29 @@ void uv__io_poll(uv_loop_t* loop, int timeout) { w->events = w->pevents; e.events = w->pevents; + if (w == &loop->async_io_watcher) + /* Enable edge-triggered mode on async_io_watcher(eventfd), + * so that we're able to eliminate the overhead of reading + * the eventfd via system call on each event loop wakeup. + */ + e.events |= EPOLLET; e.data.fd = w->fd; + fd = w->fd; + + if (ctl->ringfd != -1) { + uv__epoll_ctl_prep(epollfd, ctl, &prep, op, fd, &e); + continue; + } + + if (!epoll_ctl(epollfd, op, fd, &e)) + continue; - uv__epoll_ctl_prep(epollfd, ctl, &prep, op, w->fd, &e); + assert(op == EPOLL_CTL_ADD); + assert(errno == EEXIST); + + /* File descriptor that's been watched before, update event mask. */ + if (epoll_ctl(epollfd, EPOLL_CTL_MOD, fd, &e)) + abort(); } inv.events = events; @@ -1486,8 +1524,12 @@ void uv__io_poll(uv_loop_t* loop, int timeout) { * * Ignore all errors because we may be racing with another thread * when the file descriptor is closed. + * + * Perform EPOLL_CTL_DEL immediately instead of going through + * io_uring's submit queue, otherwise the file descriptor may + * be closed by the time the kernel starts the operation. */ - uv__epoll_ctl_prep(epollfd, ctl, &prep, EPOLL_CTL_DEL, fd, pe); + epoll_ctl(epollfd, EPOLL_CTL_DEL, fd, pe); continue; } @@ -1622,36 +1664,17 @@ uint64_t uv__hrtime(uv_clocktype_t type) { int uv_resident_set_memory(size_t* rss) { char buf[1024]; const char* s; - ssize_t n; long val; - int fd; + int rc; int i; - do - fd = open("/proc/self/stat", O_RDONLY); - while (fd == -1 && errno == EINTR); - - if (fd == -1) - return UV__ERR(errno); - - do - n = read(fd, buf, sizeof(buf) - 1); - while (n == -1 && errno == EINTR); - - uv__close(fd); - if (n == -1) - return UV__ERR(errno); - buf[n] = '\0'; - - s = strchr(buf, ' '); - if (s == NULL) - goto err; - - s += 1; - if (*s != '(') - goto err; + /* rss: 24th element */ + rc = uv__slurp("/proc/self/stat", buf, sizeof(buf)); + if (rc < 0) + return rc; - s = strchr(s, ')'); + /* find the last ')' */ + s = strrchr(buf, ')'); if (s == NULL) goto err; @@ -1663,9 +1686,7 @@ int uv_resident_set_memory(size_t* rss) { errno = 0; val = strtol(s, NULL, 10); - if (errno != 0) - goto err; - if (val < 0) + if (val < 0 || errno != 0) goto err; *rss = val * getpagesize(); @@ -2270,6 +2291,136 @@ uint64_t uv_get_available_memory(void) { } +static int uv__get_cgroupv2_constrained_cpu(const char* cgroup, + uv__cpu_constraint* constraint) { + char path[256]; + char buf[1024]; + unsigned int weight; + int cgroup_size; + const char* cgroup_trimmed; + char quota_buf[16]; + + if (strncmp(cgroup, "0::/", 4) != 0) + return UV_EINVAL; + + /* Trim ending \n by replacing it with a 0 */ + cgroup_trimmed = cgroup + sizeof("0::/") - 1; /* Skip the prefix "0::/" */ + cgroup_size = (int)strcspn(cgroup_trimmed, "\n"); /* Find the first slash */ + + /* Construct the path to the cpu.max file */ + snprintf(path, sizeof(path), "/sys/fs/cgroup/%.*s/cpu.max", cgroup_size, + cgroup_trimmed); + + /* Read cpu.max */ + if (uv__slurp(path, buf, sizeof(buf)) < 0) + return UV_EIO; + + if (sscanf(buf, "%15s %llu", quota_buf, &constraint->period_length) != 2) + return UV_EINVAL; + + if (strncmp(quota_buf, "max", 3) == 0) + constraint->quota_per_period = LLONG_MAX; + else if (sscanf(quota_buf, "%lld", &constraint->quota_per_period) != 1) + return UV_EINVAL; // conversion failed + + /* Construct the path to the cpu.weight file */ + snprintf(path, sizeof(path), "/sys/fs/cgroup/%.*s/cpu.weight", cgroup_size, + cgroup_trimmed); + + /* Read cpu.weight */ + if (uv__slurp(path, buf, sizeof(buf)) < 0) + return UV_EIO; + + if (sscanf(buf, "%u", &weight) != 1) + return UV_EINVAL; + + constraint->proportions = (double)weight / 100.0; + + return 0; +} + +static char* uv__cgroup1_find_cpu_controller(const char* cgroup, + int* cgroup_size) { + /* Seek to the cpu controller line. */ + char* cgroup_cpu = strstr(cgroup, ":cpu,"); + + if (cgroup_cpu != NULL) { + /* Skip the controller prefix to the start of the cgroup path. */ + cgroup_cpu += sizeof(":cpu,") - 1; + /* Determine the length of the cgroup path, excluding the newline. */ + *cgroup_size = (int)strcspn(cgroup_cpu, "\n"); + } + + return cgroup_cpu; +} + +static int uv__get_cgroupv1_constrained_cpu(const char* cgroup, + uv__cpu_constraint* constraint) { + char path[256]; + char buf[1024]; + unsigned int shares; + int cgroup_size; + char* cgroup_cpu; + + cgroup_cpu = uv__cgroup1_find_cpu_controller(cgroup, &cgroup_size); + + if (cgroup_cpu == NULL) + return UV_EIO; + + /* Construct the path to the cpu.cfs_quota_us file */ + snprintf(path, sizeof(path), "/sys/fs/cgroup/%.*s/cpu.cfs_quota_us", + cgroup_size, cgroup_cpu); + + if (uv__slurp(path, buf, sizeof(buf)) < 0) + return UV_EIO; + + if (sscanf(buf, "%lld", &constraint->quota_per_period) != 1) + return UV_EINVAL; + + /* Construct the path to the cpu.cfs_period_us file */ + snprintf(path, sizeof(path), "/sys/fs/cgroup/%.*s/cpu.cfs_period_us", + cgroup_size, cgroup_cpu); + + /* Read cpu.cfs_period_us */ + if (uv__slurp(path, buf, sizeof(buf)) < 0) + return UV_EIO; + + if (sscanf(buf, "%lld", &constraint->period_length) != 1) + return UV_EINVAL; + + /* Construct the path to the cpu.shares file */ + snprintf(path, sizeof(path), "/sys/fs/cgroup/%.*s/cpu.shares", cgroup_size, + cgroup_cpu); + + /* Read cpu.shares */ + if (uv__slurp(path, buf, sizeof(buf)) < 0) + return UV_EIO; + + if (sscanf(buf, "%u", &shares) != 1) + return UV_EINVAL; + + constraint->proportions = (double)shares / 1024.0; + + return 0; +} + +int uv__get_constrained_cpu(uv__cpu_constraint* constraint) { + char cgroup[1024]; + + /* Read the cgroup from /proc/self/cgroup */ + if (uv__slurp("/proc/self/cgroup", cgroup, sizeof(cgroup)) < 0) + return UV_EIO; + + /* Check if the system is using cgroup v2 by examining /proc/self/cgroup + * The entry for cgroup v2 is always in the format "0::$PATH" + * see https://docs.kernel.org/admin-guide/cgroup-v2.html */ + if (strncmp(cgroup, "0::/", 4) == 0) + return uv__get_cgroupv2_constrained_cpu(cgroup, constraint); + else + return uv__get_cgroupv1_constrained_cpu(cgroup, constraint); +} + + void uv_loadavg(double avg[3]) { struct sysinfo info; char buf[128]; /* Large enough to hold all of /proc/loadavg. */ diff --git a/deps/uv/src/unix/loop.c b/deps/uv/src/unix/loop.c index a9468e8e19cbed..179ee999d8052e 100644 --- a/deps/uv/src/unix/loop.c +++ b/deps/uv/src/unix/loop.c @@ -217,6 +217,14 @@ int uv__loop_configure(uv_loop_t* loop, uv_loop_option option, va_list ap) { return 0; } +#if defined(__linux__) + if (option == UV_LOOP_USE_IO_URING_SQPOLL) { + loop->flags |= UV_LOOP_ENABLE_IO_URING_SQPOLL; + return 0; + } +#endif + + if (option != UV_LOOP_BLOCK_SIGNAL) return UV_ENOSYS; diff --git a/deps/uv/src/unix/pipe.c b/deps/uv/src/unix/pipe.c index fca364426f809e..1f9acfac41e9c5 100644 --- a/deps/uv/src/unix/pipe.c +++ b/deps/uv/src/unix/pipe.c @@ -76,8 +76,13 @@ int uv_pipe_bind2(uv_pipe_t* handle, if (name == NULL) return UV_EINVAL; + /* namelen==0 on Linux means autobind the listen socket in the abstract + * socket namespace, see `man 7 unix` for details. + */ +#if !defined(__linux__) if (namelen == 0) return UV_EINVAL; +#endif if (includes_nul(name, namelen)) return UV_EINVAL; @@ -344,8 +349,15 @@ static int uv__pipe_getsockpeername(const uv_pipe_t* handle, uv__peersockfunc func, char* buffer, size_t* size) { +#if defined(__linux__) + static const int is_linux = 1; +#else + static const int is_linux = 0; +#endif struct sockaddr_un sa; socklen_t addrlen; + size_t slop; + char* p; int err; addrlen = sizeof(sa); @@ -359,17 +371,20 @@ static int uv__pipe_getsockpeername(const uv_pipe_t* handle, return err; } -#if defined(__linux__) - if (sa.sun_path[0] == 0) - /* Linux abstract namespace */ + slop = 1; + if (is_linux && sa.sun_path[0] == '\0') { + /* Linux abstract namespace. Not zero-terminated. */ + slop = 0; addrlen -= offsetof(struct sockaddr_un, sun_path); - else -#endif - addrlen = strlen(sa.sun_path); - + } else { + p = memchr(sa.sun_path, '\0', sizeof(sa.sun_path)); + if (p == NULL) + p = ARRAY_END(sa.sun_path); + addrlen = p - sa.sun_path; + } - if ((size_t)addrlen >= *size) { - *size = addrlen + 1; + if ((size_t)addrlen + slop > *size) { + *size = addrlen + slop; return UV_ENOBUFS; } @@ -487,7 +502,11 @@ int uv_pipe_chmod(uv_pipe_t* handle, int mode) { int uv_pipe(uv_os_fd_t fds[2], int read_flags, int write_flags) { uv_os_fd_t temp[2]; int err; -#if defined(__FreeBSD__) || defined(__linux__) +#if defined(__linux__) || \ + defined(__FreeBSD__) || \ + defined(__OpenBSD__) || \ + defined(__DragonFly__) || \ + defined(__NetBSD__) int flags = O_CLOEXEC; if ((read_flags & UV_NONBLOCK_PIPE) && (write_flags & UV_NONBLOCK_PIPE)) diff --git a/deps/uv/src/unix/process.c b/deps/uv/src/unix/process.c index 4812a90f2f5047..f2038f2c0e823e 100644 --- a/deps/uv/src/unix/process.c +++ b/deps/uv/src/unix/process.c @@ -55,7 +55,8 @@ extern char **environ; #endif -#if defined(__linux__) +#if defined(__linux__) || \ + defined(__GNU__) # include #endif @@ -63,11 +64,7 @@ extern char **environ; # include "zos-base.h" #endif -#if defined(__APPLE__) || \ - defined(__DragonFly__) || \ - defined(__FreeBSD__) || \ - defined(__NetBSD__) || \ - defined(__OpenBSD__) +#ifdef UV_HAVE_KQUEUE #include #else #define UV_USE_SIGCHLD diff --git a/deps/uv/src/unix/signal.c b/deps/uv/src/unix/signal.c index bc4206e6d864c8..f23c887d0d6788 100644 --- a/deps/uv/src/unix/signal.c +++ b/deps/uv/src/unix/signal.c @@ -195,7 +195,7 @@ static void uv__signal_handler(int signum) { for (handle = uv__signal_first_handle(signum); handle != NULL && handle->signum == signum; - handle = RB_NEXT(uv__signal_tree_s, &uv__signal_tree, handle)) { + handle = RB_NEXT(uv__signal_tree_s, handle)) { int r; msg.signum = signum; diff --git a/deps/uv/src/unix/stream.c b/deps/uv/src/unix/stream.c index 28c4d5463c4622..18763b4744c30a 100644 --- a/deps/uv/src/unix/stream.c +++ b/deps/uv/src/unix/stream.c @@ -457,7 +457,7 @@ void uv__stream_destroy(uv_stream_t* stream) { assert(stream->flags & UV_HANDLE_CLOSED); if (stream->connect_req) { - uv__req_unregister(stream->loop, stream->connect_req); + uv__req_unregister(stream->loop); stream->connect_req->cb(stream->connect_req, UV_ECANCELED); stream->connect_req = NULL; } @@ -642,7 +642,7 @@ static void uv__drain(uv_stream_t* stream) { if ((stream->flags & UV_HANDLE_CLOSING) || !(stream->flags & UV_HANDLE_SHUT)) { stream->shutdown_req = NULL; - uv__req_unregister(stream->loop, req); + uv__req_unregister(stream->loop); err = 0; if (stream->flags & UV_HANDLE_CLOSING) @@ -698,7 +698,8 @@ static int uv__write_req_update(uv_stream_t* stream, do { len = n < buf->len ? n : buf->len; - buf->base += len; + if (buf->len != 0) + buf->base += len; buf->len -= len; buf += (buf->len == 0); /* Advance to next buffer if this one is empty. */ n -= len; @@ -912,7 +913,7 @@ static void uv__write_callbacks(uv_stream_t* stream) { q = uv__queue_head(&pq); req = uv__queue_data(q, uv_write_t, queue); uv__queue_remove(q); - uv__req_unregister(stream->loop, req); + uv__req_unregister(stream->loop); if (req->bufs != NULL) { stream->write_queue_size -= uv__write_req_size(req); @@ -979,11 +980,13 @@ static int uv__stream_queue_fd(uv_stream_t* stream, int fd) { static int uv__stream_recv_cmsg(uv_stream_t* stream, struct msghdr* msg) { struct cmsghdr* cmsg; + char* p; + char* pe; int fd; int err; - size_t i; size_t count; + err = 0; for (cmsg = CMSG_FIRSTHDR(msg); cmsg != NULL; cmsg = CMSG_NXTHDR(msg, cmsg)) { if (cmsg->cmsg_type != SCM_RIGHTS) { fprintf(stderr, "ignoring non-SCM_RIGHTS ancillary data: %d\n", @@ -996,24 +999,26 @@ static int uv__stream_recv_cmsg(uv_stream_t* stream, struct msghdr* msg) { assert(count % sizeof(fd) == 0); count /= sizeof(fd); - for (i = 0; i < count; i++) { - memcpy(&fd, (char*) CMSG_DATA(cmsg) + i * sizeof(fd), sizeof(fd)); - /* Already has accepted fd, queue now */ - if (stream->accepted_fd != -1) { - err = uv__stream_queue_fd(stream, fd); - if (err != 0) { - /* Close rest */ - for (; i < count; i++) - uv__close(fd); - return err; - } - } else { - stream->accepted_fd = fd; + p = (void*) CMSG_DATA(cmsg); + pe = p + count * sizeof(fd); + + while (p < pe) { + memcpy(&fd, p, sizeof(fd)); + p += sizeof(fd); + + if (err == 0) { + if (stream->accepted_fd == -1) + stream->accepted_fd = fd; + else + err = uv__stream_queue_fd(stream, fd); } + + if (err != 0) + uv__close(fd); } } - return 0; + return err; } @@ -1268,7 +1273,7 @@ static void uv__stream_connect(uv_stream_t* stream) { return; stream->connect_req = NULL; - uv__req_unregister(stream->loop, req); + uv__req_unregister(stream->loop); if (error < 0 || uv__queue_empty(&stream->write_queue)) { uv__io_stop(stream->loop, &stream->io_watcher, POLLOUT); diff --git a/deps/uv/src/unix/tcp.c b/deps/uv/src/unix/tcp.c index 799fca77aa5392..98970d75278e31 100644 --- a/deps/uv/src/unix/tcp.c +++ b/deps/uv/src/unix/tcp.c @@ -167,6 +167,12 @@ int uv__tcp_bind(uv_tcp_t* tcp, if (setsockopt(tcp->io_watcher.fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on))) return UV__ERR(errno); + if (flags & UV_TCP_REUSEPORT) { + err = uv__sock_reuseport(tcp->io_watcher.fd); + if (err) + return err; + } + #ifndef __OpenBSD__ #ifdef IPV6_V6ONLY if (addr->sa_family == AF_INET6) { @@ -452,6 +458,14 @@ int uv__tcp_nodelay(int fd, int on) { } +#if (defined(UV__SOLARIS_11_4) && !UV__SOLARIS_11_4) || \ + (defined(__DragonFly__) && __DragonFly_version < 500702) +/* DragonFlyBSD <500702 and Solaris <11.4 require millisecond units + * for TCP keepalive options. */ +#define UV_KEEPALIVE_FACTOR(x) (x *= 1000) +#else +#define UV_KEEPALIVE_FACTOR(x) +#endif int uv__tcp_keepalive(int fd, int on, unsigned int delay) { int idle; int intvl; @@ -467,8 +481,8 @@ int uv__tcp_keepalive(int fd, int on, unsigned int delay) { if (!on) return 0; - if (delay == 0) - return -1; + if (delay < 1) + return UV_EINVAL; #ifdef __sun /* The implementation of TCP keep-alive on Solaris/SmartOS is a bit unusual @@ -501,49 +515,53 @@ int uv__tcp_keepalive(int fd, int on, unsigned int delay) { if (idle > 10*24*60*60) idle = 10*24*60*60; + UV_KEEPALIVE_FACTOR(idle); + /* `TCP_KEEPIDLE`, `TCP_KEEPINTVL`, and `TCP_KEEPCNT` were not available on Solaris * until version 11.4, but let's take a chance here. */ #if defined(TCP_KEEPIDLE) && defined(TCP_KEEPINTVL) && defined(TCP_KEEPCNT) if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &idle, sizeof(idle))) return UV__ERR(errno); - intvl = idle/3; + intvl = 10; /* required at least 10 seconds */ + UV_KEEPALIVE_FACTOR(intvl); if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, &intvl, sizeof(intvl))) return UV__ERR(errno); - cnt = 3; + cnt = 1; /* 1 retry, ensure (TCP_KEEPINTVL * TCP_KEEPCNT) is 10 seconds */ if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPCNT, &cnt, sizeof(cnt))) return UV__ERR(errno); #else /* Fall back to the first implementation of tcp-alive mechanism for older Solaris, * simulate the tcp-alive mechanism on other platforms via `TCP_KEEPALIVE_THRESHOLD` + `TCP_KEEPALIVE_ABORT_THRESHOLD`. */ - idle *= 1000; /* kernel expects milliseconds */ if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPALIVE_THRESHOLD, &idle, sizeof(idle))) return UV__ERR(errno); /* Note that the consequent probes will not be sent at equal intervals on Solaris, * but will be sent using the exponential backoff algorithm. */ - intvl = idle/3; - cnt = 3; - int time_to_abort = intvl * cnt; + int time_to_abort = 10; /* 10 seconds */ + UV_KEEPALIVE_FACTOR(time_to_abort); if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPALIVE_ABORT_THRESHOLD, &time_to_abort, sizeof(time_to_abort))) return UV__ERR(errno); #endif #else /* !defined(__sun) */ + idle = delay; + UV_KEEPALIVE_FACTOR(idle); #ifdef TCP_KEEPIDLE - if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &delay, sizeof(delay))) + if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &idle, sizeof(idle))) return UV__ERR(errno); #elif defined(TCP_KEEPALIVE) /* Darwin/macOS uses TCP_KEEPALIVE in place of TCP_KEEPIDLE. */ - if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPALIVE, &delay, sizeof(delay))) + if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPALIVE, &idle, sizeof(idle))) return UV__ERR(errno); #endif #ifdef TCP_KEEPINTVL - intvl = 1; /* 1 second; same as default on Win32 */ + intvl = 1; /* 1 second; same as default on Win32 */ + UV_KEEPALIVE_FACTOR(intvl); if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, &intvl, sizeof(intvl))) return UV__ERR(errno); #endif @@ -612,7 +630,7 @@ void uv__tcp_close(uv_tcp_t* handle) { int uv_socketpair(int type, int protocol, uv_os_sock_t fds[2], int flags0, int flags1) { uv_os_sock_t temp[2]; int err; -#if defined(__FreeBSD__) || defined(__linux__) +#if defined(SOCK_NONBLOCK) && defined(SOCK_CLOEXEC) int flags; flags = type | SOCK_CLOEXEC; diff --git a/deps/uv/src/unix/tty.c b/deps/uv/src/unix/tty.c index d099bdb3b67721..793054ba5a9bff 100644 --- a/deps/uv/src/unix/tty.c +++ b/deps/uv/src/unix/tty.c @@ -335,6 +335,37 @@ int uv_tty_set_mode(uv_tty_t* tty, uv_tty_mode_t mode) { } +void uv__tty_close(uv_tty_t* handle) { + int expected; + int fd; + + fd = handle->io_watcher.fd; + if (fd == -1) + goto done; + + /* This is used for uv_tty_reset_mode() */ + do + expected = 0; + while (!atomic_compare_exchange_strong(&termios_spinlock, &expected, 1)); + + if (fd == orig_termios_fd) { + /* XXX(bnoordhuis) the tcsetattr is probably wrong when there are still + * other uv_tty_t handles active that refer to the same tty/pty but it's + * hard to recognize that particular situation without maintaining some + * kind of process-global data structure, and that still won't work in a + * multi-process setup. + */ + uv__tcsetattr(fd, TCSANOW, &orig_termios); + orig_termios_fd = -1; + } + + atomic_store(&termios_spinlock, 0); + +done: + uv__stream_close((uv_stream_t*) handle); +} + + int uv_tty_get_winsize(uv_tty_t* tty, int* width, int* height) { struct winsize ws; int err; @@ -452,7 +483,7 @@ int uv_tty_reset_mode(void) { saved_errno = errno; if (atomic_exchange(&termios_spinlock, 1)) - return UV_EBUSY; /* In uv_tty_set_mode(). */ + return UV_EBUSY; /* In uv_tty_set_mode() or uv__tty_close(). */ err = 0; if (orig_termios_fd != -1) diff --git a/deps/uv/src/unix/udp.c b/deps/uv/src/unix/udp.c index c2814512a5f507..f6640fc7231863 100644 --- a/deps/uv/src/unix/udp.c +++ b/deps/uv/src/unix/udp.c @@ -100,7 +100,7 @@ static void uv__udp_run_completed(uv_udp_t* handle) { uv__queue_remove(q); req = uv__queue_data(q, uv_udp_send_t, queue); - uv__req_unregister(handle->loop, req); + uv__req_unregister(handle->loop); handle->send_queue_size -= uv__count_bufs(req->bufs, req->nbufs); handle->send_queue_count--; @@ -141,14 +141,14 @@ static void uv__udp_io(uv_loop_t* loop, uv__io_t* w, unsigned int revents) { if (revents & POLLIN) uv__udp_recvmsg(handle); - if (revents & POLLOUT) { + if (revents & POLLOUT && !uv__is_closing(handle)) { uv__udp_sendmsg(handle); uv__udp_run_completed(handle); } } static int uv__udp_recvmmsg(uv_udp_t* handle, uv_buf_t* buf) { -#if defined(__linux__) || defined(__FreeBSD__) +#if defined(__linux__) || defined(__FreeBSD__) || defined(__APPLE__) struct sockaddr_in6 peers[20]; struct iovec iov[ARRAY_SIZE(peers)]; struct mmsghdr msgs[ARRAY_SIZE(peers)]; @@ -173,11 +173,18 @@ static int uv__udp_recvmmsg(uv_udp_t* handle, uv_buf_t* buf) { msgs[k].msg_hdr.msg_control = NULL; msgs[k].msg_hdr.msg_controllen = 0; msgs[k].msg_hdr.msg_flags = 0; + msgs[k].msg_len = 0; } +#if defined(__APPLE__) + do + nread = recvmsg_x(handle->io_watcher.fd, msgs, chunks, MSG_DONTWAIT); + while (nread == -1 && errno == EINTR); +#else do nread = recvmmsg(handle->io_watcher.fd, msgs, chunks, 0, NULL); while (nread == -1 && errno == EINTR); +#endif if (nread < 1) { if (nread == 0 || errno == EAGAIN || errno == EWOULDBLOCK) @@ -204,9 +211,9 @@ static int uv__udp_recvmmsg(uv_udp_t* handle, uv_buf_t* buf) { handle->recv_cb(handle, 0, buf, NULL, UV_UDP_MMSG_FREE); } return nread; -#else /* __linux__ || ____FreeBSD__ */ +#else /* __linux__ || ____FreeBSD__ || __APPLE__ */ return UV_ENOSYS; -#endif /* __linux__ || ____FreeBSD__ */ +#endif /* __linux__ || ____FreeBSD__ || __APPLE__ */ } static void uv__udp_recvmsg(uv_udp_t* handle) { @@ -275,8 +282,61 @@ static void uv__udp_recvmsg(uv_udp_t* handle) { && handle->recv_cb != NULL); } -static void uv__udp_sendmsg(uv_udp_t* handle) { -#if defined(__linux__) || defined(__FreeBSD__) +static void uv__udp_sendmsg_one(uv_udp_t* handle, uv_udp_send_t* req) { + struct uv__queue* q; + struct msghdr h; + ssize_t size; + + for (;;) { + memset(&h, 0, sizeof h); + if (req->addr.ss_family == AF_UNSPEC) { + h.msg_name = NULL; + h.msg_namelen = 0; + } else { + h.msg_name = &req->addr; + if (req->addr.ss_family == AF_INET6) + h.msg_namelen = sizeof(struct sockaddr_in6); + else if (req->addr.ss_family == AF_INET) + h.msg_namelen = sizeof(struct sockaddr_in); + else if (req->addr.ss_family == AF_UNIX) + h.msg_namelen = sizeof(struct sockaddr_un); + else { + assert(0 && "unsupported address family"); + abort(); + } + } + h.msg_iov = (struct iovec*) req->bufs; + h.msg_iovlen = req->nbufs; + + do + size = sendmsg(handle->io_watcher.fd, &h, 0); + while (size == -1 && errno == EINTR); + + if (size == -1) + if (errno == EAGAIN || errno == EWOULDBLOCK || errno == ENOBUFS) + return; + + req->status = (size == -1 ? UV__ERR(errno) : size); + + /* Sending a datagram is an atomic operation: either all data + * is written or nothing is (and EMSGSIZE is raised). That is + * why we don't handle partial writes. Just pop the request + * off the write queue and onto the completed queue, done. + */ + uv__queue_remove(&req->queue); + uv__queue_insert_tail(&handle->write_completed_queue, &req->queue); + uv__io_feed(handle->loop, &handle->io_watcher); + + if (uv__queue_empty(&handle->write_queue)) + return; + + q = uv__queue_head(&handle->write_queue); + req = uv__queue_data(q, uv_udp_send_t, queue); + } +} + +#if defined(__linux__) || defined(__FreeBSD__) || defined(__APPLE__) +static void uv__udp_sendmsg_many(uv_udp_t* handle) { uv_udp_send_t* req; struct mmsghdr h[20]; struct mmsghdr* p; @@ -285,16 +345,11 @@ static void uv__udp_sendmsg(uv_udp_t* handle) { size_t pkts; size_t i; - if (uv__queue_empty(&handle->write_queue)) - return; - write_queue_drain: for (pkts = 0, q = uv__queue_head(&handle->write_queue); pkts < ARRAY_SIZE(h) && q != &handle->write_queue; ++pkts, q = uv__queue_head(q)) { - assert(q != NULL); req = uv__queue_data(q, uv_udp_send_t, queue); - assert(req != NULL); p = &h[pkts]; memset(p, 0, sizeof(*p)); @@ -318,9 +373,15 @@ static void uv__udp_sendmsg(uv_udp_t* handle) { h[pkts].msg_hdr.msg_iovlen = req->nbufs; } +#if defined(__APPLE__) + do + npkts = sendmsg_x(handle->io_watcher.fd, h, pkts, MSG_DONTWAIT); + while (npkts == -1 && errno == EINTR); +#else do npkts = sendmmsg(handle->io_watcher.fd, h, pkts, 0); while (npkts == -1 && errno == EINTR); +#endif if (npkts < 1) { if (errno == EAGAIN || errno == EWOULDBLOCK || errno == ENOBUFS) @@ -328,10 +389,7 @@ static void uv__udp_sendmsg(uv_udp_t* handle) { for (i = 0, q = uv__queue_head(&handle->write_queue); i < pkts && q != &handle->write_queue; ++i, q = uv__queue_head(&handle->write_queue)) { - assert(q != NULL); req = uv__queue_data(q, uv_udp_send_t, queue); - assert(req != NULL); - req->status = UV__ERR(errno); uv__queue_remove(&req->queue); uv__queue_insert_tail(&handle->write_completed_queue, &req->queue); @@ -346,10 +404,7 @@ static void uv__udp_sendmsg(uv_udp_t* handle) { for (i = 0, q = uv__queue_head(&handle->write_queue); i < (size_t)npkts && q != &handle->write_queue; ++i, q = uv__queue_head(&handle->write_queue)) { - assert(q != NULL); req = uv__queue_data(q, uv_udp_send_t, queue); - assert(req != NULL); - req->status = req->bufs[0].len; /* Sending a datagram is an atomic operation: either all data @@ -364,75 +419,48 @@ static void uv__udp_sendmsg(uv_udp_t* handle) { /* couldn't batch everything, continue sending (jump to avoid stack growth) */ if (!uv__queue_empty(&handle->write_queue)) goto write_queue_drain; - uv__io_feed(handle->loop, &handle->io_watcher); -#else /* __linux__ || ____FreeBSD__ */ - uv_udp_send_t* req; - struct msghdr h; - struct uv__queue* q; - ssize_t size; - while (!uv__queue_empty(&handle->write_queue)) { - q = uv__queue_head(&handle->write_queue); - assert(q != NULL); - - req = uv__queue_data(q, uv_udp_send_t, queue); - assert(req != NULL); + uv__io_feed(handle->loop, &handle->io_watcher); +} +#endif /* __linux__ || ____FreeBSD__ || __APPLE__ */ - memset(&h, 0, sizeof h); - if (req->addr.ss_family == AF_UNSPEC) { - h.msg_name = NULL; - h.msg_namelen = 0; - } else { - h.msg_name = &req->addr; - if (req->addr.ss_family == AF_INET6) - h.msg_namelen = sizeof(struct sockaddr_in6); - else if (req->addr.ss_family == AF_INET) - h.msg_namelen = sizeof(struct sockaddr_in); - else if (req->addr.ss_family == AF_UNIX) - h.msg_namelen = sizeof(struct sockaddr_un); - else { - assert(0 && "unsupported address family"); - abort(); - } - } - h.msg_iov = (struct iovec*) req->bufs; - h.msg_iovlen = req->nbufs; +static void uv__udp_sendmsg(uv_udp_t* handle) { + struct uv__queue* q; + uv_udp_send_t* req; - do { - size = sendmsg(handle->io_watcher.fd, &h, 0); - } while (size == -1 && errno == EINTR); + if (uv__queue_empty(&handle->write_queue)) + return; - if (size == -1) { - if (errno == EAGAIN || errno == EWOULDBLOCK || errno == ENOBUFS) - break; - } + q = uv__queue_head(&handle->write_queue); + req = uv__queue_data(q, uv_udp_send_t, queue); - req->status = (size == -1 ? UV__ERR(errno) : size); +#if defined(__linux__) || defined(__FreeBSD__) || defined(__APPLE__) + /* Use sendmmsg() if this send request contains more than one datagram OR + * there is more than one send request (because that automatically implies + * there is more than one datagram.) + */ + if (req->nbufs != 1 || &handle->write_queue != uv__queue_next(&req->queue)) + return uv__udp_sendmsg_many(handle); +#endif - /* Sending a datagram is an atomic operation: either all data - * is written or nothing is (and EMSGSIZE is raised). That is - * why we don't handle partial writes. Just pop the request - * off the write queue and onto the completed queue, done. - */ - uv__queue_remove(&req->queue); - uv__queue_insert_tail(&handle->write_completed_queue, &req->queue); - uv__io_feed(handle->loop, &handle->io_watcher); - } -#endif /* __linux__ || ____FreeBSD__ */ + return uv__udp_sendmsg_one(handle, req); } /* On the BSDs, SO_REUSEPORT implies SO_REUSEADDR but with some additional - * refinements for programs that use multicast. + * refinements for programs that use multicast. Therefore we preferentially + * set SO_REUSEPORT over SO_REUSEADDR here, but we set SO_REUSEPORT only + * when that socket option doesn't have the capability of load balancing. + * Otherwise, we fall back to SO_REUSEADDR. * - * Linux as of 3.9 has a SO_REUSEPORT socket option but with semantics that - * are different from the BSDs: it _shares_ the port rather than steal it - * from the current listener. While useful, it's not something we can emulate - * on other platforms so we don't enable it. + * Linux as of 3.9, DragonflyBSD 3.6, AIX 7.2.5 have the SO_REUSEPORT socket + * option but with semantics that are different from the BSDs: it _shares_ + * the port rather than steals it from the current listener. While useful, + * it's not something we can emulate on other platforms so we don't enable it. * * zOS does not support getsockname with SO_REUSEPORT option when using * AF_UNIX. */ -static int uv__set_reuse(int fd) { +static int uv__sock_reuseaddr(int fd) { int yes; yes = 1; @@ -449,7 +477,7 @@ static int uv__set_reuse(int fd) { return UV__ERR(errno); } #elif defined(SO_REUSEPORT) && !defined(__linux__) && !defined(__GNU__) && \ - !defined(__sun__) + !defined(__sun__) && !defined(__DragonFly__) && !defined(_AIX73) if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &yes, sizeof(yes))) return UV__ERR(errno); #else @@ -492,7 +520,8 @@ int uv__udp_bind(uv_udp_t* handle, int fd; /* Check for bad flags. */ - if (flags & ~(UV_UDP_IPV6ONLY | UV_UDP_REUSEADDR | UV_UDP_LINUX_RECVERR)) + if (flags & ~(UV_UDP_IPV6ONLY | UV_UDP_REUSEADDR | + UV_UDP_REUSEPORT | UV_UDP_LINUX_RECVERR)) return UV_EINVAL; /* Cannot set IPv6-only mode on non-IPv6 socket. */ @@ -515,7 +544,13 @@ int uv__udp_bind(uv_udp_t* handle, } if (flags & UV_UDP_REUSEADDR) { - err = uv__set_reuse(fd); + err = uv__sock_reuseaddr(fd); + if (err) + return err; + } + + if (flags & UV_UDP_REUSEPORT) { + err = uv__sock_reuseport(fd); if (err) return err; } @@ -722,7 +757,7 @@ int uv__udp_send(uv_udp_send_t* req, req->bufs = uv__malloc(nbufs * sizeof(bufs[0])); if (req->bufs == NULL) { - uv__req_unregister(handle->loop, req); + uv__req_unregister(handle->loop); return UV_ENOMEM; } @@ -1015,7 +1050,7 @@ int uv__udp_init_ex(uv_loop_t* loop, int uv_udp_using_recvmmsg(const uv_udp_t* handle) { -#if defined(__linux__) || defined(__FreeBSD__) +#if defined(__linux__) || defined(__FreeBSD__) || defined(__APPLE__) if (handle->flags & UV_HANDLE_UDP_RECVMMSG) return 1; #endif @@ -1037,7 +1072,7 @@ int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock) { if (err) return err; - err = uv__set_reuse(sock); + err = uv__sock_reuseaddr(sock); if (err) return err; diff --git a/deps/uv/src/uv-common.h b/deps/uv/src/uv-common.h index cd57e5a35153d0..4baede2e506ee1 100644 --- a/deps/uv/src/uv-common.h +++ b/deps/uv/src/uv-common.h @@ -233,13 +233,13 @@ void uv__threadpool_cleanup(void); #define uv__has_active_reqs(loop) \ ((loop)->active_reqs.count > 0) -#define uv__req_register(loop, req) \ +#define uv__req_register(loop) \ do { \ (loop)->active_reqs.count++; \ } \ while (0) -#define uv__req_unregister(loop, req) \ +#define uv__req_unregister(loop) \ do { \ assert(uv__has_active_reqs(loop)); \ (loop)->active_reqs.count--; \ @@ -349,7 +349,7 @@ void uv__threadpool_cleanup(void); #define uv__req_init(loop, req, typ) \ do { \ UV_REQ_INIT(req, typ); \ - uv__req_register(loop, req); \ + uv__req_register(loop); \ } \ while (0) @@ -400,7 +400,6 @@ void uv__metrics_set_provider_entry_time(uv_loop_t* loop); struct uv__iou { uint32_t* sqhead; uint32_t* sqtail; - uint32_t* sqarray; uint32_t sqmask; uint32_t* sqflags; uint32_t* cqhead; @@ -415,7 +414,6 @@ struct uv__iou { size_t sqelen; int ringfd; uint32_t in_flight; - uint32_t flags; }; #endif /* __linux__ */ diff --git a/deps/uv/src/win/error.c b/deps/uv/src/win/error.c index 3a269da87a948b..58587c5fb785ea 100644 --- a/deps/uv/src/win/error.c +++ b/deps/uv/src/win/error.c @@ -78,6 +78,7 @@ int uv_translate_sys_error(int sys_errno) { case WSAEADDRNOTAVAIL: return UV_EADDRNOTAVAIL; case WSAEAFNOSUPPORT: return UV_EAFNOSUPPORT; case WSAEWOULDBLOCK: return UV_EAGAIN; + case ERROR_NO_DATA: return UV_EAGAIN; case WSAEALREADY: return UV_EALREADY; case ERROR_INVALID_FLAGS: return UV_EBADF; case ERROR_INVALID_HANDLE: return UV_EBADF; @@ -157,7 +158,6 @@ int uv_translate_sys_error(int sys_errno) { case ERROR_ACCESS_DENIED: return UV_EPERM; case ERROR_PRIVILEGE_NOT_HELD: return UV_EPERM; case ERROR_BAD_PIPE: return UV_EPIPE; - case ERROR_NO_DATA: return UV_EPIPE; case ERROR_PIPE_NOT_CONNECTED: return UV_EPIPE; case WSAESHUTDOWN: return UV_EPIPE; case WSAEPROTONOSUPPORT: return UV_EPROTONOSUPPORT; @@ -168,6 +168,16 @@ int uv_translate_sys_error(int sys_errno) { case ERROR_INVALID_FUNCTION: return UV_EISDIR; case ERROR_META_EXPANSION_TOO_LONG: return UV_E2BIG; case WSAESOCKTNOSUPPORT: return UV_ESOCKTNOSUPPORT; + case ERROR_BAD_EXE_FORMAT: return UV_EFTYPE; default: return UV_UNKNOWN; } } + +int uv_translate_write_sys_error(int sys_errno) { + switch (sys_errno) { + case ERROR_BROKEN_PIPE: return UV_EPIPE; + case ERROR_NO_DATA: return UV_EPIPE; + default: + return uv_translate_sys_error(sys_errno); + } +} diff --git a/deps/uv/src/win/fs-event.c b/deps/uv/src/win/fs-event.c index fce411813e9370..7ab407e05345f9 100644 --- a/deps/uv/src/win/fs-event.c +++ b/deps/uv/src/win/fs-event.c @@ -561,7 +561,25 @@ void uv__process_fs_event_req(uv_loop_t* loop, uv_req_t* req, } } else { err = GET_REQ_ERROR(req); - handle->cb(handle, NULL, 0, uv_translate_sys_error(err)); + /* + * Check whether the ERROR_ACCESS_DENIED is caused by the watched directory + * being actually deleted (not an actual error) or a legit error. Retrieve + * FileStandardInfo to check whether the directory is pending deletion. + */ + FILE_STANDARD_INFO info; + if (err == ERROR_ACCESS_DENIED && + handle->dirw != NULL && + GetFileInformationByHandleEx(handle->dir_handle, + FileStandardInfo, + &info, + sizeof(info)) && + info.Directory && + info.DeletePending) { + uv__convert_utf16_to_utf8(handle->dirw, -1, &filename); + handle->cb(handle, filename, UV_RENAME, 0); + } else { + handle->cb(handle, NULL, 0, uv_translate_sys_error(err)); + } } if (handle->flags & UV_HANDLE_CLOSING) { diff --git a/deps/uv/src/win/fs.c b/deps/uv/src/win/fs.c index b73c17d8c1c831..08b42eb14c972a 100644 --- a/deps/uv/src/win/fs.c +++ b/deps/uv/src/win/fs.c @@ -46,6 +46,17 @@ #define UV_FS_FREE_PTR 0x0008 #define UV_FS_CLEANEDUP 0x0010 +#ifndef FILE_DISPOSITION_DELETE +#define FILE_DISPOSITION_DELETE 0x0001 +#endif /* FILE_DISPOSITION_DELETE */ + +#ifndef FILE_DISPOSITION_POSIX_SEMANTICS +#define FILE_DISPOSITION_POSIX_SEMANTICS 0x0002 +#endif /* FILE_DISPOSITION_POSIX_SEMANTICS */ + +#ifndef FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE +#define FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE 0x0010 +#endif /* FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE */ #define INIT(subtype) \ do { \ @@ -58,7 +69,7 @@ #define POST \ do { \ if (cb != NULL) { \ - uv__req_register(loop, req); \ + uv__req_register(loop); \ uv__work_submit(loop, \ &req->work_req, \ UV__WORK_FAST_IO, \ @@ -97,13 +108,14 @@ return; \ } -#define MILLION ((int64_t) 1000 * 1000) -#define BILLION ((int64_t) 1000 * 1000 * 1000) +#define NSEC_PER_TICK 100 +#define TICKS_PER_SEC ((int64_t) 1e9 / NSEC_PER_TICK) +static const int64_t WIN_TO_UNIX_TICK_OFFSET = 11644473600 * TICKS_PER_SEC; static void uv__filetime_to_timespec(uv_timespec_t *ts, int64_t filetime) { - filetime -= 116444736 * BILLION; - ts->tv_sec = (long) (filetime / (10 * MILLION)); - ts->tv_nsec = (long) ((filetime - ts->tv_sec * 10 * MILLION) * 100U); + filetime -= WIN_TO_UNIX_TICK_OFFSET; + ts->tv_sec = filetime / TICKS_PER_SEC; + ts->tv_nsec = (filetime % TICKS_PER_SEC) * NSEC_PER_TICK; if (ts->tv_nsec < 0) { ts->tv_sec -= 1; ts->tv_nsec += 1e9; @@ -112,7 +124,7 @@ static void uv__filetime_to_timespec(uv_timespec_t *ts, int64_t filetime) { #define TIME_T_TO_FILETIME(time, filetime_ptr) \ do { \ - int64_t bigtime = ((time) * 10 * MILLION + 116444736 * BILLION); \ + int64_t bigtime = ((time) * TICKS_PER_SEC + WIN_TO_UNIX_TICK_OFFSET); \ (filetime_ptr)->dwLowDateTime = (uint64_t) bigtime & 0xFFFFFFFF; \ (filetime_ptr)->dwHighDateTime = (uint64_t) bigtime >> 32; \ } while(0) @@ -136,6 +148,16 @@ static int uv__file_symlink_usermode_flag = SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGE static DWORD uv__allocation_granularity; +typedef enum { + FS__STAT_PATH_SUCCESS, + FS__STAT_PATH_ERROR, + FS__STAT_PATH_TRY_SLOW +} fs__stat_path_return_t; + +INLINE static void fs__stat_assign_statbuf_null(uv_stat_t* statbuf); +INLINE static void fs__stat_assign_statbuf(uv_stat_t* statbuf, + FILE_STAT_BASIC_INFORMATION stat_info, int do_lstat); + void uv__fs_init(void) { SYSTEM_INFO system_info; @@ -1056,27 +1078,20 @@ void fs__write(uv_fs_t* req) { error = ERROR_INVALID_FLAGS; } - SET_REQ_WIN32_ERROR(req, error); + SET_REQ_UV_ERROR(req, uv_translate_write_sys_error(error), error); } } -void fs__rmdir(uv_fs_t* req) { - int result = _wrmdir(req->file.pathw); - if (result == -1) - SET_REQ_WIN32_ERROR(req, _doserrno); - else - SET_REQ_RESULT(req, 0); -} - - -void fs__unlink(uv_fs_t* req) { +static void fs__unlink_rmdir(uv_fs_t* req, BOOL isrmdir) { const WCHAR* pathw = req->file.pathw; HANDLE handle; BY_HANDLE_FILE_INFORMATION info; FILE_DISPOSITION_INFORMATION disposition; + FILE_DISPOSITION_INFORMATION_EX disposition_ex; IO_STATUS_BLOCK iosb; NTSTATUS status; + DWORD error; handle = CreateFileW(pathw, FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES | DELETE, @@ -1097,10 +1112,18 @@ void fs__unlink(uv_fs_t* req) { return; } - if (info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { - /* Do not allow deletion of directories, unless it is a symlink. When the - * path refers to a non-symlink directory, report EPERM as mandated by - * POSIX.1. */ + if (isrmdir && !(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { + /* Error if we're in rmdir mode but it is not a dir. + * TODO: change it to UV_NOTDIR in v2. */ + SET_REQ_UV_ERROR(req, UV_ENOENT, ERROR_DIRECTORY); + CloseHandle(handle); + return; + } + + if (!isrmdir && (info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { + /* If not explicitly allowed, do not allow deletion of directories, unless + * it is a symlink. When the path refers to a non-symlink directory, report + * EPERM as mandated by POSIX.1. */ /* Check if it is a reparse point. If it's not, it's a normal directory. */ if (!(info.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)) { @@ -1112,7 +1135,7 @@ void fs__unlink(uv_fs_t* req) { /* Read the reparse point and check if it is a valid symlink. If not, don't * unlink. */ if (fs__readlink_handle(handle, NULL, NULL) < 0) { - DWORD error = GetLastError(); + error = GetLastError(); if (error == ERROR_SYMLINK_NOT_SUPPORTED) error = ERROR_ACCESS_DENIED; SET_REQ_WIN32_ERROR(req, error); @@ -1121,42 +1144,77 @@ void fs__unlink(uv_fs_t* req) { } } - if (info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) { - /* Remove read-only attribute */ - FILE_BASIC_INFORMATION basic = { 0 }; - - basic.FileAttributes = (info.dwFileAttributes & ~FILE_ATTRIBUTE_READONLY) | - FILE_ATTRIBUTE_ARCHIVE; - - status = pNtSetInformationFile(handle, - &iosb, - &basic, - sizeof basic, - FileBasicInformation); - if (!NT_SUCCESS(status)) { - SET_REQ_WIN32_ERROR(req, pRtlNtStatusToDosError(status)); - CloseHandle(handle); - return; - } - } + /* Try posix delete first */ + disposition_ex.Flags = FILE_DISPOSITION_DELETE | FILE_DISPOSITION_POSIX_SEMANTICS | + FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE; - /* Try to set the delete flag. */ - disposition.DeleteFile = TRUE; status = pNtSetInformationFile(handle, &iosb, - &disposition, - sizeof disposition, - FileDispositionInformation); + &disposition_ex, + sizeof disposition_ex, + FileDispositionInformationEx); if (NT_SUCCESS(status)) { SET_REQ_SUCCESS(req); } else { - SET_REQ_WIN32_ERROR(req, pRtlNtStatusToDosError(status)); + /* If status == STATUS_CANNOT_DELETE here, given we set + * FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE, STATUS_CANNOT_DELETE can only mean + * that there is an existing mapped view to the file, preventing delete. + * STATUS_CANNOT_DELETE maps to UV_EACCES so it's not specifically worth handling */ + error = pRtlNtStatusToDosError(status); + if (error == ERROR_NOT_SUPPORTED /* filesystem does not support posix deletion */ || + error == ERROR_INVALID_PARAMETER /* pre Windows 10 error */ || + error == ERROR_INVALID_FUNCTION /* pre Windows 10 1607 error */) { + /* posix delete not supported so try fallback */ + if (info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) { + /* Remove read-only attribute */ + FILE_BASIC_INFORMATION basic = { 0 }; + + basic.FileAttributes = (info.dwFileAttributes & ~FILE_ATTRIBUTE_READONLY) | + FILE_ATTRIBUTE_ARCHIVE; + + status = pNtSetInformationFile(handle, + &iosb, + &basic, + sizeof basic, + FileBasicInformation); + if (!NT_SUCCESS(status)) { + SET_REQ_WIN32_ERROR(req, pRtlNtStatusToDosError(status)); + CloseHandle(handle); + return; + } + } + + /* Try to set the delete flag. */ + disposition.DeleteFile = TRUE; + status = pNtSetInformationFile(handle, + &iosb, + &disposition, + sizeof disposition, + FileDispositionInformation); + if (NT_SUCCESS(status)) { + SET_REQ_SUCCESS(req); + } else { + SET_REQ_WIN32_ERROR(req, pRtlNtStatusToDosError(status)); + } + } else { + SET_REQ_WIN32_ERROR(req, error); + } } CloseHandle(handle); } +static void fs__rmdir(uv_fs_t* req) { + fs__unlink_rmdir(req, /*isrmdir*/1); +} + + +static void fs__unlink(uv_fs_t* req) { + fs__unlink_rmdir(req, /*isrmdir*/0); +} + + void fs__mkdir(uv_fs_t* req) { /* TODO: use req->mode. */ if (CreateDirectoryW(req->file.pathw, NULL)) { @@ -1182,7 +1240,7 @@ void fs__mktemp(uv_fs_t* req, uv__fs_mktemp_func func) { size_t len; uint64_t v; char* path; - + path = (char*)req->path; len = wcslen(req->file.pathw); ep = req->file.pathw + len; @@ -1593,12 +1651,12 @@ void fs__readdir(uv_fs_t* req) { goto error; /* Copy file type. */ - if ((find_data->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0) - dent.d_type = UV__DT_DIR; + if ((find_data->dwFileAttributes & FILE_ATTRIBUTE_DEVICE) != 0) + dent.d_type = UV__DT_CHAR; else if ((find_data->dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) != 0) dent.d_type = UV__DT_LINK; - else if ((find_data->dwFileAttributes & FILE_ATTRIBUTE_DEVICE) != 0) - dent.d_type = UV__DT_CHAR; + else if ((find_data->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0) + dent.d_type = UV__DT_DIR; else dent.d_type = UV__DT_FILE; @@ -1627,6 +1685,43 @@ void fs__closedir(uv_fs_t* req) { SET_REQ_RESULT(req, 0); } +INLINE static fs__stat_path_return_t fs__stat_path(WCHAR* path, + uv_stat_t* statbuf, int do_lstat) { + FILE_STAT_BASIC_INFORMATION stat_info; + + // Check if the new fast API is available. + if (!pGetFileInformationByName) { + return FS__STAT_PATH_TRY_SLOW; + } + + // Check if the API call fails. + if (!pGetFileInformationByName(path, FileStatBasicByNameInfo, &stat_info, + sizeof(stat_info))) { + switch(GetLastError()) { + case ERROR_FILE_NOT_FOUND: + case ERROR_PATH_NOT_FOUND: + case ERROR_NOT_READY: + case ERROR_BAD_NET_NAME: + /* These errors aren't worth retrying with the slow path. */ + return FS__STAT_PATH_ERROR; + } + return FS__STAT_PATH_TRY_SLOW; + } + + // A file handle is needed to get st_size for links. + if ((stat_info.FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)) { + return FS__STAT_PATH_TRY_SLOW; + } + + if (stat_info.DeviceType == FILE_DEVICE_NULL) { + fs__stat_assign_statbuf_null(statbuf); + return FS__STAT_PATH_SUCCESS; + } + + fs__stat_assign_statbuf(statbuf, stat_info, do_lstat); + return FS__STAT_PATH_SUCCESS; +} + INLINE static int fs__stat_handle(HANDLE handle, uv_stat_t* statbuf, int do_lstat) { size_t target_length = 0; @@ -1635,6 +1730,7 @@ INLINE static int fs__stat_handle(HANDLE handle, uv_stat_t* statbuf, FILE_FS_VOLUME_INFORMATION volume_info; NTSTATUS nt_status; IO_STATUS_BLOCK io_status; + FILE_STAT_BASIC_INFORMATION stat_info; nt_status = pNtQueryVolumeInformationFile(handle, &io_status, @@ -1650,13 +1746,7 @@ INLINE static int fs__stat_handle(HANDLE handle, uv_stat_t* statbuf, /* If it's NUL device set fields as reasonable as possible and return. */ if (device_info.DeviceType == FILE_DEVICE_NULL) { - memset(statbuf, 0, sizeof(uv_stat_t)); - statbuf->st_mode = _S_IFCHR; - statbuf->st_mode |= (_S_IREAD | _S_IWRITE) | ((_S_IREAD | _S_IWRITE) >> 3) | - ((_S_IREAD | _S_IWRITE) >> 6); - statbuf->st_nlink = 1; - statbuf->st_blksize = 4096; - statbuf->st_rdev = FILE_DEVICE_NULL << 16; + fs__stat_assign_statbuf_null(statbuf); return 0; } @@ -1680,14 +1770,65 @@ INLINE static int fs__stat_handle(HANDLE handle, uv_stat_t* statbuf, /* Buffer overflow (a warning status code) is expected here. */ if (io_status.Status == STATUS_NOT_IMPLEMENTED) { - statbuf->st_dev = 0; + stat_info.VolumeSerialNumber.QuadPart = 0; } else if (NT_ERROR(nt_status)) { SetLastError(pRtlNtStatusToDosError(nt_status)); return -1; } else { - statbuf->st_dev = volume_info.VolumeSerialNumber; + stat_info.VolumeSerialNumber.QuadPart = volume_info.VolumeSerialNumber; + } + + stat_info.DeviceType = device_info.DeviceType; + stat_info.FileAttributes = file_info.BasicInformation.FileAttributes; + stat_info.NumberOfLinks = file_info.StandardInformation.NumberOfLinks; + stat_info.FileId.QuadPart = + file_info.InternalInformation.IndexNumber.QuadPart; + stat_info.ChangeTime.QuadPart = + file_info.BasicInformation.ChangeTime.QuadPart; + stat_info.CreationTime.QuadPart = + file_info.BasicInformation.CreationTime.QuadPart; + stat_info.LastAccessTime.QuadPart = + file_info.BasicInformation.LastAccessTime.QuadPart; + stat_info.LastWriteTime.QuadPart = + file_info.BasicInformation.LastWriteTime.QuadPart; + stat_info.AllocationSize.QuadPart = + file_info.StandardInformation.AllocationSize.QuadPart; + + if (do_lstat && + (file_info.BasicInformation.FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)) { + /* + * If reading the link fails, the reparse point is not a symlink and needs + * to be treated as a regular file. The higher level lstat function will + * detect this failure and retry without do_lstat if appropriate. + */ + if (fs__readlink_handle(handle, NULL, &target_length) != 0) { + fs__stat_assign_statbuf(statbuf, stat_info, do_lstat); + return -1; + } + stat_info.EndOfFile.QuadPart = target_length; + } else { + stat_info.EndOfFile.QuadPart = + file_info.StandardInformation.EndOfFile.QuadPart; } + fs__stat_assign_statbuf(statbuf, stat_info, do_lstat); + return 0; +} + +INLINE static void fs__stat_assign_statbuf_null(uv_stat_t* statbuf) { + memset(statbuf, 0, sizeof(uv_stat_t)); + statbuf->st_mode = _S_IFCHR; + statbuf->st_mode |= (_S_IREAD | _S_IWRITE) | ((_S_IREAD | _S_IWRITE) >> 3) | + ((_S_IREAD | _S_IWRITE) >> 6); + statbuf->st_nlink = 1; + statbuf->st_blksize = 4096; + statbuf->st_rdev = FILE_DEVICE_NULL << 16; +} + +INLINE static void fs__stat_assign_statbuf(uv_stat_t* statbuf, + FILE_STAT_BASIC_INFORMATION stat_info, int do_lstat) { + statbuf->st_dev = stat_info.VolumeSerialNumber.QuadPart; + /* Todo: st_mode should probably always be 0666 for everyone. We might also * want to report 0777 if the file is a .exe or a directory. * @@ -1719,50 +1860,43 @@ INLINE static int fs__stat_handle(HANDLE handle, uv_stat_t* statbuf, * target. Otherwise, reparse points must be treated as regular files. */ if (do_lstat && - (file_info.BasicInformation.FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)) { - /* - * If reading the link fails, the reparse point is not a symlink and needs - * to be treated as a regular file. The higher level lstat function will - * detect this failure and retry without do_lstat if appropriate. - */ - if (fs__readlink_handle(handle, NULL, &target_length) != 0) - return -1; + (stat_info.FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)) { statbuf->st_mode |= S_IFLNK; - statbuf->st_size = target_length; + statbuf->st_size = stat_info.EndOfFile.QuadPart; } if (statbuf->st_mode == 0) { - if (file_info.BasicInformation.FileAttributes & FILE_ATTRIBUTE_DIRECTORY) { + if (stat_info.FileAttributes & FILE_ATTRIBUTE_DIRECTORY) { statbuf->st_mode |= _S_IFDIR; statbuf->st_size = 0; } else { statbuf->st_mode |= _S_IFREG; - statbuf->st_size = file_info.StandardInformation.EndOfFile.QuadPart; + statbuf->st_size = stat_info.EndOfFile.QuadPart; } } - if (file_info.BasicInformation.FileAttributes & FILE_ATTRIBUTE_READONLY) + if (stat_info.FileAttributes & FILE_ATTRIBUTE_READONLY) statbuf->st_mode |= _S_IREAD | (_S_IREAD >> 3) | (_S_IREAD >> 6); else statbuf->st_mode |= (_S_IREAD | _S_IWRITE) | ((_S_IREAD | _S_IWRITE) >> 3) | ((_S_IREAD | _S_IWRITE) >> 6); uv__filetime_to_timespec(&statbuf->st_atim, - file_info.BasicInformation.LastAccessTime.QuadPart); + stat_info.LastAccessTime.QuadPart); uv__filetime_to_timespec(&statbuf->st_ctim, - file_info.BasicInformation.ChangeTime.QuadPart); + stat_info.ChangeTime.QuadPart); uv__filetime_to_timespec(&statbuf->st_mtim, - file_info.BasicInformation.LastWriteTime.QuadPart); + stat_info.LastWriteTime.QuadPart); uv__filetime_to_timespec(&statbuf->st_birthtim, - file_info.BasicInformation.CreationTime.QuadPart); + stat_info.CreationTime.QuadPart); - statbuf->st_ino = file_info.InternalInformation.IndexNumber.QuadPart; + statbuf->st_ino = stat_info.FileId.QuadPart; /* st_blocks contains the on-disk allocation size in 512-byte units. */ statbuf->st_blocks = - (uint64_t) file_info.StandardInformation.AllocationSize.QuadPart >> 9; + (uint64_t) stat_info.AllocationSize.QuadPart >> 9; - statbuf->st_nlink = file_info.StandardInformation.NumberOfLinks; + statbuf->st_nlink = stat_info.NumberOfLinks; /* The st_blksize is supposed to be the 'optimal' number of bytes for reading * and writing to the disk. That is, for any definition of 'optimal' - it's @@ -1794,8 +1928,6 @@ INLINE static int fs__stat_handle(HANDLE handle, uv_stat_t* statbuf, statbuf->st_uid = 0; statbuf->st_rdev = 0; statbuf->st_gen = 0; - - return 0; } @@ -1817,6 +1949,17 @@ INLINE static DWORD fs__stat_impl_from_path(WCHAR* path, DWORD flags; DWORD ret; + // If new API exists, try to use it. + switch (fs__stat_path(path, statbuf, do_lstat)) { + case FS__STAT_PATH_SUCCESS: + return 0; + case FS__STAT_PATH_ERROR: + return GetLastError(); + case FS__STAT_PATH_TRY_SLOW: + break; + } + + // If the new API does not exist, use the old API. flags = FILE_FLAG_BACKUP_SEMANTICS; if (do_lstat) flags |= FILE_FLAG_OPEN_REPARSE_POINT; @@ -2830,7 +2973,7 @@ static void uv__fs_done(struct uv__work* w, int status) { uv_fs_t* req; req = container_of(w, uv_fs_t, work_req); - uv__req_unregister(req->loop, req); + uv__req_unregister(req->loop); if (status == UV_ECANCELED) { assert(req->result == 0); diff --git a/deps/uv/src/win/getaddrinfo.c b/deps/uv/src/win/getaddrinfo.c index 8b8406ada8e743..f20e10d49d974a 100644 --- a/deps/uv/src/win/getaddrinfo.c +++ b/deps/uv/src/win/getaddrinfo.c @@ -71,10 +71,9 @@ int uv__getaddrinfo_translate_error(int sys_err) { DECLSPEC_IMPORT void WSAAPI FreeAddrInfoW(PADDRINFOW pAddrInfo); #endif - -/* Adjust size value to be multiple of 4. Use to keep pointer aligned. - * Do we need different versions of this for different architectures? */ -#define ALIGNED_SIZE(X) ((((X) + 3) >> 2) << 2) +static size_t align_offset(size_t off, size_t alignment) { + return ((off + alignment - 1) / alignment) * alignment; +} #ifndef NDIS_IF_MAX_STRING_SIZE #define NDIS_IF_MAX_STRING_SIZE IF_MAX_STRING_SIZE @@ -103,17 +102,7 @@ static void uv__getaddrinfo_work(struct uv__work* w) { * Each size calculation is adjusted to avoid unaligned pointers. */ static void uv__getaddrinfo_done(struct uv__work* w, int status) { - uv_getaddrinfo_t* req; - size_t addrinfo_len = 0; - ssize_t name_len = 0; - size_t addrinfo_struct_len = ALIGNED_SIZE(sizeof(struct addrinfo)); - struct addrinfoW* addrinfow_ptr; - struct addrinfo* addrinfo_ptr; - char* alloc_ptr = NULL; - char* cur_ptr = NULL; - int r; - - req = container_of(w, uv_getaddrinfo_t, work_req); + uv_getaddrinfo_t* req = container_of(w, uv_getaddrinfo_t, work_req); /* release input parameter memory */ uv__free(req->alloc); @@ -126,34 +115,44 @@ static void uv__getaddrinfo_done(struct uv__work* w, int status) { } if (req->retcode == 0) { + char* alloc_ptr = NULL; + size_t cur_off = 0; + size_t addrinfo_len; /* Convert addrinfoW to addrinfo. First calculate required length. */ - addrinfow_ptr = req->addrinfow; + struct addrinfoW* addrinfow_ptr = req->addrinfow; while (addrinfow_ptr != NULL) { - addrinfo_len += addrinfo_struct_len + - ALIGNED_SIZE(addrinfow_ptr->ai_addrlen); + cur_off = align_offset(cur_off, sizeof(void*)); + cur_off += sizeof(struct addrinfo); + /* TODO: This alignment could be smaller, if we could + portably get the alignment for sockaddr. */ + cur_off = align_offset(cur_off, sizeof(void*)); + cur_off += addrinfow_ptr->ai_addrlen; if (addrinfow_ptr->ai_canonname != NULL) { - name_len = uv_utf16_length_as_wtf8(addrinfow_ptr->ai_canonname, -1); + ssize_t name_len = + uv_utf16_length_as_wtf8(addrinfow_ptr->ai_canonname, -1); if (name_len < 0) { req->retcode = name_len; goto complete; } - addrinfo_len += ALIGNED_SIZE(name_len + 1); + cur_off += name_len + 1; } addrinfow_ptr = addrinfow_ptr->ai_next; } /* allocate memory for addrinfo results */ - alloc_ptr = (char*)uv__malloc(addrinfo_len); + addrinfo_len = cur_off; + alloc_ptr = uv__malloc(addrinfo_len); /* do conversions */ if (alloc_ptr != NULL) { - cur_ptr = alloc_ptr; + struct addrinfo *addrinfo_ptr = (struct addrinfo *)alloc_ptr; + cur_off = 0; addrinfow_ptr = req->addrinfow; - while (addrinfow_ptr != NULL) { + for (;;) { + cur_off += sizeof(struct addrinfo); + assert(cur_off <= addrinfo_len); /* copy addrinfo struct data */ - assert(cur_ptr + addrinfo_struct_len <= alloc_ptr + addrinfo_len); - addrinfo_ptr = (struct addrinfo*)cur_ptr; addrinfo_ptr->ai_family = addrinfow_ptr->ai_family; addrinfo_ptr->ai_socktype = addrinfow_ptr->ai_socktype; addrinfo_ptr->ai_protocol = addrinfow_ptr->ai_protocol; @@ -163,35 +162,37 @@ static void uv__getaddrinfo_done(struct uv__work* w, int status) { addrinfo_ptr->ai_addr = NULL; addrinfo_ptr->ai_next = NULL; - cur_ptr += addrinfo_struct_len; - /* copy sockaddr */ if (addrinfo_ptr->ai_addrlen > 0) { - assert(cur_ptr + addrinfo_ptr->ai_addrlen <= - alloc_ptr + addrinfo_len); - memcpy(cur_ptr, addrinfow_ptr->ai_addr, addrinfo_ptr->ai_addrlen); - addrinfo_ptr->ai_addr = (struct sockaddr*)cur_ptr; - cur_ptr += ALIGNED_SIZE(addrinfo_ptr->ai_addrlen); + cur_off = align_offset(cur_off, sizeof(void *)); + addrinfo_ptr->ai_addr = (struct sockaddr *)(alloc_ptr + cur_off); + cur_off += addrinfo_ptr->ai_addrlen; + assert(cur_off <= addrinfo_len); + memcpy(addrinfo_ptr->ai_addr, + addrinfow_ptr->ai_addr, + addrinfo_ptr->ai_addrlen); } /* convert canonical name to UTF-8 */ if (addrinfow_ptr->ai_canonname != NULL) { - name_len = alloc_ptr + addrinfo_len - cur_ptr; - r = uv__copy_utf16_to_utf8(addrinfow_ptr->ai_canonname, - -1, - cur_ptr, - (size_t*)&name_len); + ssize_t name_len = addrinfo_len - cur_off; + addrinfo_ptr->ai_canonname = alloc_ptr + cur_off; + int r = uv__copy_utf16_to_utf8(addrinfow_ptr->ai_canonname, + -1, + addrinfo_ptr->ai_canonname, + (size_t*)&name_len); assert(r == 0); - addrinfo_ptr->ai_canonname = cur_ptr; - cur_ptr += ALIGNED_SIZE(name_len + 1); + cur_off += name_len + 1; + assert(cur_off <= addrinfo_len); } - assert(cur_ptr <= alloc_ptr + addrinfo_len); /* set next ptr */ addrinfow_ptr = addrinfow_ptr->ai_next; - if (addrinfow_ptr != NULL) { - addrinfo_ptr->ai_next = (struct addrinfo*)cur_ptr; - } + if (addrinfow_ptr == NULL) + break; + cur_off = align_offset(cur_off, sizeof(void *)); + addrinfo_ptr = (struct addrinfo *)(alloc_ptr + cur_off); + addrinfo_ptr->ai_next = addrinfo_ptr; } req->addrinfo = (struct addrinfo*)alloc_ptr; } else { @@ -206,7 +207,7 @@ static void uv__getaddrinfo_done(struct uv__work* w, int status) { } complete: - uv__req_unregister(req->loop, req); + uv__req_unregister(req->loop); /* finally do callback with converted result */ if (req->getaddrinfo_cb) @@ -242,10 +243,12 @@ int uv_getaddrinfo(uv_loop_t* loop, const char* service, const struct addrinfo* hints) { char hostname_ascii[256]; + size_t off = 0; size_t nodesize = 0; size_t servicesize = 0; + size_t serviceoff = 0; size_t hintssize = 0; - char* alloc_ptr = NULL; + size_t hintoff = 0; ssize_t rc; if (req == NULL || (node == NULL && service == NULL)) { @@ -268,6 +271,7 @@ int uv_getaddrinfo(uv_loop_t* loop, return rc; nodesize = strlen(hostname_ascii) + 1; node = hostname_ascii; + off += nodesize * sizeof(WCHAR); } if (service != NULL) { @@ -275,27 +279,28 @@ int uv_getaddrinfo(uv_loop_t* loop, if (rc < 0) return rc; servicesize = rc; + off = align_offset(off, sizeof(WCHAR)); + serviceoff = off; + off += servicesize * sizeof(WCHAR); } + if (hints != NULL) { - hintssize = ALIGNED_SIZE(sizeof(struct addrinfoW)); + off = align_offset(off, sizeof(void *)); + hintoff = off; + hintssize = sizeof(struct addrinfoW); + off += hintssize; } /* allocate memory for inputs, and partition it as needed */ - alloc_ptr = uv__malloc(ALIGNED_SIZE(nodesize * sizeof(WCHAR)) + - ALIGNED_SIZE(servicesize * sizeof(WCHAR)) + - hintssize); - if (!alloc_ptr) + req->alloc = uv__malloc(off); + if (!req->alloc) return UV_ENOMEM; - /* save alloc_ptr now so we can free if error */ - req->alloc = (void*) alloc_ptr; - /* Convert node string to UTF16 into allocated memory and save pointer in the * request. The node here has been converted to ascii. */ if (node != NULL) { - req->node = (WCHAR*) alloc_ptr; - uv_wtf8_to_utf16(node, (WCHAR*) alloc_ptr, nodesize); - alloc_ptr += ALIGNED_SIZE(nodesize * sizeof(WCHAR)); + req->node = (WCHAR*) req->alloc; + uv_wtf8_to_utf16(node, req->node, nodesize); } else { req->node = NULL; } @@ -303,16 +308,15 @@ int uv_getaddrinfo(uv_loop_t* loop, /* Convert service string to UTF16 into allocated memory and save pointer in * the req. */ if (service != NULL) { - req->service = (WCHAR*) alloc_ptr; - uv_wtf8_to_utf16(service, (WCHAR*) alloc_ptr, servicesize); - alloc_ptr += ALIGNED_SIZE(servicesize * sizeof(WCHAR)); + req->service = (WCHAR*) ((char*) req->alloc + serviceoff); + uv_wtf8_to_utf16(service, req->service, servicesize); } else { req->service = NULL; } /* copy hints to allocated memory and save pointer in req */ if (hints != NULL) { - req->addrinfow = (struct addrinfoW*) alloc_ptr; + req->addrinfow = (struct addrinfoW*) ((char*) req->alloc + hintoff); req->addrinfow->ai_family = hints->ai_family; req->addrinfow->ai_socktype = hints->ai_socktype; req->addrinfow->ai_protocol = hints->ai_protocol; @@ -325,7 +329,7 @@ int uv_getaddrinfo(uv_loop_t* loop, req->addrinfow = NULL; } - uv__req_register(loop, req); + uv__req_register(loop); if (getaddrinfo_cb) { uv__work_submit(loop, diff --git a/deps/uv/src/win/getnameinfo.c b/deps/uv/src/win/getnameinfo.c index 32863176ef6403..695549580d2d81 100644 --- a/deps/uv/src/win/getnameinfo.c +++ b/deps/uv/src/win/getnameinfo.c @@ -82,7 +82,7 @@ static void uv__getnameinfo_done(struct uv__work* w, int status) { char* service; req = container_of(w, uv_getnameinfo_t, work_req); - uv__req_unregister(req->loop, req); + uv__req_unregister(req->loop); host = service = NULL; if (status == UV_ECANCELED) { @@ -124,7 +124,7 @@ int uv_getnameinfo(uv_loop_t* loop, } UV_REQ_INIT(req, UV_GETNAMEINFO); - uv__req_register(loop, req); + uv__req_register(loop); req->getnameinfo_cb = getnameinfo_cb; req->flags = flags; diff --git a/deps/uv/src/win/internal.h b/deps/uv/src/win/internal.h index 867dea5e0ed34f..be408af6661026 100644 --- a/deps/uv/src/win/internal.h +++ b/deps/uv/src/win/internal.h @@ -330,4 +330,6 @@ void uv__wake_all_loops(void); */ void uv__init_detect_system_wakeup(void); +int uv_translate_write_sys_error(int sys_errno); + #endif /* UV_WIN_INTERNAL_H_ */ diff --git a/deps/uv/src/win/pipe.c b/deps/uv/src/win/pipe.c index 3c8abe1c28ce36..d46ecb9fc702e6 100644 --- a/deps/uv/src/win/pipe.c +++ b/deps/uv/src/win/pipe.c @@ -106,8 +106,8 @@ static int includes_nul(const char *s, size_t n) { } -static void uv__unique_pipe_name(char* ptr, char* name, size_t size) { - snprintf(name, size, "\\\\?\\pipe\\uv\\%p-%lu", ptr, GetCurrentProcessId()); +static void uv__unique_pipe_name(unsigned long long ptr, char* name, size_t size) { + snprintf(name, size, "\\\\?\\pipe\\uv\\%llu-%lu", ptr, GetCurrentProcessId()); } @@ -208,7 +208,7 @@ static void close_pipe(uv_pipe_t* pipe) { static int uv__pipe_server( HANDLE* pipeHandle_ptr, DWORD access, - char* name, size_t nameSize, char* random) { + char* name, size_t nameSize, unsigned long long random) { HANDLE pipeHandle; int err; @@ -249,7 +249,7 @@ static int uv__pipe_server( static int uv__create_pipe_pair( HANDLE* server_pipe_ptr, HANDLE* client_pipe_ptr, unsigned int server_flags, unsigned int client_flags, - int inherit_client, char* random) { + int inherit_client, unsigned long long random) { /* allowed flags are: UV_READABLE_PIPE | UV_WRITABLE_PIPE | UV_NONBLOCK_PIPE */ char pipe_name[64]; SECURITY_ATTRIBUTES sa; @@ -357,7 +357,12 @@ int uv_pipe(uv_file fds[2], int read_flags, int write_flags) { /* TODO: better source of local randomness than &fds? */ read_flags |= UV_READABLE_PIPE; write_flags |= UV_WRITABLE_PIPE; - err = uv__create_pipe_pair(&readh, &writeh, read_flags, write_flags, 0, (char*) &fds[0]); + err = uv__create_pipe_pair(&readh, + &writeh, + read_flags, + write_flags, + 0, + (uintptr_t) &fds[0]); if (err != 0) return err; temp[0] = _open_osfhandle((intptr_t) readh, 0); @@ -421,7 +426,7 @@ int uv__create_stdio_pipe_pair(uv_loop_t* loop, } err = uv__create_pipe_pair(&server_pipe, &client_pipe, - server_flags, client_flags, 1, (char*) server_pipe); + server_flags, client_flags, 1, (uintptr_t) server_pipe); if (err) goto error; @@ -667,15 +672,10 @@ void uv__pipe_endgame(uv_loop_t* loop, uv_pipe_t* handle) { } handle->pipe.conn.ipc_xfer_queue_length = 0; - if (handle->flags & UV_HANDLE_EMULATE_IOCP) { - if (handle->read_req.wait_handle != INVALID_HANDLE_VALUE) { - UnregisterWait(handle->read_req.wait_handle); - handle->read_req.wait_handle = INVALID_HANDLE_VALUE; - } - if (handle->read_req.event_handle != NULL) { - CloseHandle(handle->read_req.event_handle); - handle->read_req.event_handle = NULL; - } + assert(handle->read_req.wait_handle == INVALID_HANDLE_VALUE); + if (handle->read_req.event_handle != NULL) { + CloseHandle(handle->read_req.event_handle); + handle->read_req.event_handle = NULL; } if (handle->flags & UV_HANDLE_NON_OVERLAPPED_PIPE) @@ -868,7 +868,7 @@ void uv_pipe_connect(uv_connect_t* req, SET_REQ_ERROR(req, err); uv__insert_pending_req(loop, (uv_req_t*) req); handle->reqs_pending++; - REGISTER_HANDLE_REQ(loop, handle, req); + REGISTER_HANDLE_REQ(loop, handle); } } @@ -959,7 +959,7 @@ int uv_pipe_connect2(uv_connect_t* req, goto error; } - REGISTER_HANDLE_REQ(loop, handle, req); + REGISTER_HANDLE_REQ(loop, handle); handle->reqs_pending++; return 0; @@ -974,7 +974,7 @@ int uv_pipe_connect2(uv_connect_t* req, SET_REQ_SUCCESS(req); uv__insert_pending_req(loop, (uv_req_t*) req); handle->reqs_pending++; - REGISTER_HANDLE_REQ(loop, handle, req); + REGISTER_HANDLE_REQ(loop, handle); return 0; error: @@ -992,7 +992,7 @@ int uv_pipe_connect2(uv_connect_t* req, SET_REQ_ERROR(req, err); uv__insert_pending_req(loop, (uv_req_t*) req); handle->reqs_pending++; - REGISTER_HANDLE_REQ(loop, handle, req); + REGISTER_HANDLE_REQ(loop, handle); return 0; } @@ -1417,13 +1417,12 @@ static void uv__pipe_queue_read(uv_loop_t* loop, uv_pipe_t* handle) { } if (handle->flags & UV_HANDLE_EMULATE_IOCP) { - if (req->wait_handle == INVALID_HANDLE_VALUE) { - if (!RegisterWaitForSingleObject(&req->wait_handle, - req->event_handle, post_completion_read_wait, (void*) req, - INFINITE, WT_EXECUTEINWAITTHREAD)) { - SET_REQ_ERROR(req, GetLastError()); - goto error; - } + assert(req->wait_handle == INVALID_HANDLE_VALUE); + if (!RegisterWaitForSingleObject(&req->wait_handle, + req->event_handle, post_completion_read_wait, (void*) req, + INFINITE, WT_EXECUTEINWAITTHREAD | WT_EXECUTEONLYONCE)) { + SET_REQ_ERROR(req, GetLastError()); + goto error; } } } @@ -1451,16 +1450,16 @@ int uv__pipe_read_start(uv_pipe_t* handle, handle->read_cb = read_cb; handle->alloc_cb = alloc_cb; + if (handle->read_req.event_handle == NULL) { + handle->read_req.event_handle = CreateEvent(NULL, 0, 0, NULL); + if (handle->read_req.event_handle == NULL) { + uv_fatal_error(GetLastError(), "CreateEvent"); + } + } + /* If reading was stopped and then started again, there could still be a read * request pending. */ if (!(handle->flags & UV_HANDLE_READ_PENDING)) { - if (handle->flags & UV_HANDLE_EMULATE_IOCP && - handle->read_req.event_handle == NULL) { - handle->read_req.event_handle = CreateEvent(NULL, 0, 0, NULL); - if (handle->read_req.event_handle == NULL) { - uv_fatal_error(GetLastError(), "CreateEvent"); - } - } uv__pipe_queue_read(loop, handle); } @@ -1638,7 +1637,7 @@ static int uv__pipe_write_data(uv_loop_t* loop, req->u.io.queued_bytes = 0; } - REGISTER_HANDLE_REQ(loop, handle, req); + REGISTER_HANDLE_REQ(loop, handle); handle->reqs_pending++; handle->stream.conn.write_reqs_pending++; POST_COMPLETION_FOR_REQ(loop, req); @@ -1686,7 +1685,7 @@ static int uv__pipe_write_data(uv_loop_t* loop, CloseHandle(req->event_handle); req->event_handle = NULL; - REGISTER_HANDLE_REQ(loop, handle, req); + REGISTER_HANDLE_REQ(loop, handle); handle->reqs_pending++; handle->stream.conn.write_reqs_pending++; return 0; @@ -1713,13 +1712,13 @@ static int uv__pipe_write_data(uv_loop_t* loop, if (handle->flags & UV_HANDLE_EMULATE_IOCP) { if (!RegisterWaitForSingleObject(&req->wait_handle, req->event_handle, post_completion_write_wait, (void*) req, - INFINITE, WT_EXECUTEINWAITTHREAD)) { + INFINITE, WT_EXECUTEINWAITTHREAD | WT_EXECUTEONLYONCE)) { return GetLastError(); } } } - REGISTER_HANDLE_REQ(loop, handle, req); + REGISTER_HANDLE_REQ(loop, handle); handle->reqs_pending++; handle->stream.conn.write_reqs_pending++; @@ -1889,7 +1888,7 @@ static void uv__pipe_read_error(uv_loop_t* loop, uv_pipe_t* handle, int error, static void uv__pipe_read_error_or_eof(uv_loop_t* loop, uv_pipe_t* handle, - int error, uv_buf_t buf) { + DWORD error, uv_buf_t buf) { if (error == ERROR_BROKEN_PIPE) { uv__pipe_read_eof(loop, handle, buf); } else { @@ -1919,17 +1918,25 @@ static void uv__pipe_queue_ipc_xfer_info( /* Read an exact number of bytes from a pipe. If an error or end-of-file is * encountered before the requested number of bytes are read, an error is * returned. */ -static int uv__pipe_read_exactly(HANDLE h, void* buffer, DWORD count) { - DWORD bytes_read, bytes_read_now; +static DWORD uv__pipe_read_exactly(uv_pipe_t* handle, void* buffer, DWORD count) { + uv_read_t* req; + DWORD bytes_read; + DWORD bytes_read_now; bytes_read = 0; while (bytes_read < count) { - if (!ReadFile(h, + req = &handle->read_req; + memset(&req->u.io.overlapped, 0, sizeof(req->u.io.overlapped)); + req->u.io.overlapped.hEvent = (HANDLE) ((uintptr_t) req->event_handle | 1); + if (!ReadFile(handle->handle, (char*) buffer + bytes_read, count - bytes_read, &bytes_read_now, - NULL)) { - return GetLastError(); + &req->u.io.overlapped)) { + if (GetLastError() != ERROR_IO_PENDING) + return GetLastError(); + if (!GetOverlappedResult(handle->handle, &req->u.io.overlapped, &bytes_read_now, TRUE)) + return GetLastError(); } bytes_read += bytes_read_now; @@ -1940,16 +1947,19 @@ static int uv__pipe_read_exactly(HANDLE h, void* buffer, DWORD count) { } -static DWORD uv__pipe_read_data(uv_loop_t* loop, - uv_pipe_t* handle, - DWORD suggested_bytes, - DWORD max_bytes) { - DWORD bytes_read; +static int uv__pipe_read_data(uv_loop_t* loop, + uv_pipe_t* handle, + DWORD* bytes_read, /* inout argument */ + DWORD max_bytes) { uv_buf_t buf; + uv_read_t* req; + DWORD r; + DWORD bytes_available; + int more; /* Ask the user for a buffer to read data into. */ buf = uv_buf_init(NULL, 0); - handle->alloc_cb((uv_handle_t*) handle, suggested_bytes, &buf); + handle->alloc_cb((uv_handle_t*) handle, *bytes_read, &buf); if (buf.base == NULL || buf.len == 0) { handle->read_cb((uv_stream_t*) handle, UV_ENOBUFS, &buf); return 0; /* Break out of read loop. */ @@ -1958,33 +1968,77 @@ static DWORD uv__pipe_read_data(uv_loop_t* loop, /* Ensure we read at most the smaller of: * (a) the length of the user-allocated buffer. * (b) the maximum data length as specified by the `max_bytes` argument. + * (c) the amount of data that can be read non-blocking */ if (max_bytes > buf.len) max_bytes = buf.len; - /* Read into the user buffer. */ - if (!ReadFile(handle->handle, buf.base, max_bytes, &bytes_read, NULL)) { - uv__pipe_read_error_or_eof(loop, handle, GetLastError(), buf); - return 0; /* Break out of read loop. */ + if (handle->flags & UV_HANDLE_NON_OVERLAPPED_PIPE) { + /* The user failed to supply a pipe that can be used non-blocking or with + * threads. Try to estimate the amount of data that is safe to read without + * blocking, in a race-y way however. */ + bytes_available = 0; + if (!PeekNamedPipe(handle->handle, NULL, 0, NULL, &bytes_available, NULL)) { + r = GetLastError(); + } else { + if (max_bytes > bytes_available) + max_bytes = bytes_available; + *bytes_read = 0; + if (max_bytes == 0 || ReadFile(handle->handle, buf.base, max_bytes, bytes_read, NULL)) + r = ERROR_SUCCESS; + else + r = GetLastError(); + } + more = max_bytes < bytes_available; + } else { + /* Read into the user buffer. + * Prepare an Event so that we can cancel if it doesn't complete immediately. + */ + req = &handle->read_req; + memset(&req->u.io.overlapped, 0, sizeof(req->u.io.overlapped)); + req->u.io.overlapped.hEvent = (HANDLE) ((uintptr_t) req->event_handle | 1); + if (ReadFile(handle->handle, buf.base, max_bytes, bytes_read, &req->u.io.overlapped)) { + r = ERROR_SUCCESS; + } else { + r = GetLastError(); + *bytes_read = 0; + if (r == ERROR_IO_PENDING) { + r = CancelIoEx(handle->handle, &req->u.io.overlapped); + assert(r || GetLastError() == ERROR_NOT_FOUND); + if (GetOverlappedResult(handle->handle, &req->u.io.overlapped, bytes_read, TRUE)) { + r = ERROR_SUCCESS; + } else { + r = GetLastError(); + *bytes_read = 0; + } + } + } + more = *bytes_read == max_bytes; } /* Call the read callback. */ - handle->read_cb((uv_stream_t*) handle, bytes_read, &buf); + if (r == ERROR_SUCCESS || r == ERROR_OPERATION_ABORTED) + handle->read_cb((uv_stream_t*) handle, *bytes_read, &buf); + else + uv__pipe_read_error_or_eof(loop, handle, r, buf); - return bytes_read; + return more; } -static DWORD uv__pipe_read_ipc(uv_loop_t* loop, uv_pipe_t* handle) { - uint32_t* data_remaining = &handle->pipe.conn.ipc_data_frame.payload_remaining; - int err; +static int uv__pipe_read_ipc(uv_loop_t* loop, uv_pipe_t* handle) { + uint32_t* data_remaining; + DWORD err; + DWORD more; + DWORD bytes_read; + + data_remaining = &handle->pipe.conn.ipc_data_frame.payload_remaining; if (*data_remaining > 0) { /* Read frame data payload. */ - DWORD bytes_read = - uv__pipe_read_data(loop, handle, *data_remaining, *data_remaining); + bytes_read = *data_remaining; + more = uv__pipe_read_data(loop, handle, &bytes_read, bytes_read); *data_remaining -= bytes_read; - return bytes_read; } else { /* Start of a new IPC frame. */ @@ -1995,7 +2049,7 @@ static DWORD uv__pipe_read_ipc(uv_loop_t* loop, uv_pipe_t* handle) { /* Read the IPC frame header. */ err = uv__pipe_read_exactly( - handle->handle, &frame_header, sizeof frame_header); + handle, &frame_header, sizeof frame_header); if (err) goto error; @@ -2031,21 +2085,24 @@ static DWORD uv__pipe_read_ipc(uv_loop_t* loop, uv_pipe_t* handle) { /* If no socket xfer info follows, return here. Data will be read in a * subsequent invocation of uv__pipe_read_ipc(). */ - if (xfer_type == UV__IPC_SOCKET_XFER_NONE) - return sizeof frame_header; /* Number of bytes read. */ - - /* Read transferred socket information. */ - err = uv__pipe_read_exactly(handle->handle, &xfer_info, sizeof xfer_info); - if (err) - goto error; - - /* Store the pending socket info. */ - uv__pipe_queue_ipc_xfer_info(handle, xfer_type, &xfer_info); + if (xfer_type != UV__IPC_SOCKET_XFER_NONE) { + /* Read transferred socket information. */ + err = uv__pipe_read_exactly(handle, &xfer_info, sizeof xfer_info); + if (err) + goto error; - /* Return number of bytes read. */ - return sizeof frame_header + sizeof xfer_info; + /* Store the pending socket info. */ + uv__pipe_queue_ipc_xfer_info(handle, xfer_type, &xfer_info); + } } + /* Return whether the caller should immediately try another read call to get + * more data. Calling uv__pipe_read_exactly will hang if there isn't data + * available, so we cannot do this unless we are guaranteed not to reach that. + */ + more = *data_remaining > 0; + return more; + invalid: /* Invalid frame. */ err = WSAECONNABORTED; /* Maps to UV_ECONNABORTED. */ @@ -2059,12 +2116,20 @@ static DWORD uv__pipe_read_ipc(uv_loop_t* loop, uv_pipe_t* handle) { void uv__process_pipe_read_req(uv_loop_t* loop, uv_pipe_t* handle, uv_req_t* req) { + DWORD err; + DWORD more; + DWORD bytes_requested; assert(handle->type == UV_NAMED_PIPE); handle->flags &= ~(UV_HANDLE_READ_PENDING | UV_HANDLE_CANCELLATION_PENDING); DECREASE_PENDING_REQ_COUNT(handle); eof_timer_stop(handle); + if (handle->read_req.wait_handle != INVALID_HANDLE_VALUE) { + UnregisterWait(handle->read_req.wait_handle); + handle->read_req.wait_handle = INVALID_HANDLE_VALUE; + } + /* At this point, we're done with bookkeeping. If the user has stopped * reading the pipe in the meantime, there is nothing left to do, since there * is no callback that we can call. */ @@ -2073,7 +2138,7 @@ void uv__process_pipe_read_req(uv_loop_t* loop, if (!REQ_SUCCESS(req)) { /* An error occurred doing the zero-read. */ - DWORD err = GET_REQ_ERROR(req); + err = GET_REQ_ERROR(req); /* If the read was cancelled by uv__pipe_interrupt_read(), the request may * indicate an ERROR_OPERATION_ABORTED error. This error isn't relevant to @@ -2084,34 +2149,18 @@ void uv__process_pipe_read_req(uv_loop_t* loop, } else { /* The zero-read completed without error, indicating there is data * available in the kernel buffer. */ - DWORD avail; - - /* Get the number of bytes available. */ - avail = 0; - if (!PeekNamedPipe(handle->handle, NULL, 0, NULL, &avail, NULL)) - uv__pipe_read_error_or_eof(loop, handle, GetLastError(), uv_null_buf_); - - /* Read until we've either read all the bytes available, or the 'reading' - * flag is cleared. */ - while (avail > 0 && handle->flags & UV_HANDLE_READING) { + while (handle->flags & UV_HANDLE_READING) { + bytes_requested = 65536; /* Depending on the type of pipe, read either IPC frames or raw data. */ - DWORD bytes_read = - handle->ipc ? uv__pipe_read_ipc(loop, handle) - : uv__pipe_read_data(loop, handle, avail, (DWORD) -1); + if (handle->ipc) + more = uv__pipe_read_ipc(loop, handle); + else + more = uv__pipe_read_data(loop, handle, &bytes_requested, INT32_MAX); /* If no bytes were read, treat this as an indication that an error * occurred, and break out of the read loop. */ - if (bytes_read == 0) - break; - - /* It is possible that more bytes were read than we thought were - * available. To prevent `avail` from underflowing, break out of the loop - * if this is the case. */ - if (bytes_read > avail) + if (more == 0) break; - - /* Recompute the number of bytes available. */ - avail -= bytes_read; } } @@ -2132,17 +2181,15 @@ void uv__process_pipe_write_req(uv_loop_t* loop, uv_pipe_t* handle, assert(handle->write_queue_size >= req->u.io.queued_bytes); handle->write_queue_size -= req->u.io.queued_bytes; - UNREGISTER_HANDLE_REQ(loop, handle, req); + UNREGISTER_HANDLE_REQ(loop, handle); - if (handle->flags & UV_HANDLE_EMULATE_IOCP) { - if (req->wait_handle != INVALID_HANDLE_VALUE) { - UnregisterWait(req->wait_handle); - req->wait_handle = INVALID_HANDLE_VALUE; - } - if (req->event_handle) { - CloseHandle(req->event_handle); - req->event_handle = NULL; - } + if (req->wait_handle != INVALID_HANDLE_VALUE) { + UnregisterWait(req->wait_handle); + req->wait_handle = INVALID_HANDLE_VALUE; + } + if (req->event_handle) { + CloseHandle(req->event_handle); + req->event_handle = NULL; } err = GET_REQ_ERROR(req); @@ -2219,7 +2266,7 @@ void uv__process_pipe_connect_req(uv_loop_t* loop, uv_pipe_t* handle, assert(handle->type == UV_NAMED_PIPE); - UNREGISTER_HANDLE_REQ(loop, handle, req); + UNREGISTER_HANDLE_REQ(loop, handle); err = 0; if (REQ_SUCCESS(req)) { @@ -2251,7 +2298,7 @@ void uv__process_pipe_shutdown_req(uv_loop_t* loop, uv_pipe_t* handle, /* Clear the shutdown_req field so we don't go here again. */ handle->stream.conn.shutdown_req = NULL; - UNREGISTER_HANDLE_REQ(loop, handle, req); + UNREGISTER_HANDLE_REQ(loop, handle); if (handle->flags & UV_HANDLE_CLOSING) { /* Already closing. Cancel the shutdown. */ diff --git a/deps/uv/src/win/process-stdio.c b/deps/uv/src/win/process-stdio.c index 0db35723731505..181db92ea30d45 100644 --- a/deps/uv/src/win/process-stdio.c +++ b/deps/uv/src/win/process-stdio.c @@ -46,12 +46,12 @@ #define CHILD_STDIO_CRT_FLAGS(buffer, fd) \ *((unsigned char*) (buffer) + sizeof(int) + fd) -#define CHILD_STDIO_HANDLE(buffer, fd) \ - *((HANDLE*) ((unsigned char*) (buffer) + \ - sizeof(int) + \ - sizeof(unsigned char) * \ - CHILD_STDIO_COUNT((buffer)) + \ - sizeof(HANDLE) * (fd))) +#define CHILD_STDIO_HANDLE(buffer, fd) \ + ((void*) ((unsigned char*) (buffer) + \ + sizeof(int) + \ + sizeof(unsigned char) * \ + CHILD_STDIO_COUNT((buffer)) + \ + sizeof(HANDLE) * (fd))) /* CRT file descriptor mode flags */ @@ -194,7 +194,7 @@ int uv__stdio_create(uv_loop_t* loop, CHILD_STDIO_COUNT(buffer) = count; for (i = 0; i < count; i++) { CHILD_STDIO_CRT_FLAGS(buffer, i) = 0; - CHILD_STDIO_HANDLE(buffer, i) = INVALID_HANDLE_VALUE; + memset(CHILD_STDIO_HANDLE(buffer, i), 0xFF, sizeof(HANDLE)); } for (i = 0; i < count; i++) { @@ -215,14 +215,15 @@ int uv__stdio_create(uv_loop_t* loop, * handles in the stdio buffer are initialized with. * INVALID_HANDLE_VALUE, which should be okay. */ if (i <= 2) { + HANDLE nul; DWORD access = (i == 0) ? FILE_GENERIC_READ : FILE_GENERIC_WRITE | FILE_READ_ATTRIBUTES; - err = uv__create_nul_handle(&CHILD_STDIO_HANDLE(buffer, i), - access); + err = uv__create_nul_handle(&nul, access); if (err) goto error; + memcpy(CHILD_STDIO_HANDLE(buffer, i), &nul, sizeof(HANDLE)); CHILD_STDIO_CRT_FLAGS(buffer, i) = FOPEN | FDEV; } break; @@ -247,7 +248,7 @@ int uv__stdio_create(uv_loop_t* loop, if (err) goto error; - CHILD_STDIO_HANDLE(buffer, i) = child_pipe; + memcpy(CHILD_STDIO_HANDLE(buffer, i), &child_pipe, sizeof(HANDLE)); CHILD_STDIO_CRT_FLAGS(buffer, i) = FOPEN | FPIPE; break; } @@ -263,7 +264,7 @@ int uv__stdio_create(uv_loop_t* loop, * error. */ if (fdopt.data.fd <= 2 && err == ERROR_INVALID_HANDLE) { CHILD_STDIO_CRT_FLAGS(buffer, i) = 0; - CHILD_STDIO_HANDLE(buffer, i) = INVALID_HANDLE_VALUE; + memset(CHILD_STDIO_HANDLE(buffer, i), 0xFF, sizeof(HANDLE)); break; } goto error; @@ -298,7 +299,7 @@ int uv__stdio_create(uv_loop_t* loop, return -1; } - CHILD_STDIO_HANDLE(buffer, i) = child_handle; + memcpy(CHILD_STDIO_HANDLE(buffer, i), &child_handle, sizeof(HANDLE)); break; } @@ -334,7 +335,7 @@ int uv__stdio_create(uv_loop_t* loop, if (err) goto error; - CHILD_STDIO_HANDLE(buffer, i) = child_handle; + memcpy(CHILD_STDIO_HANDLE(buffer, i), &child_handle, sizeof(HANDLE)); CHILD_STDIO_CRT_FLAGS(buffer, i) = crt_flags; break; } @@ -359,7 +360,7 @@ void uv__stdio_destroy(BYTE* buffer) { count = CHILD_STDIO_COUNT(buffer); for (i = 0; i < count; i++) { - HANDLE handle = CHILD_STDIO_HANDLE(buffer, i); + HANDLE handle = uv__stdio_handle(buffer, i); if (handle != INVALID_HANDLE_VALUE) { CloseHandle(handle); } @@ -374,7 +375,7 @@ void uv__stdio_noinherit(BYTE* buffer) { count = CHILD_STDIO_COUNT(buffer); for (i = 0; i < count; i++) { - HANDLE handle = CHILD_STDIO_HANDLE(buffer, i); + HANDLE handle = uv__stdio_handle(buffer, i); if (handle != INVALID_HANDLE_VALUE) { SetHandleInformation(handle, HANDLE_FLAG_INHERIT, 0); } @@ -412,5 +413,7 @@ WORD uv__stdio_size(BYTE* buffer) { HANDLE uv__stdio_handle(BYTE* buffer, int fd) { - return CHILD_STDIO_HANDLE(buffer, fd); + HANDLE handle; + memcpy(&handle, CHILD_STDIO_HANDLE(buffer, fd), sizeof(HANDLE)); + return handle; } diff --git a/deps/uv/src/win/process.c b/deps/uv/src/win/process.c index 4e94dee90e13ee..9d48ddc6f84d6f 100644 --- a/deps/uv/src/win/process.c +++ b/deps/uv/src/win/process.c @@ -26,7 +26,6 @@ #include #include #include -#include /* _alloca */ #include "uv.h" #include "internal.h" @@ -598,11 +597,9 @@ int make_program_args(char** args, int verbatim_arguments, WCHAR** dst_ptr) { } -int env_strncmp(const wchar_t* a, int na, const wchar_t* b) { +static int env_strncmp(const wchar_t* a, int na, const wchar_t* b) { wchar_t* a_eq; wchar_t* b_eq; - wchar_t* A; - wchar_t* B; int nb; int r; @@ -617,27 +614,8 @@ int env_strncmp(const wchar_t* a, int na, const wchar_t* b) { assert(b_eq); nb = b_eq - b; - A = _alloca((na+1) * sizeof(wchar_t)); - B = _alloca((nb+1) * sizeof(wchar_t)); - - r = LCMapStringW(LOCALE_INVARIANT, LCMAP_UPPERCASE, a, na, A, na); - assert(r==na); - A[na] = L'\0'; - r = LCMapStringW(LOCALE_INVARIANT, LCMAP_UPPERCASE, b, nb, B, nb); - assert(r==nb); - B[nb] = L'\0'; - - for (;;) { - wchar_t AA = *A++; - wchar_t BB = *B++; - if (AA < BB) { - return -1; - } else if (AA > BB) { - return 1; - } else if (!AA && !BB) { - return 0; - } - } + r = CompareStringOrdinal(a, na, b, nb, /*case insensitive*/TRUE); + return r - CSTR_EQUAL; } @@ -676,6 +654,7 @@ int make_program_env(char* env_block[], WCHAR** dst_ptr) { WCHAR* dst_copy; WCHAR** ptr_copy; WCHAR** env_copy; + char* p; size_t required_vars_value_len[ARRAY_SIZE(required_vars)]; /* first pass: determine size in UTF-16 */ @@ -691,11 +670,13 @@ int make_program_env(char* env_block[], WCHAR** dst_ptr) { } /* second pass: copy to UTF-16 environment block */ - dst_copy = uv__malloc(env_len * sizeof(WCHAR)); - if (dst_copy == NULL && env_len > 0) { + len = env_block_count * sizeof(WCHAR*); + p = uv__malloc(len + env_len * sizeof(WCHAR)); + if (p == NULL) { return UV_ENOMEM; } - env_copy = _alloca(env_block_count * sizeof(WCHAR*)); + env_copy = (void*) &p[0]; + dst_copy = (void*) &p[len]; ptr = dst_copy; ptr_copy = env_copy; @@ -745,7 +726,7 @@ int make_program_env(char* env_block[], WCHAR** dst_ptr) { /* final pass: copy, in sort order, and inserting required variables */ dst = uv__malloc((1+env_len) * sizeof(WCHAR)); if (!dst) { - uv__free(dst_copy); + uv__free(p); return UV_ENOMEM; } @@ -790,7 +771,7 @@ int make_program_env(char* env_block[], WCHAR** dst_ptr) { assert(env_len == (size_t) (ptr - dst)); *ptr = L'\0'; - uv__free(dst_copy); + uv__free(p); *dst_ptr = dst; return 0; } @@ -1308,16 +1289,34 @@ static int uv__kill(HANDLE process_handle, int signum) { /* Unconditionally terminate the process. On Windows, killed processes * normally return 1. */ int err; + DWORD status; if (TerminateProcess(process_handle, 1)) return 0; - /* If the process already exited before TerminateProcess was called,. + /* If the process already exited before TerminateProcess was called, * TerminateProcess will fail with ERROR_ACCESS_DENIED. */ err = GetLastError(); - if (err == ERROR_ACCESS_DENIED && - WaitForSingleObject(process_handle, 0) == WAIT_OBJECT_0) { - return UV_ESRCH; + if (err == ERROR_ACCESS_DENIED) { + /* First check using GetExitCodeProcess() with status different from + * STILL_ACTIVE (259). This check can be set incorrectly by the process, + * though that is uncommon. */ + if (GetExitCodeProcess(process_handle, &status) && + status != STILL_ACTIVE) { + return UV_ESRCH; + } + + /* But the process could have exited with code == STILL_ACTIVE, use then + * WaitForSingleObject with timeout zero. This is prone to a race + * condition as it could return WAIT_TIMEOUT because the handle might + * not have been signaled yet.That would result in returning the wrong + * error code here (UV_EACCES instead of UV_ESRCH), but we cannot fix + * the kernel synchronization issue that TerminateProcess is + * inconsistent with WaitForSingleObject with just the APIs available to + * us in user space. */ + if (WaitForSingleObject(process_handle, 0) == WAIT_OBJECT_0) { + return UV_ESRCH; + } } return uv_translate_sys_error(err); @@ -1325,6 +1324,14 @@ static int uv__kill(HANDLE process_handle, int signum) { case 0: { /* Health check: is the process still alive? */ + DWORD status; + + if (!GetExitCodeProcess(process_handle, &status)) + return uv_translate_sys_error(GetLastError()); + + if (status != STILL_ACTIVE) + return UV_ESRCH; + switch (WaitForSingleObject(process_handle, 0)) { case WAIT_OBJECT_0: return UV_ESRCH; diff --git a/deps/uv/src/win/req-inl.h b/deps/uv/src/win/req-inl.h index 9e2075906f53ef..cf16e8ba41fa73 100644 --- a/deps/uv/src/win/req-inl.h +++ b/deps/uv/src/win/req-inl.h @@ -53,16 +53,16 @@ (uv__ntstatus_to_winsock_error(GET_REQ_STATUS((req)))) -#define REGISTER_HANDLE_REQ(loop, handle, req) \ +#define REGISTER_HANDLE_REQ(loop, handle) \ do { \ INCREASE_ACTIVE_COUNT((loop), (handle)); \ - uv__req_register((loop), (req)); \ + uv__req_register((loop)); \ } while (0) -#define UNREGISTER_HANDLE_REQ(loop, handle, req) \ +#define UNREGISTER_HANDLE_REQ(loop, handle) \ do { \ DECREASE_ACTIVE_COUNT((loop), (handle)); \ - uv__req_unregister((loop), (req)); \ + uv__req_unregister((loop)); \ } while (0) @@ -83,7 +83,7 @@ INLINE static uv_req_t* uv__overlapped_to_req(OVERLAPPED* overlapped) { - return CONTAINING_RECORD(overlapped, uv_req_t, u.io.overlapped); + return container_of(overlapped, uv_req_t, u.io.overlapped); } diff --git a/deps/uv/src/win/signal.c b/deps/uv/src/win/signal.c index 8c79871b9bb07f..85730b27b2b212 100644 --- a/deps/uv/src/win/signal.c +++ b/deps/uv/src/win/signal.c @@ -91,7 +91,7 @@ int uv__signal_dispatch(int signum) { for (handle = RB_NFIND(uv_signal_tree_s, &uv__signal_tree, &lookup); handle != NULL && handle->signum == signum; - handle = RB_NEXT(uv_signal_tree_s, &uv__signal_tree, handle)) { + handle = RB_NEXT(uv_signal_tree_s, handle)) { unsigned long previous = InterlockedExchange( (volatile LONG*) &handle->pending_signum, signum); diff --git a/deps/uv/src/win/stream.c b/deps/uv/src/win/stream.c index 7bf9ca388cb0f0..a53a10b03823e1 100644 --- a/deps/uv/src/win/stream.c +++ b/deps/uv/src/win/stream.c @@ -131,7 +131,7 @@ int uv_write(uv_write_t* req, case UV_NAMED_PIPE: err = uv__pipe_write( loop, req, (uv_pipe_t*) handle, bufs, nbufs, NULL, cb); - break; + return uv_translate_write_sys_error(err); case UV_TTY: err = uv__tty_write(loop, req, (uv_tty_t*) handle, bufs, nbufs, cb); break; @@ -164,7 +164,7 @@ int uv_write2(uv_write_t* req, err = uv__pipe_write( loop, req, (uv_pipe_t*) handle, bufs, nbufs, send_handle, cb); - return uv_translate_sys_error(err); + return uv_translate_write_sys_error(err); } @@ -216,7 +216,7 @@ int uv_shutdown(uv_shutdown_t* req, uv_stream_t* handle, uv_shutdown_cb cb) { handle->flags &= ~UV_HANDLE_WRITABLE; handle->stream.conn.shutdown_req = req; handle->reqs_pending++; - REGISTER_HANDLE_REQ(loop, handle, req); + REGISTER_HANDLE_REQ(loop, handle); if (handle->stream.conn.write_reqs_pending == 0) { if (handle->type == UV_NAMED_PIPE) diff --git a/deps/uv/src/win/tcp.c b/deps/uv/src/win/tcp.c index 187f36e2a61c87..c452c12e8f06f1 100644 --- a/deps/uv/src/win/tcp.c +++ b/deps/uv/src/win/tcp.c @@ -58,11 +58,17 @@ static int uv__tcp_keepalive(uv_tcp_t* handle, SOCKET socket, int enable, unsign return WSAGetLastError(); } - if (enable && setsockopt(socket, - IPPROTO_TCP, - TCP_KEEPALIVE, - (const char*)&delay, - sizeof delay) == -1) { + if (!enable) + return 0; + + if (delay < 1) + return UV_EINVAL; + + if (setsockopt(socket, + IPPROTO_TCP, + TCP_KEEPALIVE, + (const char*)&delay, + sizeof delay) == -1) { return WSAGetLastError(); } @@ -206,7 +212,7 @@ void uv__process_tcp_shutdown_req(uv_loop_t* loop, uv_tcp_t* stream, uv_shutdown assert(stream->flags & UV_HANDLE_CONNECTION); stream->stream.conn.shutdown_req = NULL; - UNREGISTER_HANDLE_REQ(loop, stream, req); + UNREGISTER_HANDLE_REQ(loop, stream); err = 0; if (stream->flags & UV_HANDLE_CLOSING) @@ -286,6 +292,12 @@ static int uv__tcp_try_bind(uv_tcp_t* handle, DWORD err; int r; + /* There is no SO_REUSEPORT on Windows, Windows only knows SO_REUSEADDR. + * so we just return an error directly when UV_TCP_REUSEPORT is requested + * for binding the socket. */ + if (flags & UV_TCP_REUSEPORT) + return ERROR_NOT_SUPPORTED; + if (handle->socket == INVALID_SOCKET) { SOCKET sock; @@ -822,7 +834,7 @@ static int uv__tcp_try_connect(uv_connect_t* req, if (handle->delayed_error != 0) { /* Process the req without IOCP. */ handle->reqs_pending++; - REGISTER_HANDLE_REQ(loop, handle, req); + REGISTER_HANDLE_REQ(loop, handle); uv__insert_pending_req(loop, (uv_req_t*)req); return 0; } @@ -838,12 +850,12 @@ static int uv__tcp_try_connect(uv_connect_t* req, if (UV_SUCCEEDED_WITHOUT_IOCP(success)) { /* Process the req without IOCP. */ handle->reqs_pending++; - REGISTER_HANDLE_REQ(loop, handle, req); + REGISTER_HANDLE_REQ(loop, handle); uv__insert_pending_req(loop, (uv_req_t*)req); } else if (UV_SUCCEEDED_WITH_IOCP(success)) { /* The req will be processed with IOCP. */ handle->reqs_pending++; - REGISTER_HANDLE_REQ(loop, handle, req); + REGISTER_HANDLE_REQ(loop, handle); } else { return WSAGetLastError(); } @@ -913,14 +925,14 @@ int uv__tcp_write(uv_loop_t* loop, req->u.io.queued_bytes = 0; handle->reqs_pending++; handle->stream.conn.write_reqs_pending++; - REGISTER_HANDLE_REQ(loop, handle, req); + REGISTER_HANDLE_REQ(loop, handle); uv__insert_pending_req(loop, (uv_req_t*) req); } else if (UV_SUCCEEDED_WITH_IOCP(result == 0)) { /* Request queued by the kernel. */ req->u.io.queued_bytes = uv__count_bufs(bufs, nbufs); handle->reqs_pending++; handle->stream.conn.write_reqs_pending++; - REGISTER_HANDLE_REQ(loop, handle, req); + REGISTER_HANDLE_REQ(loop, handle); handle->write_queue_size += req->u.io.queued_bytes; if (handle->flags & UV_HANDLE_EMULATE_IOCP && !RegisterWaitForSingleObject(&req->wait_handle, @@ -934,7 +946,7 @@ int uv__tcp_write(uv_loop_t* loop, req->u.io.queued_bytes = 0; handle->reqs_pending++; handle->stream.conn.write_reqs_pending++; - REGISTER_HANDLE_REQ(loop, handle, req); + REGISTER_HANDLE_REQ(loop, handle); SET_REQ_ERROR(req, WSAGetLastError()); uv__insert_pending_req(loop, (uv_req_t*) req); } @@ -1105,7 +1117,7 @@ void uv__process_tcp_write_req(uv_loop_t* loop, uv_tcp_t* handle, assert(handle->write_queue_size >= req->u.io.queued_bytes); handle->write_queue_size -= req->u.io.queued_bytes; - UNREGISTER_HANDLE_REQ(loop, handle, req); + UNREGISTER_HANDLE_REQ(loop, handle); if (handle->flags & UV_HANDLE_EMULATE_IOCP) { if (req->wait_handle != INVALID_HANDLE_VALUE) { @@ -1197,7 +1209,7 @@ void uv__process_tcp_connect_req(uv_loop_t* loop, uv_tcp_t* handle, assert(handle->type == UV_TCP); - UNREGISTER_HANDLE_REQ(loop, handle, req); + UNREGISTER_HANDLE_REQ(loop, handle); err = 0; if (handle->delayed_error) { @@ -1551,11 +1563,6 @@ int uv__tcp_connect(uv_connect_t* req, return 0; } -#ifndef WSA_FLAG_NO_HANDLE_INHERIT -/* Added in Windows 7 SP1. Specify this to avoid race conditions, */ -/* but also manually clear the inherit flag in case this failed. */ -#define WSA_FLAG_NO_HANDLE_INHERIT 0x80 -#endif int uv_socketpair(int type, int protocol, uv_os_sock_t fds[2], int flags0, int flags1) { SOCKET server = INVALID_SOCKET; diff --git a/deps/uv/src/win/thread.c b/deps/uv/src/win/thread.c index 57c25e8f5a861c..bf39b88633b0d8 100644 --- a/deps/uv/src/win/thread.c +++ b/deps/uv/src/win/thread.c @@ -32,45 +32,23 @@ #include "uv.h" #include "internal.h" -static void uv__once_inner(uv_once_t* guard, void (*callback)(void)) { - DWORD result; - HANDLE existing_event, created_event; - - created_event = CreateEvent(NULL, 1, 0, NULL); - if (created_event == 0) { - /* Could fail in a low-memory situation? */ - uv_fatal_error(GetLastError(), "CreateEvent"); - } +typedef void (*uv__once_cb)(void); - existing_event = InterlockedCompareExchangePointer(&guard->event, - created_event, - NULL); +typedef struct { + uv__once_cb callback; +} uv__once_data_t; - if (existing_event == NULL) { - /* We won the race */ - callback(); +static BOOL WINAPI uv__once_inner(INIT_ONCE *once, void* param, void** context) { + uv__once_data_t* data = param; - result = SetEvent(created_event); - assert(result); - guard->ran = 1; + data->callback(); - } else { - /* We lost the race. Destroy the event we created and wait for the existing - * one to become signaled. */ - CloseHandle(created_event); - result = WaitForSingleObject(existing_event, INFINITE); - assert(result == WAIT_OBJECT_0); - } + return TRUE; } - -void uv_once(uv_once_t* guard, void (*callback)(void)) { - /* Fast case - avoid WaitForSingleObject. */ - if (guard->ran) { - return; - } - - uv__once_inner(guard, callback); +void uv_once(uv_once_t* guard, uv__once_cb callback) { + uv__once_data_t data = { .callback = callback }; + InitOnceExecuteOnce(&guard->init_once, uv__once_inner, (void*) &data, NULL); } diff --git a/deps/uv/src/win/tty.c b/deps/uv/src/win/tty.c index 9f8dd698d76124..c0339ded2e4b76 100644 --- a/deps/uv/src/win/tty.c +++ b/deps/uv/src/win/tty.c @@ -2183,7 +2183,7 @@ int uv__tty_write(uv_loop_t* loop, handle->reqs_pending++; handle->stream.conn.write_reqs_pending++; - REGISTER_HANDLE_REQ(loop, handle, req); + REGISTER_HANDLE_REQ(loop, handle); req->u.io.queued_bytes = 0; @@ -2219,7 +2219,7 @@ void uv__process_tty_write_req(uv_loop_t* loop, uv_tty_t* handle, int err; handle->write_queue_size -= req->u.io.queued_bytes; - UNREGISTER_HANDLE_REQ(loop, handle, req); + UNREGISTER_HANDLE_REQ(loop, handle); if (req->cb) { err = GET_REQ_ERROR(req); @@ -2263,7 +2263,7 @@ void uv__process_tty_shutdown_req(uv_loop_t* loop, uv_tty_t* stream, uv_shutdown assert(req); stream->stream.conn.shutdown_req = NULL; - UNREGISTER_HANDLE_REQ(loop, stream, req); + UNREGISTER_HANDLE_REQ(loop, stream); /* TTY shutdown is really just a no-op */ if (req->cb) { @@ -2380,8 +2380,8 @@ static DWORD WINAPI uv__tty_console_resize_watcher_thread(void* param) { /* Make sure to not overwhelm the system with resize events */ Sleep(33); WaitForSingleObject(uv__tty_console_resized, INFINITE); - uv__tty_console_signal_resize(); ResetEvent(uv__tty_console_resized); + uv__tty_console_signal_resize(); } return 0; } diff --git a/deps/uv/src/win/udp.c b/deps/uv/src/win/udp.c index eab53842d4fe37..5c8f6e1dd0b449 100644 --- a/deps/uv/src/win/udp.c +++ b/deps/uv/src/win/udp.c @@ -200,6 +200,12 @@ static int uv__udp_maybe_bind(uv_udp_t* handle, if (handle->flags & UV_HANDLE_BOUND) return 0; + /* There is no SO_REUSEPORT on Windows, Windows only knows SO_REUSEADDR. + * so we just return an error directly when UV_UDP_REUSEPORT is requested + * for binding the socket. */ + if (flags & UV_UDP_REUSEPORT) + return ERROR_NOT_SUPPORTED; + if ((flags & UV_UDP_IPV6ONLY) && addr->sa_family != AF_INET6) { /* UV_UDP_IPV6ONLY is supported only for IPV6 sockets */ return ERROR_INVALID_PARAMETER; @@ -376,7 +382,7 @@ static int uv__send(uv_udp_send_t* req, handle->reqs_pending++; handle->send_queue_size += req->u.io.queued_bytes; handle->send_queue_count++; - REGISTER_HANDLE_REQ(loop, handle, req); + REGISTER_HANDLE_REQ(loop, handle); uv__insert_pending_req(loop, (uv_req_t*)req); } else if (UV_SUCCEEDED_WITH_IOCP(result == 0)) { /* Request queued by the kernel. */ @@ -384,7 +390,7 @@ static int uv__send(uv_udp_send_t* req, handle->reqs_pending++; handle->send_queue_size += req->u.io.queued_bytes; handle->send_queue_count++; - REGISTER_HANDLE_REQ(loop, handle, req); + REGISTER_HANDLE_REQ(loop, handle); } else { /* Send failed due to an error. */ return WSAGetLastError(); @@ -527,7 +533,7 @@ void uv__process_udp_send_req(uv_loop_t* loop, uv_udp_t* handle, handle->send_queue_size -= req->u.io.queued_bytes; handle->send_queue_count--; - UNREGISTER_HANDLE_REQ(loop, handle, req); + UNREGISTER_HANDLE_REQ(loop, handle); if (req->cb) { err = 0; diff --git a/deps/uv/src/win/util.c b/deps/uv/src/win/util.c index a96cb915930a30..e0dba1aaa94e28 100644 --- a/deps/uv/src/win/util.c +++ b/deps/uv/src/win/util.c @@ -316,25 +316,19 @@ uv_pid_t uv_os_getpid(void) { uv_pid_t uv_os_getppid(void) { - int parent_pid = -1; - HANDLE handle; - PROCESSENTRY32 pe; - DWORD current_pid = GetCurrentProcessId(); - - pe.dwSize = sizeof(PROCESSENTRY32); - handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); - - if (Process32First(handle, &pe)) { - do { - if (pe.th32ProcessID == current_pid) { - parent_pid = pe.th32ParentProcessID; - break; - } - } while( Process32Next(handle, &pe)); + NTSTATUS nt_status; + PROCESS_BASIC_INFORMATION basic_info; + + nt_status = pNtQueryInformationProcess(GetCurrentProcess(), + ProcessBasicInformation, + &basic_info, + sizeof(basic_info), + NULL); + if (NT_SUCCESS(nt_status)) { + return basic_info.InheritedFromUniqueProcessId; + } else { + return -1; } - - CloseHandle(handle); - return parent_pid; } @@ -512,19 +506,23 @@ int uv_uptime(double* uptime) { unsigned int uv_available_parallelism(void) { - SYSTEM_INFO info; - unsigned rc; + DWORD_PTR procmask; + DWORD_PTR sysmask; + int count; + int i; /* TODO(bnoordhuis) Use GetLogicalProcessorInformationEx() to support systems * with > 64 CPUs? See https://github.com/libuv/libuv/pull/3458 */ - GetSystemInfo(&info); + count = 0; + if (GetProcessAffinityMask(GetCurrentProcess(), &procmask, &sysmask)) + for (i = 0; i < 8 * sizeof(procmask); i++) + count += 1 & (procmask >> i); - rc = info.dwNumberOfProcessors; - if (rc < 1) - rc = 1; + if (count > 0) + return count; - return rc; + return 1; } @@ -942,8 +940,13 @@ int uv_os_homedir(char* buffer, size_t* size) { r = uv_os_getenv("USERPROFILE", buffer, size); /* Don't return an error if USERPROFILE was not found. */ - if (r != UV_ENOENT) + if (r != UV_ENOENT) { + /* USERPROFILE is empty or invalid */ + if (r == 0 && *size < 3) { + return UV_ENOENT; + } return r; + } /* USERPROFILE is not set, so call uv_os_get_passwd() */ r = uv_os_get_passwd(&pwd); @@ -980,6 +983,12 @@ int uv_os_tmpdir(char* buffer, size_t* size) { if (len == 0) { return uv_translate_sys_error(GetLastError()); } + + /* tmp path is empty or invalid */ + if (len < 3) { + return UV_ENOENT; + } + /* Include space for terminating null char. */ len += 1; path = uv__malloc(len * sizeof(wchar_t)); @@ -1259,6 +1268,9 @@ int uv_os_getenv(const char* name, char* buffer, size_t* size) { SetLastError(ERROR_SUCCESS); len = GetEnvironmentVariableW(name_w, var, varlen); + if (len == 0) + r = uv_translate_sys_error(GetLastError()); + if (len < varlen) break; @@ -1280,15 +1292,8 @@ int uv_os_getenv(const char* name, char* buffer, size_t* size) { uv__free(name_w); name_w = NULL; - if (len == 0) { - r = GetLastError(); - if (r != ERROR_SUCCESS) { - r = uv_translate_sys_error(r); - goto fail; - } - } - - r = uv__copy_utf16_to_utf8(var, len, buffer, size); + if (r == 0) + r = uv__copy_utf16_to_utf8(var, len, buffer, size); fail: @@ -1528,20 +1533,7 @@ int uv_os_uname(uv_utsname_t* buffer) { os_info.dwOSVersionInfoSize = sizeof(os_info); os_info.szCSDVersion[0] = L'\0'; - /* Try calling RtlGetVersion(), and fall back to the deprecated GetVersionEx() - if RtlGetVersion() is not available. */ - if (pRtlGetVersion) { - pRtlGetVersion(&os_info); - } else { - /* Silence GetVersionEx() deprecation warning. */ - #ifdef _MSC_VER - #pragma warning(suppress : 4996) - #endif - if (GetVersionExW(&os_info) == 0) { - r = uv_translate_sys_error(GetLastError()); - goto error; - } - } + pRtlGetVersion(&os_info); /* Populate the version field. */ version_size = 0; diff --git a/deps/uv/src/win/winapi.c b/deps/uv/src/win/winapi.c index 53147b8262e284..a74108db03e701 100644 --- a/deps/uv/src/win/winapi.c +++ b/deps/uv/src/win/winapi.c @@ -48,12 +48,16 @@ sSetWinEventHook pSetWinEventHook; /* ws2_32.dll function pointer */ uv_sGetHostNameW pGetHostNameW; +/* api-ms-win-core-file-l2-1-4.dll function pointer */ +sGetFileInformationByName pGetFileInformationByName; + void uv__winapi_init(void) { HMODULE ntdll_module; HMODULE powrprof_module; HMODULE user32_module; HMODULE kernel32_module; HMODULE ws2_32_module; + HMODULE api_win_core_file_module; ntdll_module = GetModuleHandleA("ntdll.dll"); if (ntdll_module == NULL) { @@ -99,7 +103,7 @@ void uv__winapi_init(void) { pNtQueryDirectoryFile = (sNtQueryDirectoryFile) GetProcAddress(ntdll_module, "NtQueryDirectoryFile"); - if (pNtQueryVolumeInformationFile == NULL) { + if (pNtQueryDirectoryFile == NULL) { uv_fatal_error(GetLastError(), "GetProcAddress"); } @@ -144,4 +148,10 @@ void uv__winapi_init(void) { ws2_32_module, "GetHostNameW"); } + + api_win_core_file_module = GetModuleHandleA("api-ms-win-core-file-l2-1-4.dll"); + if (api_win_core_file_module != NULL) { + pGetFileInformationByName = (sGetFileInformationByName)GetProcAddress( + api_win_core_file_module, "GetFileInformationByName"); + } } diff --git a/deps/uv/src/win/winapi.h b/deps/uv/src/win/winapi.h index d380bda42a3105..548081f23a9276 100644 --- a/deps/uv/src/win/winapi.h +++ b/deps/uv/src/win/winapi.h @@ -4125,6 +4125,24 @@ typedef const UNICODE_STRING *PCUNICODE_STRING; # define DEVICE_TYPE DWORD #endif +typedef struct _FILE_STAT_BASIC_INFORMATION { + LARGE_INTEGER FileId; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER AllocationSize; + LARGE_INTEGER EndOfFile; + ULONG FileAttributes; + ULONG ReparseTag; + ULONG NumberOfLinks; + ULONG DeviceType; + ULONG DeviceCharacteristics; + ULONG Reserved; + FILE_ID_128 FileId128; + LARGE_INTEGER VolumeSerialNumber; +} FILE_STAT_BASIC_INFORMATION; + /* MinGW already has a definition for REPARSE_DATA_BUFFER, but mingw-w64 does * not. */ @@ -4224,6 +4242,15 @@ typedef enum _FILE_INFORMATION_CLASS { FileNumaNodeInformation, FileStandardLinkInformation, FileRemoteProtocolInformation, + FileRenameInformationBypassAccessCheck, + FileLinkInformationBypassAccessCheck, + FileVolumeNameInformation, + FileIdInformation, + FileIdExtdDirectoryInformation, + FileReplaceCompletionInformation, + FileHardLinkFullIdInformation, + FileIdExtdBothDirectoryInformation, + FileDispositionInformationEx, /* based on https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/ne-wdm-_file_information_class */ FileMaximumInformation } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; @@ -4323,6 +4350,10 @@ typedef struct _FILE_DISPOSITION_INFORMATION { BOOLEAN DeleteFile; } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; +typedef struct _FILE_DISPOSITION_INFORMATION_EX { + DWORD Flags; +} FILE_DISPOSITION_INFORMATION_EX, *PFILE_DISPOSITION_INFORMATION_EX; + typedef struct _FILE_PIPE_LOCAL_INFORMATION { ULONG NamedPipeType; ULONG NamedPipeConfiguration; @@ -4427,6 +4458,14 @@ typedef struct _FILE_FS_SECTOR_SIZE_INFORMATION { ULONG ByteOffsetForPartitionAlignment; } FILE_FS_SECTOR_SIZE_INFORMATION, *PFILE_FS_SECTOR_SIZE_INFORMATION; +typedef struct _PROCESS_BASIC_INFORMATION { + PVOID Reserved1; + PVOID PebBaseAddress; + PVOID Reserved2[2]; + ULONG_PTR UniqueProcessId; + ULONG_PTR InheritedFromUniqueProcessId; +} PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION; + typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION { LARGE_INTEGER IdleTime; LARGE_INTEGER KernelTime; @@ -4440,6 +4479,10 @@ typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION { # define SystemProcessorPerformanceInformation 8 #endif +#ifndef ProcessBasicInformation +# define ProcessBasicInformation 0 +#endif + #ifndef ProcessConsoleHostProcess # define ProcessConsoleHostProcess 49 #endif @@ -4739,6 +4782,21 @@ typedef struct _TCP_INITIAL_RTO_PARAMETERS { # define SIO_TCP_INITIAL_RTO _WSAIOW(IOC_VENDOR,17) #endif +/* from winnt.h */ +typedef enum _FILE_INFO_BY_NAME_CLASS { + FileStatByNameInfo, + FileStatLxByNameInfo, + FileCaseSensitiveByNameInfo, + FileStatBasicByNameInfo, + MaximumFileInfoByNameClass +} FILE_INFO_BY_NAME_CLASS; + +typedef BOOL(WINAPI* sGetFileInformationByName)( + PCWSTR FileName, + FILE_INFO_BY_NAME_CLASS FileInformationClass, + PVOID FileInfoBuffer, + ULONG FileInfoBufferSize); + /* Ntdll function pointers */ extern sRtlGetVersion pRtlGetVersion; extern sRtlNtStatusToDosError pRtlNtStatusToDosError; @@ -4759,6 +4817,9 @@ extern sPowerRegisterSuspendResumeNotification pPowerRegisterSuspendResumeNotifi /* User32.dll function pointer */ extern sSetWinEventHook pSetWinEventHook; +/* api-ms-win-core-file-l2-1-4.dll function pointers */ +extern sGetFileInformationByName pGetFileInformationByName; + /* ws2_32.dll function pointer */ /* mingw doesn't have this definition, so let's declare it here locally */ typedef int (WINAPI *uv_sGetHostNameW) diff --git a/deps/uv/test/task.h b/deps/uv/test/task.h index 8b8353263da90f..e25a9c9a1386aa 100644 --- a/deps/uv/test/task.h +++ b/deps/uv/test/task.h @@ -53,6 +53,10 @@ # define TEST_PIPENAME "\\\\.\\pipe\\uv-test" # define TEST_PIPENAME_2 "\\\\.\\pipe\\uv-test2" # define TEST_PIPENAME_3 "\\\\.\\pipe\\uv-test3" +#elif __ANDROID__ +# define TEST_PIPENAME "/data/local/tmp/uv-test-sock" +# define TEST_PIPENAME_2 "/data/local/tmp/uv-test-sock2" +# define TEST_PIPENAME_3 "/data/local/tmp/uv-test-sock3" #else # define TEST_PIPENAME "/tmp/uv-test-sock" # define TEST_PIPENAME_2 "/tmp/uv-test-sock2" diff --git a/deps/uv/test/test-emfile.c b/deps/uv/test/test-emfile.c index ef2338cdfbb165..3ad8378ca1e405 100644 --- a/deps/uv/test/test-emfile.c +++ b/deps/uv/test/test-emfile.c @@ -75,6 +75,14 @@ TEST_IMPL(emfile) { ASSERT_EQ(errno, EMFILE); close(maxfd); +#if defined(__ANDROID__) + /* Android connect syscall requires an extra file descriptor + * + * It fails in uv__tcp_connect + * */ + close(maxfd - 1); +#endif + /* Now connect and use up the last available file descriptor. The EMFILE * handling logic in src/unix/stream.c should ensure that connect_cb() runs * whereas connection_cb() should *not* run. diff --git a/deps/uv/test/test-env-vars.c b/deps/uv/test/test-env-vars.c index 016f0733c6e424..fd25ea26e14f75 100644 --- a/deps/uv/test/test-env-vars.c +++ b/deps/uv/test/test-env-vars.c @@ -33,6 +33,11 @@ TEST_IMPL(env_vars) { int i, r, envcount, found, found_win_special; uv_env_item_t* envitems; +#if defined(_WIN32) && defined(__ASAN__) + /* See investigation in https://github.com/libuv/libuv/issues/4338 */ + RETURN_SKIP("Test does not currently work on Windows under ASAN"); +#endif + /* Reject invalid inputs when setting an environment variable */ r = uv_os_setenv(NULL, "foo"); ASSERT_EQ(r, UV_EINVAL); diff --git a/deps/uv/test/test-fs-copyfile.c b/deps/uv/test/test-fs-copyfile.c index 3aacf12596f558..f7a0c2363e8f1f 100644 --- a/deps/uv/test/test-fs-copyfile.c +++ b/deps/uv/test/test-fs-copyfile.c @@ -46,6 +46,8 @@ static void handle_result(uv_fs_t* req) { uv_fs_t stat_req; uint64_t size; uint64_t mode; + uint64_t uid; + uint64_t gid; int r; ASSERT_EQ(req->fs_type, UV_FS_COPYFILE); @@ -56,11 +58,15 @@ static void handle_result(uv_fs_t* req) { ASSERT_OK(r); size = stat_req.statbuf.st_size; mode = stat_req.statbuf.st_mode; + uid = stat_req.statbuf.st_uid; + gid = stat_req.statbuf.st_gid; uv_fs_req_cleanup(&stat_req); r = uv_fs_stat(NULL, &stat_req, dst, NULL); ASSERT_OK(r); ASSERT_EQ(stat_req.statbuf.st_size, size); ASSERT_EQ(stat_req.statbuf.st_mode, mode); + ASSERT_EQ(stat_req.statbuf.st_uid, uid); + ASSERT_EQ(stat_req.statbuf.st_gid, gid); uv_fs_req_cleanup(&stat_req); uv_fs_req_cleanup(req); result_check_count++; diff --git a/deps/uv/test/test-fs-event.c b/deps/uv/test/test-fs-event.c index 0ef51180dbd94d..bb223a5f654c03 100644 --- a/deps/uv/test/test-fs-event.c +++ b/deps/uv/test/test-fs-event.c @@ -29,16 +29,6 @@ # include #endif -#ifndef HAVE_KQUEUE -# if defined(__APPLE__) || \ - defined(__DragonFly__) || \ - defined(__FreeBSD__) || \ - defined(__OpenBSD__) || \ - defined(__NetBSD__) -# define HAVE_KQUEUE 1 -# endif -#endif - static uv_fs_event_t fs_event; static const char file_prefix[] = "fsevent-"; static const int fs_event_file_count = 16; @@ -91,6 +81,22 @@ static void create_file(const char* name) { uv_fs_req_cleanup(&req); } +static int delete_dir(const char* name) { + int r; + uv_fs_t req; + r = uv_fs_rmdir(NULL, &req, name, NULL); + uv_fs_req_cleanup(&req); + return r; +} + +static int delete_file(const char* name) { + int r; + uv_fs_t req; + r = uv_fs_unlink(NULL, &req, name, NULL); + uv_fs_req_cleanup(&req); + return r; +} + static void touch_file(const char* name) { int r; uv_file file; @@ -139,6 +145,19 @@ static void fs_event_cb_dir(uv_fs_event_t* handle, const char* filename, uv_close((uv_handle_t*)handle, close_cb); } +static void fs_event_cb_del_dir(uv_fs_event_t* handle, + const char* filename, + int events, + int status) { + ++fs_event_cb_called; + ASSERT_PTR_EQ(handle, &fs_event); + ASSERT_OK(status); + ASSERT(events == UV_CHANGE || events == UV_RENAME); + ASSERT_OK(strcmp(filename, "watch_del_dir")); + ASSERT_OK(uv_fs_event_stop(handle)); + uv_close((uv_handle_t*)handle, close_cb); +} + static const char* fs_event_get_filename(int i) { snprintf(fs_event_filename, sizeof(fs_event_filename), @@ -162,6 +181,15 @@ static void fs_event_create_files(uv_timer_t* handle) { } } +static void fs_event_del_dir(uv_timer_t* handle) { + int r; + + r = delete_dir("watch_del_dir"); + ASSERT_OK(r); + + uv_close((uv_handle_t*)handle, close_cb); +} + static void fs_event_unlink_files(uv_timer_t* handle) { int r; int i; @@ -170,7 +198,7 @@ static void fs_event_unlink_files(uv_timer_t* handle) { if (handle == NULL) { /* Unlink all files */ for (i = 0; i < 16; i++) { - r = remove(fs_event_get_filename(i)); + r = delete_file(fs_event_get_filename(i)); if (handle != NULL) ASSERT_OK(r); } @@ -179,7 +207,7 @@ static void fs_event_unlink_files(uv_timer_t* handle) { ASSERT_LT(fs_event_removed, fs_event_file_count); /* Remove the file */ - ASSERT_OK(remove(fs_event_get_filename(fs_event_removed))); + ASSERT_OK(delete_file(fs_event_get_filename(fs_event_removed))); if (++fs_event_removed < fs_event_file_count) { /* Remove another file on a different event loop tick. We do it this way @@ -197,12 +225,13 @@ static void fs_event_cb_dir_multi_file(uv_fs_event_t* handle, ASSERT_PTR_EQ(handle, &fs_event); ASSERT_OK(status); ASSERT(events == UV_CHANGE || events == UV_RENAME); - #if defined(__APPLE__) || defined(_WIN32) || defined(__linux__) - ASSERT_OK(strncmp(filename, file_prefix, sizeof(file_prefix) - 1)); - #else - ASSERT_NE(filename == NULL || - strncmp(filename, file_prefix, sizeof(file_prefix) - 1) == 0, 0); - #endif +#if defined(__APPLE__) || defined(_WIN32) || defined(__linux__) + ASSERT_NOT_NULL(filename); + ASSERT_MEM_EQ(filename, file_prefix, sizeof(file_prefix) - 1); +#else + if (filename != NULL) + ASSERT_MEM_EQ(filename, file_prefix, sizeof(file_prefix) - 1); +#endif if (fs_event_created + fs_event_removed == fs_event_file_count) { /* Once we've processed all create events, delete all files */ @@ -246,7 +275,7 @@ static void fs_event_unlink_files_in_subdir(uv_timer_t* handle) { if (handle == NULL) { /* Unlink all files */ for (i = 0; i < 16; i++) { - r = remove(fs_event_get_filename_in_subdir(i)); + r = delete_file(fs_event_get_filename_in_subdir(i)); if (handle != NULL) ASSERT_OK(r); } @@ -255,7 +284,7 @@ static void fs_event_unlink_files_in_subdir(uv_timer_t* handle) { ASSERT_LT(fs_event_removed, fs_event_file_count); /* Remove the file */ - ASSERT_OK(remove(fs_event_get_filename_in_subdir(fs_event_removed))); + ASSERT_OK(delete_file(fs_event_get_filename_in_subdir(fs_event_removed))); if (++fs_event_removed < fs_event_file_count) { /* Remove another file on a different event loop tick. We do it this way @@ -416,9 +445,9 @@ TEST_IMPL(fs_event_watch_dir) { /* Setup */ fs_event_unlink_files(NULL); - remove("watch_dir/file2"); - remove("watch_dir/file1"); - remove("watch_dir/"); + delete_file("watch_dir/file2"); + delete_file("watch_dir/file1"); + delete_dir("watch_dir/"); create_dir("watch_dir"); r = uv_fs_event_init(loop, &fs_event); @@ -437,9 +466,47 @@ TEST_IMPL(fs_event_watch_dir) { /* Cleanup */ fs_event_unlink_files(NULL); - remove("watch_dir/file2"); - remove("watch_dir/file1"); - remove("watch_dir/"); + delete_file("watch_dir/file2"); + delete_file("watch_dir/file1"); + delete_dir("watch_dir/"); + + MAKE_VALGRIND_HAPPY(loop); + return 0; +} + +TEST_IMPL(fs_event_watch_delete_dir) { +#if defined(NO_FS_EVENTS) + RETURN_SKIP(NO_FS_EVENTS); +#elif defined(__MVS__) + RETURN_SKIP("Directory watching not supported on this platform."); +#elif defined(__APPLE__) && defined(__TSAN__) + RETURN_SKIP("Times out under TSAN."); +#endif + + uv_loop_t* loop = uv_default_loop(); + int r; + + /* Setup */ + fs_event_unlink_files(NULL); + delete_dir("watch_del_dir/"); + create_dir("watch_del_dir"); + + r = uv_fs_event_init(loop, &fs_event); + ASSERT_OK(r); + r = uv_fs_event_start(&fs_event, fs_event_cb_del_dir, "watch_del_dir", 0); + ASSERT_OK(r); + r = uv_timer_init(loop, &timer); + ASSERT_OK(r); + r = uv_timer_start(&timer, fs_event_del_dir, 100, 0); + ASSERT_OK(r); + + uv_run(loop, UV_RUN_DEFAULT); + + ASSERT_EQ(1, fs_event_cb_called); + ASSERT_EQ(2, close_cb_called); + + /* Cleanup */ + fs_event_unlink_files(NULL); MAKE_VALGRIND_HAPPY(loop); return 0; @@ -457,10 +524,10 @@ TEST_IMPL(fs_event_watch_dir_recursive) { /* Setup */ loop = uv_default_loop(); fs_event_unlink_files(NULL); - remove("watch_dir/file2"); - remove("watch_dir/file1"); - remove("watch_dir/subdir"); - remove("watch_dir/"); + delete_file("watch_dir/file2"); + delete_file("watch_dir/file1"); + delete_dir("watch_dir/subdir"); + delete_dir("watch_dir/"); create_dir("watch_dir"); create_dir("watch_dir/subdir"); @@ -500,10 +567,10 @@ TEST_IMPL(fs_event_watch_dir_recursive) { /* Cleanup */ fs_event_unlink_files_in_subdir(NULL); - remove("watch_dir/file2"); - remove("watch_dir/file1"); - remove("watch_dir/subdir"); - remove("watch_dir/"); + delete_file("watch_dir/file2"); + delete_file("watch_dir/file1"); + delete_dir("watch_dir/subdir"); + delete_dir("watch_dir/"); MAKE_VALGRIND_HAPPY(loop); return 0; @@ -521,8 +588,8 @@ TEST_IMPL(fs_event_watch_dir_short_path) { /* Setup */ loop = uv_default_loop(); - remove("watch_dir/file1"); - remove("watch_dir/"); + delete_file("watch_dir/file1"); + delete_dir("watch_dir/"); create_dir("watch_dir"); create_file("watch_dir/file1"); @@ -549,8 +616,8 @@ TEST_IMPL(fs_event_watch_dir_short_path) { } /* Cleanup */ - remove("watch_dir/file1"); - remove("watch_dir/"); + delete_file("watch_dir/file1"); + delete_dir("watch_dir/"); MAKE_VALGRIND_HAPPY(loop); @@ -571,9 +638,9 @@ TEST_IMPL(fs_event_watch_file) { int r; /* Setup */ - remove("watch_dir/file2"); - remove("watch_dir/file1"); - remove("watch_dir/"); + delete_file("watch_dir/file2"); + delete_file("watch_dir/file1"); + delete_dir("watch_dir/"); create_dir("watch_dir"); create_file("watch_dir/file1"); create_file("watch_dir/file2"); @@ -594,9 +661,9 @@ TEST_IMPL(fs_event_watch_file) { ASSERT_EQ(2, close_cb_called); /* Cleanup */ - remove("watch_dir/file2"); - remove("watch_dir/file1"); - remove("watch_dir/"); + delete_file("watch_dir/file2"); + delete_file("watch_dir/file1"); + delete_dir("watch_dir/"); MAKE_VALGRIND_HAPPY(loop); return 0; @@ -618,9 +685,9 @@ TEST_IMPL(fs_event_watch_file_exact_path) { loop = uv_default_loop(); /* Setup */ - remove("watch_dir/file.js"); - remove("watch_dir/file.jsx"); - remove("watch_dir/"); + delete_file("watch_dir/file.js"); + delete_file("watch_dir/file.jsx"); + delete_dir("watch_dir/"); create_dir("watch_dir"); create_file("watch_dir/file.js"); create_file("watch_dir/file.jsx"); @@ -647,9 +714,9 @@ TEST_IMPL(fs_event_watch_file_exact_path) { ASSERT_EQ(2, timer_cb_exact_called); /* Cleanup */ - remove("watch_dir/file.js"); - remove("watch_dir/file.jsx"); - remove("watch_dir/"); + delete_file("watch_dir/file.js"); + delete_file("watch_dir/file.jsx"); + delete_dir("watch_dir/"); MAKE_VALGRIND_HAPPY(loop); return 0; @@ -690,7 +757,7 @@ TEST_IMPL(fs_event_watch_file_current_dir) { loop = uv_default_loop(); /* Setup */ - remove("watch_file"); + delete_file("watch_file"); create_file("watch_file"); #if defined(__APPLE__) && !defined(MAC_OS_X_VERSION_10_12) /* Empirically, kevent seems to (sometimes) report the preceding @@ -728,7 +795,7 @@ TEST_IMPL(fs_event_watch_file_current_dir) { ASSERT_EQ(1, close_cb_called); /* Cleanup */ - remove("watch_file"); + delete_file("watch_file"); MAKE_VALGRIND_HAPPY(loop); return 0; @@ -770,8 +837,8 @@ TEST_IMPL(fs_event_no_callback_after_close) { int r; /* Setup */ - remove("watch_dir/file1"); - remove("watch_dir/"); + delete_file("watch_dir/file1"); + delete_dir("watch_dir/"); create_dir("watch_dir"); create_file("watch_dir/file1"); @@ -792,8 +859,8 @@ TEST_IMPL(fs_event_no_callback_after_close) { ASSERT_EQ(1, close_cb_called); /* Cleanup */ - remove("watch_dir/file1"); - remove("watch_dir/"); + delete_file("watch_dir/file1"); + delete_dir("watch_dir/"); MAKE_VALGRIND_HAPPY(loop); return 0; @@ -808,8 +875,8 @@ TEST_IMPL(fs_event_no_callback_on_close) { int r; /* Setup */ - remove("watch_dir/file1"); - remove("watch_dir/"); + delete_file("watch_dir/file1"); + delete_dir("watch_dir/"); create_dir("watch_dir"); create_file("watch_dir/file1"); @@ -829,8 +896,8 @@ TEST_IMPL(fs_event_no_callback_on_close) { ASSERT_EQ(1, close_cb_called); /* Cleanup */ - remove("watch_dir/file1"); - remove("watch_dir/"); + delete_file("watch_dir/file1"); + delete_dir("watch_dir/"); MAKE_VALGRIND_HAPPY(loop); return 0; @@ -902,8 +969,8 @@ TEST_IMPL(fs_event_close_with_pending_event) { ASSERT_EQ(1, close_cb_called); /* Clean up */ - remove("watch_dir/file"); - remove("watch_dir/"); + delete_file("watch_dir/file"); + delete_dir("watch_dir/"); MAKE_VALGRIND_HAPPY(loop); return 0; @@ -927,7 +994,7 @@ TEST_IMPL(fs_event_close_with_pending_delete_event) { ASSERT_OK(r); /* Generate an fs event. */ - remove("watch_dir/file"); + delete_file("watch_dir/file"); /* Allow time for the remove event to propagate to the pending list. */ /* XXX - perhaps just for __sun? */ @@ -941,7 +1008,7 @@ TEST_IMPL(fs_event_close_with_pending_delete_event) { ASSERT_EQ(1, close_cb_called); /* Clean up */ - remove("watch_dir/"); + delete_dir("watch_dir/"); MAKE_VALGRIND_HAPPY(loop); return 0; @@ -984,7 +1051,7 @@ TEST_IMPL(fs_event_close_in_callback) { /* Clean up */ fs_event_unlink_files(NULL); - remove("watch_dir/"); + delete_dir("watch_dir/"); MAKE_VALGRIND_HAPPY(loop); return 0; @@ -1020,7 +1087,7 @@ TEST_IMPL(fs_event_start_and_close) { ASSERT_EQ(2, close_cb_called); - remove("watch_dir/"); + delete_dir("watch_dir/"); MAKE_VALGRIND_HAPPY(loop); return 0; } @@ -1073,111 +1140,11 @@ TEST_IMPL(fs_event_getpath) { close_cb_called = 0; } - remove("watch_dir/"); + delete_dir("watch_dir/"); MAKE_VALGRIND_HAPPY(loop); return 0; } -#if defined(__APPLE__) - -static int fs_event_error_reported; - -static void fs_event_error_report_cb(uv_fs_event_t* handle, - const char* filename, - int events, - int status) { - if (status != 0) - fs_event_error_reported = status; -} - -static void timer_cb_nop(uv_timer_t* handle) { - ++timer_cb_called; - uv_close((uv_handle_t*) handle, close_cb); -} - -static void fs_event_error_report_close_cb(uv_handle_t* handle) { - ASSERT_NOT_NULL(handle); - close_cb_called++; - - /* handle is allocated on-stack, no need to free it */ -} - - -TEST_IMPL(fs_event_error_reporting) { - unsigned int i; - uv_loop_t loops[1024]; - uv_fs_event_t events[ARRAY_SIZE(loops)]; - uv_loop_t* loop; - uv_fs_event_t* event; - - TEST_FILE_LIMIT(ARRAY_SIZE(loops) * 3); - - remove("watch_dir/"); - create_dir("watch_dir"); - - /* Create a lot of loops, and start FSEventStream in each of them. - * Eventually, this should create enough streams to make FSEventStreamStart() - * fail. - */ - for (i = 0; i < ARRAY_SIZE(loops); i++) { - loop = &loops[i]; - ASSERT_OK(uv_loop_init(loop)); - event = &events[i]; - - timer_cb_called = 0; - close_cb_called = 0; - ASSERT_OK(uv_fs_event_init(loop, event)); - ASSERT_OK(uv_fs_event_start(event, - fs_event_error_report_cb, - "watch_dir", - 0)); - uv_unref((uv_handle_t*) event); - - /* Let loop run for some time */ - ASSERT_OK(uv_timer_init(loop, &timer)); - ASSERT_OK(uv_timer_start(&timer, timer_cb_nop, 2, 0)); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT_EQ(1, timer_cb_called); - ASSERT_EQ(1, close_cb_called); - if (fs_event_error_reported != 0) - break; - } - - /* At least one loop should fail */ - ASSERT_EQ(fs_event_error_reported, UV_EMFILE); - - /* Stop and close all events, and destroy loops */ - do { - loop = &loops[i]; - event = &events[i]; - - ASSERT_OK(uv_fs_event_stop(event)); - uv_ref((uv_handle_t*) event); - uv_close((uv_handle_t*) event, fs_event_error_report_close_cb); - - close_cb_called = 0; - uv_run(loop, UV_RUN_DEFAULT); - ASSERT_EQ(1, close_cb_called); - - uv_loop_close(loop); - } while (i-- != 0); - - remove("watch_dir/"); - MAKE_VALGRIND_HAPPY(uv_default_loop()); - return 0; -} - -#else /* !defined(__APPLE__) */ - -TEST_IMPL(fs_event_error_reporting) { - /* No-op, needed only for FSEvents backend */ - - MAKE_VALGRIND_HAPPY(uv_default_loop()); - return 0; -} - -#endif /* defined(__APPLE__) */ - TEST_IMPL(fs_event_watch_invalid_path) { #if defined(NO_FS_EVENTS) RETURN_SKIP(NO_FS_EVENTS); @@ -1216,7 +1183,7 @@ TEST_IMPL(fs_event_stop_in_cb) { RETURN_SKIP(NO_FS_EVENTS); #endif - remove(path); + delete_file(path); create_file(path); ASSERT_OK(uv_fs_event_init(uv_default_loop(), &fs)); @@ -1239,7 +1206,7 @@ TEST_IMPL(fs_event_stop_in_cb) { ASSERT_OK(uv_run(uv_default_loop(), UV_RUN_DEFAULT)); ASSERT_EQ(1, fs_event_cb_stop_calls); - remove(path); + delete_file(path); MAKE_VALGRIND_HAPPY(uv_default_loop()); return 0; diff --git a/deps/uv/test/test-fs-readdir.c b/deps/uv/test/test-fs-readdir.c index 0f2b4afa58c589..bacea653587c51 100644 --- a/deps/uv/test/test-fs-readdir.c +++ b/deps/uv/test/test-fs-readdir.c @@ -29,6 +29,7 @@ static uv_fs_t readdir_req; static uv_fs_t closedir_req; static uv_dirent_t dirents[1]; +static uv_dirent_t symlink_dirents[2]; static int empty_opendir_cb_count; static int empty_closedir_cb_count; @@ -460,3 +461,88 @@ TEST_IMPL(fs_readdir_non_empty_dir) { MAKE_VALGRIND_HAPPY(uv_default_loop()); return 0; } + +static void readdir_symlink_readdir_cb(uv_fs_t* req) { + uv_dir_t* dir; + + ASSERT_PTR_EQ(req, &readdir_req); + ASSERT_EQ(req->fs_type, UV_FS_READDIR); + dir = req->ptr; + + if (req->result == 0) { + uv_fs_req_cleanup(req); + ASSERT_EQ(3, non_empty_readdir_cb_count); + uv_fs_closedir(uv_default_loop(), + &closedir_req, + dir, + non_empty_closedir_cb); + } else { + if (strcmp(symlink_dirents[0].name, "test_symlink") == 0) { + ASSERT_EQ(symlink_dirents[0].type, UV_DIRENT_LINK); + } else { + ASSERT_EQ(symlink_dirents[1].type, UV_DIRENT_LINK); + } + uv_fs_req_cleanup(req); + } +} + +static void readdir_symlink_opendir_cb(uv_fs_t* req) { + uv_dir_t* dir; + int r; + + ASSERT_PTR_EQ(req, &opendir_req); + ASSERT_EQ(req->fs_type, UV_FS_OPENDIR); + ASSERT_OK(req->result); + ASSERT_NOT_NULL(req->ptr); + + dir = req->ptr; + dir->dirents = symlink_dirents; + dir->nentries = ARRAY_SIZE(symlink_dirents); + + r = uv_fs_readdir(uv_default_loop(), + &readdir_req, + dir, + readdir_symlink_readdir_cb); + ASSERT_OK(r); + uv_fs_req_cleanup(req); +} + +static void cleanup_symlink_test_files(void) { + uv_fs_t req; + + uv_fs_rmdir(NULL, &req, "test_symlink_dir/test_subdir", NULL); + uv_fs_req_cleanup(&req); + uv_fs_unlink(NULL, &req, "test_symlink_dir/test_symlink", NULL); + uv_fs_req_cleanup(&req); + uv_fs_rmdir(NULL, &req, "test_symlink_dir", NULL); + uv_fs_req_cleanup(&req); +} + +TEST_IMPL(fs_readdir_symlink) { + + uv_fs_t mkdir_req; + uv_fs_t symlink_req; + int r; + + cleanup_symlink_test_files(); + + r = uv_fs_mkdir(uv_default_loop(), &mkdir_req, "test_symlink_dir", 0755, NULL); + ASSERT_OK(r); + + r = uv_fs_mkdir(uv_default_loop(), &mkdir_req, "test_symlink_dir/test_subdir", 0755, NULL); + ASSERT_OK(r); + + r = uv_fs_symlink(uv_default_loop(), &symlink_req, "test_symlink_dir/test_subdir", "test_symlink_dir/test_symlink", UV_FS_SYMLINK_DIR, NULL); + ASSERT_OK(r); + + r = uv_fs_opendir(uv_default_loop(), &opendir_req, "test_symlink_dir", readdir_symlink_opendir_cb); + ASSERT_OK(r); + + r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); + ASSERT_OK(r); + + cleanup_symlink_test_files(); + + MAKE_VALGRIND_HAPPY(uv_default_loop()); + return 0; +} diff --git a/deps/uv/test/test-fs.c b/deps/uv/test/test-fs.c index fe78117bbeddc0..ff0f9fc89a2d1b 100644 --- a/deps/uv/test/test-fs.c +++ b/deps/uv/test/test-fs.c @@ -104,6 +104,7 @@ static uv_loop_t* loop; static uv_fs_t open_req1; static uv_fs_t open_req2; +static uv_fs_t open_req_noclose; static uv_fs_t read_req; static uv_fs_t write_req; static uv_fs_t unlink_req; @@ -304,7 +305,7 @@ static void chown_root_cb(uv_fs_t* req) { ASSERT_EQ(req->result, UV_EINVAL); # elif defined(__PASE__) /* On IBMi PASE, there is no root user. uid 0 is user qsecofr. - * User may grant qsecofr's privileges, including changing + * User may grant qsecofr's privileges, including changing * the file's ownership to uid 0. */ ASSERT(req->result == 0 || req->result == UV_EPERM); @@ -1067,6 +1068,50 @@ TEST_IMPL(fs_file_sync) { return 0; } +TEST_IMPL(fs_posix_delete) { + int r; + + /* Setup. */ + unlink("test_dir/file"); + rmdir("test_dir"); + + r = uv_fs_mkdir(NULL, &mkdir_req, "test_dir", 0755, NULL); + ASSERT_OK(r); + + r = uv_fs_open(NULL, &open_req_noclose, "test_dir/file", UV_FS_O_WRONLY | UV_FS_O_CREAT, S_IWUSR | S_IRUSR, NULL); + ASSERT_GE(r, 0); + uv_fs_req_cleanup(&open_req_noclose); + + /* should not be possible to delete the non-empty dir */ + r = uv_fs_rmdir(NULL, &rmdir_req, "test_dir", NULL); + ASSERT((r == UV_ENOTEMPTY) || (r == UV_EEXIST)); + ASSERT_EQ(r, rmdir_req.result); + uv_fs_req_cleanup(&rmdir_req); + + r = uv_fs_rmdir(NULL, &rmdir_req, "test_dir/file", NULL); + ASSERT((r == UV_ENOTDIR) || (r == UV_ENOENT)); + ASSERT_EQ(r, rmdir_req.result); + uv_fs_req_cleanup(&rmdir_req); + + r = uv_fs_unlink(NULL, &unlink_req, "test_dir/file", NULL); + ASSERT_OK(r); + ASSERT_OK(unlink_req.result); + uv_fs_req_cleanup(&unlink_req); + + /* delete the dir while the file is still open, which should succeed on posix */ + r = uv_fs_rmdir(NULL, &rmdir_req, "test_dir", NULL); + ASSERT_OK(r); + ASSERT_OK(rmdir_req.result); + uv_fs_req_cleanup(&rmdir_req); + + /* Cleanup */ + r = uv_fs_close(NULL, &close_req, open_req_noclose.result, NULL); + ASSERT_OK(r); + uv_fs_req_cleanup(&close_req); + + MAKE_VALGRIND_HAPPY(uv_default_loop()); + return 0; +} static void fs_file_write_null_buffer(int add_flags) { int r; diff --git a/deps/uv/test/test-homedir.c b/deps/uv/test/test-homedir.c index 769d5c8179fc77..e335540d106dec 100644 --- a/deps/uv/test/test-homedir.c +++ b/deps/uv/test/test-homedir.c @@ -68,5 +68,14 @@ TEST_IMPL(homedir) { r = uv_os_homedir(homedir, &len); ASSERT_EQ(r, UV_EINVAL); +#ifdef _WIN32 + /* Test empty environment variable */ + r = uv_os_setenv("USERPROFILE", ""); + ASSERT_EQ(r, 0); + len = sizeof homedir; + r = uv_os_homedir(homedir, &len); + ASSERT_EQ(r, UV_ENOENT); +#endif + return 0; } diff --git a/deps/uv/test/test-iouring-pollhup.c b/deps/uv/test/test-iouring-pollhup.c new file mode 100644 index 00000000000000..342789aa7d9726 --- /dev/null +++ b/deps/uv/test/test-iouring-pollhup.c @@ -0,0 +1,111 @@ +/* Copyright libuv project contributors. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#include "uv.h" +#include "task.h" + +#ifdef _WIN32 + +TEST_IMPL(iouring_pollhup) { + RETURN_SKIP("Not on Windows."); +} + +#else /* !_WIN32 */ + +#include /* close() */ + +static uv_pipe_t p1; +static uv_pipe_t p2; +static uv_idle_t idle_handle; +static int iters; +static int duped_fd; +static int newpipefds[2]; + +static void alloc_buffer(uv_handle_t* handle, + size_t suggested_size, + uv_buf_t* buf) { + static char slab[32]; + *buf = uv_buf_init(slab, sizeof(slab)); +} + +static void read_data2(uv_stream_t* stream, + ssize_t nread, + const uv_buf_t* buf) { + if (nread < 0) { + ASSERT_EQ(nread, UV_EOF); + ASSERT_OK(close(duped_fd)); + duped_fd = -1; + uv_close((uv_handle_t*) &p2, NULL); + uv_close((uv_handle_t*) &idle_handle, NULL); + } else { + /* If nread == 0 is because of POLLHUP received still from pipefds[0] file + * description which is still referenced in duped_fd. It should not happen + * if close(p1) was called after EPOLL_CTL_DEL. + */ + ASSERT_GT(nread, 0); + } +} + +static void idle_cb(uv_idle_t* handle) { + if (++iters == 1) { + ASSERT_OK(uv_pipe_open(&p2, newpipefds[0])); + ASSERT_OK(uv_read_start((uv_stream_t*) &p2, alloc_buffer, read_data2)); + } else { + ASSERT_OK(uv_idle_stop(handle)); + ASSERT_OK(close(newpipefds[1])); + newpipefds[1] = -1; + } +} + +static void read_data(uv_stream_t* stream, + ssize_t nread, + const uv_buf_t* buf) { + ASSERT_EQ(nread, UV_EOF); + uv_close((uv_handle_t*) stream, NULL); + ASSERT_OK(uv_idle_start(&idle_handle, idle_cb)); +} + +TEST_IMPL(iouring_pollhup) { + uv_loop_t* loop; + int pipefds[2]; + + loop = uv_default_loop(); + ASSERT_OK(uv_pipe_init(loop, &p1, 0)); + ASSERT_OK(uv_pipe_init(loop, &p2, 0)); + ASSERT_OK(uv_idle_init(loop, &idle_handle)); + ASSERT_OK(pipe(pipefds)); + ASSERT_OK(pipe(newpipefds)); + + ASSERT_OK(uv_pipe_open(&p1, pipefds[0])); + duped_fd = dup(pipefds[0]); + ASSERT_NE(duped_fd, -1); + + ASSERT_OK(uv_read_start((uv_stream_t*) &p1, alloc_buffer, read_data)); + ASSERT_OK(close(pipefds[1])); /* Close write end, generate POLLHUP. */ + pipefds[1] = -1; + + ASSERT_OK(uv_run(loop, UV_RUN_DEFAULT)); + + MAKE_VALGRIND_HAPPY(uv_default_loop()); + return 0; +} + +#endif /* !_WIN32 */ diff --git a/deps/uv/test/test-list.h b/deps/uv/test/test-list.h index d30f02faa8515c..e07bd61ecf73c1 100644 --- a/deps/uv/test/test-list.h +++ b/deps/uv/test/test-list.h @@ -153,6 +153,7 @@ TEST_DECLARE (tcp_write_to_half_open_connection) TEST_DECLARE (tcp_unexpected_read) TEST_DECLARE (tcp_read_stop) TEST_DECLARE (tcp_read_stop_start) +TEST_DECLARE (tcp_reuseport) TEST_DECLARE (tcp_rst) TEST_DECLARE (tcp_bind6_error_addrinuse) TEST_DECLARE (tcp_bind6_error_addrnotavail) @@ -189,6 +190,7 @@ TEST_DECLARE (udp_open_twice) TEST_DECLARE (udp_open_bound) TEST_DECLARE (udp_open_connect) TEST_DECLARE (udp_recv_in_a_row) +TEST_DECLARE (udp_reuseport) #ifndef _WIN32 TEST_DECLARE (udp_send_unix) #endif @@ -207,6 +209,7 @@ TEST_DECLARE (pipe_connect_to_file) TEST_DECLARE (pipe_connect_on_prepare) TEST_DECLARE (pipe_getsockname) TEST_DECLARE (pipe_getsockname_abstract) +TEST_DECLARE (pipe_getsockname_autobind) TEST_DECLARE (pipe_getsockname_blocking) TEST_DECLARE (pipe_pending_instances) TEST_DECLARE (pipe_sendmsg) @@ -352,6 +355,7 @@ TEST_DECLARE (fs_file_nametoolong) TEST_DECLARE (fs_file_loop) TEST_DECLARE (fs_file_async) TEST_DECLARE (fs_file_sync) +TEST_DECLARE (fs_posix_delete) TEST_DECLARE (fs_file_write_null_buffer) TEST_DECLARE (fs_async_dir) TEST_DECLARE (fs_async_sendfile) @@ -393,6 +397,7 @@ TEST_DECLARE (fs_stat_missing_path) TEST_DECLARE (fs_read_bufs) TEST_DECLARE (fs_read_file_eof) TEST_DECLARE (fs_event_watch_dir) +TEST_DECLARE (fs_event_watch_delete_dir) TEST_DECLARE (fs_event_watch_dir_recursive) #ifdef _WIN32 TEST_DECLARE (fs_event_watch_dir_short_path) @@ -412,7 +417,6 @@ TEST_DECLARE (fs_event_close_with_pending_event) TEST_DECLARE (fs_event_close_with_pending_delete_event) TEST_DECLARE (fs_event_close_in_callback) TEST_DECLARE (fs_event_start_and_close) -TEST_DECLARE (fs_event_error_reporting) TEST_DECLARE (fs_event_getpath) TEST_DECLARE (fs_event_stop_in_cb) TEST_DECLARE (fs_scandir_empty_dir) @@ -424,6 +428,9 @@ TEST_DECLARE (fs_readdir_empty_dir) TEST_DECLARE (fs_readdir_file) TEST_DECLARE (fs_readdir_non_empty_dir) TEST_DECLARE (fs_readdir_non_existing_dir) +#ifdef _WIN32 +TEST_DECLARE (fs_readdir_symlink) +#endif TEST_DECLARE (fs_rename_to_existing_file) TEST_DECLARE (fs_write_multiple_bufs) TEST_DECLARE (fs_read_write_null_arguments) @@ -563,6 +570,8 @@ TEST_DECLARE (fork_threadpool_queue_work_simple) #endif #endif +TEST_DECLARE (iouring_pollhup) + TEST_DECLARE (idna_toascii) TEST_DECLARE (utf8_decode1) TEST_DECLARE (utf8_decode1_overrun) @@ -763,6 +772,8 @@ TASK_LIST_START TEST_ENTRY (tcp_read_stop_start) + TEST_ENTRY (tcp_reuseport) + TEST_ENTRY (tcp_rst) TEST_HELPER (tcp_rst, tcp4_echo_server) @@ -799,6 +810,7 @@ TASK_LIST_START TEST_ENTRY (udp_sendmmsg_error) TEST_ENTRY (udp_try_send) TEST_ENTRY (udp_recv_in_a_row) + TEST_ENTRY (udp_reuseport) TEST_ENTRY (udp_open) TEST_ENTRY (udp_open_twice) @@ -818,6 +830,7 @@ TASK_LIST_START TEST_ENTRY (pipe_overlong_path) TEST_ENTRY (pipe_getsockname) TEST_ENTRY (pipe_getsockname_abstract) + TEST_ENTRY (pipe_getsockname_autobind) TEST_ENTRY (pipe_getsockname_blocking) TEST_ENTRY (pipe_pending_instances) TEST_ENTRY (pipe_sendmsg) @@ -1055,6 +1068,7 @@ TASK_LIST_START TEST_ENTRY (fs_file_loop) TEST_ENTRY (fs_file_async) TEST_ENTRY (fs_file_sync) + TEST_ENTRY (fs_posix_delete) TEST_ENTRY (fs_file_write_null_buffer) TEST_ENTRY (fs_async_dir) TEST_ENTRY (fs_async_sendfile) @@ -1096,6 +1110,7 @@ TASK_LIST_START TEST_ENTRY (fs_read_file_eof) TEST_ENTRY (fs_file_open_append) TEST_ENTRY (fs_event_watch_dir) + TEST_ENTRY (fs_event_watch_delete_dir) TEST_ENTRY (fs_event_watch_dir_recursive) #ifdef _WIN32 TEST_ENTRY (fs_event_watch_dir_short_path) @@ -1115,7 +1130,6 @@ TASK_LIST_START TEST_ENTRY (fs_event_close_with_pending_delete_event) TEST_ENTRY (fs_event_close_in_callback) TEST_ENTRY (fs_event_start_and_close) - TEST_ENTRY_CUSTOM (fs_event_error_reporting, 0, 0, 60000) TEST_ENTRY (fs_event_getpath) TEST_ENTRY (fs_event_stop_in_cb) TEST_ENTRY (fs_scandir_empty_dir) @@ -1127,6 +1141,9 @@ TASK_LIST_START TEST_ENTRY (fs_readdir_file) TEST_ENTRY (fs_readdir_non_empty_dir) TEST_ENTRY (fs_readdir_non_existing_dir) +#ifdef _WIN32 + TEST_ENTRY (fs_readdir_symlink) +#endif TEST_ENTRY (fs_rename_to_existing_file) TEST_ENTRY (fs_write_multiple_bufs) TEST_ENTRY (fs_write_alotof_bufs) @@ -1204,6 +1221,8 @@ TASK_LIST_START #endif #endif + TEST_ENTRY (iouring_pollhup) + TEST_ENTRY (utf8_decode1) TEST_ENTRY (utf8_decode1_overrun) TEST_ENTRY (uname) diff --git a/deps/uv/test/test-pipe-bind-error.c b/deps/uv/test/test-pipe-bind-error.c index 412f23aedb0a01..16164a7ee9034b 100644 --- a/deps/uv/test/test-pipe-bind-error.c +++ b/deps/uv/test/test-pipe-bind-error.c @@ -172,19 +172,36 @@ TEST_IMPL(pipe_overlong_path) { #ifndef _WIN32 char path[512]; memset(path, '@', sizeof(path)); + + /* On most platforms sun_path is smaller than the NAME_MAX + * Though there is nothing in the POSIX spec that says it needs to be. + * POSIX allows PATH_MAX length paths in saddr.sun_path BUT individual + * components of the path can only be NAME_MAX long. + * So in this case we end up with UV_ENAMETOOLONG error rather than + * UV_EINVAL. + * ref: https://github.com/libuv/libuv/issues/4231#issuecomment-2194612711 + * On AIX the sun_path is larger than the NAME_MAX + */ +#if defined(_AIX) && !defined(__PASE__) + ASSERT_EQ(UV_ENAMETOOLONG, + uv_pipe_bind2(&pipe, path, sizeof(path), UV_PIPE_NO_TRUNCATE)); + /* UV_ENAMETOOLONG is delayed in uv_pipe_connect2 and won't propagate until + * uv_run is called and causes timeouts, therefore in this case we skip calling + * uv_pipe_connect2 + */ +#else ASSERT_EQ(UV_EINVAL, - uv_pipe_bind2(&pipe, path, sizeof(path), UV_PIPE_NO_TRUNCATE)); + uv_pipe_bind2(&pipe, path, sizeof(path), UV_PIPE_NO_TRUNCATE)); ASSERT_EQ(UV_EINVAL, - uv_pipe_connect2(&req, - &pipe, - path, - sizeof(path), - UV_PIPE_NO_TRUNCATE, - (uv_connect_cb) abort)); + uv_pipe_connect2(&req, + &pipe, + path, + sizeof(path), + UV_PIPE_NO_TRUNCATE, + (uv_connect_cb) abort)); ASSERT_OK(uv_run(uv_default_loop(), UV_RUN_DEFAULT)); -#endif - - ASSERT_EQ(UV_EINVAL, uv_pipe_bind(&pipe, "")); +#endif /*if defined(_AIX) && !defined(__PASE__)*/ +#endif /* ifndef _WIN32 */ uv_pipe_connect(&req, &pipe, "", @@ -195,5 +212,4 @@ TEST_IMPL(pipe_overlong_path) { MAKE_VALGRIND_HAPPY(uv_default_loop()); return 0; - } diff --git a/deps/uv/test/test-pipe-getsockname.c b/deps/uv/test/test-pipe-getsockname.c index d76b6ad4917021..34b572343c698a 100644 --- a/deps/uv/test/test-pipe-getsockname.c +++ b/deps/uv/test/test-pipe-getsockname.c @@ -78,6 +78,36 @@ static void pipe_client_connect_cb(uv_connect_t* req, int status) { } +#if defined(__linux__) +/* Socket name looks like \0[0-9a-f]{5}, e.g. "\0bad42" */ +static void check_is_autobind_abstract_socket_name(const char *p, size_t len) { + ASSERT_EQ(len, 6); + ASSERT_EQ(*p, '\0'); + + while (*p != '\0') { + ASSERT((*p >= '0' && *p <= '9') || (*p >= 'a' && *p <= 'f')); + p++; + } +} + + +static void pipe_client_autobind_connect_cb(uv_connect_t* req, int status) { + char buf[16]; + size_t len; + + ASSERT_OK(status); + len = 5; + ASSERT_EQ(UV_ENOBUFS, uv_pipe_getpeername(&pipe_client, buf, &len)); + len = 6; + ASSERT_OK(uv_pipe_getpeername(&pipe_client, buf, &len)); + check_is_autobind_abstract_socket_name(buf, len); + pipe_client_connect_cb_called++; + uv_close((uv_handle_t*) &pipe_client, pipe_close_cb); + uv_close((uv_handle_t*) &pipe_server, pipe_close_cb); +} +#endif /* defined(__linux__) */ + + static void pipe_server_connection_cb(uv_stream_t* handle, int status) { /* This function *may* be called, depending on whether accept or the * connection callback is called first. @@ -124,9 +154,11 @@ TEST_IMPL(pipe_getsockname) { ASSERT_STR_EQ(pipe_server.pipe_fname, TEST_PIPENAME); #endif - len = sizeof buf; - r = uv_pipe_getsockname(&pipe_server, buf, &len); - ASSERT_OK(r); + len = sizeof(TEST_PIPENAME) - 1; + ASSERT_EQ(UV_ENOBUFS, uv_pipe_getsockname(&pipe_server, buf, &len)); + + len = sizeof(TEST_PIPENAME); + ASSERT_OK(uv_pipe_getsockname(&pipe_server, buf, &len)); ASSERT_NE(0, buf[len - 1]); ASSERT_EQ(buf[len], '\0'); @@ -160,7 +192,8 @@ TEST_IMPL(pipe_getsockname) { len = sizeof buf; r = uv_pipe_getsockname(&pipe_client, buf, &len); - ASSERT(r == 0 && len == 0); + ASSERT_EQ(r, 0); + ASSERT_EQ(len, 0); len = sizeof buf; r = uv_pipe_getpeername(&pipe_client, buf, &len); @@ -228,6 +261,44 @@ TEST_IMPL(pipe_getsockname_abstract) { #endif } + +TEST_IMPL(pipe_getsockname_autobind) { +#if defined(__linux__) + char buf[256]; + size_t buflen; + + buflen = sizeof(buf); + memset(buf, 0, sizeof(buf)); + ASSERT_OK(uv_pipe_init(uv_default_loop(), &pipe_server, 0)); + ASSERT_OK(uv_pipe_bind2(&pipe_server, "", 0, 0)); + ASSERT_OK(uv_pipe_getsockname(&pipe_server, buf, &buflen)); + check_is_autobind_abstract_socket_name(buf, buflen); + ASSERT_OK(uv_listen((uv_stream_t*) &pipe_server, 0, + pipe_server_connection_cb)); + ASSERT_OK(uv_pipe_init(uv_default_loop(), &pipe_client, 0)); + ASSERT_OK(uv_pipe_connect2(&connect_req, &pipe_client, + buf, + 1 + strlen(&buf[1]), + 0, + pipe_client_autobind_connect_cb)); + ASSERT_OK(uv_run(uv_default_loop(), UV_RUN_DEFAULT)); + ASSERT_EQ(1, pipe_client_connect_cb_called); + ASSERT_EQ(2, pipe_close_cb_called); + MAKE_VALGRIND_HAPPY(uv_default_loop()); + return 0; +#else + /* On other platforms it should simply fail with UV_EINVAL. */ + ASSERT_OK(uv_pipe_init(uv_default_loop(), &pipe_server, 0)); + ASSERT_EQ(UV_EINVAL, uv_pipe_bind2(&pipe_server, "", 0, 0)); + uv_close((uv_handle_t*) &pipe_server, pipe_close_cb); + ASSERT_OK(uv_run(uv_default_loop(), UV_RUN_DEFAULT)); + ASSERT_EQ(1, pipe_close_cb_called); + MAKE_VALGRIND_HAPPY(uv_default_loop()); + return 0; +#endif +} + + TEST_IMPL(pipe_getsockname_blocking) { #ifdef _WIN32 HANDLE readh, writeh; diff --git a/deps/uv/test/test-platform-output.c b/deps/uv/test/test-platform-output.c index f18e097f913607..4e5300da037399 100644 --- a/deps/uv/test/test-platform-output.c +++ b/deps/uv/test/test-platform-output.c @@ -90,6 +90,45 @@ TEST_IMPL(platform_output) { ASSERT_GE(par, 1); printf("uv_available_parallelism: %u\n", par); +#ifdef __linux__ + FILE* file; + int cgroup_version = 0; + unsigned int cgroup_par = 0; + uint64_t quota, period; + + // Attempt to parse cgroup v2 to deduce parallelism constraints + file = fopen("/sys/fs/cgroup/cpu.max", "r"); + if (file) { + if (fscanf(file, "%lu %lu", "a, &period) == 2 && quota > 0) { + cgroup_version = 2; + cgroup_par = (unsigned int)(quota / period); + } + fclose(file); + } + + // If cgroup v2 wasn't present, try parsing cgroup v1 + if (cgroup_version == 0) { + file = fopen("/sys/fs/cgroup/cpu,cpuacct/cpu.cfs_quota_us", "r"); + if (file) { + if (fscanf(file, "%lu", "a) == 1 && quota > 0 && quota < ~0ULL) { + fclose(file); + file = fopen("/sys/fs/cgroup/cpu,cpuacct/cpu.cfs_period_us", "r"); + if (file && fscanf(file, "%lu", &period) == 1) { + cgroup_version = 1; + cgroup_par = (unsigned int)(quota / period); + } + } + if (file) fclose(file); + } + } + + // If we found cgroup parallelism constraints, assert and print them + if (cgroup_par > 0) { + ASSERT_GE(par, cgroup_par); + printf("cgroup v%d available parallelism: %u\n", cgroup_version, cgroup_par); + } +#endif + err = uv_cpu_info(&cpus, &count); #if defined(__CYGWIN__) || defined(__MSYS__) ASSERT_EQ(err, UV_ENOSYS); diff --git a/deps/uv/test/test-poll.c b/deps/uv/test/test-poll.c index fcd644f2c2563b..5161de253768d8 100644 --- a/deps/uv/test/test-poll.c +++ b/deps/uv/test/test-poll.c @@ -626,26 +626,59 @@ TEST_IMPL(poll_unidirectional) { /* Windows won't let you open a directory so we open a file instead. - * OS X lets you poll a file so open the $PWD instead. Both fail - * on Linux so it doesn't matter which one we pick. Both succeed - * on FreeBSD, Solaris and AIX so skip the test on those platforms. + * OS X lets you poll a file so open the $PWD instead. Both fail + * on Linux so it doesn't matter which one we pick. Both succeed + * on Solaris and AIX so skip the test on those platforms. + * On *BSD/Darwin, we disallow polling of regular files, directories. + * In addition to regular files, we also disallow FIFOs on Darwin. */ +#ifdef __APPLE__ +#define TEST_POLL_FIFO_PATH "/tmp/uv-test-poll-fifo" +#endif TEST_IMPL(poll_bad_fdtype) { -#if !defined(__DragonFly__) && !defined(__FreeBSD__) && !defined(__sun) && \ +#if !defined(__sun) && \ !defined(_AIX) && !defined(__MVS__) && \ - !defined(__OpenBSD__) && !defined(__CYGWIN__) && !defined(__MSYS__) && \ - !defined(__NetBSD__) + !defined(__CYGWIN__) && !defined(__MSYS__) uv_poll_t poll_handle; - int fd; + int fd[2]; #if defined(_WIN32) - fd = _open("test/fixtures/empty_file", UV_FS_O_RDONLY); + fd[0] = _open("test/fixtures/empty_file", UV_FS_O_RDONLY); #else - fd = open(".", UV_FS_O_RDONLY); + fd[0] = open(".", UV_FS_O_RDONLY); +#endif + ASSERT_NE(fd[0], -1); + ASSERT_NE(0, uv_poll_init(uv_default_loop(), &poll_handle, fd[0])); + ASSERT_OK(close(fd[0])); +#if defined(__APPLE__) || \ + defined(__DragonFly__) || \ + defined(__FreeBSD__) || \ + defined(__OpenBSD__) || \ + defined(__NetBSD__) + fd[0] = open("test/fixtures/empty_file", UV_FS_O_RDONLY); + ASSERT_NE(fd[0], -1); + /* Regular files should be banned from kqueue. */ + ASSERT_NE(0, uv_poll_init(uv_default_loop(), &poll_handle, fd[0])); + ASSERT_OK(close(fd[0])); +#ifdef __APPLE__ + ASSERT_OK(pipe(fd)); + /* Pipes should be permitted in kqueue. */ + ASSERT_EQ(0, uv_poll_init(uv_default_loop(), &poll_handle, fd[0])); + ASSERT_OK(close(fd[0])); + ASSERT_OK(close(fd[1])); + + ASSERT_OK(mkfifo(TEST_POLL_FIFO_PATH, 0600)); + fd[0] = open(TEST_POLL_FIFO_PATH, O_RDONLY | O_NONBLOCK); + ASSERT_NE(fd[0], -1); + fd[1] = open(TEST_POLL_FIFO_PATH, O_WRONLY | O_NONBLOCK); + ASSERT_NE(fd[1], -1); + /* FIFOs should be banned from kqueue. */ + ASSERT_NE(0, uv_poll_init(uv_default_loop(), &poll_handle, fd[0])); + ASSERT_OK(close(fd[0])); + ASSERT_OK(close(fd[1])); + unlink(TEST_POLL_FIFO_PATH); +#endif #endif - ASSERT_NE(fd, -1); - ASSERT_NE(0, uv_poll_init(uv_default_loop(), &poll_handle, fd)); - ASSERT_OK(close(fd)); #endif MAKE_VALGRIND_HAPPY(uv_default_loop()); diff --git a/deps/uv/test/test-ref.c b/deps/uv/test/test-ref.c index dbe94f7168b18d..7a2c33790ab177 100644 --- a/deps/uv/test/test-ref.c +++ b/deps/uv/test/test-ref.c @@ -63,7 +63,7 @@ static void fail_cb2(void) { } -static void req_cb(uv_handle_t* req, int status) { +static void req_cb(uv_udp_send_t* req, int status) { req_cb_called++; } @@ -334,7 +334,7 @@ TEST_IMPL(udp_ref3) { &buf, 1, (const struct sockaddr*) &addr, - (uv_udp_send_cb) req_cb); + req_cb); uv_unref((uv_handle_t*)&h); uv_run(uv_default_loop(), UV_RUN_DEFAULT); ASSERT_EQ(1, req_cb_called); diff --git a/deps/uv/test/test-spawn.c b/deps/uv/test/test-spawn.c index 6a848747036405..efbb2395ff8b2b 100644 --- a/deps/uv/test/test-spawn.c +++ b/deps/uv/test/test-spawn.c @@ -1054,7 +1054,7 @@ TEST_IMPL(kill) { sigaddset(&set, SIGTERM); ASSERT_OK(pthread_sigmask(SIG_BLOCK, &set, NULL)); } - ASSERT_NE(SIG_ERR, signal(SIGTERM, SIG_IGN)); + ASSERT_PTR_NE(SIG_ERR, signal(SIGTERM, SIG_IGN)); #endif r = uv_spawn(uv_default_loop(), &process, &options); @@ -1067,7 +1067,7 @@ TEST_IMPL(kill) { sigaddset(&set, SIGTERM); ASSERT_OK(pthread_sigmask(SIG_UNBLOCK, &set, NULL)); } - ASSERT_NE(SIG_ERR, signal(SIGTERM, SIG_DFL)); + ASSERT_PTR_NE(SIG_ERR, signal(SIGTERM, SIG_DFL)); #endif /* Sending signum == 0 should check if the diff --git a/deps/uv/test/test-tcp-flags.c b/deps/uv/test/test-tcp-flags.c index 30178d706d9418..16218a27f0a3a8 100644 --- a/deps/uv/test/test-tcp-flags.c +++ b/deps/uv/test/test-tcp-flags.c @@ -33,7 +33,8 @@ TEST_IMPL(tcp_flags) { loop = uv_default_loop(); - r = uv_tcp_init(loop, &handle); + /* Use _ex to make sure the socket is created. */ + r = uv_tcp_init_ex(loop, &handle, AF_INET); ASSERT_OK(r); r = uv_tcp_nodelay(&handle, 1); @@ -42,6 +43,12 @@ TEST_IMPL(tcp_flags) { r = uv_tcp_keepalive(&handle, 1, 60); ASSERT_OK(r); + r = uv_tcp_keepalive(&handle, 0, 0); + ASSERT_OK(r); + + r = uv_tcp_keepalive(&handle, 1, 0); + ASSERT_EQ(r, UV_EINVAL); + uv_close((uv_handle_t*)&handle, NULL); r = uv_run(loop, UV_RUN_DEFAULT); diff --git a/deps/uv/test/test-tcp-reuseport.c b/deps/uv/test/test-tcp-reuseport.c new file mode 100644 index 00000000000000..f108b9bbe0fe75 --- /dev/null +++ b/deps/uv/test/test-tcp-reuseport.c @@ -0,0 +1,248 @@ +/* Copyright libuv project contributors. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#include "uv.h" +#include "task.h" + +#include +#include +#include + +#if !defined(__linux__) && !defined(__FreeBSD__) && \ + !defined(__DragonFly__) && !defined(__sun) && !defined(_AIX73) + +TEST_IMPL(tcp_reuseport) { + struct sockaddr_in addr; + uv_loop_t* loop; + uv_tcp_t handle; + int r; + + ASSERT_OK(uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); + + loop = uv_default_loop(); + ASSERT_NOT_NULL(loop); + + r = uv_tcp_init(loop, &handle); + ASSERT_OK(r); + + r = uv_tcp_bind(&handle, (const struct sockaddr*) &addr, UV_TCP_REUSEPORT); + ASSERT_EQ(r, UV_ENOTSUP); + + MAKE_VALGRIND_HAPPY(loop); + + return 0; +} + +#else + +#define NUM_LISTENING_THREADS 2 +#define MAX_TCP_CLIENTS 10 + +static uv_tcp_t tcp_connect_handles[MAX_TCP_CLIENTS]; +static uv_connect_t tcp_connect_requests[MAX_TCP_CLIENTS]; + +static uv_sem_t semaphore; + +static uv_mutex_t mutex; +static unsigned int accepted; + +static unsigned int thread_loop1_accepted; +static unsigned int thread_loop2_accepted; +static unsigned int connected; + +static uv_loop_t* main_loop; +static uv_loop_t thread_loop1; +static uv_loop_t thread_loop2; +static uv_tcp_t thread_handle1; +static uv_tcp_t thread_handle2; +static uv_timer_t thread_timer_handle1; +static uv_timer_t thread_timer_handle2; + +static void on_close(uv_handle_t* handle) { + free(handle); +} + +static void ticktack(uv_timer_t* timer) { + ASSERT(timer == &thread_timer_handle1 || timer == &thread_timer_handle2); + + int done = 0; + uv_mutex_lock(&mutex); + if (accepted == MAX_TCP_CLIENTS) { + done = 1; + } + uv_mutex_unlock(&mutex); + + if (done) { + uv_close((uv_handle_t*) timer, NULL); + if (timer->loop == &thread_loop1) + uv_close((uv_handle_t*) &thread_handle1, NULL); + if (timer->loop == &thread_loop2) + uv_close((uv_handle_t*) &thread_handle2, NULL); + } +} + +static void on_connection(uv_stream_t* server, int status) +{ + ASSERT_OK(status); + ASSERT(server == (uv_stream_t*) &thread_handle1 || \ + server == (uv_stream_t*) &thread_handle2); + + uv_tcp_t *client = malloc(sizeof(uv_tcp_t)); + ASSERT_OK(uv_tcp_init(server->loop, client)); + ASSERT_OK(uv_accept(server, (uv_stream_t*) client)); + uv_close((uv_handle_t*) client, on_close); + + if (server->loop == &thread_loop1) + thread_loop1_accepted++; + + if (server->loop == &thread_loop2) + thread_loop2_accepted++; + + uv_mutex_lock(&mutex); + accepted++; + uv_mutex_unlock(&mutex); +} + +static void on_connect(uv_connect_t* req, int status) { + ASSERT_OK(status); + ASSERT_NOT_NULL(req->handle); + ASSERT_PTR_EQ(req->handle->loop, main_loop); + + connected++; + uv_close((uv_handle_t*) req->handle, NULL); +} + +static void create_listener(uv_loop_t* loop, uv_tcp_t* handle) { + struct sockaddr_in addr; + int r; + + ASSERT_OK(uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); + + r = uv_tcp_init(loop, handle); + ASSERT_OK(r); + + r = uv_tcp_bind(handle, (const struct sockaddr*) &addr, UV_TCP_REUSEPORT); + ASSERT_OK(r); + + r = uv_listen((uv_stream_t*) handle, 128, on_connection); + ASSERT_OK(r); +} + +static void run_event_loop(void* arg) { + int r; + uv_tcp_t* handle; + uv_timer_t* timer; + uv_loop_t* loop = (uv_loop_t*) arg; + ASSERT(loop == &thread_loop1 || loop == &thread_loop2); + + if (loop == &thread_loop1) { + handle = &thread_handle1; + timer = &thread_timer_handle1; + } else { + handle = &thread_handle2; + timer = &thread_timer_handle2; + } + + create_listener(loop, handle); + r = uv_timer_init(loop, timer); + ASSERT_OK(r); + r = uv_timer_start(timer, ticktack, 0, 10); + ASSERT_OK(r); + + /* Notify the main thread to start connecting. */ + uv_sem_post(&semaphore); + r = uv_run(loop, UV_RUN_DEFAULT); + ASSERT_OK(r); +} + +TEST_IMPL(tcp_reuseport) { + struct sockaddr_in addr; + int r; + int i; + + r = uv_mutex_init(&mutex); + ASSERT_OK(r); + + r = uv_sem_init(&semaphore, 0); + ASSERT_OK(r); + + main_loop = uv_default_loop(); + ASSERT_NOT_NULL(main_loop); + + /* Run event loops of listeners in separate threads. */ + uv_loop_init(&thread_loop1); + uv_loop_init(&thread_loop2); + uv_thread_t thread_loop_id1; + uv_thread_t thread_loop_id2; + uv_thread_create(&thread_loop_id1, run_event_loop, &thread_loop1); + uv_thread_create(&thread_loop_id2, run_event_loop, &thread_loop2); + + /* Wait until all threads to poll for accepting connections + * before we start to connect. Otherwise the incoming connections + * might not be distributed across all listening threads. */ + for (i = 0; i < NUM_LISTENING_THREADS; i++) + uv_sem_wait(&semaphore); + /* Now we know all threads are up and entering the uv_run(), + * but we still sleep a little bit just for dual fail-safe. */ + uv_sleep(100); + + /* Start connecting to the peers. */ + ASSERT_OK(uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); + for (i = 0; i < MAX_TCP_CLIENTS; i++) { + r = uv_tcp_init(main_loop, &tcp_connect_handles[i]); + ASSERT_OK(r); + r = uv_tcp_connect(&tcp_connect_requests[i], + &tcp_connect_handles[i], + (const struct sockaddr*) &addr, + on_connect); + ASSERT_OK(r); + } + + r = uv_run(main_loop, UV_RUN_DEFAULT); + ASSERT_OK(r); + + /* Wait for all threads to exit. */ + uv_thread_join(&thread_loop_id1); + uv_thread_join(&thread_loop_id2); + + /* Verify if each listener per event loop accepted connections + * and the amount of accepted connections matches the one of + * connected connections. + */ + ASSERT_EQ(accepted, MAX_TCP_CLIENTS); + ASSERT_EQ(connected, MAX_TCP_CLIENTS); + ASSERT_GT(thread_loop1_accepted, 0); + ASSERT_GT(thread_loop2_accepted, 0); + ASSERT_EQ(thread_loop1_accepted + thread_loop2_accepted, connected); + + /* Clean up. */ + uv_mutex_destroy(&mutex); + + uv_sem_destroy(&semaphore); + + uv_loop_close(&thread_loop1); + uv_loop_close(&thread_loop2); + MAKE_VALGRIND_HAPPY(main_loop); + + return 0; +} + +#endif diff --git a/deps/uv/test/test-tmpdir.c b/deps/uv/test/test-tmpdir.c index a4e9ce950aaa12..c8fc8e06a8b6d1 100644 --- a/deps/uv/test/test-tmpdir.c +++ b/deps/uv/test/test-tmpdir.c @@ -76,6 +76,13 @@ TEST_IMPL(tmpdir) { size_t lenx = sizeof tmpdirx; r = uv_os_tmpdir(tmpdirx, &lenx); ASSERT_OK(r); + + /* Test empty environment variable */ + r = uv_os_setenv("TMP", ""); + ASSERT_EQ(r, 0); + len = sizeof tmpdir; + r = uv_os_tmpdir(tmpdir, &len); + ASSERT_EQ(r, UV_ENOENT); #endif return 0; diff --git a/deps/uv/test/test-udp-multicast-join.c b/deps/uv/test/test-udp-multicast-join.c index 7e8fbe39f08c3b..9e322dc579fc33 100644 --- a/deps/uv/test/test-udp-multicast-join.c +++ b/deps/uv/test/test-udp-multicast-join.c @@ -126,7 +126,7 @@ static void cl_recv_cb(uv_udp_t* handle, r = uv_udp_set_membership(&server, MULTICAST_ADDR, NULL, UV_LEAVE_GROUP); ASSERT_OK(r); -#if !defined(__OpenBSD__) && !defined(__NetBSD__) +#if !defined(__NetBSD__) r = uv_udp_set_source_membership(&server, MULTICAST_ADDR, NULL, source_addr, UV_JOIN_GROUP); ASSERT_OK(r); #endif diff --git a/deps/uv/test/test-udp-multicast-join6.c b/deps/uv/test/test-udp-multicast-join6.c index 11efb0a6f67d78..c6872e4283247d 100644 --- a/deps/uv/test/test-udp-multicast-join6.c +++ b/deps/uv/test/test-udp-multicast-join6.c @@ -192,6 +192,11 @@ TEST_IMPL(udp_multicast_join6) { ASSERT_OK(r); +#if defined(__ANDROID__) + /* It returns an ENOSYS error */ + RETURN_SKIP("Test does not currently work in ANDROID"); +#endif + /* TODO(gengjiawen): Fix test on QEMU. */ #if defined(__QEMU__) RETURN_SKIP("Test does not currently work in QEMU"); diff --git a/deps/uv/test/test-udp-recv-in-a-row.c b/deps/uv/test/test-udp-recv-in-a-row.c index 30745def0f602d..0d97e5bf529431 100644 --- a/deps/uv/test/test-udp-recv-in-a-row.c +++ b/deps/uv/test/test-udp-recv-in-a-row.c @@ -50,11 +50,16 @@ static void sv_recv_cb(uv_udp_t* handle, const uv_buf_t* rcvbuf, const struct sockaddr* addr, unsigned flags) { - if (++ recv_cnt < N) { - ASSERT_EQ(sizeof(send_data), nread); - } else { - ASSERT_OK(nread); - } + /* |nread| can be zero when the kernel drops an incoming datagram after + * marking the file descriptor as readable but before libuv has a chance + * to receive it. Libuv still invokes the uv_udp_recv_cb callback to give + * back the memory from the uv_alloc_cb callback. + * + * See https://github.com/libuv/libuv/issues/4219. + */ + recv_cnt++; + if (nread > 0) + ASSERT_EQ(nread, sizeof(send_data)); } static void check_cb(uv_check_t* handle) { @@ -63,9 +68,11 @@ static void check_cb(uv_check_t* handle) { /** * sv_recv_cb() is called with nread set to zero to indicate * there is no more udp packet in the kernel, so the actual - * recv_cnt is one larger than N. + * recv_cnt is up to one larger than N. UDP being what it is, + * packets can get dropped so don't assume an exact count. */ - ASSERT_EQ(N+1, recv_cnt); + ASSERT_GE(recv_cnt, 1); + ASSERT_LE(recv_cnt, N+1); check_cb_called = 1; /* we are done */ diff --git a/deps/uv/test/test-udp-reuseport.c b/deps/uv/test/test-udp-reuseport.c new file mode 100644 index 00000000000000..7d4db40806f628 --- /dev/null +++ b/deps/uv/test/test-udp-reuseport.c @@ -0,0 +1,287 @@ +/* Copyright libuv project contributors. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#include "uv.h" +#include "task.h" + +#include +#include +#include + +#if !defined(__linux__) && !defined(__FreeBSD__) && \ + !defined(__DragonFly__) && !defined(__sun) && !defined(_AIX73) + +TEST_IMPL(udp_reuseport) { + struct sockaddr_in addr1, addr2, addr3; + uv_loop_t* loop; + uv_udp_t handle1, handle2, handle3; + int r; + + ASSERT_OK(uv_ip4_addr("127.0.0.1", TEST_PORT, &addr1)); + ASSERT_OK(uv_ip4_addr("127.0.0.1", TEST_PORT_2, &addr2)); + ASSERT_OK(uv_ip4_addr("127.0.0.1", TEST_PORT_3, &addr3)); + + loop = uv_default_loop(); + ASSERT_NOT_NULL(loop); + + r = uv_udp_init(loop, &handle1); + ASSERT_OK(r); + + r = uv_udp_bind(&handle1, (const struct sockaddr*) &addr1, UV_UDP_REUSEADDR); + ASSERT_OK(r); + + r = uv_udp_init(loop, &handle2); + ASSERT_OK(r); + + r = uv_udp_bind(&handle2, (const struct sockaddr*) &addr2, UV_UDP_REUSEPORT); + ASSERT_EQ(r, UV_ENOTSUP); + + r = uv_udp_init(loop, &handle3); + ASSERT_OK(r); + + /* For platforms where SO_REUSEPORTs don't have the capability of + * load balancing, specifying both UV_UDP_REUSEADDR and UV_UDP_REUSEPORT + * in flags will fail, returning an UV_ENOTSUP error. */ + r = uv_udp_bind(&handle3, (const struct sockaddr*) &addr3, + UV_UDP_REUSEADDR | UV_UDP_REUSEPORT); + ASSERT_EQ(r, UV_ENOTSUP); + + MAKE_VALGRIND_HAPPY(loop); + + return 0; +} + +#else + +#define NUM_RECEIVING_THREADS 2 +#define MAX_UDP_DATAGRAMS 10 + +static uv_udp_t udp_send_handles[MAX_UDP_DATAGRAMS]; +static uv_udp_send_t udp_send_requests[MAX_UDP_DATAGRAMS]; + +static uv_sem_t semaphore; + +static uv_mutex_t mutex; +static unsigned int received; + +static unsigned int thread_loop1_recv; +static unsigned int thread_loop2_recv; +static unsigned int sent; + +static uv_loop_t* main_loop; +static uv_loop_t thread_loop1; +static uv_loop_t thread_loop2; +static uv_udp_t thread_handle1; +static uv_udp_t thread_handle2; +static uv_timer_t thread_timer_handle1; +static uv_timer_t thread_timer_handle2; + +static void alloc_cb(uv_handle_t* handle, + size_t suggested_size, + uv_buf_t* buf) { + buf->base = malloc(suggested_size); + buf->len = (int) suggested_size; +} + +static void ticktack(uv_timer_t* timer) { + int done = 0; + + ASSERT(timer == &thread_timer_handle1 || timer == &thread_timer_handle2); + + uv_mutex_lock(&mutex); + if (received == MAX_UDP_DATAGRAMS) { + done = 1; + } + uv_mutex_unlock(&mutex); + + if (done) { + uv_close((uv_handle_t*) timer, NULL); + if (timer->loop == &thread_loop1) + uv_close((uv_handle_t*) &thread_handle1, NULL); + if (timer->loop == &thread_loop2) + uv_close((uv_handle_t*) &thread_handle2, NULL); + } +} + +static void on_recv(uv_udp_t* handle, + ssize_t nr, + const uv_buf_t* buf, + const struct sockaddr* addr, + unsigned flags) { + ASSERT_OK(flags); + ASSERT(handle == &thread_handle1 || handle == &thread_handle2); + + ASSERT_GE(nr, 0); + + if (nr == 0) { + ASSERT_NULL(addr); + free(buf->base); + return; + } + + ASSERT_NOT_NULL(addr); + ASSERT_EQ(5, nr); + ASSERT(!memcmp("Hello", buf->base, nr)); + free(buf->base); + + if (handle->loop == &thread_loop1) + thread_loop1_recv++; + + if (handle->loop == &thread_loop2) + thread_loop2_recv++; + + uv_mutex_lock(&mutex); + received++; + uv_mutex_unlock(&mutex); +} + +static void on_send(uv_udp_send_t* req, int status) { + ASSERT_OK(status); + ASSERT_PTR_EQ(req->handle->loop, main_loop); + + if (++sent == MAX_UDP_DATAGRAMS) + uv_close((uv_handle_t*) req->handle, NULL); +} + +static void bind_socket_and_prepare_recv(uv_loop_t* loop, uv_udp_t* handle) { + struct sockaddr_in addr; + int r; + + ASSERT_OK(uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); + + r = uv_udp_init(loop, handle); + ASSERT_OK(r); + + /* For platforms where SO_REUSEPORTs have the capability of + * load balancing, specifying both UV_UDP_REUSEADDR and + * UV_UDP_REUSEPORT in flags is allowed and SO_REUSEPORT will + * always override the behavior of SO_REUSEADDR. */ + r = uv_udp_bind(handle, (const struct sockaddr*) &addr, + UV_UDP_REUSEADDR | UV_UDP_REUSEPORT); + ASSERT_OK(r); + + r = uv_udp_recv_start(handle, alloc_cb, on_recv); + ASSERT_OK(r); +} + +static void run_event_loop(void* arg) { + int r; + uv_udp_t* handle; + uv_timer_t* timer; + uv_loop_t* loop = (uv_loop_t*) arg; + ASSERT(loop == &thread_loop1 || loop == &thread_loop2); + + if (loop == &thread_loop1) { + handle = &thread_handle1; + timer = &thread_timer_handle1; + } else { + handle = &thread_handle2; + timer = &thread_timer_handle2; + } + + bind_socket_and_prepare_recv(loop, handle); + r = uv_timer_init(loop, timer); + ASSERT_OK(r); + r = uv_timer_start(timer, ticktack, 0, 10); + ASSERT_OK(r); + + /* Notify the main thread to start sending data. */ + uv_sem_post(&semaphore); + r = uv_run(loop, UV_RUN_DEFAULT); + ASSERT_OK(r); +} + +TEST_IMPL(udp_reuseport) { + struct sockaddr_in addr; + uv_buf_t buf; + int r; + int i; + + r = uv_mutex_init(&mutex); + ASSERT_OK(r); + + r = uv_sem_init(&semaphore, 0); + ASSERT_OK(r); + + main_loop = uv_default_loop(); + ASSERT_NOT_NULL(main_loop); + + /* Run event loops of receiving sockets in separate threads. */ + uv_loop_init(&thread_loop1); + uv_loop_init(&thread_loop2); + uv_thread_t thread_loop_id1; + uv_thread_t thread_loop_id2; + uv_thread_create(&thread_loop_id1, run_event_loop, &thread_loop1); + uv_thread_create(&thread_loop_id2, run_event_loop, &thread_loop2); + + /* Wait until all threads to poll for receiving datagrams + * before we start to sending. Otherwise the incoming datagrams + * might not be distributed across all receiving threads. */ + for (i = 0; i < NUM_RECEIVING_THREADS; i++) + uv_sem_wait(&semaphore); + /* Now we know all threads are up and entering the uv_run(), + * but we still sleep a little bit just for dual fail-safe. */ + uv_sleep(100); + + /* Start sending datagrams to the peers. */ + buf = uv_buf_init("Hello", 5); + ASSERT_OK(uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); + for (i = 0; i < MAX_UDP_DATAGRAMS; i++) { + r = uv_udp_init(main_loop, &udp_send_handles[i]); + ASSERT_OK(r); + r = uv_udp_send(&udp_send_requests[i], + &udp_send_handles[i], + &buf, + 1, + (const struct sockaddr*) &addr, + on_send); + ASSERT_OK(r); + } + + r = uv_run(main_loop, UV_RUN_DEFAULT); + ASSERT_OK(r); + + /* Wait for all threads to exit. */ + uv_thread_join(&thread_loop_id1); + uv_thread_join(&thread_loop_id2); + + /* Verify if each receiving socket per event loop received datagrams + * and the amount of received datagrams matches the one of sent datagrams. + */ + ASSERT_EQ(received, MAX_UDP_DATAGRAMS); + ASSERT_EQ(sent, MAX_UDP_DATAGRAMS); + ASSERT_GT(thread_loop1_recv, 0); + ASSERT_GT(thread_loop2_recv, 0); + ASSERT_EQ(thread_loop1_recv + thread_loop2_recv, sent); + + /* Clean up. */ + uv_mutex_destroy(&mutex); + + uv_sem_destroy(&semaphore); + + uv_loop_close(&thread_loop1); + uv_loop_close(&thread_loop2); + MAKE_VALGRIND_HAPPY(main_loop); + + return 0; +} + +#endif diff --git a/deps/uv/uv.gyp b/deps/uv/uv.gyp index 6c86c3fa50496d..fea86b4af7826e 100644 --- a/deps/uv/uv.gyp +++ b/deps/uv/uv.gyp @@ -124,6 +124,7 @@ 'uv_sources_apple': [ 'src/unix/darwin.c', 'src/unix/fsevents.c', + 'src/unix/darwin-syscalls.h', 'src/unix/darwin-proctitle.c', 'src/unix/random-getentropy.c', ], From 54d55f2337ebe04451da770935ad453accb147f9 Mon Sep 17 00:00:00 2001 From: Santiago Gimeno Date: Thu, 8 Aug 2024 11:50:33 +0200 Subject: [PATCH 15/93] Revert "deps: disable io_uring support in libuv by default" This reverts commit 42e659cb9d9425f76dbe9b57a437005508c0933d. PR-URL: https://github.com/nodejs/node/pull/55114 Refs: https://github.com/libuv/libuv/releases/tag/v1.49.0 Refs: https://github.com/libuv/libuv/releases/tag/v1.49.1 Reviewed-By: Rafael Gonzaga Reviewed-By: Luigi Pinca --- doc/api/cli.md | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/doc/api/cli.md b/doc/api/cli.md index ad723ea1d244cb..103b00a15f96ca 100644 --- a/doc/api/cli.md +++ b/doc/api/cli.md @@ -3467,23 +3467,6 @@ threadpool by setting the `'UV_THREADPOOL_SIZE'` environment variable to a value greater than `4` (its current default value). For more information, see the [libuv threadpool documentation][]. -### `UV_USE_IO_URING=value` - -Enable or disable libuv's use of `io_uring` on supported platforms. - -On supported platforms, `io_uring` can significantly improve the performance of -various asynchronous I/O operations. - -`io_uring` is disabled by default due to security concerns. When `io_uring` -is enabled, applications must not change the user identity of the process at -runtime. In this case, JavaScript functions such as [`process.setuid()`][] are -unavailable, and native addons must not invoke system functions such as -[`setuid(2)`][]. - -This environment variable is implemented by a dependency of Node.js and may be -removed in future versions of Node.js. No stability guarantees are provided for -the behavior of this environment variable. - ## Useful V8 options V8 has its own set of CLI options. Any V8 CLI option that is provided to `node` @@ -3644,8 +3627,6 @@ node --stack-trace-limit=12 -p -e "Error.stackTraceLimit" # prints 12 [`net.getDefaultAutoSelectFamilyAttemptTimeout()`]: net.md#netgetdefaultautoselectfamilyattempttimeout [`node:sqlite`]: sqlite.md [`process.setUncaughtExceptionCaptureCallback()`]: process.md#processsetuncaughtexceptioncapturecallbackfn -[`process.setuid()`]: process.md#processsetuidid -[`setuid(2)`]: https://man7.org/linux/man-pages/man2/setuid.2.html [`tls.DEFAULT_MAX_VERSION`]: tls.md#tlsdefault_max_version [`tls.DEFAULT_MIN_VERSION`]: tls.md#tlsdefault_min_version [`unhandledRejection`]: process.md#event-unhandledrejection From a490bb87453c0e6d09ba33f81bdbdf8e2c749566 Mon Sep 17 00:00:00 2001 From: Santiago Gimeno Date: Thu, 8 Aug 2024 16:05:48 +0200 Subject: [PATCH 16/93] src: remove uv__node_patch_is_using_io_uring As now the `SQPOLL` ring used in the libuv io_uring implementation is disabled by default. Also modify `UvMightBeUsingIoUring()` to just handle the case where `Node.js` is dynamically linked to a `libuv` version which has the `SQPOLL` ring enabled. PR-URL: https://github.com/nodejs/node/pull/55114 Refs: https://github.com/libuv/libuv/releases/tag/v1.49.0 Refs: https://github.com/libuv/libuv/releases/tag/v1.49.1 Reviewed-By: Rafael Gonzaga Reviewed-By: Luigi Pinca --- src/node_credentials.cc | 28 +++--------- test/parallel/test-process-setuid-io-uring.js | 43 ------------------- 2 files changed, 5 insertions(+), 66 deletions(-) delete mode 100644 test/parallel/test-process-setuid-io-uring.js diff --git a/src/node_credentials.cc b/src/node_credentials.cc index 65fdd145167139..2a7f2e878bc953 100644 --- a/src/node_credentials.cc +++ b/src/node_credentials.cc @@ -228,31 +228,13 @@ static gid_t gid_by_name(Isolate* isolate, Local value) { } } -#ifdef __linux__ -extern "C" { -int uv__node_patch_is_using_io_uring(void); - -int uv__node_patch_is_using_io_uring(void) __attribute__((weak)); - -typedef int (*is_using_io_uring_fn)(void); -} -#endif // __linux__ - static bool UvMightBeUsingIoUring() { #ifdef __linux__ - // Support for io_uring is only included in libuv 1.45.0 and later, and only - // on Linux (and Android, but there it is always disabled). The patch that we - // apply to libuv to work around the io_uring security issue adds a function - // that tells us whether io_uring is being used. If that function is not - // present, we assume that we are dynamically linking against an unpatched - // version. - static std::atomic check = - uv__node_patch_is_using_io_uring; - if (check == nullptr) { - check = reinterpret_cast( - dlsym(RTLD_DEFAULT, "uv__node_patch_is_using_io_uring")); - } - return uv_version() >= 0x012d00u && (check == nullptr || (*check)()); + // Support for io_uring is only included in libuv 1.45.0 and later. Starting + // with 1.49.0 is disabled by default. Check the version in case Node.js is + // dynamically to an io_uring-enabled version of libuv. + unsigned int version = uv_version(); + return version >= 0x012d00u && version < 0x013100u; #else return false; #endif diff --git a/test/parallel/test-process-setuid-io-uring.js b/test/parallel/test-process-setuid-io-uring.js deleted file mode 100644 index 93193ac2f8ab99..00000000000000 --- a/test/parallel/test-process-setuid-io-uring.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; -const common = require('../common'); - -const assert = require('node:assert'); -const { execFileSync } = require('node:child_process'); - -if (!common.isLinux) { - common.skip('test is Linux specific'); -} - -if (process.arch !== 'x64' && process.arch !== 'arm64') { - common.skip('io_uring support on this architecture is uncertain'); -} - -const kv = /^(\d+)\.(\d+)\.(\d+)/.exec(execFileSync('uname', ['-r'])).slice(1).map((n) => parseInt(n, 10)); -if (((kv[0] << 16) | (kv[1] << 8) | kv[2]) < 0x050ABA) { - common.skip('io_uring is likely buggy due to old kernel'); -} - -const userIdentitySetters = [ - ['setuid', [1000]], - ['seteuid', [1000]], - ['setgid', [1000]], - ['setegid', [1000]], - ['setgroups', [[1000]]], - ['initgroups', ['nodeuser', 1000]], -]; - -for (const [fnName, args] of userIdentitySetters) { - const call = `process.${fnName}(${args.map((a) => JSON.stringify(a)).join(', ')})`; - const code = `try { ${call}; } catch (err) { console.log(err); }`; - - const stdout = execFileSync(process.execPath, ['-e', code], { - encoding: 'utf8', - env: { ...process.env, UV_USE_IO_URING: '1' }, - }); - - const msg = new RegExp(`^Error: ${fnName}\\(\\) disabled: io_uring may be enabled\\. See CVE-[X0-9]{4}-`); - assert.match(stdout, msg); - assert.match(stdout, /code: 'ERR_INVALID_STATE'/); - - console.log(call, stdout.slice(0, stdout.indexOf('\n'))); -} From 8ceefebaf22a99ad3a2b6a08b11dfc1706bf0b58 Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Mon, 14 Oct 2024 12:24:32 +0200 Subject: [PATCH 17/93] events: optimize EventTarget.addEventListener MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/55312 Fixes: https://github.com/nodejs/node/issues/55311 Reviewed-By: Stephen Belanger Reviewed-By: Vinícius Lourenço Claro Cardoso Reviewed-By: Yagiz Nizipli Reviewed-By: Matteo Collina Reviewed-By: Ruben Bridgewater Reviewed-By: Antoine du Hamel Reviewed-By: Benjamin Gruenbaum --- .../events/eventtarget-add-remove-abort.js | 25 ++++++++ benchmark/events/eventtarget-add-remove.js | 4 +- lib/internal/event_target.js | 59 +++++++++++-------- 3 files changed, 62 insertions(+), 26 deletions(-) create mode 100644 benchmark/events/eventtarget-add-remove-abort.js diff --git a/benchmark/events/eventtarget-add-remove-abort.js b/benchmark/events/eventtarget-add-remove-abort.js new file mode 100644 index 00000000000000..b1565c1f432a3e --- /dev/null +++ b/benchmark/events/eventtarget-add-remove-abort.js @@ -0,0 +1,25 @@ +'use strict'; +const common = require('../common.js'); + +const bench = common.createBenchmark(main, { + n: [1e5], + nListener: [1, 5, 10], +}); + +function main({ n, nListener }) { + const target = new EventTarget(); + const listeners = []; + for (let k = 0; k < nListener; k += 1) + listeners.push(() => {}); + + bench.start(); + for (let i = 0; i < n; i += 1) { + for (let k = listeners.length; --k >= 0;) { + target.addEventListener('abort', listeners[k]); + } + for (let k = listeners.length; --k >= 0;) { + target.removeEventListener('abort', listeners[k]); + } + } + bench.end(n); +} diff --git a/benchmark/events/eventtarget-add-remove.js b/benchmark/events/eventtarget-add-remove.js index a3defce03cfb8d..62048086d5d0bf 100644 --- a/benchmark/events/eventtarget-add-remove.js +++ b/benchmark/events/eventtarget-add-remove.js @@ -2,8 +2,8 @@ const common = require('../common.js'); const bench = common.createBenchmark(main, { - n: [1e6], - nListener: [5, 10], + n: [1e5], + nListener: [1, 5, 10], }); function main({ n, nListener }) { diff --git a/lib/internal/event_target.js b/lib/internal/event_target.js index aa0203b930fbe8..99296b83f2e828 100644 --- a/lib/internal/event_target.js +++ b/lib/internal/event_target.js @@ -597,19 +597,40 @@ class EventTarget { if (arguments.length < 2) throw new ERR_MISSING_ARGS('type', 'listener'); - // We validateOptions before the validateListener check because the spec - // requires us to hit getters. - const { - once, - capture, - passive, - signal, - isNodeStyleListener, - weak, - resistStopPropagation, - } = validateEventListenerOptions(options); - - validateAbortSignal(signal, 'options.signal'); + let once = false; + let capture = false; + let passive = false; + let isNodeStyleListener = false; + let weak = false; + let resistStopPropagation = false; + + if (options !== kEmptyObject) { + // We validateOptions before the validateListener check because the spec + // requires us to hit getters. + options = validateEventListenerOptions(options); + + once = options.once; + capture = options.capture; + passive = options.passive; + isNodeStyleListener = options.isNodeStyleListener; + weak = options.weak; + resistStopPropagation = options.resistStopPropagation; + + const signal = options.signal; + + validateAbortSignal(signal, 'options.signal'); + + if (signal) { + if (signal.aborted) { + return; + } + // TODO(benjamingr) make this weak somehow? ideally the signal would + // not prevent the event target from GC. + signal.addEventListener('abort', () => { + this.removeEventListener(type, listener, options); + }, { __proto__: null, once: true, [kWeakHandler]: this, [kResistStopPropagation]: true }); + } + } if (!validateEventListener(listener)) { // The DOM silently allows passing undefined as a second argument @@ -623,18 +644,8 @@ class EventTarget { process.emitWarning(w); return; } - type = webidl.converters.DOMString(type); - if (signal) { - if (signal.aborted) { - return; - } - // TODO(benjamingr) make this weak somehow? ideally the signal would - // not prevent the event target from GC. - signal.addEventListener('abort', () => { - this.removeEventListener(type, listener, options); - }, { __proto__: null, once: true, [kWeakHandler]: this, [kResistStopPropagation]: true }); - } + type = webidl.converters.DOMString(type); let root = this[kEvents].get(type); From c028d21b44c319b9c90bc09750ede2b344536208 Mon Sep 17 00:00:00 2001 From: simon-id Date: Mon, 14 Oct 2024 12:55:39 +0200 Subject: [PATCH 18/93] diagnostics_channel: fix unsubscribe during publish PR-URL: https://github.com/nodejs/node/pull/55116 Reviewed-By: Stephen Belanger Reviewed-By: Claudio Wunder --- lib/diagnostics_channel.js | 13 ++++++++++--- .../test-diagnostics-channel-sync-unsubscribe.js | 1 + 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/diagnostics_channel.js b/lib/diagnostics_channel.js index 59a95b08226e6b..312bd258f5844a 100644 --- a/lib/diagnostics_channel.js +++ b/lib/diagnostics_channel.js @@ -4,6 +4,8 @@ const { ArrayPrototypeAt, ArrayPrototypeIndexOf, ArrayPrototypePush, + ArrayPrototypePushApply, + ArrayPrototypeSlice, ArrayPrototypeSplice, ObjectDefineProperty, ObjectGetPrototypeOf, @@ -97,6 +99,7 @@ function wrapStoreRun(store, data, next, transform = defaultTransform) { class ActiveChannel { subscribe(subscription) { validateFunction(subscription, 'subscription'); + this._subscribers = ArrayPrototypeSlice(this._subscribers); ArrayPrototypePush(this._subscribers, subscription); channels.incRef(this.name); } @@ -105,7 +108,10 @@ class ActiveChannel { const index = ArrayPrototypeIndexOf(this._subscribers, subscription); if (index === -1) return false; - ArrayPrototypeSplice(this._subscribers, index, 1); + const before = ArrayPrototypeSlice(this._subscribers, 0, index); + const after = ArrayPrototypeSlice(this._subscribers, index + 1); + this._subscribers = before; + ArrayPrototypePushApply(this._subscribers, after); channels.decRef(this.name); maybeMarkInactive(this); @@ -137,9 +143,10 @@ class ActiveChannel { } publish(data) { - for (let i = 0; i < (this._subscribers?.length || 0); i++) { + const subscribers = this._subscribers; + for (let i = 0; i < (subscribers?.length || 0); i++) { try { - const onMessage = this._subscribers[i]; + const onMessage = subscribers[i]; onMessage(data, this.name); } catch (err) { process.nextTick(() => { diff --git a/test/parallel/test-diagnostics-channel-sync-unsubscribe.js b/test/parallel/test-diagnostics-channel-sync-unsubscribe.js index 87bf44249f5fc4..51db6a56c2389d 100644 --- a/test/parallel/test-diagnostics-channel-sync-unsubscribe.js +++ b/test/parallel/test-diagnostics-channel-sync-unsubscribe.js @@ -9,6 +9,7 @@ const published_data = 'some message'; const onMessageHandler = common.mustCall(() => dc.unsubscribe(channel_name, onMessageHandler)); dc.subscribe(channel_name, onMessageHandler); +dc.subscribe(channel_name, common.mustCall()); // This must not throw. dc.channel(channel_name).publish(published_data); From c5abf50692fca4df21a3bbe15d6ab4cc13a25780 Mon Sep 17 00:00:00 2001 From: Rafael Gonzaga Date: Mon, 14 Oct 2024 09:14:01 -0300 Subject: [PATCH 19/93] benchmark: adjust byte size for buffer-copy PR-URL: https://github.com/nodejs/node/pull/55295 Reviewed-By: Luigi Pinca --- benchmark/buffers/buffer-copy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmark/buffers/buffer-copy.js b/benchmark/buffers/buffer-copy.js index a3bf6693b146b5..c2dafc8515c4f2 100644 --- a/benchmark/buffers/buffer-copy.js +++ b/benchmark/buffers/buffer-copy.js @@ -2,7 +2,7 @@ const common = require('../common.js'); const bench = common.createBenchmark(main, { - bytes: [0, 8, 128, 32 * 1024], + bytes: [8, 128, 1024], partial: ['true', 'false'], n: [6e6], }); From d9f0407cf629761233b5e566c3de9ba8d33fe2dc Mon Sep 17 00:00:00 2001 From: Aviv Keller Date: Mon, 14 Oct 2024 09:19:17 -0400 Subject: [PATCH 20/93] test_runner: require `--enable-source-maps` for sourcemap coverage PR-URL: https://github.com/nodejs/node/pull/55359 Reviewed-By: Colin Ihrig Reviewed-By: Matteo Collina Reviewed-By: Moshe Atlow --- lib/internal/test_runner/coverage.js | 12 ++++++++-- .../test-runner-coverage-source-map.js | 23 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/lib/internal/test_runner/coverage.js b/lib/internal/test_runner/coverage.js index 5da1d7e04b3146..8cbd960d72dd39 100644 --- a/lib/internal/test_runner/coverage.js +++ b/lib/internal/test_runner/coverage.js @@ -57,12 +57,19 @@ class CoverageLine { } class TestCoverage { - constructor(coverageDirectory, originalCoverageDirectory, workingDirectory, excludeGlobs, includeGlobs, thresholds) { + constructor(coverageDirectory, + originalCoverageDirectory, + workingDirectory, + excludeGlobs, + includeGlobs, + sourceMaps, + thresholds) { this.coverageDirectory = coverageDirectory; this.originalCoverageDirectory = originalCoverageDirectory; this.workingDirectory = workingDirectory; this.excludeGlobs = excludeGlobs; this.includeGlobs = includeGlobs; + this.sourceMaps = sourceMaps; this.thresholds = thresholds; } @@ -341,7 +348,7 @@ class TestCoverage { mapCoverageWithSourceMap(coverage) { const { result } = coverage; const sourceMapCache = coverage['source-map-cache']; - if (!sourceMapCache) { + if (!this.sourceMaps || !sourceMapCache) { return result; } const newResult = new SafeMap(); @@ -514,6 +521,7 @@ function setupCoverage(options) { options.cwd, options.coverageExcludeGlobs, options.coverageIncludeGlobs, + options.sourceMaps, { __proto__: null, line: options.lineCoverage, diff --git a/test/parallel/test-runner-coverage-source-map.js b/test/parallel/test-runner-coverage-source-map.js index 0ded33713c784a..48807fb2d193b4 100644 --- a/test/parallel/test-runner-coverage-source-map.js +++ b/test/parallel/test-runner-coverage-source-map.js @@ -19,6 +19,7 @@ function generateReport(report) { } const flags = [ + '--enable-source-maps', '--test', '--experimental-test-coverage', '--test-reporter', 'tap', ]; @@ -40,6 +41,28 @@ describe('Coverage with source maps', async () => { const spawned = await common.spawnPromisified(process.execPath, flags, { cwd: fixtures.path('test-runner', 'coverage') }); + + t.assert.strictEqual(spawned.stderr, ''); + t.assert.ok(spawned.stdout.includes(report)); + t.assert.strictEqual(spawned.code, 1); + }); + + await it('should only work with --enable-source-maps', async (t) => { + const report = generateReport([ + '# --------------------------------------------------------------', + '# file | line % | branch % | funcs % | uncovered lines', + '# --------------------------------------------------------------', + '# a.test.mjs | 100.00 | 100.00 | 100.00 | ', + '# index.test.js | 71.43 | 66.67 | 100.00 | 6-7', + '# stdin.test.js | 100.00 | 100.00 | 100.00 | ', + '# --------------------------------------------------------------', + '# all files | 85.71 | 87.50 | 100.00 | ', + '# --------------------------------------------------------------', + ]); + + const spawned = await common.spawnPromisified(process.execPath, flags.slice(1), { + cwd: fixtures.path('test-runner', 'coverage') + }); t.assert.strictEqual(spawned.stderr, ''); t.assert.ok(spawned.stdout.includes(report)); t.assert.strictEqual(spawned.code, 1); From a9473bb8e37583de1358f474f6ebda4517f24adf Mon Sep 17 00:00:00 2001 From: "Edigleysson Silva (Edy)" Date: Mon, 14 Oct 2024 17:33:41 -0300 Subject: [PATCH 21/93] lib: remove settled dependant signals when they are GCed PR-URL: https://github.com/nodejs/node/pull/55354 Reviewed-By: James M Snell Reviewed-By: Chemi Atlow --- lib/internal/abort_controller.js | 32 +++-- .../test-abortsignal-drop-settled-signals.mjs | 122 ++++++++++++++++++ 2 files changed, 145 insertions(+), 9 deletions(-) create mode 100644 test/parallel/test-abortsignal-drop-settled-signals.mjs diff --git a/lib/internal/abort_controller.js b/lib/internal/abort_controller.js index 48ac99a14f33aa..25293a7c2e56f7 100644 --- a/lib/internal/abort_controller.js +++ b/lib/internal/abort_controller.js @@ -84,6 +84,17 @@ function lazyMessageChannel() { } const clearTimeoutRegistry = new SafeFinalizationRegistry(clearTimeout); +const dependantSignalsCleanupRegistry = new SafeFinalizationRegistry((signalWeakRef) => { + const signal = signalWeakRef.deref(); + if (signal === undefined) { + return; + } + signal[kDependantSignals].forEach((ref) => { + if (ref.deref() === undefined) { + signal[kDependantSignals].delete(ref); + } + }); +}); const gcPersistentSignals = new SafeSet(); const kAborted = Symbol('kAborted'); @@ -243,24 +254,27 @@ class AbortSignal extends EventTarget { } signal[kDependantSignals] ??= new SafeSet(); if (!signal[kComposite]) { - resultSignal[kSourceSignals].add(new SafeWeakRef(signal)); + const signalWeakRef = new SafeWeakRef(signal); + resultSignal[kSourceSignals].add(signalWeakRef); signal[kDependantSignals].add(resultSignalWeakRef); + dependantSignalsCleanupRegistry.register(resultSignal, signalWeakRef); } else if (!signal[kSourceSignals]) { continue; } else { - for (const sourceSignal of signal[kSourceSignals]) { - const sourceSignalRef = sourceSignal.deref(); - if (!sourceSignalRef) { + for (const sourceSignalWeakRef of signal[kSourceSignals]) { + const sourceSignal = sourceSignalWeakRef.deref(); + if (!sourceSignal) { continue; } - assert(!sourceSignalRef.aborted); - assert(!sourceSignalRef[kComposite]); + assert(!sourceSignal.aborted); + assert(!sourceSignal[kComposite]); - if (resultSignal[kSourceSignals].has(sourceSignal)) { + if (resultSignal[kSourceSignals].has(sourceSignalWeakRef)) { continue; } - resultSignal[kSourceSignals].add(sourceSignal); - sourceSignalRef[kDependantSignals].add(resultSignalWeakRef); + resultSignal[kSourceSignals].add(sourceSignalWeakRef); + sourceSignal[kDependantSignals].add(resultSignalWeakRef); + dependantSignalsCleanupRegistry.register(resultSignal, sourceSignalWeakRef); } } } diff --git a/test/parallel/test-abortsignal-drop-settled-signals.mjs b/test/parallel/test-abortsignal-drop-settled-signals.mjs new file mode 100644 index 00000000000000..728002b51d30d5 --- /dev/null +++ b/test/parallel/test-abortsignal-drop-settled-signals.mjs @@ -0,0 +1,122 @@ +// Flags: --expose_gc +// +import '../common/index.mjs'; +import { describe, it } from 'node:test'; + +function makeSubsequentCalls(limit, done, holdReferences = false) { + let dependantSymbol; + let signalRef; + const ac = new AbortController(); + const retainedSignals = []; + const handler = () => { }; + + function run(iteration) { + if (iteration > limit) { + // This setImmediate is necessary to ensure that in the last iteration the remaining signal is GCed (if not + // retained) + setImmediate(() => { + global.gc(); + done(ac.signal, dependantSymbol); + }); + return; + } + + if (holdReferences) { + retainedSignals.push(AbortSignal.any([ac.signal])); + } else { + // Using a WeakRef to avoid retaining information that will interfere with the test + signalRef = new WeakRef(AbortSignal.any([ac.signal])); + signalRef.deref().addEventListener('abort', handler); + } + + dependantSymbol ??= Object.getOwnPropertySymbols(ac.signal).find( + (s) => s.toString() === 'Symbol(kDependantSignals)' + ); + + setImmediate(() => { + // Removing the event listener at some moment in the future + // Which will then allow the signal to be GCed + signalRef?.deref()?.removeEventListener('abort', handler); + run(iteration + 1); + }); + } + + run(1); +}; + +function runShortLivedSourceSignal(limit, done) { + const signalRefs = new Set(); + + function run(iteration) { + if (iteration > limit) { + global.gc(); + done(signalRefs); + return; + } + + const ac = new AbortController(); + signalRefs.add(new WeakRef(ac.signal)); + AbortSignal.any([ac.signal]); + + setImmediate(() => run(iteration + 1)); + } + + run(1); +}; + +const limit = 10_000; + +describe('when there is a long-lived signal', () => { + it('drops settled dependant signals', (t, done) => { + makeSubsequentCalls(limit, (signal, depandantSignalsKey) => { + setImmediate(() => { + t.assert.strictEqual(signal[depandantSignalsKey].size, 0); + done(); + }); + }); + }); + + it('keeps all active dependant signals', (t, done) => { + makeSubsequentCalls(limit, (signal, depandantSignalsKey) => { + t.assert.strictEqual(signal[depandantSignalsKey].size, limit); + + done(); + }, true); + }); +}); + +it('does not prevent source signal from being GCed if it is short-lived', (t, done) => { + runShortLivedSourceSignal(limit, (signalRefs) => { + setImmediate(() => { + const unGCedSignals = [...signalRefs].filter((ref) => ref.deref()); + + t.assert.strictEqual(unGCedSignals.length, 0); + done(); + }); + }); +}); + +it('drops settled dependant signals when signal is composite', (t, done) => { + const controllers = Array.from({ length: 2 }, () => new AbortController()); + const composedSignal1 = AbortSignal.any([controllers[0].signal]); + const composedSignalRef = new WeakRef(AbortSignal.any([composedSignal1, controllers[1].signal])); + + const kDependantSignals = Object.getOwnPropertySymbols(controllers[0].signal).find( + (s) => s.toString() === 'Symbol(kDependantSignals)' + ); + + setImmediate(() => { + global.gc(); + + t.assert.strictEqual(composedSignalRef.deref(), undefined); + t.assert.strictEqual(controllers[0].signal[kDependantSignals].size, 2); + t.assert.strictEqual(controllers[1].signal[kDependantSignals].size, 1); + + setImmediate(() => { + t.assert.strictEqual(controllers[0].signal[kDependantSignals].size, 0); + t.assert.strictEqual(controllers[1].signal[kDependantSignals].size, 0); + + done(); + }); + }); +}); From 8b282228aecd940da877d7aafc4cd98c637f47b4 Mon Sep 17 00:00:00 2001 From: "Node.js GitHub Bot" Date: Tue, 15 Oct 2024 02:45:37 +0200 Subject: [PATCH 22/93] deps: update c-ares to v1.34.1 PR-URL: https://github.com/nodejs/node/pull/55369 Reviewed-By: Luigi Pinca Reviewed-By: Richard Lau --- deps/cares/CMakeLists.txt | 17 +- deps/cares/Makefile.Watcom | 5 +- deps/cares/Makefile.dj | 2 +- deps/cares/Makefile.m32 | 2 +- deps/cares/Makefile.msvc | 11 +- deps/cares/README.md | 9 +- deps/cares/RELEASE-NOTES.md | 89 +- deps/cares/aminclude_static.am | 2 +- deps/cares/cares.gyp | 81 +- deps/cares/configure | 741 +- deps/cares/configure.ac | 6 +- deps/cares/docs/Makefile.in | 4 + deps/cares/docs/Makefile.inc | 4 + deps/cares/docs/adig.1 | 196 +- deps/cares/docs/ares_inet_pton.3 | 7 +- deps/cares/docs/ares_init_options.3 | 7 +- deps/cares/docs/ares_process.3 | 135 +- deps/cares/docs/ares_process_fd.3 | 3 + deps/cares/docs/ares_process_fds.3 | 3 + deps/cares/docs/ares_process_pending_write.3 | 3 + deps/cares/docs/ares_set_local_dev.3 | 10 +- deps/cares/docs/ares_set_pending_write_cb.3 | 62 + deps/cares/docs/ares_set_servers_csv.3 | 88 +- deps/cares/docs/ares_set_socket_functions.3 | 347 +- deps/cares/include/ares.h | 308 +- deps/cares/include/ares_build.h | 1 - deps/cares/include/ares_version.h | 15 +- deps/cares/m4/libtool.m4 | 307 +- deps/cares/m4/ltoptions.m4 | 106 +- deps/cares/m4/ltsugar.m4 | 2 +- deps/cares/m4/ltversion.m4 | 12 +- deps/cares/m4/lt~obsolete.m4 | 2 +- deps/cares/src/lib/CMakeLists.txt | 2 + deps/cares/src/lib/Makefile.am | 3 +- deps/cares/src/lib/Makefile.in | 604 +- deps/cares/src/lib/Makefile.inc | 83 +- deps/cares/src/lib/ares__socket.c | 764 -- ...info2hostent.c => ares_addrinfo2hostent.c} | 14 +- ..._localhost.c => ares_addrinfo_localhost.c} | 26 +- deps/cares/src/lib/ares_android.c | 6 +- deps/cares/src/lib/ares_cancel.c | 26 +- ...__close_sockets.c => ares_close_sockets.c} | 69 +- deps/cares/src/lib/ares_config.h.cmake | 6 + deps/cares/src/lib/ares_config.h.in | 6 + deps/cares/src/lib/ares_conn.c | 511 + deps/cares/src/lib/ares_conn.h | 196 + deps/cares/src/lib/ares_cookie.c | 9 +- deps/cares/src/lib/ares_destroy.c | 68 +- deps/cares/src/lib/ares_freeaddrinfo.c | 8 +- deps/cares/src/lib/ares_getaddrinfo.c | 64 +- deps/cares/src/lib/ares_gethostbyaddr.c | 9 +- deps/cares/src/lib/ares_gethostbyname.c | 29 +- deps/cares/src/lib/ares_getnameinfo.c | 10 +- .../{ares__hosts_file.c => ares_hosts_file.c} | 339 +- deps/cares/src/lib/ares_inet_net_pton.h | 4 - deps/cares/src/lib/ares_init.c | 141 +- deps/cares/src/lib/ares_ipv6.h | 2 +- deps/cares/src/lib/ares_library_init.c | 40 +- deps/cares/src/lib/ares_metrics.c | 4 +- deps/cares/src/lib/ares_options.c | 40 +- ..._addrinfo.c => ares_parse_into_addrinfo.c} | 22 +- deps/cares/src/lib/ares_platform.c | 11047 ---------------- deps/cares/src/lib/ares_private.h | 605 +- deps/cares/src/lib/ares_process.c | 1056 +- deps/cares/src/lib/ares_qcache.c | 139 +- deps/cares/src/lib/ares_query.c | 11 +- deps/cares/src/lib/ares_search.c | 129 +- deps/cares/src/lib/ares_send.c | 63 +- .../cares/src/lib/ares_set_socket_functions.c | 586 + deps/cares/src/lib/ares_setup.h | 149 +- deps/cares/src/lib/ares_socket.c | 424 + deps/cares/src/lib/ares_socket.h | 163 + ...es__sortaddrinfo.c => ares_sortaddrinfo.c} | 35 +- deps/cares/src/lib/ares_sysconfig.c | 106 +- deps/cares/src/lib/ares_sysconfig_files.c | 382 +- deps/cares/src/lib/ares_sysconfig_mac.c | 32 +- deps/cares/src/lib/ares_sysconfig_win.c | 15 +- deps/cares/src/lib/ares_timeout.c | 24 +- deps/cares/src/lib/ares_update_servers.c | 593 +- deps/cares/src/lib/config-dos.h | 1 + deps/cares/src/lib/config-win32.h | 3 + .../lib/dsa/{ares__array.c => ares_array.c} | 156 +- .../lib/dsa/{ares__htable.c => ares_htable.c} | 179 +- .../lib/dsa/{ares__htable.h => ares_htable.h} | 46 +- ...ares__htable_asvp.c => ares_htable_asvp.c} | 80 +- deps/cares/src/lib/dsa/ares_htable_dict.c | 228 + ...es__htable_strvp.c => ares_htable_strvp.c} | 104 +- ...ares__htable_szvp.c => ares_htable_szvp.c} | 69 +- deps/cares/src/lib/dsa/ares_htable_vpstr.c | 186 + ...ares__htable_vpvp.c => ares_htable_vpvp.c} | 75 +- .../lib/dsa/{ares__llist.c => ares_llist.c} | 150 +- .../lib/dsa/{ares__slist.c => ares_slist.c} | 146 +- .../lib/dsa/{ares__slist.h => ares_slist.h} | 55 +- deps/cares/src/lib/event/ares_event.h | 12 +- .../src/lib/event/ares_event_configchg.c | 54 +- deps/cares/src/lib/event/ares_event_epoll.c | 4 +- deps/cares/src/lib/event/ares_event_kqueue.c | 4 +- deps/cares/src/lib/event/ares_event_poll.c | 6 +- deps/cares/src/lib/event/ares_event_select.c | 6 +- deps/cares/src/lib/event/ares_event_thread.c | 121 +- deps/cares/src/lib/event/ares_event_win32.c | 74 +- .../ares__array.h => include/ares_array.h} | 109 +- .../{str/ares__buf.h => include/ares_buf.h} | 327 +- .../ares_htable_asvp.h} | 40 +- deps/cares/src/lib/include/ares_htable_dict.h | 123 + .../ares_htable_strvp.h} | 48 +- .../ares_htable_szvp.h} | 35 +- .../cares/src/lib/include/ares_htable_vpstr.h | 111 + .../ares_htable_vpvp.h} | 40 +- .../ares__llist.h => include/ares_llist.h} | 72 +- .../ares_strcasecmp.h => include/ares_mem.h} | 20 +- deps/cares/src/lib/include/ares_str.h | 230 + deps/cares/src/lib/inet_net_pton.c | 58 +- deps/cares/src/lib/inet_ntop.c | 29 +- deps/cares/src/lib/legacy/ares_expand_name.c | 26 +- .../cares/src/lib/legacy/ares_expand_string.c | 14 +- deps/cares/src/lib/legacy/ares_fds.c | 30 +- deps/cares/src/lib/legacy/ares_getsock.c | 32 +- .../cares/src/lib/legacy/ares_parse_a_reply.c | 12 +- .../src/lib/legacy/ares_parse_aaaa_reply.c | 12 +- .../src/lib/legacy/ares_parse_ptr_reply.c | 2 +- .../src/lib/legacy/ares_parse_txt_reply.c | 11 +- deps/cares/src/lib/record/ares_dns_mapping.c | 6 +- .../src/lib/record/ares_dns_multistring.c | 145 +- .../src/lib/record/ares_dns_multistring.h | 58 +- deps/cares/src/lib/record/ares_dns_name.c | 197 +- deps/cares/src/lib/record/ares_dns_parse.c | 189 +- deps/cares/src/lib/record/ares_dns_private.h | 132 +- deps/cares/src/lib/record/ares_dns_record.c | 208 +- deps/cares/src/lib/record/ares_dns_write.c | 264 +- .../src/lib/str/{ares__buf.c => ares_buf.c} | 687 +- deps/cares/src/lib/str/ares_str.c | 337 +- deps/cares/src/lib/str/ares_str.h | 89 - deps/cares/src/lib/str/ares_strsplit.c | 71 +- deps/cares/src/lib/str/ares_strsplit.h | 8 +- deps/cares/src/lib/util/ares__threads.h | 60 - .../{ares__iface_ips.c => ares_iface_ips.c} | 188 +- .../{ares__iface_ips.h => ares_iface_ips.h} | 40 +- deps/cares/src/lib/util/ares_math.c | 26 +- .../ares_strcasecmp.c => util/ares_math.h} | 66 +- deps/cares/src/lib/util/ares_rand.c | 50 +- .../lib/{ares_platform.h => util/ares_rand.h} | 30 +- .../util/{ares__threads.c => ares_threads.c} | 174 +- deps/cares/src/lib/util/ares_threads.h | 60 + deps/cares/src/lib/util/ares_time.h | 48 + .../util/{ares__timeval.c => ares_timeval.c} | 6 +- deps/cares/src/lib/util/ares_uri.c | 1626 +++ deps/cares/src/lib/util/ares_uri.h | 252 + deps/cares/src/tools/CMakeLists.txt | 14 +- deps/cares/src/tools/Makefile.am | 3 +- deps/cares/src/tools/Makefile.in | 95 +- deps/cares/src/tools/Makefile.inc | 6 +- deps/cares/src/tools/adig.c | 1141 +- deps/cares/src/tools/ahost.c | 21 +- 154 files changed, 12736 insertions(+), 17952 deletions(-) create mode 100644 deps/cares/docs/ares_process_fd.3 create mode 100644 deps/cares/docs/ares_process_fds.3 create mode 100644 deps/cares/docs/ares_process_pending_write.3 create mode 100644 deps/cares/docs/ares_set_pending_write_cb.3 delete mode 100644 deps/cares/src/lib/ares__socket.c rename deps/cares/src/lib/{ares__addrinfo2hostent.c => ares_addrinfo2hostent.c} (93%) rename deps/cares/src/lib/{ares__addrinfo_localhost.c => ares_addrinfo_localhost.c} (89%) rename deps/cares/src/lib/{ares__close_sockets.c => ares_close_sockets.c} (59%) create mode 100644 deps/cares/src/lib/ares_conn.c create mode 100644 deps/cares/src/lib/ares_conn.h rename deps/cares/src/lib/{ares__hosts_file.c => ares_hosts_file.c} (64%) rename deps/cares/src/lib/{ares__parse_into_addrinfo.c => ares_parse_into_addrinfo.c} (89%) delete mode 100644 deps/cares/src/lib/ares_platform.c create mode 100644 deps/cares/src/lib/ares_set_socket_functions.c create mode 100644 deps/cares/src/lib/ares_socket.c create mode 100644 deps/cares/src/lib/ares_socket.h rename deps/cares/src/lib/{ares__sortaddrinfo.c => ares_sortaddrinfo.c} (94%) rename deps/cares/src/lib/dsa/{ares__array.c => ares_array.c} (60%) rename deps/cares/src/lib/dsa/{ares__htable.c => ares_htable.c} (64%) rename deps/cares/src/lib/dsa/{ares__htable.h => ares_htable.h} (76%) rename deps/cares/src/lib/dsa/{ares__htable_asvp.c => ares_htable_asvp.c} (62%) create mode 100644 deps/cares/src/lib/dsa/ares_htable_dict.c rename deps/cares/src/lib/dsa/{ares__htable_strvp.c => ares_htable_strvp.c} (54%) rename deps/cares/src/lib/dsa/{ares__htable_szvp.c => ares_htable_szvp.c} (61%) create mode 100644 deps/cares/src/lib/dsa/ares_htable_vpstr.c rename deps/cares/src/lib/dsa/{ares__htable_vpvp.c => ares_htable_vpvp.c} (60%) rename deps/cares/src/lib/dsa/{ares__llist.c => ares_llist.c} (52%) rename deps/cares/src/lib/dsa/{ares__slist.c => ares_slist.c} (70%) rename deps/cares/src/lib/dsa/{ares__slist.h => ares_slist.h} (75%) rename deps/cares/src/lib/{dsa/ares__array.h => include/ares_array.h} (61%) rename deps/cares/src/lib/{str/ares__buf.h => include/ares_buf.h} (60%) rename deps/cares/src/lib/{dsa/ares__htable_asvp.h => include/ares_htable_asvp.h} (72%) create mode 100644 deps/cares/src/lib/include/ares_htable_dict.h rename deps/cares/src/lib/{dsa/ares__htable_strvp.h => include/ares_htable_strvp.h} (66%) rename deps/cares/src/lib/{dsa/ares__htable_szvp.h => include/ares_htable_szvp.h} (72%) create mode 100644 deps/cares/src/lib/include/ares_htable_vpstr.h rename deps/cares/src/lib/{dsa/ares__htable_vpvp.h => include/ares_htable_vpvp.h} (72%) rename deps/cares/src/lib/{dsa/ares__llist.h => include/ares_llist.h} (68%) rename deps/cares/src/lib/{str/ares_strcasecmp.h => include/ares_mem.h} (75%) create mode 100644 deps/cares/src/lib/include/ares_str.h rename deps/cares/src/lib/str/{ares__buf.c => ares_buf.c} (55%) delete mode 100644 deps/cares/src/lib/str/ares_str.h delete mode 100644 deps/cares/src/lib/util/ares__threads.h rename deps/cares/src/lib/util/{ares__iface_ips.c => ares_iface_ips.c} (69%) rename deps/cares/src/lib/util/{ares__iface_ips.h => ares_iface_ips.h} (77%) rename deps/cares/src/lib/{str/ares_strcasecmp.c => util/ares_math.h} (53%) rename deps/cares/src/lib/{ares_platform.h => util/ares_rand.h} (72%) rename deps/cares/src/lib/util/{ares__threads.c => ares_threads.c} (64%) create mode 100644 deps/cares/src/lib/util/ares_threads.h create mode 100644 deps/cares/src/lib/util/ares_time.h rename deps/cares/src/lib/util/{ares__timeval.c => ares_timeval.c} (96%) create mode 100644 deps/cares/src/lib/util/ares_uri.c create mode 100644 deps/cares/src/lib/util/ares_uri.h diff --git a/deps/cares/CMakeLists.txt b/deps/cares/CMakeLists.txt index 9862406495f4fa..39963f1e8c3cb4 100644 --- a/deps/cares/CMakeLists.txt +++ b/deps/cares/CMakeLists.txt @@ -12,7 +12,7 @@ INCLUDE (CheckCSourceCompiles) INCLUDE (CheckStructHasMember) INCLUDE (CheckLibraryExists) -PROJECT (c-ares LANGUAGES C VERSION "1.33.1" ) +PROJECT (c-ares LANGUAGES C VERSION "1.34.1" ) # Set this version before release SET (CARES_VERSION "${PROJECT_VERSION}") @@ -30,7 +30,7 @@ INCLUDE (GNUInstallDirs) # include this *AFTER* PROJECT(), otherwise paths are w # For example, a version of 4:0:2 would generate output such as: # libname.so -> libname.so.2 # libname.so.2 -> libname.so.2.2.0 -SET (CARES_LIB_VERSIONINFO "20:1:18") +SET (CARES_LIB_VERSIONINFO "21:1:19") OPTION (CARES_STATIC "Build as a static library" OFF) @@ -406,7 +406,7 @@ ENDIF () CHECK_STRUCT_HAS_MEMBER("struct sockaddr_in6" sin6_scope_id "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID LANGUAGE C) - +CHECK_SYMBOL_EXISTS (memmem "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_MEMMEM) CHECK_SYMBOL_EXISTS (closesocket "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_CLOSESOCKET) CHECK_SYMBOL_EXISTS (CloseSocket "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_CLOSESOCKET_CAMEL) CHECK_SYMBOL_EXISTS (connect "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_CONNECT) @@ -443,6 +443,7 @@ CHECK_SYMBOL_EXISTS (IoctlSocket "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_IOCTLSO CHECK_SYMBOL_EXISTS (recv "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_RECV) CHECK_SYMBOL_EXISTS (recvfrom "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_RECVFROM) CHECK_SYMBOL_EXISTS (send "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SEND) +CHECK_SYMBOL_EXISTS (sendto "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SENDTO) CHECK_SYMBOL_EXISTS (setsockopt "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SETSOCKOPT) CHECK_SYMBOL_EXISTS (socket "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SOCKET) CHECK_SYMBOL_EXISTS (strcasecmp "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_STRCASECMP) @@ -500,7 +501,10 @@ IF (CARES_THREADS) CARES_EXTRAINCLUDE_IFSET (HAVE_PTHREAD_NP_H pthread_np.h) CHECK_SYMBOL_EXISTS (pthread_init "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_PTHREAD_INIT) # Make sure libcares.pc.cmake knows about thread libraries on static builds - LIST (APPEND CARES_DEPENDENT_LIBS ${CMAKE_THREAD_LIBS_INIT}) + # The variable set by FIND_PACKAGE(Threads) has a -l prefix on it, we need + # to strip that first since CARES_DEPENDENT_LIBS doesn't expect that. + STRING (REPLACE "-l" "" CARES_THREAD_LIBRARY "${CMAKE_THREAD_LIBS_INIT}") + LIST (APPEND CARES_DEPENDENT_LIBS ${CARES_THREAD_LIBRARY}) ELSE () MESSAGE (WARNING "Threading support not found, disabling...") SET (CARES_THREADS OFF) @@ -688,7 +692,6 @@ IF (HAVE_ARPA_NAMESER_COMPAT_H) SET (CARES_HAVE_ARPA_NAMESER_COMPAT_H 1) ENDIF() - # Coverage IF (CARES_COVERAGE) # set compiler flags @@ -755,9 +758,6 @@ IF (CARES_BUILD_TESTS OR CARES_BUILD_CONTAINER_TESTS) ADD_SUBDIRECTORY (test) ENDIF () - - - # Export targets IF (CARES_INSTALL) SET (CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") @@ -781,7 +781,6 @@ IF (CARES_INSTALL) INSTALL (FILES "${CMAKE_CURRENT_BINARY_DIR}/libcares.pc" COMPONENT Devel DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") ENDIF () - # Legacy chain-building variables (provided for compatibility with old code). # Don't use these, external code should be updated to refer to the aliases directly (e.g., Cares::cares). SET (CARES_FOUND 1 CACHE INTERNAL "CARES LIBRARY FOUND") diff --git a/deps/cares/Makefile.Watcom b/deps/cares/Makefile.Watcom index 96ffedb1eb3301..1e445f287a54cc 100644 --- a/deps/cares/Makefile.Watcom +++ b/deps/cares/Makefile.Watcom @@ -43,7 +43,8 @@ CP = copy CFLAGS = -3r -mf -hc -zff -zgf -zq -zm -zc -s -fr=con -w2 -fpi -oilrtfm -aa & -wcd=201 -bt=nt -d+ -dCARES_BUILDING_LIBRARY & - -dNTDDI_VERSION=0x06020000 -I. -I.\include -I.\src\lib $(SYS_INCL) + -dNTDDI_VERSION=0x06020000 -I. -I.\include -I.\src\lib -I.\src\lib\include & + $(SYS_INCL) LFLAGS = option quiet, map, caseexact, eliminate @@ -124,7 +125,7 @@ $(LIBNAME).lib: $(OBJS_STAT) $(LIB_ARG) $(OBJ_BASE)\tools\ares_getopt.obj: $(CC) $(CFLAGS) -DCARES_STATICLIB .\src\tools\ares_getopt.c -fo=$^@ -adig.exe: $(OBJ_BASE)\tools\ares_getopt.obj $(LIBNAME).lib +adig.exe: $(LIBNAME).lib $(CC) $(CFLAGS) src\tools\adig.c -fo=$(OBJ_BASE)\tools\adig.obj $(LD) name $^@ system nt $(LFLAGS) file { $(OBJ_BASE)\tools\adig.obj $[@ } library $]@, ws2_32.lib, iphlpapi.lib diff --git a/deps/cares/Makefile.dj b/deps/cares/Makefile.dj index 69b3ca31851b32..8dca20cb42b4c3 100644 --- a/deps/cares/Makefile.dj +++ b/deps/cares/Makefile.dj @@ -23,7 +23,7 @@ VPATH = src/lib src/tools WATT32_ROOT = $(realpath $(WATT_ROOT)) WATT32_LIB = $(WATT32_ROOT)/lib/libwatt.a -CFLAGS = -g -O2 -I./include -I./src/lib \ +CFLAGS = -g -O2 -I./include -I./src/lib -I./src/lib/include \ -I$(WATT32_ROOT)/inc \ -Wall \ -Wextra \ diff --git a/deps/cares/Makefile.m32 b/deps/cares/Makefile.m32 index 36ae674c635194..7bd85165978208 100644 --- a/deps/cares/Makefile.m32 +++ b/deps/cares/Makefile.m32 @@ -19,7 +19,7 @@ RANLIB = $(CROSSPREFIX)ranlib #RM = rm -f CP = cp -afv -CFLAGS = $(CARES_CFLAG_EXTRAS) -O2 -Wall -I./include -I./src/lib -D_WIN32_WINNT=0x0602 +CFLAGS = $(CARES_CFLAG_EXTRAS) -O2 -Wall -I./include -I./src/lib -I./src/lib/include -D_WIN32_WINNT=0x0602 CFLAGS += -DCARES_STATICLIB LDFLAGS = $(CARES_LDFLAG_EXTRAS) -s LIBS = -lws2_32 -liphlpapi diff --git a/deps/cares/Makefile.msvc b/deps/cares/Makefile.msvc index 619c2d39274521..8395d1a7d67728 100644 --- a/deps/cares/Makefile.msvc +++ b/deps/cares/Makefile.msvc @@ -192,7 +192,7 @@ EX_LIBS_DBG = ws2_32.lib advapi32.lib kernel32.lib iphlpapi.lib CC_CMD_REL = cl.exe /nologo $(RTLIB) /DNDEBUG /O2 CC_CMD_DBG = cl.exe /nologo $(RTLIBD) /D_DEBUG /Od /Zi /RTCsu -CC_CFLAGS = $(CFLAGS) /D_REENTRANT /I.\src\lib /I.\include /W3 /EHsc /FD +CC_CFLAGS = $(CFLAGS) /D_REENTRANT /I.\src\lib /I.\include /I.\src\lib\include /W3 /EHsc /FD RC_CMD_REL = rc.exe /l 0x409 /d "NDEBUG" RC_CMD_DBG = rc.exe /l 0x409 /d "_DEBUG" @@ -344,15 +344,6 @@ PROG3_OBJS = $(PROG3_OBJS) $(PROG3_OBJDIR)\ahost.obj {$(SRCDIR)\src\tools}.c{$(PROG3_OBJDIR)}.obj: $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(PROG3_OBJDIR)\ /c $< -# Hack Alert! we reference ../lib/str files in the Makefile.inc for tools as they -# share some files with the library itself. We need to hack around that here. - -{$(SRCDIR)\src\lib\str}.c{$(PROG2_OBJDIR)\..\lib\str}.obj: - $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$(PROG2_OBJDIR)\str\$(@F) /Fd$(PROG2_OBJDIR)\str\ /c $< - -{$(SRCDIR)\src\lib\str}.c{$(PROG3_OBJDIR)\..\lib\str}.obj: - $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$(PROG3_OBJDIR)\str\$(@F) /Fd$(PROG3_OBJDIR)\str\ /c $< - # ------------------------------------------------------------- # # ------------------------------------------------------------- # # Default target when no CFG library type has been specified, # diff --git a/deps/cares/README.md b/deps/cares/README.md index c32d0677c83419..6566c9fe6aa18e 100644 --- a/deps/cares/README.md +++ b/deps/cares/README.md @@ -82,7 +82,7 @@ to sign releases): ```bash gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys 27EDEAF22F3ABCEB50DB9A125CC908FDB71E12C2 # Daniel Stenberg -gpg --keyserver hkps://keys.openpgp.org --recv-keys DA7D64E4C82C6294CB73A20E22E3D13B5411B7CA # Brad House +gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys DA7D64E4C82C6294CB73A20E22E3D13B5411B7CA # Brad House ``` ### Verifying signatures @@ -109,8 +109,11 @@ gpg: binary signature, digest algorithm SHA512, key algorithm rsa2048 ``` ## Features + +See [Features](FEATURES.md) + ### Supported RFCs and Proposals -- [RFC1035](https://datatracker.ietf.org/doc/html/rfc7873). +- [RFC1035](https://datatracker.ietf.org/doc/html/rfc1035). Initial/Base DNS RFC - [RFC2671](https://datatracker.ietf.org/doc/html/rfc2671), [RFC6891](https://datatracker.ietf.org/doc/html/rfc6891). @@ -151,3 +154,5 @@ gpg: binary signature, digest algorithm SHA512, key algorithm rsa2048 IPv6 address sorting as used by `ares_getaddrinfo()`. - [RFC7413](https://datatracker.ietf.org/doc/html/rfc7413). TCP FastOpen (TFO) for 0-RTT TCP Connection Resumption. +- [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986). + Uniform Resource Identifier (URI). Used for server configuration. diff --git a/deps/cares/RELEASE-NOTES.md b/deps/cares/RELEASE-NOTES.md index e9c04953dc6022..fa1db666083365 100644 --- a/deps/cares/RELEASE-NOTES.md +++ b/deps/cares/RELEASE-NOTES.md @@ -1,65 +1,60 @@ -## c-ares version 1.33.1 - August 23 2024 +## c-ares version 1.34.1 - Octover 9 2024 -This is a bugfix release. +This release fixes a packaging issue. -Bugfixes: -* Work around systemd-resolved quirk that returns unexpected codes for single - label names. Also adds test cases to validate the work around works and - will continue to work in future releases. - [PR #863](https://github.com/c-ares/c-ares/pull/863), - See Also https://github.com/systemd/systemd/issues/34101 -* Fix sysconfig ndots default value, also adds containerized test case to - prevent future regressions. - [PR #862](https://github.com/c-ares/c-ares/pull/862) -* Fix blank DNS name returning error code rather than valid record for - commands like: `adig -t SOA .`. Also adds test case to prevent future - regressions. - [9e574af](https://github.com/c-ares/c-ares/commit/9e574af) -* Fix calculation of query times > 1s. - [2b2eae7](https://github.com/c-ares/c-ares/commit/2b2eae7) -* Fix building on old Linux releases that don't have `TCP_FASTOPEN_CONNECT`. - [b7a89b9](https://github.com/c-ares/c-ares/commit/b7a89b9) -* Fix minor Android build warnings. - [PR #848](https://github.com/c-ares/c-ares/pull/848) - -Thanks go to these friendly people for their efforts and contributions for this -release: -* Brad House (@bradh352) -* Erik Lax (@eriklax) -* Hans-Christian Egtvedt (@egtvedt) -* Mikael Lindemann (@mikaellindemann) -* Nodar Chkuaselidze (@nodech) -## c-ares version 1.33.0 - August 2 2024 +## c-ares version 1.34.0 - October 9 2024 This is a feature and bugfix release. Features: -* Add DNS cookie support (RFC7873 + RFC9018) to help prevent off-path cache - poisoning attacks. [PR #833](https://github.com/c-ares/c-ares/pull/833) -* Implement TCP FastOpen (TFO) RFC7413, which will make TCP reconnects 0-RTT - on supported systems. [PR #840](https://github.com/c-ares/c-ares/pull/840) +* adig: read arguments from adigrc. + [PR #856](https://github.com/c-ares/c-ares/pull/856) +* Add new pending write callback optimization via `ares_set_pending_write_cb`. + [PR #857](https://github.com/c-ares/c-ares/pull/857) +* New function `ares_process_fds()`. + [PR #875](https://github.com/c-ares/c-ares/pull/875) +* Failed servers should be probed rather than redirecting queries which could + cause unexpected latency. + [PR #877](https://github.com/c-ares/c-ares/pull/877) +* adig: rework command line arguments to mimic dig from bind. + [PR #890](https://github.com/c-ares/c-ares/pull/890) +* Add new method for overriding network functions + `ares_set_socket_function_ex()` to properly support all new functionality. + [PR #894](https://github.com/c-ares/c-ares/pull/894) +* Fix regression with custom socket callbacks due to DNS cookie support. + [PR #895](https://github.com/c-ares/c-ares/pull/895) +* ares_socket: set IP_BIND_ADDRESS_NO_PORT on ares_set_local_ip* tcp sockets + [PR #887](https://github.com/c-ares/c-ares/pull/887) +* URI parser/writer for ares_set_servers_csv()/ares_get_servers_csv(). + [PR #882](https://github.com/c-ares/c-ares/pull/882) Changes: -* Reorganize source tree. [PR #822](https://github.com/c-ares/c-ares/pull/822) -* Refactoring of connection handling to prevent code duplication. - [PR #839](https://github.com/c-ares/c-ares/pull/839) -* New dynamic array data structure to prevent simple logic flaws in array - handling in various code paths. - [PR #841](https://github.com/c-ares/c-ares/pull/841) +* Connection handling modularization. + [PR #857](https://github.com/c-ares/c-ares/pull/857), + [PR #876](https://github.com/c-ares/c-ares/pull/876) +* Expose library/utility functions to tools. + [PR #860](https://github.com/c-ares/c-ares/pull/860) +* Remove `ares__` prefix, just use `ares_` for internal functions. + [PR #872](https://github.com/c-ares/c-ares/pull/872) + Bugfixes: -* `ares_destroy()` race condition during shutdown due to missing lock. - [PR #831](https://github.com/c-ares/c-ares/pull/831) -* Android: Preserve thread name after attaching it to JVM. - [PR #838](https://github.com/c-ares/c-ares/pull/838) -* Windows UWP (Store) support fix. - [PR #845](https://github.com/c-ares/c-ares/pull/845) +* fix: potential WIN32_LEAN_AND_MEAN redefinition. + [PR #869](https://github.com/c-ares/c-ares/pull/869) +* Fix googletest v1.15 compatibility. + [PR #874](https://github.com/c-ares/c-ares/pull/874) +* Fix pkgconfig thread dependencies. + [PR #884](https://github.com/c-ares/c-ares/pull/884) Thanks go to these friendly people for their efforts and contributions for this release: * Brad House (@bradh352) -* Yauheni Khnykin (@Hsilgos) +* Cristian Rodríguez (@crrodriguez) +* Georg (@tacerus) +* @lifenjoiner +* Shelley Vohr (@codebytere) +* 前进,前进,进 (@leleliu008) diff --git a/deps/cares/aminclude_static.am b/deps/cares/aminclude_static.am index 538a810c9eb0ee..7cc94c822cf773 100644 --- a/deps/cares/aminclude_static.am +++ b/deps/cares/aminclude_static.am @@ -1,6 +1,6 @@ # aminclude_static.am generated automatically by Autoconf -# from AX_AM_MACROS_STATIC on Fri Aug 23 09:37:25 EDT 2024 +# from AX_AM_MACROS_STATIC on Wed Oct 9 20:58:25 EDT 2024 # Code coverage diff --git a/deps/cares/cares.gyp b/deps/cares/cares.gyp index 6b6d520f9ee872..87898f5610d56c 100644 --- a/deps/cares/cares.gyp +++ b/deps/cares/cares.gyp @@ -6,16 +6,14 @@ 'include/ares_dns_record.h', 'include/ares_nameser.h', 'include/ares_version.h', - 'src/lib/ares__addrinfo2hostent.c', - 'src/lib/ares__addrinfo_localhost.c', - 'src/lib/ares__close_sockets.c', - 'src/lib/ares__hosts_file.c', - 'src/lib/ares__parse_into_addrinfo.c', - 'src/lib/ares__socket.c', - 'src/lib/ares__sortaddrinfo.c', + 'src/lib/ares_addrinfo2hostent.c', + 'src/lib/ares_addrinfo_localhost.c', 'src/lib/ares_android.c', 'src/lib/ares_android.h', 'src/lib/ares_cancel.c', + 'src/lib/ares_close_sockets.c', + 'src/lib/ares_conn.c', + 'src/lib/ares_conn.h', 'src/lib/ares_cookie.c', 'src/lib/ares_data.c', 'src/lib/ares_data.h', @@ -29,43 +27,43 @@ 'src/lib/ares_gethostbyaddr.c', 'src/lib/ares_gethostbyname.c', 'src/lib/ares_getnameinfo.c', + 'src/lib/ares_hosts_file.c', 'src/lib/ares_inet_net_pton.h', 'src/lib/ares_init.c', 'src/lib/ares_ipv6.h', 'src/lib/ares_library_init.c', 'src/lib/ares_metrics.c', 'src/lib/ares_options.c', - 'src/lib/ares_platform.c', - 'src/lib/ares_platform.h', + 'src/lib/ares_parse_into_addrinfo.c', 'src/lib/ares_private.h', 'src/lib/ares_process.c', 'src/lib/ares_qcache.c', 'src/lib/ares_query.c', 'src/lib/ares_search.c', 'src/lib/ares_send.c', + 'src/lib/ares_set_socket_functions.c', 'src/lib/ares_setup.h', + 'src/lib/ares_socket.c', + 'src/lib/ares_socket.h', + 'src/lib/ares_sortaddrinfo.c', 'src/lib/ares_strerror.c', 'src/lib/ares_sysconfig.c', 'src/lib/ares_sysconfig_files.c', 'src/lib/ares_timeout.c', 'src/lib/ares_update_servers.c', 'src/lib/ares_version.c', - 'src/lib/dsa/ares__array.c', - 'src/lib/dsa/ares__array.h', - 'src/lib/dsa/ares__htable.c', - 'src/lib/dsa/ares__htable.h', - 'src/lib/dsa/ares__htable_asvp.c', - 'src/lib/dsa/ares__htable_asvp.h', - 'src/lib/dsa/ares__htable_strvp.c', - 'src/lib/dsa/ares__htable_strvp.h', - 'src/lib/dsa/ares__htable_szvp.c', - 'src/lib/dsa/ares__htable_szvp.h', - 'src/lib/dsa/ares__htable_vpvp.c', - 'src/lib/dsa/ares__htable_vpvp.h', - 'src/lib/dsa/ares__llist.c', - 'src/lib/dsa/ares__llist.h', - 'src/lib/dsa/ares__slist.c', - 'src/lib/dsa/ares__slist.h', + 'src/lib/dsa/ares_array.c', + 'src/lib/dsa/ares_htable.c', + 'src/lib/dsa/ares_htable.h', + 'src/lib/dsa/ares_htable_asvp.c', + 'src/lib/dsa/ares_htable_dict.c', + 'src/lib/dsa/ares_htable_strvp.c', + 'src/lib/dsa/ares_htable_szvp.c', + 'src/lib/dsa/ares_htable_vpstr.c', + 'src/lib/dsa/ares_htable_vpvp.c', + 'src/lib/dsa/ares_llist.c', + 'src/lib/dsa/ares_slist.c', + 'src/lib/dsa/ares_slist.h', 'src/lib/event/ares_event.h', 'src/lib/event/ares_event_configchg.c', 'src/lib/event/ares_event_epoll.c', @@ -76,6 +74,17 @@ 'src/lib/event/ares_event_wake_pipe.c', 'src/lib/event/ares_event_win32.c', 'src/lib/event/ares_event_win32.h', + 'src/lib/include/ares_array.h', + 'src/lib/include/ares_buf.h', + 'src/lib/include/ares_htable_asvp.h', + 'src/lib/include/ares_htable_dict.h', + 'src/lib/include/ares_htable_strvp.h', + 'src/lib/include/ares_htable_szvp.h', + 'src/lib/include/ares_htable_vpstr.h', + 'src/lib/include/ares_htable_vpvp.h', + 'src/lib/include/ares_llist.h', + 'src/lib/include/ares_mem.h', + 'src/lib/include/ares_str.h', 'src/lib/inet_net_pton.c', 'src/lib/inet_ntop.c', 'src/lib/legacy/ares_create_query.c', @@ -102,21 +111,23 @@ 'src/lib/record/ares_dns_private.h', 'src/lib/record/ares_dns_record.c', 'src/lib/record/ares_dns_write.c', - 'src/lib/str/ares__buf.c', 'src/lib/str/ares__buf.h', + 'src/lib/str/ares_buf.c', 'src/lib/str/ares_str.c', - 'src/lib/str/ares_str.h', - 'src/lib/str/ares_strcasecmp.c', - 'src/lib/str/ares_strcasecmp.h', 'src/lib/str/ares_strsplit.c', 'src/lib/str/ares_strsplit.h', - 'src/lib/util/ares__iface_ips.c', - 'src/lib/util/ares__iface_ips.h', - 'src/lib/util/ares__threads.c', - 'src/lib/util/ares__threads.h', - 'src/lib/util/ares__timeval.c', + 'src/lib/util/ares_iface_ips.c', + 'src/lib/util/ares_iface_ips.h', 'src/lib/util/ares_math.c', + 'src/lib/util/ares_math.h', 'src/lib/util/ares_rand.c', + 'src/lib/util/ares_rand.h', + 'src/lib/util/ares_threads.c', + 'src/lib/util/ares_threads.h', + 'src/lib/util/ares_time.h', + 'src/lib/util/ares_timeval.c', + 'src/lib/util/ares_uri.c', + 'src/lib/util/ares_uri.h', 'src/tools/ares_getopt.c', 'src/tools/ares_getopt.h', ], @@ -163,7 +174,7 @@ { 'target_name': 'cares', 'type': '<(library)', - 'include_dirs': [ 'include', 'src/lib' ], + 'include_dirs': [ 'include', 'src/lib', 'src/lib/include' ], 'direct_dependent_settings': { 'include_dirs': [ 'include' ], 'cflags': [ '-Wno-error=deprecated-declarations' ], diff --git a/deps/cares/configure b/deps/cares/configure index 74e9741fe6ee7a..635872c9f18e1a 100755 --- a/deps/cares/configure +++ b/deps/cares/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.72 for c-ares 1.33.1. +# Generated by GNU Autoconf 2.72 for c-ares 1.34.1. # # Report bugs to . # @@ -614,8 +614,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='c-ares' PACKAGE_TARNAME='c-ares' -PACKAGE_VERSION='1.33.1' -PACKAGE_STRING='c-ares 1.33.1' +PACKAGE_VERSION='1.34.1' +PACKAGE_STRING='c-ares 1.34.1' PACKAGE_BUGREPORT='c-ares mailing list: http://lists.haxx.se/listinfo/c-ares' PACKAGE_URL='' @@ -834,8 +834,10 @@ enable_dependency_tracking enable_silent_rules enable_shared enable_static +enable_pic with_pic enable_fast_install +enable_aix_soname with_aix_soname with_gnu_ld with_sysroot @@ -1421,7 +1423,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -'configure' configures c-ares 1.33.1 to adapt to many kinds of systems. +'configure' configures c-ares 1.34.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1492,7 +1494,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of c-ares 1.33.1:";; + short | recursive ) echo "Configuration of c-ares 1.34.1:";; esac cat <<\_ACEOF @@ -1508,8 +1510,13 @@ Optional Features: --disable-silent-rules verbose build output (undo: "make V=0") --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] + --enable-pic[=PKGS] try to use only PIC/non-PIC objects [default=use + both] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] + --enable-aix-soname=aix|svr4|both + shared library versioning (aka "SONAME") variant to + provide on AIX, [default=aix]. --disable-libtool-lock avoid locking (might break parallel builds) --disable-warnings Disable strict compiler warnings --disable-symbol-hiding Disable symbol hiding. Enabled by default if the @@ -1528,11 +1535,6 @@ Optional Features: Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use - both] - --with-aix-soname=aix|svr4|both - shared library versioning (aka "SONAME") variant to - provide on AIX, [default=aix]. --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). @@ -1633,7 +1635,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -c-ares configure 1.33.1 +c-ares configure 1.34.1 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. @@ -2277,7 +2279,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by c-ares $as_me 1.33.1, which was +It was created by c-ares $as_me 1.34.1, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw @@ -3269,7 +3271,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -CARES_VERSION_INFO="20:1:18" +CARES_VERSION_INFO="21:1:19" @@ -6190,7 +6192,7 @@ fi # Define the identity of the package. PACKAGE='c-ares' - VERSION='1.33.1' + VERSION='1.34.1' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -6523,8 +6525,8 @@ esac -macro_version='2.4.7' -macro_revision='2.4.7' +macro_version='2.5.3' +macro_revision='2.5.3' @@ -7035,7 +7037,7 @@ if test yes = "$GCC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 printf %s "checking for ld used by $CC... " >&6; } case $host in - *-*-mingw*) + *-*-mingw* | *-*-windows*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) @@ -7164,7 +7166,7 @@ else # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in - mingw*) lt_bad_file=conftest.nm/nofile ;; + mingw* | windows*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in @@ -7397,7 +7399,7 @@ else case e in #( lt_cv_sys_max_cmd_len=-1; ;; - cygwin* | mingw* | cegcc*) + cygwin* | mingw* | windows* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, @@ -7419,7 +7421,7 @@ else case e in #( lt_cv_sys_max_cmd_len=8192; ;; - bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) + darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` @@ -7562,7 +7564,7 @@ else case e in #( e) case $host in *-*-mingw* ) case $build in - *-*-mingw* ) # actually msys + *-*-mingw* | *-*-windows* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) @@ -7575,7 +7577,7 @@ else case e in #( ;; *-*-cygwin* ) case $build in - *-*-mingw* ) # actually msys + *-*-mingw* | *-*-windows* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) @@ -7611,9 +7613,9 @@ else case e in #( e) #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in - *-*-mingw* ) + *-*-mingw* | *-*-windows* ) case $build in - *-*-mingw* ) # actually msys + *-*-mingw* | *-*-windows* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac @@ -7649,7 +7651,7 @@ case $reload_flag in esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in - cygwin* | mingw* | pw32* | cegcc*) + cygwin* | mingw* | windows* | pw32* | cegcc*) if test yes != "$GCC"; then reload_cmds=false fi @@ -7671,9 +7673,8 @@ esac -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}file", so it can be a program name with args. -set dummy ${ac_tool_prefix}file; ac_word=$2 +# Extract the first word of "file", so it can be a program name with args. +set dummy file; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FILECMD+y} @@ -7694,7 +7695,7 @@ do esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_FILECMD="${ac_tool_prefix}file" + ac_cv_prog_FILECMD="file" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi @@ -7702,6 +7703,7 @@ done done IFS=$as_save_IFS + test -z "$ac_cv_prog_FILECMD" && ac_cv_prog_FILECMD=":" fi ;; esac fi @@ -7715,66 +7717,6 @@ printf "%s\n" "no" >&6; } fi -fi -if test -z "$ac_cv_prog_FILECMD"; then - ac_ct_FILECMD=$FILECMD - # Extract the first word of "file", so it can be a program name with args. -set dummy file; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_FILECMD+y} -then : - printf %s "(cached) " >&6 -else case e in #( - e) if test -n "$ac_ct_FILECMD"; then - ac_cv_prog_ac_ct_FILECMD="$ac_ct_FILECMD" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_FILECMD="file" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi ;; -esac -fi -ac_ct_FILECMD=$ac_cv_prog_ac_ct_FILECMD -if test -n "$ac_ct_FILECMD"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FILECMD" >&5 -printf "%s\n" "$ac_ct_FILECMD" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_ct_FILECMD" = x; then - FILECMD=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - FILECMD=$ac_ct_FILECMD - fi -else - FILECMD="$ac_cv_prog_FILECMD" -fi - @@ -7906,7 +7848,6 @@ lt_cv_deplibs_check_method='unknown' # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure @@ -7933,7 +7874,7 @@ cygwin*) lt_cv_file_magic_cmd='func_win32_libid' ;; -mingw* | pw32*) +mingw* | windows* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. @@ -7942,7 +7883,7 @@ mingw* | pw32*) lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64|pe-aarch64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; @@ -8033,7 +7974,7 @@ newos6*) lt_cv_deplibs_check_method=pass_all ;; -openbsd* | bitrig*) +openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else @@ -8101,7 +8042,7 @@ file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in - mingw* | pw32*) + mingw* | windows* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else @@ -8257,7 +8198,7 @@ else case e in #( e) lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in -cygwin* | mingw* | pw32* | cegcc*) +cygwin* | mingw* | windows* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in @@ -8288,6 +8229,110 @@ test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_RANLIB+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi ;; +esac +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +printf "%s\n" "$RANLIB" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_RANLIB+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi ;; +esac +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +printf "%s\n" "$ac_ct_RANLIB" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + if test -n "$ac_tool_prefix"; then for ac_prog in ar do @@ -8409,7 +8454,7 @@ fi # Use ARFLAGS variable as AR's operation code to sync the variable naming with # Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have -# higher priority because thats what people were doing historically (setting +# higher priority because that's what people were doing historically (setting # ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS # variable obsoleted/removed. @@ -8601,109 +8646,6 @@ test -z "$STRIP" && STRIP=: -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_RANLIB+y} -then : - printf %s "(cached) " >&6 -else case e in #( - e) if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi ;; -esac -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -printf "%s\n" "$RANLIB" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_RANLIB+y} -then : - printf %s "(cached) " >&6 -else case e in #( - e) if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi ;; -esac -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -printf "%s\n" "$ac_ct_RANLIB" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi test -z "$RANLIB" && RANLIB=: @@ -8718,15 +8660,8 @@ old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then - case $host_os in - bitrig* | openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" - ;; - esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in @@ -8806,7 +8741,7 @@ case $host_os in aix*) symcode='[BCDT]' ;; -cygwin* | mingw* | pw32* | cegcc*) +cygwin* | mingw* | windows* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) @@ -8821,7 +8756,7 @@ osf*) symcode='[BCDEGQRST]' ;; solaris*) - symcode='[BDRT]' + symcode='[BCDRT]' ;; sco3.2v5*) symcode='[DT]' @@ -8885,7 +8820,7 @@ $lt_c_name_lib_hook\ # Handle CRLF in mingw tool chain opt_cr= case $build_os in -mingw*) +mingw* | windows*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac @@ -8936,7 +8871,7 @@ void nm_test_func(void){} #ifdef __cplusplus } #endif -int main(){nm_test_var='a';nm_test_func();return(0);} +int main(void){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 @@ -9121,7 +9056,9 @@ lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` + # Trim trailing / since we'll always append absolute paths and we want + # to avoid //, if only for less confusing output for the user. + lt_sysroot=`$CC --print-sysroot 2>/dev/null | $SED 's:/\+$::'` fi ;; #( /*) @@ -9338,7 +9275,7 @@ mips64*-*linux*) ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) +s390*-*linux*|s390*-*tpf*|sparc*-*linux*|x86_64-gnu*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when @@ -9357,7 +9294,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; - x86_64-*linux*) + x86_64-*linux*|x86_64-gnu*) case `$FILECMD conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" @@ -9386,7 +9323,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; - x86_64-*linux*) + x86_64-*linux*|x86_64-gnu*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) @@ -9607,23 +9544,23 @@ fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if test ${lt_cv_path_mainfest_tool+y} +if test ${lt_cv_path_manifest_tool+y} then : printf %s "(cached) " >&6 else case e in #( - e) lt_cv_path_mainfest_tool=no + e) lt_cv_path_manifest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes + lt_cv_path_manifest_tool=yes fi rm -f conftest* ;; esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } -if test yes != "$lt_cv_path_mainfest_tool"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_manifest_tool" >&5 +printf "%s\n" "$lt_cv_path_manifest_tool" >&6; } +if test yes != "$lt_cv_path_manifest_tool"; then MANIFEST_TOOL=: fi @@ -10218,6 +10155,45 @@ fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } + # Feature test to disable chained fixups since it is not + # compatible with '-undefined dynamic_lookup' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -no_fixup_chains linker flag" >&5 +printf %s "checking for -no_fixup_chains linker flag... " >&6; } +if test ${lt_cv_support_no_fixup_chains+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -Wl,-no_fixup_chains" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + lt_cv_support_no_fixup_chains=yes +else case e in #( + e) lt_cv_support_no_fixup_chains=no + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + + ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_support_no_fixup_chains" >&5 +printf "%s\n" "$lt_cv_support_no_fixup_chains" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 printf %s "checking for -exported_symbols_list linker flag... " >&6; } if test ${lt_cv_ld_exported_symbols_list+y} @@ -10272,7 +10248,7 @@ _LT_EOF echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF -int main() { return 0;} +int main(void) { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err @@ -10301,7 +10277,11 @@ printf "%s\n" "$lt_cv_ld_force_load" >&6; } 10.[012],*|,*powerpc*-darwin[5-8]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; *) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' + if test yes = "$lt_cv_support_no_fixup_chains"; then + as_fn_append _lt_dar_allow_undefined ' $wl-no_fixup_chains' + fi + ;; esac ;; esac @@ -10382,7 +10362,7 @@ func_stripname_cnf () enable_win32_dll=yes case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) +*-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-cegcc*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 @@ -10788,31 +10768,54 @@ fi - -# Check whether --with-pic was given. + # Check whether --enable-pic was given. +if test ${enable_pic+y} +then : + enableval=$enable_pic; lt_p=${PACKAGE-default} + case $enableval in + yes|no) pic_mode=$enableval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else case e in #( + e) # Check whether --with-pic was given. if test ${with_pic+y} then : withval=$with_pic; lt_p=${PACKAGE-default} - case $withval in - yes|no) pic_mode=$withval ;; - *) - pic_mode=default - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for lt_pkg in $withval; do - IFS=$lt_save_ifs - if test "X$lt_pkg" = "X$lt_p"; then - pic_mode=yes - fi - done - IFS=$lt_save_ifs - ;; - esac + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac else case e in #( e) pic_mode=default ;; esac fi + ;; +esac +fi + @@ -10857,18 +10860,29 @@ case $host,$enable_shared in power*-*-aix[5-9]*,yes) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 printf %s "checking which variant of shared library versioning to provide... " >&6; } - -# Check whether --with-aix-soname was given. + # Check whether --enable-aix-soname was given. +if test ${enable_aix_soname+y} +then : + enableval=$enable_aix_soname; case $enableval in + aix|svr4|both) + ;; + *) + as_fn_error $? "Unknown argument to --enable-aix-soname" "$LINENO" 5 + ;; + esac + lt_cv_with_aix_soname=$enable_aix_soname +else case e in #( + e) # Check whether --with-aix-soname was given. if test ${with_aix_soname+y} then : withval=$with_aix_soname; case $withval in - aix|svr4|both) - ;; - *) - as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 - ;; - esac - lt_cv_with_aix_soname=$with_aix_soname + aix|svr4|both) + ;; + *) + as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname else case e in #( e) if test ${lt_cv_with_aix_soname+y} then : @@ -10876,12 +10890,16 @@ then : else case e in #( e) lt_cv_with_aix_soname=aix ;; esac +fi + ;; +esac fi - with_aix_soname=$lt_cv_with_aix_soname ;; + enable_aix_soname=$lt_cv_with_aix_soname ;; esac fi + with_aix_soname=$enable_aix_soname { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 printf "%s\n" "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then @@ -11197,7 +11215,7 @@ objext=$objext lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' +lt_simple_link_test_code='int main(void){return(0);}' @@ -11339,7 +11357,7 @@ lt_prog_compiler_static= # PIC is the default for these OSes. ;; - mingw* | cygwin* | pw32* | os2* | cegcc*) + mingw* | windows* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style @@ -11442,7 +11460,7 @@ lt_prog_compiler_static= esac ;; - mingw* | cygwin* | pw32* | os2* | cegcc*) + mingw* | windows* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' @@ -11483,6 +11501,12 @@ lt_prog_compiler_static= lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; + *flang* | ftn) + # Flang compiler. + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) @@ -11954,7 +11978,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries extract_expsyms_cmds= case $host_os in - cygwin* | mingw* | pw32* | cegcc*) + cygwin* | mingw* | windows* | pw32* | cegcc*) # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. @@ -11966,7 +11990,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC) with_gnu_ld=yes ;; - openbsd* | bitrig*) + openbsd*) with_gnu_ld=no ;; esac @@ -12069,7 +12093,7 @@ _LT_EOF fi ;; - cygwin* | mingw* | pw32* | cegcc*) + cygwin* | mingw* | windows* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' @@ -12125,7 +12149,7 @@ _LT_EOF cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' - old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes file_list_spec='@' ;; @@ -12616,7 +12640,7 @@ fi export_dynamic_flag_spec=-rdynamic ;; - cygwin* | mingw* | pw32* | cegcc*) + cygwin* | mingw* | windows* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. # hardcode_libdir_flag_spec is actually meaningless, as there is @@ -12633,14 +12657,14 @@ fi # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_cmds='$CC -Fe $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + $CC -Fe $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' @@ -12949,7 +12973,7 @@ printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } *nto* | *qnx*) ;; - openbsd* | bitrig*) + openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no @@ -12992,7 +13016,7 @@ printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' - old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes file_list_spec='@' ;; @@ -13434,7 +13458,7 @@ if test yes = "$GCC"; then *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in - mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; + mingw* | windows* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` @@ -13492,7 +13516,7 @@ BEGIN {RS = " "; FS = "/|\n";} { # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + mingw* | windows* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([A-Za-z]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` @@ -13566,7 +13590,7 @@ aix[4-9]*) # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl - # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # linker flag in LDFLAGS as well, or --enable-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the @@ -13660,7 +13684,7 @@ bsdi[45]*) # libtool to hard-code these into programs ;; -cygwin* | mingw* | pw32* | cegcc*) +cygwin* | mingw* | windows* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no @@ -13671,6 +13695,19 @@ cygwin* | mingw* | pw32* | cegcc*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds + # If user builds GCC with mulitlibs enabled, + # it should just install on $(libdir) + # not on $(libdir)/../bin or 32 bits dlls would override 64 bit ones. + if test yes = $multilib; then + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + $install_prog $dir/$dlname $destdir/$dlname~ + chmod a+x $destdir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib $destdir/$dlname'\'' || exit \$?; + fi' + else postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ @@ -13680,6 +13717,7 @@ cygwin* | mingw* | pw32* | cegcc*) if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' + fi postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' @@ -13692,7 +13730,7 @@ cygwin* | mingw* | pw32* | cegcc*) sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; - mingw* | cegcc*) + mingw* | windows* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; @@ -13711,7 +13749,7 @@ cygwin* | mingw* | pw32* | cegcc*) library_names_spec='$libname.dll.lib' case $build_os in - mingw*) + mingw* | windows*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' @@ -13818,7 +13856,28 @@ freebsd* | dragonfly* | midnightbsd*) need_version=yes ;; esac + case $host_cpu in + powerpc64) + # On FreeBSD bi-arch platforms, a different variable is used for 32-bit + # binaries. See . + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int test_pointer_size[sizeof (void *) - 5]; + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : shlibpath_var=LD_LIBRARY_PATH +else case e in #( + e) shlibpath_var=LD_32_LIBRARY_PATH ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ;; + *) + shlibpath_var=LD_LIBRARY_PATH + ;; + esac case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes @@ -13959,7 +14018,7 @@ linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no - library_names_spec='$libname$release$shared_ext' + library_names_spec='$libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH @@ -13971,8 +14030,9 @@ linux*android*) hardcode_into_libs=yes dynamic_linker='Android linker' - # Don't embed -rpath directories since the linker doesn't support them. - hardcode_libdir_flag_spec='-L$libdir' + # -rpath works at least for libraries that are not overridden by + # libraries installed in system locations. + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' ;; # This must be glibc/ELF. @@ -14029,7 +14089,7 @@ fi # before this can be enabled. hardcode_into_libs=yes - # Ideally, we could use ldconfig to report *all* directores which are + # Ideally, we could use ldconfig to report *all* directories which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, @@ -14086,7 +14146,7 @@ newsos6) dynamic_linker='ldqnx.so' ;; -openbsd* | bitrig*) +openbsd*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no @@ -14427,7 +14487,7 @@ else lt_cv_dlopen_self=yes ;; - mingw* | pw32* | cegcc*) + mingw* | windows* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; @@ -14800,11 +14860,11 @@ else /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); +int fnord (void) __attribute__((visibility("default"))); #endif -int fnord () { return 42; } -int main () +int fnord (void) { return 42; } +int main (void) { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; @@ -14908,11 +14968,11 @@ else /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); +int fnord (void) __attribute__((visibility("default"))); #endif -int fnord () { return 42; } -int main () +int fnord (void) { return 42; } +int main (void) { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; @@ -15373,7 +15433,7 @@ if test yes = "$GCC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 printf %s "checking for ld used by $CC... " >&6; } case $host in - *-*-mingw*) + *-*-mingw* | *-*-windows*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) @@ -15488,8 +15548,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec_CXX= @@ -15509,7 +15568,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "[-]L"' else GXX=no @@ -15809,7 +15868,7 @@ fi esac ;; - cygwin* | mingw* | pw32* | cegcc*) + cygwin* | mingw* | windows* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl* | ,icl* | no,icl*) # Native MSVC or ICC @@ -15940,7 +15999,7 @@ fi cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' - old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + old_archive_from_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes_CXX=yes file_list_spec_CXX='@' ;; @@ -16008,7 +16067,7 @@ fi # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "[-]L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then @@ -16073,7 +16132,7 @@ fi # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "[-]L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then @@ -16321,7 +16380,7 @@ fi ld_shlibs_CXX=yes ;; - openbsd* | bitrig*) + openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no @@ -16412,7 +16471,7 @@ fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "[-]L"' else # FIXME: insert proper C++ library support @@ -16496,7 +16555,7 @@ fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "[-]L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. @@ -16507,7 +16566,7 @@ fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "[-]L"' fi hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir' @@ -16650,10 +16709,11 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 case $prev$p in -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. + # Some compilers place space between "-{L,R,l}" and the path. # Remove the space. - if test x-L = "$p" || - test x-R = "$p"; then + if test x-L = x"$p" || + test x-R = x"$p" || + test x-l = x"$p"; then prev=$p continue fi @@ -16820,7 +16880,7 @@ lt_prog_compiler_static_CXX= beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) + mingw* | windows* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style @@ -16895,7 +16955,7 @@ lt_prog_compiler_static_CXX= ;; esac ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) + mingw* | windows* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' @@ -17394,7 +17454,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries pw32*) export_symbols_cmds_CXX=$ltdll_cmds ;; - cygwin* | mingw* | cegcc*) + cygwin* | mingw* | windows* | cegcc*) case $cc_basename in cl* | icl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' @@ -17623,7 +17683,7 @@ aix[4-9]*) # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl - # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # linker flag in LDFLAGS as well, or --enable-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the @@ -17717,7 +17777,7 @@ bsdi[45]*) # libtool to hard-code these into programs ;; -cygwin* | mingw* | pw32* | cegcc*) +cygwin* | mingw* | windows* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no @@ -17728,6 +17788,19 @@ cygwin* | mingw* | pw32* | cegcc*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds + # If user builds GCC with mulitlibs enabled, + # it should just install on $(libdir) + # not on $(libdir)/../bin or 32 bits dlls would override 64 bit ones. + if test yes = $multilib; then + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + $install_prog $dir/$dlname $destdir/$dlname~ + chmod a+x $destdir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib $destdir/$dlname'\'' || exit \$?; + fi' + else postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ @@ -17737,6 +17810,7 @@ cygwin* | mingw* | pw32* | cegcc*) if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' + fi postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' @@ -17748,7 +17822,7 @@ cygwin* | mingw* | pw32* | cegcc*) soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; - mingw* | cegcc*) + mingw* | windows* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; @@ -17767,7 +17841,7 @@ cygwin* | mingw* | pw32* | cegcc*) library_names_spec='$libname.dll.lib' case $build_os in - mingw*) + mingw* | windows*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' @@ -17873,7 +17947,28 @@ freebsd* | dragonfly* | midnightbsd*) need_version=yes ;; esac + case $host_cpu in + powerpc64) + # On FreeBSD bi-arch platforms, a different variable is used for 32-bit + # binaries. See . + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int test_pointer_size[sizeof (void *) - 5]; + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : shlibpath_var=LD_LIBRARY_PATH +else case e in #( + e) shlibpath_var=LD_32_LIBRARY_PATH ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ;; + *) + shlibpath_var=LD_LIBRARY_PATH + ;; + esac case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes @@ -18014,7 +18109,7 @@ linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no - library_names_spec='$libname$release$shared_ext' + library_names_spec='$libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH @@ -18026,8 +18121,9 @@ linux*android*) hardcode_into_libs=yes dynamic_linker='Android linker' - # Don't embed -rpath directories since the linker doesn't support them. - hardcode_libdir_flag_spec_CXX='-L$libdir' + # -rpath works at least for libraries that are not overridden by + # libraries installed in system locations. + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' ;; # This must be glibc/ELF. @@ -18084,7 +18180,7 @@ fi # before this can be enabled. hardcode_into_libs=yes - # Ideally, we could use ldconfig to report *all* directores which are + # Ideally, we could use ldconfig to report *all* directories which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, @@ -18141,7 +18237,7 @@ newsos6) dynamic_linker='ldqnx.so' ;; -openbsd* | bitrig*) +openbsd*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no @@ -22653,6 +22749,14 @@ fi +ac_fn_check_decl "$LINENO" "memmem" "ac_cv_have_decl_memmem" "$cares_all_includes +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_memmem" = xyes +then : + +printf "%s\n" "#define HAVE_MEMMEM 1" >>confdefs.h + +fi ac_fn_check_decl "$LINENO" "recv" "ac_cv_have_decl_recv" "$cares_all_includes " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_recv" = xyes @@ -22676,6 +22780,14 @@ then : printf "%s\n" "#define HAVE_SEND 1" >>confdefs.h +fi +ac_fn_check_decl "$LINENO" "sendto" "ac_cv_have_decl_sendto" "$cares_all_includes +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_sendto" = xyes +then : + +printf "%s\n" "#define HAVE_SENDTO 1" >>confdefs.h + fi ac_fn_check_decl "$LINENO" "getnameinfo" "ac_cv_have_decl_getnameinfo" "$cares_all_includes " "$ac_c_undeclared_builtin_options" "CFLAGS" @@ -26711,7 +26823,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by c-ares $as_me 1.33.1, which was +This file was extended by c-ares $as_me 1.34.1, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -26779,7 +26891,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -c-ares config.status 1.33.1 +c-ares config.status 1.34.1 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" @@ -28011,19 +28123,18 @@ See 'config.log' for more details" "$LINENO" 5; } cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 -# Copyright (C) 2014 Free Software Foundation, Inc. +# Copyright (C) 2024 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of of the License, or +# the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you @@ -28407,7 +28518,7 @@ hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \$shlibpath_var if the +# "absolute",i.e. impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute @@ -28650,7 +28761,7 @@ hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \$shlibpath_var if the +# "absolute",i.e. impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX diff --git a/deps/cares/configure.ac b/deps/cares/configure.ac index 59fd975b64f873..cc52c2c6c5de0a 100644 --- a/deps/cares/configure.ac +++ b/deps/cares/configure.ac @@ -2,10 +2,10 @@ dnl Copyright (C) The c-ares project and its contributors dnl SPDX-License-Identifier: MIT AC_PREREQ([2.69]) -AC_INIT([c-ares], [1.33.1], +AC_INIT([c-ares], [1.34.1], [c-ares mailing list: http://lists.haxx.se/listinfo/c-ares]) -CARES_VERSION_INFO="20:1:18" +CARES_VERSION_INFO="21:1:19" dnl This flag accepts an argument of the form current[:revision[:age]]. So, dnl passing -version-info 3:12:1 sets current to 3, revision to 12, and age to dnl 1. @@ -540,9 +540,11 @@ dnl https://mailman.videolan.org/pipermail/vlc-devel/2015-March/101802.html dnl which would require we check each individually and provide function arguments dnl for the test. +AC_CHECK_DECL(memmem, [AC_DEFINE([HAVE_MEMMEM], 1, [Define to 1 if you have `memmem`] )], [], $cares_all_includes) AC_CHECK_DECL(recv, [AC_DEFINE([HAVE_RECV], 1, [Define to 1 if you have `recv`] )], [], $cares_all_includes) AC_CHECK_DECL(recvfrom, [AC_DEFINE([HAVE_RECVFROM], 1, [Define to 1 if you have `recvfrom`] )], [], $cares_all_includes) AC_CHECK_DECL(send, [AC_DEFINE([HAVE_SEND], 1, [Define to 1 if you have `send`] )], [], $cares_all_includes) +AC_CHECK_DECL(sendto, [AC_DEFINE([HAVE_SENDTO], 1, [Define to 1 if you have `sendto`] )], [], $cares_all_includes) AC_CHECK_DECL(getnameinfo, [AC_DEFINE([HAVE_GETNAMEINFO], 1, [Define to 1 if you have `getnameinfo`] )], [], $cares_all_includes) AC_CHECK_DECL(gethostname, [AC_DEFINE([HAVE_GETHOSTNAME], 1, [Define to 1 if you have `gethostname`] )], [], $cares_all_includes) AC_CHECK_DECL(connect, [AC_DEFINE([HAVE_CONNECT], 1, [Define to 1 if you have `connect`] )], [], $cares_all_includes) diff --git a/deps/cares/docs/Makefile.in b/deps/cares/docs/Makefile.in index a57cd0abc18846..75b3f3d942bbd6 100644 --- a/deps/cares/docs/Makefile.in +++ b/deps/cares/docs/Makefile.in @@ -457,6 +457,9 @@ MANPAGES = ares_cancel.3 \ ares_parse_txt_reply.3 \ ares_parse_uri_reply.3 \ ares_process.3 \ + ares_process_fd.3 \ + ares_process_fds.3 \ + ares_process_pending_write.3 \ ares_query.3 \ ares_query_dnsrec.3 \ ares_queue.3 \ @@ -471,6 +474,7 @@ MANPAGES = ares_cancel.3 \ ares_set_local_dev.3 \ ares_set_local_ip4.3 \ ares_set_local_ip6.3 \ + ares_set_pending_write_cb.3 \ ares_set_server_state_callback.3 \ ares_set_servers.3 \ ares_set_servers_csv.3 \ diff --git a/deps/cares/docs/Makefile.inc b/deps/cares/docs/Makefile.inc index 46e30346cfb86a..d6ad73246b3f99 100644 --- a/deps/cares/docs/Makefile.inc +++ b/deps/cares/docs/Makefile.inc @@ -114,6 +114,9 @@ MANPAGES = ares_cancel.3 \ ares_parse_txt_reply.3 \ ares_parse_uri_reply.3 \ ares_process.3 \ + ares_process_fd.3 \ + ares_process_fds.3 \ + ares_process_pending_write.3 \ ares_query.3 \ ares_query_dnsrec.3 \ ares_queue.3 \ @@ -128,6 +131,7 @@ MANPAGES = ares_cancel.3 \ ares_set_local_dev.3 \ ares_set_local_ip4.3 \ ares_set_local_ip6.3 \ + ares_set_pending_write_cb.3 \ ares_set_server_state_callback.3 \ ares_set_servers.3 \ ares_set_servers_csv.3 \ diff --git a/deps/cares/docs/adig.1 b/deps/cares/docs/adig.1 index 59923790587ddd..e0b81c91e3f9fa 100644 --- a/deps/cares/docs/adig.1 +++ b/deps/cares/docs/adig.1 @@ -3,65 +3,177 @@ .\" Copyright (C) Daniel Stenberg .\" SPDX-License-Identifier: MIT .\" -.TH ADIG "1" "April 2011" "c-ares utilities" +.TH ADIG "1" "Sept 2024" "c-ares utilities" .SH NAME adig \- print information collected from Domain Name System (DNS) servers .SH SYNOPSIS -.B adig -[\fIOPTION\fR]... \fINAME\fR... +\fBadig\fP [\fI@server\fR] [\fI-c class\fR] [\fI-p port#\fR] [\fI-q name\fR] +[\fI-t type\fR] [\fI-x addr\fR] [\fIname\fR] [\fItype\fR] [\fIclass\fR] +[\fIqueryopt\fR...] + .SH DESCRIPTION .PP -.\" Add any additional description here -.PP -Send queries to DNS servers about \fINAME\fR and print received -information, where \fINAME\fR is a valid DNS name (e.g. www.example.com, +Send queries to DNS servers about \fUname\fR and print received +information, where \fIname\fR is a valid DNS name (e.g. www.example.com, 1.2.3.10.in-addr.arpa). .PP This utility comes with the \fBc\-ares\fR asynchronous resolver library. -.SH OPTIONS +.PP +It is possible to specify default arguments for \fBadig\fR via \fB${XDG_CONFIG_HOME}/adigrc\fR. +.SH ARGS +.TP +\fB@server\fR +Server ip address. May specify multiple in comma delimited format. May be +specified in URI format. +.TP +\fBname\fR +Name of the resource record that is to be looked up +.TP +\fBtype\fR +What type of query is required. e.g. - A, AAAA, MX, TXT, etc. If not +specified, A will be used. +.TP +\fBclass\fR +Sets the query class, defaults to IN. May also be HS or CH. + +.SH FLAGS .TP \fB\-c\fR class -Set the query class. -Possible values for class are -ANY, CHAOS, HS and IN (default). -.TP -\fB\-d\fR -Print some extra debugging output. -.TP -\fB\-f\fR flag -Add a behavior control flag. -Possible values for flag are - igntc - ignore query truncation, return answer as-is instead of retrying - via tcp. - noaliases - don't honor the HOSTALIASES environment variable, - norecurse - don't query upstream servers recursively, - primary - use the first server, - stayopen - don't close the communication sockets, and - usevc - always use TCP. -.TP -\fB\-h\fR, \fB\-?\fR -Display this help and exit. -.TP -\fB\-s\fR server -Connect to specified DNS server, instead of the system's default one(s). -Servers are tried in round-robin, if the previous one failed. +Sets the query class, defaults to IN. May also be HS or CH. +.TP +\fB\-h\fR +Prints the help. +.TP +\fB\-p\fR port +Sends query to a port other than 53. Often recommended to set the port using +\fI@server\fR instead. +.TP +\fB\-q\fR name +Specifies the domain name to query. Useful to distinguish name from other +arguments +.TP +\fB\-r\fR +Skip adigrc processing +.TP +\fB\-s\fR +Server (alias for @server syntax), compatibility with old cmdline .TP \fB\-t\fR type -Query records of specified type. -Possible values for type are -A (default), AAAA, ANY, AXFR, CNAME, HINFO, MX, NAPTR, NS, PTR, SOA, SRV, TXT, -URI, CAA, SVCB, and HTTPS. +Indicates resource record type to query. Useful to distinguish type from other +arguments +.TP +\fB\-x\fR addr +Simplified reverse lookups. Sets the type to PTR and forms a valid in-arpa +query string + +.SH QUERY OPTIONS +.TP +\fB+[no]aaonly\fR +Sets the aa flag in the query. Default is off. +.TP +\fB+[no]aaflag\fR +Alias for +[no]aaonly +.TP +\fB+[no]additional\fR +Toggles printing the additional section. On by default. +.TP +\fB+[no]adflag\fR +Sets the ad (authentic data) bit in the query. Default is off. +.TP +\fB+[no]aliases\fR +Whether or not to honor the HOSTALIASES file. Default is on. +.TP +\fB+[no]all\fR +Toggles all of +[no]cmd, +[no]stats, +[no]question, +[no]answer, ++[no]authority, +[no]additional, +[no]comments +.TP +\fB+[no]answer\fR +Toggles printing the answer. On by default. +.TP +\fB+[no]authority\fR +Toggles printing the authority. On by default. .TP -\fB\-T\fR port -Connect to the specified TCP port of DNS server. +\fB+bufsize=\fR# +UDP EDNS 0 packet size allowed. Defaults to 1232. .TP -\fB\-U\fR port -Connect to the specified UDP port of DNS server. +\fB+[no]cdflag\fR +Sets the CD (checking disabled) bit in the query. Default is off. +.TP +\fB+[no]class\fR +Display the class when printing the record. On by default. +.TP +\fB+[no]cmd\fR +Toggles printing the command requested. On by default. +.TP +\fB+[no]comments\fR +Toggles printing the comments. On by default +.TP +\fB+[no]defname\fR +Alias for +[no]search +.TP +\fB+domain=somename\fR +Sets the search list to a single domain. +.TP +\fB+[no]dns0x20\fR +Whether or not to use DNS 0x20 case randomization when sending queries. +Default is off. +.TP +\fB+[no]edns\fR[=#] +Enable or disable EDNS. Only allows a value of 0 if specified. Default is to +enable EDNS. +.TP +\fB+[no]ignore\fR +Ignore truncation on UDP, by default retried on TCP. +.TP +\fB+[no]keepopen\fR +Whether or not the server connection should be persistent. Default is off. +.TP +\fB+ndots\fR=# +Sets the number of dots that must appear before being considered absolute. +Defaults to 1. +.TP +\fB+[no]primary\fR +Whether or not to only use a single server if more than one server is available. +Defaults to using all servers. +.TP +\fB+[no]qr\fR +Toggles printing the request query. Off by default. +.TP +\fB+[no]question\fR +Toggles printing the question. On by default. +.TP +\fB+[no]recurse\fR +Toggles the RD (Recursion Desired) bit. On by default. +.TP +\fB+retry\fR=# +Same as +tries but does not include the initial attempt. +.TP +\fB+[no]search\fR +To use or not use the search list. Search list is not used by default. +.TP +\fB+[no]stats\fR +Toggles printing the statistics. On by default. +.TP +\fB+[no]tcp\fR +Whether to use TCP when querying name servers. Default is UDP. +.TP +\fB+tries\fR=# +Number of query tries. Defaults to 3. +.TP +\fB+[no]ttlid\fR +Display the TTL when printing the record. On by default. +.TP +\fB+[no]vc\fR +Alias for +[no]tcp + +.SH FILES + +${XDG_CONFIG_HOME}/adigrc .SH "REPORTING BUGS" -Report bugs to the c-ares mailing list: +Report bugs to the c-ares github issues tracker .br -\fBhttps://lists.haxx.se/listinfo/c-ares\fR +\fBhttps://github.com/c-ares/c-ares/issues\fR .SH "SEE ALSO" .PP ahost(1). diff --git a/deps/cares/docs/ares_inet_pton.3 b/deps/cares/docs/ares_inet_pton.3 index 5b7b8010d22a3a..34b2df063c6820 100644 --- a/deps/cares/docs/ares_inet_pton.3 +++ b/deps/cares/docs/ares_inet_pton.3 @@ -9,7 +9,7 @@ ares_inet_pton \- convert an IPv4 or IPv6 address from text to binary form .nf #include -const char *ares_inet_pton(int \fIaf\fP, const char *\fIsrc\fP, void *\fIdst\fP); +int ares_inet_pton(int \fIaf\fP, const char *\fIsrc\fP, void *\fIdst\fP); .fi .SH DESCRIPTION This is a portable version with the identical functionality of the commonly @@ -22,6 +22,11 @@ shall be supported. The \fBsrc\fP argument points to the string being passed in. The \fBdst\fP argument points to a buffer into which the function stores the numeric address; this shall be large enough to hold the numeric address (32 bits for AF_INET, 128 bits for AF_INET6). + +It returns 1 if the address was valid for the specified address family, or 0 +if the address was not parseable in the specified address family, or -1 if +some system error occurred (in which case errno will have been set). + .SH SEE ALSO .BR ares_init (3), .BR ares_inet_ntop (3) diff --git a/deps/cares/docs/ares_init_options.3 b/deps/cares/docs/ares_init_options.3 index 694beb5ed28d13..9b3b4815355659 100644 --- a/deps/cares/docs/ares_init_options.3 +++ b/deps/cares/docs/ares_init_options.3 @@ -345,7 +345,8 @@ Configure server failover retry behavior. When a DNS server fails to respond to a query, c-ares will deprioritize the server. On subsequent queries, servers with fewer consecutive failures will be selected in preference. However, in order to detect when such a server has recovered, -c-ares will occasionally retry failed servers. The +c-ares will occasionally retry failed servers by probing with a copy of +the query, without affecting the latency of the actual requested query. The \fIares_server_failover_options\fP structure contains options to control this behavior. The \fIretry_chance\fP field gives the probability (1/N) of retrying a @@ -367,7 +368,9 @@ for each resolution. .TP 23 .B ARES_OPT_NOROTATE Do not perform round-robin nameserver selection; always use the list of -nameservers in the same order. +nameservers in the same order. The default is not to rotate servers, however +the system configuration can specify the desire to rotate and this +configuration value can negate such a system configuration. .PP .SH RETURN VALUES diff --git a/deps/cares/docs/ares_process.3 b/deps/cares/docs/ares_process.3 index d45d92a6259682..ce45a60d6c07d4 100644 --- a/deps/cares/docs/ares_process.3 +++ b/deps/cares/docs/ares_process.3 @@ -4,61 +4,106 @@ .\" .TH ARES_PROCESS 3 "25 July 1998" .SH NAME -ares_process \- Process events for name resolution +ares_process_fds, ares_process_fd, ares_process \- Process events for name resolution .SH SYNOPSIS .nf #include -void ares_process(ares_channel_t *\fIchannel\fP, - fd_set *\fIread_fds\fP, - fd_set *\fIwrite_fds\fP) +/*! Events used by ares_fd_events_t */ +typedef enum { + ARES_FD_EVENT_NONE = 0, /*!< No events */ + ARES_FD_EVENT_READ = 1 << 0, /*!< Read event (including disconnect/error) */ + ARES_FD_EVENT_WRITE = 1 << 1 /*!< Write event */ +} ares_fd_eventflag_t; + +/*! Type holding a file descriptor and mask of events, used by + * ares_process_fds() */ +typedef struct { + ares_socket_t fd; /*!< File descriptor */ + unsigned int events; /*!< Mask of ares_fd_event_t */ +} ares_fd_events_t; + +typedef enum { + ARES_PROCESS_FLAG_NONE = 0, + ARES_PROCESS_FLAG_SKIP_NON_FD = 1 << 0 +} ares_process_flag_t; + + +ares_status_t ares_process_fds(ares_channel_t *\fIchannel\fP, + const ares_fd_events_t *\fIevents\fP, + size_t \fInevents\fP, + unsigned int \fIflags\fP) void ares_process_fd(ares_channel_t *\fIchannel\fP, ares_socket_t \fIread_fd\fP, ares_socket_t \fIwrite_fd\fP) + +void ares_process(ares_channel_t *\fIchannel\fP, + fd_set *\fIread_fds\fP, + fd_set *\fIwrite_fds\fP) + .fi .SH DESCRIPTION -The \fBares_process(3)\fP function handles input/output events and timeouts -associated with queries pending on the name service channel identified by -.IR channel . -The file descriptor sets pointed to by \fIread_fds\fP and \fIwrite_fds\fP -should have file descriptors set in them according to whether the file -descriptors specified by \fIares_fds(3)\fP are ready for reading and writing. -(The easiest way to determine this information is to invoke \fBselect(3)\fP -with a timeout no greater than the timeout given by \fIares_timeout(3)\fP). - -The \fBares_process(3)\fP function will invoke callbacks for pending queries -if they complete successfully or fail. - -\fBares_process_fd(3)\fP works the same way but acts and operates only on the -specific file descriptors (sockets) you pass in to the function. Use -ARES_SOCKET_BAD for "no action". This function is provided to allow users of -c-ares to avoid \fIselect(3)\fP in their applications and within c-ares. - -To only process possible timeout conditions without a socket event occurring, -one may pass NULL as the values for both \fIread_fds\fP and \fIwrite_fds\fP for -\fBares_process(3)\fP, or ARES_SOCKET_BAD for both \fIread_fd\fP and -\fIwrite_fd\fP for \fBares_process_fd(3)\fP. -.SH EXAMPLE -The following code fragment waits for all pending queries on a channel -to complete: +These functions must be used by integrators choosing not to use the +EventThread enabled via \fBARES_OPT_EVENT_THREAD\fP passed to +\fBares_init_options\fP. This assumes integrators already have their own +event loop handling event notifications for various file descriptors and +wish to do the same with their integration with c-ares. + +The \fBares_process_fds(3)\fP function handles input/output events on file +descriptors and timeouts associated with queries pending on the channel +identified by \fIchannel\fP. The file descriptors to be processed are passed +in an array of \fIares_fd_events_t\fP data structures in the \fIfd\fP member, +and events are a bitwise mask of \fIares_fd_eventflag_t\fP in the \fIevent\fP +member. This function can also be used to process timeouts by passing NULL +to the \fIevents\fP member with \fInevents\fP value of 0. Flags may also be +specified in the \fIflags\fP field and are defined in \fBares_process_flag_t\fP. + +\fBARES_PROCESS_FLAG_SKIP_NON_FD\fP can be specified to specifically skip any +processing unrelated to the file descriptor events passed in, examples include +timeout processing and cleanup handling. This is useful if an integrator +knows they will be sending multiple \fIares_process_fds(3)\fP requests and +wants to skip that extra processing. However, the integrator must send the +final request with the flag so that timeout and other processing gets performed +before their event loop waits on additional events. + +It is allowable to use an \fIares_fd_events_t\fP with \fIevents\fP member of +value \fIARES_FD_EVENT_NONE\fP (0) if there are no events for a given file +descriptor if an integrator wishes to simply maintain an array with all +possible file descriptors and update readiness via the \fIevent\fP member. + +This function will return \fIARES_ENOMEM\fP in out of memory conditions, +otherwise will return \fIARES_SUCCESS\fP. + +This function is recommended over \fBares_process_fd(3)\fP since it can +handle processing of multiple file descriptors at once, thus skipping repeating +additional logic such as timeout processing which would be required if calling +\fBares_process_fd(3)\fP for multiple file descriptors notified at the same +time. + +This function is typically used with the \fIARES_OPT_SOCK_STATE_CB\fP option. + +\fBares_timeout(3)\fP should be used to retrieve the desired timeout, and when +the timeout expires, the integrator must call \fBares_process_fds(3)\fP with +a NULL \fIevents\fP array. (or \fBares_process_fd(3)\fP with both sockets set +to \fIARES_SOCKET_BAD\fP). There is no need to do this if events are also +delivered for any file descriptors as timeout processing will automatically be +handled by any call to \fBares_process_fds(3)\fP or \fBares_process_fd(3)\fP. + +The \fBares_process_fd(3)\fP function is the same as \fBares_process_fds(3)\fP +except can only process a single read and write file descriptor at a time. +New integrators should use \fBares_process_fds(3)\fP if possible. + +The \fBares_process(3)\fP function works in the same manner, except it works +on \fIfd_sets\fP as is used by \fBselect(3)\fP and retrieved by +\fBares_fds(3)\fP. This method is deprecated and should not be used in modern +applications due to known limitations to the \fBselect(3)\fP implementation. + +.SH AVAILABILITY +\fBares_process_fds(3)\fP was introduced in c-ares 1.34.0. -.nf -int nfds, count; -fd_set readers, writers; -struct timeval tv, *tvp; - -while (1) { - FD_ZERO(&readers); - FD_ZERO(&writers); - nfds = ares_fds(channel, &readers, &writers); - if (nfds == 0) - break; - tvp = ares_timeout(channel, NULL, &tv); - count = select(nfds, &readers, &writers, NULL, tvp); - ares_process(channel, &readers, &writers); -} -.fi .SH SEE ALSO .BR ares_fds (3), -.BR ares_timeout (3) +.BR ares_timeout (3), +.BR ares_init_options (3) +with \fIARES_OPT_EVENT_THREAD\fP or \fIARES_OPT_SOCK_STATE_CB\fP diff --git a/deps/cares/docs/ares_process_fd.3 b/deps/cares/docs/ares_process_fd.3 new file mode 100644 index 00000000000000..94e50f41a91717 --- /dev/null +++ b/deps/cares/docs/ares_process_fd.3 @@ -0,0 +1,3 @@ +.\" Copyright (C) 2023 The c-ares project and its contributors. +.\" SPDX-License-Identifier: MIT +.so man3/ares_process.3 diff --git a/deps/cares/docs/ares_process_fds.3 b/deps/cares/docs/ares_process_fds.3 new file mode 100644 index 00000000000000..94e50f41a91717 --- /dev/null +++ b/deps/cares/docs/ares_process_fds.3 @@ -0,0 +1,3 @@ +.\" Copyright (C) 2023 The c-ares project and its contributors. +.\" SPDX-License-Identifier: MIT +.so man3/ares_process.3 diff --git a/deps/cares/docs/ares_process_pending_write.3 b/deps/cares/docs/ares_process_pending_write.3 new file mode 100644 index 00000000000000..90843341950bbb --- /dev/null +++ b/deps/cares/docs/ares_process_pending_write.3 @@ -0,0 +1,3 @@ +.\" Copyright (C) 2023 The c-ares project and its contributors. +.\" SPDX-License-Identifier: MIT +.so man3/ares_set_pending_write_cb.3 diff --git a/deps/cares/docs/ares_set_local_dev.3 b/deps/cares/docs/ares_set_local_dev.3 index 2e2028f616ae3e..621cf35184fe10 100644 --- a/deps/cares/docs/ares_set_local_dev.3 +++ b/deps/cares/docs/ares_set_local_dev.3 @@ -2,7 +2,7 @@ .\" Copyright 2010 by Ben Greear .\" SPDX-License-Identifier: MIT .\" -.TH ARES_SET_LOCAL_DEV 3 "30 June 2010" +.TH ARES_SET_LOCAL_DEV 3 "23 September 2024" .SH NAME ares_set_local_dev \- Bind to a specific network device when creating sockets. .SH SYNOPSIS @@ -15,12 +15,14 @@ void ares_set_local_dev(ares_channel_t *\fIchannel\fP, const char* \fIlocal_dev_ The \fBares_set_local_dev\fP function causes all future sockets to be bound to this device with SO_BINDTODEVICE. This forces communications to go over a certain interface, which can be useful on multi-homed machines. -This option is only supported on Linux, and root privileges are required -for the option to work. If SO_BINDTODEVICE is not supported or the -setsocktop call fails (probably because of permissions), the error is +This option is only supported on Linux, the interface must not be already bound to the +socket or the current effective user must have CAP_NET_RAW capability in the current +network namespace for the option to work. If SO_BINDTODEVICE is not supported or the +setsockopt call fails (probably because of permissions), the error is silently ignored. .SH SEE ALSO .BR ares_set_local_ip4 (3) .BR ares_set_local_ip6 (3) +.BR network_namespaces (7) .SH NOTES This function was added in c-ares 1.7.4 diff --git a/deps/cares/docs/ares_set_pending_write_cb.3 b/deps/cares/docs/ares_set_pending_write_cb.3 new file mode 100644 index 00000000000000..3c7712a69d96e4 --- /dev/null +++ b/deps/cares/docs/ares_set_pending_write_cb.3 @@ -0,0 +1,62 @@ +.\" +.\" Copyright 2024 by the c-ares project and its contributors +.\" SPDX-License-Identifier: MIT +.\" +.TH ARES_SET_NOTIFY_PENDING_WRITE_CALLBACK 3 "13 Aug 2024" +.SH NAME +ares_set_pending_write_cb, ares_process_pending_write \- Function +for setting a callback which is triggered when there is potential pending data +which needs to be written. +.SH SYNOPSIS +.nf +#include + +typedef void (*ares_pending_write_cb)(void *\fIdata\fP); + +void ares_set_pending_write_cb( + ares_channel_t *\fIchannel\fP, + ares_pending_write_cb \fIcallback\fP, + void *\fIuser_data\fP); + +void ares_process_pending_write(ares_channel_t *\fIchannel\fP); + +.fi + +.SH DESCRIPTION +The \fBares_set_pending_write_cb(3)\fP function sets a callback +function \fIcallback\fP in the given ares channel handle \fIchannel\fP that +is invoked whenever there is new pending TCP data to be written. Since TCP +is stream based, if there are multiple queries being enqueued back to back they +can be sent as one large buffer. Normally a \fBsend(2)\fP syscall operation +would be triggered for each query. + +When setting this callback, an event will be triggered when data is buffered, +but not written. This event is used to wake the caller's event loop which +should call \fBares_process_pending_write(3)\fP using the channel associated +with the callback. Each time the callback is triggered must result in a call +to \fBares_process_pending_write(3)\fP from the caller's event loop otherwise +stalls and timeouts may occur. The callback \fBmust not\fP call +\fBares_process_pending_write(3)\fP directly as otherwise it would invalidate +any advantage of this use-case. + +This is considered an optimization, especially when using TLS-based connections +which add additional overhead to the data stream. Due to the asyncronous nature +of c-ares, there is no way to identify when a caller may be finished enqueuing +queries via any of the possible public API calls such as +\fBares_getaddrinfo(3)\fP or \fBares_search_dnsrec(3)\fP, so this is an +enhancement to try to group query send operations together and will rely on the +singaling latency involved in waking the user's event loop. + +If no callback is set, data will be written immediately to the socket, thus +bypassing this optimization. + +This option cannot be used with \fIARES_OPT_EVENT_THREAD\fP passed to +\fBares_init_options(3)\fP since the user has no event loop. This optimization +is automatically enabled when using the Event Thread as it sets the callback +for its own internal signaling. + +.SH AVAILABILITY +This function was first introduced in c-ares version 1.34.0. + +.SH SEE ALSO +.BR ares_init_options (3) diff --git a/deps/cares/docs/ares_set_servers_csv.3 b/deps/cares/docs/ares_set_servers_csv.3 index 875a156bfb1014..f1435143f567a4 100644 --- a/deps/cares/docs/ares_set_servers_csv.3 +++ b/deps/cares/docs/ares_set_servers_csv.3 @@ -29,11 +29,18 @@ simulation but unlikely to be useful in production. The \fBares_get_servers_csv\fP retrieves the list of servers in comma delimited format. -The input and output format is a comma separated list of servers. Each server -entry may contain these forms: +The input and output format is a comma separated list of servers. Two formats +are available, the typical \fBresolv.conf(5)\fP \fInameserver\fP format, as +well as a \fIURI\fP format. Both formats can be used at the same time in the +provided CSV string. + +The \fInameserver\fP format is: +.nf ip[:port][%iface] +.fi +.RS 4 The \fBip\fP may be encapsulated in square brackets ([ ]), and must be if using ipv6 and also specifying a port. @@ -42,16 +49,88 @@ The \fBport\fP is optional, and will default to 53 or the value specified in The \fBiface\fP is specific to IPv6 link-local servers (fe80::/10) and should not otherwise be used. +.RE + +\fInameserver\fP format examples: +.nf + +192.168.1.100 +192.168.1.101:53 +[1:2:3::4]:53 +[fe80::1]:53%eth0 + +.fi +.PP + +The \fIURI\fP format is is made up of these defined schemes: +.RS 4 +\fIdns://\fP - Normal DNS server (UDP + TCP). We need to be careful not to +conflict with query params defined in RFC4501 since we'd technically be +extending this URI scheme. Port defaults to 53. + +\fIdns+tls://\fP - DNS over TLS. Port defaults to 853. + +\fIdns+https://\fP - DNS over HTTPS. Port defaults to 443. +.RE + +.PP +Query parameters are defined as below. Additional parameters may be defined +in the future. + +.RS 4 +\fItcpport\fP - TCP port to use, only for \fIdns://\fP scheme. The port +specified as part of the authority component of the URI will be used for both +UDP and TCP by default, this option will override the TCP port. + +\fIipaddr\fP - Only for \fIdns+tls://\fP and \fIdns+https://\fP. If the +authority component of the URI contains a hostname, this is used to specify the +ip address of the hostname. If not specified, will need to use a non-secure +server to perform a DNS lookup to retrieve this information. It is always +recommended to have both the ip address and fully qualified domain name +specified. + +\fIhostname\fP - Only for \fIdns+tls://\fP and \fIdns+https://\fP. If the +authority component of the URI contains an ip address, this is used to specify +the fully qualified domain name of the server. If not specified, will need to +use a non-secure server to perform a DNS reverse lookup to retrieve this +information. It is always recommended to have both the ip address and fully +qualified domain name specified. + +\fIdomain\fP - If specified, this server is a domain-specific server. Any +queries for this domain will be routed to this server. Multiple servers may be +tagged with the same domain. +.RE + +\fIURI\fP format Examples: +.nf -For example: +dns://8.8.8.8 +dns://[2001:4860:4860::8888] +dns://[fe80::b542:84df:1719:65e3%en0] +dns://192.168.1.1:55 +dns://192.168.1.1?tcpport=1153 +dns://10.0.1.1?domain=myvpn.com +dns+tls://8.8.8.8?hostname=dns.google +dns+tls://one.one.one.one?ipaddr=1.1.1.1 + +.fi + +\fBNOTE\fP: While we are defining the scheme for things like domain-specific +servers, DNS over TLS and DNS over HTTPS, the underlying implementations for +those features do not yet exist and therefore will result in errors if they are +attempted to be used. -192.168.1.100,192.168.1.101:53,[1:2:3::4]:53,[fe80::1]:53%eth0 .PP As of c-ares 1.24.0, \fBares_set_servers_csv\fP and \fBares_set_servers_ports_csv\fP are identical. Prior versions would simply omit ports in \fBares_set_servers_csv\fP but due to the addition of link local interface support, this difference was removed. +.SH EXAMPLE +.nf +192.168.1.100,[fe80::1]:53%eth0,dns://192.168.1.1?tcpport=1153 +.fi + .SH RETURN VALUES .B ares_set_servers_csv(3) and @@ -81,3 +160,4 @@ returns a string representing the servers configured which must be freed with \fBares_set_servers_csv\fP was added in c-ares 1.7.2 \fBares_set_servers_ports_csv\fP was added in c-ares 1.11.0. \fBares_get_servers_csv\fP was added in c-ares 1.24.0. +\fIURI\fP support was added in c-ares 1.34.0. diff --git a/deps/cares/docs/ares_set_socket_functions.3 b/deps/cares/docs/ares_set_socket_functions.3 index ab945ed18de86b..8a903dc6521607 100644 --- a/deps/cares/docs/ares_set_socket_functions.3 +++ b/deps/cares/docs/ares_set_socket_functions.3 @@ -1,12 +1,63 @@ .\" Copyright (C) Daniel Stenberg .\" SPDX-License-Identifier: MIT -.TH ARES_SET_SOCKET_FUNCTIONS 3 "13 Dec 2016" +.TH ARES_SET_SOCKET_FUNCTIONS 3 "8 Oct 2024" .SH NAME -ares_set_socket_functions \- Set socket io callbacks +ares_set_socket_functions, ares_set_socket_functions_ex \- Set socket io callbacks .SH SYNOPSIS .nf #include +typedef enum { + ARES_SOCKFUNC_FLAG_NONBLOCKING = 1 << 0 +} ares_sockfunc_flags_t; + +typedef enum { + ARES_SOCKET_OPT_SENDBUF_SIZE, + ARES_SOCKET_OPT_RECVBUF_SIZE, + ARES_SOCKET_OPT_BIND_DEVICE, + ARES_SOCKET_OPT_TCP_FASTOPEN +} ares_socket_opt_t; + +typedef enum { + ARES_SOCKET_CONN_TCP_FASTOPEN = 1 << 0 +} ares_socket_connect_flags_t; + +typedef enum { + ARES_SOCKET_BIND_TCP = 1 << 0, + ARES_SOCKET_BIND_CLIENT = 1 << 1 +} ares_socket_bind_flags_t; + +struct ares_socket_functions_ex { + unsigned int version; /* ABI Version: must be "1" */ + unsigned int flags; + + ares_socket_t (*asocket)(int domain, int type, int protocol, void *user_data); + int (*aclose)(ares_socket_t sock, void *user_data); + int (*asetsockopt)(ares_socket_t sock, ares_socket_opt_t opt, const void *val, + ares_socklen_t val_size, void *user_data); + int (*aconnect)(ares_socket_t sock, const struct sockaddr *address, + ares_socklen_t address_len, unsigned int flags, + void *user_data); + ares_ssize_t (*arecvfrom)(ares_socket_t sock, void *buffer, size_t length, + int flags, struct sockaddr *address, + ares_socklen_t *address_len, void *user_data); + ares_ssize_t (*asendto)(ares_socket_t sock, const void *buffer, size_t length, + int flags, const struct sockaddr *address, + ares_socklen_t address_len, void *user_data); + int (*agetsockname)(ares_socket_t sock, struct sockaddr *address, + ares_socklen_t *address_len, void *user_data); + int (*abind)(ares_socket_t sock, unsigned int flags, + const struct sockaddr *address, socklen_t address_len, + void *user_data); + unsigned int (*aif_nametoindex)(const char *ifname, void *user_data); + const char *(*aif_indextoname)(unsigned int ifindex, char *ifname_buf, + size_t ifname_buf_len, void *user_data); +}; + +ares_status_t ares_set_socket_functions_ex(ares_channel_t *channel, + const struct ares_socket_functions_ex *funcs, void *user_data); + + struct ares_socket_functions { ares_socket_t (*\fIasocket\fP)(int, int, int, void *); int (*\fIaclose\fP)(ares_socket_t, void *); @@ -22,80 +73,262 @@ void ares_set_socket_functions(ares_channel_t *\fIchannel\fP, .fi .SH DESCRIPTION .PP -This function sets a set of callback \fIfunctions\fP in the given ares channel handle. -Cannot be used when \fBARES_OPT_EVENT_THREAD\fP is passed to \fIares_init_options(3)\fP. - -These callback functions will be invoked to create/destroy socket objects and perform -io, instead of the normal system calls. A client application can override normal network -operation fully through this functionality, and provide its own transport layer. You -can choose to only implement some of the socket functions, and provide NULL to any -others and c-ares will use its built-in system functions in that case. + +\fBares_set_socket_functions_ex(3)\fP sets a set of callback \fIfunctions\fP in +the given ares channel handle. Cannot be used when \fBARES_OPT_EVENT_THREAD\fP +is passed to \fIares_init_options(3)\fP. This function replaces the now +deprecated \fBares_set_socket_functions(3)\fP call. + +These callback functions will be invoked to create/destroy socket objects and +perform io, instead of the normal system calls. A client application can +override normal network operation fully through this functionality, and provide +its own transport layer. + +Some callbacks may be optional and are documented as such below, but failing +to implement such callbacks will disable certain features within c-ares. It +is strongly recommended to implement all callbacks. + +All callback functions are expected to operate like their system equivalents, +and to set \fBerrno(2)\fP or \fBWSASetLastError(2)\fP to an appropriate error +code on failure. It is strongly recommended that io callbacks are implemented +to be asynchronous and indicated as such in the \fIflags\fP member. The io +callbacks can return error codes of \fBEAGAIN\fP, \fBEWOULDBLOCK\fP, or +\fBWSAEWOULDBLOCK\fP when they would otherwise block. + +The \fIuser_data\fP value is provided to each callback function invocation to +serve as context. + +The \fBares_set_socket_functions_ex(3)\fP must provide the following structure +members and callbacks (which are different from the +\fBares_set_socket_functions(3)\fP members and callbacks): + +.RS 4 +.TP 8 +.B unsigned int \fIversion\fP +.br +ABI Version of structure. Must be set to a value of "1". + +.TP 8 +.B unsigned int \fIflags\fP +.br +Flags available are specified in \fIares_sockfunc_flags_t\fP. + +.TP 8 +.B ares_socket_t (*\fIasocket\fP)(int \fIdomain\fP, int \fItype\fP, int \fIprotocol\fP, void * \fIuser_data\fP) +.br +\fIREQUIRED\fP. Creates an endpoint for communication and returns a descriptor. \fIdomain\fP, +\fItype\fP, and \fIprotocol\fP each correspond to the parameters of +\fBsocket(2)\fP. Returns a handle to the newly created socket, or +\fBARES_SOCKET_BAD\fP on error. + +.TP 8 +.B int (*\fIaclose\fP)(ares_socket_t \fIfd\fP, void * \fIuser_data\fP) +.br +\fIREQUIRED\fP. Closes the socket endpoint indicated by \fIfd\fP. See \fBclose(2)\fP. + +.TP 8 +.B int (*\fIasetsockopt\fP)(ares_socket_t \fIfd\fP, ares_socket_opt_t \fIopt\fP, const void * \fIval\fP, ares_socklen_t \fIval_size\fP, void * \fIuser_data\fP) +.br +\fIREQUIRED\fP. Set socket option. This shares a similar syntax to the BSD \fIsetsockopt(2)\fP +call, however c-ares uses different options for portability. The value is +a pointer to the desired value, and each option has its own data type listed +in the options below defined in \fIares_socket_opt_t\fP. + +.TP 8 +.B int (*\fIaconnect\fP)(ares_socket_t \fIfd\fP, const struct sockaddr * \fIaddr\fP, ares_socklen_t \fIaddr_len\fP, unsigned int \fIflags\fP, void * \fIuser_data\fP) +.br +\fIREQUIRED\fP. Initiate a connection to the address indicated by \fIaddr\fP on +a socket. Additional flags controlling behavior are in +\fIares_socket_connect_flags_t\fP. See \fBconnect(2)\fP. + +.TP 8 +.B ares_ssize_t (*\fIarecvfrom\fP)(ares_socket_t \fIfd\fP, void * \fIbuffer\fP, size_t \fIbuf_size\fP, int \fIflags\fP, struct sockaddr * \fIaddr\fP, ares_socklen_t * \fIaddr_len\fP, void * \fIuser_data\fP) +.br +\fIREQUIRED\fP. Receives data from remote socket endpoint, if available. If the +\fIaddr\fP parameter is not NULL and the connection protocol provides the source +address, the callback should fill this in. The \fIflags\fP parameter is +currently unused. See \fBrecvfrom(2)\fP. + +.TP 8 +.B ares_ssize_t (*\fIasendto\fP)(ares_socket_t \fIfd\fP, const void * \fIbuffer\fP, size_t \fIlength\fP, int \fIflags\fP, const struct sockaddr * \fIaddress\fP, ares_socklen_t \fIaddress_len\fP, void * \fIuser_data\fP) +.br +\fIREQUIRED\fP. Send data, as provided by the \fIbuffer\fP, to the socket +endpoint. The \fIflags\fP member may be used on systems that have +\fBMSG_NOSIGNAL\fP defined but is otherwise unused. An \fIaddress\fP is +provided primarily to support TCP FastOpen scenarios, which will be NULL in +other circumstances. See \fBsendto(2)\fP. + +.TP 8 +.B int (*\fIagetsockname\fP)(ares_socket_t \fIfd\fP, struct sockaddr * \fIaddress\fP, ares_socklen_t * \fIaddress_len\fP, void * \fIuser_data\fP) +.br +\fIOptional\fP. Retrieve the local address of a socket and store it into the provided +\fIaddress\fP buffer. May impact DNS Cookies if not provided. See +\fBgetsockname(2)\fP. + +.TP 8 +.B int (*\fIabind\fP)(ares_socket_t \fIfd\fP, unsigned int \fIflags\fP, const struct sockaddr * \fIaddress\fP, ares_socklen_t \fIaddress_len\fP, void * \fIuser_data\fP) +.br +\fIOptional\fP. Bind the socket to an address. This can be used for client +connections to bind the source address for packets before connect, or +for server connections to bind to an address and port before listening. +Currently c-ares only supports client connections. \fIflags\fP from +\fIares_socket_bind_flags_t\fP can be specified. See \fBbind(2)\fP. + +.TP 8 +.B unsigned int (*\fIaif_nametoindex\fP)(const char * \fIifname\fP, void * \fIuser_data\fP) +.br +\fIOptional\fP. Convert an interface name into the interface index. If this +callback is not specified, then IPv6 Link-Local DNS servers cannot be used. +See \fBif_nametoindex(2)\fP. + +.TP 8 +.B const char * (*\fIaif_indextoname\fP)(unsigned int \fIifindex\fP, char * \fIifname_buf\fP, size_t \fIifname_buf_len\fP, void * \fIuser_data\fP) +.br +\fIOptional\fP. Convert an interface index into the interface name. If this +callback is not specified, then IPv6 Link-Local DNS servers cannot be used. +\fIifname_buf\fP must be at least \fBIF_NAMESIZE\fP or \fBIFNAMSIZ\fP in size. +See \fBif_indextoname(2)\fP. +.RE + +.PP +\fBares_sockfunc_flags_t\fP values: + +.RS 4 +.TP 8 +.B \fIARES_SOCKFUNC_FLAG_NONBLOCKING\fP +.br +Used to indicate the implementation of the io functions are asynchronous. +.RE + +.PP +\fBares_socket_opt_t\fP values: + +.RS 4 +.TP 8 +.B \fIARES_SOCKET_OPT_SENDBUF_SIZE\fP +.br +Set the Send Buffer size. Value is a pointer to an int. (SO_SNDBUF). + +.TP 8 +.B \fIARES_SOCKET_OPT_RECVBUF_SIZE\fP +.br +Set the Receive Buffer size. Value is a pointer to an int. (SO_RCVBUF). + +.TP 8 +.B \fIARES_SOCKET_OPT_BIND_DEVICE\fP +.br +Set the network interface to use as the source for communication. Value is a C +string. (SO_BINDTODEVICE) + +.TP 8 +.B \fIARES_SOCKET_OPT_TCP_FASTOPEN\fP +.br +Enable TCP Fast Open. Value is a pointer to an \fIares_bool_t\fP. On some +systems this could be a no-op if it is known it is on by default and +return success. Other systems may be a no-op if known the system does +not support the feature and returns failure with errno set to \fBENOSYS\fP or +\fBWSASetLastError(WSAEOPNOTSUPP);\fP. +.RE + +.PP +\fBares_socket_connect_flags_t\fP values: +.RS 4 +.TP 8 +.B \fIARES_SOCKET_CONN_TCP_FASTOPEN\fP +.br +Connect using TCP Fast Open. +.RE + +.PP +\fBares_socket_bind_flags_t\fP values: + +.RS 4 +.TP 8 +.B \fIARES_SOCKET_BIND_TCP\fP +.br +Bind is for a TCP connection. + +.TP 19 +.B \fIARES_SOCKET_BIND_CLIENT\fP +.br +Bind is for a client connection, not server. +.RE + +.PP + +\fBares_set_socket_functions(3)\fP sets a set of callback \fIfunctions\fP in the +given ares channel handle. Cannot be used when \fBARES_OPT_EVENT_THREAD\fP is +passed to \fIares_init_options(3)\fP. This function is deprecated as of +c-ares 1.34.0 in favor of \fIares_set_socket_functions_ex(3)\fP. + +\fBares_set_socket_functions(3)\fP allows you to choose to only implement +some of the socket functions, and provide NULL to any others and c-ares will use +its built-in system functions in that case. + .PP -All callback functions are expected to operate like their system equivalents, and to -set -.BR errno(3) -to an appropriate error code on failure. C-ares also expects all io functions to behave -asynchronously, i.e. as if the socket object has been set to non-blocking mode. Thus -read/write calls (for TCP connections) are expected to often generate -.BR EAGAIN -or -.BR EWOULDBLOCK. +All callback functions are expected to operate like their system equivalents, +and to set \fBerrno(2)\fP or \fBWSASetLastError(2)\fP to an appropriate error +code on failure. It is strongly recommended all io functions behave +asynchronously and return error codes of \fBEAGAIN\fP, \fBEWOULDBLOCK\fP, or +\fBWSAEWOULDBLOCK\fP when they would otherwise block. .PP -The \fIuser_data\fP value is provided to each callback function invocation to serve as -context. +The \fIuser_data\fP value is provided to each callback function invocation to +serve as context. .PP -The -.B ares_socket_functions -must provide the following callbacks: -.TP 18 -.B \fIasocket\fP -.B ares_socket_t(*)(int \fIdomain\fP, int \fItype\fP, int \fIprotocol\fP, void * \fIuser_data\fP) +The \fBares_set_socket_functions(3)\fP must provide the following callbacks (which +are different from the \fBares_set_socket_functions_ex(3)\fP callbacks): + +.RS 4 +.TP 8 +.B ares_socket_t (*\fIasocket\fP)(int \fIdomain\fP, int \fItype\fP, int \fIprotocol\fP, void * \fIuser_data\fP) .br Creates an endpoint for communication and returns a descriptor. \fIdomain\fP, \fItype\fP, and \fIprotocol\fP -each correspond to the parameters of -.BR socket(2). -Returns ahandle to the newly created socket, or -1 on error. -.TP 18 -.B \fIaclose\fP -.B int(*)(ares_socket_t \fIfd\fP, void * \fIuser_data\fP) -.br -Closes the socket endpoint indicated by \fIfd\fP. See -.BR close(2) -.TP 18 -.B \fIaconnect\fP -.B int(*)(ares_socket_t \fIfd\fP, const struct sockaddr * \fIaddr\fP, ares_socklen_t \fIaddr_len\fP, void * \fIuser_data\fP) +each correspond to the parameters of \fBsocket(2)\fP. Returns ahandle to the +newly created socket, or ARES_SOCKET_BAD on error. + +.TP 8 +.B int (*\fIaclose\fP)(ares_socket_t \fIfd\fP, void * \fIuser_data\fP) +.br +Closes the socket endpoint indicated by \fIfd\fP. See \fBclose(2)\fP. + +.TP 8 +.B int (*\fIaconnect\fP)(ares_socket_t \fIfd\fP, const struct sockaddr * \fIaddr\fP, ares_socklen_t \fIaddr_len\fP, void * \fIuser_data\fP) .br Initiate a connection to the address indicated by \fIaddr\fP on a socket. See -.BR connect(2) +\fBconnect(2)\fP -.TP 18 -.B \fIarecvfrom\fP -.B ares_ssize_t(*)(ares_socket_t \fIfd\fP, void * \fIbuffer\fP, size_t \fIbuf_size\fP, int \fIflags\fP, struct sockaddr * \fIaddr\fP, ares_socklen_t * \fIaddr_len\fP, void * \fIuser_data\fP) +.TP 8 +.B ares_ssize_t (*\fIarecvfrom\fP)(ares_socket_t \fIfd\fP, void * \fIbuffer\fP, size_t \fIbuf_size\fP, int \fIflags\fP, struct sockaddr * \fIaddr\fP, ares_socklen_t * \fIaddr_len\fP, void * \fIuser_data\fP) .br -Receives data from remote socket endpoint, if available. If the \fIaddr\fP parameter is not NULL and the connection protocol provides the source address, the callback should fill this in. See -.BR recvfrom(2) +Receives data from remote socket endpoint, if available. If the \fIaddr\fP +parameter is not NULL and the connection protocol provides the source address, +the callback should fill this in. See \fBrecvfrom(2)\fP -.TP 18 -.B \fIasendv\fP -.B ares_ssize_t(*)(ares_socket_t \fIfd\fP, const struct iovec * \fIdata\fP, int \fIlen\fP, void * \fIuser_data\fP) +.TP 8 +.B ares_ssize_t (*\fIasendv\fP)(ares_socket_t \fIfd\fP, const struct iovec * \fIdata\fP, int \fIlen\fP, void * \fIuser_data\fP) .br -Send data, as provided by the iovec array \fIdata\fP, to the socket endpoint. See -.BR writev(2), +Send data, as provided by the iovec array \fIdata\fP, to the socket endpoint. +See \fBwritev(2)\fP +.RE .PP -The -.B ares_socket_functions -struct provided is not copied but directly referenced, -and must thus remain valid through out the channels and any created socket's lifetime. +The \fBares_set_socket_functions(3)\fP struct provided is not copied but directly +referenced, and must thus remain valid through out the channels and any created +socket's lifetime. However, the \fBares_set_socket_functions_ex(3)\fP struct is +duplicated and does not need to survive past the call to the function. + .SH AVAILABILITY -Added in c-ares 1.13.0 +ares_socket_functions added in c-ares 1.13.0, ares_socket_functions_ex added in +c-ares 1.34.0 .SH SEE ALSO .BR ares_init_options (3), .BR socket (2), .BR close (2), .BR connect (2), -.BR recv (2), .BR recvfrom (2), -.BR send (2), +.BR sendto (2), +.BR bind (2), +.BR getsockname (2), +.BR setsockopt (2), .BR writev (2) diff --git a/deps/cares/include/ares.h b/deps/cares/include/ares.h index 95fc2440a1f662..139c6d66ee90df 100644 --- a/deps/cares/include/ares.h +++ b/deps/cares/include/ares.h @@ -460,6 +460,8 @@ typedef void (*ares_server_state_callback)(const char *server_string, ares_bool_t success, int flags, void *data); +typedef void (*ares_pending_write_cb)(void *data); + CARES_EXTERN int ares_library_init(int flags); CARES_EXTERN int ares_library_init_mem(int flags, void *(*amalloc)(size_t size), @@ -473,6 +475,9 @@ CARES_EXTERN int ares_library_init_android(jobject connectivity_manager); CARES_EXTERN int ares_library_android_initialized(void); #endif +#define CARES_HAVE_ARES_LIBRARY_INIT 1 +#define CARES_HAVE_ARES_LIBRARY_CLEANUP 1 + CARES_EXTERN int ares_library_initialized(void); CARES_EXTERN void ares_library_cleanup(void); @@ -526,6 +531,12 @@ CARES_EXTERN void ares_server_state_callback callback, void *user_data); +CARES_EXTERN void ares_set_pending_write_cb(ares_channel_t *channel, + ares_pending_write_cb callback, + void *user_data); + +CARES_EXTERN void ares_process_pending_write(ares_channel_t *channel); + CARES_EXTERN int ares_set_sortlist(ares_channel_t *channel, const char *sortstr); @@ -556,10 +567,251 @@ struct ares_socket_functions { ares_ssize_t (*asendv)(ares_socket_t, const struct iovec *, int, void *); }; -CARES_EXTERN void - ares_set_socket_functions(ares_channel_t *channel, - const struct ares_socket_functions *funcs, - void *user_data); +CARES_EXTERN CARES_DEPRECATED_FOR( + ares_set_socket_functions_ex) void ares_set_socket_functions(ares_channel_t + *channel, + const struct + ares_socket_functions + *funcs, + void *user_data); + +/*! Flags defining behavior of socket functions */ +typedef enum { + /*! Strongly recommended to create sockets as non-blocking and set this + * flag */ + ARES_SOCKFUNC_FLAG_NONBLOCKING = 1 << 0 +} ares_sockfunc_flags_t; + +/*! Socket options in request to asetsockopt() in struct + * ares_socket_functions_ex */ +typedef enum { + /*! Set the send buffer size. Value is a pointer to an int. (SO_SNDBUF) */ + ARES_SOCKET_OPT_SENDBUF_SIZE, + /*! Set the recv buffer size. Value is a pointer to an int. (SO_RCVBUF) */ + ARES_SOCKET_OPT_RECVBUF_SIZE, + /*! Set the network interface to use as the source for communication. + * Value is a C string. (SO_BINDTODEVICE) */ + ARES_SOCKET_OPT_BIND_DEVICE, + /*! Enable TCP Fast Open. Value is a pointer to an ares_bool_t. On some + * systems this could be a no-op if it is known it is on by default and + * return success. Other systems may be a no-op if known the system does + * not support the feature and returns failure with errno set to ENOSYS or + * WSASetLastError(WSAEOPNOTSUPP). + */ + ARES_SOCKET_OPT_TCP_FASTOPEN +} ares_socket_opt_t; + +/*! Flags for behavior during connect */ +typedef enum { + /*! Connect using TCP Fast Open */ + ARES_SOCKET_CONN_TCP_FASTOPEN = 1 << 0 +} ares_socket_connect_flags_t; + +/*! Flags for behavior during bind */ +typedef enum { + /*! Bind is for a TCP connection */ + ARES_SOCKET_BIND_TCP = 1 << 0, + /*! Bind is for a client connection, not server */ + ARES_SOCKET_BIND_CLIENT = 1 << 1 +} ares_socket_bind_flags_t; + +/*! Socket functions to call rather than using OS-native functions */ +struct ares_socket_functions_ex { + /*! ABI Version: must be "1" */ + unsigned int version; + + /*! Flags indicating behavior of the subsystem. One or more + * ares_sockfunc_flags_t */ + unsigned int flags; + + /*! REQUIRED. Create a new socket file descriptor. The file descriptor must + * be opened in non-blocking mode (so that reads and writes never block). + * Recommended other options would be to disable signals on write errors + * (SO_NOSIGPIPE), Disable the Nagle algorithm on SOCK_STREAM (TCP_NODELAY), + * and to automatically close file descriptors on exec (FD_CLOEXEC). + * + * \param[in] domain Socket domain. Valid values are AF_INET, AF_INET6. + * \param[in] type Socket type. Valid values are SOCK_STREAM (tcp) and + * SOCK_DGRAM (udp). + * \param[in] protocol In general this should be ignored, may be passed as + * 0 (use as default for type), or may be IPPROTO_UDP + * or IPPROTO_TCP. + * \param[in] user_data Pointer provided to ares_set_socket_functions_ex(). + * \return ARES_SOCKET_BAD on error, or socket file descriptor on success. + * On error, it is expected to set errno (or WSASetLastError()) to an + * appropriate reason code such as EAFNOSUPPORT / WSAAFNOSUPPORT. */ + ares_socket_t (*asocket)(int domain, int type, int protocol, void *user_data); + + /*! REQUIRED. Close a socket file descriptor. + * \param[in] sock Socket file descriptor returned from asocket. + * \param[in] user_data Pointer provided to ares_set_socket_functions_ex(). + * \return 0 on success. On failure, should set errno (or WSASetLastError) + * to an appropriate code such as EBADF / WSAEBADF */ + int (*aclose)(ares_socket_t sock, void *user_data); + + + /*! REQUIRED. Set socket option. This shares a similar syntax to the BSD + * setsockopt() call, however we use our own options. The value is typically + * a pointer to the desired value and each option has its own data type it + * will express in the documentation. + * + * \param[in] sock Socket file descriptor returned from asocket. + * \param[in] opt Option to set. + * \param[in] val Pointer to value for option. + * \param[in] val_size Size of value. + * \param[in] user_data Pointer provided to + * ares_set_socket_functions_ex(). + * \return Return 0 on success, otherwise -1 should be returned with an + * appropriate errno (or WSASetLastError()) set. If error is ENOSYS / + * WSAEOPNOTSUPP an error will not be propagated as it will take it + * to mean it is an intentional decision to not support the feature. + */ + int (*asetsockopt)(ares_socket_t sock, ares_socket_opt_t opt, const void *val, + ares_socklen_t val_size, void *user_data); + + /*! REQUIRED. Connect to the remote using the supplied address. For UDP + * sockets this will bind the file descriptor to only send and receive packets + * from the remote address provided. + * + * \param[in] sock Socket file descriptor returned from asocket. + * \param[in] address Address to connect to + * \param[in] address_len Size of address structure passed + * \param[in] flags One or more ares_socket_connect_flags_t + * \param[in] user_data Pointer provided to + * ares_set_socket_functions_ex(). + * \return Return 0 upon successful establishement, otherwise -1 should be + * returned with an appropriate errno (or WSASetLastError()) set. It + * is generally expected that most TCP connections (not using TCP Fast Open) + * will return -1 with an error of EINPROGRESS / WSAEINPROGRESS due to the + * non-blocking nature of the connection. It is then the responsibility of + * the implementation to notify of writability on the socket to indicate the + * connection has succeeded (or readability on failure to retrieve the + * appropriate error). + */ + int (*aconnect)(ares_socket_t sock, const struct sockaddr *address, + ares_socklen_t address_len, unsigned int flags, + void *user_data); + + /*! REQUIRED. Attempt to read data from the remote. + * + * \param[in] sock Socket file descriptor returned from asocket. + * \param[in,out] buffer Allocated buffer to place data read from + * socket. + * \param[in] length Size of buffer + * \param[in] flags Unused, always 0. + * \param[in,out] address Buffer to hold address data was received from. + * May be NULL if address not desired. + * \param[in,out] address_len Input size of address buffer, output actual + * written size. Must be NULL if address is NULL. + * \param[in] user_data Pointer provided to + * ares_set_socket_functions_ex(). + * \return -1 on error with appropriate errno (or WSASetLastError()) set, + * such as EWOULDBLOCK / EAGAIN / WSAEWOULDBLOCK, or ECONNRESET / + * WSAECONNRESET. + */ + ares_ssize_t (*arecvfrom)(ares_socket_t sock, void *buffer, size_t length, + int flags, struct sockaddr *address, + ares_socklen_t *address_len, void *user_data); + + /*! REQUIRED. Attempt to send data to the remote. Optional address may be + * specified which may be useful on unbound UDP sockets (though currently not + * used), and TCP FastOpen where the connection is delayed until first write. + * + * \param[in] sock Socket file descriptor returned from asocket. + * \param[in] buffer Containing data to place onto wire. + * \param[in] length Size of buffer + * \param[in] flags Flags for writing. Currently only used flag is + * MSG_NOSIGNAL if the host OS has such a flag. In + * general flags can be ignored. + * \param[in] address Buffer containing address to send data to. May + * be NULL. + * \param[in,out] address_len Size of address buffer. Must be 0 if address + * is NULL. + * \param[in] user_data Pointer provided to + * ares_set_socket_functions_ex(). + * \return Number of bytes written. -1 on error with appropriate errno (or + * WSASetLastError()) set. + */ + ares_ssize_t (*asendto)(ares_socket_t sock, const void *buffer, size_t length, + int flags, const struct sockaddr *address, + ares_socklen_t address_len, void *user_data); + + /*! Optional. Retrieve the local address of the socket. + * + * \param[in] sock Socket file descriptor returned from asocket + * \param[in,out] address Buffer to hold address + * \param[in,out] address_len Size of address buffer on input, written size + * on output. + * \param[in] user_data Pointer provided to + * ares_set_socket_functions_ex(). + * \return 0 on success. -1 on error with an appropriate errno (or + * WSASetLastError()) set. + */ + int (*agetsockname)(ares_socket_t sock, struct sockaddr *address, + ares_socklen_t *address_len, void *user_data); + + /*! Optional. Bind the socket to an address. This can be used for client + * connections to bind the source address for packets before connect, or + * for server connections to bind to an address and port before listening. + * Currently c-ares only supports client connections. + * + * \param[in] sock Socket file descriptor returned from asocket + * \param[in] flags ares_socket_bind_flags_t flags. + * \param[in] address Buffer containing address. + * \param[in] address_len Size of address buffer. + * \param[in] user_data Pointer provided to + * ares_set_socket_functions_ex(). + * \return 0 on success. -1 on error with an appropriate errno (or + * WSASetLastError()) set. + */ + int (*abind)(ares_socket_t sock, unsigned int flags, + const struct sockaddr *address, socklen_t address_len, + void *user_data); + + /* Optional. Convert an interface name into the interface index. If this + * callback is not specified, then IPv6 Link-Local DNS servers cannot be used. + * + * \param[in] ifname Interface Name as NULL-terminated string. + * \param[in] user_data Pointer provided to + * ares_set_socket_functions_ex(). + * \return 0 on failure, otherwise interface index. + */ + unsigned int (*aif_nametoindex)(const char *ifname, void *user_data); + + /* Optional. Convert an interface index into the interface name. If this + * callback is not specified, then IPv6 Link-Local DNS servers cannot be used. + * + * \param[in] ifindex Interface index, must be > 0 + * \param[in] ifname_buf Buffer to hold interface name. Must be at least + * IFNAMSIZ in length or 32 bytes if IFNAMSIZ isn't + * defined. + * \param[in] ifname_buf_len Size of ifname_buf for verification. + * \param[in] user_data Pointer provided to + * ares_set_socket_functions_ex(). + * \return NULL on failure, otherwise pointer to provided ifname_buf + */ + const char *(*aif_indextoname)(unsigned int ifindex, char *ifname_buf, + size_t ifname_buf_len, void *user_data); +}; + +/*! Override the native socket functions for the OS with the provided set. + * An optional user data thunk may be specified which will be passed to + * each registered callback. Replaces ares_set_socket_functions(). + * + * \param[in] channel An initialized c-ares channel. + * \param[in] funcs Structure registering the implementations for the + * various functions. See the structure definition. + * This will be duplicated and does not need to exist + * past the life of this call. + * \param[in] user_data User data thunk which will be passed to each call of + * the registered callbacks. + * \return ARES_SUCCESS on success, or another error code such as ARES_EFORMERR + * on misuse. + */ +CARES_EXTERN ares_status_t ares_set_socket_functions_ex( + ares_channel_t *channel, const struct ares_socket_functions_ex *funcs, + void *user_data); + CARES_EXTERN CARES_DEPRECATED_FOR(ares_send_dnsrec) void ares_send( ares_channel_t *channel, const unsigned char *qbuf, int qlen, @@ -655,12 +907,52 @@ CARES_EXTERN struct timeval *ares_timeout(const ares_channel_t *channel, struct timeval *maxtv, struct timeval *tv); -CARES_EXTERN CARES_DEPRECATED_FOR(ares_process_fd) void ares_process( +CARES_EXTERN CARES_DEPRECATED_FOR(ares_process_fds) void ares_process( ares_channel_t *channel, fd_set *read_fds, fd_set *write_fds); -CARES_EXTERN void ares_process_fd(ares_channel_t *channel, - ares_socket_t read_fd, - ares_socket_t write_fd); +/*! Events used by ares_fd_events_t */ +typedef enum { + ARES_FD_EVENT_NONE = 0, /*!< No events */ + ARES_FD_EVENT_READ = 1 << 0, /*!< Read event (including disconnect/error) */ + ARES_FD_EVENT_WRITE = 1 << 1 /*!< Write event */ +} ares_fd_eventflag_t; + +/*! Type holding a file descriptor and mask of events, used by + * ares_process_fds() */ +typedef struct { + ares_socket_t fd; /*!< File descriptor */ + unsigned int events; /*!< Mask of ares_fd_eventflag_t */ +} ares_fd_events_t; + +/*! Flags used by ares_process_fds() */ +typedef enum { + ARES_PROCESS_FLAG_NONE = 0, /*!< No flag value */ + ARES_PROCESS_FLAG_SKIP_NON_FD = 1 << 0 /*!< skip any processing unrelated to + * the file descriptor events passed + * in */ +} ares_process_flag_t; + +/*! Process events on multiple file descriptors based on the event mask + * associated with each file descriptor. Recommended over calling + * ares_process_fd() multiple times since it would trigger additional logic + * such as timeout processing on each call. + * + * \param[in] channel Initialized ares channel + * \param[in] events Array of file descriptors with events. May be NULL if + * no events, but may have timeouts to process. + * \param[in] nevents Number of elements in the events array. May be 0 if + * no events, but may have timeouts to process. + * \param[in] flags Flags to alter behavior of the process command. + * \return ARES_ENOMEM on out of memory, ARES_EFORMERR on misuse, + * otherwise ARES_SUCCESS + */ +CARES_EXTERN ares_status_t ares_process_fds(ares_channel_t *channel, + const ares_fd_events_t *events, + size_t nevents, unsigned int flags); + +CARES_EXTERN void ares_process_fd(ares_channel_t *channel, + ares_socket_t read_fd, + ares_socket_t write_fd); CARES_EXTERN CARES_DEPRECATED_FOR(ares_dns_record_create) int ares_create_query( const char *name, int dnsclass, int type, unsigned short id, int rd, diff --git a/deps/cares/include/ares_build.h b/deps/cares/include/ares_build.h index 18a92606a81714..aca66bebcd9b5c 100644 --- a/deps/cares/include/ares_build.h +++ b/deps/cares/include/ares_build.h @@ -165,7 +165,6 @@ # define CARES_TYPEOF_ARES_SOCKLEN_T int #elif defined(_WIN32) -# define WIN32_LEAN_AND_MEAN # define CARES_TYPEOF_ARES_SOCKLEN_T int # define CARES_HAVE_WINDOWS_H 1 # define CARES_HAVE_SYS_TYPES_H 1 diff --git a/deps/cares/include/ares_version.h b/deps/cares/include/ares_version.h index c910d79209a3fb..ba98e6949d53c8 100644 --- a/deps/cares/include/ares_version.h +++ b/deps/cares/include/ares_version.h @@ -31,14 +31,21 @@ #define ARES_COPYRIGHT "2004 - 2024 Daniel Stenberg, ." #define ARES_VERSION_MAJOR 1 -#define ARES_VERSION_MINOR 33 +#define ARES_VERSION_MINOR 34 #define ARES_VERSION_PATCH 1 + #define ARES_VERSION \ ((ARES_VERSION_MAJOR << 16) | (ARES_VERSION_MINOR << 8) | \ (ARES_VERSION_PATCH)) -#define ARES_VERSION_STR "1.33.1" -#define CARES_HAVE_ARES_LIBRARY_INIT 1 -#define CARES_HAVE_ARES_LIBRARY_CLEANUP 1 + +/* Need a level of indirection due to argument prescan to stringify a macro + * value. */ +#define ARES_STRINGIFY_PRE(s) #s +#define ARES_STRINGIFY(s) ARES_STRINGIFY_PRE(s) + +#define ARES_VERSION_STR \ + ARES_STRINGIFY(ARES_VERSION_MAJOR) \ + "." ARES_STRINGIFY(ARES_VERSION_MINOR) "." ARES_STRINGIFY(ARES_VERSION_PATCH) #endif diff --git a/deps/cares/m4/libtool.m4 b/deps/cares/m4/libtool.m4 index 79a2451ef520f2..e5ddacee99c5cd 100644 --- a/deps/cares/m4/libtool.m4 +++ b/deps/cares/m4/libtool.m4 @@ -1,6 +1,6 @@ # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # -# Copyright (C) 1996-2001, 2003-2019, 2021-2022 Free Software +# Copyright (C) 1996-2001, 2003-2019, 2021-2024 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # @@ -9,13 +9,13 @@ # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl -# Copyright (C) 2014 Free Software Foundation, Inc. +# Copyright (C) 2024 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of of the License, or +# the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you @@ -32,7 +32,7 @@ m4_define([_LT_COPYING], [dnl # along with this program. If not, see . ]) -# serial 59 LT_INIT +# serial 62 LT_INIT # LT_PREREQ(VERSION) @@ -60,7 +60,7 @@ esac # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], -[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK +[AC_PREREQ([2.64])dnl We use AC_PATH_PROGS_FEATURE_CHECK AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl @@ -616,7 +616,7 @@ m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before -# AC_OUTPUT is called), incase it is used in configure for compilation +# AC_OUTPUT is called), in case it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} @@ -651,9 +651,9 @@ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. -Copyright (C) 2011 Free Software Foundation, Inc. +Copyright (C) 2024 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation -gives unlimited permision to copy, distribute and modify it." +gives unlimited permission to copy, distribute and modify it." while test 0 != $[#] do @@ -730,7 +730,6 @@ _LT_CONFIG_SAVE_COMMANDS([ cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. @@ -975,6 +974,7 @@ _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE + # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ @@ -1025,6 +1025,21 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ rm -f conftest.* fi]) + # Feature test to disable chained fixups since it is not + # compatible with '-undefined dynamic_lookup' + AC_CACHE_CHECK([for -no_fixup_chains linker flag], + [lt_cv_support_no_fixup_chains], + [ save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -Wl,-no_fixup_chains" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([],[])], + lt_cv_support_no_fixup_chains=yes, + lt_cv_support_no_fixup_chains=no + ) + LDFLAGS=$save_LDFLAGS + ] + ) + AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no @@ -1049,7 +1064,7 @@ _LT_EOF echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF -int main() { return 0;} +int main(void) { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err @@ -1074,7 +1089,11 @@ _LT_EOF 10.[[012]],*|,*powerpc*-darwin[[5-8]]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; *) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' + if test yes = "$lt_cv_support_no_fixup_chains"; then + AS_VAR_APPEND([_lt_dar_allow_undefined], [' $wl-no_fixup_chains']) + fi + ;; esac ;; esac @@ -1256,7 +1275,9 @@ lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` + # Trim trailing / since we'll always append absolute paths and we want + # to avoid //, if only for less confusing output for the user. + lt_sysroot=`$CC --print-sysroot 2>/dev/null | $SED 's:/\+$::'` fi ;; #( /*) @@ -1368,7 +1389,7 @@ mips64*-*linux*) ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) +s390*-*linux*|s390*-*tpf*|sparc*-*linux*|x86_64-gnu*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when @@ -1383,7 +1404,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; - x86_64-*linux*) + x86_64-*linux*|x86_64-gnu*) case `$FILECMD conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" @@ -1412,7 +1433,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; - x86_64-*linux*) + x86_64-*linux*|x86_64-gnu*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) @@ -1495,7 +1516,7 @@ _LT_DECL([], [AR], [1], [The archiver]) # Use ARFLAGS variable as AR's operation code to sync the variable naming with # Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have -# higher priority because thats what people were doing historically (setting +# higher priority because that's what people were doing historically (setting # ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS # variable obsoleted/removed. @@ -1545,7 +1566,7 @@ AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) -AC_CHECK_TOOL(RANLIB, ranlib, :) +AC_REQUIRE([AC_PROG_RANLIB]) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) @@ -1556,15 +1577,8 @@ old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then - case $host_os in - bitrig* | openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" - ;; - esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in @@ -1703,7 +1717,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl lt_cv_sys_max_cmd_len=-1; ;; - cygwin* | mingw* | cegcc*) + cygwin* | mingw* | windows* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, @@ -1725,7 +1739,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl lt_cv_sys_max_cmd_len=8192; ;; - bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) + darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` @@ -1885,11 +1899,11 @@ else /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); +int fnord (void) __attribute__((visibility("default"))); #endif -int fnord () { return 42; } -int main () +int fnord (void) { return 42; } +int main (void) { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; @@ -1946,7 +1960,7 @@ else lt_cv_dlopen_self=yes ;; - mingw* | pw32* | cegcc*) + mingw* | windows* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; @@ -2314,7 +2328,7 @@ if test yes = "$GCC"; then *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in - mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; + mingw* | windows* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` @@ -2372,7 +2386,7 @@ BEGIN {RS = " "; FS = "/|\n";} { # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + mingw* | windows* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` @@ -2447,7 +2461,7 @@ aix[[4-9]]*) # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl - # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # linker flag in LDFLAGS as well, or --enable-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the @@ -2541,7 +2555,7 @@ bsdi[[45]]*) # libtool to hard-code these into programs ;; -cygwin* | mingw* | pw32* | cegcc*) +cygwin* | mingw* | windows* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no @@ -2552,6 +2566,19 @@ cygwin* | mingw* | pw32* | cegcc*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds + # If user builds GCC with mulitlibs enabled, + # it should just install on $(libdir) + # not on $(libdir)/../bin or 32 bits dlls would override 64 bit ones. + if test yes = $multilib; then + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + $install_prog $dir/$dlname $destdir/$dlname~ + chmod a+x $destdir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib $destdir/$dlname'\'' || exit \$?; + fi' + else postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ @@ -2561,6 +2588,7 @@ cygwin* | mingw* | pw32* | cegcc*) if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' + fi postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' @@ -2573,7 +2601,7 @@ cygwin* | mingw* | pw32* | cegcc*) m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; - mingw* | cegcc*) + mingw* | windows* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; @@ -2592,7 +2620,7 @@ m4_if([$1], [],[ library_names_spec='$libname.dll.lib' case $build_os in - mingw*) + mingw* | windows*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' @@ -2699,7 +2727,21 @@ freebsd* | dragonfly* | midnightbsd*) need_version=yes ;; esac - shlibpath_var=LD_LIBRARY_PATH + case $host_cpu in + powerpc64) + # On FreeBSD bi-arch platforms, a different variable is used for 32-bit + # binaries. See . + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[int test_pointer_size[sizeof (void *) - 5]; + ]])], + [shlibpath_var=LD_LIBRARY_PATH], + [shlibpath_var=LD_32_LIBRARY_PATH]) + ;; + *) + shlibpath_var=LD_LIBRARY_PATH + ;; + esac case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes @@ -2840,7 +2882,7 @@ linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no - library_names_spec='$libname$release$shared_ext' + library_names_spec='$libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH @@ -2852,8 +2894,9 @@ linux*android*) hardcode_into_libs=yes dynamic_linker='Android linker' - # Don't embed -rpath directories since the linker doesn't support them. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + # -rpath works at least for libraries that are not overridden by + # libraries installed in system locations. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; # This must be glibc/ELF. @@ -2887,7 +2930,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) # before this can be enabled. hardcode_into_libs=yes - # Ideally, we could use ldconfig to report *all* directores which are + # Ideally, we could use ldconfig to report *all* directories which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, @@ -2944,7 +2987,7 @@ newsos6) dynamic_linker='ldqnx.so' ;; -openbsd* | bitrig*) +openbsd*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no @@ -3276,7 +3319,7 @@ if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in - *-*-mingw*) + *-*-mingw* | *-*-windows*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) @@ -3385,7 +3428,7 @@ case $reload_flag in esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in - cygwin* | mingw* | pw32* | cegcc*) + cygwin* | mingw* | windows* | pw32* | cegcc*) if test yes != "$GCC"; then reload_cmds=false fi @@ -3457,7 +3500,6 @@ lt_cv_deplibs_check_method='unknown' # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure @@ -3484,7 +3526,7 @@ cygwin*) lt_cv_file_magic_cmd='func_win32_libid' ;; -mingw* | pw32*) +mingw* | windows* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. @@ -3493,7 +3535,7 @@ mingw* | pw32*) lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64|pe-aarch64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; @@ -3584,7 +3626,7 @@ newos6*) lt_cv_deplibs_check_method=pass_all ;; -openbsd* | bitrig*) +openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else @@ -3648,7 +3690,7 @@ file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in - mingw* | pw32*) + mingw* | windows* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else @@ -3700,7 +3742,7 @@ else # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in - mingw*) lt_bad_file=conftest.nm/nofile ;; + mingw* | windows*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in @@ -3791,7 +3833,7 @@ lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in -cygwin* | mingw* | pw32* | cegcc*) +cygwin* | mingw* | windows* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in @@ -3823,16 +3865,16 @@ _LT_DECL([], [sharedlib_from_linklib_cmd], [1], m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], - [lt_cv_path_mainfest_tool=no +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_manifest_tool], + [lt_cv_path_manifest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes + lt_cv_path_manifest_tool=yes fi rm -f conftest*]) -if test yes != "$lt_cv_path_mainfest_tool"; then +if test yes != "$lt_cv_path_manifest_tool"; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl @@ -3861,7 +3903,7 @@ AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in -*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-mingw* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) @@ -3936,7 +3978,7 @@ case $host_os in aix*) symcode='[[BCDT]]' ;; -cygwin* | mingw* | pw32* | cegcc*) +cygwin* | mingw* | windows* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) @@ -3951,7 +3993,7 @@ osf*) symcode='[[BCDEGQRST]]' ;; solaris*) - symcode='[[BDRT]]' + symcode='[[BCDRT]]' ;; sco3.2v5*) symcode='[[DT]]' @@ -4015,7 +4057,7 @@ $lt_c_name_lib_hook\ # Handle CRLF in mingw tool chain opt_cr= case $build_os in -mingw*) +mingw* | windows*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac @@ -4066,7 +4108,7 @@ void nm_test_func(void){} #ifdef __cplusplus } #endif -int main(){nm_test_var='a';nm_test_func();return(0);} +int main(void){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then @@ -4242,7 +4284,7 @@ m4_if([$1], [CXX], [ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) + mingw* | windows* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style @@ -4318,7 +4360,7 @@ m4_if([$1], [CXX], [ ;; esac ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) + mingw* | windows* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], @@ -4566,7 +4608,7 @@ m4_if([$1], [CXX], [ # PIC is the default for these OSes. ;; - mingw* | cygwin* | pw32* | os2* | cegcc*) + mingw* | windows* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style @@ -4670,7 +4712,7 @@ m4_if([$1], [CXX], [ esac ;; - mingw* | cygwin* | pw32* | os2* | cegcc*) + mingw* | windows* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], @@ -4712,6 +4754,12 @@ m4_if([$1], [CXX], [ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; + *flang* | ftn) + # Flang compiler. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) @@ -4945,7 +4993,7 @@ m4_if([$1], [CXX], [ pw32*) _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds ;; - cygwin* | mingw* | cegcc*) + cygwin* | mingw* | windows* | cegcc*) case $cc_basename in cl* | icl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' @@ -5003,7 +5051,7 @@ dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in - cygwin* | mingw* | pw32* | cegcc*) + cygwin* | mingw* | windows* | pw32* | cegcc*) # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. @@ -5015,7 +5063,7 @@ dnl Note also adjust exclude_expsyms for C++ above. # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC) with_gnu_ld=yes ;; - openbsd* | bitrig*) + openbsd*) with_gnu_ld=no ;; esac @@ -5118,7 +5166,7 @@ _LT_EOF fi ;; - cygwin* | mingw* | pw32* | cegcc*) + cygwin* | mingw* | windows* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' @@ -5174,7 +5222,7 @@ _LT_EOF cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; @@ -5575,7 +5623,7 @@ _LT_EOF _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; - cygwin* | mingw* | pw32* | cegcc*) + cygwin* | mingw* | windows* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. # hardcode_libdir_flag_spec is actually meaningless, as there is @@ -5592,14 +5640,14 @@ _LT_EOF # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_cmds, $1)='$CC -Fe $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + $CC -Fe $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' @@ -5837,7 +5885,7 @@ _LT_EOF *nto* | *qnx*) ;; - openbsd* | bitrig*) + openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no @@ -5880,7 +5928,7 @@ _LT_EOF cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; @@ -6174,7 +6222,7 @@ _LT_TAGDECL([], [hardcode_direct], [0], _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary and the resulting library dependency is - "absolute", i.e impossible to change by setting $shlibpath_var if the + "absolute", i.e. impossible to change by setting $shlibpath_var if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR @@ -6232,7 +6280,7 @@ _LT_TAGVAR(objext, $1)=$objext lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' +lt_simple_link_test_code='int main(void){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other @@ -6421,8 +6469,7 @@ if test yes != "$_lt_caught_CXX_error"; then wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= @@ -6442,7 +6489,7 @@ if test yes != "$_lt_caught_CXX_error"; then # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "[[-]]L"' else GXX=no @@ -6651,7 +6698,7 @@ if test yes != "$_lt_caught_CXX_error"; then esac ;; - cygwin* | mingw* | pw32* | cegcc*) + cygwin* | mingw* | windows* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl* | ,icl* | no,icl*) # Native MSVC or ICC @@ -6750,7 +6797,7 @@ if test yes != "$_lt_caught_CXX_error"; then cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; @@ -6818,7 +6865,7 @@ if test yes != "$_lt_caught_CXX_error"; then # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "[[-]]L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then @@ -6883,7 +6930,7 @@ if test yes != "$_lt_caught_CXX_error"; then # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "[[-]]L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then @@ -7131,7 +7178,7 @@ if test yes != "$_lt_caught_CXX_error"; then _LT_TAGVAR(ld_shlibs, $1)=yes ;; - openbsd* | bitrig*) + openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no @@ -7222,7 +7269,7 @@ if test yes != "$_lt_caught_CXX_error"; then # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "[[-]]L"' else # FIXME: insert proper C++ library support @@ -7306,7 +7353,7 @@ if test yes != "$_lt_caught_CXX_error"; then # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "[[-]]L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. @@ -7317,7 +7364,7 @@ if test yes != "$_lt_caught_CXX_error"; then # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "[[-]]L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' @@ -7555,10 +7602,11 @@ if AC_TRY_EVAL(ac_compile); then case $prev$p in -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. + # Some compilers place space between "-{L,R,l}" and the path. # Remove the space. - if test x-L = "$p" || - test x-R = "$p"; then + if test x-L = x"$p" || + test x-R = x"$p" || + test x-l = x"$p"; then prev=$p continue fi @@ -8216,7 +8264,7 @@ AC_SUBST([DLLTOOL]) # ---------------- # Check for a file(cmd) program that can be used to detect file type and magic m4_defun([_LT_DECL_FILECMD], -[AC_CHECK_TOOL([FILECMD], [file], [:]) +[AC_CHECK_PROG([FILECMD], [file], [file], [:]) _LT_DECL([], [FILECMD], [1], [A file(cmd) program that detects file types]) ])# _LD_DECL_FILECMD @@ -8232,73 +8280,6 @@ _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED - -m4_ifndef([AC_PROG_SED], [ -############################################################ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -############################################################ - -m4_defun([AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f "$lt_ac_sed" && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test 10 -lt "$lt_ac_count" && break - lt_ac_count=`expr $lt_ac_count + 1` - if test "$lt_ac_count" -gt "$lt_ac_max"; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_SUBST([SED]) -AC_MSG_RESULT([$SED]) -])#AC_PROG_SED -])#m4_ifndef - -# Old name: -AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) @@ -8345,7 +8326,7 @@ AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in - *-*-mingw* ) # actually msys + *-*-mingw* | *-*-windows* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) @@ -8358,7 +8339,7 @@ AC_CACHE_VAL(lt_cv_to_host_file_cmd, ;; *-*-cygwin* ) case $build in - *-*-mingw* ) # actually msys + *-*-mingw* | *-*-windows* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) @@ -8384,9 +8365,9 @@ AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in - *-*-mingw* ) + *-*-mingw* | *-*-windows* ) case $build in - *-*-mingw* ) # actually msys + *-*-mingw* | *-*-windows* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac diff --git a/deps/cares/m4/ltoptions.m4 b/deps/cares/m4/ltoptions.m4 index b0b5e9c2126062..25caa890298a4e 100644 --- a/deps/cares/m4/ltoptions.m4 +++ b/deps/cares/m4/ltoptions.m4 @@ -1,6 +1,6 @@ # Helper functions for option handling. -*- Autoconf -*- # -# Copyright (C) 2004-2005, 2007-2009, 2011-2019, 2021-2022 Free +# Copyright (C) 2004-2005, 2007-2009, 2011-2019, 2021-2024 Free # Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # @@ -8,7 +8,7 @@ # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. -# serial 8 ltoptions.m4 +# serial 10 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) @@ -128,7 +128,7 @@ LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) +*-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) @@ -323,29 +323,39 @@ dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_AIX_SONAME([DEFAULT]) # ---------------------------------- -# implement the --with-aix-soname flag, and support the `aix-soname=aix' -# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT -# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. +# implement the --enable-aix-soname configure option, and support the +# `aix-soname=aix' and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. +# DEFAULT is either `aix', `both', or `svr4'. If omitted, it defaults to `aix'. m4_define([_LT_WITH_AIX_SONAME], [m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[[5-9]]*,yes) AC_MSG_CHECKING([which variant of shared library versioning to provide]) - AC_ARG_WITH([aix-soname], - [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], + AC_ARG_ENABLE([aix-soname], + [AS_HELP_STRING([--enable-aix-soname=aix|svr4|both], [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], - [case $withval in - aix|svr4|both) - ;; - *) - AC_MSG_ERROR([Unknown argument to --with-aix-soname]) - ;; - esac - lt_cv_with_aix_soname=$with_aix_soname], - [AC_CACHE_VAL([lt_cv_with_aix_soname], - [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) - with_aix_soname=$lt_cv_with_aix_soname]) + [case $enableval in + aix|svr4|both) + ;; + *) + AC_MSG_ERROR([Unknown argument to --enable-aix-soname]) + ;; + esac + lt_cv_with_aix_soname=$enable_aix_soname], + [_AC_ENABLE_IF([with], [aix-soname], + [case $withval in + aix|svr4|both) + ;; + *) + AC_MSG_ERROR([Unknown argument to --with-aix-soname]) + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname], + [AC_CACHE_VAL([lt_cv_with_aix_soname], + [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT)]) + enable_aix_soname=$lt_cv_with_aix_soname]) + with_aix_soname=$enable_aix_soname AC_MSG_RESULT([$with_aix_soname]) if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member @@ -376,30 +386,50 @@ LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) # _LT_WITH_PIC([MODE]) # -------------------- -# implement the --with-pic flag, and support the 'pic-only' and 'no-pic' +# implement the --enable-pic flag, and support the 'pic-only' and 'no-pic' # LT_INIT options. # MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. m4_define([_LT_WITH_PIC], -[AC_ARG_WITH([pic], - [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], +[AC_ARG_ENABLE([pic], + [AS_HELP_STRING([--enable-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} - case $withval in - yes|no) pic_mode=$withval ;; - *) - pic_mode=default - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for lt_pkg in $withval; do - IFS=$lt_save_ifs - if test "X$lt_pkg" = "X$lt_p"; then - pic_mode=yes - fi - done - IFS=$lt_save_ifs - ;; - esac], - [pic_mode=m4_default([$1], [default])]) + case $enableval in + yes|no) pic_mode=$enableval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [dnl Continue to support --with-pic and --without-pic, for backward + dnl compatibility. + _AC_ENABLE_IF([with], [pic], + [lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [pic_mode=m4_default([$1], [default])])] + ) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC diff --git a/deps/cares/m4/ltsugar.m4 b/deps/cares/m4/ltsugar.m4 index 902508bd93aec6..5b5c80a3ad78a1 100644 --- a/deps/cares/m4/ltsugar.m4 +++ b/deps/cares/m4/ltsugar.m4 @@ -1,6 +1,6 @@ # ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # -# Copyright (C) 2004-2005, 2007-2008, 2011-2019, 2021-2022 Free Software +# Copyright (C) 2004-2005, 2007-2008, 2011-2019, 2021-2024 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # diff --git a/deps/cares/m4/ltversion.m4 b/deps/cares/m4/ltversion.m4 index b155d0aceca376..149c9719fa5983 100644 --- a/deps/cares/m4/ltversion.m4 +++ b/deps/cares/m4/ltversion.m4 @@ -1,6 +1,6 @@ # ltversion.m4 -- version numbers -*- Autoconf -*- # -# Copyright (C) 2004, 2011-2019, 2021-2022 Free Software Foundation, +# Copyright (C) 2004, 2011-2019, 2021-2024 Free Software Foundation, # Inc. # Written by Scott James Remnant, 2004 # @@ -10,15 +10,15 @@ # @configure_input@ -# serial 4245 ltversion.m4 +# serial 4392 ltversion.m4 # This file is part of GNU Libtool -m4_define([LT_PACKAGE_VERSION], [2.4.7]) -m4_define([LT_PACKAGE_REVISION], [2.4.7]) +m4_define([LT_PACKAGE_VERSION], [2.5.3]) +m4_define([LT_PACKAGE_REVISION], [2.5.3]) AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.4.7' -macro_revision='2.4.7' +[macro_version='2.5.3' +macro_revision='2.5.3' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) diff --git a/deps/cares/m4/lt~obsolete.m4 b/deps/cares/m4/lt~obsolete.m4 index 0f7a8759da8d46..22b5346973571a 100644 --- a/deps/cares/m4/lt~obsolete.m4 +++ b/deps/cares/m4/lt~obsolete.m4 @@ -1,6 +1,6 @@ # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # -# Copyright (C) 2004-2005, 2007, 2009, 2011-2019, 2021-2022 Free +# Copyright (C) 2004-2005, 2007, 2009, 2011-2019, 2021-2024 Free # Software Foundation, Inc. # Written by Scott James Remnant, 2004. # diff --git a/deps/cares/src/lib/CMakeLists.txt b/deps/cares/src/lib/CMakeLists.txt index ef0acf371ff091..9956fd625b2ad6 100644 --- a/deps/cares/src/lib/CMakeLists.txt +++ b/deps/cares/src/lib/CMakeLists.txt @@ -53,6 +53,7 @@ IF (CARES_SHARED) "$" "$" PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}" + "${CMAKE_CURRENT_SOURCE_DIR}/include" ) TARGET_COMPILE_DEFINITIONS (${PROJECT_NAME} PRIVATE HAVE_CONFIG_H=1 CARES_BUILDING_LIBRARY) @@ -110,6 +111,7 @@ IF (CARES_STATIC) "$" "$" PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}" + "${CMAKE_CURRENT_SOURCE_DIR}/include" ) TARGET_COMPILE_DEFINITIONS (${LIBNAME} PRIVATE HAVE_CONFIG_H=1 CARES_BUILDING_LIBRARY) diff --git a/deps/cares/src/lib/Makefile.am b/deps/cares/src/lib/Makefile.am index 44e04bd35ccf7d..db4f2640f2bd40 100644 --- a/deps/cares/src/lib/Makefile.am +++ b/deps/cares/src/lib/Makefile.am @@ -11,7 +11,8 @@ ACLOCAL_AMFLAGS = -I m4 --install AM_CPPFLAGS += -I$(top_builddir)/include \ -I$(top_builddir)/src/lib \ -I$(top_srcdir)/include \ - -I$(top_srcdir)/src/lib + -I$(top_srcdir)/src/lib \ + -I$(top_srcdir)/src/lib/include lib_LTLIBRARIES = libcares.la diff --git a/deps/cares/src/lib/Makefile.in b/deps/cares/src/lib/Makefile.in index 30d33843d5d2d8..6fdb27835828af 100644 --- a/deps/cares/src/lib/Makefile.in +++ b/deps/cares/src/lib/Makefile.in @@ -15,7 +15,7 @@ @SET_MAKE@ # aminclude_static.am generated automatically by Autoconf -# from AX_AM_MACROS_STATIC on Fri Aug 23 09:37:25 EDT 2024 +# from AX_AM_MACROS_STATIC on Wed Oct 9 20:58:25 EDT 2024 # Copyright (C) The c-ares project and its contributors # SPDX-License-Identifier: MIT @@ -162,13 +162,10 @@ am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libcares_la_LIBADD = am__dirstamp = $(am__leading_dot)dirstamp -am__objects_1 = libcares_la-ares__addrinfo2hostent.lo \ - libcares_la-ares__addrinfo_localhost.lo \ - libcares_la-ares__close_sockets.lo \ - libcares_la-ares__hosts_file.lo \ - libcares_la-ares__parse_into_addrinfo.lo \ - libcares_la-ares__socket.lo libcares_la-ares__sortaddrinfo.lo \ +am__objects_1 = libcares_la-ares_addrinfo2hostent.lo \ + libcares_la-ares_addrinfo_localhost.lo \ libcares_la-ares_android.lo libcares_la-ares_cancel.lo \ + libcares_la-ares_close_sockets.lo libcares_la-ares_conn.lo \ libcares_la-ares_cookie.lo libcares_la-ares_data.lo \ libcares_la-ares_destroy.lo libcares_la-ares_free_hostent.lo \ libcares_la-ares_free_string.lo \ @@ -176,25 +173,30 @@ am__objects_1 = libcares_la-ares__addrinfo2hostent.lo \ libcares_la-ares_getaddrinfo.lo libcares_la-ares_getenv.lo \ libcares_la-ares_gethostbyaddr.lo \ libcares_la-ares_gethostbyname.lo \ - libcares_la-ares_getnameinfo.lo libcares_la-ares_init.lo \ - libcares_la-ares_library_init.lo libcares_la-ares_metrics.lo \ - libcares_la-ares_options.lo libcares_la-ares_platform.lo \ + libcares_la-ares_getnameinfo.lo libcares_la-ares_hosts_file.lo \ + libcares_la-ares_init.lo libcares_la-ares_library_init.lo \ + libcares_la-ares_metrics.lo libcares_la-ares_options.lo \ + libcares_la-ares_parse_into_addrinfo.lo \ libcares_la-ares_process.lo libcares_la-ares_qcache.lo \ libcares_la-ares_query.lo libcares_la-ares_search.lo \ - libcares_la-ares_send.lo libcares_la-ares_strerror.lo \ - libcares_la-ares_sysconfig.lo \ + libcares_la-ares_send.lo \ + libcares_la-ares_set_socket_functions.lo \ + libcares_la-ares_socket.lo libcares_la-ares_sortaddrinfo.lo \ + libcares_la-ares_strerror.lo libcares_la-ares_sysconfig.lo \ libcares_la-ares_sysconfig_files.lo \ libcares_la-ares_sysconfig_mac.lo \ libcares_la-ares_sysconfig_win.lo libcares_la-ares_timeout.lo \ libcares_la-ares_update_servers.lo libcares_la-ares_version.lo \ libcares_la-inet_net_pton.lo libcares_la-inet_ntop.lo \ - libcares_la-windows_port.lo dsa/libcares_la-ares__array.lo \ - dsa/libcares_la-ares__htable.lo \ - dsa/libcares_la-ares__htable_asvp.lo \ - dsa/libcares_la-ares__htable_strvp.lo \ - dsa/libcares_la-ares__htable_szvp.lo \ - dsa/libcares_la-ares__htable_vpvp.lo \ - dsa/libcares_la-ares__llist.lo dsa/libcares_la-ares__slist.lo \ + libcares_la-windows_port.lo dsa/libcares_la-ares_array.lo \ + dsa/libcares_la-ares_htable.lo \ + dsa/libcares_la-ares_htable_asvp.lo \ + dsa/libcares_la-ares_htable_dict.lo \ + dsa/libcares_la-ares_htable_strvp.lo \ + dsa/libcares_la-ares_htable_szvp.lo \ + dsa/libcares_la-ares_htable_vpstr.lo \ + dsa/libcares_la-ares_htable_vpvp.lo \ + dsa/libcares_la-ares_llist.lo dsa/libcares_la-ares_slist.lo \ event/libcares_la-ares_event_configchg.lo \ event/libcares_la-ares_event_epoll.lo \ event/libcares_la-ares_event_kqueue.lo \ @@ -225,13 +227,12 @@ am__objects_1 = libcares_la-ares__addrinfo2hostent.lo \ record/libcares_la-ares_dns_parse.lo \ record/libcares_la-ares_dns_record.lo \ record/libcares_la-ares_dns_write.lo \ - str/libcares_la-ares__buf.lo \ - str/libcares_la-ares_strcasecmp.lo str/libcares_la-ares_str.lo \ + str/libcares_la-ares_buf.lo str/libcares_la-ares_str.lo \ str/libcares_la-ares_strsplit.lo \ - util/libcares_la-ares__iface_ips.lo \ - util/libcares_la-ares__threads.lo \ - util/libcares_la-ares__timeval.lo \ - util/libcares_la-ares_math.lo util/libcares_la-ares_rand.lo + util/libcares_la-ares_iface_ips.lo \ + util/libcares_la-ares_threads.lo \ + util/libcares_la-ares_timeval.lo util/libcares_la-ares_math.lo \ + util/libcares_la-ares_rand.lo util/libcares_la-ares_uri.lo am__objects_2 = am_libcares_la_OBJECTS = $(am__objects_1) $(am__objects_2) libcares_la_OBJECTS = $(am_libcares_la_OBJECTS) @@ -258,15 +259,12 @@ DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = \ - ./$(DEPDIR)/libcares_la-ares__addrinfo2hostent.Plo \ - ./$(DEPDIR)/libcares_la-ares__addrinfo_localhost.Plo \ - ./$(DEPDIR)/libcares_la-ares__close_sockets.Plo \ - ./$(DEPDIR)/libcares_la-ares__hosts_file.Plo \ - ./$(DEPDIR)/libcares_la-ares__parse_into_addrinfo.Plo \ - ./$(DEPDIR)/libcares_la-ares__socket.Plo \ - ./$(DEPDIR)/libcares_la-ares__sortaddrinfo.Plo \ + ./$(DEPDIR)/libcares_la-ares_addrinfo2hostent.Plo \ + ./$(DEPDIR)/libcares_la-ares_addrinfo_localhost.Plo \ ./$(DEPDIR)/libcares_la-ares_android.Plo \ ./$(DEPDIR)/libcares_la-ares_cancel.Plo \ + ./$(DEPDIR)/libcares_la-ares_close_sockets.Plo \ + ./$(DEPDIR)/libcares_la-ares_conn.Plo \ ./$(DEPDIR)/libcares_la-ares_cookie.Plo \ ./$(DEPDIR)/libcares_la-ares_data.Plo \ ./$(DEPDIR)/libcares_la-ares_destroy.Plo \ @@ -278,16 +276,20 @@ am__depfiles_remade = \ ./$(DEPDIR)/libcares_la-ares_gethostbyaddr.Plo \ ./$(DEPDIR)/libcares_la-ares_gethostbyname.Plo \ ./$(DEPDIR)/libcares_la-ares_getnameinfo.Plo \ + ./$(DEPDIR)/libcares_la-ares_hosts_file.Plo \ ./$(DEPDIR)/libcares_la-ares_init.Plo \ ./$(DEPDIR)/libcares_la-ares_library_init.Plo \ ./$(DEPDIR)/libcares_la-ares_metrics.Plo \ ./$(DEPDIR)/libcares_la-ares_options.Plo \ - ./$(DEPDIR)/libcares_la-ares_platform.Plo \ + ./$(DEPDIR)/libcares_la-ares_parse_into_addrinfo.Plo \ ./$(DEPDIR)/libcares_la-ares_process.Plo \ ./$(DEPDIR)/libcares_la-ares_qcache.Plo \ ./$(DEPDIR)/libcares_la-ares_query.Plo \ ./$(DEPDIR)/libcares_la-ares_search.Plo \ ./$(DEPDIR)/libcares_la-ares_send.Plo \ + ./$(DEPDIR)/libcares_la-ares_set_socket_functions.Plo \ + ./$(DEPDIR)/libcares_la-ares_socket.Plo \ + ./$(DEPDIR)/libcares_la-ares_sortaddrinfo.Plo \ ./$(DEPDIR)/libcares_la-ares_strerror.Plo \ ./$(DEPDIR)/libcares_la-ares_sysconfig.Plo \ ./$(DEPDIR)/libcares_la-ares_sysconfig_files.Plo \ @@ -299,14 +301,16 @@ am__depfiles_remade = \ ./$(DEPDIR)/libcares_la-inet_net_pton.Plo \ ./$(DEPDIR)/libcares_la-inet_ntop.Plo \ ./$(DEPDIR)/libcares_la-windows_port.Plo \ - dsa/$(DEPDIR)/libcares_la-ares__array.Plo \ - dsa/$(DEPDIR)/libcares_la-ares__htable.Plo \ - dsa/$(DEPDIR)/libcares_la-ares__htable_asvp.Plo \ - dsa/$(DEPDIR)/libcares_la-ares__htable_strvp.Plo \ - dsa/$(DEPDIR)/libcares_la-ares__htable_szvp.Plo \ - dsa/$(DEPDIR)/libcares_la-ares__htable_vpvp.Plo \ - dsa/$(DEPDIR)/libcares_la-ares__llist.Plo \ - dsa/$(DEPDIR)/libcares_la-ares__slist.Plo \ + dsa/$(DEPDIR)/libcares_la-ares_array.Plo \ + dsa/$(DEPDIR)/libcares_la-ares_htable.Plo \ + dsa/$(DEPDIR)/libcares_la-ares_htable_asvp.Plo \ + dsa/$(DEPDIR)/libcares_la-ares_htable_dict.Plo \ + dsa/$(DEPDIR)/libcares_la-ares_htable_strvp.Plo \ + dsa/$(DEPDIR)/libcares_la-ares_htable_szvp.Plo \ + dsa/$(DEPDIR)/libcares_la-ares_htable_vpstr.Plo \ + dsa/$(DEPDIR)/libcares_la-ares_htable_vpvp.Plo \ + dsa/$(DEPDIR)/libcares_la-ares_llist.Plo \ + dsa/$(DEPDIR)/libcares_la-ares_slist.Plo \ event/$(DEPDIR)/libcares_la-ares_event_configchg.Plo \ event/$(DEPDIR)/libcares_la-ares_event_epoll.Plo \ event/$(DEPDIR)/libcares_la-ares_event_kqueue.Plo \ @@ -337,15 +341,15 @@ am__depfiles_remade = \ record/$(DEPDIR)/libcares_la-ares_dns_parse.Plo \ record/$(DEPDIR)/libcares_la-ares_dns_record.Plo \ record/$(DEPDIR)/libcares_la-ares_dns_write.Plo \ - str/$(DEPDIR)/libcares_la-ares__buf.Plo \ + str/$(DEPDIR)/libcares_la-ares_buf.Plo \ str/$(DEPDIR)/libcares_la-ares_str.Plo \ - str/$(DEPDIR)/libcares_la-ares_strcasecmp.Plo \ str/$(DEPDIR)/libcares_la-ares_strsplit.Plo \ - util/$(DEPDIR)/libcares_la-ares__iface_ips.Plo \ - util/$(DEPDIR)/libcares_la-ares__threads.Plo \ - util/$(DEPDIR)/libcares_la-ares__timeval.Plo \ + util/$(DEPDIR)/libcares_la-ares_iface_ips.Plo \ util/$(DEPDIR)/libcares_la-ares_math.Plo \ - util/$(DEPDIR)/libcares_la-ares_rand.Plo + util/$(DEPDIR)/libcares_la-ares_rand.Plo \ + util/$(DEPDIR)/libcares_la-ares_threads.Plo \ + util/$(DEPDIR)/libcares_la-ares_timeval.Plo \ + util/$(DEPDIR)/libcares_la-ares_uri.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -445,7 +449,7 @@ AM_CFLAGS = @AM_CFLAGS@ # might possibly already be installed in the system. AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_builddir)/include \ -I$(top_builddir)/src/lib -I$(top_srcdir)/include \ - -I$(top_srcdir)/src/lib + -I$(top_srcdir)/src/lib -I$(top_srcdir)/src/lib/include AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ @@ -643,15 +647,12 @@ libcares_la_CPPFLAGS_EXTRA = -DCARES_BUILDING_LIBRARY $(am__append_3) \ libcares_la_LIBS = $(CODE_COVERAGE_LIBS) libcares_la_CFLAGS = $(AM_CFLAGS) $(libcares_la_CFLAGS_EXTRA) libcares_la_CPPFLAGS = $(AM_CPPFLAGS) $(libcares_la_CPPFLAGS_EXTRA) -CSOURCES = ares__addrinfo2hostent.c \ - ares__addrinfo_localhost.c \ - ares__close_sockets.c \ - ares__hosts_file.c \ - ares__parse_into_addrinfo.c \ - ares__socket.c \ - ares__sortaddrinfo.c \ +CSOURCES = ares_addrinfo2hostent.c \ + ares_addrinfo_localhost.c \ ares_android.c \ ares_cancel.c \ + ares_close_sockets.c \ + ares_conn.c \ ares_cookie.c \ ares_data.c \ ares_destroy.c \ @@ -663,16 +664,20 @@ CSOURCES = ares__addrinfo2hostent.c \ ares_gethostbyaddr.c \ ares_gethostbyname.c \ ares_getnameinfo.c \ + ares_hosts_file.c \ ares_init.c \ ares_library_init.c \ ares_metrics.c \ ares_options.c \ - ares_platform.c \ + ares_parse_into_addrinfo.c \ ares_process.c \ ares_qcache.c \ ares_query.c \ ares_search.c \ ares_send.c \ + ares_set_socket_functions.c \ + ares_socket.c \ + ares_sortaddrinfo.c \ ares_strerror.c \ ares_sysconfig.c \ ares_sysconfig_files.c \ @@ -684,14 +689,16 @@ CSOURCES = ares__addrinfo2hostent.c \ inet_net_pton.c \ inet_ntop.c \ windows_port.c \ - dsa/ares__array.c \ - dsa/ares__htable.c \ - dsa/ares__htable_asvp.c \ - dsa/ares__htable_strvp.c \ - dsa/ares__htable_szvp.c \ - dsa/ares__htable_vpvp.c \ - dsa/ares__llist.c \ - dsa/ares__slist.c \ + dsa/ares_array.c \ + dsa/ares_htable.c \ + dsa/ares_htable_asvp.c \ + dsa/ares_htable_dict.c \ + dsa/ares_htable_strvp.c \ + dsa/ares_htable_szvp.c \ + dsa/ares_htable_vpstr.c \ + dsa/ares_htable_vpvp.c \ + dsa/ares_llist.c \ + dsa/ares_slist.c \ event/ares_event_configchg.c \ event/ares_event_epoll.c \ event/ares_event_kqueue.c \ @@ -722,42 +729,49 @@ CSOURCES = ares__addrinfo2hostent.c \ record/ares_dns_parse.c \ record/ares_dns_record.c \ record/ares_dns_write.c \ - str/ares__buf.c \ - str/ares_strcasecmp.c \ + str/ares_buf.c \ str/ares_str.c \ str/ares_strsplit.c \ - util/ares__iface_ips.c \ - util/ares__threads.c \ - util/ares__timeval.c \ + util/ares_iface_ips.c \ + util/ares_threads.c \ + util/ares_timeval.c \ util/ares_math.c \ - util/ares_rand.c + util/ares_rand.c \ + util/ares_uri.c HHEADERS = ares_android.h \ + ares_conn.h \ ares_data.h \ ares_getenv.h \ ares_inet_net_pton.h \ ares_ipv6.h \ - ares_platform.h \ ares_private.h \ ares_setup.h \ - dsa/ares__array.h \ - dsa/ares__htable.h \ - dsa/ares__htable_asvp.h \ - dsa/ares__htable_strvp.h \ - dsa/ares__htable_szvp.h \ - dsa/ares__htable_vpvp.h \ - dsa/ares__llist.h \ - dsa/ares__slist.h \ + ares_socket.h \ + dsa/ares_htable.h \ + dsa/ares_slist.h \ event/ares_event.h \ event/ares_event_win32.h \ + include/ares_array.h \ + include/ares_buf.h \ + include/ares_htable_asvp.h \ + include/ares_htable_dict.h \ + include/ares_htable_strvp.h \ + include/ares_htable_szvp.h \ + include/ares_htable_vpstr.h \ + include/ares_htable_vpvp.h \ + include/ares_llist.h \ + include/ares_mem.h \ + include/ares_str.h \ record/ares_dns_multistring.h \ record/ares_dns_private.h \ - str/ares__buf.h \ - str/ares_strcasecmp.h \ - str/ares_str.h \ str/ares_strsplit.h \ - util/ares__iface_ips.h \ - util/ares__threads.h \ + util/ares_iface_ips.h \ + util/ares_math.h \ + util/ares_rand.h \ + util/ares_time.h \ + util/ares_threads.h \ + util/ares_uri.h \ thirdparty/apple/dnsinfo.h @@ -852,21 +866,25 @@ dsa/$(am__dirstamp): dsa/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) dsa/$(DEPDIR) @: >>dsa/$(DEPDIR)/$(am__dirstamp) -dsa/libcares_la-ares__array.lo: dsa/$(am__dirstamp) \ +dsa/libcares_la-ares_array.lo: dsa/$(am__dirstamp) \ dsa/$(DEPDIR)/$(am__dirstamp) -dsa/libcares_la-ares__htable.lo: dsa/$(am__dirstamp) \ +dsa/libcares_la-ares_htable.lo: dsa/$(am__dirstamp) \ dsa/$(DEPDIR)/$(am__dirstamp) -dsa/libcares_la-ares__htable_asvp.lo: dsa/$(am__dirstamp) \ +dsa/libcares_la-ares_htable_asvp.lo: dsa/$(am__dirstamp) \ dsa/$(DEPDIR)/$(am__dirstamp) -dsa/libcares_la-ares__htable_strvp.lo: dsa/$(am__dirstamp) \ +dsa/libcares_la-ares_htable_dict.lo: dsa/$(am__dirstamp) \ dsa/$(DEPDIR)/$(am__dirstamp) -dsa/libcares_la-ares__htable_szvp.lo: dsa/$(am__dirstamp) \ +dsa/libcares_la-ares_htable_strvp.lo: dsa/$(am__dirstamp) \ dsa/$(DEPDIR)/$(am__dirstamp) -dsa/libcares_la-ares__htable_vpvp.lo: dsa/$(am__dirstamp) \ +dsa/libcares_la-ares_htable_szvp.lo: dsa/$(am__dirstamp) \ dsa/$(DEPDIR)/$(am__dirstamp) -dsa/libcares_la-ares__llist.lo: dsa/$(am__dirstamp) \ +dsa/libcares_la-ares_htable_vpstr.lo: dsa/$(am__dirstamp) \ dsa/$(DEPDIR)/$(am__dirstamp) -dsa/libcares_la-ares__slist.lo: dsa/$(am__dirstamp) \ +dsa/libcares_la-ares_htable_vpvp.lo: dsa/$(am__dirstamp) \ + dsa/$(DEPDIR)/$(am__dirstamp) +dsa/libcares_la-ares_llist.lo: dsa/$(am__dirstamp) \ + dsa/$(DEPDIR)/$(am__dirstamp) +dsa/libcares_la-ares_slist.lo: dsa/$(am__dirstamp) \ dsa/$(DEPDIR)/$(am__dirstamp) event/$(am__dirstamp): @$(MKDIR_P) event @@ -952,9 +970,7 @@ str/$(am__dirstamp): str/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) str/$(DEPDIR) @: >>str/$(DEPDIR)/$(am__dirstamp) -str/libcares_la-ares__buf.lo: str/$(am__dirstamp) \ - str/$(DEPDIR)/$(am__dirstamp) -str/libcares_la-ares_strcasecmp.lo: str/$(am__dirstamp) \ +str/libcares_la-ares_buf.lo: str/$(am__dirstamp) \ str/$(DEPDIR)/$(am__dirstamp) str/libcares_la-ares_str.lo: str/$(am__dirstamp) \ str/$(DEPDIR)/$(am__dirstamp) @@ -966,16 +982,18 @@ util/$(am__dirstamp): util/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) util/$(DEPDIR) @: >>util/$(DEPDIR)/$(am__dirstamp) -util/libcares_la-ares__iface_ips.lo: util/$(am__dirstamp) \ +util/libcares_la-ares_iface_ips.lo: util/$(am__dirstamp) \ util/$(DEPDIR)/$(am__dirstamp) -util/libcares_la-ares__threads.lo: util/$(am__dirstamp) \ +util/libcares_la-ares_threads.lo: util/$(am__dirstamp) \ util/$(DEPDIR)/$(am__dirstamp) -util/libcares_la-ares__timeval.lo: util/$(am__dirstamp) \ +util/libcares_la-ares_timeval.lo: util/$(am__dirstamp) \ util/$(DEPDIR)/$(am__dirstamp) util/libcares_la-ares_math.lo: util/$(am__dirstamp) \ util/$(DEPDIR)/$(am__dirstamp) util/libcares_la-ares_rand.lo: util/$(am__dirstamp) \ util/$(DEPDIR)/$(am__dirstamp) +util/libcares_la-ares_uri.lo: util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) libcares.la: $(libcares_la_OBJECTS) $(libcares_la_DEPENDENCIES) $(EXTRA_libcares_la_DEPENDENCIES) $(AM_V_CCLD)$(libcares_la_LINK) -rpath $(libdir) $(libcares_la_OBJECTS) $(libcares_la_LIBADD) $(LIBS) @@ -998,15 +1016,12 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__addrinfo2hostent.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__addrinfo_localhost.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__close_sockets.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__hosts_file.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__parse_into_addrinfo.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__socket.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__sortaddrinfo.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_addrinfo2hostent.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_addrinfo_localhost.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_android.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_cancel.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_close_sockets.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_conn.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_cookie.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_data.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_destroy.Plo@am__quote@ # am--include-marker @@ -1018,16 +1033,20 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_gethostbyaddr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_gethostbyname.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_getnameinfo.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_hosts_file.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_init.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_library_init.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_metrics.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_options.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_platform.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_parse_into_addrinfo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_process.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_qcache.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_query.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_search.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_send.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_set_socket_functions.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_socket.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_sortaddrinfo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_strerror.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_sysconfig.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_sysconfig_files.Plo@am__quote@ # am--include-marker @@ -1039,14 +1058,16 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-inet_net_pton.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-inet_ntop.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-windows_port.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@dsa/$(DEPDIR)/libcares_la-ares__array.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@dsa/$(DEPDIR)/libcares_la-ares__htable.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@dsa/$(DEPDIR)/libcares_la-ares__htable_asvp.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@dsa/$(DEPDIR)/libcares_la-ares__htable_strvp.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@dsa/$(DEPDIR)/libcares_la-ares__htable_szvp.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@dsa/$(DEPDIR)/libcares_la-ares__htable_vpvp.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@dsa/$(DEPDIR)/libcares_la-ares__llist.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@dsa/$(DEPDIR)/libcares_la-ares__slist.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@dsa/$(DEPDIR)/libcares_la-ares_array.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@dsa/$(DEPDIR)/libcares_la-ares_htable.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@dsa/$(DEPDIR)/libcares_la-ares_htable_asvp.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@dsa/$(DEPDIR)/libcares_la-ares_htable_dict.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@dsa/$(DEPDIR)/libcares_la-ares_htable_strvp.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@dsa/$(DEPDIR)/libcares_la-ares_htable_szvp.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@dsa/$(DEPDIR)/libcares_la-ares_htable_vpstr.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@dsa/$(DEPDIR)/libcares_la-ares_htable_vpvp.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@dsa/$(DEPDIR)/libcares_la-ares_llist.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@dsa/$(DEPDIR)/libcares_la-ares_slist.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@event/$(DEPDIR)/libcares_la-ares_event_configchg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@event/$(DEPDIR)/libcares_la-ares_event_epoll.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@event/$(DEPDIR)/libcares_la-ares_event_kqueue.Plo@am__quote@ # am--include-marker @@ -1077,15 +1098,15 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@record/$(DEPDIR)/libcares_la-ares_dns_parse.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@record/$(DEPDIR)/libcares_la-ares_dns_record.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@record/$(DEPDIR)/libcares_la-ares_dns_write.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@str/$(DEPDIR)/libcares_la-ares__buf.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@str/$(DEPDIR)/libcares_la-ares_buf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@str/$(DEPDIR)/libcares_la-ares_str.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@str/$(DEPDIR)/libcares_la-ares_strcasecmp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@str/$(DEPDIR)/libcares_la-ares_strsplit.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/libcares_la-ares__iface_ips.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/libcares_la-ares__threads.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/libcares_la-ares__timeval.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/libcares_la-ares_iface_ips.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/libcares_la-ares_math.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/libcares_la-ares_rand.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/libcares_la-ares_threads.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/libcares_la-ares_timeval.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/libcares_la-ares_uri.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @@ -1117,54 +1138,19 @@ am--depfiles: $(am__depfiles_remade) @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< -libcares_la-ares__addrinfo2hostent.lo: ares__addrinfo2hostent.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__addrinfo2hostent.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__addrinfo2hostent.Tpo -c -o libcares_la-ares__addrinfo2hostent.lo `test -f 'ares__addrinfo2hostent.c' || echo '$(srcdir)/'`ares__addrinfo2hostent.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__addrinfo2hostent.Tpo $(DEPDIR)/libcares_la-ares__addrinfo2hostent.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__addrinfo2hostent.c' object='libcares_la-ares__addrinfo2hostent.lo' libtool=yes @AMDEPBACKSLASH@ +libcares_la-ares_addrinfo2hostent.lo: ares_addrinfo2hostent.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_addrinfo2hostent.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_addrinfo2hostent.Tpo -c -o libcares_la-ares_addrinfo2hostent.lo `test -f 'ares_addrinfo2hostent.c' || echo '$(srcdir)/'`ares_addrinfo2hostent.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_addrinfo2hostent.Tpo $(DEPDIR)/libcares_la-ares_addrinfo2hostent.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_addrinfo2hostent.c' object='libcares_la-ares_addrinfo2hostent.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__addrinfo2hostent.lo `test -f 'ares__addrinfo2hostent.c' || echo '$(srcdir)/'`ares__addrinfo2hostent.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_addrinfo2hostent.lo `test -f 'ares_addrinfo2hostent.c' || echo '$(srcdir)/'`ares_addrinfo2hostent.c -libcares_la-ares__addrinfo_localhost.lo: ares__addrinfo_localhost.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__addrinfo_localhost.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__addrinfo_localhost.Tpo -c -o libcares_la-ares__addrinfo_localhost.lo `test -f 'ares__addrinfo_localhost.c' || echo '$(srcdir)/'`ares__addrinfo_localhost.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__addrinfo_localhost.Tpo $(DEPDIR)/libcares_la-ares__addrinfo_localhost.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__addrinfo_localhost.c' object='libcares_la-ares__addrinfo_localhost.lo' libtool=yes @AMDEPBACKSLASH@ +libcares_la-ares_addrinfo_localhost.lo: ares_addrinfo_localhost.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_addrinfo_localhost.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_addrinfo_localhost.Tpo -c -o libcares_la-ares_addrinfo_localhost.lo `test -f 'ares_addrinfo_localhost.c' || echo '$(srcdir)/'`ares_addrinfo_localhost.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_addrinfo_localhost.Tpo $(DEPDIR)/libcares_la-ares_addrinfo_localhost.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_addrinfo_localhost.c' object='libcares_la-ares_addrinfo_localhost.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__addrinfo_localhost.lo `test -f 'ares__addrinfo_localhost.c' || echo '$(srcdir)/'`ares__addrinfo_localhost.c - -libcares_la-ares__close_sockets.lo: ares__close_sockets.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__close_sockets.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__close_sockets.Tpo -c -o libcares_la-ares__close_sockets.lo `test -f 'ares__close_sockets.c' || echo '$(srcdir)/'`ares__close_sockets.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__close_sockets.Tpo $(DEPDIR)/libcares_la-ares__close_sockets.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__close_sockets.c' object='libcares_la-ares__close_sockets.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__close_sockets.lo `test -f 'ares__close_sockets.c' || echo '$(srcdir)/'`ares__close_sockets.c - -libcares_la-ares__hosts_file.lo: ares__hosts_file.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__hosts_file.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__hosts_file.Tpo -c -o libcares_la-ares__hosts_file.lo `test -f 'ares__hosts_file.c' || echo '$(srcdir)/'`ares__hosts_file.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__hosts_file.Tpo $(DEPDIR)/libcares_la-ares__hosts_file.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__hosts_file.c' object='libcares_la-ares__hosts_file.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__hosts_file.lo `test -f 'ares__hosts_file.c' || echo '$(srcdir)/'`ares__hosts_file.c - -libcares_la-ares__parse_into_addrinfo.lo: ares__parse_into_addrinfo.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__parse_into_addrinfo.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__parse_into_addrinfo.Tpo -c -o libcares_la-ares__parse_into_addrinfo.lo `test -f 'ares__parse_into_addrinfo.c' || echo '$(srcdir)/'`ares__parse_into_addrinfo.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__parse_into_addrinfo.Tpo $(DEPDIR)/libcares_la-ares__parse_into_addrinfo.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__parse_into_addrinfo.c' object='libcares_la-ares__parse_into_addrinfo.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__parse_into_addrinfo.lo `test -f 'ares__parse_into_addrinfo.c' || echo '$(srcdir)/'`ares__parse_into_addrinfo.c - -libcares_la-ares__socket.lo: ares__socket.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__socket.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__socket.Tpo -c -o libcares_la-ares__socket.lo `test -f 'ares__socket.c' || echo '$(srcdir)/'`ares__socket.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__socket.Tpo $(DEPDIR)/libcares_la-ares__socket.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__socket.c' object='libcares_la-ares__socket.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__socket.lo `test -f 'ares__socket.c' || echo '$(srcdir)/'`ares__socket.c - -libcares_la-ares__sortaddrinfo.lo: ares__sortaddrinfo.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__sortaddrinfo.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__sortaddrinfo.Tpo -c -o libcares_la-ares__sortaddrinfo.lo `test -f 'ares__sortaddrinfo.c' || echo '$(srcdir)/'`ares__sortaddrinfo.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__sortaddrinfo.Tpo $(DEPDIR)/libcares_la-ares__sortaddrinfo.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__sortaddrinfo.c' object='libcares_la-ares__sortaddrinfo.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__sortaddrinfo.lo `test -f 'ares__sortaddrinfo.c' || echo '$(srcdir)/'`ares__sortaddrinfo.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_addrinfo_localhost.lo `test -f 'ares_addrinfo_localhost.c' || echo '$(srcdir)/'`ares_addrinfo_localhost.c libcares_la-ares_android.lo: ares_android.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_android.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_android.Tpo -c -o libcares_la-ares_android.lo `test -f 'ares_android.c' || echo '$(srcdir)/'`ares_android.c @@ -1180,6 +1166,20 @@ libcares_la-ares_cancel.lo: ares_cancel.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_cancel.lo `test -f 'ares_cancel.c' || echo '$(srcdir)/'`ares_cancel.c +libcares_la-ares_close_sockets.lo: ares_close_sockets.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_close_sockets.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_close_sockets.Tpo -c -o libcares_la-ares_close_sockets.lo `test -f 'ares_close_sockets.c' || echo '$(srcdir)/'`ares_close_sockets.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_close_sockets.Tpo $(DEPDIR)/libcares_la-ares_close_sockets.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_close_sockets.c' object='libcares_la-ares_close_sockets.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_close_sockets.lo `test -f 'ares_close_sockets.c' || echo '$(srcdir)/'`ares_close_sockets.c + +libcares_la-ares_conn.lo: ares_conn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_conn.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_conn.Tpo -c -o libcares_la-ares_conn.lo `test -f 'ares_conn.c' || echo '$(srcdir)/'`ares_conn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_conn.Tpo $(DEPDIR)/libcares_la-ares_conn.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_conn.c' object='libcares_la-ares_conn.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_conn.lo `test -f 'ares_conn.c' || echo '$(srcdir)/'`ares_conn.c + libcares_la-ares_cookie.lo: ares_cookie.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_cookie.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_cookie.Tpo -c -o libcares_la-ares_cookie.lo `test -f 'ares_cookie.c' || echo '$(srcdir)/'`ares_cookie.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_cookie.Tpo $(DEPDIR)/libcares_la-ares_cookie.Plo @@ -1257,6 +1257,13 @@ libcares_la-ares_getnameinfo.lo: ares_getnameinfo.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_getnameinfo.lo `test -f 'ares_getnameinfo.c' || echo '$(srcdir)/'`ares_getnameinfo.c +libcares_la-ares_hosts_file.lo: ares_hosts_file.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_hosts_file.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_hosts_file.Tpo -c -o libcares_la-ares_hosts_file.lo `test -f 'ares_hosts_file.c' || echo '$(srcdir)/'`ares_hosts_file.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_hosts_file.Tpo $(DEPDIR)/libcares_la-ares_hosts_file.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_hosts_file.c' object='libcares_la-ares_hosts_file.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_hosts_file.lo `test -f 'ares_hosts_file.c' || echo '$(srcdir)/'`ares_hosts_file.c + libcares_la-ares_init.lo: ares_init.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_init.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_init.Tpo -c -o libcares_la-ares_init.lo `test -f 'ares_init.c' || echo '$(srcdir)/'`ares_init.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_init.Tpo $(DEPDIR)/libcares_la-ares_init.Plo @@ -1285,12 +1292,12 @@ libcares_la-ares_options.lo: ares_options.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_options.lo `test -f 'ares_options.c' || echo '$(srcdir)/'`ares_options.c -libcares_la-ares_platform.lo: ares_platform.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_platform.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_platform.Tpo -c -o libcares_la-ares_platform.lo `test -f 'ares_platform.c' || echo '$(srcdir)/'`ares_platform.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_platform.Tpo $(DEPDIR)/libcares_la-ares_platform.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_platform.c' object='libcares_la-ares_platform.lo' libtool=yes @AMDEPBACKSLASH@ +libcares_la-ares_parse_into_addrinfo.lo: ares_parse_into_addrinfo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_parse_into_addrinfo.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_parse_into_addrinfo.Tpo -c -o libcares_la-ares_parse_into_addrinfo.lo `test -f 'ares_parse_into_addrinfo.c' || echo '$(srcdir)/'`ares_parse_into_addrinfo.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_parse_into_addrinfo.Tpo $(DEPDIR)/libcares_la-ares_parse_into_addrinfo.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_parse_into_addrinfo.c' object='libcares_la-ares_parse_into_addrinfo.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_platform.lo `test -f 'ares_platform.c' || echo '$(srcdir)/'`ares_platform.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_parse_into_addrinfo.lo `test -f 'ares_parse_into_addrinfo.c' || echo '$(srcdir)/'`ares_parse_into_addrinfo.c libcares_la-ares_process.lo: ares_process.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_process.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_process.Tpo -c -o libcares_la-ares_process.lo `test -f 'ares_process.c' || echo '$(srcdir)/'`ares_process.c @@ -1327,6 +1334,27 @@ libcares_la-ares_send.lo: ares_send.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_send.lo `test -f 'ares_send.c' || echo '$(srcdir)/'`ares_send.c +libcares_la-ares_set_socket_functions.lo: ares_set_socket_functions.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_set_socket_functions.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_set_socket_functions.Tpo -c -o libcares_la-ares_set_socket_functions.lo `test -f 'ares_set_socket_functions.c' || echo '$(srcdir)/'`ares_set_socket_functions.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_set_socket_functions.Tpo $(DEPDIR)/libcares_la-ares_set_socket_functions.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_set_socket_functions.c' object='libcares_la-ares_set_socket_functions.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_set_socket_functions.lo `test -f 'ares_set_socket_functions.c' || echo '$(srcdir)/'`ares_set_socket_functions.c + +libcares_la-ares_socket.lo: ares_socket.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_socket.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_socket.Tpo -c -o libcares_la-ares_socket.lo `test -f 'ares_socket.c' || echo '$(srcdir)/'`ares_socket.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_socket.Tpo $(DEPDIR)/libcares_la-ares_socket.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_socket.c' object='libcares_la-ares_socket.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_socket.lo `test -f 'ares_socket.c' || echo '$(srcdir)/'`ares_socket.c + +libcares_la-ares_sortaddrinfo.lo: ares_sortaddrinfo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_sortaddrinfo.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_sortaddrinfo.Tpo -c -o libcares_la-ares_sortaddrinfo.lo `test -f 'ares_sortaddrinfo.c' || echo '$(srcdir)/'`ares_sortaddrinfo.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_sortaddrinfo.Tpo $(DEPDIR)/libcares_la-ares_sortaddrinfo.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_sortaddrinfo.c' object='libcares_la-ares_sortaddrinfo.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_sortaddrinfo.lo `test -f 'ares_sortaddrinfo.c' || echo '$(srcdir)/'`ares_sortaddrinfo.c + libcares_la-ares_strerror.lo: ares_strerror.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_strerror.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_strerror.Tpo -c -o libcares_la-ares_strerror.lo `test -f 'ares_strerror.c' || echo '$(srcdir)/'`ares_strerror.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_strerror.Tpo $(DEPDIR)/libcares_la-ares_strerror.Plo @@ -1404,61 +1432,75 @@ libcares_la-windows_port.lo: windows_port.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-windows_port.lo `test -f 'windows_port.c' || echo '$(srcdir)/'`windows_port.c -dsa/libcares_la-ares__array.lo: dsa/ares__array.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT dsa/libcares_la-ares__array.lo -MD -MP -MF dsa/$(DEPDIR)/libcares_la-ares__array.Tpo -c -o dsa/libcares_la-ares__array.lo `test -f 'dsa/ares__array.c' || echo '$(srcdir)/'`dsa/ares__array.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dsa/$(DEPDIR)/libcares_la-ares__array.Tpo dsa/$(DEPDIR)/libcares_la-ares__array.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dsa/ares__array.c' object='dsa/libcares_la-ares__array.lo' libtool=yes @AMDEPBACKSLASH@ +dsa/libcares_la-ares_array.lo: dsa/ares_array.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT dsa/libcares_la-ares_array.lo -MD -MP -MF dsa/$(DEPDIR)/libcares_la-ares_array.Tpo -c -o dsa/libcares_la-ares_array.lo `test -f 'dsa/ares_array.c' || echo '$(srcdir)/'`dsa/ares_array.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dsa/$(DEPDIR)/libcares_la-ares_array.Tpo dsa/$(DEPDIR)/libcares_la-ares_array.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dsa/ares_array.c' object='dsa/libcares_la-ares_array.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o dsa/libcares_la-ares__array.lo `test -f 'dsa/ares__array.c' || echo '$(srcdir)/'`dsa/ares__array.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o dsa/libcares_la-ares_array.lo `test -f 'dsa/ares_array.c' || echo '$(srcdir)/'`dsa/ares_array.c -dsa/libcares_la-ares__htable.lo: dsa/ares__htable.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT dsa/libcares_la-ares__htable.lo -MD -MP -MF dsa/$(DEPDIR)/libcares_la-ares__htable.Tpo -c -o dsa/libcares_la-ares__htable.lo `test -f 'dsa/ares__htable.c' || echo '$(srcdir)/'`dsa/ares__htable.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dsa/$(DEPDIR)/libcares_la-ares__htable.Tpo dsa/$(DEPDIR)/libcares_la-ares__htable.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dsa/ares__htable.c' object='dsa/libcares_la-ares__htable.lo' libtool=yes @AMDEPBACKSLASH@ +dsa/libcares_la-ares_htable.lo: dsa/ares_htable.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT dsa/libcares_la-ares_htable.lo -MD -MP -MF dsa/$(DEPDIR)/libcares_la-ares_htable.Tpo -c -o dsa/libcares_la-ares_htable.lo `test -f 'dsa/ares_htable.c' || echo '$(srcdir)/'`dsa/ares_htable.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dsa/$(DEPDIR)/libcares_la-ares_htable.Tpo dsa/$(DEPDIR)/libcares_la-ares_htable.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dsa/ares_htable.c' object='dsa/libcares_la-ares_htable.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o dsa/libcares_la-ares__htable.lo `test -f 'dsa/ares__htable.c' || echo '$(srcdir)/'`dsa/ares__htable.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o dsa/libcares_la-ares_htable.lo `test -f 'dsa/ares_htable.c' || echo '$(srcdir)/'`dsa/ares_htable.c -dsa/libcares_la-ares__htable_asvp.lo: dsa/ares__htable_asvp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT dsa/libcares_la-ares__htable_asvp.lo -MD -MP -MF dsa/$(DEPDIR)/libcares_la-ares__htable_asvp.Tpo -c -o dsa/libcares_la-ares__htable_asvp.lo `test -f 'dsa/ares__htable_asvp.c' || echo '$(srcdir)/'`dsa/ares__htable_asvp.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dsa/$(DEPDIR)/libcares_la-ares__htable_asvp.Tpo dsa/$(DEPDIR)/libcares_la-ares__htable_asvp.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dsa/ares__htable_asvp.c' object='dsa/libcares_la-ares__htable_asvp.lo' libtool=yes @AMDEPBACKSLASH@ +dsa/libcares_la-ares_htable_asvp.lo: dsa/ares_htable_asvp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT dsa/libcares_la-ares_htable_asvp.lo -MD -MP -MF dsa/$(DEPDIR)/libcares_la-ares_htable_asvp.Tpo -c -o dsa/libcares_la-ares_htable_asvp.lo `test -f 'dsa/ares_htable_asvp.c' || echo '$(srcdir)/'`dsa/ares_htable_asvp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dsa/$(DEPDIR)/libcares_la-ares_htable_asvp.Tpo dsa/$(DEPDIR)/libcares_la-ares_htable_asvp.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dsa/ares_htable_asvp.c' object='dsa/libcares_la-ares_htable_asvp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o dsa/libcares_la-ares__htable_asvp.lo `test -f 'dsa/ares__htable_asvp.c' || echo '$(srcdir)/'`dsa/ares__htable_asvp.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o dsa/libcares_la-ares_htable_asvp.lo `test -f 'dsa/ares_htable_asvp.c' || echo '$(srcdir)/'`dsa/ares_htable_asvp.c -dsa/libcares_la-ares__htable_strvp.lo: dsa/ares__htable_strvp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT dsa/libcares_la-ares__htable_strvp.lo -MD -MP -MF dsa/$(DEPDIR)/libcares_la-ares__htable_strvp.Tpo -c -o dsa/libcares_la-ares__htable_strvp.lo `test -f 'dsa/ares__htable_strvp.c' || echo '$(srcdir)/'`dsa/ares__htable_strvp.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dsa/$(DEPDIR)/libcares_la-ares__htable_strvp.Tpo dsa/$(DEPDIR)/libcares_la-ares__htable_strvp.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dsa/ares__htable_strvp.c' object='dsa/libcares_la-ares__htable_strvp.lo' libtool=yes @AMDEPBACKSLASH@ +dsa/libcares_la-ares_htable_dict.lo: dsa/ares_htable_dict.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT dsa/libcares_la-ares_htable_dict.lo -MD -MP -MF dsa/$(DEPDIR)/libcares_la-ares_htable_dict.Tpo -c -o dsa/libcares_la-ares_htable_dict.lo `test -f 'dsa/ares_htable_dict.c' || echo '$(srcdir)/'`dsa/ares_htable_dict.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dsa/$(DEPDIR)/libcares_la-ares_htable_dict.Tpo dsa/$(DEPDIR)/libcares_la-ares_htable_dict.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dsa/ares_htable_dict.c' object='dsa/libcares_la-ares_htable_dict.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o dsa/libcares_la-ares__htable_strvp.lo `test -f 'dsa/ares__htable_strvp.c' || echo '$(srcdir)/'`dsa/ares__htable_strvp.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o dsa/libcares_la-ares_htable_dict.lo `test -f 'dsa/ares_htable_dict.c' || echo '$(srcdir)/'`dsa/ares_htable_dict.c -dsa/libcares_la-ares__htable_szvp.lo: dsa/ares__htable_szvp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT dsa/libcares_la-ares__htable_szvp.lo -MD -MP -MF dsa/$(DEPDIR)/libcares_la-ares__htable_szvp.Tpo -c -o dsa/libcares_la-ares__htable_szvp.lo `test -f 'dsa/ares__htable_szvp.c' || echo '$(srcdir)/'`dsa/ares__htable_szvp.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dsa/$(DEPDIR)/libcares_la-ares__htable_szvp.Tpo dsa/$(DEPDIR)/libcares_la-ares__htable_szvp.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dsa/ares__htable_szvp.c' object='dsa/libcares_la-ares__htable_szvp.lo' libtool=yes @AMDEPBACKSLASH@ +dsa/libcares_la-ares_htable_strvp.lo: dsa/ares_htable_strvp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT dsa/libcares_la-ares_htable_strvp.lo -MD -MP -MF dsa/$(DEPDIR)/libcares_la-ares_htable_strvp.Tpo -c -o dsa/libcares_la-ares_htable_strvp.lo `test -f 'dsa/ares_htable_strvp.c' || echo '$(srcdir)/'`dsa/ares_htable_strvp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dsa/$(DEPDIR)/libcares_la-ares_htable_strvp.Tpo dsa/$(DEPDIR)/libcares_la-ares_htable_strvp.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dsa/ares_htable_strvp.c' object='dsa/libcares_la-ares_htable_strvp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o dsa/libcares_la-ares__htable_szvp.lo `test -f 'dsa/ares__htable_szvp.c' || echo '$(srcdir)/'`dsa/ares__htable_szvp.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o dsa/libcares_la-ares_htable_strvp.lo `test -f 'dsa/ares_htable_strvp.c' || echo '$(srcdir)/'`dsa/ares_htable_strvp.c -dsa/libcares_la-ares__htable_vpvp.lo: dsa/ares__htable_vpvp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT dsa/libcares_la-ares__htable_vpvp.lo -MD -MP -MF dsa/$(DEPDIR)/libcares_la-ares__htable_vpvp.Tpo -c -o dsa/libcares_la-ares__htable_vpvp.lo `test -f 'dsa/ares__htable_vpvp.c' || echo '$(srcdir)/'`dsa/ares__htable_vpvp.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dsa/$(DEPDIR)/libcares_la-ares__htable_vpvp.Tpo dsa/$(DEPDIR)/libcares_la-ares__htable_vpvp.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dsa/ares__htable_vpvp.c' object='dsa/libcares_la-ares__htable_vpvp.lo' libtool=yes @AMDEPBACKSLASH@ +dsa/libcares_la-ares_htable_szvp.lo: dsa/ares_htable_szvp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT dsa/libcares_la-ares_htable_szvp.lo -MD -MP -MF dsa/$(DEPDIR)/libcares_la-ares_htable_szvp.Tpo -c -o dsa/libcares_la-ares_htable_szvp.lo `test -f 'dsa/ares_htable_szvp.c' || echo '$(srcdir)/'`dsa/ares_htable_szvp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dsa/$(DEPDIR)/libcares_la-ares_htable_szvp.Tpo dsa/$(DEPDIR)/libcares_la-ares_htable_szvp.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dsa/ares_htable_szvp.c' object='dsa/libcares_la-ares_htable_szvp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o dsa/libcares_la-ares__htable_vpvp.lo `test -f 'dsa/ares__htable_vpvp.c' || echo '$(srcdir)/'`dsa/ares__htable_vpvp.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o dsa/libcares_la-ares_htable_szvp.lo `test -f 'dsa/ares_htable_szvp.c' || echo '$(srcdir)/'`dsa/ares_htable_szvp.c -dsa/libcares_la-ares__llist.lo: dsa/ares__llist.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT dsa/libcares_la-ares__llist.lo -MD -MP -MF dsa/$(DEPDIR)/libcares_la-ares__llist.Tpo -c -o dsa/libcares_la-ares__llist.lo `test -f 'dsa/ares__llist.c' || echo '$(srcdir)/'`dsa/ares__llist.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dsa/$(DEPDIR)/libcares_la-ares__llist.Tpo dsa/$(DEPDIR)/libcares_la-ares__llist.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dsa/ares__llist.c' object='dsa/libcares_la-ares__llist.lo' libtool=yes @AMDEPBACKSLASH@ +dsa/libcares_la-ares_htable_vpstr.lo: dsa/ares_htable_vpstr.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT dsa/libcares_la-ares_htable_vpstr.lo -MD -MP -MF dsa/$(DEPDIR)/libcares_la-ares_htable_vpstr.Tpo -c -o dsa/libcares_la-ares_htable_vpstr.lo `test -f 'dsa/ares_htable_vpstr.c' || echo '$(srcdir)/'`dsa/ares_htable_vpstr.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dsa/$(DEPDIR)/libcares_la-ares_htable_vpstr.Tpo dsa/$(DEPDIR)/libcares_la-ares_htable_vpstr.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dsa/ares_htable_vpstr.c' object='dsa/libcares_la-ares_htable_vpstr.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o dsa/libcares_la-ares__llist.lo `test -f 'dsa/ares__llist.c' || echo '$(srcdir)/'`dsa/ares__llist.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o dsa/libcares_la-ares_htable_vpstr.lo `test -f 'dsa/ares_htable_vpstr.c' || echo '$(srcdir)/'`dsa/ares_htable_vpstr.c -dsa/libcares_la-ares__slist.lo: dsa/ares__slist.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT dsa/libcares_la-ares__slist.lo -MD -MP -MF dsa/$(DEPDIR)/libcares_la-ares__slist.Tpo -c -o dsa/libcares_la-ares__slist.lo `test -f 'dsa/ares__slist.c' || echo '$(srcdir)/'`dsa/ares__slist.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dsa/$(DEPDIR)/libcares_la-ares__slist.Tpo dsa/$(DEPDIR)/libcares_la-ares__slist.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dsa/ares__slist.c' object='dsa/libcares_la-ares__slist.lo' libtool=yes @AMDEPBACKSLASH@ +dsa/libcares_la-ares_htable_vpvp.lo: dsa/ares_htable_vpvp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT dsa/libcares_la-ares_htable_vpvp.lo -MD -MP -MF dsa/$(DEPDIR)/libcares_la-ares_htable_vpvp.Tpo -c -o dsa/libcares_la-ares_htable_vpvp.lo `test -f 'dsa/ares_htable_vpvp.c' || echo '$(srcdir)/'`dsa/ares_htable_vpvp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dsa/$(DEPDIR)/libcares_la-ares_htable_vpvp.Tpo dsa/$(DEPDIR)/libcares_la-ares_htable_vpvp.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dsa/ares_htable_vpvp.c' object='dsa/libcares_la-ares_htable_vpvp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o dsa/libcares_la-ares__slist.lo `test -f 'dsa/ares__slist.c' || echo '$(srcdir)/'`dsa/ares__slist.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o dsa/libcares_la-ares_htable_vpvp.lo `test -f 'dsa/ares_htable_vpvp.c' || echo '$(srcdir)/'`dsa/ares_htable_vpvp.c + +dsa/libcares_la-ares_llist.lo: dsa/ares_llist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT dsa/libcares_la-ares_llist.lo -MD -MP -MF dsa/$(DEPDIR)/libcares_la-ares_llist.Tpo -c -o dsa/libcares_la-ares_llist.lo `test -f 'dsa/ares_llist.c' || echo '$(srcdir)/'`dsa/ares_llist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dsa/$(DEPDIR)/libcares_la-ares_llist.Tpo dsa/$(DEPDIR)/libcares_la-ares_llist.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dsa/ares_llist.c' object='dsa/libcares_la-ares_llist.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o dsa/libcares_la-ares_llist.lo `test -f 'dsa/ares_llist.c' || echo '$(srcdir)/'`dsa/ares_llist.c + +dsa/libcares_la-ares_slist.lo: dsa/ares_slist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT dsa/libcares_la-ares_slist.lo -MD -MP -MF dsa/$(DEPDIR)/libcares_la-ares_slist.Tpo -c -o dsa/libcares_la-ares_slist.lo `test -f 'dsa/ares_slist.c' || echo '$(srcdir)/'`dsa/ares_slist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dsa/$(DEPDIR)/libcares_la-ares_slist.Tpo dsa/$(DEPDIR)/libcares_la-ares_slist.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dsa/ares_slist.c' object='dsa/libcares_la-ares_slist.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o dsa/libcares_la-ares_slist.lo `test -f 'dsa/ares_slist.c' || echo '$(srcdir)/'`dsa/ares_slist.c event/libcares_la-ares_event_configchg.lo: event/ares_event_configchg.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT event/libcares_la-ares_event_configchg.lo -MD -MP -MF event/$(DEPDIR)/libcares_la-ares_event_configchg.Tpo -c -o event/libcares_la-ares_event_configchg.lo `test -f 'event/ares_event_configchg.c' || echo '$(srcdir)/'`event/ares_event_configchg.c @@ -1670,19 +1712,12 @@ record/libcares_la-ares_dns_write.lo: record/ares_dns_write.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o record/libcares_la-ares_dns_write.lo `test -f 'record/ares_dns_write.c' || echo '$(srcdir)/'`record/ares_dns_write.c -str/libcares_la-ares__buf.lo: str/ares__buf.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT str/libcares_la-ares__buf.lo -MD -MP -MF str/$(DEPDIR)/libcares_la-ares__buf.Tpo -c -o str/libcares_la-ares__buf.lo `test -f 'str/ares__buf.c' || echo '$(srcdir)/'`str/ares__buf.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) str/$(DEPDIR)/libcares_la-ares__buf.Tpo str/$(DEPDIR)/libcares_la-ares__buf.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='str/ares__buf.c' object='str/libcares_la-ares__buf.lo' libtool=yes @AMDEPBACKSLASH@ +str/libcares_la-ares_buf.lo: str/ares_buf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT str/libcares_la-ares_buf.lo -MD -MP -MF str/$(DEPDIR)/libcares_la-ares_buf.Tpo -c -o str/libcares_la-ares_buf.lo `test -f 'str/ares_buf.c' || echo '$(srcdir)/'`str/ares_buf.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) str/$(DEPDIR)/libcares_la-ares_buf.Tpo str/$(DEPDIR)/libcares_la-ares_buf.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='str/ares_buf.c' object='str/libcares_la-ares_buf.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o str/libcares_la-ares__buf.lo `test -f 'str/ares__buf.c' || echo '$(srcdir)/'`str/ares__buf.c - -str/libcares_la-ares_strcasecmp.lo: str/ares_strcasecmp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT str/libcares_la-ares_strcasecmp.lo -MD -MP -MF str/$(DEPDIR)/libcares_la-ares_strcasecmp.Tpo -c -o str/libcares_la-ares_strcasecmp.lo `test -f 'str/ares_strcasecmp.c' || echo '$(srcdir)/'`str/ares_strcasecmp.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) str/$(DEPDIR)/libcares_la-ares_strcasecmp.Tpo str/$(DEPDIR)/libcares_la-ares_strcasecmp.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='str/ares_strcasecmp.c' object='str/libcares_la-ares_strcasecmp.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o str/libcares_la-ares_strcasecmp.lo `test -f 'str/ares_strcasecmp.c' || echo '$(srcdir)/'`str/ares_strcasecmp.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o str/libcares_la-ares_buf.lo `test -f 'str/ares_buf.c' || echo '$(srcdir)/'`str/ares_buf.c str/libcares_la-ares_str.lo: str/ares_str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT str/libcares_la-ares_str.lo -MD -MP -MF str/$(DEPDIR)/libcares_la-ares_str.Tpo -c -o str/libcares_la-ares_str.lo `test -f 'str/ares_str.c' || echo '$(srcdir)/'`str/ares_str.c @@ -1698,26 +1733,26 @@ str/libcares_la-ares_strsplit.lo: str/ares_strsplit.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o str/libcares_la-ares_strsplit.lo `test -f 'str/ares_strsplit.c' || echo '$(srcdir)/'`str/ares_strsplit.c -util/libcares_la-ares__iface_ips.lo: util/ares__iface_ips.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT util/libcares_la-ares__iface_ips.lo -MD -MP -MF util/$(DEPDIR)/libcares_la-ares__iface_ips.Tpo -c -o util/libcares_la-ares__iface_ips.lo `test -f 'util/ares__iface_ips.c' || echo '$(srcdir)/'`util/ares__iface_ips.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/libcares_la-ares__iface_ips.Tpo util/$(DEPDIR)/libcares_la-ares__iface_ips.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/ares__iface_ips.c' object='util/libcares_la-ares__iface_ips.lo' libtool=yes @AMDEPBACKSLASH@ +util/libcares_la-ares_iface_ips.lo: util/ares_iface_ips.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT util/libcares_la-ares_iface_ips.lo -MD -MP -MF util/$(DEPDIR)/libcares_la-ares_iface_ips.Tpo -c -o util/libcares_la-ares_iface_ips.lo `test -f 'util/ares_iface_ips.c' || echo '$(srcdir)/'`util/ares_iface_ips.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/libcares_la-ares_iface_ips.Tpo util/$(DEPDIR)/libcares_la-ares_iface_ips.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/ares_iface_ips.c' object='util/libcares_la-ares_iface_ips.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o util/libcares_la-ares__iface_ips.lo `test -f 'util/ares__iface_ips.c' || echo '$(srcdir)/'`util/ares__iface_ips.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o util/libcares_la-ares_iface_ips.lo `test -f 'util/ares_iface_ips.c' || echo '$(srcdir)/'`util/ares_iface_ips.c -util/libcares_la-ares__threads.lo: util/ares__threads.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT util/libcares_la-ares__threads.lo -MD -MP -MF util/$(DEPDIR)/libcares_la-ares__threads.Tpo -c -o util/libcares_la-ares__threads.lo `test -f 'util/ares__threads.c' || echo '$(srcdir)/'`util/ares__threads.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/libcares_la-ares__threads.Tpo util/$(DEPDIR)/libcares_la-ares__threads.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/ares__threads.c' object='util/libcares_la-ares__threads.lo' libtool=yes @AMDEPBACKSLASH@ +util/libcares_la-ares_threads.lo: util/ares_threads.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT util/libcares_la-ares_threads.lo -MD -MP -MF util/$(DEPDIR)/libcares_la-ares_threads.Tpo -c -o util/libcares_la-ares_threads.lo `test -f 'util/ares_threads.c' || echo '$(srcdir)/'`util/ares_threads.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/libcares_la-ares_threads.Tpo util/$(DEPDIR)/libcares_la-ares_threads.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/ares_threads.c' object='util/libcares_la-ares_threads.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o util/libcares_la-ares__threads.lo `test -f 'util/ares__threads.c' || echo '$(srcdir)/'`util/ares__threads.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o util/libcares_la-ares_threads.lo `test -f 'util/ares_threads.c' || echo '$(srcdir)/'`util/ares_threads.c -util/libcares_la-ares__timeval.lo: util/ares__timeval.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT util/libcares_la-ares__timeval.lo -MD -MP -MF util/$(DEPDIR)/libcares_la-ares__timeval.Tpo -c -o util/libcares_la-ares__timeval.lo `test -f 'util/ares__timeval.c' || echo '$(srcdir)/'`util/ares__timeval.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/libcares_la-ares__timeval.Tpo util/$(DEPDIR)/libcares_la-ares__timeval.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/ares__timeval.c' object='util/libcares_la-ares__timeval.lo' libtool=yes @AMDEPBACKSLASH@ +util/libcares_la-ares_timeval.lo: util/ares_timeval.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT util/libcares_la-ares_timeval.lo -MD -MP -MF util/$(DEPDIR)/libcares_la-ares_timeval.Tpo -c -o util/libcares_la-ares_timeval.lo `test -f 'util/ares_timeval.c' || echo '$(srcdir)/'`util/ares_timeval.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/libcares_la-ares_timeval.Tpo util/$(DEPDIR)/libcares_la-ares_timeval.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/ares_timeval.c' object='util/libcares_la-ares_timeval.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o util/libcares_la-ares__timeval.lo `test -f 'util/ares__timeval.c' || echo '$(srcdir)/'`util/ares__timeval.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o util/libcares_la-ares_timeval.lo `test -f 'util/ares_timeval.c' || echo '$(srcdir)/'`util/ares_timeval.c util/libcares_la-ares_math.lo: util/ares_math.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT util/libcares_la-ares_math.lo -MD -MP -MF util/$(DEPDIR)/libcares_la-ares_math.Tpo -c -o util/libcares_la-ares_math.lo `test -f 'util/ares_math.c' || echo '$(srcdir)/'`util/ares_math.c @@ -1733,6 +1768,13 @@ util/libcares_la-ares_rand.lo: util/ares_rand.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o util/libcares_la-ares_rand.lo `test -f 'util/ares_rand.c' || echo '$(srcdir)/'`util/ares_rand.c +util/libcares_la-ares_uri.lo: util/ares_uri.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT util/libcares_la-ares_uri.lo -MD -MP -MF util/$(DEPDIR)/libcares_la-ares_uri.Tpo -c -o util/libcares_la-ares_uri.lo `test -f 'util/ares_uri.c' || echo '$(srcdir)/'`util/ares_uri.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/libcares_la-ares_uri.Tpo util/$(DEPDIR)/libcares_la-ares_uri.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/ares_uri.c' object='util/libcares_la-ares_uri.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o util/libcares_la-ares_uri.lo `test -f 'util/ares_uri.c' || echo '$(srcdir)/'`util/ares_uri.c + mostlyclean-libtool: -rm -f *.lo @@ -1958,15 +2000,12 @@ clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-recursive - -rm -f ./$(DEPDIR)/libcares_la-ares__addrinfo2hostent.Plo - -rm -f ./$(DEPDIR)/libcares_la-ares__addrinfo_localhost.Plo - -rm -f ./$(DEPDIR)/libcares_la-ares__close_sockets.Plo - -rm -f ./$(DEPDIR)/libcares_la-ares__hosts_file.Plo - -rm -f ./$(DEPDIR)/libcares_la-ares__parse_into_addrinfo.Plo - -rm -f ./$(DEPDIR)/libcares_la-ares__socket.Plo - -rm -f ./$(DEPDIR)/libcares_la-ares__sortaddrinfo.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_addrinfo2hostent.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_addrinfo_localhost.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_android.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_cancel.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_close_sockets.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_conn.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_cookie.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_data.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_destroy.Plo @@ -1978,16 +2017,20 @@ distclean: distclean-recursive -rm -f ./$(DEPDIR)/libcares_la-ares_gethostbyaddr.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_gethostbyname.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_getnameinfo.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_hosts_file.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_init.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_library_init.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_metrics.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_options.Plo - -rm -f ./$(DEPDIR)/libcares_la-ares_platform.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_into_addrinfo.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_process.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_qcache.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_query.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_search.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_send.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_set_socket_functions.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_socket.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_sortaddrinfo.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_strerror.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_sysconfig.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_sysconfig_files.Plo @@ -1999,14 +2042,16 @@ distclean: distclean-recursive -rm -f ./$(DEPDIR)/libcares_la-inet_net_pton.Plo -rm -f ./$(DEPDIR)/libcares_la-inet_ntop.Plo -rm -f ./$(DEPDIR)/libcares_la-windows_port.Plo - -rm -f dsa/$(DEPDIR)/libcares_la-ares__array.Plo - -rm -f dsa/$(DEPDIR)/libcares_la-ares__htable.Plo - -rm -f dsa/$(DEPDIR)/libcares_la-ares__htable_asvp.Plo - -rm -f dsa/$(DEPDIR)/libcares_la-ares__htable_strvp.Plo - -rm -f dsa/$(DEPDIR)/libcares_la-ares__htable_szvp.Plo - -rm -f dsa/$(DEPDIR)/libcares_la-ares__htable_vpvp.Plo - -rm -f dsa/$(DEPDIR)/libcares_la-ares__llist.Plo - -rm -f dsa/$(DEPDIR)/libcares_la-ares__slist.Plo + -rm -f dsa/$(DEPDIR)/libcares_la-ares_array.Plo + -rm -f dsa/$(DEPDIR)/libcares_la-ares_htable.Plo + -rm -f dsa/$(DEPDIR)/libcares_la-ares_htable_asvp.Plo + -rm -f dsa/$(DEPDIR)/libcares_la-ares_htable_dict.Plo + -rm -f dsa/$(DEPDIR)/libcares_la-ares_htable_strvp.Plo + -rm -f dsa/$(DEPDIR)/libcares_la-ares_htable_szvp.Plo + -rm -f dsa/$(DEPDIR)/libcares_la-ares_htable_vpstr.Plo + -rm -f dsa/$(DEPDIR)/libcares_la-ares_htable_vpvp.Plo + -rm -f dsa/$(DEPDIR)/libcares_la-ares_llist.Plo + -rm -f dsa/$(DEPDIR)/libcares_la-ares_slist.Plo -rm -f event/$(DEPDIR)/libcares_la-ares_event_configchg.Plo -rm -f event/$(DEPDIR)/libcares_la-ares_event_epoll.Plo -rm -f event/$(DEPDIR)/libcares_la-ares_event_kqueue.Plo @@ -2037,15 +2082,15 @@ distclean: distclean-recursive -rm -f record/$(DEPDIR)/libcares_la-ares_dns_parse.Plo -rm -f record/$(DEPDIR)/libcares_la-ares_dns_record.Plo -rm -f record/$(DEPDIR)/libcares_la-ares_dns_write.Plo - -rm -f str/$(DEPDIR)/libcares_la-ares__buf.Plo + -rm -f str/$(DEPDIR)/libcares_la-ares_buf.Plo -rm -f str/$(DEPDIR)/libcares_la-ares_str.Plo - -rm -f str/$(DEPDIR)/libcares_la-ares_strcasecmp.Plo -rm -f str/$(DEPDIR)/libcares_la-ares_strsplit.Plo - -rm -f util/$(DEPDIR)/libcares_la-ares__iface_ips.Plo - -rm -f util/$(DEPDIR)/libcares_la-ares__threads.Plo - -rm -f util/$(DEPDIR)/libcares_la-ares__timeval.Plo + -rm -f util/$(DEPDIR)/libcares_la-ares_iface_ips.Plo -rm -f util/$(DEPDIR)/libcares_la-ares_math.Plo -rm -f util/$(DEPDIR)/libcares_la-ares_rand.Plo + -rm -f util/$(DEPDIR)/libcares_la-ares_threads.Plo + -rm -f util/$(DEPDIR)/libcares_la-ares_timeval.Plo + -rm -f util/$(DEPDIR)/libcares_la-ares_uri.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags @@ -2091,15 +2136,12 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive - -rm -f ./$(DEPDIR)/libcares_la-ares__addrinfo2hostent.Plo - -rm -f ./$(DEPDIR)/libcares_la-ares__addrinfo_localhost.Plo - -rm -f ./$(DEPDIR)/libcares_la-ares__close_sockets.Plo - -rm -f ./$(DEPDIR)/libcares_la-ares__hosts_file.Plo - -rm -f ./$(DEPDIR)/libcares_la-ares__parse_into_addrinfo.Plo - -rm -f ./$(DEPDIR)/libcares_la-ares__socket.Plo - -rm -f ./$(DEPDIR)/libcares_la-ares__sortaddrinfo.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_addrinfo2hostent.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_addrinfo_localhost.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_android.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_cancel.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_close_sockets.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_conn.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_cookie.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_data.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_destroy.Plo @@ -2111,16 +2153,20 @@ maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/libcares_la-ares_gethostbyaddr.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_gethostbyname.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_getnameinfo.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_hosts_file.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_init.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_library_init.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_metrics.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_options.Plo - -rm -f ./$(DEPDIR)/libcares_la-ares_platform.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_into_addrinfo.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_process.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_qcache.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_query.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_search.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_send.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_set_socket_functions.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_socket.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_sortaddrinfo.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_strerror.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_sysconfig.Plo -rm -f ./$(DEPDIR)/libcares_la-ares_sysconfig_files.Plo @@ -2132,14 +2178,16 @@ maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/libcares_la-inet_net_pton.Plo -rm -f ./$(DEPDIR)/libcares_la-inet_ntop.Plo -rm -f ./$(DEPDIR)/libcares_la-windows_port.Plo - -rm -f dsa/$(DEPDIR)/libcares_la-ares__array.Plo - -rm -f dsa/$(DEPDIR)/libcares_la-ares__htable.Plo - -rm -f dsa/$(DEPDIR)/libcares_la-ares__htable_asvp.Plo - -rm -f dsa/$(DEPDIR)/libcares_la-ares__htable_strvp.Plo - -rm -f dsa/$(DEPDIR)/libcares_la-ares__htable_szvp.Plo - -rm -f dsa/$(DEPDIR)/libcares_la-ares__htable_vpvp.Plo - -rm -f dsa/$(DEPDIR)/libcares_la-ares__llist.Plo - -rm -f dsa/$(DEPDIR)/libcares_la-ares__slist.Plo + -rm -f dsa/$(DEPDIR)/libcares_la-ares_array.Plo + -rm -f dsa/$(DEPDIR)/libcares_la-ares_htable.Plo + -rm -f dsa/$(DEPDIR)/libcares_la-ares_htable_asvp.Plo + -rm -f dsa/$(DEPDIR)/libcares_la-ares_htable_dict.Plo + -rm -f dsa/$(DEPDIR)/libcares_la-ares_htable_strvp.Plo + -rm -f dsa/$(DEPDIR)/libcares_la-ares_htable_szvp.Plo + -rm -f dsa/$(DEPDIR)/libcares_la-ares_htable_vpstr.Plo + -rm -f dsa/$(DEPDIR)/libcares_la-ares_htable_vpvp.Plo + -rm -f dsa/$(DEPDIR)/libcares_la-ares_llist.Plo + -rm -f dsa/$(DEPDIR)/libcares_la-ares_slist.Plo -rm -f event/$(DEPDIR)/libcares_la-ares_event_configchg.Plo -rm -f event/$(DEPDIR)/libcares_la-ares_event_epoll.Plo -rm -f event/$(DEPDIR)/libcares_la-ares_event_kqueue.Plo @@ -2170,15 +2218,15 @@ maintainer-clean: maintainer-clean-recursive -rm -f record/$(DEPDIR)/libcares_la-ares_dns_parse.Plo -rm -f record/$(DEPDIR)/libcares_la-ares_dns_record.Plo -rm -f record/$(DEPDIR)/libcares_la-ares_dns_write.Plo - -rm -f str/$(DEPDIR)/libcares_la-ares__buf.Plo + -rm -f str/$(DEPDIR)/libcares_la-ares_buf.Plo -rm -f str/$(DEPDIR)/libcares_la-ares_str.Plo - -rm -f str/$(DEPDIR)/libcares_la-ares_strcasecmp.Plo -rm -f str/$(DEPDIR)/libcares_la-ares_strsplit.Plo - -rm -f util/$(DEPDIR)/libcares_la-ares__iface_ips.Plo - -rm -f util/$(DEPDIR)/libcares_la-ares__threads.Plo - -rm -f util/$(DEPDIR)/libcares_la-ares__timeval.Plo + -rm -f util/$(DEPDIR)/libcares_la-ares_iface_ips.Plo -rm -f util/$(DEPDIR)/libcares_la-ares_math.Plo -rm -f util/$(DEPDIR)/libcares_la-ares_rand.Plo + -rm -f util/$(DEPDIR)/libcares_la-ares_threads.Plo + -rm -f util/$(DEPDIR)/libcares_la-ares_timeval.Plo + -rm -f util/$(DEPDIR)/libcares_la-ares_uri.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic diff --git a/deps/cares/src/lib/Makefile.inc b/deps/cares/src/lib/Makefile.inc index 8fa434c3e2c860..10e4edf5c761a0 100644 --- a/deps/cares/src/lib/Makefile.inc +++ b/deps/cares/src/lib/Makefile.inc @@ -1,15 +1,12 @@ # Copyright (C) The c-ares project and its contributors # SPDX-License-Identifier: MIT -CSOURCES = ares__addrinfo2hostent.c \ - ares__addrinfo_localhost.c \ - ares__close_sockets.c \ - ares__hosts_file.c \ - ares__parse_into_addrinfo.c \ - ares__socket.c \ - ares__sortaddrinfo.c \ +CSOURCES = ares_addrinfo2hostent.c \ + ares_addrinfo_localhost.c \ ares_android.c \ ares_cancel.c \ + ares_close_sockets.c \ + ares_conn.c \ ares_cookie.c \ ares_data.c \ ares_destroy.c \ @@ -21,16 +18,20 @@ CSOURCES = ares__addrinfo2hostent.c \ ares_gethostbyaddr.c \ ares_gethostbyname.c \ ares_getnameinfo.c \ + ares_hosts_file.c \ ares_init.c \ ares_library_init.c \ ares_metrics.c \ ares_options.c \ - ares_platform.c \ + ares_parse_into_addrinfo.c \ ares_process.c \ ares_qcache.c \ ares_query.c \ ares_search.c \ ares_send.c \ + ares_set_socket_functions.c \ + ares_socket.c \ + ares_sortaddrinfo.c \ ares_strerror.c \ ares_sysconfig.c \ ares_sysconfig_files.c \ @@ -42,14 +43,16 @@ CSOURCES = ares__addrinfo2hostent.c \ inet_net_pton.c \ inet_ntop.c \ windows_port.c \ - dsa/ares__array.c \ - dsa/ares__htable.c \ - dsa/ares__htable_asvp.c \ - dsa/ares__htable_strvp.c \ - dsa/ares__htable_szvp.c \ - dsa/ares__htable_vpvp.c \ - dsa/ares__llist.c \ - dsa/ares__slist.c \ + dsa/ares_array.c \ + dsa/ares_htable.c \ + dsa/ares_htable_asvp.c \ + dsa/ares_htable_dict.c \ + dsa/ares_htable_strvp.c \ + dsa/ares_htable_szvp.c \ + dsa/ares_htable_vpstr.c \ + dsa/ares_htable_vpvp.c \ + dsa/ares_llist.c \ + dsa/ares_slist.c \ event/ares_event_configchg.c \ event/ares_event_epoll.c \ event/ares_event_kqueue.c \ @@ -80,41 +83,47 @@ CSOURCES = ares__addrinfo2hostent.c \ record/ares_dns_parse.c \ record/ares_dns_record.c \ record/ares_dns_write.c \ - str/ares__buf.c \ - str/ares_strcasecmp.c \ + str/ares_buf.c \ str/ares_str.c \ str/ares_strsplit.c \ - util/ares__iface_ips.c \ - util/ares__threads.c \ - util/ares__timeval.c \ + util/ares_iface_ips.c \ + util/ares_threads.c \ + util/ares_timeval.c \ util/ares_math.c \ - util/ares_rand.c + util/ares_rand.c \ + util/ares_uri.c HHEADERS = ares_android.h \ + ares_conn.h \ ares_data.h \ ares_getenv.h \ ares_inet_net_pton.h \ ares_ipv6.h \ - ares_platform.h \ ares_private.h \ ares_setup.h \ - dsa/ares__array.h \ - dsa/ares__htable.h \ - dsa/ares__htable_asvp.h \ - dsa/ares__htable_strvp.h \ - dsa/ares__htable_szvp.h \ - dsa/ares__htable_vpvp.h \ - dsa/ares__llist.h \ - dsa/ares__slist.h \ + ares_socket.h \ + dsa/ares_htable.h \ + dsa/ares_slist.h \ event/ares_event.h \ event/ares_event_win32.h \ + include/ares_array.h \ + include/ares_buf.h \ + include/ares_htable_asvp.h \ + include/ares_htable_dict.h \ + include/ares_htable_strvp.h \ + include/ares_htable_szvp.h \ + include/ares_htable_vpstr.h \ + include/ares_htable_vpvp.h \ + include/ares_llist.h \ + include/ares_mem.h \ + include/ares_str.h \ record/ares_dns_multistring.h \ record/ares_dns_private.h \ - str/ares__buf.h \ - str/ares_strcasecmp.h \ - str/ares_str.h \ str/ares_strsplit.h \ - util/ares__iface_ips.h \ - util/ares__threads.h \ + util/ares_iface_ips.h \ + util/ares_math.h \ + util/ares_rand.h \ + util/ares_time.h \ + util/ares_threads.h \ + util/ares_uri.h \ thirdparty/apple/dnsinfo.h - diff --git a/deps/cares/src/lib/ares__socket.c b/deps/cares/src/lib/ares__socket.c deleted file mode 100644 index 86e281fcddadd4..00000000000000 --- a/deps/cares/src/lib/ares__socket.c +++ /dev/null @@ -1,764 +0,0 @@ -/* MIT License - * - * Copyright (c) Massachusetts Institute of Technology - * Copyright (c) The c-ares project and its contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * SPDX-License-Identifier: MIT - */ -#include "ares_private.h" - -#ifdef HAVE_SYS_UIO_H -# include -#endif -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_NETINET_TCP_H -# include -#endif -#ifdef HAVE_NETDB_H -# include -#endif -#ifdef HAVE_ARPA_INET_H -# include -#endif - -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_SYS_IOCTL_H -# include -#endif -#ifdef NETWARE -# include -#endif - -#include -#include -#include - -#if defined(__linux__) && defined(TCP_FASTOPEN_CONNECT) -# define TFO_SUPPORTED 1 -# define TFO_SKIP_CONNECT 0 -# define TFO_USE_SENDTO 0 -# define TFO_USE_CONNECTX 0 -# define TFO_CLIENT_SOCKOPT TCP_FASTOPEN_CONNECT -#elif defined(__FreeBSD__) && defined(TCP_FASTOPEN) -# define TFO_SUPPORTED 1 -# define TFO_SKIP_CONNECT 1 -# define TFO_USE_SENDTO 1 -# define TFO_USE_CONNECTX 0 -# define TFO_CLIENT_SOCKOPT TCP_FASTOPEN -#elif defined(__APPLE__) && defined(HAVE_CONNECTX) -# define TFO_SUPPORTED 1 -# define TFO_SKIP_CONNECT 0 -# define TFO_USE_SENDTO 0 -# define TFO_USE_CONNECTX 1 -# undef TFO_CLIENT_SOCKOPT -#else -# define TFO_SUPPORTED 0 -#endif - - -#ifndef HAVE_WRITEV -/* Structure for scatter/gather I/O. */ -struct iovec { - void *iov_base; /* Pointer to data. */ - size_t iov_len; /* Length of data. */ -}; -#endif - - -/* Return 1 if the specified error number describes a readiness error, or 0 - * otherwise. This is mostly for HP-UX, which could return EAGAIN or - * EWOULDBLOCK. See this man page - * - * http://devrsrc1.external.hp.com/STKS/cgi-bin/man2html? - * manpage=/usr/share/man/man2.Z/send.2 - */ -ares_bool_t ares__socket_try_again(int errnum) -{ -#if !defined EWOULDBLOCK && !defined EAGAIN -# error "Neither EWOULDBLOCK nor EAGAIN defined" -#endif - -#ifdef EWOULDBLOCK - if (errnum == EWOULDBLOCK) { - return ARES_TRUE; - } -#endif - -#if defined EAGAIN && EAGAIN != EWOULDBLOCK - if (errnum == EAGAIN) { - return ARES_TRUE; - } -#endif - - return ARES_FALSE; -} - -ares_ssize_t ares__socket_recv(ares_channel_t *channel, ares_socket_t s, - void *data, size_t data_len) -{ - if (channel->sock_funcs && channel->sock_funcs->arecvfrom) { - return channel->sock_funcs->arecvfrom(s, data, data_len, 0, 0, 0, - channel->sock_func_cb_data); - } - - return (ares_ssize_t)recv((RECV_TYPE_ARG1)s, (RECV_TYPE_ARG2)data, - (RECV_TYPE_ARG3)data_len, (RECV_TYPE_ARG4)(0)); -} - -ares_ssize_t ares__socket_recvfrom(ares_channel_t *channel, ares_socket_t s, - void *data, size_t data_len, int flags, - struct sockaddr *from, - ares_socklen_t *from_len) -{ - if (channel->sock_funcs && channel->sock_funcs->arecvfrom) { - return channel->sock_funcs->arecvfrom(s, data, data_len, flags, from, - from_len, channel->sock_func_cb_data); - } - -#ifdef HAVE_RECVFROM - return (ares_ssize_t)recvfrom(s, data, (RECVFROM_TYPE_ARG3)data_len, flags, - from, from_len); -#else - return ares__socket_recv(channel, s, data, data_len); -#endif -} - -/* Use like: - * struct sockaddr_storage sa_storage; - * ares_socklen_t salen = sizeof(sa_storage); - * struct sockaddr *sa = (struct sockaddr *)&sa_storage; - * ares__conn_set_sockaddr(conn, sa, &salen); - */ -static ares_status_t ares__conn_set_sockaddr(const ares_conn_t *conn, - struct sockaddr *sa, - ares_socklen_t *salen) -{ - const ares_server_t *server = conn->server; - unsigned short port = - conn->flags & ARES_CONN_FLAG_TCP ? server->tcp_port : server->udp_port; - struct sockaddr_in *sin; - struct sockaddr_in6 *sin6; - - switch (server->addr.family) { - case AF_INET: - sin = (struct sockaddr_in *)(void *)sa; - if (*salen < (ares_socklen_t)sizeof(*sin)) { - return ARES_EFORMERR; - } - *salen = sizeof(*sin); - memset(sin, 0, sizeof(*sin)); - sin->sin_family = AF_INET; - sin->sin_port = htons(port); - memcpy(&sin->sin_addr, &server->addr.addr.addr4, sizeof(sin->sin_addr)); - return ARES_SUCCESS; - case AF_INET6: - sin6 = (struct sockaddr_in6 *)(void *)sa; - if (*salen < (ares_socklen_t)sizeof(*sin6)) { - return ARES_EFORMERR; - } - *salen = sizeof(*sin6); - memset(sin6, 0, sizeof(*sin6)); - sin6->sin6_family = AF_INET6; - sin6->sin6_port = htons(port); - memcpy(&sin6->sin6_addr, &server->addr.addr.addr6, - sizeof(sin6->sin6_addr)); -#ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID - sin6->sin6_scope_id = server->ll_scope; -#endif - return ARES_SUCCESS; - default: - break; - } - - return ARES_EBADFAMILY; -} - -static ares_status_t ares_conn_set_self_ip(ares_conn_t *conn, ares_bool_t early) -{ - struct sockaddr_storage sa_storage; - int rv; - ares_socklen_t len = sizeof(sa_storage); - - /* We call this twice on TFO, if we already have the IP we can go ahead and - * skip processing */ - if (!early && conn->self_ip.family != AF_UNSPEC) { - return ARES_SUCCESS; - } - - memset(&sa_storage, 0, sizeof(sa_storage)); - - rv = getsockname(conn->fd, (struct sockaddr *)(void *)&sa_storage, &len); - if (rv != 0) { - /* During TCP FastOpen, we can't get the IP this early since connect() - * may not be called. That's ok, we'll try again later */ - if (early && conn->flags & ARES_CONN_FLAG_TCP && - conn->flags & ARES_CONN_FLAG_TFO) { - memset(&conn->self_ip, 0, sizeof(conn->self_ip)); - return ARES_SUCCESS; - } - return ARES_ECONNREFUSED; - } - - if (!ares_sockaddr_to_ares_addr(&conn->self_ip, NULL, - (struct sockaddr *)(void *)&sa_storage)) { - return ARES_ECONNREFUSED; - } - - return ARES_SUCCESS; -} - -ares_ssize_t ares__conn_write(ares_conn_t *conn, const void *data, size_t len) -{ - ares_channel_t *channel = conn->server->channel; - int flags = 0; - -#ifdef HAVE_MSG_NOSIGNAL - flags |= MSG_NOSIGNAL; -#endif - - if (channel->sock_funcs && channel->sock_funcs->asendv) { - struct iovec vec; - vec.iov_base = (void *)((size_t)data); /* Cast off const */ - vec.iov_len = len; - return channel->sock_funcs->asendv(conn->fd, &vec, 1, - channel->sock_func_cb_data); - } - - if (conn->flags & ARES_CONN_FLAG_TFO_INITIAL) { - conn->flags &= ~((unsigned int)ARES_CONN_FLAG_TFO_INITIAL); - -#if defined(TFO_USE_SENDTO) && TFO_USE_SENDTO - { - struct sockaddr_storage sa_storage; - ares_socklen_t salen = sizeof(sa_storage); - struct sockaddr *sa = (struct sockaddr *)&sa_storage; - ares_status_t status; - ares_ssize_t rv; - - status = ares__conn_set_sockaddr(conn, sa, &salen); - if (status != ARES_SUCCESS) { - return status; - } - - rv = (ares_ssize_t)sendto((SEND_TYPE_ARG1)conn->fd, (SEND_TYPE_ARG2)data, - (SEND_TYPE_ARG3)len, (SEND_TYPE_ARG4)flags, sa, - salen); - - /* If using TFO, we might not have been able to get an IP earlier, since - * we hadn't informed the OS of the destination. When using sendto() - * now we have so we should be able to fetch it */ - ares_conn_set_self_ip(conn, ARES_TRUE); - return rv; - } -#endif - } - - return (ares_ssize_t)send((SEND_TYPE_ARG1)conn->fd, (SEND_TYPE_ARG2)data, - (SEND_TYPE_ARG3)len, (SEND_TYPE_ARG4)flags); -} - -/* - * setsocknonblock sets the given socket to either blocking or non-blocking - * mode based on the 'nonblock' boolean argument. This function is highly - * portable. - */ -static int setsocknonblock(ares_socket_t sockfd, /* operate on this */ - int nonblock /* TRUE or FALSE */) -{ -#if defined(USE_BLOCKING_SOCKETS) - - return 0; /* returns success */ - -#elif defined(HAVE_FCNTL_O_NONBLOCK) - - /* most recent unix versions */ - int flags; - flags = fcntl(sockfd, F_GETFL, 0); - if (nonblock) { - return fcntl(sockfd, F_SETFL, flags | O_NONBLOCK); - } else { - return fcntl(sockfd, F_SETFL, flags & (~O_NONBLOCK)); /* LCOV_EXCL_LINE */ - } - -#elif defined(HAVE_IOCTL_FIONBIO) - - /* older unix versions */ - int flags = nonblock ? 1 : 0; - return ioctl(sockfd, FIONBIO, &flags); - -#elif defined(HAVE_IOCTLSOCKET_FIONBIO) - -# ifdef WATT32 - char flags = nonblock ? 1 : 0; -# else - /* Windows */ - unsigned long flags = nonblock ? 1UL : 0UL; -# endif - return ioctlsocket(sockfd, (long)FIONBIO, &flags); - -#elif defined(HAVE_IOCTLSOCKET_CAMEL_FIONBIO) - - /* Amiga */ - long flags = nonblock ? 1L : 0L; - return IoctlSocket(sockfd, FIONBIO, flags); - -#elif defined(HAVE_SETSOCKOPT_SO_NONBLOCK) - - /* BeOS */ - long b = nonblock ? 1L : 0L; - return setsockopt(sockfd, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b)); - -#else -# error "no non-blocking method was found/used/set" -#endif -} - -#if defined(IPV6_V6ONLY) && defined(USE_WINSOCK) -/* It makes support for IPv4-mapped IPv6 addresses. - * Linux kernel, NetBSD, FreeBSD and Darwin: default is off; - * Windows Vista and later: default is on; - * DragonFly BSD: acts like off, and dummy setting; - * OpenBSD and earlier Windows: unsupported. - * Linux: controlled by /proc/sys/net/ipv6/bindv6only. - */ -static void set_ipv6_v6only(ares_socket_t sockfd, int on) -{ - (void)setsockopt(sockfd, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&on, sizeof(on)); -} -#else -# define set_ipv6_v6only(s, v) -#endif - -static ares_status_t configure_socket(ares_conn_t *conn) -{ - union { - struct sockaddr sa; - struct sockaddr_in sa4; - struct sockaddr_in6 sa6; - } local; - - ares_socklen_t bindlen = 0; - ares_server_t *server = conn->server; - ares_channel_t *channel = server->channel; - - /* do not set options for user-managed sockets */ - if (channel->sock_funcs && channel->sock_funcs->asocket) { - return ARES_SUCCESS; - } - - (void)setsocknonblock(conn->fd, 1); - -#if defined(FD_CLOEXEC) && !defined(MSDOS) - /* Configure the socket fd as close-on-exec. */ - if (fcntl(conn->fd, F_SETFD, FD_CLOEXEC) != 0) { - return ARES_ECONNREFUSED; /* LCOV_EXCL_LINE */ - } -#endif - - /* No need to emit SIGPIPE on socket errors */ -#if defined(SO_NOSIGPIPE) - { - int opt = 1; - (void)setsockopt(conn->fd, SOL_SOCKET, SO_NOSIGPIPE, (void *)&opt, - sizeof(opt)); - } -#endif - - /* Set the socket's send and receive buffer sizes. */ - if (channel->socket_send_buffer_size > 0 && - setsockopt(conn->fd, SOL_SOCKET, SO_SNDBUF, - (void *)&channel->socket_send_buffer_size, - sizeof(channel->socket_send_buffer_size)) != 0) { - return ARES_ECONNREFUSED; /* LCOV_EXCL_LINE: UntestablePath */ - } - - if (channel->socket_receive_buffer_size > 0 && - setsockopt(conn->fd, SOL_SOCKET, SO_RCVBUF, - (void *)&channel->socket_receive_buffer_size, - sizeof(channel->socket_receive_buffer_size)) != 0) { - return ARES_ECONNREFUSED; /* LCOV_EXCL_LINE: UntestablePath */ - } - -#ifdef SO_BINDTODEVICE - if (ares_strlen(channel->local_dev_name)) { - /* Only root can do this, and usually not fatal if it doesn't work, so - * just continue on. */ - (void)setsockopt(conn->fd, SOL_SOCKET, SO_BINDTODEVICE, - channel->local_dev_name, sizeof(channel->local_dev_name)); - } -#endif - - if (server->addr.family == AF_INET && channel->local_ip4) { - memset(&local.sa4, 0, sizeof(local.sa4)); - local.sa4.sin_family = AF_INET; - local.sa4.sin_addr.s_addr = htonl(channel->local_ip4); - bindlen = sizeof(local.sa4); - } else if (server->addr.family == AF_INET6 && server->ll_scope == 0 && - memcmp(channel->local_ip6, ares_in6addr_any._S6_un._S6_u8, - sizeof(channel->local_ip6)) != 0) { - /* Only if not link-local and an ip other than "::" is specified */ - memset(&local.sa6, 0, sizeof(local.sa6)); - local.sa6.sin6_family = AF_INET6; - memcpy(&local.sa6.sin6_addr, channel->local_ip6, - sizeof(channel->local_ip6)); - bindlen = sizeof(local.sa6); - } - - if (bindlen && bind(conn->fd, &local.sa, bindlen) < 0) { - return ARES_ECONNREFUSED; - } - - if (server->addr.family == AF_INET6) { - set_ipv6_v6only(conn->fd, 0); - } - - if (conn->flags & ARES_CONN_FLAG_TCP) { - int opt = 1; - -#ifdef TCP_NODELAY - /* - * Disable the Nagle algorithm (only relevant for TCP sockets, and thus not - * in configure_socket). In general, in DNS lookups we're pretty much - * interested in firing off a single request and then waiting for a reply, - * so batching isn't very interesting. - */ - if (setsockopt(conn->fd, IPPROTO_TCP, TCP_NODELAY, (void *)&opt, - sizeof(opt)) != 0) { - return ARES_ECONNREFUSED; - } -#endif - -#if defined(TFO_CLIENT_SOCKOPT) - if (conn->flags & ARES_CONN_FLAG_TFO && - setsockopt(conn->fd, IPPROTO_TCP, TFO_CLIENT_SOCKOPT, (void *)&opt, - sizeof(opt)) != 0) { - /* Disable TFO if flag can't be set. */ - conn->flags &= ~((unsigned int)ARES_CONN_FLAG_TFO); - } -#endif - } - - return ARES_SUCCESS; -} - -ares_bool_t ares_sockaddr_to_ares_addr(struct ares_addr *ares_addr, - unsigned short *port, - const struct sockaddr *sockaddr) -{ - if (sockaddr->sa_family == AF_INET) { - /* NOTE: memcpy sockaddr_in due to alignment issues found by UBSAN due to - * dnsinfo packing on MacOS */ - struct sockaddr_in sockaddr_in; - memcpy(&sockaddr_in, sockaddr, sizeof(sockaddr_in)); - - ares_addr->family = AF_INET; - memcpy(&ares_addr->addr.addr4, &(sockaddr_in.sin_addr), - sizeof(ares_addr->addr.addr4)); - - if (port) { - *port = ntohs(sockaddr_in.sin_port); - } - return ARES_TRUE; - } - - if (sockaddr->sa_family == AF_INET6) { - /* NOTE: memcpy sockaddr_in6 due to alignment issues found by UBSAN due to - * dnsinfo packing on MacOS */ - struct sockaddr_in6 sockaddr_in6; - memcpy(&sockaddr_in6, sockaddr, sizeof(sockaddr_in6)); - - ares_addr->family = AF_INET6; - memcpy(&ares_addr->addr.addr6, &(sockaddr_in6.sin6_addr), - sizeof(ares_addr->addr.addr6)); - if (port) { - *port = ntohs(sockaddr_in6.sin6_port); - } - return ARES_TRUE; - } - - return ARES_FALSE; -} - -static ares_status_t ares__conn_connect(ares_conn_t *conn, struct sockaddr *sa, - ares_socklen_t salen) -{ - /* Normal non TCPFastOpen style connect */ - if (!(conn->flags & ARES_CONN_FLAG_TFO)) { - return ares__connect_socket(conn->server->channel, conn->fd, sa, salen); - } - - /* FreeBSD don't want any sort of connect() so skip */ -#if defined(TFO_SKIP_CONNECT) && TFO_SKIP_CONNECT - return ARES_SUCCESS; -#elif defined(TFO_USE_CONNECTX) && TFO_USE_CONNECTX - { - int rv; - int err; - - do { - sa_endpoints_t endpoints; - memset(&endpoints, 0, sizeof(endpoints)); - endpoints.sae_dstaddr = sa; - endpoints.sae_dstaddrlen = salen; - - rv = connectx(conn->fd, &endpoints, SAE_ASSOCID_ANY, - CONNECT_DATA_IDEMPOTENT | CONNECT_RESUME_ON_READ_WRITE, - NULL, 0, NULL, NULL); - - err = SOCKERRNO; - if (rv == -1 && err != EINPROGRESS && err != EWOULDBLOCK) { - return ARES_ECONNREFUSED; - } - - } while (rv == -1 && err == EINTR); - } - return ARES_SUCCESS; -#elif defined(TFO_SUPPORTED) && TFO_SUPPORTED - return ares__connect_socket(conn->server->channel, conn->fd, sa, salen); -#else - /* Shouldn't be possible */ - return ARES_ECONNREFUSED; -#endif -} - -ares_status_t ares__open_connection(ares_conn_t **conn_out, - ares_channel_t *channel, - ares_server_t *server, ares_bool_t is_tcp) -{ - ares_status_t status; - struct sockaddr_storage sa_storage; - ares_socklen_t salen = sizeof(sa_storage); - struct sockaddr *sa = (struct sockaddr *)&sa_storage; - ares_conn_t *conn; - ares__llist_node_t *node = NULL; - int stype = is_tcp ? SOCK_STREAM : SOCK_DGRAM; - - *conn_out = NULL; - - conn = ares_malloc(sizeof(*conn)); - if (conn == NULL) { - return ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ - } - - memset(conn, 0, sizeof(*conn)); - conn->fd = ARES_SOCKET_BAD; - conn->server = server; - conn->queries_to_conn = ares__llist_create(NULL); - conn->flags = is_tcp ? ARES_CONN_FLAG_TCP : ARES_CONN_FLAG_NONE; - - /* Enable TFO if the OS supports it and we were passed in data to send during - * the connect. It might be disabled later if an error is encountered. Make - * sure a user isn't overriding anything. */ - if (conn->flags & ARES_CONN_FLAG_TCP && channel->sock_funcs == NULL && - TFO_SUPPORTED) { - conn->flags |= ARES_CONN_FLAG_TFO; - } - - if (conn->queries_to_conn == NULL) { - /* LCOV_EXCL_START: OutOfMemory */ - status = ARES_ENOMEM; - goto done; - /* LCOV_EXCL_STOP */ - } - - /* Convert into the struct sockaddr structure needed by the OS */ - status = ares__conn_set_sockaddr(conn, sa, &salen); - if (status != ARES_SUCCESS) { - goto done; - } - - /* Acquire a socket. */ - conn->fd = ares__open_socket(channel, server->addr.family, stype, 0); - if (conn->fd == ARES_SOCKET_BAD) { - status = ARES_ECONNREFUSED; - goto done; - } - - /* Configure it. */ - status = configure_socket(conn); - if (status != ARES_SUCCESS) { - goto done; - } - - if (channel->sock_config_cb) { - int err = - channel->sock_config_cb(conn->fd, stype, channel->sock_config_cb_data); - if (err < 0) { - status = ARES_ECONNREFUSED; - goto done; - } - } - - /* Connect */ - status = ares__conn_connect(conn, sa, salen); - if (status != ARES_SUCCESS) { - goto done; - } - - if (channel->sock_create_cb) { - int err = - channel->sock_create_cb(conn->fd, stype, channel->sock_create_cb_data); - if (err < 0) { - status = ARES_ECONNREFUSED; - goto done; - } - } - - /* Let the connection know we haven't written our first packet yet for TFO */ - if (conn->flags & ARES_CONN_FLAG_TFO) { - conn->flags |= ARES_CONN_FLAG_TFO_INITIAL; - } - - /* Need to store our own ip for DNS cookie support */ - status = ares_conn_set_self_ip(conn, ARES_FALSE); - if (status != ARES_SUCCESS) { - goto done; /* LCOV_EXCL_LINE: UntestablePath */ - } - - /* TCP connections are thrown to the end as we don't spawn multiple TCP - * connections. UDP connections are put on front where the newest connection - * can be quickly pulled */ - if (is_tcp) { - node = ares__llist_insert_last(server->connections, conn); - } else { - node = ares__llist_insert_first(server->connections, conn); - } - if (node == NULL) { - /* LCOV_EXCL_START: OutOfMemory */ - status = ARES_ENOMEM; - goto done; - /* LCOV_EXCL_STOP */ - } - - /* Register globally to quickly map event on file descriptor to connection - * node object */ - if (!ares__htable_asvp_insert(channel->connnode_by_socket, conn->fd, node)) { - /* LCOV_EXCL_START: OutOfMemory */ - status = ARES_ENOMEM; - goto done; - /* LCOV_EXCL_STOP */ - } - - SOCK_STATE_CALLBACK(channel, conn->fd, 1, is_tcp ? 1 : 0); - - if (is_tcp) { - server->tcp_conn = conn; - } - -done: - if (status != ARES_SUCCESS) { - ares__llist_node_claim(node); - ares__llist_destroy(conn->queries_to_conn); - ares__close_socket(channel, conn->fd); - ares_free(conn); - } else { - *conn_out = conn; - } - return status; -} - -ares_socket_t ares__open_socket(ares_channel_t *channel, int af, int type, - int protocol) -{ - if (channel->sock_funcs && channel->sock_funcs->asocket) { - return channel->sock_funcs->asocket(af, type, protocol, - channel->sock_func_cb_data); - } - - return socket(af, type, protocol); -} - -ares_status_t ares__connect_socket(ares_channel_t *channel, - ares_socket_t sockfd, - const struct sockaddr *addr, - ares_socklen_t addrlen) -{ - int rv; - int err; - - do { - if (channel->sock_funcs && channel->sock_funcs->aconnect) { - rv = channel->sock_funcs->aconnect(sockfd, addr, addrlen, - channel->sock_func_cb_data); - } else { - rv = connect(sockfd, addr, addrlen); - } - - err = SOCKERRNO; - - if (rv == -1 && err != EINPROGRESS && err != EWOULDBLOCK) { - return ARES_ECONNREFUSED; - } - - } while (rv == -1 && err == EINTR); - - return ARES_SUCCESS; -} - -void ares__close_socket(ares_channel_t *channel, ares_socket_t s) -{ - if (s == ARES_SOCKET_BAD) { - return; - } - - if (channel->sock_funcs && channel->sock_funcs->aclose) { - channel->sock_funcs->aclose(s, channel->sock_func_cb_data); - } else { - sclose(s); - } -} - -void ares_set_socket_callback(ares_channel_t *channel, - ares_sock_create_callback cb, void *data) -{ - if (channel == NULL) { - return; - } - channel->sock_create_cb = cb; - channel->sock_create_cb_data = data; -} - -void ares_set_socket_configure_callback(ares_channel_t *channel, - ares_sock_config_callback cb, - void *data) -{ - if (channel == NULL || channel->optmask & ARES_OPT_EVENT_THREAD) { - return; - } - channel->sock_config_cb = cb; - channel->sock_config_cb_data = data; -} - -void ares_set_socket_functions(ares_channel_t *channel, - const struct ares_socket_functions *funcs, - void *data) -{ - if (channel == NULL || channel->optmask & ARES_OPT_EVENT_THREAD) { - return; - } - channel->sock_funcs = funcs; - channel->sock_func_cb_data = data; -} diff --git a/deps/cares/src/lib/ares__addrinfo2hostent.c b/deps/cares/src/lib/ares_addrinfo2hostent.c similarity index 93% rename from deps/cares/src/lib/ares__addrinfo2hostent.c rename to deps/cares/src/lib/ares_addrinfo2hostent.c index f7b6d1edd251f2..2bbc791157b01e 100644 --- a/deps/cares/src/lib/ares__addrinfo2hostent.c +++ b/deps/cares/src/lib/ares_addrinfo2hostent.c @@ -48,8 +48,8 @@ #endif -ares_status_t ares__addrinfo2hostent(const struct ares_addrinfo *ai, int family, - struct hostent **host) +ares_status_t ares_addrinfo2hostent(const struct ares_addrinfo *ai, int family, + struct hostent **host) { struct ares_addrinfo_node *next; struct ares_addrinfo_cname *next_cname; @@ -196,11 +196,11 @@ ares_status_t ares__addrinfo2hostent(const struct ares_addrinfo *ai, int family, /* LCOV_EXCL_STOP */ } -ares_status_t ares__addrinfo2addrttl(const struct ares_addrinfo *ai, int family, - size_t req_naddrttls, - struct ares_addrttl *addrttls, - struct ares_addr6ttl *addr6ttls, - size_t *naddrttls) +ares_status_t ares_addrinfo2addrttl(const struct ares_addrinfo *ai, int family, + size_t req_naddrttls, + struct ares_addrttl *addrttls, + struct ares_addr6ttl *addr6ttls, + size_t *naddrttls) { struct ares_addrinfo_node *next; struct ares_addrinfo_cname *next_cname; diff --git a/deps/cares/src/lib/ares__addrinfo_localhost.c b/deps/cares/src/lib/ares_addrinfo_localhost.c similarity index 89% rename from deps/cares/src/lib/ares__addrinfo_localhost.c rename to deps/cares/src/lib/ares_addrinfo_localhost.c index e98dd4e277b056..6f4f2a373b3feb 100644 --- a/deps/cares/src/lib/ares__addrinfo_localhost.c +++ b/deps/cares/src/lib/ares_addrinfo_localhost.c @@ -55,7 +55,7 @@ ares_status_t ares_append_ai_node(int aftype, unsigned short port, { struct ares_addrinfo_node *node; - node = ares__append_addrinfo_node(nodes); + node = ares_append_addrinfo_node(nodes); if (!node) { return ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -102,8 +102,8 @@ ares_status_t ares_append_ai_node(int aftype, unsigned short port, } static ares_status_t - ares__default_loopback_addrs(int aftype, unsigned short port, - struct ares_addrinfo_node **nodes) + ares_default_loopback_addrs(int aftype, unsigned short port, + struct ares_addrinfo_node **nodes) { ares_status_t status = ARES_SUCCESS; @@ -129,8 +129,8 @@ static ares_status_t } static ares_status_t - ares__system_loopback_addrs(int aftype, unsigned short port, - struct ares_addrinfo_node **nodes) + ares_system_loopback_addrs(int aftype, unsigned short port, + struct ares_addrinfo_node **nodes) { #if defined(USE_WINSOCK) && defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0600 && \ !defined(__WATCOMC__) @@ -176,7 +176,7 @@ static ares_status_t FreeMibTable(table); if (status != ARES_SUCCESS) { - ares__freeaddrinfo_nodes(*nodes); + ares_freeaddrinfo_nodes(*nodes); *nodes = NULL; } @@ -191,9 +191,9 @@ static ares_status_t #endif } -ares_status_t ares__addrinfo_localhost(const char *name, unsigned short port, - const struct ares_addrinfo_hints *hints, - struct ares_addrinfo *ai) +ares_status_t ares_addrinfo_localhost(const char *name, unsigned short port, + const struct ares_addrinfo_hints *hints, + struct ares_addrinfo *ai) { struct ares_addrinfo_node *nodes = NULL; ares_status_t status; @@ -213,19 +213,19 @@ ares_status_t ares__addrinfo_localhost(const char *name, unsigned short port, goto enomem; /* LCOV_EXCL_LINE: OutOfMemory */ } - status = ares__system_loopback_addrs(hints->ai_family, port, &nodes); + status = ares_system_loopback_addrs(hints->ai_family, port, &nodes); if (status == ARES_ENOTFOUND) { - status = ares__default_loopback_addrs(hints->ai_family, port, &nodes); + status = ares_default_loopback_addrs(hints->ai_family, port, &nodes); } - ares__addrinfo_cat_nodes(&ai->nodes, nodes); + ares_addrinfo_cat_nodes(&ai->nodes, nodes); return status; /* LCOV_EXCL_START: OutOfMemory */ enomem: - ares__freeaddrinfo_nodes(nodes); + ares_freeaddrinfo_nodes(nodes); ares_free(ai->name); ai->name = NULL; return ARES_ENOMEM; diff --git a/deps/cares/src/lib/ares_android.c b/deps/cares/src/lib/ares_android.c index 06ab8940ad736d..a8284c1e50235a 100644 --- a/deps/cares/src/lib/ares_android.c +++ b/deps/cares/src/lib/ares_android.c @@ -84,9 +84,9 @@ static jmethodID jni_get_method_id(JNIEnv *env, jclass cls, static int jvm_attach(JNIEnv **env) { - char name[17] = {0}; + char name[17] = { 0 }; - JavaVMAttachArgs args; + JavaVMAttachArgs args; args.version = JNI_VERSION_1_6; if (prctl(PR_GET_NAME, name) == 0) { @@ -94,7 +94,7 @@ static int jvm_attach(JNIEnv **env) } else { args.name = NULL; } - args.group = NULL; + args.group = NULL; return (*android_jvm)->AttachCurrentThread(android_jvm, env, &args); } diff --git a/deps/cares/src/lib/ares_cancel.c b/deps/cares/src/lib/ares_cancel.c index c29d8ef82f4d1a..75600dea6bcdaf 100644 --- a/deps/cares/src/lib/ares_cancel.c +++ b/deps/cares/src/lib/ares_cancel.c @@ -37,18 +37,18 @@ void ares_cancel(ares_channel_t *channel) return; } - ares__channel_lock(channel); + ares_channel_lock(channel); - if (ares__llist_len(channel->all_queries) > 0) { - ares__llist_node_t *node = NULL; - ares__llist_node_t *next = NULL; + if (ares_llist_len(channel->all_queries) > 0) { + ares_llist_node_t *node = NULL; + ares_llist_node_t *next = NULL; /* Swap list heads, so that only those queries which were present on entry * into this function are cancelled. New queries added by callbacks of * queries being cancelled will not be cancelled themselves. */ - ares__llist_t *list_copy = channel->all_queries; - channel->all_queries = ares__llist_create(NULL); + ares_llist_t *list_copy = channel->all_queries; + channel->all_queries = ares_llist_create(NULL); /* Out of memory, this function doesn't return a result code though so we * can't report to caller */ @@ -57,31 +57,31 @@ void ares_cancel(ares_channel_t *channel) goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } - node = ares__llist_node_first(list_copy); + node = ares_llist_node_first(list_copy); while (node != NULL) { ares_query_t *query; /* Cache next since this node is being deleted */ - next = ares__llist_node_next(node); + next = ares_llist_node_next(node); - query = ares__llist_node_claim(node); + query = ares_llist_node_claim(node); query->node_all_queries = NULL; /* NOTE: its possible this may enqueue new queries */ query->callback(query->arg, ARES_ECANCELLED, 0, NULL); - ares__free_query(query); + ares_free_query(query); node = next; } - ares__llist_destroy(list_copy); + ares_llist_destroy(list_copy); } /* See if the connections should be cleaned up */ - ares__check_cleanup_conns(channel); + ares_check_cleanup_conns(channel); ares_queue_notify_empty(channel); done: - ares__channel_unlock(channel); + ares_channel_unlock(channel); } diff --git a/deps/cares/src/lib/ares__close_sockets.c b/deps/cares/src/lib/ares_close_sockets.c similarity index 59% rename from deps/cares/src/lib/ares__close_sockets.c rename to deps/cares/src/lib/ares_close_sockets.c index 71c7e64f08ad38..fd3bf3c4b1e09e 100644 --- a/deps/cares/src/lib/ares__close_sockets.c +++ b/deps/cares/src/lib/ares_close_sockets.c @@ -28,81 +28,82 @@ #include "ares_private.h" #include -static void ares__requeue_queries(ares_conn_t *conn, - ares_status_t requeue_status) +static void ares_requeue_queries(ares_conn_t *conn, + ares_status_t requeue_status) { ares_query_t *query; ares_timeval_t now; - ares__tvnow(&now); + ares_tvnow(&now); - while ((query = ares__llist_first_val(conn->queries_to_conn)) != NULL) { - ares__requeue_query(query, &now, requeue_status, ARES_TRUE, NULL); + while ((query = ares_llist_first_val(conn->queries_to_conn)) != NULL) { + ares_requeue_query(query, &now, requeue_status, ARES_TRUE, NULL); } } -void ares__close_connection(ares_conn_t *conn, ares_status_t requeue_status) +void ares_close_connection(ares_conn_t *conn, ares_status_t requeue_status) { ares_server_t *server = conn->server; ares_channel_t *channel = server->channel; /* Unlink */ - ares__llist_node_claim( - ares__htable_asvp_get_direct(channel->connnode_by_socket, conn->fd)); - ares__htable_asvp_remove(channel->connnode_by_socket, conn->fd); + ares_llist_node_claim( + ares_htable_asvp_get_direct(channel->connnode_by_socket, conn->fd)); + ares_htable_asvp_remove(channel->connnode_by_socket, conn->fd); if (conn->flags & ARES_CONN_FLAG_TCP) { - /* Reset any existing input and output buffer. */ - ares__buf_consume(server->tcp_parser, ares__buf_len(server->tcp_parser)); - ares__buf_consume(server->tcp_send, ares__buf_len(server->tcp_send)); server->tcp_conn = NULL; } + ares_buf_destroy(conn->in_buf); + ares_buf_destroy(conn->out_buf); + /* Requeue queries to other connections */ - ares__requeue_queries(conn, requeue_status); + ares_requeue_queries(conn, requeue_status); + + ares_llist_destroy(conn->queries_to_conn); - ares__llist_destroy(conn->queries_to_conn); + ares_conn_sock_state_cb_update(conn, ARES_CONN_STATE_NONE); - SOCK_STATE_CALLBACK(channel, conn->fd, 0, 0); - ares__close_socket(channel, conn->fd); + ares_socket_close(channel, conn->fd); ares_free(conn); } -void ares__close_sockets(ares_server_t *server) +void ares_close_sockets(ares_server_t *server) { - ares__llist_node_t *node; + ares_llist_node_t *node; - while ((node = ares__llist_node_first(server->connections)) != NULL) { - ares_conn_t *conn = ares__llist_node_val(node); - ares__close_connection(conn, ARES_SUCCESS); + while ((node = ares_llist_node_first(server->connections)) != NULL) { + ares_conn_t *conn = ares_llist_node_val(node); + ares_close_connection(conn, ARES_SUCCESS); } } -void ares__check_cleanup_conns(const ares_channel_t *channel) +void ares_check_cleanup_conns(const ares_channel_t *channel) { - ares__slist_node_t *snode; + ares_slist_node_t *snode; if (channel == NULL) { return; /* LCOV_EXCL_LINE: DefensiveCoding */ } /* Iterate across each server */ - for (snode = ares__slist_node_first(channel->servers); snode != NULL; - snode = ares__slist_node_next(snode)) { - ares_server_t *server = ares__slist_node_val(snode); - ares__llist_node_t *cnode; + for (snode = ares_slist_node_first(channel->servers); snode != NULL; + snode = ares_slist_node_next(snode)) { + ares_server_t *server = ares_slist_node_val(snode); + ares_llist_node_t *cnode; /* Iterate across each connection */ - cnode = ares__llist_node_first(server->connections); + cnode = ares_llist_node_first(server->connections); while (cnode != NULL) { - ares__llist_node_t *next = ares__llist_node_next(cnode); - ares_conn_t *conn = ares__llist_node_val(cnode); - ares_bool_t do_cleanup = ARES_FALSE; - cnode = next; + ares_llist_node_t *next = ares_llist_node_next(cnode); + ares_conn_t *conn = ares_llist_node_val(cnode); + ares_bool_t do_cleanup = ARES_FALSE; + cnode = next; /* Has connections, not eligible */ - if (ares__llist_len(conn->queries_to_conn)) { + if (ares_llist_len(conn->queries_to_conn)) { continue; } @@ -130,7 +131,7 @@ void ares__check_cleanup_conns(const ares_channel_t *channel) } /* Clean it up */ - ares__close_connection(conn, ARES_SUCCESS); + ares_close_connection(conn, ARES_SUCCESS); } } } diff --git a/deps/cares/src/lib/ares_config.h.cmake b/deps/cares/src/lib/ares_config.h.cmake index da73867197145f..051b97f494fd32 100644 --- a/deps/cares/src/lib/ares_config.h.cmake +++ b/deps/cares/src/lib/ares_config.h.cmake @@ -82,6 +82,9 @@ /* Define to 1 if you have the header file. */ #cmakedefine HAVE_POLL_H 1 +/* Define to 1 if you have the memmem function. */ +#cmakedefine HAVE_MEMMEM 1 + /* Define to 1 if you have the poll function. */ #cmakedefine HAVE_POLL 1 @@ -242,6 +245,9 @@ /* Define to 1 if you have the send function. */ #cmakedefine HAVE_SEND 1 +/* Define to 1 if you have the sendto function. */ +#cmakedefine HAVE_SENDTO 1 + /* Define to 1 if you have the setsockopt function. */ #cmakedefine HAVE_SETSOCKOPT 1 diff --git a/deps/cares/src/lib/ares_config.h.in b/deps/cares/src/lib/ares_config.h.in index 3e75b4c2cd088e..d22fa863477fbf 100644 --- a/deps/cares/src/lib/ares_config.h.in +++ b/deps/cares/src/lib/ares_config.h.in @@ -177,6 +177,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_MALLOC_H +/* Define to 1 if you have `memmem` */ +#undef HAVE_MEMMEM + /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H @@ -249,6 +252,9 @@ /* Define to 1 if you have `send` */ #undef HAVE_SEND +/* Define to 1 if you have `sendto` */ +#undef HAVE_SENDTO + /* Define to 1 if you have `setsockopt` */ #undef HAVE_SETSOCKOPT diff --git a/deps/cares/src/lib/ares_conn.c b/deps/cares/src/lib/ares_conn.c new file mode 100644 index 00000000000000..6b315b05486d69 --- /dev/null +++ b/deps/cares/src/lib/ares_conn.c @@ -0,0 +1,511 @@ +/* MIT License + * + * Copyright (c) Massachusetts Institute of Technology + * Copyright (c) The c-ares project and its contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * SPDX-License-Identifier: MIT + */ +#include "ares_private.h" + +void ares_conn_sock_state_cb_update(ares_conn_t *conn, + ares_conn_state_flags_t flags) +{ + ares_channel_t *channel = conn->server->channel; + + if ((conn->state_flags & ARES_CONN_STATE_CBFLAGS) != flags && + channel->sock_state_cb) { + channel->sock_state_cb(channel->sock_state_cb_data, conn->fd, + flags & ARES_CONN_STATE_READ ? 1 : 0, + flags & ARES_CONN_STATE_WRITE ? 1 : 0); + } + + conn->state_flags &= ~((unsigned int)ARES_CONN_STATE_CBFLAGS); + conn->state_flags |= flags; +} + +ares_conn_err_t ares_conn_read(ares_conn_t *conn, void *data, size_t len, + size_t *read_bytes) +{ + ares_channel_t *channel = conn->server->channel; + ares_conn_err_t err; + + if (!(conn->flags & ARES_CONN_FLAG_TCP)) { + struct sockaddr_storage sa_storage; + ares_socklen_t salen = sizeof(sa_storage); + + memset(&sa_storage, 0, sizeof(sa_storage)); + + err = + ares_socket_recvfrom(channel, conn->fd, ARES_FALSE, data, len, 0, + (struct sockaddr *)&sa_storage, &salen, read_bytes); + +#ifdef HAVE_RECVFROM + if (err == ARES_CONN_ERR_SUCCESS && + !ares_sockaddr_addr_eq((struct sockaddr *)&sa_storage, + &conn->server->addr)) { + err = ARES_CONN_ERR_WOULDBLOCK; + } +#endif + } else { + err = ares_socket_recv(channel, conn->fd, ARES_TRUE, data, len, read_bytes); + } + + /* Toggle connected state if needed */ + if (err == ARES_CONN_ERR_SUCCESS) { + conn->state_flags |= ARES_CONN_STATE_CONNECTED; + } + + return err; +} + +/* Use like: + * struct sockaddr_storage sa_storage; + * ares_socklen_t salen = sizeof(sa_storage); + * struct sockaddr *sa = (struct sockaddr *)&sa_storage; + * ares_conn_set_sockaddr(conn, sa, &salen); + */ +static ares_status_t ares_conn_set_sockaddr(const ares_conn_t *conn, + struct sockaddr *sa, + ares_socklen_t *salen) +{ + const ares_server_t *server = conn->server; + unsigned short port = + conn->flags & ARES_CONN_FLAG_TCP ? server->tcp_port : server->udp_port; + struct sockaddr_in *sin; + struct sockaddr_in6 *sin6; + + switch (server->addr.family) { + case AF_INET: + sin = (struct sockaddr_in *)(void *)sa; + if (*salen < (ares_socklen_t)sizeof(*sin)) { + return ARES_EFORMERR; + } + *salen = sizeof(*sin); + memset(sin, 0, sizeof(*sin)); + sin->sin_family = AF_INET; + sin->sin_port = htons(port); + memcpy(&sin->sin_addr, &server->addr.addr.addr4, sizeof(sin->sin_addr)); + return ARES_SUCCESS; + case AF_INET6: + sin6 = (struct sockaddr_in6 *)(void *)sa; + if (*salen < (ares_socklen_t)sizeof(*sin6)) { + return ARES_EFORMERR; + } + *salen = sizeof(*sin6); + memset(sin6, 0, sizeof(*sin6)); + sin6->sin6_family = AF_INET6; + sin6->sin6_port = htons(port); + memcpy(&sin6->sin6_addr, &server->addr.addr.addr6, + sizeof(sin6->sin6_addr)); +#ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID + sin6->sin6_scope_id = server->ll_scope; +#endif + return ARES_SUCCESS; + default: + break; + } + + return ARES_EBADFAMILY; +} + +static ares_status_t ares_conn_set_self_ip(ares_conn_t *conn, ares_bool_t early) +{ + ares_channel_t *channel = conn->server->channel; + struct sockaddr_storage sa_storage; + int rv; + ares_socklen_t len = sizeof(sa_storage); + + /* We call this twice on TFO, if we already have the IP we can go ahead and + * skip processing */ + if (!early && conn->self_ip.family != AF_UNSPEC) { + return ARES_SUCCESS; + } + + memset(&sa_storage, 0, sizeof(sa_storage)); + + if (channel->sock_funcs.agetsockname == NULL) { + /* Not specified, we can still use cookies cooked with an empty self_ip */ + memset(&conn->self_ip, 0, sizeof(conn->self_ip)); + return ARES_SUCCESS; + } + rv = channel->sock_funcs.agetsockname(conn->fd, + (struct sockaddr *)(void *)&sa_storage, + &len, channel->sock_func_cb_data); + if (rv != 0) { + /* During TCP FastOpen, we can't get the IP this early since connect() + * may not be called. That's ok, we'll try again later */ + if (early && conn->flags & ARES_CONN_FLAG_TCP && + conn->flags & ARES_CONN_FLAG_TFO) { + memset(&conn->self_ip, 0, sizeof(conn->self_ip)); + return ARES_SUCCESS; + } + return ARES_ECONNREFUSED; + } + + if (!ares_sockaddr_to_ares_addr(&conn->self_ip, NULL, + (struct sockaddr *)(void *)&sa_storage)) { + return ARES_ECONNREFUSED; + } + + return ARES_SUCCESS; +} + +ares_conn_err_t ares_conn_write(ares_conn_t *conn, const void *data, size_t len, + size_t *written) +{ + ares_channel_t *channel = conn->server->channel; + ares_bool_t is_tfo = ARES_FALSE; + ares_conn_err_t err = ARES_CONN_ERR_SUCCESS; + struct sockaddr_storage sa_storage; + ares_socklen_t salen = 0; + struct sockaddr *sa = NULL; + + *written = 0; + + /* Don't try to write if not doing initial TFO and not connected */ + if (conn->flags & ARES_CONN_FLAG_TCP && + !(conn->state_flags & ARES_CONN_STATE_CONNECTED) && + !(conn->flags & ARES_CONN_FLAG_TFO_INITIAL)) { + return ARES_CONN_ERR_WOULDBLOCK; + } + + /* On initial write during TFO we need to send an address */ + if (conn->flags & ARES_CONN_FLAG_TFO_INITIAL) { + salen = sizeof(sa_storage); + sa = (struct sockaddr *)&sa_storage; + + conn->flags &= ~((unsigned int)ARES_CONN_FLAG_TFO_INITIAL); + is_tfo = ARES_TRUE; + + if (ares_conn_set_sockaddr(conn, sa, &salen) != ARES_SUCCESS) { + return ARES_CONN_ERR_FAILURE; + } + } + + err = ares_socket_write(channel, conn->fd, data, len, written, sa, salen); + if (err != ARES_CONN_ERR_SUCCESS) { + goto done; + } + + if (is_tfo) { + /* If using TFO, we might not have been able to get an IP earlier, since + * we hadn't informed the OS of the destination. When using sendto() + * now we have so we should be able to fetch it */ + ares_conn_set_self_ip(conn, ARES_FALSE); + goto done; + } + +done: + if (err == ARES_CONN_ERR_SUCCESS && len == *written) { + /* Wrote all data, make sure we're not listening for write events unless + * using TFO, in which case we'll need a write event to know when + * we're connected. */ + ares_conn_sock_state_cb_update( + conn, ARES_CONN_STATE_READ | + (is_tfo ? ARES_CONN_STATE_WRITE : ARES_CONN_STATE_NONE)); + } else if (err == ARES_CONN_ERR_WOULDBLOCK) { + /* Need to wait on more buffer space to write */ + ares_conn_sock_state_cb_update(conn, ARES_CONN_STATE_READ | + ARES_CONN_STATE_WRITE); + } + + return err; +} + +ares_status_t ares_conn_flush(ares_conn_t *conn) +{ + const unsigned char *data; + size_t data_len; + size_t count; + ares_conn_err_t err; + ares_status_t status; + ares_bool_t tfo = ARES_FALSE; + + if (conn == NULL) { + return ARES_EFORMERR; + } + + if (conn->flags & ARES_CONN_FLAG_TFO_INITIAL) { + tfo = ARES_TRUE; + } + + do { + if (ares_buf_len(conn->out_buf) == 0) { + status = ARES_SUCCESS; + goto done; + } + + if (conn->flags & ARES_CONN_FLAG_TCP) { + data = ares_buf_peek(conn->out_buf, &data_len); + } else { + unsigned short msg_len; + + /* Read length, then provide buffer without length */ + ares_buf_tag(conn->out_buf); + status = ares_buf_fetch_be16(conn->out_buf, &msg_len); + if (status != ARES_SUCCESS) { + return status; + } + ares_buf_tag_rollback(conn->out_buf); + + data = ares_buf_peek(conn->out_buf, &data_len); + if (data_len < (size_t)(msg_len + 2)) { + status = ARES_EFORMERR; + goto done; + } + data += 2; + data_len = msg_len; + } + + err = ares_conn_write(conn, data, data_len, &count); + if (err != ARES_CONN_ERR_SUCCESS) { + if (err != ARES_CONN_ERR_WOULDBLOCK) { + status = ARES_ECONNREFUSED; + goto done; + } + status = ARES_SUCCESS; + goto done; + } + + /* UDP didn't send the length prefix so augment that here */ + if (!(conn->flags & ARES_CONN_FLAG_TCP)) { + count += 2; + } + + /* Strip data written from the buffer */ + ares_buf_consume(conn->out_buf, count); + status = ARES_SUCCESS; + + /* Loop only for UDP since we have to send per-packet. We already + * sent everything we could if using tcp */ + } while (!(conn->flags & ARES_CONN_FLAG_TCP)); + +done: + if (status == ARES_SUCCESS) { + ares_conn_state_flags_t flags = ARES_CONN_STATE_READ; + + /* When using TFO, the we need to enabling waiting on a write event to + * be notified of when a connection is actually established */ + if (tfo) { + flags |= ARES_CONN_STATE_WRITE; + } + + /* If using TCP and not all data was written (partial write), that means + * we need to also wait on a write event */ + if (conn->flags & ARES_CONN_FLAG_TCP && ares_buf_len(conn->out_buf)) { + flags |= ARES_CONN_STATE_WRITE; + } + + ares_conn_sock_state_cb_update(conn, flags); + } + + return status; +} + +static ares_status_t ares_conn_connect(ares_conn_t *conn, + const struct sockaddr *sa, + ares_socklen_t salen) +{ + ares_conn_err_t err; + + err = ares_socket_connect( + conn->server->channel, conn->fd, + (conn->flags & ARES_CONN_FLAG_TFO) ? ARES_TRUE : ARES_FALSE, sa, salen); + + if (err != ARES_CONN_ERR_WOULDBLOCK && err != ARES_CONN_ERR_SUCCESS) { + return ARES_ECONNREFUSED; + } + return ARES_SUCCESS; +} + +ares_status_t ares_open_connection(ares_conn_t **conn_out, + ares_channel_t *channel, + ares_server_t *server, ares_bool_t is_tcp) +{ + ares_status_t status; + struct sockaddr_storage sa_storage; + ares_socklen_t salen = sizeof(sa_storage); + struct sockaddr *sa = (struct sockaddr *)&sa_storage; + ares_conn_t *conn; + ares_llist_node_t *node = NULL; + int stype = is_tcp ? SOCK_STREAM : SOCK_DGRAM; + ares_conn_state_flags_t state_flags; + + *conn_out = NULL; + + conn = ares_malloc(sizeof(*conn)); + if (conn == NULL) { + return ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ + } + + memset(conn, 0, sizeof(*conn)); + conn->fd = ARES_SOCKET_BAD; + conn->server = server; + conn->queries_to_conn = ares_llist_create(NULL); + conn->flags = is_tcp ? ARES_CONN_FLAG_TCP : ARES_CONN_FLAG_NONE; + conn->out_buf = ares_buf_create(); + conn->in_buf = ares_buf_create(); + + if (conn->queries_to_conn == NULL || conn->out_buf == NULL || + conn->in_buf == NULL) { + /* LCOV_EXCL_START: OutOfMemory */ + status = ARES_ENOMEM; + goto done; + /* LCOV_EXCL_STOP */ + } + + /* Try to enable TFO always if using TCP. it will fail later on if its + * really not supported when we try to enable it on the socket. */ + if (conn->flags & ARES_CONN_FLAG_TCP) { + conn->flags |= ARES_CONN_FLAG_TFO; + } + + /* Convert into the struct sockaddr structure needed by the OS */ + status = ares_conn_set_sockaddr(conn, sa, &salen); + if (status != ARES_SUCCESS) { + goto done; + } + + /* Acquire a socket. */ + if (ares_socket_open(&conn->fd, channel, server->addr.family, stype, 0) != + ARES_CONN_ERR_SUCCESS) { + status = ARES_ECONNREFUSED; + goto done; + } + + /* Configure channel configured options */ + status = ares_socket_configure( + channel, server->addr.family, + (conn->flags & ARES_CONN_FLAG_TCP) ? ARES_TRUE : ARES_FALSE, conn->fd); + if (status != ARES_SUCCESS) { + goto done; + } + + /* Enable TFO if possible */ + if (conn->flags & ARES_CONN_FLAG_TFO && + ares_socket_enable_tfo(channel, conn->fd) != ARES_CONN_ERR_SUCCESS) { + conn->flags &= ~((unsigned int)ARES_CONN_FLAG_TFO); + } + + if (channel->sock_config_cb) { + int err = + channel->sock_config_cb(conn->fd, stype, channel->sock_config_cb_data); + if (err < 0) { + status = ARES_ECONNREFUSED; + goto done; + } + } + + /* Connect */ + status = ares_conn_connect(conn, sa, salen); + if (status != ARES_SUCCESS) { + goto done; + } + + if (channel->sock_create_cb) { + int err = + channel->sock_create_cb(conn->fd, stype, channel->sock_create_cb_data); + if (err < 0) { + status = ARES_ECONNREFUSED; + goto done; + } + } + + /* Let the connection know we haven't written our first packet yet for TFO */ + if (conn->flags & ARES_CONN_FLAG_TFO) { + conn->flags |= ARES_CONN_FLAG_TFO_INITIAL; + } + + /* Need to store our own ip for DNS cookie support */ + status = ares_conn_set_self_ip(conn, ARES_TRUE); + if (status != ARES_SUCCESS) { + goto done; /* LCOV_EXCL_LINE: UntestablePath */ + } + + /* TCP connections are thrown to the end as we don't spawn multiple TCP + * connections. UDP connections are put on front where the newest connection + * can be quickly pulled */ + if (is_tcp) { + node = ares_llist_insert_last(server->connections, conn); + } else { + node = ares_llist_insert_first(server->connections, conn); + } + if (node == NULL) { + /* LCOV_EXCL_START: OutOfMemory */ + status = ARES_ENOMEM; + goto done; + /* LCOV_EXCL_STOP */ + } + + /* Register globally to quickly map event on file descriptor to connection + * node object */ + if (!ares_htable_asvp_insert(channel->connnode_by_socket, conn->fd, node)) { + /* LCOV_EXCL_START: OutOfMemory */ + status = ARES_ENOMEM; + goto done; + /* LCOV_EXCL_STOP */ + } + + state_flags = ARES_CONN_STATE_READ; + + /* Get notified on connect if using TCP */ + if (conn->flags & ARES_CONN_FLAG_TCP) { + state_flags |= ARES_CONN_STATE_WRITE; + } + + /* Dot no attempt to update sock state callbacks on TFO until *after* the + * initial write is performed. Due to the notification event, its possible + * an erroneous read can come in before the attempt to write the data which + * might be used to set the ip address */ + if (!(conn->flags & ARES_CONN_FLAG_TFO_INITIAL)) { + ares_conn_sock_state_cb_update(conn, state_flags); + } + + if (is_tcp) { + server->tcp_conn = conn; + } + +done: + if (status != ARES_SUCCESS) { + ares_llist_node_claim(node); + ares_llist_destroy(conn->queries_to_conn); + ares_socket_close(channel, conn->fd); + ares_buf_destroy(conn->out_buf); + ares_buf_destroy(conn->in_buf); + ares_free(conn); + } else { + *conn_out = conn; + } + return status; +} + +ares_conn_t *ares_conn_from_fd(const ares_channel_t *channel, ares_socket_t fd) +{ + ares_llist_node_t *node; + + node = ares_htable_asvp_get_direct(channel->connnode_by_socket, fd); + if (node == NULL) { + return NULL; + } + + return ares_llist_node_val(node); +} diff --git a/deps/cares/src/lib/ares_conn.h b/deps/cares/src/lib/ares_conn.h new file mode 100644 index 00000000000000..16ecefdd19fa67 --- /dev/null +++ b/deps/cares/src/lib/ares_conn.h @@ -0,0 +1,196 @@ +/* MIT License + * + * Copyright (c) 2024 Brad House + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * SPDX-License-Identifier: MIT + */ +#ifndef __ARES_CONN_H +#define __ARES_CONN_H + +#include "ares_socket.h" + +struct ares_conn; +typedef struct ares_conn ares_conn_t; + +struct ares_server; +typedef struct ares_server ares_server_t; + +typedef enum { + /*! No flags */ + ARES_CONN_FLAG_NONE = 0, + /*! TCP connection, not UDP */ + ARES_CONN_FLAG_TCP = 1 << 0, + /*! TCP Fast Open is enabled and being used if supported by the OS */ + ARES_CONN_FLAG_TFO = 1 << 1, + /*! TCP Fast Open has not yet sent its first packet. Gets unset on first + * write to a connection */ + ARES_CONN_FLAG_TFO_INITIAL = 1 << 2 +} ares_conn_flags_t; + +typedef enum { + ARES_CONN_STATE_NONE = 0, + ARES_CONN_STATE_READ = 1 << 0, + ARES_CONN_STATE_WRITE = 1 << 1, + ARES_CONN_STATE_CONNECTED = 1 << 2, /* This doesn't get a callback */ + ARES_CONN_STATE_CBFLAGS = ARES_CONN_STATE_READ | ARES_CONN_STATE_WRITE +} ares_conn_state_flags_t; + +struct ares_conn { + ares_server_t *server; + ares_socket_t fd; + struct ares_addr self_ip; + ares_conn_flags_t flags; + ares_conn_state_flags_t state_flags; + + /*! Outbound buffered data that is not yet sent. Exists as one contiguous + * stream in TCP format (big endian 16bit length prefix followed by DNS + * wire-format message). For TCP this can be sent as-is, UDP this must + * be sent per-packet (stripping the length prefix) */ + ares_buf_t *out_buf; + + /*! Inbound buffered data that is not yet parsed. Exists as one contiguous + * stream in TCP format (big endian 16bit length prefix followed by DNS + * wire-format message). TCP may have partial data and this needs to be + * handled gracefully, but UDP will always have a full message */ + ares_buf_t *in_buf; + + /* total number of queries run on this connection since it was established */ + size_t total_queries; + + /* list of outstanding queries to this connection */ + ares_llist_t *queries_to_conn; +}; + +/*! Various buckets for grouping history */ +typedef enum { + ARES_METRIC_1MINUTE = 0, /*!< Bucket for tracking over the last minute */ + ARES_METRIC_15MINUTES, /*!< Bucket for tracking over the last 15 minutes */ + ARES_METRIC_1HOUR, /*!< Bucket for tracking over the last hour */ + ARES_METRIC_1DAY, /*!< Bucket for tracking over the last day */ + ARES_METRIC_INCEPTION, /*!< Bucket for tracking since inception */ + ARES_METRIC_COUNT /*!< Count of buckets, not a real bucket */ +} ares_server_bucket_t; + +/*! Data metrics collected for each bucket */ +typedef struct { + time_t ts; /*!< Timestamp divided by bucket divisor */ + unsigned int latency_min_ms; /*!< Minimum latency for queries */ + unsigned int latency_max_ms; /*!< Maximum latency for queries */ + ares_uint64_t total_ms; /*!< Cumulative query time for bucket */ + ares_uint64_t total_count; /*!< Number of queries for bucket */ + + time_t prev_ts; /*!< Previous period bucket timestamp */ + ares_uint64_t + prev_total_ms; /*!< Previous period bucket cumulative query time */ + ares_uint64_t prev_total_count; /*!< Previous period bucket query count */ +} ares_server_metrics_t; + +typedef enum { + ARES_COOKIE_INITIAL = 0, + ARES_COOKIE_GENERATED = 1, + ARES_COOKIE_SUPPORTED = 2, + ARES_COOKIE_UNSUPPORTED = 3 +} ares_cookie_state_t; + +/*! Structure holding tracking data for RFC 7873/9018 DNS cookies. + * Implementation plan for this feature is here: + * https://github.com/c-ares/c-ares/issues/620 + */ +typedef struct { + /*! starts at INITIAL, transitions as needed. */ + ares_cookie_state_t state; + /*! randomly-generate client cookie */ + unsigned char client[8]; + /*! timestamp client cookie was generated, used for rotation purposes */ + ares_timeval_t client_ts; + /*! IP address last used for client to connect to server. If this changes + * The client cookie gets invalidated */ + struct ares_addr client_ip; + /*! Server Cookie last received, 8-32 bytes in length */ + unsigned char server[32]; + /*! Length of server cookie on file. */ + size_t server_len; + /*! Timestamp of last attempt to use cookies, but it was determined that the + * server didn't support them */ + ares_timeval_t unsupported_ts; +} ares_cookie_t; + +struct ares_server { + /* Configuration */ + size_t idx; /* index for server in system configuration */ + struct ares_addr addr; + unsigned short udp_port; /* host byte order */ + unsigned short tcp_port; /* host byte order */ + char ll_iface[64]; /* IPv6 Link Local Interface */ + unsigned int ll_scope; /* IPv6 Link Local Scope */ + + size_t consec_failures; /* Consecutive query failure count + * can be hard errors or timeouts + */ + ares_bool_t probe_pending; /* Whether a probe is pending for this + * server due to prior failures */ + ares_llist_t *connections; + ares_conn_t *tcp_conn; + + /* The next time when we will retry this server if it has hit failures */ + ares_timeval_t next_retry_time; + + /*! Buckets for collecting metrics about the server */ + ares_server_metrics_t metrics[ARES_METRIC_COUNT]; + + /*! RFC 7873/9018 DNS Cookies */ + ares_cookie_t cookie; + + /* Link back to owning channel */ + ares_channel_t *channel; +}; + +void ares_close_connection(ares_conn_t *conn, ares_status_t requeue_status); +void ares_close_sockets(ares_server_t *server); +void ares_check_cleanup_conns(const ares_channel_t *channel); + +void ares_destroy_servers_state(ares_channel_t *channel); +ares_status_t ares_open_connection(ares_conn_t **conn_out, + ares_channel_t *channel, + ares_server_t *server, ares_bool_t is_tcp); + +ares_conn_err_t ares_conn_write(ares_conn_t *conn, const void *data, size_t len, + size_t *written); +ares_status_t ares_conn_flush(ares_conn_t *conn); +ares_conn_err_t ares_conn_read(ares_conn_t *conn, void *data, size_t len, + size_t *read_bytes); +ares_conn_t *ares_conn_from_fd(const ares_channel_t *channel, ares_socket_t fd); +void ares_conn_sock_state_cb_update(ares_conn_t *conn, + ares_conn_state_flags_t flags); +ares_conn_err_t ares_socket_recv(ares_channel_t *channel, ares_socket_t s, + ares_bool_t is_tcp, void *data, + size_t data_len, size_t *read_bytes); +ares_conn_err_t ares_socket_recvfrom(ares_channel_t *channel, ares_socket_t s, + ares_bool_t is_tcp, void *data, + size_t data_len, int flags, + struct sockaddr *from, + ares_socklen_t *from_len, + size_t *read_bytes); + +void ares_destroy_server(ares_server_t *server); + +#endif diff --git a/deps/cares/src/lib/ares_cookie.c b/deps/cares/src/lib/ares_cookie.c index bf9d1ba25da41d..f31c74e748d974 100644 --- a/deps/cares/src/lib/ares_cookie.c +++ b/deps/cares/src/lib/ares_cookie.c @@ -229,7 +229,7 @@ static ares_bool_t timeval_expired(const ares_timeval_t *tv, { ares_int64_t tvdiff_ms; ares_timeval_t tvdiff; - ares__timeval_diff(&tvdiff, tv, now); + ares_timeval_diff(&tvdiff, tv, now); tvdiff_ms = tvdiff.sec * 1000 + tvdiff.usec / 1000; if (tvdiff_ms >= (ares_int64_t)millsecs) { @@ -249,7 +249,7 @@ static void ares_cookie_generate(ares_cookie_t *cookie, ares_conn_t *conn, { ares_channel_t *channel = conn->server->channel; - ares__rand_bytes(channel->rand_state, cookie->client, sizeof(cookie->client)); + ares_rand_bytes(channel->rand_state, cookie->client, sizeof(cookie->client)); memcpy(&cookie->client_ts, now, sizeof(cookie->client_ts)); memcpy(&cookie->client_ip, &conn->self_ip, sizeof(cookie->client_ip)); } @@ -426,9 +426,8 @@ ares_status_t ares_cookie_validate(ares_query_t *query, /* Resend the request, hopefully it will work the next time as we should * have recorded a server cookie */ - ares__requeue_query(query, now, ARES_SUCCESS, - ARES_FALSE /* Don't increment try count */, - NULL); + ares_requeue_query(query, now, ARES_SUCCESS, + ARES_FALSE /* Don't increment try count */, NULL); /* Parent needs to drop this response */ return ARES_EBADRESP; diff --git a/deps/cares/src/lib/ares_destroy.c b/deps/cares/src/lib/ares_destroy.c index d75b5e227cc28d..1e5706e0e06b80 100644 --- a/deps/cares/src/lib/ares_destroy.c +++ b/deps/cares/src/lib/ares_destroy.c @@ -31,17 +31,17 @@ void ares_destroy(ares_channel_t *channel) { - size_t i; - ares__llist_node_t *node = NULL; + size_t i; + ares_llist_node_t *node = NULL; if (channel == NULL) { return; } /* Mark as being shutdown */ - ares__channel_lock(channel); + ares_channel_lock(channel); channel->sys_up = ARES_FALSE; - ares__channel_unlock(channel); + ares_channel_unlock(channel); /* Disable configuration change monitoring. We can't hold a lock because * some cleanup routines, such as on Windows, are synchronous operations. @@ -61,23 +61,23 @@ void ares_destroy(ares_channel_t *channel) * holding a lock as the thread may take locks. */ if (channel->reinit_thread != NULL) { void *rv; - ares__thread_join(channel->reinit_thread, &rv); + ares_thread_join(channel->reinit_thread, &rv); channel->reinit_thread = NULL; } /* Lock because callbacks will be triggered, and any system-generated * callbacks need to hold a channel lock. */ - ares__channel_lock(channel); + ares_channel_lock(channel); /* Destroy all queries */ - node = ares__llist_node_first(channel->all_queries); + node = ares_llist_node_first(channel->all_queries); while (node != NULL) { - ares__llist_node_t *next = ares__llist_node_next(node); - ares_query_t *query = ares__llist_node_claim(node); + ares_llist_node_t *next = ares_llist_node_next(node); + ares_query_t *query = ares_llist_node_claim(node); query->node_all_queries = NULL; query->callback(query->arg, ARES_EDESTRUCTION, 0, NULL); - ares__free_query(query); + ares_free_query(query); node = next; } @@ -88,19 +88,19 @@ void ares_destroy(ares_channel_t *channel) /* Freeing the query should remove it from all the lists in which it sits, * so all query lists should be empty now. */ - assert(ares__llist_len(channel->all_queries) == 0); - assert(ares__htable_szvp_num_keys(channel->queries_by_qid) == 0); - assert(ares__slist_len(channel->queries_by_timeout) == 0); + assert(ares_llist_len(channel->all_queries) == 0); + assert(ares_htable_szvp_num_keys(channel->queries_by_qid) == 0); + assert(ares_slist_len(channel->queries_by_timeout) == 0); #endif - ares__destroy_servers_state(channel); + ares_destroy_servers_state(channel); #ifndef NDEBUG - assert(ares__htable_asvp_num_keys(channel->connnode_by_socket) == 0); + assert(ares_htable_asvp_num_keys(channel->connnode_by_socket) == 0); #endif /* No more callbacks will be triggered after this point, unlock */ - ares__channel_unlock(channel); + ares_channel_unlock(channel); /* Shut down the event thread */ if (channel->optmask & ARES_OPT_EVENT_THREAD) { @@ -114,48 +114,46 @@ void ares_destroy(ares_channel_t *channel) ares_free(channel->domains); } - ares__llist_destroy(channel->all_queries); - ares__slist_destroy(channel->queries_by_timeout); - ares__htable_szvp_destroy(channel->queries_by_qid); - ares__htable_asvp_destroy(channel->connnode_by_socket); + ares_llist_destroy(channel->all_queries); + ares_slist_destroy(channel->queries_by_timeout); + ares_htable_szvp_destroy(channel->queries_by_qid); + ares_htable_asvp_destroy(channel->connnode_by_socket); ares_free(channel->sortlist); ares_free(channel->lookups); ares_free(channel->resolvconf_path); ares_free(channel->hosts_path); - ares__destroy_rand_state(channel->rand_state); + ares_destroy_rand_state(channel->rand_state); - ares__hosts_file_destroy(channel->hf); + ares_hosts_file_destroy(channel->hf); - ares__qcache_destroy(channel->qcache); + ares_qcache_destroy(channel->qcache); - ares__channel_threading_destroy(channel); + ares_channel_threading_destroy(channel); ares_free(channel); } -void ares__destroy_server(ares_server_t *server) +void ares_destroy_server(ares_server_t *server) { if (server == NULL) { return; /* LCOV_EXCL_LINE: DefensiveCoding */ } - ares__close_sockets(server); - ares__llist_destroy(server->connections); - ares__buf_destroy(server->tcp_parser); - ares__buf_destroy(server->tcp_send); + ares_close_sockets(server); + ares_llist_destroy(server->connections); ares_free(server); } -void ares__destroy_servers_state(ares_channel_t *channel) +void ares_destroy_servers_state(ares_channel_t *channel) { - ares__slist_node_t *node; + ares_slist_node_t *node; - while ((node = ares__slist_node_first(channel->servers)) != NULL) { - ares_server_t *server = ares__slist_node_claim(node); - ares__destroy_server(server); + while ((node = ares_slist_node_first(channel->servers)) != NULL) { + ares_server_t *server = ares_slist_node_claim(node); + ares_destroy_server(server); } - ares__slist_destroy(channel->servers); + ares_slist_destroy(channel->servers); channel->servers = NULL; } diff --git a/deps/cares/src/lib/ares_freeaddrinfo.c b/deps/cares/src/lib/ares_freeaddrinfo.c index 2a49f57531e9bb..c996df9104a18a 100644 --- a/deps/cares/src/lib/ares_freeaddrinfo.c +++ b/deps/cares/src/lib/ares_freeaddrinfo.c @@ -31,7 +31,7 @@ # include #endif -void ares__freeaddrinfo_cnames(struct ares_addrinfo_cname *head) +void ares_freeaddrinfo_cnames(struct ares_addrinfo_cname *head) { struct ares_addrinfo_cname *current; while (head) { @@ -43,7 +43,7 @@ void ares__freeaddrinfo_cnames(struct ares_addrinfo_cname *head) } } -void ares__freeaddrinfo_nodes(struct ares_addrinfo_node *head) +void ares_freeaddrinfo_nodes(struct ares_addrinfo_node *head) { struct ares_addrinfo_node *current; while (head) { @@ -59,8 +59,8 @@ void ares_freeaddrinfo(struct ares_addrinfo *ai) if (ai == NULL) { return; } - ares__freeaddrinfo_cnames(ai->cnames); - ares__freeaddrinfo_nodes(ai->nodes); + ares_freeaddrinfo_cnames(ai->cnames); + ares_freeaddrinfo_nodes(ai->nodes); ares_free(ai->name); ares_free(ai); diff --git a/deps/cares/src/lib/ares_getaddrinfo.c b/deps/cares/src/lib/ares_getaddrinfo.c index 713acf744a0dca..09d34d337834af 100644 --- a/deps/cares/src/lib/ares_getaddrinfo.c +++ b/deps/cares/src/lib/ares_getaddrinfo.c @@ -58,10 +58,6 @@ #include "ares_dns.h" -#ifdef _WIN32 -# include "ares_platform.h" -#endif - struct host_query { ares_channel_t *channel; char *name; @@ -101,7 +97,7 @@ static const struct ares_addrinfo_hints default_hints = { static ares_bool_t next_dns_lookup(struct host_query *hquery); struct ares_addrinfo_cname * - ares__append_addrinfo_cname(struct ares_addrinfo_cname **head) + ares_append_addrinfo_cname(struct ares_addrinfo_cname **head) { struct ares_addrinfo_cname *tail = ares_malloc_zero(sizeof(*tail)); struct ares_addrinfo_cname *last = *head; @@ -123,8 +119,8 @@ struct ares_addrinfo_cname * return tail; } -void ares__addrinfo_cat_cnames(struct ares_addrinfo_cname **head, - struct ares_addrinfo_cname *tail) +void ares_addrinfo_cat_cnames(struct ares_addrinfo_cname **head, + struct ares_addrinfo_cname *tail) { struct ares_addrinfo_cname *last = *head; if (!last) { @@ -141,7 +137,7 @@ void ares__addrinfo_cat_cnames(struct ares_addrinfo_cname **head, /* Allocate new addrinfo and append to the tail. */ struct ares_addrinfo_node * - ares__append_addrinfo_node(struct ares_addrinfo_node **head) + ares_append_addrinfo_node(struct ares_addrinfo_node **head) { struct ares_addrinfo_node *tail = ares_malloc_zero(sizeof(*tail)); struct ares_addrinfo_node *last = *head; @@ -163,8 +159,8 @@ struct ares_addrinfo_node * return tail; } -void ares__addrinfo_cat_nodes(struct ares_addrinfo_node **head, - struct ares_addrinfo_node *tail) +void ares_addrinfo_cat_nodes(struct ares_addrinfo_node **head, + struct ares_addrinfo_node *tail) { struct ares_addrinfo_node *last = *head; if (!last) { @@ -252,7 +248,7 @@ static ares_bool_t fake_addrinfo(const char *name, unsigned short port, ares_bool_t valid = ARES_TRUE; const char *p; for (p = name; *p; p++) { - if (!ares__isdigit(*p) && *p != '.') { + if (!ares_isdigit(*p) && *p != '.') { valid = ARES_FALSE; break; } else if (*p == '.') { @@ -297,7 +293,7 @@ static ares_bool_t fake_addrinfo(const char *name, unsigned short port, } if (hints->ai_flags & ARES_AI_CANONNAME) { - cname = ares__append_addrinfo_cname(&ai->cnames); + cname = ares_append_addrinfo_cname(&ai->cnames); if (!cname) { /* LCOV_EXCL_START: OutOfMemory */ ares_freeaddrinfo(ai); @@ -327,7 +323,7 @@ static void hquery_free(struct host_query *hquery, ares_bool_t cleanup_ai) if (cleanup_ai) { ares_freeaddrinfo(hquery->ai); } - ares__strsplit_free(hquery->names, hquery->names_cnt); + ares_strsplit_free(hquery->names, hquery->names_cnt); ares_free(hquery->name); ares_free(hquery->lookups); ares_free(hquery); @@ -341,7 +337,7 @@ static void end_hquery(struct host_query *hquery, ares_status_t status) if (status == ARES_SUCCESS) { if (!(hquery->hints.ai_flags & ARES_AI_NOSORT) && hquery->ai->nodes) { sentinel.ai_next = hquery->ai->nodes; - ares__sortaddrinfo(hquery->channel, &sentinel); + ares_sortaddrinfo(hquery->channel, &sentinel); hquery->ai->nodes = sentinel.ai_next; } next = hquery->ai->nodes; @@ -361,7 +357,7 @@ static void end_hquery(struct host_query *hquery, ares_status_t status) hquery_free(hquery, ARES_FALSE); } -ares_bool_t ares__is_localhost(const char *name) +ares_bool_t ares_is_localhost(const char *name) { /* RFC6761 6.3 says : The domain "localhost." and any names falling within * ".localhost." */ @@ -371,7 +367,7 @@ ares_bool_t ares__is_localhost(const char *name) return ARES_FALSE; /* LCOV_EXCL_LINE: DefensiveCoding */ } - if (strcmp(name, "localhost") == 0) { + if (ares_strcaseeq(name, "localhost")) { return ARES_TRUE; } @@ -380,7 +376,8 @@ ares_bool_t ares__is_localhost(const char *name) return ARES_FALSE; } - if (strcmp(name + (len - 10 /* strlen(".localhost") */), ".localhost") == 0) { + if (ares_strcaseeq(name + (len - 10 /* strlen(".localhost") */), + ".localhost")) { return ARES_TRUE; } @@ -393,11 +390,11 @@ static ares_status_t file_lookup(struct host_query *hquery) ares_status_t status; /* Per RFC 7686, reject queries for ".onion" domain names with NXDOMAIN. */ - if (ares__is_onion_domain(hquery->name)) { + if (ares_is_onion_domain(hquery->name)) { return ARES_ENOTFOUND; } - status = ares__hosts_search_host( + status = ares_hosts_search_host( hquery->channel, (hquery->hints.ai_flags & ARES_AI_ENVHOSTS) ? ARES_TRUE : ARES_FALSE, hquery->name, &entry); @@ -406,7 +403,7 @@ static ares_status_t file_lookup(struct host_query *hquery) goto done; } - status = ares__hosts_entry_to_addrinfo( + status = ares_hosts_entry_to_addrinfo( entry, hquery->name, hquery->hints.ai_family, hquery->port, (hquery->hints.ai_flags & ARES_AI_CANONNAME) ? ARES_TRUE : ARES_FALSE, hquery->ai); @@ -423,9 +420,9 @@ static ares_status_t file_lookup(struct host_query *hquery) * We will also ignore ALL errors when trying to resolve localhost, such * as permissions errors reading /etc/hosts or a malformed /etc/hosts */ if (status != ARES_SUCCESS && status != ARES_ENOMEM && - ares__is_localhost(hquery->name)) { - return ares__addrinfo_localhost(hquery->name, hquery->port, &hquery->hints, - hquery->ai); + ares_is_localhost(hquery->name)) { + return ares_addrinfo_localhost(hquery->name, hquery->port, &hquery->hints, + hquery->ai); } return status; @@ -439,7 +436,7 @@ static void next_lookup(struct host_query *hquery, ares_status_t status) * queries for localhost names to their configured caching DNS * server(s)." * Otherwise, DNS lookup. */ - if (!ares__is_localhost(hquery->name) && next_dns_lookup(hquery)) { + if (!ares_is_localhost(hquery->name) && next_dns_lookup(hquery)) { break; } @@ -476,7 +473,7 @@ static void terminate_retries(const struct host_query *hquery, return; } - query = ares__htable_szvp_get_direct(channel->queries_by_qid, term_qid); + query = ares_htable_szvp_get_direct(channel->queries_by_qid, term_qid); if (query == NULL) { return; } @@ -497,7 +494,7 @@ static void host_callback(void *arg, ares_status_t status, size_t timeouts, addinfostatus = ARES_EBADRESP; /* LCOV_EXCL_LINE: DefensiveCoding */ } else { addinfostatus = - ares__parse_into_addrinfo(dnsrec, ARES_TRUE, hquery->port, hquery->ai); + ares_parse_into_addrinfo(dnsrec, ARES_TRUE, hquery->port, hquery->ai); } if (addinfostatus == ARES_SUCCESS) { terminate_retries(hquery, ares_dns_record_get_id(dnsrec)); @@ -528,10 +525,9 @@ static void host_callback(void *arg, ares_status_t status, size_t timeouts, hquery->nodata_cnt++; } next_lookup(hquery, hquery->nodata_cnt ? ARES_ENODATA : status); - } else if ( - (status == ARES_ESERVFAIL || status == ARES_EREFUSED) && - ares__name_label_cnt(hquery->names[hquery->next_name_idx-1]) == 1 - ) { + } else if ((status == ARES_ESERVFAIL || status == ARES_EREFUSED) && + ares_name_label_cnt(hquery->names[hquery->next_name_idx - 1]) == + 1) { /* Issue #852, systemd-resolved may return SERVFAIL or REFUSED on a * single label domain name. */ next_lookup(hquery, hquery->nodata_cnt ? ARES_ENODATA : status); @@ -567,7 +563,7 @@ static void ares_getaddrinfo_int(ares_channel_t *channel, const char *name, return; } - if (ares__is_onion_domain(name)) { + if (ares_is_onion_domain(name)) { callback(arg, ARES_ENOTFOUND, 0, NULL); return; } @@ -630,7 +626,7 @@ static void ares_getaddrinfo_int(ares_channel_t *channel, const char *name, } status = - ares__search_name_list(channel, name, &hquery->names, &hquery->names_cnt); + ares_search_name_list(channel, name, &hquery->names, &hquery->names_cnt); if (status != ARES_SUCCESS) { hquery_free(hquery, ARES_TRUE); callback(arg, (int)status, 0, NULL); @@ -659,9 +655,9 @@ void ares_getaddrinfo(ares_channel_t *channel, const char *name, if (channel == NULL) { return; } - ares__channel_lock(channel); + ares_channel_lock(channel); ares_getaddrinfo_int(channel, name, service, hints, callback, arg); - ares__channel_unlock(channel); + ares_channel_unlock(channel); } static ares_bool_t next_dns_lookup(struct host_query *hquery) diff --git a/deps/cares/src/lib/ares_gethostbyaddr.c b/deps/cares/src/lib/ares_gethostbyaddr.c index 1db81ec2b48b9d..a7acf3c45c9e6d 100644 --- a/deps/cares/src/lib/ares_gethostbyaddr.c +++ b/deps/cares/src/lib/ares_gethostbyaddr.c @@ -39,7 +39,6 @@ #include "ares_nameser.h" #include "ares_inet_net_pton.h" -#include "ares_platform.h" struct addr_query { /* Arguments passed to ares_gethostbyaddr() */ @@ -112,9 +111,9 @@ void ares_gethostbyaddr(ares_channel_t *channel, const void *addr, int addrlen, if (channel == NULL) { return; } - ares__channel_lock(channel); + ares_channel_lock(channel); ares_gethostbyaddr_nolock(channel, addr, addrlen, family, callback, arg); - ares__channel_unlock(channel); + ares_channel_unlock(channel); } static void next_lookup(struct addr_query *aquery) @@ -216,12 +215,12 @@ static ares_status_t file_lookup(ares_channel_t *channel, return ARES_ENOTFOUND; } - status = ares__hosts_search_ipaddr(channel, ARES_FALSE, ipaddr, &entry); + status = ares_hosts_search_ipaddr(channel, ARES_FALSE, ipaddr, &entry); if (status != ARES_SUCCESS) { return status; } - status = ares__hosts_entry_to_hostent(entry, addr->family, host); + status = ares_hosts_entry_to_hostent(entry, addr->family, host); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } diff --git a/deps/cares/src/lib/ares_gethostbyname.c b/deps/cares/src/lib/ares_gethostbyname.c index 6db86e0eed1c65..56de729526af34 100644 --- a/deps/cares/src/lib/ares_gethostbyname.c +++ b/deps/cares/src/lib/ares_gethostbyname.c @@ -44,7 +44,6 @@ #endif #include "ares_inet_net_pton.h" -#include "ares_platform.h" static void sort_addresses(const struct hostent *host, const struct apattern *sortlist, size_t nsort); @@ -68,7 +67,7 @@ static void ares_gethostbyname_callback(void *arg, int status, int timeouts, struct host_query *ghbn_arg = arg; if (status == ARES_SUCCESS) { - status = (int)ares__addrinfo2hostent(result, AF_UNSPEC, &hostent); + status = (int)ares_addrinfo2hostent(result, AF_UNSPEC, &hostent); } /* addrinfo2hostent will only return ENODATA if there are no addresses _and_ @@ -175,7 +174,7 @@ static size_t get_address_index(const struct in_addr *addr, continue; } - if (ares__subnet_match(&aaddr, &sortlist[i].addr, sortlist[i].mask)) { + if (ares_subnet_match(&aaddr, &sortlist[i].addr, sortlist[i].mask)) { break; } } @@ -231,15 +230,15 @@ static size_t get6_address_index(const struct ares_in6_addr *addr, continue; } - if (ares__subnet_match(&aaddr, &sortlist[i].addr, sortlist[i].mask)) { + if (ares_subnet_match(&aaddr, &sortlist[i].addr, sortlist[i].mask)) { break; } } return i; } -static ares_status_t ares__hostent_localhost(const char *name, int family, - struct hostent **host_out) +static ares_status_t ares_hostent_localhost(const char *name, int family, + struct hostent **host_out) { ares_status_t status; struct ares_addrinfo *ai = NULL; @@ -254,12 +253,12 @@ static ares_status_t ares__hostent_localhost(const char *name, int family, goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } - status = ares__addrinfo_localhost(name, 0, &hints, ai); + status = ares_addrinfo_localhost(name, 0, &hints, ai); if (status != ARES_SUCCESS) { goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } - status = ares__addrinfo2hostent(ai, family, host_out); + status = ares_addrinfo2hostent(ai, family, host_out); if (status != ARES_SUCCESS) { goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -289,16 +288,16 @@ static ares_status_t ares_gethostbyname_file_int(ares_channel_t *channel, } /* Per RFC 7686, reject queries for ".onion" domain names with NXDOMAIN. */ - if (ares__is_onion_domain(name)) { + if (ares_is_onion_domain(name)) { return ARES_ENOTFOUND; } - status = ares__hosts_search_host(channel, ARES_FALSE, name, &entry); + status = ares_hosts_search_host(channel, ARES_FALSE, name, &entry); if (status != ARES_SUCCESS) { goto done; } - status = ares__hosts_entry_to_hostent(entry, family, host); + status = ares_hosts_entry_to_hostent(entry, family, host); if (status != ARES_SUCCESS) { goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -310,8 +309,8 @@ static ares_status_t ares_gethostbyname_file_int(ares_channel_t *channel, * We will also ignore ALL errors when trying to resolve localhost, such * as permissions errors reading /etc/hosts or a malformed /etc/hosts */ if (status != ARES_SUCCESS && status != ARES_ENOMEM && - ares__is_localhost(name)) { - return ares__hostent_localhost(name, family, host); + ares_is_localhost(name)) { + return ares_hostent_localhost(name, family, host); } return status; @@ -325,8 +324,8 @@ int ares_gethostbyname_file(ares_channel_t *channel, const char *name, return ARES_ENOTFOUND; } - ares__channel_lock(channel); + ares_channel_lock(channel); status = ares_gethostbyname_file_int(channel, name, family, host); - ares__channel_unlock(channel); + ares_channel_unlock(channel); return (int)status; } diff --git a/deps/cares/src/lib/ares_getnameinfo.c b/deps/cares/src/lib/ares_getnameinfo.c index 622c1adb1c7342..01593545308cc4 100644 --- a/deps/cares/src/lib/ares_getnameinfo.c +++ b/deps/cares/src/lib/ares_getnameinfo.c @@ -193,9 +193,9 @@ void ares_getnameinfo(ares_channel_t *channel, const struct sockaddr *sa, return; } - ares__channel_lock(channel); + ares_channel_lock(channel); ares_getnameinfo_int(channel, sa, salen, flags_int, callback, arg); - ares__channel_unlock(channel); + ares_channel_unlock(channel); } static void nameinfo_callback(void *arg, int status, int timeouts, @@ -410,8 +410,8 @@ static char *ares_striendstr(const char *s1, const char *s2) c1 = c1_begin; c2 = s2; while (c2 < s2 + s2_len) { - lo1 = ares__tolower((unsigned char)*c1); - lo2 = ares__tolower((unsigned char)*c2); + lo1 = ares_tolower((unsigned char)*c1); + lo2 = ares_tolower((unsigned char)*c2); if (lo1 != lo2) { return NULL; } else { @@ -423,7 +423,7 @@ static char *ares_striendstr(const char *s1, const char *s2) return (char *)((size_t)c1_begin); } -ares_bool_t ares__is_onion_domain(const char *name) +ares_bool_t ares_is_onion_domain(const char *name) { if (ares_striendstr(name, ".onion")) { return ARES_TRUE; diff --git a/deps/cares/src/lib/ares__hosts_file.c b/deps/cares/src/lib/ares_hosts_file.c similarity index 64% rename from deps/cares/src/lib/ares__hosts_file.c rename to deps/cares/src/lib/ares_hosts_file.c index ae9c071d7aa90b..0439b8e1d476b9 100644 --- a/deps/cares/src/lib/ares__hosts_file.c +++ b/deps/cares/src/lib/ares_hosts_file.c @@ -40,7 +40,6 @@ # include #endif #include -#include "ares_platform.h" /* HOSTS FILE PROCESSING OVERVIEW * ============================== @@ -78,22 +77,22 @@ */ struct ares_hosts_file { - time_t ts; + time_t ts; /*! cache the filename so we know if the filename changes it automatically * invalidates the cache */ - char *filename; + char *filename; /*! iphash is the owner of the 'entry' object as there is only ever a single * match to the object. */ - ares__htable_strvp_t *iphash; + ares_htable_strvp_t *iphash; /*! hosthash does not own the entry so won't free on destruction */ - ares__htable_strvp_t *hosthash; + ares_htable_strvp_t *hosthash; }; struct ares_hosts_entry { - size_t refcnt; /*! If the entry is stored multiple times in the - * ip address hash, we have to reference count it */ - ares__llist_t *ips; - ares__llist_t *hosts; + size_t refcnt; /*! If the entry is stored multiple times in the + * ip address hash, we have to reference count it */ + ares_llist_t *ips; + ares_llist_t *hosts; }; const void *ares_dns_pton(const char *ipaddr, struct ares_addr *addr, @@ -132,8 +131,8 @@ const void *ares_dns_pton(const char *ipaddr, struct ares_addr *addr, return ptr; } -static ares_bool_t ares__normalize_ipaddr(const char *ipaddr, char *out, - size_t out_len) +static ares_bool_t ares_normalize_ipaddr(const char *ipaddr, char *out, + size_t out_len) { struct ares_addr data; const void *addr; @@ -154,7 +153,7 @@ static ares_bool_t ares__normalize_ipaddr(const char *ipaddr, char *out, return ARES_TRUE; } -static void ares__hosts_entry_destroy(ares_hosts_entry_t *entry) +static void ares_hosts_entry_destroy(ares_hosts_entry_t *entry) { if (entry == NULL) { return; @@ -169,29 +168,29 @@ static void ares__hosts_entry_destroy(ares_hosts_entry_t *entry) return; } - ares__llist_destroy(entry->hosts); - ares__llist_destroy(entry->ips); + ares_llist_destroy(entry->hosts); + ares_llist_destroy(entry->ips); ares_free(entry); } -static void ares__hosts_entry_destroy_cb(void *entry) +static void ares_hosts_entry_destroy_cb(void *entry) { - ares__hosts_entry_destroy(entry); + ares_hosts_entry_destroy(entry); } -void ares__hosts_file_destroy(ares_hosts_file_t *hf) +void ares_hosts_file_destroy(ares_hosts_file_t *hf) { if (hf == NULL) { return; } ares_free(hf->filename); - ares__htable_strvp_destroy(hf->hosthash); - ares__htable_strvp_destroy(hf->iphash); + ares_htable_strvp_destroy(hf->hosthash); + ares_htable_strvp_destroy(hf->iphash); ares_free(hf); } -static ares_hosts_file_t *ares__hosts_file_create(const char *filename) +static ares_hosts_file_t *ares_hosts_file_create(const char *filename) { ares_hosts_file_t *hf = ares_malloc_zero(sizeof(*hf)); if (hf == NULL) { @@ -205,12 +204,12 @@ static ares_hosts_file_t *ares__hosts_file_create(const char *filename) goto fail; } - hf->iphash = ares__htable_strvp_create(ares__hosts_entry_destroy_cb); + hf->iphash = ares_htable_strvp_create(ares_hosts_entry_destroy_cb); if (hf->iphash == NULL) { goto fail; } - hf->hosthash = ares__htable_strvp_create(NULL); + hf->hosthash = ares_htable_strvp_create(NULL); if (hf->hosthash == NULL) { goto fail; } @@ -218,7 +217,7 @@ static ares_hosts_file_t *ares__hosts_file_create(const char *filename) return hf; fail: - ares__hosts_file_destroy(hf); + ares_hosts_file_destroy(hf); return NULL; } @@ -228,63 +227,63 @@ typedef enum { ARES_MATCH_HOST = 2 } ares_hosts_file_match_t; -static ares_status_t ares__hosts_file_merge_entry( +static ares_status_t ares_hosts_file_merge_entry( const ares_hosts_file_t *hf, ares_hosts_entry_t *existing, ares_hosts_entry_t *entry, ares_hosts_file_match_t matchtype) { - ares__llist_node_t *node; + ares_llist_node_t *node; /* If we matched on IP address, we know there can only be 1, so there's no * reason to do anything */ if (matchtype != ARES_MATCH_IPADDR) { - while ((node = ares__llist_node_first(entry->ips)) != NULL) { - const char *ipaddr = ares__llist_node_val(node); + while ((node = ares_llist_node_first(entry->ips)) != NULL) { + const char *ipaddr = ares_llist_node_val(node); - if (ares__htable_strvp_get_direct(hf->iphash, ipaddr) != NULL) { - ares__llist_node_destroy(node); + if (ares_htable_strvp_get_direct(hf->iphash, ipaddr) != NULL) { + ares_llist_node_destroy(node); continue; } - ares__llist_node_move_parent_last(node, existing->ips); + ares_llist_node_mvparent_last(node, existing->ips); } } - while ((node = ares__llist_node_first(entry->hosts)) != NULL) { - const char *hostname = ares__llist_node_val(node); + while ((node = ares_llist_node_first(entry->hosts)) != NULL) { + const char *hostname = ares_llist_node_val(node); - if (ares__htable_strvp_get_direct(hf->hosthash, hostname) != NULL) { - ares__llist_node_destroy(node); + if (ares_htable_strvp_get_direct(hf->hosthash, hostname) != NULL) { + ares_llist_node_destroy(node); continue; } - ares__llist_node_move_parent_last(node, existing->hosts); + ares_llist_node_mvparent_last(node, existing->hosts); } - ares__hosts_entry_destroy(entry); + ares_hosts_entry_destroy(entry); return ARES_SUCCESS; } static ares_hosts_file_match_t - ares__hosts_file_match(const ares_hosts_file_t *hf, ares_hosts_entry_t *entry, - ares_hosts_entry_t **match) + ares_hosts_file_match(const ares_hosts_file_t *hf, ares_hosts_entry_t *entry, + ares_hosts_entry_t **match) { - ares__llist_node_t *node; + ares_llist_node_t *node; *match = NULL; - for (node = ares__llist_node_first(entry->ips); node != NULL; - node = ares__llist_node_next(node)) { - const char *ipaddr = ares__llist_node_val(node); - *match = ares__htable_strvp_get_direct(hf->iphash, ipaddr); + for (node = ares_llist_node_first(entry->ips); node != NULL; + node = ares_llist_node_next(node)) { + const char *ipaddr = ares_llist_node_val(node); + *match = ares_htable_strvp_get_direct(hf->iphash, ipaddr); if (*match != NULL) { return ARES_MATCH_IPADDR; } } - for (node = ares__llist_node_first(entry->hosts); node != NULL; - node = ares__llist_node_next(node)) { - const char *host = ares__llist_node_val(node); - *match = ares__htable_strvp_get_direct(hf->hosthash, host); + for (node = ares_llist_node_first(entry->hosts); node != NULL; + node = ares_llist_node_next(node)) { + const char *host = ares_llist_node_val(node); + *match = ares_htable_strvp_get_direct(hf->hosthash, host); if (*match != NULL) { return ARES_MATCH_HOST; } @@ -294,38 +293,38 @@ static ares_hosts_file_match_t } /*! entry is invalidated upon calling this function, always, even on error */ -static ares_status_t ares__hosts_file_add(ares_hosts_file_t *hosts, - ares_hosts_entry_t *entry) +static ares_status_t ares_hosts_file_add(ares_hosts_file_t *hosts, + ares_hosts_entry_t *entry) { ares_hosts_entry_t *match = NULL; ares_status_t status = ARES_SUCCESS; - ares__llist_node_t *node; + ares_llist_node_t *node; ares_hosts_file_match_t matchtype; size_t num_hostnames; /* Record the number of hostnames in this entry file. If we merge into an * existing record, these will be *appended* to the entry, so we'll count * backwards when adding to the hosts hashtable */ - num_hostnames = ares__llist_len(entry->hosts); + num_hostnames = ares_llist_len(entry->hosts); - matchtype = ares__hosts_file_match(hosts, entry, &match); + matchtype = ares_hosts_file_match(hosts, entry, &match); if (matchtype != ARES_MATCH_NONE) { - status = ares__hosts_file_merge_entry(hosts, match, entry, matchtype); + status = ares_hosts_file_merge_entry(hosts, match, entry, matchtype); if (status != ARES_SUCCESS) { - ares__hosts_entry_destroy(entry); /* LCOV_EXCL_LINE: DefensiveCoding */ - return status; /* LCOV_EXCL_LINE: DefensiveCoding */ + ares_hosts_entry_destroy(entry); /* LCOV_EXCL_LINE: DefensiveCoding */ + return status; /* LCOV_EXCL_LINE: DefensiveCoding */ } /* entry was invalidated above by merging */ entry = match; } if (matchtype != ARES_MATCH_IPADDR) { - const char *ipaddr = ares__llist_last_val(entry->ips); + const char *ipaddr = ares_llist_last_val(entry->ips); - if (!ares__htable_strvp_get(hosts->iphash, ipaddr, NULL)) { - if (!ares__htable_strvp_insert(hosts->iphash, ipaddr, entry)) { - ares__hosts_entry_destroy(entry); + if (!ares_htable_strvp_get(hosts->iphash, ipaddr, NULL)) { + if (!ares_htable_strvp_insert(hosts->iphash, ipaddr, entry)) { + ares_hosts_entry_destroy(entry); return ARES_ENOMEM; } entry->refcnt++; @@ -334,9 +333,9 @@ static ares_status_t ares__hosts_file_add(ares_hosts_file_t *hosts, /* Go backwards, on a merge, hostnames are appended. Breakout once we've * consumed all the hosts that we appended */ - for (node = ares__llist_node_last(entry->hosts); node != NULL; - node = ares__llist_node_prev(node)) { - const char *val = ares__llist_node_val(node); + for (node = ares_llist_node_last(entry->hosts); node != NULL; + node = ares_llist_node_prev(node)) { + const char *val = ares_llist_node_val(node); if (num_hostnames == 0) { break; @@ -346,11 +345,11 @@ static ares_status_t ares__hosts_file_add(ares_hosts_file_t *hosts, /* first hostname match wins. If we detect a duplicate hostname for another * ip it will automatically be added to the same entry */ - if (ares__htable_strvp_get(hosts->hosthash, val, NULL)) { + if (ares_htable_strvp_get(hosts->hosthash, val, NULL)) { continue; } - if (!ares__htable_strvp_insert(hosts->hosthash, val, entry)) { + if (!ares_htable_strvp_insert(hosts->hosthash, val, entry)) { return ARES_ENOMEM; } } @@ -358,15 +357,15 @@ static ares_status_t ares__hosts_file_add(ares_hosts_file_t *hosts, return ARES_SUCCESS; } -static ares_bool_t ares__hosts_entry_isdup(ares_hosts_entry_t *entry, - const char *host) +static ares_bool_t ares_hosts_entry_isdup(ares_hosts_entry_t *entry, + const char *host) { - ares__llist_node_t *node; + ares_llist_node_t *node; - for (node = ares__llist_node_first(entry->ips); node != NULL; - node = ares__llist_node_next(node)) { - const char *myhost = ares__llist_node_val(node); - if (strcasecmp(myhost, host) == 0) { + for (node = ares_llist_node_first(entry->ips); node != NULL; + node = ares_llist_node_next(node)) { + const char *myhost = ares_llist_node_val(node); + if (ares_strcaseeq(myhost, host)) { return ARES_TRUE; } } @@ -374,44 +373,44 @@ static ares_bool_t ares__hosts_entry_isdup(ares_hosts_entry_t *entry, return ARES_FALSE; } -static ares_status_t ares__parse_hosts_hostnames(ares__buf_t *buf, - ares_hosts_entry_t *entry) +static ares_status_t ares_parse_hosts_hostnames(ares_buf_t *buf, + ares_hosts_entry_t *entry) { - entry->hosts = ares__llist_create(ares_free); + entry->hosts = ares_llist_create(ares_free); if (entry->hosts == NULL) { return ARES_ENOMEM; } /* Parse hostnames and aliases */ - while (ares__buf_len(buf)) { + while (ares_buf_len(buf)) { char hostname[256]; char *temp; ares_status_t status; unsigned char comment = '#'; - ares__buf_consume_whitespace(buf, ARES_FALSE); + ares_buf_consume_whitespace(buf, ARES_FALSE); - if (ares__buf_len(buf) == 0) { + if (ares_buf_len(buf) == 0) { break; } /* See if it is a comment, if so stop processing */ - if (ares__buf_begins_with(buf, &comment, 1)) { + if (ares_buf_begins_with(buf, &comment, 1)) { break; } - ares__buf_tag(buf); + ares_buf_tag(buf); /* Must be at end of line */ - if (ares__buf_consume_nonwhitespace(buf) == 0) { + if (ares_buf_consume_nonwhitespace(buf) == 0) { break; } - status = ares__buf_tag_fetch_string(buf, hostname, sizeof(hostname)); + status = ares_buf_tag_fetch_string(buf, hostname, sizeof(hostname)); if (status != ARES_SUCCESS) { /* Bad entry, just ignore as long as its not the first. If its the first, * it must be valid */ - if (ares__llist_len(entry->hosts) == 0) { + if (ares_llist_len(entry->hosts) == 0) { return ARES_EBADSTR; } @@ -419,12 +418,12 @@ static ares_status_t ares__parse_hosts_hostnames(ares__buf_t *buf, } /* Validate it is a valid hostname characterset */ - if (!ares__is_hostname(hostname)) { + if (!ares_is_hostname(hostname)) { continue; } /* Don't add a duplicate to the same entry */ - if (ares__hosts_entry_isdup(entry, hostname)) { + if (ares_hosts_entry_isdup(entry, hostname)) { continue; } @@ -434,22 +433,22 @@ static ares_status_t ares__parse_hosts_hostnames(ares__buf_t *buf, return ARES_ENOMEM; } - if (ares__llist_insert_last(entry->hosts, temp) == NULL) { + if (ares_llist_insert_last(entry->hosts, temp) == NULL) { ares_free(temp); return ARES_ENOMEM; } } /* Must have at least 1 entry */ - if (ares__llist_len(entry->hosts) == 0) { + if (ares_llist_len(entry->hosts) == 0) { return ARES_EBADSTR; } return ARES_SUCCESS; } -static ares_status_t ares__parse_hosts_ipaddr(ares__buf_t *buf, - ares_hosts_entry_t **entry_out) +static ares_status_t ares_parse_hosts_ipaddr(ares_buf_t *buf, + ares_hosts_entry_t **entry_out) { char addr[INET6_ADDRSTRLEN]; char *temp; @@ -458,15 +457,15 @@ static ares_status_t ares__parse_hosts_ipaddr(ares__buf_t *buf, *entry_out = NULL; - ares__buf_tag(buf); - ares__buf_consume_nonwhitespace(buf); - status = ares__buf_tag_fetch_string(buf, addr, sizeof(addr)); + ares_buf_tag(buf); + ares_buf_consume_nonwhitespace(buf); + status = ares_buf_tag_fetch_string(buf, addr, sizeof(addr)); if (status != ARES_SUCCESS) { return status; } /* Validate and normalize the ip address format */ - if (!ares__normalize_ipaddr(addr, addr, sizeof(addr))) { + if (!ares_normalize_ipaddr(addr, addr, sizeof(addr))) { return ARES_EBADSTR; } @@ -475,21 +474,21 @@ static ares_status_t ares__parse_hosts_ipaddr(ares__buf_t *buf, return ARES_ENOMEM; } - entry->ips = ares__llist_create(ares_free); + entry->ips = ares_llist_create(ares_free); if (entry->ips == NULL) { - ares__hosts_entry_destroy(entry); + ares_hosts_entry_destroy(entry); return ARES_ENOMEM; } temp = ares_strdup(addr); if (temp == NULL) { - ares__hosts_entry_destroy(entry); + ares_hosts_entry_destroy(entry); return ARES_ENOMEM; } - if (ares__llist_insert_first(entry->ips, temp) == NULL) { + if (ares_llist_insert_first(entry->ips, temp) == NULL) { ares_free(temp); - ares__hosts_entry_destroy(entry); + ares_hosts_entry_destroy(entry); return ARES_ENOMEM; } @@ -498,100 +497,100 @@ static ares_status_t ares__parse_hosts_ipaddr(ares__buf_t *buf, return ARES_SUCCESS; } -static ares_status_t ares__parse_hosts(const char *filename, - ares_hosts_file_t **out) +static ares_status_t ares_parse_hosts(const char *filename, + ares_hosts_file_t **out) { - ares__buf_t *buf = NULL; + ares_buf_t *buf = NULL; ares_status_t status = ARES_EBADRESP; ares_hosts_file_t *hf = NULL; ares_hosts_entry_t *entry = NULL; *out = NULL; - buf = ares__buf_create(); + buf = ares_buf_create(); if (buf == NULL) { status = ARES_ENOMEM; goto done; } - status = ares__buf_load_file(filename, buf); + status = ares_buf_load_file(filename, buf); if (status != ARES_SUCCESS) { goto done; } - hf = ares__hosts_file_create(filename); + hf = ares_hosts_file_create(filename); if (hf == NULL) { status = ARES_ENOMEM; goto done; } - while (ares__buf_len(buf)) { + while (ares_buf_len(buf)) { unsigned char comment = '#'; /* -- Start of new line here -- */ /* Consume any leading whitespace */ - ares__buf_consume_whitespace(buf, ARES_FALSE); + ares_buf_consume_whitespace(buf, ARES_FALSE); - if (ares__buf_len(buf) == 0) { + if (ares_buf_len(buf) == 0) { break; } /* See if it is a comment, if so, consume remaining line */ - if (ares__buf_begins_with(buf, &comment, 1)) { - ares__buf_consume_line(buf, ARES_TRUE); + if (ares_buf_begins_with(buf, &comment, 1)) { + ares_buf_consume_line(buf, ARES_TRUE); continue; } /* Pull off ip address */ - status = ares__parse_hosts_ipaddr(buf, &entry); + status = ares_parse_hosts_ipaddr(buf, &entry); if (status == ARES_ENOMEM) { goto done; } if (status != ARES_SUCCESS) { /* Bad line, consume and go onto next */ - ares__buf_consume_line(buf, ARES_TRUE); + ares_buf_consume_line(buf, ARES_TRUE); continue; } /* Parse of the hostnames */ - status = ares__parse_hosts_hostnames(buf, entry); + status = ares_parse_hosts_hostnames(buf, entry); if (status == ARES_ENOMEM) { goto done; } else if (status != ARES_SUCCESS) { /* Bad line, consume and go onto next */ - ares__hosts_entry_destroy(entry); + ares_hosts_entry_destroy(entry); entry = NULL; - ares__buf_consume_line(buf, ARES_TRUE); + ares_buf_consume_line(buf, ARES_TRUE); continue; } /* Append the successful entry to the hosts file */ - status = ares__hosts_file_add(hf, entry); + status = ares_hosts_file_add(hf, entry); entry = NULL; /* is always invalidated by this function, even on error */ if (status != ARES_SUCCESS) { goto done; } /* Go to next line */ - ares__buf_consume_line(buf, ARES_TRUE); + ares_buf_consume_line(buf, ARES_TRUE); } status = ARES_SUCCESS; done: - ares__hosts_entry_destroy(entry); - ares__buf_destroy(buf); + ares_hosts_entry_destroy(entry); + ares_buf_destroy(buf); if (status != ARES_SUCCESS) { - ares__hosts_file_destroy(hf); + ares_hosts_file_destroy(hf); } else { *out = hf; } return status; } -static ares_bool_t ares__hosts_expired(const char *filename, - const ares_hosts_file_t *hf) +static ares_bool_t ares_hosts_expired(const char *filename, + const ares_hosts_file_t *hf) { time_t mod_ts = 0; @@ -620,7 +619,7 @@ static ares_bool_t ares__hosts_expired(const char *filename, } /* If filenames are different, its expired */ - if (strcasecmp(hf->filename, filename) != 0) { + if (!ares_strcaseeq(hf->filename, filename)) { return ARES_TRUE; } @@ -631,8 +630,8 @@ static ares_bool_t ares__hosts_expired(const char *filename, return ARES_FALSE; } -static ares_status_t ares__hosts_path(const ares_channel_t *channel, - ares_bool_t use_env, char **path) +static ares_status_t ares_hosts_path(const ares_channel_t *channel, + ares_bool_t use_env, char **path) { char *path_hosts = NULL; @@ -688,40 +687,40 @@ static ares_status_t ares__hosts_path(const ares_channel_t *channel, return ARES_SUCCESS; } -static ares_status_t ares__hosts_update(ares_channel_t *channel, - ares_bool_t use_env) +static ares_status_t ares_hosts_update(ares_channel_t *channel, + ares_bool_t use_env) { ares_status_t status; char *filename = NULL; - status = ares__hosts_path(channel, use_env, &filename); + status = ares_hosts_path(channel, use_env, &filename); if (status != ARES_SUCCESS) { return status; } - if (!ares__hosts_expired(filename, channel->hf)) { + if (!ares_hosts_expired(filename, channel->hf)) { ares_free(filename); return ARES_SUCCESS; } - ares__hosts_file_destroy(channel->hf); + ares_hosts_file_destroy(channel->hf); channel->hf = NULL; - status = ares__parse_hosts(filename, &channel->hf); + status = ares_parse_hosts(filename, &channel->hf); ares_free(filename); return status; } -ares_status_t ares__hosts_search_ipaddr(ares_channel_t *channel, - ares_bool_t use_env, const char *ipaddr, - const ares_hosts_entry_t **entry) +ares_status_t ares_hosts_search_ipaddr(ares_channel_t *channel, + ares_bool_t use_env, const char *ipaddr, + const ares_hosts_entry_t **entry) { ares_status_t status; char addr[INET6_ADDRSTRLEN]; *entry = NULL; - status = ares__hosts_update(channel, use_env); + status = ares_hosts_update(channel, use_env); if (status != ARES_SUCCESS) { return status; } @@ -730,11 +729,11 @@ ares_status_t ares__hosts_search_ipaddr(ares_channel_t *channel, return ARES_ENOTFOUND; /* LCOV_EXCL_LINE: DefensiveCoding */ } - if (!ares__normalize_ipaddr(ipaddr, addr, sizeof(addr))) { + if (!ares_normalize_ipaddr(ipaddr, addr, sizeof(addr))) { return ARES_EBADNAME; } - *entry = ares__htable_strvp_get_direct(channel->hf->iphash, addr); + *entry = ares_htable_strvp_get_direct(channel->hf->iphash, addr); if (*entry == NULL) { return ARES_ENOTFOUND; } @@ -742,15 +741,15 @@ ares_status_t ares__hosts_search_ipaddr(ares_channel_t *channel, return ARES_SUCCESS; } -ares_status_t ares__hosts_search_host(ares_channel_t *channel, - ares_bool_t use_env, const char *host, - const ares_hosts_entry_t **entry) +ares_status_t ares_hosts_search_host(ares_channel_t *channel, + ares_bool_t use_env, const char *host, + const ares_hosts_entry_t **entry) { ares_status_t status; *entry = NULL; - status = ares__hosts_update(channel, use_env); + status = ares_hosts_update(channel, use_env); if (status != ARES_SUCCESS) { return status; } @@ -759,7 +758,7 @@ ares_status_t ares__hosts_search_host(ares_channel_t *channel, return ARES_ENOTFOUND; /* LCOV_EXCL_LINE: DefensiveCoding */ } - *entry = ares__htable_strvp_get_direct(channel->hf->hosthash, host); + *entry = ares_htable_strvp_get_direct(channel->hf->hosthash, host); if (*entry == NULL) { return ARES_ENOTFOUND; } @@ -768,23 +767,23 @@ ares_status_t ares__hosts_search_host(ares_channel_t *channel, } static ares_status_t - ares__hosts_ai_append_cnames(const ares_hosts_entry_t *entry, - struct ares_addrinfo_cname **cnames_out) + ares_hosts_ai_append_cnames(const ares_hosts_entry_t *entry, + struct ares_addrinfo_cname **cnames_out) { struct ares_addrinfo_cname *cname = NULL; struct ares_addrinfo_cname *cnames = NULL; const char *primaryhost; - ares__llist_node_t *node; + ares_llist_node_t *node; ares_status_t status; size_t cnt = 0; - node = ares__llist_node_first(entry->hosts); - primaryhost = ares__llist_node_val(node); + node = ares_llist_node_first(entry->hosts); + primaryhost = ares_llist_node_val(node); /* Skip to next node to start with aliases */ - node = ares__llist_node_next(node); + node = ares_llist_node_next(node); while (node != NULL) { - const char *host = ares__llist_node_val(node); + const char *host = ares_llist_node_val(node); /* Cap at 100 entries. , some people use * https://github.com/StevenBlack/hosts and we don't need 200k+ aliases */ @@ -793,7 +792,7 @@ static ares_status_t break; /* LCOV_EXCL_LINE: DefensiveCoding */ } - cname = ares__append_addrinfo_cname(&cnames); + cname = ares_append_addrinfo_cname(&cnames); if (cname == NULL) { status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ goto done; /* LCOV_EXCL_LINE: OutOfMemory */ @@ -811,12 +810,12 @@ static ares_status_t goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } - node = ares__llist_node_next(node); + node = ares_llist_node_next(node); } /* No entries, add only primary */ if (cnames == NULL) { - cname = ares__append_addrinfo_cname(&cnames); + cname = ares_append_addrinfo_cname(&cnames); if (cname == NULL) { status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ goto done; /* LCOV_EXCL_LINE: OutOfMemory */ @@ -832,24 +831,24 @@ static ares_status_t done: if (status != ARES_SUCCESS) { - ares__freeaddrinfo_cnames(cnames); /* LCOV_EXCL_LINE: DefensiveCoding */ - return status; /* LCOV_EXCL_LINE: DefensiveCoding */ + ares_freeaddrinfo_cnames(cnames); /* LCOV_EXCL_LINE: DefensiveCoding */ + return status; /* LCOV_EXCL_LINE: DefensiveCoding */ } *cnames_out = cnames; return ARES_SUCCESS; } -ares_status_t ares__hosts_entry_to_addrinfo(const ares_hosts_entry_t *entry, - const char *name, int family, - unsigned short port, - ares_bool_t want_cnames, - struct ares_addrinfo *ai) +ares_status_t ares_hosts_entry_to_addrinfo(const ares_hosts_entry_t *entry, + const char *name, int family, + unsigned short port, + ares_bool_t want_cnames, + struct ares_addrinfo *ai) { ares_status_t status; struct ares_addrinfo_cname *cnames = NULL; struct ares_addrinfo_node *ainodes = NULL; - ares__llist_node_t *node; + ares_llist_node_t *node; switch (family) { case AF_INET: @@ -868,12 +867,12 @@ ares_status_t ares__hosts_entry_to_addrinfo(const ares_hosts_entry_t *entry, } } - for (node = ares__llist_node_first(entry->ips); node != NULL; - node = ares__llist_node_next(node)) { + for (node = ares_llist_node_first(entry->ips); node != NULL; + node = ares_llist_node_next(node)) { struct ares_addr addr; const void *ptr = NULL; size_t ptr_len = 0; - const char *ipaddr = ares__llist_node_val(node); + const char *ipaddr = ares_llist_node_val(node); memset(&addr, 0, sizeof(addr)); addr.family = family; @@ -890,7 +889,7 @@ ares_status_t ares__hosts_entry_to_addrinfo(const ares_hosts_entry_t *entry, } if (want_cnames) { - status = ares__hosts_ai_append_cnames(entry, &cnames); + status = ares_hosts_ai_append_cnames(entry, &cnames); if (status != ARES_SUCCESS) { goto done; /* LCOV_EXCL_LINE: DefensiveCoding */ } @@ -901,21 +900,21 @@ ares_status_t ares__hosts_entry_to_addrinfo(const ares_hosts_entry_t *entry, done: if (status != ARES_SUCCESS) { /* LCOV_EXCL_START: defensive coding */ - ares__freeaddrinfo_cnames(cnames); - ares__freeaddrinfo_nodes(ainodes); + ares_freeaddrinfo_cnames(cnames); + ares_freeaddrinfo_nodes(ainodes); ares_free(ai->name); ai->name = NULL; return status; /* LCOV_EXCL_STOP */ } - ares__addrinfo_cat_cnames(&ai->cnames, cnames); - ares__addrinfo_cat_nodes(&ai->nodes, ainodes); + ares_addrinfo_cat_cnames(&ai->cnames, cnames); + ares_addrinfo_cat_nodes(&ai->nodes, ainodes); return status; } -ares_status_t ares__hosts_entry_to_hostent(const ares_hosts_entry_t *entry, - int family, struct hostent **hostent) +ares_status_t ares_hosts_entry_to_hostent(const ares_hosts_entry_t *entry, + int family, struct hostent **hostent) { ares_status_t status; struct ares_addrinfo *ai = ares_malloc_zero(sizeof(*ai)); @@ -926,12 +925,12 @@ ares_status_t ares__hosts_entry_to_hostent(const ares_hosts_entry_t *entry, return ARES_ENOMEM; } - status = ares__hosts_entry_to_addrinfo(entry, NULL, family, 0, ARES_TRUE, ai); + status = ares_hosts_entry_to_addrinfo(entry, NULL, family, 0, ARES_TRUE, ai); if (status != ARES_SUCCESS) { goto done; } - status = ares__addrinfo2hostent(ai, family, hostent); + status = ares_addrinfo2hostent(ai, family, hostent); if (status != ARES_SUCCESS) { goto done; } diff --git a/deps/cares/src/lib/ares_inet_net_pton.h b/deps/cares/src/lib/ares_inet_net_pton.h index 0a52855bd8c966..e3ed83a3cb1166 100644 --- a/deps/cares/src/lib/ares_inet_net_pton.h +++ b/deps/cares/src/lib/ares_inet_net_pton.h @@ -26,10 +26,6 @@ #ifndef HEADER_CARES_INET_NET_PTON_H #define HEADER_CARES_INET_NET_PTON_H -#ifdef HAVE_INET_NET_PTON -# define ares_inet_net_pton(w, x, y, z) inet_net_pton(w, x, y, z) -#else int ares_inet_net_pton(int af, const char *src, void *dst, size_t size); -#endif #endif /* HEADER_CARES_INET_NET_PTON_H */ diff --git a/deps/cares/src/lib/ares_init.c b/deps/cares/src/lib/ares_init.c index 6dc5f4f9353ce2..ae78262a112fc0 100644 --- a/deps/cares/src/lib/ares_init.c +++ b/deps/cares/src/lib/ares_init.c @@ -62,7 +62,6 @@ #endif #include "ares_inet_net_pton.h" -#include "ares_platform.h" #include "event/ares_event.h" int ares_init(ares_channel_t **channelptr) @@ -117,7 +116,7 @@ static void server_destroy_cb(void *data) if (data == NULL) { return; /* LCOV_EXCL_LINE: DefensiveCoding */ } - ares__destroy_server(data); + ares_destroy_server(data); } static ares_status_t init_by_defaults(ares_channel_t *channel) @@ -128,7 +127,7 @@ static ares_status_t init_by_defaults(ares_channel_t *channel) const char *dot; #endif struct ares_addr addr; - ares__llist_t *sconfig = NULL; + ares_llist_t *sconfig = NULL; /* Enable EDNS by default */ if (!(channel->optmask & ARES_OPT_FLAGS)) { @@ -146,7 +145,7 @@ static ares_status_t init_by_defaults(ares_channel_t *channel) channel->tries = DEFAULT_TRIES; } - if (ares__slist_len(channel->servers) == 0) { + if (ares_slist_len(channel->servers) == 0) { /* Add a default local named server to the channel unless configured not * to (in which case return an error). */ @@ -158,28 +157,19 @@ static ares_status_t init_by_defaults(ares_channel_t *channel) addr.family = AF_INET; addr.addr.addr4.s_addr = htonl(INADDR_LOOPBACK); - rc = ares__sconfig_append(&sconfig, &addr, 0, 0, NULL); + rc = ares_sconfig_append(channel, &sconfig, &addr, 0, 0, NULL); if (rc != ARES_SUCCESS) { goto error; /* LCOV_EXCL_LINE: OutOfMemory */ } - rc = ares__servers_update(channel, sconfig, ARES_FALSE); - ares__llist_destroy(sconfig); + rc = ares_servers_update(channel, sconfig, ARES_FALSE); + ares_llist_destroy(sconfig); if (rc != ARES_SUCCESS) { goto error; } } -#if defined(USE_WINSOCK) -# define toolong(x) (x == -1) && (SOCKERRNO == WSAEFAULT) -#elif defined(ENAMETOOLONG) -# define toolong(x) \ - (x == -1) && ((SOCKERRNO == ENAMETOOLONG) || (SOCKERRNO == EINVAL)) -#else -# define toolong(x) (x == -1) && (SOCKERRNO == EINVAL) -#endif - if (channel->ndomains == 0) { /* Derive a default domain search list from the kernel hostname, * or set it to empty if the hostname isn't helpful. @@ -187,9 +177,7 @@ static ares_status_t init_by_defaults(ares_channel_t *channel) #ifndef HAVE_GETHOSTNAME channel->ndomains = 0; /* default to none */ #else - GETHOSTNAME_TYPE_ARG2 lenv = 64; - size_t len = 64; - int res; + size_t len = 256; channel->ndomains = 0; /* default to none */ hostname = ares_malloc(len); @@ -198,28 +186,11 @@ static ares_status_t init_by_defaults(ares_channel_t *channel) goto error; /* LCOV_EXCL_LINE: OutOfMemory */ } - do { - res = gethostname(hostname, lenv); - - if (toolong(res)) { - char *p; - len *= 2; - lenv *= 2; - p = ares_realloc(hostname, len); - if (!p) { - rc = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ - goto error; /* LCOV_EXCL_LINE: OutOfMemory */ - } - hostname = p; - continue; - } else if (res) { - /* Lets not treat a gethostname failure as critical, since we - * are ok if gethostname doesn't even exist */ - *hostname = '\0'; - break; - } - - } while (res != 0); + if (gethostname(hostname, (GETHOSTNAME_TYPE_ARG2)len) != 0) { + /* Lets not treat a gethostname failure as critical, since we + * are ok if gethostname doesn't even exist */ + *hostname = '\0'; + } dot = strchr(hostname, '.'); if (dot) { @@ -286,13 +257,13 @@ int ares_init_options(ares_channel_t **channelptr, /* One option where zero is valid, so set default value here */ channel->ndots = 1; - status = ares__channel_threading_init(channel); + status = ares_channel_threading_init(channel); if (status != ARES_SUCCESS) { goto done; } /* Generate random key */ - channel->rand_state = ares__init_rand_state(); + channel->rand_state = ares_init_rand_state(); if (channel->rand_state == NULL) { status = ARES_ENOMEM; DEBUGF(fprintf(stderr, "Error: init_id_key failed: %s\n", @@ -302,33 +273,33 @@ int ares_init_options(ares_channel_t **channelptr, /* Initialize Server List */ channel->servers = - ares__slist_create(channel->rand_state, server_sort_cb, server_destroy_cb); + ares_slist_create(channel->rand_state, server_sort_cb, server_destroy_cb); if (channel->servers == NULL) { status = ARES_ENOMEM; goto done; } /* Initialize our lists of queries */ - channel->all_queries = ares__llist_create(NULL); + channel->all_queries = ares_llist_create(NULL); if (channel->all_queries == NULL) { status = ARES_ENOMEM; goto done; } - channel->queries_by_qid = ares__htable_szvp_create(NULL); + channel->queries_by_qid = ares_htable_szvp_create(NULL); if (channel->queries_by_qid == NULL) { status = ARES_ENOMEM; goto done; } channel->queries_by_timeout = - ares__slist_create(channel->rand_state, ares_query_timeout_cmp_cb, NULL); + ares_slist_create(channel->rand_state, ares_query_timeout_cmp_cb, NULL); if (channel->queries_by_timeout == NULL) { status = ARES_ENOMEM; goto done; } - channel->connnode_by_socket = ares__htable_asvp_create(NULL); + channel->connnode_by_socket = ares_htable_asvp_create(NULL); if (channel->connnode_by_socket == NULL) { status = ARES_ENOMEM; goto done; @@ -338,7 +309,7 @@ int ares_init_options(ares_channel_t **channelptr, * precedence to lowest. */ - status = ares__init_by_options(channel, options, optmask); + status = ares_init_by_options(channel, options, optmask); if (status != ARES_SUCCESS) { DEBUGF(fprintf(stderr, "Error: init_by_options failed: %s\n", ares_strerror(status))); @@ -350,14 +321,14 @@ int ares_init_options(ares_channel_t **channelptr, /* Go ahead and let it initialize the query cache even if the ttl is 0 and * completely unused. This reduces the number of different code paths that * might be followed even if there is a minor performance hit. */ - status = ares__qcache_create(channel->rand_state, channel->qcache_max_ttl, - &channel->qcache); + status = ares_qcache_create(channel->rand_state, channel->qcache_max_ttl, + &channel->qcache); if (status != ARES_SUCCESS) { goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } if (status == ARES_SUCCESS) { - status = ares__init_by_sysconfig(channel); + status = ares_init_by_sysconfig(channel); if (status != ARES_SUCCESS) { DEBUGF(fprintf(stderr, "Error: init_by_sysconfig failed: %s\n", ares_strerror(status))); @@ -375,6 +346,8 @@ int ares_init_options(ares_channel_t **channelptr, goto done; } + ares_set_socket_functions_def(channel); + /* Initialize the event thread */ if (channel->optmask & ARES_OPT_EVENT_THREAD) { ares_event_thread_t *e = NULL; @@ -409,23 +382,23 @@ static void *ares_reinit_thread(void *arg) ares_channel_t *channel = arg; ares_status_t status; - /* ares__init_by_sysconfig() will lock when applying the config, but not + /* ares_init_by_sysconfig() will lock when applying the config, but not * when retrieving. */ - status = ares__init_by_sysconfig(channel); + status = ares_init_by_sysconfig(channel); if (status != ARES_SUCCESS) { DEBUGF(fprintf(stderr, "Error: init_by_sysconfig failed: %s\n", ares_strerror(status))); } - ares__channel_lock(channel); + ares_channel_lock(channel); /* Flush cached queries on reinit */ if (status == ARES_SUCCESS && channel->qcache) { - ares__qcache_flush(channel->qcache); + ares_qcache_flush(channel->qcache); } channel->reinit_pending = ARES_FALSE; - ares__channel_unlock(channel); + ares_channel_unlock(channel); return NULL; } @@ -438,34 +411,34 @@ ares_status_t ares_reinit(ares_channel_t *channel) return ARES_EFORMERR; } - ares__channel_lock(channel); + ares_channel_lock(channel); /* If a reinit is already in process, lets not do it again. Or if we are * shutting down, skip. */ if (!channel->sys_up || channel->reinit_pending) { - ares__channel_unlock(channel); + ares_channel_unlock(channel); return ARES_SUCCESS; } channel->reinit_pending = ARES_TRUE; - ares__channel_unlock(channel); + ares_channel_unlock(channel); if (ares_threadsafety()) { /* clean up the prior reinit process's thread. We know the thread isn't * running since reinit_pending was false */ if (channel->reinit_thread != NULL) { void *rv; - ares__thread_join(channel->reinit_thread, &rv); + ares_thread_join(channel->reinit_thread, &rv); channel->reinit_thread = NULL; } /* Spawn a new thread */ status = - ares__thread_create(&channel->reinit_thread, ares_reinit_thread, channel); + ares_thread_create(&channel->reinit_thread, ares_reinit_thread, channel); if (status != ARES_SUCCESS) { /* LCOV_EXCL_START: UntestablePath */ - ares__channel_lock(channel); + ares_channel_lock(channel); channel->reinit_pending = ARES_FALSE; - ares__channel_unlock(channel); + ares_channel_unlock(channel); /* LCOV_EXCL_STOP */ } } else { @@ -508,23 +481,25 @@ int ares_dup(ares_channel_t **dest, const ares_channel_t *src) goto done; } - ares__channel_lock(src); + ares_channel_lock(src); /* Now clone the options that ares_save_options() doesn't support, but are * user-provided */ - (*dest)->sock_create_cb = src->sock_create_cb; - (*dest)->sock_create_cb_data = src->sock_create_cb_data; - (*dest)->sock_config_cb = src->sock_config_cb; - (*dest)->sock_config_cb_data = src->sock_config_cb_data; - (*dest)->sock_funcs = src->sock_funcs; - (*dest)->sock_func_cb_data = src->sock_func_cb_data; - (*dest)->server_state_cb = src->server_state_cb; - (*dest)->server_state_cb_data = src->server_state_cb_data; + (*dest)->sock_create_cb = src->sock_create_cb; + (*dest)->sock_create_cb_data = src->sock_create_cb_data; + (*dest)->sock_config_cb = src->sock_config_cb; + (*dest)->sock_config_cb_data = src->sock_config_cb_data; + memcpy(&(*dest)->sock_funcs, &(src->sock_funcs), sizeof((*dest)->sock_funcs)); + (*dest)->sock_func_cb_data = src->sock_func_cb_data; + (*dest)->legacy_sock_funcs = src->legacy_sock_funcs; + (*dest)->legacy_sock_funcs_cb_data = src->legacy_sock_funcs_cb_data; + (*dest)->server_state_cb = src->server_state_cb; + (*dest)->server_state_cb_data = src->server_state_cb_data; ares_strcpy((*dest)->local_dev_name, src->local_dev_name, sizeof((*dest)->local_dev_name)); (*dest)->local_ip4 = src->local_ip4; memcpy((*dest)->local_ip6, src->local_ip6, sizeof(src->local_ip6)); - ares__channel_unlock(src); + ares_channel_unlock(src); /* Servers are a bit unique as ares_init_options() only allows ipv4 servers * and not a port per server, but there are other user specified ways, that @@ -568,9 +543,9 @@ void ares_set_local_ip4(ares_channel_t *channel, unsigned int local_ip) if (channel == NULL) { return; } - ares__channel_lock(channel); + ares_channel_lock(channel); channel->local_ip4 = local_ip; - ares__channel_unlock(channel); + ares_channel_unlock(channel); } /* local_ip6 should be 16 bytes in length */ @@ -579,9 +554,9 @@ void ares_set_local_ip6(ares_channel_t *channel, const unsigned char *local_ip6) if (channel == NULL) { return; } - ares__channel_lock(channel); + ares_channel_lock(channel); memcpy(&channel->local_ip6, local_ip6, sizeof(channel->local_ip6)); - ares__channel_unlock(channel); + ares_channel_unlock(channel); } /* local_dev_name should be null terminated. */ @@ -591,11 +566,11 @@ void ares_set_local_dev(ares_channel_t *channel, const char *local_dev_name) return; } - ares__channel_lock(channel); + ares_channel_lock(channel); ares_strcpy(channel->local_dev_name, local_dev_name, sizeof(channel->local_dev_name)); channel->local_dev_name[sizeof(channel->local_dev_name) - 1] = 0; - ares__channel_unlock(channel); + ares_channel_unlock(channel); } int ares_set_sortlist(ares_channel_t *channel, const char *sortstr) @@ -607,9 +582,9 @@ int ares_set_sortlist(ares_channel_t *channel, const char *sortstr) if (!channel) { return ARES_ENODATA; } - ares__channel_lock(channel); + ares_channel_lock(channel); - status = ares__parse_sortlist(&sortlist, &nsort, sortstr); + status = ares_parse_sortlist(&sortlist, &nsort, sortstr); if (status == ARES_SUCCESS && sortlist) { if (channel->sortlist) { ares_free(channel->sortlist); @@ -620,6 +595,6 @@ int ares_set_sortlist(ares_channel_t *channel, const char *sortstr) /* Save sortlist as if it was passed in as an option */ channel->optmask |= ARES_OPT_SORTLIST; } - ares__channel_unlock(channel); + ares_channel_unlock(channel); return (int)status; } diff --git a/deps/cares/src/lib/ares_ipv6.h b/deps/cares/src/lib/ares_ipv6.h index e7e0b6d3a5e60c..5da341b010603f 100644 --- a/deps/cares/src/lib/ares_ipv6.h +++ b/deps/cares/src/lib/ares_ipv6.h @@ -94,7 +94,7 @@ struct addrinfo { # ifdef IFNAMSIZ # define IF_NAMESIZE IFNAMSIZ # else -# define IF_NAMESIZE 256 +# define IF_NAMESIZE 32 # endif #endif diff --git a/deps/cares/src/lib/ares_library_init.c b/deps/cares/src/lib/ares_library_init.c index 6c2f7c0f8ce9ee..2b91692baec6d5 100644 --- a/deps/cares/src/lib/ares_library_init.c +++ b/deps/cares/src/lib/ares_library_init.c @@ -52,8 +52,6 @@ static void *default_malloc(size_t size) return malloc(size); } -#if defined(_WIN32) -/* We need indirections to handle Windows DLL rules. */ static void *default_realloc(void *p, size_t size) { return realloc(p, size); @@ -63,13 +61,25 @@ static void default_free(void *p) { free(p); } -#else -# define default_realloc realloc -# define default_free free -#endif -void *(*ares_malloc)(size_t size) = default_malloc; -void *(*ares_realloc)(void *ptr, size_t size) = default_realloc; -void (*ares_free)(void *ptr) = default_free; + +static void *(*__ares_malloc)(size_t size) = default_malloc; +static void *(*__ares_realloc)(void *ptr, size_t size) = default_realloc; +static void (*__ares_free)(void *ptr) = default_free; + +void *ares_malloc(size_t size) +{ + return __ares_malloc(size); +} + +void *ares_realloc(void *ptr, size_t size) +{ + return __ares_realloc(ptr, size); +} + +void ares_free(void *ptr) +{ + __ares_free(ptr); +} void *ares_malloc_zero(size_t size) { @@ -115,13 +125,13 @@ int ares_library_init_mem(int flags, void *(*amalloc)(size_t size), void *(*arealloc)(void *ptr, size_t size)) { if (amalloc) { - ares_malloc = amalloc; + __ares_malloc = amalloc; } if (arealloc) { - ares_realloc = arealloc; + __ares_realloc = arealloc; } if (afree) { - ares_free = afree; + __ares_free = afree; } return ares_library_init(flags); } @@ -143,9 +153,9 @@ void ares_library_cleanup(void) #endif ares_init_flags = ARES_LIB_INIT_NONE; - ares_malloc = malloc; - ares_realloc = realloc; - ares_free = free; + __ares_malloc = default_malloc; + __ares_realloc = default_realloc; + __ares_free = default_free; } int ares_library_initialized(void) diff --git a/deps/cares/src/lib/ares_metrics.c b/deps/cares/src/lib/ares_metrics.c index 0e22fc37e7cb46..13e34decc06ae6 100644 --- a/deps/cares/src/lib/ares_metrics.c +++ b/deps/cares/src/lib/ares_metrics.c @@ -162,14 +162,14 @@ void ares_metrics_record(const ares_query_t *query, ares_server_t *server, return; } - ares__tvnow(&now); + ares_tvnow(&now); rcode = ares_dns_record_get_rcode(dnsrec); if (rcode != ARES_RCODE_NOERROR && rcode != ARES_RCODE_NXDOMAIN) { return; } - ares__timeval_diff(&tvdiff, &query->ts, &now); + ares_timeval_diff(&tvdiff, &query->ts, &now); query_ms = (unsigned int)((tvdiff.sec * 1000) + (tvdiff.usec / 1000)); if (query_ms == 0) { query_ms = 1; diff --git a/deps/cares/src/lib/ares_options.c b/deps/cares/src/lib/ares_options.c index 9aeb4bad3d743b..3082f332457c22 100644 --- a/deps/cares/src/lib/ares_options.c +++ b/deps/cares/src/lib/ares_options.c @@ -54,9 +54,9 @@ void ares_destroy_options(struct ares_options *options) static struct in_addr *ares_save_opt_servers(const ares_channel_t *channel, int *nservers) { - ares__slist_node_t *snode; - struct in_addr *out = - ares_malloc_zero(ares__slist_len(channel->servers) * sizeof(*out)); + ares_slist_node_t *snode; + struct in_addr *out = + ares_malloc_zero(ares_slist_len(channel->servers) * sizeof(*out)); *nservers = 0; @@ -64,9 +64,9 @@ static struct in_addr *ares_save_opt_servers(const ares_channel_t *channel, return NULL; } - for (snode = ares__slist_node_first(channel->servers); snode != NULL; - snode = ares__slist_node_next(snode)) { - const ares_server_t *server = ares__slist_node_val(snode); + for (snode = ares_slist_node_first(channel->servers); snode != NULL; + snode = ares_slist_node_next(snode)) { + const ares_server_t *server = ares_slist_node_val(snode); if (server->addr.family != AF_INET) { continue; @@ -111,7 +111,7 @@ int ares_save_options(const ares_channel_t *channel, } /* We convert ARES_OPT_TIMEOUT to ARES_OPT_TIMEOUTMS in - * ares__init_by_options() */ + * ares_init_by_options() */ if (channel->optmask & ARES_OPT_TIMEOUTMS) { options->timeout = (int)channel->timeout; } @@ -238,28 +238,28 @@ int ares_save_options(const ares_channel_t *channel, return ARES_SUCCESS; } -static ares_status_t ares__init_options_servers(ares_channel_t *channel, - const struct in_addr *servers, - size_t nservers) +static ares_status_t ares_init_options_servers(ares_channel_t *channel, + const struct in_addr *servers, + size_t nservers) { - ares__llist_t *slist = NULL; - ares_status_t status; + ares_llist_t *slist = NULL; + ares_status_t status; - status = ares_in_addr_to_server_config_llist(servers, nservers, &slist); + status = ares_in_addr_to_sconfig_llist(servers, nservers, &slist); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } - status = ares__servers_update(channel, slist, ARES_TRUE); + status = ares_servers_update(channel, slist, ARES_TRUE); - ares__llist_destroy(slist); + ares_llist_destroy(slist); return status; } -ares_status_t ares__init_by_options(ares_channel_t *channel, - const struct ares_options *options, - int optmask) +ares_status_t ares_init_by_options(ares_channel_t *channel, + const struct ares_options *options, + int optmask) { size_t i; @@ -472,8 +472,8 @@ ares_status_t ares__init_by_options(ares_channel_t *channel, optmask &= ~(ARES_OPT_SERVERS); } else { ares_status_t status; - status = ares__init_options_servers(channel, options->servers, - (size_t)options->nservers); + status = ares_init_options_servers(channel, options->servers, + (size_t)options->nservers); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } diff --git a/deps/cares/src/lib/ares__parse_into_addrinfo.c b/deps/cares/src/lib/ares_parse_into_addrinfo.c similarity index 89% rename from deps/cares/src/lib/ares__parse_into_addrinfo.c rename to deps/cares/src/lib/ares_parse_into_addrinfo.c index 65c94c0401441b..2108f9b8615816 100644 --- a/deps/cares/src/lib/ares__parse_into_addrinfo.c +++ b/deps/cares/src/lib/ares_parse_into_addrinfo.c @@ -45,10 +45,10 @@ #endif -ares_status_t ares__parse_into_addrinfo(const ares_dns_record_t *dnsrec, - ares_bool_t cname_only_is_enodata, - unsigned short port, - struct ares_addrinfo *ai) +ares_status_t ares_parse_into_addrinfo(const ares_dns_record_t *dnsrec, + ares_bool_t cname_only_is_enodata, + unsigned short port, + struct ares_addrinfo *ai) { ares_status_t status; size_t i; @@ -90,7 +90,7 @@ ares_status_t ares__parse_into_addrinfo(const ares_dns_record_t *dnsrec, * * rname = ares_dns_rr_get_name(rr); * if ((rtype == ARES_REC_TYPE_A || rtype == ARES_REC_TYPE_AAAA) && - * strcasecmp(rname, hostname) != 0) { + * !ares_strcaseeq(rname, hostname)) { * continue; * } */ @@ -103,7 +103,7 @@ ares_status_t ares__parse_into_addrinfo(const ares_dns_record_t *dnsrec, * SA: Seems wrong as it introduces order dependency. */ hostname = ares_dns_rr_get_str(rr, ARES_RR_CNAME_CNAME); - cname = ares__append_addrinfo_cname(&cnames); + cname = ares_append_addrinfo_cname(&cnames); if (cname == NULL) { status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ goto done; /* LCOV_EXCL_LINE: OutOfMemory */ @@ -147,7 +147,7 @@ ares_status_t ares__parse_into_addrinfo(const ares_dns_record_t *dnsrec, } /* save the hostname as ai->name */ - if (ai->name == NULL || strcasecmp(ai->name, hostname) != 0) { + if (ai->name == NULL || !ares_strcaseeq(ai->name, hostname)) { ares_free(ai->name); ai->name = ares_strdup(hostname); if (ai->name == NULL) { @@ -157,18 +157,18 @@ ares_status_t ares__parse_into_addrinfo(const ares_dns_record_t *dnsrec, } if (got_a || got_aaaa) { - ares__addrinfo_cat_nodes(&ai->nodes, nodes); + ares_addrinfo_cat_nodes(&ai->nodes, nodes); nodes = NULL; } if (got_cname) { - ares__addrinfo_cat_cnames(&ai->cnames, cnames); + ares_addrinfo_cat_cnames(&ai->cnames, cnames); cnames = NULL; } done: - ares__freeaddrinfo_cnames(cnames); - ares__freeaddrinfo_nodes(nodes); + ares_freeaddrinfo_cnames(cnames); + ares_freeaddrinfo_nodes(nodes); /* compatibility */ if (status == ARES_EBADNAME) { diff --git a/deps/cares/src/lib/ares_platform.c b/deps/cares/src/lib/ares_platform.c deleted file mode 100644 index 8f0a1dbffb8173..00000000000000 --- a/deps/cares/src/lib/ares_platform.c +++ /dev/null @@ -1,11047 +0,0 @@ -/* MIT License - * - * Copyright (c) 1998 Massachusetts Institute of Technology - * Copyright (c) 2004 Daniel Stenberg - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * SPDX-License-Identifier: MIT - */ - -#include "ares_private.h" -#include "ares_platform.h" - -#if defined(_WIN32) && !defined(MSDOS) - -# define V_PLATFORM_WIN32s 0 -# define V_PLATFORM_WIN32_WINDOWS 1 -# define V_PLATFORM_WIN32_NT 2 -# define V_PLATFORM_WIN32_CE 3 - -win_platform ares__getplatform(void) -{ - OSVERSIONINFOEX OsvEx; - - memset(&OsvEx, 0, sizeof(OsvEx)); - OsvEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); -# ifdef _MSC_VER -# pragma warning(push) -# pragma warning(disable : 4996) /* warning C4996: 'GetVersionExW': was \ - declared deprecated */ -# endif - if (!GetVersionEx((void *)&OsvEx)) { - memset(&OsvEx, 0, sizeof(OsvEx)); - OsvEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - if (!GetVersionEx((void *)&OsvEx)) { - return WIN_UNKNOWN; - } - } -# ifdef _MSC_VER -# pragma warning(pop) -# endif - - switch (OsvEx.dwPlatformId) { - case V_PLATFORM_WIN32s: - return WIN_3X; - - case V_PLATFORM_WIN32_WINDOWS: - return WIN_9X; - - case V_PLATFORM_WIN32_NT: - return WIN_NT; - - case V_PLATFORM_WIN32_CE: - return WIN_CE; - - default: - return WIN_UNKNOWN; - } -} - -#endif /* _WIN32 && ! MSDOS */ - -#if defined(_WIN32_WCE) - -/* IANA Well Known Ports are in range 0-1023 */ -# define USE_IANA_WELL_KNOWN_PORTS 1 - -/* IANA Registered Ports are in range 1024-49151 */ -# define USE_IANA_REGISTERED_PORTS 1 - -struct pvt_servent { - char *s_name; - char **s_aliases; - unsigned short s_port; - char *s_proto; -}; - -/* - * Ref: http://www.iana.org/assignments/port-numbers - */ - -static struct pvt_servent IANAports[] = { -# ifdef USE_IANA_WELL_KNOWN_PORTS - { "tcpmux", { NULL }, 1, "tcp" }, - { "tcpmux", { NULL }, 1, "udp" }, - { "compressnet", { NULL }, 2, "tcp" }, - { "compressnet", { NULL }, 2, "udp" }, - { "compressnet", { NULL }, 3, "tcp" }, - { "compressnet", { NULL }, 3, "udp" }, - { "rje", { NULL }, 5, "tcp" }, - { "rje", { NULL }, 5, "udp" }, - { "echo", { NULL }, 7, "tcp" }, - { "echo", { NULL }, 7, "udp" }, - { "discard", { NULL }, 9, "tcp" }, - { "discard", { NULL }, 9, "udp" }, - { "discard", { NULL }, 9, "sctp" }, - { "discard", { NULL }, 9, "dccp" }, - { "systat", { NULL }, 11, "tcp" }, - { "systat", { NULL }, 11, "udp" }, - { "daytime", { NULL }, 13, "tcp" }, - { "daytime", { NULL }, 13, "udp" }, - { "qotd", { NULL }, 17, "tcp" }, - { "qotd", { NULL }, 17, "udp" }, - { "msp", { NULL }, 18, "tcp" }, - { "msp", { NULL }, 18, "udp" }, - { "chargen", { NULL }, 19, "tcp" }, - { "chargen", { NULL }, 19, "udp" }, - { "ftp-data", { NULL }, 20, "tcp" }, - { "ftp-data", { NULL }, 20, "udp" }, - { "ftp-data", { NULL }, 20, "sctp" }, - { "ftp", { NULL }, 21, "tcp" }, - { "ftp", { NULL }, 21, "udp" }, - { "ftp", { NULL }, 21, "sctp" }, - { "ssh", { NULL }, 22, "tcp" }, - { "ssh", { NULL }, 22, "udp" }, - { "ssh", { NULL }, 22, "sctp" }, - { "telnet", { NULL }, 23, "tcp" }, - { "telnet", { NULL }, 23, "udp" }, - { "smtp", { NULL }, 25, "tcp" }, - { "smtp", { NULL }, 25, "udp" }, - { "nsw-fe", { NULL }, 27, "tcp" }, - { "nsw-fe", { NULL }, 27, "udp" }, - { "msg-icp", { NULL }, 29, "tcp" }, - { "msg-icp", { NULL }, 29, "udp" }, - { "msg-auth", { NULL }, 31, "tcp" }, - { "msg-auth", { NULL }, 31, "udp" }, - { "dsp", { NULL }, 33, "tcp" }, - { "dsp", { NULL }, 33, "udp" }, - { "time", { NULL }, 37, "tcp" }, - { "time", { NULL }, 37, "udp" }, - { "rap", { NULL }, 38, "tcp" }, - { "rap", { NULL }, 38, "udp" }, - { "rlp", { NULL }, 39, "tcp" }, - { "rlp", { NULL }, 39, "udp" }, - { "graphics", { NULL }, 41, "tcp" }, - { "graphics", { NULL }, 41, "udp" }, - { "name", { NULL }, 42, "tcp" }, - { "name", { NULL }, 42, "udp" }, - { "nameserver", { NULL }, 42, "tcp" }, - { "nameserver", { NULL }, 42, "udp" }, - { "nicname", { NULL }, 43, "tcp" }, - { "nicname", { NULL }, 43, "udp" }, - { "mpm-flags", { NULL }, 44, "tcp" }, - { "mpm-flags", { NULL }, 44, "udp" }, - { "mpm", { NULL }, 45, "tcp" }, - { "mpm", { NULL }, 45, "udp" }, - { "mpm-snd", { NULL }, 46, "tcp" }, - { "mpm-snd", { NULL }, 46, "udp" }, - { "ni-ftp", { NULL }, 47, "tcp" }, - { "ni-ftp", { NULL }, 47, "udp" }, - { "auditd", { NULL }, 48, "tcp" }, - { "auditd", { NULL }, 48, "udp" }, - { "tacacs", { NULL }, 49, "tcp" }, - { "tacacs", { NULL }, 49, "udp" }, - { "re-mail-ck", { NULL }, 50, "tcp" }, - { "re-mail-ck", { NULL }, 50, "udp" }, - { "la-maint", { NULL }, 51, "tcp" }, - { "la-maint", { NULL }, 51, "udp" }, - { "xns-time", { NULL }, 52, "tcp" }, - { "xns-time", { NULL }, 52, "udp" }, - { "domain", { NULL }, 53, "tcp" }, - { "domain", { NULL }, 53, "udp" }, - { "xns-ch", { NULL }, 54, "tcp" }, - { "xns-ch", { NULL }, 54, "udp" }, - { "isi-gl", { NULL }, 55, "tcp" }, - { "isi-gl", { NULL }, 55, "udp" }, - { "xns-auth", { NULL }, 56, "tcp" }, - { "xns-auth", { NULL }, 56, "udp" }, - { "xns-mail", { NULL }, 58, "tcp" }, - { "xns-mail", { NULL }, 58, "udp" }, - { "ni-mail", { NULL }, 61, "tcp" }, - { "ni-mail", { NULL }, 61, "udp" }, - { "acas", { NULL }, 62, "tcp" }, - { "acas", { NULL }, 62, "udp" }, - { "whois++", { NULL }, 63, "tcp" }, - { "whois++", { NULL }, 63, "udp" }, - { "covia", { NULL }, 64, "tcp" }, - { "covia", { NULL }, 64, "udp" }, - { "tacacs-ds", { NULL }, 65, "tcp" }, - { "tacacs-ds", { NULL }, 65, "udp" }, - { "sql*net", { NULL }, 66, "tcp" }, - { "sql*net", { NULL }, 66, "udp" }, - { "bootps", { NULL }, 67, "tcp" }, - { "bootps", { NULL }, 67, "udp" }, - { "bootpc", { NULL }, 68, "tcp" }, - { "bootpc", { NULL }, 68, "udp" }, - { "tftp", { NULL }, 69, "tcp" }, - { "tftp", { NULL }, 69, "udp" }, - { "gopher", { NULL }, 70, "tcp" }, - { "gopher", { NULL }, 70, "udp" }, - { "netrjs-1", { NULL }, 71, "tcp" }, - { "netrjs-1", { NULL }, 71, "udp" }, - { "netrjs-2", { NULL }, 72, "tcp" }, - { "netrjs-2", { NULL }, 72, "udp" }, - { "netrjs-3", { NULL }, 73, "tcp" }, - { "netrjs-3", { NULL }, 73, "udp" }, - { "netrjs-4", { NULL }, 74, "tcp" }, - { "netrjs-4", { NULL }, 74, "udp" }, - { "deos", { NULL }, 76, "tcp" }, - { "deos", { NULL }, 76, "udp" }, - { "vettcp", { NULL }, 78, "tcp" }, - { "vettcp", { NULL }, 78, "udp" }, - { "finger", { NULL }, 79, "tcp" }, - { "finger", { NULL }, 79, "udp" }, - { "http", { NULL }, 80, "tcp" }, - { "http", { NULL }, 80, "udp" }, - { "www", { NULL }, 80, "tcp" }, - { "www", { NULL }, 80, "udp" }, - { "www-http", { NULL }, 80, "tcp" }, - { "www-http", { NULL }, 80, "udp" }, - { "http", { NULL }, 80, "sctp" }, - { "xfer", { NULL }, 82, "tcp" }, - { "xfer", { NULL }, 82, "udp" }, - { "mit-ml-dev", { NULL }, 83, "tcp" }, - { "mit-ml-dev", { NULL }, 83, "udp" }, - { "ctf", { NULL }, 84, "tcp" }, - { "ctf", { NULL }, 84, "udp" }, - { "mit-ml-dev", { NULL }, 85, "tcp" }, - { "mit-ml-dev", { NULL }, 85, "udp" }, - { "mfcobol", { NULL }, 86, "tcp" }, - { "mfcobol", { NULL }, 86, "udp" }, - { "kerberos", { NULL }, 88, "tcp" }, - { "kerberos", { NULL }, 88, "udp" }, - { "su-mit-tg", { NULL }, 89, "tcp" }, - { "su-mit-tg", { NULL }, 89, "udp" }, - { "dnsix", { NULL }, 90, "tcp" }, - { "dnsix", { NULL }, 90, "udp" }, - { "mit-dov", { NULL }, 91, "tcp" }, - { "mit-dov", { NULL }, 91, "udp" }, - { "npp", { NULL }, 92, "tcp" }, - { "npp", { NULL }, 92, "udp" }, - { "dcp", { NULL }, 93, "tcp" }, - { "dcp", { NULL }, 93, "udp" }, - { "objcall", { NULL }, 94, "tcp" }, - { "objcall", { NULL }, 94, "udp" }, - { "supdup", { NULL }, 95, "tcp" }, - { "supdup", { NULL }, 95, "udp" }, - { "dixie", { NULL }, 96, "tcp" }, - { "dixie", { NULL }, 96, "udp" }, - { "swift-rvf", { NULL }, 97, "tcp" }, - { "swift-rvf", { NULL }, 97, "udp" }, - { "tacnews", { NULL }, 98, "tcp" }, - { "tacnews", { NULL }, 98, "udp" }, - { "metagram", { NULL }, 99, "tcp" }, - { "metagram", { NULL }, 99, "udp" }, - { "newacct", { NULL }, 100, "tcp" }, - { "hostname", { NULL }, 101, "tcp" }, - { "hostname", { NULL }, 101, "udp" }, - { "iso-tsap", { NULL }, 102, "tcp" }, - { "iso-tsap", { NULL }, 102, "udp" }, - { "gppitnp", { NULL }, 103, "tcp" }, - { "gppitnp", { NULL }, 103, "udp" }, - { "acr-nema", { NULL }, 104, "tcp" }, - { "acr-nema", { NULL }, 104, "udp" }, - { "cso", { NULL }, 105, "tcp" }, - { "cso", { NULL }, 105, "udp" }, - { "csnet-ns", { NULL }, 105, "tcp" }, - { "csnet-ns", { NULL }, 105, "udp" }, - { "3com-tsmux", { NULL }, 106, "tcp" }, - { "3com-tsmux", { NULL }, 106, "udp" }, - { "rtelnet", { NULL }, 107, "tcp" }, - { "rtelnet", { NULL }, 107, "udp" }, - { "snagas", { NULL }, 108, "tcp" }, - { "snagas", { NULL }, 108, "udp" }, - { "pop2", { NULL }, 109, "tcp" }, - { "pop2", { NULL }, 109, "udp" }, - { "pop3", { NULL }, 110, "tcp" }, - { "pop3", { NULL }, 110, "udp" }, - { "sunrpc", { NULL }, 111, "tcp" }, - { "sunrpc", { NULL }, 111, "udp" }, - { "mcidas", { NULL }, 112, "tcp" }, - { "mcidas", { NULL }, 112, "udp" }, - { "ident", { NULL }, 113, "tcp" }, - { "auth", { NULL }, 113, "tcp" }, - { "auth", { NULL }, 113, "udp" }, - { "sftp", { NULL }, 115, "tcp" }, - { "sftp", { NULL }, 115, "udp" }, - { "ansanotify", { NULL }, 116, "tcp" }, - { "ansanotify", { NULL }, 116, "udp" }, - { "uucp-path", { NULL }, 117, "tcp" }, - { "uucp-path", { NULL }, 117, "udp" }, - { "sqlserv", { NULL }, 118, "tcp" }, - { "sqlserv", { NULL }, 118, "udp" }, - { "nntp", { NULL }, 119, "tcp" }, - { "nntp", { NULL }, 119, "udp" }, - { "cfdptkt", { NULL }, 120, "tcp" }, - { "cfdptkt", { NULL }, 120, "udp" }, - { "erpc", { NULL }, 121, "tcp" }, - { "erpc", { NULL }, 121, "udp" }, - { "smakynet", { NULL }, 122, "tcp" }, - { "smakynet", { NULL }, 122, "udp" }, - { "ntp", { NULL }, 123, "tcp" }, - { "ntp", { NULL }, 123, "udp" }, - { "ansatrader", { NULL }, 124, "tcp" }, - { "ansatrader", { NULL }, 124, "udp" }, - { "locus-map", { NULL }, 125, "tcp" }, - { "locus-map", { NULL }, 125, "udp" }, - { "nxedit", { NULL }, 126, "tcp" }, - { "nxedit", { NULL }, 126, "udp" }, - { "locus-con", { NULL }, 127, "tcp" }, - { "locus-con", { NULL }, 127, "udp" }, - { "gss-xlicen", { NULL }, 128, "tcp" }, - { "gss-xlicen", { NULL }, 128, "udp" }, - { "pwdgen", { NULL }, 129, "tcp" }, - { "pwdgen", { NULL }, 129, "udp" }, - { "cisco-fna", { NULL }, 130, "tcp" }, - { "cisco-fna", { NULL }, 130, "udp" }, - { "cisco-tna", { NULL }, 131, "tcp" }, - { "cisco-tna", { NULL }, 131, "udp" }, - { "cisco-sys", { NULL }, 132, "tcp" }, - { "cisco-sys", { NULL }, 132, "udp" }, - { "statsrv", { NULL }, 133, "tcp" }, - { "statsrv", { NULL }, 133, "udp" }, - { "ingres-net", { NULL }, 134, "tcp" }, - { "ingres-net", { NULL }, 134, "udp" }, - { "epmap", { NULL }, 135, "tcp" }, - { "epmap", { NULL }, 135, "udp" }, - { "profile", { NULL }, 136, "tcp" }, - { "profile", { NULL }, 136, "udp" }, - { "netbios-ns", { NULL }, 137, "tcp" }, - { "netbios-ns", { NULL }, 137, "udp" }, - { "netbios-dgm", { NULL }, 138, "tcp" }, - { "netbios-dgm", { NULL }, 138, "udp" }, - { "netbios-ssn", { NULL }, 139, "tcp" }, - { "netbios-ssn", { NULL }, 139, "udp" }, - { "emfis-data", { NULL }, 140, "tcp" }, - { "emfis-data", { NULL }, 140, "udp" }, - { "emfis-cntl", { NULL }, 141, "tcp" }, - { "emfis-cntl", { NULL }, 141, "udp" }, - { "bl-idm", { NULL }, 142, "tcp" }, - { "bl-idm", { NULL }, 142, "udp" }, - { "imap", { NULL }, 143, "tcp" }, - { "imap", { NULL }, 143, "udp" }, - { "uma", { NULL }, 144, "tcp" }, - { "uma", { NULL }, 144, "udp" }, - { "uaac", { NULL }, 145, "tcp" }, - { "uaac", { NULL }, 145, "udp" }, - { "iso-tp0", { NULL }, 146, "tcp" }, - { "iso-tp0", { NULL }, 146, "udp" }, - { "iso-ip", { NULL }, 147, "tcp" }, - { "iso-ip", { NULL }, 147, "udp" }, - { "jargon", { NULL }, 148, "tcp" }, - { "jargon", { NULL }, 148, "udp" }, - { "aed-512", { NULL }, 149, "tcp" }, - { "aed-512", { NULL }, 149, "udp" }, - { "sql-net", { NULL }, 150, "tcp" }, - { "sql-net", { NULL }, 150, "udp" }, - { "hems", { NULL }, 151, "tcp" }, - { "hems", { NULL }, 151, "udp" }, - { "bftp", { NULL }, 152, "tcp" }, - { "bftp", { NULL }, 152, "udp" }, - { "sgmp", { NULL }, 153, "tcp" }, - { "sgmp", { NULL }, 153, "udp" }, - { "netsc-prod", { NULL }, 154, "tcp" }, - { "netsc-prod", { NULL }, 154, "udp" }, - { "netsc-dev", { NULL }, 155, "tcp" }, - { "netsc-dev", { NULL }, 155, "udp" }, - { "sqlsrv", { NULL }, 156, "tcp" }, - { "sqlsrv", { NULL }, 156, "udp" }, - { "knet-cmp", { NULL }, 157, "tcp" }, - { "knet-cmp", { NULL }, 157, "udp" }, - { "pcmail-srv", { NULL }, 158, "tcp" }, - { "pcmail-srv", { NULL }, 158, "udp" }, - { "nss-routing", { NULL }, 159, "tcp" }, - { "nss-routing", { NULL }, 159, "udp" }, - { "sgmp-traps", { NULL }, 160, "tcp" }, - { "sgmp-traps", { NULL }, 160, "udp" }, - { "snmp", { NULL }, 161, "tcp" }, - { "snmp", { NULL }, 161, "udp" }, - { "snmptrap", { NULL }, 162, "tcp" }, - { "snmptrap", { NULL }, 162, "udp" }, - { "cmip-man", { NULL }, 163, "tcp" }, - { "cmip-man", { NULL }, 163, "udp" }, - { "cmip-agent", { NULL }, 164, "tcp" }, - { "cmip-agent", { NULL }, 164, "udp" }, - { "xns-courier", { NULL }, 165, "tcp" }, - { "xns-courier", { NULL }, 165, "udp" }, - { "s-net", { NULL }, 166, "tcp" }, - { "s-net", { NULL }, 166, "udp" }, - { "namp", { NULL }, 167, "tcp" }, - { "namp", { NULL }, 167, "udp" }, - { "rsvd", { NULL }, 168, "tcp" }, - { "rsvd", { NULL }, 168, "udp" }, - { "send", { NULL }, 169, "tcp" }, - { "send", { NULL }, 169, "udp" }, - { "print-srv", { NULL }, 170, "tcp" }, - { "print-srv", { NULL }, 170, "udp" }, - { "multiplex", { NULL }, 171, "tcp" }, - { "multiplex", { NULL }, 171, "udp" }, - { "cl/1", { NULL }, 172, "tcp" }, - { "cl/1", { NULL }, 172, "udp" }, - { "xyplex-mux", { NULL }, 173, "tcp" }, - { "xyplex-mux", { NULL }, 173, "udp" }, - { "mailq", { NULL }, 174, "tcp" }, - { "mailq", { NULL }, 174, "udp" }, - { "vmnet", { NULL }, 175, "tcp" }, - { "vmnet", { NULL }, 175, "udp" }, - { "genrad-mux", { NULL }, 176, "tcp" }, - { "genrad-mux", { NULL }, 176, "udp" }, - { "xdmcp", { NULL }, 177, "tcp" }, - { "xdmcp", { NULL }, 177, "udp" }, - { "nextstep", { NULL }, 178, "tcp" }, - { "nextstep", { NULL }, 178, "udp" }, - { "bgp", { NULL }, 179, "tcp" }, - { "bgp", { NULL }, 179, "udp" }, - { "bgp", { NULL }, 179, "sctp" }, - { "ris", { NULL }, 180, "tcp" }, - { "ris", { NULL }, 180, "udp" }, - { "unify", { NULL }, 181, "tcp" }, - { "unify", { NULL }, 181, "udp" }, - { "audit", { NULL }, 182, "tcp" }, - { "audit", { NULL }, 182, "udp" }, - { "ocbinder", { NULL }, 183, "tcp" }, - { "ocbinder", { NULL }, 183, "udp" }, - { "ocserver", { NULL }, 184, "tcp" }, - { "ocserver", { NULL }, 184, "udp" }, - { "remote-kis", { NULL }, 185, "tcp" }, - { "remote-kis", { NULL }, 185, "udp" }, - { "kis", { NULL }, 186, "tcp" }, - { "kis", { NULL }, 186, "udp" }, - { "aci", { NULL }, 187, "tcp" }, - { "aci", { NULL }, 187, "udp" }, - { "mumps", { NULL }, 188, "tcp" }, - { "mumps", { NULL }, 188, "udp" }, - { "qft", { NULL }, 189, "tcp" }, - { "qft", { NULL }, 189, "udp" }, - { "gacp", { NULL }, 190, "tcp" }, - { "gacp", { NULL }, 190, "udp" }, - { "prospero", { NULL }, 191, "tcp" }, - { "prospero", { NULL }, 191, "udp" }, - { "osu-nms", { NULL }, 192, "tcp" }, - { "osu-nms", { NULL }, 192, "udp" }, - { "srmp", { NULL }, 193, "tcp" }, - { "srmp", { NULL }, 193, "udp" }, - { "irc", { NULL }, 194, "tcp" }, - { "irc", { NULL }, 194, "udp" }, - { "dn6-nlm-aud", { NULL }, 195, "tcp" }, - { "dn6-nlm-aud", { NULL }, 195, "udp" }, - { "dn6-smm-red", { NULL }, 196, "tcp" }, - { "dn6-smm-red", { NULL }, 196, "udp" }, - { "dls", { NULL }, 197, "tcp" }, - { "dls", { NULL }, 197, "udp" }, - { "dls-mon", { NULL }, 198, "tcp" }, - { "dls-mon", { NULL }, 198, "udp" }, - { "smux", { NULL }, 199, "tcp" }, - { "smux", { NULL }, 199, "udp" }, - { "src", { NULL }, 200, "tcp" }, - { "src", { NULL }, 200, "udp" }, - { "at-rtmp", { NULL }, 201, "tcp" }, - { "at-rtmp", { NULL }, 201, "udp" }, - { "at-nbp", { NULL }, 202, "tcp" }, - { "at-nbp", { NULL }, 202, "udp" }, - { "at-3", { NULL }, 203, "tcp" }, - { "at-3", { NULL }, 203, "udp" }, - { "at-echo", { NULL }, 204, "tcp" }, - { "at-echo", { NULL }, 204, "udp" }, - { "at-5", { NULL }, 205, "tcp" }, - { "at-5", { NULL }, 205, "udp" }, - { "at-zis", { NULL }, 206, "tcp" }, - { "at-zis", { NULL }, 206, "udp" }, - { "at-7", { NULL }, 207, "tcp" }, - { "at-7", { NULL }, 207, "udp" }, - { "at-8", { NULL }, 208, "tcp" }, - { "at-8", { NULL }, 208, "udp" }, - { "qmtp", { NULL }, 209, "tcp" }, - { "qmtp", { NULL }, 209, "udp" }, - { "z39.50", { NULL }, 210, "tcp" }, - { "z39.50", { NULL }, 210, "udp" }, - { "914c/g", { NULL }, 211, "tcp" }, - { "914c/g", { NULL }, 211, "udp" }, - { "anet", { NULL }, 212, "tcp" }, - { "anet", { NULL }, 212, "udp" }, - { "ipx", { NULL }, 213, "tcp" }, - { "ipx", { NULL }, 213, "udp" }, - { "vmpwscs", { NULL }, 214, "tcp" }, - { "vmpwscs", { NULL }, 214, "udp" }, - { "softpc", { NULL }, 215, "tcp" }, - { "softpc", { NULL }, 215, "udp" }, - { "CAIlic", { NULL }, 216, "tcp" }, - { "CAIlic", { NULL }, 216, "udp" }, - { "dbase", { NULL }, 217, "tcp" }, - { "dbase", { NULL }, 217, "udp" }, - { "mpp", { NULL }, 218, "tcp" }, - { "mpp", { NULL }, 218, "udp" }, - { "uarps", { NULL }, 219, "tcp" }, - { "uarps", { NULL }, 219, "udp" }, - { "imap3", { NULL }, 220, "tcp" }, - { "imap3", { NULL }, 220, "udp" }, - { "fln-spx", { NULL }, 221, "tcp" }, - { "fln-spx", { NULL }, 221, "udp" }, - { "rsh-spx", { NULL }, 222, "tcp" }, - { "rsh-spx", { NULL }, 222, "udp" }, - { "cdc", { NULL }, 223, "tcp" }, - { "cdc", { NULL }, 223, "udp" }, - { "masqdialer", { NULL }, 224, "tcp" }, - { "masqdialer", { NULL }, 224, "udp" }, - { "direct", { NULL }, 242, "tcp" }, - { "direct", { NULL }, 242, "udp" }, - { "sur-meas", { NULL }, 243, "tcp" }, - { "sur-meas", { NULL }, 243, "udp" }, - { "inbusiness", { NULL }, 244, "tcp" }, - { "inbusiness", { NULL }, 244, "udp" }, - { "link", { NULL }, 245, "tcp" }, - { "link", { NULL }, 245, "udp" }, - { "dsp3270", { NULL }, 246, "tcp" }, - { "dsp3270", { NULL }, 246, "udp" }, - { "subntbcst_tftp", { NULL }, 247, "tcp" }, - { "subntbcst_tftp", { NULL }, 247, "udp" }, - { "bhfhs", { NULL }, 248, "tcp" }, - { "bhfhs", { NULL }, 248, "udp" }, - { "rap", { NULL }, 256, "tcp" }, - { "rap", { NULL }, 256, "udp" }, - { "set", { NULL }, 257, "tcp" }, - { "set", { NULL }, 257, "udp" }, - { "esro-gen", { NULL }, 259, "tcp" }, - { "esro-gen", { NULL }, 259, "udp" }, - { "openport", { NULL }, 260, "tcp" }, - { "openport", { NULL }, 260, "udp" }, - { "nsiiops", { NULL }, 261, "tcp" }, - { "nsiiops", { NULL }, 261, "udp" }, - { "arcisdms", { NULL }, 262, "tcp" }, - { "arcisdms", { NULL }, 262, "udp" }, - { "hdap", { NULL }, 263, "tcp" }, - { "hdap", { NULL }, 263, "udp" }, - { "bgmp", { NULL }, 264, "tcp" }, - { "bgmp", { NULL }, 264, "udp" }, - { "x-bone-ctl", { NULL }, 265, "tcp" }, - { "x-bone-ctl", { NULL }, 265, "udp" }, - { "sst", { NULL }, 266, "tcp" }, - { "sst", { NULL }, 266, "udp" }, - { "td-service", { NULL }, 267, "tcp" }, - { "td-service", { NULL }, 267, "udp" }, - { "td-replica", { NULL }, 268, "tcp" }, - { "td-replica", { NULL }, 268, "udp" }, - { "manet", { NULL }, 269, "tcp" }, - { "manet", { NULL }, 269, "udp" }, - { "gist", { NULL }, 270, "udp" }, - { "http-mgmt", { NULL }, 280, "tcp" }, - { "http-mgmt", { NULL }, 280, "udp" }, - { "personal-link", { NULL }, 281, "tcp" }, - { "personal-link", { NULL }, 281, "udp" }, - { "cableport-ax", { NULL }, 282, "tcp" }, - { "cableport-ax", { NULL }, 282, "udp" }, - { "rescap", { NULL }, 283, "tcp" }, - { "rescap", { NULL }, 283, "udp" }, - { "corerjd", { NULL }, 284, "tcp" }, - { "corerjd", { NULL }, 284, "udp" }, - { "fxp", { NULL }, 286, "tcp" }, - { "fxp", { NULL }, 286, "udp" }, - { "k-block", { NULL }, 287, "tcp" }, - { "k-block", { NULL }, 287, "udp" }, - { "novastorbakcup", { NULL }, 308, "tcp" }, - { "novastorbakcup", { NULL }, 308, "udp" }, - { "entrusttime", { NULL }, 309, "tcp" }, - { "entrusttime", { NULL }, 309, "udp" }, - { "bhmds", { NULL }, 310, "tcp" }, - { "bhmds", { NULL }, 310, "udp" }, - { "asip-webadmin", { NULL }, 311, "tcp" }, - { "asip-webadmin", { NULL }, 311, "udp" }, - { "vslmp", { NULL }, 312, "tcp" }, - { "vslmp", { NULL }, 312, "udp" }, - { "magenta-logic", { NULL }, 313, "tcp" }, - { "magenta-logic", { NULL }, 313, "udp" }, - { "opalis-robot", { NULL }, 314, "tcp" }, - { "opalis-robot", { NULL }, 314, "udp" }, - { "dpsi", { NULL }, 315, "tcp" }, - { "dpsi", { NULL }, 315, "udp" }, - { "decauth", { NULL }, 316, "tcp" }, - { "decauth", { NULL }, 316, "udp" }, - { "zannet", { NULL }, 317, "tcp" }, - { "zannet", { NULL }, 317, "udp" }, - { "pkix-timestamp", { NULL }, 318, "tcp" }, - { "pkix-timestamp", { NULL }, 318, "udp" }, - { "ptp-event", { NULL }, 319, "tcp" }, - { "ptp-event", { NULL }, 319, "udp" }, - { "ptp-general", { NULL }, 320, "tcp" }, - { "ptp-general", { NULL }, 320, "udp" }, - { "pip", { NULL }, 321, "tcp" }, - { "pip", { NULL }, 321, "udp" }, - { "rtsps", { NULL }, 322, "tcp" }, - { "rtsps", { NULL }, 322, "udp" }, - { "texar", { NULL }, 333, "tcp" }, - { "texar", { NULL }, 333, "udp" }, - { "pdap", { NULL }, 344, "tcp" }, - { "pdap", { NULL }, 344, "udp" }, - { "pawserv", { NULL }, 345, "tcp" }, - { "pawserv", { NULL }, 345, "udp" }, - { "zserv", { NULL }, 346, "tcp" }, - { "zserv", { NULL }, 346, "udp" }, - { "fatserv", { NULL }, 347, "tcp" }, - { "fatserv", { NULL }, 347, "udp" }, - { "csi-sgwp", { NULL }, 348, "tcp" }, - { "csi-sgwp", { NULL }, 348, "udp" }, - { "mftp", { NULL }, 349, "tcp" }, - { "mftp", { NULL }, 349, "udp" }, - { "matip-type-a", { NULL }, 350, "tcp" }, - { "matip-type-a", { NULL }, 350, "udp" }, - { "matip-type-b", { NULL }, 351, "tcp" }, - { "matip-type-b", { NULL }, 351, "udp" }, - { "bhoetty", { NULL }, 351, "tcp" }, - { "bhoetty", { NULL }, 351, "udp" }, - { "dtag-ste-sb", { NULL }, 352, "tcp" }, - { "dtag-ste-sb", { NULL }, 352, "udp" }, - { "bhoedap4", { NULL }, 352, "tcp" }, - { "bhoedap4", { NULL }, 352, "udp" }, - { "ndsauth", { NULL }, 353, "tcp" }, - { "ndsauth", { NULL }, 353, "udp" }, - { "bh611", { NULL }, 354, "tcp" }, - { "bh611", { NULL }, 354, "udp" }, - { "datex-asn", { NULL }, 355, "tcp" }, - { "datex-asn", { NULL }, 355, "udp" }, - { "cloanto-net-1", { NULL }, 356, "tcp" }, - { "cloanto-net-1", { NULL }, 356, "udp" }, - { "bhevent", { NULL }, 357, "tcp" }, - { "bhevent", { NULL }, 357, "udp" }, - { "shrinkwrap", { NULL }, 358, "tcp" }, - { "shrinkwrap", { NULL }, 358, "udp" }, - { "nsrmp", { NULL }, 359, "tcp" }, - { "nsrmp", { NULL }, 359, "udp" }, - { "scoi2odialog", { NULL }, 360, "tcp" }, - { "scoi2odialog", { NULL }, 360, "udp" }, - { "semantix", { NULL }, 361, "tcp" }, - { "semantix", { NULL }, 361, "udp" }, - { "srssend", { NULL }, 362, "tcp" }, - { "srssend", { NULL }, 362, "udp" }, - { "rsvp_tunnel", { NULL }, 363, "tcp" }, - { "rsvp_tunnel", { NULL }, 363, "udp" }, - { "aurora-cmgr", { NULL }, 364, "tcp" }, - { "aurora-cmgr", { NULL }, 364, "udp" }, - { "dtk", { NULL }, 365, "tcp" }, - { "dtk", { NULL }, 365, "udp" }, - { "odmr", { NULL }, 366, "tcp" }, - { "odmr", { NULL }, 366, "udp" }, - { "mortgageware", { NULL }, 367, "tcp" }, - { "mortgageware", { NULL }, 367, "udp" }, - { "qbikgdp", { NULL }, 368, "tcp" }, - { "qbikgdp", { NULL }, 368, "udp" }, - { "rpc2portmap", { NULL }, 369, "tcp" }, - { "rpc2portmap", { NULL }, 369, "udp" }, - { "codaauth2", { NULL }, 370, "tcp" }, - { "codaauth2", { NULL }, 370, "udp" }, - { "clearcase", { NULL }, 371, "tcp" }, - { "clearcase", { NULL }, 371, "udp" }, - { "ulistproc", { NULL }, 372, "tcp" }, - { "ulistproc", { NULL }, 372, "udp" }, - { "legent-1", { NULL }, 373, "tcp" }, - { "legent-1", { NULL }, 373, "udp" }, - { "legent-2", { NULL }, 374, "tcp" }, - { "legent-2", { NULL }, 374, "udp" }, - { "hassle", { NULL }, 375, "tcp" }, - { "hassle", { NULL }, 375, "udp" }, - { "nip", { NULL }, 376, "tcp" }, - { "nip", { NULL }, 376, "udp" }, - { "tnETOS", { NULL }, 377, "tcp" }, - { "tnETOS", { NULL }, 377, "udp" }, - { "dsETOS", { NULL }, 378, "tcp" }, - { "dsETOS", { NULL }, 378, "udp" }, - { "is99c", { NULL }, 379, "tcp" }, - { "is99c", { NULL }, 379, "udp" }, - { "is99s", { NULL }, 380, "tcp" }, - { "is99s", { NULL }, 380, "udp" }, - { "hp-collector", { NULL }, 381, "tcp" }, - { "hp-collector", { NULL }, 381, "udp" }, - { "hp-managed-node", { NULL }, 382, "tcp" }, - { "hp-managed-node", { NULL }, 382, "udp" }, - { "hp-alarm-mgr", { NULL }, 383, "tcp" }, - { "hp-alarm-mgr", { NULL }, 383, "udp" }, - { "arns", { NULL }, 384, "tcp" }, - { "arns", { NULL }, 384, "udp" }, - { "ibm-app", { NULL }, 385, "tcp" }, - { "ibm-app", { NULL }, 385, "udp" }, - { "asa", { NULL }, 386, "tcp" }, - { "asa", { NULL }, 386, "udp" }, - { "aurp", { NULL }, 387, "tcp" }, - { "aurp", { NULL }, 387, "udp" }, - { "unidata-ldm", { NULL }, 388, "tcp" }, - { "unidata-ldm", { NULL }, 388, "udp" }, - { "ldap", { NULL }, 389, "tcp" }, - { "ldap", { NULL }, 389, "udp" }, - { "uis", { NULL }, 390, "tcp" }, - { "uis", { NULL }, 390, "udp" }, - { "synotics-relay", { NULL }, 391, "tcp" }, - { "synotics-relay", { NULL }, 391, "udp" }, - { "synotics-broker", { NULL }, 392, "tcp" }, - { "synotics-broker", { NULL }, 392, "udp" }, - { "meta5", { NULL }, 393, "tcp" }, - { "meta5", { NULL }, 393, "udp" }, - { "embl-ndt", { NULL }, 394, "tcp" }, - { "embl-ndt", { NULL }, 394, "udp" }, - { "netcp", { NULL }, 395, "tcp" }, - { "netcp", { NULL }, 395, "udp" }, - { "netware-ip", { NULL }, 396, "tcp" }, - { "netware-ip", { NULL }, 396, "udp" }, - { "mptn", { NULL }, 397, "tcp" }, - { "mptn", { NULL }, 397, "udp" }, - { "kryptolan", { NULL }, 398, "tcp" }, - { "kryptolan", { NULL }, 398, "udp" }, - { "iso-tsap-c2", { NULL }, 399, "tcp" }, - { "iso-tsap-c2", { NULL }, 399, "udp" }, - { "osb-sd", { NULL }, 400, "tcp" }, - { "osb-sd", { NULL }, 400, "udp" }, - { "ups", { NULL }, 401, "tcp" }, - { "ups", { NULL }, 401, "udp" }, - { "genie", { NULL }, 402, "tcp" }, - { "genie", { NULL }, 402, "udp" }, - { "decap", { NULL }, 403, "tcp" }, - { "decap", { NULL }, 403, "udp" }, - { "nced", { NULL }, 404, "tcp" }, - { "nced", { NULL }, 404, "udp" }, - { "ncld", { NULL }, 405, "tcp" }, - { "ncld", { NULL }, 405, "udp" }, - { "imsp", { NULL }, 406, "tcp" }, - { "imsp", { NULL }, 406, "udp" }, - { "timbuktu", { NULL }, 407, "tcp" }, - { "timbuktu", { NULL }, 407, "udp" }, - { "prm-sm", { NULL }, 408, "tcp" }, - { "prm-sm", { NULL }, 408, "udp" }, - { "prm-nm", { NULL }, 409, "tcp" }, - { "prm-nm", { NULL }, 409, "udp" }, - { "decladebug", { NULL }, 410, "tcp" }, - { "decladebug", { NULL }, 410, "udp" }, - { "rmt", { NULL }, 411, "tcp" }, - { "rmt", { NULL }, 411, "udp" }, - { "synoptics-trap", { NULL }, 412, "tcp" }, - { "synoptics-trap", { NULL }, 412, "udp" }, - { "smsp", { NULL }, 413, "tcp" }, - { "smsp", { NULL }, 413, "udp" }, - { "infoseek", { NULL }, 414, "tcp" }, - { "infoseek", { NULL }, 414, "udp" }, - { "bnet", { NULL }, 415, "tcp" }, - { "bnet", { NULL }, 415, "udp" }, - { "silverplatter", { NULL }, 416, "tcp" }, - { "silverplatter", { NULL }, 416, "udp" }, - { "onmux", { NULL }, 417, "tcp" }, - { "onmux", { NULL }, 417, "udp" }, - { "hyper-g", { NULL }, 418, "tcp" }, - { "hyper-g", { NULL }, 418, "udp" }, - { "ariel1", { NULL }, 419, "tcp" }, - { "ariel1", { NULL }, 419, "udp" }, - { "smpte", { NULL }, 420, "tcp" }, - { "smpte", { NULL }, 420, "udp" }, - { "ariel2", { NULL }, 421, "tcp" }, - { "ariel2", { NULL }, 421, "udp" }, - { "ariel3", { NULL }, 422, "tcp" }, - { "ariel3", { NULL }, 422, "udp" }, - { "opc-job-start", { NULL }, 423, "tcp" }, - { "opc-job-start", { NULL }, 423, "udp" }, - { "opc-job-track", { NULL }, 424, "tcp" }, - { "opc-job-track", { NULL }, 424, "udp" }, - { "icad-el", { NULL }, 425, "tcp" }, - { "icad-el", { NULL }, 425, "udp" }, - { "smartsdp", { NULL }, 426, "tcp" }, - { "smartsdp", { NULL }, 426, "udp" }, - { "svrloc", { NULL }, 427, "tcp" }, - { "svrloc", { NULL }, 427, "udp" }, - { "ocs_cmu", { NULL }, 428, "tcp" }, - { "ocs_cmu", { NULL }, 428, "udp" }, - { "ocs_amu", { NULL }, 429, "tcp" }, - { "ocs_amu", { NULL }, 429, "udp" }, - { "utmpsd", { NULL }, 430, "tcp" }, - { "utmpsd", { NULL }, 430, "udp" }, - { "utmpcd", { NULL }, 431, "tcp" }, - { "utmpcd", { NULL }, 431, "udp" }, - { "iasd", { NULL }, 432, "tcp" }, - { "iasd", { NULL }, 432, "udp" }, - { "nnsp", { NULL }, 433, "tcp" }, - { "nnsp", { NULL }, 433, "udp" }, - { "mobileip-agent", { NULL }, 434, "tcp" }, - { "mobileip-agent", { NULL }, 434, "udp" }, - { "mobilip-mn", { NULL }, 435, "tcp" }, - { "mobilip-mn", { NULL }, 435, "udp" }, - { "dna-cml", { NULL }, 436, "tcp" }, - { "dna-cml", { NULL }, 436, "udp" }, - { "comscm", { NULL }, 437, "tcp" }, - { "comscm", { NULL }, 437, "udp" }, - { "dsfgw", { NULL }, 438, "tcp" }, - { "dsfgw", { NULL }, 438, "udp" }, - { "dasp", { NULL }, 439, "tcp" }, - { "dasp", { NULL }, 439, "udp" }, - { "sgcp", { NULL }, 440, "tcp" }, - { "sgcp", { NULL }, 440, "udp" }, - { "decvms-sysmgt", { NULL }, 441, "tcp" }, - { "decvms-sysmgt", { NULL }, 441, "udp" }, - { "cvc_hostd", { NULL }, 442, "tcp" }, - { "cvc_hostd", { NULL }, 442, "udp" }, - { "https", { NULL }, 443, "tcp" }, - { "https", { NULL }, 443, "udp" }, - { "https", { NULL }, 443, "sctp" }, - { "snpp", { NULL }, 444, "tcp" }, - { "snpp", { NULL }, 444, "udp" }, - { "microsoft-ds", { NULL }, 445, "tcp" }, - { "microsoft-ds", { NULL }, 445, "udp" }, - { "ddm-rdb", { NULL }, 446, "tcp" }, - { "ddm-rdb", { NULL }, 446, "udp" }, - { "ddm-dfm", { NULL }, 447, "tcp" }, - { "ddm-dfm", { NULL }, 447, "udp" }, - { "ddm-ssl", { NULL }, 448, "tcp" }, - { "ddm-ssl", { NULL }, 448, "udp" }, - { "as-servermap", { NULL }, 449, "tcp" }, - { "as-servermap", { NULL }, 449, "udp" }, - { "tserver", { NULL }, 450, "tcp" }, - { "tserver", { NULL }, 450, "udp" }, - { "sfs-smp-net", { NULL }, 451, "tcp" }, - { "sfs-smp-net", { NULL }, 451, "udp" }, - { "sfs-config", { NULL }, 452, "tcp" }, - { "sfs-config", { NULL }, 452, "udp" }, - { "creativeserver", { NULL }, 453, "tcp" }, - { "creativeserver", { NULL }, 453, "udp" }, - { "contentserver", { NULL }, 454, "tcp" }, - { "contentserver", { NULL }, 454, "udp" }, - { "creativepartnr", { NULL }, 455, "tcp" }, - { "creativepartnr", { NULL }, 455, "udp" }, - { "macon-tcp", { NULL }, 456, "tcp" }, - { "macon-udp", { NULL }, 456, "udp" }, - { "scohelp", { NULL }, 457, "tcp" }, - { "scohelp", { NULL }, 457, "udp" }, - { "appleqtc", { NULL }, 458, "tcp" }, - { "appleqtc", { NULL }, 458, "udp" }, - { "ampr-rcmd", { NULL }, 459, "tcp" }, - { "ampr-rcmd", { NULL }, 459, "udp" }, - { "skronk", { NULL }, 460, "tcp" }, - { "skronk", { NULL }, 460, "udp" }, - { "datasurfsrv", { NULL }, 461, "tcp" }, - { "datasurfsrv", { NULL }, 461, "udp" }, - { "datasurfsrvsec", { NULL }, 462, "tcp" }, - { "datasurfsrvsec", { NULL }, 462, "udp" }, - { "alpes", { NULL }, 463, "tcp" }, - { "alpes", { NULL }, 463, "udp" }, - { "kpasswd", { NULL }, 464, "tcp" }, - { "kpasswd", { NULL }, 464, "udp" }, - { "urd", { NULL }, 465, "tcp" }, - { "igmpv3lite", { NULL }, 465, "udp" }, - { "digital-vrc", { NULL }, 466, "tcp" }, - { "digital-vrc", { NULL }, 466, "udp" }, - { "mylex-mapd", { NULL }, 467, "tcp" }, - { "mylex-mapd", { NULL }, 467, "udp" }, - { "photuris", { NULL }, 468, "tcp" }, - { "photuris", { NULL }, 468, "udp" }, - { "rcp", { NULL }, 469, "tcp" }, - { "rcp", { NULL }, 469, "udp" }, - { "scx-proxy", { NULL }, 470, "tcp" }, - { "scx-proxy", { NULL }, 470, "udp" }, - { "mondex", { NULL }, 471, "tcp" }, - { "mondex", { NULL }, 471, "udp" }, - { "ljk-login", { NULL }, 472, "tcp" }, - { "ljk-login", { NULL }, 472, "udp" }, - { "hybrid-pop", { NULL }, 473, "tcp" }, - { "hybrid-pop", { NULL }, 473, "udp" }, - { "tn-tl-w1", { NULL }, 474, "tcp" }, - { "tn-tl-w2", { NULL }, 474, "udp" }, - { "tcpnethaspsrv", { NULL }, 475, "tcp" }, - { "tcpnethaspsrv", { NULL }, 475, "udp" }, - { "tn-tl-fd1", { NULL }, 476, "tcp" }, - { "tn-tl-fd1", { NULL }, 476, "udp" }, - { "ss7ns", { NULL }, 477, "tcp" }, - { "ss7ns", { NULL }, 477, "udp" }, - { "spsc", { NULL }, 478, "tcp" }, - { "spsc", { NULL }, 478, "udp" }, - { "iafserver", { NULL }, 479, "tcp" }, - { "iafserver", { NULL }, 479, "udp" }, - { "iafdbase", { NULL }, 480, "tcp" }, - { "iafdbase", { NULL }, 480, "udp" }, - { "ph", { NULL }, 481, "tcp" }, - { "ph", { NULL }, 481, "udp" }, - { "bgs-nsi", { NULL }, 482, "tcp" }, - { "bgs-nsi", { NULL }, 482, "udp" }, - { "ulpnet", { NULL }, 483, "tcp" }, - { "ulpnet", { NULL }, 483, "udp" }, - { "integra-sme", { NULL }, 484, "tcp" }, - { "integra-sme", { NULL }, 484, "udp" }, - { "powerburst", { NULL }, 485, "tcp" }, - { "powerburst", { NULL }, 485, "udp" }, - { "avian", { NULL }, 486, "tcp" }, - { "avian", { NULL }, 486, "udp" }, - { "saft", { NULL }, 487, "tcp" }, - { "saft", { NULL }, 487, "udp" }, - { "gss-http", { NULL }, 488, "tcp" }, - { "gss-http", { NULL }, 488, "udp" }, - { "nest-protocol", { NULL }, 489, "tcp" }, - { "nest-protocol", { NULL }, 489, "udp" }, - { "micom-pfs", { NULL }, 490, "tcp" }, - { "micom-pfs", { NULL }, 490, "udp" }, - { "go-login", { NULL }, 491, "tcp" }, - { "go-login", { NULL }, 491, "udp" }, - { "ticf-1", { NULL }, 492, "tcp" }, - { "ticf-1", { NULL }, 492, "udp" }, - { "ticf-2", { NULL }, 493, "tcp" }, - { "ticf-2", { NULL }, 493, "udp" }, - { "pov-ray", { NULL }, 494, "tcp" }, - { "pov-ray", { NULL }, 494, "udp" }, - { "intecourier", { NULL }, 495, "tcp" }, - { "intecourier", { NULL }, 495, "udp" }, - { "pim-rp-disc", { NULL }, 496, "tcp" }, - { "pim-rp-disc", { NULL }, 496, "udp" }, - { "dantz", { NULL }, 497, "tcp" }, - { "dantz", { NULL }, 497, "udp" }, - { "siam", { NULL }, 498, "tcp" }, - { "siam", { NULL }, 498, "udp" }, - { "iso-ill", { NULL }, 499, "tcp" }, - { "iso-ill", { NULL }, 499, "udp" }, - { "isakmp", { NULL }, 500, "tcp" }, - { "isakmp", { NULL }, 500, "udp" }, - { "stmf", { NULL }, 501, "tcp" }, - { "stmf", { NULL }, 501, "udp" }, - { "asa-appl-proto", { NULL }, 502, "tcp" }, - { "asa-appl-proto", { NULL }, 502, "udp" }, - { "intrinsa", { NULL }, 503, "tcp" }, - { "intrinsa", { NULL }, 503, "udp" }, - { "citadel", { NULL }, 504, "tcp" }, - { "citadel", { NULL }, 504, "udp" }, - { "mailbox-lm", { NULL }, 505, "tcp" }, - { "mailbox-lm", { NULL }, 505, "udp" }, - { "ohimsrv", { NULL }, 506, "tcp" }, - { "ohimsrv", { NULL }, 506, "udp" }, - { "crs", { NULL }, 507, "tcp" }, - { "crs", { NULL }, 507, "udp" }, - { "xvttp", { NULL }, 508, "tcp" }, - { "xvttp", { NULL }, 508, "udp" }, - { "snare", { NULL }, 509, "tcp" }, - { "snare", { NULL }, 509, "udp" }, - { "fcp", { NULL }, 510, "tcp" }, - { "fcp", { NULL }, 510, "udp" }, - { "passgo", { NULL }, 511, "tcp" }, - { "passgo", { NULL }, 511, "udp" }, - { "exec", { NULL }, 512, "tcp" }, - { "comsat", { NULL }, 512, "udp" }, - { "biff", { NULL }, 512, "udp" }, - { "login", { NULL }, 513, "tcp" }, - { "who", { NULL }, 513, "udp" }, - { "shell", { NULL }, 514, "tcp" }, - { "syslog", { NULL }, 514, "udp" }, - { "printer", { NULL }, 515, "tcp" }, - { "printer", { NULL }, 515, "udp" }, - { "videotex", { NULL }, 516, "tcp" }, - { "videotex", { NULL }, 516, "udp" }, - { "talk", { NULL }, 517, "tcp" }, - { "talk", { NULL }, 517, "udp" }, - { "ntalk", { NULL }, 518, "tcp" }, - { "ntalk", { NULL }, 518, "udp" }, - { "utime", { NULL }, 519, "tcp" }, - { "utime", { NULL }, 519, "udp" }, - { "efs", { NULL }, 520, "tcp" }, - { "router", { NULL }, 520, "udp" }, - { "ripng", { NULL }, 521, "tcp" }, - { "ripng", { NULL }, 521, "udp" }, - { "ulp", { NULL }, 522, "tcp" }, - { "ulp", { NULL }, 522, "udp" }, - { "ibm-db2", { NULL }, 523, "tcp" }, - { "ibm-db2", { NULL }, 523, "udp" }, - { "ncp", { NULL }, 524, "tcp" }, - { "ncp", { NULL }, 524, "udp" }, - { "timed", { NULL }, 525, "tcp" }, - { "timed", { NULL }, 525, "udp" }, - { "tempo", { NULL }, 526, "tcp" }, - { "tempo", { NULL }, 526, "udp" }, - { "stx", { NULL }, 527, "tcp" }, - { "stx", { NULL }, 527, "udp" }, - { "custix", { NULL }, 528, "tcp" }, - { "custix", { NULL }, 528, "udp" }, - { "irc-serv", { NULL }, 529, "tcp" }, - { "irc-serv", { NULL }, 529, "udp" }, - { "courier", { NULL }, 530, "tcp" }, - { "courier", { NULL }, 530, "udp" }, - { "conference", { NULL }, 531, "tcp" }, - { "conference", { NULL }, 531, "udp" }, - { "netnews", { NULL }, 532, "tcp" }, - { "netnews", { NULL }, 532, "udp" }, - { "netwall", { NULL }, 533, "tcp" }, - { "netwall", { NULL }, 533, "udp" }, - { "windream", { NULL }, 534, "tcp" }, - { "windream", { NULL }, 534, "udp" }, - { "iiop", { NULL }, 535, "tcp" }, - { "iiop", { NULL }, 535, "udp" }, - { "opalis-rdv", { NULL }, 536, "tcp" }, - { "opalis-rdv", { NULL }, 536, "udp" }, - { "nmsp", { NULL }, 537, "tcp" }, - { "nmsp", { NULL }, 537, "udp" }, - { "gdomap", { NULL }, 538, "tcp" }, - { "gdomap", { NULL }, 538, "udp" }, - { "apertus-ldp", { NULL }, 539, "tcp" }, - { "apertus-ldp", { NULL }, 539, "udp" }, - { "uucp", { NULL }, 540, "tcp" }, - { "uucp", { NULL }, 540, "udp" }, - { "uucp-rlogin", { NULL }, 541, "tcp" }, - { "uucp-rlogin", { NULL }, 541, "udp" }, - { "commerce", { NULL }, 542, "tcp" }, - { "commerce", { NULL }, 542, "udp" }, - { "klogin", { NULL }, 543, "tcp" }, - { "klogin", { NULL }, 543, "udp" }, - { "kshell", { NULL }, 544, "tcp" }, - { "kshell", { NULL }, 544, "udp" }, - { "appleqtcsrvr", { NULL }, 545, "tcp" }, - { "appleqtcsrvr", { NULL }, 545, "udp" }, - { "dhcpv6-client", { NULL }, 546, "tcp" }, - { "dhcpv6-client", { NULL }, 546, "udp" }, - { "dhcpv6-server", { NULL }, 547, "tcp" }, - { "dhcpv6-server", { NULL }, 547, "udp" }, - { "afpovertcp", { NULL }, 548, "tcp" }, - { "afpovertcp", { NULL }, 548, "udp" }, - { "idfp", { NULL }, 549, "tcp" }, - { "idfp", { NULL }, 549, "udp" }, - { "new-rwho", { NULL }, 550, "tcp" }, - { "new-rwho", { NULL }, 550, "udp" }, - { "cybercash", { NULL }, 551, "tcp" }, - { "cybercash", { NULL }, 551, "udp" }, - { "devshr-nts", { NULL }, 552, "tcp" }, - { "devshr-nts", { NULL }, 552, "udp" }, - { "pirp", { NULL }, 553, "tcp" }, - { "pirp", { NULL }, 553, "udp" }, - { "rtsp", { NULL }, 554, "tcp" }, - { "rtsp", { NULL }, 554, "udp" }, - { "dsf", { NULL }, 555, "tcp" }, - { "dsf", { NULL }, 555, "udp" }, - { "remotefs", { NULL }, 556, "tcp" }, - { "remotefs", { NULL }, 556, "udp" }, - { "openvms-sysipc", { NULL }, 557, "tcp" }, - { "openvms-sysipc", { NULL }, 557, "udp" }, - { "sdnskmp", { NULL }, 558, "tcp" }, - { "sdnskmp", { NULL }, 558, "udp" }, - { "teedtap", { NULL }, 559, "tcp" }, - { "teedtap", { NULL }, 559, "udp" }, - { "rmonitor", { NULL }, 560, "tcp" }, - { "rmonitor", { NULL }, 560, "udp" }, - { "monitor", { NULL }, 561, "tcp" }, - { "monitor", { NULL }, 561, "udp" }, - { "chshell", { NULL }, 562, "tcp" }, - { "chshell", { NULL }, 562, "udp" }, - { "nntps", { NULL }, 563, "tcp" }, - { "nntps", { NULL }, 563, "udp" }, - { "9pfs", { NULL }, 564, "tcp" }, - { "9pfs", { NULL }, 564, "udp" }, - { "whoami", { NULL }, 565, "tcp" }, - { "whoami", { NULL }, 565, "udp" }, - { "streettalk", { NULL }, 566, "tcp" }, - { "streettalk", { NULL }, 566, "udp" }, - { "banyan-rpc", { NULL }, 567, "tcp" }, - { "banyan-rpc", { NULL }, 567, "udp" }, - { "ms-shuttle", { NULL }, 568, "tcp" }, - { "ms-shuttle", { NULL }, 568, "udp" }, - { "ms-rome", { NULL }, 569, "tcp" }, - { "ms-rome", { NULL }, 569, "udp" }, - { "meter", { NULL }, 570, "tcp" }, - { "meter", { NULL }, 570, "udp" }, - { "meter", { NULL }, 571, "tcp" }, - { "meter", { NULL }, 571, "udp" }, - { "sonar", { NULL }, 572, "tcp" }, - { "sonar", { NULL }, 572, "udp" }, - { "banyan-vip", { NULL }, 573, "tcp" }, - { "banyan-vip", { NULL }, 573, "udp" }, - { "ftp-agent", { NULL }, 574, "tcp" }, - { "ftp-agent", { NULL }, 574, "udp" }, - { "vemmi", { NULL }, 575, "tcp" }, - { "vemmi", { NULL }, 575, "udp" }, - { "ipcd", { NULL }, 576, "tcp" }, - { "ipcd", { NULL }, 576, "udp" }, - { "vnas", { NULL }, 577, "tcp" }, - { "vnas", { NULL }, 577, "udp" }, - { "ipdd", { NULL }, 578, "tcp" }, - { "ipdd", { NULL }, 578, "udp" }, - { "decbsrv", { NULL }, 579, "tcp" }, - { "decbsrv", { NULL }, 579, "udp" }, - { "sntp-heartbeat", { NULL }, 580, "tcp" }, - { "sntp-heartbeat", { NULL }, 580, "udp" }, - { "bdp", { NULL }, 581, "tcp" }, - { "bdp", { NULL }, 581, "udp" }, - { "scc-security", { NULL }, 582, "tcp" }, - { "scc-security", { NULL }, 582, "udp" }, - { "philips-vc", { NULL }, 583, "tcp" }, - { "philips-vc", { NULL }, 583, "udp" }, - { "keyserver", { NULL }, 584, "tcp" }, - { "keyserver", { NULL }, 584, "udp" }, - { "password-chg", { NULL }, 586, "tcp" }, - { "password-chg", { NULL }, 586, "udp" }, - { "submission", { NULL }, 587, "tcp" }, - { "submission", { NULL }, 587, "udp" }, - { "cal", { NULL }, 588, "tcp" }, - { "cal", { NULL }, 588, "udp" }, - { "eyelink", { NULL }, 589, "tcp" }, - { "eyelink", { NULL }, 589, "udp" }, - { "tns-cml", { NULL }, 590, "tcp" }, - { "tns-cml", { NULL }, 590, "udp" }, - { "http-alt", { NULL }, 591, "tcp" }, - { "http-alt", { NULL }, 591, "udp" }, - { "eudora-set", { NULL }, 592, "tcp" }, - { "eudora-set", { NULL }, 592, "udp" }, - { "http-rpc-epmap", { NULL }, 593, "tcp" }, - { "http-rpc-epmap", { NULL }, 593, "udp" }, - { "tpip", { NULL }, 594, "tcp" }, - { "tpip", { NULL }, 594, "udp" }, - { "cab-protocol", { NULL }, 595, "tcp" }, - { "cab-protocol", { NULL }, 595, "udp" }, - { "smsd", { NULL }, 596, "tcp" }, - { "smsd", { NULL }, 596, "udp" }, - { "ptcnameservice", { NULL }, 597, "tcp" }, - { "ptcnameservice", { NULL }, 597, "udp" }, - { "sco-websrvrmg3", { NULL }, 598, "tcp" }, - { "sco-websrvrmg3", { NULL }, 598, "udp" }, - { "acp", { NULL }, 599, "tcp" }, - { "acp", { NULL }, 599, "udp" }, - { "ipcserver", { NULL }, 600, "tcp" }, - { "ipcserver", { NULL }, 600, "udp" }, - { "syslog-conn", { NULL }, 601, "tcp" }, - { "syslog-conn", { NULL }, 601, "udp" }, - { "xmlrpc-beep", { NULL }, 602, "tcp" }, - { "xmlrpc-beep", { NULL }, 602, "udp" }, - { "idxp", { NULL }, 603, "tcp" }, - { "idxp", { NULL }, 603, "udp" }, - { "tunnel", { NULL }, 604, "tcp" }, - { "tunnel", { NULL }, 604, "udp" }, - { "soap-beep", { NULL }, 605, "tcp" }, - { "soap-beep", { NULL }, 605, "udp" }, - { "urm", { NULL }, 606, "tcp" }, - { "urm", { NULL }, 606, "udp" }, - { "nqs", { NULL }, 607, "tcp" }, - { "nqs", { NULL }, 607, "udp" }, - { "sift-uft", { NULL }, 608, "tcp" }, - { "sift-uft", { NULL }, 608, "udp" }, - { "npmp-trap", { NULL }, 609, "tcp" }, - { "npmp-trap", { NULL }, 609, "udp" }, - { "npmp-local", { NULL }, 610, "tcp" }, - { "npmp-local", { NULL }, 610, "udp" }, - { "npmp-gui", { NULL }, 611, "tcp" }, - { "npmp-gui", { NULL }, 611, "udp" }, - { "hmmp-ind", { NULL }, 612, "tcp" }, - { "hmmp-ind", { NULL }, 612, "udp" }, - { "hmmp-op", { NULL }, 613, "tcp" }, - { "hmmp-op", { NULL }, 613, "udp" }, - { "sshell", { NULL }, 614, "tcp" }, - { "sshell", { NULL }, 614, "udp" }, - { "sco-inetmgr", { NULL }, 615, "tcp" }, - { "sco-inetmgr", { NULL }, 615, "udp" }, - { "sco-sysmgr", { NULL }, 616, "tcp" }, - { "sco-sysmgr", { NULL }, 616, "udp" }, - { "sco-dtmgr", { NULL }, 617, "tcp" }, - { "sco-dtmgr", { NULL }, 617, "udp" }, - { "dei-icda", { NULL }, 618, "tcp" }, - { "dei-icda", { NULL }, 618, "udp" }, - { "compaq-evm", { NULL }, 619, "tcp" }, - { "compaq-evm", { NULL }, 619, "udp" }, - { "sco-websrvrmgr", { NULL }, 620, "tcp" }, - { "sco-websrvrmgr", { NULL }, 620, "udp" }, - { "escp-ip", { NULL }, 621, "tcp" }, - { "escp-ip", { NULL }, 621, "udp" }, - { "collaborator", { NULL }, 622, "tcp" }, - { "collaborator", { NULL }, 622, "udp" }, - { "oob-ws-http", { NULL }, 623, "tcp" }, - { "asf-rmcp", { NULL }, 623, "udp" }, - { "cryptoadmin", { NULL }, 624, "tcp" }, - { "cryptoadmin", { NULL }, 624, "udp" }, - { "dec_dlm", { NULL }, 625, "tcp" }, - { "dec_dlm", { NULL }, 625, "udp" }, - { "asia", { NULL }, 626, "tcp" }, - { "asia", { NULL }, 626, "udp" }, - { "passgo-tivoli", { NULL }, 627, "tcp" }, - { "passgo-tivoli", { NULL }, 627, "udp" }, - { "qmqp", { NULL }, 628, "tcp" }, - { "qmqp", { NULL }, 628, "udp" }, - { "3com-amp3", { NULL }, 629, "tcp" }, - { "3com-amp3", { NULL }, 629, "udp" }, - { "rda", { NULL }, 630, "tcp" }, - { "rda", { NULL }, 630, "udp" }, - { "ipp", { NULL }, 631, "tcp" }, - { "ipp", { NULL }, 631, "udp" }, - { "bmpp", { NULL }, 632, "tcp" }, - { "bmpp", { NULL }, 632, "udp" }, - { "servstat", { NULL }, 633, "tcp" }, - { "servstat", { NULL }, 633, "udp" }, - { "ginad", { NULL }, 634, "tcp" }, - { "ginad", { NULL }, 634, "udp" }, - { "rlzdbase", { NULL }, 635, "tcp" }, - { "rlzdbase", { NULL }, 635, "udp" }, - { "ldaps", { NULL }, 636, "tcp" }, - { "ldaps", { NULL }, 636, "udp" }, - { "lanserver", { NULL }, 637, "tcp" }, - { "lanserver", { NULL }, 637, "udp" }, - { "mcns-sec", { NULL }, 638, "tcp" }, - { "mcns-sec", { NULL }, 638, "udp" }, - { "msdp", { NULL }, 639, "tcp" }, - { "msdp", { NULL }, 639, "udp" }, - { "entrust-sps", { NULL }, 640, "tcp" }, - { "entrust-sps", { NULL }, 640, "udp" }, - { "repcmd", { NULL }, 641, "tcp" }, - { "repcmd", { NULL }, 641, "udp" }, - { "esro-emsdp", { NULL }, 642, "tcp" }, - { "esro-emsdp", { NULL }, 642, "udp" }, - { "sanity", { NULL }, 643, "tcp" }, - { "sanity", { NULL }, 643, "udp" }, - { "dwr", { NULL }, 644, "tcp" }, - { "dwr", { NULL }, 644, "udp" }, - { "pssc", { NULL }, 645, "tcp" }, - { "pssc", { NULL }, 645, "udp" }, - { "ldp", { NULL }, 646, "tcp" }, - { "ldp", { NULL }, 646, "udp" }, - { "dhcp-failover", { NULL }, 647, "tcp" }, - { "dhcp-failover", { NULL }, 647, "udp" }, - { "rrp", { NULL }, 648, "tcp" }, - { "rrp", { NULL }, 648, "udp" }, - { "cadview-3d", { NULL }, 649, "tcp" }, - { "cadview-3d", { NULL }, 649, "udp" }, - { "obex", { NULL }, 650, "tcp" }, - { "obex", { NULL }, 650, "udp" }, - { "ieee-mms", { NULL }, 651, "tcp" }, - { "ieee-mms", { NULL }, 651, "udp" }, - { "hello-port", { NULL }, 652, "tcp" }, - { "hello-port", { NULL }, 652, "udp" }, - { "repscmd", { NULL }, 653, "tcp" }, - { "repscmd", { NULL }, 653, "udp" }, - { "aodv", { NULL }, 654, "tcp" }, - { "aodv", { NULL }, 654, "udp" }, - { "tinc", { NULL }, 655, "tcp" }, - { "tinc", { NULL }, 655, "udp" }, - { "spmp", { NULL }, 656, "tcp" }, - { "spmp", { NULL }, 656, "udp" }, - { "rmc", { NULL }, 657, "tcp" }, - { "rmc", { NULL }, 657, "udp" }, - { "tenfold", { NULL }, 658, "tcp" }, - { "tenfold", { NULL }, 658, "udp" }, - { "mac-srvr-admin", { NULL }, 660, "tcp" }, - { "mac-srvr-admin", { NULL }, 660, "udp" }, - { "hap", { NULL }, 661, "tcp" }, - { "hap", { NULL }, 661, "udp" }, - { "pftp", { NULL }, 662, "tcp" }, - { "pftp", { NULL }, 662, "udp" }, - { "purenoise", { NULL }, 663, "tcp" }, - { "purenoise", { NULL }, 663, "udp" }, - { "oob-ws-https", { NULL }, 664, "tcp" }, - { "asf-secure-rmcp", { NULL }, 664, "udp" }, - { "sun-dr", { NULL }, 665, "tcp" }, - { "sun-dr", { NULL }, 665, "udp" }, - { "mdqs", { NULL }, 666, "tcp" }, - { "mdqs", { NULL }, 666, "udp" }, - { "doom", { NULL }, 666, "tcp" }, - { "doom", { NULL }, 666, "udp" }, - { "disclose", { NULL }, 667, "tcp" }, - { "disclose", { NULL }, 667, "udp" }, - { "mecomm", { NULL }, 668, "tcp" }, - { "mecomm", { NULL }, 668, "udp" }, - { "meregister", { NULL }, 669, "tcp" }, - { "meregister", { NULL }, 669, "udp" }, - { "vacdsm-sws", { NULL }, 670, "tcp" }, - { "vacdsm-sws", { NULL }, 670, "udp" }, - { "vacdsm-app", { NULL }, 671, "tcp" }, - { "vacdsm-app", { NULL }, 671, "udp" }, - { "vpps-qua", { NULL }, 672, "tcp" }, - { "vpps-qua", { NULL }, 672, "udp" }, - { "cimplex", { NULL }, 673, "tcp" }, - { "cimplex", { NULL }, 673, "udp" }, - { "acap", { NULL }, 674, "tcp" }, - { "acap", { NULL }, 674, "udp" }, - { "dctp", { NULL }, 675, "tcp" }, - { "dctp", { NULL }, 675, "udp" }, - { "vpps-via", { NULL }, 676, "tcp" }, - { "vpps-via", { NULL }, 676, "udp" }, - { "vpp", { NULL }, 677, "tcp" }, - { "vpp", { NULL }, 677, "udp" }, - { "ggf-ncp", { NULL }, 678, "tcp" }, - { "ggf-ncp", { NULL }, 678, "udp" }, - { "mrm", { NULL }, 679, "tcp" }, - { "mrm", { NULL }, 679, "udp" }, - { "entrust-aaas", { NULL }, 680, "tcp" }, - { "entrust-aaas", { NULL }, 680, "udp" }, - { "entrust-aams", { NULL }, 681, "tcp" }, - { "entrust-aams", { NULL }, 681, "udp" }, - { "xfr", { NULL }, 682, "tcp" }, - { "xfr", { NULL }, 682, "udp" }, - { "corba-iiop", { NULL }, 683, "tcp" }, - { "corba-iiop", { NULL }, 683, "udp" }, - { "corba-iiop-ssl", { NULL }, 684, "tcp" }, - { "corba-iiop-ssl", { NULL }, 684, "udp" }, - { "mdc-portmapper", { NULL }, 685, "tcp" }, - { "mdc-portmapper", { NULL }, 685, "udp" }, - { "hcp-wismar", { NULL }, 686, "tcp" }, - { "hcp-wismar", { NULL }, 686, "udp" }, - { "asipregistry", { NULL }, 687, "tcp" }, - { "asipregistry", { NULL }, 687, "udp" }, - { "realm-rusd", { NULL }, 688, "tcp" }, - { "realm-rusd", { NULL }, 688, "udp" }, - { "nmap", { NULL }, 689, "tcp" }, - { "nmap", { NULL }, 689, "udp" }, - { "vatp", { NULL }, 690, "tcp" }, - { "vatp", { NULL }, 690, "udp" }, - { "msexch-routing", { NULL }, 691, "tcp" }, - { "msexch-routing", { NULL }, 691, "udp" }, - { "hyperwave-isp", { NULL }, 692, "tcp" }, - { "hyperwave-isp", { NULL }, 692, "udp" }, - { "connendp", { NULL }, 693, "tcp" }, - { "connendp", { NULL }, 693, "udp" }, - { "ha-cluster", { NULL }, 694, "tcp" }, - { "ha-cluster", { NULL }, 694, "udp" }, - { "ieee-mms-ssl", { NULL }, 695, "tcp" }, - { "ieee-mms-ssl", { NULL }, 695, "udp" }, - { "rushd", { NULL }, 696, "tcp" }, - { "rushd", { NULL }, 696, "udp" }, - { "uuidgen", { NULL }, 697, "tcp" }, - { "uuidgen", { NULL }, 697, "udp" }, - { "olsr", { NULL }, 698, "tcp" }, - { "olsr", { NULL }, 698, "udp" }, - { "accessnetwork", { NULL }, 699, "tcp" }, - { "accessnetwork", { NULL }, 699, "udp" }, - { "epp", { NULL }, 700, "tcp" }, - { "epp", { NULL }, 700, "udp" }, - { "lmp", { NULL }, 701, "tcp" }, - { "lmp", { NULL }, 701, "udp" }, - { "iris-beep", { NULL }, 702, "tcp" }, - { "iris-beep", { NULL }, 702, "udp" }, - { "elcsd", { NULL }, 704, "tcp" }, - { "elcsd", { NULL }, 704, "udp" }, - { "agentx", { NULL }, 705, "tcp" }, - { "agentx", { NULL }, 705, "udp" }, - { "silc", { NULL }, 706, "tcp" }, - { "silc", { NULL }, 706, "udp" }, - { "borland-dsj", { NULL }, 707, "tcp" }, - { "borland-dsj", { NULL }, 707, "udp" }, - { "entrust-kmsh", { NULL }, 709, "tcp" }, - { "entrust-kmsh", { NULL }, 709, "udp" }, - { "entrust-ash", { NULL }, 710, "tcp" }, - { "entrust-ash", { NULL }, 710, "udp" }, - { "cisco-tdp", { NULL }, 711, "tcp" }, - { "cisco-tdp", { NULL }, 711, "udp" }, - { "tbrpf", { NULL }, 712, "tcp" }, - { "tbrpf", { NULL }, 712, "udp" }, - { "iris-xpc", { NULL }, 713, "tcp" }, - { "iris-xpc", { NULL }, 713, "udp" }, - { "iris-xpcs", { NULL }, 714, "tcp" }, - { "iris-xpcs", { NULL }, 714, "udp" }, - { "iris-lwz", { NULL }, 715, "tcp" }, - { "iris-lwz", { NULL }, 715, "udp" }, - { "pana", { NULL }, 716, "udp" }, - { "netviewdm1", { NULL }, 729, "tcp" }, - { "netviewdm1", { NULL }, 729, "udp" }, - { "netviewdm2", { NULL }, 730, "tcp" }, - { "netviewdm2", { NULL }, 730, "udp" }, - { "netviewdm3", { NULL }, 731, "tcp" }, - { "netviewdm3", { NULL }, 731, "udp" }, - { "netgw", { NULL }, 741, "tcp" }, - { "netgw", { NULL }, 741, "udp" }, - { "netrcs", { NULL }, 742, "tcp" }, - { "netrcs", { NULL }, 742, "udp" }, - { "flexlm", { NULL }, 744, "tcp" }, - { "flexlm", { NULL }, 744, "udp" }, - { "fujitsu-dev", { NULL }, 747, "tcp" }, - { "fujitsu-dev", { NULL }, 747, "udp" }, - { "ris-cm", { NULL }, 748, "tcp" }, - { "ris-cm", { NULL }, 748, "udp" }, - { "kerberos-adm", { NULL }, 749, "tcp" }, - { "kerberos-adm", { NULL }, 749, "udp" }, - { "rfile", { NULL }, 750, "tcp" }, - { "loadav", { NULL }, 750, "udp" }, - { "kerberos-iv", { NULL }, 750, "udp" }, - { "pump", { NULL }, 751, "tcp" }, - { "pump", { NULL }, 751, "udp" }, - { "qrh", { NULL }, 752, "tcp" }, - { "qrh", { NULL }, 752, "udp" }, - { "rrh", { NULL }, 753, "tcp" }, - { "rrh", { NULL }, 753, "udp" }, - { "tell", { NULL }, 754, "tcp" }, - { "tell", { NULL }, 754, "udp" }, - { "nlogin", { NULL }, 758, "tcp" }, - { "nlogin", { NULL }, 758, "udp" }, - { "con", { NULL }, 759, "tcp" }, - { "con", { NULL }, 759, "udp" }, - { "ns", { NULL }, 760, "tcp" }, - { "ns", { NULL }, 760, "udp" }, - { "rxe", { NULL }, 761, "tcp" }, - { "rxe", { NULL }, 761, "udp" }, - { "quotad", { NULL }, 762, "tcp" }, - { "quotad", { NULL }, 762, "udp" }, - { "cycleserv", { NULL }, 763, "tcp" }, - { "cycleserv", { NULL }, 763, "udp" }, - { "omserv", { NULL }, 764, "tcp" }, - { "omserv", { NULL }, 764, "udp" }, - { "webster", { NULL }, 765, "tcp" }, - { "webster", { NULL }, 765, "udp" }, - { "phonebook", { NULL }, 767, "tcp" }, - { "phonebook", { NULL }, 767, "udp" }, - { "vid", { NULL }, 769, "tcp" }, - { "vid", { NULL }, 769, "udp" }, - { "cadlock", { NULL }, 770, "tcp" }, - { "cadlock", { NULL }, 770, "udp" }, - { "rtip", { NULL }, 771, "tcp" }, - { "rtip", { NULL }, 771, "udp" }, - { "cycleserv2", { NULL }, 772, "tcp" }, - { "cycleserv2", { NULL }, 772, "udp" }, - { "submit", { NULL }, 773, "tcp" }, - { "notify", { NULL }, 773, "udp" }, - { "rpasswd", { NULL }, 774, "tcp" }, - { "acmaint_dbd", { NULL }, 774, "udp" }, - { "entomb", { NULL }, 775, "tcp" }, - { "acmaint_transd", { NULL }, 775, "udp" }, - { "wpages", { NULL }, 776, "tcp" }, - { "wpages", { NULL }, 776, "udp" }, - { "multiling-http", { NULL }, 777, "tcp" }, - { "multiling-http", { NULL }, 777, "udp" }, - { "wpgs", { NULL }, 780, "tcp" }, - { "wpgs", { NULL }, 780, "udp" }, - { "mdbs_daemon", { NULL }, 800, "tcp" }, - { "mdbs_daemon", { NULL }, 800, "udp" }, - { "device", { NULL }, 801, "tcp" }, - { "device", { NULL }, 801, "udp" }, - { "fcp-udp", { NULL }, 810, "tcp" }, - { "fcp-udp", { NULL }, 810, "udp" }, - { "itm-mcell-s", { NULL }, 828, "tcp" }, - { "itm-mcell-s", { NULL }, 828, "udp" }, - { "pkix-3-ca-ra", { NULL }, 829, "tcp" }, - { "pkix-3-ca-ra", { NULL }, 829, "udp" }, - { "netconf-ssh", { NULL }, 830, "tcp" }, - { "netconf-ssh", { NULL }, 830, "udp" }, - { "netconf-beep", { NULL }, 831, "tcp" }, - { "netconf-beep", { NULL }, 831, "udp" }, - { "netconfsoaphttp", { NULL }, 832, "tcp" }, - { "netconfsoaphttp", { NULL }, 832, "udp" }, - { "netconfsoapbeep", { NULL }, 833, "tcp" }, - { "netconfsoapbeep", { NULL }, 833, "udp" }, - { "dhcp-failover2", { NULL }, 847, "tcp" }, - { "dhcp-failover2", { NULL }, 847, "udp" }, - { "gdoi", { NULL }, 848, "tcp" }, - { "gdoi", { NULL }, 848, "udp" }, - { "iscsi", { NULL }, 860, "tcp" }, - { "iscsi", { NULL }, 860, "udp" }, - { "owamp-control", { NULL }, 861, "tcp" }, - { "owamp-control", { NULL }, 861, "udp" }, - { "twamp-control", { NULL }, 862, "tcp" }, - { "twamp-control", { NULL }, 862, "udp" }, - { "rsync", { NULL }, 873, "tcp" }, - { "rsync", { NULL }, 873, "udp" }, - { "iclcnet-locate", { NULL }, 886, "tcp" }, - { "iclcnet-locate", { NULL }, 886, "udp" }, - { "iclcnet_svinfo", { NULL }, 887, "tcp" }, - { "iclcnet_svinfo", { NULL }, 887, "udp" }, - { "accessbuilder", { NULL }, 888, "tcp" }, - { "accessbuilder", { NULL }, 888, "udp" }, - { "cddbp", { NULL }, 888, "tcp" }, - { "omginitialrefs", { NULL }, 900, "tcp" }, - { "omginitialrefs", { NULL }, 900, "udp" }, - { "smpnameres", { NULL }, 901, "tcp" }, - { "smpnameres", { NULL }, 901, "udp" }, - { "ideafarm-door", { NULL }, 902, "tcp" }, - { "ideafarm-door", { NULL }, 902, "udp" }, - { "ideafarm-panic", { NULL }, 903, "tcp" }, - { "ideafarm-panic", { NULL }, 903, "udp" }, - { "kink", { NULL }, 910, "tcp" }, - { "kink", { NULL }, 910, "udp" }, - { "xact-backup", { NULL }, 911, "tcp" }, - { "xact-backup", { NULL }, 911, "udp" }, - { "apex-mesh", { NULL }, 912, "tcp" }, - { "apex-mesh", { NULL }, 912, "udp" }, - { "apex-edge", { NULL }, 913, "tcp" }, - { "apex-edge", { NULL }, 913, "udp" }, - { "ftps-data", { NULL }, 989, "tcp" }, - { "ftps-data", { NULL }, 989, "udp" }, - { "ftps", { NULL }, 990, "tcp" }, - { "ftps", { NULL }, 990, "udp" }, - { "nas", { NULL }, 991, "tcp" }, - { "nas", { NULL }, 991, "udp" }, - { "telnets", { NULL }, 992, "tcp" }, - { "telnets", { NULL }, 992, "udp" }, - { "imaps", { NULL }, 993, "tcp" }, - { "imaps", { NULL }, 993, "udp" }, - { "ircs", { NULL }, 994, "tcp" }, - { "ircs", { NULL }, 994, "udp" }, - { "pop3s", { NULL }, 995, "tcp" }, - { "pop3s", { NULL }, 995, "udp" }, - { "vsinet", { NULL }, 996, "tcp" }, - { "vsinet", { NULL }, 996, "udp" }, - { "maitrd", { NULL }, 997, "tcp" }, - { "maitrd", { NULL }, 997, "udp" }, - { "busboy", { NULL }, 998, "tcp" }, - { "puparp", { NULL }, 998, "udp" }, - { "garcon", { NULL }, 999, "tcp" }, - { "applix", { NULL }, 999, "udp" }, - { "puprouter", { NULL }, 999, "tcp" }, - { "puprouter", { NULL }, 999, "udp" }, - { "cadlock2", { NULL }, 1000, "tcp" }, - { "cadlock2", { NULL }, 1000, "udp" }, - { "surf", { NULL }, 1010, "tcp" }, - { "surf", { NULL }, 1010, "udp" }, - { "exp1", { NULL }, 1021, "tcp" }, - { "exp1", { NULL }, 1021, "udp" }, - { "exp2", { NULL }, 1022, "tcp" }, - { "exp2", { NULL }, 1022, "udp" }, -# endif /* USE_IANA_WELL_KNOWN_PORTS */ -# ifdef USE_IANA_REGISTERED_PORTS - { "blackjack", { NULL }, 1025, "tcp" }, - { "blackjack", { NULL }, 1025, "udp" }, - { "cap", { NULL }, 1026, "tcp" }, - { "cap", { NULL }, 1026, "udp" }, - { "solid-mux", { NULL }, 1029, "tcp" }, - { "solid-mux", { NULL }, 1029, "udp" }, - { "iad1", { NULL }, 1030, "tcp" }, - { "iad1", { NULL }, 1030, "udp" }, - { "iad2", { NULL }, 1031, "tcp" }, - { "iad2", { NULL }, 1031, "udp" }, - { "iad3", { NULL }, 1032, "tcp" }, - { "iad3", { NULL }, 1032, "udp" }, - { "netinfo-local", { NULL }, 1033, "tcp" }, - { "netinfo-local", { NULL }, 1033, "udp" }, - { "activesync", { NULL }, 1034, "tcp" }, - { "activesync", { NULL }, 1034, "udp" }, - { "mxxrlogin", { NULL }, 1035, "tcp" }, - { "mxxrlogin", { NULL }, 1035, "udp" }, - { "nsstp", { NULL }, 1036, "tcp" }, - { "nsstp", { NULL }, 1036, "udp" }, - { "ams", { NULL }, 1037, "tcp" }, - { "ams", { NULL }, 1037, "udp" }, - { "mtqp", { NULL }, 1038, "tcp" }, - { "mtqp", { NULL }, 1038, "udp" }, - { "sbl", { NULL }, 1039, "tcp" }, - { "sbl", { NULL }, 1039, "udp" }, - { "netarx", { NULL }, 1040, "tcp" }, - { "netarx", { NULL }, 1040, "udp" }, - { "danf-ak2", { NULL }, 1041, "tcp" }, - { "danf-ak2", { NULL }, 1041, "udp" }, - { "afrog", { NULL }, 1042, "tcp" }, - { "afrog", { NULL }, 1042, "udp" }, - { "boinc-client", { NULL }, 1043, "tcp" }, - { "boinc-client", { NULL }, 1043, "udp" }, - { "dcutility", { NULL }, 1044, "tcp" }, - { "dcutility", { NULL }, 1044, "udp" }, - { "fpitp", { NULL }, 1045, "tcp" }, - { "fpitp", { NULL }, 1045, "udp" }, - { "wfremotertm", { NULL }, 1046, "tcp" }, - { "wfremotertm", { NULL }, 1046, "udp" }, - { "neod1", { NULL }, 1047, "tcp" }, - { "neod1", { NULL }, 1047, "udp" }, - { "neod2", { NULL }, 1048, "tcp" }, - { "neod2", { NULL }, 1048, "udp" }, - { "td-postman", { NULL }, 1049, "tcp" }, - { "td-postman", { NULL }, 1049, "udp" }, - { "cma", { NULL }, 1050, "tcp" }, - { "cma", { NULL }, 1050, "udp" }, - { "optima-vnet", { NULL }, 1051, "tcp" }, - { "optima-vnet", { NULL }, 1051, "udp" }, - { "ddt", { NULL }, 1052, "tcp" }, - { "ddt", { NULL }, 1052, "udp" }, - { "remote-as", { NULL }, 1053, "tcp" }, - { "remote-as", { NULL }, 1053, "udp" }, - { "brvread", { NULL }, 1054, "tcp" }, - { "brvread", { NULL }, 1054, "udp" }, - { "ansyslmd", { NULL }, 1055, "tcp" }, - { "ansyslmd", { NULL }, 1055, "udp" }, - { "vfo", { NULL }, 1056, "tcp" }, - { "vfo", { NULL }, 1056, "udp" }, - { "startron", { NULL }, 1057, "tcp" }, - { "startron", { NULL }, 1057, "udp" }, - { "nim", { NULL }, 1058, "tcp" }, - { "nim", { NULL }, 1058, "udp" }, - { "nimreg", { NULL }, 1059, "tcp" }, - { "nimreg", { NULL }, 1059, "udp" }, - { "polestar", { NULL }, 1060, "tcp" }, - { "polestar", { NULL }, 1060, "udp" }, - { "kiosk", { NULL }, 1061, "tcp" }, - { "kiosk", { NULL }, 1061, "udp" }, - { "veracity", { NULL }, 1062, "tcp" }, - { "veracity", { NULL }, 1062, "udp" }, - { "kyoceranetdev", { NULL }, 1063, "tcp" }, - { "kyoceranetdev", { NULL }, 1063, "udp" }, - { "jstel", { NULL }, 1064, "tcp" }, - { "jstel", { NULL }, 1064, "udp" }, - { "syscomlan", { NULL }, 1065, "tcp" }, - { "syscomlan", { NULL }, 1065, "udp" }, - { "fpo-fns", { NULL }, 1066, "tcp" }, - { "fpo-fns", { NULL }, 1066, "udp" }, - { "instl_boots", { NULL }, 1067, "tcp" }, - { "instl_boots", { NULL }, 1067, "udp" }, - { "instl_bootc", { NULL }, 1068, "tcp" }, - { "instl_bootc", { NULL }, 1068, "udp" }, - { "cognex-insight", { NULL }, 1069, "tcp" }, - { "cognex-insight", { NULL }, 1069, "udp" }, - { "gmrupdateserv", { NULL }, 1070, "tcp" }, - { "gmrupdateserv", { NULL }, 1070, "udp" }, - { "bsquare-voip", { NULL }, 1071, "tcp" }, - { "bsquare-voip", { NULL }, 1071, "udp" }, - { "cardax", { NULL }, 1072, "tcp" }, - { "cardax", { NULL }, 1072, "udp" }, - { "bridgecontrol", { NULL }, 1073, "tcp" }, - { "bridgecontrol", { NULL }, 1073, "udp" }, - { "warmspotMgmt", { NULL }, 1074, "tcp" }, - { "warmspotMgmt", { NULL }, 1074, "udp" }, - { "rdrmshc", { NULL }, 1075, "tcp" }, - { "rdrmshc", { NULL }, 1075, "udp" }, - { "dab-sti-c", { NULL }, 1076, "tcp" }, - { "dab-sti-c", { NULL }, 1076, "udp" }, - { "imgames", { NULL }, 1077, "tcp" }, - { "imgames", { NULL }, 1077, "udp" }, - { "avocent-proxy", { NULL }, 1078, "tcp" }, - { "avocent-proxy", { NULL }, 1078, "udp" }, - { "asprovatalk", { NULL }, 1079, "tcp" }, - { "asprovatalk", { NULL }, 1079, "udp" }, - { "socks", { NULL }, 1080, "tcp" }, - { "socks", { NULL }, 1080, "udp" }, - { "pvuniwien", { NULL }, 1081, "tcp" }, - { "pvuniwien", { NULL }, 1081, "udp" }, - { "amt-esd-prot", { NULL }, 1082, "tcp" }, - { "amt-esd-prot", { NULL }, 1082, "udp" }, - { "ansoft-lm-1", { NULL }, 1083, "tcp" }, - { "ansoft-lm-1", { NULL }, 1083, "udp" }, - { "ansoft-lm-2", { NULL }, 1084, "tcp" }, - { "ansoft-lm-2", { NULL }, 1084, "udp" }, - { "webobjects", { NULL }, 1085, "tcp" }, - { "webobjects", { NULL }, 1085, "udp" }, - { "cplscrambler-lg", { NULL }, 1086, "tcp" }, - { "cplscrambler-lg", { NULL }, 1086, "udp" }, - { "cplscrambler-in", { NULL }, 1087, "tcp" }, - { "cplscrambler-in", { NULL }, 1087, "udp" }, - { "cplscrambler-al", { NULL }, 1088, "tcp" }, - { "cplscrambler-al", { NULL }, 1088, "udp" }, - { "ff-annunc", { NULL }, 1089, "tcp" }, - { "ff-annunc", { NULL }, 1089, "udp" }, - { "ff-fms", { NULL }, 1090, "tcp" }, - { "ff-fms", { NULL }, 1090, "udp" }, - { "ff-sm", { NULL }, 1091, "tcp" }, - { "ff-sm", { NULL }, 1091, "udp" }, - { "obrpd", { NULL }, 1092, "tcp" }, - { "obrpd", { NULL }, 1092, "udp" }, - { "proofd", { NULL }, 1093, "tcp" }, - { "proofd", { NULL }, 1093, "udp" }, - { "rootd", { NULL }, 1094, "tcp" }, - { "rootd", { NULL }, 1094, "udp" }, - { "nicelink", { NULL }, 1095, "tcp" }, - { "nicelink", { NULL }, 1095, "udp" }, - { "cnrprotocol", { NULL }, 1096, "tcp" }, - { "cnrprotocol", { NULL }, 1096, "udp" }, - { "sunclustermgr", { NULL }, 1097, "tcp" }, - { "sunclustermgr", { NULL }, 1097, "udp" }, - { "rmiactivation", { NULL }, 1098, "tcp" }, - { "rmiactivation", { NULL }, 1098, "udp" }, - { "rmiregistry", { NULL }, 1099, "tcp" }, - { "rmiregistry", { NULL }, 1099, "udp" }, - { "mctp", { NULL }, 1100, "tcp" }, - { "mctp", { NULL }, 1100, "udp" }, - { "pt2-discover", { NULL }, 1101, "tcp" }, - { "pt2-discover", { NULL }, 1101, "udp" }, - { "adobeserver-1", { NULL }, 1102, "tcp" }, - { "adobeserver-1", { NULL }, 1102, "udp" }, - { "adobeserver-2", { NULL }, 1103, "tcp" }, - { "adobeserver-2", { NULL }, 1103, "udp" }, - { "xrl", { NULL }, 1104, "tcp" }, - { "xrl", { NULL }, 1104, "udp" }, - { "ftranhc", { NULL }, 1105, "tcp" }, - { "ftranhc", { NULL }, 1105, "udp" }, - { "isoipsigport-1", { NULL }, 1106, "tcp" }, - { "isoipsigport-1", { NULL }, 1106, "udp" }, - { "isoipsigport-2", { NULL }, 1107, "tcp" }, - { "isoipsigport-2", { NULL }, 1107, "udp" }, - { "ratio-adp", { NULL }, 1108, "tcp" }, - { "ratio-adp", { NULL }, 1108, "udp" }, - { "webadmstart", { NULL }, 1110, "tcp" }, - { "nfsd-keepalive", { NULL }, 1110, "udp" }, - { "lmsocialserver", { NULL }, 1111, "tcp" }, - { "lmsocialserver", { NULL }, 1111, "udp" }, - { "icp", { NULL }, 1112, "tcp" }, - { "icp", { NULL }, 1112, "udp" }, - { "ltp-deepspace", { NULL }, 1113, "tcp" }, - { "ltp-deepspace", { NULL }, 1113, "udp" }, - { "mini-sql", { NULL }, 1114, "tcp" }, - { "mini-sql", { NULL }, 1114, "udp" }, - { "ardus-trns", { NULL }, 1115, "tcp" }, - { "ardus-trns", { NULL }, 1115, "udp" }, - { "ardus-cntl", { NULL }, 1116, "tcp" }, - { "ardus-cntl", { NULL }, 1116, "udp" }, - { "ardus-mtrns", { NULL }, 1117, "tcp" }, - { "ardus-mtrns", { NULL }, 1117, "udp" }, - { "sacred", { NULL }, 1118, "tcp" }, - { "sacred", { NULL }, 1118, "udp" }, - { "bnetgame", { NULL }, 1119, "tcp" }, - { "bnetgame", { NULL }, 1119, "udp" }, - { "bnetfile", { NULL }, 1120, "tcp" }, - { "bnetfile", { NULL }, 1120, "udp" }, - { "rmpp", { NULL }, 1121, "tcp" }, - { "rmpp", { NULL }, 1121, "udp" }, - { "availant-mgr", { NULL }, 1122, "tcp" }, - { "availant-mgr", { NULL }, 1122, "udp" }, - { "murray", { NULL }, 1123, "tcp" }, - { "murray", { NULL }, 1123, "udp" }, - { "hpvmmcontrol", { NULL }, 1124, "tcp" }, - { "hpvmmcontrol", { NULL }, 1124, "udp" }, - { "hpvmmagent", { NULL }, 1125, "tcp" }, - { "hpvmmagent", { NULL }, 1125, "udp" }, - { "hpvmmdata", { NULL }, 1126, "tcp" }, - { "hpvmmdata", { NULL }, 1126, "udp" }, - { "kwdb-commn", { NULL }, 1127, "tcp" }, - { "kwdb-commn", { NULL }, 1127, "udp" }, - { "saphostctrl", { NULL }, 1128, "tcp" }, - { "saphostctrl", { NULL }, 1128, "udp" }, - { "saphostctrls", { NULL }, 1129, "tcp" }, - { "saphostctrls", { NULL }, 1129, "udp" }, - { "casp", { NULL }, 1130, "tcp" }, - { "casp", { NULL }, 1130, "udp" }, - { "caspssl", { NULL }, 1131, "tcp" }, - { "caspssl", { NULL }, 1131, "udp" }, - { "kvm-via-ip", { NULL }, 1132, "tcp" }, - { "kvm-via-ip", { NULL }, 1132, "udp" }, - { "dfn", { NULL }, 1133, "tcp" }, - { "dfn", { NULL }, 1133, "udp" }, - { "aplx", { NULL }, 1134, "tcp" }, - { "aplx", { NULL }, 1134, "udp" }, - { "omnivision", { NULL }, 1135, "tcp" }, - { "omnivision", { NULL }, 1135, "udp" }, - { "hhb-gateway", { NULL }, 1136, "tcp" }, - { "hhb-gateway", { NULL }, 1136, "udp" }, - { "trim", { NULL }, 1137, "tcp" }, - { "trim", { NULL }, 1137, "udp" }, - { "encrypted_admin", { NULL }, 1138, "tcp" }, - { "encrypted_admin", { NULL }, 1138, "udp" }, - { "evm", { NULL }, 1139, "tcp" }, - { "evm", { NULL }, 1139, "udp" }, - { "autonoc", { NULL }, 1140, "tcp" }, - { "autonoc", { NULL }, 1140, "udp" }, - { "mxomss", { NULL }, 1141, "tcp" }, - { "mxomss", { NULL }, 1141, "udp" }, - { "edtools", { NULL }, 1142, "tcp" }, - { "edtools", { NULL }, 1142, "udp" }, - { "imyx", { NULL }, 1143, "tcp" }, - { "imyx", { NULL }, 1143, "udp" }, - { "fuscript", { NULL }, 1144, "tcp" }, - { "fuscript", { NULL }, 1144, "udp" }, - { "x9-icue", { NULL }, 1145, "tcp" }, - { "x9-icue", { NULL }, 1145, "udp" }, - { "audit-transfer", { NULL }, 1146, "tcp" }, - { "audit-transfer", { NULL }, 1146, "udp" }, - { "capioverlan", { NULL }, 1147, "tcp" }, - { "capioverlan", { NULL }, 1147, "udp" }, - { "elfiq-repl", { NULL }, 1148, "tcp" }, - { "elfiq-repl", { NULL }, 1148, "udp" }, - { "bvtsonar", { NULL }, 1149, "tcp" }, - { "bvtsonar", { NULL }, 1149, "udp" }, - { "blaze", { NULL }, 1150, "tcp" }, - { "blaze", { NULL }, 1150, "udp" }, - { "unizensus", { NULL }, 1151, "tcp" }, - { "unizensus", { NULL }, 1151, "udp" }, - { "winpoplanmess", { NULL }, 1152, "tcp" }, - { "winpoplanmess", { NULL }, 1152, "udp" }, - { "c1222-acse", { NULL }, 1153, "tcp" }, - { "c1222-acse", { NULL }, 1153, "udp" }, - { "resacommunity", { NULL }, 1154, "tcp" }, - { "resacommunity", { NULL }, 1154, "udp" }, - { "nfa", { NULL }, 1155, "tcp" }, - { "nfa", { NULL }, 1155, "udp" }, - { "iascontrol-oms", { NULL }, 1156, "tcp" }, - { "iascontrol-oms", { NULL }, 1156, "udp" }, - { "iascontrol", { NULL }, 1157, "tcp" }, - { "iascontrol", { NULL }, 1157, "udp" }, - { "dbcontrol-oms", { NULL }, 1158, "tcp" }, - { "dbcontrol-oms", { NULL }, 1158, "udp" }, - { "oracle-oms", { NULL }, 1159, "tcp" }, - { "oracle-oms", { NULL }, 1159, "udp" }, - { "olsv", { NULL }, 1160, "tcp" }, - { "olsv", { NULL }, 1160, "udp" }, - { "health-polling", { NULL }, 1161, "tcp" }, - { "health-polling", { NULL }, 1161, "udp" }, - { "health-trap", { NULL }, 1162, "tcp" }, - { "health-trap", { NULL }, 1162, "udp" }, - { "sddp", { NULL }, 1163, "tcp" }, - { "sddp", { NULL }, 1163, "udp" }, - { "qsm-proxy", { NULL }, 1164, "tcp" }, - { "qsm-proxy", { NULL }, 1164, "udp" }, - { "qsm-gui", { NULL }, 1165, "tcp" }, - { "qsm-gui", { NULL }, 1165, "udp" }, - { "qsm-remote", { NULL }, 1166, "tcp" }, - { "qsm-remote", { NULL }, 1166, "udp" }, - { "cisco-ipsla", { NULL }, 1167, "tcp" }, - { "cisco-ipsla", { NULL }, 1167, "udp" }, - { "cisco-ipsla", { NULL }, 1167, "sctp" }, - { "vchat", { NULL }, 1168, "tcp" }, - { "vchat", { NULL }, 1168, "udp" }, - { "tripwire", { NULL }, 1169, "tcp" }, - { "tripwire", { NULL }, 1169, "udp" }, - { "atc-lm", { NULL }, 1170, "tcp" }, - { "atc-lm", { NULL }, 1170, "udp" }, - { "atc-appserver", { NULL }, 1171, "tcp" }, - { "atc-appserver", { NULL }, 1171, "udp" }, - { "dnap", { NULL }, 1172, "tcp" }, - { "dnap", { NULL }, 1172, "udp" }, - { "d-cinema-rrp", { NULL }, 1173, "tcp" }, - { "d-cinema-rrp", { NULL }, 1173, "udp" }, - { "fnet-remote-ui", { NULL }, 1174, "tcp" }, - { "fnet-remote-ui", { NULL }, 1174, "udp" }, - { "dossier", { NULL }, 1175, "tcp" }, - { "dossier", { NULL }, 1175, "udp" }, - { "indigo-server", { NULL }, 1176, "tcp" }, - { "indigo-server", { NULL }, 1176, "udp" }, - { "dkmessenger", { NULL }, 1177, "tcp" }, - { "dkmessenger", { NULL }, 1177, "udp" }, - { "sgi-storman", { NULL }, 1178, "tcp" }, - { "sgi-storman", { NULL }, 1178, "udp" }, - { "b2n", { NULL }, 1179, "tcp" }, - { "b2n", { NULL }, 1179, "udp" }, - { "mc-client", { NULL }, 1180, "tcp" }, - { "mc-client", { NULL }, 1180, "udp" }, - { "3comnetman", { NULL }, 1181, "tcp" }, - { "3comnetman", { NULL }, 1181, "udp" }, - { "accelenet", { NULL }, 1182, "tcp" }, - { "accelenet-data", { NULL }, 1182, "udp" }, - { "llsurfup-http", { NULL }, 1183, "tcp" }, - { "llsurfup-http", { NULL }, 1183, "udp" }, - { "llsurfup-https", { NULL }, 1184, "tcp" }, - { "llsurfup-https", { NULL }, 1184, "udp" }, - { "catchpole", { NULL }, 1185, "tcp" }, - { "catchpole", { NULL }, 1185, "udp" }, - { "mysql-cluster", { NULL }, 1186, "tcp" }, - { "mysql-cluster", { NULL }, 1186, "udp" }, - { "alias", { NULL }, 1187, "tcp" }, - { "alias", { NULL }, 1187, "udp" }, - { "hp-webadmin", { NULL }, 1188, "tcp" }, - { "hp-webadmin", { NULL }, 1188, "udp" }, - { "unet", { NULL }, 1189, "tcp" }, - { "unet", { NULL }, 1189, "udp" }, - { "commlinx-avl", { NULL }, 1190, "tcp" }, - { "commlinx-avl", { NULL }, 1190, "udp" }, - { "gpfs", { NULL }, 1191, "tcp" }, - { "gpfs", { NULL }, 1191, "udp" }, - { "caids-sensor", { NULL }, 1192, "tcp" }, - { "caids-sensor", { NULL }, 1192, "udp" }, - { "fiveacross", { NULL }, 1193, "tcp" }, - { "fiveacross", { NULL }, 1193, "udp" }, - { "openvpn", { NULL }, 1194, "tcp" }, - { "openvpn", { NULL }, 1194, "udp" }, - { "rsf-1", { NULL }, 1195, "tcp" }, - { "rsf-1", { NULL }, 1195, "udp" }, - { "netmagic", { NULL }, 1196, "tcp" }, - { "netmagic", { NULL }, 1196, "udp" }, - { "carrius-rshell", { NULL }, 1197, "tcp" }, - { "carrius-rshell", { NULL }, 1197, "udp" }, - { "cajo-discovery", { NULL }, 1198, "tcp" }, - { "cajo-discovery", { NULL }, 1198, "udp" }, - { "dmidi", { NULL }, 1199, "tcp" }, - { "dmidi", { NULL }, 1199, "udp" }, - { "scol", { NULL }, 1200, "tcp" }, - { "scol", { NULL }, 1200, "udp" }, - { "nucleus-sand", { NULL }, 1201, "tcp" }, - { "nucleus-sand", { NULL }, 1201, "udp" }, - { "caiccipc", { NULL }, 1202, "tcp" }, - { "caiccipc", { NULL }, 1202, "udp" }, - { "ssslic-mgr", { NULL }, 1203, "tcp" }, - { "ssslic-mgr", { NULL }, 1203, "udp" }, - { "ssslog-mgr", { NULL }, 1204, "tcp" }, - { "ssslog-mgr", { NULL }, 1204, "udp" }, - { "accord-mgc", { NULL }, 1205, "tcp" }, - { "accord-mgc", { NULL }, 1205, "udp" }, - { "anthony-data", { NULL }, 1206, "tcp" }, - { "anthony-data", { NULL }, 1206, "udp" }, - { "metasage", { NULL }, 1207, "tcp" }, - { "metasage", { NULL }, 1207, "udp" }, - { "seagull-ais", { NULL }, 1208, "tcp" }, - { "seagull-ais", { NULL }, 1208, "udp" }, - { "ipcd3", { NULL }, 1209, "tcp" }, - { "ipcd3", { NULL }, 1209, "udp" }, - { "eoss", { NULL }, 1210, "tcp" }, - { "eoss", { NULL }, 1210, "udp" }, - { "groove-dpp", { NULL }, 1211, "tcp" }, - { "groove-dpp", { NULL }, 1211, "udp" }, - { "lupa", { NULL }, 1212, "tcp" }, - { "lupa", { NULL }, 1212, "udp" }, - { "mpc-lifenet", { NULL }, 1213, "tcp" }, - { "mpc-lifenet", { NULL }, 1213, "udp" }, - { "kazaa", { NULL }, 1214, "tcp" }, - { "kazaa", { NULL }, 1214, "udp" }, - { "scanstat-1", { NULL }, 1215, "tcp" }, - { "scanstat-1", { NULL }, 1215, "udp" }, - { "etebac5", { NULL }, 1216, "tcp" }, - { "etebac5", { NULL }, 1216, "udp" }, - { "hpss-ndapi", { NULL }, 1217, "tcp" }, - { "hpss-ndapi", { NULL }, 1217, "udp" }, - { "aeroflight-ads", { NULL }, 1218, "tcp" }, - { "aeroflight-ads", { NULL }, 1218, "udp" }, - { "aeroflight-ret", { NULL }, 1219, "tcp" }, - { "aeroflight-ret", { NULL }, 1219, "udp" }, - { "qt-serveradmin", { NULL }, 1220, "tcp" }, - { "qt-serveradmin", { NULL }, 1220, "udp" }, - { "sweetware-apps", { NULL }, 1221, "tcp" }, - { "sweetware-apps", { NULL }, 1221, "udp" }, - { "nerv", { NULL }, 1222, "tcp" }, - { "nerv", { NULL }, 1222, "udp" }, - { "tgp", { NULL }, 1223, "tcp" }, - { "tgp", { NULL }, 1223, "udp" }, - { "vpnz", { NULL }, 1224, "tcp" }, - { "vpnz", { NULL }, 1224, "udp" }, - { "slinkysearch", { NULL }, 1225, "tcp" }, - { "slinkysearch", { NULL }, 1225, "udp" }, - { "stgxfws", { NULL }, 1226, "tcp" }, - { "stgxfws", { NULL }, 1226, "udp" }, - { "dns2go", { NULL }, 1227, "tcp" }, - { "dns2go", { NULL }, 1227, "udp" }, - { "florence", { NULL }, 1228, "tcp" }, - { "florence", { NULL }, 1228, "udp" }, - { "zented", { NULL }, 1229, "tcp" }, - { "zented", { NULL }, 1229, "udp" }, - { "periscope", { NULL }, 1230, "tcp" }, - { "periscope", { NULL }, 1230, "udp" }, - { "menandmice-lpm", { NULL }, 1231, "tcp" }, - { "menandmice-lpm", { NULL }, 1231, "udp" }, - { "univ-appserver", { NULL }, 1233, "tcp" }, - { "univ-appserver", { NULL }, 1233, "udp" }, - { "search-agent", { NULL }, 1234, "tcp" }, - { "search-agent", { NULL }, 1234, "udp" }, - { "mosaicsyssvc1", { NULL }, 1235, "tcp" }, - { "mosaicsyssvc1", { NULL }, 1235, "udp" }, - { "bvcontrol", { NULL }, 1236, "tcp" }, - { "bvcontrol", { NULL }, 1236, "udp" }, - { "tsdos390", { NULL }, 1237, "tcp" }, - { "tsdos390", { NULL }, 1237, "udp" }, - { "hacl-qs", { NULL }, 1238, "tcp" }, - { "hacl-qs", { NULL }, 1238, "udp" }, - { "nmsd", { NULL }, 1239, "tcp" }, - { "nmsd", { NULL }, 1239, "udp" }, - { "instantia", { NULL }, 1240, "tcp" }, - { "instantia", { NULL }, 1240, "udp" }, - { "nessus", { NULL }, 1241, "tcp" }, - { "nessus", { NULL }, 1241, "udp" }, - { "nmasoverip", { NULL }, 1242, "tcp" }, - { "nmasoverip", { NULL }, 1242, "udp" }, - { "serialgateway", { NULL }, 1243, "tcp" }, - { "serialgateway", { NULL }, 1243, "udp" }, - { "isbconference1", { NULL }, 1244, "tcp" }, - { "isbconference1", { NULL }, 1244, "udp" }, - { "isbconference2", { NULL }, 1245, "tcp" }, - { "isbconference2", { NULL }, 1245, "udp" }, - { "payrouter", { NULL }, 1246, "tcp" }, - { "payrouter", { NULL }, 1246, "udp" }, - { "visionpyramid", { NULL }, 1247, "tcp" }, - { "visionpyramid", { NULL }, 1247, "udp" }, - { "hermes", { NULL }, 1248, "tcp" }, - { "hermes", { NULL }, 1248, "udp" }, - { "mesavistaco", { NULL }, 1249, "tcp" }, - { "mesavistaco", { NULL }, 1249, "udp" }, - { "swldy-sias", { NULL }, 1250, "tcp" }, - { "swldy-sias", { NULL }, 1250, "udp" }, - { "servergraph", { NULL }, 1251, "tcp" }, - { "servergraph", { NULL }, 1251, "udp" }, - { "bspne-pcc", { NULL }, 1252, "tcp" }, - { "bspne-pcc", { NULL }, 1252, "udp" }, - { "q55-pcc", { NULL }, 1253, "tcp" }, - { "q55-pcc", { NULL }, 1253, "udp" }, - { "de-noc", { NULL }, 1254, "tcp" }, - { "de-noc", { NULL }, 1254, "udp" }, - { "de-cache-query", { NULL }, 1255, "tcp" }, - { "de-cache-query", { NULL }, 1255, "udp" }, - { "de-server", { NULL }, 1256, "tcp" }, - { "de-server", { NULL }, 1256, "udp" }, - { "shockwave2", { NULL }, 1257, "tcp" }, - { "shockwave2", { NULL }, 1257, "udp" }, - { "opennl", { NULL }, 1258, "tcp" }, - { "opennl", { NULL }, 1258, "udp" }, - { "opennl-voice", { NULL }, 1259, "tcp" }, - { "opennl-voice", { NULL }, 1259, "udp" }, - { "ibm-ssd", { NULL }, 1260, "tcp" }, - { "ibm-ssd", { NULL }, 1260, "udp" }, - { "mpshrsv", { NULL }, 1261, "tcp" }, - { "mpshrsv", { NULL }, 1261, "udp" }, - { "qnts-orb", { NULL }, 1262, "tcp" }, - { "qnts-orb", { NULL }, 1262, "udp" }, - { "dka", { NULL }, 1263, "tcp" }, - { "dka", { NULL }, 1263, "udp" }, - { "prat", { NULL }, 1264, "tcp" }, - { "prat", { NULL }, 1264, "udp" }, - { "dssiapi", { NULL }, 1265, "tcp" }, - { "dssiapi", { NULL }, 1265, "udp" }, - { "dellpwrappks", { NULL }, 1266, "tcp" }, - { "dellpwrappks", { NULL }, 1266, "udp" }, - { "epc", { NULL }, 1267, "tcp" }, - { "epc", { NULL }, 1267, "udp" }, - { "propel-msgsys", { NULL }, 1268, "tcp" }, - { "propel-msgsys", { NULL }, 1268, "udp" }, - { "watilapp", { NULL }, 1269, "tcp" }, - { "watilapp", { NULL }, 1269, "udp" }, - { "opsmgr", { NULL }, 1270, "tcp" }, - { "opsmgr", { NULL }, 1270, "udp" }, - { "excw", { NULL }, 1271, "tcp" }, - { "excw", { NULL }, 1271, "udp" }, - { "cspmlockmgr", { NULL }, 1272, "tcp" }, - { "cspmlockmgr", { NULL }, 1272, "udp" }, - { "emc-gateway", { NULL }, 1273, "tcp" }, - { "emc-gateway", { NULL }, 1273, "udp" }, - { "t1distproc", { NULL }, 1274, "tcp" }, - { "t1distproc", { NULL }, 1274, "udp" }, - { "ivcollector", { NULL }, 1275, "tcp" }, - { "ivcollector", { NULL }, 1275, "udp" }, - { "ivmanager", { NULL }, 1276, "tcp" }, - { "ivmanager", { NULL }, 1276, "udp" }, - { "miva-mqs", { NULL }, 1277, "tcp" }, - { "miva-mqs", { NULL }, 1277, "udp" }, - { "dellwebadmin-1", { NULL }, 1278, "tcp" }, - { "dellwebadmin-1", { NULL }, 1278, "udp" }, - { "dellwebadmin-2", { NULL }, 1279, "tcp" }, - { "dellwebadmin-2", { NULL }, 1279, "udp" }, - { "pictrography", { NULL }, 1280, "tcp" }, - { "pictrography", { NULL }, 1280, "udp" }, - { "healthd", { NULL }, 1281, "tcp" }, - { "healthd", { NULL }, 1281, "udp" }, - { "emperion", { NULL }, 1282, "tcp" }, - { "emperion", { NULL }, 1282, "udp" }, - { "productinfo", { NULL }, 1283, "tcp" }, - { "productinfo", { NULL }, 1283, "udp" }, - { "iee-qfx", { NULL }, 1284, "tcp" }, - { "iee-qfx", { NULL }, 1284, "udp" }, - { "neoiface", { NULL }, 1285, "tcp" }, - { "neoiface", { NULL }, 1285, "udp" }, - { "netuitive", { NULL }, 1286, "tcp" }, - { "netuitive", { NULL }, 1286, "udp" }, - { "routematch", { NULL }, 1287, "tcp" }, - { "routematch", { NULL }, 1287, "udp" }, - { "navbuddy", { NULL }, 1288, "tcp" }, - { "navbuddy", { NULL }, 1288, "udp" }, - { "jwalkserver", { NULL }, 1289, "tcp" }, - { "jwalkserver", { NULL }, 1289, "udp" }, - { "winjaserver", { NULL }, 1290, "tcp" }, - { "winjaserver", { NULL }, 1290, "udp" }, - { "seagulllms", { NULL }, 1291, "tcp" }, - { "seagulllms", { NULL }, 1291, "udp" }, - { "dsdn", { NULL }, 1292, "tcp" }, - { "dsdn", { NULL }, 1292, "udp" }, - { "pkt-krb-ipsec", { NULL }, 1293, "tcp" }, - { "pkt-krb-ipsec", { NULL }, 1293, "udp" }, - { "cmmdriver", { NULL }, 1294, "tcp" }, - { "cmmdriver", { NULL }, 1294, "udp" }, - { "ehtp", { NULL }, 1295, "tcp" }, - { "ehtp", { NULL }, 1295, "udp" }, - { "dproxy", { NULL }, 1296, "tcp" }, - { "dproxy", { NULL }, 1296, "udp" }, - { "sdproxy", { NULL }, 1297, "tcp" }, - { "sdproxy", { NULL }, 1297, "udp" }, - { "lpcp", { NULL }, 1298, "tcp" }, - { "lpcp", { NULL }, 1298, "udp" }, - { "hp-sci", { NULL }, 1299, "tcp" }, - { "hp-sci", { NULL }, 1299, "udp" }, - { "h323hostcallsc", { NULL }, 1300, "tcp" }, - { "h323hostcallsc", { NULL }, 1300, "udp" }, - { "ci3-software-1", { NULL }, 1301, "tcp" }, - { "ci3-software-1", { NULL }, 1301, "udp" }, - { "ci3-software-2", { NULL }, 1302, "tcp" }, - { "ci3-software-2", { NULL }, 1302, "udp" }, - { "sftsrv", { NULL }, 1303, "tcp" }, - { "sftsrv", { NULL }, 1303, "udp" }, - { "boomerang", { NULL }, 1304, "tcp" }, - { "boomerang", { NULL }, 1304, "udp" }, - { "pe-mike", { NULL }, 1305, "tcp" }, - { "pe-mike", { NULL }, 1305, "udp" }, - { "re-conn-proto", { NULL }, 1306, "tcp" }, - { "re-conn-proto", { NULL }, 1306, "udp" }, - { "pacmand", { NULL }, 1307, "tcp" }, - { "pacmand", { NULL }, 1307, "udp" }, - { "odsi", { NULL }, 1308, "tcp" }, - { "odsi", { NULL }, 1308, "udp" }, - { "jtag-server", { NULL }, 1309, "tcp" }, - { "jtag-server", { NULL }, 1309, "udp" }, - { "husky", { NULL }, 1310, "tcp" }, - { "husky", { NULL }, 1310, "udp" }, - { "rxmon", { NULL }, 1311, "tcp" }, - { "rxmon", { NULL }, 1311, "udp" }, - { "sti-envision", { NULL }, 1312, "tcp" }, - { "sti-envision", { NULL }, 1312, "udp" }, - { "bmc_patroldb", { NULL }, 1313, "tcp" }, - { "bmc_patroldb", { NULL }, 1313, "udp" }, - { "pdps", { NULL }, 1314, "tcp" }, - { "pdps", { NULL }, 1314, "udp" }, - { "els", { NULL }, 1315, "tcp" }, - { "els", { NULL }, 1315, "udp" }, - { "exbit-escp", { NULL }, 1316, "tcp" }, - { "exbit-escp", { NULL }, 1316, "udp" }, - { "vrts-ipcserver", { NULL }, 1317, "tcp" }, - { "vrts-ipcserver", { NULL }, 1317, "udp" }, - { "krb5gatekeeper", { NULL }, 1318, "tcp" }, - { "krb5gatekeeper", { NULL }, 1318, "udp" }, - { "amx-icsp", { NULL }, 1319, "tcp" }, - { "amx-icsp", { NULL }, 1319, "udp" }, - { "amx-axbnet", { NULL }, 1320, "tcp" }, - { "amx-axbnet", { NULL }, 1320, "udp" }, - { "pip", { NULL }, 1321, "tcp" }, - { "pip", { NULL }, 1321, "udp" }, - { "novation", { NULL }, 1322, "tcp" }, - { "novation", { NULL }, 1322, "udp" }, - { "brcd", { NULL }, 1323, "tcp" }, - { "brcd", { NULL }, 1323, "udp" }, - { "delta-mcp", { NULL }, 1324, "tcp" }, - { "delta-mcp", { NULL }, 1324, "udp" }, - { "dx-instrument", { NULL }, 1325, "tcp" }, - { "dx-instrument", { NULL }, 1325, "udp" }, - { "wimsic", { NULL }, 1326, "tcp" }, - { "wimsic", { NULL }, 1326, "udp" }, - { "ultrex", { NULL }, 1327, "tcp" }, - { "ultrex", { NULL }, 1327, "udp" }, - { "ewall", { NULL }, 1328, "tcp" }, - { "ewall", { NULL }, 1328, "udp" }, - { "netdb-export", { NULL }, 1329, "tcp" }, - { "netdb-export", { NULL }, 1329, "udp" }, - { "streetperfect", { NULL }, 1330, "tcp" }, - { "streetperfect", { NULL }, 1330, "udp" }, - { "intersan", { NULL }, 1331, "tcp" }, - { "intersan", { NULL }, 1331, "udp" }, - { "pcia-rxp-b", { NULL }, 1332, "tcp" }, - { "pcia-rxp-b", { NULL }, 1332, "udp" }, - { "passwrd-policy", { NULL }, 1333, "tcp" }, - { "passwrd-policy", { NULL }, 1333, "udp" }, - { "writesrv", { NULL }, 1334, "tcp" }, - { "writesrv", { NULL }, 1334, "udp" }, - { "digital-notary", { NULL }, 1335, "tcp" }, - { "digital-notary", { NULL }, 1335, "udp" }, - { "ischat", { NULL }, 1336, "tcp" }, - { "ischat", { NULL }, 1336, "udp" }, - { "menandmice-dns", { NULL }, 1337, "tcp" }, - { "menandmice-dns", { NULL }, 1337, "udp" }, - { "wmc-log-svc", { NULL }, 1338, "tcp" }, - { "wmc-log-svc", { NULL }, 1338, "udp" }, - { "kjtsiteserver", { NULL }, 1339, "tcp" }, - { "kjtsiteserver", { NULL }, 1339, "udp" }, - { "naap", { NULL }, 1340, "tcp" }, - { "naap", { NULL }, 1340, "udp" }, - { "qubes", { NULL }, 1341, "tcp" }, - { "qubes", { NULL }, 1341, "udp" }, - { "esbroker", { NULL }, 1342, "tcp" }, - { "esbroker", { NULL }, 1342, "udp" }, - { "re101", { NULL }, 1343, "tcp" }, - { "re101", { NULL }, 1343, "udp" }, - { "icap", { NULL }, 1344, "tcp" }, - { "icap", { NULL }, 1344, "udp" }, - { "vpjp", { NULL }, 1345, "tcp" }, - { "vpjp", { NULL }, 1345, "udp" }, - { "alta-ana-lm", { NULL }, 1346, "tcp" }, - { "alta-ana-lm", { NULL }, 1346, "udp" }, - { "bbn-mmc", { NULL }, 1347, "tcp" }, - { "bbn-mmc", { NULL }, 1347, "udp" }, - { "bbn-mmx", { NULL }, 1348, "tcp" }, - { "bbn-mmx", { NULL }, 1348, "udp" }, - { "sbook", { NULL }, 1349, "tcp" }, - { "sbook", { NULL }, 1349, "udp" }, - { "editbench", { NULL }, 1350, "tcp" }, - { "editbench", { NULL }, 1350, "udp" }, - { "equationbuilder", { NULL }, 1351, "tcp" }, - { "equationbuilder", { NULL }, 1351, "udp" }, - { "lotusnote", { NULL }, 1352, "tcp" }, - { "lotusnote", { NULL }, 1352, "udp" }, - { "relief", { NULL }, 1353, "tcp" }, - { "relief", { NULL }, 1353, "udp" }, - { "XSIP-network", { NULL }, 1354, "tcp" }, - { "XSIP-network", { NULL }, 1354, "udp" }, - { "intuitive-edge", { NULL }, 1355, "tcp" }, - { "intuitive-edge", { NULL }, 1355, "udp" }, - { "cuillamartin", { NULL }, 1356, "tcp" }, - { "cuillamartin", { NULL }, 1356, "udp" }, - { "pegboard", { NULL }, 1357, "tcp" }, - { "pegboard", { NULL }, 1357, "udp" }, - { "connlcli", { NULL }, 1358, "tcp" }, - { "connlcli", { NULL }, 1358, "udp" }, - { "ftsrv", { NULL }, 1359, "tcp" }, - { "ftsrv", { NULL }, 1359, "udp" }, - { "mimer", { NULL }, 1360, "tcp" }, - { "mimer", { NULL }, 1360, "udp" }, - { "linx", { NULL }, 1361, "tcp" }, - { "linx", { NULL }, 1361, "udp" }, - { "timeflies", { NULL }, 1362, "tcp" }, - { "timeflies", { NULL }, 1362, "udp" }, - { "ndm-requester", { NULL }, 1363, "tcp" }, - { "ndm-requester", { NULL }, 1363, "udp" }, - { "ndm-server", { NULL }, 1364, "tcp" }, - { "ndm-server", { NULL }, 1364, "udp" }, - { "adapt-sna", { NULL }, 1365, "tcp" }, - { "adapt-sna", { NULL }, 1365, "udp" }, - { "netware-csp", { NULL }, 1366, "tcp" }, - { "netware-csp", { NULL }, 1366, "udp" }, - { "dcs", { NULL }, 1367, "tcp" }, - { "dcs", { NULL }, 1367, "udp" }, - { "screencast", { NULL }, 1368, "tcp" }, - { "screencast", { NULL }, 1368, "udp" }, - { "gv-us", { NULL }, 1369, "tcp" }, - { "gv-us", { NULL }, 1369, "udp" }, - { "us-gv", { NULL }, 1370, "tcp" }, - { "us-gv", { NULL }, 1370, "udp" }, - { "fc-cli", { NULL }, 1371, "tcp" }, - { "fc-cli", { NULL }, 1371, "udp" }, - { "fc-ser", { NULL }, 1372, "tcp" }, - { "fc-ser", { NULL }, 1372, "udp" }, - { "chromagrafx", { NULL }, 1373, "tcp" }, - { "chromagrafx", { NULL }, 1373, "udp" }, - { "molly", { NULL }, 1374, "tcp" }, - { "molly", { NULL }, 1374, "udp" }, - { "bytex", { NULL }, 1375, "tcp" }, - { "bytex", { NULL }, 1375, "udp" }, - { "ibm-pps", { NULL }, 1376, "tcp" }, - { "ibm-pps", { NULL }, 1376, "udp" }, - { "cichlid", { NULL }, 1377, "tcp" }, - { "cichlid", { NULL }, 1377, "udp" }, - { "elan", { NULL }, 1378, "tcp" }, - { "elan", { NULL }, 1378, "udp" }, - { "dbreporter", { NULL }, 1379, "tcp" }, - { "dbreporter", { NULL }, 1379, "udp" }, - { "telesis-licman", { NULL }, 1380, "tcp" }, - { "telesis-licman", { NULL }, 1380, "udp" }, - { "apple-licman", { NULL }, 1381, "tcp" }, - { "apple-licman", { NULL }, 1381, "udp" }, - { "udt_os", { NULL }, 1382, "tcp" }, - { "udt_os", { NULL }, 1382, "udp" }, - { "gwha", { NULL }, 1383, "tcp" }, - { "gwha", { NULL }, 1383, "udp" }, - { "os-licman", { NULL }, 1384, "tcp" }, - { "os-licman", { NULL }, 1384, "udp" }, - { "atex_elmd", { NULL }, 1385, "tcp" }, - { "atex_elmd", { NULL }, 1385, "udp" }, - { "checksum", { NULL }, 1386, "tcp" }, - { "checksum", { NULL }, 1386, "udp" }, - { "cadsi-lm", { NULL }, 1387, "tcp" }, - { "cadsi-lm", { NULL }, 1387, "udp" }, - { "objective-dbc", { NULL }, 1388, "tcp" }, - { "objective-dbc", { NULL }, 1388, "udp" }, - { "iclpv-dm", { NULL }, 1389, "tcp" }, - { "iclpv-dm", { NULL }, 1389, "udp" }, - { "iclpv-sc", { NULL }, 1390, "tcp" }, - { "iclpv-sc", { NULL }, 1390, "udp" }, - { "iclpv-sas", { NULL }, 1391, "tcp" }, - { "iclpv-sas", { NULL }, 1391, "udp" }, - { "iclpv-pm", { NULL }, 1392, "tcp" }, - { "iclpv-pm", { NULL }, 1392, "udp" }, - { "iclpv-nls", { NULL }, 1393, "tcp" }, - { "iclpv-nls", { NULL }, 1393, "udp" }, - { "iclpv-nlc", { NULL }, 1394, "tcp" }, - { "iclpv-nlc", { NULL }, 1394, "udp" }, - { "iclpv-wsm", { NULL }, 1395, "tcp" }, - { "iclpv-wsm", { NULL }, 1395, "udp" }, - { "dvl-activemail", { NULL }, 1396, "tcp" }, - { "dvl-activemail", { NULL }, 1396, "udp" }, - { "audio-activmail", { NULL }, 1397, "tcp" }, - { "audio-activmail", { NULL }, 1397, "udp" }, - { "video-activmail", { NULL }, 1398, "tcp" }, - { "video-activmail", { NULL }, 1398, "udp" }, - { "cadkey-licman", { NULL }, 1399, "tcp" }, - { "cadkey-licman", { NULL }, 1399, "udp" }, - { "cadkey-tablet", { NULL }, 1400, "tcp" }, - { "cadkey-tablet", { NULL }, 1400, "udp" }, - { "goldleaf-licman", { NULL }, 1401, "tcp" }, - { "goldleaf-licman", { NULL }, 1401, "udp" }, - { "prm-sm-np", { NULL }, 1402, "tcp" }, - { "prm-sm-np", { NULL }, 1402, "udp" }, - { "prm-nm-np", { NULL }, 1403, "tcp" }, - { "prm-nm-np", { NULL }, 1403, "udp" }, - { "igi-lm", { NULL }, 1404, "tcp" }, - { "igi-lm", { NULL }, 1404, "udp" }, - { "ibm-res", { NULL }, 1405, "tcp" }, - { "ibm-res", { NULL }, 1405, "udp" }, - { "netlabs-lm", { NULL }, 1406, "tcp" }, - { "netlabs-lm", { NULL }, 1406, "udp" }, - { "dbsa-lm", { NULL }, 1407, "tcp" }, - { "dbsa-lm", { NULL }, 1407, "udp" }, - { "sophia-lm", { NULL }, 1408, "tcp" }, - { "sophia-lm", { NULL }, 1408, "udp" }, - { "here-lm", { NULL }, 1409, "tcp" }, - { "here-lm", { NULL }, 1409, "udp" }, - { "hiq", { NULL }, 1410, "tcp" }, - { "hiq", { NULL }, 1410, "udp" }, - { "af", { NULL }, 1411, "tcp" }, - { "af", { NULL }, 1411, "udp" }, - { "innosys", { NULL }, 1412, "tcp" }, - { "innosys", { NULL }, 1412, "udp" }, - { "innosys-acl", { NULL }, 1413, "tcp" }, - { "innosys-acl", { NULL }, 1413, "udp" }, - { "ibm-mqseries", { NULL }, 1414, "tcp" }, - { "ibm-mqseries", { NULL }, 1414, "udp" }, - { "dbstar", { NULL }, 1415, "tcp" }, - { "dbstar", { NULL }, 1415, "udp" }, - { "novell-lu6.2", { NULL }, 1416, "tcp" }, - { "novell-lu6.2", { NULL }, 1416, "udp" }, - { "timbuktu-srv1", { NULL }, 1417, "tcp" }, - { "timbuktu-srv1", { NULL }, 1417, "udp" }, - { "timbuktu-srv2", { NULL }, 1418, "tcp" }, - { "timbuktu-srv2", { NULL }, 1418, "udp" }, - { "timbuktu-srv3", { NULL }, 1419, "tcp" }, - { "timbuktu-srv3", { NULL }, 1419, "udp" }, - { "timbuktu-srv4", { NULL }, 1420, "tcp" }, - { "timbuktu-srv4", { NULL }, 1420, "udp" }, - { "gandalf-lm", { NULL }, 1421, "tcp" }, - { "gandalf-lm", { NULL }, 1421, "udp" }, - { "autodesk-lm", { NULL }, 1422, "tcp" }, - { "autodesk-lm", { NULL }, 1422, "udp" }, - { "essbase", { NULL }, 1423, "tcp" }, - { "essbase", { NULL }, 1423, "udp" }, - { "hybrid", { NULL }, 1424, "tcp" }, - { "hybrid", { NULL }, 1424, "udp" }, - { "zion-lm", { NULL }, 1425, "tcp" }, - { "zion-lm", { NULL }, 1425, "udp" }, - { "sais", { NULL }, 1426, "tcp" }, - { "sais", { NULL }, 1426, "udp" }, - { "mloadd", { NULL }, 1427, "tcp" }, - { "mloadd", { NULL }, 1427, "udp" }, - { "informatik-lm", { NULL }, 1428, "tcp" }, - { "informatik-lm", { NULL }, 1428, "udp" }, - { "nms", { NULL }, 1429, "tcp" }, - { "nms", { NULL }, 1429, "udp" }, - { "tpdu", { NULL }, 1430, "tcp" }, - { "tpdu", { NULL }, 1430, "udp" }, - { "rgtp", { NULL }, 1431, "tcp" }, - { "rgtp", { NULL }, 1431, "udp" }, - { "blueberry-lm", { NULL }, 1432, "tcp" }, - { "blueberry-lm", { NULL }, 1432, "udp" }, - { "ms-sql-s", { NULL }, 1433, "tcp" }, - { "ms-sql-s", { NULL }, 1433, "udp" }, - { "ms-sql-m", { NULL }, 1434, "tcp" }, - { "ms-sql-m", { NULL }, 1434, "udp" }, - { "ibm-cics", { NULL }, 1435, "tcp" }, - { "ibm-cics", { NULL }, 1435, "udp" }, - { "saism", { NULL }, 1436, "tcp" }, - { "saism", { NULL }, 1436, "udp" }, - { "tabula", { NULL }, 1437, "tcp" }, - { "tabula", { NULL }, 1437, "udp" }, - { "eicon-server", { NULL }, 1438, "tcp" }, - { "eicon-server", { NULL }, 1438, "udp" }, - { "eicon-x25", { NULL }, 1439, "tcp" }, - { "eicon-x25", { NULL }, 1439, "udp" }, - { "eicon-slp", { NULL }, 1440, "tcp" }, - { "eicon-slp", { NULL }, 1440, "udp" }, - { "cadis-1", { NULL }, 1441, "tcp" }, - { "cadis-1", { NULL }, 1441, "udp" }, - { "cadis-2", { NULL }, 1442, "tcp" }, - { "cadis-2", { NULL }, 1442, "udp" }, - { "ies-lm", { NULL }, 1443, "tcp" }, - { "ies-lm", { NULL }, 1443, "udp" }, - { "marcam-lm", { NULL }, 1444, "tcp" }, - { "marcam-lm", { NULL }, 1444, "udp" }, - { "proxima-lm", { NULL }, 1445, "tcp" }, - { "proxima-lm", { NULL }, 1445, "udp" }, - { "ora-lm", { NULL }, 1446, "tcp" }, - { "ora-lm", { NULL }, 1446, "udp" }, - { "apri-lm", { NULL }, 1447, "tcp" }, - { "apri-lm", { NULL }, 1447, "udp" }, - { "oc-lm", { NULL }, 1448, "tcp" }, - { "oc-lm", { NULL }, 1448, "udp" }, - { "peport", { NULL }, 1449, "tcp" }, - { "peport", { NULL }, 1449, "udp" }, - { "dwf", { NULL }, 1450, "tcp" }, - { "dwf", { NULL }, 1450, "udp" }, - { "infoman", { NULL }, 1451, "tcp" }, - { "infoman", { NULL }, 1451, "udp" }, - { "gtegsc-lm", { NULL }, 1452, "tcp" }, - { "gtegsc-lm", { NULL }, 1452, "udp" }, - { "genie-lm", { NULL }, 1453, "tcp" }, - { "genie-lm", { NULL }, 1453, "udp" }, - { "interhdl_elmd", { NULL }, 1454, "tcp" }, - { "interhdl_elmd", { NULL }, 1454, "udp" }, - { "esl-lm", { NULL }, 1455, "tcp" }, - { "esl-lm", { NULL }, 1455, "udp" }, - { "dca", { NULL }, 1456, "tcp" }, - { "dca", { NULL }, 1456, "udp" }, - { "valisys-lm", { NULL }, 1457, "tcp" }, - { "valisys-lm", { NULL }, 1457, "udp" }, - { "nrcabq-lm", { NULL }, 1458, "tcp" }, - { "nrcabq-lm", { NULL }, 1458, "udp" }, - { "proshare1", { NULL }, 1459, "tcp" }, - { "proshare1", { NULL }, 1459, "udp" }, - { "proshare2", { NULL }, 1460, "tcp" }, - { "proshare2", { NULL }, 1460, "udp" }, - { "ibm_wrless_lan", { NULL }, 1461, "tcp" }, - { "ibm_wrless_lan", { NULL }, 1461, "udp" }, - { "world-lm", { NULL }, 1462, "tcp" }, - { "world-lm", { NULL }, 1462, "udp" }, - { "nucleus", { NULL }, 1463, "tcp" }, - { "nucleus", { NULL }, 1463, "udp" }, - { "msl_lmd", { NULL }, 1464, "tcp" }, - { "msl_lmd", { NULL }, 1464, "udp" }, - { "pipes", { NULL }, 1465, "tcp" }, - { "pipes", { NULL }, 1465, "udp" }, - { "oceansoft-lm", { NULL }, 1466, "tcp" }, - { "oceansoft-lm", { NULL }, 1466, "udp" }, - { "csdmbase", { NULL }, 1467, "tcp" }, - { "csdmbase", { NULL }, 1467, "udp" }, - { "csdm", { NULL }, 1468, "tcp" }, - { "csdm", { NULL }, 1468, "udp" }, - { "aal-lm", { NULL }, 1469, "tcp" }, - { "aal-lm", { NULL }, 1469, "udp" }, - { "uaiact", { NULL }, 1470, "tcp" }, - { "uaiact", { NULL }, 1470, "udp" }, - { "csdmbase", { NULL }, 1471, "tcp" }, - { "csdmbase", { NULL }, 1471, "udp" }, - { "csdm", { NULL }, 1472, "tcp" }, - { "csdm", { NULL }, 1472, "udp" }, - { "openmath", { NULL }, 1473, "tcp" }, - { "openmath", { NULL }, 1473, "udp" }, - { "telefinder", { NULL }, 1474, "tcp" }, - { "telefinder", { NULL }, 1474, "udp" }, - { "taligent-lm", { NULL }, 1475, "tcp" }, - { "taligent-lm", { NULL }, 1475, "udp" }, - { "clvm-cfg", { NULL }, 1476, "tcp" }, - { "clvm-cfg", { NULL }, 1476, "udp" }, - { "ms-sna-server", { NULL }, 1477, "tcp" }, - { "ms-sna-server", { NULL }, 1477, "udp" }, - { "ms-sna-base", { NULL }, 1478, "tcp" }, - { "ms-sna-base", { NULL }, 1478, "udp" }, - { "dberegister", { NULL }, 1479, "tcp" }, - { "dberegister", { NULL }, 1479, "udp" }, - { "pacerforum", { NULL }, 1480, "tcp" }, - { "pacerforum", { NULL }, 1480, "udp" }, - { "airs", { NULL }, 1481, "tcp" }, - { "airs", { NULL }, 1481, "udp" }, - { "miteksys-lm", { NULL }, 1482, "tcp" }, - { "miteksys-lm", { NULL }, 1482, "udp" }, - { "afs", { NULL }, 1483, "tcp" }, - { "afs", { NULL }, 1483, "udp" }, - { "confluent", { NULL }, 1484, "tcp" }, - { "confluent", { NULL }, 1484, "udp" }, - { "lansource", { NULL }, 1485, "tcp" }, - { "lansource", { NULL }, 1485, "udp" }, - { "nms_topo_serv", { NULL }, 1486, "tcp" }, - { "nms_topo_serv", { NULL }, 1486, "udp" }, - { "localinfosrvr", { NULL }, 1487, "tcp" }, - { "localinfosrvr", { NULL }, 1487, "udp" }, - { "docstor", { NULL }, 1488, "tcp" }, - { "docstor", { NULL }, 1488, "udp" }, - { "dmdocbroker", { NULL }, 1489, "tcp" }, - { "dmdocbroker", { NULL }, 1489, "udp" }, - { "insitu-conf", { NULL }, 1490, "tcp" }, - { "insitu-conf", { NULL }, 1490, "udp" }, - { "stone-design-1", { NULL }, 1492, "tcp" }, - { "stone-design-1", { NULL }, 1492, "udp" }, - { "netmap_lm", { NULL }, 1493, "tcp" }, - { "netmap_lm", { NULL }, 1493, "udp" }, - { "ica", { NULL }, 1494, "tcp" }, - { "ica", { NULL }, 1494, "udp" }, - { "cvc", { NULL }, 1495, "tcp" }, - { "cvc", { NULL }, 1495, "udp" }, - { "liberty-lm", { NULL }, 1496, "tcp" }, - { "liberty-lm", { NULL }, 1496, "udp" }, - { "rfx-lm", { NULL }, 1497, "tcp" }, - { "rfx-lm", { NULL }, 1497, "udp" }, - { "sybase-sqlany", { NULL }, 1498, "tcp" }, - { "sybase-sqlany", { NULL }, 1498, "udp" }, - { "fhc", { NULL }, 1499, "tcp" }, - { "fhc", { NULL }, 1499, "udp" }, - { "vlsi-lm", { NULL }, 1500, "tcp" }, - { "vlsi-lm", { NULL }, 1500, "udp" }, - { "saiscm", { NULL }, 1501, "tcp" }, - { "saiscm", { NULL }, 1501, "udp" }, - { "shivadiscovery", { NULL }, 1502, "tcp" }, - { "shivadiscovery", { NULL }, 1502, "udp" }, - { "imtc-mcs", { NULL }, 1503, "tcp" }, - { "imtc-mcs", { NULL }, 1503, "udp" }, - { "evb-elm", { NULL }, 1504, "tcp" }, - { "evb-elm", { NULL }, 1504, "udp" }, - { "funkproxy", { NULL }, 1505, "tcp" }, - { "funkproxy", { NULL }, 1505, "udp" }, - { "utcd", { NULL }, 1506, "tcp" }, - { "utcd", { NULL }, 1506, "udp" }, - { "symplex", { NULL }, 1507, "tcp" }, - { "symplex", { NULL }, 1507, "udp" }, - { "diagmond", { NULL }, 1508, "tcp" }, - { "diagmond", { NULL }, 1508, "udp" }, - { "robcad-lm", { NULL }, 1509, "tcp" }, - { "robcad-lm", { NULL }, 1509, "udp" }, - { "mvx-lm", { NULL }, 1510, "tcp" }, - { "mvx-lm", { NULL }, 1510, "udp" }, - { "3l-l1", { NULL }, 1511, "tcp" }, - { "3l-l1", { NULL }, 1511, "udp" }, - { "wins", { NULL }, 1512, "tcp" }, - { "wins", { NULL }, 1512, "udp" }, - { "fujitsu-dtc", { NULL }, 1513, "tcp" }, - { "fujitsu-dtc", { NULL }, 1513, "udp" }, - { "fujitsu-dtcns", { NULL }, 1514, "tcp" }, - { "fujitsu-dtcns", { NULL }, 1514, "udp" }, - { "ifor-protocol", { NULL }, 1515, "tcp" }, - { "ifor-protocol", { NULL }, 1515, "udp" }, - { "vpad", { NULL }, 1516, "tcp" }, - { "vpad", { NULL }, 1516, "udp" }, - { "vpac", { NULL }, 1517, "tcp" }, - { "vpac", { NULL }, 1517, "udp" }, - { "vpvd", { NULL }, 1518, "tcp" }, - { "vpvd", { NULL }, 1518, "udp" }, - { "vpvc", { NULL }, 1519, "tcp" }, - { "vpvc", { NULL }, 1519, "udp" }, - { "atm-zip-office", { NULL }, 1520, "tcp" }, - { "atm-zip-office", { NULL }, 1520, "udp" }, - { "ncube-lm", { NULL }, 1521, "tcp" }, - { "ncube-lm", { NULL }, 1521, "udp" }, - { "ricardo-lm", { NULL }, 1522, "tcp" }, - { "ricardo-lm", { NULL }, 1522, "udp" }, - { "cichild-lm", { NULL }, 1523, "tcp" }, - { "cichild-lm", { NULL }, 1523, "udp" }, - { "ingreslock", { NULL }, 1524, "tcp" }, - { "ingreslock", { NULL }, 1524, "udp" }, - { "orasrv", { NULL }, 1525, "tcp" }, - { "orasrv", { NULL }, 1525, "udp" }, - { "prospero-np", { NULL }, 1525, "tcp" }, - { "prospero-np", { NULL }, 1525, "udp" }, - { "pdap-np", { NULL }, 1526, "tcp" }, - { "pdap-np", { NULL }, 1526, "udp" }, - { "tlisrv", { NULL }, 1527, "tcp" }, - { "tlisrv", { NULL }, 1527, "udp" }, - { "coauthor", { NULL }, 1529, "tcp" }, - { "coauthor", { NULL }, 1529, "udp" }, - { "rap-service", { NULL }, 1530, "tcp" }, - { "rap-service", { NULL }, 1530, "udp" }, - { "rap-listen", { NULL }, 1531, "tcp" }, - { "rap-listen", { NULL }, 1531, "udp" }, - { "miroconnect", { NULL }, 1532, "tcp" }, - { "miroconnect", { NULL }, 1532, "udp" }, - { "virtual-places", { NULL }, 1533, "tcp" }, - { "virtual-places", { NULL }, 1533, "udp" }, - { "micromuse-lm", { NULL }, 1534, "tcp" }, - { "micromuse-lm", { NULL }, 1534, "udp" }, - { "ampr-info", { NULL }, 1535, "tcp" }, - { "ampr-info", { NULL }, 1535, "udp" }, - { "ampr-inter", { NULL }, 1536, "tcp" }, - { "ampr-inter", { NULL }, 1536, "udp" }, - { "sdsc-lm", { NULL }, 1537, "tcp" }, - { "sdsc-lm", { NULL }, 1537, "udp" }, - { "3ds-lm", { NULL }, 1538, "tcp" }, - { "3ds-lm", { NULL }, 1538, "udp" }, - { "intellistor-lm", { NULL }, 1539, "tcp" }, - { "intellistor-lm", { NULL }, 1539, "udp" }, - { "rds", { NULL }, 1540, "tcp" }, - { "rds", { NULL }, 1540, "udp" }, - { "rds2", { NULL }, 1541, "tcp" }, - { "rds2", { NULL }, 1541, "udp" }, - { "gridgen-elmd", { NULL }, 1542, "tcp" }, - { "gridgen-elmd", { NULL }, 1542, "udp" }, - { "simba-cs", { NULL }, 1543, "tcp" }, - { "simba-cs", { NULL }, 1543, "udp" }, - { "aspeclmd", { NULL }, 1544, "tcp" }, - { "aspeclmd", { NULL }, 1544, "udp" }, - { "vistium-share", { NULL }, 1545, "tcp" }, - { "vistium-share", { NULL }, 1545, "udp" }, - { "abbaccuray", { NULL }, 1546, "tcp" }, - { "abbaccuray", { NULL }, 1546, "udp" }, - { "laplink", { NULL }, 1547, "tcp" }, - { "laplink", { NULL }, 1547, "udp" }, - { "axon-lm", { NULL }, 1548, "tcp" }, - { "axon-lm", { NULL }, 1548, "udp" }, - { "shivahose", { NULL }, 1549, "tcp" }, - { "shivasound", { NULL }, 1549, "udp" }, - { "3m-image-lm", { NULL }, 1550, "tcp" }, - { "3m-image-lm", { NULL }, 1550, "udp" }, - { "hecmtl-db", { NULL }, 1551, "tcp" }, - { "hecmtl-db", { NULL }, 1551, "udp" }, - { "pciarray", { NULL }, 1552, "tcp" }, - { "pciarray", { NULL }, 1552, "udp" }, - { "sna-cs", { NULL }, 1553, "tcp" }, - { "sna-cs", { NULL }, 1553, "udp" }, - { "caci-lm", { NULL }, 1554, "tcp" }, - { "caci-lm", { NULL }, 1554, "udp" }, - { "livelan", { NULL }, 1555, "tcp" }, - { "livelan", { NULL }, 1555, "udp" }, - { "veritas_pbx", { NULL }, 1556, "tcp" }, - { "veritas_pbx", { NULL }, 1556, "udp" }, - { "arbortext-lm", { NULL }, 1557, "tcp" }, - { "arbortext-lm", { NULL }, 1557, "udp" }, - { "xingmpeg", { NULL }, 1558, "tcp" }, - { "xingmpeg", { NULL }, 1558, "udp" }, - { "web2host", { NULL }, 1559, "tcp" }, - { "web2host", { NULL }, 1559, "udp" }, - { "asci-val", { NULL }, 1560, "tcp" }, - { "asci-val", { NULL }, 1560, "udp" }, - { "facilityview", { NULL }, 1561, "tcp" }, - { "facilityview", { NULL }, 1561, "udp" }, - { "pconnectmgr", { NULL }, 1562, "tcp" }, - { "pconnectmgr", { NULL }, 1562, "udp" }, - { "cadabra-lm", { NULL }, 1563, "tcp" }, - { "cadabra-lm", { NULL }, 1563, "udp" }, - { "pay-per-view", { NULL }, 1564, "tcp" }, - { "pay-per-view", { NULL }, 1564, "udp" }, - { "winddlb", { NULL }, 1565, "tcp" }, - { "winddlb", { NULL }, 1565, "udp" }, - { "corelvideo", { NULL }, 1566, "tcp" }, - { "corelvideo", { NULL }, 1566, "udp" }, - { "jlicelmd", { NULL }, 1567, "tcp" }, - { "jlicelmd", { NULL }, 1567, "udp" }, - { "tsspmap", { NULL }, 1568, "tcp" }, - { "tsspmap", { NULL }, 1568, "udp" }, - { "ets", { NULL }, 1569, "tcp" }, - { "ets", { NULL }, 1569, "udp" }, - { "orbixd", { NULL }, 1570, "tcp" }, - { "orbixd", { NULL }, 1570, "udp" }, - { "rdb-dbs-disp", { NULL }, 1571, "tcp" }, - { "rdb-dbs-disp", { NULL }, 1571, "udp" }, - { "chip-lm", { NULL }, 1572, "tcp" }, - { "chip-lm", { NULL }, 1572, "udp" }, - { "itscomm-ns", { NULL }, 1573, "tcp" }, - { "itscomm-ns", { NULL }, 1573, "udp" }, - { "mvel-lm", { NULL }, 1574, "tcp" }, - { "mvel-lm", { NULL }, 1574, "udp" }, - { "oraclenames", { NULL }, 1575, "tcp" }, - { "oraclenames", { NULL }, 1575, "udp" }, - { "moldflow-lm", { NULL }, 1576, "tcp" }, - { "moldflow-lm", { NULL }, 1576, "udp" }, - { "hypercube-lm", { NULL }, 1577, "tcp" }, - { "hypercube-lm", { NULL }, 1577, "udp" }, - { "jacobus-lm", { NULL }, 1578, "tcp" }, - { "jacobus-lm", { NULL }, 1578, "udp" }, - { "ioc-sea-lm", { NULL }, 1579, "tcp" }, - { "ioc-sea-lm", { NULL }, 1579, "udp" }, - { "tn-tl-r1", { NULL }, 1580, "tcp" }, - { "tn-tl-r2", { NULL }, 1580, "udp" }, - { "mil-2045-47001", { NULL }, 1581, "tcp" }, - { "mil-2045-47001", { NULL }, 1581, "udp" }, - { "msims", { NULL }, 1582, "tcp" }, - { "msims", { NULL }, 1582, "udp" }, - { "simbaexpress", { NULL }, 1583, "tcp" }, - { "simbaexpress", { NULL }, 1583, "udp" }, - { "tn-tl-fd2", { NULL }, 1584, "tcp" }, - { "tn-tl-fd2", { NULL }, 1584, "udp" }, - { "intv", { NULL }, 1585, "tcp" }, - { "intv", { NULL }, 1585, "udp" }, - { "ibm-abtact", { NULL }, 1586, "tcp" }, - { "ibm-abtact", { NULL }, 1586, "udp" }, - { "pra_elmd", { NULL }, 1587, "tcp" }, - { "pra_elmd", { NULL }, 1587, "udp" }, - { "triquest-lm", { NULL }, 1588, "tcp" }, - { "triquest-lm", { NULL }, 1588, "udp" }, - { "vqp", { NULL }, 1589, "tcp" }, - { "vqp", { NULL }, 1589, "udp" }, - { "gemini-lm", { NULL }, 1590, "tcp" }, - { "gemini-lm", { NULL }, 1590, "udp" }, - { "ncpm-pm", { NULL }, 1591, "tcp" }, - { "ncpm-pm", { NULL }, 1591, "udp" }, - { "commonspace", { NULL }, 1592, "tcp" }, - { "commonspace", { NULL }, 1592, "udp" }, - { "mainsoft-lm", { NULL }, 1593, "tcp" }, - { "mainsoft-lm", { NULL }, 1593, "udp" }, - { "sixtrak", { NULL }, 1594, "tcp" }, - { "sixtrak", { NULL }, 1594, "udp" }, - { "radio", { NULL }, 1595, "tcp" }, - { "radio", { NULL }, 1595, "udp" }, - { "radio-sm", { NULL }, 1596, "tcp" }, - { "radio-bc", { NULL }, 1596, "udp" }, - { "orbplus-iiop", { NULL }, 1597, "tcp" }, - { "orbplus-iiop", { NULL }, 1597, "udp" }, - { "picknfs", { NULL }, 1598, "tcp" }, - { "picknfs", { NULL }, 1598, "udp" }, - { "simbaservices", { NULL }, 1599, "tcp" }, - { "simbaservices", { NULL }, 1599, "udp" }, - { "issd", { NULL }, 1600, "tcp" }, - { "issd", { NULL }, 1600, "udp" }, - { "aas", { NULL }, 1601, "tcp" }, - { "aas", { NULL }, 1601, "udp" }, - { "inspect", { NULL }, 1602, "tcp" }, - { "inspect", { NULL }, 1602, "udp" }, - { "picodbc", { NULL }, 1603, "tcp" }, - { "picodbc", { NULL }, 1603, "udp" }, - { "icabrowser", { NULL }, 1604, "tcp" }, - { "icabrowser", { NULL }, 1604, "udp" }, - { "slp", { NULL }, 1605, "tcp" }, - { "slp", { NULL }, 1605, "udp" }, - { "slm-api", { NULL }, 1606, "tcp" }, - { "slm-api", { NULL }, 1606, "udp" }, - { "stt", { NULL }, 1607, "tcp" }, - { "stt", { NULL }, 1607, "udp" }, - { "smart-lm", { NULL }, 1608, "tcp" }, - { "smart-lm", { NULL }, 1608, "udp" }, - { "isysg-lm", { NULL }, 1609, "tcp" }, - { "isysg-lm", { NULL }, 1609, "udp" }, - { "taurus-wh", { NULL }, 1610, "tcp" }, - { "taurus-wh", { NULL }, 1610, "udp" }, - { "ill", { NULL }, 1611, "tcp" }, - { "ill", { NULL }, 1611, "udp" }, - { "netbill-trans", { NULL }, 1612, "tcp" }, - { "netbill-trans", { NULL }, 1612, "udp" }, - { "netbill-keyrep", { NULL }, 1613, "tcp" }, - { "netbill-keyrep", { NULL }, 1613, "udp" }, - { "netbill-cred", { NULL }, 1614, "tcp" }, - { "netbill-cred", { NULL }, 1614, "udp" }, - { "netbill-auth", { NULL }, 1615, "tcp" }, - { "netbill-auth", { NULL }, 1615, "udp" }, - { "netbill-prod", { NULL }, 1616, "tcp" }, - { "netbill-prod", { NULL }, 1616, "udp" }, - { "nimrod-agent", { NULL }, 1617, "tcp" }, - { "nimrod-agent", { NULL }, 1617, "udp" }, - { "skytelnet", { NULL }, 1618, "tcp" }, - { "skytelnet", { NULL }, 1618, "udp" }, - { "xs-openstorage", { NULL }, 1619, "tcp" }, - { "xs-openstorage", { NULL }, 1619, "udp" }, - { "faxportwinport", { NULL }, 1620, "tcp" }, - { "faxportwinport", { NULL }, 1620, "udp" }, - { "softdataphone", { NULL }, 1621, "tcp" }, - { "softdataphone", { NULL }, 1621, "udp" }, - { "ontime", { NULL }, 1622, "tcp" }, - { "ontime", { NULL }, 1622, "udp" }, - { "jaleosnd", { NULL }, 1623, "tcp" }, - { "jaleosnd", { NULL }, 1623, "udp" }, - { "udp-sr-port", { NULL }, 1624, "tcp" }, - { "udp-sr-port", { NULL }, 1624, "udp" }, - { "svs-omagent", { NULL }, 1625, "tcp" }, - { "svs-omagent", { NULL }, 1625, "udp" }, - { "shockwave", { NULL }, 1626, "tcp" }, - { "shockwave", { NULL }, 1626, "udp" }, - { "t128-gateway", { NULL }, 1627, "tcp" }, - { "t128-gateway", { NULL }, 1627, "udp" }, - { "lontalk-norm", { NULL }, 1628, "tcp" }, - { "lontalk-norm", { NULL }, 1628, "udp" }, - { "lontalk-urgnt", { NULL }, 1629, "tcp" }, - { "lontalk-urgnt", { NULL }, 1629, "udp" }, - { "oraclenet8cman", { NULL }, 1630, "tcp" }, - { "oraclenet8cman", { NULL }, 1630, "udp" }, - { "visitview", { NULL }, 1631, "tcp" }, - { "visitview", { NULL }, 1631, "udp" }, - { "pammratc", { NULL }, 1632, "tcp" }, - { "pammratc", { NULL }, 1632, "udp" }, - { "pammrpc", { NULL }, 1633, "tcp" }, - { "pammrpc", { NULL }, 1633, "udp" }, - { "loaprobe", { NULL }, 1634, "tcp" }, - { "loaprobe", { NULL }, 1634, "udp" }, - { "edb-server1", { NULL }, 1635, "tcp" }, - { "edb-server1", { NULL }, 1635, "udp" }, - { "isdc", { NULL }, 1636, "tcp" }, - { "isdc", { NULL }, 1636, "udp" }, - { "islc", { NULL }, 1637, "tcp" }, - { "islc", { NULL }, 1637, "udp" }, - { "ismc", { NULL }, 1638, "tcp" }, - { "ismc", { NULL }, 1638, "udp" }, - { "cert-initiator", { NULL }, 1639, "tcp" }, - { "cert-initiator", { NULL }, 1639, "udp" }, - { "cert-responder", { NULL }, 1640, "tcp" }, - { "cert-responder", { NULL }, 1640, "udp" }, - { "invision", { NULL }, 1641, "tcp" }, - { "invision", { NULL }, 1641, "udp" }, - { "isis-am", { NULL }, 1642, "tcp" }, - { "isis-am", { NULL }, 1642, "udp" }, - { "isis-ambc", { NULL }, 1643, "tcp" }, - { "isis-ambc", { NULL }, 1643, "udp" }, - { "saiseh", { NULL }, 1644, "tcp" }, - { "sightline", { NULL }, 1645, "tcp" }, - { "sightline", { NULL }, 1645, "udp" }, - { "sa-msg-port", { NULL }, 1646, "tcp" }, - { "sa-msg-port", { NULL }, 1646, "udp" }, - { "rsap", { NULL }, 1647, "tcp" }, - { "rsap", { NULL }, 1647, "udp" }, - { "concurrent-lm", { NULL }, 1648, "tcp" }, - { "concurrent-lm", { NULL }, 1648, "udp" }, - { "kermit", { NULL }, 1649, "tcp" }, - { "kermit", { NULL }, 1649, "udp" }, - { "nkd", { NULL }, 1650, "tcp" }, - { "nkd", { NULL }, 1650, "udp" }, - { "shiva_confsrvr", { NULL }, 1651, "tcp" }, - { "shiva_confsrvr", { NULL }, 1651, "udp" }, - { "xnmp", { NULL }, 1652, "tcp" }, - { "xnmp", { NULL }, 1652, "udp" }, - { "alphatech-lm", { NULL }, 1653, "tcp" }, - { "alphatech-lm", { NULL }, 1653, "udp" }, - { "stargatealerts", { NULL }, 1654, "tcp" }, - { "stargatealerts", { NULL }, 1654, "udp" }, - { "dec-mbadmin", { NULL }, 1655, "tcp" }, - { "dec-mbadmin", { NULL }, 1655, "udp" }, - { "dec-mbadmin-h", { NULL }, 1656, "tcp" }, - { "dec-mbadmin-h", { NULL }, 1656, "udp" }, - { "fujitsu-mmpdc", { NULL }, 1657, "tcp" }, - { "fujitsu-mmpdc", { NULL }, 1657, "udp" }, - { "sixnetudr", { NULL }, 1658, "tcp" }, - { "sixnetudr", { NULL }, 1658, "udp" }, - { "sg-lm", { NULL }, 1659, "tcp" }, - { "sg-lm", { NULL }, 1659, "udp" }, - { "skip-mc-gikreq", { NULL }, 1660, "tcp" }, - { "skip-mc-gikreq", { NULL }, 1660, "udp" }, - { "netview-aix-1", { NULL }, 1661, "tcp" }, - { "netview-aix-1", { NULL }, 1661, "udp" }, - { "netview-aix-2", { NULL }, 1662, "tcp" }, - { "netview-aix-2", { NULL }, 1662, "udp" }, - { "netview-aix-3", { NULL }, 1663, "tcp" }, - { "netview-aix-3", { NULL }, 1663, "udp" }, - { "netview-aix-4", { NULL }, 1664, "tcp" }, - { "netview-aix-4", { NULL }, 1664, "udp" }, - { "netview-aix-5", { NULL }, 1665, "tcp" }, - { "netview-aix-5", { NULL }, 1665, "udp" }, - { "netview-aix-6", { NULL }, 1666, "tcp" }, - { "netview-aix-6", { NULL }, 1666, "udp" }, - { "netview-aix-7", { NULL }, 1667, "tcp" }, - { "netview-aix-7", { NULL }, 1667, "udp" }, - { "netview-aix-8", { NULL }, 1668, "tcp" }, - { "netview-aix-8", { NULL }, 1668, "udp" }, - { "netview-aix-9", { NULL }, 1669, "tcp" }, - { "netview-aix-9", { NULL }, 1669, "udp" }, - { "netview-aix-10", { NULL }, 1670, "tcp" }, - { "netview-aix-10", { NULL }, 1670, "udp" }, - { "netview-aix-11", { NULL }, 1671, "tcp" }, - { "netview-aix-11", { NULL }, 1671, "udp" }, - { "netview-aix-12", { NULL }, 1672, "tcp" }, - { "netview-aix-12", { NULL }, 1672, "udp" }, - { "proshare-mc-1", { NULL }, 1673, "tcp" }, - { "proshare-mc-1", { NULL }, 1673, "udp" }, - { "proshare-mc-2", { NULL }, 1674, "tcp" }, - { "proshare-mc-2", { NULL }, 1674, "udp" }, - { "pdp", { NULL }, 1675, "tcp" }, - { "pdp", { NULL }, 1675, "udp" }, - { "netcomm1", { NULL }, 1676, "tcp" }, - { "netcomm2", { NULL }, 1676, "udp" }, - { "groupwise", { NULL }, 1677, "tcp" }, - { "groupwise", { NULL }, 1677, "udp" }, - { "prolink", { NULL }, 1678, "tcp" }, - { "prolink", { NULL }, 1678, "udp" }, - { "darcorp-lm", { NULL }, 1679, "tcp" }, - { "darcorp-lm", { NULL }, 1679, "udp" }, - { "microcom-sbp", { NULL }, 1680, "tcp" }, - { "microcom-sbp", { NULL }, 1680, "udp" }, - { "sd-elmd", { NULL }, 1681, "tcp" }, - { "sd-elmd", { NULL }, 1681, "udp" }, - { "lanyon-lantern", { NULL }, 1682, "tcp" }, - { "lanyon-lantern", { NULL }, 1682, "udp" }, - { "ncpm-hip", { NULL }, 1683, "tcp" }, - { "ncpm-hip", { NULL }, 1683, "udp" }, - { "snaresecure", { NULL }, 1684, "tcp" }, - { "snaresecure", { NULL }, 1684, "udp" }, - { "n2nremote", { NULL }, 1685, "tcp" }, - { "n2nremote", { NULL }, 1685, "udp" }, - { "cvmon", { NULL }, 1686, "tcp" }, - { "cvmon", { NULL }, 1686, "udp" }, - { "nsjtp-ctrl", { NULL }, 1687, "tcp" }, - { "nsjtp-ctrl", { NULL }, 1687, "udp" }, - { "nsjtp-data", { NULL }, 1688, "tcp" }, - { "nsjtp-data", { NULL }, 1688, "udp" }, - { "firefox", { NULL }, 1689, "tcp" }, - { "firefox", { NULL }, 1689, "udp" }, - { "ng-umds", { NULL }, 1690, "tcp" }, - { "ng-umds", { NULL }, 1690, "udp" }, - { "empire-empuma", { NULL }, 1691, "tcp" }, - { "empire-empuma", { NULL }, 1691, "udp" }, - { "sstsys-lm", { NULL }, 1692, "tcp" }, - { "sstsys-lm", { NULL }, 1692, "udp" }, - { "rrirtr", { NULL }, 1693, "tcp" }, - { "rrirtr", { NULL }, 1693, "udp" }, - { "rrimwm", { NULL }, 1694, "tcp" }, - { "rrimwm", { NULL }, 1694, "udp" }, - { "rrilwm", { NULL }, 1695, "tcp" }, - { "rrilwm", { NULL }, 1695, "udp" }, - { "rrifmm", { NULL }, 1696, "tcp" }, - { "rrifmm", { NULL }, 1696, "udp" }, - { "rrisat", { NULL }, 1697, "tcp" }, - { "rrisat", { NULL }, 1697, "udp" }, - { "rsvp-encap-1", { NULL }, 1698, "tcp" }, - { "rsvp-encap-1", { NULL }, 1698, "udp" }, - { "rsvp-encap-2", { NULL }, 1699, "tcp" }, - { "rsvp-encap-2", { NULL }, 1699, "udp" }, - { "mps-raft", { NULL }, 1700, "tcp" }, - { "mps-raft", { NULL }, 1700, "udp" }, - { "l2f", { NULL }, 1701, "tcp" }, - { "l2f", { NULL }, 1701, "udp" }, - { "l2tp", { NULL }, 1701, "tcp" }, - { "l2tp", { NULL }, 1701, "udp" }, - { "deskshare", { NULL }, 1702, "tcp" }, - { "deskshare", { NULL }, 1702, "udp" }, - { "hb-engine", { NULL }, 1703, "tcp" }, - { "hb-engine", { NULL }, 1703, "udp" }, - { "bcs-broker", { NULL }, 1704, "tcp" }, - { "bcs-broker", { NULL }, 1704, "udp" }, - { "slingshot", { NULL }, 1705, "tcp" }, - { "slingshot", { NULL }, 1705, "udp" }, - { "jetform", { NULL }, 1706, "tcp" }, - { "jetform", { NULL }, 1706, "udp" }, - { "vdmplay", { NULL }, 1707, "tcp" }, - { "vdmplay", { NULL }, 1707, "udp" }, - { "gat-lmd", { NULL }, 1708, "tcp" }, - { "gat-lmd", { NULL }, 1708, "udp" }, - { "centra", { NULL }, 1709, "tcp" }, - { "centra", { NULL }, 1709, "udp" }, - { "impera", { NULL }, 1710, "tcp" }, - { "impera", { NULL }, 1710, "udp" }, - { "pptconference", { NULL }, 1711, "tcp" }, - { "pptconference", { NULL }, 1711, "udp" }, - { "registrar", { NULL }, 1712, "tcp" }, - { "registrar", { NULL }, 1712, "udp" }, - { "conferencetalk", { NULL }, 1713, "tcp" }, - { "conferencetalk", { NULL }, 1713, "udp" }, - { "sesi-lm", { NULL }, 1714, "tcp" }, - { "sesi-lm", { NULL }, 1714, "udp" }, - { "houdini-lm", { NULL }, 1715, "tcp" }, - { "houdini-lm", { NULL }, 1715, "udp" }, - { "xmsg", { NULL }, 1716, "tcp" }, - { "xmsg", { NULL }, 1716, "udp" }, - { "fj-hdnet", { NULL }, 1717, "tcp" }, - { "fj-hdnet", { NULL }, 1717, "udp" }, - { "h323gatedisc", { NULL }, 1718, "tcp" }, - { "h323gatedisc", { NULL }, 1718, "udp" }, - { "h323gatestat", { NULL }, 1719, "tcp" }, - { "h323gatestat", { NULL }, 1719, "udp" }, - { "h323hostcall", { NULL }, 1720, "tcp" }, - { "h323hostcall", { NULL }, 1720, "udp" }, - { "caicci", { NULL }, 1721, "tcp" }, - { "caicci", { NULL }, 1721, "udp" }, - { "hks-lm", { NULL }, 1722, "tcp" }, - { "hks-lm", { NULL }, 1722, "udp" }, - { "pptp", { NULL }, 1723, "tcp" }, - { "pptp", { NULL }, 1723, "udp" }, - { "csbphonemaster", { NULL }, 1724, "tcp" }, - { "csbphonemaster", { NULL }, 1724, "udp" }, - { "iden-ralp", { NULL }, 1725, "tcp" }, - { "iden-ralp", { NULL }, 1725, "udp" }, - { "iberiagames", { NULL }, 1726, "tcp" }, - { "iberiagames", { NULL }, 1726, "udp" }, - { "winddx", { NULL }, 1727, "tcp" }, - { "winddx", { NULL }, 1727, "udp" }, - { "telindus", { NULL }, 1728, "tcp" }, - { "telindus", { NULL }, 1728, "udp" }, - { "citynl", { NULL }, 1729, "tcp" }, - { "citynl", { NULL }, 1729, "udp" }, - { "roketz", { NULL }, 1730, "tcp" }, - { "roketz", { NULL }, 1730, "udp" }, - { "msiccp", { NULL }, 1731, "tcp" }, - { "msiccp", { NULL }, 1731, "udp" }, - { "proxim", { NULL }, 1732, "tcp" }, - { "proxim", { NULL }, 1732, "udp" }, - { "siipat", { NULL }, 1733, "tcp" }, - { "siipat", { NULL }, 1733, "udp" }, - { "cambertx-lm", { NULL }, 1734, "tcp" }, - { "cambertx-lm", { NULL }, 1734, "udp" }, - { "privatechat", { NULL }, 1735, "tcp" }, - { "privatechat", { NULL }, 1735, "udp" }, - { "street-stream", { NULL }, 1736, "tcp" }, - { "street-stream", { NULL }, 1736, "udp" }, - { "ultimad", { NULL }, 1737, "tcp" }, - { "ultimad", { NULL }, 1737, "udp" }, - { "gamegen1", { NULL }, 1738, "tcp" }, - { "gamegen1", { NULL }, 1738, "udp" }, - { "webaccess", { NULL }, 1739, "tcp" }, - { "webaccess", { NULL }, 1739, "udp" }, - { "encore", { NULL }, 1740, "tcp" }, - { "encore", { NULL }, 1740, "udp" }, - { "cisco-net-mgmt", { NULL }, 1741, "tcp" }, - { "cisco-net-mgmt", { NULL }, 1741, "udp" }, - { "3Com-nsd", { NULL }, 1742, "tcp" }, - { "3Com-nsd", { NULL }, 1742, "udp" }, - { "cinegrfx-lm", { NULL }, 1743, "tcp" }, - { "cinegrfx-lm", { NULL }, 1743, "udp" }, - { "ncpm-ft", { NULL }, 1744, "tcp" }, - { "ncpm-ft", { NULL }, 1744, "udp" }, - { "remote-winsock", { NULL }, 1745, "tcp" }, - { "remote-winsock", { NULL }, 1745, "udp" }, - { "ftrapid-1", { NULL }, 1746, "tcp" }, - { "ftrapid-1", { NULL }, 1746, "udp" }, - { "ftrapid-2", { NULL }, 1747, "tcp" }, - { "ftrapid-2", { NULL }, 1747, "udp" }, - { "oracle-em1", { NULL }, 1748, "tcp" }, - { "oracle-em1", { NULL }, 1748, "udp" }, - { "aspen-services", { NULL }, 1749, "tcp" }, - { "aspen-services", { NULL }, 1749, "udp" }, - { "sslp", { NULL }, 1750, "tcp" }, - { "sslp", { NULL }, 1750, "udp" }, - { "swiftnet", { NULL }, 1751, "tcp" }, - { "swiftnet", { NULL }, 1751, "udp" }, - { "lofr-lm", { NULL }, 1752, "tcp" }, - { "lofr-lm", { NULL }, 1752, "udp" }, - { "oracle-em2", { NULL }, 1754, "tcp" }, - { "oracle-em2", { NULL }, 1754, "udp" }, - { "ms-streaming", { NULL }, 1755, "tcp" }, - { "ms-streaming", { NULL }, 1755, "udp" }, - { "capfast-lmd", { NULL }, 1756, "tcp" }, - { "capfast-lmd", { NULL }, 1756, "udp" }, - { "cnhrp", { NULL }, 1757, "tcp" }, - { "cnhrp", { NULL }, 1757, "udp" }, - { "tftp-mcast", { NULL }, 1758, "tcp" }, - { "tftp-mcast", { NULL }, 1758, "udp" }, - { "spss-lm", { NULL }, 1759, "tcp" }, - { "spss-lm", { NULL }, 1759, "udp" }, - { "www-ldap-gw", { NULL }, 1760, "tcp" }, - { "www-ldap-gw", { NULL }, 1760, "udp" }, - { "cft-0", { NULL }, 1761, "tcp" }, - { "cft-0", { NULL }, 1761, "udp" }, - { "cft-1", { NULL }, 1762, "tcp" }, - { "cft-1", { NULL }, 1762, "udp" }, - { "cft-2", { NULL }, 1763, "tcp" }, - { "cft-2", { NULL }, 1763, "udp" }, - { "cft-3", { NULL }, 1764, "tcp" }, - { "cft-3", { NULL }, 1764, "udp" }, - { "cft-4", { NULL }, 1765, "tcp" }, - { "cft-4", { NULL }, 1765, "udp" }, - { "cft-5", { NULL }, 1766, "tcp" }, - { "cft-5", { NULL }, 1766, "udp" }, - { "cft-6", { NULL }, 1767, "tcp" }, - { "cft-6", { NULL }, 1767, "udp" }, - { "cft-7", { NULL }, 1768, "tcp" }, - { "cft-7", { NULL }, 1768, "udp" }, - { "bmc-net-adm", { NULL }, 1769, "tcp" }, - { "bmc-net-adm", { NULL }, 1769, "udp" }, - { "bmc-net-svc", { NULL }, 1770, "tcp" }, - { "bmc-net-svc", { NULL }, 1770, "udp" }, - { "vaultbase", { NULL }, 1771, "tcp" }, - { "vaultbase", { NULL }, 1771, "udp" }, - { "essweb-gw", { NULL }, 1772, "tcp" }, - { "essweb-gw", { NULL }, 1772, "udp" }, - { "kmscontrol", { NULL }, 1773, "tcp" }, - { "kmscontrol", { NULL }, 1773, "udp" }, - { "global-dtserv", { NULL }, 1774, "tcp" }, - { "global-dtserv", { NULL }, 1774, "udp" }, - { "femis", { NULL }, 1776, "tcp" }, - { "femis", { NULL }, 1776, "udp" }, - { "powerguardian", { NULL }, 1777, "tcp" }, - { "powerguardian", { NULL }, 1777, "udp" }, - { "prodigy-intrnet", { NULL }, 1778, "tcp" }, - { "prodigy-intrnet", { NULL }, 1778, "udp" }, - { "pharmasoft", { NULL }, 1779, "tcp" }, - { "pharmasoft", { NULL }, 1779, "udp" }, - { "dpkeyserv", { NULL }, 1780, "tcp" }, - { "dpkeyserv", { NULL }, 1780, "udp" }, - { "answersoft-lm", { NULL }, 1781, "tcp" }, - { "answersoft-lm", { NULL }, 1781, "udp" }, - { "hp-hcip", { NULL }, 1782, "tcp" }, - { "hp-hcip", { NULL }, 1782, "udp" }, - { "finle-lm", { NULL }, 1784, "tcp" }, - { "finle-lm", { NULL }, 1784, "udp" }, - { "windlm", { NULL }, 1785, "tcp" }, - { "windlm", { NULL }, 1785, "udp" }, - { "funk-logger", { NULL }, 1786, "tcp" }, - { "funk-logger", { NULL }, 1786, "udp" }, - { "funk-license", { NULL }, 1787, "tcp" }, - { "funk-license", { NULL }, 1787, "udp" }, - { "psmond", { NULL }, 1788, "tcp" }, - { "psmond", { NULL }, 1788, "udp" }, - { "hello", { NULL }, 1789, "tcp" }, - { "hello", { NULL }, 1789, "udp" }, - { "nmsp", { NULL }, 1790, "tcp" }, - { "nmsp", { NULL }, 1790, "udp" }, - { "ea1", { NULL }, 1791, "tcp" }, - { "ea1", { NULL }, 1791, "udp" }, - { "ibm-dt-2", { NULL }, 1792, "tcp" }, - { "ibm-dt-2", { NULL }, 1792, "udp" }, - { "rsc-robot", { NULL }, 1793, "tcp" }, - { "rsc-robot", { NULL }, 1793, "udp" }, - { "cera-bcm", { NULL }, 1794, "tcp" }, - { "cera-bcm", { NULL }, 1794, "udp" }, - { "dpi-proxy", { NULL }, 1795, "tcp" }, - { "dpi-proxy", { NULL }, 1795, "udp" }, - { "vocaltec-admin", { NULL }, 1796, "tcp" }, - { "vocaltec-admin", { NULL }, 1796, "udp" }, - { "uma", { NULL }, 1797, "tcp" }, - { "uma", { NULL }, 1797, "udp" }, - { "etp", { NULL }, 1798, "tcp" }, - { "etp", { NULL }, 1798, "udp" }, - { "netrisk", { NULL }, 1799, "tcp" }, - { "netrisk", { NULL }, 1799, "udp" }, - { "ansys-lm", { NULL }, 1800, "tcp" }, - { "ansys-lm", { NULL }, 1800, "udp" }, - { "msmq", { NULL }, 1801, "tcp" }, - { "msmq", { NULL }, 1801, "udp" }, - { "concomp1", { NULL }, 1802, "tcp" }, - { "concomp1", { NULL }, 1802, "udp" }, - { "hp-hcip-gwy", { NULL }, 1803, "tcp" }, - { "hp-hcip-gwy", { NULL }, 1803, "udp" }, - { "enl", { NULL }, 1804, "tcp" }, - { "enl", { NULL }, 1804, "udp" }, - { "enl-name", { NULL }, 1805, "tcp" }, - { "enl-name", { NULL }, 1805, "udp" }, - { "musiconline", { NULL }, 1806, "tcp" }, - { "musiconline", { NULL }, 1806, "udp" }, - { "fhsp", { NULL }, 1807, "tcp" }, - { "fhsp", { NULL }, 1807, "udp" }, - { "oracle-vp2", { NULL }, 1808, "tcp" }, - { "oracle-vp2", { NULL }, 1808, "udp" }, - { "oracle-vp1", { NULL }, 1809, "tcp" }, - { "oracle-vp1", { NULL }, 1809, "udp" }, - { "jerand-lm", { NULL }, 1810, "tcp" }, - { "jerand-lm", { NULL }, 1810, "udp" }, - { "scientia-sdb", { NULL }, 1811, "tcp" }, - { "scientia-sdb", { NULL }, 1811, "udp" }, - { "radius", { NULL }, 1812, "tcp" }, - { "radius", { NULL }, 1812, "udp" }, - { "radius-acct", { NULL }, 1813, "tcp" }, - { "radius-acct", { NULL }, 1813, "udp" }, - { "tdp-suite", { NULL }, 1814, "tcp" }, - { "tdp-suite", { NULL }, 1814, "udp" }, - { "mmpft", { NULL }, 1815, "tcp" }, - { "mmpft", { NULL }, 1815, "udp" }, - { "harp", { NULL }, 1816, "tcp" }, - { "harp", { NULL }, 1816, "udp" }, - { "rkb-oscs", { NULL }, 1817, "tcp" }, - { "rkb-oscs", { NULL }, 1817, "udp" }, - { "etftp", { NULL }, 1818, "tcp" }, - { "etftp", { NULL }, 1818, "udp" }, - { "plato-lm", { NULL }, 1819, "tcp" }, - { "plato-lm", { NULL }, 1819, "udp" }, - { "mcagent", { NULL }, 1820, "tcp" }, - { "mcagent", { NULL }, 1820, "udp" }, - { "donnyworld", { NULL }, 1821, "tcp" }, - { "donnyworld", { NULL }, 1821, "udp" }, - { "es-elmd", { NULL }, 1822, "tcp" }, - { "es-elmd", { NULL }, 1822, "udp" }, - { "unisys-lm", { NULL }, 1823, "tcp" }, - { "unisys-lm", { NULL }, 1823, "udp" }, - { "metrics-pas", { NULL }, 1824, "tcp" }, - { "metrics-pas", { NULL }, 1824, "udp" }, - { "direcpc-video", { NULL }, 1825, "tcp" }, - { "direcpc-video", { NULL }, 1825, "udp" }, - { "ardt", { NULL }, 1826, "tcp" }, - { "ardt", { NULL }, 1826, "udp" }, - { "asi", { NULL }, 1827, "tcp" }, - { "asi", { NULL }, 1827, "udp" }, - { "itm-mcell-u", { NULL }, 1828, "tcp" }, - { "itm-mcell-u", { NULL }, 1828, "udp" }, - { "optika-emedia", { NULL }, 1829, "tcp" }, - { "optika-emedia", { NULL }, 1829, "udp" }, - { "net8-cman", { NULL }, 1830, "tcp" }, - { "net8-cman", { NULL }, 1830, "udp" }, - { "myrtle", { NULL }, 1831, "tcp" }, - { "myrtle", { NULL }, 1831, "udp" }, - { "tht-treasure", { NULL }, 1832, "tcp" }, - { "tht-treasure", { NULL }, 1832, "udp" }, - { "udpradio", { NULL }, 1833, "tcp" }, - { "udpradio", { NULL }, 1833, "udp" }, - { "ardusuni", { NULL }, 1834, "tcp" }, - { "ardusuni", { NULL }, 1834, "udp" }, - { "ardusmul", { NULL }, 1835, "tcp" }, - { "ardusmul", { NULL }, 1835, "udp" }, - { "ste-smsc", { NULL }, 1836, "tcp" }, - { "ste-smsc", { NULL }, 1836, "udp" }, - { "csoft1", { NULL }, 1837, "tcp" }, - { "csoft1", { NULL }, 1837, "udp" }, - { "talnet", { NULL }, 1838, "tcp" }, - { "talnet", { NULL }, 1838, "udp" }, - { "netopia-vo1", { NULL }, 1839, "tcp" }, - { "netopia-vo1", { NULL }, 1839, "udp" }, - { "netopia-vo2", { NULL }, 1840, "tcp" }, - { "netopia-vo2", { NULL }, 1840, "udp" }, - { "netopia-vo3", { NULL }, 1841, "tcp" }, - { "netopia-vo3", { NULL }, 1841, "udp" }, - { "netopia-vo4", { NULL }, 1842, "tcp" }, - { "netopia-vo4", { NULL }, 1842, "udp" }, - { "netopia-vo5", { NULL }, 1843, "tcp" }, - { "netopia-vo5", { NULL }, 1843, "udp" }, - { "direcpc-dll", { NULL }, 1844, "tcp" }, - { "direcpc-dll", { NULL }, 1844, "udp" }, - { "altalink", { NULL }, 1845, "tcp" }, - { "altalink", { NULL }, 1845, "udp" }, - { "tunstall-pnc", { NULL }, 1846, "tcp" }, - { "tunstall-pnc", { NULL }, 1846, "udp" }, - { "slp-notify", { NULL }, 1847, "tcp" }, - { "slp-notify", { NULL }, 1847, "udp" }, - { "fjdocdist", { NULL }, 1848, "tcp" }, - { "fjdocdist", { NULL }, 1848, "udp" }, - { "alpha-sms", { NULL }, 1849, "tcp" }, - { "alpha-sms", { NULL }, 1849, "udp" }, - { "gsi", { NULL }, 1850, "tcp" }, - { "gsi", { NULL }, 1850, "udp" }, - { "ctcd", { NULL }, 1851, "tcp" }, - { "ctcd", { NULL }, 1851, "udp" }, - { "virtual-time", { NULL }, 1852, "tcp" }, - { "virtual-time", { NULL }, 1852, "udp" }, - { "vids-avtp", { NULL }, 1853, "tcp" }, - { "vids-avtp", { NULL }, 1853, "udp" }, - { "buddy-draw", { NULL }, 1854, "tcp" }, - { "buddy-draw", { NULL }, 1854, "udp" }, - { "fiorano-rtrsvc", { NULL }, 1855, "tcp" }, - { "fiorano-rtrsvc", { NULL }, 1855, "udp" }, - { "fiorano-msgsvc", { NULL }, 1856, "tcp" }, - { "fiorano-msgsvc", { NULL }, 1856, "udp" }, - { "datacaptor", { NULL }, 1857, "tcp" }, - { "datacaptor", { NULL }, 1857, "udp" }, - { "privateark", { NULL }, 1858, "tcp" }, - { "privateark", { NULL }, 1858, "udp" }, - { "gammafetchsvr", { NULL }, 1859, "tcp" }, - { "gammafetchsvr", { NULL }, 1859, "udp" }, - { "sunscalar-svc", { NULL }, 1860, "tcp" }, - { "sunscalar-svc", { NULL }, 1860, "udp" }, - { "lecroy-vicp", { NULL }, 1861, "tcp" }, - { "lecroy-vicp", { NULL }, 1861, "udp" }, - { "mysql-cm-agent", { NULL }, 1862, "tcp" }, - { "mysql-cm-agent", { NULL }, 1862, "udp" }, - { "msnp", { NULL }, 1863, "tcp" }, - { "msnp", { NULL }, 1863, "udp" }, - { "paradym-31port", { NULL }, 1864, "tcp" }, - { "paradym-31port", { NULL }, 1864, "udp" }, - { "entp", { NULL }, 1865, "tcp" }, - { "entp", { NULL }, 1865, "udp" }, - { "swrmi", { NULL }, 1866, "tcp" }, - { "swrmi", { NULL }, 1866, "udp" }, - { "udrive", { NULL }, 1867, "tcp" }, - { "udrive", { NULL }, 1867, "udp" }, - { "viziblebrowser", { NULL }, 1868, "tcp" }, - { "viziblebrowser", { NULL }, 1868, "udp" }, - { "transact", { NULL }, 1869, "tcp" }, - { "transact", { NULL }, 1869, "udp" }, - { "sunscalar-dns", { NULL }, 1870, "tcp" }, - { "sunscalar-dns", { NULL }, 1870, "udp" }, - { "canocentral0", { NULL }, 1871, "tcp" }, - { "canocentral0", { NULL }, 1871, "udp" }, - { "canocentral1", { NULL }, 1872, "tcp" }, - { "canocentral1", { NULL }, 1872, "udp" }, - { "fjmpjps", { NULL }, 1873, "tcp" }, - { "fjmpjps", { NULL }, 1873, "udp" }, - { "fjswapsnp", { NULL }, 1874, "tcp" }, - { "fjswapsnp", { NULL }, 1874, "udp" }, - { "westell-stats", { NULL }, 1875, "tcp" }, - { "westell-stats", { NULL }, 1875, "udp" }, - { "ewcappsrv", { NULL }, 1876, "tcp" }, - { "ewcappsrv", { NULL }, 1876, "udp" }, - { "hp-webqosdb", { NULL }, 1877, "tcp" }, - { "hp-webqosdb", { NULL }, 1877, "udp" }, - { "drmsmc", { NULL }, 1878, "tcp" }, - { "drmsmc", { NULL }, 1878, "udp" }, - { "nettgain-nms", { NULL }, 1879, "tcp" }, - { "nettgain-nms", { NULL }, 1879, "udp" }, - { "vsat-control", { NULL }, 1880, "tcp" }, - { "vsat-control", { NULL }, 1880, "udp" }, - { "ibm-mqseries2", { NULL }, 1881, "tcp" }, - { "ibm-mqseries2", { NULL }, 1881, "udp" }, - { "ecsqdmn", { NULL }, 1882, "tcp" }, - { "ecsqdmn", { NULL }, 1882, "udp" }, - { "ibm-mqisdp", { NULL }, 1883, "tcp" }, - { "ibm-mqisdp", { NULL }, 1883, "udp" }, - { "idmaps", { NULL }, 1884, "tcp" }, - { "idmaps", { NULL }, 1884, "udp" }, - { "vrtstrapserver", { NULL }, 1885, "tcp" }, - { "vrtstrapserver", { NULL }, 1885, "udp" }, - { "leoip", { NULL }, 1886, "tcp" }, - { "leoip", { NULL }, 1886, "udp" }, - { "filex-lport", { NULL }, 1887, "tcp" }, - { "filex-lport", { NULL }, 1887, "udp" }, - { "ncconfig", { NULL }, 1888, "tcp" }, - { "ncconfig", { NULL }, 1888, "udp" }, - { "unify-adapter", { NULL }, 1889, "tcp" }, - { "unify-adapter", { NULL }, 1889, "udp" }, - { "wilkenlistener", { NULL }, 1890, "tcp" }, - { "wilkenlistener", { NULL }, 1890, "udp" }, - { "childkey-notif", { NULL }, 1891, "tcp" }, - { "childkey-notif", { NULL }, 1891, "udp" }, - { "childkey-ctrl", { NULL }, 1892, "tcp" }, - { "childkey-ctrl", { NULL }, 1892, "udp" }, - { "elad", { NULL }, 1893, "tcp" }, - { "elad", { NULL }, 1893, "udp" }, - { "o2server-port", { NULL }, 1894, "tcp" }, - { "o2server-port", { NULL }, 1894, "udp" }, - { "b-novative-ls", { NULL }, 1896, "tcp" }, - { "b-novative-ls", { NULL }, 1896, "udp" }, - { "metaagent", { NULL }, 1897, "tcp" }, - { "metaagent", { NULL }, 1897, "udp" }, - { "cymtec-port", { NULL }, 1898, "tcp" }, - { "cymtec-port", { NULL }, 1898, "udp" }, - { "mc2studios", { NULL }, 1899, "tcp" }, - { "mc2studios", { NULL }, 1899, "udp" }, - { "ssdp", { NULL }, 1900, "tcp" }, - { "ssdp", { NULL }, 1900, "udp" }, - { "fjicl-tep-a", { NULL }, 1901, "tcp" }, - { "fjicl-tep-a", { NULL }, 1901, "udp" }, - { "fjicl-tep-b", { NULL }, 1902, "tcp" }, - { "fjicl-tep-b", { NULL }, 1902, "udp" }, - { "linkname", { NULL }, 1903, "tcp" }, - { "linkname", { NULL }, 1903, "udp" }, - { "fjicl-tep-c", { NULL }, 1904, "tcp" }, - { "fjicl-tep-c", { NULL }, 1904, "udp" }, - { "sugp", { NULL }, 1905, "tcp" }, - { "sugp", { NULL }, 1905, "udp" }, - { "tpmd", { NULL }, 1906, "tcp" }, - { "tpmd", { NULL }, 1906, "udp" }, - { "intrastar", { NULL }, 1907, "tcp" }, - { "intrastar", { NULL }, 1907, "udp" }, - { "dawn", { NULL }, 1908, "tcp" }, - { "dawn", { NULL }, 1908, "udp" }, - { "global-wlink", { NULL }, 1909, "tcp" }, - { "global-wlink", { NULL }, 1909, "udp" }, - { "ultrabac", { NULL }, 1910, "tcp" }, - { "ultrabac", { NULL }, 1910, "udp" }, - { "mtp", { NULL }, 1911, "tcp" }, - { "mtp", { NULL }, 1911, "udp" }, - { "rhp-iibp", { NULL }, 1912, "tcp" }, - { "rhp-iibp", { NULL }, 1912, "udp" }, - { "armadp", { NULL }, 1913, "tcp" }, - { "armadp", { NULL }, 1913, "udp" }, - { "elm-momentum", { NULL }, 1914, "tcp" }, - { "elm-momentum", { NULL }, 1914, "udp" }, - { "facelink", { NULL }, 1915, "tcp" }, - { "facelink", { NULL }, 1915, "udp" }, - { "persona", { NULL }, 1916, "tcp" }, - { "persona", { NULL }, 1916, "udp" }, - { "noagent", { NULL }, 1917, "tcp" }, - { "noagent", { NULL }, 1917, "udp" }, - { "can-nds", { NULL }, 1918, "tcp" }, - { "can-nds", { NULL }, 1918, "udp" }, - { "can-dch", { NULL }, 1919, "tcp" }, - { "can-dch", { NULL }, 1919, "udp" }, - { "can-ferret", { NULL }, 1920, "tcp" }, - { "can-ferret", { NULL }, 1920, "udp" }, - { "noadmin", { NULL }, 1921, "tcp" }, - { "noadmin", { NULL }, 1921, "udp" }, - { "tapestry", { NULL }, 1922, "tcp" }, - { "tapestry", { NULL }, 1922, "udp" }, - { "spice", { NULL }, 1923, "tcp" }, - { "spice", { NULL }, 1923, "udp" }, - { "xiip", { NULL }, 1924, "tcp" }, - { "xiip", { NULL }, 1924, "udp" }, - { "discovery-port", { NULL }, 1925, "tcp" }, - { "discovery-port", { NULL }, 1925, "udp" }, - { "egs", { NULL }, 1926, "tcp" }, - { "egs", { NULL }, 1926, "udp" }, - { "videte-cipc", { NULL }, 1927, "tcp" }, - { "videte-cipc", { NULL }, 1927, "udp" }, - { "emsd-port", { NULL }, 1928, "tcp" }, - { "emsd-port", { NULL }, 1928, "udp" }, - { "bandwiz-system", { NULL }, 1929, "tcp" }, - { "bandwiz-system", { NULL }, 1929, "udp" }, - { "driveappserver", { NULL }, 1930, "tcp" }, - { "driveappserver", { NULL }, 1930, "udp" }, - { "amdsched", { NULL }, 1931, "tcp" }, - { "amdsched", { NULL }, 1931, "udp" }, - { "ctt-broker", { NULL }, 1932, "tcp" }, - { "ctt-broker", { NULL }, 1932, "udp" }, - { "xmapi", { NULL }, 1933, "tcp" }, - { "xmapi", { NULL }, 1933, "udp" }, - { "xaapi", { NULL }, 1934, "tcp" }, - { "xaapi", { NULL }, 1934, "udp" }, - { "macromedia-fcs", { NULL }, 1935, "tcp" }, - { "macromedia-fcs", { NULL }, 1935, "udp" }, - { "jetcmeserver", { NULL }, 1936, "tcp" }, - { "jetcmeserver", { NULL }, 1936, "udp" }, - { "jwserver", { NULL }, 1937, "tcp" }, - { "jwserver", { NULL }, 1937, "udp" }, - { "jwclient", { NULL }, 1938, "tcp" }, - { "jwclient", { NULL }, 1938, "udp" }, - { "jvserver", { NULL }, 1939, "tcp" }, - { "jvserver", { NULL }, 1939, "udp" }, - { "jvclient", { NULL }, 1940, "tcp" }, - { "jvclient", { NULL }, 1940, "udp" }, - { "dic-aida", { NULL }, 1941, "tcp" }, - { "dic-aida", { NULL }, 1941, "udp" }, - { "res", { NULL }, 1942, "tcp" }, - { "res", { NULL }, 1942, "udp" }, - { "beeyond-media", { NULL }, 1943, "tcp" }, - { "beeyond-media", { NULL }, 1943, "udp" }, - { "close-combat", { NULL }, 1944, "tcp" }, - { "close-combat", { NULL }, 1944, "udp" }, - { "dialogic-elmd", { NULL }, 1945, "tcp" }, - { "dialogic-elmd", { NULL }, 1945, "udp" }, - { "tekpls", { NULL }, 1946, "tcp" }, - { "tekpls", { NULL }, 1946, "udp" }, - { "sentinelsrm", { NULL }, 1947, "tcp" }, - { "sentinelsrm", { NULL }, 1947, "udp" }, - { "eye2eye", { NULL }, 1948, "tcp" }, - { "eye2eye", { NULL }, 1948, "udp" }, - { "ismaeasdaqlive", { NULL }, 1949, "tcp" }, - { "ismaeasdaqlive", { NULL }, 1949, "udp" }, - { "ismaeasdaqtest", { NULL }, 1950, "tcp" }, - { "ismaeasdaqtest", { NULL }, 1950, "udp" }, - { "bcs-lmserver", { NULL }, 1951, "tcp" }, - { "bcs-lmserver", { NULL }, 1951, "udp" }, - { "mpnjsc", { NULL }, 1952, "tcp" }, - { "mpnjsc", { NULL }, 1952, "udp" }, - { "rapidbase", { NULL }, 1953, "tcp" }, - { "rapidbase", { NULL }, 1953, "udp" }, - { "abr-api", { NULL }, 1954, "tcp" }, - { "abr-api", { NULL }, 1954, "udp" }, - { "abr-secure", { NULL }, 1955, "tcp" }, - { "abr-secure", { NULL }, 1955, "udp" }, - { "vrtl-vmf-ds", { NULL }, 1956, "tcp" }, - { "vrtl-vmf-ds", { NULL }, 1956, "udp" }, - { "unix-status", { NULL }, 1957, "tcp" }, - { "unix-status", { NULL }, 1957, "udp" }, - { "dxadmind", { NULL }, 1958, "tcp" }, - { "dxadmind", { NULL }, 1958, "udp" }, - { "simp-all", { NULL }, 1959, "tcp" }, - { "simp-all", { NULL }, 1959, "udp" }, - { "nasmanager", { NULL }, 1960, "tcp" }, - { "nasmanager", { NULL }, 1960, "udp" }, - { "bts-appserver", { NULL }, 1961, "tcp" }, - { "bts-appserver", { NULL }, 1961, "udp" }, - { "biap-mp", { NULL }, 1962, "tcp" }, - { "biap-mp", { NULL }, 1962, "udp" }, - { "webmachine", { NULL }, 1963, "tcp" }, - { "webmachine", { NULL }, 1963, "udp" }, - { "solid-e-engine", { NULL }, 1964, "tcp" }, - { "solid-e-engine", { NULL }, 1964, "udp" }, - { "tivoli-npm", { NULL }, 1965, "tcp" }, - { "tivoli-npm", { NULL }, 1965, "udp" }, - { "slush", { NULL }, 1966, "tcp" }, - { "slush", { NULL }, 1966, "udp" }, - { "sns-quote", { NULL }, 1967, "tcp" }, - { "sns-quote", { NULL }, 1967, "udp" }, - { "lipsinc", { NULL }, 1968, "tcp" }, - { "lipsinc", { NULL }, 1968, "udp" }, - { "lipsinc1", { NULL }, 1969, "tcp" }, - { "lipsinc1", { NULL }, 1969, "udp" }, - { "netop-rc", { NULL }, 1970, "tcp" }, - { "netop-rc", { NULL }, 1970, "udp" }, - { "netop-school", { NULL }, 1971, "tcp" }, - { "netop-school", { NULL }, 1971, "udp" }, - { "intersys-cache", { NULL }, 1972, "tcp" }, - { "intersys-cache", { NULL }, 1972, "udp" }, - { "dlsrap", { NULL }, 1973, "tcp" }, - { "dlsrap", { NULL }, 1973, "udp" }, - { "drp", { NULL }, 1974, "tcp" }, - { "drp", { NULL }, 1974, "udp" }, - { "tcoflashagent", { NULL }, 1975, "tcp" }, - { "tcoflashagent", { NULL }, 1975, "udp" }, - { "tcoregagent", { NULL }, 1976, "tcp" }, - { "tcoregagent", { NULL }, 1976, "udp" }, - { "tcoaddressbook", { NULL }, 1977, "tcp" }, - { "tcoaddressbook", { NULL }, 1977, "udp" }, - { "unisql", { NULL }, 1978, "tcp" }, - { "unisql", { NULL }, 1978, "udp" }, - { "unisql-java", { NULL }, 1979, "tcp" }, - { "unisql-java", { NULL }, 1979, "udp" }, - { "pearldoc-xact", { NULL }, 1980, "tcp" }, - { "pearldoc-xact", { NULL }, 1980, "udp" }, - { "p2pq", { NULL }, 1981, "tcp" }, - { "p2pq", { NULL }, 1981, "udp" }, - { "estamp", { NULL }, 1982, "tcp" }, - { "estamp", { NULL }, 1982, "udp" }, - { "lhtp", { NULL }, 1983, "tcp" }, - { "lhtp", { NULL }, 1983, "udp" }, - { "bb", { NULL }, 1984, "tcp" }, - { "bb", { NULL }, 1984, "udp" }, - { "hsrp", { NULL }, 1985, "tcp" }, - { "hsrp", { NULL }, 1985, "udp" }, - { "licensedaemon", { NULL }, 1986, "tcp" }, - { "licensedaemon", { NULL }, 1986, "udp" }, - { "tr-rsrb-p1", { NULL }, 1987, "tcp" }, - { "tr-rsrb-p1", { NULL }, 1987, "udp" }, - { "tr-rsrb-p2", { NULL }, 1988, "tcp" }, - { "tr-rsrb-p2", { NULL }, 1988, "udp" }, - { "tr-rsrb-p3", { NULL }, 1989, "tcp" }, - { "tr-rsrb-p3", { NULL }, 1989, "udp" }, - { "mshnet", { NULL }, 1989, "tcp" }, - { "mshnet", { NULL }, 1989, "udp" }, - { "stun-p1", { NULL }, 1990, "tcp" }, - { "stun-p1", { NULL }, 1990, "udp" }, - { "stun-p2", { NULL }, 1991, "tcp" }, - { "stun-p2", { NULL }, 1991, "udp" }, - { "stun-p3", { NULL }, 1992, "tcp" }, - { "stun-p3", { NULL }, 1992, "udp" }, - { "ipsendmsg", { NULL }, 1992, "tcp" }, - { "ipsendmsg", { NULL }, 1992, "udp" }, - { "snmp-tcp-port", { NULL }, 1993, "tcp" }, - { "snmp-tcp-port", { NULL }, 1993, "udp" }, - { "stun-port", { NULL }, 1994, "tcp" }, - { "stun-port", { NULL }, 1994, "udp" }, - { "perf-port", { NULL }, 1995, "tcp" }, - { "perf-port", { NULL }, 1995, "udp" }, - { "tr-rsrb-port", { NULL }, 1996, "tcp" }, - { "tr-rsrb-port", { NULL }, 1996, "udp" }, - { "gdp-port", { NULL }, 1997, "tcp" }, - { "gdp-port", { NULL }, 1997, "udp" }, - { "x25-svc-port", { NULL }, 1998, "tcp" }, - { "x25-svc-port", { NULL }, 1998, "udp" }, - { "tcp-id-port", { NULL }, 1999, "tcp" }, - { "tcp-id-port", { NULL }, 1999, "udp" }, - { "cisco-sccp", { NULL }, 2000, "tcp" }, - { "cisco-sccp", { NULL }, 2000, "udp" }, - { "dc", { NULL }, 2001, "tcp" }, - { "wizard", { NULL }, 2001, "udp" }, - { "globe", { NULL }, 2002, "tcp" }, - { "globe", { NULL }, 2002, "udp" }, - { "brutus", { NULL }, 2003, "tcp" }, - { "brutus", { NULL }, 2003, "udp" }, - { "mailbox", { NULL }, 2004, "tcp" }, - { "emce", { NULL }, 2004, "udp" }, - { "berknet", { NULL }, 2005, "tcp" }, - { "oracle", { NULL }, 2005, "udp" }, - { "invokator", { NULL }, 2006, "tcp" }, - { "raid-cd", { NULL }, 2006, "udp" }, - { "dectalk", { NULL }, 2007, "tcp" }, - { "raid-am", { NULL }, 2007, "udp" }, - { "conf", { NULL }, 2008, "tcp" }, - { "terminaldb", { NULL }, 2008, "udp" }, - { "news", { NULL }, 2009, "tcp" }, - { "whosockami", { NULL }, 2009, "udp" }, - { "search", { NULL }, 2010, "tcp" }, - { "pipe_server", { NULL }, 2010, "udp" }, - { "raid-cc", { NULL }, 2011, "tcp" }, - { "servserv", { NULL }, 2011, "udp" }, - { "ttyinfo", { NULL }, 2012, "tcp" }, - { "raid-ac", { NULL }, 2012, "udp" }, - { "raid-am", { NULL }, 2013, "tcp" }, - { "raid-cd", { NULL }, 2013, "udp" }, - { "troff", { NULL }, 2014, "tcp" }, - { "raid-sf", { NULL }, 2014, "udp" }, - { "cypress", { NULL }, 2015, "tcp" }, - { "raid-cs", { NULL }, 2015, "udp" }, - { "bootserver", { NULL }, 2016, "tcp" }, - { "bootserver", { NULL }, 2016, "udp" }, - { "cypress-stat", { NULL }, 2017, "tcp" }, - { "bootclient", { NULL }, 2017, "udp" }, - { "terminaldb", { NULL }, 2018, "tcp" }, - { "rellpack", { NULL }, 2018, "udp" }, - { "whosockami", { NULL }, 2019, "tcp" }, - { "about", { NULL }, 2019, "udp" }, - { "xinupageserver", { NULL }, 2020, "tcp" }, - { "xinupageserver", { NULL }, 2020, "udp" }, - { "servexec", { NULL }, 2021, "tcp" }, - { "xinuexpansion1", { NULL }, 2021, "udp" }, - { "down", { NULL }, 2022, "tcp" }, - { "xinuexpansion2", { NULL }, 2022, "udp" }, - { "xinuexpansion3", { NULL }, 2023, "tcp" }, - { "xinuexpansion3", { NULL }, 2023, "udp" }, - { "xinuexpansion4", { NULL }, 2024, "tcp" }, - { "xinuexpansion4", { NULL }, 2024, "udp" }, - { "ellpack", { NULL }, 2025, "tcp" }, - { "xribs", { NULL }, 2025, "udp" }, - { "scrabble", { NULL }, 2026, "tcp" }, - { "scrabble", { NULL }, 2026, "udp" }, - { "shadowserver", { NULL }, 2027, "tcp" }, - { "shadowserver", { NULL }, 2027, "udp" }, - { "submitserver", { NULL }, 2028, "tcp" }, - { "submitserver", { NULL }, 2028, "udp" }, - { "hsrpv6", { NULL }, 2029, "tcp" }, - { "hsrpv6", { NULL }, 2029, "udp" }, - { "device2", { NULL }, 2030, "tcp" }, - { "device2", { NULL }, 2030, "udp" }, - { "mobrien-chat", { NULL }, 2031, "tcp" }, - { "mobrien-chat", { NULL }, 2031, "udp" }, - { "blackboard", { NULL }, 2032, "tcp" }, - { "blackboard", { NULL }, 2032, "udp" }, - { "glogger", { NULL }, 2033, "tcp" }, - { "glogger", { NULL }, 2033, "udp" }, - { "scoremgr", { NULL }, 2034, "tcp" }, - { "scoremgr", { NULL }, 2034, "udp" }, - { "imsldoc", { NULL }, 2035, "tcp" }, - { "imsldoc", { NULL }, 2035, "udp" }, - { "e-dpnet", { NULL }, 2036, "tcp" }, - { "e-dpnet", { NULL }, 2036, "udp" }, - { "applus", { NULL }, 2037, "tcp" }, - { "applus", { NULL }, 2037, "udp" }, - { "objectmanager", { NULL }, 2038, "tcp" }, - { "objectmanager", { NULL }, 2038, "udp" }, - { "prizma", { NULL }, 2039, "tcp" }, - { "prizma", { NULL }, 2039, "udp" }, - { "lam", { NULL }, 2040, "tcp" }, - { "lam", { NULL }, 2040, "udp" }, - { "interbase", { NULL }, 2041, "tcp" }, - { "interbase", { NULL }, 2041, "udp" }, - { "isis", { NULL }, 2042, "tcp" }, - { "isis", { NULL }, 2042, "udp" }, - { "isis-bcast", { NULL }, 2043, "tcp" }, - { "isis-bcast", { NULL }, 2043, "udp" }, - { "rimsl", { NULL }, 2044, "tcp" }, - { "rimsl", { NULL }, 2044, "udp" }, - { "cdfunc", { NULL }, 2045, "tcp" }, - { "cdfunc", { NULL }, 2045, "udp" }, - { "sdfunc", { NULL }, 2046, "tcp" }, - { "sdfunc", { NULL }, 2046, "udp" }, - { "dls", { NULL }, 2047, "tcp" }, - { "dls", { NULL }, 2047, "udp" }, - { "dls-monitor", { NULL }, 2048, "tcp" }, - { "dls-monitor", { NULL }, 2048, "udp" }, - { "shilp", { NULL }, 2049, "tcp" }, - { "shilp", { NULL }, 2049, "udp" }, - { "nfs", { NULL }, 2049, "tcp" }, - { "nfs", { NULL }, 2049, "udp" }, - { "nfs", { NULL }, 2049, "sctp" }, - { "av-emb-config", { NULL }, 2050, "tcp" }, - { "av-emb-config", { NULL }, 2050, "udp" }, - { "epnsdp", { NULL }, 2051, "tcp" }, - { "epnsdp", { NULL }, 2051, "udp" }, - { "clearvisn", { NULL }, 2052, "tcp" }, - { "clearvisn", { NULL }, 2052, "udp" }, - { "lot105-ds-upd", { NULL }, 2053, "tcp" }, - { "lot105-ds-upd", { NULL }, 2053, "udp" }, - { "weblogin", { NULL }, 2054, "tcp" }, - { "weblogin", { NULL }, 2054, "udp" }, - { "iop", { NULL }, 2055, "tcp" }, - { "iop", { NULL }, 2055, "udp" }, - { "omnisky", { NULL }, 2056, "tcp" }, - { "omnisky", { NULL }, 2056, "udp" }, - { "rich-cp", { NULL }, 2057, "tcp" }, - { "rich-cp", { NULL }, 2057, "udp" }, - { "newwavesearch", { NULL }, 2058, "tcp" }, - { "newwavesearch", { NULL }, 2058, "udp" }, - { "bmc-messaging", { NULL }, 2059, "tcp" }, - { "bmc-messaging", { NULL }, 2059, "udp" }, - { "teleniumdaemon", { NULL }, 2060, "tcp" }, - { "teleniumdaemon", { NULL }, 2060, "udp" }, - { "netmount", { NULL }, 2061, "tcp" }, - { "netmount", { NULL }, 2061, "udp" }, - { "icg-swp", { NULL }, 2062, "tcp" }, - { "icg-swp", { NULL }, 2062, "udp" }, - { "icg-bridge", { NULL }, 2063, "tcp" }, - { "icg-bridge", { NULL }, 2063, "udp" }, - { "icg-iprelay", { NULL }, 2064, "tcp" }, - { "icg-iprelay", { NULL }, 2064, "udp" }, - { "dlsrpn", { NULL }, 2065, "tcp" }, - { "dlsrpn", { NULL }, 2065, "udp" }, - { "aura", { NULL }, 2066, "tcp" }, - { "aura", { NULL }, 2066, "udp" }, - { "dlswpn", { NULL }, 2067, "tcp" }, - { "dlswpn", { NULL }, 2067, "udp" }, - { "avauthsrvprtcl", { NULL }, 2068, "tcp" }, - { "avauthsrvprtcl", { NULL }, 2068, "udp" }, - { "event-port", { NULL }, 2069, "tcp" }, - { "event-port", { NULL }, 2069, "udp" }, - { "ah-esp-encap", { NULL }, 2070, "tcp" }, - { "ah-esp-encap", { NULL }, 2070, "udp" }, - { "acp-port", { NULL }, 2071, "tcp" }, - { "acp-port", { NULL }, 2071, "udp" }, - { "msync", { NULL }, 2072, "tcp" }, - { "msync", { NULL }, 2072, "udp" }, - { "gxs-data-port", { NULL }, 2073, "tcp" }, - { "gxs-data-port", { NULL }, 2073, "udp" }, - { "vrtl-vmf-sa", { NULL }, 2074, "tcp" }, - { "vrtl-vmf-sa", { NULL }, 2074, "udp" }, - { "newlixengine", { NULL }, 2075, "tcp" }, - { "newlixengine", { NULL }, 2075, "udp" }, - { "newlixconfig", { NULL }, 2076, "tcp" }, - { "newlixconfig", { NULL }, 2076, "udp" }, - { "tsrmagt", { NULL }, 2077, "tcp" }, - { "tsrmagt", { NULL }, 2077, "udp" }, - { "tpcsrvr", { NULL }, 2078, "tcp" }, - { "tpcsrvr", { NULL }, 2078, "udp" }, - { "idware-router", { NULL }, 2079, "tcp" }, - { "idware-router", { NULL }, 2079, "udp" }, - { "autodesk-nlm", { NULL }, 2080, "tcp" }, - { "autodesk-nlm", { NULL }, 2080, "udp" }, - { "kme-trap-port", { NULL }, 2081, "tcp" }, - { "kme-trap-port", { NULL }, 2081, "udp" }, - { "infowave", { NULL }, 2082, "tcp" }, - { "infowave", { NULL }, 2082, "udp" }, - { "radsec", { NULL }, 2083, "tcp" }, - { "radsec", { NULL }, 2083, "udp" }, - { "sunclustergeo", { NULL }, 2084, "tcp" }, - { "sunclustergeo", { NULL }, 2084, "udp" }, - { "ada-cip", { NULL }, 2085, "tcp" }, - { "ada-cip", { NULL }, 2085, "udp" }, - { "gnunet", { NULL }, 2086, "tcp" }, - { "gnunet", { NULL }, 2086, "udp" }, - { "eli", { NULL }, 2087, "tcp" }, - { "eli", { NULL }, 2087, "udp" }, - { "ip-blf", { NULL }, 2088, "tcp" }, - { "ip-blf", { NULL }, 2088, "udp" }, - { "sep", { NULL }, 2089, "tcp" }, - { "sep", { NULL }, 2089, "udp" }, - { "lrp", { NULL }, 2090, "tcp" }, - { "lrp", { NULL }, 2090, "udp" }, - { "prp", { NULL }, 2091, "tcp" }, - { "prp", { NULL }, 2091, "udp" }, - { "descent3", { NULL }, 2092, "tcp" }, - { "descent3", { NULL }, 2092, "udp" }, - { "nbx-cc", { NULL }, 2093, "tcp" }, - { "nbx-cc", { NULL }, 2093, "udp" }, - { "nbx-au", { NULL }, 2094, "tcp" }, - { "nbx-au", { NULL }, 2094, "udp" }, - { "nbx-ser", { NULL }, 2095, "tcp" }, - { "nbx-ser", { NULL }, 2095, "udp" }, - { "nbx-dir", { NULL }, 2096, "tcp" }, - { "nbx-dir", { NULL }, 2096, "udp" }, - { "jetformpreview", { NULL }, 2097, "tcp" }, - { "jetformpreview", { NULL }, 2097, "udp" }, - { "dialog-port", { NULL }, 2098, "tcp" }, - { "dialog-port", { NULL }, 2098, "udp" }, - { "h2250-annex-g", { NULL }, 2099, "tcp" }, - { "h2250-annex-g", { NULL }, 2099, "udp" }, - { "amiganetfs", { NULL }, 2100, "tcp" }, - { "amiganetfs", { NULL }, 2100, "udp" }, - { "rtcm-sc104", { NULL }, 2101, "tcp" }, - { "rtcm-sc104", { NULL }, 2101, "udp" }, - { "zephyr-srv", { NULL }, 2102, "tcp" }, - { "zephyr-srv", { NULL }, 2102, "udp" }, - { "zephyr-clt", { NULL }, 2103, "tcp" }, - { "zephyr-clt", { NULL }, 2103, "udp" }, - { "zephyr-hm", { NULL }, 2104, "tcp" }, - { "zephyr-hm", { NULL }, 2104, "udp" }, - { "minipay", { NULL }, 2105, "tcp" }, - { "minipay", { NULL }, 2105, "udp" }, - { "mzap", { NULL }, 2106, "tcp" }, - { "mzap", { NULL }, 2106, "udp" }, - { "bintec-admin", { NULL }, 2107, "tcp" }, - { "bintec-admin", { NULL }, 2107, "udp" }, - { "comcam", { NULL }, 2108, "tcp" }, - { "comcam", { NULL }, 2108, "udp" }, - { "ergolight", { NULL }, 2109, "tcp" }, - { "ergolight", { NULL }, 2109, "udp" }, - { "umsp", { NULL }, 2110, "tcp" }, - { "umsp", { NULL }, 2110, "udp" }, - { "dsatp", { NULL }, 2111, "tcp" }, - { "dsatp", { NULL }, 2111, "udp" }, - { "idonix-metanet", { NULL }, 2112, "tcp" }, - { "idonix-metanet", { NULL }, 2112, "udp" }, - { "hsl-storm", { NULL }, 2113, "tcp" }, - { "hsl-storm", { NULL }, 2113, "udp" }, - { "newheights", { NULL }, 2114, "tcp" }, - { "newheights", { NULL }, 2114, "udp" }, - { "kdm", { NULL }, 2115, "tcp" }, - { "kdm", { NULL }, 2115, "udp" }, - { "ccowcmr", { NULL }, 2116, "tcp" }, - { "ccowcmr", { NULL }, 2116, "udp" }, - { "mentaclient", { NULL }, 2117, "tcp" }, - { "mentaclient", { NULL }, 2117, "udp" }, - { "mentaserver", { NULL }, 2118, "tcp" }, - { "mentaserver", { NULL }, 2118, "udp" }, - { "gsigatekeeper", { NULL }, 2119, "tcp" }, - { "gsigatekeeper", { NULL }, 2119, "udp" }, - { "qencp", { NULL }, 2120, "tcp" }, - { "qencp", { NULL }, 2120, "udp" }, - { "scientia-ssdb", { NULL }, 2121, "tcp" }, - { "scientia-ssdb", { NULL }, 2121, "udp" }, - { "caupc-remote", { NULL }, 2122, "tcp" }, - { "caupc-remote", { NULL }, 2122, "udp" }, - { "gtp-control", { NULL }, 2123, "tcp" }, - { "gtp-control", { NULL }, 2123, "udp" }, - { "elatelink", { NULL }, 2124, "tcp" }, - { "elatelink", { NULL }, 2124, "udp" }, - { "lockstep", { NULL }, 2125, "tcp" }, - { "lockstep", { NULL }, 2125, "udp" }, - { "pktcable-cops", { NULL }, 2126, "tcp" }, - { "pktcable-cops", { NULL }, 2126, "udp" }, - { "index-pc-wb", { NULL }, 2127, "tcp" }, - { "index-pc-wb", { NULL }, 2127, "udp" }, - { "net-steward", { NULL }, 2128, "tcp" }, - { "net-steward", { NULL }, 2128, "udp" }, - { "cs-live", { NULL }, 2129, "tcp" }, - { "cs-live", { NULL }, 2129, "udp" }, - { "xds", { NULL }, 2130, "tcp" }, - { "xds", { NULL }, 2130, "udp" }, - { "avantageb2b", { NULL }, 2131, "tcp" }, - { "avantageb2b", { NULL }, 2131, "udp" }, - { "solera-epmap", { NULL }, 2132, "tcp" }, - { "solera-epmap", { NULL }, 2132, "udp" }, - { "zymed-zpp", { NULL }, 2133, "tcp" }, - { "zymed-zpp", { NULL }, 2133, "udp" }, - { "avenue", { NULL }, 2134, "tcp" }, - { "avenue", { NULL }, 2134, "udp" }, - { "gris", { NULL }, 2135, "tcp" }, - { "gris", { NULL }, 2135, "udp" }, - { "appworxsrv", { NULL }, 2136, "tcp" }, - { "appworxsrv", { NULL }, 2136, "udp" }, - { "connect", { NULL }, 2137, "tcp" }, - { "connect", { NULL }, 2137, "udp" }, - { "unbind-cluster", { NULL }, 2138, "tcp" }, - { "unbind-cluster", { NULL }, 2138, "udp" }, - { "ias-auth", { NULL }, 2139, "tcp" }, - { "ias-auth", { NULL }, 2139, "udp" }, - { "ias-reg", { NULL }, 2140, "tcp" }, - { "ias-reg", { NULL }, 2140, "udp" }, - { "ias-admind", { NULL }, 2141, "tcp" }, - { "ias-admind", { NULL }, 2141, "udp" }, - { "tdmoip", { NULL }, 2142, "tcp" }, - { "tdmoip", { NULL }, 2142, "udp" }, - { "lv-jc", { NULL }, 2143, "tcp" }, - { "lv-jc", { NULL }, 2143, "udp" }, - { "lv-ffx", { NULL }, 2144, "tcp" }, - { "lv-ffx", { NULL }, 2144, "udp" }, - { "lv-pici", { NULL }, 2145, "tcp" }, - { "lv-pici", { NULL }, 2145, "udp" }, - { "lv-not", { NULL }, 2146, "tcp" }, - { "lv-not", { NULL }, 2146, "udp" }, - { "lv-auth", { NULL }, 2147, "tcp" }, - { "lv-auth", { NULL }, 2147, "udp" }, - { "veritas-ucl", { NULL }, 2148, "tcp" }, - { "veritas-ucl", { NULL }, 2148, "udp" }, - { "acptsys", { NULL }, 2149, "tcp" }, - { "acptsys", { NULL }, 2149, "udp" }, - { "dynamic3d", { NULL }, 2150, "tcp" }, - { "dynamic3d", { NULL }, 2150, "udp" }, - { "docent", { NULL }, 2151, "tcp" }, - { "docent", { NULL }, 2151, "udp" }, - { "gtp-user", { NULL }, 2152, "tcp" }, - { "gtp-user", { NULL }, 2152, "udp" }, - { "ctlptc", { NULL }, 2153, "tcp" }, - { "ctlptc", { NULL }, 2153, "udp" }, - { "stdptc", { NULL }, 2154, "tcp" }, - { "stdptc", { NULL }, 2154, "udp" }, - { "brdptc", { NULL }, 2155, "tcp" }, - { "brdptc", { NULL }, 2155, "udp" }, - { "trp", { NULL }, 2156, "tcp" }, - { "trp", { NULL }, 2156, "udp" }, - { "xnds", { NULL }, 2157, "tcp" }, - { "xnds", { NULL }, 2157, "udp" }, - { "touchnetplus", { NULL }, 2158, "tcp" }, - { "touchnetplus", { NULL }, 2158, "udp" }, - { "gdbremote", { NULL }, 2159, "tcp" }, - { "gdbremote", { NULL }, 2159, "udp" }, - { "apc-2160", { NULL }, 2160, "tcp" }, - { "apc-2160", { NULL }, 2160, "udp" }, - { "apc-2161", { NULL }, 2161, "tcp" }, - { "apc-2161", { NULL }, 2161, "udp" }, - { "navisphere", { NULL }, 2162, "tcp" }, - { "navisphere", { NULL }, 2162, "udp" }, - { "navisphere-sec", { NULL }, 2163, "tcp" }, - { "navisphere-sec", { NULL }, 2163, "udp" }, - { "ddns-v3", { NULL }, 2164, "tcp" }, - { "ddns-v3", { NULL }, 2164, "udp" }, - { "x-bone-api", { NULL }, 2165, "tcp" }, - { "x-bone-api", { NULL }, 2165, "udp" }, - { "iwserver", { NULL }, 2166, "tcp" }, - { "iwserver", { NULL }, 2166, "udp" }, - { "raw-serial", { NULL }, 2167, "tcp" }, - { "raw-serial", { NULL }, 2167, "udp" }, - { "easy-soft-mux", { NULL }, 2168, "tcp" }, - { "easy-soft-mux", { NULL }, 2168, "udp" }, - { "brain", { NULL }, 2169, "tcp" }, - { "brain", { NULL }, 2169, "udp" }, - { "eyetv", { NULL }, 2170, "tcp" }, - { "eyetv", { NULL }, 2170, "udp" }, - { "msfw-storage", { NULL }, 2171, "tcp" }, - { "msfw-storage", { NULL }, 2171, "udp" }, - { "msfw-s-storage", { NULL }, 2172, "tcp" }, - { "msfw-s-storage", { NULL }, 2172, "udp" }, - { "msfw-replica", { NULL }, 2173, "tcp" }, - { "msfw-replica", { NULL }, 2173, "udp" }, - { "msfw-array", { NULL }, 2174, "tcp" }, - { "msfw-array", { NULL }, 2174, "udp" }, - { "airsync", { NULL }, 2175, "tcp" }, - { "airsync", { NULL }, 2175, "udp" }, - { "rapi", { NULL }, 2176, "tcp" }, - { "rapi", { NULL }, 2176, "udp" }, - { "qwave", { NULL }, 2177, "tcp" }, - { "qwave", { NULL }, 2177, "udp" }, - { "bitspeer", { NULL }, 2178, "tcp" }, - { "bitspeer", { NULL }, 2178, "udp" }, - { "vmrdp", { NULL }, 2179, "tcp" }, - { "vmrdp", { NULL }, 2179, "udp" }, - { "mc-gt-srv", { NULL }, 2180, "tcp" }, - { "mc-gt-srv", { NULL }, 2180, "udp" }, - { "eforward", { NULL }, 2181, "tcp" }, - { "eforward", { NULL }, 2181, "udp" }, - { "cgn-stat", { NULL }, 2182, "tcp" }, - { "cgn-stat", { NULL }, 2182, "udp" }, - { "cgn-config", { NULL }, 2183, "tcp" }, - { "cgn-config", { NULL }, 2183, "udp" }, - { "nvd", { NULL }, 2184, "tcp" }, - { "nvd", { NULL }, 2184, "udp" }, - { "onbase-dds", { NULL }, 2185, "tcp" }, - { "onbase-dds", { NULL }, 2185, "udp" }, - { "gtaua", { NULL }, 2186, "tcp" }, - { "gtaua", { NULL }, 2186, "udp" }, - { "ssmc", { NULL }, 2187, "tcp" }, - { "ssmd", { NULL }, 2187, "udp" }, - { "tivoconnect", { NULL }, 2190, "tcp" }, - { "tivoconnect", { NULL }, 2190, "udp" }, - { "tvbus", { NULL }, 2191, "tcp" }, - { "tvbus", { NULL }, 2191, "udp" }, - { "asdis", { NULL }, 2192, "tcp" }, - { "asdis", { NULL }, 2192, "udp" }, - { "drwcs", { NULL }, 2193, "tcp" }, - { "drwcs", { NULL }, 2193, "udp" }, - { "mnp-exchange", { NULL }, 2197, "tcp" }, - { "mnp-exchange", { NULL }, 2197, "udp" }, - { "onehome-remote", { NULL }, 2198, "tcp" }, - { "onehome-remote", { NULL }, 2198, "udp" }, - { "onehome-help", { NULL }, 2199, "tcp" }, - { "onehome-help", { NULL }, 2199, "udp" }, - { "ici", { NULL }, 2200, "tcp" }, - { "ici", { NULL }, 2200, "udp" }, - { "ats", { NULL }, 2201, "tcp" }, - { "ats", { NULL }, 2201, "udp" }, - { "imtc-map", { NULL }, 2202, "tcp" }, - { "imtc-map", { NULL }, 2202, "udp" }, - { "b2-runtime", { NULL }, 2203, "tcp" }, - { "b2-runtime", { NULL }, 2203, "udp" }, - { "b2-license", { NULL }, 2204, "tcp" }, - { "b2-license", { NULL }, 2204, "udp" }, - { "jps", { NULL }, 2205, "tcp" }, - { "jps", { NULL }, 2205, "udp" }, - { "hpocbus", { NULL }, 2206, "tcp" }, - { "hpocbus", { NULL }, 2206, "udp" }, - { "hpssd", { NULL }, 2207, "tcp" }, - { "hpssd", { NULL }, 2207, "udp" }, - { "hpiod", { NULL }, 2208, "tcp" }, - { "hpiod", { NULL }, 2208, "udp" }, - { "rimf-ps", { NULL }, 2209, "tcp" }, - { "rimf-ps", { NULL }, 2209, "udp" }, - { "noaaport", { NULL }, 2210, "tcp" }, - { "noaaport", { NULL }, 2210, "udp" }, - { "emwin", { NULL }, 2211, "tcp" }, - { "emwin", { NULL }, 2211, "udp" }, - { "leecoposserver", { NULL }, 2212, "tcp" }, - { "leecoposserver", { NULL }, 2212, "udp" }, - { "kali", { NULL }, 2213, "tcp" }, - { "kali", { NULL }, 2213, "udp" }, - { "rpi", { NULL }, 2214, "tcp" }, - { "rpi", { NULL }, 2214, "udp" }, - { "ipcore", { NULL }, 2215, "tcp" }, - { "ipcore", { NULL }, 2215, "udp" }, - { "vtu-comms", { NULL }, 2216, "tcp" }, - { "vtu-comms", { NULL }, 2216, "udp" }, - { "gotodevice", { NULL }, 2217, "tcp" }, - { "gotodevice", { NULL }, 2217, "udp" }, - { "bounzza", { NULL }, 2218, "tcp" }, - { "bounzza", { NULL }, 2218, "udp" }, - { "netiq-ncap", { NULL }, 2219, "tcp" }, - { "netiq-ncap", { NULL }, 2219, "udp" }, - { "netiq", { NULL }, 2220, "tcp" }, - { "netiq", { NULL }, 2220, "udp" }, - { "rockwell-csp1", { NULL }, 2221, "tcp" }, - { "rockwell-csp1", { NULL }, 2221, "udp" }, - { "EtherNet/IP-1", { NULL }, 2222, "tcp" }, - { "EtherNet/IP-1", { NULL }, 2222, "udp" }, - { "rockwell-csp2", { NULL }, 2223, "tcp" }, - { "rockwell-csp2", { NULL }, 2223, "udp" }, - { "efi-mg", { NULL }, 2224, "tcp" }, - { "efi-mg", { NULL }, 2224, "udp" }, - { "rcip-itu", { NULL }, 2225, "tcp" }, - { "rcip-itu", { NULL }, 2225, "sctp" }, - { "di-drm", { NULL }, 2226, "tcp" }, - { "di-drm", { NULL }, 2226, "udp" }, - { "di-msg", { NULL }, 2227, "tcp" }, - { "di-msg", { NULL }, 2227, "udp" }, - { "ehome-ms", { NULL }, 2228, "tcp" }, - { "ehome-ms", { NULL }, 2228, "udp" }, - { "datalens", { NULL }, 2229, "tcp" }, - { "datalens", { NULL }, 2229, "udp" }, - { "queueadm", { NULL }, 2230, "tcp" }, - { "queueadm", { NULL }, 2230, "udp" }, - { "wimaxasncp", { NULL }, 2231, "tcp" }, - { "wimaxasncp", { NULL }, 2231, "udp" }, - { "ivs-video", { NULL }, 2232, "tcp" }, - { "ivs-video", { NULL }, 2232, "udp" }, - { "infocrypt", { NULL }, 2233, "tcp" }, - { "infocrypt", { NULL }, 2233, "udp" }, - { "directplay", { NULL }, 2234, "tcp" }, - { "directplay", { NULL }, 2234, "udp" }, - { "sercomm-wlink", { NULL }, 2235, "tcp" }, - { "sercomm-wlink", { NULL }, 2235, "udp" }, - { "nani", { NULL }, 2236, "tcp" }, - { "nani", { NULL }, 2236, "udp" }, - { "optech-port1-lm", { NULL }, 2237, "tcp" }, - { "optech-port1-lm", { NULL }, 2237, "udp" }, - { "aviva-sna", { NULL }, 2238, "tcp" }, - { "aviva-sna", { NULL }, 2238, "udp" }, - { "imagequery", { NULL }, 2239, "tcp" }, - { "imagequery", { NULL }, 2239, "udp" }, - { "recipe", { NULL }, 2240, "tcp" }, - { "recipe", { NULL }, 2240, "udp" }, - { "ivsd", { NULL }, 2241, "tcp" }, - { "ivsd", { NULL }, 2241, "udp" }, - { "foliocorp", { NULL }, 2242, "tcp" }, - { "foliocorp", { NULL }, 2242, "udp" }, - { "magicom", { NULL }, 2243, "tcp" }, - { "magicom", { NULL }, 2243, "udp" }, - { "nmsserver", { NULL }, 2244, "tcp" }, - { "nmsserver", { NULL }, 2244, "udp" }, - { "hao", { NULL }, 2245, "tcp" }, - { "hao", { NULL }, 2245, "udp" }, - { "pc-mta-addrmap", { NULL }, 2246, "tcp" }, - { "pc-mta-addrmap", { NULL }, 2246, "udp" }, - { "antidotemgrsvr", { NULL }, 2247, "tcp" }, - { "antidotemgrsvr", { NULL }, 2247, "udp" }, - { "ums", { NULL }, 2248, "tcp" }, - { "ums", { NULL }, 2248, "udp" }, - { "rfmp", { NULL }, 2249, "tcp" }, - { "rfmp", { NULL }, 2249, "udp" }, - { "remote-collab", { NULL }, 2250, "tcp" }, - { "remote-collab", { NULL }, 2250, "udp" }, - { "dif-port", { NULL }, 2251, "tcp" }, - { "dif-port", { NULL }, 2251, "udp" }, - { "njenet-ssl", { NULL }, 2252, "tcp" }, - { "njenet-ssl", { NULL }, 2252, "udp" }, - { "dtv-chan-req", { NULL }, 2253, "tcp" }, - { "dtv-chan-req", { NULL }, 2253, "udp" }, - { "seispoc", { NULL }, 2254, "tcp" }, - { "seispoc", { NULL }, 2254, "udp" }, - { "vrtp", { NULL }, 2255, "tcp" }, - { "vrtp", { NULL }, 2255, "udp" }, - { "pcc-mfp", { NULL }, 2256, "tcp" }, - { "pcc-mfp", { NULL }, 2256, "udp" }, - { "simple-tx-rx", { NULL }, 2257, "tcp" }, - { "simple-tx-rx", { NULL }, 2257, "udp" }, - { "rcts", { NULL }, 2258, "tcp" }, - { "rcts", { NULL }, 2258, "udp" }, - { "acd-pm", { NULL }, 2259, "tcp" }, - { "acd-pm", { NULL }, 2259, "udp" }, - { "apc-2260", { NULL }, 2260, "tcp" }, - { "apc-2260", { NULL }, 2260, "udp" }, - { "comotionmaster", { NULL }, 2261, "tcp" }, - { "comotionmaster", { NULL }, 2261, "udp" }, - { "comotionback", { NULL }, 2262, "tcp" }, - { "comotionback", { NULL }, 2262, "udp" }, - { "ecwcfg", { NULL }, 2263, "tcp" }, - { "ecwcfg", { NULL }, 2263, "udp" }, - { "apx500api-1", { NULL }, 2264, "tcp" }, - { "apx500api-1", { NULL }, 2264, "udp" }, - { "apx500api-2", { NULL }, 2265, "tcp" }, - { "apx500api-2", { NULL }, 2265, "udp" }, - { "mfserver", { NULL }, 2266, "tcp" }, - { "mfserver", { NULL }, 2266, "udp" }, - { "ontobroker", { NULL }, 2267, "tcp" }, - { "ontobroker", { NULL }, 2267, "udp" }, - { "amt", { NULL }, 2268, "tcp" }, - { "amt", { NULL }, 2268, "udp" }, - { "mikey", { NULL }, 2269, "tcp" }, - { "mikey", { NULL }, 2269, "udp" }, - { "starschool", { NULL }, 2270, "tcp" }, - { "starschool", { NULL }, 2270, "udp" }, - { "mmcals", { NULL }, 2271, "tcp" }, - { "mmcals", { NULL }, 2271, "udp" }, - { "mmcal", { NULL }, 2272, "tcp" }, - { "mmcal", { NULL }, 2272, "udp" }, - { "mysql-im", { NULL }, 2273, "tcp" }, - { "mysql-im", { NULL }, 2273, "udp" }, - { "pcttunnell", { NULL }, 2274, "tcp" }, - { "pcttunnell", { NULL }, 2274, "udp" }, - { "ibridge-data", { NULL }, 2275, "tcp" }, - { "ibridge-data", { NULL }, 2275, "udp" }, - { "ibridge-mgmt", { NULL }, 2276, "tcp" }, - { "ibridge-mgmt", { NULL }, 2276, "udp" }, - { "bluectrlproxy", { NULL }, 2277, "tcp" }, - { "bluectrlproxy", { NULL }, 2277, "udp" }, - { "s3db", { NULL }, 2278, "tcp" }, - { "s3db", { NULL }, 2278, "udp" }, - { "xmquery", { NULL }, 2279, "tcp" }, - { "xmquery", { NULL }, 2279, "udp" }, - { "lnvpoller", { NULL }, 2280, "tcp" }, - { "lnvpoller", { NULL }, 2280, "udp" }, - { "lnvconsole", { NULL }, 2281, "tcp" }, - { "lnvconsole", { NULL }, 2281, "udp" }, - { "lnvalarm", { NULL }, 2282, "tcp" }, - { "lnvalarm", { NULL }, 2282, "udp" }, - { "lnvstatus", { NULL }, 2283, "tcp" }, - { "lnvstatus", { NULL }, 2283, "udp" }, - { "lnvmaps", { NULL }, 2284, "tcp" }, - { "lnvmaps", { NULL }, 2284, "udp" }, - { "lnvmailmon", { NULL }, 2285, "tcp" }, - { "lnvmailmon", { NULL }, 2285, "udp" }, - { "nas-metering", { NULL }, 2286, "tcp" }, - { "nas-metering", { NULL }, 2286, "udp" }, - { "dna", { NULL }, 2287, "tcp" }, - { "dna", { NULL }, 2287, "udp" }, - { "netml", { NULL }, 2288, "tcp" }, - { "netml", { NULL }, 2288, "udp" }, - { "dict-lookup", { NULL }, 2289, "tcp" }, - { "dict-lookup", { NULL }, 2289, "udp" }, - { "sonus-logging", { NULL }, 2290, "tcp" }, - { "sonus-logging", { NULL }, 2290, "udp" }, - { "eapsp", { NULL }, 2291, "tcp" }, - { "eapsp", { NULL }, 2291, "udp" }, - { "mib-streaming", { NULL }, 2292, "tcp" }, - { "mib-streaming", { NULL }, 2292, "udp" }, - { "npdbgmngr", { NULL }, 2293, "tcp" }, - { "npdbgmngr", { NULL }, 2293, "udp" }, - { "konshus-lm", { NULL }, 2294, "tcp" }, - { "konshus-lm", { NULL }, 2294, "udp" }, - { "advant-lm", { NULL }, 2295, "tcp" }, - { "advant-lm", { NULL }, 2295, "udp" }, - { "theta-lm", { NULL }, 2296, "tcp" }, - { "theta-lm", { NULL }, 2296, "udp" }, - { "d2k-datamover1", { NULL }, 2297, "tcp" }, - { "d2k-datamover1", { NULL }, 2297, "udp" }, - { "d2k-datamover2", { NULL }, 2298, "tcp" }, - { "d2k-datamover2", { NULL }, 2298, "udp" }, - { "pc-telecommute", { NULL }, 2299, "tcp" }, - { "pc-telecommute", { NULL }, 2299, "udp" }, - { "cvmmon", { NULL }, 2300, "tcp" }, - { "cvmmon", { NULL }, 2300, "udp" }, - { "cpq-wbem", { NULL }, 2301, "tcp" }, - { "cpq-wbem", { NULL }, 2301, "udp" }, - { "binderysupport", { NULL }, 2302, "tcp" }, - { "binderysupport", { NULL }, 2302, "udp" }, - { "proxy-gateway", { NULL }, 2303, "tcp" }, - { "proxy-gateway", { NULL }, 2303, "udp" }, - { "attachmate-uts", { NULL }, 2304, "tcp" }, - { "attachmate-uts", { NULL }, 2304, "udp" }, - { "mt-scaleserver", { NULL }, 2305, "tcp" }, - { "mt-scaleserver", { NULL }, 2305, "udp" }, - { "tappi-boxnet", { NULL }, 2306, "tcp" }, - { "tappi-boxnet", { NULL }, 2306, "udp" }, - { "pehelp", { NULL }, 2307, "tcp" }, - { "pehelp", { NULL }, 2307, "udp" }, - { "sdhelp", { NULL }, 2308, "tcp" }, - { "sdhelp", { NULL }, 2308, "udp" }, - { "sdserver", { NULL }, 2309, "tcp" }, - { "sdserver", { NULL }, 2309, "udp" }, - { "sdclient", { NULL }, 2310, "tcp" }, - { "sdclient", { NULL }, 2310, "udp" }, - { "messageservice", { NULL }, 2311, "tcp" }, - { "messageservice", { NULL }, 2311, "udp" }, - { "wanscaler", { NULL }, 2312, "tcp" }, - { "wanscaler", { NULL }, 2312, "udp" }, - { "iapp", { NULL }, 2313, "tcp" }, - { "iapp", { NULL }, 2313, "udp" }, - { "cr-websystems", { NULL }, 2314, "tcp" }, - { "cr-websystems", { NULL }, 2314, "udp" }, - { "precise-sft", { NULL }, 2315, "tcp" }, - { "precise-sft", { NULL }, 2315, "udp" }, - { "sent-lm", { NULL }, 2316, "tcp" }, - { "sent-lm", { NULL }, 2316, "udp" }, - { "attachmate-g32", { NULL }, 2317, "tcp" }, - { "attachmate-g32", { NULL }, 2317, "udp" }, - { "cadencecontrol", { NULL }, 2318, "tcp" }, - { "cadencecontrol", { NULL }, 2318, "udp" }, - { "infolibria", { NULL }, 2319, "tcp" }, - { "infolibria", { NULL }, 2319, "udp" }, - { "siebel-ns", { NULL }, 2320, "tcp" }, - { "siebel-ns", { NULL }, 2320, "udp" }, - { "rdlap", { NULL }, 2321, "tcp" }, - { "rdlap", { NULL }, 2321, "udp" }, - { "ofsd", { NULL }, 2322, "tcp" }, - { "ofsd", { NULL }, 2322, "udp" }, - { "3d-nfsd", { NULL }, 2323, "tcp" }, - { "3d-nfsd", { NULL }, 2323, "udp" }, - { "cosmocall", { NULL }, 2324, "tcp" }, - { "cosmocall", { NULL }, 2324, "udp" }, - { "ansysli", { NULL }, 2325, "tcp" }, - { "ansysli", { NULL }, 2325, "udp" }, - { "idcp", { NULL }, 2326, "tcp" }, - { "idcp", { NULL }, 2326, "udp" }, - { "xingcsm", { NULL }, 2327, "tcp" }, - { "xingcsm", { NULL }, 2327, "udp" }, - { "netrix-sftm", { NULL }, 2328, "tcp" }, - { "netrix-sftm", { NULL }, 2328, "udp" }, - { "nvd", { NULL }, 2329, "tcp" }, - { "nvd", { NULL }, 2329, "udp" }, - { "tscchat", { NULL }, 2330, "tcp" }, - { "tscchat", { NULL }, 2330, "udp" }, - { "agentview", { NULL }, 2331, "tcp" }, - { "agentview", { NULL }, 2331, "udp" }, - { "rcc-host", { NULL }, 2332, "tcp" }, - { "rcc-host", { NULL }, 2332, "udp" }, - { "snapp", { NULL }, 2333, "tcp" }, - { "snapp", { NULL }, 2333, "udp" }, - { "ace-client", { NULL }, 2334, "tcp" }, - { "ace-client", { NULL }, 2334, "udp" }, - { "ace-proxy", { NULL }, 2335, "tcp" }, - { "ace-proxy", { NULL }, 2335, "udp" }, - { "appleugcontrol", { NULL }, 2336, "tcp" }, - { "appleugcontrol", { NULL }, 2336, "udp" }, - { "ideesrv", { NULL }, 2337, "tcp" }, - { "ideesrv", { NULL }, 2337, "udp" }, - { "norton-lambert", { NULL }, 2338, "tcp" }, - { "norton-lambert", { NULL }, 2338, "udp" }, - { "3com-webview", { NULL }, 2339, "tcp" }, - { "3com-webview", { NULL }, 2339, "udp" }, - { "wrs_registry", { NULL }, 2340, "tcp" }, - { "wrs_registry", { NULL }, 2340, "udp" }, - { "xiostatus", { NULL }, 2341, "tcp" }, - { "xiostatus", { NULL }, 2341, "udp" }, - { "manage-exec", { NULL }, 2342, "tcp" }, - { "manage-exec", { NULL }, 2342, "udp" }, - { "nati-logos", { NULL }, 2343, "tcp" }, - { "nati-logos", { NULL }, 2343, "udp" }, - { "fcmsys", { NULL }, 2344, "tcp" }, - { "fcmsys", { NULL }, 2344, "udp" }, - { "dbm", { NULL }, 2345, "tcp" }, - { "dbm", { NULL }, 2345, "udp" }, - { "redstorm_join", { NULL }, 2346, "tcp" }, - { "redstorm_join", { NULL }, 2346, "udp" }, - { "redstorm_find", { NULL }, 2347, "tcp" }, - { "redstorm_find", { NULL }, 2347, "udp" }, - { "redstorm_info", { NULL }, 2348, "tcp" }, - { "redstorm_info", { NULL }, 2348, "udp" }, - { "redstorm_diag", { NULL }, 2349, "tcp" }, - { "redstorm_diag", { NULL }, 2349, "udp" }, - { "psbserver", { NULL }, 2350, "tcp" }, - { "psbserver", { NULL }, 2350, "udp" }, - { "psrserver", { NULL }, 2351, "tcp" }, - { "psrserver", { NULL }, 2351, "udp" }, - { "pslserver", { NULL }, 2352, "tcp" }, - { "pslserver", { NULL }, 2352, "udp" }, - { "pspserver", { NULL }, 2353, "tcp" }, - { "pspserver", { NULL }, 2353, "udp" }, - { "psprserver", { NULL }, 2354, "tcp" }, - { "psprserver", { NULL }, 2354, "udp" }, - { "psdbserver", { NULL }, 2355, "tcp" }, - { "psdbserver", { NULL }, 2355, "udp" }, - { "gxtelmd", { NULL }, 2356, "tcp" }, - { "gxtelmd", { NULL }, 2356, "udp" }, - { "unihub-server", { NULL }, 2357, "tcp" }, - { "unihub-server", { NULL }, 2357, "udp" }, - { "futrix", { NULL }, 2358, "tcp" }, - { "futrix", { NULL }, 2358, "udp" }, - { "flukeserver", { NULL }, 2359, "tcp" }, - { "flukeserver", { NULL }, 2359, "udp" }, - { "nexstorindltd", { NULL }, 2360, "tcp" }, - { "nexstorindltd", { NULL }, 2360, "udp" }, - { "tl1", { NULL }, 2361, "tcp" }, - { "tl1", { NULL }, 2361, "udp" }, - { "digiman", { NULL }, 2362, "tcp" }, - { "digiman", { NULL }, 2362, "udp" }, - { "mediacntrlnfsd", { NULL }, 2363, "tcp" }, - { "mediacntrlnfsd", { NULL }, 2363, "udp" }, - { "oi-2000", { NULL }, 2364, "tcp" }, - { "oi-2000", { NULL }, 2364, "udp" }, - { "dbref", { NULL }, 2365, "tcp" }, - { "dbref", { NULL }, 2365, "udp" }, - { "qip-login", { NULL }, 2366, "tcp" }, - { "qip-login", { NULL }, 2366, "udp" }, - { "service-ctrl", { NULL }, 2367, "tcp" }, - { "service-ctrl", { NULL }, 2367, "udp" }, - { "opentable", { NULL }, 2368, "tcp" }, - { "opentable", { NULL }, 2368, "udp" }, - { "l3-hbmon", { NULL }, 2370, "tcp" }, - { "l3-hbmon", { NULL }, 2370, "udp" }, - { "worldwire", { NULL }, 2371, "tcp" }, - { "worldwire", { NULL }, 2371, "udp" }, - { "lanmessenger", { NULL }, 2372, "tcp" }, - { "lanmessenger", { NULL }, 2372, "udp" }, - { "remographlm", { NULL }, 2373, "tcp" }, - { "hydra", { NULL }, 2374, "tcp" }, - { "compaq-https", { NULL }, 2381, "tcp" }, - { "compaq-https", { NULL }, 2381, "udp" }, - { "ms-olap3", { NULL }, 2382, "tcp" }, - { "ms-olap3", { NULL }, 2382, "udp" }, - { "ms-olap4", { NULL }, 2383, "tcp" }, - { "ms-olap4", { NULL }, 2383, "udp" }, - { "sd-request", { NULL }, 2384, "tcp" }, - { "sd-capacity", { NULL }, 2384, "udp" }, - { "sd-data", { NULL }, 2385, "tcp" }, - { "sd-data", { NULL }, 2385, "udp" }, - { "virtualtape", { NULL }, 2386, "tcp" }, - { "virtualtape", { NULL }, 2386, "udp" }, - { "vsamredirector", { NULL }, 2387, "tcp" }, - { "vsamredirector", { NULL }, 2387, "udp" }, - { "mynahautostart", { NULL }, 2388, "tcp" }, - { "mynahautostart", { NULL }, 2388, "udp" }, - { "ovsessionmgr", { NULL }, 2389, "tcp" }, - { "ovsessionmgr", { NULL }, 2389, "udp" }, - { "rsmtp", { NULL }, 2390, "tcp" }, - { "rsmtp", { NULL }, 2390, "udp" }, - { "3com-net-mgmt", { NULL }, 2391, "tcp" }, - { "3com-net-mgmt", { NULL }, 2391, "udp" }, - { "tacticalauth", { NULL }, 2392, "tcp" }, - { "tacticalauth", { NULL }, 2392, "udp" }, - { "ms-olap1", { NULL }, 2393, "tcp" }, - { "ms-olap1", { NULL }, 2393, "udp" }, - { "ms-olap2", { NULL }, 2394, "tcp" }, - { "ms-olap2", { NULL }, 2394, "udp" }, - { "lan900_remote", { NULL }, 2395, "tcp" }, - { "lan900_remote", { NULL }, 2395, "udp" }, - { "wusage", { NULL }, 2396, "tcp" }, - { "wusage", { NULL }, 2396, "udp" }, - { "ncl", { NULL }, 2397, "tcp" }, - { "ncl", { NULL }, 2397, "udp" }, - { "orbiter", { NULL }, 2398, "tcp" }, - { "orbiter", { NULL }, 2398, "udp" }, - { "fmpro-fdal", { NULL }, 2399, "tcp" }, - { "fmpro-fdal", { NULL }, 2399, "udp" }, - { "opequus-server", { NULL }, 2400, "tcp" }, - { "opequus-server", { NULL }, 2400, "udp" }, - { "cvspserver", { NULL }, 2401, "tcp" }, - { "cvspserver", { NULL }, 2401, "udp" }, - { "taskmaster2000", { NULL }, 2402, "tcp" }, - { "taskmaster2000", { NULL }, 2402, "udp" }, - { "taskmaster2000", { NULL }, 2403, "tcp" }, - { "taskmaster2000", { NULL }, 2403, "udp" }, - { "iec-104", { NULL }, 2404, "tcp" }, - { "iec-104", { NULL }, 2404, "udp" }, - { "trc-netpoll", { NULL }, 2405, "tcp" }, - { "trc-netpoll", { NULL }, 2405, "udp" }, - { "jediserver", { NULL }, 2406, "tcp" }, - { "jediserver", { NULL }, 2406, "udp" }, - { "orion", { NULL }, 2407, "tcp" }, - { "orion", { NULL }, 2407, "udp" }, - { "optimanet", { NULL }, 2408, "tcp" }, - { "optimanet", { NULL }, 2408, "udp" }, - { "sns-protocol", { NULL }, 2409, "tcp" }, - { "sns-protocol", { NULL }, 2409, "udp" }, - { "vrts-registry", { NULL }, 2410, "tcp" }, - { "vrts-registry", { NULL }, 2410, "udp" }, - { "netwave-ap-mgmt", { NULL }, 2411, "tcp" }, - { "netwave-ap-mgmt", { NULL }, 2411, "udp" }, - { "cdn", { NULL }, 2412, "tcp" }, - { "cdn", { NULL }, 2412, "udp" }, - { "orion-rmi-reg", { NULL }, 2413, "tcp" }, - { "orion-rmi-reg", { NULL }, 2413, "udp" }, - { "beeyond", { NULL }, 2414, "tcp" }, - { "beeyond", { NULL }, 2414, "udp" }, - { "codima-rtp", { NULL }, 2415, "tcp" }, - { "codima-rtp", { NULL }, 2415, "udp" }, - { "rmtserver", { NULL }, 2416, "tcp" }, - { "rmtserver", { NULL }, 2416, "udp" }, - { "composit-server", { NULL }, 2417, "tcp" }, - { "composit-server", { NULL }, 2417, "udp" }, - { "cas", { NULL }, 2418, "tcp" }, - { "cas", { NULL }, 2418, "udp" }, - { "attachmate-s2s", { NULL }, 2419, "tcp" }, - { "attachmate-s2s", { NULL }, 2419, "udp" }, - { "dslremote-mgmt", { NULL }, 2420, "tcp" }, - { "dslremote-mgmt", { NULL }, 2420, "udp" }, - { "g-talk", { NULL }, 2421, "tcp" }, - { "g-talk", { NULL }, 2421, "udp" }, - { "crmsbits", { NULL }, 2422, "tcp" }, - { "crmsbits", { NULL }, 2422, "udp" }, - { "rnrp", { NULL }, 2423, "tcp" }, - { "rnrp", { NULL }, 2423, "udp" }, - { "kofax-svr", { NULL }, 2424, "tcp" }, - { "kofax-svr", { NULL }, 2424, "udp" }, - { "fjitsuappmgr", { NULL }, 2425, "tcp" }, - { "fjitsuappmgr", { NULL }, 2425, "udp" }, - { "mgcp-gateway", { NULL }, 2427, "tcp" }, - { "mgcp-gateway", { NULL }, 2427, "udp" }, - { "ott", { NULL }, 2428, "tcp" }, - { "ott", { NULL }, 2428, "udp" }, - { "ft-role", { NULL }, 2429, "tcp" }, - { "ft-role", { NULL }, 2429, "udp" }, - { "venus", { NULL }, 2430, "tcp" }, - { "venus", { NULL }, 2430, "udp" }, - { "venus-se", { NULL }, 2431, "tcp" }, - { "venus-se", { NULL }, 2431, "udp" }, - { "codasrv", { NULL }, 2432, "tcp" }, - { "codasrv", { NULL }, 2432, "udp" }, - { "codasrv-se", { NULL }, 2433, "tcp" }, - { "codasrv-se", { NULL }, 2433, "udp" }, - { "pxc-epmap", { NULL }, 2434, "tcp" }, - { "pxc-epmap", { NULL }, 2434, "udp" }, - { "optilogic", { NULL }, 2435, "tcp" }, - { "optilogic", { NULL }, 2435, "udp" }, - { "topx", { NULL }, 2436, "tcp" }, - { "topx", { NULL }, 2436, "udp" }, - { "unicontrol", { NULL }, 2437, "tcp" }, - { "unicontrol", { NULL }, 2437, "udp" }, - { "msp", { NULL }, 2438, "tcp" }, - { "msp", { NULL }, 2438, "udp" }, - { "sybasedbsynch", { NULL }, 2439, "tcp" }, - { "sybasedbsynch", { NULL }, 2439, "udp" }, - { "spearway", { NULL }, 2440, "tcp" }, - { "spearway", { NULL }, 2440, "udp" }, - { "pvsw-inet", { NULL }, 2441, "tcp" }, - { "pvsw-inet", { NULL }, 2441, "udp" }, - { "netangel", { NULL }, 2442, "tcp" }, - { "netangel", { NULL }, 2442, "udp" }, - { "powerclientcsf", { NULL }, 2443, "tcp" }, - { "powerclientcsf", { NULL }, 2443, "udp" }, - { "btpp2sectrans", { NULL }, 2444, "tcp" }, - { "btpp2sectrans", { NULL }, 2444, "udp" }, - { "dtn1", { NULL }, 2445, "tcp" }, - { "dtn1", { NULL }, 2445, "udp" }, - { "bues_service", { NULL }, 2446, "tcp" }, - { "bues_service", { NULL }, 2446, "udp" }, - { "ovwdb", { NULL }, 2447, "tcp" }, - { "ovwdb", { NULL }, 2447, "udp" }, - { "hpppssvr", { NULL }, 2448, "tcp" }, - { "hpppssvr", { NULL }, 2448, "udp" }, - { "ratl", { NULL }, 2449, "tcp" }, - { "ratl", { NULL }, 2449, "udp" }, - { "netadmin", { NULL }, 2450, "tcp" }, - { "netadmin", { NULL }, 2450, "udp" }, - { "netchat", { NULL }, 2451, "tcp" }, - { "netchat", { NULL }, 2451, "udp" }, - { "snifferclient", { NULL }, 2452, "tcp" }, - { "snifferclient", { NULL }, 2452, "udp" }, - { "madge-ltd", { NULL }, 2453, "tcp" }, - { "madge-ltd", { NULL }, 2453, "udp" }, - { "indx-dds", { NULL }, 2454, "tcp" }, - { "indx-dds", { NULL }, 2454, "udp" }, - { "wago-io-system", { NULL }, 2455, "tcp" }, - { "wago-io-system", { NULL }, 2455, "udp" }, - { "altav-remmgt", { NULL }, 2456, "tcp" }, - { "altav-remmgt", { NULL }, 2456, "udp" }, - { "rapido-ip", { NULL }, 2457, "tcp" }, - { "rapido-ip", { NULL }, 2457, "udp" }, - { "griffin", { NULL }, 2458, "tcp" }, - { "griffin", { NULL }, 2458, "udp" }, - { "community", { NULL }, 2459, "tcp" }, - { "community", { NULL }, 2459, "udp" }, - { "ms-theater", { NULL }, 2460, "tcp" }, - { "ms-theater", { NULL }, 2460, "udp" }, - { "qadmifoper", { NULL }, 2461, "tcp" }, - { "qadmifoper", { NULL }, 2461, "udp" }, - { "qadmifevent", { NULL }, 2462, "tcp" }, - { "qadmifevent", { NULL }, 2462, "udp" }, - { "lsi-raid-mgmt", { NULL }, 2463, "tcp" }, - { "lsi-raid-mgmt", { NULL }, 2463, "udp" }, - { "direcpc-si", { NULL }, 2464, "tcp" }, - { "direcpc-si", { NULL }, 2464, "udp" }, - { "lbm", { NULL }, 2465, "tcp" }, - { "lbm", { NULL }, 2465, "udp" }, - { "lbf", { NULL }, 2466, "tcp" }, - { "lbf", { NULL }, 2466, "udp" }, - { "high-criteria", { NULL }, 2467, "tcp" }, - { "high-criteria", { NULL }, 2467, "udp" }, - { "qip-msgd", { NULL }, 2468, "tcp" }, - { "qip-msgd", { NULL }, 2468, "udp" }, - { "mti-tcs-comm", { NULL }, 2469, "tcp" }, - { "mti-tcs-comm", { NULL }, 2469, "udp" }, - { "taskman-port", { NULL }, 2470, "tcp" }, - { "taskman-port", { NULL }, 2470, "udp" }, - { "seaodbc", { NULL }, 2471, "tcp" }, - { "seaodbc", { NULL }, 2471, "udp" }, - { "c3", { NULL }, 2472, "tcp" }, - { "c3", { NULL }, 2472, "udp" }, - { "aker-cdp", { NULL }, 2473, "tcp" }, - { "aker-cdp", { NULL }, 2473, "udp" }, - { "vitalanalysis", { NULL }, 2474, "tcp" }, - { "vitalanalysis", { NULL }, 2474, "udp" }, - { "ace-server", { NULL }, 2475, "tcp" }, - { "ace-server", { NULL }, 2475, "udp" }, - { "ace-svr-prop", { NULL }, 2476, "tcp" }, - { "ace-svr-prop", { NULL }, 2476, "udp" }, - { "ssm-cvs", { NULL }, 2477, "tcp" }, - { "ssm-cvs", { NULL }, 2477, "udp" }, - { "ssm-cssps", { NULL }, 2478, "tcp" }, - { "ssm-cssps", { NULL }, 2478, "udp" }, - { "ssm-els", { NULL }, 2479, "tcp" }, - { "ssm-els", { NULL }, 2479, "udp" }, - { "powerexchange", { NULL }, 2480, "tcp" }, - { "powerexchange", { NULL }, 2480, "udp" }, - { "giop", { NULL }, 2481, "tcp" }, - { "giop", { NULL }, 2481, "udp" }, - { "giop-ssl", { NULL }, 2482, "tcp" }, - { "giop-ssl", { NULL }, 2482, "udp" }, - { "ttc", { NULL }, 2483, "tcp" }, - { "ttc", { NULL }, 2483, "udp" }, - { "ttc-ssl", { NULL }, 2484, "tcp" }, - { "ttc-ssl", { NULL }, 2484, "udp" }, - { "netobjects1", { NULL }, 2485, "tcp" }, - { "netobjects1", { NULL }, 2485, "udp" }, - { "netobjects2", { NULL }, 2486, "tcp" }, - { "netobjects2", { NULL }, 2486, "udp" }, - { "pns", { NULL }, 2487, "tcp" }, - { "pns", { NULL }, 2487, "udp" }, - { "moy-corp", { NULL }, 2488, "tcp" }, - { "moy-corp", { NULL }, 2488, "udp" }, - { "tsilb", { NULL }, 2489, "tcp" }, - { "tsilb", { NULL }, 2489, "udp" }, - { "qip-qdhcp", { NULL }, 2490, "tcp" }, - { "qip-qdhcp", { NULL }, 2490, "udp" }, - { "conclave-cpp", { NULL }, 2491, "tcp" }, - { "conclave-cpp", { NULL }, 2491, "udp" }, - { "groove", { NULL }, 2492, "tcp" }, - { "groove", { NULL }, 2492, "udp" }, - { "talarian-mqs", { NULL }, 2493, "tcp" }, - { "talarian-mqs", { NULL }, 2493, "udp" }, - { "bmc-ar", { NULL }, 2494, "tcp" }, - { "bmc-ar", { NULL }, 2494, "udp" }, - { "fast-rem-serv", { NULL }, 2495, "tcp" }, - { "fast-rem-serv", { NULL }, 2495, "udp" }, - { "dirgis", { NULL }, 2496, "tcp" }, - { "dirgis", { NULL }, 2496, "udp" }, - { "quaddb", { NULL }, 2497, "tcp" }, - { "quaddb", { NULL }, 2497, "udp" }, - { "odn-castraq", { NULL }, 2498, "tcp" }, - { "odn-castraq", { NULL }, 2498, "udp" }, - { "unicontrol", { NULL }, 2499, "tcp" }, - { "unicontrol", { NULL }, 2499, "udp" }, - { "rtsserv", { NULL }, 2500, "tcp" }, - { "rtsserv", { NULL }, 2500, "udp" }, - { "rtsclient", { NULL }, 2501, "tcp" }, - { "rtsclient", { NULL }, 2501, "udp" }, - { "kentrox-prot", { NULL }, 2502, "tcp" }, - { "kentrox-prot", { NULL }, 2502, "udp" }, - { "nms-dpnss", { NULL }, 2503, "tcp" }, - { "nms-dpnss", { NULL }, 2503, "udp" }, - { "wlbs", { NULL }, 2504, "tcp" }, - { "wlbs", { NULL }, 2504, "udp" }, - { "ppcontrol", { NULL }, 2505, "tcp" }, - { "ppcontrol", { NULL }, 2505, "udp" }, - { "jbroker", { NULL }, 2506, "tcp" }, - { "jbroker", { NULL }, 2506, "udp" }, - { "spock", { NULL }, 2507, "tcp" }, - { "spock", { NULL }, 2507, "udp" }, - { "jdatastore", { NULL }, 2508, "tcp" }, - { "jdatastore", { NULL }, 2508, "udp" }, - { "fjmpss", { NULL }, 2509, "tcp" }, - { "fjmpss", { NULL }, 2509, "udp" }, - { "fjappmgrbulk", { NULL }, 2510, "tcp" }, - { "fjappmgrbulk", { NULL }, 2510, "udp" }, - { "metastorm", { NULL }, 2511, "tcp" }, - { "metastorm", { NULL }, 2511, "udp" }, - { "citrixima", { NULL }, 2512, "tcp" }, - { "citrixima", { NULL }, 2512, "udp" }, - { "citrixadmin", { NULL }, 2513, "tcp" }, - { "citrixadmin", { NULL }, 2513, "udp" }, - { "facsys-ntp", { NULL }, 2514, "tcp" }, - { "facsys-ntp", { NULL }, 2514, "udp" }, - { "facsys-router", { NULL }, 2515, "tcp" }, - { "facsys-router", { NULL }, 2515, "udp" }, - { "maincontrol", { NULL }, 2516, "tcp" }, - { "maincontrol", { NULL }, 2516, "udp" }, - { "call-sig-trans", { NULL }, 2517, "tcp" }, - { "call-sig-trans", { NULL }, 2517, "udp" }, - { "willy", { NULL }, 2518, "tcp" }, - { "willy", { NULL }, 2518, "udp" }, - { "globmsgsvc", { NULL }, 2519, "tcp" }, - { "globmsgsvc", { NULL }, 2519, "udp" }, - { "pvsw", { NULL }, 2520, "tcp" }, - { "pvsw", { NULL }, 2520, "udp" }, - { "adaptecmgr", { NULL }, 2521, "tcp" }, - { "adaptecmgr", { NULL }, 2521, "udp" }, - { "windb", { NULL }, 2522, "tcp" }, - { "windb", { NULL }, 2522, "udp" }, - { "qke-llc-v3", { NULL }, 2523, "tcp" }, - { "qke-llc-v3", { NULL }, 2523, "udp" }, - { "optiwave-lm", { NULL }, 2524, "tcp" }, - { "optiwave-lm", { NULL }, 2524, "udp" }, - { "ms-v-worlds", { NULL }, 2525, "tcp" }, - { "ms-v-worlds", { NULL }, 2525, "udp" }, - { "ema-sent-lm", { NULL }, 2526, "tcp" }, - { "ema-sent-lm", { NULL }, 2526, "udp" }, - { "iqserver", { NULL }, 2527, "tcp" }, - { "iqserver", { NULL }, 2527, "udp" }, - { "ncr_ccl", { NULL }, 2528, "tcp" }, - { "ncr_ccl", { NULL }, 2528, "udp" }, - { "utsftp", { NULL }, 2529, "tcp" }, - { "utsftp", { NULL }, 2529, "udp" }, - { "vrcommerce", { NULL }, 2530, "tcp" }, - { "vrcommerce", { NULL }, 2530, "udp" }, - { "ito-e-gui", { NULL }, 2531, "tcp" }, - { "ito-e-gui", { NULL }, 2531, "udp" }, - { "ovtopmd", { NULL }, 2532, "tcp" }, - { "ovtopmd", { NULL }, 2532, "udp" }, - { "snifferserver", { NULL }, 2533, "tcp" }, - { "snifferserver", { NULL }, 2533, "udp" }, - { "combox-web-acc", { NULL }, 2534, "tcp" }, - { "combox-web-acc", { NULL }, 2534, "udp" }, - { "madcap", { NULL }, 2535, "tcp" }, - { "madcap", { NULL }, 2535, "udp" }, - { "btpp2audctr1", { NULL }, 2536, "tcp" }, - { "btpp2audctr1", { NULL }, 2536, "udp" }, - { "upgrade", { NULL }, 2537, "tcp" }, - { "upgrade", { NULL }, 2537, "udp" }, - { "vnwk-prapi", { NULL }, 2538, "tcp" }, - { "vnwk-prapi", { NULL }, 2538, "udp" }, - { "vsiadmin", { NULL }, 2539, "tcp" }, - { "vsiadmin", { NULL }, 2539, "udp" }, - { "lonworks", { NULL }, 2540, "tcp" }, - { "lonworks", { NULL }, 2540, "udp" }, - { "lonworks2", { NULL }, 2541, "tcp" }, - { "lonworks2", { NULL }, 2541, "udp" }, - { "udrawgraph", { NULL }, 2542, "tcp" }, - { "udrawgraph", { NULL }, 2542, "udp" }, - { "reftek", { NULL }, 2543, "tcp" }, - { "reftek", { NULL }, 2543, "udp" }, - { "novell-zen", { NULL }, 2544, "tcp" }, - { "novell-zen", { NULL }, 2544, "udp" }, - { "sis-emt", { NULL }, 2545, "tcp" }, - { "sis-emt", { NULL }, 2545, "udp" }, - { "vytalvaultbrtp", { NULL }, 2546, "tcp" }, - { "vytalvaultbrtp", { NULL }, 2546, "udp" }, - { "vytalvaultvsmp", { NULL }, 2547, "tcp" }, - { "vytalvaultvsmp", { NULL }, 2547, "udp" }, - { "vytalvaultpipe", { NULL }, 2548, "tcp" }, - { "vytalvaultpipe", { NULL }, 2548, "udp" }, - { "ipass", { NULL }, 2549, "tcp" }, - { "ipass", { NULL }, 2549, "udp" }, - { "ads", { NULL }, 2550, "tcp" }, - { "ads", { NULL }, 2550, "udp" }, - { "isg-uda-server", { NULL }, 2551, "tcp" }, - { "isg-uda-server", { NULL }, 2551, "udp" }, - { "call-logging", { NULL }, 2552, "tcp" }, - { "call-logging", { NULL }, 2552, "udp" }, - { "efidiningport", { NULL }, 2553, "tcp" }, - { "efidiningport", { NULL }, 2553, "udp" }, - { "vcnet-link-v10", { NULL }, 2554, "tcp" }, - { "vcnet-link-v10", { NULL }, 2554, "udp" }, - { "compaq-wcp", { NULL }, 2555, "tcp" }, - { "compaq-wcp", { NULL }, 2555, "udp" }, - { "nicetec-nmsvc", { NULL }, 2556, "tcp" }, - { "nicetec-nmsvc", { NULL }, 2556, "udp" }, - { "nicetec-mgmt", { NULL }, 2557, "tcp" }, - { "nicetec-mgmt", { NULL }, 2557, "udp" }, - { "pclemultimedia", { NULL }, 2558, "tcp" }, - { "pclemultimedia", { NULL }, 2558, "udp" }, - { "lstp", { NULL }, 2559, "tcp" }, - { "lstp", { NULL }, 2559, "udp" }, - { "labrat", { NULL }, 2560, "tcp" }, - { "labrat", { NULL }, 2560, "udp" }, - { "mosaixcc", { NULL }, 2561, "tcp" }, - { "mosaixcc", { NULL }, 2561, "udp" }, - { "delibo", { NULL }, 2562, "tcp" }, - { "delibo", { NULL }, 2562, "udp" }, - { "cti-redwood", { NULL }, 2563, "tcp" }, - { "cti-redwood", { NULL }, 2563, "udp" }, - { "hp-3000-telnet", { NULL }, 2564, "tcp" }, - { "coord-svr", { NULL }, 2565, "tcp" }, - { "coord-svr", { NULL }, 2565, "udp" }, - { "pcs-pcw", { NULL }, 2566, "tcp" }, - { "pcs-pcw", { NULL }, 2566, "udp" }, - { "clp", { NULL }, 2567, "tcp" }, - { "clp", { NULL }, 2567, "udp" }, - { "spamtrap", { NULL }, 2568, "tcp" }, - { "spamtrap", { NULL }, 2568, "udp" }, - { "sonuscallsig", { NULL }, 2569, "tcp" }, - { "sonuscallsig", { NULL }, 2569, "udp" }, - { "hs-port", { NULL }, 2570, "tcp" }, - { "hs-port", { NULL }, 2570, "udp" }, - { "cecsvc", { NULL }, 2571, "tcp" }, - { "cecsvc", { NULL }, 2571, "udp" }, - { "ibp", { NULL }, 2572, "tcp" }, - { "ibp", { NULL }, 2572, "udp" }, - { "trustestablish", { NULL }, 2573, "tcp" }, - { "trustestablish", { NULL }, 2573, "udp" }, - { "blockade-bpsp", { NULL }, 2574, "tcp" }, - { "blockade-bpsp", { NULL }, 2574, "udp" }, - { "hl7", { NULL }, 2575, "tcp" }, - { "hl7", { NULL }, 2575, "udp" }, - { "tclprodebugger", { NULL }, 2576, "tcp" }, - { "tclprodebugger", { NULL }, 2576, "udp" }, - { "scipticslsrvr", { NULL }, 2577, "tcp" }, - { "scipticslsrvr", { NULL }, 2577, "udp" }, - { "rvs-isdn-dcp", { NULL }, 2578, "tcp" }, - { "rvs-isdn-dcp", { NULL }, 2578, "udp" }, - { "mpfoncl", { NULL }, 2579, "tcp" }, - { "mpfoncl", { NULL }, 2579, "udp" }, - { "tributary", { NULL }, 2580, "tcp" }, - { "tributary", { NULL }, 2580, "udp" }, - { "argis-te", { NULL }, 2581, "tcp" }, - { "argis-te", { NULL }, 2581, "udp" }, - { "argis-ds", { NULL }, 2582, "tcp" }, - { "argis-ds", { NULL }, 2582, "udp" }, - { "mon", { NULL }, 2583, "tcp" }, - { "mon", { NULL }, 2583, "udp" }, - { "cyaserv", { NULL }, 2584, "tcp" }, - { "cyaserv", { NULL }, 2584, "udp" }, - { "netx-server", { NULL }, 2585, "tcp" }, - { "netx-server", { NULL }, 2585, "udp" }, - { "netx-agent", { NULL }, 2586, "tcp" }, - { "netx-agent", { NULL }, 2586, "udp" }, - { "masc", { NULL }, 2587, "tcp" }, - { "masc", { NULL }, 2587, "udp" }, - { "privilege", { NULL }, 2588, "tcp" }, - { "privilege", { NULL }, 2588, "udp" }, - { "quartus-tcl", { NULL }, 2589, "tcp" }, - { "quartus-tcl", { NULL }, 2589, "udp" }, - { "idotdist", { NULL }, 2590, "tcp" }, - { "idotdist", { NULL }, 2590, "udp" }, - { "maytagshuffle", { NULL }, 2591, "tcp" }, - { "maytagshuffle", { NULL }, 2591, "udp" }, - { "netrek", { NULL }, 2592, "tcp" }, - { "netrek", { NULL }, 2592, "udp" }, - { "mns-mail", { NULL }, 2593, "tcp" }, - { "mns-mail", { NULL }, 2593, "udp" }, - { "dts", { NULL }, 2594, "tcp" }, - { "dts", { NULL }, 2594, "udp" }, - { "worldfusion1", { NULL }, 2595, "tcp" }, - { "worldfusion1", { NULL }, 2595, "udp" }, - { "worldfusion2", { NULL }, 2596, "tcp" }, - { "worldfusion2", { NULL }, 2596, "udp" }, - { "homesteadglory", { NULL }, 2597, "tcp" }, - { "homesteadglory", { NULL }, 2597, "udp" }, - { "citriximaclient", { NULL }, 2598, "tcp" }, - { "citriximaclient", { NULL }, 2598, "udp" }, - { "snapd", { NULL }, 2599, "tcp" }, - { "snapd", { NULL }, 2599, "udp" }, - { "hpstgmgr", { NULL }, 2600, "tcp" }, - { "hpstgmgr", { NULL }, 2600, "udp" }, - { "discp-client", { NULL }, 2601, "tcp" }, - { "discp-client", { NULL }, 2601, "udp" }, - { "discp-server", { NULL }, 2602, "tcp" }, - { "discp-server", { NULL }, 2602, "udp" }, - { "servicemeter", { NULL }, 2603, "tcp" }, - { "servicemeter", { NULL }, 2603, "udp" }, - { "nsc-ccs", { NULL }, 2604, "tcp" }, - { "nsc-ccs", { NULL }, 2604, "udp" }, - { "nsc-posa", { NULL }, 2605, "tcp" }, - { "nsc-posa", { NULL }, 2605, "udp" }, - { "netmon", { NULL }, 2606, "tcp" }, - { "netmon", { NULL }, 2606, "udp" }, - { "connection", { NULL }, 2607, "tcp" }, - { "connection", { NULL }, 2607, "udp" }, - { "wag-service", { NULL }, 2608, "tcp" }, - { "wag-service", { NULL }, 2608, "udp" }, - { "system-monitor", { NULL }, 2609, "tcp" }, - { "system-monitor", { NULL }, 2609, "udp" }, - { "versa-tek", { NULL }, 2610, "tcp" }, - { "versa-tek", { NULL }, 2610, "udp" }, - { "lionhead", { NULL }, 2611, "tcp" }, - { "lionhead", { NULL }, 2611, "udp" }, - { "qpasa-agent", { NULL }, 2612, "tcp" }, - { "qpasa-agent", { NULL }, 2612, "udp" }, - { "smntubootstrap", { NULL }, 2613, "tcp" }, - { "smntubootstrap", { NULL }, 2613, "udp" }, - { "neveroffline", { NULL }, 2614, "tcp" }, - { "neveroffline", { NULL }, 2614, "udp" }, - { "firepower", { NULL }, 2615, "tcp" }, - { "firepower", { NULL }, 2615, "udp" }, - { "appswitch-emp", { NULL }, 2616, "tcp" }, - { "appswitch-emp", { NULL }, 2616, "udp" }, - { "cmadmin", { NULL }, 2617, "tcp" }, - { "cmadmin", { NULL }, 2617, "udp" }, - { "priority-e-com", { NULL }, 2618, "tcp" }, - { "priority-e-com", { NULL }, 2618, "udp" }, - { "bruce", { NULL }, 2619, "tcp" }, - { "bruce", { NULL }, 2619, "udp" }, - { "lpsrecommender", { NULL }, 2620, "tcp" }, - { "lpsrecommender", { NULL }, 2620, "udp" }, - { "miles-apart", { NULL }, 2621, "tcp" }, - { "miles-apart", { NULL }, 2621, "udp" }, - { "metricadbc", { NULL }, 2622, "tcp" }, - { "metricadbc", { NULL }, 2622, "udp" }, - { "lmdp", { NULL }, 2623, "tcp" }, - { "lmdp", { NULL }, 2623, "udp" }, - { "aria", { NULL }, 2624, "tcp" }, - { "aria", { NULL }, 2624, "udp" }, - { "blwnkl-port", { NULL }, 2625, "tcp" }, - { "blwnkl-port", { NULL }, 2625, "udp" }, - { "gbjd816", { NULL }, 2626, "tcp" }, - { "gbjd816", { NULL }, 2626, "udp" }, - { "moshebeeri", { NULL }, 2627, "tcp" }, - { "moshebeeri", { NULL }, 2627, "udp" }, - { "dict", { NULL }, 2628, "tcp" }, - { "dict", { NULL }, 2628, "udp" }, - { "sitaraserver", { NULL }, 2629, "tcp" }, - { "sitaraserver", { NULL }, 2629, "udp" }, - { "sitaramgmt", { NULL }, 2630, "tcp" }, - { "sitaramgmt", { NULL }, 2630, "udp" }, - { "sitaradir", { NULL }, 2631, "tcp" }, - { "sitaradir", { NULL }, 2631, "udp" }, - { "irdg-post", { NULL }, 2632, "tcp" }, - { "irdg-post", { NULL }, 2632, "udp" }, - { "interintelli", { NULL }, 2633, "tcp" }, - { "interintelli", { NULL }, 2633, "udp" }, - { "pk-electronics", { NULL }, 2634, "tcp" }, - { "pk-electronics", { NULL }, 2634, "udp" }, - { "backburner", { NULL }, 2635, "tcp" }, - { "backburner", { NULL }, 2635, "udp" }, - { "solve", { NULL }, 2636, "tcp" }, - { "solve", { NULL }, 2636, "udp" }, - { "imdocsvc", { NULL }, 2637, "tcp" }, - { "imdocsvc", { NULL }, 2637, "udp" }, - { "sybaseanywhere", { NULL }, 2638, "tcp" }, - { "sybaseanywhere", { NULL }, 2638, "udp" }, - { "aminet", { NULL }, 2639, "tcp" }, - { "aminet", { NULL }, 2639, "udp" }, - { "sai_sentlm", { NULL }, 2640, "tcp" }, - { "sai_sentlm", { NULL }, 2640, "udp" }, - { "hdl-srv", { NULL }, 2641, "tcp" }, - { "hdl-srv", { NULL }, 2641, "udp" }, - { "tragic", { NULL }, 2642, "tcp" }, - { "tragic", { NULL }, 2642, "udp" }, - { "gte-samp", { NULL }, 2643, "tcp" }, - { "gte-samp", { NULL }, 2643, "udp" }, - { "travsoft-ipx-t", { NULL }, 2644, "tcp" }, - { "travsoft-ipx-t", { NULL }, 2644, "udp" }, - { "novell-ipx-cmd", { NULL }, 2645, "tcp" }, - { "novell-ipx-cmd", { NULL }, 2645, "udp" }, - { "and-lm", { NULL }, 2646, "tcp" }, - { "and-lm", { NULL }, 2646, "udp" }, - { "syncserver", { NULL }, 2647, "tcp" }, - { "syncserver", { NULL }, 2647, "udp" }, - { "upsnotifyprot", { NULL }, 2648, "tcp" }, - { "upsnotifyprot", { NULL }, 2648, "udp" }, - { "vpsipport", { NULL }, 2649, "tcp" }, - { "vpsipport", { NULL }, 2649, "udp" }, - { "eristwoguns", { NULL }, 2650, "tcp" }, - { "eristwoguns", { NULL }, 2650, "udp" }, - { "ebinsite", { NULL }, 2651, "tcp" }, - { "ebinsite", { NULL }, 2651, "udp" }, - { "interpathpanel", { NULL }, 2652, "tcp" }, - { "interpathpanel", { NULL }, 2652, "udp" }, - { "sonus", { NULL }, 2653, "tcp" }, - { "sonus", { NULL }, 2653, "udp" }, - { "corel_vncadmin", { NULL }, 2654, "tcp" }, - { "corel_vncadmin", { NULL }, 2654, "udp" }, - { "unglue", { NULL }, 2655, "tcp" }, - { "unglue", { NULL }, 2655, "udp" }, - { "kana", { NULL }, 2656, "tcp" }, - { "kana", { NULL }, 2656, "udp" }, - { "sns-dispatcher", { NULL }, 2657, "tcp" }, - { "sns-dispatcher", { NULL }, 2657, "udp" }, - { "sns-admin", { NULL }, 2658, "tcp" }, - { "sns-admin", { NULL }, 2658, "udp" }, - { "sns-query", { NULL }, 2659, "tcp" }, - { "sns-query", { NULL }, 2659, "udp" }, - { "gcmonitor", { NULL }, 2660, "tcp" }, - { "gcmonitor", { NULL }, 2660, "udp" }, - { "olhost", { NULL }, 2661, "tcp" }, - { "olhost", { NULL }, 2661, "udp" }, - { "bintec-capi", { NULL }, 2662, "tcp" }, - { "bintec-capi", { NULL }, 2662, "udp" }, - { "bintec-tapi", { NULL }, 2663, "tcp" }, - { "bintec-tapi", { NULL }, 2663, "udp" }, - { "patrol-mq-gm", { NULL }, 2664, "tcp" }, - { "patrol-mq-gm", { NULL }, 2664, "udp" }, - { "patrol-mq-nm", { NULL }, 2665, "tcp" }, - { "patrol-mq-nm", { NULL }, 2665, "udp" }, - { "extensis", { NULL }, 2666, "tcp" }, - { "extensis", { NULL }, 2666, "udp" }, - { "alarm-clock-s", { NULL }, 2667, "tcp" }, - { "alarm-clock-s", { NULL }, 2667, "udp" }, - { "alarm-clock-c", { NULL }, 2668, "tcp" }, - { "alarm-clock-c", { NULL }, 2668, "udp" }, - { "toad", { NULL }, 2669, "tcp" }, - { "toad", { NULL }, 2669, "udp" }, - { "tve-announce", { NULL }, 2670, "tcp" }, - { "tve-announce", { NULL }, 2670, "udp" }, - { "newlixreg", { NULL }, 2671, "tcp" }, - { "newlixreg", { NULL }, 2671, "udp" }, - { "nhserver", { NULL }, 2672, "tcp" }, - { "nhserver", { NULL }, 2672, "udp" }, - { "firstcall42", { NULL }, 2673, "tcp" }, - { "firstcall42", { NULL }, 2673, "udp" }, - { "ewnn", { NULL }, 2674, "tcp" }, - { "ewnn", { NULL }, 2674, "udp" }, - { "ttc-etap", { NULL }, 2675, "tcp" }, - { "ttc-etap", { NULL }, 2675, "udp" }, - { "simslink", { NULL }, 2676, "tcp" }, - { "simslink", { NULL }, 2676, "udp" }, - { "gadgetgate1way", { NULL }, 2677, "tcp" }, - { "gadgetgate1way", { NULL }, 2677, "udp" }, - { "gadgetgate2way", { NULL }, 2678, "tcp" }, - { "gadgetgate2way", { NULL }, 2678, "udp" }, - { "syncserverssl", { NULL }, 2679, "tcp" }, - { "syncserverssl", { NULL }, 2679, "udp" }, - { "pxc-sapxom", { NULL }, 2680, "tcp" }, - { "pxc-sapxom", { NULL }, 2680, "udp" }, - { "mpnjsomb", { NULL }, 2681, "tcp" }, - { "mpnjsomb", { NULL }, 2681, "udp" }, - { "ncdloadbalance", { NULL }, 2683, "tcp" }, - { "ncdloadbalance", { NULL }, 2683, "udp" }, - { "mpnjsosv", { NULL }, 2684, "tcp" }, - { "mpnjsosv", { NULL }, 2684, "udp" }, - { "mpnjsocl", { NULL }, 2685, "tcp" }, - { "mpnjsocl", { NULL }, 2685, "udp" }, - { "mpnjsomg", { NULL }, 2686, "tcp" }, - { "mpnjsomg", { NULL }, 2686, "udp" }, - { "pq-lic-mgmt", { NULL }, 2687, "tcp" }, - { "pq-lic-mgmt", { NULL }, 2687, "udp" }, - { "md-cg-http", { NULL }, 2688, "tcp" }, - { "md-cg-http", { NULL }, 2688, "udp" }, - { "fastlynx", { NULL }, 2689, "tcp" }, - { "fastlynx", { NULL }, 2689, "udp" }, - { "hp-nnm-data", { NULL }, 2690, "tcp" }, - { "hp-nnm-data", { NULL }, 2690, "udp" }, - { "itinternet", { NULL }, 2691, "tcp" }, - { "itinternet", { NULL }, 2691, "udp" }, - { "admins-lms", { NULL }, 2692, "tcp" }, - { "admins-lms", { NULL }, 2692, "udp" }, - { "pwrsevent", { NULL }, 2694, "tcp" }, - { "pwrsevent", { NULL }, 2694, "udp" }, - { "vspread", { NULL }, 2695, "tcp" }, - { "vspread", { NULL }, 2695, "udp" }, - { "unifyadmin", { NULL }, 2696, "tcp" }, - { "unifyadmin", { NULL }, 2696, "udp" }, - { "oce-snmp-trap", { NULL }, 2697, "tcp" }, - { "oce-snmp-trap", { NULL }, 2697, "udp" }, - { "mck-ivpip", { NULL }, 2698, "tcp" }, - { "mck-ivpip", { NULL }, 2698, "udp" }, - { "csoft-plusclnt", { NULL }, 2699, "tcp" }, - { "csoft-plusclnt", { NULL }, 2699, "udp" }, - { "tqdata", { NULL }, 2700, "tcp" }, - { "tqdata", { NULL }, 2700, "udp" }, - { "sms-rcinfo", { NULL }, 2701, "tcp" }, - { "sms-rcinfo", { NULL }, 2701, "udp" }, - { "sms-xfer", { NULL }, 2702, "tcp" }, - { "sms-xfer", { NULL }, 2702, "udp" }, - { "sms-chat", { NULL }, 2703, "tcp" }, - { "sms-chat", { NULL }, 2703, "udp" }, - { "sms-remctrl", { NULL }, 2704, "tcp" }, - { "sms-remctrl", { NULL }, 2704, "udp" }, - { "sds-admin", { NULL }, 2705, "tcp" }, - { "sds-admin", { NULL }, 2705, "udp" }, - { "ncdmirroring", { NULL }, 2706, "tcp" }, - { "ncdmirroring", { NULL }, 2706, "udp" }, - { "emcsymapiport", { NULL }, 2707, "tcp" }, - { "emcsymapiport", { NULL }, 2707, "udp" }, - { "banyan-net", { NULL }, 2708, "tcp" }, - { "banyan-net", { NULL }, 2708, "udp" }, - { "supermon", { NULL }, 2709, "tcp" }, - { "supermon", { NULL }, 2709, "udp" }, - { "sso-service", { NULL }, 2710, "tcp" }, - { "sso-service", { NULL }, 2710, "udp" }, - { "sso-control", { NULL }, 2711, "tcp" }, - { "sso-control", { NULL }, 2711, "udp" }, - { "aocp", { NULL }, 2712, "tcp" }, - { "aocp", { NULL }, 2712, "udp" }, - { "raventbs", { NULL }, 2713, "tcp" }, - { "raventbs", { NULL }, 2713, "udp" }, - { "raventdm", { NULL }, 2714, "tcp" }, - { "raventdm", { NULL }, 2714, "udp" }, - { "hpstgmgr2", { NULL }, 2715, "tcp" }, - { "hpstgmgr2", { NULL }, 2715, "udp" }, - { "inova-ip-disco", { NULL }, 2716, "tcp" }, - { "inova-ip-disco", { NULL }, 2716, "udp" }, - { "pn-requester", { NULL }, 2717, "tcp" }, - { "pn-requester", { NULL }, 2717, "udp" }, - { "pn-requester2", { NULL }, 2718, "tcp" }, - { "pn-requester2", { NULL }, 2718, "udp" }, - { "scan-change", { NULL }, 2719, "tcp" }, - { "scan-change", { NULL }, 2719, "udp" }, - { "wkars", { NULL }, 2720, "tcp" }, - { "wkars", { NULL }, 2720, "udp" }, - { "smart-diagnose", { NULL }, 2721, "tcp" }, - { "smart-diagnose", { NULL }, 2721, "udp" }, - { "proactivesrvr", { NULL }, 2722, "tcp" }, - { "proactivesrvr", { NULL }, 2722, "udp" }, - { "watchdog-nt", { NULL }, 2723, "tcp" }, - { "watchdog-nt", { NULL }, 2723, "udp" }, - { "qotps", { NULL }, 2724, "tcp" }, - { "qotps", { NULL }, 2724, "udp" }, - { "msolap-ptp2", { NULL }, 2725, "tcp" }, - { "msolap-ptp2", { NULL }, 2725, "udp" }, - { "tams", { NULL }, 2726, "tcp" }, - { "tams", { NULL }, 2726, "udp" }, - { "mgcp-callagent", { NULL }, 2727, "tcp" }, - { "mgcp-callagent", { NULL }, 2727, "udp" }, - { "sqdr", { NULL }, 2728, "tcp" }, - { "sqdr", { NULL }, 2728, "udp" }, - { "tcim-control", { NULL }, 2729, "tcp" }, - { "tcim-control", { NULL }, 2729, "udp" }, - { "nec-raidplus", { NULL }, 2730, "tcp" }, - { "nec-raidplus", { NULL }, 2730, "udp" }, - { "fyre-messanger", { NULL }, 2731, "tcp" }, - { "fyre-messanger", { NULL }, 2731, "udp" }, - { "g5m", { NULL }, 2732, "tcp" }, - { "g5m", { NULL }, 2732, "udp" }, - { "signet-ctf", { NULL }, 2733, "tcp" }, - { "signet-ctf", { NULL }, 2733, "udp" }, - { "ccs-software", { NULL }, 2734, "tcp" }, - { "ccs-software", { NULL }, 2734, "udp" }, - { "netiq-mc", { NULL }, 2735, "tcp" }, - { "netiq-mc", { NULL }, 2735, "udp" }, - { "radwiz-nms-srv", { NULL }, 2736, "tcp" }, - { "radwiz-nms-srv", { NULL }, 2736, "udp" }, - { "srp-feedback", { NULL }, 2737, "tcp" }, - { "srp-feedback", { NULL }, 2737, "udp" }, - { "ndl-tcp-ois-gw", { NULL }, 2738, "tcp" }, - { "ndl-tcp-ois-gw", { NULL }, 2738, "udp" }, - { "tn-timing", { NULL }, 2739, "tcp" }, - { "tn-timing", { NULL }, 2739, "udp" }, - { "alarm", { NULL }, 2740, "tcp" }, - { "alarm", { NULL }, 2740, "udp" }, - { "tsb", { NULL }, 2741, "tcp" }, - { "tsb", { NULL }, 2741, "udp" }, - { "tsb2", { NULL }, 2742, "tcp" }, - { "tsb2", { NULL }, 2742, "udp" }, - { "murx", { NULL }, 2743, "tcp" }, - { "murx", { NULL }, 2743, "udp" }, - { "honyaku", { NULL }, 2744, "tcp" }, - { "honyaku", { NULL }, 2744, "udp" }, - { "urbisnet", { NULL }, 2745, "tcp" }, - { "urbisnet", { NULL }, 2745, "udp" }, - { "cpudpencap", { NULL }, 2746, "tcp" }, - { "cpudpencap", { NULL }, 2746, "udp" }, - { "fjippol-swrly", { NULL }, 2747, "tcp" }, - { "fjippol-swrly", { NULL }, 2747, "udp" }, - { "fjippol-polsvr", { NULL }, 2748, "tcp" }, - { "fjippol-polsvr", { NULL }, 2748, "udp" }, - { "fjippol-cnsl", { NULL }, 2749, "tcp" }, - { "fjippol-cnsl", { NULL }, 2749, "udp" }, - { "fjippol-port1", { NULL }, 2750, "tcp" }, - { "fjippol-port1", { NULL }, 2750, "udp" }, - { "fjippol-port2", { NULL }, 2751, "tcp" }, - { "fjippol-port2", { NULL }, 2751, "udp" }, - { "rsisysaccess", { NULL }, 2752, "tcp" }, - { "rsisysaccess", { NULL }, 2752, "udp" }, - { "de-spot", { NULL }, 2753, "tcp" }, - { "de-spot", { NULL }, 2753, "udp" }, - { "apollo-cc", { NULL }, 2754, "tcp" }, - { "apollo-cc", { NULL }, 2754, "udp" }, - { "expresspay", { NULL }, 2755, "tcp" }, - { "expresspay", { NULL }, 2755, "udp" }, - { "simplement-tie", { NULL }, 2756, "tcp" }, - { "simplement-tie", { NULL }, 2756, "udp" }, - { "cnrp", { NULL }, 2757, "tcp" }, - { "cnrp", { NULL }, 2757, "udp" }, - { "apollo-status", { NULL }, 2758, "tcp" }, - { "apollo-status", { NULL }, 2758, "udp" }, - { "apollo-gms", { NULL }, 2759, "tcp" }, - { "apollo-gms", { NULL }, 2759, "udp" }, - { "sabams", { NULL }, 2760, "tcp" }, - { "sabams", { NULL }, 2760, "udp" }, - { "dicom-iscl", { NULL }, 2761, "tcp" }, - { "dicom-iscl", { NULL }, 2761, "udp" }, - { "dicom-tls", { NULL }, 2762, "tcp" }, - { "dicom-tls", { NULL }, 2762, "udp" }, - { "desktop-dna", { NULL }, 2763, "tcp" }, - { "desktop-dna", { NULL }, 2763, "udp" }, - { "data-insurance", { NULL }, 2764, "tcp" }, - { "data-insurance", { NULL }, 2764, "udp" }, - { "qip-audup", { NULL }, 2765, "tcp" }, - { "qip-audup", { NULL }, 2765, "udp" }, - { "compaq-scp", { NULL }, 2766, "tcp" }, - { "compaq-scp", { NULL }, 2766, "udp" }, - { "uadtc", { NULL }, 2767, "tcp" }, - { "uadtc", { NULL }, 2767, "udp" }, - { "uacs", { NULL }, 2768, "tcp" }, - { "uacs", { NULL }, 2768, "udp" }, - { "exce", { NULL }, 2769, "tcp" }, - { "exce", { NULL }, 2769, "udp" }, - { "veronica", { NULL }, 2770, "tcp" }, - { "veronica", { NULL }, 2770, "udp" }, - { "vergencecm", { NULL }, 2771, "tcp" }, - { "vergencecm", { NULL }, 2771, "udp" }, - { "auris", { NULL }, 2772, "tcp" }, - { "auris", { NULL }, 2772, "udp" }, - { "rbakcup1", { NULL }, 2773, "tcp" }, - { "rbakcup1", { NULL }, 2773, "udp" }, - { "rbakcup2", { NULL }, 2774, "tcp" }, - { "rbakcup2", { NULL }, 2774, "udp" }, - { "smpp", { NULL }, 2775, "tcp" }, - { "smpp", { NULL }, 2775, "udp" }, - { "ridgeway1", { NULL }, 2776, "tcp" }, - { "ridgeway1", { NULL }, 2776, "udp" }, - { "ridgeway2", { NULL }, 2777, "tcp" }, - { "ridgeway2", { NULL }, 2777, "udp" }, - { "gwen-sonya", { NULL }, 2778, "tcp" }, - { "gwen-sonya", { NULL }, 2778, "udp" }, - { "lbc-sync", { NULL }, 2779, "tcp" }, - { "lbc-sync", { NULL }, 2779, "udp" }, - { "lbc-control", { NULL }, 2780, "tcp" }, - { "lbc-control", { NULL }, 2780, "udp" }, - { "whosells", { NULL }, 2781, "tcp" }, - { "whosells", { NULL }, 2781, "udp" }, - { "everydayrc", { NULL }, 2782, "tcp" }, - { "everydayrc", { NULL }, 2782, "udp" }, - { "aises", { NULL }, 2783, "tcp" }, - { "aises", { NULL }, 2783, "udp" }, - { "www-dev", { NULL }, 2784, "tcp" }, - { "www-dev", { NULL }, 2784, "udp" }, - { "aic-np", { NULL }, 2785, "tcp" }, - { "aic-np", { NULL }, 2785, "udp" }, - { "aic-oncrpc", { NULL }, 2786, "tcp" }, - { "aic-oncrpc", { NULL }, 2786, "udp" }, - { "piccolo", { NULL }, 2787, "tcp" }, - { "piccolo", { NULL }, 2787, "udp" }, - { "fryeserv", { NULL }, 2788, "tcp" }, - { "fryeserv", { NULL }, 2788, "udp" }, - { "media-agent", { NULL }, 2789, "tcp" }, - { "media-agent", { NULL }, 2789, "udp" }, - { "plgproxy", { NULL }, 2790, "tcp" }, - { "plgproxy", { NULL }, 2790, "udp" }, - { "mtport-regist", { NULL }, 2791, "tcp" }, - { "mtport-regist", { NULL }, 2791, "udp" }, - { "f5-globalsite", { NULL }, 2792, "tcp" }, - { "f5-globalsite", { NULL }, 2792, "udp" }, - { "initlsmsad", { NULL }, 2793, "tcp" }, - { "initlsmsad", { NULL }, 2793, "udp" }, - { "livestats", { NULL }, 2795, "tcp" }, - { "livestats", { NULL }, 2795, "udp" }, - { "ac-tech", { NULL }, 2796, "tcp" }, - { "ac-tech", { NULL }, 2796, "udp" }, - { "esp-encap", { NULL }, 2797, "tcp" }, - { "esp-encap", { NULL }, 2797, "udp" }, - { "tmesis-upshot", { NULL }, 2798, "tcp" }, - { "tmesis-upshot", { NULL }, 2798, "udp" }, - { "icon-discover", { NULL }, 2799, "tcp" }, - { "icon-discover", { NULL }, 2799, "udp" }, - { "acc-raid", { NULL }, 2800, "tcp" }, - { "acc-raid", { NULL }, 2800, "udp" }, - { "igcp", { NULL }, 2801, "tcp" }, - { "igcp", { NULL }, 2801, "udp" }, - { "veritas-tcp1", { NULL }, 2802, "tcp" }, - { "veritas-udp1", { NULL }, 2802, "udp" }, - { "btprjctrl", { NULL }, 2803, "tcp" }, - { "btprjctrl", { NULL }, 2803, "udp" }, - { "dvr-esm", { NULL }, 2804, "tcp" }, - { "dvr-esm", { NULL }, 2804, "udp" }, - { "wta-wsp-s", { NULL }, 2805, "tcp" }, - { "wta-wsp-s", { NULL }, 2805, "udp" }, - { "cspuni", { NULL }, 2806, "tcp" }, - { "cspuni", { NULL }, 2806, "udp" }, - { "cspmulti", { NULL }, 2807, "tcp" }, - { "cspmulti", { NULL }, 2807, "udp" }, - { "j-lan-p", { NULL }, 2808, "tcp" }, - { "j-lan-p", { NULL }, 2808, "udp" }, - { "corbaloc", { NULL }, 2809, "tcp" }, - { "corbaloc", { NULL }, 2809, "udp" }, - { "netsteward", { NULL }, 2810, "tcp" }, - { "netsteward", { NULL }, 2810, "udp" }, - { "gsiftp", { NULL }, 2811, "tcp" }, - { "gsiftp", { NULL }, 2811, "udp" }, - { "atmtcp", { NULL }, 2812, "tcp" }, - { "atmtcp", { NULL }, 2812, "udp" }, - { "llm-pass", { NULL }, 2813, "tcp" }, - { "llm-pass", { NULL }, 2813, "udp" }, - { "llm-csv", { NULL }, 2814, "tcp" }, - { "llm-csv", { NULL }, 2814, "udp" }, - { "lbc-measure", { NULL }, 2815, "tcp" }, - { "lbc-measure", { NULL }, 2815, "udp" }, - { "lbc-watchdog", { NULL }, 2816, "tcp" }, - { "lbc-watchdog", { NULL }, 2816, "udp" }, - { "nmsigport", { NULL }, 2817, "tcp" }, - { "nmsigport", { NULL }, 2817, "udp" }, - { "rmlnk", { NULL }, 2818, "tcp" }, - { "rmlnk", { NULL }, 2818, "udp" }, - { "fc-faultnotify", { NULL }, 2819, "tcp" }, - { "fc-faultnotify", { NULL }, 2819, "udp" }, - { "univision", { NULL }, 2820, "tcp" }, - { "univision", { NULL }, 2820, "udp" }, - { "vrts-at-port", { NULL }, 2821, "tcp" }, - { "vrts-at-port", { NULL }, 2821, "udp" }, - { "ka0wuc", { NULL }, 2822, "tcp" }, - { "ka0wuc", { NULL }, 2822, "udp" }, - { "cqg-netlan", { NULL }, 2823, "tcp" }, - { "cqg-netlan", { NULL }, 2823, "udp" }, - { "cqg-netlan-1", { NULL }, 2824, "tcp" }, - { "cqg-netlan-1", { NULL }, 2824, "udp" }, - { "slc-systemlog", { NULL }, 2826, "tcp" }, - { "slc-systemlog", { NULL }, 2826, "udp" }, - { "slc-ctrlrloops", { NULL }, 2827, "tcp" }, - { "slc-ctrlrloops", { NULL }, 2827, "udp" }, - { "itm-lm", { NULL }, 2828, "tcp" }, - { "itm-lm", { NULL }, 2828, "udp" }, - { "silkp1", { NULL }, 2829, "tcp" }, - { "silkp1", { NULL }, 2829, "udp" }, - { "silkp2", { NULL }, 2830, "tcp" }, - { "silkp2", { NULL }, 2830, "udp" }, - { "silkp3", { NULL }, 2831, "tcp" }, - { "silkp3", { NULL }, 2831, "udp" }, - { "silkp4", { NULL }, 2832, "tcp" }, - { "silkp4", { NULL }, 2832, "udp" }, - { "glishd", { NULL }, 2833, "tcp" }, - { "glishd", { NULL }, 2833, "udp" }, - { "evtp", { NULL }, 2834, "tcp" }, - { "evtp", { NULL }, 2834, "udp" }, - { "evtp-data", { NULL }, 2835, "tcp" }, - { "evtp-data", { NULL }, 2835, "udp" }, - { "catalyst", { NULL }, 2836, "tcp" }, - { "catalyst", { NULL }, 2836, "udp" }, - { "repliweb", { NULL }, 2837, "tcp" }, - { "repliweb", { NULL }, 2837, "udp" }, - { "starbot", { NULL }, 2838, "tcp" }, - { "starbot", { NULL }, 2838, "udp" }, - { "nmsigport", { NULL }, 2839, "tcp" }, - { "nmsigport", { NULL }, 2839, "udp" }, - { "l3-exprt", { NULL }, 2840, "tcp" }, - { "l3-exprt", { NULL }, 2840, "udp" }, - { "l3-ranger", { NULL }, 2841, "tcp" }, - { "l3-ranger", { NULL }, 2841, "udp" }, - { "l3-hawk", { NULL }, 2842, "tcp" }, - { "l3-hawk", { NULL }, 2842, "udp" }, - { "pdnet", { NULL }, 2843, "tcp" }, - { "pdnet", { NULL }, 2843, "udp" }, - { "bpcp-poll", { NULL }, 2844, "tcp" }, - { "bpcp-poll", { NULL }, 2844, "udp" }, - { "bpcp-trap", { NULL }, 2845, "tcp" }, - { "bpcp-trap", { NULL }, 2845, "udp" }, - { "aimpp-hello", { NULL }, 2846, "tcp" }, - { "aimpp-hello", { NULL }, 2846, "udp" }, - { "aimpp-port-req", { NULL }, 2847, "tcp" }, - { "aimpp-port-req", { NULL }, 2847, "udp" }, - { "amt-blc-port", { NULL }, 2848, "tcp" }, - { "amt-blc-port", { NULL }, 2848, "udp" }, - { "fxp", { NULL }, 2849, "tcp" }, - { "fxp", { NULL }, 2849, "udp" }, - { "metaconsole", { NULL }, 2850, "tcp" }, - { "metaconsole", { NULL }, 2850, "udp" }, - { "webemshttp", { NULL }, 2851, "tcp" }, - { "webemshttp", { NULL }, 2851, "udp" }, - { "bears-01", { NULL }, 2852, "tcp" }, - { "bears-01", { NULL }, 2852, "udp" }, - { "ispipes", { NULL }, 2853, "tcp" }, - { "ispipes", { NULL }, 2853, "udp" }, - { "infomover", { NULL }, 2854, "tcp" }, - { "infomover", { NULL }, 2854, "udp" }, - { "msrp", { NULL }, 2855, "tcp" }, - { "msrp", { NULL }, 2855, "udp" }, - { "cesdinv", { NULL }, 2856, "tcp" }, - { "cesdinv", { NULL }, 2856, "udp" }, - { "simctlp", { NULL }, 2857, "tcp" }, - { "simctlp", { NULL }, 2857, "udp" }, - { "ecnp", { NULL }, 2858, "tcp" }, - { "ecnp", { NULL }, 2858, "udp" }, - { "activememory", { NULL }, 2859, "tcp" }, - { "activememory", { NULL }, 2859, "udp" }, - { "dialpad-voice1", { NULL }, 2860, "tcp" }, - { "dialpad-voice1", { NULL }, 2860, "udp" }, - { "dialpad-voice2", { NULL }, 2861, "tcp" }, - { "dialpad-voice2", { NULL }, 2861, "udp" }, - { "ttg-protocol", { NULL }, 2862, "tcp" }, - { "ttg-protocol", { NULL }, 2862, "udp" }, - { "sonardata", { NULL }, 2863, "tcp" }, - { "sonardata", { NULL }, 2863, "udp" }, - { "astromed-main", { NULL }, 2864, "tcp" }, - { "astromed-main", { NULL }, 2864, "udp" }, - { "pit-vpn", { NULL }, 2865, "tcp" }, - { "pit-vpn", { NULL }, 2865, "udp" }, - { "iwlistener", { NULL }, 2866, "tcp" }, - { "iwlistener", { NULL }, 2866, "udp" }, - { "esps-portal", { NULL }, 2867, "tcp" }, - { "esps-portal", { NULL }, 2867, "udp" }, - { "npep-messaging", { NULL }, 2868, "tcp" }, - { "npep-messaging", { NULL }, 2868, "udp" }, - { "icslap", { NULL }, 2869, "tcp" }, - { "icslap", { NULL }, 2869, "udp" }, - { "daishi", { NULL }, 2870, "tcp" }, - { "daishi", { NULL }, 2870, "udp" }, - { "msi-selectplay", { NULL }, 2871, "tcp" }, - { "msi-selectplay", { NULL }, 2871, "udp" }, - { "radix", { NULL }, 2872, "tcp" }, - { "radix", { NULL }, 2872, "udp" }, - { "dxmessagebase1", { NULL }, 2874, "tcp" }, - { "dxmessagebase1", { NULL }, 2874, "udp" }, - { "dxmessagebase2", { NULL }, 2875, "tcp" }, - { "dxmessagebase2", { NULL }, 2875, "udp" }, - { "sps-tunnel", { NULL }, 2876, "tcp" }, - { "sps-tunnel", { NULL }, 2876, "udp" }, - { "bluelance", { NULL }, 2877, "tcp" }, - { "bluelance", { NULL }, 2877, "udp" }, - { "aap", { NULL }, 2878, "tcp" }, - { "aap", { NULL }, 2878, "udp" }, - { "ucentric-ds", { NULL }, 2879, "tcp" }, - { "ucentric-ds", { NULL }, 2879, "udp" }, - { "synapse", { NULL }, 2880, "tcp" }, - { "synapse", { NULL }, 2880, "udp" }, - { "ndsp", { NULL }, 2881, "tcp" }, - { "ndsp", { NULL }, 2881, "udp" }, - { "ndtp", { NULL }, 2882, "tcp" }, - { "ndtp", { NULL }, 2882, "udp" }, - { "ndnp", { NULL }, 2883, "tcp" }, - { "ndnp", { NULL }, 2883, "udp" }, - { "flashmsg", { NULL }, 2884, "tcp" }, - { "flashmsg", { NULL }, 2884, "udp" }, - { "topflow", { NULL }, 2885, "tcp" }, - { "topflow", { NULL }, 2885, "udp" }, - { "responselogic", { NULL }, 2886, "tcp" }, - { "responselogic", { NULL }, 2886, "udp" }, - { "aironetddp", { NULL }, 2887, "tcp" }, - { "aironetddp", { NULL }, 2887, "udp" }, - { "spcsdlobby", { NULL }, 2888, "tcp" }, - { "spcsdlobby", { NULL }, 2888, "udp" }, - { "rsom", { NULL }, 2889, "tcp" }, - { "rsom", { NULL }, 2889, "udp" }, - { "cspclmulti", { NULL }, 2890, "tcp" }, - { "cspclmulti", { NULL }, 2890, "udp" }, - { "cinegrfx-elmd", { NULL }, 2891, "tcp" }, - { "cinegrfx-elmd", { NULL }, 2891, "udp" }, - { "snifferdata", { NULL }, 2892, "tcp" }, - { "snifferdata", { NULL }, 2892, "udp" }, - { "vseconnector", { NULL }, 2893, "tcp" }, - { "vseconnector", { NULL }, 2893, "udp" }, - { "abacus-remote", { NULL }, 2894, "tcp" }, - { "abacus-remote", { NULL }, 2894, "udp" }, - { "natuslink", { NULL }, 2895, "tcp" }, - { "natuslink", { NULL }, 2895, "udp" }, - { "ecovisiong6-1", { NULL }, 2896, "tcp" }, - { "ecovisiong6-1", { NULL }, 2896, "udp" }, - { "citrix-rtmp", { NULL }, 2897, "tcp" }, - { "citrix-rtmp", { NULL }, 2897, "udp" }, - { "appliance-cfg", { NULL }, 2898, "tcp" }, - { "appliance-cfg", { NULL }, 2898, "udp" }, - { "powergemplus", { NULL }, 2899, "tcp" }, - { "powergemplus", { NULL }, 2899, "udp" }, - { "quicksuite", { NULL }, 2900, "tcp" }, - { "quicksuite", { NULL }, 2900, "udp" }, - { "allstorcns", { NULL }, 2901, "tcp" }, - { "allstorcns", { NULL }, 2901, "udp" }, - { "netaspi", { NULL }, 2902, "tcp" }, - { "netaspi", { NULL }, 2902, "udp" }, - { "suitcase", { NULL }, 2903, "tcp" }, - { "suitcase", { NULL }, 2903, "udp" }, - { "m2ua", { NULL }, 2904, "tcp" }, - { "m2ua", { NULL }, 2904, "udp" }, - { "m2ua", { NULL }, 2904, "sctp" }, - { "m3ua", { NULL }, 2905, "tcp" }, - { "m3ua", { NULL }, 2905, "sctp" }, - { "caller9", { NULL }, 2906, "tcp" }, - { "caller9", { NULL }, 2906, "udp" }, - { "webmethods-b2b", { NULL }, 2907, "tcp" }, - { "webmethods-b2b", { NULL }, 2907, "udp" }, - { "mao", { NULL }, 2908, "tcp" }, - { "mao", { NULL }, 2908, "udp" }, - { "funk-dialout", { NULL }, 2909, "tcp" }, - { "funk-dialout", { NULL }, 2909, "udp" }, - { "tdaccess", { NULL }, 2910, "tcp" }, - { "tdaccess", { NULL }, 2910, "udp" }, - { "blockade", { NULL }, 2911, "tcp" }, - { "blockade", { NULL }, 2911, "udp" }, - { "epicon", { NULL }, 2912, "tcp" }, - { "epicon", { NULL }, 2912, "udp" }, - { "boosterware", { NULL }, 2913, "tcp" }, - { "boosterware", { NULL }, 2913, "udp" }, - { "gamelobby", { NULL }, 2914, "tcp" }, - { "gamelobby", { NULL }, 2914, "udp" }, - { "tksocket", { NULL }, 2915, "tcp" }, - { "tksocket", { NULL }, 2915, "udp" }, - { "elvin_server", { NULL }, 2916, "tcp" }, - { "elvin_server", { NULL }, 2916, "udp" }, - { "elvin_client", { NULL }, 2917, "tcp" }, - { "elvin_client", { NULL }, 2917, "udp" }, - { "kastenchasepad", { NULL }, 2918, "tcp" }, - { "kastenchasepad", { NULL }, 2918, "udp" }, - { "roboer", { NULL }, 2919, "tcp" }, - { "roboer", { NULL }, 2919, "udp" }, - { "roboeda", { NULL }, 2920, "tcp" }, - { "roboeda", { NULL }, 2920, "udp" }, - { "cesdcdman", { NULL }, 2921, "tcp" }, - { "cesdcdman", { NULL }, 2921, "udp" }, - { "cesdcdtrn", { NULL }, 2922, "tcp" }, - { "cesdcdtrn", { NULL }, 2922, "udp" }, - { "wta-wsp-wtp-s", { NULL }, 2923, "tcp" }, - { "wta-wsp-wtp-s", { NULL }, 2923, "udp" }, - { "precise-vip", { NULL }, 2924, "tcp" }, - { "precise-vip", { NULL }, 2924, "udp" }, - { "mobile-file-dl", { NULL }, 2926, "tcp" }, - { "mobile-file-dl", { NULL }, 2926, "udp" }, - { "unimobilectrl", { NULL }, 2927, "tcp" }, - { "unimobilectrl", { NULL }, 2927, "udp" }, - { "redstone-cpss", { NULL }, 2928, "tcp" }, - { "redstone-cpss", { NULL }, 2928, "udp" }, - { "amx-webadmin", { NULL }, 2929, "tcp" }, - { "amx-webadmin", { NULL }, 2929, "udp" }, - { "amx-weblinx", { NULL }, 2930, "tcp" }, - { "amx-weblinx", { NULL }, 2930, "udp" }, - { "circle-x", { NULL }, 2931, "tcp" }, - { "circle-x", { NULL }, 2931, "udp" }, - { "incp", { NULL }, 2932, "tcp" }, - { "incp", { NULL }, 2932, "udp" }, - { "4-tieropmgw", { NULL }, 2933, "tcp" }, - { "4-tieropmgw", { NULL }, 2933, "udp" }, - { "4-tieropmcli", { NULL }, 2934, "tcp" }, - { "4-tieropmcli", { NULL }, 2934, "udp" }, - { "qtp", { NULL }, 2935, "tcp" }, - { "qtp", { NULL }, 2935, "udp" }, - { "otpatch", { NULL }, 2936, "tcp" }, - { "otpatch", { NULL }, 2936, "udp" }, - { "pnaconsult-lm", { NULL }, 2937, "tcp" }, - { "pnaconsult-lm", { NULL }, 2937, "udp" }, - { "sm-pas-1", { NULL }, 2938, "tcp" }, - { "sm-pas-1", { NULL }, 2938, "udp" }, - { "sm-pas-2", { NULL }, 2939, "tcp" }, - { "sm-pas-2", { NULL }, 2939, "udp" }, - { "sm-pas-3", { NULL }, 2940, "tcp" }, - { "sm-pas-3", { NULL }, 2940, "udp" }, - { "sm-pas-4", { NULL }, 2941, "tcp" }, - { "sm-pas-4", { NULL }, 2941, "udp" }, - { "sm-pas-5", { NULL }, 2942, "tcp" }, - { "sm-pas-5", { NULL }, 2942, "udp" }, - { "ttnrepository", { NULL }, 2943, "tcp" }, - { "ttnrepository", { NULL }, 2943, "udp" }, - { "megaco-h248", { NULL }, 2944, "tcp" }, - { "megaco-h248", { NULL }, 2944, "udp" }, - { "megaco-h248", { NULL }, 2944, "sctp" }, - { "h248-binary", { NULL }, 2945, "tcp" }, - { "h248-binary", { NULL }, 2945, "udp" }, - { "h248-binary", { NULL }, 2945, "sctp" }, - { "fjsvmpor", { NULL }, 2946, "tcp" }, - { "fjsvmpor", { NULL }, 2946, "udp" }, - { "gpsd", { NULL }, 2947, "tcp" }, - { "gpsd", { NULL }, 2947, "udp" }, - { "wap-push", { NULL }, 2948, "tcp" }, - { "wap-push", { NULL }, 2948, "udp" }, - { "wap-pushsecure", { NULL }, 2949, "tcp" }, - { "wap-pushsecure", { NULL }, 2949, "udp" }, - { "esip", { NULL }, 2950, "tcp" }, - { "esip", { NULL }, 2950, "udp" }, - { "ottp", { NULL }, 2951, "tcp" }, - { "ottp", { NULL }, 2951, "udp" }, - { "mpfwsas", { NULL }, 2952, "tcp" }, - { "mpfwsas", { NULL }, 2952, "udp" }, - { "ovalarmsrv", { NULL }, 2953, "tcp" }, - { "ovalarmsrv", { NULL }, 2953, "udp" }, - { "ovalarmsrv-cmd", { NULL }, 2954, "tcp" }, - { "ovalarmsrv-cmd", { NULL }, 2954, "udp" }, - { "csnotify", { NULL }, 2955, "tcp" }, - { "csnotify", { NULL }, 2955, "udp" }, - { "ovrimosdbman", { NULL }, 2956, "tcp" }, - { "ovrimosdbman", { NULL }, 2956, "udp" }, - { "jmact5", { NULL }, 2957, "tcp" }, - { "jmact5", { NULL }, 2957, "udp" }, - { "jmact6", { NULL }, 2958, "tcp" }, - { "jmact6", { NULL }, 2958, "udp" }, - { "rmopagt", { NULL }, 2959, "tcp" }, - { "rmopagt", { NULL }, 2959, "udp" }, - { "dfoxserver", { NULL }, 2960, "tcp" }, - { "dfoxserver", { NULL }, 2960, "udp" }, - { "boldsoft-lm", { NULL }, 2961, "tcp" }, - { "boldsoft-lm", { NULL }, 2961, "udp" }, - { "iph-policy-cli", { NULL }, 2962, "tcp" }, - { "iph-policy-cli", { NULL }, 2962, "udp" }, - { "iph-policy-adm", { NULL }, 2963, "tcp" }, - { "iph-policy-adm", { NULL }, 2963, "udp" }, - { "bullant-srap", { NULL }, 2964, "tcp" }, - { "bullant-srap", { NULL }, 2964, "udp" }, - { "bullant-rap", { NULL }, 2965, "tcp" }, - { "bullant-rap", { NULL }, 2965, "udp" }, - { "idp-infotrieve", { NULL }, 2966, "tcp" }, - { "idp-infotrieve", { NULL }, 2966, "udp" }, - { "ssc-agent", { NULL }, 2967, "tcp" }, - { "ssc-agent", { NULL }, 2967, "udp" }, - { "enpp", { NULL }, 2968, "tcp" }, - { "enpp", { NULL }, 2968, "udp" }, - { "essp", { NULL }, 2969, "tcp" }, - { "essp", { NULL }, 2969, "udp" }, - { "index-net", { NULL }, 2970, "tcp" }, - { "index-net", { NULL }, 2970, "udp" }, - { "netclip", { NULL }, 2971, "tcp" }, - { "netclip", { NULL }, 2971, "udp" }, - { "pmsm-webrctl", { NULL }, 2972, "tcp" }, - { "pmsm-webrctl", { NULL }, 2972, "udp" }, - { "svnetworks", { NULL }, 2973, "tcp" }, - { "svnetworks", { NULL }, 2973, "udp" }, - { "signal", { NULL }, 2974, "tcp" }, - { "signal", { NULL }, 2974, "udp" }, - { "fjmpcm", { NULL }, 2975, "tcp" }, - { "fjmpcm", { NULL }, 2975, "udp" }, - { "cns-srv-port", { NULL }, 2976, "tcp" }, - { "cns-srv-port", { NULL }, 2976, "udp" }, - { "ttc-etap-ns", { NULL }, 2977, "tcp" }, - { "ttc-etap-ns", { NULL }, 2977, "udp" }, - { "ttc-etap-ds", { NULL }, 2978, "tcp" }, - { "ttc-etap-ds", { NULL }, 2978, "udp" }, - { "h263-video", { NULL }, 2979, "tcp" }, - { "h263-video", { NULL }, 2979, "udp" }, - { "wimd", { NULL }, 2980, "tcp" }, - { "wimd", { NULL }, 2980, "udp" }, - { "mylxamport", { NULL }, 2981, "tcp" }, - { "mylxamport", { NULL }, 2981, "udp" }, - { "iwb-whiteboard", { NULL }, 2982, "tcp" }, - { "iwb-whiteboard", { NULL }, 2982, "udp" }, - { "netplan", { NULL }, 2983, "tcp" }, - { "netplan", { NULL }, 2983, "udp" }, - { "hpidsadmin", { NULL }, 2984, "tcp" }, - { "hpidsadmin", { NULL }, 2984, "udp" }, - { "hpidsagent", { NULL }, 2985, "tcp" }, - { "hpidsagent", { NULL }, 2985, "udp" }, - { "stonefalls", { NULL }, 2986, "tcp" }, - { "stonefalls", { NULL }, 2986, "udp" }, - { "identify", { NULL }, 2987, "tcp" }, - { "identify", { NULL }, 2987, "udp" }, - { "hippad", { NULL }, 2988, "tcp" }, - { "hippad", { NULL }, 2988, "udp" }, - { "zarkov", { NULL }, 2989, "tcp" }, - { "zarkov", { NULL }, 2989, "udp" }, - { "boscap", { NULL }, 2990, "tcp" }, - { "boscap", { NULL }, 2990, "udp" }, - { "wkstn-mon", { NULL }, 2991, "tcp" }, - { "wkstn-mon", { NULL }, 2991, "udp" }, - { "avenyo", { NULL }, 2992, "tcp" }, - { "avenyo", { NULL }, 2992, "udp" }, - { "veritas-vis1", { NULL }, 2993, "tcp" }, - { "veritas-vis1", { NULL }, 2993, "udp" }, - { "veritas-vis2", { NULL }, 2994, "tcp" }, - { "veritas-vis2", { NULL }, 2994, "udp" }, - { "idrs", { NULL }, 2995, "tcp" }, - { "idrs", { NULL }, 2995, "udp" }, - { "vsixml", { NULL }, 2996, "tcp" }, - { "vsixml", { NULL }, 2996, "udp" }, - { "rebol", { NULL }, 2997, "tcp" }, - { "rebol", { NULL }, 2997, "udp" }, - { "realsecure", { NULL }, 2998, "tcp" }, - { "realsecure", { NULL }, 2998, "udp" }, - { "remoteware-un", { NULL }, 2999, "tcp" }, - { "remoteware-un", { NULL }, 2999, "udp" }, - { "hbci", { NULL }, 3000, "tcp" }, - { "hbci", { NULL }, 3000, "udp" }, - { "remoteware-cl", { NULL }, 3000, "tcp" }, - { "remoteware-cl", { NULL }, 3000, "udp" }, - { "exlm-agent", { NULL }, 3002, "tcp" }, - { "exlm-agent", { NULL }, 3002, "udp" }, - { "remoteware-srv", { NULL }, 3002, "tcp" }, - { "remoteware-srv", { NULL }, 3002, "udp" }, - { "cgms", { NULL }, 3003, "tcp" }, - { "cgms", { NULL }, 3003, "udp" }, - { "csoftragent", { NULL }, 3004, "tcp" }, - { "csoftragent", { NULL }, 3004, "udp" }, - { "geniuslm", { NULL }, 3005, "tcp" }, - { "geniuslm", { NULL }, 3005, "udp" }, - { "ii-admin", { NULL }, 3006, "tcp" }, - { "ii-admin", { NULL }, 3006, "udp" }, - { "lotusmtap", { NULL }, 3007, "tcp" }, - { "lotusmtap", { NULL }, 3007, "udp" }, - { "midnight-tech", { NULL }, 3008, "tcp" }, - { "midnight-tech", { NULL }, 3008, "udp" }, - { "pxc-ntfy", { NULL }, 3009, "tcp" }, - { "pxc-ntfy", { NULL }, 3009, "udp" }, - { "gw", { NULL }, 3010, "tcp" }, - { "ping-pong", { NULL }, 3010, "udp" }, - { "trusted-web", { NULL }, 3011, "tcp" }, - { "trusted-web", { NULL }, 3011, "udp" }, - { "twsdss", { NULL }, 3012, "tcp" }, - { "twsdss", { NULL }, 3012, "udp" }, - { "gilatskysurfer", { NULL }, 3013, "tcp" }, - { "gilatskysurfer", { NULL }, 3013, "udp" }, - { "broker_service", { NULL }, 3014, "tcp" }, - { "broker_service", { NULL }, 3014, "udp" }, - { "nati-dstp", { NULL }, 3015, "tcp" }, - { "nati-dstp", { NULL }, 3015, "udp" }, - { "notify_srvr", { NULL }, 3016, "tcp" }, - { "notify_srvr", { NULL }, 3016, "udp" }, - { "event_listener", { NULL }, 3017, "tcp" }, - { "event_listener", { NULL }, 3017, "udp" }, - { "srvc_registry", { NULL }, 3018, "tcp" }, - { "srvc_registry", { NULL }, 3018, "udp" }, - { "resource_mgr", { NULL }, 3019, "tcp" }, - { "resource_mgr", { NULL }, 3019, "udp" }, - { "cifs", { NULL }, 3020, "tcp" }, - { "cifs", { NULL }, 3020, "udp" }, - { "agriserver", { NULL }, 3021, "tcp" }, - { "agriserver", { NULL }, 3021, "udp" }, - { "csregagent", { NULL }, 3022, "tcp" }, - { "csregagent", { NULL }, 3022, "udp" }, - { "magicnotes", { NULL }, 3023, "tcp" }, - { "magicnotes", { NULL }, 3023, "udp" }, - { "nds_sso", { NULL }, 3024, "tcp" }, - { "nds_sso", { NULL }, 3024, "udp" }, - { "arepa-raft", { NULL }, 3025, "tcp" }, - { "arepa-raft", { NULL }, 3025, "udp" }, - { "agri-gateway", { NULL }, 3026, "tcp" }, - { "agri-gateway", { NULL }, 3026, "udp" }, - { "LiebDevMgmt_C", { NULL }, 3027, "tcp" }, - { "LiebDevMgmt_C", { NULL }, 3027, "udp" }, - { "LiebDevMgmt_DM", { NULL }, 3028, "tcp" }, - { "LiebDevMgmt_DM", { NULL }, 3028, "udp" }, - { "LiebDevMgmt_A", { NULL }, 3029, "tcp" }, - { "LiebDevMgmt_A", { NULL }, 3029, "udp" }, - { "arepa-cas", { NULL }, 3030, "tcp" }, - { "arepa-cas", { NULL }, 3030, "udp" }, - { "eppc", { NULL }, 3031, "tcp" }, - { "eppc", { NULL }, 3031, "udp" }, - { "redwood-chat", { NULL }, 3032, "tcp" }, - { "redwood-chat", { NULL }, 3032, "udp" }, - { "pdb", { NULL }, 3033, "tcp" }, - { "pdb", { NULL }, 3033, "udp" }, - { "osmosis-aeea", { NULL }, 3034, "tcp" }, - { "osmosis-aeea", { NULL }, 3034, "udp" }, - { "fjsv-gssagt", { NULL }, 3035, "tcp" }, - { "fjsv-gssagt", { NULL }, 3035, "udp" }, - { "hagel-dump", { NULL }, 3036, "tcp" }, - { "hagel-dump", { NULL }, 3036, "udp" }, - { "hp-san-mgmt", { NULL }, 3037, "tcp" }, - { "hp-san-mgmt", { NULL }, 3037, "udp" }, - { "santak-ups", { NULL }, 3038, "tcp" }, - { "santak-ups", { NULL }, 3038, "udp" }, - { "cogitate", { NULL }, 3039, "tcp" }, - { "cogitate", { NULL }, 3039, "udp" }, - { "tomato-springs", { NULL }, 3040, "tcp" }, - { "tomato-springs", { NULL }, 3040, "udp" }, - { "di-traceware", { NULL }, 3041, "tcp" }, - { "di-traceware", { NULL }, 3041, "udp" }, - { "journee", { NULL }, 3042, "tcp" }, - { "journee", { NULL }, 3042, "udp" }, - { "brp", { NULL }, 3043, "tcp" }, - { "brp", { NULL }, 3043, "udp" }, - { "epp", { NULL }, 3044, "tcp" }, - { "epp", { NULL }, 3044, "udp" }, - { "responsenet", { NULL }, 3045, "tcp" }, - { "responsenet", { NULL }, 3045, "udp" }, - { "di-ase", { NULL }, 3046, "tcp" }, - { "di-ase", { NULL }, 3046, "udp" }, - { "hlserver", { NULL }, 3047, "tcp" }, - { "hlserver", { NULL }, 3047, "udp" }, - { "pctrader", { NULL }, 3048, "tcp" }, - { "pctrader", { NULL }, 3048, "udp" }, - { "nsws", { NULL }, 3049, "tcp" }, - { "nsws", { NULL }, 3049, "udp" }, - { "gds_db", { NULL }, 3050, "tcp" }, - { "gds_db", { NULL }, 3050, "udp" }, - { "galaxy-server", { NULL }, 3051, "tcp" }, - { "galaxy-server", { NULL }, 3051, "udp" }, - { "apc-3052", { NULL }, 3052, "tcp" }, - { "apc-3052", { NULL }, 3052, "udp" }, - { "dsom-server", { NULL }, 3053, "tcp" }, - { "dsom-server", { NULL }, 3053, "udp" }, - { "amt-cnf-prot", { NULL }, 3054, "tcp" }, - { "amt-cnf-prot", { NULL }, 3054, "udp" }, - { "policyserver", { NULL }, 3055, "tcp" }, - { "policyserver", { NULL }, 3055, "udp" }, - { "cdl-server", { NULL }, 3056, "tcp" }, - { "cdl-server", { NULL }, 3056, "udp" }, - { "goahead-fldup", { NULL }, 3057, "tcp" }, - { "goahead-fldup", { NULL }, 3057, "udp" }, - { "videobeans", { NULL }, 3058, "tcp" }, - { "videobeans", { NULL }, 3058, "udp" }, - { "qsoft", { NULL }, 3059, "tcp" }, - { "qsoft", { NULL }, 3059, "udp" }, - { "interserver", { NULL }, 3060, "tcp" }, - { "interserver", { NULL }, 3060, "udp" }, - { "cautcpd", { NULL }, 3061, "tcp" }, - { "cautcpd", { NULL }, 3061, "udp" }, - { "ncacn-ip-tcp", { NULL }, 3062, "tcp" }, - { "ncacn-ip-tcp", { NULL }, 3062, "udp" }, - { "ncadg-ip-udp", { NULL }, 3063, "tcp" }, - { "ncadg-ip-udp", { NULL }, 3063, "udp" }, - { "rprt", { NULL }, 3064, "tcp" }, - { "rprt", { NULL }, 3064, "udp" }, - { "slinterbase", { NULL }, 3065, "tcp" }, - { "slinterbase", { NULL }, 3065, "udp" }, - { "netattachsdmp", { NULL }, 3066, "tcp" }, - { "netattachsdmp", { NULL }, 3066, "udp" }, - { "fjhpjp", { NULL }, 3067, "tcp" }, - { "fjhpjp", { NULL }, 3067, "udp" }, - { "ls3bcast", { NULL }, 3068, "tcp" }, - { "ls3bcast", { NULL }, 3068, "udp" }, - { "ls3", { NULL }, 3069, "tcp" }, - { "ls3", { NULL }, 3069, "udp" }, - { "mgxswitch", { NULL }, 3070, "tcp" }, - { "mgxswitch", { NULL }, 3070, "udp" }, - { "csd-mgmt-port", { NULL }, 3071, "tcp" }, - { "csd-mgmt-port", { NULL }, 3071, "udp" }, - { "csd-monitor", { NULL }, 3072, "tcp" }, - { "csd-monitor", { NULL }, 3072, "udp" }, - { "vcrp", { NULL }, 3073, "tcp" }, - { "vcrp", { NULL }, 3073, "udp" }, - { "xbox", { NULL }, 3074, "tcp" }, - { "xbox", { NULL }, 3074, "udp" }, - { "orbix-locator", { NULL }, 3075, "tcp" }, - { "orbix-locator", { NULL }, 3075, "udp" }, - { "orbix-config", { NULL }, 3076, "tcp" }, - { "orbix-config", { NULL }, 3076, "udp" }, - { "orbix-loc-ssl", { NULL }, 3077, "tcp" }, - { "orbix-loc-ssl", { NULL }, 3077, "udp" }, - { "orbix-cfg-ssl", { NULL }, 3078, "tcp" }, - { "orbix-cfg-ssl", { NULL }, 3078, "udp" }, - { "lv-frontpanel", { NULL }, 3079, "tcp" }, - { "lv-frontpanel", { NULL }, 3079, "udp" }, - { "stm_pproc", { NULL }, 3080, "tcp" }, - { "stm_pproc", { NULL }, 3080, "udp" }, - { "tl1-lv", { NULL }, 3081, "tcp" }, - { "tl1-lv", { NULL }, 3081, "udp" }, - { "tl1-raw", { NULL }, 3082, "tcp" }, - { "tl1-raw", { NULL }, 3082, "udp" }, - { "tl1-telnet", { NULL }, 3083, "tcp" }, - { "tl1-telnet", { NULL }, 3083, "udp" }, - { "itm-mccs", { NULL }, 3084, "tcp" }, - { "itm-mccs", { NULL }, 3084, "udp" }, - { "pcihreq", { NULL }, 3085, "tcp" }, - { "pcihreq", { NULL }, 3085, "udp" }, - { "jdl-dbkitchen", { NULL }, 3086, "tcp" }, - { "jdl-dbkitchen", { NULL }, 3086, "udp" }, - { "asoki-sma", { NULL }, 3087, "tcp" }, - { "asoki-sma", { NULL }, 3087, "udp" }, - { "xdtp", { NULL }, 3088, "tcp" }, - { "xdtp", { NULL }, 3088, "udp" }, - { "ptk-alink", { NULL }, 3089, "tcp" }, - { "ptk-alink", { NULL }, 3089, "udp" }, - { "stss", { NULL }, 3090, "tcp" }, - { "stss", { NULL }, 3090, "udp" }, - { "1ci-smcs", { NULL }, 3091, "tcp" }, - { "1ci-smcs", { NULL }, 3091, "udp" }, - { "rapidmq-center", { NULL }, 3093, "tcp" }, - { "rapidmq-center", { NULL }, 3093, "udp" }, - { "rapidmq-reg", { NULL }, 3094, "tcp" }, - { "rapidmq-reg", { NULL }, 3094, "udp" }, - { "panasas", { NULL }, 3095, "tcp" }, - { "panasas", { NULL }, 3095, "udp" }, - { "ndl-aps", { NULL }, 3096, "tcp" }, - { "ndl-aps", { NULL }, 3096, "udp" }, - { "itu-bicc-stc", { NULL }, 3097, "sctp" }, - { "umm-port", { NULL }, 3098, "tcp" }, - { "umm-port", { NULL }, 3098, "udp" }, - { "chmd", { NULL }, 3099, "tcp" }, - { "chmd", { NULL }, 3099, "udp" }, - { "opcon-xps", { NULL }, 3100, "tcp" }, - { "opcon-xps", { NULL }, 3100, "udp" }, - { "hp-pxpib", { NULL }, 3101, "tcp" }, - { "hp-pxpib", { NULL }, 3101, "udp" }, - { "slslavemon", { NULL }, 3102, "tcp" }, - { "slslavemon", { NULL }, 3102, "udp" }, - { "autocuesmi", { NULL }, 3103, "tcp" }, - { "autocuesmi", { NULL }, 3103, "udp" }, - { "autocuelog", { NULL }, 3104, "tcp" }, - { "autocuetime", { NULL }, 3104, "udp" }, - { "cardbox", { NULL }, 3105, "tcp" }, - { "cardbox", { NULL }, 3105, "udp" }, - { "cardbox-http", { NULL }, 3106, "tcp" }, - { "cardbox-http", { NULL }, 3106, "udp" }, - { "business", { NULL }, 3107, "tcp" }, - { "business", { NULL }, 3107, "udp" }, - { "geolocate", { NULL }, 3108, "tcp" }, - { "geolocate", { NULL }, 3108, "udp" }, - { "personnel", { NULL }, 3109, "tcp" }, - { "personnel", { NULL }, 3109, "udp" }, - { "sim-control", { NULL }, 3110, "tcp" }, - { "sim-control", { NULL }, 3110, "udp" }, - { "wsynch", { NULL }, 3111, "tcp" }, - { "wsynch", { NULL }, 3111, "udp" }, - { "ksysguard", { NULL }, 3112, "tcp" }, - { "ksysguard", { NULL }, 3112, "udp" }, - { "cs-auth-svr", { NULL }, 3113, "tcp" }, - { "cs-auth-svr", { NULL }, 3113, "udp" }, - { "ccmad", { NULL }, 3114, "tcp" }, - { "ccmad", { NULL }, 3114, "udp" }, - { "mctet-master", { NULL }, 3115, "tcp" }, - { "mctet-master", { NULL }, 3115, "udp" }, - { "mctet-gateway", { NULL }, 3116, "tcp" }, - { "mctet-gateway", { NULL }, 3116, "udp" }, - { "mctet-jserv", { NULL }, 3117, "tcp" }, - { "mctet-jserv", { NULL }, 3117, "udp" }, - { "pkagent", { NULL }, 3118, "tcp" }, - { "pkagent", { NULL }, 3118, "udp" }, - { "d2000kernel", { NULL }, 3119, "tcp" }, - { "d2000kernel", { NULL }, 3119, "udp" }, - { "d2000webserver", { NULL }, 3120, "tcp" }, - { "d2000webserver", { NULL }, 3120, "udp" }, - { "vtr-emulator", { NULL }, 3122, "tcp" }, - { "vtr-emulator", { NULL }, 3122, "udp" }, - { "edix", { NULL }, 3123, "tcp" }, - { "edix", { NULL }, 3123, "udp" }, - { "beacon-port", { NULL }, 3124, "tcp" }, - { "beacon-port", { NULL }, 3124, "udp" }, - { "a13-an", { NULL }, 3125, "tcp" }, - { "a13-an", { NULL }, 3125, "udp" }, - { "ctx-bridge", { NULL }, 3127, "tcp" }, - { "ctx-bridge", { NULL }, 3127, "udp" }, - { "ndl-aas", { NULL }, 3128, "tcp" }, - { "ndl-aas", { NULL }, 3128, "udp" }, - { "netport-id", { NULL }, 3129, "tcp" }, - { "netport-id", { NULL }, 3129, "udp" }, - { "icpv2", { NULL }, 3130, "tcp" }, - { "icpv2", { NULL }, 3130, "udp" }, - { "netbookmark", { NULL }, 3131, "tcp" }, - { "netbookmark", { NULL }, 3131, "udp" }, - { "ms-rule-engine", { NULL }, 3132, "tcp" }, - { "ms-rule-engine", { NULL }, 3132, "udp" }, - { "prism-deploy", { NULL }, 3133, "tcp" }, - { "prism-deploy", { NULL }, 3133, "udp" }, - { "ecp", { NULL }, 3134, "tcp" }, - { "ecp", { NULL }, 3134, "udp" }, - { "peerbook-port", { NULL }, 3135, "tcp" }, - { "peerbook-port", { NULL }, 3135, "udp" }, - { "grubd", { NULL }, 3136, "tcp" }, - { "grubd", { NULL }, 3136, "udp" }, - { "rtnt-1", { NULL }, 3137, "tcp" }, - { "rtnt-1", { NULL }, 3137, "udp" }, - { "rtnt-2", { NULL }, 3138, "tcp" }, - { "rtnt-2", { NULL }, 3138, "udp" }, - { "incognitorv", { NULL }, 3139, "tcp" }, - { "incognitorv", { NULL }, 3139, "udp" }, - { "ariliamulti", { NULL }, 3140, "tcp" }, - { "ariliamulti", { NULL }, 3140, "udp" }, - { "vmodem", { NULL }, 3141, "tcp" }, - { "vmodem", { NULL }, 3141, "udp" }, - { "rdc-wh-eos", { NULL }, 3142, "tcp" }, - { "rdc-wh-eos", { NULL }, 3142, "udp" }, - { "seaview", { NULL }, 3143, "tcp" }, - { "seaview", { NULL }, 3143, "udp" }, - { "tarantella", { NULL }, 3144, "tcp" }, - { "tarantella", { NULL }, 3144, "udp" }, - { "csi-lfap", { NULL }, 3145, "tcp" }, - { "csi-lfap", { NULL }, 3145, "udp" }, - { "bears-02", { NULL }, 3146, "tcp" }, - { "bears-02", { NULL }, 3146, "udp" }, - { "rfio", { NULL }, 3147, "tcp" }, - { "rfio", { NULL }, 3147, "udp" }, - { "nm-game-admin", { NULL }, 3148, "tcp" }, - { "nm-game-admin", { NULL }, 3148, "udp" }, - { "nm-game-server", { NULL }, 3149, "tcp" }, - { "nm-game-server", { NULL }, 3149, "udp" }, - { "nm-asses-admin", { NULL }, 3150, "tcp" }, - { "nm-asses-admin", { NULL }, 3150, "udp" }, - { "nm-assessor", { NULL }, 3151, "tcp" }, - { "nm-assessor", { NULL }, 3151, "udp" }, - { "feitianrockey", { NULL }, 3152, "tcp" }, - { "feitianrockey", { NULL }, 3152, "udp" }, - { "s8-client-port", { NULL }, 3153, "tcp" }, - { "s8-client-port", { NULL }, 3153, "udp" }, - { "ccmrmi", { NULL }, 3154, "tcp" }, - { "ccmrmi", { NULL }, 3154, "udp" }, - { "jpegmpeg", { NULL }, 3155, "tcp" }, - { "jpegmpeg", { NULL }, 3155, "udp" }, - { "indura", { NULL }, 3156, "tcp" }, - { "indura", { NULL }, 3156, "udp" }, - { "e3consultants", { NULL }, 3157, "tcp" }, - { "e3consultants", { NULL }, 3157, "udp" }, - { "stvp", { NULL }, 3158, "tcp" }, - { "stvp", { NULL }, 3158, "udp" }, - { "navegaweb-port", { NULL }, 3159, "tcp" }, - { "navegaweb-port", { NULL }, 3159, "udp" }, - { "tip-app-server", { NULL }, 3160, "tcp" }, - { "tip-app-server", { NULL }, 3160, "udp" }, - { "doc1lm", { NULL }, 3161, "tcp" }, - { "doc1lm", { NULL }, 3161, "udp" }, - { "sflm", { NULL }, 3162, "tcp" }, - { "sflm", { NULL }, 3162, "udp" }, - { "res-sap", { NULL }, 3163, "tcp" }, - { "res-sap", { NULL }, 3163, "udp" }, - { "imprs", { NULL }, 3164, "tcp" }, - { "imprs", { NULL }, 3164, "udp" }, - { "newgenpay", { NULL }, 3165, "tcp" }, - { "newgenpay", { NULL }, 3165, "udp" }, - { "sossecollector", { NULL }, 3166, "tcp" }, - { "sossecollector", { NULL }, 3166, "udp" }, - { "nowcontact", { NULL }, 3167, "tcp" }, - { "nowcontact", { NULL }, 3167, "udp" }, - { "poweronnud", { NULL }, 3168, "tcp" }, - { "poweronnud", { NULL }, 3168, "udp" }, - { "serverview-as", { NULL }, 3169, "tcp" }, - { "serverview-as", { NULL }, 3169, "udp" }, - { "serverview-asn", { NULL }, 3170, "tcp" }, - { "serverview-asn", { NULL }, 3170, "udp" }, - { "serverview-gf", { NULL }, 3171, "tcp" }, - { "serverview-gf", { NULL }, 3171, "udp" }, - { "serverview-rm", { NULL }, 3172, "tcp" }, - { "serverview-rm", { NULL }, 3172, "udp" }, - { "serverview-icc", { NULL }, 3173, "tcp" }, - { "serverview-icc", { NULL }, 3173, "udp" }, - { "armi-server", { NULL }, 3174, "tcp" }, - { "armi-server", { NULL }, 3174, "udp" }, - { "t1-e1-over-ip", { NULL }, 3175, "tcp" }, - { "t1-e1-over-ip", { NULL }, 3175, "udp" }, - { "ars-master", { NULL }, 3176, "tcp" }, - { "ars-master", { NULL }, 3176, "udp" }, - { "phonex-port", { NULL }, 3177, "tcp" }, - { "phonex-port", { NULL }, 3177, "udp" }, - { "radclientport", { NULL }, 3178, "tcp" }, - { "radclientport", { NULL }, 3178, "udp" }, - { "h2gf-w-2m", { NULL }, 3179, "tcp" }, - { "h2gf-w-2m", { NULL }, 3179, "udp" }, - { "mc-brk-srv", { NULL }, 3180, "tcp" }, - { "mc-brk-srv", { NULL }, 3180, "udp" }, - { "bmcpatrolagent", { NULL }, 3181, "tcp" }, - { "bmcpatrolagent", { NULL }, 3181, "udp" }, - { "bmcpatrolrnvu", { NULL }, 3182, "tcp" }, - { "bmcpatrolrnvu", { NULL }, 3182, "udp" }, - { "cops-tls", { NULL }, 3183, "tcp" }, - { "cops-tls", { NULL }, 3183, "udp" }, - { "apogeex-port", { NULL }, 3184, "tcp" }, - { "apogeex-port", { NULL }, 3184, "udp" }, - { "smpppd", { NULL }, 3185, "tcp" }, - { "smpppd", { NULL }, 3185, "udp" }, - { "iiw-port", { NULL }, 3186, "tcp" }, - { "iiw-port", { NULL }, 3186, "udp" }, - { "odi-port", { NULL }, 3187, "tcp" }, - { "odi-port", { NULL }, 3187, "udp" }, - { "brcm-comm-port", { NULL }, 3188, "tcp" }, - { "brcm-comm-port", { NULL }, 3188, "udp" }, - { "pcle-infex", { NULL }, 3189, "tcp" }, - { "pcle-infex", { NULL }, 3189, "udp" }, - { "csvr-proxy", { NULL }, 3190, "tcp" }, - { "csvr-proxy", { NULL }, 3190, "udp" }, - { "csvr-sslproxy", { NULL }, 3191, "tcp" }, - { "csvr-sslproxy", { NULL }, 3191, "udp" }, - { "firemonrcc", { NULL }, 3192, "tcp" }, - { "firemonrcc", { NULL }, 3192, "udp" }, - { "spandataport", { NULL }, 3193, "tcp" }, - { "spandataport", { NULL }, 3193, "udp" }, - { "magbind", { NULL }, 3194, "tcp" }, - { "magbind", { NULL }, 3194, "udp" }, - { "ncu-1", { NULL }, 3195, "tcp" }, - { "ncu-1", { NULL }, 3195, "udp" }, - { "ncu-2", { NULL }, 3196, "tcp" }, - { "ncu-2", { NULL }, 3196, "udp" }, - { "embrace-dp-s", { NULL }, 3197, "tcp" }, - { "embrace-dp-s", { NULL }, 3197, "udp" }, - { "embrace-dp-c", { NULL }, 3198, "tcp" }, - { "embrace-dp-c", { NULL }, 3198, "udp" }, - { "dmod-workspace", { NULL }, 3199, "tcp" }, - { "dmod-workspace", { NULL }, 3199, "udp" }, - { "tick-port", { NULL }, 3200, "tcp" }, - { "tick-port", { NULL }, 3200, "udp" }, - { "cpq-tasksmart", { NULL }, 3201, "tcp" }, - { "cpq-tasksmart", { NULL }, 3201, "udp" }, - { "intraintra", { NULL }, 3202, "tcp" }, - { "intraintra", { NULL }, 3202, "udp" }, - { "netwatcher-mon", { NULL }, 3203, "tcp" }, - { "netwatcher-mon", { NULL }, 3203, "udp" }, - { "netwatcher-db", { NULL }, 3204, "tcp" }, - { "netwatcher-db", { NULL }, 3204, "udp" }, - { "isns", { NULL }, 3205, "tcp" }, - { "isns", { NULL }, 3205, "udp" }, - { "ironmail", { NULL }, 3206, "tcp" }, - { "ironmail", { NULL }, 3206, "udp" }, - { "vx-auth-port", { NULL }, 3207, "tcp" }, - { "vx-auth-port", { NULL }, 3207, "udp" }, - { "pfu-prcallback", { NULL }, 3208, "tcp" }, - { "pfu-prcallback", { NULL }, 3208, "udp" }, - { "netwkpathengine", { NULL }, 3209, "tcp" }, - { "netwkpathengine", { NULL }, 3209, "udp" }, - { "flamenco-proxy", { NULL }, 3210, "tcp" }, - { "flamenco-proxy", { NULL }, 3210, "udp" }, - { "avsecuremgmt", { NULL }, 3211, "tcp" }, - { "avsecuremgmt", { NULL }, 3211, "udp" }, - { "surveyinst", { NULL }, 3212, "tcp" }, - { "surveyinst", { NULL }, 3212, "udp" }, - { "neon24x7", { NULL }, 3213, "tcp" }, - { "neon24x7", { NULL }, 3213, "udp" }, - { "jmq-daemon-1", { NULL }, 3214, "tcp" }, - { "jmq-daemon-1", { NULL }, 3214, "udp" }, - { "jmq-daemon-2", { NULL }, 3215, "tcp" }, - { "jmq-daemon-2", { NULL }, 3215, "udp" }, - { "ferrari-foam", { NULL }, 3216, "tcp" }, - { "ferrari-foam", { NULL }, 3216, "udp" }, - { "unite", { NULL }, 3217, "tcp" }, - { "unite", { NULL }, 3217, "udp" }, - { "smartpackets", { NULL }, 3218, "tcp" }, - { "smartpackets", { NULL }, 3218, "udp" }, - { "wms-messenger", { NULL }, 3219, "tcp" }, - { "wms-messenger", { NULL }, 3219, "udp" }, - { "xnm-ssl", { NULL }, 3220, "tcp" }, - { "xnm-ssl", { NULL }, 3220, "udp" }, - { "xnm-clear-text", { NULL }, 3221, "tcp" }, - { "xnm-clear-text", { NULL }, 3221, "udp" }, - { "glbp", { NULL }, 3222, "tcp" }, - { "glbp", { NULL }, 3222, "udp" }, - { "digivote", { NULL }, 3223, "tcp" }, - { "digivote", { NULL }, 3223, "udp" }, - { "aes-discovery", { NULL }, 3224, "tcp" }, - { "aes-discovery", { NULL }, 3224, "udp" }, - { "fcip-port", { NULL }, 3225, "tcp" }, - { "fcip-port", { NULL }, 3225, "udp" }, - { "isi-irp", { NULL }, 3226, "tcp" }, - { "isi-irp", { NULL }, 3226, "udp" }, - { "dwnmshttp", { NULL }, 3227, "tcp" }, - { "dwnmshttp", { NULL }, 3227, "udp" }, - { "dwmsgserver", { NULL }, 3228, "tcp" }, - { "dwmsgserver", { NULL }, 3228, "udp" }, - { "global-cd-port", { NULL }, 3229, "tcp" }, - { "global-cd-port", { NULL }, 3229, "udp" }, - { "sftdst-port", { NULL }, 3230, "tcp" }, - { "sftdst-port", { NULL }, 3230, "udp" }, - { "vidigo", { NULL }, 3231, "tcp" }, - { "vidigo", { NULL }, 3231, "udp" }, - { "mdtp", { NULL }, 3232, "tcp" }, - { "mdtp", { NULL }, 3232, "udp" }, - { "whisker", { NULL }, 3233, "tcp" }, - { "whisker", { NULL }, 3233, "udp" }, - { "alchemy", { NULL }, 3234, "tcp" }, - { "alchemy", { NULL }, 3234, "udp" }, - { "mdap-port", { NULL }, 3235, "tcp" }, - { "mdap-port", { NULL }, 3235, "udp" }, - { "apparenet-ts", { NULL }, 3236, "tcp" }, - { "apparenet-ts", { NULL }, 3236, "udp" }, - { "apparenet-tps", { NULL }, 3237, "tcp" }, - { "apparenet-tps", { NULL }, 3237, "udp" }, - { "apparenet-as", { NULL }, 3238, "tcp" }, - { "apparenet-as", { NULL }, 3238, "udp" }, - { "apparenet-ui", { NULL }, 3239, "tcp" }, - { "apparenet-ui", { NULL }, 3239, "udp" }, - { "triomotion", { NULL }, 3240, "tcp" }, - { "triomotion", { NULL }, 3240, "udp" }, - { "sysorb", { NULL }, 3241, "tcp" }, - { "sysorb", { NULL }, 3241, "udp" }, - { "sdp-id-port", { NULL }, 3242, "tcp" }, - { "sdp-id-port", { NULL }, 3242, "udp" }, - { "timelot", { NULL }, 3243, "tcp" }, - { "timelot", { NULL }, 3243, "udp" }, - { "onesaf", { NULL }, 3244, "tcp" }, - { "onesaf", { NULL }, 3244, "udp" }, - { "vieo-fe", { NULL }, 3245, "tcp" }, - { "vieo-fe", { NULL }, 3245, "udp" }, - { "dvt-system", { NULL }, 3246, "tcp" }, - { "dvt-system", { NULL }, 3246, "udp" }, - { "dvt-data", { NULL }, 3247, "tcp" }, - { "dvt-data", { NULL }, 3247, "udp" }, - { "procos-lm", { NULL }, 3248, "tcp" }, - { "procos-lm", { NULL }, 3248, "udp" }, - { "ssp", { NULL }, 3249, "tcp" }, - { "ssp", { NULL }, 3249, "udp" }, - { "hicp", { NULL }, 3250, "tcp" }, - { "hicp", { NULL }, 3250, "udp" }, - { "sysscanner", { NULL }, 3251, "tcp" }, - { "sysscanner", { NULL }, 3251, "udp" }, - { "dhe", { NULL }, 3252, "tcp" }, - { "dhe", { NULL }, 3252, "udp" }, - { "pda-data", { NULL }, 3253, "tcp" }, - { "pda-data", { NULL }, 3253, "udp" }, - { "pda-sys", { NULL }, 3254, "tcp" }, - { "pda-sys", { NULL }, 3254, "udp" }, - { "semaphore", { NULL }, 3255, "tcp" }, - { "semaphore", { NULL }, 3255, "udp" }, - { "cpqrpm-agent", { NULL }, 3256, "tcp" }, - { "cpqrpm-agent", { NULL }, 3256, "udp" }, - { "cpqrpm-server", { NULL }, 3257, "tcp" }, - { "cpqrpm-server", { NULL }, 3257, "udp" }, - { "ivecon-port", { NULL }, 3258, "tcp" }, - { "ivecon-port", { NULL }, 3258, "udp" }, - { "epncdp2", { NULL }, 3259, "tcp" }, - { "epncdp2", { NULL }, 3259, "udp" }, - { "iscsi-target", { NULL }, 3260, "tcp" }, - { "iscsi-target", { NULL }, 3260, "udp" }, - { "winshadow", { NULL }, 3261, "tcp" }, - { "winshadow", { NULL }, 3261, "udp" }, - { "necp", { NULL }, 3262, "tcp" }, - { "necp", { NULL }, 3262, "udp" }, - { "ecolor-imager", { NULL }, 3263, "tcp" }, - { "ecolor-imager", { NULL }, 3263, "udp" }, - { "ccmail", { NULL }, 3264, "tcp" }, - { "ccmail", { NULL }, 3264, "udp" }, - { "altav-tunnel", { NULL }, 3265, "tcp" }, - { "altav-tunnel", { NULL }, 3265, "udp" }, - { "ns-cfg-server", { NULL }, 3266, "tcp" }, - { "ns-cfg-server", { NULL }, 3266, "udp" }, - { "ibm-dial-out", { NULL }, 3267, "tcp" }, - { "ibm-dial-out", { NULL }, 3267, "udp" }, - { "msft-gc", { NULL }, 3268, "tcp" }, - { "msft-gc", { NULL }, 3268, "udp" }, - { "msft-gc-ssl", { NULL }, 3269, "tcp" }, - { "msft-gc-ssl", { NULL }, 3269, "udp" }, - { "verismart", { NULL }, 3270, "tcp" }, - { "verismart", { NULL }, 3270, "udp" }, - { "csoft-prev", { NULL }, 3271, "tcp" }, - { "csoft-prev", { NULL }, 3271, "udp" }, - { "user-manager", { NULL }, 3272, "tcp" }, - { "user-manager", { NULL }, 3272, "udp" }, - { "sxmp", { NULL }, 3273, "tcp" }, - { "sxmp", { NULL }, 3273, "udp" }, - { "ordinox-server", { NULL }, 3274, "tcp" }, - { "ordinox-server", { NULL }, 3274, "udp" }, - { "samd", { NULL }, 3275, "tcp" }, - { "samd", { NULL }, 3275, "udp" }, - { "maxim-asics", { NULL }, 3276, "tcp" }, - { "maxim-asics", { NULL }, 3276, "udp" }, - { "awg-proxy", { NULL }, 3277, "tcp" }, - { "awg-proxy", { NULL }, 3277, "udp" }, - { "lkcmserver", { NULL }, 3278, "tcp" }, - { "lkcmserver", { NULL }, 3278, "udp" }, - { "admind", { NULL }, 3279, "tcp" }, - { "admind", { NULL }, 3279, "udp" }, - { "vs-server", { NULL }, 3280, "tcp" }, - { "vs-server", { NULL }, 3280, "udp" }, - { "sysopt", { NULL }, 3281, "tcp" }, - { "sysopt", { NULL }, 3281, "udp" }, - { "datusorb", { NULL }, 3282, "tcp" }, - { "datusorb", { NULL }, 3282, "udp" }, - { "net-assistant", { NULL }, 3283, "tcp" }, - { "net-assistant", { NULL }, 3283, "udp" }, - { "4talk", { NULL }, 3284, "tcp" }, - { "4talk", { NULL }, 3284, "udp" }, - { "plato", { NULL }, 3285, "tcp" }, - { "plato", { NULL }, 3285, "udp" }, - { "e-net", { NULL }, 3286, "tcp" }, - { "e-net", { NULL }, 3286, "udp" }, - { "directvdata", { NULL }, 3287, "tcp" }, - { "directvdata", { NULL }, 3287, "udp" }, - { "cops", { NULL }, 3288, "tcp" }, - { "cops", { NULL }, 3288, "udp" }, - { "enpc", { NULL }, 3289, "tcp" }, - { "enpc", { NULL }, 3289, "udp" }, - { "caps-lm", { NULL }, 3290, "tcp" }, - { "caps-lm", { NULL }, 3290, "udp" }, - { "sah-lm", { NULL }, 3291, "tcp" }, - { "sah-lm", { NULL }, 3291, "udp" }, - { "cart-o-rama", { NULL }, 3292, "tcp" }, - { "cart-o-rama", { NULL }, 3292, "udp" }, - { "fg-fps", { NULL }, 3293, "tcp" }, - { "fg-fps", { NULL }, 3293, "udp" }, - { "fg-gip", { NULL }, 3294, "tcp" }, - { "fg-gip", { NULL }, 3294, "udp" }, - { "dyniplookup", { NULL }, 3295, "tcp" }, - { "dyniplookup", { NULL }, 3295, "udp" }, - { "rib-slm", { NULL }, 3296, "tcp" }, - { "rib-slm", { NULL }, 3296, "udp" }, - { "cytel-lm", { NULL }, 3297, "tcp" }, - { "cytel-lm", { NULL }, 3297, "udp" }, - { "deskview", { NULL }, 3298, "tcp" }, - { "deskview", { NULL }, 3298, "udp" }, - { "pdrncs", { NULL }, 3299, "tcp" }, - { "pdrncs", { NULL }, 3299, "udp" }, - { "mcs-fastmail", { NULL }, 3302, "tcp" }, - { "mcs-fastmail", { NULL }, 3302, "udp" }, - { "opsession-clnt", { NULL }, 3303, "tcp" }, - { "opsession-clnt", { NULL }, 3303, "udp" }, - { "opsession-srvr", { NULL }, 3304, "tcp" }, - { "opsession-srvr", { NULL }, 3304, "udp" }, - { "odette-ftp", { NULL }, 3305, "tcp" }, - { "odette-ftp", { NULL }, 3305, "udp" }, - { "mysql", { NULL }, 3306, "tcp" }, - { "mysql", { NULL }, 3306, "udp" }, - { "opsession-prxy", { NULL }, 3307, "tcp" }, - { "opsession-prxy", { NULL }, 3307, "udp" }, - { "tns-server", { NULL }, 3308, "tcp" }, - { "tns-server", { NULL }, 3308, "udp" }, - { "tns-adv", { NULL }, 3309, "tcp" }, - { "tns-adv", { NULL }, 3309, "udp" }, - { "dyna-access", { NULL }, 3310, "tcp" }, - { "dyna-access", { NULL }, 3310, "udp" }, - { "mcns-tel-ret", { NULL }, 3311, "tcp" }, - { "mcns-tel-ret", { NULL }, 3311, "udp" }, - { "appman-server", { NULL }, 3312, "tcp" }, - { "appman-server", { NULL }, 3312, "udp" }, - { "uorb", { NULL }, 3313, "tcp" }, - { "uorb", { NULL }, 3313, "udp" }, - { "uohost", { NULL }, 3314, "tcp" }, - { "uohost", { NULL }, 3314, "udp" }, - { "cdid", { NULL }, 3315, "tcp" }, - { "cdid", { NULL }, 3315, "udp" }, - { "aicc-cmi", { NULL }, 3316, "tcp" }, - { "aicc-cmi", { NULL }, 3316, "udp" }, - { "vsaiport", { NULL }, 3317, "tcp" }, - { "vsaiport", { NULL }, 3317, "udp" }, - { "ssrip", { NULL }, 3318, "tcp" }, - { "ssrip", { NULL }, 3318, "udp" }, - { "sdt-lmd", { NULL }, 3319, "tcp" }, - { "sdt-lmd", { NULL }, 3319, "udp" }, - { "officelink2000", { NULL }, 3320, "tcp" }, - { "officelink2000", { NULL }, 3320, "udp" }, - { "vnsstr", { NULL }, 3321, "tcp" }, - { "vnsstr", { NULL }, 3321, "udp" }, - { "sftu", { NULL }, 3326, "tcp" }, - { "sftu", { NULL }, 3326, "udp" }, - { "bbars", { NULL }, 3327, "tcp" }, - { "bbars", { NULL }, 3327, "udp" }, - { "egptlm", { NULL }, 3328, "tcp" }, - { "egptlm", { NULL }, 3328, "udp" }, - { "hp-device-disc", { NULL }, 3329, "tcp" }, - { "hp-device-disc", { NULL }, 3329, "udp" }, - { "mcs-calypsoicf", { NULL }, 3330, "tcp" }, - { "mcs-calypsoicf", { NULL }, 3330, "udp" }, - { "mcs-messaging", { NULL }, 3331, "tcp" }, - { "mcs-messaging", { NULL }, 3331, "udp" }, - { "mcs-mailsvr", { NULL }, 3332, "tcp" }, - { "mcs-mailsvr", { NULL }, 3332, "udp" }, - { "dec-notes", { NULL }, 3333, "tcp" }, - { "dec-notes", { NULL }, 3333, "udp" }, - { "directv-web", { NULL }, 3334, "tcp" }, - { "directv-web", { NULL }, 3334, "udp" }, - { "directv-soft", { NULL }, 3335, "tcp" }, - { "directv-soft", { NULL }, 3335, "udp" }, - { "directv-tick", { NULL }, 3336, "tcp" }, - { "directv-tick", { NULL }, 3336, "udp" }, - { "directv-catlg", { NULL }, 3337, "tcp" }, - { "directv-catlg", { NULL }, 3337, "udp" }, - { "anet-b", { NULL }, 3338, "tcp" }, - { "anet-b", { NULL }, 3338, "udp" }, - { "anet-l", { NULL }, 3339, "tcp" }, - { "anet-l", { NULL }, 3339, "udp" }, - { "anet-m", { NULL }, 3340, "tcp" }, - { "anet-m", { NULL }, 3340, "udp" }, - { "anet-h", { NULL }, 3341, "tcp" }, - { "anet-h", { NULL }, 3341, "udp" }, - { "webtie", { NULL }, 3342, "tcp" }, - { "webtie", { NULL }, 3342, "udp" }, - { "ms-cluster-net", { NULL }, 3343, "tcp" }, - { "ms-cluster-net", { NULL }, 3343, "udp" }, - { "bnt-manager", { NULL }, 3344, "tcp" }, - { "bnt-manager", { NULL }, 3344, "udp" }, - { "influence", { NULL }, 3345, "tcp" }, - { "influence", { NULL }, 3345, "udp" }, - { "trnsprntproxy", { NULL }, 3346, "tcp" }, - { "trnsprntproxy", { NULL }, 3346, "udp" }, - { "phoenix-rpc", { NULL }, 3347, "tcp" }, - { "phoenix-rpc", { NULL }, 3347, "udp" }, - { "pangolin-laser", { NULL }, 3348, "tcp" }, - { "pangolin-laser", { NULL }, 3348, "udp" }, - { "chevinservices", { NULL }, 3349, "tcp" }, - { "chevinservices", { NULL }, 3349, "udp" }, - { "findviatv", { NULL }, 3350, "tcp" }, - { "findviatv", { NULL }, 3350, "udp" }, - { "btrieve", { NULL }, 3351, "tcp" }, - { "btrieve", { NULL }, 3351, "udp" }, - { "ssql", { NULL }, 3352, "tcp" }, - { "ssql", { NULL }, 3352, "udp" }, - { "fatpipe", { NULL }, 3353, "tcp" }, - { "fatpipe", { NULL }, 3353, "udp" }, - { "suitjd", { NULL }, 3354, "tcp" }, - { "suitjd", { NULL }, 3354, "udp" }, - { "ordinox-dbase", { NULL }, 3355, "tcp" }, - { "ordinox-dbase", { NULL }, 3355, "udp" }, - { "upnotifyps", { NULL }, 3356, "tcp" }, - { "upnotifyps", { NULL }, 3356, "udp" }, - { "adtech-test", { NULL }, 3357, "tcp" }, - { "adtech-test", { NULL }, 3357, "udp" }, - { "mpsysrmsvr", { NULL }, 3358, "tcp" }, - { "mpsysrmsvr", { NULL }, 3358, "udp" }, - { "wg-netforce", { NULL }, 3359, "tcp" }, - { "wg-netforce", { NULL }, 3359, "udp" }, - { "kv-server", { NULL }, 3360, "tcp" }, - { "kv-server", { NULL }, 3360, "udp" }, - { "kv-agent", { NULL }, 3361, "tcp" }, - { "kv-agent", { NULL }, 3361, "udp" }, - { "dj-ilm", { NULL }, 3362, "tcp" }, - { "dj-ilm", { NULL }, 3362, "udp" }, - { "nati-vi-server", { NULL }, 3363, "tcp" }, - { "nati-vi-server", { NULL }, 3363, "udp" }, - { "creativeserver", { NULL }, 3364, "tcp" }, - { "creativeserver", { NULL }, 3364, "udp" }, - { "contentserver", { NULL }, 3365, "tcp" }, - { "contentserver", { NULL }, 3365, "udp" }, - { "creativepartnr", { NULL }, 3366, "tcp" }, - { "creativepartnr", { NULL }, 3366, "udp" }, - { "tip2", { NULL }, 3372, "tcp" }, - { "tip2", { NULL }, 3372, "udp" }, - { "lavenir-lm", { NULL }, 3373, "tcp" }, - { "lavenir-lm", { NULL }, 3373, "udp" }, - { "cluster-disc", { NULL }, 3374, "tcp" }, - { "cluster-disc", { NULL }, 3374, "udp" }, - { "vsnm-agent", { NULL }, 3375, "tcp" }, - { "vsnm-agent", { NULL }, 3375, "udp" }, - { "cdbroker", { NULL }, 3376, "tcp" }, - { "cdbroker", { NULL }, 3376, "udp" }, - { "cogsys-lm", { NULL }, 3377, "tcp" }, - { "cogsys-lm", { NULL }, 3377, "udp" }, - { "wsicopy", { NULL }, 3378, "tcp" }, - { "wsicopy", { NULL }, 3378, "udp" }, - { "socorfs", { NULL }, 3379, "tcp" }, - { "socorfs", { NULL }, 3379, "udp" }, - { "sns-channels", { NULL }, 3380, "tcp" }, - { "sns-channels", { NULL }, 3380, "udp" }, - { "geneous", { NULL }, 3381, "tcp" }, - { "geneous", { NULL }, 3381, "udp" }, - { "fujitsu-neat", { NULL }, 3382, "tcp" }, - { "fujitsu-neat", { NULL }, 3382, "udp" }, - { "esp-lm", { NULL }, 3383, "tcp" }, - { "esp-lm", { NULL }, 3383, "udp" }, - { "hp-clic", { NULL }, 3384, "tcp" }, - { "hp-clic", { NULL }, 3384, "udp" }, - { "qnxnetman", { NULL }, 3385, "tcp" }, - { "qnxnetman", { NULL }, 3385, "udp" }, - { "gprs-data", { NULL }, 3386, "tcp" }, - { "gprs-sig", { NULL }, 3386, "udp" }, - { "backroomnet", { NULL }, 3387, "tcp" }, - { "backroomnet", { NULL }, 3387, "udp" }, - { "cbserver", { NULL }, 3388, "tcp" }, - { "cbserver", { NULL }, 3388, "udp" }, - { "ms-wbt-server", { NULL }, 3389, "tcp" }, - { "ms-wbt-server", { NULL }, 3389, "udp" }, - { "dsc", { NULL }, 3390, "tcp" }, - { "dsc", { NULL }, 3390, "udp" }, - { "savant", { NULL }, 3391, "tcp" }, - { "savant", { NULL }, 3391, "udp" }, - { "efi-lm", { NULL }, 3392, "tcp" }, - { "efi-lm", { NULL }, 3392, "udp" }, - { "d2k-tapestry1", { NULL }, 3393, "tcp" }, - { "d2k-tapestry1", { NULL }, 3393, "udp" }, - { "d2k-tapestry2", { NULL }, 3394, "tcp" }, - { "d2k-tapestry2", { NULL }, 3394, "udp" }, - { "dyna-lm", { NULL }, 3395, "tcp" }, - { "dyna-lm", { NULL }, 3395, "udp" }, - { "printer_agent", { NULL }, 3396, "tcp" }, - { "printer_agent", { NULL }, 3396, "udp" }, - { "cloanto-lm", { NULL }, 3397, "tcp" }, - { "cloanto-lm", { NULL }, 3397, "udp" }, - { "mercantile", { NULL }, 3398, "tcp" }, - { "mercantile", { NULL }, 3398, "udp" }, - { "csms", { NULL }, 3399, "tcp" }, - { "csms", { NULL }, 3399, "udp" }, - { "csms2", { NULL }, 3400, "tcp" }, - { "csms2", { NULL }, 3400, "udp" }, - { "filecast", { NULL }, 3401, "tcp" }, - { "filecast", { NULL }, 3401, "udp" }, - { "fxaengine-net", { NULL }, 3402, "tcp" }, - { "fxaengine-net", { NULL }, 3402, "udp" }, - { "nokia-ann-ch1", { NULL }, 3405, "tcp" }, - { "nokia-ann-ch1", { NULL }, 3405, "udp" }, - { "nokia-ann-ch2", { NULL }, 3406, "tcp" }, - { "nokia-ann-ch2", { NULL }, 3406, "udp" }, - { "ldap-admin", { NULL }, 3407, "tcp" }, - { "ldap-admin", { NULL }, 3407, "udp" }, - { "BESApi", { NULL }, 3408, "tcp" }, - { "BESApi", { NULL }, 3408, "udp" }, - { "networklens", { NULL }, 3409, "tcp" }, - { "networklens", { NULL }, 3409, "udp" }, - { "networklenss", { NULL }, 3410, "tcp" }, - { "networklenss", { NULL }, 3410, "udp" }, - { "biolink-auth", { NULL }, 3411, "tcp" }, - { "biolink-auth", { NULL }, 3411, "udp" }, - { "xmlblaster", { NULL }, 3412, "tcp" }, - { "xmlblaster", { NULL }, 3412, "udp" }, - { "svnet", { NULL }, 3413, "tcp" }, - { "svnet", { NULL }, 3413, "udp" }, - { "wip-port", { NULL }, 3414, "tcp" }, - { "wip-port", { NULL }, 3414, "udp" }, - { "bcinameservice", { NULL }, 3415, "tcp" }, - { "bcinameservice", { NULL }, 3415, "udp" }, - { "commandport", { NULL }, 3416, "tcp" }, - { "commandport", { NULL }, 3416, "udp" }, - { "csvr", { NULL }, 3417, "tcp" }, - { "csvr", { NULL }, 3417, "udp" }, - { "rnmap", { NULL }, 3418, "tcp" }, - { "rnmap", { NULL }, 3418, "udp" }, - { "softaudit", { NULL }, 3419, "tcp" }, - { "softaudit", { NULL }, 3419, "udp" }, - { "ifcp-port", { NULL }, 3420, "tcp" }, - { "ifcp-port", { NULL }, 3420, "udp" }, - { "bmap", { NULL }, 3421, "tcp" }, - { "bmap", { NULL }, 3421, "udp" }, - { "rusb-sys-port", { NULL }, 3422, "tcp" }, - { "rusb-sys-port", { NULL }, 3422, "udp" }, - { "xtrm", { NULL }, 3423, "tcp" }, - { "xtrm", { NULL }, 3423, "udp" }, - { "xtrms", { NULL }, 3424, "tcp" }, - { "xtrms", { NULL }, 3424, "udp" }, - { "agps-port", { NULL }, 3425, "tcp" }, - { "agps-port", { NULL }, 3425, "udp" }, - { "arkivio", { NULL }, 3426, "tcp" }, - { "arkivio", { NULL }, 3426, "udp" }, - { "websphere-snmp", { NULL }, 3427, "tcp" }, - { "websphere-snmp", { NULL }, 3427, "udp" }, - { "twcss", { NULL }, 3428, "tcp" }, - { "twcss", { NULL }, 3428, "udp" }, - { "gcsp", { NULL }, 3429, "tcp" }, - { "gcsp", { NULL }, 3429, "udp" }, - { "ssdispatch", { NULL }, 3430, "tcp" }, - { "ssdispatch", { NULL }, 3430, "udp" }, - { "ndl-als", { NULL }, 3431, "tcp" }, - { "ndl-als", { NULL }, 3431, "udp" }, - { "osdcp", { NULL }, 3432, "tcp" }, - { "osdcp", { NULL }, 3432, "udp" }, - { "alta-smp", { NULL }, 3433, "tcp" }, - { "alta-smp", { NULL }, 3433, "udp" }, - { "opencm", { NULL }, 3434, "tcp" }, - { "opencm", { NULL }, 3434, "udp" }, - { "pacom", { NULL }, 3435, "tcp" }, - { "pacom", { NULL }, 3435, "udp" }, - { "gc-config", { NULL }, 3436, "tcp" }, - { "gc-config", { NULL }, 3436, "udp" }, - { "autocueds", { NULL }, 3437, "tcp" }, - { "autocueds", { NULL }, 3437, "udp" }, - { "spiral-admin", { NULL }, 3438, "tcp" }, - { "spiral-admin", { NULL }, 3438, "udp" }, - { "hri-port", { NULL }, 3439, "tcp" }, - { "hri-port", { NULL }, 3439, "udp" }, - { "ans-console", { NULL }, 3440, "tcp" }, - { "ans-console", { NULL }, 3440, "udp" }, - { "connect-client", { NULL }, 3441, "tcp" }, - { "connect-client", { NULL }, 3441, "udp" }, - { "connect-server", { NULL }, 3442, "tcp" }, - { "connect-server", { NULL }, 3442, "udp" }, - { "ov-nnm-websrv", { NULL }, 3443, "tcp" }, - { "ov-nnm-websrv", { NULL }, 3443, "udp" }, - { "denali-server", { NULL }, 3444, "tcp" }, - { "denali-server", { NULL }, 3444, "udp" }, - { "monp", { NULL }, 3445, "tcp" }, - { "monp", { NULL }, 3445, "udp" }, - { "3comfaxrpc", { NULL }, 3446, "tcp" }, - { "3comfaxrpc", { NULL }, 3446, "udp" }, - { "directnet", { NULL }, 3447, "tcp" }, - { "directnet", { NULL }, 3447, "udp" }, - { "dnc-port", { NULL }, 3448, "tcp" }, - { "dnc-port", { NULL }, 3448, "udp" }, - { "hotu-chat", { NULL }, 3449, "tcp" }, - { "hotu-chat", { NULL }, 3449, "udp" }, - { "castorproxy", { NULL }, 3450, "tcp" }, - { "castorproxy", { NULL }, 3450, "udp" }, - { "asam", { NULL }, 3451, "tcp" }, - { "asam", { NULL }, 3451, "udp" }, - { "sabp-signal", { NULL }, 3452, "tcp" }, - { "sabp-signal", { NULL }, 3452, "udp" }, - { "pscupd", { NULL }, 3453, "tcp" }, - { "pscupd", { NULL }, 3453, "udp" }, - { "mira", { NULL }, 3454, "tcp" }, - { "prsvp", { NULL }, 3455, "tcp" }, - { "prsvp", { NULL }, 3455, "udp" }, - { "vat", { NULL }, 3456, "tcp" }, - { "vat", { NULL }, 3456, "udp" }, - { "vat-control", { NULL }, 3457, "tcp" }, - { "vat-control", { NULL }, 3457, "udp" }, - { "d3winosfi", { NULL }, 3458, "tcp" }, - { "d3winosfi", { NULL }, 3458, "udp" }, - { "integral", { NULL }, 3459, "tcp" }, - { "integral", { NULL }, 3459, "udp" }, - { "edm-manager", { NULL }, 3460, "tcp" }, - { "edm-manager", { NULL }, 3460, "udp" }, - { "edm-stager", { NULL }, 3461, "tcp" }, - { "edm-stager", { NULL }, 3461, "udp" }, - { "edm-std-notify", { NULL }, 3462, "tcp" }, - { "edm-std-notify", { NULL }, 3462, "udp" }, - { "edm-adm-notify", { NULL }, 3463, "tcp" }, - { "edm-adm-notify", { NULL }, 3463, "udp" }, - { "edm-mgr-sync", { NULL }, 3464, "tcp" }, - { "edm-mgr-sync", { NULL }, 3464, "udp" }, - { "edm-mgr-cntrl", { NULL }, 3465, "tcp" }, - { "edm-mgr-cntrl", { NULL }, 3465, "udp" }, - { "workflow", { NULL }, 3466, "tcp" }, - { "workflow", { NULL }, 3466, "udp" }, - { "rcst", { NULL }, 3467, "tcp" }, - { "rcst", { NULL }, 3467, "udp" }, - { "ttcmremotectrl", { NULL }, 3468, "tcp" }, - { "ttcmremotectrl", { NULL }, 3468, "udp" }, - { "pluribus", { NULL }, 3469, "tcp" }, - { "pluribus", { NULL }, 3469, "udp" }, - { "jt400", { NULL }, 3470, "tcp" }, - { "jt400", { NULL }, 3470, "udp" }, - { "jt400-ssl", { NULL }, 3471, "tcp" }, - { "jt400-ssl", { NULL }, 3471, "udp" }, - { "jaugsremotec-1", { NULL }, 3472, "tcp" }, - { "jaugsremotec-1", { NULL }, 3472, "udp" }, - { "jaugsremotec-2", { NULL }, 3473, "tcp" }, - { "jaugsremotec-2", { NULL }, 3473, "udp" }, - { "ttntspauto", { NULL }, 3474, "tcp" }, - { "ttntspauto", { NULL }, 3474, "udp" }, - { "genisar-port", { NULL }, 3475, "tcp" }, - { "genisar-port", { NULL }, 3475, "udp" }, - { "nppmp", { NULL }, 3476, "tcp" }, - { "nppmp", { NULL }, 3476, "udp" }, - { "ecomm", { NULL }, 3477, "tcp" }, - { "ecomm", { NULL }, 3477, "udp" }, - { "stun", { NULL }, 3478, "tcp" }, - { "stun", { NULL }, 3478, "udp" }, - { "turn", { NULL }, 3478, "tcp" }, - { "turn", { NULL }, 3478, "udp" }, - { "stun-behavior", { NULL }, 3478, "tcp" }, - { "stun-behavior", { NULL }, 3478, "udp" }, - { "twrpc", { NULL }, 3479, "tcp" }, - { "twrpc", { NULL }, 3479, "udp" }, - { "plethora", { NULL }, 3480, "tcp" }, - { "plethora", { NULL }, 3480, "udp" }, - { "cleanerliverc", { NULL }, 3481, "tcp" }, - { "cleanerliverc", { NULL }, 3481, "udp" }, - { "vulture", { NULL }, 3482, "tcp" }, - { "vulture", { NULL }, 3482, "udp" }, - { "slim-devices", { NULL }, 3483, "tcp" }, - { "slim-devices", { NULL }, 3483, "udp" }, - { "gbs-stp", { NULL }, 3484, "tcp" }, - { "gbs-stp", { NULL }, 3484, "udp" }, - { "celatalk", { NULL }, 3485, "tcp" }, - { "celatalk", { NULL }, 3485, "udp" }, - { "ifsf-hb-port", { NULL }, 3486, "tcp" }, - { "ifsf-hb-port", { NULL }, 3486, "udp" }, - { "ltctcp", { NULL }, 3487, "tcp" }, - { "ltcudp", { NULL }, 3487, "udp" }, - { "fs-rh-srv", { NULL }, 3488, "tcp" }, - { "fs-rh-srv", { NULL }, 3488, "udp" }, - { "dtp-dia", { NULL }, 3489, "tcp" }, - { "dtp-dia", { NULL }, 3489, "udp" }, - { "colubris", { NULL }, 3490, "tcp" }, - { "colubris", { NULL }, 3490, "udp" }, - { "swr-port", { NULL }, 3491, "tcp" }, - { "swr-port", { NULL }, 3491, "udp" }, - { "tvdumtray-port", { NULL }, 3492, "tcp" }, - { "tvdumtray-port", { NULL }, 3492, "udp" }, - { "nut", { NULL }, 3493, "tcp" }, - { "nut", { NULL }, 3493, "udp" }, - { "ibm3494", { NULL }, 3494, "tcp" }, - { "ibm3494", { NULL }, 3494, "udp" }, - { "seclayer-tcp", { NULL }, 3495, "tcp" }, - { "seclayer-tcp", { NULL }, 3495, "udp" }, - { "seclayer-tls", { NULL }, 3496, "tcp" }, - { "seclayer-tls", { NULL }, 3496, "udp" }, - { "ipether232port", { NULL }, 3497, "tcp" }, - { "ipether232port", { NULL }, 3497, "udp" }, - { "dashpas-port", { NULL }, 3498, "tcp" }, - { "dashpas-port", { NULL }, 3498, "udp" }, - { "sccip-media", { NULL }, 3499, "tcp" }, - { "sccip-media", { NULL }, 3499, "udp" }, - { "rtmp-port", { NULL }, 3500, "tcp" }, - { "rtmp-port", { NULL }, 3500, "udp" }, - { "isoft-p2p", { NULL }, 3501, "tcp" }, - { "isoft-p2p", { NULL }, 3501, "udp" }, - { "avinstalldisc", { NULL }, 3502, "tcp" }, - { "avinstalldisc", { NULL }, 3502, "udp" }, - { "lsp-ping", { NULL }, 3503, "tcp" }, - { "lsp-ping", { NULL }, 3503, "udp" }, - { "ironstorm", { NULL }, 3504, "tcp" }, - { "ironstorm", { NULL }, 3504, "udp" }, - { "ccmcomm", { NULL }, 3505, "tcp" }, - { "ccmcomm", { NULL }, 3505, "udp" }, - { "apc-3506", { NULL }, 3506, "tcp" }, - { "apc-3506", { NULL }, 3506, "udp" }, - { "nesh-broker", { NULL }, 3507, "tcp" }, - { "nesh-broker", { NULL }, 3507, "udp" }, - { "interactionweb", { NULL }, 3508, "tcp" }, - { "interactionweb", { NULL }, 3508, "udp" }, - { "vt-ssl", { NULL }, 3509, "tcp" }, - { "vt-ssl", { NULL }, 3509, "udp" }, - { "xss-port", { NULL }, 3510, "tcp" }, - { "xss-port", { NULL }, 3510, "udp" }, - { "webmail-2", { NULL }, 3511, "tcp" }, - { "webmail-2", { NULL }, 3511, "udp" }, - { "aztec", { NULL }, 3512, "tcp" }, - { "aztec", { NULL }, 3512, "udp" }, - { "arcpd", { NULL }, 3513, "tcp" }, - { "arcpd", { NULL }, 3513, "udp" }, - { "must-p2p", { NULL }, 3514, "tcp" }, - { "must-p2p", { NULL }, 3514, "udp" }, - { "must-backplane", { NULL }, 3515, "tcp" }, - { "must-backplane", { NULL }, 3515, "udp" }, - { "smartcard-port", { NULL }, 3516, "tcp" }, - { "smartcard-port", { NULL }, 3516, "udp" }, - { "802-11-iapp", { NULL }, 3517, "tcp" }, - { "802-11-iapp", { NULL }, 3517, "udp" }, - { "artifact-msg", { NULL }, 3518, "tcp" }, - { "artifact-msg", { NULL }, 3518, "udp" }, - { "nvmsgd", { NULL }, 3519, "tcp" }, - { "galileo", { NULL }, 3519, "udp" }, - { "galileolog", { NULL }, 3520, "tcp" }, - { "galileolog", { NULL }, 3520, "udp" }, - { "mc3ss", { NULL }, 3521, "tcp" }, - { "mc3ss", { NULL }, 3521, "udp" }, - { "nssocketport", { NULL }, 3522, "tcp" }, - { "nssocketport", { NULL }, 3522, "udp" }, - { "odeumservlink", { NULL }, 3523, "tcp" }, - { "odeumservlink", { NULL }, 3523, "udp" }, - { "ecmport", { NULL }, 3524, "tcp" }, - { "ecmport", { NULL }, 3524, "udp" }, - { "eisport", { NULL }, 3525, "tcp" }, - { "eisport", { NULL }, 3525, "udp" }, - { "starquiz-port", { NULL }, 3526, "tcp" }, - { "starquiz-port", { NULL }, 3526, "udp" }, - { "beserver-msg-q", { NULL }, 3527, "tcp" }, - { "beserver-msg-q", { NULL }, 3527, "udp" }, - { "jboss-iiop", { NULL }, 3528, "tcp" }, - { "jboss-iiop", { NULL }, 3528, "udp" }, - { "jboss-iiop-ssl", { NULL }, 3529, "tcp" }, - { "jboss-iiop-ssl", { NULL }, 3529, "udp" }, - { "gf", { NULL }, 3530, "tcp" }, - { "gf", { NULL }, 3530, "udp" }, - { "joltid", { NULL }, 3531, "tcp" }, - { "joltid", { NULL }, 3531, "udp" }, - { "raven-rmp", { NULL }, 3532, "tcp" }, - { "raven-rmp", { NULL }, 3532, "udp" }, - { "raven-rdp", { NULL }, 3533, "tcp" }, - { "raven-rdp", { NULL }, 3533, "udp" }, - { "urld-port", { NULL }, 3534, "tcp" }, - { "urld-port", { NULL }, 3534, "udp" }, - { "ms-la", { NULL }, 3535, "tcp" }, - { "ms-la", { NULL }, 3535, "udp" }, - { "snac", { NULL }, 3536, "tcp" }, - { "snac", { NULL }, 3536, "udp" }, - { "ni-visa-remote", { NULL }, 3537, "tcp" }, - { "ni-visa-remote", { NULL }, 3537, "udp" }, - { "ibm-diradm", { NULL }, 3538, "tcp" }, - { "ibm-diradm", { NULL }, 3538, "udp" }, - { "ibm-diradm-ssl", { NULL }, 3539, "tcp" }, - { "ibm-diradm-ssl", { NULL }, 3539, "udp" }, - { "pnrp-port", { NULL }, 3540, "tcp" }, - { "pnrp-port", { NULL }, 3540, "udp" }, - { "voispeed-port", { NULL }, 3541, "tcp" }, - { "voispeed-port", { NULL }, 3541, "udp" }, - { "hacl-monitor", { NULL }, 3542, "tcp" }, - { "hacl-monitor", { NULL }, 3542, "udp" }, - { "qftest-lookup", { NULL }, 3543, "tcp" }, - { "qftest-lookup", { NULL }, 3543, "udp" }, - { "teredo", { NULL }, 3544, "tcp" }, - { "teredo", { NULL }, 3544, "udp" }, - { "camac", { NULL }, 3545, "tcp" }, - { "camac", { NULL }, 3545, "udp" }, - { "symantec-sim", { NULL }, 3547, "tcp" }, - { "symantec-sim", { NULL }, 3547, "udp" }, - { "interworld", { NULL }, 3548, "tcp" }, - { "interworld", { NULL }, 3548, "udp" }, - { "tellumat-nms", { NULL }, 3549, "tcp" }, - { "tellumat-nms", { NULL }, 3549, "udp" }, - { "ssmpp", { NULL }, 3550, "tcp" }, - { "ssmpp", { NULL }, 3550, "udp" }, - { "apcupsd", { NULL }, 3551, "tcp" }, - { "apcupsd", { NULL }, 3551, "udp" }, - { "taserver", { NULL }, 3552, "tcp" }, - { "taserver", { NULL }, 3552, "udp" }, - { "rbr-discovery", { NULL }, 3553, "tcp" }, - { "rbr-discovery", { NULL }, 3553, "udp" }, - { "questnotify", { NULL }, 3554, "tcp" }, - { "questnotify", { NULL }, 3554, "udp" }, - { "razor", { NULL }, 3555, "tcp" }, - { "razor", { NULL }, 3555, "udp" }, - { "sky-transport", { NULL }, 3556, "tcp" }, - { "sky-transport", { NULL }, 3556, "udp" }, - { "personalos-001", { NULL }, 3557, "tcp" }, - { "personalos-001", { NULL }, 3557, "udp" }, - { "mcp-port", { NULL }, 3558, "tcp" }, - { "mcp-port", { NULL }, 3558, "udp" }, - { "cctv-port", { NULL }, 3559, "tcp" }, - { "cctv-port", { NULL }, 3559, "udp" }, - { "iniserve-port", { NULL }, 3560, "tcp" }, - { "iniserve-port", { NULL }, 3560, "udp" }, - { "bmc-onekey", { NULL }, 3561, "tcp" }, - { "bmc-onekey", { NULL }, 3561, "udp" }, - { "sdbproxy", { NULL }, 3562, "tcp" }, - { "sdbproxy", { NULL }, 3562, "udp" }, - { "watcomdebug", { NULL }, 3563, "tcp" }, - { "watcomdebug", { NULL }, 3563, "udp" }, - { "esimport", { NULL }, 3564, "tcp" }, - { "esimport", { NULL }, 3564, "udp" }, - { "m2pa", { NULL }, 3565, "tcp" }, - { "m2pa", { NULL }, 3565, "sctp" }, - { "quest-data-hub", { NULL }, 3566, "tcp" }, - { "oap", { NULL }, 3567, "tcp" }, - { "oap", { NULL }, 3567, "udp" }, - { "oap-s", { NULL }, 3568, "tcp" }, - { "oap-s", { NULL }, 3568, "udp" }, - { "mbg-ctrl", { NULL }, 3569, "tcp" }, - { "mbg-ctrl", { NULL }, 3569, "udp" }, - { "mccwebsvr-port", { NULL }, 3570, "tcp" }, - { "mccwebsvr-port", { NULL }, 3570, "udp" }, - { "megardsvr-port", { NULL }, 3571, "tcp" }, - { "megardsvr-port", { NULL }, 3571, "udp" }, - { "megaregsvrport", { NULL }, 3572, "tcp" }, - { "megaregsvrport", { NULL }, 3572, "udp" }, - { "tag-ups-1", { NULL }, 3573, "tcp" }, - { "tag-ups-1", { NULL }, 3573, "udp" }, - { "dmaf-server", { NULL }, 3574, "tcp" }, - { "dmaf-caster", { NULL }, 3574, "udp" }, - { "ccm-port", { NULL }, 3575, "tcp" }, - { "ccm-port", { NULL }, 3575, "udp" }, - { "cmc-port", { NULL }, 3576, "tcp" }, - { "cmc-port", { NULL }, 3576, "udp" }, - { "config-port", { NULL }, 3577, "tcp" }, - { "config-port", { NULL }, 3577, "udp" }, - { "data-port", { NULL }, 3578, "tcp" }, - { "data-port", { NULL }, 3578, "udp" }, - { "ttat3lb", { NULL }, 3579, "tcp" }, - { "ttat3lb", { NULL }, 3579, "udp" }, - { "nati-svrloc", { NULL }, 3580, "tcp" }, - { "nati-svrloc", { NULL }, 3580, "udp" }, - { "kfxaclicensing", { NULL }, 3581, "tcp" }, - { "kfxaclicensing", { NULL }, 3581, "udp" }, - { "press", { NULL }, 3582, "tcp" }, - { "press", { NULL }, 3582, "udp" }, - { "canex-watch", { NULL }, 3583, "tcp" }, - { "canex-watch", { NULL }, 3583, "udp" }, - { "u-dbap", { NULL }, 3584, "tcp" }, - { "u-dbap", { NULL }, 3584, "udp" }, - { "emprise-lls", { NULL }, 3585, "tcp" }, - { "emprise-lls", { NULL }, 3585, "udp" }, - { "emprise-lsc", { NULL }, 3586, "tcp" }, - { "emprise-lsc", { NULL }, 3586, "udp" }, - { "p2pgroup", { NULL }, 3587, "tcp" }, - { "p2pgroup", { NULL }, 3587, "udp" }, - { "sentinel", { NULL }, 3588, "tcp" }, - { "sentinel", { NULL }, 3588, "udp" }, - { "isomair", { NULL }, 3589, "tcp" }, - { "isomair", { NULL }, 3589, "udp" }, - { "wv-csp-sms", { NULL }, 3590, "tcp" }, - { "wv-csp-sms", { NULL }, 3590, "udp" }, - { "gtrack-server", { NULL }, 3591, "tcp" }, - { "gtrack-server", { NULL }, 3591, "udp" }, - { "gtrack-ne", { NULL }, 3592, "tcp" }, - { "gtrack-ne", { NULL }, 3592, "udp" }, - { "bpmd", { NULL }, 3593, "tcp" }, - { "bpmd", { NULL }, 3593, "udp" }, - { "mediaspace", { NULL }, 3594, "tcp" }, - { "mediaspace", { NULL }, 3594, "udp" }, - { "shareapp", { NULL }, 3595, "tcp" }, - { "shareapp", { NULL }, 3595, "udp" }, - { "iw-mmogame", { NULL }, 3596, "tcp" }, - { "iw-mmogame", { NULL }, 3596, "udp" }, - { "a14", { NULL }, 3597, "tcp" }, - { "a14", { NULL }, 3597, "udp" }, - { "a15", { NULL }, 3598, "tcp" }, - { "a15", { NULL }, 3598, "udp" }, - { "quasar-server", { NULL }, 3599, "tcp" }, - { "quasar-server", { NULL }, 3599, "udp" }, - { "trap-daemon", { NULL }, 3600, "tcp" }, - { "trap-daemon", { NULL }, 3600, "udp" }, - { "visinet-gui", { NULL }, 3601, "tcp" }, - { "visinet-gui", { NULL }, 3601, "udp" }, - { "infiniswitchcl", { NULL }, 3602, "tcp" }, - { "infiniswitchcl", { NULL }, 3602, "udp" }, - { "int-rcv-cntrl", { NULL }, 3603, "tcp" }, - { "int-rcv-cntrl", { NULL }, 3603, "udp" }, - { "bmc-jmx-port", { NULL }, 3604, "tcp" }, - { "bmc-jmx-port", { NULL }, 3604, "udp" }, - { "comcam-io", { NULL }, 3605, "tcp" }, - { "comcam-io", { NULL }, 3605, "udp" }, - { "splitlock", { NULL }, 3606, "tcp" }, - { "splitlock", { NULL }, 3606, "udp" }, - { "precise-i3", { NULL }, 3607, "tcp" }, - { "precise-i3", { NULL }, 3607, "udp" }, - { "trendchip-dcp", { NULL }, 3608, "tcp" }, - { "trendchip-dcp", { NULL }, 3608, "udp" }, - { "cpdi-pidas-cm", { NULL }, 3609, "tcp" }, - { "cpdi-pidas-cm", { NULL }, 3609, "udp" }, - { "echonet", { NULL }, 3610, "tcp" }, - { "echonet", { NULL }, 3610, "udp" }, - { "six-degrees", { NULL }, 3611, "tcp" }, - { "six-degrees", { NULL }, 3611, "udp" }, - { "hp-dataprotect", { NULL }, 3612, "tcp" }, - { "hp-dataprotect", { NULL }, 3612, "udp" }, - { "alaris-disc", { NULL }, 3613, "tcp" }, - { "alaris-disc", { NULL }, 3613, "udp" }, - { "sigma-port", { NULL }, 3614, "tcp" }, - { "sigma-port", { NULL }, 3614, "udp" }, - { "start-network", { NULL }, 3615, "tcp" }, - { "start-network", { NULL }, 3615, "udp" }, - { "cd3o-protocol", { NULL }, 3616, "tcp" }, - { "cd3o-protocol", { NULL }, 3616, "udp" }, - { "sharp-server", { NULL }, 3617, "tcp" }, - { "sharp-server", { NULL }, 3617, "udp" }, - { "aairnet-1", { NULL }, 3618, "tcp" }, - { "aairnet-1", { NULL }, 3618, "udp" }, - { "aairnet-2", { NULL }, 3619, "tcp" }, - { "aairnet-2", { NULL }, 3619, "udp" }, - { "ep-pcp", { NULL }, 3620, "tcp" }, - { "ep-pcp", { NULL }, 3620, "udp" }, - { "ep-nsp", { NULL }, 3621, "tcp" }, - { "ep-nsp", { NULL }, 3621, "udp" }, - { "ff-lr-port", { NULL }, 3622, "tcp" }, - { "ff-lr-port", { NULL }, 3622, "udp" }, - { "haipe-discover", { NULL }, 3623, "tcp" }, - { "haipe-discover", { NULL }, 3623, "udp" }, - { "dist-upgrade", { NULL }, 3624, "tcp" }, - { "dist-upgrade", { NULL }, 3624, "udp" }, - { "volley", { NULL }, 3625, "tcp" }, - { "volley", { NULL }, 3625, "udp" }, - { "bvcdaemon-port", { NULL }, 3626, "tcp" }, - { "bvcdaemon-port", { NULL }, 3626, "udp" }, - { "jamserverport", { NULL }, 3627, "tcp" }, - { "jamserverport", { NULL }, 3627, "udp" }, - { "ept-machine", { NULL }, 3628, "tcp" }, - { "ept-machine", { NULL }, 3628, "udp" }, - { "escvpnet", { NULL }, 3629, "tcp" }, - { "escvpnet", { NULL }, 3629, "udp" }, - { "cs-remote-db", { NULL }, 3630, "tcp" }, - { "cs-remote-db", { NULL }, 3630, "udp" }, - { "cs-services", { NULL }, 3631, "tcp" }, - { "cs-services", { NULL }, 3631, "udp" }, - { "distcc", { NULL }, 3632, "tcp" }, - { "distcc", { NULL }, 3632, "udp" }, - { "wacp", { NULL }, 3633, "tcp" }, - { "wacp", { NULL }, 3633, "udp" }, - { "hlibmgr", { NULL }, 3634, "tcp" }, - { "hlibmgr", { NULL }, 3634, "udp" }, - { "sdo", { NULL }, 3635, "tcp" }, - { "sdo", { NULL }, 3635, "udp" }, - { "servistaitsm", { NULL }, 3636, "tcp" }, - { "servistaitsm", { NULL }, 3636, "udp" }, - { "scservp", { NULL }, 3637, "tcp" }, - { "scservp", { NULL }, 3637, "udp" }, - { "ehp-backup", { NULL }, 3638, "tcp" }, - { "ehp-backup", { NULL }, 3638, "udp" }, - { "xap-ha", { NULL }, 3639, "tcp" }, - { "xap-ha", { NULL }, 3639, "udp" }, - { "netplay-port1", { NULL }, 3640, "tcp" }, - { "netplay-port1", { NULL }, 3640, "udp" }, - { "netplay-port2", { NULL }, 3641, "tcp" }, - { "netplay-port2", { NULL }, 3641, "udp" }, - { "juxml-port", { NULL }, 3642, "tcp" }, - { "juxml-port", { NULL }, 3642, "udp" }, - { "audiojuggler", { NULL }, 3643, "tcp" }, - { "audiojuggler", { NULL }, 3643, "udp" }, - { "ssowatch", { NULL }, 3644, "tcp" }, - { "ssowatch", { NULL }, 3644, "udp" }, - { "cyc", { NULL }, 3645, "tcp" }, - { "cyc", { NULL }, 3645, "udp" }, - { "xss-srv-port", { NULL }, 3646, "tcp" }, - { "xss-srv-port", { NULL }, 3646, "udp" }, - { "splitlock-gw", { NULL }, 3647, "tcp" }, - { "splitlock-gw", { NULL }, 3647, "udp" }, - { "fjcp", { NULL }, 3648, "tcp" }, - { "fjcp", { NULL }, 3648, "udp" }, - { "nmmp", { NULL }, 3649, "tcp" }, - { "nmmp", { NULL }, 3649, "udp" }, - { "prismiq-plugin", { NULL }, 3650, "tcp" }, - { "prismiq-plugin", { NULL }, 3650, "udp" }, - { "xrpc-registry", { NULL }, 3651, "tcp" }, - { "xrpc-registry", { NULL }, 3651, "udp" }, - { "vxcrnbuport", { NULL }, 3652, "tcp" }, - { "vxcrnbuport", { NULL }, 3652, "udp" }, - { "tsp", { NULL }, 3653, "tcp" }, - { "tsp", { NULL }, 3653, "udp" }, - { "vaprtm", { NULL }, 3654, "tcp" }, - { "vaprtm", { NULL }, 3654, "udp" }, - { "abatemgr", { NULL }, 3655, "tcp" }, - { "abatemgr", { NULL }, 3655, "udp" }, - { "abatjss", { NULL }, 3656, "tcp" }, - { "abatjss", { NULL }, 3656, "udp" }, - { "immedianet-bcn", { NULL }, 3657, "tcp" }, - { "immedianet-bcn", { NULL }, 3657, "udp" }, - { "ps-ams", { NULL }, 3658, "tcp" }, - { "ps-ams", { NULL }, 3658, "udp" }, - { "apple-sasl", { NULL }, 3659, "tcp" }, - { "apple-sasl", { NULL }, 3659, "udp" }, - { "can-nds-ssl", { NULL }, 3660, "tcp" }, - { "can-nds-ssl", { NULL }, 3660, "udp" }, - { "can-ferret-ssl", { NULL }, 3661, "tcp" }, - { "can-ferret-ssl", { NULL }, 3661, "udp" }, - { "pserver", { NULL }, 3662, "tcp" }, - { "pserver", { NULL }, 3662, "udp" }, - { "dtp", { NULL }, 3663, "tcp" }, - { "dtp", { NULL }, 3663, "udp" }, - { "ups-engine", { NULL }, 3664, "tcp" }, - { "ups-engine", { NULL }, 3664, "udp" }, - { "ent-engine", { NULL }, 3665, "tcp" }, - { "ent-engine", { NULL }, 3665, "udp" }, - { "eserver-pap", { NULL }, 3666, "tcp" }, - { "eserver-pap", { NULL }, 3666, "udp" }, - { "infoexch", { NULL }, 3667, "tcp" }, - { "infoexch", { NULL }, 3667, "udp" }, - { "dell-rm-port", { NULL }, 3668, "tcp" }, - { "dell-rm-port", { NULL }, 3668, "udp" }, - { "casanswmgmt", { NULL }, 3669, "tcp" }, - { "casanswmgmt", { NULL }, 3669, "udp" }, - { "smile", { NULL }, 3670, "tcp" }, - { "smile", { NULL }, 3670, "udp" }, - { "efcp", { NULL }, 3671, "tcp" }, - { "efcp", { NULL }, 3671, "udp" }, - { "lispworks-orb", { NULL }, 3672, "tcp" }, - { "lispworks-orb", { NULL }, 3672, "udp" }, - { "mediavault-gui", { NULL }, 3673, "tcp" }, - { "mediavault-gui", { NULL }, 3673, "udp" }, - { "wininstall-ipc", { NULL }, 3674, "tcp" }, - { "wininstall-ipc", { NULL }, 3674, "udp" }, - { "calltrax", { NULL }, 3675, "tcp" }, - { "calltrax", { NULL }, 3675, "udp" }, - { "va-pacbase", { NULL }, 3676, "tcp" }, - { "va-pacbase", { NULL }, 3676, "udp" }, - { "roverlog", { NULL }, 3677, "tcp" }, - { "roverlog", { NULL }, 3677, "udp" }, - { "ipr-dglt", { NULL }, 3678, "tcp" }, - { "ipr-dglt", { NULL }, 3678, "udp" }, - { "newton-dock", { NULL }, 3679, "tcp" }, - { "newton-dock", { NULL }, 3679, "udp" }, - { "npds-tracker", { NULL }, 3680, "tcp" }, - { "npds-tracker", { NULL }, 3680, "udp" }, - { "bts-x73", { NULL }, 3681, "tcp" }, - { "bts-x73", { NULL }, 3681, "udp" }, - { "cas-mapi", { NULL }, 3682, "tcp" }, - { "cas-mapi", { NULL }, 3682, "udp" }, - { "bmc-ea", { NULL }, 3683, "tcp" }, - { "bmc-ea", { NULL }, 3683, "udp" }, - { "faxstfx-port", { NULL }, 3684, "tcp" }, - { "faxstfx-port", { NULL }, 3684, "udp" }, - { "dsx-agent", { NULL }, 3685, "tcp" }, - { "dsx-agent", { NULL }, 3685, "udp" }, - { "tnmpv2", { NULL }, 3686, "tcp" }, - { "tnmpv2", { NULL }, 3686, "udp" }, - { "simple-push", { NULL }, 3687, "tcp" }, - { "simple-push", { NULL }, 3687, "udp" }, - { "simple-push-s", { NULL }, 3688, "tcp" }, - { "simple-push-s", { NULL }, 3688, "udp" }, - { "daap", { NULL }, 3689, "tcp" }, - { "daap", { NULL }, 3689, "udp" }, - { "svn", { NULL }, 3690, "tcp" }, - { "svn", { NULL }, 3690, "udp" }, - { "magaya-network", { NULL }, 3691, "tcp" }, - { "magaya-network", { NULL }, 3691, "udp" }, - { "intelsync", { NULL }, 3692, "tcp" }, - { "intelsync", { NULL }, 3692, "udp" }, - { "bmc-data-coll", { NULL }, 3695, "tcp" }, - { "bmc-data-coll", { NULL }, 3695, "udp" }, - { "telnetcpcd", { NULL }, 3696, "tcp" }, - { "telnetcpcd", { NULL }, 3696, "udp" }, - { "nw-license", { NULL }, 3697, "tcp" }, - { "nw-license", { NULL }, 3697, "udp" }, - { "sagectlpanel", { NULL }, 3698, "tcp" }, - { "sagectlpanel", { NULL }, 3698, "udp" }, - { "kpn-icw", { NULL }, 3699, "tcp" }, - { "kpn-icw", { NULL }, 3699, "udp" }, - { "lrs-paging", { NULL }, 3700, "tcp" }, - { "lrs-paging", { NULL }, 3700, "udp" }, - { "netcelera", { NULL }, 3701, "tcp" }, - { "netcelera", { NULL }, 3701, "udp" }, - { "ws-discovery", { NULL }, 3702, "tcp" }, - { "ws-discovery", { NULL }, 3702, "udp" }, - { "adobeserver-3", { NULL }, 3703, "tcp" }, - { "adobeserver-3", { NULL }, 3703, "udp" }, - { "adobeserver-4", { NULL }, 3704, "tcp" }, - { "adobeserver-4", { NULL }, 3704, "udp" }, - { "adobeserver-5", { NULL }, 3705, "tcp" }, - { "adobeserver-5", { NULL }, 3705, "udp" }, - { "rt-event", { NULL }, 3706, "tcp" }, - { "rt-event", { NULL }, 3706, "udp" }, - { "rt-event-s", { NULL }, 3707, "tcp" }, - { "rt-event-s", { NULL }, 3707, "udp" }, - { "sun-as-iiops", { NULL }, 3708, "tcp" }, - { "sun-as-iiops", { NULL }, 3708, "udp" }, - { "ca-idms", { NULL }, 3709, "tcp" }, - { "ca-idms", { NULL }, 3709, "udp" }, - { "portgate-auth", { NULL }, 3710, "tcp" }, - { "portgate-auth", { NULL }, 3710, "udp" }, - { "edb-server2", { NULL }, 3711, "tcp" }, - { "edb-server2", { NULL }, 3711, "udp" }, - { "sentinel-ent", { NULL }, 3712, "tcp" }, - { "sentinel-ent", { NULL }, 3712, "udp" }, - { "tftps", { NULL }, 3713, "tcp" }, - { "tftps", { NULL }, 3713, "udp" }, - { "delos-dms", { NULL }, 3714, "tcp" }, - { "delos-dms", { NULL }, 3714, "udp" }, - { "anoto-rendezv", { NULL }, 3715, "tcp" }, - { "anoto-rendezv", { NULL }, 3715, "udp" }, - { "wv-csp-sms-cir", { NULL }, 3716, "tcp" }, - { "wv-csp-sms-cir", { NULL }, 3716, "udp" }, - { "wv-csp-udp-cir", { NULL }, 3717, "tcp" }, - { "wv-csp-udp-cir", { NULL }, 3717, "udp" }, - { "opus-services", { NULL }, 3718, "tcp" }, - { "opus-services", { NULL }, 3718, "udp" }, - { "itelserverport", { NULL }, 3719, "tcp" }, - { "itelserverport", { NULL }, 3719, "udp" }, - { "ufastro-instr", { NULL }, 3720, "tcp" }, - { "ufastro-instr", { NULL }, 3720, "udp" }, - { "xsync", { NULL }, 3721, "tcp" }, - { "xsync", { NULL }, 3721, "udp" }, - { "xserveraid", { NULL }, 3722, "tcp" }, - { "xserveraid", { NULL }, 3722, "udp" }, - { "sychrond", { NULL }, 3723, "tcp" }, - { "sychrond", { NULL }, 3723, "udp" }, - { "blizwow", { NULL }, 3724, "tcp" }, - { "blizwow", { NULL }, 3724, "udp" }, - { "na-er-tip", { NULL }, 3725, "tcp" }, - { "na-er-tip", { NULL }, 3725, "udp" }, - { "array-manager", { NULL }, 3726, "tcp" }, - { "array-manager", { NULL }, 3726, "udp" }, - { "e-mdu", { NULL }, 3727, "tcp" }, - { "e-mdu", { NULL }, 3727, "udp" }, - { "e-woa", { NULL }, 3728, "tcp" }, - { "e-woa", { NULL }, 3728, "udp" }, - { "fksp-audit", { NULL }, 3729, "tcp" }, - { "fksp-audit", { NULL }, 3729, "udp" }, - { "client-ctrl", { NULL }, 3730, "tcp" }, - { "client-ctrl", { NULL }, 3730, "udp" }, - { "smap", { NULL }, 3731, "tcp" }, - { "smap", { NULL }, 3731, "udp" }, - { "m-wnn", { NULL }, 3732, "tcp" }, - { "m-wnn", { NULL }, 3732, "udp" }, - { "multip-msg", { NULL }, 3733, "tcp" }, - { "multip-msg", { NULL }, 3733, "udp" }, - { "synel-data", { NULL }, 3734, "tcp" }, - { "synel-data", { NULL }, 3734, "udp" }, - { "pwdis", { NULL }, 3735, "tcp" }, - { "pwdis", { NULL }, 3735, "udp" }, - { "rs-rmi", { NULL }, 3736, "tcp" }, - { "rs-rmi", { NULL }, 3736, "udp" }, - { "xpanel", { NULL }, 3737, "tcp" }, - { "versatalk", { NULL }, 3738, "tcp" }, - { "versatalk", { NULL }, 3738, "udp" }, - { "launchbird-lm", { NULL }, 3739, "tcp" }, - { "launchbird-lm", { NULL }, 3739, "udp" }, - { "heartbeat", { NULL }, 3740, "tcp" }, - { "heartbeat", { NULL }, 3740, "udp" }, - { "wysdma", { NULL }, 3741, "tcp" }, - { "wysdma", { NULL }, 3741, "udp" }, - { "cst-port", { NULL }, 3742, "tcp" }, - { "cst-port", { NULL }, 3742, "udp" }, - { "ipcs-command", { NULL }, 3743, "tcp" }, - { "ipcs-command", { NULL }, 3743, "udp" }, - { "sasg", { NULL }, 3744, "tcp" }, - { "sasg", { NULL }, 3744, "udp" }, - { "gw-call-port", { NULL }, 3745, "tcp" }, - { "gw-call-port", { NULL }, 3745, "udp" }, - { "linktest", { NULL }, 3746, "tcp" }, - { "linktest", { NULL }, 3746, "udp" }, - { "linktest-s", { NULL }, 3747, "tcp" }, - { "linktest-s", { NULL }, 3747, "udp" }, - { "webdata", { NULL }, 3748, "tcp" }, - { "webdata", { NULL }, 3748, "udp" }, - { "cimtrak", { NULL }, 3749, "tcp" }, - { "cimtrak", { NULL }, 3749, "udp" }, - { "cbos-ip-port", { NULL }, 3750, "tcp" }, - { "cbos-ip-port", { NULL }, 3750, "udp" }, - { "gprs-cube", { NULL }, 3751, "tcp" }, - { "gprs-cube", { NULL }, 3751, "udp" }, - { "vipremoteagent", { NULL }, 3752, "tcp" }, - { "vipremoteagent", { NULL }, 3752, "udp" }, - { "nattyserver", { NULL }, 3753, "tcp" }, - { "nattyserver", { NULL }, 3753, "udp" }, - { "timestenbroker", { NULL }, 3754, "tcp" }, - { "timestenbroker", { NULL }, 3754, "udp" }, - { "sas-remote-hlp", { NULL }, 3755, "tcp" }, - { "sas-remote-hlp", { NULL }, 3755, "udp" }, - { "canon-capt", { NULL }, 3756, "tcp" }, - { "canon-capt", { NULL }, 3756, "udp" }, - { "grf-port", { NULL }, 3757, "tcp" }, - { "grf-port", { NULL }, 3757, "udp" }, - { "apw-registry", { NULL }, 3758, "tcp" }, - { "apw-registry", { NULL }, 3758, "udp" }, - { "exapt-lmgr", { NULL }, 3759, "tcp" }, - { "exapt-lmgr", { NULL }, 3759, "udp" }, - { "adtempusclient", { NULL }, 3760, "tcp" }, - { "adtempusclient", { NULL }, 3760, "udp" }, - { "gsakmp", { NULL }, 3761, "tcp" }, - { "gsakmp", { NULL }, 3761, "udp" }, - { "gbs-smp", { NULL }, 3762, "tcp" }, - { "gbs-smp", { NULL }, 3762, "udp" }, - { "xo-wave", { NULL }, 3763, "tcp" }, - { "xo-wave", { NULL }, 3763, "udp" }, - { "mni-prot-rout", { NULL }, 3764, "tcp" }, - { "mni-prot-rout", { NULL }, 3764, "udp" }, - { "rtraceroute", { NULL }, 3765, "tcp" }, - { "rtraceroute", { NULL }, 3765, "udp" }, - { "listmgr-port", { NULL }, 3767, "tcp" }, - { "listmgr-port", { NULL }, 3767, "udp" }, - { "rblcheckd", { NULL }, 3768, "tcp" }, - { "rblcheckd", { NULL }, 3768, "udp" }, - { "haipe-otnk", { NULL }, 3769, "tcp" }, - { "haipe-otnk", { NULL }, 3769, "udp" }, - { "cindycollab", { NULL }, 3770, "tcp" }, - { "cindycollab", { NULL }, 3770, "udp" }, - { "paging-port", { NULL }, 3771, "tcp" }, - { "paging-port", { NULL }, 3771, "udp" }, - { "ctp", { NULL }, 3772, "tcp" }, - { "ctp", { NULL }, 3772, "udp" }, - { "ctdhercules", { NULL }, 3773, "tcp" }, - { "ctdhercules", { NULL }, 3773, "udp" }, - { "zicom", { NULL }, 3774, "tcp" }, - { "zicom", { NULL }, 3774, "udp" }, - { "ispmmgr", { NULL }, 3775, "tcp" }, - { "ispmmgr", { NULL }, 3775, "udp" }, - { "dvcprov-port", { NULL }, 3776, "tcp" }, - { "dvcprov-port", { NULL }, 3776, "udp" }, - { "jibe-eb", { NULL }, 3777, "tcp" }, - { "jibe-eb", { NULL }, 3777, "udp" }, - { "c-h-it-port", { NULL }, 3778, "tcp" }, - { "c-h-it-port", { NULL }, 3778, "udp" }, - { "cognima", { NULL }, 3779, "tcp" }, - { "cognima", { NULL }, 3779, "udp" }, - { "nnp", { NULL }, 3780, "tcp" }, - { "nnp", { NULL }, 3780, "udp" }, - { "abcvoice-port", { NULL }, 3781, "tcp" }, - { "abcvoice-port", { NULL }, 3781, "udp" }, - { "iso-tp0s", { NULL }, 3782, "tcp" }, - { "iso-tp0s", { NULL }, 3782, "udp" }, - { "bim-pem", { NULL }, 3783, "tcp" }, - { "bim-pem", { NULL }, 3783, "udp" }, - { "bfd-control", { NULL }, 3784, "tcp" }, - { "bfd-control", { NULL }, 3784, "udp" }, - { "bfd-echo", { NULL }, 3785, "tcp" }, - { "bfd-echo", { NULL }, 3785, "udp" }, - { "upstriggervsw", { NULL }, 3786, "tcp" }, - { "upstriggervsw", { NULL }, 3786, "udp" }, - { "fintrx", { NULL }, 3787, "tcp" }, - { "fintrx", { NULL }, 3787, "udp" }, - { "isrp-port", { NULL }, 3788, "tcp" }, - { "isrp-port", { NULL }, 3788, "udp" }, - { "remotedeploy", { NULL }, 3789, "tcp" }, - { "remotedeploy", { NULL }, 3789, "udp" }, - { "quickbooksrds", { NULL }, 3790, "tcp" }, - { "quickbooksrds", { NULL }, 3790, "udp" }, - { "tvnetworkvideo", { NULL }, 3791, "tcp" }, - { "tvnetworkvideo", { NULL }, 3791, "udp" }, - { "sitewatch", { NULL }, 3792, "tcp" }, - { "sitewatch", { NULL }, 3792, "udp" }, - { "dcsoftware", { NULL }, 3793, "tcp" }, - { "dcsoftware", { NULL }, 3793, "udp" }, - { "jaus", { NULL }, 3794, "tcp" }, - { "jaus", { NULL }, 3794, "udp" }, - { "myblast", { NULL }, 3795, "tcp" }, - { "myblast", { NULL }, 3795, "udp" }, - { "spw-dialer", { NULL }, 3796, "tcp" }, - { "spw-dialer", { NULL }, 3796, "udp" }, - { "idps", { NULL }, 3797, "tcp" }, - { "idps", { NULL }, 3797, "udp" }, - { "minilock", { NULL }, 3798, "tcp" }, - { "minilock", { NULL }, 3798, "udp" }, - { "radius-dynauth", { NULL }, 3799, "tcp" }, - { "radius-dynauth", { NULL }, 3799, "udp" }, - { "pwgpsi", { NULL }, 3800, "tcp" }, - { "pwgpsi", { NULL }, 3800, "udp" }, - { "ibm-mgr", { NULL }, 3801, "tcp" }, - { "ibm-mgr", { NULL }, 3801, "udp" }, - { "vhd", { NULL }, 3802, "tcp" }, - { "vhd", { NULL }, 3802, "udp" }, - { "soniqsync", { NULL }, 3803, "tcp" }, - { "soniqsync", { NULL }, 3803, "udp" }, - { "iqnet-port", { NULL }, 3804, "tcp" }, - { "iqnet-port", { NULL }, 3804, "udp" }, - { "tcpdataserver", { NULL }, 3805, "tcp" }, - { "tcpdataserver", { NULL }, 3805, "udp" }, - { "wsmlb", { NULL }, 3806, "tcp" }, - { "wsmlb", { NULL }, 3806, "udp" }, - { "spugna", { NULL }, 3807, "tcp" }, - { "spugna", { NULL }, 3807, "udp" }, - { "sun-as-iiops-ca", { NULL }, 3808, "tcp" }, - { "sun-as-iiops-ca", { NULL }, 3808, "udp" }, - { "apocd", { NULL }, 3809, "tcp" }, - { "apocd", { NULL }, 3809, "udp" }, - { "wlanauth", { NULL }, 3810, "tcp" }, - { "wlanauth", { NULL }, 3810, "udp" }, - { "amp", { NULL }, 3811, "tcp" }, - { "amp", { NULL }, 3811, "udp" }, - { "neto-wol-server", { NULL }, 3812, "tcp" }, - { "neto-wol-server", { NULL }, 3812, "udp" }, - { "rap-ip", { NULL }, 3813, "tcp" }, - { "rap-ip", { NULL }, 3813, "udp" }, - { "neto-dcs", { NULL }, 3814, "tcp" }, - { "neto-dcs", { NULL }, 3814, "udp" }, - { "lansurveyorxml", { NULL }, 3815, "tcp" }, - { "lansurveyorxml", { NULL }, 3815, "udp" }, - { "sunlps-http", { NULL }, 3816, "tcp" }, - { "sunlps-http", { NULL }, 3816, "udp" }, - { "tapeware", { NULL }, 3817, "tcp" }, - { "tapeware", { NULL }, 3817, "udp" }, - { "crinis-hb", { NULL }, 3818, "tcp" }, - { "crinis-hb", { NULL }, 3818, "udp" }, - { "epl-slp", { NULL }, 3819, "tcp" }, - { "epl-slp", { NULL }, 3819, "udp" }, - { "scp", { NULL }, 3820, "tcp" }, - { "scp", { NULL }, 3820, "udp" }, - { "pmcp", { NULL }, 3821, "tcp" }, - { "pmcp", { NULL }, 3821, "udp" }, - { "acp-discovery", { NULL }, 3822, "tcp" }, - { "acp-discovery", { NULL }, 3822, "udp" }, - { "acp-conduit", { NULL }, 3823, "tcp" }, - { "acp-conduit", { NULL }, 3823, "udp" }, - { "acp-policy", { NULL }, 3824, "tcp" }, - { "acp-policy", { NULL }, 3824, "udp" }, - { "ffserver", { NULL }, 3825, "tcp" }, - { "ffserver", { NULL }, 3825, "udp" }, - { "wormux", { NULL }, 3826, "tcp" }, - { "wormux", { NULL }, 3826, "udp" }, - { "netmpi", { NULL }, 3827, "tcp" }, - { "netmpi", { NULL }, 3827, "udp" }, - { "neteh", { NULL }, 3828, "tcp" }, - { "neteh", { NULL }, 3828, "udp" }, - { "neteh-ext", { NULL }, 3829, "tcp" }, - { "neteh-ext", { NULL }, 3829, "udp" }, - { "cernsysmgmtagt", { NULL }, 3830, "tcp" }, - { "cernsysmgmtagt", { NULL }, 3830, "udp" }, - { "dvapps", { NULL }, 3831, "tcp" }, - { "dvapps", { NULL }, 3831, "udp" }, - { "xxnetserver", { NULL }, 3832, "tcp" }, - { "xxnetserver", { NULL }, 3832, "udp" }, - { "aipn-auth", { NULL }, 3833, "tcp" }, - { "aipn-auth", { NULL }, 3833, "udp" }, - { "spectardata", { NULL }, 3834, "tcp" }, - { "spectardata", { NULL }, 3834, "udp" }, - { "spectardb", { NULL }, 3835, "tcp" }, - { "spectardb", { NULL }, 3835, "udp" }, - { "markem-dcp", { NULL }, 3836, "tcp" }, - { "markem-dcp", { NULL }, 3836, "udp" }, - { "mkm-discovery", { NULL }, 3837, "tcp" }, - { "mkm-discovery", { NULL }, 3837, "udp" }, - { "sos", { NULL }, 3838, "tcp" }, - { "sos", { NULL }, 3838, "udp" }, - { "amx-rms", { NULL }, 3839, "tcp" }, - { "amx-rms", { NULL }, 3839, "udp" }, - { "flirtmitmir", { NULL }, 3840, "tcp" }, - { "flirtmitmir", { NULL }, 3840, "udp" }, - { "zfirm-shiprush3", { NULL }, 3841, "tcp" }, - { "zfirm-shiprush3", { NULL }, 3841, "udp" }, - { "nhci", { NULL }, 3842, "tcp" }, - { "nhci", { NULL }, 3842, "udp" }, - { "quest-agent", { NULL }, 3843, "tcp" }, - { "quest-agent", { NULL }, 3843, "udp" }, - { "rnm", { NULL }, 3844, "tcp" }, - { "rnm", { NULL }, 3844, "udp" }, - { "v-one-spp", { NULL }, 3845, "tcp" }, - { "v-one-spp", { NULL }, 3845, "udp" }, - { "an-pcp", { NULL }, 3846, "tcp" }, - { "an-pcp", { NULL }, 3846, "udp" }, - { "msfw-control", { NULL }, 3847, "tcp" }, - { "msfw-control", { NULL }, 3847, "udp" }, - { "item", { NULL }, 3848, "tcp" }, - { "item", { NULL }, 3848, "udp" }, - { "spw-dnspreload", { NULL }, 3849, "tcp" }, - { "spw-dnspreload", { NULL }, 3849, "udp" }, - { "qtms-bootstrap", { NULL }, 3850, "tcp" }, - { "qtms-bootstrap", { NULL }, 3850, "udp" }, - { "spectraport", { NULL }, 3851, "tcp" }, - { "spectraport", { NULL }, 3851, "udp" }, - { "sse-app-config", { NULL }, 3852, "tcp" }, - { "sse-app-config", { NULL }, 3852, "udp" }, - { "sscan", { NULL }, 3853, "tcp" }, - { "sscan", { NULL }, 3853, "udp" }, - { "stryker-com", { NULL }, 3854, "tcp" }, - { "stryker-com", { NULL }, 3854, "udp" }, - { "opentrac", { NULL }, 3855, "tcp" }, - { "opentrac", { NULL }, 3855, "udp" }, - { "informer", { NULL }, 3856, "tcp" }, - { "informer", { NULL }, 3856, "udp" }, - { "trap-port", { NULL }, 3857, "tcp" }, - { "trap-port", { NULL }, 3857, "udp" }, - { "trap-port-mom", { NULL }, 3858, "tcp" }, - { "trap-port-mom", { NULL }, 3858, "udp" }, - { "nav-port", { NULL }, 3859, "tcp" }, - { "nav-port", { NULL }, 3859, "udp" }, - { "sasp", { NULL }, 3860, "tcp" }, - { "sasp", { NULL }, 3860, "udp" }, - { "winshadow-hd", { NULL }, 3861, "tcp" }, - { "winshadow-hd", { NULL }, 3861, "udp" }, - { "giga-pocket", { NULL }, 3862, "tcp" }, - { "giga-pocket", { NULL }, 3862, "udp" }, - { "asap-tcp", { NULL }, 3863, "tcp" }, - { "asap-udp", { NULL }, 3863, "udp" }, - { "asap-sctp", { NULL }, 3863, "sctp" }, - { "asap-tcp-tls", { NULL }, 3864, "tcp" }, - { "asap-sctp-tls", { NULL }, 3864, "sctp" }, - { "xpl", { NULL }, 3865, "tcp" }, - { "xpl", { NULL }, 3865, "udp" }, - { "dzdaemon", { NULL }, 3866, "tcp" }, - { "dzdaemon", { NULL }, 3866, "udp" }, - { "dzoglserver", { NULL }, 3867, "tcp" }, - { "dzoglserver", { NULL }, 3867, "udp" }, - { "diameter", { NULL }, 3868, "tcp" }, - { "diameter", { NULL }, 3868, "sctp" }, - { "ovsam-mgmt", { NULL }, 3869, "tcp" }, - { "ovsam-mgmt", { NULL }, 3869, "udp" }, - { "ovsam-d-agent", { NULL }, 3870, "tcp" }, - { "ovsam-d-agent", { NULL }, 3870, "udp" }, - { "avocent-adsap", { NULL }, 3871, "tcp" }, - { "avocent-adsap", { NULL }, 3871, "udp" }, - { "oem-agent", { NULL }, 3872, "tcp" }, - { "oem-agent", { NULL }, 3872, "udp" }, - { "fagordnc", { NULL }, 3873, "tcp" }, - { "fagordnc", { NULL }, 3873, "udp" }, - { "sixxsconfig", { NULL }, 3874, "tcp" }, - { "sixxsconfig", { NULL }, 3874, "udp" }, - { "pnbscada", { NULL }, 3875, "tcp" }, - { "pnbscada", { NULL }, 3875, "udp" }, - { "dl_agent", { NULL }, 3876, "tcp" }, - { "dl_agent", { NULL }, 3876, "udp" }, - { "xmpcr-interface", { NULL }, 3877, "tcp" }, - { "xmpcr-interface", { NULL }, 3877, "udp" }, - { "fotogcad", { NULL }, 3878, "tcp" }, - { "fotogcad", { NULL }, 3878, "udp" }, - { "appss-lm", { NULL }, 3879, "tcp" }, - { "appss-lm", { NULL }, 3879, "udp" }, - { "igrs", { NULL }, 3880, "tcp" }, - { "igrs", { NULL }, 3880, "udp" }, - { "idac", { NULL }, 3881, "tcp" }, - { "idac", { NULL }, 3881, "udp" }, - { "msdts1", { NULL }, 3882, "tcp" }, - { "msdts1", { NULL }, 3882, "udp" }, - { "vrpn", { NULL }, 3883, "tcp" }, - { "vrpn", { NULL }, 3883, "udp" }, - { "softrack-meter", { NULL }, 3884, "tcp" }, - { "softrack-meter", { NULL }, 3884, "udp" }, - { "topflow-ssl", { NULL }, 3885, "tcp" }, - { "topflow-ssl", { NULL }, 3885, "udp" }, - { "nei-management", { NULL }, 3886, "tcp" }, - { "nei-management", { NULL }, 3886, "udp" }, - { "ciphire-data", { NULL }, 3887, "tcp" }, - { "ciphire-data", { NULL }, 3887, "udp" }, - { "ciphire-serv", { NULL }, 3888, "tcp" }, - { "ciphire-serv", { NULL }, 3888, "udp" }, - { "dandv-tester", { NULL }, 3889, "tcp" }, - { "dandv-tester", { NULL }, 3889, "udp" }, - { "ndsconnect", { NULL }, 3890, "tcp" }, - { "ndsconnect", { NULL }, 3890, "udp" }, - { "rtc-pm-port", { NULL }, 3891, "tcp" }, - { "rtc-pm-port", { NULL }, 3891, "udp" }, - { "pcc-image-port", { NULL }, 3892, "tcp" }, - { "pcc-image-port", { NULL }, 3892, "udp" }, - { "cgi-starapi", { NULL }, 3893, "tcp" }, - { "cgi-starapi", { NULL }, 3893, "udp" }, - { "syam-agent", { NULL }, 3894, "tcp" }, - { "syam-agent", { NULL }, 3894, "udp" }, - { "syam-smc", { NULL }, 3895, "tcp" }, - { "syam-smc", { NULL }, 3895, "udp" }, - { "sdo-tls", { NULL }, 3896, "tcp" }, - { "sdo-tls", { NULL }, 3896, "udp" }, - { "sdo-ssh", { NULL }, 3897, "tcp" }, - { "sdo-ssh", { NULL }, 3897, "udp" }, - { "senip", { NULL }, 3898, "tcp" }, - { "senip", { NULL }, 3898, "udp" }, - { "itv-control", { NULL }, 3899, "tcp" }, - { "itv-control", { NULL }, 3899, "udp" }, - { "udt_os", { NULL }, 3900, "tcp" }, - { "udt_os", { NULL }, 3900, "udp" }, - { "nimsh", { NULL }, 3901, "tcp" }, - { "nimsh", { NULL }, 3901, "udp" }, - { "nimaux", { NULL }, 3902, "tcp" }, - { "nimaux", { NULL }, 3902, "udp" }, - { "charsetmgr", { NULL }, 3903, "tcp" }, - { "charsetmgr", { NULL }, 3903, "udp" }, - { "omnilink-port", { NULL }, 3904, "tcp" }, - { "omnilink-port", { NULL }, 3904, "udp" }, - { "mupdate", { NULL }, 3905, "tcp" }, - { "mupdate", { NULL }, 3905, "udp" }, - { "topovista-data", { NULL }, 3906, "tcp" }, - { "topovista-data", { NULL }, 3906, "udp" }, - { "imoguia-port", { NULL }, 3907, "tcp" }, - { "imoguia-port", { NULL }, 3907, "udp" }, - { "hppronetman", { NULL }, 3908, "tcp" }, - { "hppronetman", { NULL }, 3908, "udp" }, - { "surfcontrolcpa", { NULL }, 3909, "tcp" }, - { "surfcontrolcpa", { NULL }, 3909, "udp" }, - { "prnrequest", { NULL }, 3910, "tcp" }, - { "prnrequest", { NULL }, 3910, "udp" }, - { "prnstatus", { NULL }, 3911, "tcp" }, - { "prnstatus", { NULL }, 3911, "udp" }, - { "gbmt-stars", { NULL }, 3912, "tcp" }, - { "gbmt-stars", { NULL }, 3912, "udp" }, - { "listcrt-port", { NULL }, 3913, "tcp" }, - { "listcrt-port", { NULL }, 3913, "udp" }, - { "listcrt-port-2", { NULL }, 3914, "tcp" }, - { "listcrt-port-2", { NULL }, 3914, "udp" }, - { "agcat", { NULL }, 3915, "tcp" }, - { "agcat", { NULL }, 3915, "udp" }, - { "wysdmc", { NULL }, 3916, "tcp" }, - { "wysdmc", { NULL }, 3916, "udp" }, - { "aftmux", { NULL }, 3917, "tcp" }, - { "aftmux", { NULL }, 3917, "udp" }, - { "pktcablemmcops", { NULL }, 3918, "tcp" }, - { "pktcablemmcops", { NULL }, 3918, "udp" }, - { "hyperip", { NULL }, 3919, "tcp" }, - { "hyperip", { NULL }, 3919, "udp" }, - { "exasoftport1", { NULL }, 3920, "tcp" }, - { "exasoftport1", { NULL }, 3920, "udp" }, - { "herodotus-net", { NULL }, 3921, "tcp" }, - { "herodotus-net", { NULL }, 3921, "udp" }, - { "sor-update", { NULL }, 3922, "tcp" }, - { "sor-update", { NULL }, 3922, "udp" }, - { "symb-sb-port", { NULL }, 3923, "tcp" }, - { "symb-sb-port", { NULL }, 3923, "udp" }, - { "mpl-gprs-port", { NULL }, 3924, "tcp" }, - { "mpl-gprs-port", { NULL }, 3924, "udp" }, - { "zmp", { NULL }, 3925, "tcp" }, - { "zmp", { NULL }, 3925, "udp" }, - { "winport", { NULL }, 3926, "tcp" }, - { "winport", { NULL }, 3926, "udp" }, - { "natdataservice", { NULL }, 3927, "tcp" }, - { "natdataservice", { NULL }, 3927, "udp" }, - { "netboot-pxe", { NULL }, 3928, "tcp" }, - { "netboot-pxe", { NULL }, 3928, "udp" }, - { "smauth-port", { NULL }, 3929, "tcp" }, - { "smauth-port", { NULL }, 3929, "udp" }, - { "syam-webserver", { NULL }, 3930, "tcp" }, - { "syam-webserver", { NULL }, 3930, "udp" }, - { "msr-plugin-port", { NULL }, 3931, "tcp" }, - { "msr-plugin-port", { NULL }, 3931, "udp" }, - { "dyn-site", { NULL }, 3932, "tcp" }, - { "dyn-site", { NULL }, 3932, "udp" }, - { "plbserve-port", { NULL }, 3933, "tcp" }, - { "plbserve-port", { NULL }, 3933, "udp" }, - { "sunfm-port", { NULL }, 3934, "tcp" }, - { "sunfm-port", { NULL }, 3934, "udp" }, - { "sdp-portmapper", { NULL }, 3935, "tcp" }, - { "sdp-portmapper", { NULL }, 3935, "udp" }, - { "mailprox", { NULL }, 3936, "tcp" }, - { "mailprox", { NULL }, 3936, "udp" }, - { "dvbservdsc", { NULL }, 3937, "tcp" }, - { "dvbservdsc", { NULL }, 3937, "udp" }, - { "dbcontrol_agent", { NULL }, 3938, "tcp" }, - { "dbcontrol_agent", { NULL }, 3938, "udp" }, - { "aamp", { NULL }, 3939, "tcp" }, - { "aamp", { NULL }, 3939, "udp" }, - { "xecp-node", { NULL }, 3940, "tcp" }, - { "xecp-node", { NULL }, 3940, "udp" }, - { "homeportal-web", { NULL }, 3941, "tcp" }, - { "homeportal-web", { NULL }, 3941, "udp" }, - { "srdp", { NULL }, 3942, "tcp" }, - { "srdp", { NULL }, 3942, "udp" }, - { "tig", { NULL }, 3943, "tcp" }, - { "tig", { NULL }, 3943, "udp" }, - { "sops", { NULL }, 3944, "tcp" }, - { "sops", { NULL }, 3944, "udp" }, - { "emcads", { NULL }, 3945, "tcp" }, - { "emcads", { NULL }, 3945, "udp" }, - { "backupedge", { NULL }, 3946, "tcp" }, - { "backupedge", { NULL }, 3946, "udp" }, - { "ccp", { NULL }, 3947, "tcp" }, - { "ccp", { NULL }, 3947, "udp" }, - { "apdap", { NULL }, 3948, "tcp" }, - { "apdap", { NULL }, 3948, "udp" }, - { "drip", { NULL }, 3949, "tcp" }, - { "drip", { NULL }, 3949, "udp" }, - { "namemunge", { NULL }, 3950, "tcp" }, - { "namemunge", { NULL }, 3950, "udp" }, - { "pwgippfax", { NULL }, 3951, "tcp" }, - { "pwgippfax", { NULL }, 3951, "udp" }, - { "i3-sessionmgr", { NULL }, 3952, "tcp" }, - { "i3-sessionmgr", { NULL }, 3952, "udp" }, - { "xmlink-connect", { NULL }, 3953, "tcp" }, - { "xmlink-connect", { NULL }, 3953, "udp" }, - { "adrep", { NULL }, 3954, "tcp" }, - { "adrep", { NULL }, 3954, "udp" }, - { "p2pcommunity", { NULL }, 3955, "tcp" }, - { "p2pcommunity", { NULL }, 3955, "udp" }, - { "gvcp", { NULL }, 3956, "tcp" }, - { "gvcp", { NULL }, 3956, "udp" }, - { "mqe-broker", { NULL }, 3957, "tcp" }, - { "mqe-broker", { NULL }, 3957, "udp" }, - { "mqe-agent", { NULL }, 3958, "tcp" }, - { "mqe-agent", { NULL }, 3958, "udp" }, - { "treehopper", { NULL }, 3959, "tcp" }, - { "treehopper", { NULL }, 3959, "udp" }, - { "bess", { NULL }, 3960, "tcp" }, - { "bess", { NULL }, 3960, "udp" }, - { "proaxess", { NULL }, 3961, "tcp" }, - { "proaxess", { NULL }, 3961, "udp" }, - { "sbi-agent", { NULL }, 3962, "tcp" }, - { "sbi-agent", { NULL }, 3962, "udp" }, - { "thrp", { NULL }, 3963, "tcp" }, - { "thrp", { NULL }, 3963, "udp" }, - { "sasggprs", { NULL }, 3964, "tcp" }, - { "sasggprs", { NULL }, 3964, "udp" }, - { "ati-ip-to-ncpe", { NULL }, 3965, "tcp" }, - { "ati-ip-to-ncpe", { NULL }, 3965, "udp" }, - { "bflckmgr", { NULL }, 3966, "tcp" }, - { "bflckmgr", { NULL }, 3966, "udp" }, - { "ppsms", { NULL }, 3967, "tcp" }, - { "ppsms", { NULL }, 3967, "udp" }, - { "ianywhere-dbns", { NULL }, 3968, "tcp" }, - { "ianywhere-dbns", { NULL }, 3968, "udp" }, - { "landmarks", { NULL }, 3969, "tcp" }, - { "landmarks", { NULL }, 3969, "udp" }, - { "lanrevagent", { NULL }, 3970, "tcp" }, - { "lanrevagent", { NULL }, 3970, "udp" }, - { "lanrevserver", { NULL }, 3971, "tcp" }, - { "lanrevserver", { NULL }, 3971, "udp" }, - { "iconp", { NULL }, 3972, "tcp" }, - { "iconp", { NULL }, 3972, "udp" }, - { "progistics", { NULL }, 3973, "tcp" }, - { "progistics", { NULL }, 3973, "udp" }, - { "citysearch", { NULL }, 3974, "tcp" }, - { "citysearch", { NULL }, 3974, "udp" }, - { "airshot", { NULL }, 3975, "tcp" }, - { "airshot", { NULL }, 3975, "udp" }, - { "opswagent", { NULL }, 3976, "tcp" }, - { "opswagent", { NULL }, 3976, "udp" }, - { "opswmanager", { NULL }, 3977, "tcp" }, - { "opswmanager", { NULL }, 3977, "udp" }, - { "secure-cfg-svr", { NULL }, 3978, "tcp" }, - { "secure-cfg-svr", { NULL }, 3978, "udp" }, - { "smwan", { NULL }, 3979, "tcp" }, - { "smwan", { NULL }, 3979, "udp" }, - { "acms", { NULL }, 3980, "tcp" }, - { "acms", { NULL }, 3980, "udp" }, - { "starfish", { NULL }, 3981, "tcp" }, - { "starfish", { NULL }, 3981, "udp" }, - { "eis", { NULL }, 3982, "tcp" }, - { "eis", { NULL }, 3982, "udp" }, - { "eisp", { NULL }, 3983, "tcp" }, - { "eisp", { NULL }, 3983, "udp" }, - { "mapper-nodemgr", { NULL }, 3984, "tcp" }, - { "mapper-nodemgr", { NULL }, 3984, "udp" }, - { "mapper-mapethd", { NULL }, 3985, "tcp" }, - { "mapper-mapethd", { NULL }, 3985, "udp" }, - { "mapper-ws_ethd", { NULL }, 3986, "tcp" }, - { "mapper-ws_ethd", { NULL }, 3986, "udp" }, - { "centerline", { NULL }, 3987, "tcp" }, - { "centerline", { NULL }, 3987, "udp" }, - { "dcs-config", { NULL }, 3988, "tcp" }, - { "dcs-config", { NULL }, 3988, "udp" }, - { "bv-queryengine", { NULL }, 3989, "tcp" }, - { "bv-queryengine", { NULL }, 3989, "udp" }, - { "bv-is", { NULL }, 3990, "tcp" }, - { "bv-is", { NULL }, 3990, "udp" }, - { "bv-smcsrv", { NULL }, 3991, "tcp" }, - { "bv-smcsrv", { NULL }, 3991, "udp" }, - { "bv-ds", { NULL }, 3992, "tcp" }, - { "bv-ds", { NULL }, 3992, "udp" }, - { "bv-agent", { NULL }, 3993, "tcp" }, - { "bv-agent", { NULL }, 3993, "udp" }, - { "iss-mgmt-ssl", { NULL }, 3995, "tcp" }, - { "iss-mgmt-ssl", { NULL }, 3995, "udp" }, - { "abcsoftware", { NULL }, 3996, "tcp" }, - { "abcsoftware", { NULL }, 3996, "udp" }, - { "agentsease-db", { NULL }, 3997, "tcp" }, - { "agentsease-db", { NULL }, 3997, "udp" }, - { "dnx", { NULL }, 3998, "tcp" }, - { "dnx", { NULL }, 3998, "udp" }, - { "nvcnet", { NULL }, 3999, "tcp" }, - { "nvcnet", { NULL }, 3999, "udp" }, - { "terabase", { NULL }, 4000, "tcp" }, - { "terabase", { NULL }, 4000, "udp" }, - { "newoak", { NULL }, 4001, "tcp" }, - { "newoak", { NULL }, 4001, "udp" }, - { "pxc-spvr-ft", { NULL }, 4002, "tcp" }, - { "pxc-spvr-ft", { NULL }, 4002, "udp" }, - { "pxc-splr-ft", { NULL }, 4003, "tcp" }, - { "pxc-splr-ft", { NULL }, 4003, "udp" }, - { "pxc-roid", { NULL }, 4004, "tcp" }, - { "pxc-roid", { NULL }, 4004, "udp" }, - { "pxc-pin", { NULL }, 4005, "tcp" }, - { "pxc-pin", { NULL }, 4005, "udp" }, - { "pxc-spvr", { NULL }, 4006, "tcp" }, - { "pxc-spvr", { NULL }, 4006, "udp" }, - { "pxc-splr", { NULL }, 4007, "tcp" }, - { "pxc-splr", { NULL }, 4007, "udp" }, - { "netcheque", { NULL }, 4008, "tcp" }, - { "netcheque", { NULL }, 4008, "udp" }, - { "chimera-hwm", { NULL }, 4009, "tcp" }, - { "chimera-hwm", { NULL }, 4009, "udp" }, - { "samsung-unidex", { NULL }, 4010, "tcp" }, - { "samsung-unidex", { NULL }, 4010, "udp" }, - { "altserviceboot", { NULL }, 4011, "tcp" }, - { "altserviceboot", { NULL }, 4011, "udp" }, - { "pda-gate", { NULL }, 4012, "tcp" }, - { "pda-gate", { NULL }, 4012, "udp" }, - { "acl-manager", { NULL }, 4013, "tcp" }, - { "acl-manager", { NULL }, 4013, "udp" }, - { "taiclock", { NULL }, 4014, "tcp" }, - { "taiclock", { NULL }, 4014, "udp" }, - { "talarian-mcast1", { NULL }, 4015, "tcp" }, - { "talarian-mcast1", { NULL }, 4015, "udp" }, - { "talarian-mcast2", { NULL }, 4016, "tcp" }, - { "talarian-mcast2", { NULL }, 4016, "udp" }, - { "talarian-mcast3", { NULL }, 4017, "tcp" }, - { "talarian-mcast3", { NULL }, 4017, "udp" }, - { "talarian-mcast4", { NULL }, 4018, "tcp" }, - { "talarian-mcast4", { NULL }, 4018, "udp" }, - { "talarian-mcast5", { NULL }, 4019, "tcp" }, - { "talarian-mcast5", { NULL }, 4019, "udp" }, - { "trap", { NULL }, 4020, "tcp" }, - { "trap", { NULL }, 4020, "udp" }, - { "nexus-portal", { NULL }, 4021, "tcp" }, - { "nexus-portal", { NULL }, 4021, "udp" }, - { "dnox", { NULL }, 4022, "tcp" }, - { "dnox", { NULL }, 4022, "udp" }, - { "esnm-zoning", { NULL }, 4023, "tcp" }, - { "esnm-zoning", { NULL }, 4023, "udp" }, - { "tnp1-port", { NULL }, 4024, "tcp" }, - { "tnp1-port", { NULL }, 4024, "udp" }, - { "partimage", { NULL }, 4025, "tcp" }, - { "partimage", { NULL }, 4025, "udp" }, - { "as-debug", { NULL }, 4026, "tcp" }, - { "as-debug", { NULL }, 4026, "udp" }, - { "bxp", { NULL }, 4027, "tcp" }, - { "bxp", { NULL }, 4027, "udp" }, - { "dtserver-port", { NULL }, 4028, "tcp" }, - { "dtserver-port", { NULL }, 4028, "udp" }, - { "ip-qsig", { NULL }, 4029, "tcp" }, - { "ip-qsig", { NULL }, 4029, "udp" }, - { "jdmn-port", { NULL }, 4030, "tcp" }, - { "jdmn-port", { NULL }, 4030, "udp" }, - { "suucp", { NULL }, 4031, "tcp" }, - { "suucp", { NULL }, 4031, "udp" }, - { "vrts-auth-port", { NULL }, 4032, "tcp" }, - { "vrts-auth-port", { NULL }, 4032, "udp" }, - { "sanavigator", { NULL }, 4033, "tcp" }, - { "sanavigator", { NULL }, 4033, "udp" }, - { "ubxd", { NULL }, 4034, "tcp" }, - { "ubxd", { NULL }, 4034, "udp" }, - { "wap-push-http", { NULL }, 4035, "tcp" }, - { "wap-push-http", { NULL }, 4035, "udp" }, - { "wap-push-https", { NULL }, 4036, "tcp" }, - { "wap-push-https", { NULL }, 4036, "udp" }, - { "ravehd", { NULL }, 4037, "tcp" }, - { "ravehd", { NULL }, 4037, "udp" }, - { "fazzt-ptp", { NULL }, 4038, "tcp" }, - { "fazzt-ptp", { NULL }, 4038, "udp" }, - { "fazzt-admin", { NULL }, 4039, "tcp" }, - { "fazzt-admin", { NULL }, 4039, "udp" }, - { "yo-main", { NULL }, 4040, "tcp" }, - { "yo-main", { NULL }, 4040, "udp" }, - { "houston", { NULL }, 4041, "tcp" }, - { "houston", { NULL }, 4041, "udp" }, - { "ldxp", { NULL }, 4042, "tcp" }, - { "ldxp", { NULL }, 4042, "udp" }, - { "nirp", { NULL }, 4043, "tcp" }, - { "nirp", { NULL }, 4043, "udp" }, - { "ltp", { NULL }, 4044, "tcp" }, - { "ltp", { NULL }, 4044, "udp" }, - { "npp", { NULL }, 4045, "tcp" }, - { "npp", { NULL }, 4045, "udp" }, - { "acp-proto", { NULL }, 4046, "tcp" }, - { "acp-proto", { NULL }, 4046, "udp" }, - { "ctp-state", { NULL }, 4047, "tcp" }, - { "ctp-state", { NULL }, 4047, "udp" }, - { "wafs", { NULL }, 4049, "tcp" }, - { "wafs", { NULL }, 4049, "udp" }, - { "cisco-wafs", { NULL }, 4050, "tcp" }, - { "cisco-wafs", { NULL }, 4050, "udp" }, - { "cppdp", { NULL }, 4051, "tcp" }, - { "cppdp", { NULL }, 4051, "udp" }, - { "interact", { NULL }, 4052, "tcp" }, - { "interact", { NULL }, 4052, "udp" }, - { "ccu-comm-1", { NULL }, 4053, "tcp" }, - { "ccu-comm-1", { NULL }, 4053, "udp" }, - { "ccu-comm-2", { NULL }, 4054, "tcp" }, - { "ccu-comm-2", { NULL }, 4054, "udp" }, - { "ccu-comm-3", { NULL }, 4055, "tcp" }, - { "ccu-comm-3", { NULL }, 4055, "udp" }, - { "lms", { NULL }, 4056, "tcp" }, - { "lms", { NULL }, 4056, "udp" }, - { "wfm", { NULL }, 4057, "tcp" }, - { "wfm", { NULL }, 4057, "udp" }, - { "kingfisher", { NULL }, 4058, "tcp" }, - { "kingfisher", { NULL }, 4058, "udp" }, - { "dlms-cosem", { NULL }, 4059, "tcp" }, - { "dlms-cosem", { NULL }, 4059, "udp" }, - { "dsmeter_iatc", { NULL }, 4060, "tcp" }, - { "dsmeter_iatc", { NULL }, 4060, "udp" }, - { "ice-location", { NULL }, 4061, "tcp" }, - { "ice-location", { NULL }, 4061, "udp" }, - { "ice-slocation", { NULL }, 4062, "tcp" }, - { "ice-slocation", { NULL }, 4062, "udp" }, - { "ice-router", { NULL }, 4063, "tcp" }, - { "ice-router", { NULL }, 4063, "udp" }, - { "ice-srouter", { NULL }, 4064, "tcp" }, - { "ice-srouter", { NULL }, 4064, "udp" }, - { "avanti_cdp", { NULL }, 4065, "tcp" }, - { "avanti_cdp", { NULL }, 4065, "udp" }, - { "pmas", { NULL }, 4066, "tcp" }, - { "pmas", { NULL }, 4066, "udp" }, - { "idp", { NULL }, 4067, "tcp" }, - { "idp", { NULL }, 4067, "udp" }, - { "ipfltbcst", { NULL }, 4068, "tcp" }, - { "ipfltbcst", { NULL }, 4068, "udp" }, - { "minger", { NULL }, 4069, "tcp" }, - { "minger", { NULL }, 4069, "udp" }, - { "tripe", { NULL }, 4070, "tcp" }, - { "tripe", { NULL }, 4070, "udp" }, - { "aibkup", { NULL }, 4071, "tcp" }, - { "aibkup", { NULL }, 4071, "udp" }, - { "zieto-sock", { NULL }, 4072, "tcp" }, - { "zieto-sock", { NULL }, 4072, "udp" }, - { "iRAPP", { NULL }, 4073, "tcp" }, - { "iRAPP", { NULL }, 4073, "udp" }, - { "cequint-cityid", { NULL }, 4074, "tcp" }, - { "cequint-cityid", { NULL }, 4074, "udp" }, - { "perimlan", { NULL }, 4075, "tcp" }, - { "perimlan", { NULL }, 4075, "udp" }, - { "seraph", { NULL }, 4076, "tcp" }, - { "seraph", { NULL }, 4076, "udp" }, - { "ascomalarm", { NULL }, 4077, "udp" }, - { "cssp", { NULL }, 4078, "tcp" }, - { "santools", { NULL }, 4079, "tcp" }, - { "santools", { NULL }, 4079, "udp" }, - { "lorica-in", { NULL }, 4080, "tcp" }, - { "lorica-in", { NULL }, 4080, "udp" }, - { "lorica-in-sec", { NULL }, 4081, "tcp" }, - { "lorica-in-sec", { NULL }, 4081, "udp" }, - { "lorica-out", { NULL }, 4082, "tcp" }, - { "lorica-out", { NULL }, 4082, "udp" }, - { "lorica-out-sec", { NULL }, 4083, "tcp" }, - { "lorica-out-sec", { NULL }, 4083, "udp" }, - { "fortisphere-vm", { NULL }, 4084, "udp" }, - { "ezmessagesrv", { NULL }, 4085, "tcp" }, - { "ftsync", { NULL }, 4086, "udp" }, - { "applusservice", { NULL }, 4087, "tcp" }, - { "npsp", { NULL }, 4088, "tcp" }, - { "opencore", { NULL }, 4089, "tcp" }, - { "opencore", { NULL }, 4089, "udp" }, - { "omasgport", { NULL }, 4090, "tcp" }, - { "omasgport", { NULL }, 4090, "udp" }, - { "ewinstaller", { NULL }, 4091, "tcp" }, - { "ewinstaller", { NULL }, 4091, "udp" }, - { "ewdgs", { NULL }, 4092, "tcp" }, - { "ewdgs", { NULL }, 4092, "udp" }, - { "pvxpluscs", { NULL }, 4093, "tcp" }, - { "pvxpluscs", { NULL }, 4093, "udp" }, - { "sysrqd", { NULL }, 4094, "tcp" }, - { "sysrqd", { NULL }, 4094, "udp" }, - { "xtgui", { NULL }, 4095, "tcp" }, - { "xtgui", { NULL }, 4095, "udp" }, - { "bre", { NULL }, 4096, "tcp" }, - { "bre", { NULL }, 4096, "udp" }, - { "patrolview", { NULL }, 4097, "tcp" }, - { "patrolview", { NULL }, 4097, "udp" }, - { "drmsfsd", { NULL }, 4098, "tcp" }, - { "drmsfsd", { NULL }, 4098, "udp" }, - { "dpcp", { NULL }, 4099, "tcp" }, - { "dpcp", { NULL }, 4099, "udp" }, - { "igo-incognito", { NULL }, 4100, "tcp" }, - { "igo-incognito", { NULL }, 4100, "udp" }, - { "brlp-0", { NULL }, 4101, "tcp" }, - { "brlp-0", { NULL }, 4101, "udp" }, - { "brlp-1", { NULL }, 4102, "tcp" }, - { "brlp-1", { NULL }, 4102, "udp" }, - { "brlp-2", { NULL }, 4103, "tcp" }, - { "brlp-2", { NULL }, 4103, "udp" }, - { "brlp-3", { NULL }, 4104, "tcp" }, - { "brlp-3", { NULL }, 4104, "udp" }, - { "shofarplayer", { NULL }, 4105, "tcp" }, - { "shofarplayer", { NULL }, 4105, "udp" }, - { "synchronite", { NULL }, 4106, "tcp" }, - { "synchronite", { NULL }, 4106, "udp" }, - { "j-ac", { NULL }, 4107, "tcp" }, - { "j-ac", { NULL }, 4107, "udp" }, - { "accel", { NULL }, 4108, "tcp" }, - { "accel", { NULL }, 4108, "udp" }, - { "izm", { NULL }, 4109, "tcp" }, - { "izm", { NULL }, 4109, "udp" }, - { "g2tag", { NULL }, 4110, "tcp" }, - { "g2tag", { NULL }, 4110, "udp" }, - { "xgrid", { NULL }, 4111, "tcp" }, - { "xgrid", { NULL }, 4111, "udp" }, - { "apple-vpns-rp", { NULL }, 4112, "tcp" }, - { "apple-vpns-rp", { NULL }, 4112, "udp" }, - { "aipn-reg", { NULL }, 4113, "tcp" }, - { "aipn-reg", { NULL }, 4113, "udp" }, - { "jomamqmonitor", { NULL }, 4114, "tcp" }, - { "jomamqmonitor", { NULL }, 4114, "udp" }, - { "cds", { NULL }, 4115, "tcp" }, - { "cds", { NULL }, 4115, "udp" }, - { "smartcard-tls", { NULL }, 4116, "tcp" }, - { "smartcard-tls", { NULL }, 4116, "udp" }, - { "hillrserv", { NULL }, 4117, "tcp" }, - { "hillrserv", { NULL }, 4117, "udp" }, - { "netscript", { NULL }, 4118, "tcp" }, - { "netscript", { NULL }, 4118, "udp" }, - { "assuria-slm", { NULL }, 4119, "tcp" }, - { "assuria-slm", { NULL }, 4119, "udp" }, - { "e-builder", { NULL }, 4121, "tcp" }, - { "e-builder", { NULL }, 4121, "udp" }, - { "fprams", { NULL }, 4122, "tcp" }, - { "fprams", { NULL }, 4122, "udp" }, - { "z-wave", { NULL }, 4123, "tcp" }, - { "z-wave", { NULL }, 4123, "udp" }, - { "tigv2", { NULL }, 4124, "tcp" }, - { "tigv2", { NULL }, 4124, "udp" }, - { "opsview-envoy", { NULL }, 4125, "tcp" }, - { "opsview-envoy", { NULL }, 4125, "udp" }, - { "ddrepl", { NULL }, 4126, "tcp" }, - { "ddrepl", { NULL }, 4126, "udp" }, - { "unikeypro", { NULL }, 4127, "tcp" }, - { "unikeypro", { NULL }, 4127, "udp" }, - { "nufw", { NULL }, 4128, "tcp" }, - { "nufw", { NULL }, 4128, "udp" }, - { "nuauth", { NULL }, 4129, "tcp" }, - { "nuauth", { NULL }, 4129, "udp" }, - { "fronet", { NULL }, 4130, "tcp" }, - { "fronet", { NULL }, 4130, "udp" }, - { "stars", { NULL }, 4131, "tcp" }, - { "stars", { NULL }, 4131, "udp" }, - { "nuts_dem", { NULL }, 4132, "tcp" }, - { "nuts_dem", { NULL }, 4132, "udp" }, - { "nuts_bootp", { NULL }, 4133, "tcp" }, - { "nuts_bootp", { NULL }, 4133, "udp" }, - { "nifty-hmi", { NULL }, 4134, "tcp" }, - { "nifty-hmi", { NULL }, 4134, "udp" }, - { "cl-db-attach", { NULL }, 4135, "tcp" }, - { "cl-db-attach", { NULL }, 4135, "udp" }, - { "cl-db-request", { NULL }, 4136, "tcp" }, - { "cl-db-request", { NULL }, 4136, "udp" }, - { "cl-db-remote", { NULL }, 4137, "tcp" }, - { "cl-db-remote", { NULL }, 4137, "udp" }, - { "nettest", { NULL }, 4138, "tcp" }, - { "nettest", { NULL }, 4138, "udp" }, - { "thrtx", { NULL }, 4139, "tcp" }, - { "thrtx", { NULL }, 4139, "udp" }, - { "cedros_fds", { NULL }, 4140, "tcp" }, - { "cedros_fds", { NULL }, 4140, "udp" }, - { "oirtgsvc", { NULL }, 4141, "tcp" }, - { "oirtgsvc", { NULL }, 4141, "udp" }, - { "oidocsvc", { NULL }, 4142, "tcp" }, - { "oidocsvc", { NULL }, 4142, "udp" }, - { "oidsr", { NULL }, 4143, "tcp" }, - { "oidsr", { NULL }, 4143, "udp" }, - { "vvr-control", { NULL }, 4145, "tcp" }, - { "vvr-control", { NULL }, 4145, "udp" }, - { "tgcconnect", { NULL }, 4146, "tcp" }, - { "tgcconnect", { NULL }, 4146, "udp" }, - { "vrxpservman", { NULL }, 4147, "tcp" }, - { "vrxpservman", { NULL }, 4147, "udp" }, - { "hhb-handheld", { NULL }, 4148, "tcp" }, - { "hhb-handheld", { NULL }, 4148, "udp" }, - { "agslb", { NULL }, 4149, "tcp" }, - { "agslb", { NULL }, 4149, "udp" }, - { "PowerAlert-nsa", { NULL }, 4150, "tcp" }, - { "PowerAlert-nsa", { NULL }, 4150, "udp" }, - { "menandmice_noh", { NULL }, 4151, "tcp" }, - { "menandmice_noh", { NULL }, 4151, "udp" }, - { "idig_mux", { NULL }, 4152, "tcp" }, - { "idig_mux", { NULL }, 4152, "udp" }, - { "mbl-battd", { NULL }, 4153, "tcp" }, - { "mbl-battd", { NULL }, 4153, "udp" }, - { "atlinks", { NULL }, 4154, "tcp" }, - { "atlinks", { NULL }, 4154, "udp" }, - { "bzr", { NULL }, 4155, "tcp" }, - { "bzr", { NULL }, 4155, "udp" }, - { "stat-results", { NULL }, 4156, "tcp" }, - { "stat-results", { NULL }, 4156, "udp" }, - { "stat-scanner", { NULL }, 4157, "tcp" }, - { "stat-scanner", { NULL }, 4157, "udp" }, - { "stat-cc", { NULL }, 4158, "tcp" }, - { "stat-cc", { NULL }, 4158, "udp" }, - { "nss", { NULL }, 4159, "tcp" }, - { "nss", { NULL }, 4159, "udp" }, - { "jini-discovery", { NULL }, 4160, "tcp" }, - { "jini-discovery", { NULL }, 4160, "udp" }, - { "omscontact", { NULL }, 4161, "tcp" }, - { "omscontact", { NULL }, 4161, "udp" }, - { "omstopology", { NULL }, 4162, "tcp" }, - { "omstopology", { NULL }, 4162, "udp" }, - { "silverpeakpeer", { NULL }, 4163, "tcp" }, - { "silverpeakpeer", { NULL }, 4163, "udp" }, - { "silverpeakcomm", { NULL }, 4164, "tcp" }, - { "silverpeakcomm", { NULL }, 4164, "udp" }, - { "altcp", { NULL }, 4165, "tcp" }, - { "altcp", { NULL }, 4165, "udp" }, - { "joost", { NULL }, 4166, "tcp" }, - { "joost", { NULL }, 4166, "udp" }, - { "ddgn", { NULL }, 4167, "tcp" }, - { "ddgn", { NULL }, 4167, "udp" }, - { "pslicser", { NULL }, 4168, "tcp" }, - { "pslicser", { NULL }, 4168, "udp" }, - { "iadt", { NULL }, 4169, "tcp" }, - { "iadt-disc", { NULL }, 4169, "udp" }, - { "d-cinema-csp", { NULL }, 4170, "tcp" }, - { "ml-svnet", { NULL }, 4171, "tcp" }, - { "pcoip", { NULL }, 4172, "tcp" }, - { "pcoip", { NULL }, 4172, "udp" }, - { "smcluster", { NULL }, 4174, "tcp" }, - { "bccp", { NULL }, 4175, "tcp" }, - { "tl-ipcproxy", { NULL }, 4176, "tcp" }, - { "wello", { NULL }, 4177, "tcp" }, - { "wello", { NULL }, 4177, "udp" }, - { "storman", { NULL }, 4178, "tcp" }, - { "storman", { NULL }, 4178, "udp" }, - { "MaxumSP", { NULL }, 4179, "tcp" }, - { "MaxumSP", { NULL }, 4179, "udp" }, - { "httpx", { NULL }, 4180, "tcp" }, - { "httpx", { NULL }, 4180, "udp" }, - { "macbak", { NULL }, 4181, "tcp" }, - { "macbak", { NULL }, 4181, "udp" }, - { "pcptcpservice", { NULL }, 4182, "tcp" }, - { "pcptcpservice", { NULL }, 4182, "udp" }, - { "gmmp", { NULL }, 4183, "tcp" }, - { "gmmp", { NULL }, 4183, "udp" }, - { "universe_suite", { NULL }, 4184, "tcp" }, - { "universe_suite", { NULL }, 4184, "udp" }, - { "wcpp", { NULL }, 4185, "tcp" }, - { "wcpp", { NULL }, 4185, "udp" }, - { "boxbackupstore", { NULL }, 4186, "tcp" }, - { "csc_proxy", { NULL }, 4187, "tcp" }, - { "vatata", { NULL }, 4188, "tcp" }, - { "vatata", { NULL }, 4188, "udp" }, - { "pcep", { NULL }, 4189, "tcp" }, - { "sieve", { NULL }, 4190, "tcp" }, - { "dsmipv6", { NULL }, 4191, "udp" }, - { "azeti", { NULL }, 4192, "tcp" }, - { "azeti-bd", { NULL }, 4192, "udp" }, - { "pvxplusio", { NULL }, 4193, "tcp" }, - { "eims-admin", { NULL }, 4199, "tcp" }, - { "eims-admin", { NULL }, 4199, "udp" }, - { "corelccam", { NULL }, 4300, "tcp" }, - { "corelccam", { NULL }, 4300, "udp" }, - { "d-data", { NULL }, 4301, "tcp" }, - { "d-data", { NULL }, 4301, "udp" }, - { "d-data-control", { NULL }, 4302, "tcp" }, - { "d-data-control", { NULL }, 4302, "udp" }, - { "srcp", { NULL }, 4303, "tcp" }, - { "srcp", { NULL }, 4303, "udp" }, - { "owserver", { NULL }, 4304, "tcp" }, - { "owserver", { NULL }, 4304, "udp" }, - { "batman", { NULL }, 4305, "tcp" }, - { "batman", { NULL }, 4305, "udp" }, - { "pinghgl", { NULL }, 4306, "tcp" }, - { "pinghgl", { NULL }, 4306, "udp" }, - { "visicron-vs", { NULL }, 4307, "tcp" }, - { "visicron-vs", { NULL }, 4307, "udp" }, - { "compx-lockview", { NULL }, 4308, "tcp" }, - { "compx-lockview", { NULL }, 4308, "udp" }, - { "dserver", { NULL }, 4309, "tcp" }, - { "dserver", { NULL }, 4309, "udp" }, - { "mirrtex", { NULL }, 4310, "tcp" }, - { "mirrtex", { NULL }, 4310, "udp" }, - { "p6ssmc", { NULL }, 4311, "tcp" }, - { "pscl-mgt", { NULL }, 4312, "tcp" }, - { "perrla", { NULL }, 4313, "tcp" }, - { "fdt-rcatp", { NULL }, 4320, "tcp" }, - { "fdt-rcatp", { NULL }, 4320, "udp" }, - { "rwhois", { NULL }, 4321, "tcp" }, - { "rwhois", { NULL }, 4321, "udp" }, - { "trim-event", { NULL }, 4322, "tcp" }, - { "trim-event", { NULL }, 4322, "udp" }, - { "trim-ice", { NULL }, 4323, "tcp" }, - { "trim-ice", { NULL }, 4323, "udp" }, - { "balour", { NULL }, 4324, "tcp" }, - { "balour", { NULL }, 4324, "udp" }, - { "geognosisman", { NULL }, 4325, "tcp" }, - { "geognosisman", { NULL }, 4325, "udp" }, - { "geognosis", { NULL }, 4326, "tcp" }, - { "geognosis", { NULL }, 4326, "udp" }, - { "jaxer-web", { NULL }, 4327, "tcp" }, - { "jaxer-web", { NULL }, 4327, "udp" }, - { "jaxer-manager", { NULL }, 4328, "tcp" }, - { "jaxer-manager", { NULL }, 4328, "udp" }, - { "publiqare-sync", { NULL }, 4329, "tcp" }, - { "gaia", { NULL }, 4340, "tcp" }, - { "gaia", { NULL }, 4340, "udp" }, - { "lisp-data", { NULL }, 4341, "tcp" }, - { "lisp-data", { NULL }, 4341, "udp" }, - { "lisp-cons", { NULL }, 4342, "tcp" }, - { "lisp-control", { NULL }, 4342, "udp" }, - { "unicall", { NULL }, 4343, "tcp" }, - { "unicall", { NULL }, 4343, "udp" }, - { "vinainstall", { NULL }, 4344, "tcp" }, - { "vinainstall", { NULL }, 4344, "udp" }, - { "m4-network-as", { NULL }, 4345, "tcp" }, - { "m4-network-as", { NULL }, 4345, "udp" }, - { "elanlm", { NULL }, 4346, "tcp" }, - { "elanlm", { NULL }, 4346, "udp" }, - { "lansurveyor", { NULL }, 4347, "tcp" }, - { "lansurveyor", { NULL }, 4347, "udp" }, - { "itose", { NULL }, 4348, "tcp" }, - { "itose", { NULL }, 4348, "udp" }, - { "fsportmap", { NULL }, 4349, "tcp" }, - { "fsportmap", { NULL }, 4349, "udp" }, - { "net-device", { NULL }, 4350, "tcp" }, - { "net-device", { NULL }, 4350, "udp" }, - { "plcy-net-svcs", { NULL }, 4351, "tcp" }, - { "plcy-net-svcs", { NULL }, 4351, "udp" }, - { "pjlink", { NULL }, 4352, "tcp" }, - { "pjlink", { NULL }, 4352, "udp" }, - { "f5-iquery", { NULL }, 4353, "tcp" }, - { "f5-iquery", { NULL }, 4353, "udp" }, - { "qsnet-trans", { NULL }, 4354, "tcp" }, - { "qsnet-trans", { NULL }, 4354, "udp" }, - { "qsnet-workst", { NULL }, 4355, "tcp" }, - { "qsnet-workst", { NULL }, 4355, "udp" }, - { "qsnet-assist", { NULL }, 4356, "tcp" }, - { "qsnet-assist", { NULL }, 4356, "udp" }, - { "qsnet-cond", { NULL }, 4357, "tcp" }, - { "qsnet-cond", { NULL }, 4357, "udp" }, - { "qsnet-nucl", { NULL }, 4358, "tcp" }, - { "qsnet-nucl", { NULL }, 4358, "udp" }, - { "omabcastltkm", { NULL }, 4359, "tcp" }, - { "omabcastltkm", { NULL }, 4359, "udp" }, - { "matrix_vnet", { NULL }, 4360, "tcp" }, - { "nacnl", { NULL }, 4361, "udp" }, - { "afore-vdp-disc", { NULL }, 4362, "udp" }, - { "wxbrief", { NULL }, 4368, "tcp" }, - { "wxbrief", { NULL }, 4368, "udp" }, - { "epmd", { NULL }, 4369, "tcp" }, - { "epmd", { NULL }, 4369, "udp" }, - { "elpro_tunnel", { NULL }, 4370, "tcp" }, - { "elpro_tunnel", { NULL }, 4370, "udp" }, - { "l2c-control", { NULL }, 4371, "tcp" }, - { "l2c-disc", { NULL }, 4371, "udp" }, - { "l2c-data", { NULL }, 4372, "tcp" }, - { "l2c-data", { NULL }, 4372, "udp" }, - { "remctl", { NULL }, 4373, "tcp" }, - { "remctl", { NULL }, 4373, "udp" }, - { "psi-ptt", { NULL }, 4374, "tcp" }, - { "tolteces", { NULL }, 4375, "tcp" }, - { "tolteces", { NULL }, 4375, "udp" }, - { "bip", { NULL }, 4376, "tcp" }, - { "bip", { NULL }, 4376, "udp" }, - { "cp-spxsvr", { NULL }, 4377, "tcp" }, - { "cp-spxsvr", { NULL }, 4377, "udp" }, - { "cp-spxdpy", { NULL }, 4378, "tcp" }, - { "cp-spxdpy", { NULL }, 4378, "udp" }, - { "ctdb", { NULL }, 4379, "tcp" }, - { "ctdb", { NULL }, 4379, "udp" }, - { "xandros-cms", { NULL }, 4389, "tcp" }, - { "xandros-cms", { NULL }, 4389, "udp" }, - { "wiegand", { NULL }, 4390, "tcp" }, - { "wiegand", { NULL }, 4390, "udp" }, - { "apwi-imserver", { NULL }, 4391, "tcp" }, - { "apwi-rxserver", { NULL }, 4392, "tcp" }, - { "apwi-rxspooler", { NULL }, 4393, "tcp" }, - { "apwi-disc", { NULL }, 4394, "udp" }, - { "omnivisionesx", { NULL }, 4395, "tcp" }, - { "omnivisionesx", { NULL }, 4395, "udp" }, - { "fly", { NULL }, 4396, "tcp" }, - { "ds-srv", { NULL }, 4400, "tcp" }, - { "ds-srv", { NULL }, 4400, "udp" }, - { "ds-srvr", { NULL }, 4401, "tcp" }, - { "ds-srvr", { NULL }, 4401, "udp" }, - { "ds-clnt", { NULL }, 4402, "tcp" }, - { "ds-clnt", { NULL }, 4402, "udp" }, - { "ds-user", { NULL }, 4403, "tcp" }, - { "ds-user", { NULL }, 4403, "udp" }, - { "ds-admin", { NULL }, 4404, "tcp" }, - { "ds-admin", { NULL }, 4404, "udp" }, - { "ds-mail", { NULL }, 4405, "tcp" }, - { "ds-mail", { NULL }, 4405, "udp" }, - { "ds-slp", { NULL }, 4406, "tcp" }, - { "ds-slp", { NULL }, 4406, "udp" }, - { "nacagent", { NULL }, 4407, "tcp" }, - { "slscc", { NULL }, 4408, "tcp" }, - { "netcabinet-com", { NULL }, 4409, "tcp" }, - { "itwo-server", { NULL }, 4410, "tcp" }, - { "netrockey6", { NULL }, 4425, "tcp" }, - { "netrockey6", { NULL }, 4425, "udp" }, - { "beacon-port-2", { NULL }, 4426, "tcp" }, - { "beacon-port-2", { NULL }, 4426, "udp" }, - { "drizzle", { NULL }, 4427, "tcp" }, - { "omviserver", { NULL }, 4428, "tcp" }, - { "omviagent", { NULL }, 4429, "tcp" }, - { "rsqlserver", { NULL }, 4430, "tcp" }, - { "rsqlserver", { NULL }, 4430, "udp" }, - { "wspipe", { NULL }, 4431, "tcp" }, - { "netblox", { NULL }, 4441, "udp" }, - { "saris", { NULL }, 4442, "tcp" }, - { "saris", { NULL }, 4442, "udp" }, - { "pharos", { NULL }, 4443, "tcp" }, - { "pharos", { NULL }, 4443, "udp" }, - { "krb524", { NULL }, 4444, "tcp" }, - { "krb524", { NULL }, 4444, "udp" }, - { "nv-video", { NULL }, 4444, "tcp" }, - { "nv-video", { NULL }, 4444, "udp" }, - { "upnotifyp", { NULL }, 4445, "tcp" }, - { "upnotifyp", { NULL }, 4445, "udp" }, - { "n1-fwp", { NULL }, 4446, "tcp" }, - { "n1-fwp", { NULL }, 4446, "udp" }, - { "n1-rmgmt", { NULL }, 4447, "tcp" }, - { "n1-rmgmt", { NULL }, 4447, "udp" }, - { "asc-slmd", { NULL }, 4448, "tcp" }, - { "asc-slmd", { NULL }, 4448, "udp" }, - { "privatewire", { NULL }, 4449, "tcp" }, - { "privatewire", { NULL }, 4449, "udp" }, - { "camp", { NULL }, 4450, "tcp" }, - { "camp", { NULL }, 4450, "udp" }, - { "ctisystemmsg", { NULL }, 4451, "tcp" }, - { "ctisystemmsg", { NULL }, 4451, "udp" }, - { "ctiprogramload", { NULL }, 4452, "tcp" }, - { "ctiprogramload", { NULL }, 4452, "udp" }, - { "nssalertmgr", { NULL }, 4453, "tcp" }, - { "nssalertmgr", { NULL }, 4453, "udp" }, - { "nssagentmgr", { NULL }, 4454, "tcp" }, - { "nssagentmgr", { NULL }, 4454, "udp" }, - { "prchat-user", { NULL }, 4455, "tcp" }, - { "prchat-user", { NULL }, 4455, "udp" }, - { "prchat-server", { NULL }, 4456, "tcp" }, - { "prchat-server", { NULL }, 4456, "udp" }, - { "prRegister", { NULL }, 4457, "tcp" }, - { "prRegister", { NULL }, 4457, "udp" }, - { "mcp", { NULL }, 4458, "tcp" }, - { "mcp", { NULL }, 4458, "udp" }, - { "hpssmgmt", { NULL }, 4484, "tcp" }, - { "hpssmgmt", { NULL }, 4484, "udp" }, - { "assyst-dr", { NULL }, 4485, "tcp" }, - { "icms", { NULL }, 4486, "tcp" }, - { "icms", { NULL }, 4486, "udp" }, - { "prex-tcp", { NULL }, 4487, "tcp" }, - { "awacs-ice", { NULL }, 4488, "tcp" }, - { "awacs-ice", { NULL }, 4488, "udp" }, - { "ipsec-nat-t", { NULL }, 4500, "tcp" }, - { "ipsec-nat-t", { NULL }, 4500, "udp" }, - { "ehs", { NULL }, 4535, "tcp" }, - { "ehs", { NULL }, 4535, "udp" }, - { "ehs-ssl", { NULL }, 4536, "tcp" }, - { "ehs-ssl", { NULL }, 4536, "udp" }, - { "wssauthsvc", { NULL }, 4537, "tcp" }, - { "wssauthsvc", { NULL }, 4537, "udp" }, - { "swx-gate", { NULL }, 4538, "tcp" }, - { "swx-gate", { NULL }, 4538, "udp" }, - { "worldscores", { NULL }, 4545, "tcp" }, - { "worldscores", { NULL }, 4545, "udp" }, - { "sf-lm", { NULL }, 4546, "tcp" }, - { "sf-lm", { NULL }, 4546, "udp" }, - { "lanner-lm", { NULL }, 4547, "tcp" }, - { "lanner-lm", { NULL }, 4547, "udp" }, - { "synchromesh", { NULL }, 4548, "tcp" }, - { "synchromesh", { NULL }, 4548, "udp" }, - { "aegate", { NULL }, 4549, "tcp" }, - { "aegate", { NULL }, 4549, "udp" }, - { "gds-adppiw-db", { NULL }, 4550, "tcp" }, - { "gds-adppiw-db", { NULL }, 4550, "udp" }, - { "ieee-mih", { NULL }, 4551, "tcp" }, - { "ieee-mih", { NULL }, 4551, "udp" }, - { "menandmice-mon", { NULL }, 4552, "tcp" }, - { "menandmice-mon", { NULL }, 4552, "udp" }, - { "icshostsvc", { NULL }, 4553, "tcp" }, - { "msfrs", { NULL }, 4554, "tcp" }, - { "msfrs", { NULL }, 4554, "udp" }, - { "rsip", { NULL }, 4555, "tcp" }, - { "rsip", { NULL }, 4555, "udp" }, - { "dtn-bundle-tcp", { NULL }, 4556, "tcp" }, - { "dtn-bundle-udp", { NULL }, 4556, "udp" }, - { "mtcevrunqss", { NULL }, 4557, "udp" }, - { "mtcevrunqman", { NULL }, 4558, "udp" }, - { "hylafax", { NULL }, 4559, "tcp" }, - { "hylafax", { NULL }, 4559, "udp" }, - { "kwtc", { NULL }, 4566, "tcp" }, - { "kwtc", { NULL }, 4566, "udp" }, - { "tram", { NULL }, 4567, "tcp" }, - { "tram", { NULL }, 4567, "udp" }, - { "bmc-reporting", { NULL }, 4568, "tcp" }, - { "bmc-reporting", { NULL }, 4568, "udp" }, - { "iax", { NULL }, 4569, "tcp" }, - { "iax", { NULL }, 4569, "udp" }, - { "rid", { NULL }, 4590, "tcp" }, - { "l3t-at-an", { NULL }, 4591, "tcp" }, - { "l3t-at-an", { NULL }, 4591, "udp" }, - { "hrpd-ith-at-an", { NULL }, 4592, "udp" }, - { "ipt-anri-anri", { NULL }, 4593, "tcp" }, - { "ipt-anri-anri", { NULL }, 4593, "udp" }, - { "ias-session", { NULL }, 4594, "tcp" }, - { "ias-session", { NULL }, 4594, "udp" }, - { "ias-paging", { NULL }, 4595, "tcp" }, - { "ias-paging", { NULL }, 4595, "udp" }, - { "ias-neighbor", { NULL }, 4596, "tcp" }, - { "ias-neighbor", { NULL }, 4596, "udp" }, - { "a21-an-1xbs", { NULL }, 4597, "tcp" }, - { "a21-an-1xbs", { NULL }, 4597, "udp" }, - { "a16-an-an", { NULL }, 4598, "tcp" }, - { "a16-an-an", { NULL }, 4598, "udp" }, - { "a17-an-an", { NULL }, 4599, "tcp" }, - { "a17-an-an", { NULL }, 4599, "udp" }, - { "piranha1", { NULL }, 4600, "tcp" }, - { "piranha1", { NULL }, 4600, "udp" }, - { "piranha2", { NULL }, 4601, "tcp" }, - { "piranha2", { NULL }, 4601, "udp" }, - { "mtsserver", { NULL }, 4602, "tcp" }, - { "menandmice-upg", { NULL }, 4603, "tcp" }, - { "playsta2-app", { NULL }, 4658, "tcp" }, - { "playsta2-app", { NULL }, 4658, "udp" }, - { "playsta2-lob", { NULL }, 4659, "tcp" }, - { "playsta2-lob", { NULL }, 4659, "udp" }, - { "smaclmgr", { NULL }, 4660, "tcp" }, - { "smaclmgr", { NULL }, 4660, "udp" }, - { "kar2ouche", { NULL }, 4661, "tcp" }, - { "kar2ouche", { NULL }, 4661, "udp" }, - { "oms", { NULL }, 4662, "tcp" }, - { "oms", { NULL }, 4662, "udp" }, - { "noteit", { NULL }, 4663, "tcp" }, - { "noteit", { NULL }, 4663, "udp" }, - { "ems", { NULL }, 4664, "tcp" }, - { "ems", { NULL }, 4664, "udp" }, - { "contclientms", { NULL }, 4665, "tcp" }, - { "contclientms", { NULL }, 4665, "udp" }, - { "eportcomm", { NULL }, 4666, "tcp" }, - { "eportcomm", { NULL }, 4666, "udp" }, - { "mmacomm", { NULL }, 4667, "tcp" }, - { "mmacomm", { NULL }, 4667, "udp" }, - { "mmaeds", { NULL }, 4668, "tcp" }, - { "mmaeds", { NULL }, 4668, "udp" }, - { "eportcommdata", { NULL }, 4669, "tcp" }, - { "eportcommdata", { NULL }, 4669, "udp" }, - { "light", { NULL }, 4670, "tcp" }, - { "light", { NULL }, 4670, "udp" }, - { "acter", { NULL }, 4671, "tcp" }, - { "acter", { NULL }, 4671, "udp" }, - { "rfa", { NULL }, 4672, "tcp" }, - { "rfa", { NULL }, 4672, "udp" }, - { "cxws", { NULL }, 4673, "tcp" }, - { "cxws", { NULL }, 4673, "udp" }, - { "appiq-mgmt", { NULL }, 4674, "tcp" }, - { "appiq-mgmt", { NULL }, 4674, "udp" }, - { "dhct-status", { NULL }, 4675, "tcp" }, - { "dhct-status", { NULL }, 4675, "udp" }, - { "dhct-alerts", { NULL }, 4676, "tcp" }, - { "dhct-alerts", { NULL }, 4676, "udp" }, - { "bcs", { NULL }, 4677, "tcp" }, - { "bcs", { NULL }, 4677, "udp" }, - { "traversal", { NULL }, 4678, "tcp" }, - { "traversal", { NULL }, 4678, "udp" }, - { "mgesupervision", { NULL }, 4679, "tcp" }, - { "mgesupervision", { NULL }, 4679, "udp" }, - { "mgemanagement", { NULL }, 4680, "tcp" }, - { "mgemanagement", { NULL }, 4680, "udp" }, - { "parliant", { NULL }, 4681, "tcp" }, - { "parliant", { NULL }, 4681, "udp" }, - { "finisar", { NULL }, 4682, "tcp" }, - { "finisar", { NULL }, 4682, "udp" }, - { "spike", { NULL }, 4683, "tcp" }, - { "spike", { NULL }, 4683, "udp" }, - { "rfid-rp1", { NULL }, 4684, "tcp" }, - { "rfid-rp1", { NULL }, 4684, "udp" }, - { "autopac", { NULL }, 4685, "tcp" }, - { "autopac", { NULL }, 4685, "udp" }, - { "msp-os", { NULL }, 4686, "tcp" }, - { "msp-os", { NULL }, 4686, "udp" }, - { "nst", { NULL }, 4687, "tcp" }, - { "nst", { NULL }, 4687, "udp" }, - { "mobile-p2p", { NULL }, 4688, "tcp" }, - { "mobile-p2p", { NULL }, 4688, "udp" }, - { "altovacentral", { NULL }, 4689, "tcp" }, - { "altovacentral", { NULL }, 4689, "udp" }, - { "prelude", { NULL }, 4690, "tcp" }, - { "prelude", { NULL }, 4690, "udp" }, - { "mtn", { NULL }, 4691, "tcp" }, - { "mtn", { NULL }, 4691, "udp" }, - { "conspiracy", { NULL }, 4692, "tcp" }, - { "conspiracy", { NULL }, 4692, "udp" }, - { "netxms-agent", { NULL }, 4700, "tcp" }, - { "netxms-agent", { NULL }, 4700, "udp" }, - { "netxms-mgmt", { NULL }, 4701, "tcp" }, - { "netxms-mgmt", { NULL }, 4701, "udp" }, - { "netxms-sync", { NULL }, 4702, "tcp" }, - { "netxms-sync", { NULL }, 4702, "udp" }, - { "npqes-test", { NULL }, 4703, "tcp" }, - { "assuria-ins", { NULL }, 4704, "tcp" }, - { "truckstar", { NULL }, 4725, "tcp" }, - { "truckstar", { NULL }, 4725, "udp" }, - { "a26-fap-fgw", { NULL }, 4726, "udp" }, - { "fcis", { NULL }, 4727, "tcp" }, - { "fcis-disc", { NULL }, 4727, "udp" }, - { "capmux", { NULL }, 4728, "tcp" }, - { "capmux", { NULL }, 4728, "udp" }, - { "gsmtap", { NULL }, 4729, "udp" }, - { "gearman", { NULL }, 4730, "tcp" }, - { "gearman", { NULL }, 4730, "udp" }, - { "remcap", { NULL }, 4731, "tcp" }, - { "ohmtrigger", { NULL }, 4732, "udp" }, - { "resorcs", { NULL }, 4733, "tcp" }, - { "ipdr-sp", { NULL }, 4737, "tcp" }, - { "ipdr-sp", { NULL }, 4737, "udp" }, - { "solera-lpn", { NULL }, 4738, "tcp" }, - { "solera-lpn", { NULL }, 4738, "udp" }, - { "ipfix", { NULL }, 4739, "tcp" }, - { "ipfix", { NULL }, 4739, "udp" }, - { "ipfix", { NULL }, 4739, "sctp" }, - { "ipfixs", { NULL }, 4740, "tcp" }, - { "ipfixs", { NULL }, 4740, "sctp" }, - { "ipfixs", { NULL }, 4740, "udp" }, - { "lumimgrd", { NULL }, 4741, "tcp" }, - { "lumimgrd", { NULL }, 4741, "udp" }, - { "sicct", { NULL }, 4742, "tcp" }, - { "sicct-sdp", { NULL }, 4742, "udp" }, - { "openhpid", { NULL }, 4743, "tcp" }, - { "openhpid", { NULL }, 4743, "udp" }, - { "ifsp", { NULL }, 4744, "tcp" }, - { "ifsp", { NULL }, 4744, "udp" }, - { "fmp", { NULL }, 4745, "tcp" }, - { "fmp", { NULL }, 4745, "udp" }, - { "profilemac", { NULL }, 4749, "tcp" }, - { "profilemac", { NULL }, 4749, "udp" }, - { "ssad", { NULL }, 4750, "tcp" }, - { "ssad", { NULL }, 4750, "udp" }, - { "spocp", { NULL }, 4751, "tcp" }, - { "spocp", { NULL }, 4751, "udp" }, - { "snap", { NULL }, 4752, "tcp" }, - { "snap", { NULL }, 4752, "udp" }, - { "bfd-multi-ctl", { NULL }, 4784, "tcp" }, - { "bfd-multi-ctl", { NULL }, 4784, "udp" }, - { "cncp", { NULL }, 4785, "udp" }, - { "smart-install", { NULL }, 4786, "tcp" }, - { "sia-ctrl-plane", { NULL }, 4787, "tcp" }, - { "iims", { NULL }, 4800, "tcp" }, - { "iims", { NULL }, 4800, "udp" }, - { "iwec", { NULL }, 4801, "tcp" }, - { "iwec", { NULL }, 4801, "udp" }, - { "ilss", { NULL }, 4802, "tcp" }, - { "ilss", { NULL }, 4802, "udp" }, - { "notateit", { NULL }, 4803, "tcp" }, - { "notateit-disc", { NULL }, 4803, "udp" }, - { "aja-ntv4-disc", { NULL }, 4804, "udp" }, - { "htcp", { NULL }, 4827, "tcp" }, - { "htcp", { NULL }, 4827, "udp" }, - { "varadero-0", { NULL }, 4837, "tcp" }, - { "varadero-0", { NULL }, 4837, "udp" }, - { "varadero-1", { NULL }, 4838, "tcp" }, - { "varadero-1", { NULL }, 4838, "udp" }, - { "varadero-2", { NULL }, 4839, "tcp" }, - { "varadero-2", { NULL }, 4839, "udp" }, - { "opcua-tcp", { NULL }, 4840, "tcp" }, - { "opcua-udp", { NULL }, 4840, "udp" }, - { "quosa", { NULL }, 4841, "tcp" }, - { "quosa", { NULL }, 4841, "udp" }, - { "gw-asv", { NULL }, 4842, "tcp" }, - { "gw-asv", { NULL }, 4842, "udp" }, - { "opcua-tls", { NULL }, 4843, "tcp" }, - { "opcua-tls", { NULL }, 4843, "udp" }, - { "gw-log", { NULL }, 4844, "tcp" }, - { "gw-log", { NULL }, 4844, "udp" }, - { "wcr-remlib", { NULL }, 4845, "tcp" }, - { "wcr-remlib", { NULL }, 4845, "udp" }, - { "contamac_icm", { NULL }, 4846, "tcp" }, - { "contamac_icm", { NULL }, 4846, "udp" }, - { "wfc", { NULL }, 4847, "tcp" }, - { "wfc", { NULL }, 4847, "udp" }, - { "appserv-http", { NULL }, 4848, "tcp" }, - { "appserv-http", { NULL }, 4848, "udp" }, - { "appserv-https", { NULL }, 4849, "tcp" }, - { "appserv-https", { NULL }, 4849, "udp" }, - { "sun-as-nodeagt", { NULL }, 4850, "tcp" }, - { "sun-as-nodeagt", { NULL }, 4850, "udp" }, - { "derby-repli", { NULL }, 4851, "tcp" }, - { "derby-repli", { NULL }, 4851, "udp" }, - { "unify-debug", { NULL }, 4867, "tcp" }, - { "unify-debug", { NULL }, 4867, "udp" }, - { "phrelay", { NULL }, 4868, "tcp" }, - { "phrelay", { NULL }, 4868, "udp" }, - { "phrelaydbg", { NULL }, 4869, "tcp" }, - { "phrelaydbg", { NULL }, 4869, "udp" }, - { "cc-tracking", { NULL }, 4870, "tcp" }, - { "cc-tracking", { NULL }, 4870, "udp" }, - { "wired", { NULL }, 4871, "tcp" }, - { "wired", { NULL }, 4871, "udp" }, - { "tritium-can", { NULL }, 4876, "tcp" }, - { "tritium-can", { NULL }, 4876, "udp" }, - { "lmcs", { NULL }, 4877, "tcp" }, - { "lmcs", { NULL }, 4877, "udp" }, - { "inst-discovery", { NULL }, 4878, "udp" }, - { "wsdl-event", { NULL }, 4879, "tcp" }, - { "hislip", { NULL }, 4880, "tcp" }, - { "socp-t", { NULL }, 4881, "udp" }, - { "socp-c", { NULL }, 4882, "udp" }, - { "wmlserver", { NULL }, 4883, "tcp" }, - { "hivestor", { NULL }, 4884, "tcp" }, - { "hivestor", { NULL }, 4884, "udp" }, - { "abbs", { NULL }, 4885, "tcp" }, - { "abbs", { NULL }, 4885, "udp" }, - { "lyskom", { NULL }, 4894, "tcp" }, - { "lyskom", { NULL }, 4894, "udp" }, - { "radmin-port", { NULL }, 4899, "tcp" }, - { "radmin-port", { NULL }, 4899, "udp" }, - { "hfcs", { NULL }, 4900, "tcp" }, - { "hfcs", { NULL }, 4900, "udp" }, - { "flr_agent", { NULL }, 4901, "tcp" }, - { "magiccontrol", { NULL }, 4902, "tcp" }, - { "lutap", { NULL }, 4912, "tcp" }, - { "lutcp", { NULL }, 4913, "tcp" }, - { "bones", { NULL }, 4914, "tcp" }, - { "bones", { NULL }, 4914, "udp" }, - { "frcs", { NULL }, 4915, "tcp" }, - { "atsc-mh-ssc", { NULL }, 4937, "udp" }, - { "eq-office-4940", { NULL }, 4940, "tcp" }, - { "eq-office-4940", { NULL }, 4940, "udp" }, - { "eq-office-4941", { NULL }, 4941, "tcp" }, - { "eq-office-4941", { NULL }, 4941, "udp" }, - { "eq-office-4942", { NULL }, 4942, "tcp" }, - { "eq-office-4942", { NULL }, 4942, "udp" }, - { "munin", { NULL }, 4949, "tcp" }, - { "munin", { NULL }, 4949, "udp" }, - { "sybasesrvmon", { NULL }, 4950, "tcp" }, - { "sybasesrvmon", { NULL }, 4950, "udp" }, - { "pwgwims", { NULL }, 4951, "tcp" }, - { "pwgwims", { NULL }, 4951, "udp" }, - { "sagxtsds", { NULL }, 4952, "tcp" }, - { "sagxtsds", { NULL }, 4952, "udp" }, - { "dbsyncarbiter", { NULL }, 4953, "tcp" }, - { "ccss-qmm", { NULL }, 4969, "tcp" }, - { "ccss-qmm", { NULL }, 4969, "udp" }, - { "ccss-qsm", { NULL }, 4970, "tcp" }, - { "ccss-qsm", { NULL }, 4970, "udp" }, - { "webyast", { NULL }, 4984, "tcp" }, - { "gerhcs", { NULL }, 4985, "tcp" }, - { "mrip", { NULL }, 4986, "tcp" }, - { "mrip", { NULL }, 4986, "udp" }, - { "smar-se-port1", { NULL }, 4987, "tcp" }, - { "smar-se-port1", { NULL }, 4987, "udp" }, - { "smar-se-port2", { NULL }, 4988, "tcp" }, - { "smar-se-port2", { NULL }, 4988, "udp" }, - { "parallel", { NULL }, 4989, "tcp" }, - { "parallel", { NULL }, 4989, "udp" }, - { "busycal", { NULL }, 4990, "tcp" }, - { "busycal", { NULL }, 4990, "udp" }, - { "vrt", { NULL }, 4991, "tcp" }, - { "vrt", { NULL }, 4991, "udp" }, - { "hfcs-manager", { NULL }, 4999, "tcp" }, - { "hfcs-manager", { NULL }, 4999, "udp" }, - { "commplex-main", { NULL }, 5000, "tcp" }, - { "commplex-main", { NULL }, 5000, "udp" }, - { "commplex-link", { NULL }, 5001, "tcp" }, - { "commplex-link", { NULL }, 5001, "udp" }, - { "rfe", { NULL }, 5002, "tcp" }, - { "rfe", { NULL }, 5002, "udp" }, - { "fmpro-internal", { NULL }, 5003, "tcp" }, - { "fmpro-internal", { NULL }, 5003, "udp" }, - { "avt-profile-1", { NULL }, 5004, "tcp" }, - { "avt-profile-1", { NULL }, 5004, "udp" }, - { "avt-profile-1", { NULL }, 5004, "dccp" }, - { "avt-profile-2", { NULL }, 5005, "tcp" }, - { "avt-profile-2", { NULL }, 5005, "udp" }, - { "avt-profile-2", { NULL }, 5005, "dccp" }, - { "wsm-server", { NULL }, 5006, "tcp" }, - { "wsm-server", { NULL }, 5006, "udp" }, - { "wsm-server-ssl", { NULL }, 5007, "tcp" }, - { "wsm-server-ssl", { NULL }, 5007, "udp" }, - { "synapsis-edge", { NULL }, 5008, "tcp" }, - { "synapsis-edge", { NULL }, 5008, "udp" }, - { "winfs", { NULL }, 5009, "tcp" }, - { "winfs", { NULL }, 5009, "udp" }, - { "telelpathstart", { NULL }, 5010, "tcp" }, - { "telelpathstart", { NULL }, 5010, "udp" }, - { "telelpathattack", { NULL }, 5011, "tcp" }, - { "telelpathattack", { NULL }, 5011, "udp" }, - { "nsp", { NULL }, 5012, "tcp" }, - { "nsp", { NULL }, 5012, "udp" }, - { "fmpro-v6", { NULL }, 5013, "tcp" }, - { "fmpro-v6", { NULL }, 5013, "udp" }, - { "onpsocket", { NULL }, 5014, "udp" }, - { "fmwp", { NULL }, 5015, "tcp" }, - { "zenginkyo-1", { NULL }, 5020, "tcp" }, - { "zenginkyo-1", { NULL }, 5020, "udp" }, - { "zenginkyo-2", { NULL }, 5021, "tcp" }, - { "zenginkyo-2", { NULL }, 5021, "udp" }, - { "mice", { NULL }, 5022, "tcp" }, - { "mice", { NULL }, 5022, "udp" }, - { "htuilsrv", { NULL }, 5023, "tcp" }, - { "htuilsrv", { NULL }, 5023, "udp" }, - { "scpi-telnet", { NULL }, 5024, "tcp" }, - { "scpi-telnet", { NULL }, 5024, "udp" }, - { "scpi-raw", { NULL }, 5025, "tcp" }, - { "scpi-raw", { NULL }, 5025, "udp" }, - { "strexec-d", { NULL }, 5026, "tcp" }, - { "strexec-d", { NULL }, 5026, "udp" }, - { "strexec-s", { NULL }, 5027, "tcp" }, - { "strexec-s", { NULL }, 5027, "udp" }, - { "qvr", { NULL }, 5028, "tcp" }, - { "infobright", { NULL }, 5029, "tcp" }, - { "infobright", { NULL }, 5029, "udp" }, - { "surfpass", { NULL }, 5030, "tcp" }, - { "surfpass", { NULL }, 5030, "udp" }, - { "dmp", { NULL }, 5031, "udp" }, - { "asnaacceler8db", { NULL }, 5042, "tcp" }, - { "asnaacceler8db", { NULL }, 5042, "udp" }, - { "swxadmin", { NULL }, 5043, "tcp" }, - { "swxadmin", { NULL }, 5043, "udp" }, - { "lxi-evntsvc", { NULL }, 5044, "tcp" }, - { "lxi-evntsvc", { NULL }, 5044, "udp" }, - { "osp", { NULL }, 5045, "tcp" }, - { "vpm-udp", { NULL }, 5046, "udp" }, - { "iscape", { NULL }, 5047, "udp" }, - { "texai", { NULL }, 5048, "tcp" }, - { "ivocalize", { NULL }, 5049, "tcp" }, - { "ivocalize", { NULL }, 5049, "udp" }, - { "mmcc", { NULL }, 5050, "tcp" }, - { "mmcc", { NULL }, 5050, "udp" }, - { "ita-agent", { NULL }, 5051, "tcp" }, - { "ita-agent", { NULL }, 5051, "udp" }, - { "ita-manager", { NULL }, 5052, "tcp" }, - { "ita-manager", { NULL }, 5052, "udp" }, - { "rlm", { NULL }, 5053, "tcp" }, - { "rlm-admin", { NULL }, 5054, "tcp" }, - { "unot", { NULL }, 5055, "tcp" }, - { "unot", { NULL }, 5055, "udp" }, - { "intecom-ps1", { NULL }, 5056, "tcp" }, - { "intecom-ps1", { NULL }, 5056, "udp" }, - { "intecom-ps2", { NULL }, 5057, "tcp" }, - { "intecom-ps2", { NULL }, 5057, "udp" }, - { "locus-disc", { NULL }, 5058, "udp" }, - { "sds", { NULL }, 5059, "tcp" }, - { "sds", { NULL }, 5059, "udp" }, - { "sip", { NULL }, 5060, "tcp" }, - { "sip", { NULL }, 5060, "udp" }, - { "sip-tls", { NULL }, 5061, "tcp" }, - { "sip-tls", { NULL }, 5061, "udp" }, - { "na-localise", { NULL }, 5062, "tcp" }, - { "na-localise", { NULL }, 5062, "udp" }, - { "csrpc", { NULL }, 5063, "tcp" }, - { "ca-1", { NULL }, 5064, "tcp" }, - { "ca-1", { NULL }, 5064, "udp" }, - { "ca-2", { NULL }, 5065, "tcp" }, - { "ca-2", { NULL }, 5065, "udp" }, - { "stanag-5066", { NULL }, 5066, "tcp" }, - { "stanag-5066", { NULL }, 5066, "udp" }, - { "authentx", { NULL }, 5067, "tcp" }, - { "authentx", { NULL }, 5067, "udp" }, - { "bitforestsrv", { NULL }, 5068, "tcp" }, - { "i-net-2000-npr", { NULL }, 5069, "tcp" }, - { "i-net-2000-npr", { NULL }, 5069, "udp" }, - { "vtsas", { NULL }, 5070, "tcp" }, - { "vtsas", { NULL }, 5070, "udp" }, - { "powerschool", { NULL }, 5071, "tcp" }, - { "powerschool", { NULL }, 5071, "udp" }, - { "ayiya", { NULL }, 5072, "tcp" }, - { "ayiya", { NULL }, 5072, "udp" }, - { "tag-pm", { NULL }, 5073, "tcp" }, - { "tag-pm", { NULL }, 5073, "udp" }, - { "alesquery", { NULL }, 5074, "tcp" }, - { "alesquery", { NULL }, 5074, "udp" }, - { "cp-spxrpts", { NULL }, 5079, "udp" }, - { "onscreen", { NULL }, 5080, "tcp" }, - { "onscreen", { NULL }, 5080, "udp" }, - { "sdl-ets", { NULL }, 5081, "tcp" }, - { "sdl-ets", { NULL }, 5081, "udp" }, - { "qcp", { NULL }, 5082, "tcp" }, - { "qcp", { NULL }, 5082, "udp" }, - { "qfp", { NULL }, 5083, "tcp" }, - { "qfp", { NULL }, 5083, "udp" }, - { "llrp", { NULL }, 5084, "tcp" }, - { "llrp", { NULL }, 5084, "udp" }, - { "encrypted-llrp", { NULL }, 5085, "tcp" }, - { "encrypted-llrp", { NULL }, 5085, "udp" }, - { "aprigo-cs", { NULL }, 5086, "tcp" }, - { "car", { NULL }, 5090, "sctp" }, - { "cxtp", { NULL }, 5091, "sctp" }, - { "magpie", { NULL }, 5092, "udp" }, - { "sentinel-lm", { NULL }, 5093, "tcp" }, - { "sentinel-lm", { NULL }, 5093, "udp" }, - { "hart-ip", { NULL }, 5094, "tcp" }, - { "hart-ip", { NULL }, 5094, "udp" }, - { "sentlm-srv2srv", { NULL }, 5099, "tcp" }, - { "sentlm-srv2srv", { NULL }, 5099, "udp" }, - { "socalia", { NULL }, 5100, "tcp" }, - { "socalia", { NULL }, 5100, "udp" }, - { "talarian-tcp", { NULL }, 5101, "tcp" }, - { "talarian-udp", { NULL }, 5101, "udp" }, - { "oms-nonsecure", { NULL }, 5102, "tcp" }, - { "oms-nonsecure", { NULL }, 5102, "udp" }, - { "actifio-c2c", { NULL }, 5103, "tcp" }, - { "tinymessage", { NULL }, 5104, "udp" }, - { "hughes-ap", { NULL }, 5105, "udp" }, - { "taep-as-svc", { NULL }, 5111, "tcp" }, - { "taep-as-svc", { NULL }, 5111, "udp" }, - { "pm-cmdsvr", { NULL }, 5112, "tcp" }, - { "pm-cmdsvr", { NULL }, 5112, "udp" }, - { "ev-services", { NULL }, 5114, "tcp" }, - { "autobuild", { NULL }, 5115, "tcp" }, - { "emb-proj-cmd", { NULL }, 5116, "udp" }, - { "gradecam", { NULL }, 5117, "tcp" }, - { "nbt-pc", { NULL }, 5133, "tcp" }, - { "nbt-pc", { NULL }, 5133, "udp" }, - { "ppactivation", { NULL }, 5134, "tcp" }, - { "erp-scale", { NULL }, 5135, "tcp" }, - { "minotaur-sa", { NULL }, 5136, "udp" }, - { "ctsd", { NULL }, 5137, "tcp" }, - { "ctsd", { NULL }, 5137, "udp" }, - { "rmonitor_secure", { NULL }, 5145, "tcp" }, - { "rmonitor_secure", { NULL }, 5145, "udp" }, - { "social-alarm", { NULL }, 5146, "tcp" }, - { "atmp", { NULL }, 5150, "tcp" }, - { "atmp", { NULL }, 5150, "udp" }, - { "esri_sde", { NULL }, 5151, "tcp" }, - { "esri_sde", { NULL }, 5151, "udp" }, - { "sde-discovery", { NULL }, 5152, "tcp" }, - { "sde-discovery", { NULL }, 5152, "udp" }, - { "toruxserver", { NULL }, 5153, "tcp" }, - { "bzflag", { NULL }, 5154, "tcp" }, - { "bzflag", { NULL }, 5154, "udp" }, - { "asctrl-agent", { NULL }, 5155, "tcp" }, - { "asctrl-agent", { NULL }, 5155, "udp" }, - { "rugameonline", { NULL }, 5156, "tcp" }, - { "mediat", { NULL }, 5157, "tcp" }, - { "snmpssh", { NULL }, 5161, "tcp" }, - { "snmpssh-trap", { NULL }, 5162, "tcp" }, - { "sbackup", { NULL }, 5163, "tcp" }, - { "vpa", { NULL }, 5164, "tcp" }, - { "vpa-disc", { NULL }, 5164, "udp" }, - { "ife_icorp", { NULL }, 5165, "tcp" }, - { "ife_icorp", { NULL }, 5165, "udp" }, - { "winpcs", { NULL }, 5166, "tcp" }, - { "winpcs", { NULL }, 5166, "udp" }, - { "scte104", { NULL }, 5167, "tcp" }, - { "scte104", { NULL }, 5167, "udp" }, - { "scte30", { NULL }, 5168, "tcp" }, - { "scte30", { NULL }, 5168, "udp" }, - { "aol", { NULL }, 5190, "tcp" }, - { "aol", { NULL }, 5190, "udp" }, - { "aol-1", { NULL }, 5191, "tcp" }, - { "aol-1", { NULL }, 5191, "udp" }, - { "aol-2", { NULL }, 5192, "tcp" }, - { "aol-2", { NULL }, 5192, "udp" }, - { "aol-3", { NULL }, 5193, "tcp" }, - { "aol-3", { NULL }, 5193, "udp" }, - { "cpscomm", { NULL }, 5194, "tcp" }, - { "targus-getdata", { NULL }, 5200, "tcp" }, - { "targus-getdata", { NULL }, 5200, "udp" }, - { "targus-getdata1", { NULL }, 5201, "tcp" }, - { "targus-getdata1", { NULL }, 5201, "udp" }, - { "targus-getdata2", { NULL }, 5202, "tcp" }, - { "targus-getdata2", { NULL }, 5202, "udp" }, - { "targus-getdata3", { NULL }, 5203, "tcp" }, - { "targus-getdata3", { NULL }, 5203, "udp" }, - { "3exmp", { NULL }, 5221, "tcp" }, - { "xmpp-client", { NULL }, 5222, "tcp" }, - { "hpvirtgrp", { NULL }, 5223, "tcp" }, - { "hpvirtgrp", { NULL }, 5223, "udp" }, - { "hpvirtctrl", { NULL }, 5224, "tcp" }, - { "hpvirtctrl", { NULL }, 5224, "udp" }, - { "hp-server", { NULL }, 5225, "tcp" }, - { "hp-server", { NULL }, 5225, "udp" }, - { "hp-status", { NULL }, 5226, "tcp" }, - { "hp-status", { NULL }, 5226, "udp" }, - { "perfd", { NULL }, 5227, "tcp" }, - { "perfd", { NULL }, 5227, "udp" }, - { "hpvroom", { NULL }, 5228, "tcp" }, - { "csedaemon", { NULL }, 5232, "tcp" }, - { "enfs", { NULL }, 5233, "tcp" }, - { "eenet", { NULL }, 5234, "tcp" }, - { "eenet", { NULL }, 5234, "udp" }, - { "galaxy-network", { NULL }, 5235, "tcp" }, - { "galaxy-network", { NULL }, 5235, "udp" }, - { "padl2sim", { NULL }, 5236, "tcp" }, - { "padl2sim", { NULL }, 5236, "udp" }, - { "mnet-discovery", { NULL }, 5237, "tcp" }, - { "mnet-discovery", { NULL }, 5237, "udp" }, - { "downtools", { NULL }, 5245, "tcp" }, - { "downtools-disc", { NULL }, 5245, "udp" }, - { "capwap-control", { NULL }, 5246, "udp" }, - { "capwap-data", { NULL }, 5247, "udp" }, - { "caacws", { NULL }, 5248, "tcp" }, - { "caacws", { NULL }, 5248, "udp" }, - { "caaclang2", { NULL }, 5249, "tcp" }, - { "caaclang2", { NULL }, 5249, "udp" }, - { "soagateway", { NULL }, 5250, "tcp" }, - { "soagateway", { NULL }, 5250, "udp" }, - { "caevms", { NULL }, 5251, "tcp" }, - { "caevms", { NULL }, 5251, "udp" }, - { "movaz-ssc", { NULL }, 5252, "tcp" }, - { "movaz-ssc", { NULL }, 5252, "udp" }, - { "kpdp", { NULL }, 5253, "tcp" }, - { "3com-njack-1", { NULL }, 5264, "tcp" }, - { "3com-njack-1", { NULL }, 5264, "udp" }, - { "3com-njack-2", { NULL }, 5265, "tcp" }, - { "3com-njack-2", { NULL }, 5265, "udp" }, - { "xmpp-server", { NULL }, 5269, "tcp" }, - { "xmp", { NULL }, 5270, "tcp" }, - { "xmp", { NULL }, 5270, "udp" }, - { "cuelink", { NULL }, 5271, "tcp" }, - { "cuelink-disc", { NULL }, 5271, "udp" }, - { "pk", { NULL }, 5272, "tcp" }, - { "pk", { NULL }, 5272, "udp" }, - { "xmpp-bosh", { NULL }, 5280, "tcp" }, - { "undo-lm", { NULL }, 5281, "tcp" }, - { "transmit-port", { NULL }, 5282, "tcp" }, - { "transmit-port", { NULL }, 5282, "udp" }, - { "presence", { NULL }, 5298, "tcp" }, - { "presence", { NULL }, 5298, "udp" }, - { "nlg-data", { NULL }, 5299, "tcp" }, - { "nlg-data", { NULL }, 5299, "udp" }, - { "hacl-hb", { NULL }, 5300, "tcp" }, - { "hacl-hb", { NULL }, 5300, "udp" }, - { "hacl-gs", { NULL }, 5301, "tcp" }, - { "hacl-gs", { NULL }, 5301, "udp" }, - { "hacl-cfg", { NULL }, 5302, "tcp" }, - { "hacl-cfg", { NULL }, 5302, "udp" }, - { "hacl-probe", { NULL }, 5303, "tcp" }, - { "hacl-probe", { NULL }, 5303, "udp" }, - { "hacl-local", { NULL }, 5304, "tcp" }, - { "hacl-local", { NULL }, 5304, "udp" }, - { "hacl-test", { NULL }, 5305, "tcp" }, - { "hacl-test", { NULL }, 5305, "udp" }, - { "sun-mc-grp", { NULL }, 5306, "tcp" }, - { "sun-mc-grp", { NULL }, 5306, "udp" }, - { "sco-aip", { NULL }, 5307, "tcp" }, - { "sco-aip", { NULL }, 5307, "udp" }, - { "cfengine", { NULL }, 5308, "tcp" }, - { "cfengine", { NULL }, 5308, "udp" }, - { "jprinter", { NULL }, 5309, "tcp" }, - { "jprinter", { NULL }, 5309, "udp" }, - { "outlaws", { NULL }, 5310, "tcp" }, - { "outlaws", { NULL }, 5310, "udp" }, - { "permabit-cs", { NULL }, 5312, "tcp" }, - { "permabit-cs", { NULL }, 5312, "udp" }, - { "rrdp", { NULL }, 5313, "tcp" }, - { "rrdp", { NULL }, 5313, "udp" }, - { "opalis-rbt-ipc", { NULL }, 5314, "tcp" }, - { "opalis-rbt-ipc", { NULL }, 5314, "udp" }, - { "hacl-poll", { NULL }, 5315, "tcp" }, - { "hacl-poll", { NULL }, 5315, "udp" }, - { "hpdevms", { NULL }, 5316, "tcp" }, - { "hpdevms", { NULL }, 5316, "udp" }, - { "bsfserver-zn", { NULL }, 5320, "tcp" }, - { "bsfsvr-zn-ssl", { NULL }, 5321, "tcp" }, - { "kfserver", { NULL }, 5343, "tcp" }, - { "kfserver", { NULL }, 5343, "udp" }, - { "xkotodrcp", { NULL }, 5344, "tcp" }, - { "xkotodrcp", { NULL }, 5344, "udp" }, - { "stuns", { NULL }, 5349, "tcp" }, - { "stuns", { NULL }, 5349, "udp" }, - { "turns", { NULL }, 5349, "tcp" }, - { "turns", { NULL }, 5349, "udp" }, - { "stun-behaviors", { NULL }, 5349, "tcp" }, - { "stun-behaviors", { NULL }, 5349, "udp" }, - { "nat-pmp-status", { NULL }, 5350, "tcp" }, - { "nat-pmp-status", { NULL }, 5350, "udp" }, - { "nat-pmp", { NULL }, 5351, "tcp" }, - { "nat-pmp", { NULL }, 5351, "udp" }, - { "dns-llq", { NULL }, 5352, "tcp" }, - { "dns-llq", { NULL }, 5352, "udp" }, - { "mdns", { NULL }, 5353, "tcp" }, - { "mdns", { NULL }, 5353, "udp" }, - { "mdnsresponder", { NULL }, 5354, "tcp" }, - { "mdnsresponder", { NULL }, 5354, "udp" }, - { "llmnr", { NULL }, 5355, "tcp" }, - { "llmnr", { NULL }, 5355, "udp" }, - { "ms-smlbiz", { NULL }, 5356, "tcp" }, - { "ms-smlbiz", { NULL }, 5356, "udp" }, - { "wsdapi", { NULL }, 5357, "tcp" }, - { "wsdapi", { NULL }, 5357, "udp" }, - { "wsdapi-s", { NULL }, 5358, "tcp" }, - { "wsdapi-s", { NULL }, 5358, "udp" }, - { "ms-alerter", { NULL }, 5359, "tcp" }, - { "ms-alerter", { NULL }, 5359, "udp" }, - { "ms-sideshow", { NULL }, 5360, "tcp" }, - { "ms-sideshow", { NULL }, 5360, "udp" }, - { "ms-s-sideshow", { NULL }, 5361, "tcp" }, - { "ms-s-sideshow", { NULL }, 5361, "udp" }, - { "serverwsd2", { NULL }, 5362, "tcp" }, - { "serverwsd2", { NULL }, 5362, "udp" }, - { "net-projection", { NULL }, 5363, "tcp" }, - { "net-projection", { NULL }, 5363, "udp" }, - { "stresstester", { NULL }, 5397, "tcp" }, - { "stresstester", { NULL }, 5397, "udp" }, - { "elektron-admin", { NULL }, 5398, "tcp" }, - { "elektron-admin", { NULL }, 5398, "udp" }, - { "securitychase", { NULL }, 5399, "tcp" }, - { "securitychase", { NULL }, 5399, "udp" }, - { "excerpt", { NULL }, 5400, "tcp" }, - { "excerpt", { NULL }, 5400, "udp" }, - { "excerpts", { NULL }, 5401, "tcp" }, - { "excerpts", { NULL }, 5401, "udp" }, - { "mftp", { NULL }, 5402, "tcp" }, - { "mftp", { NULL }, 5402, "udp" }, - { "hpoms-ci-lstn", { NULL }, 5403, "tcp" }, - { "hpoms-ci-lstn", { NULL }, 5403, "udp" }, - { "hpoms-dps-lstn", { NULL }, 5404, "tcp" }, - { "hpoms-dps-lstn", { NULL }, 5404, "udp" }, - { "netsupport", { NULL }, 5405, "tcp" }, - { "netsupport", { NULL }, 5405, "udp" }, - { "systemics-sox", { NULL }, 5406, "tcp" }, - { "systemics-sox", { NULL }, 5406, "udp" }, - { "foresyte-clear", { NULL }, 5407, "tcp" }, - { "foresyte-clear", { NULL }, 5407, "udp" }, - { "foresyte-sec", { NULL }, 5408, "tcp" }, - { "foresyte-sec", { NULL }, 5408, "udp" }, - { "salient-dtasrv", { NULL }, 5409, "tcp" }, - { "salient-dtasrv", { NULL }, 5409, "udp" }, - { "salient-usrmgr", { NULL }, 5410, "tcp" }, - { "salient-usrmgr", { NULL }, 5410, "udp" }, - { "actnet", { NULL }, 5411, "tcp" }, - { "actnet", { NULL }, 5411, "udp" }, - { "continuus", { NULL }, 5412, "tcp" }, - { "continuus", { NULL }, 5412, "udp" }, - { "wwiotalk", { NULL }, 5413, "tcp" }, - { "wwiotalk", { NULL }, 5413, "udp" }, - { "statusd", { NULL }, 5414, "tcp" }, - { "statusd", { NULL }, 5414, "udp" }, - { "ns-server", { NULL }, 5415, "tcp" }, - { "ns-server", { NULL }, 5415, "udp" }, - { "sns-gateway", { NULL }, 5416, "tcp" }, - { "sns-gateway", { NULL }, 5416, "udp" }, - { "sns-agent", { NULL }, 5417, "tcp" }, - { "sns-agent", { NULL }, 5417, "udp" }, - { "mcntp", { NULL }, 5418, "tcp" }, - { "mcntp", { NULL }, 5418, "udp" }, - { "dj-ice", { NULL }, 5419, "tcp" }, - { "dj-ice", { NULL }, 5419, "udp" }, - { "cylink-c", { NULL }, 5420, "tcp" }, - { "cylink-c", { NULL }, 5420, "udp" }, - { "netsupport2", { NULL }, 5421, "tcp" }, - { "netsupport2", { NULL }, 5421, "udp" }, - { "salient-mux", { NULL }, 5422, "tcp" }, - { "salient-mux", { NULL }, 5422, "udp" }, - { "virtualuser", { NULL }, 5423, "tcp" }, - { "virtualuser", { NULL }, 5423, "udp" }, - { "beyond-remote", { NULL }, 5424, "tcp" }, - { "beyond-remote", { NULL }, 5424, "udp" }, - { "br-channel", { NULL }, 5425, "tcp" }, - { "br-channel", { NULL }, 5425, "udp" }, - { "devbasic", { NULL }, 5426, "tcp" }, - { "devbasic", { NULL }, 5426, "udp" }, - { "sco-peer-tta", { NULL }, 5427, "tcp" }, - { "sco-peer-tta", { NULL }, 5427, "udp" }, - { "telaconsole", { NULL }, 5428, "tcp" }, - { "telaconsole", { NULL }, 5428, "udp" }, - { "base", { NULL }, 5429, "tcp" }, - { "base", { NULL }, 5429, "udp" }, - { "radec-corp", { NULL }, 5430, "tcp" }, - { "radec-corp", { NULL }, 5430, "udp" }, - { "park-agent", { NULL }, 5431, "tcp" }, - { "park-agent", { NULL }, 5431, "udp" }, - { "postgresql", { NULL }, 5432, "tcp" }, - { "postgresql", { NULL }, 5432, "udp" }, - { "pyrrho", { NULL }, 5433, "tcp" }, - { "pyrrho", { NULL }, 5433, "udp" }, - { "sgi-arrayd", { NULL }, 5434, "tcp" }, - { "sgi-arrayd", { NULL }, 5434, "udp" }, - { "sceanics", { NULL }, 5435, "tcp" }, - { "sceanics", { NULL }, 5435, "udp" }, - { "pmip6-cntl", { NULL }, 5436, "udp" }, - { "pmip6-data", { NULL }, 5437, "udp" }, - { "spss", { NULL }, 5443, "tcp" }, - { "spss", { NULL }, 5443, "udp" }, - { "surebox", { NULL }, 5453, "tcp" }, - { "surebox", { NULL }, 5453, "udp" }, - { "apc-5454", { NULL }, 5454, "tcp" }, - { "apc-5454", { NULL }, 5454, "udp" }, - { "apc-5455", { NULL }, 5455, "tcp" }, - { "apc-5455", { NULL }, 5455, "udp" }, - { "apc-5456", { NULL }, 5456, "tcp" }, - { "apc-5456", { NULL }, 5456, "udp" }, - { "silkmeter", { NULL }, 5461, "tcp" }, - { "silkmeter", { NULL }, 5461, "udp" }, - { "ttl-publisher", { NULL }, 5462, "tcp" }, - { "ttl-publisher", { NULL }, 5462, "udp" }, - { "ttlpriceproxy", { NULL }, 5463, "tcp" }, - { "ttlpriceproxy", { NULL }, 5463, "udp" }, - { "quailnet", { NULL }, 5464, "tcp" }, - { "quailnet", { NULL }, 5464, "udp" }, - { "netops-broker", { NULL }, 5465, "tcp" }, - { "netops-broker", { NULL }, 5465, "udp" }, - { "fcp-addr-srvr1", { NULL }, 5500, "tcp" }, - { "fcp-addr-srvr1", { NULL }, 5500, "udp" }, - { "fcp-addr-srvr2", { NULL }, 5501, "tcp" }, - { "fcp-addr-srvr2", { NULL }, 5501, "udp" }, - { "fcp-srvr-inst1", { NULL }, 5502, "tcp" }, - { "fcp-srvr-inst1", { NULL }, 5502, "udp" }, - { "fcp-srvr-inst2", { NULL }, 5503, "tcp" }, - { "fcp-srvr-inst2", { NULL }, 5503, "udp" }, - { "fcp-cics-gw1", { NULL }, 5504, "tcp" }, - { "fcp-cics-gw1", { NULL }, 5504, "udp" }, - { "checkoutdb", { NULL }, 5505, "tcp" }, - { "checkoutdb", { NULL }, 5505, "udp" }, - { "amc", { NULL }, 5506, "tcp" }, - { "amc", { NULL }, 5506, "udp" }, - { "sgi-eventmond", { NULL }, 5553, "tcp" }, - { "sgi-eventmond", { NULL }, 5553, "udp" }, - { "sgi-esphttp", { NULL }, 5554, "tcp" }, - { "sgi-esphttp", { NULL }, 5554, "udp" }, - { "personal-agent", { NULL }, 5555, "tcp" }, - { "personal-agent", { NULL }, 5555, "udp" }, - { "freeciv", { NULL }, 5556, "tcp" }, - { "freeciv", { NULL }, 5556, "udp" }, - { "farenet", { NULL }, 5557, "tcp" }, - { "westec-connect", { NULL }, 5566, "tcp" }, - { "m-oap", { NULL }, 5567, "tcp" }, - { "m-oap", { NULL }, 5567, "udp" }, - { "sdt", { NULL }, 5568, "tcp" }, - { "sdt", { NULL }, 5568, "udp" }, - { "sdmmp", { NULL }, 5573, "tcp" }, - { "sdmmp", { NULL }, 5573, "udp" }, - { "lsi-bobcat", { NULL }, 5574, "tcp" }, - { "ora-oap", { NULL }, 5575, "tcp" }, - { "fdtracks", { NULL }, 5579, "tcp" }, - { "tmosms0", { NULL }, 5580, "tcp" }, - { "tmosms0", { NULL }, 5580, "udp" }, - { "tmosms1", { NULL }, 5581, "tcp" }, - { "tmosms1", { NULL }, 5581, "udp" }, - { "fac-restore", { NULL }, 5582, "tcp" }, - { "fac-restore", { NULL }, 5582, "udp" }, - { "tmo-icon-sync", { NULL }, 5583, "tcp" }, - { "tmo-icon-sync", { NULL }, 5583, "udp" }, - { "bis-web", { NULL }, 5584, "tcp" }, - { "bis-web", { NULL }, 5584, "udp" }, - { "bis-sync", { NULL }, 5585, "tcp" }, - { "bis-sync", { NULL }, 5585, "udp" }, - { "ininmessaging", { NULL }, 5597, "tcp" }, - { "ininmessaging", { NULL }, 5597, "udp" }, - { "mctfeed", { NULL }, 5598, "tcp" }, - { "mctfeed", { NULL }, 5598, "udp" }, - { "esinstall", { NULL }, 5599, "tcp" }, - { "esinstall", { NULL }, 5599, "udp" }, - { "esmmanager", { NULL }, 5600, "tcp" }, - { "esmmanager", { NULL }, 5600, "udp" }, - { "esmagent", { NULL }, 5601, "tcp" }, - { "esmagent", { NULL }, 5601, "udp" }, - { "a1-msc", { NULL }, 5602, "tcp" }, - { "a1-msc", { NULL }, 5602, "udp" }, - { "a1-bs", { NULL }, 5603, "tcp" }, - { "a1-bs", { NULL }, 5603, "udp" }, - { "a3-sdunode", { NULL }, 5604, "tcp" }, - { "a3-sdunode", { NULL }, 5604, "udp" }, - { "a4-sdunode", { NULL }, 5605, "tcp" }, - { "a4-sdunode", { NULL }, 5605, "udp" }, - { "ninaf", { NULL }, 5627, "tcp" }, - { "ninaf", { NULL }, 5627, "udp" }, - { "htrust", { NULL }, 5628, "tcp" }, - { "htrust", { NULL }, 5628, "udp" }, - { "symantec-sfdb", { NULL }, 5629, "tcp" }, - { "symantec-sfdb", { NULL }, 5629, "udp" }, - { "precise-comm", { NULL }, 5630, "tcp" }, - { "precise-comm", { NULL }, 5630, "udp" }, - { "pcanywheredata", { NULL }, 5631, "tcp" }, - { "pcanywheredata", { NULL }, 5631, "udp" }, - { "pcanywherestat", { NULL }, 5632, "tcp" }, - { "pcanywherestat", { NULL }, 5632, "udp" }, - { "beorl", { NULL }, 5633, "tcp" }, - { "beorl", { NULL }, 5633, "udp" }, - { "xprtld", { NULL }, 5634, "tcp" }, - { "xprtld", { NULL }, 5634, "udp" }, - { "sfmsso", { NULL }, 5635, "tcp" }, - { "sfm-db-server", { NULL }, 5636, "tcp" }, - { "cssc", { NULL }, 5637, "tcp" }, - { "amqps", { NULL }, 5671, "tcp" }, - { "amqps", { NULL }, 5671, "udp" }, - { "amqp", { NULL }, 5672, "tcp" }, - { "amqp", { NULL }, 5672, "udp" }, - { "amqp", { NULL }, 5672, "sctp" }, - { "jms", { NULL }, 5673, "tcp" }, - { "jms", { NULL }, 5673, "udp" }, - { "hyperscsi-port", { NULL }, 5674, "tcp" }, - { "hyperscsi-port", { NULL }, 5674, "udp" }, - { "v5ua", { NULL }, 5675, "tcp" }, - { "v5ua", { NULL }, 5675, "udp" }, - { "v5ua", { NULL }, 5675, "sctp" }, - { "raadmin", { NULL }, 5676, "tcp" }, - { "raadmin", { NULL }, 5676, "udp" }, - { "questdb2-lnchr", { NULL }, 5677, "tcp" }, - { "questdb2-lnchr", { NULL }, 5677, "udp" }, - { "rrac", { NULL }, 5678, "tcp" }, - { "rrac", { NULL }, 5678, "udp" }, - { "dccm", { NULL }, 5679, "tcp" }, - { "dccm", { NULL }, 5679, "udp" }, - { "auriga-router", { NULL }, 5680, "tcp" }, - { "auriga-router", { NULL }, 5680, "udp" }, - { "ncxcp", { NULL }, 5681, "tcp" }, - { "ncxcp", { NULL }, 5681, "udp" }, - { "brightcore", { NULL }, 5682, "udp" }, - { "ggz", { NULL }, 5688, "tcp" }, - { "ggz", { NULL }, 5688, "udp" }, - { "qmvideo", { NULL }, 5689, "tcp" }, - { "qmvideo", { NULL }, 5689, "udp" }, - { "proshareaudio", { NULL }, 5713, "tcp" }, - { "proshareaudio", { NULL }, 5713, "udp" }, - { "prosharevideo", { NULL }, 5714, "tcp" }, - { "prosharevideo", { NULL }, 5714, "udp" }, - { "prosharedata", { NULL }, 5715, "tcp" }, - { "prosharedata", { NULL }, 5715, "udp" }, - { "prosharerequest", { NULL }, 5716, "tcp" }, - { "prosharerequest", { NULL }, 5716, "udp" }, - { "prosharenotify", { NULL }, 5717, "tcp" }, - { "prosharenotify", { NULL }, 5717, "udp" }, - { "dpm", { NULL }, 5718, "tcp" }, - { "dpm", { NULL }, 5718, "udp" }, - { "dpm-agent", { NULL }, 5719, "tcp" }, - { "dpm-agent", { NULL }, 5719, "udp" }, - { "ms-licensing", { NULL }, 5720, "tcp" }, - { "ms-licensing", { NULL }, 5720, "udp" }, - { "dtpt", { NULL }, 5721, "tcp" }, - { "dtpt", { NULL }, 5721, "udp" }, - { "msdfsr", { NULL }, 5722, "tcp" }, - { "msdfsr", { NULL }, 5722, "udp" }, - { "omhs", { NULL }, 5723, "tcp" }, - { "omhs", { NULL }, 5723, "udp" }, - { "omsdk", { NULL }, 5724, "tcp" }, - { "omsdk", { NULL }, 5724, "udp" }, - { "ms-ilm", { NULL }, 5725, "tcp" }, - { "ms-ilm-sts", { NULL }, 5726, "tcp" }, - { "asgenf", { NULL }, 5727, "tcp" }, - { "io-dist-data", { NULL }, 5728, "tcp" }, - { "io-dist-group", { NULL }, 5728, "udp" }, - { "openmail", { NULL }, 5729, "tcp" }, - { "openmail", { NULL }, 5729, "udp" }, - { "unieng", { NULL }, 5730, "tcp" }, - { "unieng", { NULL }, 5730, "udp" }, - { "ida-discover1", { NULL }, 5741, "tcp" }, - { "ida-discover1", { NULL }, 5741, "udp" }, - { "ida-discover2", { NULL }, 5742, "tcp" }, - { "ida-discover2", { NULL }, 5742, "udp" }, - { "watchdoc-pod", { NULL }, 5743, "tcp" }, - { "watchdoc-pod", { NULL }, 5743, "udp" }, - { "watchdoc", { NULL }, 5744, "tcp" }, - { "watchdoc", { NULL }, 5744, "udp" }, - { "fcopy-server", { NULL }, 5745, "tcp" }, - { "fcopy-server", { NULL }, 5745, "udp" }, - { "fcopys-server", { NULL }, 5746, "tcp" }, - { "fcopys-server", { NULL }, 5746, "udp" }, - { "tunatic", { NULL }, 5747, "tcp" }, - { "tunatic", { NULL }, 5747, "udp" }, - { "tunalyzer", { NULL }, 5748, "tcp" }, - { "tunalyzer", { NULL }, 5748, "udp" }, - { "rscd", { NULL }, 5750, "tcp" }, - { "rscd", { NULL }, 5750, "udp" }, - { "openmailg", { NULL }, 5755, "tcp" }, - { "openmailg", { NULL }, 5755, "udp" }, - { "x500ms", { NULL }, 5757, "tcp" }, - { "x500ms", { NULL }, 5757, "udp" }, - { "openmailns", { NULL }, 5766, "tcp" }, - { "openmailns", { NULL }, 5766, "udp" }, - { "s-openmail", { NULL }, 5767, "tcp" }, - { "s-openmail", { NULL }, 5767, "udp" }, - { "openmailpxy", { NULL }, 5768, "tcp" }, - { "openmailpxy", { NULL }, 5768, "udp" }, - { "spramsca", { NULL }, 5769, "tcp" }, - { "spramsca", { NULL }, 5769, "udp" }, - { "spramsd", { NULL }, 5770, "tcp" }, - { "spramsd", { NULL }, 5770, "udp" }, - { "netagent", { NULL }, 5771, "tcp" }, - { "netagent", { NULL }, 5771, "udp" }, - { "dali-port", { NULL }, 5777, "tcp" }, - { "dali-port", { NULL }, 5777, "udp" }, - { "vts-rpc", { NULL }, 5780, "tcp" }, - { "3par-evts", { NULL }, 5781, "tcp" }, - { "3par-evts", { NULL }, 5781, "udp" }, - { "3par-mgmt", { NULL }, 5782, "tcp" }, - { "3par-mgmt", { NULL }, 5782, "udp" }, - { "3par-mgmt-ssl", { NULL }, 5783, "tcp" }, - { "3par-mgmt-ssl", { NULL }, 5783, "udp" }, - { "ibar", { NULL }, 5784, "udp" }, - { "3par-rcopy", { NULL }, 5785, "tcp" }, - { "3par-rcopy", { NULL }, 5785, "udp" }, - { "cisco-redu", { NULL }, 5786, "udp" }, - { "waascluster", { NULL }, 5787, "udp" }, - { "xtreamx", { NULL }, 5793, "tcp" }, - { "xtreamx", { NULL }, 5793, "udp" }, - { "spdp", { NULL }, 5794, "udp" }, - { "icmpd", { NULL }, 5813, "tcp" }, - { "icmpd", { NULL }, 5813, "udp" }, - { "spt-automation", { NULL }, 5814, "tcp" }, - { "spt-automation", { NULL }, 5814, "udp" }, - { "wherehoo", { NULL }, 5859, "tcp" }, - { "wherehoo", { NULL }, 5859, "udp" }, - { "ppsuitemsg", { NULL }, 5863, "tcp" }, - { "ppsuitemsg", { NULL }, 5863, "udp" }, - { "rfb", { NULL }, 5900, "tcp" }, - { "rfb", { NULL }, 5900, "udp" }, - { "cm", { NULL }, 5910, "tcp" }, - { "cm", { NULL }, 5910, "udp" }, - { "cpdlc", { NULL }, 5911, "tcp" }, - { "cpdlc", { NULL }, 5911, "udp" }, - { "fis", { NULL }, 5912, "tcp" }, - { "fis", { NULL }, 5912, "udp" }, - { "ads-c", { NULL }, 5913, "tcp" }, - { "ads-c", { NULL }, 5913, "udp" }, - { "indy", { NULL }, 5963, "tcp" }, - { "indy", { NULL }, 5963, "udp" }, - { "mppolicy-v5", { NULL }, 5968, "tcp" }, - { "mppolicy-v5", { NULL }, 5968, "udp" }, - { "mppolicy-mgr", { NULL }, 5969, "tcp" }, - { "mppolicy-mgr", { NULL }, 5969, "udp" }, - { "couchdb", { NULL }, 5984, "tcp" }, - { "couchdb", { NULL }, 5984, "udp" }, - { "wsman", { NULL }, 5985, "tcp" }, - { "wsman", { NULL }, 5985, "udp" }, - { "wsmans", { NULL }, 5986, "tcp" }, - { "wsmans", { NULL }, 5986, "udp" }, - { "wbem-rmi", { NULL }, 5987, "tcp" }, - { "wbem-rmi", { NULL }, 5987, "udp" }, - { "wbem-http", { NULL }, 5988, "tcp" }, - { "wbem-http", { NULL }, 5988, "udp" }, - { "wbem-https", { NULL }, 5989, "tcp" }, - { "wbem-https", { NULL }, 5989, "udp" }, - { "wbem-exp-https", { NULL }, 5990, "tcp" }, - { "wbem-exp-https", { NULL }, 5990, "udp" }, - { "nuxsl", { NULL }, 5991, "tcp" }, - { "nuxsl", { NULL }, 5991, "udp" }, - { "consul-insight", { NULL }, 5992, "tcp" }, - { "consul-insight", { NULL }, 5992, "udp" }, - { "cvsup", { NULL }, 5999, "tcp" }, - { "cvsup", { NULL }, 5999, "udp" }, - { "ndl-ahp-svc", { NULL }, 6064, "tcp" }, - { "ndl-ahp-svc", { NULL }, 6064, "udp" }, - { "winpharaoh", { NULL }, 6065, "tcp" }, - { "winpharaoh", { NULL }, 6065, "udp" }, - { "ewctsp", { NULL }, 6066, "tcp" }, - { "ewctsp", { NULL }, 6066, "udp" }, - { "gsmp", { NULL }, 6068, "tcp" }, - { "gsmp", { NULL }, 6068, "udp" }, - { "trip", { NULL }, 6069, "tcp" }, - { "trip", { NULL }, 6069, "udp" }, - { "messageasap", { NULL }, 6070, "tcp" }, - { "messageasap", { NULL }, 6070, "udp" }, - { "ssdtp", { NULL }, 6071, "tcp" }, - { "ssdtp", { NULL }, 6071, "udp" }, - { "diagnose-proc", { NULL }, 6072, "tcp" }, - { "diagnose-proc", { NULL }, 6072, "udp" }, - { "directplay8", { NULL }, 6073, "tcp" }, - { "directplay8", { NULL }, 6073, "udp" }, - { "max", { NULL }, 6074, "tcp" }, - { "max", { NULL }, 6074, "udp" }, - { "dpm-acm", { NULL }, 6075, "tcp" }, - { "miami-bcast", { NULL }, 6083, "udp" }, - { "p2p-sip", { NULL }, 6084, "tcp" }, - { "konspire2b", { NULL }, 6085, "tcp" }, - { "konspire2b", { NULL }, 6085, "udp" }, - { "pdtp", { NULL }, 6086, "tcp" }, - { "pdtp", { NULL }, 6086, "udp" }, - { "ldss", { NULL }, 6087, "tcp" }, - { "ldss", { NULL }, 6087, "udp" }, - { "raxa-mgmt", { NULL }, 6099, "tcp" }, - { "synchronet-db", { NULL }, 6100, "tcp" }, - { "synchronet-db", { NULL }, 6100, "udp" }, - { "synchronet-rtc", { NULL }, 6101, "tcp" }, - { "synchronet-rtc", { NULL }, 6101, "udp" }, - { "synchronet-upd", { NULL }, 6102, "tcp" }, - { "synchronet-upd", { NULL }, 6102, "udp" }, - { "rets", { NULL }, 6103, "tcp" }, - { "rets", { NULL }, 6103, "udp" }, - { "dbdb", { NULL }, 6104, "tcp" }, - { "dbdb", { NULL }, 6104, "udp" }, - { "primaserver", { NULL }, 6105, "tcp" }, - { "primaserver", { NULL }, 6105, "udp" }, - { "mpsserver", { NULL }, 6106, "tcp" }, - { "mpsserver", { NULL }, 6106, "udp" }, - { "etc-control", { NULL }, 6107, "tcp" }, - { "etc-control", { NULL }, 6107, "udp" }, - { "sercomm-scadmin", { NULL }, 6108, "tcp" }, - { "sercomm-scadmin", { NULL }, 6108, "udp" }, - { "globecast-id", { NULL }, 6109, "tcp" }, - { "globecast-id", { NULL }, 6109, "udp" }, - { "softcm", { NULL }, 6110, "tcp" }, - { "softcm", { NULL }, 6110, "udp" }, - { "spc", { NULL }, 6111, "tcp" }, - { "spc", { NULL }, 6111, "udp" }, - { "dtspcd", { NULL }, 6112, "tcp" }, - { "dtspcd", { NULL }, 6112, "udp" }, - { "dayliteserver", { NULL }, 6113, "tcp" }, - { "wrspice", { NULL }, 6114, "tcp" }, - { "xic", { NULL }, 6115, "tcp" }, - { "xtlserv", { NULL }, 6116, "tcp" }, - { "daylitetouch", { NULL }, 6117, "tcp" }, - { "spdy", { NULL }, 6121, "tcp" }, - { "bex-webadmin", { NULL }, 6122, "tcp" }, - { "bex-webadmin", { NULL }, 6122, "udp" }, - { "backup-express", { NULL }, 6123, "tcp" }, - { "backup-express", { NULL }, 6123, "udp" }, - { "pnbs", { NULL }, 6124, "tcp" }, - { "pnbs", { NULL }, 6124, "udp" }, - { "nbt-wol", { NULL }, 6133, "tcp" }, - { "nbt-wol", { NULL }, 6133, "udp" }, - { "pulsonixnls", { NULL }, 6140, "tcp" }, - { "pulsonixnls", { NULL }, 6140, "udp" }, - { "meta-corp", { NULL }, 6141, "tcp" }, - { "meta-corp", { NULL }, 6141, "udp" }, - { "aspentec-lm", { NULL }, 6142, "tcp" }, - { "aspentec-lm", { NULL }, 6142, "udp" }, - { "watershed-lm", { NULL }, 6143, "tcp" }, - { "watershed-lm", { NULL }, 6143, "udp" }, - { "statsci1-lm", { NULL }, 6144, "tcp" }, - { "statsci1-lm", { NULL }, 6144, "udp" }, - { "statsci2-lm", { NULL }, 6145, "tcp" }, - { "statsci2-lm", { NULL }, 6145, "udp" }, - { "lonewolf-lm", { NULL }, 6146, "tcp" }, - { "lonewolf-lm", { NULL }, 6146, "udp" }, - { "montage-lm", { NULL }, 6147, "tcp" }, - { "montage-lm", { NULL }, 6147, "udp" }, - { "ricardo-lm", { NULL }, 6148, "tcp" }, - { "ricardo-lm", { NULL }, 6148, "udp" }, - { "tal-pod", { NULL }, 6149, "tcp" }, - { "tal-pod", { NULL }, 6149, "udp" }, - { "efb-aci", { NULL }, 6159, "tcp" }, - { "patrol-ism", { NULL }, 6161, "tcp" }, - { "patrol-ism", { NULL }, 6161, "udp" }, - { "patrol-coll", { NULL }, 6162, "tcp" }, - { "patrol-coll", { NULL }, 6162, "udp" }, - { "pscribe", { NULL }, 6163, "tcp" }, - { "pscribe", { NULL }, 6163, "udp" }, - { "lm-x", { NULL }, 6200, "tcp" }, - { "lm-x", { NULL }, 6200, "udp" }, - { "radmind", { NULL }, 6222, "tcp" }, - { "radmind", { NULL }, 6222, "udp" }, - { "jeol-nsdtp-1", { NULL }, 6241, "tcp" }, - { "jeol-nsddp-1", { NULL }, 6241, "udp" }, - { "jeol-nsdtp-2", { NULL }, 6242, "tcp" }, - { "jeol-nsddp-2", { NULL }, 6242, "udp" }, - { "jeol-nsdtp-3", { NULL }, 6243, "tcp" }, - { "jeol-nsddp-3", { NULL }, 6243, "udp" }, - { "jeol-nsdtp-4", { NULL }, 6244, "tcp" }, - { "jeol-nsddp-4", { NULL }, 6244, "udp" }, - { "tl1-raw-ssl", { NULL }, 6251, "tcp" }, - { "tl1-raw-ssl", { NULL }, 6251, "udp" }, - { "tl1-ssh", { NULL }, 6252, "tcp" }, - { "tl1-ssh", { NULL }, 6252, "udp" }, - { "crip", { NULL }, 6253, "tcp" }, - { "crip", { NULL }, 6253, "udp" }, - { "gld", { NULL }, 6267, "tcp" }, - { "grid", { NULL }, 6268, "tcp" }, - { "grid", { NULL }, 6268, "udp" }, - { "grid-alt", { NULL }, 6269, "tcp" }, - { "grid-alt", { NULL }, 6269, "udp" }, - { "bmc-grx", { NULL }, 6300, "tcp" }, - { "bmc-grx", { NULL }, 6300, "udp" }, - { "bmc_ctd_ldap", { NULL }, 6301, "tcp" }, - { "bmc_ctd_ldap", { NULL }, 6301, "udp" }, - { "ufmp", { NULL }, 6306, "tcp" }, - { "ufmp", { NULL }, 6306, "udp" }, - { "scup", { NULL }, 6315, "tcp" }, - { "scup-disc", { NULL }, 6315, "udp" }, - { "abb-escp", { NULL }, 6316, "tcp" }, - { "abb-escp", { NULL }, 6316, "udp" }, - { "repsvc", { NULL }, 6320, "tcp" }, - { "repsvc", { NULL }, 6320, "udp" }, - { "emp-server1", { NULL }, 6321, "tcp" }, - { "emp-server1", { NULL }, 6321, "udp" }, - { "emp-server2", { NULL }, 6322, "tcp" }, - { "emp-server2", { NULL }, 6322, "udp" }, - { "sflow", { NULL }, 6343, "tcp" }, - { "sflow", { NULL }, 6343, "udp" }, - { "gnutella-svc", { NULL }, 6346, "tcp" }, - { "gnutella-svc", { NULL }, 6346, "udp" }, - { "gnutella-rtr", { NULL }, 6347, "tcp" }, - { "gnutella-rtr", { NULL }, 6347, "udp" }, - { "adap", { NULL }, 6350, "tcp" }, - { "adap", { NULL }, 6350, "udp" }, - { "pmcs", { NULL }, 6355, "tcp" }, - { "pmcs", { NULL }, 6355, "udp" }, - { "metaedit-mu", { NULL }, 6360, "tcp" }, - { "metaedit-mu", { NULL }, 6360, "udp" }, - { "metaedit-se", { NULL }, 6370, "tcp" }, - { "metaedit-se", { NULL }, 6370, "udp" }, - { "metatude-mds", { NULL }, 6382, "tcp" }, - { "metatude-mds", { NULL }, 6382, "udp" }, - { "clariion-evr01", { NULL }, 6389, "tcp" }, - { "clariion-evr01", { NULL }, 6389, "udp" }, - { "metaedit-ws", { NULL }, 6390, "tcp" }, - { "metaedit-ws", { NULL }, 6390, "udp" }, - { "faxcomservice", { NULL }, 6417, "tcp" }, - { "faxcomservice", { NULL }, 6417, "udp" }, - { "syserverremote", { NULL }, 6418, "tcp" }, - { "svdrp", { NULL }, 6419, "tcp" }, - { "nim-vdrshell", { NULL }, 6420, "tcp" }, - { "nim-vdrshell", { NULL }, 6420, "udp" }, - { "nim-wan", { NULL }, 6421, "tcp" }, - { "nim-wan", { NULL }, 6421, "udp" }, - { "pgbouncer", { NULL }, 6432, "tcp" }, - { "sun-sr-https", { NULL }, 6443, "tcp" }, - { "sun-sr-https", { NULL }, 6443, "udp" }, - { "sge_qmaster", { NULL }, 6444, "tcp" }, - { "sge_qmaster", { NULL }, 6444, "udp" }, - { "sge_execd", { NULL }, 6445, "tcp" }, - { "sge_execd", { NULL }, 6445, "udp" }, - { "mysql-proxy", { NULL }, 6446, "tcp" }, - { "mysql-proxy", { NULL }, 6446, "udp" }, - { "skip-cert-recv", { NULL }, 6455, "tcp" }, - { "skip-cert-send", { NULL }, 6456, "udp" }, - { "lvision-lm", { NULL }, 6471, "tcp" }, - { "lvision-lm", { NULL }, 6471, "udp" }, - { "sun-sr-http", { NULL }, 6480, "tcp" }, - { "sun-sr-http", { NULL }, 6480, "udp" }, - { "servicetags", { NULL }, 6481, "tcp" }, - { "servicetags", { NULL }, 6481, "udp" }, - { "ldoms-mgmt", { NULL }, 6482, "tcp" }, - { "ldoms-mgmt", { NULL }, 6482, "udp" }, - { "SunVTS-RMI", { NULL }, 6483, "tcp" }, - { "SunVTS-RMI", { NULL }, 6483, "udp" }, - { "sun-sr-jms", { NULL }, 6484, "tcp" }, - { "sun-sr-jms", { NULL }, 6484, "udp" }, - { "sun-sr-iiop", { NULL }, 6485, "tcp" }, - { "sun-sr-iiop", { NULL }, 6485, "udp" }, - { "sun-sr-iiops", { NULL }, 6486, "tcp" }, - { "sun-sr-iiops", { NULL }, 6486, "udp" }, - { "sun-sr-iiop-aut", { NULL }, 6487, "tcp" }, - { "sun-sr-iiop-aut", { NULL }, 6487, "udp" }, - { "sun-sr-jmx", { NULL }, 6488, "tcp" }, - { "sun-sr-jmx", { NULL }, 6488, "udp" }, - { "sun-sr-admin", { NULL }, 6489, "tcp" }, - { "sun-sr-admin", { NULL }, 6489, "udp" }, - { "boks", { NULL }, 6500, "tcp" }, - { "boks", { NULL }, 6500, "udp" }, - { "boks_servc", { NULL }, 6501, "tcp" }, - { "boks_servc", { NULL }, 6501, "udp" }, - { "boks_servm", { NULL }, 6502, "tcp" }, - { "boks_servm", { NULL }, 6502, "udp" }, - { "boks_clntd", { NULL }, 6503, "tcp" }, - { "boks_clntd", { NULL }, 6503, "udp" }, - { "badm_priv", { NULL }, 6505, "tcp" }, - { "badm_priv", { NULL }, 6505, "udp" }, - { "badm_pub", { NULL }, 6506, "tcp" }, - { "badm_pub", { NULL }, 6506, "udp" }, - { "bdir_priv", { NULL }, 6507, "tcp" }, - { "bdir_priv", { NULL }, 6507, "udp" }, - { "bdir_pub", { NULL }, 6508, "tcp" }, - { "bdir_pub", { NULL }, 6508, "udp" }, - { "mgcs-mfp-port", { NULL }, 6509, "tcp" }, - { "mgcs-mfp-port", { NULL }, 6509, "udp" }, - { "mcer-port", { NULL }, 6510, "tcp" }, - { "mcer-port", { NULL }, 6510, "udp" }, - { "netconf-tls", { NULL }, 6513, "tcp" }, - { "syslog-tls", { NULL }, 6514, "tcp" }, - { "syslog-tls", { NULL }, 6514, "udp" }, - { "syslog-tls", { NULL }, 6514, "dccp" }, - { "elipse-rec", { NULL }, 6515, "tcp" }, - { "elipse-rec", { NULL }, 6515, "udp" }, - { "lds-distrib", { NULL }, 6543, "tcp" }, - { "lds-distrib", { NULL }, 6543, "udp" }, - { "lds-dump", { NULL }, 6544, "tcp" }, - { "lds-dump", { NULL }, 6544, "udp" }, - { "apc-6547", { NULL }, 6547, "tcp" }, - { "apc-6547", { NULL }, 6547, "udp" }, - { "apc-6548", { NULL }, 6548, "tcp" }, - { "apc-6548", { NULL }, 6548, "udp" }, - { "apc-6549", { NULL }, 6549, "tcp" }, - { "apc-6549", { NULL }, 6549, "udp" }, - { "fg-sysupdate", { NULL }, 6550, "tcp" }, - { "fg-sysupdate", { NULL }, 6550, "udp" }, - { "sum", { NULL }, 6551, "tcp" }, - { "sum", { NULL }, 6551, "udp" }, - { "xdsxdm", { NULL }, 6558, "tcp" }, - { "xdsxdm", { NULL }, 6558, "udp" }, - { "sane-port", { NULL }, 6566, "tcp" }, - { "sane-port", { NULL }, 6566, "udp" }, - { "esp", { NULL }, 6567, "tcp" }, - { "esp", { NULL }, 6567, "udp" }, - { "canit_store", { NULL }, 6568, "tcp" }, - { "rp-reputation", { NULL }, 6568, "udp" }, - { "affiliate", { NULL }, 6579, "tcp" }, - { "affiliate", { NULL }, 6579, "udp" }, - { "parsec-master", { NULL }, 6580, "tcp" }, - { "parsec-master", { NULL }, 6580, "udp" }, - { "parsec-peer", { NULL }, 6581, "tcp" }, - { "parsec-peer", { NULL }, 6581, "udp" }, - { "parsec-game", { NULL }, 6582, "tcp" }, - { "parsec-game", { NULL }, 6582, "udp" }, - { "joaJewelSuite", { NULL }, 6583, "tcp" }, - { "joaJewelSuite", { NULL }, 6583, "udp" }, - { "mshvlm", { NULL }, 6600, "tcp" }, - { "mstmg-sstp", { NULL }, 6601, "tcp" }, - { "wsscomfrmwk", { NULL }, 6602, "tcp" }, - { "odette-ftps", { NULL }, 6619, "tcp" }, - { "odette-ftps", { NULL }, 6619, "udp" }, - { "kftp-data", { NULL }, 6620, "tcp" }, - { "kftp-data", { NULL }, 6620, "udp" }, - { "kftp", { NULL }, 6621, "tcp" }, - { "kftp", { NULL }, 6621, "udp" }, - { "mcftp", { NULL }, 6622, "tcp" }, - { "mcftp", { NULL }, 6622, "udp" }, - { "ktelnet", { NULL }, 6623, "tcp" }, - { "ktelnet", { NULL }, 6623, "udp" }, - { "datascaler-db", { NULL }, 6624, "tcp" }, - { "datascaler-ctl", { NULL }, 6625, "tcp" }, - { "wago-service", { NULL }, 6626, "tcp" }, - { "wago-service", { NULL }, 6626, "udp" }, - { "nexgen", { NULL }, 6627, "tcp" }, - { "nexgen", { NULL }, 6627, "udp" }, - { "afesc-mc", { NULL }, 6628, "tcp" }, - { "afesc-mc", { NULL }, 6628, "udp" }, - { "mxodbc-connect", { NULL }, 6632, "tcp" }, - { "pcs-sf-ui-man", { NULL }, 6655, "tcp" }, - { "emgmsg", { NULL }, 6656, "tcp" }, - { "palcom-disc", { NULL }, 6657, "udp" }, - { "vocaltec-gold", { NULL }, 6670, "tcp" }, - { "vocaltec-gold", { NULL }, 6670, "udp" }, - { "p4p-portal", { NULL }, 6671, "tcp" }, - { "p4p-portal", { NULL }, 6671, "udp" }, - { "vision_server", { NULL }, 6672, "tcp" }, - { "vision_server", { NULL }, 6672, "udp" }, - { "vision_elmd", { NULL }, 6673, "tcp" }, - { "vision_elmd", { NULL }, 6673, "udp" }, - { "vfbp", { NULL }, 6678, "tcp" }, - { "vfbp-disc", { NULL }, 6678, "udp" }, - { "osaut", { NULL }, 6679, "tcp" }, - { "osaut", { NULL }, 6679, "udp" }, - { "clever-ctrace", { NULL }, 6687, "tcp" }, - { "clever-tcpip", { NULL }, 6688, "tcp" }, - { "tsa", { NULL }, 6689, "tcp" }, - { "tsa", { NULL }, 6689, "udp" }, - { "babel", { NULL }, 6697, "udp" }, - { "kti-icad-srvr", { NULL }, 6701, "tcp" }, - { "kti-icad-srvr", { NULL }, 6701, "udp" }, - { "e-design-net", { NULL }, 6702, "tcp" }, - { "e-design-net", { NULL }, 6702, "udp" }, - { "e-design-web", { NULL }, 6703, "tcp" }, - { "e-design-web", { NULL }, 6703, "udp" }, - { "frc-hp", { NULL }, 6704, "sctp" }, - { "frc-mp", { NULL }, 6705, "sctp" }, - { "frc-lp", { NULL }, 6706, "sctp" }, - { "ibprotocol", { NULL }, 6714, "tcp" }, - { "ibprotocol", { NULL }, 6714, "udp" }, - { "fibotrader-com", { NULL }, 6715, "tcp" }, - { "fibotrader-com", { NULL }, 6715, "udp" }, - { "bmc-perf-agent", { NULL }, 6767, "tcp" }, - { "bmc-perf-agent", { NULL }, 6767, "udp" }, - { "bmc-perf-mgrd", { NULL }, 6768, "tcp" }, - { "bmc-perf-mgrd", { NULL }, 6768, "udp" }, - { "adi-gxp-srvprt", { NULL }, 6769, "tcp" }, - { "adi-gxp-srvprt", { NULL }, 6769, "udp" }, - { "plysrv-http", { NULL }, 6770, "tcp" }, - { "plysrv-http", { NULL }, 6770, "udp" }, - { "plysrv-https", { NULL }, 6771, "tcp" }, - { "plysrv-https", { NULL }, 6771, "udp" }, - { "dgpf-exchg", { NULL }, 6785, "tcp" }, - { "dgpf-exchg", { NULL }, 6785, "udp" }, - { "smc-jmx", { NULL }, 6786, "tcp" }, - { "smc-jmx", { NULL }, 6786, "udp" }, - { "smc-admin", { NULL }, 6787, "tcp" }, - { "smc-admin", { NULL }, 6787, "udp" }, - { "smc-http", { NULL }, 6788, "tcp" }, - { "smc-http", { NULL }, 6788, "udp" }, - { "smc-https", { NULL }, 6789, "tcp" }, - { "smc-https", { NULL }, 6789, "udp" }, - { "hnmp", { NULL }, 6790, "tcp" }, - { "hnmp", { NULL }, 6790, "udp" }, - { "hnm", { NULL }, 6791, "tcp" }, - { "hnm", { NULL }, 6791, "udp" }, - { "acnet", { NULL }, 6801, "tcp" }, - { "acnet", { NULL }, 6801, "udp" }, - { "pentbox-sim", { NULL }, 6817, "tcp" }, - { "ambit-lm", { NULL }, 6831, "tcp" }, - { "ambit-lm", { NULL }, 6831, "udp" }, - { "netmo-default", { NULL }, 6841, "tcp" }, - { "netmo-default", { NULL }, 6841, "udp" }, - { "netmo-http", { NULL }, 6842, "tcp" }, - { "netmo-http", { NULL }, 6842, "udp" }, - { "iccrushmore", { NULL }, 6850, "tcp" }, - { "iccrushmore", { NULL }, 6850, "udp" }, - { "acctopus-cc", { NULL }, 6868, "tcp" }, - { "acctopus-st", { NULL }, 6868, "udp" }, - { "muse", { NULL }, 6888, "tcp" }, - { "muse", { NULL }, 6888, "udp" }, - { "jetstream", { NULL }, 6901, "tcp" }, - { "xsmsvc", { NULL }, 6936, "tcp" }, - { "xsmsvc", { NULL }, 6936, "udp" }, - { "bioserver", { NULL }, 6946, "tcp" }, - { "bioserver", { NULL }, 6946, "udp" }, - { "otlp", { NULL }, 6951, "tcp" }, - { "otlp", { NULL }, 6951, "udp" }, - { "jmact3", { NULL }, 6961, "tcp" }, - { "jmact3", { NULL }, 6961, "udp" }, - { "jmevt2", { NULL }, 6962, "tcp" }, - { "jmevt2", { NULL }, 6962, "udp" }, - { "swismgr1", { NULL }, 6963, "tcp" }, - { "swismgr1", { NULL }, 6963, "udp" }, - { "swismgr2", { NULL }, 6964, "tcp" }, - { "swismgr2", { NULL }, 6964, "udp" }, - { "swistrap", { NULL }, 6965, "tcp" }, - { "swistrap", { NULL }, 6965, "udp" }, - { "swispol", { NULL }, 6966, "tcp" }, - { "swispol", { NULL }, 6966, "udp" }, - { "acmsoda", { NULL }, 6969, "tcp" }, - { "acmsoda", { NULL }, 6969, "udp" }, - { "MobilitySrv", { NULL }, 6997, "tcp" }, - { "MobilitySrv", { NULL }, 6997, "udp" }, - { "iatp-highpri", { NULL }, 6998, "tcp" }, - { "iatp-highpri", { NULL }, 6998, "udp" }, - { "iatp-normalpri", { NULL }, 6999, "tcp" }, - { "iatp-normalpri", { NULL }, 6999, "udp" }, - { "afs3-fileserver", { NULL }, 7000, "tcp" }, - { "afs3-fileserver", { NULL }, 7000, "udp" }, - { "afs3-callback", { NULL }, 7001, "tcp" }, - { "afs3-callback", { NULL }, 7001, "udp" }, - { "afs3-prserver", { NULL }, 7002, "tcp" }, - { "afs3-prserver", { NULL }, 7002, "udp" }, - { "afs3-vlserver", { NULL }, 7003, "tcp" }, - { "afs3-vlserver", { NULL }, 7003, "udp" }, - { "afs3-kaserver", { NULL }, 7004, "tcp" }, - { "afs3-kaserver", { NULL }, 7004, "udp" }, - { "afs3-volser", { NULL }, 7005, "tcp" }, - { "afs3-volser", { NULL }, 7005, "udp" }, - { "afs3-errors", { NULL }, 7006, "tcp" }, - { "afs3-errors", { NULL }, 7006, "udp" }, - { "afs3-bos", { NULL }, 7007, "tcp" }, - { "afs3-bos", { NULL }, 7007, "udp" }, - { "afs3-update", { NULL }, 7008, "tcp" }, - { "afs3-update", { NULL }, 7008, "udp" }, - { "afs3-rmtsys", { NULL }, 7009, "tcp" }, - { "afs3-rmtsys", { NULL }, 7009, "udp" }, - { "ups-onlinet", { NULL }, 7010, "tcp" }, - { "ups-onlinet", { NULL }, 7010, "udp" }, - { "talon-disc", { NULL }, 7011, "tcp" }, - { "talon-disc", { NULL }, 7011, "udp" }, - { "talon-engine", { NULL }, 7012, "tcp" }, - { "talon-engine", { NULL }, 7012, "udp" }, - { "microtalon-dis", { NULL }, 7013, "tcp" }, - { "microtalon-dis", { NULL }, 7013, "udp" }, - { "microtalon-com", { NULL }, 7014, "tcp" }, - { "microtalon-com", { NULL }, 7014, "udp" }, - { "talon-webserver", { NULL }, 7015, "tcp" }, - { "talon-webserver", { NULL }, 7015, "udp" }, - { "dpserve", { NULL }, 7020, "tcp" }, - { "dpserve", { NULL }, 7020, "udp" }, - { "dpserveadmin", { NULL }, 7021, "tcp" }, - { "dpserveadmin", { NULL }, 7021, "udp" }, - { "ctdp", { NULL }, 7022, "tcp" }, - { "ctdp", { NULL }, 7022, "udp" }, - { "ct2nmcs", { NULL }, 7023, "tcp" }, - { "ct2nmcs", { NULL }, 7023, "udp" }, - { "vmsvc", { NULL }, 7024, "tcp" }, - { "vmsvc", { NULL }, 7024, "udp" }, - { "vmsvc-2", { NULL }, 7025, "tcp" }, - { "vmsvc-2", { NULL }, 7025, "udp" }, - { "op-probe", { NULL }, 7030, "tcp" }, - { "op-probe", { NULL }, 7030, "udp" }, - { "arcp", { NULL }, 7070, "tcp" }, - { "arcp", { NULL }, 7070, "udp" }, - { "iwg1", { NULL }, 7071, "tcp" }, - { "iwg1", { NULL }, 7071, "udp" }, - { "empowerid", { NULL }, 7080, "tcp" }, - { "empowerid", { NULL }, 7080, "udp" }, - { "lazy-ptop", { NULL }, 7099, "tcp" }, - { "lazy-ptop", { NULL }, 7099, "udp" }, - { "font-service", { NULL }, 7100, "tcp" }, - { "font-service", { NULL }, 7100, "udp" }, - { "elcn", { NULL }, 7101, "tcp" }, - { "elcn", { NULL }, 7101, "udp" }, - { "aes-x170", { NULL }, 7107, "udp" }, - { "virprot-lm", { NULL }, 7121, "tcp" }, - { "virprot-lm", { NULL }, 7121, "udp" }, - { "scenidm", { NULL }, 7128, "tcp" }, - { "scenidm", { NULL }, 7128, "udp" }, - { "scenccs", { NULL }, 7129, "tcp" }, - { "scenccs", { NULL }, 7129, "udp" }, - { "cabsm-comm", { NULL }, 7161, "tcp" }, - { "cabsm-comm", { NULL }, 7161, "udp" }, - { "caistoragemgr", { NULL }, 7162, "tcp" }, - { "caistoragemgr", { NULL }, 7162, "udp" }, - { "cacsambroker", { NULL }, 7163, "tcp" }, - { "cacsambroker", { NULL }, 7163, "udp" }, - { "fsr", { NULL }, 7164, "tcp" }, - { "fsr", { NULL }, 7164, "udp" }, - { "doc-server", { NULL }, 7165, "tcp" }, - { "doc-server", { NULL }, 7165, "udp" }, - { "aruba-server", { NULL }, 7166, "tcp" }, - { "aruba-server", { NULL }, 7166, "udp" }, - { "casrmagent", { NULL }, 7167, "tcp" }, - { "cnckadserver", { NULL }, 7168, "tcp" }, - { "ccag-pib", { NULL }, 7169, "tcp" }, - { "ccag-pib", { NULL }, 7169, "udp" }, - { "nsrp", { NULL }, 7170, "tcp" }, - { "nsrp", { NULL }, 7170, "udp" }, - { "drm-production", { NULL }, 7171, "tcp" }, - { "drm-production", { NULL }, 7171, "udp" }, - { "zsecure", { NULL }, 7173, "tcp" }, - { "clutild", { NULL }, 7174, "tcp" }, - { "clutild", { NULL }, 7174, "udp" }, - { "fodms", { NULL }, 7200, "tcp" }, - { "fodms", { NULL }, 7200, "udp" }, - { "dlip", { NULL }, 7201, "tcp" }, - { "dlip", { NULL }, 7201, "udp" }, - { "ramp", { NULL }, 7227, "tcp" }, - { "ramp", { NULL }, 7227, "udp" }, - { "citrixupp", { NULL }, 7228, "tcp" }, - { "citrixuppg", { NULL }, 7229, "tcp" }, - { "pads", { NULL }, 7237, "tcp" }, - { "cnap", { NULL }, 7262, "tcp" }, - { "cnap", { NULL }, 7262, "udp" }, - { "watchme-7272", { NULL }, 7272, "tcp" }, - { "watchme-7272", { NULL }, 7272, "udp" }, - { "oma-rlp", { NULL }, 7273, "tcp" }, - { "oma-rlp", { NULL }, 7273, "udp" }, - { "oma-rlp-s", { NULL }, 7274, "tcp" }, - { "oma-rlp-s", { NULL }, 7274, "udp" }, - { "oma-ulp", { NULL }, 7275, "tcp" }, - { "oma-ulp", { NULL }, 7275, "udp" }, - { "oma-ilp", { NULL }, 7276, "tcp" }, - { "oma-ilp", { NULL }, 7276, "udp" }, - { "oma-ilp-s", { NULL }, 7277, "tcp" }, - { "oma-ilp-s", { NULL }, 7277, "udp" }, - { "oma-dcdocbs", { NULL }, 7278, "tcp" }, - { "oma-dcdocbs", { NULL }, 7278, "udp" }, - { "ctxlic", { NULL }, 7279, "tcp" }, - { "ctxlic", { NULL }, 7279, "udp" }, - { "itactionserver1", { NULL }, 7280, "tcp" }, - { "itactionserver1", { NULL }, 7280, "udp" }, - { "itactionserver2", { NULL }, 7281, "tcp" }, - { "itactionserver2", { NULL }, 7281, "udp" }, - { "mzca-action", { NULL }, 7282, "tcp" }, - { "mzca-alert", { NULL }, 7282, "udp" }, - { "lcm-server", { NULL }, 7365, "tcp" }, - { "lcm-server", { NULL }, 7365, "udp" }, - { "mindfilesys", { NULL }, 7391, "tcp" }, - { "mindfilesys", { NULL }, 7391, "udp" }, - { "mrssrendezvous", { NULL }, 7392, "tcp" }, - { "mrssrendezvous", { NULL }, 7392, "udp" }, - { "nfoldman", { NULL }, 7393, "tcp" }, - { "nfoldman", { NULL }, 7393, "udp" }, - { "fse", { NULL }, 7394, "tcp" }, - { "fse", { NULL }, 7394, "udp" }, - { "winqedit", { NULL }, 7395, "tcp" }, - { "winqedit", { NULL }, 7395, "udp" }, - { "hexarc", { NULL }, 7397, "tcp" }, - { "hexarc", { NULL }, 7397, "udp" }, - { "rtps-discovery", { NULL }, 7400, "tcp" }, - { "rtps-discovery", { NULL }, 7400, "udp" }, - { "rtps-dd-ut", { NULL }, 7401, "tcp" }, - { "rtps-dd-ut", { NULL }, 7401, "udp" }, - { "rtps-dd-mt", { NULL }, 7402, "tcp" }, - { "rtps-dd-mt", { NULL }, 7402, "udp" }, - { "ionixnetmon", { NULL }, 7410, "tcp" }, - { "ionixnetmon", { NULL }, 7410, "udp" }, - { "mtportmon", { NULL }, 7421, "tcp" }, - { "mtportmon", { NULL }, 7421, "udp" }, - { "pmdmgr", { NULL }, 7426, "tcp" }, - { "pmdmgr", { NULL }, 7426, "udp" }, - { "oveadmgr", { NULL }, 7427, "tcp" }, - { "oveadmgr", { NULL }, 7427, "udp" }, - { "ovladmgr", { NULL }, 7428, "tcp" }, - { "ovladmgr", { NULL }, 7428, "udp" }, - { "opi-sock", { NULL }, 7429, "tcp" }, - { "opi-sock", { NULL }, 7429, "udp" }, - { "xmpv7", { NULL }, 7430, "tcp" }, - { "xmpv7", { NULL }, 7430, "udp" }, - { "pmd", { NULL }, 7431, "tcp" }, - { "pmd", { NULL }, 7431, "udp" }, - { "faximum", { NULL }, 7437, "tcp" }, - { "faximum", { NULL }, 7437, "udp" }, - { "oracleas-https", { NULL }, 7443, "tcp" }, - { "oracleas-https", { NULL }, 7443, "udp" }, - { "rise", { NULL }, 7473, "tcp" }, - { "rise", { NULL }, 7473, "udp" }, - { "telops-lmd", { NULL }, 7491, "tcp" }, - { "telops-lmd", { NULL }, 7491, "udp" }, - { "silhouette", { NULL }, 7500, "tcp" }, - { "silhouette", { NULL }, 7500, "udp" }, - { "ovbus", { NULL }, 7501, "tcp" }, - { "ovbus", { NULL }, 7501, "udp" }, - { "acplt", { NULL }, 7509, "tcp" }, - { "ovhpas", { NULL }, 7510, "tcp" }, - { "ovhpas", { NULL }, 7510, "udp" }, - { "pafec-lm", { NULL }, 7511, "tcp" }, - { "pafec-lm", { NULL }, 7511, "udp" }, - { "saratoga", { NULL }, 7542, "tcp" }, - { "saratoga", { NULL }, 7542, "udp" }, - { "atul", { NULL }, 7543, "tcp" }, - { "atul", { NULL }, 7543, "udp" }, - { "nta-ds", { NULL }, 7544, "tcp" }, - { "nta-ds", { NULL }, 7544, "udp" }, - { "nta-us", { NULL }, 7545, "tcp" }, - { "nta-us", { NULL }, 7545, "udp" }, - { "cfs", { NULL }, 7546, "tcp" }, - { "cfs", { NULL }, 7546, "udp" }, - { "cwmp", { NULL }, 7547, "tcp" }, - { "cwmp", { NULL }, 7547, "udp" }, - { "tidp", { NULL }, 7548, "tcp" }, - { "tidp", { NULL }, 7548, "udp" }, - { "nls-tl", { NULL }, 7549, "tcp" }, - { "nls-tl", { NULL }, 7549, "udp" }, - { "sncp", { NULL }, 7560, "tcp" }, - { "sncp", { NULL }, 7560, "udp" }, - { "cfw", { NULL }, 7563, "tcp" }, - { "vsi-omega", { NULL }, 7566, "tcp" }, - { "vsi-omega", { NULL }, 7566, "udp" }, - { "dell-eql-asm", { NULL }, 7569, "tcp" }, - { "aries-kfinder", { NULL }, 7570, "tcp" }, - { "aries-kfinder", { NULL }, 7570, "udp" }, - { "sun-lm", { NULL }, 7588, "tcp" }, - { "sun-lm", { NULL }, 7588, "udp" }, - { "indi", { NULL }, 7624, "tcp" }, - { "indi", { NULL }, 7624, "udp" }, - { "simco", { NULL }, 7626, "tcp" }, - { "simco", { NULL }, 7626, "sctp" }, - { "soap-http", { NULL }, 7627, "tcp" }, - { "soap-http", { NULL }, 7627, "udp" }, - { "zen-pawn", { NULL }, 7628, "tcp" }, - { "zen-pawn", { NULL }, 7628, "udp" }, - { "xdas", { NULL }, 7629, "tcp" }, - { "xdas", { NULL }, 7629, "udp" }, - { "hawk", { NULL }, 7630, "tcp" }, - { "tesla-sys-msg", { NULL }, 7631, "tcp" }, - { "pmdfmgt", { NULL }, 7633, "tcp" }, - { "pmdfmgt", { NULL }, 7633, "udp" }, - { "cuseeme", { NULL }, 7648, "tcp" }, - { "cuseeme", { NULL }, 7648, "udp" }, - { "imqstomp", { NULL }, 7672, "tcp" }, - { "imqstomps", { NULL }, 7673, "tcp" }, - { "imqtunnels", { NULL }, 7674, "tcp" }, - { "imqtunnels", { NULL }, 7674, "udp" }, - { "imqtunnel", { NULL }, 7675, "tcp" }, - { "imqtunnel", { NULL }, 7675, "udp" }, - { "imqbrokerd", { NULL }, 7676, "tcp" }, - { "imqbrokerd", { NULL }, 7676, "udp" }, - { "sun-user-https", { NULL }, 7677, "tcp" }, - { "sun-user-https", { NULL }, 7677, "udp" }, - { "pando-pub", { NULL }, 7680, "tcp" }, - { "pando-pub", { NULL }, 7680, "udp" }, - { "collaber", { NULL }, 7689, "tcp" }, - { "collaber", { NULL }, 7689, "udp" }, - { "klio", { NULL }, 7697, "tcp" }, - { "klio", { NULL }, 7697, "udp" }, - { "em7-secom", { NULL }, 7700, "tcp" }, - { "sync-em7", { NULL }, 7707, "tcp" }, - { "sync-em7", { NULL }, 7707, "udp" }, - { "scinet", { NULL }, 7708, "tcp" }, - { "scinet", { NULL }, 7708, "udp" }, - { "medimageportal", { NULL }, 7720, "tcp" }, - { "medimageportal", { NULL }, 7720, "udp" }, - { "nsdeepfreezectl", { NULL }, 7724, "tcp" }, - { "nsdeepfreezectl", { NULL }, 7724, "udp" }, - { "nitrogen", { NULL }, 7725, "tcp" }, - { "nitrogen", { NULL }, 7725, "udp" }, - { "freezexservice", { NULL }, 7726, "tcp" }, - { "freezexservice", { NULL }, 7726, "udp" }, - { "trident-data", { NULL }, 7727, "tcp" }, - { "trident-data", { NULL }, 7727, "udp" }, - { "smip", { NULL }, 7734, "tcp" }, - { "smip", { NULL }, 7734, "udp" }, - { "aiagent", { NULL }, 7738, "tcp" }, - { "aiagent", { NULL }, 7738, "udp" }, - { "scriptview", { NULL }, 7741, "tcp" }, - { "scriptview", { NULL }, 7741, "udp" }, - { "msss", { NULL }, 7742, "tcp" }, - { "sstp-1", { NULL }, 7743, "tcp" }, - { "sstp-1", { NULL }, 7743, "udp" }, - { "raqmon-pdu", { NULL }, 7744, "tcp" }, - { "raqmon-pdu", { NULL }, 7744, "udp" }, - { "prgp", { NULL }, 7747, "tcp" }, - { "prgp", { NULL }, 7747, "udp" }, - { "cbt", { NULL }, 7777, "tcp" }, - { "cbt", { NULL }, 7777, "udp" }, - { "interwise", { NULL }, 7778, "tcp" }, - { "interwise", { NULL }, 7778, "udp" }, - { "vstat", { NULL }, 7779, "tcp" }, - { "vstat", { NULL }, 7779, "udp" }, - { "accu-lmgr", { NULL }, 7781, "tcp" }, - { "accu-lmgr", { NULL }, 7781, "udp" }, - { "minivend", { NULL }, 7786, "tcp" }, - { "minivend", { NULL }, 7786, "udp" }, - { "popup-reminders", { NULL }, 7787, "tcp" }, - { "popup-reminders", { NULL }, 7787, "udp" }, - { "office-tools", { NULL }, 7789, "tcp" }, - { "office-tools", { NULL }, 7789, "udp" }, - { "q3ade", { NULL }, 7794, "tcp" }, - { "q3ade", { NULL }, 7794, "udp" }, - { "pnet-conn", { NULL }, 7797, "tcp" }, - { "pnet-conn", { NULL }, 7797, "udp" }, - { "pnet-enc", { NULL }, 7798, "tcp" }, - { "pnet-enc", { NULL }, 7798, "udp" }, - { "altbsdp", { NULL }, 7799, "tcp" }, - { "altbsdp", { NULL }, 7799, "udp" }, - { "asr", { NULL }, 7800, "tcp" }, - { "asr", { NULL }, 7800, "udp" }, - { "ssp-client", { NULL }, 7801, "tcp" }, - { "ssp-client", { NULL }, 7801, "udp" }, - { "rbt-wanopt", { NULL }, 7810, "tcp" }, - { "rbt-wanopt", { NULL }, 7810, "udp" }, - { "apc-7845", { NULL }, 7845, "tcp" }, - { "apc-7845", { NULL }, 7845, "udp" }, - { "apc-7846", { NULL }, 7846, "tcp" }, - { "apc-7846", { NULL }, 7846, "udp" }, - { "mobileanalyzer", { NULL }, 7869, "tcp" }, - { "rbt-smc", { NULL }, 7870, "tcp" }, - { "pss", { NULL }, 7880, "tcp" }, - { "pss", { NULL }, 7880, "udp" }, - { "ubroker", { NULL }, 7887, "tcp" }, - { "ubroker", { NULL }, 7887, "udp" }, - { "mevent", { NULL }, 7900, "tcp" }, - { "mevent", { NULL }, 7900, "udp" }, - { "tnos-sp", { NULL }, 7901, "tcp" }, - { "tnos-sp", { NULL }, 7901, "udp" }, - { "tnos-dp", { NULL }, 7902, "tcp" }, - { "tnos-dp", { NULL }, 7902, "udp" }, - { "tnos-dps", { NULL }, 7903, "tcp" }, - { "tnos-dps", { NULL }, 7903, "udp" }, - { "qo-secure", { NULL }, 7913, "tcp" }, - { "qo-secure", { NULL }, 7913, "udp" }, - { "t2-drm", { NULL }, 7932, "tcp" }, - { "t2-drm", { NULL }, 7932, "udp" }, - { "t2-brm", { NULL }, 7933, "tcp" }, - { "t2-brm", { NULL }, 7933, "udp" }, - { "supercell", { NULL }, 7967, "tcp" }, - { "supercell", { NULL }, 7967, "udp" }, - { "micromuse-ncps", { NULL }, 7979, "tcp" }, - { "micromuse-ncps", { NULL }, 7979, "udp" }, - { "quest-vista", { NULL }, 7980, "tcp" }, - { "quest-vista", { NULL }, 7980, "udp" }, - { "sossd-collect", { NULL }, 7981, "tcp" }, - { "sossd-agent", { NULL }, 7982, "tcp" }, - { "sossd-disc", { NULL }, 7982, "udp" }, - { "pushns", { NULL }, 7997, "tcp" }, - { "usicontentpush", { NULL }, 7998, "udp" }, - { "irdmi2", { NULL }, 7999, "tcp" }, - { "irdmi2", { NULL }, 7999, "udp" }, - { "irdmi", { NULL }, 8000, "tcp" }, - { "irdmi", { NULL }, 8000, "udp" }, - { "vcom-tunnel", { NULL }, 8001, "tcp" }, - { "vcom-tunnel", { NULL }, 8001, "udp" }, - { "teradataordbms", { NULL }, 8002, "tcp" }, - { "teradataordbms", { NULL }, 8002, "udp" }, - { "mcreport", { NULL }, 8003, "tcp" }, - { "mcreport", { NULL }, 8003, "udp" }, - { "mxi", { NULL }, 8005, "tcp" }, - { "mxi", { NULL }, 8005, "udp" }, - { "http-alt", { NULL }, 8008, "tcp" }, - { "http-alt", { NULL }, 8008, "udp" }, - { "qbdb", { NULL }, 8019, "tcp" }, - { "qbdb", { NULL }, 8019, "udp" }, - { "intu-ec-svcdisc", { NULL }, 8020, "tcp" }, - { "intu-ec-svcdisc", { NULL }, 8020, "udp" }, - { "intu-ec-client", { NULL }, 8021, "tcp" }, - { "intu-ec-client", { NULL }, 8021, "udp" }, - { "oa-system", { NULL }, 8022, "tcp" }, - { "oa-system", { NULL }, 8022, "udp" }, - { "ca-audit-da", { NULL }, 8025, "tcp" }, - { "ca-audit-da", { NULL }, 8025, "udp" }, - { "ca-audit-ds", { NULL }, 8026, "tcp" }, - { "ca-audit-ds", { NULL }, 8026, "udp" }, - { "pro-ed", { NULL }, 8032, "tcp" }, - { "pro-ed", { NULL }, 8032, "udp" }, - { "mindprint", { NULL }, 8033, "tcp" }, - { "mindprint", { NULL }, 8033, "udp" }, - { "vantronix-mgmt", { NULL }, 8034, "tcp" }, - { "vantronix-mgmt", { NULL }, 8034, "udp" }, - { "ampify", { NULL }, 8040, "tcp" }, - { "ampify", { NULL }, 8040, "udp" }, - { "fs-agent", { NULL }, 8042, "tcp" }, - { "fs-server", { NULL }, 8043, "tcp" }, - { "fs-mgmt", { NULL }, 8044, "tcp" }, - { "senomix01", { NULL }, 8052, "tcp" }, - { "senomix01", { NULL }, 8052, "udp" }, - { "senomix02", { NULL }, 8053, "tcp" }, - { "senomix02", { NULL }, 8053, "udp" }, - { "senomix03", { NULL }, 8054, "tcp" }, - { "senomix03", { NULL }, 8054, "udp" }, - { "senomix04", { NULL }, 8055, "tcp" }, - { "senomix04", { NULL }, 8055, "udp" }, - { "senomix05", { NULL }, 8056, "tcp" }, - { "senomix05", { NULL }, 8056, "udp" }, - { "senomix06", { NULL }, 8057, "tcp" }, - { "senomix06", { NULL }, 8057, "udp" }, - { "senomix07", { NULL }, 8058, "tcp" }, - { "senomix07", { NULL }, 8058, "udp" }, - { "senomix08", { NULL }, 8059, "tcp" }, - { "senomix08", { NULL }, 8059, "udp" }, - { "gadugadu", { NULL }, 8074, "tcp" }, - { "gadugadu", { NULL }, 8074, "udp" }, - { "http-alt", { NULL }, 8080, "tcp" }, - { "http-alt", { NULL }, 8080, "udp" }, - { "sunproxyadmin", { NULL }, 8081, "tcp" }, - { "sunproxyadmin", { NULL }, 8081, "udp" }, - { "us-cli", { NULL }, 8082, "tcp" }, - { "us-cli", { NULL }, 8082, "udp" }, - { "us-srv", { NULL }, 8083, "tcp" }, - { "us-srv", { NULL }, 8083, "udp" }, - { "d-s-n", { NULL }, 8086, "tcp" }, - { "d-s-n", { NULL }, 8086, "udp" }, - { "simplifymedia", { NULL }, 8087, "tcp" }, - { "simplifymedia", { NULL }, 8087, "udp" }, - { "radan-http", { NULL }, 8088, "tcp" }, - { "radan-http", { NULL }, 8088, "udp" }, - { "jamlink", { NULL }, 8091, "tcp" }, - { "sac", { NULL }, 8097, "tcp" }, - { "sac", { NULL }, 8097, "udp" }, - { "xprint-server", { NULL }, 8100, "tcp" }, - { "xprint-server", { NULL }, 8100, "udp" }, - { "ldoms-migr", { NULL }, 8101, "tcp" }, - { "mtl8000-matrix", { NULL }, 8115, "tcp" }, - { "mtl8000-matrix", { NULL }, 8115, "udp" }, - { "cp-cluster", { NULL }, 8116, "tcp" }, - { "cp-cluster", { NULL }, 8116, "udp" }, - { "privoxy", { NULL }, 8118, "tcp" }, - { "privoxy", { NULL }, 8118, "udp" }, - { "apollo-data", { NULL }, 8121, "tcp" }, - { "apollo-data", { NULL }, 8121, "udp" }, - { "apollo-admin", { NULL }, 8122, "tcp" }, - { "apollo-admin", { NULL }, 8122, "udp" }, - { "paycash-online", { NULL }, 8128, "tcp" }, - { "paycash-online", { NULL }, 8128, "udp" }, - { "paycash-wbp", { NULL }, 8129, "tcp" }, - { "paycash-wbp", { NULL }, 8129, "udp" }, - { "indigo-vrmi", { NULL }, 8130, "tcp" }, - { "indigo-vrmi", { NULL }, 8130, "udp" }, - { "indigo-vbcp", { NULL }, 8131, "tcp" }, - { "indigo-vbcp", { NULL }, 8131, "udp" }, - { "dbabble", { NULL }, 8132, "tcp" }, - { "dbabble", { NULL }, 8132, "udp" }, - { "isdd", { NULL }, 8148, "tcp" }, - { "isdd", { NULL }, 8148, "udp" }, - { "patrol", { NULL }, 8160, "tcp" }, - { "patrol", { NULL }, 8160, "udp" }, - { "patrol-snmp", { NULL }, 8161, "tcp" }, - { "patrol-snmp", { NULL }, 8161, "udp" }, - { "vmware-fdm", { NULL }, 8182, "tcp" }, - { "vmware-fdm", { NULL }, 8182, "udp" }, - { "proremote", { NULL }, 8183, "tcp" }, - { "itach", { NULL }, 8184, "tcp" }, - { "itach", { NULL }, 8184, "udp" }, - { "spytechphone", { NULL }, 8192, "tcp" }, - { "spytechphone", { NULL }, 8192, "udp" }, - { "blp1", { NULL }, 8194, "tcp" }, - { "blp1", { NULL }, 8194, "udp" }, - { "blp2", { NULL }, 8195, "tcp" }, - { "blp2", { NULL }, 8195, "udp" }, - { "vvr-data", { NULL }, 8199, "tcp" }, - { "vvr-data", { NULL }, 8199, "udp" }, - { "trivnet1", { NULL }, 8200, "tcp" }, - { "trivnet1", { NULL }, 8200, "udp" }, - { "trivnet2", { NULL }, 8201, "tcp" }, - { "trivnet2", { NULL }, 8201, "udp" }, - { "lm-perfworks", { NULL }, 8204, "tcp" }, - { "lm-perfworks", { NULL }, 8204, "udp" }, - { "lm-instmgr", { NULL }, 8205, "tcp" }, - { "lm-instmgr", { NULL }, 8205, "udp" }, - { "lm-dta", { NULL }, 8206, "tcp" }, - { "lm-dta", { NULL }, 8206, "udp" }, - { "lm-sserver", { NULL }, 8207, "tcp" }, - { "lm-sserver", { NULL }, 8207, "udp" }, - { "lm-webwatcher", { NULL }, 8208, "tcp" }, - { "lm-webwatcher", { NULL }, 8208, "udp" }, - { "rexecj", { NULL }, 8230, "tcp" }, - { "rexecj", { NULL }, 8230, "udp" }, - { "synapse-nhttps", { NULL }, 8243, "tcp" }, - { "synapse-nhttps", { NULL }, 8243, "udp" }, - { "pando-sec", { NULL }, 8276, "tcp" }, - { "pando-sec", { NULL }, 8276, "udp" }, - { "synapse-nhttp", { NULL }, 8280, "tcp" }, - { "synapse-nhttp", { NULL }, 8280, "udp" }, - { "blp3", { NULL }, 8292, "tcp" }, - { "blp3", { NULL }, 8292, "udp" }, - { "hiperscan-id", { NULL }, 8293, "tcp" }, - { "blp4", { NULL }, 8294, "tcp" }, - { "blp4", { NULL }, 8294, "udp" }, - { "tmi", { NULL }, 8300, "tcp" }, - { "tmi", { NULL }, 8300, "udp" }, - { "amberon", { NULL }, 8301, "tcp" }, - { "amberon", { NULL }, 8301, "udp" }, - { "tnp-discover", { NULL }, 8320, "tcp" }, - { "tnp-discover", { NULL }, 8320, "udp" }, - { "tnp", { NULL }, 8321, "tcp" }, - { "tnp", { NULL }, 8321, "udp" }, - { "server-find", { NULL }, 8351, "tcp" }, - { "server-find", { NULL }, 8351, "udp" }, - { "cruise-enum", { NULL }, 8376, "tcp" }, - { "cruise-enum", { NULL }, 8376, "udp" }, - { "cruise-swroute", { NULL }, 8377, "tcp" }, - { "cruise-swroute", { NULL }, 8377, "udp" }, - { "cruise-config", { NULL }, 8378, "tcp" }, - { "cruise-config", { NULL }, 8378, "udp" }, - { "cruise-diags", { NULL }, 8379, "tcp" }, - { "cruise-diags", { NULL }, 8379, "udp" }, - { "cruise-update", { NULL }, 8380, "tcp" }, - { "cruise-update", { NULL }, 8380, "udp" }, - { "m2mservices", { NULL }, 8383, "tcp" }, - { "m2mservices", { NULL }, 8383, "udp" }, - { "cvd", { NULL }, 8400, "tcp" }, - { "cvd", { NULL }, 8400, "udp" }, - { "sabarsd", { NULL }, 8401, "tcp" }, - { "sabarsd", { NULL }, 8401, "udp" }, - { "abarsd", { NULL }, 8402, "tcp" }, - { "abarsd", { NULL }, 8402, "udp" }, - { "admind", { NULL }, 8403, "tcp" }, - { "admind", { NULL }, 8403, "udp" }, - { "svcloud", { NULL }, 8404, "tcp" }, - { "svbackup", { NULL }, 8405, "tcp" }, - { "espeech", { NULL }, 8416, "tcp" }, - { "espeech", { NULL }, 8416, "udp" }, - { "espeech-rtp", { NULL }, 8417, "tcp" }, - { "espeech-rtp", { NULL }, 8417, "udp" }, - { "cybro-a-bus", { NULL }, 8442, "tcp" }, - { "cybro-a-bus", { NULL }, 8442, "udp" }, - { "pcsync-https", { NULL }, 8443, "tcp" }, - { "pcsync-https", { NULL }, 8443, "udp" }, - { "pcsync-http", { NULL }, 8444, "tcp" }, - { "pcsync-http", { NULL }, 8444, "udp" }, - { "npmp", { NULL }, 8450, "tcp" }, - { "npmp", { NULL }, 8450, "udp" }, - { "cisco-avp", { NULL }, 8470, "tcp" }, - { "pim-port", { NULL }, 8471, "tcp" }, - { "pim-port", { NULL }, 8471, "sctp" }, - { "otv", { NULL }, 8472, "tcp" }, - { "otv", { NULL }, 8472, "udp" }, - { "vp2p", { NULL }, 8473, "tcp" }, - { "vp2p", { NULL }, 8473, "udp" }, - { "noteshare", { NULL }, 8474, "tcp" }, - { "noteshare", { NULL }, 8474, "udp" }, - { "fmtp", { NULL }, 8500, "tcp" }, - { "fmtp", { NULL }, 8500, "udp" }, - { "rtsp-alt", { NULL }, 8554, "tcp" }, - { "rtsp-alt", { NULL }, 8554, "udp" }, - { "d-fence", { NULL }, 8555, "tcp" }, - { "d-fence", { NULL }, 8555, "udp" }, - { "oap-admin", { NULL }, 8567, "tcp" }, - { "oap-admin", { NULL }, 8567, "udp" }, - { "asterix", { NULL }, 8600, "tcp" }, - { "asterix", { NULL }, 8600, "udp" }, - { "canon-mfnp", { NULL }, 8610, "tcp" }, - { "canon-mfnp", { NULL }, 8610, "udp" }, - { "canon-bjnp1", { NULL }, 8611, "tcp" }, - { "canon-bjnp1", { NULL }, 8611, "udp" }, - { "canon-bjnp2", { NULL }, 8612, "tcp" }, - { "canon-bjnp2", { NULL }, 8612, "udp" }, - { "canon-bjnp3", { NULL }, 8613, "tcp" }, - { "canon-bjnp3", { NULL }, 8613, "udp" }, - { "canon-bjnp4", { NULL }, 8614, "tcp" }, - { "canon-bjnp4", { NULL }, 8614, "udp" }, - { "sun-as-jmxrmi", { NULL }, 8686, "tcp" }, - { "sun-as-jmxrmi", { NULL }, 8686, "udp" }, - { "vnyx", { NULL }, 8699, "tcp" }, - { "vnyx", { NULL }, 8699, "udp" }, - { "dtp-net", { NULL }, 8732, "udp" }, - { "ibus", { NULL }, 8733, "tcp" }, - { "ibus", { NULL }, 8733, "udp" }, - { "mc-appserver", { NULL }, 8763, "tcp" }, - { "mc-appserver", { NULL }, 8763, "udp" }, - { "openqueue", { NULL }, 8764, "tcp" }, - { "openqueue", { NULL }, 8764, "udp" }, - { "ultraseek-http", { NULL }, 8765, "tcp" }, - { "ultraseek-http", { NULL }, 8765, "udp" }, - { "dpap", { NULL }, 8770, "tcp" }, - { "dpap", { NULL }, 8770, "udp" }, - { "msgclnt", { NULL }, 8786, "tcp" }, - { "msgclnt", { NULL }, 8786, "udp" }, - { "msgsrvr", { NULL }, 8787, "tcp" }, - { "msgsrvr", { NULL }, 8787, "udp" }, - { "sunwebadmin", { NULL }, 8800, "tcp" }, - { "sunwebadmin", { NULL }, 8800, "udp" }, - { "truecm", { NULL }, 8804, "tcp" }, - { "truecm", { NULL }, 8804, "udp" }, - { "dxspider", { NULL }, 8873, "tcp" }, - { "dxspider", { NULL }, 8873, "udp" }, - { "cddbp-alt", { NULL }, 8880, "tcp" }, - { "cddbp-alt", { NULL }, 8880, "udp" }, - { "secure-mqtt", { NULL }, 8883, "tcp" }, - { "secure-mqtt", { NULL }, 8883, "udp" }, - { "ddi-tcp-1", { NULL }, 8888, "tcp" }, - { "ddi-udp-1", { NULL }, 8888, "udp" }, - { "ddi-tcp-2", { NULL }, 8889, "tcp" }, - { "ddi-udp-2", { NULL }, 8889, "udp" }, - { "ddi-tcp-3", { NULL }, 8890, "tcp" }, - { "ddi-udp-3", { NULL }, 8890, "udp" }, - { "ddi-tcp-4", { NULL }, 8891, "tcp" }, - { "ddi-udp-4", { NULL }, 8891, "udp" }, - { "ddi-tcp-5", { NULL }, 8892, "tcp" }, - { "ddi-udp-5", { NULL }, 8892, "udp" }, - { "ddi-tcp-6", { NULL }, 8893, "tcp" }, - { "ddi-udp-6", { NULL }, 8893, "udp" }, - { "ddi-tcp-7", { NULL }, 8894, "tcp" }, - { "ddi-udp-7", { NULL }, 8894, "udp" }, - { "ospf-lite", { NULL }, 8899, "tcp" }, - { "ospf-lite", { NULL }, 8899, "udp" }, - { "jmb-cds1", { NULL }, 8900, "tcp" }, - { "jmb-cds1", { NULL }, 8900, "udp" }, - { "jmb-cds2", { NULL }, 8901, "tcp" }, - { "jmb-cds2", { NULL }, 8901, "udp" }, - { "manyone-http", { NULL }, 8910, "tcp" }, - { "manyone-http", { NULL }, 8910, "udp" }, - { "manyone-xml", { NULL }, 8911, "tcp" }, - { "manyone-xml", { NULL }, 8911, "udp" }, - { "wcbackup", { NULL }, 8912, "tcp" }, - { "wcbackup", { NULL }, 8912, "udp" }, - { "dragonfly", { NULL }, 8913, "tcp" }, - { "dragonfly", { NULL }, 8913, "udp" }, - { "twds", { NULL }, 8937, "tcp" }, - { "cumulus-admin", { NULL }, 8954, "tcp" }, - { "cumulus-admin", { NULL }, 8954, "udp" }, - { "sunwebadmins", { NULL }, 8989, "tcp" }, - { "sunwebadmins", { NULL }, 8989, "udp" }, - { "http-wmap", { NULL }, 8990, "tcp" }, - { "http-wmap", { NULL }, 8990, "udp" }, - { "https-wmap", { NULL }, 8991, "tcp" }, - { "https-wmap", { NULL }, 8991, "udp" }, - { "bctp", { NULL }, 8999, "tcp" }, - { "bctp", { NULL }, 8999, "udp" }, - { "cslistener", { NULL }, 9000, "tcp" }, - { "cslistener", { NULL }, 9000, "udp" }, - { "etlservicemgr", { NULL }, 9001, "tcp" }, - { "etlservicemgr", { NULL }, 9001, "udp" }, - { "dynamid", { NULL }, 9002, "tcp" }, - { "dynamid", { NULL }, 9002, "udp" }, - { "ogs-client", { NULL }, 9007, "udp" }, - { "ogs-server", { NULL }, 9008, "tcp" }, - { "pichat", { NULL }, 9009, "tcp" }, - { "pichat", { NULL }, 9009, "udp" }, - { "sdr", { NULL }, 9010, "tcp" }, - { "tambora", { NULL }, 9020, "tcp" }, - { "tambora", { NULL }, 9020, "udp" }, - { "panagolin-ident", { NULL }, 9021, "tcp" }, - { "panagolin-ident", { NULL }, 9021, "udp" }, - { "paragent", { NULL }, 9022, "tcp" }, - { "paragent", { NULL }, 9022, "udp" }, - { "swa-1", { NULL }, 9023, "tcp" }, - { "swa-1", { NULL }, 9023, "udp" }, - { "swa-2", { NULL }, 9024, "tcp" }, - { "swa-2", { NULL }, 9024, "udp" }, - { "swa-3", { NULL }, 9025, "tcp" }, - { "swa-3", { NULL }, 9025, "udp" }, - { "swa-4", { NULL }, 9026, "tcp" }, - { "swa-4", { NULL }, 9026, "udp" }, - { "versiera", { NULL }, 9050, "tcp" }, - { "fio-cmgmt", { NULL }, 9051, "tcp" }, - { "glrpc", { NULL }, 9080, "tcp" }, - { "glrpc", { NULL }, 9080, "udp" }, - { "lcs-ap", { NULL }, 9082, "sctp" }, - { "emc-pp-mgmtsvc", { NULL }, 9083, "tcp" }, - { "aurora", { NULL }, 9084, "tcp" }, - { "aurora", { NULL }, 9084, "udp" }, - { "aurora", { NULL }, 9084, "sctp" }, - { "ibm-rsyscon", { NULL }, 9085, "tcp" }, - { "ibm-rsyscon", { NULL }, 9085, "udp" }, - { "net2display", { NULL }, 9086, "tcp" }, - { "net2display", { NULL }, 9086, "udp" }, - { "classic", { NULL }, 9087, "tcp" }, - { "classic", { NULL }, 9087, "udp" }, - { "sqlexec", { NULL }, 9088, "tcp" }, - { "sqlexec", { NULL }, 9088, "udp" }, - { "sqlexec-ssl", { NULL }, 9089, "tcp" }, - { "sqlexec-ssl", { NULL }, 9089, "udp" }, - { "websm", { NULL }, 9090, "tcp" }, - { "websm", { NULL }, 9090, "udp" }, - { "xmltec-xmlmail", { NULL }, 9091, "tcp" }, - { "xmltec-xmlmail", { NULL }, 9091, "udp" }, - { "XmlIpcRegSvc", { NULL }, 9092, "tcp" }, - { "XmlIpcRegSvc", { NULL }, 9092, "udp" }, - { "hp-pdl-datastr", { NULL }, 9100, "tcp" }, - { "hp-pdl-datastr", { NULL }, 9100, "udp" }, - { "pdl-datastream", { NULL }, 9100, "tcp" }, - { "pdl-datastream", { NULL }, 9100, "udp" }, - { "bacula-dir", { NULL }, 9101, "tcp" }, - { "bacula-dir", { NULL }, 9101, "udp" }, - { "bacula-fd", { NULL }, 9102, "tcp" }, - { "bacula-fd", { NULL }, 9102, "udp" }, - { "bacula-sd", { NULL }, 9103, "tcp" }, - { "bacula-sd", { NULL }, 9103, "udp" }, - { "peerwire", { NULL }, 9104, "tcp" }, - { "peerwire", { NULL }, 9104, "udp" }, - { "xadmin", { NULL }, 9105, "tcp" }, - { "xadmin", { NULL }, 9105, "udp" }, - { "astergate", { NULL }, 9106, "tcp" }, - { "astergate-disc", { NULL }, 9106, "udp" }, - { "astergatefax", { NULL }, 9107, "tcp" }, - { "mxit", { NULL }, 9119, "tcp" }, - { "mxit", { NULL }, 9119, "udp" }, - { "dddp", { NULL }, 9131, "tcp" }, - { "dddp", { NULL }, 9131, "udp" }, - { "apani1", { NULL }, 9160, "tcp" }, - { "apani1", { NULL }, 9160, "udp" }, - { "apani2", { NULL }, 9161, "tcp" }, - { "apani2", { NULL }, 9161, "udp" }, - { "apani3", { NULL }, 9162, "tcp" }, - { "apani3", { NULL }, 9162, "udp" }, - { "apani4", { NULL }, 9163, "tcp" }, - { "apani4", { NULL }, 9163, "udp" }, - { "apani5", { NULL }, 9164, "tcp" }, - { "apani5", { NULL }, 9164, "udp" }, - { "sun-as-jpda", { NULL }, 9191, "tcp" }, - { "sun-as-jpda", { NULL }, 9191, "udp" }, - { "wap-wsp", { NULL }, 9200, "tcp" }, - { "wap-wsp", { NULL }, 9200, "udp" }, - { "wap-wsp-wtp", { NULL }, 9201, "tcp" }, - { "wap-wsp-wtp", { NULL }, 9201, "udp" }, - { "wap-wsp-s", { NULL }, 9202, "tcp" }, - { "wap-wsp-s", { NULL }, 9202, "udp" }, - { "wap-wsp-wtp-s", { NULL }, 9203, "tcp" }, - { "wap-wsp-wtp-s", { NULL }, 9203, "udp" }, - { "wap-vcard", { NULL }, 9204, "tcp" }, - { "wap-vcard", { NULL }, 9204, "udp" }, - { "wap-vcal", { NULL }, 9205, "tcp" }, - { "wap-vcal", { NULL }, 9205, "udp" }, - { "wap-vcard-s", { NULL }, 9206, "tcp" }, - { "wap-vcard-s", { NULL }, 9206, "udp" }, - { "wap-vcal-s", { NULL }, 9207, "tcp" }, - { "wap-vcal-s", { NULL }, 9207, "udp" }, - { "rjcdb-vcards", { NULL }, 9208, "tcp" }, - { "rjcdb-vcards", { NULL }, 9208, "udp" }, - { "almobile-system", { NULL }, 9209, "tcp" }, - { "almobile-system", { NULL }, 9209, "udp" }, - { "oma-mlp", { NULL }, 9210, "tcp" }, - { "oma-mlp", { NULL }, 9210, "udp" }, - { "oma-mlp-s", { NULL }, 9211, "tcp" }, - { "oma-mlp-s", { NULL }, 9211, "udp" }, - { "serverviewdbms", { NULL }, 9212, "tcp" }, - { "serverviewdbms", { NULL }, 9212, "udp" }, - { "serverstart", { NULL }, 9213, "tcp" }, - { "serverstart", { NULL }, 9213, "udp" }, - { "ipdcesgbs", { NULL }, 9214, "tcp" }, - { "ipdcesgbs", { NULL }, 9214, "udp" }, - { "insis", { NULL }, 9215, "tcp" }, - { "insis", { NULL }, 9215, "udp" }, - { "acme", { NULL }, 9216, "tcp" }, - { "acme", { NULL }, 9216, "udp" }, - { "fsc-port", { NULL }, 9217, "tcp" }, - { "fsc-port", { NULL }, 9217, "udp" }, - { "teamcoherence", { NULL }, 9222, "tcp" }, - { "teamcoherence", { NULL }, 9222, "udp" }, - { "mon", { NULL }, 9255, "tcp" }, - { "mon", { NULL }, 9255, "udp" }, - { "pegasus", { NULL }, 9278, "tcp" }, - { "pegasus", { NULL }, 9278, "udp" }, - { "pegasus-ctl", { NULL }, 9279, "tcp" }, - { "pegasus-ctl", { NULL }, 9279, "udp" }, - { "pgps", { NULL }, 9280, "tcp" }, - { "pgps", { NULL }, 9280, "udp" }, - { "swtp-port1", { NULL }, 9281, "tcp" }, - { "swtp-port1", { NULL }, 9281, "udp" }, - { "swtp-port2", { NULL }, 9282, "tcp" }, - { "swtp-port2", { NULL }, 9282, "udp" }, - { "callwaveiam", { NULL }, 9283, "tcp" }, - { "callwaveiam", { NULL }, 9283, "udp" }, - { "visd", { NULL }, 9284, "tcp" }, - { "visd", { NULL }, 9284, "udp" }, - { "n2h2server", { NULL }, 9285, "tcp" }, - { "n2h2server", { NULL }, 9285, "udp" }, - { "n2receive", { NULL }, 9286, "udp" }, - { "cumulus", { NULL }, 9287, "tcp" }, - { "cumulus", { NULL }, 9287, "udp" }, - { "armtechdaemon", { NULL }, 9292, "tcp" }, - { "armtechdaemon", { NULL }, 9292, "udp" }, - { "storview", { NULL }, 9293, "tcp" }, - { "storview", { NULL }, 9293, "udp" }, - { "armcenterhttp", { NULL }, 9294, "tcp" }, - { "armcenterhttp", { NULL }, 9294, "udp" }, - { "armcenterhttps", { NULL }, 9295, "tcp" }, - { "armcenterhttps", { NULL }, 9295, "udp" }, - { "vrace", { NULL }, 9300, "tcp" }, - { "vrace", { NULL }, 9300, "udp" }, - { "sphinxql", { NULL }, 9306, "tcp" }, - { "sphinxapi", { NULL }, 9312, "tcp" }, - { "secure-ts", { NULL }, 9318, "tcp" }, - { "secure-ts", { NULL }, 9318, "udp" }, - { "guibase", { NULL }, 9321, "tcp" }, - { "guibase", { NULL }, 9321, "udp" }, - { "mpidcmgr", { NULL }, 9343, "tcp" }, - { "mpidcmgr", { NULL }, 9343, "udp" }, - { "mphlpdmc", { NULL }, 9344, "tcp" }, - { "mphlpdmc", { NULL }, 9344, "udp" }, - { "ctechlicensing", { NULL }, 9346, "tcp" }, - { "ctechlicensing", { NULL }, 9346, "udp" }, - { "fjdmimgr", { NULL }, 9374, "tcp" }, - { "fjdmimgr", { NULL }, 9374, "udp" }, - { "boxp", { NULL }, 9380, "tcp" }, - { "boxp", { NULL }, 9380, "udp" }, - { "d2dconfig", { NULL }, 9387, "tcp" }, - { "d2ddatatrans", { NULL }, 9388, "tcp" }, - { "adws", { NULL }, 9389, "tcp" }, - { "otp", { NULL }, 9390, "tcp" }, - { "fjinvmgr", { NULL }, 9396, "tcp" }, - { "fjinvmgr", { NULL }, 9396, "udp" }, - { "mpidcagt", { NULL }, 9397, "tcp" }, - { "mpidcagt", { NULL }, 9397, "udp" }, - { "sec-t4net-srv", { NULL }, 9400, "tcp" }, - { "sec-t4net-srv", { NULL }, 9400, "udp" }, - { "sec-t4net-clt", { NULL }, 9401, "tcp" }, - { "sec-t4net-clt", { NULL }, 9401, "udp" }, - { "sec-pc2fax-srv", { NULL }, 9402, "tcp" }, - { "sec-pc2fax-srv", { NULL }, 9402, "udp" }, - { "git", { NULL }, 9418, "tcp" }, - { "git", { NULL }, 9418, "udp" }, - { "tungsten-https", { NULL }, 9443, "tcp" }, - { "tungsten-https", { NULL }, 9443, "udp" }, - { "wso2esb-console", { NULL }, 9444, "tcp" }, - { "wso2esb-console", { NULL }, 9444, "udp" }, - { "sntlkeyssrvr", { NULL }, 9450, "tcp" }, - { "sntlkeyssrvr", { NULL }, 9450, "udp" }, - { "ismserver", { NULL }, 9500, "tcp" }, - { "ismserver", { NULL }, 9500, "udp" }, - { "sma-spw", { NULL }, 9522, "udp" }, - { "mngsuite", { NULL }, 9535, "tcp" }, - { "mngsuite", { NULL }, 9535, "udp" }, - { "laes-bf", { NULL }, 9536, "tcp" }, - { "laes-bf", { NULL }, 9536, "udp" }, - { "trispen-sra", { NULL }, 9555, "tcp" }, - { "trispen-sra", { NULL }, 9555, "udp" }, - { "ldgateway", { NULL }, 9592, "tcp" }, - { "ldgateway", { NULL }, 9592, "udp" }, - { "cba8", { NULL }, 9593, "tcp" }, - { "cba8", { NULL }, 9593, "udp" }, - { "msgsys", { NULL }, 9594, "tcp" }, - { "msgsys", { NULL }, 9594, "udp" }, - { "pds", { NULL }, 9595, "tcp" }, - { "pds", { NULL }, 9595, "udp" }, - { "mercury-disc", { NULL }, 9596, "tcp" }, - { "mercury-disc", { NULL }, 9596, "udp" }, - { "pd-admin", { NULL }, 9597, "tcp" }, - { "pd-admin", { NULL }, 9597, "udp" }, - { "vscp", { NULL }, 9598, "tcp" }, - { "vscp", { NULL }, 9598, "udp" }, - { "robix", { NULL }, 9599, "tcp" }, - { "robix", { NULL }, 9599, "udp" }, - { "micromuse-ncpw", { NULL }, 9600, "tcp" }, - { "micromuse-ncpw", { NULL }, 9600, "udp" }, - { "streamcomm-ds", { NULL }, 9612, "tcp" }, - { "streamcomm-ds", { NULL }, 9612, "udp" }, - { "iadt-tls", { NULL }, 9614, "tcp" }, - { "erunbook_agent", { NULL }, 9616, "tcp" }, - { "erunbook_server", { NULL }, 9617, "tcp" }, - { "condor", { NULL }, 9618, "tcp" }, - { "condor", { NULL }, 9618, "udp" }, - { "odbcpathway", { NULL }, 9628, "tcp" }, - { "odbcpathway", { NULL }, 9628, "udp" }, - { "uniport", { NULL }, 9629, "tcp" }, - { "uniport", { NULL }, 9629, "udp" }, - { "peoctlr", { NULL }, 9630, "tcp" }, - { "peocoll", { NULL }, 9631, "tcp" }, - { "mc-comm", { NULL }, 9632, "udp" }, - { "pqsflows", { NULL }, 9640, "tcp" }, - { "xmms2", { NULL }, 9667, "tcp" }, - { "xmms2", { NULL }, 9667, "udp" }, - { "tec5-sdctp", { NULL }, 9668, "tcp" }, - { "tec5-sdctp", { NULL }, 9668, "udp" }, - { "client-wakeup", { NULL }, 9694, "tcp" }, - { "client-wakeup", { NULL }, 9694, "udp" }, - { "ccnx", { NULL }, 9695, "tcp" }, - { "ccnx", { NULL }, 9695, "udp" }, - { "board-roar", { NULL }, 9700, "tcp" }, - { "board-roar", { NULL }, 9700, "udp" }, - { "l5nas-parchan", { NULL }, 9747, "tcp" }, - { "l5nas-parchan", { NULL }, 9747, "udp" }, - { "board-voip", { NULL }, 9750, "tcp" }, - { "board-voip", { NULL }, 9750, "udp" }, - { "rasadv", { NULL }, 9753, "tcp" }, - { "rasadv", { NULL }, 9753, "udp" }, - { "tungsten-http", { NULL }, 9762, "tcp" }, - { "tungsten-http", { NULL }, 9762, "udp" }, - { "davsrc", { NULL }, 9800, "tcp" }, - { "davsrc", { NULL }, 9800, "udp" }, - { "sstp-2", { NULL }, 9801, "tcp" }, - { "sstp-2", { NULL }, 9801, "udp" }, - { "davsrcs", { NULL }, 9802, "tcp" }, - { "davsrcs", { NULL }, 9802, "udp" }, - { "sapv1", { NULL }, 9875, "tcp" }, - { "sapv1", { NULL }, 9875, "udp" }, - { "sd", { NULL }, 9876, "tcp" }, - { "sd", { NULL }, 9876, "udp" }, - { "cyborg-systems", { NULL }, 9888, "tcp" }, - { "cyborg-systems", { NULL }, 9888, "udp" }, - { "gt-proxy", { NULL }, 9889, "tcp" }, - { "gt-proxy", { NULL }, 9889, "udp" }, - { "monkeycom", { NULL }, 9898, "tcp" }, - { "monkeycom", { NULL }, 9898, "udp" }, - { "sctp-tunneling", { NULL }, 9899, "tcp" }, - { "sctp-tunneling", { NULL }, 9899, "udp" }, - { "iua", { NULL }, 9900, "tcp" }, - { "iua", { NULL }, 9900, "udp" }, - { "iua", { NULL }, 9900, "sctp" }, - { "enrp", { NULL }, 9901, "udp" }, - { "enrp-sctp", { NULL }, 9901, "sctp" }, - { "enrp-sctp-tls", { NULL }, 9902, "sctp" }, - { "domaintime", { NULL }, 9909, "tcp" }, - { "domaintime", { NULL }, 9909, "udp" }, - { "sype-transport", { NULL }, 9911, "tcp" }, - { "sype-transport", { NULL }, 9911, "udp" }, - { "apc-9950", { NULL }, 9950, "tcp" }, - { "apc-9950", { NULL }, 9950, "udp" }, - { "apc-9951", { NULL }, 9951, "tcp" }, - { "apc-9951", { NULL }, 9951, "udp" }, - { "apc-9952", { NULL }, 9952, "tcp" }, - { "apc-9952", { NULL }, 9952, "udp" }, - { "acis", { NULL }, 9953, "tcp" }, - { "acis", { NULL }, 9953, "udp" }, - { "odnsp", { NULL }, 9966, "tcp" }, - { "odnsp", { NULL }, 9966, "udp" }, - { "dsm-scm-target", { NULL }, 9987, "tcp" }, - { "dsm-scm-target", { NULL }, 9987, "udp" }, - { "nsesrvr", { NULL }, 9988, "tcp" }, - { "osm-appsrvr", { NULL }, 9990, "tcp" }, - { "osm-appsrvr", { NULL }, 9990, "udp" }, - { "osm-oev", { NULL }, 9991, "tcp" }, - { "osm-oev", { NULL }, 9991, "udp" }, - { "palace-1", { NULL }, 9992, "tcp" }, - { "palace-1", { NULL }, 9992, "udp" }, - { "palace-2", { NULL }, 9993, "tcp" }, - { "palace-2", { NULL }, 9993, "udp" }, - { "palace-3", { NULL }, 9994, "tcp" }, - { "palace-3", { NULL }, 9994, "udp" }, - { "palace-4", { NULL }, 9995, "tcp" }, - { "palace-4", { NULL }, 9995, "udp" }, - { "palace-5", { NULL }, 9996, "tcp" }, - { "palace-5", { NULL }, 9996, "udp" }, - { "palace-6", { NULL }, 9997, "tcp" }, - { "palace-6", { NULL }, 9997, "udp" }, - { "distinct32", { NULL }, 9998, "tcp" }, - { "distinct32", { NULL }, 9998, "udp" }, - { "distinct", { NULL }, 9999, "tcp" }, - { "distinct", { NULL }, 9999, "udp" }, - { "ndmp", { NULL }, 10000, "tcp" }, - { "ndmp", { NULL }, 10000, "udp" }, - { "scp-config", { NULL }, 10001, "tcp" }, - { "scp-config", { NULL }, 10001, "udp" }, - { "documentum", { NULL }, 10002, "tcp" }, - { "documentum", { NULL }, 10002, "udp" }, - { "documentum_s", { NULL }, 10003, "tcp" }, - { "documentum_s", { NULL }, 10003, "udp" }, - { "emcrmirccd", { NULL }, 10004, "tcp" }, - { "emcrmird", { NULL }, 10005, "tcp" }, - { "mvs-capacity", { NULL }, 10007, "tcp" }, - { "mvs-capacity", { NULL }, 10007, "udp" }, - { "octopus", { NULL }, 10008, "tcp" }, - { "octopus", { NULL }, 10008, "udp" }, - { "swdtp-sv", { NULL }, 10009, "tcp" }, - { "swdtp-sv", { NULL }, 10009, "udp" }, - { "rxapi", { NULL }, 10010, "tcp" }, - { "zabbix-agent", { NULL }, 10050, "tcp" }, - { "zabbix-agent", { NULL }, 10050, "udp" }, - { "zabbix-trapper", { NULL }, 10051, "tcp" }, - { "zabbix-trapper", { NULL }, 10051, "udp" }, - { "qptlmd", { NULL }, 10055, "tcp" }, - { "amanda", { NULL }, 10080, "tcp" }, - { "amanda", { NULL }, 10080, "udp" }, - { "famdc", { NULL }, 10081, "tcp" }, - { "famdc", { NULL }, 10081, "udp" }, - { "itap-ddtp", { NULL }, 10100, "tcp" }, - { "itap-ddtp", { NULL }, 10100, "udp" }, - { "ezmeeting-2", { NULL }, 10101, "tcp" }, - { "ezmeeting-2", { NULL }, 10101, "udp" }, - { "ezproxy-2", { NULL }, 10102, "tcp" }, - { "ezproxy-2", { NULL }, 10102, "udp" }, - { "ezrelay", { NULL }, 10103, "tcp" }, - { "ezrelay", { NULL }, 10103, "udp" }, - { "swdtp", { NULL }, 10104, "tcp" }, - { "swdtp", { NULL }, 10104, "udp" }, - { "bctp-server", { NULL }, 10107, "tcp" }, - { "bctp-server", { NULL }, 10107, "udp" }, - { "nmea-0183", { NULL }, 10110, "tcp" }, - { "nmea-0183", { NULL }, 10110, "udp" }, - { "netiq-endpoint", { NULL }, 10113, "tcp" }, - { "netiq-endpoint", { NULL }, 10113, "udp" }, - { "netiq-qcheck", { NULL }, 10114, "tcp" }, - { "netiq-qcheck", { NULL }, 10114, "udp" }, - { "netiq-endpt", { NULL }, 10115, "tcp" }, - { "netiq-endpt", { NULL }, 10115, "udp" }, - { "netiq-voipa", { NULL }, 10116, "tcp" }, - { "netiq-voipa", { NULL }, 10116, "udp" }, - { "iqrm", { NULL }, 10117, "tcp" }, - { "iqrm", { NULL }, 10117, "udp" }, - { "bmc-perf-sd", { NULL }, 10128, "tcp" }, - { "bmc-perf-sd", { NULL }, 10128, "udp" }, - { "bmc-gms", { NULL }, 10129, "tcp" }, - { "qb-db-server", { NULL }, 10160, "tcp" }, - { "qb-db-server", { NULL }, 10160, "udp" }, - { "snmptls", { NULL }, 10161, "tcp" }, - { "snmpdtls", { NULL }, 10161, "udp" }, - { "snmptls-trap", { NULL }, 10162, "tcp" }, - { "snmpdtls-trap", { NULL }, 10162, "udp" }, - { "trisoap", { NULL }, 10200, "tcp" }, - { "trisoap", { NULL }, 10200, "udp" }, - { "rsms", { NULL }, 10201, "tcp" }, - { "rscs", { NULL }, 10201, "udp" }, - { "apollo-relay", { NULL }, 10252, "tcp" }, - { "apollo-relay", { NULL }, 10252, "udp" }, - { "axis-wimp-port", { NULL }, 10260, "tcp" }, - { "axis-wimp-port", { NULL }, 10260, "udp" }, - { "blocks", { NULL }, 10288, "tcp" }, - { "blocks", { NULL }, 10288, "udp" }, - { "cosir", { NULL }, 10321, "tcp" }, - { "hip-nat-t", { NULL }, 10500, "udp" }, - { "MOS-lower", { NULL }, 10540, "tcp" }, - { "MOS-lower", { NULL }, 10540, "udp" }, - { "MOS-upper", { NULL }, 10541, "tcp" }, - { "MOS-upper", { NULL }, 10541, "udp" }, - { "MOS-aux", { NULL }, 10542, "tcp" }, - { "MOS-aux", { NULL }, 10542, "udp" }, - { "MOS-soap", { NULL }, 10543, "tcp" }, - { "MOS-soap", { NULL }, 10543, "udp" }, - { "MOS-soap-opt", { NULL }, 10544, "tcp" }, - { "MOS-soap-opt", { NULL }, 10544, "udp" }, - { "gap", { NULL }, 10800, "tcp" }, - { "gap", { NULL }, 10800, "udp" }, - { "lpdg", { NULL }, 10805, "tcp" }, - { "lpdg", { NULL }, 10805, "udp" }, - { "nbd", { NULL }, 10809, "tcp" }, - { "nmc-disc", { NULL }, 10810, "udp" }, - { "helix", { NULL }, 10860, "tcp" }, - { "helix", { NULL }, 10860, "udp" }, - { "rmiaux", { NULL }, 10990, "tcp" }, - { "rmiaux", { NULL }, 10990, "udp" }, - { "irisa", { NULL }, 11000, "tcp" }, - { "irisa", { NULL }, 11000, "udp" }, - { "metasys", { NULL }, 11001, "tcp" }, - { "metasys", { NULL }, 11001, "udp" }, - { "netapp-icmgmt", { NULL }, 11104, "tcp" }, - { "netapp-icdata", { NULL }, 11105, "tcp" }, - { "sgi-lk", { NULL }, 11106, "tcp" }, - { "sgi-lk", { NULL }, 11106, "udp" }, - { "vce", { NULL }, 11111, "tcp" }, - { "vce", { NULL }, 11111, "udp" }, - { "dicom", { NULL }, 11112, "tcp" }, - { "dicom", { NULL }, 11112, "udp" }, - { "suncacao-snmp", { NULL }, 11161, "tcp" }, - { "suncacao-snmp", { NULL }, 11161, "udp" }, - { "suncacao-jmxmp", { NULL }, 11162, "tcp" }, - { "suncacao-jmxmp", { NULL }, 11162, "udp" }, - { "suncacao-rmi", { NULL }, 11163, "tcp" }, - { "suncacao-rmi", { NULL }, 11163, "udp" }, - { "suncacao-csa", { NULL }, 11164, "tcp" }, - { "suncacao-csa", { NULL }, 11164, "udp" }, - { "suncacao-websvc", { NULL }, 11165, "tcp" }, - { "suncacao-websvc", { NULL }, 11165, "udp" }, - { "snss", { NULL }, 11171, "udp" }, - { "oemcacao-jmxmp", { NULL }, 11172, "tcp" }, - { "oemcacao-rmi", { NULL }, 11174, "tcp" }, - { "oemcacao-websvc", { NULL }, 11175, "tcp" }, - { "smsqp", { NULL }, 11201, "tcp" }, - { "smsqp", { NULL }, 11201, "udp" }, - { "wifree", { NULL }, 11208, "tcp" }, - { "wifree", { NULL }, 11208, "udp" }, - { "memcache", { NULL }, 11211, "tcp" }, - { "memcache", { NULL }, 11211, "udp" }, - { "imip", { NULL }, 11319, "tcp" }, - { "imip", { NULL }, 11319, "udp" }, - { "imip-channels", { NULL }, 11320, "tcp" }, - { "imip-channels", { NULL }, 11320, "udp" }, - { "arena-server", { NULL }, 11321, "tcp" }, - { "arena-server", { NULL }, 11321, "udp" }, - { "atm-uhas", { NULL }, 11367, "tcp" }, - { "atm-uhas", { NULL }, 11367, "udp" }, - { "hkp", { NULL }, 11371, "tcp" }, - { "hkp", { NULL }, 11371, "udp" }, - { "asgcypresstcps", { NULL }, 11489, "tcp" }, - { "tempest-port", { NULL }, 11600, "tcp" }, - { "tempest-port", { NULL }, 11600, "udp" }, - { "h323callsigalt", { NULL }, 11720, "tcp" }, - { "h323callsigalt", { NULL }, 11720, "udp" }, - { "intrepid-ssl", { NULL }, 11751, "tcp" }, - { "intrepid-ssl", { NULL }, 11751, "udp" }, - { "xoraya", { NULL }, 11876, "tcp" }, - { "xoraya", { NULL }, 11876, "udp" }, - { "x2e-disc", { NULL }, 11877, "udp" }, - { "sysinfo-sp", { NULL }, 11967, "tcp" }, - { "sysinfo-sp", { NULL }, 11967, "udp" }, - { "wmereceiving", { NULL }, 11997, "sctp" }, - { "wmedistribution", { NULL }, 11998, "sctp" }, - { "wmereporting", { NULL }, 11999, "sctp" }, - { "entextxid", { NULL }, 12000, "tcp" }, - { "entextxid", { NULL }, 12000, "udp" }, - { "entextnetwk", { NULL }, 12001, "tcp" }, - { "entextnetwk", { NULL }, 12001, "udp" }, - { "entexthigh", { NULL }, 12002, "tcp" }, - { "entexthigh", { NULL }, 12002, "udp" }, - { "entextmed", { NULL }, 12003, "tcp" }, - { "entextmed", { NULL }, 12003, "udp" }, - { "entextlow", { NULL }, 12004, "tcp" }, - { "entextlow", { NULL }, 12004, "udp" }, - { "dbisamserver1", { NULL }, 12005, "tcp" }, - { "dbisamserver1", { NULL }, 12005, "udp" }, - { "dbisamserver2", { NULL }, 12006, "tcp" }, - { "dbisamserver2", { NULL }, 12006, "udp" }, - { "accuracer", { NULL }, 12007, "tcp" }, - { "accuracer", { NULL }, 12007, "udp" }, - { "accuracer-dbms", { NULL }, 12008, "tcp" }, - { "accuracer-dbms", { NULL }, 12008, "udp" }, - { "edbsrvr", { NULL }, 12010, "tcp" }, - { "vipera", { NULL }, 12012, "tcp" }, - { "vipera", { NULL }, 12012, "udp" }, - { "vipera-ssl", { NULL }, 12013, "tcp" }, - { "vipera-ssl", { NULL }, 12013, "udp" }, - { "rets-ssl", { NULL }, 12109, "tcp" }, - { "rets-ssl", { NULL }, 12109, "udp" }, - { "nupaper-ss", { NULL }, 12121, "tcp" }, - { "nupaper-ss", { NULL }, 12121, "udp" }, - { "cawas", { NULL }, 12168, "tcp" }, - { "cawas", { NULL }, 12168, "udp" }, - { "hivep", { NULL }, 12172, "tcp" }, - { "hivep", { NULL }, 12172, "udp" }, - { "linogridengine", { NULL }, 12300, "tcp" }, - { "linogridengine", { NULL }, 12300, "udp" }, - { "warehouse-sss", { NULL }, 12321, "tcp" }, - { "warehouse-sss", { NULL }, 12321, "udp" }, - { "warehouse", { NULL }, 12322, "tcp" }, - { "warehouse", { NULL }, 12322, "udp" }, - { "italk", { NULL }, 12345, "tcp" }, - { "italk", { NULL }, 12345, "udp" }, - { "tsaf", { NULL }, 12753, "tcp" }, - { "tsaf", { NULL }, 12753, "udp" }, - { "i-zipqd", { NULL }, 13160, "tcp" }, - { "i-zipqd", { NULL }, 13160, "udp" }, - { "bcslogc", { NULL }, 13216, "tcp" }, - { "bcslogc", { NULL }, 13216, "udp" }, - { "rs-pias", { NULL }, 13217, "tcp" }, - { "rs-pias", { NULL }, 13217, "udp" }, - { "emc-vcas-tcp", { NULL }, 13218, "tcp" }, - { "emc-vcas-udp", { NULL }, 13218, "udp" }, - { "powwow-client", { NULL }, 13223, "tcp" }, - { "powwow-client", { NULL }, 13223, "udp" }, - { "powwow-server", { NULL }, 13224, "tcp" }, - { "powwow-server", { NULL }, 13224, "udp" }, - { "doip-data", { NULL }, 13400, "tcp" }, - { "doip-disc", { NULL }, 13400, "udp" }, - { "bprd", { NULL }, 13720, "tcp" }, - { "bprd", { NULL }, 13720, "udp" }, - { "bpdbm", { NULL }, 13721, "tcp" }, - { "bpdbm", { NULL }, 13721, "udp" }, - { "bpjava-msvc", { NULL }, 13722, "tcp" }, - { "bpjava-msvc", { NULL }, 13722, "udp" }, - { "vnetd", { NULL }, 13724, "tcp" }, - { "vnetd", { NULL }, 13724, "udp" }, - { "bpcd", { NULL }, 13782, "tcp" }, - { "bpcd", { NULL }, 13782, "udp" }, - { "vopied", { NULL }, 13783, "tcp" }, - { "vopied", { NULL }, 13783, "udp" }, - { "nbdb", { NULL }, 13785, "tcp" }, - { "nbdb", { NULL }, 13785, "udp" }, - { "nomdb", { NULL }, 13786, "tcp" }, - { "nomdb", { NULL }, 13786, "udp" }, - { "dsmcc-config", { NULL }, 13818, "tcp" }, - { "dsmcc-config", { NULL }, 13818, "udp" }, - { "dsmcc-session", { NULL }, 13819, "tcp" }, - { "dsmcc-session", { NULL }, 13819, "udp" }, - { "dsmcc-passthru", { NULL }, 13820, "tcp" }, - { "dsmcc-passthru", { NULL }, 13820, "udp" }, - { "dsmcc-download", { NULL }, 13821, "tcp" }, - { "dsmcc-download", { NULL }, 13821, "udp" }, - { "dsmcc-ccp", { NULL }, 13822, "tcp" }, - { "dsmcc-ccp", { NULL }, 13822, "udp" }, - { "bmdss", { NULL }, 13823, "tcp" }, - { "dta-systems", { NULL }, 13929, "tcp" }, - { "dta-systems", { NULL }, 13929, "udp" }, - { "medevolve", { NULL }, 13930, "tcp" }, - { "scotty-ft", { NULL }, 14000, "tcp" }, - { "scotty-ft", { NULL }, 14000, "udp" }, - { "sua", { NULL }, 14001, "tcp" }, - { "sua", { NULL }, 14001, "udp" }, - { "sua", { NULL }, 14001, "sctp" }, - { "sage-best-com1", { NULL }, 14033, "tcp" }, - { "sage-best-com1", { NULL }, 14033, "udp" }, - { "sage-best-com2", { NULL }, 14034, "tcp" }, - { "sage-best-com2", { NULL }, 14034, "udp" }, - { "vcs-app", { NULL }, 14141, "tcp" }, - { "vcs-app", { NULL }, 14141, "udp" }, - { "icpp", { NULL }, 14142, "tcp" }, - { "icpp", { NULL }, 14142, "udp" }, - { "gcm-app", { NULL }, 14145, "tcp" }, - { "gcm-app", { NULL }, 14145, "udp" }, - { "vrts-tdd", { NULL }, 14149, "tcp" }, - { "vrts-tdd", { NULL }, 14149, "udp" }, - { "vcscmd", { NULL }, 14150, "tcp" }, - { "vad", { NULL }, 14154, "tcp" }, - { "vad", { NULL }, 14154, "udp" }, - { "cps", { NULL }, 14250, "tcp" }, - { "cps", { NULL }, 14250, "udp" }, - { "ca-web-update", { NULL }, 14414, "tcp" }, - { "ca-web-update", { NULL }, 14414, "udp" }, - { "hde-lcesrvr-1", { NULL }, 14936, "tcp" }, - { "hde-lcesrvr-1", { NULL }, 14936, "udp" }, - { "hde-lcesrvr-2", { NULL }, 14937, "tcp" }, - { "hde-lcesrvr-2", { NULL }, 14937, "udp" }, - { "hydap", { NULL }, 15000, "tcp" }, - { "hydap", { NULL }, 15000, "udp" }, - { "xpilot", { NULL }, 15345, "tcp" }, - { "xpilot", { NULL }, 15345, "udp" }, - { "3link", { NULL }, 15363, "tcp" }, - { "3link", { NULL }, 15363, "udp" }, - { "cisco-snat", { NULL }, 15555, "tcp" }, - { "cisco-snat", { NULL }, 15555, "udp" }, - { "bex-xr", { NULL }, 15660, "tcp" }, - { "bex-xr", { NULL }, 15660, "udp" }, - { "ptp", { NULL }, 15740, "tcp" }, - { "ptp", { NULL }, 15740, "udp" }, - { "2ping", { NULL }, 15998, "udp" }, - { "programmar", { NULL }, 15999, "tcp" }, - { "fmsas", { NULL }, 16000, "tcp" }, - { "fmsascon", { NULL }, 16001, "tcp" }, - { "gsms", { NULL }, 16002, "tcp" }, - { "alfin", { NULL }, 16003, "udp" }, - { "jwpc", { NULL }, 16020, "tcp" }, - { "jwpc-bin", { NULL }, 16021, "tcp" }, - { "sun-sea-port", { NULL }, 16161, "tcp" }, - { "sun-sea-port", { NULL }, 16161, "udp" }, - { "solaris-audit", { NULL }, 16162, "tcp" }, - { "etb4j", { NULL }, 16309, "tcp" }, - { "etb4j", { NULL }, 16309, "udp" }, - { "pduncs", { NULL }, 16310, "tcp" }, - { "pduncs", { NULL }, 16310, "udp" }, - { "pdefmns", { NULL }, 16311, "tcp" }, - { "pdefmns", { NULL }, 16311, "udp" }, - { "netserialext1", { NULL }, 16360, "tcp" }, - { "netserialext1", { NULL }, 16360, "udp" }, - { "netserialext2", { NULL }, 16361, "tcp" }, - { "netserialext2", { NULL }, 16361, "udp" }, - { "netserialext3", { NULL }, 16367, "tcp" }, - { "netserialext3", { NULL }, 16367, "udp" }, - { "netserialext4", { NULL }, 16368, "tcp" }, - { "netserialext4", { NULL }, 16368, "udp" }, - { "connected", { NULL }, 16384, "tcp" }, - { "connected", { NULL }, 16384, "udp" }, - { "xoms", { NULL }, 16619, "tcp" }, - { "newbay-snc-mc", { NULL }, 16900, "tcp" }, - { "newbay-snc-mc", { NULL }, 16900, "udp" }, - { "sgcip", { NULL }, 16950, "tcp" }, - { "sgcip", { NULL }, 16950, "udp" }, - { "intel-rci-mp", { NULL }, 16991, "tcp" }, - { "intel-rci-mp", { NULL }, 16991, "udp" }, - { "amt-soap-http", { NULL }, 16992, "tcp" }, - { "amt-soap-http", { NULL }, 16992, "udp" }, - { "amt-soap-https", { NULL }, 16993, "tcp" }, - { "amt-soap-https", { NULL }, 16993, "udp" }, - { "amt-redir-tcp", { NULL }, 16994, "tcp" }, - { "amt-redir-tcp", { NULL }, 16994, "udp" }, - { "amt-redir-tls", { NULL }, 16995, "tcp" }, - { "amt-redir-tls", { NULL }, 16995, "udp" }, - { "isode-dua", { NULL }, 17007, "tcp" }, - { "isode-dua", { NULL }, 17007, "udp" }, - { "soundsvirtual", { NULL }, 17185, "tcp" }, - { "soundsvirtual", { NULL }, 17185, "udp" }, - { "chipper", { NULL }, 17219, "tcp" }, - { "chipper", { NULL }, 17219, "udp" }, - { "integrius-stp", { NULL }, 17234, "tcp" }, - { "integrius-stp", { NULL }, 17234, "udp" }, - { "ssh-mgmt", { NULL }, 17235, "tcp" }, - { "ssh-mgmt", { NULL }, 17235, "udp" }, - { "db-lsp", { NULL }, 17500, "tcp" }, - { "db-lsp-disc", { NULL }, 17500, "udp" }, - { "ea", { NULL }, 17729, "tcp" }, - { "ea", { NULL }, 17729, "udp" }, - { "zep", { NULL }, 17754, "tcp" }, - { "zep", { NULL }, 17754, "udp" }, - { "zigbee-ip", { NULL }, 17755, "tcp" }, - { "zigbee-ip", { NULL }, 17755, "udp" }, - { "zigbee-ips", { NULL }, 17756, "tcp" }, - { "zigbee-ips", { NULL }, 17756, "udp" }, - { "sw-orion", { NULL }, 17777, "tcp" }, - { "biimenu", { NULL }, 18000, "tcp" }, - { "biimenu", { NULL }, 18000, "udp" }, - { "radpdf", { NULL }, 18104, "tcp" }, - { "racf", { NULL }, 18136, "tcp" }, - { "opsec-cvp", { NULL }, 18181, "tcp" }, - { "opsec-cvp", { NULL }, 18181, "udp" }, - { "opsec-ufp", { NULL }, 18182, "tcp" }, - { "opsec-ufp", { NULL }, 18182, "udp" }, - { "opsec-sam", { NULL }, 18183, "tcp" }, - { "opsec-sam", { NULL }, 18183, "udp" }, - { "opsec-lea", { NULL }, 18184, "tcp" }, - { "opsec-lea", { NULL }, 18184, "udp" }, - { "opsec-omi", { NULL }, 18185, "tcp" }, - { "opsec-omi", { NULL }, 18185, "udp" }, - { "ohsc", { NULL }, 18186, "tcp" }, - { "ohsc", { NULL }, 18186, "udp" }, - { "opsec-ela", { NULL }, 18187, "tcp" }, - { "opsec-ela", { NULL }, 18187, "udp" }, - { "checkpoint-rtm", { NULL }, 18241, "tcp" }, - { "checkpoint-rtm", { NULL }, 18241, "udp" }, - { "gv-pf", { NULL }, 18262, "tcp" }, - { "gv-pf", { NULL }, 18262, "udp" }, - { "ac-cluster", { NULL }, 18463, "tcp" }, - { "ac-cluster", { NULL }, 18463, "udp" }, - { "rds-ib", { NULL }, 18634, "tcp" }, - { "rds-ib", { NULL }, 18634, "udp" }, - { "rds-ip", { NULL }, 18635, "tcp" }, - { "rds-ip", { NULL }, 18635, "udp" }, - { "ique", { NULL }, 18769, "tcp" }, - { "ique", { NULL }, 18769, "udp" }, - { "infotos", { NULL }, 18881, "tcp" }, - { "infotos", { NULL }, 18881, "udp" }, - { "apc-necmp", { NULL }, 18888, "tcp" }, - { "apc-necmp", { NULL }, 18888, "udp" }, - { "igrid", { NULL }, 19000, "tcp" }, - { "igrid", { NULL }, 19000, "udp" }, - { "j-link", { NULL }, 19020, "tcp" }, - { "opsec-uaa", { NULL }, 19191, "tcp" }, - { "opsec-uaa", { NULL }, 19191, "udp" }, - { "ua-secureagent", { NULL }, 19194, "tcp" }, - { "ua-secureagent", { NULL }, 19194, "udp" }, - { "keysrvr", { NULL }, 19283, "tcp" }, - { "keysrvr", { NULL }, 19283, "udp" }, - { "keyshadow", { NULL }, 19315, "tcp" }, - { "keyshadow", { NULL }, 19315, "udp" }, - { "mtrgtrans", { NULL }, 19398, "tcp" }, - { "mtrgtrans", { NULL }, 19398, "udp" }, - { "hp-sco", { NULL }, 19410, "tcp" }, - { "hp-sco", { NULL }, 19410, "udp" }, - { "hp-sca", { NULL }, 19411, "tcp" }, - { "hp-sca", { NULL }, 19411, "udp" }, - { "hp-sessmon", { NULL }, 19412, "tcp" }, - { "hp-sessmon", { NULL }, 19412, "udp" }, - { "fxuptp", { NULL }, 19539, "tcp" }, - { "fxuptp", { NULL }, 19539, "udp" }, - { "sxuptp", { NULL }, 19540, "tcp" }, - { "sxuptp", { NULL }, 19540, "udp" }, - { "jcp", { NULL }, 19541, "tcp" }, - { "jcp", { NULL }, 19541, "udp" }, - { "iec-104-sec", { NULL }, 19998, "tcp" }, - { "dnp-sec", { NULL }, 19999, "tcp" }, - { "dnp-sec", { NULL }, 19999, "udp" }, - { "dnp", { NULL }, 20000, "tcp" }, - { "dnp", { NULL }, 20000, "udp" }, - { "microsan", { NULL }, 20001, "tcp" }, - { "microsan", { NULL }, 20001, "udp" }, - { "commtact-http", { NULL }, 20002, "tcp" }, - { "commtact-http", { NULL }, 20002, "udp" }, - { "commtact-https", { NULL }, 20003, "tcp" }, - { "commtact-https", { NULL }, 20003, "udp" }, - { "openwebnet", { NULL }, 20005, "tcp" }, - { "openwebnet", { NULL }, 20005, "udp" }, - { "ss-idi-disc", { NULL }, 20012, "udp" }, - { "ss-idi", { NULL }, 20013, "tcp" }, - { "opendeploy", { NULL }, 20014, "tcp" }, - { "opendeploy", { NULL }, 20014, "udp" }, - { "nburn_id", { NULL }, 20034, "tcp" }, - { "nburn_id", { NULL }, 20034, "udp" }, - { "tmophl7mts", { NULL }, 20046, "tcp" }, - { "tmophl7mts", { NULL }, 20046, "udp" }, - { "mountd", { NULL }, 20048, "tcp" }, - { "mountd", { NULL }, 20048, "udp" }, - { "nfsrdma", { NULL }, 20049, "tcp" }, - { "nfsrdma", { NULL }, 20049, "udp" }, - { "nfsrdma", { NULL }, 20049, "sctp" }, - { "tolfab", { NULL }, 20167, "tcp" }, - { "tolfab", { NULL }, 20167, "udp" }, - { "ipdtp-port", { NULL }, 20202, "tcp" }, - { "ipdtp-port", { NULL }, 20202, "udp" }, - { "ipulse-ics", { NULL }, 20222, "tcp" }, - { "ipulse-ics", { NULL }, 20222, "udp" }, - { "emwavemsg", { NULL }, 20480, "tcp" }, - { "emwavemsg", { NULL }, 20480, "udp" }, - { "track", { NULL }, 20670, "tcp" }, - { "track", { NULL }, 20670, "udp" }, - { "athand-mmp", { NULL }, 20999, "tcp" }, - { "athand-mmp", { NULL }, 20999, "udp" }, - { "irtrans", { NULL }, 21000, "tcp" }, - { "irtrans", { NULL }, 21000, "udp" }, - { "dfserver", { NULL }, 21554, "tcp" }, - { "dfserver", { NULL }, 21554, "udp" }, - { "vofr-gateway", { NULL }, 21590, "tcp" }, - { "vofr-gateway", { NULL }, 21590, "udp" }, - { "tvpm", { NULL }, 21800, "tcp" }, - { "tvpm", { NULL }, 21800, "udp" }, - { "webphone", { NULL }, 21845, "tcp" }, - { "webphone", { NULL }, 21845, "udp" }, - { "netspeak-is", { NULL }, 21846, "tcp" }, - { "netspeak-is", { NULL }, 21846, "udp" }, - { "netspeak-cs", { NULL }, 21847, "tcp" }, - { "netspeak-cs", { NULL }, 21847, "udp" }, - { "netspeak-acd", { NULL }, 21848, "tcp" }, - { "netspeak-acd", { NULL }, 21848, "udp" }, - { "netspeak-cps", { NULL }, 21849, "tcp" }, - { "netspeak-cps", { NULL }, 21849, "udp" }, - { "snapenetio", { NULL }, 22000, "tcp" }, - { "snapenetio", { NULL }, 22000, "udp" }, - { "optocontrol", { NULL }, 22001, "tcp" }, - { "optocontrol", { NULL }, 22001, "udp" }, - { "optohost002", { NULL }, 22002, "tcp" }, - { "optohost002", { NULL }, 22002, "udp" }, - { "optohost003", { NULL }, 22003, "tcp" }, - { "optohost003", { NULL }, 22003, "udp" }, - { "optohost004", { NULL }, 22004, "tcp" }, - { "optohost004", { NULL }, 22004, "udp" }, - { "optohost004", { NULL }, 22005, "tcp" }, - { "optohost004", { NULL }, 22005, "udp" }, - { "dcap", { NULL }, 22125, "tcp" }, - { "gsidcap", { NULL }, 22128, "tcp" }, - { "wnn6", { NULL }, 22273, "tcp" }, - { "wnn6", { NULL }, 22273, "udp" }, - { "cis", { NULL }, 22305, "tcp" }, - { "cis", { NULL }, 22305, "udp" }, - { "cis-secure", { NULL }, 22343, "tcp" }, - { "cis-secure", { NULL }, 22343, "udp" }, - { "WibuKey", { NULL }, 22347, "tcp" }, - { "WibuKey", { NULL }, 22347, "udp" }, - { "CodeMeter", { NULL }, 22350, "tcp" }, - { "CodeMeter", { NULL }, 22350, "udp" }, - { "vocaltec-wconf", { NULL }, 22555, "tcp" }, - { "vocaltec-phone", { NULL }, 22555, "udp" }, - { "talikaserver", { NULL }, 22763, "tcp" }, - { "talikaserver", { NULL }, 22763, "udp" }, - { "aws-brf", { NULL }, 22800, "tcp" }, - { "aws-brf", { NULL }, 22800, "udp" }, - { "brf-gw", { NULL }, 22951, "tcp" }, - { "brf-gw", { NULL }, 22951, "udp" }, - { "inovaport1", { NULL }, 23000, "tcp" }, - { "inovaport1", { NULL }, 23000, "udp" }, - { "inovaport2", { NULL }, 23001, "tcp" }, - { "inovaport2", { NULL }, 23001, "udp" }, - { "inovaport3", { NULL }, 23002, "tcp" }, - { "inovaport3", { NULL }, 23002, "udp" }, - { "inovaport4", { NULL }, 23003, "tcp" }, - { "inovaport4", { NULL }, 23003, "udp" }, - { "inovaport5", { NULL }, 23004, "tcp" }, - { "inovaport5", { NULL }, 23004, "udp" }, - { "inovaport6", { NULL }, 23005, "tcp" }, - { "inovaport6", { NULL }, 23005, "udp" }, - { "s102", { NULL }, 23272, "udp" }, - { "elxmgmt", { NULL }, 23333, "tcp" }, - { "elxmgmt", { NULL }, 23333, "udp" }, - { "novar-dbase", { NULL }, 23400, "tcp" }, - { "novar-dbase", { NULL }, 23400, "udp" }, - { "novar-alarm", { NULL }, 23401, "tcp" }, - { "novar-alarm", { NULL }, 23401, "udp" }, - { "novar-global", { NULL }, 23402, "tcp" }, - { "novar-global", { NULL }, 23402, "udp" }, - { "aequus", { NULL }, 23456, "tcp" }, - { "aequus-alt", { NULL }, 23457, "tcp" }, - { "med-ltp", { NULL }, 24000, "tcp" }, - { "med-ltp", { NULL }, 24000, "udp" }, - { "med-fsp-rx", { NULL }, 24001, "tcp" }, - { "med-fsp-rx", { NULL }, 24001, "udp" }, - { "med-fsp-tx", { NULL }, 24002, "tcp" }, - { "med-fsp-tx", { NULL }, 24002, "udp" }, - { "med-supp", { NULL }, 24003, "tcp" }, - { "med-supp", { NULL }, 24003, "udp" }, - { "med-ovw", { NULL }, 24004, "tcp" }, - { "med-ovw", { NULL }, 24004, "udp" }, - { "med-ci", { NULL }, 24005, "tcp" }, - { "med-ci", { NULL }, 24005, "udp" }, - { "med-net-svc", { NULL }, 24006, "tcp" }, - { "med-net-svc", { NULL }, 24006, "udp" }, - { "filesphere", { NULL }, 24242, "tcp" }, - { "filesphere", { NULL }, 24242, "udp" }, - { "vista-4gl", { NULL }, 24249, "tcp" }, - { "vista-4gl", { NULL }, 24249, "udp" }, - { "ild", { NULL }, 24321, "tcp" }, - { "ild", { NULL }, 24321, "udp" }, - { "intel_rci", { NULL }, 24386, "tcp" }, - { "intel_rci", { NULL }, 24386, "udp" }, - { "tonidods", { NULL }, 24465, "tcp" }, - { "tonidods", { NULL }, 24465, "udp" }, - { "binkp", { NULL }, 24554, "tcp" }, - { "binkp", { NULL }, 24554, "udp" }, - { "canditv", { NULL }, 24676, "tcp" }, - { "canditv", { NULL }, 24676, "udp" }, - { "flashfiler", { NULL }, 24677, "tcp" }, - { "flashfiler", { NULL }, 24677, "udp" }, - { "proactivate", { NULL }, 24678, "tcp" }, - { "proactivate", { NULL }, 24678, "udp" }, - { "tcc-http", { NULL }, 24680, "tcp" }, - { "tcc-http", { NULL }, 24680, "udp" }, - { "cslg", { NULL }, 24754, "tcp" }, - { "find", { NULL }, 24922, "tcp" }, - { "find", { NULL }, 24922, "udp" }, - { "icl-twobase1", { NULL }, 25000, "tcp" }, - { "icl-twobase1", { NULL }, 25000, "udp" }, - { "icl-twobase2", { NULL }, 25001, "tcp" }, - { "icl-twobase2", { NULL }, 25001, "udp" }, - { "icl-twobase3", { NULL }, 25002, "tcp" }, - { "icl-twobase3", { NULL }, 25002, "udp" }, - { "icl-twobase4", { NULL }, 25003, "tcp" }, - { "icl-twobase4", { NULL }, 25003, "udp" }, - { "icl-twobase5", { NULL }, 25004, "tcp" }, - { "icl-twobase5", { NULL }, 25004, "udp" }, - { "icl-twobase6", { NULL }, 25005, "tcp" }, - { "icl-twobase6", { NULL }, 25005, "udp" }, - { "icl-twobase7", { NULL }, 25006, "tcp" }, - { "icl-twobase7", { NULL }, 25006, "udp" }, - { "icl-twobase8", { NULL }, 25007, "tcp" }, - { "icl-twobase8", { NULL }, 25007, "udp" }, - { "icl-twobase9", { NULL }, 25008, "tcp" }, - { "icl-twobase9", { NULL }, 25008, "udp" }, - { "icl-twobase10", { NULL }, 25009, "tcp" }, - { "icl-twobase10", { NULL }, 25009, "udp" }, - { "rna", { NULL }, 25471, "sctp" }, - { "sauterdongle", { NULL }, 25576, "tcp" }, - { "vocaltec-hos", { NULL }, 25793, "tcp" }, - { "vocaltec-hos", { NULL }, 25793, "udp" }, - { "tasp-net", { NULL }, 25900, "tcp" }, - { "tasp-net", { NULL }, 25900, "udp" }, - { "niobserver", { NULL }, 25901, "tcp" }, - { "niobserver", { NULL }, 25901, "udp" }, - { "nilinkanalyst", { NULL }, 25902, "tcp" }, - { "nilinkanalyst", { NULL }, 25902, "udp" }, - { "niprobe", { NULL }, 25903, "tcp" }, - { "niprobe", { NULL }, 25903, "udp" }, - { "quake", { NULL }, 26000, "tcp" }, - { "quake", { NULL }, 26000, "udp" }, - { "scscp", { NULL }, 26133, "tcp" }, - { "scscp", { NULL }, 26133, "udp" }, - { "wnn6-ds", { NULL }, 26208, "tcp" }, - { "wnn6-ds", { NULL }, 26208, "udp" }, - { "ezproxy", { NULL }, 26260, "tcp" }, - { "ezproxy", { NULL }, 26260, "udp" }, - { "ezmeeting", { NULL }, 26261, "tcp" }, - { "ezmeeting", { NULL }, 26261, "udp" }, - { "k3software-svr", { NULL }, 26262, "tcp" }, - { "k3software-svr", { NULL }, 26262, "udp" }, - { "k3software-cli", { NULL }, 26263, "tcp" }, - { "k3software-cli", { NULL }, 26263, "udp" }, - { "exoline-tcp", { NULL }, 26486, "tcp" }, - { "exoline-udp", { NULL }, 26486, "udp" }, - { "exoconfig", { NULL }, 26487, "tcp" }, - { "exoconfig", { NULL }, 26487, "udp" }, - { "exonet", { NULL }, 26489, "tcp" }, - { "exonet", { NULL }, 26489, "udp" }, - { "imagepump", { NULL }, 27345, "tcp" }, - { "imagepump", { NULL }, 27345, "udp" }, - { "jesmsjc", { NULL }, 27442, "tcp" }, - { "jesmsjc", { NULL }, 27442, "udp" }, - { "kopek-httphead", { NULL }, 27504, "tcp" }, - { "kopek-httphead", { NULL }, 27504, "udp" }, - { "ars-vista", { NULL }, 27782, "tcp" }, - { "ars-vista", { NULL }, 27782, "udp" }, - { "tw-auth-key", { NULL }, 27999, "tcp" }, - { "tw-auth-key", { NULL }, 27999, "udp" }, - { "nxlmd", { NULL }, 28000, "tcp" }, - { "nxlmd", { NULL }, 28000, "udp" }, - { "pqsp", { NULL }, 28001, "tcp" }, - { "siemensgsm", { NULL }, 28240, "tcp" }, - { "siemensgsm", { NULL }, 28240, "udp" }, - { "sgsap", { NULL }, 29118, "sctp" }, - { "otmp", { NULL }, 29167, "tcp" }, - { "otmp", { NULL }, 29167, "udp" }, - { "sbcap", { NULL }, 29168, "sctp" }, - { "iuhsctpassoc", { NULL }, 29169, "sctp" }, - { "pago-services1", { NULL }, 30001, "tcp" }, - { "pago-services1", { NULL }, 30001, "udp" }, - { "pago-services2", { NULL }, 30002, "tcp" }, - { "pago-services2", { NULL }, 30002, "udp" }, - { "kingdomsonline", { NULL }, 30260, "tcp" }, - { "kingdomsonline", { NULL }, 30260, "udp" }, - { "ovobs", { NULL }, 30999, "tcp" }, - { "ovobs", { NULL }, 30999, "udp" }, - { "autotrac-acp", { NULL }, 31020, "tcp" }, - { "yawn", { NULL }, 31029, "udp" }, - { "xqosd", { NULL }, 31416, "tcp" }, - { "xqosd", { NULL }, 31416, "udp" }, - { "tetrinet", { NULL }, 31457, "tcp" }, - { "tetrinet", { NULL }, 31457, "udp" }, - { "lm-mon", { NULL }, 31620, "tcp" }, - { "lm-mon", { NULL }, 31620, "udp" }, - { "dsx_monitor", { NULL }, 31685, "tcp" }, - { "gamesmith-port", { NULL }, 31765, "tcp" }, - { "gamesmith-port", { NULL }, 31765, "udp" }, - { "iceedcp_tx", { NULL }, 31948, "tcp" }, - { "iceedcp_tx", { NULL }, 31948, "udp" }, - { "iceedcp_rx", { NULL }, 31949, "tcp" }, - { "iceedcp_rx", { NULL }, 31949, "udp" }, - { "iracinghelper", { NULL }, 32034, "tcp" }, - { "iracinghelper", { NULL }, 32034, "udp" }, - { "t1distproc60", { NULL }, 32249, "tcp" }, - { "t1distproc60", { NULL }, 32249, "udp" }, - { "apm-link", { NULL }, 32483, "tcp" }, - { "apm-link", { NULL }, 32483, "udp" }, - { "sec-ntb-clnt", { NULL }, 32635, "tcp" }, - { "sec-ntb-clnt", { NULL }, 32635, "udp" }, - { "DMExpress", { NULL }, 32636, "tcp" }, - { "DMExpress", { NULL }, 32636, "udp" }, - { "filenet-powsrm", { NULL }, 32767, "tcp" }, - { "filenet-powsrm", { NULL }, 32767, "udp" }, - { "filenet-tms", { NULL }, 32768, "tcp" }, - { "filenet-tms", { NULL }, 32768, "udp" }, - { "filenet-rpc", { NULL }, 32769, "tcp" }, - { "filenet-rpc", { NULL }, 32769, "udp" }, - { "filenet-nch", { NULL }, 32770, "tcp" }, - { "filenet-nch", { NULL }, 32770, "udp" }, - { "filenet-rmi", { NULL }, 32771, "tcp" }, - { "filenet-rmi", { NULL }, 32771, "udp" }, - { "filenet-pa", { NULL }, 32772, "tcp" }, - { "filenet-pa", { NULL }, 32772, "udp" }, - { "filenet-cm", { NULL }, 32773, "tcp" }, - { "filenet-cm", { NULL }, 32773, "udp" }, - { "filenet-re", { NULL }, 32774, "tcp" }, - { "filenet-re", { NULL }, 32774, "udp" }, - { "filenet-pch", { NULL }, 32775, "tcp" }, - { "filenet-pch", { NULL }, 32775, "udp" }, - { "filenet-peior", { NULL }, 32776, "tcp" }, - { "filenet-peior", { NULL }, 32776, "udp" }, - { "filenet-obrok", { NULL }, 32777, "tcp" }, - { "filenet-obrok", { NULL }, 32777, "udp" }, - { "mlsn", { NULL }, 32801, "tcp" }, - { "mlsn", { NULL }, 32801, "udp" }, - { "retp", { NULL }, 32811, "tcp" }, - { "idmgratm", { NULL }, 32896, "tcp" }, - { "idmgratm", { NULL }, 32896, "udp" }, - { "aurora-balaena", { NULL }, 33123, "tcp" }, - { "aurora-balaena", { NULL }, 33123, "udp" }, - { "diamondport", { NULL }, 33331, "tcp" }, - { "diamondport", { NULL }, 33331, "udp" }, - { "dgi-serv", { NULL }, 33333, "tcp" }, - { "traceroute", { NULL }, 33434, "tcp" }, - { "traceroute", { NULL }, 33434, "udp" }, - { "snip-slave", { NULL }, 33656, "tcp" }, - { "snip-slave", { NULL }, 33656, "udp" }, - { "turbonote-2", { NULL }, 34249, "tcp" }, - { "turbonote-2", { NULL }, 34249, "udp" }, - { "p-net-local", { NULL }, 34378, "tcp" }, - { "p-net-local", { NULL }, 34378, "udp" }, - { "p-net-remote", { NULL }, 34379, "tcp" }, - { "p-net-remote", { NULL }, 34379, "udp" }, - { "dhanalakshmi", { NULL }, 34567, "tcp" }, - { "profinet-rt", { NULL }, 34962, "tcp" }, - { "profinet-rt", { NULL }, 34962, "udp" }, - { "profinet-rtm", { NULL }, 34963, "tcp" }, - { "profinet-rtm", { NULL }, 34963, "udp" }, - { "profinet-cm", { NULL }, 34964, "tcp" }, - { "profinet-cm", { NULL }, 34964, "udp" }, - { "ethercat", { NULL }, 34980, "tcp" }, - { "ethercat", { NULL }, 34980, "udp" }, - { "allpeers", { NULL }, 36001, "tcp" }, - { "allpeers", { NULL }, 36001, "udp" }, - { "s1-control", { NULL }, 36412, "sctp" }, - { "x2-control", { NULL }, 36422, "sctp" }, - { "m2ap", { NULL }, 36443, "sctp" }, - { "m3ap", { NULL }, 36444, "sctp" }, - { "kastenxpipe", { NULL }, 36865, "tcp" }, - { "kastenxpipe", { NULL }, 36865, "udp" }, - { "neckar", { NULL }, 37475, "tcp" }, - { "neckar", { NULL }, 37475, "udp" }, - { "unisys-eportal", { NULL }, 37654, "tcp" }, - { "unisys-eportal", { NULL }, 37654, "udp" }, - { "galaxy7-data", { NULL }, 38201, "tcp" }, - { "galaxy7-data", { NULL }, 38201, "udp" }, - { "fairview", { NULL }, 38202, "tcp" }, - { "fairview", { NULL }, 38202, "udp" }, - { "agpolicy", { NULL }, 38203, "tcp" }, - { "agpolicy", { NULL }, 38203, "udp" }, - { "turbonote-1", { NULL }, 39681, "tcp" }, - { "turbonote-1", { NULL }, 39681, "udp" }, - { "safetynetp", { NULL }, 40000, "tcp" }, - { "safetynetp", { NULL }, 40000, "udp" }, - { "cscp", { NULL }, 40841, "tcp" }, - { "cscp", { NULL }, 40841, "udp" }, - { "csccredir", { NULL }, 40842, "tcp" }, - { "csccredir", { NULL }, 40842, "udp" }, - { "csccfirewall", { NULL }, 40843, "tcp" }, - { "csccfirewall", { NULL }, 40843, "udp" }, - { "ortec-disc", { NULL }, 40853, "udp" }, - { "fs-qos", { NULL }, 41111, "tcp" }, - { "fs-qos", { NULL }, 41111, "udp" }, - { "tentacle", { NULL }, 41121, "tcp" }, - { "crestron-cip", { NULL }, 41794, "tcp" }, - { "crestron-cip", { NULL }, 41794, "udp" }, - { "crestron-ctp", { NULL }, 41795, "tcp" }, - { "crestron-ctp", { NULL }, 41795, "udp" }, - { "candp", { NULL }, 42508, "tcp" }, - { "candp", { NULL }, 42508, "udp" }, - { "candrp", { NULL }, 42509, "tcp" }, - { "candrp", { NULL }, 42509, "udp" }, - { "caerpc", { NULL }, 42510, "tcp" }, - { "caerpc", { NULL }, 42510, "udp" }, - { "reachout", { NULL }, 43188, "tcp" }, - { "reachout", { NULL }, 43188, "udp" }, - { "ndm-agent-port", { NULL }, 43189, "tcp" }, - { "ndm-agent-port", { NULL }, 43189, "udp" }, - { "ip-provision", { NULL }, 43190, "tcp" }, - { "ip-provision", { NULL }, 43190, "udp" }, - { "noit-transport", { NULL }, 43191, "tcp" }, - { "ew-mgmt", { NULL }, 43440, "tcp" }, - { "ew-disc-cmd", { NULL }, 43440, "udp" }, - { "ciscocsdb", { NULL }, 43441, "tcp" }, - { "ciscocsdb", { NULL }, 43441, "udp" }, - { "pmcd", { NULL }, 44321, "tcp" }, - { "pmcd", { NULL }, 44321, "udp" }, - { "pmcdproxy", { NULL }, 44322, "tcp" }, - { "pmcdproxy", { NULL }, 44322, "udp" }, - { "pcp", { NULL }, 44323, "udp" }, - { "rbr-debug", { NULL }, 44553, "tcp" }, - { "rbr-debug", { NULL }, 44553, "udp" }, - { "EtherNet/IP-2", { NULL }, 44818, "tcp" }, - { "EtherNet/IP-2", { NULL }, 44818, "udp" }, - { "invision-ag", { NULL }, 45054, "tcp" }, - { "invision-ag", { NULL }, 45054, "udp" }, - { "eba", { NULL }, 45678, "tcp" }, - { "eba", { NULL }, 45678, "udp" }, - { "qdb2service", { NULL }, 45825, "tcp" }, - { "qdb2service", { NULL }, 45825, "udp" }, - { "ssr-servermgr", { NULL }, 45966, "tcp" }, - { "ssr-servermgr", { NULL }, 45966, "udp" }, - { "mediabox", { NULL }, 46999, "tcp" }, - { "mediabox", { NULL }, 46999, "udp" }, - { "mbus", { NULL }, 47000, "tcp" }, - { "mbus", { NULL }, 47000, "udp" }, - { "winrm", { NULL }, 47001, "tcp" }, - { "dbbrowse", { NULL }, 47557, "tcp" }, - { "dbbrowse", { NULL }, 47557, "udp" }, - { "directplaysrvr", { NULL }, 47624, "tcp" }, - { "directplaysrvr", { NULL }, 47624, "udp" }, - { "ap", { NULL }, 47806, "tcp" }, - { "ap", { NULL }, 47806, "udp" }, - { "bacnet", { NULL }, 47808, "tcp" }, - { "bacnet", { NULL }, 47808, "udp" }, - { "nimcontroller", { NULL }, 48000, "tcp" }, - { "nimcontroller", { NULL }, 48000, "udp" }, - { "nimspooler", { NULL }, 48001, "tcp" }, - { "nimspooler", { NULL }, 48001, "udp" }, - { "nimhub", { NULL }, 48002, "tcp" }, - { "nimhub", { NULL }, 48002, "udp" }, - { "nimgtw", { NULL }, 48003, "tcp" }, - { "nimgtw", { NULL }, 48003, "udp" }, - { "nimbusdb", { NULL }, 48004, "tcp" }, - { "nimbusdbctrl", { NULL }, 48005, "tcp" }, - { "3gpp-cbsp", { NULL }, 48049, "tcp" }, - { "isnetserv", { NULL }, 48128, "tcp" }, - { "isnetserv", { NULL }, 48128, "udp" }, - { "blp5", { NULL }, 48129, "tcp" }, - { "blp5", { NULL }, 48129, "udp" }, - { "com-bardac-dw", { NULL }, 48556, "tcp" }, - { "com-bardac-dw", { NULL }, 48556, "udp" }, - { "iqobject", { NULL }, 48619, "tcp" }, - { "iqobject", { NULL }, 48619, "udp" }, -# endif /* USE_IANA_REGISTERED_PORTS */ - { NULL, { NULL }, 0, NULL } -}; - -struct servent *getservbyport(int port, const char *proto) -{ - unsigned short u_port; - const char *protocol = NULL; - int error = 0; - size_t i; - - u_port = ntohs((unsigned short)port); - - if (proto) { - switch (ares_strlen(proto)) { - case 3: - if (!strncasecmp(proto, "tcp", 3)) { - protocol = "tcp"; - } else if (!strncasecmp(proto, "udp", 3)) { - protocol = "udp"; - } else { - error = WSAEFAULT; - } - break; - case 4: - if (!strncasecmp(proto, "sctp", 4)) { - protocol = "sctp"; - } else if (!strncasecmp(proto, "dccp", 4)) { - protocol = "dccp"; - } else { - error = WSAEFAULT; - } - break; - default: - error = WSAEFAULT; - } - } - - if (!error) { - for (i = 0; i < (sizeof(IANAports) / sizeof(IANAports[0])) - 1; i++) { - if (u_port == IANAports[i].s_port) { - if (!protocol || !strcasecmp(protocol, IANAports[i].s_proto)) { - return (struct servent *)&IANAports[i]; - } - } - } - error = WSANO_DATA; - } - - SET_SOCKERRNO(error); - return NULL; -} - -#endif /* _WIN32_WCE */ diff --git a/deps/cares/src/lib/ares_private.h b/deps/cares/src/lib/ares_private.h index 263c2a606d3708..ce8c3f2ddc2f6c 100644 --- a/deps/cares/src/lib/ares_private.h +++ b/deps/cares/src/lib/ares_private.h @@ -40,6 +40,36 @@ # include #endif +#include "ares_mem.h" +#include "ares_ipv6.h" +#include "util/ares_math.h" +#include "util/ares_time.h" +#include "util/ares_rand.h" +#include "ares_array.h" +#include "ares_llist.h" +#include "dsa/ares_slist.h" +#include "ares_htable_strvp.h" +#include "ares_htable_szvp.h" +#include "ares_htable_asvp.h" +#include "ares_htable_dict.h" +#include "ares_htable_vpvp.h" +#include "ares_htable_vpstr.h" +#include "record/ares_dns_multistring.h" +#include "ares_buf.h" +#include "record/ares_dns_private.h" +#include "util/ares_iface_ips.h" +#include "util/ares_threads.h" +#include "ares_socket.h" +#include "ares_conn.h" +#include "ares_str.h" +#include "str/ares_strsplit.h" +#include "util/ares_uri.h" + +#ifndef HAVE_GETENV +# include "ares_getenv.h" +# define getenv(ptr) ares_getenv(ptr) +#endif + #define DEFAULT_TIMEOUT 2000 /* milliseconds */ #define DEFAULT_TRIES 3 #ifndef INADDR_NONE @@ -100,42 +130,6 @@ W32_FUNC const char *_w32_GetHostsFile(void); #endif -#include "ares_ipv6.h" - -struct ares_rand_state; -typedef struct ares_rand_state ares_rand_state; - -#include "dsa/ares__array.h" -#include "dsa/ares__llist.h" -#include "dsa/ares__slist.h" -#include "dsa/ares__htable_strvp.h" -#include "dsa/ares__htable_szvp.h" -#include "dsa/ares__htable_asvp.h" -#include "dsa/ares__htable_vpvp.h" -#include "record/ares_dns_multistring.h" -#include "str/ares__buf.h" -#include "record/ares_dns_private.h" -#include "util/ares__iface_ips.h" -#include "util/ares__threads.h" - -#ifndef HAVE_GETENV -# include "ares_getenv.h" -# define getenv(ptr) ares_getenv(ptr) -#endif - -#include "str/ares_str.h" -#include "str/ares_strsplit.h" - -#ifndef HAVE_STRCASECMP -# include "str/ares_strcasecmp.h" -# define strcasecmp(p1, p2) ares_strcasecmp(p1, p2) -#endif - -#ifndef HAVE_STRNCASECMP -# include "str/ares_strcasecmp.h" -# define strncasecmp(p1, p2, n) ares_strncasecmp(p1, p2, n) -#endif - /********* EDNS defines section ******/ #define EDNSPACKETSZ \ 1232 /* Reasonable UDP payload size, as agreed by operators \ @@ -154,140 +148,6 @@ typedef struct ares_rand_state ares_rand_state; struct ares_query; typedef struct ares_query ares_query_t; -struct ares_server; -typedef struct ares_server ares_server_t; - -struct ares_conn; -typedef struct ares_conn ares_conn_t; - -typedef enum { - /*! No flags */ - ARES_CONN_FLAG_NONE = 0, - /*! TCP connection, not UDP */ - ARES_CONN_FLAG_TCP = 1 << 0, - /*! TCP Fast Open is enabled and being used if supported by the OS */ - ARES_CONN_FLAG_TFO = 1 << 1, - /*! TCP Fast Open has not yet sent its first packet. Gets unset on first - * write to a connection */ - ARES_CONN_FLAG_TFO_INITIAL = 1 << 2 -} ares_conn_flags_t; - -struct ares_conn { - ares_server_t *server; - ares_socket_t fd; - struct ares_addr self_ip; - ares_conn_flags_t flags; - /* total number of queries run on this connection since it was established */ - size_t total_queries; - /* list of outstanding queries to this connection */ - ares__llist_t *queries_to_conn; -}; - -#ifdef _MSC_VER -typedef __int64 ares_int64_t; -typedef unsigned __int64 ares_uint64_t; -#else -typedef long long ares_int64_t; -typedef unsigned long long ares_uint64_t; -#endif - -/*! struct timeval on some systems like Windows doesn't support 64bit time so - * therefore can't be used due to Y2K38 issues. Make our own that does have - * 64bit time. */ -typedef struct { - ares_int64_t sec; /*!< Seconds */ - unsigned int usec; /*!< Microseconds. Can't be negative. */ -} ares_timeval_t; - -/*! Various buckets for grouping history */ -typedef enum { - ARES_METRIC_1MINUTE = 0, /*!< Bucket for tracking over the last minute */ - ARES_METRIC_15MINUTES, /*!< Bucket for tracking over the last 15 minutes */ - ARES_METRIC_1HOUR, /*!< Bucket for tracking over the last hour */ - ARES_METRIC_1DAY, /*!< Bucket for tracking over the last day */ - ARES_METRIC_INCEPTION, /*!< Bucket for tracking since inception */ - ARES_METRIC_COUNT /*!< Count of buckets, not a real bucket */ -} ares_server_bucket_t; - -/*! Data metrics collected for each bucket */ -typedef struct { - time_t ts; /*!< Timestamp divided by bucket divisor */ - unsigned int latency_min_ms; /*!< Minimum latency for queries */ - unsigned int latency_max_ms; /*!< Maximum latency for queries */ - ares_uint64_t total_ms; /*!< Cumulative query time for bucket */ - ares_uint64_t total_count; /*!< Number of queries for bucket */ - - time_t prev_ts; /*!< Previous period bucket timestamp */ - ares_uint64_t - prev_total_ms; /*!< Previous period bucket cumulative query time */ - ares_uint64_t prev_total_count; /*!< Previous period bucket query count */ -} ares_server_metrics_t; - -typedef enum { - ARES_COOKIE_INITIAL = 0, - ARES_COOKIE_GENERATED = 1, - ARES_COOKIE_SUPPORTED = 2, - ARES_COOKIE_UNSUPPORTED = 3 -} ares_cookie_state_t; - -/*! Structure holding tracking data for RFC 7873/9018 DNS cookies. - * Implementation plan for this feature is here: - * https://github.com/c-ares/c-ares/issues/620 - */ -typedef struct { - /*! starts at INITIAL, transitions as needed. */ - ares_cookie_state_t state; - /*! randomly-generate client cookie */ - unsigned char client[8]; - /*! timestamp client cookie was generated, used for rotation purposes */ - ares_timeval_t client_ts; - /*! IP address last used for client to connect to server. If this changes - * The client cookie gets invalidated */ - struct ares_addr client_ip; - /*! Server Cookie last received, 8-32 bytes in length */ - unsigned char server[32]; - /*! Length of server cookie on file. */ - size_t server_len; - /*! Timestamp of last attempt to use cookies, but it was determined that the - * server didn't support them */ - ares_timeval_t unsupported_ts; -} ares_cookie_t; - -struct ares_server { - /* Configuration */ - size_t idx; /* index for server in system configuration */ - struct ares_addr addr; - unsigned short udp_port; /* host byte order */ - unsigned short tcp_port; /* host byte order */ - char ll_iface[64]; /* IPv6 Link Local Interface */ - unsigned int ll_scope; /* IPv6 Link Local Scope */ - - size_t consec_failures; /* Consecutive query failure count - * can be hard errors or timeouts - */ - ares__llist_t *connections; - ares_conn_t *tcp_conn; - - /* The next time when we will retry this server if it has hit failures */ - ares_timeval_t next_retry_time; - - /* TCP buffer since multiple responses can come back in one read, or partial - * in a read */ - ares__buf_t *tcp_parser; - - /* TCP output queue */ - ares__buf_t *tcp_send; - - /*! Buckets for collecting metrics about the server */ - ares_server_metrics_t metrics[ARES_METRIC_COUNT]; - - /*! RFC 7873/9018 DNS Cookies */ - ares_cookie_t cookie; - - /* Link back to owning channel */ - ares_channel_t *channel; -}; - /* State to represent a DNS query */ struct ares_query { /* Query ID from qbuf, for faster lookup, and current timeout */ @@ -300,9 +160,9 @@ struct ares_query { * Node object for each list entry the query belongs to in order to * make removal operations O(1). */ - ares__slist_node_t *node_queries_by_timeout; - ares__llist_node_t *node_queries_to_conn; - ares__llist_node_t *node_all_queries; + ares_slist_node_t *node_queries_by_timeout; + ares_llist_node_t *node_queries_to_conn; + ares_llist_node_t *node_all_queries; /* connection handle query is associated with */ ares_conn_t *conn; @@ -328,71 +188,71 @@ struct apattern { unsigned char mask; }; -struct ares__qcache; -typedef struct ares__qcache ares__qcache_t; +struct ares_qcache; +typedef struct ares_qcache ares_qcache_t; struct ares_hosts_file; typedef struct ares_hosts_file ares_hosts_file_t; struct ares_channeldata { /* Configuration data */ - unsigned int flags; - size_t timeout; /* in milliseconds */ - size_t tries; - size_t ndots; - size_t maxtimeout; /* in milliseconds */ - ares_bool_t rotate; - unsigned short udp_port; /* stored in network order */ - unsigned short tcp_port; /* stored in network order */ - int socket_send_buffer_size; /* setsockopt takes int */ - int socket_receive_buffer_size; /* setsockopt takes int */ - char **domains; - size_t ndomains; - struct apattern *sortlist; - size_t nsort; - char *lookups; - size_t ednspsz; - unsigned int qcache_max_ttl; - ares_evsys_t evsys; - unsigned int optmask; + unsigned int flags; + size_t timeout; /* in milliseconds */ + size_t tries; + size_t ndots; + size_t maxtimeout; /* in milliseconds */ + ares_bool_t rotate; + unsigned short udp_port; /* stored in network order */ + unsigned short tcp_port; /* stored in network order */ + int socket_send_buffer_size; /* setsockopt takes int */ + int socket_receive_buffer_size; /* setsockopt takes int */ + char **domains; + size_t ndomains; + struct apattern *sortlist; + size_t nsort; + char *lookups; + size_t ednspsz; + unsigned int qcache_max_ttl; + ares_evsys_t evsys; + unsigned int optmask; /* For binding to local devices and/or IP addresses. Leave * them null/zero for no binding. */ - char local_dev_name[32]; - unsigned int local_ip4; - unsigned char local_ip6[16]; + char local_dev_name[32]; + unsigned int local_ip4; + unsigned char local_ip6[16]; /* Thread safety lock */ - ares__thread_mutex_t *lock; + ares_thread_mutex_t *lock; /* Conditional to wake waiters when queue is empty */ - ares__thread_cond_t *cond_empty; + ares_thread_cond_t *cond_empty; /* Server addresses and communications state. Sorted by least consecutive * failures, followed by the configuration order if failures are equal. */ - ares__slist_t *servers; + ares_slist_t *servers; /* random state to use when generating new ids and generating retry penalties */ - ares_rand_state *rand_state; + ares_rand_state *rand_state; /* All active queries in a single list */ - ares__llist_t *all_queries; + ares_llist_t *all_queries; /* Queries bucketed by qid, for quickly dispatching DNS responses: */ - ares__htable_szvp_t *queries_by_qid; + ares_htable_szvp_t *queries_by_qid; /* Queries bucketed by timeout, for quickly handling timeouts: */ - ares__slist_t *queries_by_timeout; + ares_slist_t *queries_by_timeout; /* Map linked list node member for connection to file descriptor. We use * the node instead of the connection object itself so we can quickly look * up a connection and remove it if necessary (as otherwise we'd have to * scan all connections) */ - ares__htable_asvp_t *connnode_by_socket; + ares_htable_asvp_t *connnode_by_socket; - ares_sock_state_cb sock_state_cb; - void *sock_state_cb_data; + ares_sock_state_cb sock_state_cb; + void *sock_state_cb_data; ares_sock_create_callback sock_create_cb; void *sock_create_cb_data; @@ -400,8 +260,14 @@ struct ares_channeldata { ares_sock_config_callback sock_config_cb; void *sock_config_cb_data; - const struct ares_socket_functions *sock_funcs; + struct ares_socket_functions_ex sock_funcs; void *sock_func_cb_data; + const struct ares_socket_functions *legacy_sock_funcs; + void *legacy_sock_funcs_cb_data; + + ares_pending_write_cb notify_pending_write_cb; + void *notify_pending_write_cb_data; + ares_bool_t notify_pending_write; /* Path for resolv.conf file, configurable via ares_options */ char *resolvconf_path; @@ -416,7 +282,7 @@ struct ares_channeldata { ares_hosts_file_t *hf; /* Query Cache */ - ares__qcache_t *qcache; + ares_qcache_t *qcache; /* Fields controlling server failover behavior. * The retry chance is the probability (1/N) by which we will retry a failed @@ -437,7 +303,7 @@ struct ares_channeldata { * reading may block. The thread handle is provided for waiting on thread * exit. */ ares_bool_t reinit_pending; - ares__thread_t *reinit_thread; + ares_thread_t *reinit_thread; /* Whether the system is up or not. This is mainly to prevent deadlocks * and access violations during the cleanup process. Some things like @@ -447,29 +313,18 @@ struct ares_channeldata { }; /* Does the domain end in ".onion" or ".onion."? Case-insensitive. */ -ares_bool_t ares__is_onion_domain(const char *name); - -/* Memory management functions */ -extern void *(*ares_malloc)(size_t size); -extern void *(*ares_realloc)(void *ptr, size_t size); -extern void (*ares_free)(void *ptr); -void *ares_malloc_zero(size_t size); -void *ares_realloc_zero(void *ptr, size_t orig_size, size_t new_size); - -/* return true if now is exactly check time or later */ -ares_bool_t ares__timedout(const ares_timeval_t *now, - const ares_timeval_t *check); +ares_bool_t ares_is_onion_domain(const char *name); /* Returns one of the normal ares status codes like ARES_SUCCESS */ -ares_status_t ares__send_query(ares_query_t *query, const ares_timeval_t *now); -ares_status_t ares__requeue_query(ares_query_t *query, - const ares_timeval_t *now, - ares_status_t status, - ares_bool_t inc_try_count, - const ares_dns_record_t *dnsrec); +ares_status_t ares_send_query(ares_server_t *requested_server /* Optional */, + ares_query_t *query, const ares_timeval_t *now); +ares_status_t ares_requeue_query(ares_query_t *query, const ares_timeval_t *now, + ares_status_t status, + ares_bool_t inc_try_count, + const ares_dns_record_t *dnsrec); /*! Count the number of labels (dots+1) in a domain */ -size_t ares__name_label_cnt(const char *name); +size_t ares_name_label_cnt(const char *name); /*! Retrieve a list of names to use for searching. The first successful * query in the list wins. This function also uses the HOSTSALIASES file @@ -477,57 +332,45 @@ size_t ares__name_label_cnt(const char *name); * * \param[in] channel initialized ares channel * \param[in] name initial name being searched - * \param[out] names array of names to attempt, use ares__strsplit_free() + * \param[out] names array of names to attempt, use ares_strsplit_free() * when no longer needed. * \param[out] names_len number of names in array * \return ARES_SUCCESS on success, otherwise one of the other error codes. */ -ares_status_t ares__search_name_list(const ares_channel_t *channel, - const char *name, char ***names, - size_t *names_len); +ares_status_t ares_search_name_list(const ares_channel_t *channel, + const char *name, char ***names, + size_t *names_len); /*! Function to create callback arg for converting from ares_callback_dnsrec * to ares_calback */ -void *ares__dnsrec_convert_arg(ares_callback callback, void *arg); +void *ares_dnsrec_convert_arg(ares_callback callback, void *arg); /*! Callback function used to convert from the ares_callback_dnsrec prototype to * the ares_callback prototype, by writing the result and passing that to * the inner callback. */ -void ares__dnsrec_convert_cb(void *arg, ares_status_t status, size_t timeouts, - const ares_dns_record_t *dnsrec); - -void ares__close_connection(ares_conn_t *conn, ares_status_t requeue_status); -void ares__close_sockets(ares_server_t *server); -void ares__check_cleanup_conns(const ares_channel_t *channel); -void ares__free_query(ares_query_t *query); - -ares_rand_state *ares__init_rand_state(void); -void ares__destroy_rand_state(ares_rand_state *state); -void ares__rand_bytes(ares_rand_state *state, unsigned char *buf, size_t len); - -unsigned short ares__generate_new_id(ares_rand_state *state); -void ares__tvnow(ares_timeval_t *now); -void ares__timeval_remaining(ares_timeval_t *remaining, - const ares_timeval_t *now, - const ares_timeval_t *tout); -void ares__timeval_diff(ares_timeval_t *tvdiff, const ares_timeval_t *tvstart, - const ares_timeval_t *tvstop); -ares_status_t ares__expand_name_validated(const unsigned char *encoded, - const unsigned char *abuf, - size_t alen, char **s, size_t *enclen, +void ares_dnsrec_convert_cb(void *arg, ares_status_t status, size_t timeouts, + const ares_dns_record_t *dnsrec); + +void ares_free_query(ares_query_t *query); + +unsigned short ares_generate_new_id(ares_rand_state *state); +ares_status_t ares_expand_name_validated(const unsigned char *encoded, + const unsigned char *abuf, size_t alen, + char **s, size_t *enclen, ares_bool_t is_hostname); -ares_status_t ares_expand_string_ex(const unsigned char *encoded, - const unsigned char *abuf, size_t alen, - unsigned char **s, size_t *enclen); -ares_status_t ares__init_servers_state(ares_channel_t *channel); -ares_status_t ares__init_by_options(ares_channel_t *channel, +ares_status_t ares_expand_string_ex(const unsigned char *encoded, + const unsigned char *abuf, size_t alen, + unsigned char **s, size_t *enclen); +ares_status_t ares_init_servers_state(ares_channel_t *channel); +ares_status_t ares_init_by_options(ares_channel_t *channel, const struct ares_options *options, int optmask); -ares_status_t ares__init_by_sysconfig(ares_channel_t *channel); +ares_status_t ares_init_by_sysconfig(ares_channel_t *channel); +void ares_set_socket_functions_def(ares_channel_t *channel); typedef struct { - ares__llist_t *sconfig; + ares_llist_t *sconfig; struct apattern *sortlist; size_t nsortlist; char **domains; @@ -540,131 +383,108 @@ typedef struct { ares_bool_t usevc; } ares_sysconfig_t; -ares_status_t ares__sysconfig_set_options(ares_sysconfig_t *sysconfig, - const char *str); +ares_status_t ares_sysconfig_set_options(ares_sysconfig_t *sysconfig, + const char *str); -ares_status_t ares__init_by_environment(ares_sysconfig_t *sysconfig); +ares_status_t ares_init_by_environment(ares_sysconfig_t *sysconfig); -ares_status_t ares__init_sysconfig_files(const ares_channel_t *channel, - ares_sysconfig_t *sysconfig); +ares_status_t ares_init_sysconfig_files(const ares_channel_t *channel, + ares_sysconfig_t *sysconfig); #ifdef __APPLE__ -ares_status_t ares__init_sysconfig_macos(ares_sysconfig_t *sysconfig); +ares_status_t ares_init_sysconfig_macos(const ares_channel_t *channel, + ares_sysconfig_t *sysconfig); #endif #ifdef USE_WINSOCK -ares_status_t ares__init_sysconfig_windows(ares_sysconfig_t *sysconfig); +ares_status_t ares_init_sysconfig_windows(const ares_channel_t *channel, + ares_sysconfig_t *sysconfig); #endif -ares_status_t ares__parse_sortlist(struct apattern **sortlist, size_t *nsort, - const char *str); - -void ares__destroy_servers_state(ares_channel_t *channel); +ares_status_t ares_parse_sortlist(struct apattern **sortlist, size_t *nsort, + const char *str); /* Returns ARES_SUCCESS if alias found, alias is set. Returns ARES_ENOTFOUND * if not alias found. Returns other errors on critical failure like * ARES_ENOMEM */ -ares_status_t ares__lookup_hostaliases(const ares_channel_t *channel, - const char *name, char **alias); +ares_status_t ares_lookup_hostaliases(const ares_channel_t *channel, + const char *name, char **alias); -ares_status_t ares__cat_domain(const char *name, const char *domain, char **s); -ares_status_t ares__sortaddrinfo(ares_channel_t *channel, - struct ares_addrinfo_node *ai_node); +ares_status_t ares_cat_domain(const char *name, const char *domain, char **s); +ares_status_t ares_sortaddrinfo(ares_channel_t *channel, + struct ares_addrinfo_node *ai_node); -void ares__freeaddrinfo_nodes(struct ares_addrinfo_node *ai_node); -ares_bool_t ares__is_localhost(const char *name); +void ares_freeaddrinfo_nodes(struct ares_addrinfo_node *ai_node); +ares_bool_t ares_is_localhost(const char *name); struct ares_addrinfo_node * - ares__append_addrinfo_node(struct ares_addrinfo_node **ai_node); -void ares__addrinfo_cat_nodes(struct ares_addrinfo_node **head, - struct ares_addrinfo_node *tail); + ares_append_addrinfo_node(struct ares_addrinfo_node **ai_node); +void ares_addrinfo_cat_nodes(struct ares_addrinfo_node **head, + struct ares_addrinfo_node *tail); -void ares__freeaddrinfo_cnames(struct ares_addrinfo_cname *ai_cname); +void ares_freeaddrinfo_cnames(struct ares_addrinfo_cname *ai_cname); -struct ares_addrinfo_cname * - ares__append_addrinfo_cname(struct ares_addrinfo_cname **ai_cname); +struct ares_addrinfo_cname * + ares_append_addrinfo_cname(struct ares_addrinfo_cname **ai_cname); ares_status_t ares_append_ai_node(int aftype, unsigned short port, unsigned int ttl, const void *adata, struct ares_addrinfo_node **nodes); -void ares__addrinfo_cat_cnames(struct ares_addrinfo_cname **head, - struct ares_addrinfo_cname *tail); +void ares_addrinfo_cat_cnames(struct ares_addrinfo_cname **head, + struct ares_addrinfo_cname *tail); -ares_status_t ares__parse_into_addrinfo(const ares_dns_record_t *dnsrec, - ares_bool_t cname_only_is_enodata, - unsigned short port, - struct ares_addrinfo *ai); +ares_status_t ares_parse_into_addrinfo(const ares_dns_record_t *dnsrec, + ares_bool_t cname_only_is_enodata, + unsigned short port, + struct ares_addrinfo *ai); ares_status_t ares_parse_ptr_reply_dnsrec(const ares_dns_record_t *dnsrec, const void *addr, int addrlen, int family, struct hostent **host); -ares_status_t ares__addrinfo2hostent(const struct ares_addrinfo *ai, int family, - struct hostent **host); -ares_status_t ares__addrinfo2addrttl(const struct ares_addrinfo *ai, int family, - size_t req_naddrttls, - struct ares_addrttl *addrttls, - struct ares_addr6ttl *addr6ttls, - size_t *naddrttls); -ares_status_t ares__addrinfo_localhost(const char *name, unsigned short port, - const struct ares_addrinfo_hints *hints, - struct ares_addrinfo *ai); -ares_status_t ares__open_connection(ares_conn_t **conn_out, - ares_channel_t *channel, - ares_server_t *server, ares_bool_t is_tcp); -ares_bool_t ares_sockaddr_to_ares_addr(struct ares_addr *ares_addr, - unsigned short *port, - const struct sockaddr *sockaddr); -ares_socket_t ares__open_socket(ares_channel_t *channel, int af, int type, - int protocol); -ares_bool_t ares__socket_try_again(int errnum); -ares_ssize_t ares__conn_write(ares_conn_t *conn, const void *data, size_t len); -ares_ssize_t ares__socket_recvfrom(ares_channel_t *channel, ares_socket_t s, - void *data, size_t data_len, int flags, - struct sockaddr *from, - ares_socklen_t *from_len); -ares_ssize_t ares__socket_recv(ares_channel_t *channel, ares_socket_t s, - void *data, size_t data_len); -void ares__close_socket(ares_channel_t *channel, ares_socket_t s); -ares_status_t ares__connect_socket(ares_channel_t *channel, - ares_socket_t sockfd, - const struct sockaddr *addr, - ares_socklen_t addrlen); -void ares__destroy_server(ares_server_t *server); - -ares_status_t ares__servers_update(ares_channel_t *channel, - ares__llist_t *server_list, - ares_bool_t user_specified); -ares_status_t ares__sconfig_append(ares__llist_t **sconfig, - const struct ares_addr *addr, - unsigned short udp_port, - unsigned short tcp_port, - const char *ll_iface); -ares_status_t ares__sconfig_append_fromstr(ares__llist_t **sconfig, - const char *str, - ares_bool_t ignore_invalid); -ares_status_t ares_in_addr_to_server_config_llist(const struct in_addr *servers, - size_t nservers, - ares__llist_t **llist); +ares_status_t ares_addrinfo2hostent(const struct ares_addrinfo *ai, int family, + struct hostent **host); +ares_status_t ares_addrinfo2addrttl(const struct ares_addrinfo *ai, int family, + size_t req_naddrttls, + struct ares_addrttl *addrttls, + struct ares_addr6ttl *addr6ttls, + size_t *naddrttls); +ares_status_t ares_addrinfo_localhost(const char *name, unsigned short port, + const struct ares_addrinfo_hints *hints, + struct ares_addrinfo *ai); + +ares_status_t ares_servers_update(ares_channel_t *channel, + ares_llist_t *server_list, + ares_bool_t user_specified); +ares_status_t + ares_sconfig_append(const ares_channel_t *channel, ares_llist_t **sconfig, + const struct ares_addr *addr, unsigned short udp_port, + unsigned short tcp_port, const char *ll_iface); +ares_status_t ares_sconfig_append_fromstr(const ares_channel_t *channel, + ares_llist_t **sconfig, + const char *str, + ares_bool_t ignore_invalid); +ares_status_t ares_in_addr_to_sconfig_llist(const struct in_addr *servers, + size_t nservers, + ares_llist_t **llist); ares_status_t ares_get_server_addr(const ares_server_t *server, - ares__buf_t *buf); + ares_buf_t *buf); struct ares_hosts_entry; typedef struct ares_hosts_entry ares_hosts_entry_t; -void ares__hosts_file_destroy(ares_hosts_file_t *hf); -ares_status_t ares__hosts_search_ipaddr(ares_channel_t *channel, - ares_bool_t use_env, const char *ipaddr, - const ares_hosts_entry_t **entry); -ares_status_t ares__hosts_search_host(ares_channel_t *channel, - ares_bool_t use_env, const char *host, - const ares_hosts_entry_t **entry); -ares_status_t ares__hosts_entry_to_hostent(const ares_hosts_entry_t *entry, - int family, - struct hostent **hostent); -ares_status_t ares__hosts_entry_to_addrinfo(const ares_hosts_entry_t *entry, - const char *name, int family, - unsigned short port, - ares_bool_t want_cnames, - struct ares_addrinfo *ai); +void ares_hosts_file_destroy(ares_hosts_file_t *hf); +ares_status_t ares_hosts_search_ipaddr(ares_channel_t *channel, + ares_bool_t use_env, const char *ipaddr, + const ares_hosts_entry_t **entry); +ares_status_t ares_hosts_search_host(ares_channel_t *channel, + ares_bool_t use_env, const char *host, + const ares_hosts_entry_t **entry); +ares_status_t ares_hosts_entry_to_hostent(const ares_hosts_entry_t *entry, + int family, struct hostent **hostent); +ares_status_t ares_hosts_entry_to_addrinfo(const ares_hosts_entry_t *entry, + const char *name, int family, + unsigned short port, + ares_bool_t want_cnames, + struct ares_addrinfo *ai); /* Same as ares_query_dnsrec() except does not take a channel lock. Use this * if a channel lock is already held */ @@ -674,9 +494,17 @@ ares_status_t ares_query_nolock(ares_channel_t *channel, const char *name, ares_callback_dnsrec callback, void *arg, unsigned short *qid); -/* Same as ares_send_dnsrec() except does not take a channel lock. Use this - * if a channel lock is already held */ -ares_status_t ares_send_nolock(ares_channel_t *channel, +/*! Flags controlling behavior for ares_send_nolock() */ +typedef enum { + ARES_SEND_FLAG_NOCACHE = 1 << 0, /*!< Do not query the cache */ + ARES_SEND_FLAG_NORETRY = 1 << 1 /*!< Do not retry this query on error */ +} ares_send_flags_t; + +/* Similar to ares_send_dnsrec() except does not take a channel lock, allows + * specifying a particular server to use, and also flags controlling behavior. + */ +ares_status_t ares_send_nolock(ares_channel_t *channel, ares_server_t *server, + ares_send_flags_t flags, const ares_dns_record_t *dnsrec, ares_callback_dnsrec callback, void *arg, unsigned short *qid); @@ -691,7 +519,7 @@ void ares_gethostbyaddr_nolock(ares_channel_t *channel, const void *addr, * offset within the buffer. * * It is assumed that either a const buffer is being used, or before - * the message processing was started that ares__buf_reclaim() was called. + * the message processing was started that ares_buf_reclaim() was called. * * \param[in] buf Initialized buffer object * \param[out] name Pointer passed by reference to be filled in with @@ -701,8 +529,8 @@ void ares_gethostbyaddr_nolock(ares_channel_t *channel, const void *addr, * a valid hostname or will return error. * \return ARES_SUCCESS on success */ -ares_status_t ares__dns_name_parse(ares__buf_t *buf, char **name, - ares_bool_t is_hostname); +ares_status_t ares_dns_name_parse(ares_buf_t *buf, char **name, + ares_bool_t is_hostname); /*! Write the DNS name to the buffer in the DNS domain-name syntax as a * series of labels. The maximum domain name length is 255 characters with @@ -721,9 +549,9 @@ ares_status_t ares__dns_name_parse(ares__buf_t *buf, char **name, * \return ARES_SUCCESS on success, most likely ARES_EBADNAME if the name is * bad. */ -ares_status_t ares__dns_name_write(ares__buf_t *buf, ares__llist_t **list, - ares_bool_t validate_hostname, - const char *name); +ares_status_t ares_dns_name_write(ares_buf_t *buf, ares_llist_t **list, + ares_bool_t validate_hostname, + const char *name); /*! Check if the queue is empty, if so, wake any waiters. This is only * effective if built with threading support. @@ -734,35 +562,20 @@ ares_status_t ares__dns_name_write(ares__buf_t *buf, ares__llist_t **list, */ void ares_queue_notify_empty(ares_channel_t *channel); - -#define SOCK_STATE_CALLBACK(c, s, r, w) \ - do { \ - if ((c)->sock_state_cb) { \ - (c)->sock_state_cb((c)->sock_state_cb_data, (s), (r), (w)); \ - } \ - } while (0) - -#define ARES_CONFIG_CHECK(x) \ - (x && x->lookups && ares__slist_len(x->servers) > 0 && x->timeout > 0 && \ +#define ARES_CONFIG_CHECK(x) \ + (x && x->lookups && ares_slist_len(x->servers) > 0 && x->timeout > 0 && \ x->tries > 0) -ares_bool_t ares__subnet_match(const struct ares_addr *addr, - const struct ares_addr *subnet, - unsigned char netmask); -ares_bool_t ares__addr_is_linklocal(const struct ares_addr *addr); - -ares_bool_t ares__is_64bit(void); -size_t ares__round_up_pow2(size_t n); -size_t ares__log2(size_t n); -size_t ares__pow(size_t x, size_t y); -size_t ares__count_digits(size_t n); -size_t ares__count_hexdigits(size_t n); -unsigned char ares__count_bits_u8(unsigned char x); -void ares__qcache_destroy(ares__qcache_t *cache); -ares_status_t ares__qcache_create(ares_rand_state *rand_state, - unsigned int max_ttl, - ares__qcache_t **cache_out); -void ares__qcache_flush(ares__qcache_t *cache); +ares_bool_t ares_subnet_match(const struct ares_addr *addr, + const struct ares_addr *subnet, + unsigned char netmask); +ares_bool_t ares_addr_is_linklocal(const struct ares_addr *addr); + +void ares_qcache_destroy(ares_qcache_t *cache); +ares_status_t ares_qcache_create(ares_rand_state *rand_state, + unsigned int max_ttl, + ares_qcache_t **cache_out); +void ares_qcache_flush(ares_qcache_t *cache); ares_status_t ares_qcache_insert(ares_channel_t *channel, const ares_timeval_t *now, const ares_query_t *query, @@ -784,10 +597,10 @@ ares_status_t ares_cookie_validate(ares_query_t *query, ares_conn_t *conn, const ares_timeval_t *now); -ares_status_t ares__channel_threading_init(ares_channel_t *channel); -void ares__channel_threading_destroy(ares_channel_t *channel); -void ares__channel_lock(const ares_channel_t *channel); -void ares__channel_unlock(const ares_channel_t *channel); +ares_status_t ares_channel_threading_init(ares_channel_t *channel); +void ares_channel_threading_destroy(ares_channel_t *channel); +void ares_channel_lock(const ares_channel_t *channel); +void ares_channel_unlock(const ares_channel_t *channel); struct ares_event_thread; typedef struct ares_event_thread ares_event_thread_t; diff --git a/deps/cares/src/lib/ares_process.c b/deps/cares/src/lib/ares_process.c index f05f67d8f2b176..62a6ae1ddaa46e 100644 --- a/deps/cares/src/lib/ares_process.c +++ b/deps/cares/src/lib/ares_process.c @@ -46,32 +46,30 @@ static void timeadd(ares_timeval_t *now, size_t millisecs); -static void write_tcp_data(ares_channel_t *channel, fd_set *write_fds, - ares_socket_t write_fd); -static void read_packets(ares_channel_t *channel, fd_set *read_fds, - ares_socket_t read_fd, const ares_timeval_t *now); -static void process_timeouts(ares_channel_t *channel, +static ares_status_t process_write(ares_channel_t *channel, + ares_socket_t write_fd); +static ares_status_t process_read(ares_channel_t *channel, + ares_socket_t read_fd, + const ares_timeval_t *now); +static ares_status_t process_timeouts(ares_channel_t *channel, const ares_timeval_t *now); static ares_status_t process_answer(ares_channel_t *channel, const unsigned char *abuf, size_t alen, - ares_conn_t *conn, ares_bool_t tcp, + ares_conn_t *conn, const ares_timeval_t *now); static void handle_conn_error(ares_conn_t *conn, ares_bool_t critical_failure, ares_status_t failure_status); - static ares_bool_t same_questions(const ares_query_t *query, const ares_dns_record_t *arec); -static ares_bool_t same_address(const struct sockaddr *sa, - const struct ares_addr *aa); static void end_query(ares_channel_t *channel, ares_server_t *server, ares_query_t *query, ares_status_t status, const ares_dns_record_t *dnsrec); -static void ares__query_disassociate_from_conn(ares_query_t *query) +static void ares_query_remove_from_conn(ares_query_t *query) { /* If its not part of a connection, it can't be tracked for timeouts either */ - ares__slist_node_destroy(query->node_queries_by_timeout); - ares__llist_node_destroy(query->node_queries_to_conn); + ares_slist_node_destroy(query->node_queries_by_timeout); + ares_llist_node_destroy(query->node_queries_to_conn); query->node_queries_by_timeout = NULL; query->node_queries_to_conn = NULL; query->conn = NULL; @@ -82,7 +80,7 @@ static void invoke_server_state_cb(const ares_server_t *server, ares_bool_t success, int flags) { const ares_channel_t *channel = server->channel; - ares__buf_t *buf; + ares_buf_t *buf; ares_status_t status; char *server_string; @@ -90,18 +88,18 @@ static void invoke_server_state_cb(const ares_server_t *server, return; } - buf = ares__buf_create(); + buf = ares_buf_create(); if (buf == NULL) { return; /* LCOV_EXCL_LINE: OutOfMemory */ } status = ares_get_server_addr(server, buf); if (status != ARES_SUCCESS) { - ares__buf_destroy(buf); /* LCOV_EXCL_LINE: OutOfMemory */ - return; /* LCOV_EXCL_LINE: OutOfMemory */ + ares_buf_destroy(buf); /* LCOV_EXCL_LINE: OutOfMemory */ + return; /* LCOV_EXCL_LINE: OutOfMemory */ } - server_string = ares__buf_finish_str(buf, NULL); + server_string = ares_buf_finish_str(buf, NULL); buf = NULL; if (server_string == NULL) { return; /* LCOV_EXCL_LINE: OutOfMemory */ @@ -115,19 +113,19 @@ static void invoke_server_state_cb(const ares_server_t *server, static void server_increment_failures(ares_server_t *server, ares_bool_t used_tcp) { - ares__slist_node_t *node; + ares_slist_node_t *node; const ares_channel_t *channel = server->channel; ares_timeval_t next_retry_time; - node = ares__slist_node_find(channel->servers, server); + node = ares_slist_node_find(channel->servers, server); if (node == NULL) { return; /* LCOV_EXCL_LINE: DefensiveCoding */ } server->consec_failures++; - ares__slist_node_reinsert(node); + ares_slist_node_reinsert(node); - ares__tvnow(&next_retry_time); + ares_tvnow(&next_retry_time); timeadd(&next_retry_time, channel->server_retry_delay); server->next_retry_time = next_retry_time; @@ -138,17 +136,17 @@ static void server_increment_failures(ares_server_t *server, static void server_set_good(ares_server_t *server, ares_bool_t used_tcp) { - ares__slist_node_t *node; + ares_slist_node_t *node; const ares_channel_t *channel = server->channel; - node = ares__slist_node_find(channel->servers, server); + node = ares_slist_node_find(channel->servers, server); if (node == NULL) { return; /* LCOV_EXCL_LINE: DefensiveCoding */ } if (server->consec_failures > 0) { server->consec_failures = 0; - ares__slist_node_reinsert(node); + ares_slist_node_reinsert(node); } server->next_retry_time.sec = 0; @@ -160,8 +158,8 @@ static void server_set_good(ares_server_t *server, ares_bool_t used_tcp) } /* return true if now is exactly check time or later */ -ares_bool_t ares__timedout(const ares_timeval_t *now, - const ares_timeval_t *check) +ares_bool_t ares_timedout(const ares_timeval_t *now, + const ares_timeval_t *check) { ares_int64_t secs = (now->sec - check->sec); @@ -190,380 +188,422 @@ static void timeadd(ares_timeval_t *now, size_t millisecs) } } -/* - * generic process function - */ -static void processfds(ares_channel_t *channel, fd_set *read_fds, - ares_socket_t read_fd, fd_set *write_fds, - ares_socket_t write_fd) +static ares_status_t ares_process_fds_nolock(ares_channel_t *channel, + const ares_fd_events_t *events, + size_t nevents, unsigned int flags) { ares_timeval_t now; + size_t i; + ares_status_t status = ARES_SUCCESS; - if (channel == NULL) { - return; /* LCOV_EXCL_LINE: DefensiveCoding */ + if (channel == NULL || (events == NULL && nevents != 0)) { + return ARES_EFORMERR; /* LCOV_EXCL_LINE: DefensiveCoding */ } - ares__channel_lock(channel); + ares_tvnow(&now); + + /* Process write events */ + for (i = 0; i < nevents; i++) { + if (events[i].fd == ARES_SOCKET_BAD || + !(events[i].events & ARES_FD_EVENT_WRITE)) { + continue; + } + status = process_write(channel, events[i].fd); + /* We only care about ENOMEM, anything else is handled via connection + * retries, etc */ + if (status == ARES_ENOMEM) { + goto done; + } + } - ares__tvnow(&now); - read_packets(channel, read_fds, read_fd, &now); - process_timeouts(channel, &now); - /* Write last as the other 2 operations might have triggered writes */ - write_tcp_data(channel, write_fds, write_fd); + /* Process read events */ + for (i = 0; i < nevents; i++) { + if (events[i].fd == ARES_SOCKET_BAD || + !(events[i].events & ARES_FD_EVENT_READ)) { + continue; + } + status = process_read(channel, events[i].fd, &now); + if (status == ARES_ENOMEM) { + goto done; + } + } + + if (!(flags & ARES_PROCESS_FLAG_SKIP_NON_FD)) { + ares_check_cleanup_conns(channel); + status = process_timeouts(channel, &now); + if (status == ARES_ENOMEM) { + goto done; + } + } - /* See if any connections should be cleaned up */ - ares__check_cleanup_conns(channel); - ares__channel_unlock(channel); +done: + if (status == ARES_ENOMEM) { + return ARES_ENOMEM; + } + return ARES_SUCCESS; } -/* Something interesting happened on the wire, or there was a timeout. - * See what's up and respond accordingly. - */ -void ares_process(ares_channel_t *channel, fd_set *read_fds, fd_set *write_fds) +ares_status_t ares_process_fds(ares_channel_t *channel, + const ares_fd_events_t *events, size_t nevents, + unsigned int flags) { - processfds(channel, read_fds, ARES_SOCKET_BAD, write_fds, ARES_SOCKET_BAD); + ares_status_t status; + + if (channel == NULL) { + return ARES_EFORMERR; + } + + ares_channel_lock(channel); + status = ares_process_fds_nolock(channel, events, nevents, flags); + ares_channel_unlock(channel); + return status; } -/* Something interesting happened on the wire, or there was a timeout. - * See what's up and respond accordingly. - */ -void ares_process_fd(ares_channel_t *channel, - ares_socket_t read_fd, /* use ARES_SOCKET_BAD or valid - file descriptors */ - ares_socket_t write_fd) +void ares_process_fd(ares_channel_t *channel, ares_socket_t read_fd, + ares_socket_t write_fd) { - processfds(channel, NULL, read_fd, NULL, write_fd); + ares_fd_events_t events[2]; + size_t nevents = 0; + + memset(events, 0, sizeof(events)); + + if (read_fd != ARES_SOCKET_BAD) { + nevents++; + events[nevents - 1].fd = read_fd; + events[nevents - 1].events |= ARES_FD_EVENT_READ; + } + + if (write_fd != ARES_SOCKET_BAD) { + if (write_fd != read_fd) { + nevents++; + } + events[nevents - 1].fd = write_fd; + events[nevents - 1].events |= ARES_FD_EVENT_WRITE; + } + + ares_process_fds(channel, events, nevents, ARES_PROCESS_FLAG_NONE); } -/* If any TCP sockets select true for writing, write out queued data - * we have for them. - */ -static void write_tcp_data(ares_channel_t *channel, fd_set *write_fds, - ares_socket_t write_fd) +static ares_socket_t *channel_socket_list(const ares_channel_t *channel, + size_t *num) { - ares__slist_node_t *node; + ares_slist_node_t *snode; + ares_array_t *arr = ares_array_create(sizeof(ares_socket_t), NULL); - if (!write_fds && (write_fd == ARES_SOCKET_BAD)) { - /* no possible action */ - return; + *num = 0; + + if (arr == NULL) { + return NULL; /* LCOV_EXCL_LINE: OutOfMemory */ } - for (node = ares__slist_node_first(channel->servers); node != NULL; - node = ares__slist_node_next(node)) { - ares_server_t *server = ares__slist_node_val(node); - const unsigned char *data; - size_t data_len; - ares_ssize_t count; + for (snode = ares_slist_node_first(channel->servers); snode != NULL; + snode = ares_slist_node_next(snode)) { + ares_server_t *server = ares_slist_node_val(snode); + ares_llist_node_t *node; - /* Make sure server has data to send and is selected in write_fds or - write_fd. */ - if (ares__buf_len(server->tcp_send) == 0 || server->tcp_conn == NULL) { - continue; - } + for (node = ares_llist_node_first(server->connections); node != NULL; + node = ares_llist_node_next(node)) { + const ares_conn_t *conn = ares_llist_node_val(node); + ares_socket_t *sptr; + ares_status_t status; - if (write_fds) { - if (!FD_ISSET(server->tcp_conn->fd, write_fds)) { - continue; - } - } else { - if (server->tcp_conn->fd != write_fd) { + if (conn->fd == ARES_SOCKET_BAD) { continue; } - } - if (write_fds) { - /* If there's an error and we close this socket, then open - * another with the same fd to talk to another server, then we - * don't want to think that it was the new socket that was - * ready. This is not disastrous, but is likely to result in - * extra system calls and confusion. */ - FD_CLR(server->tcp_conn->fd, write_fds); - } - - data = ares__buf_peek(server->tcp_send, &data_len); - count = ares__conn_write(server->tcp_conn, data, data_len); - if (count <= 0) { - if (!ares__socket_try_again(SOCKERRNO)) { - handle_conn_error(server->tcp_conn, ARES_TRUE, ARES_ECONNREFUSED); + status = ares_array_insert_last((void **)&sptr, arr); + if (status != ARES_SUCCESS) { + ares_array_destroy(arr); /* LCOV_EXCL_LINE: OutOfMemory */ + return NULL; /* LCOV_EXCL_LINE: OutOfMemory */ } - continue; - } - - /* Strip data written from the buffer */ - ares__buf_consume(server->tcp_send, (size_t)count); - - /* Notify state callback all data is written */ - if (ares__buf_len(server->tcp_send) == 0) { - SOCK_STATE_CALLBACK(channel, server->tcp_conn->fd, 1, 0); + *sptr = conn->fd; } } + + return ares_array_finish(arr, num); } -/* If any TCP socket selects true for reading, read some data, - * allocate a buffer if we finish reading the length word, and process - * a packet if we finish reading one. +/* Something interesting happened on the wire, or there was a timeout. + * See what's up and respond accordingly. */ -static void read_tcp_data(ares_channel_t *channel, ares_conn_t *conn, - const ares_timeval_t *now) +void ares_process(ares_channel_t *channel, fd_set *read_fds, fd_set *write_fds) { - ares_ssize_t count; - ares_server_t *server = conn->server; - - /* Fetch buffer to store data we are reading */ - size_t ptr_len = 65535; - unsigned char *ptr; - - ptr = ares__buf_append_start(server->tcp_parser, &ptr_len); - - if (ptr == NULL) { - handle_conn_error(conn, ARES_FALSE /* not critical to connection */, - ARES_SUCCESS); - return; /* bail out on malloc failure. TODO: make this - function return error codes */ - } + size_t i; + size_t num_sockets; + ares_socket_t *socketlist; + ares_fd_events_t *events = NULL; + size_t nevents = 0; - /* Read from socket */ - count = ares__socket_recv(channel, conn->fd, ptr, ptr_len); - if (count <= 0) { - ares__buf_append_finish(server->tcp_parser, 0); - if (!(count == -1 && ares__socket_try_again(SOCKERRNO))) { - handle_conn_error(conn, ARES_TRUE, ARES_ECONNREFUSED); - } + if (channel == NULL) { return; } - /* Record amount of data read */ - ares__buf_append_finish(server->tcp_parser, (size_t)count); - - /* Process all queued answers */ - while (1) { - unsigned short dns_len = 0; - const unsigned char *data = NULL; - size_t data_len = 0; - ares_status_t status; + ares_channel_lock(channel); - /* Tag so we can roll back */ - ares__buf_tag(server->tcp_parser); + /* There is no good way to iterate across an fd_set, instead we must pull a + * list of all known fds, and iterate across that checking against the fd_set. + */ + socketlist = channel_socket_list(channel, &num_sockets); - /* Read length indicator */ - if (ares__buf_fetch_be16(server->tcp_parser, &dns_len) != ARES_SUCCESS) { - ares__buf_tag_rollback(server->tcp_parser); - break; + /* Lets create an events array, maximum number is the number of sockets in + * the list, so we'll use that and just track entries with nevents */ + if (num_sockets) { + events = ares_malloc_zero(sizeof(*events) * num_sockets); + if (events == NULL) { + goto done; } + } - /* Not enough data for a full response yet */ - if (ares__buf_consume(server->tcp_parser, dns_len) != ARES_SUCCESS) { - ares__buf_tag_rollback(server->tcp_parser); - break; + for (i = 0; i < num_sockets; i++) { + ares_bool_t had_read = ARES_FALSE; + if (read_fds && FD_ISSET(socketlist[i], read_fds)) { + nevents++; + events[nevents - 1].fd = socketlist[i]; + events[nevents - 1].events |= ARES_FD_EVENT_READ; + had_read = ARES_TRUE; } - - /* Can't fail except for misuse */ - data = ares__buf_tag_fetch(server->tcp_parser, &data_len); - if (data == NULL || data_len < 2) { - ares__buf_tag_clear(server->tcp_parser); - break; + if (write_fds && FD_ISSET(socketlist[i], write_fds)) { + if (!had_read) { + nevents++; + } + events[nevents - 1].fd = socketlist[i]; + events[nevents - 1].events |= ARES_FD_EVENT_WRITE; } + } - /* Strip off 2 bytes length */ - data += 2; - data_len -= 2; +done: + ares_process_fds_nolock(channel, events, nevents, ARES_PROCESS_FLAG_NONE); + ares_free(events); + ares_free(socketlist); + ares_channel_unlock(channel); +} - /* We finished reading this answer; process it */ - status = process_answer(channel, data, data_len, conn, ARES_TRUE, now); - if (status != ARES_SUCCESS) { - handle_conn_error(conn, ARES_TRUE, status); - return; - } +static ares_status_t process_write(ares_channel_t *channel, + ares_socket_t write_fd) +{ + ares_conn_t *conn = ares_conn_from_fd(channel, write_fd); + ares_status_t status; - /* Since we processed the answer, clear the tag so space can be reclaimed */ - ares__buf_tag_clear(server->tcp_parser); + if (conn == NULL) { + return ARES_SUCCESS; + } + + /* Mark as connected if we got here and TFO Initial not set */ + if (!(conn->flags & ARES_CONN_FLAG_TFO_INITIAL)) { + conn->state_flags |= ARES_CONN_STATE_CONNECTED; + } + + status = ares_conn_flush(conn); + if (status != ARES_SUCCESS) { + handle_conn_error(conn, ARES_TRUE, status); } + return status; } -static ares_socket_t *channel_socket_list(const ares_channel_t *channel, - size_t *num) +void ares_process_pending_write(ares_channel_t *channel) { - ares__slist_node_t *snode; - ares__array_t *arr = ares__array_create(sizeof(ares_socket_t), NULL); + ares_slist_node_t *node; - *num = 0; + if (channel == NULL) { + return; + } - if (arr == NULL) { - return NULL; /* LCOV_EXCL_LINE: OutOfMemory */ + ares_channel_lock(channel); + if (!channel->notify_pending_write) { + ares_channel_unlock(channel); + return; } - for (snode = ares__slist_node_first(channel->servers); snode != NULL; - snode = ares__slist_node_next(snode)) { - ares_server_t *server = ares__slist_node_val(snode); - ares__llist_node_t *node; + /* Set as untriggerd before calling into ares_conn_flush(), this is + * because its possible ares_conn_flush() might cause additional data to + * be enqueued if there is some form of exception so it will need to recurse. + */ + channel->notify_pending_write = ARES_FALSE; - for (node = ares__llist_node_first(server->connections); node != NULL; - node = ares__llist_node_next(node)) { - const ares_conn_t *conn = ares__llist_node_val(node); - ares_socket_t *sptr; - ares_status_t status; + for (node = ares_slist_node_first(channel->servers); node != NULL; + node = ares_slist_node_next(node)) { + ares_server_t *server = ares_slist_node_val(node); + ares_conn_t *conn = server->tcp_conn; + ares_status_t status; - if (conn->fd == ARES_SOCKET_BAD) { - continue; - } + if (conn == NULL) { + continue; + } - status = ares__array_insert_last((void **)&sptr, arr); - if (status != ARES_SUCCESS) { - ares__array_destroy(arr); /* LCOV_EXCL_LINE: OutOfMemory */ - return NULL; /* LCOV_EXCL_LINE: OutOfMemory */ - } - *sptr = conn->fd; + /* Enqueue any pending data if there is any */ + status = ares_conn_flush(conn); + if (status != ARES_SUCCESS) { + handle_conn_error(conn, ARES_TRUE, status); } } - return ares__array_finish(arr, num); + ares_channel_unlock(channel); } -/* If any UDP sockets select true for reading, process them. */ -static void read_udp_packets_fd(ares_channel_t *channel, ares_conn_t *conn, - const ares_timeval_t *now) +static ares_status_t read_conn_packets(ares_conn_t *conn) { - ares_ssize_t read_len; - unsigned char buf[MAXENDSSZ + 1]; + ares_bool_t read_again; + ares_conn_err_t err; + const ares_channel_t *channel = conn->server->channel; -#ifdef HAVE_RECVFROM - ares_socklen_t fromlen; + do { + size_t count; + size_t len = 65535; + unsigned char *ptr; + size_t start_len = ares_buf_len(conn->in_buf); + + /* If UDP, lets write out a placeholder for the length indicator */ + if (!(conn->flags & ARES_CONN_FLAG_TCP) && + ares_buf_append_be16(conn->in_buf, 0) != ARES_SUCCESS) { + handle_conn_error(conn, ARES_FALSE /* not critical to connection */, + ARES_SUCCESS); + return ARES_ENOMEM; + } - union { - struct sockaddr sa; - struct sockaddr_in sa4; - struct sockaddr_in6 sa6; - } from; + /* Get a buffer of sufficient size */ + ptr = ares_buf_append_start(conn->in_buf, &len); - memset(&from, 0, sizeof(from)); -#endif - - /* To reduce event loop overhead, read and process as many - * packets as we can. */ - do { - if (conn->fd == ARES_SOCKET_BAD) { - read_len = -1; - } else { - if (conn->server->addr.family == AF_INET) { - fromlen = sizeof(from.sa4); - } else { - fromlen = sizeof(from.sa6); - } - read_len = ares__socket_recvfrom(channel, conn->fd, (void *)buf, - sizeof(buf), 0, &from.sa, &fromlen); + if (ptr == NULL) { + handle_conn_error(conn, ARES_FALSE /* not critical to connection */, + ARES_SUCCESS); + return ARES_ENOMEM; } - if (read_len == 0) { - /* UDP is connectionless, so result code of 0 is a 0-length UDP - * packet, and not an indication the connection is closed like on - * tcp */ - continue; - } else if (read_len < 0) { - if (ares__socket_try_again(SOCKERRNO)) { - break; + /* Read from socket */ + err = ares_conn_read(conn, ptr, len, &count); + + if (err != ARES_CONN_ERR_SUCCESS) { + ares_buf_append_finish(conn->in_buf, 0); + if (!(conn->flags & ARES_CONN_FLAG_TCP)) { + ares_buf_set_length(conn->in_buf, start_len); } + break; + } - handle_conn_error(conn, ARES_TRUE, ARES_ECONNREFUSED); - return; -#ifdef HAVE_RECVFROM - } else if (!same_address(&from.sa, &conn->server->addr)) { - /* The address the response comes from does not match the address we - * sent the request to. Someone may be attempting to perform a cache - * poisoning attack. */ - continue; -#endif + /* Record amount of data read */ + ares_buf_append_finish(conn->in_buf, count); - } else { - process_answer(channel, buf, (size_t)read_len, conn, ARES_FALSE, now); + /* Only loop if sockets support non-blocking operation, and are using UDP + * or are using TCP and read the maximum buffer size */ + read_again = ARES_FALSE; + if (channel->sock_funcs.flags & ARES_SOCKFUNC_FLAG_NONBLOCKING && + (!(conn->flags & ARES_CONN_FLAG_TCP) || count == len)) { + read_again = ARES_TRUE; } + /* If UDP, overwrite length */ + if (!(conn->flags & ARES_CONN_FLAG_TCP)) { + len = ares_buf_len(conn->in_buf); + ares_buf_set_length(conn->in_buf, start_len); + ares_buf_append_be16(conn->in_buf, (unsigned short)count); + ares_buf_set_length(conn->in_buf, len); + } /* Try to read again only if *we* set up the socket, otherwise it may be * a blocking socket and would cause recvfrom to hang. */ - } while (read_len >= 0 && channel->sock_funcs == NULL); -} + } while (read_again); -static void read_packets(ares_channel_t *channel, fd_set *read_fds, - ares_socket_t read_fd, const ares_timeval_t *now) -{ - size_t i; - ares_socket_t *socketlist = NULL; - size_t num_sockets = 0; - ares_conn_t *conn = NULL; - ares__llist_node_t *node = NULL; - - if (!read_fds && (read_fd == ARES_SOCKET_BAD)) { - /* no possible action */ - return; + if (err != ARES_CONN_ERR_SUCCESS && err != ARES_CONN_ERR_WOULDBLOCK) { + handle_conn_error(conn, ARES_TRUE, ARES_ECONNREFUSED); + return ARES_ECONNREFUSED; } - /* Single socket specified */ - if (!read_fds) { - node = ares__htable_asvp_get_direct(channel->connnode_by_socket, read_fd); - if (node == NULL) { - return; - } + return ARES_SUCCESS; +} - conn = ares__llist_node_val(node); +static ares_status_t read_answers(ares_conn_t *conn, const ares_timeval_t *now) +{ + ares_status_t status; + ares_channel_t *channel = conn->server->channel; - if (conn->flags & ARES_CONN_FLAG_TCP) { - read_tcp_data(channel, conn, now); - } else { - read_udp_packets_fd(channel, conn, now); - } + /* Process all queued answers */ + while (1) { + unsigned short dns_len = 0; + const unsigned char *data = NULL; + size_t data_len = 0; - return; - } + /* Tag so we can roll back */ + ares_buf_tag(conn->in_buf); - /* There is no good way to iterate across an fd_set, instead we must pull a - * list of all known fds, and iterate across that checking against the fd_set. - */ - socketlist = channel_socket_list(channel, &num_sockets); + /* Read length indicator */ + status = ares_buf_fetch_be16(conn->in_buf, &dns_len); + if (status != ARES_SUCCESS) { + ares_buf_tag_rollback(conn->in_buf); + break; + } - for (i = 0; i < num_sockets; i++) { - if (!FD_ISSET(socketlist[i], read_fds)) { - continue; + /* Not enough data for a full response yet */ + status = ares_buf_consume(conn->in_buf, dns_len); + if (status != ARES_SUCCESS) { + ares_buf_tag_rollback(conn->in_buf); + break; } - /* If there's an error and we close this socket, then open - * another with the same fd to talk to another server, then we - * don't want to think that it was the new socket that was - * ready. This is not disastrous, but is likely to result in - * extra system calls and confusion. */ - FD_CLR(socketlist[i], read_fds); - - node = - ares__htable_asvp_get_direct(channel->connnode_by_socket, socketlist[i]); - if (node == NULL) { - return; + /* Can't fail except for misuse */ + data = ares_buf_tag_fetch(conn->in_buf, &data_len); + if (data == NULL || data_len < 2) { + ares_buf_tag_clear(conn->in_buf); + break; } - conn = ares__llist_node_val(node); + /* Strip off 2 bytes length */ + data += 2; + data_len -= 2; - if (conn->flags & ARES_CONN_FLAG_TCP) { - read_tcp_data(channel, conn, now); - } else { - read_udp_packets_fd(channel, conn, now); + /* We finished reading this answer; process it */ + status = process_answer(channel, data, data_len, conn, now); + if (status != ARES_SUCCESS) { + handle_conn_error(conn, ARES_TRUE, status); + return status; } + + /* Since we processed the answer, clear the tag so space can be reclaimed */ + ares_buf_tag_clear(conn->in_buf); } + return status; +} - ares_free(socketlist); +static ares_status_t process_read(ares_channel_t *channel, + ares_socket_t read_fd, + const ares_timeval_t *now) +{ + ares_conn_t *conn = ares_conn_from_fd(channel, read_fd); + ares_status_t status; + + if (conn == NULL) { + return ARES_SUCCESS; + } + + /* TODO: There might be a potential issue here where there was a read that + * read some data, then looped and read again and got a disconnect. + * Right now, that would cause a resend instead of processing the data + * we have. This is fairly unlikely to occur due to only looping if + * a full buffer of 65535 bytes was read. */ + status = read_conn_packets(conn); + + if (status != ARES_SUCCESS) { + return status; + } + + return read_answers(conn, now); } /* If any queries have timed out, note the timeout and move them on. */ -static void process_timeouts(ares_channel_t *channel, const ares_timeval_t *now) +static ares_status_t process_timeouts(ares_channel_t *channel, + const ares_timeval_t *now) { - ares__slist_node_t *node; + ares_slist_node_t *node; + ares_status_t status = ARES_SUCCESS; /* Just keep popping off the first as this list will re-sort as things come * and go. We don't want to try to rely on 'next' as some operation might * cause a cleanup of that pointer and would become invalid */ - while ((node = ares__slist_node_first(channel->queries_by_timeout)) != NULL) { - ares_query_t *query = ares__slist_node_val(node); + while ((node = ares_slist_node_first(channel->queries_by_timeout)) != NULL) { + ares_query_t *query = ares_slist_node_val(node); ares_conn_t *conn; /* Since this is sorted, as soon as we hit a query that isn't timed out, * break */ - if (!ares__timedout(now, &query->timeout)) { + if (!ares_timedout(now, &query->timeout)) { break; } @@ -571,8 +611,16 @@ static void process_timeouts(ares_channel_t *channel, const ares_timeval_t *now) conn = query->conn; server_increment_failures(conn->server, query->using_tcp); - ares__requeue_query(query, now, ARES_ETIMEOUT, ARES_TRUE, NULL); + status = ares_requeue_query(query, now, ARES_ETIMEOUT, ARES_TRUE, NULL); + if (status == ARES_ENOMEM) { + goto done; + } } +done: + if (status == ARES_ENOMEM) { + return ARES_ENOMEM; + } + return ARES_SUCCESS; } static ares_status_t rewrite_without_edns(ares_query_t *query) @@ -607,17 +655,22 @@ static ares_status_t rewrite_without_edns(ares_query_t *query) * the connection to be terminated after this call. */ static ares_status_t process_answer(ares_channel_t *channel, const unsigned char *abuf, size_t alen, - ares_conn_t *conn, ares_bool_t tcp, + ares_conn_t *conn, const ares_timeval_t *now) { ares_query_t *query; - /* Cache these as once ares__send_query() gets called, it may end up + /* Cache these as once ares_send_query() gets called, it may end up * invalidating the connection all-together */ ares_server_t *server = conn->server; ares_dns_record_t *rdnsrec = NULL; ares_status_t status; ares_bool_t is_cached = ARES_FALSE; + /* UDP can have 0-byte messages, drop them to the ground */ + if (alen == 0) { + return ARES_SUCCESS; + } + /* Parse the response */ status = ares_dns_parse(abuf, alen, 0, &rdnsrec); if (status != ARES_SUCCESS) { @@ -629,8 +682,8 @@ static ares_status_t process_answer(ares_channel_t *channel, /* Find the query corresponding to this packet. The queries are * hashed/bucketed by query id, so this lookup should be quick. */ - query = ares__htable_szvp_get_direct(channel->queries_by_qid, - ares_dns_record_get_id(rdnsrec)); + query = ares_htable_szvp_get_direct(channel->queries_by_qid, + ares_dns_record_get_id(rdnsrec)); if (!query) { /* We may have stopped listening for this query, that's ok */ status = ARES_SUCCESS; @@ -657,7 +710,7 @@ static ares_status_t process_answer(ares_channel_t *channel, * remove it from the connection's queue so we can possibly invalidate the * connection. Delay cleaning up the connection though as we may enqueue * something new. */ - ares__llist_node_destroy(query->node_queries_to_conn); + ares_llist_node_destroy(query->node_queries_to_conn); query->node_queries_to_conn = NULL; /* If we use EDNS and server answers with FORMERR without an OPT RR, the @@ -672,7 +725,8 @@ static ares_status_t process_answer(ares_channel_t *channel, goto cleanup; } - ares__send_query(query, now); + /* Send to same server */ + ares_send_query(server, query, now); status = ARES_SUCCESS; goto cleanup; } @@ -681,10 +735,11 @@ static ares_status_t process_answer(ares_channel_t *channel, * don't accept the packet, and switch the query to TCP if we hadn't * done so already. */ - if (ares_dns_record_get_flags(rdnsrec) & ARES_FLAG_TC && !tcp && + if (ares_dns_record_get_flags(rdnsrec) & ARES_FLAG_TC && + !(conn->flags & ARES_CONN_FLAG_TCP) && !(channel->flags & ARES_FLAG_IGNTC)) { query->using_tcp = ARES_TRUE; - ares__send_query(query, now); + ares_send_query(NULL, query, now); status = ARES_SUCCESS; /* Switched to TCP is ok */ goto cleanup; } @@ -711,7 +766,7 @@ static ares_status_t process_answer(ares_channel_t *channel, } server_increment_failures(server, query->using_tcp); - ares__requeue_query(query, now, status, ARES_TRUE, rdnsrec); + ares_requeue_query(query, now, status, ARES_TRUE, rdnsrec); /* Should any of these cause a connection termination? * Maybe SERVER_FAILURE? */ @@ -753,19 +808,18 @@ static void handle_conn_error(ares_conn_t *conn, ares_bool_t critical_failure, } /* This will requeue any connections automatically */ - ares__close_connection(conn, failure_status); + ares_close_connection(conn, failure_status); } -ares_status_t ares__requeue_query(ares_query_t *query, - const ares_timeval_t *now, - ares_status_t status, - ares_bool_t inc_try_count, - const ares_dns_record_t *dnsrec) +ares_status_t ares_requeue_query(ares_query_t *query, const ares_timeval_t *now, + ares_status_t status, + ares_bool_t inc_try_count, + const ares_dns_record_t *dnsrec) { - ares_channel_t *channel = query->channel; - size_t max_tries = ares__slist_len(channel->servers) * channel->tries; + ares_channel_t *channel = query->channel; + size_t max_tries = ares_slist_len(channel->servers) * channel->tries; - ares__query_disassociate_from_conn(query); + ares_query_remove_from_conn(query); if (status != ARES_SUCCESS) { query->error_status = status; @@ -776,7 +830,7 @@ ares_status_t ares__requeue_query(ares_query_t *query, } if (query->try_count < max_tries && !query->no_retries) { - return ares__send_query(query, now); + return ares_send_query(NULL, query, now); } /* If we are here, all attempts to perform query failed. */ @@ -788,32 +842,58 @@ ares_status_t ares__requeue_query(ares_query_t *query, return ARES_ETIMEOUT; } -/* Pick a random server from the list, we first get a random number in the - * range of the number of servers, then scan until we find that server in - * the list */ -static ares_server_t *ares__random_server(ares_channel_t *channel) +/*! Count the number of servers that share the same highest priority (lowest + * consecutive failures). Since they are sorted in priority order, we just + * stop when the consecutive failure count changes. Used for random selection + * of good servers. */ +static size_t count_highest_prio_servers(const ares_channel_t *channel) { - unsigned char c; - size_t cnt; - size_t idx; - ares__slist_node_t *node; - size_t num_servers = ares__slist_len(channel->servers); + ares_slist_node_t *node; + size_t cnt = 0; + size_t last_consec_failures = SIZE_MAX; + + for (node = ares_slist_node_first(channel->servers); node != NULL; + node = ares_slist_node_next(node)) { + const ares_server_t *server = ares_slist_node_val(node); + + if (last_consec_failures != SIZE_MAX && + last_consec_failures < server->consec_failures) { + break; + } + + last_consec_failures = server->consec_failures; + cnt++; + } + + return cnt; +} + +/* Pick a random *best* server from the list, we first get a random number in + * the range of the number of *best* servers, then scan until we find that + * server in the list */ +static ares_server_t *ares_random_server(ares_channel_t *channel) +{ + unsigned char c; + size_t cnt; + size_t idx; + ares_slist_node_t *node; + size_t num_servers = count_highest_prio_servers(channel); /* Silence coverity, not possible */ if (num_servers == 0) { return NULL; } - ares__rand_bytes(channel->rand_state, &c, 1); + ares_rand_bytes(channel->rand_state, &c, 1); cnt = c; idx = cnt % num_servers; cnt = 0; - for (node = ares__slist_node_first(channel->servers); node != NULL; - node = ares__slist_node_next(node)) { + for (node = ares_slist_node_first(channel->servers); node != NULL; + node = ares_slist_node_next(node)) { if (cnt == idx) { - return ares__slist_node_val(node); + return ares_slist_node_val(node); } cnt++; @@ -822,40 +902,32 @@ static ares_server_t *ares__random_server(ares_channel_t *channel) return NULL; } -/* Pick a server from the list with failover behavior. - * - * We default to using the first server in the sorted list of servers. That is - * the server with the lowest number of consecutive failures and then the - * highest priority server (by idx) if there is a draw. - * - * However, if a server temporarily goes down and hits some failures, then that - * server will never be retried until all other servers hit the same number of - * failures. This may prevent the server from being retried for a long time. - * - * To resolve this, with some probability we select a failed server to retry - * instead. - */ -static ares_server_t *ares__failover_server(ares_channel_t *channel) +static void server_probe_cb(void *arg, ares_status_t status, size_t timeouts, + const ares_dns_record_t *dnsrec) { - ares_server_t *first_server = ares__slist_first_val(channel->servers); - const ares_server_t *last_server = ares__slist_last_val(channel->servers); - unsigned short r; - - /* Defensive code against no servers being available on the channel. */ - if (first_server == NULL) { - return NULL; /* LCOV_EXCL_LINE: DefensiveCoding */ - } - - /* If no servers have failures, then prefer the first server in the list. */ - if (last_server != NULL && last_server->consec_failures == 0) { - return first_server; - } + (void)arg; + (void)status; + (void)timeouts; + (void)dnsrec; + /* Nothing to do, the logic internally will handle success/fail of this */ +} - /* If we are not configured with a server retry chance then return the first - * server. - */ - if (channel->server_retry_chance == 0) { - return first_server; +/* Determine if we should probe a downed server */ +static void ares_probe_failed_server(ares_channel_t *channel, + const ares_server_t *server, + const ares_query_t *query) +{ + const ares_server_t *last_server = ares_slist_last_val(channel->servers); + unsigned short r; + ares_timeval_t now; + ares_slist_node_t *node; + ares_server_t *probe_server = NULL; + + /* If no servers have failures, or we're not configured with a server retry + * chance, then nothing to probe */ + if ((last_server != NULL && last_server->consec_failures == 0) || + channel->server_retry_chance == 0) { + return; } /* Generate a random value to decide whether to retry a failed server. The @@ -863,36 +935,49 @@ static ares_server_t *ares__failover_server(ares_channel_t *channel) * precision of 1/2^B where B is the number of bits in the random value. * We use an unsigned short for the random value for increased precision. */ - ares__rand_bytes(channel->rand_state, (unsigned char *)&r, sizeof(r)); - if (r % channel->server_retry_chance == 0) { - /* Select a suitable failed server to retry. */ - ares_timeval_t now; - ares__slist_node_t *node; - - ares__tvnow(&now); - for (node = ares__slist_node_first(channel->servers); node != NULL; - node = ares__slist_node_next(node)) { - ares_server_t *node_val = ares__slist_node_val(node); - if (node_val != NULL && node_val->consec_failures > 0 && - ares__timedout(&now, &node_val->next_retry_time)) { - return node_val; - } + ares_rand_bytes(channel->rand_state, (unsigned char *)&r, sizeof(r)); + if (r % channel->server_retry_chance != 0) { + return; + } + + /* Select the first server with failures to retry that has passed the retry + * timeout and doesn't already have a pending probe */ + ares_tvnow(&now); + for (node = ares_slist_node_first(channel->servers); node != NULL; + node = ares_slist_node_next(node)) { + ares_server_t *node_val = ares_slist_node_val(node); + if (node_val != NULL && node_val->consec_failures > 0 && + !node_val->probe_pending && + ares_timedout(&now, &node_val->next_retry_time)) { + probe_server = node_val; + break; } } - /* If we have not returned yet, then return the first server. */ - return first_server; + /* Either nothing to probe or the query was enqueud to the same server + * we were going to probe. Do nothing. */ + if (probe_server == NULL || server == probe_server) { + return; + } + + /* Enqueue an identical query onto the specified server without honoring + * the cache or allowing retries. We want to make sure it only attempts to + * use the server in question */ + probe_server->probe_pending = ARES_TRUE; + ares_send_nolock(channel, probe_server, + ARES_SEND_FLAG_NOCACHE | ARES_SEND_FLAG_NORETRY, + query->query, server_probe_cb, NULL, NULL); } -static size_t ares__calc_query_timeout(const ares_query_t *query, - const ares_server_t *server, - const ares_timeval_t *now) +static size_t ares_calc_query_timeout(const ares_query_t *query, + const ares_server_t *server, + const ares_timeval_t *now) { const ares_channel_t *channel = query->channel; size_t timeout = ares_metrics_server_timeout(server, now); size_t timeplus = timeout; size_t rounds; - size_t num_servers = ares__slist_len(channel->servers); + size_t num_servers = ares_slist_len(channel->servers); if (num_servers == 0) { return 0; /* LCOV_EXCL_LINE: DefensiveCoding */ @@ -922,7 +1007,7 @@ static size_t ares__calc_query_timeout(const ares_query_t *query, unsigned short r; float delta_multiplier; - ares__rand_bytes(channel->rand_state, (unsigned char *)&r, sizeof(r)); + ares_rand_bytes(channel->rand_state, (unsigned char *)&r, sizeof(r)); delta_multiplier = ((float)r / USHRT_MAX) * 0.5f; timeplus -= (size_t)((float)timeplus * delta_multiplier); } @@ -936,24 +1021,24 @@ static size_t ares__calc_query_timeout(const ares_query_t *query, return timeplus; } -static ares_conn_t *ares__fetch_connection(const ares_channel_t *channel, - ares_server_t *server, - const ares_query_t *query) +static ares_conn_t *ares_fetch_connection(const ares_channel_t *channel, + ares_server_t *server, + const ares_query_t *query) { - ares__llist_node_t *node; - ares_conn_t *conn; + ares_llist_node_t *node; + ares_conn_t *conn; if (query->using_tcp) { return server->tcp_conn; } /* Fetch existing UDP connection */ - node = ares__llist_node_first(server->connections); + node = ares_llist_node_first(server->connections); if (node == NULL) { return NULL; } - conn = ares__llist_node_val(node); + conn = ares_llist_node_val(node); /* Not UDP, skip */ if (conn->flags & ARES_CONN_FLAG_TCP) { return NULL; @@ -968,13 +1053,10 @@ static ares_conn_t *ares__fetch_connection(const ares_channel_t *channel, return conn; } -static ares_status_t ares__conn_query_write(ares_conn_t *conn, - ares_query_t *query, - const ares_timeval_t *now) +static ares_status_t ares_conn_query_write(ares_conn_t *conn, + ares_query_t *query, + const ares_timeval_t *now) { - unsigned char *qbuf = NULL; - size_t qbuf_len = 0; - ares_ssize_t len; ares_server_t *server = conn->server; ares_channel_t *channel = server->channel; ares_status_t status; @@ -984,81 +1066,57 @@ static ares_status_t ares__conn_query_write(ares_conn_t *conn, return status; } - if (conn->flags & ARES_CONN_FLAG_TCP) { - size_t prior_len = ares__buf_len(server->tcp_send); - - status = ares_dns_write_buf_tcp(query->query, server->tcp_send); - if (status != ARES_SUCCESS) { - return status; - } - - if (conn->flags & ARES_CONN_FLAG_TFO_INITIAL) { - /* When using TFO, we need to put it on the wire immediately. */ - size_t data_len; - const unsigned char *data = NULL; - - data = ares__buf_peek(server->tcp_send, &data_len); - len = ares__conn_write(conn, data, data_len); - if (len <= 0) { - if (ares__socket_try_again(SOCKERRNO)) { - /* This means we must not have qualified for TFO, keep the data - * buffered, wait on write signal. */ - return ARES_SUCCESS; - } - - /* TCP TFO might delay failure. Reflect that here */ - return ARES_ECONNREFUSED; - } - - /* Consume what was written */ - ares__buf_consume(server->tcp_send, (size_t)len); - return ARES_SUCCESS; - } - - if (prior_len == 0) { - SOCK_STATE_CALLBACK(channel, conn->fd, 1, 1); - } - - return ARES_SUCCESS; - } - - /* UDP Here */ - status = ares_dns_write(query->query, &qbuf, &qbuf_len); + /* We write using the TCP format even for UDP, we just strip the length + * before putting on the wire */ + status = ares_dns_write_buf_tcp(query->query, conn->out_buf); if (status != ARES_SUCCESS) { return status; } - len = ares__conn_write(conn, qbuf, qbuf_len); - ares_free(qbuf); + /* Not pending a TFO write and not connected, so we can't even try to + * write until we get a signal */ + if (conn->flags & ARES_CONN_FLAG_TCP && + !(conn->state_flags & ARES_CONN_STATE_CONNECTED) && + !(conn->flags & ARES_CONN_FLAG_TFO_INITIAL)) { + return ARES_SUCCESS; + } - if (len == -1) { - if (ares__socket_try_again(SOCKERRNO)) { - return ARES_ESERVFAIL; - } - /* UDP is connection-less, but we might receive an ICMP unreachable which - * means we can't talk to the remote host at all and that will be - * reflected here */ - return ARES_ECONNREFUSED; + /* Delay actual write if possible (TCP only, and only if callback + * configured) */ + if (channel->notify_pending_write_cb && !channel->notify_pending_write && + conn->flags & ARES_CONN_FLAG_TCP) { + channel->notify_pending_write = ARES_TRUE; + channel->notify_pending_write_cb(channel->notify_pending_write_cb_data); + return ARES_SUCCESS; } - return ARES_SUCCESS; + /* Unfortunately we need to write right away and can't aggregate multiple + * queries into a single write. */ + return ares_conn_flush(conn); } -ares_status_t ares__send_query(ares_query_t *query, const ares_timeval_t *now) +ares_status_t ares_send_query(ares_server_t *requested_server, + ares_query_t *query, const ares_timeval_t *now) { ares_channel_t *channel = query->channel; ares_server_t *server; ares_conn_t *conn; size_t timeplus; ares_status_t status; + ares_bool_t probe_downed_server = ARES_TRUE; + /* Choose the server to send the query to */ - if (channel->rotate) { - /* Pull random server */ - server = ares__random_server(channel); + if (requested_server != NULL) { + server = requested_server; } else { - /* Pull server with failover behavior */ - server = ares__failover_server(channel); + /* If rotate is turned on, do a random selection */ + if (channel->rotate) { + server = ares_random_server(channel); + } else { + /* First server in list */ + server = ares_slist_first_val(channel->servers); + } } if (server == NULL) { @@ -1066,9 +1124,16 @@ ares_status_t ares__send_query(ares_query_t *query, const ares_timeval_t *now) return ARES_ENOSERVER; } - conn = ares__fetch_connection(channel, server, query); + /* If a query is directed to a specific query, or the server chosen has + * failures, or the query is being retried, don't probe for downed servers */ + if (requested_server != NULL || server->consec_failures > 0 || + query->try_count != 0) { + probe_downed_server = ARES_FALSE; + } + + conn = ares_fetch_connection(channel, server, query); if (conn == NULL) { - status = ares__open_connection(&conn, channel, server, query->using_tcp); + status = ares_open_connection(&conn, channel, server, query->using_tcp); switch (status) { /* Good result, continue on */ case ARES_SUCCESS: @@ -1079,7 +1144,7 @@ ares_status_t ares__send_query(ares_query_t *query, const ares_timeval_t *now) case ARES_ECONNREFUSED: case ARES_EBADFAMILY: server_increment_failures(server, query->using_tcp); - return ares__requeue_query(query, now, status, ARES_TRUE, NULL); + return ares_requeue_query(query, now, status, ARES_TRUE, NULL); /* Anything else is not retryable, likely ENOMEM */ default: @@ -1089,7 +1154,7 @@ ares_status_t ares__send_query(ares_query_t *query, const ares_timeval_t *now) } /* Write the query */ - status = ares__conn_query_write(conn, query, now); + status = ares_conn_query_write(conn, query, now); switch (status) { /* Good result, continue on */ case ARES_SUCCESS: @@ -1105,30 +1170,28 @@ ares_status_t ares__send_query(ares_query_t *query, const ares_timeval_t *now) case ARES_ECONNREFUSED: case ARES_EBADFAMILY: handle_conn_error(conn, ARES_TRUE, status); - status = ares__requeue_query(query, now, status, ARES_TRUE, NULL); + status = ares_requeue_query(query, now, status, ARES_TRUE, NULL); if (status == ARES_ETIMEOUT) { status = ARES_ECONNREFUSED; } return status; - /* FIXME: Handle EAGAIN here since it likely can happen. Right now we - * just requeue to a different server/connection. */ default: server_increment_failures(server, query->using_tcp); - status = ares__requeue_query(query, now, status, ARES_TRUE, NULL); + status = ares_requeue_query(query, now, status, ARES_TRUE, NULL); return status; } - timeplus = ares__calc_query_timeout(query, server, now); + timeplus = ares_calc_query_timeout(query, server, now); /* Keep track of queries bucketed by timeout, so we can process * timeout events quickly. */ - ares__slist_node_destroy(query->node_queries_by_timeout); + ares_slist_node_destroy(query->node_queries_by_timeout); query->ts = *now; query->timeout = *now; timeadd(&query->timeout, timeplus); query->node_queries_by_timeout = - ares__slist_insert(channel->queries_by_timeout, query); + ares_slist_insert(channel->queries_by_timeout, query); if (!query->node_queries_by_timeout) { /* LCOV_EXCL_START: OutOfMemory */ end_query(channel, server, query, ARES_ENOMEM, NULL); @@ -1138,9 +1201,9 @@ ares_status_t ares__send_query(ares_query_t *query, const ares_timeval_t *now) /* Keep track of queries bucketed by connection, so we can process errors * quickly. */ - ares__llist_node_destroy(query->node_queries_to_conn); + ares_llist_node_destroy(query->node_queries_to_conn); query->node_queries_to_conn = - ares__llist_insert_last(conn->queries_to_conn, query); + ares_llist_insert_last(conn->queries_to_conn, query); if (query->node_queries_to_conn == NULL) { /* LCOV_EXCL_START: OutOfMemory */ @@ -1151,6 +1214,13 @@ ares_status_t ares__send_query(ares_query_t *query, const ares_timeval_t *now) query->conn = conn; conn->total_queries++; + + /* We just successfully enqueud a query, see if we should probe downed + * servers. */ + if (probe_downed_server) { + ares_probe_failed_server(channel, server, query); + } + return ARES_SUCCESS; } @@ -1197,12 +1267,12 @@ static ares_bool_t same_questions(const ares_query_t *query, * server to preserve the case of the name in the response packet. * https://datatracker.ietf.org/doc/html/draft-vixie-dnsext-dns0x20-00 */ - if (strcmp(qname, aname) != 0) { + if (!ares_streq(qname, aname)) { goto done; } } else { /* without DNS0x20 use case-insensitive matching */ - if (strcasecmp(qname, aname) != 0) { + if (!ares_strcaseeq(qname, aname)) { goto done; } } @@ -1214,42 +1284,12 @@ static ares_bool_t same_questions(const ares_query_t *query, return rv; } -static ares_bool_t same_address(const struct sockaddr *sa, - const struct ares_addr *aa) -{ - const void *addr1; - const void *addr2; - - if (sa->sa_family == aa->family) { - switch (aa->family) { - case AF_INET: - addr1 = &aa->addr.addr4; - addr2 = &(CARES_INADDR_CAST(const struct sockaddr_in *, sa))->sin_addr; - if (memcmp(addr1, addr2, sizeof(aa->addr.addr4)) == 0) { - return ARES_TRUE; /* match */ - } - break; - case AF_INET6: - addr1 = &aa->addr.addr6; - addr2 = - &(CARES_INADDR_CAST(const struct sockaddr_in6 *, sa))->sin6_addr; - if (memcmp(addr1, addr2, sizeof(aa->addr.addr6)) == 0) { - return ARES_TRUE; /* match */ - } - break; - default: - break; /* LCOV_EXCL_LINE */ - } - } - return ARES_FALSE; /* different */ -} - static void ares_detach_query(ares_query_t *query) { /* Remove the query from all the lists in which it is linked */ - ares__query_disassociate_from_conn(query); - ares__htable_szvp_remove(query->channel->queries_by_qid, query->qid); - ares__llist_node_destroy(query->node_all_queries); + ares_query_remove_from_conn(query); + ares_htable_szvp_remove(query->channel->queries_by_qid, query->qid); + ares_llist_node_destroy(query->node_all_queries); query->node_all_queries = NULL; } @@ -1257,11 +1297,17 @@ static void end_query(ares_channel_t *channel, ares_server_t *server, ares_query_t *query, ares_status_t status, const ares_dns_record_t *dnsrec) { + /* If we were probing for the server to come back online, lets mark it as + * no longer being probed */ + if (server != NULL) { + server->probe_pending = ARES_FALSE; + } + ares_metrics_record(query, server, status, dnsrec); /* Invoke the callback. */ query->callback(query->arg, status, query->timeouts, dnsrec); - ares__free_query(query); + ares_free_query(query); /* Check and notify if no other queries are enqueued on the channel. This * must come after the callback and freeing the query for 2 reasons. @@ -1271,7 +1317,7 @@ static void end_query(ares_channel_t *channel, ares_server_t *server, ares_queue_notify_empty(channel); } -void ares__free_query(ares_query_t *query) +void ares_free_query(ares_query_t *query) { ares_detach_query(query); /* Zero out some important stuff, to help catch bugs */ diff --git a/deps/cares/src/lib/ares_qcache.c b/deps/cares/src/lib/ares_qcache.c index 9725212fded7d1..97c0a9137da58b 100644 --- a/deps/cares/src/lib/ares_qcache.c +++ b/deps/cares/src/lib/ares_qcache.c @@ -25,10 +25,10 @@ */ #include "ares_private.h" -struct ares__qcache { - ares__htable_strvp_t *cache; - ares__slist_t *expire; - unsigned int max_ttl; +struct ares_qcache { + ares_htable_strvp_t *cache; + ares_slist_t *expire; + unsigned int max_ttl; }; typedef struct { @@ -36,11 +36,11 @@ typedef struct { ares_dns_record_t *dnsrec; time_t expire_ts; time_t insert_ts; -} ares__qcache_entry_t; +} ares_qcache_entry_t; -static char *ares__qcache_calc_key(const ares_dns_record_t *dnsrec) +static char *ares_qcache_calc_key(const ares_dns_record_t *dnsrec) { - ares__buf_t *buf = ares__buf_create(); + ares_buf_t *buf = ares_buf_create(); size_t i; ares_status_t status; ares_dns_flags_t flags; @@ -51,13 +51,13 @@ static char *ares__qcache_calc_key(const ares_dns_record_t *dnsrec) /* Format is OPCODE|FLAGS[|QTYPE1|QCLASS1|QNAME1]... */ - status = ares__buf_append_str( + status = ares_buf_append_str( buf, ares_dns_opcode_tostr(ares_dns_record_get_opcode(dnsrec))); if (status != ARES_SUCCESS) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } - status = ares__buf_append_byte(buf, '|'); + status = ares_buf_append_byte(buf, '|'); if (status != ARES_SUCCESS) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -65,13 +65,13 @@ static char *ares__qcache_calc_key(const ares_dns_record_t *dnsrec) flags = ares_dns_record_get_flags(dnsrec); /* Only care about RD and CD */ if (flags & ARES_FLAG_RD) { - status = ares__buf_append_str(buf, "rd"); + status = ares_buf_append_str(buf, "rd"); if (status != ARES_SUCCESS) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } } if (flags & ARES_FLAG_CD) { - status = ares__buf_append_str(buf, "cd"); + status = ares_buf_append_str(buf, "cd"); if (status != ARES_SUCCESS) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -88,27 +88,27 @@ static char *ares__qcache_calc_key(const ares_dns_record_t *dnsrec) goto fail; /* LCOV_EXCL_LINE: DefensiveCoding */ } - status = ares__buf_append_byte(buf, '|'); + status = ares_buf_append_byte(buf, '|'); if (status != ARES_SUCCESS) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } - status = ares__buf_append_str(buf, ares_dns_rec_type_tostr(qtype)); + status = ares_buf_append_str(buf, ares_dns_rec_type_tostr(qtype)); if (status != ARES_SUCCESS) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } - status = ares__buf_append_byte(buf, '|'); + status = ares_buf_append_byte(buf, '|'); if (status != ARES_SUCCESS) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } - status = ares__buf_append_str(buf, ares_dns_class_tostr(qclass)); + status = ares_buf_append_str(buf, ares_dns_class_tostr(qclass)); if (status != ARES_SUCCESS) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } - status = ares__buf_append_byte(buf, '|'); + status = ares_buf_append_byte(buf, '|'); if (status != ARES_SUCCESS) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -122,64 +122,63 @@ static char *ares__qcache_calc_key(const ares_dns_record_t *dnsrec) } if (name_len > 0) { - status = ares__buf_append(buf, (const unsigned char *)name, name_len); + status = ares_buf_append(buf, (const unsigned char *)name, name_len); if (status != ARES_SUCCESS) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } } } - return ares__buf_finish_str(buf, NULL); + return ares_buf_finish_str(buf, NULL); /* LCOV_EXCL_START: OutOfMemory */ fail: - ares__buf_destroy(buf); + ares_buf_destroy(buf); return NULL; /* LCOV_EXCL_STOP */ } -static void ares__qcache_expire(ares__qcache_t *cache, - const ares_timeval_t *now) +static void ares_qcache_expire(ares_qcache_t *cache, const ares_timeval_t *now) { - ares__slist_node_t *node; + ares_slist_node_t *node; if (cache == NULL) { return; } - while ((node = ares__slist_node_first(cache->expire)) != NULL) { - const ares__qcache_entry_t *entry = ares__slist_node_val(node); + while ((node = ares_slist_node_first(cache->expire)) != NULL) { + const ares_qcache_entry_t *entry = ares_slist_node_val(node); /* If now is NULL, we're flushing everything, so don't break */ if (now != NULL && entry->expire_ts > now->sec) { break; } - ares__htable_strvp_remove(cache->cache, entry->key); - ares__slist_node_destroy(node); + ares_htable_strvp_remove(cache->cache, entry->key); + ares_slist_node_destroy(node); } } -void ares__qcache_flush(ares__qcache_t *cache) +void ares_qcache_flush(ares_qcache_t *cache) { - ares__qcache_expire(cache, NULL /* flush all */); + ares_qcache_expire(cache, NULL /* flush all */); } -void ares__qcache_destroy(ares__qcache_t *cache) +void ares_qcache_destroy(ares_qcache_t *cache) { if (cache == NULL) { return; } - ares__htable_strvp_destroy(cache->cache); - ares__slist_destroy(cache->expire); + ares_htable_strvp_destroy(cache->cache); + ares_slist_destroy(cache->expire); ares_free(cache); } -static int ares__qcache_entry_sort_cb(const void *arg1, const void *arg2) +static int ares_qcache_entry_sort_cb(const void *arg1, const void *arg2) { - const ares__qcache_entry_t *entry1 = arg1; - const ares__qcache_entry_t *entry2 = arg2; + const ares_qcache_entry_t *entry1 = arg1; + const ares_qcache_entry_t *entry2 = arg2; if (entry1->expire_ts > entry2->expire_ts) { return 1; @@ -192,9 +191,9 @@ static int ares__qcache_entry_sort_cb(const void *arg1, const void *arg2) return 0; } -static void ares__qcache_entry_destroy_cb(void *arg) +static void ares_qcache_entry_destroy_cb(void *arg) { - ares__qcache_entry_t *entry = arg; + ares_qcache_entry_t *entry = arg; if (entry == NULL) { return; /* LCOV_EXCL_LINE: DefensiveCoding */ } @@ -204,12 +203,12 @@ static void ares__qcache_entry_destroy_cb(void *arg) ares_free(entry); } -ares_status_t ares__qcache_create(ares_rand_state *rand_state, - unsigned int max_ttl, - ares__qcache_t **cache_out) +ares_status_t ares_qcache_create(ares_rand_state *rand_state, + unsigned int max_ttl, + ares_qcache_t **cache_out) { - ares_status_t status = ARES_SUCCESS; - ares__qcache_t *cache; + ares_status_t status = ARES_SUCCESS; + ares_qcache_t *cache; cache = ares_malloc_zero(sizeof(*cache)); if (cache == NULL) { @@ -217,14 +216,14 @@ ares_status_t ares__qcache_create(ares_rand_state *rand_state, goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } - cache->cache = ares__htable_strvp_create(NULL); + cache->cache = ares_htable_strvp_create(NULL); if (cache->cache == NULL) { status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } - cache->expire = ares__slist_create(rand_state, ares__qcache_entry_sort_cb, - ares__qcache_entry_destroy_cb); + cache->expire = ares_slist_create(rand_state, ares_qcache_entry_sort_cb, + ares_qcache_entry_destroy_cb); if (cache->expire == NULL) { status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ goto done; /* LCOV_EXCL_LINE: OutOfMemory */ @@ -235,7 +234,7 @@ ares_status_t ares__qcache_create(ares_rand_state *rand_state, done: if (status != ARES_SUCCESS) { *cache_out = NULL; - ares__qcache_destroy(cache); + ares_qcache_destroy(cache); return status; } @@ -243,7 +242,7 @@ ares_status_t ares__qcache_create(ares_rand_state *rand_state, return status; } -static unsigned int ares__qcache_calc_minttl(ares_dns_record_t *dnsrec) +static unsigned int ares_qcache_calc_minttl(ares_dns_record_t *dnsrec) { unsigned int minttl = 0xFFFFFFFF; size_t sect; @@ -272,7 +271,7 @@ static unsigned int ares__qcache_calc_minttl(ares_dns_record_t *dnsrec) return minttl; } -static unsigned int ares__qcache_soa_minimum(ares_dns_record_t *dnsrec) +static unsigned int ares_qcache_soa_minimum(ares_dns_record_t *dnsrec) { size_t i; @@ -302,15 +301,15 @@ static unsigned int ares__qcache_soa_minimum(ares_dns_record_t *dnsrec) } /* On success, takes ownership of dnsrec */ -static ares_status_t ares__qcache_insert(ares__qcache_t *qcache, - ares_dns_record_t *qresp, - const ares_dns_record_t *qreq, - const ares_timeval_t *now) +static ares_status_t ares_qcache_insert_int(ares_qcache_t *qcache, + ares_dns_record_t *qresp, + const ares_dns_record_t *qreq, + const ares_timeval_t *now) { - ares__qcache_entry_t *entry; - unsigned int ttl; - ares_dns_rcode_t rcode = ares_dns_record_get_rcode(qresp); - ares_dns_flags_t flags = ares_dns_record_get_flags(qresp); + ares_qcache_entry_t *entry; + unsigned int ttl; + ares_dns_rcode_t rcode = ares_dns_record_get_rcode(qresp); + ares_dns_flags_t flags = ares_dns_record_get_flags(qresp); if (qcache == NULL || qresp == NULL) { return ARES_EFORMERR; @@ -328,9 +327,9 @@ static ares_status_t ares__qcache_insert(ares__qcache_t *qcache, /* Look at SOA for NXDOMAIN for minimum */ if (rcode == ARES_RCODE_NXDOMAIN) { - ttl = ares__qcache_soa_minimum(qresp); + ttl = ares_qcache_soa_minimum(qresp); } else { - ttl = ares__qcache_calc_minttl(qresp); + ttl = ares_qcache_calc_minttl(qresp); } if (ttl > qcache->max_ttl) { @@ -355,16 +354,16 @@ static ares_status_t ares__qcache_insert(ares__qcache_t *qcache, * request had, so we have to re-parse the request in order to generate the * key for caching, but we'll only do this once we know for sure we really * want to cache it */ - entry->key = ares__qcache_calc_key(qreq); + entry->key = ares_qcache_calc_key(qreq); if (entry->key == NULL) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } - if (!ares__htable_strvp_insert(qcache->cache, entry->key, entry)) { + if (!ares_htable_strvp_insert(qcache->cache, entry->key, entry)) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } - if (ares__slist_insert(qcache->expire, entry) == NULL) { + if (ares_slist_insert(qcache->expire, entry) == NULL) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -373,7 +372,7 @@ static ares_status_t ares__qcache_insert(ares__qcache_t *qcache, /* LCOV_EXCL_START: OutOfMemory */ fail: if (entry != NULL && entry->key != NULL) { - ares__htable_strvp_remove(qcache->cache, entry->key); + ares_htable_strvp_remove(qcache->cache, entry->key); ares_free(entry->key); ares_free(entry); } @@ -386,9 +385,9 @@ ares_status_t ares_qcache_fetch(ares_channel_t *channel, const ares_dns_record_t *dnsrec, const ares_dns_record_t **dnsrec_resp) { - char *key = NULL; - ares__qcache_entry_t *entry; - ares_status_t status = ARES_SUCCESS; + char *key = NULL; + ares_qcache_entry_t *entry; + ares_status_t status = ARES_SUCCESS; if (channel == NULL || dnsrec == NULL || dnsrec_resp == NULL) { return ARES_EFORMERR; @@ -398,22 +397,22 @@ ares_status_t ares_qcache_fetch(ares_channel_t *channel, return ARES_ENOTFOUND; } - ares__qcache_expire(channel->qcache, now); + ares_qcache_expire(channel->qcache, now); - key = ares__qcache_calc_key(dnsrec); + key = ares_qcache_calc_key(dnsrec); if (key == NULL) { status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } - entry = ares__htable_strvp_get_direct(channel->qcache->cache, key); + entry = ares_htable_strvp_get_direct(channel->qcache->cache, key); if (entry == NULL) { status = ARES_ENOTFOUND; goto done; } - ares_dns_record_write_ttl_decrement( - entry->dnsrec, (unsigned int)(now->sec - entry->insert_ts)); + ares_dns_record_ttl_decrement(entry->dnsrec, + (unsigned int)(now->sec - entry->insert_ts)); *dnsrec_resp = entry->dnsrec; @@ -427,5 +426,5 @@ ares_status_t ares_qcache_insert(ares_channel_t *channel, const ares_query_t *query, ares_dns_record_t *dnsrec) { - return ares__qcache_insert(channel->qcache, dnsrec, query->query, now); + return ares_qcache_insert_int(channel->qcache, dnsrec, query->query, now); } diff --git a/deps/cares/src/lib/ares_query.c b/deps/cares/src/lib/ares_query.c index 4d0861a5f52d51..ca3b6a9b732add 100644 --- a/deps/cares/src/lib/ares_query.c +++ b/deps/cares/src/lib/ares_query.c @@ -105,7 +105,8 @@ ares_status_t ares_query_nolock(ares_channel_t *channel, const char *name, qquery->arg = arg; /* Send it off. qcallback will be called when we get an answer. */ - status = ares_send_nolock(channel, dnsrec, ares_query_dnsrec_cb, qquery, qid); + status = ares_send_nolock(channel, NULL, 0, dnsrec, ares_query_dnsrec_cb, + qquery, qid); ares_dns_record_destroy(dnsrec); return status; @@ -123,9 +124,9 @@ ares_status_t ares_query_dnsrec(ares_channel_t *channel, const char *name, return ARES_EFORMERR; } - ares__channel_lock(channel); + ares_channel_lock(channel); status = ares_query_nolock(channel, name, dnsclass, type, callback, arg, qid); - ares__channel_unlock(channel); + ares_channel_unlock(channel); return status; } @@ -138,13 +139,13 @@ void ares_query(ares_channel_t *channel, const char *name, int dnsclass, return; } - carg = ares__dnsrec_convert_arg(callback, arg); + carg = ares_dnsrec_convert_arg(callback, arg); if (carg == NULL) { callback(arg, ARES_ENOMEM, 0, NULL, 0); /* LCOV_EXCL_LINE: OutOfMemory */ return; /* LCOV_EXCL_LINE: OutOfMemory */ } ares_query_dnsrec(channel, name, (ares_dns_class_t)dnsclass, - (ares_dns_rec_type_t)type, ares__dnsrec_convert_cb, carg, + (ares_dns_rec_type_t)type, ares_dnsrec_convert_cb, carg, NULL); } diff --git a/deps/cares/src/lib/ares_search.c b/deps/cares/src/lib/ares_search.c index 2d3c0fc5145684..c605caf42cb7a8 100644 --- a/deps/cares/src/lib/ares_search.c +++ b/deps/cares/src/lib/ares_search.c @@ -55,7 +55,7 @@ static void squery_free(struct search_query *squery) if (squery == NULL) { return; /* LCOV_EXCL_LINE: DefensiveCoding */ } - ares__strsplit_free(squery->names, squery->names_cnt); + ares_strsplit_free(squery->names, squery->names_cnt); ares_dns_record_destroy(squery->dnsrec); ares_free(squery); } @@ -92,8 +92,8 @@ static ares_status_t ares_search_next(ares_channel_t *channel, return status; } - status = - ares_send_nolock(channel, squery->dnsrec, search_callback, squery, NULL); + status = ares_send_nolock(channel, NULL, 0, squery->dnsrec, search_callback, + squery, NULL); if (status != ARES_EFORMERR) { *skip_cleanup = ARES_TRUE; @@ -114,10 +114,9 @@ static void search_callback(void *arg, ares_status_t status, size_t timeouts, squery->timeouts += timeouts; if (dnsrec) { - ares_dns_rcode_t rcode = ares_dns_record_get_rcode(dnsrec); - size_t ancount = ares_dns_record_rr_cnt(dnsrec, - ARES_SECTION_ANSWER); - mystatus = ares_dns_query_reply_tostatus(rcode, ancount); + ares_dns_rcode_t rcode = ares_dns_record_get_rcode(dnsrec); + size_t ancount = ares_dns_record_rr_cnt(dnsrec, ARES_SECTION_ANSWER); + mystatus = ares_dns_query_reply_tostatus(rcode, ancount); } else { mystatus = status; } @@ -128,9 +127,9 @@ static void search_callback(void *arg, ares_status_t status, size_t timeouts, break; case ARES_ESERVFAIL: case ARES_EREFUSED: - /* Issue #852, systemd-resolved may return SERVFAIL or REFUSED on a + /* Issue #852, systemd-resolved may return SERVFAIL or REFUSED on a * single label domain name. */ - if (ares__name_label_cnt(squery->names[squery->next_name_idx-1]) != 1) { + if (ares_name_label_cnt(squery->names[squery->next_name_idx - 1]) != 1) { end_squery(squery, mystatus, dnsrec); return; } @@ -169,8 +168,8 @@ static void search_callback(void *arg, ares_status_t status, size_t timeouts, /* Determine if the domain should be looked up as-is, or if it is eligible * for search by appending domains */ -static ares_bool_t ares__search_eligible(const ares_channel_t *channel, - const char *name) +static ares_bool_t ares_search_eligible(const ares_channel_t *channel, + const char *name) { size_t len = ares_strlen(name); @@ -186,10 +185,10 @@ static ares_bool_t ares__search_eligible(const ares_channel_t *channel, return ARES_TRUE; } -size_t ares__name_label_cnt(const char *name) +size_t ares_name_label_cnt(const char *name) { - const char *p; - size_t ndots = 0; + const char *p; + size_t ndots = 0; if (name == NULL) { return 0; @@ -202,12 +201,12 @@ size_t ares__name_label_cnt(const char *name) } /* Label count is 1 greater than ndots */ - return ndots+1; + return ndots + 1; } -ares_status_t ares__search_name_list(const ares_channel_t *channel, - const char *name, char ***names, - size_t *names_len) +ares_status_t ares_search_name_list(const ares_channel_t *channel, + const char *name, char ***names, + size_t *names_len) { ares_status_t status; char **list = NULL; @@ -218,7 +217,7 @@ ares_status_t ares__search_name_list(const ares_channel_t *channel, size_t i; /* Perform HOSTALIASES resolution */ - status = ares__lookup_hostaliases(channel, name, &alias); + status = ares_lookup_hostaliases(channel, name, &alias); if (status == ARES_SUCCESS) { /* If hostalias succeeds, there is no searching, it is used as-is */ list_len = 1; @@ -235,7 +234,7 @@ ares_status_t ares__search_name_list(const ares_channel_t *channel, } /* See if searching is eligible at all, if not, look up as-is only */ - if (!ares__search_eligible(channel, name)) { + if (!ares_search_eligible(channel, name)) { list_len = 1; list = ares_malloc_zero(sizeof(*list) * list_len); if (list == NULL) { @@ -252,7 +251,7 @@ ares_status_t ares__search_name_list(const ares_channel_t *channel, } /* Count the number of dots in name, 1 less than label count */ - ndots = ares__name_label_cnt(name); + ndots = ares_name_label_cnt(name); if (ndots > 0) { ndots--; } @@ -266,7 +265,7 @@ ares_status_t ares__search_name_list(const ares_channel_t *channel, } /* Set status here, its possible there are no search domains at all, so - * status may be ARES_ENOTFOUND from ares__lookup_hostaliases(). */ + * status may be ARES_ENOTFOUND from ares_lookup_hostaliases(). */ status = ARES_SUCCESS; /* Try as-is first */ @@ -281,7 +280,7 @@ ares_status_t ares__search_name_list(const ares_channel_t *channel, /* Append each search suffix to the name */ for (i = 0; i < channel->ndomains; i++) { - status = ares__cat_domain(name, channel->domains[i], &list[idx]); + status = ares_cat_domain(name, channel->domains[i], &list[idx]); if (status != ARES_SUCCESS) { goto done; } @@ -304,7 +303,7 @@ ares_status_t ares__search_name_list(const ares_channel_t *channel, *names = list; *names_len = list_len; } else { - ares__strsplit_free(list, list_len); + ares_strsplit_free(list, list_len); } ares_free(alias); @@ -334,7 +333,7 @@ static ares_status_t ares_search_int(ares_channel_t *channel, } /* Per RFC 7686, reject queries for ".onion" domain names with NXDOMAIN. */ - if (ares__is_onion_domain(name)) { + if (ares_is_onion_domain(name)) { status = ARES_ENOTFOUND; goto fail; } @@ -363,7 +362,7 @@ static ares_status_t ares_search_int(ares_channel_t *channel, squery->ever_got_nodata = ARES_FALSE; status = - ares__search_name_list(channel, name, &squery->names, &squery->names_cnt); + ares_search_name_list(channel, name, &squery->names, &squery->names_cnt); if (status != ARES_SUCCESS) { goto fail; } @@ -383,7 +382,7 @@ static ares_status_t ares_search_int(ares_channel_t *channel, return status; } -/* Callback argument structure passed to ares__dnsrec_convert_cb(). */ +/* Callback argument structure passed to ares_dnsrec_convert_cb(). */ typedef struct { ares_callback callback; void *arg; @@ -391,7 +390,7 @@ typedef struct { /*! Function to create callback arg for converting from ares_callback_dnsrec * to ares_calback */ -void *ares__dnsrec_convert_arg(ares_callback callback, void *arg) +void *ares_dnsrec_convert_arg(ares_callback callback, void *arg) { dnsrec_convert_arg_t *carg = ares_malloc_zero(sizeof(*carg)); if (carg == NULL) { @@ -406,8 +405,8 @@ void *ares__dnsrec_convert_arg(ares_callback callback, void *arg) * the ares_callback prototype, by writing the result and passing that to * the inner callback. */ -void ares__dnsrec_convert_cb(void *arg, ares_status_t status, size_t timeouts, - const ares_dns_record_t *dnsrec) +void ares_dnsrec_convert_cb(void *arg, ares_status_t status, size_t timeouts, + const ares_dns_record_t *dnsrec) { dnsrec_convert_arg_t *carg = arg; unsigned char *abuf = NULL; @@ -442,11 +441,11 @@ void ares_search(ares_channel_t *channel, const char *name, int dnsclass, } /* For now, ares_search_int() uses the ares_callback prototype. We need to - * wrap the callback passed to this function in ares__dnsrec_convert_cb, to + * wrap the callback passed to this function in ares_dnsrec_convert_cb, to * convert from ares_callback_dnsrec to ares_callback. Allocate the convert * arg structure here. */ - carg = ares__dnsrec_convert_arg(callback, arg); + carg = ares_dnsrec_convert_arg(callback, arg); if (carg == NULL) { callback(arg, ARES_ENOMEM, 0, NULL, 0); return; @@ -463,9 +462,9 @@ void ares_search(ares_channel_t *channel, const char *name, int dnsclass, return; } - ares__channel_lock(channel); - ares_search_int(channel, dnsrec, ares__dnsrec_convert_cb, carg); - ares__channel_unlock(channel); + ares_channel_lock(channel); + ares_search_int(channel, dnsrec, ares_dnsrec_convert_cb, carg); + ares_channel_unlock(channel); ares_dns_record_destroy(dnsrec); } @@ -481,15 +480,15 @@ ares_status_t ares_search_dnsrec(ares_channel_t *channel, return ARES_EFORMERR; /* LCOV_EXCL_LINE: DefensiveCoding */ } - ares__channel_lock(channel); + ares_channel_lock(channel); status = ares_search_int(channel, dnsrec, callback, arg); - ares__channel_unlock(channel); + ares_channel_unlock(channel); return status; } /* Concatenate two domains. */ -ares_status_t ares__cat_domain(const char *name, const char *domain, char **s) +ares_status_t ares_cat_domain(const char *name, const char *domain, char **s) { size_t nlen = ares_strlen(name); size_t dlen = ares_strlen(domain); @@ -500,7 +499,7 @@ ares_status_t ares__cat_domain(const char *name, const char *domain, char **s) } memcpy(*s, name, nlen); (*s)[nlen] = '.'; - if (strcmp(domain, ".") == 0) { + if (ares_streq(domain, ".")) { /* Avoid appending the root domain to the separator, which would set *s to an ill-formed value (ending in two consecutive dots). */ dlen = 0; @@ -510,14 +509,15 @@ ares_status_t ares__cat_domain(const char *name, const char *domain, char **s) return ARES_SUCCESS; } -ares_status_t ares__lookup_hostaliases(const ares_channel_t *channel, - const char *name, char **alias) +ares_status_t ares_lookup_hostaliases(const ares_channel_t *channel, + const char *name, char **alias) { - ares_status_t status = ARES_SUCCESS; - const char *hostaliases = NULL; - ares__buf_t *buf = NULL; - ares__llist_t *lines = NULL; - ares__llist_node_t *node; + ares_status_t status = ARES_SUCCESS; + const char *hostaliases = NULL; + ares_buf_t *buf = NULL; + ares_array_t *lines = NULL; + size_t num; + size_t i; if (channel == NULL || name == NULL || alias == NULL) { return ARES_EFORMERR; /* LCOV_EXCL_LINE: DefensiveCoding */ @@ -541,13 +541,13 @@ ares_status_t ares__lookup_hostaliases(const ares_channel_t *channel, goto done; } - buf = ares__buf_create(); + buf = ares_buf_create(); if (buf == NULL) { status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } - status = ares__buf_load_file(hostaliases, buf); + status = ares_buf_load_file(hostaliases, buf); if (status != ARES_SUCCESS) { goto done; } @@ -560,44 +560,45 @@ ares_status_t ares__lookup_hostaliases(const ares_channel_t *channel, * curl www.curl.se */ - status = ares__buf_split(buf, (const unsigned char *)"\n", 1, - ARES_BUF_SPLIT_TRIM, 0, &lines); + status = ares_buf_split(buf, (const unsigned char *)"\n", 1, + ARES_BUF_SPLIT_TRIM, 0, &lines); if (status != ARES_SUCCESS) { goto done; } - for (node = ares__llist_node_first(lines); node != NULL; - node = ares__llist_node_next(node)) { - ares__buf_t *line = ares__llist_node_val(node); + num = ares_array_len(lines); + for (i = 0; i < num; i++) { + ares_buf_t **bufptr = ares_array_at(lines, i); + ares_buf_t *line = *bufptr; char hostname[64] = ""; char fqdn[256] = ""; /* Pull off hostname */ - ares__buf_tag(line); - ares__buf_consume_nonwhitespace(line); - if (ares__buf_tag_fetch_string(line, hostname, sizeof(hostname)) != + ares_buf_tag(line); + ares_buf_consume_nonwhitespace(line); + if (ares_buf_tag_fetch_string(line, hostname, sizeof(hostname)) != ARES_SUCCESS) { continue; } /* Match hostname */ - if (strcasecmp(hostname, name) != 0) { + if (!ares_strcaseeq(hostname, name)) { continue; } /* consume whitespace */ - ares__buf_consume_whitespace(line, ARES_TRUE); + ares_buf_consume_whitespace(line, ARES_TRUE); /* pull off fqdn */ - ares__buf_tag(line); - ares__buf_consume_nonwhitespace(line); - if (ares__buf_tag_fetch_string(line, fqdn, sizeof(fqdn)) != ARES_SUCCESS || + ares_buf_tag(line); + ares_buf_consume_nonwhitespace(line); + if (ares_buf_tag_fetch_string(line, fqdn, sizeof(fqdn)) != ARES_SUCCESS || ares_strlen(fqdn) == 0) { continue; } /* Validate characterset */ - if (!ares__is_hostname(fqdn)) { + if (!ares_is_hostname(fqdn)) { continue; } @@ -615,8 +616,8 @@ ares_status_t ares__lookup_hostaliases(const ares_channel_t *channel, status = ARES_ENOTFOUND; done: - ares__buf_destroy(buf); - ares__llist_destroy(lines); + ares_buf_destroy(buf); + ares_array_destroy(lines); return status; } diff --git a/deps/cares/src/lib/ares_send.c b/deps/cares/src/lib/ares_send.c index 64ff7edd3ac602..ca178a1741ed7d 100644 --- a/deps/cares/src/lib/ares_send.c +++ b/deps/cares/src/lib/ares_send.c @@ -37,8 +37,8 @@ static unsigned short generate_unique_qid(ares_channel_t *channel) unsigned short id; do { - id = ares__generate_new_id(channel->rand_state); - } while (ares__htable_szvp_get(channel->queries_by_qid, id, NULL)); + id = ares_generate_new_id(channel->rand_state); + } while (ares_htable_szvp_get(channel->queries_by_qid, id, NULL)); return id; } @@ -77,14 +77,14 @@ static ares_status_t ares_apply_dns0x20(ares_channel_t *channel, * is 1 bit per byte */ total_bits = ((len + 7) / 8) * 8; remaining_bits = total_bits; - ares__rand_bytes(channel->rand_state, randdata, total_bits / 8); + ares_rand_bytes(channel->rand_state, randdata, total_bits / 8); /* Randomly apply 0x20 to name */ for (i = 0; i < len; i++) { size_t bit; /* Only apply 0x20 to alpha characters */ - if (!ares__isalpha(name[i])) { + if (!ares_isalpha(name[i])) { dns0x20name[i] = name[i]; continue; } @@ -105,7 +105,8 @@ static ares_status_t ares_apply_dns0x20(ares_channel_t *channel, return status; } -ares_status_t ares_send_nolock(ares_channel_t *channel, +ares_status_t ares_send_nolock(ares_channel_t *channel, ares_server_t *server, + ares_send_flags_t flags, const ares_dns_record_t *dnsrec, ares_callback_dnsrec callback, void *arg, unsigned short *qid) @@ -116,20 +117,22 @@ ares_status_t ares_send_nolock(ares_channel_t *channel, unsigned short id = generate_unique_qid(channel); const ares_dns_record_t *dnsrec_resp = NULL; - ares__tvnow(&now); + ares_tvnow(&now); - if (ares__slist_len(channel->servers) == 0) { + if (ares_slist_len(channel->servers) == 0) { callback(arg, ARES_ENOSERVER, 0, NULL); return ARES_ENOSERVER; } - /* Check query cache */ - status = ares_qcache_fetch(channel, &now, dnsrec, &dnsrec_resp); - if (status != ARES_ENOTFOUND) { - /* ARES_SUCCESS means we retrieved the cache, anything else is a critical - * failure, all result in termination */ - callback(arg, status, 0, dnsrec_resp); - return status; + if (!(flags & ARES_SEND_FLAG_NOCACHE)) { + /* Check query cache */ + status = ares_qcache_fetch(channel, &now, dnsrec, &dnsrec_resp); + if (status != ARES_ENOTFOUND) { + /* ARES_SUCCESS means we retrieved the cache, anything else is a critical + * failure, all result in termination */ + callback(arg, status, 0, dnsrec_resp); + return status; + } } /* Allocate space for query and allocated fields. */ @@ -162,7 +165,7 @@ ares_status_t ares_send_nolock(ares_channel_t *channel, if (status != ARES_SUCCESS) { /* LCOV_EXCL_START: OutOfMemory */ callback(arg, status, 0, NULL); - ares__free_query(query); + ares_free_query(query); return status; /* LCOV_EXCL_STOP */ } @@ -175,6 +178,9 @@ ares_status_t ares_send_nolock(ares_channel_t *channel, /* Initialize query status. */ query->try_count = 0; + if (flags & ARES_SEND_FLAG_NORETRY) { + query->no_retries = ARES_TRUE; + } query->error_status = ARES_SUCCESS; query->timeouts = 0; @@ -184,12 +190,11 @@ ares_status_t ares_send_nolock(ares_channel_t *channel, query->node_queries_to_conn = NULL; /* Chain the query into the list of all queries. */ - query->node_all_queries = - ares__llist_insert_last(channel->all_queries, query); + query->node_all_queries = ares_llist_insert_last(channel->all_queries, query); if (query->node_all_queries == NULL) { /* LCOV_EXCL_START: OutOfMemory */ callback(arg, ARES_ENOMEM, 0, NULL); - ares__free_query(query); + ares_free_query(query); return ARES_ENOMEM; /* LCOV_EXCL_STOP */ } @@ -197,17 +202,17 @@ ares_status_t ares_send_nolock(ares_channel_t *channel, /* Keep track of queries bucketed by qid, so we can process DNS * responses quickly. */ - if (!ares__htable_szvp_insert(channel->queries_by_qid, query->qid, query)) { + if (!ares_htable_szvp_insert(channel->queries_by_qid, query->qid, query)) { /* LCOV_EXCL_START: OutOfMemory */ callback(arg, ARES_ENOMEM, 0, NULL); - ares__free_query(query); + ares_free_query(query); return ARES_ENOMEM; /* LCOV_EXCL_STOP */ } /* Perform the first query action. */ - status = ares__send_query(query, &now); + status = ares_send_query(server, query, &now); if (status == ARES_SUCCESS && qid) { *qid = id; } @@ -225,11 +230,11 @@ ares_status_t ares_send_dnsrec(ares_channel_t *channel, return ARES_EFORMERR; /* LCOV_EXCL_LINE: DefensiveCoding */ } - ares__channel_lock(channel); + ares_channel_lock(channel); - status = ares_send_nolock(channel, dnsrec, callback, arg, qid); + status = ares_send_nolock(channel, NULL, 0, dnsrec, callback, arg, qid); - ares__channel_unlock(channel); + ares_channel_unlock(channel); return status; } @@ -257,7 +262,7 @@ void ares_send(ares_channel_t *channel, const unsigned char *qbuf, int qlen, return; } - carg = ares__dnsrec_convert_arg(callback, arg); + carg = ares_dnsrec_convert_arg(callback, arg); if (carg == NULL) { /* LCOV_EXCL_START: OutOfMemory */ status = ARES_ENOMEM; @@ -267,7 +272,7 @@ void ares_send(ares_channel_t *channel, const unsigned char *qbuf, int qlen, /* LCOV_EXCL_STOP */ } - ares_send_dnsrec(channel, dnsrec, ares__dnsrec_convert_cb, carg, NULL); + ares_send_dnsrec(channel, dnsrec, ares_dnsrec_convert_cb, carg, NULL); ares_dns_record_destroy(dnsrec); } @@ -280,11 +285,11 @@ size_t ares_queue_active_queries(const ares_channel_t *channel) return 0; } - ares__channel_lock(channel); + ares_channel_lock(channel); - len = ares__llist_len(channel->all_queries); + len = ares_llist_len(channel->all_queries); - ares__channel_unlock(channel); + ares_channel_unlock(channel); return len; } diff --git a/deps/cares/src/lib/ares_set_socket_functions.c b/deps/cares/src/lib/ares_set_socket_functions.c new file mode 100644 index 00000000000000..143c491174fdba --- /dev/null +++ b/deps/cares/src/lib/ares_set_socket_functions.c @@ -0,0 +1,586 @@ +/* MIT License + * + * Copyright (c) 2024 Brad House + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * SPDX-License-Identifier: MIT + */ +#include "ares_private.h" +#ifdef HAVE_SYS_UIO_H +# include +#endif +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETINET_TCP_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_SYS_IOCTL_H +# include +#endif +#ifdef NETWARE +# include +#endif + +#include +#include +#include + + +#if defined(__linux__) && defined(TCP_FASTOPEN_CONNECT) +# define TFO_SUPPORTED 1 +# define TFO_SKIP_CONNECT 0 +# define TFO_USE_SENDTO 0 +# define TFO_USE_CONNECTX 0 +# define TFO_CLIENT_SOCKOPT TCP_FASTOPEN_CONNECT +#elif defined(__FreeBSD__) && defined(TCP_FASTOPEN) +# define TFO_SUPPORTED 1 +# define TFO_SKIP_CONNECT 1 +# define TFO_USE_SENDTO 1 +# define TFO_USE_CONNECTX 0 +# define TFO_CLIENT_SOCKOPT TCP_FASTOPEN +#elif defined(__APPLE__) && defined(HAVE_CONNECTX) +# define TFO_SUPPORTED 1 +# define TFO_SKIP_CONNECT 0 +# define TFO_USE_SENDTO 0 +# define TFO_USE_CONNECTX 1 +# undef TFO_CLIENT_SOCKOPT +#else +# define TFO_SUPPORTED 0 +#endif + +#ifndef HAVE_WRITEV +/* Structure for scatter/gather I/O. */ +struct iovec { + void *iov_base; /* Pointer to data. */ + size_t iov_len; /* Length of data. */ +}; +#endif + +ares_status_t + ares_set_socket_functions_ex(ares_channel_t *channel, + const struct ares_socket_functions_ex *funcs, + void *user_data) +{ + unsigned int known_versions[] = { 1 }; + size_t i; + + if (channel == NULL || funcs == NULL) { + return ARES_EFORMERR; + } + + /* Check to see if we know the version referenced */ + for (i = 0; i < sizeof(known_versions) / sizeof(*known_versions); i++) { + if (funcs->version == known_versions[i]) { + break; + } + } + if (i == sizeof(known_versions) / sizeof(*known_versions)) { + return ARES_EFORMERR; + } + + memset(&channel->sock_funcs, 0, sizeof(channel->sock_funcs)); + + /* Copy individually for ABI compliance. memcpy() with a sizeof would do + * invalid reads */ + if (funcs->version >= 1) { + if (funcs->asocket == NULL || funcs->aclose == NULL || + funcs->asetsockopt == NULL || funcs->aconnect == NULL || + funcs->arecvfrom == NULL || funcs->asendto == NULL) { + return ARES_EFORMERR; + } + channel->sock_funcs.version = funcs->version; + channel->sock_funcs.flags = funcs->flags; + channel->sock_funcs.asocket = funcs->asocket; + channel->sock_funcs.aclose = funcs->aclose; + channel->sock_funcs.asetsockopt = funcs->asetsockopt; + channel->sock_funcs.aconnect = funcs->aconnect; + channel->sock_funcs.arecvfrom = funcs->arecvfrom; + channel->sock_funcs.asendto = funcs->asendto; + channel->sock_funcs.agetsockname = funcs->agetsockname; + channel->sock_funcs.abind = funcs->abind; + } + + /* Implement newer versions here ...*/ + + + channel->sock_func_cb_data = user_data; + + return ARES_SUCCESS; +} + +static int setsocknonblock(ares_socket_t sockfd, /* operate on this */ + int nonblock /* TRUE or FALSE */) +{ +#if defined(HAVE_FCNTL_O_NONBLOCK) + + /* most recent unix versions */ + int flags; + flags = fcntl(sockfd, F_GETFL, 0); + if (nonblock) { + return fcntl(sockfd, F_SETFL, flags | O_NONBLOCK); + } else { + return fcntl(sockfd, F_SETFL, flags & (~O_NONBLOCK)); /* LCOV_EXCL_LINE */ + } + +#elif defined(HAVE_IOCTL_FIONBIO) + + /* older unix versions */ + int flags = nonblock ? 1 : 0; + return ioctl(sockfd, FIONBIO, &flags); + +#elif defined(HAVE_IOCTLSOCKET_FIONBIO) + +# ifdef WATT32 + char flags = nonblock ? 1 : 0; +# else + /* Windows */ + unsigned long flags = nonblock ? 1UL : 0UL; +# endif + return ioctlsocket(sockfd, (long)FIONBIO, &flags); + +#elif defined(HAVE_IOCTLSOCKET_CAMEL_FIONBIO) + + /* Amiga */ + long flags = nonblock ? 1L : 0L; + return IoctlSocket(sockfd, FIONBIO, flags); + +#elif defined(HAVE_SETSOCKOPT_SO_NONBLOCK) + + /* BeOS */ + long b = nonblock ? 1L : 0L; + return setsockopt(sockfd, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b)); + +#else +# error "no non-blocking method was found/used/set" +#endif +} + +static int default_aclose(ares_socket_t sock, void *user_data) +{ + (void)user_data; + +#if defined(HAVE_CLOSESOCKET) + return closesocket(sock); +#elif defined(HAVE_CLOSESOCKET_CAMEL) + return CloseSocket(sock); +#elif defined(HAVE_CLOSE_S) + return close_s(sock); +#else + return close(sock); +#endif +} + +static ares_socket_t default_asocket(int domain, int type, int protocol, + void *user_data) +{ + ares_socket_t s; + (void)user_data; + + s = socket(domain, type, protocol); + if (s == ARES_SOCKET_BAD) { + return s; + } + + if (setsocknonblock(s, 1) != 0) { + goto fail; /* LCOV_EXCL_LINE */ + } + +#if defined(FD_CLOEXEC) && !defined(MSDOS) + /* Configure the socket fd as close-on-exec. */ + if (fcntl(s, F_SETFD, FD_CLOEXEC) != 0) { + goto fail; /* LCOV_EXCL_LINE */ + } +#endif + + /* No need to emit SIGPIPE on socket errors */ +#if defined(SO_NOSIGPIPE) + { + int opt = 1; + (void)setsockopt(s, SOL_SOCKET, SO_NOSIGPIPE, (void *)&opt, sizeof(opt)); + } +#endif + + + if (type == SOCK_STREAM) { + int opt = 1; + +#ifdef TCP_NODELAY + /* + * Disable the Nagle algorithm (only relevant for TCP sockets, and thus not + * in configure_socket). In general, in DNS lookups we're pretty much + * interested in firing off a single request and then waiting for a reply, + * so batching isn't very interesting. + */ + if (setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (void *)&opt, sizeof(opt)) != + 0) { + goto fail; + } +#endif + } + +#if defined(IPV6_V6ONLY) && defined(USE_WINSOCK) + /* Support for IPv4-mapped IPv6 addresses. + * Linux kernel, NetBSD, FreeBSD and Darwin: default is off; + * Windows Vista and later: default is on; + * DragonFly BSD: acts like off, and dummy setting; + * OpenBSD and earlier Windows: unsupported. + * Linux: controlled by /proc/sys/net/ipv6/bindv6only. + */ + if (domain == PF_INET6) { + int on = 0; + (void)setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&on, sizeof(on)); + } +#endif + + return s; + +fail: + default_aclose(s, user_data); + return ARES_SOCKET_BAD; +} + +static int default_asetsockopt(ares_socket_t sock, ares_socket_opt_t opt, + const void *val, ares_socklen_t val_size, + void *user_data) +{ + switch (opt) { + case ARES_SOCKET_OPT_SENDBUF_SIZE: + if (val_size != sizeof(int)) { + SET_SOCKERRNO(EINVAL); + return -1; + } + return setsockopt(sock, SOL_SOCKET, SO_SNDBUF, val, val_size); + + case ARES_SOCKET_OPT_RECVBUF_SIZE: + if (val_size != sizeof(int)) { + SET_SOCKERRNO(EINVAL); + return -1; + } + return setsockopt(sock, SOL_SOCKET, SO_RCVBUF, val, val_size); + + case ARES_SOCKET_OPT_BIND_DEVICE: + if (!ares_str_isprint(val, (size_t)val_size)) { + SET_SOCKERRNO(EINVAL); + return -1; + } +#ifdef SO_BINDTODEVICE + return setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, val, val_size); +#else + SET_SOCKERRNO(ENOSYS); + return -1; +#endif + + case ARES_SOCKET_OPT_TCP_FASTOPEN: + if (val_size != sizeof(ares_bool_t)) { + SET_SOCKERRNO(EINVAL); + return -1; + } +#if defined(TFO_CLIENT_SOCKOPT) + { + int oval; + const ares_bool_t *pval = val; + oval = (int)*pval; + return setsockopt(sock, IPPROTO_TCP, TFO_CLIENT_SOCKOPT, (void *)&oval, + sizeof(oval)); + } +#elif TFO_SUPPORTED + return 0; +#else + SET_SOCKERRNO(ENOSYS); + return -1; +#endif + } + + (void)user_data; + SET_SOCKERRNO(ENOSYS); + return -1; +} + +static int default_aconnect(ares_socket_t sock, const struct sockaddr *address, + ares_socklen_t address_len, unsigned int flags, + void *user_data) +{ + (void)user_data; + +#if defined(TFO_SKIP_CONNECT) && TFO_SKIP_CONNECT + if (flags & ARES_SOCKET_CONN_TCP_FASTOPEN) { + return 0; + } + return connect(sock, address, address_len); +#elif defined(TFO_USE_CONNECTX) && TFO_USE_CONNECTX + if (flags & ARES_SOCKET_CONN_TCP_FASTOPEN) { + sa_endpoints_t endpoints; + + memset(&endpoints, 0, sizeof(endpoints)); + endpoints.sae_dstaddr = address; + endpoints.sae_dstaddrlen = address_len; + + return connectx(sock, &endpoints, SAE_ASSOCID_ANY, + CONNECT_DATA_IDEMPOTENT | CONNECT_RESUME_ON_READ_WRITE, + NULL, 0, NULL, NULL); + } else { + return connect(sock, address, address_len); + } +#else + (void)flags; + return connect(sock, address, address_len); +#endif +} + +static ares_ssize_t default_arecvfrom(ares_socket_t sock, void *buffer, + size_t length, int flags, + struct sockaddr *address, + ares_socklen_t *address_len, + void *user_data) +{ + (void)user_data; + +#ifdef HAVE_RECVFROM + return (ares_ssize_t)recvfrom(sock, buffer, (RECVFROM_TYPE_ARG3)length, flags, + address, address_len); +#else + if (address != NULL && address_len != NULL) { + memset(address, 0, (size_t)*address_len); + address->sa_family = AF_UNSPEC; + } + return (ares_ssize_t)recv(sock, buffer, (RECVFROM_TYPE_ARG3)length, flags); +#endif +} + +static ares_ssize_t default_asendto(ares_socket_t sock, const void *buffer, + size_t length, int flags, + const struct sockaddr *address, + ares_socklen_t address_len, void *user_data) +{ + (void)user_data; + + if (address != NULL) { +#ifdef HAVE_SENDTO + return (ares_ssize_t)sendto((SEND_TYPE_ARG1)sock, (SEND_TYPE_ARG2)buffer, + (SEND_TYPE_ARG3)length, (SEND_TYPE_ARG4)flags, + address, address_len); +#else + (void)address_len; +#endif + } + + return (ares_ssize_t)send((SEND_TYPE_ARG1)sock, (SEND_TYPE_ARG2)buffer, + (SEND_TYPE_ARG3)length, (SEND_TYPE_ARG4)flags); +} + +static int default_agetsockname(ares_socket_t sock, struct sockaddr *address, + ares_socklen_t *address_len, void *user_data) +{ + (void)user_data; + return getsockname(sock, address, address_len); +} + +static int default_abind(ares_socket_t sock, unsigned int flags, + const struct sockaddr *address, socklen_t address_len, + void *user_data) +{ + (void)user_data; + +#ifdef IP_BIND_ADDRESS_NO_PORT + if (flags & ARES_SOCKET_BIND_TCP && flags & ARES_SOCKET_BIND_CLIENT) { + int opt = 1; + (void)setsockopt(sock, SOL_IP, IP_BIND_ADDRESS_NO_PORT, &opt, sizeof(opt)); + } +#else + (void)flags; +#endif + + return bind(sock, address, address_len); +} + +static unsigned int default_aif_nametoindex(const char *ifname, void *user_data) +{ + (void)user_data; + return ares_os_if_nametoindex(ifname); +} + +static const char *default_aif_indextoname(unsigned int ifindex, + char *ifname_buf, + size_t ifname_buf_len, + void *user_data) +{ + (void)user_data; + return ares_os_if_indextoname(ifindex, ifname_buf, ifname_buf_len); +} + +static const struct ares_socket_functions_ex default_socket_functions = { + 1, + ARES_SOCKFUNC_FLAG_NONBLOCKING, + default_asocket, + default_aclose, + default_asetsockopt, + default_aconnect, + default_arecvfrom, + default_asendto, + default_agetsockname, + default_abind, + default_aif_nametoindex, + default_aif_indextoname +}; + +void ares_set_socket_functions_def(ares_channel_t *channel) +{ + ares_set_socket_functions_ex(channel, &default_socket_functions, NULL); +} + +static int legacycb_aclose(ares_socket_t sock, void *user_data) +{ + ares_channel_t *channel = user_data; + + if (channel->legacy_sock_funcs != NULL && + channel->legacy_sock_funcs->aclose != NULL) { + return channel->legacy_sock_funcs->aclose( + sock, channel->legacy_sock_funcs_cb_data); + } + + return default_aclose(sock, NULL); +} + +static ares_socket_t legacycb_asocket(int domain, int type, int protocol, + void *user_data) +{ + ares_channel_t *channel = user_data; + + if (channel->legacy_sock_funcs != NULL && + channel->legacy_sock_funcs->asocket != NULL) { + return channel->legacy_sock_funcs->asocket( + domain, type, protocol, channel->legacy_sock_funcs_cb_data); + } + + return default_asocket(domain, type, protocol, NULL); +} + +static int legacycb_asetsockopt(ares_socket_t sock, ares_socket_opt_t opt, + const void *val, ares_socklen_t val_size, + void *user_data) +{ + (void)sock; + (void)opt; + (void)val; + (void)val_size; + (void)user_data; + SET_SOCKERRNO(ENOSYS); + return -1; +} + +static int legacycb_aconnect(ares_socket_t sock, const struct sockaddr *address, + ares_socklen_t address_len, unsigned int flags, + void *user_data) +{ + ares_channel_t *channel = user_data; + + if (channel->legacy_sock_funcs != NULL && + channel->legacy_sock_funcs->aconnect != NULL) { + return channel->legacy_sock_funcs->aconnect( + sock, address, address_len, channel->legacy_sock_funcs_cb_data); + } + + return default_aconnect(sock, address, address_len, flags, NULL); +} + +static ares_ssize_t legacycb_arecvfrom(ares_socket_t sock, void *buffer, + size_t length, int flags, + struct sockaddr *address, + ares_socklen_t *address_len, + void *user_data) +{ + ares_channel_t *channel = user_data; + + if (channel->legacy_sock_funcs != NULL && + channel->legacy_sock_funcs->arecvfrom != NULL) { + if (address != NULL && address_len != NULL) { + memset(address, 0, (size_t)*address_len); + address->sa_family = AF_UNSPEC; + } + return channel->legacy_sock_funcs->arecvfrom( + sock, buffer, length, flags, address, address_len, + channel->legacy_sock_funcs_cb_data); + } + + return default_arecvfrom(sock, buffer, length, flags, address, address_len, + NULL); +} + +static ares_ssize_t legacycb_asendto(ares_socket_t sock, const void *buffer, + size_t length, int flags, + const struct sockaddr *address, + ares_socklen_t address_len, + void *user_data) +{ + ares_channel_t *channel = user_data; + + if (channel->legacy_sock_funcs != NULL && + channel->legacy_sock_funcs->asendv != NULL) { + struct iovec vec; + vec.iov_base = (void *)((size_t)buffer); /* Cast off const */ + vec.iov_len = length; + return channel->legacy_sock_funcs->asendv( + sock, &vec, 1, channel->legacy_sock_funcs_cb_data); + } + + return default_asendto(sock, buffer, length, flags, address, address_len, + NULL); +} + + +static const struct ares_socket_functions_ex legacy_socket_functions = { + 1, + 0, + legacycb_asocket, + legacycb_aclose, + legacycb_asetsockopt, + legacycb_aconnect, + legacycb_arecvfrom, + legacycb_asendto, + NULL, /* agetsockname */ + NULL, /* abind */ + NULL, /* aif_nametoindex */ + NULL /* aif_indextoname */ +}; + +void ares_set_socket_functions(ares_channel_t *channel, + const struct ares_socket_functions *funcs, + void *data) +{ + if (channel == NULL || channel->optmask & ARES_OPT_EVENT_THREAD) { + return; + } + + channel->legacy_sock_funcs = funcs; + channel->legacy_sock_funcs_cb_data = data; + ares_set_socket_functions_ex(channel, &legacy_socket_functions, channel); +} diff --git a/deps/cares/src/lib/ares_setup.h b/deps/cares/src/lib/ares_setup.h index b6ce077ff64758..8890c3c338bf15 100644 --- a/deps/cares/src/lib/ares_setup.h +++ b/deps/cares/src/lib/ares_setup.h @@ -199,51 +199,15 @@ #endif -#ifdef __hpux -# if !defined(_XOPEN_SOURCE_EXTENDED) || defined(_KERNEL) -# ifdef _APP32_64BIT_OFF_T -# define OLD_APP32_64BIT_OFF_T _APP32_64BIT_OFF_T -# undef _APP32_64BIT_OFF_T -# else -# undef OLD_APP32_64BIT_OFF_T -# endif -# endif -#endif - -#ifdef __hpux -# if !defined(_XOPEN_SOURCE_EXTENDED) || defined(_KERNEL) -# ifdef OLD_APP32_64BIT_OFF_T -# define _APP32_64BIT_OFF_T OLD_APP32_64BIT_OFF_T -# undef OLD_APP32_64BIT_OFF_T -# endif -# endif -#endif - - -/* - * Definition of timeval struct for platforms that don't have it. - */ +/* Definition of timeval struct for platforms that don't have it. */ #ifndef HAVE_STRUCT_TIMEVAL struct timeval { - long tv_sec; - long tv_usec; + ares_int64_t tv_sec; + long tv_usec; }; #endif -/* - * Function-like macro definition used to close a socket. - */ - -#if defined(HAVE_CLOSESOCKET) -# define sclose(x) closesocket((x)) -#elif defined(HAVE_CLOSESOCKET_CAMEL) -# define sclose(x) CloseSocket((x)) -#elif defined(HAVE_CLOSE_S) -# define sclose(x) close_s((x)) -#else -# define sclose(x) close((x)) -#endif /* * Macro used to include code only in debug builds. @@ -257,111 +221,4 @@ struct timeval { } while (0) #endif -/* - * Macro SOCKERRNO / SET_SOCKERRNO() returns / sets the *socket-related* errno - * (or equivalent) on this platform to hide platform details to code using it. - */ - -#ifdef USE_WINSOCK -# define SOCKERRNO ((int)WSAGetLastError()) -# define SET_SOCKERRNO(x) (WSASetLastError((int)(x))) -#else -# define SOCKERRNO (errno) -# define SET_SOCKERRNO(x) (errno = (x)) -#endif - - -/* - * Macro ERRNO / SET_ERRNO() returns / sets the NOT *socket-related* errno - * (or equivalent) on this platform to hide platform details to code using it. - */ - -#if defined(WIN32) && !defined(WATT32) -# define ERRNO ((int)GetLastError()) -# define SET_ERRNO(x) (SetLastError((DWORD)(x))) -#else -# define ERRNO (errno) -# define SET_ERRNO(x) (errno = (x)) -#endif - - -/* - * Portable error number symbolic names defined to Winsock error codes. - */ - -#ifdef USE_WINSOCK -# undef EBADF /* override definition in errno.h */ -# define EBADF WSAEBADF -# undef EINTR /* override definition in errno.h */ -# define EINTR WSAEINTR -# undef EINVAL /* override definition in errno.h */ -# define EINVAL WSAEINVAL -# undef EWOULDBLOCK /* override definition in errno.h */ -# define EWOULDBLOCK WSAEWOULDBLOCK -# undef EINPROGRESS /* override definition in errno.h */ -# define EINPROGRESS WSAEINPROGRESS -# undef EALREADY /* override definition in errno.h */ -# define EALREADY WSAEALREADY -# undef ENOTSOCK /* override definition in errno.h */ -# define ENOTSOCK WSAENOTSOCK -# undef EDESTADDRREQ /* override definition in errno.h */ -# define EDESTADDRREQ WSAEDESTADDRREQ -# undef EMSGSIZE /* override definition in errno.h */ -# define EMSGSIZE WSAEMSGSIZE -# undef EPROTOTYPE /* override definition in errno.h */ -# define EPROTOTYPE WSAEPROTOTYPE -# undef ENOPROTOOPT /* override definition in errno.h */ -# define ENOPROTOOPT WSAENOPROTOOPT -# undef EPROTONOSUPPORT /* override definition in errno.h */ -# define EPROTONOSUPPORT WSAEPROTONOSUPPORT -# define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT -# undef EOPNOTSUPP /* override definition in errno.h */ -# define EOPNOTSUPP WSAEOPNOTSUPP -# define EPFNOSUPPORT WSAEPFNOSUPPORT -# undef EAFNOSUPPORT /* override definition in errno.h */ -# define EAFNOSUPPORT WSAEAFNOSUPPORT -# undef EADDRINUSE /* override definition in errno.h */ -# define EADDRINUSE WSAEADDRINUSE -# undef EADDRNOTAVAIL /* override definition in errno.h */ -# define EADDRNOTAVAIL WSAEADDRNOTAVAIL -# undef ENETDOWN /* override definition in errno.h */ -# define ENETDOWN WSAENETDOWN -# undef ENETUNREACH /* override definition in errno.h */ -# define ENETUNREACH WSAENETUNREACH -# undef ENETRESET /* override definition in errno.h */ -# define ENETRESET WSAENETRESET -# undef ECONNABORTED /* override definition in errno.h */ -# define ECONNABORTED WSAECONNABORTED -# undef ECONNRESET /* override definition in errno.h */ -# define ECONNRESET WSAECONNRESET -# undef ENOBUFS /* override definition in errno.h */ -# define ENOBUFS WSAENOBUFS -# undef EISCONN /* override definition in errno.h */ -# define EISCONN WSAEISCONN -# undef ENOTCONN /* override definition in errno.h */ -# define ENOTCONN WSAENOTCONN -# define ESHUTDOWN WSAESHUTDOWN -# define ETOOMANYREFS WSAETOOMANYREFS -# undef ETIMEDOUT /* override definition in errno.h */ -# define ETIMEDOUT WSAETIMEDOUT -# undef ECONNREFUSED /* override definition in errno.h */ -# define ECONNREFUSED WSAECONNREFUSED -# undef ELOOP /* override definition in errno.h */ -# define ELOOP WSAELOOP -# ifndef ENAMETOOLONG /* possible previous definition in errno.h */ -# define ENAMETOOLONG WSAENAMETOOLONG -# endif -# define EHOSTDOWN WSAEHOSTDOWN -# undef EHOSTUNREACH /* override definition in errno.h */ -# define EHOSTUNREACH WSAEHOSTUNREACH -# ifndef ENOTEMPTY /* possible previous definition in errno.h */ -# define ENOTEMPTY WSAENOTEMPTY -# endif -# define EPROCLIM WSAEPROCLIM -# define EUSERS WSAEUSERS -# define EDQUOT WSAEDQUOT -# define ESTALE WSAESTALE -# define EREMOTE WSAEREMOTE -#endif - #endif /* __ARES_SETUP_H */ diff --git a/deps/cares/src/lib/ares_socket.c b/deps/cares/src/lib/ares_socket.c new file mode 100644 index 00000000000000..df02fd61b60b14 --- /dev/null +++ b/deps/cares/src/lib/ares_socket.c @@ -0,0 +1,424 @@ +/* MIT License + * + * Copyright (c) Massachusetts Institute of Technology + * Copyright (c) The c-ares project and its contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * SPDX-License-Identifier: MIT + */ +#include "ares_private.h" +#ifdef HAVE_SYS_UIO_H +# include +#endif +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETINET_TCP_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_SYS_IOCTL_H +# include +#endif +#ifdef NETWARE +# include +#endif + +#include +#include +#include + +static ares_conn_err_t ares_socket_deref_error(int err) +{ + switch (err) { +#if defined(EWOULDBLOCK) + case EWOULDBLOCK: + return ARES_CONN_ERR_WOULDBLOCK; +#endif +#if defined(EAGAIN) && (!defined(EWOULDBLOCK) || EAGAIN != EWOULDBLOCK) + case EAGAIN: + return ARES_CONN_ERR_WOULDBLOCK; +#endif + case EINPROGRESS: + return ARES_CONN_ERR_WOULDBLOCK; + case ENETDOWN: + return ARES_CONN_ERR_NETDOWN; + case ENETUNREACH: + return ARES_CONN_ERR_NETUNREACH; + case ECONNABORTED: + return ARES_CONN_ERR_CONNABORTED; + case ECONNRESET: + return ARES_CONN_ERR_CONNRESET; + case ECONNREFUSED: + return ARES_CONN_ERR_CONNREFUSED; + case ETIMEDOUT: + return ARES_CONN_ERR_CONNTIMEDOUT; + case EHOSTDOWN: + return ARES_CONN_ERR_HOSTDOWN; + case EHOSTUNREACH: + return ARES_CONN_ERR_HOSTUNREACH; + case EINTR: + return ARES_CONN_ERR_INTERRUPT; + case EAFNOSUPPORT: + return ARES_CONN_ERR_AFNOSUPPORT; + case EADDRNOTAVAIL: + return ARES_CONN_ERR_BADADDR; + default: + break; + } + + return ARES_CONN_ERR_FAILURE; +} + +ares_bool_t ares_sockaddr_addr_eq(const struct sockaddr *sa, + const struct ares_addr *aa) +{ + const void *addr1; + const void *addr2; + + if (sa->sa_family == aa->family) { + switch (aa->family) { + case AF_INET: + addr1 = &aa->addr.addr4; + addr2 = &(CARES_INADDR_CAST(const struct sockaddr_in *, sa))->sin_addr; + if (memcmp(addr1, addr2, sizeof(aa->addr.addr4)) == 0) { + return ARES_TRUE; /* match */ + } + break; + case AF_INET6: + addr1 = &aa->addr.addr6; + addr2 = + &(CARES_INADDR_CAST(const struct sockaddr_in6 *, sa))->sin6_addr; + if (memcmp(addr1, addr2, sizeof(aa->addr.addr6)) == 0) { + return ARES_TRUE; /* match */ + } + break; + default: + break; /* LCOV_EXCL_LINE */ + } + } + return ARES_FALSE; /* different */ +} + +ares_conn_err_t ares_socket_write(ares_channel_t *channel, ares_socket_t fd, + const void *data, size_t len, size_t *written, + const struct sockaddr *sa, + ares_socklen_t salen) +{ + int flags = 0; + ares_ssize_t rv; + ares_conn_err_t err = ARES_CONN_ERR_SUCCESS; + +#ifdef HAVE_MSG_NOSIGNAL + flags |= MSG_NOSIGNAL; +#endif + + rv = channel->sock_funcs.asendto(fd, data, len, flags, sa, salen, + channel->sock_func_cb_data); + if (rv <= 0) { + err = ares_socket_deref_error(SOCKERRNO); + } else { + *written = (size_t)rv; + } + return err; +} + +ares_conn_err_t ares_socket_recv(ares_channel_t *channel, ares_socket_t s, + ares_bool_t is_tcp, void *data, + size_t data_len, size_t *read_bytes) +{ + ares_ssize_t rv; + + *read_bytes = 0; + + rv = channel->sock_funcs.arecvfrom(s, data, data_len, 0, NULL, 0, + channel->sock_func_cb_data); + + if (rv > 0) { + *read_bytes = (size_t)rv; + return ARES_CONN_ERR_SUCCESS; + } + + if (rv == 0) { + /* UDP allows 0-byte packets and is connectionless, so this is success */ + if (!is_tcp) { + return ARES_CONN_ERR_SUCCESS; + } else { + return ARES_CONN_ERR_CONNCLOSED; + } + } + + /* If we're here, rv<0 */ + return ares_socket_deref_error(SOCKERRNO); +} + +ares_conn_err_t ares_socket_recvfrom(ares_channel_t *channel, ares_socket_t s, + ares_bool_t is_tcp, void *data, + size_t data_len, int flags, + struct sockaddr *from, + ares_socklen_t *from_len, + size_t *read_bytes) +{ + ares_ssize_t rv; + + rv = channel->sock_funcs.arecvfrom(s, data, data_len, flags, from, from_len, + channel->sock_func_cb_data); + + if (rv > 0) { + *read_bytes = (size_t)rv; + return ARES_CONN_ERR_SUCCESS; + } + + if (rv == 0) { + /* UDP allows 0-byte packets and is connectionless, so this is success */ + if (!is_tcp) { + return ARES_CONN_ERR_SUCCESS; + } else { + return ARES_CONN_ERR_CONNCLOSED; + } + } + + /* If we're here, rv<0 */ + return ares_socket_deref_error(SOCKERRNO); +} + +ares_conn_err_t ares_socket_enable_tfo(const ares_channel_t *channel, + ares_socket_t fd) +{ + ares_bool_t opt = ARES_TRUE; + + if (channel->sock_funcs.asetsockopt(fd, ARES_SOCKET_OPT_TCP_FASTOPEN, + (void *)&opt, sizeof(opt), + channel->sock_func_cb_data) != 0) { + return ARES_CONN_ERR_NOTIMP; + } + + return ARES_CONN_ERR_SUCCESS; +} + +ares_status_t ares_socket_configure(ares_channel_t *channel, int family, + ares_bool_t is_tcp, ares_socket_t fd) +{ + union { + struct sockaddr sa; + struct sockaddr_in sa4; + struct sockaddr_in6 sa6; + } local; + + ares_socklen_t bindlen = 0; + int rv; + unsigned int bind_flags = 0; + + /* Set the socket's send and receive buffer sizes. */ + if (channel->socket_send_buffer_size > 0) { + rv = channel->sock_funcs.asetsockopt( + fd, ARES_SOCKET_OPT_SENDBUF_SIZE, + (void *)&channel->socket_send_buffer_size, + sizeof(channel->socket_send_buffer_size), channel->sock_func_cb_data); + if (rv != 0 && SOCKERRNO != ENOSYS) { + return ARES_ECONNREFUSED; /* LCOV_EXCL_LINE: UntestablePath */ + } + } + + if (channel->socket_receive_buffer_size > 0) { + rv = channel->sock_funcs.asetsockopt( + fd, ARES_SOCKET_OPT_RECVBUF_SIZE, + (void *)&channel->socket_receive_buffer_size, + sizeof(channel->socket_receive_buffer_size), channel->sock_func_cb_data); + if (rv != 0 && SOCKERRNO != ENOSYS) { + return ARES_ECONNREFUSED; /* LCOV_EXCL_LINE: UntestablePath */ + } + } + + /* Bind to network interface if configured */ + if (ares_strlen(channel->local_dev_name)) { + /* Prior versions silently ignored failure, so we need to maintain that + * compatibility */ + (void)channel->sock_funcs.asetsockopt( + fd, ARES_SOCKET_OPT_BIND_DEVICE, channel->local_dev_name, + sizeof(channel->local_dev_name), channel->sock_func_cb_data); + } + + /* Bind to ip address if configured */ + if (family == AF_INET && channel->local_ip4) { + memset(&local.sa4, 0, sizeof(local.sa4)); + local.sa4.sin_family = AF_INET; + local.sa4.sin_addr.s_addr = htonl(channel->local_ip4); + bindlen = sizeof(local.sa4); + } else if (family == AF_INET6 && + memcmp(channel->local_ip6, ares_in6addr_any._S6_un._S6_u8, + sizeof(channel->local_ip6)) != 0) { + /* Only if not link-local and an ip other than "::" is specified */ + memset(&local.sa6, 0, sizeof(local.sa6)); + local.sa6.sin6_family = AF_INET6; + memcpy(&local.sa6.sin6_addr, channel->local_ip6, + sizeof(channel->local_ip6)); + bindlen = sizeof(local.sa6); + } + + + if (bindlen && channel->sock_funcs.abind != NULL) { + bind_flags |= ARES_SOCKET_BIND_CLIENT; + if (is_tcp) { + bind_flags |= ARES_SOCKET_BIND_TCP; + } + if (channel->sock_funcs.abind(fd, bind_flags, &local.sa, bindlen, + channel->sock_func_cb_data) != 0) { + return ARES_ECONNREFUSED; + } + } + + return ARES_SUCCESS; +} + +ares_bool_t ares_sockaddr_to_ares_addr(struct ares_addr *ares_addr, + unsigned short *port, + const struct sockaddr *sockaddr) +{ + if (sockaddr->sa_family == AF_INET) { + /* NOTE: memcpy sockaddr_in due to alignment issues found by UBSAN due to + * dnsinfo packing on MacOS */ + struct sockaddr_in sockaddr_in; + memcpy(&sockaddr_in, sockaddr, sizeof(sockaddr_in)); + + ares_addr->family = AF_INET; + memcpy(&ares_addr->addr.addr4, &(sockaddr_in.sin_addr), + sizeof(ares_addr->addr.addr4)); + + if (port) { + *port = ntohs(sockaddr_in.sin_port); + } + return ARES_TRUE; + } + + if (sockaddr->sa_family == AF_INET6) { + /* NOTE: memcpy sockaddr_in6 due to alignment issues found by UBSAN due to + * dnsinfo packing on MacOS */ + struct sockaddr_in6 sockaddr_in6; + memcpy(&sockaddr_in6, sockaddr, sizeof(sockaddr_in6)); + + ares_addr->family = AF_INET6; + memcpy(&ares_addr->addr.addr6, &(sockaddr_in6.sin6_addr), + sizeof(ares_addr->addr.addr6)); + if (port) { + *port = ntohs(sockaddr_in6.sin6_port); + } + return ARES_TRUE; + } + + return ARES_FALSE; +} + +ares_conn_err_t ares_socket_open(ares_socket_t *sock, ares_channel_t *channel, + int af, int type, int protocol) +{ + ares_socket_t s; + + *sock = ARES_SOCKET_BAD; + + s = + channel->sock_funcs.asocket(af, type, protocol, channel->sock_func_cb_data); + + if (s == ARES_SOCKET_BAD) { + return ares_socket_deref_error(SOCKERRNO); + } + + *sock = s; + + return ARES_CONN_ERR_SUCCESS; +} + +ares_conn_err_t ares_socket_connect(ares_channel_t *channel, + ares_socket_t sockfd, ares_bool_t is_tfo, + const struct sockaddr *addr, + ares_socklen_t addrlen) +{ + ares_conn_err_t err = ARES_CONN_ERR_SUCCESS; + unsigned int flags = 0; + + if (is_tfo) { + flags |= ARES_SOCKET_CONN_TCP_FASTOPEN; + } + + do { + int rv; + + rv = channel->sock_funcs.aconnect(sockfd, addr, addrlen, flags, + channel->sock_func_cb_data); + + if (rv < 0) { + err = ares_socket_deref_error(SOCKERRNO); + } else { + err = ARES_CONN_ERR_SUCCESS; + } + } while (err == ARES_CONN_ERR_INTERRUPT); + + return err; +} + +void ares_socket_close(ares_channel_t *channel, ares_socket_t s) +{ + if (channel == NULL || s == ARES_SOCKET_BAD) { + return; + } + + channel->sock_funcs.aclose(s, channel->sock_func_cb_data); +} + +void ares_set_socket_callback(ares_channel_t *channel, + ares_sock_create_callback cb, void *data) +{ + if (channel == NULL) { + return; + } + channel->sock_create_cb = cb; + channel->sock_create_cb_data = data; +} + +void ares_set_socket_configure_callback(ares_channel_t *channel, + ares_sock_config_callback cb, + void *data) +{ + if (channel == NULL || channel->optmask & ARES_OPT_EVENT_THREAD) { + return; + } + channel->sock_config_cb = cb; + channel->sock_config_cb_data = data; +} + +void ares_set_pending_write_cb(ares_channel_t *channel, + ares_pending_write_cb callback, void *user_data) +{ + if (channel == NULL || channel->optmask & ARES_OPT_EVENT_THREAD) { + return; + } + channel->notify_pending_write_cb = callback; + channel->notify_pending_write_cb_data = user_data; +} diff --git a/deps/cares/src/lib/ares_socket.h b/deps/cares/src/lib/ares_socket.h new file mode 100644 index 00000000000000..24a99ab3316943 --- /dev/null +++ b/deps/cares/src/lib/ares_socket.h @@ -0,0 +1,163 @@ +/* MIT License + * + * Copyright (c) 2024 Brad House + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * SPDX-License-Identifier: MIT + */ + +#ifndef __ARES_SOCKET_H +#define __ARES_SOCKET_H + +/* Macro SOCKERRNO / SET_SOCKERRNO() returns / sets the *socket-related* errno + * (or equivalent) on this platform to hide platform details to code using it. + */ +#ifdef USE_WINSOCK +# define SOCKERRNO ((int)WSAGetLastError()) +# define SET_SOCKERRNO(x) (WSASetLastError((int)(x))) +#else +# define SOCKERRNO (errno) +# define SET_SOCKERRNO(x) (errno = (x)) +#endif + +/* Portable error number symbolic names defined to Winsock error codes. */ +#ifdef USE_WINSOCK +# undef EBADF /* override definition in errno.h */ +# define EBADF WSAEBADF +# undef EINTR /* override definition in errno.h */ +# define EINTR WSAEINTR +# undef EINVAL /* override definition in errno.h */ +# define EINVAL WSAEINVAL +# undef EWOULDBLOCK /* override definition in errno.h */ +# define EWOULDBLOCK WSAEWOULDBLOCK +# undef EINPROGRESS /* override definition in errno.h */ +# define EINPROGRESS WSAEINPROGRESS +# undef EALREADY /* override definition in errno.h */ +# define EALREADY WSAEALREADY +# undef ENOTSOCK /* override definition in errno.h */ +# define ENOTSOCK WSAENOTSOCK +# undef EDESTADDRREQ /* override definition in errno.h */ +# define EDESTADDRREQ WSAEDESTADDRREQ +# undef EMSGSIZE /* override definition in errno.h */ +# define EMSGSIZE WSAEMSGSIZE +# undef EPROTOTYPE /* override definition in errno.h */ +# define EPROTOTYPE WSAEPROTOTYPE +# undef ENOPROTOOPT /* override definition in errno.h */ +# define ENOPROTOOPT WSAENOPROTOOPT +# undef EPROTONOSUPPORT /* override definition in errno.h */ +# define EPROTONOSUPPORT WSAEPROTONOSUPPORT +# define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT +# undef EOPNOTSUPP /* override definition in errno.h */ +# define EOPNOTSUPP WSAEOPNOTSUPP +# undef ENOSYS /* override definition in errno.h */ +# define ENOSYS WSAEOPNOTSUPP +# define EPFNOSUPPORT WSAEPFNOSUPPORT +# undef EAFNOSUPPORT /* override definition in errno.h */ +# define EAFNOSUPPORT WSAEAFNOSUPPORT +# undef EADDRINUSE /* override definition in errno.h */ +# define EADDRINUSE WSAEADDRINUSE +# undef EADDRNOTAVAIL /* override definition in errno.h */ +# define EADDRNOTAVAIL WSAEADDRNOTAVAIL +# undef ENETDOWN /* override definition in errno.h */ +# define ENETDOWN WSAENETDOWN +# undef ENETUNREACH /* override definition in errno.h */ +# define ENETUNREACH WSAENETUNREACH +# undef ENETRESET /* override definition in errno.h */ +# define ENETRESET WSAENETRESET +# undef ECONNABORTED /* override definition in errno.h */ +# define ECONNABORTED WSAECONNABORTED +# undef ECONNRESET /* override definition in errno.h */ +# define ECONNRESET WSAECONNRESET +# undef ENOBUFS /* override definition in errno.h */ +# define ENOBUFS WSAENOBUFS +# undef EISCONN /* override definition in errno.h */ +# define EISCONN WSAEISCONN +# undef ENOTCONN /* override definition in errno.h */ +# define ENOTCONN WSAENOTCONN +# define ESHUTDOWN WSAESHUTDOWN +# define ETOOMANYREFS WSAETOOMANYREFS +# undef ETIMEDOUT /* override definition in errno.h */ +# define ETIMEDOUT WSAETIMEDOUT +# undef ECONNREFUSED /* override definition in errno.h */ +# define ECONNREFUSED WSAECONNREFUSED +# undef ELOOP /* override definition in errno.h */ +# define ELOOP WSAELOOP +# ifndef ENAMETOOLONG /* possible previous definition in errno.h */ +# define ENAMETOOLONG WSAENAMETOOLONG +# endif +# define EHOSTDOWN WSAEHOSTDOWN +# undef EHOSTUNREACH /* override definition in errno.h */ +# define EHOSTUNREACH WSAEHOSTUNREACH +# ifndef ENOTEMPTY /* possible previous definition in errno.h */ +# define ENOTEMPTY WSAENOTEMPTY +# endif +# define EPROCLIM WSAEPROCLIM +# define EUSERS WSAEUSERS +# define EDQUOT WSAEDQUOT +# define ESTALE WSAESTALE +# define EREMOTE WSAEREMOTE +#endif + +/*! Socket errors */ +typedef enum { + ARES_CONN_ERR_SUCCESS = 0, /*!< Success */ + ARES_CONN_ERR_WOULDBLOCK = 1, /*!< Operation would block */ + ARES_CONN_ERR_CONNCLOSED = 2, /*!< Connection closed (gracefully) */ + ARES_CONN_ERR_CONNABORTED = 3, /*!< Connection Aborted */ + ARES_CONN_ERR_CONNRESET = 4, /*!< Connection Reset */ + ARES_CONN_ERR_CONNREFUSED = 5, /*!< Connection Refused */ + ARES_CONN_ERR_CONNTIMEDOUT = 6, /*!< Connection Timed Out */ + ARES_CONN_ERR_HOSTDOWN = 7, /*!< Host Down */ + ARES_CONN_ERR_HOSTUNREACH = 8, /*!< Host Unreachable */ + ARES_CONN_ERR_NETDOWN = 9, /*!< Network Down */ + ARES_CONN_ERR_NETUNREACH = 10, /*!< Network Unreachable */ + ARES_CONN_ERR_INTERRUPT = 11, /*!< Call interrupted by signal, repeat */ + ARES_CONN_ERR_AFNOSUPPORT = 12, /*!< Address family not supported */ + ARES_CONN_ERR_BADADDR = 13, /*!< Bad Address / Unavailable */ + ARES_CONN_ERR_NOMEM = 14, /*!< Out of memory */ + ARES_CONN_ERR_INVALID = 15, /*!< Invalid Usage */ + ARES_CONN_ERR_TOOLARGE = 16, /*!< Request size too large */ + ARES_CONN_ERR_NOTIMP = 17, /*!< Not implemented */ + ARES_CONN_ERR_FAILURE = 99 /*!< Generic failure */ +} ares_conn_err_t; + +ares_bool_t ares_sockaddr_addr_eq(const struct sockaddr *sa, + const struct ares_addr *aa); +ares_status_t ares_socket_configure(ares_channel_t *channel, int family, + ares_bool_t is_tcp, ares_socket_t fd); +ares_conn_err_t ares_socket_enable_tfo(const ares_channel_t *channel, + ares_socket_t fd); +ares_conn_err_t ares_socket_open(ares_socket_t *sock, ares_channel_t *channel, + int af, int type, int protocol); +ares_bool_t ares_socket_try_again(int errnum); +void ares_socket_close(ares_channel_t *channel, ares_socket_t s); +ares_conn_err_t ares_socket_connect(ares_channel_t *channel, + ares_socket_t sockfd, ares_bool_t is_tfo, + const struct sockaddr *addr, + ares_socklen_t addrlen); +ares_bool_t ares_sockaddr_to_ares_addr(struct ares_addr *ares_addr, + unsigned short *port, + const struct sockaddr *sockaddr); +ares_conn_err_t ares_socket_write(ares_channel_t *channel, ares_socket_t fd, + const void *data, size_t len, size_t *written, + const struct sockaddr *sa, + ares_socklen_t salen); +#endif diff --git a/deps/cares/src/lib/ares__sortaddrinfo.c b/deps/cares/src/lib/ares_sortaddrinfo.c similarity index 94% rename from deps/cares/src/lib/ares__sortaddrinfo.c rename to deps/cares/src/lib/ares_sortaddrinfo.c index 1aab81ecf84ce7..e6c21ea0ad712a 100644 --- a/deps/cares/src/lib/ares__sortaddrinfo.c +++ b/deps/cares/src/lib/ares_sortaddrinfo.c @@ -345,8 +345,9 @@ static int rfc6724_compare(const void *ptr1, const void *ptr2) static int find_src_addr(ares_channel_t *channel, const struct sockaddr *addr, struct sockaddr *src_addr) { - ares_socket_t sock; - ares_socklen_t len; + ares_socket_t sock; + ares_socklen_t len; + ares_conn_err_t err; switch (addr->sa_family) { case AF_INET: @@ -360,25 +361,27 @@ static int find_src_addr(ares_channel_t *channel, const struct sockaddr *addr, return 0; } - sock = ares__open_socket(channel, addr->sa_family, SOCK_DGRAM, IPPROTO_UDP); - if (sock == ARES_SOCKET_BAD) { - if (SOCKERRNO == EAFNOSUPPORT) { - return 0; - } else { - return -1; - } + err = + ares_socket_open(&sock, channel, addr->sa_family, SOCK_DGRAM, IPPROTO_UDP); + if (err == ARES_CONN_ERR_AFNOSUPPORT) { + return 0; + } else if (err != ARES_CONN_ERR_SUCCESS) { + return -1; } - if (ares__connect_socket(channel, sock, addr, len) != ARES_SUCCESS) { - ares__close_socket(channel, sock); + err = ares_socket_connect(channel, sock, ARES_FALSE, addr, len); + if (err != ARES_CONN_ERR_SUCCESS && err != ARES_CONN_ERR_WOULDBLOCK) { + ares_socket_close(channel, sock); return 0; } - if (getsockname(sock, src_addr, &len) != 0) { - ares__close_socket(channel, sock); + if (channel->sock_funcs.agetsockname == NULL || + channel->sock_funcs.agetsockname(sock, src_addr, &len, + channel->sock_func_cb_data) != 0) { + ares_socket_close(channel, sock); return -1; } - ares__close_socket(channel, sock); + ares_socket_close(channel, sock); return 1; } @@ -386,8 +389,8 @@ static int find_src_addr(ares_channel_t *channel, const struct sockaddr *addr, * Sort the linked list starting at sentinel->ai_next in RFC6724 order. * Will leave the list unchanged if an error occurs. */ -ares_status_t ares__sortaddrinfo(ares_channel_t *channel, - struct ares_addrinfo_node *list_sentinel) +ares_status_t ares_sortaddrinfo(ares_channel_t *channel, + struct ares_addrinfo_node *list_sentinel) { struct ares_addrinfo_node *cur; size_t nelem = 0; diff --git a/deps/cares/src/lib/ares_sysconfig.c b/deps/cares/src/lib/ares_sysconfig.c index 61e6a423a7578a..9f0d7e5061ffe0 100644 --- a/deps/cares/src/lib/ares_sysconfig.c +++ b/deps/cares/src/lib/ares_sysconfig.c @@ -56,11 +56,11 @@ #endif #include "ares_inet_net_pton.h" -#include "ares_platform.h" #if defined(__MVS__) -static ares_status_t ares__init_sysconfig_mvs(ares_sysconfig_t *sysconfig) +static ares_status_t ares_init_sysconfig_mvs(const ares_channel_t *channel, + ares_sysconfig_t *sysconfig) { struct __res_state *res = 0; size_t count4; @@ -99,9 +99,9 @@ static ares_status_t ares__init_sysconfig_mvs(ares_sysconfig_t *sysconfig) addr.addr.addr4.s_addr = addr_in->sin_addr.s_addr; addr.family = AF_INET; - status = - ares__sconfig_append(&sysconfig->sconfig, &addr, htons(addr_in->sin_port), - htons(addr_in->sin_port), NULL); + status = ares_sconfig_append(channel, &sysconfig->sconfig, &addr, + htons(addr_in->sin_port), + htons(addr_in->sin_port), NULL); if (status != ARES_SUCCESS) { return status; @@ -116,9 +116,9 @@ static ares_status_t ares__init_sysconfig_mvs(ares_sysconfig_t *sysconfig) memcpy(&(addr.addr.addr6), &(addr_in->sin6_addr), sizeof(addr_in->sin6_addr)); - status = - ares__sconfig_append(&sysconfig->sconfig, &addr, htons(addr_in->sin_port), - htons(addr_in->sin_port), NULL); + status = ares_sconfig_append(channel, &sysconfig->sconfig, &addr, + htons(addr_in->sin_port), + htons(addr_in->sin_port), NULL); if (status != ARES_SUCCESS) { return status; @@ -130,7 +130,8 @@ static ares_status_t ares__init_sysconfig_mvs(ares_sysconfig_t *sysconfig) #endif #if defined(__riscos__) -static ares_status_t ares__init_sysconfig_riscos(ares_sysconfig_t *sysconfig) +static ares_status_t ares_init_sysconfig_riscos(const ares_channel_t *channel, + ares_sysconfig_t *sysconfig) { char *line; ares_status_t status = ARES_SUCCESS; @@ -153,8 +154,8 @@ static ares_status_t ares__init_sysconfig_riscos(ares_sysconfig_t *sysconfig) if (space) { *space = '\0'; } - status = - ares__sconfig_append_fromstr(&sysconfig->sconfig, pos, ARES_TRUE); + status = ares_sconfig_append_fromstr(channel, &sysconfig->sconfig, pos, + ARES_TRUE); if (status != ARES_SUCCESS) { break; } @@ -169,7 +170,8 @@ static ares_status_t ares__init_sysconfig_riscos(ares_sysconfig_t *sysconfig) #endif #if defined(WATT32) -static ares_status_t ares__init_sysconfig_watt32(ares_sysconfig_t *sysconfig) +static ares_status_t ares_init_sysconfig_watt32(const ares_channel_t *channel, + ares_sysconfig_t *sysconfig) { size_t i; ares_status_t status; @@ -182,7 +184,8 @@ static ares_status_t ares__init_sysconfig_watt32(ares_sysconfig_t *sysconfig) addr.family = AF_INET; addr.addr.addr4.s_addr = htonl(def_nameservers[i]); - status = ares__sconfig_append(&sysconfig->sconfig, &addr, 0, 0, NULL); + status = + ares_sconfig_append(channel, &sysconfig->sconfig, &addr, 0, 0, NULL); if (status != ARES_SUCCESS) { return status; @@ -194,7 +197,8 @@ static ares_status_t ares__init_sysconfig_watt32(ares_sysconfig_t *sysconfig) #endif #if defined(ANDROID) || defined(__ANDROID__) -static ares_status_t ares__init_sysconfig_android(ares_sysconfig_t *sysconfig) +static ares_status_t ares_init_sysconfig_android(const ares_channel_t *channel, + ares_sysconfig_t *sysconfig) { size_t i; char **dns_servers; @@ -211,8 +215,8 @@ static ares_status_t ares__init_sysconfig_android(ares_sysconfig_t *sysconfig) dns_servers = ares_get_android_server_list(MAX_DNS_PROPERTIES, &num_servers); if (dns_servers != NULL) { for (i = 0; i < num_servers; i++) { - status = ares__sconfig_append_fromstr(&sysconfig->sconfig, dns_servers[i], - ARES_TRUE); + status = ares_sconfig_append_fromstr(channel, &sysconfig->sconfig, + dns_servers[i], ARES_TRUE); if (status != ARES_SUCCESS) { return status; } @@ -224,7 +228,7 @@ static ares_status_t ares__init_sysconfig_android(ares_sysconfig_t *sysconfig) } domains = ares_get_android_search_domains_list(); - sysconfig->domains = ares__strsplit(domains, ", ", &sysconfig->ndomains); + sysconfig->domains = ares_strsplit(domains, ", ", &sysconfig->ndomains); ares_free(domains); # ifdef HAVE___SYSTEM_PROPERTY_GET @@ -243,8 +247,8 @@ static ares_status_t ares__init_sysconfig_android(ares_sysconfig_t *sysconfig) if (__system_property_get(propname, propvalue) < 1) { break; } - status = - ares__sconfig_append_fromstr(&sysconfig->sconfig, propvalue, ARES_TRUE); + status = ares_sconfig_append_fromstr(channel, &sysconfig->sconfig, + propvalue, ARES_TRUE); if (status != ARES_SUCCESS) { return status; } @@ -257,7 +261,9 @@ static ares_status_t ares__init_sysconfig_android(ares_sysconfig_t *sysconfig) #endif #if defined(CARES_USE_LIBRESOLV) -static ares_status_t ares__init_sysconfig_libresolv(ares_sysconfig_t *sysconfig) +static ares_status_t + ares_init_sysconfig_libresolv(const ares_channel_t *channel, + ares_sysconfig_t *sysconfig) { struct __res_state res; ares_status_t status = ARES_SUCCESS; @@ -265,7 +271,7 @@ static ares_status_t ares__init_sysconfig_libresolv(ares_sysconfig_t *sysconfig) int nscount; size_t i; size_t entries = 0; - ares__buf_t *ipbuf = NULL; + ares_buf_t *ipbuf = NULL; memset(&res, 0, sizeof(res)); @@ -295,58 +301,58 @@ static ares_status_t ares__init_sysconfig_libresolv(ares_sysconfig_t *sysconfig) /* [ip]:port%iface */ - ipbuf = ares__buf_create(); + ipbuf = ares_buf_create(); if (ipbuf == NULL) { status = ARES_ENOMEM; goto done; } - status = ares__buf_append_str(ipbuf, "["); + status = ares_buf_append_str(ipbuf, "["); if (status != ARES_SUCCESS) { goto done; } - status = ares__buf_append_str(ipbuf, ipaddr); + status = ares_buf_append_str(ipbuf, ipaddr); if (status != ARES_SUCCESS) { goto done; } - status = ares__buf_append_str(ipbuf, "]"); + status = ares_buf_append_str(ipbuf, "]"); if (status != ARES_SUCCESS) { goto done; } if (port) { - status = ares__buf_append_str(ipbuf, ":"); + status = ares_buf_append_str(ipbuf, ":"); if (status != ARES_SUCCESS) { goto done; } - status = ares__buf_append_num_dec(ipbuf, port, 0); + status = ares_buf_append_num_dec(ipbuf, port, 0); if (status != ARES_SUCCESS) { goto done; } } if (ll_scope) { - status = ares__buf_append_str(ipbuf, "%"); + status = ares_buf_append_str(ipbuf, "%"); if (status != ARES_SUCCESS) { goto done; } - status = ares__buf_append_num_dec(ipbuf, ll_scope, 0); + status = ares_buf_append_num_dec(ipbuf, ll_scope, 0); if (status != ARES_SUCCESS) { goto done; } } - ipstr = ares__buf_finish_str(ipbuf, NULL); + ipstr = ares_buf_finish_str(ipbuf, NULL); ipbuf = NULL; if (ipstr == NULL) { status = ARES_ENOMEM; goto done; } - status = - ares__sconfig_append_fromstr(&sysconfig->sconfig, ipstr, ARES_TRUE); + status = ares_sconfig_append_fromstr(channel, &sysconfig->sconfig, ipstr, + ARES_TRUE); ares_free(ipstr); if (status != ARES_SUCCESS) { @@ -400,7 +406,7 @@ static ares_status_t ares__init_sysconfig_libresolv(ares_sysconfig_t *sysconfig) } done: - ares__buf_destroy(ipbuf); + ares_buf_destroy(ipbuf); res_ndestroy(&res); return status; } @@ -408,8 +414,8 @@ static ares_status_t ares__init_sysconfig_libresolv(ares_sysconfig_t *sysconfig) static void ares_sysconfig_free(ares_sysconfig_t *sysconfig) { - ares__llist_destroy(sysconfig->sconfig); - ares__strsplit_free(sysconfig->domains, sysconfig->ndomains); + ares_llist_destroy(sysconfig->sconfig); + ares_strsplit_free(sysconfig->domains, sysconfig->ndomains); ares_free(sysconfig->sortlist); ares_free(sysconfig->lookups); memset(sysconfig, 0, sizeof(*sysconfig)); @@ -421,7 +427,7 @@ static ares_status_t ares_sysconfig_apply(ares_channel_t *channel, ares_status_t status; if (sysconfig->sconfig && !(channel->optmask & ARES_OPT_SERVERS)) { - status = ares__servers_update(channel, sysconfig->sconfig, ARES_FALSE); + status = ares_servers_update(channel, sysconfig->sconfig, ARES_FALSE); if (status != ARES_SUCCESS) { return status; } @@ -431,12 +437,12 @@ static ares_status_t ares_sysconfig_apply(ares_channel_t *channel, /* Make sure we duplicate first then replace so even if there is * ARES_ENOMEM, the channel stays in a good state */ char **temp = - ares__strsplit_duplicate(sysconfig->domains, sysconfig->ndomains); + ares_strsplit_duplicate(sysconfig->domains, sysconfig->ndomains); if (temp == NULL) { return ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ } - ares__strsplit_free(channel->domains, channel->ndomains); + ares_strsplit_free(channel->domains, channel->ndomains); channel->domains = temp; channel->ndomains = sysconfig->ndomains; } @@ -488,7 +494,7 @@ static ares_status_t ares_sysconfig_apply(ares_channel_t *channel, return ARES_SUCCESS; } -ares_status_t ares__init_by_sysconfig(ares_channel_t *channel) +ares_status_t ares_init_by_sysconfig(ares_channel_t *channel) { ares_status_t status; ares_sysconfig_t sysconfig; @@ -497,21 +503,21 @@ ares_status_t ares__init_by_sysconfig(ares_channel_t *channel) sysconfig.ndots = 1; /* Default value if not otherwise set */ #if defined(USE_WINSOCK) - status = ares__init_sysconfig_windows(&sysconfig); + status = ares_init_sysconfig_windows(channel, &sysconfig); #elif defined(__MVS__) - status = ares__init_sysconfig_mvs(&sysconfig); + status = ares_init_sysconfig_mvs(channel, &sysconfig); #elif defined(__riscos__) - status = ares__init_sysconfig_riscos(&sysconfig); + status = ares_init_sysconfig_riscos(channel, &sysconfig); #elif defined(WATT32) - status = ares__init_sysconfig_watt32(&sysconfig); + status = ares_init_sysconfig_watt32(channel, &sysconfig); #elif defined(ANDROID) || defined(__ANDROID__) - status = ares__init_sysconfig_android(&sysconfig); + status = ares_init_sysconfig_android(channel, &sysconfig); #elif defined(__APPLE__) - status = ares__init_sysconfig_macos(&sysconfig); + status = ares_init_sysconfig_macos(channel, &sysconfig); #elif defined(CARES_USE_LIBRESOLV) - status = ares__init_sysconfig_libresolv(&sysconfig); + status = ares_init_sysconfig_libresolv(channel, &sysconfig); #else - status = ares__init_sysconfig_files(channel, &sysconfig); + status = ares_init_sysconfig_files(channel, &sysconfig); #endif if (status != ARES_SUCCESS) { @@ -519,7 +525,7 @@ ares_status_t ares__init_by_sysconfig(ares_channel_t *channel) } /* Environment is supposed to override sysconfig */ - status = ares__init_by_environment(&sysconfig); + status = ares_init_by_environment(&sysconfig); if (status != ARES_SUCCESS) { goto done; } @@ -527,10 +533,10 @@ ares_status_t ares__init_by_sysconfig(ares_channel_t *channel) /* Lock when applying the configuration to the channel. Don't need to * lock prior to this. */ - ares__channel_lock(channel); + ares_channel_lock(channel); status = ares_sysconfig_apply(channel, &sysconfig); - ares__channel_unlock(channel); + ares_channel_unlock(channel); if (status != ARES_SUCCESS) { goto done; diff --git a/deps/cares/src/lib/ares_sysconfig_files.c b/deps/cares/src/lib/ares_sysconfig_files.c index 7b8bdbe41879d6..49bc330d9d346d 100644 --- a/deps/cares/src/lib/ares_sysconfig_files.c +++ b/deps/cares/src/lib/ares_sysconfig_files.c @@ -60,7 +60,6 @@ #endif #include "ares_inet_net_pton.h" -#include "ares_platform.h" static unsigned char ip_natural_mask(const struct ares_addr *addr) { @@ -110,7 +109,7 @@ static ares_bool_t sortlist_append(struct apattern **sortlist, size_t *nsort, return ARES_TRUE; } -static ares_status_t parse_sort(ares__buf_t *buf, struct apattern *pat) +static ares_status_t parse_sort(ares_buf_t *buf, struct apattern *pat) { ares_status_t status; const unsigned char ip_charset[] = "ABCDEFabcdef0123456789.:"; @@ -120,22 +119,22 @@ static ares_status_t parse_sort(ares__buf_t *buf, struct apattern *pat) memset(pat, 0, sizeof(*pat)); /* Consume any leading whitespace */ - ares__buf_consume_whitespace(buf, ARES_TRUE); + ares_buf_consume_whitespace(buf, ARES_TRUE); /* If no length, just ignore, return ENOTFOUND as an indicator */ - if (ares__buf_len(buf) == 0) { + if (ares_buf_len(buf) == 0) { return ARES_ENOTFOUND; } - ares__buf_tag(buf); + ares_buf_tag(buf); /* Consume ip address */ - if (ares__buf_consume_charset(buf, ip_charset, sizeof(ip_charset) - 1) == 0) { + if (ares_buf_consume_charset(buf, ip_charset, sizeof(ip_charset) - 1) == 0) { return ARES_EBADSTR; } /* Fetch ip address */ - status = ares__buf_tag_fetch_string(buf, ipaddr, sizeof(ipaddr)); + status = ares_buf_tag_fetch_string(buf, ipaddr, sizeof(ipaddr)); if (status != ARES_SUCCESS) { return status; } @@ -147,24 +146,24 @@ static ares_status_t parse_sort(ares__buf_t *buf, struct apattern *pat) } /* See if there is a subnet mask */ - if (ares__buf_begins_with(buf, (const unsigned char *)"/", 1)) { + if (ares_buf_begins_with(buf, (const unsigned char *)"/", 1)) { char maskstr[16]; const unsigned char ipv4_charset[] = "0123456789."; /* Consume / */ - ares__buf_consume(buf, 1); + ares_buf_consume(buf, 1); - ares__buf_tag(buf); + ares_buf_tag(buf); /* Consume mask */ - if (ares__buf_consume_charset(buf, ipv4_charset, - sizeof(ipv4_charset) - 1) == 0) { + if (ares_buf_consume_charset(buf, ipv4_charset, sizeof(ipv4_charset) - 1) == + 0) { return ARES_EBADSTR; } /* Fetch mask */ - status = ares__buf_tag_fetch_string(buf, maskstr, sizeof(maskstr)); + status = ares_buf_tag_fetch_string(buf, maskstr, sizeof(maskstr)); if (status != ARES_SUCCESS) { return status; } @@ -190,33 +189,34 @@ static ares_status_t parse_sort(ares__buf_t *buf, struct apattern *pat) return ARES_EBADSTR; } ptr = (const unsigned char *)&maskaddr.addr.addr4; - pat->mask = (unsigned char)(ares__count_bits_u8(ptr[0]) + - ares__count_bits_u8(ptr[1]) + - ares__count_bits_u8(ptr[2]) + - ares__count_bits_u8(ptr[3])); + pat->mask = (unsigned char)(ares_count_bits_u8(ptr[0]) + + ares_count_bits_u8(ptr[1]) + + ares_count_bits_u8(ptr[2]) + + ares_count_bits_u8(ptr[3])); } } else { pat->mask = ip_natural_mask(&pat->addr); } /* Consume any trailing whitespace */ - ares__buf_consume_whitespace(buf, ARES_TRUE); + ares_buf_consume_whitespace(buf, ARES_TRUE); /* If we have any trailing bytes other than whitespace, its a parse failure */ - if (ares__buf_len(buf) != 0) { + if (ares_buf_len(buf) != 0) { return ARES_EBADSTR; } return ARES_SUCCESS; } -ares_status_t ares__parse_sortlist(struct apattern **sortlist, size_t *nsort, - const char *str) +ares_status_t ares_parse_sortlist(struct apattern **sortlist, size_t *nsort, + const char *str) { - ares__buf_t *buf = NULL; - ares__llist_t *list = NULL; - ares_status_t status = ARES_SUCCESS; - ares__llist_node_t *node = NULL; + ares_buf_t *buf = NULL; + ares_status_t status = ARES_SUCCESS; + ares_array_t *arr = NULL; + size_t num = 0; + size_t i; if (sortlist == NULL || nsort == NULL || str == NULL) { return ARES_EFORMERR; /* LCOV_EXCL_LINE: DefensiveCoding */ @@ -229,22 +229,23 @@ ares_status_t ares__parse_sortlist(struct apattern **sortlist, size_t *nsort, *sortlist = NULL; *nsort = 0; - buf = ares__buf_create_const((const unsigned char *)str, ares_strlen(str)); + buf = ares_buf_create_const((const unsigned char *)str, ares_strlen(str)); if (buf == NULL) { status = ARES_ENOMEM; goto done; } /* Split on space or semicolon */ - status = ares__buf_split(buf, (const unsigned char *)" ;", 2, - ARES_BUF_SPLIT_NONE, 0, &list); + status = ares_buf_split(buf, (const unsigned char *)" ;", 2, + ARES_BUF_SPLIT_NONE, 0, &arr); if (status != ARES_SUCCESS) { goto done; } - for (node = ares__llist_node_first(list); node != NULL; - node = ares__llist_node_next(node)) { - ares__buf_t *entry = ares__llist_node_val(node); + num = ares_array_len(arr); + for (i = 0; i < num; i++) { + ares_buf_t **bufptr = ares_array_at(arr, i); + ares_buf_t *entry = *bufptr; struct apattern pat; @@ -266,8 +267,8 @@ ares_status_t ares__parse_sortlist(struct apattern **sortlist, size_t *nsort, status = ARES_SUCCESS; done: - ares__buf_destroy(buf); - ares__llist_destroy(list); + ares_buf_destroy(buf); + ares_array_destroy(arr); if (status != ARES_SUCCESS) { ares_free(*sortlist); @@ -283,12 +284,12 @@ static ares_status_t config_search(ares_sysconfig_t *sysconfig, const char *str, { if (sysconfig->domains && sysconfig->ndomains > 0) { /* if we already have some domains present, free them first */ - ares__strsplit_free(sysconfig->domains, sysconfig->ndomains); + ares_strsplit_free(sysconfig->domains, sysconfig->ndomains); sysconfig->domains = NULL; sysconfig->ndomains = 0; } - sysconfig->domains = ares__strsplit(str, ", ", &sysconfig->ndomains); + sysconfig->domains = ares_strsplit(str, ", ", &sysconfig->ndomains); if (sysconfig->domains == NULL) { return ARES_ENOMEM; } @@ -306,52 +307,45 @@ static ares_status_t config_search(ares_sysconfig_t *sysconfig, const char *str, return ARES_SUCCESS; } -static ares_status_t buf_fetch_string(ares__buf_t *buf, char *str, +static ares_status_t buf_fetch_string(ares_buf_t *buf, char *str, size_t str_len) { ares_status_t status; - ares__buf_tag(buf); - ares__buf_consume(buf, ares__buf_len(buf)); + ares_buf_tag(buf); + ares_buf_consume(buf, ares_buf_len(buf)); - status = ares__buf_tag_fetch_string(buf, str, str_len); + status = ares_buf_tag_fetch_string(buf, str, str_len); return status; } -static ares_status_t config_lookup(ares_sysconfig_t *sysconfig, - ares__buf_t *buf, const char *separators) +static ares_status_t config_lookup(ares_sysconfig_t *sysconfig, ares_buf_t *buf, + const char *separators) { - ares_status_t status; - char lookupstr[32]; - size_t lookupstr_cnt = 0; - ares__llist_t *lookups = NULL; - ares__llist_node_t *node; - size_t separators_len = ares_strlen(separators); - - status = ares__buf_split(buf, (const unsigned char *)separators, - separators_len, ARES_BUF_SPLIT_TRIM, 0, &lookups); + ares_status_t status; + char lookupstr[32]; + size_t lookupstr_cnt = 0; + char **lookups = NULL; + size_t num = 0; + size_t i; + size_t separators_len = ares_strlen(separators); + + status = + ares_buf_split_str(buf, (const unsigned char *)separators, separators_len, + ARES_BUF_SPLIT_TRIM, 0, &lookups, &num); if (status != ARES_SUCCESS) { goto done; } - memset(lookupstr, 0, sizeof(lookupstr)); - - for (node = ares__llist_node_first(lookups); node != NULL; - node = ares__llist_node_next(node)) { - char value[128]; - char ch; - ares__buf_t *valbuf = ares__llist_node_val(node); - - status = buf_fetch_string(valbuf, value, sizeof(value)); - if (status != ARES_SUCCESS) { - continue; - } + for (i = 0; i < num; i++) { + const char *value = lookups[i]; + char ch; - if (strcasecmp(value, "dns") == 0 || strcasecmp(value, "bind") == 0 || - strcasecmp(value, "resolv") == 0 || strcasecmp(value, "resolve") == 0) { + if (ares_strcaseeq(value, "dns") || ares_strcaseeq(value, "bind") || + ares_strcaseeq(value, "resolv") || ares_strcaseeq(value, "resolve")) { ch = 'b'; - } else if (strcasecmp(value, "files") == 0 || - strcasecmp(value, "file") == 0 || - strcasecmp(value, "local") == 0) { + } else if (ares_strcaseeq(value, "files") || + ares_strcaseeq(value, "file") || + ares_strcaseeq(value, "local")) { ch = 'f'; } else { continue; @@ -364,10 +358,12 @@ static ares_status_t config_lookup(ares_sysconfig_t *sysconfig, } if (lookupstr_cnt) { + lookupstr[lookupstr_cnt] = 0; ares_free(sysconfig->lookups); sysconfig->lookups = ares_strdup(lookupstr); if (sysconfig->lookups == NULL) { - return ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ + status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ + goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } } @@ -377,83 +373,85 @@ static ares_status_t config_lookup(ares_sysconfig_t *sysconfig, if (status != ARES_ENOMEM) { status = ARES_SUCCESS; } - ares__llist_destroy(lookups); + ares_free_array(lookups, num, ares_free); return status; } static ares_status_t process_option(ares_sysconfig_t *sysconfig, - ares__buf_t *option) + ares_buf_t *option) { - ares__llist_t *kv = NULL; - char key[32] = ""; - char val[32] = ""; - unsigned int valint = 0; - ares_status_t status; + char **kv = NULL; + size_t num = 0; + const char *key; + const char *val; + unsigned int valint = 0; + ares_status_t status; /* Split on : */ - status = ares__buf_split(option, (const unsigned char *)":", 1, - ARES_BUF_SPLIT_TRIM, 2, &kv); + status = ares_buf_split_str(option, (const unsigned char *)":", 1, + ARES_BUF_SPLIT_TRIM, 2, &kv, &num); if (status != ARES_SUCCESS) { goto done; } - status = buf_fetch_string(ares__llist_first_val(kv), key, sizeof(key)); - if (status != ARES_SUCCESS) { + if (num < 1) { + status = ARES_EBADSTR; goto done; } - if (ares__llist_len(kv) == 2) { - status = buf_fetch_string(ares__llist_last_val(kv), val, sizeof(val)); - if (status != ARES_SUCCESS) { - goto done; - } + + key = kv[0]; + if (num == 2) { + val = kv[1]; valint = (unsigned int)strtoul(val, NULL, 10); } - if (strcmp(key, "ndots") == 0) { + if (ares_streq(key, "ndots")) { sysconfig->ndots = valint; - } else if (strcmp(key, "retrans") == 0 || strcmp(key, "timeout") == 0) { + } else if (ares_streq(key, "retrans") || ares_streq(key, "timeout")) { if (valint == 0) { return ARES_EFORMERR; } sysconfig->timeout_ms = valint * 1000; - } else if (strcmp(key, "retry") == 0 || strcmp(key, "attempts") == 0) { + } else if (ares_streq(key, "retry") || ares_streq(key, "attempts")) { if (valint == 0) { return ARES_EFORMERR; } sysconfig->tries = valint; - } else if (strcmp(key, "rotate") == 0) { + } else if (ares_streq(key, "rotate")) { sysconfig->rotate = ARES_TRUE; - } else if (strcmp(key, "use-vc") == 0 || strcmp(key, "usevc") == 0) { + } else if (ares_streq(key, "use-vc") || ares_streq(key, "usevc")) { sysconfig->usevc = ARES_TRUE; } done: - ares__llist_destroy(kv); + ares_free_array(kv, num, ares_free); return status; } -ares_status_t ares__sysconfig_set_options(ares_sysconfig_t *sysconfig, - const char *str) +ares_status_t ares_sysconfig_set_options(ares_sysconfig_t *sysconfig, + const char *str) { - ares__buf_t *buf = NULL; - ares__llist_t *options = NULL; - ares_status_t status; - ares__llist_node_t *node; + ares_buf_t *buf = NULL; + ares_array_t *options = NULL; + size_t num; + size_t i; + ares_status_t status; - buf = ares__buf_create_const((const unsigned char *)str, ares_strlen(str)); + buf = ares_buf_create_const((const unsigned char *)str, ares_strlen(str)); if (buf == NULL) { return ARES_ENOMEM; } - status = ares__buf_split(buf, (const unsigned char *)" \t", 2, - ARES_BUF_SPLIT_TRIM, 0, &options); + status = ares_buf_split(buf, (const unsigned char *)" \t", 2, + ARES_BUF_SPLIT_TRIM, 0, &options); if (status != ARES_SUCCESS) { goto done; } - for (node = ares__llist_node_first(options); node != NULL; - node = ares__llist_node_next(node)) { - ares__buf_t *valbuf = ares__llist_node_val(node); + num = ares_array_len(options); + for (i = 0; i < num; i++) { + ares_buf_t **bufptr = ares_array_at(options, i); + ares_buf_t *valbuf = *bufptr; status = process_option(sysconfig, valbuf); /* Out of memory is the only fatal condition */ @@ -465,12 +463,12 @@ ares_status_t ares__sysconfig_set_options(ares_sysconfig_t *sysconfig, status = ARES_SUCCESS; done: - ares__llist_destroy(options); - ares__buf_destroy(buf); + ares_array_destroy(options); + ares_buf_destroy(buf); return status; } -ares_status_t ares__init_by_environment(ares_sysconfig_t *sysconfig) +ares_status_t ares_init_by_environment(ares_sysconfig_t *sysconfig) { const char *localdomain; const char *res_options; @@ -491,7 +489,7 @@ ares_status_t ares__init_by_environment(ares_sysconfig_t *sysconfig) res_options = getenv("RES_OPTIONS"); if (res_options) { - status = ares__sysconfig_set_options(sysconfig, res_options); + status = ares_sysconfig_set_options(sysconfig, res_options); if (status != ARES_SUCCESS) { return status; } @@ -551,70 +549,71 @@ ares_status_t ares__init_by_environment(ares_sysconfig_t *sysconfig) /* This function will only return ARES_SUCCESS or ARES_ENOMEM. Any other * conditions are ignored. Users may mess up config files, but we want to * process anything we can. */ -static ares_status_t parse_resolvconf_line(ares_sysconfig_t *sysconfig, - ares__buf_t *line) +static ares_status_t parse_resolvconf_line(const ares_channel_t *channel, + ares_sysconfig_t *sysconfig, + ares_buf_t *line) { char option[32]; char value[512]; ares_status_t status = ARES_SUCCESS; /* Ignore lines beginning with a comment */ - if (ares__buf_begins_with(line, (const unsigned char *)"#", 1) || - ares__buf_begins_with(line, (const unsigned char *)";", 1)) { + if (ares_buf_begins_with(line, (const unsigned char *)"#", 1) || + ares_buf_begins_with(line, (const unsigned char *)";", 1)) { return ARES_SUCCESS; } - ares__buf_tag(line); + ares_buf_tag(line); /* Shouldn't be possible, but if it happens, ignore the line. */ - if (ares__buf_consume_nonwhitespace(line) == 0) { + if (ares_buf_consume_nonwhitespace(line) == 0) { return ARES_SUCCESS; } - status = ares__buf_tag_fetch_string(line, option, sizeof(option)); + status = ares_buf_tag_fetch_string(line, option, sizeof(option)); if (status != ARES_SUCCESS) { return ARES_SUCCESS; } - ares__buf_consume_whitespace(line, ARES_TRUE); + ares_buf_consume_whitespace(line, ARES_TRUE); status = buf_fetch_string(line, value, sizeof(value)); if (status != ARES_SUCCESS) { return ARES_SUCCESS; } - ares__str_trim(value); + ares_str_trim(value); if (*value == 0) { return ARES_SUCCESS; } /* At this point we have a string option and a string value, both trimmed * of leading and trailing whitespace. Lets try to evaluate them */ - if (strcmp(option, "domain") == 0) { + if (ares_streq(option, "domain")) { /* Domain is legacy, don't overwrite an existing config set by search */ if (sysconfig->domains == NULL) { status = config_search(sysconfig, value, 1); } - } else if (strcmp(option, "lookup") == 0 || - strcmp(option, "hostresorder") == 0) { - ares__buf_tag_rollback(line); + } else if (ares_streq(option, "lookup") || + ares_streq(option, "hostresorder")) { + ares_buf_tag_rollback(line); status = config_lookup(sysconfig, line, " \t"); - } else if (strcmp(option, "search") == 0) { + } else if (ares_streq(option, "search")) { status = config_search(sysconfig, value, 0); - } else if (strcmp(option, "nameserver") == 0) { - status = - ares__sconfig_append_fromstr(&sysconfig->sconfig, value, ARES_TRUE); - } else if (strcmp(option, "sortlist") == 0) { + } else if (ares_streq(option, "nameserver")) { + status = ares_sconfig_append_fromstr(channel, &sysconfig->sconfig, value, + ARES_TRUE); + } else if (ares_streq(option, "sortlist")) { /* Ignore all failures except ENOMEM. If the sysadmin set a bad * sortlist, just ignore the sortlist, don't cause an inoperable * channel */ status = - ares__parse_sortlist(&sysconfig->sortlist, &sysconfig->nsortlist, value); + ares_parse_sortlist(&sysconfig->sortlist, &sysconfig->nsortlist, value); if (status != ARES_ENOMEM) { status = ARES_SUCCESS; } - } else if (strcmp(option, "options") == 0) { - status = ares__sysconfig_set_options(sysconfig, value); + } else if (ares_streq(option, "options")) { + status = ares_sysconfig_set_options(sysconfig, value); } return status; @@ -623,44 +622,51 @@ static ares_status_t parse_resolvconf_line(ares_sysconfig_t *sysconfig, /* This function will only return ARES_SUCCESS or ARES_ENOMEM. Any other * conditions are ignored. Users may mess up config files, but we want to * process anything we can. */ -static ares_status_t parse_nsswitch_line(ares_sysconfig_t *sysconfig, - ares__buf_t *line) +static ares_status_t parse_nsswitch_line(const ares_channel_t *channel, + ares_sysconfig_t *sysconfig, + ares_buf_t *line) { - char option[32]; - ares__buf_t *buf; - ares_status_t status = ARES_SUCCESS; - ares__llist_t *sects = NULL; + char option[32]; + ares_status_t status = ARES_SUCCESS; + ares_array_t *sects = NULL; + ares_buf_t **bufptr; + ares_buf_t *buf; + + (void)channel; /* Ignore lines beginning with a comment */ - if (ares__buf_begins_with(line, (const unsigned char *)"#", 1)) { + if (ares_buf_begins_with(line, (const unsigned char *)"#", 1)) { return ARES_SUCCESS; } /* database : values (space delimited) */ - status = ares__buf_split(line, (const unsigned char *)":", 1, - ARES_BUF_SPLIT_TRIM, 2, §s); + status = ares_buf_split(line, (const unsigned char *)":", 1, + ARES_BUF_SPLIT_TRIM, 2, §s); - if (status != ARES_SUCCESS || ares__llist_len(sects) != 2) { + if (status != ARES_SUCCESS || ares_array_len(sects) != 2) { goto done; } - buf = ares__llist_first_val(sects); + bufptr = ares_array_at(sects, 0); + buf = *bufptr; + status = buf_fetch_string(buf, option, sizeof(option)); if (status != ARES_SUCCESS) { goto done; } /* Only support "hosts:" */ - if (strcmp(option, "hosts") != 0) { + if (!ares_streq(option, "hosts")) { goto done; } /* Values are space separated */ - buf = ares__llist_last_val(sects); + bufptr = ares_array_at(sects, 1); + buf = *bufptr; status = config_lookup(sysconfig, buf, " \t"); done: - ares__llist_destroy(sects); + ares_array_destroy(sects); if (status != ARES_ENOMEM) { status = ARES_SUCCESS; } @@ -670,52 +676,59 @@ static ares_status_t parse_nsswitch_line(ares_sysconfig_t *sysconfig, /* This function will only return ARES_SUCCESS or ARES_ENOMEM. Any other * conditions are ignored. Users may mess up config files, but we want to * process anything we can. */ -static ares_status_t parse_svcconf_line(ares_sysconfig_t *sysconfig, - ares__buf_t *line) +static ares_status_t parse_svcconf_line(const ares_channel_t *channel, + ares_sysconfig_t *sysconfig, + ares_buf_t *line) { - char option[32]; - ares__buf_t *buf; - ares_status_t status = ARES_SUCCESS; - ares__llist_t *sects = NULL; + char option[32]; + ares_buf_t **bufptr; + ares_buf_t *buf; + ares_status_t status = ARES_SUCCESS; + ares_array_t *sects = NULL; + + (void)channel; /* Ignore lines beginning with a comment */ - if (ares__buf_begins_with(line, (const unsigned char *)"#", 1)) { + if (ares_buf_begins_with(line, (const unsigned char *)"#", 1)) { return ARES_SUCCESS; } /* database = values (comma delimited)*/ - status = ares__buf_split(line, (const unsigned char *)"=", 1, - ARES_BUF_SPLIT_TRIM, 2, §s); + status = ares_buf_split(line, (const unsigned char *)"=", 1, + ARES_BUF_SPLIT_TRIM, 2, §s); - if (status != ARES_SUCCESS || ares__llist_len(sects) != 2) { + if (status != ARES_SUCCESS || ares_array_len(sects) != 2) { goto done; } - buf = ares__llist_first_val(sects); + bufptr = ares_array_at(sects, 0); + buf = *bufptr; status = buf_fetch_string(buf, option, sizeof(option)); if (status != ARES_SUCCESS) { goto done; } /* Only support "hosts=" */ - if (strcmp(option, "hosts") != 0) { + if (!ares_streq(option, "hosts")) { goto done; } /* Values are comma separated */ - buf = ares__llist_last_val(sects); + bufptr = ares_array_at(sects, 1); + buf = *bufptr; status = config_lookup(sysconfig, buf, ","); done: - ares__llist_destroy(sects); + ares_array_destroy(sects); if (status != ARES_ENOMEM) { status = ARES_SUCCESS; } return status; } -typedef ares_status_t (*line_callback_t)(ares_sysconfig_t *sysconfig, - ares__buf_t *line); +typedef ares_status_t (*line_callback_t)(const ares_channel_t *channel, + ares_sysconfig_t *sysconfig, + ares_buf_t *line); /* Should only return: * ARES_ENOTFOUND - file not found @@ -724,56 +737,60 @@ typedef ares_status_t (*line_callback_t)(ares_sysconfig_t *sysconfig, * ARES_SUCCESS - file processed, doesn't necessarily mean it was a good * file, but we're not erroring out if we can't parse * something (or anything at all) */ -static ares_status_t process_config_lines(const char *filename, - ares_sysconfig_t *sysconfig, - line_callback_t cb) +static ares_status_t process_config_lines(const ares_channel_t *channel, + const char *filename, + ares_sysconfig_t *sysconfig, + line_callback_t cb) { - ares_status_t status = ARES_SUCCESS; - ares__llist_node_t *node; - ares__llist_t *lines = NULL; - ares__buf_t *buf = NULL; + ares_status_t status = ARES_SUCCESS; + ares_array_t *lines = NULL; + ares_buf_t *buf = NULL; + size_t num; + size_t i; - buf = ares__buf_create(); + buf = ares_buf_create(); if (buf == NULL) { status = ARES_ENOMEM; goto done; } - status = ares__buf_load_file(filename, buf); + status = ares_buf_load_file(filename, buf); if (status != ARES_SUCCESS) { goto done; } - status = ares__buf_split(buf, (const unsigned char *)"\n", 1, - ARES_BUF_SPLIT_TRIM, 0, &lines); + status = ares_buf_split(buf, (const unsigned char *)"\n", 1, + ARES_BUF_SPLIT_TRIM, 0, &lines); if (status != ARES_SUCCESS) { goto done; } - for (node = ares__llist_node_first(lines); node != NULL; - node = ares__llist_node_next(node)) { - ares__buf_t *line = ares__llist_node_val(node); + num = ares_array_len(lines); + for (i = 0; i < num; i++) { + ares_buf_t **bufptr = ares_array_at(lines, i); + ares_buf_t *line = *bufptr; - status = cb(sysconfig, line); + status = cb(channel, sysconfig, line); if (status != ARES_SUCCESS) { goto done; } } done: - ares__buf_destroy(buf); - ares__llist_destroy(lines); + ares_buf_destroy(buf); + ares_array_destroy(lines); return status; } -ares_status_t ares__init_sysconfig_files(const ares_channel_t *channel, - ares_sysconfig_t *sysconfig) +ares_status_t ares_init_sysconfig_files(const ares_channel_t *channel, + ares_sysconfig_t *sysconfig) { ares_status_t status = ARES_SUCCESS; /* Resolv.conf */ - status = process_config_lines((channel->resolvconf_path != NULL) + status = process_config_lines(channel, + (channel->resolvconf_path != NULL) ? channel->resolvconf_path : PATH_RESOLV_CONF, sysconfig, parse_resolvconf_line); @@ -782,21 +799,22 @@ ares_status_t ares__init_sysconfig_files(const ares_channel_t *channel, } /* Nsswitch.conf */ - status = - process_config_lines("/etc/nsswitch.conf", sysconfig, parse_nsswitch_line); + status = process_config_lines(channel, "/etc/nsswitch.conf", sysconfig, + parse_nsswitch_line); if (status != ARES_SUCCESS && status != ARES_ENOTFOUND) { goto done; } /* netsvc.conf */ - status = - process_config_lines("/etc/netsvc.conf", sysconfig, parse_svcconf_line); + status = process_config_lines(channel, "/etc/netsvc.conf", sysconfig, + parse_svcconf_line); if (status != ARES_SUCCESS && status != ARES_ENOTFOUND) { goto done; } /* svc.conf */ - status = process_config_lines("/etc/svc.conf", sysconfig, parse_svcconf_line); + status = process_config_lines(channel, "/etc/svc.conf", sysconfig, + parse_svcconf_line); if (status != ARES_SUCCESS && status != ARES_ENOTFOUND) { goto done; } diff --git a/deps/cares/src/lib/ares_sysconfig_mac.c b/deps/cares/src/lib/ares_sysconfig_mac.c index 38ac451ca5f410..4d46ffd58df53b 100644 --- a/deps/cares/src/lib/ares_sysconfig_mac.c +++ b/deps/cares/src/lib/ares_sysconfig_mac.c @@ -154,14 +154,15 @@ static ares_bool_t search_is_duplicate(const ares_sysconfig_t *sysconfig, { size_t i; for (i = 0; i < sysconfig->ndomains; i++) { - if (strcasecmp(sysconfig->domains[i], name) == 0) { + if (ares_strcaseeq(sysconfig->domains[i], name)) { return ARES_TRUE; } } return ARES_FALSE; } -static ares_status_t read_resolver(const dns_resolver_t *resolver, +static ares_status_t read_resolver(const ares_channel_t *channel, + const dns_resolver_t *resolver, ares_sysconfig_t *sysconfig) { int i; @@ -243,7 +244,7 @@ static ares_status_t read_resolver(const dns_resolver_t *resolver, # endif if (resolver->options != NULL) { - status = ares__sysconfig_set_options(sysconfig, resolver->options); + status = ares_sysconfig_set_options(sysconfig, resolver->options); if (status != ARES_SUCCESS) { return status; } @@ -269,7 +270,7 @@ static ares_status_t read_resolver(const dns_resolver_t *resolver, unsigned short addrport; const struct sockaddr *sockaddr; char if_name_str[256] = ""; - const char *if_name; + const char *if_name = NULL; /* UBSAN alignment workaround to fetch memory address */ memcpy(&sockaddr, resolver->nameserver + i, sizeof(sockaddr)); @@ -282,10 +283,14 @@ static ares_status_t read_resolver(const dns_resolver_t *resolver, addrport = port; } - if_name = ares__if_indextoname(resolver->if_index, if_name_str, - sizeof(if_name_str)); - status = ares__sconfig_append(&sysconfig->sconfig, &addr, addrport, - addrport, if_name); + if (channel->sock_funcs.aif_indextoname != NULL) { + if_name = channel->sock_funcs.aif_indextoname( + resolver->if_index, if_name_str, sizeof(if_name_str), + channel->sock_func_cb_data); + } + + status = ares_sconfig_append(channel, &sysconfig->sconfig, &addr, addrport, + addrport, if_name); if (status != ARES_SUCCESS) { return status; } @@ -294,7 +299,8 @@ static ares_status_t read_resolver(const dns_resolver_t *resolver, return status; } -static ares_status_t read_resolvers(dns_resolver_t **resolvers, int nresolvers, +static ares_status_t read_resolvers(const ares_channel_t *channel, + dns_resolver_t **resolvers, int nresolvers, ares_sysconfig_t *sysconfig) { ares_status_t status = ARES_SUCCESS; @@ -309,13 +315,14 @@ static ares_status_t read_resolvers(dns_resolver_t **resolvers, int nresolvers, */ memcpy(&resolver_ptr, resolvers + i, sizeof(resolver_ptr)); - status = read_resolver(resolver_ptr, sysconfig); + status = read_resolver(channel, resolver_ptr, sysconfig); } return status; } -ares_status_t ares__init_sysconfig_macos(ares_sysconfig_t *sysconfig) +ares_status_t ares_init_sysconfig_macos(const ares_channel_t *channel, + ares_sysconfig_t *sysconfig) { dnsinfo_t *dnsinfo = NULL; dns_config_t *sc_dns = NULL; @@ -343,7 +350,8 @@ ares_status_t ares__init_sysconfig_macos(ares_sysconfig_t *sysconfig) * Likely this wasn't available via `/etc/resolv.conf` nor `libresolv` anyhow * so its not worse to prior configuration methods, worst case. */ - status = read_resolvers(sc_dns->resolver, sc_dns->n_resolver, sysconfig); + status = + read_resolvers(channel, sc_dns->resolver, sc_dns->n_resolver, sysconfig); done: if (dnsinfo) { diff --git a/deps/cares/src/lib/ares_sysconfig_win.c b/deps/cares/src/lib/ares_sysconfig_win.c index ce2a261cec82bb..f6e07f92e47380 100644 --- a/deps/cares/src/lib/ares_sysconfig_win.c +++ b/deps/cares/src/lib/ares_sysconfig_win.c @@ -53,7 +53,6 @@ #endif #include "ares_inet_net_pton.h" -#include "ares_platform.h" #if defined(USE_WINSOCK) /* @@ -420,7 +419,7 @@ static ares_bool_t get_DNS_Windows(char **outptr) memset(&addr, 0, sizeof(addr)); addr.family = AF_INET6; memcpy(&addr.addr.addr6, &namesrvr.sa6->sin6_addr, 16); - if (ares__addr_is_linklocal(&addr)) { + if (ares_addr_is_linklocal(&addr)) { ll_scope = ipaaEntry->Ipv6IfIndex; } @@ -514,10 +513,6 @@ static ares_bool_t get_SuffixList_Windows(char **outptr) *outptr = NULL; - if (ares__getplatform() != WIN_NT) { - return ARES_FALSE; - } - /* 1. Global DNS Suffix Search List */ if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, &hKey) == ERROR_SUCCESS) { @@ -589,13 +584,15 @@ static ares_bool_t get_SuffixList_Windows(char **outptr) return *outptr != NULL ? ARES_TRUE : ARES_FALSE; } -ares_status_t ares__init_sysconfig_windows(ares_sysconfig_t *sysconfig) +ares_status_t ares_init_sysconfig_windows(const ares_channel_t *channel, + ares_sysconfig_t *sysconfig) { char *line = NULL; ares_status_t status = ARES_SUCCESS; if (get_DNS_Windows(&line)) { - status = ares__sconfig_append_fromstr(&sysconfig->sconfig, line, ARES_TRUE); + status = ares_sconfig_append_fromstr(channel, &sysconfig->sconfig, line, + ARES_TRUE); ares_free(line); if (status != ARES_SUCCESS) { goto done; @@ -603,7 +600,7 @@ ares_status_t ares__init_sysconfig_windows(ares_sysconfig_t *sysconfig) } if (get_SuffixList_Windows(&line)) { - sysconfig->domains = ares__strsplit(line, ", ", &sysconfig->ndomains); + sysconfig->domains = ares_strsplit(line, ", ", &sysconfig->ndomains); ares_free(line); if (sysconfig->domains == NULL) { status = ARES_EFILE; diff --git a/deps/cares/src/lib/ares_timeout.c b/deps/cares/src/lib/ares_timeout.c index 5ed8b553a3c5ef..0d2fdcff21f657 100644 --- a/deps/cares/src/lib/ares_timeout.c +++ b/deps/cares/src/lib/ares_timeout.c @@ -32,9 +32,9 @@ #endif -void ares__timeval_remaining(ares_timeval_t *remaining, - const ares_timeval_t *now, - const ares_timeval_t *tout) +void ares_timeval_remaining(ares_timeval_t *remaining, + const ares_timeval_t *now, + const ares_timeval_t *tout) { memset(remaining, 0, sizeof(*remaining)); @@ -53,8 +53,8 @@ void ares__timeval_remaining(ares_timeval_t *remaining, } } -void ares__timeval_diff(ares_timeval_t *tvdiff, const ares_timeval_t *tvstart, - const ares_timeval_t *tvstop) +void ares_timeval_diff(ares_timeval_t *tvdiff, const ares_timeval_t *tvstart, + const ares_timeval_t *tvstop) { tvdiff->sec = tvstop->sec - tvstart->sec; if (tvstop->usec > tvstart->usec) { @@ -89,24 +89,24 @@ static struct timeval *ares_timeout_int(const ares_channel_t *channel, struct timeval *tvbuf) { const ares_query_t *query; - ares__slist_node_t *node; + ares_slist_node_t *node; ares_timeval_t now; ares_timeval_t atvbuf; ares_timeval_t amaxtv; /* The minimum timeout of all queries is always the first entry in * channel->queries_by_timeout */ - node = ares__slist_node_first(channel->queries_by_timeout); + node = ares_slist_node_first(channel->queries_by_timeout); /* no queries/timeout */ if (node == NULL) { return maxtv; } - query = ares__slist_node_val(node); + query = ares_slist_node_val(node); - ares__tvnow(&now); + ares_tvnow(&now); - ares__timeval_remaining(&atvbuf, &now, &query->timeout); + ares_timeval_remaining(&atvbuf, &now, &query->timeout); ares_timeval_to_struct_timeval(tvbuf, &atvbuf); @@ -141,11 +141,11 @@ struct timeval *ares_timeout(const ares_channel_t *channel, return NULL; } - ares__channel_lock(channel); + ares_channel_lock(channel); rv = ares_timeout_int(channel, maxtv, tvbuf); - ares__channel_unlock(channel); + ares_channel_unlock(channel); return rv; } diff --git a/deps/cares/src/lib/ares_update_servers.c b/deps/cares/src/lib/ares_update_servers.c index 639f79d815915f..70a9381499f8c2 100644 --- a/deps/cares/src/lib/ares_update_servers.c +++ b/deps/cares/src/lib/ares_update_servers.c @@ -39,6 +39,9 @@ #ifdef HAVE_NET_IF_H # include #endif +#ifdef HAVE_STDINT_H +# include +#endif #if defined(USE_WINSOCK) # if defined(HAVE_IPHLPAPI_H) @@ -61,8 +64,8 @@ typedef struct { unsigned int ll_scope; } ares_sconfig_t; -static ares_bool_t ares__addr_match(const struct ares_addr *addr1, - const struct ares_addr *addr2) +static ares_bool_t ares_addr_match(const struct ares_addr *addr1, + const struct ares_addr *addr2) { if (addr1 == NULL && addr2 == NULL) { return ARES_TRUE; /* LCOV_EXCL_LINE: DefensiveCoding */ @@ -90,9 +93,9 @@ static ares_bool_t ares__addr_match(const struct ares_addr *addr1, return ARES_FALSE; } -ares_bool_t ares__subnet_match(const struct ares_addr *addr, - const struct ares_addr *subnet, - unsigned char netmask) +ares_bool_t ares_subnet_match(const struct ares_addr *addr, + const struct ares_addr *subnet, + unsigned char netmask) { const unsigned char *addr_ptr; const unsigned char *subnet_ptr; @@ -144,7 +147,7 @@ ares_bool_t ares__subnet_match(const struct ares_addr *addr, return ARES_TRUE; } -ares_bool_t ares__addr_is_linklocal(const struct ares_addr *addr) +ares_bool_t ares_addr_is_linklocal(const struct ares_addr *addr) { struct ares_addr subnet; const unsigned char subnetaddr[16] = { 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, @@ -155,7 +158,7 @@ ares_bool_t ares__addr_is_linklocal(const struct ares_addr *addr) subnet.family = AF_INET6; memcpy(&subnet.addr.addr6, subnetaddr, 16); - return ares__subnet_match(addr, &subnet, 10); + return ares_subnet_match(addr, &subnet, 10); } static ares_bool_t ares_server_blacklisted(const struct ares_addr *addr) @@ -185,13 +188,60 @@ static ares_bool_t ares_server_blacklisted(const struct ares_addr *addr) struct ares_addr subnet; subnet.family = AF_INET6; memcpy(&subnet.addr.addr6, blacklist_v6[i].netbase, 16); - if (ares__subnet_match(addr, &subnet, blacklist_v6[i].netmask)) { + if (ares_subnet_match(addr, &subnet, blacklist_v6[i].netmask)) { return ARES_TRUE; } } return ARES_FALSE; } +static ares_status_t parse_nameserver_uri(ares_buf_t *buf, + ares_sconfig_t *sconfig) +{ + ares_uri_t *uri = NULL; + ares_status_t status = ARES_SUCCESS; + const char *port; + char *ll_scope; + char hoststr[256]; + size_t addrlen; + + status = ares_uri_parse_buf(&uri, buf); + if (status != ARES_SUCCESS) { + return status; + } + + if (!ares_streq("dns", ares_uri_get_scheme(uri))) { + status = ARES_EBADSTR; + goto done; + } + + ares_strcpy(hoststr, ares_uri_get_host(uri), sizeof(hoststr)); + ll_scope = strchr(hoststr, '%'); + if (ll_scope != NULL) { + *ll_scope = 0; + ll_scope++; + ares_strcpy(sconfig->ll_iface, ll_scope, sizeof(sconfig->ll_iface)); + } + + /* Convert ip address from string to network byte order */ + sconfig->addr.family = AF_UNSPEC; + if (ares_dns_pton(hoststr, &sconfig->addr, &addrlen) == NULL) { + status = ARES_EBADSTR; + goto done; + } + + sconfig->udp_port = ares_uri_get_port(uri); + sconfig->tcp_port = sconfig->udp_port; + port = ares_uri_get_query_key(uri, "tcpport"); + if (port != NULL) { + sconfig->tcp_port = (unsigned short)atoi(port); + } + +done: + ares_uri_destroy(uri); + return status; +} + /* Parse address and port in these formats, either ipv4 or ipv6 addresses * are allowed: * ipaddr @@ -211,7 +261,7 @@ static ares_bool_t ares_server_blacklisted(const struct ares_addr *addr) * Returns an error code on failure, else ARES_SUCCESS */ -static ares_status_t parse_nameserver(ares__buf_t *buf, ares_sconfig_t *sconfig) +static ares_status_t parse_nameserver(ares_buf_t *buf, ares_sconfig_t *sconfig) { ares_status_t status; char ipaddr[INET6_ADDRSTRLEN] = ""; @@ -220,57 +270,57 @@ static ares_status_t parse_nameserver(ares__buf_t *buf, ares_sconfig_t *sconfig) memset(sconfig, 0, sizeof(*sconfig)); /* Consume any leading whitespace */ - ares__buf_consume_whitespace(buf, ARES_TRUE); + ares_buf_consume_whitespace(buf, ARES_TRUE); /* pop off IP address. If it is in [ ] then it can be ipv4 or ipv6. If * not, ipv4 only */ - if (ares__buf_begins_with(buf, (const unsigned char *)"[", 1)) { + if (ares_buf_begins_with(buf, (const unsigned char *)"[", 1)) { /* Consume [ */ - ares__buf_consume(buf, 1); + ares_buf_consume(buf, 1); - ares__buf_tag(buf); + ares_buf_tag(buf); /* Consume until ] */ - if (ares__buf_consume_until_charset(buf, (const unsigned char *)"]", 1, - ARES_TRUE) == 0) { + if (ares_buf_consume_until_charset(buf, (const unsigned char *)"]", 1, + ARES_TRUE) == SIZE_MAX) { return ARES_EBADSTR; } - status = ares__buf_tag_fetch_string(buf, ipaddr, sizeof(ipaddr)); + status = ares_buf_tag_fetch_string(buf, ipaddr, sizeof(ipaddr)); if (status != ARES_SUCCESS) { return status; } /* Skip over ] */ - ares__buf_consume(buf, 1); + ares_buf_consume(buf, 1); } else { size_t offset; /* Not in [ ], see if '.' is in first 4 characters, if it is, then its ipv4, * otherwise treat as ipv6 */ - ares__buf_tag(buf); + ares_buf_tag(buf); - offset = ares__buf_consume_until_charset(buf, (const unsigned char *)".", 1, - ARES_TRUE); - ares__buf_tag_rollback(buf); - ares__buf_tag(buf); + offset = ares_buf_consume_until_charset(buf, (const unsigned char *)".", 1, + ARES_TRUE); + ares_buf_tag_rollback(buf); + ares_buf_tag(buf); if (offset > 0 && offset < 4) { /* IPv4 */ - if (ares__buf_consume_charset(buf, (const unsigned char *)"0123456789.", - 11) == 0) { + if (ares_buf_consume_charset(buf, (const unsigned char *)"0123456789.", + 11) == 0) { return ARES_EBADSTR; } } else { /* IPv6 */ const unsigned char ipv6_charset[] = "ABCDEFabcdef0123456789.:"; - if (ares__buf_consume_charset(buf, ipv6_charset, - sizeof(ipv6_charset) - 1) == 0) { + if (ares_buf_consume_charset(buf, ipv6_charset, + sizeof(ipv6_charset) - 1) == 0) { return ARES_EBADSTR; } } - status = ares__buf_tag_fetch_string(buf, ipaddr, sizeof(ipaddr)); + status = ares_buf_tag_fetch_string(buf, ipaddr, sizeof(ipaddr)); if (status != ARES_SUCCESS) { return status; } @@ -283,21 +333,21 @@ static ares_status_t parse_nameserver(ares__buf_t *buf, ares_sconfig_t *sconfig) } /* Pull off port */ - if (ares__buf_begins_with(buf, (const unsigned char *)":", 1)) { + if (ares_buf_begins_with(buf, (const unsigned char *)":", 1)) { char portstr[6]; /* Consume : */ - ares__buf_consume(buf, 1); + ares_buf_consume(buf, 1); - ares__buf_tag(buf); + ares_buf_tag(buf); /* Read numbers */ - if (ares__buf_consume_charset(buf, (const unsigned char *)"0123456789", - 10) == 0) { + if (ares_buf_consume_charset(buf, (const unsigned char *)"0123456789", + 10) == 0) { return ARES_EBADSTR; } - status = ares__buf_tag_fetch_string(buf, portstr, sizeof(portstr)); + status = ares_buf_tag_fetch_string(buf, portstr, sizeof(portstr)); if (status != ARES_SUCCESS) { return status; } @@ -307,22 +357,22 @@ static ares_status_t parse_nameserver(ares__buf_t *buf, ares_sconfig_t *sconfig) } /* Pull off interface modifier */ - if (ares__buf_begins_with(buf, (const unsigned char *)"%", 1)) { + if (ares_buf_begins_with(buf, (const unsigned char *)"%", 1)) { const unsigned char iface_charset[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789.-_\\:{}"; /* Consume % */ - ares__buf_consume(buf, 1); + ares_buf_consume(buf, 1); - ares__buf_tag(buf); + ares_buf_tag(buf); - if (ares__buf_consume_charset(buf, iface_charset, - sizeof(iface_charset) - 1) == 0) { + if (ares_buf_consume_charset(buf, iface_charset, + sizeof(iface_charset) - 1) == 0) { return ARES_EBADSTR; } - status = ares__buf_tag_fetch_string(buf, sconfig->ll_iface, - sizeof(sconfig->ll_iface)); + status = ares_buf_tag_fetch_string(buf, sconfig->ll_iface, + sizeof(sconfig->ll_iface)); if (status != ARES_SUCCESS) { return status; } @@ -330,24 +380,29 @@ static ares_status_t parse_nameserver(ares__buf_t *buf, ares_sconfig_t *sconfig) /* Consume any trailing whitespace so we can bail out if there is something * after we didn't read */ - ares__buf_consume_whitespace(buf, ARES_TRUE); + ares_buf_consume_whitespace(buf, ARES_TRUE); - if (ares__buf_len(buf) != 0) { + if (ares_buf_len(buf) != 0) { return ARES_EBADSTR; } return ARES_SUCCESS; } -static ares_status_t ares__sconfig_linklocal(ares_sconfig_t *s, - const char *ll_iface) +static ares_status_t ares_sconfig_linklocal(const ares_channel_t *channel, + ares_sconfig_t *s, + const char *ll_iface) { unsigned int ll_scope = 0; + if (ares_str_isnum(ll_iface)) { char ifname[IF_NAMESIZE] = ""; ll_scope = (unsigned int)atoi(ll_iface); - if (ares__if_indextoname(ll_scope, ifname, sizeof(ifname)) == NULL) { + if (channel->sock_funcs.aif_indextoname == NULL || + channel->sock_funcs.aif_indextoname(ll_scope, ifname, sizeof(ifname), + channel->sock_func_cb_data) == + NULL) { DEBUGF(fprintf(stderr, "Interface %s for ipv6 Link Local not found\n", ll_iface)); return ARES_ENOTFOUND; @@ -357,7 +412,10 @@ static ares_status_t ares__sconfig_linklocal(ares_sconfig_t *s, return ARES_SUCCESS; } - ll_scope = ares__if_nametoindex(ll_iface); + if (channel->sock_funcs.aif_nametoindex != NULL) { + ll_scope = + channel->sock_funcs.aif_nametoindex(ll_iface, channel->sock_func_cb_data); + } if (ll_scope == 0) { DEBUGF(fprintf(stderr, "Interface %s for ipv6 Link Local not found\n", ll_iface)); @@ -368,11 +426,11 @@ static ares_status_t ares__sconfig_linklocal(ares_sconfig_t *s, return ARES_SUCCESS; } -ares_status_t ares__sconfig_append(ares__llist_t **sconfig, - const struct ares_addr *addr, - unsigned short udp_port, - unsigned short tcp_port, - const char *ll_iface) +ares_status_t ares_sconfig_append(const ares_channel_t *channel, + ares_llist_t **sconfig, + const struct ares_addr *addr, + unsigned short udp_port, + unsigned short tcp_port, const char *ll_iface) { ares_sconfig_t *s; ares_status_t status; @@ -392,7 +450,7 @@ ares_status_t ares__sconfig_append(ares__llist_t **sconfig, } if (*sconfig == NULL) { - *sconfig = ares__llist_create(ares_free); + *sconfig = ares_llist_create(ares_free); if (*sconfig == NULL) { status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ @@ -405,13 +463,13 @@ ares_status_t ares__sconfig_append(ares__llist_t **sconfig, /* Handle link-local enumeration. If an interface is specified on a * non-link-local address, we'll simply end up ignoring that */ - if (ares__addr_is_linklocal(&s->addr)) { + if (ares_addr_is_linklocal(&s->addr)) { if (ares_strlen(ll_iface) == 0) { /* Silently ignore this entry, we require an interface */ status = ARES_SUCCESS; goto fail; } - status = ares__sconfig_linklocal(s, ll_iface); + status = ares_sconfig_linklocal(channel, s, ll_iface); /* Silently ignore this entry, we can't validate the interface */ if (status != ARES_SUCCESS) { status = ARES_SUCCESS; @@ -419,7 +477,7 @@ ares_status_t ares__sconfig_append(ares__llist_t **sconfig, } } - if (ares__llist_insert_last(*sconfig, s) == NULL) { + if (ares_llist_insert_last(*sconfig, s) == NULL) { status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -448,36 +506,43 @@ ares_status_t ares__sconfig_append(ares__llist_t **sconfig, * * Returns an error code on failure, else ARES_SUCCESS. */ -ares_status_t ares__sconfig_append_fromstr(ares__llist_t **sconfig, - const char *str, - ares_bool_t ignore_invalid) +ares_status_t ares_sconfig_append_fromstr(const ares_channel_t *channel, + ares_llist_t **sconfig, + const char *str, + ares_bool_t ignore_invalid) { - ares_status_t status = ARES_SUCCESS; - ares__buf_t *buf = NULL; - ares__llist_t *list = NULL; - ares__llist_node_t *node; + ares_status_t status = ARES_SUCCESS; + ares_buf_t *buf = NULL; + ares_array_t *list = NULL; + size_t num; + size_t i; /* On Windows, there may be more than one nameserver specified in the same * registry key, so we parse input as a space or comma separated list. */ - buf = ares__buf_create_const((const unsigned char *)str, ares_strlen(str)); + buf = ares_buf_create_const((const unsigned char *)str, ares_strlen(str)); if (buf == NULL) { status = ARES_ENOMEM; goto done; } - status = ares__buf_split(buf, (const unsigned char *)" ,", 2, - ARES_BUF_SPLIT_NONE, 0, &list); + status = ares_buf_split(buf, (const unsigned char *)" ,", 2, + ARES_BUF_SPLIT_NONE, 0, &list); if (status != ARES_SUCCESS) { goto done; } - for (node = ares__llist_node_first(list); node != NULL; - node = ares__llist_node_next(node)) { - ares__buf_t *entry = ares__llist_node_val(node); + num = ares_array_len(list); + for (i = 0; i < num; i++) { + ares_buf_t **bufptr = ares_array_at(list, i); + ares_buf_t *entry = *bufptr; ares_sconfig_t s; - status = parse_nameserver(entry, &s); + status = parse_nameserver_uri(entry, &s); + if (status != ARES_SUCCESS) { + status = parse_nameserver(entry, &s); + } + if (status != ARES_SUCCESS) { if (ignore_invalid) { continue; @@ -486,8 +551,8 @@ ares_status_t ares__sconfig_append_fromstr(ares__llist_t **sconfig, } } - status = ares__sconfig_append(sconfig, &s.addr, s.udp_port, s.tcp_port, - s.ll_iface); + status = ares_sconfig_append(channel, sconfig, &s.addr, s.udp_port, + s.tcp_port, s.ll_iface); if (status != ARES_SUCCESS) { goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -496,14 +561,14 @@ ares_status_t ares__sconfig_append_fromstr(ares__llist_t **sconfig, status = ARES_SUCCESS; done: - ares__llist_destroy(list); - ares__buf_destroy(buf); + ares_array_destroy(list); + ares_buf_destroy(buf); return status; } -static unsigned short ares__sconfig_get_port(const ares_channel_t *channel, - const ares_sconfig_t *s, - ares_bool_t is_tcp) +static unsigned short ares_sconfig_get_port(const ares_channel_t *channel, + const ares_sconfig_t *s, + ares_bool_t is_tcp) { unsigned short port = is_tcp ? s->tcp_port : s->udp_port; @@ -518,24 +583,24 @@ static unsigned short ares__sconfig_get_port(const ares_channel_t *channel, return port; } -static ares__slist_node_t *ares__server_find(ares_channel_t *channel, - const ares_sconfig_t *s) +static ares_slist_node_t *ares_server_find(const ares_channel_t *channel, + const ares_sconfig_t *s) { - ares__slist_node_t *node; + ares_slist_node_t *node; - for (node = ares__slist_node_first(channel->servers); node != NULL; - node = ares__slist_node_next(node)) { - const ares_server_t *server = ares__slist_node_val(node); + for (node = ares_slist_node_first(channel->servers); node != NULL; + node = ares_slist_node_next(node)) { + const ares_server_t *server = ares_slist_node_val(node); - if (!ares__addr_match(&server->addr, &s->addr)) { + if (!ares_addr_match(&server->addr, &s->addr)) { continue; } - if (server->tcp_port != ares__sconfig_get_port(channel, s, ARES_TRUE)) { + if (server->tcp_port != ares_sconfig_get_port(channel, s, ARES_TRUE)) { continue; } - if (server->udp_port != ares__sconfig_get_port(channel, s, ARES_FALSE)) { + if (server->udp_port != ares_sconfig_get_port(channel, s, ARES_FALSE)) { continue; } @@ -544,28 +609,28 @@ static ares__slist_node_t *ares__server_find(ares_channel_t *channel, return NULL; } -static ares_bool_t ares__server_isdup(const ares_channel_t *channel, - ares__llist_node_t *s) +static ares_bool_t ares_server_isdup(const ares_channel_t *channel, + ares_llist_node_t *s) { /* Scan backwards to see if this is a duplicate */ - ares__llist_node_t *prev; - const ares_sconfig_t *server = ares__llist_node_val(s); + ares_llist_node_t *prev; + const ares_sconfig_t *server = ares_llist_node_val(s); - for (prev = ares__llist_node_prev(s); prev != NULL; - prev = ares__llist_node_prev(prev)) { - const ares_sconfig_t *p = ares__llist_node_val(prev); + for (prev = ares_llist_node_prev(s); prev != NULL; + prev = ares_llist_node_prev(prev)) { + const ares_sconfig_t *p = ares_llist_node_val(prev); - if (!ares__addr_match(&server->addr, &p->addr)) { + if (!ares_addr_match(&server->addr, &p->addr)) { continue; } - if (ares__sconfig_get_port(channel, server, ARES_TRUE) != - ares__sconfig_get_port(channel, p, ARES_TRUE)) { + if (ares_sconfig_get_port(channel, server, ARES_TRUE) != + ares_sconfig_get_port(channel, p, ARES_TRUE)) { continue; } - if (ares__sconfig_get_port(channel, server, ARES_FALSE) != - ares__sconfig_get_port(channel, p, ARES_FALSE)) { + if (ares_sconfig_get_port(channel, server, ARES_FALSE) != + ares_sconfig_get_port(channel, p, ARES_FALSE)) { continue; } @@ -575,9 +640,9 @@ static ares_bool_t ares__server_isdup(const ares_channel_t *channel, return ARES_FALSE; } -static ares_status_t ares__server_create(ares_channel_t *channel, - const ares_sconfig_t *sconfig, - size_t idx) +static ares_status_t ares_server_create(ares_channel_t *channel, + const ares_sconfig_t *sconfig, + size_t idx) { ares_status_t status; ares_server_t *server = ares_malloc_zero(sizeof(*server)); @@ -588,8 +653,8 @@ static ares_status_t ares__server_create(ares_channel_t *channel, server->idx = idx; server->channel = channel; - server->udp_port = ares__sconfig_get_port(channel, sconfig, ARES_FALSE); - server->tcp_port = ares__sconfig_get_port(channel, sconfig, ARES_TRUE); + server->udp_port = ares_sconfig_get_port(channel, sconfig, ARES_FALSE); + server->tcp_port = ares_sconfig_get_port(channel, sconfig, ARES_TRUE); server->addr.family = sconfig->addr.family; server->next_retry_time.sec = 0; server->next_retry_time.usec = 0; @@ -608,25 +673,13 @@ static ares_status_t ares__server_create(ares_channel_t *channel, server->ll_scope = sconfig->ll_scope; } - server->tcp_parser = ares__buf_create(); - if (server->tcp_parser == NULL) { - status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ - goto done; /* LCOV_EXCL_LINE: OutOfMemory */ - } - - server->tcp_send = ares__buf_create(); - if (server->tcp_send == NULL) { - status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ - goto done; /* LCOV_EXCL_LINE: OutOfMemory */ - } - - server->connections = ares__llist_create(NULL); + server->connections = ares_llist_create(NULL); if (server->connections == NULL) { status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } - if (ares__slist_insert(channel->servers, server) == NULL) { + if (ares_slist_insert(channel->servers, server) == NULL) { status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -635,31 +688,31 @@ static ares_status_t ares__server_create(ares_channel_t *channel, done: if (status != ARES_SUCCESS) { - ares__destroy_server(server); /* LCOV_EXCL_LINE: OutOfMemory */ + ares_destroy_server(server); /* LCOV_EXCL_LINE: OutOfMemory */ } return status; } -static ares_bool_t ares__server_in_newconfig(const ares_server_t *server, - ares__llist_t *srvlist) +static ares_bool_t ares_server_in_newconfig(const ares_server_t *server, + ares_llist_t *srvlist) { - ares__llist_node_t *node; + ares_llist_node_t *node; const ares_channel_t *channel = server->channel; - for (node = ares__llist_node_first(srvlist); node != NULL; - node = ares__llist_node_next(node)) { - const ares_sconfig_t *s = ares__llist_node_val(node); + for (node = ares_llist_node_first(srvlist); node != NULL; + node = ares_llist_node_next(node)) { + const ares_sconfig_t *s = ares_llist_node_val(node); - if (!ares__addr_match(&server->addr, &s->addr)) { + if (!ares_addr_match(&server->addr, &s->addr)) { continue; } - if (server->tcp_port != ares__sconfig_get_port(channel, s, ARES_TRUE)) { + if (server->tcp_port != ares_sconfig_get_port(channel, s, ARES_TRUE)) { continue; } - if (server->udp_port != ares__sconfig_get_port(channel, s, ARES_FALSE)) { + if (server->udp_port != ares_sconfig_get_port(channel, s, ARES_FALSE)) { continue; } @@ -669,19 +722,19 @@ static ares_bool_t ares__server_in_newconfig(const ares_server_t *server, return ARES_FALSE; } -static ares_bool_t ares__servers_remove_stale(ares_channel_t *channel, - ares__llist_t *srvlist) +static ares_bool_t ares_servers_remove_stale(ares_channel_t *channel, + ares_llist_t *srvlist) { - ares_bool_t stale_removed = ARES_FALSE; - ares__slist_node_t *snode = ares__slist_node_first(channel->servers); + ares_bool_t stale_removed = ARES_FALSE; + ares_slist_node_t *snode = ares_slist_node_first(channel->servers); while (snode != NULL) { - ares__slist_node_t *snext = ares__slist_node_next(snode); - const ares_server_t *server = ares__slist_node_val(snode); - if (!ares__server_in_newconfig(server, srvlist)) { + ares_slist_node_t *snext = ares_slist_node_next(snode); + const ares_server_t *server = ares_slist_node_val(snode); + if (!ares_server_in_newconfig(server, srvlist)) { /* This will clean up all server state via the destruction callback and * move any queries to new servers */ - ares__slist_node_destroy(snode); + ares_slist_node_destroy(snode); stale_removed = ARES_TRUE; } snode = snext; @@ -689,21 +742,21 @@ static ares_bool_t ares__servers_remove_stale(ares_channel_t *channel, return stale_removed; } -static void ares__servers_trim_single(ares_channel_t *channel) +static void ares_servers_trim_single(ares_channel_t *channel) { - while (ares__slist_len(channel->servers) > 1) { - ares__slist_node_destroy(ares__slist_node_last(channel->servers)); + while (ares_slist_len(channel->servers) > 1) { + ares_slist_node_destroy(ares_slist_node_last(channel->servers)); } } -ares_status_t ares__servers_update(ares_channel_t *channel, - ares__llist_t *server_list, - ares_bool_t user_specified) +ares_status_t ares_servers_update(ares_channel_t *channel, + ares_llist_t *server_list, + ares_bool_t user_specified) { - ares__llist_node_t *node; - size_t idx = 0; - ares_status_t status; - ares_bool_t list_changed = ARES_FALSE; + ares_llist_node_t *node; + size_t idx = 0; + ares_status_t status; + ares_bool_t list_changed = ARES_FALSE; if (channel == NULL) { return ARES_EFORMERR; /* LCOV_EXCL_LINE: DefensiveCoding */ @@ -714,19 +767,19 @@ ares_status_t ares__servers_update(ares_channel_t *channel, */ /* Add new entries */ - for (node = ares__llist_node_first(server_list); node != NULL; - node = ares__llist_node_next(node)) { - const ares_sconfig_t *sconfig = ares__llist_node_val(node); - ares__slist_node_t *snode; + for (node = ares_llist_node_first(server_list); node != NULL; + node = ares_llist_node_next(node)) { + const ares_sconfig_t *sconfig = ares_llist_node_val(node); + ares_slist_node_t *snode; /* If a server has already appeared in the list of new servers, skip it. */ - if (ares__server_isdup(channel, node)) { + if (ares_server_isdup(channel, node)) { continue; } - snode = ares__server_find(channel, sconfig); + snode = ares_server_find(channel, sconfig); if (snode != NULL) { - ares_server_t *server = ares__slist_node_val(snode); + ares_server_t *server = ares_slist_node_val(snode); /* Copy over link-local settings. Its possible some of this data has * changed, maybe ... */ @@ -740,10 +793,10 @@ ares_status_t ares__servers_update(ares_channel_t *channel, server->idx = idx; /* Index changed, reinsert node, doesn't require any memory * allocations so can't fail. */ - ares__slist_node_reinsert(snode); + ares_slist_node_reinsert(snode); } } else { - status = ares__server_create(channel, sconfig, idx); + status = ares_server_create(channel, sconfig, idx); if (status != ARES_SUCCESS) { goto done; } @@ -755,13 +808,13 @@ ares_status_t ares__servers_update(ares_channel_t *channel, } /* Remove any servers that don't exist in the current configuration */ - if (ares__servers_remove_stale(channel, server_list)) { + if (ares_servers_remove_stale(channel, server_list)) { list_changed = ARES_TRUE; } /* Trim to one server if ARES_FLAG_PRIMARY is set. */ if (channel->flags & ARES_FLAG_PRIMARY) { - ares__servers_trim_single(channel); + ares_servers_trim_single(channel); } if (user_specified) { @@ -771,7 +824,7 @@ ares_status_t ares__servers_update(ares_channel_t *channel, /* Clear any cached query results only if the server list changed */ if (list_changed) { - ares__qcache_flush(channel->qcache); + ares_qcache_flush(channel->qcache); } status = ARES_SUCCESS; @@ -781,15 +834,15 @@ ares_status_t ares__servers_update(ares_channel_t *channel, } static ares_status_t - ares_addr_node_to_server_config_llist(const struct ares_addr_node *servers, - ares__llist_t **llist) + ares_addr_node_to_sconfig_llist(const struct ares_addr_node *servers, + ares_llist_t **llist) { const struct ares_addr_node *node; - ares__llist_t *s; + ares_llist_t *s; *llist = NULL; - s = ares__llist_create(ares_free); + s = ares_llist_create(ares_free); if (s == NULL) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -816,7 +869,7 @@ static ares_status_t sizeof(sconfig->addr.addr.addr6)); } - if (ares__llist_insert_last(s, sconfig) == NULL) { + if (ares_llist_insert_last(s, sconfig) == NULL) { ares_free(sconfig); /* LCOV_EXCL_LINE: OutOfMemory */ goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -827,20 +880,21 @@ static ares_status_t /* LCOV_EXCL_START: OutOfMemory */ fail: - ares__llist_destroy(s); + ares_llist_destroy(s); return ARES_ENOMEM; /* LCOV_EXCL_STOP */ } -static ares_status_t ares_addr_port_node_to_server_config_llist( - const struct ares_addr_port_node *servers, ares__llist_t **llist) +static ares_status_t + ares_addrpnode_to_sconfig_llist(const struct ares_addr_port_node *servers, + ares_llist_t **llist) { const struct ares_addr_port_node *node; - ares__llist_t *s; + ares_llist_t *s; *llist = NULL; - s = ares__llist_create(ares_free); + s = ares_llist_create(ares_free); if (s == NULL) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -870,7 +924,7 @@ static ares_status_t ares_addr_port_node_to_server_config_llist( sconfig->tcp_port = (unsigned short)node->tcp_port; sconfig->udp_port = (unsigned short)node->udp_port; - if (ares__llist_insert_last(s, sconfig) == NULL) { + if (ares_llist_insert_last(s, sconfig) == NULL) { ares_free(sconfig); /* LCOV_EXCL_LINE: OutOfMemory */ goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -881,21 +935,21 @@ static ares_status_t ares_addr_port_node_to_server_config_llist( /* LCOV_EXCL_START: OutOfMemory */ fail: - ares__llist_destroy(s); + ares_llist_destroy(s); return ARES_ENOMEM; /* LCOV_EXCL_STOP */ } -ares_status_t ares_in_addr_to_server_config_llist(const struct in_addr *servers, - size_t nservers, - ares__llist_t **llist) +ares_status_t ares_in_addr_to_sconfig_llist(const struct in_addr *servers, + size_t nservers, + ares_llist_t **llist) { - size_t i; - ares__llist_t *s; + size_t i; + ares_llist_t *s; *llist = NULL; - s = ares__llist_create(ares_free); + s = ares_llist_create(ares_free); if (s == NULL) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -912,7 +966,7 @@ ares_status_t ares_in_addr_to_server_config_llist(const struct in_addr *servers, memcpy(&sconfig->addr.addr.addr4, &servers[i], sizeof(sconfig->addr.addr.addr4)); - if (ares__llist_insert_last(s, sconfig) == NULL) { + if (ares_llist_insert_last(s, sconfig) == NULL) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } } @@ -922,21 +976,90 @@ ares_status_t ares_in_addr_to_server_config_llist(const struct in_addr *servers, /* LCOV_EXCL_START: OutOfMemory */ fail: - ares__llist_destroy(s); + ares_llist_destroy(s); return ARES_ENOMEM; /* LCOV_EXCL_STOP */ } +static ares_bool_t ares_server_use_uri(const ares_server_t *server) +{ + /* Currently only reason to use new format is if the ports for udp and tcp + * are different */ + if (server->tcp_port != server->udp_port) { + return ARES_TRUE; + } + return ARES_FALSE; +} + +static ares_status_t ares_get_server_addr_uri(const ares_server_t *server, + ares_buf_t *buf) +{ + ares_uri_t *uri = NULL; + ares_status_t status; + char addr[INET6_ADDRSTRLEN]; + + uri = ares_uri_create(); + if (uri == NULL) { + return ARES_ENOMEM; + } + + status = ares_uri_set_scheme(uri, "dns"); + if (status != ARES_SUCCESS) { + goto done; + } + + ares_inet_ntop(server->addr.family, &server->addr.addr, addr, sizeof(addr)); + + if (ares_strlen(server->ll_iface)) { + char addr_iface[256]; + + snprintf(addr_iface, sizeof(addr_iface), "%s%%%s", addr, server->ll_iface); + status = ares_uri_set_host(uri, addr_iface); + } else { + status = ares_uri_set_host(uri, addr); + } + + if (status != ARES_SUCCESS) { + goto done; + } + + status = ares_uri_set_port(uri, server->udp_port); + if (status != ARES_SUCCESS) { + goto done; + } + + if (server->udp_port != server->tcp_port) { + char port[6]; + snprintf(port, sizeof(port), "%d", server->tcp_port); + status = ares_uri_set_query_key(uri, "tcpport", port); + if (status != ARES_SUCCESS) { + goto done; + } + } + + status = ares_uri_write_buf(uri, buf); + if (status != ARES_SUCCESS) { + goto done; + } + +done: + ares_uri_destroy(uri); + return status; +} + /* Write out the details of a server to a buffer */ -ares_status_t ares_get_server_addr(const ares_server_t *server, - ares__buf_t *buf) +ares_status_t ares_get_server_addr(const ares_server_t *server, ares_buf_t *buf) { ares_status_t status; char addr[INET6_ADDRSTRLEN]; + if (ares_server_use_uri(server)) { + return ares_get_server_addr_uri(server, buf); + } + /* ipv4addr or [ipv6addr] */ if (server->addr.family == AF_INET6) { - status = ares__buf_append_byte(buf, '['); + status = ares_buf_append_byte(buf, '['); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -944,37 +1067,37 @@ ares_status_t ares_get_server_addr(const ares_server_t *server, ares_inet_ntop(server->addr.family, &server->addr.addr, addr, sizeof(addr)); - status = ares__buf_append_str(buf, addr); + status = ares_buf_append_str(buf, addr); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } if (server->addr.family == AF_INET6) { - status = ares__buf_append_byte(buf, ']'); + status = ares_buf_append_byte(buf, ']'); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } } /* :port */ - status = ares__buf_append_byte(buf, ':'); + status = ares_buf_append_byte(buf, ':'); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } - status = ares__buf_append_num_dec(buf, server->udp_port, 0); + status = ares_buf_append_num_dec(buf, server->udp_port, 0); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } /* %iface */ if (ares_strlen(server->ll_iface)) { - status = ares__buf_append_byte(buf, '%'); + status = ares_buf_append_byte(buf, '%'); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } - status = ares__buf_append_str(buf, server->ll_iface); + status = ares_buf_append_str(buf, server->ll_iface); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -990,17 +1113,17 @@ int ares_get_servers(const ares_channel_t *channel, struct ares_addr_node *srvr_last = NULL; struct ares_addr_node *srvr_curr; ares_status_t status = ARES_SUCCESS; - ares__slist_node_t *node; + ares_slist_node_t *node; if (channel == NULL) { return ARES_ENODATA; } - ares__channel_lock(channel); + ares_channel_lock(channel); - for (node = ares__slist_node_first(channel->servers); node != NULL; - node = ares__slist_node_next(node)) { - const ares_server_t *server = ares__slist_node_val(node); + for (node = ares_slist_node_first(channel->servers); node != NULL; + node = ares_slist_node_next(node)) { + const ares_server_t *server = ares_slist_node_val(node); /* Allocate storage for this server node appending it to the list */ srvr_curr = ares_malloc_data(ARES_DATATYPE_ADDR_NODE); @@ -1033,7 +1156,7 @@ int ares_get_servers(const ares_channel_t *channel, *servers = srvr_head; - ares__channel_unlock(channel); + ares_channel_unlock(channel); return (int)status; } @@ -1045,17 +1168,17 @@ int ares_get_servers_ports(const ares_channel_t *channel, struct ares_addr_port_node *srvr_last = NULL; struct ares_addr_port_node *srvr_curr; ares_status_t status = ARES_SUCCESS; - ares__slist_node_t *node; + ares_slist_node_t *node; if (channel == NULL) { return ARES_ENODATA; } - ares__channel_lock(channel); + ares_channel_lock(channel); - for (node = ares__slist_node_first(channel->servers); node != NULL; - node = ares__slist_node_next(node)) { - const ares_server_t *server = ares__slist_node_val(node); + for (node = ares_slist_node_first(channel->servers); node != NULL; + node = ares_slist_node_next(node)) { + const ares_server_t *server = ares_slist_node_val(node); /* Allocate storage for this server node appending it to the list */ srvr_curr = ares_malloc_data(ARES_DATATYPE_ADDR_PORT_NODE); @@ -1091,30 +1214,30 @@ int ares_get_servers_ports(const ares_channel_t *channel, *servers = srvr_head; - ares__channel_unlock(channel); + ares_channel_unlock(channel); return (int)status; } int ares_set_servers(ares_channel_t *channel, const struct ares_addr_node *servers) { - ares__llist_t *slist; - ares_status_t status; + ares_llist_t *slist; + ares_status_t status; if (channel == NULL) { return ARES_ENODATA; } - status = ares_addr_node_to_server_config_llist(servers, &slist); + status = ares_addr_node_to_sconfig_llist(servers, &slist); if (status != ARES_SUCCESS) { return (int)status; } - ares__channel_lock(channel); - status = ares__servers_update(channel, slist, ARES_TRUE); - ares__channel_unlock(channel); + ares_channel_lock(channel); + status = ares_servers_update(channel, slist, ARES_TRUE); + ares_channel_unlock(channel); - ares__llist_destroy(slist); + ares_llist_destroy(slist); return (int)status; } @@ -1122,23 +1245,23 @@ int ares_set_servers(ares_channel_t *channel, int ares_set_servers_ports(ares_channel_t *channel, const struct ares_addr_port_node *servers) { - ares__llist_t *slist; - ares_status_t status; + ares_llist_t *slist; + ares_status_t status; if (channel == NULL) { return ARES_ENODATA; } - status = ares_addr_port_node_to_server_config_llist(servers, &slist); + status = ares_addrpnode_to_sconfig_llist(servers, &slist); if (status != ARES_SUCCESS) { return (int)status; } - ares__channel_lock(channel); - status = ares__servers_update(channel, slist, ARES_TRUE); - ares__channel_unlock(channel); + ares_channel_lock(channel); + status = ares_servers_update(channel, slist, ARES_TRUE); + ares_channel_unlock(channel); - ares__llist_destroy(slist); + ares_llist_destroy(slist); return (int)status; } @@ -1147,8 +1270,8 @@ int ares_set_servers_ports(ares_channel_t *channel, /* IPv6 addresses with ports require square brackets [fe80::1]:53 */ static ares_status_t set_servers_csv(ares_channel_t *channel, const char *_csv) { - ares_status_t status; - ares__llist_t *slist = NULL; + ares_status_t status; + ares_llist_t *slist = NULL; if (channel == NULL) { return ARES_ENODATA; @@ -1156,23 +1279,23 @@ static ares_status_t set_servers_csv(ares_channel_t *channel, const char *_csv) if (ares_strlen(_csv) == 0) { /* blank all servers */ - ares__channel_lock(channel); - status = ares__servers_update(channel, NULL, ARES_TRUE); - ares__channel_unlock(channel); + ares_channel_lock(channel); + status = ares_servers_update(channel, NULL, ARES_TRUE); + ares_channel_unlock(channel); return status; } - status = ares__sconfig_append_fromstr(&slist, _csv, ARES_FALSE); + status = ares_sconfig_append_fromstr(channel, &slist, _csv, ARES_FALSE); if (status != ARES_SUCCESS) { - ares__llist_destroy(slist); + ares_llist_destroy(slist); return status; } - ares__channel_lock(channel); - status = ares__servers_update(channel, slist, ARES_TRUE); - ares__channel_unlock(channel); + ares_channel_lock(channel); + status = ares_servers_update(channel, slist, ARES_TRUE); + ares_channel_unlock(channel); - ares__llist_destroy(slist); + ares_llist_destroy(slist); return status; } @@ -1190,24 +1313,24 @@ int ares_set_servers_ports_csv(ares_channel_t *channel, const char *_csv) char *ares_get_servers_csv(const ares_channel_t *channel) { - ares__buf_t *buf = NULL; - char *out = NULL; - ares__slist_node_t *node; + ares_buf_t *buf = NULL; + char *out = NULL; + ares_slist_node_t *node; - ares__channel_lock(channel); + ares_channel_lock(channel); - buf = ares__buf_create(); + buf = ares_buf_create(); if (buf == NULL) { goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } - for (node = ares__slist_node_first(channel->servers); node != NULL; - node = ares__slist_node_next(node)) { + for (node = ares_slist_node_first(channel->servers); node != NULL; + node = ares_slist_node_next(node)) { ares_status_t status; - const ares_server_t *server = ares__slist_node_val(node); + const ares_server_t *server = ares_slist_node_val(node); - if (ares__buf_len(buf)) { - status = ares__buf_append_byte(buf, ','); + if (ares_buf_len(buf)) { + status = ares_buf_append_byte(buf, ','); if (status != ARES_SUCCESS) { goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -1219,12 +1342,12 @@ char *ares_get_servers_csv(const ares_channel_t *channel) } } - out = ares__buf_finish_str(buf, NULL); + out = ares_buf_finish_str(buf, NULL); buf = NULL; done: - ares__channel_unlock(channel); - ares__buf_destroy(buf); + ares_channel_unlock(channel); + ares_buf_destroy(buf); return out; } diff --git a/deps/cares/src/lib/config-dos.h b/deps/cares/src/lib/config-dos.h index db758fcca6619a..afbcfb2858ea0b 100644 --- a/deps/cares/src/lib/config-dos.h +++ b/deps/cares/src/lib/config-dos.h @@ -21,6 +21,7 @@ #define HAVE_RECV 1 #define HAVE_RECVFROM 1 #define HAVE_SEND 1 +#define HAVE_SENDTO 1 #define HAVE_STRDUP 1 #define HAVE_STRICMP 1 #define HAVE_STRUCT_IN6_ADDR 1 diff --git a/deps/cares/src/lib/config-win32.h b/deps/cares/src/lib/config-win32.h index b9c4ec17336b86..be233a2f8b9c2d 100644 --- a/deps/cares/src/lib/config-win32.h +++ b/deps/cares/src/lib/config-win32.h @@ -187,6 +187,9 @@ /* Define if you have the send function. */ #define HAVE_SEND 1 +/* Define if you have the sendto function. */ +#define HAVE_SENDTO 1 + /* Define to the type of arg 1 for send. */ #define SEND_TYPE_ARG1 SOCKET diff --git a/deps/cares/src/lib/dsa/ares__array.c b/deps/cares/src/lib/dsa/ares_array.c similarity index 60% rename from deps/cares/src/lib/dsa/ares__array.c rename to deps/cares/src/lib/dsa/ares_array.c index 0c724248bf2e09..c421d5c5f670bd 100644 --- a/deps/cares/src/lib/dsa/ares__array.c +++ b/deps/cares/src/lib/dsa/ares_array.c @@ -24,23 +24,23 @@ * SPDX-License-Identifier: MIT */ #include "ares_private.h" -#include "ares__array.h" +#include "ares_array.h" #define ARES__ARRAY_MIN 4 -struct ares__array { - ares__array_destructor_t destruct; - void *arr; - size_t member_size; - size_t cnt; - size_t offset; - size_t alloc_cnt; +struct ares_array { + ares_array_destructor_t destruct; + void *arr; + size_t member_size; + size_t cnt; + size_t offset; + size_t alloc_cnt; }; -ares__array_t *ares__array_create(size_t member_size, - ares__array_destructor_t destruct) +ares_array_t *ares_array_create(size_t member_size, + ares_array_destructor_t destruct) { - ares__array_t *arr; + ares_array_t *arr; if (member_size == 0) { return NULL; @@ -56,7 +56,7 @@ ares__array_t *ares__array_create(size_t member_size, return arr; } -size_t ares__array_len(const ares__array_t *arr) +size_t ares_array_len(const ares_array_t *arr) { if (arr == NULL) { return 0; @@ -64,7 +64,7 @@ size_t ares__array_len(const ares__array_t *arr) return arr->cnt; } -void *ares__array_at(ares__array_t *arr, size_t idx) +void *ares_array_at(ares_array_t *arr, size_t idx) { if (arr == NULL || idx >= arr->cnt) { return NULL; @@ -72,7 +72,7 @@ void *ares__array_at(ares__array_t *arr, size_t idx) return (unsigned char *)arr->arr + ((idx + arr->offset) * arr->member_size); } -const void *ares__array_at_const(const ares__array_t *arr, size_t idx) +const void *ares_array_at_const(const ares_array_t *arr, size_t idx) { if (arr == NULL || idx >= arr->cnt) { return NULL; @@ -80,7 +80,7 @@ const void *ares__array_at_const(const ares__array_t *arr, size_t idx) return (unsigned char *)arr->arr + ((idx + arr->offset) * arr->member_size); } -ares_status_t ares__array_sort(ares__array_t *arr, ares__array_cmp_t cmp) +ares_status_t ares_array_sort(ares_array_t *arr, ares_array_cmp_t cmp) { if (arr == NULL || cmp == NULL) { return ARES_EFORMERR; @@ -96,7 +96,7 @@ ares_status_t ares__array_sort(ares__array_t *arr, ares__array_cmp_t cmp) return ARES_SUCCESS; } -void ares__array_destroy(ares__array_t *arr) +void ares_array_destroy(ares_array_t *arr) { size_t i; @@ -106,7 +106,7 @@ void ares__array_destroy(ares__array_t *arr) if (arr->destruct != NULL) { for (i = 0; i < arr->cnt; i++) { - arr->destruct(ares__array_at(arr, i)); + arr->destruct(ares_array_at(arr, i)); } } @@ -116,8 +116,8 @@ void ares__array_destroy(ares__array_t *arr) /* NOTE: this function operates on actual indexes, NOT indexes using the * arr->offset */ -static ares_status_t ares__array_move(ares__array_t *arr, size_t dest_idx, - size_t src_idx) +static ares_status_t ares_array_move(ares_array_t *arr, size_t dest_idx, + size_t src_idx) { void *dest_ptr; const void *src_ptr; @@ -140,18 +140,14 @@ static ares_status_t ares__array_move(ares__array_t *arr, size_t dest_idx, if (dest_idx > src_idx && arr->cnt + (dest_idx - src_idx) > arr->alloc_cnt) { return ARES_EFORMERR; } - if (dest_idx < src_idx) { - nmembers = arr->cnt - dest_idx; - } else { - nmembers = arr->cnt - src_idx; - } + nmembers = arr->cnt - (src_idx - arr->offset); memmove(dest_ptr, src_ptr, nmembers * arr->member_size); return ARES_SUCCESS; } -void *ares__array_finish(ares__array_t *arr, size_t *num_members) +void *ares_array_finish(ares_array_t *arr, size_t *num_members) { void *ptr; @@ -161,7 +157,7 @@ void *ares__array_finish(ares__array_t *arr, size_t *num_members) /* Make sure we move data to beginning of allocation */ if (arr->offset != 0) { - if (ares__array_move(arr, 0, arr->offset) != ARES_SUCCESS) { + if (ares_array_move(arr, 0, arr->offset) != ARES_SUCCESS) { return NULL; } arr->offset = 0; @@ -173,7 +169,7 @@ void *ares__array_finish(ares__array_t *arr, size_t *num_members) return ptr; } -ares_status_t ares__array_set_size(ares__array_t *arr, size_t size) +ares_status_t ares_array_set_size(ares_array_t *arr, size_t size) { void *temp; @@ -182,7 +178,7 @@ ares_status_t ares__array_set_size(ares__array_t *arr, size_t size) } /* Always operate on powers of 2 */ - size = ares__round_up_pow2(size); + size = ares_round_up_pow2(size); if (size < ARES__ARRAY_MIN) { size = ARES__ARRAY_MIN; @@ -203,8 +199,8 @@ ares_status_t ares__array_set_size(ares__array_t *arr, size_t size) return ARES_SUCCESS; } -ares_status_t ares__array_insert_at(void **elem_ptr, ares__array_t *arr, - size_t idx) +ares_status_t ares_array_insert_at(void **elem_ptr, ares_array_t *arr, + size_t idx) { void *ptr; ares_status_t status; @@ -219,14 +215,14 @@ ares_status_t ares__array_insert_at(void **elem_ptr, ares__array_t *arr, } /* Allocate more if needed */ - status = ares__array_set_size(arr, arr->cnt + 1); + status = ares_array_set_size(arr, arr->cnt + 1); if (status != ARES_SUCCESS) { return status; } /* Shift if we have memory but not enough room at the end */ if (arr->cnt + 1 + arr->offset > arr->alloc_cnt) { - status = ares__array_move(arr, 0, arr->offset); + status = ares_array_move(arr, 0, arr->offset); if (status != ARES_SUCCESS) { return status; } @@ -236,7 +232,7 @@ ares_status_t ares__array_insert_at(void **elem_ptr, ares__array_t *arr, /* If we're inserting anywhere other than the end, we need to move some * elements out of the way */ if (idx != arr->cnt) { - status = ares__array_move(arr, idx + arr->offset + 1, idx + arr->offset); + status = ares_array_move(arr, idx + arr->offset + 1, idx + arr->offset); if (status != ARES_SUCCESS) { return status; } @@ -255,46 +251,88 @@ ares_status_t ares__array_insert_at(void **elem_ptr, ares__array_t *arr, return ARES_SUCCESS; } -ares_status_t ares__array_insert_last(void **elem_ptr, ares__array_t *arr) +ares_status_t ares_array_insert_last(void **elem_ptr, ares_array_t *arr) +{ + return ares_array_insert_at(elem_ptr, arr, ares_array_len(arr)); +} + +ares_status_t ares_array_insert_first(void **elem_ptr, ares_array_t *arr) +{ + return ares_array_insert_at(elem_ptr, arr, 0); +} + +ares_status_t ares_array_insertdata_at(ares_array_t *arr, size_t idx, + const void *data_ptr) +{ + ares_status_t status; + void *ptr = NULL; + + status = ares_array_insert_at(&ptr, arr, idx); + if (status != ARES_SUCCESS) { + return status; + } + memcpy(ptr, data_ptr, arr->member_size); + return ARES_SUCCESS; +} + +ares_status_t ares_array_insertdata_last(ares_array_t *arr, + const void *data_ptr) { - return ares__array_insert_at(elem_ptr, arr, ares__array_len(arr)); + ares_status_t status; + void *ptr = NULL; + + status = ares_array_insert_last(&ptr, arr); + if (status != ARES_SUCCESS) { + return status; + } + memcpy(ptr, data_ptr, arr->member_size); + return ARES_SUCCESS; } -ares_status_t ares__array_insert_first(void **elem_ptr, ares__array_t *arr) +ares_status_t ares_array_insertdata_first(ares_array_t *arr, + const void *data_ptr) { - return ares__array_insert_at(elem_ptr, arr, 0); + ares_status_t status; + void *ptr = NULL; + + status = ares_array_insert_last(&ptr, arr); + if (status != ARES_SUCCESS) { + return status; + } + memcpy(ptr, data_ptr, arr->member_size); + return ARES_SUCCESS; } -void *ares__array_first(ares__array_t *arr) +void *ares_array_first(ares_array_t *arr) { - return ares__array_at(arr, 0); + return ares_array_at(arr, 0); } -void *ares__array_last(ares__array_t *arr) +void *ares_array_last(ares_array_t *arr) { - size_t cnt = ares__array_len(arr); + size_t cnt = ares_array_len(arr); if (cnt == 0) { return NULL; } - return ares__array_at(arr, cnt - 1); + return ares_array_at(arr, cnt - 1); } -const void *ares__array_first_const(const ares__array_t *arr) +const void *ares_array_first_const(const ares_array_t *arr) { - return ares__array_at_const(arr, 0); + return ares_array_at_const(arr, 0); } -const void *ares__array_last_const(const ares__array_t *arr) +const void *ares_array_last_const(const ares_array_t *arr) { - size_t cnt = ares__array_len(arr); + size_t cnt = ares_array_len(arr); if (cnt == 0) { return NULL; } - return ares__array_at_const(arr, cnt - 1); + return ares_array_at_const(arr, cnt - 1); } -ares_status_t ares__array_claim_at(void *dest, size_t dest_size, - ares__array_t *arr, size_t idx) +ares_status_t ares_array_claim_at(void *dest, size_t dest_size, + ares_array_t *arr, size_t idx) { ares_status_t status; @@ -307,7 +345,7 @@ ares_status_t ares__array_claim_at(void *dest, size_t dest_size, } if (dest) { - memcpy(dest, ares__array_at(arr, idx), arr->member_size); + memcpy(dest, ares_array_at(arr, idx), arr->member_size); } if (idx == 0) { @@ -317,7 +355,7 @@ ares_status_t ares__array_claim_at(void *dest, size_t dest_size, } else if (idx != arr->cnt - 1) { /* Must shift entire array if removing an element from the middle. Does * nothing if removing last element other than decrement count. */ - status = ares__array_move(arr, idx + arr->offset, idx + arr->offset + 1); + status = ares_array_move(arr, idx + arr->offset, idx + arr->offset + 1); if (status != ARES_SUCCESS) { return status; } @@ -327,9 +365,9 @@ ares_status_t ares__array_claim_at(void *dest, size_t dest_size, return ARES_SUCCESS; } -ares_status_t ares__array_remove_at(ares__array_t *arr, size_t idx) +ares_status_t ares_array_remove_at(ares_array_t *arr, size_t idx) { - void *ptr = ares__array_at(arr, idx); + void *ptr = ares_array_at(arr, idx); if (arr == NULL || ptr == NULL) { return ARES_EFORMERR; } @@ -338,19 +376,19 @@ ares_status_t ares__array_remove_at(ares__array_t *arr, size_t idx) arr->destruct(ptr); } - return ares__array_claim_at(NULL, 0, arr, idx); + return ares_array_claim_at(NULL, 0, arr, idx); } -ares_status_t ares__array_remove_first(ares__array_t *arr) +ares_status_t ares_array_remove_first(ares_array_t *arr) { - return ares__array_remove_at(arr, 0); + return ares_array_remove_at(arr, 0); } -ares_status_t ares__array_remove_last(ares__array_t *arr) +ares_status_t ares_array_remove_last(ares_array_t *arr) { - size_t cnt = ares__array_len(arr); + size_t cnt = ares_array_len(arr); if (cnt == 0) { return ARES_EFORMERR; } - return ares__array_remove_at(arr, cnt - 1); + return ares_array_remove_at(arr, cnt - 1); } diff --git a/deps/cares/src/lib/dsa/ares__htable.c b/deps/cares/src/lib/dsa/ares_htable.c similarity index 64% rename from deps/cares/src/lib/dsa/ares__htable.c rename to deps/cares/src/lib/dsa/ares_htable.c index 9049b3246b36f1..f76b67cae9a668 100644 --- a/deps/cares/src/lib/dsa/ares__htable.c +++ b/deps/cares/src/lib/dsa/ares_htable.c @@ -24,33 +24,37 @@ * SPDX-License-Identifier: MIT */ #include "ares_private.h" -#include "ares__llist.h" -#include "ares__htable.h" +#include "ares_llist.h" +#include "ares_htable.h" #define ARES__HTABLE_MAX_BUCKETS (1U << 24) #define ARES__HTABLE_MIN_BUCKETS (1U << 4) #define ARES__HTABLE_EXPAND_PERCENT 75 -struct ares__htable { - ares__htable_hashfunc_t hash; - ares__htable_bucket_key_t bucket_key; - ares__htable_bucket_free_t bucket_free; - ares__htable_key_eq_t key_eq; - unsigned int seed; - unsigned int size; - size_t num_keys; - size_t num_collisions; - /* NOTE: if we converted buckets into ares__slist_t we could guarantee on +struct ares_htable { + ares_htable_hashfunc_t hash; + ares_htable_bucket_key_t bucket_key; + ares_htable_bucket_free_t bucket_free; + ares_htable_key_eq_t key_eq; + unsigned int seed; + unsigned int size; + size_t num_keys; + size_t num_collisions; + /* NOTE: if we converted buckets into ares_slist_t we could guarantee on * hash collisions we would have O(log n) worst case insert and search * performance. (We'd also need to make key_eq into a key_cmp to * support sort). That said, risk with a random hash seed is near zero, - * and ares__slist_t is heavier weight, so I think using ares__llist_t + * and ares_slist_t is heavier weight, so I think using ares_llist_t * is an overall win. */ - ares__llist_t **buckets; + ares_llist_t **buckets; }; -static unsigned int ares__htable_generate_seed(ares__htable_t *htable) +static unsigned int ares_htable_generate_seed(ares_htable_t *htable) { +#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION + /* Seed needs to be static for fuzzing */ + return 0; +#else unsigned int seed = 0; time_t t = time(NULL); @@ -61,11 +65,12 @@ static unsigned int ares__htable_generate_seed(ares__htable_t *htable) seed |= (unsigned int)((size_t)&seed & 0xFFFFFFFF); seed |= (unsigned int)(((ares_uint64_t)t) & 0xFFFFFFFF); return seed; +#endif } -static void ares__htable_buckets_destroy(ares__llist_t **buckets, - unsigned int size, - ares_bool_t destroy_vals) +static void ares_htable_buckets_destroy(ares_llist_t **buckets, + unsigned int size, + ares_bool_t destroy_vals) { unsigned int i; @@ -79,30 +84,30 @@ static void ares__htable_buckets_destroy(ares__llist_t **buckets, } if (!destroy_vals) { - ares__llist_replace_destructor(buckets[i], NULL); + ares_llist_replace_destructor(buckets[i], NULL); } - ares__llist_destroy(buckets[i]); + ares_llist_destroy(buckets[i]); } ares_free(buckets); } -void ares__htable_destroy(ares__htable_t *htable) +void ares_htable_destroy(ares_htable_t *htable) { if (htable == NULL) { return; } - ares__htable_buckets_destroy(htable->buckets, htable->size, ARES_TRUE); + ares_htable_buckets_destroy(htable->buckets, htable->size, ARES_TRUE); ares_free(htable); } -ares__htable_t *ares__htable_create(ares__htable_hashfunc_t hash_func, - ares__htable_bucket_key_t bucket_key, - ares__htable_bucket_free_t bucket_free, - ares__htable_key_eq_t key_eq) +ares_htable_t *ares_htable_create(ares_htable_hashfunc_t hash_func, + ares_htable_bucket_key_t bucket_key, + ares_htable_bucket_free_t bucket_free, + ares_htable_key_eq_t key_eq) { - ares__htable_t *htable = NULL; + ares_htable_t *htable = NULL; if (hash_func == NULL || bucket_key == NULL || bucket_free == NULL || key_eq == NULL) { @@ -118,7 +123,7 @@ ares__htable_t *ares__htable_create(ares__htable_hashfunc_t hash_func, htable->bucket_key = bucket_key; htable->bucket_free = bucket_free; htable->key_eq = key_eq; - htable->seed = ares__htable_generate_seed(htable); + htable->seed = ares_htable_generate_seed(htable); htable->size = ARES__HTABLE_MIN_BUCKETS; htable->buckets = ares_malloc_zero(sizeof(*htable->buckets) * htable->size); @@ -129,11 +134,11 @@ ares__htable_t *ares__htable_create(ares__htable_hashfunc_t hash_func, return htable; fail: - ares__htable_destroy(htable); + ares_htable_destroy(htable); return NULL; } -const void **ares__htable_all_buckets(const ares__htable_t *htable, size_t *num) +const void **ares_htable_all_buckets(const ares_htable_t *htable, size_t *num) { const void **out = NULL; size_t cnt = 0; @@ -151,10 +156,10 @@ const void **ares__htable_all_buckets(const ares__htable_t *htable, size_t *num) } for (i = 0; i < htable->size; i++) { - ares__llist_node_t *node; - for (node = ares__llist_node_first(htable->buckets[i]); node != NULL; - node = ares__llist_node_next(node)) { - out[cnt++] = ares__llist_node_val(node); + ares_llist_node_t *node; + for (node = ares_llist_node_first(htable->buckets[i]); node != NULL; + node = ares_llist_node_next(node)) { + out[cnt++] = ares_llist_node_val(node); } } @@ -169,14 +174,14 @@ const void **ares__htable_all_buckets(const ares__htable_t *htable, size_t *num) * efficient */ #define HASH_IDX(h, key) h->hash(key, h->seed) & (h->size - 1) -static ares__llist_node_t *ares__htable_find(const ares__htable_t *htable, - unsigned int idx, const void *key) +static ares_llist_node_t *ares_htable_find(const ares_htable_t *htable, + unsigned int idx, const void *key) { - ares__llist_node_t *node = NULL; + ares_llist_node_t *node = NULL; - for (node = ares__llist_node_first(htable->buckets[idx]); node != NULL; - node = ares__llist_node_next(node)) { - if (htable->key_eq(key, htable->bucket_key(ares__llist_node_val(node)))) { + for (node = ares_llist_node_first(htable->buckets[idx]); node != NULL; + node = ares_llist_node_next(node)) { + if (htable->key_eq(key, htable->bucket_key(ares_llist_node_val(node)))) { break; } } @@ -184,14 +189,14 @@ static ares__llist_node_t *ares__htable_find(const ares__htable_t *htable, return node; } -static ares_bool_t ares__htable_expand(ares__htable_t *htable) +static ares_bool_t ares_htable_expand(ares_htable_t *htable) { - ares__llist_t **buckets = NULL; - unsigned int old_size = htable->size; - size_t i; - ares__llist_t **prealloc_llist = NULL; - size_t prealloc_llist_len = 0; - ares_bool_t rv = ARES_FALSE; + ares_llist_t **buckets = NULL; + unsigned int old_size = htable->size; + size_t i; + ares_llist_t **prealloc_llist = NULL; + size_t prealloc_llist_len = 0; + ares_bool_t rv = ARES_FALSE; /* Not a failure, just won't expand */ if (old_size == ARES__HTABLE_MAX_BUCKETS) { @@ -219,7 +224,7 @@ static ares_bool_t ares__htable_expand(ares__htable_t *htable) } } for (i = 0; i < prealloc_llist_len; i++) { - prealloc_llist[i] = ares__llist_create(htable->bucket_free); + prealloc_llist[i] = ares_llist_create(htable->bucket_free); if (prealloc_llist[i] == NULL) { goto done; } @@ -228,7 +233,7 @@ static ares_bool_t ares__htable_expand(ares__htable_t *htable) /* Iterate across all buckets and move the entries to the new buckets */ htable->num_collisions = 0; for (i = 0; i < old_size; i++) { - ares__llist_node_t *node; + ares_llist_node_t *node; /* Nothing in this bucket */ if (htable->buckets[i] == NULL) { @@ -238,8 +243,8 @@ static ares_bool_t ares__htable_expand(ares__htable_t *htable) /* Fast path optimization (most likely case), there is likely only a single * entry in both the source and destination, check for this to confirm and * if so, just move the bucket over */ - if (ares__llist_len(htable->buckets[i]) == 1) { - const void *val = ares__llist_first_val(htable->buckets[i]); + if (ares_llist_len(htable->buckets[i]) == 1) { + const void *val = ares_llist_first_val(htable->buckets[i]); size_t idx = HASH_IDX(htable, htable->bucket_key(val)); if (buckets[idx] == NULL) { @@ -251,13 +256,13 @@ static ares_bool_t ares__htable_expand(ares__htable_t *htable) } /* Slow path, collisions */ - while ((node = ares__llist_node_first(htable->buckets[i])) != NULL) { - const void *val = ares__llist_node_val(node); + while ((node = ares_llist_node_first(htable->buckets[i])) != NULL) { + const void *val = ares_llist_node_val(node); size_t idx = HASH_IDX(htable, htable->bucket_key(val)); /* Try fast path again as maybe we popped one collision off and the * next we can reuse the llist parent */ - if (buckets[idx] == NULL && ares__llist_len(htable->buckets[i]) == 1) { + if (buckets[idx] == NULL && ares_llist_len(htable->buckets[i]) == 1) { /* Swap! */ buckets[idx] = htable->buckets[i]; htable->buckets[i] = NULL; @@ -277,12 +282,12 @@ static ares_bool_t ares__htable_expand(ares__htable_t *htable) htable->num_collisions++; } - ares__llist_node_move_parent_first(node, buckets[idx]); + ares_llist_node_mvparent_first(node, buckets[idx]); } /* Abandoned bucket, destroy */ if (htable->buckets[i] != NULL) { - ares__llist_destroy(htable->buckets[i]); + ares_llist_destroy(htable->buckets[i]); htable->buckets[i] = NULL; } } @@ -297,8 +302,8 @@ static ares_bool_t ares__htable_expand(ares__htable_t *htable) done: ares_free(buckets); /* destroy any unused preallocated buckets */ - ares__htable_buckets_destroy(prealloc_llist, (unsigned int)prealloc_llist_len, - ARES_FALSE); + ares_htable_buckets_destroy(prealloc_llist, (unsigned int)prealloc_llist_len, + ARES_FALSE); /* On failure, we need to restore the htable size */ if (rv != ARES_TRUE) { @@ -308,11 +313,11 @@ static ares_bool_t ares__htable_expand(ares__htable_t *htable) return rv; } -ares_bool_t ares__htable_insert(ares__htable_t *htable, void *bucket) +ares_bool_t ares_htable_insert(ares_htable_t *htable, void *bucket) { - unsigned int idx = 0; - ares__llist_node_t *node = NULL; - const void *key = NULL; + unsigned int idx = 0; + ares_llist_node_t *node = NULL; + const void *key = NULL; if (htable == NULL || bucket == NULL) { return ARES_FALSE; @@ -323,9 +328,9 @@ ares_bool_t ares__htable_insert(ares__htable_t *htable, void *bucket) idx = HASH_IDX(htable, key); /* See if we have a matching bucket already, if so, replace it */ - node = ares__htable_find(htable, idx, key); + node = ares_htable_find(htable, idx, key); if (node != NULL) { - ares__llist_node_replace(node, bucket); + ares_llist_node_replace(node, bucket); return ARES_TRUE; } @@ -333,7 +338,7 @@ ares_bool_t ares__htable_insert(ares__htable_t *htable, void *bucket) * increased beyond our threshold */ if (htable->num_keys + 1 > (htable->size * ARES__HTABLE_EXPAND_PERCENT) / 100) { - if (!ares__htable_expand(htable)) { + if (!ares_htable_expand(htable)) { return ARES_FALSE; /* LCOV_EXCL_LINE */ } /* If we expanded, need to calculate a new index */ @@ -342,19 +347,19 @@ ares_bool_t ares__htable_insert(ares__htable_t *htable, void *bucket) /* We lazily allocate the linked list */ if (htable->buckets[idx] == NULL) { - htable->buckets[idx] = ares__llist_create(htable->bucket_free); + htable->buckets[idx] = ares_llist_create(htable->bucket_free); if (htable->buckets[idx] == NULL) { return ARES_FALSE; } } - node = ares__llist_insert_first(htable->buckets[idx], bucket); + node = ares_llist_insert_first(htable->buckets[idx], bucket); if (node == NULL) { return ARES_FALSE; } /* Track collisions for rehash stability */ - if (ares__llist_len(htable->buckets[idx]) > 1) { + if (ares_llist_len(htable->buckets[idx]) > 1) { htable->num_collisions++; } @@ -363,7 +368,7 @@ ares_bool_t ares__htable_insert(ares__htable_t *htable, void *bucket) return ARES_TRUE; } -void *ares__htable_get(const ares__htable_t *htable, const void *key) +void *ares_htable_get(const ares_htable_t *htable, const void *key) { unsigned int idx; @@ -373,20 +378,20 @@ void *ares__htable_get(const ares__htable_t *htable, const void *key) idx = HASH_IDX(htable, key); - return ares__llist_node_val(ares__htable_find(htable, idx, key)); + return ares_llist_node_val(ares_htable_find(htable, idx, key)); } -ares_bool_t ares__htable_remove(ares__htable_t *htable, const void *key) +ares_bool_t ares_htable_remove(ares_htable_t *htable, const void *key) { - ares__llist_node_t *node; - unsigned int idx; + ares_llist_node_t *node; + unsigned int idx; if (htable == NULL || key == NULL) { return ARES_FALSE; } idx = HASH_IDX(htable, key); - node = ares__htable_find(htable, idx, key); + node = ares_htable_find(htable, idx, key); if (node == NULL) { return ARES_FALSE; } @@ -394,15 +399,15 @@ ares_bool_t ares__htable_remove(ares__htable_t *htable, const void *key) htable->num_keys--; /* Reduce collisions */ - if (ares__llist_len(ares__llist_node_parent(node)) > 1) { + if (ares_llist_len(ares_llist_node_parent(node)) > 1) { htable->num_collisions--; } - ares__llist_node_destroy(node); + ares_llist_node_destroy(node); return ARES_TRUE; } -size_t ares__htable_num_keys(const ares__htable_t *htable) +size_t ares_htable_num_keys(const ares_htable_t *htable) { if (htable == NULL) { return 0; @@ -410,16 +415,15 @@ size_t ares__htable_num_keys(const ares__htable_t *htable) return htable->num_keys; } -unsigned int ares__htable_hash_FNV1a(const unsigned char *key, size_t key_len, - unsigned int seed) +unsigned int ares_htable_hash_FNV1a(const unsigned char *key, size_t key_len, + unsigned int seed) { - /* recommended seed is 2166136261U, but we don't want collisions */ - unsigned int hv = seed; + unsigned int hv = seed ^ 2166136261U; size_t i; for (i = 0; i < key_len; i++) { hv ^= (unsigned int)key[i]; - /* hv *= 0x01000193 */ + /* hv *= 16777619 (0x01000193) */ hv += (hv << 1) + (hv << 4) + (hv << 7) + (hv << 8) + (hv << 24); } @@ -427,16 +431,15 @@ unsigned int ares__htable_hash_FNV1a(const unsigned char *key, size_t key_len, } /* Case insensitive version, meant for ASCII strings */ -unsigned int ares__htable_hash_FNV1a_casecmp(const unsigned char *key, - size_t key_len, unsigned int seed) +unsigned int ares_htable_hash_FNV1a_casecmp(const unsigned char *key, + size_t key_len, unsigned int seed) { - /* recommended seed is 2166136261U, but we don't want collisions */ - unsigned int hv = seed; + unsigned int hv = seed ^ 2166136261U; size_t i; for (i = 0; i < key_len; i++) { - hv ^= (unsigned int)ares__tolower(key[i]); - /* hv *= 0x01000193 */ + hv ^= (unsigned int)ares_tolower(key[i]); + /* hv *= 16777619 (0x01000193) */ hv += (hv << 1) + (hv << 4) + (hv << 7) + (hv << 8) + (hv << 24); } diff --git a/deps/cares/src/lib/dsa/ares__htable.h b/deps/cares/src/lib/dsa/ares_htable.h similarity index 76% rename from deps/cares/src/lib/dsa/ares__htable.h rename to deps/cares/src/lib/dsa/ares_htable.h index d09c865977cdae..5700286eb0fabf 100644 --- a/deps/cares/src/lib/dsa/ares__htable.h +++ b/deps/cares/src/lib/dsa/ares_htable.h @@ -27,7 +27,7 @@ #define __ARES__HTABLE_H -/*! \addtogroup ares__htable Base HashTable Data Structure +/*! \addtogroup ares_htable Base HashTable Data Structure * * This is a basic hashtable data structure that is meant to be wrapped * by a higher level implementation. This data structure is designed to @@ -45,10 +45,10 @@ * @{ */ -struct ares__htable; +struct ares_htable; /*! Opaque data type for generic hash table implementation */ -typedef struct ares__htable ares__htable_t; +typedef struct ares_htable ares_htable_t; /*! Callback for generating a hash of the key. * @@ -58,21 +58,21 @@ typedef struct ares__htable ares__htable_t; * but otherwise will not change between calls. * \return hash */ -typedef unsigned int (*ares__htable_hashfunc_t)(const void *key, - unsigned int seed); +typedef unsigned int (*ares_htable_hashfunc_t)(const void *key, + unsigned int seed); /*! Callback to free the bucket * * \param[in] bucket user provided bucket */ -typedef void (*ares__htable_bucket_free_t)(void *bucket); +typedef void (*ares_htable_bucket_free_t)(void *bucket); /*! Callback to extract the key from the user-provided bucket * * \param[in] bucket user provided bucket * \return pointer to key held in bucket */ -typedef const void *(*ares__htable_bucket_key_t)(const void *bucket); +typedef const void *(*ares_htable_bucket_key_t)(const void *bucket); /*! Callback to compare two keys for equality * @@ -80,15 +80,14 @@ typedef const void *(*ares__htable_bucket_key_t)(const void *bucket); * \param[in] key2 second key * \return ARES_TRUE if equal, ARES_FALSE if not */ -typedef ares_bool_t (*ares__htable_key_eq_t)(const void *key1, - const void *key2); +typedef ares_bool_t (*ares_htable_key_eq_t)(const void *key1, const void *key2); /*! Destroy the initialized hashtable * * \param[in] htable initialized hashtable */ -void ares__htable_destroy(ares__htable_t *htable); +void ares_htable_destroy(ares_htable_t *htable); /*! Create a new hashtable * @@ -98,17 +97,17 @@ void ares__htable_destroy(ares__htable_t *htable); * \param[in] key_eq Required. Callback to check for key equality. * \return initialized hashtable. NULL if out of memory or misuse. */ -ares__htable_t *ares__htable_create(ares__htable_hashfunc_t hash_func, - ares__htable_bucket_key_t bucket_key, - ares__htable_bucket_free_t bucket_free, - ares__htable_key_eq_t key_eq); +ares_htable_t *ares_htable_create(ares_htable_hashfunc_t hash_func, + ares_htable_bucket_key_t bucket_key, + ares_htable_bucket_free_t bucket_free, + ares_htable_key_eq_t key_eq); /*! Count of keys from initialized hashtable * * \param[in] htable Initialized hashtable. * \return count of keys */ -size_t ares__htable_num_keys(const ares__htable_t *htable); +size_t ares_htable_num_keys(const ares_htable_t *htable); /*! Retrieve an array of buckets from the hashtable. This is mainly used as * a helper for retrieving an array of keys. @@ -120,8 +119,7 @@ size_t ares__htable_num_keys(const ares__htable_t *htable); * will be a dangling pointer. It is expected wrappers will make * such values safe by duplicating them. */ -const void **ares__htable_all_buckets(const ares__htable_t *htable, - size_t *num); +const void **ares_htable_all_buckets(const ares_htable_t *htable, size_t *num); /*! Insert bucket into hashtable * @@ -130,7 +128,7 @@ const void **ares__htable_all_buckets(const ares__htable_t *htable, * allowed to be NULL. * \return ARES_TRUE on success, ARES_FALSE if out of memory */ -ares_bool_t ares__htable_insert(ares__htable_t *htable, void *bucket); +ares_bool_t ares_htable_insert(ares_htable_t *htable, void *bucket); /*! Retrieve bucket from hashtable based on key. * @@ -138,7 +136,7 @@ ares_bool_t ares__htable_insert(ares__htable_t *htable, void *bucket); * \param[in] key Pointer to key to use for comparison. * \return matching bucket, or NULL if not found. */ -void *ares__htable_get(const ares__htable_t *htable, const void *key); +void *ares_htable_get(const ares_htable_t *htable, const void *key); /*! Remove bucket from hashtable by key * @@ -146,7 +144,7 @@ void *ares__htable_get(const ares__htable_t *htable, const void *key); * \param[in] key Pointer to key to use for comparison * \return ARES_TRUE if found, ARES_FALSE if not found */ -ares_bool_t ares__htable_remove(ares__htable_t *htable, const void *key); +ares_bool_t ares_htable_remove(ares_htable_t *htable, const void *key); /*! FNV1a hash algorithm. Can be used as underlying primitive for building * a wrapper hashtable. @@ -156,8 +154,8 @@ ares_bool_t ares__htable_remove(ares__htable_t *htable, const void *key); * \param[in] seed Seed for generating hash * \return hash value */ -unsigned int ares__htable_hash_FNV1a(const unsigned char *key, size_t key_len, - unsigned int seed); +unsigned int ares_htable_hash_FNV1a(const unsigned char *key, size_t key_len, + unsigned int seed); /*! FNV1a hash algorithm, but converts all characters to lowercase before * hashing to make the hash case-insensitive. Can be used as underlying @@ -168,8 +166,8 @@ unsigned int ares__htable_hash_FNV1a(const unsigned char *key, size_t key_len, * \param[in] seed Seed for generating hash * \return hash value */ -unsigned int ares__htable_hash_FNV1a_casecmp(const unsigned char *key, - size_t key_len, unsigned int seed); +unsigned int ares_htable_hash_FNV1a_casecmp(const unsigned char *key, + size_t key_len, unsigned int seed); /*! @} */ diff --git a/deps/cares/src/lib/dsa/ares__htable_asvp.c b/deps/cares/src/lib/dsa/ares_htable_asvp.c similarity index 62% rename from deps/cares/src/lib/dsa/ares__htable_asvp.c rename to deps/cares/src/lib/dsa/ares_htable_asvp.c index 4b9267ff6c14ee..32f4d2c9949962 100644 --- a/deps/cares/src/lib/dsa/ares__htable_asvp.c +++ b/deps/cares/src/lib/dsa/ares_htable_asvp.c @@ -24,46 +24,45 @@ * SPDX-License-Identifier: MIT */ #include "ares_private.h" -#include "ares__htable.h" -#include "ares__htable_asvp.h" +#include "ares_htable.h" +#include "ares_htable_asvp.h" -struct ares__htable_asvp { - ares__htable_asvp_val_free_t free_val; - ares__htable_t *hash; +struct ares_htable_asvp { + ares_htable_asvp_val_free_t free_val; + ares_htable_t *hash; }; typedef struct { - ares_socket_t key; - void *val; - ares__htable_asvp_t *parent; -} ares__htable_asvp_bucket_t; + ares_socket_t key; + void *val; + ares_htable_asvp_t *parent; +} ares_htable_asvp_bucket_t; -void ares__htable_asvp_destroy(ares__htable_asvp_t *htable) +void ares_htable_asvp_destroy(ares_htable_asvp_t *htable) { if (htable == NULL) { return; } - ares__htable_destroy(htable->hash); + ares_htable_destroy(htable->hash); ares_free(htable); } static unsigned int hash_func(const void *key, unsigned int seed) { const ares_socket_t *arg = key; - return ares__htable_hash_FNV1a((const unsigned char *)arg, sizeof(*arg), - seed); + return ares_htable_hash_FNV1a((const unsigned char *)arg, sizeof(*arg), seed); } static const void *bucket_key(const void *bucket) { - const ares__htable_asvp_bucket_t *arg = bucket; + const ares_htable_asvp_bucket_t *arg = bucket; return &arg->key; } static void bucket_free(void *bucket) { - ares__htable_asvp_bucket_t *arg = bucket; + ares_htable_asvp_bucket_t *arg = bucket; if (arg->parent->free_val) { arg->parent->free_val(arg->val); @@ -84,16 +83,15 @@ static ares_bool_t key_eq(const void *key1, const void *key2) return ARES_FALSE; } -ares__htable_asvp_t * - ares__htable_asvp_create(ares__htable_asvp_val_free_t val_free) +ares_htable_asvp_t * + ares_htable_asvp_create(ares_htable_asvp_val_free_t val_free) { - ares__htable_asvp_t *htable = ares_malloc(sizeof(*htable)); + ares_htable_asvp_t *htable = ares_malloc(sizeof(*htable)); if (htable == NULL) { goto fail; } - htable->hash = - ares__htable_create(hash_func, bucket_key, bucket_free, key_eq); + htable->hash = ares_htable_create(hash_func, bucket_key, bucket_free, key_eq); if (htable->hash == NULL) { goto fail; } @@ -104,14 +102,14 @@ ares__htable_asvp_t * fail: if (htable) { - ares__htable_destroy(htable->hash); + ares_htable_destroy(htable->hash); ares_free(htable); } return NULL; } -ares_socket_t *ares__htable_asvp_keys(const ares__htable_asvp_t *htable, - size_t *num) +ares_socket_t *ares_htable_asvp_keys(const ares_htable_asvp_t *htable, + size_t *num) { const void **buckets = NULL; size_t cnt = 0; @@ -124,7 +122,7 @@ ares_socket_t *ares__htable_asvp_keys(const ares__htable_asvp_t *htable, *num = 0; - buckets = ares__htable_all_buckets(htable->hash, &cnt); + buckets = ares_htable_all_buckets(htable->hash, &cnt); if (buckets == NULL || cnt == 0) { return NULL; } @@ -136,7 +134,7 @@ ares_socket_t *ares__htable_asvp_keys(const ares__htable_asvp_t *htable, } for (i = 0; i < cnt; i++) { - out[i] = ((const ares__htable_asvp_bucket_t *)buckets[i])->key; + out[i] = ((const ares_htable_asvp_bucket_t *)buckets[i])->key; } ares_free(buckets); @@ -144,10 +142,10 @@ ares_socket_t *ares__htable_asvp_keys(const ares__htable_asvp_t *htable, return out; } -ares_bool_t ares__htable_asvp_insert(ares__htable_asvp_t *htable, - ares_socket_t key, void *val) +ares_bool_t ares_htable_asvp_insert(ares_htable_asvp_t *htable, + ares_socket_t key, void *val) { - ares__htable_asvp_bucket_t *bucket = NULL; + ares_htable_asvp_bucket_t *bucket = NULL; if (htable == NULL) { goto fail; @@ -162,7 +160,7 @@ ares_bool_t ares__htable_asvp_insert(ares__htable_asvp_t *htable, bucket->key = key; bucket->val = val; - if (!ares__htable_insert(htable->hash, bucket)) { + if (!ares_htable_insert(htable->hash, bucket)) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -175,10 +173,10 @@ ares_bool_t ares__htable_asvp_insert(ares__htable_asvp_t *htable, return ARES_FALSE; } -ares_bool_t ares__htable_asvp_get(const ares__htable_asvp_t *htable, - ares_socket_t key, void **val) +ares_bool_t ares_htable_asvp_get(const ares_htable_asvp_t *htable, + ares_socket_t key, void **val) { - ares__htable_asvp_bucket_t *bucket = NULL; + ares_htable_asvp_bucket_t *bucket = NULL; if (val) { *val = NULL; @@ -188,7 +186,7 @@ ares_bool_t ares__htable_asvp_get(const ares__htable_asvp_t *htable, return ARES_FALSE; } - bucket = ares__htable_get(htable->hash, &key); + bucket = ares_htable_get(htable->hash, &key); if (bucket == NULL) { return ARES_FALSE; } @@ -199,28 +197,28 @@ ares_bool_t ares__htable_asvp_get(const ares__htable_asvp_t *htable, return ARES_TRUE; } -void *ares__htable_asvp_get_direct(const ares__htable_asvp_t *htable, - ares_socket_t key) +void *ares_htable_asvp_get_direct(const ares_htable_asvp_t *htable, + ares_socket_t key) { void *val = NULL; - ares__htable_asvp_get(htable, key, &val); + ares_htable_asvp_get(htable, key, &val); return val; } -ares_bool_t ares__htable_asvp_remove(ares__htable_asvp_t *htable, - ares_socket_t key) +ares_bool_t ares_htable_asvp_remove(ares_htable_asvp_t *htable, + ares_socket_t key) { if (htable == NULL) { return ARES_FALSE; } - return ares__htable_remove(htable->hash, &key); + return ares_htable_remove(htable->hash, &key); } -size_t ares__htable_asvp_num_keys(const ares__htable_asvp_t *htable) +size_t ares_htable_asvp_num_keys(const ares_htable_asvp_t *htable) { if (htable == NULL) { return 0; } - return ares__htable_num_keys(htable->hash); + return ares_htable_num_keys(htable->hash); } diff --git a/deps/cares/src/lib/dsa/ares_htable_dict.c b/deps/cares/src/lib/dsa/ares_htable_dict.c new file mode 100644 index 00000000000000..93d7a20137c8db --- /dev/null +++ b/deps/cares/src/lib/dsa/ares_htable_dict.c @@ -0,0 +1,228 @@ +/* MIT License + * + * Copyright (c) 2024 Brad House + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * SPDX-License-Identifier: MIT + */ +#include "ares_private.h" +#include "ares_htable.h" +#include "ares_htable_dict.h" + +struct ares_htable_dict { + ares_htable_t *hash; +}; + +typedef struct { + char *key; + char *val; + ares_htable_dict_t *parent; +} ares_htable_dict_bucket_t; + +void ares_htable_dict_destroy(ares_htable_dict_t *htable) +{ + if (htable == NULL) { + return; /* LCOV_EXCL_LINE: DefensiveCoding */ + } + + ares_htable_destroy(htable->hash); + ares_free(htable); +} + +static unsigned int hash_func(const void *key, unsigned int seed) +{ + return ares_htable_hash_FNV1a_casecmp(key, ares_strlen(key), seed); +} + +static const void *bucket_key(const void *bucket) +{ + const ares_htable_dict_bucket_t *arg = bucket; + return arg->key; +} + +static void bucket_free(void *bucket) +{ + ares_htable_dict_bucket_t *arg = bucket; + + ares_free(arg->key); + ares_free(arg->val); + + ares_free(arg); +} + +static ares_bool_t key_eq(const void *key1, const void *key2) +{ + return ares_strcaseeq(key1, key2); +} + +ares_htable_dict_t *ares_htable_dict_create(void) +{ + ares_htable_dict_t *htable = ares_malloc(sizeof(*htable)); + if (htable == NULL) { + goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ + } + + htable->hash = ares_htable_create(hash_func, bucket_key, bucket_free, key_eq); + if (htable->hash == NULL) { + goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ + } + + return htable; + +/* LCOV_EXCL_START: OutOfMemory */ +fail: + if (htable) { + ares_htable_destroy(htable->hash); + ares_free(htable); + } + return NULL; + /* LCOV_EXCL_STOP */ +} + +ares_bool_t ares_htable_dict_insert(ares_htable_dict_t *htable, const char *key, + const char *val) +{ + ares_htable_dict_bucket_t *bucket = NULL; + + if (htable == NULL || ares_strlen(key) == 0) { + goto fail; + } + + bucket = ares_malloc_zero(sizeof(*bucket)); + if (bucket == NULL) { + goto fail; + } + + bucket->parent = htable; + bucket->key = ares_strdup(key); + if (bucket->key == NULL) { + goto fail; + } + + if (val != NULL) { + bucket->val = ares_strdup(val); + if (bucket->val == NULL) { + goto fail; + } + } + + if (!ares_htable_insert(htable->hash, bucket)) { + goto fail; + } + + return ARES_TRUE; + +fail: + if (bucket) { + ares_free(bucket->val); + ares_free(bucket); + } + return ARES_FALSE; +} + +ares_bool_t ares_htable_dict_get(const ares_htable_dict_t *htable, + const char *key, const char **val) +{ + const ares_htable_dict_bucket_t *bucket = NULL; + + if (val) { + *val = NULL; + } + + if (htable == NULL) { + return ARES_FALSE; + } + + bucket = ares_htable_get(htable->hash, key); + if (bucket == NULL) { + return ARES_FALSE; + } + + if (val) { + *val = bucket->val; + } + return ARES_TRUE; +} + +const char *ares_htable_dict_get_direct(const ares_htable_dict_t *htable, + const char *key) +{ + const char *val = NULL; + ares_htable_dict_get(htable, key, &val); + return val; +} + +ares_bool_t ares_htable_dict_remove(ares_htable_dict_t *htable, const char *key) +{ + if (htable == NULL) { + return ARES_FALSE; + } + + return ares_htable_remove(htable->hash, key); +} + +size_t ares_htable_dict_num_keys(const ares_htable_dict_t *htable) +{ + if (htable == NULL) { + return 0; + } + return ares_htable_num_keys(htable->hash); +} + +char **ares_htable_dict_keys(const ares_htable_dict_t *htable, size_t *num) +{ + const void **buckets = NULL; + size_t cnt = 0; + char **out = NULL; + size_t i; + + if (htable == NULL || num == NULL) { + return NULL; /* LCOV_EXCL_LINE: DefensiveCoding */ + } + + *num = 0; + + buckets = ares_htable_all_buckets(htable->hash, &cnt); + if (buckets == NULL || cnt == 0) { + return NULL; + } + + out = ares_malloc_zero(sizeof(*out) * cnt); + if (out == NULL) { + goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ + } + + for (i = 0; i < cnt; i++) { + out[i] = ares_strdup(((const ares_htable_dict_bucket_t *)buckets[i])->key); + if (out[i] == NULL) { + goto fail; + } + } + + ares_free(buckets); + *num = cnt; + return out; + +fail: + *num = 0; + ares_free_array(out, cnt, ares_free); + return NULL; +} diff --git a/deps/cares/src/lib/dsa/ares__htable_strvp.c b/deps/cares/src/lib/dsa/ares_htable_strvp.c similarity index 54% rename from deps/cares/src/lib/dsa/ares__htable_strvp.c rename to deps/cares/src/lib/dsa/ares_htable_strvp.c index d73a1928a75f95..daca117e80f3bb 100644 --- a/deps/cares/src/lib/dsa/ares__htable_strvp.c +++ b/deps/cares/src/lib/dsa/ares_htable_strvp.c @@ -24,46 +24,46 @@ * SPDX-License-Identifier: MIT */ #include "ares_private.h" -#include "ares__htable.h" -#include "ares__htable_strvp.h" +#include "ares_htable.h" +#include "ares_htable_strvp.h" -struct ares__htable_strvp { - ares__htable_strvp_val_free_t free_val; - ares__htable_t *hash; +struct ares_htable_strvp { + ares_htable_strvp_val_free_t free_val; + ares_htable_t *hash; }; typedef struct { - char *key; - void *val; - ares__htable_strvp_t *parent; -} ares__htable_strvp_bucket_t; + char *key; + void *val; + ares_htable_strvp_t *parent; +} ares_htable_strvp_bucket_t; -void ares__htable_strvp_destroy(ares__htable_strvp_t *htable) +void ares_htable_strvp_destroy(ares_htable_strvp_t *htable) { if (htable == NULL) { return; } - ares__htable_destroy(htable->hash); + ares_htable_destroy(htable->hash); ares_free(htable); } static unsigned int hash_func(const void *key, unsigned int seed) { const char *arg = key; - return ares__htable_hash_FNV1a_casecmp((const unsigned char *)arg, - ares_strlen(arg), seed); + return ares_htable_hash_FNV1a_casecmp((const unsigned char *)arg, + ares_strlen(arg), seed); } static const void *bucket_key(const void *bucket) { - const ares__htable_strvp_bucket_t *arg = bucket; + const ares_htable_strvp_bucket_t *arg = bucket; return arg->key; } static void bucket_free(void *bucket) { - ares__htable_strvp_bucket_t *arg = bucket; + ares_htable_strvp_bucket_t *arg = bucket; if (arg->parent->free_val) { arg->parent->free_val(arg->val); @@ -74,26 +74,18 @@ static void bucket_free(void *bucket) static ares_bool_t key_eq(const void *key1, const void *key2) { - const char *k1 = key1; - const char *k2 = key2; - - if (strcasecmp(k1, k2) == 0) { - return ARES_TRUE; - } - - return ARES_FALSE; + return ares_strcaseeq(key1, key2); } -ares__htable_strvp_t * - ares__htable_strvp_create(ares__htable_strvp_val_free_t val_free) +ares_htable_strvp_t * + ares_htable_strvp_create(ares_htable_strvp_val_free_t val_free) { - ares__htable_strvp_t *htable = ares_malloc(sizeof(*htable)); + ares_htable_strvp_t *htable = ares_malloc(sizeof(*htable)); if (htable == NULL) { goto fail; } - htable->hash = - ares__htable_create(hash_func, bucket_key, bucket_free, key_eq); + htable->hash = ares_htable_create(hash_func, bucket_key, bucket_free, key_eq); if (htable->hash == NULL) { goto fail; } @@ -104,16 +96,16 @@ ares__htable_strvp_t * fail: if (htable) { - ares__htable_destroy(htable->hash); + ares_htable_destroy(htable->hash); ares_free(htable); } return NULL; } -ares_bool_t ares__htable_strvp_insert(ares__htable_strvp_t *htable, - const char *key, void *val) +ares_bool_t ares_htable_strvp_insert(ares_htable_strvp_t *htable, + const char *key, void *val) { - ares__htable_strvp_bucket_t *bucket = NULL; + ares_htable_strvp_bucket_t *bucket = NULL; if (htable == NULL || key == NULL) { goto fail; @@ -131,7 +123,7 @@ ares_bool_t ares__htable_strvp_insert(ares__htable_strvp_t *htable, } bucket->val = val; - if (!ares__htable_insert(htable->hash, bucket)) { + if (!ares_htable_insert(htable->hash, bucket)) { goto fail; } @@ -145,10 +137,10 @@ ares_bool_t ares__htable_strvp_insert(ares__htable_strvp_t *htable, return ARES_FALSE; } -ares_bool_t ares__htable_strvp_get(const ares__htable_strvp_t *htable, - const char *key, void **val) +ares_bool_t ares_htable_strvp_get(const ares_htable_strvp_t *htable, + const char *key, void **val) { - ares__htable_strvp_bucket_t *bucket = NULL; + ares_htable_strvp_bucket_t *bucket = NULL; if (val) { *val = NULL; @@ -158,7 +150,7 @@ ares_bool_t ares__htable_strvp_get(const ares__htable_strvp_t *htable, return ARES_FALSE; } - bucket = ares__htable_get(htable->hash, key); + bucket = ares_htable_get(htable->hash, key); if (bucket == NULL) { return ARES_FALSE; } @@ -169,28 +161,50 @@ ares_bool_t ares__htable_strvp_get(const ares__htable_strvp_t *htable, return ARES_TRUE; } -void *ares__htable_strvp_get_direct(const ares__htable_strvp_t *htable, - const char *key) +void *ares_htable_strvp_get_direct(const ares_htable_strvp_t *htable, + const char *key) { void *val = NULL; - ares__htable_strvp_get(htable, key, &val); + ares_htable_strvp_get(htable, key, &val); return val; } -ares_bool_t ares__htable_strvp_remove(ares__htable_strvp_t *htable, - const char *key) +ares_bool_t ares_htable_strvp_remove(ares_htable_strvp_t *htable, + const char *key) { if (htable == NULL) { return ARES_FALSE; } - return ares__htable_remove(htable->hash, key); + return ares_htable_remove(htable->hash, key); +} + +void *ares_htable_strvp_claim(ares_htable_strvp_t *htable, const char *key) +{ + ares_htable_strvp_bucket_t *bucket = NULL; + void *val; + + if (htable == NULL || key == NULL) { + return NULL; + } + + bucket = ares_htable_get(htable->hash, key); + if (bucket == NULL) { + return NULL; + } + + /* Unassociate value from bucket */ + val = bucket->val; + bucket->val = NULL; + + ares_htable_strvp_remove(htable, key); + return val; } -size_t ares__htable_strvp_num_keys(const ares__htable_strvp_t *htable) +size_t ares_htable_strvp_num_keys(const ares_htable_strvp_t *htable) { if (htable == NULL) { return 0; } - return ares__htable_num_keys(htable->hash); + return ares_htable_num_keys(htable->hash); } diff --git a/deps/cares/src/lib/dsa/ares__htable_szvp.c b/deps/cares/src/lib/dsa/ares_htable_szvp.c similarity index 61% rename from deps/cares/src/lib/dsa/ares__htable_szvp.c rename to deps/cares/src/lib/dsa/ares_htable_szvp.c index b3e88d8b9a434a..fdaae0a571c80c 100644 --- a/deps/cares/src/lib/dsa/ares__htable_szvp.c +++ b/deps/cares/src/lib/dsa/ares_htable_szvp.c @@ -24,46 +24,45 @@ * SPDX-License-Identifier: MIT */ #include "ares_private.h" -#include "ares__htable.h" -#include "ares__htable_szvp.h" +#include "ares_htable.h" +#include "ares_htable_szvp.h" -struct ares__htable_szvp { - ares__htable_szvp_val_free_t free_val; - ares__htable_t *hash; +struct ares_htable_szvp { + ares_htable_szvp_val_free_t free_val; + ares_htable_t *hash; }; typedef struct { - size_t key; - void *val; - ares__htable_szvp_t *parent; -} ares__htable_szvp_bucket_t; + size_t key; + void *val; + ares_htable_szvp_t *parent; +} ares_htable_szvp_bucket_t; -void ares__htable_szvp_destroy(ares__htable_szvp_t *htable) +void ares_htable_szvp_destroy(ares_htable_szvp_t *htable) { if (htable == NULL) { return; } - ares__htable_destroy(htable->hash); + ares_htable_destroy(htable->hash); ares_free(htable); } static unsigned int hash_func(const void *key, unsigned int seed) { const size_t *arg = key; - return ares__htable_hash_FNV1a((const unsigned char *)arg, sizeof(*arg), - seed); + return ares_htable_hash_FNV1a((const unsigned char *)arg, sizeof(*arg), seed); } static const void *bucket_key(const void *bucket) { - const ares__htable_szvp_bucket_t *arg = bucket; + const ares_htable_szvp_bucket_t *arg = bucket; return &arg->key; } static void bucket_free(void *bucket) { - ares__htable_szvp_bucket_t *arg = bucket; + ares_htable_szvp_bucket_t *arg = bucket; if (arg->parent->free_val) { arg->parent->free_val(arg->val); @@ -84,16 +83,15 @@ static ares_bool_t key_eq(const void *key1, const void *key2) return ARES_FALSE; } -ares__htable_szvp_t * - ares__htable_szvp_create(ares__htable_szvp_val_free_t val_free) +ares_htable_szvp_t * + ares_htable_szvp_create(ares_htable_szvp_val_free_t val_free) { - ares__htable_szvp_t *htable = ares_malloc(sizeof(*htable)); + ares_htable_szvp_t *htable = ares_malloc(sizeof(*htable)); if (htable == NULL) { goto fail; } - htable->hash = - ares__htable_create(hash_func, bucket_key, bucket_free, key_eq); + htable->hash = ares_htable_create(hash_func, bucket_key, bucket_free, key_eq); if (htable->hash == NULL) { goto fail; } @@ -104,16 +102,16 @@ ares__htable_szvp_t * fail: if (htable) { - ares__htable_destroy(htable->hash); + ares_htable_destroy(htable->hash); ares_free(htable); } return NULL; } -ares_bool_t ares__htable_szvp_insert(ares__htable_szvp_t *htable, size_t key, - void *val) +ares_bool_t ares_htable_szvp_insert(ares_htable_szvp_t *htable, size_t key, + void *val) { - ares__htable_szvp_bucket_t *bucket = NULL; + ares_htable_szvp_bucket_t *bucket = NULL; if (htable == NULL) { goto fail; @@ -128,7 +126,7 @@ ares_bool_t ares__htable_szvp_insert(ares__htable_szvp_t *htable, size_t key, bucket->key = key; bucket->val = val; - if (!ares__htable_insert(htable->hash, bucket)) { + if (!ares_htable_insert(htable->hash, bucket)) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -141,10 +139,10 @@ ares_bool_t ares__htable_szvp_insert(ares__htable_szvp_t *htable, size_t key, return ARES_FALSE; } -ares_bool_t ares__htable_szvp_get(const ares__htable_szvp_t *htable, size_t key, - void **val) +ares_bool_t ares_htable_szvp_get(const ares_htable_szvp_t *htable, size_t key, + void **val) { - ares__htable_szvp_bucket_t *bucket = NULL; + ares_htable_szvp_bucket_t *bucket = NULL; if (val) { *val = NULL; @@ -154,7 +152,7 @@ ares_bool_t ares__htable_szvp_get(const ares__htable_szvp_t *htable, size_t key, return ARES_FALSE; } - bucket = ares__htable_get(htable->hash, &key); + bucket = ares_htable_get(htable->hash, &key); if (bucket == NULL) { return ARES_FALSE; } @@ -165,27 +163,26 @@ ares_bool_t ares__htable_szvp_get(const ares__htable_szvp_t *htable, size_t key, return ARES_TRUE; } -void *ares__htable_szvp_get_direct(const ares__htable_szvp_t *htable, - size_t key) +void *ares_htable_szvp_get_direct(const ares_htable_szvp_t *htable, size_t key) { void *val = NULL; - ares__htable_szvp_get(htable, key, &val); + ares_htable_szvp_get(htable, key, &val); return val; } -ares_bool_t ares__htable_szvp_remove(ares__htable_szvp_t *htable, size_t key) +ares_bool_t ares_htable_szvp_remove(ares_htable_szvp_t *htable, size_t key) { if (htable == NULL) { return ARES_FALSE; } - return ares__htable_remove(htable->hash, &key); + return ares_htable_remove(htable->hash, &key); } -size_t ares__htable_szvp_num_keys(const ares__htable_szvp_t *htable) +size_t ares_htable_szvp_num_keys(const ares_htable_szvp_t *htable) { if (htable == NULL) { return 0; } - return ares__htable_num_keys(htable->hash); + return ares_htable_num_keys(htable->hash); } diff --git a/deps/cares/src/lib/dsa/ares_htable_vpstr.c b/deps/cares/src/lib/dsa/ares_htable_vpstr.c new file mode 100644 index 00000000000000..86c881f768613b --- /dev/null +++ b/deps/cares/src/lib/dsa/ares_htable_vpstr.c @@ -0,0 +1,186 @@ +/* MIT License + * + * Copyright (c) 2024 Brad House + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * SPDX-License-Identifier: MIT + */ +#include "ares_private.h" +#include "ares_htable.h" +#include "ares_htable_vpstr.h" + +struct ares_htable_vpstr { + ares_htable_t *hash; +}; + +typedef struct { + void *key; + char *val; + ares_htable_vpstr_t *parent; +} ares_htable_vpstr_bucket_t; + +void ares_htable_vpstr_destroy(ares_htable_vpstr_t *htable) +{ + if (htable == NULL) { + return; /* LCOV_EXCL_LINE: DefensiveCoding */ + } + + ares_htable_destroy(htable->hash); + ares_free(htable); +} + +static unsigned int hash_func(const void *key, unsigned int seed) +{ + return ares_htable_hash_FNV1a((const unsigned char *)&key, sizeof(key), seed); +} + +static const void *bucket_key(const void *bucket) +{ + const ares_htable_vpstr_bucket_t *arg = bucket; + return arg->key; +} + +static void bucket_free(void *bucket) +{ + ares_htable_vpstr_bucket_t *arg = bucket; + + ares_free(arg->val); + + ares_free(arg); +} + +static ares_bool_t key_eq(const void *key1, const void *key2) +{ + if (key1 == key2) { + return ARES_TRUE; + } + + return ARES_FALSE; +} + +ares_htable_vpstr_t *ares_htable_vpstr_create(void) +{ + ares_htable_vpstr_t *htable = ares_malloc(sizeof(*htable)); + if (htable == NULL) { + goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ + } + + htable->hash = ares_htable_create(hash_func, bucket_key, bucket_free, key_eq); + if (htable->hash == NULL) { + goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ + } + + return htable; + +/* LCOV_EXCL_START: OutOfMemory */ +fail: + if (htable) { + ares_htable_destroy(htable->hash); + ares_free(htable); + } + return NULL; + /* LCOV_EXCL_STOP */ +} + +ares_bool_t ares_htable_vpstr_insert(ares_htable_vpstr_t *htable, void *key, + const char *val) +{ + ares_htable_vpstr_bucket_t *bucket = NULL; + + if (htable == NULL) { + goto fail; + } + + bucket = ares_malloc(sizeof(*bucket)); + if (bucket == NULL) { + goto fail; + } + + bucket->parent = htable; + bucket->key = key; + bucket->val = ares_strdup(val); + if (bucket->val == NULL) { + goto fail; + } + + if (!ares_htable_insert(htable->hash, bucket)) { + goto fail; + } + + return ARES_TRUE; + +fail: + if (bucket) { + ares_free(bucket->val); + ares_free(bucket); + } + return ARES_FALSE; +} + +ares_bool_t ares_htable_vpstr_get(const ares_htable_vpstr_t *htable, + const void *key, const char **val) +{ + const ares_htable_vpstr_bucket_t *bucket = NULL; + + if (val) { + *val = NULL; + } + + if (htable == NULL) { + return ARES_FALSE; + } + + bucket = ares_htable_get(htable->hash, key); + if (bucket == NULL) { + return ARES_FALSE; + } + + if (val) { + *val = bucket->val; + } + return ARES_TRUE; +} + +const char *ares_htable_vpstr_get_direct(const ares_htable_vpstr_t *htable, + const void *key) +{ + const char *val = NULL; + ares_htable_vpstr_get(htable, key, &val); + return val; +} + +ares_bool_t ares_htable_vpstr_remove(ares_htable_vpstr_t *htable, + const void *key) +{ + if (htable == NULL) { + return ARES_FALSE; + } + + return ares_htable_remove(htable->hash, key); +} + +size_t ares_htable_vpstr_num_keys(const ares_htable_vpstr_t *htable) +{ + if (htable == NULL) { + return 0; + } + return ares_htable_num_keys(htable->hash); +} diff --git a/deps/cares/src/lib/dsa/ares__htable_vpvp.c b/deps/cares/src/lib/dsa/ares_htable_vpvp.c similarity index 60% rename from deps/cares/src/lib/dsa/ares__htable_vpvp.c rename to deps/cares/src/lib/dsa/ares_htable_vpvp.c index 9042c48dd7fba2..14fd6e9da097ed 100644 --- a/deps/cares/src/lib/dsa/ares__htable_vpvp.c +++ b/deps/cares/src/lib/dsa/ares_htable_vpvp.c @@ -24,46 +24,45 @@ * SPDX-License-Identifier: MIT */ #include "ares_private.h" -#include "ares__htable.h" -#include "ares__htable_vpvp.h" +#include "ares_htable.h" +#include "ares_htable_vpvp.h" -struct ares__htable_vpvp { - ares__htable_vpvp_key_free_t free_key; - ares__htable_vpvp_val_free_t free_val; - ares__htable_t *hash; +struct ares_htable_vpvp { + ares_htable_vpvp_key_free_t free_key; + ares_htable_vpvp_val_free_t free_val; + ares_htable_t *hash; }; typedef struct { - void *key; - void *val; - ares__htable_vpvp_t *parent; -} ares__htable_vpvp_bucket_t; + void *key; + void *val; + ares_htable_vpvp_t *parent; +} ares_htable_vpvp_bucket_t; -void ares__htable_vpvp_destroy(ares__htable_vpvp_t *htable) +void ares_htable_vpvp_destroy(ares_htable_vpvp_t *htable) { if (htable == NULL) { return; /* LCOV_EXCL_LINE: DefensiveCoding */ } - ares__htable_destroy(htable->hash); + ares_htable_destroy(htable->hash); ares_free(htable); } static unsigned int hash_func(const void *key, unsigned int seed) { - return ares__htable_hash_FNV1a((const unsigned char *)&key, sizeof(key), - seed); + return ares_htable_hash_FNV1a((const unsigned char *)&key, sizeof(key), seed); } static const void *bucket_key(const void *bucket) { - const ares__htable_vpvp_bucket_t *arg = bucket; + const ares_htable_vpvp_bucket_t *arg = bucket; return arg->key; } static void bucket_free(void *bucket) { - ares__htable_vpvp_bucket_t *arg = bucket; + ares_htable_vpvp_bucket_t *arg = bucket; if (arg->parent->free_key) { arg->parent->free_key(arg->key); @@ -85,17 +84,16 @@ static ares_bool_t key_eq(const void *key1, const void *key2) return ARES_FALSE; } -ares__htable_vpvp_t * - ares__htable_vpvp_create(ares__htable_vpvp_key_free_t key_free, - ares__htable_vpvp_val_free_t val_free) +ares_htable_vpvp_t * + ares_htable_vpvp_create(ares_htable_vpvp_key_free_t key_free, + ares_htable_vpvp_val_free_t val_free) { - ares__htable_vpvp_t *htable = ares_malloc(sizeof(*htable)); + ares_htable_vpvp_t *htable = ares_malloc(sizeof(*htable)); if (htable == NULL) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } - htable->hash = - ares__htable_create(hash_func, bucket_key, bucket_free, key_eq); + htable->hash = ares_htable_create(hash_func, bucket_key, bucket_free, key_eq); if (htable->hash == NULL) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -108,17 +106,17 @@ ares__htable_vpvp_t * /* LCOV_EXCL_START: OutOfMemory */ fail: if (htable) { - ares__htable_destroy(htable->hash); + ares_htable_destroy(htable->hash); ares_free(htable); } return NULL; /* LCOV_EXCL_STOP */ } -ares_bool_t ares__htable_vpvp_insert(ares__htable_vpvp_t *htable, void *key, - void *val) +ares_bool_t ares_htable_vpvp_insert(ares_htable_vpvp_t *htable, void *key, + void *val) { - ares__htable_vpvp_bucket_t *bucket = NULL; + ares_htable_vpvp_bucket_t *bucket = NULL; if (htable == NULL) { goto fail; @@ -133,7 +131,7 @@ ares_bool_t ares__htable_vpvp_insert(ares__htable_vpvp_t *htable, void *key, bucket->key = key; bucket->val = val; - if (!ares__htable_insert(htable->hash, bucket)) { + if (!ares_htable_insert(htable->hash, bucket)) { goto fail; } @@ -146,10 +144,10 @@ ares_bool_t ares__htable_vpvp_insert(ares__htable_vpvp_t *htable, void *key, return ARES_FALSE; } -ares_bool_t ares__htable_vpvp_get(const ares__htable_vpvp_t *htable, - const void *key, void **val) +ares_bool_t ares_htable_vpvp_get(const ares_htable_vpvp_t *htable, + const void *key, void **val) { - ares__htable_vpvp_bucket_t *bucket = NULL; + ares_htable_vpvp_bucket_t *bucket = NULL; if (val) { *val = NULL; @@ -159,7 +157,7 @@ ares_bool_t ares__htable_vpvp_get(const ares__htable_vpvp_t *htable, return ARES_FALSE; } - bucket = ares__htable_get(htable->hash, key); + bucket = ares_htable_get(htable->hash, key); if (bucket == NULL) { return ARES_FALSE; } @@ -170,28 +168,27 @@ ares_bool_t ares__htable_vpvp_get(const ares__htable_vpvp_t *htable, return ARES_TRUE; } -void *ares__htable_vpvp_get_direct(const ares__htable_vpvp_t *htable, - const void *key) +void *ares_htable_vpvp_get_direct(const ares_htable_vpvp_t *htable, + const void *key) { void *val = NULL; - ares__htable_vpvp_get(htable, key, &val); + ares_htable_vpvp_get(htable, key, &val); return val; } -ares_bool_t ares__htable_vpvp_remove(ares__htable_vpvp_t *htable, - const void *key) +ares_bool_t ares_htable_vpvp_remove(ares_htable_vpvp_t *htable, const void *key) { if (htable == NULL) { return ARES_FALSE; } - return ares__htable_remove(htable->hash, key); + return ares_htable_remove(htable->hash, key); } -size_t ares__htable_vpvp_num_keys(const ares__htable_vpvp_t *htable) +size_t ares_htable_vpvp_num_keys(const ares_htable_vpvp_t *htable) { if (htable == NULL) { return 0; } - return ares__htable_num_keys(htable->hash); + return ares_htable_num_keys(htable->hash); } diff --git a/deps/cares/src/lib/dsa/ares__llist.c b/deps/cares/src/lib/dsa/ares_llist.c similarity index 52% rename from deps/cares/src/lib/dsa/ares__llist.c rename to deps/cares/src/lib/dsa/ares_llist.c index 96936c1abe7c07..6bd7de269a43fb 100644 --- a/deps/cares/src/lib/dsa/ares__llist.c +++ b/deps/cares/src/lib/dsa/ares_llist.c @@ -24,25 +24,25 @@ * SPDX-License-Identifier: MIT */ #include "ares_private.h" -#include "ares__llist.h" +#include "ares_llist.h" -struct ares__llist { - ares__llist_node_t *head; - ares__llist_node_t *tail; - ares__llist_destructor_t destruct; - size_t cnt; +struct ares_llist { + ares_llist_node_t *head; + ares_llist_node_t *tail; + ares_llist_destructor_t destruct; + size_t cnt; }; -struct ares__llist_node { - void *data; - ares__llist_node_t *prev; - ares__llist_node_t *next; - ares__llist_t *parent; +struct ares_llist_node { + void *data; + ares_llist_node_t *prev; + ares_llist_node_t *next; + ares_llist_t *parent; }; -ares__llist_t *ares__llist_create(ares__llist_destructor_t destruct) +ares_llist_t *ares_llist_create(ares_llist_destructor_t destruct) { - ares__llist_t *list = ares_malloc_zero(sizeof(*list)); + ares_llist_t *list = ares_malloc_zero(sizeof(*list)); if (list == NULL) { return NULL; @@ -53,8 +53,8 @@ ares__llist_t *ares__llist_create(ares__llist_destructor_t destruct) return list; } -void ares__llist_replace_destructor(ares__llist_t *list, - ares__llist_destructor_t destruct) +void ares_llist_replace_destructor(ares_llist_t *list, + ares_llist_destructor_t destruct) { if (list == NULL) { return; @@ -67,12 +67,11 @@ typedef enum { ARES__LLIST_INSERT_HEAD, ARES__LLIST_INSERT_TAIL, ARES__LLIST_INSERT_BEFORE -} ares__llist_insert_type_t; +} ares_llist_insert_type_t; -static void ares__llist_attach_at(ares__llist_t *list, - ares__llist_insert_type_t type, - ares__llist_node_t *at, - ares__llist_node_t *node) +static void ares_llist_attach_at(ares_llist_t *list, + ares_llist_insert_type_t type, + ares_llist_node_t *at, ares_llist_node_t *node) { if (list == NULL || node == NULL) { return; /* LCOV_EXCL_LINE: DefensiveCoding */ @@ -117,12 +116,11 @@ static void ares__llist_attach_at(ares__llist_t *list, list->cnt++; } -static ares__llist_node_t *ares__llist_insert_at(ares__llist_t *list, - ares__llist_insert_type_t type, - ares__llist_node_t *at, - void *val) +static ares_llist_node_t *ares_llist_insert_at(ares_llist_t *list, + ares_llist_insert_type_t type, + ares_llist_node_t *at, void *val) { - ares__llist_node_t *node = NULL; + ares_llist_node_t *node = NULL; if (list == NULL || val == NULL) { return NULL; /* LCOV_EXCL_LINE: DefensiveCoding */ @@ -135,48 +133,46 @@ static ares__llist_node_t *ares__llist_insert_at(ares__llist_t *list, } node->data = val; - ares__llist_attach_at(list, type, at, node); + ares_llist_attach_at(list, type, at, node); return node; } -ares__llist_node_t *ares__llist_insert_first(ares__llist_t *list, void *val) +ares_llist_node_t *ares_llist_insert_first(ares_llist_t *list, void *val) { - return ares__llist_insert_at(list, ARES__LLIST_INSERT_HEAD, NULL, val); + return ares_llist_insert_at(list, ARES__LLIST_INSERT_HEAD, NULL, val); } -ares__llist_node_t *ares__llist_insert_last(ares__llist_t *list, void *val) +ares_llist_node_t *ares_llist_insert_last(ares_llist_t *list, void *val) { - return ares__llist_insert_at(list, ARES__LLIST_INSERT_TAIL, NULL, val); + return ares_llist_insert_at(list, ARES__LLIST_INSERT_TAIL, NULL, val); } -ares__llist_node_t *ares__llist_insert_before(ares__llist_node_t *node, - void *val) +ares_llist_node_t *ares_llist_insert_before(ares_llist_node_t *node, void *val) { if (node == NULL) { return NULL; } - return ares__llist_insert_at(node->parent, ARES__LLIST_INSERT_BEFORE, node, - val); + return ares_llist_insert_at(node->parent, ARES__LLIST_INSERT_BEFORE, node, + val); } -ares__llist_node_t *ares__llist_insert_after(ares__llist_node_t *node, - void *val) +ares_llist_node_t *ares_llist_insert_after(ares_llist_node_t *node, void *val) { if (node == NULL) { return NULL; } if (node->next == NULL) { - return ares__llist_insert_last(node->parent, val); + return ares_llist_insert_last(node->parent, val); } - return ares__llist_insert_at(node->parent, ARES__LLIST_INSERT_BEFORE, - node->next, val); + return ares_llist_insert_at(node->parent, ARES__LLIST_INSERT_BEFORE, + node->next, val); } -ares__llist_node_t *ares__llist_node_first(ares__llist_t *list) +ares_llist_node_t *ares_llist_node_first(ares_llist_t *list) { if (list == NULL) { return NULL; @@ -184,10 +180,10 @@ ares__llist_node_t *ares__llist_node_first(ares__llist_t *list) return list->head; } -ares__llist_node_t *ares__llist_node_idx(ares__llist_t *list, size_t idx) +ares_llist_node_t *ares_llist_node_idx(ares_llist_t *list, size_t idx) { - ares__llist_node_t *node; - size_t cnt; + ares_llist_node_t *node; + size_t cnt; if (list == NULL) { return NULL; @@ -204,7 +200,7 @@ ares__llist_node_t *ares__llist_node_idx(ares__llist_t *list, size_t idx) return node; } -ares__llist_node_t *ares__llist_node_last(ares__llist_t *list) +ares_llist_node_t *ares_llist_node_last(ares_llist_t *list) { if (list == NULL) { return NULL; @@ -212,7 +208,7 @@ ares__llist_node_t *ares__llist_node_last(ares__llist_t *list) return list->tail; } -ares__llist_node_t *ares__llist_node_next(ares__llist_node_t *node) +ares_llist_node_t *ares_llist_node_next(ares_llist_node_t *node) { if (node == NULL) { return NULL; @@ -220,7 +216,7 @@ ares__llist_node_t *ares__llist_node_next(ares__llist_node_t *node) return node->next; } -ares__llist_node_t *ares__llist_node_prev(ares__llist_node_t *node) +ares_llist_node_t *ares_llist_node_prev(ares_llist_node_t *node) { if (node == NULL) { return NULL; @@ -228,7 +224,7 @@ ares__llist_node_t *ares__llist_node_prev(ares__llist_node_t *node) return node->prev; } -void *ares__llist_node_val(ares__llist_node_t *node) +void *ares_llist_node_val(ares_llist_node_t *node) { if (node == NULL) { return NULL; @@ -237,7 +233,7 @@ void *ares__llist_node_val(ares__llist_node_t *node) return node->data; } -size_t ares__llist_len(const ares__llist_t *list) +size_t ares_llist_len(const ares_llist_t *list) { if (list == NULL) { return 0; @@ -245,7 +241,7 @@ size_t ares__llist_len(const ares__llist_t *list) return list->cnt; } -ares__llist_t *ares__llist_node_parent(ares__llist_node_t *node) +ares_llist_t *ares_llist_node_parent(ares_llist_node_t *node) { if (node == NULL) { return NULL; @@ -253,19 +249,19 @@ ares__llist_t *ares__llist_node_parent(ares__llist_node_t *node) return node->parent; } -void *ares__llist_first_val(ares__llist_t *list) +void *ares_llist_first_val(ares_llist_t *list) { - return ares__llist_node_val(ares__llist_node_first(list)); + return ares_llist_node_val(ares_llist_node_first(list)); } -void *ares__llist_last_val(ares__llist_t *list) +void *ares_llist_last_val(ares_llist_t *list) { - return ares__llist_node_val(ares__llist_node_last(list)); + return ares_llist_node_val(ares_llist_node_last(list)); } -static void ares__llist_node_detach(ares__llist_node_t *node) +static void ares_llist_node_detach(ares_llist_node_t *node) { - ares__llist_t *list; + ares_llist_t *list; if (node == NULL) { return; /* LCOV_EXCL_LINE: DefensiveCoding */ @@ -293,7 +289,7 @@ static void ares__llist_node_detach(ares__llist_node_t *node) list->cnt--; } -void *ares__llist_node_claim(ares__llist_node_t *node) +void *ares_llist_node_claim(ares_llist_node_t *node) { void *val; @@ -302,16 +298,16 @@ void *ares__llist_node_claim(ares__llist_node_t *node) } val = node->data; - ares__llist_node_detach(node); + ares_llist_node_detach(node); ares_free(node); return val; } -void ares__llist_node_destroy(ares__llist_node_t *node) +void ares_llist_node_destroy(ares_llist_node_t *node) { - ares__llist_destructor_t destruct; - void *val; + ares_llist_destructor_t destruct; + void *val; if (node == NULL) { return; @@ -319,15 +315,15 @@ void ares__llist_node_destroy(ares__llist_node_t *node) destruct = node->parent->destruct; - val = ares__llist_node_claim(node); + val = ares_llist_node_claim(node); if (val != NULL && destruct != NULL) { destruct(val); } } -void ares__llist_node_replace(ares__llist_node_t *node, void *val) +void ares_llist_node_replace(ares_llist_node_t *node, void *val) { - ares__llist_destructor_t destruct; + ares_llist_destructor_t destruct; if (node == NULL) { return; @@ -341,46 +337,46 @@ void ares__llist_node_replace(ares__llist_node_t *node, void *val) node->data = val; } -void ares__llist_clear(ares__llist_t *list) +void ares_llist_clear(ares_llist_t *list) { - ares__llist_node_t *node; + ares_llist_node_t *node; if (list == NULL) { return; } - while ((node = ares__llist_node_first(list)) != NULL) { - ares__llist_node_destroy(node); + while ((node = ares_llist_node_first(list)) != NULL) { + ares_llist_node_destroy(node); } } -void ares__llist_destroy(ares__llist_t *list) +void ares_llist_destroy(ares_llist_t *list) { if (list == NULL) { return; } - ares__llist_clear(list); + ares_llist_clear(list); ares_free(list); } -void ares__llist_node_move_parent_last(ares__llist_node_t *node, - ares__llist_t *new_parent) +void ares_llist_node_mvparent_last(ares_llist_node_t *node, + ares_llist_t *new_parent) { if (node == NULL || new_parent == NULL) { return; /* LCOV_EXCL_LINE: DefensiveCoding */ } - ares__llist_node_detach(node); - ares__llist_attach_at(new_parent, ARES__LLIST_INSERT_TAIL, NULL, node); + ares_llist_node_detach(node); + ares_llist_attach_at(new_parent, ARES__LLIST_INSERT_TAIL, NULL, node); } -void ares__llist_node_move_parent_first(ares__llist_node_t *node, - ares__llist_t *new_parent) +void ares_llist_node_mvparent_first(ares_llist_node_t *node, + ares_llist_t *new_parent) { if (node == NULL || new_parent == NULL) { return; /* LCOV_EXCL_LINE: DefensiveCoding */ } - ares__llist_node_detach(node); - ares__llist_attach_at(new_parent, ARES__LLIST_INSERT_HEAD, NULL, node); + ares_llist_node_detach(node); + ares_llist_attach_at(new_parent, ARES__LLIST_INSERT_HEAD, NULL, node); } diff --git a/deps/cares/src/lib/dsa/ares__slist.c b/deps/cares/src/lib/dsa/ares_slist.c similarity index 70% rename from deps/cares/src/lib/dsa/ares__slist.c rename to deps/cares/src/lib/dsa/ares_slist.c index f0e3f8b14a9885..7e68347994ce4c 100644 --- a/deps/cares/src/lib/dsa/ares__slist.c +++ b/deps/cares/src/lib/dsa/ares_slist.c @@ -24,39 +24,39 @@ * SPDX-License-Identifier: MIT */ #include "ares_private.h" -#include "ares__slist.h" +#include "ares_slist.h" /* SkipList implementation */ #define ARES__SLIST_START_LEVELS 4 -struct ares__slist { - ares_rand_state *rand_state; - unsigned char rand_data[8]; - size_t rand_bits; +struct ares_slist { + ares_rand_state *rand_state; + unsigned char rand_data[8]; + size_t rand_bits; - ares__slist_node_t **head; - size_t levels; - ares__slist_node_t *tail; + ares_slist_node_t **head; + size_t levels; + ares_slist_node_t *tail; - ares__slist_cmp_t cmp; - ares__slist_destructor_t destruct; - size_t cnt; + ares_slist_cmp_t cmp; + ares_slist_destructor_t destruct; + size_t cnt; }; -struct ares__slist_node { - void *data; - ares__slist_node_t **prev; - ares__slist_node_t **next; - size_t levels; - ares__slist_t *parent; +struct ares_slist_node { + void *data; + ares_slist_node_t **prev; + ares_slist_node_t **next; + size_t levels; + ares_slist_t *parent; }; -ares__slist_t *ares__slist_create(ares_rand_state *rand_state, - ares__slist_cmp_t cmp, - ares__slist_destructor_t destruct) +ares_slist_t *ares_slist_create(ares_rand_state *rand_state, + ares_slist_cmp_t cmp, + ares_slist_destructor_t destruct) { - ares__slist_t *list; + ares_slist_t *list; if (rand_state == NULL || cmp == NULL) { return NULL; @@ -82,18 +82,17 @@ ares__slist_t *ares__slist_create(ares_rand_state *rand_state, return list; } -static ares_bool_t ares__slist_coin_flip(ares__slist_t *list) +static ares_bool_t ares_slist_coin_flip(ares_slist_t *list) { size_t total_bits = sizeof(list->rand_data) * 8; size_t bit; /* Refill random data used for coin flips. We pull this in 8 byte chunks. - * ares__rand_bytes() has some built-in caching of its own so we don't need + * ares_rand_bytes() has some built-in caching of its own so we don't need * to be excessive in caching ourselves. Prefer to require less memory per * skiplist */ if (list->rand_bits == 0) { - ares__rand_bytes(list->rand_state, list->rand_data, - sizeof(list->rand_data)); + ares_rand_bytes(list->rand_state, list->rand_data, sizeof(list->rand_data)); list->rand_bits = total_bits; } @@ -103,8 +102,8 @@ static ares_bool_t ares__slist_coin_flip(ares__slist_t *list) return (list->rand_data[bit / 8] & (1 << (bit % 8))) ? ARES_TRUE : ARES_FALSE; } -void ares__slist_replace_destructor(ares__slist_t *list, - ares__slist_destructor_t destruct) +void ares_slist_replace_destructor(ares_slist_t *list, + ares_slist_destructor_t destruct) { if (list == NULL) { return; @@ -113,14 +112,14 @@ void ares__slist_replace_destructor(ares__slist_t *list, list->destruct = destruct; } -static size_t ares__slist_max_level(const ares__slist_t *list) +static size_t ares_slist_max_level(const ares_slist_t *list) { size_t max_level = 0; if (list->cnt + 1 <= (1 << ARES__SLIST_START_LEVELS)) { max_level = ARES__SLIST_START_LEVELS; } else { - max_level = ares__log2(ares__round_up_pow2(list->cnt + 1)); + max_level = ares_log2(ares_round_up_pow2(list->cnt + 1)); } if (list->levels > max_level) { @@ -130,21 +129,21 @@ static size_t ares__slist_max_level(const ares__slist_t *list) return max_level; } -static size_t ares__slist_calc_level(ares__slist_t *list) +static size_t ares_slist_calc_level(ares_slist_t *list) { - size_t max_level = ares__slist_max_level(list); + size_t max_level = ares_slist_max_level(list); size_t level; - for (level = 1; ares__slist_coin_flip(list) && level < max_level; level++) + for (level = 1; ares_slist_coin_flip(list) && level < max_level; level++) ; return level; } -static void ares__slist_node_push(ares__slist_t *list, ares__slist_node_t *node) +static void ares_slist_node_push(ares_slist_t *list, ares_slist_node_t *node) { - size_t i; - ares__slist_node_t *left = NULL; + size_t i; + ares_slist_node_t *left = NULL; /* Scan from highest level in the slist, even if we're not using that number * of levels for this entry as this is what makes it O(log n) */ @@ -193,9 +192,9 @@ static void ares__slist_node_push(ares__slist_t *list, ares__slist_node_t *node) } } -ares__slist_node_t *ares__slist_insert(ares__slist_t *list, void *val) +ares_slist_node_t *ares_slist_insert(ares_slist_t *list, void *val) { - ares__slist_node_t *node = NULL; + ares_slist_node_t *node = NULL; if (list == NULL || val == NULL) { return NULL; @@ -211,7 +210,7 @@ ares__slist_node_t *ares__slist_insert(ares__slist_t *list, void *val) node->parent = list; /* Randomly determine the number of levels we want to use */ - node->levels = ares__slist_calc_level(list); + node->levels = ares_slist_calc_level(list); /* Allocate array of next and prev nodes for linking each level */ node->next = ares_malloc_zero(sizeof(*node->next) * node->levels); @@ -238,7 +237,7 @@ ares__slist_node_t *ares__slist_insert(ares__slist_t *list, void *val) list->levels = node->levels; } - ares__slist_node_push(list, node); + ares_slist_node_push(list, node); list->cnt++; @@ -255,10 +254,10 @@ ares__slist_node_t *ares__slist_insert(ares__slist_t *list, void *val) /* LCOV_EXCL_STOP */ } -static void ares__slist_node_pop(ares__slist_node_t *node) +static void ares_slist_node_pop(ares_slist_node_t *node) { - ares__slist_t *list = node->parent; - size_t i; + ares_slist_t *list = node->parent; + size_t i; /* relink each node at each level */ for (i = node->levels; i-- > 0;) { @@ -281,10 +280,10 @@ static void ares__slist_node_pop(ares__slist_node_t *node) memset(node->prev, 0, sizeof(*node->prev) * node->levels); } -void *ares__slist_node_claim(ares__slist_node_t *node) +void *ares_slist_node_claim(ares_slist_node_t *node) { - ares__slist_t *list; - void *val; + ares_slist_t *list; + void *val; if (node == NULL) { return NULL; @@ -293,7 +292,7 @@ void *ares__slist_node_claim(ares__slist_node_t *node) list = node->parent; val = node->data; - ares__slist_node_pop(node); + ares_slist_node_pop(node); ares_free(node->next); ares_free(node->prev); @@ -304,9 +303,9 @@ void *ares__slist_node_claim(ares__slist_node_t *node) return val; } -void ares__slist_node_reinsert(ares__slist_node_t *node) +void ares_slist_node_reinsert(ares_slist_node_t *node) { - ares__slist_t *list; + ares_slist_t *list; if (node == NULL) { return; @@ -314,15 +313,16 @@ void ares__slist_node_reinsert(ares__slist_node_t *node) list = node->parent; - ares__slist_node_pop(node); - ares__slist_node_push(list, node); + ares_slist_node_pop(node); + ares_slist_node_push(list, node); } -ares__slist_node_t *ares__slist_node_find(ares__slist_t *list, const void *val) +ares_slist_node_t *ares_slist_node_find(const ares_slist_t *list, + const void *val) { - size_t i; - ares__slist_node_t *node = NULL; - int rv = -1; + size_t i; + ares_slist_node_t *node = NULL; + int rv = -1; if (list == NULL || val == NULL) { return NULL; @@ -377,7 +377,7 @@ ares__slist_node_t *ares__slist_node_find(ares__slist_t *list, const void *val) return node; } -ares__slist_node_t *ares__slist_node_first(ares__slist_t *list) +ares_slist_node_t *ares_slist_node_first(const ares_slist_t *list) { if (list == NULL) { return NULL; @@ -386,7 +386,7 @@ ares__slist_node_t *ares__slist_node_first(ares__slist_t *list) return list->head[0]; } -ares__slist_node_t *ares__slist_node_last(ares__slist_t *list) +ares_slist_node_t *ares_slist_node_last(const ares_slist_t *list) { if (list == NULL) { return NULL; @@ -394,7 +394,7 @@ ares__slist_node_t *ares__slist_node_last(ares__slist_t *list) return list->tail; } -ares__slist_node_t *ares__slist_node_next(ares__slist_node_t *node) +ares_slist_node_t *ares_slist_node_next(const ares_slist_node_t *node) { if (node == NULL) { return NULL; @@ -402,7 +402,7 @@ ares__slist_node_t *ares__slist_node_next(ares__slist_node_t *node) return node->next[0]; } -ares__slist_node_t *ares__slist_node_prev(ares__slist_node_t *node) +ares_slist_node_t *ares_slist_node_prev(const ares_slist_node_t *node) { if (node == NULL) { return NULL; @@ -410,7 +410,7 @@ ares__slist_node_t *ares__slist_node_prev(ares__slist_node_t *node) return node->prev[0]; } -void *ares__slist_node_val(ares__slist_node_t *node) +void *ares_slist_node_val(ares_slist_node_t *node) { if (node == NULL) { return NULL; @@ -419,7 +419,7 @@ void *ares__slist_node_val(ares__slist_node_t *node) return node->data; } -size_t ares__slist_len(const ares__slist_t *list) +size_t ares_slist_len(const ares_slist_t *list) { if (list == NULL) { return 0; @@ -427,7 +427,7 @@ size_t ares__slist_len(const ares__slist_t *list) return list->cnt; } -ares__slist_t *ares__slist_node_parent(ares__slist_node_t *node) +ares_slist_t *ares_slist_node_parent(ares_slist_node_t *node) { if (node == NULL) { return NULL; @@ -435,43 +435,43 @@ ares__slist_t *ares__slist_node_parent(ares__slist_node_t *node) return node->parent; } -void *ares__slist_first_val(ares__slist_t *list) +void *ares_slist_first_val(const ares_slist_t *list) { - return ares__slist_node_val(ares__slist_node_first(list)); + return ares_slist_node_val(ares_slist_node_first(list)); } -void *ares__slist_last_val(ares__slist_t *list) +void *ares_slist_last_val(const ares_slist_t *list) { - return ares__slist_node_val(ares__slist_node_last(list)); + return ares_slist_node_val(ares_slist_node_last(list)); } -void ares__slist_node_destroy(ares__slist_node_t *node) +void ares_slist_node_destroy(ares_slist_node_t *node) { - ares__slist_destructor_t destruct; - void *val; + ares_slist_destructor_t destruct; + void *val; if (node == NULL) { return; } destruct = node->parent->destruct; - val = ares__slist_node_claim(node); + val = ares_slist_node_claim(node); if (val != NULL && destruct != NULL) { destruct(val); } } -void ares__slist_destroy(ares__slist_t *list) +void ares_slist_destroy(ares_slist_t *list) { - ares__slist_node_t *node; + ares_slist_node_t *node; if (list == NULL) { return; } - while ((node = ares__slist_node_first(list)) != NULL) { - ares__slist_node_destroy(node); + while ((node = ares_slist_node_first(list)) != NULL) { + ares_slist_node_destroy(node); } ares_free(list->head); diff --git a/deps/cares/src/lib/dsa/ares__slist.h b/deps/cares/src/lib/dsa/ares_slist.h similarity index 75% rename from deps/cares/src/lib/dsa/ares__slist.h rename to deps/cares/src/lib/dsa/ares_slist.h index 26af88fa782499..a89c2652f2d4d4 100644 --- a/deps/cares/src/lib/dsa/ares__slist.h +++ b/deps/cares/src/lib/dsa/ares_slist.h @@ -27,7 +27,7 @@ #define __ARES__SLIST_H -/*! \addtogroup ares__slist SkipList Data Structure +/*! \addtogroup ares_slist SkipList Data Structure * * This data structure is known as a Skip List, which in essence is a sorted * linked list with multiple levels of linkage to gain some algorithmic @@ -49,21 +49,21 @@ * * @{ */ -struct ares__slist; +struct ares_slist; /*! SkipList Object, opaque */ -typedef struct ares__slist ares__slist_t; +typedef struct ares_slist ares_slist_t; -struct ares__slist_node; +struct ares_slist_node; /*! SkipList Node Object, opaque */ -typedef struct ares__slist_node ares__slist_node_t; +typedef struct ares_slist_node ares_slist_node_t; /*! SkipList Node Value destructor callback * * \param[in] data User-defined data to destroy */ -typedef void (*ares__slist_destructor_t)(void *data); +typedef void (*ares_slist_destructor_t)(void *data); /*! SkipList comparison function * @@ -71,7 +71,7 @@ typedef void (*ares__slist_destructor_t)(void *data); * \param[in] data2 Second user-defined data object * \return < 0 if data1 < data1, > 0 if data1 > data2, 0 if data1 == data2 */ -typedef int (*ares__slist_cmp_t)(const void *data1, const void *data2); +typedef int (*ares_slist_cmp_t)(const void *data1, const void *data2); /*! Create SkipList * @@ -80,17 +80,17 @@ typedef int (*ares__slist_cmp_t)(const void *data1, const void *data2); * \param[in] destruct SkipList Node Value Destructor. Optional, use NULL. * \return Initialized SkipList Object or NULL on misuse or ENOMEM */ -ares__slist_t *ares__slist_create(ares_rand_state *rand_state, - ares__slist_cmp_t cmp, - ares__slist_destructor_t destruct); +ares_slist_t *ares_slist_create(ares_rand_state *rand_state, + ares_slist_cmp_t cmp, + ares_slist_destructor_t destruct); /*! Replace SkipList Node Value Destructor * * \param[in] list Initialized SkipList Object * \param[in] destruct Replacement destructor. May be NULL. */ -void ares__slist_replace_destructor(ares__slist_t *list, - ares__slist_destructor_t destruct); +void ares_slist_replace_destructor(ares_slist_t *list, + ares_slist_destructor_t destruct); /*! Insert Value into SkipList * @@ -99,35 +99,35 @@ void ares__slist_replace_destructor(ares__slist_t *list * and will have destructor called. * \return SkipList Node Object or NULL on misuse or ENOMEM */ -ares__slist_node_t *ares__slist_insert(ares__slist_t *list, void *val); +ares_slist_node_t *ares_slist_insert(ares_slist_t *list, void *val); /*! Fetch first node in SkipList * * \param[in] list Initialized SkipList Object * \return SkipList Node Object or NULL if none */ -ares__slist_node_t *ares__slist_node_first(ares__slist_t *list); +ares_slist_node_t *ares_slist_node_first(const ares_slist_t *list); /*! Fetch last node in SkipList * * \param[in] list Initialized SkipList Object * \return SkipList Node Object or NULL if none */ -ares__slist_node_t *ares__slist_node_last(ares__slist_t *list); +ares_slist_node_t *ares_slist_node_last(const ares_slist_t *list); /*! Fetch next node in SkipList * * \param[in] node SkipList Node Object * \return SkipList Node Object or NULL if none */ -ares__slist_node_t *ares__slist_node_next(ares__slist_node_t *node); +ares_slist_node_t *ares_slist_node_next(const ares_slist_node_t *node); /*! Fetch previous node in SkipList * * \param[in] node SkipList Node Object * \return SkipList Node Object or NULL if none */ -ares__slist_node_t *ares__slist_node_prev(ares__slist_node_t *node); +ares_slist_node_t *ares_slist_node_prev(const ares_slist_node_t *node); /*! Fetch SkipList Node Object by Value * @@ -135,7 +135,8 @@ ares__slist_node_t *ares__slist_node_prev(ares__slist_node_t *node); * \param[in] val Object to use for comparison * \return SkipList Node Object or NULL if not found */ -ares__slist_node_t *ares__slist_node_find(ares__slist_t *list, const void *val); +ares_slist_node_t *ares_slist_node_find(const ares_slist_t *list, + const void *val); /*! Fetch Node Value @@ -143,42 +144,42 @@ ares__slist_node_t *ares__slist_node_find(ares__slist_t *list, const void *val); * \param[in] node SkipList Node Object * \return user defined node value */ -void *ares__slist_node_val(ares__slist_node_t *node); +void *ares_slist_node_val(ares_slist_node_t *node); /*! Fetch number of entries in SkipList Object * * \param[in] list Initialized SkipList Object * \return number of entries */ -size_t ares__slist_len(const ares__slist_t *list); +size_t ares_slist_len(const ares_slist_t *list); /*! Fetch SkipList Object from SkipList Node * * \param[in] node SkipList Node Object * \return SkipList Object */ -ares__slist_t *ares__slist_node_parent(ares__slist_node_t *node); +ares_slist_t *ares_slist_node_parent(ares_slist_node_t *node); /*! Fetch first Node Value in SkipList * * \param[in] list Initialized SkipList Object * \return user defined node value or NULL if none */ -void *ares__slist_first_val(ares__slist_t *list); +void *ares_slist_first_val(const ares_slist_t *list); /*! Fetch last Node Value in SkipList * * \param[in] list Initialized SkipList Object * \return user defined node value or NULL if none */ -void *ares__slist_last_val(ares__slist_t *list); +void *ares_slist_last_val(const ares_slist_t *list); /*! Take back ownership of Node Value in SkipList, remove from SkipList. * * \param[in] node SkipList Node Object * \return user defined node value */ -void *ares__slist_node_claim(ares__slist_node_t *node); +void *ares_slist_node_claim(ares_slist_node_t *node); /*! The internals of the node have changed, thus its position in the sorted * list is no longer valid. This function will remove it and re-add it to @@ -187,19 +188,19 @@ void *ares__slist_node_claim(ares__slist_node_t *node); * * \param[in] node SkipList Node Object */ -void ares__slist_node_reinsert(ares__slist_node_t *node); +void ares_slist_node_reinsert(ares_slist_node_t *node); /*! Remove Node from SkipList, calling destructor for Node Value. * * \param[in] node SkipList Node Object */ -void ares__slist_node_destroy(ares__slist_node_t *node); +void ares_slist_node_destroy(ares_slist_node_t *node); /*! Destroy SkipList Object. If there are any nodes, they will be destroyed. * * \param[in] list Initialized SkipList Object */ -void ares__slist_destroy(ares__slist_t *list); +void ares_slist_destroy(ares_slist_t *list); /*! @} */ diff --git a/deps/cares/src/lib/event/ares_event.h b/deps/cares/src/lib/event/ares_event.h index 317731fc4289ad..36cd10dcf89152 100644 --- a/deps/cares/src/lib/event/ares_event.h +++ b/deps/cares/src/lib/event/ares_event.h @@ -90,21 +90,23 @@ struct ares_event_thread { * event before sleeping. */ ares_bool_t isup; /*! Handle to the thread for joining during shutdown */ - ares__thread_t *thread; + ares_thread_t *thread; /*! Lock to protect the data contained within the event thread itself */ - ares__thread_mutex_t *mutex; + ares_thread_mutex_t *mutex; /*! Reference to the ares channel, for being able to call things like * ares_timeout() and ares_process_fd(). */ ares_channel_t *channel; + /*! Whether or not on the next loop we should process a pending write */ + ares_bool_t process_pending_write; /*! Not-yet-processed event handle updates. These will get enqueued by a * thread other than the event thread itself. The event thread will then * be woken then process these updates itself */ - ares__llist_t *ev_updates; + ares_llist_t *ev_updates; /*! Registered socket event handles */ - ares__htable_asvp_t *ev_sock_handles; + ares_htable_asvp_t *ev_sock_handles; /*! Registered custom event handles. Typically used for external triggering. */ - ares__htable_vpvp_t *ev_cust_handles; + ares_htable_vpvp_t *ev_cust_handles; /*! Pointer to the event handle which is used to signal and wake the event * thread itself. This is needed to be able to do things like update the * file descriptors being waited on and to wake the event subsystem during diff --git a/deps/cares/src/lib/event/ares_event_configchg.c b/deps/cares/src/lib/event/ares_event_configchg.c index 10f0e21dde77fa..e3e665bd165523 100644 --- a/deps/cares/src/lib/event/ares_event_configchg.c +++ b/deps/cares/src/lib/event/ares_event_configchg.c @@ -116,8 +116,8 @@ static void ares_event_configchg_cb(ares_event_thread_t *e, ares_socket_t fd, continue; } - if (strcasecmp(event->name, "resolv.conf") == 0 || - strcasecmp(event->name, "nsswitch.conf") == 0) { + if (ares_strcaseeq(event->name, "resolv.conf") || + ares_strcaseeq(event->name, "nsswitch.conf")) { triggered = ARES_TRUE; } } @@ -545,17 +545,17 @@ typedef struct { } fileinfo_t; struct ares_event_configchg { - ares_bool_t isup; - ares__thread_t *thread; - ares__htable_strvp_t *filestat; - ares__thread_mutex_t *lock; - ares__thread_cond_t *wake; - const char *resolvconf_path; - ares_event_thread_t *e; + ares_bool_t isup; + ares_thread_t *thread; + ares_htable_strvp_t *filestat; + ares_thread_mutex_t *lock; + ares_thread_cond_t *wake; + const char *resolvconf_path; + ares_event_thread_t *e; }; -static ares_status_t config_change_check(ares__htable_strvp_t *filestat, - const char *resolvconf_path) +static ares_status_t config_change_check(ares_htable_strvp_t *filestat, + const char *resolvconf_path) { size_t i; const char *configfiles[5]; @@ -568,7 +568,7 @@ static ares_status_t config_change_check(ares__htable_strvp_t *filestat, configfiles[4] = NULL; for (i = 0; configfiles[i] != NULL; i++) { - fileinfo_t *fi = ares__htable_strvp_get_direct(filestat, configfiles[i]); + fileinfo_t *fi = ares_htable_strvp_get_direct(filestat, configfiles[i]); struct stat st; if (stat(configfiles[i], &st) == 0) { @@ -577,7 +577,7 @@ static ares_status_t config_change_check(ares__htable_strvp_t *filestat, if (fi == NULL) { return ARES_ENOMEM; } - if (!ares__htable_strvp_insert(filestat, configfiles[i], fi)) { + if (!ares_htable_strvp_insert(filestat, configfiles[i], fi)) { ares_free(fi); return ARES_ENOMEM; } @@ -589,7 +589,7 @@ static ares_status_t config_change_check(ares__htable_strvp_t *filestat, fi->mtime = (time_t)st.st_mtime; } else if (fi != NULL) { /* File no longer exists, remove */ - ares__htable_strvp_remove(filestat, configfiles[i]); + ares_htable_strvp_remove(filestat, configfiles[i]); changed = ARES_TRUE; } } @@ -604,11 +604,11 @@ static void *ares_event_configchg_thread(void *arg) { ares_event_configchg_t *c = arg; - ares__thread_mutex_lock(c->lock); + ares_thread_mutex_lock(c->lock); while (c->isup) { ares_status_t status; - if (ares__thread_cond_timedwait(c->wake, c->lock, 30000) != ARES_ETIMEOUT) { + if (ares_thread_cond_timedwait(c->wake, c->lock, 30000) != ARES_ETIMEOUT) { continue; } @@ -623,7 +623,7 @@ static void *ares_event_configchg_thread(void *arg) } } - ares__thread_mutex_unlock(c->lock); + ares_thread_mutex_unlock(c->lock); return NULL; } @@ -643,13 +643,13 @@ ares_status_t ares_event_configchg_init(ares_event_configchg_t **configchg, c->e = e; - c->filestat = ares__htable_strvp_create(ares_free); + c->filestat = ares_htable_strvp_create(ares_free); if (c->filestat == NULL) { status = ARES_ENOMEM; goto done; } - c->wake = ares__thread_cond_create(); + c->wake = ares_thread_cond_create(); if (c->wake == NULL) { status = ARES_ENOMEM; goto done; @@ -666,7 +666,7 @@ ares_status_t ares_event_configchg_init(ares_event_configchg_t **configchg, } c->isup = ARES_TRUE; - status = ares__thread_create(&c->thread, ares_event_configchg_thread, c); + status = ares_thread_create(&c->thread, ares_event_configchg_thread, c); done: if (status != ARES_SUCCESS) { @@ -684,26 +684,26 @@ void ares_event_configchg_destroy(ares_event_configchg_t *configchg) } if (configchg->lock) { - ares__thread_mutex_lock(configchg->lock); + ares_thread_mutex_lock(configchg->lock); } configchg->isup = ARES_FALSE; if (configchg->wake) { - ares__thread_cond_signal(configchg->wake); + ares_thread_cond_signal(configchg->wake); } if (configchg->lock) { - ares__thread_mutex_unlock(configchg->lock); + ares_thread_mutex_unlock(configchg->lock); } if (configchg->thread) { void *rv = NULL; - ares__thread_join(configchg->thread, &rv); + ares_thread_join(configchg->thread, &rv); } - ares__thread_mutex_destroy(configchg->lock); - ares__thread_cond_destroy(configchg->wake); - ares__htable_strvp_destroy(configchg->filestat); + ares_thread_mutex_destroy(configchg->lock); + ares_thread_cond_destroy(configchg->wake); + ares_htable_strvp_destroy(configchg->filestat); ares_free(configchg); } diff --git a/deps/cares/src/lib/event/ares_event_epoll.c b/deps/cares/src/lib/event/ares_event_epoll.c index 5eb25cccc9ed2a..538c38b4f94ab4 100644 --- a/deps/cares/src/lib/event/ares_event_epoll.c +++ b/deps/cares/src/lib/event/ares_event_epoll.c @@ -161,8 +161,8 @@ static size_t ares_evsys_epoll_wait(ares_event_thread_t *e, ares_event_t *ev; ares_event_flags_t flags = 0; - ev = ares__htable_asvp_get_direct(e->ev_sock_handles, - (ares_socket_t)events[i].data.fd); + ev = ares_htable_asvp_get_direct(e->ev_sock_handles, + (ares_socket_t)events[i].data.fd); if (ev == NULL || ev->cb == NULL) { continue; /* LCOV_EXCL_LINE: DefensiveCoding */ } diff --git a/deps/cares/src/lib/event/ares_event_kqueue.c b/deps/cares/src/lib/event/ares_event_kqueue.c index 1c35c14f165690..dbbd0dbd9f76a6 100644 --- a/deps/cares/src/lib/event/ares_event_kqueue.c +++ b/deps/cares/src/lib/event/ares_event_kqueue.c @@ -217,8 +217,8 @@ static size_t ares_evsys_kqueue_wait(ares_event_thread_t *e, ares_event_t *ev; ares_event_flags_t flags = 0; - ev = ares__htable_asvp_get_direct(e->ev_sock_handles, - (ares_socket_t)events[i].ident); + ev = ares_htable_asvp_get_direct(e->ev_sock_handles, + (ares_socket_t)events[i].ident); if (ev == NULL || ev->cb == NULL) { continue; } diff --git a/deps/cares/src/lib/event/ares_event_poll.c b/deps/cares/src/lib/event/ares_event_poll.c index 42ffd912e95c4b..c6ab4b62072b36 100644 --- a/deps/cares/src/lib/event/ares_event_poll.c +++ b/deps/cares/src/lib/event/ares_event_poll.c @@ -67,7 +67,7 @@ static size_t ares_evsys_poll_wait(ares_event_thread_t *e, unsigned long timeout_ms) { size_t num_fds = 0; - ares_socket_t *fdlist = ares__htable_asvp_keys(e->ev_sock_handles, &num_fds); + ares_socket_t *fdlist = ares_htable_asvp_keys(e->ev_sock_handles, &num_fds); struct pollfd *pollfd = NULL; int rv; size_t cnt = 0; @@ -80,7 +80,7 @@ static size_t ares_evsys_poll_wait(ares_event_thread_t *e, } for (i = 0; i < num_fds; i++) { const ares_event_t *ev = - ares__htable_asvp_get_direct(e->ev_sock_handles, fdlist[i]); + ares_htable_asvp_get_direct(e->ev_sock_handles, fdlist[i]); pollfd[i].fd = ev->fd; if (ev->flags & ARES_EVENT_FLAG_READ) { pollfd[i].events |= POLLIN; @@ -107,7 +107,7 @@ static size_t ares_evsys_poll_wait(ares_event_thread_t *e, cnt++; - ev = ares__htable_asvp_get_direct(e->ev_sock_handles, pollfd[i].fd); + ev = ares_htable_asvp_get_direct(e->ev_sock_handles, pollfd[i].fd); if (ev == NULL || ev->cb == NULL) { continue; /* LCOV_EXCL_LINE: DefensiveCoding */ } diff --git a/deps/cares/src/lib/event/ares_event_select.c b/deps/cares/src/lib/event/ares_event_select.c index e1266ea99056a3..4d7c085d872088 100644 --- a/deps/cares/src/lib/event/ares_event_select.c +++ b/deps/cares/src/lib/event/ares_event_select.c @@ -75,7 +75,7 @@ static size_t ares_evsys_select_wait(ares_event_thread_t *e, unsigned long timeout_ms) { size_t num_fds = 0; - ares_socket_t *fdlist = ares__htable_asvp_keys(e->ev_sock_handles, &num_fds); + ares_socket_t *fdlist = ares_htable_asvp_keys(e->ev_sock_handles, &num_fds); int rv; size_t cnt = 0; size_t i; @@ -92,7 +92,7 @@ static size_t ares_evsys_select_wait(ares_event_thread_t *e, for (i = 0; i < num_fds; i++) { const ares_event_t *ev = - ares__htable_asvp_get_direct(e->ev_sock_handles, fdlist[i]); + ares_htable_asvp_get_direct(e->ev_sock_handles, fdlist[i]); if (ev->flags & ARES_EVENT_FLAG_READ) { FD_SET(ev->fd, &read_fds); } @@ -117,7 +117,7 @@ static size_t ares_evsys_select_wait(ares_event_thread_t *e, ares_event_t *ev; ares_event_flags_t flags = 0; - ev = ares__htable_asvp_get_direct(e->ev_sock_handles, fdlist[i]); + ev = ares_htable_asvp_get_direct(e->ev_sock_handles, fdlist[i]); if (ev == NULL || ev->cb == NULL) { continue; /* LCOV_EXCL_LINE: DefensiveCoding */ } diff --git a/deps/cares/src/lib/event/ares_event_thread.c b/deps/cares/src/lib/event/ares_event_thread.c index 8b332e9b0193b7..24b55d6945728f 100644 --- a/deps/cares/src/lib/event/ares_event_thread.c +++ b/deps/cares/src/lib/event/ares_event_thread.c @@ -77,11 +77,11 @@ static void ares_event_thread_wake(const ares_event_thread_t *e) static ares_event_t *ares_event_update_find(ares_event_thread_t *e, ares_socket_t fd, const void *data) { - ares__llist_node_t *node; + ares_llist_node_t *node; - for (node = ares__llist_node_first(e->ev_updates); node != NULL; - node = ares__llist_node_next(node)) { - ares_event_t *ev = ares__llist_node_val(node); + for (node = ares_llist_node_first(e->ev_updates); node != NULL; + node = ares_llist_node_next(node)) { + ares_event_t *ev = ares_llist_node_val(node); if (fd != ARES_SOCKET_BAD && fd == ev->fd && ev->flags != 0) { return ev; @@ -134,7 +134,7 @@ ares_status_t ares_event_update(ares_event_t **event, ares_event_thread_t *e, /* That's all the validation we can really do */ - ares__thread_mutex_lock(e->mutex); + ares_thread_mutex_lock(e->mutex); /* See if we have a queued update already */ ev = ares_event_update_find(e, fd, data); @@ -146,7 +146,7 @@ ares_status_t ares_event_update(ares_event_t **event, ares_event_thread_t *e, goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } - if (ares__llist_insert_last(e->ev_updates, ev) == NULL) { + if (ares_llist_insert_last(e->ev_updates, ev) == NULL) { ares_free(ev); /* LCOV_EXCL_LINE: OutOfMemory */ status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ goto done; /* LCOV_EXCL_LINE: OutOfMemory */ @@ -180,7 +180,7 @@ ares_status_t ares_event_update(ares_event_t **event, ares_event_thread_t *e, ares_event_thread_wake(e); } - ares__thread_mutex_unlock(e->mutex); + ares_thread_mutex_unlock(e->mutex); return status; } @@ -189,11 +189,18 @@ static void ares_event_thread_process_fd(ares_event_thread_t *e, ares_socket_t fd, void *data, ares_event_flags_t flags) { + ares_fd_events_t event; (void)data; - ares_process_fd(e->channel, - (flags & ARES_EVENT_FLAG_READ) ? fd : ARES_SOCKET_BAD, - (flags & ARES_EVENT_FLAG_WRITE) ? fd : ARES_SOCKET_BAD); + event.fd = fd; + event.events = 0; + if (flags & ARES_EVENT_FLAG_READ) { + event.events |= ARES_FD_EVENT_READ; + } + if (flags & ARES_EVENT_FLAG_WRITE) { + event.events |= ARES_FD_EVENT_WRITE; + } + ares_process_fds(e->channel, &event, 1, ARES_PROCESS_FLAG_SKIP_NON_FD); } static void ares_event_thread_sockstate_cb(void *data, ares_socket_t socket_fd, @@ -216,20 +223,31 @@ static void ares_event_thread_sockstate_cb(void *data, ares_socket_t socket_fd, NULL, NULL, NULL); } +static void notifywrite_cb(void *data) +{ + ares_event_thread_t *e = data; + + ares_thread_mutex_lock(e->mutex); + e->process_pending_write = ARES_TRUE; + ares_thread_mutex_unlock(e->mutex); + + ares_event_thread_wake(e); +} + static void ares_event_process_updates(ares_event_thread_t *e) { - ares__llist_node_t *node; + ares_llist_node_t *node; /* Iterate across all updates and apply to internal list, removing from update * list */ - while ((node = ares__llist_node_first(e->ev_updates)) != NULL) { - ares_event_t *newev = ares__llist_node_claim(node); + while ((node = ares_llist_node_first(e->ev_updates)) != NULL) { + ares_event_t *newev = ares_llist_node_claim(node); ares_event_t *oldev; if (newev->fd == ARES_SOCKET_BAD) { - oldev = ares__htable_vpvp_get_direct(e->ev_cust_handles, newev->data); + oldev = ares_htable_vpvp_get_direct(e->ev_cust_handles, newev->data); } else { - oldev = ares__htable_asvp_get_direct(e->ev_sock_handles, newev->fd); + oldev = ares_htable_asvp_get_direct(e->ev_sock_handles, newev->fd); } /* Adding new */ @@ -244,9 +262,9 @@ static void ares_event_process_updates(ares_event_thread_t *e) ares_event_destroy_cb(newev); } else { if (newev->fd == ARES_SOCKET_BAD) { - ares__htable_vpvp_insert(e->ev_cust_handles, newev->data, newev); + ares_htable_vpvp_insert(e->ev_cust_handles, newev->data, newev); } else { - ares__htable_asvp_insert(e->ev_sock_handles, newev->fd, newev); + ares_htable_asvp_insert(e->ev_sock_handles, newev->fd, newev); } } continue; @@ -257,9 +275,9 @@ static void ares_event_process_updates(ares_event_thread_t *e) /* the callback for the removal will call e->ev_sys->event_del(e, event) */ if (newev->fd == ARES_SOCKET_BAD) { - ares__htable_vpvp_remove(e->ev_cust_handles, newev->data); + ares_htable_vpvp_remove(e->ev_cust_handles, newev->data); } else { - ares__htable_asvp_remove(e->ev_sock_handles, newev->fd); + ares_htable_asvp_remove(e->ev_sock_handles, newev->fd); } ares_free(newev); continue; @@ -276,22 +294,22 @@ static void ares_event_thread_cleanup(ares_event_thread_t *e) { /* Manually free any updates that weren't processed */ if (e->ev_updates != NULL) { - ares__llist_node_t *node; + ares_llist_node_t *node; - while ((node = ares__llist_node_first(e->ev_updates)) != NULL) { - ares_event_destroy_cb(ares__llist_node_claim(node)); + while ((node = ares_llist_node_first(e->ev_updates)) != NULL) { + ares_event_destroy_cb(ares_llist_node_claim(node)); } - ares__llist_destroy(e->ev_updates); + ares_llist_destroy(e->ev_updates); e->ev_updates = NULL; } if (e->ev_sock_handles != NULL) { - ares__htable_asvp_destroy(e->ev_sock_handles); + ares_htable_asvp_destroy(e->ev_sock_handles); e->ev_sock_handles = NULL; } if (e->ev_cust_handles != NULL) { - ares__htable_vpvp_destroy(e->ev_cust_handles); + ares_htable_vpvp_destroy(e->ev_cust_handles); e->ev_cust_handles = NULL; } @@ -304,19 +322,20 @@ static void ares_event_thread_cleanup(ares_event_thread_t *e) static void *ares_event_thread(void *arg) { ares_event_thread_t *e = arg; - ares__thread_mutex_lock(e->mutex); + ares_thread_mutex_lock(e->mutex); while (e->isup) { struct timeval tv; const struct timeval *tvout; unsigned long timeout_ms = 0; /* 0 = unlimited */ + ares_bool_t process_pending_write; ares_event_process_updates(e); /* Don't hold a mutex while waiting on events or calling into anything * that might require a c-ares channel lock since a callback could be * triggered cross-thread */ - ares__thread_mutex_unlock(e->mutex); + ares_thread_mutex_unlock(e->mutex); tvout = ares_timeout(e->channel, NULL, &tv); if (tvout != NULL) { @@ -326,19 +345,29 @@ static void *ares_event_thread(void *arg) e->ev_sys->wait(e, timeout_ms); - /* Each iteration should do timeout processing */ + /* Process pending write operation */ + ares_thread_mutex_lock(e->mutex); + process_pending_write = e->process_pending_write; + e->process_pending_write = ARES_FALSE; + ares_thread_mutex_unlock(e->mutex); + if (process_pending_write) { + ares_process_pending_write(e->channel); + } + + /* Each iteration should do timeout processing and any other cleanup + * that may not have been performed */ if (e->isup) { - ares_process_fd(e->channel, ARES_SOCKET_BAD, ARES_SOCKET_BAD); + ares_process_fds(e->channel, NULL, 0, ARES_PROCESS_FLAG_NONE); } /* Relock before we loop again */ - ares__thread_mutex_lock(e->mutex); + ares_thread_mutex_lock(e->mutex); } /* Lets cleanup while we're in the thread itself */ ares_event_thread_cleanup(e); - ares__thread_mutex_unlock(e->mutex); + ares_thread_mutex_unlock(e->mutex); return NULL; } @@ -346,17 +375,17 @@ static void *ares_event_thread(void *arg) static void ares_event_thread_destroy_int(ares_event_thread_t *e) { /* Wake thread and tell it to shutdown if it exists */ - ares__thread_mutex_lock(e->mutex); + ares_thread_mutex_lock(e->mutex); if (e->isup) { e->isup = ARES_FALSE; ares_event_thread_wake(e); } - ares__thread_mutex_unlock(e->mutex); + ares_thread_mutex_unlock(e->mutex); /* Wait for thread to shutdown */ if (e->thread) { void *rv = NULL; - ares__thread_join(e->thread, &rv); + ares_thread_join(e->thread, &rv); e->thread = NULL; } @@ -364,7 +393,7 @@ static void ares_event_thread_destroy_int(ares_event_thread_t *e) * as it runs this same cleanup when it shuts down */ ares_event_thread_cleanup(e); - ares__thread_mutex_destroy(e->mutex); + ares_thread_mutex_destroy(e->mutex); e->mutex = NULL; ares_free(e); @@ -379,8 +408,10 @@ void ares_event_thread_destroy(ares_channel_t *channel) } ares_event_thread_destroy_int(e); - channel->sock_state_cb_data = NULL; - channel->sock_state_cb = NULL; + channel->sock_state_cb_data = NULL; + channel->sock_state_cb = NULL; + channel->notify_pending_write_cb = NULL; + channel->notify_pending_write_cb_data = NULL; } static const ares_event_sys_t *ares_event_fetch_sys(ares_evsys_t evsys) @@ -451,25 +482,25 @@ ares_status_t ares_event_thread_init(ares_channel_t *channel) return ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ } - e->mutex = ares__thread_mutex_create(); + e->mutex = ares_thread_mutex_create(); if (e->mutex == NULL) { ares_event_thread_destroy_int(e); /* LCOV_EXCL_LINE: OutOfMemory */ return ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ } - e->ev_updates = ares__llist_create(NULL); + e->ev_updates = ares_llist_create(NULL); if (e->ev_updates == NULL) { ares_event_thread_destroy_int(e); /* LCOV_EXCL_LINE: OutOfMemory */ return ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ } - e->ev_sock_handles = ares__htable_asvp_create(ares_event_destroy_cb); + e->ev_sock_handles = ares_htable_asvp_create(ares_event_destroy_cb); if (e->ev_sock_handles == NULL) { ares_event_thread_destroy_int(e); /* LCOV_EXCL_LINE: OutOfMemory */ return ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ } - e->ev_cust_handles = ares__htable_vpvp_create(NULL, ares_event_destroy_cb); + e->ev_cust_handles = ares_htable_vpvp_create(NULL, ares_event_destroy_cb); if (e->ev_cust_handles == NULL) { ares_event_thread_destroy_int(e); /* LCOV_EXCL_LINE: OutOfMemory */ return ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ @@ -483,8 +514,10 @@ ares_status_t ares_event_thread_init(ares_channel_t *channel) return ARES_ENOTIMP; /* LCOV_EXCL_LINE: UntestablePath */ } - channel->sock_state_cb = ares_event_thread_sockstate_cb; - channel->sock_state_cb_data = e; + channel->sock_state_cb = ares_event_thread_sockstate_cb; + channel->sock_state_cb_data = e; + channel->notify_pending_write_cb = notifywrite_cb; + channel->notify_pending_write_cb_data = e; if (!e->ev_sys->init(e)) { /* LCOV_EXCL_START: UntestablePath */ @@ -503,7 +536,7 @@ ares_status_t ares_event_thread_init(ares_channel_t *channel) ares_event_process_updates(e); /* Start thread */ - if (ares__thread_create(&e->thread, ares_event_thread, e) != ARES_SUCCESS) { + if (ares_thread_create(&e->thread, ares_event_thread, e) != ARES_SUCCESS) { /* LCOV_EXCL_START: UntestablePath */ ares_event_thread_destroy_int(e); channel->sock_state_cb = NULL; diff --git a/deps/cares/src/lib/event/ares_event_win32.c b/deps/cares/src/lib/event/ares_event_win32.c index 0b7e535bbbf538..1531b6d81ddca4 100644 --- a/deps/cares/src/lib/event/ares_event_win32.c +++ b/deps/cares/src/lib/event/ares_event_win32.c @@ -204,14 +204,14 @@ typedef struct { NtCancelIoFileEx_t NtCancelIoFileEx; /* Implementation details */ - ares__slist_t *afd_handles; + ares_slist_t *afd_handles; HANDLE iocp_handle; /* IO_STATUS_BLOCK * -> ares_evsys_win32_eventdata_t * mapping. There is * no completion key passed to IOCP with this method so we have to look * up based on the lpOverlapped returned (which is mapped to IO_STATUS_BLOCK) */ - ares__htable_vpvp_t *sockets; + ares_htable_vpvp_t *sockets; /* Flag about whether or not we are shutting down */ ares_bool_t is_shutdown; @@ -226,24 +226,24 @@ typedef enum { typedef struct { /*! Pointer to parent event container */ - ares_event_t *event; + ares_event_t *event; /*! Socket passed in to monitor */ - SOCKET socket; + SOCKET socket; /*! Base socket derived from provided socket */ - SOCKET base_socket; + SOCKET base_socket; /*! Structure for submitting AFD POLL requests (Internals!) */ - AFD_POLL_INFO afd_poll_info; + AFD_POLL_INFO afd_poll_info; /*! Status of current polling operation */ - poll_status_t poll_status; + poll_status_t poll_status; /*! IO Status Block structure submitted with AFD POLL requests and returned * with IOCP results as lpOverlapped (even though its a different structure) */ - IO_STATUS_BLOCK iosb; + IO_STATUS_BLOCK iosb; /*! AFD handle node an outstanding poll request is associated with */ - ares__slist_node_t *afd_handle_node; + ares_slist_node_t *afd_handle_node; /* Lock is only for PostQueuedCompletionStatus() to prevent multiple * signals. Tracking via POLL_STATUS_PENDING/POLL_STATUS_NONE */ - ares__thread_mutex_t *lock; + ares_thread_mutex_t *lock; } ares_evsys_win32_eventdata_t; static size_t ares_evsys_win32_wait(ares_event_thread_t *e, @@ -256,12 +256,12 @@ static void ares_iocpevent_signal(const ares_event_t *event) ares_evsys_win32_eventdata_t *ed = event->data; ares_bool_t queue_event = ARES_FALSE; - ares__thread_mutex_lock(ed->lock); + ares_thread_mutex_lock(ed->lock); if (ed->poll_status != POLL_STATUS_PENDING) { ed->poll_status = POLL_STATUS_PENDING; queue_event = ARES_TRUE; } - ares__thread_mutex_unlock(ed->lock); + ares_thread_mutex_unlock(ed->lock); if (!queue_event) { return; @@ -277,9 +277,9 @@ static void ares_iocpevent_cb(ares_event_thread_t *e, ares_socket_t fd, (void)e; (void)fd; (void)flags; - ares__thread_mutex_lock(ed->lock); + ares_thread_mutex_lock(ed->lock); ed->poll_status = POLL_STATUS_NONE; - ares__thread_mutex_unlock(ed->lock); + ares_thread_mutex_unlock(ed->lock); } static ares_event_t *ares_iocpevent_create(ares_event_thread_t *e) @@ -314,8 +314,8 @@ static void ares_evsys_win32_destroy(ares_event_thread_t *e) ew->is_shutdown = ARES_TRUE; CARES_DEBUG_LOG(" ** waiting on %lu remaining sockets to be destroyed\n", - (unsigned long)ares__htable_vpvp_num_keys(ew->sockets)); - while (ares__htable_vpvp_num_keys(ew->sockets)) { + (unsigned long)ares_htable_vpvp_num_keys(ew->sockets)); + while (ares_htable_vpvp_num_keys(ew->sockets)) { ares_evsys_win32_wait(e, 0); } CARES_DEBUG_LOG(" ** all sockets cleaned up\n"); @@ -325,9 +325,9 @@ static void ares_evsys_win32_destroy(ares_event_thread_t *e) CloseHandle(ew->iocp_handle); } - ares__slist_destroy(ew->afd_handles); + ares_slist_destroy(ew->afd_handles); - ares__htable_vpvp_destroy(ew->sockets); + ares_htable_vpvp_destroy(ew->sockets); ares_free(ew); e->ev_sys_data = NULL; @@ -373,14 +373,14 @@ static void fill_object_attributes(OBJECT_ATTRIBUTES *attr, # define UNICODE_STRING_CONSTANT(s) \ { (sizeof(s) - 1) * sizeof(wchar_t), sizeof(s) * sizeof(wchar_t), L##s } -static ares__slist_node_t *ares_afd_handle_create(ares_evsys_win32_t *ew) +static ares_slist_node_t *ares_afd_handle_create(ares_evsys_win32_t *ew) { UNICODE_STRING afd_device_name = UNICODE_STRING_CONSTANT("\\Device\\Afd"); OBJECT_ATTRIBUTES afd_attributes; NTSTATUS status; IO_STATUS_BLOCK iosb; - ares_afd_handle_t *afd = ares_malloc_zero(sizeof(*afd)); - ares__slist_node_t *node = NULL; + ares_afd_handle_t *afd = ares_malloc_zero(sizeof(*afd)); + ares_slist_node_t *node = NULL; if (afd == NULL) { goto fail; } @@ -407,7 +407,7 @@ static ares__slist_node_t *ares_afd_handle_create(ares_evsys_win32_t *ew) goto fail; } - node = ares__slist_insert(ew->afd_handles, afd); + node = ares_slist_insert(ew->afd_handles, afd); if (node == NULL) { goto fail; } @@ -422,10 +422,10 @@ static ares__slist_node_t *ares_afd_handle_create(ares_evsys_win32_t *ew) /* Fetch the lowest poll count entry, but if it exceeds the limit, create a * new one and return that */ -static ares__slist_node_t *ares_afd_handle_fetch(ares_evsys_win32_t *ew) +static ares_slist_node_t *ares_afd_handle_fetch(ares_evsys_win32_t *ew) { - ares__slist_node_t *node = ares__slist_node_first(ew->afd_handles); - ares_afd_handle_t *afd = ares__slist_node_val(node); + ares_slist_node_t *node = ares_slist_node_first(ew->afd_handles); + ares_afd_handle_t *afd = ares_slist_node_val(node); if (afd != NULL && afd->poll_cnt < AFD_POLL_PER_HANDLE) { return node; @@ -488,7 +488,7 @@ static ares_bool_t ares_evsys_win32_init(ares_event_thread_t *e) goto fail; } - ew->afd_handles = ares__slist_create( + ew->afd_handles = ares_slist_create( e->channel->rand_state, ares_afd_handle_cmp, ares_afd_handle_destroy); if (ew->afd_handles == NULL) { goto fail; @@ -505,7 +505,7 @@ static ares_bool_t ares_evsys_win32_init(ares_event_thread_t *e) goto fail; } - ew->sockets = ares__htable_vpvp_create(NULL, NULL); + ew->sockets = ares_htable_vpvp_create(NULL, NULL); if (ew->sockets == NULL) { goto fail; } @@ -582,7 +582,7 @@ static ares_bool_t ares_evsys_win32_afd_enqueue(ares_event_t *event, return ARES_FALSE; } - afd = ares__slist_node_val(ed->afd_handle_node); + afd = ares_slist_node_val(ed->afd_handle_node); /* Enqueue AFD Poll */ ed->afd_poll_info.Exclusive = FALSE; @@ -621,7 +621,7 @@ static ares_bool_t ares_evsys_win32_afd_enqueue(ares_event_t *event, /* Record that we submitted a poll request to this handle and tell it to * re-sort the node since we changed its sort value */ afd->poll_cnt++; - ares__slist_node_reinsert(ed->afd_handle_node); + ares_slist_node_reinsert(ed->afd_handle_node); ed->poll_status = POLL_STATUS_PENDING; CARES_DEBUG_LOG("++ afd_enqueue ed=%p flags=%X\n", (void *)ed, @@ -643,7 +643,7 @@ static ares_bool_t ares_evsys_win32_afd_cancel(ares_evsys_win32_eventdata_t *ed) return ARES_FALSE; } - afd = ares__slist_node_val(ed->afd_handle_node); + afd = ares_slist_node_val(ed->afd_handle_node); /* Misuse */ if (afd == NULL) { @@ -685,10 +685,10 @@ static void ares_evsys_win32_eventdata_destroy(ares_evsys_win32_t *ew, (ed->socket == ARES_SOCKET_BAD) ? "data" : "socket"); /* These type of handles are deferred destroy. Update tracking. */ if (ed->socket != ARES_SOCKET_BAD) { - ares__htable_vpvp_remove(ew->sockets, &ed->iosb); + ares_htable_vpvp_remove(ew->sockets, &ed->iosb); } - ares__thread_mutex_destroy(ed->lock); + ares_thread_mutex_destroy(ed->lock); if (ed->event != NULL) { ed->event->data = NULL; @@ -718,7 +718,7 @@ static ares_bool_t ares_evsys_win32_event_add(ares_event_t *event) * the ares_evsys_win32_eventdata_t as the placeholder to use as the * IOCP Completion Key */ if (ed->socket == ARES_SOCKET_BAD) { - ed->lock = ares__thread_mutex_create(); + ed->lock = ares_thread_mutex_create(); if (ed->lock == NULL) { goto done; } @@ -731,7 +731,7 @@ static ares_bool_t ares_evsys_win32_event_add(ares_event_t *event) goto done; } - if (!ares__htable_vpvp_insert(ew->sockets, &ed->iosb, ed)) { + if (!ares_htable_vpvp_insert(ew->sockets, &ed->iosb, ed)) { goto done; } @@ -859,9 +859,9 @@ static ares_bool_t ares_evsys_win32_process_socket_event( /* Decrement poll count for AFD handle then resort, also disassociate * with socket */ - afd = ares__slist_node_val(ed->afd_handle_node); + afd = ares_slist_node_val(ed->afd_handle_node); afd->poll_cnt--; - ares__slist_node_reinsert(ed->afd_handle_node); + ares_slist_node_reinsert(ed->afd_handle_node); ed->afd_handle_node = NULL; /* Pending destroy, go ahead and kill it */ @@ -946,7 +946,7 @@ static size_t ares_evsys_win32_wait(ares_event_thread_t *e, ed = (ares_evsys_win32_eventdata_t *)entries[i].lpCompletionKey; rc = ares_evsys_win32_process_other_event(ew, ed, i); } else { - ed = ares__htable_vpvp_get_direct(ew->sockets, entries[i].lpOverlapped); + ed = ares_htable_vpvp_get_direct(ew->sockets, entries[i].lpOverlapped); rc = ares_evsys_win32_process_socket_event(ew, ed, i); } diff --git a/deps/cares/src/lib/dsa/ares__array.h b/deps/cares/src/lib/include/ares_array.h similarity index 61% rename from deps/cares/src/lib/dsa/ares__array.h rename to deps/cares/src/lib/include/ares_array.h index 6fa1c0e15e9301..f1a2e155f37f82 100644 --- a/deps/cares/src/lib/dsa/ares__array.h +++ b/deps/cares/src/lib/include/ares_array.h @@ -26,7 +26,9 @@ #ifndef __ARES__ARRAY_H #define __ARES__ARRAY_H -/*! \addtogroup ares__array Array Data Structure +#include "ares.h" + +/*! \addtogroup ares_array Array Data Structure * * This is an array with helpers. It is meant to have as little overhead * as possible over direct array management by applications but to provide @@ -36,17 +38,17 @@ * @{ */ -struct ares__array; +struct ares_array; /*! Opaque data structure for array */ -typedef struct ares__array ares__array_t; +typedef struct ares_array ares_array_t; /*! Callback to free user-defined member data * * \param[in] data pointer to member of array to be destroyed. The pointer * itself must not be destroyed, just the data it contains. */ -typedef void (*ares__array_destructor_t)(void *data); +typedef void (*ares_array_destructor_t)(void *data); /*! Callback to compare two array elements used for sorting * @@ -54,7 +56,7 @@ typedef void (*ares__array_destructor_t)(void *data); * \param[in] data2 array member 2 * \return < 0 if data1 < data2, > 0 if data1 > data2, 0 if data1 == data2 */ -typedef int (*ares__array_cmp_t)(const void *data1, const void *data2); +typedef int (*ares_array_cmp_t)(const void *data1, const void *data2); /*! Create an array object * @@ -72,8 +74,8 @@ typedef int (*ares__array_cmp_t)(const void *data1, const void *data2); * * \return array object or NULL on out of memory */ -ares__array_t *ares__array_create(size_t member_size, - ares__array_destructor_t destruct); +CARES_EXTERN ares_array_t *ares_array_create(size_t member_size, + ares_array_destructor_t destruct); /*! Request the array be at least the requested size. Useful if the desired @@ -83,7 +85,7 @@ ares__array_t *ares__array_create(size_t member_size, * \param[in] size Minimum number of members * \return ARES_SUCCESS on success, ARES_EFORMERR on misuse, * ARES_ENOMEM on out of memory */ -ares_status_t ares__array_set_size(ares__array_t *arr, size_t size); +CARES_EXTERN ares_status_t ares_array_set_size(ares_array_t *arr, size_t size); /*! Sort the array using the given comparison function. This is not * persistent, any future elements inserted will not maintain this sort. @@ -92,14 +94,15 @@ ares_status_t ares__array_set_size(ares__array_t *arr, size_t size); * \param[in] cb Sort callback * \return ARES_SUCCESS on success */ -ares_status_t ares__array_sort(ares__array_t *arr, ares__array_cmp_t cmp); +CARES_EXTERN ares_status_t ares_array_sort(ares_array_t *arr, + ares_array_cmp_t cmp); /*! Destroy an array object. If a destructor is set, will be called on each * member of the array. * * \param[in] arr Initialized array object. */ -void ares__array_destroy(ares__array_t *arr); +CARES_EXTERN void ares_array_destroy(ares_array_t *arr); /*! Retrieve the array in the native format. This will also destroy the * container. It is the responsibility of the caller to free the returned @@ -109,14 +112,14 @@ void ares__array_destroy(ares__array_t *arr); * \param[out] num_members the number of members in the returned array * \return pointer to native array on success, NULL on failure. */ -void *ares__array_finish(ares__array_t *arr, size_t *num_members); +CARES_EXTERN void *ares_array_finish(ares_array_t *arr, size_t *num_members); /*! Retrieve the number of members in the array * * \param[in] arr Initialized array object. * \return numbrer of members */ -size_t ares__array_len(const ares__array_t *arr); +CARES_EXTERN size_t ares_array_len(const ares_array_t *arr); /*! Insert a new array member at the given index * @@ -127,8 +130,8 @@ size_t ares__array_len(const ares__array_t *arr); * \return ARES_SUCCESS on success, ARES_EFORMERR on bad index, * ARES_ENOMEM on out of memory. */ -ares_status_t ares__array_insert_at(void **elem_ptr, ares__array_t *arr, - size_t idx); +CARES_EXTERN ares_status_t ares_array_insert_at(void **elem_ptr, + ares_array_t *arr, size_t idx); /*! Insert a new array member at the end of the array * @@ -136,7 +139,8 @@ ares_status_t ares__array_insert_at(void **elem_ptr, ares__array_t *arr, * \param[in] arr Initialized array object. * \return ARES_SUCCESS on success, ARES_ENOMEM on out of memory. */ -ares_status_t ares__array_insert_last(void **elem_ptr, ares__array_t *arr); +CARES_EXTERN ares_status_t ares_array_insert_last(void **elem_ptr, + ares_array_t *arr); /*! Insert a new array member at the beginning of the array * @@ -144,39 +148,87 @@ ares_status_t ares__array_insert_last(void **elem_ptr, ares__array_t *arr); * \param[in] arr Initialized array object. * \return ARES_SUCCESS on success, ARES_ENOMEM on out of memory. */ -ares_status_t ares__array_insert_first(void **elem_ptr, ares__array_t *arr); +CARES_EXTERN ares_status_t ares_array_insert_first(void **elem_ptr, + ares_array_t *arr); + + +/*! Insert a new array member at the given index and copy the data pointed + * to by the data pointer into the array. This will copy member_size bytes + * from the provided pointer, this may not be safe for some data types + * that may have a smaller size than the provided member_size which includes + * padding as discussed in ares_array_create(). + * + * \param[in] arr Initialized array object. + * \param[in] idx Index in array to place new element, will shift any + * elements down that exist after this point. + * \param[in] data_ptr Pointer to data to copy into array. + * \return ARES_SUCCESS on success, ARES_EFORMERR on bad index or null data + * ptr, ARES_ENOMEM on out of memory. + */ +CARES_EXTERN ares_status_t ares_array_insertdata_at(ares_array_t *arr, + size_t idx, + const void *data_ptr); + +/*! Insert a new array member at the end of the array and copy the data pointed + * to by the data pointer into the array. This will copy member_size bytes + * from the provided pointer, this may not be safe for some data types + * that may have a smaller size than the provided member_size which includes + * padding as discussed in ares_array_create(). + * + * \param[in] arr Initialized array object. + * \param[in] data_ptr Pointer to data to copy into array. + * \return ARES_SUCCESS on success, ARES_EFORMERR on bad index or null data + * ptr, ARES_ENOMEM on out of memory. + */ +CARES_EXTERN ares_status_t ares_array_insertdata_last(ares_array_t *arr, + const void *data_ptr); + +/*! Insert a new array member at the beginning of the array and copy the data + * pointed to by the data pointer into the array. This will copy member_size + * bytes from the provided pointer, this may not be safe for some data types + * that may have a smaller size than the provided member_size which includes + * padding as discussed in ares_array_create(). + * + * \param[in] arr Initialized array object. + * \param[in] data_ptr Pointer to data to copy into array. + * \return ARES_SUCCESS on success, ARES_EFORMERR on bad index or null data + * ptr, ARES_ENOMEM on out of memory. + */ +CARES_EXTERN ares_status_t ares_array_insertdata_first(ares_array_t *arr, + const void *data_ptr); /*! Fetch a pointer to the given element in the array * \param[in] array Initialized array object * \param[in] idx Index to fetch * \return pointer on success, NULL on failure */ -void *ares__array_at(ares__array_t *arr, size_t idx); +CARES_EXTERN void *ares_array_at(ares_array_t *arr, size_t idx); /*! Fetch a pointer to the first element in the array * \param[in] array Initialized array object * \return pointer on success, NULL on failure */ -void *ares__array_first(ares__array_t *arr); +CARES_EXTERN void *ares_array_first(ares_array_t *arr); /*! Fetch a pointer to the last element in the array * \param[in] array Initialized array object * \return pointer on success, NULL on failure */ -void *ares__array_last(ares__array_t *arr); +CARES_EXTERN void *ares_array_last(ares_array_t *arr); /*! Fetch a constant pointer to the given element in the array * \param[in] array Initialized array object * \param[in] idx Index to fetch * \return pointer on success, NULL on failure */ -const void *ares__array_at_const(const ares__array_t *arr, size_t idx); +CARES_EXTERN const void *ares_array_at_const(const ares_array_t *arr, + size_t idx); /*! Fetch a constant pointer to the first element in the array * \param[in] array Initialized array object * \return pointer on success, NULL on failure */ -const void *ares__array_first_const(const ares__array_t *arr); +CARES_EXTERN const void *ares_array_first_const(const ares_array_t *arr); /*! Fetch a constant pointer to the last element in the array * \param[in] array Initialized array object * \return pointer on success, NULL on failure */ -const void *ares__array_last_const(const ares__array_t *arr); +CARES_EXTERN const void *ares_array_last_const(const ares_array_t *arr); /*! Claim the data from the specified array index, copying it to the buffer * provided by the caller. The index specified in the array will then be @@ -187,13 +239,13 @@ const void *ares__array_last_const(const ares__array_t *arr); * member needs destructor if not provided. * \param[in] dest_size Size of buffer provided, used as a sanity check. * Must match member_size provided to - * ares__array_create() if dest_size specified. + * ares_array_create() if dest_size specified. * \param[in] arr Initialized array object * \param[in] idx Index to claim * \return ARES_SUCCESS on success, ARES_EFORMERR on usage failure. */ -ares_status_t ares__array_claim_at(void *dest, size_t dest_size, - ares__array_t *arr, size_t idx); +CARES_EXTERN ares_status_t ares_array_claim_at(void *dest, size_t dest_size, + ares_array_t *arr, size_t idx); /*! Remove the member at the specified array index. The destructor will be * called. @@ -202,21 +254,22 @@ ares_status_t ares__array_claim_at(void *dest, size_t dest_size, * \param[in] idx Index to remove * \return ARES_SUCCESS if removed, ARES_EFORMERR on invalid use */ -ares_status_t ares__array_remove_at(ares__array_t *arr, size_t idx); +CARES_EXTERN ares_status_t ares_array_remove_at(ares_array_t *arr, size_t idx); /*! Remove the first member of the array. * * \param[in] arr Initialized array object * \return ARES_SUCCESS if removed, ARES_EFORMERR on invalid use */ -ares_status_t ares__array_remove_first(ares__array_t *arr); +CARES_EXTERN ares_status_t ares_array_remove_first(ares_array_t *arr); /*! Remove the last member of the array. * * \param[in] arr Initialized array object * \return ARES_SUCCESS if removed, ARES_EFORMERR on invalid use */ -ares_status_t ares__array_remove_last(ares__array_t *arr); +CARES_EXTERN ares_status_t ares_array_remove_last(ares_array_t *arr); + /*! @} */ diff --git a/deps/cares/src/lib/str/ares__buf.h b/deps/cares/src/lib/include/ares_buf.h similarity index 60% rename from deps/cares/src/lib/str/ares__buf.h rename to deps/cares/src/lib/include/ares_buf.h index cb887aa27edcdf..7836a313e066d1 100644 --- a/deps/cares/src/lib/str/ares__buf.h +++ b/deps/cares/src/lib/include/ares_buf.h @@ -26,7 +26,10 @@ #ifndef __ARES__BUF_H #define __ARES__BUF_H -/*! \addtogroup ares__buf Safe Data Builder and buffer +#include "ares.h" +#include "ares_array.h" + +/*! \addtogroup ares_buf Safe Data Builder and buffer * * This is a buffer building and parsing framework with a focus on security over * performance. All data to be read from the buffer will perform explicit length @@ -42,16 +45,16 @@ * * @{ */ -struct ares__buf; +struct ares_buf; /*! Opaque data type for generic hash table implementation */ -typedef struct ares__buf ares__buf_t; +typedef struct ares_buf ares_buf_t; /*! Create a new buffer object that dynamically allocates buffers for data. * * \return initialized buffer object or NULL if out of memory. */ -ares__buf_t *ares__buf_create(void); +CARES_EXTERN ares_buf_t *ares_buf_create(void); /*! Create a new buffer object that uses a user-provided data pointer. The * data provided will not be manipulated, and cannot be appended to. This @@ -62,14 +65,15 @@ ares__buf_t *ares__buf_create(void); * * \return initialized buffer object or NULL if out of memory or misuse. */ -ares__buf_t *ares__buf_create_const(const unsigned char *data, size_t data_len); +CARES_EXTERN ares_buf_t *ares_buf_create_const(const unsigned char *data, + size_t data_len); /*! Destroy an initialized buffer object. * * \param[in] buf Initialized buf object */ -void ares__buf_destroy(ares__buf_t *buf); +CARES_EXTERN void ares_buf_destroy(ares_buf_t *buf); /*! Append multiple bytes to a dynamic buffer object @@ -79,8 +83,9 @@ void ares__buf_destroy(ares__buf_t *buf); * \param[in] data_len Length of data to copy to buffer object. * \return ARES_SUCCESS or one of the c-ares error codes */ -ares_status_t ares__buf_append(ares__buf_t *buf, const unsigned char *data, - size_t data_len); +CARES_EXTERN ares_status_t ares_buf_append(ares_buf_t *buf, + const unsigned char *data, + size_t data_len); /*! Append a single byte to the dynamic buffer object * @@ -88,7 +93,8 @@ ares_status_t ares__buf_append(ares__buf_t *buf, const unsigned char *data, * \param[in] b Single byte to append to buffer object. * \return ARES_SUCCESS or one of the c-ares error codes */ -ares_status_t ares__buf_append_byte(ares__buf_t *buf, unsigned char b); +CARES_EXTERN ares_status_t ares_buf_append_byte(ares_buf_t *buf, + unsigned char b); /*! Append a null-terminated string to the dynamic buffer object * @@ -96,7 +102,8 @@ ares_status_t ares__buf_append_byte(ares__buf_t *buf, unsigned char b); * \param[in] str String to append to buffer object. * \return ARES_SUCCESS or one of the c-ares error codes */ -ares_status_t ares__buf_append_str(ares__buf_t *buf, const char *str); +CARES_EXTERN ares_status_t ares_buf_append_str(ares_buf_t *buf, + const char *str); /*! Append a 16bit Big Endian number to the buffer. * @@ -104,7 +111,8 @@ ares_status_t ares__buf_append_str(ares__buf_t *buf, const char *str); * \param[out] u16 16bit integer * \return ARES_SUCCESS or one of the c-ares error codes */ -ares_status_t ares__buf_append_be16(ares__buf_t *buf, unsigned short u16); +CARES_EXTERN ares_status_t ares_buf_append_be16(ares_buf_t *buf, + unsigned short u16); /*! Append a 32bit Big Endian number to the buffer. * @@ -112,7 +120,8 @@ ares_status_t ares__buf_append_be16(ares__buf_t *buf, unsigned short u16); * \param[out] u32 32bit integer * \return ARES_SUCCESS or one of the c-ares error codes */ -ares_status_t ares__buf_append_be32(ares__buf_t *buf, unsigned int u32); +CARES_EXTERN ares_status_t ares_buf_append_be32(ares_buf_t *buf, + unsigned int u32); /*! Append a number in ASCII decimal form. * @@ -121,8 +130,8 @@ ares_status_t ares__buf_append_be32(ares__buf_t *buf, unsigned int u32); * \param[in] len Length to output, use 0 for no padding * \return ARES_SUCCESS on success */ -ares_status_t ares__buf_append_num_dec(ares__buf_t *buf, size_t num, - size_t len); +CARES_EXTERN ares_status_t ares_buf_append_num_dec(ares_buf_t *buf, size_t num, + size_t len); /*! Append a number in ASCII hexadecimal form. * @@ -131,8 +140,8 @@ ares_status_t ares__buf_append_num_dec(ares__buf_t *buf, size_t num, * \param[in] len Length to output, use 0 for no padding * \return ARES_SUCCESS on success */ -ares_status_t ares__buf_append_num_hex(ares__buf_t *buf, size_t num, - size_t len); +CARES_EXTERN ares_status_t ares_buf_append_num_hex(ares_buf_t *buf, size_t num, + size_t len); /*! Sets the current buffer length. This *may* be used if there is a need to * override a prior position in the buffer, such as if there is a length @@ -147,13 +156,13 @@ ares_status_t ares__buf_append_num_hex(ares__buf_t *buf, size_t num, * \param[in] len Length to set * \return ARES_SUCCESS or one of the c-ares error codes */ -ares_status_t ares__buf_set_length(ares__buf_t *buf, size_t len); +CARES_EXTERN ares_status_t ares_buf_set_length(ares_buf_t *buf, size_t len); /*! Start a dynamic append operation that returns a buffer suitable for * writing. A desired minimum length is passed in, and the actual allocated * buffer size is returned which may be greater than the requested size. - * No operation other than ares__buf_append_finish() is allowed on the + * No operation other than ares_buf_append_finish() is allowed on the * buffer after this request. * * \param[in] buf Initialized buffer object @@ -161,17 +170,17 @@ ares_status_t ares__buf_set_length(ares__buf_t *buf, size_t len); * returned. * \return Pointer to writable buffer or NULL on failure (usage, out of mem) */ -unsigned char *ares__buf_append_start(ares__buf_t *buf, size_t *len); +CARES_EXTERN unsigned char *ares_buf_append_start(ares_buf_t *buf, size_t *len); /*! Finish a dynamic append operation. Called after - * ares__buf_append_start() once desired data is written. + * ares_buf_append_start() once desired data is written. * * \param[in] buf Initialized buffer object. * \param[in] len Length of data written. May be zero to terminate * operation. Must not be greater than returned from - * ares__buf_append_start(). + * ares_buf_append_start(). */ -void ares__buf_append_finish(ares__buf_t *buf, size_t len); +CARES_EXTERN void ares_buf_append_finish(ares_buf_t *buf, size_t len); /*! Write the data provided to the buffer in a hexdump format. * @@ -180,10 +189,11 @@ void ares__buf_append_finish(ares__buf_t *buf, size_t len); * \param[in] len Length of data to hexdump * \return ARES_SUCCESS on success. */ -ares_status_t ares__buf_hexdump(ares__buf_t *buf, const unsigned char *data, - size_t len); +CARES_EXTERN ares_status_t ares_buf_hexdump(ares_buf_t *buf, + const unsigned char *data, + size_t len); -/*! Clean up ares__buf_t and return allocated pointer to unprocessed data. It +/*! Clean up ares_buf_t and return allocated pointer to unprocessed data. It * is the responsibility of the caller to ares_free() the returned buffer. * The passed in buf parameter is invalidated by this call. * @@ -191,9 +201,9 @@ ares_status_t ares__buf_hexdump(ares__buf_t *buf, const unsigned char *data, * \param[out] len Length of data returned * \return pointer to unprocessed data (may be zero length) or NULL on error. */ -unsigned char *ares__buf_finish_bin(ares__buf_t *buf, size_t *len); +CARES_EXTERN unsigned char *ares_buf_finish_bin(ares_buf_t *buf, size_t *len); -/*! Clean up ares__buf_t and return allocated pointer to unprocessed data and +/*! Clean up ares_buf_t and return allocated pointer to unprocessed data and * return it as a string (null terminated). It is the responsibility of the * caller to ares_free() the returned buffer. The passed in buf parameter is * invalidated by this call. @@ -207,7 +217,7 @@ unsigned char *ares__buf_finish_bin(ares__buf_t *buf, size_t *len); * \param[out] len Optional. Length of data returned, or NULL if not needed. * \return pointer to unprocessed data or NULL on error. */ -char *ares__buf_finish_str(ares__buf_t *buf, size_t *len); +CARES_EXTERN char *ares_buf_finish_str(ares_buf_t *buf, size_t *len); /*! Tag a position to save in the buffer in case parsing needs to rollback, * such as if insufficient data is available, but more data may be added in @@ -216,14 +226,14 @@ char *ares__buf_finish_str(ares__buf_t *buf, size_t *len); * * \param[in] buf Initialized buffer object */ -void ares__buf_tag(ares__buf_t *buf); +CARES_EXTERN void ares_buf_tag(ares_buf_t *buf); /*! Rollback to a tagged position. Will automatically clear the tag. * * \param[in] buf Initialized buffer object * \return ARES_SUCCESS or one of the c-ares error codes */ -ares_status_t ares__buf_tag_rollback(ares__buf_t *buf); +CARES_EXTERN ares_status_t ares_buf_tag_rollback(ares_buf_t *buf); /*! Clear the tagged position without rolling back. You should do this any * time a tag is no longer needed as future append operations can reclaim @@ -232,25 +242,26 @@ ares_status_t ares__buf_tag_rollback(ares__buf_t *buf); * \param[in] buf Initialized buffer object * \return ARES_SUCCESS or one of the c-ares error codes */ -ares_status_t ares__buf_tag_clear(ares__buf_t *buf); +CARES_EXTERN ares_status_t ares_buf_tag_clear(ares_buf_t *buf); /*! Fetch the buffer and length of data starting from the tagged position up * to the _current_ position. It will not unset the tagged position. The - * data may be invalidated by any future ares__buf_*() calls. + * data may be invalidated by any future ares_buf_*() calls. * * \param[in] buf Initialized buffer object * \param[out] len Length between tag and current offset in buffer * \return NULL on failure (such as no tag), otherwise pointer to start of * buffer */ -const unsigned char *ares__buf_tag_fetch(const ares__buf_t *buf, size_t *len); +CARES_EXTERN const unsigned char *ares_buf_tag_fetch(const ares_buf_t *buf, + size_t *len); /*! Get the length of the current tag offset to the current position. * * \param[in] buf Initialized buffer object * \return length */ -size_t ares__buf_tag_length(const ares__buf_t *buf); +CARES_EXTERN size_t ares_buf_tag_length(const ares_buf_t *buf); /*! Fetch the bytes starting from the tagged position up to the _current_ * position using the provided buffer. It will not unset the tagged position. @@ -261,23 +272,50 @@ size_t ares__buf_tag_length(const ares__buf_t *buf); * buffer. * \return ARES_SUCCESS if fetched, ARES_EFORMERR if insufficient buffer size */ -ares_status_t ares__buf_tag_fetch_bytes(const ares__buf_t *buf, - unsigned char *bytes, size_t *len); +CARES_EXTERN ares_status_t ares_buf_tag_fetch_bytes(const ares_buf_t *buf, + unsigned char *bytes, + size_t *len); /*! Fetch the bytes starting from the tagged position up to the _current_ * position as a NULL-terminated string using the provided buffer. The data * is validated to be ASCII-printable data. It will not unset the tagged - * poition. + * position. * * \param[in] buf Initialized buffer object * \param[in,out] str Buffer to hold data - * \param[in] len On input, buffer size, on output, bytes place in - * buffer. + * \param[in] len buffer size + * \return ARES_SUCCESS if fetched, ARES_EFORMERR if insufficient buffer size, + * ARES_EBADSTR if not printable ASCII + */ +CARES_EXTERN ares_status_t ares_buf_tag_fetch_string(const ares_buf_t *buf, + char *str, size_t len); + +/*! Fetch the bytes starting from the tagged position up to the _current_ + * position as a NULL-terminated string and placed into a newly allocated + * buffer. The data is validated to be ASCII-printable data. It will not + * unset the tagged position. + * + * \param[in] buf Initialized buffer object + * \param[out] str New buffer to hold output, free with ares_free() + * * \return ARES_SUCCESS if fetched, ARES_EFORMERR if insufficient buffer size, * ARES_EBADSTR if not printable ASCII */ -ares_status_t ares__buf_tag_fetch_string(const ares__buf_t *buf, char *str, - size_t len); +CARES_EXTERN ares_status_t ares_buf_tag_fetch_strdup(const ares_buf_t *buf, + char **str); + +/*! Fetch the bytes starting from the tagged position up to the _current_ + * position as const buffer. Care must be taken to not append or destroy the + * passed in buffer until the newly fetched buffer is no longer needed since + * it points to memory inside the passed in buffer which could be invalidated. + * + * \param[in] buf Initialized buffer object + * \param[out] newbuf New const buffer object, must be destroyed when done. + + * \return ARES_SUCCESS if fetched + */ +CARES_EXTERN ares_status_t ares_buf_tag_fetch_constbuf(const ares_buf_t *buf, + ares_buf_t **newbuf); /*! Consume the given number of bytes without reading them. * @@ -285,7 +323,7 @@ ares_status_t ares__buf_tag_fetch_string(const ares__buf_t *buf, char *str, * \param[in] len Length to consume * \return ARES_SUCCESS or one of the c-ares error codes */ -ares_status_t ares__buf_consume(ares__buf_t *buf, size_t len); +CARES_EXTERN ares_status_t ares_buf_consume(ares_buf_t *buf, size_t len); /*! Fetch a 16bit Big Endian number from the buffer. * @@ -293,7 +331,8 @@ ares_status_t ares__buf_consume(ares__buf_t *buf, size_t len); * \param[out] u16 Buffer to hold 16bit integer * \return ARES_SUCCESS or one of the c-ares error codes */ -ares_status_t ares__buf_fetch_be16(ares__buf_t *buf, unsigned short *u16); +CARES_EXTERN ares_status_t ares_buf_fetch_be16(ares_buf_t *buf, + unsigned short *u16); /*! Fetch a 32bit Big Endian number from the buffer. * @@ -301,7 +340,8 @@ ares_status_t ares__buf_fetch_be16(ares__buf_t *buf, unsigned short *u16); * \param[out] u32 Buffer to hold 32bit integer * \return ARES_SUCCESS or one of the c-ares error codes */ -ares_status_t ares__buf_fetch_be32(ares__buf_t *buf, unsigned int *u32); +CARES_EXTERN ares_status_t ares_buf_fetch_be32(ares_buf_t *buf, + unsigned int *u32); /*! Fetch the requested number of bytes into the provided buffer @@ -311,8 +351,9 @@ ares_status_t ares__buf_fetch_be32(ares__buf_t *buf, unsigned int *u32); * \param[in] len Requested number of bytes (must be > 0) * \return ARES_SUCCESS or one of the c-ares error codes */ -ares_status_t ares__buf_fetch_bytes(ares__buf_t *buf, unsigned char *bytes, - size_t len); +CARES_EXTERN ares_status_t ares_buf_fetch_bytes(ares_buf_t *buf, + unsigned char *bytes, + size_t len); /*! Fetch the requested number of bytes and return a new buffer that must be @@ -326,9 +367,9 @@ ares_status_t ares__buf_fetch_bytes(ares__buf_t *buf, unsigned char *bytes, * \param[out] bytes Pointer passed by reference. Will be allocated. * \return ARES_SUCCESS or one of the c-ares error codes */ -ares_status_t ares__buf_fetch_bytes_dup(ares__buf_t *buf, size_t len, - ares_bool_t null_term, - unsigned char **bytes); +CARES_EXTERN ares_status_t ares_buf_fetch_bytes_dup(ares_buf_t *buf, size_t len, + ares_bool_t null_term, + unsigned char **bytes); /*! Fetch the requested number of bytes and place them into the provided * dest buffer object. @@ -338,19 +379,21 @@ ares_status_t ares__buf_fetch_bytes_dup(ares__buf_t *buf, size_t len, * \param[in] len Requested number of bytes (must be > 0) * \return ARES_SUCCESS or one of the c-ares error codes */ -ares_status_t ares__buf_fetch_bytes_into_buf(ares__buf_t *buf, - ares__buf_t *dest, size_t len); +CARES_EXTERN ares_status_t ares_buf_fetch_bytes_into_buf(ares_buf_t *buf, + ares_buf_t *dest, + size_t len); /*! Fetch the requested number of bytes and return a new buffer that must be * ares_free()'d by the caller. The returned buffer is a null terminated - * string. + * string. The data is validated to be ASCII-printable. * * \param[in] buf Initialized buffer object * \param[in] len Requested number of bytes (must be > 0) * \param[out] str Pointer passed by reference. Will be allocated. * \return ARES_SUCCESS or one of the c-ares error codes */ -ares_status_t ares__buf_fetch_str_dup(ares__buf_t *buf, size_t len, char **str); +CARES_EXTERN ares_status_t ares_buf_fetch_str_dup(ares_buf_t *buf, size_t len, + char **str); /*! Consume whitespace characters (0x09, 0x0B, 0x0C, 0x0D, 0x20, and optionally * 0x0A). @@ -360,8 +403,8 @@ ares_status_t ares__buf_fetch_str_dup(ares__buf_t *buf, size_t len, char **str); * ARES_FALSE otherwise. * \return number of whitespace characters consumed */ -size_t ares__buf_consume_whitespace(ares__buf_t *buf, - ares_bool_t include_linefeed); +CARES_EXTERN size_t ares_buf_consume_whitespace(ares_buf_t *buf, + ares_bool_t include_linefeed); /*! Consume any non-whitespace character (anything other than 0x09, 0x0B, 0x0C, @@ -370,7 +413,7 @@ size_t ares__buf_consume_whitespace(ares__buf_t *buf, * \param[in] buf Initialized buffer object * \return number of characters consumed */ -size_t ares__buf_consume_nonwhitespace(ares__buf_t *buf); +CARES_EXTERN size_t ares_buf_consume_nonwhitespace(ares_buf_t *buf); /*! Consume until a character in the character set provided is reached. Does @@ -382,13 +425,31 @@ size_t ares__buf_consume_nonwhitespace(ares__buf_t *buf); * \param[in] require_charset require we find a character from the charset. * if ARES_FALSE it will simply consume the * rest of the buffer. If ARES_TRUE will return - * 0 if not found. + * SIZE_MAX if not found. * \return number of characters consumed */ -size_t ares__buf_consume_until_charset(ares__buf_t *buf, - const unsigned char *charset, size_t len, - ares_bool_t require_charset); +CARES_EXTERN size_t ares_buf_consume_until_charset(ares_buf_t *buf, + const unsigned char *charset, + size_t len, + ares_bool_t require_charset); + +/*! Consume until a sequence of bytes is encountered. Does not include the + * sequence of characters itself. + * + * \param[in] buf Initialized buffer object + * \param[in] seq sequence of bytes + * \param[in] len length of sequence + * \param[in] require_charset require we find the sequence. + * if ARES_FALSE it will simply consume the + * rest of the buffer. If ARES_TRUE will return + * SIZE_MAX if not found. + * \return number of characters consumed + */ +CARES_EXTERN size_t ares_buf_consume_until_seq(ares_buf_t *buf, + const unsigned char *seq, + size_t len, + ares_bool_t require_seq); /*! Consume while the characters match the characters in the provided set. * @@ -397,8 +458,9 @@ size_t ares__buf_consume_until_charset(ares__buf_t *buf, * \param[in] len length of character set * \return number of characters consumed */ -size_t ares__buf_consume_charset(ares__buf_t *buf, const unsigned char *charset, - size_t len); +CARES_EXTERN size_t ares_buf_consume_charset(ares_buf_t *buf, + const unsigned char *charset, + size_t len); /*! Consume from the current position until the end of the line, and optionally @@ -409,7 +471,8 @@ size_t ares__buf_consume_charset(ares__buf_t *buf, const unsigned char *charset, * ARES_FALSE otherwise. * \return number of characters consumed */ -size_t ares__buf_consume_line(ares__buf_t *buf, ares_bool_t include_linefeed); +CARES_EXTERN size_t ares_buf_consume_line(ares_buf_t *buf, + ares_bool_t include_linefeed); typedef enum { /*! No flags */ @@ -419,9 +482,9 @@ typedef enum { * incompatible with ARES_BUF_SPLIT_LTRIM since the delimiter is always * the first character. */ - ARES_BUF_SPLIT_DONT_CONSUME_DELIMS = 1 << 0, + ARES_BUF_SPLIT_KEEP_DELIMS = 1 << 0, /*! Allow blank sections, by default blank sections are not emitted. If using - * ARES_BUF_SPLIT_DONT_CONSUME_DELIMS, the delimiter is not counted as part + * ARES_BUF_SPLIT_KEEP_DELIMS, the delimiter is not counted as part * of the section */ ARES_BUF_SPLIT_ALLOW_BLANK = 1 << 1, /*! Remove duplicate entries */ @@ -434,7 +497,7 @@ typedef enum { ARES_BUF_SPLIT_RTRIM = 1 << 5, /*! Trim leading and trailing whitespace from buffer */ ARES_BUF_SPLIT_TRIM = (ARES_BUF_SPLIT_LTRIM | ARES_BUF_SPLIT_RTRIM) -} ares__buf_split_t; +} ares_buf_split_t; /*! Split the provided buffer into multiple sub-buffers stored in the variable * pointed to by the linked list. The sub buffers are const buffers pointing @@ -450,17 +513,60 @@ typedef enum { * character in the value. A value of 1 would * have little usefulness and would effectively * ignore the delimiter itself. - * \param[out] list Result. Depending on flags, this may be a - * valid list with no elements. Use - * ares__llist_destroy() to free the memory which - * will also free the contained ares__buf_t - * objects. + * \param[out] arr Result. Depending on flags, this may be a + * valid array with no elements. Use + * ares_array_destroy() to free the memory which + * will also free the contained ares_buf_t * + * objects. Each buf object returned by + * ares_array_at() or similar is a pointer to + * an ares_buf_t * object, meaning you need to + * accept it as "ares_buf_t **" then dereference. + * \return ARES_SUCCESS on success, or error like ARES_ENOMEM. + */ +CARES_EXTERN ares_status_t ares_buf_split( + ares_buf_t *buf, const unsigned char *delims, size_t delims_len, + ares_buf_split_t flags, size_t max_sections, ares_array_t **arr); + +/*! Split the provided buffer into an ares_array_t of C strings. + * + * \param[in] buf Initialized buffer object + * \param[in] delims Possible delimiters + * \param[in] delims_len Length of possible delimiters + * \param[in] flags One more more flags + * \param[in] max_sections Maximum number of sections. Use 0 for + * unlimited. Useful for splitting key/value + * pairs where the delimiter may be a valid + * character in the value. A value of 1 would + * have little usefulness and would effectively + * ignore the delimiter itself. + * \param[out] arr Array of strings. Free using + * ares_array_destroy(). * \return ARES_SUCCESS on success, or error like ARES_ENOMEM. */ -ares_status_t ares__buf_split(ares__buf_t *buf, const unsigned char *delims, - size_t delims_len, ares__buf_split_t flags, - size_t max_sections, ares__llist_t **list); +CARES_EXTERN ares_status_t ares_buf_split_str_array( + ares_buf_t *buf, const unsigned char *delims, size_t delims_len, + ares_buf_split_t flags, size_t max_sections, ares_array_t **arr); +/*! Split the provided buffer into a C array of C strings. + * + * \param[in] buf Initialized buffer object + * \param[in] delims Possible delimiters + * \param[in] delims_len Length of possible delimiters + * \param[in] flags One more more flags + * \param[in] max_sections Maximum number of sections. Use 0 for + * unlimited. Useful for splitting key/value + * pairs where the delimiter may be a valid + * character in the value. A value of 1 would + * have little usefulness and would effectively + * ignore the delimiter itself. + * \param[out] strs Array of strings. Free using + * ares_free_array(strs, nstrs, ares_free) + * \param[out] nstrs Number of elements in the array. + * \return ARES_SUCCESS on success, or error like ARES_ENOMEM. + */ +CARES_EXTERN ares_status_t ares_buf_split_str( + ares_buf_t *buf, const unsigned char *delims, size_t delims_len, + ares_buf_split_t flags, size_t max_sections, char ***strs, size_t *nstrs); /*! Check the unprocessed buffer to see if it begins with the sequence of * characters provided. @@ -470,8 +576,9 @@ ares_status_t ares__buf_split(ares__buf_t *buf, const unsigned char *delims, * \param[in] data_len Length of data to compare. * \return ARES_TRUE on match, ARES_FALSE otherwise. */ -ares_bool_t ares__buf_begins_with(const ares__buf_t *buf, - const unsigned char *data, size_t data_len); +CARES_EXTERN ares_bool_t ares_buf_begins_with(const ares_buf_t *buf, + const unsigned char *data, + size_t data_len); /*! Size of unprocessed remaining data length @@ -479,18 +586,27 @@ ares_bool_t ares__buf_begins_with(const ares__buf_t *buf, * \param[in] buf Initialized buffer object * \return length remaining */ -size_t ares__buf_len(const ares__buf_t *buf); +CARES_EXTERN size_t ares_buf_len(const ares_buf_t *buf); /*! Retrieve a pointer to the currently unprocessed data. Generally this isn't * recommended to be used in practice. The returned pointer may be invalidated - * by any future ares__buf_*() calls. + * by any future ares_buf_*() calls. * * \param[in] buf Initialized buffer object * \param[out] len Length of available data * \return Pointer to buffer of unprocessed data */ -const unsigned char *ares__buf_peek(const ares__buf_t *buf, size_t *len); +CARES_EXTERN const unsigned char *ares_buf_peek(const ares_buf_t *buf, + size_t *len); +/*! Retrieve the next byte in the buffer without moving forward. + * + * \param[in] buf Initialized buffer object + * \param[out] b Single byte + * \return \return ARES_SUCCESS on success, or error + */ +CARES_EXTERN ares_status_t ares_buf_peek_byte(const ares_buf_t *buf, + unsigned char *b); /*! Wipe any processed data from the beginning of the buffer. This will * move any remaining data to the front of the internally allocated buffer. @@ -503,46 +619,46 @@ const unsigned char *ares__buf_peek(const ares__buf_t *buf, size_t *len); * * It may be useful to call in order to ensure the current message being * processed is in the beginning of the buffer if there is an intent to use - * ares__buf_set_position() and ares__buf_get_position() as may be necessary + * ares_buf_set_position() and ares_buf_get_position() as may be necessary * when processing DNS compressed names. * * If there is an active tag, it will NOT clear the tag, it will use the tag * as the start of the unprocessed data rather than the current offset. If - * a prior tag is no longer needed, may be wise to call ares__buf_tag_clear(). + * a prior tag is no longer needed, may be wise to call ares_buf_tag_clear(). * * \param[in] buf Initialized buffer object */ -void ares__buf_reclaim(ares__buf_t *buf); +CARES_EXTERN void ares_buf_reclaim(ares_buf_t *buf); /*! Set the current offset within the internal buffer. * - * Typically this should not be used, if possible, use the ares__buf_tag*() + * Typically this should not be used, if possible, use the ares_buf_tag*() * operations instead. * * One exception is DNS name compression which may backwards reference to * an index in the message. It may be necessary in such a case to call - * ares__buf_reclaim() if using a dynamic (non-const) buffer before processing + * ares_buf_reclaim() if using a dynamic (non-const) buffer before processing * such a message. * * \param[in] buf Initialized buffer object * \param[in] idx Index to set position * \return ARES_SUCCESS if valid index */ -ares_status_t ares__buf_set_position(ares__buf_t *buf, size_t idx); +CARES_EXTERN ares_status_t ares_buf_set_position(ares_buf_t *buf, size_t idx); /*! Get the current offset within the internal buffer. * - * Typically this should not be used, if possible, use the ares__buf_tag*() + * Typically this should not be used, if possible, use the ares_buf_tag*() * operations instead. * * This can be used to get the current position, useful for saving if a - * jump via ares__buf_set_position() is performed and need to restore the + * jump via ares_buf_set_position() is performed and need to restore the * current position for future operations. * * \param[in] buf Initialized buffer object * \return index of current position */ -size_t ares__buf_get_position(const ares__buf_t *buf); +CARES_EXTERN size_t ares_buf_get_position(const ares_buf_t *buf); /*! Parse a character-string as defined in RFC1035, as a null-terminated * string. @@ -556,29 +672,9 @@ size_t ares__buf_get_position(const ares__buf_t *buf); * ares_free()'d by the caller. * \return ARES_SUCCESS on success */ -ares_status_t ares__buf_parse_dns_str(ares__buf_t *buf, size_t remaining_len, - char **name); - -/*! Parse an array of character strings as defined in RFC1035, as binary, - * however, for convenience this does guarantee a NULL terminator (that is - * not included in the length for each value). - * - * \param[in] buf initialized buffer object - * \param[in] remaining_len maximum length that should be used for - * parsing the string, this is often less than - * the remaining buffer and is based on the RR - * record length. - * \param[out] strs Pointer passed by reference to be filled in - * with - * the array of values. - * \param[out] validate_printable Validate the strings contain only printable - * data. - * \return ARES_SUCCESS on success - */ -ares_status_t ares__buf_parse_dns_abinstr(ares__buf_t *buf, - size_t remaining_len, - ares__dns_multistring_t **strs, - ares_bool_t validate_printable); +CARES_EXTERN ares_status_t ares_buf_parse_dns_str(ares_buf_t *buf, + size_t remaining_len, + char **name); /*! Parse a character-string as defined in RFC1035, as binary, however for * convenience this does guarantee a NULL terminator (that is not included @@ -594,8 +690,10 @@ ares_status_t ares__buf_parse_dns_abinstr(ares__buf_t *buf, * \param[out] bin_len Length of returned string. * \return ARES_SUCCESS on success */ -ares_status_t ares__buf_parse_dns_binstr(ares__buf_t *buf, size_t remaining_len, - unsigned char **bin, size_t *bin_len); +CARES_EXTERN ares_status_t ares_buf_parse_dns_binstr(ares_buf_t *buf, + size_t remaining_len, + unsigned char **bin, + size_t *bin_len); /*! Load data from specified file path into provided buffer. The entire file * is loaded into memory. @@ -606,7 +704,8 @@ ares_status_t ares__buf_parse_dns_binstr(ares__buf_t *buf, size_t remaining_len, * \return ARES_ENOTFOUND if file not found, ARES_EFILE if issues reading * file, ARES_ENOMEM if out of memory, ARES_SUCCESS on success. */ -ares_status_t ares__buf_load_file(const char *filename, ares__buf_t *buf); +CARES_EXTERN ares_status_t ares_buf_load_file(const char *filename, + ares_buf_t *buf); /*! @} */ diff --git a/deps/cares/src/lib/dsa/ares__htable_asvp.h b/deps/cares/src/lib/include/ares_htable_asvp.h similarity index 72% rename from deps/cares/src/lib/dsa/ares__htable_asvp.h rename to deps/cares/src/lib/include/ares_htable_asvp.h index 49a766d023091e..89a99fc9eec541 100644 --- a/deps/cares/src/lib/dsa/ares__htable_asvp.h +++ b/deps/cares/src/lib/include/ares_htable_asvp.h @@ -26,10 +26,10 @@ #ifndef __ARES__HTABLE_ASVP_H #define __ARES__HTABLE_ASVP_H -/*! \addtogroup ares__htable_asvp HashTable with ares_socket_t Key and +/*! \addtogroup ares_htable_asvp HashTable with ares_socket_t Key and * void pointer Value * - * This data structure wraps the base ares__htable data structure in order to + * This data structure wraps the base ares_htable data structure in order to * split the key and value data types as ares_socket_t and void pointer, * respectively. * @@ -41,23 +41,23 @@ * @{ */ -struct ares__htable_asvp; +struct ares_htable_asvp; /*! Opaque data type for ares_socket_t key, void pointer hash table * implementation */ -typedef struct ares__htable_asvp ares__htable_asvp_t; +typedef struct ares_htable_asvp ares_htable_asvp_t; /*! Callback to free value stored in hashtable * * \param[in] val user-supplied value */ -typedef void (*ares__htable_asvp_val_free_t)(void *val); +typedef void (*ares_htable_asvp_val_free_t)(void *val); /*! Destroy hashtable * * \param[in] htable Initialized hashtable */ -void ares__htable_asvp_destroy(ares__htable_asvp_t *htable); +CARES_EXTERN void ares_htable_asvp_destroy(ares_htable_asvp_t *htable); /*! Create size_t key, void pointer value hash table * @@ -65,8 +65,8 @@ void ares__htable_asvp_destroy(ares__htable_asvp_t *htable); * NULL it is expected the caller will clean up any user * supplied values. */ -ares__htable_asvp_t * - ares__htable_asvp_create(ares__htable_asvp_val_free_t val_free); +CARES_EXTERN ares_htable_asvp_t * + ares_htable_asvp_create(ares_htable_asvp_val_free_t val_free); /*! Retrieve an array of keys from the hashtable. * @@ -74,8 +74,8 @@ ares__htable_asvp_t * * \param[out] num Count of returned keys * \return Array of keys in the hashtable. Must be free'd with ares_free(). */ -ares_socket_t *ares__htable_asvp_keys(const ares__htable_asvp_t *htable, - size_t *num); +CARES_EXTERN ares_socket_t * + ares_htable_asvp_keys(const ares_htable_asvp_t *htable, size_t *num); /*! Insert key/value into hash table @@ -85,8 +85,8 @@ ares_socket_t *ares__htable_asvp_keys(const ares__htable_asvp_t *htable, * \param[in] val value to store (takes ownership). May be NULL. * \return ARES_TRUE on success, ARES_FALSE on out of memory or misuse */ -ares_bool_t ares__htable_asvp_insert(ares__htable_asvp_t *htable, - ares_socket_t key, void *val); +CARES_EXTERN ares_bool_t ares_htable_asvp_insert(ares_htable_asvp_t *htable, + ares_socket_t key, void *val); /*! Retrieve value from hashtable based on key * @@ -95,19 +95,19 @@ ares_bool_t ares__htable_asvp_insert(ares__htable_asvp_t *htable, * \param[out] val Optional. Pointer to store value. * \return ARES_TRUE on success, ARES_FALSE on failure */ -ares_bool_t ares__htable_asvp_get(const ares__htable_asvp_t *htable, - ares_socket_t key, void **val); +CARES_EXTERN ares_bool_t ares_htable_asvp_get(const ares_htable_asvp_t *htable, + ares_socket_t key, void **val); /*! Retrieve value from hashtable directly as return value. Caveat to this - * function over ares__htable_asvp_get() is that if a NULL value is stored + * function over ares_htable_asvp_get() is that if a NULL value is stored * you cannot determine if the key is not found or the value is NULL. * * \param[in] htable Initialized hash table * \param[in] key key to use to search * \return value associated with key in hashtable or NULL */ -void *ares__htable_asvp_get_direct(const ares__htable_asvp_t *htable, - ares_socket_t key); +CARES_EXTERN void *ares_htable_asvp_get_direct(const ares_htable_asvp_t *htable, + ares_socket_t key); /*! Remove a value from the hashtable by key * @@ -115,15 +115,15 @@ void *ares__htable_asvp_get_direct(const ares__htable_asvp_t *htable, * \param[in] key key to use to search * \return ARES_TRUE if found, ARES_FALSE if not found */ -ares_bool_t ares__htable_asvp_remove(ares__htable_asvp_t *htable, - ares_socket_t key); +CARES_EXTERN ares_bool_t ares_htable_asvp_remove(ares_htable_asvp_t *htable, + ares_socket_t key); /*! Retrieve the number of keys stored in the hash table * * \param[in] htable Initialized hash table * \return count */ -size_t ares__htable_asvp_num_keys(const ares__htable_asvp_t *htable); +CARES_EXTERN size_t ares_htable_asvp_num_keys(const ares_htable_asvp_t *htable); /*! @} */ diff --git a/deps/cares/src/lib/include/ares_htable_dict.h b/deps/cares/src/lib/include/ares_htable_dict.h new file mode 100644 index 00000000000000..cb6f1f048ca023 --- /dev/null +++ b/deps/cares/src/lib/include/ares_htable_dict.h @@ -0,0 +1,123 @@ +/* MIT License + * + * Copyright (c) 2024 Brad House + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * SPDX-License-Identifier: MIT + */ +#ifndef __ARES__HTABLE_DICT_H +#define __ARES__HTABLE_DICT_H + +/*! \addtogroup ares_htable_dict HashTable with case-insensitive string Key and + * string value + * + * This data structure wraps the base ares_htable data structure in order to + * split the key and value data types as string and string, respectively. + * + * Average time complexity: + * - Insert: O(1) + * - Search: O(1) + * - Delete: O(1) + * + * @{ + */ + +struct ares_htable_dict; + +/*! Opaque data type for string key, string value hash table + * implementation */ +typedef struct ares_htable_dict ares_htable_dict_t; + +/*! Destroy hashtable + * + * \param[in] htable Initialized hashtable + */ +CARES_EXTERN void ares_htable_dict_destroy(ares_htable_dict_t *htable); + +/*! Create void pointer key, string value hash table + * + */ +CARES_EXTERN ares_htable_dict_t *ares_htable_dict_create(void); + +/*! Insert key/value into hash table + * + * \param[in] htable Initialized hash table + * \param[in] key key to associate with value + * \param[in] val value to store (duplicates). + * \return ARES_TRUE on success, ARES_FALSE on failure or out of memory + */ +CARES_EXTERN ares_bool_t ares_htable_dict_insert(ares_htable_dict_t *htable, + const char *key, + const char *val); + +/*! Retrieve value from hashtable based on key + * + * \param[in] htable Initialized hash table + * \param[in] key key to use to search + * \param[out] val Optional. Pointer to store value. + * \return ARES_TRUE on success, ARES_FALSE on failure + */ +CARES_EXTERN ares_bool_t ares_htable_dict_get(const ares_htable_dict_t *htable, + const char *key, + const char **val); + +/*! Retrieve value from hashtable directly as return value. Caveat to this + * function over ares_htable_dict_get() is that if a NULL value is stored + * you cannot determine if the key is not found or the value is NULL. + * + * \param[in] htable Initialized hash table + * \param[in] key key to use to search + * \return value associated with key in hashtable or NULL + */ +CARES_EXTERN const char * + ares_htable_dict_get_direct(const ares_htable_dict_t *htable, + const char *key); + +/*! Remove a value from the hashtable by key + * + * \param[in] htable Initialized hash table + * \param[in] key key to use to search + * \return ARES_TRUE if found, ARES_FALSE if not + */ +CARES_EXTERN ares_bool_t ares_htable_dict_remove(ares_htable_dict_t *htable, + const char *key); + +/*! Retrieve the number of keys stored in the hash table + * + * \param[in] htable Initialized hash table + * \return count + */ +CARES_EXTERN size_t ares_htable_dict_num_keys(const ares_htable_dict_t *htable); + +/*! Retrieve an array of keys from the hashtable. + * + * \param[in] htable Initialized hashtable + * \param[out] num Count of returned keys + * \return Array of keys in the hashtable. Must be free'd with + * ares_free_array(strs, num, ares_free); + */ +CARES_EXTERN char **ares_htable_dict_keys(const ares_htable_dict_t *htable, + size_t *num); + + +/*! @} */ + +#endif /* __ARES__HTABLE_DICT_H */ diff --git a/deps/cares/src/lib/dsa/ares__htable_strvp.h b/deps/cares/src/lib/include/ares_htable_strvp.h similarity index 66% rename from deps/cares/src/lib/dsa/ares__htable_strvp.h rename to deps/cares/src/lib/include/ares_htable_strvp.h index 878c71869a92dc..eaaf6d3be0d188 100644 --- a/deps/cares/src/lib/dsa/ares__htable_strvp.h +++ b/deps/cares/src/lib/include/ares_htable_strvp.h @@ -26,10 +26,10 @@ #ifndef __ARES__HTABLE_STRVP_H #define __ARES__HTABLE_STRVP_H -/*! \addtogroup ares__htable_strvp HashTable with string Key and void pointer +/*! \addtogroup ares_htable_strvp HashTable with string Key and void pointer * Value * - * This data structure wraps the base ares__htable data structure in order to + * This data structure wraps the base ares_htable data structure in order to * split the key and value data types as string and void pointer, respectively. * * Average time complexity: @@ -40,22 +40,22 @@ * @{ */ -struct ares__htable_strvp; +struct ares_htable_strvp; /*! Opaque data type for size_t key, void pointer hash table implementation */ -typedef struct ares__htable_strvp ares__htable_strvp_t; +typedef struct ares_htable_strvp ares_htable_strvp_t; /*! Callback to free value stored in hashtable * * \param[in] val user-supplied value */ -typedef void (*ares__htable_strvp_val_free_t)(void *val); +typedef void (*ares_htable_strvp_val_free_t)(void *val); /*! Destroy hashtable * * \param[in] htable Initialized hashtable */ -void ares__htable_strvp_destroy(ares__htable_strvp_t *htable); +CARES_EXTERN void ares_htable_strvp_destroy(ares_htable_strvp_t *htable); /*! Create string, void pointer value hash table * @@ -63,8 +63,8 @@ void ares__htable_strvp_destroy(ares__htable_strvp_t *htable); * NULL it is expected the caller will clean up any user * supplied values. */ -ares__htable_strvp_t * - ares__htable_strvp_create(ares__htable_strvp_val_free_t val_free); +CARES_EXTERN ares_htable_strvp_t * + ares_htable_strvp_create(ares_htable_strvp_val_free_t val_free); /*! Insert key/value into hash table * @@ -73,8 +73,8 @@ ares__htable_strvp_t * * \param[in] val value to store (takes ownership). May be NULL. * \return ARES_TRUE on success, ARES_FALSE on failure or out of memory */ -ares_bool_t ares__htable_strvp_insert(ares__htable_strvp_t *htable, - const char *key, void *val); +CARES_EXTERN ares_bool_t ares_htable_strvp_insert(ares_htable_strvp_t *htable, + const char *key, void *val); /*! Retrieve value from hashtable based on key * @@ -83,19 +83,20 @@ ares_bool_t ares__htable_strvp_insert(ares__htable_strvp_t *htable, * \param[out] val Optional. Pointer to store value. * \return ARES_TRUE on success, ARES_FALSE on failure */ -ares_bool_t ares__htable_strvp_get(const ares__htable_strvp_t *htable, - const char *key, void **val); +CARES_EXTERN ares_bool_t ares_htable_strvp_get( + const ares_htable_strvp_t *htable, const char *key, void **val); /*! Retrieve value from hashtable directly as return value. Caveat to this - * function over ares__htable_strvp_get() is that if a NULL value is stored + * function over ares_htable_strvp_get() is that if a NULL value is stored * you cannot determine if the key is not found or the value is NULL. * * \param[in] htable Initialized hash table * \param[in] key key to use to search * \return value associated with key in hashtable or NULL */ -void *ares__htable_strvp_get_direct(const ares__htable_strvp_t *htable, - const char *key); +CARES_EXTERN void * + ares_htable_strvp_get_direct(const ares_htable_strvp_t *htable, + const char *key); /*! Remove a value from the hashtable by key * @@ -103,15 +104,26 @@ void *ares__htable_strvp_get_direct(const ares__htable_strvp_t *htable, * \param[in] key key to use to search * \return ARES_TRUE if found, ARES_FALSE if not */ -ares_bool_t ares__htable_strvp_remove(ares__htable_strvp_t *htable, - const char *key); +CARES_EXTERN ares_bool_t ares_htable_strvp_remove(ares_htable_strvp_t *htable, + const char *key); + +/*! Remove the value from the hashtable, and return the value instead of + * calling the val_free passed to ares_htable_strvp_create(). + * + * \param[in] htable Initialized hash table + * \param[in] key key to use to search + * \return value in hashtable or NULL on error + */ +CARES_EXTERN void *ares_htable_strvp_claim(ares_htable_strvp_t *htable, + const char *key); /*! Retrieve the number of keys stored in the hash table * * \param[in] htable Initialized hash table * \return count */ -size_t ares__htable_strvp_num_keys(const ares__htable_strvp_t *htable); +CARES_EXTERN size_t + ares_htable_strvp_num_keys(const ares_htable_strvp_t *htable); /*! @} */ diff --git a/deps/cares/src/lib/dsa/ares__htable_szvp.h b/deps/cares/src/lib/include/ares_htable_szvp.h similarity index 72% rename from deps/cares/src/lib/dsa/ares__htable_szvp.h rename to deps/cares/src/lib/include/ares_htable_szvp.h index 62b1776be92b5b..927b9a5ec9f780 100644 --- a/deps/cares/src/lib/dsa/ares__htable_szvp.h +++ b/deps/cares/src/lib/include/ares_htable_szvp.h @@ -26,10 +26,10 @@ #ifndef __ARES__HTABLE_STVP_H #define __ARES__HTABLE_STVP_H -/*! \addtogroup ares__htable_szvp HashTable with size_t Key and void pointer +/*! \addtogroup ares_htable_szvp HashTable with size_t Key and void pointer * Value * - * This data structure wraps the base ares__htable data structure in order to + * This data structure wraps the base ares_htable data structure in order to * split the key and value data types as size_t and void pointer, respectively. * * Average time complexity: @@ -40,22 +40,22 @@ * @{ */ -struct ares__htable_szvp; +struct ares_htable_szvp; /*! Opaque data type for size_t key, void pointer hash table implementation */ -typedef struct ares__htable_szvp ares__htable_szvp_t; +typedef struct ares_htable_szvp ares_htable_szvp_t; /*! Callback to free value stored in hashtable * * \param[in] val user-supplied value */ -typedef void (*ares__htable_szvp_val_free_t)(void *val); +typedef void (*ares_htable_szvp_val_free_t)(void *val); /*! Destroy hashtable * * \param[in] htable Initialized hashtable */ -void ares__htable_szvp_destroy(ares__htable_szvp_t *htable); +CARES_EXTERN void ares_htable_szvp_destroy(ares_htable_szvp_t *htable); /*! Create size_t key, void pointer value hash table * @@ -63,8 +63,8 @@ void ares__htable_szvp_destroy(ares__htable_szvp_t *htable); * NULL it is expected the caller will clean up any user * supplied values. */ -ares__htable_szvp_t * - ares__htable_szvp_create(ares__htable_szvp_val_free_t val_free); +CARES_EXTERN ares_htable_szvp_t * + ares_htable_szvp_create(ares_htable_szvp_val_free_t val_free); /*! Insert key/value into hash table * @@ -73,8 +73,8 @@ ares__htable_szvp_t * * \param[in] val value to store (takes ownership). May be NULL. * \return ARES_TRUE on success, ARES_FALSE on failure or out of memory */ -ares_bool_t ares__htable_szvp_insert(ares__htable_szvp_t *htable, size_t key, - void *val); +CARES_EXTERN ares_bool_t ares_htable_szvp_insert(ares_htable_szvp_t *htable, + size_t key, void *val); /*! Retrieve value from hashtable based on key * @@ -83,19 +83,19 @@ ares_bool_t ares__htable_szvp_insert(ares__htable_szvp_t *htable, size_t key, * \param[out] val Optional. Pointer to store value. * \return ARES_TRUE on success, ARES_FALSE on failure */ -ares_bool_t ares__htable_szvp_get(const ares__htable_szvp_t *htable, size_t key, - void **val); +CARES_EXTERN ares_bool_t ares_htable_szvp_get(const ares_htable_szvp_t *htable, + size_t key, void **val); /*! Retrieve value from hashtable directly as return value. Caveat to this - * function over ares__htable_szvp_get() is that if a NULL value is stored + * function over ares_htable_szvp_get() is that if a NULL value is stored * you cannot determine if the key is not found or the value is NULL. * * \param[in] htable Initialized hash table * \param[in] key key to use to search * \return value associated with key in hashtable or NULL */ -void *ares__htable_szvp_get_direct(const ares__htable_szvp_t *htable, - size_t key); +CARES_EXTERN void *ares_htable_szvp_get_direct(const ares_htable_szvp_t *htable, + size_t key); /*! Remove a value from the hashtable by key * @@ -103,14 +103,15 @@ void *ares__htable_szvp_get_direct(const ares__htable_szvp_t *htable, * \param[in] key key to use to search * \return ARES_TRUE if found, ARES_FALSE if not */ -ares_bool_t ares__htable_szvp_remove(ares__htable_szvp_t *htable, size_t key); +CARES_EXTERN ares_bool_t ares_htable_szvp_remove(ares_htable_szvp_t *htable, + size_t key); /*! Retrieve the number of keys stored in the hash table * * \param[in] htable Initialized hash table * \return count */ -size_t ares__htable_szvp_num_keys(const ares__htable_szvp_t *htable); +CARES_EXTERN size_t ares_htable_szvp_num_keys(const ares_htable_szvp_t *htable); /*! @} */ diff --git a/deps/cares/src/lib/include/ares_htable_vpstr.h b/deps/cares/src/lib/include/ares_htable_vpstr.h new file mode 100644 index 00000000000000..9f51b877452b72 --- /dev/null +++ b/deps/cares/src/lib/include/ares_htable_vpstr.h @@ -0,0 +1,111 @@ +/* MIT License + * + * Copyright (c) 2024 Brad House + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * SPDX-License-Identifier: MIT + */ +#ifndef __ARES__HTABLE_VPSTR_H +#define __ARES__HTABLE_VPSTR_H + +/*! \addtogroup ares_htable_vpstr HashTable with void pointer Key and string + * value + * + * This data structure wraps the base ares_htable data structure in order to + * split the key and value data types as void pointer and string, respectively. + * + * Average time complexity: + * - Insert: O(1) + * - Search: O(1) + * - Delete: O(1) + * + * @{ + */ + +struct ares_htable_vpstr; + +/*! Opaque data type for void pointer key, string value hash table + * implementation */ +typedef struct ares_htable_vpstr ares_htable_vpstr_t; + +/*! Destroy hashtable + * + * \param[in] htable Initialized hashtable + */ +CARES_EXTERN void ares_htable_vpstr_destroy(ares_htable_vpstr_t *htable); + +/*! Create void pointer key, string value hash table + * + */ +CARES_EXTERN ares_htable_vpstr_t *ares_htable_vpstr_create(void); + +/*! Insert key/value into hash table + * + * \param[in] htable Initialized hash table + * \param[in] key key to associate with value + * \param[in] val value to store (duplicates). + * \return ARES_TRUE on success, ARES_FALSE on failure or out of memory + */ +CARES_EXTERN ares_bool_t ares_htable_vpstr_insert(ares_htable_vpstr_t *htable, + void *key, const char *val); + +/*! Retrieve value from hashtable based on key + * + * \param[in] htable Initialized hash table + * \param[in] key key to use to search + * \param[out] val Optional. Pointer to store value. + * \return ARES_TRUE on success, ARES_FALSE on failure + */ +CARES_EXTERN ares_bool_t ares_htable_vpstr_get( + const ares_htable_vpstr_t *htable, const void *key, const char **val); + +/*! Retrieve value from hashtable directly as return value. Caveat to this + * function over ares_htable_vpstr_get() is that if a NULL value is stored + * you cannot determine if the key is not found or the value is NULL. + * + * \param[in] htable Initialized hash table + * \param[in] key key to use to search + * \return value associated with key in hashtable or NULL + */ +CARES_EXTERN const char * + ares_htable_vpstr_get_direct(const ares_htable_vpstr_t *htable, + const void *key); + +/*! Remove a value from the hashtable by key + * + * \param[in] htable Initialized hash table + * \param[in] key key to use to search + * \return ARES_TRUE if found, ARES_FALSE if not + */ +CARES_EXTERN ares_bool_t ares_htable_vpstr_remove(ares_htable_vpstr_t *htable, + const void *key); + +/*! Retrieve the number of keys stored in the hash table + * + * \param[in] htable Initialized hash table + * \return count + */ +CARES_EXTERN size_t + ares_htable_vpstr_num_keys(const ares_htable_vpstr_t *htable); + +/*! @} */ + +#endif /* __ARES__HTABLE_VPSTR_H */ diff --git a/deps/cares/src/lib/dsa/ares__htable_vpvp.h b/deps/cares/src/lib/include/ares_htable_vpvp.h similarity index 72% rename from deps/cares/src/lib/dsa/ares__htable_vpvp.h rename to deps/cares/src/lib/include/ares_htable_vpvp.h index 1e0c750d862c64..1ebe6145765793 100644 --- a/deps/cares/src/lib/dsa/ares__htable_vpvp.h +++ b/deps/cares/src/lib/include/ares_htable_vpvp.h @@ -26,10 +26,10 @@ #ifndef __ARES__HTABLE_VPVP_H #define __ARES__HTABLE_VPVP_H -/*! \addtogroup ares__htable_vpvp HashTable with void pointer Key and void +/*! \addtogroup ares_htable_vpvp HashTable with void pointer Key and void * pointer Value * - * This data structure wraps the base ares__htable data structure in order to + * This data structure wraps the base ares_htable data structure in order to * split the key and value data types as size_t and void pointer, respectively. * * Average time complexity: @@ -40,28 +40,28 @@ * @{ */ -struct ares__htable_vpvp; +struct ares_htable_vpvp; /*! Opaque data type for size_t key, void pointer hash table implementation */ -typedef struct ares__htable_vpvp ares__htable_vpvp_t; +typedef struct ares_htable_vpvp ares_htable_vpvp_t; /*! Callback to free key stored in hashtable * * \param[in] key user-supplied key */ -typedef void (*ares__htable_vpvp_key_free_t)(void *key); +typedef void (*ares_htable_vpvp_key_free_t)(void *key); /*! Callback to free value stored in hashtable * * \param[in] val user-supplied value */ -typedef void (*ares__htable_vpvp_val_free_t)(void *val); +typedef void (*ares_htable_vpvp_val_free_t)(void *val); /*! Destroy hashtable * * \param[in] htable Initialized hashtable */ -void ares__htable_vpvp_destroy(ares__htable_vpvp_t *htable); +CARES_EXTERN void ares_htable_vpvp_destroy(ares_htable_vpvp_t *htable); /*! Create size_t key, void pointer value hash table * @@ -72,9 +72,9 @@ void ares__htable_vpvp_destroy(ares__htable_vpvp_t *htable); * NULL it is expected the caller will clean up any user * supplied values. */ -ares__htable_vpvp_t * - ares__htable_vpvp_create(ares__htable_vpvp_key_free_t key_free, - ares__htable_vpvp_val_free_t val_free); +CARES_EXTERN ares_htable_vpvp_t * + ares_htable_vpvp_create(ares_htable_vpvp_key_free_t key_free, + ares_htable_vpvp_val_free_t val_free); /*! Insert key/value into hash table * @@ -83,8 +83,8 @@ ares__htable_vpvp_t * * \param[in] val value to store (takes ownership). May be NULL. * \return ARES_TRUE on success, ARES_FALSE on failure or out of memory */ -ares_bool_t ares__htable_vpvp_insert(ares__htable_vpvp_t *htable, void *key, - void *val); +CARES_EXTERN ares_bool_t ares_htable_vpvp_insert(ares_htable_vpvp_t *htable, + void *key, void *val); /*! Retrieve value from hashtable based on key * @@ -93,19 +93,19 @@ ares_bool_t ares__htable_vpvp_insert(ares__htable_vpvp_t *htable, void *key, * \param[out] val Optional. Pointer to store value. * \return ARES_TRUE on success, ARES_FALSE on failure */ -ares_bool_t ares__htable_vpvp_get(const ares__htable_vpvp_t *htable, - const void *key, void **val); +CARES_EXTERN ares_bool_t ares_htable_vpvp_get(const ares_htable_vpvp_t *htable, + const void *key, void **val); /*! Retrieve value from hashtable directly as return value. Caveat to this - * function over ares__htable_vpvp_get() is that if a NULL value is stored + * function over ares_htable_vpvp_get() is that if a NULL value is stored * you cannot determine if the key is not found or the value is NULL. * * \param[in] htable Initialized hash table * \param[in] key key to use to search * \return value associated with key in hashtable or NULL */ -void *ares__htable_vpvp_get_direct(const ares__htable_vpvp_t *htable, - const void *key); +CARES_EXTERN void *ares_htable_vpvp_get_direct(const ares_htable_vpvp_t *htable, + const void *key); /*! Remove a value from the hashtable by key * @@ -113,15 +113,15 @@ void *ares__htable_vpvp_get_direct(const ares__htable_vpvp_t *htable, * \param[in] key key to use to search * \return ARES_TRUE if found, ARES_FALSE if not */ -ares_bool_t ares__htable_vpvp_remove(ares__htable_vpvp_t *htable, - const void *key); +CARES_EXTERN ares_bool_t ares_htable_vpvp_remove(ares_htable_vpvp_t *htable, + const void *key); /*! Retrieve the number of keys stored in the hash table * * \param[in] htable Initialized hash table * \return count */ -size_t ares__htable_vpvp_num_keys(const ares__htable_vpvp_t *htable); +CARES_EXTERN size_t ares_htable_vpvp_num_keys(const ares_htable_vpvp_t *htable); /*! @} */ diff --git a/deps/cares/src/lib/dsa/ares__llist.h b/deps/cares/src/lib/include/ares_llist.h similarity index 68% rename from deps/cares/src/lib/dsa/ares__llist.h rename to deps/cares/src/lib/include/ares_llist.h index 213f54134bcb55..6aa0c78370401f 100644 --- a/deps/cares/src/lib/dsa/ares__llist.h +++ b/deps/cares/src/lib/include/ares_llist.h @@ -26,7 +26,7 @@ #ifndef __ARES__LLIST_H #define __ARES__LLIST_H -/*! \addtogroup ares__llist LinkedList Data Structure +/*! \addtogroup ares_llist LinkedList Data Structure * * This is a doubly-linked list data structure. * @@ -38,28 +38,28 @@ * @{ */ -struct ares__llist; +struct ares_llist; /*! Opaque data structure for linked list */ -typedef struct ares__llist ares__llist_t; +typedef struct ares_llist ares_llist_t; -struct ares__llist_node; +struct ares_llist_node; /*! Opaque data structure for a node in a linked list */ -typedef struct ares__llist_node ares__llist_node_t; +typedef struct ares_llist_node ares_llist_node_t; /*! Callback to free user-defined node data * * \param[in] data user supplied data */ -typedef void (*ares__llist_destructor_t)(void *data); +typedef void (*ares_llist_destructor_t)(void *data); /*! Create a linked list object * * \param[in] destruct Optional. Destructor to call on all removed nodes * \return linked list object or NULL on out of memory */ -ares__llist_t *ares__llist_create(ares__llist_destructor_t destruct); +CARES_EXTERN ares_llist_t *ares_llist_create(ares_llist_destructor_t destruct); /*! Replace destructor for linked list nodes. Typically this is used * when wanting to disable the destructor by using NULL. @@ -67,8 +67,9 @@ ares__llist_t *ares__llist_create(ares__llist_destructor_t destruct); * \param[in] list Initialized linked list object * \param[in] destruct replacement destructor, NULL is allowed */ -void ares__llist_replace_destructor(ares__llist_t *list, - ares__llist_destructor_t destruct); +CARES_EXTERN void + ares_llist_replace_destructor(ares_llist_t *list, + ares_llist_destructor_t destruct); /*! Insert value as the first node in the linked list * @@ -77,7 +78,8 @@ void ares__llist_replace_destructor(ares__llist_t *list * \return node object referencing place in list, or null if out of memory or * misuse */ -ares__llist_node_t *ares__llist_insert_first(ares__llist_t *list, void *val); +CARES_EXTERN ares_llist_node_t *ares_llist_insert_first(ares_llist_t *list, + void *val); /*! Insert value as the last node in the linked list * @@ -86,7 +88,8 @@ ares__llist_node_t *ares__llist_insert_first(ares__llist_t *list, void *val); * \return node object referencing place in list, or null if out of memory or * misuse */ -ares__llist_node_t *ares__llist_insert_last(ares__llist_t *list, void *val); +CARES_EXTERN ares_llist_node_t *ares_llist_insert_last(ares_llist_t *list, + void *val); /*! Insert value before specified node in the linked list * @@ -95,8 +98,8 @@ ares__llist_node_t *ares__llist_insert_last(ares__llist_t *list, void *val); * \return node object referencing place in list, or null if out of memory or * misuse */ -ares__llist_node_t *ares__llist_insert_before(ares__llist_node_t *node, - void *val); +CARES_EXTERN ares_llist_node_t * + ares_llist_insert_before(ares_llist_node_t *node, void *val); /*! Insert value after specified node in the linked list * @@ -105,22 +108,22 @@ ares__llist_node_t *ares__llist_insert_before(ares__llist_node_t *node, * \return node object referencing place in list, or null if out of memory or * misuse */ -ares__llist_node_t *ares__llist_insert_after(ares__llist_node_t *node, - void *val); +CARES_EXTERN ares_llist_node_t *ares_llist_insert_after(ares_llist_node_t *node, + void *val); /*! Obtain first node in list * * \param[in] list Initialized list object * \return first node in list or NULL if none */ -ares__llist_node_t *ares__llist_node_first(ares__llist_t *list); +CARES_EXTERN ares_llist_node_t *ares_llist_node_first(ares_llist_t *list); /*! Obtain last node in list * * \param[in] list Initialized list object * \return last node in list or NULL if none */ -ares__llist_node_t *ares__llist_node_last(ares__llist_t *list); +CARES_EXTERN ares_llist_node_t *ares_llist_node_last(ares_llist_t *list); /*! Obtain a node based on its index. This is an O(n) operation. * @@ -128,21 +131,22 @@ ares__llist_node_t *ares__llist_node_last(ares__llist_t *list); * \param[in] idx Index of node to retrieve * \return node at index or NULL if invalid index */ -ares__llist_node_t *ares__llist_node_idx(ares__llist_t *list, size_t idx); +CARES_EXTERN ares_llist_node_t *ares_llist_node_idx(ares_llist_t *list, + size_t idx); /*! Obtain next node in respect to specified node * * \param[in] node Node referenced * \return node or NULL if none */ -ares__llist_node_t *ares__llist_node_next(ares__llist_node_t *node); +CARES_EXTERN ares_llist_node_t *ares_llist_node_next(ares_llist_node_t *node); /*! Obtain previous node in respect to specified node * * \param[in] node Node referenced * \return node or NULL if none */ -ares__llist_node_t *ares__llist_node_prev(ares__llist_node_t *node); +CARES_EXTERN ares_llist_node_t *ares_llist_node_prev(ares_llist_node_t *node); /*! Obtain value from node @@ -150,41 +154,41 @@ ares__llist_node_t *ares__llist_node_prev(ares__llist_node_t *node); * \param[in] node Node referenced * \return user provided value from node */ -void *ares__llist_node_val(ares__llist_node_t *node); +CARES_EXTERN void *ares_llist_node_val(ares_llist_node_t *node); /*! Obtain the number of entries in the list * * \param[in] list Initialized list object * \return count */ -size_t ares__llist_len(const ares__llist_t *list); +CARES_EXTERN size_t ares_llist_len(const ares_llist_t *list); /*! Clear all entries in the list, but don't destroy the list object. * * \param[in] list Initialized list object */ -void ares__llist_clear(ares__llist_t *list); +CARES_EXTERN void ares_llist_clear(ares_llist_t *list); /*! Obtain list object from referenced node * * \param[in] node Node referenced * \return list object node belongs to */ -ares__llist_t *ares__llist_node_parent(ares__llist_node_t *node); +CARES_EXTERN ares_llist_t *ares_llist_node_parent(ares_llist_node_t *node); /*! Obtain the first user-supplied value in the list * * \param[in] list Initialized list object * \return first user supplied value or NULL if none */ -void *ares__llist_first_val(ares__llist_t *list); +CARES_EXTERN void *ares_llist_first_val(ares_llist_t *list); /*! Obtain the last user-supplied value in the list * * \param[in] list Initialized list object * \return last user supplied value or NULL if none */ -void *ares__llist_last_val(ares__llist_t *list); +CARES_EXTERN void *ares_llist_last_val(ares_llist_t *list); /*! Take ownership of user-supplied value in list without calling destructor. * Will unchain entry from list. @@ -192,26 +196,26 @@ void *ares__llist_last_val(ares__llist_t *list); * \param[in] node Node referenced * \return user supplied value */ -void *ares__llist_node_claim(ares__llist_node_t *node); +CARES_EXTERN void *ares_llist_node_claim(ares_llist_node_t *node); /*! Replace user-supplied value for node * * \param[in] node Node referenced * \param[in] val new user-supplied value */ -void ares__llist_node_replace(ares__llist_node_t *node, void *val); +CARES_EXTERN void ares_llist_node_replace(ares_llist_node_t *node, void *val); /*! Destroy the node, removing it from the list and calling destructor. * * \param[in] node Node referenced */ -void ares__llist_node_destroy(ares__llist_node_t *node); +CARES_EXTERN void ares_llist_node_destroy(ares_llist_node_t *node); /*! Destroy the list object and all nodes in the list. * * \param[in] list Initialized list object */ -void ares__llist_destroy(ares__llist_t *list); +CARES_EXTERN void ares_llist_destroy(ares_llist_t *list); /*! Detach node from the current list and re-attach it to the new list as the * last entry. @@ -219,8 +223,8 @@ void ares__llist_destroy(ares__llist_t *list); * \param[in] node node to move * \param[in] new_parent new list */ -void ares__llist_node_move_parent_last(ares__llist_node_t *node, - ares__llist_t *new_parent); +CARES_EXTERN void ares_llist_node_mvparent_last(ares_llist_node_t *node, + ares_llist_t *new_parent); /*! Detach node from the current list and re-attach it to the new list as the * first entry. @@ -228,8 +232,8 @@ void ares__llist_node_move_parent_last(ares__llist_node_t *node, * \param[in] node node to move * \param[in] new_parent new list */ -void ares__llist_node_move_parent_first(ares__llist_node_t *node, - ares__llist_t *new_parent); +CARES_EXTERN void ares_llist_node_mvparent_first(ares_llist_node_t *node, + ares_llist_t *new_parent); /*! @} */ #endif /* __ARES__LLIST_H */ diff --git a/deps/cares/src/lib/str/ares_strcasecmp.h b/deps/cares/src/lib/include/ares_mem.h similarity index 75% rename from deps/cares/src/lib/str/ares_strcasecmp.h rename to deps/cares/src/lib/include/ares_mem.h index a8097d2219e309..371cd4266dc720 100644 --- a/deps/cares/src/lib/str/ares_strcasecmp.h +++ b/deps/cares/src/lib/include/ares_mem.h @@ -1,6 +1,5 @@ /* MIT License * - * Copyright (c) 1998 Massachusetts Institute of Technology * Copyright (c) The c-ares project and its contributors * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -24,15 +23,16 @@ * * SPDX-License-Identifier: MIT */ -#ifndef HEADER_CARES_STRCASECMP_H -#define HEADER_CARES_STRCASECMP_H -#ifndef HAVE_STRCASECMP -extern int ares_strcasecmp(const char *a, const char *b); -#endif +#ifndef __ARES_MEM_H +#define __ARES_MEM_H -#ifndef HAVE_STRNCASECMP -extern int ares_strncasecmp(const char *a, const char *b, size_t n); -#endif +/* Memory management functions */ +CARES_EXTERN void *ares_malloc(size_t size); +CARES_EXTERN void *ares_realloc(void *ptr, size_t size); +CARES_EXTERN void ares_free(void *ptr); +CARES_EXTERN void *ares_malloc_zero(size_t size); +CARES_EXTERN void *ares_realloc_zero(void *ptr, size_t orig_size, + size_t new_size); -#endif /* HEADER_CARES_STRCASECMP_H */ +#endif diff --git a/deps/cares/src/lib/include/ares_str.h b/deps/cares/src/lib/include/ares_str.h new file mode 100644 index 00000000000000..ea75b3b3e7441d --- /dev/null +++ b/deps/cares/src/lib/include/ares_str.h @@ -0,0 +1,230 @@ +/* MIT License + * + * Copyright (c) 1998 Massachusetts Institute of Technology + * Copyright (c) The c-ares project and its contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * SPDX-License-Identifier: MIT + */ +#ifndef __ARES_STR_H +#define __ARES_STR_H + +CARES_EXTERN char *ares_strdup(const char *s1); + +CARES_EXTERN size_t ares_strlen(const char *str); + +/*! Copy string from source to destination with destination buffer size + * provided. The destination is guaranteed to be null terminated, if the + * provided buffer isn't large enough, only those bytes from the source that + * will fit will be copied. + * + * \param[out] dest Destination buffer + * \param[in] src Source to copy + * \param[in] dest_size Size of destination buffer + * \return String length. Will be at most dest_size-1 + */ +CARES_EXTERN size_t ares_strcpy(char *dest, const char *src, size_t dest_size); + +CARES_EXTERN ares_bool_t ares_str_isnum(const char *str); +CARES_EXTERN ares_bool_t ares_str_isalnum(const char *str); + +CARES_EXTERN void ares_str_ltrim(char *str); +CARES_EXTERN void ares_str_rtrim(char *str); +CARES_EXTERN void ares_str_trim(char *str); +CARES_EXTERN void ares_str_lower(char *str); + +CARES_EXTERN unsigned char ares_tolower(unsigned char c); +CARES_EXTERN unsigned char *ares_memmem(const unsigned char *big, + size_t big_len, + const unsigned char *little, + size_t little_len); +CARES_EXTERN ares_bool_t ares_memeq(const unsigned char *ptr, + const unsigned char *val, size_t len); +CARES_EXTERN ares_bool_t ares_memeq_ci(const unsigned char *ptr, + const unsigned char *val, size_t len); +CARES_EXTERN ares_bool_t ares_is_hostname(const char *str); + +/*! Validate the string provided is printable. The length specified must be + * at least the size of the buffer provided. If a NULL-terminator is hit + * before the length provided is hit, this will not be considered a valid + * printable string. This does not validate that the string is actually + * NULL terminated. + * + * \param[in] str Buffer containing string to evaluate. + * \param[in] len Number of characters to evaluate within provided buffer. + * If 0, will return TRUE since it did not hit an exception. + * \return ARES_TRUE if the entire string is printable, ARES_FALSE if not. + */ +CARES_EXTERN ares_bool_t ares_str_isprint(const char *str, size_t len); + +/* We only care about ASCII rules */ +#define ares_isascii(x) (((unsigned char)x) <= 127) + +#define ares_isdigit(x) (((unsigned char)x) >= '0' && ((unsigned char)x) <= '9') + +#define ares_isxdigit(x) \ + (ares_isdigit(x) || \ + (((unsigned char)x) >= 'a' && ((unsigned char)x) <= 'f') || \ + (((unsigned char)x) >= 'A' && ((unsigned char)x) <= 'F')) + +#define ares_isupper(x) (((unsigned char)x) >= 'A' && ((unsigned char)x) <= 'Z') + +#define ares_islower(x) (((unsigned char)x) >= 'a' && ((unsigned char)x) <= 'z') + +#define ares_isalpha(x) (ares_islower(x) || ares_isupper(x)) + +#define ares_isspace(x) \ + (((unsigned char)(x)) == '\r' || ((unsigned char)(x)) == '\t' || \ + ((unsigned char)(x)) == ' ' || ((unsigned char)(x)) == '\v' || \ + ((unsigned char)(x)) == '\f' || ((unsigned char)(x)) == '\n') + +#define ares_isprint(x) \ + (((unsigned char)(x)) >= 0x20 && ((unsigned char)(x)) <= 0x7E) + +/* Character set allowed by hostnames. This is to include the normal + * domain name character set plus: + * - underscores which are used in SRV records. + * - Forward slashes such as are used for classless in-addr.arpa + * delegation (CNAMEs) + * - Asterisks may be used for wildcard domains in CNAMEs as seen in the + * real world. + * While RFC 2181 section 11 does state not to do validation, + * that applies to servers, not clients. Vulnerabilities have been + * reported when this validation is not performed. Security is more + * important than edge-case compatibility (which is probably invalid + * anyhow). + * [A-Za-z0-9-*._/] + */ +#define ares_is_hostnamech(x) \ + (ares_isalpha(x) || ares_isdigit(x) || ((unsigned char)(x)) == '-' || \ + ((unsigned char)(x)) == '.' || ((unsigned char)(x)) == '_' || \ + ((unsigned char)(x)) == '/' || ((unsigned char)(x)) == '*') + + +/*! Compare two strings (for sorting) + * + * Treats NULL and "" strings as equivalent + * + * \param[in] a First String + * \param[in] b Second String + * \return < 0 if First String less than Second String, + * 0 if First String equal to Second String, + * > 0 if First String greater than Second String + */ +CARES_EXTERN int ares_strcmp(const char *a, const char *b); + +/*! Compare two strings up to specified length (for sorting) + * + * Treats NULL and "" strings as equivalent + * + * \param[in] a First String + * \param[in] b Second String + * \param[in] n Length + * \return < 0 if First String less than Second String, + * 0 if First String equal to Second String, + * > 0 if First String greater than Second String + */ +CARES_EXTERN int ares_strncmp(const char *a, const char *b, size_t n); + + +/*! Compare two strings in a case-insensitive manner (for sorting) + * + * Treats NULL and "" strings as equivalent + * + * \param[in] a First String + * \param[in] b Second String + * \return < 0 if First String less than Second String, + * 0 if First String equal to Second String, + * > 0 if First String greater than Second String + */ +CARES_EXTERN int ares_strcasecmp(const char *a, const char *b); + +/*! Compare two strings in a case-insensitive manner up to specified length + * (for sorting) + * + * Treats NULL and "" strings as equivalent + * + * \param[in] a First String + * \param[in] b Second String + * \param[in] n Length + * \return < 0 if First String less than Second String, + * 0 if First String equal to Second String, + * > 0 if First String greater than Second String + */ +CARES_EXTERN int ares_strncasecmp(const char *a, const char *b, size_t n); + +/*! Compare two strings for equality + * + * Treats NULL and "" strings as equivalent + * + * \param[in] a First String + * \param[in] b Second String + * \return ARES_TRUE on match, or ARES_FALSE if no match + */ +CARES_EXTERN ares_bool_t ares_streq(const char *a, const char *b); + +/*! Compare two strings for equality up to specified length + * + * Treats NULL and "" strings as equivalent + * + * \param[in] a First String + * \param[in] b Second String + * \param[in] n Length + * \return ARES_TRUE on match, or ARES_FALSE if no match + */ +CARES_EXTERN ares_bool_t ares_streq_max(const char *a, const char *b, size_t n); + +/*! Compare two strings for equality in a case insensitive manner + * + * Treats NULL and "" strings as equivalent + * + * \param[in] a First String + * \param[in] b Second String + * \return ARES_TRUE on match, or ARES_FALSE if no match + */ +CARES_EXTERN ares_bool_t ares_strcaseeq(const char *a, const char *b); + +/*! Compare two strings for equality up to specified length in a case + * insensitive manner + * + * Treats NULL and "" strings as equivalent + * + * \param[in] a First String + * \param[in] b Second String + * \param[in] n Length + * \return ARES_TRUE on match, or ARES_FALSE if no match + */ +CARES_EXTERN ares_bool_t ares_strcaseeq_max(const char *a, const char *b, + size_t n); + +/*! Free a C array, each element in the array will be freed by the provided + * free function. Both NULL-terminated arrays and known length arrays are + * supported. + * + * \param[in] arr Array to be freed. + * \param[in] nmembers Number of members in the array, or SIZE_MAX for + * NULL-terminated arrays + * \param[in] freefunc Function to call on each array member (e.g. ares_free) + */ +CARES_EXTERN void ares_free_array(void *arr, size_t nmembers, + void (*freefunc)(void *)); + +#endif /* __ARES_STR_H */ diff --git a/deps/cares/src/lib/inet_net_pton.c b/deps/cares/src/lib/inet_net_pton.c index 5356778c47b86f..e1f76ef834a6f9 100644 --- a/deps/cares/src/lib/inet_net_pton.c +++ b/deps/cares/src/lib/inet_net_pton.c @@ -32,6 +32,20 @@ #include "ares_ipv6.h" #include "ares_inet_net_pton.h" +#ifdef USE_WINSOCK +# define SOCKERRNO ((int)WSAGetLastError()) +# define SET_SOCKERRNO(x) (WSASetLastError((int)(x))) +# undef EMSGSIZE +# define EMSGSIZE WSAEMSGSIZE +# undef ENOENT +# define ENOENT WSA_INVALID_PARAMETER +# undef EAFNOSUPPORT +# define EAFNOSUPPORT WSAEAFNOSUPPORT +#else +# define SOCKERRNO (errno) +# define SET_SOCKERRNO(x) (errno = (x)) +#endif + const struct ares_in6_addr ares_in6addr_any = { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } }; @@ -69,17 +83,17 @@ static int ares_inet_net_pton_ipv4(const char *src, unsigned char *dst, const unsigned char *odst = dst; ch = *src++; - if (ch == '0' && (src[0] == 'x' || src[0] == 'X') && ares__isascii(src[1]) && - ares__isxdigit(src[1])) { + if (ch == '0' && (src[0] == 'x' || src[0] == 'X') && ares_isascii(src[1]) && + ares_isxdigit(src[1])) { /* Hexadecimal: Eat nybble string. */ if (!size) { goto emsgsize; } dirty = 0; src++; /* skip x or X. */ - while ((ch = *src++) != '\0' && ares__isascii(ch) && ares__isxdigit(ch)) { - if (ares__isupper(ch)) { - ch = ares__tolower((unsigned char)ch); + while ((ch = *src++) != '\0' && ares_isascii(ch) && ares_isxdigit(ch)) { + if (ares_isupper(ch)) { + ch = ares_tolower((unsigned char)ch); } n = (int)(strchr(xdigits, ch) - xdigits); if (dirty == 0) { @@ -101,7 +115,7 @@ static int ares_inet_net_pton_ipv4(const char *src, unsigned char *dst, } *dst++ = (unsigned char)(tmp << 4); } - } else if (ares__isascii(ch) && ares__isdigit(ch)) { + } else if (ares_isascii(ch) && ares_isdigit(ch)) { /* Decimal: eat dotted digit string. */ for (;;) { tmp = 0; @@ -112,7 +126,7 @@ static int ares_inet_net_pton_ipv4(const char *src, unsigned char *dst, if (tmp > 255) { goto enoent; } - } while ((ch = *src++) != '\0' && ares__isascii(ch) && ares__isdigit(ch)); + } while ((ch = *src++) != '\0' && ares_isascii(ch) && ares_isdigit(ch)); if (!size--) { goto emsgsize; } @@ -124,7 +138,7 @@ static int ares_inet_net_pton_ipv4(const char *src, unsigned char *dst, goto enoent; } ch = *src++; - if (!ares__isascii(ch) || !ares__isdigit(ch)) { + if (!ares_isascii(ch) || !ares_isdigit(ch)) { goto enoent; } } @@ -133,8 +147,7 @@ static int ares_inet_net_pton_ipv4(const char *src, unsigned char *dst, } bits = -1; - if (ch == '/' && ares__isascii(src[0]) && ares__isdigit(src[0]) && - dst > odst) { + if (ch == '/' && ares_isascii(src[0]) && ares_isdigit(src[0]) && dst > odst) { /* CIDR width specifier. Nothing can follow it. */ ch = *src++; /* Skip over the /. */ bits = 0; @@ -145,7 +158,7 @@ static int ares_inet_net_pton_ipv4(const char *src, unsigned char *dst, if (bits > 32) { goto enoent; } - } while ((ch = *src++) != '\0' && ares__isascii(ch) && ares__isdigit(ch)); + } while ((ch = *src++) != '\0' && ares_isascii(ch) && ares_isdigit(ch)); if (ch != '\0') { goto enoent; } @@ -195,11 +208,11 @@ static int ares_inet_net_pton_ipv4(const char *src, unsigned char *dst, return bits; enoent: - SET_ERRNO(ENOENT); + SET_SOCKERRNO(ENOENT); return -1; emsgsize: - SET_ERRNO(EMSGSIZE); + SET_SOCKERRNO(EMSGSIZE); return -1; } @@ -343,7 +356,7 @@ static int ares_inet_pton6(const char *src, unsigned char *dst) return 1; enoent: - SET_ERRNO(ENOENT); + SET_SOCKERRNO(ENOENT); return -1; } @@ -358,7 +371,7 @@ static int ares_inet_net_pton_ipv6(const char *src, unsigned char *dst, char *sep; if (ares_strlen(src) >= sizeof buf) { - SET_ERRNO(EMSGSIZE); + SET_SOCKERRNO(EMSGSIZE); return -1; } ares_strcpy(buf, src, sizeof buf); @@ -377,14 +390,14 @@ static int ares_inet_net_pton_ipv6(const char *src, unsigned char *dst, bits = 128; } else { if (!getbits(sep, &bits)) { - SET_ERRNO(ENOENT); + SET_SOCKERRNO(ENOENT); return -1; } } bytes = (bits + 7) / 8; if (bytes > size) { - SET_ERRNO(EMSGSIZE); + SET_SOCKERRNO(EMSGSIZE); return -1; } memcpy(dst, &in6, bytes); @@ -401,13 +414,9 @@ static int ares_inet_net_pton_ipv6(const char *src, unsigned char *dst, * number of bits, either imputed classfully or specified with /CIDR, * or -1 if some failure occurred (check errno). ENOENT means it was * not a valid network specification. - * note: - * On Windows we store the error in the thread errno, not - * in the winsock error code. This is to avoid losing the - * actual last winsock error. So use macro ERRNO to fetch the - * errno this function sets when returning (-1), not SOCKERRNO. * author: * Paul Vixie (ISC), June 1996 + * */ int ares_inet_net_pton(int af, const char *src, void *dst, size_t size) { @@ -417,7 +426,6 @@ int ares_inet_net_pton(int af, const char *src, void *dst, size_t size) case AF_INET6: return ares_inet_net_pton_ipv6(src, dst, size); default: - SET_ERRNO(EAFNOSUPPORT); return -1; } } @@ -432,11 +440,11 @@ int ares_inet_pton(int af, const char *src, void *dst) } else if (af == AF_INET6) { size = sizeof(struct ares_in6_addr); } else { - SET_ERRNO(EAFNOSUPPORT); + SET_SOCKERRNO(EAFNOSUPPORT); return -1; } result = ares_inet_net_pton(af, src, dst, size); - if (result == -1 && ERRNO == ENOENT) { + if (result == -1 && SOCKERRNO == ENOENT) { return 0; } return (result > -1) ? 1 : -1; diff --git a/deps/cares/src/lib/inet_ntop.c b/deps/cares/src/lib/inet_ntop.c index 6f96b92ccccd13..79b6c0fa9393d7 100644 --- a/deps/cares/src/lib/inet_ntop.c +++ b/deps/cares/src/lib/inet_ntop.c @@ -29,6 +29,22 @@ #include "ares_nameser.h" #include "ares_ipv6.h" +#ifdef USE_WINSOCK +# define SOCKERRNO ((int)WSAGetLastError()) +# define SET_SOCKERRNO(x) (WSASetLastError((int)(x))) +# undef EMSGSIZE +# define EMSGSIZE WSAEMSGSIZE +# undef ENOENT +# define ENOENT WSA_INVALID_PARAMETER +# undef EAFNOSUPPORT +# define EAFNOSUPPORT WSAEAFNOSUPPORT +# undef ENOSPC +# define ENOSPC WSA_INVALID_PARAMETER +#else +# define SOCKERRNO (errno) +# define SET_SOCKERRNO(x) (errno = (x)) +#endif + /* * WARNING: Don't even consider trying to compile this on a system where * sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX. @@ -42,11 +58,6 @@ static const char *inet_ntop6(const unsigned char *src, char *dst, size_t size); * convert a network format address to presentation format. * return: * pointer to presentation format address (`dst'), or NULL (see errno). - * note: - * On Windows we store the error in the thread errno, not - * in the winsock error code. This is to avoid losing the - * actual last winsock error. So use macro ERRNO to fetch the - * errno this function sets when returning NULL, not SOCKERRNO. * author: * Paul Vixie, 1996. */ @@ -61,7 +72,7 @@ const char *ares_inet_ntop(int af, const void *src, char *dst, default: break; } - SET_ERRNO(EAFNOSUPPORT); + SET_SOCKERRNO(EAFNOSUPPORT); return NULL; } @@ -82,13 +93,13 @@ static const char *inet_ntop4(const unsigned char *src, char *dst, size_t size) char tmp[sizeof("255.255.255.255")]; if (size < sizeof(tmp)) { - SET_ERRNO(ENOSPC); + SET_SOCKERRNO(ENOSPC); return NULL; } if ((size_t)snprintf(tmp, sizeof(tmp), fmt, src[0], src[1], src[2], src[3]) >= size) { - SET_ERRNO(ENOSPC); + SET_SOCKERRNO(ENOSPC); return NULL; } ares_strcpy(dst, tmp, size); @@ -200,7 +211,7 @@ static const char *inet_ntop6(const unsigned char *src, char *dst, size_t size) * Check for overflow, copy, and we're done. */ if ((size_t)(tp - tmp) > size) { - SET_ERRNO(ENOSPC); + SET_SOCKERRNO(ENOSPC); return NULL; } ares_strcpy(dst, tmp, size); diff --git a/deps/cares/src/lib/legacy/ares_expand_name.c b/deps/cares/src/lib/legacy/ares_expand_name.c index 63bd64516682e3..72668f4cb60a07 100644 --- a/deps/cares/src/lib/legacy/ares_expand_name.c +++ b/deps/cares/src/lib/legacy/ares_expand_name.c @@ -33,13 +33,13 @@ #include "ares_nameser.h" -ares_status_t ares__expand_name_validated(const unsigned char *encoded, - const unsigned char *abuf, - size_t alen, char **s, size_t *enclen, - ares_bool_t is_hostname) +ares_status_t ares_expand_name_validated(const unsigned char *encoded, + const unsigned char *abuf, size_t alen, + char **s, size_t *enclen, + ares_bool_t is_hostname) { ares_status_t status; - ares__buf_t *buf = NULL; + ares_buf_t *buf = NULL; size_t start_len; if (encoded == NULL || abuf == NULL || alen == 0 || enclen == NULL) { @@ -57,27 +57,27 @@ ares_status_t ares__expand_name_validated(const unsigned char *encoded, *s = NULL; } - buf = ares__buf_create_const(abuf, alen); + buf = ares_buf_create_const(abuf, alen); if (buf == NULL) { return ARES_ENOMEM; } - status = ares__buf_set_position(buf, (size_t)(encoded - abuf)); + status = ares_buf_set_position(buf, (size_t)(encoded - abuf)); if (status != ARES_SUCCESS) { goto done; } - start_len = ares__buf_len(buf); - status = ares__dns_name_parse(buf, s, is_hostname); + start_len = ares_buf_len(buf); + status = ares_dns_name_parse(buf, s, is_hostname); if (status != ARES_SUCCESS) { goto done; } - *enclen = start_len - ares__buf_len(buf); + *enclen = start_len - ares_buf_len(buf); done: - ares__buf_destroy(buf); + ares_buf_destroy(buf); return status; } @@ -92,8 +92,8 @@ int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf, return ARES_EBADNAME; } - status = ares__expand_name_validated(encoded, abuf, (size_t)alen, s, - &enclen_temp, ARES_FALSE); + status = ares_expand_name_validated(encoded, abuf, (size_t)alen, s, + &enclen_temp, ARES_FALSE); *enclen = (long)enclen_temp; return (int)status; } diff --git a/deps/cares/src/lib/legacy/ares_expand_string.c b/deps/cares/src/lib/legacy/ares_expand_string.c index b3e99daa54b325..e1deb1932f43b4 100644 --- a/deps/cares/src/lib/legacy/ares_expand_string.c +++ b/deps/cares/src/lib/legacy/ares_expand_string.c @@ -43,7 +43,7 @@ ares_status_t ares_expand_string_ex(const unsigned char *encoded, unsigned char **s, size_t *enclen) { ares_status_t status; - ares__buf_t *buf = NULL; + ares_buf_t *buf = NULL; size_t start_len; size_t len = 0; @@ -62,28 +62,28 @@ ares_status_t ares_expand_string_ex(const unsigned char *encoded, *s = NULL; } - buf = ares__buf_create_const(abuf, alen); + buf = ares_buf_create_const(abuf, alen); if (buf == NULL) { return ARES_ENOMEM; } - status = ares__buf_set_position(buf, (size_t)(encoded - abuf)); + status = ares_buf_set_position(buf, (size_t)(encoded - abuf)); if (status != ARES_SUCCESS) { goto done; } - start_len = ares__buf_len(buf); - status = ares__buf_parse_dns_binstr(buf, ares__buf_len(buf), s, &len); + start_len = ares_buf_len(buf); + status = ares_buf_parse_dns_binstr(buf, ares_buf_len(buf), s, &len); /* hrm, no way to pass back 'len' with the prototype */ if (status != ARES_SUCCESS) { goto done; } - *enclen = start_len - ares__buf_len(buf); + *enclen = start_len - ares_buf_len(buf); done: - ares__buf_destroy(buf); + ares_buf_destroy(buf); if (status == ARES_EBADNAME || status == ARES_EBADRESP) { status = ARES_EBADSTR; } diff --git a/deps/cares/src/lib/legacy/ares_fds.c b/deps/cares/src/lib/legacy/ares_fds.c index 3aedd2c90e23f3..112ebac60ad0a7 100644 --- a/deps/cares/src/lib/legacy/ares_fds.c +++ b/deps/cares/src/lib/legacy/ares_fds.c @@ -29,28 +29,28 @@ int ares_fds(const ares_channel_t *channel, fd_set *read_fds, fd_set *write_fds) { - ares_socket_t nfds; - ares__slist_node_t *snode; + ares_socket_t nfds; + ares_slist_node_t *snode; /* Are there any active queries? */ - size_t active_queries; + size_t active_queries; if (channel == NULL || read_fds == NULL || write_fds == NULL) { return 0; } - ares__channel_lock(channel); + ares_channel_lock(channel); - active_queries = ares__llist_len(channel->all_queries); + active_queries = ares_llist_len(channel->all_queries); nfds = 0; - for (snode = ares__slist_node_first(channel->servers); snode != NULL; - snode = ares__slist_node_next(snode)) { - ares_server_t *server = ares__slist_node_val(snode); - ares__llist_node_t *node; + for (snode = ares_slist_node_first(channel->servers); snode != NULL; + snode = ares_slist_node_next(snode)) { + ares_server_t *server = ares_slist_node_val(snode); + ares_llist_node_t *node; - for (node = ares__llist_node_first(server->connections); node != NULL; - node = ares__llist_node_next(node)) { - const ares_conn_t *conn = ares__llist_node_val(node); + for (node = ares_llist_node_first(server->connections); node != NULL; + node = ares_llist_node_next(node)) { + const ares_conn_t *conn = ares_llist_node_val(node); if (!active_queries && !(conn->flags & ARES_CONN_FLAG_TCP)) { continue; @@ -68,13 +68,13 @@ int ares_fds(const ares_channel_t *channel, fd_set *read_fds, fd_set *write_fds) nfds = conn->fd + 1; } - /* TCP only wait on write if we have buffered data */ - if (conn->flags & ARES_CONN_FLAG_TCP && ares__buf_len(server->tcp_send)) { + /* TCP only wait on write if we have the flag set */ + if (conn->state_flags & ARES_CONN_STATE_WRITE) { FD_SET(conn->fd, write_fds); } } } - ares__channel_unlock(channel); + ares_channel_unlock(channel); return (int)nfds; } diff --git a/deps/cares/src/lib/legacy/ares_getsock.c b/deps/cares/src/lib/legacy/ares_getsock.c index 8c8476fa95109e..cec9258abb095a 100644 --- a/deps/cares/src/lib/legacy/ares_getsock.c +++ b/deps/cares/src/lib/legacy/ares_getsock.c @@ -29,30 +29,30 @@ int ares_getsock(const ares_channel_t *channel, ares_socket_t *socks, int numsocks) /* size of the 'socks' array */ { - ares__slist_node_t *snode; - size_t sockindex = 0; - unsigned int bitmap = 0; - unsigned int setbits = 0xffffffff; + ares_slist_node_t *snode; + size_t sockindex = 0; + unsigned int bitmap = 0; + unsigned int setbits = 0xffffffff; /* Are there any active queries? */ - size_t active_queries; + size_t active_queries; if (channel == NULL || numsocks <= 0) { return 0; } - ares__channel_lock(channel); + ares_channel_lock(channel); - active_queries = ares__llist_len(channel->all_queries); + active_queries = ares_llist_len(channel->all_queries); - for (snode = ares__slist_node_first(channel->servers); snode != NULL; - snode = ares__slist_node_next(snode)) { - ares_server_t *server = ares__slist_node_val(snode); - ares__llist_node_t *node; + for (snode = ares_slist_node_first(channel->servers); snode != NULL; + snode = ares_slist_node_next(snode)) { + ares_server_t *server = ares_slist_node_val(snode); + ares_llist_node_t *node; - for (node = ares__llist_node_first(server->connections); node != NULL; - node = ares__llist_node_next(node)) { - const ares_conn_t *conn = ares__llist_node_val(node); + for (node = ares_llist_node_first(server->connections); node != NULL; + node = ares_llist_node_next(node)) { + const ares_conn_t *conn = ares_llist_node_val(node); if (sockindex >= (size_t)numsocks || sockindex >= ARES_GETSOCK_MAXNUM) { break; @@ -71,7 +71,7 @@ int ares_getsock(const ares_channel_t *channel, ares_socket_t *socks, bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex); } - if (conn->flags & ARES_CONN_FLAG_TCP && ares__buf_len(server->tcp_send)) { + if (conn->state_flags & ARES_CONN_STATE_WRITE) { /* then the tcp socket is also writable! */ bitmap |= ARES_GETSOCK_WRITABLE(setbits, sockindex); } @@ -80,6 +80,6 @@ int ares_getsock(const ares_channel_t *channel, ares_socket_t *socks, } } - ares__channel_unlock(channel); + ares_channel_unlock(channel); return (int)bitmap; } diff --git a/deps/cares/src/lib/legacy/ares_parse_a_reply.c b/deps/cares/src/lib/legacy/ares_parse_a_reply.c index 0981b90eeaf595..870aaccf76c0a8 100644 --- a/deps/cares/src/lib/legacy/ares_parse_a_reply.c +++ b/deps/cares/src/lib/legacy/ares_parse_a_reply.c @@ -71,13 +71,13 @@ int ares_parse_a_reply(const unsigned char *abuf, int alen, goto fail; } - status = ares__parse_into_addrinfo(dnsrec, 0, 0, &ai); + status = ares_parse_into_addrinfo(dnsrec, 0, 0, &ai); if (status != ARES_SUCCESS && status != ARES_ENODATA) { goto fail; } if (host != NULL) { - status = ares__addrinfo2hostent(&ai, AF_INET, host); + status = ares_addrinfo2hostent(&ai, AF_INET, host); if (status != ARES_SUCCESS && status != ARES_ENODATA) { goto fail; /* LCOV_EXCL_LINE: DefensiveCoding */ } @@ -85,15 +85,15 @@ int ares_parse_a_reply(const unsigned char *abuf, int alen, if (addrttls != NULL && req_naddrttls) { size_t temp_naddrttls = 0; - ares__addrinfo2addrttl(&ai, AF_INET, req_naddrttls, addrttls, NULL, - &temp_naddrttls); + ares_addrinfo2addrttl(&ai, AF_INET, req_naddrttls, addrttls, NULL, + &temp_naddrttls); *naddrttls = (int)temp_naddrttls; } fail: - ares__freeaddrinfo_cnames(ai.cnames); - ares__freeaddrinfo_nodes(ai.nodes); + ares_freeaddrinfo_cnames(ai.cnames); + ares_freeaddrinfo_nodes(ai.nodes); ares_free(ai.name); ares_free(question_hostname); ares_dns_record_destroy(dnsrec); diff --git a/deps/cares/src/lib/legacy/ares_parse_aaaa_reply.c b/deps/cares/src/lib/legacy/ares_parse_aaaa_reply.c index 3f6932643b2474..278642f0b3e0af 100644 --- a/deps/cares/src/lib/legacy/ares_parse_aaaa_reply.c +++ b/deps/cares/src/lib/legacy/ares_parse_aaaa_reply.c @@ -74,13 +74,13 @@ int ares_parse_aaaa_reply(const unsigned char *abuf, int alen, goto fail; } - status = ares__parse_into_addrinfo(dnsrec, 0, 0, &ai); + status = ares_parse_into_addrinfo(dnsrec, 0, 0, &ai); if (status != ARES_SUCCESS && status != ARES_ENODATA) { goto fail; } if (host != NULL) { - status = ares__addrinfo2hostent(&ai, AF_INET6, host); + status = ares_addrinfo2hostent(&ai, AF_INET6, host); if (status != ARES_SUCCESS && status != ARES_ENODATA) { goto fail; /* LCOV_EXCL_LINE: DefensiveCoding */ } @@ -88,14 +88,14 @@ int ares_parse_aaaa_reply(const unsigned char *abuf, int alen, if (addrttls != NULL && req_naddrttls) { size_t temp_naddrttls = 0; - ares__addrinfo2addrttl(&ai, AF_INET6, req_naddrttls, NULL, addrttls, - &temp_naddrttls); + ares_addrinfo2addrttl(&ai, AF_INET6, req_naddrttls, NULL, addrttls, + &temp_naddrttls); *naddrttls = (int)temp_naddrttls; } fail: - ares__freeaddrinfo_cnames(ai.cnames); - ares__freeaddrinfo_nodes(ai.nodes); + ares_freeaddrinfo_cnames(ai.cnames); + ares_freeaddrinfo_nodes(ai.nodes); ares_free(question_hostname); ares_free(ai.name); ares_dns_record_destroy(dnsrec); diff --git a/deps/cares/src/lib/legacy/ares_parse_ptr_reply.c b/deps/cares/src/lib/legacy/ares_parse_ptr_reply.c index 56a7b5f94eb331..0e52f9db09bbc7 100644 --- a/deps/cares/src/lib/legacy/ares_parse_ptr_reply.c +++ b/deps/cares/src/lib/legacy/ares_parse_ptr_reply.c @@ -135,7 +135,7 @@ ares_status_t ares_parse_ptr_reply_dnsrec(const ares_dns_record_t *dnsrec, * status = ARES_EBADRESP; * goto done; * } - * if (strcasecmp(ptrname, rname) != 0) { + * if (!ares_strcaseeq(ptrname, rname)) { * continue; * } */ diff --git a/deps/cares/src/lib/legacy/ares_parse_txt_reply.c b/deps/cares/src/lib/legacy/ares_parse_txt_reply.c index 71ee0841119b8b..d276f6ab390753 100644 --- a/deps/cares/src/lib/legacy/ares_parse_txt_reply.c +++ b/deps/cares/src/lib/legacy/ares_parse_txt_reply.c @@ -27,8 +27,8 @@ #include "ares_private.h" #include "ares_data.h" -static int ares__parse_txt_reply(const unsigned char *abuf, size_t alen, - ares_bool_t ex, void **txt_out) +static int ares_parse_txt_reply_int(const unsigned char *abuf, size_t alen, + ares_bool_t ex, void **txt_out) { ares_status_t status; struct ares_txt_ext *txt_head = NULL; @@ -129,8 +129,8 @@ int ares_parse_txt_reply(const unsigned char *abuf, int alen, if (alen < 0) { return ARES_EBADRESP; } - return ares__parse_txt_reply(abuf, (size_t)alen, ARES_FALSE, - (void **)txt_out); + return ares_parse_txt_reply_int(abuf, (size_t)alen, ARES_FALSE, + (void **)txt_out); } int ares_parse_txt_reply_ext(const unsigned char *abuf, int alen, @@ -139,5 +139,6 @@ int ares_parse_txt_reply_ext(const unsigned char *abuf, int alen, if (alen < 0) { return ARES_EBADRESP; } - return ares__parse_txt_reply(abuf, (size_t)alen, ARES_TRUE, (void **)txt_out); + return ares_parse_txt_reply_int(abuf, (size_t)alen, ARES_TRUE, + (void **)txt_out); } diff --git a/deps/cares/src/lib/record/ares_dns_mapping.c b/deps/cares/src/lib/record/ares_dns_mapping.c index 738d2f3795ab3f..5a3ec28abf130b 100644 --- a/deps/cares/src/lib/record/ares_dns_mapping.c +++ b/deps/cares/src/lib/record/ares_dns_mapping.c @@ -111,7 +111,7 @@ ares_bool_t ares_dns_rec_type_isvalid(ares_dns_rec_type_t type, return is_query ? ARES_TRUE : ARES_FALSE; } -ares_bool_t ares_dns_rec_type_allow_name_compression(ares_dns_rec_type_t type) +ares_bool_t ares_dns_rec_allow_name_comp(ares_dns_rec_type_t type) { /* Only record types defined in RFC1035 allow name compression within the * RDATA. Otherwise nameservers that don't understand an RR may not be @@ -681,7 +681,7 @@ ares_bool_t ares_dns_class_fromstr(ares_dns_class_t *qclass, const char *str) } for (i = 0; list[i].name != NULL; i++) { - if (strcasecmp(list[i].name, str) == 0) { + if (ares_strcaseeq(list[i].name, str)) { *qclass = list[i].qclass; return ARES_TRUE; } @@ -726,7 +726,7 @@ ares_bool_t ares_dns_rec_type_fromstr(ares_dns_rec_type_t *qtype, } for (i = 0; list[i].name != NULL; i++) { - if (strcasecmp(list[i].name, str) == 0) { + if (ares_strcaseeq(list[i].name, str)) { *qtype = list[i].type; return ARES_TRUE; } diff --git a/deps/cares/src/lib/record/ares_dns_multistring.c b/deps/cares/src/lib/record/ares_dns_multistring.c index bff5afb9f2a00f..57c0d1c0a803ec 100644 --- a/deps/cares/src/lib/record/ares_dns_multistring.c +++ b/deps/cares/src/lib/record/ares_dns_multistring.c @@ -31,7 +31,7 @@ typedef struct { size_t len; } multistring_data_t; -struct ares__dns_multistring { +struct ares_dns_multistring { /*! whether or not cached concatenated string is valid */ ares_bool_t cache_invalidated; /*! combined/concatenated string cache */ @@ -39,10 +39,10 @@ struct ares__dns_multistring { /*! length of combined/concatenated string */ size_t cache_str_len; /*! Data making up strings */ - ares__array_t *strs; /*!< multistring_data_t type */ + ares_array_t *strs; /*!< multistring_data_t type */ }; -static void ares__dns_multistring_free_cb(void *arg) +static void ares_dns_multistring_free_cb(void *arg) { multistring_data_t *data = arg; if (data == NULL) { @@ -51,15 +51,15 @@ static void ares__dns_multistring_free_cb(void *arg) ares_free(data->data); } -ares__dns_multistring_t *ares__dns_multistring_create(void) +ares_dns_multistring_t *ares_dns_multistring_create(void) { - ares__dns_multistring_t *strs = ares_malloc_zero(sizeof(*strs)); + ares_dns_multistring_t *strs = ares_malloc_zero(sizeof(*strs)); if (strs == NULL) { return NULL; } - strs->strs = ares__array_create(sizeof(multistring_data_t), - ares__dns_multistring_free_cb); + strs->strs = + ares_array_create(sizeof(multistring_data_t), ares_dns_multistring_free_cb); if (strs->strs == NULL) { ares_free(strs); return NULL; @@ -68,31 +68,31 @@ ares__dns_multistring_t *ares__dns_multistring_create(void) return strs; } -void ares__dns_multistring_clear(ares__dns_multistring_t *strs) +void ares_dns_multistring_clear(ares_dns_multistring_t *strs) { if (strs == NULL) { return; } - while (ares__array_len(strs->strs)) { - ares__array_remove_last(strs->strs); + while (ares_array_len(strs->strs)) { + ares_array_remove_last(strs->strs); } } -void ares__dns_multistring_destroy(ares__dns_multistring_t *strs) +void ares_dns_multistring_destroy(ares_dns_multistring_t *strs) { if (strs == NULL) { return; } - ares__dns_multistring_clear(strs); - ares__array_destroy(strs->strs); + ares_dns_multistring_clear(strs); + ares_array_destroy(strs->strs); ares_free(strs->cache_str); ares_free(strs); } -ares_status_t ares__dns_multistring_replace_own(ares__dns_multistring_t *strs, - size_t idx, unsigned char *str, - size_t len) +ares_status_t ares_dns_multistring_swap_own(ares_dns_multistring_t *strs, + size_t idx, unsigned char *str, + size_t len) { multistring_data_t *data; @@ -102,7 +102,7 @@ ares_status_t ares__dns_multistring_replace_own(ares__dns_multistring_t *strs, strs->cache_invalidated = ARES_TRUE; - data = ares__array_at(strs->strs, idx); + data = ares_array_at(strs->strs, idx); if (data == NULL) { return ARES_EFORMERR; } @@ -113,8 +113,7 @@ ares_status_t ares__dns_multistring_replace_own(ares__dns_multistring_t *strs, return ARES_SUCCESS; } -ares_status_t ares__dns_multistring_del(ares__dns_multistring_t *strs, - size_t idx) +ares_status_t ares_dns_multistring_del(ares_dns_multistring_t *strs, size_t idx) { if (strs == NULL) { return ARES_EFORMERR; @@ -122,11 +121,11 @@ ares_status_t ares__dns_multistring_del(ares__dns_multistring_t *strs, strs->cache_invalidated = ARES_TRUE; - return ares__array_remove_at(strs->strs, idx); + return ares_array_remove_at(strs->strs, idx); } -ares_status_t ares__dns_multistring_add_own(ares__dns_multistring_t *strs, - unsigned char *str, size_t len) +ares_status_t ares_dns_multistring_add_own(ares_dns_multistring_t *strs, + unsigned char *str, size_t len) { multistring_data_t *data; ares_status_t status; @@ -142,7 +141,7 @@ ares_status_t ares__dns_multistring_add_own(ares__dns_multistring_t *strs, return ARES_EFORMERR; } - status = ares__array_insert_last((void **)&data, strs->strs); + status = ares_array_insert_last((void **)&data, strs->strs); if (status != ARES_SUCCESS) { return status; } @@ -153,17 +152,17 @@ ares_status_t ares__dns_multistring_add_own(ares__dns_multistring_t *strs, return ARES_SUCCESS; } -size_t ares__dns_multistring_cnt(const ares__dns_multistring_t *strs) +size_t ares_dns_multistring_cnt(const ares_dns_multistring_t *strs) { if (strs == NULL) { return 0; } - return ares__array_len(strs->strs); + return ares_array_len(strs->strs); } const unsigned char * - ares__dns_multistring_get(const ares__dns_multistring_t *strs, size_t idx, - size_t *len) + ares_dns_multistring_get(const ares_dns_multistring_t *strs, size_t idx, + size_t *len) { const multistring_data_t *data; @@ -171,7 +170,7 @@ const unsigned char * return NULL; } - data = ares__array_at_const(strs->strs, idx); + data = ares_array_at_const(strs->strs, idx); if (data == NULL) { return NULL; } @@ -180,11 +179,11 @@ const unsigned char * return data->data; } -const unsigned char * - ares__dns_multistring_get_combined(ares__dns_multistring_t *strs, size_t *len) +const unsigned char *ares_dns_multistring_combined(ares_dns_multistring_t *strs, + size_t *len) { - ares__buf_t *buf = NULL; - size_t i; + ares_buf_t *buf = NULL; + size_t i; if (strs == NULL || len == NULL) { return NULL; @@ -203,22 +202,92 @@ const unsigned char * strs->cache_str = NULL; strs->cache_str_len = 0; - buf = ares__buf_create(); + buf = ares_buf_create(); - for (i = 0; i < ares__array_len(strs->strs); i++) { - const multistring_data_t *data = ares__array_at_const(strs->strs, i); + for (i = 0; i < ares_array_len(strs->strs); i++) { + const multistring_data_t *data = ares_array_at_const(strs->strs, i); if (data == NULL || - ares__buf_append(buf, data->data, data->len) != ARES_SUCCESS) { - ares__buf_destroy(buf); + ares_buf_append(buf, data->data, data->len) != ARES_SUCCESS) { + ares_buf_destroy(buf); return NULL; } } strs->cache_str = - (unsigned char *)ares__buf_finish_str(buf, &strs->cache_str_len); + (unsigned char *)ares_buf_finish_str(buf, &strs->cache_str_len); if (strs->cache_str != NULL) { strs->cache_invalidated = ARES_FALSE; } *len = strs->cache_str_len; return strs->cache_str; } + +ares_status_t ares_dns_multistring_parse_buf(ares_buf_t *buf, + size_t remaining_len, + ares_dns_multistring_t **strs, + ares_bool_t validate_printable) +{ + unsigned char len; + ares_status_t status = ARES_EBADRESP; + size_t orig_len = ares_buf_len(buf); + + if (buf == NULL) { + return ARES_EFORMERR; + } + + if (remaining_len == 0) { + return ARES_EBADRESP; + } + + if (strs != NULL) { + *strs = ares_dns_multistring_create(); + if (*strs == NULL) { + return ARES_ENOMEM; + } + } + + while (orig_len - ares_buf_len(buf) < remaining_len) { + status = ares_buf_fetch_bytes(buf, &len, 1); + if (status != ARES_SUCCESS) { + break; /* LCOV_EXCL_LINE: DefensiveCoding */ + } + + if (len) { + /* When used by the _str() parser, it really needs to be validated to + * be a valid printable ascii string. Do that here */ + if (validate_printable && ares_buf_len(buf) >= len) { + size_t mylen; + const char *data = (const char *)ares_buf_peek(buf, &mylen); + if (!ares_str_isprint(data, len)) { + status = ARES_EBADSTR; + break; + } + } + + if (strs != NULL) { + unsigned char *data = NULL; + status = ares_buf_fetch_bytes_dup(buf, len, ARES_TRUE, &data); + if (status != ARES_SUCCESS) { + break; + } + status = ares_dns_multistring_add_own(*strs, data, len); + if (status != ARES_SUCCESS) { + ares_free(data); + break; + } + } else { + status = ares_buf_consume(buf, len); + if (status != ARES_SUCCESS) { + break; + } + } + } + } + + if (status != ARES_SUCCESS && strs != NULL) { + ares_dns_multistring_destroy(*strs); + *strs = NULL; + } + + return status; +} diff --git a/deps/cares/src/lib/record/ares_dns_multistring.h b/deps/cares/src/lib/record/ares_dns_multistring.h index d9aa7ae37847eb..70834491b52116 100644 --- a/deps/cares/src/lib/record/ares_dns_multistring.h +++ b/deps/cares/src/lib/record/ares_dns_multistring.h @@ -26,25 +26,47 @@ #ifndef __ARES_DNS_MULTISTRING_H #define __ARES_DNS_MULTISTRING_H -struct ares__dns_multistring; -typedef struct ares__dns_multistring ares__dns_multistring_t; +#include "ares_buf.h" -ares__dns_multistring_t *ares__dns_multistring_create(void); -void ares__dns_multistring_clear(ares__dns_multistring_t *strs); -void ares__dns_multistring_destroy(ares__dns_multistring_t *strs); -ares_status_t ares__dns_multistring_replace_own(ares__dns_multistring_t *strs, - size_t idx, unsigned char *str, - size_t len); -ares_status_t ares__dns_multistring_del(ares__dns_multistring_t *strs, - size_t idx); -ares_status_t ares__dns_multistring_add_own(ares__dns_multistring_t *strs, - unsigned char *str, size_t len); -size_t ares__dns_multistring_cnt(const ares__dns_multistring_t *strs); -const unsigned char * - ares__dns_multistring_get(const ares__dns_multistring_t *strs, size_t idx, - size_t *len); +struct ares_dns_multistring; +typedef struct ares_dns_multistring ares_dns_multistring_t; + +ares_dns_multistring_t *ares_dns_multistring_create(void); +void ares_dns_multistring_clear(ares_dns_multistring_t *strs); +void ares_dns_multistring_destroy(ares_dns_multistring_t *strs); +ares_status_t ares_dns_multistring_swap_own(ares_dns_multistring_t *strs, + size_t idx, unsigned char *str, + size_t len); +ares_status_t ares_dns_multistring_del(ares_dns_multistring_t *strs, + size_t idx); +ares_status_t ares_dns_multistring_add_own(ares_dns_multistring_t *strs, + unsigned char *str, size_t len); +size_t ares_dns_multistring_cnt(const ares_dns_multistring_t *strs); const unsigned char * - ares__dns_multistring_get_combined(ares__dns_multistring_t *strs, - size_t *len); + ares_dns_multistring_get(const ares_dns_multistring_t *strs, size_t idx, + size_t *len); +const unsigned char *ares_dns_multistring_combined(ares_dns_multistring_t *strs, + size_t *len); + +/*! Parse an array of character strings as defined in RFC1035, as binary, + * however, for convenience this does guarantee a NULL terminator (that is + * not included in the length for each value). + * + * \param[in] buf initialized buffer object + * \param[in] remaining_len maximum length that should be used for + * parsing the string, this is often less than + * the remaining buffer and is based on the RR + * record length. + * \param[out] strs Pointer passed by reference to be filled in + * with + * the array of values. + * \param[out] validate_printable Validate the strings contain only printable + * data. + * \return ARES_SUCCESS on success + */ +ares_status_t ares_dns_multistring_parse_buf(ares_buf_t *buf, + size_t remaining_len, + ares_dns_multistring_t **strs, + ares_bool_t validate_printable); #endif diff --git a/deps/cares/src/lib/record/ares_dns_name.c b/deps/cares/src/lib/record/ares_dns_name.c index a437553b0f2917..a9b92e03ca9353 100644 --- a/deps/cares/src/lib/record/ares_dns_name.c +++ b/deps/cares/src/lib/record/ares_dns_name.c @@ -31,7 +31,7 @@ typedef struct { size_t idx; } ares_nameoffset_t; -static void ares__nameoffset_free(void *arg) +static void ares_nameoffset_free(void *arg) { ares_nameoffset_t *off = arg; if (off == NULL) { @@ -41,8 +41,8 @@ static void ares__nameoffset_free(void *arg) ares_free(off); } -static ares_status_t ares__nameoffset_create(ares__llist_t **list, - const char *name, size_t idx) +static ares_status_t ares_nameoffset_create(ares_llist_t **list, + const char *name, size_t idx) { ares_status_t status; ares_nameoffset_t *off = NULL; @@ -53,7 +53,7 @@ static ares_status_t ares__nameoffset_create(ares__llist_t **list, } if (*list == NULL) { - *list = ares__llist_create(ares__nameoffset_free); + *list = ares_llist_create(ares_nameoffset_free); } if (*list == NULL) { status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ @@ -69,7 +69,7 @@ static ares_status_t ares__nameoffset_create(ares__llist_t **list, off->name_len = ares_strlen(off->name); off->idx = idx; - if (ares__llist_insert_last(*list, off) == NULL) { + if (ares_llist_insert_last(*list, off) == NULL) { status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -78,25 +78,25 @@ static ares_status_t ares__nameoffset_create(ares__llist_t **list, /* LCOV_EXCL_START: OutOfMemory */ fail: - ares__nameoffset_free(off); + ares_nameoffset_free(off); return status; /* LCOV_EXCL_STOP */ } -static const ares_nameoffset_t *ares__nameoffset_find(ares__llist_t *list, - const char *name) +static const ares_nameoffset_t *ares_nameoffset_find(ares_llist_t *list, + const char *name) { size_t name_len = ares_strlen(name); - ares__llist_node_t *node; + ares_llist_node_t *node; const ares_nameoffset_t *longest_match = NULL; if (list == NULL || name == NULL || name_len == 0) { return NULL; } - for (node = ares__llist_node_first(list); node != NULL; - node = ares__llist_node_next(node)) { - const ares_nameoffset_t *val = ares__llist_node_val(node); + for (node = ares_llist_node_first(list); node != NULL; + node = ares_llist_node_next(node)) { + const ares_nameoffset_t *val = ares_llist_node_val(node); size_t prefix_len; /* Can't be a match if the stored name is longer */ @@ -114,7 +114,7 @@ static const ares_nameoffset_t *ares__nameoffset_find(ares__llist_t *list, /* Due to DNS 0x20, lets not inadvertently mangle things, use case-sensitive * matching instead of case-insensitive. This may result in slightly * larger DNS queries overall. */ - if (strcmp(val->name, name + prefix_len) != 0) { + if (!ares_streq(val->name, name + prefix_len)) { continue; } @@ -133,38 +133,38 @@ static const ares_nameoffset_t *ares__nameoffset_find(ares__llist_t *list, static void ares_dns_labels_free_cb(void *arg) { - ares__buf_t **buf = arg; + ares_buf_t **buf = arg; if (buf == NULL) { return; } - ares__buf_destroy(*buf); + ares_buf_destroy(*buf); } -static ares__buf_t *ares_dns_labels_add(ares__array_t *labels) +static ares_buf_t *ares_dns_labels_add(ares_array_t *labels) { - ares__buf_t **buf; + ares_buf_t **buf; if (labels == NULL) { return NULL; /* LCOV_EXCL_LINE: DefensiveCoding */ } - if (ares__array_insert_last((void **)&buf, labels) != ARES_SUCCESS) { + if (ares_array_insert_last((void **)&buf, labels) != ARES_SUCCESS) { return NULL; } - *buf = ares__buf_create(); + *buf = ares_buf_create(); if (*buf == NULL) { - ares__array_remove_last(labels); + ares_array_remove_last(labels); return NULL; } return *buf; } -static ares__buf_t *ares_dns_labels_get_last(ares__array_t *labels) +static ares_buf_t *ares_dns_labels_get_last(ares_array_t *labels) { - ares__buf_t **buf = ares__array_last(labels); + ares_buf_t **buf = ares_array_last(labels); if (buf == NULL) { return NULL; @@ -173,9 +173,9 @@ static ares__buf_t *ares_dns_labels_get_last(ares__array_t *labels) return *buf; } -static ares__buf_t *ares_dns_labels_get_at(ares__array_t *labels, size_t idx) +static ares_buf_t *ares_dns_labels_get_at(ares_array_t *labels, size_t idx) { - ares__buf_t **buf = ares__array_at(labels, idx); + ares_buf_t **buf = ares_array_at(labels, idx); if (buf == NULL) { return NULL; @@ -184,37 +184,37 @@ static ares__buf_t *ares_dns_labels_get_at(ares__array_t *labels, size_t idx) return *buf; } -static void ares_dns_name_labels_del_last(ares__array_t *labels) +static void ares_dns_name_labels_del_last(ares_array_t *labels) { - ares__array_remove_last(labels); + ares_array_remove_last(labels); } -static ares_status_t ares_parse_dns_name_escape(ares__buf_t *namebuf, - ares__buf_t *label, - ares_bool_t validate_hostname) +static ares_status_t ares_parse_dns_name_escape(ares_buf_t *namebuf, + ares_buf_t *label, + ares_bool_t validate_hostname) { ares_status_t status; unsigned char c; - status = ares__buf_fetch_bytes(namebuf, &c, 1); + status = ares_buf_fetch_bytes(namebuf, &c, 1); if (status != ARES_SUCCESS) { return ARES_EBADNAME; } /* If next character is a digit, read 2 more digits */ - if (ares__isdigit(c)) { + if (ares_isdigit(c)) { size_t i; unsigned int val = 0; val = c - '0'; for (i = 0; i < 2; i++) { - status = ares__buf_fetch_bytes(namebuf, &c, 1); + status = ares_buf_fetch_bytes(namebuf, &c, 1); if (status != ARES_SUCCESS) { return ARES_EBADNAME; } - if (!ares__isdigit(c)) { + if (!ares_isdigit(c)) { return ARES_EBADNAME; } val *= 10; @@ -226,28 +226,28 @@ static ares_status_t ares_parse_dns_name_escape(ares__buf_t *namebuf, return ARES_EBADNAME; } - if (validate_hostname && !ares__is_hostnamech((unsigned char)val)) { + if (validate_hostname && !ares_is_hostnamech((unsigned char)val)) { return ARES_EBADNAME; } - return ares__buf_append_byte(label, (unsigned char)val); + return ares_buf_append_byte(label, (unsigned char)val); } /* We can just output the character */ - if (validate_hostname && !ares__is_hostnamech(c)) { + if (validate_hostname && !ares_is_hostnamech(c)) { return ARES_EBADNAME; } - return ares__buf_append_byte(label, c); + return ares_buf_append_byte(label, c); } -static ares_status_t ares_split_dns_name(ares__array_t *labels, - ares_bool_t validate_hostname, - const char *name) +static ares_status_t ares_split_dns_name(ares_array_t *labels, + ares_bool_t validate_hostname, + const char *name) { ares_status_t status; - ares__buf_t *label = NULL; - ares__buf_t *namebuf = NULL; + ares_buf_t *label = NULL; + ares_buf_t *namebuf = NULL; size_t i; size_t total_len = 0; unsigned char c; @@ -257,7 +257,7 @@ static ares_status_t ares_split_dns_name(ares__array_t *labels, } /* Put name into a buffer for parsing */ - namebuf = ares__buf_create(); + namebuf = ares_buf_create(); if (namebuf == NULL) { status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ goto done; /* LCOV_EXCL_LINE: OutOfMemory */ @@ -265,7 +265,7 @@ static ares_status_t ares_split_dns_name(ares__array_t *labels, if (*name != '\0') { status = - ares__buf_append(namebuf, (const unsigned char *)name, ares_strlen(name)); + ares_buf_append(namebuf, (const unsigned char *)name, ares_strlen(name)); if (status != ARES_SUCCESS) { goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -278,7 +278,7 @@ static ares_status_t ares_split_dns_name(ares__array_t *labels, goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } - while (ares__buf_fetch_bytes(namebuf, &c, 1) == ARES_SUCCESS) { + while (ares_buf_fetch_bytes(namebuf, &c, 1) == ARES_SUCCESS) { /* New label */ if (c == '.') { label = ares_dns_labels_add(labels); @@ -299,33 +299,33 @@ static ares_status_t ares_split_dns_name(ares__array_t *labels, } /* Output direct character */ - if (validate_hostname && !ares__is_hostnamech(c)) { + if (validate_hostname && !ares_is_hostnamech(c)) { status = ARES_EBADNAME; goto done; } - status = ares__buf_append_byte(label, c); + status = ares_buf_append_byte(label, c); if (status != ARES_SUCCESS) { goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } } /* Remove trailing blank label */ - if (ares__buf_len(ares_dns_labels_get_last(labels)) == 0) { + if (ares_buf_len(ares_dns_labels_get_last(labels)) == 0) { ares_dns_name_labels_del_last(labels); } /* If someone passed in "." there could have been 2 blank labels, check for * that */ - if (ares__array_len(labels) == 1 && - ares__buf_len(ares_dns_labels_get_last(labels)) == 0) { + if (ares_array_len(labels) == 1 && + ares_buf_len(ares_dns_labels_get_last(labels)) == 0) { ares_dns_name_labels_del_last(labels); } /* Scan to make sure label lengths are valid */ - for (i = 0; i < ares__array_len(labels); i++) { - const ares__buf_t *buf = ares_dns_labels_get_at(labels, i); - size_t len = ares__buf_len(buf); + for (i = 0; i < ares_array_len(labels); i++) { + const ares_buf_t *buf = ares_dns_labels_get_at(labels, i); + size_t len = ares_buf_len(buf); /* No 0-length labels, and no labels over 63 bytes */ if (len == 0 || len > 63) { status = ARES_EBADNAME; @@ -335,8 +335,7 @@ static ares_status_t ares_split_dns_name(ares__array_t *labels, } /* Can't exceed maximum (unescaped) length */ - if (ares__array_len(labels) && - total_len + ares__array_len(labels) - 1 > 255) { + if (ares_array_len(labels) && total_len + ares_array_len(labels) - 1 > 255) { status = ARES_EBADNAME; goto done; } @@ -344,19 +343,19 @@ static ares_status_t ares_split_dns_name(ares__array_t *labels, status = ARES_SUCCESS; done: - ares__buf_destroy(namebuf); + ares_buf_destroy(namebuf); return status; } -ares_status_t ares__dns_name_write(ares__buf_t *buf, ares__llist_t **list, - ares_bool_t validate_hostname, - const char *name) +ares_status_t ares_dns_name_write(ares_buf_t *buf, ares_llist_t **list, + ares_bool_t validate_hostname, + const char *name) { const ares_nameoffset_t *off = NULL; size_t name_len; size_t orig_name_len; - size_t pos = ares__buf_len(buf); - ares__array_t *labels = NULL; + size_t pos = ares_buf_len(buf); + ares_array_t *labels = NULL; char name_copy[512]; ares_status_t status; @@ -364,7 +363,7 @@ ares_status_t ares__dns_name_write(ares__buf_t *buf, ares__llist_t **list, return ARES_EFORMERR; /* LCOV_EXCL_LINE: DefensiveCoding */ } - labels = ares__array_create(sizeof(ares__buf_t *), ares_dns_labels_free_cb); + labels = ares_array_create(sizeof(ares_buf_t *), ares_dns_labels_free_cb); if (labels == NULL) { return ARES_ENOMEM; } @@ -376,7 +375,7 @@ ares_status_t ares__dns_name_write(ares__buf_t *buf, ares__llist_t **list, /* Find longest match */ if (list != NULL) { - off = ares__nameoffset_find(*list, name_copy); + off = ares_nameoffset_find(*list, name_copy); if (off != NULL && off->name_len != name_len) { /* truncate */ name_len -= (off->name_len + 1); @@ -393,17 +392,17 @@ ares_status_t ares__dns_name_write(ares__buf_t *buf, ares__llist_t **list, goto done; } - for (i = 0; i < ares__array_len(labels); i++) { + for (i = 0; i < ares_array_len(labels); i++) { size_t len = 0; - const ares__buf_t *lbuf = ares_dns_labels_get_at(labels, i); - const unsigned char *ptr = ares__buf_peek(lbuf, &len); + const ares_buf_t *lbuf = ares_dns_labels_get_at(labels, i); + const unsigned char *ptr = ares_buf_peek(lbuf, &len); - status = ares__buf_append_byte(buf, (unsigned char)(len & 0xFF)); + status = ares_buf_append_byte(buf, (unsigned char)(len & 0xFF)); if (status != ARES_SUCCESS) { goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } - status = ares__buf_append(buf, ptr, len); + status = ares_buf_append(buf, ptr, len); if (status != ARES_SUCCESS) { goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -411,7 +410,7 @@ ares_status_t ares__dns_name_write(ares__buf_t *buf, ares__llist_t **list, /* If we are NOT jumping to another label, output terminator */ if (off == NULL) { - status = ares__buf_append_byte(buf, 0); + status = ares_buf_append_byte(buf, 0); if (status != ARES_SUCCESS) { goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -422,7 +421,7 @@ ares_status_t ares__dns_name_write(ares__buf_t *buf, ares__llist_t **list, if (off != NULL) { unsigned short u16 = (unsigned short)0xC000 | (unsigned short)(off->idx & 0x3FFF); - status = ares__buf_append_be16(buf, u16); + status = ares_buf_append_be16(buf, u16); if (status != ARES_SUCCESS) { goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -432,7 +431,7 @@ ares_status_t ares__dns_name_write(ares__buf_t *buf, ares__llist_t **list, * a prior entry */ if (list != NULL && (off == NULL || off->name_len != orig_name_len) && name_len > 0) { - status = ares__nameoffset_create(list, name /* not truncated copy! */, pos); + status = ares_nameoffset_create(list, name /* not truncated copy! */, pos); if (status != ARES_SUCCESS) { goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -441,7 +440,7 @@ ares_status_t ares__dns_name_write(ares__buf_t *buf, ares__llist_t **list, status = ARES_SUCCESS; done: - ares__array_destroy(labels); + ares_array_destroy(labels); return status; } @@ -465,12 +464,12 @@ static ares_bool_t is_reservedch(int ch) return ARES_FALSE; } -static ares_status_t ares__fetch_dnsname_into_buf(ares__buf_t *buf, - ares__buf_t *dest, size_t len, - ares_bool_t is_hostname) +static ares_status_t ares_fetch_dnsname_into_buf(ares_buf_t *buf, + ares_buf_t *dest, size_t len, + ares_bool_t is_hostname) { size_t remaining_len; - const unsigned char *ptr = ares__buf_peek(buf, &remaining_len); + const unsigned char *ptr = ares_buf_peek(buf, &remaining_len); ares_status_t status; size_t i; @@ -483,7 +482,7 @@ static ares_status_t ares__fetch_dnsname_into_buf(ares__buf_t *buf, /* Hostnames have a very specific allowed character set. Anything outside * of that (non-printable and reserved included) are disallowed */ - if (is_hostname && !ares__is_hostnamech(c)) { + if (is_hostname && !ares_is_hostnamech(c)) { status = ARES_EBADRESP; goto fail; } @@ -495,7 +494,7 @@ static ares_status_t ares__fetch_dnsname_into_buf(ares__buf_t *buf, } /* Non-printable characters need to be output as \DDD */ - if (!ares__isprint(c)) { + if (!ares_isprint(c)) { unsigned char escape[4]; escape[0] = '\\'; @@ -503,7 +502,7 @@ static ares_status_t ares__fetch_dnsname_into_buf(ares__buf_t *buf, escape[2] = '0' + ((c % 100) / 10); escape[3] = '0' + (c % 10); - status = ares__buf_append(dest, escape, sizeof(escape)); + status = ares_buf_append(dest, escape, sizeof(escape)); if (status != ARES_SUCCESS) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -513,39 +512,39 @@ static ares_status_t ares__fetch_dnsname_into_buf(ares__buf_t *buf, /* Reserved characters need to be escaped, otherwise normal */ if (is_reservedch(c)) { - status = ares__buf_append_byte(dest, '\\'); + status = ares_buf_append_byte(dest, '\\'); if (status != ARES_SUCCESS) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } } - status = ares__buf_append_byte(dest, c); + status = ares_buf_append_byte(dest, c); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } } - return ares__buf_consume(buf, len); + return ares_buf_consume(buf, len); fail: return status; } -ares_status_t ares__dns_name_parse(ares__buf_t *buf, char **name, - ares_bool_t is_hostname) +ares_status_t ares_dns_name_parse(ares_buf_t *buf, char **name, + ares_bool_t is_hostname) { size_t save_offset = 0; unsigned char c; ares_status_t status; - ares__buf_t *namebuf = NULL; - size_t label_start = ares__buf_get_position(buf); + ares_buf_t *namebuf = NULL; + size_t label_start = ares_buf_get_position(buf); if (buf == NULL) { return ARES_EFORMERR; } if (name != NULL) { - namebuf = ares__buf_create(); + namebuf = ares_buf_create(); if (namebuf == NULL) { status = ARES_ENOMEM; goto fail; @@ -562,11 +561,11 @@ ares_status_t ares__dns_name_parse(ares__buf_t *buf, char **name, while (1) { /* Keep track of the minimum label starting position to prevent forward * jumping */ - if (label_start > ares__buf_get_position(buf)) { - label_start = ares__buf_get_position(buf); + if (label_start > ares_buf_get_position(buf)) { + label_start = ares_buf_get_position(buf); } - status = ares__buf_fetch_bytes(buf, &c, 1); + status = ares_buf_fetch_bytes(buf, &c, 1); if (status != ARES_SUCCESS) { goto fail; } @@ -590,7 +589,7 @@ ares_status_t ares__dns_name_parse(ares__buf_t *buf, char **name, size_t offset = (size_t)((c & 0x3F) << 8); /* Fetch second byte of the redirect length */ - status = ares__buf_fetch_bytes(buf, &c, 1); + status = ares_buf_fetch_bytes(buf, &c, 1); if (status != ARES_SUCCESS) { goto fail; } @@ -612,10 +611,10 @@ ares_status_t ares__dns_name_parse(ares__buf_t *buf, char **name, /* First time we make a jump, save the current position */ if (save_offset == 0) { - save_offset = ares__buf_get_position(buf); + save_offset = ares_buf_get_position(buf); } - status = ares__buf_set_position(buf, offset); + status = ares_buf_set_position(buf, offset); if (status != ARES_SUCCESS) { status = ARES_EBADNAME; goto fail; @@ -634,14 +633,14 @@ ares_status_t ares__dns_name_parse(ares__buf_t *buf, char **name, /* New label */ /* Labels are separated by periods */ - if (ares__buf_len(namebuf) != 0 && name != NULL) { - status = ares__buf_append_byte(namebuf, '.'); + if (ares_buf_len(namebuf) != 0 && name != NULL) { + status = ares_buf_append_byte(namebuf, '.'); if (status != ARES_SUCCESS) { goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ } } - status = ares__fetch_dnsname_into_buf(buf, namebuf, c, is_hostname); + status = ares_fetch_dnsname_into_buf(buf, namebuf, c, is_hostname); if (status != ARES_SUCCESS) { goto fail; } @@ -650,11 +649,11 @@ ares_status_t ares__dns_name_parse(ares__buf_t *buf, char **name, /* Restore offset read after first redirect/pointer as this is where the DNS * message continues */ if (save_offset) { - ares__buf_set_position(buf, save_offset); + ares_buf_set_position(buf, save_offset); } if (name != NULL) { - *name = ares__buf_finish_str(namebuf, NULL); + *name = ares_buf_finish_str(namebuf, NULL); if (*name == NULL) { status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ @@ -669,6 +668,6 @@ ares_status_t ares__dns_name_parse(ares__buf_t *buf, char **name, status = ARES_EBADNAME; } - ares__buf_destroy(namebuf); + ares_buf_destroy(namebuf); return status; } diff --git a/deps/cares/src/lib/record/ares_dns_parse.c b/deps/cares/src/lib/record/ares_dns_parse.c index 57cb0f714e12e1..0c545d7aa18ada 100644 --- a/deps/cares/src/lib/record/ares_dns_parse.c +++ b/deps/cares/src/lib/record/ares_dns_parse.c @@ -29,17 +29,17 @@ # include #endif -static size_t ares_dns_rr_remaining_len(const ares__buf_t *buf, size_t orig_len, +static size_t ares_dns_rr_remaining_len(const ares_buf_t *buf, size_t orig_len, size_t rdlength) { - size_t used_len = orig_len - ares__buf_len(buf); + size_t used_len = orig_len - ares_buf_len(buf); if (used_len >= rdlength) { return 0; } return rdlength - used_len; } -static ares_status_t ares_dns_parse_and_set_dns_name(ares__buf_t *buf, +static ares_status_t ares_dns_parse_and_set_dns_name(ares_buf_t *buf, ares_bool_t is_hostname, ares_dns_rr_t *rr, ares_dns_rr_key_t key) @@ -47,7 +47,7 @@ static ares_status_t ares_dns_parse_and_set_dns_name(ares__buf_t *buf, ares_status_t status; char *name = NULL; - status = ares__dns_name_parse(buf, &name, is_hostname); + status = ares_dns_name_parse(buf, &name, is_hostname); if (status != ARES_SUCCESS) { return status; } @@ -60,7 +60,7 @@ static ares_status_t ares_dns_parse_and_set_dns_name(ares__buf_t *buf, return ARES_SUCCESS; } -static ares_status_t ares_dns_parse_and_set_dns_str(ares__buf_t *buf, +static ares_status_t ares_dns_parse_and_set_dns_str(ares_buf_t *buf, size_t max_len, ares_dns_rr_t *rr, ares_dns_rr_key_t key, @@ -69,7 +69,7 @@ static ares_status_t ares_dns_parse_and_set_dns_str(ares__buf_t *buf, ares_status_t status; char *str = NULL; - status = ares__buf_parse_dns_str(buf, max_len, &str); + status = ares_buf_parse_dns_str(buf, max_len, &str); if (status != ARES_SUCCESS) { return status; } @@ -88,34 +88,35 @@ static ares_status_t ares_dns_parse_and_set_dns_str(ares__buf_t *buf, } static ares_status_t - ares_dns_parse_and_set_dns_abin(ares__buf_t *buf, size_t max_len, + ares_dns_parse_and_set_dns_abin(ares_buf_t *buf, size_t max_len, ares_dns_rr_t *rr, ares_dns_rr_key_t key, ares_bool_t validate_printable) { - ares_status_t status; - ares__dns_multistring_t *strs = NULL; + ares_status_t status; + ares_dns_multistring_t *strs = NULL; - status = ares__buf_parse_dns_abinstr(buf, max_len, &strs, validate_printable); + status = + ares_dns_multistring_parse_buf(buf, max_len, &strs, validate_printable); if (status != ARES_SUCCESS) { return status; } status = ares_dns_rr_set_abin_own(rr, key, strs); if (status != ARES_SUCCESS) { - ares__dns_multistring_destroy(strs); + ares_dns_multistring_destroy(strs); return status; } return ARES_SUCCESS; } -static ares_status_t ares_dns_parse_and_set_be32(ares__buf_t *buf, +static ares_status_t ares_dns_parse_and_set_be32(ares_buf_t *buf, ares_dns_rr_t *rr, ares_dns_rr_key_t key) { ares_status_t status; unsigned int u32; - status = ares__buf_fetch_be32(buf, &u32); + status = ares_buf_fetch_be32(buf, &u32); if (status != ARES_SUCCESS) { return status; } @@ -123,14 +124,14 @@ static ares_status_t ares_dns_parse_and_set_be32(ares__buf_t *buf, return ares_dns_rr_set_u32(rr, key, u32); } -static ares_status_t ares_dns_parse_and_set_be16(ares__buf_t *buf, +static ares_status_t ares_dns_parse_and_set_be16(ares_buf_t *buf, ares_dns_rr_t *rr, ares_dns_rr_key_t key) { ares_status_t status; unsigned short u16; - status = ares__buf_fetch_be16(buf, &u16); + status = ares_buf_fetch_be16(buf, &u16); if (status != ARES_SUCCESS) { return status; } @@ -138,14 +139,14 @@ static ares_status_t ares_dns_parse_and_set_be16(ares__buf_t *buf, return ares_dns_rr_set_u16(rr, key, u16); } -static ares_status_t ares_dns_parse_and_set_u8(ares__buf_t *buf, +static ares_status_t ares_dns_parse_and_set_u8(ares_buf_t *buf, ares_dns_rr_t *rr, ares_dns_rr_key_t key) { ares_status_t status; unsigned char u8; - status = ares__buf_fetch_bytes(buf, &u8, 1); + status = ares_buf_fetch_bytes(buf, &u8, 1); if (status != ARES_SUCCESS) { return status; } @@ -153,7 +154,7 @@ static ares_status_t ares_dns_parse_and_set_u8(ares__buf_t *buf, return ares_dns_rr_set_u8(rr, key, u8); } -static ares_status_t ares_dns_parse_rr_a(ares__buf_t *buf, ares_dns_rr_t *rr, +static ares_status_t ares_dns_parse_rr_a(ares_buf_t *buf, ares_dns_rr_t *rr, size_t rdlength) { struct in_addr addr; @@ -161,7 +162,7 @@ static ares_status_t ares_dns_parse_rr_a(ares__buf_t *buf, ares_dns_rr_t *rr, (void)rdlength; /* Not needed */ - status = ares__buf_fetch_bytes(buf, (unsigned char *)&addr, sizeof(addr)); + status = ares_buf_fetch_bytes(buf, (unsigned char *)&addr, sizeof(addr)); if (status != ARES_SUCCESS) { return status; } @@ -169,7 +170,7 @@ static ares_status_t ares_dns_parse_rr_a(ares__buf_t *buf, ares_dns_rr_t *rr, return ares_dns_rr_set_addr(rr, ARES_RR_A_ADDR, &addr); } -static ares_status_t ares_dns_parse_rr_ns(ares__buf_t *buf, ares_dns_rr_t *rr, +static ares_status_t ares_dns_parse_rr_ns(ares_buf_t *buf, ares_dns_rr_t *rr, size_t rdlength) { (void)rdlength; /* Not needed */ @@ -178,8 +179,8 @@ static ares_status_t ares_dns_parse_rr_ns(ares__buf_t *buf, ares_dns_rr_t *rr, ARES_RR_NS_NSDNAME); } -static ares_status_t ares_dns_parse_rr_cname(ares__buf_t *buf, - ares_dns_rr_t *rr, size_t rdlength) +static ares_status_t ares_dns_parse_rr_cname(ares_buf_t *buf, ares_dns_rr_t *rr, + size_t rdlength) { (void)rdlength; /* Not needed */ @@ -187,7 +188,7 @@ static ares_status_t ares_dns_parse_rr_cname(ares__buf_t *buf, ARES_RR_CNAME_CNAME); } -static ares_status_t ares_dns_parse_rr_soa(ares__buf_t *buf, ares_dns_rr_t *rr, +static ares_status_t ares_dns_parse_rr_soa(ares_buf_t *buf, ares_dns_rr_t *rr, size_t rdlength) { ares_status_t status; @@ -236,7 +237,7 @@ static ares_status_t ares_dns_parse_rr_soa(ares__buf_t *buf, ares_dns_rr_t *rr, return ares_dns_parse_and_set_be32(buf, rr, ARES_RR_SOA_MINIMUM); } -static ares_status_t ares_dns_parse_rr_ptr(ares__buf_t *buf, ares_dns_rr_t *rr, +static ares_status_t ares_dns_parse_rr_ptr(ares_buf_t *buf, ares_dns_rr_t *rr, size_t rdlength) { (void)rdlength; /* Not needed */ @@ -245,11 +246,11 @@ static ares_status_t ares_dns_parse_rr_ptr(ares__buf_t *buf, ares_dns_rr_t *rr, ARES_RR_PTR_DNAME); } -static ares_status_t ares_dns_parse_rr_hinfo(ares__buf_t *buf, - ares_dns_rr_t *rr, size_t rdlength) +static ares_status_t ares_dns_parse_rr_hinfo(ares_buf_t *buf, ares_dns_rr_t *rr, + size_t rdlength) { ares_status_t status; - size_t orig_len = ares__buf_len(buf); + size_t orig_len = ares_buf_len(buf); (void)rdlength; /* Not needed */ @@ -269,7 +270,7 @@ static ares_status_t ares_dns_parse_rr_hinfo(ares__buf_t *buf, return status; } -static ares_status_t ares_dns_parse_rr_mx(ares__buf_t *buf, ares_dns_rr_t *rr, +static ares_status_t ares_dns_parse_rr_mx(ares_buf_t *buf, ares_dns_rr_t *rr, size_t rdlength) { ares_status_t status; @@ -287,18 +288,18 @@ static ares_status_t ares_dns_parse_rr_mx(ares__buf_t *buf, ares_dns_rr_t *rr, ARES_RR_MX_EXCHANGE); } -static ares_status_t ares_dns_parse_rr_txt(ares__buf_t *buf, ares_dns_rr_t *rr, +static ares_status_t ares_dns_parse_rr_txt(ares_buf_t *buf, ares_dns_rr_t *rr, size_t rdlength) { return ares_dns_parse_and_set_dns_abin(buf, rdlength, rr, ARES_RR_TXT_DATA, ARES_FALSE); } -static ares_status_t ares_dns_parse_rr_sig(ares__buf_t *buf, ares_dns_rr_t *rr, +static ares_status_t ares_dns_parse_rr_sig(ares_buf_t *buf, ares_dns_rr_t *rr, size_t rdlength) { ares_status_t status; - size_t orig_len = ares__buf_len(buf); + size_t orig_len = ares_buf_len(buf); size_t len; unsigned char *data; @@ -348,7 +349,7 @@ static ares_status_t ares_dns_parse_rr_sig(ares__buf_t *buf, ares_dns_rr_t *rr, return ARES_EBADRESP; } - status = ares__buf_fetch_bytes_dup(buf, len, ARES_FALSE, &data); + status = ares_buf_fetch_bytes_dup(buf, len, ARES_FALSE, &data); if (status != ARES_SUCCESS) { return status; } @@ -362,7 +363,7 @@ static ares_status_t ares_dns_parse_rr_sig(ares__buf_t *buf, ares_dns_rr_t *rr, return ARES_SUCCESS; } -static ares_status_t ares_dns_parse_rr_aaaa(ares__buf_t *buf, ares_dns_rr_t *rr, +static ares_status_t ares_dns_parse_rr_aaaa(ares_buf_t *buf, ares_dns_rr_t *rr, size_t rdlength) { struct ares_in6_addr addr; @@ -370,7 +371,7 @@ static ares_status_t ares_dns_parse_rr_aaaa(ares__buf_t *buf, ares_dns_rr_t *rr, (void)rdlength; /* Not needed */ - status = ares__buf_fetch_bytes(buf, (unsigned char *)&addr, sizeof(addr)); + status = ares_buf_fetch_bytes(buf, (unsigned char *)&addr, sizeof(addr)); if (status != ARES_SUCCESS) { return status; } @@ -378,7 +379,7 @@ static ares_status_t ares_dns_parse_rr_aaaa(ares__buf_t *buf, ares_dns_rr_t *rr, return ares_dns_rr_set_addr6(rr, ARES_RR_AAAA_ADDR, &addr); } -static ares_status_t ares_dns_parse_rr_srv(ares__buf_t *buf, ares_dns_rr_t *rr, +static ares_status_t ares_dns_parse_rr_srv(ares_buf_t *buf, ares_dns_rr_t *rr, size_t rdlength) { ares_status_t status; @@ -408,11 +409,11 @@ static ares_status_t ares_dns_parse_rr_srv(ares__buf_t *buf, ares_dns_rr_t *rr, ARES_RR_SRV_TARGET); } -static ares_status_t ares_dns_parse_rr_naptr(ares__buf_t *buf, - ares_dns_rr_t *rr, size_t rdlength) +static ares_status_t ares_dns_parse_rr_naptr(ares_buf_t *buf, ares_dns_rr_t *rr, + size_t rdlength) { ares_status_t status; - size_t orig_len = ares__buf_len(buf); + size_t orig_len = ares_buf_len(buf); /* ORDER */ status = ares_dns_parse_and_set_be16(buf, rr, ARES_RR_NAPTR_ORDER); @@ -455,13 +456,13 @@ static ares_status_t ares_dns_parse_rr_naptr(ares__buf_t *buf, ARES_RR_NAPTR_REPLACEMENT); } -static ares_status_t ares_dns_parse_rr_opt(ares__buf_t *buf, ares_dns_rr_t *rr, +static ares_status_t ares_dns_parse_rr_opt(ares_buf_t *buf, ares_dns_rr_t *rr, size_t rdlength, unsigned short raw_class, unsigned int raw_ttl) { ares_status_t status; - size_t orig_len = ares__buf_len(buf); + size_t orig_len = ares_buf_len(buf); unsigned short rcode_high; status = ares_dns_rr_set_u16(rr, ARES_RR_OPT_UDP_SIZE, raw_class); @@ -493,19 +494,19 @@ static ares_status_t ares_dns_parse_rr_opt(ares__buf_t *buf, ares_dns_rr_t *rr, unsigned char *val = NULL; /* Fetch be16 option */ - status = ares__buf_fetch_be16(buf, &opt); + status = ares_buf_fetch_be16(buf, &opt); if (status != ARES_SUCCESS) { return status; } /* Fetch be16 length */ - status = ares__buf_fetch_be16(buf, &len); + status = ares_buf_fetch_be16(buf, &len); if (status != ARES_SUCCESS) { return status; } if (len) { - status = ares__buf_fetch_bytes_dup(buf, len, ARES_TRUE, &val); + status = ares_buf_fetch_bytes_dup(buf, len, ARES_TRUE, &val); if (status != ARES_SUCCESS) { return status; } @@ -520,11 +521,11 @@ static ares_status_t ares_dns_parse_rr_opt(ares__buf_t *buf, ares_dns_rr_t *rr, return ARES_SUCCESS; } -static ares_status_t ares_dns_parse_rr_tlsa(ares__buf_t *buf, ares_dns_rr_t *rr, +static ares_status_t ares_dns_parse_rr_tlsa(ares_buf_t *buf, ares_dns_rr_t *rr, size_t rdlength) { ares_status_t status; - size_t orig_len = ares__buf_len(buf); + size_t orig_len = ares_buf_len(buf); size_t len; unsigned char *data; @@ -548,7 +549,7 @@ static ares_status_t ares_dns_parse_rr_tlsa(ares__buf_t *buf, ares_dns_rr_t *rr, return ARES_EBADRESP; } - status = ares__buf_fetch_bytes_dup(buf, len, ARES_FALSE, &data); + status = ares_buf_fetch_bytes_dup(buf, len, ARES_FALSE, &data); if (status != ARES_SUCCESS) { return status; } @@ -562,11 +563,11 @@ static ares_status_t ares_dns_parse_rr_tlsa(ares__buf_t *buf, ares_dns_rr_t *rr, return ARES_SUCCESS; } -static ares_status_t ares_dns_parse_rr_svcb(ares__buf_t *buf, ares_dns_rr_t *rr, +static ares_status_t ares_dns_parse_rr_svcb(ares_buf_t *buf, ares_dns_rr_t *rr, size_t rdlength) { ares_status_t status; - size_t orig_len = ares__buf_len(buf); + size_t orig_len = ares_buf_len(buf); status = ares_dns_parse_and_set_be16(buf, rr, ARES_RR_SVCB_PRIORITY); if (status != ARES_SUCCESS) { @@ -586,19 +587,19 @@ static ares_status_t ares_dns_parse_rr_svcb(ares__buf_t *buf, ares_dns_rr_t *rr, unsigned char *val = NULL; /* Fetch be16 option */ - status = ares__buf_fetch_be16(buf, &opt); + status = ares_buf_fetch_be16(buf, &opt); if (status != ARES_SUCCESS) { return status; } /* Fetch be16 length */ - status = ares__buf_fetch_be16(buf, &len); + status = ares_buf_fetch_be16(buf, &len); if (status != ARES_SUCCESS) { return status; } if (len) { - status = ares__buf_fetch_bytes_dup(buf, len, ARES_TRUE, &val); + status = ares_buf_fetch_bytes_dup(buf, len, ARES_TRUE, &val); if (status != ARES_SUCCESS) { return status; } @@ -613,11 +614,11 @@ static ares_status_t ares_dns_parse_rr_svcb(ares__buf_t *buf, ares_dns_rr_t *rr, return ARES_SUCCESS; } -static ares_status_t ares_dns_parse_rr_https(ares__buf_t *buf, - ares_dns_rr_t *rr, size_t rdlength) +static ares_status_t ares_dns_parse_rr_https(ares_buf_t *buf, ares_dns_rr_t *rr, + size_t rdlength) { ares_status_t status; - size_t orig_len = ares__buf_len(buf); + size_t orig_len = ares_buf_len(buf); status = ares_dns_parse_and_set_be16(buf, rr, ARES_RR_HTTPS_PRIORITY); if (status != ARES_SUCCESS) { @@ -637,19 +638,19 @@ static ares_status_t ares_dns_parse_rr_https(ares__buf_t *buf, unsigned char *val = NULL; /* Fetch be16 option */ - status = ares__buf_fetch_be16(buf, &opt); + status = ares_buf_fetch_be16(buf, &opt); if (status != ARES_SUCCESS) { return status; } /* Fetch be16 length */ - status = ares__buf_fetch_be16(buf, &len); + status = ares_buf_fetch_be16(buf, &len); if (status != ARES_SUCCESS) { return status; } if (len) { - status = ares__buf_fetch_bytes_dup(buf, len, ARES_TRUE, &val); + status = ares_buf_fetch_bytes_dup(buf, len, ARES_TRUE, &val); if (status != ARES_SUCCESS) { return status; } @@ -664,12 +665,12 @@ static ares_status_t ares_dns_parse_rr_https(ares__buf_t *buf, return ARES_SUCCESS; } -static ares_status_t ares_dns_parse_rr_uri(ares__buf_t *buf, ares_dns_rr_t *rr, +static ares_status_t ares_dns_parse_rr_uri(ares_buf_t *buf, ares_dns_rr_t *rr, size_t rdlength) { char *name = NULL; ares_status_t status; - size_t orig_len = ares__buf_len(buf); + size_t orig_len = ares_buf_len(buf); size_t remaining_len; /* PRIORITY */ @@ -693,12 +694,12 @@ static ares_status_t ares_dns_parse_rr_uri(ares__buf_t *buf, ares_dns_rr_t *rr, } /* NOTE: Not in DNS string format */ - status = ares__buf_fetch_str_dup(buf, remaining_len, &name); + status = ares_buf_fetch_str_dup(buf, remaining_len, &name); if (status != ARES_SUCCESS) { return status; } - if (!ares__str_isprint(name, remaining_len)) { + if (!ares_str_isprint(name, remaining_len)) { ares_free(name); return ARES_EBADRESP; } @@ -713,13 +714,13 @@ static ares_status_t ares_dns_parse_rr_uri(ares__buf_t *buf, ares_dns_rr_t *rr, return ARES_SUCCESS; } -static ares_status_t ares_dns_parse_rr_caa(ares__buf_t *buf, ares_dns_rr_t *rr, +static ares_status_t ares_dns_parse_rr_caa(ares_buf_t *buf, ares_dns_rr_t *rr, size_t rdlength) { unsigned char *data = NULL; size_t data_len = 0; ares_status_t status; - size_t orig_len = ares__buf_len(buf); + size_t orig_len = ares_buf_len(buf); /* CRITICAL */ status = ares_dns_parse_and_set_u8(buf, rr, ARES_RR_CAA_CRITICAL); @@ -741,7 +742,7 @@ static ares_status_t ares_dns_parse_rr_caa(ares__buf_t *buf, ares_dns_rr_t *rr, status = ARES_EBADRESP; return status; } - status = ares__buf_fetch_bytes_dup(buf, data_len, ARES_TRUE, &data); + status = ares_buf_fetch_bytes_dup(buf, data_len, ARES_TRUE, &data); if (status != ARES_SUCCESS) { return status; } @@ -756,7 +757,7 @@ static ares_status_t ares_dns_parse_rr_caa(ares__buf_t *buf, ares_dns_rr_t *rr, return ARES_SUCCESS; } -static ares_status_t ares_dns_parse_rr_raw_rr(ares__buf_t *buf, +static ares_status_t ares_dns_parse_rr_raw_rr(ares_buf_t *buf, ares_dns_rr_t *rr, size_t rdlength, unsigned short raw_type) @@ -768,7 +769,7 @@ static ares_status_t ares_dns_parse_rr_raw_rr(ares__buf_t *buf, return ARES_SUCCESS; } - status = ares__buf_fetch_bytes_dup(buf, rdlength, ARES_FALSE, &bytes); + status = ares_buf_fetch_bytes_dup(buf, rdlength, ARES_FALSE, &bytes); if (status != ARES_SUCCESS) { return status; } @@ -789,7 +790,7 @@ static ares_status_t ares_dns_parse_rr_raw_rr(ares__buf_t *buf, return ARES_SUCCESS; } -static ares_status_t ares_dns_parse_header(ares__buf_t *buf, unsigned int flags, +static ares_status_t ares_dns_parse_header(ares_buf_t *buf, unsigned int flags, ares_dns_record_t **dnsrec, unsigned short *qdcount, unsigned short *ancount, @@ -833,13 +834,13 @@ static ares_status_t ares_dns_parse_header(ares__buf_t *buf, unsigned int flags, */ /* ID */ - status = ares__buf_fetch_be16(buf, &id); + status = ares_buf_fetch_be16(buf, &id); if (status != ARES_SUCCESS) { goto fail; } /* Flags */ - status = ares__buf_fetch_be16(buf, &u16); + status = ares_buf_fetch_be16(buf, &u16); if (status != ARES_SUCCESS) { goto fail; } @@ -888,25 +889,25 @@ static ares_status_t ares_dns_parse_header(ares__buf_t *buf, unsigned int flags, rcode = u16 & 0xf; /* QDCOUNT */ - status = ares__buf_fetch_be16(buf, qdcount); + status = ares_buf_fetch_be16(buf, qdcount); if (status != ARES_SUCCESS) { goto fail; } /* ANCOUNT */ - status = ares__buf_fetch_be16(buf, ancount); + status = ares_buf_fetch_be16(buf, ancount); if (status != ARES_SUCCESS) { goto fail; } /* NSCOUNT */ - status = ares__buf_fetch_be16(buf, nscount); + status = ares_buf_fetch_be16(buf, nscount); if (status != ARES_SUCCESS) { goto fail; } /* ARCOUNT */ - status = ares__buf_fetch_be16(buf, arcount); + status = ares_buf_fetch_be16(buf, arcount); if (status != ARES_SUCCESS) { goto fail; } @@ -957,7 +958,7 @@ static ares_status_t ares_dns_parse_header(ares__buf_t *buf, unsigned int flags, } static ares_status_t - ares_dns_parse_rr_data(ares__buf_t *buf, size_t rdlength, ares_dns_rr_t *rr, + ares_dns_parse_rr_data(ares_buf_t *buf, size_t rdlength, ares_dns_rr_t *rr, ares_dns_rec_type_t type, unsigned short raw_type, unsigned short raw_class, unsigned int raw_ttl) { @@ -1006,7 +1007,7 @@ static ares_status_t return ARES_EFORMERR; } -static ares_status_t ares_dns_parse_qd(ares__buf_t *buf, +static ares_status_t ares_dns_parse_qd(ares_buf_t *buf, ares_dns_record_t *dnsrec) { char *name = NULL; @@ -1031,20 +1032,20 @@ static ares_status_t ares_dns_parse_qd(ares__buf_t *buf, */ /* Name */ - status = ares__dns_name_parse(buf, &name, ARES_FALSE); + status = ares_dns_name_parse(buf, &name, ARES_FALSE); if (status != ARES_SUCCESS) { goto done; } /* Type */ - status = ares__buf_fetch_be16(buf, &u16); + status = ares_buf_fetch_be16(buf, &u16); if (status != ARES_SUCCESS) { goto done; } type = u16; /* Class */ - status = ares__buf_fetch_be16(buf, &u16); + status = ares_buf_fetch_be16(buf, &u16); if (status != ARES_SUCCESS) { goto done; } @@ -1061,7 +1062,7 @@ static ares_status_t ares_dns_parse_qd(ares__buf_t *buf, return status; } -static ares_status_t ares_dns_parse_rr(ares__buf_t *buf, unsigned int flags, +static ares_status_t ares_dns_parse_rr(ares_buf_t *buf, unsigned int flags, ares_dns_section_t sect, ares_dns_record_t *dnsrec) { @@ -1102,13 +1103,13 @@ static ares_status_t ares_dns_parse_rr(ares__buf_t *buf, unsigned int flags, */ /* Name */ - status = ares__dns_name_parse(buf, &name, ARES_FALSE); + status = ares_dns_name_parse(buf, &name, ARES_FALSE); if (status != ARES_SUCCESS) { goto done; } /* Type */ - status = ares__buf_fetch_be16(buf, &u16); + status = ares_buf_fetch_be16(buf, &u16); if (status != ARES_SUCCESS) { goto done; } @@ -1116,20 +1117,20 @@ static ares_status_t ares_dns_parse_rr(ares__buf_t *buf, unsigned int flags, raw_type = u16; /* Only used for raw rr data */ /* Class */ - status = ares__buf_fetch_be16(buf, &u16); + status = ares_buf_fetch_be16(buf, &u16); if (status != ARES_SUCCESS) { goto done; } qclass = u16; /* TTL */ - status = ares__buf_fetch_be32(buf, &ttl); + status = ares_buf_fetch_be32(buf, &ttl); if (status != ARES_SUCCESS) { goto done; } /* Length */ - status = ares__buf_fetch_be16(buf, &u16); + status = ares_buf_fetch_be16(buf, &u16); if (status != ARES_SUCCESS) { goto done; } @@ -1139,7 +1140,7 @@ static ares_status_t ares_dns_parse_rr(ares__buf_t *buf, unsigned int flags, type = ARES_REC_TYPE_RAW_RR; } - namecomp = ares_dns_rec_type_allow_name_compression(type); + namecomp = ares_dns_rec_allow_name_comp(type); if (sect == ARES_SECTION_ANSWER && (flags & (namecomp ? ARES_DNS_PARSE_AN_BASE_RAW : ARES_DNS_PARSE_AN_EXT_RAW))) { @@ -1157,7 +1158,7 @@ static ares_status_t ares_dns_parse_rr(ares__buf_t *buf, unsigned int flags, } /* Pull into another buffer for safety */ - if (rdlength > ares__buf_len(buf)) { + if (rdlength > ares_buf_len(buf)) { status = ARES_EBADRESP; goto done; } @@ -1173,7 +1174,7 @@ static ares_status_t ares_dns_parse_rr(ares__buf_t *buf, unsigned int flags, /* Record the current remaining length in the buffer so we can tell how * much was processed */ - remaining_len = ares__buf_len(buf); + remaining_len = ares_buf_len(buf); /* Fill in the data for the rr */ status = ares_dns_parse_rr_data(buf, rdlength, rr, type, raw_type, @@ -1183,7 +1184,7 @@ static ares_status_t ares_dns_parse_rr(ares__buf_t *buf, unsigned int flags, } /* Determine how many bytes were processed */ - processed_len = remaining_len - ares__buf_len(buf); + processed_len = remaining_len - ares_buf_len(buf); /* If too many bytes were processed, error! */ if (processed_len > rdlength) { @@ -1194,7 +1195,7 @@ static ares_status_t ares_dns_parse_rr(ares__buf_t *buf, unsigned int flags, /* If too few bytes were processed, consume the unprocessed data for this * record as the parser may not have wanted/needed to use it */ if (processed_len < rdlength) { - ares__buf_consume(buf, rdlength - processed_len); + ares_buf_consume(buf, rdlength - processed_len); } @@ -1203,7 +1204,7 @@ static ares_status_t ares_dns_parse_rr(ares__buf_t *buf, unsigned int flags, return status; } -static ares_status_t ares_dns_parse_buf(ares__buf_t *buf, unsigned int flags, +static ares_status_t ares_dns_parse_buf(ares_buf_t *buf, unsigned int flags, ares_dns_record_t **dnsrec) { ares_status_t status; @@ -1218,7 +1219,7 @@ static ares_status_t ares_dns_parse_buf(ares__buf_t *buf, unsigned int flags, } /* Maximum DNS packet size is 64k, even over TCP */ - if (ares__buf_len(buf) > 0xFFFF) { + if (ares_buf_len(buf) > 0xFFFF) { return ARES_EFORMERR; } @@ -1309,20 +1310,20 @@ static ares_status_t ares_dns_parse_buf(ares__buf_t *buf, unsigned int flags, ares_status_t ares_dns_parse(const unsigned char *buf, size_t buf_len, unsigned int flags, ares_dns_record_t **dnsrec) { - ares__buf_t *parser = NULL; + ares_buf_t *parser = NULL; ares_status_t status; if (buf == NULL || buf_len == 0 || dnsrec == NULL) { return ARES_EFORMERR; } - parser = ares__buf_create_const(buf, buf_len); + parser = ares_buf_create_const(buf, buf_len); if (parser == NULL) { return ARES_ENOMEM; } status = ares_dns_parse_buf(parser, flags, dnsrec); - ares__buf_destroy(parser); + ares_buf_destroy(parser); return status; } diff --git a/deps/cares/src/lib/record/ares_dns_private.h b/deps/cares/src/lib/record/ares_dns_private.h index 5b86fed51f9851..e8fd600d1d2008 100644 --- a/deps/cares/src/lib/record/ares_dns_private.h +++ b/deps/cares/src/lib/record/ares_dns_private.h @@ -26,26 +26,26 @@ #ifndef __ARES_DNS_PRIVATE_H #define __ARES_DNS_PRIVATE_H -ares_status_t ares_dns_record_duplicate_ex(ares_dns_record_t **dest, - const ares_dns_record_t *src); -ares_bool_t ares_dns_rec_type_allow_name_compression(ares_dns_rec_type_t type); -ares_bool_t ares_dns_opcode_isvalid(ares_dns_opcode_t opcode); -ares_bool_t ares_dns_rcode_isvalid(ares_dns_rcode_t rcode); -ares_bool_t ares_dns_flags_arevalid(unsigned short flags); -ares_bool_t ares_dns_rec_type_isvalid(ares_dns_rec_type_t type, - ares_bool_t is_query); -ares_bool_t ares_dns_class_isvalid(ares_dns_class_t qclass, - ares_dns_rec_type_t type, - ares_bool_t is_query); -ares_bool_t ares_dns_section_isvalid(ares_dns_section_t sect); +ares_status_t ares_dns_record_duplicate_ex(ares_dns_record_t **dest, + const ares_dns_record_t *src); +ares_bool_t ares_dns_rec_allow_name_comp(ares_dns_rec_type_t type); +ares_bool_t ares_dns_opcode_isvalid(ares_dns_opcode_t opcode); +ares_bool_t ares_dns_rcode_isvalid(ares_dns_rcode_t rcode); +ares_bool_t ares_dns_flags_arevalid(unsigned short flags); +ares_bool_t ares_dns_rec_type_isvalid(ares_dns_rec_type_t type, + ares_bool_t is_query); +ares_bool_t ares_dns_class_isvalid(ares_dns_class_t qclass, + ares_dns_rec_type_t type, + ares_bool_t is_query); +ares_bool_t ares_dns_section_isvalid(ares_dns_section_t sect); ares_status_t ares_dns_rr_set_str_own(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, char *val); ares_status_t ares_dns_rr_set_bin_own(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, unsigned char *val, size_t len); -ares_status_t ares_dns_rr_set_abin_own(ares_dns_rr_t *dns_rr, - ares_dns_rr_key_t key, - ares__dns_multistring_t *strs); +ares_status_t ares_dns_rr_set_abin_own(ares_dns_rr_t *dns_rr, + ares_dns_rr_key_t key, + ares_dns_multistring_t *strs); ares_status_t ares_dns_rr_set_opt_own(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, unsigned short opt, unsigned char *val, size_t val_len); @@ -53,16 +53,16 @@ ares_status_t ares_dns_record_rr_prealloc(ares_dns_record_t *dnsrec, ares_dns_section_t sect, size_t cnt); ares_dns_rr_t *ares_dns_get_opt_rr(ares_dns_record_t *rec); const ares_dns_rr_t *ares_dns_get_opt_rr_const(const ares_dns_record_t *rec); -void ares_dns_record_write_ttl_decrement(ares_dns_record_t *dnsrec, - unsigned int ttl_decrement); +void ares_dns_record_ttl_decrement(ares_dns_record_t *dnsrec, + unsigned int ttl_decrement); /* Same as ares_dns_write() but appends to an existing buffer object */ -ares_status_t ares_dns_write_buf(const ares_dns_record_t *dnsrec, - ares__buf_t *buf); +ares_status_t ares_dns_write_buf(const ares_dns_record_t *dnsrec, + ares_buf_t *buf); /* Same as ares_dns_write_buf(), but prepends a 16bit length */ -ares_status_t ares_dns_write_buf_tcp(const ares_dns_record_t *dnsrec, - ares__buf_t *buf); +ares_status_t ares_dns_write_buf_tcp(const ares_dns_record_t *dnsrec, + ares_buf_t *buf); /*! Create a DNS record object for a query. The arguments are the same as * those for ares_create_query(). @@ -99,15 +99,15 @@ struct ares_dns_qd { typedef struct { struct in_addr addr; -} ares__dns_a_t; +} ares_dns_a_t; typedef struct { char *nsdname; -} ares__dns_ns_t; +} ares_dns_ns_t; typedef struct { char *cname; -} ares__dns_cname_t; +} ares_dns_cname_t; typedef struct { char *mname; @@ -117,25 +117,25 @@ typedef struct { unsigned int retry; unsigned int expire; unsigned int minimum; -} ares__dns_soa_t; +} ares_dns_soa_t; typedef struct { char *dname; -} ares__dns_ptr_t; +} ares_dns_ptr_t; typedef struct { char *cpu; char *os; -} ares__dns_hinfo_t; +} ares_dns_hinfo_t; typedef struct { unsigned short preference; char *exchange; -} ares__dns_mx_t; +} ares_dns_mx_t; typedef struct { - ares__dns_multistring_t *strs; -} ares__dns_txt_t; + ares_dns_multistring_t *strs; +} ares_dns_txt_t; typedef struct { unsigned short type_covered; @@ -148,18 +148,18 @@ typedef struct { char *signers_name; unsigned char *signature; size_t signature_len; -} ares__dns_sig_t; +} ares_dns_sig_t; typedef struct { struct ares_in6_addr addr; -} ares__dns_aaaa_t; +} ares_dns_aaaa_t; typedef struct { unsigned short priority; unsigned short weight; unsigned short port; char *target; -} ares__dns_srv_t; +} ares_dns_srv_t; typedef struct { unsigned short order; @@ -168,21 +168,21 @@ typedef struct { char *services; char *regexp; char *replacement; -} ares__dns_naptr_t; +} ares_dns_naptr_t; typedef struct { unsigned short opt; unsigned char *val; size_t val_len; -} ares__dns_optval_t; +} ares_dns_optval_t; typedef struct { unsigned short udp_size; /*!< taken from class */ unsigned char version; /*!< taken from bits 8-16 of ttl */ unsigned short flags; /*!< Flags, remaining 16 bits, though only * 1 currently defined */ - ares__array_t *options; /*!< Type is ares__dns_optval_t */ -} ares__dns_opt_t; + ares_array_t *options; /*!< Type is ares_dns_optval_t */ +} ares_dns_opt_t; typedef struct { unsigned char cert_usage; @@ -190,26 +190,26 @@ typedef struct { unsigned char match; unsigned char *data; size_t data_len; -} ares__dns_tlsa_t; +} ares_dns_tlsa_t; typedef struct { unsigned short priority; char *target; - ares__array_t *params; /*!< Type is ares__dns_optval_t */ -} ares__dns_svcb_t; + ares_array_t *params; /*!< Type is ares_dns_optval_t */ +} ares_dns_svcb_t; typedef struct { unsigned short priority; unsigned short weight; char *target; -} ares__dns_uri_t; +} ares_dns_uri_t; typedef struct { unsigned char critical; char *tag; unsigned char *value; size_t value_len; -} ares__dns_caa_t; +} ares_dns_caa_t; /*! Raw, unparsed RR data */ typedef struct { @@ -217,7 +217,7 @@ typedef struct { * of those values since it wasn't parsed */ unsigned char *data; /*!< Raw RR data */ size_t length; /*!< Length of raw RR data */ -} ares__dns_raw_rr_t; +} ares_dns_raw_rr_t; /*! DNS RR data structure */ struct ares_dns_rr { @@ -228,25 +228,25 @@ struct ares_dns_rr { unsigned int ttl; union { - ares__dns_a_t a; - ares__dns_ns_t ns; - ares__dns_cname_t cname; - ares__dns_soa_t soa; - ares__dns_ptr_t ptr; - ares__dns_hinfo_t hinfo; - ares__dns_mx_t mx; - ares__dns_txt_t txt; - ares__dns_sig_t sig; - ares__dns_aaaa_t aaaa; - ares__dns_srv_t srv; - ares__dns_naptr_t naptr; - ares__dns_opt_t opt; - ares__dns_tlsa_t tlsa; - ares__dns_svcb_t svcb; - ares__dns_svcb_t https; /*!< https is a type of svcb, so this is right */ - ares__dns_uri_t uri; - ares__dns_caa_t caa; - ares__dns_raw_rr_t raw_rr; + ares_dns_a_t a; + ares_dns_ns_t ns; + ares_dns_cname_t cname; + ares_dns_soa_t soa; + ares_dns_ptr_t ptr; + ares_dns_hinfo_t hinfo; + ares_dns_mx_t mx; + ares_dns_txt_t txt; + ares_dns_sig_t sig; + ares_dns_aaaa_t aaaa; + ares_dns_srv_t srv; + ares_dns_naptr_t naptr; + ares_dns_opt_t opt; + ares_dns_tlsa_t tlsa; + ares_dns_svcb_t svcb; + ares_dns_svcb_t https; /*!< https is a type of svcb, so this is right */ + ares_dns_uri_t uri; + ares_dns_caa_t caa; + ares_dns_raw_rr_t raw_rr; } r; }; @@ -264,10 +264,10 @@ struct ares_dns_record { * the ttl of any resource records by * this amount. Used for cache */ - ares__array_t *qd; /*!< Type is ares_dns_qd_t */ - ares__array_t *an; /*!< Type is ares_dns_rr_t */ - ares__array_t *ns; /*!< Type is ares_dns_rr_t */ - ares__array_t *ar; /*!< Type is ares_dns_rr_t */ + ares_array_t *qd; /*!< Type is ares_dns_qd_t */ + ares_array_t *an; /*!< Type is ares_dns_rr_t */ + ares_array_t *ns; /*!< Type is ares_dns_rr_t */ + ares_array_t *ar; /*!< Type is ares_dns_rr_t */ }; #endif diff --git a/deps/cares/src/lib/record/ares_dns_record.c b/deps/cares/src/lib/record/ares_dns_record.c index 147049490943a6..ec0dfbd13c49f3 100644 --- a/deps/cares/src/lib/record/ares_dns_record.c +++ b/deps/cares/src/lib/record/ares_dns_record.c @@ -29,7 +29,7 @@ # include #endif -static void ares__dns_rr_free(ares_dns_rr_t *rr); +static void ares_dns_rr_free(ares_dns_rr_t *rr); static void ares_dns_qd_free_cb(void *arg) { @@ -46,7 +46,7 @@ static void ares_dns_rr_free_cb(void *arg) if (rr == NULL) { return; } - ares__dns_rr_free(rr); + ares_dns_rr_free(rr); } ares_status_t ares_dns_record_create(ares_dns_record_t **dnsrec, @@ -74,14 +74,10 @@ ares_status_t ares_dns_record_create(ares_dns_record_t **dnsrec, (*dnsrec)->flags = flags; (*dnsrec)->opcode = opcode; (*dnsrec)->rcode = rcode; - (*dnsrec)->qd = - ares__array_create(sizeof(ares_dns_qd_t), ares_dns_qd_free_cb); - (*dnsrec)->an = - ares__array_create(sizeof(ares_dns_rr_t), ares_dns_rr_free_cb); - (*dnsrec)->ns = - ares__array_create(sizeof(ares_dns_rr_t), ares_dns_rr_free_cb); - (*dnsrec)->ar = - ares__array_create(sizeof(ares_dns_rr_t), ares_dns_rr_free_cb); + (*dnsrec)->qd = ares_array_create(sizeof(ares_dns_qd_t), ares_dns_qd_free_cb); + (*dnsrec)->an = ares_array_create(sizeof(ares_dns_rr_t), ares_dns_rr_free_cb); + (*dnsrec)->ns = ares_array_create(sizeof(ares_dns_rr_t), ares_dns_rr_free_cb); + (*dnsrec)->ar = ares_array_create(sizeof(ares_dns_rr_t), ares_dns_rr_free_cb); if ((*dnsrec)->qd == NULL || (*dnsrec)->an == NULL || (*dnsrec)->ns == NULL || (*dnsrec)->ar == NULL) { @@ -134,7 +130,7 @@ ares_dns_rcode_t ares_dns_record_get_rcode(const ares_dns_record_t *dnsrec) return dnsrec->rcode; } -static void ares__dns_rr_free(ares_dns_rr_t *rr) +static void ares_dns_rr_free(ares_dns_rr_t *rr) { ares_free(rr->name); @@ -172,7 +168,7 @@ static void ares__dns_rr_free(ares_dns_rr_t *rr) break; case ARES_REC_TYPE_TXT: - ares__dns_multistring_destroy(rr->r.txt.strs); + ares_dns_multistring_destroy(rr->r.txt.strs); break; case ARES_REC_TYPE_SIG: @@ -192,7 +188,7 @@ static void ares__dns_rr_free(ares_dns_rr_t *rr) break; case ARES_REC_TYPE_OPT: - ares__array_destroy(rr->r.opt.options); + ares_array_destroy(rr->r.opt.options); break; case ARES_REC_TYPE_TLSA: @@ -201,12 +197,12 @@ static void ares__dns_rr_free(ares_dns_rr_t *rr) case ARES_REC_TYPE_SVCB: ares_free(rr->r.svcb.target); - ares__array_destroy(rr->r.svcb.params); + ares_array_destroy(rr->r.svcb.params); break; case ARES_REC_TYPE_HTTPS: ares_free(rr->r.https.target); - ares__array_destroy(rr->r.https.params); + ares_array_destroy(rr->r.https.params); break; case ARES_REC_TYPE_URI: @@ -231,16 +227,16 @@ void ares_dns_record_destroy(ares_dns_record_t *dnsrec) } /* Free questions */ - ares__array_destroy(dnsrec->qd); + ares_array_destroy(dnsrec->qd); /* Free answers */ - ares__array_destroy(dnsrec->an); + ares_array_destroy(dnsrec->an); /* Free authority */ - ares__array_destroy(dnsrec->ns); + ares_array_destroy(dnsrec->ns); /* Free additional */ - ares__array_destroy(dnsrec->ar); + ares_array_destroy(dnsrec->ar); ares_free(dnsrec); } @@ -250,7 +246,7 @@ size_t ares_dns_record_query_cnt(const ares_dns_record_t *dnsrec) if (dnsrec == NULL) { return 0; } - return ares__array_len(dnsrec->qd); + return ares_array_len(dnsrec->qd); } ares_status_t ares_dns_record_query_add(ares_dns_record_t *dnsrec, @@ -268,15 +264,15 @@ ares_status_t ares_dns_record_query_add(ares_dns_record_t *dnsrec, return ARES_EFORMERR; } - idx = ares__array_len(dnsrec->qd); - status = ares__array_insert_last((void **)&qd, dnsrec->qd); + idx = ares_array_len(dnsrec->qd); + status = ares_array_insert_last((void **)&qd, dnsrec->qd); if (status != ARES_SUCCESS) { return status; } qd->name = ares_strdup(name); if (qd->name == NULL) { - ares__array_remove_at(dnsrec->qd, idx); + ares_array_remove_at(dnsrec->qd, idx); return ARES_ENOMEM; } qd->qtype = qtype; @@ -290,11 +286,11 @@ ares_status_t ares_dns_record_query_set_name(ares_dns_record_t *dnsrec, char *orig_name = NULL; ares_dns_qd_t *qd; - if (dnsrec == NULL || idx >= ares__array_len(dnsrec->qd) || name == NULL) { + if (dnsrec == NULL || idx >= ares_array_len(dnsrec->qd) || name == NULL) { return ARES_EFORMERR; } - qd = ares__array_at(dnsrec->qd, idx); + qd = ares_array_at(dnsrec->qd, idx); orig_name = qd->name; qd->name = ares_strdup(name); @@ -313,12 +309,12 @@ ares_status_t ares_dns_record_query_set_type(ares_dns_record_t *dnsrec, { ares_dns_qd_t *qd; - if (dnsrec == NULL || idx >= ares__array_len(dnsrec->qd) || + if (dnsrec == NULL || idx >= ares_array_len(dnsrec->qd) || !ares_dns_rec_type_isvalid(qtype, ARES_TRUE)) { return ARES_EFORMERR; } - qd = ares__array_at(dnsrec->qd, idx); + qd = ares_array_at(dnsrec->qd, idx); qd->qtype = qtype; return ARES_SUCCESS; @@ -330,11 +326,11 @@ ares_status_t ares_dns_record_query_get(const ares_dns_record_t *dnsrec, ares_dns_class_t *qclass) { const ares_dns_qd_t *qd; - if (dnsrec == NULL || idx >= ares__array_len(dnsrec->qd)) { + if (dnsrec == NULL || idx >= ares_array_len(dnsrec->qd)) { return ARES_EFORMERR; } - qd = ares__array_at(dnsrec->qd, idx); + qd = ares_array_at(dnsrec->qd, idx); if (name != NULL) { *name = qd->name; } @@ -359,11 +355,11 @@ size_t ares_dns_record_rr_cnt(const ares_dns_record_t *dnsrec, switch (sect) { case ARES_SECTION_ANSWER: - return ares__array_len(dnsrec->an); + return ares_array_len(dnsrec->an); case ARES_SECTION_AUTHORITY: - return ares__array_len(dnsrec->ns); + return ares_array_len(dnsrec->ns); case ARES_SECTION_ADDITIONAL: - return ares__array_len(dnsrec->ar); + return ares_array_len(dnsrec->ar); } return 0; /* LCOV_EXCL_LINE: DefensiveCoding */ @@ -372,7 +368,7 @@ size_t ares_dns_record_rr_cnt(const ares_dns_record_t *dnsrec, ares_status_t ares_dns_record_rr_prealloc(ares_dns_record_t *dnsrec, ares_dns_section_t sect, size_t cnt) { - ares__array_t *arr = NULL; + ares_array_t *arr = NULL; if (dnsrec == NULL || !ares_dns_section_isvalid(sect)) { return ARES_EFORMERR; @@ -390,11 +386,11 @@ ares_status_t ares_dns_record_rr_prealloc(ares_dns_record_t *dnsrec, break; } - if (cnt < ares__array_len(arr)) { + if (cnt < ares_array_len(arr)) { return ARES_EFORMERR; } - return ares__array_set_size(arr, cnt); + return ares_array_set_size(arr, cnt); } ares_status_t ares_dns_record_rr_add(ares_dns_rr_t **rr_out, @@ -404,7 +400,7 @@ ares_status_t ares_dns_record_rr_add(ares_dns_rr_t **rr_out, ares_dns_class_t rclass, unsigned int ttl) { ares_dns_rr_t *rr = NULL; - ares__array_t *arr = NULL; + ares_array_t *arr = NULL; ares_status_t status; size_t idx; @@ -429,15 +425,15 @@ ares_status_t ares_dns_record_rr_add(ares_dns_rr_t **rr_out, break; } - idx = ares__array_len(arr); - status = ares__array_insert_last((void **)&rr, arr); + idx = ares_array_len(arr); + status = ares_array_insert_last((void **)&rr, arr); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } rr->name = ares_strdup(name); if (rr->name == NULL) { - ares__array_remove_at(arr, idx); + ares_array_remove_at(arr, idx); return ARES_ENOMEM; } @@ -454,7 +450,7 @@ ares_status_t ares_dns_record_rr_add(ares_dns_rr_t **rr_out, ares_status_t ares_dns_record_rr_del(ares_dns_record_t *dnsrec, ares_dns_section_t sect, size_t idx) { - ares__array_t *arr = NULL; + ares_array_t *arr = NULL; if (dnsrec == NULL || !ares_dns_section_isvalid(sect)) { return ARES_EFORMERR; @@ -472,13 +468,13 @@ ares_status_t ares_dns_record_rr_del(ares_dns_record_t *dnsrec, break; } - return ares__array_remove_at(arr, idx); + return ares_array_remove_at(arr, idx); } ares_dns_rr_t *ares_dns_record_rr_get(ares_dns_record_t *dnsrec, ares_dns_section_t sect, size_t idx) { - ares__array_t *arr = NULL; + ares_array_t *arr = NULL; if (dnsrec == NULL || !ares_dns_section_isvalid(sect)) { return NULL; @@ -496,7 +492,7 @@ ares_dns_rr_t *ares_dns_record_rr_get(ares_dns_record_t *dnsrec, break; } - return ares__array_at(arr, idx); + return ares_array_at(arr, idx); } const ares_dns_rr_t * @@ -849,14 +845,14 @@ const unsigned char *ares_dns_rr_get_bin(const ares_dns_rr_t *dns_rr, /* Array of strings, return concatenated version */ if (ares_dns_rr_key_datatype(key) == ARES_DATATYPE_ABINP) { - ares__dns_multistring_t * const *strs = + ares_dns_multistring_t * const *strs = ares_dns_rr_data_ptr_const(dns_rr, key, NULL); if (strs == NULL) { return NULL; } - return ares__dns_multistring_get_combined(*strs, len); + return ares_dns_multistring_combined(*strs, len); } /* Not a multi-string, just straight binary data */ @@ -877,7 +873,7 @@ const unsigned char *ares_dns_rr_get_bin(const ares_dns_rr_t *dns_rr, size_t ares_dns_rr_get_abin_cnt(const ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key) { - ares__dns_multistring_t * const *strs; + ares_dns_multistring_t * const *strs; if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_ABINP) { return 0; @@ -888,14 +884,14 @@ size_t ares_dns_rr_get_abin_cnt(const ares_dns_rr_t *dns_rr, return 0; } - return ares__dns_multistring_cnt(*strs); + return ares_dns_multistring_cnt(*strs); } const unsigned char *ares_dns_rr_get_abin(const ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, size_t idx, size_t *len) { - ares__dns_multistring_t * const *strs; + ares_dns_multistring_t * const *strs; if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_ABINP) { return NULL; @@ -906,13 +902,13 @@ const unsigned char *ares_dns_rr_get_abin(const ares_dns_rr_t *dns_rr, return NULL; } - return ares__dns_multistring_get(*strs, idx, len); + return ares_dns_multistring_get(*strs, idx, len); } ares_status_t ares_dns_rr_del_abin(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, size_t idx) { - ares__dns_multistring_t **strs; + ares_dns_multistring_t **strs; if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_ABINP) { return ARES_EFORMERR; @@ -923,7 +919,7 @@ ares_status_t ares_dns_rr_del_abin(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, return ARES_EFORMERR; } - return ares__dns_multistring_del(*strs, idx); + return ares_dns_multistring_del(*strs, idx); } ares_status_t ares_dns_rr_add_abin(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, @@ -933,9 +929,9 @@ ares_status_t ares_dns_rr_add_abin(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, ares_dns_datatype_t datatype = ares_dns_rr_key_datatype(key); ares_bool_t is_nullterm = (datatype == ARES_DATATYPE_ABINP) ? ARES_TRUE : ARES_FALSE; - size_t alloclen = is_nullterm ? len + 1 : len; - unsigned char *temp; - ares__dns_multistring_t **strs; + size_t alloclen = is_nullterm ? len + 1 : len; + unsigned char *temp; + ares_dns_multistring_t **strs; if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_ABINP) { return ARES_EFORMERR; @@ -947,7 +943,7 @@ ares_status_t ares_dns_rr_add_abin(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, } if (*strs == NULL) { - *strs = ares__dns_multistring_create(); + *strs = ares_dns_multistring_create(); if (*strs == NULL) { return ARES_ENOMEM; } @@ -965,7 +961,7 @@ ares_status_t ares_dns_rr_add_abin(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, temp[len] = 0; } - status = ares__dns_multistring_add_own(*strs, temp, len); + status = ares_dns_multistring_add_own(*strs, temp, len); if (status != ARES_SUCCESS) { ares_free(temp); } @@ -994,7 +990,7 @@ const char *ares_dns_rr_get_str(const ares_dns_rr_t *dns_rr, size_t ares_dns_rr_get_opt_cnt(const ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key) { - ares__array_t * const *opts; + ares_array_t * const *opts; if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_OPT) { return 0; @@ -1005,15 +1001,15 @@ size_t ares_dns_rr_get_opt_cnt(const ares_dns_rr_t *dns_rr, return 0; } - return ares__array_len(*opts); + return ares_array_len(*opts); } unsigned short ares_dns_rr_get_opt(const ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, size_t idx, const unsigned char **val, size_t *val_len) { - ares__array_t * const *opts; - const ares__dns_optval_t *opt; + ares_array_t * const *opts; + const ares_dns_optval_t *opt; if (val) { *val = NULL; @@ -1031,7 +1027,7 @@ unsigned short ares_dns_rr_get_opt(const ares_dns_rr_t *dns_rr, return 65535; } - opt = ares__array_at(*opts, idx); + opt = ares_array_at(*opts, idx); if (opt == NULL) { return 65535; } @@ -1050,10 +1046,10 @@ ares_bool_t ares_dns_rr_get_opt_byid(const ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, unsigned short opt, const unsigned char **val, size_t *val_len) { - ares__array_t * const *opts; - size_t i; - size_t cnt; - const ares__dns_optval_t *optptr = NULL; + ares_array_t * const *opts; + size_t i; + size_t cnt; + const ares_dns_optval_t *optptr = NULL; if (val) { *val = NULL; @@ -1071,9 +1067,9 @@ ares_bool_t ares_dns_rr_get_opt_byid(const ares_dns_rr_t *dns_rr, return ARES_FALSE; } - cnt = ares__array_len(*opts); + cnt = ares_array_len(*opts); for (i = 0; i < cnt; i++) { - optptr = ares__array_at(*opts, i); + optptr = ares_array_at(*opts, i); if (optptr == NULL) { return ARES_FALSE; } @@ -1200,22 +1196,22 @@ ares_status_t ares_dns_rr_set_bin_own(ares_dns_rr_t *dns_rr, } if (ares_dns_rr_key_datatype(key) == ARES_DATATYPE_ABINP) { - ares__dns_multistring_t **strs = ares_dns_rr_data_ptr(dns_rr, key, NULL); + ares_dns_multistring_t **strs = ares_dns_rr_data_ptr(dns_rr, key, NULL); if (strs == NULL) { return ARES_EFORMERR; } if (*strs == NULL) { - *strs = ares__dns_multistring_create(); + *strs = ares_dns_multistring_create(); if (*strs == NULL) { return ARES_ENOMEM; } } /* Clear all existing entries as this is an override */ - ares__dns_multistring_clear(*strs); + ares_dns_multistring_clear(*strs); - return ares__dns_multistring_add_own(*strs, val, len); + return ares_dns_multistring_add_own(*strs, val, len); } bin = ares_dns_rr_data_ptr(dns_rr, key, &bin_len); @@ -1307,11 +1303,11 @@ ares_status_t ares_dns_rr_set_str(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, return status; } -ares_status_t ares_dns_rr_set_abin_own(ares_dns_rr_t *dns_rr, - ares_dns_rr_key_t key, - ares__dns_multistring_t *strs) +ares_status_t ares_dns_rr_set_abin_own(ares_dns_rr_t *dns_rr, + ares_dns_rr_key_t key, + ares_dns_multistring_t *strs) { - ares__dns_multistring_t **strs_ptr; + ares_dns_multistring_t **strs_ptr; if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_ABINP) { return ARES_EFORMERR; @@ -1323,16 +1319,16 @@ ares_status_t ares_dns_rr_set_abin_own(ares_dns_rr_t *dns_rr, } if (*strs_ptr != NULL) { - ares__dns_multistring_destroy(*strs_ptr); + ares_dns_multistring_destroy(*strs_ptr); } *strs_ptr = strs; return ARES_SUCCESS; } -static void ares__dns_opt_free_cb(void *arg) +static void ares_dns_opt_free_cb(void *arg) { - ares__dns_optval_t *opt = arg; + ares_dns_optval_t *opt = arg; if (opt == NULL) { return; } @@ -1343,11 +1339,11 @@ ares_status_t ares_dns_rr_set_opt_own(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, unsigned short opt, unsigned char *val, size_t val_len) { - ares__array_t **options; - ares__dns_optval_t *optptr = NULL; - size_t idx; - size_t cnt; - ares_status_t status; + ares_array_t **options; + ares_dns_optval_t *optptr = NULL; + size_t idx; + size_t cnt; + ares_status_t status; if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_OPT) { return ARES_EFORMERR; @@ -1360,15 +1356,15 @@ ares_status_t ares_dns_rr_set_opt_own(ares_dns_rr_t *dns_rr, if (*options == NULL) { *options = - ares__array_create(sizeof(ares__dns_optval_t), ares__dns_opt_free_cb); + ares_array_create(sizeof(ares_dns_optval_t), ares_dns_opt_free_cb); } if (*options == NULL) { return ARES_ENOMEM; } - cnt = ares__array_len(*options); + cnt = ares_array_len(*options); for (idx = 0; idx < cnt; idx++) { - optptr = ares__array_at(*options, idx); + optptr = ares_array_at(*options, idx); if (optptr == NULL) { return ARES_EFORMERR; } @@ -1382,7 +1378,7 @@ ares_status_t ares_dns_rr_set_opt_own(ares_dns_rr_t *dns_rr, goto done; } - status = ares__array_insert_last((void **)&optptr, *options); + status = ares_array_insert_last((void **)&optptr, *options); if (status != ARES_SUCCESS) { return status; } @@ -1424,10 +1420,10 @@ ares_status_t ares_dns_rr_del_opt_byid(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, unsigned short opt) { - ares__array_t **options; - const ares__dns_optval_t *optptr; - size_t idx; - size_t cnt; + ares_array_t **options; + const ares_dns_optval_t *optptr; + size_t idx; + size_t cnt; if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_OPT) { return ARES_EFORMERR; @@ -1443,14 +1439,14 @@ ares_status_t ares_dns_rr_del_opt_byid(ares_dns_rr_t *dns_rr, return ARES_SUCCESS; } - cnt = ares__array_len(*options); + cnt = ares_array_len(*options); for (idx = 0; idx < cnt; idx++) { - optptr = ares__array_at_const(*options, idx); + optptr = ares_array_at_const(*options, idx); if (optptr == NULL) { return ARES_ENOTFOUND; } if (optptr->opt == opt) { - return ares__array_remove_at(*options, idx); + return ares_array_remove_at(*options, idx); } } @@ -1459,7 +1455,7 @@ ares_status_t ares_dns_rr_del_opt_byid(ares_dns_rr_t *dns_rr, char *ares_dns_addr_to_ptr(const struct ares_addr *addr) { - ares__buf_t *buf = NULL; + ares_buf_t *buf = NULL; const unsigned char *ptr = NULL; size_t ptr_len = 0; size_t i; @@ -1470,7 +1466,7 @@ char *ares_dns_addr_to_ptr(const struct ares_addr *addr) goto fail; } - buf = ares__buf_create(); + buf = ares_buf_create(); if (buf == NULL) { goto fail; } @@ -1485,47 +1481,47 @@ char *ares_dns_addr_to_ptr(const struct ares_addr *addr) for (i = ptr_len; i > 0; i--) { if (addr->family == AF_INET) { - status = ares__buf_append_num_dec(buf, (size_t)ptr[i - 1], 0); + status = ares_buf_append_num_dec(buf, (size_t)ptr[i - 1], 0); } else { unsigned char c; c = ptr[i - 1] & 0xF; - status = ares__buf_append_byte(buf, hexbytes[c]); + status = ares_buf_append_byte(buf, hexbytes[c]); if (status != ARES_SUCCESS) { goto fail; } - status = ares__buf_append_byte(buf, '.'); + status = ares_buf_append_byte(buf, '.'); if (status != ARES_SUCCESS) { goto fail; } c = (ptr[i - 1] >> 4) & 0xF; - status = ares__buf_append_byte(buf, hexbytes[c]); + status = ares_buf_append_byte(buf, hexbytes[c]); } if (status != ARES_SUCCESS) { goto fail; } - status = ares__buf_append_byte(buf, '.'); + status = ares_buf_append_byte(buf, '.'); if (status != ARES_SUCCESS) { goto fail; } } if (addr->family == AF_INET) { - status = ares__buf_append(buf, (const unsigned char *)"in-addr.arpa", 12); + status = ares_buf_append(buf, (const unsigned char *)"in-addr.arpa", 12); } else { - status = ares__buf_append(buf, (const unsigned char *)"ip6.arpa", 8); + status = ares_buf_append(buf, (const unsigned char *)"ip6.arpa", 8); } if (status != ARES_SUCCESS) { goto fail; } - return ares__buf_finish_str(buf, NULL); + return ares_buf_finish_str(buf, NULL); fail: - ares__buf_destroy(buf); + ares_buf_destroy(buf); return NULL; } @@ -1575,7 +1571,7 @@ ares_status_t *dnsrec = NULL; /* Per RFC 7686, reject queries for ".onion" domain names with NXDOMAIN */ - if (ares__is_onion_domain(name)) { + if (ares_is_onion_domain(name)) { status = ARES_ENOTFOUND; goto done; } diff --git a/deps/cares/src/lib/record/ares_dns_write.c b/deps/cares/src/lib/record/ares_dns_write.c index 8a3addd9f01b53..549017ffbc1768 100644 --- a/deps/cares/src/lib/record/ares_dns_write.c +++ b/deps/cares/src/lib/record/ares_dns_write.c @@ -31,7 +31,7 @@ static ares_status_t ares_dns_write_header(const ares_dns_record_t *dnsrec, - ares__buf_t *buf) + ares_buf_t *buf) { unsigned short u16; unsigned short opcode; @@ -40,7 +40,7 @@ static ares_status_t ares_dns_write_header(const ares_dns_record_t *dnsrec, ares_status_t status; /* ID */ - status = ares__buf_append_be16(buf, dnsrec->id); + status = ares_buf_append_be16(buf, dnsrec->id); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -99,35 +99,35 @@ static ares_status_t ares_dns_write_header(const ares_dns_record_t *dnsrec, } u16 |= rcode; - status = ares__buf_append_be16(buf, u16); + status = ares_buf_append_be16(buf, u16); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } /* QDCOUNT */ - status = ares__buf_append_be16( + status = ares_buf_append_be16( buf, (unsigned short)ares_dns_record_query_cnt(dnsrec)); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } /* ANCOUNT */ - status = ares__buf_append_be16( + status = ares_buf_append_be16( buf, (unsigned short)ares_dns_record_rr_cnt(dnsrec, ARES_SECTION_ANSWER)); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } /* NSCOUNT */ - status = ares__buf_append_be16(buf, (unsigned short)ares_dns_record_rr_cnt( - dnsrec, ARES_SECTION_AUTHORITY)); + status = ares_buf_append_be16(buf, (unsigned short)ares_dns_record_rr_cnt( + dnsrec, ARES_SECTION_AUTHORITY)); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } /* ARCOUNT */ - status = ares__buf_append_be16(buf, (unsigned short)ares_dns_record_rr_cnt( - dnsrec, ARES_SECTION_ADDITIONAL)); + status = ares_buf_append_be16(buf, (unsigned short)ares_dns_record_rr_cnt( + dnsrec, ARES_SECTION_ADDITIONAL)); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -136,8 +136,8 @@ static ares_status_t ares_dns_write_header(const ares_dns_record_t *dnsrec, } static ares_status_t ares_dns_write_questions(const ares_dns_record_t *dnsrec, - ares__llist_t **namelist, - ares__buf_t *buf) + ares_llist_t **namelist, + ares_buf_t *buf) { size_t i; @@ -153,19 +153,19 @@ static ares_status_t ares_dns_write_questions(const ares_dns_record_t *dnsrec, } /* Name */ - status = ares__dns_name_write(buf, namelist, ARES_TRUE, name); + status = ares_dns_name_write(buf, namelist, ARES_TRUE, name); if (status != ARES_SUCCESS) { return status; } /* Type */ - status = ares__buf_append_be16(buf, (unsigned short)qtype); + status = ares_buf_append_be16(buf, (unsigned short)qtype); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } /* Class */ - status = ares__buf_append_be16(buf, (unsigned short)qclass); + status = ares_buf_append_be16(buf, (unsigned short)qclass); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -174,9 +174,9 @@ static ares_status_t ares_dns_write_questions(const ares_dns_record_t *dnsrec, return ARES_SUCCESS; } -static ares_status_t ares_dns_write_rr_name(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_name(ares_buf_t *buf, const ares_dns_rr_t *rr, - ares__llist_t **namelist, + ares_llist_t **namelist, ares_bool_t validate_hostname, ares_dns_rr_key_t key) { @@ -187,10 +187,10 @@ static ares_status_t ares_dns_write_rr_name(ares__buf_t *buf, return ARES_EFORMERR; /* LCOV_EXCL_LINE: DefensiveCoding */ } - return ares__dns_name_write(buf, namelist, validate_hostname, name); + return ares_dns_name_write(buf, namelist, validate_hostname, name); } -static ares_status_t ares_dns_write_rr_str(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_str(ares_buf_t *buf, const ares_dns_rr_t *rr, ares_dns_rr_key_t key) { @@ -209,7 +209,7 @@ static ares_status_t ares_dns_write_rr_str(ares__buf_t *buf, } /* Write 1 byte length */ - status = ares__buf_append_byte(buf, (unsigned char)(len & 0xFF)); + status = ares_buf_append_byte(buf, (unsigned char)(len & 0xFF)); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -219,10 +219,10 @@ static ares_status_t ares_dns_write_rr_str(ares__buf_t *buf, } /* Write string */ - return ares__buf_append(buf, (const unsigned char *)str, len); + return ares_buf_append(buf, (const unsigned char *)str, len); } -static ares_status_t ares_dns_write_binstr(ares__buf_t *buf, +static ares_status_t ares_dns_write_binstr(ares_buf_t *buf, const unsigned char *bin, size_t bin_len) { @@ -240,14 +240,14 @@ static ares_status_t ares_dns_write_binstr(ares__buf_t *buf, } /* Length */ - status = ares__buf_append_byte(buf, (unsigned char)(len & 0xFF)); + status = ares_buf_append_byte(buf, (unsigned char)(len & 0xFF)); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } /* String */ if (len) { - status = ares__buf_append(buf, ptr, len); + status = ares_buf_append(buf, ptr, len); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -260,7 +260,7 @@ static ares_status_t ares_dns_write_binstr(ares__buf_t *buf, return ARES_SUCCESS; } -static ares_status_t ares_dns_write_rr_abin(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_abin(ares_buf_t *buf, const ares_dns_rr_t *rr, ares_dns_rr_key_t key) { @@ -287,39 +287,39 @@ static ares_status_t ares_dns_write_rr_abin(ares__buf_t *buf, return status; } -static ares_status_t ares_dns_write_rr_be32(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_be32(ares_buf_t *buf, const ares_dns_rr_t *rr, ares_dns_rr_key_t key) { if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_U32) { return ARES_EFORMERR; /* LCOV_EXCL_LINE: DefensiveCoding */ } - return ares__buf_append_be32(buf, ares_dns_rr_get_u32(rr, key)); + return ares_buf_append_be32(buf, ares_dns_rr_get_u32(rr, key)); } -static ares_status_t ares_dns_write_rr_be16(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_be16(ares_buf_t *buf, const ares_dns_rr_t *rr, ares_dns_rr_key_t key) { if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_U16) { return ARES_EFORMERR; /* LCOV_EXCL_LINE: DefensiveCoding */ } - return ares__buf_append_be16(buf, ares_dns_rr_get_u16(rr, key)); + return ares_buf_append_be16(buf, ares_dns_rr_get_u16(rr, key)); } -static ares_status_t ares_dns_write_rr_u8(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_u8(ares_buf_t *buf, const ares_dns_rr_t *rr, ares_dns_rr_key_t key) { if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_U8) { return ARES_EFORMERR; /* LCOV_EXCL_LINE: DefensiveCoding */ } - return ares__buf_append_byte(buf, ares_dns_rr_get_u8(rr, key)); + return ares_buf_append_byte(buf, ares_dns_rr_get_u8(rr, key)); } -static ares_status_t ares_dns_write_rr_a(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_a(ares_buf_t *buf, const ares_dns_rr_t *rr, - ares__llist_t **namelist) + ares_llist_t **namelist) { const struct in_addr *addr; (void)namelist; @@ -329,28 +329,28 @@ static ares_status_t ares_dns_write_rr_a(ares__buf_t *buf, return ARES_EFORMERR; /* LCOV_EXCL_LINE: DefensiveCoding */ } - return ares__buf_append(buf, (const unsigned char *)addr, sizeof(*addr)); + return ares_buf_append(buf, (const unsigned char *)addr, sizeof(*addr)); } -static ares_status_t ares_dns_write_rr_ns(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_ns(ares_buf_t *buf, const ares_dns_rr_t *rr, - ares__llist_t **namelist) + ares_llist_t **namelist) { return ares_dns_write_rr_name(buf, rr, namelist, ARES_FALSE, ARES_RR_NS_NSDNAME); } -static ares_status_t ares_dns_write_rr_cname(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_cname(ares_buf_t *buf, const ares_dns_rr_t *rr, - ares__llist_t **namelist) + ares_llist_t **namelist) { return ares_dns_write_rr_name(buf, rr, namelist, ARES_FALSE, ARES_RR_CNAME_CNAME); } -static ares_status_t ares_dns_write_rr_soa(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_soa(ares_buf_t *buf, const ares_dns_rr_t *rr, - ares__llist_t **namelist) + ares_llist_t **namelist) { ares_status_t status; @@ -396,17 +396,17 @@ static ares_status_t ares_dns_write_rr_soa(ares__buf_t *buf, return ares_dns_write_rr_be32(buf, rr, ARES_RR_SOA_MINIMUM); } -static ares_status_t ares_dns_write_rr_ptr(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_ptr(ares_buf_t *buf, const ares_dns_rr_t *rr, - ares__llist_t **namelist) + ares_llist_t **namelist) { return ares_dns_write_rr_name(buf, rr, namelist, ARES_FALSE, ARES_RR_PTR_DNAME); } -static ares_status_t ares_dns_write_rr_hinfo(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_hinfo(ares_buf_t *buf, const ares_dns_rr_t *rr, - ares__llist_t **namelist) + ares_llist_t **namelist) { ares_status_t status; @@ -422,9 +422,9 @@ static ares_status_t ares_dns_write_rr_hinfo(ares__buf_t *buf, return ares_dns_write_rr_str(buf, rr, ARES_RR_HINFO_OS); } -static ares_status_t ares_dns_write_rr_mx(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_mx(ares_buf_t *buf, const ares_dns_rr_t *rr, - ares__llist_t **namelist) + ares_llist_t **namelist) { ares_status_t status; @@ -439,17 +439,17 @@ static ares_status_t ares_dns_write_rr_mx(ares__buf_t *buf, ARES_RR_MX_EXCHANGE); } -static ares_status_t ares_dns_write_rr_txt(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_txt(ares_buf_t *buf, const ares_dns_rr_t *rr, - ares__llist_t **namelist) + ares_llist_t **namelist) { (void)namelist; return ares_dns_write_rr_abin(buf, rr, ARES_RR_TXT_DATA); } -static ares_status_t ares_dns_write_rr_sig(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_sig(ares_buf_t *buf, const ares_dns_rr_t *rr, - ares__llist_t **namelist) + ares_llist_t **namelist) { ares_status_t status; const unsigned char *data; @@ -512,12 +512,12 @@ static ares_status_t ares_dns_write_rr_sig(ares__buf_t *buf, return ARES_EFORMERR; } - return ares__buf_append(buf, data, len); + return ares_buf_append(buf, data, len); } -static ares_status_t ares_dns_write_rr_aaaa(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_aaaa(ares_buf_t *buf, const ares_dns_rr_t *rr, - ares__llist_t **namelist) + ares_llist_t **namelist) { const struct ares_in6_addr *addr; (void)namelist; @@ -527,12 +527,12 @@ static ares_status_t ares_dns_write_rr_aaaa(ares__buf_t *buf, return ARES_EFORMERR; /* LCOV_EXCL_LINE: DefensiveCoding */ } - return ares__buf_append(buf, (const unsigned char *)addr, sizeof(*addr)); + return ares_buf_append(buf, (const unsigned char *)addr, sizeof(*addr)); } -static ares_status_t ares_dns_write_rr_srv(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_srv(ares_buf_t *buf, const ares_dns_rr_t *rr, - ares__llist_t **namelist) + ares_llist_t **namelist) { ares_status_t status; @@ -559,9 +559,9 @@ static ares_status_t ares_dns_write_rr_srv(ares__buf_t *buf, ARES_RR_SRV_TARGET); } -static ares_status_t ares_dns_write_rr_naptr(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_naptr(ares_buf_t *buf, const ares_dns_rr_t *rr, - ares__llist_t **namelist) + ares_llist_t **namelist) { ares_status_t status; @@ -600,11 +600,11 @@ static ares_status_t ares_dns_write_rr_naptr(ares__buf_t *buf, ARES_RR_NAPTR_REPLACEMENT); } -static ares_status_t ares_dns_write_rr_opt(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_opt(ares_buf_t *buf, const ares_dns_rr_t *rr, - ares__llist_t **namelist) + ares_llist_t **namelist) { - size_t len = ares__buf_len(buf); + size_t len = ares_buf_len(buf); ares_status_t status; unsigned int ttl = 0; size_t i; @@ -620,9 +620,9 @@ static ares_status_t ares_dns_write_rr_opt(ares__buf_t *buf, /* We need to go back and overwrite the class and ttl that were emitted as * the OPT record overloads them for its own use (yes, very strange!) */ - status = ares__buf_set_length(buf, len - 2 /* RDLENGTH */ - - 4 /* TTL */ - - 2 /* CLASS */); + status = ares_buf_set_length(buf, len - 2 /* RDLENGTH */ + - 4 /* TTL */ + - 2 /* CLASS */); if (status != ARES_SUCCESS) { return status; } @@ -638,13 +638,13 @@ static ares_status_t ares_dns_write_rr_opt(ares__buf_t *buf, ttl |= (unsigned int)ares_dns_rr_get_u8(rr, ARES_RR_OPT_VERSION) << 16; ttl |= (unsigned int)ares_dns_rr_get_u16(rr, ARES_RR_OPT_FLAGS); - status = ares__buf_append_be32(buf, ttl); + status = ares_buf_append_be32(buf, ttl); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } /* Now go back to real end */ - status = ares__buf_set_length(buf, len); + status = ares_buf_set_length(buf, len); if (status != ARES_SUCCESS) { return status; } @@ -658,20 +658,20 @@ static ares_status_t ares_dns_write_rr_opt(ares__buf_t *buf, opt = ares_dns_rr_get_opt(rr, ARES_RR_OPT_OPTIONS, i, &val, &val_len); /* BE16 option */ - status = ares__buf_append_be16(buf, opt); + status = ares_buf_append_be16(buf, opt); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } /* BE16 length */ - status = ares__buf_append_be16(buf, (unsigned short)(val_len & 0xFFFF)); + status = ares_buf_append_be16(buf, (unsigned short)(val_len & 0xFFFF)); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } /* Value */ if (val && val_len) { - status = ares__buf_append(buf, val, val_len); + status = ares_buf_append(buf, val, val_len); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -681,9 +681,9 @@ static ares_status_t ares_dns_write_rr_opt(ares__buf_t *buf, return ARES_SUCCESS; } -static ares_status_t ares_dns_write_rr_tlsa(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_tlsa(ares_buf_t *buf, const ares_dns_rr_t *rr, - ares__llist_t **namelist) + ares_llist_t **namelist) { ares_status_t status; const unsigned char *data; @@ -715,12 +715,12 @@ static ares_status_t ares_dns_write_rr_tlsa(ares__buf_t *buf, return ARES_EFORMERR; } - return ares__buf_append(buf, data, len); + return ares_buf_append(buf, data, len); } -static ares_status_t ares_dns_write_rr_svcb(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_svcb(ares_buf_t *buf, const ares_dns_rr_t *rr, - ares__llist_t **namelist) + ares_llist_t **namelist) { ares_status_t status; size_t i; @@ -747,20 +747,20 @@ static ares_status_t ares_dns_write_rr_svcb(ares__buf_t *buf, opt = ares_dns_rr_get_opt(rr, ARES_RR_SVCB_PARAMS, i, &val, &val_len); /* BE16 option */ - status = ares__buf_append_be16(buf, opt); + status = ares_buf_append_be16(buf, opt); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } /* BE16 length */ - status = ares__buf_append_be16(buf, (unsigned short)(val_len & 0xFFFF)); + status = ares_buf_append_be16(buf, (unsigned short)(val_len & 0xFFFF)); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } /* Value */ if (val && val_len) { - status = ares__buf_append(buf, val, val_len); + status = ares_buf_append(buf, val, val_len); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -769,9 +769,9 @@ static ares_status_t ares_dns_write_rr_svcb(ares__buf_t *buf, return ARES_SUCCESS; } -static ares_status_t ares_dns_write_rr_https(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_https(ares_buf_t *buf, const ares_dns_rr_t *rr, - ares__llist_t **namelist) + ares_llist_t **namelist) { ares_status_t status; size_t i; @@ -798,20 +798,20 @@ static ares_status_t ares_dns_write_rr_https(ares__buf_t *buf, opt = ares_dns_rr_get_opt(rr, ARES_RR_HTTPS_PARAMS, i, &val, &val_len); /* BE16 option */ - status = ares__buf_append_be16(buf, opt); + status = ares_buf_append_be16(buf, opt); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } /* BE16 length */ - status = ares__buf_append_be16(buf, (unsigned short)(val_len & 0xFFFF)); + status = ares_buf_append_be16(buf, (unsigned short)(val_len & 0xFFFF)); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } /* Value */ if (val && val_len) { - status = ares__buf_append(buf, val, val_len); + status = ares_buf_append(buf, val, val_len); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -820,9 +820,9 @@ static ares_status_t ares_dns_write_rr_https(ares__buf_t *buf, return ARES_SUCCESS; } -static ares_status_t ares_dns_write_rr_uri(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_uri(ares_buf_t *buf, const ares_dns_rr_t *rr, - ares__llist_t **namelist) + ares_llist_t **namelist) { ares_status_t status; const char *target; @@ -848,13 +848,13 @@ static ares_status_t ares_dns_write_rr_uri(ares__buf_t *buf, return ARES_EFORMERR; } - return ares__buf_append(buf, (const unsigned char *)target, - ares_strlen(target)); + return ares_buf_append(buf, (const unsigned char *)target, + ares_strlen(target)); } -static ares_status_t ares_dns_write_rr_caa(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_caa(ares_buf_t *buf, const ares_dns_rr_t *rr, - ares__llist_t **namelist) + ares_llist_t **namelist) { const unsigned char *data = NULL; size_t data_len = 0; @@ -880,14 +880,14 @@ static ares_status_t ares_dns_write_rr_caa(ares__buf_t *buf, return ARES_EFORMERR; } - return ares__buf_append(buf, data, data_len); + return ares_buf_append(buf, data, data_len); } -static ares_status_t ares_dns_write_rr_raw_rr(ares__buf_t *buf, +static ares_status_t ares_dns_write_rr_raw_rr(ares_buf_t *buf, const ares_dns_rr_t *rr, - ares__llist_t **namelist) + ares_llist_t **namelist) { - size_t len = ares__buf_len(buf); + size_t len = ares_buf_len(buf); ares_status_t status; const unsigned char *data = NULL; size_t data_len = 0; @@ -902,10 +902,10 @@ static ares_status_t ares_dns_write_rr_raw_rr(ares__buf_t *buf, /* We need to go back and overwrite the type that was emitted by the parent * function */ - status = ares__buf_set_length(buf, len - 2 /* RDLENGTH */ - - 4 /* TTL */ - - 2 /* CLASS */ - - 2 /* TYPE */); + status = ares_buf_set_length(buf, len - 2 /* RDLENGTH */ + - 4 /* TTL */ + - 2 /* CLASS */ + - 2 /* TYPE */); if (status != ARES_SUCCESS) { return status; } @@ -916,7 +916,7 @@ static ares_status_t ares_dns_write_rr_raw_rr(ares__buf_t *buf, } /* Now go back to real end */ - status = ares__buf_set_length(buf, len); + status = ares_buf_set_length(buf, len); if (status != ARES_SUCCESS) { return status; } @@ -931,13 +931,13 @@ static ares_status_t ares_dns_write_rr_raw_rr(ares__buf_t *buf, return ARES_SUCCESS; } - return ares__buf_append(buf, data, data_len); + return ares_buf_append(buf, data, data_len); } static ares_status_t ares_dns_write_rr(const ares_dns_record_t *dnsrec, - ares__llist_t **namelist, + ares_llist_t **namelist, ares_dns_section_t section, - ares__buf_t *buf) + ares_buf_t *buf) { size_t i; @@ -945,7 +945,7 @@ static ares_status_t ares_dns_write_rr(const ares_dns_record_t *dnsrec, const ares_dns_rr_t *rr; ares_dns_rec_type_t type; ares_bool_t allow_compress; - ares__llist_t **namelistptr = NULL; + ares_llist_t **namelistptr = NULL; size_t pos_len; ares_status_t status; size_t rdlength; @@ -958,27 +958,27 @@ static ares_status_t ares_dns_write_rr(const ares_dns_record_t *dnsrec, } type = ares_dns_rr_get_type(rr); - allow_compress = ares_dns_rec_type_allow_name_compression(type); + allow_compress = ares_dns_rec_allow_name_comp(type); if (allow_compress) { namelistptr = namelist; } /* Name */ status = - ares__dns_name_write(buf, namelist, ARES_TRUE, ares_dns_rr_get_name(rr)); + ares_dns_name_write(buf, namelist, ARES_TRUE, ares_dns_rr_get_name(rr)); if (status != ARES_SUCCESS) { return status; } /* Type */ - status = ares__buf_append_be16(buf, (unsigned short)type); + status = ares_buf_append_be16(buf, (unsigned short)type); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } /* Class */ status = - ares__buf_append_be16(buf, (unsigned short)ares_dns_rr_get_class(rr)); + ares_buf_append_be16(buf, (unsigned short)ares_dns_rr_get_class(rr)); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -990,14 +990,14 @@ static ares_status_t ares_dns_write_rr(const ares_dns_record_t *dnsrec, } else { ttl -= rr->parent->ttl_decrement; } - status = ares__buf_append_be32(buf, ttl); + status = ares_buf_append_be32(buf, ttl); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } /* Length */ - pos_len = ares__buf_len(buf); /* Save to write real length later */ - status = ares__buf_append_be16(buf, 0); + pos_len = ares_buf_len(buf); /* Save to write real length later */ + status = ares_buf_append_be16(buf, 0); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -1072,20 +1072,20 @@ static ares_status_t ares_dns_write_rr(const ares_dns_record_t *dnsrec, /* Back off write pointer, write real length, then go back to proper * position */ - end_length = ares__buf_len(buf); + end_length = ares_buf_len(buf); rdlength = end_length - pos_len - 2; - status = ares__buf_set_length(buf, pos_len); + status = ares_buf_set_length(buf, pos_len); if (status != ARES_SUCCESS) { return status; } - status = ares__buf_append_be16(buf, (unsigned short)(rdlength & 0xFFFF)); + status = ares_buf_append_be16(buf, (unsigned short)(rdlength & 0xFFFF)); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } - status = ares__buf_set_length(buf, end_length); + status = ares_buf_set_length(buf, end_length); if (status != ARES_SUCCESS) { return status; } @@ -1095,17 +1095,17 @@ static ares_status_t ares_dns_write_rr(const ares_dns_record_t *dnsrec, } ares_status_t ares_dns_write_buf(const ares_dns_record_t *dnsrec, - ares__buf_t *buf) + ares_buf_t *buf) { - ares__llist_t *namelist = NULL; - size_t orig_len; - ares_status_t status; + ares_llist_t *namelist = NULL; + size_t orig_len; + ares_status_t status; if (dnsrec == NULL || buf == NULL) { return ARES_EFORMERR; } - orig_len = ares__buf_len(buf); + orig_len = ares_buf_len(buf); status = ares_dns_write_header(dnsrec, buf); if (status != ARES_SUCCESS) { @@ -1133,16 +1133,16 @@ ares_status_t ares_dns_write_buf(const ares_dns_record_t *dnsrec, } done: - ares__llist_destroy(namelist); + ares_llist_destroy(namelist); if (status != ARES_SUCCESS) { - ares__buf_set_length(buf, orig_len); + ares_buf_set_length(buf, orig_len); } return status; } ares_status_t ares_dns_write_buf_tcp(const ares_dns_record_t *dnsrec, - ares__buf_t *buf) + ares_buf_t *buf) { ares_status_t status; size_t orig_len; @@ -1153,10 +1153,10 @@ ares_status_t ares_dns_write_buf_tcp(const ares_dns_record_t *dnsrec, return ARES_EFORMERR; } - orig_len = ares__buf_len(buf); + orig_len = ares_buf_len(buf); /* Write placeholder for length */ - status = ares__buf_append_be16(buf, 0); + status = ares_buf_append_be16(buf, 0); if (status != ARES_SUCCESS) { goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -1167,7 +1167,7 @@ ares_status_t ares_dns_write_buf_tcp(const ares_dns_record_t *dnsrec, goto done; /* LCOV_EXCL_LINE: OutOfMemory */ } - len = ares__buf_len(buf); + len = ares_buf_len(buf); msg_len = len - orig_len - 2; if (msg_len > 65535) { status = ARES_EBADQUERY; @@ -1176,16 +1176,16 @@ ares_status_t ares_dns_write_buf_tcp(const ares_dns_record_t *dnsrec, /* Now we need to overwrite the length, so we jump back to the original * message length, overwrite the section and jump back */ - ares__buf_set_length(buf, orig_len); - status = ares__buf_append_be16(buf, (unsigned short)(msg_len & 0xFFFF)); + ares_buf_set_length(buf, orig_len); + status = ares_buf_append_be16(buf, (unsigned short)(msg_len & 0xFFFF)); if (status != ARES_SUCCESS) { goto done; /* LCOV_EXCL_LINE: UntestablePath */ } - ares__buf_set_length(buf, len); + ares_buf_set_length(buf, len); done: if (status != ARES_SUCCESS) { - ares__buf_set_length(buf, orig_len); + ares_buf_set_length(buf, orig_len); } return status; } @@ -1193,7 +1193,7 @@ ares_status_t ares_dns_write_buf_tcp(const ares_dns_record_t *dnsrec, ares_status_t ares_dns_write(const ares_dns_record_t *dnsrec, unsigned char **buf, size_t *buf_len) { - ares__buf_t *b = NULL; + ares_buf_t *b = NULL; ares_status_t status; if (buf == NULL || buf_len == NULL || dnsrec == NULL) { @@ -1203,7 +1203,7 @@ ares_status_t ares_dns_write(const ares_dns_record_t *dnsrec, *buf = NULL; *buf_len = 0; - b = ares__buf_create(); + b = ares_buf_create(); if (b == NULL) { return ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -1211,16 +1211,16 @@ ares_status_t ares_dns_write(const ares_dns_record_t *dnsrec, status = ares_dns_write_buf(dnsrec, b); if (status != ARES_SUCCESS) { - ares__buf_destroy(b); + ares_buf_destroy(b); return status; } - *buf = ares__buf_finish_bin(b, buf_len); + *buf = ares_buf_finish_bin(b, buf_len); return status; } -void ares_dns_record_write_ttl_decrement(ares_dns_record_t *dnsrec, - unsigned int ttl_decrement) +void ares_dns_record_ttl_decrement(ares_dns_record_t *dnsrec, + unsigned int ttl_decrement) { if (dnsrec == NULL) { return; diff --git a/deps/cares/src/lib/str/ares__buf.c b/deps/cares/src/lib/str/ares_buf.c similarity index 55% rename from deps/cares/src/lib/str/ares__buf.c rename to deps/cares/src/lib/str/ares_buf.c index bf6d4a0e1d3712..69e6b38aac849e 100644 --- a/deps/cares/src/lib/str/ares__buf.c +++ b/deps/cares/src/lib/str/ares_buf.c @@ -24,13 +24,13 @@ * SPDX-License-Identifier: MIT */ #include "ares_private.h" -#include "ares__buf.h" +#include "ares_buf.h" #include #ifdef HAVE_STDINT_H # include #endif -struct ares__buf { +struct ares_buf { const unsigned char *data; /*!< pointer to start of data buffer */ size_t data_len; /*!< total size of data in buffer */ @@ -43,9 +43,9 @@ struct ares__buf { * SIZE_MAX if not set. */ }; -ares__buf_t *ares__buf_create(void) +ares_buf_t *ares_buf_create(void) { - ares__buf_t *buf = ares_malloc_zero(sizeof(*buf)); + ares_buf_t *buf = ares_malloc_zero(sizeof(*buf)); if (buf == NULL) { return NULL; } @@ -54,15 +54,15 @@ ares__buf_t *ares__buf_create(void) return buf; } -ares__buf_t *ares__buf_create_const(const unsigned char *data, size_t data_len) +ares_buf_t *ares_buf_create_const(const unsigned char *data, size_t data_len) { - ares__buf_t *buf; + ares_buf_t *buf; if (data == NULL || data_len == 0) { return NULL; } - buf = ares__buf_create(); + buf = ares_buf_create(); if (buf == NULL) { return NULL; } @@ -73,7 +73,7 @@ ares__buf_t *ares__buf_create_const(const unsigned char *data, size_t data_len) return buf; } -void ares__buf_destroy(ares__buf_t *buf) +void ares_buf_destroy(ares_buf_t *buf) { if (buf == NULL) { return; @@ -82,7 +82,7 @@ void ares__buf_destroy(ares__buf_t *buf) ares_free(buf); } -static ares_bool_t ares__buf_is_const(const ares__buf_t *buf) +static ares_bool_t ares_buf_is_const(const ares_buf_t *buf) { if (buf == NULL) { return ARES_FALSE; /* LCOV_EXCL_LINE: DefensiveCoding */ @@ -95,7 +95,7 @@ static ares_bool_t ares__buf_is_const(const ares__buf_t *buf) return ARES_FALSE; } -void ares__buf_reclaim(ares__buf_t *buf) +void ares_buf_reclaim(ares_buf_t *buf) { size_t prefix_size; size_t data_size; @@ -104,7 +104,7 @@ void ares__buf_reclaim(ares__buf_t *buf) return; } - if (ares__buf_is_const(buf)) { + if (ares_buf_is_const(buf)) { return; /* LCOV_EXCL_LINE: DefensiveCoding */ } @@ -135,8 +135,7 @@ void ares__buf_reclaim(ares__buf_t *buf) } } -static ares_status_t ares__buf_ensure_space(ares__buf_t *buf, - size_t needed_size) +static ares_status_t ares_buf_ensure_space(ares_buf_t *buf, size_t needed_size) { size_t remaining_size; size_t alloc_size; @@ -146,11 +145,11 @@ static ares_status_t ares__buf_ensure_space(ares__buf_t *buf, return ARES_EFORMERR; } - if (ares__buf_is_const(buf)) { + if (ares_buf_is_const(buf)) { return ARES_EFORMERR; /* LCOV_EXCL_LINE: DefensiveCoding */ } - /* When calling ares__buf_finish_str() we end up adding a null terminator, + /* When calling ares_buf_finish_str() we end up adding a null terminator, * so we want to ensure the size is always sufficient for this as we don't * want an ARES_ENOMEM at that point */ needed_size++; @@ -162,7 +161,7 @@ static ares_status_t ares__buf_ensure_space(ares__buf_t *buf, } /* See if just moving consumed data frees up enough space */ - ares__buf_reclaim(buf); + ares_buf_reclaim(buf); remaining_size = buf->alloc_buf_len - buf->data_len; if (remaining_size >= needed_size) { @@ -194,9 +193,9 @@ static ares_status_t ares__buf_ensure_space(ares__buf_t *buf, return ARES_SUCCESS; } -ares_status_t ares__buf_set_length(ares__buf_t *buf, size_t len) +ares_status_t ares_buf_set_length(ares_buf_t *buf, size_t len) { - if (buf == NULL || ares__buf_is_const(buf)) { + if (buf == NULL || ares_buf_is_const(buf)) { return ARES_EFORMERR; /* LCOV_EXCL_LINE: DefensiveCoding */ } @@ -208,8 +207,8 @@ ares_status_t ares__buf_set_length(ares__buf_t *buf, size_t len) return ARES_SUCCESS; } -ares_status_t ares__buf_append(ares__buf_t *buf, const unsigned char *data, - size_t data_len) +ares_status_t ares_buf_append(ares_buf_t *buf, const unsigned char *data, + size_t data_len) { ares_status_t status; @@ -221,7 +220,7 @@ ares_status_t ares__buf_append(ares__buf_t *buf, const unsigned char *data, return ARES_SUCCESS; } - status = ares__buf_ensure_space(buf, data_len); + status = ares_buf_ensure_space(buf, data_len); if (status != ARES_SUCCESS) { return status; } @@ -231,21 +230,21 @@ ares_status_t ares__buf_append(ares__buf_t *buf, const unsigned char *data, return ARES_SUCCESS; } -ares_status_t ares__buf_append_byte(ares__buf_t *buf, unsigned char b) +ares_status_t ares_buf_append_byte(ares_buf_t *buf, unsigned char b) { - return ares__buf_append(buf, &b, 1); + return ares_buf_append(buf, &b, 1); } -ares_status_t ares__buf_append_be16(ares__buf_t *buf, unsigned short u16) +ares_status_t ares_buf_append_be16(ares_buf_t *buf, unsigned short u16) { ares_status_t status; - status = ares__buf_append_byte(buf, (unsigned char)((u16 >> 8) & 0xff)); + status = ares_buf_append_byte(buf, (unsigned char)((u16 >> 8) & 0xff)); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } - status = ares__buf_append_byte(buf, (unsigned char)(u16 & 0xff)); + status = ares_buf_append_byte(buf, (unsigned char)(u16 & 0xff)); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -253,26 +252,26 @@ ares_status_t ares__buf_append_be16(ares__buf_t *buf, unsigned short u16) return ARES_SUCCESS; } -ares_status_t ares__buf_append_be32(ares__buf_t *buf, unsigned int u32) +ares_status_t ares_buf_append_be32(ares_buf_t *buf, unsigned int u32) { ares_status_t status; - status = ares__buf_append_byte(buf, ((unsigned char)(u32 >> 24) & 0xff)); + status = ares_buf_append_byte(buf, ((unsigned char)(u32 >> 24) & 0xff)); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } - status = ares__buf_append_byte(buf, ((unsigned char)(u32 >> 16) & 0xff)); + status = ares_buf_append_byte(buf, ((unsigned char)(u32 >> 16) & 0xff)); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } - status = ares__buf_append_byte(buf, ((unsigned char)(u32 >> 8) & 0xff)); + status = ares_buf_append_byte(buf, ((unsigned char)(u32 >> 8) & 0xff)); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } - status = ares__buf_append_byte(buf, ((unsigned char)u32 & 0xff)); + status = ares_buf_append_byte(buf, ((unsigned char)u32 & 0xff)); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -280,7 +279,7 @@ ares_status_t ares__buf_append_be32(ares__buf_t *buf, unsigned int u32) return ARES_SUCCESS; } -unsigned char *ares__buf_append_start(ares__buf_t *buf, size_t *len) +unsigned char *ares_buf_append_start(ares_buf_t *buf, size_t *len) { ares_status_t status; @@ -288,17 +287,17 @@ unsigned char *ares__buf_append_start(ares__buf_t *buf, size_t *len) return NULL; } - status = ares__buf_ensure_space(buf, *len); + status = ares_buf_ensure_space(buf, *len); if (status != ARES_SUCCESS) { return NULL; } - /* -1 for possible null terminator for ares__buf_finish_str() */ + /* -1 for possible null terminator for ares_buf_finish_str() */ *len = buf->alloc_buf_len - buf->data_len - 1; return buf->alloc_buf + buf->data_len; } -void ares__buf_append_finish(ares__buf_t *buf, size_t len) +void ares_buf_append_finish(ares_buf_t *buf, size_t len) { if (buf == NULL) { return; @@ -307,18 +306,17 @@ void ares__buf_append_finish(ares__buf_t *buf, size_t len) buf->data_len += len; } -unsigned char *ares__buf_finish_bin(ares__buf_t *buf, size_t *len) +unsigned char *ares_buf_finish_bin(ares_buf_t *buf, size_t *len) { unsigned char *ptr = NULL; - if (buf == NULL || len == NULL || ares__buf_is_const(buf)) { + if (buf == NULL || len == NULL || ares_buf_is_const(buf)) { return NULL; } - ares__buf_reclaim(buf); + ares_buf_reclaim(buf); /* We don't want to return NULL except on failure, may be zero-length */ - if (buf->alloc_buf == NULL && - ares__buf_ensure_space(buf, 1) != ARES_SUCCESS) { + if (buf->alloc_buf == NULL && ares_buf_ensure_space(buf, 1) != ARES_SUCCESS) { return NULL; /* LCOV_EXCL_LINE: OutOfMemory */ } ptr = buf->alloc_buf; @@ -327,12 +325,12 @@ unsigned char *ares__buf_finish_bin(ares__buf_t *buf, size_t *len) return ptr; } -char *ares__buf_finish_str(ares__buf_t *buf, size_t *len) +char *ares_buf_finish_str(ares_buf_t *buf, size_t *len) { char *ptr; size_t mylen; - ptr = (char *)ares__buf_finish_bin(buf, &mylen); + ptr = (char *)ares_buf_finish_bin(buf, &mylen); if (ptr == NULL) { return NULL; } @@ -341,14 +339,14 @@ char *ares__buf_finish_str(ares__buf_t *buf, size_t *len) *len = mylen; } - /* NOTE: ensured via ares__buf_ensure_space() that there is always at least + /* NOTE: ensured via ares_buf_ensure_space() that there is always at least * 1 extra byte available for this specific use-case */ ptr[mylen] = 0; return ptr; } -void ares__buf_tag(ares__buf_t *buf) +void ares_buf_tag(ares_buf_t *buf) { if (buf == NULL) { return; @@ -357,7 +355,7 @@ void ares__buf_tag(ares__buf_t *buf) buf->tag_offset = buf->offset; } -ares_status_t ares__buf_tag_rollback(ares__buf_t *buf) +ares_status_t ares_buf_tag_rollback(ares_buf_t *buf) { if (buf == NULL || buf->tag_offset == SIZE_MAX) { return ARES_EFORMERR; @@ -368,7 +366,7 @@ ares_status_t ares__buf_tag_rollback(ares__buf_t *buf) return ARES_SUCCESS; } -ares_status_t ares__buf_tag_clear(ares__buf_t *buf) +ares_status_t ares_buf_tag_clear(ares_buf_t *buf) { if (buf == NULL || buf->tag_offset == SIZE_MAX) { return ARES_EFORMERR; @@ -378,7 +376,7 @@ ares_status_t ares__buf_tag_clear(ares__buf_t *buf) return ARES_SUCCESS; } -const unsigned char *ares__buf_tag_fetch(const ares__buf_t *buf, size_t *len) +const unsigned char *ares_buf_tag_fetch(const ares_buf_t *buf, size_t *len) { if (buf == NULL || buf->tag_offset == SIZE_MAX || len == NULL) { return NULL; @@ -388,7 +386,7 @@ const unsigned char *ares__buf_tag_fetch(const ares__buf_t *buf, size_t *len) return buf->data + buf->tag_offset; } -size_t ares__buf_tag_length(const ares__buf_t *buf) +size_t ares_buf_tag_length(const ares_buf_t *buf) { if (buf == NULL || buf->tag_offset == SIZE_MAX) { return 0; @@ -396,11 +394,11 @@ size_t ares__buf_tag_length(const ares__buf_t *buf) return buf->offset - buf->tag_offset; } -ares_status_t ares__buf_tag_fetch_bytes(const ares__buf_t *buf, - unsigned char *bytes, size_t *len) +ares_status_t ares_buf_tag_fetch_bytes(const ares_buf_t *buf, + unsigned char *bytes, size_t *len) { size_t ptr_len = 0; - const unsigned char *ptr = ares__buf_tag_fetch(buf, &ptr_len); + const unsigned char *ptr = ares_buf_tag_fetch(buf, &ptr_len); if (ptr == NULL || bytes == NULL || len == NULL) { return ARES_EFORMERR; @@ -418,8 +416,25 @@ ares_status_t ares__buf_tag_fetch_bytes(const ares__buf_t *buf, return ARES_SUCCESS; } -ares_status_t ares__buf_tag_fetch_string(const ares__buf_t *buf, char *str, - size_t len) +ares_status_t ares_buf_tag_fetch_constbuf(const ares_buf_t *buf, + ares_buf_t **newbuf) +{ + size_t ptr_len = 0; + const unsigned char *ptr = ares_buf_tag_fetch(buf, &ptr_len); + + if (ptr == NULL || newbuf == NULL) { + return ARES_EFORMERR; + } + + *newbuf = ares_buf_create_const(ptr, ptr_len); + if (*newbuf == NULL) { + return ARES_ENOMEM; + } + return ARES_SUCCESS; +} + +ares_status_t ares_buf_tag_fetch_string(const ares_buf_t *buf, char *str, + size_t len) { size_t out_len; ares_status_t status; @@ -432,7 +447,7 @@ ares_status_t ares__buf_tag_fetch_string(const ares__buf_t *buf, char *str, /* Space for NULL terminator */ out_len = len - 1; - status = ares__buf_tag_fetch_bytes(buf, (unsigned char *)str, &out_len); + status = ares_buf_tag_fetch_bytes(buf, (unsigned char *)str, &out_len); if (status != ARES_SUCCESS) { return status; } @@ -442,7 +457,7 @@ ares_status_t ares__buf_tag_fetch_string(const ares__buf_t *buf, char *str, /* Validate string is printable */ for (i = 0; i < out_len; i++) { - if (!ares__isprint(str[i])) { + if (!ares_isprint(str[i])) { return ARES_EBADSTR; } } @@ -450,7 +465,32 @@ ares_status_t ares__buf_tag_fetch_string(const ares__buf_t *buf, char *str, return ARES_SUCCESS; } -static const unsigned char *ares__buf_fetch(const ares__buf_t *buf, size_t *len) +ares_status_t ares_buf_tag_fetch_strdup(const ares_buf_t *buf, char **str) +{ + size_t ptr_len = 0; + const unsigned char *ptr = ares_buf_tag_fetch(buf, &ptr_len); + + if (ptr == NULL || str == NULL) { + return ARES_EFORMERR; + } + + if (!ares_str_isprint((const char *)ptr, ptr_len)) { + return ARES_EBADSTR; + } + + *str = ares_malloc(ptr_len + 1); + if (*str == NULL) { + return ARES_ENOMEM; + } + + if (ptr_len > 0) { + memcpy(*str, ptr, ptr_len); + } + (*str)[ptr_len] = 0; + return ARES_SUCCESS; +} + +static const unsigned char *ares_buf_fetch(const ares_buf_t *buf, size_t *len) { if (len != NULL) { *len = 0; @@ -468,9 +508,9 @@ static const unsigned char *ares__buf_fetch(const ares__buf_t *buf, size_t *len) return buf->data + buf->offset; } -ares_status_t ares__buf_consume(ares__buf_t *buf, size_t len) +ares_status_t ares_buf_consume(ares_buf_t *buf, size_t len) { - size_t remaining_len = ares__buf_len(buf); + size_t remaining_len = ares_buf_len(buf); if (remaining_len < len) { return ARES_EBADRESP; @@ -480,10 +520,10 @@ ares_status_t ares__buf_consume(ares__buf_t *buf, size_t len) return ARES_SUCCESS; } -ares_status_t ares__buf_fetch_be16(ares__buf_t *buf, unsigned short *u16) +ares_status_t ares_buf_fetch_be16(ares_buf_t *buf, unsigned short *u16) { size_t remaining_len; - const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len); + const unsigned char *ptr = ares_buf_fetch(buf, &remaining_len); unsigned int u32; if (buf == NULL || u16 == NULL || remaining_len < sizeof(*u16)) { @@ -495,13 +535,13 @@ ares_status_t ares__buf_fetch_be16(ares__buf_t *buf, unsigned short *u16) u32 = ((unsigned int)(ptr[0]) << 8 | (unsigned int)ptr[1]); *u16 = (unsigned short)(u32 & 0xFFFF); - return ares__buf_consume(buf, sizeof(*u16)); + return ares_buf_consume(buf, sizeof(*u16)); } -ares_status_t ares__buf_fetch_be32(ares__buf_t *buf, unsigned int *u32) +ares_status_t ares_buf_fetch_be32(ares_buf_t *buf, unsigned int *u32) { size_t remaining_len; - const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len); + const unsigned char *ptr = ares_buf_fetch(buf, &remaining_len); if (buf == NULL || u32 == NULL || remaining_len < sizeof(*u32)) { return ARES_EBADRESP; @@ -510,29 +550,29 @@ ares_status_t ares__buf_fetch_be32(ares__buf_t *buf, unsigned int *u32) *u32 = ((unsigned int)(ptr[0]) << 24 | (unsigned int)(ptr[1]) << 16 | (unsigned int)(ptr[2]) << 8 | (unsigned int)(ptr[3])); - return ares__buf_consume(buf, sizeof(*u32)); + return ares_buf_consume(buf, sizeof(*u32)); } -ares_status_t ares__buf_fetch_bytes(ares__buf_t *buf, unsigned char *bytes, - size_t len) +ares_status_t ares_buf_fetch_bytes(ares_buf_t *buf, unsigned char *bytes, + size_t len) { size_t remaining_len; - const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len); + const unsigned char *ptr = ares_buf_fetch(buf, &remaining_len); if (buf == NULL || bytes == NULL || len == 0 || remaining_len < len) { return ARES_EBADRESP; } memcpy(bytes, ptr, len); - return ares__buf_consume(buf, len); + return ares_buf_consume(buf, len); } -ares_status_t ares__buf_fetch_bytes_dup(ares__buf_t *buf, size_t len, - ares_bool_t null_term, - unsigned char **bytes) +ares_status_t ares_buf_fetch_bytes_dup(ares_buf_t *buf, size_t len, + ares_bool_t null_term, + unsigned char **bytes) { size_t remaining_len; - const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len); + const unsigned char *ptr = ares_buf_fetch(buf, &remaining_len); if (buf == NULL || bytes == NULL || len == 0 || remaining_len < len) { return ARES_EBADRESP; @@ -547,18 +587,26 @@ ares_status_t ares__buf_fetch_bytes_dup(ares__buf_t *buf, size_t len, if (null_term) { (*bytes)[len] = 0; } - return ares__buf_consume(buf, len); + return ares_buf_consume(buf, len); } -ares_status_t ares__buf_fetch_str_dup(ares__buf_t *buf, size_t len, char **str) +ares_status_t ares_buf_fetch_str_dup(ares_buf_t *buf, size_t len, char **str) { size_t remaining_len; - const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len); + size_t i; + const unsigned char *ptr = ares_buf_fetch(buf, &remaining_len); if (buf == NULL || str == NULL || len == 0 || remaining_len < len) { return ARES_EBADRESP; } + /* Validate string is printable */ + for (i = 0; i < len; i++) { + if (!ares_isprint(ptr[i])) { + return ARES_EBADSTR; + } + } + *str = ares_malloc(len + 1); if (*str == NULL) { return ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ @@ -567,30 +615,30 @@ ares_status_t ares__buf_fetch_str_dup(ares__buf_t *buf, size_t len, char **str) memcpy(*str, ptr, len); (*str)[len] = 0; - return ares__buf_consume(buf, len); + return ares_buf_consume(buf, len); } -ares_status_t ares__buf_fetch_bytes_into_buf(ares__buf_t *buf, - ares__buf_t *dest, size_t len) +ares_status_t ares_buf_fetch_bytes_into_buf(ares_buf_t *buf, ares_buf_t *dest, + size_t len) { size_t remaining_len; - const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len); + const unsigned char *ptr = ares_buf_fetch(buf, &remaining_len); ares_status_t status; if (buf == NULL || dest == NULL || len == 0 || remaining_len < len) { return ARES_EBADRESP; } - status = ares__buf_append(dest, ptr, len); + status = ares_buf_append(dest, ptr, len); if (status != ARES_SUCCESS) { return status; } - return ares__buf_consume(buf, len); + return ares_buf_consume(buf, len); } -static ares_bool_t ares__is_whitespace(unsigned char c, - ares_bool_t include_linefeed) +static ares_bool_t ares_is_whitespace(unsigned char c, + ares_bool_t include_linefeed) { switch (c) { case '\r': @@ -607,11 +655,11 @@ static ares_bool_t ares__is_whitespace(unsigned char c, return ARES_FALSE; } -size_t ares__buf_consume_whitespace(ares__buf_t *buf, - ares_bool_t include_linefeed) +size_t ares_buf_consume_whitespace(ares_buf_t *buf, + ares_bool_t include_linefeed) { size_t remaining_len = 0; - const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len); + const unsigned char *ptr = ares_buf_fetch(buf, &remaining_len); size_t i; if (ptr == NULL) { @@ -619,21 +667,21 @@ size_t ares__buf_consume_whitespace(ares__buf_t *buf, } for (i = 0; i < remaining_len; i++) { - if (!ares__is_whitespace(ptr[i], include_linefeed)) { + if (!ares_is_whitespace(ptr[i], include_linefeed)) { break; } } if (i > 0) { - ares__buf_consume(buf, i); + ares_buf_consume(buf, i); } return i; } -size_t ares__buf_consume_nonwhitespace(ares__buf_t *buf) +size_t ares_buf_consume_nonwhitespace(ares_buf_t *buf) { size_t remaining_len = 0; - const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len); + const unsigned char *ptr = ares_buf_fetch(buf, &remaining_len); size_t i; if (ptr == NULL) { @@ -641,21 +689,21 @@ size_t ares__buf_consume_nonwhitespace(ares__buf_t *buf) } for (i = 0; i < remaining_len; i++) { - if (ares__is_whitespace(ptr[i], ARES_TRUE)) { + if (ares_is_whitespace(ptr[i], ARES_TRUE)) { break; } } if (i > 0) { - ares__buf_consume(buf, i); + ares_buf_consume(buf, i); } return i; } -size_t ares__buf_consume_line(ares__buf_t *buf, ares_bool_t include_linefeed) +size_t ares_buf_consume_line(ares_buf_t *buf, ares_bool_t include_linefeed) { size_t remaining_len = 0; - const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len); + const unsigned char *ptr = ares_buf_fetch(buf, &remaining_len); size_t i; if (ptr == NULL) { @@ -674,28 +722,40 @@ size_t ares__buf_consume_line(ares__buf_t *buf, ares_bool_t include_linefeed) } if (i > 0) { - ares__buf_consume(buf, i); + ares_buf_consume(buf, i); } return i; } -size_t ares__buf_consume_until_charset(ares__buf_t *buf, - const unsigned char *charset, size_t len, - ares_bool_t require_charset) +size_t ares_buf_consume_until_charset(ares_buf_t *buf, + const unsigned char *charset, size_t len, + ares_bool_t require_charset) { size_t remaining_len = 0; - const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len); - size_t i; + const unsigned char *ptr = ares_buf_fetch(buf, &remaining_len); + size_t pos; ares_bool_t found = ARES_FALSE; if (ptr == NULL || charset == NULL || len == 0) { return 0; } - for (i = 0; i < remaining_len; i++) { + /* Optimize for single character searches */ + if (len == 1) { + const unsigned char *p = memchr(ptr, charset[0], remaining_len); + if (p != NULL) { + found = ARES_TRUE; + pos = (size_t)(p - ptr); + } else { + pos = remaining_len; + } + goto done; + } + + for (pos = 0; pos < remaining_len; pos++) { size_t j; for (j = 0; j < len; j++) { - if (ptr[i] == charset[j]) { + if (ptr[pos] == charset[j]) { found = ARES_TRUE; goto done; } @@ -704,20 +764,50 @@ size_t ares__buf_consume_until_charset(ares__buf_t *buf, done: if (require_charset && !found) { + return SIZE_MAX; + } + + if (pos > 0) { + ares_buf_consume(buf, pos); + } + return pos; +} + +size_t ares_buf_consume_until_seq(ares_buf_t *buf, const unsigned char *seq, + size_t len, ares_bool_t require_seq) +{ + size_t remaining_len = 0; + const unsigned char *ptr = ares_buf_fetch(buf, &remaining_len); + const unsigned char *p; + size_t consume_len = 0; + + if (ptr == NULL || seq == NULL || len == 0) { return 0; } - if (i > 0) { - ares__buf_consume(buf, i); + p = ares_memmem(ptr, remaining_len, seq, len); + if (require_seq && p == NULL) { + return SIZE_MAX; } - return i; + + if (p != NULL) { + consume_len = (size_t)(p - ptr); + } else { + consume_len = remaining_len; + } + + if (consume_len > 0) { + ares_buf_consume(buf, consume_len); + } + + return consume_len; } -size_t ares__buf_consume_charset(ares__buf_t *buf, const unsigned char *charset, - size_t len) +size_t ares_buf_consume_charset(ares_buf_t *buf, const unsigned char *charset, + size_t len) { size_t remaining_len = 0; - const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len); + const unsigned char *ptr = ares_buf_fetch(buf, &remaining_len); size_t i; if (ptr == NULL || charset == NULL || len == 0) { @@ -738,28 +828,30 @@ size_t ares__buf_consume_charset(ares__buf_t *buf, const unsigned char *charset, } if (i > 0) { - ares__buf_consume(buf, i); + ares_buf_consume(buf, i); } return i; } -static void ares__buf_destroy_cb(void *arg) +static void ares_buf_destroy_cb(void *arg) { - ares__buf_destroy(arg); + ares_buf_t **buf = arg; + ares_buf_destroy(*buf); } -static ares_bool_t ares__buf_split_isduplicate(ares__llist_t *list, - const unsigned char *val, - size_t len, - ares__buf_split_t flags) +static ares_bool_t ares_buf_split_isduplicate(ares_array_t *arr, + const unsigned char *val, + size_t len, + ares_buf_split_t flags) { - ares__llist_node_t *node; + size_t i; + size_t num = ares_array_len(arr); - for (node = ares__llist_node_first(list); node != NULL; - node = ares__llist_node_next(node)) { - const ares__buf_t *buf = ares__llist_node_val(node); - size_t plen = 0; - const unsigned char *ptr = ares__buf_peek(buf, &plen); + for (i = 0; i < num; i++) { + ares_buf_t **bufptr = ares_array_at(arr, i); + const ares_buf_t *buf = *bufptr; + size_t plen = 0; + const unsigned char *ptr = ares_buf_peek(buf, &plen); /* Can't be duplicate if lengths mismatch */ if (plen != len) { @@ -767,61 +859,62 @@ static ares_bool_t ares__buf_split_isduplicate(ares__llist_t *list, } if (flags & ARES_BUF_SPLIT_CASE_INSENSITIVE) { - if (ares__memeq_ci(ptr, val, len)) { + if (ares_memeq_ci(ptr, val, len)) { return ARES_TRUE; } } else { - if (memcmp(ptr, val, len) == 0) { + if (ares_memeq(ptr, val, len)) { return ARES_TRUE; } } } + return ARES_FALSE; } -ares_status_t ares__buf_split(ares__buf_t *buf, const unsigned char *delims, - size_t delims_len, ares__buf_split_t flags, - size_t max_sections, ares__llist_t **list) +ares_status_t ares_buf_split(ares_buf_t *buf, const unsigned char *delims, + size_t delims_len, ares_buf_split_t flags, + size_t max_sections, ares_array_t **arr) { ares_status_t status = ARES_SUCCESS; ares_bool_t first = ARES_TRUE; - if (buf == NULL || delims == NULL || delims_len == 0 || list == NULL) { + if (buf == NULL || delims == NULL || delims_len == 0 || arr == NULL) { return ARES_EFORMERR; /* LCOV_EXCL_LINE: DefensiveCoding */ } - *list = ares__llist_create(ares__buf_destroy_cb); - if (*list == NULL) { + *arr = ares_array_create(sizeof(ares_buf_t *), ares_buf_destroy_cb); + if (*arr == NULL) { status = ARES_ENOMEM; goto done; } - while (ares__buf_len(buf)) { + while (ares_buf_len(buf)) { size_t len = 0; const unsigned char *ptr; if (first) { /* No delimiter yet, just tag the start */ - ares__buf_tag(buf); + ares_buf_tag(buf); } else { - if (flags & ARES_BUF_SPLIT_DONT_CONSUME_DELIMS) { + if (flags & ARES_BUF_SPLIT_KEEP_DELIMS) { /* tag then eat delimiter so its first byte in buffer */ - ares__buf_tag(buf); - ares__buf_consume(buf, 1); + ares_buf_tag(buf); + ares_buf_consume(buf, 1); } else { /* throw away delimiter */ - ares__buf_consume(buf, 1); - ares__buf_tag(buf); + ares_buf_consume(buf, 1); + ares_buf_tag(buf); } } - if (max_sections && ares__llist_len(*list) >= max_sections - 1) { - ares__buf_consume(buf, ares__buf_len(buf)); + if (max_sections && ares_array_len(*arr) >= max_sections - 1) { + ares_buf_consume(buf, ares_buf_len(buf)); } else { - ares__buf_consume_until_charset(buf, delims, delims_len, ARES_FALSE); + ares_buf_consume_until_charset(buf, delims, delims_len, ARES_FALSE); } - ptr = ares__buf_tag_fetch(buf, &len); + ptr = ares_buf_tag_fetch(buf, &len); /* Shouldn't be possible */ if (ptr == NULL) { @@ -832,7 +925,7 @@ ares_status_t ares__buf_split(ares__buf_t *buf, const unsigned char *delims, if (flags & ARES_BUF_SPLIT_LTRIM) { size_t i; for (i = 0; i < len; i++) { - if (!ares__is_whitespace(ptr[i], ARES_TRUE)) { + if (!ares_is_whitespace(ptr[i], ARES_TRUE)) { break; } } @@ -841,22 +934,22 @@ ares_status_t ares__buf_split(ares__buf_t *buf, const unsigned char *delims, } if (flags & ARES_BUF_SPLIT_RTRIM) { - while (len > 0 && ares__is_whitespace(ptr[len - 1], ARES_TRUE)) { + while (len > 0 && ares_is_whitespace(ptr[len - 1], ARES_TRUE)) { len--; } } if (len != 0 || flags & ARES_BUF_SPLIT_ALLOW_BLANK) { - ares__buf_t *data; + ares_buf_t *data; if (!(flags & ARES_BUF_SPLIT_NO_DUPLICATES) || - !ares__buf_split_isduplicate(*list, ptr, len, flags)) { + !ares_buf_split_isduplicate(*arr, ptr, len, flags)) { /* Since we don't allow const buffers of 0 length, and user wants * 0-length buffers, swap what we do here */ if (len) { - data = ares__buf_create_const(ptr, len); + data = ares_buf_create_const(ptr, len); } else { - data = ares__buf_create(); + data = ares_buf_create(); } if (data == NULL) { @@ -864,9 +957,9 @@ ares_status_t ares__buf_split(ares__buf_t *buf, const unsigned char *delims, goto done; } - if (ares__llist_insert_last(*list, data) == NULL) { - ares__buf_destroy(data); - status = ARES_ENOMEM; + status = ares_array_insertdata_last(*arr, &data); + if (status != ARES_SUCCESS) { + ares_buf_destroy(data); goto done; } } @@ -877,18 +970,110 @@ ares_status_t ares__buf_split(ares__buf_t *buf, const unsigned char *delims, done: if (status != ARES_SUCCESS) { - ares__llist_destroy(*list); - *list = NULL; + ares_array_destroy(*arr); + *arr = NULL; } return status; } -ares_bool_t ares__buf_begins_with(const ares__buf_t *buf, - const unsigned char *data, size_t data_len) +static void ares_free_split_array(void *arg) +{ + void **ptr = arg; + ares_free(*ptr); +} + +ares_status_t ares_buf_split_str_array(ares_buf_t *buf, + const unsigned char *delims, + size_t delims_len, + ares_buf_split_t flags, + size_t max_sections, ares_array_t **arr) +{ + ares_status_t status; + ares_array_t *split = NULL; + size_t i; + size_t len; + + if (arr == NULL) { + return ARES_EFORMERR; + } + + *arr = NULL; + + status = ares_buf_split(buf, delims, delims_len, flags, max_sections, &split); + if (status != ARES_SUCCESS) { + goto done; + } + + *arr = ares_array_create(sizeof(char *), ares_free_split_array); + if (*arr == NULL) { + status = ARES_ENOMEM; + goto done; + } + + len = ares_array_len(split); + for (i = 0; i < len; i++) { + ares_buf_t **bufptr = ares_array_at(split, i); + ares_buf_t *lbuf = *bufptr; + char *str = NULL; + + status = ares_buf_fetch_str_dup(lbuf, ares_buf_len(lbuf), &str); + if (status != ARES_SUCCESS) { + goto done; + } + + status = ares_array_insertdata_last(*arr, &str); + if (status != ARES_SUCCESS) { + ares_free(str); + goto done; + } + } + +done: + ares_array_destroy(split); + if (status != ARES_SUCCESS) { + ares_array_destroy(*arr); + *arr = NULL; + } + return status; +} + +ares_status_t ares_buf_split_str(ares_buf_t *buf, const unsigned char *delims, + size_t delims_len, ares_buf_split_t flags, + size_t max_sections, char ***strs, + size_t *nstrs) +{ + ares_status_t status; + ares_array_t *arr = NULL; + + if (strs == NULL || nstrs == NULL) { + return ARES_EFORMERR; + } + + *strs = NULL; + *nstrs = 0; + + status = ares_buf_split_str_array(buf, delims, delims_len, flags, + max_sections, &arr); + + if (status != ARES_SUCCESS) { + goto done; + } + +done: + if (status == ARES_SUCCESS) { + *strs = ares_array_finish(arr, nstrs); + } else { + ares_array_destroy(arr); + } + return status; +} + +ares_bool_t ares_buf_begins_with(const ares_buf_t *buf, + const unsigned char *data, size_t data_len) { size_t remaining_len = 0; - const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len); + const unsigned char *ptr = ares_buf_fetch(buf, &remaining_len); if (ptr == NULL || data == NULL || data_len == 0) { return ARES_FALSE; @@ -905,7 +1090,7 @@ ares_bool_t ares__buf_begins_with(const ares__buf_t *buf, return ARES_TRUE; } -size_t ares__buf_len(const ares__buf_t *buf) +size_t ares_buf_len(const ares_buf_t *buf) { if (buf == NULL) { return 0; @@ -914,12 +1099,28 @@ size_t ares__buf_len(const ares__buf_t *buf) return buf->data_len - buf->offset; } -const unsigned char *ares__buf_peek(const ares__buf_t *buf, size_t *len) +const unsigned char *ares_buf_peek(const ares_buf_t *buf, size_t *len) { - return ares__buf_fetch(buf, len); + return ares_buf_fetch(buf, len); +} + +ares_status_t ares_buf_peek_byte(const ares_buf_t *buf, unsigned char *b) +{ + size_t remaining_len = 0; + const unsigned char *ptr = ares_buf_fetch(buf, &remaining_len); + + if (buf == NULL || b == NULL) { + return ARES_EFORMERR; + } + + if (remaining_len == 0) { + return ARES_EBADRESP; + } + *b = ptr[0]; + return ARES_SUCCESS; } -size_t ares__buf_get_position(const ares__buf_t *buf) +size_t ares_buf_get_position(const ares_buf_t *buf) { if (buf == NULL) { return 0; @@ -927,7 +1128,7 @@ size_t ares__buf_get_position(const ares__buf_t *buf) return buf->offset; } -ares_status_t ares__buf_set_position(ares__buf_t *buf, size_t idx) +ares_status_t ares_buf_set_position(ares_buf_t *buf, size_t idx) { if (buf == NULL) { return ARES_EFORMERR; @@ -941,84 +1142,14 @@ ares_status_t ares__buf_set_position(ares__buf_t *buf, size_t idx) return ARES_SUCCESS; } -ares_status_t ares__buf_parse_dns_abinstr(ares__buf_t *buf, - size_t remaining_len, - ares__dns_multistring_t **strs, - ares_bool_t validate_printable) -{ - unsigned char len; - ares_status_t status = ARES_EBADRESP; - size_t orig_len = ares__buf_len(buf); - - if (buf == NULL) { - return ARES_EFORMERR; - } - - if (remaining_len == 0) { - return ARES_EBADRESP; - } - - if (strs != NULL) { - *strs = ares__dns_multistring_create(); - if (*strs == NULL) { - return ARES_ENOMEM; - } - } - - while (orig_len - ares__buf_len(buf) < remaining_len) { - status = ares__buf_fetch_bytes(buf, &len, 1); - if (status != ARES_SUCCESS) { - break; /* LCOV_EXCL_LINE: DefensiveCoding */ - } - - if (len) { - /* When used by the _str() parser, it really needs to be validated to - * be a valid printable ascii string. Do that here */ - if (validate_printable && ares__buf_len(buf) >= len) { - size_t mylen; - const char *data = (const char *)ares__buf_peek(buf, &mylen); - if (!ares__str_isprint(data, len)) { - status = ARES_EBADSTR; - break; - } - } - - if (strs != NULL) { - unsigned char *data = NULL; - status = ares__buf_fetch_bytes_dup(buf, len, ARES_TRUE, &data); - if (status != ARES_SUCCESS) { - break; - } - status = ares__dns_multistring_add_own(*strs, data, len); - if (status != ARES_SUCCESS) { - ares_free(data); - break; - } - } else { - status = ares__buf_consume(buf, len); - if (status != ARES_SUCCESS) { - break; - } - } - } - } - - if (status != ARES_SUCCESS && strs != NULL) { - ares__dns_multistring_destroy(*strs); - *strs = NULL; - } - - return status; -} - static ares_status_t - ares__buf_parse_dns_binstr_int(ares__buf_t *buf, size_t remaining_len, - unsigned char **bin, size_t *bin_len, - ares_bool_t validate_printable) + ares_buf_parse_dns_binstr_int(ares_buf_t *buf, size_t remaining_len, + unsigned char **bin, size_t *bin_len, + ares_bool_t validate_printable) { unsigned char len; ares_status_t status = ARES_EBADRESP; - ares__buf_t *binbuf = NULL; + ares_buf_t *binbuf = NULL; if (buf == NULL) { return ARES_EFORMERR; @@ -1028,12 +1159,12 @@ static ares_status_t return ARES_EBADRESP; } - binbuf = ares__buf_create(); + binbuf = ares_buf_create(); if (binbuf == NULL) { return ARES_ENOMEM; } - status = ares__buf_fetch_bytes(buf, &len, 1); + status = ares_buf_fetch_bytes(buf, &len, 1); if (status != ARES_SUCCESS) { goto done; /* LCOV_EXCL_LINE: DefensiveCoding */ } @@ -1048,32 +1179,32 @@ static ares_status_t if (len) { /* When used by the _str() parser, it really needs to be validated to * be a valid printable ascii string. Do that here */ - if (validate_printable && ares__buf_len(buf) >= len) { + if (validate_printable && ares_buf_len(buf) >= len) { size_t mylen; - const char *data = (const char *)ares__buf_peek(buf, &mylen); - if (!ares__str_isprint(data, len)) { + const char *data = (const char *)ares_buf_peek(buf, &mylen); + if (!ares_str_isprint(data, len)) { status = ARES_EBADSTR; goto done; } } if (bin != NULL) { - status = ares__buf_fetch_bytes_into_buf(buf, binbuf, len); + status = ares_buf_fetch_bytes_into_buf(buf, binbuf, len); } else { - status = ares__buf_consume(buf, len); + status = ares_buf_consume(buf, len); } } done: if (status != ARES_SUCCESS) { - ares__buf_destroy(binbuf); + ares_buf_destroy(binbuf); } else { if (bin != NULL) { size_t mylen = 0; - /* NOTE: we use ares__buf_finish_str() here as we guarantee NULL + /* NOTE: we use ares_buf_finish_str() here as we guarantee NULL * Termination even though we are technically returning binary data. */ - *bin = (unsigned char *)ares__buf_finish_str(binbuf, &mylen); + *bin = (unsigned char *)ares_buf_finish_str(binbuf, &mylen); *bin_len = mylen; } } @@ -1081,32 +1212,32 @@ static ares_status_t return status; } -ares_status_t ares__buf_parse_dns_binstr(ares__buf_t *buf, size_t remaining_len, - unsigned char **bin, size_t *bin_len) +ares_status_t ares_buf_parse_dns_binstr(ares_buf_t *buf, size_t remaining_len, + unsigned char **bin, size_t *bin_len) { - return ares__buf_parse_dns_binstr_int(buf, remaining_len, bin, bin_len, - ARES_FALSE); + return ares_buf_parse_dns_binstr_int(buf, remaining_len, bin, bin_len, + ARES_FALSE); } -ares_status_t ares__buf_parse_dns_str(ares__buf_t *buf, size_t remaining_len, - char **str) +ares_status_t ares_buf_parse_dns_str(ares_buf_t *buf, size_t remaining_len, + char **str) { size_t len; - return ares__buf_parse_dns_binstr_int(buf, remaining_len, - (unsigned char **)str, &len, ARES_TRUE); + return ares_buf_parse_dns_binstr_int(buf, remaining_len, + (unsigned char **)str, &len, ARES_TRUE); } -ares_status_t ares__buf_append_num_dec(ares__buf_t *buf, size_t num, size_t len) +ares_status_t ares_buf_append_num_dec(ares_buf_t *buf, size_t num, size_t len) { size_t i; size_t mod; if (len == 0) { - len = ares__count_digits(num); + len = ares_count_digits(num); } - mod = ares__pow(10, len); + mod = ares_pow(10, len); for (i = len; i > 0; i--) { size_t digit = (num % mod); @@ -1120,7 +1251,7 @@ ares_status_t ares__buf_append_num_dec(ares__buf_t *buf, size_t num, size_t len) } digit /= mod; - status = ares__buf_append_byte(buf, '0' + (unsigned char)(digit & 0xFF)); + status = ares_buf_append_byte(buf, '0' + (unsigned char)(digit & 0xFF)); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -1128,18 +1259,18 @@ ares_status_t ares__buf_append_num_dec(ares__buf_t *buf, size_t num, size_t len) return ARES_SUCCESS; } -ares_status_t ares__buf_append_num_hex(ares__buf_t *buf, size_t num, size_t len) +ares_status_t ares_buf_append_num_hex(ares_buf_t *buf, size_t num, size_t len) { size_t i; static const unsigned char hexbytes[] = "0123456789ABCDEF"; if (len == 0) { - len = ares__count_hexdigits(num); + len = ares_count_hexdigits(num); } for (i = len; i > 0; i--) { ares_status_t status; - status = ares__buf_append_byte(buf, hexbytes[(num >> ((i - 1) * 4)) & 0xF]); + status = ares_buf_append_byte(buf, hexbytes[(num >> ((i - 1) * 4)) & 0xF]); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -1147,48 +1278,48 @@ ares_status_t ares__buf_append_num_hex(ares__buf_t *buf, size_t num, size_t len) return ARES_SUCCESS; } -ares_status_t ares__buf_append_str(ares__buf_t *buf, const char *str) +ares_status_t ares_buf_append_str(ares_buf_t *buf, const char *str) { - return ares__buf_append(buf, (const unsigned char *)str, ares_strlen(str)); + return ares_buf_append(buf, (const unsigned char *)str, ares_strlen(str)); } -static ares_status_t ares__buf_hexdump_line(ares__buf_t *buf, size_t idx, - const unsigned char *data, - size_t len) +static ares_status_t ares_buf_hexdump_line(ares_buf_t *buf, size_t idx, + const unsigned char *data, + size_t len) { size_t i; ares_status_t status; /* Address */ - status = ares__buf_append_num_hex(buf, idx, 6); + status = ares_buf_append_num_hex(buf, idx, 6); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } /* | */ - status = ares__buf_append_str(buf, " | "); + status = ares_buf_append_str(buf, " | "); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } for (i = 0; i < 16; i++) { if (i >= len) { - status = ares__buf_append_str(buf, " "); + status = ares_buf_append_str(buf, " "); } else { - status = ares__buf_append_num_hex(buf, data[i], 2); + status = ares_buf_append_num_hex(buf, data[i], 2); } if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } - status = ares__buf_append_byte(buf, ' '); + status = ares_buf_append_byte(buf, ' '); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } } /* | */ - status = ares__buf_append_str(buf, " | "); + status = ares_buf_append_str(buf, " | "); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -1197,24 +1328,24 @@ static ares_status_t ares__buf_hexdump_line(ares__buf_t *buf, size_t idx, if (i >= len) { break; } - status = ares__buf_append_byte(buf, ares__isprint(data[i]) ? data[i] : '.'); + status = ares_buf_append_byte(buf, ares_isprint(data[i]) ? data[i] : '.'); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } } - return ares__buf_append_byte(buf, '\n'); + return ares_buf_append_byte(buf, '\n'); } -ares_status_t ares__buf_hexdump(ares__buf_t *buf, const unsigned char *data, - size_t len) +ares_status_t ares_buf_hexdump(ares_buf_t *buf, const unsigned char *data, + size_t len) { size_t i; /* Each line is 16 bytes */ for (i = 0; i < len; i += 16) { ares_status_t status; - status = ares__buf_hexdump_line(buf, i, data + i, len - i); + status = ares_buf_hexdump_line(buf, i, data + i, len - i); if (status != ARES_SUCCESS) { return status; /* LCOV_EXCL_LINE: OutOfMemory */ } @@ -1223,7 +1354,7 @@ ares_status_t ares__buf_hexdump(ares__buf_t *buf, const unsigned char *data, return ARES_SUCCESS; } -ares_status_t ares__buf_load_file(const char *filename, ares__buf_t *buf) +ares_status_t ares_buf_load_file(const char *filename, ares_buf_t *buf) { FILE *fp = NULL; unsigned char *ptr = NULL; @@ -1238,7 +1369,7 @@ ares_status_t ares__buf_load_file(const char *filename, ares__buf_t *buf) fp = fopen(filename, "rb"); if (fp == NULL) { - int error = ERRNO; + int error = errno; switch (error) { case ENOENT: case ESRCH: @@ -1278,7 +1409,7 @@ ares_status_t ares__buf_load_file(const char *filename, ares__buf_t *buf) /* Read entire data into buffer */ ptr_len = len; - ptr = ares__buf_append_start(buf, &ptr_len); + ptr = ares_buf_append_start(buf, &ptr_len); if (ptr == NULL) { status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ goto done; /* LCOV_EXCL_LINE: OutOfMemory */ @@ -1290,7 +1421,7 @@ ares_status_t ares__buf_load_file(const char *filename, ares__buf_t *buf) goto done; /* LCOV_EXCL_LINE: DefensiveCoding */ } - ares__buf_append_finish(buf, len); + ares_buf_append_finish(buf, len); status = ARES_SUCCESS; done: diff --git a/deps/cares/src/lib/str/ares_str.c b/deps/cares/src/lib/str/ares_str.c index ade61041eb920b..f6bfabf11f4467 100644 --- a/deps/cares/src/lib/str/ares_str.c +++ b/deps/cares/src/lib/str/ares_str.c @@ -101,14 +101,30 @@ ares_bool_t ares_str_isnum(const char *str) } for (i = 0; str[i] != 0; i++) { - if (str[i] < '0' || str[i] > '9') { + if (!ares_isdigit(str[i])) { return ARES_FALSE; } } return ARES_TRUE; } -void ares__str_rtrim(char *str) +ares_bool_t ares_str_isalnum(const char *str) +{ + size_t i; + + if (str == NULL || *str == 0) { + return ARES_FALSE; + } + + for (i = 0; str[i] != 0; i++) { + if (!ares_isdigit(str[i]) && !ares_isalpha(str[i])) { + return ARES_FALSE; + } + } + return ARES_TRUE; +} + +void ares_str_rtrim(char *str) { size_t len; size_t i; @@ -119,14 +135,14 @@ void ares__str_rtrim(char *str) len = ares_strlen(str); for (i = len; i > 0; i--) { - if (!ares__isspace(str[i - 1])) { + if (!ares_isspace(str[i - 1])) { break; } } str[i] = 0; } -void ares__str_ltrim(char *str) +void ares_str_ltrim(char *str) { size_t i; size_t len; @@ -135,7 +151,7 @@ void ares__str_ltrim(char *str) return; /* LCOV_EXCL_LINE: DefensiveCoding */ } - for (i = 0; str[i] != 0 && ares__isspace(str[i]); i++) { + for (i = 0; str[i] != 0 && ares_isspace(str[i]); i++) { /* Do nothing */ } @@ -150,15 +166,15 @@ void ares__str_ltrim(char *str) str[len - i] = 0; } -void ares__str_trim(char *str) +void ares_str_trim(char *str) { - ares__str_ltrim(str); - ares__str_rtrim(str); + ares_str_ltrim(str); + ares_str_rtrim(str); } /* tolower() is locale-specific. Use a lookup table fast conversion that only * operates on ASCII */ -static const unsigned char ares__tolower_lookup[] = { +static const unsigned char ares_tolower_lookup[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, @@ -181,81 +197,80 @@ static const unsigned char ares__tolower_lookup[] = { 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF }; -unsigned char ares__tolower(unsigned char c) +unsigned char ares_tolower(unsigned char c) { - return ares__tolower_lookup[c]; + return ares_tolower_lookup[c]; } -ares_bool_t ares__memeq_ci(const unsigned char *ptr, const unsigned char *val, - size_t len) +void ares_str_lower(char *str) { size_t i; - for (i = 0; i < len; i++) { - if (ares__tolower_lookup[ptr[i]] != ares__tolower_lookup[val[i]]) { - return ARES_FALSE; - } + + if (str == NULL) { + return; + } + + for (i = 0; str[i] != 0; i++) { + str[i] = (char)ares_tolower((unsigned char)str[i]); } - return ARES_TRUE; } -ares_bool_t ares__isspace(int ch) +unsigned char *ares_memmem(const unsigned char *big, size_t big_len, + const unsigned char *little, size_t little_len) { - switch (ch) { - case '\r': - case '\t': - case ' ': - case '\v': - case '\f': - case '\n': - return ARES_TRUE; - default: + unsigned char *ptr; + + if (big == NULL || little == NULL || big_len == 0 || little_len == 0) { + return NULL; + } + +#ifdef HAVE_MEMMEM + ptr = memmem(big, big_len, little, little_len); + return ptr; +#else + while (1) { + ptr = memchr(big, little[0], big_len); + if (ptr == NULL) { + break; + } + + big_len -= (size_t)(ptr - big); + big = ptr; + if (big_len < little_len) { break; + } + + if (memcmp(big, little, little_len) == 0) { + return ptr; + } + + big++; + big_len--; } - return ARES_FALSE; + + return NULL; +#endif } -ares_bool_t ares__isprint(int ch) +ares_bool_t ares_memeq(const unsigned char *ptr, const unsigned char *val, + size_t len) { - if (ch >= 0x20 && ch <= 0x7E) { - return ARES_TRUE; - } - return ARES_FALSE; + return memcmp(ptr, val, len) == 0 ? ARES_TRUE : ARES_FALSE; } -/* Character set allowed by hostnames. This is to include the normal - * domain name character set plus: - * - underscores which are used in SRV records. - * - Forward slashes such as are used for classless in-addr.arpa - * delegation (CNAMEs) - * - Asterisks may be used for wildcard domains in CNAMEs as seen in the - * real world. - * While RFC 2181 section 11 does state not to do validation, - * that applies to servers, not clients. Vulnerabilities have been - * reported when this validation is not performed. Security is more - * important than edge-case compatibility (which is probably invalid - * anyhow). */ -ares_bool_t ares__is_hostnamech(int ch) +ares_bool_t ares_memeq_ci(const unsigned char *ptr, const unsigned char *val, + size_t len) { - /* [A-Za-z0-9-*._/] - * Don't use isalnum() as it is locale-specific - */ - if (ch >= 'A' && ch <= 'Z') { - return ARES_TRUE; - } - if (ch >= 'a' && ch <= 'z') { - return ARES_TRUE; - } - if (ch >= '0' && ch <= '9') { - return ARES_TRUE; - } - if (ch == '-' || ch == '.' || ch == '_' || ch == '/' || ch == '*') { - return ARES_TRUE; + size_t i; + for (i = 0; i < len; i++) { + if (ares_tolower_lookup[ptr[i]] != ares_tolower_lookup[val[i]]) { + return ARES_FALSE; + } } - - return ARES_FALSE; + return ARES_TRUE; } -ares_bool_t ares__is_hostname(const char *str) +ares_bool_t ares_is_hostname(const char *str) { size_t i; @@ -264,14 +279,14 @@ ares_bool_t ares__is_hostname(const char *str) } for (i = 0; str[i] != 0; i++) { - if (!ares__is_hostnamech(str[i])) { + if (!ares_is_hostnamech(str[i])) { return ARES_FALSE; } } return ARES_TRUE; } -ares_bool_t ares__str_isprint(const char *str, size_t len) +ares_bool_t ares_str_isprint(const char *str, size_t len) { size_t i; @@ -280,9 +295,197 @@ ares_bool_t ares__str_isprint(const char *str, size_t len) } for (i = 0; i < len; i++) { - if (!ares__isprint(str[i])) { + if (!ares_isprint(str[i])) { return ARES_FALSE; } } return ARES_TRUE; } + +int ares_strcmp(const char *a, const char *b) +{ + if (a == NULL && b == NULL) { + return 0; + } + + if (a != NULL && b == NULL) { + if (*a == 0) { + return 0; + } + return 1; + } + + if (a == NULL && b != NULL) { + if (*b == 0) { + return 0; + } + return -1; + } + + return strcmp(a, b); +} + +int ares_strncmp(const char *a, const char *b, size_t n) +{ + if (n == 0) { + return 0; + } + + if (a == NULL && b == NULL) { + return 0; + } + + if (a != NULL && b == NULL) { + if (*a == 0) { + return 0; + } + return 1; + } + + if (a == NULL && b != NULL) { + if (*b == 0) { + return 0; + } + return -1; + } + + return strncmp(a, b, n); +} + +int ares_strcasecmp(const char *a, const char *b) +{ + if (a == NULL && b == NULL) { + return 0; + } + + if (a != NULL && b == NULL) { + if (*a == 0) { + return 0; + } + return 1; + } + + if (a == NULL && b != NULL) { + if (*b == 0) { + return 0; + } + return -1; + } + +#if defined(HAVE_STRCASECMP) + return strcasecmp(a, b); +#elif defined(HAVE_STRCMPI) + return strcmpi(a, b); +#elif defined(HAVE_STRICMP) + return stricmp(a, b); +#else + { + size_t i; + + for (i = 0; i < (size_t)-1; i++) { + int c1 = ares_tolower(a[i]); + int c2 = ares_tolower(b[i]); + if (c1 != c2) { + return c1 - c2; + } + if (!c1) { + break; + } + } + } + return 0; +#endif +} + +int ares_strncasecmp(const char *a, const char *b, size_t n) +{ + if (n == 0) { + return 0; + } + + if (a == NULL && b == NULL) { + return 0; + } + + if (a != NULL && b == NULL) { + if (*a == 0) { + return 0; + } + return 1; + } + + if (a == NULL && b != NULL) { + if (*b == 0) { + return 0; + } + return -1; + } + +#if defined(HAVE_STRNCASECMP) + return strncasecmp(a, b, n); +#elif defined(HAVE_STRNCMPI) + return strncmpi(a, b, n); +#elif defined(HAVE_STRNICMP) + return strnicmp(a, b, n); +#else + { + size_t i; + + for (i = 0; i < n; i++) { + int c1 = ares_tolower(a[i]); + int c2 = ares_tolower(b[i]); + if (c1 != c2) { + return c1 - c2; + } + if (!c1) { + break; + } + } + } + return 0; +#endif +} + +ares_bool_t ares_strcaseeq(const char *a, const char *b) +{ + return ares_strcasecmp(a, b) == 0 ? ARES_TRUE : ARES_FALSE; +} + +ares_bool_t ares_strcaseeq_max(const char *a, const char *b, size_t n) +{ + return ares_strncasecmp(a, b, n) == 0 ? ARES_TRUE : ARES_FALSE; +} + +ares_bool_t ares_streq(const char *a, const char *b) +{ + return ares_strcmp(a, b) == 0 ? ARES_TRUE : ARES_FALSE; +} + +ares_bool_t ares_streq_max(const char *a, const char *b, size_t n) +{ + return ares_strncmp(a, b, n) == 0 ? ARES_TRUE : ARES_FALSE; +} + +void ares_free_array(void *arrp, size_t nmembers, void (*freefunc)(void *)) +{ + size_t i; + void **arr = arrp; + + if (arr == NULL) { + return; + } + + if (freefunc != NULL) { + if (nmembers == SIZE_MAX) { + for (i = 0; arr[i] != NULL; i++) { + freefunc(arr[i]); + } + } else { + for (i = 0; i < nmembers; i++) { + freefunc(arr[i]); + } + } + } + + ares_free(arr); +} diff --git a/deps/cares/src/lib/str/ares_str.h b/deps/cares/src/lib/str/ares_str.h deleted file mode 100644 index 440758c21be61f..00000000000000 --- a/deps/cares/src/lib/str/ares_str.h +++ /dev/null @@ -1,89 +0,0 @@ -/* MIT License - * - * Copyright (c) 1998 Massachusetts Institute of Technology - * Copyright (c) The c-ares project and its contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * SPDX-License-Identifier: MIT - */ -#ifndef __ARES_STR_H -#define __ARES_STR_H - -char *ares_strdup(const char *s1); - -size_t ares_strlen(const char *str); - -/*! Copy string from source to destination with destination buffer size - * provided. The destination is guaranteed to be null terminated, if the - * provided buffer isn't large enough, only those bytes from the source that - * will fit will be copied. - * - * \param[out] dest Destination buffer - * \param[in] src Source to copy - * \param[in] dest_size Size of destination buffer - * \return String length. Will be at most dest_size-1 - */ -size_t ares_strcpy(char *dest, const char *src, size_t dest_size); - -ares_bool_t ares_str_isnum(const char *str); - -void ares__str_ltrim(char *str); -void ares__str_rtrim(char *str); -void ares__str_trim(char *str); - -unsigned char ares__tolower(unsigned char c); -ares_bool_t ares__memeq_ci(const unsigned char *ptr, const unsigned char *val, - size_t len); - -ares_bool_t ares__isspace(int ch); -ares_bool_t ares__isprint(int ch); -ares_bool_t ares__is_hostnamech(int ch); - -ares_bool_t ares__is_hostname(const char *str); - -/*! Validate the string provided is printable. The length specified must be - * at least the size of the buffer provided. If a NULL-terminator is hit - * before the length provided is hit, this will not be considered a valid - * printable string. This does not validate that the string is actually - * NULL terminated. - * - * \param[in] str Buffer containing string to evaluate. - * \param[in] len Number of characters to evaluate within provided buffer. - * If 0, will return TRUE since it did not hit an exception. - * \return ARES_TRUE if the entire string is printable, ARES_FALSE if not. - */ -ares_bool_t ares__str_isprint(const char *str, size_t len); - -/* We only care about ASCII rules */ -#define ares__isascii(x) (((unsigned char)x) <= 127) -#define ares__isdigit(x) \ - (((unsigned char)x) >= '0' && ((unsigned char)x) <= '9') -#define ares__isxdigit(x) \ - (ares__isdigit(x) || \ - (((unsigned char)x) >= 'a' && ((unsigned char)x) <= 'f') || \ - (((unsigned char)x) >= 'A' && ((unsigned char)x) <= 'F')) -#define ares__isupper(x) \ - (((unsigned char)x) >= 'A' && ((unsigned char)x) <= 'Z') -#define ares__islower(x) \ - (((unsigned char)x) >= 'a' && ((unsigned char)x) <= 'z') -#define ares__isalpha(x) (ares__islower(x) || ares__isupper(x)) - -#endif /* __ARES_STR_H */ diff --git a/deps/cares/src/lib/str/ares_strsplit.c b/deps/cares/src/lib/str/ares_strsplit.c index dee307d7799f51..4431c5044d5d3c 100644 --- a/deps/cares/src/lib/str/ares_strsplit.c +++ b/deps/cares/src/lib/str/ares_strsplit.c @@ -25,21 +25,12 @@ */ #include "ares_private.h" -void ares__strsplit_free(char **elms, size_t num_elm) +void ares_strsplit_free(char **elms, size_t num_elm) { - size_t i; - - if (elms == NULL) { - return; - } - - for (i = 0; i < num_elm; i++) { - ares_free(elms[i]); - } - ares_free(elms); + ares_free_array(elms, num_elm, ares_free); } -char **ares__strsplit_duplicate(char **elms, size_t num_elm) +char **ares_strsplit_duplicate(char **elms, size_t num_elm) { size_t i; char **out; @@ -56,23 +47,19 @@ char **ares__strsplit_duplicate(char **elms, size_t num_elm) for (i = 0; i < num_elm; i++) { out[i] = ares_strdup(elms[i]); if (out[i] == NULL) { - ares__strsplit_free(out, num_elm); /* LCOV_EXCL_LINE: OutOfMemory */ - return NULL; /* LCOV_EXCL_LINE: OutOfMemory */ + ares_strsplit_free(out, num_elm); /* LCOV_EXCL_LINE: OutOfMemory */ + return NULL; /* LCOV_EXCL_LINE: OutOfMemory */ } } return out; } -char **ares__strsplit(const char *in, const char *delms, size_t *num_elm) +char **ares_strsplit(const char *in, const char *delms, size_t *num_elm) { - ares_status_t status; - ares__buf_t *buf = NULL; - ares__llist_t *llist = NULL; - ares__llist_node_t *node; - char **out = NULL; - size_t cnt = 0; - size_t idx = 0; + ares_status_t status; + ares_buf_t *buf = NULL; + char **out = NULL; if (in == NULL || delms == NULL || num_elm == NULL) { return NULL; /* LCOV_EXCL_LINE: DefensiveCoding */ @@ -80,52 +67,22 @@ char **ares__strsplit(const char *in, const char *delms, size_t *num_elm) *num_elm = 0; - buf = ares__buf_create_const((const unsigned char *)in, ares_strlen(in)); + buf = ares_buf_create_const((const unsigned char *)in, ares_strlen(in)); if (buf == NULL) { return NULL; } - status = ares__buf_split( + status = ares_buf_split_str( buf, (const unsigned char *)delms, ares_strlen(delms), - ARES_BUF_SPLIT_NO_DUPLICATES | ARES_BUF_SPLIT_CASE_INSENSITIVE, 0, &llist); + ARES_BUF_SPLIT_NO_DUPLICATES | ARES_BUF_SPLIT_CASE_INSENSITIVE, 0, &out, + num_elm); if (status != ARES_SUCCESS) { goto done; } - cnt = ares__llist_len(llist); - if (cnt == 0) { - status = ARES_EFORMERR; - goto done; - } - - - out = ares_malloc_zero(cnt * sizeof(*out)); - if (out == NULL) { - status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ - goto done; /* LCOV_EXCL_LINE: OutOfMemory */ - } - - for (node = ares__llist_node_first(llist); node != NULL; - node = ares__llist_node_next(node)) { - ares__buf_t *val = ares__llist_node_val(node); - char *temp = NULL; - - status = ares__buf_fetch_str_dup(val, ares__buf_len(val), &temp); - if (status != ARES_SUCCESS) { - goto done; - } - - out[idx++] = temp; - } - - *num_elm = cnt; - status = ARES_SUCCESS; - done: - ares__llist_destroy(llist); - ares__buf_destroy(buf); + ares_buf_destroy(buf); if (status != ARES_SUCCESS) { - ares__strsplit_free(out, cnt); out = NULL; } diff --git a/deps/cares/src/lib/str/ares_strsplit.h b/deps/cares/src/lib/str/ares_strsplit.h index ee997804f012f1..0da090263af691 100644 --- a/deps/cares/src/lib/str/ares_strsplit.h +++ b/deps/cares/src/lib/str/ares_strsplit.h @@ -40,12 +40,12 @@ * returns an allocated array of allocated string elements. * */ -char **ares__strsplit(const char *in, const char *delms, size_t *num_elm); +char **ares_strsplit(const char *in, const char *delms, size_t *num_elm); -/* Frees the result returned from ares__strsplit(). */ -void ares__strsplit_free(char **elms, size_t num_elm); +/* Frees the result returned from ares_strsplit(). */ +void ares_strsplit_free(char **elms, size_t num_elm); /* Duplicate the array */ -char **ares__strsplit_duplicate(char **elms, size_t num_elm); +char **ares_strsplit_duplicate(char **elms, size_t num_elm); #endif /* HEADER_CARES_STRSPLIT_H */ diff --git a/deps/cares/src/lib/util/ares__threads.h b/deps/cares/src/lib/util/ares__threads.h deleted file mode 100644 index 108354dfc1e17f..00000000000000 --- a/deps/cares/src/lib/util/ares__threads.h +++ /dev/null @@ -1,60 +0,0 @@ -/* MIT License - * - * Copyright (c) 2023 Brad House - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * SPDX-License-Identifier: MIT - */ -#ifndef __ARES__THREADS_H -#define __ARES__THREADS_H - -struct ares__thread_mutex; -typedef struct ares__thread_mutex ares__thread_mutex_t; - -ares__thread_mutex_t *ares__thread_mutex_create(void); -void ares__thread_mutex_destroy(ares__thread_mutex_t *mut); -void ares__thread_mutex_lock(ares__thread_mutex_t *mut); -void ares__thread_mutex_unlock(ares__thread_mutex_t *mut); - - -struct ares__thread_cond; -typedef struct ares__thread_cond ares__thread_cond_t; - -ares__thread_cond_t *ares__thread_cond_create(void); -void ares__thread_cond_destroy(ares__thread_cond_t *cond); -void ares__thread_cond_signal(ares__thread_cond_t *cond); -void ares__thread_cond_broadcast(ares__thread_cond_t *cond); -ares_status_t ares__thread_cond_wait(ares__thread_cond_t *cond, - ares__thread_mutex_t *mut); -ares_status_t ares__thread_cond_timedwait(ares__thread_cond_t *cond, - ares__thread_mutex_t *mut, - unsigned long timeout_ms); - - -struct ares__thread; -typedef struct ares__thread ares__thread_t; - -typedef void *(*ares__thread_func_t)(void *arg); -ares_status_t ares__thread_create(ares__thread_t **thread, - ares__thread_func_t func, void *arg); -ares_status_t ares__thread_join(ares__thread_t *thread, void **rv); - -#endif diff --git a/deps/cares/src/lib/util/ares__iface_ips.c b/deps/cares/src/lib/util/ares_iface_ips.c similarity index 69% rename from deps/cares/src/lib/util/ares__iface_ips.c rename to deps/cares/src/lib/util/ares_iface_ips.c index 56dc25790412e4..46cb291e300ec2 100644 --- a/deps/cares/src/lib/util/ares__iface_ips.c +++ b/deps/cares/src/lib/util/ares_iface_ips.c @@ -59,41 +59,40 @@ #endif -static ares_status_t ares__iface_ips_enumerate(ares__iface_ips_t *ips, - const char *name); +static ares_status_t ares_iface_ips_enumerate(ares_iface_ips_t *ips, + const char *name); typedef struct { - char *name; - struct ares_addr addr; - unsigned char netmask; - unsigned int ll_scope; - ares__iface_ip_flags_t flags; -} ares__iface_ip_t; - -struct ares__iface_ips { - ares__array_t *ips; /*!< Type is ares__iface_ip_t */ - ares__iface_ip_flags_t enum_flags; + char *name; + struct ares_addr addr; + unsigned char netmask; + unsigned int ll_scope; + ares_iface_ip_flags_t flags; +} ares_iface_ip_t; + +struct ares_iface_ips { + ares_array_t *ips; /*!< Type is ares_iface_ip_t */ + ares_iface_ip_flags_t enum_flags; }; -static void ares__iface_ip_free_cb(void *arg) +static void ares_iface_ip_free_cb(void *arg) { - ares__iface_ip_t *ip = arg; + ares_iface_ip_t *ip = arg; if (ip == NULL) { return; } ares_free(ip->name); } -static ares__iface_ips_t *ares__iface_ips_alloc(ares__iface_ip_flags_t flags) +static ares_iface_ips_t *ares_iface_ips_alloc(ares_iface_ip_flags_t flags) { - ares__iface_ips_t *ips = ares_malloc_zero(sizeof(*ips)); + ares_iface_ips_t *ips = ares_malloc_zero(sizeof(*ips)); if (ips == NULL) { return NULL; /* LCOV_EXCL_LINE: OutOfMemory */ } ips->enum_flags = flags; - ips->ips = - ares__array_create(sizeof(ares__iface_ip_t), ares__iface_ip_free_cb); + ips->ips = ares_array_create(sizeof(ares_iface_ip_t), ares_iface_ip_free_cb); if (ips->ips == NULL) { ares_free(ips); /* LCOV_EXCL_LINE: OutOfMemory */ return NULL; /* LCOV_EXCL_LINE: OutOfMemory */ @@ -101,18 +100,18 @@ static ares__iface_ips_t *ares__iface_ips_alloc(ares__iface_ip_flags_t flags) return ips; } -void ares__iface_ips_destroy(ares__iface_ips_t *ips) +void ares_iface_ips_destroy(ares_iface_ips_t *ips) { if (ips == NULL) { return; } - ares__array_destroy(ips->ips); + ares_array_destroy(ips->ips); ares_free(ips); } -ares_status_t ares__iface_ips(ares__iface_ips_t **ips, - ares__iface_ip_flags_t flags, const char *name) +ares_status_t ares_iface_ips(ares_iface_ips_t **ips, + ares_iface_ip_flags_t flags, const char *name) { ares_status_t status; @@ -120,15 +119,15 @@ ares_status_t ares__iface_ips(ares__iface_ips_t **ips, return ARES_EFORMERR; } - *ips = ares__iface_ips_alloc(flags); + *ips = ares_iface_ips_alloc(flags); if (*ips == NULL) { return ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ } - status = ares__iface_ips_enumerate(*ips, name); + status = ares_iface_ips_enumerate(*ips, name); if (status != ARES_SUCCESS) { /* LCOV_EXCL_START: UntestablePath */ - ares__iface_ips_destroy(*ips); + ares_iface_ips_destroy(*ips); *ips = NULL; return status; /* LCOV_EXCL_STOP */ @@ -138,12 +137,12 @@ ares_status_t ares__iface_ips(ares__iface_ips_t **ips, } static ares_status_t - ares__iface_ips_add(ares__iface_ips_t *ips, ares__iface_ip_flags_t flags, - const char *name, const struct ares_addr *addr, - unsigned char netmask, unsigned int ll_scope) + ares_iface_ips_add(ares_iface_ips_t *ips, ares_iface_ip_flags_t flags, + const char *name, const struct ares_addr *addr, + unsigned char netmask, unsigned int ll_scope) { - ares__iface_ip_t *ip; - ares_status_t status; + ares_iface_ip_t *ip; + ares_status_t status; if (ips == NULL || name == NULL || addr == NULL) { return ARES_EFORMERR; /* LCOV_EXCL_LINE: DefensiveCoding */ @@ -162,7 +161,7 @@ static ares_status_t } /* Check for link-local */ - if (ares__addr_is_linklocal(addr)) { + if (ares_addr_is_linklocal(addr)) { flags |= ARES_IFACE_IP_LINKLOCAL; } if (flags & ARES_IFACE_IP_LINKLOCAL && @@ -190,7 +189,7 @@ static ares_status_t } } - status = ares__array_insert_last((void **)&ip, ips->ips); + status = ares_array_insert_last((void **)&ip, ips->ips); if (status != ARES_SUCCESS) { return status; } @@ -203,30 +202,30 @@ static ares_status_t memcpy(&ip->addr, addr, sizeof(*addr)); ip->name = ares_strdup(name); if (ip->name == NULL) { - ares__array_remove_last(ips->ips); + ares_array_remove_last(ips->ips); return ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ } return ARES_SUCCESS; } -size_t ares__iface_ips_cnt(const ares__iface_ips_t *ips) +size_t ares_iface_ips_cnt(const ares_iface_ips_t *ips) { if (ips == NULL) { return 0; } - return ares__array_len(ips->ips); + return ares_array_len(ips->ips); } -const char *ares__iface_ips_get_name(const ares__iface_ips_t *ips, size_t idx) +const char *ares_iface_ips_get_name(const ares_iface_ips_t *ips, size_t idx) { - const ares__iface_ip_t *ip; + const ares_iface_ip_t *ip; if (ips == NULL) { return NULL; } - ip = ares__array_at_const(ips->ips, idx); + ip = ares_array_at_const(ips->ips, idx); if (ip == NULL) { return NULL; } @@ -234,16 +233,16 @@ const char *ares__iface_ips_get_name(const ares__iface_ips_t *ips, size_t idx) return ip->name; } -const struct ares_addr *ares__iface_ips_get_addr(const ares__iface_ips_t *ips, - size_t idx) +const struct ares_addr *ares_iface_ips_get_addr(const ares_iface_ips_t *ips, + size_t idx) { - const ares__iface_ip_t *ip; + const ares_iface_ip_t *ip; if (ips == NULL) { return NULL; } - ip = ares__array_at_const(ips->ips, idx); + ip = ares_array_at_const(ips->ips, idx); if (ip == NULL) { return NULL; } @@ -251,16 +250,16 @@ const struct ares_addr *ares__iface_ips_get_addr(const ares__iface_ips_t *ips, return &ip->addr; } -ares__iface_ip_flags_t ares__iface_ips_get_flags(const ares__iface_ips_t *ips, - size_t idx) +ares_iface_ip_flags_t ares_iface_ips_get_flags(const ares_iface_ips_t *ips, + size_t idx) { - const ares__iface_ip_t *ip; + const ares_iface_ip_t *ip; if (ips == NULL) { return 0; } - ip = ares__array_at_const(ips->ips, idx); + ip = ares_array_at_const(ips->ips, idx); if (ip == NULL) { return 0; } @@ -268,16 +267,16 @@ ares__iface_ip_flags_t ares__iface_ips_get_flags(const ares__iface_ips_t *ips, return ip->flags; } -unsigned char ares__iface_ips_get_netmask(const ares__iface_ips_t *ips, - size_t idx) +unsigned char ares_iface_ips_get_netmask(const ares_iface_ips_t *ips, + size_t idx) { - const ares__iface_ip_t *ip; + const ares_iface_ip_t *ip; if (ips == NULL) { return 0; } - ip = ares__array_at_const(ips->ips, idx); + ip = ares_array_at_const(ips->ips, idx); if (ip == NULL) { return 0; } @@ -285,16 +284,16 @@ unsigned char ares__iface_ips_get_netmask(const ares__iface_ips_t *ips, return ip->netmask; } -unsigned int ares__iface_ips_get_ll_scope(const ares__iface_ips_t *ips, - size_t idx) +unsigned int ares_iface_ips_get_ll_scope(const ares_iface_ips_t *ips, + size_t idx) { - const ares__iface_ip_t *ip; + const ares_iface_ip_t *ip; if (ips == NULL) { return 0; } - ip = ares__array_at_const(ips->ips, idx); + ip = ares_array_at_const(ips->ips, idx); if (ip == NULL) { return 0; } @@ -334,7 +333,7 @@ static ares_bool_t name_match(const char *name, const char *adapter_name, return ARES_TRUE; } - if (strcasecmp(name, adapter_name) == 0) { + if (ares_strcaseeq(name, adapter_name)) { return ARES_TRUE; } @@ -345,8 +344,8 @@ static ares_bool_t name_match(const char *name, const char *adapter_name, return ARES_FALSE; } -static ares_status_t ares__iface_ips_enumerate(ares__iface_ips_t *ips, - const char *name) +static ares_status_t ares_iface_ips_enumerate(ares_iface_ips_t *ips, + const char *name) { ULONG myflags = GAA_FLAG_INCLUDE_PREFIX /*|GAA_FLAG_INCLUDE_ALL_INTERFACES */; ULONG outBufLen = 0; @@ -377,7 +376,7 @@ static ares_status_t ares__iface_ips_enumerate(ares__iface_ips_t *ips, for (address = addresses; address != NULL; address = address->Next) { IP_ADAPTER_UNICAST_ADDRESS *ipaddr = NULL; - ares__iface_ip_flags_t addrflag = 0; + ares_iface_ip_flags_t addrflag = 0; char ifname[64] = ""; # if defined(HAVE_CONVERTINTERFACEINDEXTOLUID) && \ @@ -431,9 +430,9 @@ static ares_status_t ares__iface_ips_enumerate(ares__iface_ips_t *ips, continue; } - status = ares__iface_ips_add(ips, addrflag, ifname, &addr, - ipaddr->OnLinkPrefixLength /* netmask */, - address->Ipv6IfIndex /* ll_scope */); + status = ares_iface_ips_add(ips, addrflag, ifname, &addr, + ipaddr->OnLinkPrefixLength /* netmask */, + address->Ipv6IfIndex /* ll_scope */); if (status != ARES_SUCCESS) { goto done; @@ -454,13 +453,13 @@ static unsigned char count_addr_bits(const unsigned char *addr, size_t addr_len) unsigned char count = 0; for (i = 0; i < addr_len; i++) { - count += ares__count_bits_u8(addr[i]); + count += ares_count_bits_u8(addr[i]); } return count; } -static ares_status_t ares__iface_ips_enumerate(ares__iface_ips_t *ips, - const char *name) +static ares_status_t ares_iface_ips_enumerate(ares_iface_ips_t *ips, + const char *name) { struct ifaddrs *ifap = NULL; struct ifaddrs *ifa = NULL; @@ -472,10 +471,10 @@ static ares_status_t ares__iface_ips_enumerate(ares__iface_ips_t *ips, } for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) { - ares__iface_ip_flags_t addrflag = 0; - struct ares_addr addr; - unsigned char netmask = 0; - unsigned int ll_scope = 0; + ares_iface_ip_flags_t addrflag = 0; + struct ares_addr addr; + unsigned char netmask = 0; + unsigned int ll_scope = 0; if (ifa->ifa_addr == NULL) { continue; @@ -515,12 +514,12 @@ static ares_status_t ares__iface_ips_enumerate(ares__iface_ips_t *ips, } /* Name mismatch */ - if (name != NULL && strcasecmp(ifa->ifa_name, name) != 0) { + if (name != NULL && !ares_strcaseeq(ifa->ifa_name, name)) { continue; } - status = ares__iface_ips_add(ips, addrflag, ifa->ifa_name, &addr, netmask, - ll_scope); + status = ares_iface_ips_add(ips, addrflag, ifa->ifa_name, &addr, netmask, + ll_scope); if (status != ARES_SUCCESS) { goto done; } @@ -533,8 +532,8 @@ static ares_status_t ares__iface_ips_enumerate(ares__iface_ips_t *ips, #else -static ares_status_t ares__iface_ips_enumerate(ares__iface_ips_t *ips, - const char *name) +static ares_status_t ares_iface_ips_enumerate(ares_iface_ips_t *ips, + const char *name) { (void)ips; (void)name; @@ -544,7 +543,7 @@ static ares_status_t ares__iface_ips_enumerate(ares__iface_ips_t *ips, #endif -unsigned int ares__if_nametoindex(const char *name) +unsigned int ares_os_if_nametoindex(const char *name) { #ifdef HAVE_IF_NAMETOINDEX if (name == NULL) { @@ -552,36 +551,35 @@ unsigned int ares__if_nametoindex(const char *name) } return if_nametoindex(name); #else - ares_status_t status; - ares__iface_ips_t *ips = NULL; - size_t i; - unsigned int index = 0; + ares_status_t status; + ares_iface_ips_t *ips = NULL; + size_t i; + unsigned int index = 0; if (name == NULL) { return 0; } status = - ares__iface_ips(&ips, ARES_IFACE_IP_V6 | ARES_IFACE_IP_LINKLOCAL, name); + ares_iface_ips(&ips, ARES_IFACE_IP_V6 | ARES_IFACE_IP_LINKLOCAL, name); if (status != ARES_SUCCESS) { goto done; } - for (i = 0; i < ares__iface_ips_cnt(ips); i++) { - if (ares__iface_ips_get_flags(ips, i) & ARES_IFACE_IP_LINKLOCAL) { - index = ares__iface_ips_get_ll_scope(ips, i); + for (i = 0; i < ares_iface_ips_cnt(ips); i++) { + if (ares_iface_ips_get_flags(ips, i) & ARES_IFACE_IP_LINKLOCAL) { + index = ares_iface_ips_get_ll_scope(ips, i); goto done; } } done: - ares__iface_ips_destroy(ips); + ares_iface_ips_destroy(ips); return index; #endif } -const char *ares__if_indextoname(unsigned int index, char *name, - size_t name_len) +const char *ares_os_if_indextoname(unsigned int index, char *name, size_t name_len) { #ifdef HAVE_IF_INDEXTONAME if (name_len < IF_NAMESIZE) { @@ -589,10 +587,10 @@ const char *ares__if_indextoname(unsigned int index, char *name, } return if_indextoname(index, name); #else - ares_status_t status; - ares__iface_ips_t *ips = NULL; - size_t i; - const char *ptr = NULL; + ares_status_t status; + ares_iface_ips_t *ips = NULL; + size_t i; + const char *ptr = NULL; if (name == NULL || name_len < IF_NAMESIZE) { goto done; @@ -603,22 +601,22 @@ const char *ares__if_indextoname(unsigned int index, char *name, } status = - ares__iface_ips(&ips, ARES_IFACE_IP_V6 | ARES_IFACE_IP_LINKLOCAL, NULL); + ares_iface_ips(&ips, ARES_IFACE_IP_V6 | ARES_IFACE_IP_LINKLOCAL, NULL); if (status != ARES_SUCCESS) { goto done; } - for (i = 0; i < ares__iface_ips_cnt(ips); i++) { - if (ares__iface_ips_get_flags(ips, i) & ARES_IFACE_IP_LINKLOCAL && - ares__iface_ips_get_ll_scope(ips, i) == index) { - ares_strcpy(name, ares__iface_ips_get_name(ips, i), name_len); + for (i = 0; i < ares_iface_ips_cnt(ips); i++) { + if (ares_iface_ips_get_flags(ips, i) & ARES_IFACE_IP_LINKLOCAL && + ares_iface_ips_get_ll_scope(ips, i) == index) { + ares_strcpy(name, ares_iface_ips_get_name(ips, i), name_len); ptr = name; goto done; } } done: - ares__iface_ips_destroy(ips); + ares_iface_ips_destroy(ips); return ptr; #endif } diff --git a/deps/cares/src/lib/util/ares__iface_ips.h b/deps/cares/src/lib/util/ares_iface_ips.h similarity index 77% rename from deps/cares/src/lib/util/ares__iface_ips.h rename to deps/cares/src/lib/util/ares_iface_ips.h index 61ff736a796361..f22e09046a065b 100644 --- a/deps/cares/src/lib/util/ares__iface_ips.h +++ b/deps/cares/src/lib/util/ares_iface_ips.h @@ -42,18 +42,18 @@ typedef enum { /*! Default, enumerate all ips for online interfaces, including loopback */ ARES_IFACE_IP_DEFAULT = (ARES_IFACE_IP_V4 | ARES_IFACE_IP_V6 | ARES_IFACE_IP_LOOPBACK | ARES_IFACE_IP_LINKLOCAL) -} ares__iface_ip_flags_t; +} ares_iface_ip_flags_t; -struct ares__iface_ips; +struct ares_iface_ips; /*! Opaque pointer for holding enumerated interface ip addresses */ -typedef struct ares__iface_ips ares__iface_ips_t; +typedef struct ares_iface_ips ares_iface_ips_t; -/*! Destroy ip address enumeration created by ares__iface_ips(). +/*! Destroy ip address enumeration created by ares_iface_ips(). * * \param[in] ips Initialized IP address enumeration structure */ -void ares__iface_ips_destroy(ares__iface_ips_t *ips); +void ares_iface_ips_destroy(ares_iface_ips_t *ips); /*! Enumerate ip addresses on interfaces * @@ -63,15 +63,15 @@ void ares__iface_ips_destroy(ares__iface_ips_t *ips); * \return ARES_ENOMEM on out of memory, ARES_ENOTIMP if not supported on * the system, ARES_SUCCESS on success */ -ares_status_t ares__iface_ips(ares__iface_ips_t **ips, - ares__iface_ip_flags_t flags, const char *name); +ares_status_t ares_iface_ips(ares_iface_ips_t **ips, + ares_iface_ip_flags_t flags, const char *name); /*! Count of ips enumerated * * \param[in] ips Initialized IP address enumeration structure * \return count */ -size_t ares__iface_ips_cnt(const ares__iface_ips_t *ips); +size_t ares_iface_ips_cnt(const ares_iface_ips_t *ips); /*! Retrieve interface name * @@ -79,7 +79,7 @@ size_t ares__iface_ips_cnt(const ares__iface_ips_t *ips); * \param[in] idx Index of entry to pull * \return interface name */ -const char *ares__iface_ips_get_name(const ares__iface_ips_t *ips, size_t idx); +const char *ares_iface_ips_get_name(const ares_iface_ips_t *ips, size_t idx); /*! Retrieve interface address * @@ -87,8 +87,8 @@ const char *ares__iface_ips_get_name(const ares__iface_ips_t *ips, size_t idx); * \param[in] idx Index of entry to pull * \return interface address */ -const struct ares_addr *ares__iface_ips_get_addr(const ares__iface_ips_t *ips, - size_t idx); +const struct ares_addr *ares_iface_ips_get_addr(const ares_iface_ips_t *ips, + size_t idx); /*! Retrieve interface address flags * @@ -96,8 +96,8 @@ const struct ares_addr *ares__iface_ips_get_addr(const ares__iface_ips_t *ips, * \param[in] idx Index of entry to pull * \return interface address flags */ -ares__iface_ip_flags_t ares__iface_ips_get_flags(const ares__iface_ips_t *ips, - size_t idx); +ares_iface_ip_flags_t ares_iface_ips_get_flags(const ares_iface_ips_t *ips, + size_t idx); /*! Retrieve interface address netmask * @@ -105,8 +105,8 @@ ares__iface_ip_flags_t ares__iface_ips_get_flags(const ares__iface_ips_t *ips, * \param[in] idx Index of entry to pull * \return interface address netmask */ -unsigned char ares__iface_ips_get_netmask(const ares__iface_ips_t *ips, - size_t idx); +unsigned char ares_iface_ips_get_netmask(const ares_iface_ips_t *ips, + size_t idx); /*! Retrieve interface ipv6 link local scope * @@ -114,8 +114,8 @@ unsigned char ares__iface_ips_get_netmask(const ares__iface_ips_t *ips, * \param[in] idx Index of entry to pull * \return interface ipv6 link local scope */ -unsigned int ares__iface_ips_get_ll_scope(const ares__iface_ips_t *ips, - size_t idx); +unsigned int ares_iface_ips_get_ll_scope(const ares_iface_ips_t *ips, + size_t idx); /*! Retrieve the interface index (aka link local scope) from the interface @@ -124,7 +124,7 @@ unsigned int ares__iface_ips_get_ll_scope(const ares__iface_ips_t *ips, * \param[in] name Interface name * \return 0 on failure, index otherwise */ -unsigned int ares__if_nametoindex(const char *name); +unsigned int ares_os_if_nametoindex(const char *name); /*! Retrieves the interface name from the index (aka link local scope) * @@ -133,7 +133,7 @@ unsigned int ares__if_nametoindex(const char *name); * \param[in] name_len Length of provided buffer, must be at least IF_NAMESIZE * \return NULL on failure, or pointer to name on success */ -const char *ares__if_indextoname(unsigned int index, char *name, - size_t name_len); +const char *ares_os_if_indextoname(unsigned int index, char *name, + size_t name_len); #endif diff --git a/deps/cares/src/lib/util/ares_math.c b/deps/cares/src/lib/util/ares_math.c index 45999bdeababa6..1106bf6bf151f8 100644 --- a/deps/cares/src/lib/util/ares_math.c +++ b/deps/cares/src/lib/util/ares_math.c @@ -29,7 +29,7 @@ /* Uses public domain code snippets from * http://graphics.stanford.edu/~seander/bithacks.html */ -static unsigned int ares__round_up_pow2_u32(unsigned int n) +static unsigned int ares_round_up_pow2_u32(unsigned int n) { /* NOTE: if already a power of 2, will return itself, not the next */ n--; @@ -42,7 +42,7 @@ static unsigned int ares__round_up_pow2_u32(unsigned int n) return n; } -static ares_int64_t ares__round_up_pow2_u64(ares_int64_t n) +static ares_int64_t ares_round_up_pow2_u64(ares_int64_t n) { /* NOTE: if already a power of 2, will return itself, not the next */ n--; @@ -56,7 +56,7 @@ static ares_int64_t ares__round_up_pow2_u64(ares_int64_t n) return n; } -ares_bool_t ares__is_64bit(void) +ares_bool_t ares_is_64bit(void) { #ifdef _MSC_VER # pragma warning(push) @@ -70,16 +70,16 @@ ares_bool_t ares__is_64bit(void) #endif } -size_t ares__round_up_pow2(size_t n) +size_t ares_round_up_pow2(size_t n) { - if (ares__is_64bit()) { - return (size_t)ares__round_up_pow2_u64((ares_int64_t)n); + if (ares_is_64bit()) { + return (size_t)ares_round_up_pow2_u64((ares_int64_t)n); } - return (size_t)ares__round_up_pow2_u32((unsigned int)n); + return (size_t)ares_round_up_pow2_u32((unsigned int)n); } -size_t ares__log2(size_t n) +size_t ares_log2(size_t n) { static const unsigned char tab32[32] = { 0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, @@ -92,7 +92,7 @@ size_t ares__log2(size_t n) 56, 45, 25, 31, 35, 16, 9, 12, 44, 24, 15, 8, 23, 7, 6, 5 }; - if (!ares__is_64bit()) { + if (!ares_is_64bit()) { return tab32[(n * 0x077CB531) >> 27]; } @@ -100,7 +100,7 @@ size_t ares__log2(size_t n) } /* x^y */ -size_t ares__pow(size_t x, size_t y) +size_t ares_pow(size_t x, size_t y) { size_t res = 1; @@ -118,7 +118,7 @@ size_t ares__pow(size_t x, size_t y) return res; } -size_t ares__count_digits(size_t n) +size_t ares_count_digits(size_t n) { size_t digits; @@ -132,7 +132,7 @@ size_t ares__count_digits(size_t n) return digits; } -size_t ares__count_hexdigits(size_t n) +size_t ares_count_hexdigits(size_t n) { size_t digits; @@ -146,7 +146,7 @@ size_t ares__count_hexdigits(size_t n) return digits; } -unsigned char ares__count_bits_u8(unsigned char x) +unsigned char ares_count_bits_u8(unsigned char x) { /* Implementation obtained from: * http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetTable */ diff --git a/deps/cares/src/lib/str/ares_strcasecmp.c b/deps/cares/src/lib/util/ares_math.h similarity index 53% rename from deps/cares/src/lib/str/ares_strcasecmp.c rename to deps/cares/src/lib/util/ares_math.h index 76b835fd8e92f1..52fa1facf01e47 100644 --- a/deps/cares/src/lib/str/ares_strcasecmp.c +++ b/deps/cares/src/lib/util/ares_math.h @@ -1,7 +1,6 @@ /* MIT License * - * Copyright (c) 1998 Massachusetts Institute of Technology - * Copyright (c) The c-ares project and its contributors + * Copyright (c) 2024 Brad House * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -24,56 +23,23 @@ * * SPDX-License-Identifier: MIT */ +#ifndef __ARES_MATH_H +#define __ARES_MATH_H -#include "ares_private.h" -#include "ares_strcasecmp.h" - -#ifndef HAVE_STRCASECMP -int ares_strcasecmp(const char *a, const char *b) -{ -# if defined(HAVE_STRCMPI) - return strcmpi(a, b); -# elif defined(HAVE_STRICMP) - return stricmp(a, b); -# else - size_t i; - - for (i = 0; i < (size_t)-1; i++) { - int c1 = ares__tolower(a[i]); - int c2 = ares__tolower(b[i]); - if (c1 != c2) { - return c1 - c2; - } - if (!c1) { - break; - } - } - return 0; -# endif -} +#ifdef _MSC_VER +typedef __int64 ares_int64_t; +typedef unsigned __int64 ares_uint64_t; +#else +typedef long long ares_int64_t; +typedef unsigned long long ares_uint64_t; #endif -#ifndef HAVE_STRNCASECMP -int ares_strncasecmp(const char *a, const char *b, size_t n) -{ -# if defined(HAVE_STRNCMPI) - return strncmpi(a, b, n); -# elif defined(HAVE_STRNICMP) - return strnicmp(a, b, n); -# else - size_t i; +ares_bool_t ares_is_64bit(void); +size_t ares_round_up_pow2(size_t n); +size_t ares_log2(size_t n); +size_t ares_pow(size_t x, size_t y); +size_t ares_count_digits(size_t n); +size_t ares_count_hexdigits(size_t n); +unsigned char ares_count_bits_u8(unsigned char x); - for (i = 0; i < n; i++) { - int c1 = ares__tolower(a[i]); - int c2 = ares__tolower(b[i]); - if (c1 != c2) { - return c1 - c2; - } - if (!c1) { - break; - } - } - return 0; -# endif -} #endif diff --git a/deps/cares/src/lib/util/ares_rand.c b/deps/cares/src/lib/util/ares_rand.c index c57bb706e68e5b..408999951a78ca 100644 --- a/deps/cares/src/lib/util/ares_rand.c +++ b/deps/cares/src/lib/util/ares_rand.c @@ -55,7 +55,7 @@ typedef struct ares_rand_rc4 { static unsigned int ares_u32_from_ptr(void *addr) { /* LCOV_EXCL_START: FallbackCode */ - if (ares__is_64bit()) { + if (ares_is_64bit()) { return (unsigned int)((((ares_uint64_t)addr >> 32) & 0xFFFFFFFF) | ((ares_uint64_t)addr & 0xFFFFFFFF)); } @@ -77,9 +77,13 @@ static void ares_rc4_generate_key(ares_rand_rc4 *rc4_state, unsigned char *key, return; } +#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION + /* For fuzzing, random should be deterministic */ + srand(0); +#else /* Randomness is hard to come by. Maybe the system randomizes heap and stack * addresses. Maybe the current timestamp give us some randomness. Use - * rc4_state (heap), &i (stack), and ares__tvnow() + * rc4_state (heap), &i (stack), and ares_tvnow() */ data = ares_u32_from_ptr(rc4_state); memcpy(key + len, &data, sizeof(data)); @@ -89,13 +93,14 @@ static void ares_rc4_generate_key(ares_rand_rc4 *rc4_state, unsigned char *key, memcpy(key + len, &data, sizeof(data)); len += sizeof(data); - ares__tvnow(&tv); + ares_tvnow(&tv); data = (unsigned int)((tv.sec | tv.usec) & 0xFFFFFFFF); memcpy(key + len, &data, sizeof(data)); len += sizeof(data); srand(ares_u32_from_ptr(rc4_state) | ares_u32_from_ptr(&i) | (unsigned int)((tv.sec | tv.usec) & 0xFFFFFFFF)); +#endif for (i = len; i < key_len; i++) { key[i] = (unsigned char)(rand() % 256); /* LCOV_EXCL_LINE */ @@ -188,10 +193,15 @@ BOOLEAN WINAPI SystemFunction036(PVOID RandomBuffer, ULONG RandomBufferLength); #endif -static ares_bool_t ares__init_rand_engine(ares_rand_state *state) +static ares_bool_t ares_init_rand_engine(ares_rand_state *state) { state->cache_remaining = 0; +#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION + /* For fuzzing, random should be deterministic */ + state->bad_backends |= ARES_RAND_OS | ARES_RAND_FILE; +#endif + #if defined(HAVE_ARC4RANDOM_BUF) || defined(HAVE_GETRANDOM) || defined(_WIN32) if (!(state->bad_backends & ARES_RAND_OS)) { state->type = ARES_RAND_OS; @@ -223,7 +233,7 @@ static ares_bool_t ares__init_rand_engine(ares_rand_state *state) return ARES_TRUE; /* LCOV_EXCL_LINE: UntestablePath */ } -ares_rand_state *ares__init_rand_state(void) +ares_rand_state *ares_init_rand_state(void) { ares_rand_state *state = NULL; @@ -232,7 +242,7 @@ ares_rand_state *ares__init_rand_state(void) return NULL; } - if (!ares__init_rand_engine(state)) { + if (!ares_init_rand_engine(state)) { ares_free(state); /* LCOV_EXCL_LINE: UntestablePath */ return NULL; /* LCOV_EXCL_LINE: UntestablePath */ } @@ -240,7 +250,7 @@ ares_rand_state *ares__init_rand_state(void) return state; } -static void ares__clear_rand_state(ares_rand_state *state) +static void ares_clear_rand_state(ares_rand_state *state) { if (!state) { return; /* LCOV_EXCL_LINE: DefensiveCoding */ @@ -259,26 +269,26 @@ static void ares__clear_rand_state(ares_rand_state *state) } } -static void ares__reinit_rand(ares_rand_state *state) +static void ares_reinit_rand(ares_rand_state *state) { /* LCOV_EXCL_START: UntestablePath */ - ares__clear_rand_state(state); - ares__init_rand_engine(state); + ares_clear_rand_state(state); + ares_init_rand_engine(state); /* LCOV_EXCL_STOP */ } -void ares__destroy_rand_state(ares_rand_state *state) +void ares_destroy_rand_state(ares_rand_state *state) { if (!state) { return; } - ares__clear_rand_state(state); + ares_clear_rand_state(state); ares_free(state); } -static void ares__rand_bytes_fetch(ares_rand_state *state, unsigned char *buf, - size_t len) +static void ares_rand_bytes_fetch(ares_rand_state *state, unsigned char *buf, + size_t len) { while (1) { size_t bytes_read = 0; @@ -344,17 +354,17 @@ static void ares__rand_bytes_fetch(ares_rand_state *state, unsigned char *buf, /* If we didn't return before we got here, that means we had a critical rand * failure and need to reinitialized */ - ares__reinit_rand(state); /* LCOV_EXCL_LINE: UntestablePath */ + ares_reinit_rand(state); /* LCOV_EXCL_LINE: UntestablePath */ } } -void ares__rand_bytes(ares_rand_state *state, unsigned char *buf, size_t len) +void ares_rand_bytes(ares_rand_state *state, unsigned char *buf, size_t len) { /* See if we need to refill the cache to serve the request, but if len is * excessive, we're not going to update our cache or serve from cache */ if (len > state->cache_remaining && len < sizeof(state->cache)) { size_t fetch_size = sizeof(state->cache) - state->cache_remaining; - ares__rand_bytes_fetch(state, state->cache, fetch_size); + ares_rand_bytes_fetch(state, state->cache, fetch_size); state->cache_remaining = sizeof(state->cache); } @@ -367,13 +377,13 @@ void ares__rand_bytes(ares_rand_state *state, unsigned char *buf, size_t len) } /* Serve direct due to excess size of request */ - ares__rand_bytes_fetch(state, buf, len); + ares_rand_bytes_fetch(state, buf, len); } -unsigned short ares__generate_new_id(ares_rand_state *state) +unsigned short ares_generate_new_id(ares_rand_state *state) { unsigned short r = 0; - ares__rand_bytes(state, (unsigned char *)&r, sizeof(r)); + ares_rand_bytes(state, (unsigned char *)&r, sizeof(r)); return r; } diff --git a/deps/cares/src/lib/ares_platform.h b/deps/cares/src/lib/util/ares_rand.h similarity index 72% rename from deps/cares/src/lib/ares_platform.h rename to deps/cares/src/lib/util/ares_rand.h index 768eaddddd9ce3..81c61bf46488ae 100644 --- a/deps/cares/src/lib/ares_platform.h +++ b/deps/cares/src/lib/util/ares_rand.h @@ -1,7 +1,6 @@ /* MIT License * - * Copyright (c) 1998 Massachusetts Institute of Technology - * Copyright (c) 2004 Daniel Stenberg + * Copyright (c) 2024 Brad House * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -24,27 +23,14 @@ * * SPDX-License-Identifier: MIT */ -#ifndef HEADER_CARES_PLATFORM_H -#define HEADER_CARES_PLATFORM_H +#ifndef __ARES_RAND_H +#define __ARES_RAND_H -#if defined(_WIN32) && !defined(MSDOS) +struct ares_rand_state; +typedef struct ares_rand_state ares_rand_state; -typedef enum { - WIN_UNKNOWN, - WIN_3X, - WIN_9X, - WIN_NT, - WIN_CE -} win_platform; - -win_platform ares__getplatform(void); - -#endif - -#if defined(_WIN32_WCE) - -struct servent *getservbyport(int port, const char *proto); +ares_rand_state *ares_init_rand_state(void); +void ares_destroy_rand_state(ares_rand_state *state); +void ares_rand_bytes(ares_rand_state *state, unsigned char *buf, size_t len); #endif - -#endif /* HEADER_CARES_PLATFORM_H */ diff --git a/deps/cares/src/lib/util/ares__threads.c b/deps/cares/src/lib/util/ares_threads.c similarity index 64% rename from deps/cares/src/lib/util/ares__threads.c rename to deps/cares/src/lib/util/ares_threads.c index b47544451d9d4f..ab0b51afb70577 100644 --- a/deps/cares/src/lib/util/ares__threads.c +++ b/deps/cares/src/lib/util/ares_threads.c @@ -28,13 +28,13 @@ #ifdef CARES_THREADS # ifdef _WIN32 -struct ares__thread_mutex { +struct ares_thread_mutex { CRITICAL_SECTION mutex; }; -ares__thread_mutex_t *ares__thread_mutex_create(void) +ares_thread_mutex_t *ares_thread_mutex_create(void) { - ares__thread_mutex_t *mut = ares_malloc_zero(sizeof(*mut)); + ares_thread_mutex_t *mut = ares_malloc_zero(sizeof(*mut)); if (mut == NULL) { return NULL; } @@ -43,7 +43,7 @@ ares__thread_mutex_t *ares__thread_mutex_create(void) return mut; } -void ares__thread_mutex_destroy(ares__thread_mutex_t *mut) +void ares_thread_mutex_destroy(ares_thread_mutex_t *mut) { if (mut == NULL) { return; @@ -52,7 +52,7 @@ void ares__thread_mutex_destroy(ares__thread_mutex_t *mut) ares_free(mut); } -void ares__thread_mutex_lock(ares__thread_mutex_t *mut) +void ares_thread_mutex_lock(ares_thread_mutex_t *mut) { if (mut == NULL) { return; @@ -60,7 +60,7 @@ void ares__thread_mutex_lock(ares__thread_mutex_t *mut) EnterCriticalSection(&mut->mutex); } -void ares__thread_mutex_unlock(ares__thread_mutex_t *mut) +void ares_thread_mutex_unlock(ares_thread_mutex_t *mut) { if (mut == NULL) { return; @@ -68,13 +68,13 @@ void ares__thread_mutex_unlock(ares__thread_mutex_t *mut) LeaveCriticalSection(&mut->mutex); } -struct ares__thread_cond { +struct ares_thread_cond { CONDITION_VARIABLE cond; }; -ares__thread_cond_t *ares__thread_cond_create(void) +ares_thread_cond_t *ares_thread_cond_create(void) { - ares__thread_cond_t *cond = ares_malloc_zero(sizeof(*cond)); + ares_thread_cond_t *cond = ares_malloc_zero(sizeof(*cond)); if (cond == NULL) { return NULL; } @@ -82,7 +82,7 @@ ares__thread_cond_t *ares__thread_cond_create(void) return cond; } -void ares__thread_cond_destroy(ares__thread_cond_t *cond) +void ares_thread_cond_destroy(ares_thread_cond_t *cond) { if (cond == NULL) { return; @@ -90,7 +90,7 @@ void ares__thread_cond_destroy(ares__thread_cond_t *cond) ares_free(cond); } -void ares__thread_cond_signal(ares__thread_cond_t *cond) +void ares_thread_cond_signal(ares_thread_cond_t *cond) { if (cond == NULL) { return; @@ -98,7 +98,7 @@ void ares__thread_cond_signal(ares__thread_cond_t *cond) WakeConditionVariable(&cond->cond); } -void ares__thread_cond_broadcast(ares__thread_cond_t *cond) +void ares_thread_cond_broadcast(ares_thread_cond_t *cond) { if (cond == NULL) { return; @@ -106,8 +106,8 @@ void ares__thread_cond_broadcast(ares__thread_cond_t *cond) WakeAllConditionVariable(&cond->cond); } -ares_status_t ares__thread_cond_wait(ares__thread_cond_t *cond, - ares__thread_mutex_t *mut) +ares_status_t ares_thread_cond_wait(ares_thread_cond_t *cond, + ares_thread_mutex_t *mut) { if (cond == NULL || mut == NULL) { return ARES_EFORMERR; @@ -117,9 +117,9 @@ ares_status_t ares__thread_cond_wait(ares__thread_cond_t *cond, return ARES_SUCCESS; } -ares_status_t ares__thread_cond_timedwait(ares__thread_cond_t *cond, - ares__thread_mutex_t *mut, - unsigned long timeout_ms) +ares_status_t ares_thread_cond_timedwait(ares_thread_cond_t *cond, + ares_thread_mutex_t *mut, + unsigned long timeout_ms) { if (cond == NULL || mut == NULL) { return ARES_EFORMERR; @@ -132,7 +132,7 @@ ares_status_t ares__thread_cond_timedwait(ares__thread_cond_t *cond, return ARES_SUCCESS; } -struct ares__thread { +struct ares_thread { HANDLE thread; DWORD id; @@ -142,18 +142,18 @@ struct ares__thread { }; /* Wrap for pthread compatibility */ -static DWORD WINAPI ares__thread_func(LPVOID lpParameter) +static DWORD WINAPI ares_thread_func(LPVOID lpParameter) { - ares__thread_t *thread = lpParameter; + ares_thread_t *thread = lpParameter; thread->rv = thread->func(thread->arg); return 0; } -ares_status_t ares__thread_create(ares__thread_t **thread, - ares__thread_func_t func, void *arg) +ares_status_t ares_thread_create(ares_thread_t **thread, + ares_thread_func_t func, void *arg) { - ares__thread_t *thr = NULL; + ares_thread_t *thr = NULL; if (func == NULL || thread == NULL) { return ARES_EFORMERR; @@ -166,7 +166,7 @@ ares_status_t ares__thread_create(ares__thread_t **thread, thr->func = func; thr->arg = arg; - thr->thread = CreateThread(NULL, 0, ares__thread_func, thr, 0, &thr->id); + thr->thread = CreateThread(NULL, 0, ares_thread_func, thr, 0, &thr->id); if (thr->thread == NULL) { ares_free(thr); return ARES_ESERVFAIL; @@ -176,7 +176,7 @@ ares_status_t ares__thread_create(ares__thread_t **thread, return ARES_SUCCESS; } -ares_status_t ares__thread_join(ares__thread_t *thread, void **rv) +ares_status_t ares_thread_join(ares_thread_t *thread, void **rv) { ares_status_t status = ARES_SUCCESS; @@ -211,14 +211,14 @@ ares_status_t ares__thread_join(ares__thread_t *thread, void **rv) # include # endif -struct ares__thread_mutex { +struct ares_thread_mutex { pthread_mutex_t mutex; }; -ares__thread_mutex_t *ares__thread_mutex_create(void) +ares_thread_mutex_t *ares_thread_mutex_create(void) { - pthread_mutexattr_t attr; - ares__thread_mutex_t *mut = ares_malloc_zero(sizeof(*mut)); + pthread_mutexattr_t attr; + ares_thread_mutex_t *mut = ares_malloc_zero(sizeof(*mut)); if (mut == NULL) { return NULL; } @@ -247,7 +247,7 @@ ares__thread_mutex_t *ares__thread_mutex_create(void) /* LCOV_EXCL_STOP */ } -void ares__thread_mutex_destroy(ares__thread_mutex_t *mut) +void ares_thread_mutex_destroy(ares_thread_mutex_t *mut) { if (mut == NULL) { return; @@ -256,7 +256,7 @@ void ares__thread_mutex_destroy(ares__thread_mutex_t *mut) ares_free(mut); } -void ares__thread_mutex_lock(ares__thread_mutex_t *mut) +void ares_thread_mutex_lock(ares_thread_mutex_t *mut) { if (mut == NULL) { return; @@ -264,7 +264,7 @@ void ares__thread_mutex_lock(ares__thread_mutex_t *mut) pthread_mutex_lock(&mut->mutex); } -void ares__thread_mutex_unlock(ares__thread_mutex_t *mut) +void ares_thread_mutex_unlock(ares_thread_mutex_t *mut) { if (mut == NULL) { return; @@ -272,13 +272,13 @@ void ares__thread_mutex_unlock(ares__thread_mutex_t *mut) pthread_mutex_unlock(&mut->mutex); } -struct ares__thread_cond { +struct ares_thread_cond { pthread_cond_t cond; }; -ares__thread_cond_t *ares__thread_cond_create(void) +ares_thread_cond_t *ares_thread_cond_create(void) { - ares__thread_cond_t *cond = ares_malloc_zero(sizeof(*cond)); + ares_thread_cond_t *cond = ares_malloc_zero(sizeof(*cond)); if (cond == NULL) { return NULL; } @@ -286,7 +286,7 @@ ares__thread_cond_t *ares__thread_cond_create(void) return cond; } -void ares__thread_cond_destroy(ares__thread_cond_t *cond) +void ares_thread_cond_destroy(ares_thread_cond_t *cond) { if (cond == NULL) { return; @@ -295,7 +295,7 @@ void ares__thread_cond_destroy(ares__thread_cond_t *cond) ares_free(cond); } -void ares__thread_cond_signal(ares__thread_cond_t *cond) +void ares_thread_cond_signal(ares_thread_cond_t *cond) { if (cond == NULL) { return; @@ -303,7 +303,7 @@ void ares__thread_cond_signal(ares__thread_cond_t *cond) pthread_cond_signal(&cond->cond); } -void ares__thread_cond_broadcast(ares__thread_cond_t *cond) +void ares_thread_cond_broadcast(ares_thread_cond_t *cond) { if (cond == NULL) { return; @@ -311,8 +311,8 @@ void ares__thread_cond_broadcast(ares__thread_cond_t *cond) pthread_cond_broadcast(&cond->cond); } -ares_status_t ares__thread_cond_wait(ares__thread_cond_t *cond, - ares__thread_mutex_t *mut) +ares_status_t ares_thread_cond_wait(ares_thread_cond_t *cond, + ares_thread_mutex_t *mut) { if (cond == NULL || mut == NULL) { return ARES_EFORMERR; @@ -322,7 +322,7 @@ ares_status_t ares__thread_cond_wait(ares__thread_cond_t *cond, return ARES_SUCCESS; } -static void ares__timespec_timeout(struct timespec *ts, unsigned long add_ms) +static void ares_timespec_timeout(struct timespec *ts, unsigned long add_ms) { # if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_REALTIME) clock_gettime(CLOCK_REALTIME, ts); @@ -345,9 +345,9 @@ static void ares__timespec_timeout(struct timespec *ts, unsigned long add_ms) } } -ares_status_t ares__thread_cond_timedwait(ares__thread_cond_t *cond, - ares__thread_mutex_t *mut, - unsigned long timeout_ms) +ares_status_t ares_thread_cond_timedwait(ares_thread_cond_t *cond, + ares_thread_mutex_t *mut, + unsigned long timeout_ms) { struct timespec ts; @@ -355,7 +355,7 @@ ares_status_t ares__thread_cond_timedwait(ares__thread_cond_t *cond, return ARES_EFORMERR; } - ares__timespec_timeout(&ts, timeout_ms); + ares_timespec_timeout(&ts, timeout_ms); if (pthread_cond_timedwait(&cond->cond, &mut->mutex, &ts) != 0) { return ARES_ETIMEOUT; @@ -364,14 +364,14 @@ ares_status_t ares__thread_cond_timedwait(ares__thread_cond_t *cond, return ARES_SUCCESS; } -struct ares__thread { +struct ares_thread { pthread_t thread; }; -ares_status_t ares__thread_create(ares__thread_t **thread, - ares__thread_func_t func, void *arg) +ares_status_t ares_thread_create(ares_thread_t **thread, + ares_thread_func_t func, void *arg) { - ares__thread_t *thr = NULL; + ares_thread_t *thr = NULL; if (func == NULL || thread == NULL) { return ARES_EFORMERR; @@ -390,7 +390,7 @@ ares_status_t ares__thread_create(ares__thread_t **thread, return ARES_SUCCESS; } -ares_status_t ares__thread_join(ares__thread_t *thread, void **rv) +ares_status_t ares_thread_join(ares_thread_t *thread, void **rv) { void *ret = NULL; ares_status_t status = ARES_SUCCESS; @@ -420,57 +420,57 @@ ares_bool_t ares_threadsafety(void) #else /* !CARES_THREADS */ /* NoOp */ -ares__thread_mutex_t *ares__thread_mutex_create(void) +ares_thread_mutex_t *ares_thread_mutex_create(void) { return NULL; } -void ares__thread_mutex_destroy(ares__thread_mutex_t *mut) +void ares_thread_mutex_destroy(ares_thread_mutex_t *mut) { (void)mut; } -void ares__thread_mutex_lock(ares__thread_mutex_t *mut) +void ares_thread_mutex_lock(ares_thread_mutex_t *mut) { (void)mut; } -void ares__thread_mutex_unlock(ares__thread_mutex_t *mut) +void ares_thread_mutex_unlock(ares_thread_mutex_t *mut) { (void)mut; } -ares__thread_cond_t *ares__thread_cond_create(void) +ares_thread_cond_t *ares_thread_cond_create(void) { return NULL; } -void ares__thread_cond_destroy(ares__thread_cond_t *cond) +void ares_thread_cond_destroy(ares_thread_cond_t *cond) { (void)cond; } -void ares__thread_cond_signal(ares__thread_cond_t *cond) +void ares_thread_cond_signal(ares_thread_cond_t *cond) { (void)cond; } -void ares__thread_cond_broadcast(ares__thread_cond_t *cond) +void ares_thread_cond_broadcast(ares_thread_cond_t *cond) { (void)cond; } -ares_status_t ares__thread_cond_wait(ares__thread_cond_t *cond, - ares__thread_mutex_t *mut) +ares_status_t ares_thread_cond_wait(ares_thread_cond_t *cond, + ares_thread_mutex_t *mut) { (void)cond; (void)mut; return ARES_ENOTIMP; } -ares_status_t ares__thread_cond_timedwait(ares__thread_cond_t *cond, - ares__thread_mutex_t *mut, - unsigned long timeout_ms) +ares_status_t ares_thread_cond_timedwait(ares_thread_cond_t *cond, + ares_thread_mutex_t *mut, + unsigned long timeout_ms) { (void)cond; (void)mut; @@ -478,8 +478,8 @@ ares_status_t ares__thread_cond_timedwait(ares__thread_cond_t *cond, return ARES_ENOTIMP; } -ares_status_t ares__thread_create(ares__thread_t **thread, - ares__thread_func_t func, void *arg) +ares_status_t ares_thread_create(ares_thread_t **thread, + ares_thread_func_t func, void *arg) { (void)thread; (void)func; @@ -487,7 +487,7 @@ ares_status_t ares__thread_create(ares__thread_t **thread, return ARES_ENOTIMP; } -ares_status_t ares__thread_join(ares__thread_t *thread, void **rv) +ares_status_t ares_thread_join(ares_thread_t *thread, void **rv) { (void)thread; (void)rv; @@ -501,7 +501,7 @@ ares_bool_t ares_threadsafety(void) #endif -ares_status_t ares__channel_threading_init(ares_channel_t *channel) +ares_status_t ares_channel_threading_init(ares_channel_t *channel) { ares_status_t status = ARES_SUCCESS; @@ -510,13 +510,13 @@ ares_status_t ares__channel_threading_init(ares_channel_t *channel) return ARES_SUCCESS; } - channel->lock = ares__thread_mutex_create(); + channel->lock = ares_thread_mutex_create(); if (channel->lock == NULL) { status = ARES_ENOMEM; goto done; } - channel->cond_empty = ares__thread_cond_create(); + channel->cond_empty = ares_thread_cond_create(); if (channel->cond_empty == NULL) { status = ARES_ENOMEM; goto done; @@ -524,27 +524,27 @@ ares_status_t ares__channel_threading_init(ares_channel_t *channel) done: if (status != ARES_SUCCESS) { - ares__channel_threading_destroy(channel); + ares_channel_threading_destroy(channel); } return status; } -void ares__channel_threading_destroy(ares_channel_t *channel) +void ares_channel_threading_destroy(ares_channel_t *channel) { - ares__thread_mutex_destroy(channel->lock); + ares_thread_mutex_destroy(channel->lock); channel->lock = NULL; - ares__thread_cond_destroy(channel->cond_empty); + ares_thread_cond_destroy(channel->cond_empty); channel->cond_empty = NULL; } -void ares__channel_lock(const ares_channel_t *channel) +void ares_channel_lock(const ares_channel_t *channel) { - ares__thread_mutex_lock(channel->lock); + ares_thread_mutex_lock(channel->lock); } -void ares__channel_unlock(const ares_channel_t *channel) +void ares_channel_unlock(const ares_channel_t *channel) { - ares__thread_mutex_unlock(channel->lock); + ares_thread_mutex_unlock(channel->lock); } /* Must not be holding a channel lock already, public function only */ @@ -562,29 +562,29 @@ ares_status_t ares_queue_wait_empty(ares_channel_t *channel, int timeout_ms) } if (timeout_ms >= 0) { - ares__tvnow(&tout); + ares_tvnow(&tout); tout.sec += (ares_int64_t)(timeout_ms / 1000); tout.usec += (unsigned int)(timeout_ms % 1000) * 1000; } - ares__thread_mutex_lock(channel->lock); - while (ares__llist_len(channel->all_queries)) { + ares_thread_mutex_lock(channel->lock); + while (ares_llist_len(channel->all_queries)) { if (timeout_ms < 0) { - ares__thread_cond_wait(channel->cond_empty, channel->lock); + ares_thread_cond_wait(channel->cond_empty, channel->lock); } else { ares_timeval_t tv_remaining; ares_timeval_t tv_now; unsigned long tms; - ares__tvnow(&tv_now); - ares__timeval_remaining(&tv_remaining, &tv_now, &tout); + ares_tvnow(&tv_now); + ares_timeval_remaining(&tv_remaining, &tv_now, &tout); tms = (unsigned long)((tv_remaining.sec * 1000) + (tv_remaining.usec / 1000)); if (tms == 0) { status = ARES_ETIMEOUT; } else { status = - ares__thread_cond_timedwait(channel->cond_empty, channel->lock, tms); + ares_thread_cond_timedwait(channel->cond_empty, channel->lock, tms); } /* If there was a timeout, don't loop. Otherwise, make sure this wasn't @@ -594,7 +594,7 @@ ares_status_t ares_queue_wait_empty(ares_channel_t *channel, int timeout_ms) } } } - ares__thread_mutex_unlock(channel->lock); + ares_thread_mutex_unlock(channel->lock); return status; } @@ -605,10 +605,10 @@ void ares_queue_notify_empty(ares_channel_t *channel) } /* We are guaranteed to be holding a channel lock already */ - if (ares__llist_len(channel->all_queries)) { + if (ares_llist_len(channel->all_queries)) { return; } /* Notify all waiters of the conditional */ - ares__thread_cond_broadcast(channel->cond_empty); + ares_thread_cond_broadcast(channel->cond_empty); } diff --git a/deps/cares/src/lib/util/ares_threads.h b/deps/cares/src/lib/util/ares_threads.h new file mode 100644 index 00000000000000..95c543e6e994f5 --- /dev/null +++ b/deps/cares/src/lib/util/ares_threads.h @@ -0,0 +1,60 @@ +/* MIT License + * + * Copyright (c) 2023 Brad House + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * SPDX-License-Identifier: MIT + */ +#ifndef __ARES__THREADS_H +#define __ARES__THREADS_H + +struct ares_thread_mutex; +typedef struct ares_thread_mutex ares_thread_mutex_t; + +ares_thread_mutex_t *ares_thread_mutex_create(void); +void ares_thread_mutex_destroy(ares_thread_mutex_t *mut); +void ares_thread_mutex_lock(ares_thread_mutex_t *mut); +void ares_thread_mutex_unlock(ares_thread_mutex_t *mut); + + +struct ares_thread_cond; +typedef struct ares_thread_cond ares_thread_cond_t; + +ares_thread_cond_t *ares_thread_cond_create(void); +void ares_thread_cond_destroy(ares_thread_cond_t *cond); +void ares_thread_cond_signal(ares_thread_cond_t *cond); +void ares_thread_cond_broadcast(ares_thread_cond_t *cond); +ares_status_t ares_thread_cond_wait(ares_thread_cond_t *cond, + ares_thread_mutex_t *mut); +ares_status_t ares_thread_cond_timedwait(ares_thread_cond_t *cond, + ares_thread_mutex_t *mut, + unsigned long timeout_ms); + + +struct ares_thread; +typedef struct ares_thread ares_thread_t; + +typedef void *(*ares_thread_func_t)(void *arg); +ares_status_t ares_thread_create(ares_thread_t **thread, + ares_thread_func_t func, void *arg); +ares_status_t ares_thread_join(ares_thread_t *thread, void **rv); + +#endif diff --git a/deps/cares/src/lib/util/ares_time.h b/deps/cares/src/lib/util/ares_time.h new file mode 100644 index 00000000000000..c6eaf97366379e --- /dev/null +++ b/deps/cares/src/lib/util/ares_time.h @@ -0,0 +1,48 @@ +/* MIT License + * + * Copyright (c) 2024 Brad House + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * SPDX-License-Identifier: MIT + */ +#ifndef __ARES_TIME_H +#define __ARES_TIME_H + +/*! struct timeval on some systems like Windows doesn't support 64bit time so + * therefore can't be used due to Y2K38 issues. Make our own that does have + * 64bit time. */ +typedef struct { + ares_int64_t sec; /*!< Seconds */ + unsigned int usec; /*!< Microseconds. Can't be negative. */ +} ares_timeval_t; + +/* return true if now is exactly check time or later */ +ares_bool_t ares_timedout(const ares_timeval_t *now, + const ares_timeval_t *check); + +void ares_tvnow(ares_timeval_t *now); +void ares_timeval_remaining(ares_timeval_t *remaining, + const ares_timeval_t *now, + const ares_timeval_t *tout); +void ares_timeval_diff(ares_timeval_t *tvdiff, const ares_timeval_t *tvstart, + const ares_timeval_t *tvstop); + +#endif diff --git a/deps/cares/src/lib/util/ares__timeval.c b/deps/cares/src/lib/util/ares_timeval.c similarity index 96% rename from deps/cares/src/lib/util/ares__timeval.c rename to deps/cares/src/lib/util/ares_timeval.c index e3a989dca87a1b..0b0845b6fb7ffe 100644 --- a/deps/cares/src/lib/util/ares__timeval.c +++ b/deps/cares/src/lib/util/ares_timeval.c @@ -28,7 +28,7 @@ #if defined(_WIN32) && !defined(MSDOS) -void ares__tvnow(ares_timeval_t *now) +void ares_tvnow(ares_timeval_t *now) { /* QueryPerformanceCounters() has been around since Windows 2000, though * significant fixes were made in later versions. Documentation states @@ -52,7 +52,7 @@ void ares__tvnow(ares_timeval_t *now) #elif defined(HAVE_CLOCK_GETTIME_MONOTONIC) -void ares__tvnow(ares_timeval_t *now) +void ares_tvnow(ares_timeval_t *now) { /* clock_gettime() is guaranteed to be increased monotonically when the * monotonic clock is queried. Time starting point is unspecified, it @@ -76,7 +76,7 @@ void ares__tvnow(ares_timeval_t *now) #elif defined(HAVE_GETTIMEOFDAY) -void ares__tvnow(ares_timeval_t *now) +void ares_tvnow(ares_timeval_t *now) { /* gettimeofday() is not granted to be increased monotonically, due to * clock drifting and external source time synchronization it can jump diff --git a/deps/cares/src/lib/util/ares_uri.c b/deps/cares/src/lib/util/ares_uri.c new file mode 100644 index 00000000000000..d656f8347f54c9 --- /dev/null +++ b/deps/cares/src/lib/util/ares_uri.c @@ -0,0 +1,1626 @@ +/* MIT License + * + * Copyright (c) 2024 Brad house + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * SPDX-License-Identifier: MIT + */ + + +#include "ares_private.h" +#include "ares_uri.h" +#ifdef HAVE_STDINT_H +# include +#endif + +struct ares_uri { + char scheme[16]; + char *username; + char *password; + unsigned short port; + char host[256]; + char *path; + ares_htable_dict_t *query; + char *fragment; +}; + +/* RFC3986 character set notes: + * gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@" + * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" + * / "*" / "+" / "," / ";" / "=" + * reserved = gen-delims / sub-delims + * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" + * scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) + * authority = [ userinfo "@" ] host [ ":" port ] + * userinfo = *( unreserved / pct-encoded / sub-delims / ":" ) + * NOTE: Use of the format "user:password" in the userinfo field is + * deprecated. Applications should not render as clear text any data + * after the first colon (":") character found within a userinfo + * subcomponent unless the data after the colon is the empty string + * (indicating no password). + * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" + * query = *( pchar / "/" / "?" ) + * fragment = *( pchar / "/" / "?" ) + * + * NOTE: Due to ambiguity, "+" in a query must be percent-encoded, as old + * URLs used that for spaces. + */ + + +static ares_bool_t ares_uri_chis_subdelim(char x) +{ + switch (x) { + case '!': + return ARES_TRUE; + case '$': + return ARES_TRUE; + case '&': + return ARES_TRUE; + case '\'': + return ARES_TRUE; + case '(': + return ARES_TRUE; + case ')': + return ARES_TRUE; + case '*': + return ARES_TRUE; + case '+': + return ARES_TRUE; + case ',': + return ARES_TRUE; + case ';': + return ARES_TRUE; + case '=': + return ARES_TRUE; + default: + break; + } + return ARES_FALSE; +} + +/* These don't actually appear to be referenced in any logic */ +#if 0 +static ares_bool_t ares_uri_chis_gendelim(char x) +{ + switch (x) { + case ':': + return ARES_TRUE; + case '/': + return ARES_TRUE; + case '?': + return ARES_TRUE; + case '#': + return ARES_TRUE; + case '[': + return ARES_TRUE; + case ']': + return ARES_TRUE; + case '@': + return ARES_TRUE; + default: + break; + } + return ARES_FALSE; +} + + +static ares_bool_t ares_uri_chis_reserved(char x) +{ + return ares_uri_chis_gendelim(x) || ares_uri_chis_subdelim(x); +} +#endif + +static ares_bool_t ares_uri_chis_unreserved(char x) +{ + switch (x) { + case '-': + return ARES_TRUE; + case '.': + return ARES_TRUE; + case '_': + return ARES_TRUE; + case '~': + return ARES_TRUE; + default: + break; + } + return ares_isalpha(x) || ares_isdigit(x); +} + +static ares_bool_t ares_uri_chis_scheme(char x) +{ + switch (x) { + case '+': + return ARES_TRUE; + case '-': + return ARES_TRUE; + case '.': + return ARES_TRUE; + default: + break; + } + return ares_isalpha(x) || ares_isdigit(x); +} + +static ares_bool_t ares_uri_chis_authority(char x) +{ + /* This one here isn't well defined. We are going to include the valid + * characters of the subfields plus known delimiters */ + return ares_uri_chis_unreserved(x) || ares_uri_chis_subdelim(x) || x == '%' || + x == '[' || x == ']' || x == '@' || x == ':'; +} + +static ares_bool_t ares_uri_chis_userinfo(char x) +{ + /* NOTE: we don't include ':' here since we are using that as our + * username/password delimiter */ + return ares_uri_chis_unreserved(x) || ares_uri_chis_subdelim(x); +} + +static ares_bool_t ares_uri_chis_path(char x) +{ + switch (x) { + case ':': + return ARES_TRUE; + case '@': + return ARES_TRUE; + /* '/' isn't in the spec as a path character since its technically a + * delimiter but we're not splitting on '/' so we accept it as valid */ + case '/': + return ARES_TRUE; + default: + break; + } + return ares_uri_chis_unreserved(x) || ares_uri_chis_subdelim(x); +} + +static ares_bool_t ares_uri_chis_path_enc(char x) +{ + return ares_uri_chis_path(x) || x == '%'; +} + +static ares_bool_t ares_uri_chis_query(char x) +{ + switch (x) { + case '/': + return ARES_TRUE; + case '?': + return ARES_TRUE; + default: + break; + } + + /* Exclude & and = used as delimiters, they're valid characters in the + * set, just not for the individual pieces */ + return ares_uri_chis_path(x) && x != '&' && x != '='; +} + +static ares_bool_t ares_uri_chis_query_enc(char x) +{ + return ares_uri_chis_query(x) || x == '%'; +} + +static ares_bool_t ares_uri_chis_fragment(char x) +{ + switch (x) { + case '/': + return ARES_TRUE; + case '?': + return ARES_TRUE; + default: + break; + } + return ares_uri_chis_path(x); +} + +static ares_bool_t ares_uri_chis_fragment_enc(char x) +{ + return ares_uri_chis_fragment(x) || x == '%'; +} + +ares_uri_t *ares_uri_create(void) +{ + ares_uri_t *uri = ares_malloc_zero(sizeof(*uri)); + + if (uri == NULL) { + return NULL; + } + + uri->query = ares_htable_dict_create(); + if (uri->query == NULL) { + ares_free(uri); + return NULL; + } + + return uri; +} + +void ares_uri_destroy(ares_uri_t *uri) +{ + if (uri == NULL) { + return; + } + + ares_free(uri->username); + ares_free(uri->password); + ares_free(uri->path); + ares_free(uri->fragment); + ares_htable_dict_destroy(uri->query); + ares_free(uri); +} + +static ares_bool_t ares_uri_scheme_is_valid(const char *uri) +{ + size_t i; + + if (ares_strlen(uri) == 0) { + return ARES_FALSE; + } + + if (!ares_isalpha(*uri)) { + return ARES_FALSE; + } + + for (i = 0; uri[i] != 0; i++) { + if (!ares_uri_chis_scheme(uri[i])) { + return ARES_FALSE; + } + } + return ARES_TRUE; +} + +static ares_bool_t ares_uri_str_isvalid(const char *str, size_t max_len, + ares_bool_t (*ischr)(char)) +{ + size_t i; + + if (str == NULL) { + return ARES_FALSE; + } + + for (i = 0; i != max_len && str[i] != 0; i++) { + if (!ischr(str[i])) { + return ARES_FALSE; + } + } + return ARES_TRUE; +} + +ares_status_t ares_uri_set_scheme(ares_uri_t *uri, const char *scheme) +{ + if (uri == NULL) { + return ARES_EFORMERR; + } + + if (!ares_uri_scheme_is_valid(scheme)) { + return ARES_EBADSTR; + } + + ares_strcpy(uri->scheme, scheme, sizeof(uri->scheme)); + ares_str_lower(uri->scheme); + + return ARES_SUCCESS; +} + +const char *ares_uri_get_scheme(const ares_uri_t *uri) +{ + if (uri == NULL) { + return NULL; + } + + return uri->scheme; +} + +static ares_status_t ares_uri_set_username_own(ares_uri_t *uri, char *username) +{ + if (uri == NULL) { + return ARES_EFORMERR; + } + + if (username != NULL && (!ares_str_isprint(username, ares_strlen(username)) || + ares_strlen(username) == 0)) { + return ARES_EBADSTR; + } + + + ares_free(uri->username); + uri->username = username; + return ARES_SUCCESS; +} + +ares_status_t ares_uri_set_username(ares_uri_t *uri, const char *username) +{ + ares_status_t status; + char *temp = NULL; + + if (uri == NULL) { + return ARES_EFORMERR; + } + + if (username != NULL) { + temp = ares_strdup(username); + if (temp == NULL) { + return ARES_ENOMEM; + } + } + + status = ares_uri_set_username_own(uri, temp); + if (status != ARES_SUCCESS) { + ares_free(temp); + } + + return status; +} + +const char *ares_uri_get_username(const ares_uri_t *uri) +{ + if (uri == NULL) { + return NULL; + } + + return uri->username; +} + +static ares_status_t ares_uri_set_password_own(ares_uri_t *uri, char *password) +{ + if (uri == NULL) { + return ARES_EFORMERR; + } + + if (password != NULL && !ares_str_isprint(password, ares_strlen(password))) { + return ARES_EBADSTR; + } + + ares_free(uri->password); + uri->password = password; + return ARES_SUCCESS; +} + +ares_status_t ares_uri_set_password(ares_uri_t *uri, const char *password) +{ + ares_status_t status; + char *temp = NULL; + + if (uri == NULL) { + return ARES_EFORMERR; + } + + if (password != NULL) { + temp = ares_strdup(password); + if (temp == NULL) { + return ARES_ENOMEM; + } + } + + status = ares_uri_set_password_own(uri, temp); + if (status != ARES_SUCCESS) { + ares_free(temp); + } + + return status; +} + +const char *ares_uri_get_password(const ares_uri_t *uri) +{ + if (uri == NULL) { + return NULL; + } + + return uri->password; +} + +ares_status_t ares_uri_set_host(ares_uri_t *uri, const char *host) +{ + struct ares_addr addr; + size_t addrlen; + char hoststr[256]; + char *ll_scope; + + if (uri == NULL || ares_strlen(host) == 0 || + ares_strlen(host) >= sizeof(hoststr)) { + return ARES_EFORMERR; + } + + ares_strcpy(hoststr, host, sizeof(hoststr)); + + /* Look for '%' which could be a link-local scope for ipv6 addresses and + * parse it off */ + ll_scope = strchr(hoststr, '%'); + if (ll_scope != NULL) { + *ll_scope = 0; + ll_scope++; + if (!ares_str_isalnum(ll_scope)) { + return ARES_EBADNAME; + } + } + + /* If its an IP address, normalize it */ + memset(&addr, 0, sizeof(addr)); + addr.family = AF_UNSPEC; + if (ares_dns_pton(hoststr, &addr, &addrlen) != NULL) { + char ipaddr[INET6_ADDRSTRLEN]; + ares_inet_ntop(addr.family, &addr.addr, ipaddr, sizeof(ipaddr)); + /* Only IPv6 is allowed to have a scope */ + if (ll_scope != NULL && addr.family != AF_INET6) { + return ARES_EBADNAME; + } + + if (ll_scope != NULL) { + snprintf(uri->host, sizeof(uri->host), "%s%%%s", ipaddr, ll_scope); + } else { + ares_strcpy(uri->host, ipaddr, sizeof(uri->host)); + } + return ARES_SUCCESS; + } + + /* If its a hostname, make sure its a valid charset */ + if (!ares_is_hostname(host)) { + return ARES_EBADNAME; + } + + ares_strcpy(uri->host, host, sizeof(uri->host)); + return ARES_SUCCESS; +} + +const char *ares_uri_get_host(const ares_uri_t *uri) +{ + if (uri == NULL) { + return NULL; + } + + return uri->host; +} + +ares_status_t ares_uri_set_port(ares_uri_t *uri, unsigned short port) +{ + if (uri == NULL) { + return ARES_EFORMERR; + } + uri->port = port; + return ARES_SUCCESS; +} + +unsigned short ares_uri_get_port(const ares_uri_t *uri) +{ + if (uri == NULL) { + return 0; + } + return uri->port; +} + +/* URI spec says path normalization is a requirement */ +static char *ares_uri_path_normalize(const char *path) +{ + ares_status_t status; + ares_array_t *arr = NULL; + ares_buf_t *outpath = NULL; + ares_buf_t *inpath = NULL; + ares_ssize_t i; + size_t j; + size_t len; + + inpath = + ares_buf_create_const((const unsigned char *)path, ares_strlen(path)); + if (inpath == NULL) { + status = ARES_ENOMEM; + goto done; + } + + outpath = ares_buf_create(); + if (outpath == NULL) { + status = ARES_ENOMEM; + goto done; + } + + status = ares_buf_split_str_array(inpath, (const unsigned char *)"/", 1, + ARES_BUF_SPLIT_TRIM, 0, &arr); + if (status != ARES_SUCCESS) { + return NULL; + } + + for (i = 0; i < (ares_ssize_t)ares_array_len(arr); i++) { + const char **strptr = ares_array_at(arr, (size_t)i); + const char *str = *strptr; + + if (ares_streq(str, ".")) { + ares_array_remove_at(arr, (size_t)i); + i--; + } else if (ares_streq(str, "..")) { + if (i != 0) { + ares_array_remove_at(arr, (size_t)i - 1); + i--; + } + ares_array_remove_at(arr, (size_t)i); + i--; + } + } + + status = ares_buf_append_byte(outpath, '/'); + if (status != ARES_SUCCESS) { + goto done; + } + + len = ares_array_len(arr); + for (j = 0; j < len; j++) { + const char **strptr = ares_array_at(arr, j); + const char *str = *strptr; + status = ares_buf_append_str(outpath, str); + if (status != ARES_SUCCESS) { + goto done; + } + + /* Path separator, but on the last entry, we need to check if it was + * originally terminated or not because they have different meanings */ + if (j != len - 1 || path[ares_strlen(path) - 1] == '/') { + status = ares_buf_append_byte(outpath, '/'); + if (status != ARES_SUCCESS) { + goto done; + } + } + } + +done: + ares_array_destroy(arr); + ares_buf_destroy(inpath); + if (status != ARES_SUCCESS) { + ares_buf_destroy(outpath); + return NULL; + } + + return ares_buf_finish_str(outpath, NULL); +} + +ares_status_t ares_uri_set_path(ares_uri_t *uri, const char *path) +{ + char *temp = NULL; + + if (uri == NULL) { + return ARES_EFORMERR; + } + + if (path != NULL && !ares_str_isprint(path, ares_strlen(path))) { + return ARES_EBADSTR; + } + + if (path != NULL) { + temp = ares_uri_path_normalize(path); + if (temp == NULL) { + return ARES_ENOMEM; + } + } + + ares_free(uri->path); + uri->path = temp; + + return ARES_SUCCESS; +} + +const char *ares_uri_get_path(const ares_uri_t *uri) +{ + if (uri == NULL) { + return NULL; + } + + return uri->path; +} + +ares_status_t ares_uri_set_query_key(ares_uri_t *uri, const char *key, + const char *val) +{ + if (uri == NULL || key == NULL || *key == 0) { + return ARES_EFORMERR; + } + + if (!ares_str_isprint(key, ares_strlen(key)) || + (val != NULL && !ares_str_isprint(val, ares_strlen(val)))) { + return ARES_EBADSTR; + } + + if (!ares_htable_dict_insert(uri->query, key, val)) { + return ARES_ENOMEM; + } + return ARES_SUCCESS; +} + +ares_status_t ares_uri_del_query_key(ares_uri_t *uri, const char *key) +{ + if (uri == NULL || key == NULL || *key == 0 || + !ares_str_isprint(key, ares_strlen(key))) { + return ARES_EFORMERR; + } + + if (!ares_htable_dict_remove(uri->query, key)) { + return ARES_ENOTFOUND; + } + + return ARES_SUCCESS; +} + +const char *ares_uri_get_query_key(const ares_uri_t *uri, const char *key) +{ + if (uri == NULL || key == NULL || *key == 0 || + !ares_str_isprint(key, ares_strlen(key))) { + return NULL; + } + + return ares_htable_dict_get_direct(uri->query, key); +} + +char **ares_uri_get_query_keys(const ares_uri_t *uri, size_t *num) +{ + if (uri == NULL || num == NULL) { + return NULL; + } + + return ares_htable_dict_keys(uri->query, num); +} + +static ares_status_t ares_uri_set_fragment_own(ares_uri_t *uri, char *fragment) +{ + if (uri == NULL) { + return ARES_EFORMERR; + } + + if (fragment != NULL && !ares_str_isprint(fragment, ares_strlen(fragment))) { + return ARES_EBADSTR; + } + + ares_free(uri->fragment); + uri->fragment = fragment; + return ARES_SUCCESS; +} + +ares_status_t ares_uri_set_fragment(ares_uri_t *uri, const char *fragment) +{ + ares_status_t status; + char *temp = NULL; + + if (uri == NULL) { + return ARES_EFORMERR; + } + + if (fragment != NULL) { + temp = ares_strdup(fragment); + if (temp == NULL) { + return ARES_ENOMEM; + } + } + + status = ares_uri_set_fragment_own(uri, temp); + if (status != ARES_SUCCESS) { + ares_free(temp); + } + + return status; +} + +const char *ares_uri_get_fragment(const ares_uri_t *uri) +{ + if (uri == NULL) { + return NULL; + } + return uri->fragment; +} + +static ares_status_t ares_uri_encode_buf(ares_buf_t *buf, const char *str, + ares_bool_t (*ischr)(char)) +{ + size_t i; + + if (buf == NULL || str == NULL) { + return ARES_EFORMERR; + } + + for (i = 0; str[i] != 0; i++) { + if (ischr(str[i])) { + if (ares_buf_append_byte(buf, (unsigned char)str[i]) != ARES_SUCCESS) { + return ARES_ENOMEM; + } + } else { + if (ares_buf_append_byte(buf, '%') != ARES_SUCCESS) { + return ARES_ENOMEM; + } + if (ares_buf_append_num_hex(buf, (size_t)str[i], 2) != ARES_SUCCESS) { + return ARES_ENOMEM; + } + } + } + return ARES_SUCCESS; +} + +static ares_status_t ares_uri_write_scheme(const ares_uri_t *uri, + ares_buf_t *buf) +{ + ares_status_t status; + + status = ares_buf_append_str(buf, uri->scheme); + if (status != ARES_SUCCESS) { + return status; + } + + status = ares_buf_append_str(buf, "://"); + + return status; +} + +static ares_status_t ares_uri_write_authority(const ares_uri_t *uri, + ares_buf_t *buf) +{ + ares_status_t status; + ares_bool_t is_ipv6 = ARES_FALSE; + + if (ares_strlen(uri->username)) { + status = ares_uri_encode_buf(buf, uri->username, ares_uri_chis_userinfo); + if (status != ARES_SUCCESS) { + return status; + } + } + + if (ares_strlen(uri->password)) { + status = ares_buf_append_byte(buf, ':'); + if (status != ARES_SUCCESS) { + return status; + } + + status = ares_uri_encode_buf(buf, uri->password, ares_uri_chis_userinfo); + if (status != ARES_SUCCESS) { + return status; + } + } + + if (ares_strlen(uri->username) || ares_strlen(uri->password)) { + status = ares_buf_append_byte(buf, '@'); + if (status != ARES_SUCCESS) { + return status; + } + } + + /* We need to write ipv6 addresses with [ ] */ + if (strchr(uri->host, '%') != NULL) { + /* If we have a % in the name, it must be ipv6 link local scope, so we + * don't need to check anything else */ + is_ipv6 = ARES_TRUE; + } else { + /* Parse the host to see if it is an ipv6 address */ + struct ares_addr addr; + size_t addrlen; + memset(&addr, 0, sizeof(addr)); + addr.family = AF_INET6; + if (ares_dns_pton(uri->host, &addr, &addrlen) != NULL) { + is_ipv6 = ARES_TRUE; + } + } + + if (is_ipv6) { + status = ares_buf_append_byte(buf, '['); + if (status != ARES_SUCCESS) { + return status; + } + } + + status = ares_buf_append_str(buf, uri->host); + if (status != ARES_SUCCESS) { + return status; + } + + if (is_ipv6) { + status = ares_buf_append_byte(buf, ']'); + if (status != ARES_SUCCESS) { + return status; + } + } + + if (uri->port > 0) { + status = ares_buf_append_byte(buf, ':'); + if (status != ARES_SUCCESS) { + return status; + } + status = ares_buf_append_num_dec(buf, uri->port, 0); + if (status != ARES_SUCCESS) { + return status; + } + } + + return status; +} + +static ares_status_t ares_uri_write_path(const ares_uri_t *uri, ares_buf_t *buf) +{ + ares_status_t status; + + if (ares_strlen(uri->path) == 0) { + return ARES_SUCCESS; + } + + if (*uri->path != '/') { + status = ares_buf_append_byte(buf, '/'); + if (status != ARES_SUCCESS) { + return status; + } + } + + status = ares_uri_encode_buf(buf, uri->path, ares_uri_chis_path); + if (status != ARES_SUCCESS) { + return status; + } + + return ARES_SUCCESS; +} + +static ares_status_t ares_uri_write_query(const ares_uri_t *uri, + ares_buf_t *buf) +{ + ares_status_t status; + char **keys; + size_t num_keys = 0; + size_t i; + + if (ares_htable_dict_num_keys(uri->query) == 0) { + return ARES_SUCCESS; + } + + keys = ares_uri_get_query_keys(uri, &num_keys); + if (keys == NULL || num_keys == 0) { + return ARES_ENOMEM; + } + + status = ares_buf_append_byte(buf, '?'); + if (status != ARES_SUCCESS) { + goto done; + } + + for (i = 0; i < num_keys; i++) { + const char *val; + + if (i != 0) { + status = ares_buf_append_byte(buf, '&'); + if (status != ARES_SUCCESS) { + goto done; + } + } + + status = ares_uri_encode_buf(buf, keys[i], ares_uri_chis_query); + if (status != ARES_SUCCESS) { + goto done; + } + + val = ares_uri_get_query_key(uri, keys[i]); + if (val != NULL) { + status = ares_buf_append_byte(buf, '='); + if (status != ARES_SUCCESS) { + goto done; + } + + status = ares_uri_encode_buf(buf, val, ares_uri_chis_query); + if (status != ARES_SUCCESS) { + goto done; + } + } + } + +done: + ares_free_array(keys, num_keys, ares_free); + return status; +} + +static ares_status_t ares_uri_write_fragment(const ares_uri_t *uri, + ares_buf_t *buf) +{ + ares_status_t status; + + if (!ares_strlen(uri->fragment)) { + return ARES_SUCCESS; + } + + status = ares_buf_append_byte(buf, '#'); + if (status != ARES_SUCCESS) { + return status; + } + + status = ares_uri_encode_buf(buf, uri->fragment, ares_uri_chis_fragment); + if (status != ARES_SUCCESS) { + return status; + } + + return ARES_SUCCESS; +} + +ares_status_t ares_uri_write_buf(const ares_uri_t *uri, ares_buf_t *buf) +{ + ares_status_t status; + size_t orig_len; + + if (uri == NULL || buf == NULL) { + return ARES_EFORMERR; + } + + if (ares_strlen(uri->scheme) == 0 || ares_strlen(uri->host) == 0) { + return ARES_ENODATA; + } + + orig_len = ares_buf_len(buf); + + status = ares_uri_write_scheme(uri, buf); + if (status != ARES_SUCCESS) { + goto done; + } + + status = ares_uri_write_authority(uri, buf); + if (status != ARES_SUCCESS) { + goto done; + } + + status = ares_uri_write_path(uri, buf); + if (status != ARES_SUCCESS) { + goto done; + } + + status = ares_uri_write_query(uri, buf); + if (status != ARES_SUCCESS) { + goto done; + } + + status = ares_uri_write_fragment(uri, buf); + if (status != ARES_SUCCESS) { + goto done; + } + +done: + if (status != ARES_SUCCESS) { + ares_buf_set_length(buf, orig_len); + } + return status; +} + +ares_status_t ares_uri_write(char **out, const ares_uri_t *uri) +{ + ares_buf_t *buf; + ares_status_t status; + + if (out == NULL || uri == NULL) { + return ARES_EFORMERR; + } + + *out = NULL; + + buf = ares_buf_create(); + if (buf == NULL) { + return ARES_ENOMEM; + } + + status = ares_uri_write_buf(uri, buf); + if (status != ARES_SUCCESS) { + ares_buf_destroy(buf); + return status; + } + + *out = ares_buf_finish_str(buf, NULL); + return ARES_SUCCESS; +} + +#define xdigit_val(x) \ + ((x >= '0' && x <= '9') \ + ? (x - '0') \ + : ((x >= 'A' && x <= 'F') ? (x - 'A' + 10) : (x - 'a' + 10))) + +static ares_status_t ares_uri_decode_inplace(char *str, ares_bool_t is_query, + ares_bool_t must_be_printable, + size_t *out_len) +{ + size_t i; + size_t len = 0; + + for (i = 0; str[i] != 0; i++) { + if (is_query && str[i] == '+') { + str[len++] = ' '; + continue; + } + + if (str[i] != '%') { + str[len++] = str[i]; + continue; + } + + if (!ares_isxdigit(str[i + 1]) || !ares_isxdigit(str[i + 2])) { + return ARES_EBADSTR; + } + + str[len] = (char)(xdigit_val(str[i + 1]) << 4 | xdigit_val(str[i + 2])); + + if (must_be_printable && !ares_isprint(str[len])) { + return ARES_EBADSTR; + } + + len++; + + i += 2; + } + + str[len] = 0; + + *out_len = len; + return ARES_SUCCESS; +} + +static ares_status_t ares_uri_parse_scheme(ares_uri_t *uri, ares_buf_t *buf) +{ + ares_status_t status; + size_t bytes; + char scheme[sizeof(uri->scheme)]; + + ares_buf_tag(buf); + + bytes = + ares_buf_consume_until_seq(buf, (const unsigned char *)"://", 3, ARES_TRUE); + if (bytes == SIZE_MAX || bytes > sizeof(uri->scheme)) { + return ARES_EBADSTR; + } + + status = ares_buf_tag_fetch_string(buf, scheme, sizeof(scheme)); + if (status != ARES_SUCCESS) { + return status; + } + + status = ares_uri_set_scheme(uri, scheme); + if (status != ARES_SUCCESS) { + return status; + } + + /* Consume :// */ + ares_buf_consume(buf, 3); + + return ARES_SUCCESS; +} + +static ares_status_t ares_uri_parse_userinfo(ares_uri_t *uri, ares_buf_t *buf) +{ + size_t userinfo_len; + size_t username_len; + ares_bool_t has_password = ARES_FALSE; + char *temp = NULL; + ares_status_t status; + size_t len; + + ares_buf_tag(buf); + + /* Search for @, if its not found, return */ + userinfo_len = ares_buf_consume_until_charset(buf, (const unsigned char *)"@", + 1, ARES_TRUE); + + if (userinfo_len == SIZE_MAX) { + return ARES_SUCCESS; + } + + /* Rollback since now we know there really is userinfo */ + ares_buf_tag_rollback(buf); + + /* Search for ':', if it isn't found or its past the '@' then we only have + * a username and no password */ + ares_buf_tag(buf); + username_len = ares_buf_consume_until_charset(buf, (const unsigned char *)":", + 1, ARES_TRUE); + if (username_len < userinfo_len) { + has_password = ARES_TRUE; + status = ares_buf_tag_fetch_strdup(buf, &temp); + if (status != ARES_SUCCESS) { + goto done; + } + + status = ares_uri_decode_inplace(temp, ARES_FALSE, ARES_TRUE, &len); + if (status != ARES_SUCCESS) { + goto done; + } + + status = ares_uri_set_username_own(uri, temp); + if (status != ARES_SUCCESS) { + goto done; + } + temp = NULL; + + /* Consume : */ + ares_buf_consume(buf, 1); + } + + ares_buf_tag(buf); + ares_buf_consume_until_charset(buf, (const unsigned char *)"@", 1, ARES_TRUE); + status = ares_buf_tag_fetch_strdup(buf, &temp); + if (status != ARES_SUCCESS) { + goto done; + } + + status = ares_uri_decode_inplace(temp, ARES_FALSE, ARES_TRUE, &len); + if (status != ARES_SUCCESS) { + goto done; + } + + if (has_password) { + status = ares_uri_set_password_own(uri, temp); + } else { + status = ares_uri_set_username_own(uri, temp); + } + if (status != ARES_SUCCESS) { + goto done; + } + temp = NULL; + + /* Consume @ */ + ares_buf_consume(buf, 1); + +done: + ares_free(temp); + return status; +} + +static ares_status_t ares_uri_parse_hostport(ares_uri_t *uri, ares_buf_t *buf) +{ + unsigned char b; + char host[256]; + char port[6]; + size_t len; + ares_status_t status; + + status = ares_buf_peek_byte(buf, &b); + if (status != ARES_SUCCESS) { + return status; + } + + /* Bracketed syntax for ipv6 addresses */ + if (b == '[') { + ares_buf_consume(buf, 1); + ares_buf_tag(buf); + len = ares_buf_consume_until_charset(buf, (const unsigned char *)"]", 1, + ARES_TRUE); + if (len == SIZE_MAX) { + return ARES_EBADSTR; + } + + status = ares_buf_tag_fetch_string(buf, host, sizeof(host)); + if (status != ARES_SUCCESS) { + return status; + } + /* Consume ']' */ + ares_buf_consume(buf, 1); + } else { + /* Either ipv4 or hostname */ + ares_buf_tag(buf); + ares_buf_consume_until_charset(buf, (const unsigned char *)":", 1, + ARES_FALSE); + + status = ares_buf_tag_fetch_string(buf, host, sizeof(host)); + if (status != ARES_SUCCESS) { + return status; + } + } + + status = ares_uri_set_host(uri, host); + if (status != ARES_SUCCESS) { + return status; + } + + /* No port if nothing left to consume */ + if (!ares_buf_len(buf)) { + return status; + } + + status = ares_buf_peek_byte(buf, &b); + if (status != ARES_SUCCESS) { + return status; + } + + /* Only valid extra character at this point is ':' */ + if (b != ':') { + return ARES_EBADSTR; + } + ares_buf_consume(buf, 1); + + len = ares_buf_len(buf); + if (len == 0 || len > sizeof(port) - 1) { + return ARES_EBADSTR; + } + + status = ares_buf_fetch_bytes(buf, (unsigned char *)port, len); + if (status != ARES_SUCCESS) { + return status; + } + port[len] = 0; + + if (!ares_str_isnum(port)) { + return ARES_EBADSTR; + } + + status = ares_uri_set_port(uri, (unsigned short)atoi(port)); + if (status != ARES_SUCCESS) { + return status; + } + + return ARES_SUCCESS; +} + +static ares_status_t ares_uri_parse_authority(ares_uri_t *uri, ares_buf_t *buf) +{ + ares_status_t status; + size_t bytes; + ares_buf_t *auth = NULL; + const unsigned char *ptr; + size_t ptr_len; + + ares_buf_tag(buf); + + bytes = ares_buf_consume_until_charset(buf, (const unsigned char *)"/?#", 3, + ARES_FALSE); + if (bytes == 0) { + return ARES_EBADSTR; + } + + status = ares_buf_tag_fetch_constbuf(buf, &auth); + if (status != ARES_SUCCESS) { + goto done; + } + + ptr = ares_buf_peek(auth, &ptr_len); + if (!ares_uri_str_isvalid((const char *)ptr, ptr_len, + ares_uri_chis_authority)) { + status = ARES_EBADSTR; + goto done; + } + + status = ares_uri_parse_userinfo(uri, auth); + if (status != ARES_SUCCESS) { + goto done; + } + + status = ares_uri_parse_hostport(uri, auth); + if (status != ARES_SUCCESS) { + goto done; + } + + /* NOTE: the /, ?, or # is still in the buffer at this point so it can + * be used to determine what parser should be called next */ + +done: + ares_buf_destroy(auth); + return status; +} + +static ares_status_t ares_uri_parse_path(ares_uri_t *uri, ares_buf_t *buf) +{ + unsigned char b; + char *path = NULL; + ares_status_t status; + size_t len; + + if (ares_buf_len(buf) == 0) { + return ARES_SUCCESS; + } + + status = ares_buf_peek_byte(buf, &b); + if (status != ARES_SUCCESS) { + return status; + } + + /* Not a path, must be one of the others */ + if (b != '/') { + return ARES_SUCCESS; + } + + ares_buf_tag(buf); + ares_buf_consume_until_charset(buf, (const unsigned char *)"?#", 2, + ARES_FALSE); + status = ares_buf_tag_fetch_strdup(buf, &path); + if (status != ARES_SUCCESS) { + goto done; + } + + if (!ares_uri_str_isvalid(path, SIZE_MAX, ares_uri_chis_path_enc)) { + status = ARES_EBADSTR; + goto done; + } + + status = ares_uri_decode_inplace(path, ARES_FALSE, ARES_TRUE, &len); + if (status != ARES_SUCCESS) { + goto done; + } + + status = ares_uri_set_path(uri, path); + if (status != ARES_SUCCESS) { + goto done; + } + +done: + ares_free(path); + return status; +} + +static ares_status_t ares_uri_parse_query_buf(ares_uri_t *uri, ares_buf_t *buf) +{ + ares_status_t status = ARES_SUCCESS; + char *key = NULL; + char *val = NULL; + + while (ares_buf_len(buf) > 0) { + unsigned char b = 0; + size_t len; + + ares_buf_tag(buf); + + /* Its valid to have only a key with no value, so we search for both + * delims */ + len = ares_buf_consume_until_charset(buf, (const unsigned char *)"&=", 2, + ARES_FALSE); + if (len == 0) { + /* If we're here, we have a zero length key which is invalid */ + status = ARES_EBADSTR; + goto done; + } + + if (ares_buf_len(buf) > 0) { + /* Determine if we stopped on & or = */ + status = ares_buf_peek_byte(buf, &b); + if (status != ARES_SUCCESS) { + goto done; + } + } + + status = ares_buf_tag_fetch_strdup(buf, &key); + if (status != ARES_SUCCESS) { + goto done; + } + + if (!ares_uri_str_isvalid(key, SIZE_MAX, ares_uri_chis_query_enc)) { + status = ARES_EBADSTR; + goto done; + } + + status = ares_uri_decode_inplace(key, ARES_TRUE, ARES_TRUE, &len); + if (status != ARES_SUCCESS) { + goto done; + } + + /* Fetch Value */ + if (b == '=') { + /* Skip delimiter */ + ares_buf_consume(buf, 1); + ares_buf_tag(buf); + len = ares_buf_consume_until_charset(buf, (const unsigned char *)"&", 1, + ARES_FALSE); + if (len > 0) { + status = ares_buf_tag_fetch_strdup(buf, &val); + if (status != ARES_SUCCESS) { + goto done; + } + + if (!ares_uri_str_isvalid(val, SIZE_MAX, ares_uri_chis_query_enc)) { + status = ARES_EBADSTR; + goto done; + } + + status = ares_uri_decode_inplace(val, ARES_TRUE, ARES_TRUE, &len); + if (status != ARES_SUCCESS) { + goto done; + } + } + } + + if (b != 0) { + /* Consume '&' */ + ares_buf_consume(buf, 1); + } + + status = ares_uri_set_query_key(uri, key, val); + if (status != ARES_SUCCESS) { + goto done; + } + + ares_free(key); + key = NULL; + ares_free(val); + val = NULL; + } + +done: + ares_free(key); + ares_free(val); + return status; +} + +static ares_status_t ares_uri_parse_query(ares_uri_t *uri, ares_buf_t *buf) +{ + unsigned char b; + ares_status_t status; + ares_buf_t *query = NULL; + size_t len; + + if (ares_buf_len(buf) == 0) { + return ARES_SUCCESS; + } + + status = ares_buf_peek_byte(buf, &b); + if (status != ARES_SUCCESS) { + return status; + } + + /* Not a query, must be one of the others */ + if (b != '?') { + return ARES_SUCCESS; + } + + /* Only possible terminator is fragment indicator of '#' */ + ares_buf_consume(buf, 1); + ares_buf_tag(buf); + len = ares_buf_consume_until_charset(buf, (const unsigned char *)"#", 1, + ARES_FALSE); + if (len == 0) { + /* No data, return */ + return ARES_SUCCESS; + } + + status = ares_buf_tag_fetch_constbuf(buf, &query); + if (status != ARES_SUCCESS) { + return status; + } + + status = ares_uri_parse_query_buf(uri, query); + ares_buf_destroy(query); + + return status; +} + +static ares_status_t ares_uri_parse_fragment(ares_uri_t *uri, ares_buf_t *buf) +{ + unsigned char b; + char *fragment = NULL; + ares_status_t status; + size_t len; + + if (ares_buf_len(buf) == 0) { + return ARES_SUCCESS; + } + + status = ares_buf_peek_byte(buf, &b); + if (status != ARES_SUCCESS) { + return status; + } + + /* Not a fragment, must be one of the others */ + if (b != '#') { + return ARES_SUCCESS; + } + + ares_buf_consume(buf, 1); + + if (ares_buf_len(buf) == 0) { + return ARES_SUCCESS; + } + + /* Rest of the buffer is the fragment */ + status = ares_buf_fetch_str_dup(buf, ares_buf_len(buf), &fragment); + if (status != ARES_SUCCESS) { + goto done; + } + + if (!ares_uri_str_isvalid(fragment, SIZE_MAX, ares_uri_chis_fragment_enc)) { + status = ARES_EBADSTR; + goto done; + } + + status = ares_uri_decode_inplace(fragment, ARES_FALSE, ARES_TRUE, &len); + if (status != ARES_SUCCESS) { + goto done; + } + + status = ares_uri_set_fragment_own(uri, fragment); + if (status != ARES_SUCCESS) { + goto done; + } + fragment = NULL; + +done: + ares_free(fragment); + return status; +} + +ares_status_t ares_uri_parse_buf(ares_uri_t **out, ares_buf_t *buf) +{ + ares_status_t status; + ares_uri_t *uri = NULL; + size_t orig_pos; + + if (out == NULL || buf == NULL) { + return ARES_EFORMERR; + } + + *out = NULL; + + orig_pos = ares_buf_get_position(buf); + + uri = ares_uri_create(); + if (uri == NULL) { + status = ARES_ENOMEM; + goto done; + } + + status = ares_uri_parse_scheme(uri, buf); + if (status != ARES_SUCCESS) { + goto done; + } + + status = ares_uri_parse_authority(uri, buf); + if (status != ARES_SUCCESS) { + goto done; + } + + status = ares_uri_parse_path(uri, buf); + if (status != ARES_SUCCESS) { + goto done; + } + + status = ares_uri_parse_query(uri, buf); + if (status != ARES_SUCCESS) { + goto done; + } + + status = ares_uri_parse_fragment(uri, buf); + if (status != ARES_SUCCESS) { + goto done; + } + +done: + if (status != ARES_SUCCESS) { + ares_buf_set_position(buf, orig_pos); + ares_uri_destroy(uri); + } else { + *out = uri; + } + return status; +} + +ares_status_t ares_uri_parse(ares_uri_t **out, const char *str) +{ + ares_status_t status; + ares_buf_t *buf = NULL; + + if (out == NULL || str == NULL) { + return ARES_EFORMERR; + } + + *out = NULL; + + buf = ares_buf_create(); + if (buf == NULL) { + status = ARES_ENOMEM; + goto done; + } + + status = ares_buf_append_str(buf, str); + if (status != ARES_SUCCESS) { + goto done; + } + + status = ares_uri_parse_buf(out, buf); + if (status != ARES_SUCCESS) { + goto done; + } + +done: + ares_buf_destroy(buf); + + return status; +} diff --git a/deps/cares/src/lib/util/ares_uri.h b/deps/cares/src/lib/util/ares_uri.h new file mode 100644 index 00000000000000..6a703cba5b53c5 --- /dev/null +++ b/deps/cares/src/lib/util/ares_uri.h @@ -0,0 +1,252 @@ +/* MIT License + * + * Copyright (c) 2024 Brad House + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * SPDX-License-Identifier: MIT + */ +#ifndef __ARES_URI_H +#define __ARES_URI_H + +/*! \addtogroup ares_uri URI parser and writer implementation + * + * This is a fairly complete URI parser and writer implementation (RFC 3986) for + * schemes which use the :// syntax. Does not currently support URIs without an + * authority section, such as "mailto:person@example.com". + * + * Its implementation is overkill for our current needs to be able to express + * DNS server configuration, but there was really no reason not to support + * a greater subset of the specification. + * + * @{ + */ + + +struct ares_uri; + +/*! URI object */ +typedef struct ares_uri ares_uri_t; + +/*! Create a new URI object + * + * \return new ares_uri_t, must be freed with ares_uri_destroy() + */ +ares_uri_t *ares_uri_create(void); + +/*! Destroy an initialized URI object + * + * \param[in] uri Initialized URI object + */ +void ares_uri_destroy(ares_uri_t *uri); + +/*! Set the URI scheme. Automatically lower-cases the scheme provided. + * Only allows Alpha, Digit, +, -, and . characters. Maximum length is + * 15 characters. This is required to be set to write a URI. + * + * \param[in] uri Initialized URI object + * \param[in] scheme Scheme to set the object to use + * \return ARES_SUCCESS on success + */ +ares_status_t ares_uri_set_scheme(ares_uri_t *uri, const char *scheme); + +/*! Retrieve the currently configured URI scheme. + * + * \param[in] uri Initialized URI object + * \return string containing URI scheme + */ +const char *ares_uri_get_scheme(const ares_uri_t *uri); + +/*! Set the username in the URI object + * + * \param[in] uri Initialized URI object + * \param[in] username Username to set. May be NULL to unset existing username. + * \return ARES_SUCCESS on success + */ +ares_status_t ares_uri_set_username(ares_uri_t *uri, const char *username); + +/*! Retrieve the currently configured username. + * + * \param[in] uri Initialized URI object + * \return string containing username, maybe NULL if not set. + */ +const char *ares_uri_get_username(const ares_uri_t *uri); + +/*! Set the password in the URI object + * + * \param[in] uri Initialized URI object + * \param[in] password Password to set. May be NULL to unset existing password. + * \return ARES_SUCCESS on success + */ +ares_status_t ares_uri_set_password(ares_uri_t *uri, const char *password); + +/*! Retrieve the currently configured password. + * + * \param[in] uri Initialized URI object + * \return string containing password, maybe NULL if not set. + */ +const char *ares_uri_get_password(const ares_uri_t *uri); + +/*! Set the host or ip address in the URI object. This is required to be + * set to write a URI. The character set is strictly validated. + * + * \param[in] uri Initialized URI object + * \param[in] host IPv4, IPv6, or hostname to set. + * \return ARES_SUCCESS on success + */ +ares_status_t ares_uri_set_host(ares_uri_t *uri, const char *host); + +/*! Retrieve the currently configured host (or ip address). IPv6 addresses + * May include a link-local scope (e.g. fe80::b542:84df:1719:65e3%en0). + * + * \param[in] uri Initialized URI object + * \return string containing host, maybe NULL if not set. + */ +const char *ares_uri_get_host(const ares_uri_t *uri); + +/*! Set the port to use in the URI object. A port value of 0 will omit + * the port from the URI when written, thus using the scheme's default. + * + * \param[in] uri Initialized URI object + * \param[in] port Port to set. Use 0 to unset. + * \return ARES_SUCCESS on success + */ +ares_status_t ares_uri_set_port(ares_uri_t *uri, unsigned short port); + +/*! Retrieve the currently configured port + * + * \param[in] uri Initialized URI object + * \return port number, or 0 if not set. + */ +unsigned short ares_uri_get_port(const ares_uri_t *uri); + +/*! Set the path in the URI object. Unsupported characters will be URI-encoded + * when written. + * + * \param[in] uri Initialized URI object + * \param[in] path Path to set. May be NULL to unset existing path. + * \return ARES_SUCCESS on success + */ +ares_status_t ares_uri_set_path(ares_uri_t *uri, const char *path); + +/*! Retrieves the path in the URI object. If retrieved after parse, this + * value will be URI-decoded already. + * + * \param[in] uri Initialized URI object + * \return path string, or NULL if not set. + */ +const char *ares_uri_get_path(const ares_uri_t *uri); + +/*! Set a new query key/value pair. There is no set order for query keys + * when output in the URI, they will be emitted in a random order. Keys are + * case-insensitive. Query keys and values will be automatically URI-encoded + * when written. + * + * \param[in] uri Initialized URI object + * \param[in] key Query key to use, must be non-zero length. + * \param[in] val Query value to use, may be NULL. + * \return ARES_SUCCESS on success + */ +ares_status_t ares_uri_set_query_key(ares_uri_t *uri, const char *key, + const char *val); + +/*! Delete a specific query key. + * + * \param[in] uri Initialized URI object + * \param[in] key Key to delete. + * \return ARES_SUCCESS if deleted, ARES_ENOTFOUND if not found + */ +ares_status_t ares_uri_del_query_key(ares_uri_t *uri, const char *key); + +/*! Retrieve the value associted with a query key. Keys are case-insensitive. + * + * \param[in] uri Initialized URI object + * \param[in] key Key to retrieve. + * \return string representing value, may be NULL if either not found or + * NULL value set. There is currently no way to indicate the + * difference. + */ +const char *ares_uri_get_query_key(const ares_uri_t *uri, const char *key); + +/*! Retrieve a complete list of query keys. + * + * \param[in] uri Initialized URI object + * \param[out] num Number of keys. + * \return NULL on failure or no keys. Use + * ares_free_array(keys, num, ares_free) when done with array. + */ +char **ares_uri_get_query_keys(const ares_uri_t *uri, size_t *num); + +/*! Set the fragment in the URI object. Unsupported characters will be + * URI-encoded when written. + * + * \param[in] uri Initialized URI object + * \param[in] fragment Fragment to set. May be NULL to unset existing fragment. + * \return ARES_SUCCESS on success + */ +ares_status_t ares_uri_set_fragment(ares_uri_t *uri, const char *fragment); + +/*! Retrieves the fragment in the URI object. If retrieved after parse, this + * value will be URI-decoded already. + * + * \param[in] uri Initialized URI object + * \return fragment string, or NULL if not set. + */ +const char *ares_uri_get_fragment(const ares_uri_t *uri); + +/*! Parse the provided URI buffer into a new URI object. + * + * \param[out] out Returned new URI object. free with ares_uri_destroy(). + * \param[in] buf Buffer object containing the URI + * \return ARES_SUCCESS on successful parse. On failure the 'buf' object will + * be restored to its initial state in case another parser needs to + * be attempted. + */ +ares_status_t ares_uri_parse_buf(ares_uri_t **out, ares_buf_t *buf); + +/*! Parse the provided URI string into a new URI object. + * + * \param[out] out Returned new URI object. free with ares_uri_destroy(). + * \param[in] uri URI string to parse + * \return ARES_SUCCESS on successful parse + */ +ares_status_t ares_uri_parse(ares_uri_t **out, const char *uri); + +/*! Write URI object to a new string buffer. Requires at least the scheme + * and host to be set for this to succeed. + * + * \param[out] out Returned new URI string. Free with ares_free(). + * \param[in] uri Initialized URI object. + * \return ARES_SUCCESS on successful write. + */ +ares_status_t ares_uri_write(char **out, const ares_uri_t *uri); + +/*! Write URI object to an existing ares_buf_t object. Requires at least the + * scheme and host to be set for this to succeed. + * + * \param[in] uri Initialized URI object. + * \param[in,out] buf Destination buf object. + * \return ARES_SUCCESS on successful write. + */ +ares_status_t ares_uri_write_buf(const ares_uri_t *uri, ares_buf_t *buf); + +/*! @} */ + +#endif /* __ARES_URI_H */ diff --git a/deps/cares/src/tools/CMakeLists.txt b/deps/cares/src/tools/CMakeLists.txt index e23d0f23c781f7..c8c0041e54de81 100644 --- a/deps/cares/src/tools/CMakeLists.txt +++ b/deps/cares/src/tools/CMakeLists.txt @@ -11,6 +11,7 @@ IF (CARES_BUILD_TOOLS) PUBLIC "$" "$" "$" + "$" "$" "$" PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}" @@ -25,13 +26,18 @@ IF (CARES_BUILD_TOOLS) TARGET_COMPILE_DEFINITIONS (ahost PRIVATE HAVE_CONFIG_H=1 CARES_NO_DEPRECATED) TARGET_LINK_LIBRARIES (ahost PRIVATE ${PROJECT_NAME}) + + # Avoid "fatal error C1041: cannot open program database" due to multiple + # targets trying to use the same PDB. /FS does NOT resolve this issue. + SET_TARGET_PROPERTIES(ahost PROPERTIES COMPILE_PDB_NAME ahost.pdb) + IF (CARES_INSTALL) INSTALL (TARGETS ahost COMPONENT Tools ${TARGETS_INST_DEST}) ENDIF () # Build adig - ADD_EXECUTABLE (adig adig.c ${SAMPLESOURCES}) + ADD_EXECUTABLE (adig adig.c) # Don't build adig and ahost in parallel. This is to prevent a Windows MSVC # build error due to them both using the same source files. ADD_DEPENDENCIES(adig ahost) @@ -39,6 +45,7 @@ IF (CARES_BUILD_TOOLS) PUBLIC "$" "$" "$" + "$" "$" "$" PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}" @@ -53,6 +60,11 @@ IF (CARES_BUILD_TOOLS) TARGET_COMPILE_DEFINITIONS (adig PRIVATE HAVE_CONFIG_H=1 CARES_NO_DEPRECATED) TARGET_LINK_LIBRARIES (adig PRIVATE ${PROJECT_NAME}) + + # Avoid "fatal error C1041: cannot open program database" due to multiple + # targets trying to use the same PDB. /FS does NOT resolve this issue. + SET_TARGET_PROPERTIES(adig PROPERTIES COMPILE_PDB_NAME adig.pdb) + IF (CARES_INSTALL) INSTALL (TARGETS adig COMPONENT Tools ${TARGETS_INST_DEST}) ENDIF () diff --git a/deps/cares/src/tools/Makefile.am b/deps/cares/src/tools/Makefile.am index ba7a672f89faf5..439b40b192a880 100644 --- a/deps/cares/src/tools/Makefile.am +++ b/deps/cares/src/tools/Makefile.am @@ -16,6 +16,7 @@ AM_CPPFLAGS += -I$(top_builddir)/include \ -I$(top_builddir)/src/lib \ -I$(top_srcdir)/include \ -I$(top_srcdir)/src/lib \ + -I$(top_srcdir)/src/lib/include \ -DCARES_NO_DEPRECATED include Makefile.inc @@ -28,6 +29,6 @@ ahost_SOURCES = ahost.c $(SAMPLESOURCES) $(SAMPLEHEADERS) ahost_CFLAGS = $(AM_CFLAGS) ahost_CPPFLAGS = $(AM_CPPFLAGS) -adig_SOURCES = adig.c $(SAMPLESOURCES) $(SAMPLEHEADERS) +adig_SOURCES = adig.c adig_CFLAGS = $(AM_CFLAGS) adig_CPPFLAGS = $(AM_CPPFLAGS) diff --git a/deps/cares/src/tools/Makefile.in b/deps/cares/src/tools/Makefile.in index e1b661ec1d7cbf..ace5023f03cfb6 100644 --- a/deps/cares/src/tools/Makefile.in +++ b/deps/cares/src/tools/Makefile.in @@ -126,12 +126,7 @@ CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__EXEEXT_1 = ahost$(EXEEXT) adig$(EXEEXT) PROGRAMS = $(noinst_PROGRAMS) -am__dirstamp = $(am__leading_dot)dirstamp -am__objects_1 = adig-ares_getopt.$(OBJEXT) \ - ../lib/str/adig-ares_strcasecmp.$(OBJEXT) -am__objects_2 = -am_adig_OBJECTS = adig-adig.$(OBJEXT) $(am__objects_1) \ - $(am__objects_2) +am_adig_OBJECTS = adig-adig.$(OBJEXT) adig_OBJECTS = $(am_adig_OBJECTS) adig_LDADD = $(LDADD) am__DEPENDENCIES_1 = @@ -144,9 +139,9 @@ am__v_lt_1 = adig_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(adig_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ -am__objects_3 = ahost-ares_getopt.$(OBJEXT) \ - ../lib/str/ahost-ares_strcasecmp.$(OBJEXT) -am_ahost_OBJECTS = ahost-ahost.$(OBJEXT) $(am__objects_3) \ +am__objects_1 = ahost-ares_getopt.$(OBJEXT) +am__objects_2 = +am_ahost_OBJECTS = ahost-ahost.$(OBJEXT) $(am__objects_1) \ $(am__objects_2) ahost_OBJECTS = $(am_ahost_OBJECTS) ahost_LDADD = $(LDADD) @@ -170,9 +165,7 @@ am__v_at_1 = DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__maybe_remake_depfiles = depfiles -am__depfiles_remade = ../lib/str/$(DEPDIR)/adig-ares_strcasecmp.Po \ - ../lib/str/$(DEPDIR)/ahost-ares_strcasecmp.Po \ - ./$(DEPDIR)/adig-adig.Po ./$(DEPDIR)/adig-ares_getopt.Po \ +am__depfiles_remade = ./$(DEPDIR)/adig-adig.Po \ ./$(DEPDIR)/ahost-ahost.Po ./$(DEPDIR)/ahost-ares_getopt.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ @@ -230,7 +223,8 @@ AM_CFLAGS = @AM_CFLAGS@ # might possibly already be installed in the system. AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_builddir)/include \ -I$(top_builddir)/src/lib -I$(top_srcdir)/include \ - -I$(top_srcdir)/src/lib -DCARES_NO_DEPRECATED + -I$(top_srcdir)/src/lib -I$(top_srcdir)/src/lib/include \ + -DCARES_NO_DEPRECATED AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ @@ -396,12 +390,8 @@ EXTRA_DIST = CMakeLists.txt Makefile.inc # Copyright (C) The c-ares project and its contributors # SPDX-License-Identifier: MIT -SAMPLESOURCES = ares_getopt.c \ - ../lib/str/ares_strcasecmp.c - -SAMPLEHEADERS = ares_getopt.h \ - ../lib/str/ares_strcasecmp.h - +SAMPLESOURCES = ares_getopt.c +SAMPLEHEADERS = ares_getopt.h # We're not interested in code coverage of the test apps themselves, but need # to link with gcov if building with code coverage enabled @@ -409,7 +399,7 @@ LDADD = $(top_builddir)/src/lib/libcares.la $(CODE_COVERAGE_LIBS) ahost_SOURCES = ahost.c $(SAMPLESOURCES) $(SAMPLEHEADERS) ahost_CFLAGS = $(AM_CFLAGS) ahost_CPPFLAGS = $(AM_CPPFLAGS) -adig_SOURCES = adig.c $(SAMPLESOURCES) $(SAMPLEHEADERS) +adig_SOURCES = adig.c adig_CFLAGS = $(AM_CFLAGS) adig_CPPFLAGS = $(AM_CPPFLAGS) all: all-am @@ -450,21 +440,10 @@ $(am__aclocal_m4_deps): clean-noinstPROGRAMS: $(am__rm_f) $(noinst_PROGRAMS) test -z "$(EXEEXT)" || $(am__rm_f) $(noinst_PROGRAMS:$(EXEEXT)=) -../lib/str/$(am__dirstamp): - @$(MKDIR_P) ../lib/str - @: >>../lib/str/$(am__dirstamp) -../lib/str/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) ../lib/str/$(DEPDIR) - @: >>../lib/str/$(DEPDIR)/$(am__dirstamp) -../lib/str/adig-ares_strcasecmp.$(OBJEXT): ../lib/str/$(am__dirstamp) \ - ../lib/str/$(DEPDIR)/$(am__dirstamp) adig$(EXEEXT): $(adig_OBJECTS) $(adig_DEPENDENCIES) $(EXTRA_adig_DEPENDENCIES) @rm -f adig$(EXEEXT) $(AM_V_CCLD)$(adig_LINK) $(adig_OBJECTS) $(adig_LDADD) $(LIBS) -../lib/str/ahost-ares_strcasecmp.$(OBJEXT): \ - ../lib/str/$(am__dirstamp) \ - ../lib/str/$(DEPDIR)/$(am__dirstamp) ahost$(EXEEXT): $(ahost_OBJECTS) $(ahost_DEPENDENCIES) $(EXTRA_ahost_DEPENDENCIES) @rm -f ahost$(EXEEXT) @@ -472,15 +451,11 @@ ahost$(EXEEXT): $(ahost_OBJECTS) $(ahost_DEPENDENCIES) $(EXTRA_ahost_DEPENDENCIE mostlyclean-compile: -rm -f *.$(OBJEXT) - -rm -f ../lib/str/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@../lib/str/$(DEPDIR)/adig-ares_strcasecmp.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@../lib/str/$(DEPDIR)/ahost-ares_strcasecmp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adig-adig.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adig-ares_getopt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ahost-ahost.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ahost-ares_getopt.Po@am__quote@ # am--include-marker @@ -528,34 +503,6 @@ adig-adig.obj: adig.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o adig-adig.obj `if test -f 'adig.c'; then $(CYGPATH_W) 'adig.c'; else $(CYGPATH_W) '$(srcdir)/adig.c'; fi` -adig-ares_getopt.o: ares_getopt.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT adig-ares_getopt.o -MD -MP -MF $(DEPDIR)/adig-ares_getopt.Tpo -c -o adig-ares_getopt.o `test -f 'ares_getopt.c' || echo '$(srcdir)/'`ares_getopt.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/adig-ares_getopt.Tpo $(DEPDIR)/adig-ares_getopt.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_getopt.c' object='adig-ares_getopt.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o adig-ares_getopt.o `test -f 'ares_getopt.c' || echo '$(srcdir)/'`ares_getopt.c - -adig-ares_getopt.obj: ares_getopt.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT adig-ares_getopt.obj -MD -MP -MF $(DEPDIR)/adig-ares_getopt.Tpo -c -o adig-ares_getopt.obj `if test -f 'ares_getopt.c'; then $(CYGPATH_W) 'ares_getopt.c'; else $(CYGPATH_W) '$(srcdir)/ares_getopt.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/adig-ares_getopt.Tpo $(DEPDIR)/adig-ares_getopt.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_getopt.c' object='adig-ares_getopt.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o adig-ares_getopt.obj `if test -f 'ares_getopt.c'; then $(CYGPATH_W) 'ares_getopt.c'; else $(CYGPATH_W) '$(srcdir)/ares_getopt.c'; fi` - -../lib/str/adig-ares_strcasecmp.o: ../lib/str/ares_strcasecmp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT ../lib/str/adig-ares_strcasecmp.o -MD -MP -MF ../lib/str/$(DEPDIR)/adig-ares_strcasecmp.Tpo -c -o ../lib/str/adig-ares_strcasecmp.o `test -f '../lib/str/ares_strcasecmp.c' || echo '$(srcdir)/'`../lib/str/ares_strcasecmp.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/str/$(DEPDIR)/adig-ares_strcasecmp.Tpo ../lib/str/$(DEPDIR)/adig-ares_strcasecmp.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/str/ares_strcasecmp.c' object='../lib/str/adig-ares_strcasecmp.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o ../lib/str/adig-ares_strcasecmp.o `test -f '../lib/str/ares_strcasecmp.c' || echo '$(srcdir)/'`../lib/str/ares_strcasecmp.c - -../lib/str/adig-ares_strcasecmp.obj: ../lib/str/ares_strcasecmp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT ../lib/str/adig-ares_strcasecmp.obj -MD -MP -MF ../lib/str/$(DEPDIR)/adig-ares_strcasecmp.Tpo -c -o ../lib/str/adig-ares_strcasecmp.obj `if test -f '../lib/str/ares_strcasecmp.c'; then $(CYGPATH_W) '../lib/str/ares_strcasecmp.c'; else $(CYGPATH_W) '$(srcdir)/../lib/str/ares_strcasecmp.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/str/$(DEPDIR)/adig-ares_strcasecmp.Tpo ../lib/str/$(DEPDIR)/adig-ares_strcasecmp.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/str/ares_strcasecmp.c' object='../lib/str/adig-ares_strcasecmp.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o ../lib/str/adig-ares_strcasecmp.obj `if test -f '../lib/str/ares_strcasecmp.c'; then $(CYGPATH_W) '../lib/str/ares_strcasecmp.c'; else $(CYGPATH_W) '$(srcdir)/../lib/str/ares_strcasecmp.c'; fi` - ahost-ahost.o: ahost.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ahost-ahost.o -MD -MP -MF $(DEPDIR)/ahost-ahost.Tpo -c -o ahost-ahost.o `test -f 'ahost.c' || echo '$(srcdir)/'`ahost.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ahost-ahost.Tpo $(DEPDIR)/ahost-ahost.Po @@ -584,20 +531,6 @@ ahost-ares_getopt.obj: ares_getopt.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ahost-ares_getopt.obj `if test -f 'ares_getopt.c'; then $(CYGPATH_W) 'ares_getopt.c'; else $(CYGPATH_W) '$(srcdir)/ares_getopt.c'; fi` -../lib/str/ahost-ares_strcasecmp.o: ../lib/str/ares_strcasecmp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ../lib/str/ahost-ares_strcasecmp.o -MD -MP -MF ../lib/str/$(DEPDIR)/ahost-ares_strcasecmp.Tpo -c -o ../lib/str/ahost-ares_strcasecmp.o `test -f '../lib/str/ares_strcasecmp.c' || echo '$(srcdir)/'`../lib/str/ares_strcasecmp.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/str/$(DEPDIR)/ahost-ares_strcasecmp.Tpo ../lib/str/$(DEPDIR)/ahost-ares_strcasecmp.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/str/ares_strcasecmp.c' object='../lib/str/ahost-ares_strcasecmp.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ../lib/str/ahost-ares_strcasecmp.o `test -f '../lib/str/ares_strcasecmp.c' || echo '$(srcdir)/'`../lib/str/ares_strcasecmp.c - -../lib/str/ahost-ares_strcasecmp.obj: ../lib/str/ares_strcasecmp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ../lib/str/ahost-ares_strcasecmp.obj -MD -MP -MF ../lib/str/$(DEPDIR)/ahost-ares_strcasecmp.Tpo -c -o ../lib/str/ahost-ares_strcasecmp.obj `if test -f '../lib/str/ares_strcasecmp.c'; then $(CYGPATH_W) '../lib/str/ares_strcasecmp.c'; else $(CYGPATH_W) '$(srcdir)/../lib/str/ares_strcasecmp.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/str/$(DEPDIR)/ahost-ares_strcasecmp.Tpo ../lib/str/$(DEPDIR)/ahost-ares_strcasecmp.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/str/ares_strcasecmp.c' object='../lib/str/ahost-ares_strcasecmp.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ../lib/str/ahost-ares_strcasecmp.obj `if test -f '../lib/str/ares_strcasecmp.c'; then $(CYGPATH_W) '../lib/str/ares_strcasecmp.c'; else $(CYGPATH_W) '$(srcdir)/../lib/str/ares_strcasecmp.c'; fi` - mostlyclean-libtool: -rm -f *.lo @@ -718,8 +651,6 @@ clean-generic: distclean-generic: -$(am__rm_f) $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES) - -$(am__rm_f) ../lib/str/$(DEPDIR)/$(am__dirstamp) - -$(am__rm_f) ../lib/str/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -730,10 +661,7 @@ clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am - -rm -f ../lib/str/$(DEPDIR)/adig-ares_strcasecmp.Po - -rm -f ../lib/str/$(DEPDIR)/ahost-ares_strcasecmp.Po -rm -f ./$(DEPDIR)/adig-adig.Po - -rm -f ./$(DEPDIR)/adig-ares_getopt.Po -rm -f ./$(DEPDIR)/ahost-ahost.Po -rm -f ./$(DEPDIR)/ahost-ares_getopt.Po -rm -f Makefile @@ -781,10 +709,7 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -f ../lib/str/$(DEPDIR)/adig-ares_strcasecmp.Po - -rm -f ../lib/str/$(DEPDIR)/ahost-ares_strcasecmp.Po -rm -f ./$(DEPDIR)/adig-adig.Po - -rm -f ./$(DEPDIR)/adig-ares_getopt.Po -rm -f ./$(DEPDIR)/ahost-ahost.Po -rm -f ./$(DEPDIR)/ahost-ares_getopt.Po -rm -f Makefile diff --git a/deps/cares/src/tools/Makefile.inc b/deps/cares/src/tools/Makefile.inc index 4c6b6aaa978ce3..088c7d4e06206d 100644 --- a/deps/cares/src/tools/Makefile.inc +++ b/deps/cares/src/tools/Makefile.inc @@ -1,7 +1,5 @@ # Copyright (C) The c-ares project and its contributors # SPDX-License-Identifier: MIT -SAMPLESOURCES = ares_getopt.c \ - ../lib/str/ares_strcasecmp.c +SAMPLESOURCES = ares_getopt.c -SAMPLEHEADERS = ares_getopt.h \ - ../lib/str/ares_strcasecmp.h +SAMPLEHEADERS = ares_getopt.h diff --git a/deps/cares/src/tools/adig.c b/deps/cares/src/tools/adig.c index 8b2ad2e96a6219..fce210a8053578 100644 --- a/deps/cares/src/tools/adig.c +++ b/deps/cares/src/tools/adig.c @@ -43,226 +43,159 @@ #endif #include "ares.h" +#include "ares_array.h" +#include "ares_buf.h" #include "ares_dns.h" +#include "ares_getopt.h" +#include "ares_mem.h" +#include "ares_str.h" -#ifndef HAVE_STRDUP -# include "str/ares_str.h" -# define strdup(ptr) ares_strdup(ptr) -#endif +#include "limits.h" -#ifndef HAVE_STRCASECMP -# include "str/ares_strcasecmp.h" -# define strcasecmp(p1, p2) ares_strcasecmp(p1, p2) +#ifndef PATH_MAX +# define PATH_MAX 1024 #endif -#ifndef HAVE_STRNCASECMP -# include "str/ares_strcasecmp.h" -# define strncasecmp(p1, p2, n) ares_strncasecmp(p1, p2, n) -#endif - -#include "ares_getopt.h" +typedef struct { + unsigned short port; + size_t tries; + size_t ndots; + ares_bool_t tcp; + ares_bool_t ignore_tc; + char *search; + ares_bool_t do_search; + ares_bool_t aa_flag; + ares_bool_t ad_flag; + ares_bool_t cd_flag; + ares_bool_t rd_flag; + /* ares_bool_t do_flag; */ + ares_bool_t edns; + size_t udp_size; + ares_bool_t primary; + ares_bool_t aliases; + ares_bool_t stayopen; + ares_bool_t dns0x20; + ares_bool_t display_class; + ares_bool_t display_ttl; + ares_bool_t display_command; + ares_bool_t display_stats; + ares_bool_t display_query; + ares_bool_t display_question; + ares_bool_t display_answer; + ares_bool_t display_authority; + ares_bool_t display_additional; + ares_bool_t display_comments; +} dns_options_t; typedef struct { + dns_options_t opts; ares_bool_t is_help; + ares_bool_t no_rcfile; struct ares_options options; int optmask; ares_dns_class_t qclass; ares_dns_rec_type_t qtype; - int args_processed; + char *name; char *servers; char error[256]; } adig_config_t; -typedef struct { - const char *name; - int value; -} nv_t; - -static const nv_t configflags[] = { - { "usevc", ARES_FLAG_USEVC }, - { "primary", ARES_FLAG_PRIMARY }, - { "igntc", ARES_FLAG_IGNTC }, - { "norecurse", ARES_FLAG_NORECURSE }, - { "stayopen", ARES_FLAG_STAYOPEN }, - { "noaliases", ARES_FLAG_NOALIASES }, - { "edns", ARES_FLAG_EDNS }, - { "dns0x20", ARES_FLAG_DNS0x20 } +static adig_config_t global_config; + + +static const char *helpstr[] = { + "usage: adig [@server] [-c class] [-p port#] [-q name] [-t type] [-x addr]", + " [name] [type] [class] [queryopt...]", + "", + "@server: server ip address. May specify multiple in comma delimited " + "format.", + " may be specified in URI format", + "name: name of the resource record that is to be looked up", + "type: what type of query is required. e.g. - A, AAAA, MX, TXT, etc. If", + " no specified, A will be used.", + "class: Sets the query class, defaults to IN. May also be HS or CH.", + "", + "FLAGS", + "-c class: Sets the query class, defaults to IN. May also be HS or CH.", + "-h: Prints this help.", + "-p port: Sends query to a port other than 53. Often recommended to set", + " the port using @server instead.", + "-q name: Specifies the domain name to query. Useful to distinguish name", + " from other arguments", + "-r: Skip adigrc processing", + "-s: Server (alias for @server syntax), compatibility with old cmdline", + "-t type: Indicates resource record type to query. Useful to distinguish", + " type from other arguments", + "-x addr: Simplified reverse lookups. Sets the type to PTR and forms a", + " valid in-arpa query string", + "", + "QUERY OPTIONS", + "+[no]aaonly: Sets the aa flag in the query. Default is off.", + "+[no]aaflag: Alias for +[no]aaonly", + "+[no]additional: Toggles printing the additional section. On by default.", + "+[no]adflag: Sets the ad (authentic data) bit in the query. Default is", + " off.", + "+[no]aliases: Whether or not to honor the HOSTALIASES file. Default is", + " on.", + "+[no]all: Toggles all of +[no]cmd, +[no]stats, +[no]question,", + " +[no]answer, +[no]authority, +[no]additional, " + "+[no]comments", + "+[no]answer: Toggles printing the answer. On by default.", + "+[no]authority: Toggles printing the authority. On by default.", + "+bufsize=#: UDP EDNS 0 packet size allowed. Defaults to 1232.", + "+[no]cdflag: Sets the CD (checking disabled) bit in the query. Default", + " is off.", + "+[no]class: Display the class when printing the record. On by " + "default.", + "+[no]cmd: Toggles printing the command requested. On by default.", + "+[no]comments: Toggles printing the comments. On by default", + "+[no]defname: Alias for +[no]search", + "+domain=somename: Sets the search list to a single domain.", + "+[no]dns0x20: Whether or not to use DNS 0x20 case randomization when", + " sending queries. Default is off.", + "+[no]edns[=#]: Enable or disable EDNS. Only allows a value of 0 if", + " specified. Default is to enable EDNS.", + "+[no]ignore: Ignore truncation on UDP, by default retried on TCP.", + "+[no]keepopen: Whether or not the server connection should be " + "persistent.", + " Default is off.", + "+ndots=#: Sets the number of dots that must appear before being", + " considered absolute. Defaults to 1.", + "+[no]primary: Whether or not to only use a single server if more than " + "one", + " server is available. Defaults to using all servers.", + "+[no]qr: Toggles printing the request query. Off by default.", + "+[no]question: Toggles printing the question. On by default.", + "+[no]recurse: Toggles the RD (Recursion Desired) bit. On by default.", + "+retry=#: Same as +tries but does not include the initial attempt.", + "+[no]search: To use or not use the search list. Search list is not " + "used", + " by default.", + "+[no]stats: Toggles printing the statistics. On by default.", + "+[no]tcp: Whether to use TCP when querying name servers. Default is", + " UDP.", + "+tries=#: Number of query tries. Defaults to 3.", + "+[no]ttlid: Display the TTL when printing the record. On by default.", + "+[no]vc: Alias for +[no]tcp", + "", + NULL }; -static const size_t nconfigflags = sizeof(configflags) / sizeof(*configflags); - -static int lookup_flag(const nv_t *nv, size_t num_nv, const char *name) -{ - size_t i; - - if (name == NULL) { - return 0; - } - - for (i = 0; i < num_nv; i++) { - if (strcasecmp(nv[i].name, name) == 0) { - return nv[i].value; - } - } - - return 0; -} -static void free_config(adig_config_t *config) +static void free_config(void) { - free(config->servers); - memset(config, 0, sizeof(*config)); + free(global_config.servers); + free(global_config.name); + free(global_config.opts.search); + memset(&global_config, 0, sizeof(global_config)); } static void print_help(void) { - /* Split due to maximum c89 string literal of 509 bytes */ + size_t i; printf("adig version %s\n\n", ares_version(NULL)); - printf( - "usage: adig [-h] [-d] [-f flag] [[-s server] ...] [-T|U port] [-c class]\n" - " [-t type] name ...\n\n"); - printf(" -h : Display this help and exit.\n"); - printf(" -d : Print some extra debugging output.\n"); - printf( - " -f flag : Add a behavior control flag. May be specified more than " - "once\n" - " to add additional flags. Possible values are:\n" - " igntc - do not retry a truncated query as TCP, just\n" - " return the truncated answer\n" - " noaliases - don't honor the HOSTALIASES environment\n" - " variable\n"); - printf(" norecurse - don't query upstream servers recursively\n" - " primary - use the first server\n" - " stayopen - don't close the communication sockets\n" - " usevc - use TCP only\n" - " edns - use EDNS\n" - " dns0x20 - enable DNS 0x20 support\n"); - printf( - " -s server : Connect to the specified DNS server, instead of the\n" - " system's default one(s). Servers are tried in round-robin,\n" - " if the previous one failed.\n"); - printf(" -T port : Connect to the specified TCP port of DNS server.\n"); - printf(" -U port : Connect to the specified UDP port of DNS server.\n"); - printf(" -c class : Set the query class. Possible values for class are:\n" - " ANY, CHAOS, HS and IN (default)\n"); - printf( - " -t type : Query records of the specified type. Possible values for\n" - " type are:\n" - " A (default), AAAA, ANY, CNAME, HINFO, MX, NAPTR, NS, PTR,\n" - " SOA, SRV, TXT, TLSA, URI, CAA, SVCB, HTTPS\n\n"); -} - -static ares_bool_t read_cmdline(int argc, const char * const *argv, - adig_config_t *config) -{ - ares_getopt_state_t state; - int c; - - ares_getopt_init(&state, argc, argv); - state.opterr = 0; - - while ((c = ares_getopt(&state, "dh?f:s:c:t:T:U:")) != -1) { - int f; - - switch (c) { - case 'd': -#ifdef WATT32 - dbug_init(); -#endif - break; - - case 'h': - config->is_help = ARES_TRUE; - return ARES_TRUE; - - case 'f': - f = lookup_flag(configflags, nconfigflags, state.optarg); - if (f == 0) { - snprintf(config->error, sizeof(config->error), "flag %s unknown", - state.optarg); - } - - config->options.flags |= f; - config->optmask |= ARES_OPT_FLAGS; - break; - - case 's': - if (state.optarg == NULL) { - snprintf(config->error, sizeof(config->error), "%s", - "missing servers"); - return ARES_FALSE; - } - if (config->servers) { - free(config->servers); - } - config->servers = strdup(state.optarg); - break; - - case 'c': - if (!ares_dns_class_fromstr(&config->qclass, state.optarg)) { - snprintf(config->error, sizeof(config->error), - "unrecognized class %s", state.optarg); - return ARES_FALSE; - } - break; - - case 't': - if (!ares_dns_rec_type_fromstr(&config->qtype, state.optarg)) { - snprintf(config->error, sizeof(config->error), "unrecognized type %s", - state.optarg); - return ARES_FALSE; - } - break; - - case 'T': - { - /* Set the TCP port number. */ - long port = strtol(state.optarg, NULL, 0); - - if (port <= 0 || port > 65535) { - snprintf(config->error, sizeof(config->error), - "invalid port number"); - return ARES_FALSE; - } - config->options.tcp_port = (unsigned short)port; - config->options.flags |= ARES_FLAG_USEVC; - config->optmask |= ARES_OPT_TCP_PORT; - } - break; - - case 'U': - { - /* Set the TCP port number. */ - long port = strtol(state.optarg, NULL, 0); - - if (port <= 0 || port > 65535) { - snprintf(config->error, sizeof(config->error), - "invalid port number"); - return ARES_FALSE; - } - config->options.udp_port = (unsigned short)port; - config->options.flags |= ARES_FLAG_USEVC; - config->optmask |= ARES_OPT_UDP_PORT; - } - break; - - case ':': - snprintf(config->error, sizeof(config->error), - "%c requires an argument", state.optopt); - return ARES_FALSE; - - default: - snprintf(config->error, sizeof(config->error), - "unrecognized option: %c", state.optopt); - return ARES_FALSE; - } + for (i = 0; helpstr[i] != NULL; i++) { + printf("%s\n", helpstr[i]); } - - config->args_processed = state.optind; - if (config->args_processed >= argc) { - snprintf(config->error, sizeof(config->error), "missing query name"); - return ARES_FALSE; - } - return ARES_TRUE; } static void print_flags(ares_dns_flags_t flags) @@ -308,7 +241,11 @@ static void print_header(const ares_dns_record_t *dnsrec) static void print_question(const ares_dns_record_t *dnsrec) { size_t i; - printf(";; QUESTION SECTION:\n"); + + if (global_config.opts.display_comments) { + printf(";; QUESTION SECTION:\n"); + } + for (i = 0; i < ares_dns_record_query_cnt(dnsrec); i++) { const char *name; ares_dns_rec_type_t qtype; @@ -329,10 +266,17 @@ static void print_question(const ares_dns_record_t *dnsrec) if (len + 1 < 16) { printf("\t"); } - printf("%s\t%s\n", ares_dns_class_tostr(qclass), - ares_dns_rec_type_tostr(qtype)); + + if (global_config.opts.display_class) { + printf("%s\t", ares_dns_class_tostr(qclass)); + } + + printf("%s\n", ares_dns_rec_type_tostr(qtype)); + } + + if (global_config.opts.display_comments) { + printf("\n"); } - printf("\n"); } static void print_opt_none(const unsigned char *val, size_t val_len) @@ -667,9 +611,15 @@ static void print_rr(const ares_dns_rr_t *rr) printf("\t"); } - printf("%u\t%s\t%s\t", ares_dns_rr_get_ttl(rr), - ares_dns_class_tostr(ares_dns_rr_get_class(rr)), - ares_dns_rec_type_tostr(rtype)); + if (global_config.opts.display_ttl) { + printf("%u\t", ares_dns_rr_get_ttl(rr)); + } + + if (global_config.opts.display_class) { + printf("%s\t", ares_dns_class_tostr(ares_dns_rr_get_class(rr))); + } + + printf("%s\t", ares_dns_rec_type_tostr(rtype)); /* Output params here */ for (i = 0; i < keys_cnt; i++) { @@ -718,12 +668,12 @@ static void print_rr(const ares_dns_rr_t *rr) printf("\n"); } -static const ares_dns_rr_t *has_opt(ares_dns_record_t *dnsrec, - ares_dns_section_t section) +static const ares_dns_rr_t *has_opt(const ares_dns_record_t *dnsrec, + ares_dns_section_t section) { size_t i; for (i = 0; i < ares_dns_record_rr_cnt(dnsrec, section); i++) { - const ares_dns_rr_t *rr = ares_dns_record_rr_get(dnsrec, section, i); + const ares_dns_rr_t *rr = ares_dns_record_rr_get_const(dnsrec, section, i); if (ares_dns_rr_get_type(rr) == ARES_REC_TYPE_OPT) { return rr; } @@ -731,7 +681,8 @@ static const ares_dns_rr_t *has_opt(ares_dns_record_t *dnsrec, return NULL; } -static void print_section(ares_dns_record_t *dnsrec, ares_dns_section_t section) +static void print_section(const ares_dns_record_t *dnsrec, + ares_dns_section_t section) { size_t i; @@ -741,18 +692,22 @@ static void print_section(ares_dns_record_t *dnsrec, ares_dns_section_t section) return; } - printf(";; %s SECTION:\n", ares_dns_section_tostr(section)); + if (global_config.opts.display_comments) { + printf(";; %s SECTION:\n", ares_dns_section_tostr(section)); + } for (i = 0; i < ares_dns_record_rr_cnt(dnsrec, section); i++) { - const ares_dns_rr_t *rr = ares_dns_record_rr_get(dnsrec, section, i); + const ares_dns_rr_t *rr = ares_dns_record_rr_get_const(dnsrec, section, i); if (ares_dns_rr_get_type(rr) == ARES_REC_TYPE_OPT) { continue; } print_rr(rr); } - printf("\n"); + if (global_config.opts.display_comments) { + printf("\n"); + } } -static void print_opt_psuedosection(ares_dns_record_t *dnsrec) +static void print_opt_psuedosection(const ares_dns_record_t *dnsrec) { const ares_dns_rr_t *rr = has_opt(dnsrec, ARES_SECTION_ADDITIONAL); const unsigned char *cookie = NULL; @@ -767,7 +722,6 @@ static void print_opt_psuedosection(ares_dns_record_t *dnsrec) cookie = NULL; } - printf(";; OPT PSEUDOSECTION:\n"); printf("; EDNS: version: %u, flags: %u; udp: %u\n", (unsigned int)ares_dns_rr_get_u8(rr, ARES_RR_OPT_VERSION), @@ -781,60 +735,82 @@ static void print_opt_psuedosection(ares_dns_record_t *dnsrec) } } -static void callback(void *arg, int status, int timeouts, unsigned char *abuf, - int alen) +static void print_record(const ares_dns_record_t *dnsrec) { - ares_dns_record_t *dnsrec = NULL; - (void)arg; - (void)timeouts; + if (global_config.opts.display_comments) { + print_header(dnsrec); + print_opt_psuedosection(dnsrec); + } - /* We got a "Server status" */ - if (status >= ARES_SUCCESS && status <= ARES_EREFUSED) { - printf(";; Got answer:"); - } else { - printf(";;"); + if (global_config.opts.display_question) { + print_question(dnsrec); } - if (status != ARES_SUCCESS) { - printf(" %s", ares_strerror(status)); + if (global_config.opts.display_answer) { + print_section(dnsrec, ARES_SECTION_ANSWER); } - printf("\n"); - if (abuf == NULL || alen == 0) { - return; + if (global_config.opts.display_additional) { + print_section(dnsrec, ARES_SECTION_ADDITIONAL); } - status = (int)ares_dns_parse(abuf, (size_t)alen, 0, &dnsrec); - if (status != ARES_SUCCESS) { - fprintf(stderr, ";; FAILED TO PARSE DNS PACKET: %s\n", - ares_strerror(status)); - return; + if (global_config.opts.display_authority) { + print_section(dnsrec, ARES_SECTION_AUTHORITY); } - print_header(dnsrec); - print_opt_psuedosection(dnsrec); - print_question(dnsrec); - print_section(dnsrec, ARES_SECTION_ANSWER); - print_section(dnsrec, ARES_SECTION_ADDITIONAL); - print_section(dnsrec, ARES_SECTION_AUTHORITY); + if (global_config.opts.display_stats) { + unsigned char *abuf = NULL; + size_t alen = 0; + ares_dns_write(dnsrec, &abuf, &alen); + printf(";; MSG SIZE rcvd: %d\n\n", (int)alen); + ares_free_string(abuf); + } +} - printf(";; MSG SIZE rcvd: %d\n\n", alen); - ares_dns_record_destroy(dnsrec); +static void callback(void *arg, ares_status_t status, size_t timeouts, + const ares_dns_record_t *dnsrec) +{ + (void)arg; + (void)timeouts; + + if (global_config.opts.display_comments) { + /* We got a "Server status" */ + if (status >= ARES_SUCCESS && status <= ARES_EREFUSED) { + printf(";; Got answer:"); + } else { + printf(";;"); + } + if (status != ARES_SUCCESS) { + printf(" %s", ares_strerror((int)status)); + } + printf("\n"); + } + + print_record(dnsrec); } -static ares_status_t enqueue_query(ares_channel_t *channel, - const adig_config_t *config, - const char *name) +static ares_status_t enqueue_query(ares_channel_t *channel) { ares_dns_record_t *dnsrec = NULL; ares_dns_rr_t *rr = NULL; ares_status_t status; - unsigned char *buf = NULL; - size_t buf_len = 0; unsigned short flags = 0; char *nametemp = NULL; + const char *name = global_config.name; + + if (global_config.opts.aa_flag) { + flags |= ARES_FLAG_AA; + } + + if (global_config.opts.ad_flag) { + flags |= ARES_FLAG_AD; + } + + if (global_config.opts.cd_flag) { + flags |= ARES_FLAG_CD; + } - if (!(config->options.flags & ARES_FLAG_NORECURSE)) { + if (global_config.opts.rd_flag) { flags |= ARES_FLAG_RD; } @@ -846,7 +822,7 @@ static ares_status_t enqueue_query(ares_channel_t *channel, /* If it is a PTR record, convert from ip address into in-arpa form * automatically */ - if (config->qtype == ARES_REC_TYPE_PTR) { + if (global_config.qtype == ARES_REC_TYPE_PTR) { struct ares_addr addr; size_t len; addr.family = AF_UNSPEC; @@ -857,27 +833,33 @@ static ares_status_t enqueue_query(ares_channel_t *channel, } } - status = - ares_dns_record_query_add(dnsrec, name, config->qtype, config->qclass); + status = ares_dns_record_query_add(dnsrec, name, global_config.qtype, + global_config.qclass); if (status != ARES_SUCCESS) { goto done; } - status = ares_dns_record_rr_add(&rr, dnsrec, ARES_SECTION_ADDITIONAL, "", - ARES_REC_TYPE_OPT, ARES_CLASS_IN, 0); - if (status != ARES_SUCCESS) { - goto done; + if (global_config.opts.edns) { + status = ares_dns_record_rr_add(&rr, dnsrec, ARES_SECTION_ADDITIONAL, "", + ARES_REC_TYPE_OPT, ARES_CLASS_IN, 0); + if (status != ARES_SUCCESS) { + goto done; + } + ares_dns_rr_set_u16(rr, ARES_RR_OPT_UDP_SIZE, + (unsigned short)global_config.opts.udp_size); + ares_dns_rr_set_u8(rr, ARES_RR_OPT_VERSION, 0); } - ares_dns_rr_set_u16(rr, ARES_RR_OPT_UDP_SIZE, 1280); - ares_dns_rr_set_u8(rr, ARES_RR_OPT_VERSION, 0); - status = ares_dns_write(dnsrec, &buf, &buf_len); - if (status != ARES_SUCCESS) { - goto done; + if (global_config.opts.display_query) { + printf(";; Sending:\n"); + print_record(dnsrec); } - ares_send(channel, buf, (int)buf_len, callback, NULL); - ares_free_string(buf); + if (global_config.opts.do_search) { + status = ares_search_dnsrec(channel, dnsrec, callback, NULL); + } else { + status = ares_send_dnsrec(channel, dnsrec, callback, NULL, NULL); + } done: ares_free_string(nametemp); @@ -924,12 +906,584 @@ static int event_loop(ares_channel_t *channel) return 0; } +typedef enum { + OPT_TYPE_BOOL, + OPT_TYPE_STRING, + OPT_TYPE_SIZE_T, + OPT_TYPE_U16, + OPT_TYPE_FUNC +} opt_type_t; + +/* Callback called with OPT_TYPE_FUNC when processing options. + * \param[in] prefix prefix character for option + * \param[in] name name for option + * \param[in] is_true ARES_TRUE unless option was prefixed with 'no' + * \param[in] value value for option + * \return ARES_TRUE on success, ARES_FALSE on failure. Should fill in + * global_config.error on error */ +typedef ares_bool_t (*dig_opt_cb_t)(char prefix, const char *name, + ares_bool_t is_true, const char *value); + +static ares_bool_t opt_class_cb(char prefix, const char *name, + ares_bool_t is_true, const char *value) +{ + (void)prefix; + (void)name; + (void)is_true; + + if (!ares_dns_class_fromstr(&global_config.qclass, value)) { + snprintf(global_config.error, sizeof(global_config.error), + "unrecognized class %s", value); + return ARES_FALSE; + } + + return ARES_TRUE; +} + +static ares_bool_t opt_type_cb(char prefix, const char *name, + ares_bool_t is_true, const char *value) +{ + (void)prefix; + (void)name; + (void)is_true; + + if (!ares_dns_rec_type_fromstr(&global_config.qtype, value)) { + snprintf(global_config.error, sizeof(global_config.error), + "unrecognized record type %s", value); + return ARES_FALSE; + } + return ARES_TRUE; +} + +static ares_bool_t opt_ptr_cb(char prefix, const char *name, + ares_bool_t is_true, const char *value) +{ + (void)prefix; + (void)name; + (void)is_true; + global_config.qtype = ARES_REC_TYPE_PTR; + ares_free(global_config.name); + global_config.name = strdup(value); + return ARES_TRUE; +} + +static ares_bool_t opt_all_cb(char prefix, const char *name, + ares_bool_t is_true, const char *value) +{ + (void)prefix; + (void)name; + (void)value; + + global_config.opts.display_command = is_true; + global_config.opts.display_stats = is_true; + global_config.opts.display_question = is_true; + global_config.opts.display_answer = is_true; + global_config.opts.display_authority = is_true; + global_config.opts.display_additional = is_true; + global_config.opts.display_comments = is_true; + return ARES_TRUE; +} + +static ares_bool_t opt_edns_cb(char prefix, const char *name, + ares_bool_t is_true, const char *value) +{ + (void)prefix; + (void)name; + + global_config.opts.edns = is_true; + if (is_true && value != NULL && atoi(value) > 0) { + snprintf(global_config.error, sizeof(global_config.error), + "edns 0 only supported"); + return ARES_FALSE; + } + return ARES_TRUE; +} + +static ares_bool_t opt_retry_cb(char prefix, const char *name, + ares_bool_t is_true, const char *value) +{ + (void)prefix; + (void)name; + (void)is_true; + + if (!ares_str_isnum(value)) { + snprintf(global_config.error, sizeof(global_config.error), + "value not numeric"); + return ARES_FALSE; + } + + global_config.opts.tries = strtoul(value, NULL, 10) + 1; + return ARES_TRUE; +} + +static ares_bool_t opt_dig_bare_cb(char prefix, const char *name, + ares_bool_t is_true, const char *value) +{ + (void)prefix; + (void)name; + (void)is_true; + + /* Handle @servers */ + if (*value == '@') { + free(global_config.servers); + global_config.servers = strdup(value + 1); + return ARES_TRUE; + } + + /* Make sure we don't pass options */ + if (*value == '-' || *value == '+') { + snprintf(global_config.error, sizeof(global_config.error), + "unrecognized argument %s", value); + return ARES_FALSE; + } + + /* See if it is a DNS class */ + if (ares_dns_class_fromstr(&global_config.qclass, value)) { + return ARES_TRUE; + } + + /* See if it is a DNS record type */ + if (ares_dns_rec_type_fromstr(&global_config.qtype, value)) { + return ARES_TRUE; + } + + /* See if it is a domain name */ + if (ares_is_hostname(value)) { + free(global_config.name); + global_config.name = strdup(value); + return ARES_TRUE; + } + + snprintf(global_config.error, sizeof(global_config.error), + "unrecognized argument %s", value); + return ARES_FALSE; +} + +static const struct { + /* Prefix for option. If 0 then this param is a non-option and type must be + * OPT_TYPE_FUNC where the entire value for the param will be passed */ + char prefix; + /* Name of option. If null, there is none and the value is expected to be + * immediately after the prefix character */ + const char *name; + /* Separator between key and value. If 0 then uses the next argument as the + * value, otherwise splits on the separator. BOOL types won't ever use a + * separator and is ignored.*/ + char separator; + /* Type of parameter passed in. If it is OPT_TYPE_FUNC, then it calls the + * dig_opt_cb_t callback */ + opt_type_t type; + /* Pointer to argument to fill in */ + void *opt; + /* Callback if OPT_TYPE_FUNC */ + dig_opt_cb_t cb; +} dig_options[] = { + /* -4 (ipv4 only) */ + /* -6 (ipv6 only) */ + /* { '-', "b", 0, OPT_TYPE_FUNC, NULL, opt_bind_address_cb }, + */ + { '-', "c", 0, OPT_TYPE_FUNC, NULL, opt_class_cb }, + /* -f file */ + { '-', "h", 0, OPT_TYPE_BOOL, &global_config.is_help, NULL }, + /* -k keyfile */ + /* -m (memory usage debugging) */ + { '-', "p", 0, OPT_TYPE_U16, &global_config.opts.port, NULL }, + { '-', "q", 0, OPT_TYPE_STRING, &global_config.name, NULL }, + { '-', "r", 0, OPT_TYPE_BOOL, &global_config.no_rcfile, NULL }, + { '-', "s", 0, OPT_TYPE_STRING, &global_config.servers, NULL }, + { '-', "t", 0, OPT_TYPE_FUNC, NULL, opt_type_cb }, + /* -u (print microseconds instead of milliseconds) */ + { '-', "x", 0, OPT_TYPE_FUNC, NULL, opt_ptr_cb }, + /* -y [hmac:]keynam:secret */ + { '+', "aaflag", 0, OPT_TYPE_BOOL, &global_config.opts.aa_flag, NULL }, + { '+', "aaonly", 0, OPT_TYPE_BOOL, &global_config.opts.aa_flag, NULL }, + { '+', "additional", 0, OPT_TYPE_BOOL, &global_config.opts.display_additional, + NULL }, + { '+', "adflag", 0, OPT_TYPE_BOOL, &global_config.opts.ad_flag, NULL }, + { '+', "aliases", 0, OPT_TYPE_BOOL, &global_config.opts.aliases, NULL }, + { '+', "all", '=', OPT_TYPE_FUNC, NULL, opt_all_cb }, + { '+', "answer", 0, OPT_TYPE_BOOL, &global_config.opts.display_answer, NULL }, + { '+', "authority", 0, OPT_TYPE_BOOL, &global_config.opts.display_authority, + NULL }, + { '+', "bufsize", '=', OPT_TYPE_SIZE_T, &global_config.opts.udp_size, NULL }, + { '+', "cdflag", 0, OPT_TYPE_BOOL, &global_config.opts.cd_flag, NULL }, + { '+', "class", 0, OPT_TYPE_BOOL, &global_config.opts.display_class, NULL }, + { '+', "cmd", 0, OPT_TYPE_BOOL, &global_config.opts.display_command, NULL }, + { '+', "comments", 0, OPT_TYPE_BOOL, &global_config.opts.display_comments, + NULL }, + { '+', "defname", 0, OPT_TYPE_BOOL, &global_config.opts.do_search, NULL }, + { '+', "dns0x20", 0, OPT_TYPE_BOOL, &global_config.opts.dns0x20, NULL }, + { '+', "domain", '=', OPT_TYPE_STRING, &global_config.opts.search, NULL }, + { '+', "edns", '=', OPT_TYPE_FUNC, NULL, opt_edns_cb }, + { '+', "keepopen", 0, OPT_TYPE_BOOL, &global_config.opts.stayopen, NULL }, + { '+', "ignore", 0, OPT_TYPE_BOOL, &global_config.opts.ignore_tc, NULL }, + { '+', "ndots", '=', OPT_TYPE_SIZE_T, &global_config.opts.ndots, NULL }, + { '+', "primary", 0, OPT_TYPE_BOOL, &global_config.opts.primary, NULL }, + { '+', "qr", 0, OPT_TYPE_BOOL, &global_config.opts.display_query, NULL }, + { '+', "question", 0, OPT_TYPE_BOOL, &global_config.opts.display_question, + NULL }, + { '+', "recurse", 0, OPT_TYPE_BOOL, &global_config.opts.rd_flag, NULL }, + { '+', "retry", '=', OPT_TYPE_FUNC, NULL, opt_retry_cb }, + { '+', "search", 0, OPT_TYPE_BOOL, &global_config.opts.do_search, NULL }, + { '+', "stats", 0, OPT_TYPE_BOOL, &global_config.opts.display_stats, NULL }, + { '+', "tcp", 0, OPT_TYPE_BOOL, &global_config.opts.tcp, NULL }, + { '+', "tries", '=', OPT_TYPE_SIZE_T, &global_config.opts.tries, NULL }, + { '+', "ttlid", 0, OPT_TYPE_BOOL, &global_config.opts.display_ttl, NULL }, + { '+', "vc", 0, OPT_TYPE_BOOL, &global_config.opts.tcp, NULL }, + { 0, NULL, 0, OPT_TYPE_FUNC, NULL, opt_dig_bare_cb }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +static ares_bool_t read_cmdline(int argc, const char * const *argv, + int start_idx) +{ + int arg; + size_t opt; + + for (arg = start_idx; arg < argc; arg++) { + ares_bool_t option_handled = ARES_FALSE; + + for (opt = 0; !option_handled && + (dig_options[opt].opt != NULL || dig_options[opt].cb != NULL); + opt++) { + ares_bool_t is_true = ARES_TRUE; + const char *value = NULL; + const char *nameptr = NULL; + size_t namelen; + + /* Match prefix character */ + if (dig_options[opt].prefix != 0 && + dig_options[opt].prefix != *(argv[arg])) { + continue; + } + + nameptr = argv[arg]; + + /* skip prefix */ + if (dig_options[opt].prefix != 0) { + nameptr++; + } + + /* Negated option if it has a 'no' prefix */ + if (ares_streq_max(nameptr, "no", 2)) { + is_true = ARES_FALSE; + nameptr += 2; + } + + if (dig_options[opt].separator != 0) { + const char *ptr = strchr(nameptr, dig_options[opt].separator); + if (ptr == NULL) { + namelen = ares_strlen(nameptr); + } else { + namelen = (size_t)(ptr - nameptr); + value = ptr + 1; + } + } else { + namelen = ares_strlen(nameptr); + } + + /* Match name */ + if (dig_options[opt].name != NULL && + !ares_streq_max(nameptr, dig_options[opt].name, namelen)) { + continue; + } + + if (dig_options[opt].name == NULL) { + value = nameptr; + } + + /* We need another argument for the value */ + if (dig_options[opt].type != OPT_TYPE_BOOL && + dig_options[opt].prefix != 0 && dig_options[opt].separator == 0) { + if (arg == argc - 1) { + snprintf(global_config.error, sizeof(global_config.error), + "insufficient arguments for %c%s", dig_options[opt].prefix, + dig_options[opt].name); + return ARES_FALSE; + } + arg++; + value = argv[arg]; + } + + switch (dig_options[opt].type) { + case OPT_TYPE_BOOL: + { + ares_bool_t *b = dig_options[opt].opt; + if (b == NULL) { + snprintf(global_config.error, sizeof(global_config.error), + "invalid use for %c%s", dig_options[opt].prefix, + dig_options[opt].name); + return ARES_FALSE; + } + *b = is_true; + } + break; + case OPT_TYPE_STRING: + { + char **str = dig_options[opt].opt; + if (str == NULL) { + snprintf(global_config.error, sizeof(global_config.error), + "invalid use for %c%s", dig_options[opt].prefix, + dig_options[opt].name); + return ARES_FALSE; + } + if (value == NULL) { + snprintf(global_config.error, sizeof(global_config.error), + "missing value for %c%s", dig_options[opt].prefix, + dig_options[opt].name); + return ARES_FALSE; + } + if (*str != NULL) { + free(*str); + } + *str = strdup(value); + break; + } + case OPT_TYPE_SIZE_T: + { + size_t *s = dig_options[opt].opt; + if (s == NULL) { + snprintf(global_config.error, sizeof(global_config.error), + "invalid use for %c%s", dig_options[opt].prefix, + dig_options[opt].name); + return ARES_FALSE; + } + if (value == NULL) { + snprintf(global_config.error, sizeof(global_config.error), + "missing value for %c%s", dig_options[opt].prefix, + dig_options[opt].name); + return ARES_FALSE; + } + if (!ares_str_isnum(value)) { + snprintf(global_config.error, sizeof(global_config.error), + "%c%s is not a numeric value", dig_options[opt].prefix, + dig_options[opt].name); + return ARES_FALSE; + } + *s = strtoul(value, NULL, 10); + break; + } + case OPT_TYPE_U16: + { + unsigned short *s = dig_options[opt].opt; + if (s == NULL) { + snprintf(global_config.error, sizeof(global_config.error), + "invalid use for %c%s", dig_options[opt].prefix, + dig_options[opt].name); + return ARES_FALSE; + } + if (value == NULL) { + snprintf(global_config.error, sizeof(global_config.error), + "missing value for %c%s", dig_options[opt].prefix, + dig_options[opt].name); + return ARES_FALSE; + } + if (!ares_str_isnum(value)) { + snprintf(global_config.error, sizeof(global_config.error), + "%c%s is not a numeric value", dig_options[opt].prefix, + dig_options[opt].name); + return ARES_FALSE; + } + *s = (unsigned short)strtoul(value, NULL, 10); + break; + } + case OPT_TYPE_FUNC: + if (dig_options[opt].cb == NULL) { + snprintf(global_config.error, sizeof(global_config.error), + "missing callback"); + return ARES_FALSE; + } + if (!dig_options[opt].cb(dig_options[opt].prefix, + dig_options[opt].name, is_true, value)) { + return ARES_FALSE; + } + break; + } + option_handled = ARES_TRUE; + } + + if (!option_handled) { + snprintf(global_config.error, sizeof(global_config.error), + "unrecognized option %s", argv[arg]); + return ARES_FALSE; + } + } + + return ARES_TRUE; +} + +static ares_bool_t read_rcfile(void) +{ + char configdir[PATH_MAX]; + unsigned int cdlen = 0; + +#if !defined(WIN32) +# if !defined(__APPLE__) + char *configdir_xdg; +# endif + char *homedir; +#endif + + char rcfile[PATH_MAX]; + unsigned int rclen; + + size_t rcargc; + char **rcargv; + ares_buf_t *rcbuf; + ares_status_t rcstatus; + +#if defined(WIN32) + cdlen = (unsigned int)snprintf(configdir, sizeof(configdir), "%s/%s", + getenv("APPDATA"), "c-ares"); + +#elif defined(__APPLE__) + homedir = getenv("HOME"); + if (homedir != NULL) { + cdlen = (unsigned int)snprintf(configdir, sizeof(configdir), "%s/%s/%s/%s", + homedir, "Library", "Application Support", + "c-ares"); + } + +#else + configdir_xdg = getenv("XDG_CONFIG_HOME"); + + if (configdir_xdg == NULL) { + homedir = getenv("HOME"); + if (homedir != NULL) { + cdlen = (unsigned int)snprintf(configdir, sizeof(configdir), "%s/%s", + homedir, ".config"); + } + } else { + cdlen = + (unsigned int)snprintf(configdir, sizeof(configdir), "%s", configdir_xdg); + } + +#endif + + DEBUGF(fprintf(stderr, "read_cmdline() configdir: %s\n", configdir)); + + if (cdlen == 0 || cdlen > sizeof(configdir)) { + DEBUGF( + fprintf(stderr, "read_cmdline() skipping rcfile parsing on directory\n")); + return ARES_TRUE; + } + + rclen = + (unsigned int)snprintf(rcfile, sizeof(rcfile), "%s/adigrc", configdir); + + if (rclen > sizeof(rcfile)) { + DEBUGF(fprintf(stderr, "read_cmdline() skipping rcfile parsing on file\n")); + return ARES_TRUE; + } + + rcbuf = ares_buf_create(); + if (ares_buf_load_file(rcfile, rcbuf) == ARES_SUCCESS) { + rcstatus = ares_buf_split_str(rcbuf, (const unsigned char *)"\n ", 2, + ARES_BUF_SPLIT_TRIM, 0, &rcargv, &rcargc); + + if (rcstatus == ARES_SUCCESS) { + read_cmdline((int)rcargc, (const char * const *)rcargv, 0); + + } else { + snprintf(global_config.error, sizeof(global_config.error), + "rcfile is invalid: %s", ares_strerror((int)rcstatus)); + } + + ares_free_array(rcargv, rcargc, ares_free); + + if (rcstatus != ARES_SUCCESS) { + ares_buf_destroy(rcbuf); + return ARES_FALSE; + } + + } else { + DEBUGF(fprintf(stderr, "read_cmdline() failed to load rcfile")); + } + ares_buf_destroy(rcbuf); + + return ARES_TRUE; +} + +static void config_defaults(void) +{ + memset(&global_config, 0, sizeof(global_config)); + + global_config.opts.tries = 3; + global_config.opts.ndots = 1; + global_config.opts.rd_flag = ARES_TRUE; + global_config.opts.edns = ARES_TRUE; + global_config.opts.udp_size = 1232; + global_config.opts.aliases = ARES_TRUE; + global_config.opts.display_class = ARES_TRUE; + global_config.opts.display_ttl = ARES_TRUE; + global_config.opts.display_command = ARES_TRUE; + global_config.opts.display_stats = ARES_TRUE; + global_config.opts.display_question = ARES_TRUE; + global_config.opts.display_answer = ARES_TRUE; + global_config.opts.display_authority = ARES_TRUE; + global_config.opts.display_additional = ARES_TRUE; + global_config.opts.display_comments = ARES_TRUE; + global_config.qclass = ARES_CLASS_IN; + global_config.qtype = ARES_REC_TYPE_A; +} + +static void config_opts(void) +{ + global_config.optmask = ARES_OPT_FLAGS; + if (global_config.opts.tcp) { + global_config.options.flags |= ARES_FLAG_USEVC; + } + if (global_config.opts.primary) { + global_config.options.flags |= ARES_FLAG_PRIMARY; + } + if (global_config.opts.edns) { + global_config.options.flags |= ARES_FLAG_EDNS; + } + if (global_config.opts.stayopen) { + global_config.options.flags |= ARES_FLAG_STAYOPEN; + } + if (global_config.opts.dns0x20) { + global_config.options.flags |= ARES_FLAG_DNS0x20; + } + if (!global_config.opts.aliases) { + global_config.options.flags |= ARES_FLAG_NOALIASES; + } + if (!global_config.opts.rd_flag) { + global_config.options.flags |= ARES_FLAG_NORECURSE; + } + if (!global_config.opts.do_search) { + global_config.options.flags |= ARES_FLAG_NOSEARCH; + } + if (global_config.opts.ignore_tc) { + global_config.options.flags |= ARES_FLAG_IGNTC; + } + if (global_config.opts.port) { + global_config.optmask |= ARES_OPT_UDP_PORT; + global_config.optmask |= ARES_OPT_TCP_PORT; + global_config.options.udp_port = global_config.opts.port; + global_config.options.tcp_port = global_config.opts.port; + } + + global_config.optmask |= ARES_OPT_TRIES; + global_config.options.tries = (int)global_config.opts.tries; + + global_config.optmask |= ARES_OPT_NDOTS; + global_config.options.ndots = (int)global_config.opts.ndots; + + global_config.optmask |= ARES_OPT_EDNSPSZ; + global_config.options.ednspsz = (int)global_config.opts.udp_size; + + if (global_config.opts.search != NULL) { + global_config.optmask |= ARES_OPT_DOMAINS; + global_config.options.domains = &global_config.opts.search; + global_config.options.ndomains = 1; + } +} + int main(int argc, char **argv) { ares_channel_t *channel = NULL; ares_status_t status; - adig_config_t config; - int i; int rv = 0; #ifdef USE_WINSOCK @@ -944,62 +1498,73 @@ int main(int argc, char **argv) return 1; } - memset(&config, 0, sizeof(config)); - config.qclass = ARES_CLASS_IN; - config.qtype = ARES_REC_TYPE_A; - if (!read_cmdline(argc, (const char * const *)argv, &config)) { - printf("\n** ERROR: %s\n\n", config.error); + config_defaults(); + + if (!read_cmdline(argc, (const char * const *)argv, 1)) { + printf("\n** ERROR: %s\n\n", global_config.error); print_help(); rv = 1; goto done; } - if (config.is_help) { + if (global_config.no_rcfile && !read_rcfile()) { + fprintf(stderr, "\n** ERROR: %s\n", global_config.error); + } + + if (global_config.is_help) { print_help(); goto done; } - status = - (ares_status_t)ares_init_options(&channel, &config.options, config.optmask); + if (global_config.name == NULL) { + printf("missing query name\n"); + print_help(); + rv = 1; + goto done; + } + + config_opts(); + + status = (ares_status_t)ares_init_options(&channel, &global_config.options, + global_config.optmask); if (status != ARES_SUCCESS) { fprintf(stderr, "ares_init_options: %s\n", ares_strerror((int)status)); rv = 1; goto done; } - if (config.servers) { - status = (ares_status_t)ares_set_servers_ports_csv(channel, config.servers); + if (global_config.servers) { + status = + (ares_status_t)ares_set_servers_ports_csv(channel, global_config.servers); if (status != ARES_SUCCESS) { - fprintf(stderr, "ares_set_servers_ports_csv: %s\n", - ares_strerror((int)status)); + fprintf(stderr, "ares_set_servers_ports_csv: %s: %s\n", + ares_strerror((int)status), global_config.servers); rv = 1; goto done; } } - /* Enqueue a query for each separate name */ - for (i = config.args_processed; i < argc; i++) { - status = enqueue_query(channel, &config, argv[i]); - if (status != ARES_SUCCESS) { - fprintf(stderr, "Failed to create query for %s: %s\n", argv[i], - ares_strerror((int)status)); - rv = 1; - goto done; - } + /* Debug */ + if (global_config.opts.display_command) { + printf("\n; <<>> c-ares DiG %s <<>>", ares_version(NULL)); + printf(" %s", global_config.name); + printf("\n"); } - /* Debug */ - printf("\n; <<>> c-ares DiG %s <<>>", ares_version(NULL)); - for (i = config.args_processed; i < argc; i++) { - printf(" %s", argv[i]); + /* Enqueue a query for each separate name */ + status = enqueue_query(channel); + if (status != ARES_SUCCESS) { + fprintf(stderr, "Failed to create query for %s: %s\n", global_config.name, + ares_strerror((int)status)); + rv = 1; + goto done; } - printf("\n"); /* Process events */ rv = event_loop(channel); done: - free_config(&config); + free_config(); ares_destroy(channel); ares_library_cleanup(); diff --git a/deps/cares/src/tools/ahost.c b/deps/cares/src/tools/ahost.c index 73f29002a98e92..7d1d4a86dc7a2d 100644 --- a/deps/cares/src/tools/ahost.c +++ b/deps/cares/src/tools/ahost.c @@ -42,20 +42,7 @@ #include "ares_getopt.h" #include "ares_ipv6.h" -#ifndef HAVE_STRDUP -# include "str/ares_str.h" -# define strdup(ptr) ares_strdup(ptr) -#endif - -#ifndef HAVE_STRCASECMP -# include "str/ares_strcasecmp.h" -# define strcasecmp(p1, p2) ares_strcasecmp(p1, p2) -#endif - -#ifndef HAVE_STRNCASECMP -# include "str/ares_strcasecmp.h" -# define strncasecmp(p1, p2, n) ares_strncasecmp(p1, p2, n) -#endif +#include "ares_str.h" static void callback(void *arg, int status, int timeouts, struct hostent *host); static void ai_callback(void *arg, int status, int timeouts, @@ -111,11 +98,11 @@ int main(int argc, char **argv) options.domains[options.ndomains - 1] = strdup(state.optarg); break; case 't': - if (!strcasecmp(state.optarg, "a")) { + if (ares_strcaseeq(state.optarg, "a")) { addr_family = AF_INET; - } else if (!strcasecmp(state.optarg, "aaaa")) { + } else if (ares_strcaseeq(state.optarg, "aaaa")) { addr_family = AF_INET6; - } else if (!strcasecmp(state.optarg, "u")) { + } else if (ares_strcaseeq(state.optarg, "u")) { addr_family = AF_UNSPEC; } else { usage(); From 008fb5f7f47275603caf60bbeec9e2200159d127 Mon Sep 17 00:00:00 2001 From: "Node.js GitHub Bot" Date: Tue, 15 Oct 2024 02:45:44 +0200 Subject: [PATCH 23/93] deps: patch V8 to 12.9.202.28 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refs: https://github.com/v8/v8/compare/12.9.202.26...12.9.202.28 PR-URL: https://github.com/nodejs/node/pull/55371 Reviewed-By: Michaël Zasso Reviewed-By: Luigi Pinca Reviewed-By: Rafael Gonzaga --- deps/v8/include/v8-version.h | 2 +- deps/v8/src/compiler/access-info.cc | 1 + deps/v8/src/compiler/heap-refs.cc | 1 + .../js-native-context-specialization.cc | 4 +- deps/v8/src/execution/isolate.cc | 7 + .../v8/test/mjsunit/wasm/regress-367818758.js | 221 ++++++++++++++++++ 6 files changed, 234 insertions(+), 2 deletions(-) create mode 100644 deps/v8/test/mjsunit/wasm/regress-367818758.js diff --git a/deps/v8/include/v8-version.h b/deps/v8/include/v8-version.h index f1c9dae4b6a61e..2f4e47742f6a25 100644 --- a/deps/v8/include/v8-version.h +++ b/deps/v8/include/v8-version.h @@ -11,7 +11,7 @@ #define V8_MAJOR_VERSION 12 #define V8_MINOR_VERSION 9 #define V8_BUILD_NUMBER 202 -#define V8_PATCH_LEVEL 26 +#define V8_PATCH_LEVEL 28 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.) diff --git a/deps/v8/src/compiler/access-info.cc b/deps/v8/src/compiler/access-info.cc index 8d40875131e895..595f4ad9fb5a0c 100644 --- a/deps/v8/src/compiler/access-info.cc +++ b/deps/v8/src/compiler/access-info.cc @@ -925,6 +925,7 @@ PropertyAccessInfo AccessInfoFactory::ComputePropertyAccessInfo( return PropertyAccessInfo::NotFound(zone(), receiver_map, holder); } + CHECK(prototype.IsJSObject()); holder = prototype.AsJSObject(); map = map_prototype_map; diff --git a/deps/v8/src/compiler/heap-refs.cc b/deps/v8/src/compiler/heap-refs.cc index b415e45a509dc8..f3bc711a916d9e 100644 --- a/deps/v8/src/compiler/heap-refs.cc +++ b/deps/v8/src/compiler/heap-refs.cc @@ -1689,6 +1689,7 @@ HolderLookupResult FunctionTemplateInfoRef::LookupHolderOfExpectedType( if (!expected_receiver_type->IsTemplateFor(prototype.object()->map())) { return not_found; } + CHECK(prototype.IsJSObject()); return HolderLookupResult(CallOptimization::kHolderFound, prototype.AsJSObject()); } diff --git a/deps/v8/src/compiler/js-native-context-specialization.cc b/deps/v8/src/compiler/js-native-context-specialization.cc index 9fcb1d00756e9b..94fe53a5baec0e 100644 --- a/deps/v8/src/compiler/js-native-context-specialization.cc +++ b/deps/v8/src/compiler/js-native-context-specialization.cc @@ -881,7 +881,9 @@ JSNativeContextSpecialization::InferHasInPrototypeChain( // might be a different object each time, so it's much simpler to include // {prototype}. That does, however, mean that we must check {prototype}'s // map stability. - if (!prototype.map(broker()).is_stable()) return kMayBeInPrototypeChain; + if (!prototype.IsJSObject() || !prototype.map(broker()).is_stable()) { + return kMayBeInPrototypeChain; + } last_prototype = prototype.AsJSObject(); } WhereToStart start = result == NodeProperties::kUnreliableMaps diff --git a/deps/v8/src/execution/isolate.cc b/deps/v8/src/execution/isolate.cc index 40303fb7ecfee5..d4c9b42e3ea8fb 100644 --- a/deps/v8/src/execution/isolate.cc +++ b/deps/v8/src/execution/isolate.cc @@ -2650,6 +2650,13 @@ HandlerTable::CatchPrediction PredictExceptionFromBytecode( HandlerTable::CatchPrediction PredictException(const FrameSummary& summary, Isolate* isolate) { + if (!summary.IsJavaScript()) { + // This can happen when WASM is inlined by TurboFan. For now we ignore + // frames that are not JavaScript. + // TODO(https://crbug.com/349588762): We should also check Wasm code + // for exception handling. + return HandlerTable::UNCAUGHT; + } PtrComprCageBase cage_base(isolate); DirectHandle code = summary.AsJavaScript().abstract_code(); if (code->kind(cage_base) == CodeKind::BUILTIN) { diff --git a/deps/v8/test/mjsunit/wasm/regress-367818758.js b/deps/v8/test/mjsunit/wasm/regress-367818758.js new file mode 100644 index 00000000000000..69e8290c88d856 --- /dev/null +++ b/deps/v8/test/mjsunit/wasm/regress-367818758.js @@ -0,0 +1,221 @@ +// Copyright 2024 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// Flags: --allow-natives-syntax + +var kWasmH0 = 0; +var kWasmH1 = 0x61; +var kWasmH2 = 0x73; +var kWasmH3 = 0x6d; +var kWasmV0 = 0x1; +var kWasmV1 = 0; +var kWasmV2 = 0; +var kWasmV3 = 0; +let kTypeSectionCode = 1; // Function signature declarations +let kFunctionSectionCode = 3; // Function declarations +let kExportSectionCode = 7; // Exports +let kCodeSectionCode = 10; // Function code +let kWasmFunctionTypeForm = 0x60; +let kWasmStructTypeForm = 0x5f; +let kNoSuperType = 0xFFFFFFFF; +let kWasmI32 = 0x7f; +let kWasmExternRef = -0x11; +let kLeb128Mask = 0x7f; +let kExternalFunction = 0; +function makeSig(params, results) { + return {params: params, results: results}; +} +const kWasmOpcodes = { + 'End': 0x0b, + 'I32Const': 0x41, +}; +function defineWasmOpcode(name, value) { + Object.defineProperty(globalThis, name, {value: value}); +} +for (let name in kWasmOpcodes) { + defineWasmOpcode(`kExpr${name}`, kWasmOpcodes[name]); +} +const kPrefixOpcodes = { + 'GC': 0xfb, +}; +for (let prefix in kPrefixOpcodes) { + defineWasmOpcode(`k${prefix}Prefix`, kPrefixOpcodes[prefix]); +} +let kExprStructNew = 0x00; +let kExprExternConvertAny = 0x1b; +class Binary { + constructor() { + this.length = 0; + this.buffer = new Uint8Array(8192); + } + trunc_buffer() { + return new Uint8Array(this.buffer.buffer, 0, this.length); + } + emit_u8(val) { + this.buffer[this.length++] = val; + } + emit_leb_u(val) { + let v = val & 0xff; + this.buffer[this.length++] = v; + } + emit_u32v(val) { + this.emit_leb_u(val); + } + emit_bytes(data) { + this.buffer.set(data, this.length); + this.length += data.length; + } + emit_string(string) { + let string_utf8 = string; + this.emit_u32v(string_utf8.length); + for (let i = 0; i < string_utf8.length; i++) { + this.emit_u8(string_utf8.charCodeAt(i)); + } + } + emit_type(type) { + this.emit_u8(type >= 0 ? type : type & kLeb128Mask); + } + emit_header() { + this.emit_bytes([ + kWasmH0, kWasmH1, kWasmH2, kWasmH3, kWasmV0, kWasmV1, kWasmV2, kWasmV3 + ]); + } + emit_section(section_code, content_generator) { + this.emit_u8(section_code); + const section = new Binary; + content_generator(section); + this.emit_u32v(section.length); + this.emit_bytes(section.trunc_buffer()); + } +} +class WasmFunctionBuilder { + constructor(module, name, type_index, arg_names) { + this.module = module; + this.name = name; + this.type_index = type_index; + } + exportAs(name) { + this.module.addExport(name, this.index); + } + exportFunc() { + this.exportAs(this.name); + return this; + } + addBody(body) { + this.body = body.concat([kExprEnd]); + } +} +function makeField(type, mutability) { + return {type: type, mutability: mutability}; +} +class WasmStruct { + constructor(fields) { + this.fields = fields; + } +} +class WasmModuleBuilder { + constructor() { + this.types = []; + this.exports = []; + this.functions = []; + } + addType(type, supertype_idx = kNoSuperType, is_final = true, + is_shared = false) { + var type_copy = {params: type.params, results: type.results, + is_final: is_final, is_shared: is_shared, + supertype: supertype_idx}; + this.types.push(type_copy); + return this.types.length - 1; + } + addStruct(fields = kNoSuperType = false, is_shared = false) { + this.types.push(new WasmStruct(fields)); + } + addFunction(name, type, arg_names) { + let type_index =typeof type == 'number' ? type : this.addType(type); + let func = new WasmFunctionBuilder(this, name, type_index); + this.functions.push(func); + return func; + } + addExport(name, index) { + this.exports.push({name: name, kind: kExternalFunction, index: index}); + } + toBuffer() { + let binary = new Binary; + let wasm = this; + binary.emit_header(); + binary.emit_section(kTypeSectionCode, section => { + let length_with_groups = wasm.types.length; + section.emit_u32v(length_with_groups); + for (let i = 0; i < wasm.types.length; i++) { + let type = wasm.types[i]; + if (type instanceof WasmStruct) { + section.emit_u8(kWasmStructTypeForm); + section.emit_u32v(type.fields.length); + for (let field of type.fields) { + section.emit_type(field.type); + section.emit_u8(); + } + } else { + section.emit_u8(kWasmFunctionTypeForm); + section.emit_u32v(); + section.emit_u32v(type.results.length); + for (let result of type.results) { + section.emit_type(result); + } + } + } + }); + binary.emit_section(kFunctionSectionCode, section => { + section.emit_u32v(wasm.functions.length); + for (let func of wasm.functions) { + section.emit_u32v(func.type_index); + } + }); + var exports_count = wasm.exports.length; + binary.emit_section(kExportSectionCode, section => { + section.emit_u32v(exports_count); + for (let exp of wasm.exports) { + section.emit_string(exp.name); + section.emit_u8(); + section.emit_u32v(); + } + }); + binary.emit_section(kCodeSectionCode, section => { + section.emit_u32v(wasm.functions.length); + for (let func of wasm.functions) { + section.emit_u32v(func.body.length + 1); + section.emit_u8(); // 0 locals. + section.emit_bytes(func.body); + } + }); + return binary.trunc_buffer(); + } + instantiate() { + let module = this.toModule(); + let instance = new WebAssembly.Instance(module); + return instance; + } + toModule() { + return new WebAssembly.Module(this.toBuffer()); + } +} +let builder = new WasmModuleBuilder(); +let struct_type = builder.addStruct([makeField(kWasmI32)]); +builder.addFunction('MakeStruct', makeSig([], [kWasmExternRef])).exportFunc() + .addBody([kExprI32Const, 42, kGCPrefix, kExprStructNew, struct_type, + kGCPrefix, kExprExternConvertAny]); +let instance = builder.instantiate(); +let evil_wasm_object = instance.exports.MakeStruct(); +function evil_ctor(){ +} +function evil_cast_jit(evil_o){ + global_collect_node_info = evil_o; // get nodeinfo from PropertyCellStore + return evil_o instanceof evil_ctor; +} +evil_ctor.prototype = evil_wasm_object; +%PrepareFunctionForOptimization(evil_cast_jit); +evil_cast_jit(new evil_ctor()); +evil_cast_jit(new evil_ctor()); +%OptimizeFunctionOnNextCall(evil_cast_jit); +evil_cast_jit(); From 57dbbf84023cb84fc12b04f715865d6ae2cc7d73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=BCseyin=20A=C3=A7acak?= <110401522+huseyinacacak-janea@users.noreply.github.com> Date: Tue, 15 Oct 2024 09:41:38 +0300 Subject: [PATCH 24/93] src: fix winapi_strerror error string Fixes: https://github.com/nodejs/node/issues/23191 PR-URL: https://github.com/nodejs/node/pull/55207 Reviewed-By: Luigi Pinca --- src/api/exceptions.cc | 16 ++++++++-------- test/parallel/test-debug-process.js | 21 +++++++++++++++++++++ 2 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 test/parallel/test-debug-process.js diff --git a/src/api/exceptions.cc b/src/api/exceptions.cc index 1b9b308ad89fc6..871fe78de95154 100644 --- a/src/api/exceptions.cc +++ b/src/api/exceptions.cc @@ -157,14 +157,14 @@ Local UVException(Isolate* isolate, static const char* winapi_strerror(const int errorno, bool* must_free) { char* errmsg = nullptr; - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - nullptr, - errorno, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - reinterpret_cast(&errmsg), - 0, - nullptr); + FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + nullptr, + errorno, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + reinterpret_cast(&errmsg), + 0, + nullptr); if (errmsg) { *must_free = true; diff --git a/test/parallel/test-debug-process.js b/test/parallel/test-debug-process.js new file mode 100644 index 00000000000000..0d10a15e2eefa0 --- /dev/null +++ b/test/parallel/test-debug-process.js @@ -0,0 +1,21 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const child = require('child_process'); + +if (!common.isWindows) { + common.skip('This test is specific to Windows to test winapi_strerror'); +} + +// Ref: https://github.com/nodejs/node/issues/23191 +// This test is specific to Windows. + +const cp = child.spawn('pwd'); + +cp.on('exit', common.mustCall(function() { + try { + process._debugProcess(cp.pid); + } catch (error) { + assert.strictEqual(error.message, 'The system cannot find the file specified.'); + } +})); From c3f2216a7d2771598397344211a015015e489454 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=BCseyin=20A=C3=A7acak?= <110401522+huseyinacacak-janea@users.noreply.github.com> Date: Tue, 15 Oct 2024 15:13:30 +0300 Subject: [PATCH 25/93] doc: add instructions for WinGet build PR-URL: https://github.com/nodejs/node/pull/55356 Reviewed-By: Luigi Pinca Reviewed-By: Benjamin Gruenbaum Reviewed-By: Stefan Stojanovic --- BUILDING.md | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/BUILDING.md b/BUILDING.md index ba563dd58430d2..1ccd594f00b311 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -35,7 +35,8 @@ file a new issue. * [Windows](#windows) * [Windows Prerequisites](#windows-prerequisites) * [Option 1: Manual install](#option-1-manual-install) - * [Option 2: Automated install with Boxstarter](#option-2-automated-install-with-boxstarter) + * [Option 2: Automated install with WinGet](#option-2-automated-install-with-winget) + * [Option 3: Automated install with Boxstarter](#option-3-automated-install-with-boxstarter) * [Building Node.js](#building-nodejs-2) * [Android](#android) * [`Intl` (ECMA-402) support](#intl-ecma-402-support) @@ -666,7 +667,34 @@ Optional requirements for compiling with ClangCL: NOTE: Currently we only support compiling with Clang that comes from Visual Studio. -##### Option 2: Automated install with Boxstarter +##### Option 2: Automated install with WinGet + +[WinGet configuration files](https://github.com/nodejs/node/tree/main/.configurations) +can be used to install all the required prerequisites for Node.js development +easily. These files will install the following +[WinGet](https://learn.microsoft.com/en-us/windows/package-manager/winget/) packages: + +* Git for Windows with the `git` and Unix tools added to the `PATH` +* `Python 3.12` +* `Visual Studio 2022` (Community, Enterprise or Professional) +* `Visual Studio 2022 Build Tools` with Visual C++ workload, Clang and ClangToolset +* `NetWide Assembler` + +To install Node.js prerequisites from Powershell Terminal: + +```powershell +winget configure .\configuration.dsc.yaml +``` + +Alternatively, you can use [Dev Home](https://learn.microsoft.com/en-us/windows/dev-home/) +to install the prerequisites: + +* Switch to `Machine Configuration` tab +* Click on `Configuration File` +* Choose the corresponding WinGet configuration file +* Click on `Set up as admin` + +##### Option 3: Automated install with Boxstarter A [Boxstarter](https://boxstarter.org/) script can be used for easy setup of Windows systems with all the required prerequisites for Node.js development. From 1ce8928db3bae15c194ce30a1a61a372af092504 Mon Sep 17 00:00:00 2001 From: Fedor Indutny <238531+indutny@users.noreply.github.com> Date: Tue, 15 Oct 2024 06:43:09 -0700 Subject: [PATCH 26/93] sqlite: cache column names in stmt.all() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit While the statement is running, it is impossible to modify the column names and thus it is beneficial to create the host-language (JS) keys once per all rows and reuse them for all results. With this change the performance of `.all()` improves by around 25% depending on the number of columns and rows in the result. PR-URL: https://github.com/nodejs/node/pull/55373 Reviewed-By: Michaël Zasso Reviewed-By: Benjamin Gruenbaum Reviewed-By: Yagiz Nizipli --- src/node_sqlite.cc | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/node_sqlite.cc b/src/node_sqlite.cc index df6bb45ad60e7d..f7025373f2c6a3 100644 --- a/src/node_sqlite.cc +++ b/src/node_sqlite.cc @@ -561,23 +561,32 @@ void StatementSync::All(const FunctionCallbackInfo& args) { auto reset = OnScopeLeave([&]() { sqlite3_reset(stmt->statement_); }); int num_cols = sqlite3_column_count(stmt->statement_); LocalVector rows(isolate); + LocalVector row_keys(isolate); while ((r = sqlite3_step(stmt->statement_)) == SQLITE_ROW) { - LocalVector row_keys(isolate); - row_keys.reserve(num_cols); + if (row_keys.size() == 0) { + row_keys.reserve(num_cols); + + for (int i = 0; i < num_cols; ++i) { + Local key; + if (!stmt->ColumnNameToName(i).ToLocal(&key)) return; + row_keys.emplace_back(key); + } + } + LocalVector row_values(isolate); row_values.reserve(num_cols); - for (int i = 0; i < num_cols; ++i) { - Local key; - if (!stmt->ColumnNameToName(i).ToLocal(&key)) return; + for (size_t i = 0; i < row_keys.size(); ++i) { Local val; if (!stmt->ColumnToValue(i).ToLocal(&val)) return; - row_keys.emplace_back(key); row_values.emplace_back(val); } - Local row = Object::New( - isolate, Null(isolate), row_keys.data(), row_values.data(), num_cols); + Local row = Object::New(isolate, + Null(isolate), + row_keys.data(), + row_values.data(), + row_keys.size()); rows.emplace_back(row); } From dd848f2d1e5b60394c43597c339bb01fabf64b9c Mon Sep 17 00:00:00 2001 From: BadKey Date: Tue, 15 Oct 2024 15:43:24 +0200 Subject: [PATCH 27/93] lib: test_runner#mock:timers respeced timeout_max behaviour PR-URL: https://github.com/nodejs/node/pull/55375 Reviewed-By: Marco Ippolito Reviewed-By: Colin Ihrig Reviewed-By: Benjamin Gruenbaum Reviewed-By: Claudio Wunder --- lib/internal/test_runner/mock/mock_timers.js | 6 ++++++ test/parallel/test-runner-mock-timers.js | 16 ++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/lib/internal/test_runner/mock/mock_timers.js b/lib/internal/test_runner/mock/mock_timers.js index 7c75892b95735c..ed3108f5539b09 100644 --- a/lib/internal/test_runner/mock/mock_timers.js +++ b/lib/internal/test_runner/mock/mock_timers.js @@ -38,6 +38,8 @@ const { }, } = require('internal/errors'); +const { TIMEOUT_MAX } = require('internal/timers'); + const PriorityQueue = require('internal/priority_queue'); const nodeTimers = require('timers'); const nodeTimersPromises = require('timers/promises'); @@ -288,6 +290,10 @@ class MockTimers { } #createTimer(isInterval, callback, delay, ...args) { + if (delay > TIMEOUT_MAX) { + delay = 1; + } + const timerId = this.#currentTimer++; const opts = { __proto__: null, diff --git a/test/parallel/test-runner-mock-timers.js b/test/parallel/test-runner-mock-timers.js index e2a86a5263636a..9e1bc7e62cc5b2 100644 --- a/test/parallel/test-runner-mock-timers.js +++ b/test/parallel/test-runner-mock-timers.js @@ -251,6 +251,22 @@ describe('Mock Timers Test Suite', () => { done(); }), timeout); }); + + it('should change timeout to 1ms when it is >= 2 ** 31', (t) => { + t.mock.timers.enable({ apis: ['setTimeout'] }); + const fn = t.mock.fn(); + global.setTimeout(fn, 2 ** 31); + t.mock.timers.tick(1); + assert.strictEqual(fn.mock.callCount(), 1); + }); + + it('should change the delay to one if timeout < 0', (t) => { + t.mock.timers.enable({ apis: ['setTimeout'] }); + const fn = t.mock.fn(); + global.setTimeout(fn, -1); + t.mock.timers.tick(1); + assert.strictEqual(fn.mock.callCount(), 1); + }); }); describe('clearTimeout Suite', () => { From 3b2b3a8df21397086bccd2a8c5715606635e6106 Mon Sep 17 00:00:00 2001 From: Nathan Baulch Date: Wed, 16 Oct 2024 00:59:49 +1100 Subject: [PATCH 28/93] tools: fix typos MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/55061 Reviewed-By: Michaël Zasso Reviewed-By: Luigi Pinca --- tools/actions/commit-queue.sh | 2 +- tools/dep_updaters/utils.sh | 4 ++-- tools/gen_node_def.cc | 2 +- tools/gypi_to_gn.py | 4 ++-- tools/msvs/vswhere_usability_wrapper.cmd | 2 +- tools/pseudo-tty.py | 2 +- tools/v8_gypfiles/features.gypi | 2 +- tools/v8_gypfiles/inspector.gypi | 2 +- tools/v8_gypfiles/v8.gyp | 2 +- 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/tools/actions/commit-queue.sh b/tools/actions/commit-queue.sh index 7778e07fe4bd03..3b3138053cb636 100755 --- a/tools/actions/commit-queue.sh +++ b/tools/actions/commit-queue.sh @@ -57,7 +57,7 @@ for pr in "$@"; do fi git node land --autorebase --yes $MULTIPLE_COMMIT_POLICY "$pr" >output 2>&1 || echo "Failed to land #${pr}" - # cat here otherwise we'll be supressing the output of git node land + # cat here otherwise we'll be suppressing the output of git node land cat output # TODO(mmarchini): workaround for ncu not returning the expected status code, diff --git a/tools/dep_updaters/utils.sh b/tools/dep_updaters/utils.sh index 774da85aafc303..76a40d4bbc4970 100644 --- a/tools/dep_updaters/utils.sh +++ b/tools/dep_updaters/utils.sh @@ -3,7 +3,7 @@ ROOT=$(cd "$(dirname "$0")/../.." && pwd) export ROOT -# This function compare new version with current version of a depdendency and +# This function compare new version with current version of a dependency and # exit the script if the versions are the same # # $1 is the package name e.g. 'acorn', 'ada', 'base64' etc. See the file @@ -55,7 +55,7 @@ finalize_version_update() { # https://github.com/nodejs/node/blob/main/doc/contributing/maintaining/maintaining-dependencies.md # for a complete list of package name # $2 is the downloaded archive -# $3 (optional) is the deposited sha256 cheksum. When provided, it is checked +# $3 (optional) is the deposited sha256 checksum. When provided, it is checked # against the checksum generated from the archive log_and_verify_sha256sum() { package_name="$1" diff --git a/tools/gen_node_def.cc b/tools/gen_node_def.cc index f4cabbd84c1f75..10e2939c80bbfd 100644 --- a/tools/gen_node_def.cc +++ b/tools/gen_node_def.cc @@ -11,7 +11,7 @@ // symbols from the DLL and redirects them back to the DLL. // This allows node.exe to export the same symbols as libnode.dll // when building Node.js as a shared library. This is conceptually -// similary to the create_expfile.sh script used on AIX. +// similar to the create_expfile.sh script used on AIX. // // Generating this .def file requires parsing data out of the // PE32/PE32+ file format. Helper structs are defined in diff --git a/tools/gypi_to_gn.py b/tools/gypi_to_gn.py index 08eb948f5b2a65..327cd38d7ba63a 100755 --- a/tools/gypi_to_gn.py +++ b/tools/gypi_to_gn.py @@ -37,7 +37,7 @@ in GYP down requires a level of indirection. Any calls will have to be removed and cleaned up once the GYP-to-GN transition is complete. As a result, we only use this script when the list of files is large and -frequently-changing. In these cases, having one canonical list outweights the +frequently-changing. In these cases, having one canonical list outweighs the downsides. As of this writing, the GN build is basically complete. It's likely that all large and frequently changing targets where this is appropriate use this @@ -253,7 +253,7 @@ def LoadPythonDictionary(path): def ReplaceSubstrings(values, search_for, replace_with): """Recursively replaces substrings in a value. - Replaces all substrings of the "search_for" with "repace_with" for all + Replaces all substrings of the "search_for" with "replace_with" for all strings occurring in "values". This is done by recursively iterating into lists as well as the keys and values of dictionaries.""" if isinstance(values, str): diff --git a/tools/msvs/vswhere_usability_wrapper.cmd b/tools/msvs/vswhere_usability_wrapper.cmd index 5da35d11ae2d50..beb6cdc24db8d5 100644 --- a/tools/msvs/vswhere_usability_wrapper.cmd +++ b/tools/msvs/vswhere_usability_wrapper.cmd @@ -9,7 +9,7 @@ if "%~3"=="prerelease" set VSWHERE_WITH_PRERELEASE=1 set "InstallerPath=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer" if not exist "%InstallerPath%" set "InstallerPath=%ProgramFiles%\Microsoft Visual Studio\Installer" if not exist "%InstallerPath%" goto :no-vswhere -:: Manipulate %Path% for easier " handeling +:: Manipulate %Path% for easier " handling set "Path=%Path%;%InstallerPath%" where vswhere 2> nul > nul if errorlevel 1 goto :no-vswhere diff --git a/tools/pseudo-tty.py b/tools/pseudo-tty.py index 96300a679a58b3..5ce90250506c20 100755 --- a/tools/pseudo-tty.py +++ b/tools/pseudo-tty.py @@ -47,7 +47,7 @@ def pipe(sfd, dfd): if __name__ == '__main__': argv = sys.argv[1:] - # Make select() interruptable by SIGCHLD. + # Make select() interruptible by SIGCHLD. signal.signal(signal.SIGCHLD, lambda nr, _: None) parent_fd, child_fd = pty.openpty() diff --git a/tools/v8_gypfiles/features.gypi b/tools/v8_gypfiles/features.gypi index 6e21dac6d70ede..18479d7d2abc44 100644 --- a/tools/v8_gypfiles/features.gypi +++ b/tools/v8_gypfiles/features.gypi @@ -219,7 +219,7 @@ # Enable third party HEAP library 'v8_enable_third_party_heap%': 0, - # Libaries used by third party heap + # Libraries used by third party heap 'v8_third_party_heap_libs%': [], # Source code used by third party heap diff --git a/tools/v8_gypfiles/inspector.gypi b/tools/v8_gypfiles/inspector.gypi index 2f227f6fc2b4b0..aed336e76ee6b0 100644 --- a/tools/v8_gypfiles/inspector.gypi +++ b/tools/v8_gypfiles/inspector.gypi @@ -105,7 +105,7 @@ # Flat merge `third_party/inspector_protocol:inspector_string_conversions` '<(inspector_path)/v8-string-conversions.cc', '<(inspector_path)/v8-string-conversions.h', - # Flat merge `third_party/inspector_protocal:crdtp_platform` + # Flat merge `third_party/inspector_protocol:crdtp_platform` '<(inspector_protocol_path)/crdtp/json_platform.h', '<(inspector_protocol_path)/crdtp/json_platform_v8.cc', # Flat merge `third_party/inspector_protocol:crdtp` diff --git a/tools/v8_gypfiles/v8.gyp b/tools/v8_gypfiles/v8.gyp index e7ffde40d85ad4..226a3f6df54d07 100644 --- a/tools/v8_gypfiles/v8.gyp +++ b/tools/v8_gypfiles/v8.gyp @@ -1893,7 +1893,7 @@ ['enable_lto=="true"', { 'cflags_cc': [ '-fno-lto' ], }], - # Chnges in push_registers_asm.cc in V8 v12.8 requires using + # Changes in push_registers_asm.cc in V8 v12.8 requires using # push_registers_masm on Windows even with ClangCL on x64 ['OS=="win"', { 'conditions': [ From c05582da3df858f1e21ece535d645618e58f6381 Mon Sep 17 00:00:00 2001 From: James M Snell Date: Tue, 15 Oct 2024 10:22:15 -0700 Subject: [PATCH 29/93] buffer: make Buffer work with resizable ArrayBuffer Fixes: https://github.com/nodejs/node/issues/52195 PR-URL: https://github.com/nodejs/node/pull/55377 Reviewed-By: Robert Nagy Reviewed-By: Yagiz Nizipli Reviewed-By: Benjamin Gruenbaum Reviewed-By: Ruben Bridgewater Reviewed-By: Matteo Collina --- lib/buffer.js | 4 +--- test/parallel/test-buffer-resizable.js | 29 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 test/parallel/test-buffer-resizable.js diff --git a/lib/buffer.js b/lib/buffer.js index 2c56b6c504db9b..756657e910893e 100644 --- a/lib/buffer.js +++ b/lib/buffer.js @@ -504,9 +504,7 @@ function fromArrayBuffer(obj, byteOffset, length) { if (maxLength < 0) throw new ERR_BUFFER_OUT_OF_BOUNDS('offset'); - if (length === undefined) { - length = maxLength; - } else { + if (length !== undefined) { // Convert length to non-negative integer. length = +length; if (length > 0) { diff --git a/test/parallel/test-buffer-resizable.js b/test/parallel/test-buffer-resizable.js new file mode 100644 index 00000000000000..dcfe6385b680d8 --- /dev/null +++ b/test/parallel/test-buffer-resizable.js @@ -0,0 +1,29 @@ +// Flags: --no-warnings +'use strict'; + +require('../common'); +const { Buffer } = require('node:buffer'); +const { strictEqual } = require('node:assert'); +const { describe, it } = require('node:test'); + +describe('Using resizable ArrayBuffer with Buffer...', () => { + it('works as expected', () => { + const ab = new ArrayBuffer(10, { maxByteLength: 20 }); + const buffer = Buffer.from(ab, 1); + strictEqual(buffer.byteLength, 9); + ab.resize(15); + strictEqual(buffer.byteLength, 14); + ab.resize(5); + strictEqual(buffer.byteLength, 4); + }); + + it('works with the deprecated constructor also', () => { + const ab = new ArrayBuffer(10, { maxByteLength: 20 }); + const buffer = new Buffer(ab, 1); + strictEqual(buffer.byteLength, 9); + ab.resize(15); + strictEqual(buffer.byteLength, 14); + ab.resize(5); + strictEqual(buffer.byteLength, 4); + }); +}); From 903863cafa6bf25a30bde80d3654a7cfb622698d Mon Sep 17 00:00:00 2001 From: "Node.js GitHub Bot" Date: Tue, 15 Oct 2024 20:56:39 +0200 Subject: [PATCH 30/93] deps: update simdutf to 5.6.0 PR-URL: https://github.com/nodejs/node/pull/55379 Reviewed-By: Luigi Pinca Reviewed-By: James M Snell Reviewed-By: Yagiz Nizipli Reviewed-By: Benjamin Gruenbaum --- deps/simdutf/simdutf.cpp | 48315 +++++++++++++++++++------------------ deps/simdutf/simdutf.h | 2909 ++- 2 files changed, 27252 insertions(+), 23972 deletions(-) diff --git a/deps/simdutf/simdutf.cpp b/deps/simdutf/simdutf.cpp index b04ec9773e9215..e6b25c7ce27c16 100644 --- a/deps/simdutf/simdutf.cpp +++ b/deps/simdutf/simdutf.cpp @@ -1,4 +1,4 @@ -/* auto-generated on 2024-09-04 18:13:32 +0200. Do not edit! */ +/* auto-generated on 2024-10-11 12:35:29 -0400. Do not edit! */ /* begin file src/simdutf.cpp */ #include "simdutf.h" // We include base64_tables once. @@ -615,7 +615,7 @@ const unsigned char BitsSetTable256mul2[256] = { 14, 10, 12, 12, 14, 12, 14, 14, 16}; constexpr uint8_t to_base64_value[] = { - 255, 255, 255, 255, 255, 255, 255, 255, 255, 64, 64, 255, 64, 64, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 64, 64, 255, 64, 64, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 64, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, @@ -635,7 +635,7 @@ constexpr uint8_t to_base64_value[] = { 255}; constexpr uint8_t to_base64_url_value[] = { - 255, 255, 255, 255, 255, 255, 255, 255, 255, 64, 64, 255, 64, 64, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 64, 64, 255, 64, 64, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 64, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, @@ -653,22 +653,38 @@ constexpr uint8_t to_base64_url_value[] = { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}; -static_assert(sizeof(to_base64_value) == 256, "to_base64_value must have 256 elements"); -static_assert(sizeof(to_base64_url_value) == 256, "to_base64_url_value must have 256 elements"); -static_assert(to_base64_value[uint8_t(' ')] == 64, "space must be == 64 in to_base64_value"); -static_assert(to_base64_url_value[uint8_t(' ')] == 64, "space must be == 64 in to_base64_url_value"); -static_assert(to_base64_value[uint8_t('\t')] == 64, "tab must be == 64 in to_base64_value"); -static_assert(to_base64_url_value[uint8_t('\t')] == 64, "tab must be == 64 in to_base64_url_value"); -static_assert(to_base64_value[uint8_t('\r')] == 64, "cr must be == 64 in to_base64_value"); -static_assert(to_base64_url_value[uint8_t('\r')] == 64, "cr must be == 64 in to_base64_url_value"); -static_assert(to_base64_value[uint8_t('\n')] == 64, "lf must be == 64 in to_base64_value"); -static_assert(to_base64_url_value[uint8_t('\n')] == 64, "lf must be == 64 in to_base64_url_value"); -static_assert(to_base64_value[uint8_t('\f')] == 64, "ff must be == 64 in to_base64_value"); -static_assert(to_base64_url_value[uint8_t('\f')] == 64, "ff must be == 64 in to_base64_url_value"); -static_assert(to_base64_value[uint8_t('+')] == 62, "+ must be == 62 in to_base64_value"); -static_assert(to_base64_url_value[uint8_t('-')] == 62, "- must be == 62 in to_base64_url_value"); -static_assert(to_base64_value[uint8_t('/')] == 63, "/ must be == 62 in to_base64_value"); -static_assert(to_base64_url_value[uint8_t('_')] == 63, "_ must be == 62 in to_base64_url_value"); +static_assert(sizeof(to_base64_value) == 256, + "to_base64_value must have 256 elements"); +static_assert(sizeof(to_base64_url_value) == 256, + "to_base64_url_value must have 256 elements"); +static_assert(to_base64_value[uint8_t(' ')] == 64, + "space must be == 64 in to_base64_value"); +static_assert(to_base64_url_value[uint8_t(' ')] == 64, + "space must be == 64 in to_base64_url_value"); +static_assert(to_base64_value[uint8_t('\t')] == 64, + "tab must be == 64 in to_base64_value"); +static_assert(to_base64_url_value[uint8_t('\t')] == 64, + "tab must be == 64 in to_base64_url_value"); +static_assert(to_base64_value[uint8_t('\r')] == 64, + "cr must be == 64 in to_base64_value"); +static_assert(to_base64_url_value[uint8_t('\r')] == 64, + "cr must be == 64 in to_base64_url_value"); +static_assert(to_base64_value[uint8_t('\n')] == 64, + "lf must be == 64 in to_base64_value"); +static_assert(to_base64_url_value[uint8_t('\n')] == 64, + "lf must be == 64 in to_base64_url_value"); +static_assert(to_base64_value[uint8_t('\f')] == 64, + "ff must be == 64 in to_base64_value"); +static_assert(to_base64_url_value[uint8_t('\f')] == 64, + "ff must be == 64 in to_base64_url_value"); +static_assert(to_base64_value[uint8_t('+')] == 62, + "+ must be == 62 in to_base64_value"); +static_assert(to_base64_url_value[uint8_t('-')] == 62, + "- must be == 62 in to_base64_url_value"); +static_assert(to_base64_value[uint8_t('/')] == 63, + "/ must be == 62 in to_base64_value"); +static_assert(to_base64_url_value[uint8_t('_')] == 63, + "_ must be == 62 in to_base64_url_value"); } // namespace base64 } // namespace tables } // unnamed namespace @@ -685,18 +701,17 @@ static_assert(to_base64_url_value[uint8_t('_')] == 63, "_ must be == 62 in to_ba namespace simdutf { namespace { -template -std::string toBinaryString(T b) { - std::string binary = ""; - T mask = T(1) << (sizeof(T) * CHAR_BIT - 1); - while (mask > 0) { +template std::string toBinaryString(T b) { + std::string binary = ""; + T mask = T(1) << (sizeof(T) * CHAR_BIT - 1); + while (mask > 0) { binary += ((b & mask) == 0) ? '0' : '1'; mask >>= 1; } return binary; } -} -} +} // namespace +} // namespace simdutf // Implementations // The best choice should always come first! @@ -705,29 +720,27 @@ std::string toBinaryString(T b) { #define SIMDUTF_ARM64_H #ifdef SIMDUTF_FALLBACK_H -#error "arm64.h must be included before fallback.h" + #error "arm64.h must be included before fallback.h" #endif #ifndef SIMDUTF_IMPLEMENTATION_ARM64 -#define SIMDUTF_IMPLEMENTATION_ARM64 (SIMDUTF_IS_ARM64) + #define SIMDUTF_IMPLEMENTATION_ARM64 (SIMDUTF_IS_ARM64) #endif #if SIMDUTF_IMPLEMENTATION_ARM64 && SIMDUTF_IS_ARM64 -#define SIMDUTF_CAN_ALWAYS_RUN_ARM64 1 + #define SIMDUTF_CAN_ALWAYS_RUN_ARM64 1 #else -#define SIMDUTF_CAN_ALWAYS_RUN_ARM64 0 + #define SIMDUTF_CAN_ALWAYS_RUN_ARM64 0 #endif - #if SIMDUTF_IMPLEMENTATION_ARM64 namespace simdutf { /** * Implementation for NEON (ARMv8). */ -namespace arm64 { -} // namespace arm64 +namespace arm64 {} // namespace arm64 } // namespace simdutf /* begin file src/simdutf/arm64/implementation.h */ @@ -744,88 +757,197 @@ using namespace simdutf; class implementation final : public simdutf::implementation { public: - simdutf_really_inline implementation() : simdutf::implementation("arm64", "ARM NEON", internal::instruction_set::NEON) {} - simdutf_warn_unused int detect_encodings(const char * input, size_t length) const noexcept final; - simdutf_warn_unused bool validate_utf8(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf8_with_errors(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_ascii(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_ascii_with_errors(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_utf16le(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_utf16be(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf16le_with_errors(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf16be_with_errors(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_utf32(const char32_t *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf32_with_errors(const char32_t *buf, size_t len) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf8(const char * buf, size_t len, char* utf8_output) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf16le(const char * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf16be(const char * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf32(const char * buf, size_t len, char32_t* utf32_output) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_latin1(const char * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_latin1_with_errors(const char * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_latin1(const char * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_utf16le(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_utf16be(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_utf16le_with_errors(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_utf16be_with_errors(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_utf16le(const char * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_utf16be(const char * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_utf32(const char * buf, size_t len, char32_t* utf32_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_utf32_with_errors(const char * buf, size_t len, char32_t* utf32_output) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_utf32(const char * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16le_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16be_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16le_to_latin1_with_errors(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16be_to_latin1_with_errors(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16le_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16be_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16le_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16be_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16le_to_utf8_with_errors(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16be_to_utf8_with_errors(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16le_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16be_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_latin1(const char32_t * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused result convert_utf32_to_latin1_with_errors(const char32_t * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_latin1(const char32_t * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_utf8(const char32_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused result convert_utf32_to_utf8_with_errors(const char32_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_utf8(const char32_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_utf16le(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_utf16be(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused result convert_utf32_to_utf16le_with_errors(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused result convert_utf32_to_utf16be_with_errors(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_utf16le(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_utf16be(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16le_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16be_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16le_to_utf32_with_errors(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16be_to_utf32_with_errors(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16le_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16be_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - void change_endianness_utf16(const char16_t * buf, size_t length, char16_t * output) const noexcept final; - simdutf_warn_unused size_t count_utf16le(const char16_t * buf, size_t length) const noexcept; - simdutf_warn_unused size_t count_utf16be(const char16_t * buf, size_t length) const noexcept; - simdutf_warn_unused size_t count_utf8(const char * buf, size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_utf16le(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_utf16be(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_utf16le(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_utf16be(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf16_length_from_utf8(const char * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_utf32(const char32_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf16_length_from_utf32(const char32_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_utf8(const char * input, size_t length) const noexcept; - simdutf_warn_unused size_t latin1_length_from_utf8(const char * input, size_t length) const noexcept; - simdutf_warn_unused size_t latin1_length_from_utf16(size_t length) const noexcept; - simdutf_warn_unused size_t latin1_length_from_utf32(size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_latin1(size_t length) const noexcept; - simdutf_warn_unused size_t utf16_length_from_latin1(size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_latin1(const char * input, size_t length) const noexcept; - simdutf_warn_unused size_t maximal_binary_length_from_base64(const char * input, size_t length) const noexcept; - simdutf_warn_unused result base64_to_binary(const char * input, size_t length, char* output, base64_options options) const noexcept; - simdutf_warn_unused size_t maximal_binary_length_from_base64(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused result base64_to_binary(const char16_t * input, size_t length, char* output, base64_options options) const noexcept; - simdutf_warn_unused size_t base64_length_from_binary(size_t length, base64_options options) const noexcept; - size_t binary_to_base64(const char * input, size_t length, char* output, base64_options options) const noexcept; + simdutf_really_inline implementation() + : simdutf::implementation("arm64", "ARM NEON", + internal::instruction_set::NEON) {} + simdutf_warn_unused int detect_encodings(const char *input, + size_t length) const noexcept final; + simdutf_warn_unused bool validate_utf8(const char *buf, + size_t len) const noexcept final; + simdutf_warn_unused result + validate_utf8_with_errors(const char *buf, size_t len) const noexcept final; + simdutf_warn_unused bool validate_ascii(const char *buf, + size_t len) const noexcept final; + simdutf_warn_unused result + validate_ascii_with_errors(const char *buf, size_t len) const noexcept final; + simdutf_warn_unused bool validate_utf16le(const char16_t *buf, + size_t len) const noexcept final; + simdutf_warn_unused bool validate_utf16be(const char16_t *buf, + size_t len) const noexcept final; + simdutf_warn_unused result validate_utf16le_with_errors( + const char16_t *buf, size_t len) const noexcept final; + simdutf_warn_unused result validate_utf16be_with_errors( + const char16_t *buf, size_t len) const noexcept final; + simdutf_warn_unused bool validate_utf32(const char32_t *buf, + size_t len) const noexcept final; + simdutf_warn_unused result validate_utf32_with_errors( + const char32_t *buf, size_t len) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf8( + const char *buf, size_t len, char *utf8_output) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf16le( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf16be( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf32( + const char *buf, size_t len, char32_t *utf32_output) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_latin1_with_errors( + const char *buf, size_t len, char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_utf16le( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_utf16be( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_utf16le_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_utf16be_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_utf16le( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_utf16be( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_utf32( + const char *buf, size_t len, char32_t *utf32_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_utf32_with_errors( + const char *buf, size_t len, char32_t *utf32_output) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_utf32( + const char *buf, size_t len, char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16le_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16be_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16le_to_latin1_with_errors( + const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16be_to_latin1_with_errors( + const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16le_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16be_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16le_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16be_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf32_to_latin1(const char32_t *buf, size_t len, + char *latin1_output) const noexcept final; + simdutf_warn_unused result + convert_utf32_to_latin1_with_errors(const char32_t *buf, size_t len, + char *latin1_output) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf32_to_latin1(const char32_t *buf, size_t len, + char *latin1_output) const noexcept final; + simdutf_warn_unused size_t convert_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused result convert_utf32_to_utf8_with_errors( + const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf32_to_utf16le(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf32_to_utf16be(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused result convert_utf32_to_utf16le_with_errors( + const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused result convert_utf32_to_utf16be_with_errors( + const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf32_to_utf16le(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf32_to_utf16be(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16le_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16be_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16le_to_utf32_with_errors( + const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16be_to_utf32_with_errors( + const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16le_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16be_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + void change_endianness_utf16(const char16_t *buf, size_t length, + char16_t *output) const noexcept final; + simdutf_warn_unused size_t count_utf16le(const char16_t *buf, + size_t length) const noexcept; + simdutf_warn_unused size_t count_utf16be(const char16_t *buf, + size_t length) const noexcept; + simdutf_warn_unused size_t count_utf8(const char *buf, + size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_utf16le(const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_utf16be(const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t utf32_length_from_utf16le( + const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t utf32_length_from_utf16be( + const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf16_length_from_utf8(const char *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_utf32(const char32_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf16_length_from_utf32(const char32_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf32_length_from_utf8(const char *input, size_t length) const noexcept; + simdutf_warn_unused size_t + latin1_length_from_utf8(const char *input, size_t length) const noexcept; + simdutf_warn_unused size_t + latin1_length_from_utf16(size_t length) const noexcept; + simdutf_warn_unused size_t + latin1_length_from_utf32(size_t length) const noexcept; + simdutf_warn_unused size_t + utf32_length_from_latin1(size_t length) const noexcept; + simdutf_warn_unused size_t + utf16_length_from_latin1(size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_latin1(const char *input, size_t length) const noexcept; + simdutf_warn_unused size_t maximal_binary_length_from_base64( + const char *input, size_t length) const noexcept; + simdutf_warn_unused result base64_to_binary( + const char *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_options = + last_chunk_handling_options::loose) const noexcept; + simdutf_warn_unused size_t maximal_binary_length_from_base64( + const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused result + base64_to_binary(const char16_t *input, size_t length, char *output, + base64_options options, + last_chunk_handling_options last_chunk_options = + last_chunk_handling_options::loose) const noexcept; + simdutf_warn_unused size_t base64_length_from_binary( + size_t length, base64_options options) const noexcept; + size_t binary_to_base64(const char *input, size_t length, char *output, + base64_options options) const noexcept; }; } // namespace arm64 @@ -839,7 +961,7 @@ class implementation final : public simdutf::implementation { // #define SIMDUTF_IMPLEMENTATION arm64 /* end file src/simdutf/arm64/begin.h */ -// Declarations + // Declarations /* begin file src/simdutf/arm64/intrinsics.h */ #ifndef SIMDUTF_ARM64_INTRINSICS_H #define SIMDUTF_ARM64_INTRINSICS_H @@ -861,20 +983,20 @@ namespace { /* result might be undefined when input_num is zero */ simdutf_really_inline int count_ones(uint64_t input_num) { - return vaddv_u8(vcnt_u8(vcreate_u8(input_num))); + return vaddv_u8(vcnt_u8(vcreate_u8(input_num))); } #if SIMDUTF_NEED_TRAILING_ZEROES simdutf_really_inline int trailing_zeroes(uint64_t input_num) { -#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO + #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO unsigned long ret; // Search the mask data from least significant bit (LSB) // to the most significant bit (MSB) for a set bit (1). _BitScanForward64(&ret, input_num); return (int)ret; -#else // SIMDUTF_REGULAR_VISUAL_STUDIO + #else // SIMDUTF_REGULAR_VISUAL_STUDIO return __builtin_ctzll(input_num); -#endif // SIMDUTF_REGULAR_VISUAL_STUDIO + #endif // SIMDUTF_REGULAR_VISUAL_STUDIO } #endif @@ -890,7 +1012,6 @@ simdutf_really_inline int trailing_zeroes(uint64_t input_num) { #include - namespace simdutf { namespace arm64 { namespace { @@ -898,1054 +1019,1327 @@ namespace simd { #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO namespace { -// Start of private section with Visual Studio workaround - -#ifndef simdutf_make_uint8x16_t -#define simdutf_make_uint8x16_t(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, \ - x13, x14, x15, x16) \ - ([=]() { \ - uint8_t array[16] = {x1, x2, x3, x4, x5, x6, x7, x8, \ - x9, x10, x11, x12, x13, x14, x15, x16}; \ - return vld1q_u8(array); \ - }()) -#endif -#ifndef simdutf_make_int8x16_t -#define simdutf_make_int8x16_t(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, \ - x13, x14, x15, x16) \ - ([=]() { \ - int8_t array[16] = {x1, x2, x3, x4, x5, x6, x7, x8, \ - x9, x10, x11, x12, x13, x14, x15, x16}; \ - return vld1q_s8(array); \ - }()) -#endif - -#ifndef simdutf_make_uint8x8_t -#define simdutf_make_uint8x8_t(x1, x2, x3, x4, x5, x6, x7, x8) \ - ([=]() { \ - uint8_t array[8] = {x1, x2, x3, x4, x5, x6, x7, x8}; \ - return vld1_u8(array); \ - }()) -#endif -#ifndef simdutf_make_int8x8_t -#define simdutf_make_int8x8_t(x1, x2, x3, x4, x5, x6, x7, x8) \ - ([=]() { \ - int8_t array[8] = {x1, x2, x3, x4, x5, x6, x7, x8}; \ - return vld1_s8(array); \ - }()) -#endif -#ifndef simdutf_make_uint16x8_t -#define simdutf_make_uint16x8_t(x1, x2, x3, x4, x5, x6, x7, x8) \ - ([=]() { \ - uint16_t array[8] = {x1, x2, x3, x4, x5, x6, x7, x8}; \ - return vld1q_u16(array); \ - }()) -#endif -#ifndef simdutf_make_int16x8_t -#define simdutf_make_int16x8_t(x1, x2, x3, x4, x5, x6, x7, x8) \ - ([=]() { \ - int16_t array[8] = {x1, x2, x3, x4, x5, x6, x7, x8}; \ - return vld1q_s16(array); \ - }()) -#endif + // Start of private section with Visual Studio workaround + + #ifndef simdutf_make_uint8x16_t + #define simdutf_make_uint8x16_t(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, \ + x11, x12, x13, x14, x15, x16) \ + ([=]() { \ + uint8_t array[16] = {x1, x2, x3, x4, x5, x6, x7, x8, \ + x9, x10, x11, x12, x13, x14, x15, x16}; \ + return vld1q_u8(array); \ + }()) + #endif + #ifndef simdutf_make_int8x16_t + #define simdutf_make_int8x16_t(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, \ + x11, x12, x13, x14, x15, x16) \ + ([=]() { \ + int8_t array[16] = {x1, x2, x3, x4, x5, x6, x7, x8, \ + x9, x10, x11, x12, x13, x14, x15, x16}; \ + return vld1q_s8(array); \ + }()) + #endif + #ifndef simdutf_make_uint8x8_t + #define simdutf_make_uint8x8_t(x1, x2, x3, x4, x5, x6, x7, x8) \ + ([=]() { \ + uint8_t array[8] = {x1, x2, x3, x4, x5, x6, x7, x8}; \ + return vld1_u8(array); \ + }()) + #endif + #ifndef simdutf_make_int8x8_t + #define simdutf_make_int8x8_t(x1, x2, x3, x4, x5, x6, x7, x8) \ + ([=]() { \ + int8_t array[8] = {x1, x2, x3, x4, x5, x6, x7, x8}; \ + return vld1_s8(array); \ + }()) + #endif + #ifndef simdutf_make_uint16x8_t + #define simdutf_make_uint16x8_t(x1, x2, x3, x4, x5, x6, x7, x8) \ + ([=]() { \ + uint16_t array[8] = {x1, x2, x3, x4, x5, x6, x7, x8}; \ + return vld1q_u16(array); \ + }()) + #endif + #ifndef simdutf_make_int16x8_t + #define simdutf_make_int16x8_t(x1, x2, x3, x4, x5, x6, x7, x8) \ + ([=]() { \ + int16_t array[8] = {x1, x2, x3, x4, x5, x6, x7, x8}; \ + return vld1q_s16(array); \ + }()) + #endif // End of private section with Visual Studio workaround } // namespace #endif // SIMDUTF_REGULAR_VISUAL_STUDIO +template struct simd8; - template - struct simd8; - - // - // Base class of simd8 and simd8, both of which use uint8x16_t internally. - // - template> - struct base_u8 { - uint8x16_t value; - static const int SIZE = sizeof(value); - - // Conversion from/to SIMD register - simdutf_really_inline base_u8(const uint8x16_t _value) : value(_value) {} - simdutf_really_inline operator const uint8x16_t&() const { return this->value; } - simdutf_really_inline operator uint8x16_t&() { return this->value; } - simdutf_really_inline T first() const { return vgetq_lane_u8(*this,0); } - simdutf_really_inline T last() const { return vgetq_lane_u8(*this,15); } - - // Bit operations - simdutf_really_inline simd8 operator|(const simd8 other) const { return vorrq_u8(*this, other); } - simdutf_really_inline simd8 operator&(const simd8 other) const { return vandq_u8(*this, other); } - simdutf_really_inline simd8 operator^(const simd8 other) const { return veorq_u8(*this, other); } - simdutf_really_inline simd8 bit_andnot(const simd8 other) const { return vbicq_u8(*this, other); } - simdutf_really_inline simd8 operator~() const { return *this ^ 0xFFu; } - simdutf_really_inline simd8& operator|=(const simd8 other) { auto this_cast = static_cast*>(this); *this_cast = *this_cast | other; return *this_cast; } - simdutf_really_inline simd8& operator&=(const simd8 other) { auto this_cast = static_cast*>(this); *this_cast = *this_cast & other; return *this_cast; } - simdutf_really_inline simd8& operator^=(const simd8 other) { auto this_cast = static_cast*>(this); *this_cast = *this_cast ^ other; return *this_cast; } - - friend simdutf_really_inline Mask operator==(const simd8 lhs, const simd8 rhs) { return vceqq_u8(lhs, rhs); } - - template - simdutf_really_inline simd8 prev(const simd8 prev_chunk) const { - return vextq_u8(prev_chunk, *this, 16 - N); - } - }; - - // SIMD byte mask type (returned by things like eq and gt) - template<> - struct simd8: base_u8 { - typedef uint16_t bitmask_t; - typedef uint32_t bitmask2_t; +// +// Base class of simd8 and simd8, both of which use uint8x16_t +// internally. +// +template > struct base_u8 { + uint8x16_t value; + static const int SIZE = sizeof(value); - static simdutf_really_inline simd8 splat(bool _value) { return vmovq_n_u8(uint8_t(-(!!_value))); } + // Conversion from/to SIMD register + simdutf_really_inline base_u8(const uint8x16_t _value) : value(_value) {} + simdutf_really_inline operator const uint8x16_t &() const { + return this->value; + } + simdutf_really_inline operator uint8x16_t &() { return this->value; } + simdutf_really_inline T first() const { return vgetq_lane_u8(*this, 0); } + simdutf_really_inline T last() const { return vgetq_lane_u8(*this, 15); } - simdutf_really_inline simd8(const uint8x16_t _value) : base_u8(_value) {} - // False constructor - simdutf_really_inline simd8() : simd8(vdupq_n_u8(0)) {} - // Splat constructor - simdutf_really_inline simd8(bool _value) : simd8(splat(_value)) {} - simdutf_really_inline void store(uint8_t dst[16]) const { return vst1q_u8(dst, *this); } + // Bit operations + simdutf_really_inline simd8 operator|(const simd8 other) const { + return vorrq_u8(*this, other); + } + simdutf_really_inline simd8 operator&(const simd8 other) const { + return vandq_u8(*this, other); + } + simdutf_really_inline simd8 operator^(const simd8 other) const { + return veorq_u8(*this, other); + } + simdutf_really_inline simd8 bit_andnot(const simd8 other) const { + return vbicq_u8(*this, other); + } + simdutf_really_inline simd8 operator~() const { return *this ^ 0xFFu; } + simdutf_really_inline simd8 &operator|=(const simd8 other) { + auto this_cast = static_cast *>(this); + *this_cast = *this_cast | other; + return *this_cast; + } + simdutf_really_inline simd8 &operator&=(const simd8 other) { + auto this_cast = static_cast *>(this); + *this_cast = *this_cast & other; + return *this_cast; + } + simdutf_really_inline simd8 &operator^=(const simd8 other) { + auto this_cast = static_cast *>(this); + *this_cast = *this_cast ^ other; + return *this_cast; + } - // We return uint32_t instead of uint16_t because that seems to be more efficient for most - // purposes (cutting it down to uint16_t costs performance in some compilers). - simdutf_really_inline uint32_t to_bitmask() const { -#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - const uint8x16_t bit_mask = simdutf_make_uint8x16_t(0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, - 0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80); -#else - const uint8x16_t bit_mask = {0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, - 0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; -#endif - auto minput = *this & bit_mask; - uint8x16_t tmp = vpaddq_u8(minput, minput); - tmp = vpaddq_u8(tmp, tmp); - tmp = vpaddq_u8(tmp, tmp); - return vgetq_lane_u16(vreinterpretq_u16_u8(tmp), 0); - } + friend simdutf_really_inline Mask operator==(const simd8 lhs, + const simd8 rhs) { + return vceqq_u8(lhs, rhs); + } - // Returns 4-bit out of each byte, alternating between the high 4 bits and low bits - // result it is 64 bit. - // This method is expected to be faster than none() and is equivalent - // when the vector register is the result of a comparison, with byte - // values 0xff and 0x00. - simdutf_really_inline uint64_t to_bitmask64() const { - return vget_lane_u64(vreinterpret_u64_u8(vshrn_n_u16(vreinterpretq_u16_u8(*this), 4)), 0); - } + template + simdutf_really_inline simd8 prev(const simd8 prev_chunk) const { + return vextq_u8(prev_chunk, *this, 16 - N); + } +}; - simdutf_really_inline bool any() const { return vmaxvq_u32(vreinterpretq_u32_u8(*this)) != 0; } - simdutf_really_inline bool none() const { return vmaxvq_u32(vreinterpretq_u32_u8(*this)) == 0; } - simdutf_really_inline bool all() const { return vminvq_u32(vreinterpretq_u32_u8(*this)) == 0xFFFFF; } +// SIMD byte mask type (returned by things like eq and gt) +template <> struct simd8 : base_u8 { + typedef uint16_t bitmask_t; + typedef uint32_t bitmask2_t; + static simdutf_really_inline simd8 splat(bool _value) { + return vmovq_n_u8(uint8_t(-(!!_value))); + } - }; + simdutf_really_inline simd8(const uint8x16_t _value) + : base_u8(_value) {} + // False constructor + simdutf_really_inline simd8() : simd8(vdupq_n_u8(0)) {} + // Splat constructor + simdutf_really_inline simd8(bool _value) : simd8(splat(_value)) {} + simdutf_really_inline void store(uint8_t dst[16]) const { + return vst1q_u8(dst, *this); + } - // Unsigned bytes - template<> - struct simd8: base_u8 { - static simdutf_really_inline simd8 splat(uint8_t _value) { return vmovq_n_u8(_value); } - static simdutf_really_inline simd8 zero() { return vdupq_n_u8(0); } - static simdutf_really_inline simd8 load(const uint8_t* values) { return vld1q_u8(values); } - simdutf_really_inline simd8(const uint8x16_t _value) : base_u8(_value) {} - // Zero constructor - simdutf_really_inline simd8() : simd8(zero()) {} - // Array constructor - simdutf_really_inline simd8(const uint8_t values[16]) : simd8(load(values)) {} - // Splat constructor - simdutf_really_inline simd8(uint8_t _value) : simd8(splat(_value)) {} - // Member-by-member initialization + // We return uint32_t instead of uint16_t because that seems to be more + // efficient for most purposes (cutting it down to uint16_t costs performance + // in some compilers). + simdutf_really_inline uint32_t to_bitmask() const { #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - simdutf_really_inline simd8( - uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, uint8_t v6, uint8_t v7, - uint8_t v8, uint8_t v9, uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15 - ) : simd8(simdutf_make_uint8x16_t( - v0, v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10,v11,v12,v13,v14,v15 - )) {} + const uint8x16_t bit_mask = + simdutf_make_uint8x16_t(0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, + 0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80); #else - simdutf_really_inline simd8( - uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, uint8_t v6, uint8_t v7, - uint8_t v8, uint8_t v9, uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15 - ) : simd8(uint8x16_t{ - v0, v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10,v11,v12,v13,v14,v15 - }) {} + const uint8x16_t bit_mask = {0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, + 0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; #endif + auto minput = *this & bit_mask; + uint8x16_t tmp = vpaddq_u8(minput, minput); + tmp = vpaddq_u8(tmp, tmp); + tmp = vpaddq_u8(tmp, tmp); + return vgetq_lane_u16(vreinterpretq_u16_u8(tmp), 0); + } - // Repeat 16 values as many times as necessary (usually for lookup tables) - simdutf_really_inline static simd8 repeat_16( - uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, uint8_t v6, uint8_t v7, - uint8_t v8, uint8_t v9, uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15 - ) { - return simd8( - v0, v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10,v11,v12,v13,v14,v15 - ); - } - - // Store to array - simdutf_really_inline void store(uint8_t dst[16]) const { return vst1q_u8(dst, *this); } - - // Saturated math - simdutf_really_inline simd8 saturating_add(const simd8 other) const { return vqaddq_u8(*this, other); } - simdutf_really_inline simd8 saturating_sub(const simd8 other) const { return vqsubq_u8(*this, other); } - - // Addition/subtraction are the same for signed and unsigned - simdutf_really_inline simd8 operator+(const simd8 other) const { return vaddq_u8(*this, other); } - simdutf_really_inline simd8 operator-(const simd8 other) const { return vsubq_u8(*this, other); } - simdutf_really_inline simd8& operator+=(const simd8 other) { *this = *this + other; return *this; } - simdutf_really_inline simd8& operator-=(const simd8 other) { *this = *this - other; return *this; } - - // Order-specific operations - simdutf_really_inline uint8_t max_val() const { return vmaxvq_u8(*this); } - simdutf_really_inline uint8_t min_val() const { return vminvq_u8(*this); } - simdutf_really_inline simd8 max_val(const simd8 other) const { return vmaxq_u8(*this, other); } - simdutf_really_inline simd8 min_val(const simd8 other) const { return vminq_u8(*this, other); } - simdutf_really_inline simd8 operator<=(const simd8 other) const { return vcleq_u8(*this, other); } - simdutf_really_inline simd8 operator>=(const simd8 other) const { return vcgeq_u8(*this, other); } - simdutf_really_inline simd8 operator<(const simd8 other) const { return vcltq_u8(*this, other); } - simdutf_really_inline simd8 operator>(const simd8 other) const { return vcgtq_u8(*this, other); } - // Same as >, but instead of guaranteeing all 1's == true, false = 0 and true = nonzero. For ARM, returns all 1's. - simdutf_really_inline simd8 gt_bits(const simd8 other) const { return simd8(*this > other); } - // Same as <, but instead of guaranteeing all 1's == true, false = 0 and true = nonzero. For ARM, returns all 1's. - simdutf_really_inline simd8 lt_bits(const simd8 other) const { return simd8(*this < other); } - - // Bit-specific operations - simdutf_really_inline simd8 any_bits_set(simd8 bits) const { return vtstq_u8(*this, bits); } - simdutf_really_inline bool is_ascii() const { return this->max_val() < 0b10000000u; } - - simdutf_really_inline bool any_bits_set_anywhere() const { return this->max_val() != 0; } - simdutf_really_inline bool any_bits_set_anywhere(simd8 bits) const { return (*this & bits).any_bits_set_anywhere(); } - template - simdutf_really_inline simd8 shr() const { return vshrq_n_u8(*this, N); } - template - simdutf_really_inline simd8 shl() const { return vshlq_n_u8(*this, N); } - - // Perform a lookup assuming the value is between 0 and 16 (undefined behavior for out of range values) - template - simdutf_really_inline simd8 lookup_16(simd8 lookup_table) const { - return lookup_table.apply_lookup_16_to(*this); - } - - - template - simdutf_really_inline simd8 lookup_16( - L replace0, L replace1, L replace2, L replace3, - L replace4, L replace5, L replace6, L replace7, - L replace8, L replace9, L replace10, L replace11, - L replace12, L replace13, L replace14, L replace15) const { - return lookup_16(simd8::repeat_16( - replace0, replace1, replace2, replace3, - replace4, replace5, replace6, replace7, - replace8, replace9, replace10, replace11, - replace12, replace13, replace14, replace15 - )); - } - - template - simdutf_really_inline simd8 apply_lookup_16_to(const simd8 original) const { - return vqtbl1q_u8(*this, simd8(original)); - } - }; - - // Signed bytes - template<> - struct simd8 { - int8x16_t value; + // Returns 4-bit out of each byte, alternating between the high 4 bits and low + // bits result it is 64 bit. This method is expected to be faster than none() + // and is equivalent when the vector register is the result of a comparison, + // with byte values 0xff and 0x00. + simdutf_really_inline uint64_t to_bitmask64() const { + return vget_lane_u64( + vreinterpret_u64_u8(vshrn_n_u16(vreinterpretq_u16_u8(*this), 4)), 0); + } - static simdutf_really_inline simd8 splat(int8_t _value) { return vmovq_n_s8(_value); } - static simdutf_really_inline simd8 zero() { return vdupq_n_s8(0); } - static simdutf_really_inline simd8 load(const int8_t values[16]) { return vld1q_s8(values); } + simdutf_really_inline bool any() const { + return vmaxvq_u32(vreinterpretq_u32_u8(*this)) != 0; + } + simdutf_really_inline bool none() const { + return vmaxvq_u32(vreinterpretq_u32_u8(*this)) == 0; + } + simdutf_really_inline bool all() const { + return vminvq_u32(vreinterpretq_u32_u8(*this)) == 0xFFFFF; + } +}; - // Use ST2 instead of UXTL+UXTL2 to interleave zeroes. UXTL is actually a USHLL #0, - // and shifting in NEON is actually quite slow. - // - // While this needs the registers to be in a specific order, bigger cores can interleave - // these with no overhead, and it still performs decently on little cores. - // movi v1.3d, #0 - // mov v0.16b, value[0] - // st2 {v0.16b, v1.16b}, [ptr], #32 - // mov v0.16b, value[1] - // st2 {v0.16b, v1.16b}, [ptr], #32 - // ... - template - simdutf_really_inline void store_ascii_as_utf16(char16_t * p) const { - int8x16x2_t pair = match_system(big_endian) - ? int8x16x2_t{{this->value, vmovq_n_s8(0)}} - : int8x16x2_t{{vmovq_n_s8(0), this->value}}; - vst2q_s8(reinterpret_cast(p), pair); - } - - // currently unused - // Technically this could be done with ST4 like in store_ascii_as_utf16, but it is - // very much not worth it, as explicitly mentioned in the ARM Cortex-X1 Core Software - // Optimization Guide: - // 4.18 Complex ASIMD instructions - // The bandwidth of [ST4 with element size less than 64b] is limited by decode - // constraints and it is advisable to avoid them when high performing code is desired. - // Instead, it is better to use ZIP1+ZIP2 and two ST2. - simdutf_really_inline void store_ascii_as_utf32(char32_t * p) const { - const uint16x8_t low = vreinterpretq_u16_s8(vzip1q_s8(this->value, vmovq_n_s8(0))); - const uint16x8_t high = vreinterpretq_u16_s8(vzip2q_s8(this->value, vmovq_n_s8(0))); - const uint16x8x2_t low_pair{{ low, vmovq_n_u16(0) }}; - vst2q_u16(reinterpret_cast(p), low_pair); - const uint16x8x2_t high_pair{{ high, vmovq_n_u16(0) }}; - vst2q_u16(reinterpret_cast(p + 8), high_pair); - } - - // In places where the table can be reused, which is most uses in simdutf, it is worth it to do - // 4 table lookups, as there is no direct zero extension from u8 to u32. - simdutf_really_inline void store_ascii_as_utf32_tbl(char32_t * p) const { - const simd8 tb1{ 0,255,255,255, 1,255,255,255, 2,255,255,255, 3,255,255,255 }; - const simd8 tb2{ 4,255,255,255, 5,255,255,255, 6,255,255,255, 7,255,255,255 }; - const simd8 tb3{ 8,255,255,255, 9,255,255,255, 10,255,255,255, 11,255,255,255 }; - const simd8 tb4{ 12,255,255,255, 13,255,255,255, 14,255,255,255, 15,255,255,255 }; - - // encourage store pairing and interleaving - const auto shuf1 = this->apply_lookup_16_to(tb1); - const auto shuf2 = this->apply_lookup_16_to(tb2); - shuf1.store(reinterpret_cast(p)); - shuf2.store(reinterpret_cast(p + 4)); - - const auto shuf3 = this->apply_lookup_16_to(tb3); - const auto shuf4 = this->apply_lookup_16_to(tb4); - shuf3.store(reinterpret_cast(p + 8)); - shuf4.store(reinterpret_cast(p + 12)); - } - // Conversion from/to SIMD register - simdutf_really_inline simd8(const int8x16_t _value) : value{_value} {} - simdutf_really_inline operator const int8x16_t&() const { return this->value; } -#ifndef SIMDUTF_REGULAR_VISUAL_STUDIO - simdutf_really_inline operator const uint8x16_t() const { return vreinterpretq_u8_s8(this->value); } -#endif - simdutf_really_inline operator int8x16_t&() { return this->value; } - - // Zero constructor - simdutf_really_inline simd8() : simd8(zero()) {} - // Splat constructor - simdutf_really_inline simd8(int8_t _value) : simd8(splat(_value)) {} - // Array constructor - simdutf_really_inline simd8(const int8_t* values) : simd8(load(values)) {} - // Member-by-member initialization +// Unsigned bytes +template <> struct simd8 : base_u8 { + static simdutf_really_inline simd8 splat(uint8_t _value) { + return vmovq_n_u8(_value); + } + static simdutf_really_inline simd8 zero() { return vdupq_n_u8(0); } + static simdutf_really_inline simd8 load(const uint8_t *values) { + return vld1q_u8(values); + } + simdutf_really_inline simd8(const uint8x16_t _value) + : base_u8(_value) {} + // Zero constructor + simdutf_really_inline simd8() : simd8(zero()) {} + // Array constructor + simdutf_really_inline simd8(const uint8_t values[16]) : simd8(load(values)) {} + // Splat constructor + simdutf_really_inline simd8(uint8_t _value) : simd8(splat(_value)) {} + // Member-by-member initialization #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - simdutf_really_inline simd8( - int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, int8_t v6, int8_t v7, - int8_t v8, int8_t v9, int8_t v10, int8_t v11, int8_t v12, int8_t v13, int8_t v14, int8_t v15 - ) : simd8(simdutf_make_int8x16_t( - v0, v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10,v11,v12,v13,v14,v15 - )) {} + simdutf_really_inline + simd8(uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, + uint8_t v6, uint8_t v7, uint8_t v8, uint8_t v9, uint8_t v10, + uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15) + : simd8(simdutf_make_uint8x16_t(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, + v10, v11, v12, v13, v14, v15)) {} #else - simdutf_really_inline simd8( - int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, int8_t v6, int8_t v7, - int8_t v8, int8_t v9, int8_t v10, int8_t v11, int8_t v12, int8_t v13, int8_t v14, int8_t v15 - ) : simd8(int8x16_t{ - v0, v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10,v11,v12,v13,v14,v15 - }) {} -#endif - // Repeat 16 values as many times as necessary (usually for lookup tables) - simdutf_really_inline static simd8 repeat_16( - int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, int8_t v6, int8_t v7, - int8_t v8, int8_t v9, int8_t v10, int8_t v11, int8_t v12, int8_t v13, int8_t v14, int8_t v15 - ) { - return simd8( - v0, v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10,v11,v12,v13,v14,v15 - ); - } - - // Store to array - simdutf_really_inline void store(int8_t dst[16]) const { return vst1q_s8(dst, value); } - // Explicit conversion to/from unsigned - // - // Under Visual Studio/ARM64 uint8x16_t and int8x16_t are apparently the same type. - // In theory, we could check this occurrence with std::same_as and std::enabled_if but it is C++14 - // and relatively ugly and hard to read. -#ifndef SIMDUTF_REGULAR_VISUAL_STUDIO - simdutf_really_inline explicit simd8(const uint8x16_t other): simd8(vreinterpretq_s8_u8(other)) {} + simdutf_really_inline + simd8(uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, + uint8_t v6, uint8_t v7, uint8_t v8, uint8_t v9, uint8_t v10, + uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15) + : simd8(uint8x16_t{v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, + v13, v14, v15}) {} #endif - simdutf_really_inline operator simd8() const { return vreinterpretq_u8_s8(this->value); } - - simdutf_really_inline simd8 operator|(const simd8 other) const { return vorrq_s8(value, other.value); } - simdutf_really_inline simd8 operator&(const simd8 other) const { return vandq_s8(value, other.value); } - simdutf_really_inline simd8 operator^(const simd8 other) const { return veorq_s8(value, other.value); } - simdutf_really_inline simd8 bit_andnot(const simd8 other) const { return vbicq_s8(value, other.value); } - - // Math - simdutf_really_inline simd8 operator+(const simd8 other) const { return vaddq_s8(value, other.value); } - simdutf_really_inline simd8 operator-(const simd8 other) const { return vsubq_s8(value, other.value); } - simdutf_really_inline simd8& operator+=(const simd8 other) { *this = *this + other; return *this; } - simdutf_really_inline simd8& operator-=(const simd8 other) { *this = *this - other; return *this; } - - simdutf_really_inline int8_t max_val() const { return vmaxvq_s8(value); } - simdutf_really_inline int8_t min_val() const { return vminvq_s8(value); } - simdutf_really_inline bool is_ascii() const { return this->min_val() >= 0; } - - // Order-sensitive comparisons - simdutf_really_inline simd8 max_val(const simd8 other) const { return vmaxq_s8(value, other.value); } - simdutf_really_inline simd8 min_val(const simd8 other) const { return vminq_s8(value, other.value); } - simdutf_really_inline simd8 operator>(const simd8 other) const { return vcgtq_s8(value, other.value); } - simdutf_really_inline simd8 operator<(const simd8 other) const { return vcltq_s8(value, other.value); } - simdutf_really_inline simd8 operator==(const simd8 other) const { return vceqq_s8(value, other.value); } - - template - simdutf_really_inline simd8 prev(const simd8 prev_chunk) const { - return vextq_s8(prev_chunk, *this, 16 - N); - } - - // Perform a lookup assuming no value is larger than 16 - template - simdutf_really_inline simd8 lookup_16(simd8 lookup_table) const { - return lookup_table.apply_lookup_16_to(*this); - } - template - simdutf_really_inline simd8 lookup_16( - L replace0, L replace1, L replace2, L replace3, - L replace4, L replace5, L replace6, L replace7, - L replace8, L replace9, L replace10, L replace11, - L replace12, L replace13, L replace14, L replace15) const { - return lookup_16(simd8::repeat_16( - replace0, replace1, replace2, replace3, - replace4, replace5, replace6, replace7, - replace8, replace9, replace10, replace11, - replace12, replace13, replace14, replace15 - )); - } - - template - simdutf_really_inline simd8 apply_lookup_16_to(const simd8 original) const { - return vqtbl1q_s8(*this, simd8(original)); - } - }; - - template - struct simd8x64 { - static constexpr int NUM_CHUNKS = 64 / sizeof(simd8); - static_assert(NUM_CHUNKS == 4, "ARM kernel should use four registers per 64-byte block."); - simd8 chunks[NUM_CHUNKS]; - - simd8x64(const simd8x64& o) = delete; // no copy allowed - simd8x64& operator=(const simd8 other) = delete; // no assignment allowed - simd8x64() = delete; // no default constructor allowed - - simdutf_really_inline simd8x64(const simd8 chunk0, const simd8 chunk1, const simd8 chunk2, const simd8 chunk3) : chunks{chunk0, chunk1, chunk2, chunk3} {} - simdutf_really_inline simd8x64(const T* ptr) : chunks{simd8::load(ptr), simd8::load(ptr+sizeof(simd8)/sizeof(T)), simd8::load(ptr+2*sizeof(simd8)/sizeof(T)), simd8::load(ptr+3*sizeof(simd8)/sizeof(T))} {} - - simdutf_really_inline void store(T* ptr) const { - this->chunks[0].store(ptr+sizeof(simd8)*0/sizeof(T)); - this->chunks[1].store(ptr+sizeof(simd8)*1/sizeof(T)); - this->chunks[2].store(ptr+sizeof(simd8)*2/sizeof(T)); - this->chunks[3].store(ptr+sizeof(simd8)*3/sizeof(T)); - } - - - simdutf_really_inline simd8x64& operator |=(const simd8x64 &other) { - this->chunks[0] |= other.chunks[0]; - this->chunks[1] |= other.chunks[1]; - this->chunks[2] |= other.chunks[2]; - this->chunks[3] |= other.chunks[3]; - return *this; - } - - simdutf_really_inline simd8 reduce_or() const { - return (this->chunks[0] | this->chunks[1]) | (this->chunks[2] | this->chunks[3]); - } - simdutf_really_inline bool is_ascii() const { - return reduce_or().is_ascii(); - } + // Repeat 16 values as many times as necessary (usually for lookup tables) + simdutf_really_inline static simd8 + repeat_16(uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, + uint8_t v5, uint8_t v6, uint8_t v7, uint8_t v8, uint8_t v9, + uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, + uint8_t v15) { + return simd8(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, + v13, v14, v15); + } - template - simdutf_really_inline void store_ascii_as_utf16(char16_t * ptr) const { - this->chunks[0].template store_ascii_as_utf16(ptr+sizeof(simd8)*0); - this->chunks[1].template store_ascii_as_utf16(ptr+sizeof(simd8)*1); - this->chunks[2].template store_ascii_as_utf16(ptr+sizeof(simd8)*2); - this->chunks[3].template store_ascii_as_utf16(ptr+sizeof(simd8)*3); - } + // Store to array + simdutf_really_inline void store(uint8_t dst[16]) const { + return vst1q_u8(dst, *this); + } - simdutf_really_inline void store_ascii_as_utf32(char32_t * ptr) const { - this->chunks[0].store_ascii_as_utf32_tbl(ptr+sizeof(simd8)*0); - this->chunks[1].store_ascii_as_utf32_tbl(ptr+sizeof(simd8)*1); - this->chunks[2].store_ascii_as_utf32_tbl(ptr+sizeof(simd8)*2); - this->chunks[3].store_ascii_as_utf32_tbl(ptr+sizeof(simd8)*3); - } + // Saturated math + simdutf_really_inline simd8 + saturating_add(const simd8 other) const { + return vqaddq_u8(*this, other); + } + simdutf_really_inline simd8 + saturating_sub(const simd8 other) const { + return vqsubq_u8(*this, other); + } - simdutf_really_inline uint64_t to_bitmask() const { -#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - const uint8x16_t bit_mask = simdutf_make_uint8x16_t( - 0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, - 0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80 - ); -#else - const uint8x16_t bit_mask = { - 0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, - 0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80 - }; -#endif - // Add each of the elements next to each other, successively, to stuff each 8 byte mask into one. - uint8x16_t sum0 = vpaddq_u8(vandq_u8(uint8x16_t(this->chunks[0]), bit_mask), vandq_u8(uint8x16_t(this->chunks[1]), bit_mask)); - uint8x16_t sum1 = vpaddq_u8(vandq_u8(uint8x16_t(this->chunks[2]), bit_mask), vandq_u8(uint8x16_t(this->chunks[3]), bit_mask)); - sum0 = vpaddq_u8(sum0, sum1); - sum0 = vpaddq_u8(sum0, sum0); - return vgetq_lane_u64(vreinterpretq_u64_u8(sum0), 0); - } + // Addition/subtraction are the same for signed and unsigned + simdutf_really_inline simd8 + operator+(const simd8 other) const { + return vaddq_u8(*this, other); + } + simdutf_really_inline simd8 + operator-(const simd8 other) const { + return vsubq_u8(*this, other); + } + simdutf_really_inline simd8 &operator+=(const simd8 other) { + *this = *this + other; + return *this; + } + simdutf_really_inline simd8 &operator-=(const simd8 other) { + *this = *this - other; + return *this; + } - simdutf_really_inline uint64_t eq(const T m) const { - const simd8 mask = simd8::splat(m); - return simd8x64( - this->chunks[0] == mask, - this->chunks[1] == mask, - this->chunks[2] == mask, - this->chunks[3] == mask - ).to_bitmask(); + // Order-specific operations + simdutf_really_inline uint8_t max_val() const { return vmaxvq_u8(*this); } + simdutf_really_inline uint8_t min_val() const { return vminvq_u8(*this); } + simdutf_really_inline simd8 + max_val(const simd8 other) const { + return vmaxq_u8(*this, other); + } + simdutf_really_inline simd8 + min_val(const simd8 other) const { + return vminq_u8(*this, other); + } + simdutf_really_inline simd8 + operator<=(const simd8 other) const { + return vcleq_u8(*this, other); + } + simdutf_really_inline simd8 + operator>=(const simd8 other) const { + return vcgeq_u8(*this, other); + } + simdutf_really_inline simd8 + operator<(const simd8 other) const { + return vcltq_u8(*this, other); + } + simdutf_really_inline simd8 + operator>(const simd8 other) const { + return vcgtq_u8(*this, other); + } + // Same as >, but instead of guaranteeing all 1's == true, false = 0 and true + // = nonzero. For ARM, returns all 1's. + simdutf_really_inline simd8 + gt_bits(const simd8 other) const { + return simd8(*this > other); + } + // Same as <, but instead of guaranteeing all 1's == true, false = 0 and true + // = nonzero. For ARM, returns all 1's. + simdutf_really_inline simd8 + lt_bits(const simd8 other) const { + return simd8(*this < other); } - simdutf_really_inline uint64_t lteq(const T m) const { - const simd8 mask = simd8::splat(m); - return simd8x64( - this->chunks[0] <= mask, - this->chunks[1] <= mask, - this->chunks[2] <= mask, - this->chunks[3] <= mask - ).to_bitmask(); - } - - simdutf_really_inline uint64_t in_range(const T low, const T high) const { - const simd8 mask_low = simd8::splat(low); - const simd8 mask_high = simd8::splat(high); - - return simd8x64( - (this->chunks[0] <= mask_high) & (this->chunks[0] >= mask_low), - (this->chunks[1] <= mask_high) & (this->chunks[1] >= mask_low), - (this->chunks[2] <= mask_high) & (this->chunks[2] >= mask_low), - (this->chunks[3] <= mask_high) & (this->chunks[3] >= mask_low) - ).to_bitmask(); - } - simdutf_really_inline uint64_t not_in_range(const T low, const T high) const { - const simd8 mask_low = simd8::splat(low); - const simd8 mask_high = simd8::splat(high); - return simd8x64( - (this->chunks[0] > mask_high) | (this->chunks[0] < mask_low), - (this->chunks[1] > mask_high) | (this->chunks[1] < mask_low), - (this->chunks[2] > mask_high) | (this->chunks[2] < mask_low), - (this->chunks[3] > mask_high) | (this->chunks[3] < mask_low) - ).to_bitmask(); - } - simdutf_really_inline uint64_t lt(const T m) const { - const simd8 mask = simd8::splat(m); - return simd8x64( - this->chunks[0] < mask, - this->chunks[1] < mask, - this->chunks[2] < mask, - this->chunks[3] < mask - ).to_bitmask(); - } - simdutf_really_inline uint64_t gt(const T m) const { - const simd8 mask = simd8::splat(m); - return simd8x64( - this->chunks[0] > mask, - this->chunks[1] > mask, - this->chunks[2] > mask, - this->chunks[3] > mask - ).to_bitmask(); - } - simdutf_really_inline uint64_t gteq(const T m) const { - const simd8 mask = simd8::splat(m); - return simd8x64( - this->chunks[0] >= mask, - this->chunks[1] >= mask, - this->chunks[2] >= mask, - this->chunks[3] >= mask - ).to_bitmask(); - } - simdutf_really_inline uint64_t gteq_unsigned(const uint8_t m) const { - const simd8 mask = simd8::splat(m); - return simd8x64( - simd8(uint8x16_t(this->chunks[0])) >= mask, - simd8(uint8x16_t(this->chunks[1])) >= mask, - simd8(uint8x16_t(this->chunks[2])) >= mask, - simd8(uint8x16_t(this->chunks[3])) >= mask - ).to_bitmask(); - } - }; // struct simd8x64 -/* begin file src/simdutf/arm64/simd16-inl.h */ -template -struct simd16; - - template> - struct base_u16 { - uint16x8_t value; - static const int SIZE = sizeof(value); - - // Conversion from/to SIMD register - simdutf_really_inline base_u16() = default; - simdutf_really_inline base_u16(const uint16x8_t _value) : value(_value) {} - simdutf_really_inline operator const uint16x8_t&() const { return this->value; } - simdutf_really_inline operator uint16x8_t&() { return this->value; } - // Bit operations - simdutf_really_inline simd16 operator|(const simd16 other) const { return vorrq_u16(*this, other); } - simdutf_really_inline simd16 operator&(const simd16 other) const { return vandq_u16(*this, other); } - simdutf_really_inline simd16 operator^(const simd16 other) const { return veorq_u16(*this, other); } - simdutf_really_inline simd16 bit_andnot(const simd16 other) const { return vbicq_u16(*this, other); } - simdutf_really_inline simd16 operator~() const { return *this ^ 0xFFu; } - simdutf_really_inline simd16& operator|=(const simd16 other) { auto this_cast = static_cast*>(this); *this_cast = *this_cast | other; return *this_cast; } - simdutf_really_inline simd16& operator&=(const simd16 other) { auto this_cast = static_cast*>(this); *this_cast = *this_cast & other; return *this_cast; } - simdutf_really_inline simd16& operator^=(const simd16 other) { auto this_cast = static_cast*>(this); *this_cast = *this_cast ^ other; return *this_cast; } - - friend simdutf_really_inline Mask operator==(const simd16 lhs, const simd16 rhs) { return vceqq_u16(lhs, rhs); } - - template - simdutf_really_inline simd16 prev(const simd16 prev_chunk) const { - return vextq_u18(prev_chunk, *this, 8 - N); - } - }; + // Bit-specific operations + simdutf_really_inline simd8 any_bits_set(simd8 bits) const { + return vtstq_u8(*this, bits); + } + simdutf_really_inline bool is_ascii() const { + return this->max_val() < 0b10000000u; + } -template> -struct base16: base_u16 { - typedef uint16_t bitmask_t; - typedef uint32_t bitmask2_t; + simdutf_really_inline bool any_bits_set_anywhere() const { + return this->max_val() != 0; + } + simdutf_really_inline bool any_bits_set_anywhere(simd8 bits) const { + return (*this & bits).any_bits_set_anywhere(); + } + template simdutf_really_inline simd8 shr() const { + return vshrq_n_u8(*this, N); + } + template simdutf_really_inline simd8 shl() const { + return vshlq_n_u8(*this, N); + } - simdutf_really_inline base16() : base_u16() {} - simdutf_really_inline base16(const uint16x8_t _value) : base_u16(_value) {} - template - simdutf_really_inline base16(const Pointer* ptr) : base16(vld1q_u16(ptr)) {} + // Perform a lookup assuming the value is between 0 and 16 (undefined behavior + // for out of range values) + template + simdutf_really_inline simd8 lookup_16(simd8 lookup_table) const { + return lookup_table.apply_lookup_16_to(*this); + } - static const int SIZE = sizeof(base_u16::value); + template + simdutf_really_inline simd8 + lookup_16(L replace0, L replace1, L replace2, L replace3, L replace4, + L replace5, L replace6, L replace7, L replace8, L replace9, + L replace10, L replace11, L replace12, L replace13, L replace14, + L replace15) const { + return lookup_16(simd8::repeat_16( + replace0, replace1, replace2, replace3, replace4, replace5, replace6, + replace7, replace8, replace9, replace10, replace11, replace12, + replace13, replace14, replace15)); + } - template - simdutf_really_inline simd16 prev(const simd16 prev_chunk) const { - return vextq_u18(prev_chunk, *this, 8 - N); + template + simdutf_really_inline simd8 + apply_lookup_16_to(const simd8 original) const { + return vqtbl1q_u8(*this, simd8(original)); } }; -// SIMD byte mask type (returned by things like eq and gt) -template<> -struct simd16: base16 { - static simdutf_really_inline simd16 splat(bool _value) { return vmovq_n_u16(uint16_t(-(!!_value))); } - - simdutf_really_inline simd16() : base16() {} - simdutf_really_inline simd16(const uint16x8_t _value) : base16(_value) {} - // Splat constructor - simdutf_really_inline simd16(bool _value) : base16(splat(_value)) {} - -}; +// Signed bytes +template <> struct simd8 { + int8x16_t value; -template -struct base16_numeric: base16 { - static simdutf_really_inline simd16 splat(T _value) { return vmovq_n_u16(_value); } - static simdutf_really_inline simd16 zero() { return vdupq_n_u16(0); } - static simdutf_really_inline simd16 load(const T values[8]) { - return vld1q_u16(reinterpret_cast(values)); + static simdutf_really_inline simd8 splat(int8_t _value) { + return vmovq_n_s8(_value); + } + static simdutf_really_inline simd8 zero() { return vdupq_n_s8(0); } + static simdutf_really_inline simd8 load(const int8_t values[16]) { + return vld1q_s8(values); } - simdutf_really_inline base16_numeric() : base16() {} - simdutf_really_inline base16_numeric(const uint16x8_t _value) : base16(_value) {} - - // Store to array - simdutf_really_inline void store(T dst[8]) const { return vst1q_u16(dst, *this); } - - // Override to distinguish from bool version - simdutf_really_inline simd16 operator~() const { return *this ^ 0xFFu; } - - // Addition/subtraction are the same for signed and unsigned - simdutf_really_inline simd16 operator+(const simd16 other) const { return vaddq_u8(*this, other); } - simdutf_really_inline simd16 operator-(const simd16 other) const { return vsubq_u8(*this, other); } - simdutf_really_inline simd16& operator+=(const simd16 other) { *this = *this + other; return *static_cast*>(this); } - simdutf_really_inline simd16& operator-=(const simd16 other) { *this = *this - other; return *static_cast*>(this); } -}; - -// Signed code units -template<> -struct simd16 : base16_numeric { - simdutf_really_inline simd16() : base16_numeric() {} + // Use ST2 instead of UXTL+UXTL2 to interleave zeroes. UXTL is actually a + // USHLL #0, and shifting in NEON is actually quite slow. + // + // While this needs the registers to be in a specific order, bigger cores can + // interleave these with no overhead, and it still performs decently on little + // cores. + // movi v1.3d, #0 + // mov v0.16b, value[0] + // st2 {v0.16b, v1.16b}, [ptr], #32 + // mov v0.16b, value[1] + // st2 {v0.16b, v1.16b}, [ptr], #32 + // ... + template + simdutf_really_inline void store_ascii_as_utf16(char16_t *p) const { + int8x16x2_t pair = match_system(big_endian) + ? int8x16x2_t{{this->value, vmovq_n_s8(0)}} + : int8x16x2_t{{vmovq_n_s8(0), this->value}}; + vst2q_s8(reinterpret_cast(p), pair); + } + + // currently unused + // Technically this could be done with ST4 like in store_ascii_as_utf16, but + // it is very much not worth it, as explicitly mentioned in the ARM Cortex-X1 + // Core Software Optimization Guide: + // 4.18 Complex ASIMD instructions + // The bandwidth of [ST4 with element size less than 64b] is limited by + // decode constraints and it is advisable to avoid them when high + // performing code is desired. + // Instead, it is better to use ZIP1+ZIP2 and two ST2. + simdutf_really_inline void store_ascii_as_utf32(char32_t *p) const { + const uint16x8_t low = + vreinterpretq_u16_s8(vzip1q_s8(this->value, vmovq_n_s8(0))); + const uint16x8_t high = + vreinterpretq_u16_s8(vzip2q_s8(this->value, vmovq_n_s8(0))); + const uint16x8x2_t low_pair{{low, vmovq_n_u16(0)}}; + vst2q_u16(reinterpret_cast(p), low_pair); + const uint16x8x2_t high_pair{{high, vmovq_n_u16(0)}}; + vst2q_u16(reinterpret_cast(p + 8), high_pair); + } + + // In places where the table can be reused, which is most uses in simdutf, it + // is worth it to do 4 table lookups, as there is no direct zero extension + // from u8 to u32. + simdutf_really_inline void store_ascii_as_utf32_tbl(char32_t *p) const { + const simd8 tb1{0, 255, 255, 255, 1, 255, 255, 255, + 2, 255, 255, 255, 3, 255, 255, 255}; + const simd8 tb2{4, 255, 255, 255, 5, 255, 255, 255, + 6, 255, 255, 255, 7, 255, 255, 255}; + const simd8 tb3{8, 255, 255, 255, 9, 255, 255, 255, + 10, 255, 255, 255, 11, 255, 255, 255}; + const simd8 tb4{12, 255, 255, 255, 13, 255, 255, 255, + 14, 255, 255, 255, 15, 255, 255, 255}; + + // encourage store pairing and interleaving + const auto shuf1 = this->apply_lookup_16_to(tb1); + const auto shuf2 = this->apply_lookup_16_to(tb2); + shuf1.store(reinterpret_cast(p)); + shuf2.store(reinterpret_cast(p + 4)); + + const auto shuf3 = this->apply_lookup_16_to(tb3); + const auto shuf4 = this->apply_lookup_16_to(tb4); + shuf3.store(reinterpret_cast(p + 8)); + shuf4.store(reinterpret_cast(p + 12)); + } + // Conversion from/to SIMD register + simdutf_really_inline simd8(const int8x16_t _value) : value{_value} {} + simdutf_really_inline operator const int8x16_t &() const { + return this->value; + } #ifndef SIMDUTF_REGULAR_VISUAL_STUDIO - simdutf_really_inline simd16(const uint16x8_t _value) : base16_numeric(_value) {} + simdutf_really_inline operator const uint8x16_t() const { + return vreinterpretq_u8_s8(this->value); + } #endif - simdutf_really_inline simd16(const int16x8_t _value) : base16_numeric(vreinterpretq_u16_s16(_value)) {} + simdutf_really_inline operator int8x16_t &() { return this->value; } + // Zero constructor + simdutf_really_inline simd8() : simd8(zero()) {} // Splat constructor - simdutf_really_inline simd16(int16_t _value) : simd16(splat(_value)) {} + simdutf_really_inline simd8(int8_t _value) : simd8(splat(_value)) {} // Array constructor - simdutf_really_inline simd16(const int16_t* values) : simd16(load(values)) {} - simdutf_really_inline simd16(const char16_t* values) : simd16(load(reinterpret_cast(values))) {} - simdutf_really_inline operator simd16() const; - simdutf_really_inline operator const uint16x8_t&() const { return this->value; } - simdutf_really_inline operator const int16x8_t() const { return vreinterpretq_s16_u16(this->value); } - - simdutf_really_inline int16_t max_val() const { return vmaxvq_s16(vreinterpretq_s16_u16(this->value)); } - simdutf_really_inline int16_t min_val() const { return vminvq_s16(vreinterpretq_s16_u16(this->value)); } - // Order-sensitive comparisons - simdutf_really_inline simd16 max_val(const simd16 other) const { return vmaxq_s16(vreinterpretq_s16_u16(this->value), vreinterpretq_s16_u16(other.value)); } - simdutf_really_inline simd16 min_val(const simd16 other) const { return vmaxq_s16(vreinterpretq_s16_u16(this->value), vreinterpretq_s16_u16(other.value)); } - simdutf_really_inline simd16 operator>(const simd16 other) const { return vcgtq_s16(vreinterpretq_s16_u16(this->value), vreinterpretq_s16_u16(other.value)); } - simdutf_really_inline simd16 operator<(const simd16 other) const { return vcltq_s16(vreinterpretq_s16_u16(this->value), vreinterpretq_s16_u16(other.value)); } -}; - - - - -// Unsigned code units -template<> -struct simd16: base16_numeric { - simdutf_really_inline simd16() : base16_numeric() {} - simdutf_really_inline simd16(const uint16x8_t _value) : base16_numeric(_value) {} - - // Splat constructor - simdutf_really_inline simd16(uint16_t _value) : simd16(splat(_value)) {} - // Array constructor - simdutf_really_inline simd16(const uint16_t* values) : simd16(load(values)) {} - simdutf_really_inline simd16(const char16_t* values) : simd16(load(reinterpret_cast(values))) {} + simdutf_really_inline simd8(const int8_t *values) : simd8(load(values)) {} + // Member-by-member initialization +#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO + simdutf_really_inline simd8(int8_t v0, int8_t v1, int8_t v2, int8_t v3, + int8_t v4, int8_t v5, int8_t v6, int8_t v7, + int8_t v8, int8_t v9, int8_t v10, int8_t v11, + int8_t v12, int8_t v13, int8_t v14, int8_t v15) + : simd8(simdutf_make_int8x16_t(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, + v10, v11, v12, v13, v14, v15)) {} +#else + simdutf_really_inline simd8(int8_t v0, int8_t v1, int8_t v2, int8_t v3, + int8_t v4, int8_t v5, int8_t v6, int8_t v7, + int8_t v8, int8_t v9, int8_t v10, int8_t v11, + int8_t v12, int8_t v13, int8_t v14, int8_t v15) + : simd8(int8x16_t{v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, + v13, v14, v15}) {} +#endif + // Repeat 16 values as many times as necessary (usually for lookup tables) + simdutf_really_inline static simd8 + repeat_16(int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, + int8_t v6, int8_t v7, int8_t v8, int8_t v9, int8_t v10, int8_t v11, + int8_t v12, int8_t v13, int8_t v14, int8_t v15) { + return simd8(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, + v13, v14, v15); + } + // Store to array + simdutf_really_inline void store(int8_t dst[16]) const { + return vst1q_s8(dst, value); + } + // Explicit conversion to/from unsigned + // + // Under Visual Studio/ARM64 uint8x16_t and int8x16_t are apparently the same + // type. In theory, we could check this occurrence with std::same_as and + // std::enabled_if but it is C++14 and relatively ugly and hard to read. +#ifndef SIMDUTF_REGULAR_VISUAL_STUDIO + simdutf_really_inline explicit simd8(const uint8x16_t other) + : simd8(vreinterpretq_s8_u8(other)) {} +#endif + simdutf_really_inline operator simd8() const { + return vreinterpretq_u8_s8(this->value); + } - simdutf_really_inline int16_t max_val() const { return vmaxvq_u16(*this); } - simdutf_really_inline int16_t min_val() const { return vminvq_u16(*this); } - // Saturated math - simdutf_really_inline simd16 saturating_add(const simd16 other) const { return vqaddq_u16(*this, other); } - simdutf_really_inline simd16 saturating_sub(const simd16 other) const { return vqsubq_u16(*this, other); } + simdutf_really_inline simd8 + operator|(const simd8 other) const { + return vorrq_s8(value, other.value); + } + simdutf_really_inline simd8 + operator&(const simd8 other) const { + return vandq_s8(value, other.value); + } + simdutf_really_inline simd8 + operator^(const simd8 other) const { + return veorq_s8(value, other.value); + } + simdutf_really_inline simd8 + bit_andnot(const simd8 other) const { + return vbicq_s8(value, other.value); + } - // Order-specific operations - simdutf_really_inline simd16 max_val(const simd16 other) const { return vmaxq_u16(*this, other); } - simdutf_really_inline simd16 min_val(const simd16 other) const { return vminq_u16(*this, other); } - // Same as >, but only guarantees true is nonzero (< guarantees true = -1) - simdutf_really_inline simd16 gt_bits(const simd16 other) const { return this->saturating_sub(other); } - // Same as <, but only guarantees true is nonzero (< guarantees true = -1) - simdutf_really_inline simd16 lt_bits(const simd16 other) const { return other.saturating_sub(*this); } - simdutf_really_inline simd16 operator<=(const simd16 other) const { return vcleq_u16(*this, other); } - simdutf_really_inline simd16 operator>=(const simd16 other) const { return vcgeq_u16(*this, other); } - simdutf_really_inline simd16 operator>(const simd16 other) const { return vcgtq_u16(*this, other); } - simdutf_really_inline simd16 operator<(const simd16 other) const { return vcltq_u16(*this, other); } + // Math + simdutf_really_inline simd8 + operator+(const simd8 other) const { + return vaddq_s8(value, other.value); + } + simdutf_really_inline simd8 + operator-(const simd8 other) const { + return vsubq_s8(value, other.value); + } + simdutf_really_inline simd8 &operator+=(const simd8 other) { + *this = *this + other; + return *this; + } + simdutf_really_inline simd8 &operator-=(const simd8 other) { + *this = *this - other; + return *this; + } - // Bit-specific operations - simdutf_really_inline simd16 bits_not_set() const { return *this == uint16_t(0); } - template - simdutf_really_inline simd16 shr() const { return simd16(vshrq_n_u16(*this, N)); } - template - simdutf_really_inline simd16 shl() const { return simd16(vshlq_n_u16(*this, N)); } + simdutf_really_inline int8_t max_val() const { return vmaxvq_s8(value); } + simdutf_really_inline int8_t min_val() const { return vminvq_s8(value); } + simdutf_really_inline bool is_ascii() const { return this->min_val() >= 0; } - // logical operations - simdutf_really_inline simd16 operator|(const simd16 other) const { return vorrq_u16(*this, other); } - simdutf_really_inline simd16 operator&(const simd16 other) const { return vandq_u16(*this, other); } - simdutf_really_inline simd16 operator^(const simd16 other) const { return veorq_u16(*this, other); } + // Order-sensitive comparisons + simdutf_really_inline simd8 max_val(const simd8 other) const { + return vmaxq_s8(value, other.value); + } + simdutf_really_inline simd8 min_val(const simd8 other) const { + return vminq_s8(value, other.value); + } + simdutf_really_inline simd8 operator>(const simd8 other) const { + return vcgtq_s8(value, other.value); + } + simdutf_really_inline simd8 operator<(const simd8 other) const { + return vcltq_s8(value, other.value); + } + simdutf_really_inline simd8 + operator==(const simd8 other) const { + return vceqq_s8(value, other.value); + } - // Pack with the unsigned saturation of two uint16_t code units into single uint8_t vector - static simdutf_really_inline simd8 pack(const simd16& v0, const simd16& v1) { - return vqmovn_high_u16(vqmovn_u16(v0), v1); + template + simdutf_really_inline simd8 + prev(const simd8 prev_chunk) const { + return vextq_s8(prev_chunk, *this, 16 - N); } - // Change the endianness - simdutf_really_inline simd16 swap_bytes() const { - return vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(*this))); + // Perform a lookup assuming no value is larger than 16 + template + simdutf_really_inline simd8 lookup_16(simd8 lookup_table) const { + return lookup_table.apply_lookup_16_to(*this); + } + template + simdutf_really_inline simd8 + lookup_16(L replace0, L replace1, L replace2, L replace3, L replace4, + L replace5, L replace6, L replace7, L replace8, L replace9, + L replace10, L replace11, L replace12, L replace13, L replace14, + L replace15) const { + return lookup_16(simd8::repeat_16( + replace0, replace1, replace2, replace3, replace4, replace5, replace6, + replace7, replace8, replace9, replace10, replace11, replace12, + replace13, replace14, replace15)); + } + + template + simdutf_really_inline simd8 + apply_lookup_16_to(const simd8 original) const { + return vqtbl1q_s8(*this, simd8(original)); } }; -simdutf_really_inline simd16::operator simd16() const { return this->value; } +template struct simd8x64 { + static constexpr int NUM_CHUNKS = 64 / sizeof(simd8); + static_assert(NUM_CHUNKS == 4, + "ARM kernel should use four registers per 64-byte block."); + simd8 chunks[NUM_CHUNKS]; - template - struct simd16x32 { - static constexpr int NUM_CHUNKS = 64 / sizeof(simd16); - static_assert(NUM_CHUNKS == 4, "ARM kernel should use four registers per 64-byte block."); - simd16 chunks[NUM_CHUNKS]; + simd8x64(const simd8x64 &o) = delete; // no copy allowed + simd8x64 & + operator=(const simd8 other) = delete; // no assignment allowed + simd8x64() = delete; // no default constructor allowed - simd16x32(const simd16x32& o) = delete; // no copy allowed - simd16x32& operator=(const simd16 other) = delete; // no assignment allowed - simd16x32() = delete; // no default constructor allowed + simdutf_really_inline simd8x64(const simd8 chunk0, const simd8 chunk1, + const simd8 chunk2, const simd8 chunk3) + : chunks{chunk0, chunk1, chunk2, chunk3} {} + simdutf_really_inline simd8x64(const T *ptr) + : chunks{simd8::load(ptr), + simd8::load(ptr + sizeof(simd8) / sizeof(T)), + simd8::load(ptr + 2 * sizeof(simd8) / sizeof(T)), + simd8::load(ptr + 3 * sizeof(simd8) / sizeof(T))} {} - simdutf_really_inline simd16x32(const simd16 chunk0, const simd16 chunk1, const simd16 chunk2, const simd16 chunk3) : chunks{chunk0, chunk1, chunk2, chunk3} {} - simdutf_really_inline simd16x32(const T* ptr) : chunks{simd16::load(ptr), simd16::load(ptr+sizeof(simd16)/sizeof(T)), simd16::load(ptr+2*sizeof(simd16)/sizeof(T)), simd16::load(ptr+3*sizeof(simd16)/sizeof(T))} {} + simdutf_really_inline void store(T *ptr) const { + this->chunks[0].store(ptr + sizeof(simd8) * 0 / sizeof(T)); + this->chunks[1].store(ptr + sizeof(simd8) * 1 / sizeof(T)); + this->chunks[2].store(ptr + sizeof(simd8) * 2 / sizeof(T)); + this->chunks[3].store(ptr + sizeof(simd8) * 3 / sizeof(T)); + } - simdutf_really_inline void store(T* ptr) const { - this->chunks[0].store(ptr+sizeof(simd16)*0/sizeof(T)); - this->chunks[1].store(ptr+sizeof(simd16)*1/sizeof(T)); - this->chunks[2].store(ptr+sizeof(simd16)*2/sizeof(T)); - this->chunks[3].store(ptr+sizeof(simd16)*3/sizeof(T)); - } + simdutf_really_inline simd8x64 &operator|=(const simd8x64 &other) { + this->chunks[0] |= other.chunks[0]; + this->chunks[1] |= other.chunks[1]; + this->chunks[2] |= other.chunks[2]; + this->chunks[3] |= other.chunks[3]; + return *this; + } - simdutf_really_inline simd16 reduce_or() const { - return (this->chunks[0] | this->chunks[1]) | (this->chunks[2] | this->chunks[3]); - } + simdutf_really_inline simd8 reduce_or() const { + return (this->chunks[0] | this->chunks[1]) | + (this->chunks[2] | this->chunks[3]); + } - simdutf_really_inline bool is_ascii() const { - return reduce_or().is_ascii(); - } + simdutf_really_inline bool is_ascii() const { return reduce_or().is_ascii(); } - simdutf_really_inline void store_ascii_as_utf16(char16_t * ptr) const { - this->chunks[0].store_ascii_as_utf16(ptr+sizeof(simd16)*0); - this->chunks[1].store_ascii_as_utf16(ptr+sizeof(simd16)*1); - this->chunks[2].store_ascii_as_utf16(ptr+sizeof(simd16)*2); - this->chunks[3].store_ascii_as_utf16(ptr+sizeof(simd16)*3); - } + template + simdutf_really_inline void store_ascii_as_utf16(char16_t *ptr) const { + this->chunks[0].template store_ascii_as_utf16(ptr + + sizeof(simd8) * 0); + this->chunks[1].template store_ascii_as_utf16(ptr + + sizeof(simd8) * 1); + this->chunks[2].template store_ascii_as_utf16(ptr + + sizeof(simd8) * 2); + this->chunks[3].template store_ascii_as_utf16(ptr + + sizeof(simd8) * 3); + } + + simdutf_really_inline void store_ascii_as_utf32(char32_t *ptr) const { + this->chunks[0].store_ascii_as_utf32_tbl(ptr + sizeof(simd8) * 0); + this->chunks[1].store_ascii_as_utf32_tbl(ptr + sizeof(simd8) * 1); + this->chunks[2].store_ascii_as_utf32_tbl(ptr + sizeof(simd8) * 2); + this->chunks[3].store_ascii_as_utf32_tbl(ptr + sizeof(simd8) * 3); + } - simdutf_really_inline uint64_t to_bitmask() const { + simdutf_really_inline uint64_t to_bitmask() const { #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - const uint8x16_t bit_mask = simdutf_make_uint8x16_t( - 0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, - 0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80 - ); + const uint8x16_t bit_mask = + simdutf_make_uint8x16_t(0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, + 0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80); #else - const uint8x16_t bit_mask = { - 0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, - 0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80 - }; + const uint8x16_t bit_mask = {0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, + 0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; #endif - // Add each of the elements next to each other, successively, to stuff each 8 byte mask into one. - uint8x16_t sum0 = vpaddq_u8(vreinterpretq_u8_u16(this->chunks[0] & vreinterpretq_u16_u8(bit_mask)), vreinterpretq_u8_u16(this->chunks[1] & vreinterpretq_u16_u8(bit_mask))); - uint8x16_t sum1 = vpaddq_u8(vreinterpretq_u8_u16(this->chunks[2] & vreinterpretq_u16_u8(bit_mask)), vreinterpretq_u8_u16(this->chunks[3] & vreinterpretq_u16_u8(bit_mask))); - sum0 = vpaddq_u8(sum0, sum1); - sum0 = vpaddq_u8(sum0, sum0); - return vgetq_lane_u64(vreinterpretq_u64_u8(sum0), 0); - } - - simdutf_really_inline void swap_bytes() { - this->chunks[0] = this->chunks[0].swap_bytes(); - this->chunks[1] = this->chunks[1].swap_bytes(); - this->chunks[2] = this->chunks[2].swap_bytes(); - this->chunks[3] = this->chunks[3].swap_bytes(); - } + // Add each of the elements next to each other, successively, to stuff each + // 8 byte mask into one. + uint8x16_t sum0 = + vpaddq_u8(vandq_u8(uint8x16_t(this->chunks[0]), bit_mask), + vandq_u8(uint8x16_t(this->chunks[1]), bit_mask)); + uint8x16_t sum1 = + vpaddq_u8(vandq_u8(uint8x16_t(this->chunks[2]), bit_mask), + vandq_u8(uint8x16_t(this->chunks[3]), bit_mask)); + sum0 = vpaddq_u8(sum0, sum1); + sum0 = vpaddq_u8(sum0, sum0); + return vgetq_lane_u64(vreinterpretq_u64_u8(sum0), 0); + } - simdutf_really_inline uint64_t eq(const T m) const { - const simd16 mask = simd16::splat(m); - return simd16x32( - this->chunks[0] == mask, - this->chunks[1] == mask, - this->chunks[2] == mask, - this->chunks[3] == mask - ).to_bitmask(); + simdutf_really_inline uint64_t eq(const T m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(this->chunks[0] == mask, this->chunks[1] == mask, + this->chunks[2] == mask, this->chunks[3] == mask) + .to_bitmask(); } simdutf_really_inline uint64_t lteq(const T m) const { - const simd16 mask = simd16::splat(m); - return simd16x32( - this->chunks[0] <= mask, - this->chunks[1] <= mask, - this->chunks[2] <= mask, - this->chunks[3] <= mask - ).to_bitmask(); - } - - simdutf_really_inline uint64_t in_range(const T low, const T high) const { - const simd16 mask_low = simd16::splat(low); - const simd16 mask_high = simd16::splat(high); - - return simd16x32( - (this->chunks[0] <= mask_high) & (this->chunks[0] >= mask_low), - (this->chunks[1] <= mask_high) & (this->chunks[1] >= mask_low), - (this->chunks[2] <= mask_high) & (this->chunks[2] >= mask_low), - (this->chunks[3] <= mask_high) & (this->chunks[3] >= mask_low) - ).to_bitmask(); - } - simdutf_really_inline uint64_t not_in_range(const T low, const T high) const { - const simd16 mask_low = simd16::splat(low); - const simd16 mask_high = simd16::splat(high); - return simd16x32( - (this->chunks[0] > mask_high) | (this->chunks[0] < mask_low), - (this->chunks[1] > mask_high) | (this->chunks[1] < mask_low), - (this->chunks[2] > mask_high) | (this->chunks[2] < mask_low), - (this->chunks[3] > mask_high) | (this->chunks[3] < mask_low) - ).to_bitmask(); - } - simdutf_really_inline uint64_t lt(const T m) const { - const simd16 mask = simd16::splat(m); - return simd16x32( - this->chunks[0] < mask, - this->chunks[1] < mask, - this->chunks[2] < mask, - this->chunks[3] < mask - ).to_bitmask(); - } - - }; // struct simd16x32 - template<> - simdutf_really_inline uint64_t simd16x32::not_in_range(const uint16_t low, const uint16_t high) const { - const simd16 mask_low = simd16::splat(low); - const simd16 mask_high = simd16::splat(high); - simd16x32 x( - simd16((this->chunks[0] > mask_high) | (this->chunks[0] < mask_low)), - simd16((this->chunks[1] > mask_high) | (this->chunks[1] < mask_low)), - simd16((this->chunks[2] > mask_high) | (this->chunks[2] < mask_low)), - simd16((this->chunks[3] > mask_high) | (this->chunks[3] < mask_low)) - ); - return x.to_bitmask(); - } -/* end file src/simdutf/arm64/simd16-inl.h */ -} // namespace simd -} // unnamed namespace -} // namespace arm64 -} // namespace simdutf + const simd8 mask = simd8::splat(m); + return simd8x64(this->chunks[0] <= mask, this->chunks[1] <= mask, + this->chunks[2] <= mask, this->chunks[3] <= mask) + .to_bitmask(); + } -#endif // SIMDUTF_ARM64_SIMD_H -/* end file src/simdutf/arm64/simd.h */ + simdutf_really_inline uint64_t in_range(const T low, const T high) const { + const simd8 mask_low = simd8::splat(low); + const simd8 mask_high = simd8::splat(high); + + return simd8x64( + (this->chunks[0] <= mask_high) & (this->chunks[0] >= mask_low), + (this->chunks[1] <= mask_high) & (this->chunks[1] >= mask_low), + (this->chunks[2] <= mask_high) & (this->chunks[2] >= mask_low), + (this->chunks[3] <= mask_high) & (this->chunks[3] >= mask_low)) + .to_bitmask(); + } + simdutf_really_inline uint64_t not_in_range(const T low, const T high) const { + const simd8 mask_low = simd8::splat(low); + const simd8 mask_high = simd8::splat(high); + return simd8x64( + (this->chunks[0] > mask_high) | (this->chunks[0] < mask_low), + (this->chunks[1] > mask_high) | (this->chunks[1] < mask_low), + (this->chunks[2] > mask_high) | (this->chunks[2] < mask_low), + (this->chunks[3] > mask_high) | (this->chunks[3] < mask_low)) + .to_bitmask(); + } + simdutf_really_inline uint64_t lt(const T m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(this->chunks[0] < mask, this->chunks[1] < mask, + this->chunks[2] < mask, this->chunks[3] < mask) + .to_bitmask(); + } + simdutf_really_inline uint64_t gt(const T m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(this->chunks[0] > mask, this->chunks[1] > mask, + this->chunks[2] > mask, this->chunks[3] > mask) + .to_bitmask(); + } + simdutf_really_inline uint64_t gteq(const T m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(this->chunks[0] >= mask, this->chunks[1] >= mask, + this->chunks[2] >= mask, this->chunks[3] >= mask) + .to_bitmask(); + } + simdutf_really_inline uint64_t gteq_unsigned(const uint8_t m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(simd8(uint8x16_t(this->chunks[0])) >= mask, + simd8(uint8x16_t(this->chunks[1])) >= mask, + simd8(uint8x16_t(this->chunks[2])) >= mask, + simd8(uint8x16_t(this->chunks[3])) >= mask) + .to_bitmask(); + } +}; // struct simd8x64 +/* begin file src/simdutf/arm64/simd16-inl.h */ +template struct simd16; -/* begin file src/simdutf/arm64/end.h */ -/* end file src/simdutf/arm64/end.h */ +template > struct base_u16 { + uint16x8_t value; + static const int SIZE = sizeof(value); -#endif // SIMDUTF_IMPLEMENTATION_ARM64 + // Conversion from/to SIMD register + simdutf_really_inline base_u16() = default; + simdutf_really_inline base_u16(const uint16x8_t _value) : value(_value) {} + simdutf_really_inline operator const uint16x8_t &() const { + return this->value; + } + simdutf_really_inline operator uint16x8_t &() { return this->value; } + // Bit operations + simdutf_really_inline simd16 operator|(const simd16 other) const { + return vorrq_u16(*this, other); + } + simdutf_really_inline simd16 operator&(const simd16 other) const { + return vandq_u16(*this, other); + } + simdutf_really_inline simd16 operator^(const simd16 other) const { + return veorq_u16(*this, other); + } + simdutf_really_inline simd16 bit_andnot(const simd16 other) const { + return vbicq_u16(*this, other); + } + simdutf_really_inline simd16 operator~() const { return *this ^ 0xFFu; } + simdutf_really_inline simd16 &operator|=(const simd16 other) { + auto this_cast = static_cast *>(this); + *this_cast = *this_cast | other; + return *this_cast; + } + simdutf_really_inline simd16 &operator&=(const simd16 other) { + auto this_cast = static_cast *>(this); + *this_cast = *this_cast & other; + return *this_cast; + } + simdutf_really_inline simd16 &operator^=(const simd16 other) { + auto this_cast = static_cast *>(this); + *this_cast = *this_cast ^ other; + return *this_cast; + } -#endif // SIMDUTF_ARM64_H -/* end file src/simdutf/arm64.h */ -/* begin file src/simdutf/icelake.h */ -#ifndef SIMDUTF_ICELAKE_H -#define SIMDUTF_ICELAKE_H + friend simdutf_really_inline Mask operator==(const simd16 lhs, + const simd16 rhs) { + return vceqq_u16(lhs, rhs); + } + template + simdutf_really_inline simd16 prev(const simd16 prev_chunk) const { + return vextq_u18(prev_chunk, *this, 8 - N); + } +}; +template > +struct base16 : base_u16 { + typedef uint16_t bitmask_t; + typedef uint32_t bitmask2_t; -#ifdef __has_include -// How do we detect that a compiler supports vbmi2? -// For sure if the following header is found, we are ok? -#if __has_include() -#define SIMDUTF_COMPILER_SUPPORTS_VBMI2 1 -#endif -#endif + simdutf_really_inline base16() : base_u16() {} + simdutf_really_inline base16(const uint16x8_t _value) : base_u16(_value) {} + template + simdutf_really_inline base16(const Pointer *ptr) : base16(vld1q_u16(ptr)) {} -#ifdef _MSC_VER -#if _MSC_VER >= 1930 -// Visual Studio 2022 and up support VBMI2 under x64 even if the header -// avx512vbmi2intrin.h is not found. -// Visual Studio 2019 technically supports VBMI2, but the implementation -// might be unreliable. Search for visualstudio2019icelakeissue in our -// tests. -#define SIMDUTF_COMPILER_SUPPORTS_VBMI2 1 -#endif -#endif + static const int SIZE = sizeof(base_u16::value); -// We allow icelake on x64 as long as the compiler is known to support VBMI2. -#ifndef SIMDUTF_IMPLEMENTATION_ICELAKE -#define SIMDUTF_IMPLEMENTATION_ICELAKE ((SIMDUTF_IS_X86_64) && (SIMDUTF_COMPILER_SUPPORTS_VBMI2)) -#endif + template + simdutf_really_inline simd16 prev(const simd16 prev_chunk) const { + return vextq_u18(prev_chunk, *this, 8 - N); + } +}; -// To see why (__BMI__) && (__LZCNT__) are not part of this next line, see -// https://github.com/simdutf/simdutf/issues/1247 -#if ((SIMDUTF_IMPLEMENTATION_ICELAKE) && (SIMDUTF_IS_X86_64) && (__AVX2__) && (SIMDUTF_HAS_AVX512F && \ - SIMDUTF_HAS_AVX512DQ && \ - SIMDUTF_HAS_AVX512VL && \ - SIMDUTF_HAS_AVX512VBMI2) && (!SIMDUTF_IS_32BITS)) -#define SIMDUTF_CAN_ALWAYS_RUN_ICELAKE 1 -#else -#define SIMDUTF_CAN_ALWAYS_RUN_ICELAKE 0 -#endif +// SIMD byte mask type (returned by things like eq and gt) +template <> struct simd16 : base16 { + static simdutf_really_inline simd16 splat(bool _value) { + return vmovq_n_u16(uint16_t(-(!!_value))); + } -#if SIMDUTF_IMPLEMENTATION_ICELAKE -#if SIMDUTF_CAN_ALWAYS_RUN_ICELAKE -#define SIMDUTF_TARGET_ICELAKE -#else -#define SIMDUTF_TARGET_ICELAKE SIMDUTF_TARGET_REGION("avx512f,avx512dq,avx512cd,avx512bw,avx512vbmi,avx512vbmi2,avx512vl,avx2,bmi,bmi2,pclmul,lzcnt,popcnt,avx512vpopcntdq") -#endif + simdutf_really_inline simd16() : base16() {} + simdutf_really_inline simd16(const uint16x8_t _value) + : base16(_value) {} + // Splat constructor + simdutf_really_inline simd16(bool _value) : base16(splat(_value)) {} +}; -namespace simdutf { -namespace icelake { -} // namespace icelake -} // namespace simdutf +template struct base16_numeric : base16 { + static simdutf_really_inline simd16 splat(T _value) { + return vmovq_n_u16(_value); + } + static simdutf_really_inline simd16 zero() { return vdupq_n_u16(0); } + static simdutf_really_inline simd16 load(const T values[8]) { + return vld1q_u16(reinterpret_cast(values)); + } + simdutf_really_inline base16_numeric() : base16() {} + simdutf_really_inline base16_numeric(const uint16x8_t _value) + : base16(_value) {} + // Store to array + simdutf_really_inline void store(T dst[8]) const { + return vst1q_u16(dst, *this); + } -// -// These two need to be included outside SIMDUTF_TARGET_REGION -// -/* begin file src/simdutf/icelake/intrinsics.h */ -#ifndef SIMDUTF_ICELAKE_INTRINSICS_H -#define SIMDUTF_ICELAKE_INTRINSICS_H + // Override to distinguish from bool version + simdutf_really_inline simd16 operator~() const { return *this ^ 0xFFu; } + // Addition/subtraction are the same for signed and unsigned + simdutf_really_inline simd16 operator+(const simd16 other) const { + return vaddq_u8(*this, other); + } + simdutf_really_inline simd16 operator-(const simd16 other) const { + return vsubq_u8(*this, other); + } + simdutf_really_inline simd16 &operator+=(const simd16 other) { + *this = *this + other; + return *static_cast *>(this); + } + simdutf_really_inline simd16 &operator-=(const simd16 other) { + *this = *this - other; + return *static_cast *>(this); + } +}; -#ifdef SIMDUTF_VISUAL_STUDIO -// under clang within visual studio, this will include -#include // visual studio or clang -#include -#else +// Signed code units +template <> struct simd16 : base16_numeric { + simdutf_really_inline simd16() : base16_numeric() {} +#ifndef SIMDUTF_REGULAR_VISUAL_STUDIO + simdutf_really_inline simd16(const uint16x8_t _value) + : base16_numeric(_value) {} +#endif + simdutf_really_inline simd16(const int16x8_t _value) + : base16_numeric(vreinterpretq_u16_s16(_value)) {} -#if SIMDUTF_GCC11ORMORE -// We should not get warnings while including yet we do -// under some versions of GCC. -// If the x86intrin.h header has uninitialized values that are problematic, -// it is a GCC issue, we want to ignore these warnings. -SIMDUTF_DISABLE_GCC_WARNING(-Wuninitialized) + // Splat constructor + simdutf_really_inline simd16(int16_t _value) : simd16(splat(_value)) {} + // Array constructor + simdutf_really_inline simd16(const int16_t *values) : simd16(load(values)) {} + simdutf_really_inline simd16(const char16_t *values) + : simd16(load(reinterpret_cast(values))) {} + simdutf_really_inline operator simd16() const; + simdutf_really_inline operator const uint16x8_t &() const { + return this->value; + } + simdutf_really_inline operator const int16x8_t() const { + return vreinterpretq_s16_u16(this->value); + } + + simdutf_really_inline int16_t max_val() const { + return vmaxvq_s16(vreinterpretq_s16_u16(this->value)); + } + simdutf_really_inline int16_t min_val() const { + return vminvq_s16(vreinterpretq_s16_u16(this->value)); + } + // Order-sensitive comparisons + simdutf_really_inline simd16 + max_val(const simd16 other) const { + return vmaxq_s16(vreinterpretq_s16_u16(this->value), + vreinterpretq_s16_u16(other.value)); + } + simdutf_really_inline simd16 + min_val(const simd16 other) const { + return vmaxq_s16(vreinterpretq_s16_u16(this->value), + vreinterpretq_s16_u16(other.value)); + } + simdutf_really_inline simd16 + operator>(const simd16 other) const { + return vcgtq_s16(vreinterpretq_s16_u16(this->value), + vreinterpretq_s16_u16(other.value)); + } + simdutf_really_inline simd16 + operator<(const simd16 other) const { + return vcltq_s16(vreinterpretq_s16_u16(this->value), + vreinterpretq_s16_u16(other.value)); + } +}; + +// Unsigned code units +template <> struct simd16 : base16_numeric { + simdutf_really_inline simd16() : base16_numeric() {} + simdutf_really_inline simd16(const uint16x8_t _value) + : base16_numeric(_value) {} + + // Splat constructor + simdutf_really_inline simd16(uint16_t _value) : simd16(splat(_value)) {} + // Array constructor + simdutf_really_inline simd16(const uint16_t *values) : simd16(load(values)) {} + simdutf_really_inline simd16(const char16_t *values) + : simd16(load(reinterpret_cast(values))) {} + + simdutf_really_inline int16_t max_val() const { return vmaxvq_u16(*this); } + simdutf_really_inline int16_t min_val() const { return vminvq_u16(*this); } + // Saturated math + simdutf_really_inline simd16 + saturating_add(const simd16 other) const { + return vqaddq_u16(*this, other); + } + simdutf_really_inline simd16 + saturating_sub(const simd16 other) const { + return vqsubq_u16(*this, other); + } + + // Order-specific operations + simdutf_really_inline simd16 + max_val(const simd16 other) const { + return vmaxq_u16(*this, other); + } + simdutf_really_inline simd16 + min_val(const simd16 other) const { + return vminq_u16(*this, other); + } + // Same as >, but only guarantees true is nonzero (< guarantees true = -1) + simdutf_really_inline simd16 + gt_bits(const simd16 other) const { + return this->saturating_sub(other); + } + // Same as <, but only guarantees true is nonzero (< guarantees true = -1) + simdutf_really_inline simd16 + lt_bits(const simd16 other) const { + return other.saturating_sub(*this); + } + simdutf_really_inline simd16 + operator<=(const simd16 other) const { + return vcleq_u16(*this, other); + } + simdutf_really_inline simd16 + operator>=(const simd16 other) const { + return vcgeq_u16(*this, other); + } + simdutf_really_inline simd16 + operator>(const simd16 other) const { + return vcgtq_u16(*this, other); + } + simdutf_really_inline simd16 + operator<(const simd16 other) const { + return vcltq_u16(*this, other); + } + + // Bit-specific operations + simdutf_really_inline simd16 bits_not_set() const { + return *this == uint16_t(0); + } + template simdutf_really_inline simd16 shr() const { + return simd16(vshrq_n_u16(*this, N)); + } + template simdutf_really_inline simd16 shl() const { + return simd16(vshlq_n_u16(*this, N)); + } + + // logical operations + simdutf_really_inline simd16 + operator|(const simd16 other) const { + return vorrq_u16(*this, other); + } + simdutf_really_inline simd16 + operator&(const simd16 other) const { + return vandq_u16(*this, other); + } + simdutf_really_inline simd16 + operator^(const simd16 other) const { + return veorq_u16(*this, other); + } + + // Pack with the unsigned saturation of two uint16_t code units into single + // uint8_t vector + static simdutf_really_inline simd8 pack(const simd16 &v0, + const simd16 &v1) { + return vqmovn_high_u16(vqmovn_u16(v0), v1); + } + + // Change the endianness + simdutf_really_inline simd16 swap_bytes() const { + return vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(*this))); + } +}; +simdutf_really_inline simd16::operator simd16() const { + return this->value; +} + +template struct simd16x32 { + static constexpr int NUM_CHUNKS = 64 / sizeof(simd16); + static_assert(NUM_CHUNKS == 4, + "ARM kernel should use four registers per 64-byte block."); + simd16 chunks[NUM_CHUNKS]; + + simd16x32(const simd16x32 &o) = delete; // no copy allowed + simd16x32 & + operator=(const simd16 other) = delete; // no assignment allowed + simd16x32() = delete; // no default constructor allowed + + simdutf_really_inline + simd16x32(const simd16 chunk0, const simd16 chunk1, + const simd16 chunk2, const simd16 chunk3) + : chunks{chunk0, chunk1, chunk2, chunk3} {} + simdutf_really_inline simd16x32(const T *ptr) + : chunks{simd16::load(ptr), + simd16::load(ptr + sizeof(simd16) / sizeof(T)), + simd16::load(ptr + 2 * sizeof(simd16) / sizeof(T)), + simd16::load(ptr + 3 * sizeof(simd16) / sizeof(T))} {} + + simdutf_really_inline void store(T *ptr) const { + this->chunks[0].store(ptr + sizeof(simd16) * 0 / sizeof(T)); + this->chunks[1].store(ptr + sizeof(simd16) * 1 / sizeof(T)); + this->chunks[2].store(ptr + sizeof(simd16) * 2 / sizeof(T)); + this->chunks[3].store(ptr + sizeof(simd16) * 3 / sizeof(T)); + } + + simdutf_really_inline simd16 reduce_or() const { + return (this->chunks[0] | this->chunks[1]) | + (this->chunks[2] | this->chunks[3]); + } + + simdutf_really_inline bool is_ascii() const { return reduce_or().is_ascii(); } + + simdutf_really_inline void store_ascii_as_utf16(char16_t *ptr) const { + this->chunks[0].store_ascii_as_utf16(ptr + sizeof(simd16) * 0); + this->chunks[1].store_ascii_as_utf16(ptr + sizeof(simd16) * 1); + this->chunks[2].store_ascii_as_utf16(ptr + sizeof(simd16) * 2); + this->chunks[3].store_ascii_as_utf16(ptr + sizeof(simd16) * 3); + } + + simdutf_really_inline uint64_t to_bitmask() const { +#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO + const uint8x16_t bit_mask = + simdutf_make_uint8x16_t(0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, + 0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80); +#else + const uint8x16_t bit_mask = {0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, + 0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; #endif + // Add each of the elements next to each other, successively, to stuff each + // 8 byte mask into one. + uint8x16_t sum0 = vpaddq_u8( + vreinterpretq_u8_u16(this->chunks[0] & vreinterpretq_u16_u8(bit_mask)), + vreinterpretq_u8_u16(this->chunks[1] & vreinterpretq_u16_u8(bit_mask))); + uint8x16_t sum1 = vpaddq_u8( + vreinterpretq_u8_u16(this->chunks[2] & vreinterpretq_u16_u8(bit_mask)), + vreinterpretq_u8_u16(this->chunks[3] & vreinterpretq_u16_u8(bit_mask))); + sum0 = vpaddq_u8(sum0, sum1); + sum0 = vpaddq_u8(sum0, sum0); + return vgetq_lane_u64(vreinterpretq_u64_u8(sum0), 0); + } -#include // elsewhere + simdutf_really_inline void swap_bytes() { + this->chunks[0] = this->chunks[0].swap_bytes(); + this->chunks[1] = this->chunks[1].swap_bytes(); + this->chunks[2] = this->chunks[2].swap_bytes(); + this->chunks[3] = this->chunks[3].swap_bytes(); + } + simdutf_really_inline uint64_t eq(const T m) const { + const simd16 mask = simd16::splat(m); + return simd16x32(this->chunks[0] == mask, this->chunks[1] == mask, + this->chunks[2] == mask, this->chunks[3] == mask) + .to_bitmask(); + } -#if SIMDUTF_GCC11ORMORE -// cancels the suppression of the -Wuninitialized -SIMDUTF_POP_DISABLE_WARNINGS + simdutf_really_inline uint64_t lteq(const T m) const { + const simd16 mask = simd16::splat(m); + return simd16x32(this->chunks[0] <= mask, this->chunks[1] <= mask, + this->chunks[2] <= mask, this->chunks[3] <= mask) + .to_bitmask(); + } + + simdutf_really_inline uint64_t in_range(const T low, const T high) const { + const simd16 mask_low = simd16::splat(low); + const simd16 mask_high = simd16::splat(high); + + return simd16x32( + (this->chunks[0] <= mask_high) & (this->chunks[0] >= mask_low), + (this->chunks[1] <= mask_high) & (this->chunks[1] >= mask_low), + (this->chunks[2] <= mask_high) & (this->chunks[2] >= mask_low), + (this->chunks[3] <= mask_high) & (this->chunks[3] >= mask_low)) + .to_bitmask(); + } + simdutf_really_inline uint64_t not_in_range(const T low, const T high) const { + const simd16 mask_low = simd16::splat(low); + const simd16 mask_high = simd16::splat(high); + return simd16x32( + (this->chunks[0] > mask_high) | (this->chunks[0] < mask_low), + (this->chunks[1] > mask_high) | (this->chunks[1] < mask_low), + (this->chunks[2] > mask_high) | (this->chunks[2] < mask_low), + (this->chunks[3] > mask_high) | (this->chunks[3] < mask_low)) + .to_bitmask(); + } + simdutf_really_inline uint64_t lt(const T m) const { + const simd16 mask = simd16::splat(m); + return simd16x32(this->chunks[0] < mask, this->chunks[1] < mask, + this->chunks[2] < mask, this->chunks[3] < mask) + .to_bitmask(); + } + +}; // struct simd16x32 +template <> +simdutf_really_inline uint64_t simd16x32::not_in_range( + const uint16_t low, const uint16_t high) const { + const simd16 mask_low = simd16::splat(low); + const simd16 mask_high = simd16::splat(high); + simd16x32 x(simd16((this->chunks[0] > mask_high) | + (this->chunks[0] < mask_low)), + simd16((this->chunks[1] > mask_high) | + (this->chunks[1] < mask_low)), + simd16((this->chunks[2] > mask_high) | + (this->chunks[2] < mask_low)), + simd16((this->chunks[3] > mask_high) | + (this->chunks[3] < mask_low))); + return x.to_bitmask(); +} +/* end file src/simdutf/arm64/simd16-inl.h */ +} // namespace simd +} // unnamed namespace +} // namespace arm64 +} // namespace simdutf + +#endif // SIMDUTF_ARM64_SIMD_H +/* end file src/simdutf/arm64/simd.h */ + +/* begin file src/simdutf/arm64/end.h */ +/* end file src/simdutf/arm64/end.h */ + +#endif // SIMDUTF_IMPLEMENTATION_ARM64 + +#endif // SIMDUTF_ARM64_H +/* end file src/simdutf/arm64.h */ +/* begin file src/simdutf/icelake.h */ +#ifndef SIMDUTF_ICELAKE_H +#define SIMDUTF_ICELAKE_H + + +#ifdef __has_include + // How do we detect that a compiler supports vbmi2? + // For sure if the following header is found, we are ok? + #if __has_include() + #define SIMDUTF_COMPILER_SUPPORTS_VBMI2 1 + #endif #endif -#ifndef _tzcnt_u64 -#define _tzcnt_u64(x) __tzcnt_u64(x) -#endif // _tzcnt_u64 -#endif // SIMDUTF_VISUAL_STUDIO +#ifdef _MSC_VER + #if _MSC_VER >= 1930 + // Visual Studio 2022 and up support VBMI2 under x64 even if the header + // avx512vbmi2intrin.h is not found. + // Visual Studio 2019 technically supports VBMI2, but the implementation + // might be unreliable. Search for visualstudio2019icelakeissue in our + // tests. + #define SIMDUTF_COMPILER_SUPPORTS_VBMI2 1 + #endif +#endif -#ifdef SIMDUTF_CLANG_VISUAL_STUDIO -/** - * You are not supposed, normally, to include these - * headers directly. Instead you should either include intrin.h - * or x86intrin.h. However, when compiling with clang - * under Windows (i.e., when _MSC_VER is set), these headers - * only get included *if* the corresponding features are detected - * from macros: - * e.g., if __AVX2__ is set... in turn, we normally set these - * macros by compiling against the corresponding architecture - * (e.g., arch:AVX2, -mavx2, etc.) which compiles the whole - * software with these advanced instructions. In simdutf, we - * want to compile the whole program for a generic target, - * and only target our specific kernels. As a workaround, - * we directly include the needed headers. These headers would - * normally guard against such usage, but we carefully included - * (or ) before, so the headers - * are fooled. - */ -#include // for _blsr_u64 -#include // for _pext_u64, _pdep_u64 -#include // for __lzcnt64 -#include // for most things (AVX2, AVX512, _popcnt64) -#include -#include -#include -#include -// Important: we need the AVX-512 headers: -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -// unfortunately, we may not get _blsr_u64, but, thankfully, clang -// has it as a macro. -#ifndef _blsr_u64 -// we roll our own -#define _blsr_u64(n) ((n - 1) & n) -#endif // _blsr_u64 -#endif // SIMDUTF_CLANG_VISUAL_STUDIO +// We allow icelake on x64 as long as the compiler is known to support VBMI2. +#ifndef SIMDUTF_IMPLEMENTATION_ICELAKE + #define SIMDUTF_IMPLEMENTATION_ICELAKE \ + ((SIMDUTF_IS_X86_64) && (SIMDUTF_COMPILER_SUPPORTS_VBMI2)) +#endif + +// To see why (__BMI__) && (__LZCNT__) are not part of this next line, see +// https://github.com/simdutf/simdutf/issues/1247 +#if ((SIMDUTF_IMPLEMENTATION_ICELAKE) && (SIMDUTF_IS_X86_64) && (__AVX2__) && \ + (SIMDUTF_HAS_AVX512F && SIMDUTF_HAS_AVX512DQ && SIMDUTF_HAS_AVX512VL && \ + SIMDUTF_HAS_AVX512VBMI2) && \ + (!SIMDUTF_IS_32BITS)) + #define SIMDUTF_CAN_ALWAYS_RUN_ICELAKE 1 +#else + #define SIMDUTF_CAN_ALWAYS_RUN_ICELAKE 0 +#endif + +#if SIMDUTF_IMPLEMENTATION_ICELAKE + #if SIMDUTF_CAN_ALWAYS_RUN_ICELAKE + #define SIMDUTF_TARGET_ICELAKE + #else + #define SIMDUTF_TARGET_ICELAKE \ + SIMDUTF_TARGET_REGION( \ + "avx512f,avx512dq,avx512cd,avx512bw,avx512vbmi,avx512vbmi2," \ + "avx512vl,avx2,bmi,bmi2,pclmul,lzcnt,popcnt,avx512vpopcntdq") + #endif + +namespace simdutf { +namespace icelake {} // namespace icelake +} // namespace simdutf + + // + // These two need to be included outside SIMDUTF_TARGET_REGION + // +/* begin file src/simdutf/icelake/intrinsics.h */ +#ifndef SIMDUTF_ICELAKE_INTRINSICS_H +#define SIMDUTF_ICELAKE_INTRINSICS_H + + +#ifdef SIMDUTF_VISUAL_STUDIO + // under clang within visual studio, this will include + #include // visual studio or clang + #include +#else + + #if SIMDUTF_GCC11ORMORE +// We should not get warnings while including yet we do +// under some versions of GCC. +// If the x86intrin.h header has uninitialized values that are problematic, +// it is a GCC issue, we want to ignore these warnings. +SIMDUTF_DISABLE_GCC_WARNING(-Wuninitialized) + #endif + + #include // elsewhere + + #if SIMDUTF_GCC11ORMORE +// cancels the suppression of the -Wuninitialized +SIMDUTF_POP_DISABLE_WARNINGS + #endif + #ifndef _tzcnt_u64 + #define _tzcnt_u64(x) __tzcnt_u64(x) + #endif // _tzcnt_u64 +#endif // SIMDUTF_VISUAL_STUDIO +#ifdef SIMDUTF_CLANG_VISUAL_STUDIO + /** + * You are not supposed, normally, to include these + * headers directly. Instead you should either include intrin.h + * or x86intrin.h. However, when compiling with clang + * under Windows (i.e., when _MSC_VER is set), these headers + * only get included *if* the corresponding features are detected + * from macros: + * e.g., if __AVX2__ is set... in turn, we normally set these + * macros by compiling against the corresponding architecture + * (e.g., arch:AVX2, -mavx2, etc.) which compiles the whole + * software with these advanced instructions. In simdutf, we + * want to compile the whole program for a generic target, + * and only target our specific kernels. As a workaround, + * we directly include the needed headers. These headers would + * normally guard against such usage, but we carefully included + * (or ) before, so the headers + * are fooled. + */ + #include // for _blsr_u64 + #include // for _pext_u64, _pdep_u64 + #include // for __lzcnt64 + #include // for most things (AVX2, AVX512, _popcnt64) + #include + #include + #include + #include + // Important: we need the AVX-512 headers: + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + // unfortunately, we may not get _blsr_u64, but, thankfully, clang + // has it as a macro. + #ifndef _blsr_u64 + // we roll our own + #define _blsr_u64(n) ((n - 1) & n) + #endif // _blsr_u64 +#endif // SIMDUTF_CLANG_VISUAL_STUDIO #if defined(__GNUC__) && !defined(__clang__) -#if __GNUC__ == 8 -#define SIMDUTF_GCC8 1 -#elif __GNUC__ == 9 -#define SIMDUTF_GCC9 1 -#endif // __GNUC__ == 8 || __GNUC__ == 9 + #if __GNUC__ == 8 + #define SIMDUTF_GCC8 1 + #elif __GNUC__ == 9 + #define SIMDUTF_GCC9 1 + #endif // __GNUC__ == 8 || __GNUC__ == 9 #endif // defined(__GNUC__) && !defined(__clang__) #if SIMDUTF_GCC8 -#pragma GCC push_options -#pragma GCC target("avx512f") + #pragma GCC push_options + #pragma GCC target("avx512f") /** * GCC 8 fails to provide _mm512_set_epi8. We roll our own. */ -inline __m512i _mm512_set_epi8(uint8_t a0, uint8_t a1, uint8_t a2, uint8_t a3, uint8_t a4, uint8_t a5, uint8_t a6, uint8_t a7, uint8_t a8, uint8_t a9, uint8_t a10, uint8_t a11, uint8_t a12, uint8_t a13, uint8_t a14, uint8_t a15, uint8_t a16, uint8_t a17, uint8_t a18, uint8_t a19, uint8_t a20, uint8_t a21, uint8_t a22, uint8_t a23, uint8_t a24, uint8_t a25, uint8_t a26, uint8_t a27, uint8_t a28, uint8_t a29, uint8_t a30, uint8_t a31, uint8_t a32, uint8_t a33, uint8_t a34, uint8_t a35, uint8_t a36, uint8_t a37, uint8_t a38, uint8_t a39, uint8_t a40, uint8_t a41, uint8_t a42, uint8_t a43, uint8_t a44, uint8_t a45, uint8_t a46, uint8_t a47, uint8_t a48, uint8_t a49, uint8_t a50, uint8_t a51, uint8_t a52, uint8_t a53, uint8_t a54, uint8_t a55, uint8_t a56, uint8_t a57, uint8_t a58, uint8_t a59, uint8_t a60, uint8_t a61, uint8_t a62, uint8_t a63) { - return _mm512_set_epi64(uint64_t(a7) + (uint64_t(a6) << 8) + (uint64_t(a5) << 16) + (uint64_t(a4) << 24) + (uint64_t(a3) << 32) + (uint64_t(a2) << 40) + (uint64_t(a1) << 48) + (uint64_t(a0) << 56), - uint64_t(a15) + (uint64_t(a14) << 8) + (uint64_t(a13) << 16) + (uint64_t(a12) << 24) + (uint64_t(a11) << 32) + (uint64_t(a10) << 40) + (uint64_t(a9) << 48) + (uint64_t(a8) << 56), - uint64_t(a23) + (uint64_t(a22) << 8) + (uint64_t(a21) << 16) + (uint64_t(a20) << 24) + (uint64_t(a19) << 32) + (uint64_t(a18) << 40) + (uint64_t(a17) << 48) + (uint64_t(a16) << 56), - uint64_t(a31) + (uint64_t(a30) << 8) + (uint64_t(a29) << 16) + (uint64_t(a28) << 24) + (uint64_t(a27) << 32) + (uint64_t(a26) << 40) + (uint64_t(a25) << 48) + (uint64_t(a24) << 56), - uint64_t(a39) + (uint64_t(a38) << 8) + (uint64_t(a37) << 16) + (uint64_t(a36) << 24) + (uint64_t(a35) << 32) + (uint64_t(a34) << 40) + (uint64_t(a33) << 48) + (uint64_t(a32) << 56), - uint64_t(a47) + (uint64_t(a46) << 8) + (uint64_t(a45) << 16) + (uint64_t(a44) << 24) + (uint64_t(a43) << 32) + (uint64_t(a42) << 40) + (uint64_t(a41) << 48) + (uint64_t(a40) << 56), - uint64_t(a55) + (uint64_t(a54) << 8) + (uint64_t(a53) << 16) + (uint64_t(a52) << 24) + (uint64_t(a51) << 32) + (uint64_t(a50) << 40) + (uint64_t(a49) << 48) + (uint64_t(a48) << 56), - uint64_t(a63) + (uint64_t(a62) << 8) + (uint64_t(a61) << 16) + (uint64_t(a60) << 24) + (uint64_t(a59) << 32) + (uint64_t(a58) << 40) + (uint64_t(a57) << 48) + (uint64_t(a56) << 56)); -} -#pragma GCC pop_options +inline __m512i +_mm512_set_epi8(uint8_t a0, uint8_t a1, uint8_t a2, uint8_t a3, uint8_t a4, + uint8_t a5, uint8_t a6, uint8_t a7, uint8_t a8, uint8_t a9, + uint8_t a10, uint8_t a11, uint8_t a12, uint8_t a13, uint8_t a14, + uint8_t a15, uint8_t a16, uint8_t a17, uint8_t a18, uint8_t a19, + uint8_t a20, uint8_t a21, uint8_t a22, uint8_t a23, uint8_t a24, + uint8_t a25, uint8_t a26, uint8_t a27, uint8_t a28, uint8_t a29, + uint8_t a30, uint8_t a31, uint8_t a32, uint8_t a33, uint8_t a34, + uint8_t a35, uint8_t a36, uint8_t a37, uint8_t a38, uint8_t a39, + uint8_t a40, uint8_t a41, uint8_t a42, uint8_t a43, uint8_t a44, + uint8_t a45, uint8_t a46, uint8_t a47, uint8_t a48, uint8_t a49, + uint8_t a50, uint8_t a51, uint8_t a52, uint8_t a53, uint8_t a54, + uint8_t a55, uint8_t a56, uint8_t a57, uint8_t a58, uint8_t a59, + uint8_t a60, uint8_t a61, uint8_t a62, uint8_t a63) { + return _mm512_set_epi64( + uint64_t(a7) + (uint64_t(a6) << 8) + (uint64_t(a5) << 16) + + (uint64_t(a4) << 24) + (uint64_t(a3) << 32) + (uint64_t(a2) << 40) + + (uint64_t(a1) << 48) + (uint64_t(a0) << 56), + uint64_t(a15) + (uint64_t(a14) << 8) + (uint64_t(a13) << 16) + + (uint64_t(a12) << 24) + (uint64_t(a11) << 32) + + (uint64_t(a10) << 40) + (uint64_t(a9) << 48) + (uint64_t(a8) << 56), + uint64_t(a23) + (uint64_t(a22) << 8) + (uint64_t(a21) << 16) + + (uint64_t(a20) << 24) + (uint64_t(a19) << 32) + + (uint64_t(a18) << 40) + (uint64_t(a17) << 48) + (uint64_t(a16) << 56), + uint64_t(a31) + (uint64_t(a30) << 8) + (uint64_t(a29) << 16) + + (uint64_t(a28) << 24) + (uint64_t(a27) << 32) + + (uint64_t(a26) << 40) + (uint64_t(a25) << 48) + (uint64_t(a24) << 56), + uint64_t(a39) + (uint64_t(a38) << 8) + (uint64_t(a37) << 16) + + (uint64_t(a36) << 24) + (uint64_t(a35) << 32) + + (uint64_t(a34) << 40) + (uint64_t(a33) << 48) + (uint64_t(a32) << 56), + uint64_t(a47) + (uint64_t(a46) << 8) + (uint64_t(a45) << 16) + + (uint64_t(a44) << 24) + (uint64_t(a43) << 32) + + (uint64_t(a42) << 40) + (uint64_t(a41) << 48) + (uint64_t(a40) << 56), + uint64_t(a55) + (uint64_t(a54) << 8) + (uint64_t(a53) << 16) + + (uint64_t(a52) << 24) + (uint64_t(a51) << 32) + + (uint64_t(a50) << 40) + (uint64_t(a49) << 48) + (uint64_t(a48) << 56), + uint64_t(a63) + (uint64_t(a62) << 8) + (uint64_t(a61) << 16) + + (uint64_t(a60) << 24) + (uint64_t(a59) << 32) + + (uint64_t(a58) << 40) + (uint64_t(a57) << 48) + + (uint64_t(a56) << 56)); +} + #pragma GCC pop_options #endif // SIMDUTF_GCC8 #endif // SIMDUTF_HASWELL_INTRINSICS_H @@ -1964,91 +2358,206 @@ using namespace simdutf; class implementation final : public simdutf::implementation { public: - simdutf_really_inline implementation() : simdutf::implementation( - "icelake", - "Intel AVX512 (AVX-512BW, AVX-512CD, AVX-512VL, AVX-512VBMI2 extensions)", - internal::instruction_set::AVX2 | internal::instruction_set::BMI1 | internal::instruction_set::BMI2 | internal::instruction_set::AVX512BW | internal::instruction_set::AVX512CD | internal::instruction_set::AVX512VL | internal::instruction_set::AVX512VBMI2 | internal::instruction_set::AVX512VPOPCNTDQ ) {} - simdutf_warn_unused int detect_encodings(const char * input, size_t length) const noexcept final; - simdutf_warn_unused bool validate_utf8(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf8_with_errors(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_ascii(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_ascii_with_errors(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_utf16le(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_utf16be(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf16le_with_errors(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf16be_with_errors(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_utf32(const char32_t *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf32_with_errors(const char32_t *buf, size_t len) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf8(const char * buf, size_t len, char* utf8_output) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf16le(const char * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf16be(const char * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf32(const char * buf, size_t len, char32_t* utf32_output) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_latin1(const char * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_latin1_with_errors(const char * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_latin1(const char * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_utf16le(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_utf16be(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_utf16le_with_errors(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_utf16be_with_errors(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_utf16le(const char * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_utf16be(const char * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_utf32(const char * buf, size_t len, char32_t* utf32_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_utf32_with_errors(const char * buf, size_t len, char32_t* utf32_output) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_utf32(const char * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16le_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16be_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16le_to_latin1_with_errors(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16be_to_latin1_with_errors(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16le_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16be_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16le_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16be_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16le_to_utf8_with_errors(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16be_to_utf8_with_errors(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16le_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16be_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_utf8(const char32_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused result convert_utf32_to_utf8_with_errors(const char32_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_utf8(const char32_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_latin1(const char32_t * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused result convert_utf32_to_latin1_with_errors(const char32_t * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_latin1(const char32_t * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_utf16le(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_utf16be(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused result convert_utf32_to_utf16le_with_errors(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused result convert_utf32_to_utf16be_with_errors(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_utf16le(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_utf16be(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16le_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16be_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16le_to_utf32_with_errors(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16be_to_utf32_with_errors(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16le_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16be_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - void change_endianness_utf16(const char16_t * buf, size_t length, char16_t * output) const noexcept final; - simdutf_warn_unused size_t count_utf16le(const char16_t * buf, size_t length) const noexcept; - simdutf_warn_unused size_t count_utf16be(const char16_t * buf, size_t length) const noexcept; - simdutf_warn_unused size_t count_utf8(const char * buf, size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_utf16le(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_utf16be(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_utf16le(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_utf16be(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf16_length_from_utf8(const char * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_utf32(const char32_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf16_length_from_utf32(const char32_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_utf8(const char * input, size_t length) const noexcept; - simdutf_warn_unused size_t latin1_length_from_utf8(const char * input, size_t length) const noexcept; - simdutf_warn_unused size_t latin1_length_from_utf16(size_t length) const noexcept; - simdutf_warn_unused size_t latin1_length_from_utf32(size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_latin1(size_t length) const noexcept; - simdutf_warn_unused size_t utf16_length_from_latin1(size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_latin1(const char * input, size_t length) const noexcept; - simdutf_warn_unused size_t maximal_binary_length_from_base64(const char * input, size_t length) const noexcept; - simdutf_warn_unused result base64_to_binary(const char * input, size_t length, char* output, base64_options options) const noexcept; - simdutf_warn_unused size_t maximal_binary_length_from_base64(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused result base64_to_binary(const char16_t * input, size_t length, char* output, base64_options options) const noexcept; - simdutf_warn_unused size_t base64_length_from_binary(size_t length, base64_options options) const noexcept; - size_t binary_to_base64(const char * input, size_t length, char* output, base64_options options) const noexcept; + simdutf_really_inline implementation() + : simdutf::implementation( + "icelake", + "Intel AVX512 (AVX-512BW, AVX-512CD, AVX-512VL, AVX-512VBMI2 " + "extensions)", + internal::instruction_set::AVX2 | internal::instruction_set::BMI1 | + internal::instruction_set::BMI2 | + internal::instruction_set::AVX512BW | + internal::instruction_set::AVX512CD | + internal::instruction_set::AVX512VL | + internal::instruction_set::AVX512VBMI2 | + internal::instruction_set::AVX512VPOPCNTDQ) {} + simdutf_warn_unused int detect_encodings(const char *input, + size_t length) const noexcept final; + simdutf_warn_unused bool validate_utf8(const char *buf, + size_t len) const noexcept final; + simdutf_warn_unused result + validate_utf8_with_errors(const char *buf, size_t len) const noexcept final; + simdutf_warn_unused bool validate_ascii(const char *buf, + size_t len) const noexcept final; + simdutf_warn_unused result + validate_ascii_with_errors(const char *buf, size_t len) const noexcept final; + simdutf_warn_unused bool validate_utf16le(const char16_t *buf, + size_t len) const noexcept final; + simdutf_warn_unused bool validate_utf16be(const char16_t *buf, + size_t len) const noexcept final; + simdutf_warn_unused result validate_utf16le_with_errors( + const char16_t *buf, size_t len) const noexcept final; + simdutf_warn_unused result validate_utf16be_with_errors( + const char16_t *buf, size_t len) const noexcept final; + simdutf_warn_unused bool validate_utf32(const char32_t *buf, + size_t len) const noexcept final; + simdutf_warn_unused result validate_utf32_with_errors( + const char32_t *buf, size_t len) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf8( + const char *buf, size_t len, char *utf8_output) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf16le( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf16be( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf32( + const char *buf, size_t len, char32_t *utf32_output) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_latin1_with_errors( + const char *buf, size_t len, char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_utf16le( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_utf16be( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_utf16le_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_utf16be_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_utf16le( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_utf16be( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_utf32( + const char *buf, size_t len, char32_t *utf32_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_utf32_with_errors( + const char *buf, size_t len, char32_t *utf32_output) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_utf32( + const char *buf, size_t len, char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16le_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16be_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16le_to_latin1_with_errors( + const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16be_to_latin1_with_errors( + const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16le_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16be_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16le_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16be_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused result convert_utf32_to_utf8_with_errors( + const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf32_to_latin1(const char32_t *buf, size_t len, + char *latin1_output) const noexcept final; + simdutf_warn_unused result + convert_utf32_to_latin1_with_errors(const char32_t *buf, size_t len, + char *latin1_output) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf32_to_latin1(const char32_t *buf, size_t len, + char *latin1_output) const noexcept final; + simdutf_warn_unused size_t + convert_utf32_to_utf16le(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf32_to_utf16be(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused result convert_utf32_to_utf16le_with_errors( + const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused result convert_utf32_to_utf16be_with_errors( + const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf32_to_utf16le(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf32_to_utf16be(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16le_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16be_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16le_to_utf32_with_errors( + const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16be_to_utf32_with_errors( + const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16le_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16be_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + void change_endianness_utf16(const char16_t *buf, size_t length, + char16_t *output) const noexcept final; + simdutf_warn_unused size_t count_utf16le(const char16_t *buf, + size_t length) const noexcept; + simdutf_warn_unused size_t count_utf16be(const char16_t *buf, + size_t length) const noexcept; + simdutf_warn_unused size_t count_utf8(const char *buf, + size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_utf16le(const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_utf16be(const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t utf32_length_from_utf16le( + const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t utf32_length_from_utf16be( + const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf16_length_from_utf8(const char *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_utf32(const char32_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf16_length_from_utf32(const char32_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf32_length_from_utf8(const char *input, size_t length) const noexcept; + simdutf_warn_unused size_t + latin1_length_from_utf8(const char *input, size_t length) const noexcept; + simdutf_warn_unused size_t + latin1_length_from_utf16(size_t length) const noexcept; + simdutf_warn_unused size_t + latin1_length_from_utf32(size_t length) const noexcept; + simdutf_warn_unused size_t + utf32_length_from_latin1(size_t length) const noexcept; + simdutf_warn_unused size_t + utf16_length_from_latin1(size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_latin1(const char *input, size_t length) const noexcept; + simdutf_warn_unused size_t maximal_binary_length_from_base64( + const char *input, size_t length) const noexcept; + simdutf_warn_unused result base64_to_binary( + const char *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_options = + last_chunk_handling_options::loose) const noexcept; + simdutf_warn_unused size_t maximal_binary_length_from_base64( + const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused result + base64_to_binary(const char16_t *input, size_t length, char *output, + base64_options options, + last_chunk_handling_options last_chunk_options = + last_chunk_handling_options::loose) const noexcept; + simdutf_warn_unused size_t base64_length_from_binary( + size_t length, base64_options options) const noexcept; + size_t binary_to_base64(const char *input, size_t length, char *output, + base64_options options) const noexcept; }; } // namespace icelake @@ -2057,9 +2566,9 @@ class implementation final : public simdutf::implementation { #endif // SIMDUTF_ICELAKE_IMPLEMENTATION_H /* end file src/simdutf/icelake/implementation.h */ -// -// The rest need to be inside the region -// + // + // The rest need to be inside the region + // /* begin file src/simdutf/icelake/begin.h */ // redefining SIMDUTF_IMPLEMENTATION to "icelake" // #define SIMDUTF_IMPLEMENTATION icelake @@ -2070,11 +2579,14 @@ class implementation final : public simdutf::implementation { SIMDUTF_TARGET_ICELAKE #endif -#if SIMDUTF_GCC11ORMORE // workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105593 +#if SIMDUTF_GCC11ORMORE // workaround for + // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105593 +// clang-format off SIMDUTF_DISABLE_GCC_WARNING(-Wmaybe-uninitialized) +// clang-format on #endif // end of workaround /* end file src/simdutf/icelake/begin.h */ -// Declarations + // Declarations /* begin file src/simdutf/icelake/bitmanipulation.h */ #ifndef SIMDUTF_ICELAKE_BITMANIPULATION_H #define SIMDUTF_ICELAKE_BITMANIPULATION_H @@ -2086,7 +2598,7 @@ namespace { #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO simdutf_really_inline unsigned __int64 count_ones(uint64_t input_num) { // note: we do not support legacy 32-bit Windows - return __popcnt64(input_num);// Visual Studio wants two underscores + return __popcnt64(input_num); // Visual Studio wants two underscores } #else simdutf_really_inline long long int count_ones(uint64_t input_num) { @@ -2096,11 +2608,11 @@ simdutf_really_inline long long int count_ones(uint64_t input_num) { #if SIMDUTF_NEED_TRAILING_ZEROES simdutf_really_inline int trailing_zeroes(uint64_t input_num) { -#if SIMDUTF_REGULAR_VISUAL_STUDIO + #if SIMDUTF_REGULAR_VISUAL_STUDIO return (int)_tzcnt_u64(input_num); -#else // SIMDUTF_REGULAR_VISUAL_STUDIO + #else // SIMDUTF_REGULAR_VISUAL_STUDIO return __builtin_ctzll(input_num); -#endif // SIMDUTF_REGULAR_VISUAL_STUDIO + #endif // SIMDUTF_REGULAR_VISUAL_STUDIO } #endif @@ -2118,13 +2630,12 @@ SIMDUTF_UNTARGET_REGION #endif -#if SIMDUTF_GCC11ORMORE // workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105593 +#if SIMDUTF_GCC11ORMORE // workaround for + // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105593 SIMDUTF_POP_DISABLE_WARNINGS #endif // end of workaround /* end file src/simdutf/icelake/end.h */ - - #endif // SIMDUTF_IMPLEMENTATION_ICELAKE #endif // SIMDUTF_ICELAKE_H /* end file src/simdutf/icelake.h */ @@ -2133,56 +2644,56 @@ SIMDUTF_POP_DISABLE_WARNINGS #define SIMDUTF_HASWELL_H #ifdef SIMDUTF_WESTMERE_H -#error "haswell.h must be included before westmere.h" + #error "haswell.h must be included before westmere.h" #endif #ifdef SIMDUTF_FALLBACK_H -#error "haswell.h must be included before fallback.h" + #error "haswell.h must be included before fallback.h" #endif -// Default Haswell to on if this is x86-64. Even if we are not compiled for it, it could be selected -// at runtime. +// Default Haswell to on if this is x86-64. Even if we are not compiled for it, +// it could be selected at runtime. #ifndef SIMDUTF_IMPLEMENTATION_HASWELL -// -// You do not want to restrict it like so: SIMDUTF_IS_X86_64 && __AVX2__ -// because we want to rely on *runtime dispatch*. -// -#if SIMDUTF_CAN_ALWAYS_RUN_ICELAKE -#define SIMDUTF_IMPLEMENTATION_HASWELL 0 -#else -#define SIMDUTF_IMPLEMENTATION_HASWELL (SIMDUTF_IS_X86_64) -#endif + // + // You do not want to restrict it like so: SIMDUTF_IS_X86_64 && __AVX2__ + // because we want to rely on *runtime dispatch*. + // + #if SIMDUTF_CAN_ALWAYS_RUN_ICELAKE + #define SIMDUTF_IMPLEMENTATION_HASWELL 0 + #else + #define SIMDUTF_IMPLEMENTATION_HASWELL (SIMDUTF_IS_X86_64) + #endif #endif // To see why (__BMI__) && (__LZCNT__) are not part of this next line, see // https://github.com/simdutf/simdutf/issues/1247 #if ((SIMDUTF_IMPLEMENTATION_HASWELL) && (SIMDUTF_IS_X86_64) && (__AVX2__)) -#define SIMDUTF_CAN_ALWAYS_RUN_HASWELL 1 + #define SIMDUTF_CAN_ALWAYS_RUN_HASWELL 1 #else -#define SIMDUTF_CAN_ALWAYS_RUN_HASWELL 0 + #define SIMDUTF_CAN_ALWAYS_RUN_HASWELL 0 #endif #if SIMDUTF_IMPLEMENTATION_HASWELL -#define SIMDUTF_TARGET_HASWELL SIMDUTF_TARGET_REGION("avx2,bmi,lzcnt,popcnt") + #define SIMDUTF_TARGET_HASWELL SIMDUTF_TARGET_REGION("avx2,bmi,lzcnt,popcnt") namespace simdutf { /** * Implementation for Haswell (Intel AVX2). */ -namespace haswell { -} // namespace haswell +namespace haswell {} // namespace haswell } // namespace simdutf -// -// These two need to be included outside SIMDUTF_TARGET_REGION -// + // + // These two need to be included outside SIMDUTF_TARGET_REGION + // /* begin file src/simdutf/haswell/implementation.h */ #ifndef SIMDUTF_HASWELL_IMPLEMENTATION_H #define SIMDUTF_HASWELL_IMPLEMENTATION_H -// The constructor may be executed on any host, so we take care not to use SIMDUTF_TARGET_REGION +// The constructor may be executed on any host, so we take care not to use +// SIMDUTF_TARGET_REGION namespace simdutf { namespace haswell { @@ -2190,92 +2701,203 @@ using namespace simdutf; class implementation final : public simdutf::implementation { public: - simdutf_really_inline implementation() : simdutf::implementation( - "haswell", - "Intel/AMD AVX2", - internal::instruction_set::AVX2 | internal::instruction_set::BMI1 | internal::instruction_set::BMI2 - ) {} - simdutf_warn_unused int detect_encodings(const char * input, size_t length) const noexcept final; - simdutf_warn_unused bool validate_utf8(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf8_with_errors(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_ascii(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_ascii_with_errors(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_utf16le(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_utf16be(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf16le_with_errors(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf16be_with_errors(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_utf32(const char32_t *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf32_with_errors(const char32_t *buf, size_t len) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf8(const char * buf, size_t len, char* utf8_output) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf16le(const char * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf16be(const char * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf32(const char * buf, size_t len, char32_t* utf32_output) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_latin1(const char * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_latin1_with_errors(const char * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_latin1(const char * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_utf16le(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_utf16be(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_utf16le_with_errors(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_utf16be_with_errors(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_utf16le(const char * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_utf16be(const char * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_utf32(const char * buf, size_t len, char32_t* utf32_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_utf32_with_errors(const char * buf, size_t len, char32_t* utf32_output) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_utf32(const char * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16le_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16be_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16le_to_latin1_with_errors(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16be_to_latin1_with_errors(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16le_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16be_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16le_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16be_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16le_to_utf8_with_errors(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16be_to_utf8_with_errors(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16le_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16be_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_utf8(const char32_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused result convert_utf32_to_utf8_with_errors(const char32_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_utf8(const char32_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_latin1(const char32_t * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused result convert_utf32_to_latin1_with_errors(const char32_t * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_latin1(const char32_t * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_utf16le(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_utf16be(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused result convert_utf32_to_utf16le_with_errors(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused result convert_utf32_to_utf16be_with_errors(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_utf16le(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_utf16be(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16le_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16be_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16le_to_utf32_with_errors(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16be_to_utf32_with_errors(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16le_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16be_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - void change_endianness_utf16(const char16_t * buf, size_t length, char16_t * output) const noexcept final; - simdutf_warn_unused size_t count_utf16le(const char16_t * buf, size_t length) const noexcept; - simdutf_warn_unused size_t count_utf16be(const char16_t * buf, size_t length) const noexcept; - simdutf_warn_unused size_t count_utf8(const char * buf, size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_utf16le(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_utf16be(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_utf16le(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_utf16be(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf16_length_from_utf8(const char * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_utf32(const char32_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf16_length_from_utf32(const char32_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_utf8(const char * input, size_t length) const noexcept; - simdutf_warn_unused size_t latin1_length_from_utf8(const char * input, size_t length) const noexcept; - simdutf_warn_unused size_t latin1_length_from_utf16(size_t length) const noexcept; - simdutf_warn_unused size_t latin1_length_from_utf32(size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_latin1(size_t length) const noexcept; - simdutf_warn_unused size_t utf16_length_from_latin1(size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_latin1(const char * input, size_t length) const noexcept; - simdutf_warn_unused virtual size_t maximal_binary_length_from_base64(const char * input, size_t length) const noexcept; - simdutf_warn_unused virtual result base64_to_binary(const char * input, size_t length, char* output, base64_options options) const noexcept; - simdutf_warn_unused virtual size_t maximal_binary_length_from_base64(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused virtual result base64_to_binary(const char16_t * input, size_t length, char* output, base64_options options) const noexcept; - simdutf_warn_unused virtual size_t base64_length_from_binary(size_t length, base64_options options) const noexcept; - size_t binary_to_base64(const char * input, size_t length, char* output, base64_options options) const noexcept; + simdutf_really_inline implementation() + : simdutf::implementation("haswell", "Intel/AMD AVX2", + internal::instruction_set::AVX2 | + internal::instruction_set::BMI1 | + internal::instruction_set::BMI2) {} + simdutf_warn_unused int detect_encodings(const char *input, + size_t length) const noexcept final; + simdutf_warn_unused bool validate_utf8(const char *buf, + size_t len) const noexcept final; + simdutf_warn_unused result + validate_utf8_with_errors(const char *buf, size_t len) const noexcept final; + simdutf_warn_unused bool validate_ascii(const char *buf, + size_t len) const noexcept final; + simdutf_warn_unused result + validate_ascii_with_errors(const char *buf, size_t len) const noexcept final; + simdutf_warn_unused bool validate_utf16le(const char16_t *buf, + size_t len) const noexcept final; + simdutf_warn_unused bool validate_utf16be(const char16_t *buf, + size_t len) const noexcept final; + simdutf_warn_unused result validate_utf16le_with_errors( + const char16_t *buf, size_t len) const noexcept final; + simdutf_warn_unused result validate_utf16be_with_errors( + const char16_t *buf, size_t len) const noexcept final; + simdutf_warn_unused bool validate_utf32(const char32_t *buf, + size_t len) const noexcept final; + simdutf_warn_unused result validate_utf32_with_errors( + const char32_t *buf, size_t len) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf8( + const char *buf, size_t len, char *utf8_output) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf16le( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf16be( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf32( + const char *buf, size_t len, char32_t *utf32_output) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_latin1_with_errors( + const char *buf, size_t len, char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_utf16le( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_utf16be( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_utf16le_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_utf16be_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_utf16le( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_utf16be( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_utf32( + const char *buf, size_t len, char32_t *utf32_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_utf32_with_errors( + const char *buf, size_t len, char32_t *utf32_output) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_utf32( + const char *buf, size_t len, char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16le_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16be_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16le_to_latin1_with_errors( + const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16be_to_latin1_with_errors( + const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16le_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16be_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16le_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16be_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused result convert_utf32_to_utf8_with_errors( + const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf32_to_latin1(const char32_t *buf, size_t len, + char *latin1_output) const noexcept final; + simdutf_warn_unused result + convert_utf32_to_latin1_with_errors(const char32_t *buf, size_t len, + char *latin1_output) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf32_to_latin1(const char32_t *buf, size_t len, + char *latin1_output) const noexcept final; + simdutf_warn_unused size_t + convert_utf32_to_utf16le(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf32_to_utf16be(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused result convert_utf32_to_utf16le_with_errors( + const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused result convert_utf32_to_utf16be_with_errors( + const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf32_to_utf16le(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf32_to_utf16be(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16le_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16be_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16le_to_utf32_with_errors( + const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16be_to_utf32_with_errors( + const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16le_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16be_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + void change_endianness_utf16(const char16_t *buf, size_t length, + char16_t *output) const noexcept final; + simdutf_warn_unused size_t count_utf16le(const char16_t *buf, + size_t length) const noexcept; + simdutf_warn_unused size_t count_utf16be(const char16_t *buf, + size_t length) const noexcept; + simdutf_warn_unused size_t count_utf8(const char *buf, + size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_utf16le(const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_utf16be(const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t utf32_length_from_utf16le( + const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t utf32_length_from_utf16be( + const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf16_length_from_utf8(const char *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_utf32(const char32_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf16_length_from_utf32(const char32_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf32_length_from_utf8(const char *input, size_t length) const noexcept; + simdutf_warn_unused size_t + latin1_length_from_utf8(const char *input, size_t length) const noexcept; + simdutf_warn_unused size_t + latin1_length_from_utf16(size_t length) const noexcept; + simdutf_warn_unused size_t + latin1_length_from_utf32(size_t length) const noexcept; + simdutf_warn_unused size_t + utf32_length_from_latin1(size_t length) const noexcept; + simdutf_warn_unused size_t + utf16_length_from_latin1(size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_latin1(const char *input, size_t length) const noexcept; + simdutf_warn_unused virtual size_t + maximal_binary_length_from_base64(const char *input, + size_t length) const noexcept; + simdutf_warn_unused virtual result + base64_to_binary(const char *input, size_t length, char *output, + base64_options options, + last_chunk_handling_options last_chunk_options = + last_chunk_handling_options::loose) const noexcept; + simdutf_warn_unused virtual size_t + maximal_binary_length_from_base64(const char16_t *input, + size_t length) const noexcept; + simdutf_warn_unused virtual result + base64_to_binary(const char16_t *input, size_t length, char *output, + base64_options options, + last_chunk_handling_options last_chunk_options = + last_chunk_handling_options::loose) const noexcept; + simdutf_warn_unused virtual size_t + base64_length_from_binary(size_t length, + base64_options options) const noexcept; + size_t binary_to_base64(const char *input, size_t length, char *output, + base64_options options) const noexcept; }; } // namespace haswell @@ -2289,68 +2911,67 @@ class implementation final : public simdutf::implementation { #ifdef SIMDUTF_VISUAL_STUDIO -// under clang within visual studio, this will include -#include // visual studio or clang + // under clang within visual studio, this will include + #include // visual studio or clang #else -#if SIMDUTF_GCC11ORMORE + #if SIMDUTF_GCC11ORMORE // We should not get warnings while including yet we do // under some versions of GCC. // If the x86intrin.h header has uninitialized values that are problematic, // it is a GCC issue, we want to ignore these warnings. SIMDUTF_DISABLE_GCC_WARNING(-Wuninitialized) -#endif - -#include // elsewhere + #endif + #include // elsewhere -#if SIMDUTF_GCC11ORMORE + #if SIMDUTF_GCC11ORMORE // cancels the suppression of the -Wuninitialized SIMDUTF_POP_DISABLE_WARNINGS -#endif + #endif #endif // SIMDUTF_VISUAL_STUDIO #ifdef SIMDUTF_CLANG_VISUAL_STUDIO -/** - * You are not supposed, normally, to include these - * headers directly. Instead you should either include intrin.h - * or x86intrin.h. However, when compiling with clang - * under Windows (i.e., when _MSC_VER is set), these headers - * only get included *if* the corresponding features are detected - * from macros: - * e.g., if __AVX2__ is set... in turn, we normally set these - * macros by compiling against the corresponding architecture - * (e.g., arch:AVX2, -mavx2, etc.) which compiles the whole - * software with these advanced instructions. In simdutf, we - * want to compile the whole program for a generic target, - * and only target our specific kernels. As a workaround, - * we directly include the needed headers. These headers would - * normally guard against such usage, but we carefully included - * (or ) before, so the headers - * are fooled. - */ -#include // for _blsr_u64 -#include // for __lzcnt64 -#include // for most things (AVX2, AVX512, _popcnt64) -#include -#include -#include -#include -// unfortunately, we may not get _blsr_u64, but, thankfully, clang -// has it as a macro. -#ifndef _blsr_u64 -// we roll our own -#define _blsr_u64(n) ((n - 1) & n) -#endif // _blsr_u64 -#endif // SIMDUTF_CLANG_VISUAL_STUDIO + /** + * You are not supposed, normally, to include these + * headers directly. Instead you should either include intrin.h + * or x86intrin.h. However, when compiling with clang + * under Windows (i.e., when _MSC_VER is set), these headers + * only get included *if* the corresponding features are detected + * from macros: + * e.g., if __AVX2__ is set... in turn, we normally set these + * macros by compiling against the corresponding architecture + * (e.g., arch:AVX2, -mavx2, etc.) which compiles the whole + * software with these advanced instructions. In simdutf, we + * want to compile the whole program for a generic target, + * and only target our specific kernels. As a workaround, + * we directly include the needed headers. These headers would + * normally guard against such usage, but we carefully included + * (or ) before, so the headers + * are fooled. + */ + #include // for _blsr_u64 + #include // for __lzcnt64 + #include // for most things (AVX2, AVX512, _popcnt64) + #include + #include + #include + #include + // unfortunately, we may not get _blsr_u64, but, thankfully, clang + // has it as a macro. + #ifndef _blsr_u64 + // we roll our own + #define _blsr_u64(n) ((n - 1) & n) + #endif // _blsr_u64 +#endif // SIMDUTF_CLANG_VISUAL_STUDIO #endif // SIMDUTF_HASWELL_INTRINSICS_H /* end file src/simdutf/haswell/intrinsics.h */ -// -// The rest need to be inside the region -// + // + // The rest need to be inside the region + // /* begin file src/simdutf/haswell/begin.h */ // redefining SIMDUTF_IMPLEMENTATION to "haswell" // #define SIMDUTF_IMPLEMENTATION haswell @@ -2361,11 +2982,14 @@ SIMDUTF_POP_DISABLE_WARNINGS SIMDUTF_TARGET_HASWELL #endif -#if SIMDUTF_GCC11ORMORE // workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105593 +#if SIMDUTF_GCC11ORMORE // workaround for + // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105593 +// clang-format off SIMDUTF_DISABLE_GCC_WARNING(-Wmaybe-uninitialized) +// clang-format on #endif // end of workaround /* end file src/simdutf/haswell/begin.h */ -// Declarations + // Declarations /* begin file src/simdutf/haswell/bitmanipulation.h */ #ifndef SIMDUTF_HASWELL_BITMANIPULATION_H #define SIMDUTF_HASWELL_BITMANIPULATION_H @@ -2377,7 +3001,7 @@ namespace { #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO simdutf_really_inline unsigned __int64 count_ones(uint64_t input_num) { // note: we do not support legacy 32-bit Windows - return __popcnt64(input_num);// Visual Studio wants two underscores + return __popcnt64(input_num); // Visual Studio wants two underscores } #else simdutf_really_inline long long int count_ones(uint64_t input_num) { @@ -2387,11 +3011,11 @@ simdutf_really_inline long long int count_ones(uint64_t input_num) { #if SIMDUTF_NEED_TRAILING_ZEROES simdutf_inline int trailing_zeroes(uint64_t input_num) { -#if SIMDUTF_REGULAR_VISUAL_STUDIO + #if SIMDUTF_REGULAR_VISUAL_STUDIO return (int)_tzcnt_u64(input_num); -#else // SIMDUTF_REGULAR_VISUAL_STUDIO + #else // SIMDUTF_REGULAR_VISUAL_STUDIO return __builtin_ctzll(input_num); -#endif // SIMDUTF_REGULAR_VISUAL_STUDIO + #endif // SIMDUTF_REGULAR_VISUAL_STUDIO } #endif @@ -2405,547 +3029,745 @@ simdutf_inline int trailing_zeroes(uint64_t input_num) { #ifndef SIMDUTF_HASWELL_SIMD_H #define SIMDUTF_HASWELL_SIMD_H - namespace simdutf { namespace haswell { namespace { namespace simd { - // Forward-declared so they can be used by splat and friends. - template - struct base { - __m256i value; - - // Zero constructor - simdutf_really_inline base() : value{__m256i()} {} - - // Conversion from SIMD register - simdutf_really_inline base(const __m256i _value) : value(_value) {} - // Conversion to SIMD register - simdutf_really_inline operator const __m256i&() const { return this->value; } - simdutf_really_inline operator __m256i&() { return this->value; } - template - simdutf_really_inline void store_ascii_as_utf16(char16_t * ptr) const { - __m256i first = _mm256_cvtepu8_epi16(_mm256_castsi256_si128(*this)); - __m256i second = _mm256_cvtepu8_epi16(_mm256_extractf128_si256(*this,1)); - if (big_endian) { - const __m256i swap = _mm256_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, - 17, 16, 19, 18, 21, 20, 23, 22, 25, 24, 27, 26, 29, 28, 31, 30); - first = _mm256_shuffle_epi8(first, swap); - second = _mm256_shuffle_epi8(second, swap); - } - _mm256_storeu_si256(reinterpret_cast<__m256i *>(ptr), first); - _mm256_storeu_si256(reinterpret_cast<__m256i *>(ptr + 16), second); - } - simdutf_really_inline void store_ascii_as_utf32(char32_t * ptr) const { - _mm256_storeu_si256(reinterpret_cast<__m256i *>(ptr), _mm256_cvtepu8_epi32(_mm256_castsi256_si128(*this))); - _mm256_storeu_si256(reinterpret_cast<__m256i *>(ptr+8), _mm256_cvtepu8_epi32(_mm256_castsi256_si128(_mm256_srli_si256(*this,8)))); - _mm256_storeu_si256(reinterpret_cast<__m256i *>(ptr + 16), _mm256_cvtepu8_epi32(_mm256_extractf128_si256(*this,1))); - _mm256_storeu_si256(reinterpret_cast<__m256i *>(ptr + 24), _mm256_cvtepu8_epi32(_mm_srli_si128(_mm256_extractf128_si256(*this,1),8))); - } - // Bit operations - simdutf_really_inline Child operator|(const Child other) const { return _mm256_or_si256(*this, other); } - simdutf_really_inline Child operator&(const Child other) const { return _mm256_and_si256(*this, other); } - simdutf_really_inline Child operator^(const Child other) const { return _mm256_xor_si256(*this, other); } - simdutf_really_inline Child bit_andnot(const Child other) const { return _mm256_andnot_si256(other, *this); } - simdutf_really_inline Child& operator|=(const Child other) { auto this_cast = static_cast(this); *this_cast = *this_cast | other; return *this_cast; } - simdutf_really_inline Child& operator&=(const Child other) { auto this_cast = static_cast(this); *this_cast = *this_cast & other; return *this_cast; } - simdutf_really_inline Child& operator^=(const Child other) { auto this_cast = static_cast(this); *this_cast = *this_cast ^ other; return *this_cast; } - }; +// Forward-declared so they can be used by splat and friends. +template struct base { + __m256i value; - // Forward-declared so they can be used by splat and friends. - template - struct simd8; + // Zero constructor + simdutf_really_inline base() : value{__m256i()} {} - template> - struct base8: base> { - typedef uint32_t bitmask_t; - typedef uint64_t bitmask2_t; + // Conversion from SIMD register + simdutf_really_inline base(const __m256i _value) : value(_value) {} + // Conversion to SIMD register + simdutf_really_inline operator const __m256i &() const { return this->value; } + simdutf_really_inline operator __m256i &() { return this->value; } + template + simdutf_really_inline void store_ascii_as_utf16(char16_t *ptr) const { + __m256i first = _mm256_cvtepu8_epi16(_mm256_castsi256_si128(*this)); + __m256i second = _mm256_cvtepu8_epi16(_mm256_extractf128_si256(*this, 1)); + if (big_endian) { + const __m256i swap = _mm256_setr_epi8( + 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, 17, 16, 19, 18, + 21, 20, 23, 22, 25, 24, 27, 26, 29, 28, 31, 30); + first = _mm256_shuffle_epi8(first, swap); + second = _mm256_shuffle_epi8(second, swap); + } + _mm256_storeu_si256(reinterpret_cast<__m256i *>(ptr), first); + _mm256_storeu_si256(reinterpret_cast<__m256i *>(ptr + 16), second); + } + simdutf_really_inline void store_ascii_as_utf32(char32_t *ptr) const { + _mm256_storeu_si256(reinterpret_cast<__m256i *>(ptr), + _mm256_cvtepu8_epi32(_mm256_castsi256_si128(*this))); + _mm256_storeu_si256(reinterpret_cast<__m256i *>(ptr + 8), + _mm256_cvtepu8_epi32(_mm256_castsi256_si128( + _mm256_srli_si256(*this, 8)))); + _mm256_storeu_si256( + reinterpret_cast<__m256i *>(ptr + 16), + _mm256_cvtepu8_epi32(_mm256_extractf128_si256(*this, 1))); + _mm256_storeu_si256(reinterpret_cast<__m256i *>(ptr + 24), + _mm256_cvtepu8_epi32(_mm_srli_si128( + _mm256_extractf128_si256(*this, 1), 8))); + } + // Bit operations + simdutf_really_inline Child operator|(const Child other) const { + return _mm256_or_si256(*this, other); + } + simdutf_really_inline Child operator&(const Child other) const { + return _mm256_and_si256(*this, other); + } + simdutf_really_inline Child operator^(const Child other) const { + return _mm256_xor_si256(*this, other); + } + simdutf_really_inline Child bit_andnot(const Child other) const { + return _mm256_andnot_si256(other, *this); + } + simdutf_really_inline Child &operator|=(const Child other) { + auto this_cast = static_cast(this); + *this_cast = *this_cast | other; + return *this_cast; + } + simdutf_really_inline Child &operator&=(const Child other) { + auto this_cast = static_cast(this); + *this_cast = *this_cast & other; + return *this_cast; + } + simdutf_really_inline Child &operator^=(const Child other) { + auto this_cast = static_cast(this); + *this_cast = *this_cast ^ other; + return *this_cast; + } +}; - simdutf_really_inline base8() : base>() {} - simdutf_really_inline base8(const __m256i _value) : base>(_value) {} - simdutf_really_inline T first() const { return _mm256_extract_epi8(*this,0); } - simdutf_really_inline T last() const { return _mm256_extract_epi8(*this,31); } - friend simdutf_really_inline Mask operator==(const simd8 lhs, const simd8 rhs) { return _mm256_cmpeq_epi8(lhs, rhs); } - - static const int SIZE = sizeof(base::value); - - template - simdutf_really_inline simd8 prev(const simd8 prev_chunk) const { - return _mm256_alignr_epi8(*this, _mm256_permute2x128_si256(prev_chunk, *this, 0x21), 16 - N); - } - }; - - // SIMD byte mask type (returned by things like eq and gt) - template<> - struct simd8: base8 { - static simdutf_really_inline simd8 splat(bool _value) { return _mm256_set1_epi8(uint8_t(-(!!_value))); } - - simdutf_really_inline simd8() : base8() {} - simdutf_really_inline simd8(const __m256i _value) : base8(_value) {} - // Splat constructor - simdutf_really_inline simd8(bool _value) : base8(splat(_value)) {} - - simdutf_really_inline uint32_t to_bitmask() const { return uint32_t(_mm256_movemask_epi8(*this)); } - simdutf_really_inline bool any() const { return !_mm256_testz_si256(*this, *this); } - simdutf_really_inline bool none() const { return _mm256_testz_si256(*this, *this); } - simdutf_really_inline bool all() const { return static_cast(_mm256_movemask_epi8(*this)) == 0xFFFFFFFF; } - simdutf_really_inline simd8 operator~() const { return *this ^ true; } - }; - - template - struct base8_numeric: base8 { - static simdutf_really_inline simd8 splat(T _value) { return _mm256_set1_epi8(_value); } - static simdutf_really_inline simd8 zero() { return _mm256_setzero_si256(); } - static simdutf_really_inline simd8 load(const T values[32]) { - return _mm256_loadu_si256(reinterpret_cast(values)); - } - // Repeat 16 values as many times as necessary (usually for lookup tables) - static simdutf_really_inline simd8 repeat_16( - T v0, T v1, T v2, T v3, T v4, T v5, T v6, T v7, - T v8, T v9, T v10, T v11, T v12, T v13, T v14, T v15 - ) { - return simd8( - v0, v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10,v11,v12,v13,v14,v15, - v0, v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10,v11,v12,v13,v14,v15 - ); - } - - simdutf_really_inline base8_numeric() : base8() {} - simdutf_really_inline base8_numeric(const __m256i _value) : base8(_value) {} - - // Store to array - simdutf_really_inline void store(T dst[32]) const { return _mm256_storeu_si256(reinterpret_cast<__m256i *>(dst), *this); } - - // Addition/subtraction are the same for signed and unsigned - simdutf_really_inline simd8 operator+(const simd8 other) const { return _mm256_add_epi8(*this, other); } - simdutf_really_inline simd8 operator-(const simd8 other) const { return _mm256_sub_epi8(*this, other); } - simdutf_really_inline simd8& operator+=(const simd8 other) { *this = *this + other; return *static_cast*>(this); } - simdutf_really_inline simd8& operator-=(const simd8 other) { *this = *this - other; return *static_cast*>(this); } - - // Override to distinguish from bool version - simdutf_really_inline simd8 operator~() const { return *this ^ 0xFFu; } - - // Perform a lookup assuming the value is between 0 and 16 (undefined behavior for out of range values) - template - simdutf_really_inline simd8 lookup_16(simd8 lookup_table) const { - return _mm256_shuffle_epi8(lookup_table, *this); - } - - template - simdutf_really_inline simd8 lookup_16( - L replace0, L replace1, L replace2, L replace3, - L replace4, L replace5, L replace6, L replace7, - L replace8, L replace9, L replace10, L replace11, - L replace12, L replace13, L replace14, L replace15) const { - return lookup_16(simd8::repeat_16( - replace0, replace1, replace2, replace3, - replace4, replace5, replace6, replace7, - replace8, replace9, replace10, replace11, - replace12, replace13, replace14, replace15 - )); - } - }; - - - // Signed bytes - template<> - struct simd8 : base8_numeric { - simdutf_really_inline simd8() : base8_numeric() {} - simdutf_really_inline simd8(const __m256i _value) : base8_numeric(_value) {} - - // Splat constructor - simdutf_really_inline simd8(int8_t _value) : simd8(splat(_value)) {} - // Array constructor - simdutf_really_inline simd8(const int8_t values[32]) : simd8(load(values)) {} - simdutf_really_inline operator simd8() const; - // Member-by-member initialization - simdutf_really_inline simd8( - int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, int8_t v6, int8_t v7, - int8_t v8, int8_t v9, int8_t v10, int8_t v11, int8_t v12, int8_t v13, int8_t v14, int8_t v15, - int8_t v16, int8_t v17, int8_t v18, int8_t v19, int8_t v20, int8_t v21, int8_t v22, int8_t v23, - int8_t v24, int8_t v25, int8_t v26, int8_t v27, int8_t v28, int8_t v29, int8_t v30, int8_t v31 - ) : simd8(_mm256_setr_epi8( - v0, v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10,v11,v12,v13,v14,v15, - v16,v17,v18,v19,v20,v21,v22,v23, - v24,v25,v26,v27,v28,v29,v30,v31 - )) {} - // Repeat 16 values as many times as necessary (usually for lookup tables) - simdutf_really_inline static simd8 repeat_16( - int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, int8_t v6, int8_t v7, - int8_t v8, int8_t v9, int8_t v10, int8_t v11, int8_t v12, int8_t v13, int8_t v14, int8_t v15 - ) { - return simd8( - v0, v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10,v11,v12,v13,v14,v15, - v0, v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10,v11,v12,v13,v14,v15 - ); - } - simdutf_really_inline bool is_ascii() const { return _mm256_movemask_epi8(*this) == 0; } - // Order-sensitive comparisons - simdutf_really_inline simd8 max_val(const simd8 other) const { return _mm256_max_epi8(*this, other); } - simdutf_really_inline simd8 min_val(const simd8 other) const { return _mm256_min_epi8(*this, other); } - simdutf_really_inline simd8 operator>(const simd8 other) const { return _mm256_cmpgt_epi8(*this, other); } - simdutf_really_inline simd8 operator<(const simd8 other) const { return _mm256_cmpgt_epi8(other, *this); } - }; - - // Unsigned bytes - template<> - struct simd8: base8_numeric { - simdutf_really_inline simd8() : base8_numeric() {} - simdutf_really_inline simd8(const __m256i _value) : base8_numeric(_value) {} - // Splat constructor - simdutf_really_inline simd8(uint8_t _value) : simd8(splat(_value)) {} - // Array constructor - simdutf_really_inline simd8(const uint8_t values[32]) : simd8(load(values)) {} - // Member-by-member initialization - simdutf_really_inline simd8( - uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, uint8_t v6, uint8_t v7, - uint8_t v8, uint8_t v9, uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15, - uint8_t v16, uint8_t v17, uint8_t v18, uint8_t v19, uint8_t v20, uint8_t v21, uint8_t v22, uint8_t v23, - uint8_t v24, uint8_t v25, uint8_t v26, uint8_t v27, uint8_t v28, uint8_t v29, uint8_t v30, uint8_t v31 - ) : simd8(_mm256_setr_epi8( - v0, v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10,v11,v12,v13,v14,v15, - v16,v17,v18,v19,v20,v21,v22,v23, - v24,v25,v26,v27,v28,v29,v30,v31 - )) {} - // Repeat 16 values as many times as necessary (usually for lookup tables) - simdutf_really_inline static simd8 repeat_16( - uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, uint8_t v6, uint8_t v7, - uint8_t v8, uint8_t v9, uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15 - ) { - return simd8( - v0, v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10,v11,v12,v13,v14,v15, - v0, v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10,v11,v12,v13,v14,v15 - ); - } - - - // Saturated math - simdutf_really_inline simd8 saturating_add(const simd8 other) const { return _mm256_adds_epu8(*this, other); } - simdutf_really_inline simd8 saturating_sub(const simd8 other) const { return _mm256_subs_epu8(*this, other); } - - // Order-specific operations - simdutf_really_inline simd8 max_val(const simd8 other) const { return _mm256_max_epu8(*this, other); } - simdutf_really_inline simd8 min_val(const simd8 other) const { return _mm256_min_epu8(other, *this); } - // Same as >, but only guarantees true is nonzero (< guarantees true = -1) - simdutf_really_inline simd8 gt_bits(const simd8 other) const { return this->saturating_sub(other); } - // Same as <, but only guarantees true is nonzero (< guarantees true = -1) - simdutf_really_inline simd8 lt_bits(const simd8 other) const { return other.saturating_sub(*this); } - simdutf_really_inline simd8 operator<=(const simd8 other) const { return other.max_val(*this) == other; } - simdutf_really_inline simd8 operator>=(const simd8 other) const { return other.min_val(*this) == other; } - simdutf_really_inline simd8 operator>(const simd8 other) const { return this->gt_bits(other).any_bits_set(); } - simdutf_really_inline simd8 operator<(const simd8 other) const { return this->lt_bits(other).any_bits_set(); } - - // Bit-specific operations - simdutf_really_inline simd8 bits_not_set() const { return *this == uint8_t(0); } - simdutf_really_inline simd8 bits_not_set(simd8 bits) const { return (*this & bits).bits_not_set(); } - simdutf_really_inline simd8 any_bits_set() const { return ~this->bits_not_set(); } - simdutf_really_inline simd8 any_bits_set(simd8 bits) const { return ~this->bits_not_set(bits); } - simdutf_really_inline bool is_ascii() const { return _mm256_movemask_epi8(*this) == 0; } - simdutf_really_inline bool bits_not_set_anywhere() const { return _mm256_testz_si256(*this, *this); } - simdutf_really_inline bool any_bits_set_anywhere() const { return !bits_not_set_anywhere(); } - simdutf_really_inline bool bits_not_set_anywhere(simd8 bits) const { return _mm256_testz_si256(*this, bits); } - simdutf_really_inline bool any_bits_set_anywhere(simd8 bits) const { return !bits_not_set_anywhere(bits); } - template - simdutf_really_inline simd8 shr() const { return simd8(_mm256_srli_epi16(*this, N)) & uint8_t(0xFFu >> N); } - template - simdutf_really_inline simd8 shl() const { return simd8(_mm256_slli_epi16(*this, N)) & uint8_t(0xFFu << N); } - // Get one of the bits and make a bitmask out of it. - // e.g. value.get_bit<7>() gets the high bit - template - simdutf_really_inline int get_bit() const { return _mm256_movemask_epi8(_mm256_slli_epi16(*this, 7-N)); } - }; - simdutf_really_inline simd8::operator simd8() const { return this->value; } - - - template - struct simd8x64 { - static constexpr int NUM_CHUNKS = 64 / sizeof(simd8); - static_assert(NUM_CHUNKS == 2, "Haswell kernel should use two registers per 64-byte block."); - simd8 chunks[NUM_CHUNKS]; - - simd8x64(const simd8x64& o) = delete; // no copy allowed - simd8x64& operator=(const simd8 other) = delete; // no assignment allowed - simd8x64() = delete; // no default constructor allowed - - simdutf_really_inline simd8x64(const simd8 chunk0, const simd8 chunk1) : chunks{chunk0, chunk1} {} - simdutf_really_inline simd8x64(const T* ptr) : chunks{simd8::load(ptr), simd8::load(ptr+sizeof(simd8)/sizeof(T))} {} - - simdutf_really_inline void store(T* ptr) const { - this->chunks[0].store(ptr+sizeof(simd8)*0/sizeof(T)); - this->chunks[1].store(ptr+sizeof(simd8)*1/sizeof(T)); - } - - simdutf_really_inline uint64_t to_bitmask() const { - uint64_t r_lo = uint32_t(this->chunks[0].to_bitmask()); - uint64_t r_hi = this->chunks[1].to_bitmask(); - return r_lo | (r_hi << 32); - } - - simdutf_really_inline simd8x64& operator|=(const simd8x64 &other) { - this->chunks[0] |= other.chunks[0]; - this->chunks[1] |= other.chunks[1]; - return *this; - } - - simdutf_really_inline simd8 reduce_or() const { - return this->chunks[0] | this->chunks[1]; - } - - simdutf_really_inline bool is_ascii() const { - return this->reduce_or().is_ascii(); - } - - template - simdutf_really_inline void store_ascii_as_utf16(char16_t * ptr) const { - this->chunks[0].template store_ascii_as_utf16(ptr+sizeof(simd8)*0); - this->chunks[1].template store_ascii_as_utf16(ptr+sizeof(simd8)*1); - } - - simdutf_really_inline void store_ascii_as_utf32(char32_t * ptr) const { - this->chunks[0].store_ascii_as_utf32(ptr+sizeof(simd8)*0); - this->chunks[1].store_ascii_as_utf32(ptr+sizeof(simd8)*1); - } - - simdutf_really_inline simd8x64 bit_or(const T m) const { - const simd8 mask = simd8::splat(m); - return simd8x64( - this->chunks[0] | mask, - this->chunks[1] | mask - ); - } - - simdutf_really_inline uint64_t eq(const T m) const { - const simd8 mask = simd8::splat(m); - return simd8x64( - this->chunks[0] == mask, - this->chunks[1] == mask - ).to_bitmask(); - } - - simdutf_really_inline uint64_t eq(const simd8x64 &other) const { - return simd8x64( - this->chunks[0] == other.chunks[0], - this->chunks[1] == other.chunks[1] - ).to_bitmask(); - } - - simdutf_really_inline uint64_t lteq(const T m) const { - const simd8 mask = simd8::splat(m); - return simd8x64( - this->chunks[0] <= mask, - this->chunks[1] <= mask - ).to_bitmask(); - } - - simdutf_really_inline uint64_t in_range(const T low, const T high) const { - const simd8 mask_low = simd8::splat(low); - const simd8 mask_high = simd8::splat(high); - - return simd8x64( - (this->chunks[0] <= mask_high) & (this->chunks[0] >= mask_low), - (this->chunks[1] <= mask_high) & (this->chunks[1] >= mask_low) - ).to_bitmask(); - } - simdutf_really_inline uint64_t not_in_range(const T low, const T high) const { - const simd8 mask_low = simd8::splat(low); - const simd8 mask_high = simd8::splat(high); - return simd8x64( - (this->chunks[0] > mask_high) | (this->chunks[0] < mask_low), - (this->chunks[1] > mask_high) | (this->chunks[1] < mask_low) - ).to_bitmask(); - } - simdutf_really_inline uint64_t lt(const T m) const { - const simd8 mask = simd8::splat(m); - return simd8x64( - this->chunks[0] < mask, - this->chunks[1] < mask - ).to_bitmask(); - } - - simdutf_really_inline uint64_t gt(const T m) const { - const simd8 mask = simd8::splat(m); - return simd8x64( - this->chunks[0] > mask, - this->chunks[1] > mask - ).to_bitmask(); - } - simdutf_really_inline uint64_t gteq(const T m) const { - const simd8 mask = simd8::splat(m); - return simd8x64( - this->chunks[0] >= mask, - this->chunks[1] >= mask - ).to_bitmask(); - } - simdutf_really_inline uint64_t gteq_unsigned(const uint8_t m) const { - const simd8 mask = simd8::splat(m); - return simd8x64( - (simd8(__m256i(this->chunks[0])) >= mask), - (simd8(__m256i(this->chunks[1])) >= mask) - ).to_bitmask(); - } - }; // struct simd8x64 - -/* begin file src/simdutf/haswell/simd16-inl.h */ -#ifdef __GNUC__ -#if __GNUC__ < 8 -#define _mm256_set_m128i(xmm1, xmm2) _mm256_permute2f128_si256(_mm256_castsi128_si256(xmm1), _mm256_castsi128_si256(xmm2), 2) -#define _mm256_setr_m128i(xmm2, xmm1) _mm256_permute2f128_si256(_mm256_castsi128_si256(xmm1), _mm256_castsi128_si256(xmm2), 2) -#endif -#endif - -template -struct simd16; - -template> -struct base16: base> { - using bitmask_type = uint32_t; +// Forward-declared so they can be used by splat and friends. +template struct simd8; - simdutf_really_inline base16() : base>() {} - simdutf_really_inline base16(const __m256i _value) : base>(_value) {} - template - simdutf_really_inline base16(const Pointer* ptr) : base16(_mm256_loadu_si256(reinterpret_cast(ptr))) {} - friend simdutf_really_inline Mask operator==(const simd16 lhs, const simd16 rhs) { return _mm256_cmpeq_epi16(lhs, rhs); } +template > +struct base8 : base> { + typedef uint32_t bitmask_t; + typedef uint64_t bitmask2_t; - /// the size of vector in bytes - static const int SIZE = sizeof(base>::value); + simdutf_really_inline base8() : base>() {} + simdutf_really_inline base8(const __m256i _value) : base>(_value) {} + simdutf_really_inline T first() const { + return _mm256_extract_epi8(*this, 0); + } + simdutf_really_inline T last() const { + return _mm256_extract_epi8(*this, 31); + } + friend simdutf_always_inline Mask operator==(const simd8 lhs, + const simd8 rhs) { + return _mm256_cmpeq_epi8(lhs, rhs); + } - /// the number of elements of type T a vector can hold - static const int ELEMENTS = SIZE / sizeof(T); + static const int SIZE = sizeof(base::value); - template - simdutf_really_inline simd16 prev(const simd16 prev_chunk) const { - return _mm256_alignr_epi8(*this, prev_chunk, 16 - N); + template + simdutf_really_inline simd8 prev(const simd8 prev_chunk) const { + return _mm256_alignr_epi8( + *this, _mm256_permute2x128_si256(prev_chunk, *this, 0x21), 16 - N); } }; // SIMD byte mask type (returned by things like eq and gt) -template<> -struct simd16: base16 { - static simdutf_really_inline simd16 splat(bool _value) { return _mm256_set1_epi16(uint16_t(-(!!_value))); } +template <> struct simd8 : base8 { + static simdutf_really_inline simd8 splat(bool _value) { + return _mm256_set1_epi8(uint8_t(-(!!_value))); + } - simdutf_really_inline simd16() : base16() {} - simdutf_really_inline simd16(const __m256i _value) : base16(_value) {} + simdutf_really_inline simd8() : base8() {} + simdutf_really_inline simd8(const __m256i _value) : base8(_value) {} // Splat constructor - simdutf_really_inline simd16(bool _value) : base16(splat(_value)) {} + simdutf_really_inline simd8(bool _value) : base8(splat(_value)) {} - simdutf_really_inline bitmask_type to_bitmask() const { return _mm256_movemask_epi8(*this); } - simdutf_really_inline bool any() const { return !_mm256_testz_si256(*this, *this); } - simdutf_really_inline simd16 operator~() const { return *this ^ true; } + simdutf_really_inline uint32_t to_bitmask() const { + return uint32_t(_mm256_movemask_epi8(*this)); + } + simdutf_really_inline bool any() const { + return !_mm256_testz_si256(*this, *this); + } + simdutf_really_inline bool none() const { + return _mm256_testz_si256(*this, *this); + } + simdutf_really_inline bool all() const { + return static_cast(_mm256_movemask_epi8(*this)) == 0xFFFFFFFF; + } + simdutf_really_inline simd8 operator~() const { return *this ^ true; } }; -template -struct base16_numeric: base16 { - static simdutf_really_inline simd16 splat(T _value) { return _mm256_set1_epi16(_value); } - static simdutf_really_inline simd16 zero() { return _mm256_setzero_si256(); } - static simdutf_really_inline simd16 load(const T values[8]) { +template struct base8_numeric : base8 { + static simdutf_really_inline simd8 splat(T _value) { + return _mm256_set1_epi8(_value); + } + static simdutf_really_inline simd8 zero() { + return _mm256_setzero_si256(); + } + static simdutf_really_inline simd8 load(const T values[32]) { return _mm256_loadu_si256(reinterpret_cast(values)); } + // Repeat 16 values as many times as necessary (usually for lookup tables) + static simdutf_really_inline simd8 repeat_16(T v0, T v1, T v2, T v3, T v4, + T v5, T v6, T v7, T v8, T v9, + T v10, T v11, T v12, T v13, + T v14, T v15) { + return simd8(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, + v14, v15, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, + v12, v13, v14, v15); + } - simdutf_really_inline base16_numeric() : base16() {} - simdutf_really_inline base16_numeric(const __m256i _value) : base16(_value) {} + simdutf_really_inline base8_numeric() : base8() {} + simdutf_really_inline base8_numeric(const __m256i _value) + : base8(_value) {} // Store to array - simdutf_really_inline void store(T dst[8]) const { return _mm256_storeu_si256(reinterpret_cast<__m256i *>(dst), *this); } + simdutf_really_inline void store(T dst[32]) const { + return _mm256_storeu_si256(reinterpret_cast<__m256i *>(dst), *this); + } + + // Addition/subtraction are the same for signed and unsigned + simdutf_really_inline simd8 operator+(const simd8 other) const { + return _mm256_add_epi8(*this, other); + } + simdutf_really_inline simd8 operator-(const simd8 other) const { + return _mm256_sub_epi8(*this, other); + } + simdutf_really_inline simd8 &operator+=(const simd8 other) { + *this = *this + other; + return *static_cast *>(this); + } + simdutf_really_inline simd8 &operator-=(const simd8 other) { + *this = *this - other; + return *static_cast *>(this); + } // Override to distinguish from bool version - simdutf_really_inline simd16 operator~() const { return *this ^ 0xFFFFu; } + simdutf_really_inline simd8 operator~() const { return *this ^ 0xFFu; } - // Addition/subtraction are the same for signed and unsigned - simdutf_really_inline simd16 operator+(const simd16 other) const { return _mm256_add_epi16(*this, other); } - simdutf_really_inline simd16 operator-(const simd16 other) const { return _mm256_sub_epi16(*this, other); } - simdutf_really_inline simd16& operator+=(const simd16 other) { *this = *this + other; return *static_cast*>(this); } - simdutf_really_inline simd16& operator-=(const simd16 other) { *this = *this - other; return *static_cast*>(this); } + // Perform a lookup assuming the value is between 0 and 16 (undefined behavior + // for out of range values) + template + simdutf_really_inline simd8 lookup_16(simd8 lookup_table) const { + return _mm256_shuffle_epi8(lookup_table, *this); + } + + template + simdutf_really_inline simd8 + lookup_16(L replace0, L replace1, L replace2, L replace3, L replace4, + L replace5, L replace6, L replace7, L replace8, L replace9, + L replace10, L replace11, L replace12, L replace13, L replace14, + L replace15) const { + return lookup_16(simd8::repeat_16( + replace0, replace1, replace2, replace3, replace4, replace5, replace6, + replace7, replace8, replace9, replace10, replace11, replace12, + replace13, replace14, replace15)); + } }; -// Signed code units -template<> -struct simd16 : base16_numeric { - simdutf_really_inline simd16() : base16_numeric() {} - simdutf_really_inline simd16(const __m256i _value) : base16_numeric(_value) {} +// Signed bytes +template <> struct simd8 : base8_numeric { + simdutf_really_inline simd8() : base8_numeric() {} + simdutf_really_inline simd8(const __m256i _value) + : base8_numeric(_value) {} + // Splat constructor - simdutf_really_inline simd16(int16_t _value) : simd16(splat(_value)) {} + simdutf_really_inline simd8(int8_t _value) : simd8(splat(_value)) {} // Array constructor - simdutf_really_inline simd16(const int16_t* values) : simd16(load(values)) {} - simdutf_really_inline simd16(const char16_t* values) : simd16(load(reinterpret_cast(values))) {} + simdutf_really_inline simd8(const int8_t values[32]) : simd8(load(values)) {} + simdutf_really_inline operator simd8() const; + // Member-by-member initialization + simdutf_really_inline + simd8(int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, + int8_t v6, int8_t v7, int8_t v8, int8_t v9, int8_t v10, int8_t v11, + int8_t v12, int8_t v13, int8_t v14, int8_t v15, int8_t v16, int8_t v17, + int8_t v18, int8_t v19, int8_t v20, int8_t v21, int8_t v22, int8_t v23, + int8_t v24, int8_t v25, int8_t v26, int8_t v27, int8_t v28, int8_t v29, + int8_t v30, int8_t v31) + : simd8(_mm256_setr_epi8(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, + v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, + v22, v23, v24, v25, v26, v27, v28, v29, v30, + v31)) {} + // Repeat 16 values as many times as necessary (usually for lookup tables) + simdutf_really_inline static simd8 + repeat_16(int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, + int8_t v6, int8_t v7, int8_t v8, int8_t v9, int8_t v10, int8_t v11, + int8_t v12, int8_t v13, int8_t v14, int8_t v15) { + return simd8(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, + v13, v14, v15, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, + v10, v11, v12, v13, v14, v15); + } + simdutf_really_inline bool is_ascii() const { + return _mm256_movemask_epi8(*this) == 0; + } // Order-sensitive comparisons - simdutf_really_inline simd16 max_val(const simd16 other) const { return _mm256_max_epi16(*this, other); } - simdutf_really_inline simd16 min_val(const simd16 other) const { return _mm256_min_epi16(*this, other); } - simdutf_really_inline simd16 operator>(const simd16 other) const { return _mm256_cmpgt_epi16(*this, other); } - simdutf_really_inline simd16 operator<(const simd16 other) const { return _mm256_cmpgt_epi16(other, *this); } + simdutf_really_inline simd8 max_val(const simd8 other) const { + return _mm256_max_epi8(*this, other); + } + simdutf_really_inline simd8 min_val(const simd8 other) const { + return _mm256_min_epi8(*this, other); + } + simdutf_really_inline simd8 operator>(const simd8 other) const { + return _mm256_cmpgt_epi8(*this, other); + } + simdutf_really_inline simd8 operator<(const simd8 other) const { + return _mm256_cmpgt_epi8(other, *this); + } }; -// Unsigned code units -template<> -struct simd16: base16_numeric { - simdutf_really_inline simd16() : base16_numeric() {} - simdutf_really_inline simd16(const __m256i _value) : base16_numeric(_value) {} - +// Unsigned bytes +template <> struct simd8 : base8_numeric { + simdutf_really_inline simd8() : base8_numeric() {} + simdutf_really_inline simd8(const __m256i _value) + : base8_numeric(_value) {} // Splat constructor - simdutf_really_inline simd16(uint16_t _value) : simd16(splat(_value)) {} + simdutf_really_inline simd8(uint8_t _value) : simd8(splat(_value)) {} // Array constructor - simdutf_really_inline simd16(const uint16_t* values) : simd16(load(values)) {} - simdutf_really_inline simd16(const char16_t* values) : simd16(load(reinterpret_cast(values))) {} + simdutf_really_inline simd8(const uint8_t values[32]) : simd8(load(values)) {} + // Member-by-member initialization + simdutf_really_inline + simd8(uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, + uint8_t v6, uint8_t v7, uint8_t v8, uint8_t v9, uint8_t v10, + uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15, + uint8_t v16, uint8_t v17, uint8_t v18, uint8_t v19, uint8_t v20, + uint8_t v21, uint8_t v22, uint8_t v23, uint8_t v24, uint8_t v25, + uint8_t v26, uint8_t v27, uint8_t v28, uint8_t v29, uint8_t v30, + uint8_t v31) + : simd8(_mm256_setr_epi8(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, + v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, + v22, v23, v24, v25, v26, v27, v28, v29, v30, + v31)) {} + // Repeat 16 values as many times as necessary (usually for lookup tables) + simdutf_really_inline static simd8 + repeat_16(uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, + uint8_t v5, uint8_t v6, uint8_t v7, uint8_t v8, uint8_t v9, + uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, + uint8_t v15) { + return simd8(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, + v13, v14, v15, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, + v10, v11, v12, v13, v14, v15); + } // Saturated math - simdutf_really_inline simd16 saturating_add(const simd16 other) const { return _mm256_adds_epu16(*this, other); } - simdutf_really_inline simd16 saturating_sub(const simd16 other) const { return _mm256_subs_epu16(*this, other); } + simdutf_really_inline simd8 + saturating_add(const simd8 other) const { + return _mm256_adds_epu8(*this, other); + } + simdutf_really_inline simd8 + saturating_sub(const simd8 other) const { + return _mm256_subs_epu8(*this, other); + } // Order-specific operations - simdutf_really_inline simd16 max_val(const simd16 other) const { return _mm256_max_epu16(*this, other); } - simdutf_really_inline simd16 min_val(const simd16 other) const { return _mm256_min_epu16(*this, other); } + simdutf_really_inline simd8 + max_val(const simd8 other) const { + return _mm256_max_epu8(*this, other); + } + simdutf_really_inline simd8 + min_val(const simd8 other) const { + return _mm256_min_epu8(other, *this); + } // Same as >, but only guarantees true is nonzero (< guarantees true = -1) - simdutf_really_inline simd16 gt_bits(const simd16 other) const { return this->saturating_sub(other); } + simdutf_really_inline simd8 + gt_bits(const simd8 other) const { + return this->saturating_sub(other); + } // Same as <, but only guarantees true is nonzero (< guarantees true = -1) - simdutf_really_inline simd16 lt_bits(const simd16 other) const { return other.saturating_sub(*this); } - simdutf_really_inline simd16 operator<=(const simd16 other) const { return other.max_val(*this) == other; } - simdutf_really_inline simd16 operator>=(const simd16 other) const { return other.min_val(*this) == other; } - simdutf_really_inline simd16 operator>(const simd16 other) const { return this->gt_bits(other).any_bits_set(); } - simdutf_really_inline simd16 operator<(const simd16 other) const { return this->gt_bits(other).any_bits_set(); } + simdutf_really_inline simd8 + lt_bits(const simd8 other) const { + return other.saturating_sub(*this); + } + simdutf_really_inline simd8 + operator<=(const simd8 other) const { + return other.max_val(*this) == other; + } + simdutf_really_inline simd8 + operator>=(const simd8 other) const { + return other.min_val(*this) == other; + } + simdutf_really_inline simd8 + operator>(const simd8 other) const { + return this->gt_bits(other).any_bits_set(); + } + simdutf_really_inline simd8 + operator<(const simd8 other) const { + return this->lt_bits(other).any_bits_set(); + } // Bit-specific operations - simdutf_really_inline simd16 bits_not_set() const { return *this == uint16_t(0); } - simdutf_really_inline simd16 bits_not_set(simd16 bits) const { return (*this & bits).bits_not_set(); } - simdutf_really_inline simd16 any_bits_set() const { return ~this->bits_not_set(); } - simdutf_really_inline simd16 any_bits_set(simd16 bits) const { return ~this->bits_not_set(bits); } - - simdutf_really_inline bool bits_not_set_anywhere() const { return _mm256_testz_si256(*this, *this); } - simdutf_really_inline bool any_bits_set_anywhere() const { return !bits_not_set_anywhere(); } - simdutf_really_inline bool bits_not_set_anywhere(simd16 bits) const { return _mm256_testz_si256(*this, bits); } - simdutf_really_inline bool any_bits_set_anywhere(simd16 bits) const { return !bits_not_set_anywhere(bits); } - template - simdutf_really_inline simd16 shr() const { return simd16(_mm256_srli_epi16(*this, N)); } - template - simdutf_really_inline simd16 shl() const { return simd16(_mm256_slli_epi16(*this, N)); } + simdutf_really_inline simd8 bits_not_set() const { + return *this == uint8_t(0); + } + simdutf_really_inline simd8 bits_not_set(simd8 bits) const { + return (*this & bits).bits_not_set(); + } + simdutf_really_inline simd8 any_bits_set() const { + return ~this->bits_not_set(); + } + simdutf_really_inline simd8 any_bits_set(simd8 bits) const { + return ~this->bits_not_set(bits); + } + simdutf_really_inline bool is_ascii() const { + return _mm256_movemask_epi8(*this) == 0; + } + simdutf_really_inline bool bits_not_set_anywhere() const { + return _mm256_testz_si256(*this, *this); + } + simdutf_really_inline bool any_bits_set_anywhere() const { + return !bits_not_set_anywhere(); + } + simdutf_really_inline bool bits_not_set_anywhere(simd8 bits) const { + return _mm256_testz_si256(*this, bits); + } + simdutf_really_inline bool any_bits_set_anywhere(simd8 bits) const { + return !bits_not_set_anywhere(bits); + } + template simdutf_really_inline simd8 shr() const { + return simd8(_mm256_srli_epi16(*this, N)) & uint8_t(0xFFu >> N); + } + template simdutf_really_inline simd8 shl() const { + return simd8(_mm256_slli_epi16(*this, N)) & uint8_t(0xFFu << N); + } // Get one of the bits and make a bitmask out of it. // e.g. value.get_bit<7>() gets the high bit - template - simdutf_really_inline int get_bit() const { return _mm256_movemask_epi8(_mm256_slli_epi16(*this, 15-N)); } - - // Change the endianness - simdutf_really_inline simd16 swap_bytes() const { - const __m256i swap = _mm256_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, - 17, 16, 19, 18, 21, 20, 23, 22, 25, 24, 27, 26, 29, 28, 31, 30); - return _mm256_shuffle_epi8(*this, swap); + template simdutf_really_inline int get_bit() const { + return _mm256_movemask_epi8(_mm256_slli_epi16(*this, 7 - N)); } +}; +simdutf_really_inline simd8::operator simd8() const { + return this->value; +} - // Pack with the unsigned saturation of two uint16_t code units into single uint8_t vector - static simdutf_really_inline simd8 pack(const simd16& v0, const simd16& v1) { - // Note: the AVX2 variant of pack operates on 128-bit lanes, thus - // we have to shuffle lanes in order to produce bytes in the - // correct order. - - // get the 0th lanes - const __m128i lo_0 = _mm256_extracti128_si256(v0, 0); - const __m128i lo_1 = _mm256_extracti128_si256(v1, 0); +template struct simd8x64 { + static constexpr int NUM_CHUNKS = 64 / sizeof(simd8); + static_assert(NUM_CHUNKS == 2, + "Haswell kernel should use two registers per 64-byte block."); + simd8 chunks[NUM_CHUNKS]; + + simd8x64(const simd8x64 &o) = delete; // no copy allowed + simd8x64 & + operator=(const simd8 other) = delete; // no assignment allowed + simd8x64() = delete; // no default constructor allowed + + simdutf_really_inline simd8x64(const simd8 chunk0, const simd8 chunk1) + : chunks{chunk0, chunk1} {} + simdutf_really_inline simd8x64(const T *ptr) + : chunks{simd8::load(ptr), + simd8::load(ptr + sizeof(simd8) / sizeof(T))} {} + + simdutf_really_inline void store(T *ptr) const { + this->chunks[0].store(ptr + sizeof(simd8) * 0 / sizeof(T)); + this->chunks[1].store(ptr + sizeof(simd8) * 1 / sizeof(T)); + } + + simdutf_really_inline uint64_t to_bitmask() const { + uint64_t r_lo = uint32_t(this->chunks[0].to_bitmask()); + uint64_t r_hi = this->chunks[1].to_bitmask(); + return r_lo | (r_hi << 32); + } + + simdutf_really_inline simd8x64 &operator|=(const simd8x64 &other) { + this->chunks[0] |= other.chunks[0]; + this->chunks[1] |= other.chunks[1]; + return *this; + } + + simdutf_really_inline simd8 reduce_or() const { + return this->chunks[0] | this->chunks[1]; + } + + simdutf_really_inline bool is_ascii() const { + return this->reduce_or().is_ascii(); + } + + template + simdutf_really_inline void store_ascii_as_utf16(char16_t *ptr) const { + this->chunks[0].template store_ascii_as_utf16(ptr + + sizeof(simd8) * 0); + this->chunks[1].template store_ascii_as_utf16(ptr + + sizeof(simd8) * 1); + } + + simdutf_really_inline void store_ascii_as_utf32(char32_t *ptr) const { + this->chunks[0].store_ascii_as_utf32(ptr + sizeof(simd8) * 0); + this->chunks[1].store_ascii_as_utf32(ptr + sizeof(simd8) * 1); + } + + simdutf_really_inline simd8x64 bit_or(const T m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(this->chunks[0] | mask, this->chunks[1] | mask); + } + + simdutf_really_inline uint64_t eq(const T m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(this->chunks[0] == mask, this->chunks[1] == mask) + .to_bitmask(); + } + + simdutf_really_inline uint64_t eq(const simd8x64 &other) const { + return simd8x64(this->chunks[0] == other.chunks[0], + this->chunks[1] == other.chunks[1]) + .to_bitmask(); + } + + simdutf_really_inline uint64_t lteq(const T m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(this->chunks[0] <= mask, this->chunks[1] <= mask) + .to_bitmask(); + } + + simdutf_really_inline uint64_t in_range(const T low, const T high) const { + const simd8 mask_low = simd8::splat(low); + const simd8 mask_high = simd8::splat(high); + + return simd8x64( + (this->chunks[0] <= mask_high) & (this->chunks[0] >= mask_low), + (this->chunks[1] <= mask_high) & (this->chunks[1] >= mask_low)) + .to_bitmask(); + } + simdutf_really_inline uint64_t not_in_range(const T low, const T high) const { + const simd8 mask_low = simd8::splat(low); + const simd8 mask_high = simd8::splat(high); + return simd8x64( + (this->chunks[0] > mask_high) | (this->chunks[0] < mask_low), + (this->chunks[1] > mask_high) | (this->chunks[1] < mask_low)) + .to_bitmask(); + } + simdutf_really_inline uint64_t lt(const T m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(this->chunks[0] < mask, this->chunks[1] < mask) + .to_bitmask(); + } + + simdutf_really_inline uint64_t gt(const T m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(this->chunks[0] > mask, this->chunks[1] > mask) + .to_bitmask(); + } + simdutf_really_inline uint64_t gteq(const T m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(this->chunks[0] >= mask, this->chunks[1] >= mask) + .to_bitmask(); + } + simdutf_really_inline uint64_t gteq_unsigned(const uint8_t m) const { + const simd8 mask = simd8::splat(m); + return simd8x64((simd8(__m256i(this->chunks[0])) >= mask), + (simd8(__m256i(this->chunks[1])) >= mask)) + .to_bitmask(); + } +}; // struct simd8x64 + +/* begin file src/simdutf/haswell/simd16-inl.h */ +#ifdef __GNUC__ + #if __GNUC__ < 8 + #define _mm256_set_m128i(xmm1, xmm2) \ + _mm256_permute2f128_si256(_mm256_castsi128_si256(xmm1), \ + _mm256_castsi128_si256(xmm2), 2) + #define _mm256_setr_m128i(xmm2, xmm1) \ + _mm256_permute2f128_si256(_mm256_castsi128_si256(xmm1), \ + _mm256_castsi128_si256(xmm2), 2) + #endif +#endif + +template struct simd16; + +template > +struct base16 : base> { + using bitmask_type = uint32_t; + + simdutf_really_inline base16() : base>() {} + simdutf_really_inline base16(const __m256i _value) + : base>(_value) {} + template + simdutf_really_inline base16(const Pointer *ptr) + : base16(_mm256_loadu_si256(reinterpret_cast(ptr))) {} + friend simdutf_always_inline Mask operator==(const simd16 lhs, + const simd16 rhs) { + return _mm256_cmpeq_epi16(lhs, rhs); + } + + /// the size of vector in bytes + static const int SIZE = sizeof(base>::value); + + /// the number of elements of type T a vector can hold + static const int ELEMENTS = SIZE / sizeof(T); + + template + simdutf_really_inline simd16 prev(const simd16 prev_chunk) const { + return _mm256_alignr_epi8(*this, prev_chunk, 16 - N); + } +}; + +// SIMD byte mask type (returned by things like eq and gt) +template <> struct simd16 : base16 { + static simdutf_really_inline simd16 splat(bool _value) { + return _mm256_set1_epi16(uint16_t(-(!!_value))); + } + + simdutf_really_inline simd16() : base16() {} + simdutf_really_inline simd16(const __m256i _value) : base16(_value) {} + // Splat constructor + simdutf_really_inline simd16(bool _value) : base16(splat(_value)) {} + + simdutf_really_inline bitmask_type to_bitmask() const { + return _mm256_movemask_epi8(*this); + } + simdutf_really_inline bool any() const { + return !_mm256_testz_si256(*this, *this); + } + simdutf_really_inline simd16 operator~() const { return *this ^ true; } +}; + +template struct base16_numeric : base16 { + static simdutf_really_inline simd16 splat(T _value) { + return _mm256_set1_epi16(_value); + } + static simdutf_really_inline simd16 zero() { + return _mm256_setzero_si256(); + } + static simdutf_really_inline simd16 load(const T values[8]) { + return _mm256_loadu_si256(reinterpret_cast(values)); + } + + simdutf_really_inline base16_numeric() : base16() {} + simdutf_really_inline base16_numeric(const __m256i _value) + : base16(_value) {} + + // Store to array + simdutf_really_inline void store(T dst[8]) const { + return _mm256_storeu_si256(reinterpret_cast<__m256i *>(dst), *this); + } + + // Override to distinguish from bool version + simdutf_really_inline simd16 operator~() const { return *this ^ 0xFFFFu; } + + // Addition/subtraction are the same for signed and unsigned + simdutf_really_inline simd16 operator+(const simd16 other) const { + return _mm256_add_epi16(*this, other); + } + simdutf_really_inline simd16 operator-(const simd16 other) const { + return _mm256_sub_epi16(*this, other); + } + simdutf_really_inline simd16 &operator+=(const simd16 other) { + *this = *this + other; + return *static_cast *>(this); + } + simdutf_really_inline simd16 &operator-=(const simd16 other) { + *this = *this - other; + return *static_cast *>(this); + } +}; + +// Signed code units +template <> struct simd16 : base16_numeric { + simdutf_really_inline simd16() : base16_numeric() {} + simdutf_really_inline simd16(const __m256i _value) + : base16_numeric(_value) {} + // Splat constructor + simdutf_really_inline simd16(int16_t _value) : simd16(splat(_value)) {} + // Array constructor + simdutf_really_inline simd16(const int16_t *values) : simd16(load(values)) {} + simdutf_really_inline simd16(const char16_t *values) + : simd16(load(reinterpret_cast(values))) {} + // Order-sensitive comparisons + simdutf_really_inline simd16 + max_val(const simd16 other) const { + return _mm256_max_epi16(*this, other); + } + simdutf_really_inline simd16 + min_val(const simd16 other) const { + return _mm256_min_epi16(*this, other); + } + simdutf_really_inline simd16 + operator>(const simd16 other) const { + return _mm256_cmpgt_epi16(*this, other); + } + simdutf_really_inline simd16 + operator<(const simd16 other) const { + return _mm256_cmpgt_epi16(other, *this); + } +}; + +// Unsigned code units +template <> struct simd16 : base16_numeric { + simdutf_really_inline simd16() : base16_numeric() {} + simdutf_really_inline simd16(const __m256i _value) + : base16_numeric(_value) {} + + // Splat constructor + simdutf_really_inline simd16(uint16_t _value) : simd16(splat(_value)) {} + // Array constructor + simdutf_really_inline simd16(const uint16_t *values) : simd16(load(values)) {} + simdutf_really_inline simd16(const char16_t *values) + : simd16(load(reinterpret_cast(values))) {} + + // Saturated math + simdutf_really_inline simd16 + saturating_add(const simd16 other) const { + return _mm256_adds_epu16(*this, other); + } + simdutf_really_inline simd16 + saturating_sub(const simd16 other) const { + return _mm256_subs_epu16(*this, other); + } + + // Order-specific operations + simdutf_really_inline simd16 + max_val(const simd16 other) const { + return _mm256_max_epu16(*this, other); + } + simdutf_really_inline simd16 + min_val(const simd16 other) const { + return _mm256_min_epu16(*this, other); + } + // Same as >, but only guarantees true is nonzero (< guarantees true = -1) + simdutf_really_inline simd16 + gt_bits(const simd16 other) const { + return this->saturating_sub(other); + } + // Same as <, but only guarantees true is nonzero (< guarantees true = -1) + simdutf_really_inline simd16 + lt_bits(const simd16 other) const { + return other.saturating_sub(*this); + } + simdutf_really_inline simd16 + operator<=(const simd16 other) const { + return other.max_val(*this) == other; + } + simdutf_really_inline simd16 + operator>=(const simd16 other) const { + return other.min_val(*this) == other; + } + simdutf_really_inline simd16 + operator>(const simd16 other) const { + return this->gt_bits(other).any_bits_set(); + } + simdutf_really_inline simd16 + operator<(const simd16 other) const { + return this->gt_bits(other).any_bits_set(); + } + + // Bit-specific operations + simdutf_really_inline simd16 bits_not_set() const { + return *this == uint16_t(0); + } + simdutf_really_inline simd16 bits_not_set(simd16 bits) const { + return (*this & bits).bits_not_set(); + } + simdutf_really_inline simd16 any_bits_set() const { + return ~this->bits_not_set(); + } + simdutf_really_inline simd16 any_bits_set(simd16 bits) const { + return ~this->bits_not_set(bits); + } + + simdutf_really_inline bool bits_not_set_anywhere() const { + return _mm256_testz_si256(*this, *this); + } + simdutf_really_inline bool any_bits_set_anywhere() const { + return !bits_not_set_anywhere(); + } + simdutf_really_inline bool + bits_not_set_anywhere(simd16 bits) const { + return _mm256_testz_si256(*this, bits); + } + simdutf_really_inline bool + any_bits_set_anywhere(simd16 bits) const { + return !bits_not_set_anywhere(bits); + } + template simdutf_really_inline simd16 shr() const { + return simd16(_mm256_srli_epi16(*this, N)); + } + template simdutf_really_inline simd16 shl() const { + return simd16(_mm256_slli_epi16(*this, N)); + } + // Get one of the bits and make a bitmask out of it. + // e.g. value.get_bit<7>() gets the high bit + template simdutf_really_inline int get_bit() const { + return _mm256_movemask_epi8(_mm256_slli_epi16(*this, 15 - N)); + } + + // Change the endianness + simdutf_really_inline simd16 swap_bytes() const { + const __m256i swap = _mm256_setr_epi8( + 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, 17, 16, 19, 18, + 21, 20, 23, 22, 25, 24, 27, 26, 29, 28, 31, 30); + return _mm256_shuffle_epi8(*this, swap); + } + + // Pack with the unsigned saturation of two uint16_t code units into single + // uint8_t vector + static simdutf_really_inline simd8 pack(const simd16 &v0, + const simd16 &v1) { + // Note: the AVX2 variant of pack operates on 128-bit lanes, thus + // we have to shuffle lanes in order to produce bytes in the + // correct order. + + // get the 0th lanes + const __m128i lo_0 = _mm256_extracti128_si256(v0, 0); + const __m128i lo_1 = _mm256_extracti128_si256(v1, 0); // get the 1st lanes const __m128i hi_0 = _mm256_extracti128_si256(v0, 1); @@ -2960,105 +3782,99 @@ struct simd16: base16_numeric { } }; +template struct simd16x32 { + static constexpr int NUM_CHUNKS = 64 / sizeof(simd16); + static_assert(NUM_CHUNKS == 2, + "Haswell kernel should use two registers per 64-byte block."); + simd16 chunks[NUM_CHUNKS]; - template - struct simd16x32 { - static constexpr int NUM_CHUNKS = 64 / sizeof(simd16); - static_assert(NUM_CHUNKS == 2, "Haswell kernel should use two registers per 64-byte block."); - simd16 chunks[NUM_CHUNKS]; + simd16x32(const simd16x32 &o) = delete; // no copy allowed + simd16x32 & + operator=(const simd16 other) = delete; // no assignment allowed + simd16x32() = delete; // no default constructor allowed - simd16x32(const simd16x32& o) = delete; // no copy allowed - simd16x32& operator=(const simd16 other) = delete; // no assignment allowed - simd16x32() = delete; // no default constructor allowed + simdutf_really_inline simd16x32(const simd16 chunk0, + const simd16 chunk1) + : chunks{chunk0, chunk1} {} + simdutf_really_inline simd16x32(const T *ptr) + : chunks{simd16::load(ptr), + simd16::load(ptr + sizeof(simd16) / sizeof(T))} {} - simdutf_really_inline simd16x32(const simd16 chunk0, const simd16 chunk1) : chunks{chunk0, chunk1} {} - simdutf_really_inline simd16x32(const T* ptr) : chunks{simd16::load(ptr), simd16::load(ptr+sizeof(simd16)/sizeof(T))} {} - - simdutf_really_inline void store(T* ptr) const { - this->chunks[0].store(ptr+sizeof(simd16)*0/sizeof(T)); - this->chunks[1].store(ptr+sizeof(simd16)*1/sizeof(T)); - } + simdutf_really_inline void store(T *ptr) const { + this->chunks[0].store(ptr + sizeof(simd16) * 0 / sizeof(T)); + this->chunks[1].store(ptr + sizeof(simd16) * 1 / sizeof(T)); + } - simdutf_really_inline uint64_t to_bitmask() const { - uint64_t r_lo = uint32_t(this->chunks[0].to_bitmask()); - uint64_t r_hi = this->chunks[1].to_bitmask(); - return r_lo | (r_hi << 32); - } + simdutf_really_inline uint64_t to_bitmask() const { + uint64_t r_lo = uint32_t(this->chunks[0].to_bitmask()); + uint64_t r_hi = this->chunks[1].to_bitmask(); + return r_lo | (r_hi << 32); + } - simdutf_really_inline simd16 reduce_or() const { - return this->chunks[0] | this->chunks[1]; - } + simdutf_really_inline simd16 reduce_or() const { + return this->chunks[0] | this->chunks[1]; + } - simdutf_really_inline bool is_ascii() const { - return this->reduce_or().is_ascii(); - } + simdutf_really_inline bool is_ascii() const { + return this->reduce_or().is_ascii(); + } - simdutf_really_inline void store_ascii_as_utf16(char16_t * ptr) const { - this->chunks[0].store_ascii_as_utf16(ptr+sizeof(simd16)*0); - this->chunks[1].store_ascii_as_utf16(ptr+sizeof(simd16)); - } + simdutf_really_inline void store_ascii_as_utf16(char16_t *ptr) const { + this->chunks[0].store_ascii_as_utf16(ptr + sizeof(simd16) * 0); + this->chunks[1].store_ascii_as_utf16(ptr + sizeof(simd16)); + } - simdutf_really_inline simd16x32 bit_or(const T m) const { - const simd16 mask = simd16::splat(m); - return simd16x32( - this->chunks[0] | mask, - this->chunks[1] | mask - ); - } + simdutf_really_inline simd16x32 bit_or(const T m) const { + const simd16 mask = simd16::splat(m); + return simd16x32(this->chunks[0] | mask, this->chunks[1] | mask); + } - simdutf_really_inline void swap_bytes() { - this->chunks[0] = this->chunks[0].swap_bytes(); - this->chunks[1] = this->chunks[1].swap_bytes(); - } + simdutf_really_inline void swap_bytes() { + this->chunks[0] = this->chunks[0].swap_bytes(); + this->chunks[1] = this->chunks[1].swap_bytes(); + } - simdutf_really_inline uint64_t eq(const T m) const { - const simd16 mask = simd16::splat(m); - return simd16x32( - this->chunks[0] == mask, - this->chunks[1] == mask - ).to_bitmask(); - } + simdutf_really_inline uint64_t eq(const T m) const { + const simd16 mask = simd16::splat(m); + return simd16x32(this->chunks[0] == mask, this->chunks[1] == mask) + .to_bitmask(); + } - simdutf_really_inline uint64_t eq(const simd16x32 &other) const { - return simd16x32( - this->chunks[0] == other.chunks[0], - this->chunks[1] == other.chunks[1] - ).to_bitmask(); - } + simdutf_really_inline uint64_t eq(const simd16x32 &other) const { + return simd16x32(this->chunks[0] == other.chunks[0], + this->chunks[1] == other.chunks[1]) + .to_bitmask(); + } - simdutf_really_inline uint64_t lteq(const T m) const { - const simd16 mask = simd16::splat(m); - return simd16x32( - this->chunks[0] <= mask, - this->chunks[1] <= mask - ).to_bitmask(); - } + simdutf_really_inline uint64_t lteq(const T m) const { + const simd16 mask = simd16::splat(m); + return simd16x32(this->chunks[0] <= mask, this->chunks[1] <= mask) + .to_bitmask(); + } - simdutf_really_inline uint64_t in_range(const T low, const T high) const { - const simd16 mask_low = simd16::splat(low); - const simd16 mask_high = simd16::splat(high); + simdutf_really_inline uint64_t in_range(const T low, const T high) const { + const simd16 mask_low = simd16::splat(low); + const simd16 mask_high = simd16::splat(high); - return simd16x32( - (this->chunks[0] <= mask_high) & (this->chunks[0] >= mask_low), - (this->chunks[1] <= mask_high) & (this->chunks[1] >= mask_low) - ).to_bitmask(); - } - simdutf_really_inline uint64_t not_in_range(const T low, const T high) const { - const simd16 mask_low = simd16::splat(static_cast(low-1)); - const simd16 mask_high = simd16::splat(static_cast(high+1)); - return simd16x32( - (this->chunks[0] >= mask_high) | (this->chunks[0] <= mask_low), - (this->chunks[1] >= mask_high) | (this->chunks[1] <= mask_low) - ).to_bitmask(); - } - simdutf_really_inline uint64_t lt(const T m) const { - const simd16 mask = simd16::splat(m); - return simd16x32( - this->chunks[0] < mask, - this->chunks[1] < mask - ).to_bitmask(); - } - }; // struct simd16x32 + return simd16x32( + (this->chunks[0] <= mask_high) & (this->chunks[0] >= mask_low), + (this->chunks[1] <= mask_high) & (this->chunks[1] >= mask_low)) + .to_bitmask(); + } + simdutf_really_inline uint64_t not_in_range(const T low, const T high) const { + const simd16 mask_low = simd16::splat(static_cast(low - 1)); + const simd16 mask_high = simd16::splat(static_cast(high + 1)); + return simd16x32( + (this->chunks[0] >= mask_high) | (this->chunks[0] <= mask_low), + (this->chunks[1] >= mask_high) | (this->chunks[1] <= mask_low)) + .to_bitmask(); + } + simdutf_really_inline uint64_t lt(const T m) const { + const simd16 mask = simd16::splat(m); + return simd16x32(this->chunks[0] < mask, this->chunks[1] < mask) + .to_bitmask(); + } +}; // struct simd16x32 /* end file src/simdutf/haswell/simd16-inl.h */ } // namespace simd @@ -3078,7 +3894,8 @@ SIMDUTF_UNTARGET_REGION #endif -#if SIMDUTF_GCC11ORMORE // workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105593 +#if SIMDUTF_GCC11ORMORE // workaround for + // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105593 SIMDUTF_POP_DISABLE_WARNINGS #endif // end of workaround /* end file src/simdutf/haswell/end.h */ @@ -3091,51 +3908,51 @@ SIMDUTF_POP_DISABLE_WARNINGS #define SIMDUTF_WESTMERE_H #ifdef SIMDUTF_FALLBACK_H -#error "westmere.h must be included before fallback.h" + #error "westmere.h must be included before fallback.h" #endif // Default Westmere to on if this is x86-64, unless we'll always select Haswell. #ifndef SIMDUTF_IMPLEMENTATION_WESTMERE -// -// You do not want to set it to (SIMDUTF_IS_X86_64 && !SIMDUTF_REQUIRES_HASWELL) -// because you want to rely on runtime dispatch! -// -#if SIMDUTF_CAN_ALWAYS_RUN_ICELAKE || SIMDUTF_CAN_ALWAYS_RUN_HASWELL -#define SIMDUTF_IMPLEMENTATION_WESTMERE 0 -#else -#define SIMDUTF_IMPLEMENTATION_WESTMERE (SIMDUTF_IS_X86_64) -#endif + // + // You do not want to set it to (SIMDUTF_IS_X86_64 && + // !SIMDUTF_REQUIRES_HASWELL) because you want to rely on runtime dispatch! + // + #if SIMDUTF_CAN_ALWAYS_RUN_ICELAKE || SIMDUTF_CAN_ALWAYS_RUN_HASWELL + #define SIMDUTF_IMPLEMENTATION_WESTMERE 0 + #else + #define SIMDUTF_IMPLEMENTATION_WESTMERE (SIMDUTF_IS_X86_64) + #endif #endif #if (SIMDUTF_IMPLEMENTATION_WESTMERE && SIMDUTF_IS_X86_64 && __SSE4_2__) -#define SIMDUTF_CAN_ALWAYS_RUN_WESTMERE 1 + #define SIMDUTF_CAN_ALWAYS_RUN_WESTMERE 1 #else -#define SIMDUTF_CAN_ALWAYS_RUN_WESTMERE 0 + #define SIMDUTF_CAN_ALWAYS_RUN_WESTMERE 0 #endif #if SIMDUTF_IMPLEMENTATION_WESTMERE -#define SIMDUTF_TARGET_WESTMERE SIMDUTF_TARGET_REGION("sse4.2,popcnt") + #define SIMDUTF_TARGET_WESTMERE SIMDUTF_TARGET_REGION("sse4.2,popcnt") namespace simdutf { /** * Implementation for Westmere (Intel SSE4.2). */ -namespace westmere { -} // namespace westmere +namespace westmere {} // namespace westmere } // namespace simdutf -// -// These two need to be included outside SIMDUTF_TARGET_REGION -// + // + // These two need to be included outside SIMDUTF_TARGET_REGION + // /* begin file src/simdutf/westmere/implementation.h */ #ifndef SIMDUTF_WESTMERE_IMPLEMENTATION_H #define SIMDUTF_WESTMERE_IMPLEMENTATION_H -// The constructor may be executed on any host, so we take care not to use SIMDUTF_TARGET_REGION +// The constructor may be executed on any host, so we take care not to use +// SIMDUTF_TARGET_REGION namespace simdutf { namespace westmere { @@ -3145,88 +3962,197 @@ using namespace simdutf; class implementation final : public simdutf::implementation { public: - simdutf_really_inline implementation() : simdutf::implementation("westmere", "Intel/AMD SSE4.2", internal::instruction_set::SSE42) {} - simdutf_warn_unused int detect_encodings(const char * input, size_t length) const noexcept final; - simdutf_warn_unused bool validate_utf8(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf8_with_errors(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_ascii(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_ascii_with_errors(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_utf16le(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_utf16be(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf16le_with_errors(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf16be_with_errors(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_utf32(const char32_t *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf32_with_errors(const char32_t *buf, size_t len) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf8(const char * buf, size_t len, char* utf8_output) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf16le(const char * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf16be(const char * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf32(const char * buf, size_t len, char32_t* utf32_output) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_latin1(const char * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_latin1_with_errors(const char * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_latin1(const char * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_utf16le(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_utf16be(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_utf16le_with_errors(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_utf16be_with_errors(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_utf16le(const char * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_utf16be(const char * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_utf32(const char * buf, size_t len, char32_t* utf32_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_utf32_with_errors(const char * buf, size_t len, char32_t* utf32_output) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_utf32(const char * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16le_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16be_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16le_to_latin1_with_errors(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16be_to_latin1_with_errors(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16le_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16be_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16le_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16be_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16le_to_utf8_with_errors(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16be_to_utf8_with_errors(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16le_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16be_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_utf8(const char32_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused result convert_utf32_to_utf8_with_errors(const char32_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_utf8(const char32_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_latin1(const char32_t * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused result convert_utf32_to_latin1_with_errors(const char32_t * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_latin1(const char32_t * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_utf16le(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_utf16be(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused result convert_utf32_to_utf16le_with_errors(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused result convert_utf32_to_utf16be_with_errors(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_utf16le(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_utf16be(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16le_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16be_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16le_to_utf32_with_errors(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16be_to_utf32_with_errors(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16le_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16be_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - void change_endianness_utf16(const char16_t * buf, size_t length, char16_t * output) const noexcept final; - simdutf_warn_unused size_t count_utf16le(const char16_t * buf, size_t length) const noexcept; - simdutf_warn_unused size_t count_utf16be(const char16_t * buf, size_t length) const noexcept; - simdutf_warn_unused size_t count_utf8(const char * buf, size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_utf16le(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_utf16be(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_utf16le(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_utf16be(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf16_length_from_utf8(const char * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_utf32(const char32_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf16_length_from_utf32(const char32_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_utf8(const char * input, size_t length) const noexcept; - simdutf_warn_unused size_t latin1_length_from_utf8(const char * input, size_t length) const noexcept; - simdutf_warn_unused size_t latin1_length_from_utf16(size_t length) const noexcept; - simdutf_warn_unused size_t latin1_length_from_utf32(size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_latin1(size_t length) const noexcept; - simdutf_warn_unused size_t utf16_length_from_latin1(size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_latin1(const char * input, size_t length) const noexcept; - simdutf_warn_unused size_t maximal_binary_length_from_base64(const char * input, size_t length) const noexcept; - simdutf_warn_unused result base64_to_binary(const char * input, size_t length, char* output, base64_options options) const noexcept; - simdutf_warn_unused size_t maximal_binary_length_from_base64(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused result base64_to_binary(const char16_t * input, size_t length, char* output, base64_options options) const noexcept; - simdutf_warn_unused size_t base64_length_from_binary(size_t length, base64_options options) const noexcept; - size_t binary_to_base64(const char * input, size_t length, char* output, base64_options options) const noexcept; + simdutf_really_inline implementation() + : simdutf::implementation("westmere", "Intel/AMD SSE4.2", + internal::instruction_set::SSE42) {} + simdutf_warn_unused int detect_encodings(const char *input, + size_t length) const noexcept final; + simdutf_warn_unused bool validate_utf8(const char *buf, + size_t len) const noexcept final; + simdutf_warn_unused result + validate_utf8_with_errors(const char *buf, size_t len) const noexcept final; + simdutf_warn_unused bool validate_ascii(const char *buf, + size_t len) const noexcept final; + simdutf_warn_unused result + validate_ascii_with_errors(const char *buf, size_t len) const noexcept final; + simdutf_warn_unused bool validate_utf16le(const char16_t *buf, + size_t len) const noexcept final; + simdutf_warn_unused bool validate_utf16be(const char16_t *buf, + size_t len) const noexcept final; + simdutf_warn_unused result validate_utf16le_with_errors( + const char16_t *buf, size_t len) const noexcept final; + simdutf_warn_unused result validate_utf16be_with_errors( + const char16_t *buf, size_t len) const noexcept final; + simdutf_warn_unused bool validate_utf32(const char32_t *buf, + size_t len) const noexcept final; + simdutf_warn_unused result validate_utf32_with_errors( + const char32_t *buf, size_t len) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf8( + const char *buf, size_t len, char *utf8_output) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf16le( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf16be( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf32( + const char *buf, size_t len, char32_t *utf32_output) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_latin1_with_errors( + const char *buf, size_t len, char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_utf16le( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_utf16be( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_utf16le_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_utf16be_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_utf16le( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_utf16be( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_utf32( + const char *buf, size_t len, char32_t *utf32_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_utf32_with_errors( + const char *buf, size_t len, char32_t *utf32_output) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_utf32( + const char *buf, size_t len, char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16le_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16be_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16le_to_latin1_with_errors( + const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16be_to_latin1_with_errors( + const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16le_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16be_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16le_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16be_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused result convert_utf32_to_utf8_with_errors( + const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf32_to_latin1(const char32_t *buf, size_t len, + char *latin1_output) const noexcept final; + simdutf_warn_unused result + convert_utf32_to_latin1_with_errors(const char32_t *buf, size_t len, + char *latin1_output) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf32_to_latin1(const char32_t *buf, size_t len, + char *latin1_output) const noexcept final; + simdutf_warn_unused size_t + convert_utf32_to_utf16le(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf32_to_utf16be(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused result convert_utf32_to_utf16le_with_errors( + const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused result convert_utf32_to_utf16be_with_errors( + const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf32_to_utf16le(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf32_to_utf16be(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16le_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16be_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16le_to_utf32_with_errors( + const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16be_to_utf32_with_errors( + const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16le_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16be_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + void change_endianness_utf16(const char16_t *buf, size_t length, + char16_t *output) const noexcept final; + simdutf_warn_unused size_t count_utf16le(const char16_t *buf, + size_t length) const noexcept; + simdutf_warn_unused size_t count_utf16be(const char16_t *buf, + size_t length) const noexcept; + simdutf_warn_unused size_t count_utf8(const char *buf, + size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_utf16le(const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_utf16be(const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t utf32_length_from_utf16le( + const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t utf32_length_from_utf16be( + const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf16_length_from_utf8(const char *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_utf32(const char32_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf16_length_from_utf32(const char32_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf32_length_from_utf8(const char *input, size_t length) const noexcept; + simdutf_warn_unused size_t + latin1_length_from_utf8(const char *input, size_t length) const noexcept; + simdutf_warn_unused size_t + latin1_length_from_utf16(size_t length) const noexcept; + simdutf_warn_unused size_t + latin1_length_from_utf32(size_t length) const noexcept; + simdutf_warn_unused size_t + utf32_length_from_latin1(size_t length) const noexcept; + simdutf_warn_unused size_t + utf16_length_from_latin1(size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_latin1(const char *input, size_t length) const noexcept; + simdutf_warn_unused size_t maximal_binary_length_from_base64( + const char *input, size_t length) const noexcept; + simdutf_warn_unused result base64_to_binary( + const char *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_options = + last_chunk_handling_options::loose) const noexcept; + simdutf_warn_unused size_t maximal_binary_length_from_base64( + const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused result + base64_to_binary(const char16_t *input, size_t length, char *output, + base64_options options, + last_chunk_handling_options last_chunk_options = + last_chunk_handling_options::loose) const noexcept; + simdutf_warn_unused size_t base64_length_from_binary( + size_t length, base64_options options) const noexcept; + size_t binary_to_base64(const char *input, size_t length, char *output, + base64_options options) const noexcept; }; } // namespace westmere @@ -3239,49 +4165,45 @@ class implementation final : public simdutf::implementation { #define SIMDUTF_WESTMERE_INTRINSICS_H #ifdef SIMDUTF_VISUAL_STUDIO -// under clang within visual studio, this will include -#include // visual studio or clang + // under clang within visual studio, this will include + #include // visual studio or clang #else -#if SIMDUTF_GCC11ORMORE + #if SIMDUTF_GCC11ORMORE // We should not get warnings while including yet we do // under some versions of GCC. // If the x86intrin.h header has uninitialized values that are problematic, // it is a GCC issue, we want to ignore these warnings. SIMDUTF_DISABLE_GCC_WARNING(-Wuninitialized) -#endif - -#include // elsewhere + #endif + #include // elsewhere -#if SIMDUTF_GCC11ORMORE + #if SIMDUTF_GCC11ORMORE // cancels the suppression of the -Wuninitialized SIMDUTF_POP_DISABLE_WARNINGS -#endif + #endif #endif // SIMDUTF_VISUAL_STUDIO - #ifdef SIMDUTF_CLANG_VISUAL_STUDIO -/** - * You are not supposed, normally, to include these - * headers directly. Instead you should either include intrin.h - * or x86intrin.h. However, when compiling with clang - * under Windows (i.e., when _MSC_VER is set), these headers - * only get included *if* the corresponding features are detected - * from macros: - */ -#include // for _mm_alignr_epi8 + /** + * You are not supposed, normally, to include these + * headers directly. Instead you should either include intrin.h + * or x86intrin.h. However, when compiling with clang + * under Windows (i.e., when _MSC_VER is set), these headers + * only get included *if* the corresponding features are detected + * from macros: + */ + #include // for _mm_alignr_epi8 #endif - - #endif // SIMDUTF_WESTMERE_INTRINSICS_H /* end file src/simdutf/westmere/intrinsics.h */ -// -// The rest need to be inside the region -// + // + // The rest need to be inside the region + // /* begin file src/simdutf/westmere/begin.h */ // redefining SIMDUTF_IMPLEMENTATION to "westmere" // #define SIMDUTF_IMPLEMENTATION westmere @@ -3293,7 +4215,7 @@ SIMDUTF_TARGET_WESTMERE #endif /* end file src/simdutf/westmere/begin.h */ -// Declarations + // Declarations /* begin file src/simdutf/westmere/bitmanipulation.h */ #ifndef SIMDUTF_WESTMERE_BITMANIPULATION_H #define SIMDUTF_WESTMERE_BITMANIPULATION_H @@ -3305,7 +4227,7 @@ namespace { #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO simdutf_really_inline unsigned __int64 count_ones(uint64_t input_num) { // note: we do not support legacy 32-bit Windows - return __popcnt64(input_num);// Visual Studio wants two underscores + return __popcnt64(input_num); // Visual Studio wants two underscores } #else simdutf_really_inline long long int count_ones(uint64_t input_num) { @@ -3315,13 +4237,13 @@ simdutf_really_inline long long int count_ones(uint64_t input_num) { #if SIMDUTF_NEED_TRAILING_ZEROES simdutf_really_inline int trailing_zeroes(uint64_t input_num) { -#if SIMDUTF_REGULAR_VISUAL_STUDIO + #if SIMDUTF_REGULAR_VISUAL_STUDIO unsigned long ret; _BitScanForward64(&ret, input_num); return (int)ret; -#else // SIMDUTF_REGULAR_VISUAL_STUDIO + #else // SIMDUTF_REGULAR_VISUAL_STUDIO return __builtin_ctzll(input_num); -#endif // SIMDUTF_REGULAR_VISUAL_STUDIO + #endif // SIMDUTF_REGULAR_VISUAL_STUDIO } #endif @@ -3340,1283 +4262,875 @@ namespace westmere { namespace { namespace simd { - template - struct base { - __m128i value; - - // Zero constructor - simdutf_really_inline base() : value{__m128i()} {} - - // Conversion from SIMD register - simdutf_really_inline base(const __m128i _value) : value(_value) {} - // Conversion to SIMD register - simdutf_really_inline operator const __m128i&() const { return this->value; } - simdutf_really_inline operator __m128i&() { return this->value; } - template - simdutf_really_inline void store_ascii_as_utf16(char16_t * p) const { - __m128i first = _mm_cvtepu8_epi16(*this); - __m128i second = _mm_cvtepu8_epi16(_mm_srli_si128(*this,8)); - if (big_endian) { - const __m128i swap = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); - first = _mm_shuffle_epi8(first, swap); - second = _mm_shuffle_epi8(second, swap); - } - _mm_storeu_si128(reinterpret_cast<__m128i *>(p), first); - _mm_storeu_si128(reinterpret_cast<__m128i *>(p+8), second); - } - simdutf_really_inline void store_ascii_as_utf32(char32_t * p) const { - _mm_storeu_si128(reinterpret_cast<__m128i *>(p), _mm_cvtepu8_epi32(*this)); - _mm_storeu_si128(reinterpret_cast<__m128i *>(p+4), _mm_cvtepu8_epi32(_mm_srli_si128(*this,4))); - _mm_storeu_si128(reinterpret_cast<__m128i *>(p+8), _mm_cvtepu8_epi32(_mm_srli_si128(*this,8))); - _mm_storeu_si128(reinterpret_cast<__m128i *>(p+12), _mm_cvtepu8_epi32(_mm_srli_si128(*this,12))); - } - // Bit operations - simdutf_really_inline Child operator|(const Child other) const { return _mm_or_si128(*this, other); } - simdutf_really_inline Child operator&(const Child other) const { return _mm_and_si128(*this, other); } - simdutf_really_inline Child operator^(const Child other) const { return _mm_xor_si128(*this, other); } - simdutf_really_inline Child bit_andnot(const Child other) const { return _mm_andnot_si128(other, *this); } - simdutf_really_inline Child& operator|=(const Child other) { auto this_cast = static_cast(this); *this_cast = *this_cast | other; return *this_cast; } - simdutf_really_inline Child& operator&=(const Child other) { auto this_cast = static_cast(this); *this_cast = *this_cast & other; return *this_cast; } - simdutf_really_inline Child& operator^=(const Child other) { auto this_cast = static_cast(this); *this_cast = *this_cast ^ other; return *this_cast; } - }; - - // Forward-declared so they can be used by splat and friends. - template - struct simd8; - - template> - struct base8: base> { - typedef uint16_t bitmask_t; - typedef uint32_t bitmask2_t; - - simdutf_really_inline T first() const { return _mm_extract_epi8(*this,0); } - simdutf_really_inline T last() const { return _mm_extract_epi8(*this,15); } - simdutf_really_inline base8() : base>() {} - simdutf_really_inline base8(const __m128i _value) : base>(_value) {} - - friend simdutf_really_inline Mask operator==(const simd8 lhs, const simd8 rhs) { return _mm_cmpeq_epi8(lhs, rhs); } - - static const int SIZE = sizeof(base>::value); - - template - simdutf_really_inline simd8 prev(const simd8 prev_chunk) const { - return _mm_alignr_epi8(*this, prev_chunk, 16 - N); - } - }; - - // SIMD byte mask type (returned by things like eq and gt) - template<> - struct simd8: base8 { - static simdutf_really_inline simd8 splat(bool _value) { return _mm_set1_epi8(uint8_t(-(!!_value))); } - - simdutf_really_inline simd8() : base8() {} - simdutf_really_inline simd8(const __m128i _value) : base8(_value) {} - // Splat constructor - simdutf_really_inline simd8(bool _value) : base8(splat(_value)) {} - - simdutf_really_inline int to_bitmask() const { return _mm_movemask_epi8(*this); } - simdutf_really_inline bool any() const { return !_mm_testz_si128(*this, *this); } - simdutf_really_inline bool none() const { return _mm_testz_si128(*this, *this); } - simdutf_really_inline bool all() const { return _mm_movemask_epi8(*this) == 0xFFFF; } - simdutf_really_inline simd8 operator~() const { return *this ^ true; } - }; - - template - struct base8_numeric: base8 { - static simdutf_really_inline simd8 splat(T _value) { return _mm_set1_epi8(_value); } - static simdutf_really_inline simd8 zero() { return _mm_setzero_si128(); } - static simdutf_really_inline simd8 load(const T values[16]) { - return _mm_loadu_si128(reinterpret_cast(values)); - } - // Repeat 16 values as many times as necessary (usually for lookup tables) - static simdutf_really_inline simd8 repeat_16( - T v0, T v1, T v2, T v3, T v4, T v5, T v6, T v7, - T v8, T v9, T v10, T v11, T v12, T v13, T v14, T v15 - ) { - return simd8( - v0, v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10,v11,v12,v13,v14,v15 - ); - } - - simdutf_really_inline base8_numeric() : base8() {} - simdutf_really_inline base8_numeric(const __m128i _value) : base8(_value) {} - - // Store to array - simdutf_really_inline void store(T dst[16]) const { return _mm_storeu_si128(reinterpret_cast<__m128i *>(dst), *this); } - - // Override to distinguish from bool version - simdutf_really_inline simd8 operator~() const { return *this ^ 0xFFu; } - - // Addition/subtraction are the same for signed and unsigned - simdutf_really_inline simd8 operator+(const simd8 other) const { return _mm_add_epi8(*this, other); } - simdutf_really_inline simd8 operator-(const simd8 other) const { return _mm_sub_epi8(*this, other); } - simdutf_really_inline simd8& operator+=(const simd8 other) { *this = *this + other; return *static_cast*>(this); } - simdutf_really_inline simd8& operator-=(const simd8 other) { *this = *this - other; return *static_cast*>(this); } - - // Perform a lookup assuming the value is between 0 and 16 (undefined behavior for out of range values) - template - simdutf_really_inline simd8 lookup_16(simd8 lookup_table) const { - return _mm_shuffle_epi8(lookup_table, *this); - } - - template - simdutf_really_inline simd8 lookup_16( - L replace0, L replace1, L replace2, L replace3, - L replace4, L replace5, L replace6, L replace7, - L replace8, L replace9, L replace10, L replace11, - L replace12, L replace13, L replace14, L replace15) const { - return lookup_16(simd8::repeat_16( - replace0, replace1, replace2, replace3, - replace4, replace5, replace6, replace7, - replace8, replace9, replace10, replace11, - replace12, replace13, replace14, replace15 - )); - } - }; +template struct base { + __m128i value; - // Signed bytes - template<> - struct simd8 : base8_numeric { - simdutf_really_inline simd8() : base8_numeric() {} - simdutf_really_inline simd8(const __m128i _value) : base8_numeric(_value) {} - // Splat constructor - simdutf_really_inline simd8(int8_t _value) : simd8(splat(_value)) {} - // Array constructor - simdutf_really_inline simd8(const int8_t* values) : simd8(load(values)) {} - // Member-by-member initialization - simdutf_really_inline simd8( - int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, int8_t v6, int8_t v7, - int8_t v8, int8_t v9, int8_t v10, int8_t v11, int8_t v12, int8_t v13, int8_t v14, int8_t v15 - ) : simd8(_mm_setr_epi8( - v0, v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10,v11,v12,v13,v14,v15 - )) {} - // Repeat 16 values as many times as necessary (usually for lookup tables) - simdutf_really_inline static simd8 repeat_16( - int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, int8_t v6, int8_t v7, - int8_t v8, int8_t v9, int8_t v10, int8_t v11, int8_t v12, int8_t v13, int8_t v14, int8_t v15 - ) { - return simd8( - v0, v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10,v11,v12,v13,v14,v15 - ); - } - simdutf_really_inline operator simd8() const; - simdutf_really_inline bool is_ascii() const { return _mm_movemask_epi8(*this) == 0; } - - // Order-sensitive comparisons - simdutf_really_inline simd8 max_val(const simd8 other) const { return _mm_max_epi8(*this, other); } - simdutf_really_inline simd8 min_val(const simd8 other) const { return _mm_min_epi8(*this, other); } - simdutf_really_inline simd8 operator>(const simd8 other) const { return _mm_cmpgt_epi8(*this, other); } - simdutf_really_inline simd8 operator<(const simd8 other) const { return _mm_cmpgt_epi8(other, *this); } - }; + // Zero constructor + simdutf_really_inline base() : value{__m128i()} {} - // Unsigned bytes - template<> - struct simd8: base8_numeric { - simdutf_really_inline simd8() : base8_numeric() {} - simdutf_really_inline simd8(const __m128i _value) : base8_numeric(_value) {} - - // Splat constructor - simdutf_really_inline simd8(uint8_t _value) : simd8(splat(_value)) {} - // Array constructor - simdutf_really_inline simd8(const uint8_t* values) : simd8(load(values)) {} - // Member-by-member initialization - simdutf_really_inline simd8( - uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, uint8_t v6, uint8_t v7, - uint8_t v8, uint8_t v9, uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15 - ) : simd8(_mm_setr_epi8( - v0, v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10,v11,v12,v13,v14,v15 - )) {} - // Repeat 16 values as many times as necessary (usually for lookup tables) - simdutf_really_inline static simd8 repeat_16( - uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, uint8_t v6, uint8_t v7, - uint8_t v8, uint8_t v9, uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15 - ) { - return simd8( - v0, v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10,v11,v12,v13,v14,v15 - ); - } - - // Saturated math - simdutf_really_inline simd8 saturating_add(const simd8 other) const { return _mm_adds_epu8(*this, other); } - simdutf_really_inline simd8 saturating_sub(const simd8 other) const { return _mm_subs_epu8(*this, other); } - - // Order-specific operations - simdutf_really_inline simd8 max_val(const simd8 other) const { return _mm_max_epu8(*this, other); } - simdutf_really_inline simd8 min_val(const simd8 other) const { return _mm_min_epu8(*this, other); } - // Same as >, but only guarantees true is nonzero (< guarantees true = -1) - simdutf_really_inline simd8 gt_bits(const simd8 other) const { return this->saturating_sub(other); } - // Same as <, but only guarantees true is nonzero (< guarantees true = -1) - simdutf_really_inline simd8 lt_bits(const simd8 other) const { return other.saturating_sub(*this); } - simdutf_really_inline simd8 operator<=(const simd8 other) const { return other.max_val(*this) == other; } - simdutf_really_inline simd8 operator>=(const simd8 other) const { return other.min_val(*this) == other; } - simdutf_really_inline simd8 operator>(const simd8 other) const { return this->gt_bits(other).any_bits_set(); } - simdutf_really_inline simd8 operator<(const simd8 other) const { return this->gt_bits(other).any_bits_set(); } - - // Bit-specific operations - simdutf_really_inline simd8 bits_not_set() const { return *this == uint8_t(0); } - simdutf_really_inline simd8 bits_not_set(simd8 bits) const { return (*this & bits).bits_not_set(); } - simdutf_really_inline simd8 any_bits_set() const { return ~this->bits_not_set(); } - simdutf_really_inline simd8 any_bits_set(simd8 bits) const { return ~this->bits_not_set(bits); } - simdutf_really_inline bool is_ascii() const { return _mm_movemask_epi8(*this) == 0; } - - simdutf_really_inline bool bits_not_set_anywhere() const { return _mm_testz_si128(*this, *this); } - simdutf_really_inline bool any_bits_set_anywhere() const { return !bits_not_set_anywhere(); } - simdutf_really_inline bool bits_not_set_anywhere(simd8 bits) const { return _mm_testz_si128(*this, bits); } - simdutf_really_inline bool any_bits_set_anywhere(simd8 bits) const { return !bits_not_set_anywhere(bits); } - template - simdutf_really_inline simd8 shr() const { return simd8(_mm_srli_epi16(*this, N)) & uint8_t(0xFFu >> N); } - template - simdutf_really_inline simd8 shl() const { return simd8(_mm_slli_epi16(*this, N)) & uint8_t(0xFFu << N); } - // Get one of the bits and make a bitmask out of it. - // e.g. value.get_bit<7>() gets the high bit - template - simdutf_really_inline int get_bit() const { return _mm_movemask_epi8(_mm_slli_epi16(*this, 7-N)); } - }; - simdutf_really_inline simd8::operator simd8() const { return this->value; } - - // Unsigned bytes - template<> - struct simd8: base { - static simdutf_really_inline simd8 splat(uint16_t _value) { return _mm_set1_epi16(_value); } - static simdutf_really_inline simd8 load(const uint16_t values[8]) { - return _mm_loadu_si128(reinterpret_cast(values)); - } - - simdutf_really_inline simd8() : base() {} - simdutf_really_inline simd8(const __m128i _value) : base(_value) {} - // Splat constructor - simdutf_really_inline simd8(uint16_t _value) : simd8(splat(_value)) {} - // Array constructor - simdutf_really_inline simd8(const uint16_t* values) : simd8(load(values)) {} - // Member-by-member initialization - simdutf_really_inline simd8( - uint16_t v0, uint16_t v1, uint16_t v2, uint16_t v3, uint16_t v4, uint16_t v5, uint16_t v6, uint16_t v7 - ) : simd8(_mm_setr_epi16( - v0, v1, v2, v3, v4, v5, v6, v7 - )) {} - - // Saturated math - simdutf_really_inline simd8 saturating_add(const simd8 other) const { return _mm_adds_epu16(*this, other); } - simdutf_really_inline simd8 saturating_sub(const simd8 other) const { return _mm_subs_epu16(*this, other); } - - // Order-specific operations - simdutf_really_inline simd8 max_val(const simd8 other) const { return _mm_max_epu16(*this, other); } - simdutf_really_inline simd8 min_val(const simd8 other) const { return _mm_min_epu16(*this, other); } - // Same as >, but only guarantees true is nonzero (< guarantees true = -1) - simdutf_really_inline simd8 gt_bits(const simd8 other) const { return this->saturating_sub(other); } - // Same as <, but only guarantees true is nonzero (< guarantees true = -1) - simdutf_really_inline simd8 lt_bits(const simd8 other) const { return other.saturating_sub(*this); } - simdutf_really_inline simd8 operator<=(const simd8 other) const { return other.max_val(*this) == other; } - simdutf_really_inline simd8 operator>=(const simd8 other) const { return other.min_val(*this) == other; } - simdutf_really_inline simd8 operator==(const simd8 other) const { return _mm_cmpeq_epi16(*this, other); } - simdutf_really_inline simd8 operator&(const simd8 other) const { return _mm_and_si128(*this, other); } - simdutf_really_inline simd8 operator|(const simd8 other) const { return _mm_or_si128(*this, other); } - - // Bit-specific operations - simdutf_really_inline simd8 bits_not_set() const { return *this == uint16_t(0); } - simdutf_really_inline simd8 any_bits_set() const { return ~this->bits_not_set(); } - - simdutf_really_inline bool bits_not_set_anywhere() const { return _mm_testz_si128(*this, *this); } - simdutf_really_inline bool any_bits_set_anywhere() const { return !bits_not_set_anywhere(); } - simdutf_really_inline bool bits_not_set_anywhere(simd8 bits) const { return _mm_testz_si128(*this, bits); } - simdutf_really_inline bool any_bits_set_anywhere(simd8 bits) const { return !bits_not_set_anywhere(bits); } - }; - template - struct simd8x64 { - static constexpr int NUM_CHUNKS = 64 / sizeof(simd8); - static_assert(NUM_CHUNKS == 4, "Westmere kernel should use four registers per 64-byte block."); - simd8 chunks[NUM_CHUNKS]; - - simd8x64(const simd8x64& o) = delete; // no copy allowed - simd8x64& operator=(const simd8 other) = delete; // no assignment allowed - simd8x64() = delete; // no default constructor allowed - - simdutf_really_inline simd8x64(const simd8 chunk0, const simd8 chunk1, const simd8 chunk2, const simd8 chunk3) : chunks{chunk0, chunk1, chunk2, chunk3} {} - simdutf_really_inline simd8x64(const T* ptr) : chunks{simd8::load(ptr), simd8::load(ptr+sizeof(simd8)/sizeof(T)), simd8::load(ptr+2*sizeof(simd8)/sizeof(T)), simd8::load(ptr+3*sizeof(simd8)/sizeof(T))} {} - - simdutf_really_inline void store(T* ptr) const { - this->chunks[0].store(ptr+sizeof(simd8)*0/sizeof(T)); - this->chunks[1].store(ptr+sizeof(simd8)*1/sizeof(T)); - this->chunks[2].store(ptr+sizeof(simd8)*2/sizeof(T)); - this->chunks[3].store(ptr+sizeof(simd8)*3/sizeof(T)); - } - - simdutf_really_inline simd8x64& operator |=(const simd8x64 &other) { - this->chunks[0] |= other.chunks[0]; - this->chunks[1] |= other.chunks[1]; - this->chunks[2] |= other.chunks[2]; - this->chunks[3] |= other.chunks[3]; - return *this; - } - - simdutf_really_inline simd8 reduce_or() const { - return (this->chunks[0] | this->chunks[1]) | (this->chunks[2] | this->chunks[3]); - } - - simdutf_really_inline bool is_ascii() const { - return this->reduce_or().is_ascii(); - } - - template - simdutf_really_inline void store_ascii_as_utf16(char16_t * ptr) const { - this->chunks[0].template store_ascii_as_utf16(ptr+sizeof(simd8)*0); - this->chunks[1].template store_ascii_as_utf16(ptr+sizeof(simd8)*1); - this->chunks[2].template store_ascii_as_utf16(ptr+sizeof(simd8)*2); - this->chunks[3].template store_ascii_as_utf16(ptr+sizeof(simd8)*3); - } - - simdutf_really_inline void store_ascii_as_utf32(char32_t * ptr) const { - this->chunks[0].store_ascii_as_utf32(ptr+sizeof(simd8)*0); - this->chunks[1].store_ascii_as_utf32(ptr+sizeof(simd8)*1); - this->chunks[2].store_ascii_as_utf32(ptr+sizeof(simd8)*2); - this->chunks[3].store_ascii_as_utf32(ptr+sizeof(simd8)*3); - } - - simdutf_really_inline uint64_t to_bitmask() const { - uint64_t r0 = uint32_t(this->chunks[0].to_bitmask()); - uint64_t r1 = this->chunks[1].to_bitmask(); - uint64_t r2 = this->chunks[2].to_bitmask(); - uint64_t r3 = this->chunks[3].to_bitmask(); - return r0 | (r1 << 16) | (r2 << 32) | (r3 << 48); - } - - simdutf_really_inline uint64_t eq(const T m) const { - const simd8 mask = simd8::splat(m); - return simd8x64( - this->chunks[0] == mask, - this->chunks[1] == mask, - this->chunks[2] == mask, - this->chunks[3] == mask - ).to_bitmask(); - } - - simdutf_really_inline uint64_t eq(const simd8x64 &other) const { - return simd8x64( - this->chunks[0] == other.chunks[0], - this->chunks[1] == other.chunks[1], - this->chunks[2] == other.chunks[2], - this->chunks[3] == other.chunks[3] - ).to_bitmask(); - } - - simdutf_really_inline uint64_t lteq(const T m) const { - const simd8 mask = simd8::splat(m); - return simd8x64( - this->chunks[0] <= mask, - this->chunks[1] <= mask, - this->chunks[2] <= mask, - this->chunks[3] <= mask - ).to_bitmask(); - } - - simdutf_really_inline uint64_t in_range(const T low, const T high) const { - const simd8 mask_low = simd8::splat(low); - const simd8 mask_high = simd8::splat(high); - - return simd8x64( - (this->chunks[0] <= mask_high) & (this->chunks[0] >= mask_low), - (this->chunks[1] <= mask_high) & (this->chunks[1] >= mask_low), - (this->chunks[2] <= mask_high) & (this->chunks[2] >= mask_low), - (this->chunks[3] <= mask_high) & (this->chunks[3] >= mask_low) - ).to_bitmask(); - } - simdutf_really_inline uint64_t not_in_range(const T low, const T high) const { - const simd8 mask_low = simd8::splat(low-1); - const simd8 mask_high = simd8::splat(high+1); - return simd8x64( - (this->chunks[0] >= mask_high) | (this->chunks[0] <= mask_low), - (this->chunks[1] >= mask_high) | (this->chunks[1] <= mask_low), - (this->chunks[2] >= mask_high) | (this->chunks[2] <= mask_low), - (this->chunks[3] >= mask_high) | (this->chunks[3] <= mask_low) - ).to_bitmask(); - } - simdutf_really_inline uint64_t lt(const T m) const { - const simd8 mask = simd8::splat(m); - return simd8x64( - this->chunks[0] < mask, - this->chunks[1] < mask, - this->chunks[2] < mask, - this->chunks[3] < mask - ).to_bitmask(); - } - - simdutf_really_inline uint64_t gt(const T m) const { - const simd8 mask = simd8::splat(m); - return simd8x64( - this->chunks[0] > mask, - this->chunks[1] > mask, - this->chunks[2] > mask, - this->chunks[3] > mask - ).to_bitmask(); - } - simdutf_really_inline uint64_t gteq(const T m) const { - const simd8 mask = simd8::splat(m); - return simd8x64( - this->chunks[0] >= mask, - this->chunks[1] >= mask, - this->chunks[2] >= mask, - this->chunks[3] >= mask - ).to_bitmask(); - } - simdutf_really_inline uint64_t gteq_unsigned(const uint8_t m) const { - const simd8 mask = simd8::splat(m); - return simd8x64( - simd8(__m128i(this->chunks[0])) >= mask, - simd8(__m128i(this->chunks[1])) >= mask, - simd8(__m128i(this->chunks[2])) >= mask, - simd8(__m128i(this->chunks[3])) >= mask - ).to_bitmask(); - } - }; // struct simd8x64 + // Conversion from SIMD register + simdutf_really_inline base(const __m128i _value) : value(_value) {} + // Conversion to SIMD register + simdutf_really_inline operator const __m128i &() const { return this->value; } + simdutf_really_inline operator __m128i &() { return this->value; } + template + simdutf_really_inline void store_ascii_as_utf16(char16_t *p) const { + __m128i first = _mm_cvtepu8_epi16(*this); + __m128i second = _mm_cvtepu8_epi16(_mm_srli_si128(*this, 8)); + if (big_endian) { + const __m128i swap = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + first = _mm_shuffle_epi8(first, swap); + second = _mm_shuffle_epi8(second, swap); + } + _mm_storeu_si128(reinterpret_cast<__m128i *>(p), first); + _mm_storeu_si128(reinterpret_cast<__m128i *>(p + 8), second); + } + simdutf_really_inline void store_ascii_as_utf32(char32_t *p) const { + _mm_storeu_si128(reinterpret_cast<__m128i *>(p), _mm_cvtepu8_epi32(*this)); + _mm_storeu_si128(reinterpret_cast<__m128i *>(p + 4), + _mm_cvtepu8_epi32(_mm_srli_si128(*this, 4))); + _mm_storeu_si128(reinterpret_cast<__m128i *>(p + 8), + _mm_cvtepu8_epi32(_mm_srli_si128(*this, 8))); + _mm_storeu_si128(reinterpret_cast<__m128i *>(p + 12), + _mm_cvtepu8_epi32(_mm_srli_si128(*this, 12))); + } + // Bit operations + simdutf_really_inline Child operator|(const Child other) const { + return _mm_or_si128(*this, other); + } + simdutf_really_inline Child operator&(const Child other) const { + return _mm_and_si128(*this, other); + } + simdutf_really_inline Child operator^(const Child other) const { + return _mm_xor_si128(*this, other); + } + simdutf_really_inline Child bit_andnot(const Child other) const { + return _mm_andnot_si128(other, *this); + } + simdutf_really_inline Child &operator|=(const Child other) { + auto this_cast = static_cast(this); + *this_cast = *this_cast | other; + return *this_cast; + } + simdutf_really_inline Child &operator&=(const Child other) { + auto this_cast = static_cast(this); + *this_cast = *this_cast & other; + return *this_cast; + } + simdutf_really_inline Child &operator^=(const Child other) { + auto this_cast = static_cast(this); + *this_cast = *this_cast ^ other; + return *this_cast; + } +}; -/* begin file src/simdutf/westmere/simd16-inl.h */ -template -struct simd16; +// Forward-declared so they can be used by splat and friends. +template struct simd8; -template> -struct base16: base> { +template > +struct base8 : base> { typedef uint16_t bitmask_t; typedef uint32_t bitmask2_t; - simdutf_really_inline base16() : base>() {} - simdutf_really_inline base16(const __m128i _value) : base>(_value) {} - template - simdutf_really_inline base16(const Pointer* ptr) : base16(_mm_loadu_si128(reinterpret_cast(ptr))) {} + simdutf_really_inline T first() const { return _mm_extract_epi8(*this, 0); } + simdutf_really_inline T last() const { return _mm_extract_epi8(*this, 15); } + simdutf_really_inline base8() : base>() {} + simdutf_really_inline base8(const __m128i _value) : base>(_value) {} - friend simdutf_really_inline Mask operator==(const simd16 lhs, const simd16 rhs) { return _mm_cmpeq_epi16(lhs, rhs); } + friend simdutf_really_inline Mask operator==(const simd8 lhs, + const simd8 rhs) { + return _mm_cmpeq_epi8(lhs, rhs); + } - static const int SIZE = sizeof(base>::value); + static const int SIZE = sizeof(base>::value); - template - simdutf_really_inline simd16 prev(const simd16 prev_chunk) const { + template + simdutf_really_inline simd8 prev(const simd8 prev_chunk) const { return _mm_alignr_epi8(*this, prev_chunk, 16 - N); } }; // SIMD byte mask type (returned by things like eq and gt) -template<> -struct simd16: base16 { - static simdutf_really_inline simd16 splat(bool _value) { return _mm_set1_epi16(uint16_t(-(!!_value))); } +template <> struct simd8 : base8 { + static simdutf_really_inline simd8 splat(bool _value) { + return _mm_set1_epi8(uint8_t(-(!!_value))); + } - simdutf_really_inline simd16() : base16() {} - simdutf_really_inline simd16(const __m128i _value) : base16(_value) {} + simdutf_really_inline simd8() : base8() {} + simdutf_really_inline simd8(const __m128i _value) : base8(_value) {} // Splat constructor - simdutf_really_inline simd16(bool _value) : base16(splat(_value)) {} + simdutf_really_inline simd8(bool _value) : base8(splat(_value)) {} - simdutf_really_inline int to_bitmask() const { return _mm_movemask_epi8(*this); } - simdutf_really_inline bool any() const { return !_mm_testz_si128(*this, *this); } - simdutf_really_inline simd16 operator~() const { return *this ^ true; } + simdutf_really_inline int to_bitmask() const { + return _mm_movemask_epi8(*this); + } + simdutf_really_inline bool any() const { + return !_mm_testz_si128(*this, *this); + } + simdutf_really_inline bool none() const { + return _mm_testz_si128(*this, *this); + } + simdutf_really_inline bool all() const { + return _mm_movemask_epi8(*this) == 0xFFFF; + } + simdutf_really_inline simd8 operator~() const { return *this ^ true; } }; -template -struct base16_numeric: base16 { - static simdutf_really_inline simd16 splat(T _value) { return _mm_set1_epi16(_value); } - static simdutf_really_inline simd16 zero() { return _mm_setzero_si128(); } - static simdutf_really_inline simd16 load(const T values[8]) { +template struct base8_numeric : base8 { + static simdutf_really_inline simd8 splat(T _value) { + return _mm_set1_epi8(_value); + } + static simdutf_really_inline simd8 zero() { return _mm_setzero_si128(); } + static simdutf_really_inline simd8 load(const T values[16]) { return _mm_loadu_si128(reinterpret_cast(values)); } + // Repeat 16 values as many times as necessary (usually for lookup tables) + static simdutf_really_inline simd8 repeat_16(T v0, T v1, T v2, T v3, T v4, + T v5, T v6, T v7, T v8, T v9, + T v10, T v11, T v12, T v13, + T v14, T v15) { + return simd8(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, + v14, v15); + } - simdutf_really_inline base16_numeric() : base16() {} - simdutf_really_inline base16_numeric(const __m128i _value) : base16(_value) {} + simdutf_really_inline base8_numeric() : base8() {} + simdutf_really_inline base8_numeric(const __m128i _value) + : base8(_value) {} // Store to array - simdutf_really_inline void store(T dst[8]) const { return _mm_storeu_si128(reinterpret_cast<__m128i *>(dst), *this); } + simdutf_really_inline void store(T dst[16]) const { + return _mm_storeu_si128(reinterpret_cast<__m128i *>(dst), *this); + } // Override to distinguish from bool version - simdutf_really_inline simd16 operator~() const { return *this ^ 0xFFu; } + simdutf_really_inline simd8 operator~() const { return *this ^ 0xFFu; } // Addition/subtraction are the same for signed and unsigned - simdutf_really_inline simd16 operator+(const simd16 other) const { return _mm_add_epi16(*this, other); } - simdutf_really_inline simd16 operator-(const simd16 other) const { return _mm_sub_epi16(*this, other); } - simdutf_really_inline simd16& operator+=(const simd16 other) { *this = *this + other; return *static_cast*>(this); } - simdutf_really_inline simd16& operator-=(const simd16 other) { *this = *this - other; return *static_cast*>(this); } + simdutf_really_inline simd8 operator+(const simd8 other) const { + return _mm_add_epi8(*this, other); + } + simdutf_really_inline simd8 operator-(const simd8 other) const { + return _mm_sub_epi8(*this, other); + } + simdutf_really_inline simd8 &operator+=(const simd8 other) { + *this = *this + other; + return *static_cast *>(this); + } + simdutf_really_inline simd8 &operator-=(const simd8 other) { + *this = *this - other; + return *static_cast *>(this); + } + + // Perform a lookup assuming the value is between 0 and 16 (undefined behavior + // for out of range values) + template + simdutf_really_inline simd8 lookup_16(simd8 lookup_table) const { + return _mm_shuffle_epi8(lookup_table, *this); + } + + template + simdutf_really_inline simd8 + lookup_16(L replace0, L replace1, L replace2, L replace3, L replace4, + L replace5, L replace6, L replace7, L replace8, L replace9, + L replace10, L replace11, L replace12, L replace13, L replace14, + L replace15) const { + return lookup_16(simd8::repeat_16( + replace0, replace1, replace2, replace3, replace4, replace5, replace6, + replace7, replace8, replace9, replace10, replace11, replace12, + replace13, replace14, replace15)); + } }; -// Signed code units -template<> -struct simd16 : base16_numeric { - simdutf_really_inline simd16() : base16_numeric() {} - simdutf_really_inline simd16(const __m128i _value) : base16_numeric(_value) {} +// Signed bytes +template <> struct simd8 : base8_numeric { + simdutf_really_inline simd8() : base8_numeric() {} + simdutf_really_inline simd8(const __m128i _value) + : base8_numeric(_value) {} // Splat constructor - simdutf_really_inline simd16(int16_t _value) : simd16(splat(_value)) {} + simdutf_really_inline simd8(int8_t _value) : simd8(splat(_value)) {} // Array constructor - simdutf_really_inline simd16(const int16_t* values) : simd16(load(values)) {} - simdutf_really_inline simd16(const char16_t* values) : simd16(load(reinterpret_cast(values))) {} + simdutf_really_inline simd8(const int8_t *values) : simd8(load(values)) {} // Member-by-member initialization - simdutf_really_inline simd16( - int16_t v0, int16_t v1, int16_t v2, int16_t v3, int16_t v4, int16_t v5, int16_t v6, int16_t v7) - : simd16(_mm_setr_epi16(v0, v1, v2, v3, v4, v5, v6, v7)) {} - simdutf_really_inline operator simd16() const; + simdutf_really_inline simd8(int8_t v0, int8_t v1, int8_t v2, int8_t v3, + int8_t v4, int8_t v5, int8_t v6, int8_t v7, + int8_t v8, int8_t v9, int8_t v10, int8_t v11, + int8_t v12, int8_t v13, int8_t v14, int8_t v15) + : simd8(_mm_setr_epi8(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, + v12, v13, v14, v15)) {} + // Repeat 16 values as many times as necessary (usually for lookup tables) + simdutf_really_inline static simd8 + repeat_16(int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, + int8_t v6, int8_t v7, int8_t v8, int8_t v9, int8_t v10, int8_t v11, + int8_t v12, int8_t v13, int8_t v14, int8_t v15) { + return simd8(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, + v13, v14, v15); + } + simdutf_really_inline operator simd8() const; + simdutf_really_inline bool is_ascii() const { + return _mm_movemask_epi8(*this) == 0; + } // Order-sensitive comparisons - simdutf_really_inline simd16 max_val(const simd16 other) const { return _mm_max_epi16(*this, other); } - simdutf_really_inline simd16 min_val(const simd16 other) const { return _mm_min_epi16(*this, other); } - simdutf_really_inline simd16 operator>(const simd16 other) const { return _mm_cmpgt_epi16(*this, other); } - simdutf_really_inline simd16 operator<(const simd16 other) const { return _mm_cmpgt_epi16(other, *this); } + simdutf_really_inline simd8 max_val(const simd8 other) const { + return _mm_max_epi8(*this, other); + } + simdutf_really_inline simd8 min_val(const simd8 other) const { + return _mm_min_epi8(*this, other); + } + simdutf_really_inline simd8 operator>(const simd8 other) const { + return _mm_cmpgt_epi8(*this, other); + } + simdutf_really_inline simd8 operator<(const simd8 other) const { + return _mm_cmpgt_epi8(other, *this); + } }; -// Unsigned code units -template<> -struct simd16: base16_numeric { - simdutf_really_inline simd16() : base16_numeric() {} - simdutf_really_inline simd16(const __m128i _value) : base16_numeric(_value) {} +// Unsigned bytes +template <> struct simd8 : base8_numeric { + simdutf_really_inline simd8() : base8_numeric() {} + simdutf_really_inline simd8(const __m128i _value) + : base8_numeric(_value) {} // Splat constructor - simdutf_really_inline simd16(uint16_t _value) : simd16(splat(_value)) {} + simdutf_really_inline simd8(uint8_t _value) : simd8(splat(_value)) {} // Array constructor - simdutf_really_inline simd16(const uint16_t* values) : simd16(load(values)) {} - simdutf_really_inline simd16(const char16_t* values) : simd16(load(reinterpret_cast(values))) {} + simdutf_really_inline simd8(const uint8_t *values) : simd8(load(values)) {} // Member-by-member initialization - simdutf_really_inline simd16( - uint16_t v0, uint16_t v1, uint16_t v2, uint16_t v3, uint16_t v4, uint16_t v5, uint16_t v6, uint16_t v7) - : simd16(_mm_setr_epi16(v0, v1, v2, v3, v4, v5, v6, v7)) {} + simdutf_really_inline + simd8(uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, + uint8_t v6, uint8_t v7, uint8_t v8, uint8_t v9, uint8_t v10, + uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15) + : simd8(_mm_setr_epi8(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, + v12, v13, v14, v15)) {} // Repeat 16 values as many times as necessary (usually for lookup tables) - simdutf_really_inline static simd16 repeat_16( - uint16_t v0, uint16_t v1, uint16_t v2, uint16_t v3, uint16_t v4, uint16_t v5, uint16_t v6, uint16_t v7 - ) { - return simd16(v0, v1, v2, v3, v4, v5, v6, v7); + simdutf_really_inline static simd8 + repeat_16(uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, + uint8_t v5, uint8_t v6, uint8_t v7, uint8_t v8, uint8_t v9, + uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, + uint8_t v15) { + return simd8(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, + v13, v14, v15); } // Saturated math - simdutf_really_inline simd16 saturating_add(const simd16 other) const { return _mm_adds_epu16(*this, other); } - simdutf_really_inline simd16 saturating_sub(const simd16 other) const { return _mm_subs_epu16(*this, other); } + simdutf_really_inline simd8 + saturating_add(const simd8 other) const { + return _mm_adds_epu8(*this, other); + } + simdutf_really_inline simd8 + saturating_sub(const simd8 other) const { + return _mm_subs_epu8(*this, other); + } // Order-specific operations - simdutf_really_inline simd16 max_val(const simd16 other) const { return _mm_max_epu16(*this, other); } - simdutf_really_inline simd16 min_val(const simd16 other) const { return _mm_min_epu16(*this, other); } + simdutf_really_inline simd8 + max_val(const simd8 other) const { + return _mm_max_epu8(*this, other); + } + simdutf_really_inline simd8 + min_val(const simd8 other) const { + return _mm_min_epu8(*this, other); + } // Same as >, but only guarantees true is nonzero (< guarantees true = -1) - simdutf_really_inline simd16 gt_bits(const simd16 other) const { return this->saturating_sub(other); } + simdutf_really_inline simd8 + gt_bits(const simd8 other) const { + return this->saturating_sub(other); + } // Same as <, but only guarantees true is nonzero (< guarantees true = -1) - simdutf_really_inline simd16 lt_bits(const simd16 other) const { return other.saturating_sub(*this); } - simdutf_really_inline simd16 operator<=(const simd16 other) const { return other.max_val(*this) == other; } - simdutf_really_inline simd16 operator>=(const simd16 other) const { return other.min_val(*this) == other; } - simdutf_really_inline simd16 operator>(const simd16 other) const { return this->gt_bits(other).any_bits_set(); } - simdutf_really_inline simd16 operator<(const simd16 other) const { return this->gt_bits(other).any_bits_set(); } + simdutf_really_inline simd8 + lt_bits(const simd8 other) const { + return other.saturating_sub(*this); + } + simdutf_really_inline simd8 + operator<=(const simd8 other) const { + return other.max_val(*this) == other; + } + simdutf_really_inline simd8 + operator>=(const simd8 other) const { + return other.min_val(*this) == other; + } + simdutf_really_inline simd8 + operator>(const simd8 other) const { + return this->gt_bits(other).any_bits_set(); + } + simdutf_really_inline simd8 + operator<(const simd8 other) const { + return this->gt_bits(other).any_bits_set(); + } // Bit-specific operations - simdutf_really_inline simd16 bits_not_set() const { return *this == uint16_t(0); } - simdutf_really_inline simd16 bits_not_set(simd16 bits) const { return (*this & bits).bits_not_set(); } - simdutf_really_inline simd16 any_bits_set() const { return ~this->bits_not_set(); } - simdutf_really_inline simd16 any_bits_set(simd16 bits) const { return ~this->bits_not_set(bits); } - - simdutf_really_inline bool bits_not_set_anywhere() const { return _mm_testz_si128(*this, *this); } - simdutf_really_inline bool any_bits_set_anywhere() const { return !bits_not_set_anywhere(); } - simdutf_really_inline bool bits_not_set_anywhere(simd16 bits) const { return _mm_testz_si128(*this, bits); } - simdutf_really_inline bool any_bits_set_anywhere(simd16 bits) const { return !bits_not_set_anywhere(bits); } - template - simdutf_really_inline simd16 shr() const { return simd16(_mm_srli_epi16(*this, N)); } - template - simdutf_really_inline simd16 shl() const { return simd16(_mm_slli_epi16(*this, N)); } - // Get one of the bits and make a bitmask out of it. - // e.g. value.get_bit<7>() gets the high bit - template - simdutf_really_inline int get_bit() const { return _mm_movemask_epi8(_mm_slli_epi16(*this, 7-N)); } - - // Change the endianness - simdutf_really_inline simd16 swap_bytes() const { - const __m128i swap = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); - return _mm_shuffle_epi8(*this, swap); + simdutf_really_inline simd8 bits_not_set() const { + return *this == uint8_t(0); } - - // Pack with the unsigned saturation of two uint16_t code units into single uint8_t vector - static simdutf_really_inline simd8 pack(const simd16& v0, const simd16& v1) { - return _mm_packus_epi16(v0, v1); + simdutf_really_inline simd8 bits_not_set(simd8 bits) const { + return (*this & bits).bits_not_set(); + } + simdutf_really_inline simd8 any_bits_set() const { + return ~this->bits_not_set(); + } + simdutf_really_inline simd8 any_bits_set(simd8 bits) const { + return ~this->bits_not_set(bits); + } + simdutf_really_inline bool is_ascii() const { + return _mm_movemask_epi8(*this) == 0; } -}; -simdutf_really_inline simd16::operator simd16() const { return this->value; } - -template - struct simd16x32 { - static constexpr int NUM_CHUNKS = 64 / sizeof(simd16); - static_assert(NUM_CHUNKS == 4, "Westmere kernel should use four registers per 64-byte block."); - simd16 chunks[NUM_CHUNKS]; - - simd16x32(const simd16x32& o) = delete; // no copy allowed - simd16x32& operator=(const simd16 other) = delete; // no assignment allowed - simd16x32() = delete; // no default constructor allowed - - simdutf_really_inline simd16x32(const simd16 chunk0, const simd16 chunk1, const simd16 chunk2, const simd16 chunk3) : chunks{chunk0, chunk1, chunk2, chunk3} {} - simdutf_really_inline simd16x32(const T* ptr) : chunks{simd16::load(ptr), simd16::load(ptr+sizeof(simd16)/sizeof(T)), simd16::load(ptr+2*sizeof(simd16)/sizeof(T)), simd16::load(ptr+3*sizeof(simd16)/sizeof(T))} {} - - simdutf_really_inline void store(T* ptr) const { - this->chunks[0].store(ptr+sizeof(simd16)*0/sizeof(T)); - this->chunks[1].store(ptr+sizeof(simd16)*1/sizeof(T)); - this->chunks[2].store(ptr+sizeof(simd16)*2/sizeof(T)); - this->chunks[3].store(ptr+sizeof(simd16)*3/sizeof(T)); - } - - simdutf_really_inline simd16 reduce_or() const { - return (this->chunks[0] | this->chunks[1]) | (this->chunks[2] | this->chunks[3]); - } - - simdutf_really_inline bool is_ascii() const { - return this->reduce_or().is_ascii(); - } - - simdutf_really_inline void store_ascii_as_utf16(char16_t * ptr) const { - this->chunks[0].store_ascii_as_utf16(ptr+sizeof(simd16)*0); - this->chunks[1].store_ascii_as_utf16(ptr+sizeof(simd16)*1); - this->chunks[2].store_ascii_as_utf16(ptr+sizeof(simd16)*2); - this->chunks[3].store_ascii_as_utf16(ptr+sizeof(simd16)*3); - } - - simdutf_really_inline uint64_t to_bitmask() const { - uint64_t r0 = uint32_t(this->chunks[0].to_bitmask()); - uint64_t r1 = this->chunks[1].to_bitmask(); - uint64_t r2 = this->chunks[2].to_bitmask(); - uint64_t r3 = this->chunks[3].to_bitmask(); - return r0 | (r1 << 16) | (r2 << 32) | (r3 << 48); - } - - simdutf_really_inline void swap_bytes() { - this->chunks[0] = this->chunks[0].swap_bytes(); - this->chunks[1] = this->chunks[1].swap_bytes(); - this->chunks[2] = this->chunks[2].swap_bytes(); - this->chunks[3] = this->chunks[3].swap_bytes(); - } - - simdutf_really_inline uint64_t eq(const T m) const { - const simd16 mask = simd16::splat(m); - return simd16x32( - this->chunks[0] == mask, - this->chunks[1] == mask, - this->chunks[2] == mask, - this->chunks[3] == mask - ).to_bitmask(); - } - - simdutf_really_inline uint64_t eq(const simd16x32 &other) const { - return simd16x32( - this->chunks[0] == other.chunks[0], - this->chunks[1] == other.chunks[1], - this->chunks[2] == other.chunks[2], - this->chunks[3] == other.chunks[3] - ).to_bitmask(); - } - - simdutf_really_inline uint64_t lteq(const T m) const { - const simd16 mask = simd16::splat(m); - return simd16x32( - this->chunks[0] <= mask, - this->chunks[1] <= mask, - this->chunks[2] <= mask, - this->chunks[3] <= mask - ).to_bitmask(); - } - - simdutf_really_inline uint64_t in_range(const T low, const T high) const { - const simd16 mask_low = simd16::splat(low); - const simd16 mask_high = simd16::splat(high); - - return simd16x32( - (this->chunks[0] <= mask_high) & (this->chunks[0] >= mask_low), - (this->chunks[1] <= mask_high) & (this->chunks[1] >= mask_low), - (this->chunks[2] <= mask_high) & (this->chunks[2] >= mask_low), - (this->chunks[3] <= mask_high) & (this->chunks[3] >= mask_low) - ).to_bitmask(); - } - simdutf_really_inline uint64_t not_in_range(const T low, const T high) const { - const simd16 mask_low = simd16::splat(static_cast(low-1)); - const simd16 mask_high = simd16::splat(static_cast(high+1)); - return simd16x32( - (this->chunks[0] >= mask_high) | (this->chunks[0] <= mask_low), - (this->chunks[1] >= mask_high) | (this->chunks[1] <= mask_low), - (this->chunks[2] >= mask_high) | (this->chunks[2] <= mask_low), - (this->chunks[3] >= mask_high) | (this->chunks[3] <= mask_low) - ).to_bitmask(); - } - simdutf_really_inline uint64_t lt(const T m) const { - const simd16 mask = simd16::splat(m); - return simd16x32( - this->chunks[0] < mask, - this->chunks[1] < mask, - this->chunks[2] < mask, - this->chunks[3] < mask - ).to_bitmask(); - } - }; // struct simd16x32 -/* end file src/simdutf/westmere/simd16-inl.h */ -} // namespace simd -} // unnamed namespace -} // namespace westmere -} // namespace simdutf + simdutf_really_inline bool bits_not_set_anywhere() const { + return _mm_testz_si128(*this, *this); + } + simdutf_really_inline bool any_bits_set_anywhere() const { + return !bits_not_set_anywhere(); + } + simdutf_really_inline bool bits_not_set_anywhere(simd8 bits) const { + return _mm_testz_si128(*this, bits); + } + simdutf_really_inline bool any_bits_set_anywhere(simd8 bits) const { + return !bits_not_set_anywhere(bits); + } + template simdutf_really_inline simd8 shr() const { + return simd8(_mm_srli_epi16(*this, N)) & uint8_t(0xFFu >> N); + } + template simdutf_really_inline simd8 shl() const { + return simd8(_mm_slli_epi16(*this, N)) & uint8_t(0xFFu << N); + } + // Get one of the bits and make a bitmask out of it. + // e.g. value.get_bit<7>() gets the high bit + template simdutf_really_inline int get_bit() const { + return _mm_movemask_epi8(_mm_slli_epi16(*this, 7 - N)); + } +}; +simdutf_really_inline simd8::operator simd8() const { + return this->value; +} -#endif // SIMDUTF_WESTMERE_SIMD_INPUT_H -/* end file src/simdutf/westmere/simd.h */ +// Unsigned bytes +template <> struct simd8 : base { + static simdutf_really_inline simd8 splat(uint16_t _value) { + return _mm_set1_epi16(_value); + } + static simdutf_really_inline simd8 load(const uint16_t values[8]) { + return _mm_loadu_si128(reinterpret_cast(values)); + } -/* begin file src/simdutf/westmere/end.h */ -#if SIMDUTF_CAN_ALWAYS_RUN_WESTMERE -// nothing needed. -#else -SIMDUTF_UNTARGET_REGION -#endif + simdutf_really_inline simd8() : base() {} + simdutf_really_inline simd8(const __m128i _value) : base(_value) {} + // Splat constructor + simdutf_really_inline simd8(uint16_t _value) : simd8(splat(_value)) {} + // Array constructor + simdutf_really_inline simd8(const uint16_t *values) : simd8(load(values)) {} + // Member-by-member initialization + simdutf_really_inline simd8(uint16_t v0, uint16_t v1, uint16_t v2, + uint16_t v3, uint16_t v4, uint16_t v5, + uint16_t v6, uint16_t v7) + : simd8(_mm_setr_epi16(v0, v1, v2, v3, v4, v5, v6, v7)) {} -/* end file src/simdutf/westmere/end.h */ + // Saturated math + simdutf_really_inline simd8 + saturating_add(const simd8 other) const { + return _mm_adds_epu16(*this, other); + } + simdutf_really_inline simd8 + saturating_sub(const simd8 other) const { + return _mm_subs_epu16(*this, other); + } -#endif // SIMDUTF_IMPLEMENTATION_WESTMERE -#endif // SIMDUTF_WESTMERE_COMMON_H -/* end file src/simdutf/westmere.h */ -/* begin file src/simdutf/ppc64.h */ -#ifndef SIMDUTF_PPC64_H -#define SIMDUTF_PPC64_H + // Order-specific operations + simdutf_really_inline simd8 + max_val(const simd8 other) const { + return _mm_max_epu16(*this, other); + } + simdutf_really_inline simd8 + min_val(const simd8 other) const { + return _mm_min_epu16(*this, other); + } + // Same as >, but only guarantees true is nonzero (< guarantees true = -1) + simdutf_really_inline simd8 + gt_bits(const simd8 other) const { + return this->saturating_sub(other); + } + // Same as <, but only guarantees true is nonzero (< guarantees true = -1) + simdutf_really_inline simd8 + lt_bits(const simd8 other) const { + return other.saturating_sub(*this); + } + simdutf_really_inline simd8 + operator<=(const simd8 other) const { + return other.max_val(*this) == other; + } + simdutf_really_inline simd8 + operator>=(const simd8 other) const { + return other.min_val(*this) == other; + } + simdutf_really_inline simd8 + operator==(const simd8 other) const { + return _mm_cmpeq_epi16(*this, other); + } + simdutf_really_inline simd8 + operator&(const simd8 other) const { + return _mm_and_si128(*this, other); + } + simdutf_really_inline simd8 + operator|(const simd8 other) const { + return _mm_or_si128(*this, other); + } -#ifdef SIMDUTF_FALLBACK_H -#error "ppc64.h must be included before fallback.h" -#endif + // Bit-specific operations + simdutf_really_inline simd8 bits_not_set() const { + return *this == uint16_t(0); + } + simdutf_really_inline simd8 any_bits_set() const { + return ~this->bits_not_set(); + } + simdutf_really_inline bool bits_not_set_anywhere() const { + return _mm_testz_si128(*this, *this); + } + simdutf_really_inline bool any_bits_set_anywhere() const { + return !bits_not_set_anywhere(); + } + simdutf_really_inline bool bits_not_set_anywhere(simd8 bits) const { + return _mm_testz_si128(*this, bits); + } + simdutf_really_inline bool any_bits_set_anywhere(simd8 bits) const { + return !bits_not_set_anywhere(bits); + } +}; +template struct simd8x64 { + static constexpr int NUM_CHUNKS = 64 / sizeof(simd8); + static_assert(NUM_CHUNKS == 4, + "Westmere kernel should use four registers per 64-byte block."); + simd8 chunks[NUM_CHUNKS]; -#ifndef SIMDUTF_IMPLEMENTATION_PPC64 -#define SIMDUTF_IMPLEMENTATION_PPC64 (SIMDUTF_IS_PPC64) -#endif -#define SIMDUTF_CAN_ALWAYS_RUN_PPC64 SIMDUTF_IMPLEMENTATION_PPC64 && SIMDUTF_IS_PPC64 + simd8x64(const simd8x64 &o) = delete; // no copy allowed + simd8x64 & + operator=(const simd8 other) = delete; // no assignment allowed + simd8x64() = delete; // no default constructor allowed + simdutf_really_inline simd8x64(const simd8 chunk0, const simd8 chunk1, + const simd8 chunk2, const simd8 chunk3) + : chunks{chunk0, chunk1, chunk2, chunk3} {} + simdutf_really_inline simd8x64(const T *ptr) + : chunks{simd8::load(ptr), + simd8::load(ptr + sizeof(simd8) / sizeof(T)), + simd8::load(ptr + 2 * sizeof(simd8) / sizeof(T)), + simd8::load(ptr + 3 * sizeof(simd8) / sizeof(T))} {} + simdutf_really_inline void store(T *ptr) const { + this->chunks[0].store(ptr + sizeof(simd8) * 0 / sizeof(T)); + this->chunks[1].store(ptr + sizeof(simd8) * 1 / sizeof(T)); + this->chunks[2].store(ptr + sizeof(simd8) * 2 / sizeof(T)); + this->chunks[3].store(ptr + sizeof(simd8) * 3 / sizeof(T)); + } -#if SIMDUTF_IMPLEMENTATION_PPC64 + simdutf_really_inline simd8x64 &operator|=(const simd8x64 &other) { + this->chunks[0] |= other.chunks[0]; + this->chunks[1] |= other.chunks[1]; + this->chunks[2] |= other.chunks[2]; + this->chunks[3] |= other.chunks[3]; + return *this; + } -namespace simdutf { -/** - * Implementation for ALTIVEC (PPC64). - */ -namespace ppc64 { -} // namespace ppc64 -} // namespace simdutf + simdutf_really_inline simd8 reduce_or() const { + return (this->chunks[0] | this->chunks[1]) | + (this->chunks[2] | this->chunks[3]); + } -/* begin file src/simdutf/ppc64/implementation.h */ -#ifndef SIMDUTF_PPC64_IMPLEMENTATION_H -#define SIMDUTF_PPC64_IMPLEMENTATION_H + simdutf_really_inline bool is_ascii() const { + return this->reduce_or().is_ascii(); + } + template + simdutf_really_inline void store_ascii_as_utf16(char16_t *ptr) const { + this->chunks[0].template store_ascii_as_utf16(ptr + + sizeof(simd8) * 0); + this->chunks[1].template store_ascii_as_utf16(ptr + + sizeof(simd8) * 1); + this->chunks[2].template store_ascii_as_utf16(ptr + + sizeof(simd8) * 2); + this->chunks[3].template store_ascii_as_utf16(ptr + + sizeof(simd8) * 3); + } -namespace simdutf { -namespace ppc64 { + simdutf_really_inline void store_ascii_as_utf32(char32_t *ptr) const { + this->chunks[0].store_ascii_as_utf32(ptr + sizeof(simd8) * 0); + this->chunks[1].store_ascii_as_utf32(ptr + sizeof(simd8) * 1); + this->chunks[2].store_ascii_as_utf32(ptr + sizeof(simd8) * 2); + this->chunks[3].store_ascii_as_utf32(ptr + sizeof(simd8) * 3); + } -namespace { -using namespace simdutf; -} // namespace + simdutf_really_inline uint64_t to_bitmask() const { + uint64_t r0 = uint32_t(this->chunks[0].to_bitmask()); + uint64_t r1 = this->chunks[1].to_bitmask(); + uint64_t r2 = this->chunks[2].to_bitmask(); + uint64_t r3 = this->chunks[3].to_bitmask(); + return r0 | (r1 << 16) | (r2 << 32) | (r3 << 48); + } -class implementation final : public simdutf::implementation { -public: - simdutf_really_inline implementation() - : simdutf::implementation("ppc64", "PPC64 ALTIVEC", - internal::instruction_set::ALTIVEC) {} - simdutf_warn_unused int detect_encodings(const char * input, size_t length) const noexcept final; - simdutf_warn_unused bool validate_utf8(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf8_with_errors(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_ascii(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_ascii_with_errors(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_utf16le(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_utf16be(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf16le_with_errors(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf16be_with_errors(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_utf32(const char32_t *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf32_with_errors(const char32_t *buf, size_t len) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_utf16le(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_utf16be(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_utf16le_with_errors(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_utf16be_with_errors(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_utf16le(const char * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_utf16be(const char * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_utf32(const char * buf, size_t len, char32_t* utf32_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_utf32_with_errors(const char * buf, size_t len, char32_t* utf32_output) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_utf32(const char * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16le_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16be_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16le_to_utf8_with_errors(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16be_to_utf8_with_errors(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16le_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16be_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_utf8(const char32_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused result convert_utf32_to_utf8_with_errors(const char32_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_utf8(const char32_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_utf16le(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_utf16be(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused result convert_utf32_to_utf16le_with_errors(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused result convert_utf32_to_utf16be_with_errors(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_utf16le(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_utf16be(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16le_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16be_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16le_to_utf32_with_errors(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16be_to_utf32_with_errors(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16le_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16be_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - void change_endianness_utf16(const char16_t * buf, size_t length, char16_t * output) const noexcept final; - simdutf_warn_unused size_t count_utf16le(const char16_t * buf, size_t length) const noexcept; - simdutf_warn_unused size_t count_utf16be(const char16_t * buf, size_t length) const noexcept; - simdutf_warn_unused size_t count_utf8(const char * buf, size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_utf16le(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_utf16be(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_utf16le(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_utf16be(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf16_length_from_utf8(const char * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_utf32(const char32_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf16_length_from_utf32(const char32_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_utf8(const char * input, size_t length) const noexcept; - simdutf_warn_unused size_t maximal_binary_length_from_base64(const char * input, size_t length) const noexcept; - simdutf_warn_unused result base64_to_binary(const char * input, size_t length, char* output, base64_options options) const noexcept; - simdutf_warn_unused size_t maximal_binary_length_from_base64(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused result base64_to_binary(const char16_t * input, size_t length, char* output, base64_options options) const noexcept; - simdutf_warn_unused size_t base64_length_from_binary(size_t length, base64_options options) const noexcept; - size_t binary_to_base64(const char * input, size_t length, char* output, base64_options options) const noexcept; -}; + simdutf_really_inline uint64_t eq(const T m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(this->chunks[0] == mask, this->chunks[1] == mask, + this->chunks[2] == mask, this->chunks[3] == mask) + .to_bitmask(); + } -} // namespace ppc64 -} // namespace simdutf + simdutf_really_inline uint64_t eq(const simd8x64 &other) const { + return simd8x64(this->chunks[0] == other.chunks[0], + this->chunks[1] == other.chunks[1], + this->chunks[2] == other.chunks[2], + this->chunks[3] == other.chunks[3]) + .to_bitmask(); + } -#endif // SIMDUTF_PPC64_IMPLEMENTATION_H -/* end file src/simdutf/ppc64/implementation.h */ + simdutf_really_inline uint64_t lteq(const T m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(this->chunks[0] <= mask, this->chunks[1] <= mask, + this->chunks[2] <= mask, this->chunks[3] <= mask) + .to_bitmask(); + } -/* begin file src/simdutf/ppc64/begin.h */ -// redefining SIMDUTF_IMPLEMENTATION to "ppc64" -// #define SIMDUTF_IMPLEMENTATION ppc64 -/* end file src/simdutf/ppc64/begin.h */ + simdutf_really_inline uint64_t in_range(const T low, const T high) const { + const simd8 mask_low = simd8::splat(low); + const simd8 mask_high = simd8::splat(high); + + return simd8x64( + (this->chunks[0] <= mask_high) & (this->chunks[0] >= mask_low), + (this->chunks[1] <= mask_high) & (this->chunks[1] >= mask_low), + (this->chunks[2] <= mask_high) & (this->chunks[2] >= mask_low), + (this->chunks[3] <= mask_high) & (this->chunks[3] >= mask_low)) + .to_bitmask(); + } + simdutf_really_inline uint64_t not_in_range(const T low, const T high) const { + const simd8 mask_low = simd8::splat(low - 1); + const simd8 mask_high = simd8::splat(high + 1); + return simd8x64( + (this->chunks[0] >= mask_high) | (this->chunks[0] <= mask_low), + (this->chunks[1] >= mask_high) | (this->chunks[1] <= mask_low), + (this->chunks[2] >= mask_high) | (this->chunks[2] <= mask_low), + (this->chunks[3] >= mask_high) | (this->chunks[3] <= mask_low)) + .to_bitmask(); + } + simdutf_really_inline uint64_t lt(const T m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(this->chunks[0] < mask, this->chunks[1] < mask, + this->chunks[2] < mask, this->chunks[3] < mask) + .to_bitmask(); + } -// Declarations -/* begin file src/simdutf/ppc64/intrinsics.h */ -#ifndef SIMDUTF_PPC64_INTRINSICS_H -#define SIMDUTF_PPC64_INTRINSICS_H + simdutf_really_inline uint64_t gt(const T m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(this->chunks[0] > mask, this->chunks[1] > mask, + this->chunks[2] > mask, this->chunks[3] > mask) + .to_bitmask(); + } + simdutf_really_inline uint64_t gteq(const T m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(this->chunks[0] >= mask, this->chunks[1] >= mask, + this->chunks[2] >= mask, this->chunks[3] >= mask) + .to_bitmask(); + } + simdutf_really_inline uint64_t gteq_unsigned(const uint8_t m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(simd8(__m128i(this->chunks[0])) >= mask, + simd8(__m128i(this->chunks[1])) >= mask, + simd8(__m128i(this->chunks[2])) >= mask, + simd8(__m128i(this->chunks[3])) >= mask) + .to_bitmask(); + } +}; // struct simd8x64 +/* begin file src/simdutf/westmere/simd16-inl.h */ +template struct simd16; -// This should be the correct header whether -// you use visual studio or other compilers. -#include +template > +struct base16 : base> { + typedef uint16_t bitmask_t; + typedef uint32_t bitmask2_t; -// These are defined by altivec.h in GCC toolchain, it is safe to undef them. -#ifdef bool -#undef bool -#endif + simdutf_really_inline base16() : base>() {} + simdutf_really_inline base16(const __m128i _value) + : base>(_value) {} + template + simdutf_really_inline base16(const Pointer *ptr) + : base16(_mm_loadu_si128(reinterpret_cast(ptr))) {} -#ifdef vector -#undef vector -#endif + friend simdutf_really_inline Mask operator==(const simd16 lhs, + const simd16 rhs) { + return _mm_cmpeq_epi16(lhs, rhs); + } -#endif // SIMDUTF_PPC64_INTRINSICS_H -/* end file src/simdutf/ppc64/intrinsics.h */ -/* begin file src/simdutf/ppc64/bitmanipulation.h */ -#ifndef SIMDUTF_PPC64_BITMANIPULATION_H -#define SIMDUTF_PPC64_BITMANIPULATION_H + static const int SIZE = sizeof(base>::value); -namespace simdutf { -namespace ppc64 { -namespace { + template + simdutf_really_inline simd16 prev(const simd16 prev_chunk) const { + return _mm_alignr_epi8(*this, prev_chunk, 16 - N); + } +}; -#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO -simdutf_really_inline int count_ones(uint64_t input_num) { - // note: we do not support legacy 32-bit Windows - return __popcnt64(input_num); // Visual Studio wants two underscores -} -#else -simdutf_really_inline int count_ones(uint64_t input_num) { - return __builtin_popcountll(input_num); -} -#endif +// SIMD byte mask type (returned by things like eq and gt) +template <> struct simd16 : base16 { + static simdutf_really_inline simd16 splat(bool _value) { + return _mm_set1_epi16(uint16_t(-(!!_value))); + } -} // unnamed namespace -} // namespace ppc64 -} // namespace simdutf + simdutf_really_inline simd16() : base16() {} + simdutf_really_inline simd16(const __m128i _value) : base16(_value) {} + // Splat constructor + simdutf_really_inline simd16(bool _value) : base16(splat(_value)) {} -#endif // SIMDUTF_PPC64_BITMANIPULATION_H -/* end file src/simdutf/ppc64/bitmanipulation.h */ -/* begin file src/simdutf/ppc64/simd.h */ -#ifndef SIMDUTF_PPC64_SIMD_H -#define SIMDUTF_PPC64_SIMD_H + simdutf_really_inline int to_bitmask() const { + return _mm_movemask_epi8(*this); + } + simdutf_really_inline bool any() const { + return !_mm_testz_si128(*this, *this); + } + simdutf_really_inline simd16 operator~() const { return *this ^ true; } +}; -#include +template struct base16_numeric : base16 { + static simdutf_really_inline simd16 splat(T _value) { + return _mm_set1_epi16(_value); + } + static simdutf_really_inline simd16 zero() { return _mm_setzero_si128(); } + static simdutf_really_inline simd16 load(const T values[8]) { + return _mm_loadu_si128(reinterpret_cast(values)); + } -namespace simdutf { -namespace ppc64 { -namespace { -namespace simd { - -using __m128i = __vector unsigned char; - -template struct base { - __m128i value; - - // Zero constructor - simdutf_really_inline base() : value{__m128i()} {} - - // Conversion from SIMD register - simdutf_really_inline base(const __m128i _value) : value(_value) {} - - // Conversion to SIMD register - simdutf_really_inline operator const __m128i &() const { - return this->value; - } - simdutf_really_inline operator __m128i &() { return this->value; } - - // Bit operations - simdutf_really_inline Child operator|(const Child other) const { - return vec_or(this->value, (__m128i)other); - } - simdutf_really_inline Child operator&(const Child other) const { - return vec_and(this->value, (__m128i)other); - } - simdutf_really_inline Child operator^(const Child other) const { - return vec_xor(this->value, (__m128i)other); - } - simdutf_really_inline Child bit_andnot(const Child other) const { - return vec_andc(this->value, (__m128i)other); - } - simdutf_really_inline Child &operator|=(const Child other) { - auto this_cast = static_cast(this); - *this_cast = *this_cast | other; - return *this_cast; - } - simdutf_really_inline Child &operator&=(const Child other) { - auto this_cast = static_cast(this); - *this_cast = *this_cast & other; - return *this_cast; - } - simdutf_really_inline Child &operator^=(const Child other) { - auto this_cast = static_cast(this); - *this_cast = *this_cast ^ other; - return *this_cast; - } -}; - -// Forward-declared so they can be used by splat and friends. -template struct simd8; - -template > -struct base8 : base> { - typedef uint16_t bitmask_t; - typedef uint32_t bitmask2_t; - - simdutf_really_inline base8() : base>() {} - simdutf_really_inline base8(const __m128i _value) : base>(_value) {} - - friend simdutf_really_inline Mask operator==(const simd8 lhs, const simd8 rhs) { - return (__m128i)vec_cmpeq(lhs.value, (__m128i)rhs); - } - - static const int SIZE = sizeof(base>::value); - - template - simdutf_really_inline simd8 prev(simd8 prev_chunk) const { - __m128i chunk = this->value; -#ifdef __LITTLE_ENDIAN__ - chunk = (__m128i)vec_reve(this->value); - prev_chunk = (__m128i)vec_reve((__m128i)prev_chunk); -#endif - chunk = (__m128i)vec_sld((__m128i)prev_chunk, (__m128i)chunk, 16 - N); -#ifdef __LITTLE_ENDIAN__ - chunk = (__m128i)vec_reve((__m128i)chunk); -#endif - return chunk; - } -}; - -// SIMD byte mask type (returned by things like eq and gt) -template <> struct simd8 : base8 { - static simdutf_really_inline simd8 splat(bool _value) { - return (__m128i)vec_splats((unsigned char)(-(!!_value))); - } - - simdutf_really_inline simd8() : base8() {} - simdutf_really_inline simd8(const __m128i _value) - : base8(_value) {} - // Splat constructor - simdutf_really_inline simd8(bool _value) - : base8(splat(_value)) {} - - simdutf_really_inline int to_bitmask() const { - __vector unsigned long long result; - const __m128i perm_mask = {0x78, 0x70, 0x68, 0x60, 0x58, 0x50, 0x48, 0x40, - 0x38, 0x30, 0x28, 0x20, 0x18, 0x10, 0x08, 0x00}; - - result = ((__vector unsigned long long)vec_vbpermq((__m128i)this->value, - (__m128i)perm_mask)); -#ifdef __LITTLE_ENDIAN__ - return static_cast(result[1]); -#else - return static_cast(result[0]); -#endif - } - simdutf_really_inline bool any() const { - return !vec_all_eq(this->value, (__m128i)vec_splats(0)); - } - simdutf_really_inline simd8 operator~() const { - return this->value ^ (__m128i)splat(true); - } -}; - -template struct base8_numeric : base8 { - static simdutf_really_inline simd8 splat(T value) { - (void)value; - return (__m128i)vec_splats(value); - } - static simdutf_really_inline simd8 zero() { return splat(0); } - static simdutf_really_inline simd8 load(const T values[16]) { - return (__m128i)(vec_vsx_ld(0, reinterpret_cast(values))); - } - // Repeat 16 values as many times as necessary (usually for lookup tables) - static simdutf_really_inline simd8 repeat_16(T v0, T v1, T v2, T v3, T v4, - T v5, T v6, T v7, T v8, T v9, - T v10, T v11, T v12, T v13, - T v14, T v15) { - return simd8(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, - v14, v15); - } - - simdutf_really_inline base8_numeric() : base8() {} - simdutf_really_inline base8_numeric(const __m128i _value) - : base8(_value) {} + simdutf_really_inline base16_numeric() : base16() {} + simdutf_really_inline base16_numeric(const __m128i _value) + : base16(_value) {} // Store to array - simdutf_really_inline void store(T dst[16]) const { - vec_vsx_st(this->value, 0, reinterpret_cast<__m128i *>(dst)); + simdutf_really_inline void store(T dst[8]) const { + return _mm_storeu_si128(reinterpret_cast<__m128i *>(dst), *this); } // Override to distinguish from bool version - simdutf_really_inline simd8 operator~() const { return *this ^ 0xFFu; } + simdutf_really_inline simd16 operator~() const { return *this ^ 0xFFu; } // Addition/subtraction are the same for signed and unsigned - simdutf_really_inline simd8 operator+(const simd8 other) const { - return (__m128i)((__m128i)this->value + (__m128i)other); + simdutf_really_inline simd16 operator+(const simd16 other) const { + return _mm_add_epi16(*this, other); } - simdutf_really_inline simd8 operator-(const simd8 other) const { - return (__m128i)((__m128i)this->value - (__m128i)other); + simdutf_really_inline simd16 operator-(const simd16 other) const { + return _mm_sub_epi16(*this, other); } - simdutf_really_inline simd8 &operator+=(const simd8 other) { + simdutf_really_inline simd16 &operator+=(const simd16 other) { *this = *this + other; - return *static_cast *>(this); + return *static_cast *>(this); } - simdutf_really_inline simd8 &operator-=(const simd8 other) { + simdutf_really_inline simd16 &operator-=(const simd16 other) { *this = *this - other; - return *static_cast *>(this); - } - - // Perform a lookup assuming the value is between 0 and 16 (undefined behavior - // for out of range values) - template - simdutf_really_inline simd8 lookup_16(simd8 lookup_table) const { - return (__m128i)vec_perm((__m128i)lookup_table, (__m128i)lookup_table, this->value); - } - - template - simdutf_really_inline simd8 - lookup_16(L replace0, L replace1, L replace2, L replace3, L replace4, - L replace5, L replace6, L replace7, L replace8, L replace9, - L replace10, L replace11, L replace12, L replace13, L replace14, - L replace15) const { - return lookup_16(simd8::repeat_16( - replace0, replace1, replace2, replace3, replace4, replace5, replace6, - replace7, replace8, replace9, replace10, replace11, replace12, - replace13, replace14, replace15)); + return *static_cast *>(this); } }; -// Signed bytes -template <> struct simd8 : base8_numeric { - simdutf_really_inline simd8() : base8_numeric() {} - simdutf_really_inline simd8(const __m128i _value) - : base8_numeric(_value) {} - +// Signed code units +template <> struct simd16 : base16_numeric { + simdutf_really_inline simd16() : base16_numeric() {} + simdutf_really_inline simd16(const __m128i _value) + : base16_numeric(_value) {} // Splat constructor - simdutf_really_inline simd8(int8_t _value) : simd8(splat(_value)) {} + simdutf_really_inline simd16(int16_t _value) : simd16(splat(_value)) {} // Array constructor - simdutf_really_inline simd8(const int8_t *values) : simd8(load(values)) {} + simdutf_really_inline simd16(const int16_t *values) : simd16(load(values)) {} + simdutf_really_inline simd16(const char16_t *values) + : simd16(load(reinterpret_cast(values))) {} // Member-by-member initialization - simdutf_really_inline simd8(int8_t v0, int8_t v1, int8_t v2, int8_t v3, - int8_t v4, int8_t v5, int8_t v6, int8_t v7, - int8_t v8, int8_t v9, int8_t v10, int8_t v11, - int8_t v12, int8_t v13, int8_t v14, int8_t v15) - : simd8((__m128i)(__vector signed char){v0, v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10, v11, v12, v13, v14, - v15}) {} - // Repeat 16 values as many times as necessary (usually for lookup tables) - simdutf_really_inline static simd8 - repeat_16(int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, - int8_t v6, int8_t v7, int8_t v8, int8_t v9, int8_t v10, int8_t v11, - int8_t v12, int8_t v13, int8_t v14, int8_t v15) { - return simd8(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, - v13, v14, v15); - } + simdutf_really_inline simd16(int16_t v0, int16_t v1, int16_t v2, int16_t v3, + int16_t v4, int16_t v5, int16_t v6, int16_t v7) + : simd16(_mm_setr_epi16(v0, v1, v2, v3, v4, v5, v6, v7)) {} + simdutf_really_inline operator simd16() const; // Order-sensitive comparisons - simdutf_really_inline simd8 - max_val(const simd8 other) const { - return (__m128i)vec_max((__vector signed char)this->value, - (__vector signed char)(__m128i)other); + simdutf_really_inline simd16 + max_val(const simd16 other) const { + return _mm_max_epi16(*this, other); } - simdutf_really_inline simd8 - min_val(const simd8 other) const { - return (__m128i)vec_min((__vector signed char)this->value, - (__vector signed char)(__m128i)other); + simdutf_really_inline simd16 + min_val(const simd16 other) const { + return _mm_min_epi16(*this, other); } - simdutf_really_inline simd8 - operator>(const simd8 other) const { - return (__m128i)vec_cmpgt((__vector signed char)this->value, - (__vector signed char)(__m128i)other); + simdutf_really_inline simd16 + operator>(const simd16 other) const { + return _mm_cmpgt_epi16(*this, other); } - simdutf_really_inline simd8 - operator<(const simd8 other) const { - return (__m128i)vec_cmplt((__vector signed char)this->value, - (__vector signed char)(__m128i)other); + simdutf_really_inline simd16 + operator<(const simd16 other) const { + return _mm_cmpgt_epi16(other, *this); } }; -// Unsigned bytes -template <> struct simd8 : base8_numeric { - simdutf_really_inline simd8() : base8_numeric() {} - simdutf_really_inline simd8(const __m128i _value) - : base8_numeric(_value) {} +// Unsigned code units +template <> struct simd16 : base16_numeric { + simdutf_really_inline simd16() : base16_numeric() {} + simdutf_really_inline simd16(const __m128i _value) + : base16_numeric(_value) {} + // Splat constructor - simdutf_really_inline simd8(uint8_t _value) : simd8(splat(_value)) {} + simdutf_really_inline simd16(uint16_t _value) : simd16(splat(_value)) {} // Array constructor - simdutf_really_inline simd8(const uint8_t *values) : simd8(load(values)) {} + simdutf_really_inline simd16(const uint16_t *values) : simd16(load(values)) {} + simdutf_really_inline simd16(const char16_t *values) + : simd16(load(reinterpret_cast(values))) {} // Member-by-member initialization - simdutf_really_inline - simd8(uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, - uint8_t v6, uint8_t v7, uint8_t v8, uint8_t v9, uint8_t v10, - uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15) - : simd8((__m128i){v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, - v13, v14, v15}) {} + simdutf_really_inline simd16(uint16_t v0, uint16_t v1, uint16_t v2, + uint16_t v3, uint16_t v4, uint16_t v5, + uint16_t v6, uint16_t v7) + : simd16(_mm_setr_epi16(v0, v1, v2, v3, v4, v5, v6, v7)) {} // Repeat 16 values as many times as necessary (usually for lookup tables) - simdutf_really_inline static simd8 - repeat_16(uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, - uint8_t v5, uint8_t v6, uint8_t v7, uint8_t v8, uint8_t v9, - uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, - uint8_t v15) { - return simd8(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, - v13, v14, v15); + simdutf_really_inline static simd16 + repeat_16(uint16_t v0, uint16_t v1, uint16_t v2, uint16_t v3, uint16_t v4, + uint16_t v5, uint16_t v6, uint16_t v7) { + return simd16(v0, v1, v2, v3, v4, v5, v6, v7); } // Saturated math - simdutf_really_inline simd8 - saturating_add(const simd8 other) const { - return (__m128i)vec_adds(this->value, (__m128i)other); + simdutf_really_inline simd16 + saturating_add(const simd16 other) const { + return _mm_adds_epu16(*this, other); } - simdutf_really_inline simd8 - saturating_sub(const simd8 other) const { - return (__m128i)vec_subs(this->value, (__m128i)other); + simdutf_really_inline simd16 + saturating_sub(const simd16 other) const { + return _mm_subs_epu16(*this, other); } // Order-specific operations - simdutf_really_inline simd8 - max_val(const simd8 other) const { - return (__m128i)vec_max(this->value, (__m128i)other); + simdutf_really_inline simd16 + max_val(const simd16 other) const { + return _mm_max_epu16(*this, other); } - simdutf_really_inline simd8 - min_val(const simd8 other) const { - return (__m128i)vec_min(this->value, (__m128i)other); + simdutf_really_inline simd16 + min_val(const simd16 other) const { + return _mm_min_epu16(*this, other); } // Same as >, but only guarantees true is nonzero (< guarantees true = -1) - simdutf_really_inline simd8 - gt_bits(const simd8 other) const { + simdutf_really_inline simd16 + gt_bits(const simd16 other) const { return this->saturating_sub(other); } // Same as <, but only guarantees true is nonzero (< guarantees true = -1) - simdutf_really_inline simd8 - lt_bits(const simd8 other) const { + simdutf_really_inline simd16 + lt_bits(const simd16 other) const { return other.saturating_sub(*this); } - simdutf_really_inline simd8 - operator<=(const simd8 other) const { + simdutf_really_inline simd16 + operator<=(const simd16 other) const { return other.max_val(*this) == other; } - simdutf_really_inline simd8 - operator>=(const simd8 other) const { + simdutf_really_inline simd16 + operator>=(const simd16 other) const { return other.min_val(*this) == other; } - simdutf_really_inline simd8 - operator>(const simd8 other) const { + simdutf_really_inline simd16 + operator>(const simd16 other) const { return this->gt_bits(other).any_bits_set(); } - simdutf_really_inline simd8 - operator<(const simd8 other) const { + simdutf_really_inline simd16 + operator<(const simd16 other) const { return this->gt_bits(other).any_bits_set(); } // Bit-specific operations - simdutf_really_inline simd8 bits_not_set() const { - return (__m128i)vec_cmpeq(this->value, (__m128i)vec_splats(uint8_t(0))); + simdutf_really_inline simd16 bits_not_set() const { + return *this == uint16_t(0); } - simdutf_really_inline simd8 bits_not_set(simd8 bits) const { + simdutf_really_inline simd16 bits_not_set(simd16 bits) const { return (*this & bits).bits_not_set(); } - simdutf_really_inline simd8 any_bits_set() const { + simdutf_really_inline simd16 any_bits_set() const { return ~this->bits_not_set(); } - simdutf_really_inline simd8 any_bits_set(simd8 bits) const { + simdutf_really_inline simd16 any_bits_set(simd16 bits) const { return ~this->bits_not_set(bits); } - simdutf_really_inline bool is_ascii() const { - return this->saturating_sub(0b01111111u).bits_not_set_anywhere(); - } - simdutf_really_inline bool bits_not_set_anywhere() const { - return vec_all_eq(this->value, (__m128i)vec_splats(0)); + return _mm_testz_si128(*this, *this); } simdutf_really_inline bool any_bits_set_anywhere() const { return !bits_not_set_anywhere(); } - simdutf_really_inline bool bits_not_set_anywhere(simd8 bits) const { - return vec_all_eq(vec_and(this->value, (__m128i)bits), - (__m128i)vec_splats(0)); + simdutf_really_inline bool + bits_not_set_anywhere(simd16 bits) const { + return _mm_testz_si128(*this, bits); } - simdutf_really_inline bool any_bits_set_anywhere(simd8 bits) const { + simdutf_really_inline bool + any_bits_set_anywhere(simd16 bits) const { return !bits_not_set_anywhere(bits); } - template simdutf_really_inline simd8 shr() const { - return simd8( - (__m128i)vec_sr(this->value, (__m128i)vec_splat_u8(N))); + template simdutf_really_inline simd16 shr() const { + return simd16(_mm_srli_epi16(*this, N)); } - template simdutf_really_inline simd8 shl() const { - return simd8( - (__m128i)vec_sl(this->value, (__m128i)vec_splat_u8(N))); + template simdutf_really_inline simd16 shl() const { + return simd16(_mm_slli_epi16(*this, N)); + } + // Get one of the bits and make a bitmask out of it. + // e.g. value.get_bit<7>() gets the high bit + template simdutf_really_inline int get_bit() const { + return _mm_movemask_epi8(_mm_slli_epi16(*this, 7 - N)); + } + + // Change the endianness + simdutf_really_inline simd16 swap_bytes() const { + const __m128i swap = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + return _mm_shuffle_epi8(*this, swap); + } + + // Pack with the unsigned saturation of two uint16_t code units into single + // uint8_t vector + static simdutf_really_inline simd8 pack(const simd16 &v0, + const simd16 &v1) { + return _mm_packus_epi16(v0, v1); } }; +simdutf_really_inline simd16::operator simd16() const { + return this->value; +} -template struct simd8x64 { - static constexpr int NUM_CHUNKS = 64 / sizeof(simd8); +template struct simd16x32 { + static constexpr int NUM_CHUNKS = 64 / sizeof(simd16); static_assert(NUM_CHUNKS == 4, - "PPC64 kernel should use four registers per 64-byte block."); - simd8 chunks[NUM_CHUNKS]; + "Westmere kernel should use four registers per 64-byte block."); + simd16 chunks[NUM_CHUNKS]; - simd8x64(const simd8x64 &o) = delete; // no copy allowed - simd8x64 & - operator=(const simd8 other) = delete; // no assignment allowed - simd8x64() = delete; // no default constructor allowed + simd16x32(const simd16x32 &o) = delete; // no copy allowed + simd16x32 & + operator=(const simd16 other) = delete; // no assignment allowed + simd16x32() = delete; // no default constructor allowed - simdutf_really_inline simd8x64(const simd8 chunk0, const simd8 chunk1, - const simd8 chunk2, const simd8 chunk3) + simdutf_really_inline + simd16x32(const simd16 chunk0, const simd16 chunk1, + const simd16 chunk2, const simd16 chunk3) : chunks{chunk0, chunk1, chunk2, chunk3} {} + simdutf_really_inline simd16x32(const T *ptr) + : chunks{simd16::load(ptr), + simd16::load(ptr + sizeof(simd16) / sizeof(T)), + simd16::load(ptr + 2 * sizeof(simd16) / sizeof(T)), + simd16::load(ptr + 3 * sizeof(simd16) / sizeof(T))} {} - simdutf_really_inline simd8x64(const T* ptr) : chunks{simd8::load(ptr), simd8::load(ptr+sizeof(simd8)/sizeof(T)), simd8::load(ptr+2*sizeof(simd8)/sizeof(T)), simd8::load(ptr+3*sizeof(simd8)/sizeof(T))} {} - - simdutf_really_inline void store(T* ptr) const { - this->chunks[0].store(ptr + sizeof(simd8) * 0/sizeof(T)); - this->chunks[1].store(ptr + sizeof(simd8) * 1/sizeof(T)); - this->chunks[2].store(ptr + sizeof(simd8) * 2/sizeof(T)); - this->chunks[3].store(ptr + sizeof(simd8) * 3/sizeof(T)); + simdutf_really_inline void store(T *ptr) const { + this->chunks[0].store(ptr + sizeof(simd16) * 0 / sizeof(T)); + this->chunks[1].store(ptr + sizeof(simd16) * 1 / sizeof(T)); + this->chunks[2].store(ptr + sizeof(simd16) * 2 / sizeof(T)); + this->chunks[3].store(ptr + sizeof(simd16) * 3 / sizeof(T)); } - - simdutf_really_inline simd8x64& operator |=(const simd8x64 &other) { - this->chunks[0] |= other.chunks[0]; - this->chunks[1] |= other.chunks[1]; - this->chunks[2] |= other.chunks[2]; - this->chunks[3] |= other.chunks[3]; - return *this; - } - - simdutf_really_inline simd8 reduce_or() const { + simdutf_really_inline simd16 reduce_or() const { return (this->chunks[0] | this->chunks[1]) | (this->chunks[2] | this->chunks[3]); } - simdutf_really_inline bool is_ascii() const { - return input.reduce_or().is_ascii(); + return this->reduce_or().is_ascii(); + } + + simdutf_really_inline void store_ascii_as_utf16(char16_t *ptr) const { + this->chunks[0].store_ascii_as_utf16(ptr + sizeof(simd16) * 0); + this->chunks[1].store_ascii_as_utf16(ptr + sizeof(simd16) * 1); + this->chunks[2].store_ascii_as_utf16(ptr + sizeof(simd16) * 2); + this->chunks[3].store_ascii_as_utf16(ptr + sizeof(simd16) * 3); } simdutf_really_inline uint64_t to_bitmask() const { @@ -4627,138 +5141,117 @@ template struct simd8x64 { return r0 | (r1 << 16) | (r2 << 32) | (r3 << 48); } + simdutf_really_inline void swap_bytes() { + this->chunks[0] = this->chunks[0].swap_bytes(); + this->chunks[1] = this->chunks[1].swap_bytes(); + this->chunks[2] = this->chunks[2].swap_bytes(); + this->chunks[3] = this->chunks[3].swap_bytes(); + } + simdutf_really_inline uint64_t eq(const T m) const { - const simd8 mask = simd8::splat(m); - return simd8x64(this->chunks[0] == mask, this->chunks[1] == mask, - this->chunks[2] == mask, this->chunks[3] == mask) + const simd16 mask = simd16::splat(m); + return simd16x32(this->chunks[0] == mask, this->chunks[1] == mask, + this->chunks[2] == mask, this->chunks[3] == mask) .to_bitmask(); } - simdutf_really_inline uint64_t eq(const simd8x64 &other) const { - return simd8x64(this->chunks[0] == other.chunks[0], - this->chunks[1] == other.chunks[1], - this->chunks[2] == other.chunks[2], - this->chunks[3] == other.chunks[3]) + simdutf_really_inline uint64_t eq(const simd16x32 &other) const { + return simd16x32(this->chunks[0] == other.chunks[0], + this->chunks[1] == other.chunks[1], + this->chunks[2] == other.chunks[2], + this->chunks[3] == other.chunks[3]) .to_bitmask(); } simdutf_really_inline uint64_t lteq(const T m) const { - const simd8 mask = simd8::splat(m); - return simd8x64(this->chunks[0] <= mask, this->chunks[1] <= mask, - this->chunks[2] <= mask, this->chunks[3] <= mask) + const simd16 mask = simd16::splat(m); + return simd16x32(this->chunks[0] <= mask, this->chunks[1] <= mask, + this->chunks[2] <= mask, this->chunks[3] <= mask) .to_bitmask(); } simdutf_really_inline uint64_t in_range(const T low, const T high) const { - const simd8 mask_low = simd8::splat(low); - const simd8 mask_high = simd8::splat(high); - - return simd8x64( - (this->chunks[0] <= mask_high) & (this->chunks[0] >= mask_low), - (this->chunks[1] <= mask_high) & (this->chunks[1] >= mask_low), - (this->chunks[2] <= mask_high) & (this->chunks[2] >= mask_low), - (this->chunks[3] <= mask_high) & (this->chunks[3] >= mask_low) - ).to_bitmask(); + const simd16 mask_low = simd16::splat(low); + const simd16 mask_high = simd16::splat(high); + + return simd16x32( + (this->chunks[0] <= mask_high) & (this->chunks[0] >= mask_low), + (this->chunks[1] <= mask_high) & (this->chunks[1] >= mask_low), + (this->chunks[2] <= mask_high) & (this->chunks[2] >= mask_low), + (this->chunks[3] <= mask_high) & (this->chunks[3] >= mask_low)) + .to_bitmask(); } simdutf_really_inline uint64_t not_in_range(const T low, const T high) const { - const simd8 mask_low = simd8::splat(low); - const simd8 mask_high = simd8::splat(high); - return simd8x64( - (this->chunks[0] > mask_high) | (this->chunks[0] < mask_low), - (this->chunks[1] > mask_high) | (this->chunks[1] < mask_low), - (this->chunks[2] > mask_high) | (this->chunks[2] < mask_low), - (this->chunks[3] > mask_high) | (this->chunks[3] < mask_low) - ).to_bitmask(); + const simd16 mask_low = simd16::splat(static_cast(low - 1)); + const simd16 mask_high = simd16::splat(static_cast(high + 1)); + return simd16x32( + (this->chunks[0] >= mask_high) | (this->chunks[0] <= mask_low), + (this->chunks[1] >= mask_high) | (this->chunks[1] <= mask_low), + (this->chunks[2] >= mask_high) | (this->chunks[2] <= mask_low), + (this->chunks[3] >= mask_high) | (this->chunks[3] <= mask_low)) + .to_bitmask(); } simdutf_really_inline uint64_t lt(const T m) const { - const simd8 mask = simd8::splat(m); - return simd8x64(this->chunks[0] < mask, this->chunks[1] < mask, - this->chunks[2] < mask, this->chunks[3] < mask) + const simd16 mask = simd16::splat(m); + return simd16x32(this->chunks[0] < mask, this->chunks[1] < mask, + this->chunks[2] < mask, this->chunks[3] < mask) .to_bitmask(); } - - simdutf_really_inline uint64_t gt(const T m) const { - const simd8 mask = simd8::splat(m); - return simd8x64( - this->chunks[0] > mask, - this->chunks[1] > mask, - this->chunks[2] > mask, - this->chunks[3] > mask - ).to_bitmask(); - } - simdutf_really_inline uint64_t gteq(const T m) const { - const simd8 mask = simd8::splat(m); - return simd8x64( - this->chunks[0] >= mask, - this->chunks[1] >= mask, - this->chunks[2] >= mask, - this->chunks[3] >= mask - ).to_bitmask(); - } - simdutf_really_inline uint64_t gteq_unsigned(const uint8_t m) const { - const simd8 mask = simd8::splat(m); - return simd8x64( - simd8(this->chunks[0]) >= mask, - simd8(this->chunks[1]) >= mask, - simd8(this->chunks[2]) >= mask, - simd8(this->chunks[3]) >= mask - ).to_bitmask(); - } -}; // struct simd8x64 +}; // struct simd16x32 +/* end file src/simdutf/westmere/simd16-inl.h */ } // namespace simd } // unnamed namespace -} // namespace ppc64 +} // namespace westmere } // namespace simdutf -#endif // SIMDUTF_PPC64_SIMD_INPUT_H -/* end file src/simdutf/ppc64/simd.h */ +#endif // SIMDUTF_WESTMERE_SIMD_INPUT_H +/* end file src/simdutf/westmere/simd.h */ -/* begin file src/simdutf/ppc64/end.h */ -/* end file src/simdutf/ppc64/end.h */ +/* begin file src/simdutf/westmere/end.h */ +#if SIMDUTF_CAN_ALWAYS_RUN_WESTMERE +// nothing needed. +#else +SIMDUTF_UNTARGET_REGION +#endif -#endif // SIMDUTF_IMPLEMENTATION_PPC64 +/* end file src/simdutf/westmere/end.h */ -#endif // SIMDUTF_PPC64_H -/* end file src/simdutf/ppc64.h */ -/* begin file src/simdutf/rvv.h */ -#ifndef SIMDUTF_RVV_H -#define SIMDUTF_RVV_H +#endif // SIMDUTF_IMPLEMENTATION_WESTMERE +#endif // SIMDUTF_WESTMERE_COMMON_H +/* end file src/simdutf/westmere.h */ +/* begin file src/simdutf/ppc64.h */ +#ifndef SIMDUTF_PPC64_H +#define SIMDUTF_PPC64_H #ifdef SIMDUTF_FALLBACK_H -#error "rvv.h must be included before fallback.h" + #error "ppc64.h must be included before fallback.h" #endif -#define SIMDUTF_CAN_ALWAYS_RUN_RVV SIMDUTF_IS_RVV - -#ifndef SIMDUTF_IMPLEMENTATION_RVV -#define SIMDUTF_IMPLEMENTATION_RVV (SIMDUTF_CAN_ALWAYS_RUN_RVV || (SIMDUTF_IS_RISCV64 && SIMDUTF_HAS_RVV_INTRINSICS && SIMDUTF_HAS_RVV_TARGET_REGION)) +#ifndef SIMDUTF_IMPLEMENTATION_PPC64 + #define SIMDUTF_IMPLEMENTATION_PPC64 (SIMDUTF_IS_PPC64) #endif +#define SIMDUTF_CAN_ALWAYS_RUN_PPC64 \ + SIMDUTF_IMPLEMENTATION_PPC64 &&SIMDUTF_IS_PPC64 -#if SIMDUTF_IMPLEMENTATION_RVV -#if SIMDUTF_CAN_ALWAYS_RUN_RVV -#define SIMDUTF_TARGET_RVV -#else -#define SIMDUTF_TARGET_RVV SIMDUTF_TARGET_REGION("arch=+v") -#endif -#if !SIMDUTF_IS_ZVBB && SIMDUTF_HAS_ZVBB_INTRINSICS -#define SIMDUTF_TARGET_ZVBB SIMDUTF_TARGET_REGION("arch=+v,+zvbb") -#endif +#if SIMDUTF_IMPLEMENTATION_PPC64 namespace simdutf { -namespace rvv { -} // namespace rvv +/** + * Implementation for ALTIVEC (PPC64). + */ +namespace ppc64 {} // namespace ppc64 } // namespace simdutf -/* begin file src/simdutf/rvv/implementation.h */ -#ifndef SIMDUTF_RVV_IMPLEMENTATION_H -#define SIMDUTF_RVV_IMPLEMENTATION_H +/* begin file src/simdutf/ppc64/implementation.h */ +#ifndef SIMDUTF_PPC64_IMPLEMENTATION_H +#define SIMDUTF_PPC64_IMPLEMENTATION_H namespace simdutf { -namespace rvv { +namespace ppc64 { namespace { using namespace simdutf; @@ -4767,2088 +5260,3523 @@ using namespace simdutf; class implementation final : public simdutf::implementation { public: simdutf_really_inline implementation() - : simdutf::implementation("rvv", "RISC-V Vector Extension", - internal::instruction_set::RVV) - , _supports_zvbb(internal::detect_supported_architectures() & internal::instruction_set::ZVBB) - {} - simdutf_warn_unused int detect_encodings(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_utf8(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf8_with_errors(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_ascii(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_ascii_with_errors(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_utf16le(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_utf16be(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf16le_with_errors(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf16be_with_errors(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_utf32(const char32_t *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf32_with_errors(const char32_t *buf, size_t len) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf8(const char *buf, size_t len, char *utf8_output) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf16le(const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf16be(const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf32(const char *buf, size_t len, char32_t *utf32_output) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_latin1(const char *buf, size_t len, char *latin1_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_latin1_with_errors(const char *buf, size_t len, char *latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_latin1(const char *buf, size_t len, char *latin1_output) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_utf16le(const char *buf, size_t len, char16_t *utf16_output) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_utf16be(const char *buf, size_t len, char16_t *utf16_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_utf16le_with_errors(const char *buf, size_t len, char16_t *utf16_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_utf16be_with_errors(const char *buf, size_t len, char16_t *utf16_output) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_utf16le(const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_utf16be(const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_utf32(const char *buf, size_t len, char32_t *utf32_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_utf32_with_errors(const char *buf, size_t len, char32_t *utf32_output) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_utf32(const char *buf, size_t len, char32_t *utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16le_to_latin1(const char16_t *buf, size_t len, char *latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16be_to_latin1(const char16_t *buf, size_t len, char *latin1_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16le_to_latin1_with_errors(const char16_t *buf, size_t len, char *latin1_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16be_to_latin1_with_errors(const char16_t *buf, size_t len, char *latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16le_to_latin1(const char16_t *buf, size_t len, char *latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16be_to_latin1(const char16_t *buf, size_t len, char *latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16le_to_utf8(const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16be_to_utf8(const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16le_to_utf8_with_errors(const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16be_to_utf8_with_errors(const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16le_to_utf8(const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16be_to_utf8(const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_utf8(const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; - simdutf_warn_unused result convert_utf32_to_utf8_with_errors(const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_utf8(const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_latin1(const char32_t *buf, size_t len, char *latin1_output) const noexcept final; - simdutf_warn_unused result convert_utf32_to_latin1_with_errors(const char32_t *buf, size_t len, char *latin1_output) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_latin1(const char32_t *buf, size_t len, char *latin1_output) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_utf16le(const char32_t *buf, size_t len, char16_t *utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_utf16be(const char32_t *buf, size_t len, char16_t *utf16_buffer) const noexcept final; - simdutf_warn_unused result convert_utf32_to_utf16le_with_errors(const char32_t *buf, size_t len, char16_t *utf16_buffer) const noexcept final; - simdutf_warn_unused result convert_utf32_to_utf16be_with_errors(const char32_t *buf, size_t len, char16_t *utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_utf16le(const char32_t *buf, size_t len, char16_t *utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_utf16be(const char32_t *buf, size_t len, char16_t *utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16le_to_utf32(const char16_t *buf, size_t len, char32_t *utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16be_to_utf32(const char16_t *buf, size_t len, char32_t *utf32_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16le_to_utf32_with_errors(const char16_t *buf, size_t len, char32_t *utf32_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16be_to_utf32_with_errors(const char16_t *buf, size_t len, char32_t *utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16le_to_utf32(const char16_t *buf, size_t len, char32_t *utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16be_to_utf32(const char16_t *buf, size_t len, char32_t *utf32_buffer) const noexcept final; - void change_endianness_utf16(const char16_t *buf, size_t len, char16_t *output) const noexcept final; - simdutf_warn_unused size_t count_utf16le(const char16_t *buf, size_t len) const noexcept; - simdutf_warn_unused size_t count_utf16be(const char16_t *buf, size_t len) const noexcept; - simdutf_warn_unused size_t count_utf8(const char *buf, size_t len) const noexcept; - simdutf_warn_unused size_t utf8_length_from_utf16le(const char16_t *buf, size_t len) const noexcept; - simdutf_warn_unused size_t utf8_length_from_utf16be(const char16_t *buf, size_t len) const noexcept; - simdutf_warn_unused size_t utf32_length_from_utf16le(const char16_t *buf, size_t len) const noexcept; - simdutf_warn_unused size_t utf32_length_from_utf16be(const char16_t *buf, size_t len) const noexcept; - simdutf_warn_unused size_t utf16_length_from_utf8(const char *buf, size_t len) const noexcept; - simdutf_warn_unused size_t utf8_length_from_utf32(const char32_t *buf, size_t len) const noexcept; - simdutf_warn_unused size_t utf16_length_from_utf32(const char32_t *buf, size_t len) const noexcept; - simdutf_warn_unused size_t utf32_length_from_utf8(const char *buf, size_t len) const noexcept; - simdutf_warn_unused size_t latin1_length_from_utf8(const char *buf, size_t len) const noexcept; - simdutf_warn_unused size_t latin1_length_from_utf16(size_t len) const noexcept; - simdutf_warn_unused size_t latin1_length_from_utf32(size_t len) const noexcept; - simdutf_warn_unused size_t utf32_length_from_latin1(size_t len) const noexcept; - simdutf_warn_unused size_t utf16_length_from_latin1(size_t len) const noexcept; - simdutf_warn_unused size_t utf8_length_from_latin1(const char *buf, size_t len) const noexcept; - simdutf_warn_unused size_t maximal_binary_length_from_base64(const char * input, size_t length) const noexcept; - simdutf_warn_unused result base64_to_binary(const char * input, size_t length, char* output, base64_options options) const noexcept; - simdutf_warn_unused size_t maximal_binary_length_from_base64(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused result base64_to_binary(const char16_t * input, size_t length, char* output, base64_options options) const noexcept; - simdutf_warn_unused size_t base64_length_from_binary(size_t length, base64_options options) const noexcept; - size_t binary_to_base64(const char * input, size_t length, char* output, base64_options options) const noexcept; -private: - const bool _supports_zvbb; - -#if SIMDUTF_IS_ZVBB - bool supports_zvbb() const { return true; } -#elif SIMDUTF_HAS_ZVBB_INTRINSICS - bool supports_zvbb() const { return _supports_zvbb; } -#else - bool supports_zvbb() const { return false; } -#endif + : simdutf::implementation("ppc64", "PPC64 ALTIVEC", + internal::instruction_set::ALTIVEC) {} + simdutf_warn_unused int detect_encodings(const char *input, + size_t length) const noexcept final; + simdutf_warn_unused bool validate_utf8(const char *buf, + size_t len) const noexcept final; + simdutf_warn_unused result + validate_utf8_with_errors(const char *buf, size_t len) const noexcept final; + simdutf_warn_unused bool validate_ascii(const char *buf, + size_t len) const noexcept final; + simdutf_warn_unused result + validate_ascii_with_errors(const char *buf, size_t len) const noexcept final; + simdutf_warn_unused bool validate_utf16le(const char16_t *buf, + size_t len) const noexcept final; + simdutf_warn_unused bool validate_utf16be(const char16_t *buf, + size_t len) const noexcept final; + simdutf_warn_unused result validate_utf16le_with_errors( + const char16_t *buf, size_t len) const noexcept final; + simdutf_warn_unused result validate_utf16be_with_errors( + const char16_t *buf, size_t len) const noexcept final; + simdutf_warn_unused bool validate_utf32(const char32_t *buf, + size_t len) const noexcept final; + simdutf_warn_unused result validate_utf32_with_errors( + const char32_t *buf, size_t len) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_utf16le( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_utf16be( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_utf16le_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_utf16be_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_utf16le( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_utf16be( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_utf32( + const char *buf, size_t len, char32_t *utf32_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_utf32_with_errors( + const char *buf, size_t len, char32_t *utf32_output) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_utf32( + const char *buf, size_t len, char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16le_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16be_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused result convert_utf32_to_utf8_with_errors( + const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf32_to_utf16le(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf32_to_utf16be(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused result convert_utf32_to_utf16le_with_errors( + const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused result convert_utf32_to_utf16be_with_errors( + const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf32_to_utf16le(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf32_to_utf16be(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16le_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16be_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16le_to_utf32_with_errors( + const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16be_to_utf32_with_errors( + const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16le_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16be_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + void change_endianness_utf16(const char16_t *buf, size_t length, + char16_t *output) const noexcept final; + simdutf_warn_unused size_t count_utf16le(const char16_t *buf, + size_t length) const noexcept; + simdutf_warn_unused size_t count_utf16be(const char16_t *buf, + size_t length) const noexcept; + simdutf_warn_unused size_t count_utf8(const char *buf, + size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_utf16le(const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_utf16be(const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t utf32_length_from_utf16le( + const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t utf32_length_from_utf16be( + const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf16_length_from_utf8(const char *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_utf32(const char32_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf16_length_from_utf32(const char32_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf32_length_from_utf8(const char *input, size_t length) const noexcept; + simdutf_warn_unused size_t maximal_binary_length_from_base64( + const char *input, size_t length) const noexcept; + simdutf_warn_unused result base64_to_binary( + const char *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_options = + last_chunk_handling_options::loose) const noexcept; + simdutf_warn_unused size_t maximal_binary_length_from_base64( + const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused result + base64_to_binary(const char16_t *input, size_t length, char *output, + base64_options options, + last_chunk_handling_options last_chunk_options = + last_chunk_handling_options::loose) const noexcept; + simdutf_warn_unused size_t base64_length_from_binary( + size_t length, base64_options options) const noexcept; + size_t binary_to_base64(const char *input, size_t length, char *output, + base64_options options) const noexcept; }; -} // namespace rvv +} // namespace ppc64 } // namespace simdutf -#endif // SIMDUTF_RVV_IMPLEMENTATION_H -/* end file src/simdutf/rvv/implementation.h */ -/* begin file src/simdutf/rvv/begin.h */ -// redefining SIMDUTF_IMPLEMENTATION to "rvv" -// #define SIMDUTF_IMPLEMENTATION rvv +#endif // SIMDUTF_PPC64_IMPLEMENTATION_H +/* end file src/simdutf/ppc64/implementation.h */ -#if SIMDUTF_CAN_ALWAYS_RUN_RVV -// nothing needed. -#else -SIMDUTF_TARGET_RVV -#endif -/* end file src/simdutf/rvv/begin.h */ -/* begin file src/simdutf/rvv/intrinsics.h */ -#ifndef SIMDUTF_RVV_INTRINSICS_H -#define SIMDUTF_RVV_INTRINSICS_H +/* begin file src/simdutf/ppc64/begin.h */ +// redefining SIMDUTF_IMPLEMENTATION to "ppc64" +// #define SIMDUTF_IMPLEMENTATION ppc64 +/* end file src/simdutf/ppc64/begin.h */ + // Declarations +/* begin file src/simdutf/ppc64/intrinsics.h */ +#ifndef SIMDUTF_PPC64_INTRINSICS_H +#define SIMDUTF_PPC64_INTRINSICS_H -#include -#if __riscv_v_intrinsic >= 1000000 || __GCC__ >= 14 -#define simdutf_vrgather_u8m1x2(tbl, idx) __riscv_vcreate_v_u8m1_u8m2( \ - __riscv_vrgather_vv_u8m1(tbl, __riscv_vget_v_u8m2_u8m1(idx, 0), __riscv_vsetvlmax_e8m1()), \ - __riscv_vrgather_vv_u8m1(tbl, __riscv_vget_v_u8m2_u8m1(idx, 1), __riscv_vsetvlmax_e8m1())); +// This should be the correct header whether +// you use visual studio or other compilers. +#include -#define simdutf_vrgather_u8m1x4(tbl, idx) __riscv_vcreate_v_u8m1_u8m4( \ - __riscv_vrgather_vv_u8m1(tbl, __riscv_vget_v_u8m4_u8m1(idx, 0), __riscv_vsetvlmax_e8m1()), \ - __riscv_vrgather_vv_u8m1(tbl, __riscv_vget_v_u8m4_u8m1(idx, 1), __riscv_vsetvlmax_e8m1()), \ - __riscv_vrgather_vv_u8m1(tbl, __riscv_vget_v_u8m4_u8m1(idx, 2), __riscv_vsetvlmax_e8m1()), \ - __riscv_vrgather_vv_u8m1(tbl, __riscv_vget_v_u8m4_u8m1(idx, 3), __riscv_vsetvlmax_e8m1())); -#else -// This has worse codegen on gcc -#define simdutf_vrgather_u8m1x2(tbl, idx) \ - __riscv_vset_v_u8m1_u8m2(__riscv_vlmul_ext_v_u8m1_u8m2( \ - __riscv_vrgather_vv_u8m1(tbl, __riscv_vget_v_u8m2_u8m1(idx, 0), __riscv_vsetvlmax_e8m1())), 1, \ - __riscv_vrgather_vv_u8m1(tbl, __riscv_vget_v_u8m2_u8m1(idx, 1), __riscv_vsetvlmax_e8m1())) - -#define simdutf_vrgather_u8m1x4(tbl, idx) \ - __riscv_vset_v_u8m1_u8m4(__riscv_vset_v_u8m1_u8m4(\ - __riscv_vset_v_u8m1_u8m4(__riscv_vlmul_ext_v_u8m1_u8m4( \ - __riscv_vrgather_vv_u8m1(tbl, __riscv_vget_v_u8m4_u8m1(idx, 0), __riscv_vsetvlmax_e8m1())), 1, \ - __riscv_vrgather_vv_u8m1(tbl, __riscv_vget_v_u8m4_u8m1(idx, 1), __riscv_vsetvlmax_e8m1())), 2, \ - __riscv_vrgather_vv_u8m1(tbl, __riscv_vget_v_u8m4_u8m1(idx, 2), __riscv_vsetvlmax_e8m1())), 3, \ - __riscv_vrgather_vv_u8m1(tbl, __riscv_vget_v_u8m4_u8m1(idx, 3), __riscv_vsetvlmax_e8m1())) +// These are defined by altivec.h in GCC toolchain, it is safe to undef them. +#ifdef bool + #undef bool #endif -/* Zvbb adds dedicated support for endianness swaps with vrev8, but if we can't - * use that, we have to emulate it with the standard V extension. - * Using LMUL=1 vrgathers could be faster than the srl+macc variant, but that - * would increase register pressure, and vrgather implementations performance - * varies a lot. */ -enum class simdutf_ByteFlip { NONE, V, ZVBB }; - -template -simdutf_really_inline static uint16_t simdutf_byteflip(uint16_t v) { - if (method != simdutf_ByteFlip::NONE) - return (uint16_t)((v*1u) << 8 | (v*1u) >> 8); - return v; -} - -#ifdef SIMDUTF_TARGET_ZVBB -SIMDUTF_UNTARGET_REGION -SIMDUTF_TARGET_ZVBB +#ifdef vector + #undef vector #endif -template -simdutf_really_inline static vuint16m1_t simdutf_byteflip(vuint16m1_t v, size_t vl) { -#if SIMDUTF_HAS_ZVBB_INTRINSICS - if (method == simdutf_ByteFlip::ZVBB) - return __riscv_vrev8_v_u16m1(v, vl); -#endif - if (method == simdutf_ByteFlip::V) - return __riscv_vmacc_vx_u16m1(__riscv_vsrl_vx_u16m1(v, 8, vl), 0x100, v, vl); - return v; -} +#endif // SIMDUTF_PPC64_INTRINSICS_H +/* end file src/simdutf/ppc64/intrinsics.h */ +/* begin file src/simdutf/ppc64/bitmanipulation.h */ +#ifndef SIMDUTF_PPC64_BITMANIPULATION_H +#define SIMDUTF_PPC64_BITMANIPULATION_H -template -simdutf_really_inline static vuint16m2_t simdutf_byteflip(vuint16m2_t v, size_t vl) { -#if SIMDUTF_HAS_ZVBB_INTRINSICS - if (method == simdutf_ByteFlip::ZVBB) - return __riscv_vrev8_v_u16m2(v, vl); -#endif - if (method == simdutf_ByteFlip::V) - return __riscv_vmacc_vx_u16m2(__riscv_vsrl_vx_u16m2(v, 8, vl), 0x100, v, vl); - return v; -} +namespace simdutf { +namespace ppc64 { +namespace { -template -simdutf_really_inline static vuint16m4_t simdutf_byteflip(vuint16m4_t v, size_t vl) { -#if SIMDUTF_HAS_ZVBB_INTRINSICS - if (method == simdutf_ByteFlip::ZVBB) - return __riscv_vrev8_v_u16m4(v, vl); -#endif - if (method == simdutf_ByteFlip::V) - return __riscv_vmacc_vx_u16m4(__riscv_vsrl_vx_u16m4(v, 8, vl), 0x100, v, vl); - return v; +#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO +simdutf_really_inline int count_ones(uint64_t input_num) { + // note: we do not support legacy 32-bit Windows + return __popcnt64(input_num); // Visual Studio wants two underscores } - -template -simdutf_really_inline static vuint16m8_t simdutf_byteflip(vuint16m8_t v, size_t vl) { -#if SIMDUTF_HAS_ZVBB_INTRINSICS - if (method == simdutf_ByteFlip::ZVBB) - return __riscv_vrev8_v_u16m8(v, vl); -#endif - if (method == simdutf_ByteFlip::V) - return __riscv_vmacc_vx_u16m8(__riscv_vsrl_vx_u16m8(v, 8, vl), 0x100, v, vl); - return v; +#else +simdutf_really_inline int count_ones(uint64_t input_num) { + return __builtin_popcountll(input_num); } - -#ifdef SIMDUTF_TARGET_ZVBB -SIMDUTF_UNTARGET_REGION -SIMDUTF_TARGET_RVV #endif -#endif // SIMDUTF_RVV_INTRINSICS_H -/* end file src/simdutf/rvv/intrinsics.h */ -/* begin file src/simdutf/rvv/end.h */ -#if SIMDUTF_CAN_ALWAYS_RUN_RVV -// nothing needed. -#else -SIMDUTF_UNTARGET_REGION -#endif +} // unnamed namespace +} // namespace ppc64 +} // namespace simdutf -/* end file src/simdutf/rvv/end.h */ +#endif // SIMDUTF_PPC64_BITMANIPULATION_H +/* end file src/simdutf/ppc64/bitmanipulation.h */ +/* begin file src/simdutf/ppc64/simd.h */ +#ifndef SIMDUTF_PPC64_SIMD_H +#define SIMDUTF_PPC64_SIMD_H -#endif // SIMDUTF_IMPLEMENTATION_RVV +#include -#endif // SIMDUTF_RVV_H -/* end file src/simdutf/rvv.h */ -/* begin file src/simdutf/fallback.h */ -#ifndef SIMDUTF_FALLBACK_H -#define SIMDUTF_FALLBACK_H +namespace simdutf { +namespace ppc64 { +namespace { +namespace simd { +using __m128i = __vector unsigned char; -// Note that fallback.h is always imported last. +template struct base { + __m128i value; -// Default Fallback to on unless a builtin implementation has already been selected. -#ifndef SIMDUTF_IMPLEMENTATION_FALLBACK -#if SIMDUTF_CAN_ALWAYS_RUN_ARM64 || SIMDUTF_CAN_ALWAYS_RUN_ICELAKE || SIMDUTF_CAN_ALWAYS_RUN_HASWELL || SIMDUTF_CAN_ALWAYS_RUN_WESTMERE || SIMDUTF_CAN_ALWAYS_RUN_PPC64 || SIMDUTF_CAN_ALWAYS_RUN_RVV -#define SIMDUTF_IMPLEMENTATION_FALLBACK 0 -#else -#define SIMDUTF_IMPLEMENTATION_FALLBACK 1 -#endif -#endif - -#define SIMDUTF_CAN_ALWAYS_RUN_FALLBACK (SIMDUTF_IMPLEMENTATION_FALLBACK) + // Zero constructor + simdutf_really_inline base() : value{__m128i()} {} -#if SIMDUTF_IMPLEMENTATION_FALLBACK + // Conversion from SIMD register + simdutf_really_inline base(const __m128i _value) : value(_value) {} -namespace simdutf { -/** - * Fallback implementation (runs on any machine). - */ -namespace fallback { -} // namespace fallback -} // namespace simdutf + // Conversion to SIMD register + simdutf_really_inline operator const __m128i &() const { return this->value; } + simdutf_really_inline operator __m128i &() { return this->value; } -/* begin file src/simdutf/fallback/implementation.h */ -#ifndef SIMDUTF_FALLBACK_IMPLEMENTATION_H -#define SIMDUTF_FALLBACK_IMPLEMENTATION_H + // Bit operations + simdutf_really_inline Child operator|(const Child other) const { + return vec_or(this->value, (__m128i)other); + } + simdutf_really_inline Child operator&(const Child other) const { + return vec_and(this->value, (__m128i)other); + } + simdutf_really_inline Child operator^(const Child other) const { + return vec_xor(this->value, (__m128i)other); + } + simdutf_really_inline Child bit_andnot(const Child other) const { + return vec_andc(this->value, (__m128i)other); + } + simdutf_really_inline Child &operator|=(const Child other) { + auto this_cast = static_cast(this); + *this_cast = *this_cast | other; + return *this_cast; + } + simdutf_really_inline Child &operator&=(const Child other) { + auto this_cast = static_cast(this); + *this_cast = *this_cast & other; + return *this_cast; + } + simdutf_really_inline Child &operator^=(const Child other) { + auto this_cast = static_cast(this); + *this_cast = *this_cast ^ other; + return *this_cast; + } +}; +// Forward-declared so they can be used by splat and friends. +template struct simd8; -namespace simdutf { -namespace fallback { +template > +struct base8 : base> { + typedef uint16_t bitmask_t; + typedef uint32_t bitmask2_t; -namespace { -using namespace simdutf; -} + simdutf_really_inline base8() : base>() {} + simdutf_really_inline base8(const __m128i _value) : base>(_value) {} -class implementation final : public simdutf::implementation { -public: - simdutf_really_inline implementation() : simdutf::implementation( - "fallback", - "Generic fallback implementation", - 0 - ) {} - simdutf_warn_unused int detect_encodings(const char * input, size_t length) const noexcept final; - simdutf_warn_unused bool validate_utf8(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf8_with_errors(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_ascii(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_ascii_with_errors(const char *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_utf16le(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_utf16be(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf16le_with_errors(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf16be_with_errors(const char16_t *buf, size_t len) const noexcept final; - simdutf_warn_unused bool validate_utf32(const char32_t *buf, size_t len) const noexcept final; - simdutf_warn_unused result validate_utf32_with_errors(const char32_t *buf, size_t len) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf8(const char * buf, size_t len, char* utf8_output) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf16le(const char * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf16be(const char * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_latin1_to_utf32(const char * buf, size_t len, char32_t* utf32_output) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_latin1(const char * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_latin1_with_errors(const char * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_latin1(const char * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_utf16le(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_utf16be(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_utf16le_with_errors(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_utf16be_with_errors(const char * buf, size_t len, char16_t* utf16_output) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_utf16le(const char * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_utf16be(const char * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf8_to_utf32(const char * buf, size_t len, char32_t* utf32_output) const noexcept final; - simdutf_warn_unused result convert_utf8_to_utf32_with_errors(const char * buf, size_t len, char32_t* utf32_output) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf8_to_utf32(const char * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16le_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16be_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16le_to_latin1_with_errors(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16be_to_latin1_with_errors(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16le_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16be_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16le_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16be_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16le_to_utf8_with_errors(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16be_to_utf8_with_errors(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16le_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16be_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_utf8(const char32_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused result convert_utf32_to_utf8_with_errors(const char32_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_utf8(const char32_t * buf, size_t len, char* utf8_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_latin1(const char32_t * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused result convert_utf32_to_latin1_with_errors(const char32_t * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_latin1(const char32_t * buf, size_t len, char* latin1_output) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_utf16le(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf32_to_utf16be(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused result convert_utf32_to_utf16le_with_errors(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused result convert_utf32_to_utf16be_with_errors(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_utf16le(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf32_to_utf16be(const char32_t * buf, size_t len, char16_t* utf16_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16le_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_utf16be_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16le_to_utf32_with_errors(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused result convert_utf16be_to_utf32_with_errors(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16le_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - simdutf_warn_unused size_t convert_valid_utf16be_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) const noexcept final; - void change_endianness_utf16(const char16_t * buf, size_t length, char16_t * output) const noexcept final; - simdutf_warn_unused size_t count_utf16le(const char16_t * buf, size_t length) const noexcept; - simdutf_warn_unused size_t count_utf16be(const char16_t * buf, size_t length) const noexcept; - simdutf_warn_unused size_t count_utf8(const char * buf, size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_utf16le(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_utf16be(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_utf16le(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_utf16be(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf16_length_from_utf8(const char * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_utf32(const char32_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf16_length_from_utf32(const char32_t * input, size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_utf8(const char * input, size_t length) const noexcept; - simdutf_warn_unused size_t latin1_length_from_utf8(const char * input, size_t length) const noexcept; - simdutf_warn_unused size_t latin1_length_from_utf16(size_t length) const noexcept; - simdutf_warn_unused size_t latin1_length_from_utf32(size_t length) const noexcept; - simdutf_warn_unused size_t utf32_length_from_latin1(size_t length) const noexcept; - simdutf_warn_unused size_t utf16_length_from_latin1(size_t length) const noexcept; - simdutf_warn_unused size_t utf8_length_from_latin1(const char * input, size_t length) const noexcept; - simdutf_warn_unused size_t maximal_binary_length_from_base64(const char * input, size_t length) const noexcept; - simdutf_warn_unused result base64_to_binary(const char * input, size_t length, char* output, base64_options options) const noexcept; - simdutf_warn_unused size_t maximal_binary_length_from_base64(const char16_t * input, size_t length) const noexcept; - simdutf_warn_unused result base64_to_binary(const char16_t * input, size_t length, char* output, base64_options options) const noexcept; - simdutf_warn_unused size_t base64_length_from_binary(size_t length, base64_options options) const noexcept; - size_t binary_to_base64(const char * input, size_t length, char* output, base64_options options) const noexcept; -}; -} // namespace fallback -} // namespace simdutf + friend simdutf_really_inline Mask operator==(const simd8 lhs, + const simd8 rhs) { + return (__m128i)vec_cmpeq(lhs.value, (__m128i)rhs); + } -#endif // SIMDUTF_FALLBACK_IMPLEMENTATION_H -/* end file src/simdutf/fallback/implementation.h */ + static const int SIZE = sizeof(base>::value); -/* begin file src/simdutf/fallback/begin.h */ -// redefining SIMDUTF_IMPLEMENTATION to "fallback" -// #define SIMDUTF_IMPLEMENTATION fallback -/* end file src/simdutf/fallback/begin.h */ + template + simdutf_really_inline simd8 prev(simd8 prev_chunk) const { + __m128i chunk = this->value; +#ifdef __LITTLE_ENDIAN__ + chunk = (__m128i)vec_reve(this->value); + prev_chunk = (__m128i)vec_reve((__m128i)prev_chunk); +#endif + chunk = (__m128i)vec_sld((__m128i)prev_chunk, (__m128i)chunk, 16 - N); +#ifdef __LITTLE_ENDIAN__ + chunk = (__m128i)vec_reve((__m128i)chunk); +#endif + return chunk; + } +}; -// Declarations -/* begin file src/simdutf/fallback/bitmanipulation.h */ -#ifndef SIMDUTF_FALLBACK_BITMANIPULATION_H -#define SIMDUTF_FALLBACK_BITMANIPULATION_H +// SIMD byte mask type (returned by things like eq and gt) +template <> struct simd8 : base8 { + static simdutf_really_inline simd8 splat(bool _value) { + return (__m128i)vec_splats((unsigned char)(-(!!_value))); + } -#include + simdutf_really_inline simd8() : base8() {} + simdutf_really_inline simd8(const __m128i _value) : base8(_value) {} + // Splat constructor + simdutf_really_inline simd8(bool _value) : base8(splat(_value)) {} -namespace simdutf { -namespace fallback { -namespace { + simdutf_really_inline int to_bitmask() const { + __vector unsigned long long result; + const __m128i perm_mask = {0x78, 0x70, 0x68, 0x60, 0x58, 0x50, 0x48, 0x40, + 0x38, 0x30, 0x28, 0x20, 0x18, 0x10, 0x08, 0x00}; -} // unnamed namespace -} // namespace fallback -} // namespace simdutf + result = ((__vector unsigned long long)vec_vbpermq((__m128i)this->value, + (__m128i)perm_mask)); +#ifdef __LITTLE_ENDIAN__ + return static_cast(result[1]); +#else + return static_cast(result[0]); +#endif + } + simdutf_really_inline bool any() const { + return !vec_all_eq(this->value, (__m128i)vec_splats(0)); + } + simdutf_really_inline simd8 operator~() const { + return this->value ^ (__m128i)splat(true); + } +}; -#endif // SIMDUTF_FALLBACK_BITMANIPULATION_H -/* end file src/simdutf/fallback/bitmanipulation.h */ +template struct base8_numeric : base8 { + static simdutf_really_inline simd8 splat(T value) { + (void)value; + return (__m128i)vec_splats(value); + } + static simdutf_really_inline simd8 zero() { return splat(0); } + static simdutf_really_inline simd8 load(const T values[16]) { + return (__m128i)(vec_vsx_ld(0, reinterpret_cast(values))); + } + // Repeat 16 values as many times as necessary (usually for lookup tables) + static simdutf_really_inline simd8 repeat_16(T v0, T v1, T v2, T v3, T v4, + T v5, T v6, T v7, T v8, T v9, + T v10, T v11, T v12, T v13, + T v14, T v15) { + return simd8(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, + v14, v15); + } -/* begin file src/simdutf/fallback/end.h */ -/* end file src/simdutf/fallback/end.h */ + simdutf_really_inline base8_numeric() : base8() {} + simdutf_really_inline base8_numeric(const __m128i _value) + : base8(_value) {} -#endif // SIMDUTF_IMPLEMENTATION_FALLBACK -#endif // SIMDUTF_FALLBACK_H -/* end file src/simdutf/fallback.h */ + // Store to array + simdutf_really_inline void store(T dst[16]) const { + vec_vsx_st(this->value, 0, reinterpret_cast<__m128i *>(dst)); + } -/* begin file src/scalar/utf8.h */ -#ifndef SIMDUTF_UTF8_H -#define SIMDUTF_UTF8_H + // Override to distinguish from bool version + simdutf_really_inline simd8 operator~() const { return *this ^ 0xFFu; } -namespace simdutf { -namespace scalar { -namespace { -namespace utf8 { -#if SIMDUTF_IMPLEMENTATION_FALLBACK || SIMDUTF_IMPLEMENTATION_RVV -// only used by the fallback kernel. -// credit: based on code from Google Fuchsia (Apache Licensed) -inline simdutf_warn_unused bool validate(const char *buf, size_t len) noexcept { - const uint8_t *data = reinterpret_cast(buf); - uint64_t pos = 0; - uint32_t code_point = 0; - while (pos < len) { - // check of the next 16 bytes are ascii. - uint64_t next_pos = pos + 16; - if (next_pos <= len) { // if it is safe to read 16 more bytes, check that they are ascii - uint64_t v1; - std::memcpy(&v1, data + pos, sizeof(uint64_t)); - uint64_t v2; - std::memcpy(&v2, data + pos + sizeof(uint64_t), sizeof(uint64_t)); - uint64_t v{v1 | v2}; - if ((v & 0x8080808080808080) == 0) { - pos = next_pos; - continue; - } - } - unsigned char byte = data[pos]; + // Addition/subtraction are the same for signed and unsigned + simdutf_really_inline simd8 operator+(const simd8 other) const { + return (__m128i)((__m128i)this->value + (__m128i)other); + } + simdutf_really_inline simd8 operator-(const simd8 other) const { + return (__m128i)((__m128i)this->value - (__m128i)other); + } + simdutf_really_inline simd8 &operator+=(const simd8 other) { + *this = *this + other; + return *static_cast *>(this); + } + simdutf_really_inline simd8 &operator-=(const simd8 other) { + *this = *this - other; + return *static_cast *>(this); + } - while (byte < 0b10000000) { - if (++pos == len) { return true; } - byte = data[pos]; - } + // Perform a lookup assuming the value is between 0 and 16 (undefined behavior + // for out of range values) + template + simdutf_really_inline simd8 lookup_16(simd8 lookup_table) const { + return (__m128i)vec_perm((__m128i)lookup_table, (__m128i)lookup_table, + this->value); + } - if ((byte & 0b11100000) == 0b11000000) { - next_pos = pos + 2; - if (next_pos > len) { return false; } - if ((data[pos + 1] & 0b11000000) != 0b10000000) { return false; } - // range check - code_point = (byte & 0b00011111) << 6 | (data[pos + 1] & 0b00111111); - if ((code_point < 0x80) || (0x7ff < code_point)) { return false; } - } else if ((byte & 0b11110000) == 0b11100000) { - next_pos = pos + 3; - if (next_pos > len) { return false; } - if ((data[pos + 1] & 0b11000000) != 0b10000000) { return false; } - if ((data[pos + 2] & 0b11000000) != 0b10000000) { return false; } - // range check - code_point = (byte & 0b00001111) << 12 | - (data[pos + 1] & 0b00111111) << 6 | - (data[pos + 2] & 0b00111111); - if ((code_point < 0x800) || (0xffff < code_point) || - (0xd7ff < code_point && code_point < 0xe000)) { - return false; - } - } else if ((byte & 0b11111000) == 0b11110000) { // 0b11110000 - next_pos = pos + 4; - if (next_pos > len) { return false; } - if ((data[pos + 1] & 0b11000000) != 0b10000000) { return false; } - if ((data[pos + 2] & 0b11000000) != 0b10000000) { return false; } - if ((data[pos + 3] & 0b11000000) != 0b10000000) { return false; } - // range check - code_point = - (byte & 0b00000111) << 18 | (data[pos + 1] & 0b00111111) << 12 | - (data[pos + 2] & 0b00111111) << 6 | (data[pos + 3] & 0b00111111); - if (code_point <= 0xffff || 0x10ffff < code_point) { return false; } - } else { - // we may have a continuation - return false; - } - pos = next_pos; + template + simdutf_really_inline simd8 + lookup_16(L replace0, L replace1, L replace2, L replace3, L replace4, + L replace5, L replace6, L replace7, L replace8, L replace9, + L replace10, L replace11, L replace12, L replace13, L replace14, + L replace15) const { + return lookup_16(simd8::repeat_16( + replace0, replace1, replace2, replace3, replace4, replace5, replace6, + replace7, replace8, replace9, replace10, replace11, replace12, + replace13, replace14, replace15)); } - return true; -} -#endif +}; -inline simdutf_warn_unused result validate_with_errors(const char *buf, size_t len) noexcept { - const uint8_t *data = reinterpret_cast(buf); - size_t pos = 0; - uint32_t code_point = 0; - while (pos < len) { - // check of the next 16 bytes are ascii. - size_t next_pos = pos + 16; - if (next_pos <= len) { // if it is safe to read 16 more bytes, check that they are ascii - uint64_t v1; - std::memcpy(&v1, data + pos, sizeof(uint64_t)); - uint64_t v2; - std::memcpy(&v2, data + pos + sizeof(uint64_t), sizeof(uint64_t)); - uint64_t v{v1 | v2}; - if ((v & 0x8080808080808080) == 0) { - pos = next_pos; - continue; - } - } - unsigned char byte = data[pos]; +// Signed bytes +template <> struct simd8 : base8_numeric { + simdutf_really_inline simd8() : base8_numeric() {} + simdutf_really_inline simd8(const __m128i _value) + : base8_numeric(_value) {} - while (byte < 0b10000000) { - if (++pos == len) { return result(error_code::SUCCESS, len); } - byte = data[pos]; - } + // Splat constructor + simdutf_really_inline simd8(int8_t _value) : simd8(splat(_value)) {} + // Array constructor + simdutf_really_inline simd8(const int8_t *values) : simd8(load(values)) {} + // Member-by-member initialization + simdutf_really_inline simd8(int8_t v0, int8_t v1, int8_t v2, int8_t v3, + int8_t v4, int8_t v5, int8_t v6, int8_t v7, + int8_t v8, int8_t v9, int8_t v10, int8_t v11, + int8_t v12, int8_t v13, int8_t v14, int8_t v15) + : simd8((__m128i)(__vector signed char){v0, v1, v2, v3, v4, v5, v6, v7, + v8, v9, v10, v11, v12, v13, v14, + v15}) {} + // Repeat 16 values as many times as necessary (usually for lookup tables) + simdutf_really_inline static simd8 + repeat_16(int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, + int8_t v6, int8_t v7, int8_t v8, int8_t v9, int8_t v10, int8_t v11, + int8_t v12, int8_t v13, int8_t v14, int8_t v15) { + return simd8(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, + v13, v14, v15); + } - if ((byte & 0b11100000) == 0b11000000) { - next_pos = pos + 2; - if (next_pos > len) { return result(error_code::TOO_SHORT, pos); } - if ((data[pos + 1] & 0b11000000) != 0b10000000) { return result(error_code::TOO_SHORT, pos); } - // range check - code_point = (byte & 0b00011111) << 6 | (data[pos + 1] & 0b00111111); - if ((code_point < 0x80) || (0x7ff < code_point)) { return result(error_code::OVERLONG, pos); } - } else if ((byte & 0b11110000) == 0b11100000) { - next_pos = pos + 3; - if (next_pos > len) { return result(error_code::TOO_SHORT, pos); } - if ((data[pos + 1] & 0b11000000) != 0b10000000) { return result(error_code::TOO_SHORT, pos); } - if ((data[pos + 2] & 0b11000000) != 0b10000000) { return result(error_code::TOO_SHORT, pos); } - // range check - code_point = (byte & 0b00001111) << 12 | - (data[pos + 1] & 0b00111111) << 6 | - (data[pos + 2] & 0b00111111); - if ((code_point < 0x800) || (0xffff < code_point)) { return result(error_code::OVERLONG, pos);} - if (0xd7ff < code_point && code_point < 0xe000) { return result(error_code::SURROGATE, pos); } - } else if ((byte & 0b11111000) == 0b11110000) { // 0b11110000 - next_pos = pos + 4; - if (next_pos > len) { return result(error_code::TOO_SHORT, pos); } - if ((data[pos + 1] & 0b11000000) != 0b10000000) { return result(error_code::TOO_SHORT, pos); } - if ((data[pos + 2] & 0b11000000) != 0b10000000) { return result(error_code::TOO_SHORT, pos); } - if ((data[pos + 3] & 0b11000000) != 0b10000000) { return result(error_code::TOO_SHORT, pos); } - // range check - code_point = - (byte & 0b00000111) << 18 | (data[pos + 1] & 0b00111111) << 12 | - (data[pos + 2] & 0b00111111) << 6 | (data[pos + 3] & 0b00111111); - if (code_point <= 0xffff) { return result(error_code::OVERLONG, pos); } - if (0x10ffff < code_point) { return result(error_code::TOO_LARGE, pos); } - } else { - // we either have too many continuation bytes or an invalid leading byte - if ((byte & 0b11000000) == 0b10000000) { return result(error_code::TOO_LONG, pos); } - else { return result(error_code::HEADER_BITS, pos); } - } - pos = next_pos; + // Order-sensitive comparisons + simdutf_really_inline simd8 max_val(const simd8 other) const { + return (__m128i)vec_max((__vector signed char)this->value, + (__vector signed char)(__m128i)other); } - return result(error_code::SUCCESS, len); -} + simdutf_really_inline simd8 min_val(const simd8 other) const { + return (__m128i)vec_min((__vector signed char)this->value, + (__vector signed char)(__m128i)other); + } + simdutf_really_inline simd8 operator>(const simd8 other) const { + return (__m128i)vec_cmpgt((__vector signed char)this->value, + (__vector signed char)(__m128i)other); + } + simdutf_really_inline simd8 operator<(const simd8 other) const { + return (__m128i)vec_cmplt((__vector signed char)this->value, + (__vector signed char)(__m128i)other); + } +}; -// Finds the previous leading byte starting backward from buf and validates with errors from there -// Used to pinpoint the location of an error when an invalid chunk is detected -// We assume that the stream starts with a leading byte, and to check that it is the case, we -// ask that you pass a pointer to the start of the stream (start). -inline simdutf_warn_unused result rewind_and_validate_with_errors(const char *start, const char *buf, size_t len) noexcept { - // First check that we start with a leading byte - if ((*start & 0b11000000) == 0b10000000) { - return result(error_code::TOO_LONG, 0); +// Unsigned bytes +template <> struct simd8 : base8_numeric { + simdutf_really_inline simd8() : base8_numeric() {} + simdutf_really_inline simd8(const __m128i _value) + : base8_numeric(_value) {} + // Splat constructor + simdutf_really_inline simd8(uint8_t _value) : simd8(splat(_value)) {} + // Array constructor + simdutf_really_inline simd8(const uint8_t *values) : simd8(load(values)) {} + // Member-by-member initialization + simdutf_really_inline + simd8(uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, + uint8_t v6, uint8_t v7, uint8_t v8, uint8_t v9, uint8_t v10, + uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15) + : simd8((__m128i){v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, + v13, v14, v15}) {} + // Repeat 16 values as many times as necessary (usually for lookup tables) + simdutf_really_inline static simd8 + repeat_16(uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, + uint8_t v5, uint8_t v6, uint8_t v7, uint8_t v8, uint8_t v9, + uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, + uint8_t v15) { + return simd8(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, + v13, v14, v15); } - size_t extra_len{0}; - // A leading byte cannot be further than 4 bytes away - for(int i = 0; i < 5; i++) { - unsigned char byte = *buf; - if ((byte & 0b11000000) != 0b10000000) { - break; - } else { - buf--; - extra_len++; - } + + // Saturated math + simdutf_really_inline simd8 + saturating_add(const simd8 other) const { + return (__m128i)vec_adds(this->value, (__m128i)other); + } + simdutf_really_inline simd8 + saturating_sub(const simd8 other) const { + return (__m128i)vec_subs(this->value, (__m128i)other); } - result res = validate_with_errors(buf, len + extra_len); - res.count -= extra_len; - return res; -} + // Order-specific operations + simdutf_really_inline simd8 + max_val(const simd8 other) const { + return (__m128i)vec_max(this->value, (__m128i)other); + } + simdutf_really_inline simd8 + min_val(const simd8 other) const { + return (__m128i)vec_min(this->value, (__m128i)other); + } + // Same as >, but only guarantees true is nonzero (< guarantees true = -1) + simdutf_really_inline simd8 + gt_bits(const simd8 other) const { + return this->saturating_sub(other); + } + // Same as <, but only guarantees true is nonzero (< guarantees true = -1) + simdutf_really_inline simd8 + lt_bits(const simd8 other) const { + return other.saturating_sub(*this); + } + simdutf_really_inline simd8 + operator<=(const simd8 other) const { + return other.max_val(*this) == other; + } + simdutf_really_inline simd8 + operator>=(const simd8 other) const { + return other.min_val(*this) == other; + } + simdutf_really_inline simd8 + operator>(const simd8 other) const { + return this->gt_bits(other).any_bits_set(); + } + simdutf_really_inline simd8 + operator<(const simd8 other) const { + return this->gt_bits(other).any_bits_set(); + } -inline size_t count_code_points(const char* buf, size_t len) { - const int8_t * p = reinterpret_cast(buf); - size_t counter{0}; - for(size_t i = 0; i < len; i++) { - // -65 is 0b10111111, anything larger in two-complement's should start a new code point. - if(p[i] > -65) { counter++; } - } - return counter; -} + // Bit-specific operations + simdutf_really_inline simd8 bits_not_set() const { + return (__m128i)vec_cmpeq(this->value, (__m128i)vec_splats(uint8_t(0))); + } + simdutf_really_inline simd8 bits_not_set(simd8 bits) const { + return (*this & bits).bits_not_set(); + } + simdutf_really_inline simd8 any_bits_set() const { + return ~this->bits_not_set(); + } + simdutf_really_inline simd8 any_bits_set(simd8 bits) const { + return ~this->bits_not_set(bits); + } -inline size_t utf16_length_from_utf8(const char* buf, size_t len) { - const int8_t * p = reinterpret_cast(buf); - size_t counter{0}; - for(size_t i = 0; i < len; i++) { - if(p[i] > -65) { counter++; } - if(uint8_t(p[i]) >= 240) { counter++; } - } - return counter; -} + simdutf_really_inline bool is_ascii() const { + return this->saturating_sub(0b01111111u).bits_not_set_anywhere(); + } -simdutf_warn_unused inline size_t trim_partial_utf8(const char *input, size_t length) { - if (length < 3) { - switch (length) { - case 2: - if (uint8_t(input[length-1]) >= 0xc0) { return length-1; } // 2-, 3- and 4-byte characters with only 1 byte left - if (uint8_t(input[length-2]) >= 0xe0) { return length-2; } // 3- and 4-byte characters with only 2 bytes left - return length; - case 1: - if (uint8_t(input[length-1]) >= 0xc0) { return length-1; } // 2-, 3- and 4-byte characters with only 1 byte left - return length; - case 0: - return length; - } - } - if (uint8_t(input[length-1]) >= 0xc0) { return length-1; } // 2-, 3- and 4-byte characters with only 1 byte left - if (uint8_t(input[length-2]) >= 0xe0) { return length-2; } // 3- and 4-byte characters with only 1 byte left - if (uint8_t(input[length-3]) >= 0xf0) { return length-3; } // 4-byte characters with only 3 bytes left - return length; -} + simdutf_really_inline bool bits_not_set_anywhere() const { + return vec_all_eq(this->value, (__m128i)vec_splats(0)); + } + simdutf_really_inline bool any_bits_set_anywhere() const { + return !bits_not_set_anywhere(); + } + simdutf_really_inline bool bits_not_set_anywhere(simd8 bits) const { + return vec_all_eq(vec_and(this->value, (__m128i)bits), + (__m128i)vec_splats(0)); + } + simdutf_really_inline bool any_bits_set_anywhere(simd8 bits) const { + return !bits_not_set_anywhere(bits); + } + template simdutf_really_inline simd8 shr() const { + return simd8( + (__m128i)vec_sr(this->value, (__m128i)vec_splat_u8(N))); + } + template simdutf_really_inline simd8 shl() const { + return simd8( + (__m128i)vec_sl(this->value, (__m128i)vec_splat_u8(N))); + } +}; -} // utf8 namespace -} // unnamed namespace -} // namespace scalar -} // namespace simdutf +template struct simd8x64 { + static constexpr int NUM_CHUNKS = 64 / sizeof(simd8); + static_assert(NUM_CHUNKS == 4, + "PPC64 kernel should use four registers per 64-byte block."); + simd8 chunks[NUM_CHUNKS]; -#endif -/* end file src/scalar/utf8.h */ -/* begin file src/scalar/utf16.h */ -#ifndef SIMDUTF_UTF16_H -#define SIMDUTF_UTF16_H + simd8x64(const simd8x64 &o) = delete; // no copy allowed + simd8x64 & + operator=(const simd8 other) = delete; // no assignment allowed + simd8x64() = delete; // no default constructor allowed -namespace simdutf { -namespace scalar { -namespace { -namespace utf16 { + simdutf_really_inline simd8x64(const simd8 chunk0, const simd8 chunk1, + const simd8 chunk2, const simd8 chunk3) + : chunks{chunk0, chunk1, chunk2, chunk3} {} -inline simdutf_warn_unused uint16_t swap_bytes(const uint16_t word) { - return uint16_t((word >> 8) | (word << 8)); -} + simdutf_really_inline simd8x64(const T *ptr) + : chunks{simd8::load(ptr), + simd8::load(ptr + sizeof(simd8) / sizeof(T)), + simd8::load(ptr + 2 * sizeof(simd8) / sizeof(T)), + simd8::load(ptr + 3 * sizeof(simd8) / sizeof(T))} {} -template -inline simdutf_warn_unused bool validate(const char16_t *buf, size_t len) noexcept { - const uint16_t *data = reinterpret_cast(buf); - uint64_t pos = 0; - while (pos < len) { - uint16_t word = !match_system(big_endian) ? swap_bytes(data[pos]) : data[pos]; - if((word &0xF800) == 0xD800) { - if(pos + 1 >= len) { return false; } - uint16_t diff = uint16_t(word - 0xD800); - if(diff > 0x3FF) { return false; } - uint16_t next_word = !match_system(big_endian) ? swap_bytes(data[pos + 1]) : data[pos + 1]; - uint16_t diff2 = uint16_t(next_word - 0xDC00); - if(diff2 > 0x3FF) { return false; } - pos += 2; - } else { - pos++; - } + simdutf_really_inline void store(T *ptr) const { + this->chunks[0].store(ptr + sizeof(simd8) * 0 / sizeof(T)); + this->chunks[1].store(ptr + sizeof(simd8) * 1 / sizeof(T)); + this->chunks[2].store(ptr + sizeof(simd8) * 2 / sizeof(T)); + this->chunks[3].store(ptr + sizeof(simd8) * 3 / sizeof(T)); } - return true; -} -template -inline simdutf_warn_unused result validate_with_errors(const char16_t *buf, size_t len) noexcept { - const uint16_t *data = reinterpret_cast(buf); - size_t pos = 0; - while (pos < len) { - uint16_t word = !match_system(big_endian) ? swap_bytes(data[pos]) : data[pos]; - if((word & 0xF800) == 0xD800) { - if(pos + 1 >= len) { return result(error_code::SURROGATE, pos); } - uint16_t diff = uint16_t(word - 0xD800); - if(diff > 0x3FF) { return result(error_code::SURROGATE, pos); } - uint16_t next_word = !match_system(big_endian) ? swap_bytes(data[pos + 1]) : data[pos + 1]; - uint16_t diff2 = uint16_t(next_word - 0xDC00); - if(diff2 > 0x3FF) { return result(error_code::SURROGATE, pos); } - pos += 2; - } else { - pos++; - } + simdutf_really_inline simd8x64 &operator|=(const simd8x64 &other) { + this->chunks[0] |= other.chunks[0]; + this->chunks[1] |= other.chunks[1]; + this->chunks[2] |= other.chunks[2]; + this->chunks[3] |= other.chunks[3]; + return *this; } - return result(error_code::SUCCESS, pos); -} -template -inline size_t count_code_points(const char16_t* buf, size_t len) { - // We are not BOM aware. - const uint16_t * p = reinterpret_cast(buf); - size_t counter{0}; - for(size_t i = 0; i < len; i++) { - uint16_t word = !match_system(big_endian) ? swap_bytes(p[i]) : p[i]; - counter += ((word & 0xFC00) != 0xDC00); + simdutf_really_inline simd8 reduce_or() const { + return (this->chunks[0] | this->chunks[1]) | + (this->chunks[2] | this->chunks[3]); } - return counter; -} -template -inline size_t utf8_length_from_utf16(const char16_t* buf, size_t len) { - // We are not BOM aware. - const uint16_t * p = reinterpret_cast(buf); - size_t counter{0}; - for(size_t i = 0; i < len; i++) { - uint16_t word = !match_system(big_endian) ? swap_bytes(p[i]) : p[i]; - counter++; // ASCII - counter += static_cast(word > 0x7F); // non-ASCII is at least 2 bytes, surrogates are 2*2 == 4 bytes - counter += static_cast((word > 0x7FF && word <= 0xD7FF) || (word >= 0xE000)); // three-byte + simdutf_really_inline bool is_ascii() const { + return input.reduce_or().is_ascii(); } - return counter; -} -template -inline size_t utf32_length_from_utf16(const char16_t* buf, size_t len) { - // We are not BOM aware. - const uint16_t * p = reinterpret_cast(buf); - size_t counter{0}; - for(size_t i = 0; i < len; i++) { - uint16_t word = !match_system(big_endian) ? swap_bytes(p[i]) : p[i]; - counter += ((word & 0xFC00) != 0xDC00); + simdutf_really_inline uint64_t to_bitmask() const { + uint64_t r0 = uint32_t(this->chunks[0].to_bitmask()); + uint64_t r1 = this->chunks[1].to_bitmask(); + uint64_t r2 = this->chunks[2].to_bitmask(); + uint64_t r3 = this->chunks[3].to_bitmask(); + return r0 | (r1 << 16) | (r2 << 32) | (r3 << 48); } - return counter; -} + simdutf_really_inline uint64_t eq(const T m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(this->chunks[0] == mask, this->chunks[1] == mask, + this->chunks[2] == mask, this->chunks[3] == mask) + .to_bitmask(); + } -inline size_t latin1_length_from_utf16(size_t len) { - return len; -} + simdutf_really_inline uint64_t eq(const simd8x64 &other) const { + return simd8x64(this->chunks[0] == other.chunks[0], + this->chunks[1] == other.chunks[1], + this->chunks[2] == other.chunks[2], + this->chunks[3] == other.chunks[3]) + .to_bitmask(); + } -simdutf_really_inline void change_endianness_utf16(const char16_t* in, size_t size, char16_t* out) { - const uint16_t * input = reinterpret_cast(in); - uint16_t * output = reinterpret_cast(out); - for (size_t i = 0; i < size; i++) { - *output++ = uint16_t(input[i] >> 8 | input[i] << 8); + simdutf_really_inline uint64_t lteq(const T m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(this->chunks[0] <= mask, this->chunks[1] <= mask, + this->chunks[2] <= mask, this->chunks[3] <= mask) + .to_bitmask(); } -} + simdutf_really_inline uint64_t in_range(const T low, const T high) const { + const simd8 mask_low = simd8::splat(low); + const simd8 mask_high = simd8::splat(high); + + return simd8x64( + (this->chunks[0] <= mask_high) & (this->chunks[0] >= mask_low), + (this->chunks[1] <= mask_high) & (this->chunks[1] >= mask_low), + (this->chunks[2] <= mask_high) & (this->chunks[2] >= mask_low), + (this->chunks[3] <= mask_high) & (this->chunks[3] >= mask_low)) + .to_bitmask(); + } + simdutf_really_inline uint64_t not_in_range(const T low, const T high) const { + const simd8 mask_low = simd8::splat(low); + const simd8 mask_high = simd8::splat(high); + return simd8x64( + (this->chunks[0] > mask_high) | (this->chunks[0] < mask_low), + (this->chunks[1] > mask_high) | (this->chunks[1] < mask_low), + (this->chunks[2] > mask_high) | (this->chunks[2] < mask_low), + (this->chunks[3] > mask_high) | (this->chunks[3] < mask_low)) + .to_bitmask(); + } + simdutf_really_inline uint64_t lt(const T m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(this->chunks[0] < mask, this->chunks[1] < mask, + this->chunks[2] < mask, this->chunks[3] < mask) + .to_bitmask(); + } -template -simdutf_warn_unused inline size_t trim_partial_utf16(const char16_t* input, size_t length) { - if (length <= 1) { - return length; + simdutf_really_inline uint64_t gt(const T m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(this->chunks[0] > mask, this->chunks[1] > mask, + this->chunks[2] > mask, this->chunks[3] > mask) + .to_bitmask(); } - uint16_t last_word = uint16_t(input[length-1]); - last_word = !match_system(big_endian) ? swap_bytes(last_word) : last_word; - length -= ((last_word & 0xFC00) == 0xD800); - return length; -} + simdutf_really_inline uint64_t gteq(const T m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(this->chunks[0] >= mask, this->chunks[1] >= mask, + this->chunks[2] >= mask, this->chunks[3] >= mask) + .to_bitmask(); + } + simdutf_really_inline uint64_t gteq_unsigned(const uint8_t m) const { + const simd8 mask = simd8::splat(m); + return simd8x64(simd8(this->chunks[0]) >= mask, + simd8(this->chunks[1]) >= mask, + simd8(this->chunks[2]) >= mask, + simd8(this->chunks[3]) >= mask) + .to_bitmask(); + } +}; // struct simd8x64 -} // utf16 namespace +} // namespace simd } // unnamed namespace -} // namespace scalar +} // namespace ppc64 } // namespace simdutf +#endif // SIMDUTF_PPC64_SIMD_INPUT_H +/* end file src/simdutf/ppc64/simd.h */ + +/* begin file src/simdutf/ppc64/end.h */ +/* end file src/simdutf/ppc64/end.h */ + +#endif // SIMDUTF_IMPLEMENTATION_PPC64 + +#endif // SIMDUTF_PPC64_H +/* end file src/simdutf/ppc64.h */ +/* begin file src/simdutf/rvv.h */ +#ifndef SIMDUTF_RVV_H +#define SIMDUTF_RVV_H + +#ifdef SIMDUTF_FALLBACK_H + #error "rvv.h must be included before fallback.h" +#endif + + +#define SIMDUTF_CAN_ALWAYS_RUN_RVV SIMDUTF_IS_RVV + +#ifndef SIMDUTF_IMPLEMENTATION_RVV + #define SIMDUTF_IMPLEMENTATION_RVV \ + (SIMDUTF_CAN_ALWAYS_RUN_RVV || \ + (SIMDUTF_IS_RISCV64 && SIMDUTF_HAS_RVV_INTRINSICS && \ + SIMDUTF_HAS_RVV_TARGET_REGION)) #endif -/* end file src/scalar/utf16.h */ -/* begin file src/scalar/utf32.h */ -#ifndef SIMDUTF_UTF32_H -#define SIMDUTF_UTF32_H + +#if SIMDUTF_IMPLEMENTATION_RVV + + #if SIMDUTF_CAN_ALWAYS_RUN_RVV + #define SIMDUTF_TARGET_RVV + #else + #define SIMDUTF_TARGET_RVV SIMDUTF_TARGET_REGION("arch=+v") + #endif + #if !SIMDUTF_IS_ZVBB && SIMDUTF_HAS_ZVBB_INTRINSICS + #define SIMDUTF_TARGET_ZVBB SIMDUTF_TARGET_REGION("arch=+v,+zvbb") + #endif namespace simdutf { -namespace scalar { -namespace { -namespace utf32 { +namespace rvv {} // namespace rvv +} // namespace simdutf -inline simdutf_warn_unused bool validate(const char32_t *buf, size_t len) noexcept { - const uint32_t *data = reinterpret_cast(buf); - uint64_t pos = 0; - for(;pos < len; pos++) { - uint32_t word = data[pos]; - if(word > 0x10FFFF || (word >= 0xD800 && word <= 0xDFFF)) { - return false; - } - } - return true; -} +/* begin file src/simdutf/rvv/implementation.h */ +#ifndef SIMDUTF_RVV_IMPLEMENTATION_H +#define SIMDUTF_RVV_IMPLEMENTATION_H -inline simdutf_warn_unused result validate_with_errors(const char32_t *buf, size_t len) noexcept { - const uint32_t *data = reinterpret_cast(buf); - size_t pos = 0; - for(;pos < len; pos++) { - uint32_t word = data[pos]; - if(word > 0x10FFFF) { - return result(error_code::TOO_LARGE, pos); - } - if(word >= 0xD800 && word <= 0xDFFF) { - return result(error_code::SURROGATE, pos); - } - } - return result(error_code::SUCCESS, pos); -} -inline size_t utf8_length_from_utf32(const char32_t* buf, size_t len) { - // We are not BOM aware. - const uint32_t * p = reinterpret_cast(buf); - size_t counter{0}; - for(size_t i = 0; i < len; i++) { - // credit: @ttsugriy for the vectorizable approach - counter++; // ASCII - counter += static_cast(p[i] > 0x7F); // two-byte - counter += static_cast(p[i] > 0x7FF); // three-byte - counter += static_cast(p[i] > 0xFFFF); // four-bytes - } - return counter; -} +namespace simdutf { +namespace rvv { -inline size_t utf16_length_from_utf32(const char32_t* buf, size_t len) { - // We are not BOM aware. - const uint32_t * p = reinterpret_cast(buf); - size_t counter{0}; - for(size_t i = 0; i < len; i++) { - counter++; // non-surrogate word - counter += static_cast(p[i] > 0xFFFF); // surrogate pair - } - return counter; -} +namespace { +using namespace simdutf; +} // namespace -inline size_t latin1_length_from_utf32(size_t len) { - // We are not BOM aware. - return len; // a utf32 codepoint will always represent 1 latin1 character -} +class implementation final : public simdutf::implementation { +public: + simdutf_really_inline implementation() + : simdutf::implementation("rvv", "RISC-V Vector Extension", + internal::instruction_set::RVV), + _supports_zvbb(internal::detect_supported_architectures() & + internal::instruction_set::ZVBB) {} + simdutf_warn_unused int detect_encodings(const char *buf, + size_t len) const noexcept final; + simdutf_warn_unused bool validate_utf8(const char *buf, + size_t len) const noexcept final; + simdutf_warn_unused result + validate_utf8_with_errors(const char *buf, size_t len) const noexcept final; + simdutf_warn_unused bool validate_ascii(const char *buf, + size_t len) const noexcept final; + simdutf_warn_unused result + validate_ascii_with_errors(const char *buf, size_t len) const noexcept final; + simdutf_warn_unused bool validate_utf16le(const char16_t *buf, + size_t len) const noexcept final; + simdutf_warn_unused bool validate_utf16be(const char16_t *buf, + size_t len) const noexcept final; + simdutf_warn_unused result validate_utf16le_with_errors( + const char16_t *buf, size_t len) const noexcept final; + simdutf_warn_unused result validate_utf16be_with_errors( + const char16_t *buf, size_t len) const noexcept final; + simdutf_warn_unused bool validate_utf32(const char32_t *buf, + size_t len) const noexcept final; + simdutf_warn_unused result validate_utf32_with_errors( + const char32_t *buf, size_t len) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf8( + const char *buf, size_t len, char *utf8_output) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf16le( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf16be( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf32( + const char *buf, size_t len, char32_t *utf32_output) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_latin1_with_errors( + const char *buf, size_t len, char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_utf16le( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_utf16be( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_utf16le_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_utf16be_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_utf16le( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_utf16be( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_utf32( + const char *buf, size_t len, char32_t *utf32_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_utf32_with_errors( + const char *buf, size_t len, char32_t *utf32_output) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_utf32( + const char *buf, size_t len, char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16le_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16be_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16le_to_latin1_with_errors( + const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16be_to_latin1_with_errors( + const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16le_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16be_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16le_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16be_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused result convert_utf32_to_utf8_with_errors( + const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf32_to_latin1(const char32_t *buf, size_t len, + char *latin1_output) const noexcept final; + simdutf_warn_unused result + convert_utf32_to_latin1_with_errors(const char32_t *buf, size_t len, + char *latin1_output) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf32_to_latin1(const char32_t *buf, size_t len, + char *latin1_output) const noexcept final; + simdutf_warn_unused size_t + convert_utf32_to_utf16le(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf32_to_utf16be(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused result convert_utf32_to_utf16le_with_errors( + const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused result convert_utf32_to_utf16be_with_errors( + const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf32_to_utf16le(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf32_to_utf16be(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16le_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16be_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16le_to_utf32_with_errors( + const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16be_to_utf32_with_errors( + const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16le_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16be_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + void change_endianness_utf16(const char16_t *buf, size_t len, + char16_t *output) const noexcept final; + simdutf_warn_unused size_t count_utf16le(const char16_t *buf, + size_t len) const noexcept; + simdutf_warn_unused size_t count_utf16be(const char16_t *buf, + size_t len) const noexcept; + simdutf_warn_unused size_t count_utf8(const char *buf, + size_t len) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_utf16le(const char16_t *buf, size_t len) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_utf16be(const char16_t *buf, size_t len) const noexcept; + simdutf_warn_unused size_t + utf32_length_from_utf16le(const char16_t *buf, size_t len) const noexcept; + simdutf_warn_unused size_t + utf32_length_from_utf16be(const char16_t *buf, size_t len) const noexcept; + simdutf_warn_unused size_t utf16_length_from_utf8(const char *buf, + size_t len) const noexcept; + simdutf_warn_unused size_t utf8_length_from_utf32(const char32_t *buf, + size_t len) const noexcept; + simdutf_warn_unused size_t utf16_length_from_utf32(const char32_t *buf, + size_t len) const noexcept; + simdutf_warn_unused size_t utf32_length_from_utf8(const char *buf, + size_t len) const noexcept; + simdutf_warn_unused size_t latin1_length_from_utf8(const char *buf, + size_t len) const noexcept; + simdutf_warn_unused size_t + latin1_length_from_utf16(size_t len) const noexcept; + simdutf_warn_unused size_t + latin1_length_from_utf32(size_t len) const noexcept; + simdutf_warn_unused size_t + utf32_length_from_latin1(size_t len) const noexcept; + simdutf_warn_unused size_t + utf16_length_from_latin1(size_t len) const noexcept; + simdutf_warn_unused size_t utf8_length_from_latin1(const char *buf, + size_t len) const noexcept; + simdutf_warn_unused size_t maximal_binary_length_from_base64( + const char *input, size_t length) const noexcept; + simdutf_warn_unused result base64_to_binary( + const char *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_options = + last_chunk_handling_options::loose) const noexcept; + simdutf_warn_unused size_t maximal_binary_length_from_base64( + const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused result + base64_to_binary(const char16_t *input, size_t length, char *output, + base64_options options, + last_chunk_handling_options last_chunk_options = + last_chunk_handling_options::loose) const noexcept; + simdutf_warn_unused size_t base64_length_from_binary( + size_t length, base64_options options) const noexcept; + size_t binary_to_base64(const char *input, size_t length, char *output, + base64_options options) const noexcept; -inline simdutf_warn_unused uint32_t swap_bytes(const uint32_t word) { - return ((word >> 24) & 0xff) | // move byte 3 to byte 0 - ((word << 8) & 0xff0000) | // move byte 1 to byte 2 - ((word >> 8) & 0xff00) | // move byte 2 to byte 1 - ((word << 24) & 0xff000000); // byte 0 to byte 3 -} +private: + const bool _supports_zvbb; -} // utf32 namespace -} // unnamed namespace -} // namespace scalar +#if SIMDUTF_IS_ZVBB + bool supports_zvbb() const { return true; } +#elif SIMDUTF_HAS_ZVBB_INTRINSICS + bool supports_zvbb() const { return _supports_zvbb; } +#else + bool supports_zvbb() const { return false; } +#endif +}; + +} // namespace rvv } // namespace simdutf +#endif // SIMDUTF_RVV_IMPLEMENTATION_H +/* end file src/simdutf/rvv/implementation.h */ +/* begin file src/simdutf/rvv/begin.h */ +// redefining SIMDUTF_IMPLEMENTATION to "rvv" +// #define SIMDUTF_IMPLEMENTATION rvv + +#if SIMDUTF_CAN_ALWAYS_RUN_RVV +// nothing needed. +#else +SIMDUTF_TARGET_RVV #endif -/* end file src/scalar/utf32.h */ -/* begin file src/scalar/base64.h */ -#ifndef SIMDUTF_BASE64_H -#define SIMDUTF_BASE64_H +/* end file src/simdutf/rvv/begin.h */ +/* begin file src/simdutf/rvv/intrinsics.h */ +#ifndef SIMDUTF_RVV_INTRINSICS_H +#define SIMDUTF_RVV_INTRINSICS_H -#include -#include -#include -namespace simdutf { -namespace scalar { -namespace { -namespace base64 { -// This function is not expected to be fast. Do not use in long loops. -template -bool is_ascii_white_space(char_type c) { - return c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '\f'; +#include + +#if __riscv_v_intrinsic >= 1000000 || __GCC__ >= 14 + #define simdutf_vrgather_u8m1x2(tbl, idx) \ + __riscv_vcreate_v_u8m1_u8m2( \ + __riscv_vrgather_vv_u8m1(tbl, __riscv_vget_v_u8m2_u8m1(idx, 0), \ + __riscv_vsetvlmax_e8m1()), \ + __riscv_vrgather_vv_u8m1(tbl, __riscv_vget_v_u8m2_u8m1(idx, 1), \ + __riscv_vsetvlmax_e8m1())); + + #define simdutf_vrgather_u8m1x4(tbl, idx) \ + __riscv_vcreate_v_u8m1_u8m4( \ + __riscv_vrgather_vv_u8m1(tbl, __riscv_vget_v_u8m4_u8m1(idx, 0), \ + __riscv_vsetvlmax_e8m1()), \ + __riscv_vrgather_vv_u8m1(tbl, __riscv_vget_v_u8m4_u8m1(idx, 1), \ + __riscv_vsetvlmax_e8m1()), \ + __riscv_vrgather_vv_u8m1(tbl, __riscv_vget_v_u8m4_u8m1(idx, 2), \ + __riscv_vsetvlmax_e8m1()), \ + __riscv_vrgather_vv_u8m1(tbl, __riscv_vget_v_u8m4_u8m1(idx, 3), \ + __riscv_vsetvlmax_e8m1())); +#else + // This has worse codegen on gcc + #define simdutf_vrgather_u8m1x2(tbl, idx) \ + __riscv_vset_v_u8m1_u8m2( \ + __riscv_vlmul_ext_v_u8m1_u8m2(__riscv_vrgather_vv_u8m1( \ + tbl, __riscv_vget_v_u8m2_u8m1(idx, 0), __riscv_vsetvlmax_e8m1())), \ + 1, \ + __riscv_vrgather_vv_u8m1(tbl, __riscv_vget_v_u8m2_u8m1(idx, 1), \ + __riscv_vsetvlmax_e8m1())) + + #define simdutf_vrgather_u8m1x4(tbl, idx) \ + __riscv_vset_v_u8m1_u8m4( \ + __riscv_vset_v_u8m1_u8m4( \ + __riscv_vset_v_u8m1_u8m4( \ + __riscv_vlmul_ext_v_u8m1_u8m4(__riscv_vrgather_vv_u8m1( \ + tbl, __riscv_vget_v_u8m4_u8m1(idx, 0), \ + __riscv_vsetvlmax_e8m1())), \ + 1, \ + __riscv_vrgather_vv_u8m1(tbl, \ + __riscv_vget_v_u8m4_u8m1(idx, 1), \ + __riscv_vsetvlmax_e8m1())), \ + 2, \ + __riscv_vrgather_vv_u8m1(tbl, __riscv_vget_v_u8m4_u8m1(idx, 2), \ + __riscv_vsetvlmax_e8m1())), \ + 3, \ + __riscv_vrgather_vv_u8m1(tbl, __riscv_vget_v_u8m4_u8m1(idx, 3), \ + __riscv_vsetvlmax_e8m1())) +#endif + +/* Zvbb adds dedicated support for endianness swaps with vrev8, but if we can't + * use that, we have to emulate it with the standard V extension. + * Using LMUL=1 vrgathers could be faster than the srl+macc variant, but that + * would increase register pressure, and vrgather implementations performance + * varies a lot. */ +enum class simdutf_ByteFlip { NONE, V, ZVBB }; + +template +simdutf_really_inline static uint16_t simdutf_byteflip(uint16_t v) { + if (method != simdutf_ByteFlip::NONE) + return (uint16_t)((v * 1u) << 8 | (v * 1u) >> 8); + return v; } -template -bool is_eight_byte(char_type c) { - if(sizeof(char_type) == 1) { - return true; - } - return uint8_t(c) == c; +#ifdef SIMDUTF_TARGET_ZVBB +SIMDUTF_UNTARGET_REGION +SIMDUTF_TARGET_ZVBB +#endif + +template +simdutf_really_inline static vuint16m1_t simdutf_byteflip(vuint16m1_t v, + size_t vl) { +#if SIMDUTF_HAS_ZVBB_INTRINSICS + if (method == simdutf_ByteFlip::ZVBB) + return __riscv_vrev8_v_u16m1(v, vl); +#endif + if (method == simdutf_ByteFlip::V) + return __riscv_vmacc_vx_u16m1(__riscv_vsrl_vx_u16m1(v, 8, vl), 0x100, v, + vl); + return v; } -// Returns true upon success. The destination buffer must be large enough. -// This functions assumes that the padding (=) has been removed. -template -result base64_tail_decode(char *dst, const char_type *src, size_t length, base64_options options) { - // This looks like 5 branches, but we expect the compiler to resolve this to a single branch: - const uint8_t *to_base64 = (options & base64_url) ? tables::base64::to_base64_url_value : tables::base64::to_base64_value; - const uint32_t *d0 = (options & base64_url) ? tables::base64::base64_url::d0 : tables::base64::base64_default::d0; - const uint32_t *d1 = (options & base64_url) ? tables::base64::base64_url::d1 : tables::base64::base64_default::d1; - const uint32_t *d2 = (options & base64_url) ? tables::base64::base64_url::d2 : tables::base64::base64_default::d2; - const uint32_t *d3 = (options & base64_url) ? tables::base64::base64_url::d3 : tables::base64::base64_default::d3; +template +simdutf_really_inline static vuint16m2_t simdutf_byteflip(vuint16m2_t v, + size_t vl) { +#if SIMDUTF_HAS_ZVBB_INTRINSICS + if (method == simdutf_ByteFlip::ZVBB) + return __riscv_vrev8_v_u16m2(v, vl); +#endif + if (method == simdutf_ByteFlip::V) + return __riscv_vmacc_vx_u16m2(__riscv_vsrl_vx_u16m2(v, 8, vl), 0x100, v, + vl); + return v; +} - const char_type *srcend = src + length; - const char_type *srcinit = src; - const char *dstinit = dst; +template +simdutf_really_inline static vuint16m4_t simdutf_byteflip(vuint16m4_t v, + size_t vl) { +#if SIMDUTF_HAS_ZVBB_INTRINSICS + if (method == simdutf_ByteFlip::ZVBB) + return __riscv_vrev8_v_u16m4(v, vl); +#endif + if (method == simdutf_ByteFlip::V) + return __riscv_vmacc_vx_u16m4(__riscv_vsrl_vx_u16m4(v, 8, vl), 0x100, v, + vl); + return v; +} - uint32_t x; - size_t idx; - uint8_t buffer[4]; - while (true) { - while (src + 4 <= srcend && is_eight_byte(src[0]) && is_eight_byte(src[1]) && is_eight_byte(src[2]) && is_eight_byte(src[3]) && - (x = d0[uint8_t(src[0])] | d1[uint8_t(src[1])] | - d2[uint8_t(src[2])] | d3[uint8_t(src[3])]) < 0x01FFFFFF) { - if(match_system(endianness::BIG)) { - x = scalar::utf32::swap_bytes(x); - } - std::memcpy(dst, &x, 3); // optimization opportunity: copy 4 bytes - dst += 3; - src += 4; - } - idx = 0; - // we need at least four characters. - while (idx < 4 && src < srcend) { - char_type c = *src; - uint8_t code = to_base64[uint8_t(c)]; - buffer[idx] = uint8_t(code); - if (is_eight_byte(c) && code <= 63) { - idx++; - } else if (code > 64 || !scalar::base64::is_eight_byte(c)) { - return {INVALID_BASE64_CHARACTER, size_t(src - srcinit)}; - } else { - // We have a space or a newline. We ignore it. - } - src++; - } - if (idx != 4) { - if (idx == 2) { - uint32_t triple = - (uint32_t(buffer[0]) << 3 * 6) + (uint32_t(buffer[1]) << 2 * 6); - if(match_system(endianness::BIG)) { - triple <<= 8; - std::memcpy(dst, &triple, 1); - } else { - triple = scalar::utf32::swap_bytes(triple); - triple >>= 8; - std::memcpy(dst, &triple, 1); - } - dst += 1; - - } else if (idx == 3) { - uint32_t triple = (uint32_t(buffer[0]) << 3 * 6) + - (uint32_t(buffer[1]) << 2 * 6) + - (uint32_t(buffer[2]) << 1 * 6); - if(match_system(endianness::BIG)) { - triple <<= 8; - std::memcpy(dst, &triple, 2); - } else { - triple = scalar::utf32::swap_bytes(triple); - triple >>= 8; - std::memcpy(dst, &triple, 2); - } - dst += 2; - } else if (idx == 1) { - return {BASE64_INPUT_REMAINDER, size_t(dst - dstinit)}; - } - return {SUCCESS, size_t(dst - dstinit)}; - } - - uint32_t triple = - (uint32_t(buffer[0]) << 3 * 6) + (uint32_t(buffer[1]) << 2 * 6) + - (uint32_t(buffer[2]) << 1 * 6) + (uint32_t(buffer[3]) << 0 * 6); - if(match_system(endianness::BIG)) { - triple <<= 8; - std::memcpy(dst, &triple, 3); - } else { - triple = scalar::utf32::swap_bytes(triple); - triple >>= 8; - std::memcpy(dst, &triple, 3); - } - dst += 3; - } +template +simdutf_really_inline static vuint16m8_t simdutf_byteflip(vuint16m8_t v, + size_t vl) { +#if SIMDUTF_HAS_ZVBB_INTRINSICS + if (method == simdutf_ByteFlip::ZVBB) + return __riscv_vrev8_v_u16m8(v, vl); +#endif + if (method == simdutf_ByteFlip::V) + return __riscv_vmacc_vx_u16m8(__riscv_vsrl_vx_u16m8(v, 8, vl), 0x100, v, + vl); + return v; } -// like base64_tail_decode, but it will not write past the end of the output buffer. -// outlen is modified to reflect the number of bytes written. -// This functions assumes that the padding (=) has been removed. -template -result base64_tail_decode_safe(char *dst, size_t& outlen, const char_type *src, size_t length, base64_options options) { - if(length == 0) { - outlen = 0; - return {SUCCESS, 0}; - } - // This looks like 5 branches, but we expect the compiler to resolve this to a single branch: - const uint8_t *to_base64 = (options & base64_url) ? tables::base64::to_base64_url_value : tables::base64::to_base64_value; - const uint32_t *d0 = (options & base64_url) ? tables::base64::base64_url::d0 : tables::base64::base64_default::d0; - const uint32_t *d1 = (options & base64_url) ? tables::base64::base64_url::d1 : tables::base64::base64_default::d1; - const uint32_t *d2 = (options & base64_url) ? tables::base64::base64_url::d2 : tables::base64::base64_default::d2; - const uint32_t *d3 = (options & base64_url) ? tables::base64::base64_url::d3 : tables::base64::base64_default::d3; +#ifdef SIMDUTF_TARGET_ZVBB +SIMDUTF_UNTARGET_REGION +SIMDUTF_TARGET_RVV +#endif - const char_type *srcend = src + length; - const char_type *srcinit = src; - const char *dstinit = dst; - const char *dstend = dst + outlen; +#endif // SIMDUTF_RVV_INTRINSICS_H +/* end file src/simdutf/rvv/intrinsics.h */ +/* begin file src/simdutf/rvv/end.h */ +#if SIMDUTF_CAN_ALWAYS_RUN_RVV +// nothing needed. +#else +SIMDUTF_UNTARGET_REGION +#endif - uint32_t x; - size_t idx; - uint8_t buffer[4]; - while (true) { - while (src + 4 <= srcend && is_eight_byte(src[0]) && is_eight_byte(src[1]) && is_eight_byte(src[2]) && is_eight_byte(src[3]) && - (x = d0[uint8_t(src[0])] | d1[uint8_t(src[1])] | - d2[uint8_t(src[2])] | d3[uint8_t(src[3])]) < 0x01FFFFFF) { - if(match_system(endianness::BIG)) { - x = scalar::utf32::swap_bytes(x); - } - if(dstend - dst < 3) { - outlen = size_t(dst - dstinit); - return {OUTPUT_BUFFER_TOO_SMALL, size_t(src - srcinit)}; - } - std::memcpy(dst, &x, 3); // optimization opportunity: copy 4 bytes - dst += 3; - src += 4; - } - idx = 0; - const char_type *srccur = src; +/* end file src/simdutf/rvv/end.h */ - // we need at least four characters. - while (idx < 4 && src < srcend) { - char_type c = *src; - uint8_t code = to_base64[uint8_t(c)]; - buffer[idx] = uint8_t(code); - if (is_eight_byte(c) && code <= 63) { - idx++; - } else if (code > 64 || !scalar::base64::is_eight_byte(c)) { - outlen = size_t(dst - dstinit); - return {INVALID_BASE64_CHARACTER, size_t(src - srcinit)}; - } else { - // We have a space or a newline. We ignore it. - } - src++; - } - if (idx != 4) { - if (idx == 2) { - if(dst == dstend) { - outlen = size_t(dst - dstinit); - return {OUTPUT_BUFFER_TOO_SMALL, size_t(srccur - srcinit)}; - } - uint32_t triple = - (uint32_t(buffer[0]) << 3 * 6) + (uint32_t(buffer[1]) << 2 * 6); - if(match_system(endianness::BIG)) { - triple <<= 8; - std::memcpy(dst, &triple, 1); - } else { - triple = scalar::utf32::swap_bytes(triple); - triple >>= 8; - std::memcpy(dst, &triple, 1); - } - dst += 1; +#endif // SIMDUTF_IMPLEMENTATION_RVV - } else if (idx == 3) { - if(dstend - dst < 2) { - outlen = size_t(dst - dstinit); - return {OUTPUT_BUFFER_TOO_SMALL, size_t(srccur - srcinit)}; - } - uint32_t triple = (uint32_t(buffer[0]) << 3 * 6) + - (uint32_t(buffer[1]) << 2 * 6) + - (uint32_t(buffer[2]) << 1 * 6); - if(match_system(endianness::BIG)) { - triple <<= 8; - std::memcpy(dst, &triple, 2); - } else { - triple = scalar::utf32::swap_bytes(triple); - triple >>= 8; - std::memcpy(dst, &triple, 2); - } - dst += 2; - } else if (idx == 1) { - outlen = size_t(dst - dstinit); - return {BASE64_INPUT_REMAINDER, size_t(dst - dstinit)}; - } - outlen = size_t(dst - dstinit); - return {SUCCESS, size_t(dst - dstinit)}; - } - if(dstend - dst < 3) { - outlen = size_t(dst - dstinit); - return {OUTPUT_BUFFER_TOO_SMALL, size_t(srccur - srcinit)}; - } - uint32_t triple = - (uint32_t(buffer[0]) << 3 * 6) + (uint32_t(buffer[1]) << 2 * 6) + - (uint32_t(buffer[2]) << 1 * 6) + (uint32_t(buffer[3]) << 0 * 6); - if(match_system(endianness::BIG)) { - triple <<= 8; - std::memcpy(dst, &triple, 3); - } else { - triple = scalar::utf32::swap_bytes(triple); - triple >>= 8; - std::memcpy(dst, &triple, 3); - } - dst += 3; - } -} +#endif // SIMDUTF_RVV_H +/* end file src/simdutf/rvv.h */ +/* begin file src/simdutf/fallback.h */ +#ifndef SIMDUTF_FALLBACK_H +#define SIMDUTF_FALLBACK_H -// Returns the number of bytes written. The destination buffer must be large -// enough. It will add padding (=) if needed. -size_t tail_encode_base64(char *dst, const char *src, size_t srclen, base64_options options) { - // By default, we use padding if we are not using the URL variant. - // This is check with ((options & base64_url) == 0) which returns true if we are not using the URL variant. - // However, we also allow 'inversion' of the convention with the base64_reverse_padding option. - // If the base64_reverse_padding option is set, we use padding if we are using the URL variant, - // and we omit it if we are not using the URL variant. This is checked with - // ((options & base64_reverse_padding) == base64_reverse_padding). - bool use_padding = ((options & base64_url) == 0) ^ ((options & base64_reverse_padding) == base64_reverse_padding); - // This looks like 3 branches, but we expect the compiler to resolve this to a single branch: - const char *e0 = (options & base64_url) ? tables::base64::base64_url::e0 : tables::base64::base64_default::e0; - const char *e1 = (options & base64_url) ? tables::base64::base64_url::e1 : tables::base64::base64_default::e1; - const char *e2 = (options & base64_url) ? tables::base64::base64_url::e2 : tables::base64::base64_default::e2; - char *out = dst; - size_t i = 0; - uint8_t t1, t2, t3; - for (; i + 2 < srclen; i += 3) { - t1 = uint8_t(src[i]); - t2 = uint8_t(src[i + 1]); - t3 = uint8_t(src[i + 2]); - *out++ = e0[t1]; - *out++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)]; - *out++ = e1[((t2 & 0x0F) << 2) | ((t3 >> 6) & 0x03)]; - *out++ = e2[t3]; - } - switch (srclen - i) { - case 0: - break; - case 1: - t1 = uint8_t(src[i]); - *out++ = e0[t1]; - *out++ = e1[(t1 & 0x03) << 4]; - if(use_padding) { - *out++ = '='; - *out++ = '='; - } - break; - default: /* case 2 */ - t1 = uint8_t(src[i]); - t2 = uint8_t(src[i + 1]); - *out++ = e0[t1]; - *out++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)]; - *out++ = e2[(t2 & 0x0F) << 2]; - if(use_padding) { - *out++ = '='; - } - } - return (size_t)(out - dst); -} -template -simdutf_warn_unused size_t maximal_binary_length_from_base64(const char_type * input, size_t length) noexcept { - // We follow https://infra.spec.whatwg.org/#forgiving-base64-decode - size_t padding = 0; - if(length > 0) { - if(input[length - 1] == '=') { - padding++; - if(length > 1 && input[length - 2] == '=') { - padding++; - } - } - } - size_t actual_length = length - padding; - if(actual_length % 4 <= 1) { - return actual_length / 4 * 3; - } - // if we have a valid input, then the remainder must be 2 or 3 adding one or two extra bytes. - return actual_length / 4 * 3 + (actual_length %4) - 1; -} +// Note that fallback.h is always imported last. -simdutf_warn_unused size_t base64_length_from_binary(size_t length, base64_options options) noexcept { - // By default, we use padding if we are not using the URL variant. - // This is check with ((options & base64_url) == 0) which returns true if we are not using the URL variant. - // However, we also allow 'inversion' of the convention with the base64_reverse_padding option. - // If the base64_reverse_padding option is set, we use padding if we are using the URL variant, - // and we omit it if we are not using the URL variant. This is checked with - // ((options & base64_reverse_padding) == base64_reverse_padding). - bool use_padding = ((options & base64_url) == 0) ^ ((options & base64_reverse_padding) == base64_reverse_padding); - if(!use_padding) { - return length/3 * 4 + ((length % 3) ? (length % 3) + 1 : 0); - } - return (length + 2)/3 * 4; // We use padding to make the length a multiple of 4. -} +// Default Fallback to on unless a builtin implementation has already been +// selected. +#ifndef SIMDUTF_IMPLEMENTATION_FALLBACK + #if SIMDUTF_CAN_ALWAYS_RUN_ARM64 || SIMDUTF_CAN_ALWAYS_RUN_ICELAKE || \ + SIMDUTF_CAN_ALWAYS_RUN_HASWELL || SIMDUTF_CAN_ALWAYS_RUN_WESTMERE || \ + SIMDUTF_CAN_ALWAYS_RUN_PPC64 || SIMDUTF_CAN_ALWAYS_RUN_RVV + #define SIMDUTF_IMPLEMENTATION_FALLBACK 0 + #else + #define SIMDUTF_IMPLEMENTATION_FALLBACK 1 + #endif +#endif -} // namespace base64 -} // unnamed namespace -} // namespace scalar -} // namespace simdutf +#define SIMDUTF_CAN_ALWAYS_RUN_FALLBACK (SIMDUTF_IMPLEMENTATION_FALLBACK) -#endif -/* end file src/scalar/base64.h */ -/* begin file src/scalar/latin1_to_utf8/latin1_to_utf8.h */ -#ifndef SIMDUTF_LATIN1_TO_UTF8_H -#define SIMDUTF_LATIN1_TO_UTF8_H +#if SIMDUTF_IMPLEMENTATION_FALLBACK namespace simdutf { -namespace scalar { -namespace { -namespace latin1_to_utf8 { +/** + * Fallback implementation (runs on any machine). + */ +namespace fallback {} // namespace fallback +} // namespace simdutf -inline size_t convert(const char* buf, size_t len, char* utf8_output) { - const unsigned char *data = reinterpret_cast(buf); - size_t pos = 0; - size_t utf8_pos = 0; - while (pos < len) { - // try to convert the next block of 16 ASCII bytes - if (pos + 16 <= len) { // if it is safe to read 16 more bytes, check that they are ascii - uint64_t v1; - ::memcpy(&v1, data + pos, sizeof(uint64_t)); - uint64_t v2; - ::memcpy(&v2, data + pos + sizeof(uint64_t), sizeof(uint64_t)); - uint64_t v{v1 | v2}; // We are only interested in these bits: 1000 1000 1000 1000, so it makes sense to concatenate everything - if ((v & 0x8080808080808080) == 0) { // if NONE of these are set, e.g. all of them are zero, then everything is ASCII - size_t final_pos = pos + 16; - while(pos < final_pos) { - utf8_output[utf8_pos++] = char(buf[pos]); - pos++; - } - continue; - } - } +/* begin file src/simdutf/fallback/implementation.h */ +#ifndef SIMDUTF_FALLBACK_IMPLEMENTATION_H +#define SIMDUTF_FALLBACK_IMPLEMENTATION_H - unsigned char byte = data[pos]; - if((byte & 0x80) == 0) { // if ASCII - // will generate one UTF-8 bytes - utf8_output[utf8_pos++] = char(byte); - pos++; - } else { - // will generate two UTF-8 bytes - utf8_output[utf8_pos++] = char((byte>>6) | 0b11000000); - utf8_output[utf8_pos++] = char((byte & 0b111111) | 0b10000000); - pos++; - } - } - return utf8_pos; + +namespace simdutf { +namespace fallback { + +namespace { +using namespace simdutf; } -inline size_t convert_safe(const char* buf, size_t len, char* utf8_output, size_t utf8_len) { - const unsigned char *data = reinterpret_cast(buf); - size_t pos = 0; - size_t skip_pos = 0; - size_t utf8_pos = 0; - while (pos < len && utf8_pos < utf8_len) { - // try to convert the next block of 16 ASCII bytes - if (pos >= skip_pos && pos + 16 <= len && utf8_pos + 16 <= utf8_len) { // if it is safe to read 16 more bytes, check that they are ascii +class implementation final : public simdutf::implementation { +public: + simdutf_really_inline implementation() + : simdutf::implementation("fallback", "Generic fallback implementation", + 0) {} + simdutf_warn_unused int detect_encodings(const char *input, + size_t length) const noexcept final; + simdutf_warn_unused bool validate_utf8(const char *buf, + size_t len) const noexcept final; + simdutf_warn_unused result + validate_utf8_with_errors(const char *buf, size_t len) const noexcept final; + simdutf_warn_unused bool validate_ascii(const char *buf, + size_t len) const noexcept final; + simdutf_warn_unused result + validate_ascii_with_errors(const char *buf, size_t len) const noexcept final; + simdutf_warn_unused bool validate_utf16le(const char16_t *buf, + size_t len) const noexcept final; + simdutf_warn_unused bool validate_utf16be(const char16_t *buf, + size_t len) const noexcept final; + simdutf_warn_unused result validate_utf16le_with_errors( + const char16_t *buf, size_t len) const noexcept final; + simdutf_warn_unused result validate_utf16be_with_errors( + const char16_t *buf, size_t len) const noexcept final; + simdutf_warn_unused bool validate_utf32(const char32_t *buf, + size_t len) const noexcept final; + simdutf_warn_unused result validate_utf32_with_errors( + const char32_t *buf, size_t len) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf8( + const char *buf, size_t len, char *utf8_output) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf16le( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf16be( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_latin1_to_utf32( + const char *buf, size_t len, char32_t *utf32_output) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_latin1_with_errors( + const char *buf, size_t len, char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_utf16le( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_utf16be( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_utf16le_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_utf16be_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_utf16le( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_utf16be( + const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf8_to_utf32( + const char *buf, size_t len, char32_t *utf32_output) const noexcept final; + simdutf_warn_unused result convert_utf8_to_utf32_with_errors( + const char *buf, size_t len, char32_t *utf32_output) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf8_to_utf32( + const char *buf, size_t len, char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16le_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16be_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16le_to_latin1_with_errors( + const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16be_to_latin1_with_errors( + const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16le_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16be_to_latin1(const char16_t *buf, size_t len, + char *latin1_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16le_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16be_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused result convert_utf32_to_utf8_with_errors( + const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t convert_valid_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf32_to_latin1(const char32_t *buf, size_t len, + char *latin1_output) const noexcept final; + simdutf_warn_unused result + convert_utf32_to_latin1_with_errors(const char32_t *buf, size_t len, + char *latin1_output) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf32_to_latin1(const char32_t *buf, size_t len, + char *latin1_output) const noexcept final; + simdutf_warn_unused size_t + convert_utf32_to_utf16le(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf32_to_utf16be(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused result convert_utf32_to_utf16le_with_errors( + const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused result convert_utf32_to_utf16be_with_errors( + const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf32_to_utf16le(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf32_to_utf16be(const char32_t *buf, size_t len, + char16_t *utf16_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16le_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_utf16be_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16le_to_utf32_with_errors( + const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused result convert_utf16be_to_utf32_with_errors( + const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16le_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + simdutf_warn_unused size_t + convert_valid_utf16be_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_buffer) const noexcept final; + void change_endianness_utf16(const char16_t *buf, size_t length, + char16_t *output) const noexcept final; + simdutf_warn_unused size_t count_utf16le(const char16_t *buf, + size_t length) const noexcept; + simdutf_warn_unused size_t count_utf16be(const char16_t *buf, + size_t length) const noexcept; + simdutf_warn_unused size_t count_utf8(const char *buf, + size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_utf16le(const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_utf16be(const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t utf32_length_from_utf16le( + const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t utf32_length_from_utf16be( + const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf16_length_from_utf8(const char *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_utf32(const char32_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf16_length_from_utf32(const char32_t *input, size_t length) const noexcept; + simdutf_warn_unused size_t + utf32_length_from_utf8(const char *input, size_t length) const noexcept; + simdutf_warn_unused size_t + latin1_length_from_utf8(const char *input, size_t length) const noexcept; + simdutf_warn_unused size_t + latin1_length_from_utf16(size_t length) const noexcept; + simdutf_warn_unused size_t + latin1_length_from_utf32(size_t length) const noexcept; + simdutf_warn_unused size_t + utf32_length_from_latin1(size_t length) const noexcept; + simdutf_warn_unused size_t + utf16_length_from_latin1(size_t length) const noexcept; + simdutf_warn_unused size_t + utf8_length_from_latin1(const char *input, size_t length) const noexcept; + simdutf_warn_unused size_t maximal_binary_length_from_base64( + const char *input, size_t length) const noexcept; + simdutf_warn_unused result base64_to_binary( + const char *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_options) const noexcept; + simdutf_warn_unused size_t maximal_binary_length_from_base64( + const char16_t *input, size_t length) const noexcept; + simdutf_warn_unused result base64_to_binary( + const char16_t *input, size_t length, char *output, + base64_options options, + last_chunk_handling_options last_chunk_options) const noexcept; + simdutf_warn_unused size_t base64_length_from_binary( + size_t length, base64_options options) const noexcept; + size_t binary_to_base64(const char *input, size_t length, char *output, + base64_options options) const noexcept; +}; +} // namespace fallback +} // namespace simdutf + +#endif // SIMDUTF_FALLBACK_IMPLEMENTATION_H +/* end file src/simdutf/fallback/implementation.h */ + +/* begin file src/simdutf/fallback/begin.h */ +// redefining SIMDUTF_IMPLEMENTATION to "fallback" +// #define SIMDUTF_IMPLEMENTATION fallback +/* end file src/simdutf/fallback/begin.h */ + + // Declarations +/* begin file src/simdutf/fallback/bitmanipulation.h */ +#ifndef SIMDUTF_FALLBACK_BITMANIPULATION_H +#define SIMDUTF_FALLBACK_BITMANIPULATION_H + +#include + +namespace simdutf { +namespace fallback { +namespace {} // unnamed namespace +} // namespace fallback +} // namespace simdutf + +#endif // SIMDUTF_FALLBACK_BITMANIPULATION_H +/* end file src/simdutf/fallback/bitmanipulation.h */ + +/* begin file src/simdutf/fallback/end.h */ +/* end file src/simdutf/fallback/end.h */ + +#endif // SIMDUTF_IMPLEMENTATION_FALLBACK +#endif // SIMDUTF_FALLBACK_H +/* end file src/simdutf/fallback.h */ + +/* begin file src/scalar/utf8.h */ +#ifndef SIMDUTF_UTF8_H +#define SIMDUTF_UTF8_H + +namespace simdutf { +namespace scalar { +namespace { +namespace utf8 { +#if SIMDUTF_IMPLEMENTATION_FALLBACK || SIMDUTF_IMPLEMENTATION_RVV +// only used by the fallback kernel. +// credit: based on code from Google Fuchsia (Apache Licensed) +inline simdutf_warn_unused bool validate(const char *buf, size_t len) noexcept { + const uint8_t *data = reinterpret_cast(buf); + uint64_t pos = 0; + uint32_t code_point = 0; + while (pos < len) { + // check of the next 16 bytes are ascii. + uint64_t next_pos = pos + 16; + if (next_pos <= + len) { // if it is safe to read 16 more bytes, check that they are ascii uint64_t v1; - ::memcpy(&v1, data + pos, sizeof(uint64_t)); + std::memcpy(&v1, data + pos, sizeof(uint64_t)); uint64_t v2; - ::memcpy(&v2, data + pos + sizeof(uint64_t), sizeof(uint64_t)); - uint64_t v{v1 | v2}; // We are only interested in these bits: 1000 1000 1000 1000, so it makes sense to concatenate everything - if ((v & 0x8080808080808080) == 0) { // if NONE of these are set, e.g. all of them are zero, then everything is ASCII - ::memcpy(utf8_output + utf8_pos, buf + pos, 16); - utf8_pos += 16; - pos += 16; - } else { - // At least one of the next 16 bytes are not ASCII, we will process them one by one - skip_pos = pos + 16; + std::memcpy(&v2, data + pos + sizeof(uint64_t), sizeof(uint64_t)); + uint64_t v{v1 | v2}; + if ((v & 0x8080808080808080) == 0) { + pos = next_pos; + continue; + } + } + unsigned char byte = data[pos]; + + while (byte < 0b10000000) { + if (++pos == len) { + return true; + } + byte = data[pos]; + } + + if ((byte & 0b11100000) == 0b11000000) { + next_pos = pos + 2; + if (next_pos > len) { + return false; + } + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return false; + } + // range check + code_point = (byte & 0b00011111) << 6 | (data[pos + 1] & 0b00111111); + if ((code_point < 0x80) || (0x7ff < code_point)) { + return false; + } + } else if ((byte & 0b11110000) == 0b11100000) { + next_pos = pos + 3; + if (next_pos > len) { + return false; + } + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return false; + } + if ((data[pos + 2] & 0b11000000) != 0b10000000) { + return false; + } + // range check + code_point = (byte & 0b00001111) << 12 | + (data[pos + 1] & 0b00111111) << 6 | + (data[pos + 2] & 0b00111111); + if ((code_point < 0x800) || (0xffff < code_point) || + (0xd7ff < code_point && code_point < 0xe000)) { + return false; + } + } else if ((byte & 0b11111000) == 0b11110000) { // 0b11110000 + next_pos = pos + 4; + if (next_pos > len) { + return false; + } + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return false; + } + if ((data[pos + 2] & 0b11000000) != 0b10000000) { + return false; + } + if ((data[pos + 3] & 0b11000000) != 0b10000000) { + return false; + } + // range check + code_point = + (byte & 0b00000111) << 18 | (data[pos + 1] & 0b00111111) << 12 | + (data[pos + 2] & 0b00111111) << 6 | (data[pos + 3] & 0b00111111); + if (code_point <= 0xffff || 0x10ffff < code_point) { + return false; } } else { - const auto byte = data[pos]; - if((byte & 0x80) == 0) { // if ASCII - // will generate one UTF-8 bytes - utf8_output[utf8_pos++] = char(byte); - pos++; - } else if (utf8_pos + 2 <= utf8_len) { - // will generate two UTF-8 bytes - utf8_output[utf8_pos++] = char((byte>>6) | 0b11000000); - utf8_output[utf8_pos++] = char((byte & 0b111111) | 0b10000000); - pos++; + // we may have a continuation + return false; + } + pos = next_pos; + } + return true; +} +#endif + +inline simdutf_warn_unused result validate_with_errors(const char *buf, + size_t len) noexcept { + const uint8_t *data = reinterpret_cast(buf); + size_t pos = 0; + uint32_t code_point = 0; + while (pos < len) { + // check of the next 16 bytes are ascii. + size_t next_pos = pos + 16; + if (next_pos <= + len) { // if it is safe to read 16 more bytes, check that they are ascii + uint64_t v1; + std::memcpy(&v1, data + pos, sizeof(uint64_t)); + uint64_t v2; + std::memcpy(&v2, data + pos + sizeof(uint64_t), sizeof(uint64_t)); + uint64_t v{v1 | v2}; + if ((v & 0x8080808080808080) == 0) { + pos = next_pos; + continue; + } + } + unsigned char byte = data[pos]; + + while (byte < 0b10000000) { + if (++pos == len) { + return result(error_code::SUCCESS, len); + } + byte = data[pos]; + } + + if ((byte & 0b11100000) == 0b11000000) { + next_pos = pos + 2; + if (next_pos > len) { + return result(error_code::TOO_SHORT, pos); + } + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return result(error_code::TOO_SHORT, pos); + } + // range check + code_point = (byte & 0b00011111) << 6 | (data[pos + 1] & 0b00111111); + if ((code_point < 0x80) || (0x7ff < code_point)) { + return result(error_code::OVERLONG, pos); + } + } else if ((byte & 0b11110000) == 0b11100000) { + next_pos = pos + 3; + if (next_pos > len) { + return result(error_code::TOO_SHORT, pos); + } + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return result(error_code::TOO_SHORT, pos); + } + if ((data[pos + 2] & 0b11000000) != 0b10000000) { + return result(error_code::TOO_SHORT, pos); + } + // range check + code_point = (byte & 0b00001111) << 12 | + (data[pos + 1] & 0b00111111) << 6 | + (data[pos + 2] & 0b00111111); + if ((code_point < 0x800) || (0xffff < code_point)) { + return result(error_code::OVERLONG, pos); + } + if (0xd7ff < code_point && code_point < 0xe000) { + return result(error_code::SURROGATE, pos); + } + } else if ((byte & 0b11111000) == 0b11110000) { // 0b11110000 + next_pos = pos + 4; + if (next_pos > len) { + return result(error_code::TOO_SHORT, pos); + } + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return result(error_code::TOO_SHORT, pos); + } + if ((data[pos + 2] & 0b11000000) != 0b10000000) { + return result(error_code::TOO_SHORT, pos); + } + if ((data[pos + 3] & 0b11000000) != 0b10000000) { + return result(error_code::TOO_SHORT, pos); + } + // range check + code_point = + (byte & 0b00000111) << 18 | (data[pos + 1] & 0b00111111) << 12 | + (data[pos + 2] & 0b00111111) << 6 | (data[pos + 3] & 0b00111111); + if (code_point <= 0xffff) { + return result(error_code::OVERLONG, pos); + } + if (0x10ffff < code_point) { + return result(error_code::TOO_LARGE, pos); + } + } else { + // we either have too many continuation bytes or an invalid leading byte + if ((byte & 0b11000000) == 0b10000000) { + return result(error_code::TOO_LONG, pos); } else { - break; + return result(error_code::HEADER_BITS, pos); } } + pos = next_pos; } - return utf8_pos; + return result(error_code::SUCCESS, len); } -} // latin1_to_utf8 namespace -} // unnamed namespace -} // namespace scalar -} // namespace simdutf +// Finds the previous leading byte starting backward from buf and validates with +// errors from there Used to pinpoint the location of an error when an invalid +// chunk is detected We assume that the stream starts with a leading byte, and +// to check that it is the case, we ask that you pass a pointer to the start of +// the stream (start). +inline simdutf_warn_unused result rewind_and_validate_with_errors( + const char *start, const char *buf, size_t len) noexcept { + // First check that we start with a leading byte + if ((*start & 0b11000000) == 0b10000000) { + return result(error_code::TOO_LONG, 0); + } + size_t extra_len{0}; + // A leading byte cannot be further than 4 bytes away + for (int i = 0; i < 5; i++) { + unsigned char byte = *buf; + if ((byte & 0b11000000) != 0b10000000) { + break; + } else { + buf--; + extra_len++; + } + } -#endif -/* end file src/scalar/latin1_to_utf8/latin1_to_utf8.h */ + result res = validate_with_errors(buf, len + extra_len); + res.count -= extra_len; + return res; +} -namespace simdutf { -bool implementation::supported_by_runtime_system() const { - uint32_t required_instruction_sets = this->required_instruction_sets(); - uint32_t supported_instruction_sets = internal::detect_supported_architectures(); - return ((supported_instruction_sets & required_instruction_sets) == required_instruction_sets); -} - -simdutf_warn_unused encoding_type implementation::autodetect_encoding(const char * input, size_t length) const noexcept { - // If there is a BOM, then we trust it. - auto bom_encoding = simdutf::BOM::check_bom(input, length); - if(bom_encoding != encoding_type::unspecified) { return bom_encoding; } - // UTF8 is common, it includes ASCII, and is commonly represented - // without a BOM, so if it fits, go with that. Note that it is still - // possible to get it wrong, we are only 'guessing'. If some has UTF-16 - // data without a BOM, it could pass as UTF-8. - // - // An interesting twist might be to check for UTF-16 ASCII first (every - // other byte is zero). - if(validate_utf8(input, length)) { return encoding_type::UTF8; } - // The next most common encoding that might appear without BOM is probably - // UTF-16LE, so try that next. - if((length % 2) == 0) { - // important: we need to divide by two - if(validate_utf16le(reinterpret_cast(input), length/2)) { return encoding_type::UTF16_LE; } - } - if((length % 4) == 0) { - if(validate_utf32(reinterpret_cast(input), length/4)) { return encoding_type::UTF32_LE; } +inline size_t count_code_points(const char *buf, size_t len) { + const int8_t *p = reinterpret_cast(buf); + size_t counter{0}; + for (size_t i = 0; i < len; i++) { + // -65 is 0b10111111, anything larger in two-complement's should start a new + // code point. + if (p[i] > -65) { + counter++; } - return encoding_type::unspecified; + } + return counter; } -namespace internal { -// When there is a single implementation, we should not pay a price - // for dispatching to the best implementation. We should just use the - // one we have. This is a compile-time check. - #define SIMDUTF_SINGLE_IMPLEMENTATION (SIMDUTF_IMPLEMENTATION_ICELAKE \ - + SIMDUTF_IMPLEMENTATION_HASWELL + SIMDUTF_IMPLEMENTATION_WESTMERE \ - + SIMDUTF_IMPLEMENTATION_ARM64 + SIMDUTF_IMPLEMENTATION_PPC64 \ - + SIMDUTF_IMPLEMENTATION_FALLBACK == 1) +inline size_t utf16_length_from_utf8(const char *buf, size_t len) { + const int8_t *p = reinterpret_cast(buf); + size_t counter{0}; + for (size_t i = 0; i < len; i++) { + if (p[i] > -65) { + counter++; + } + if (uint8_t(p[i]) >= 240) { + counter++; + } + } + return counter; +} -// Static array of known implementations. We are hoping these get baked into the executable -// without requiring a static initializer. +simdutf_warn_unused inline size_t trim_partial_utf8(const char *input, + size_t length) { + if (length < 3) { + switch (length) { + case 2: + if (uint8_t(input[length - 1]) >= 0xc0) { + return length - 1; + } // 2-, 3- and 4-byte characters with only 1 byte left + if (uint8_t(input[length - 2]) >= 0xe0) { + return length - 2; + } // 3- and 4-byte characters with only 2 bytes left + return length; + case 1: + if (uint8_t(input[length - 1]) >= 0xc0) { + return length - 1; + } // 2-, 3- and 4-byte characters with only 1 byte left + return length; + case 0: + return length; + } + } + if (uint8_t(input[length - 1]) >= 0xc0) { + return length - 1; + } // 2-, 3- and 4-byte characters with only 1 byte left + if (uint8_t(input[length - 2]) >= 0xe0) { + return length - 2; + } // 3- and 4-byte characters with only 1 byte left + if (uint8_t(input[length - 3]) >= 0xf0) { + return length - 3; + } // 4-byte characters with only 3 bytes left + return length; +} +} // namespace utf8 +} // unnamed namespace +} // namespace scalar +} // namespace simdutf -#if SIMDUTF_IMPLEMENTATION_ICELAKE -static const icelake::implementation* get_icelake_singleton() { - static const icelake::implementation icelake_singleton{}; - return &icelake_singleton; -} -#endif -#if SIMDUTF_IMPLEMENTATION_HASWELL -static const haswell::implementation* get_haswell_singleton() { - static const haswell::implementation haswell_singleton{}; - return &haswell_singleton; -} -#endif -#if SIMDUTF_IMPLEMENTATION_WESTMERE -static const westmere::implementation* get_westmere_singleton() { - static const westmere::implementation westmere_singleton{}; - return &westmere_singleton; -} -#endif -#if SIMDUTF_IMPLEMENTATION_ARM64 -static const arm64::implementation* get_arm64_singleton() { - static const arm64::implementation arm64_singleton{}; - return &arm64_singleton; -} -#endif -#if SIMDUTF_IMPLEMENTATION_PPC64 -static const ppc64::implementation* get_ppc64_singleton() { - static const ppc64::implementation ppc64_singleton{}; - return &ppc64_singleton; -} -#endif -#if SIMDUTF_IMPLEMENTATION_RVV -static const rvv::implementation* get_rvv_singleton() { - static const rvv::implementation rvv_singleton{}; - return &rvv_singleton; -} -#endif -#if SIMDUTF_IMPLEMENTATION_FALLBACK -static const fallback::implementation* get_fallback_singleton() { - static const fallback::implementation fallback_singleton{}; - return &fallback_singleton; -} -#endif - -#if SIMDUTF_SINGLE_IMPLEMENTATION -static const implementation* get_single_implementation() { - return -#if SIMDUTF_IMPLEMENTATION_ICELAKE - get_icelake_singleton(); -#endif -#if SIMDUTF_IMPLEMENTATION_HASWELL - get_haswell_singleton(); -#endif -#if SIMDUTF_IMPLEMENTATION_WESTMERE - get_westmere_singleton(); -#endif -#if SIMDUTF_IMPLEMENTATION_ARM64 - get_arm64_singleton(); -#endif -#if SIMDUTF_IMPLEMENTATION_PPC64 - get_ppc64_singleton(); -#endif -#if SIMDUTF_IMPLEMENTATION_FALLBACK - get_fallback_singleton(); -#endif -} #endif +/* end file src/scalar/utf8.h */ +/* begin file src/scalar/utf16.h */ +#ifndef SIMDUTF_UTF16_H +#define SIMDUTF_UTF16_H -/** - * @private Detects best supported implementation on first use, and sets it - */ -class detect_best_supported_implementation_on_first_use final : public implementation { -public: - std::string name() const noexcept final { return set_best()->name(); } - std::string description() const noexcept final { return set_best()->description(); } - uint32_t required_instruction_sets() const noexcept final { return set_best()->required_instruction_sets(); } - - simdutf_warn_unused int detect_encodings(const char * input, size_t length) const noexcept override { - return set_best()->detect_encodings(input, length); - } - - simdutf_warn_unused bool validate_utf8(const char * buf, size_t len) const noexcept final override { - return set_best()->validate_utf8(buf, len); - } - - simdutf_warn_unused result validate_utf8_with_errors(const char * buf, size_t len) const noexcept final override { - return set_best()->validate_utf8_with_errors(buf, len); - } - - simdutf_warn_unused bool validate_ascii(const char * buf, size_t len) const noexcept final override { - return set_best()->validate_ascii(buf, len); - } - - simdutf_warn_unused result validate_ascii_with_errors(const char * buf, size_t len) const noexcept final override { - return set_best()->validate_ascii_with_errors(buf, len); - } - - simdutf_warn_unused bool validate_utf16le(const char16_t * buf, size_t len) const noexcept final override { - return set_best()->validate_utf16le(buf, len); - } +namespace simdutf { +namespace scalar { +namespace { +namespace utf16 { - simdutf_warn_unused bool validate_utf16be(const char16_t * buf, size_t len) const noexcept final override { - return set_best()->validate_utf16be(buf, len); - } +inline simdutf_warn_unused uint16_t swap_bytes(const uint16_t word) { + return uint16_t((word >> 8) | (word << 8)); +} - simdutf_warn_unused result validate_utf16le_with_errors(const char16_t * buf, size_t len) const noexcept final override { - return set_best()->validate_utf16le_with_errors(buf, len); +template +inline simdutf_warn_unused bool validate(const char16_t *buf, + size_t len) noexcept { + const uint16_t *data = reinterpret_cast(buf); + uint64_t pos = 0; + while (pos < len) { + uint16_t word = + !match_system(big_endian) ? swap_bytes(data[pos]) : data[pos]; + if ((word & 0xF800) == 0xD800) { + if (pos + 1 >= len) { + return false; + } + uint16_t diff = uint16_t(word - 0xD800); + if (diff > 0x3FF) { + return false; + } + uint16_t next_word = + !match_system(big_endian) ? swap_bytes(data[pos + 1]) : data[pos + 1]; + uint16_t diff2 = uint16_t(next_word - 0xDC00); + if (diff2 > 0x3FF) { + return false; + } + pos += 2; + } else { + pos++; + } } + return true; +} - simdutf_warn_unused result validate_utf16be_with_errors(const char16_t * buf, size_t len) const noexcept final override { - return set_best()->validate_utf16be_with_errors(buf, len); +template +inline simdutf_warn_unused result validate_with_errors(const char16_t *buf, + size_t len) noexcept { + const uint16_t *data = reinterpret_cast(buf); + size_t pos = 0; + while (pos < len) { + uint16_t word = + !match_system(big_endian) ? swap_bytes(data[pos]) : data[pos]; + if ((word & 0xF800) == 0xD800) { + if (pos + 1 >= len) { + return result(error_code::SURROGATE, pos); + } + uint16_t diff = uint16_t(word - 0xD800); + if (diff > 0x3FF) { + return result(error_code::SURROGATE, pos); + } + uint16_t next_word = + !match_system(big_endian) ? swap_bytes(data[pos + 1]) : data[pos + 1]; + uint16_t diff2 = uint16_t(next_word - 0xDC00); + if (diff2 > 0x3FF) { + return result(error_code::SURROGATE, pos); + } + pos += 2; + } else { + pos++; + } } + return result(error_code::SUCCESS, pos); +} - simdutf_warn_unused bool validate_utf32(const char32_t * buf, size_t len) const noexcept final override { - return set_best()->validate_utf32(buf, len); +template +inline size_t count_code_points(const char16_t *buf, size_t len) { + // We are not BOM aware. + const uint16_t *p = reinterpret_cast(buf); + size_t counter{0}; + for (size_t i = 0; i < len; i++) { + uint16_t word = !match_system(big_endian) ? swap_bytes(p[i]) : p[i]; + counter += ((word & 0xFC00) != 0xDC00); } + return counter; +} - simdutf_warn_unused result validate_utf32_with_errors(const char32_t * buf, size_t len) const noexcept final override { - return set_best()->validate_utf32_with_errors(buf, len); +template +inline size_t utf8_length_from_utf16(const char16_t *buf, size_t len) { + // We are not BOM aware. + const uint16_t *p = reinterpret_cast(buf); + size_t counter{0}; + for (size_t i = 0; i < len; i++) { + uint16_t word = !match_system(big_endian) ? swap_bytes(p[i]) : p[i]; + counter++; // ASCII + counter += static_cast( + word > + 0x7F); // non-ASCII is at least 2 bytes, surrogates are 2*2 == 4 bytes + counter += static_cast((word > 0x7FF && word <= 0xD7FF) || + (word >= 0xE000)); // three-byte } + return counter; +} - simdutf_warn_unused size_t convert_latin1_to_utf8(const char * buf, size_t len, char* utf8_output) const noexcept final override { - return set_best()->convert_latin1_to_utf8(buf, len, utf8_output); +template +inline size_t utf32_length_from_utf16(const char16_t *buf, size_t len) { + // We are not BOM aware. + const uint16_t *p = reinterpret_cast(buf); + size_t counter{0}; + for (size_t i = 0; i < len; i++) { + uint16_t word = !match_system(big_endian) ? swap_bytes(p[i]) : p[i]; + counter += ((word & 0xFC00) != 0xDC00); } + return counter; +} - simdutf_warn_unused size_t convert_latin1_to_utf16le(const char * buf, size_t len, char16_t* utf16_output) const noexcept final override { - return set_best()->convert_latin1_to_utf16le(buf, len, utf16_output); - } +inline size_t latin1_length_from_utf16(size_t len) { return len; } - simdutf_warn_unused size_t convert_latin1_to_utf16be(const char * buf, size_t len, char16_t* utf16_output) const noexcept final override { - return set_best()->convert_latin1_to_utf16be(buf, len, utf16_output); +simdutf_really_inline void change_endianness_utf16(const char16_t *in, + size_t size, char16_t *out) { + const uint16_t *input = reinterpret_cast(in); + uint16_t *output = reinterpret_cast(out); + for (size_t i = 0; i < size; i++) { + *output++ = uint16_t(input[i] >> 8 | input[i] << 8); } +} - simdutf_warn_unused size_t convert_latin1_to_utf32(const char * buf, size_t len, char32_t * latin1_output) const noexcept final override { - return set_best()->convert_latin1_to_utf32(buf, len,latin1_output); +template +simdutf_warn_unused inline size_t trim_partial_utf16(const char16_t *input, + size_t length) { + if (length <= 1) { + return length; } + uint16_t last_word = uint16_t(input[length - 1]); + last_word = !match_system(big_endian) ? swap_bytes(last_word) : last_word; + length -= ((last_word & 0xFC00) == 0xD800); + return length; +} - simdutf_warn_unused size_t convert_utf8_to_latin1(const char * buf, size_t len, char* latin1_output) const noexcept final override { - return set_best()->convert_utf8_to_latin1(buf, len,latin1_output); - } +} // namespace utf16 +} // unnamed namespace +} // namespace scalar +} // namespace simdutf - simdutf_warn_unused result convert_utf8_to_latin1_with_errors(const char* buf, size_t len, char* latin1_output) const noexcept final override { - return set_best()->convert_utf8_to_latin1_with_errors(buf, len, latin1_output); - } +#endif +/* end file src/scalar/utf16.h */ +/* begin file src/scalar/utf32.h */ +#ifndef SIMDUTF_UTF32_H +#define SIMDUTF_UTF32_H - simdutf_warn_unused size_t convert_valid_utf8_to_latin1(const char * buf, size_t len, char* latin1_output) const noexcept final override { - return set_best()->convert_valid_utf8_to_latin1(buf, len,latin1_output); - } +namespace simdutf { +namespace scalar { +namespace { +namespace utf32 { - simdutf_warn_unused size_t convert_utf8_to_utf16le(const char * buf, size_t len, char16_t* utf16_output) const noexcept final override { - return set_best()->convert_utf8_to_utf16le(buf, len, utf16_output); +inline simdutf_warn_unused bool validate(const char32_t *buf, + size_t len) noexcept { + const uint32_t *data = reinterpret_cast(buf); + uint64_t pos = 0; + for (; pos < len; pos++) { + uint32_t word = data[pos]; + if (word > 0x10FFFF || (word >= 0xD800 && word <= 0xDFFF)) { + return false; + } } + return true; +} - simdutf_warn_unused size_t convert_utf8_to_utf16be(const char * buf, size_t len, char16_t* utf16_output) const noexcept final override { - return set_best()->convert_utf8_to_utf16be(buf, len, utf16_output); +inline simdutf_warn_unused result validate_with_errors(const char32_t *buf, + size_t len) noexcept { + const uint32_t *data = reinterpret_cast(buf); + size_t pos = 0; + for (; pos < len; pos++) { + uint32_t word = data[pos]; + if (word > 0x10FFFF) { + return result(error_code::TOO_LARGE, pos); + } + if (word >= 0xD800 && word <= 0xDFFF) { + return result(error_code::SURROGATE, pos); + } } + return result(error_code::SUCCESS, pos); +} - simdutf_warn_unused result convert_utf8_to_utf16le_with_errors(const char * buf, size_t len, char16_t* utf16_output) const noexcept final override { - return set_best()->convert_utf8_to_utf16le_with_errors(buf, len, utf16_output); +inline size_t utf8_length_from_utf32(const char32_t *buf, size_t len) { + // We are not BOM aware. + const uint32_t *p = reinterpret_cast(buf); + size_t counter{0}; + for (size_t i = 0; i < len; i++) { + // credit: @ttsugriy for the vectorizable approach + counter++; // ASCII + counter += static_cast(p[i] > 0x7F); // two-byte + counter += static_cast(p[i] > 0x7FF); // three-byte + counter += static_cast(p[i] > 0xFFFF); // four-bytes } + return counter; +} - simdutf_warn_unused result convert_utf8_to_utf16be_with_errors(const char * buf, size_t len, char16_t* utf16_output) const noexcept final override { - return set_best()->convert_utf8_to_utf16be_with_errors(buf, len, utf16_output); +inline size_t utf16_length_from_utf32(const char32_t *buf, size_t len) { + // We are not BOM aware. + const uint32_t *p = reinterpret_cast(buf); + size_t counter{0}; + for (size_t i = 0; i < len; i++) { + counter++; // non-surrogate word + counter += static_cast(p[i] > 0xFFFF); // surrogate pair } + return counter; +} - simdutf_warn_unused size_t convert_valid_utf8_to_utf16le(const char * buf, size_t len, char16_t* utf16_output) const noexcept final override { - return set_best()->convert_valid_utf8_to_utf16le(buf, len, utf16_output); - } +inline size_t latin1_length_from_utf32(size_t len) { + // We are not BOM aware. + return len; // a utf32 codepoint will always represent 1 latin1 character +} - simdutf_warn_unused size_t convert_valid_utf8_to_utf16be(const char * buf, size_t len, char16_t* utf16_output) const noexcept final override { - return set_best()->convert_valid_utf8_to_utf16be(buf, len, utf16_output); - } +inline simdutf_warn_unused uint32_t swap_bytes(const uint32_t word) { + return ((word >> 24) & 0xff) | // move byte 3 to byte 0 + ((word << 8) & 0xff0000) | // move byte 1 to byte 2 + ((word >> 8) & 0xff00) | // move byte 2 to byte 1 + ((word << 24) & 0xff000000); // byte 0 to byte 3 +} - simdutf_warn_unused size_t convert_utf8_to_utf32(const char * buf, size_t len, char32_t* utf32_output) const noexcept final override { - return set_best()->convert_utf8_to_utf32(buf, len, utf32_output); - } +} // namespace utf32 +} // unnamed namespace +} // namespace scalar +} // namespace simdutf - simdutf_warn_unused result convert_utf8_to_utf32_with_errors(const char * buf, size_t len, char32_t* utf32_output) const noexcept final override { - return set_best()->convert_utf8_to_utf32_with_errors(buf, len, utf32_output); - } +#endif +/* end file src/scalar/utf32.h */ +/* begin file src/scalar/base64.h */ +#ifndef SIMDUTF_BASE64_H +#define SIMDUTF_BASE64_H - simdutf_warn_unused size_t convert_valid_utf8_to_utf32(const char * buf, size_t len, char32_t* utf32_output) const noexcept final override { - return set_best()->convert_valid_utf8_to_utf32(buf, len, utf32_output); - } +#include +#include +#include +#include - simdutf_warn_unused size_t convert_utf16le_to_latin1(const char16_t * buf, size_t len, char* latin1_output) const noexcept final override { - return set_best()->convert_utf16le_to_latin1(buf, len, latin1_output); - } +namespace simdutf { +namespace scalar { +namespace { +namespace base64 { - simdutf_warn_unused size_t convert_utf16be_to_latin1(const char16_t * buf, size_t len, char* latin1_output) const noexcept final override { - return set_best()->convert_utf16be_to_latin1(buf, len, latin1_output); - } +// This function is not expected to be fast. Do not use in long loops. +template bool is_ascii_white_space(char_type c) { + return c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '\f'; +} - simdutf_warn_unused result convert_utf16le_to_latin1_with_errors(const char16_t * buf, size_t len, char* latin1_output) const noexcept final override { - return set_best()->convert_utf16le_to_latin1_with_errors(buf, len, latin1_output); +template bool is_eight_byte(char_type c) { + if (sizeof(char_type) == 1) { + return true; } + return uint8_t(c) == c; +} - simdutf_warn_unused result convert_utf16be_to_latin1_with_errors(const char16_t * buf, size_t len, char* latin1_output) const noexcept final override { - return set_best()->convert_utf16be_to_latin1_with_errors(buf, len, latin1_output); - } +// Returns true upon success. The destination buffer must be large enough. +// This functions assumes that the padding (=) has been removed. +template +result +base64_tail_decode(char *dst, const char_type *src, size_t length, + size_t padded_characters, // number of padding characters + // '=', typically 0, 1, 2. + base64_options options, + last_chunk_handling_options last_chunk_options) { + // This looks like 5 branches, but we expect the compiler to resolve this to a + // single branch: + const uint8_t *to_base64 = (options & base64_url) + ? tables::base64::to_base64_url_value + : tables::base64::to_base64_value; + const uint32_t *d0 = (options & base64_url) + ? tables::base64::base64_url::d0 + : tables::base64::base64_default::d0; + const uint32_t *d1 = (options & base64_url) + ? tables::base64::base64_url::d1 + : tables::base64::base64_default::d1; + const uint32_t *d2 = (options & base64_url) + ? tables::base64::base64_url::d2 + : tables::base64::base64_default::d2; + const uint32_t *d3 = (options & base64_url) + ? tables::base64::base64_url::d3 + : tables::base64::base64_default::d3; - simdutf_warn_unused size_t convert_valid_utf16le_to_latin1(const char16_t * buf, size_t len, char* latin1_output) const noexcept final override { - return set_best()->convert_valid_utf16le_to_latin1(buf, len, latin1_output); - } + const char_type *srcend = src + length; + const char_type *srcinit = src; + const char *dstinit = dst; - simdutf_warn_unused size_t convert_valid_utf16be_to_latin1(const char16_t * buf, size_t len, char* latin1_output) const noexcept final override { - return set_best()->convert_valid_utf16be_to_latin1(buf, len, latin1_output); - } + uint32_t x; + size_t idx; + uint8_t buffer[4]; + while (true) { + while (src + 4 <= srcend && is_eight_byte(src[0]) && + is_eight_byte(src[1]) && is_eight_byte(src[2]) && + is_eight_byte(src[3]) && + (x = d0[uint8_t(src[0])] | d1[uint8_t(src[1])] | + d2[uint8_t(src[2])] | d3[uint8_t(src[3])]) < 0x01FFFFFF) { + if (match_system(endianness::BIG)) { + x = scalar::utf32::swap_bytes(x); + } + std::memcpy(dst, &x, 3); // optimization opportunity: copy 4 bytes + dst += 3; + src += 4; + } + idx = 0; + // we need at least four characters. + while (idx < 4 && src < srcend) { + char_type c = *src; + uint8_t code = to_base64[uint8_t(c)]; + buffer[idx] = uint8_t(code); + if (is_eight_byte(c) && code <= 63) { + idx++; + } else if (code > 64 || !scalar::base64::is_eight_byte(c)) { + return {INVALID_BASE64_CHARACTER, size_t(src - srcinit)}; + } else { + // We have a space or a newline. We ignore it. + } + src++; + } + if (idx != 4) { + if (last_chunk_options == last_chunk_handling_options::strict && + (idx != 1) && ((idx + padded_characters) & 3) != 0) { + // The partial chunk was at src - idx + return {BASE64_INPUT_REMAINDER, size_t(dst - dstinit)}; + } else if (last_chunk_options == + last_chunk_handling_options::stop_before_partial && + (idx != 1) && ((idx + padded_characters) & 3) != 0) { + // Rewind src to before partial chunk + src -= idx; + return {SUCCESS, size_t(dst - dstinit)}; + } else { + if (idx == 2) { + uint32_t triple = + (uint32_t(buffer[0]) << 3 * 6) + (uint32_t(buffer[1]) << 2 * 6); + if (match_system(endianness::BIG)) { + triple <<= 8; + std::memcpy(dst, &triple, 1); + } else { + triple = scalar::utf32::swap_bytes(triple); + triple >>= 8; + std::memcpy(dst, &triple, 1); + } + dst += 1; + } else if (idx == 3) { + uint32_t triple = (uint32_t(buffer[0]) << 3 * 6) + + (uint32_t(buffer[1]) << 2 * 6) + + (uint32_t(buffer[2]) << 1 * 6); + if (match_system(endianness::BIG)) { + triple <<= 8; + std::memcpy(dst, &triple, 2); + } else { + triple = scalar::utf32::swap_bytes(triple); + triple >>= 8; + std::memcpy(dst, &triple, 2); + } + dst += 2; + } else if (idx == 1) { + return {BASE64_INPUT_REMAINDER, size_t(dst - dstinit)}; + } + return {SUCCESS, size_t(dst - dstinit)}; + } + } - simdutf_warn_unused size_t convert_utf16le_to_utf8(const char16_t * buf, size_t len, char* utf8_output) const noexcept final override { - return set_best()->convert_utf16le_to_utf8(buf, len, utf8_output); + uint32_t triple = + (uint32_t(buffer[0]) << 3 * 6) + (uint32_t(buffer[1]) << 2 * 6) + + (uint32_t(buffer[2]) << 1 * 6) + (uint32_t(buffer[3]) << 0 * 6); + if (match_system(endianness::BIG)) { + triple <<= 8; + std::memcpy(dst, &triple, 3); + } else { + triple = scalar::utf32::swap_bytes(triple); + triple >>= 8; + std::memcpy(dst, &triple, 3); + } + dst += 3; } +} - simdutf_warn_unused size_t convert_utf16be_to_utf8(const char16_t * buf, size_t len, char* utf8_output) const noexcept final override { - return set_best()->convert_utf16be_to_utf8(buf, len, utf8_output); +// like base64_tail_decode, but it will not write past the end of the output +// buffer. outlen is modified to reflect the number of bytes written. This +// functions assumes that the padding (=) has been removed. +// like base64_tail_decode, but it will not write past the end of the output +// buffer. outlen is modified to reflect the number of bytes written. This +// functions assumes that the padding (=) has been removed. +template +result base64_tail_decode_safe( + char *dst, size_t &outlen, const char_type *src, size_t length, + size_t padded_characters, // number of padding characters '=', typically 0, + // 1, 2. + base64_options options, last_chunk_handling_options last_chunk_options) { + if (length == 0) { + outlen = 0; + return {SUCCESS, 0}; } + // This looks like 5 branches, but we expect the compiler to resolve this to a + // single branch: + const uint8_t *to_base64 = (options & base64_url) + ? tables::base64::to_base64_url_value + : tables::base64::to_base64_value; + const uint32_t *d0 = (options & base64_url) + ? tables::base64::base64_url::d0 + : tables::base64::base64_default::d0; + const uint32_t *d1 = (options & base64_url) + ? tables::base64::base64_url::d1 + : tables::base64::base64_default::d1; + const uint32_t *d2 = (options & base64_url) + ? tables::base64::base64_url::d2 + : tables::base64::base64_default::d2; + const uint32_t *d3 = (options & base64_url) + ? tables::base64::base64_url::d3 + : tables::base64::base64_default::d3; - simdutf_warn_unused result convert_utf16le_to_utf8_with_errors(const char16_t * buf, size_t len, char* utf8_output) const noexcept final override { - return set_best()->convert_utf16le_to_utf8_with_errors(buf, len, utf8_output); - } + const char_type *srcend = src + length; + const char_type *srcinit = src; + const char *dstinit = dst; + const char *dstend = dst + outlen; - simdutf_warn_unused result convert_utf16be_to_utf8_with_errors(const char16_t * buf, size_t len, char* utf8_output) const noexcept final override { - return set_best()->convert_utf16be_to_utf8_with_errors(buf, len, utf8_output); - } + uint32_t x; + size_t idx; + uint8_t buffer[4]; + while (true) { + while (src + 4 <= srcend && is_eight_byte(src[0]) && + is_eight_byte(src[1]) && is_eight_byte(src[2]) && + is_eight_byte(src[3]) && + (x = d0[uint8_t(src[0])] | d1[uint8_t(src[1])] | + d2[uint8_t(src[2])] | d3[uint8_t(src[3])]) < 0x01FFFFFF) { + if (dstend - dst < 3) { + outlen = size_t(dst - dstinit); + return {OUTPUT_BUFFER_TOO_SMALL, size_t(src - srcinit)}; + } + if (match_system(endianness::BIG)) { + x = scalar::utf32::swap_bytes(x); + } + std::memcpy(dst, &x, 3); // optimization opportunity: copy 4 bytes + dst += 3; + src += 4; + } + idx = 0; + const char_type *srccur = src; + // We need at least four characters. + while (idx < 4 && src < srcend) { + char_type c = *src; + uint8_t code = to_base64[uint8_t(c)]; - simdutf_warn_unused size_t convert_valid_utf16le_to_utf8(const char16_t * buf, size_t len, char* utf8_output) const noexcept final override { - return set_best()->convert_valid_utf16le_to_utf8(buf, len, utf8_output); - } + buffer[idx] = uint8_t(code); + if (is_eight_byte(c) && code <= 63) { + idx++; + } else if (code > 64 || !scalar::base64::is_eight_byte(c)) { + outlen = size_t(dst - dstinit); + return {INVALID_BASE64_CHARACTER, size_t(src - srcinit)}; + } else { + // We have a space or a newline. We ignore it. + } + src++; + } + if (idx != 4) { + if (last_chunk_options == last_chunk_handling_options::strict && + ((idx + padded_characters) & 3) != 0) { + outlen = size_t(dst - dstinit); + return {BASE64_INPUT_REMAINDER, size_t(src - srcinit)}; + } else if (last_chunk_options == + last_chunk_handling_options::stop_before_partial && + ((idx + padded_characters) & 3) != 0) { + // Rewind src to before partial chunk + src = srccur; + outlen = size_t(dst - dstinit); + return {SUCCESS, size_t(dst - dstinit)}; + } else { // loose mode + if (idx == 0) { + // No data left; return success + outlen = size_t(dst - dstinit); + return {SUCCESS, size_t(dst - dstinit)}; + } else if (idx == 1) { + // Error: Incomplete chunk of length 1 is invalid in loose mode + outlen = size_t(dst - dstinit); + return {BASE64_INPUT_REMAINDER, size_t(src - srcinit)}; + } else if (idx == 2 || idx == 3) { + // Check if there's enough space in the destination buffer + size_t required_space = (idx == 2) ? 1 : 2; + if (size_t(dstend - dst) < required_space) { + outlen = size_t(dst - dstinit); + return {OUTPUT_BUFFER_TOO_SMALL, size_t(srccur - srcinit)}; + } + uint32_t triple = 0; + if (idx == 2) { + triple = (uint32_t(buffer[0]) << 18) + (uint32_t(buffer[1]) << 12); + // Extract the first byte + triple >>= 16; + dst[0] = static_cast(triple & 0xFF); + dst += 1; + } else if (idx == 3) { + triple = (uint32_t(buffer[0]) << 18) + (uint32_t(buffer[1]) << 12) + + (uint32_t(buffer[2]) << 6); + // Extract the first two bytes + triple >>= 8; + dst[0] = static_cast((triple >> 8) & 0xFF); + dst[1] = static_cast(triple & 0xFF); + dst += 2; + } + outlen = size_t(dst - dstinit); + return {SUCCESS, size_t(dst - dstinit)}; + } + } + } - simdutf_warn_unused size_t convert_valid_utf16be_to_utf8(const char16_t * buf, size_t len, char* utf8_output) const noexcept final override { - return set_best()->convert_valid_utf16be_to_utf8(buf, len, utf8_output); + if (dstend - dst < 3) { + outlen = size_t(dst - dstinit); + return {OUTPUT_BUFFER_TOO_SMALL, size_t(srccur - srcinit)}; + } + uint32_t triple = (uint32_t(buffer[0]) << 18) + + (uint32_t(buffer[1]) << 12) + (uint32_t(buffer[2]) << 6) + + (uint32_t(buffer[3])); + if (match_system(endianness::BIG)) { + triple <<= 8; + std::memcpy(dst, &triple, 3); + } else { + triple = scalar::utf32::swap_bytes(triple); + triple >>= 8; + std::memcpy(dst, &triple, 3); + } + dst += 3; } +} - simdutf_warn_unused size_t convert_utf32_to_latin1(const char32_t * buf, size_t len, char* latin1_output) const noexcept final override { - return set_best()->convert_utf32_to_latin1(buf, len,latin1_output); +// Returns the number of bytes written. The destination buffer must be large +// enough. It will add padding (=) if needed. +size_t tail_encode_base64(char *dst, const char *src, size_t srclen, + base64_options options) { + // By default, we use padding if we are not using the URL variant. + // This is check with ((options & base64_url) == 0) which returns true if we + // are not using the URL variant. However, we also allow 'inversion' of the + // convention with the base64_reverse_padding option. If the + // base64_reverse_padding option is set, we use padding if we are using the + // URL variant, and we omit it if we are not using the URL variant. This is + // checked with + // ((options & base64_reverse_padding) == base64_reverse_padding). + bool use_padding = + ((options & base64_url) == 0) ^ + ((options & base64_reverse_padding) == base64_reverse_padding); + // This looks like 3 branches, but we expect the compiler to resolve this to + // a single branch: + const char *e0 = (options & base64_url) ? tables::base64::base64_url::e0 + : tables::base64::base64_default::e0; + const char *e1 = (options & base64_url) ? tables::base64::base64_url::e1 + : tables::base64::base64_default::e1; + const char *e2 = (options & base64_url) ? tables::base64::base64_url::e2 + : tables::base64::base64_default::e2; + char *out = dst; + size_t i = 0; + uint8_t t1, t2, t3; + for (; i + 2 < srclen; i += 3) { + t1 = uint8_t(src[i]); + t2 = uint8_t(src[i + 1]); + t3 = uint8_t(src[i + 2]); + *out++ = e0[t1]; + *out++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)]; + *out++ = e1[((t2 & 0x0F) << 2) | ((t3 >> 6) & 0x03)]; + *out++ = e2[t3]; } - - simdutf_warn_unused result convert_utf32_to_latin1_with_errors(const char32_t * buf, size_t len, char* latin1_output) const noexcept final override { - return set_best()->convert_utf32_to_latin1_with_errors(buf, len,latin1_output); + switch (srclen - i) { + case 0: + break; + case 1: + t1 = uint8_t(src[i]); + *out++ = e0[t1]; + *out++ = e1[(t1 & 0x03) << 4]; + if (use_padding) { + *out++ = '='; + *out++ = '='; + } + break; + default: /* case 2 */ + t1 = uint8_t(src[i]); + t2 = uint8_t(src[i + 1]); + *out++ = e0[t1]; + *out++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)]; + *out++ = e2[(t2 & 0x0F) << 2]; + if (use_padding) { + *out++ = '='; + } } + return (size_t)(out - dst); +} - simdutf_warn_unused size_t convert_valid_utf32_to_latin1(const char32_t * buf, size_t len, char* latin1_output) const noexcept final override { - return set_best()->convert_utf32_to_latin1(buf, len,latin1_output); +template +simdutf_warn_unused size_t maximal_binary_length_from_base64( + const char_type *input, size_t length) noexcept { + // We follow https://infra.spec.whatwg.org/#forgiving-base64-decode + size_t padding = 0; + if (length > 0) { + if (input[length - 1] == '=') { + padding++; + if (length > 1 && input[length - 2] == '=') { + padding++; + } + } } - - simdutf_warn_unused size_t convert_utf32_to_utf8(const char32_t * buf, size_t len, char* utf8_output) const noexcept final override { - return set_best()->convert_utf32_to_utf8(buf, len, utf8_output); + size_t actual_length = length - padding; + if (actual_length % 4 <= 1) { + return actual_length / 4 * 3; } + // if we have a valid input, then the remainder must be 2 or 3 adding one or + // two extra bytes. + return actual_length / 4 * 3 + (actual_length % 4) - 1; +} - simdutf_warn_unused result convert_utf32_to_utf8_with_errors(const char32_t * buf, size_t len, char* utf8_output) const noexcept final override { - return set_best()->convert_utf32_to_utf8_with_errors(buf, len, utf8_output); +simdutf_warn_unused size_t +base64_length_from_binary(size_t length, base64_options options) noexcept { + // By default, we use padding if we are not using the URL variant. + // This is check with ((options & base64_url) == 0) which returns true if we + // are not using the URL variant. However, we also allow 'inversion' of the + // convention with the base64_reverse_padding option. If the + // base64_reverse_padding option is set, we use padding if we are using the + // URL variant, and we omit it if we are not using the URL variant. This is + // checked with + // ((options & base64_reverse_padding) == base64_reverse_padding). + bool use_padding = + ((options & base64_url) == 0) ^ + ((options & base64_reverse_padding) == base64_reverse_padding); + if (!use_padding) { + return length / 3 * 4 + ((length % 3) ? (length % 3) + 1 : 0); } + return (length + 2) / 3 * + 4; // We use padding to make the length a multiple of 4. +} - simdutf_warn_unused size_t convert_valid_utf32_to_utf8(const char32_t * buf, size_t len, char* utf8_output) const noexcept final override { - return set_best()->convert_valid_utf32_to_utf8(buf, len, utf8_output); - } +} // namespace base64 +} // unnamed namespace +} // namespace scalar +} // namespace simdutf - simdutf_warn_unused size_t convert_utf32_to_utf16le(const char32_t * buf, size_t len, char16_t* utf16_output) const noexcept final override { - return set_best()->convert_utf32_to_utf16le(buf, len, utf16_output); - } +#endif +/* end file src/scalar/base64.h */ +/* begin file src/scalar/latin1_to_utf8/latin1_to_utf8.h */ +#ifndef SIMDUTF_LATIN1_TO_UTF8_H +#define SIMDUTF_LATIN1_TO_UTF8_H - simdutf_warn_unused size_t convert_utf32_to_utf16be(const char32_t * buf, size_t len, char16_t* utf16_output) const noexcept final override { - return set_best()->convert_utf32_to_utf16be(buf, len, utf16_output); - } +namespace simdutf { +namespace scalar { +namespace { +namespace latin1_to_utf8 { - simdutf_warn_unused result convert_utf32_to_utf16le_with_errors(const char32_t * buf, size_t len, char16_t* utf16_output) const noexcept final override { - return set_best()->convert_utf32_to_utf16le_with_errors(buf, len, utf16_output); - } +inline size_t convert(const char *buf, size_t len, char *utf8_output) { + const unsigned char *data = reinterpret_cast(buf); + size_t pos = 0; + size_t utf8_pos = 0; + while (pos < len) { + // try to convert the next block of 16 ASCII bytes + if (pos + 16 <= + len) { // if it is safe to read 16 more bytes, check that they are ascii + uint64_t v1; + ::memcpy(&v1, data + pos, sizeof(uint64_t)); + uint64_t v2; + ::memcpy(&v2, data + pos + sizeof(uint64_t), sizeof(uint64_t)); + uint64_t v{v1 | + v2}; // We are only interested in these bits: 1000 1000 1000 + // 1000, so it makes sense to concatenate everything + if ((v & 0x8080808080808080) == + 0) { // if NONE of these are set, e.g. all of them are zero, then + // everything is ASCII + size_t final_pos = pos + 16; + while (pos < final_pos) { + utf8_output[utf8_pos++] = char(buf[pos]); + pos++; + } + continue; + } + } - simdutf_warn_unused result convert_utf32_to_utf16be_with_errors(const char32_t * buf, size_t len, char16_t* utf16_output) const noexcept final override { - return set_best()->convert_utf32_to_utf16be_with_errors(buf, len, utf16_output); + unsigned char byte = data[pos]; + if ((byte & 0x80) == 0) { // if ASCII + // will generate one UTF-8 bytes + utf8_output[utf8_pos++] = char(byte); + pos++; + } else { + // will generate two UTF-8 bytes + utf8_output[utf8_pos++] = char((byte >> 6) | 0b11000000); + utf8_output[utf8_pos++] = char((byte & 0b111111) | 0b10000000); + pos++; + } } + return utf8_pos; +} - simdutf_warn_unused size_t convert_valid_utf32_to_utf16le(const char32_t * buf, size_t len, char16_t* utf16_output) const noexcept final override { - return set_best()->convert_valid_utf32_to_utf16le(buf, len, utf16_output); +inline size_t convert_safe(const char *buf, size_t len, char *utf8_output, + size_t utf8_len) { + const unsigned char *data = reinterpret_cast(buf); + size_t pos = 0; + size_t skip_pos = 0; + size_t utf8_pos = 0; + while (pos < len && utf8_pos < utf8_len) { + // try to convert the next block of 16 ASCII bytes + if (pos >= skip_pos && pos + 16 <= len && + utf8_pos + 16 <= utf8_len) { // if it is safe to read 16 more bytes, + // check that they are ascii + uint64_t v1; + ::memcpy(&v1, data + pos, sizeof(uint64_t)); + uint64_t v2; + ::memcpy(&v2, data + pos + sizeof(uint64_t), sizeof(uint64_t)); + uint64_t v{v1 | + v2}; // We are only interested in these bits: 1000 1000 1000 + // 1000, so it makes sense to concatenate everything + if ((v & 0x8080808080808080) == + 0) { // if NONE of these are set, e.g. all of them are zero, then + // everything is ASCII + ::memcpy(utf8_output + utf8_pos, buf + pos, 16); + utf8_pos += 16; + pos += 16; + } else { + // At least one of the next 16 bytes are not ASCII, we will process them + // one by one + skip_pos = pos + 16; + } + } else { + const auto byte = data[pos]; + if ((byte & 0x80) == 0) { // if ASCII + // will generate one UTF-8 bytes + utf8_output[utf8_pos++] = char(byte); + pos++; + } else if (utf8_pos + 2 <= utf8_len) { + // will generate two UTF-8 bytes + utf8_output[utf8_pos++] = char((byte >> 6) | 0b11000000); + utf8_output[utf8_pos++] = char((byte & 0b111111) | 0b10000000); + pos++; + } else { + break; + } + } } + return utf8_pos; +} - simdutf_warn_unused size_t convert_valid_utf32_to_utf16be(const char32_t * buf, size_t len, char16_t* utf16_output) const noexcept final override { - return set_best()->convert_valid_utf32_to_utf16be(buf, len, utf16_output); - } +} // namespace latin1_to_utf8 +} // unnamed namespace +} // namespace scalar +} // namespace simdutf - simdutf_warn_unused size_t convert_utf16le_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_output) const noexcept final override { +#endif +/* end file src/scalar/latin1_to_utf8/latin1_to_utf8.h */ + +namespace simdutf { +bool implementation::supported_by_runtime_system() const { + uint32_t required_instruction_sets = this->required_instruction_sets(); + uint32_t supported_instruction_sets = + internal::detect_supported_architectures(); + return ((supported_instruction_sets & required_instruction_sets) == + required_instruction_sets); +} + +simdutf_warn_unused encoding_type implementation::autodetect_encoding( + const char *input, size_t length) const noexcept { + // If there is a BOM, then we trust it. + auto bom_encoding = simdutf::BOM::check_bom(input, length); + if (bom_encoding != encoding_type::unspecified) { + return bom_encoding; + } + // UTF8 is common, it includes ASCII, and is commonly represented + // without a BOM, so if it fits, go with that. Note that it is still + // possible to get it wrong, we are only 'guessing'. If some has UTF-16 + // data without a BOM, it could pass as UTF-8. + // + // An interesting twist might be to check for UTF-16 ASCII first (every + // other byte is zero). + if (validate_utf8(input, length)) { + return encoding_type::UTF8; + } + // The next most common encoding that might appear without BOM is probably + // UTF-16LE, so try that next. + if ((length % 2) == 0) { + // important: we need to divide by two + if (validate_utf16le(reinterpret_cast(input), + length / 2)) { + return encoding_type::UTF16_LE; + } + } + if ((length % 4) == 0) { + if (validate_utf32(reinterpret_cast(input), length / 4)) { + return encoding_type::UTF32_LE; + } + } + return encoding_type::unspecified; +} + +namespace internal { +// When there is a single implementation, we should not pay a price +// for dispatching to the best implementation. We should just use the +// one we have. This is a compile-time check. +#define SIMDUTF_SINGLE_IMPLEMENTATION \ + (SIMDUTF_IMPLEMENTATION_ICELAKE + SIMDUTF_IMPLEMENTATION_HASWELL + \ + SIMDUTF_IMPLEMENTATION_WESTMERE + SIMDUTF_IMPLEMENTATION_ARM64 + \ + SIMDUTF_IMPLEMENTATION_PPC64 + SIMDUTF_IMPLEMENTATION_FALLBACK == \ + 1) + +// Static array of known implementations. We are hoping these get baked into the +// executable without requiring a static initializer. + +#if SIMDUTF_IMPLEMENTATION_ICELAKE +static const icelake::implementation *get_icelake_singleton() { + static const icelake::implementation icelake_singleton{}; + return &icelake_singleton; +} +#endif +#if SIMDUTF_IMPLEMENTATION_HASWELL +static const haswell::implementation *get_haswell_singleton() { + static const haswell::implementation haswell_singleton{}; + return &haswell_singleton; +} +#endif +#if SIMDUTF_IMPLEMENTATION_WESTMERE +static const westmere::implementation *get_westmere_singleton() { + static const westmere::implementation westmere_singleton{}; + return &westmere_singleton; +} +#endif +#if SIMDUTF_IMPLEMENTATION_ARM64 +static const arm64::implementation *get_arm64_singleton() { + static const arm64::implementation arm64_singleton{}; + return &arm64_singleton; +} +#endif +#if SIMDUTF_IMPLEMENTATION_PPC64 +static const ppc64::implementation *get_ppc64_singleton() { + static const ppc64::implementation ppc64_singleton{}; + return &ppc64_singleton; +} +#endif +#if SIMDUTF_IMPLEMENTATION_RVV +static const rvv::implementation *get_rvv_singleton() { + static const rvv::implementation rvv_singleton{}; + return &rvv_singleton; +} +#endif +#if SIMDUTF_IMPLEMENTATION_FALLBACK +static const fallback::implementation *get_fallback_singleton() { + static const fallback::implementation fallback_singleton{}; + return &fallback_singleton; +} +#endif + +#if SIMDUTF_SINGLE_IMPLEMENTATION +static const implementation *get_single_implementation() { + return + #if SIMDUTF_IMPLEMENTATION_ICELAKE + get_icelake_singleton(); + #endif + #if SIMDUTF_IMPLEMENTATION_HASWELL + get_haswell_singleton(); + #endif + #if SIMDUTF_IMPLEMENTATION_WESTMERE + get_westmere_singleton(); + #endif + #if SIMDUTF_IMPLEMENTATION_ARM64 + get_arm64_singleton(); + #endif + #if SIMDUTF_IMPLEMENTATION_PPC64 + get_ppc64_singleton(); + #endif + #if SIMDUTF_IMPLEMENTATION_FALLBACK + get_fallback_singleton(); + #endif +} +#endif + +/** + * @private Detects best supported implementation on first use, and sets it + */ +class detect_best_supported_implementation_on_first_use final + : public implementation { +public: + std::string name() const noexcept final { return set_best()->name(); } + std::string description() const noexcept final { + return set_best()->description(); + } + uint32_t required_instruction_sets() const noexcept final { + return set_best()->required_instruction_sets(); + } + + simdutf_warn_unused int + detect_encodings(const char *input, size_t length) const noexcept override { + return set_best()->detect_encodings(input, length); + } + + simdutf_warn_unused bool + validate_utf8(const char *buf, size_t len) const noexcept final override { + return set_best()->validate_utf8(buf, len); + } + + simdutf_warn_unused result validate_utf8_with_errors( + const char *buf, size_t len) const noexcept final override { + return set_best()->validate_utf8_with_errors(buf, len); + } + + simdutf_warn_unused bool + validate_ascii(const char *buf, size_t len) const noexcept final override { + return set_best()->validate_ascii(buf, len); + } + + simdutf_warn_unused result validate_ascii_with_errors( + const char *buf, size_t len) const noexcept final override { + return set_best()->validate_ascii_with_errors(buf, len); + } + + simdutf_warn_unused bool + validate_utf16le(const char16_t *buf, + size_t len) const noexcept final override { + return set_best()->validate_utf16le(buf, len); + } + + simdutf_warn_unused bool + validate_utf16be(const char16_t *buf, + size_t len) const noexcept final override { + return set_best()->validate_utf16be(buf, len); + } + + simdutf_warn_unused result validate_utf16le_with_errors( + const char16_t *buf, size_t len) const noexcept final override { + return set_best()->validate_utf16le_with_errors(buf, len); + } + + simdutf_warn_unused result validate_utf16be_with_errors( + const char16_t *buf, size_t len) const noexcept final override { + return set_best()->validate_utf16be_with_errors(buf, len); + } + + simdutf_warn_unused bool + validate_utf32(const char32_t *buf, + size_t len) const noexcept final override { + return set_best()->validate_utf32(buf, len); + } + + simdutf_warn_unused result validate_utf32_with_errors( + const char32_t *buf, size_t len) const noexcept final override { + return set_best()->validate_utf32_with_errors(buf, len); + } + + simdutf_warn_unused size_t + convert_latin1_to_utf8(const char *buf, size_t len, + char *utf8_output) const noexcept final override { + return set_best()->convert_latin1_to_utf8(buf, len, utf8_output); + } + + simdutf_warn_unused size_t convert_latin1_to_utf16le( + const char *buf, size_t len, + char16_t *utf16_output) const noexcept final override { + return set_best()->convert_latin1_to_utf16le(buf, len, utf16_output); + } + + simdutf_warn_unused size_t convert_latin1_to_utf16be( + const char *buf, size_t len, + char16_t *utf16_output) const noexcept final override { + return set_best()->convert_latin1_to_utf16be(buf, len, utf16_output); + } + + simdutf_warn_unused size_t convert_latin1_to_utf32( + const char *buf, size_t len, + char32_t *latin1_output) const noexcept final override { + return set_best()->convert_latin1_to_utf32(buf, len, latin1_output); + } + + simdutf_warn_unused size_t + convert_utf8_to_latin1(const char *buf, size_t len, + char *latin1_output) const noexcept final override { + return set_best()->convert_utf8_to_latin1(buf, len, latin1_output); + } + + simdutf_warn_unused result convert_utf8_to_latin1_with_errors( + const char *buf, size_t len, + char *latin1_output) const noexcept final override { + return set_best()->convert_utf8_to_latin1_with_errors(buf, len, + latin1_output); + } + + simdutf_warn_unused size_t convert_valid_utf8_to_latin1( + const char *buf, size_t len, + char *latin1_output) const noexcept final override { + return set_best()->convert_valid_utf8_to_latin1(buf, len, latin1_output); + } + + simdutf_warn_unused size_t convert_utf8_to_utf16le( + const char *buf, size_t len, + char16_t *utf16_output) const noexcept final override { + return set_best()->convert_utf8_to_utf16le(buf, len, utf16_output); + } + + simdutf_warn_unused size_t convert_utf8_to_utf16be( + const char *buf, size_t len, + char16_t *utf16_output) const noexcept final override { + return set_best()->convert_utf8_to_utf16be(buf, len, utf16_output); + } + + simdutf_warn_unused result convert_utf8_to_utf16le_with_errors( + const char *buf, size_t len, + char16_t *utf16_output) const noexcept final override { + return set_best()->convert_utf8_to_utf16le_with_errors(buf, len, + utf16_output); + } + + simdutf_warn_unused result convert_utf8_to_utf16be_with_errors( + const char *buf, size_t len, + char16_t *utf16_output) const noexcept final override { + return set_best()->convert_utf8_to_utf16be_with_errors(buf, len, + utf16_output); + } + + simdutf_warn_unused size_t convert_valid_utf8_to_utf16le( + const char *buf, size_t len, + char16_t *utf16_output) const noexcept final override { + return set_best()->convert_valid_utf8_to_utf16le(buf, len, utf16_output); + } + + simdutf_warn_unused size_t convert_valid_utf8_to_utf16be( + const char *buf, size_t len, + char16_t *utf16_output) const noexcept final override { + return set_best()->convert_valid_utf8_to_utf16be(buf, len, utf16_output); + } + + simdutf_warn_unused size_t + convert_utf8_to_utf32(const char *buf, size_t len, + char32_t *utf32_output) const noexcept final override { + return set_best()->convert_utf8_to_utf32(buf, len, utf32_output); + } + + simdutf_warn_unused result convert_utf8_to_utf32_with_errors( + const char *buf, size_t len, + char32_t *utf32_output) const noexcept final override { + return set_best()->convert_utf8_to_utf32_with_errors(buf, len, + utf32_output); + } + + simdutf_warn_unused size_t convert_valid_utf8_to_utf32( + const char *buf, size_t len, + char32_t *utf32_output) const noexcept final override { + return set_best()->convert_valid_utf8_to_utf32(buf, len, utf32_output); + } + + simdutf_warn_unused size_t + convert_utf16le_to_latin1(const char16_t *buf, size_t len, + char *latin1_output) const noexcept final override { + return set_best()->convert_utf16le_to_latin1(buf, len, latin1_output); + } + + simdutf_warn_unused size_t + convert_utf16be_to_latin1(const char16_t *buf, size_t len, + char *latin1_output) const noexcept final override { + return set_best()->convert_utf16be_to_latin1(buf, len, latin1_output); + } + + simdutf_warn_unused result convert_utf16le_to_latin1_with_errors( + const char16_t *buf, size_t len, + char *latin1_output) const noexcept final override { + return set_best()->convert_utf16le_to_latin1_with_errors(buf, len, + latin1_output); + } + + simdutf_warn_unused result convert_utf16be_to_latin1_with_errors( + const char16_t *buf, size_t len, + char *latin1_output) const noexcept final override { + return set_best()->convert_utf16be_to_latin1_with_errors(buf, len, + latin1_output); + } + + simdutf_warn_unused size_t convert_valid_utf16le_to_latin1( + const char16_t *buf, size_t len, + char *latin1_output) const noexcept final override { + return set_best()->convert_valid_utf16le_to_latin1(buf, len, latin1_output); + } + + simdutf_warn_unused size_t convert_valid_utf16be_to_latin1( + const char16_t *buf, size_t len, + char *latin1_output) const noexcept final override { + return set_best()->convert_valid_utf16be_to_latin1(buf, len, latin1_output); + } + + simdutf_warn_unused size_t + convert_utf16le_to_utf8(const char16_t *buf, size_t len, + char *utf8_output) const noexcept final override { + return set_best()->convert_utf16le_to_utf8(buf, len, utf8_output); + } + + simdutf_warn_unused size_t + convert_utf16be_to_utf8(const char16_t *buf, size_t len, + char *utf8_output) const noexcept final override { + return set_best()->convert_utf16be_to_utf8(buf, len, utf8_output); + } + + simdutf_warn_unused result convert_utf16le_to_utf8_with_errors( + const char16_t *buf, size_t len, + char *utf8_output) const noexcept final override { + return set_best()->convert_utf16le_to_utf8_with_errors(buf, len, + utf8_output); + } + + simdutf_warn_unused result convert_utf16be_to_utf8_with_errors( + const char16_t *buf, size_t len, + char *utf8_output) const noexcept final override { + return set_best()->convert_utf16be_to_utf8_with_errors(buf, len, + utf8_output); + } + + simdutf_warn_unused size_t convert_valid_utf16le_to_utf8( + const char16_t *buf, size_t len, + char *utf8_output) const noexcept final override { + return set_best()->convert_valid_utf16le_to_utf8(buf, len, utf8_output); + } + + simdutf_warn_unused size_t convert_valid_utf16be_to_utf8( + const char16_t *buf, size_t len, + char *utf8_output) const noexcept final override { + return set_best()->convert_valid_utf16be_to_utf8(buf, len, utf8_output); + } + + simdutf_warn_unused size_t + convert_utf32_to_latin1(const char32_t *buf, size_t len, + char *latin1_output) const noexcept final override { + return set_best()->convert_utf32_to_latin1(buf, len, latin1_output); + } + + simdutf_warn_unused result convert_utf32_to_latin1_with_errors( + const char32_t *buf, size_t len, + char *latin1_output) const noexcept final override { + return set_best()->convert_utf32_to_latin1_with_errors(buf, len, + latin1_output); + } + + simdutf_warn_unused size_t convert_valid_utf32_to_latin1( + const char32_t *buf, size_t len, + char *latin1_output) const noexcept final override { + return set_best()->convert_utf32_to_latin1(buf, len, latin1_output); + } + + simdutf_warn_unused size_t + convert_utf32_to_utf8(const char32_t *buf, size_t len, + char *utf8_output) const noexcept final override { + return set_best()->convert_utf32_to_utf8(buf, len, utf8_output); + } + + simdutf_warn_unused result convert_utf32_to_utf8_with_errors( + const char32_t *buf, size_t len, + char *utf8_output) const noexcept final override { + return set_best()->convert_utf32_to_utf8_with_errors(buf, len, utf8_output); + } + + simdutf_warn_unused size_t + convert_valid_utf32_to_utf8(const char32_t *buf, size_t len, + char *utf8_output) const noexcept final override { + return set_best()->convert_valid_utf32_to_utf8(buf, len, utf8_output); + } + + simdutf_warn_unused size_t convert_utf32_to_utf16le( + const char32_t *buf, size_t len, + char16_t *utf16_output) const noexcept final override { + return set_best()->convert_utf32_to_utf16le(buf, len, utf16_output); + } + + simdutf_warn_unused size_t convert_utf32_to_utf16be( + const char32_t *buf, size_t len, + char16_t *utf16_output) const noexcept final override { + return set_best()->convert_utf32_to_utf16be(buf, len, utf16_output); + } + + simdutf_warn_unused result convert_utf32_to_utf16le_with_errors( + const char32_t *buf, size_t len, + char16_t *utf16_output) const noexcept final override { + return set_best()->convert_utf32_to_utf16le_with_errors(buf, len, + utf16_output); + } + + simdutf_warn_unused result convert_utf32_to_utf16be_with_errors( + const char32_t *buf, size_t len, + char16_t *utf16_output) const noexcept final override { + return set_best()->convert_utf32_to_utf16be_with_errors(buf, len, + utf16_output); + } + + simdutf_warn_unused size_t convert_valid_utf32_to_utf16le( + const char32_t *buf, size_t len, + char16_t *utf16_output) const noexcept final override { + return set_best()->convert_valid_utf32_to_utf16le(buf, len, utf16_output); + } + + simdutf_warn_unused size_t convert_valid_utf32_to_utf16be( + const char32_t *buf, size_t len, + char16_t *utf16_output) const noexcept final override { + return set_best()->convert_valid_utf32_to_utf16be(buf, len, utf16_output); + } + + simdutf_warn_unused size_t convert_utf16le_to_utf32( + const char16_t *buf, size_t len, + char32_t *utf32_output) const noexcept final override { return set_best()->convert_utf16le_to_utf32(buf, len, utf32_output); } - simdutf_warn_unused size_t convert_utf16be_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_output) const noexcept final override { + simdutf_warn_unused size_t convert_utf16be_to_utf32( + const char16_t *buf, size_t len, + char32_t *utf32_output) const noexcept final override { return set_best()->convert_utf16be_to_utf32(buf, len, utf32_output); } - simdutf_warn_unused result convert_utf16le_to_utf32_with_errors(const char16_t * buf, size_t len, char32_t* utf32_output) const noexcept final override { - return set_best()->convert_utf16le_to_utf32_with_errors(buf, len, utf32_output); + simdutf_warn_unused result convert_utf16le_to_utf32_with_errors( + const char16_t *buf, size_t len, + char32_t *utf32_output) const noexcept final override { + return set_best()->convert_utf16le_to_utf32_with_errors(buf, len, + utf32_output); } - simdutf_warn_unused result convert_utf16be_to_utf32_with_errors(const char16_t * buf, size_t len, char32_t* utf32_output) const noexcept final override { - return set_best()->convert_utf16be_to_utf32_with_errors(buf, len, utf32_output); + simdutf_warn_unused result convert_utf16be_to_utf32_with_errors( + const char16_t *buf, size_t len, + char32_t *utf32_output) const noexcept final override { + return set_best()->convert_utf16be_to_utf32_with_errors(buf, len, + utf32_output); } - simdutf_warn_unused size_t convert_valid_utf16le_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_output) const noexcept final override { + simdutf_warn_unused size_t convert_valid_utf16le_to_utf32( + const char16_t *buf, size_t len, + char32_t *utf32_output) const noexcept final override { return set_best()->convert_valid_utf16le_to_utf32(buf, len, utf32_output); } - simdutf_warn_unused size_t convert_valid_utf16be_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_output) const noexcept final override { + simdutf_warn_unused size_t convert_valid_utf16be_to_utf32( + const char16_t *buf, size_t len, + char32_t *utf32_output) const noexcept final override { return set_best()->convert_valid_utf16be_to_utf32(buf, len, utf32_output); } - void change_endianness_utf16(const char16_t * buf, size_t len, char16_t * output) const noexcept final override { + void change_endianness_utf16(const char16_t *buf, size_t len, + char16_t *output) const noexcept final override { set_best()->change_endianness_utf16(buf, len, output); } - simdutf_warn_unused size_t count_utf16le(const char16_t * buf, size_t len) const noexcept final override { + simdutf_warn_unused size_t + count_utf16le(const char16_t *buf, size_t len) const noexcept final override { return set_best()->count_utf16le(buf, len); } - simdutf_warn_unused size_t count_utf16be(const char16_t * buf, size_t len) const noexcept final override { + simdutf_warn_unused size_t + count_utf16be(const char16_t *buf, size_t len) const noexcept final override { return set_best()->count_utf16be(buf, len); } - simdutf_warn_unused size_t count_utf8(const char * buf, size_t len) const noexcept final override { + simdutf_warn_unused size_t + count_utf8(const char *buf, size_t len) const noexcept final override { return set_best()->count_utf8(buf, len); } - simdutf_warn_unused size_t latin1_length_from_utf8(const char * buf, size_t len) const noexcept override { + simdutf_warn_unused size_t + latin1_length_from_utf8(const char *buf, size_t len) const noexcept override { return set_best()->latin1_length_from_utf8(buf, len); } - simdutf_warn_unused size_t latin1_length_from_utf16(size_t len) const noexcept override { + simdutf_warn_unused size_t + latin1_length_from_utf16(size_t len) const noexcept override { return set_best()->latin1_length_from_utf16(len); } - simdutf_warn_unused size_t latin1_length_from_utf32(size_t len) const noexcept override { + simdutf_warn_unused size_t + latin1_length_from_utf32(size_t len) const noexcept override { return set_best()->latin1_length_from_utf32(len); } - simdutf_warn_unused size_t utf8_length_from_latin1(const char * buf, size_t len) const noexcept override { + simdutf_warn_unused size_t + utf8_length_from_latin1(const char *buf, size_t len) const noexcept override { return set_best()->utf8_length_from_latin1(buf, len); } - simdutf_warn_unused size_t utf8_length_from_utf16le(const char16_t * buf, size_t len) const noexcept override { + simdutf_warn_unused size_t utf8_length_from_utf16le( + const char16_t *buf, size_t len) const noexcept override { return set_best()->utf8_length_from_utf16le(buf, len); } - simdutf_warn_unused size_t utf8_length_from_utf16be(const char16_t * buf, size_t len) const noexcept override { + simdutf_warn_unused size_t utf8_length_from_utf16be( + const char16_t *buf, size_t len) const noexcept override { return set_best()->utf8_length_from_utf16be(buf, len); } - simdutf_warn_unused size_t utf16_length_from_latin1(size_t len) const noexcept override { + simdutf_warn_unused size_t + utf16_length_from_latin1(size_t len) const noexcept override { return set_best()->utf16_length_from_latin1(len); } - simdutf_warn_unused size_t utf32_length_from_latin1(size_t len) const noexcept override { + simdutf_warn_unused size_t + utf32_length_from_latin1(size_t len) const noexcept override { return set_best()->utf32_length_from_latin1(len); } - simdutf_warn_unused size_t utf32_length_from_utf16le(const char16_t * buf, size_t len) const noexcept override { + simdutf_warn_unused size_t utf32_length_from_utf16le( + const char16_t *buf, size_t len) const noexcept override { return set_best()->utf32_length_from_utf16le(buf, len); } - simdutf_warn_unused size_t utf32_length_from_utf16be(const char16_t * buf, size_t len) const noexcept override { + simdutf_warn_unused size_t utf32_length_from_utf16be( + const char16_t *buf, size_t len) const noexcept override { return set_best()->utf32_length_from_utf16be(buf, len); } - simdutf_warn_unused size_t utf16_length_from_utf8(const char * buf, size_t len) const noexcept override { + simdutf_warn_unused size_t + utf16_length_from_utf8(const char *buf, size_t len) const noexcept override { return set_best()->utf16_length_from_utf8(buf, len); } - simdutf_warn_unused size_t utf8_length_from_utf32(const char32_t * buf, size_t len) const noexcept override { + simdutf_warn_unused size_t utf8_length_from_utf32( + const char32_t *buf, size_t len) const noexcept override { return set_best()->utf8_length_from_utf32(buf, len); } - simdutf_warn_unused size_t utf16_length_from_utf32(const char32_t * buf, size_t len) const noexcept override { + simdutf_warn_unused size_t utf16_length_from_utf32( + const char32_t *buf, size_t len) const noexcept override { return set_best()->utf16_length_from_utf32(buf, len); } - simdutf_warn_unused size_t utf32_length_from_utf8(const char * buf, size_t len) const noexcept override { + simdutf_warn_unused size_t + utf32_length_from_utf8(const char *buf, size_t len) const noexcept override { return set_best()->utf32_length_from_utf8(buf, len); } - simdutf_warn_unused size_t maximal_binary_length_from_base64(const char * input, size_t length) const noexcept override { + simdutf_warn_unused size_t maximal_binary_length_from_base64( + const char *input, size_t length) const noexcept override { return set_best()->maximal_binary_length_from_base64(input, length); } - simdutf_warn_unused result base64_to_binary(const char * input, size_t length, char* output, base64_options options) const noexcept override { - return set_best()->base64_to_binary(input, length, output, options); + simdutf_warn_unused result base64_to_binary( + const char *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_handling_options = + last_chunk_handling_options::loose) const noexcept override { + return set_best()->base64_to_binary(input, length, output, options, + last_chunk_handling_options); } - simdutf_warn_unused size_t maximal_binary_length_from_base64(const char16_t * input, size_t length) const noexcept override { + simdutf_warn_unused size_t maximal_binary_length_from_base64( + const char16_t *input, size_t length) const noexcept override { return set_best()->maximal_binary_length_from_base64(input, length); } - simdutf_warn_unused result base64_to_binary(const char16_t * input, size_t length, char* output, base64_options options) const noexcept override { - return set_best()->base64_to_binary(input, length, output, options); + simdutf_warn_unused result base64_to_binary( + const char16_t *input, size_t length, char *output, + base64_options options, + last_chunk_handling_options last_chunk_handling_options = + last_chunk_handling_options::loose) const noexcept override { + return set_best()->base64_to_binary(input, length, output, options, + last_chunk_handling_options); } - simdutf_warn_unused size_t base64_length_from_binary(size_t length, base64_options options) const noexcept override { + simdutf_warn_unused size_t base64_length_from_binary( + size_t length, base64_options options) const noexcept override { return set_best()->base64_length_from_binary(length, options); } - size_t binary_to_base64(const char * input, size_t length, char* output, base64_options options) const noexcept override { + size_t binary_to_base64(const char *input, size_t length, char *output, + base64_options options) const noexcept override { return set_best()->binary_to_base64(input, length, output, options); } - simdutf_really_inline detect_best_supported_implementation_on_first_use() noexcept : implementation("best_supported_detector", "Detects the best supported implementation and sets it", 0) {} + simdutf_really_inline + detect_best_supported_implementation_on_first_use() noexcept + : implementation("best_supported_detector", + "Detects the best supported implementation and sets it", + 0) {} private: const implementation *set_best() const noexcept; }; -static_assert(std::is_trivially_destructible::value, "detect_best_supported_implementation_on_first_use should be trivially destructible"); +static_assert(std::is_trivially_destructible< + detect_best_supported_implementation_on_first_use>::value, + "detect_best_supported_implementation_on_first_use should be " + "trivially destructible"); -static const std::initializer_list& get_available_implementation_pointers() { - static const std::initializer_list available_implementation_pointers { +static const std::initializer_list & +get_available_implementation_pointers() { + static const std::initializer_list + available_implementation_pointers{ #if SIMDUTF_IMPLEMENTATION_ICELAKE - get_icelake_singleton(), + get_icelake_singleton(), #endif #if SIMDUTF_IMPLEMENTATION_HASWELL - get_haswell_singleton(), + get_haswell_singleton(), #endif #if SIMDUTF_IMPLEMENTATION_WESTMERE - get_westmere_singleton(), + get_westmere_singleton(), #endif #if SIMDUTF_IMPLEMENTATION_ARM64 - get_arm64_singleton(), + get_arm64_singleton(), #endif #if SIMDUTF_IMPLEMENTATION_PPC64 - get_ppc64_singleton(), + get_ppc64_singleton(), #endif #if SIMDUTF_IMPLEMENTATION_RVV - get_rvv_singleton(), + get_rvv_singleton(), #endif #if SIMDUTF_IMPLEMENTATION_FALLBACK - get_fallback_singleton(), + get_fallback_singleton(), #endif - }; // available_implementation_pointers + }; // available_implementation_pointers return available_implementation_pointers; } -// So we can return UNSUPPORTED_ARCHITECTURE from the parser when there is no support +// So we can return UNSUPPORTED_ARCHITECTURE from the parser when there is no +// support class unsupported_implementation final : public implementation { public: - simdutf_warn_unused int detect_encodings(const char *, size_t) const noexcept override { + simdutf_warn_unused int detect_encodings(const char *, + size_t) const noexcept override { return encoding_type::unspecified; } - simdutf_warn_unused bool validate_utf8(const char *, size_t) const noexcept final override { - return false; // Just refuse to validate. Given that we have a fallback implementation - // it seems unlikely that unsupported_implementation will ever be used. If it is used, - // then it will flag all strings as invalid. The alternative is to return an error_code - // from which the user has to figure out whether the string is valid UTF-8... which seems - // like a lot of work just to handle the very unlikely case that we have an unsupported - // implementation. And, when it does happen (that we have an unsupported implementation), - // what are the chances that the programmer has a fallback? Given that *we* provide the - // fallback, it implies that the programmer would need a fallback for our fallback. + simdutf_warn_unused bool validate_utf8(const char *, + size_t) const noexcept final override { + return false; // Just refuse to validate. Given that we have a fallback + // implementation + // it seems unlikely that unsupported_implementation will ever be used. If + // it is used, then it will flag all strings as invalid. The alternative is + // to return an error_code from which the user has to figure out whether the + // string is valid UTF-8... which seems like a lot of work just to handle + // the very unlikely case that we have an unsupported implementation. And, + // when it does happen (that we have an unsupported implementation), what + // are the chances that the programmer has a fallback? Given that *we* + // provide the fallback, it implies that the programmer would need a + // fallback for our fallback. } - simdutf_warn_unused result validate_utf8_with_errors(const char *, size_t) const noexcept final override { + simdutf_warn_unused result validate_utf8_with_errors( + const char *, size_t) const noexcept final override { return result(error_code::OTHER, 0); } - simdutf_warn_unused bool validate_ascii(const char *, size_t) const noexcept final override { + simdutf_warn_unused bool + validate_ascii(const char *, size_t) const noexcept final override { return false; } - simdutf_warn_unused result validate_ascii_with_errors(const char *, size_t) const noexcept final override { + simdutf_warn_unused result validate_ascii_with_errors( + const char *, size_t) const noexcept final override { return result(error_code::OTHER, 0); } - simdutf_warn_unused bool validate_utf16le(const char16_t*, size_t) const noexcept final override { + simdutf_warn_unused bool + validate_utf16le(const char16_t *, size_t) const noexcept final override { return false; } - simdutf_warn_unused bool validate_utf16be(const char16_t*, size_t) const noexcept final override { + simdutf_warn_unused bool + validate_utf16be(const char16_t *, size_t) const noexcept final override { return false; } - simdutf_warn_unused result validate_utf16le_with_errors(const char16_t*, size_t) const noexcept final override { + simdutf_warn_unused result validate_utf16le_with_errors( + const char16_t *, size_t) const noexcept final override { return result(error_code::OTHER, 0); } - simdutf_warn_unused result validate_utf16be_with_errors(const char16_t*, size_t) const noexcept final override { + simdutf_warn_unused result validate_utf16be_with_errors( + const char16_t *, size_t) const noexcept final override { return result(error_code::OTHER, 0); } - simdutf_warn_unused bool validate_utf32(const char32_t*, size_t) const noexcept final override { + simdutf_warn_unused bool + validate_utf32(const char32_t *, size_t) const noexcept final override { return false; } - simdutf_warn_unused result validate_utf32_with_errors(const char32_t*, size_t) const noexcept final override { + simdutf_warn_unused result validate_utf32_with_errors( + const char32_t *, size_t) const noexcept final override { return result(error_code::OTHER, 0); } - simdutf_warn_unused size_t convert_latin1_to_utf8(const char*, size_t, char*) const noexcept final override { + simdutf_warn_unused size_t convert_latin1_to_utf8( + const char *, size_t, char *) const noexcept final override { return 0; } - simdutf_warn_unused size_t convert_latin1_to_utf16le(const char*, size_t, char16_t*) const noexcept final override { + simdutf_warn_unused size_t convert_latin1_to_utf16le( + const char *, size_t, char16_t *) const noexcept final override { return 0; } - simdutf_warn_unused size_t convert_latin1_to_utf16be(const char*, size_t, char16_t*) const noexcept final override { + simdutf_warn_unused size_t convert_latin1_to_utf16be( + const char *, size_t, char16_t *) const noexcept final override { return 0; } - simdutf_warn_unused size_t convert_latin1_to_utf32(const char*, size_t, char32_t*) const noexcept final override { + simdutf_warn_unused size_t convert_latin1_to_utf32( + const char *, size_t, char32_t *) const noexcept final override { return 0; } - simdutf_warn_unused size_t convert_utf8_to_latin1(const char*, size_t, char*) const noexcept final override { + simdutf_warn_unused size_t convert_utf8_to_latin1( + const char *, size_t, char *) const noexcept final override { return 0; } - simdutf_warn_unused result convert_utf8_to_latin1_with_errors(const char*, size_t, char*) const noexcept final override { + simdutf_warn_unused result convert_utf8_to_latin1_with_errors( + const char *, size_t, char *) const noexcept final override { return result(error_code::OTHER, 0); } - simdutf_warn_unused size_t convert_valid_utf8_to_latin1(const char*, size_t, char*) const noexcept final override { + simdutf_warn_unused size_t convert_valid_utf8_to_latin1( + const char *, size_t, char *) const noexcept final override { return 0; } - simdutf_warn_unused size_t convert_utf8_to_utf16le(const char*, size_t, char16_t*) const noexcept final override { + simdutf_warn_unused size_t convert_utf8_to_utf16le( + const char *, size_t, char16_t *) const noexcept final override { return 0; } - simdutf_warn_unused size_t convert_utf8_to_utf16be(const char*, size_t, char16_t*) const noexcept final override { + simdutf_warn_unused size_t convert_utf8_to_utf16be( + const char *, size_t, char16_t *) const noexcept final override { return 0; } - simdutf_warn_unused result convert_utf8_to_utf16le_with_errors(const char*, size_t, char16_t*) const noexcept final override { + simdutf_warn_unused result convert_utf8_to_utf16le_with_errors( + const char *, size_t, char16_t *) const noexcept final override { return result(error_code::OTHER, 0); } - simdutf_warn_unused result convert_utf8_to_utf16be_with_errors(const char*, size_t, char16_t*) const noexcept final override { + simdutf_warn_unused result convert_utf8_to_utf16be_with_errors( + const char *, size_t, char16_t *) const noexcept final override { return result(error_code::OTHER, 0); } - simdutf_warn_unused size_t convert_valid_utf8_to_utf16le(const char*, size_t, char16_t*) const noexcept final override { + simdutf_warn_unused size_t convert_valid_utf8_to_utf16le( + const char *, size_t, char16_t *) const noexcept final override { return 0; } - simdutf_warn_unused size_t convert_valid_utf8_to_utf16be(const char*, size_t, char16_t*) const noexcept final override { + simdutf_warn_unused size_t convert_valid_utf8_to_utf16be( + const char *, size_t, char16_t *) const noexcept final override { return 0; } - simdutf_warn_unused size_t convert_utf8_to_utf32(const char*, size_t, char32_t*) const noexcept final override { + simdutf_warn_unused size_t convert_utf8_to_utf32( + const char *, size_t, char32_t *) const noexcept final override { return 0; } - simdutf_warn_unused result convert_utf8_to_utf32_with_errors(const char*, size_t, char32_t*) const noexcept final override { + simdutf_warn_unused result convert_utf8_to_utf32_with_errors( + const char *, size_t, char32_t *) const noexcept final override { return result(error_code::OTHER, 0); } - simdutf_warn_unused size_t convert_valid_utf8_to_utf32(const char*, size_t, char32_t*) const noexcept final override { + simdutf_warn_unused size_t convert_valid_utf8_to_utf32( + const char *, size_t, char32_t *) const noexcept final override { return 0; } - simdutf_warn_unused size_t convert_utf16le_to_latin1(const char16_t*, size_t, char*) const noexcept final override { + simdutf_warn_unused size_t convert_utf16le_to_latin1( + const char16_t *, size_t, char *) const noexcept final override { return 0; } - simdutf_warn_unused size_t convert_utf16be_to_latin1(const char16_t*, size_t, char*) const noexcept final override { + simdutf_warn_unused size_t convert_utf16be_to_latin1( + const char16_t *, size_t, char *) const noexcept final override { return 0; } - simdutf_warn_unused result convert_utf16le_to_latin1_with_errors(const char16_t*, size_t, char*) const noexcept final override { + simdutf_warn_unused result convert_utf16le_to_latin1_with_errors( + const char16_t *, size_t, char *) const noexcept final override { return result(error_code::OTHER, 0); } - simdutf_warn_unused result convert_utf16be_to_latin1_with_errors(const char16_t*, size_t, char*) const noexcept final override { + simdutf_warn_unused result convert_utf16be_to_latin1_with_errors( + const char16_t *, size_t, char *) const noexcept final override { return result(error_code::OTHER, 0); } - simdutf_warn_unused size_t convert_valid_utf16le_to_latin1(const char16_t*, size_t, char*) const noexcept final override { + simdutf_warn_unused size_t convert_valid_utf16le_to_latin1( + const char16_t *, size_t, char *) const noexcept final override { return 0; } - simdutf_warn_unused size_t convert_valid_utf16be_to_latin1(const char16_t*, size_t, char*) const noexcept final override { + simdutf_warn_unused size_t convert_valid_utf16be_to_latin1( + const char16_t *, size_t, char *) const noexcept final override { return 0; } - simdutf_warn_unused size_t convert_utf16le_to_utf8(const char16_t*, size_t, char*) const noexcept final override { + simdutf_warn_unused size_t convert_utf16le_to_utf8( + const char16_t *, size_t, char *) const noexcept final override { return 0; } - simdutf_warn_unused size_t convert_utf16be_to_utf8(const char16_t*, size_t, char*) const noexcept final override { + simdutf_warn_unused size_t convert_utf16be_to_utf8( + const char16_t *, size_t, char *) const noexcept final override { return 0; } - simdutf_warn_unused result convert_utf16le_to_utf8_with_errors(const char16_t*, size_t, char*) const noexcept final override { + simdutf_warn_unused result convert_utf16le_to_utf8_with_errors( + const char16_t *, size_t, char *) const noexcept final override { return result(error_code::OTHER, 0); } - simdutf_warn_unused result convert_utf16be_to_utf8_with_errors(const char16_t*, size_t, char*) const noexcept final override { + simdutf_warn_unused result convert_utf16be_to_utf8_with_errors( + const char16_t *, size_t, char *) const noexcept final override { return result(error_code::OTHER, 0); } - simdutf_warn_unused size_t convert_valid_utf16le_to_utf8(const char16_t*, size_t, char*) const noexcept final override { + simdutf_warn_unused size_t convert_valid_utf16le_to_utf8( + const char16_t *, size_t, char *) const noexcept final override { return 0; } - simdutf_warn_unused size_t convert_valid_utf16be_to_utf8(const char16_t*, size_t, char*) const noexcept final override { + simdutf_warn_unused size_t convert_valid_utf16be_to_utf8( + const char16_t *, size_t, char *) const noexcept final override { return 0; } - simdutf_warn_unused size_t convert_utf32_to_latin1(const char32_t *, size_t, char* ) const noexcept final override { + simdutf_warn_unused size_t convert_utf32_to_latin1( + const char32_t *, size_t, char *) const noexcept final override { return 0; } - simdutf_warn_unused result convert_utf32_to_latin1_with_errors(const char32_t *, size_t, char* ) const noexcept final override { + simdutf_warn_unused result convert_utf32_to_latin1_with_errors( + const char32_t *, size_t, char *) const noexcept final override { return result(error_code::OTHER, 0); } - simdutf_warn_unused size_t convert_valid_utf32_to_latin1(const char32_t *, size_t, char* ) const noexcept final override { + simdutf_warn_unused size_t convert_valid_utf32_to_latin1( + const char32_t *, size_t, char *) const noexcept final override { return 0; } - simdutf_warn_unused size_t convert_utf32_to_utf8(const char32_t*, size_t, char*) const noexcept final override { + simdutf_warn_unused size_t convert_utf32_to_utf8( + const char32_t *, size_t, char *) const noexcept final override { return 0; } - simdutf_warn_unused result convert_utf32_to_utf8_with_errors(const char32_t*, size_t, char*) const noexcept final override { + simdutf_warn_unused result convert_utf32_to_utf8_with_errors( + const char32_t *, size_t, char *) const noexcept final override { return result(error_code::OTHER, 0); } - simdutf_warn_unused size_t convert_valid_utf32_to_utf8(const char32_t*, size_t, char*) const noexcept final override { + simdutf_warn_unused size_t convert_valid_utf32_to_utf8( + const char32_t *, size_t, char *) const noexcept final override { return 0; } - simdutf_warn_unused size_t convert_utf32_to_utf16le(const char32_t*, size_t, char16_t*) const noexcept final override { + simdutf_warn_unused size_t convert_utf32_to_utf16le( + const char32_t *, size_t, char16_t *) const noexcept final override { return 0; } - simdutf_warn_unused size_t convert_utf32_to_utf16be(const char32_t*, size_t, char16_t*) const noexcept final override { + simdutf_warn_unused size_t convert_utf32_to_utf16be( + const char32_t *, size_t, char16_t *) const noexcept final override { return 0; } - simdutf_warn_unused result convert_utf32_to_utf16le_with_errors(const char32_t*, size_t, char16_t*) const noexcept final override { + simdutf_warn_unused result convert_utf32_to_utf16le_with_errors( + const char32_t *, size_t, char16_t *) const noexcept final override { return result(error_code::OTHER, 0); } - simdutf_warn_unused result convert_utf32_to_utf16be_with_errors(const char32_t*, size_t, char16_t*) const noexcept final override { + simdutf_warn_unused result convert_utf32_to_utf16be_with_errors( + const char32_t *, size_t, char16_t *) const noexcept final override { return result(error_code::OTHER, 0); } - simdutf_warn_unused size_t convert_valid_utf32_to_utf16le(const char32_t*, size_t, char16_t*) const noexcept final override { + simdutf_warn_unused size_t convert_valid_utf32_to_utf16le( + const char32_t *, size_t, char16_t *) const noexcept final override { return 0; } - simdutf_warn_unused size_t convert_valid_utf32_to_utf16be(const char32_t*, size_t, char16_t*) const noexcept final override { + simdutf_warn_unused size_t convert_valid_utf32_to_utf16be( + const char32_t *, size_t, char16_t *) const noexcept final override { return 0; } - simdutf_warn_unused size_t convert_utf16le_to_utf32(const char16_t*, size_t, char32_t*) const noexcept final override { + simdutf_warn_unused size_t convert_utf16le_to_utf32( + const char16_t *, size_t, char32_t *) const noexcept final override { return 0; } - simdutf_warn_unused size_t convert_utf16be_to_utf32(const char16_t*, size_t, char32_t*) const noexcept final override { + simdutf_warn_unused size_t convert_utf16be_to_utf32( + const char16_t *, size_t, char32_t *) const noexcept final override { return 0; } - simdutf_warn_unused result convert_utf16le_to_utf32_with_errors(const char16_t*, size_t, char32_t*) const noexcept final override { + simdutf_warn_unused result convert_utf16le_to_utf32_with_errors( + const char16_t *, size_t, char32_t *) const noexcept final override { return result(error_code::OTHER, 0); } - simdutf_warn_unused result convert_utf16be_to_utf32_with_errors(const char16_t*, size_t, char32_t*) const noexcept final override { + simdutf_warn_unused result convert_utf16be_to_utf32_with_errors( + const char16_t *, size_t, char32_t *) const noexcept final override { return result(error_code::OTHER, 0); } - simdutf_warn_unused size_t convert_valid_utf16le_to_utf32(const char16_t*, size_t, char32_t*) const noexcept final override { + simdutf_warn_unused size_t convert_valid_utf16le_to_utf32( + const char16_t *, size_t, char32_t *) const noexcept final override { return 0; } - simdutf_warn_unused size_t convert_valid_utf16be_to_utf32(const char16_t*, size_t, char32_t*) const noexcept final override { + simdutf_warn_unused size_t convert_valid_utf16be_to_utf32( + const char16_t *, size_t, char32_t *) const noexcept final override { return 0; } - void change_endianness_utf16(const char16_t *, size_t, char16_t *) const noexcept final override { + void change_endianness_utf16(const char16_t *, size_t, + char16_t *) const noexcept final override {} - } - - simdutf_warn_unused size_t count_utf16le(const char16_t *, size_t) const noexcept final override { + simdutf_warn_unused size_t + count_utf16le(const char16_t *, size_t) const noexcept final override { return 0; } - simdutf_warn_unused size_t count_utf16be(const char16_t *, size_t) const noexcept final override { + simdutf_warn_unused size_t + count_utf16be(const char16_t *, size_t) const noexcept final override { return 0; } - simdutf_warn_unused size_t count_utf8(const char *, size_t) const noexcept final override { + simdutf_warn_unused size_t count_utf8(const char *, + size_t) const noexcept final override { return 0; } - simdutf_warn_unused size_t latin1_length_from_utf8(const char *, size_t) const noexcept override { + simdutf_warn_unused size_t + latin1_length_from_utf8(const char *, size_t) const noexcept override { return 0; } - simdutf_warn_unused size_t latin1_length_from_utf16(size_t) const noexcept override { + simdutf_warn_unused size_t + latin1_length_from_utf16(size_t) const noexcept override { return 0; } - simdutf_warn_unused size_t latin1_length_from_utf32(size_t) const noexcept override { + simdutf_warn_unused size_t + latin1_length_from_utf32(size_t) const noexcept override { return 0; } - simdutf_warn_unused size_t utf8_length_from_latin1(const char *, size_t) const noexcept override { + simdutf_warn_unused size_t + utf8_length_from_latin1(const char *, size_t) const noexcept override { return 0; } - simdutf_warn_unused size_t utf8_length_from_utf16le(const char16_t *, size_t) const noexcept override { + simdutf_warn_unused size_t + utf8_length_from_utf16le(const char16_t *, size_t) const noexcept override { return 0; } - simdutf_warn_unused size_t utf8_length_from_utf16be(const char16_t *, size_t) const noexcept override { + simdutf_warn_unused size_t + utf8_length_from_utf16be(const char16_t *, size_t) const noexcept override { return 0; } - simdutf_warn_unused size_t utf32_length_from_utf16le(const char16_t *, size_t) const noexcept override { + simdutf_warn_unused size_t + utf32_length_from_utf16le(const char16_t *, size_t) const noexcept override { return 0; } - simdutf_warn_unused size_t utf32_length_from_utf16be(const char16_t *, size_t) const noexcept override { + simdutf_warn_unused size_t + utf32_length_from_utf16be(const char16_t *, size_t) const noexcept override { return 0; } - simdutf_warn_unused size_t utf32_length_from_latin1(size_t) const noexcept override { + simdutf_warn_unused size_t + utf32_length_from_latin1(size_t) const noexcept override { return 0; } - simdutf_warn_unused size_t utf16_length_from_utf8(const char *, size_t) const noexcept override { + simdutf_warn_unused size_t + utf16_length_from_utf8(const char *, size_t) const noexcept override { return 0; } - simdutf_warn_unused size_t utf16_length_from_latin1(size_t) const noexcept override { + simdutf_warn_unused size_t + utf16_length_from_latin1(size_t) const noexcept override { return 0; } - simdutf_warn_unused size_t utf8_length_from_utf32(const char32_t *, size_t) const noexcept override { + simdutf_warn_unused size_t + utf8_length_from_utf32(const char32_t *, size_t) const noexcept override { return 0; } - simdutf_warn_unused size_t utf16_length_from_utf32(const char32_t *, size_t) const noexcept override { + simdutf_warn_unused size_t + utf16_length_from_utf32(const char32_t *, size_t) const noexcept override { return 0; } - simdutf_warn_unused size_t utf32_length_from_utf8(const char *, size_t) const noexcept override { + simdutf_warn_unused size_t + utf32_length_from_utf8(const char *, size_t) const noexcept override { return 0; } - simdutf_warn_unused size_t maximal_binary_length_from_base64(const char *, size_t) const noexcept override { + simdutf_warn_unused size_t maximal_binary_length_from_base64( + const char *, size_t) const noexcept override { return 0; } - simdutf_warn_unused result base64_to_binary(const char *, size_t, char*, base64_options) const noexcept override { + simdutf_warn_unused result + base64_to_binary(const char *, size_t, char *, base64_options, + last_chunk_handling_options) const noexcept override { return result(error_code::OTHER, 0); } - simdutf_warn_unused size_t maximal_binary_length_from_base64(const char16_t *, size_t) const noexcept override { + simdutf_warn_unused size_t maximal_binary_length_from_base64( + const char16_t *, size_t) const noexcept override { return 0; } - simdutf_warn_unused result base64_to_binary(const char16_t *, size_t, char*, base64_options) const noexcept override { + simdutf_warn_unused result + base64_to_binary(const char16_t *, size_t, char *, base64_options, + last_chunk_handling_options) const noexcept override { return result(error_code::OTHER, 0); } - - simdutf_warn_unused size_t base64_length_from_binary(size_t, base64_options) const noexcept override { + simdutf_warn_unused size_t + base64_length_from_binary(size_t, base64_options) const noexcept override { return 0; } - size_t binary_to_base64(const char *, size_t, char*, base64_options) const noexcept override { + size_t binary_to_base64(const char *, size_t, char *, + base64_options) const noexcept override { return 0; } - unsupported_implementation() : implementation("unsupported", "Unsupported CPU (no detected SIMD instructions)", 0) {} + unsupported_implementation() + : implementation("unsupported", + "Unsupported CPU (no detected SIMD instructions)", 0) {} }; -const unsupported_implementation* get_unsupported_singleton() { - static const unsupported_implementation unsupported_singleton{}; - return &unsupported_singleton; +const unsupported_implementation *get_unsupported_singleton() { + static const unsupported_implementation unsupported_singleton{}; + return &unsupported_singleton; } -static_assert(std::is_trivially_destructible::value, "unsupported_singleton should be trivially destructible"); +static_assert(std::is_trivially_destructible::value, + "unsupported_singleton should be trivially destructible"); size_t available_implementation_list::size() const noexcept { return internal::get_available_implementation_pointers().size(); } -const implementation * const *available_implementation_list::begin() const noexcept { +const implementation *const * +available_implementation_list::begin() const noexcept { return internal::get_available_implementation_pointers().begin(); } -const implementation * const *available_implementation_list::end() const noexcept { +const implementation *const * +available_implementation_list::end() const noexcept { return internal::get_available_implementation_pointers().end(); } -const implementation *available_implementation_list::detect_best_supported() const noexcept { +const implementation * +available_implementation_list::detect_best_supported() const noexcept { // They are prelisted in priority order, so we just go down the list - uint32_t supported_instruction_sets = internal::detect_supported_architectures(); - for (const implementation *impl : internal::get_available_implementation_pointers()) { + uint32_t supported_instruction_sets = + internal::detect_supported_architectures(); + for (const implementation *impl : + internal::get_available_implementation_pointers()) { uint32_t required_instruction_sets = impl->required_instruction_sets(); - if ((supported_instruction_sets & required_instruction_sets) == required_instruction_sets) { return impl; } + if ((supported_instruction_sets & required_instruction_sets) == + required_instruction_sets) { + return impl; + } } return get_unsupported_singleton(); // this should never happen? } -const implementation *detect_best_supported_implementation_on_first_use::set_best() const noexcept { +const implementation * +detect_best_supported_implementation_on_first_use::set_best() const noexcept { SIMDUTF_PUSH_DISABLE_WARNINGS - SIMDUTF_DISABLE_DEPRECATED_WARNING // Disable CRT_SECURE warning on MSVC: manually verified this is safe - char *force_implementation_name = getenv("SIMDUTF_FORCE_IMPLEMENTATION"); + SIMDUTF_DISABLE_DEPRECATED_WARNING // Disable CRT_SECURE warning on MSVC: + // manually verified this is safe + char *force_implementation_name = getenv("SIMDUTF_FORCE_IMPLEMENTATION"); SIMDUTF_POP_DISABLE_WARNINGS if (force_implementation_name) { - auto force_implementation = get_available_implementations()[force_implementation_name]; + auto force_implementation = + get_available_implementations()[force_implementation_name]; if (force_implementation) { return get_active_implementation() = force_implementation; } else { @@ -6856,43 +8784,47 @@ const implementation *detect_best_supported_implementation_on_first_use::set_bes return get_active_implementation() = get_unsupported_singleton(); } } - return get_active_implementation() = get_available_implementations().detect_best_supported(); + return get_active_implementation() = + get_available_implementations().detect_best_supported(); } } // namespace internal - - /** * The list of available implementations compiled into simdutf. */ -SIMDUTF_DLLIMPORTEXPORT const internal::available_implementation_list& get_available_implementations() { - static const internal::available_implementation_list available_implementations{}; +SIMDUTF_DLLIMPORTEXPORT const internal::available_implementation_list & +get_available_implementations() { + static const internal::available_implementation_list + available_implementations{}; return available_implementations; } /** * The active implementation. */ -SIMDUTF_DLLIMPORTEXPORT internal::atomic_ptr& get_active_implementation() { +SIMDUTF_DLLIMPORTEXPORT internal::atomic_ptr & +get_active_implementation() { #if SIMDUTF_SINGLE_IMPLEMENTATION - // skip runtime detection - static internal::atomic_ptr active_implementation{internal::get_single_implementation()}; - return active_implementation; + // skip runtime detection + static internal::atomic_ptr active_implementation{ + internal::get_single_implementation()}; + return active_implementation; #else - static const internal::detect_best_supported_implementation_on_first_use detect_best_supported_implementation_on_first_use_singleton; - static internal::atomic_ptr active_implementation{&detect_best_supported_implementation_on_first_use_singleton}; - return active_implementation; + static const internal::detect_best_supported_implementation_on_first_use + detect_best_supported_implementation_on_first_use_singleton; + static internal::atomic_ptr active_implementation{ + &detect_best_supported_implementation_on_first_use_singleton}; + return active_implementation; #endif } - #if SIMDUTF_SINGLE_IMPLEMENTATION -const implementation * get_default_implementation() { +const implementation *get_default_implementation() { return internal::get_single_implementation(); } #else -internal::atomic_ptr& get_default_implementation() { +internal::atomic_ptr &get_default_implementation() { return get_active_implementation(); } #endif @@ -6901,311 +8833,435 @@ internal::atomic_ptr& get_default_implementation() { simdutf_warn_unused bool validate_utf8(const char *buf, size_t len) noexcept { return get_default_implementation()->validate_utf8(buf, len); } -simdutf_warn_unused result validate_utf8_with_errors(const char *buf, size_t len) noexcept { +simdutf_warn_unused result validate_utf8_with_errors(const char *buf, + size_t len) noexcept { return get_default_implementation()->validate_utf8_with_errors(buf, len); } simdutf_warn_unused bool validate_ascii(const char *buf, size_t len) noexcept { return get_default_implementation()->validate_ascii(buf, len); } -simdutf_warn_unused result validate_ascii_with_errors(const char *buf, size_t len) noexcept { +simdutf_warn_unused result validate_ascii_with_errors(const char *buf, + size_t len) noexcept { return get_default_implementation()->validate_ascii_with_errors(buf, len); } -simdutf_warn_unused size_t convert_utf8_to_utf16(const char * input, size_t length, char16_t* utf16_output) noexcept { - #if SIMDUTF_IS_BIG_ENDIAN +simdutf_warn_unused size_t convert_utf8_to_utf16( + const char *input, size_t length, char16_t *utf16_output) noexcept { +#if SIMDUTF_IS_BIG_ENDIAN return convert_utf8_to_utf16be(input, length, utf16_output); - #else +#else return convert_utf8_to_utf16le(input, length, utf16_output); - #endif -} -simdutf_warn_unused size_t convert_latin1_to_utf8(const char * buf, size_t len, char* utf8_output) noexcept { - return get_default_implementation()->convert_latin1_to_utf8(buf, len,utf8_output); -} -simdutf_warn_unused size_t convert_latin1_to_utf16le(const char * buf, size_t len, char16_t* utf16_output) noexcept { - return get_default_implementation()->convert_latin1_to_utf16le(buf, len, utf16_output); -} -simdutf_warn_unused size_t convert_latin1_to_utf16be(const char * buf, size_t len, char16_t* utf16_output) noexcept{ - return get_default_implementation()->convert_latin1_to_utf16be(buf, len, utf16_output); -} -simdutf_warn_unused size_t convert_latin1_to_utf32(const char * buf, size_t len, char32_t * latin1_output) noexcept { - return get_default_implementation()->convert_latin1_to_utf32(buf, len,latin1_output); -} -simdutf_warn_unused size_t convert_utf8_to_latin1(const char * buf, size_t len, char* latin1_output) noexcept { - return get_default_implementation()->convert_utf8_to_latin1(buf, len,latin1_output); -} -simdutf_warn_unused result convert_utf8_to_latin1_with_errors(const char* buf, size_t len, char* latin1_output) noexcept { - return get_default_implementation()->convert_utf8_to_latin1_with_errors(buf, len, latin1_output); -} -simdutf_warn_unused size_t convert_valid_utf8_to_latin1(const char * buf, size_t len, char* latin1_output) noexcept { - return get_default_implementation()->convert_valid_utf8_to_latin1(buf, len,latin1_output); -} -simdutf_warn_unused size_t convert_utf8_to_utf16le(const char * input, size_t length, char16_t* utf16_output) noexcept { - return get_default_implementation()->convert_utf8_to_utf16le(input, length, utf16_output); -} -simdutf_warn_unused size_t convert_utf8_to_utf16be(const char * input, size_t length, char16_t* utf16_output) noexcept { - return get_default_implementation()->convert_utf8_to_utf16be(input, length, utf16_output); +#endif } -simdutf_warn_unused result convert_utf8_to_utf16_with_errors(const char * input, size_t length, char16_t* utf16_output) noexcept { - #if SIMDUTF_IS_BIG_ENDIAN +simdutf_warn_unused size_t convert_latin1_to_utf8(const char *buf, size_t len, + char *utf8_output) noexcept { + return get_default_implementation()->convert_latin1_to_utf8(buf, len, + utf8_output); +} +simdutf_warn_unused size_t convert_latin1_to_utf16le( + const char *buf, size_t len, char16_t *utf16_output) noexcept { + return get_default_implementation()->convert_latin1_to_utf16le(buf, len, + utf16_output); +} +simdutf_warn_unused size_t convert_latin1_to_utf16be( + const char *buf, size_t len, char16_t *utf16_output) noexcept { + return get_default_implementation()->convert_latin1_to_utf16be(buf, len, + utf16_output); +} +simdutf_warn_unused size_t convert_latin1_to_utf32( + const char *buf, size_t len, char32_t *latin1_output) noexcept { + return get_default_implementation()->convert_latin1_to_utf32(buf, len, + latin1_output); +} +simdutf_warn_unused size_t convert_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) noexcept { + return get_default_implementation()->convert_utf8_to_latin1(buf, len, + latin1_output); +} +simdutf_warn_unused result convert_utf8_to_latin1_with_errors( + const char *buf, size_t len, char *latin1_output) noexcept { + return get_default_implementation()->convert_utf8_to_latin1_with_errors( + buf, len, latin1_output); +} +simdutf_warn_unused size_t convert_valid_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) noexcept { + return get_default_implementation()->convert_valid_utf8_to_latin1( + buf, len, latin1_output); +} +simdutf_warn_unused size_t convert_utf8_to_utf16le( + const char *input, size_t length, char16_t *utf16_output) noexcept { + return get_default_implementation()->convert_utf8_to_utf16le(input, length, + utf16_output); +} +simdutf_warn_unused size_t convert_utf8_to_utf16be( + const char *input, size_t length, char16_t *utf16_output) noexcept { + return get_default_implementation()->convert_utf8_to_utf16be(input, length, + utf16_output); +} +simdutf_warn_unused result convert_utf8_to_utf16_with_errors( + const char *input, size_t length, char16_t *utf16_output) noexcept { +#if SIMDUTF_IS_BIG_ENDIAN return convert_utf8_to_utf16be_with_errors(input, length, utf16_output); - #else +#else return convert_utf8_to_utf16le_with_errors(input, length, utf16_output); - #endif +#endif } -simdutf_warn_unused result convert_utf8_to_utf16le_with_errors(const char * input, size_t length, char16_t* utf16_output) noexcept { - return get_default_implementation()->convert_utf8_to_utf16le_with_errors(input, length, utf16_output); +simdutf_warn_unused result convert_utf8_to_utf16le_with_errors( + const char *input, size_t length, char16_t *utf16_output) noexcept { + return get_default_implementation()->convert_utf8_to_utf16le_with_errors( + input, length, utf16_output); } -simdutf_warn_unused result convert_utf8_to_utf16be_with_errors(const char * input, size_t length, char16_t* utf16_output) noexcept { - return get_default_implementation()->convert_utf8_to_utf16be_with_errors(input, length, utf16_output); +simdutf_warn_unused result convert_utf8_to_utf16be_with_errors( + const char *input, size_t length, char16_t *utf16_output) noexcept { + return get_default_implementation()->convert_utf8_to_utf16be_with_errors( + input, length, utf16_output); } -simdutf_warn_unused size_t convert_utf8_to_utf32(const char * input, size_t length, char32_t* utf32_output) noexcept { - return get_default_implementation()->convert_utf8_to_utf32(input, length, utf32_output); +simdutf_warn_unused size_t convert_utf8_to_utf32( + const char *input, size_t length, char32_t *utf32_output) noexcept { + return get_default_implementation()->convert_utf8_to_utf32(input, length, + utf32_output); } -simdutf_warn_unused result convert_utf8_to_utf32_with_errors(const char * input, size_t length, char32_t* utf32_output) noexcept { - return get_default_implementation()->convert_utf8_to_utf32_with_errors(input, length, utf32_output); +simdutf_warn_unused result convert_utf8_to_utf32_with_errors( + const char *input, size_t length, char32_t *utf32_output) noexcept { + return get_default_implementation()->convert_utf8_to_utf32_with_errors( + input, length, utf32_output); } -simdutf_warn_unused bool validate_utf16(const char16_t * buf, size_t len) noexcept { - #if SIMDUTF_IS_BIG_ENDIAN +simdutf_warn_unused bool validate_utf16(const char16_t *buf, + size_t len) noexcept { +#if SIMDUTF_IS_BIG_ENDIAN return validate_utf16be(buf, len); - #else +#else return validate_utf16le(buf, len); - #endif +#endif } -simdutf_warn_unused bool validate_utf16le(const char16_t * buf, size_t len) noexcept { +simdutf_warn_unused bool validate_utf16le(const char16_t *buf, + size_t len) noexcept { return get_default_implementation()->validate_utf16le(buf, len); } -simdutf_warn_unused bool validate_utf16be(const char16_t * buf, size_t len) noexcept { +simdutf_warn_unused bool validate_utf16be(const char16_t *buf, + size_t len) noexcept { return get_default_implementation()->validate_utf16be(buf, len); } -simdutf_warn_unused result validate_utf16_with_errors(const char16_t * buf, size_t len) noexcept { - #if SIMDUTF_IS_BIG_ENDIAN +simdutf_warn_unused result validate_utf16_with_errors(const char16_t *buf, + size_t len) noexcept { +#if SIMDUTF_IS_BIG_ENDIAN return validate_utf16be_with_errors(buf, len); - #else +#else return validate_utf16le_with_errors(buf, len); - #endif +#endif } -simdutf_warn_unused result validate_utf16le_with_errors(const char16_t * buf, size_t len) noexcept { +simdutf_warn_unused result validate_utf16le_with_errors(const char16_t *buf, + size_t len) noexcept { return get_default_implementation()->validate_utf16le_with_errors(buf, len); } -simdutf_warn_unused result validate_utf16be_with_errors(const char16_t * buf, size_t len) noexcept { +simdutf_warn_unused result validate_utf16be_with_errors(const char16_t *buf, + size_t len) noexcept { return get_default_implementation()->validate_utf16be_with_errors(buf, len); } -simdutf_warn_unused bool validate_utf32(const char32_t * buf, size_t len) noexcept { +simdutf_warn_unused bool validate_utf32(const char32_t *buf, + size_t len) noexcept { return get_default_implementation()->validate_utf32(buf, len); } -simdutf_warn_unused result validate_utf32_with_errors(const char32_t * buf, size_t len) noexcept { +simdutf_warn_unused result validate_utf32_with_errors(const char32_t *buf, + size_t len) noexcept { return get_default_implementation()->validate_utf32_with_errors(buf, len); } -simdutf_warn_unused size_t convert_valid_utf8_to_utf16(const char * input, size_t length, char16_t* utf16_buffer) noexcept { - #if SIMDUTF_IS_BIG_ENDIAN +simdutf_warn_unused size_t convert_valid_utf8_to_utf16( + const char *input, size_t length, char16_t *utf16_buffer) noexcept { +#if SIMDUTF_IS_BIG_ENDIAN return convert_valid_utf8_to_utf16be(input, length, utf16_buffer); - #else +#else return convert_valid_utf8_to_utf16le(input, length, utf16_buffer); - #endif +#endif } -simdutf_warn_unused size_t convert_valid_utf8_to_utf16le(const char * input, size_t length, char16_t* utf16_buffer) noexcept { - return get_default_implementation()->convert_valid_utf8_to_utf16le(input, length, utf16_buffer); +simdutf_warn_unused size_t convert_valid_utf8_to_utf16le( + const char *input, size_t length, char16_t *utf16_buffer) noexcept { + return get_default_implementation()->convert_valid_utf8_to_utf16le( + input, length, utf16_buffer); } -simdutf_warn_unused size_t convert_valid_utf8_to_utf16be(const char * input, size_t length, char16_t* utf16_buffer) noexcept { - return get_default_implementation()->convert_valid_utf8_to_utf16be(input, length, utf16_buffer); +simdutf_warn_unused size_t convert_valid_utf8_to_utf16be( + const char *input, size_t length, char16_t *utf16_buffer) noexcept { + return get_default_implementation()->convert_valid_utf8_to_utf16be( + input, length, utf16_buffer); } -simdutf_warn_unused size_t convert_valid_utf8_to_utf32(const char * input, size_t length, char32_t* utf32_buffer) noexcept { - return get_default_implementation()->convert_valid_utf8_to_utf32(input, length, utf32_buffer); +simdutf_warn_unused size_t convert_valid_utf8_to_utf32( + const char *input, size_t length, char32_t *utf32_buffer) noexcept { + return get_default_implementation()->convert_valid_utf8_to_utf32( + input, length, utf32_buffer); } -simdutf_warn_unused size_t convert_utf16_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) noexcept { - #if SIMDUTF_IS_BIG_ENDIAN +simdutf_warn_unused size_t convert_utf16_to_utf8(const char16_t *buf, + size_t len, + char *utf8_buffer) noexcept { +#if SIMDUTF_IS_BIG_ENDIAN return convert_utf16be_to_utf8(buf, len, utf8_buffer); - #else +#else return convert_utf16le_to_utf8(buf, len, utf8_buffer); - #endif +#endif } -simdutf_warn_unused size_t convert_utf16_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) noexcept { - #if SIMDUTF_IS_BIG_ENDIAN +simdutf_warn_unused size_t convert_utf16_to_latin1( + const char16_t *buf, size_t len, char *latin1_buffer) noexcept { +#if SIMDUTF_IS_BIG_ENDIAN return convert_utf16be_to_latin1(buf, len, latin1_buffer); - #else +#else return convert_utf16le_to_latin1(buf, len, latin1_buffer); - #endif +#endif } -simdutf_warn_unused size_t convert_latin1_to_utf16(const char * buf, size_t len, char16_t* utf16_output) noexcept { - #if SIMDUTF_IS_BIG_ENDIAN +simdutf_warn_unused size_t convert_latin1_to_utf16( + const char *buf, size_t len, char16_t *utf16_output) noexcept { +#if SIMDUTF_IS_BIG_ENDIAN return convert_latin1_to_utf16be(buf, len, utf16_output); - #else +#else return convert_latin1_to_utf16le(buf, len, utf16_output); - #endif -} -simdutf_warn_unused size_t convert_utf16be_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) noexcept { - return get_default_implementation()->convert_utf16be_to_latin1(buf, len, latin1_buffer); -} -simdutf_warn_unused size_t convert_utf16le_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) noexcept { - return get_default_implementation()->convert_utf16le_to_latin1(buf, len, latin1_buffer); -} -simdutf_warn_unused size_t convert_valid_utf16be_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) noexcept { - return get_default_implementation()->convert_valid_utf16be_to_latin1(buf, len, latin1_buffer); -} -simdutf_warn_unused size_t convert_valid_utf16le_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) noexcept { - return get_default_implementation()->convert_valid_utf16le_to_latin1(buf, len, latin1_buffer); -} -simdutf_warn_unused result convert_utf16le_to_latin1_with_errors(const char16_t * buf, size_t len, char* latin1_buffer) noexcept { - return get_default_implementation()->convert_utf16le_to_latin1_with_errors(buf, len, latin1_buffer); -} -simdutf_warn_unused result convert_utf16be_to_latin1_with_errors(const char16_t * buf, size_t len, char* latin1_buffer) noexcept { - return get_default_implementation()->convert_utf16be_to_latin1_with_errors(buf, len, latin1_buffer); -} -simdutf_warn_unused size_t convert_utf16le_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) noexcept { - return get_default_implementation()->convert_utf16le_to_utf8(buf, len, utf8_buffer); -} -simdutf_warn_unused size_t convert_utf16be_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) noexcept { - return get_default_implementation()->convert_utf16be_to_utf8(buf, len, utf8_buffer); +#endif } -simdutf_warn_unused result convert_utf16_to_utf8_with_errors(const char16_t * buf, size_t len, char* utf8_buffer) noexcept { - #if SIMDUTF_IS_BIG_ENDIAN +simdutf_warn_unused size_t convert_utf16be_to_latin1( + const char16_t *buf, size_t len, char *latin1_buffer) noexcept { + return get_default_implementation()->convert_utf16be_to_latin1(buf, len, + latin1_buffer); +} +simdutf_warn_unused size_t convert_utf16le_to_latin1( + const char16_t *buf, size_t len, char *latin1_buffer) noexcept { + return get_default_implementation()->convert_utf16le_to_latin1(buf, len, + latin1_buffer); +} +simdutf_warn_unused size_t convert_valid_utf16be_to_latin1( + const char16_t *buf, size_t len, char *latin1_buffer) noexcept { + return get_default_implementation()->convert_valid_utf16be_to_latin1( + buf, len, latin1_buffer); +} +simdutf_warn_unused size_t convert_valid_utf16le_to_latin1( + const char16_t *buf, size_t len, char *latin1_buffer) noexcept { + return get_default_implementation()->convert_valid_utf16le_to_latin1( + buf, len, latin1_buffer); +} +simdutf_warn_unused result convert_utf16le_to_latin1_with_errors( + const char16_t *buf, size_t len, char *latin1_buffer) noexcept { + return get_default_implementation()->convert_utf16le_to_latin1_with_errors( + buf, len, latin1_buffer); +} +simdutf_warn_unused result convert_utf16be_to_latin1_with_errors( + const char16_t *buf, size_t len, char *latin1_buffer) noexcept { + return get_default_implementation()->convert_utf16be_to_latin1_with_errors( + buf, len, latin1_buffer); +} +simdutf_warn_unused size_t convert_utf16le_to_utf8(const char16_t *buf, + size_t len, + char *utf8_buffer) noexcept { + return get_default_implementation()->convert_utf16le_to_utf8(buf, len, + utf8_buffer); +} +simdutf_warn_unused size_t convert_utf16be_to_utf8(const char16_t *buf, + size_t len, + char *utf8_buffer) noexcept { + return get_default_implementation()->convert_utf16be_to_utf8(buf, len, + utf8_buffer); +} +simdutf_warn_unused result convert_utf16_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_buffer) noexcept { +#if SIMDUTF_IS_BIG_ENDIAN return convert_utf16be_to_utf8_with_errors(buf, len, utf8_buffer); - #else +#else return convert_utf16le_to_utf8_with_errors(buf, len, utf8_buffer); - #endif +#endif } -simdutf_warn_unused result convert_utf16_to_latin1_with_errors(const char16_t * buf, size_t len, char* latin1_buffer) noexcept { - #if SIMDUTF_IS_BIG_ENDIAN +simdutf_warn_unused result convert_utf16_to_latin1_with_errors( + const char16_t *buf, size_t len, char *latin1_buffer) noexcept { +#if SIMDUTF_IS_BIG_ENDIAN return convert_utf16be_to_latin1_with_errors(buf, len, latin1_buffer); - #else +#else return convert_utf16le_to_latin1_with_errors(buf, len, latin1_buffer); - #endif +#endif } -simdutf_warn_unused result convert_utf16le_to_utf8_with_errors(const char16_t * buf, size_t len, char* utf8_buffer) noexcept { - return get_default_implementation()->convert_utf16le_to_utf8_with_errors(buf, len, utf8_buffer); +simdutf_warn_unused result convert_utf16le_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_buffer) noexcept { + return get_default_implementation()->convert_utf16le_to_utf8_with_errors( + buf, len, utf8_buffer); } -simdutf_warn_unused result convert_utf16be_to_utf8_with_errors(const char16_t * buf, size_t len, char* utf8_buffer) noexcept { - return get_default_implementation()->convert_utf16be_to_utf8_with_errors(buf, len, utf8_buffer); +simdutf_warn_unused result convert_utf16be_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_buffer) noexcept { + return get_default_implementation()->convert_utf16be_to_utf8_with_errors( + buf, len, utf8_buffer); } -simdutf_warn_unused size_t convert_valid_utf16_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) noexcept { - #if SIMDUTF_IS_BIG_ENDIAN +simdutf_warn_unused size_t convert_valid_utf16_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) noexcept { +#if SIMDUTF_IS_BIG_ENDIAN return convert_valid_utf16be_to_utf8(buf, len, utf8_buffer); - #else +#else return convert_valid_utf16le_to_utf8(buf, len, utf8_buffer); - #endif +#endif } -simdutf_warn_unused size_t convert_valid_utf16_to_latin1(const char16_t * buf, size_t len, char* latin1_buffer) noexcept { - #if SIMDUTF_IS_BIG_ENDIAN +simdutf_warn_unused size_t convert_valid_utf16_to_latin1( + const char16_t *buf, size_t len, char *latin1_buffer) noexcept { +#if SIMDUTF_IS_BIG_ENDIAN return convert_valid_utf16be_to_latin1(buf, len, latin1_buffer); - #else +#else return convert_valid_utf16le_to_latin1(buf, len, latin1_buffer); - #endif -} -simdutf_warn_unused size_t convert_valid_utf16le_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) noexcept { - return get_default_implementation()->convert_valid_utf16le_to_utf8(buf, len, utf8_buffer); -} -simdutf_warn_unused size_t convert_valid_utf16be_to_utf8(const char16_t * buf, size_t len, char* utf8_buffer) noexcept { - return get_default_implementation()->convert_valid_utf16be_to_utf8(buf, len, utf8_buffer); -} -simdutf_warn_unused size_t convert_utf32_to_utf8(const char32_t * buf, size_t len, char* utf8_buffer) noexcept { - return get_default_implementation()->convert_utf32_to_utf8(buf, len, utf8_buffer); -} -simdutf_warn_unused result convert_utf32_to_utf8_with_errors(const char32_t * buf, size_t len, char* utf8_buffer) noexcept { - return get_default_implementation()->convert_utf32_to_utf8_with_errors(buf, len, utf8_buffer); -} -simdutf_warn_unused size_t convert_valid_utf32_to_utf8(const char32_t * buf, size_t len, char* utf8_buffer) noexcept { - return get_default_implementation()->convert_valid_utf32_to_utf8(buf, len, utf8_buffer); +#endif } -simdutf_warn_unused size_t convert_utf32_to_utf16(const char32_t * buf, size_t len, char16_t* utf16_buffer) noexcept { - #if SIMDUTF_IS_BIG_ENDIAN +simdutf_warn_unused size_t convert_valid_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) noexcept { + return get_default_implementation()->convert_valid_utf16le_to_utf8( + buf, len, utf8_buffer); +} +simdutf_warn_unused size_t convert_valid_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_buffer) noexcept { + return get_default_implementation()->convert_valid_utf16be_to_utf8( + buf, len, utf8_buffer); +} +simdutf_warn_unused size_t convert_utf32_to_utf8(const char32_t *buf, + size_t len, + char *utf8_buffer) noexcept { + return get_default_implementation()->convert_utf32_to_utf8(buf, len, + utf8_buffer); +} +simdutf_warn_unused result convert_utf32_to_utf8_with_errors( + const char32_t *buf, size_t len, char *utf8_buffer) noexcept { + return get_default_implementation()->convert_utf32_to_utf8_with_errors( + buf, len, utf8_buffer); +} +simdutf_warn_unused size_t convert_valid_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_buffer) noexcept { + return get_default_implementation()->convert_valid_utf32_to_utf8(buf, len, + utf8_buffer); +} +simdutf_warn_unused size_t convert_utf32_to_utf16( + const char32_t *buf, size_t len, char16_t *utf16_buffer) noexcept { +#if SIMDUTF_IS_BIG_ENDIAN return convert_utf32_to_utf16be(buf, len, utf16_buffer); - #else +#else return convert_utf32_to_utf16le(buf, len, utf16_buffer); - #endif +#endif } -simdutf_warn_unused size_t convert_utf32_to_latin1(const char32_t * input, size_t length, char* latin1_output) noexcept { - return get_default_implementation()->convert_utf32_to_latin1(input, length, latin1_output); +simdutf_warn_unused size_t convert_utf32_to_latin1( + const char32_t *input, size_t length, char *latin1_output) noexcept { + return get_default_implementation()->convert_utf32_to_latin1(input, length, + latin1_output); } -simdutf_warn_unused size_t convert_utf32_to_utf16le(const char32_t * buf, size_t len, char16_t* utf16_buffer) noexcept { - return get_default_implementation()->convert_utf32_to_utf16le(buf, len, utf16_buffer); +simdutf_warn_unused size_t convert_utf32_to_utf16le( + const char32_t *buf, size_t len, char16_t *utf16_buffer) noexcept { + return get_default_implementation()->convert_utf32_to_utf16le(buf, len, + utf16_buffer); } -simdutf_warn_unused size_t convert_utf32_to_utf16be(const char32_t * buf, size_t len, char16_t* utf16_buffer) noexcept { - return get_default_implementation()->convert_utf32_to_utf16be(buf, len, utf16_buffer); +simdutf_warn_unused size_t convert_utf32_to_utf16be( + const char32_t *buf, size_t len, char16_t *utf16_buffer) noexcept { + return get_default_implementation()->convert_utf32_to_utf16be(buf, len, + utf16_buffer); } -simdutf_warn_unused result convert_utf32_to_utf16_with_errors(const char32_t * buf, size_t len, char16_t* utf16_buffer) noexcept { - #if SIMDUTF_IS_BIG_ENDIAN +simdutf_warn_unused result convert_utf32_to_utf16_with_errors( + const char32_t *buf, size_t len, char16_t *utf16_buffer) noexcept { +#if SIMDUTF_IS_BIG_ENDIAN return convert_utf32_to_utf16be_with_errors(buf, len, utf16_buffer); - #else +#else return convert_utf32_to_utf16le_with_errors(buf, len, utf16_buffer); - #endif +#endif } -simdutf_warn_unused result convert_utf32_to_utf16le_with_errors(const char32_t * buf, size_t len, char16_t* utf16_buffer) noexcept { - return get_default_implementation()->convert_utf32_to_utf16le_with_errors(buf, len, utf16_buffer); +simdutf_warn_unused result convert_utf32_to_utf16le_with_errors( + const char32_t *buf, size_t len, char16_t *utf16_buffer) noexcept { + return get_default_implementation()->convert_utf32_to_utf16le_with_errors( + buf, len, utf16_buffer); } -simdutf_warn_unused result convert_utf32_to_utf16be_with_errors(const char32_t * buf, size_t len, char16_t* utf16_buffer) noexcept { - return get_default_implementation()->convert_utf32_to_utf16be_with_errors(buf, len, utf16_buffer); +simdutf_warn_unused result convert_utf32_to_utf16be_with_errors( + const char32_t *buf, size_t len, char16_t *utf16_buffer) noexcept { + return get_default_implementation()->convert_utf32_to_utf16be_with_errors( + buf, len, utf16_buffer); } -simdutf_warn_unused size_t convert_valid_utf32_to_utf16(const char32_t * buf, size_t len, char16_t* utf16_buffer) noexcept { - #if SIMDUTF_IS_BIG_ENDIAN +simdutf_warn_unused size_t convert_valid_utf32_to_utf16( + const char32_t *buf, size_t len, char16_t *utf16_buffer) noexcept { +#if SIMDUTF_IS_BIG_ENDIAN return convert_valid_utf32_to_utf16be(buf, len, utf16_buffer); - #else +#else return convert_valid_utf32_to_utf16le(buf, len, utf16_buffer); - #endif +#endif } -simdutf_warn_unused size_t convert_valid_utf32_to_utf16le(const char32_t * buf, size_t len, char16_t* utf16_buffer) noexcept { - return get_default_implementation()->convert_valid_utf32_to_utf16le(buf, len, utf16_buffer); +simdutf_warn_unused size_t convert_valid_utf32_to_utf16le( + const char32_t *buf, size_t len, char16_t *utf16_buffer) noexcept { + return get_default_implementation()->convert_valid_utf32_to_utf16le( + buf, len, utf16_buffer); } -simdutf_warn_unused size_t convert_valid_utf32_to_utf16be(const char32_t * buf, size_t len, char16_t* utf16_buffer) noexcept { - return get_default_implementation()->convert_valid_utf32_to_utf16be(buf, len, utf16_buffer); +simdutf_warn_unused size_t convert_valid_utf32_to_utf16be( + const char32_t *buf, size_t len, char16_t *utf16_buffer) noexcept { + return get_default_implementation()->convert_valid_utf32_to_utf16be( + buf, len, utf16_buffer); } -simdutf_warn_unused size_t convert_utf16_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) noexcept { - #if SIMDUTF_IS_BIG_ENDIAN +simdutf_warn_unused size_t convert_utf16_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_buffer) noexcept { +#if SIMDUTF_IS_BIG_ENDIAN return convert_utf16be_to_utf32(buf, len, utf32_buffer); - #else +#else return convert_utf16le_to_utf32(buf, len, utf32_buffer); - #endif +#endif } -simdutf_warn_unused size_t convert_utf16le_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) noexcept { - return get_default_implementation()->convert_utf16le_to_utf32(buf, len, utf32_buffer); +simdutf_warn_unused size_t convert_utf16le_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_buffer) noexcept { + return get_default_implementation()->convert_utf16le_to_utf32(buf, len, + utf32_buffer); } -simdutf_warn_unused size_t convert_utf16be_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) noexcept { - return get_default_implementation()->convert_utf16be_to_utf32(buf, len, utf32_buffer); +simdutf_warn_unused size_t convert_utf16be_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_buffer) noexcept { + return get_default_implementation()->convert_utf16be_to_utf32(buf, len, + utf32_buffer); } -simdutf_warn_unused result convert_utf16_to_utf32_with_errors(const char16_t * buf, size_t len, char32_t* utf32_buffer) noexcept { - #if SIMDUTF_IS_BIG_ENDIAN +simdutf_warn_unused result convert_utf16_to_utf32_with_errors( + const char16_t *buf, size_t len, char32_t *utf32_buffer) noexcept { +#if SIMDUTF_IS_BIG_ENDIAN return convert_utf16be_to_utf32_with_errors(buf, len, utf32_buffer); - #else +#else return convert_utf16le_to_utf32_with_errors(buf, len, utf32_buffer); - #endif +#endif } -simdutf_warn_unused result convert_utf16le_to_utf32_with_errors(const char16_t * buf, size_t len, char32_t* utf32_buffer) noexcept { - return get_default_implementation()->convert_utf16le_to_utf32_with_errors(buf, len, utf32_buffer); +simdutf_warn_unused result convert_utf16le_to_utf32_with_errors( + const char16_t *buf, size_t len, char32_t *utf32_buffer) noexcept { + return get_default_implementation()->convert_utf16le_to_utf32_with_errors( + buf, len, utf32_buffer); } -simdutf_warn_unused result convert_utf16be_to_utf32_with_errors(const char16_t * buf, size_t len, char32_t* utf32_buffer) noexcept { - return get_default_implementation()->convert_utf16be_to_utf32_with_errors(buf, len, utf32_buffer); +simdutf_warn_unused result convert_utf16be_to_utf32_with_errors( + const char16_t *buf, size_t len, char32_t *utf32_buffer) noexcept { + return get_default_implementation()->convert_utf16be_to_utf32_with_errors( + buf, len, utf32_buffer); } -simdutf_warn_unused size_t convert_valid_utf16_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) noexcept { - #if SIMDUTF_IS_BIG_ENDIAN +simdutf_warn_unused size_t convert_valid_utf16_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_buffer) noexcept { +#if SIMDUTF_IS_BIG_ENDIAN return convert_valid_utf16be_to_utf32(buf, len, utf32_buffer); - #else +#else return convert_valid_utf16le_to_utf32(buf, len, utf32_buffer); - #endif +#endif } -simdutf_warn_unused size_t convert_valid_utf16le_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) noexcept { - return get_default_implementation()->convert_valid_utf16le_to_utf32(buf, len, utf32_buffer); +simdutf_warn_unused size_t convert_valid_utf16le_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_buffer) noexcept { + return get_default_implementation()->convert_valid_utf16le_to_utf32( + buf, len, utf32_buffer); } -simdutf_warn_unused size_t convert_valid_utf16be_to_utf32(const char16_t * buf, size_t len, char32_t* utf32_buffer) noexcept { - return get_default_implementation()->convert_valid_utf16be_to_utf32(buf, len, utf32_buffer); +simdutf_warn_unused size_t convert_valid_utf16be_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_buffer) noexcept { + return get_default_implementation()->convert_valid_utf16be_to_utf32( + buf, len, utf32_buffer); } -void change_endianness_utf16(const char16_t * input, size_t length, char16_t * output) noexcept { +void change_endianness_utf16(const char16_t *input, size_t length, + char16_t *output) noexcept { get_default_implementation()->change_endianness_utf16(input, length, output); } -simdutf_warn_unused size_t count_utf16(const char16_t * input, size_t length) noexcept { - #if SIMDUTF_IS_BIG_ENDIAN +simdutf_warn_unused size_t count_utf16(const char16_t *input, + size_t length) noexcept { +#if SIMDUTF_IS_BIG_ENDIAN return count_utf16be(input, length); - #else +#else return count_utf16le(input, length); - #endif +#endif } -simdutf_warn_unused size_t count_utf16le(const char16_t * input, size_t length) noexcept { +simdutf_warn_unused size_t count_utf16le(const char16_t *input, + size_t length) noexcept { return get_default_implementation()->count_utf16le(input, length); } -simdutf_warn_unused size_t count_utf16be(const char16_t * input, size_t length) noexcept { +simdutf_warn_unused size_t count_utf16be(const char16_t *input, + size_t length) noexcept { return get_default_implementation()->count_utf16be(input, length); } -simdutf_warn_unused size_t count_utf8(const char * input, size_t length) noexcept { +simdutf_warn_unused size_t count_utf8(const char *input, + size_t length) noexcept { return get_default_implementation()->count_utf8(input, length); } -simdutf_warn_unused size_t latin1_length_from_utf8(const char * buf, size_t len) noexcept { +simdutf_warn_unused size_t latin1_length_from_utf8(const char *buf, + size_t len) noexcept { return get_default_implementation()->latin1_length_from_utf8(buf, len); } simdutf_warn_unused size_t latin1_length_from_utf16(size_t len) noexcept { @@ -7214,86 +9270,120 @@ simdutf_warn_unused size_t latin1_length_from_utf16(size_t len) noexcept { simdutf_warn_unused size_t latin1_length_from_utf32(size_t len) noexcept { return get_default_implementation()->latin1_length_from_utf32(len); } -simdutf_warn_unused size_t utf8_length_from_latin1(const char * buf, size_t len) noexcept { +simdutf_warn_unused size_t utf8_length_from_latin1(const char *buf, + size_t len) noexcept { return get_default_implementation()->utf8_length_from_latin1(buf, len); } -simdutf_warn_unused size_t utf8_length_from_utf16(const char16_t * input, size_t length) noexcept { - #if SIMDUTF_IS_BIG_ENDIAN +simdutf_warn_unused size_t utf8_length_from_utf16(const char16_t *input, + size_t length) noexcept { +#if SIMDUTF_IS_BIG_ENDIAN return utf8_length_from_utf16be(input, length); - #else +#else return utf8_length_from_utf16le(input, length); - #endif +#endif } -simdutf_warn_unused size_t utf8_length_from_utf16le(const char16_t * input, size_t length) noexcept { +simdutf_warn_unused size_t utf8_length_from_utf16le(const char16_t *input, + size_t length) noexcept { return get_default_implementation()->utf8_length_from_utf16le(input, length); } -simdutf_warn_unused size_t utf8_length_from_utf16be(const char16_t * input, size_t length) noexcept { +simdutf_warn_unused size_t utf8_length_from_utf16be(const char16_t *input, + size_t length) noexcept { return get_default_implementation()->utf8_length_from_utf16be(input, length); } -simdutf_warn_unused size_t utf32_length_from_utf16(const char16_t * input, size_t length) noexcept { - #if SIMDUTF_IS_BIG_ENDIAN +simdutf_warn_unused size_t utf32_length_from_utf16(const char16_t *input, + size_t length) noexcept { +#if SIMDUTF_IS_BIG_ENDIAN return utf32_length_from_utf16be(input, length); - #else +#else return utf32_length_from_utf16le(input, length); - #endif +#endif } -simdutf_warn_unused size_t utf32_length_from_utf16le(const char16_t * input, size_t length) noexcept { +simdutf_warn_unused size_t utf32_length_from_utf16le(const char16_t *input, + size_t length) noexcept { return get_default_implementation()->utf32_length_from_utf16le(input, length); } -simdutf_warn_unused size_t utf32_length_from_utf16be(const char16_t * input, size_t length) noexcept { +simdutf_warn_unused size_t utf32_length_from_utf16be(const char16_t *input, + size_t length) noexcept { return get_default_implementation()->utf32_length_from_utf16be(input, length); } -simdutf_warn_unused size_t utf16_length_from_utf8(const char * input, size_t length) noexcept { +simdutf_warn_unused size_t utf16_length_from_utf8(const char *input, + size_t length) noexcept { return get_default_implementation()->utf16_length_from_utf8(input, length); } simdutf_warn_unused size_t utf16_length_from_latin1(size_t length) noexcept { return get_default_implementation()->utf16_length_from_latin1(length); } -simdutf_warn_unused size_t utf8_length_from_utf32(const char32_t * input, size_t length) noexcept { +simdutf_warn_unused size_t utf8_length_from_utf32(const char32_t *input, + size_t length) noexcept { return get_default_implementation()->utf8_length_from_utf32(input, length); } -simdutf_warn_unused size_t utf16_length_from_utf32(const char32_t * input, size_t length) noexcept { +simdutf_warn_unused size_t utf16_length_from_utf32(const char32_t *input, + size_t length) noexcept { return get_default_implementation()->utf16_length_from_utf32(input, length); } -simdutf_warn_unused size_t utf32_length_from_utf8(const char * input, size_t length) noexcept { +simdutf_warn_unused size_t utf32_length_from_utf8(const char *input, + size_t length) noexcept { return get_default_implementation()->utf32_length_from_utf8(input, length); } -simdutf_warn_unused size_t maximal_binary_length_from_base64(const char * input, size_t length) noexcept { - return get_default_implementation()->maximal_binary_length_from_base64(input, length); +simdutf_warn_unused size_t +maximal_binary_length_from_base64(const char *input, size_t length) noexcept { + return get_default_implementation()->maximal_binary_length_from_base64( + input, length); } -simdutf_warn_unused result base64_to_binary(const char * input, size_t length, char* output, base64_options options) noexcept { - return get_default_implementation()->base64_to_binary(input, length, output, options); +simdutf_warn_unused result base64_to_binary( + const char *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_handling_options) noexcept { + return get_default_implementation()->base64_to_binary( + input, length, output, options, last_chunk_handling_options); } -simdutf_warn_unused size_t maximal_binary_length_from_base64(const char16_t * input, size_t length) noexcept { - return get_default_implementation()->maximal_binary_length_from_base64(input, length); +simdutf_warn_unused size_t maximal_binary_length_from_base64( + const char16_t *input, size_t length) noexcept { + return get_default_implementation()->maximal_binary_length_from_base64( + input, length); } -simdutf_warn_unused result base64_to_binary(const char16_t * input, size_t length, char* output, base64_options options) noexcept { - return get_default_implementation()->base64_to_binary(input, length, output, options); +simdutf_warn_unused result base64_to_binary( + const char16_t *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_handling_options) noexcept { + return get_default_implementation()->base64_to_binary( + input, length, output, options, last_chunk_handling_options); } template -simdutf_warn_unused result base64_to_binary_safe_impl(const chartype * input, size_t length, char* output, size_t& outlen, base64_options options) noexcept { - static_assert(std::is_same::value || std::is_same::value, "Only char and char16_t are supported."); +simdutf_warn_unused result base64_to_binary_safe_impl( + const chartype *input, size_t length, char *output, size_t &outlen, + base64_options options, + last_chunk_handling_options last_chunk_handling_options) noexcept { + static_assert(std::is_same::value || + std::is_same::value, + "Only char and char16_t are supported."); // The implementation could be nicer, but we expect that most times, the user // will provide us with a buffer that is large enough. size_t max_length = maximal_binary_length_from_base64(input, length); - if(outlen >= max_length) { + if (outlen >= max_length) { // fast path - result r = base64_to_binary(input, length, output, options); - if(r.error != error_code::INVALID_BASE64_CHARACTER) { outlen = r.count; r.count = length; } + result r = base64_to_binary(input, length, output, options, + last_chunk_handling_options); + if (r.error != error_code::INVALID_BASE64_CHARACTER) { + outlen = r.count; + r.count = length; + } return r; } - // The output buffer is maybe too small. We will decode a truncated version of the input. + // The output buffer is maybe too small. We will decode a truncated version of + // the input. size_t outlen3 = outlen / 3 * 3; // round down to multiple of 3 size_t safe_input = base64_length_from_binary(outlen3, options); - result r = base64_to_binary(input, safe_input, output, options); - if(r.error == error_code::INVALID_BASE64_CHARACTER) { return r; } - size_t offset = (r.error == error_code::BASE64_INPUT_REMAINDER) ? 1 : - ((r.count % 3) == 0 ? 0 : (r.count % 3) + 1); + result r = base64_to_binary(input, safe_input, output, options, loose); + if (r.error == error_code::INVALID_BASE64_CHARACTER) { + return r; + } + size_t offset = (r.error == error_code::BASE64_INPUT_REMAINDER) + ? 1 + : ((r.count % 3) == 0 ? 0 : (r.count % 3) + 1); size_t output_index = r.count - (r.count % 3); size_t input_index = safe_input; // offset is a value that is no larger than 3. We backtrack @@ -7301,37 +9391,42 @@ simdutf_warn_unused result base64_to_binary_safe_impl(const chartype * input, si // white space characters. It is expected that the next loop // runs at most 3 times + the number of white space characters // in between them, so we are not worried about performance. - while(offset > 0 && input_index > 0) { + while (offset > 0 && input_index > 0) { chartype c = input[--input_index]; - if(scalar::base64::is_ascii_white_space(c)){ + if (scalar::base64::is_ascii_white_space(c)) { // skipping } else { offset--; } } size_t remaining_out = outlen - output_index; - const chartype * tail_input = input + input_index; + const chartype *tail_input = input + input_index; size_t tail_length = length - input_index; - while(tail_length > 0 && scalar::base64::is_ascii_white_space(tail_input[tail_length - 1])) { + while (tail_length > 0 && + scalar::base64::is_ascii_white_space(tail_input[tail_length - 1])) { tail_length--; } size_t padding_characts = 0; - if(tail_length > 0 && tail_input[tail_length - 1] == '=') { + if (tail_length > 0 && tail_input[tail_length - 1] == '=') { tail_length--; padding_characts++; - while(tail_length > 0 && scalar::base64::is_ascii_white_space(tail_input[tail_length - 1])) { + while (tail_length > 0 && + scalar::base64::is_ascii_white_space(tail_input[tail_length - 1])) { tail_length--; } - if(tail_length > 0 && tail_input[tail_length - 1] == '=') { + if (tail_length > 0 && tail_input[tail_length - 1] == '=') { tail_length--; padding_characts++; } } - r = scalar::base64::base64_tail_decode_safe(output + output_index, remaining_out, tail_input, tail_length, options); + r = scalar::base64::base64_tail_decode_safe( + output + output_index, remaining_out, tail_input, tail_length, + padding_characts, options, last_chunk_handling_options); outlen = output_index + remaining_out; - if(r.error == error_code::SUCCESS && padding_characts > 0) { + if (last_chunk_handling_options != stop_before_partial && + r.error == error_code::SUCCESS && padding_characts > 0) { // additional checks - if((outlen % 3 == 0) || ((outlen % 3) + 1 + padding_characts != 4)) { + if ((outlen % 3 == 0) || ((outlen % 3) + 1 + padding_characts != 4)) { r.error = error_code::INVALID_BASE64_CHARACTER; } } @@ -7339,9 +9434,8 @@ simdutf_warn_unused result base64_to_binary_safe_impl(const chartype * input, si return r; } - - -simdutf_warn_unused size_t convert_latin1_to_utf8_safe(const char * buf, size_t len, char* utf8_output, size_t utf8_len) noexcept { +simdutf_warn_unused size_t convert_latin1_to_utf8_safe( + const char *buf, size_t len, char *utf8_output, size_t utf8_len) noexcept { const auto start{utf8_output}; while (true) { @@ -7351,7 +9445,8 @@ simdutf_warn_unused size_t convert_latin1_to_utf8_safe(const char * buf, size_t break; } - const auto write_len = simdutf::convert_latin1_to_utf8(buf, read_len, utf8_output); + const auto write_len = + simdutf::convert_latin1_to_utf8(buf, read_len, utf8_output); utf8_output += write_len; utf8_len -= write_len; @@ -7359,35 +9454,51 @@ simdutf_warn_unused size_t convert_latin1_to_utf8_safe(const char * buf, size_t len -= read_len; } - utf8_output += scalar::latin1_to_utf8::convert_safe(buf, len, utf8_output, utf8_len); + utf8_output += + scalar::latin1_to_utf8::convert_safe(buf, len, utf8_output, utf8_len); return utf8_output - start; } - -simdutf_warn_unused result base64_to_binary_safe(const char * input, size_t length, char* output, size_t& outlen, base64_options options) noexcept { - return base64_to_binary_safe_impl(input, length, output, outlen, options); +simdutf_warn_unused result base64_to_binary_safe( + const char *input, size_t length, char *output, size_t &outlen, + base64_options options, + last_chunk_handling_options last_chunk_handling_options) noexcept { + return base64_to_binary_safe_impl(input, length, output, outlen, + options, last_chunk_handling_options); } -simdutf_warn_unused result base64_to_binary_safe(const char16_t * input, size_t length, char* output, size_t& outlen, base64_options options) noexcept { - return base64_to_binary_safe_impl(input, length, output, outlen, options); +simdutf_warn_unused result base64_to_binary_safe( + const char16_t *input, size_t length, char *output, size_t &outlen, + base64_options options, + last_chunk_handling_options last_chunk_handling_options) noexcept { + return base64_to_binary_safe_impl( + input, length, output, outlen, options, last_chunk_handling_options); } -simdutf_warn_unused size_t base64_length_from_binary(size_t length, base64_options options) noexcept { - return get_default_implementation()->base64_length_from_binary(length, options); +simdutf_warn_unused size_t +base64_length_from_binary(size_t length, base64_options options) noexcept { + return get_default_implementation()->base64_length_from_binary(length, + options); } -size_t binary_to_base64(const char * input, size_t length, char* output, base64_options options) noexcept { - return get_default_implementation()->binary_to_base64(input, length, output, options); +size_t binary_to_base64(const char *input, size_t length, char *output, + base64_options options) noexcept { + return get_default_implementation()->binary_to_base64(input, length, output, + options); } -simdutf_warn_unused simdutf::encoding_type autodetect_encoding(const char * buf, size_t length) noexcept { +simdutf_warn_unused simdutf::encoding_type +autodetect_encoding(const char *buf, size_t length) noexcept { return get_default_implementation()->autodetect_encoding(buf, length); } -simdutf_warn_unused int detect_encodings(const char * buf, size_t length) noexcept { +simdutf_warn_unused int detect_encodings(const char *buf, + size_t length) noexcept { return get_default_implementation()->detect_encodings(buf, length); } -const implementation * builtin_implementation() { - static const implementation * builtin_impl = get_available_implementations()[SIMDUTF_STRINGIFY(SIMDUTF_BUILTIN_IMPLEMENTATION)]; +const implementation *builtin_implementation() { + static const implementation *builtin_impl = + get_available_implementations()[SIMDUTF_STRINGIFY( + SIMDUTF_BUILTIN_IMPLEMENTATION)]; return builtin_impl; } @@ -7395,85 +9506,103 @@ simdutf_warn_unused size_t trim_partial_utf8(const char *input, size_t length) { return scalar::utf8::trim_partial_utf8(input, length); } -simdutf_warn_unused size_t trim_partial_utf16be(const char16_t* input, size_t length) { +simdutf_warn_unused size_t trim_partial_utf16be(const char16_t *input, + size_t length) { return scalar::utf16::trim_partial_utf16(input, length); } -simdutf_warn_unused size_t trim_partial_utf16le(const char16_t* input, size_t length) { +simdutf_warn_unused size_t trim_partial_utf16le(const char16_t *input, + size_t length) { return scalar::utf16::trim_partial_utf16(input, length); } -simdutf_warn_unused size_t trim_partial_utf16(const char16_t* input, size_t length) { - #if SIMDUTF_IS_BIG_ENDIAN +simdutf_warn_unused size_t trim_partial_utf16(const char16_t *input, + size_t length) { +#if SIMDUTF_IS_BIG_ENDIAN return trim_partial_utf16be(input, length); - #else +#else return trim_partial_utf16le(input, length); - #endif +#endif } } // namespace simdutf - /* end file src/implementation.cpp */ /* begin file src/encoding_types.cpp */ namespace simdutf { bool match_system(endianness e) { #if SIMDUTF_IS_BIG_ENDIAN - return e == endianness::BIG; + return e == endianness::BIG; #else - return e == endianness::LITTLE; + return e == endianness::LITTLE; #endif } std::string to_string(encoding_type bom) { switch (bom) { - case UTF16_LE: return "UTF16 little-endian"; - case UTF16_BE: return "UTF16 big-endian"; - case UTF32_LE: return "UTF32 little-endian"; - case UTF32_BE: return "UTF32 big-endian"; - case UTF8: return "UTF8"; - case unspecified: return "unknown"; - default: return "error"; + case UTF16_LE: + return "UTF16 little-endian"; + case UTF16_BE: + return "UTF16 big-endian"; + case UTF32_LE: + return "UTF32 little-endian"; + case UTF32_BE: + return "UTF32 big-endian"; + case UTF8: + return "UTF8"; + case unspecified: + return "unknown"; + default: + return "error"; } } namespace BOM { // Note that BOM for UTF8 is discouraged. -encoding_type check_bom(const uint8_t* byte, size_t length) { - if (length >= 2 && byte[0] == 0xff and byte[1] == 0xfe) { - if (length >= 4 && byte[2] == 0x00 and byte[3] == 0x0) { - return encoding_type::UTF32_LE; - } else { - return encoding_type::UTF16_LE; - } - } else if (length >= 2 && byte[0] == 0xfe and byte[1] == 0xff) { - return encoding_type::UTF16_BE; - } else if (length >= 4 && byte[0] == 0x00 and byte[1] == 0x00 and byte[2] == 0xfe and byte[3] == 0xff) { - return encoding_type::UTF32_BE; - } else if (length >= 4 && byte[0] == 0xef and byte[1] == 0xbb and byte[2] == 0xbf) { - return encoding_type::UTF8; - } - return encoding_type::unspecified; - } - -encoding_type check_bom(const char* byte, size_t length) { - return check_bom(reinterpret_cast(byte), length); - } - - size_t bom_byte_size(encoding_type bom) { - switch (bom) { - case UTF16_LE: return 2; - case UTF16_BE: return 2; - case UTF32_LE: return 4; - case UTF32_BE: return 4; - case UTF8: return 3; - case unspecified: return 0; - default: return 0; - } +encoding_type check_bom(const uint8_t *byte, size_t length) { + if (length >= 2 && byte[0] == 0xff and byte[1] == 0xfe) { + if (length >= 4 && byte[2] == 0x00 and byte[3] == 0x0) { + return encoding_type::UTF32_LE; + } else { + return encoding_type::UTF16_LE; + } + } else if (length >= 2 && byte[0] == 0xfe and byte[1] == 0xff) { + return encoding_type::UTF16_BE; + } else if (length >= 4 && byte[0] == 0x00 and byte[1] == 0x00 and + byte[2] == 0xfe and byte[3] == 0xff) { + return encoding_type::UTF32_BE; + } else if (length >= 4 && byte[0] == 0xef and byte[1] == 0xbb and + byte[2] == 0xbf) { + return encoding_type::UTF8; + } + return encoding_type::unspecified; } +encoding_type check_bom(const char *byte, size_t length) { + return check_bom(reinterpret_cast(byte), length); } + +size_t bom_byte_size(encoding_type bom) { + switch (bom) { + case UTF16_LE: + return 2; + case UTF16_BE: + return 2; + case UTF32_LE: + return 4; + case UTF32_BE: + return 4; + case UTF8: + return 3; + case unspecified: + return 0; + default: + return 0; + } } + +} // namespace BOM +} // namespace simdutf /* end file src/encoding_types.cpp */ /* begin file src/error.cpp */ namespace simdutf { @@ -7503,4318 +9632,808 @@ namespace utf8_to_utf16 { * performance penalty. */ -const uint8_t shufutf8[209][16] = -{ {0, 255, 1, 255, 2, 255, 3, 255, 4, 255, 5, 255, 0, 0, 0, 0}, - {0, 255, 1, 255, 2, 255, 3, 255, 4, 255, 6, 5, 0, 0, 0, 0}, - {0, 255, 1, 255, 2, 255, 3, 255, 5, 4, 6, 255, 0, 0, 0, 0}, - {0, 255, 1, 255, 2, 255, 3, 255, 5, 4, 7, 6, 0, 0, 0, 0}, - {0, 255, 1, 255, 2, 255, 4, 3, 5, 255, 6, 255, 0, 0, 0, 0}, - {0, 255, 1, 255, 2, 255, 4, 3, 5, 255, 7, 6, 0, 0, 0, 0}, - {0, 255, 1, 255, 2, 255, 4, 3, 6, 5, 7, 255, 0, 0, 0, 0}, - {0, 255, 1, 255, 2, 255, 4, 3, 6, 5, 8, 7, 0, 0, 0, 0}, - {0, 255, 1, 255, 3, 2, 4, 255, 5, 255, 6, 255, 0, 0, 0, 0}, - {0, 255, 1, 255, 3, 2, 4, 255, 5, 255, 7, 6, 0, 0, 0, 0}, - {0, 255, 1, 255, 3, 2, 4, 255, 6, 5, 7, 255, 0, 0, 0, 0}, - {0, 255, 1, 255, 3, 2, 4, 255, 6, 5, 8, 7, 0, 0, 0, 0}, - {0, 255, 1, 255, 3, 2, 5, 4, 6, 255, 7, 255, 0, 0, 0, 0}, - {0, 255, 1, 255, 3, 2, 5, 4, 6, 255, 8, 7, 0, 0, 0, 0}, - {0, 255, 1, 255, 3, 2, 5, 4, 7, 6, 8, 255, 0, 0, 0, 0}, - {0, 255, 1, 255, 3, 2, 5, 4, 7, 6, 9, 8, 0, 0, 0, 0}, - {0, 255, 2, 1, 3, 255, 4, 255, 5, 255, 6, 255, 0, 0, 0, 0}, - {0, 255, 2, 1, 3, 255, 4, 255, 5, 255, 7, 6, 0, 0, 0, 0}, - {0, 255, 2, 1, 3, 255, 4, 255, 6, 5, 7, 255, 0, 0, 0, 0}, - {0, 255, 2, 1, 3, 255, 4, 255, 6, 5, 8, 7, 0, 0, 0, 0}, - {0, 255, 2, 1, 3, 255, 5, 4, 6, 255, 7, 255, 0, 0, 0, 0}, - {0, 255, 2, 1, 3, 255, 5, 4, 6, 255, 8, 7, 0, 0, 0, 0}, - {0, 255, 2, 1, 3, 255, 5, 4, 7, 6, 8, 255, 0, 0, 0, 0}, - {0, 255, 2, 1, 3, 255, 5, 4, 7, 6, 9, 8, 0, 0, 0, 0}, - {0, 255, 2, 1, 4, 3, 5, 255, 6, 255, 7, 255, 0, 0, 0, 0}, - {0, 255, 2, 1, 4, 3, 5, 255, 6, 255, 8, 7, 0, 0, 0, 0}, - {0, 255, 2, 1, 4, 3, 5, 255, 7, 6, 8, 255, 0, 0, 0, 0}, - {0, 255, 2, 1, 4, 3, 5, 255, 7, 6, 9, 8, 0, 0, 0, 0}, - {0, 255, 2, 1, 4, 3, 6, 5, 7, 255, 8, 255, 0, 0, 0, 0}, - {0, 255, 2, 1, 4, 3, 6, 5, 7, 255, 9, 8, 0, 0, 0, 0}, - {0, 255, 2, 1, 4, 3, 6, 5, 8, 7, 9, 255, 0, 0, 0, 0}, - {0, 255, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 0, 0, 0, 0}, - {1, 0, 2, 255, 3, 255, 4, 255, 5, 255, 6, 255, 0, 0, 0, 0}, - {1, 0, 2, 255, 3, 255, 4, 255, 5, 255, 7, 6, 0, 0, 0, 0}, - {1, 0, 2, 255, 3, 255, 4, 255, 6, 5, 7, 255, 0, 0, 0, 0}, - {1, 0, 2, 255, 3, 255, 4, 255, 6, 5, 8, 7, 0, 0, 0, 0}, - {1, 0, 2, 255, 3, 255, 5, 4, 6, 255, 7, 255, 0, 0, 0, 0}, - {1, 0, 2, 255, 3, 255, 5, 4, 6, 255, 8, 7, 0, 0, 0, 0}, - {1, 0, 2, 255, 3, 255, 5, 4, 7, 6, 8, 255, 0, 0, 0, 0}, - {1, 0, 2, 255, 3, 255, 5, 4, 7, 6, 9, 8, 0, 0, 0, 0}, - {1, 0, 2, 255, 4, 3, 5, 255, 6, 255, 7, 255, 0, 0, 0, 0}, - {1, 0, 2, 255, 4, 3, 5, 255, 6, 255, 8, 7, 0, 0, 0, 0}, - {1, 0, 2, 255, 4, 3, 5, 255, 7, 6, 8, 255, 0, 0, 0, 0}, - {1, 0, 2, 255, 4, 3, 5, 255, 7, 6, 9, 8, 0, 0, 0, 0}, - {1, 0, 2, 255, 4, 3, 6, 5, 7, 255, 8, 255, 0, 0, 0, 0}, - {1, 0, 2, 255, 4, 3, 6, 5, 7, 255, 9, 8, 0, 0, 0, 0}, - {1, 0, 2, 255, 4, 3, 6, 5, 8, 7, 9, 255, 0, 0, 0, 0}, - {1, 0, 2, 255, 4, 3, 6, 5, 8, 7, 10, 9, 0, 0, 0, 0}, - {1, 0, 3, 2, 4, 255, 5, 255, 6, 255, 7, 255, 0, 0, 0, 0}, - {1, 0, 3, 2, 4, 255, 5, 255, 6, 255, 8, 7, 0, 0, 0, 0}, - {1, 0, 3, 2, 4, 255, 5, 255, 7, 6, 8, 255, 0, 0, 0, 0}, - {1, 0, 3, 2, 4, 255, 5, 255, 7, 6, 9, 8, 0, 0, 0, 0}, - {1, 0, 3, 2, 4, 255, 6, 5, 7, 255, 8, 255, 0, 0, 0, 0}, - {1, 0, 3, 2, 4, 255, 6, 5, 7, 255, 9, 8, 0, 0, 0, 0}, - {1, 0, 3, 2, 4, 255, 6, 5, 8, 7, 9, 255, 0, 0, 0, 0}, - {1, 0, 3, 2, 4, 255, 6, 5, 8, 7, 10, 9, 0, 0, 0, 0}, - {1, 0, 3, 2, 5, 4, 6, 255, 7, 255, 8, 255, 0, 0, 0, 0}, - {1, 0, 3, 2, 5, 4, 6, 255, 7, 255, 9, 8, 0, 0, 0, 0}, - {1, 0, 3, 2, 5, 4, 6, 255, 8, 7, 9, 255, 0, 0, 0, 0}, - {1, 0, 3, 2, 5, 4, 6, 255, 8, 7, 10, 9, 0, 0, 0, 0}, - {1, 0, 3, 2, 5, 4, 7, 6, 8, 255, 9, 255, 0, 0, 0, 0}, - {1, 0, 3, 2, 5, 4, 7, 6, 8, 255, 10, 9, 0, 0, 0, 0}, - {1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 10, 255, 0, 0, 0, 0}, - {1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 0, 0, 0, 0}, - {0, 255, 255, 255, 1, 255, 255, 255, 2, 255, 255, 255, 3, 255, 255, 255}, - {0, 255, 255, 255, 1, 255, 255, 255, 2, 255, 255, 255, 4, 3, 255, 255}, - {0, 255, 255, 255, 1, 255, 255, 255, 2, 255, 255, 255, 5, 4, 3, 255}, - {0, 255, 255, 255, 1, 255, 255, 255, 3, 2, 255, 255, 4, 255, 255, 255}, - {0, 255, 255, 255, 1, 255, 255, 255, 3, 2, 255, 255, 5, 4, 255, 255}, - {0, 255, 255, 255, 1, 255, 255, 255, 3, 2, 255, 255, 6, 5, 4, 255}, - {0, 255, 255, 255, 1, 255, 255, 255, 4, 3, 2, 255, 5, 255, 255, 255}, - {0, 255, 255, 255, 1, 255, 255, 255, 4, 3, 2, 255, 6, 5, 255, 255}, - {0, 255, 255, 255, 1, 255, 255, 255, 4, 3, 2, 255, 7, 6, 5, 255}, - {0, 255, 255, 255, 2, 1, 255, 255, 3, 255, 255, 255, 4, 255, 255, 255}, - {0, 255, 255, 255, 2, 1, 255, 255, 3, 255, 255, 255, 5, 4, 255, 255}, - {0, 255, 255, 255, 2, 1, 255, 255, 3, 255, 255, 255, 6, 5, 4, 255}, - {0, 255, 255, 255, 2, 1, 255, 255, 4, 3, 255, 255, 5, 255, 255, 255}, - {0, 255, 255, 255, 2, 1, 255, 255, 4, 3, 255, 255, 6, 5, 255, 255}, - {0, 255, 255, 255, 2, 1, 255, 255, 4, 3, 255, 255, 7, 6, 5, 255}, - {0, 255, 255, 255, 2, 1, 255, 255, 5, 4, 3, 255, 6, 255, 255, 255}, - {0, 255, 255, 255, 2, 1, 255, 255, 5, 4, 3, 255, 7, 6, 255, 255}, - {0, 255, 255, 255, 2, 1, 255, 255, 5, 4, 3, 255, 8, 7, 6, 255}, - {0, 255, 255, 255, 3, 2, 1, 255, 4, 255, 255, 255, 5, 255, 255, 255}, - {0, 255, 255, 255, 3, 2, 1, 255, 4, 255, 255, 255, 6, 5, 255, 255}, - {0, 255, 255, 255, 3, 2, 1, 255, 4, 255, 255, 255, 7, 6, 5, 255}, - {0, 255, 255, 255, 3, 2, 1, 255, 5, 4, 255, 255, 6, 255, 255, 255}, - {0, 255, 255, 255, 3, 2, 1, 255, 5, 4, 255, 255, 7, 6, 255, 255}, - {0, 255, 255, 255, 3, 2, 1, 255, 5, 4, 255, 255, 8, 7, 6, 255}, - {0, 255, 255, 255, 3, 2, 1, 255, 6, 5, 4, 255, 7, 255, 255, 255}, - {0, 255, 255, 255, 3, 2, 1, 255, 6, 5, 4, 255, 8, 7, 255, 255}, - {0, 255, 255, 255, 3, 2, 1, 255, 6, 5, 4, 255, 9, 8, 7, 255}, - {1, 0, 255, 255, 2, 255, 255, 255, 3, 255, 255, 255, 4, 255, 255, 255}, - {1, 0, 255, 255, 2, 255, 255, 255, 3, 255, 255, 255, 5, 4, 255, 255}, - {1, 0, 255, 255, 2, 255, 255, 255, 3, 255, 255, 255, 6, 5, 4, 255}, - {1, 0, 255, 255, 2, 255, 255, 255, 4, 3, 255, 255, 5, 255, 255, 255}, - {1, 0, 255, 255, 2, 255, 255, 255, 4, 3, 255, 255, 6, 5, 255, 255}, - {1, 0, 255, 255, 2, 255, 255, 255, 4, 3, 255, 255, 7, 6, 5, 255}, - {1, 0, 255, 255, 2, 255, 255, 255, 5, 4, 3, 255, 6, 255, 255, 255}, - {1, 0, 255, 255, 2, 255, 255, 255, 5, 4, 3, 255, 7, 6, 255, 255}, - {1, 0, 255, 255, 2, 255, 255, 255, 5, 4, 3, 255, 8, 7, 6, 255}, - {1, 0, 255, 255, 3, 2, 255, 255, 4, 255, 255, 255, 5, 255, 255, 255}, - {1, 0, 255, 255, 3, 2, 255, 255, 4, 255, 255, 255, 6, 5, 255, 255}, - {1, 0, 255, 255, 3, 2, 255, 255, 4, 255, 255, 255, 7, 6, 5, 255}, - {1, 0, 255, 255, 3, 2, 255, 255, 5, 4, 255, 255, 6, 255, 255, 255}, - {1, 0, 255, 255, 3, 2, 255, 255, 5, 4, 255, 255, 7, 6, 255, 255}, - {1, 0, 255, 255, 3, 2, 255, 255, 5, 4, 255, 255, 8, 7, 6, 255}, - {1, 0, 255, 255, 3, 2, 255, 255, 6, 5, 4, 255, 7, 255, 255, 255}, - {1, 0, 255, 255, 3, 2, 255, 255, 6, 5, 4, 255, 8, 7, 255, 255}, - {1, 0, 255, 255, 3, 2, 255, 255, 6, 5, 4, 255, 9, 8, 7, 255}, - {1, 0, 255, 255, 4, 3, 2, 255, 5, 255, 255, 255, 6, 255, 255, 255}, - {1, 0, 255, 255, 4, 3, 2, 255, 5, 255, 255, 255, 7, 6, 255, 255}, - {1, 0, 255, 255, 4, 3, 2, 255, 5, 255, 255, 255, 8, 7, 6, 255}, - {1, 0, 255, 255, 4, 3, 2, 255, 6, 5, 255, 255, 7, 255, 255, 255}, - {1, 0, 255, 255, 4, 3, 2, 255, 6, 5, 255, 255, 8, 7, 255, 255}, - {1, 0, 255, 255, 4, 3, 2, 255, 6, 5, 255, 255, 9, 8, 7, 255}, - {1, 0, 255, 255, 4, 3, 2, 255, 7, 6, 5, 255, 8, 255, 255, 255}, - {1, 0, 255, 255, 4, 3, 2, 255, 7, 6, 5, 255, 9, 8, 255, 255}, - {1, 0, 255, 255, 4, 3, 2, 255, 7, 6, 5, 255, 10, 9, 8, 255}, - {2, 1, 0, 255, 3, 255, 255, 255, 4, 255, 255, 255, 5, 255, 255, 255}, - {2, 1, 0, 255, 3, 255, 255, 255, 4, 255, 255, 255, 6, 5, 255, 255}, - {2, 1, 0, 255, 3, 255, 255, 255, 4, 255, 255, 255, 7, 6, 5, 255}, - {2, 1, 0, 255, 3, 255, 255, 255, 5, 4, 255, 255, 6, 255, 255, 255}, - {2, 1, 0, 255, 3, 255, 255, 255, 5, 4, 255, 255, 7, 6, 255, 255}, - {2, 1, 0, 255, 3, 255, 255, 255, 5, 4, 255, 255, 8, 7, 6, 255}, - {2, 1, 0, 255, 3, 255, 255, 255, 6, 5, 4, 255, 7, 255, 255, 255}, - {2, 1, 0, 255, 3, 255, 255, 255, 6, 5, 4, 255, 8, 7, 255, 255}, - {2, 1, 0, 255, 3, 255, 255, 255, 6, 5, 4, 255, 9, 8, 7, 255}, - {2, 1, 0, 255, 4, 3, 255, 255, 5, 255, 255, 255, 6, 255, 255, 255}, - {2, 1, 0, 255, 4, 3, 255, 255, 5, 255, 255, 255, 7, 6, 255, 255}, - {2, 1, 0, 255, 4, 3, 255, 255, 5, 255, 255, 255, 8, 7, 6, 255}, - {2, 1, 0, 255, 4, 3, 255, 255, 6, 5, 255, 255, 7, 255, 255, 255}, - {2, 1, 0, 255, 4, 3, 255, 255, 6, 5, 255, 255, 8, 7, 255, 255}, - {2, 1, 0, 255, 4, 3, 255, 255, 6, 5, 255, 255, 9, 8, 7, 255}, - {2, 1, 0, 255, 4, 3, 255, 255, 7, 6, 5, 255, 8, 255, 255, 255}, - {2, 1, 0, 255, 4, 3, 255, 255, 7, 6, 5, 255, 9, 8, 255, 255}, - {2, 1, 0, 255, 4, 3, 255, 255, 7, 6, 5, 255, 10, 9, 8, 255}, - {2, 1, 0, 255, 5, 4, 3, 255, 6, 255, 255, 255, 7, 255, 255, 255}, - {2, 1, 0, 255, 5, 4, 3, 255, 6, 255, 255, 255, 8, 7, 255, 255}, - {2, 1, 0, 255, 5, 4, 3, 255, 6, 255, 255, 255, 9, 8, 7, 255}, - {2, 1, 0, 255, 5, 4, 3, 255, 7, 6, 255, 255, 8, 255, 255, 255}, - {2, 1, 0, 255, 5, 4, 3, 255, 7, 6, 255, 255, 9, 8, 255, 255}, - {2, 1, 0, 255, 5, 4, 3, 255, 7, 6, 255, 255, 10, 9, 8, 255}, - {2, 1, 0, 255, 5, 4, 3, 255, 8, 7, 6, 255, 9, 255, 255, 255}, - {2, 1, 0, 255, 5, 4, 3, 255, 8, 7, 6, 255, 10, 9, 255, 255}, - {2, 1, 0, 255, 5, 4, 3, 255, 8, 7, 6, 255, 11, 10, 9, 255}, - {0, 255, 255, 255, 1, 255, 255, 255, 2, 255, 255, 255, 0, 0, 0, 0}, - {0, 255, 255, 255, 1, 255, 255, 255, 3, 2, 255, 255, 0, 0, 0, 0}, - {0, 255, 255, 255, 1, 255, 255, 255, 4, 3, 2, 255, 0, 0, 0, 0}, - {0, 255, 255, 255, 1, 255, 255, 255, 5, 4, 3, 2, 0, 0, 0, 0}, - {0, 255, 255, 255, 2, 1, 255, 255, 3, 255, 255, 255, 0, 0, 0, 0}, - {0, 255, 255, 255, 2, 1, 255, 255, 4, 3, 255, 255, 0, 0, 0, 0}, - {0, 255, 255, 255, 2, 1, 255, 255, 5, 4, 3, 255, 0, 0, 0, 0}, - {0, 255, 255, 255, 2, 1, 255, 255, 6, 5, 4, 3, 0, 0, 0, 0}, - {0, 255, 255, 255, 3, 2, 1, 255, 4, 255, 255, 255, 0, 0, 0, 0}, - {0, 255, 255, 255, 3, 2, 1, 255, 5, 4, 255, 255, 0, 0, 0, 0}, - {0, 255, 255, 255, 3, 2, 1, 255, 6, 5, 4, 255, 0, 0, 0, 0}, - {0, 255, 255, 255, 3, 2, 1, 255, 7, 6, 5, 4, 0, 0, 0, 0}, - {0, 255, 255, 255, 4, 3, 2, 1, 5, 255, 255, 255, 0, 0, 0, 0}, - {0, 255, 255, 255, 4, 3, 2, 1, 6, 5, 255, 255, 0, 0, 0, 0}, - {0, 255, 255, 255, 4, 3, 2, 1, 7, 6, 5, 255, 0, 0, 0, 0}, - {0, 255, 255, 255, 4, 3, 2, 1, 8, 7, 6, 5, 0, 0, 0, 0}, - {1, 0, 255, 255, 2, 255, 255, 255, 3, 255, 255, 255, 0, 0, 0, 0}, - {1, 0, 255, 255, 2, 255, 255, 255, 4, 3, 255, 255, 0, 0, 0, 0}, - {1, 0, 255, 255, 2, 255, 255, 255, 5, 4, 3, 255, 0, 0, 0, 0}, - {1, 0, 255, 255, 2, 255, 255, 255, 6, 5, 4, 3, 0, 0, 0, 0}, - {1, 0, 255, 255, 3, 2, 255, 255, 4, 255, 255, 255, 0, 0, 0, 0}, - {1, 0, 255, 255, 3, 2, 255, 255, 5, 4, 255, 255, 0, 0, 0, 0}, - {1, 0, 255, 255, 3, 2, 255, 255, 6, 5, 4, 255, 0, 0, 0, 0}, - {1, 0, 255, 255, 3, 2, 255, 255, 7, 6, 5, 4, 0, 0, 0, 0}, - {1, 0, 255, 255, 4, 3, 2, 255, 5, 255, 255, 255, 0, 0, 0, 0}, - {1, 0, 255, 255, 4, 3, 2, 255, 6, 5, 255, 255, 0, 0, 0, 0}, - {1, 0, 255, 255, 4, 3, 2, 255, 7, 6, 5, 255, 0, 0, 0, 0}, - {1, 0, 255, 255, 4, 3, 2, 255, 8, 7, 6, 5, 0, 0, 0, 0}, - {1, 0, 255, 255, 5, 4, 3, 2, 6, 255, 255, 255, 0, 0, 0, 0}, - {1, 0, 255, 255, 5, 4, 3, 2, 7, 6, 255, 255, 0, 0, 0, 0}, - {1, 0, 255, 255, 5, 4, 3, 2, 8, 7, 6, 255, 0, 0, 0, 0}, - {1, 0, 255, 255, 5, 4, 3, 2, 9, 8, 7, 6, 0, 0, 0, 0}, - {2, 1, 0, 255, 3, 255, 255, 255, 4, 255, 255, 255, 0, 0, 0, 0}, - {2, 1, 0, 255, 3, 255, 255, 255, 5, 4, 255, 255, 0, 0, 0, 0}, - {2, 1, 0, 255, 3, 255, 255, 255, 6, 5, 4, 255, 0, 0, 0, 0}, - {2, 1, 0, 255, 3, 255, 255, 255, 7, 6, 5, 4, 0, 0, 0, 0}, - {2, 1, 0, 255, 4, 3, 255, 255, 5, 255, 255, 255, 0, 0, 0, 0}, - {2, 1, 0, 255, 4, 3, 255, 255, 6, 5, 255, 255, 0, 0, 0, 0}, - {2, 1, 0, 255, 4, 3, 255, 255, 7, 6, 5, 255, 0, 0, 0, 0}, - {2, 1, 0, 255, 4, 3, 255, 255, 8, 7, 6, 5, 0, 0, 0, 0}, - {2, 1, 0, 255, 5, 4, 3, 255, 6, 255, 255, 255, 0, 0, 0, 0}, - {2, 1, 0, 255, 5, 4, 3, 255, 7, 6, 255, 255, 0, 0, 0, 0}, - {2, 1, 0, 255, 5, 4, 3, 255, 8, 7, 6, 255, 0, 0, 0, 0}, - {2, 1, 0, 255, 5, 4, 3, 255, 9, 8, 7, 6, 0, 0, 0, 0}, - {2, 1, 0, 255, 6, 5, 4, 3, 7, 255, 255, 255, 0, 0, 0, 0}, - {2, 1, 0, 255, 6, 5, 4, 3, 8, 7, 255, 255, 0, 0, 0, 0}, - {2, 1, 0, 255, 6, 5, 4, 3, 9, 8, 7, 255, 0, 0, 0, 0}, - {2, 1, 0, 255, 6, 5, 4, 3, 10, 9, 8, 7, 0, 0, 0, 0}, - {3, 2, 1, 0, 4, 255, 255, 255, 5, 255, 255, 255, 0, 0, 0, 0}, - {3, 2, 1, 0, 4, 255, 255, 255, 6, 5, 255, 255, 0, 0, 0, 0}, - {3, 2, 1, 0, 4, 255, 255, 255, 7, 6, 5, 255, 0, 0, 0, 0}, - {3, 2, 1, 0, 4, 255, 255, 255, 8, 7, 6, 5, 0, 0, 0, 0}, - {3, 2, 1, 0, 5, 4, 255, 255, 6, 255, 255, 255, 0, 0, 0, 0}, - {3, 2, 1, 0, 5, 4, 255, 255, 7, 6, 255, 255, 0, 0, 0, 0}, - {3, 2, 1, 0, 5, 4, 255, 255, 8, 7, 6, 255, 0, 0, 0, 0}, - {3, 2, 1, 0, 5, 4, 255, 255, 9, 8, 7, 6, 0, 0, 0, 0}, - {3, 2, 1, 0, 6, 5, 4, 255, 7, 255, 255, 255, 0, 0, 0, 0}, - {3, 2, 1, 0, 6, 5, 4, 255, 8, 7, 255, 255, 0, 0, 0, 0}, - {3, 2, 1, 0, 6, 5, 4, 255, 9, 8, 7, 255, 0, 0, 0, 0}, - {3, 2, 1, 0, 6, 5, 4, 255, 10, 9, 8, 7, 0, 0, 0, 0}, - {3, 2, 1, 0, 7, 6, 5, 4, 8, 255, 255, 255, 0, 0, 0, 0}, - {3, 2, 1, 0, 7, 6, 5, 4, 9, 8, 255, 255, 0, 0, 0, 0}, - {3, 2, 1, 0, 7, 6, 5, 4, 10, 9, 8, 255, 0, 0, 0, 0}, - {3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 0, 0, 0, 0}}; +const uint8_t shufutf8[209][16] = { + {0, 255, 1, 255, 2, 255, 3, 255, 4, 255, 5, 255, 0, 0, 0, 0}, + {0, 255, 1, 255, 2, 255, 3, 255, 4, 255, 6, 5, 0, 0, 0, 0}, + {0, 255, 1, 255, 2, 255, 3, 255, 5, 4, 6, 255, 0, 0, 0, 0}, + {0, 255, 1, 255, 2, 255, 3, 255, 5, 4, 7, 6, 0, 0, 0, 0}, + {0, 255, 1, 255, 2, 255, 4, 3, 5, 255, 6, 255, 0, 0, 0, 0}, + {0, 255, 1, 255, 2, 255, 4, 3, 5, 255, 7, 6, 0, 0, 0, 0}, + {0, 255, 1, 255, 2, 255, 4, 3, 6, 5, 7, 255, 0, 0, 0, 0}, + {0, 255, 1, 255, 2, 255, 4, 3, 6, 5, 8, 7, 0, 0, 0, 0}, + {0, 255, 1, 255, 3, 2, 4, 255, 5, 255, 6, 255, 0, 0, 0, 0}, + {0, 255, 1, 255, 3, 2, 4, 255, 5, 255, 7, 6, 0, 0, 0, 0}, + {0, 255, 1, 255, 3, 2, 4, 255, 6, 5, 7, 255, 0, 0, 0, 0}, + {0, 255, 1, 255, 3, 2, 4, 255, 6, 5, 8, 7, 0, 0, 0, 0}, + {0, 255, 1, 255, 3, 2, 5, 4, 6, 255, 7, 255, 0, 0, 0, 0}, + {0, 255, 1, 255, 3, 2, 5, 4, 6, 255, 8, 7, 0, 0, 0, 0}, + {0, 255, 1, 255, 3, 2, 5, 4, 7, 6, 8, 255, 0, 0, 0, 0}, + {0, 255, 1, 255, 3, 2, 5, 4, 7, 6, 9, 8, 0, 0, 0, 0}, + {0, 255, 2, 1, 3, 255, 4, 255, 5, 255, 6, 255, 0, 0, 0, 0}, + {0, 255, 2, 1, 3, 255, 4, 255, 5, 255, 7, 6, 0, 0, 0, 0}, + {0, 255, 2, 1, 3, 255, 4, 255, 6, 5, 7, 255, 0, 0, 0, 0}, + {0, 255, 2, 1, 3, 255, 4, 255, 6, 5, 8, 7, 0, 0, 0, 0}, + {0, 255, 2, 1, 3, 255, 5, 4, 6, 255, 7, 255, 0, 0, 0, 0}, + {0, 255, 2, 1, 3, 255, 5, 4, 6, 255, 8, 7, 0, 0, 0, 0}, + {0, 255, 2, 1, 3, 255, 5, 4, 7, 6, 8, 255, 0, 0, 0, 0}, + {0, 255, 2, 1, 3, 255, 5, 4, 7, 6, 9, 8, 0, 0, 0, 0}, + {0, 255, 2, 1, 4, 3, 5, 255, 6, 255, 7, 255, 0, 0, 0, 0}, + {0, 255, 2, 1, 4, 3, 5, 255, 6, 255, 8, 7, 0, 0, 0, 0}, + {0, 255, 2, 1, 4, 3, 5, 255, 7, 6, 8, 255, 0, 0, 0, 0}, + {0, 255, 2, 1, 4, 3, 5, 255, 7, 6, 9, 8, 0, 0, 0, 0}, + {0, 255, 2, 1, 4, 3, 6, 5, 7, 255, 8, 255, 0, 0, 0, 0}, + {0, 255, 2, 1, 4, 3, 6, 5, 7, 255, 9, 8, 0, 0, 0, 0}, + {0, 255, 2, 1, 4, 3, 6, 5, 8, 7, 9, 255, 0, 0, 0, 0}, + {0, 255, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 0, 0, 0, 0}, + {1, 0, 2, 255, 3, 255, 4, 255, 5, 255, 6, 255, 0, 0, 0, 0}, + {1, 0, 2, 255, 3, 255, 4, 255, 5, 255, 7, 6, 0, 0, 0, 0}, + {1, 0, 2, 255, 3, 255, 4, 255, 6, 5, 7, 255, 0, 0, 0, 0}, + {1, 0, 2, 255, 3, 255, 4, 255, 6, 5, 8, 7, 0, 0, 0, 0}, + {1, 0, 2, 255, 3, 255, 5, 4, 6, 255, 7, 255, 0, 0, 0, 0}, + {1, 0, 2, 255, 3, 255, 5, 4, 6, 255, 8, 7, 0, 0, 0, 0}, + {1, 0, 2, 255, 3, 255, 5, 4, 7, 6, 8, 255, 0, 0, 0, 0}, + {1, 0, 2, 255, 3, 255, 5, 4, 7, 6, 9, 8, 0, 0, 0, 0}, + {1, 0, 2, 255, 4, 3, 5, 255, 6, 255, 7, 255, 0, 0, 0, 0}, + {1, 0, 2, 255, 4, 3, 5, 255, 6, 255, 8, 7, 0, 0, 0, 0}, + {1, 0, 2, 255, 4, 3, 5, 255, 7, 6, 8, 255, 0, 0, 0, 0}, + {1, 0, 2, 255, 4, 3, 5, 255, 7, 6, 9, 8, 0, 0, 0, 0}, + {1, 0, 2, 255, 4, 3, 6, 5, 7, 255, 8, 255, 0, 0, 0, 0}, + {1, 0, 2, 255, 4, 3, 6, 5, 7, 255, 9, 8, 0, 0, 0, 0}, + {1, 0, 2, 255, 4, 3, 6, 5, 8, 7, 9, 255, 0, 0, 0, 0}, + {1, 0, 2, 255, 4, 3, 6, 5, 8, 7, 10, 9, 0, 0, 0, 0}, + {1, 0, 3, 2, 4, 255, 5, 255, 6, 255, 7, 255, 0, 0, 0, 0}, + {1, 0, 3, 2, 4, 255, 5, 255, 6, 255, 8, 7, 0, 0, 0, 0}, + {1, 0, 3, 2, 4, 255, 5, 255, 7, 6, 8, 255, 0, 0, 0, 0}, + {1, 0, 3, 2, 4, 255, 5, 255, 7, 6, 9, 8, 0, 0, 0, 0}, + {1, 0, 3, 2, 4, 255, 6, 5, 7, 255, 8, 255, 0, 0, 0, 0}, + {1, 0, 3, 2, 4, 255, 6, 5, 7, 255, 9, 8, 0, 0, 0, 0}, + {1, 0, 3, 2, 4, 255, 6, 5, 8, 7, 9, 255, 0, 0, 0, 0}, + {1, 0, 3, 2, 4, 255, 6, 5, 8, 7, 10, 9, 0, 0, 0, 0}, + {1, 0, 3, 2, 5, 4, 6, 255, 7, 255, 8, 255, 0, 0, 0, 0}, + {1, 0, 3, 2, 5, 4, 6, 255, 7, 255, 9, 8, 0, 0, 0, 0}, + {1, 0, 3, 2, 5, 4, 6, 255, 8, 7, 9, 255, 0, 0, 0, 0}, + {1, 0, 3, 2, 5, 4, 6, 255, 8, 7, 10, 9, 0, 0, 0, 0}, + {1, 0, 3, 2, 5, 4, 7, 6, 8, 255, 9, 255, 0, 0, 0, 0}, + {1, 0, 3, 2, 5, 4, 7, 6, 8, 255, 10, 9, 0, 0, 0, 0}, + {1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 10, 255, 0, 0, 0, 0}, + {1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 0, 0, 0, 0}, + {0, 255, 255, 255, 1, 255, 255, 255, 2, 255, 255, 255, 3, 255, 255, 255}, + {0, 255, 255, 255, 1, 255, 255, 255, 2, 255, 255, 255, 4, 3, 255, 255}, + {0, 255, 255, 255, 1, 255, 255, 255, 2, 255, 255, 255, 5, 4, 3, 255}, + {0, 255, 255, 255, 1, 255, 255, 255, 3, 2, 255, 255, 4, 255, 255, 255}, + {0, 255, 255, 255, 1, 255, 255, 255, 3, 2, 255, 255, 5, 4, 255, 255}, + {0, 255, 255, 255, 1, 255, 255, 255, 3, 2, 255, 255, 6, 5, 4, 255}, + {0, 255, 255, 255, 1, 255, 255, 255, 4, 3, 2, 255, 5, 255, 255, 255}, + {0, 255, 255, 255, 1, 255, 255, 255, 4, 3, 2, 255, 6, 5, 255, 255}, + {0, 255, 255, 255, 1, 255, 255, 255, 4, 3, 2, 255, 7, 6, 5, 255}, + {0, 255, 255, 255, 2, 1, 255, 255, 3, 255, 255, 255, 4, 255, 255, 255}, + {0, 255, 255, 255, 2, 1, 255, 255, 3, 255, 255, 255, 5, 4, 255, 255}, + {0, 255, 255, 255, 2, 1, 255, 255, 3, 255, 255, 255, 6, 5, 4, 255}, + {0, 255, 255, 255, 2, 1, 255, 255, 4, 3, 255, 255, 5, 255, 255, 255}, + {0, 255, 255, 255, 2, 1, 255, 255, 4, 3, 255, 255, 6, 5, 255, 255}, + {0, 255, 255, 255, 2, 1, 255, 255, 4, 3, 255, 255, 7, 6, 5, 255}, + {0, 255, 255, 255, 2, 1, 255, 255, 5, 4, 3, 255, 6, 255, 255, 255}, + {0, 255, 255, 255, 2, 1, 255, 255, 5, 4, 3, 255, 7, 6, 255, 255}, + {0, 255, 255, 255, 2, 1, 255, 255, 5, 4, 3, 255, 8, 7, 6, 255}, + {0, 255, 255, 255, 3, 2, 1, 255, 4, 255, 255, 255, 5, 255, 255, 255}, + {0, 255, 255, 255, 3, 2, 1, 255, 4, 255, 255, 255, 6, 5, 255, 255}, + {0, 255, 255, 255, 3, 2, 1, 255, 4, 255, 255, 255, 7, 6, 5, 255}, + {0, 255, 255, 255, 3, 2, 1, 255, 5, 4, 255, 255, 6, 255, 255, 255}, + {0, 255, 255, 255, 3, 2, 1, 255, 5, 4, 255, 255, 7, 6, 255, 255}, + {0, 255, 255, 255, 3, 2, 1, 255, 5, 4, 255, 255, 8, 7, 6, 255}, + {0, 255, 255, 255, 3, 2, 1, 255, 6, 5, 4, 255, 7, 255, 255, 255}, + {0, 255, 255, 255, 3, 2, 1, 255, 6, 5, 4, 255, 8, 7, 255, 255}, + {0, 255, 255, 255, 3, 2, 1, 255, 6, 5, 4, 255, 9, 8, 7, 255}, + {1, 0, 255, 255, 2, 255, 255, 255, 3, 255, 255, 255, 4, 255, 255, 255}, + {1, 0, 255, 255, 2, 255, 255, 255, 3, 255, 255, 255, 5, 4, 255, 255}, + {1, 0, 255, 255, 2, 255, 255, 255, 3, 255, 255, 255, 6, 5, 4, 255}, + {1, 0, 255, 255, 2, 255, 255, 255, 4, 3, 255, 255, 5, 255, 255, 255}, + {1, 0, 255, 255, 2, 255, 255, 255, 4, 3, 255, 255, 6, 5, 255, 255}, + {1, 0, 255, 255, 2, 255, 255, 255, 4, 3, 255, 255, 7, 6, 5, 255}, + {1, 0, 255, 255, 2, 255, 255, 255, 5, 4, 3, 255, 6, 255, 255, 255}, + {1, 0, 255, 255, 2, 255, 255, 255, 5, 4, 3, 255, 7, 6, 255, 255}, + {1, 0, 255, 255, 2, 255, 255, 255, 5, 4, 3, 255, 8, 7, 6, 255}, + {1, 0, 255, 255, 3, 2, 255, 255, 4, 255, 255, 255, 5, 255, 255, 255}, + {1, 0, 255, 255, 3, 2, 255, 255, 4, 255, 255, 255, 6, 5, 255, 255}, + {1, 0, 255, 255, 3, 2, 255, 255, 4, 255, 255, 255, 7, 6, 5, 255}, + {1, 0, 255, 255, 3, 2, 255, 255, 5, 4, 255, 255, 6, 255, 255, 255}, + {1, 0, 255, 255, 3, 2, 255, 255, 5, 4, 255, 255, 7, 6, 255, 255}, + {1, 0, 255, 255, 3, 2, 255, 255, 5, 4, 255, 255, 8, 7, 6, 255}, + {1, 0, 255, 255, 3, 2, 255, 255, 6, 5, 4, 255, 7, 255, 255, 255}, + {1, 0, 255, 255, 3, 2, 255, 255, 6, 5, 4, 255, 8, 7, 255, 255}, + {1, 0, 255, 255, 3, 2, 255, 255, 6, 5, 4, 255, 9, 8, 7, 255}, + {1, 0, 255, 255, 4, 3, 2, 255, 5, 255, 255, 255, 6, 255, 255, 255}, + {1, 0, 255, 255, 4, 3, 2, 255, 5, 255, 255, 255, 7, 6, 255, 255}, + {1, 0, 255, 255, 4, 3, 2, 255, 5, 255, 255, 255, 8, 7, 6, 255}, + {1, 0, 255, 255, 4, 3, 2, 255, 6, 5, 255, 255, 7, 255, 255, 255}, + {1, 0, 255, 255, 4, 3, 2, 255, 6, 5, 255, 255, 8, 7, 255, 255}, + {1, 0, 255, 255, 4, 3, 2, 255, 6, 5, 255, 255, 9, 8, 7, 255}, + {1, 0, 255, 255, 4, 3, 2, 255, 7, 6, 5, 255, 8, 255, 255, 255}, + {1, 0, 255, 255, 4, 3, 2, 255, 7, 6, 5, 255, 9, 8, 255, 255}, + {1, 0, 255, 255, 4, 3, 2, 255, 7, 6, 5, 255, 10, 9, 8, 255}, + {2, 1, 0, 255, 3, 255, 255, 255, 4, 255, 255, 255, 5, 255, 255, 255}, + {2, 1, 0, 255, 3, 255, 255, 255, 4, 255, 255, 255, 6, 5, 255, 255}, + {2, 1, 0, 255, 3, 255, 255, 255, 4, 255, 255, 255, 7, 6, 5, 255}, + {2, 1, 0, 255, 3, 255, 255, 255, 5, 4, 255, 255, 6, 255, 255, 255}, + {2, 1, 0, 255, 3, 255, 255, 255, 5, 4, 255, 255, 7, 6, 255, 255}, + {2, 1, 0, 255, 3, 255, 255, 255, 5, 4, 255, 255, 8, 7, 6, 255}, + {2, 1, 0, 255, 3, 255, 255, 255, 6, 5, 4, 255, 7, 255, 255, 255}, + {2, 1, 0, 255, 3, 255, 255, 255, 6, 5, 4, 255, 8, 7, 255, 255}, + {2, 1, 0, 255, 3, 255, 255, 255, 6, 5, 4, 255, 9, 8, 7, 255}, + {2, 1, 0, 255, 4, 3, 255, 255, 5, 255, 255, 255, 6, 255, 255, 255}, + {2, 1, 0, 255, 4, 3, 255, 255, 5, 255, 255, 255, 7, 6, 255, 255}, + {2, 1, 0, 255, 4, 3, 255, 255, 5, 255, 255, 255, 8, 7, 6, 255}, + {2, 1, 0, 255, 4, 3, 255, 255, 6, 5, 255, 255, 7, 255, 255, 255}, + {2, 1, 0, 255, 4, 3, 255, 255, 6, 5, 255, 255, 8, 7, 255, 255}, + {2, 1, 0, 255, 4, 3, 255, 255, 6, 5, 255, 255, 9, 8, 7, 255}, + {2, 1, 0, 255, 4, 3, 255, 255, 7, 6, 5, 255, 8, 255, 255, 255}, + {2, 1, 0, 255, 4, 3, 255, 255, 7, 6, 5, 255, 9, 8, 255, 255}, + {2, 1, 0, 255, 4, 3, 255, 255, 7, 6, 5, 255, 10, 9, 8, 255}, + {2, 1, 0, 255, 5, 4, 3, 255, 6, 255, 255, 255, 7, 255, 255, 255}, + {2, 1, 0, 255, 5, 4, 3, 255, 6, 255, 255, 255, 8, 7, 255, 255}, + {2, 1, 0, 255, 5, 4, 3, 255, 6, 255, 255, 255, 9, 8, 7, 255}, + {2, 1, 0, 255, 5, 4, 3, 255, 7, 6, 255, 255, 8, 255, 255, 255}, + {2, 1, 0, 255, 5, 4, 3, 255, 7, 6, 255, 255, 9, 8, 255, 255}, + {2, 1, 0, 255, 5, 4, 3, 255, 7, 6, 255, 255, 10, 9, 8, 255}, + {2, 1, 0, 255, 5, 4, 3, 255, 8, 7, 6, 255, 9, 255, 255, 255}, + {2, 1, 0, 255, 5, 4, 3, 255, 8, 7, 6, 255, 10, 9, 255, 255}, + {2, 1, 0, 255, 5, 4, 3, 255, 8, 7, 6, 255, 11, 10, 9, 255}, + {0, 255, 255, 255, 1, 255, 255, 255, 2, 255, 255, 255, 0, 0, 0, 0}, + {0, 255, 255, 255, 1, 255, 255, 255, 3, 2, 255, 255, 0, 0, 0, 0}, + {0, 255, 255, 255, 1, 255, 255, 255, 4, 3, 2, 255, 0, 0, 0, 0}, + {0, 255, 255, 255, 1, 255, 255, 255, 5, 4, 3, 2, 0, 0, 0, 0}, + {0, 255, 255, 255, 2, 1, 255, 255, 3, 255, 255, 255, 0, 0, 0, 0}, + {0, 255, 255, 255, 2, 1, 255, 255, 4, 3, 255, 255, 0, 0, 0, 0}, + {0, 255, 255, 255, 2, 1, 255, 255, 5, 4, 3, 255, 0, 0, 0, 0}, + {0, 255, 255, 255, 2, 1, 255, 255, 6, 5, 4, 3, 0, 0, 0, 0}, + {0, 255, 255, 255, 3, 2, 1, 255, 4, 255, 255, 255, 0, 0, 0, 0}, + {0, 255, 255, 255, 3, 2, 1, 255, 5, 4, 255, 255, 0, 0, 0, 0}, + {0, 255, 255, 255, 3, 2, 1, 255, 6, 5, 4, 255, 0, 0, 0, 0}, + {0, 255, 255, 255, 3, 2, 1, 255, 7, 6, 5, 4, 0, 0, 0, 0}, + {0, 255, 255, 255, 4, 3, 2, 1, 5, 255, 255, 255, 0, 0, 0, 0}, + {0, 255, 255, 255, 4, 3, 2, 1, 6, 5, 255, 255, 0, 0, 0, 0}, + {0, 255, 255, 255, 4, 3, 2, 1, 7, 6, 5, 255, 0, 0, 0, 0}, + {0, 255, 255, 255, 4, 3, 2, 1, 8, 7, 6, 5, 0, 0, 0, 0}, + {1, 0, 255, 255, 2, 255, 255, 255, 3, 255, 255, 255, 0, 0, 0, 0}, + {1, 0, 255, 255, 2, 255, 255, 255, 4, 3, 255, 255, 0, 0, 0, 0}, + {1, 0, 255, 255, 2, 255, 255, 255, 5, 4, 3, 255, 0, 0, 0, 0}, + {1, 0, 255, 255, 2, 255, 255, 255, 6, 5, 4, 3, 0, 0, 0, 0}, + {1, 0, 255, 255, 3, 2, 255, 255, 4, 255, 255, 255, 0, 0, 0, 0}, + {1, 0, 255, 255, 3, 2, 255, 255, 5, 4, 255, 255, 0, 0, 0, 0}, + {1, 0, 255, 255, 3, 2, 255, 255, 6, 5, 4, 255, 0, 0, 0, 0}, + {1, 0, 255, 255, 3, 2, 255, 255, 7, 6, 5, 4, 0, 0, 0, 0}, + {1, 0, 255, 255, 4, 3, 2, 255, 5, 255, 255, 255, 0, 0, 0, 0}, + {1, 0, 255, 255, 4, 3, 2, 255, 6, 5, 255, 255, 0, 0, 0, 0}, + {1, 0, 255, 255, 4, 3, 2, 255, 7, 6, 5, 255, 0, 0, 0, 0}, + {1, 0, 255, 255, 4, 3, 2, 255, 8, 7, 6, 5, 0, 0, 0, 0}, + {1, 0, 255, 255, 5, 4, 3, 2, 6, 255, 255, 255, 0, 0, 0, 0}, + {1, 0, 255, 255, 5, 4, 3, 2, 7, 6, 255, 255, 0, 0, 0, 0}, + {1, 0, 255, 255, 5, 4, 3, 2, 8, 7, 6, 255, 0, 0, 0, 0}, + {1, 0, 255, 255, 5, 4, 3, 2, 9, 8, 7, 6, 0, 0, 0, 0}, + {2, 1, 0, 255, 3, 255, 255, 255, 4, 255, 255, 255, 0, 0, 0, 0}, + {2, 1, 0, 255, 3, 255, 255, 255, 5, 4, 255, 255, 0, 0, 0, 0}, + {2, 1, 0, 255, 3, 255, 255, 255, 6, 5, 4, 255, 0, 0, 0, 0}, + {2, 1, 0, 255, 3, 255, 255, 255, 7, 6, 5, 4, 0, 0, 0, 0}, + {2, 1, 0, 255, 4, 3, 255, 255, 5, 255, 255, 255, 0, 0, 0, 0}, + {2, 1, 0, 255, 4, 3, 255, 255, 6, 5, 255, 255, 0, 0, 0, 0}, + {2, 1, 0, 255, 4, 3, 255, 255, 7, 6, 5, 255, 0, 0, 0, 0}, + {2, 1, 0, 255, 4, 3, 255, 255, 8, 7, 6, 5, 0, 0, 0, 0}, + {2, 1, 0, 255, 5, 4, 3, 255, 6, 255, 255, 255, 0, 0, 0, 0}, + {2, 1, 0, 255, 5, 4, 3, 255, 7, 6, 255, 255, 0, 0, 0, 0}, + {2, 1, 0, 255, 5, 4, 3, 255, 8, 7, 6, 255, 0, 0, 0, 0}, + {2, 1, 0, 255, 5, 4, 3, 255, 9, 8, 7, 6, 0, 0, 0, 0}, + {2, 1, 0, 255, 6, 5, 4, 3, 7, 255, 255, 255, 0, 0, 0, 0}, + {2, 1, 0, 255, 6, 5, 4, 3, 8, 7, 255, 255, 0, 0, 0, 0}, + {2, 1, 0, 255, 6, 5, 4, 3, 9, 8, 7, 255, 0, 0, 0, 0}, + {2, 1, 0, 255, 6, 5, 4, 3, 10, 9, 8, 7, 0, 0, 0, 0}, + {3, 2, 1, 0, 4, 255, 255, 255, 5, 255, 255, 255, 0, 0, 0, 0}, + {3, 2, 1, 0, 4, 255, 255, 255, 6, 5, 255, 255, 0, 0, 0, 0}, + {3, 2, 1, 0, 4, 255, 255, 255, 7, 6, 5, 255, 0, 0, 0, 0}, + {3, 2, 1, 0, 4, 255, 255, 255, 8, 7, 6, 5, 0, 0, 0, 0}, + {3, 2, 1, 0, 5, 4, 255, 255, 6, 255, 255, 255, 0, 0, 0, 0}, + {3, 2, 1, 0, 5, 4, 255, 255, 7, 6, 255, 255, 0, 0, 0, 0}, + {3, 2, 1, 0, 5, 4, 255, 255, 8, 7, 6, 255, 0, 0, 0, 0}, + {3, 2, 1, 0, 5, 4, 255, 255, 9, 8, 7, 6, 0, 0, 0, 0}, + {3, 2, 1, 0, 6, 5, 4, 255, 7, 255, 255, 255, 0, 0, 0, 0}, + {3, 2, 1, 0, 6, 5, 4, 255, 8, 7, 255, 255, 0, 0, 0, 0}, + {3, 2, 1, 0, 6, 5, 4, 255, 9, 8, 7, 255, 0, 0, 0, 0}, + {3, 2, 1, 0, 6, 5, 4, 255, 10, 9, 8, 7, 0, 0, 0, 0}, + {3, 2, 1, 0, 7, 6, 5, 4, 8, 255, 255, 255, 0, 0, 0, 0}, + {3, 2, 1, 0, 7, 6, 5, 4, 9, 8, 255, 255, 0, 0, 0, 0}, + {3, 2, 1, 0, 7, 6, 5, 4, 10, 9, 8, 255, 0, 0, 0, 0}, + {3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 0, 0, 0, 0}}; /* number of two bytes : 64 */ /* number of two + three bytes : 145 */ /* number of two + three + four bytes : 209 */ -const uint8_t utf8bigindex[4096][2] = -{ {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {209, 12}, - {209, 12}, - {209, 12}, - {146, 4}, - {209, 12}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {209, 12}, - {209, 12}, - {147, 5}, - {209, 12}, - {150, 5}, - {162, 5}, - {65, 5}, - {209, 12}, - {153, 5}, - {165, 5}, - {67, 5}, - {177, 5}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {209, 12}, - {148, 6}, - {209, 12}, - {151, 6}, - {163, 6}, - {66, 6}, - {209, 12}, - {154, 6}, - {166, 6}, - {68, 6}, - {178, 6}, - {74, 6}, - {92, 6}, - {64, 4}, - {209, 12}, - {157, 6}, - {169, 6}, - {70, 6}, - {181, 6}, - {76, 6}, - {94, 6}, - {65, 5}, - {193, 6}, - {82, 6}, - {100, 6}, - {67, 5}, - {118, 6}, - {73, 5}, - {91, 5}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {152, 7}, - {164, 7}, - {145, 3}, - {209, 12}, - {155, 7}, - {167, 7}, - {69, 7}, - {179, 7}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {170, 7}, - {71, 7}, - {182, 7}, - {77, 7}, - {95, 7}, - {65, 5}, - {194, 7}, - {83, 7}, - {101, 7}, - {67, 5}, - {119, 7}, - {73, 5}, - {91, 5}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {185, 7}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {103, 7}, - {68, 6}, - {121, 7}, - {74, 6}, - {92, 6}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {76, 6}, - {94, 6}, - {4, 7}, - {193, 6}, - {82, 6}, - {100, 6}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {209, 12}, - {156, 8}, - {168, 8}, - {146, 4}, - {180, 8}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {159, 8}, - {171, 8}, - {72, 8}, - {183, 8}, - {78, 8}, - {96, 8}, - {65, 5}, - {195, 8}, - {84, 8}, - {102, 8}, - {67, 5}, - {120, 8}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {174, 8}, - {148, 6}, - {186, 8}, - {80, 8}, - {98, 8}, - {66, 6}, - {198, 8}, - {86, 8}, - {104, 8}, - {68, 6}, - {122, 8}, - {74, 6}, - {92, 6}, - {3, 8}, - {209, 12}, - {157, 6}, - {110, 8}, - {70, 6}, - {128, 8}, - {76, 6}, - {94, 6}, - {5, 8}, - {193, 6}, - {82, 6}, - {100, 6}, - {9, 8}, - {118, 6}, - {17, 8}, - {33, 8}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {189, 8}, - {152, 7}, - {164, 7}, - {145, 3}, - {201, 8}, - {88, 8}, - {106, 8}, - {69, 7}, - {124, 8}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {112, 8}, - {71, 7}, - {130, 8}, - {77, 7}, - {95, 7}, - {6, 8}, - {194, 7}, - {83, 7}, - {101, 7}, - {10, 8}, - {119, 7}, - {18, 8}, - {34, 8}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {136, 8}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {103, 7}, - {12, 8}, - {121, 7}, - {20, 8}, - {36, 8}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {24, 8}, - {40, 8}, - {4, 7}, - {193, 6}, - {82, 6}, - {48, 8}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {209, 12}, - {209, 12}, - {209, 12}, - {146, 4}, - {209, 12}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {160, 9}, - {172, 9}, - {147, 5}, - {184, 9}, - {150, 5}, - {162, 5}, - {65, 5}, - {196, 9}, - {153, 5}, - {165, 5}, - {67, 5}, - {177, 5}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {175, 9}, - {148, 6}, - {187, 9}, - {81, 9}, - {99, 9}, - {66, 6}, - {199, 9}, - {87, 9}, - {105, 9}, - {68, 6}, - {123, 9}, - {74, 6}, - {92, 6}, - {64, 4}, - {209, 12}, - {157, 6}, - {111, 9}, - {70, 6}, - {129, 9}, - {76, 6}, - {94, 6}, - {65, 5}, - {193, 6}, - {82, 6}, - {100, 6}, - {67, 5}, - {118, 6}, - {73, 5}, - {91, 5}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {190, 9}, - {152, 7}, - {164, 7}, - {145, 3}, - {202, 9}, - {89, 9}, - {107, 9}, - {69, 7}, - {125, 9}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {113, 9}, - {71, 7}, - {131, 9}, - {77, 7}, - {95, 7}, - {7, 9}, - {194, 7}, - {83, 7}, - {101, 7}, - {11, 9}, - {119, 7}, - {19, 9}, - {35, 9}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {137, 9}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {103, 7}, - {13, 9}, - {121, 7}, - {21, 9}, - {37, 9}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {25, 9}, - {41, 9}, - {4, 7}, - {193, 6}, - {82, 6}, - {49, 9}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {205, 9}, - {156, 8}, - {168, 8}, - {146, 4}, - {180, 8}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {159, 8}, - {115, 9}, - {72, 8}, - {133, 9}, - {78, 8}, - {96, 8}, - {65, 5}, - {195, 8}, - {84, 8}, - {102, 8}, - {67, 5}, - {120, 8}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {174, 8}, - {148, 6}, - {139, 9}, - {80, 8}, - {98, 8}, - {66, 6}, - {198, 8}, - {86, 8}, - {104, 8}, - {14, 9}, - {122, 8}, - {22, 9}, - {38, 9}, - {3, 8}, - {209, 12}, - {157, 6}, - {110, 8}, - {70, 6}, - {128, 8}, - {26, 9}, - {42, 9}, - {5, 8}, - {193, 6}, - {82, 6}, - {50, 9}, - {9, 8}, - {118, 6}, - {17, 8}, - {33, 8}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {189, 8}, - {152, 7}, - {164, 7}, - {145, 3}, - {201, 8}, - {88, 8}, - {106, 8}, - {69, 7}, - {124, 8}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {112, 8}, - {71, 7}, - {130, 8}, - {28, 9}, - {44, 9}, - {6, 8}, - {194, 7}, - {83, 7}, - {52, 9}, - {10, 8}, - {119, 7}, - {18, 8}, - {34, 8}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {136, 8}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {56, 9}, - {12, 8}, - {121, 7}, - {20, 8}, - {36, 8}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {24, 8}, - {40, 8}, - {4, 7}, - {193, 6}, - {82, 6}, - {48, 8}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {209, 12}, - {209, 12}, - {209, 12}, - {146, 4}, - {209, 12}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {209, 12}, - {209, 12}, - {147, 5}, - {209, 12}, - {150, 5}, - {162, 5}, - {65, 5}, - {209, 12}, - {153, 5}, - {165, 5}, - {67, 5}, - {177, 5}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {176, 10}, - {148, 6}, - {188, 10}, - {151, 6}, - {163, 6}, - {66, 6}, - {200, 10}, - {154, 6}, - {166, 6}, - {68, 6}, - {178, 6}, - {74, 6}, - {92, 6}, - {64, 4}, - {209, 12}, - {157, 6}, - {169, 6}, - {70, 6}, - {181, 6}, - {76, 6}, - {94, 6}, - {65, 5}, - {193, 6}, - {82, 6}, - {100, 6}, - {67, 5}, - {118, 6}, - {73, 5}, - {91, 5}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {191, 10}, - {152, 7}, - {164, 7}, - {145, 3}, - {203, 10}, - {90, 10}, - {108, 10}, - {69, 7}, - {126, 10}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {114, 10}, - {71, 7}, - {132, 10}, - {77, 7}, - {95, 7}, - {65, 5}, - {194, 7}, - {83, 7}, - {101, 7}, - {67, 5}, - {119, 7}, - {73, 5}, - {91, 5}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {138, 10}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {103, 7}, - {68, 6}, - {121, 7}, - {74, 6}, - {92, 6}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {76, 6}, - {94, 6}, - {4, 7}, - {193, 6}, - {82, 6}, - {100, 6}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {206, 10}, - {156, 8}, - {168, 8}, - {146, 4}, - {180, 8}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {159, 8}, - {116, 10}, - {72, 8}, - {134, 10}, - {78, 8}, - {96, 8}, - {65, 5}, - {195, 8}, - {84, 8}, - {102, 8}, - {67, 5}, - {120, 8}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {174, 8}, - {148, 6}, - {140, 10}, - {80, 8}, - {98, 8}, - {66, 6}, - {198, 8}, - {86, 8}, - {104, 8}, - {15, 10}, - {122, 8}, - {23, 10}, - {39, 10}, - {3, 8}, - {209, 12}, - {157, 6}, - {110, 8}, - {70, 6}, - {128, 8}, - {27, 10}, - {43, 10}, - {5, 8}, - {193, 6}, - {82, 6}, - {51, 10}, - {9, 8}, - {118, 6}, - {17, 8}, - {33, 8}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {189, 8}, - {152, 7}, - {164, 7}, - {145, 3}, - {201, 8}, - {88, 8}, - {106, 8}, - {69, 7}, - {124, 8}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {112, 8}, - {71, 7}, - {130, 8}, - {29, 10}, - {45, 10}, - {6, 8}, - {194, 7}, - {83, 7}, - {53, 10}, - {10, 8}, - {119, 7}, - {18, 8}, - {34, 8}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {136, 8}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {57, 10}, - {12, 8}, - {121, 7}, - {20, 8}, - {36, 8}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {24, 8}, - {40, 8}, - {4, 7}, - {193, 6}, - {82, 6}, - {48, 8}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {209, 12}, - {209, 12}, - {209, 12}, - {146, 4}, - {209, 12}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {160, 9}, - {172, 9}, - {147, 5}, - {184, 9}, - {150, 5}, - {162, 5}, - {65, 5}, - {196, 9}, - {153, 5}, - {165, 5}, - {67, 5}, - {177, 5}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {175, 9}, - {148, 6}, - {142, 10}, - {81, 9}, - {99, 9}, - {66, 6}, - {199, 9}, - {87, 9}, - {105, 9}, - {68, 6}, - {123, 9}, - {74, 6}, - {92, 6}, - {64, 4}, - {209, 12}, - {157, 6}, - {111, 9}, - {70, 6}, - {129, 9}, - {76, 6}, - {94, 6}, - {65, 5}, - {193, 6}, - {82, 6}, - {100, 6}, - {67, 5}, - {118, 6}, - {73, 5}, - {91, 5}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {190, 9}, - {152, 7}, - {164, 7}, - {145, 3}, - {202, 9}, - {89, 9}, - {107, 9}, - {69, 7}, - {125, 9}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {113, 9}, - {71, 7}, - {131, 9}, - {30, 10}, - {46, 10}, - {7, 9}, - {194, 7}, - {83, 7}, - {54, 10}, - {11, 9}, - {119, 7}, - {19, 9}, - {35, 9}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {137, 9}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {58, 10}, - {13, 9}, - {121, 7}, - {21, 9}, - {37, 9}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {25, 9}, - {41, 9}, - {4, 7}, - {193, 6}, - {82, 6}, - {49, 9}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {205, 9}, - {156, 8}, - {168, 8}, - {146, 4}, - {180, 8}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {159, 8}, - {115, 9}, - {72, 8}, - {133, 9}, - {78, 8}, - {96, 8}, - {65, 5}, - {195, 8}, - {84, 8}, - {102, 8}, - {67, 5}, - {120, 8}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {174, 8}, - {148, 6}, - {139, 9}, - {80, 8}, - {98, 8}, - {66, 6}, - {198, 8}, - {86, 8}, - {60, 10}, - {14, 9}, - {122, 8}, - {22, 9}, - {38, 9}, - {3, 8}, - {209, 12}, - {157, 6}, - {110, 8}, - {70, 6}, - {128, 8}, - {26, 9}, - {42, 9}, - {5, 8}, - {193, 6}, - {82, 6}, - {50, 9}, - {9, 8}, - {118, 6}, - {17, 8}, - {33, 8}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {189, 8}, - {152, 7}, - {164, 7}, - {145, 3}, - {201, 8}, - {88, 8}, - {106, 8}, - {69, 7}, - {124, 8}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {112, 8}, - {71, 7}, - {130, 8}, - {28, 9}, - {44, 9}, - {6, 8}, - {194, 7}, - {83, 7}, - {52, 9}, - {10, 8}, - {119, 7}, - {18, 8}, - {34, 8}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {136, 8}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {56, 9}, - {12, 8}, - {121, 7}, - {20, 8}, - {36, 8}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {24, 8}, - {40, 8}, - {4, 7}, - {193, 6}, - {82, 6}, - {48, 8}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {209, 12}, - {209, 12}, - {209, 12}, - {146, 4}, - {209, 12}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {209, 12}, - {209, 12}, - {147, 5}, - {209, 12}, - {150, 5}, - {162, 5}, - {65, 5}, - {209, 12}, - {153, 5}, - {165, 5}, - {67, 5}, - {177, 5}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {209, 12}, - {148, 6}, - {209, 12}, - {151, 6}, - {163, 6}, - {66, 6}, - {209, 12}, - {154, 6}, - {166, 6}, - {68, 6}, - {178, 6}, - {74, 6}, - {92, 6}, - {64, 4}, - {209, 12}, - {157, 6}, - {169, 6}, - {70, 6}, - {181, 6}, - {76, 6}, - {94, 6}, - {65, 5}, - {193, 6}, - {82, 6}, - {100, 6}, - {67, 5}, - {118, 6}, - {73, 5}, - {91, 5}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {192, 11}, - {152, 7}, - {164, 7}, - {145, 3}, - {204, 11}, - {155, 7}, - {167, 7}, - {69, 7}, - {179, 7}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {170, 7}, - {71, 7}, - {182, 7}, - {77, 7}, - {95, 7}, - {65, 5}, - {194, 7}, - {83, 7}, - {101, 7}, - {67, 5}, - {119, 7}, - {73, 5}, - {91, 5}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {185, 7}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {103, 7}, - {68, 6}, - {121, 7}, - {74, 6}, - {92, 6}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {76, 6}, - {94, 6}, - {4, 7}, - {193, 6}, - {82, 6}, - {100, 6}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {207, 11}, - {156, 8}, - {168, 8}, - {146, 4}, - {180, 8}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {159, 8}, - {117, 11}, - {72, 8}, - {135, 11}, - {78, 8}, - {96, 8}, - {65, 5}, - {195, 8}, - {84, 8}, - {102, 8}, - {67, 5}, - {120, 8}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {174, 8}, - {148, 6}, - {141, 11}, - {80, 8}, - {98, 8}, - {66, 6}, - {198, 8}, - {86, 8}, - {104, 8}, - {68, 6}, - {122, 8}, - {74, 6}, - {92, 6}, - {3, 8}, - {209, 12}, - {157, 6}, - {110, 8}, - {70, 6}, - {128, 8}, - {76, 6}, - {94, 6}, - {5, 8}, - {193, 6}, - {82, 6}, - {100, 6}, - {9, 8}, - {118, 6}, - {17, 8}, - {33, 8}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {189, 8}, - {152, 7}, - {164, 7}, - {145, 3}, - {201, 8}, - {88, 8}, - {106, 8}, - {69, 7}, - {124, 8}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {112, 8}, - {71, 7}, - {130, 8}, - {77, 7}, - {95, 7}, - {6, 8}, - {194, 7}, - {83, 7}, - {101, 7}, - {10, 8}, - {119, 7}, - {18, 8}, - {34, 8}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {136, 8}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {103, 7}, - {12, 8}, - {121, 7}, - {20, 8}, - {36, 8}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {24, 8}, - {40, 8}, - {4, 7}, - {193, 6}, - {82, 6}, - {48, 8}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {209, 12}, - {209, 12}, - {209, 12}, - {146, 4}, - {209, 12}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {160, 9}, - {172, 9}, - {147, 5}, - {184, 9}, - {150, 5}, - {162, 5}, - {65, 5}, - {196, 9}, - {153, 5}, - {165, 5}, - {67, 5}, - {177, 5}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {175, 9}, - {148, 6}, - {143, 11}, - {81, 9}, - {99, 9}, - {66, 6}, - {199, 9}, - {87, 9}, - {105, 9}, - {68, 6}, - {123, 9}, - {74, 6}, - {92, 6}, - {64, 4}, - {209, 12}, - {157, 6}, - {111, 9}, - {70, 6}, - {129, 9}, - {76, 6}, - {94, 6}, - {65, 5}, - {193, 6}, - {82, 6}, - {100, 6}, - {67, 5}, - {118, 6}, - {73, 5}, - {91, 5}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {190, 9}, - {152, 7}, - {164, 7}, - {145, 3}, - {202, 9}, - {89, 9}, - {107, 9}, - {69, 7}, - {125, 9}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {113, 9}, - {71, 7}, - {131, 9}, - {31, 11}, - {47, 11}, - {7, 9}, - {194, 7}, - {83, 7}, - {55, 11}, - {11, 9}, - {119, 7}, - {19, 9}, - {35, 9}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {137, 9}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {59, 11}, - {13, 9}, - {121, 7}, - {21, 9}, - {37, 9}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {25, 9}, - {41, 9}, - {4, 7}, - {193, 6}, - {82, 6}, - {49, 9}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {205, 9}, - {156, 8}, - {168, 8}, - {146, 4}, - {180, 8}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {159, 8}, - {115, 9}, - {72, 8}, - {133, 9}, - {78, 8}, - {96, 8}, - {65, 5}, - {195, 8}, - {84, 8}, - {102, 8}, - {67, 5}, - {120, 8}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {174, 8}, - {148, 6}, - {139, 9}, - {80, 8}, - {98, 8}, - {66, 6}, - {198, 8}, - {86, 8}, - {61, 11}, - {14, 9}, - {122, 8}, - {22, 9}, - {38, 9}, - {3, 8}, - {209, 12}, - {157, 6}, - {110, 8}, - {70, 6}, - {128, 8}, - {26, 9}, - {42, 9}, - {5, 8}, - {193, 6}, - {82, 6}, - {50, 9}, - {9, 8}, - {118, 6}, - {17, 8}, - {33, 8}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {189, 8}, - {152, 7}, - {164, 7}, - {145, 3}, - {201, 8}, - {88, 8}, - {106, 8}, - {69, 7}, - {124, 8}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {112, 8}, - {71, 7}, - {130, 8}, - {28, 9}, - {44, 9}, - {6, 8}, - {194, 7}, - {83, 7}, - {52, 9}, - {10, 8}, - {119, 7}, - {18, 8}, - {34, 8}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {136, 8}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {56, 9}, - {12, 8}, - {121, 7}, - {20, 8}, - {36, 8}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {24, 8}, - {40, 8}, - {4, 7}, - {193, 6}, - {82, 6}, - {48, 8}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {209, 12}, - {209, 12}, - {209, 12}, - {146, 4}, - {209, 12}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {209, 12}, - {209, 12}, - {147, 5}, - {209, 12}, - {150, 5}, - {162, 5}, - {65, 5}, - {209, 12}, - {153, 5}, - {165, 5}, - {67, 5}, - {177, 5}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {176, 10}, - {148, 6}, - {188, 10}, - {151, 6}, - {163, 6}, - {66, 6}, - {200, 10}, - {154, 6}, - {166, 6}, - {68, 6}, - {178, 6}, - {74, 6}, - {92, 6}, - {64, 4}, - {209, 12}, - {157, 6}, - {169, 6}, - {70, 6}, - {181, 6}, - {76, 6}, - {94, 6}, - {65, 5}, - {193, 6}, - {82, 6}, - {100, 6}, - {67, 5}, - {118, 6}, - {73, 5}, - {91, 5}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {191, 10}, - {152, 7}, - {164, 7}, - {145, 3}, - {203, 10}, - {90, 10}, - {108, 10}, - {69, 7}, - {126, 10}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {114, 10}, - {71, 7}, - {132, 10}, - {77, 7}, - {95, 7}, - {65, 5}, - {194, 7}, - {83, 7}, - {101, 7}, - {67, 5}, - {119, 7}, - {73, 5}, - {91, 5}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {138, 10}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {103, 7}, - {68, 6}, - {121, 7}, - {74, 6}, - {92, 6}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {76, 6}, - {94, 6}, - {4, 7}, - {193, 6}, - {82, 6}, - {100, 6}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {206, 10}, - {156, 8}, - {168, 8}, - {146, 4}, - {180, 8}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {159, 8}, - {116, 10}, - {72, 8}, - {134, 10}, - {78, 8}, - {96, 8}, - {65, 5}, - {195, 8}, - {84, 8}, - {102, 8}, - {67, 5}, - {120, 8}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {174, 8}, - {148, 6}, - {140, 10}, - {80, 8}, - {98, 8}, - {66, 6}, - {198, 8}, - {86, 8}, - {62, 11}, - {15, 10}, - {122, 8}, - {23, 10}, - {39, 10}, - {3, 8}, - {209, 12}, - {157, 6}, - {110, 8}, - {70, 6}, - {128, 8}, - {27, 10}, - {43, 10}, - {5, 8}, - {193, 6}, - {82, 6}, - {51, 10}, - {9, 8}, - {118, 6}, - {17, 8}, - {33, 8}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {189, 8}, - {152, 7}, - {164, 7}, - {145, 3}, - {201, 8}, - {88, 8}, - {106, 8}, - {69, 7}, - {124, 8}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {112, 8}, - {71, 7}, - {130, 8}, - {29, 10}, - {45, 10}, - {6, 8}, - {194, 7}, - {83, 7}, - {53, 10}, - {10, 8}, - {119, 7}, - {18, 8}, - {34, 8}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {136, 8}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {57, 10}, - {12, 8}, - {121, 7}, - {20, 8}, - {36, 8}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {24, 8}, - {40, 8}, - {4, 7}, - {193, 6}, - {82, 6}, - {48, 8}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {209, 12}, - {209, 12}, - {209, 12}, - {146, 4}, - {209, 12}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {160, 9}, - {172, 9}, - {147, 5}, - {184, 9}, - {150, 5}, - {162, 5}, - {65, 5}, - {196, 9}, - {153, 5}, - {165, 5}, - {67, 5}, - {177, 5}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {175, 9}, - {148, 6}, - {142, 10}, - {81, 9}, - {99, 9}, - {66, 6}, - {199, 9}, - {87, 9}, - {105, 9}, - {68, 6}, - {123, 9}, - {74, 6}, - {92, 6}, - {64, 4}, - {209, 12}, - {157, 6}, - {111, 9}, - {70, 6}, - {129, 9}, - {76, 6}, - {94, 6}, - {65, 5}, - {193, 6}, - {82, 6}, - {100, 6}, - {67, 5}, - {118, 6}, - {73, 5}, - {91, 5}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {190, 9}, - {152, 7}, - {164, 7}, - {145, 3}, - {202, 9}, - {89, 9}, - {107, 9}, - {69, 7}, - {125, 9}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {113, 9}, - {71, 7}, - {131, 9}, - {30, 10}, - {46, 10}, - {7, 9}, - {194, 7}, - {83, 7}, - {54, 10}, - {11, 9}, - {119, 7}, - {19, 9}, - {35, 9}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {137, 9}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {58, 10}, - {13, 9}, - {121, 7}, - {21, 9}, - {37, 9}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {25, 9}, - {41, 9}, - {4, 7}, - {193, 6}, - {82, 6}, - {49, 9}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {205, 9}, - {156, 8}, - {168, 8}, - {146, 4}, - {180, 8}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {159, 8}, - {115, 9}, - {72, 8}, - {133, 9}, - {78, 8}, - {96, 8}, - {65, 5}, - {195, 8}, - {84, 8}, - {102, 8}, - {67, 5}, - {120, 8}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {174, 8}, - {148, 6}, - {139, 9}, - {80, 8}, - {98, 8}, - {66, 6}, - {198, 8}, - {86, 8}, - {60, 10}, - {14, 9}, - {122, 8}, - {22, 9}, - {38, 9}, - {3, 8}, - {209, 12}, - {157, 6}, - {110, 8}, - {70, 6}, - {128, 8}, - {26, 9}, - {42, 9}, - {5, 8}, - {193, 6}, - {82, 6}, - {50, 9}, - {9, 8}, - {118, 6}, - {17, 8}, - {33, 8}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {189, 8}, - {152, 7}, - {164, 7}, - {145, 3}, - {201, 8}, - {88, 8}, - {106, 8}, - {69, 7}, - {124, 8}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {112, 8}, - {71, 7}, - {130, 8}, - {28, 9}, - {44, 9}, - {6, 8}, - {194, 7}, - {83, 7}, - {52, 9}, - {10, 8}, - {119, 7}, - {18, 8}, - {34, 8}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {136, 8}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {56, 9}, - {12, 8}, - {121, 7}, - {20, 8}, - {36, 8}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {24, 8}, - {40, 8}, - {4, 7}, - {193, 6}, - {82, 6}, - {48, 8}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {209, 12}, - {209, 12}, - {209, 12}, - {146, 4}, - {209, 12}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {209, 12}, - {209, 12}, - {147, 5}, - {209, 12}, - {150, 5}, - {162, 5}, - {65, 5}, - {209, 12}, - {153, 5}, - {165, 5}, - {67, 5}, - {177, 5}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {209, 12}, - {148, 6}, - {209, 12}, - {151, 6}, - {163, 6}, - {66, 6}, - {209, 12}, - {154, 6}, - {166, 6}, - {68, 6}, - {178, 6}, - {74, 6}, - {92, 6}, - {64, 4}, - {209, 12}, - {157, 6}, - {169, 6}, - {70, 6}, - {181, 6}, - {76, 6}, - {94, 6}, - {65, 5}, - {193, 6}, - {82, 6}, - {100, 6}, - {67, 5}, - {118, 6}, - {73, 5}, - {91, 5}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {152, 7}, - {164, 7}, - {145, 3}, - {209, 12}, - {155, 7}, - {167, 7}, - {69, 7}, - {179, 7}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {170, 7}, - {71, 7}, - {182, 7}, - {77, 7}, - {95, 7}, - {65, 5}, - {194, 7}, - {83, 7}, - {101, 7}, - {67, 5}, - {119, 7}, - {73, 5}, - {91, 5}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {185, 7}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {103, 7}, - {68, 6}, - {121, 7}, - {74, 6}, - {92, 6}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {76, 6}, - {94, 6}, - {4, 7}, - {193, 6}, - {82, 6}, - {100, 6}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {208, 12}, - {156, 8}, - {168, 8}, - {146, 4}, - {180, 8}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {159, 8}, - {171, 8}, - {72, 8}, - {183, 8}, - {78, 8}, - {96, 8}, - {65, 5}, - {195, 8}, - {84, 8}, - {102, 8}, - {67, 5}, - {120, 8}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {174, 8}, - {148, 6}, - {186, 8}, - {80, 8}, - {98, 8}, - {66, 6}, - {198, 8}, - {86, 8}, - {104, 8}, - {68, 6}, - {122, 8}, - {74, 6}, - {92, 6}, - {3, 8}, - {209, 12}, - {157, 6}, - {110, 8}, - {70, 6}, - {128, 8}, - {76, 6}, - {94, 6}, - {5, 8}, - {193, 6}, - {82, 6}, - {100, 6}, - {9, 8}, - {118, 6}, - {17, 8}, - {33, 8}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {189, 8}, - {152, 7}, - {164, 7}, - {145, 3}, - {201, 8}, - {88, 8}, - {106, 8}, - {69, 7}, - {124, 8}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {112, 8}, - {71, 7}, - {130, 8}, - {77, 7}, - {95, 7}, - {6, 8}, - {194, 7}, - {83, 7}, - {101, 7}, - {10, 8}, - {119, 7}, - {18, 8}, - {34, 8}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {136, 8}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {103, 7}, - {12, 8}, - {121, 7}, - {20, 8}, - {36, 8}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {24, 8}, - {40, 8}, - {4, 7}, - {193, 6}, - {82, 6}, - {48, 8}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {209, 12}, - {209, 12}, - {209, 12}, - {146, 4}, - {209, 12}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {160, 9}, - {172, 9}, - {147, 5}, - {184, 9}, - {150, 5}, - {162, 5}, - {65, 5}, - {196, 9}, - {153, 5}, - {165, 5}, - {67, 5}, - {177, 5}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {175, 9}, - {148, 6}, - {144, 12}, - {81, 9}, - {99, 9}, - {66, 6}, - {199, 9}, - {87, 9}, - {105, 9}, - {68, 6}, - {123, 9}, - {74, 6}, - {92, 6}, - {64, 4}, - {209, 12}, - {157, 6}, - {111, 9}, - {70, 6}, - {129, 9}, - {76, 6}, - {94, 6}, - {65, 5}, - {193, 6}, - {82, 6}, - {100, 6}, - {67, 5}, - {118, 6}, - {73, 5}, - {91, 5}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {190, 9}, - {152, 7}, - {164, 7}, - {145, 3}, - {202, 9}, - {89, 9}, - {107, 9}, - {69, 7}, - {125, 9}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {113, 9}, - {71, 7}, - {131, 9}, - {77, 7}, - {95, 7}, - {7, 9}, - {194, 7}, - {83, 7}, - {101, 7}, - {11, 9}, - {119, 7}, - {19, 9}, - {35, 9}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {137, 9}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {103, 7}, - {13, 9}, - {121, 7}, - {21, 9}, - {37, 9}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {25, 9}, - {41, 9}, - {4, 7}, - {193, 6}, - {82, 6}, - {49, 9}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {205, 9}, - {156, 8}, - {168, 8}, - {146, 4}, - {180, 8}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {159, 8}, - {115, 9}, - {72, 8}, - {133, 9}, - {78, 8}, - {96, 8}, - {65, 5}, - {195, 8}, - {84, 8}, - {102, 8}, - {67, 5}, - {120, 8}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {174, 8}, - {148, 6}, - {139, 9}, - {80, 8}, - {98, 8}, - {66, 6}, - {198, 8}, - {86, 8}, - {104, 8}, - {14, 9}, - {122, 8}, - {22, 9}, - {38, 9}, - {3, 8}, - {209, 12}, - {157, 6}, - {110, 8}, - {70, 6}, - {128, 8}, - {26, 9}, - {42, 9}, - {5, 8}, - {193, 6}, - {82, 6}, - {50, 9}, - {9, 8}, - {118, 6}, - {17, 8}, - {33, 8}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {189, 8}, - {152, 7}, - {164, 7}, - {145, 3}, - {201, 8}, - {88, 8}, - {106, 8}, - {69, 7}, - {124, 8}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {112, 8}, - {71, 7}, - {130, 8}, - {28, 9}, - {44, 9}, - {6, 8}, - {194, 7}, - {83, 7}, - {52, 9}, - {10, 8}, - {119, 7}, - {18, 8}, - {34, 8}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {136, 8}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {56, 9}, - {12, 8}, - {121, 7}, - {20, 8}, - {36, 8}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {24, 8}, - {40, 8}, - {4, 7}, - {193, 6}, - {82, 6}, - {48, 8}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {209, 12}, - {209, 12}, - {209, 12}, - {146, 4}, - {209, 12}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {209, 12}, - {209, 12}, - {147, 5}, - {209, 12}, - {150, 5}, - {162, 5}, - {65, 5}, - {209, 12}, - {153, 5}, - {165, 5}, - {67, 5}, - {177, 5}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {176, 10}, - {148, 6}, - {188, 10}, - {151, 6}, - {163, 6}, - {66, 6}, - {200, 10}, - {154, 6}, - {166, 6}, - {68, 6}, - {178, 6}, - {74, 6}, - {92, 6}, - {64, 4}, - {209, 12}, - {157, 6}, - {169, 6}, - {70, 6}, - {181, 6}, - {76, 6}, - {94, 6}, - {65, 5}, - {193, 6}, - {82, 6}, - {100, 6}, - {67, 5}, - {118, 6}, - {73, 5}, - {91, 5}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {191, 10}, - {152, 7}, - {164, 7}, - {145, 3}, - {203, 10}, - {90, 10}, - {108, 10}, - {69, 7}, - {126, 10}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {114, 10}, - {71, 7}, - {132, 10}, - {77, 7}, - {95, 7}, - {65, 5}, - {194, 7}, - {83, 7}, - {101, 7}, - {67, 5}, - {119, 7}, - {73, 5}, - {91, 5}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {138, 10}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {103, 7}, - {68, 6}, - {121, 7}, - {74, 6}, - {92, 6}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {76, 6}, - {94, 6}, - {4, 7}, - {193, 6}, - {82, 6}, - {100, 6}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {206, 10}, - {156, 8}, - {168, 8}, - {146, 4}, - {180, 8}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {159, 8}, - {116, 10}, - {72, 8}, - {134, 10}, - {78, 8}, - {96, 8}, - {65, 5}, - {195, 8}, - {84, 8}, - {102, 8}, - {67, 5}, - {120, 8}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {174, 8}, - {148, 6}, - {140, 10}, - {80, 8}, - {98, 8}, - {66, 6}, - {198, 8}, - {86, 8}, - {63, 12}, - {15, 10}, - {122, 8}, - {23, 10}, - {39, 10}, - {3, 8}, - {209, 12}, - {157, 6}, - {110, 8}, - {70, 6}, - {128, 8}, - {27, 10}, - {43, 10}, - {5, 8}, - {193, 6}, - {82, 6}, - {51, 10}, - {9, 8}, - {118, 6}, - {17, 8}, - {33, 8}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {189, 8}, - {152, 7}, - {164, 7}, - {145, 3}, - {201, 8}, - {88, 8}, - {106, 8}, - {69, 7}, - {124, 8}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {112, 8}, - {71, 7}, - {130, 8}, - {29, 10}, - {45, 10}, - {6, 8}, - {194, 7}, - {83, 7}, - {53, 10}, - {10, 8}, - {119, 7}, - {18, 8}, - {34, 8}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {136, 8}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {57, 10}, - {12, 8}, - {121, 7}, - {20, 8}, - {36, 8}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {24, 8}, - {40, 8}, - {4, 7}, - {193, 6}, - {82, 6}, - {48, 8}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {209, 12}, - {209, 12}, - {209, 12}, - {146, 4}, - {209, 12}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {160, 9}, - {172, 9}, - {147, 5}, - {184, 9}, - {150, 5}, - {162, 5}, - {65, 5}, - {196, 9}, - {153, 5}, - {165, 5}, - {67, 5}, - {177, 5}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {175, 9}, - {148, 6}, - {142, 10}, - {81, 9}, - {99, 9}, - {66, 6}, - {199, 9}, - {87, 9}, - {105, 9}, - {68, 6}, - {123, 9}, - {74, 6}, - {92, 6}, - {64, 4}, - {209, 12}, - {157, 6}, - {111, 9}, - {70, 6}, - {129, 9}, - {76, 6}, - {94, 6}, - {65, 5}, - {193, 6}, - {82, 6}, - {100, 6}, - {67, 5}, - {118, 6}, - {73, 5}, - {91, 5}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {190, 9}, - {152, 7}, - {164, 7}, - {145, 3}, - {202, 9}, - {89, 9}, - {107, 9}, - {69, 7}, - {125, 9}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {113, 9}, - {71, 7}, - {131, 9}, - {30, 10}, - {46, 10}, - {7, 9}, - {194, 7}, - {83, 7}, - {54, 10}, - {11, 9}, - {119, 7}, - {19, 9}, - {35, 9}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {137, 9}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {58, 10}, - {13, 9}, - {121, 7}, - {21, 9}, - {37, 9}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {25, 9}, - {41, 9}, - {4, 7}, - {193, 6}, - {82, 6}, - {49, 9}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {205, 9}, - {156, 8}, - {168, 8}, - {146, 4}, - {180, 8}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {159, 8}, - {115, 9}, - {72, 8}, - {133, 9}, - {78, 8}, - {96, 8}, - {65, 5}, - {195, 8}, - {84, 8}, - {102, 8}, - {67, 5}, - {120, 8}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {174, 8}, - {148, 6}, - {139, 9}, - {80, 8}, - {98, 8}, - {66, 6}, - {198, 8}, - {86, 8}, - {60, 10}, - {14, 9}, - {122, 8}, - {22, 9}, - {38, 9}, - {3, 8}, - {209, 12}, - {157, 6}, - {110, 8}, - {70, 6}, - {128, 8}, - {26, 9}, - {42, 9}, - {5, 8}, - {193, 6}, - {82, 6}, - {50, 9}, - {9, 8}, - {118, 6}, - {17, 8}, - {33, 8}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {189, 8}, - {152, 7}, - {164, 7}, - {145, 3}, - {201, 8}, - {88, 8}, - {106, 8}, - {69, 7}, - {124, 8}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {112, 8}, - {71, 7}, - {130, 8}, - {28, 9}, - {44, 9}, - {6, 8}, - {194, 7}, - {83, 7}, - {52, 9}, - {10, 8}, - {119, 7}, - {18, 8}, - {34, 8}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {136, 8}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {56, 9}, - {12, 8}, - {121, 7}, - {20, 8}, - {36, 8}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {24, 8}, - {40, 8}, - {4, 7}, - {193, 6}, - {82, 6}, - {48, 8}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {209, 12}, - {209, 12}, - {209, 12}, - {146, 4}, - {209, 12}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {209, 12}, - {209, 12}, - {147, 5}, - {209, 12}, - {150, 5}, - {162, 5}, - {65, 5}, - {209, 12}, - {153, 5}, - {165, 5}, - {67, 5}, - {177, 5}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {209, 12}, - {148, 6}, - {209, 12}, - {151, 6}, - {163, 6}, - {66, 6}, - {209, 12}, - {154, 6}, - {166, 6}, - {68, 6}, - {178, 6}, - {74, 6}, - {92, 6}, - {64, 4}, - {209, 12}, - {157, 6}, - {169, 6}, - {70, 6}, - {181, 6}, - {76, 6}, - {94, 6}, - {65, 5}, - {193, 6}, - {82, 6}, - {100, 6}, - {67, 5}, - {118, 6}, - {73, 5}, - {91, 5}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {192, 11}, - {152, 7}, - {164, 7}, - {145, 3}, - {204, 11}, - {155, 7}, - {167, 7}, - {69, 7}, - {179, 7}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {170, 7}, - {71, 7}, - {182, 7}, - {77, 7}, - {95, 7}, - {65, 5}, - {194, 7}, - {83, 7}, - {101, 7}, - {67, 5}, - {119, 7}, - {73, 5}, - {91, 5}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {185, 7}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {103, 7}, - {68, 6}, - {121, 7}, - {74, 6}, - {92, 6}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {76, 6}, - {94, 6}, - {4, 7}, - {193, 6}, - {82, 6}, - {100, 6}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {207, 11}, - {156, 8}, - {168, 8}, - {146, 4}, - {180, 8}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {159, 8}, - {117, 11}, - {72, 8}, - {135, 11}, - {78, 8}, - {96, 8}, - {65, 5}, - {195, 8}, - {84, 8}, - {102, 8}, - {67, 5}, - {120, 8}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {174, 8}, - {148, 6}, - {141, 11}, - {80, 8}, - {98, 8}, - {66, 6}, - {198, 8}, - {86, 8}, - {104, 8}, - {68, 6}, - {122, 8}, - {74, 6}, - {92, 6}, - {3, 8}, - {209, 12}, - {157, 6}, - {110, 8}, - {70, 6}, - {128, 8}, - {76, 6}, - {94, 6}, - {5, 8}, - {193, 6}, - {82, 6}, - {100, 6}, - {9, 8}, - {118, 6}, - {17, 8}, - {33, 8}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {189, 8}, - {152, 7}, - {164, 7}, - {145, 3}, - {201, 8}, - {88, 8}, - {106, 8}, - {69, 7}, - {124, 8}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {112, 8}, - {71, 7}, - {130, 8}, - {77, 7}, - {95, 7}, - {6, 8}, - {194, 7}, - {83, 7}, - {101, 7}, - {10, 8}, - {119, 7}, - {18, 8}, - {34, 8}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {136, 8}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {103, 7}, - {12, 8}, - {121, 7}, - {20, 8}, - {36, 8}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {24, 8}, - {40, 8}, - {4, 7}, - {193, 6}, - {82, 6}, - {48, 8}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {209, 12}, - {209, 12}, - {209, 12}, - {146, 4}, - {209, 12}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {160, 9}, - {172, 9}, - {147, 5}, - {184, 9}, - {150, 5}, - {162, 5}, - {65, 5}, - {196, 9}, - {153, 5}, - {165, 5}, - {67, 5}, - {177, 5}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {175, 9}, - {148, 6}, - {143, 11}, - {81, 9}, - {99, 9}, - {66, 6}, - {199, 9}, - {87, 9}, - {105, 9}, - {68, 6}, - {123, 9}, - {74, 6}, - {92, 6}, - {64, 4}, - {209, 12}, - {157, 6}, - {111, 9}, - {70, 6}, - {129, 9}, - {76, 6}, - {94, 6}, - {65, 5}, - {193, 6}, - {82, 6}, - {100, 6}, - {67, 5}, - {118, 6}, - {73, 5}, - {91, 5}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {190, 9}, - {152, 7}, - {164, 7}, - {145, 3}, - {202, 9}, - {89, 9}, - {107, 9}, - {69, 7}, - {125, 9}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {113, 9}, - {71, 7}, - {131, 9}, - {31, 11}, - {47, 11}, - {7, 9}, - {194, 7}, - {83, 7}, - {55, 11}, - {11, 9}, - {119, 7}, - {19, 9}, - {35, 9}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {137, 9}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {59, 11}, - {13, 9}, - {121, 7}, - {21, 9}, - {37, 9}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {25, 9}, - {41, 9}, - {4, 7}, - {193, 6}, - {82, 6}, - {49, 9}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {205, 9}, - {156, 8}, - {168, 8}, - {146, 4}, - {180, 8}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {159, 8}, - {115, 9}, - {72, 8}, - {133, 9}, - {78, 8}, - {96, 8}, - {65, 5}, - {195, 8}, - {84, 8}, - {102, 8}, - {67, 5}, - {120, 8}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {174, 8}, - {148, 6}, - {139, 9}, - {80, 8}, - {98, 8}, - {66, 6}, - {198, 8}, - {86, 8}, - {61, 11}, - {14, 9}, - {122, 8}, - {22, 9}, - {38, 9}, - {3, 8}, - {209, 12}, - {157, 6}, - {110, 8}, - {70, 6}, - {128, 8}, - {26, 9}, - {42, 9}, - {5, 8}, - {193, 6}, - {82, 6}, - {50, 9}, - {9, 8}, - {118, 6}, - {17, 8}, - {33, 8}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {189, 8}, - {152, 7}, - {164, 7}, - {145, 3}, - {201, 8}, - {88, 8}, - {106, 8}, - {69, 7}, - {124, 8}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {112, 8}, - {71, 7}, - {130, 8}, - {28, 9}, - {44, 9}, - {6, 8}, - {194, 7}, - {83, 7}, - {52, 9}, - {10, 8}, - {119, 7}, - {18, 8}, - {34, 8}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {136, 8}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {56, 9}, - {12, 8}, - {121, 7}, - {20, 8}, - {36, 8}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {24, 8}, - {40, 8}, - {4, 7}, - {193, 6}, - {82, 6}, - {48, 8}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {209, 12}, - {209, 12}, - {209, 12}, - {146, 4}, - {209, 12}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {209, 12}, - {209, 12}, - {147, 5}, - {209, 12}, - {150, 5}, - {162, 5}, - {65, 5}, - {209, 12}, - {153, 5}, - {165, 5}, - {67, 5}, - {177, 5}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {176, 10}, - {148, 6}, - {188, 10}, - {151, 6}, - {163, 6}, - {66, 6}, - {200, 10}, - {154, 6}, - {166, 6}, - {68, 6}, - {178, 6}, - {74, 6}, - {92, 6}, - {64, 4}, - {209, 12}, - {157, 6}, - {169, 6}, - {70, 6}, - {181, 6}, - {76, 6}, - {94, 6}, - {65, 5}, - {193, 6}, - {82, 6}, - {100, 6}, - {67, 5}, - {118, 6}, - {73, 5}, - {91, 5}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {191, 10}, - {152, 7}, - {164, 7}, - {145, 3}, - {203, 10}, - {90, 10}, - {108, 10}, - {69, 7}, - {126, 10}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {114, 10}, - {71, 7}, - {132, 10}, - {77, 7}, - {95, 7}, - {65, 5}, - {194, 7}, - {83, 7}, - {101, 7}, - {67, 5}, - {119, 7}, - {73, 5}, - {91, 5}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {138, 10}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {103, 7}, - {68, 6}, - {121, 7}, - {74, 6}, - {92, 6}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {76, 6}, - {94, 6}, - {4, 7}, - {193, 6}, - {82, 6}, - {100, 6}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {206, 10}, - {156, 8}, - {168, 8}, - {146, 4}, - {180, 8}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {159, 8}, - {116, 10}, - {72, 8}, - {134, 10}, - {78, 8}, - {96, 8}, - {65, 5}, - {195, 8}, - {84, 8}, - {102, 8}, - {67, 5}, - {120, 8}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {174, 8}, - {148, 6}, - {140, 10}, - {80, 8}, - {98, 8}, - {66, 6}, - {198, 8}, - {86, 8}, - {62, 11}, - {15, 10}, - {122, 8}, - {23, 10}, - {39, 10}, - {3, 8}, - {209, 12}, - {157, 6}, - {110, 8}, - {70, 6}, - {128, 8}, - {27, 10}, - {43, 10}, - {5, 8}, - {193, 6}, - {82, 6}, - {51, 10}, - {9, 8}, - {118, 6}, - {17, 8}, - {33, 8}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {189, 8}, - {152, 7}, - {164, 7}, - {145, 3}, - {201, 8}, - {88, 8}, - {106, 8}, - {69, 7}, - {124, 8}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {112, 8}, - {71, 7}, - {130, 8}, - {29, 10}, - {45, 10}, - {6, 8}, - {194, 7}, - {83, 7}, - {53, 10}, - {10, 8}, - {119, 7}, - {18, 8}, - {34, 8}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {136, 8}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {57, 10}, - {12, 8}, - {121, 7}, - {20, 8}, - {36, 8}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {24, 8}, - {40, 8}, - {4, 7}, - {193, 6}, - {82, 6}, - {48, 8}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {209, 12}, - {209, 12}, - {209, 12}, - {146, 4}, - {209, 12}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {160, 9}, - {172, 9}, - {147, 5}, - {184, 9}, - {150, 5}, - {162, 5}, - {65, 5}, - {196, 9}, - {153, 5}, - {165, 5}, - {67, 5}, - {177, 5}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {175, 9}, - {148, 6}, - {142, 10}, - {81, 9}, - {99, 9}, - {66, 6}, - {199, 9}, - {87, 9}, - {105, 9}, - {68, 6}, - {123, 9}, - {74, 6}, - {92, 6}, - {64, 4}, - {209, 12}, - {157, 6}, - {111, 9}, - {70, 6}, - {129, 9}, - {76, 6}, - {94, 6}, - {65, 5}, - {193, 6}, - {82, 6}, - {100, 6}, - {67, 5}, - {118, 6}, - {73, 5}, - {91, 5}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {190, 9}, - {152, 7}, - {164, 7}, - {145, 3}, - {202, 9}, - {89, 9}, - {107, 9}, - {69, 7}, - {125, 9}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {113, 9}, - {71, 7}, - {131, 9}, - {30, 10}, - {46, 10}, - {7, 9}, - {194, 7}, - {83, 7}, - {54, 10}, - {11, 9}, - {119, 7}, - {19, 9}, - {35, 9}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {137, 9}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {58, 10}, - {13, 9}, - {121, 7}, - {21, 9}, - {37, 9}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {25, 9}, - {41, 9}, - {4, 7}, - {193, 6}, - {82, 6}, - {49, 9}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {145, 3}, - {205, 9}, - {156, 8}, - {168, 8}, - {146, 4}, - {180, 8}, - {149, 4}, - {161, 4}, - {64, 4}, - {209, 12}, - {159, 8}, - {115, 9}, - {72, 8}, - {133, 9}, - {78, 8}, - {96, 8}, - {65, 5}, - {195, 8}, - {84, 8}, - {102, 8}, - {67, 5}, - {120, 8}, - {73, 5}, - {91, 5}, - {64, 4}, - {209, 12}, - {209, 12}, - {174, 8}, - {148, 6}, - {139, 9}, - {80, 8}, - {98, 8}, - {66, 6}, - {198, 8}, - {86, 8}, - {60, 10}, - {14, 9}, - {122, 8}, - {22, 9}, - {38, 9}, - {3, 8}, - {209, 12}, - {157, 6}, - {110, 8}, - {70, 6}, - {128, 8}, - {26, 9}, - {42, 9}, - {5, 8}, - {193, 6}, - {82, 6}, - {50, 9}, - {9, 8}, - {118, 6}, - {17, 8}, - {33, 8}, - {0, 6}, - {209, 12}, - {209, 12}, - {209, 12}, - {209, 12}, - {189, 8}, - {152, 7}, - {164, 7}, - {145, 3}, - {201, 8}, - {88, 8}, - {106, 8}, - {69, 7}, - {124, 8}, - {75, 7}, - {93, 7}, - {64, 4}, - {209, 12}, - {158, 7}, - {112, 8}, - {71, 7}, - {130, 8}, - {28, 9}, - {44, 9}, - {6, 8}, - {194, 7}, - {83, 7}, - {52, 9}, - {10, 8}, - {119, 7}, - {18, 8}, - {34, 8}, - {1, 7}, - {209, 12}, - {209, 12}, - {173, 7}, - {148, 6}, - {136, 8}, - {79, 7}, - {97, 7}, - {66, 6}, - {197, 7}, - {85, 7}, - {56, 9}, - {12, 8}, - {121, 7}, - {20, 8}, - {36, 8}, - {2, 7}, - {209, 12}, - {157, 6}, - {109, 7}, - {70, 6}, - {127, 7}, - {24, 8}, - {40, 8}, - {4, 7}, - {193, 6}, - {82, 6}, - {48, 8}, - {8, 7}, - {118, 6}, - {16, 7}, - {32, 7}, - {0, 6}}; -} // utf8_to_utf16 namespace -} // tables namespace +const uint8_t utf8bigindex[4096][2] = { + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {145, 3}, {209, 12}, {209, 12}, {209, 12}, {146, 4}, {209, 12}, {149, 4}, + {161, 4}, {64, 4}, {209, 12}, {209, 12}, {209, 12}, {147, 5}, {209, 12}, + {150, 5}, {162, 5}, {65, 5}, {209, 12}, {153, 5}, {165, 5}, {67, 5}, + {177, 5}, {73, 5}, {91, 5}, {64, 4}, {209, 12}, {209, 12}, {209, 12}, + {148, 6}, {209, 12}, {151, 6}, {163, 6}, {66, 6}, {209, 12}, {154, 6}, + {166, 6}, {68, 6}, {178, 6}, {74, 6}, {92, 6}, {64, 4}, {209, 12}, + {157, 6}, {169, 6}, {70, 6}, {181, 6}, {76, 6}, {94, 6}, {65, 5}, + {193, 6}, {82, 6}, {100, 6}, {67, 5}, {118, 6}, {73, 5}, {91, 5}, + {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {152, 7}, + {164, 7}, {145, 3}, {209, 12}, {155, 7}, {167, 7}, {69, 7}, {179, 7}, + {75, 7}, {93, 7}, {64, 4}, {209, 12}, {158, 7}, {170, 7}, {71, 7}, + {182, 7}, {77, 7}, {95, 7}, {65, 5}, {194, 7}, {83, 7}, {101, 7}, + {67, 5}, {119, 7}, {73, 5}, {91, 5}, {1, 7}, {209, 12}, {209, 12}, + {173, 7}, {148, 6}, {185, 7}, {79, 7}, {97, 7}, {66, 6}, {197, 7}, + {85, 7}, {103, 7}, {68, 6}, {121, 7}, {74, 6}, {92, 6}, {2, 7}, + {209, 12}, {157, 6}, {109, 7}, {70, 6}, {127, 7}, {76, 6}, {94, 6}, + {4, 7}, {193, 6}, {82, 6}, {100, 6}, {8, 7}, {118, 6}, {16, 7}, + {32, 7}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {145, 3}, {209, 12}, {156, 8}, {168, 8}, {146, 4}, + {180, 8}, {149, 4}, {161, 4}, {64, 4}, {209, 12}, {159, 8}, {171, 8}, + {72, 8}, {183, 8}, {78, 8}, {96, 8}, {65, 5}, {195, 8}, {84, 8}, + {102, 8}, {67, 5}, {120, 8}, {73, 5}, {91, 5}, {64, 4}, {209, 12}, + {209, 12}, {174, 8}, {148, 6}, {186, 8}, {80, 8}, {98, 8}, {66, 6}, + {198, 8}, {86, 8}, {104, 8}, {68, 6}, {122, 8}, {74, 6}, {92, 6}, + {3, 8}, {209, 12}, {157, 6}, {110, 8}, {70, 6}, {128, 8}, {76, 6}, + {94, 6}, {5, 8}, {193, 6}, {82, 6}, {100, 6}, {9, 8}, {118, 6}, + {17, 8}, {33, 8}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {189, 8}, {152, 7}, {164, 7}, {145, 3}, {201, 8}, {88, 8}, {106, 8}, + {69, 7}, {124, 8}, {75, 7}, {93, 7}, {64, 4}, {209, 12}, {158, 7}, + {112, 8}, {71, 7}, {130, 8}, {77, 7}, {95, 7}, {6, 8}, {194, 7}, + {83, 7}, {101, 7}, {10, 8}, {119, 7}, {18, 8}, {34, 8}, {1, 7}, + {209, 12}, {209, 12}, {173, 7}, {148, 6}, {136, 8}, {79, 7}, {97, 7}, + {66, 6}, {197, 7}, {85, 7}, {103, 7}, {12, 8}, {121, 7}, {20, 8}, + {36, 8}, {2, 7}, {209, 12}, {157, 6}, {109, 7}, {70, 6}, {127, 7}, + {24, 8}, {40, 8}, {4, 7}, {193, 6}, {82, 6}, {48, 8}, {8, 7}, + {118, 6}, {16, 7}, {32, 7}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {145, 3}, {209, 12}, {209, 12}, + {209, 12}, {146, 4}, {209, 12}, {149, 4}, {161, 4}, {64, 4}, {209, 12}, + {160, 9}, {172, 9}, {147, 5}, {184, 9}, {150, 5}, {162, 5}, {65, 5}, + {196, 9}, {153, 5}, {165, 5}, {67, 5}, {177, 5}, {73, 5}, {91, 5}, + {64, 4}, {209, 12}, {209, 12}, {175, 9}, {148, 6}, {187, 9}, {81, 9}, + {99, 9}, {66, 6}, {199, 9}, {87, 9}, {105, 9}, {68, 6}, {123, 9}, + {74, 6}, {92, 6}, {64, 4}, {209, 12}, {157, 6}, {111, 9}, {70, 6}, + {129, 9}, {76, 6}, {94, 6}, {65, 5}, {193, 6}, {82, 6}, {100, 6}, + {67, 5}, {118, 6}, {73, 5}, {91, 5}, {0, 6}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {190, 9}, {152, 7}, {164, 7}, {145, 3}, {202, 9}, + {89, 9}, {107, 9}, {69, 7}, {125, 9}, {75, 7}, {93, 7}, {64, 4}, + {209, 12}, {158, 7}, {113, 9}, {71, 7}, {131, 9}, {77, 7}, {95, 7}, + {7, 9}, {194, 7}, {83, 7}, {101, 7}, {11, 9}, {119, 7}, {19, 9}, + {35, 9}, {1, 7}, {209, 12}, {209, 12}, {173, 7}, {148, 6}, {137, 9}, + {79, 7}, {97, 7}, {66, 6}, {197, 7}, {85, 7}, {103, 7}, {13, 9}, + {121, 7}, {21, 9}, {37, 9}, {2, 7}, {209, 12}, {157, 6}, {109, 7}, + {70, 6}, {127, 7}, {25, 9}, {41, 9}, {4, 7}, {193, 6}, {82, 6}, + {49, 9}, {8, 7}, {118, 6}, {16, 7}, {32, 7}, {0, 6}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {145, 3}, + {205, 9}, {156, 8}, {168, 8}, {146, 4}, {180, 8}, {149, 4}, {161, 4}, + {64, 4}, {209, 12}, {159, 8}, {115, 9}, {72, 8}, {133, 9}, {78, 8}, + {96, 8}, {65, 5}, {195, 8}, {84, 8}, {102, 8}, {67, 5}, {120, 8}, + {73, 5}, {91, 5}, {64, 4}, {209, 12}, {209, 12}, {174, 8}, {148, 6}, + {139, 9}, {80, 8}, {98, 8}, {66, 6}, {198, 8}, {86, 8}, {104, 8}, + {14, 9}, {122, 8}, {22, 9}, {38, 9}, {3, 8}, {209, 12}, {157, 6}, + {110, 8}, {70, 6}, {128, 8}, {26, 9}, {42, 9}, {5, 8}, {193, 6}, + {82, 6}, {50, 9}, {9, 8}, {118, 6}, {17, 8}, {33, 8}, {0, 6}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {189, 8}, {152, 7}, {164, 7}, + {145, 3}, {201, 8}, {88, 8}, {106, 8}, {69, 7}, {124, 8}, {75, 7}, + {93, 7}, {64, 4}, {209, 12}, {158, 7}, {112, 8}, {71, 7}, {130, 8}, + {28, 9}, {44, 9}, {6, 8}, {194, 7}, {83, 7}, {52, 9}, {10, 8}, + {119, 7}, {18, 8}, {34, 8}, {1, 7}, {209, 12}, {209, 12}, {173, 7}, + {148, 6}, {136, 8}, {79, 7}, {97, 7}, {66, 6}, {197, 7}, {85, 7}, + {56, 9}, {12, 8}, {121, 7}, {20, 8}, {36, 8}, {2, 7}, {209, 12}, + {157, 6}, {109, 7}, {70, 6}, {127, 7}, {24, 8}, {40, 8}, {4, 7}, + {193, 6}, {82, 6}, {48, 8}, {8, 7}, {118, 6}, {16, 7}, {32, 7}, + {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {209, 12}, {145, 3}, {209, 12}, {209, 12}, {209, 12}, {146, 4}, {209, 12}, + {149, 4}, {161, 4}, {64, 4}, {209, 12}, {209, 12}, {209, 12}, {147, 5}, + {209, 12}, {150, 5}, {162, 5}, {65, 5}, {209, 12}, {153, 5}, {165, 5}, + {67, 5}, {177, 5}, {73, 5}, {91, 5}, {64, 4}, {209, 12}, {209, 12}, + {176, 10}, {148, 6}, {188, 10}, {151, 6}, {163, 6}, {66, 6}, {200, 10}, + {154, 6}, {166, 6}, {68, 6}, {178, 6}, {74, 6}, {92, 6}, {64, 4}, + {209, 12}, {157, 6}, {169, 6}, {70, 6}, {181, 6}, {76, 6}, {94, 6}, + {65, 5}, {193, 6}, {82, 6}, {100, 6}, {67, 5}, {118, 6}, {73, 5}, + {91, 5}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {191, 10}, + {152, 7}, {164, 7}, {145, 3}, {203, 10}, {90, 10}, {108, 10}, {69, 7}, + {126, 10}, {75, 7}, {93, 7}, {64, 4}, {209, 12}, {158, 7}, {114, 10}, + {71, 7}, {132, 10}, {77, 7}, {95, 7}, {65, 5}, {194, 7}, {83, 7}, + {101, 7}, {67, 5}, {119, 7}, {73, 5}, {91, 5}, {1, 7}, {209, 12}, + {209, 12}, {173, 7}, {148, 6}, {138, 10}, {79, 7}, {97, 7}, {66, 6}, + {197, 7}, {85, 7}, {103, 7}, {68, 6}, {121, 7}, {74, 6}, {92, 6}, + {2, 7}, {209, 12}, {157, 6}, {109, 7}, {70, 6}, {127, 7}, {76, 6}, + {94, 6}, {4, 7}, {193, 6}, {82, 6}, {100, 6}, {8, 7}, {118, 6}, + {16, 7}, {32, 7}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {145, 3}, {206, 10}, {156, 8}, {168, 8}, + {146, 4}, {180, 8}, {149, 4}, {161, 4}, {64, 4}, {209, 12}, {159, 8}, + {116, 10}, {72, 8}, {134, 10}, {78, 8}, {96, 8}, {65, 5}, {195, 8}, + {84, 8}, {102, 8}, {67, 5}, {120, 8}, {73, 5}, {91, 5}, {64, 4}, + {209, 12}, {209, 12}, {174, 8}, {148, 6}, {140, 10}, {80, 8}, {98, 8}, + {66, 6}, {198, 8}, {86, 8}, {104, 8}, {15, 10}, {122, 8}, {23, 10}, + {39, 10}, {3, 8}, {209, 12}, {157, 6}, {110, 8}, {70, 6}, {128, 8}, + {27, 10}, {43, 10}, {5, 8}, {193, 6}, {82, 6}, {51, 10}, {9, 8}, + {118, 6}, {17, 8}, {33, 8}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, + {209, 12}, {189, 8}, {152, 7}, {164, 7}, {145, 3}, {201, 8}, {88, 8}, + {106, 8}, {69, 7}, {124, 8}, {75, 7}, {93, 7}, {64, 4}, {209, 12}, + {158, 7}, {112, 8}, {71, 7}, {130, 8}, {29, 10}, {45, 10}, {6, 8}, + {194, 7}, {83, 7}, {53, 10}, {10, 8}, {119, 7}, {18, 8}, {34, 8}, + {1, 7}, {209, 12}, {209, 12}, {173, 7}, {148, 6}, {136, 8}, {79, 7}, + {97, 7}, {66, 6}, {197, 7}, {85, 7}, {57, 10}, {12, 8}, {121, 7}, + {20, 8}, {36, 8}, {2, 7}, {209, 12}, {157, 6}, {109, 7}, {70, 6}, + {127, 7}, {24, 8}, {40, 8}, {4, 7}, {193, 6}, {82, 6}, {48, 8}, + {8, 7}, {118, 6}, {16, 7}, {32, 7}, {0, 6}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {145, 3}, {209, 12}, + {209, 12}, {209, 12}, {146, 4}, {209, 12}, {149, 4}, {161, 4}, {64, 4}, + {209, 12}, {160, 9}, {172, 9}, {147, 5}, {184, 9}, {150, 5}, {162, 5}, + {65, 5}, {196, 9}, {153, 5}, {165, 5}, {67, 5}, {177, 5}, {73, 5}, + {91, 5}, {64, 4}, {209, 12}, {209, 12}, {175, 9}, {148, 6}, {142, 10}, + {81, 9}, {99, 9}, {66, 6}, {199, 9}, {87, 9}, {105, 9}, {68, 6}, + {123, 9}, {74, 6}, {92, 6}, {64, 4}, {209, 12}, {157, 6}, {111, 9}, + {70, 6}, {129, 9}, {76, 6}, {94, 6}, {65, 5}, {193, 6}, {82, 6}, + {100, 6}, {67, 5}, {118, 6}, {73, 5}, {91, 5}, {0, 6}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {190, 9}, {152, 7}, {164, 7}, {145, 3}, + {202, 9}, {89, 9}, {107, 9}, {69, 7}, {125, 9}, {75, 7}, {93, 7}, + {64, 4}, {209, 12}, {158, 7}, {113, 9}, {71, 7}, {131, 9}, {30, 10}, + {46, 10}, {7, 9}, {194, 7}, {83, 7}, {54, 10}, {11, 9}, {119, 7}, + {19, 9}, {35, 9}, {1, 7}, {209, 12}, {209, 12}, {173, 7}, {148, 6}, + {137, 9}, {79, 7}, {97, 7}, {66, 6}, {197, 7}, {85, 7}, {58, 10}, + {13, 9}, {121, 7}, {21, 9}, {37, 9}, {2, 7}, {209, 12}, {157, 6}, + {109, 7}, {70, 6}, {127, 7}, {25, 9}, {41, 9}, {4, 7}, {193, 6}, + {82, 6}, {49, 9}, {8, 7}, {118, 6}, {16, 7}, {32, 7}, {0, 6}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {145, 3}, {205, 9}, {156, 8}, {168, 8}, {146, 4}, {180, 8}, {149, 4}, + {161, 4}, {64, 4}, {209, 12}, {159, 8}, {115, 9}, {72, 8}, {133, 9}, + {78, 8}, {96, 8}, {65, 5}, {195, 8}, {84, 8}, {102, 8}, {67, 5}, + {120, 8}, {73, 5}, {91, 5}, {64, 4}, {209, 12}, {209, 12}, {174, 8}, + {148, 6}, {139, 9}, {80, 8}, {98, 8}, {66, 6}, {198, 8}, {86, 8}, + {60, 10}, {14, 9}, {122, 8}, {22, 9}, {38, 9}, {3, 8}, {209, 12}, + {157, 6}, {110, 8}, {70, 6}, {128, 8}, {26, 9}, {42, 9}, {5, 8}, + {193, 6}, {82, 6}, {50, 9}, {9, 8}, {118, 6}, {17, 8}, {33, 8}, + {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {189, 8}, {152, 7}, + {164, 7}, {145, 3}, {201, 8}, {88, 8}, {106, 8}, {69, 7}, {124, 8}, + {75, 7}, {93, 7}, {64, 4}, {209, 12}, {158, 7}, {112, 8}, {71, 7}, + {130, 8}, {28, 9}, {44, 9}, {6, 8}, {194, 7}, {83, 7}, {52, 9}, + {10, 8}, {119, 7}, {18, 8}, {34, 8}, {1, 7}, {209, 12}, {209, 12}, + {173, 7}, {148, 6}, {136, 8}, {79, 7}, {97, 7}, {66, 6}, {197, 7}, + {85, 7}, {56, 9}, {12, 8}, {121, 7}, {20, 8}, {36, 8}, {2, 7}, + {209, 12}, {157, 6}, {109, 7}, {70, 6}, {127, 7}, {24, 8}, {40, 8}, + {4, 7}, {193, 6}, {82, 6}, {48, 8}, {8, 7}, {118, 6}, {16, 7}, + {32, 7}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {145, 3}, {209, 12}, {209, 12}, {209, 12}, {146, 4}, + {209, 12}, {149, 4}, {161, 4}, {64, 4}, {209, 12}, {209, 12}, {209, 12}, + {147, 5}, {209, 12}, {150, 5}, {162, 5}, {65, 5}, {209, 12}, {153, 5}, + {165, 5}, {67, 5}, {177, 5}, {73, 5}, {91, 5}, {64, 4}, {209, 12}, + {209, 12}, {209, 12}, {148, 6}, {209, 12}, {151, 6}, {163, 6}, {66, 6}, + {209, 12}, {154, 6}, {166, 6}, {68, 6}, {178, 6}, {74, 6}, {92, 6}, + {64, 4}, {209, 12}, {157, 6}, {169, 6}, {70, 6}, {181, 6}, {76, 6}, + {94, 6}, {65, 5}, {193, 6}, {82, 6}, {100, 6}, {67, 5}, {118, 6}, + {73, 5}, {91, 5}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {192, 11}, {152, 7}, {164, 7}, {145, 3}, {204, 11}, {155, 7}, {167, 7}, + {69, 7}, {179, 7}, {75, 7}, {93, 7}, {64, 4}, {209, 12}, {158, 7}, + {170, 7}, {71, 7}, {182, 7}, {77, 7}, {95, 7}, {65, 5}, {194, 7}, + {83, 7}, {101, 7}, {67, 5}, {119, 7}, {73, 5}, {91, 5}, {1, 7}, + {209, 12}, {209, 12}, {173, 7}, {148, 6}, {185, 7}, {79, 7}, {97, 7}, + {66, 6}, {197, 7}, {85, 7}, {103, 7}, {68, 6}, {121, 7}, {74, 6}, + {92, 6}, {2, 7}, {209, 12}, {157, 6}, {109, 7}, {70, 6}, {127, 7}, + {76, 6}, {94, 6}, {4, 7}, {193, 6}, {82, 6}, {100, 6}, {8, 7}, + {118, 6}, {16, 7}, {32, 7}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {145, 3}, {207, 11}, {156, 8}, + {168, 8}, {146, 4}, {180, 8}, {149, 4}, {161, 4}, {64, 4}, {209, 12}, + {159, 8}, {117, 11}, {72, 8}, {135, 11}, {78, 8}, {96, 8}, {65, 5}, + {195, 8}, {84, 8}, {102, 8}, {67, 5}, {120, 8}, {73, 5}, {91, 5}, + {64, 4}, {209, 12}, {209, 12}, {174, 8}, {148, 6}, {141, 11}, {80, 8}, + {98, 8}, {66, 6}, {198, 8}, {86, 8}, {104, 8}, {68, 6}, {122, 8}, + {74, 6}, {92, 6}, {3, 8}, {209, 12}, {157, 6}, {110, 8}, {70, 6}, + {128, 8}, {76, 6}, {94, 6}, {5, 8}, {193, 6}, {82, 6}, {100, 6}, + {9, 8}, {118, 6}, {17, 8}, {33, 8}, {0, 6}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {189, 8}, {152, 7}, {164, 7}, {145, 3}, {201, 8}, + {88, 8}, {106, 8}, {69, 7}, {124, 8}, {75, 7}, {93, 7}, {64, 4}, + {209, 12}, {158, 7}, {112, 8}, {71, 7}, {130, 8}, {77, 7}, {95, 7}, + {6, 8}, {194, 7}, {83, 7}, {101, 7}, {10, 8}, {119, 7}, {18, 8}, + {34, 8}, {1, 7}, {209, 12}, {209, 12}, {173, 7}, {148, 6}, {136, 8}, + {79, 7}, {97, 7}, {66, 6}, {197, 7}, {85, 7}, {103, 7}, {12, 8}, + {121, 7}, {20, 8}, {36, 8}, {2, 7}, {209, 12}, {157, 6}, {109, 7}, + {70, 6}, {127, 7}, {24, 8}, {40, 8}, {4, 7}, {193, 6}, {82, 6}, + {48, 8}, {8, 7}, {118, 6}, {16, 7}, {32, 7}, {0, 6}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {145, 3}, + {209, 12}, {209, 12}, {209, 12}, {146, 4}, {209, 12}, {149, 4}, {161, 4}, + {64, 4}, {209, 12}, {160, 9}, {172, 9}, {147, 5}, {184, 9}, {150, 5}, + {162, 5}, {65, 5}, {196, 9}, {153, 5}, {165, 5}, {67, 5}, {177, 5}, + {73, 5}, {91, 5}, {64, 4}, {209, 12}, {209, 12}, {175, 9}, {148, 6}, + {143, 11}, {81, 9}, {99, 9}, {66, 6}, {199, 9}, {87, 9}, {105, 9}, + {68, 6}, {123, 9}, {74, 6}, {92, 6}, {64, 4}, {209, 12}, {157, 6}, + {111, 9}, {70, 6}, {129, 9}, {76, 6}, {94, 6}, {65, 5}, {193, 6}, + {82, 6}, {100, 6}, {67, 5}, {118, 6}, {73, 5}, {91, 5}, {0, 6}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {190, 9}, {152, 7}, {164, 7}, + {145, 3}, {202, 9}, {89, 9}, {107, 9}, {69, 7}, {125, 9}, {75, 7}, + {93, 7}, {64, 4}, {209, 12}, {158, 7}, {113, 9}, {71, 7}, {131, 9}, + {31, 11}, {47, 11}, {7, 9}, {194, 7}, {83, 7}, {55, 11}, {11, 9}, + {119, 7}, {19, 9}, {35, 9}, {1, 7}, {209, 12}, {209, 12}, {173, 7}, + {148, 6}, {137, 9}, {79, 7}, {97, 7}, {66, 6}, {197, 7}, {85, 7}, + {59, 11}, {13, 9}, {121, 7}, {21, 9}, {37, 9}, {2, 7}, {209, 12}, + {157, 6}, {109, 7}, {70, 6}, {127, 7}, {25, 9}, {41, 9}, {4, 7}, + {193, 6}, {82, 6}, {49, 9}, {8, 7}, {118, 6}, {16, 7}, {32, 7}, + {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {209, 12}, {145, 3}, {205, 9}, {156, 8}, {168, 8}, {146, 4}, {180, 8}, + {149, 4}, {161, 4}, {64, 4}, {209, 12}, {159, 8}, {115, 9}, {72, 8}, + {133, 9}, {78, 8}, {96, 8}, {65, 5}, {195, 8}, {84, 8}, {102, 8}, + {67, 5}, {120, 8}, {73, 5}, {91, 5}, {64, 4}, {209, 12}, {209, 12}, + {174, 8}, {148, 6}, {139, 9}, {80, 8}, {98, 8}, {66, 6}, {198, 8}, + {86, 8}, {61, 11}, {14, 9}, {122, 8}, {22, 9}, {38, 9}, {3, 8}, + {209, 12}, {157, 6}, {110, 8}, {70, 6}, {128, 8}, {26, 9}, {42, 9}, + {5, 8}, {193, 6}, {82, 6}, {50, 9}, {9, 8}, {118, 6}, {17, 8}, + {33, 8}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {189, 8}, + {152, 7}, {164, 7}, {145, 3}, {201, 8}, {88, 8}, {106, 8}, {69, 7}, + {124, 8}, {75, 7}, {93, 7}, {64, 4}, {209, 12}, {158, 7}, {112, 8}, + {71, 7}, {130, 8}, {28, 9}, {44, 9}, {6, 8}, {194, 7}, {83, 7}, + {52, 9}, {10, 8}, {119, 7}, {18, 8}, {34, 8}, {1, 7}, {209, 12}, + {209, 12}, {173, 7}, {148, 6}, {136, 8}, {79, 7}, {97, 7}, {66, 6}, + {197, 7}, {85, 7}, {56, 9}, {12, 8}, {121, 7}, {20, 8}, {36, 8}, + {2, 7}, {209, 12}, {157, 6}, {109, 7}, {70, 6}, {127, 7}, {24, 8}, + {40, 8}, {4, 7}, {193, 6}, {82, 6}, {48, 8}, {8, 7}, {118, 6}, + {16, 7}, {32, 7}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {145, 3}, {209, 12}, {209, 12}, {209, 12}, + {146, 4}, {209, 12}, {149, 4}, {161, 4}, {64, 4}, {209, 12}, {209, 12}, + {209, 12}, {147, 5}, {209, 12}, {150, 5}, {162, 5}, {65, 5}, {209, 12}, + {153, 5}, {165, 5}, {67, 5}, {177, 5}, {73, 5}, {91, 5}, {64, 4}, + {209, 12}, {209, 12}, {176, 10}, {148, 6}, {188, 10}, {151, 6}, {163, 6}, + {66, 6}, {200, 10}, {154, 6}, {166, 6}, {68, 6}, {178, 6}, {74, 6}, + {92, 6}, {64, 4}, {209, 12}, {157, 6}, {169, 6}, {70, 6}, {181, 6}, + {76, 6}, {94, 6}, {65, 5}, {193, 6}, {82, 6}, {100, 6}, {67, 5}, + {118, 6}, {73, 5}, {91, 5}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, + {209, 12}, {191, 10}, {152, 7}, {164, 7}, {145, 3}, {203, 10}, {90, 10}, + {108, 10}, {69, 7}, {126, 10}, {75, 7}, {93, 7}, {64, 4}, {209, 12}, + {158, 7}, {114, 10}, {71, 7}, {132, 10}, {77, 7}, {95, 7}, {65, 5}, + {194, 7}, {83, 7}, {101, 7}, {67, 5}, {119, 7}, {73, 5}, {91, 5}, + {1, 7}, {209, 12}, {209, 12}, {173, 7}, {148, 6}, {138, 10}, {79, 7}, + {97, 7}, {66, 6}, {197, 7}, {85, 7}, {103, 7}, {68, 6}, {121, 7}, + {74, 6}, {92, 6}, {2, 7}, {209, 12}, {157, 6}, {109, 7}, {70, 6}, + {127, 7}, {76, 6}, {94, 6}, {4, 7}, {193, 6}, {82, 6}, {100, 6}, + {8, 7}, {118, 6}, {16, 7}, {32, 7}, {0, 6}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {145, 3}, {206, 10}, + {156, 8}, {168, 8}, {146, 4}, {180, 8}, {149, 4}, {161, 4}, {64, 4}, + {209, 12}, {159, 8}, {116, 10}, {72, 8}, {134, 10}, {78, 8}, {96, 8}, + {65, 5}, {195, 8}, {84, 8}, {102, 8}, {67, 5}, {120, 8}, {73, 5}, + {91, 5}, {64, 4}, {209, 12}, {209, 12}, {174, 8}, {148, 6}, {140, 10}, + {80, 8}, {98, 8}, {66, 6}, {198, 8}, {86, 8}, {62, 11}, {15, 10}, + {122, 8}, {23, 10}, {39, 10}, {3, 8}, {209, 12}, {157, 6}, {110, 8}, + {70, 6}, {128, 8}, {27, 10}, {43, 10}, {5, 8}, {193, 6}, {82, 6}, + {51, 10}, {9, 8}, {118, 6}, {17, 8}, {33, 8}, {0, 6}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {189, 8}, {152, 7}, {164, 7}, {145, 3}, + {201, 8}, {88, 8}, {106, 8}, {69, 7}, {124, 8}, {75, 7}, {93, 7}, + {64, 4}, {209, 12}, {158, 7}, {112, 8}, {71, 7}, {130, 8}, {29, 10}, + {45, 10}, {6, 8}, {194, 7}, {83, 7}, {53, 10}, {10, 8}, {119, 7}, + {18, 8}, {34, 8}, {1, 7}, {209, 12}, {209, 12}, {173, 7}, {148, 6}, + {136, 8}, {79, 7}, {97, 7}, {66, 6}, {197, 7}, {85, 7}, {57, 10}, + {12, 8}, {121, 7}, {20, 8}, {36, 8}, {2, 7}, {209, 12}, {157, 6}, + {109, 7}, {70, 6}, {127, 7}, {24, 8}, {40, 8}, {4, 7}, {193, 6}, + {82, 6}, {48, 8}, {8, 7}, {118, 6}, {16, 7}, {32, 7}, {0, 6}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {145, 3}, {209, 12}, {209, 12}, {209, 12}, {146, 4}, {209, 12}, {149, 4}, + {161, 4}, {64, 4}, {209, 12}, {160, 9}, {172, 9}, {147, 5}, {184, 9}, + {150, 5}, {162, 5}, {65, 5}, {196, 9}, {153, 5}, {165, 5}, {67, 5}, + {177, 5}, {73, 5}, {91, 5}, {64, 4}, {209, 12}, {209, 12}, {175, 9}, + {148, 6}, {142, 10}, {81, 9}, {99, 9}, {66, 6}, {199, 9}, {87, 9}, + {105, 9}, {68, 6}, {123, 9}, {74, 6}, {92, 6}, {64, 4}, {209, 12}, + {157, 6}, {111, 9}, {70, 6}, {129, 9}, {76, 6}, {94, 6}, {65, 5}, + {193, 6}, {82, 6}, {100, 6}, {67, 5}, {118, 6}, {73, 5}, {91, 5}, + {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {190, 9}, {152, 7}, + {164, 7}, {145, 3}, {202, 9}, {89, 9}, {107, 9}, {69, 7}, {125, 9}, + {75, 7}, {93, 7}, {64, 4}, {209, 12}, {158, 7}, {113, 9}, {71, 7}, + {131, 9}, {30, 10}, {46, 10}, {7, 9}, {194, 7}, {83, 7}, {54, 10}, + {11, 9}, {119, 7}, {19, 9}, {35, 9}, {1, 7}, {209, 12}, {209, 12}, + {173, 7}, {148, 6}, {137, 9}, {79, 7}, {97, 7}, {66, 6}, {197, 7}, + {85, 7}, {58, 10}, {13, 9}, {121, 7}, {21, 9}, {37, 9}, {2, 7}, + {209, 12}, {157, 6}, {109, 7}, {70, 6}, {127, 7}, {25, 9}, {41, 9}, + {4, 7}, {193, 6}, {82, 6}, {49, 9}, {8, 7}, {118, 6}, {16, 7}, + {32, 7}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {145, 3}, {205, 9}, {156, 8}, {168, 8}, {146, 4}, + {180, 8}, {149, 4}, {161, 4}, {64, 4}, {209, 12}, {159, 8}, {115, 9}, + {72, 8}, {133, 9}, {78, 8}, {96, 8}, {65, 5}, {195, 8}, {84, 8}, + {102, 8}, {67, 5}, {120, 8}, {73, 5}, {91, 5}, {64, 4}, {209, 12}, + {209, 12}, {174, 8}, {148, 6}, {139, 9}, {80, 8}, {98, 8}, {66, 6}, + {198, 8}, {86, 8}, {60, 10}, {14, 9}, {122, 8}, {22, 9}, {38, 9}, + {3, 8}, {209, 12}, {157, 6}, {110, 8}, {70, 6}, {128, 8}, {26, 9}, + {42, 9}, {5, 8}, {193, 6}, {82, 6}, {50, 9}, {9, 8}, {118, 6}, + {17, 8}, {33, 8}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {189, 8}, {152, 7}, {164, 7}, {145, 3}, {201, 8}, {88, 8}, {106, 8}, + {69, 7}, {124, 8}, {75, 7}, {93, 7}, {64, 4}, {209, 12}, {158, 7}, + {112, 8}, {71, 7}, {130, 8}, {28, 9}, {44, 9}, {6, 8}, {194, 7}, + {83, 7}, {52, 9}, {10, 8}, {119, 7}, {18, 8}, {34, 8}, {1, 7}, + {209, 12}, {209, 12}, {173, 7}, {148, 6}, {136, 8}, {79, 7}, {97, 7}, + {66, 6}, {197, 7}, {85, 7}, {56, 9}, {12, 8}, {121, 7}, {20, 8}, + {36, 8}, {2, 7}, {209, 12}, {157, 6}, {109, 7}, {70, 6}, {127, 7}, + {24, 8}, {40, 8}, {4, 7}, {193, 6}, {82, 6}, {48, 8}, {8, 7}, + {118, 6}, {16, 7}, {32, 7}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {145, 3}, {209, 12}, {209, 12}, + {209, 12}, {146, 4}, {209, 12}, {149, 4}, {161, 4}, {64, 4}, {209, 12}, + {209, 12}, {209, 12}, {147, 5}, {209, 12}, {150, 5}, {162, 5}, {65, 5}, + {209, 12}, {153, 5}, {165, 5}, {67, 5}, {177, 5}, {73, 5}, {91, 5}, + {64, 4}, {209, 12}, {209, 12}, {209, 12}, {148, 6}, {209, 12}, {151, 6}, + {163, 6}, {66, 6}, {209, 12}, {154, 6}, {166, 6}, {68, 6}, {178, 6}, + {74, 6}, {92, 6}, {64, 4}, {209, 12}, {157, 6}, {169, 6}, {70, 6}, + {181, 6}, {76, 6}, {94, 6}, {65, 5}, {193, 6}, {82, 6}, {100, 6}, + {67, 5}, {118, 6}, {73, 5}, {91, 5}, {0, 6}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {152, 7}, {164, 7}, {145, 3}, {209, 12}, + {155, 7}, {167, 7}, {69, 7}, {179, 7}, {75, 7}, {93, 7}, {64, 4}, + {209, 12}, {158, 7}, {170, 7}, {71, 7}, {182, 7}, {77, 7}, {95, 7}, + {65, 5}, {194, 7}, {83, 7}, {101, 7}, {67, 5}, {119, 7}, {73, 5}, + {91, 5}, {1, 7}, {209, 12}, {209, 12}, {173, 7}, {148, 6}, {185, 7}, + {79, 7}, {97, 7}, {66, 6}, {197, 7}, {85, 7}, {103, 7}, {68, 6}, + {121, 7}, {74, 6}, {92, 6}, {2, 7}, {209, 12}, {157, 6}, {109, 7}, + {70, 6}, {127, 7}, {76, 6}, {94, 6}, {4, 7}, {193, 6}, {82, 6}, + {100, 6}, {8, 7}, {118, 6}, {16, 7}, {32, 7}, {0, 6}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {145, 3}, + {208, 12}, {156, 8}, {168, 8}, {146, 4}, {180, 8}, {149, 4}, {161, 4}, + {64, 4}, {209, 12}, {159, 8}, {171, 8}, {72, 8}, {183, 8}, {78, 8}, + {96, 8}, {65, 5}, {195, 8}, {84, 8}, {102, 8}, {67, 5}, {120, 8}, + {73, 5}, {91, 5}, {64, 4}, {209, 12}, {209, 12}, {174, 8}, {148, 6}, + {186, 8}, {80, 8}, {98, 8}, {66, 6}, {198, 8}, {86, 8}, {104, 8}, + {68, 6}, {122, 8}, {74, 6}, {92, 6}, {3, 8}, {209, 12}, {157, 6}, + {110, 8}, {70, 6}, {128, 8}, {76, 6}, {94, 6}, {5, 8}, {193, 6}, + {82, 6}, {100, 6}, {9, 8}, {118, 6}, {17, 8}, {33, 8}, {0, 6}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {189, 8}, {152, 7}, {164, 7}, + {145, 3}, {201, 8}, {88, 8}, {106, 8}, {69, 7}, {124, 8}, {75, 7}, + {93, 7}, {64, 4}, {209, 12}, {158, 7}, {112, 8}, {71, 7}, {130, 8}, + {77, 7}, {95, 7}, {6, 8}, {194, 7}, {83, 7}, {101, 7}, {10, 8}, + {119, 7}, {18, 8}, {34, 8}, {1, 7}, {209, 12}, {209, 12}, {173, 7}, + {148, 6}, {136, 8}, {79, 7}, {97, 7}, {66, 6}, {197, 7}, {85, 7}, + {103, 7}, {12, 8}, {121, 7}, {20, 8}, {36, 8}, {2, 7}, {209, 12}, + {157, 6}, {109, 7}, {70, 6}, {127, 7}, {24, 8}, {40, 8}, {4, 7}, + {193, 6}, {82, 6}, {48, 8}, {8, 7}, {118, 6}, {16, 7}, {32, 7}, + {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {209, 12}, {145, 3}, {209, 12}, {209, 12}, {209, 12}, {146, 4}, {209, 12}, + {149, 4}, {161, 4}, {64, 4}, {209, 12}, {160, 9}, {172, 9}, {147, 5}, + {184, 9}, {150, 5}, {162, 5}, {65, 5}, {196, 9}, {153, 5}, {165, 5}, + {67, 5}, {177, 5}, {73, 5}, {91, 5}, {64, 4}, {209, 12}, {209, 12}, + {175, 9}, {148, 6}, {144, 12}, {81, 9}, {99, 9}, {66, 6}, {199, 9}, + {87, 9}, {105, 9}, {68, 6}, {123, 9}, {74, 6}, {92, 6}, {64, 4}, + {209, 12}, {157, 6}, {111, 9}, {70, 6}, {129, 9}, {76, 6}, {94, 6}, + {65, 5}, {193, 6}, {82, 6}, {100, 6}, {67, 5}, {118, 6}, {73, 5}, + {91, 5}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {190, 9}, + {152, 7}, {164, 7}, {145, 3}, {202, 9}, {89, 9}, {107, 9}, {69, 7}, + {125, 9}, {75, 7}, {93, 7}, {64, 4}, {209, 12}, {158, 7}, {113, 9}, + {71, 7}, {131, 9}, {77, 7}, {95, 7}, {7, 9}, {194, 7}, {83, 7}, + {101, 7}, {11, 9}, {119, 7}, {19, 9}, {35, 9}, {1, 7}, {209, 12}, + {209, 12}, {173, 7}, {148, 6}, {137, 9}, {79, 7}, {97, 7}, {66, 6}, + {197, 7}, {85, 7}, {103, 7}, {13, 9}, {121, 7}, {21, 9}, {37, 9}, + {2, 7}, {209, 12}, {157, 6}, {109, 7}, {70, 6}, {127, 7}, {25, 9}, + {41, 9}, {4, 7}, {193, 6}, {82, 6}, {49, 9}, {8, 7}, {118, 6}, + {16, 7}, {32, 7}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {145, 3}, {205, 9}, {156, 8}, {168, 8}, + {146, 4}, {180, 8}, {149, 4}, {161, 4}, {64, 4}, {209, 12}, {159, 8}, + {115, 9}, {72, 8}, {133, 9}, {78, 8}, {96, 8}, {65, 5}, {195, 8}, + {84, 8}, {102, 8}, {67, 5}, {120, 8}, {73, 5}, {91, 5}, {64, 4}, + {209, 12}, {209, 12}, {174, 8}, {148, 6}, {139, 9}, {80, 8}, {98, 8}, + {66, 6}, {198, 8}, {86, 8}, {104, 8}, {14, 9}, {122, 8}, {22, 9}, + {38, 9}, {3, 8}, {209, 12}, {157, 6}, {110, 8}, {70, 6}, {128, 8}, + {26, 9}, {42, 9}, {5, 8}, {193, 6}, {82, 6}, {50, 9}, {9, 8}, + {118, 6}, {17, 8}, {33, 8}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, + {209, 12}, {189, 8}, {152, 7}, {164, 7}, {145, 3}, {201, 8}, {88, 8}, + {106, 8}, {69, 7}, {124, 8}, {75, 7}, {93, 7}, {64, 4}, {209, 12}, + {158, 7}, {112, 8}, {71, 7}, {130, 8}, {28, 9}, {44, 9}, {6, 8}, + {194, 7}, {83, 7}, {52, 9}, {10, 8}, {119, 7}, {18, 8}, {34, 8}, + {1, 7}, {209, 12}, {209, 12}, {173, 7}, {148, 6}, {136, 8}, {79, 7}, + {97, 7}, {66, 6}, {197, 7}, {85, 7}, {56, 9}, {12, 8}, {121, 7}, + {20, 8}, {36, 8}, {2, 7}, {209, 12}, {157, 6}, {109, 7}, {70, 6}, + {127, 7}, {24, 8}, {40, 8}, {4, 7}, {193, 6}, {82, 6}, {48, 8}, + {8, 7}, {118, 6}, {16, 7}, {32, 7}, {0, 6}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {145, 3}, {209, 12}, + {209, 12}, {209, 12}, {146, 4}, {209, 12}, {149, 4}, {161, 4}, {64, 4}, + {209, 12}, {209, 12}, {209, 12}, {147, 5}, {209, 12}, {150, 5}, {162, 5}, + {65, 5}, {209, 12}, {153, 5}, {165, 5}, {67, 5}, {177, 5}, {73, 5}, + {91, 5}, {64, 4}, {209, 12}, {209, 12}, {176, 10}, {148, 6}, {188, 10}, + {151, 6}, {163, 6}, {66, 6}, {200, 10}, {154, 6}, {166, 6}, {68, 6}, + {178, 6}, {74, 6}, {92, 6}, {64, 4}, {209, 12}, {157, 6}, {169, 6}, + {70, 6}, {181, 6}, {76, 6}, {94, 6}, {65, 5}, {193, 6}, {82, 6}, + {100, 6}, {67, 5}, {118, 6}, {73, 5}, {91, 5}, {0, 6}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {191, 10}, {152, 7}, {164, 7}, {145, 3}, + {203, 10}, {90, 10}, {108, 10}, {69, 7}, {126, 10}, {75, 7}, {93, 7}, + {64, 4}, {209, 12}, {158, 7}, {114, 10}, {71, 7}, {132, 10}, {77, 7}, + {95, 7}, {65, 5}, {194, 7}, {83, 7}, {101, 7}, {67, 5}, {119, 7}, + {73, 5}, {91, 5}, {1, 7}, {209, 12}, {209, 12}, {173, 7}, {148, 6}, + {138, 10}, {79, 7}, {97, 7}, {66, 6}, {197, 7}, {85, 7}, {103, 7}, + {68, 6}, {121, 7}, {74, 6}, {92, 6}, {2, 7}, {209, 12}, {157, 6}, + {109, 7}, {70, 6}, {127, 7}, {76, 6}, {94, 6}, {4, 7}, {193, 6}, + {82, 6}, {100, 6}, {8, 7}, {118, 6}, {16, 7}, {32, 7}, {0, 6}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {145, 3}, {206, 10}, {156, 8}, {168, 8}, {146, 4}, {180, 8}, {149, 4}, + {161, 4}, {64, 4}, {209, 12}, {159, 8}, {116, 10}, {72, 8}, {134, 10}, + {78, 8}, {96, 8}, {65, 5}, {195, 8}, {84, 8}, {102, 8}, {67, 5}, + {120, 8}, {73, 5}, {91, 5}, {64, 4}, {209, 12}, {209, 12}, {174, 8}, + {148, 6}, {140, 10}, {80, 8}, {98, 8}, {66, 6}, {198, 8}, {86, 8}, + {63, 12}, {15, 10}, {122, 8}, {23, 10}, {39, 10}, {3, 8}, {209, 12}, + {157, 6}, {110, 8}, {70, 6}, {128, 8}, {27, 10}, {43, 10}, {5, 8}, + {193, 6}, {82, 6}, {51, 10}, {9, 8}, {118, 6}, {17, 8}, {33, 8}, + {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {189, 8}, {152, 7}, + {164, 7}, {145, 3}, {201, 8}, {88, 8}, {106, 8}, {69, 7}, {124, 8}, + {75, 7}, {93, 7}, {64, 4}, {209, 12}, {158, 7}, {112, 8}, {71, 7}, + {130, 8}, {29, 10}, {45, 10}, {6, 8}, {194, 7}, {83, 7}, {53, 10}, + {10, 8}, {119, 7}, {18, 8}, {34, 8}, {1, 7}, {209, 12}, {209, 12}, + {173, 7}, {148, 6}, {136, 8}, {79, 7}, {97, 7}, {66, 6}, {197, 7}, + {85, 7}, {57, 10}, {12, 8}, {121, 7}, {20, 8}, {36, 8}, {2, 7}, + {209, 12}, {157, 6}, {109, 7}, {70, 6}, {127, 7}, {24, 8}, {40, 8}, + {4, 7}, {193, 6}, {82, 6}, {48, 8}, {8, 7}, {118, 6}, {16, 7}, + {32, 7}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {145, 3}, {209, 12}, {209, 12}, {209, 12}, {146, 4}, + {209, 12}, {149, 4}, {161, 4}, {64, 4}, {209, 12}, {160, 9}, {172, 9}, + {147, 5}, {184, 9}, {150, 5}, {162, 5}, {65, 5}, {196, 9}, {153, 5}, + {165, 5}, {67, 5}, {177, 5}, {73, 5}, {91, 5}, {64, 4}, {209, 12}, + {209, 12}, {175, 9}, {148, 6}, {142, 10}, {81, 9}, {99, 9}, {66, 6}, + {199, 9}, {87, 9}, {105, 9}, {68, 6}, {123, 9}, {74, 6}, {92, 6}, + {64, 4}, {209, 12}, {157, 6}, {111, 9}, {70, 6}, {129, 9}, {76, 6}, + {94, 6}, {65, 5}, {193, 6}, {82, 6}, {100, 6}, {67, 5}, {118, 6}, + {73, 5}, {91, 5}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {190, 9}, {152, 7}, {164, 7}, {145, 3}, {202, 9}, {89, 9}, {107, 9}, + {69, 7}, {125, 9}, {75, 7}, {93, 7}, {64, 4}, {209, 12}, {158, 7}, + {113, 9}, {71, 7}, {131, 9}, {30, 10}, {46, 10}, {7, 9}, {194, 7}, + {83, 7}, {54, 10}, {11, 9}, {119, 7}, {19, 9}, {35, 9}, {1, 7}, + {209, 12}, {209, 12}, {173, 7}, {148, 6}, {137, 9}, {79, 7}, {97, 7}, + {66, 6}, {197, 7}, {85, 7}, {58, 10}, {13, 9}, {121, 7}, {21, 9}, + {37, 9}, {2, 7}, {209, 12}, {157, 6}, {109, 7}, {70, 6}, {127, 7}, + {25, 9}, {41, 9}, {4, 7}, {193, 6}, {82, 6}, {49, 9}, {8, 7}, + {118, 6}, {16, 7}, {32, 7}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {145, 3}, {205, 9}, {156, 8}, + {168, 8}, {146, 4}, {180, 8}, {149, 4}, {161, 4}, {64, 4}, {209, 12}, + {159, 8}, {115, 9}, {72, 8}, {133, 9}, {78, 8}, {96, 8}, {65, 5}, + {195, 8}, {84, 8}, {102, 8}, {67, 5}, {120, 8}, {73, 5}, {91, 5}, + {64, 4}, {209, 12}, {209, 12}, {174, 8}, {148, 6}, {139, 9}, {80, 8}, + {98, 8}, {66, 6}, {198, 8}, {86, 8}, {60, 10}, {14, 9}, {122, 8}, + {22, 9}, {38, 9}, {3, 8}, {209, 12}, {157, 6}, {110, 8}, {70, 6}, + {128, 8}, {26, 9}, {42, 9}, {5, 8}, {193, 6}, {82, 6}, {50, 9}, + {9, 8}, {118, 6}, {17, 8}, {33, 8}, {0, 6}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {189, 8}, {152, 7}, {164, 7}, {145, 3}, {201, 8}, + {88, 8}, {106, 8}, {69, 7}, {124, 8}, {75, 7}, {93, 7}, {64, 4}, + {209, 12}, {158, 7}, {112, 8}, {71, 7}, {130, 8}, {28, 9}, {44, 9}, + {6, 8}, {194, 7}, {83, 7}, {52, 9}, {10, 8}, {119, 7}, {18, 8}, + {34, 8}, {1, 7}, {209, 12}, {209, 12}, {173, 7}, {148, 6}, {136, 8}, + {79, 7}, {97, 7}, {66, 6}, {197, 7}, {85, 7}, {56, 9}, {12, 8}, + {121, 7}, {20, 8}, {36, 8}, {2, 7}, {209, 12}, {157, 6}, {109, 7}, + {70, 6}, {127, 7}, {24, 8}, {40, 8}, {4, 7}, {193, 6}, {82, 6}, + {48, 8}, {8, 7}, {118, 6}, {16, 7}, {32, 7}, {0, 6}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {145, 3}, + {209, 12}, {209, 12}, {209, 12}, {146, 4}, {209, 12}, {149, 4}, {161, 4}, + {64, 4}, {209, 12}, {209, 12}, {209, 12}, {147, 5}, {209, 12}, {150, 5}, + {162, 5}, {65, 5}, {209, 12}, {153, 5}, {165, 5}, {67, 5}, {177, 5}, + {73, 5}, {91, 5}, {64, 4}, {209, 12}, {209, 12}, {209, 12}, {148, 6}, + {209, 12}, {151, 6}, {163, 6}, {66, 6}, {209, 12}, {154, 6}, {166, 6}, + {68, 6}, {178, 6}, {74, 6}, {92, 6}, {64, 4}, {209, 12}, {157, 6}, + {169, 6}, {70, 6}, {181, 6}, {76, 6}, {94, 6}, {65, 5}, {193, 6}, + {82, 6}, {100, 6}, {67, 5}, {118, 6}, {73, 5}, {91, 5}, {0, 6}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {192, 11}, {152, 7}, {164, 7}, + {145, 3}, {204, 11}, {155, 7}, {167, 7}, {69, 7}, {179, 7}, {75, 7}, + {93, 7}, {64, 4}, {209, 12}, {158, 7}, {170, 7}, {71, 7}, {182, 7}, + {77, 7}, {95, 7}, {65, 5}, {194, 7}, {83, 7}, {101, 7}, {67, 5}, + {119, 7}, {73, 5}, {91, 5}, {1, 7}, {209, 12}, {209, 12}, {173, 7}, + {148, 6}, {185, 7}, {79, 7}, {97, 7}, {66, 6}, {197, 7}, {85, 7}, + {103, 7}, {68, 6}, {121, 7}, {74, 6}, {92, 6}, {2, 7}, {209, 12}, + {157, 6}, {109, 7}, {70, 6}, {127, 7}, {76, 6}, {94, 6}, {4, 7}, + {193, 6}, {82, 6}, {100, 6}, {8, 7}, {118, 6}, {16, 7}, {32, 7}, + {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {209, 12}, {145, 3}, {207, 11}, {156, 8}, {168, 8}, {146, 4}, {180, 8}, + {149, 4}, {161, 4}, {64, 4}, {209, 12}, {159, 8}, {117, 11}, {72, 8}, + {135, 11}, {78, 8}, {96, 8}, {65, 5}, {195, 8}, {84, 8}, {102, 8}, + {67, 5}, {120, 8}, {73, 5}, {91, 5}, {64, 4}, {209, 12}, {209, 12}, + {174, 8}, {148, 6}, {141, 11}, {80, 8}, {98, 8}, {66, 6}, {198, 8}, + {86, 8}, {104, 8}, {68, 6}, {122, 8}, {74, 6}, {92, 6}, {3, 8}, + {209, 12}, {157, 6}, {110, 8}, {70, 6}, {128, 8}, {76, 6}, {94, 6}, + {5, 8}, {193, 6}, {82, 6}, {100, 6}, {9, 8}, {118, 6}, {17, 8}, + {33, 8}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {189, 8}, + {152, 7}, {164, 7}, {145, 3}, {201, 8}, {88, 8}, {106, 8}, {69, 7}, + {124, 8}, {75, 7}, {93, 7}, {64, 4}, {209, 12}, {158, 7}, {112, 8}, + {71, 7}, {130, 8}, {77, 7}, {95, 7}, {6, 8}, {194, 7}, {83, 7}, + {101, 7}, {10, 8}, {119, 7}, {18, 8}, {34, 8}, {1, 7}, {209, 12}, + {209, 12}, {173, 7}, {148, 6}, {136, 8}, {79, 7}, {97, 7}, {66, 6}, + {197, 7}, {85, 7}, {103, 7}, {12, 8}, {121, 7}, {20, 8}, {36, 8}, + {2, 7}, {209, 12}, {157, 6}, {109, 7}, {70, 6}, {127, 7}, {24, 8}, + {40, 8}, {4, 7}, {193, 6}, {82, 6}, {48, 8}, {8, 7}, {118, 6}, + {16, 7}, {32, 7}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {145, 3}, {209, 12}, {209, 12}, {209, 12}, + {146, 4}, {209, 12}, {149, 4}, {161, 4}, {64, 4}, {209, 12}, {160, 9}, + {172, 9}, {147, 5}, {184, 9}, {150, 5}, {162, 5}, {65, 5}, {196, 9}, + {153, 5}, {165, 5}, {67, 5}, {177, 5}, {73, 5}, {91, 5}, {64, 4}, + {209, 12}, {209, 12}, {175, 9}, {148, 6}, {143, 11}, {81, 9}, {99, 9}, + {66, 6}, {199, 9}, {87, 9}, {105, 9}, {68, 6}, {123, 9}, {74, 6}, + {92, 6}, {64, 4}, {209, 12}, {157, 6}, {111, 9}, {70, 6}, {129, 9}, + {76, 6}, {94, 6}, {65, 5}, {193, 6}, {82, 6}, {100, 6}, {67, 5}, + {118, 6}, {73, 5}, {91, 5}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, + {209, 12}, {190, 9}, {152, 7}, {164, 7}, {145, 3}, {202, 9}, {89, 9}, + {107, 9}, {69, 7}, {125, 9}, {75, 7}, {93, 7}, {64, 4}, {209, 12}, + {158, 7}, {113, 9}, {71, 7}, {131, 9}, {31, 11}, {47, 11}, {7, 9}, + {194, 7}, {83, 7}, {55, 11}, {11, 9}, {119, 7}, {19, 9}, {35, 9}, + {1, 7}, {209, 12}, {209, 12}, {173, 7}, {148, 6}, {137, 9}, {79, 7}, + {97, 7}, {66, 6}, {197, 7}, {85, 7}, {59, 11}, {13, 9}, {121, 7}, + {21, 9}, {37, 9}, {2, 7}, {209, 12}, {157, 6}, {109, 7}, {70, 6}, + {127, 7}, {25, 9}, {41, 9}, {4, 7}, {193, 6}, {82, 6}, {49, 9}, + {8, 7}, {118, 6}, {16, 7}, {32, 7}, {0, 6}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {145, 3}, {205, 9}, + {156, 8}, {168, 8}, {146, 4}, {180, 8}, {149, 4}, {161, 4}, {64, 4}, + {209, 12}, {159, 8}, {115, 9}, {72, 8}, {133, 9}, {78, 8}, {96, 8}, + {65, 5}, {195, 8}, {84, 8}, {102, 8}, {67, 5}, {120, 8}, {73, 5}, + {91, 5}, {64, 4}, {209, 12}, {209, 12}, {174, 8}, {148, 6}, {139, 9}, + {80, 8}, {98, 8}, {66, 6}, {198, 8}, {86, 8}, {61, 11}, {14, 9}, + {122, 8}, {22, 9}, {38, 9}, {3, 8}, {209, 12}, {157, 6}, {110, 8}, + {70, 6}, {128, 8}, {26, 9}, {42, 9}, {5, 8}, {193, 6}, {82, 6}, + {50, 9}, {9, 8}, {118, 6}, {17, 8}, {33, 8}, {0, 6}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {189, 8}, {152, 7}, {164, 7}, {145, 3}, + {201, 8}, {88, 8}, {106, 8}, {69, 7}, {124, 8}, {75, 7}, {93, 7}, + {64, 4}, {209, 12}, {158, 7}, {112, 8}, {71, 7}, {130, 8}, {28, 9}, + {44, 9}, {6, 8}, {194, 7}, {83, 7}, {52, 9}, {10, 8}, {119, 7}, + {18, 8}, {34, 8}, {1, 7}, {209, 12}, {209, 12}, {173, 7}, {148, 6}, + {136, 8}, {79, 7}, {97, 7}, {66, 6}, {197, 7}, {85, 7}, {56, 9}, + {12, 8}, {121, 7}, {20, 8}, {36, 8}, {2, 7}, {209, 12}, {157, 6}, + {109, 7}, {70, 6}, {127, 7}, {24, 8}, {40, 8}, {4, 7}, {193, 6}, + {82, 6}, {48, 8}, {8, 7}, {118, 6}, {16, 7}, {32, 7}, {0, 6}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {145, 3}, {209, 12}, {209, 12}, {209, 12}, {146, 4}, {209, 12}, {149, 4}, + {161, 4}, {64, 4}, {209, 12}, {209, 12}, {209, 12}, {147, 5}, {209, 12}, + {150, 5}, {162, 5}, {65, 5}, {209, 12}, {153, 5}, {165, 5}, {67, 5}, + {177, 5}, {73, 5}, {91, 5}, {64, 4}, {209, 12}, {209, 12}, {176, 10}, + {148, 6}, {188, 10}, {151, 6}, {163, 6}, {66, 6}, {200, 10}, {154, 6}, + {166, 6}, {68, 6}, {178, 6}, {74, 6}, {92, 6}, {64, 4}, {209, 12}, + {157, 6}, {169, 6}, {70, 6}, {181, 6}, {76, 6}, {94, 6}, {65, 5}, + {193, 6}, {82, 6}, {100, 6}, {67, 5}, {118, 6}, {73, 5}, {91, 5}, + {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {191, 10}, {152, 7}, + {164, 7}, {145, 3}, {203, 10}, {90, 10}, {108, 10}, {69, 7}, {126, 10}, + {75, 7}, {93, 7}, {64, 4}, {209, 12}, {158, 7}, {114, 10}, {71, 7}, + {132, 10}, {77, 7}, {95, 7}, {65, 5}, {194, 7}, {83, 7}, {101, 7}, + {67, 5}, {119, 7}, {73, 5}, {91, 5}, {1, 7}, {209, 12}, {209, 12}, + {173, 7}, {148, 6}, {138, 10}, {79, 7}, {97, 7}, {66, 6}, {197, 7}, + {85, 7}, {103, 7}, {68, 6}, {121, 7}, {74, 6}, {92, 6}, {2, 7}, + {209, 12}, {157, 6}, {109, 7}, {70, 6}, {127, 7}, {76, 6}, {94, 6}, + {4, 7}, {193, 6}, {82, 6}, {100, 6}, {8, 7}, {118, 6}, {16, 7}, + {32, 7}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {145, 3}, {206, 10}, {156, 8}, {168, 8}, {146, 4}, + {180, 8}, {149, 4}, {161, 4}, {64, 4}, {209, 12}, {159, 8}, {116, 10}, + {72, 8}, {134, 10}, {78, 8}, {96, 8}, {65, 5}, {195, 8}, {84, 8}, + {102, 8}, {67, 5}, {120, 8}, {73, 5}, {91, 5}, {64, 4}, {209, 12}, + {209, 12}, {174, 8}, {148, 6}, {140, 10}, {80, 8}, {98, 8}, {66, 6}, + {198, 8}, {86, 8}, {62, 11}, {15, 10}, {122, 8}, {23, 10}, {39, 10}, + {3, 8}, {209, 12}, {157, 6}, {110, 8}, {70, 6}, {128, 8}, {27, 10}, + {43, 10}, {5, 8}, {193, 6}, {82, 6}, {51, 10}, {9, 8}, {118, 6}, + {17, 8}, {33, 8}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, + {189, 8}, {152, 7}, {164, 7}, {145, 3}, {201, 8}, {88, 8}, {106, 8}, + {69, 7}, {124, 8}, {75, 7}, {93, 7}, {64, 4}, {209, 12}, {158, 7}, + {112, 8}, {71, 7}, {130, 8}, {29, 10}, {45, 10}, {6, 8}, {194, 7}, + {83, 7}, {53, 10}, {10, 8}, {119, 7}, {18, 8}, {34, 8}, {1, 7}, + {209, 12}, {209, 12}, {173, 7}, {148, 6}, {136, 8}, {79, 7}, {97, 7}, + {66, 6}, {197, 7}, {85, 7}, {57, 10}, {12, 8}, {121, 7}, {20, 8}, + {36, 8}, {2, 7}, {209, 12}, {157, 6}, {109, 7}, {70, 6}, {127, 7}, + {24, 8}, {40, 8}, {4, 7}, {193, 6}, {82, 6}, {48, 8}, {8, 7}, + {118, 6}, {16, 7}, {32, 7}, {0, 6}, {209, 12}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {145, 3}, {209, 12}, {209, 12}, + {209, 12}, {146, 4}, {209, 12}, {149, 4}, {161, 4}, {64, 4}, {209, 12}, + {160, 9}, {172, 9}, {147, 5}, {184, 9}, {150, 5}, {162, 5}, {65, 5}, + {196, 9}, {153, 5}, {165, 5}, {67, 5}, {177, 5}, {73, 5}, {91, 5}, + {64, 4}, {209, 12}, {209, 12}, {175, 9}, {148, 6}, {142, 10}, {81, 9}, + {99, 9}, {66, 6}, {199, 9}, {87, 9}, {105, 9}, {68, 6}, {123, 9}, + {74, 6}, {92, 6}, {64, 4}, {209, 12}, {157, 6}, {111, 9}, {70, 6}, + {129, 9}, {76, 6}, {94, 6}, {65, 5}, {193, 6}, {82, 6}, {100, 6}, + {67, 5}, {118, 6}, {73, 5}, {91, 5}, {0, 6}, {209, 12}, {209, 12}, + {209, 12}, {209, 12}, {190, 9}, {152, 7}, {164, 7}, {145, 3}, {202, 9}, + {89, 9}, {107, 9}, {69, 7}, {125, 9}, {75, 7}, {93, 7}, {64, 4}, + {209, 12}, {158, 7}, {113, 9}, {71, 7}, {131, 9}, {30, 10}, {46, 10}, + {7, 9}, {194, 7}, {83, 7}, {54, 10}, {11, 9}, {119, 7}, {19, 9}, + {35, 9}, {1, 7}, {209, 12}, {209, 12}, {173, 7}, {148, 6}, {137, 9}, + {79, 7}, {97, 7}, {66, 6}, {197, 7}, {85, 7}, {58, 10}, {13, 9}, + {121, 7}, {21, 9}, {37, 9}, {2, 7}, {209, 12}, {157, 6}, {109, 7}, + {70, 6}, {127, 7}, {25, 9}, {41, 9}, {4, 7}, {193, 6}, {82, 6}, + {49, 9}, {8, 7}, {118, 6}, {16, 7}, {32, 7}, {0, 6}, {209, 12}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {209, 12}, {145, 3}, + {205, 9}, {156, 8}, {168, 8}, {146, 4}, {180, 8}, {149, 4}, {161, 4}, + {64, 4}, {209, 12}, {159, 8}, {115, 9}, {72, 8}, {133, 9}, {78, 8}, + {96, 8}, {65, 5}, {195, 8}, {84, 8}, {102, 8}, {67, 5}, {120, 8}, + {73, 5}, {91, 5}, {64, 4}, {209, 12}, {209, 12}, {174, 8}, {148, 6}, + {139, 9}, {80, 8}, {98, 8}, {66, 6}, {198, 8}, {86, 8}, {60, 10}, + {14, 9}, {122, 8}, {22, 9}, {38, 9}, {3, 8}, {209, 12}, {157, 6}, + {110, 8}, {70, 6}, {128, 8}, {26, 9}, {42, 9}, {5, 8}, {193, 6}, + {82, 6}, {50, 9}, {9, 8}, {118, 6}, {17, 8}, {33, 8}, {0, 6}, + {209, 12}, {209, 12}, {209, 12}, {209, 12}, {189, 8}, {152, 7}, {164, 7}, + {145, 3}, {201, 8}, {88, 8}, {106, 8}, {69, 7}, {124, 8}, {75, 7}, + {93, 7}, {64, 4}, {209, 12}, {158, 7}, {112, 8}, {71, 7}, {130, 8}, + {28, 9}, {44, 9}, {6, 8}, {194, 7}, {83, 7}, {52, 9}, {10, 8}, + {119, 7}, {18, 8}, {34, 8}, {1, 7}, {209, 12}, {209, 12}, {173, 7}, + {148, 6}, {136, 8}, {79, 7}, {97, 7}, {66, 6}, {197, 7}, {85, 7}, + {56, 9}, {12, 8}, {121, 7}, {20, 8}, {36, 8}, {2, 7}, {209, 12}, + {157, 6}, {109, 7}, {70, 6}, {127, 7}, {24, 8}, {40, 8}, {4, 7}, + {193, 6}, {82, 6}, {48, 8}, {8, 7}, {118, 6}, {16, 7}, {32, 7}, + {0, 6}}; +} // namespace utf8_to_utf16 +} // namespace tables } // unnamed namespace } // namespace simdutf @@ -11830,528 +10449,761 @@ namespace { namespace tables { namespace utf16_to_utf8 { - // 1 byte for length, 16 bytes for mask - const uint8_t pack_1_2_utf8_bytes[256][17] = { - {16,1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14}, - {15,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14,0x80}, - {15,1,0,3,2,5,4,7,6,8,11,10,13,12,15,14,0x80}, - {14,0,3,2,5,4,7,6,8,11,10,13,12,15,14,0x80,0x80}, - {15,1,0,2,5,4,7,6,9,8,11,10,13,12,15,14,0x80}, - {14,0,2,5,4,7,6,9,8,11,10,13,12,15,14,0x80,0x80}, - {14,1,0,2,5,4,7,6,8,11,10,13,12,15,14,0x80,0x80}, - {13,0,2,5,4,7,6,8,11,10,13,12,15,14,0x80,0x80,0x80}, - {15,1,0,3,2,5,4,7,6,9,8,10,13,12,15,14,0x80}, - {14,0,3,2,5,4,7,6,9,8,10,13,12,15,14,0x80,0x80}, - {14,1,0,3,2,5,4,7,6,8,10,13,12,15,14,0x80,0x80}, - {13,0,3,2,5,4,7,6,8,10,13,12,15,14,0x80,0x80,0x80}, - {14,1,0,2,5,4,7,6,9,8,10,13,12,15,14,0x80,0x80}, - {13,0,2,5,4,7,6,9,8,10,13,12,15,14,0x80,0x80,0x80}, - {13,1,0,2,5,4,7,6,8,10,13,12,15,14,0x80,0x80,0x80}, - {12,0,2,5,4,7,6,8,10,13,12,15,14,0x80,0x80,0x80,0x80}, - {15,1,0,3,2,4,7,6,9,8,11,10,13,12,15,14,0x80}, - {14,0,3,2,4,7,6,9,8,11,10,13,12,15,14,0x80,0x80}, - {14,1,0,3,2,4,7,6,8,11,10,13,12,15,14,0x80,0x80}, - {13,0,3,2,4,7,6,8,11,10,13,12,15,14,0x80,0x80,0x80}, - {14,1,0,2,4,7,6,9,8,11,10,13,12,15,14,0x80,0x80}, - {13,0,2,4,7,6,9,8,11,10,13,12,15,14,0x80,0x80,0x80}, - {13,1,0,2,4,7,6,8,11,10,13,12,15,14,0x80,0x80,0x80}, - {12,0,2,4,7,6,8,11,10,13,12,15,14,0x80,0x80,0x80,0x80}, - {14,1,0,3,2,4,7,6,9,8,10,13,12,15,14,0x80,0x80}, - {13,0,3,2,4,7,6,9,8,10,13,12,15,14,0x80,0x80,0x80}, - {13,1,0,3,2,4,7,6,8,10,13,12,15,14,0x80,0x80,0x80}, - {12,0,3,2,4,7,6,8,10,13,12,15,14,0x80,0x80,0x80,0x80}, - {13,1,0,2,4,7,6,9,8,10,13,12,15,14,0x80,0x80,0x80}, - {12,0,2,4,7,6,9,8,10,13,12,15,14,0x80,0x80,0x80,0x80}, - {12,1,0,2,4,7,6,8,10,13,12,15,14,0x80,0x80,0x80,0x80}, - {11,0,2,4,7,6,8,10,13,12,15,14,0x80,0x80,0x80,0x80,0x80}, - {15,1,0,3,2,5,4,7,6,9,8,11,10,12,15,14,0x80}, - {14,0,3,2,5,4,7,6,9,8,11,10,12,15,14,0x80,0x80}, - {14,1,0,3,2,5,4,7,6,8,11,10,12,15,14,0x80,0x80}, - {13,0,3,2,5,4,7,6,8,11,10,12,15,14,0x80,0x80,0x80}, - {14,1,0,2,5,4,7,6,9,8,11,10,12,15,14,0x80,0x80}, - {13,0,2,5,4,7,6,9,8,11,10,12,15,14,0x80,0x80,0x80}, - {13,1,0,2,5,4,7,6,8,11,10,12,15,14,0x80,0x80,0x80}, - {12,0,2,5,4,7,6,8,11,10,12,15,14,0x80,0x80,0x80,0x80}, - {14,1,0,3,2,5,4,7,6,9,8,10,12,15,14,0x80,0x80}, - {13,0,3,2,5,4,7,6,9,8,10,12,15,14,0x80,0x80,0x80}, - {13,1,0,3,2,5,4,7,6,8,10,12,15,14,0x80,0x80,0x80}, - {12,0,3,2,5,4,7,6,8,10,12,15,14,0x80,0x80,0x80,0x80}, - {13,1,0,2,5,4,7,6,9,8,10,12,15,14,0x80,0x80,0x80}, - {12,0,2,5,4,7,6,9,8,10,12,15,14,0x80,0x80,0x80,0x80}, - {12,1,0,2,5,4,7,6,8,10,12,15,14,0x80,0x80,0x80,0x80}, - {11,0,2,5,4,7,6,8,10,12,15,14,0x80,0x80,0x80,0x80,0x80}, - {14,1,0,3,2,4,7,6,9,8,11,10,12,15,14,0x80,0x80}, - {13,0,3,2,4,7,6,9,8,11,10,12,15,14,0x80,0x80,0x80}, - {13,1,0,3,2,4,7,6,8,11,10,12,15,14,0x80,0x80,0x80}, - {12,0,3,2,4,7,6,8,11,10,12,15,14,0x80,0x80,0x80,0x80}, - {13,1,0,2,4,7,6,9,8,11,10,12,15,14,0x80,0x80,0x80}, - {12,0,2,4,7,6,9,8,11,10,12,15,14,0x80,0x80,0x80,0x80}, - {12,1,0,2,4,7,6,8,11,10,12,15,14,0x80,0x80,0x80,0x80}, - {11,0,2,4,7,6,8,11,10,12,15,14,0x80,0x80,0x80,0x80,0x80}, - {13,1,0,3,2,4,7,6,9,8,10,12,15,14,0x80,0x80,0x80}, - {12,0,3,2,4,7,6,9,8,10,12,15,14,0x80,0x80,0x80,0x80}, - {12,1,0,3,2,4,7,6,8,10,12,15,14,0x80,0x80,0x80,0x80}, - {11,0,3,2,4,7,6,8,10,12,15,14,0x80,0x80,0x80,0x80,0x80}, - {12,1,0,2,4,7,6,9,8,10,12,15,14,0x80,0x80,0x80,0x80}, - {11,0,2,4,7,6,9,8,10,12,15,14,0x80,0x80,0x80,0x80,0x80}, - {11,1,0,2,4,7,6,8,10,12,15,14,0x80,0x80,0x80,0x80,0x80}, - {10,0,2,4,7,6,8,10,12,15,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {15,1,0,3,2,5,4,6,9,8,11,10,13,12,15,14,0x80}, - {14,0,3,2,5,4,6,9,8,11,10,13,12,15,14,0x80,0x80}, - {14,1,0,3,2,5,4,6,8,11,10,13,12,15,14,0x80,0x80}, - {13,0,3,2,5,4,6,8,11,10,13,12,15,14,0x80,0x80,0x80}, - {14,1,0,2,5,4,6,9,8,11,10,13,12,15,14,0x80,0x80}, - {13,0,2,5,4,6,9,8,11,10,13,12,15,14,0x80,0x80,0x80}, - {13,1,0,2,5,4,6,8,11,10,13,12,15,14,0x80,0x80,0x80}, - {12,0,2,5,4,6,8,11,10,13,12,15,14,0x80,0x80,0x80,0x80}, - {14,1,0,3,2,5,4,6,9,8,10,13,12,15,14,0x80,0x80}, - {13,0,3,2,5,4,6,9,8,10,13,12,15,14,0x80,0x80,0x80}, - {13,1,0,3,2,5,4,6,8,10,13,12,15,14,0x80,0x80,0x80}, - {12,0,3,2,5,4,6,8,10,13,12,15,14,0x80,0x80,0x80,0x80}, - {13,1,0,2,5,4,6,9,8,10,13,12,15,14,0x80,0x80,0x80}, - {12,0,2,5,4,6,9,8,10,13,12,15,14,0x80,0x80,0x80,0x80}, - {12,1,0,2,5,4,6,8,10,13,12,15,14,0x80,0x80,0x80,0x80}, - {11,0,2,5,4,6,8,10,13,12,15,14,0x80,0x80,0x80,0x80,0x80}, - {14,1,0,3,2,4,6,9,8,11,10,13,12,15,14,0x80,0x80}, - {13,0,3,2,4,6,9,8,11,10,13,12,15,14,0x80,0x80,0x80}, - {13,1,0,3,2,4,6,8,11,10,13,12,15,14,0x80,0x80,0x80}, - {12,0,3,2,4,6,8,11,10,13,12,15,14,0x80,0x80,0x80,0x80}, - {13,1,0,2,4,6,9,8,11,10,13,12,15,14,0x80,0x80,0x80}, - {12,0,2,4,6,9,8,11,10,13,12,15,14,0x80,0x80,0x80,0x80}, - {12,1,0,2,4,6,8,11,10,13,12,15,14,0x80,0x80,0x80,0x80}, - {11,0,2,4,6,8,11,10,13,12,15,14,0x80,0x80,0x80,0x80,0x80}, - {13,1,0,3,2,4,6,9,8,10,13,12,15,14,0x80,0x80,0x80}, - {12,0,3,2,4,6,9,8,10,13,12,15,14,0x80,0x80,0x80,0x80}, - {12,1,0,3,2,4,6,8,10,13,12,15,14,0x80,0x80,0x80,0x80}, - {11,0,3,2,4,6,8,10,13,12,15,14,0x80,0x80,0x80,0x80,0x80}, - {12,1,0,2,4,6,9,8,10,13,12,15,14,0x80,0x80,0x80,0x80}, - {11,0,2,4,6,9,8,10,13,12,15,14,0x80,0x80,0x80,0x80,0x80}, - {11,1,0,2,4,6,8,10,13,12,15,14,0x80,0x80,0x80,0x80,0x80}, - {10,0,2,4,6,8,10,13,12,15,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {14,1,0,3,2,5,4,6,9,8,11,10,12,15,14,0x80,0x80}, - {13,0,3,2,5,4,6,9,8,11,10,12,15,14,0x80,0x80,0x80}, - {13,1,0,3,2,5,4,6,8,11,10,12,15,14,0x80,0x80,0x80}, - {12,0,3,2,5,4,6,8,11,10,12,15,14,0x80,0x80,0x80,0x80}, - {13,1,0,2,5,4,6,9,8,11,10,12,15,14,0x80,0x80,0x80}, - {12,0,2,5,4,6,9,8,11,10,12,15,14,0x80,0x80,0x80,0x80}, - {12,1,0,2,5,4,6,8,11,10,12,15,14,0x80,0x80,0x80,0x80}, - {11,0,2,5,4,6,8,11,10,12,15,14,0x80,0x80,0x80,0x80,0x80}, - {13,1,0,3,2,5,4,6,9,8,10,12,15,14,0x80,0x80,0x80}, - {12,0,3,2,5,4,6,9,8,10,12,15,14,0x80,0x80,0x80,0x80}, - {12,1,0,3,2,5,4,6,8,10,12,15,14,0x80,0x80,0x80,0x80}, - {11,0,3,2,5,4,6,8,10,12,15,14,0x80,0x80,0x80,0x80,0x80}, - {12,1,0,2,5,4,6,9,8,10,12,15,14,0x80,0x80,0x80,0x80}, - {11,0,2,5,4,6,9,8,10,12,15,14,0x80,0x80,0x80,0x80,0x80}, - {11,1,0,2,5,4,6,8,10,12,15,14,0x80,0x80,0x80,0x80,0x80}, - {10,0,2,5,4,6,8,10,12,15,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {13,1,0,3,2,4,6,9,8,11,10,12,15,14,0x80,0x80,0x80}, - {12,0,3,2,4,6,9,8,11,10,12,15,14,0x80,0x80,0x80,0x80}, - {12,1,0,3,2,4,6,8,11,10,12,15,14,0x80,0x80,0x80,0x80}, - {11,0,3,2,4,6,8,11,10,12,15,14,0x80,0x80,0x80,0x80,0x80}, - {12,1,0,2,4,6,9,8,11,10,12,15,14,0x80,0x80,0x80,0x80}, - {11,0,2,4,6,9,8,11,10,12,15,14,0x80,0x80,0x80,0x80,0x80}, - {11,1,0,2,4,6,8,11,10,12,15,14,0x80,0x80,0x80,0x80,0x80}, - {10,0,2,4,6,8,11,10,12,15,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {12,1,0,3,2,4,6,9,8,10,12,15,14,0x80,0x80,0x80,0x80}, - {11,0,3,2,4,6,9,8,10,12,15,14,0x80,0x80,0x80,0x80,0x80}, - {11,1,0,3,2,4,6,8,10,12,15,14,0x80,0x80,0x80,0x80,0x80}, - {10,0,3,2,4,6,8,10,12,15,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {11,1,0,2,4,6,9,8,10,12,15,14,0x80,0x80,0x80,0x80,0x80}, - {10,0,2,4,6,9,8,10,12,15,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {10,1,0,2,4,6,8,10,12,15,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,0,2,4,6,8,10,12,15,14,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {15,1,0,3,2,5,4,7,6,9,8,11,10,13,12,14,0x80}, - {14,0,3,2,5,4,7,6,9,8,11,10,13,12,14,0x80,0x80}, - {14,1,0,3,2,5,4,7,6,8,11,10,13,12,14,0x80,0x80}, - {13,0,3,2,5,4,7,6,8,11,10,13,12,14,0x80,0x80,0x80}, - {14,1,0,2,5,4,7,6,9,8,11,10,13,12,14,0x80,0x80}, - {13,0,2,5,4,7,6,9,8,11,10,13,12,14,0x80,0x80,0x80}, - {13,1,0,2,5,4,7,6,8,11,10,13,12,14,0x80,0x80,0x80}, - {12,0,2,5,4,7,6,8,11,10,13,12,14,0x80,0x80,0x80,0x80}, - {14,1,0,3,2,5,4,7,6,9,8,10,13,12,14,0x80,0x80}, - {13,0,3,2,5,4,7,6,9,8,10,13,12,14,0x80,0x80,0x80}, - {13,1,0,3,2,5,4,7,6,8,10,13,12,14,0x80,0x80,0x80}, - {12,0,3,2,5,4,7,6,8,10,13,12,14,0x80,0x80,0x80,0x80}, - {13,1,0,2,5,4,7,6,9,8,10,13,12,14,0x80,0x80,0x80}, - {12,0,2,5,4,7,6,9,8,10,13,12,14,0x80,0x80,0x80,0x80}, - {12,1,0,2,5,4,7,6,8,10,13,12,14,0x80,0x80,0x80,0x80}, - {11,0,2,5,4,7,6,8,10,13,12,14,0x80,0x80,0x80,0x80,0x80}, - {14,1,0,3,2,4,7,6,9,8,11,10,13,12,14,0x80,0x80}, - {13,0,3,2,4,7,6,9,8,11,10,13,12,14,0x80,0x80,0x80}, - {13,1,0,3,2,4,7,6,8,11,10,13,12,14,0x80,0x80,0x80}, - {12,0,3,2,4,7,6,8,11,10,13,12,14,0x80,0x80,0x80,0x80}, - {13,1,0,2,4,7,6,9,8,11,10,13,12,14,0x80,0x80,0x80}, - {12,0,2,4,7,6,9,8,11,10,13,12,14,0x80,0x80,0x80,0x80}, - {12,1,0,2,4,7,6,8,11,10,13,12,14,0x80,0x80,0x80,0x80}, - {11,0,2,4,7,6,8,11,10,13,12,14,0x80,0x80,0x80,0x80,0x80}, - {13,1,0,3,2,4,7,6,9,8,10,13,12,14,0x80,0x80,0x80}, - {12,0,3,2,4,7,6,9,8,10,13,12,14,0x80,0x80,0x80,0x80}, - {12,1,0,3,2,4,7,6,8,10,13,12,14,0x80,0x80,0x80,0x80}, - {11,0,3,2,4,7,6,8,10,13,12,14,0x80,0x80,0x80,0x80,0x80}, - {12,1,0,2,4,7,6,9,8,10,13,12,14,0x80,0x80,0x80,0x80}, - {11,0,2,4,7,6,9,8,10,13,12,14,0x80,0x80,0x80,0x80,0x80}, - {11,1,0,2,4,7,6,8,10,13,12,14,0x80,0x80,0x80,0x80,0x80}, - {10,0,2,4,7,6,8,10,13,12,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {14,1,0,3,2,5,4,7,6,9,8,11,10,12,14,0x80,0x80}, - {13,0,3,2,5,4,7,6,9,8,11,10,12,14,0x80,0x80,0x80}, - {13,1,0,3,2,5,4,7,6,8,11,10,12,14,0x80,0x80,0x80}, - {12,0,3,2,5,4,7,6,8,11,10,12,14,0x80,0x80,0x80,0x80}, - {13,1,0,2,5,4,7,6,9,8,11,10,12,14,0x80,0x80,0x80}, - {12,0,2,5,4,7,6,9,8,11,10,12,14,0x80,0x80,0x80,0x80}, - {12,1,0,2,5,4,7,6,8,11,10,12,14,0x80,0x80,0x80,0x80}, - {11,0,2,5,4,7,6,8,11,10,12,14,0x80,0x80,0x80,0x80,0x80}, - {13,1,0,3,2,5,4,7,6,9,8,10,12,14,0x80,0x80,0x80}, - {12,0,3,2,5,4,7,6,9,8,10,12,14,0x80,0x80,0x80,0x80}, - {12,1,0,3,2,5,4,7,6,8,10,12,14,0x80,0x80,0x80,0x80}, - {11,0,3,2,5,4,7,6,8,10,12,14,0x80,0x80,0x80,0x80,0x80}, - {12,1,0,2,5,4,7,6,9,8,10,12,14,0x80,0x80,0x80,0x80}, - {11,0,2,5,4,7,6,9,8,10,12,14,0x80,0x80,0x80,0x80,0x80}, - {11,1,0,2,5,4,7,6,8,10,12,14,0x80,0x80,0x80,0x80,0x80}, - {10,0,2,5,4,7,6,8,10,12,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {13,1,0,3,2,4,7,6,9,8,11,10,12,14,0x80,0x80,0x80}, - {12,0,3,2,4,7,6,9,8,11,10,12,14,0x80,0x80,0x80,0x80}, - {12,1,0,3,2,4,7,6,8,11,10,12,14,0x80,0x80,0x80,0x80}, - {11,0,3,2,4,7,6,8,11,10,12,14,0x80,0x80,0x80,0x80,0x80}, - {12,1,0,2,4,7,6,9,8,11,10,12,14,0x80,0x80,0x80,0x80}, - {11,0,2,4,7,6,9,8,11,10,12,14,0x80,0x80,0x80,0x80,0x80}, - {11,1,0,2,4,7,6,8,11,10,12,14,0x80,0x80,0x80,0x80,0x80}, - {10,0,2,4,7,6,8,11,10,12,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {12,1,0,3,2,4,7,6,9,8,10,12,14,0x80,0x80,0x80,0x80}, - {11,0,3,2,4,7,6,9,8,10,12,14,0x80,0x80,0x80,0x80,0x80}, - {11,1,0,3,2,4,7,6,8,10,12,14,0x80,0x80,0x80,0x80,0x80}, - {10,0,3,2,4,7,6,8,10,12,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {11,1,0,2,4,7,6,9,8,10,12,14,0x80,0x80,0x80,0x80,0x80}, - {10,0,2,4,7,6,9,8,10,12,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {10,1,0,2,4,7,6,8,10,12,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,0,2,4,7,6,8,10,12,14,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {14,1,0,3,2,5,4,6,9,8,11,10,13,12,14,0x80,0x80}, - {13,0,3,2,5,4,6,9,8,11,10,13,12,14,0x80,0x80,0x80}, - {13,1,0,3,2,5,4,6,8,11,10,13,12,14,0x80,0x80,0x80}, - {12,0,3,2,5,4,6,8,11,10,13,12,14,0x80,0x80,0x80,0x80}, - {13,1,0,2,5,4,6,9,8,11,10,13,12,14,0x80,0x80,0x80}, - {12,0,2,5,4,6,9,8,11,10,13,12,14,0x80,0x80,0x80,0x80}, - {12,1,0,2,5,4,6,8,11,10,13,12,14,0x80,0x80,0x80,0x80}, - {11,0,2,5,4,6,8,11,10,13,12,14,0x80,0x80,0x80,0x80,0x80}, - {13,1,0,3,2,5,4,6,9,8,10,13,12,14,0x80,0x80,0x80}, - {12,0,3,2,5,4,6,9,8,10,13,12,14,0x80,0x80,0x80,0x80}, - {12,1,0,3,2,5,4,6,8,10,13,12,14,0x80,0x80,0x80,0x80}, - {11,0,3,2,5,4,6,8,10,13,12,14,0x80,0x80,0x80,0x80,0x80}, - {12,1,0,2,5,4,6,9,8,10,13,12,14,0x80,0x80,0x80,0x80}, - {11,0,2,5,4,6,9,8,10,13,12,14,0x80,0x80,0x80,0x80,0x80}, - {11,1,0,2,5,4,6,8,10,13,12,14,0x80,0x80,0x80,0x80,0x80}, - {10,0,2,5,4,6,8,10,13,12,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {13,1,0,3,2,4,6,9,8,11,10,13,12,14,0x80,0x80,0x80}, - {12,0,3,2,4,6,9,8,11,10,13,12,14,0x80,0x80,0x80,0x80}, - {12,1,0,3,2,4,6,8,11,10,13,12,14,0x80,0x80,0x80,0x80}, - {11,0,3,2,4,6,8,11,10,13,12,14,0x80,0x80,0x80,0x80,0x80}, - {12,1,0,2,4,6,9,8,11,10,13,12,14,0x80,0x80,0x80,0x80}, - {11,0,2,4,6,9,8,11,10,13,12,14,0x80,0x80,0x80,0x80,0x80}, - {11,1,0,2,4,6,8,11,10,13,12,14,0x80,0x80,0x80,0x80,0x80}, - {10,0,2,4,6,8,11,10,13,12,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {12,1,0,3,2,4,6,9,8,10,13,12,14,0x80,0x80,0x80,0x80}, - {11,0,3,2,4,6,9,8,10,13,12,14,0x80,0x80,0x80,0x80,0x80}, - {11,1,0,3,2,4,6,8,10,13,12,14,0x80,0x80,0x80,0x80,0x80}, - {10,0,3,2,4,6,8,10,13,12,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {11,1,0,2,4,6,9,8,10,13,12,14,0x80,0x80,0x80,0x80,0x80}, - {10,0,2,4,6,9,8,10,13,12,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {10,1,0,2,4,6,8,10,13,12,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,0,2,4,6,8,10,13,12,14,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {13,1,0,3,2,5,4,6,9,8,11,10,12,14,0x80,0x80,0x80}, - {12,0,3,2,5,4,6,9,8,11,10,12,14,0x80,0x80,0x80,0x80}, - {12,1,0,3,2,5,4,6,8,11,10,12,14,0x80,0x80,0x80,0x80}, - {11,0,3,2,5,4,6,8,11,10,12,14,0x80,0x80,0x80,0x80,0x80}, - {12,1,0,2,5,4,6,9,8,11,10,12,14,0x80,0x80,0x80,0x80}, - {11,0,2,5,4,6,9,8,11,10,12,14,0x80,0x80,0x80,0x80,0x80}, - {11,1,0,2,5,4,6,8,11,10,12,14,0x80,0x80,0x80,0x80,0x80}, - {10,0,2,5,4,6,8,11,10,12,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {12,1,0,3,2,5,4,6,9,8,10,12,14,0x80,0x80,0x80,0x80}, - {11,0,3,2,5,4,6,9,8,10,12,14,0x80,0x80,0x80,0x80,0x80}, - {11,1,0,3,2,5,4,6,8,10,12,14,0x80,0x80,0x80,0x80,0x80}, - {10,0,3,2,5,4,6,8,10,12,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {11,1,0,2,5,4,6,9,8,10,12,14,0x80,0x80,0x80,0x80,0x80}, - {10,0,2,5,4,6,9,8,10,12,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {10,1,0,2,5,4,6,8,10,12,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,0,2,5,4,6,8,10,12,14,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {12,1,0,3,2,4,6,9,8,11,10,12,14,0x80,0x80,0x80,0x80}, - {11,0,3,2,4,6,9,8,11,10,12,14,0x80,0x80,0x80,0x80,0x80}, - {11,1,0,3,2,4,6,8,11,10,12,14,0x80,0x80,0x80,0x80,0x80}, - {10,0,3,2,4,6,8,11,10,12,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {11,1,0,2,4,6,9,8,11,10,12,14,0x80,0x80,0x80,0x80,0x80}, - {10,0,2,4,6,9,8,11,10,12,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {10,1,0,2,4,6,8,11,10,12,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,0,2,4,6,8,11,10,12,14,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {11,1,0,3,2,4,6,9,8,10,12,14,0x80,0x80,0x80,0x80,0x80}, - {10,0,3,2,4,6,9,8,10,12,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {10,1,0,3,2,4,6,8,10,12,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,0,3,2,4,6,8,10,12,14,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {10,1,0,2,4,6,9,8,10,12,14,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,0,2,4,6,9,8,10,12,14,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,1,0,2,4,6,8,10,12,14,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,0,2,4,6,8,10,12,14,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80} - }; - - // 1 byte for length, 16 bytes for mask - const uint8_t pack_1_2_3_utf8_bytes[256][17] = { - {12,2,3,1,6,7,5,10,11,9,14,15,13,0x80,0x80,0x80,0x80}, - {9,6,7,5,10,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {11,3,1,6,7,5,10,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80}, - {10,0,6,7,5,10,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,2,3,1,10,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,10,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,3,1,10,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,0,10,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {11,2,3,1,7,5,10,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80}, - {8,7,5,10,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {10,3,1,7,5,10,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,0,7,5,10,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {10,2,3,1,4,10,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,4,10,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,3,1,4,10,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,0,4,10,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,2,3,1,6,7,5,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,6,7,5,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,3,1,6,7,5,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,0,6,7,5,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,2,3,1,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {3,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,3,1,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,0,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,2,3,1,7,5,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,7,5,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,3,1,7,5,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,0,7,5,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,2,3,1,4,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,4,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,3,1,4,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,0,4,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {11,2,3,1,6,7,5,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80}, - {8,6,7,5,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {10,3,1,6,7,5,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,0,6,7,5,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,2,3,1,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,3,1,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,0,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {10,2,3,1,7,5,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,7,5,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,3,1,7,5,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,0,7,5,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,2,3,1,4,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,4,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,3,1,4,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,0,4,11,9,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {10,2,3,1,6,7,5,8,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,6,7,5,8,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,3,1,6,7,5,8,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,0,6,7,5,8,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,2,3,1,8,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,8,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,3,1,8,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,0,8,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,2,3,1,7,5,8,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,7,5,8,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,3,1,7,5,8,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,0,7,5,8,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,2,3,1,4,8,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,4,8,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,3,1,4,8,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,0,4,8,14,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,2,3,1,6,7,5,10,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,6,7,5,10,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,3,1,6,7,5,10,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,0,6,7,5,10,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,2,3,1,10,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {3,10,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,3,1,10,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,0,10,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,2,3,1,7,5,10,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,7,5,10,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,3,1,7,5,10,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,0,7,5,10,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,2,3,1,4,10,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,4,10,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,3,1,4,10,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,0,4,10,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,2,3,1,6,7,5,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {3,6,7,5,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,3,1,6,7,5,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,0,6,7,5,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {3,2,3,1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {2,3,1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {1,0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,2,3,1,7,5,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {2,7,5,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,3,1,7,5,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {3,0,7,5,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,2,3,1,4,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {1,4,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {3,3,1,4,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {2,0,4,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,2,3,1,6,7,5,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,6,7,5,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,3,1,6,7,5,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,0,6,7,5,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,2,3,1,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {2,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,3,1,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {3,0,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,2,3,1,7,5,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,7,5,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,3,1,7,5,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,0,7,5,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,2,3,1,4,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {3,4,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,3,1,4,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,0,4,11,9,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,2,3,1,6,7,5,8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,6,7,5,8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,3,1,6,7,5,8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,0,6,7,5,8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,2,3,1,8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {1,8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {3,3,1,8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {2,0,8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,2,3,1,7,5,8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {3,7,5,8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,3,1,7,5,8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,0,7,5,8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,2,3,1,4,8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {2,4,8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,3,1,4,8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {3,0,4,8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {11,2,3,1,6,7,5,10,11,9,15,13,0x80,0x80,0x80,0x80,0x80}, - {8,6,7,5,10,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {10,3,1,6,7,5,10,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,0,6,7,5,10,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,2,3,1,10,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,10,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,3,1,10,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,0,10,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {10,2,3,1,7,5,10,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,7,5,10,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,3,1,7,5,10,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,0,7,5,10,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,2,3,1,4,10,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,4,10,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,3,1,4,10,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,0,4,10,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,2,3,1,6,7,5,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,6,7,5,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,3,1,6,7,5,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,0,6,7,5,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,2,3,1,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {2,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,3,1,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {3,0,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,2,3,1,7,5,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,7,5,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,3,1,7,5,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,0,7,5,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,2,3,1,4,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {3,4,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,3,1,4,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,0,4,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {10,2,3,1,6,7,5,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,6,7,5,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,3,1,6,7,5,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,0,6,7,5,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,2,3,1,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,3,1,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,0,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,2,3,1,7,5,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,7,5,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,3,1,7,5,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,0,7,5,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,2,3,1,4,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,4,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,3,1,4,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,0,4,11,9,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,2,3,1,6,7,5,8,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,6,7,5,8,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,3,1,6,7,5,8,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,0,6,7,5,8,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,2,3,1,8,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {3,8,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,3,1,8,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,0,8,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,2,3,1,7,5,8,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,7,5,8,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,3,1,7,5,8,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,0,7,5,8,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,2,3,1,4,8,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,4,8,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,3,1,4,8,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,0,4,8,15,13,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {10,2,3,1,6,7,5,10,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,6,7,5,10,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,3,1,6,7,5,10,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,0,6,7,5,10,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,2,3,1,10,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,10,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,3,1,10,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,0,10,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,2,3,1,7,5,10,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,7,5,10,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,3,1,7,5,10,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,0,7,5,10,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,2,3,1,4,10,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,4,10,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,3,1,4,10,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,0,4,10,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,2,3,1,6,7,5,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,6,7,5,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,3,1,6,7,5,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,0,6,7,5,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,2,3,1,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {1,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {3,3,1,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {2,0,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,2,3,1,7,5,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {3,7,5,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,3,1,7,5,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,0,7,5,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,2,3,1,4,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {2,4,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,3,1,4,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {3,0,4,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {9,2,3,1,6,7,5,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,6,7,5,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,3,1,6,7,5,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,0,6,7,5,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,2,3,1,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {3,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,3,1,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,0,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,2,3,1,7,5,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,7,5,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,3,1,7,5,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,0,7,5,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,2,3,1,4,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,4,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,3,1,4,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,0,4,11,9,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {8,2,3,1,6,7,5,8,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,6,7,5,8,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,3,1,6,7,5,8,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,0,6,7,5,8,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,2,3,1,8,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {2,8,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,3,1,8,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {3,0,8,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {7,2,3,1,7,5,8,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,7,5,8,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,3,1,7,5,8,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,0,7,5,8,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {6,2,3,1,4,8,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {3,4,8,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {5,3,1,4,8,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, - {4,0,4,8,12,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80} - }; - -} // utf16_to_utf8 namespace -} // tables namespace +// 1 byte for length, 16 bytes for mask +const uint8_t pack_1_2_utf8_bytes[256][17] = { + {16, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14}, + {15, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, 0x80}, + {15, 1, 0, 3, 2, 5, 4, 7, 6, 8, 11, 10, 13, 12, 15, 14, 0x80}, + {14, 0, 3, 2, 5, 4, 7, 6, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80}, + {15, 1, 0, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, 0x80}, + {14, 0, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80}, + {14, 1, 0, 2, 5, 4, 7, 6, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80}, + {13, 0, 2, 5, 4, 7, 6, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80}, + {15, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 10, 13, 12, 15, 14, 0x80}, + {14, 0, 3, 2, 5, 4, 7, 6, 9, 8, 10, 13, 12, 15, 14, 0x80, 0x80}, + {14, 1, 0, 3, 2, 5, 4, 7, 6, 8, 10, 13, 12, 15, 14, 0x80, 0x80}, + {13, 0, 3, 2, 5, 4, 7, 6, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80}, + {14, 1, 0, 2, 5, 4, 7, 6, 9, 8, 10, 13, 12, 15, 14, 0x80, 0x80}, + {13, 0, 2, 5, 4, 7, 6, 9, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80}, + {13, 1, 0, 2, 5, 4, 7, 6, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80}, + {12, 0, 2, 5, 4, 7, 6, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {15, 1, 0, 3, 2, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, 0x80}, + {14, 0, 3, 2, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80}, + {14, 1, 0, 3, 2, 4, 7, 6, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80}, + {13, 0, 3, 2, 4, 7, 6, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80}, + {14, 1, 0, 2, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80}, + {13, 0, 2, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80}, + {13, 1, 0, 2, 4, 7, 6, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80}, + {12, 0, 2, 4, 7, 6, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {14, 1, 0, 3, 2, 4, 7, 6, 9, 8, 10, 13, 12, 15, 14, 0x80, 0x80}, + {13, 0, 3, 2, 4, 7, 6, 9, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80}, + {13, 1, 0, 3, 2, 4, 7, 6, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80}, + {12, 0, 3, 2, 4, 7, 6, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {13, 1, 0, 2, 4, 7, 6, 9, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80}, + {12, 0, 2, 4, 7, 6, 9, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 2, 4, 7, 6, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 2, 4, 7, 6, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {15, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 12, 15, 14, 0x80}, + {14, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 12, 15, 14, 0x80, 0x80}, + {14, 1, 0, 3, 2, 5, 4, 7, 6, 8, 11, 10, 12, 15, 14, 0x80, 0x80}, + {13, 0, 3, 2, 5, 4, 7, 6, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80}, + {14, 1, 0, 2, 5, 4, 7, 6, 9, 8, 11, 10, 12, 15, 14, 0x80, 0x80}, + {13, 0, 2, 5, 4, 7, 6, 9, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80}, + {13, 1, 0, 2, 5, 4, 7, 6, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80}, + {12, 0, 2, 5, 4, 7, 6, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {14, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 10, 12, 15, 14, 0x80, 0x80}, + {13, 0, 3, 2, 5, 4, 7, 6, 9, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80}, + {13, 1, 0, 3, 2, 5, 4, 7, 6, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80}, + {12, 0, 3, 2, 5, 4, 7, 6, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {13, 1, 0, 2, 5, 4, 7, 6, 9, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80}, + {12, 0, 2, 5, 4, 7, 6, 9, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 2, 5, 4, 7, 6, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 2, 5, 4, 7, 6, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {14, 1, 0, 3, 2, 4, 7, 6, 9, 8, 11, 10, 12, 15, 14, 0x80, 0x80}, + {13, 0, 3, 2, 4, 7, 6, 9, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80}, + {13, 1, 0, 3, 2, 4, 7, 6, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80}, + {12, 0, 3, 2, 4, 7, 6, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {13, 1, 0, 2, 4, 7, 6, 9, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80}, + {12, 0, 2, 4, 7, 6, 9, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 2, 4, 7, 6, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 2, 4, 7, 6, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {13, 1, 0, 3, 2, 4, 7, 6, 9, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80}, + {12, 0, 3, 2, 4, 7, 6, 9, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 3, 2, 4, 7, 6, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 3, 2, 4, 7, 6, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 2, 4, 7, 6, 9, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 2, 4, 7, 6, 9, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {11, 1, 0, 2, 4, 7, 6, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 0, 2, 4, 7, 6, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {15, 1, 0, 3, 2, 5, 4, 6, 9, 8, 11, 10, 13, 12, 15, 14, 0x80}, + {14, 0, 3, 2, 5, 4, 6, 9, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80}, + {14, 1, 0, 3, 2, 5, 4, 6, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80}, + {13, 0, 3, 2, 5, 4, 6, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80}, + {14, 1, 0, 2, 5, 4, 6, 9, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80}, + {13, 0, 2, 5, 4, 6, 9, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80}, + {13, 1, 0, 2, 5, 4, 6, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80}, + {12, 0, 2, 5, 4, 6, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {14, 1, 0, 3, 2, 5, 4, 6, 9, 8, 10, 13, 12, 15, 14, 0x80, 0x80}, + {13, 0, 3, 2, 5, 4, 6, 9, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80}, + {13, 1, 0, 3, 2, 5, 4, 6, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80}, + {12, 0, 3, 2, 5, 4, 6, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {13, 1, 0, 2, 5, 4, 6, 9, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80}, + {12, 0, 2, 5, 4, 6, 9, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 2, 5, 4, 6, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 2, 5, 4, 6, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {14, 1, 0, 3, 2, 4, 6, 9, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80}, + {13, 0, 3, 2, 4, 6, 9, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80}, + {13, 1, 0, 3, 2, 4, 6, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80}, + {12, 0, 3, 2, 4, 6, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {13, 1, 0, 2, 4, 6, 9, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80}, + {12, 0, 2, 4, 6, 9, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 2, 4, 6, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 2, 4, 6, 8, 11, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {13, 1, 0, 3, 2, 4, 6, 9, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80}, + {12, 0, 3, 2, 4, 6, 9, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 3, 2, 4, 6, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 3, 2, 4, 6, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 2, 4, 6, 9, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 2, 4, 6, 9, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {11, 1, 0, 2, 4, 6, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 0, 2, 4, 6, 8, 10, 13, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {14, 1, 0, 3, 2, 5, 4, 6, 9, 8, 11, 10, 12, 15, 14, 0x80, 0x80}, + {13, 0, 3, 2, 5, 4, 6, 9, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80}, + {13, 1, 0, 3, 2, 5, 4, 6, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80}, + {12, 0, 3, 2, 5, 4, 6, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {13, 1, 0, 2, 5, 4, 6, 9, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80}, + {12, 0, 2, 5, 4, 6, 9, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 2, 5, 4, 6, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 2, 5, 4, 6, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {13, 1, 0, 3, 2, 5, 4, 6, 9, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80}, + {12, 0, 3, 2, 5, 4, 6, 9, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 3, 2, 5, 4, 6, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 3, 2, 5, 4, 6, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 2, 5, 4, 6, 9, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 2, 5, 4, 6, 9, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {11, 1, 0, 2, 5, 4, 6, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 0, 2, 5, 4, 6, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {13, 1, 0, 3, 2, 4, 6, 9, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80}, + {12, 0, 3, 2, 4, 6, 9, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 3, 2, 4, 6, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 3, 2, 4, 6, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 2, 4, 6, 9, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 2, 4, 6, 9, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {11, 1, 0, 2, 4, 6, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 0, 2, 4, 6, 8, 11, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 3, 2, 4, 6, 9, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 3, 2, 4, 6, 9, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {11, 1, 0, 3, 2, 4, 6, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 0, 3, 2, 4, 6, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {11, 1, 0, 2, 4, 6, 9, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 0, 2, 4, 6, 9, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 1, 0, 2, 4, 6, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {9, 0, 2, 4, 6, 8, 10, 12, 15, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {15, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 14, 0x80}, + {14, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 14, 0x80, 0x80}, + {14, 1, 0, 3, 2, 5, 4, 7, 6, 8, 11, 10, 13, 12, 14, 0x80, 0x80}, + {13, 0, 3, 2, 5, 4, 7, 6, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80}, + {14, 1, 0, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 14, 0x80, 0x80}, + {13, 0, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80}, + {13, 1, 0, 2, 5, 4, 7, 6, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80}, + {12, 0, 2, 5, 4, 7, 6, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {14, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 10, 13, 12, 14, 0x80, 0x80}, + {13, 0, 3, 2, 5, 4, 7, 6, 9, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80}, + {13, 1, 0, 3, 2, 5, 4, 7, 6, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80}, + {12, 0, 3, 2, 5, 4, 7, 6, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {13, 1, 0, 2, 5, 4, 7, 6, 9, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80}, + {12, 0, 2, 5, 4, 7, 6, 9, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 2, 5, 4, 7, 6, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 2, 5, 4, 7, 6, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {14, 1, 0, 3, 2, 4, 7, 6, 9, 8, 11, 10, 13, 12, 14, 0x80, 0x80}, + {13, 0, 3, 2, 4, 7, 6, 9, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80}, + {13, 1, 0, 3, 2, 4, 7, 6, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80}, + {12, 0, 3, 2, 4, 7, 6, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {13, 1, 0, 2, 4, 7, 6, 9, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80}, + {12, 0, 2, 4, 7, 6, 9, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 2, 4, 7, 6, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 2, 4, 7, 6, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {13, 1, 0, 3, 2, 4, 7, 6, 9, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80}, + {12, 0, 3, 2, 4, 7, 6, 9, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 3, 2, 4, 7, 6, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 3, 2, 4, 7, 6, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 2, 4, 7, 6, 9, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 2, 4, 7, 6, 9, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {11, 1, 0, 2, 4, 7, 6, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 0, 2, 4, 7, 6, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {14, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 12, 14, 0x80, 0x80}, + {13, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80}, + {13, 1, 0, 3, 2, 5, 4, 7, 6, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80}, + {12, 0, 3, 2, 5, 4, 7, 6, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {13, 1, 0, 2, 5, 4, 7, 6, 9, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80}, + {12, 0, 2, 5, 4, 7, 6, 9, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 2, 5, 4, 7, 6, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 2, 5, 4, 7, 6, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {13, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 10, 12, 14, 0x80, 0x80, 0x80}, + {12, 0, 3, 2, 5, 4, 7, 6, 9, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 3, 2, 5, 4, 7, 6, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 3, 2, 5, 4, 7, 6, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 2, 5, 4, 7, 6, 9, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 2, 5, 4, 7, 6, 9, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {11, 1, 0, 2, 5, 4, 7, 6, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 0, 2, 5, 4, 7, 6, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {13, 1, 0, 3, 2, 4, 7, 6, 9, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80}, + {12, 0, 3, 2, 4, 7, 6, 9, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 3, 2, 4, 7, 6, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 3, 2, 4, 7, 6, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 2, 4, 7, 6, 9, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 2, 4, 7, 6, 9, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {11, 1, 0, 2, 4, 7, 6, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 0, 2, 4, 7, 6, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 3, 2, 4, 7, 6, 9, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 3, 2, 4, 7, 6, 9, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {11, 1, 0, 3, 2, 4, 7, 6, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 0, 3, 2, 4, 7, 6, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {11, 1, 0, 2, 4, 7, 6, 9, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 0, 2, 4, 7, 6, 9, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 1, 0, 2, 4, 7, 6, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {9, 0, 2, 4, 7, 6, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {14, 1, 0, 3, 2, 5, 4, 6, 9, 8, 11, 10, 13, 12, 14, 0x80, 0x80}, + {13, 0, 3, 2, 5, 4, 6, 9, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80}, + {13, 1, 0, 3, 2, 5, 4, 6, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80}, + {12, 0, 3, 2, 5, 4, 6, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {13, 1, 0, 2, 5, 4, 6, 9, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80}, + {12, 0, 2, 5, 4, 6, 9, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 2, 5, 4, 6, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 2, 5, 4, 6, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {13, 1, 0, 3, 2, 5, 4, 6, 9, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80}, + {12, 0, 3, 2, 5, 4, 6, 9, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 3, 2, 5, 4, 6, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 3, 2, 5, 4, 6, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 2, 5, 4, 6, 9, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 2, 5, 4, 6, 9, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {11, 1, 0, 2, 5, 4, 6, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 0, 2, 5, 4, 6, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {13, 1, 0, 3, 2, 4, 6, 9, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80}, + {12, 0, 3, 2, 4, 6, 9, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 3, 2, 4, 6, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 3, 2, 4, 6, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 2, 4, 6, 9, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 2, 4, 6, 9, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {11, 1, 0, 2, 4, 6, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 0, 2, 4, 6, 8, 11, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 3, 2, 4, 6, 9, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 3, 2, 4, 6, 9, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {11, 1, 0, 3, 2, 4, 6, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 0, 3, 2, 4, 6, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {11, 1, 0, 2, 4, 6, 9, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 0, 2, 4, 6, 9, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 1, 0, 2, 4, 6, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {9, 0, 2, 4, 6, 8, 10, 13, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {13, 1, 0, 3, 2, 5, 4, 6, 9, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80}, + {12, 0, 3, 2, 5, 4, 6, 9, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 3, 2, 5, 4, 6, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 3, 2, 5, 4, 6, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 2, 5, 4, 6, 9, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 2, 5, 4, 6, 9, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {11, 1, 0, 2, 5, 4, 6, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 0, 2, 5, 4, 6, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 3, 2, 5, 4, 6, 9, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 3, 2, 5, 4, 6, 9, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {11, 1, 0, 3, 2, 5, 4, 6, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 0, 3, 2, 5, 4, 6, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {11, 1, 0, 2, 5, 4, 6, 9, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 0, 2, 5, 4, 6, 9, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 1, 0, 2, 5, 4, 6, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {9, 0, 2, 5, 4, 6, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {12, 1, 0, 3, 2, 4, 6, 9, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80}, + {11, 0, 3, 2, 4, 6, 9, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {11, 1, 0, 3, 2, 4, 6, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 0, 3, 2, 4, 6, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {11, 1, 0, 2, 4, 6, 9, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 0, 2, 4, 6, 9, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 1, 0, 2, 4, 6, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {9, 0, 2, 4, 6, 8, 11, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {11, 1, 0, 3, 2, 4, 6, 9, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 0, 3, 2, 4, 6, 9, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 1, 0, 3, 2, 4, 6, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {9, 0, 3, 2, 4, 6, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 1, 0, 2, 4, 6, 9, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {9, 0, 2, 4, 6, 9, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {9, 1, 0, 2, 4, 6, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {8, 0, 2, 4, 6, 8, 10, 12, 14, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}}; + +// 1 byte for length, 16 bytes for mask +const uint8_t pack_1_2_3_utf8_bytes[256][17] = { + {12, 2, 3, 1, 6, 7, 5, 10, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80}, + {9, 6, 7, 5, 10, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {11, 3, 1, 6, 7, 5, 10, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80}, + {10, 0, 6, 7, 5, 10, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {9, 2, 3, 1, 10, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {6, 10, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {8, 3, 1, 10, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {7, 0, 10, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {11, 2, 3, 1, 7, 5, 10, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80}, + {8, 7, 5, 10, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {10, 3, 1, 7, 5, 10, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {9, 0, 7, 5, 10, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {10, 2, 3, 1, 4, 10, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {7, 4, 10, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {9, 3, 1, 4, 10, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {8, 0, 4, 10, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {9, 2, 3, 1, 6, 7, 5, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {6, 6, 7, 5, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {8, 3, 1, 6, 7, 5, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {7, 0, 6, 7, 5, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {6, 2, 3, 1, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {3, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {5, 3, 1, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {4, 0, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {8, 2, 3, 1, 7, 5, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {5, 7, 5, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {7, 3, 1, 7, 5, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {6, 0, 7, 5, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {7, 2, 3, 1, 4, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {4, 4, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {6, 3, 1, 4, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {5, 0, 4, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {11, 2, 3, 1, 6, 7, 5, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80}, + {8, 6, 7, 5, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {10, 3, 1, 6, 7, 5, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {9, 0, 6, 7, 5, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {8, 2, 3, 1, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {5, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {7, 3, 1, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {6, 0, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {10, 2, 3, 1, 7, 5, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {7, 7, 5, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {9, 3, 1, 7, 5, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {8, 0, 7, 5, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {9, 2, 3, 1, 4, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {6, 4, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {8, 3, 1, 4, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {7, 0, 4, 11, 9, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {10, 2, 3, 1, 6, 7, 5, 8, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {7, 6, 7, 5, 8, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {9, 3, 1, 6, 7, 5, 8, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {8, 0, 6, 7, 5, 8, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {7, 2, 3, 1, 8, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {4, 8, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {6, 3, 1, 8, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {5, 0, 8, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {9, 2, 3, 1, 7, 5, 8, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {6, 7, 5, 8, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {8, 3, 1, 7, 5, 8, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {7, 0, 7, 5, 8, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {8, 2, 3, 1, 4, 8, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {5, 4, 8, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {7, 3, 1, 4, 8, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {6, 0, 4, 8, 14, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {9, 2, 3, 1, 6, 7, 5, 10, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {6, 6, 7, 5, 10, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {8, 3, 1, 6, 7, 5, 10, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {7, 0, 6, 7, 5, 10, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {6, 2, 3, 1, 10, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {3, 10, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {5, 3, 1, 10, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {4, 0, 10, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {8, 2, 3, 1, 7, 5, 10, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {5, 7, 5, 10, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {7, 3, 1, 7, 5, 10, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {6, 0, 7, 5, 10, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {7, 2, 3, 1, 4, 10, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {4, 4, 10, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {6, 3, 1, 4, 10, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {5, 0, 4, 10, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {6, 2, 3, 1, 6, 7, 5, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {3, 6, 7, 5, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {5, 3, 1, 6, 7, 5, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {4, 0, 6, 7, 5, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {3, 2, 3, 1, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80}, + {2, 3, 1, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {1, 0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80}, + {5, 2, 3, 1, 7, 5, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {2, 7, 5, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {4, 3, 1, 7, 5, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {3, 0, 7, 5, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {4, 2, 3, 1, 4, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {1, 4, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80}, + {3, 3, 1, 4, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {2, 0, 4, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {8, 2, 3, 1, 6, 7, 5, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {5, 6, 7, 5, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {7, 3, 1, 6, 7, 5, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {6, 0, 6, 7, 5, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {5, 2, 3, 1, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {2, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {4, 3, 1, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {3, 0, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {7, 2, 3, 1, 7, 5, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {4, 7, 5, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {6, 3, 1, 7, 5, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {5, 0, 7, 5, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {6, 2, 3, 1, 4, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {3, 4, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {5, 3, 1, 4, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {4, 0, 4, 11, 9, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {7, 2, 3, 1, 6, 7, 5, 8, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {4, 6, 7, 5, 8, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {6, 3, 1, 6, 7, 5, 8, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {5, 0, 6, 7, 5, 8, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {4, 2, 3, 1, 8, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {1, 8, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80}, + {3, 3, 1, 8, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {2, 0, 8, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {6, 2, 3, 1, 7, 5, 8, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {3, 7, 5, 8, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {5, 3, 1, 7, 5, 8, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {4, 0, 7, 5, 8, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {5, 2, 3, 1, 4, 8, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {2, 4, 8, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {4, 3, 1, 4, 8, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {3, 0, 4, 8, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {11, 2, 3, 1, 6, 7, 5, 10, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80}, + {8, 6, 7, 5, 10, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {10, 3, 1, 6, 7, 5, 10, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {9, 0, 6, 7, 5, 10, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {8, 2, 3, 1, 10, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {5, 10, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {7, 3, 1, 10, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {6, 0, 10, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {10, 2, 3, 1, 7, 5, 10, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {7, 7, 5, 10, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {9, 3, 1, 7, 5, 10, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {8, 0, 7, 5, 10, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {9, 2, 3, 1, 4, 10, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {6, 4, 10, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {8, 3, 1, 4, 10, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {7, 0, 4, 10, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {8, 2, 3, 1, 6, 7, 5, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {5, 6, 7, 5, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {7, 3, 1, 6, 7, 5, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {6, 0, 6, 7, 5, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {5, 2, 3, 1, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {2, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80}, + {4, 3, 1, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {3, 0, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {7, 2, 3, 1, 7, 5, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {4, 7, 5, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {6, 3, 1, 7, 5, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {5, 0, 7, 5, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {6, 2, 3, 1, 4, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {3, 4, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {5, 3, 1, 4, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {4, 0, 4, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {10, 2, 3, 1, 6, 7, 5, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {7, 6, 7, 5, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {9, 3, 1, 6, 7, 5, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {8, 0, 6, 7, 5, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {7, 2, 3, 1, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {4, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {6, 3, 1, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {5, 0, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {9, 2, 3, 1, 7, 5, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {6, 7, 5, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {8, 3, 1, 7, 5, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {7, 0, 7, 5, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {8, 2, 3, 1, 4, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {5, 4, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {7, 3, 1, 4, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {6, 0, 4, 11, 9, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {9, 2, 3, 1, 6, 7, 5, 8, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {6, 6, 7, 5, 8, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {8, 3, 1, 6, 7, 5, 8, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {7, 0, 6, 7, 5, 8, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {6, 2, 3, 1, 8, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {3, 8, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {5, 3, 1, 8, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {4, 0, 8, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {8, 2, 3, 1, 7, 5, 8, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {5, 7, 5, 8, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {7, 3, 1, 7, 5, 8, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {6, 0, 7, 5, 8, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {7, 2, 3, 1, 4, 8, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {4, 4, 8, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {6, 3, 1, 4, 8, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {5, 0, 4, 8, 15, 13, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {10, 2, 3, 1, 6, 7, 5, 10, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {7, 6, 7, 5, 10, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {9, 3, 1, 6, 7, 5, 10, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {8, 0, 6, 7, 5, 10, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {7, 2, 3, 1, 10, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {4, 10, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {6, 3, 1, 10, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {5, 0, 10, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {9, 2, 3, 1, 7, 5, 10, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {6, 7, 5, 10, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {8, 3, 1, 7, 5, 10, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {7, 0, 7, 5, 10, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {8, 2, 3, 1, 4, 10, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {5, 4, 10, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {7, 3, 1, 4, 10, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {6, 0, 4, 10, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {7, 2, 3, 1, 6, 7, 5, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {4, 6, 7, 5, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {6, 3, 1, 6, 7, 5, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {5, 0, 6, 7, 5, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {4, 2, 3, 1, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {1, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80}, + {3, 3, 1, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {2, 0, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {6, 2, 3, 1, 7, 5, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {3, 7, 5, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {5, 3, 1, 7, 5, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {4, 0, 7, 5, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {5, 2, 3, 1, 4, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {2, 4, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {4, 3, 1, 4, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {3, 0, 4, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {9, 2, 3, 1, 6, 7, 5, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, + {6, 6, 7, 5, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {8, 3, 1, 6, 7, 5, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {7, 0, 6, 7, 5, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {6, 2, 3, 1, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {3, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {5, 3, 1, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {4, 0, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {8, 2, 3, 1, 7, 5, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {5, 7, 5, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {7, 3, 1, 7, 5, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {6, 0, 7, 5, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {7, 2, 3, 1, 4, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {4, 4, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {6, 3, 1, 4, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {5, 0, 4, 11, 9, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {8, 2, 3, 1, 6, 7, 5, 8, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {5, 6, 7, 5, 8, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {7, 3, 1, 6, 7, 5, 8, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {6, 0, 6, 7, 5, 8, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {5, 2, 3, 1, 8, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {2, 8, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {4, 3, 1, 8, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {3, 0, 8, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {7, 2, 3, 1, 7, 5, 8, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {4, 7, 5, 8, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {6, 3, 1, 7, 5, 8, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {5, 0, 7, 5, 8, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {6, 2, 3, 1, 4, 8, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80}, + {3, 4, 8, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80}, + {5, 3, 1, 4, 8, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}, + {4, 0, 4, 8, 12, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80}}; + +} // namespace utf16_to_utf8 +} // namespace tables } // unnamed namespace } // namespace simdutf @@ -12371,49 +11223,58 @@ namespace ascii { #if SIMDUTF_IMPLEMENTATION_FALLBACK // Only used by the fallback kernel. inline simdutf_warn_unused bool validate(const char *buf, size_t len) noexcept { - const uint8_t *data = reinterpret_cast(buf); - uint64_t pos = 0; - // process in blocks of 16 bytes when possible - for (;pos + 16 <= len; pos += 16) { - uint64_t v1; - std::memcpy(&v1, data + pos, sizeof(uint64_t)); - uint64_t v2; - std::memcpy(&v2, data + pos + sizeof(uint64_t), sizeof(uint64_t)); - uint64_t v{v1 | v2}; - if ((v & 0x8080808080808080) != 0) { return false; } - } - // process the tail byte-by-byte - for (;pos < len; pos ++) { - if (data[pos] >= 0b10000000) { return false; } + const uint8_t *data = reinterpret_cast(buf); + uint64_t pos = 0; + // process in blocks of 16 bytes when possible + for (; pos + 16 <= len; pos += 16) { + uint64_t v1; + std::memcpy(&v1, data + pos, sizeof(uint64_t)); + uint64_t v2; + std::memcpy(&v2, data + pos + sizeof(uint64_t), sizeof(uint64_t)); + uint64_t v{v1 | v2}; + if ((v & 0x8080808080808080) != 0) { + return false; } - return true; + } + // process the tail byte-by-byte + for (; pos < len; pos++) { + if (data[pos] >= 0b10000000) { + return false; + } + } + return true; } #endif -inline simdutf_warn_unused result validate_with_errors(const char *buf, size_t len) noexcept { - const uint8_t *data = reinterpret_cast(buf); - size_t pos = 0; - // process in blocks of 16 bytes when possible - for (;pos + 16 <= len; pos += 16) { - uint64_t v1; - std::memcpy(&v1, data + pos, sizeof(uint64_t)); - uint64_t v2; - std::memcpy(&v2, data + pos + sizeof(uint64_t), sizeof(uint64_t)); - uint64_t v{v1 | v2}; - if ((v & 0x8080808080808080) != 0) { - for (;pos < len; pos ++) { - if (data[pos] >= 0b10000000) { return result(error_code::TOO_LARGE, pos); } - } +inline simdutf_warn_unused result validate_with_errors(const char *buf, + size_t len) noexcept { + const uint8_t *data = reinterpret_cast(buf); + size_t pos = 0; + // process in blocks of 16 bytes when possible + for (; pos + 16 <= len; pos += 16) { + uint64_t v1; + std::memcpy(&v1, data + pos, sizeof(uint64_t)); + uint64_t v2; + std::memcpy(&v2, data + pos + sizeof(uint64_t), sizeof(uint64_t)); + uint64_t v{v1 | v2}; + if ((v & 0x8080808080808080) != 0) { + for (; pos < len; pos++) { + if (data[pos] >= 0b10000000) { + return result(error_code::TOO_LARGE, pos); } + } } - // process the tail byte-by-byte - for (;pos < len; pos ++) { - if (data[pos] >= 0b10000000) { return result(error_code::TOO_LARGE, pos); } + } + // process the tail byte-by-byte + for (; pos < len; pos++) { + if (data[pos] >= 0b10000000) { + return result(error_code::TOO_LARGE, pos); } - return result(error_code::SUCCESS, pos); + } + return result(error_code::SUCCESS, pos); } -} // ascii namespace +} // namespace ascii } // unnamed namespace } // namespace scalar } // namespace simdutf @@ -12435,19 +11296,19 @@ inline size_t utf32_length_from_latin1(size_t len) { } inline size_t utf8_length_from_latin1(const char *buf, size_t len) { - const uint8_t * c = reinterpret_cast(buf); + const uint8_t *c = reinterpret_cast(buf); size_t answer = 0; - for(size_t i = 0; i>7)) { answer++; } + for (size_t i = 0; i < len; i++) { + if ((c[i] >> 7)) { + answer++; + } } return answer + len; } -inline size_t utf16_length_from_latin1(size_t len) { - return len; -} +inline size_t utf16_length_from_latin1(size_t len) { return len; } -} // utf32 namespace +} // namespace latin1 } // unnamed namespace } // namespace scalar } // namespace simdutf @@ -12466,55 +11327,57 @@ namespace utf32_to_utf8 { #if SIMDUTF_IMPLEMENTATION_FALLBACK || SIMDUTF_IMPLEMENTATION_PPC64 // only used by the fallback and POWER kernel -inline size_t convert_valid(const char32_t* buf, size_t len, char* utf8_output) { - const uint32_t *data = reinterpret_cast(buf); +inline size_t convert_valid(const char32_t *buf, size_t len, + char *utf8_output) { + const uint32_t *data = reinterpret_cast(buf); size_t pos = 0; - char* start{utf8_output}; + char *start{utf8_output}; while (pos < len) { // try to convert the next block of 2 ASCII characters - if (pos + 2 <= len) { // if it is safe to read 8 more bytes, check that they are ascii + if (pos + 2 <= + len) { // if it is safe to read 8 more bytes, check that they are ascii uint64_t v; ::memcpy(&v, data + pos, sizeof(uint64_t)); if ((v & 0xFFFFFF80FFFFFF80) == 0) { *utf8_output++ = char(buf[pos]); - *utf8_output++ = char(buf[pos+1]); + *utf8_output++ = char(buf[pos + 1]); pos += 2; continue; } } uint32_t word = data[pos]; - if((word & 0xFFFFFF80)==0) { + if ((word & 0xFFFFFF80) == 0) { // will generate one UTF-8 bytes *utf8_output++ = char(word); pos++; - } else if((word & 0xFFFFF800)==0) { + } else if ((word & 0xFFFFF800) == 0) { // will generate two UTF-8 bytes // we have 0b110XXXXX 0b10XXXXXX - *utf8_output++ = char((word>>6) | 0b11000000); + *utf8_output++ = char((word >> 6) | 0b11000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); pos++; - } else if((word & 0xFFFF0000)==0) { + } else if ((word & 0xFFFF0000) == 0) { // will generate three UTF-8 bytes // we have 0b1110XXXX 0b10XXXXXX 0b10XXXXXX - *utf8_output++ = char((word>>12) | 0b11100000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + *utf8_output++ = char((word >> 12) | 0b11100000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); pos++; } else { // will generate four UTF-8 bytes // we have 0b11110XXX 0b10XXXXXX 0b10XXXXXX 0b10XXXXXX - *utf8_output++ = char((word>>18) | 0b11110000); - *utf8_output++ = char(((word>>12) & 0b111111) | 0b10000000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + *utf8_output++ = char((word >> 18) | 0b11110000); + *utf8_output++ = char(((word >> 12) & 0b111111) | 0b10000000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); - pos ++; + pos++; } } return utf8_output - start; } #endif // SIMDUTF_IMPLEMENTATION_FALLBACK || SIMDUTF_IMPLEMENTATION_PPC64 -} // utf32_to_utf8 namespace +} // namespace utf32_to_utf8 } // unnamed namespace } // namespace scalar } // namespace simdutf @@ -12530,105 +11393,116 @@ namespace scalar { namespace { namespace utf32_to_utf8 { -inline size_t convert(const char32_t* buf, size_t len, char* utf8_output) { +inline size_t convert(const char32_t *buf, size_t len, char *utf8_output) { const uint32_t *data = reinterpret_cast(buf); size_t pos = 0; - char* start{utf8_output}; + char *start{utf8_output}; while (pos < len) { // try to convert the next block of 2 ASCII characters - if (pos + 2 <= len) { // if it is safe to read 8 more bytes, check that they are ascii + if (pos + 2 <= + len) { // if it is safe to read 8 more bytes, check that they are ascii uint64_t v; ::memcpy(&v, data + pos, sizeof(uint64_t)); if ((v & 0xFFFFFF80FFFFFF80) == 0) { *utf8_output++ = char(buf[pos]); - *utf8_output++ = char(buf[pos+1]); + *utf8_output++ = char(buf[pos + 1]); pos += 2; continue; } } uint32_t word = data[pos]; - if((word & 0xFFFFFF80)==0) { + if ((word & 0xFFFFFF80) == 0) { // will generate one UTF-8 bytes *utf8_output++ = char(word); pos++; - } else if((word & 0xFFFFF800)==0) { + } else if ((word & 0xFFFFF800) == 0) { // will generate two UTF-8 bytes // we have 0b110XXXXX 0b10XXXXXX - *utf8_output++ = char((word>>6) | 0b11000000); + *utf8_output++ = char((word >> 6) | 0b11000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); pos++; - } else if((word & 0xFFFF0000)==0) { + } else if ((word & 0xFFFF0000) == 0) { // will generate three UTF-8 bytes // we have 0b1110XXXX 0b10XXXXXX 0b10XXXXXX - if (word >= 0xD800 && word <= 0xDFFF) { return 0; } - *utf8_output++ = char((word>>12) | 0b11100000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + if (word >= 0xD800 && word <= 0xDFFF) { + return 0; + } + *utf8_output++ = char((word >> 12) | 0b11100000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); pos++; } else { // will generate four UTF-8 bytes // we have 0b11110XXX 0b10XXXXXX 0b10XXXXXX 0b10XXXXXX - if (word > 0x10FFFF) { return 0; } - *utf8_output++ = char((word>>18) | 0b11110000); - *utf8_output++ = char(((word>>12) & 0b111111) | 0b10000000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + if (word > 0x10FFFF) { + return 0; + } + *utf8_output++ = char((word >> 18) | 0b11110000); + *utf8_output++ = char(((word >> 12) & 0b111111) | 0b10000000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); - pos ++; + pos++; } } return utf8_output - start; } -inline result convert_with_errors(const char32_t* buf, size_t len, char* utf8_output) { +inline result convert_with_errors(const char32_t *buf, size_t len, + char *utf8_output) { const uint32_t *data = reinterpret_cast(buf); size_t pos = 0; - char* start{utf8_output}; + char *start{utf8_output}; while (pos < len) { // try to convert the next block of 2 ASCII characters - if (pos + 2 <= len) { // if it is safe to read 8 more bytes, check that they are ascii + if (pos + 2 <= + len) { // if it is safe to read 8 more bytes, check that they are ascii uint64_t v; ::memcpy(&v, data + pos, sizeof(uint64_t)); if ((v & 0xFFFFFF80FFFFFF80) == 0) { *utf8_output++ = char(buf[pos]); - *utf8_output++ = char(buf[pos+1]); + *utf8_output++ = char(buf[pos + 1]); pos += 2; continue; } } uint32_t word = data[pos]; - if((word & 0xFFFFFF80)==0) { + if ((word & 0xFFFFFF80) == 0) { // will generate one UTF-8 bytes *utf8_output++ = char(word); pos++; - } else if((word & 0xFFFFF800)==0) { + } else if ((word & 0xFFFFF800) == 0) { // will generate two UTF-8 bytes // we have 0b110XXXXX 0b10XXXXXX - *utf8_output++ = char((word>>6) | 0b11000000); + *utf8_output++ = char((word >> 6) | 0b11000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); pos++; - } else if((word & 0xFFFF0000)==0) { + } else if ((word & 0xFFFF0000) == 0) { // will generate three UTF-8 bytes // we have 0b1110XXXX 0b10XXXXXX 0b10XXXXXX - if (word >= 0xD800 && word <= 0xDFFF) { return result(error_code::SURROGATE, pos); } - *utf8_output++ = char((word>>12) | 0b11100000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + if (word >= 0xD800 && word <= 0xDFFF) { + return result(error_code::SURROGATE, pos); + } + *utf8_output++ = char((word >> 12) | 0b11100000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); pos++; } else { // will generate four UTF-8 bytes // we have 0b11110XXX 0b10XXXXXX 0b10XXXXXX 0b10XXXXXX - if (word > 0x10FFFF) { return result(error_code::TOO_LARGE, pos); } - *utf8_output++ = char((word>>18) | 0b11110000); - *utf8_output++ = char(((word>>12) & 0b111111) | 0b10000000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + if (word > 0x10FFFF) { + return result(error_code::TOO_LARGE, pos); + } + *utf8_output++ = char((word >> 18) | 0b11110000); + *utf8_output++ = char(((word >> 12) & 0b111111) | 0b10000000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); - pos ++; + pos++; } } return result(error_code::SUCCESS, utf8_output - start); } -} // utf32_to_utf8 namespace +} // namespace utf32_to_utf8 } // unnamed namespace } // namespace scalar } // namespace simdutf @@ -12646,15 +11520,18 @@ namespace { namespace utf32_to_utf16 { template -inline size_t convert_valid(const char32_t* buf, size_t len, char16_t* utf16_output) { +inline size_t convert_valid(const char32_t *buf, size_t len, + char16_t *utf16_output) { const uint32_t *data = reinterpret_cast(buf); size_t pos = 0; - char16_t* start{utf16_output}; + char16_t *start{utf16_output}; while (pos < len) { uint32_t word = data[pos]; - if((word & 0xFFFF0000)==0) { + if ((word & 0xFFFF0000) == 0) { // will not generate a surrogate pair - *utf16_output++ = !match_system(big_endian) ? char16_t(utf16::swap_bytes(uint16_t(word))) : char16_t(word); + *utf16_output++ = !match_system(big_endian) + ? char16_t(utf16::swap_bytes(uint16_t(word))) + : char16_t(word); pos++; } else { // will generate a surrogate pair @@ -12673,7 +11550,7 @@ inline size_t convert_valid(const char32_t* buf, size_t len, char16_t* utf16_out return utf16_output - start; } -} // utf32_to_utf16 namespace +} // namespace utf32_to_utf16 } // unnamed namespace } // namespace scalar } // namespace simdutf @@ -12690,19 +11567,25 @@ namespace { namespace utf32_to_utf16 { template -inline size_t convert(const char32_t* buf, size_t len, char16_t* utf16_output) { +inline size_t convert(const char32_t *buf, size_t len, char16_t *utf16_output) { const uint32_t *data = reinterpret_cast(buf); size_t pos = 0; - char16_t* start{utf16_output}; + char16_t *start{utf16_output}; while (pos < len) { uint32_t word = data[pos]; - if((word & 0xFFFF0000)==0) { - if (word >= 0xD800 && word <= 0xDFFF) { return 0; } + if ((word & 0xFFFF0000) == 0) { + if (word >= 0xD800 && word <= 0xDFFF) { + return 0; + } // will not generate a surrogate pair - *utf16_output++ = !match_system(big_endian) ? char16_t(utf16::swap_bytes(uint16_t(word))) : char16_t(word); + *utf16_output++ = !match_system(big_endian) + ? char16_t(utf16::swap_bytes(uint16_t(word))) + : char16_t(word); } else { // will generate a surrogate pair - if (word > 0x10FFFF) { return 0; } + if (word > 0x10FFFF) { + return 0; + } word -= 0x10000; uint16_t high_surrogate = uint16_t(0xD800 + (word >> 10)); uint16_t low_surrogate = uint16_t(0xDC00 + (word & 0x3FF)); @@ -12719,19 +11602,26 @@ inline size_t convert(const char32_t* buf, size_t len, char16_t* utf16_output) { } template -inline result convert_with_errors(const char32_t* buf, size_t len, char16_t* utf16_output) { +inline result convert_with_errors(const char32_t *buf, size_t len, + char16_t *utf16_output) { const uint32_t *data = reinterpret_cast(buf); size_t pos = 0; - char16_t* start{utf16_output}; + char16_t *start{utf16_output}; while (pos < len) { uint32_t word = data[pos]; - if((word & 0xFFFF0000)==0) { - if (word >= 0xD800 && word <= 0xDFFF) { return result(error_code::SURROGATE, pos); } + if ((word & 0xFFFF0000) == 0) { + if (word >= 0xD800 && word <= 0xDFFF) { + return result(error_code::SURROGATE, pos); + } // will not generate a surrogate pair - *utf16_output++ = !match_system(big_endian) ? char16_t(utf16::swap_bytes(uint16_t(word))) : char16_t(word); + *utf16_output++ = !match_system(big_endian) + ? char16_t(utf16::swap_bytes(uint16_t(word))) + : char16_t(word); } else { // will generate a surrogate pair - if (word > 0x10FFFF) { return result(error_code::TOO_LARGE, pos); } + if (word > 0x10FFFF) { + return result(error_code::TOO_LARGE, pos); + } word -= 0x10000; uint16_t high_surrogate = uint16_t(0xD800 + (word >> 10)); uint16_t low_surrogate = uint16_t(0xDC00 + (word & 0x3FF)); @@ -12747,7 +11637,7 @@ inline result convert_with_errors(const char32_t* buf, size_t len, char16_t* utf return result(error_code::SUCCESS, utf16_output - start); } -} // utf32_to_utf16 namespace +} // namespace utf32_to_utf16 } // unnamed namespace } // namespace scalar } // namespace simdutf @@ -12765,56 +11655,67 @@ namespace { namespace utf16_to_utf8 { template -inline size_t convert_valid(const char16_t* buf, size_t len, char* utf8_output) { - const uint16_t *data = reinterpret_cast(buf); +inline size_t convert_valid(const char16_t *buf, size_t len, + char *utf8_output) { + const uint16_t *data = reinterpret_cast(buf); size_t pos = 0; - char* start{utf8_output}; + char *start{utf8_output}; while (pos < len) { // try to convert the next block of 4 ASCII characters - if (pos + 4 <= len) { // if it is safe to read 8 more bytes, check that they are ascii + if (pos + 4 <= + len) { // if it is safe to read 8 more bytes, check that they are ascii uint64_t v; ::memcpy(&v, data + pos, sizeof(uint64_t)); - if (!match_system(big_endian)) { v = (v >> 8) | (v << (64 - 8)); } + if (!match_system(big_endian)) { + v = (v >> 8) | (v << (64 - 8)); + } if ((v & 0xFF80FF80FF80FF80) == 0) { size_t final_pos = pos + 4; - while(pos < final_pos) { - *utf8_output++ = !match_system(big_endian) ? char(utf16::swap_bytes(buf[pos])) : char(buf[pos]); + while (pos < final_pos) { + *utf8_output++ = !match_system(big_endian) + ? char(utf16::swap_bytes(buf[pos])) + : char(buf[pos]); pos++; } continue; } } - uint16_t word = !match_system(big_endian) ? utf16::swap_bytes(data[pos]) : data[pos]; - if((word & 0xFF80)==0) { + uint16_t word = + !match_system(big_endian) ? utf16::swap_bytes(data[pos]) : data[pos]; + if ((word & 0xFF80) == 0) { // will generate one UTF-8 bytes *utf8_output++ = char(word); pos++; - } else if((word & 0xF800)==0) { + } else if ((word & 0xF800) == 0) { // will generate two UTF-8 bytes // we have 0b110XXXXX 0b10XXXXXX - *utf8_output++ = char((word>>6) | 0b11000000); + *utf8_output++ = char((word >> 6) | 0b11000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); pos++; - } else if((word &0xF800 ) != 0xD800) { + } else if ((word & 0xF800) != 0xD800) { // will generate three UTF-8 bytes // we have 0b1110XXXX 0b10XXXXXX 0b10XXXXXX - *utf8_output++ = char((word>>12) | 0b11100000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + *utf8_output++ = char((word >> 12) | 0b11100000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); pos++; } else { // must be a surrogate pair uint16_t diff = uint16_t(word - 0xD800); - if(pos + 1 >= len) { return 0; } // minimal bound checking - uint16_t next_word = !match_system(big_endian) ? utf16::swap_bytes(data[pos + 1]) : data[pos + 1]; + if (pos + 1 >= len) { + return 0; + } // minimal bound checking + uint16_t next_word = !match_system(big_endian) + ? utf16::swap_bytes(data[pos + 1]) + : data[pos + 1]; uint16_t diff2 = uint16_t(next_word - 0xDC00); uint32_t value = (diff << 10) + diff2 + 0x10000; // will generate four UTF-8 bytes // we have 0b11110XXX 0b10XXXXXX 0b10XXXXXX 0b10XXXXXX - *utf8_output++ = char((value>>18) | 0b11110000); - *utf8_output++ = char(((value>>12) & 0b111111) | 0b10000000); - *utf8_output++ = char(((value>>6) & 0b111111) | 0b10000000); + *utf8_output++ = char((value >> 18) | 0b11110000); + *utf8_output++ = char(((value >> 12) & 0b111111) | 0b10000000); + *utf8_output++ = char(((value >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((value & 0b111111) | 0b10000000); pos += 2; } @@ -12822,7 +11723,7 @@ inline size_t convert_valid(const char16_t* buf, size_t len, char* utf8_output) return utf8_output - start; } -} // utf16_to_utf8 namespace +} // namespace utf16_to_utf8 } // unnamed namespace } // namespace scalar } // namespace simdutf @@ -12839,57 +11740,71 @@ namespace { namespace utf16_to_utf8 { template -inline size_t convert(const char16_t* buf, size_t len, char* utf8_output) { - const uint16_t *data = reinterpret_cast(buf); +inline size_t convert(const char16_t *buf, size_t len, char *utf8_output) { + const uint16_t *data = reinterpret_cast(buf); size_t pos = 0; - char* start{utf8_output}; + char *start{utf8_output}; while (pos < len) { // try to convert the next block of 8 bytes - if (pos + 4 <= len) { // if it is safe to read 8 more bytes, check that they are ascii + if (pos + 4 <= + len) { // if it is safe to read 8 more bytes, check that they are ascii uint64_t v; ::memcpy(&v, data + pos, sizeof(uint64_t)); - if (!match_system(big_endian)) { v = (v >> 8) | (v << (64 - 8)); } + if (!match_system(big_endian)) { + v = (v >> 8) | (v << (64 - 8)); + } if ((v & 0xFF80FF80FF80FF80) == 0) { size_t final_pos = pos + 4; - while(pos < final_pos) { - *utf8_output++ = !match_system(big_endian) ? char(utf16::swap_bytes(buf[pos])) : char(buf[pos]); + while (pos < final_pos) { + *utf8_output++ = !match_system(big_endian) + ? char(utf16::swap_bytes(buf[pos])) + : char(buf[pos]); pos++; } continue; } } - uint16_t word = !match_system(big_endian) ? utf16::swap_bytes(data[pos]) : data[pos]; - if((word & 0xFF80)==0) { + uint16_t word = + !match_system(big_endian) ? utf16::swap_bytes(data[pos]) : data[pos]; + if ((word & 0xFF80) == 0) { // will generate one UTF-8 bytes *utf8_output++ = char(word); pos++; - } else if((word & 0xF800)==0) { + } else if ((word & 0xF800) == 0) { // will generate two UTF-8 bytes // we have 0b110XXXXX 0b10XXXXXX - *utf8_output++ = char((word>>6) | 0b11000000); + *utf8_output++ = char((word >> 6) | 0b11000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); pos++; - } else if((word &0xF800 ) != 0xD800) { + } else if ((word & 0xF800) != 0xD800) { // will generate three UTF-8 bytes // we have 0b1110XXXX 0b10XXXXXX 0b10XXXXXX - *utf8_output++ = char((word>>12) | 0b11100000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + *utf8_output++ = char((word >> 12) | 0b11100000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); pos++; } else { // must be a surrogate pair - if(pos + 1 >= len) { return 0; } + if (pos + 1 >= len) { + return 0; + } uint16_t diff = uint16_t(word - 0xD800); - if(diff > 0x3FF) { return 0; } - uint16_t next_word = !match_system(big_endian) ? utf16::swap_bytes(data[pos + 1]) : data[pos + 1]; + if (diff > 0x3FF) { + return 0; + } + uint16_t next_word = !match_system(big_endian) + ? utf16::swap_bytes(data[pos + 1]) + : data[pos + 1]; uint16_t diff2 = uint16_t(next_word - 0xDC00); - if(diff2 > 0x3FF) { return 0; } + if (diff2 > 0x3FF) { + return 0; + } uint32_t value = (diff << 10) + diff2 + 0x10000; // will generate four UTF-8 bytes // we have 0b11110XXX 0b10XXXXXX 0b10XXXXXX 0b10XXXXXX - *utf8_output++ = char((value>>18) | 0b11110000); - *utf8_output++ = char(((value>>12) & 0b111111) | 0b10000000); - *utf8_output++ = char(((value>>6) & 0b111111) | 0b10000000); + *utf8_output++ = char((value >> 18) | 0b11110000); + *utf8_output++ = char(((value >> 12) & 0b111111) | 0b10000000); + *utf8_output++ = char(((value >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((value & 0b111111) | 0b10000000); pos += 2; } @@ -12898,57 +11813,71 @@ inline size_t convert(const char16_t* buf, size_t len, char* utf8_output) { } template -inline result convert_with_errors(const char16_t* buf, size_t len, char* utf8_output) { - const uint16_t *data = reinterpret_cast(buf); +inline result convert_with_errors(const char16_t *buf, size_t len, + char *utf8_output) { + const uint16_t *data = reinterpret_cast(buf); size_t pos = 0; - char* start{utf8_output}; + char *start{utf8_output}; while (pos < len) { // try to convert the next block of 8 bytes - if (pos + 4 <= len) { // if it is safe to read 8 more bytes, check that they are ascii + if (pos + 4 <= + len) { // if it is safe to read 8 more bytes, check that they are ascii uint64_t v; ::memcpy(&v, data + pos, sizeof(uint64_t)); - if (!match_system(big_endian)) v = (v >> 8) | (v << (64 - 8)); + if (!match_system(big_endian)) + v = (v >> 8) | (v << (64 - 8)); if ((v & 0xFF80FF80FF80FF80) == 0) { size_t final_pos = pos + 4; - while(pos < final_pos) { - *utf8_output++ = !match_system(big_endian) ? char(utf16::swap_bytes(buf[pos])) : char(buf[pos]); + while (pos < final_pos) { + *utf8_output++ = !match_system(big_endian) + ? char(utf16::swap_bytes(buf[pos])) + : char(buf[pos]); pos++; } continue; } } - uint16_t word = !match_system(big_endian) ? utf16::swap_bytes(data[pos]) : data[pos]; - if((word & 0xFF80)==0) { + uint16_t word = + !match_system(big_endian) ? utf16::swap_bytes(data[pos]) : data[pos]; + if ((word & 0xFF80) == 0) { // will generate one UTF-8 bytes *utf8_output++ = char(word); pos++; - } else if((word & 0xF800)==0) { + } else if ((word & 0xF800) == 0) { // will generate two UTF-8 bytes // we have 0b110XXXXX 0b10XXXXXX - *utf8_output++ = char((word>>6) | 0b11000000); + *utf8_output++ = char((word >> 6) | 0b11000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); pos++; - } else if((word &0xF800 ) != 0xD800) { + } else if ((word & 0xF800) != 0xD800) { // will generate three UTF-8 bytes // we have 0b1110XXXX 0b10XXXXXX 0b10XXXXXX - *utf8_output++ = char((word>>12) | 0b11100000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + *utf8_output++ = char((word >> 12) | 0b11100000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); pos++; } else { // must be a surrogate pair - if(pos + 1 >= len) { return result(error_code::SURROGATE, pos); } + if (pos + 1 >= len) { + return result(error_code::SURROGATE, pos); + } uint16_t diff = uint16_t(word - 0xD800); - if(diff > 0x3FF) { return result(error_code::SURROGATE, pos); } - uint16_t next_word = !match_system(big_endian) ? utf16::swap_bytes(data[pos + 1]) : data[pos + 1]; + if (diff > 0x3FF) { + return result(error_code::SURROGATE, pos); + } + uint16_t next_word = !match_system(big_endian) + ? utf16::swap_bytes(data[pos + 1]) + : data[pos + 1]; uint16_t diff2 = uint16_t(next_word - 0xDC00); - if(diff2 > 0x3FF) { return result(error_code::SURROGATE, pos); } + if (diff2 > 0x3FF) { + return result(error_code::SURROGATE, pos); + } uint32_t value = (diff << 10) + diff2 + 0x10000; // will generate four UTF-8 bytes // we have 0b11110XXX 0b10XXXXXX 0b10XXXXXX 0b10XXXXXX - *utf8_output++ = char((value>>18) | 0b11110000); - *utf8_output++ = char(((value>>12) & 0b111111) | 0b10000000); - *utf8_output++ = char(((value>>6) & 0b111111) | 0b10000000); + *utf8_output++ = char((value >> 18) | 0b11110000); + *utf8_output++ = char(((value >> 12) & 0b111111) | 0b10000000); + *utf8_output++ = char(((value >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((value & 0b111111) | 0b10000000); pos += 2; } @@ -12956,7 +11885,7 @@ inline result convert_with_errors(const char16_t* buf, size_t len, char* utf8_ou return result(error_code::SUCCESS, utf8_output - start); } -} // utf16_to_utf8 namespace +} // namespace utf16_to_utf8 } // unnamed namespace } // namespace scalar } // namespace simdutf @@ -12974,21 +11903,27 @@ namespace { namespace utf16_to_utf32 { template -inline size_t convert_valid(const char16_t* buf, size_t len, char32_t* utf32_output) { - const uint16_t *data = reinterpret_cast(buf); +inline size_t convert_valid(const char16_t *buf, size_t len, + char32_t *utf32_output) { + const uint16_t *data = reinterpret_cast(buf); size_t pos = 0; - char32_t* start{utf32_output}; + char32_t *start{utf32_output}; while (pos < len) { - uint16_t word = !match_system(big_endian) ? utf16::swap_bytes(data[pos]) : data[pos]; - if((word &0xF800 ) != 0xD800) { + uint16_t word = + !match_system(big_endian) ? utf16::swap_bytes(data[pos]) : data[pos]; + if ((word & 0xF800) != 0xD800) { // No surrogate pair, extend 16-bit word to 32-bit word *utf32_output++ = char32_t(word); pos++; } else { // must be a surrogate pair uint16_t diff = uint16_t(word - 0xD800); - if(pos + 1 >= len) { return 0; } // minimal bound checking - uint16_t next_word = !match_system(big_endian) ? utf16::swap_bytes(data[pos + 1]) : data[pos + 1]; + if (pos + 1 >= len) { + return 0; + } // minimal bound checking + uint16_t next_word = !match_system(big_endian) + ? utf16::swap_bytes(data[pos + 1]) + : data[pos + 1]; uint16_t diff2 = uint16_t(next_word - 0xDC00); uint32_t value = (diff << 10) + diff2 + 0x10000; *utf32_output++ = char32_t(value); @@ -12998,7 +11933,7 @@ inline size_t convert_valid(const char16_t* buf, size_t len, char32_t* utf32_out return utf32_output - start; } -} // utf16_to_utf32 namespace +} // namespace utf16_to_utf32 } // unnamed namespace } // namespace scalar } // namespace simdutf @@ -13015,24 +11950,33 @@ namespace { namespace utf16_to_utf32 { template -inline size_t convert(const char16_t* buf, size_t len, char32_t* utf32_output) { - const uint16_t *data = reinterpret_cast(buf); +inline size_t convert(const char16_t *buf, size_t len, char32_t *utf32_output) { + const uint16_t *data = reinterpret_cast(buf); size_t pos = 0; - char32_t* start{utf32_output}; + char32_t *start{utf32_output}; while (pos < len) { - uint16_t word = !match_system(big_endian) ? utf16::swap_bytes(data[pos]) : data[pos]; - if((word &0xF800 ) != 0xD800) { + uint16_t word = + !match_system(big_endian) ? utf16::swap_bytes(data[pos]) : data[pos]; + if ((word & 0xF800) != 0xD800) { // No surrogate pair, extend 16-bit word to 32-bit word *utf32_output++ = char32_t(word); pos++; } else { // must be a surrogate pair uint16_t diff = uint16_t(word - 0xD800); - if(diff > 0x3FF) { return 0; } - if(pos + 1 >= len) { return 0; } // minimal bound checking - uint16_t next_word = !match_system(big_endian) ? utf16::swap_bytes(data[pos + 1]) : data[pos + 1]; + if (diff > 0x3FF) { + return 0; + } + if (pos + 1 >= len) { + return 0; + } // minimal bound checking + uint16_t next_word = !match_system(big_endian) + ? utf16::swap_bytes(data[pos + 1]) + : data[pos + 1]; uint16_t diff2 = uint16_t(next_word - 0xDC00); - if(diff2 > 0x3FF) { return 0; } + if (diff2 > 0x3FF) { + return 0; + } uint32_t value = (diff << 10) + diff2 + 0x10000; *utf32_output++ = char32_t(value); pos += 2; @@ -13042,24 +11986,34 @@ inline size_t convert(const char16_t* buf, size_t len, char32_t* utf32_output) { } template -inline result convert_with_errors(const char16_t* buf, size_t len, char32_t* utf32_output) { - const uint16_t *data = reinterpret_cast(buf); +inline result convert_with_errors(const char16_t *buf, size_t len, + char32_t *utf32_output) { + const uint16_t *data = reinterpret_cast(buf); size_t pos = 0; - char32_t* start{utf32_output}; + char32_t *start{utf32_output}; while (pos < len) { - uint16_t word = !match_system(big_endian) ? utf16::swap_bytes(data[pos]) : data[pos]; - if((word &0xF800 ) != 0xD800) { + uint16_t word = + !match_system(big_endian) ? utf16::swap_bytes(data[pos]) : data[pos]; + if ((word & 0xF800) != 0xD800) { // No surrogate pair, extend 16-bit word to 32-bit word *utf32_output++ = char32_t(word); pos++; } else { // must be a surrogate pair uint16_t diff = uint16_t(word - 0xD800); - if(diff > 0x3FF) { return result(error_code::SURROGATE, pos); } - if(pos + 1 >= len) { return result(error_code::SURROGATE, pos); } // minimal bound checking - uint16_t next_word = !match_system(big_endian) ? utf16::swap_bytes(data[pos + 1]) : data[pos + 1]; + if (diff > 0x3FF) { + return result(error_code::SURROGATE, pos); + } + if (pos + 1 >= len) { + return result(error_code::SURROGATE, pos); + } // minimal bound checking + uint16_t next_word = !match_system(big_endian) + ? utf16::swap_bytes(data[pos + 1]) + : data[pos + 1]; uint16_t diff2 = uint16_t(next_word - 0xDC00); - if(diff2 > 0x3FF) { return result(error_code::SURROGATE, pos); } + if (diff2 > 0x3FF) { + return result(error_code::SURROGATE, pos); + } uint32_t value = (diff << 10) + diff2 + 0x10000; *utf32_output++ = char32_t(value); pos += 2; @@ -13068,7 +12022,7 @@ inline result convert_with_errors(const char16_t* buf, size_t len, char32_t* utf return result(error_code::SUCCESS, utf32_output - start); } -} // utf16_to_utf32 namespace +} // namespace utf16_to_utf32 } // unnamed namespace } // namespace scalar } // namespace simdutf @@ -13086,19 +12040,23 @@ namespace { namespace utf8_to_utf16 { template -inline size_t convert_valid(const char* buf, size_t len, char16_t* utf16_output) { - const uint8_t *data = reinterpret_cast(buf); +inline size_t convert_valid(const char *buf, size_t len, + char16_t *utf16_output) { + const uint8_t *data = reinterpret_cast(buf); size_t pos = 0; - char16_t* start{utf16_output}; + char16_t *start{utf16_output}; while (pos < len) { // try to convert the next block of 8 ASCII bytes - if (pos + 8 <= len) { // if it is safe to read 8 more bytes, check that they are ascii + if (pos + 8 <= + len) { // if it is safe to read 8 more bytes, check that they are ascii uint64_t v; ::memcpy(&v, data + pos, sizeof(uint64_t)); if ((v & 0x8080808080808080) == 0) { size_t final_pos = pos + 8; - while(pos < final_pos) { - *utf16_output++ = !match_system(big_endian) ? char16_t(utf16::swap_bytes(buf[pos])) : char16_t(buf[pos]); + while (pos < final_pos) { + *utf16_output++ = !match_system(big_endian) + ? char16_t(utf16::swap_bytes(buf[pos])) + : char16_t(buf[pos]); pos++; } continue; @@ -13107,13 +12065,18 @@ inline size_t convert_valid(const char* buf, size_t len, char16_t* utf16_output) uint8_t leading_byte = data[pos]; // leading byte if (leading_byte < 0b10000000) { // converting one ASCII byte !!! - *utf16_output++ = !match_system(big_endian) ? char16_t(utf16::swap_bytes(leading_byte)) : char16_t(leading_byte); + *utf16_output++ = !match_system(big_endian) + ? char16_t(utf16::swap_bytes(leading_byte)) + : char16_t(leading_byte); pos++; } else if ((leading_byte & 0b11100000) == 0b11000000) { // We have a two-byte UTF-8, it should become // a single UTF-16 word. - if(pos + 1 >= len) { break; } // minimal bound checking - uint16_t code_point = uint16_t(((leading_byte &0b00011111) << 6) | (data[pos + 1] &0b00111111)); + if (pos + 1 >= len) { + break; + } // minimal bound checking + uint16_t code_point = uint16_t(((leading_byte & 0b00011111) << 6) | + (data[pos + 1] & 0b00111111)); if (!match_system(big_endian)) { code_point = utf16::swap_bytes(uint16_t(code_point)); } @@ -13122,8 +12085,12 @@ inline size_t convert_valid(const char* buf, size_t len, char16_t* utf16_output) } else if ((leading_byte & 0b11110000) == 0b11100000) { // We have a three-byte UTF-8, it should become // a single UTF-16 word. - if(pos + 2 >= len) { break; } // minimal bound checking - uint16_t code_point = uint16_t(((leading_byte &0b00001111) << 12) | ((data[pos + 1] &0b00111111) << 6) | (data[pos + 2] &0b00111111)); + if (pos + 2 >= len) { + break; + } // minimal bound checking + uint16_t code_point = uint16_t(((leading_byte & 0b00001111) << 12) | + ((data[pos + 1] & 0b00111111) << 6) | + (data[pos + 2] & 0b00111111)); if (!match_system(big_endian)) { code_point = utf16::swap_bytes(uint16_t(code_point)); } @@ -13131,9 +12098,13 @@ inline size_t convert_valid(const char* buf, size_t len, char16_t* utf16_output) pos += 3; } else if ((leading_byte & 0b11111000) == 0b11110000) { // 0b11110000 // we have a 4-byte UTF-8 word. - if(pos + 3 >= len) { break; } // minimal bound checking - uint32_t code_point = ((leading_byte & 0b00000111) << 18 )| ((data[pos + 1] &0b00111111) << 12) - | ((data[pos + 2] &0b00111111) << 6) | (data[pos + 3] &0b00111111); + if (pos + 3 >= len) { + break; + } // minimal bound checking + uint32_t code_point = ((leading_byte & 0b00000111) << 18) | + ((data[pos + 1] & 0b00111111) << 12) | + ((data[pos + 2] & 0b00111111) << 6) | + (data[pos + 3] & 0b00111111); code_point -= 0x10000; uint16_t high_surrogate = uint16_t(0xD800 + (code_point >> 10)); uint16_t low_surrogate = uint16_t(0xDC00 + (code_point & 0x3FF)); @@ -13152,7 +12123,6 @@ inline size_t convert_valid(const char* buf, size_t len, char16_t* utf16_output) return utf16_output - start; } - } // namespace utf8_to_utf16 } // unnamed namespace } // namespace scalar @@ -13170,13 +12140,14 @@ namespace { namespace utf8_to_utf16 { template -inline size_t convert(const char* buf, size_t len, char16_t* utf16_output) { - const uint8_t *data = reinterpret_cast(buf); +inline size_t convert(const char *buf, size_t len, char16_t *utf16_output) { + const uint8_t *data = reinterpret_cast(buf); size_t pos = 0; - char16_t* start{utf16_output}; + char16_t *start{utf16_output}; while (pos < len) { // try to convert the next block of 16 ASCII bytes - if (pos + 16 <= len) { // if it is safe to read 16 more bytes, check that they are ascii + if (pos + 16 <= + len) { // if it is safe to read 16 more bytes, check that they are ascii uint64_t v1; ::memcpy(&v1, data + pos, sizeof(uint64_t)); uint64_t v2; @@ -13184,8 +12155,10 @@ inline size_t convert(const char* buf, size_t len, char16_t* utf16_output) { uint64_t v{v1 | v2}; if ((v & 0x8080808080808080) == 0) { size_t final_pos = pos + 16; - while(pos < final_pos) { - *utf16_output++ = !match_system(big_endian) ? char16_t(utf16::swap_bytes(buf[pos])) : char16_t(buf[pos]); + while (pos < final_pos) { + *utf16_output++ = !match_system(big_endian) + ? char16_t(utf16::swap_bytes(buf[pos])) + : char16_t(buf[pos]); pos++; } continue; @@ -13195,16 +12168,25 @@ inline size_t convert(const char* buf, size_t len, char16_t* utf16_output) { uint8_t leading_byte = data[pos]; // leading byte if (leading_byte < 0b10000000) { // converting one ASCII byte !!! - *utf16_output++ = !match_system(big_endian) ? char16_t(utf16::swap_bytes(leading_byte)): char16_t(leading_byte); + *utf16_output++ = !match_system(big_endian) + ? char16_t(utf16::swap_bytes(leading_byte)) + : char16_t(leading_byte); pos++; } else if ((leading_byte & 0b11100000) == 0b11000000) { // We have a two-byte UTF-8, it should become // a single UTF-16 word. - if(pos + 1 >= len) { return 0; } // minimal bound checking - if ((data[pos + 1] & 0b11000000) != 0b10000000) { return 0; } + if (pos + 1 >= len) { + return 0; + } // minimal bound checking + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return 0; + } // range check - uint32_t code_point = (leading_byte & 0b00011111) << 6 | (data[pos + 1] & 0b00111111); - if (code_point < 0x80 || 0x7ff < code_point) { return 0; } + uint32_t code_point = + (leading_byte & 0b00011111) << 6 | (data[pos + 1] & 0b00111111); + if (code_point < 0x80 || 0x7ff < code_point) { + return 0; + } if (!match_system(big_endian)) { code_point = uint32_t(utf16::swap_bytes(uint16_t(code_point))); } @@ -13213,14 +12195,20 @@ inline size_t convert(const char* buf, size_t len, char16_t* utf16_output) { } else if ((leading_byte & 0b11110000) == 0b11100000) { // We have a three-byte UTF-8, it should become // a single UTF-16 word. - if(pos + 2 >= len) { return 0; } // minimal bound checking + if (pos + 2 >= len) { + return 0; + } // minimal bound checking - if ((data[pos + 1] & 0b11000000) != 0b10000000) { return 0; } - if ((data[pos + 2] & 0b11000000) != 0b10000000) { return 0; } + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return 0; + } + if ((data[pos + 2] & 0b11000000) != 0b10000000) { + return 0; + } // range check uint32_t code_point = (leading_byte & 0b00001111) << 12 | - (data[pos + 1] & 0b00111111) << 6 | - (data[pos + 2] & 0b00111111); + (data[pos + 1] & 0b00111111) << 6 | + (data[pos + 2] & 0b00111111); if (code_point < 0x800 || 0xffff < code_point || (0xd7ff < code_point && code_point < 0xe000)) { return 0; @@ -13232,16 +12220,27 @@ inline size_t convert(const char* buf, size_t len, char16_t* utf16_output) { pos += 3; } else if ((leading_byte & 0b11111000) == 0b11110000) { // 0b11110000 // we have a 4-byte UTF-8 word. - if(pos + 3 >= len) { return 0; } // minimal bound checking - if ((data[pos + 1] & 0b11000000) != 0b10000000) { return 0; } - if ((data[pos + 2] & 0b11000000) != 0b10000000) { return 0; } - if ((data[pos + 3] & 0b11000000) != 0b10000000) { return 0; } + if (pos + 3 >= len) { + return 0; + } // minimal bound checking + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return 0; + } + if ((data[pos + 2] & 0b11000000) != 0b10000000) { + return 0; + } + if ((data[pos + 3] & 0b11000000) != 0b10000000) { + return 0; + } // range check - uint32_t code_point = - (leading_byte & 0b00000111) << 18 | (data[pos + 1] & 0b00111111) << 12 | - (data[pos + 2] & 0b00111111) << 6 | (data[pos + 3] & 0b00111111); - if (code_point <= 0xffff || 0x10ffff < code_point) { return 0; } + uint32_t code_point = (leading_byte & 0b00000111) << 18 | + (data[pos + 1] & 0b00111111) << 12 | + (data[pos + 2] & 0b00111111) << 6 | + (data[pos + 3] & 0b00111111); + if (code_point <= 0xffff || 0x10ffff < code_point) { + return 0; + } code_point -= 0x10000; uint16_t high_surrogate = uint16_t(0xD800 + (code_point >> 10)); uint16_t low_surrogate = uint16_t(0xDC00 + (code_point & 0x3FF)); @@ -13260,13 +12259,15 @@ inline size_t convert(const char* buf, size_t len, char16_t* utf16_output) { } template -inline result convert_with_errors(const char* buf, size_t len, char16_t* utf16_output) { - const uint8_t *data = reinterpret_cast(buf); +inline result convert_with_errors(const char *buf, size_t len, + char16_t *utf16_output) { + const uint8_t *data = reinterpret_cast(buf); size_t pos = 0; - char16_t* start{utf16_output}; + char16_t *start{utf16_output}; while (pos < len) { // try to convert the next block of 16 ASCII bytes - if (pos + 16 <= len) { // if it is safe to read 16 more bytes, check that they are ascii + if (pos + 16 <= + len) { // if it is safe to read 16 more bytes, check that they are ascii uint64_t v1; ::memcpy(&v1, data + pos, sizeof(uint64_t)); uint64_t v2; @@ -13274,8 +12275,10 @@ inline result convert_with_errors(const char* buf, size_t len, char16_t* utf16_o uint64_t v{v1 | v2}; if ((v & 0x8080808080808080) == 0) { size_t final_pos = pos + 16; - while(pos < final_pos) { - *utf16_output++ = !match_system(big_endian) ? char16_t(utf16::swap_bytes(buf[pos])) : char16_t(buf[pos]); + while (pos < final_pos) { + *utf16_output++ = !match_system(big_endian) + ? char16_t(utf16::swap_bytes(buf[pos])) + : char16_t(buf[pos]); pos++; } continue; @@ -13284,16 +12287,25 @@ inline result convert_with_errors(const char* buf, size_t len, char16_t* utf16_o uint8_t leading_byte = data[pos]; // leading byte if (leading_byte < 0b10000000) { // converting one ASCII byte !!! - *utf16_output++ = !match_system(big_endian) ? char16_t(utf16::swap_bytes(leading_byte)): char16_t(leading_byte); + *utf16_output++ = !match_system(big_endian) + ? char16_t(utf16::swap_bytes(leading_byte)) + : char16_t(leading_byte); pos++; } else if ((leading_byte & 0b11100000) == 0b11000000) { // We have a two-byte UTF-8, it should become // a single UTF-16 word. - if(pos + 1 >= len) { return result(error_code::TOO_SHORT, pos); } // minimal bound checking - if ((data[pos + 1] & 0b11000000) != 0b10000000) { return result(error_code::TOO_SHORT, pos); } + if (pos + 1 >= len) { + return result(error_code::TOO_SHORT, pos); + } // minimal bound checking + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return result(error_code::TOO_SHORT, pos); + } // range check - uint32_t code_point = (leading_byte & 0b00011111) << 6 | (data[pos + 1] & 0b00111111); - if (code_point < 0x80 || 0x7ff < code_point) { return result(error_code::OVERLONG, pos); } + uint32_t code_point = + (leading_byte & 0b00011111) << 6 | (data[pos + 1] & 0b00111111); + if (code_point < 0x80 || 0x7ff < code_point) { + return result(error_code::OVERLONG, pos); + } if (!match_system(big_endian)) { code_point = uint32_t(utf16::swap_bytes(uint16_t(code_point))); } @@ -13302,16 +12314,26 @@ inline result convert_with_errors(const char* buf, size_t len, char16_t* utf16_o } else if ((leading_byte & 0b11110000) == 0b11100000) { // We have a three-byte UTF-8, it should become // a single UTF-16 word. - if(pos + 2 >= len) { return result(error_code::TOO_SHORT, pos); } // minimal bound checking + if (pos + 2 >= len) { + return result(error_code::TOO_SHORT, pos); + } // minimal bound checking - if ((data[pos + 1] & 0b11000000) != 0b10000000) { return result(error_code::TOO_SHORT, pos); } - if ((data[pos + 2] & 0b11000000) != 0b10000000) { return result(error_code::TOO_SHORT, pos); } + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return result(error_code::TOO_SHORT, pos); + } + if ((data[pos + 2] & 0b11000000) != 0b10000000) { + return result(error_code::TOO_SHORT, pos); + } // range check uint32_t code_point = (leading_byte & 0b00001111) << 12 | - (data[pos + 1] & 0b00111111) << 6 | - (data[pos + 2] & 0b00111111); - if ((code_point < 0x800) || (0xffff < code_point)) { return result(error_code::OVERLONG, pos);} - if (0xd7ff < code_point && code_point < 0xe000) { return result(error_code::SURROGATE, pos); } + (data[pos + 1] & 0b00111111) << 6 | + (data[pos + 2] & 0b00111111); + if ((code_point < 0x800) || (0xffff < code_point)) { + return result(error_code::OVERLONG, pos); + } + if (0xd7ff < code_point && code_point < 0xe000) { + return result(error_code::SURROGATE, pos); + } if (!match_system(big_endian)) { code_point = uint32_t(utf16::swap_bytes(uint16_t(code_point))); } @@ -13319,17 +12341,30 @@ inline result convert_with_errors(const char* buf, size_t len, char16_t* utf16_o pos += 3; } else if ((leading_byte & 0b11111000) == 0b11110000) { // 0b11110000 // we have a 4-byte UTF-8 word. - if(pos + 3 >= len) { return result(error_code::TOO_SHORT, pos); } // minimal bound checking - if ((data[pos + 1] & 0b11000000) != 0b10000000) { return result(error_code::TOO_SHORT, pos); } - if ((data[pos + 2] & 0b11000000) != 0b10000000) { return result(error_code::TOO_SHORT, pos); } - if ((data[pos + 3] & 0b11000000) != 0b10000000) { return result(error_code::TOO_SHORT, pos); } + if (pos + 3 >= len) { + return result(error_code::TOO_SHORT, pos); + } // minimal bound checking + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return result(error_code::TOO_SHORT, pos); + } + if ((data[pos + 2] & 0b11000000) != 0b10000000) { + return result(error_code::TOO_SHORT, pos); + } + if ((data[pos + 3] & 0b11000000) != 0b10000000) { + return result(error_code::TOO_SHORT, pos); + } // range check - uint32_t code_point = - (leading_byte & 0b00000111) << 18 | (data[pos + 1] & 0b00111111) << 12 | - (data[pos + 2] & 0b00111111) << 6 | (data[pos + 3] & 0b00111111); - if (code_point <= 0xffff) { return result(error_code::OVERLONG, pos); } - if (0x10ffff < code_point) { return result(error_code::TOO_LARGE, pos); } + uint32_t code_point = (leading_byte & 0b00000111) << 18 | + (data[pos + 1] & 0b00111111) << 12 | + (data[pos + 2] & 0b00111111) << 6 | + (data[pos + 3] & 0b00111111); + if (code_point <= 0xffff) { + return result(error_code::OVERLONG, pos); + } + if (0x10ffff < code_point) { + return result(error_code::TOO_LARGE, pos); + } code_point -= 0x10000; uint16_t high_surrogate = uint16_t(0xD800 + (code_point >> 10)); uint16_t low_surrogate = uint16_t(0xDC00 + (code_point & 0x3FF)); @@ -13342,44 +12377,52 @@ inline result convert_with_errors(const char* buf, size_t len, char16_t* utf16_o pos += 4; } else { // we either have too many continuation bytes or an invalid leading byte - if ((leading_byte & 0b11000000) == 0b10000000) { return result(error_code::TOO_LONG, pos); } - else { return result(error_code::HEADER_BITS, pos); } + if ((leading_byte & 0b11000000) == 0b10000000) { + return result(error_code::TOO_LONG, pos); + } else { + return result(error_code::HEADER_BITS, pos); + } } } return result(error_code::SUCCESS, utf16_output - start); } /** - * When rewind_and_convert_with_errors is called, we are pointing at 'buf' and we have - * up to len input bytes left, and we encountered some error. It is possible that - * the error is at 'buf' exactly, but it could also be in the previous bytes (up to 3 bytes back). + * When rewind_and_convert_with_errors is called, we are pointing at 'buf' and + * we have up to len input bytes left, and we encountered some error. It is + * possible that the error is at 'buf' exactly, but it could also be in the + * previous bytes (up to 3 bytes back). * - * prior_bytes indicates how many bytes, prior to 'buf' may belong to the current memory section - * and can be safely accessed. We prior_bytes to access safely up to three bytes before 'buf'. + * prior_bytes indicates how many bytes, prior to 'buf' may belong to the + * current memory section and can be safely accessed. We prior_bytes to access + * safely up to three bytes before 'buf'. * * The caller is responsible to ensure that len > 0. * - * If the error is believed to have occurred prior to 'buf', the count value contain in the result - * will be SIZE_T - 1, SIZE_T - 2, or SIZE_T - 3. + * If the error is believed to have occurred prior to 'buf', the count value + * contain in the result will be SIZE_T - 1, SIZE_T - 2, or SIZE_T - 3. */ template -inline result rewind_and_convert_with_errors(size_t prior_bytes, const char* buf, size_t len, char16_t* utf16_output) { +inline result rewind_and_convert_with_errors(size_t prior_bytes, + const char *buf, size_t len, + char16_t *utf16_output) { size_t extra_len{0}; // We potentially need to go back in time and find a leading byte. - // In theory '3' would be sufficient, but sometimes the error can go back quite far. + // In theory '3' would be sufficient, but sometimes the error can go back + // quite far. size_t how_far_back = prior_bytes; // size_t how_far_back = 3; // 3 bytes in the past + current position // if(how_far_back >= prior_bytes) { how_far_back = prior_bytes; } bool found_leading_bytes{false}; // important: it is i <= how_far_back and not 'i < how_far_back'. - for(size_t i = 0; i <= how_far_back; i++) { + for (size_t i = 0; i <= how_far_back; i++) { unsigned char byte = buf[-static_cast(i)]; found_leading_bytes = ((byte & 0b11000000) != 0b10000000); - if(found_leading_bytes) { - if(i > 0 && byte < 128) { + if (found_leading_bytes) { + if (i > 0 && byte < 128) { // If we had to go back and the leading byte is ascii // then we can stop right away. - return result(error_code::TOO_LONG, 0-i+1); + return result(error_code::TOO_LONG, 0 - i + 1); } buf -= i; extra_len = i; @@ -13388,16 +12431,18 @@ inline result rewind_and_convert_with_errors(size_t prior_bytes, const char* buf } // // It is possible for this function to return a negative count in its result. - // C++ Standard Section 18.1 defines size_t is in which is described in C Standard as . - // C Standard Section 4.1.5 defines size_t as an unsigned integral type of the result of the sizeof operator + // C++ Standard Section 18.1 defines size_t is in which is described + // in C Standard as . C Standard Section 4.1.5 defines size_t as an + // unsigned integral type of the result of the sizeof operator // // An unsigned type will simply wrap round arithmetically (well defined). // - if(!found_leading_bytes) { + if (!found_leading_bytes) { // If how_far_back == 3, we may have four consecutive continuation bytes!!! - // [....] [continuation] [continuation] [continuation] | [buf is continuation] - // Or we possibly have a stream that does not start with a leading byte. - return result(error_code::TOO_LONG, 0-how_far_back); + // [....] [continuation] [continuation] [continuation] | [buf is + // continuation] Or we possibly have a stream that does not start with a + // leading byte. + return result(error_code::TOO_LONG, 0 - how_far_back); } result res = convert_with_errors(buf, len + extra_len, utf16_output); if (res.error) { @@ -13406,7 +12451,7 @@ inline result rewind_and_convert_with_errors(size_t prior_bytes, const char* buf return res; } -} // utf8_to_utf16 namespace +} // namespace utf8_to_utf16 } // unnamed namespace } // namespace scalar } // namespace simdutf @@ -13423,18 +12468,20 @@ namespace scalar { namespace { namespace utf8_to_utf32 { -inline size_t convert_valid(const char* buf, size_t len, char32_t* utf32_output) { - const uint8_t *data = reinterpret_cast(buf); +inline size_t convert_valid(const char *buf, size_t len, + char32_t *utf32_output) { + const uint8_t *data = reinterpret_cast(buf); size_t pos = 0; - char32_t* start{utf32_output}; + char32_t *start{utf32_output}; while (pos < len) { // try to convert the next block of 8 ASCII bytes - if (pos + 8 <= len) { // if it is safe to read 8 more bytes, check that they are ascii + if (pos + 8 <= + len) { // if it is safe to read 8 more bytes, check that they are ascii uint64_t v; ::memcpy(&v, data + pos, sizeof(uint64_t)); if ((v & 0x8080808080808080) == 0) { size_t final_pos = pos + 8; - while(pos < final_pos) { + while (pos < final_pos) { *utf32_output++ = char32_t(buf[pos]); pos++; } @@ -13448,19 +12495,30 @@ inline size_t convert_valid(const char* buf, size_t len, char32_t* utf32_output) pos++; } else if ((leading_byte & 0b11100000) == 0b11000000) { // We have a two-byte UTF-8 - if(pos + 1 >= len) { break; } // minimal bound checking - *utf32_output++ = char32_t(((leading_byte &0b00011111) << 6) | (data[pos + 1] &0b00111111)); + if (pos + 1 >= len) { + break; + } // minimal bound checking + *utf32_output++ = char32_t(((leading_byte & 0b00011111) << 6) | + (data[pos + 1] & 0b00111111)); pos += 2; } else if ((leading_byte & 0b11110000) == 0b11100000) { // We have a three-byte UTF-8 - if(pos + 2 >= len) { break; } // minimal bound checking - *utf32_output++ = char32_t(((leading_byte &0b00001111) << 12) | ((data[pos + 1] &0b00111111) << 6) | (data[pos + 2] &0b00111111)); + if (pos + 2 >= len) { + break; + } // minimal bound checking + *utf32_output++ = char32_t(((leading_byte & 0b00001111) << 12) | + ((data[pos + 1] & 0b00111111) << 6) | + (data[pos + 2] & 0b00111111)); pos += 3; } else if ((leading_byte & 0b11111000) == 0b11110000) { // 0b11110000 // we have a 4-byte UTF-8 word. - if(pos + 3 >= len) { break; } // minimal bound checking - uint32_t code_word = ((leading_byte & 0b00000111) << 18 )| ((data[pos + 1] &0b00111111) << 12) - | ((data[pos + 2] &0b00111111) << 6) | (data[pos + 3] &0b00111111); + if (pos + 3 >= len) { + break; + } // minimal bound checking + uint32_t code_word = ((leading_byte & 0b00000111) << 18) | + ((data[pos + 1] & 0b00111111) << 12) | + ((data[pos + 2] & 0b00111111) << 6) | + (data[pos + 3] & 0b00111111); *utf32_output++ = char32_t(code_word); pos += 4; } else { @@ -13471,7 +12529,6 @@ inline size_t convert_valid(const char* buf, size_t len, char32_t* utf32_output) return utf32_output - start; } - } // namespace utf8_to_utf32 } // unnamed namespace } // namespace scalar @@ -13488,13 +12545,14 @@ namespace scalar { namespace { namespace utf8_to_utf32 { -inline size_t convert(const char* buf, size_t len, char32_t* utf32_output) { - const uint8_t *data = reinterpret_cast(buf); +inline size_t convert(const char *buf, size_t len, char32_t *utf32_output) { + const uint8_t *data = reinterpret_cast(buf); size_t pos = 0; - char32_t* start{utf32_output}; + char32_t *start{utf32_output}; while (pos < len) { // try to convert the next block of 16 ASCII bytes - if (pos + 16 <= len) { // if it is safe to read 16 more bytes, check that they are ascii + if (pos + 16 <= + len) { // if it is safe to read 16 more bytes, check that they are ascii uint64_t v1; ::memcpy(&v1, data + pos, sizeof(uint64_t)); uint64_t v2; @@ -13502,7 +12560,7 @@ inline size_t convert(const char* buf, size_t len, char32_t* utf32_output) { uint64_t v{v1 | v2}; if ((v & 0x8080808080808080) == 0) { size_t final_pos = pos + 16; - while(pos < final_pos) { + while (pos < final_pos) { *utf32_output++ = char32_t(buf[pos]); pos++; } @@ -13516,23 +12574,36 @@ inline size_t convert(const char* buf, size_t len, char32_t* utf32_output) { pos++; } else if ((leading_byte & 0b11100000) == 0b11000000) { // We have a two-byte UTF-8 - if(pos + 1 >= len) { return 0; } // minimal bound checking - if ((data[pos + 1] & 0b11000000) != 0b10000000) { return 0; } + if (pos + 1 >= len) { + return 0; + } // minimal bound checking + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return 0; + } // range check - uint32_t code_point = (leading_byte & 0b00011111) << 6 | (data[pos + 1] & 0b00111111); - if (code_point < 0x80 || 0x7ff < code_point) { return 0; } + uint32_t code_point = + (leading_byte & 0b00011111) << 6 | (data[pos + 1] & 0b00111111); + if (code_point < 0x80 || 0x7ff < code_point) { + return 0; + } *utf32_output++ = char32_t(code_point); pos += 2; } else if ((leading_byte & 0b11110000) == 0b11100000) { // We have a three-byte UTF-8 - if(pos + 2 >= len) { return 0; } // minimal bound checking + if (pos + 2 >= len) { + return 0; + } // minimal bound checking - if ((data[pos + 1] & 0b11000000) != 0b10000000) { return 0; } - if ((data[pos + 2] & 0b11000000) != 0b10000000) { return 0; } + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return 0; + } + if ((data[pos + 2] & 0b11000000) != 0b10000000) { + return 0; + } // range check uint32_t code_point = (leading_byte & 0b00001111) << 12 | - (data[pos + 1] & 0b00111111) << 6 | - (data[pos + 2] & 0b00111111); + (data[pos + 1] & 0b00111111) << 6 | + (data[pos + 2] & 0b00111111); if (code_point < 0x800 || 0xffff < code_point || (0xd7ff < code_point && code_point < 0xe000)) { return 0; @@ -13541,16 +12612,27 @@ inline size_t convert(const char* buf, size_t len, char32_t* utf32_output) { pos += 3; } else if ((leading_byte & 0b11111000) == 0b11110000) { // 0b11110000 // we have a 4-byte UTF-8 word. - if(pos + 3 >= len) { return 0; } // minimal bound checking - if ((data[pos + 1] & 0b11000000) != 0b10000000) { return 0; } - if ((data[pos + 2] & 0b11000000) != 0b10000000) { return 0; } - if ((data[pos + 3] & 0b11000000) != 0b10000000) { return 0; } + if (pos + 3 >= len) { + return 0; + } // minimal bound checking + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return 0; + } + if ((data[pos + 2] & 0b11000000) != 0b10000000) { + return 0; + } + if ((data[pos + 3] & 0b11000000) != 0b10000000) { + return 0; + } // range check - uint32_t code_point = - (leading_byte & 0b00000111) << 18 | (data[pos + 1] & 0b00111111) << 12 | - (data[pos + 2] & 0b00111111) << 6 | (data[pos + 3] & 0b00111111); - if (code_point <= 0xffff || 0x10ffff < code_point) { return 0; } + uint32_t code_point = (leading_byte & 0b00000111) << 18 | + (data[pos + 1] & 0b00111111) << 12 | + (data[pos + 2] & 0b00111111) << 6 | + (data[pos + 3] & 0b00111111); + if (code_point <= 0xffff || 0x10ffff < code_point) { + return 0; + } *utf32_output++ = char32_t(code_point); pos += 4; } else { @@ -13560,13 +12642,15 @@ inline size_t convert(const char* buf, size_t len, char32_t* utf32_output) { return utf32_output - start; } -inline result convert_with_errors(const char* buf, size_t len, char32_t* utf32_output) { - const uint8_t *data = reinterpret_cast(buf); +inline result convert_with_errors(const char *buf, size_t len, + char32_t *utf32_output) { + const uint8_t *data = reinterpret_cast(buf); size_t pos = 0; - char32_t* start{utf32_output}; + char32_t *start{utf32_output}; while (pos < len) { // try to convert the next block of 16 ASCII bytes - if (pos + 16 <= len) { // if it is safe to read 16 more bytes, check that they are ascii + if (pos + 16 <= + len) { // if it is safe to read 16 more bytes, check that they are ascii uint64_t v1; ::memcpy(&v1, data + pos, sizeof(uint64_t)); uint64_t v2; @@ -13574,7 +12658,7 @@ inline result convert_with_errors(const char* buf, size_t len, char32_t* utf32_o uint64_t v{v1 | v2}; if ((v & 0x8080808080808080) == 0) { size_t final_pos = pos + 16; - while(pos < final_pos) { + while (pos < final_pos) { *utf32_output++ = char32_t(buf[pos]); pos++; } @@ -13588,79 +12672,118 @@ inline result convert_with_errors(const char* buf, size_t len, char32_t* utf32_o pos++; } else if ((leading_byte & 0b11100000) == 0b11000000) { // We have a two-byte UTF-8 - if(pos + 1 >= len) { return result(error_code::TOO_SHORT, pos); } // minimal bound checking - if ((data[pos + 1] & 0b11000000) != 0b10000000) { return result(error_code::TOO_SHORT, pos); } + if (pos + 1 >= len) { + return result(error_code::TOO_SHORT, pos); + } // minimal bound checking + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return result(error_code::TOO_SHORT, pos); + } // range check - uint32_t code_point = (leading_byte & 0b00011111) << 6 | (data[pos + 1] & 0b00111111); - if (code_point < 0x80 || 0x7ff < code_point) { return result(error_code::OVERLONG, pos); } + uint32_t code_point = + (leading_byte & 0b00011111) << 6 | (data[pos + 1] & 0b00111111); + if (code_point < 0x80 || 0x7ff < code_point) { + return result(error_code::OVERLONG, pos); + } *utf32_output++ = char32_t(code_point); pos += 2; } else if ((leading_byte & 0b11110000) == 0b11100000) { // We have a three-byte UTF-8 - if(pos + 2 >= len) { return result(error_code::TOO_SHORT, pos); } // minimal bound checking + if (pos + 2 >= len) { + return result(error_code::TOO_SHORT, pos); + } // minimal bound checking - if ((data[pos + 1] & 0b11000000) != 0b10000000) { return result(error_code::TOO_SHORT, pos); } - if ((data[pos + 2] & 0b11000000) != 0b10000000) { return result(error_code::TOO_SHORT, pos); } + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return result(error_code::TOO_SHORT, pos); + } + if ((data[pos + 2] & 0b11000000) != 0b10000000) { + return result(error_code::TOO_SHORT, pos); + } // range check uint32_t code_point = (leading_byte & 0b00001111) << 12 | - (data[pos + 1] & 0b00111111) << 6 | - (data[pos + 2] & 0b00111111); - if (code_point < 0x800 || 0xffff < code_point) { return result(error_code::OVERLONG, pos); } - if (0xd7ff < code_point && code_point < 0xe000) { return result(error_code::SURROGATE, pos); } + (data[pos + 1] & 0b00111111) << 6 | + (data[pos + 2] & 0b00111111); + if (code_point < 0x800 || 0xffff < code_point) { + return result(error_code::OVERLONG, pos); + } + if (0xd7ff < code_point && code_point < 0xe000) { + return result(error_code::SURROGATE, pos); + } *utf32_output++ = char32_t(code_point); pos += 3; } else if ((leading_byte & 0b11111000) == 0b11110000) { // 0b11110000 // we have a 4-byte UTF-8 word. - if(pos + 3 >= len) { return result(error_code::TOO_SHORT, pos); } // minimal bound checking - if ((data[pos + 1] & 0b11000000) != 0b10000000) { return result(error_code::TOO_SHORT, pos);} - if ((data[pos + 2] & 0b11000000) != 0b10000000) { return result(error_code::TOO_SHORT, pos); } - if ((data[pos + 3] & 0b11000000) != 0b10000000) { return result(error_code::TOO_SHORT, pos); } + if (pos + 3 >= len) { + return result(error_code::TOO_SHORT, pos); + } // minimal bound checking + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return result(error_code::TOO_SHORT, pos); + } + if ((data[pos + 2] & 0b11000000) != 0b10000000) { + return result(error_code::TOO_SHORT, pos); + } + if ((data[pos + 3] & 0b11000000) != 0b10000000) { + return result(error_code::TOO_SHORT, pos); + } // range check - uint32_t code_point = - (leading_byte & 0b00000111) << 18 | (data[pos + 1] & 0b00111111) << 12 | - (data[pos + 2] & 0b00111111) << 6 | (data[pos + 3] & 0b00111111); - if (code_point <= 0xffff) { return result(error_code::OVERLONG, pos); } - if (0x10ffff < code_point) { return result(error_code::TOO_LARGE, pos); } + uint32_t code_point = (leading_byte & 0b00000111) << 18 | + (data[pos + 1] & 0b00111111) << 12 | + (data[pos + 2] & 0b00111111) << 6 | + (data[pos + 3] & 0b00111111); + if (code_point <= 0xffff) { + return result(error_code::OVERLONG, pos); + } + if (0x10ffff < code_point) { + return result(error_code::TOO_LARGE, pos); + } *utf32_output++ = char32_t(code_point); pos += 4; } else { // we either have too many continuation bytes or an invalid leading byte - if ((leading_byte & 0b11000000) == 0b10000000) { return result(error_code::TOO_LONG, pos); } - else { return result(error_code::HEADER_BITS, pos); } + if ((leading_byte & 0b11000000) == 0b10000000) { + return result(error_code::TOO_LONG, pos); + } else { + return result(error_code::HEADER_BITS, pos); + } } } return result(error_code::SUCCESS, utf32_output - start); } /** - * When rewind_and_convert_with_errors is called, we are pointing at 'buf' and we have - * up to len input bytes left, and we encountered some error. It is possible that - * the error is at 'buf' exactly, but it could also be in the previous bytes location (up to 3 bytes back). + * When rewind_and_convert_with_errors is called, we are pointing at 'buf' and + * we have up to len input bytes left, and we encountered some error. It is + * possible that the error is at 'buf' exactly, but it could also be in the + * previous bytes location (up to 3 bytes back). * - * prior_bytes indicates how many bytes, prior to 'buf' may belong to the current memory section - * and can be safely accessed. We prior_bytes to access safely up to three bytes before 'buf'. + * prior_bytes indicates how many bytes, prior to 'buf' may belong to the + * current memory section and can be safely accessed. We prior_bytes to access + * safely up to three bytes before 'buf'. * * The caller is responsible to ensure that len > 0. * - * If the error is believed to have occurred prior to 'buf', the count value contain in the result - * will be SIZE_T - 1, SIZE_T - 2, or SIZE_T - 3. + * If the error is believed to have occurred prior to 'buf', the count value + * contain in the result will be SIZE_T - 1, SIZE_T - 2, or SIZE_T - 3. */ -inline result rewind_and_convert_with_errors(size_t prior_bytes, const char* buf, size_t len, char32_t* utf32_output) { +inline result rewind_and_convert_with_errors(size_t prior_bytes, + const char *buf, size_t len, + char32_t *utf32_output) { size_t extra_len{0}; // We potentially need to go back in time and find a leading byte. size_t how_far_back = 3; // 3 bytes in the past + current position - if(how_far_back > prior_bytes) { how_far_back = prior_bytes; } + if (how_far_back > prior_bytes) { + how_far_back = prior_bytes; + } bool found_leading_bytes{false}; // important: it is i <= how_far_back and not 'i < how_far_back'. - for(size_t i = 0; i <= how_far_back; i++) { + for (size_t i = 0; i <= how_far_back; i++) { unsigned char byte = buf[-static_cast(i)]; found_leading_bytes = ((byte & 0b11000000) != 0b10000000); - if(found_leading_bytes) { - if(i > 0 && byte < 128) { + if (found_leading_bytes) { + if (i > 0 && byte < 128) { // If we had to go back and the leading byte is ascii // then we can stop right away. - return result(error_code::TOO_LONG, 0-i+1); + return result(error_code::TOO_LONG, 0 - i + 1); } buf -= i; extra_len = i; @@ -13669,16 +12792,18 @@ inline result rewind_and_convert_with_errors(size_t prior_bytes, const char* buf } // // It is possible for this function to return a negative count in its result. - // C++ Standard Section 18.1 defines size_t is in which is described in C Standard as . - // C Standard Section 4.1.5 defines size_t as an unsigned integral type of the result of the sizeof operator + // C++ Standard Section 18.1 defines size_t is in which is described + // in C Standard as . C Standard Section 4.1.5 defines size_t as an + // unsigned integral type of the result of the sizeof operator // // An unsigned type will simply wrap round arithmetically (well defined). // - if(!found_leading_bytes) { + if (!found_leading_bytes) { // If how_far_back == 3, we may have four consecutive continuation bytes!!! - // [....] [continuation] [continuation] [continuation] | [buf is continuation] - // Or we possibly have a stream that does not start with a leading byte. - return result(error_code::TOO_LONG, 0-how_far_back); + // [....] [continuation] [continuation] [continuation] | [buf is + // continuation] Or we possibly have a stream that does not start with a + // leading byte. + return result(error_code::TOO_LONG, 0 - how_far_back); } result res = convert_with_errors(buf, len + extra_len, utf32_output); @@ -13688,7 +12813,7 @@ inline result rewind_and_convert_with_errors(size_t prior_bytes, const char* buf return res; } -} // utf8_to_utf32 namespace +} // namespace utf8_to_utf32 } // unnamed namespace } // namespace scalar } // namespace simdutf @@ -13706,14 +12831,16 @@ namespace { namespace latin1_to_utf16 { template -inline size_t convert(const char* buf, size_t len, char16_t* utf16_output) { - const uint8_t* data = reinterpret_cast(buf); +inline size_t convert(const char *buf, size_t len, char16_t *utf16_output) { + const uint8_t *data = reinterpret_cast(buf); size_t pos = 0; - char16_t* start{ utf16_output }; + char16_t *start{utf16_output}; while (pos < len) { - uint16_t word = uint16_t(data[pos]); // extend Latin-1 char to 16-bit Unicode code point - *utf16_output++ = char16_t(match_system(big_endian) ? word : utf16::swap_bytes(word)); + uint16_t word = + uint16_t(data[pos]); // extend Latin-1 char to 16-bit Unicode code point + *utf16_output++ = + char16_t(match_system(big_endian) ? word : utf16::swap_bytes(word)); pos++; } @@ -13721,21 +12848,24 @@ inline size_t convert(const char* buf, size_t len, char16_t* utf16_output) { } template -inline result convert_with_errors(const char* buf, size_t len, char16_t* utf16_output) { - const uint8_t* data = reinterpret_cast(buf); +inline result convert_with_errors(const char *buf, size_t len, + char16_t *utf16_output) { + const uint8_t *data = reinterpret_cast(buf); size_t pos = 0; - char16_t* start{ utf16_output }; + char16_t *start{utf16_output}; while (pos < len) { - uint16_t word = uint16_t(data[pos]); // extend Latin-1 char to 16-bit Unicode code point - *utf16_output++ = char16_t(match_system(big_endian) ? word : utf16::swap_bytes(word)); + uint16_t word = + uint16_t(data[pos]); // extend Latin-1 char to 16-bit Unicode code point + *utf16_output++ = + char16_t(match_system(big_endian) ? word : utf16::swap_bytes(word)); pos++; } return result(error_code::SUCCESS, utf16_output - start); } -} // latin1_to_utf16 namespace +} // namespace latin1_to_utf16 } // unnamed namespace } // namespace scalar } // namespace simdutf @@ -13751,17 +12881,16 @@ namespace scalar { namespace { namespace latin1_to_utf32 { - inline size_t convert(const char *buf, size_t len, char32_t *utf32_output) { const unsigned char *data = reinterpret_cast(buf); - char32_t* start{utf32_output}; + char32_t *start{utf32_output}; for (size_t i = 0; i < len; i++) { *utf32_output++ = (char32_t)data[i]; } return utf32_output - start; } -} // latin1_to_utf32 namespace +} // namespace latin1_to_utf32 } // unnamed namespace } // namespace scalar } // namespace simdutf @@ -13778,22 +12907,26 @@ namespace scalar { namespace { namespace utf8_to_latin1 { -inline size_t convert(const char* buf, size_t len, char* latin_output) { - const uint8_t *data = reinterpret_cast(buf); +inline size_t convert(const char *buf, size_t len, char *latin_output) { + const uint8_t *data = reinterpret_cast(buf); size_t pos = 0; - char* start{latin_output}; + char *start{latin_output}; while (pos < len) { // try to convert the next block of 16 ASCII bytes - if (pos + 16 <= len) { // if it is safe to read 16 more bytes, check that they are ascii + if (pos + 16 <= + len) { // if it is safe to read 16 more bytes, check that they are ascii uint64_t v1; ::memcpy(&v1, data + pos, sizeof(uint64_t)); uint64_t v2; ::memcpy(&v2, data + pos + sizeof(uint64_t), sizeof(uint64_t)); - uint64_t v{v1 | v2}; // We are only interested in these bits: 1000 1000 1000 1000 .... etc - if ((v & 0x8080808080808080) == 0) { // if NONE of these are set, e.g. all of them are zero, then everything is ASCII + uint64_t v{v1 | v2}; // We are only interested in these bits: 1000 1000 + // 1000 1000 .... etc + if ((v & 0x8080808080808080) == + 0) { // if NONE of these are set, e.g. all of them are zero, then + // everything is ASCII size_t final_pos = pos + 16; - while(pos < final_pos) { + while (pos < final_pos) { *latin_output++ = char(buf[pos]); pos++; } @@ -13807,16 +12940,29 @@ inline size_t convert(const char* buf, size_t len, char* latin_output) { // converting one ASCII byte !!! *latin_output++ = char(leading_byte); pos++; - } else if ((leading_byte & 0b11100000) == 0b11000000) { // the first three bits indicate: + } else if ((leading_byte & 0b11100000) == + 0b11000000) { // the first three bits indicate: // We have a two-byte UTF-8 - if(pos + 1 >= len) { + if (pos + 1 >= len) { return 0; } // minimal bound checking - if ((data[pos + 1] & 0b11000000) != 0b10000000) { return 0; } // checks if the next byte is a valid continuation byte in UTF-8. A valid continuation byte starts with 10. + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return 0; + } // checks if the next byte is a valid continuation byte in UTF-8. A + // valid continuation byte starts with 10. // range check - - uint32_t code_point = (leading_byte & 0b00011111) << 6 | (data[pos + 1] & 0b00111111); // assembles the Unicode code point from the two bytes. It does this by discarding the leading 110 and 10 bits from the two bytes, shifting the remaining bits of the first byte, and then combining the results with a bitwise OR operation. + uint32_t code_point = + (leading_byte & 0b00011111) << 6 | + (data[pos + 1] & + 0b00111111); // assembles the Unicode code point from the two bytes. + // It does this by discarding the leading 110 and 10 + // bits from the two bytes, shifting the remaining bits + // of the first byte, and then combining the results + // with a bitwise OR operation. if (code_point < 0x80 || 0xFF < code_point) { - return 0; // We only care about the range 129-255 which is Non-ASCII latin1 characters. A code_point beneath 0x80 is invalid as it is already covered by bytes whose leading bit is zero. + return 0; // We only care about the range 129-255 which is Non-ASCII + // latin1 characters. A code_point beneath 0x80 is invalid as + // it is already covered by bytes whose leading bit is zero. } *latin_output++ = char(code_point); pos += 2; @@ -13827,22 +12973,27 @@ inline size_t convert(const char* buf, size_t len, char* latin_output) { return latin_output - start; } -inline result convert_with_errors(const char* buf, size_t len, char* latin_output) { - const uint8_t *data = reinterpret_cast(buf); +inline result convert_with_errors(const char *buf, size_t len, + char *latin_output) { + const uint8_t *data = reinterpret_cast(buf); size_t pos = 0; - char* start{latin_output}; + char *start{latin_output}; while (pos < len) { // try to convert the next block of 16 ASCII bytes - if (pos + 16 <= len) { // if it is safe to read 16 more bytes, check that they are ascii + if (pos + 16 <= + len) { // if it is safe to read 16 more bytes, check that they are ascii uint64_t v1; ::memcpy(&v1, data + pos, sizeof(uint64_t)); uint64_t v2; ::memcpy(&v2, data + pos + sizeof(uint64_t), sizeof(uint64_t)); - uint64_t v{v1 | v2}; // We are only interested in these bits: 1000 1000 1000 1000...etc - if ((v & 0x8080808080808080) == 0) { // if NONE of these are set, e.g. all of them are zero, then everything is ASCII + uint64_t v{v1 | v2}; // We are only interested in these bits: 1000 1000 + // 1000 1000...etc + if ((v & 0x8080808080808080) == + 0) { // if NONE of these are set, e.g. all of them are zero, then + // everything is ASCII size_t final_pos = pos + 16; - while(pos < final_pos) { + while (pos < final_pos) { *latin_output++ = char(buf[pos]); pos++; } @@ -13855,20 +13006,32 @@ inline result convert_with_errors(const char* buf, size_t len, char* latin_outpu // converting one ASCII byte !!! *latin_output++ = char(leading_byte); pos++; - } else if ((leading_byte & 0b11100000) == 0b11000000) { // the first three bits indicate: + } else if ((leading_byte & 0b11100000) == + 0b11000000) { // the first three bits indicate: // We have a two-byte UTF-8 - if(pos + 1 >= len) { - return result(error_code::TOO_SHORT, pos); } // minimal bound checking + if (pos + 1 >= len) { + return result(error_code::TOO_SHORT, pos); + } // minimal bound checking if ((data[pos + 1] & 0b11000000) != 0b10000000) { - return result(error_code::TOO_SHORT, pos); } // checks if the next byte is a valid continuation byte in UTF-8. A valid continuation byte starts with 10. + return result(error_code::TOO_SHORT, pos); + } // checks if the next byte is a valid continuation byte in UTF-8. A + // valid continuation byte starts with 10. // range check - - uint32_t code_point = (leading_byte & 0b00011111) << 6 | (data[pos + 1] & 0b00111111); // assembles the Unicode code point from the two bytes. It does this by discarding the leading 110 and 10 bits from the two bytes, shifting the remaining bits of the first byte, and then combining the results with a bitwise OR operation. + uint32_t code_point = + (leading_byte & 0b00011111) << 6 | + (data[pos + 1] & + 0b00111111); // assembles the Unicode code point from the two bytes. + // It does this by discarding the leading 110 and 10 + // bits from the two bytes, shifting the remaining bits + // of the first byte, and then combining the results + // with a bitwise OR operation. if (code_point < 0x80) { return result(error_code::OVERLONG, pos); } if (0xFF < code_point) { return result(error_code::TOO_LARGE, pos); - } // We only care about the range 129-255 which is Non-ASCII latin1 characters + } // We only care about the range 129-255 which is Non-ASCII latin1 + // characters *latin_output++ = char(code_point); pos += 2; } else if ((leading_byte & 0b11110000) == 0b11100000) { @@ -13884,30 +13047,31 @@ inline result convert_with_errors(const char* buf, size_t len, char* latin_outpu } return result(error_code::HEADER_BITS, pos); - } } return result(error_code::SUCCESS, latin_output - start); } - -inline result rewind_and_convert_with_errors(size_t prior_bytes, const char* buf, size_t len, char* latin1_output) { +inline result rewind_and_convert_with_errors(size_t prior_bytes, + const char *buf, size_t len, + char *latin1_output) { size_t extra_len{0}; // We potentially need to go back in time and find a leading byte. - // In theory '3' would be sufficient, but sometimes the error can go back quite far. + // In theory '3' would be sufficient, but sometimes the error can go back + // quite far. size_t how_far_back = prior_bytes; // size_t how_far_back = 3; // 3 bytes in the past + current position // if(how_far_back >= prior_bytes) { how_far_back = prior_bytes; } bool found_leading_bytes{false}; // important: it is i <= how_far_back and not 'i < how_far_back'. - for(size_t i = 0; i <= how_far_back; i++) { + for (size_t i = 0; i <= how_far_back; i++) { unsigned char byte = buf[-static_cast(i)]; found_leading_bytes = ((byte & 0b11000000) != 0b10000000); - if(found_leading_bytes) { - if(i > 0 && byte < 128) { + if (found_leading_bytes) { + if (i > 0 && byte < 128) { // If we had to go back and the leading byte is ascii // then we can stop right away. - return result(error_code::TOO_LONG, 0-i+1); + return result(error_code::TOO_LONG, 0 - i + 1); } buf -= i; extra_len = i; @@ -13916,16 +13080,18 @@ inline result rewind_and_convert_with_errors(size_t prior_bytes, const char* buf } // // It is possible for this function to return a negative count in its result. - // C++ Standard Section 18.1 defines size_t is in which is described in C Standard as . - // C Standard Section 4.1.5 defines size_t as an unsigned integral type of the result of the sizeof operator + // C++ Standard Section 18.1 defines size_t is in which is described + // in C Standard as . C Standard Section 4.1.5 defines size_t as an + // unsigned integral type of the result of the sizeof operator // // An unsigned type will simply wrap round arithmetically (well defined). // - if(!found_leading_bytes) { + if (!found_leading_bytes) { // If how_far_back == 3, we may have four consecutive continuation bytes!!! - // [....] [continuation] [continuation] [continuation] | [buf is continuation] - // Or we possibly have a stream that does not start with a leading byte. - return result(error_code::TOO_LONG, 0-how_far_back); + // [....] [continuation] [continuation] [continuation] | [buf is + // continuation] Or we possibly have a stream that does not start with a + // leading byte. + return result(error_code::TOO_LONG, 0 - how_far_back); } result res = convert_with_errors(buf, len + extra_len, latin1_output); if (res.error) { @@ -13934,8 +13100,7 @@ inline result rewind_and_convert_with_errors(size_t prior_bytes, const char* buf return res; } - -} // utf8_to_latin1 namespace +} // namespace utf8_to_latin1 } // unnamed namespace } // namespace scalar } // namespace simdutf @@ -13951,15 +13116,16 @@ namespace scalar { namespace { namespace utf16_to_latin1 { -#include // for std::memcpy +#include // for std::memcpy template -inline size_t convert(const char16_t* buf, size_t len, char* latin_output) { - if(len == 0) { return 0; } +inline size_t convert(const char16_t *buf, size_t len, char *latin_output) { + if (len == 0) { + return 0; + } const uint16_t *data = reinterpret_cast(buf); size_t pos = 0; - std::vector temp_output(len); - char* current_write = temp_output.data(); + char *current_write = latin_output; uint16_t word = 0; uint16_t too_large = 0; @@ -13969,55 +13135,69 @@ inline size_t convert(const char16_t* buf, size_t len, char* latin_output) { *current_write++ = char(word & 0xFF); pos++; } - if((too_large & 0xFF00) != 0) { return 0; } - - // Only copy to latin_output if there were no errors - std::memcpy(latin_output, temp_output.data(), len); + if ((too_large & 0xFF00) != 0) { + return 0; + } - return current_write - temp_output.data(); + return current_write - latin_output; } template -inline result convert_with_errors(const char16_t* buf, size_t len, char* latin_output) { - if(len == 0) { return result(error_code::SUCCESS,0); } - const uint16_t *data = reinterpret_cast(buf); +inline result convert_with_errors(const char16_t *buf, size_t len, + char *latin_output) { + if (len == 0) { + return result(error_code::SUCCESS, 0); + } + const uint16_t *data = reinterpret_cast(buf); size_t pos = 0; - char* start{latin_output}; + char *start{latin_output}; uint16_t word; while (pos < len) { - if (pos + 16 <= len) { // if it is safe to read 32 more bytes, check that they are Latin1 + if (pos + 16 <= len) { // if it is safe to read 32 more bytes, check that + // they are Latin1 uint64_t v1, v2, v3, v4; ::memcpy(&v1, data + pos, sizeof(uint64_t)); ::memcpy(&v2, data + pos + 4, sizeof(uint64_t)); ::memcpy(&v3, data + pos + 8, sizeof(uint64_t)); - ::memcpy(&v4, data + pos + 12, sizeof(uint64_t)); + ::memcpy(&v4, data + pos + 12, sizeof(uint64_t)); - if (!match_system(big_endian)) { v1 = (v1 >> 8) | (v1 << (64 - 8)); } - if (!match_system(big_endian)) { v2 = (v2 >> 8) | (v2 << (64 - 8)); } - if (!match_system(big_endian)) { v3 = (v3 >> 8) | (v3 << (64 - 8)); } - if (!match_system(big_endian)) { v4 = (v4 >> 8) | (v4 << (64 - 8)); } + if (!match_system(big_endian)) { + v1 = (v1 >> 8) | (v1 << (64 - 8)); + } + if (!match_system(big_endian)) { + v2 = (v2 >> 8) | (v2 << (64 - 8)); + } + if (!match_system(big_endian)) { + v3 = (v3 >> 8) | (v3 << (64 - 8)); + } + if (!match_system(big_endian)) { + v4 = (v4 >> 8) | (v4 << (64 - 8)); + } if (((v1 | v2 | v3 | v4) & 0xFF00FF00FF00FF00) == 0) { size_t final_pos = pos + 16; - while(pos < final_pos) { - *latin_output++ = !match_system(big_endian) ? char(utf16::swap_bytes(data[pos])) : char(data[pos]); + while (pos < final_pos) { + *latin_output++ = !match_system(big_endian) + ? char(utf16::swap_bytes(data[pos])) + : char(data[pos]); pos++; } continue; } } word = !match_system(big_endian) ? utf16::swap_bytes(data[pos]) : data[pos]; - if((word & 0xFF00 ) == 0) { - *latin_output++ = char(word & 0xFF); - pos++; - } else { return result(error_code::TOO_LARGE, pos); } + if ((word & 0xFF00) == 0) { + *latin_output++ = char(word & 0xFF); + pos++; + } else { + return result(error_code::TOO_LARGE, pos); + } } - return result(error_code::SUCCESS,latin_output - start); + return result(error_code::SUCCESS, latin_output - start); } - -} // utf16_to_latin1 namespace +} // namespace utf16_to_latin1 } // unnamed namespace } // namespace scalar } // namespace simdutf @@ -14035,7 +13215,7 @@ namespace utf32_to_latin1 { inline size_t convert(const char32_t *buf, size_t len, char *latin1_output) { const uint32_t *data = reinterpret_cast(buf); - char* start = latin1_output; + char *start = latin1_output; uint32_t utf32_char; size_t pos = 0; uint32_t too_large = 0; @@ -14046,35 +13226,42 @@ inline size_t convert(const char32_t *buf, size_t len, char *latin1_output) { *latin1_output++ = (char)(utf32_char & 0xFF); pos++; } - if((too_large & 0xFFFFFF00) != 0) { return 0; } + if ((too_large & 0xFFFFFF00) != 0) { + return 0; + } return latin1_output - start; } -inline result convert_with_errors(const char32_t *buf, size_t len, char *latin1_output) { +inline result convert_with_errors(const char32_t *buf, size_t len, + char *latin1_output) { const uint32_t *data = reinterpret_cast(buf); - char* start{latin1_output}; + char *start{latin1_output}; size_t pos = 0; while (pos < len) { - if (pos + 2 <= len) { // if it is safe to read 8 more bytes, check that they are Latin1 + if (pos + 2 <= + len) { // if it is safe to read 8 more bytes, check that they are Latin1 uint64_t v; ::memcpy(&v, data + pos, sizeof(uint64_t)); if ((v & 0xFFFFFF00FFFFFF00) == 0) { *latin1_output++ = char(buf[pos]); - *latin1_output++ = char(buf[pos+1]); + *latin1_output++ = char(buf[pos + 1]); pos += 2; continue; } } uint32_t utf32_char = data[pos]; - if ((utf32_char & 0xFFFFFF00) == 0) { // Check if the character can be represented in Latin-1 + if ((utf32_char & 0xFFFFFF00) == + 0) { // Check if the character can be represented in Latin-1 *latin1_output++ = (char)(utf32_char & 0xFF); pos++; - } else { return result(error_code::TOO_LARGE, pos); }; + } else { + return result(error_code::TOO_LARGE, pos); + }; } return result(error_code::SUCCESS, latin1_output - start); } -} // utf32_to_latin1 namespace +} // namespace utf32_to_latin1 } // unnamed namespace } // namespace scalar } // namespace simdutf @@ -14091,23 +13278,28 @@ namespace scalar { namespace { namespace utf8_to_latin1 { -inline size_t convert_valid(const char* buf, size_t len, char* latin_output) { - const uint8_t *data = reinterpret_cast(buf); +inline size_t convert_valid(const char *buf, size_t len, char *latin_output) { + const uint8_t *data = reinterpret_cast(buf); size_t pos = 0; - char* start{latin_output}; + char *start{latin_output}; while (pos < len) { // try to convert the next block of 16 ASCII bytes - if (pos + 16 <= len) { // if it is safe to read 16 more bytes, check that they are ascii + if (pos + 16 <= + len) { // if it is safe to read 16 more bytes, check that they are ascii uint64_t v1; ::memcpy(&v1, data + pos, sizeof(uint64_t)); uint64_t v2; ::memcpy(&v2, data + pos + sizeof(uint64_t), sizeof(uint64_t)); - uint64_t v{v1 | v2}; // We are only interested in these bits: 1000 1000 1000 1000, so it makes sense to concatenate everything - if ((v & 0x8080808080808080) == 0) { // if NONE of these are set, e.g. all of them are zero, then everything is ASCII + uint64_t v{v1 | + v2}; // We are only interested in these bits: 1000 1000 1000 + // 1000, so it makes sense to concatenate everything + if ((v & 0x8080808080808080) == + 0) { // if NONE of these are set, e.g. all of them are zero, then + // everything is ASCII size_t final_pos = pos + 16; - while(pos < final_pos) { + while (pos < final_pos) { *latin_output++ = char(buf[pos]); pos++; } @@ -14121,12 +13313,25 @@ inline size_t convert_valid(const char* buf, size_t len, char* latin_output) { // converting one ASCII byte !!! *latin_output++ = char(leading_byte); pos++; - } else if ((leading_byte & 0b11100000) == 0b11000000) { // the first three bits indicate: + } else if ((leading_byte & 0b11100000) == + 0b11000000) { // the first three bits indicate: // We have a two-byte UTF-8 - if(pos + 1 >= len) { break; } // minimal bound checking - if ((data[pos + 1] & 0b11000000) != 0b10000000) { return 0; } // checks if the next byte is a valid continuation byte in UTF-8. A valid continuation byte starts with 10. + if (pos + 1 >= len) { + break; + } // minimal bound checking + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return 0; + } // checks if the next byte is a valid continuation byte in UTF-8. A + // valid continuation byte starts with 10. // range check - - uint32_t code_point = (leading_byte & 0b00011111) << 6 | (data[pos + 1] & 0b00111111); // assembles the Unicode code point from the two bytes. It does this by discarding the leading 110 and 10 bits from the two bytes, shifting the remaining bits of the first byte, and then combining the results with a bitwise OR operation. + uint32_t code_point = + (leading_byte & 0b00011111) << 6 | + (data[pos + 1] & + 0b00111111); // assembles the Unicode code point from the two bytes. + // It does this by discarding the leading 110 and 10 + // bits from the two bytes, shifting the remaining bits + // of the first byte, and then combining the results + // with a bitwise OR operation. *latin_output++ = char(code_point); pos += 2; } else { @@ -14137,7 +13342,7 @@ inline size_t convert_valid(const char* buf, size_t len, char* latin_output) { return latin_output - start; } -} // utf8_to_latin1 namespace +} // namespace utf8_to_latin1 } // unnamed namespace } // namespace scalar } // namespace simdutf @@ -14154,10 +13359,11 @@ namespace { namespace utf16_to_latin1 { template -inline size_t convert_valid(const char16_t* buf, size_t len, char* latin_output) { - const uint16_t *data = reinterpret_cast(buf); +inline size_t convert_valid(const char16_t *buf, size_t len, + char *latin_output) { + const uint16_t *data = reinterpret_cast(buf); size_t pos = 0; - char* start{latin_output}; + char *start{latin_output}; uint16_t word = 0; while (pos < len) { @@ -14169,7 +13375,7 @@ inline size_t convert_valid(const char16_t* buf, size_t len, char* latin_output) return latin_output - start; } -} // utf16_to_latin1 namespace +} // namespace utf16_to_latin1 } // unnamed namespace } // namespace scalar } // namespace simdutf @@ -14185,40 +13391,42 @@ namespace scalar { namespace { namespace utf32_to_latin1 { -inline size_t convert_valid(const char32_t *buf, size_t len, char *latin1_output) { +inline size_t convert_valid(const char32_t *buf, size_t len, + char *latin1_output) { const uint32_t *data = reinterpret_cast(buf); - char* start = latin1_output; + char *start = latin1_output; uint32_t utf32_char; size_t pos = 0; while (pos < len) { - utf32_char = (uint32_t) data[pos]; - - if (pos + 2 <= len) { // if it is safe to read 8 more bytes, check that they are Latin1 - uint64_t v; - ::memcpy(&v, data + pos, sizeof(uint64_t)); - if ((v & 0xFFFFFF00FFFFFF00) == 0) { - *latin1_output++ = char(buf[pos]); - *latin1_output++ = char(buf[pos + 1]); - pos += 2; - continue; - } else { - // output can not be represented in latin1 - return 0; - } - } - if ((utf32_char & 0xFFFFFF00) == 0) { - *latin1_output++ = char(utf32_char); + utf32_char = (uint32_t)data[pos]; + + if (pos + 2 <= + len) { // if it is safe to read 8 more bytes, check that they are Latin1 + uint64_t v; + ::memcpy(&v, data + pos, sizeof(uint64_t)); + if ((v & 0xFFFFFF00FFFFFF00) == 0) { + *latin1_output++ = char(buf[pos]); + *latin1_output++ = char(buf[pos + 1]); + pos += 2; + continue; } else { - // output can not be represented in latin1 - return 0; + // output can not be represented in latin1 + return 0; } - pos++; + } + if ((utf32_char & 0xFFFFFF00) == 0) { + *latin1_output++ = char(utf32_char); + } else { + // output can not be represented in latin1 + return 0; + } + pos++; } return latin1_output - start; } -} // utf32_to_latin1 namespace +} // namespace utf32_to_latin1 } // unnamed namespace } // namespace scalar } // namespace simdutf @@ -14226,12 +13434,9 @@ inline size_t convert_valid(const char32_t *buf, size_t len, char *latin1_output #endif /* end file src/scalar/utf32_to_latin1/valid_utf32_to_latin1.h */ - - SIMDUTF_PUSH_DISABLE_WARNINGS SIMDUTF_DISABLE_UNDESIRED_WARNINGS - #if SIMDUTF_IMPLEMENTATION_ARM64 /* begin file src/arm64/implementation.cpp */ /* begin file src/simdutf/arm64/begin.h */ @@ -14242,31 +13447,36 @@ namespace simdutf { namespace arm64 { namespace { #ifndef SIMDUTF_ARM64_H -#error "arm64.h must be included" + #error "arm64.h must be included" #endif using namespace simd; -simdutf_really_inline bool is_ascii(const simd8x64& input) { - simd8 bits = input.reduce_or(); - return bits.max_val() < 0b10000000u; +simdutf_really_inline bool is_ascii(const simd8x64 &input) { + simd8 bits = input.reduce_or(); + return bits.max_val() < 0b10000000u; } -simdutf_unused simdutf_really_inline simd8 must_be_continuation(const simd8 prev1, const simd8 prev2, const simd8 prev3) { - simd8 is_second_byte = prev1 >= uint8_t(0b11000000u); - simd8 is_third_byte = prev2 >= uint8_t(0b11100000u); - simd8 is_fourth_byte = prev3 >= uint8_t(0b11110000u); - // Use ^ instead of | for is_*_byte, because ^ is commutative, and the caller is using ^ as well. - // This will work fine because we only have to report errors for cases with 0-1 lead bytes. - // Multiple lead bytes implies 2 overlapping multibyte characters, and if that happens, there is - // guaranteed to be at least *one* lead byte that is part of only 1 other multibyte character. - // The error will be detected there. - return is_second_byte ^ is_third_byte ^ is_fourth_byte; +simdutf_unused simdutf_really_inline simd8 +must_be_continuation(const simd8 prev1, const simd8 prev2, + const simd8 prev3) { + simd8 is_second_byte = prev1 >= uint8_t(0b11000000u); + simd8 is_third_byte = prev2 >= uint8_t(0b11100000u); + simd8 is_fourth_byte = prev3 >= uint8_t(0b11110000u); + // Use ^ instead of | for is_*_byte, because ^ is commutative, and the caller + // is using ^ as well. This will work fine because we only have to report + // errors for cases with 0-1 lead bytes. Multiple lead bytes implies 2 + // overlapping multibyte characters, and if that happens, there is guaranteed + // to be at least *one* lead byte that is part of only 1 other multibyte + // character. The error will be detected there. + return is_second_byte ^ is_third_byte ^ is_fourth_byte; } -simdutf_really_inline simd8 must_be_2_3_continuation(const simd8 prev2, const simd8 prev3) { - simd8 is_third_byte = prev2 >= uint8_t(0b11100000u); - simd8 is_fourth_byte = prev3 >= uint8_t(0b11110000u); - return is_third_byte ^ is_fourth_byte; +simdutf_really_inline simd8 +must_be_2_3_continuation(const simd8 prev2, + const simd8 prev3) { + simd8 is_third_byte = prev2 >= uint8_t(0b11100000u); + simd8 is_fourth_byte = prev3 >= uint8_t(0b11110000u); + return is_third_byte ^ is_fourth_byte; } // common functions for utf8 conversions @@ -14274,7 +13484,8 @@ simdutf_really_inline uint16x4_t convert_utf8_3_byte_to_utf16(uint8x16_t in) { // Low half contains 10cccccc|1110aaaa // High half contains 10bbbbbb|10bbbbbb #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - const uint8x16_t sh = simdutf_make_uint8x16_t(0, 2, 3, 5, 6, 8, 9, 11, 1, 1, 4, 4, 7, 7, 10, 10); + const uint8x16_t sh = simdutf_make_uint8x16_t(0, 2, 3, 5, 6, 8, 9, 11, 1, 1, + 4, 4, 7, 7, 10, 10); #else const uint8x16_t sh = {0, 2, 3, 5, 6, 8, 9, 11, 1, 1, 4, 4, 7, 7, 10, 10}; #endif @@ -14303,8 +13514,8 @@ simdutf_really_inline uint16x4_t convert_utf8_3_byte_to_utf16(uint8x16_t in) { simdutf_really_inline uint16x8_t convert_utf8_2_byte_to_utf16(uint8x16_t in) { // Converts 6 2 byte UTF-8 characters to 6 UTF-16 characters. // Technically this calculates 8, but 6 does better and happens more often - // (The languages which use these codepoints use ASCII spaces so 8 would need to be - // in the middle of a very long word). + // (The languages which use these codepoints use ASCII spaces so 8 would need + // to be in the middle of a very long word). // 10bbbbbb 110aaaaa uint16x8_t upper = vreinterpretq_u16_u8(in); @@ -14319,12 +13530,14 @@ simdutf_really_inline uint16x8_t convert_utf8_2_byte_to_utf16(uint8x16_t in) { return composed; } -simdutf_really_inline uint16x8_t convert_utf8_1_to_2_byte_to_utf16(uint8x16_t in, size_t shufutf8_idx) { +simdutf_really_inline uint16x8_t +convert_utf8_1_to_2_byte_to_utf16(uint8x16_t in, size_t shufutf8_idx) { // Converts 6 1-2 byte UTF-8 characters to 6 UTF-16 characters. // This is a relatively easy scenario - // we process SIX (6) input code-code units. The max length in bytes of six code - // code units spanning between 1 and 2 bytes each is 12 bytes. - uint8x16_t sh = vld1q_u8(reinterpret_cast(simdutf::tables::utf8_to_utf16::shufutf8[shufutf8_idx])); + // we process SIX (6) input code-code units. The max length in bytes of six + // code code units spanning between 1 and 2 bytes each is 12 bytes. + uint8x16_t sh = vld1q_u8(reinterpret_cast( + simdutf::tables::utf8_to_utf16::shufutf8[shufutf8_idx])); // Shuffle // 1 byte: 00000000 0bbbbbbb // 2 byte: 110aaaaa 10bbbbbb @@ -14345,207 +13558,269 @@ simdutf_really_inline uint16x8_t convert_utf8_1_to_2_byte_to_utf16(uint8x16_t in /* begin file src/arm64/arm_validate_utf16.cpp */ template -const char16_t* arm_validate_utf16(const char16_t* input, size_t size) { - const char16_t* end = input + size; - const auto v_d8 = simd8::splat(0xd8); - const auto v_f8 = simd8::splat(0xf8); - const auto v_fc = simd8::splat(0xfc); - const auto v_dc = simd8::splat(0xdc); - while (end - input >= 16) { - // 0. Load data: since the validation takes into account only higher - // byte of each word, we compress the two vectors into one which - // consists only the higher bytes. - auto in0 = simd16(input); - auto in1 = simd16(input + simd16::SIZE / sizeof(char16_t)); - if (!match_system(big_endian)) { - in0 = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in0))); - in1 = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in1))); - } - const auto t0 = in0.shr<8>(); - const auto t1 = in1.shr<8>(); - const simd8 in = simd16::pack(t0, t1); - // 1. Check whether we have any 0xD800..DFFF word (0b1101'1xxx'yyyy'yyyy). - const uint64_t surrogates_wordmask = ((in & v_f8) == v_d8).to_bitmask64(); - if(surrogates_wordmask == 0) { - input += 16; - } else { - // 2. We have some surrogates that have to be distinguished: - // - low surrogates: 0b1101'10xx'yyyy'yyyy (0xD800..0xDBFF) - // - high surrogates: 0b1101'11xx'yyyy'yyyy (0xDC00..0xDFFF) - // - // Fact: high surrogate has 11th bit set (3rd bit in the higher word) - - // V - non-surrogate code units - // V = not surrogates_wordmask - const uint64_t V = ~surrogates_wordmask; - - // H - word-mask for high surrogates: the six highest bits are 0b1101'11 - const auto vH = ((in & v_fc) == v_dc); - const uint64_t H = vH.to_bitmask64(); - - // L - word mask for low surrogates - // L = not H and surrogates_wordmask - const uint64_t L = ~H & surrogates_wordmask; - - const uint64_t a = L & (H >> 4); // A low surrogate must be followed by high one. - // (A low surrogate placed in the 7th register's word - // is an exception we handle.) - const uint64_t b = a << 4; // Just mark that the opposite fact is hold, - // thanks to that we have only two masks for valid case. - const uint64_t c = V | a | b; // Combine all the masks into the final one. - if (c == ~0ull) { - // The whole input register contains valid UTF-16, i.e., - // either single code units or proper surrogate pairs. - input += 16; - } else if (c == 0xfffffffffffffffull) { - // The 15 lower code units of the input register contains valid UTF-16. - // The 15th word may be either a low or high surrogate. It the next - // iteration we 1) check if the low surrogate is followed by a high - // one, 2) reject sole high surrogate. - input += 15; - } else { - return nullptr; - } - } +const char16_t *arm_validate_utf16(const char16_t *input, size_t size) { + const char16_t *end = input + size; + const auto v_d8 = simd8::splat(0xd8); + const auto v_f8 = simd8::splat(0xf8); + const auto v_fc = simd8::splat(0xfc); + const auto v_dc = simd8::splat(0xdc); + while (end - input >= 16) { + // 0. Load data: since the validation takes into account only higher + // byte of each word, we compress the two vectors into one which + // consists only the higher bytes. + auto in0 = simd16(input); + auto in1 = + simd16(input + simd16::SIZE / sizeof(char16_t)); + if (!match_system(big_endian)) { + in0 = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in0))); + in1 = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in1))); + } + const auto t0 = in0.shr<8>(); + const auto t1 = in1.shr<8>(); + const simd8 in = simd16::pack(t0, t1); + // 1. Check whether we have any 0xD800..DFFF word (0b1101'1xxx'yyyy'yyyy). + const uint64_t surrogates_wordmask = ((in & v_f8) == v_d8).to_bitmask64(); + if (surrogates_wordmask == 0) { + input += 16; + } else { + // 2. We have some surrogates that have to be distinguished: + // - low surrogates: 0b1101'10xx'yyyy'yyyy (0xD800..0xDBFF) + // - high surrogates: 0b1101'11xx'yyyy'yyyy (0xDC00..0xDFFF) + // + // Fact: high surrogate has 11th bit set (3rd bit in the higher word) + + // V - non-surrogate code units + // V = not surrogates_wordmask + const uint64_t V = ~surrogates_wordmask; + + // H - word-mask for high surrogates: the six highest bits are 0b1101'11 + const auto vH = ((in & v_fc) == v_dc); + const uint64_t H = vH.to_bitmask64(); + + // L - word mask for low surrogates + // L = not H and surrogates_wordmask + const uint64_t L = ~H & surrogates_wordmask; + + const uint64_t a = + L & (H >> 4); // A low surrogate must be followed by high one. + // (A low surrogate placed in the 7th register's word + // is an exception we handle.) + const uint64_t b = + a << 4; // Just mark that the opposite fact is hold, + // thanks to that we have only two masks for valid case. + const uint64_t c = V | a | b; // Combine all the masks into the final one. + if (c == ~0ull) { + // The whole input register contains valid UTF-16, i.e., + // either single code units or proper surrogate pairs. + input += 16; + } else if (c == 0xfffffffffffffffull) { + // The 15 lower code units of the input register contains valid UTF-16. + // The 15th word may be either a low or high surrogate. It the next + // iteration we 1) check if the low surrogate is followed by a high + // one, 2) reject sole high surrogate. + input += 15; + } else { + return nullptr; + } } - return input; + } + return input; } - template -const result arm_validate_utf16_with_errors(const char16_t* input, size_t size) { - const char16_t* start = input; - const char16_t* end = input + size; - - const auto v_d8 = simd8::splat(0xd8); - const auto v_f8 = simd8::splat(0xf8); - const auto v_fc = simd8::splat(0xfc); - const auto v_dc = simd8::splat(0xdc); - while (input + 16 < end) { - // 0. Load data: since the validation takes into account only higher - // byte of each word, we compress the two vectors into one which - // consists only the higher bytes. - auto in0 = simd16(input); - auto in1 = simd16(input + simd16::SIZE / sizeof(char16_t)); - - if (!match_system(big_endian)) { - in0 = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in0))); - in1 = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in1))); - } - const auto t0 = in0.shr<8>(); - const auto t1 = in1.shr<8>(); - const simd8 in = simd16::pack(t0, t1); - // 1. Check whether we have any 0xD800..DFFF word (0b1101'1xxx'yyyy'yyyy). - const uint64_t surrogates_wordmask = ((in & v_f8) == v_d8).to_bitmask64(); - if(surrogates_wordmask == 0) { - input += 16; - } else { - // 2. We have some surrogates that have to be distinguished: - // - low surrogates: 0b1101'10xx'yyyy'yyyy (0xD800..0xDBFF) - // - high surrogates: 0b1101'11xx'yyyy'yyyy (0xDC00..0xDFFF) - // - // Fact: high surrogate has 11th bit set (3rd bit in the higher word) - - // V - non-surrogate code units - // V = not surrogates_wordmask - const uint64_t V = ~surrogates_wordmask; - - // H - word-mask for high surrogates: the six highest bits are 0b1101'11 - const auto vH = ((in & v_fc) == v_dc); - const uint64_t H = vH.to_bitmask64(); - - // L - word mask for low surrogates - // L = not H and surrogates_wordmask - const uint64_t L = ~H & surrogates_wordmask; - - const uint64_t a = L & (H >> 4); // A low surrogate must be followed by high one. - // (A low surrogate placed in the 7th register's word - // is an exception we handle.) - const uint64_t b = a << 4; // Just mark that the opposite fact is hold, - // thanks to that we have only two masks for valid case. - const uint64_t c = V | a | b; // Combine all the masks into the final one. - if (c == ~0ull) { - // The whole input register contains valid UTF-16, i.e., - // either single code units or proper surrogate pairs. - input += 16; - } else if (c == 0xfffffffffffffffull) { - // The 15 lower code units of the input register contains valid UTF-16. - // The 15th word may be either a low or high surrogate. It the next - // iteration we 1) check if the low surrogate is followed by a high - // one, 2) reject sole high surrogate. - input += 15; - } else { - return result(error_code::SURROGATE, input - start); - } - } +const result arm_validate_utf16_with_errors(const char16_t *input, + size_t size) { + const char16_t *start = input; + const char16_t *end = input + size; + + const auto v_d8 = simd8::splat(0xd8); + const auto v_f8 = simd8::splat(0xf8); + const auto v_fc = simd8::splat(0xfc); + const auto v_dc = simd8::splat(0xdc); + while (input + 16 < end) { + // 0. Load data: since the validation takes into account only higher + // byte of each word, we compress the two vectors into one which + // consists only the higher bytes. + auto in0 = simd16(input); + auto in1 = + simd16(input + simd16::SIZE / sizeof(char16_t)); + + if (!match_system(big_endian)) { + in0 = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in0))); + in1 = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in1))); + } + const auto t0 = in0.shr<8>(); + const auto t1 = in1.shr<8>(); + const simd8 in = simd16::pack(t0, t1); + // 1. Check whether we have any 0xD800..DFFF word (0b1101'1xxx'yyyy'yyyy). + const uint64_t surrogates_wordmask = ((in & v_f8) == v_d8).to_bitmask64(); + if (surrogates_wordmask == 0) { + input += 16; + } else { + // 2. We have some surrogates that have to be distinguished: + // - low surrogates: 0b1101'10xx'yyyy'yyyy (0xD800..0xDBFF) + // - high surrogates: 0b1101'11xx'yyyy'yyyy (0xDC00..0xDFFF) + // + // Fact: high surrogate has 11th bit set (3rd bit in the higher word) + + // V - non-surrogate code units + // V = not surrogates_wordmask + const uint64_t V = ~surrogates_wordmask; + + // H - word-mask for high surrogates: the six highest bits are 0b1101'11 + const auto vH = ((in & v_fc) == v_dc); + const uint64_t H = vH.to_bitmask64(); + + // L - word mask for low surrogates + // L = not H and surrogates_wordmask + const uint64_t L = ~H & surrogates_wordmask; + + const uint64_t a = + L & (H >> 4); // A low surrogate must be followed by high one. + // (A low surrogate placed in the 7th register's word + // is an exception we handle.) + const uint64_t b = + a << 4; // Just mark that the opposite fact is hold, + // thanks to that we have only two masks for valid case. + const uint64_t c = V | a | b; // Combine all the masks into the final one. + if (c == ~0ull) { + // The whole input register contains valid UTF-16, i.e., + // either single code units or proper surrogate pairs. + input += 16; + } else if (c == 0xfffffffffffffffull) { + // The 15 lower code units of the input register contains valid UTF-16. + // The 15th word may be either a low or high surrogate. It the next + // iteration we 1) check if the low surrogate is followed by a high + // one, 2) reject sole high surrogate. + input += 15; + } else { + return result(error_code::SURROGATE, input - start); + } } - return result(error_code::SUCCESS, input - start); + } + return result(error_code::SUCCESS, input - start); } /* end file src/arm64/arm_validate_utf16.cpp */ /* begin file src/arm64/arm_validate_utf32le.cpp */ -const char32_t* arm_validate_utf32le(const char32_t* input, size_t size) { - const char32_t* end = input + size; +const char32_t *arm_validate_utf32le(const char32_t *input, size_t size) { + const char32_t *end = input + size; - const uint32x4_t standardmax = vmovq_n_u32(0x10ffff); - const uint32x4_t offset = vmovq_n_u32(0xffff2000); - const uint32x4_t standardoffsetmax = vmovq_n_u32(0xfffff7ff); - uint32x4_t currentmax = vmovq_n_u32(0x0); - uint32x4_t currentoffsetmax = vmovq_n_u32(0x0); + const uint32x4_t standardmax = vmovq_n_u32(0x10ffff); + const uint32x4_t offset = vmovq_n_u32(0xffff2000); + const uint32x4_t standardoffsetmax = vmovq_n_u32(0xfffff7ff); + uint32x4_t currentmax = vmovq_n_u32(0x0); + uint32x4_t currentoffsetmax = vmovq_n_u32(0x0); - while (end - input >= 4) { - const uint32x4_t in = vld1q_u32(reinterpret_cast(input)); - currentmax = vmaxq_u32(in,currentmax); - currentoffsetmax = vmaxq_u32(vaddq_u32(in, offset), currentoffsetmax); - input += 4; - } + while (end - input >= 4) { + const uint32x4_t in = vld1q_u32(reinterpret_cast(input)); + currentmax = vmaxq_u32(in, currentmax); + currentoffsetmax = vmaxq_u32(vaddq_u32(in, offset), currentoffsetmax); + input += 4; + } - uint32x4_t is_zero = veorq_u32(vmaxq_u32(currentmax, standardmax), standardmax); - if(vmaxvq_u32(is_zero) != 0) { - return nullptr; - } + uint32x4_t is_zero = + veorq_u32(vmaxq_u32(currentmax, standardmax), standardmax); + if (vmaxvq_u32(is_zero) != 0) { + return nullptr; + } - is_zero = veorq_u32(vmaxq_u32(currentoffsetmax, standardoffsetmax), standardoffsetmax); - if(vmaxvq_u32(is_zero) != 0) { - return nullptr; - } + is_zero = veorq_u32(vmaxq_u32(currentoffsetmax, standardoffsetmax), + standardoffsetmax); + if (vmaxvq_u32(is_zero) != 0) { + return nullptr; + } - return input; + return input; } +const result arm_validate_utf32le_with_errors(const char32_t *input, + size_t size) { + const char32_t *start = input; + const char32_t *end = input + size; -const result arm_validate_utf32le_with_errors(const char32_t* input, size_t size) { - const char32_t* start = input; - const char32_t* end = input + size; + const uint32x4_t standardmax = vmovq_n_u32(0x10ffff); + const uint32x4_t offset = vmovq_n_u32(0xffff2000); + const uint32x4_t standardoffsetmax = vmovq_n_u32(0xfffff7ff); + uint32x4_t currentmax = vmovq_n_u32(0x0); + uint32x4_t currentoffsetmax = vmovq_n_u32(0x0); - const uint32x4_t standardmax = vmovq_n_u32(0x10ffff); - const uint32x4_t offset = vmovq_n_u32(0xffff2000); - const uint32x4_t standardoffsetmax = vmovq_n_u32(0xfffff7ff); - uint32x4_t currentmax = vmovq_n_u32(0x0); - uint32x4_t currentoffsetmax = vmovq_n_u32(0x0); + while (end - input >= 4) { + const uint32x4_t in = vld1q_u32(reinterpret_cast(input)); + currentmax = vmaxq_u32(in, currentmax); + currentoffsetmax = vmaxq_u32(vaddq_u32(in, offset), currentoffsetmax); - while (end - input >= 4) { - const uint32x4_t in = vld1q_u32(reinterpret_cast(input)); - currentmax = vmaxq_u32(in,currentmax); - currentoffsetmax = vmaxq_u32(vaddq_u32(in, offset), currentoffsetmax); + uint32x4_t is_zero = + veorq_u32(vmaxq_u32(currentmax, standardmax), standardmax); + if (vmaxvq_u32(is_zero) != 0) { + return result(error_code::TOO_LARGE, input - start); + } - uint32x4_t is_zero = veorq_u32(vmaxq_u32(currentmax, standardmax), standardmax); - if(vmaxvq_u32(is_zero) != 0) { - return result(error_code::TOO_LARGE, input - start); - } + is_zero = veorq_u32(vmaxq_u32(currentoffsetmax, standardoffsetmax), + standardoffsetmax); + if (vmaxvq_u32(is_zero) != 0) { + return result(error_code::SURROGATE, input - start); + } - is_zero = veorq_u32(vmaxq_u32(currentoffsetmax, standardoffsetmax), standardoffsetmax); - if(vmaxvq_u32(is_zero) != 0) { - return result(error_code::SURROGATE, input - start); - } + input += 4; + } - input += 4; + return result(error_code::SUCCESS, input - start); +} +/* end file src/arm64/arm_validate_utf32le.cpp */ + +/* begin file src/arm64/arm_convert_latin1_to_utf16.cpp */ +template +std::pair +arm_convert_latin1_to_utf16(const char *buf, size_t len, + char16_t *utf16_output) { + const char *end = buf + len; + + while (end - buf >= 16) { + uint8x16_t in8 = vld1q_u8(reinterpret_cast(buf)); + uint16x8_t inlow = vmovl_u8(vget_low_u8(in8)); + if (!match_system(big_endian)) { + inlow = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(inlow))); } + vst1q_u16(reinterpret_cast(utf16_output), inlow); + uint16x8_t inhigh = vmovl_u8(vget_high_u8(in8)); + if (!match_system(big_endian)) { + inhigh = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(inhigh))); + } + vst1q_u16(reinterpret_cast(utf16_output + 8), inhigh); + utf16_output += 16; + buf += 16; + } - return result(error_code::SUCCESS, input - start); + return std::make_pair(buf, utf16_output); } -/* end file src/arm64/arm_validate_utf32le.cpp */ +/* end file src/arm64/arm_convert_latin1_to_utf16.cpp */ +/* begin file src/arm64/arm_convert_latin1_to_utf32.cpp */ +std::pair +arm_convert_latin1_to_utf32(const char *buf, size_t len, + char32_t *utf32_output) { + const char *end = buf + len; + while (end - buf >= 16) { + uint8x16_t in8 = vld1q_u8(reinterpret_cast(buf)); + uint16x8_t in8low = vmovl_u8(vget_low_u8(in8)); + uint32x4_t in16lowlow = vmovl_u16(vget_low_u16(in8low)); + uint32x4_t in16lowhigh = vmovl_u16(vget_high_u16(in8low)); + uint16x8_t in8high = vmovl_u8(vget_high_u8(in8)); + uint32x4_t in8highlow = vmovl_u16(vget_low_u16(in8high)); + uint32x4_t in8highhigh = vmovl_u16(vget_high_u16(in8high)); + vst1q_u32(reinterpret_cast(utf32_output), in16lowlow); + vst1q_u32(reinterpret_cast(utf32_output + 4), in16lowhigh); + vst1q_u32(reinterpret_cast(utf32_output + 8), in8highlow); + vst1q_u32(reinterpret_cast(utf32_output + 12), in8highhigh); + + utf32_output += 16; + buf += 16; + } + + return std::make_pair(buf, utf32_output); +} +/* end file src/arm64/arm_convert_latin1_to_utf32.cpp */ /* begin file src/arm64/arm_convert_latin1_to_utf8.cpp */ /* Returns a pair: the first unprocessed byte from buf and utf8_output @@ -14594,8 +13869,8 @@ arm_convert_latin1_to_utf8(const char *latin1_input, size_t len, vreinterpretq_u8_u16(vbslq_u16(one_byte_bytemask, in16, t4)); // 3. prepare bitmask for 8-bit lookup #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - const uint16x8_t mask = simdutf_make_uint16x8_t(0x0001, 0x0004, 0x0010, 0x0040, - 0x0002, 0x0008, 0x0020, 0x0080); + const uint16x8_t mask = simdutf_make_uint16x8_t( + 0x0001, 0x0004, 0x0010, 0x0040, 0x0002, 0x0008, 0x0020, 0x0080); #else const uint16x8_t mask = {0x0001, 0x0004, 0x0010, 0x0040, 0x0002, 0x0008, 0x0020, 0x0080}; @@ -14618,117 +13893,149 @@ arm_convert_latin1_to_utf8(const char *latin1_input, size_t len, return std::make_pair(latin1_input, reinterpret_cast(utf8_output)); } /* end file src/arm64/arm_convert_latin1_to_utf8.cpp */ -/* begin file src/arm64/arm_convert_latin1_to_utf16.cpp */ -template -std::pair arm_convert_latin1_to_utf16(const char* buf, size_t len, char16_t* utf16_output) { - const char* end = buf + len; - - while (end - buf >= 16) { - uint8x16_t in8 = vld1q_u8(reinterpret_cast(buf)); - uint16x8_t inlow = vmovl_u8(vget_low_u8(in8)); - if (!match_system(big_endian)) { inlow = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(inlow))); } - vst1q_u16(reinterpret_cast(utf16_output), inlow); - uint16x8_t inhigh = vmovl_u8(vget_high_u8(in8)); - if (!match_system(big_endian)) { inhigh = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(inhigh))); } - vst1q_u16(reinterpret_cast(utf16_output+8), inhigh); - utf16_output += 16; - buf += 16; - } - - return std::make_pair(buf, utf16_output); -} -/* end file src/arm64/arm_convert_latin1_to_utf16.cpp */ -/* begin file src/arm64/arm_convert_latin1_to_utf32.cpp */ -std::pair arm_convert_latin1_to_utf32(const char* buf, size_t len, char32_t* utf32_output) { - const char* end = buf + len; - - while (end - buf >= 16) { - uint8x16_t in8 = vld1q_u8(reinterpret_cast(buf)); - uint16x8_t in8low = vmovl_u8(vget_low_u8(in8)); - uint32x4_t in16lowlow = vmovl_u16(vget_low_u16(in8low)); - uint32x4_t in16lowhigh = vmovl_u16(vget_high_u16(in8low)); - uint16x8_t in8high = vmovl_u8(vget_high_u8(in8)); - uint32x4_t in8highlow = vmovl_u16(vget_low_u16(in8high)); - uint32x4_t in8highhigh = vmovl_u16(vget_high_u16(in8high)); - vst1q_u32(reinterpret_cast(utf32_output), in16lowlow); - vst1q_u32(reinterpret_cast(utf32_output+4), in16lowhigh); - vst1q_u32(reinterpret_cast(utf32_output+8), in8highlow); - vst1q_u32(reinterpret_cast(utf32_output+12), in8highhigh); - - utf32_output += 16; - buf += 16; - } - - return std::make_pair(buf, utf32_output); -} -/* end file src/arm64/arm_convert_latin1_to_utf32.cpp */ -/* begin file src/arm64/arm_convert_utf8_to_utf16.cpp */ +/* begin file src/arm64/arm_convert_utf8_to_latin1.cpp */ // Convert up to 16 bytes from utf8 to utf16 using a mask indicating the // end of the code points. Only the least significant 12 bits of the mask // are accessed. // It returns how many bytes were consumed (up to 16, usually 12). -template -size_t convert_masked_utf8_to_utf16(const char *input, - uint64_t utf8_end_of_code_point_mask, - char16_t *&utf16_output) { +size_t convert_masked_utf8_to_latin1(const char *input, + uint64_t utf8_end_of_code_point_mask, + char *&latin1_output) { // we use an approach where we try to process up to 12 input bytes. // Why 12 input bytes and not 16? Because we are concerned with the size of // the lookup tables. Also 12 is nicely divisible by two and three. // - uint8x16_t in = vld1q_u8(reinterpret_cast(input)); + uint8x16_t in = vld1q_u8(reinterpret_cast(input)); const uint16_t input_utf8_end_of_code_point_mask = utf8_end_of_code_point_mask & 0xfff; // - // Optimization note: our main path below is load-latency dependent. Thus it is maybe - // beneficial to have fast paths that depend on branch prediction but have less latency. - // This results in more instructions but, potentially, also higher speeds. + // Optimization note: our main path below is load-latency dependent. Thus it + // is maybe beneficial to have fast paths that depend on branch prediction but + // have less latency. This results in more instructions but, potentially, also + // higher speeds. // We first try a few fast paths. // The obvious first test is ASCII, which actually consumes the full 16. - if((utf8_end_of_code_point_mask & 0xFFFF) == 0xffff) { - // We process in chunks of 16 bytes - // The routine in simd.h is reused. - simd8 temp{vreinterpretq_s8_u8(in)}; - temp.store_ascii_as_utf16(utf16_output); - utf16_output += 16; // We wrote 16 16-bit characters. - return 16; // We consumed 16 bytes. + if (utf8_end_of_code_point_mask == 0xfff) { + // We process in chunks of 12 bytes + vst1q_u8(reinterpret_cast(latin1_output), in); + latin1_output += 12; // We wrote 12 18-bit characters. + return 12; // We consumed 12 bytes. } + /// We do not have a fast path available, or the fast path is unimportant, so + /// we fallback. + const uint8_t idx = simdutf::tables::utf8_to_utf16::utf8bigindex + [input_utf8_end_of_code_point_mask][0]; - // 3 byte sequences are the next most common, as seen in CJK, which has long sequences - // of these. - if (input_utf8_end_of_code_point_mask == 0x924) { - // We want to take 4 3-byte UTF-8 code units and turn them into 4 2-byte UTF-16 code units. - uint16x4_t composed = convert_utf8_3_byte_to_utf16(in); - // Byte swap if necessary - if (!match_system(big_endian)) { - composed = vreinterpret_u16_u8(vrev16_u8(vreinterpret_u8_u16(composed))); - } - vst1_u16(reinterpret_cast(utf16_output), composed); - utf16_output += 4; // We wrote 4 16-bit characters. - return 12; // We consumed 12 bytes. - } + const uint8_t consumed = simdutf::tables::utf8_to_utf16::utf8bigindex + [input_utf8_end_of_code_point_mask][1]; + // this indicates an invalid input: + if (idx >= 64) { + return consumed; + } + // Here we should have (idx < 64), if not, there is a bug in the validation or + // elsewhere. SIX (6) input code-code units this is a relatively easy scenario + // we process SIX (6) input code-code units. The max length in bytes of six + // code code units spanning between 1 and 2 bytes each is 12 bytes. Converts 6 + // 1-2 byte UTF-8 characters to 6 UTF-16 characters. This is a relatively easy + // scenario we process SIX (6) input code-code units. The max length in bytes + // of six code code units spanning between 1 and 2 bytes each is 12 bytes. + uint8x16_t sh = vld1q_u8(reinterpret_cast( + simdutf::tables::utf8_to_utf16::shufutf8[idx])); + // Shuffle + // 1 byte: 00000000 0bbbbbbb + // 2 byte: 110aaaaa 10bbbbbb + uint16x8_t perm = vreinterpretq_u16_u8(vqtbl1q_u8(in, sh)); + // Mask + // 1 byte: 00000000 0bbbbbbb + // 2 byte: 00000000 00bbbbbb + uint16x8_t ascii = vandq_u16(perm, vmovq_n_u16(0x7f)); // 6 or 7 bits + // 1 byte: 00000000 00000000 + // 2 byte: 000aaaaa 00000000 + uint16x8_t highbyte = vandq_u16(perm, vmovq_n_u16(0x1f00)); // 5 bits + // Combine with a shift right accumulate + // 1 byte: 00000000 0bbbbbbb + // 2 byte: 00000aaa aabbbbbb + uint16x8_t composed = vsraq_n_u16(ascii, highbyte, 2); + // writing 8 bytes even though we only care about the first 6 bytes. + uint8x8_t latin1_packed = vmovn_u16(composed); + vst1_u8(reinterpret_cast(latin1_output), latin1_packed); + latin1_output += 6; // We wrote 6 bytes. + return consumed; +} +/* end file src/arm64/arm_convert_utf8_to_latin1.cpp */ +/* begin file src/arm64/arm_convert_utf8_to_utf16.cpp */ +// Convert up to 16 bytes from utf8 to utf16 using a mask indicating the +// end of the code points. Only the least significant 12 bits of the mask +// are accessed. +// It returns how many bytes were consumed (up to 16, usually 12). +template +size_t convert_masked_utf8_to_utf16(const char *input, + uint64_t utf8_end_of_code_point_mask, + char16_t *&utf16_output) { + // we use an approach where we try to process up to 12 input bytes. + // Why 12 input bytes and not 16? Because we are concerned with the size of + // the lookup tables. Also 12 is nicely divisible by two and three. + // + uint8x16_t in = vld1q_u8(reinterpret_cast(input)); + const uint16_t input_utf8_end_of_code_point_mask = + utf8_end_of_code_point_mask & 0xfff; + // + // Optimization note: our main path below is load-latency dependent. Thus it + // is maybe beneficial to have fast paths that depend on branch prediction but + // have less latency. This results in more instructions but, potentially, also + // higher speeds. + + // We first try a few fast paths. + // The obvious first test is ASCII, which actually consumes the full 16. + if ((utf8_end_of_code_point_mask & 0xFFFF) == 0xffff) { + // We process in chunks of 16 bytes + // The routine in simd.h is reused. + simd8 temp{vreinterpretq_s8_u8(in)}; + temp.store_ascii_as_utf16(utf16_output); + utf16_output += 16; // We wrote 16 16-bit characters. + return 16; // We consumed 16 bytes. + } + + // 3 byte sequences are the next most common, as seen in CJK, which has long + // sequences of these. + if (input_utf8_end_of_code_point_mask == 0x924) { + // We want to take 4 3-byte UTF-8 code units and turn them into 4 2-byte + // UTF-16 code units. + uint16x4_t composed = convert_utf8_3_byte_to_utf16(in); + // Byte swap if necessary + if (!match_system(big_endian)) { + composed = vreinterpret_u16_u8(vrev16_u8(vreinterpret_u8_u16(composed))); + } + vst1_u16(reinterpret_cast(utf16_output), composed); + utf16_output += 4; // We wrote 4 16-bit characters. + return 12; // We consumed 12 bytes. + } // 2 byte sequences occur in short bursts in languages like Greek and Russian. if ((utf8_end_of_code_point_mask & 0xFFF) == 0xaaa) { - // We want to take 6 2-byte UTF-8 code units and turn them into 6 2-byte UTF-16 code units. + // We want to take 6 2-byte UTF-8 code units and turn them into 6 2-byte + // UTF-16 code units. uint16x8_t composed = convert_utf8_2_byte_to_utf16(in); // Byte swap if necessary if (!match_system(big_endian)) { - composed = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(composed))); + composed = + vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(composed))); } vst1q_u16(reinterpret_cast(utf16_output), composed); utf16_output += 6; // We wrote 6 16-bit characters. - return 12; // We consumed 12 bytes. + return 12; // We consumed 12 bytes. } - /// We do not have a fast path available, or the fast path is unimportant, so we fallback. - const uint8_t idx = - simdutf::tables::utf8_to_utf16::utf8bigindex[input_utf8_end_of_code_point_mask][0]; + /// We do not have a fast path available, or the fast path is unimportant, so + /// we fallback. + const uint8_t idx = simdutf::tables::utf8_to_utf16::utf8bigindex + [input_utf8_end_of_code_point_mask][0]; - const uint8_t consumed = - simdutf::tables::utf8_to_utf16::utf8bigindex[input_utf8_end_of_code_point_mask][1]; + const uint8_t consumed = simdutf::tables::utf8_to_utf16::utf8bigindex + [input_utf8_end_of_code_point_mask][1]; if (idx < 64) { // SIX (6) input code-code units @@ -14736,16 +14043,18 @@ size_t convert_masked_utf8_to_utf16(const char *input, uint16x8_t composed = convert_utf8_1_to_2_byte_to_utf16(in, idx); // Byte swap if necessary if (!match_system(big_endian)) { - composed = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(composed))); + composed = + vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(composed))); } // Store - vst1q_u16(reinterpret_cast(utf16_output), composed); + vst1q_u16(reinterpret_cast(utf16_output), composed); utf16_output += 6; // We wrote 6 16-bit characters. return consumed; } else if (idx < 145) { // FOUR (4) input code-code units // UTF-16 and UTF-32 use similar algorithms, but UTF-32 skips the narrowing. - uint8x16_t sh = vld1q_u8(reinterpret_cast(simdutf::tables::utf8_to_utf16::shufutf8[idx])); + uint8x16_t sh = vld1q_u8(reinterpret_cast( + simdutf::tables::utf8_to_utf16::shufutf8[idx])); // XXX: depending on the system scalar instructions might be faster. // 1 byte: 00000000 00000000 0ccccccc // 2 byte: 00000000 110bbbbb 10cccccc @@ -14783,19 +14092,19 @@ size_t convert_masked_utf8_to_utf16(const char *input, if (!match_system(big_endian)) { composed = vreinterpret_u16_u8(vrev16_u8(vreinterpret_u8_u16(composed))); } - vst1_u16(reinterpret_cast(utf16_output), composed); + vst1_u16(reinterpret_cast(utf16_output), composed); utf16_output += 4; // We wrote 4 16-bit codepoints return consumed; } else if (idx < 209) { // THREE (3) input code-code units if (input_utf8_end_of_code_point_mask == 0x888) { - // We want to take 3 4-byte UTF-8 code units and turn them into 3 4-byte UTF-16 pairs. - // Generating surrogate pairs is a little tricky though, but it is easier when we - // can assume they are all pairs. - // This version does not use the LUT, but 4 byte sequences are less common and the - // overhead of the extra memory access is less important than the early branch overhead - // in shorter sequences. + // We want to take 3 4-byte UTF-8 code units and turn them into 3 4-byte + // UTF-16 pairs. Generating surrogate pairs is a little tricky though, but + // it is easier when we can assume they are all pairs. This version does + // not use the LUT, but 4 byte sequences are less common and the overhead + // of the extra memory access is less important than the early branch + // overhead in shorter sequences. // Swap byte pairs // 10dddddd 10cccccc|10bbbbbb 11110aaa @@ -14804,10 +14113,9 @@ size_t convert_masked_utf8_to_utf16(const char *input, // Shift left 2 bits // cccccc00 dddddd00 xxxxxxxx bbbbbb00 uint32x4_t shift = vreinterpretq_u32_u8(vshlq_n_u8(swap, 2)); - // Create a magic number containing the low 2 bits of the trail surrogate and all the - // corrections needed to create the pair. - // UTF-8 4b prefix = -0x0000|0xF000 - // surrogate offset = -0x0000|0x0040 (0x10000 << 6) + // Create a magic number containing the low 2 bits of the trail surrogate + // and all the corrections needed to create the pair. UTF-8 4b prefix = + // -0x0000|0xF000 surrogate offset = -0x0000|0x0040 (0x10000 << 6) // surrogate high = +0x0000|0xD800 // surrogate low = +0xDC00|0x0000 // ------------------------------- @@ -14815,34 +14123,42 @@ size_t convert_masked_utf8_to_utf16(const char *input, uint32x4_t magic = vmovq_n_u32(0xDC00E7C0); // Generate unadjusted trail surrogate minus lowest 2 bits // xxxxxxxx xxxxxxxx|11110aaa bbbbbb00 - uint32x4_t trail = vbslq_u32(vmovq_n_u32(0x0000FF00), vreinterpretq_u32_u8(swap), shift); + uint32x4_t trail = + vbslq_u32(vmovq_n_u32(0x0000FF00), vreinterpretq_u32_u8(swap), shift); // Insert low 2 bits of trail surrogate to magic number for later // 11011100 00000000 11100111 110000cc - uint16x8_t magic_with_low_2 = vreinterpretq_u16_u32(vsraq_n_u32(magic, shift, 30)); + uint16x8_t magic_with_low_2 = + vreinterpretq_u16_u32(vsraq_n_u32(magic, shift, 30)); // Generate lead surrogate // xxxxcccc ccdddddd|xxxxxxxx xxxxxxxx - uint32x4_t lead = vreinterpretq_u32_u16(vsliq_n_u16(vreinterpretq_u16_u8(swap), vreinterpretq_u16_u8(in), 6)); + uint32x4_t lead = vreinterpretq_u32_u16( + vsliq_n_u16(vreinterpretq_u16_u8(swap), vreinterpretq_u16_u8(in), 6)); // Mask out lead // 000000cc ccdddddd|xxxxxxxx xxxxxxxx lead = vbicq_u32(lead, vmovq_n_u32(uint32_t(~0x03FFFFFF))); // Blend pairs // 000000cc ccdddddd|11110aaa bbbbbb00 - uint16x8_t blend = vreinterpretq_u16_u32(vbslq_u32(vmovq_n_u32(0x0000FFFF), trail, lead)); + uint16x8_t blend = vreinterpretq_u16_u32( + vbslq_u32(vmovq_n_u32(0x0000FFFF), trail, lead)); // Add magic number to finish the result // 110111CC CCDDDDDD|110110AA BBBBBBCC uint16x8_t composed = vaddq_u16(blend, magic_with_low_2); // Byte swap if necessary if (!match_system(big_endian)) { - composed = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(composed))); + composed = + vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(composed))); } uint16_t buffer[8]; vst1q_u16(reinterpret_cast(buffer), composed); - for(int k = 0; k < 6; k++) { utf16_output[k] = buffer[k]; } // the loop might compiler to a couple of instructions. + for (int k = 0; k < 6; k++) { + utf16_output[k] = buffer[k]; + } // the loop might compiler to a couple of instructions. utf16_output += 6; // We wrote 3 32-bit surrogate pairs. - return 12; // We consumed 12 bytes. + return 12; // We consumed 12 bytes. } // 3 1-4 byte sequences - uint8x16_t sh = vld1q_u8(reinterpret_cast(simdutf::tables::utf8_to_utf16::shufutf8[idx])); + uint8x16_t sh = vld1q_u8(reinterpret_cast( + simdutf::tables::utf8_to_utf16::shufutf8[idx])); // 1 byte: 00000000 00000000 00000000 0ddddddd // 3 byte: 00000000 00000000 110ccccc 10dddddd @@ -14850,52 +14166,56 @@ size_t convert_masked_utf8_to_utf16(const char *input, // 4 byte: 11110aaa 10bbbbbb 10cccccc 10dddddd uint32x4_t perm = vreinterpretq_u32_u8(vqtbl1q_u8(in, sh)); // added to fix issue https://github.com/simdutf/simdutf/issues/514 - // We only want to write 2 * 16-bit code units when that is actually what we have. - // Unfortunately, we cannot trust the input. So it is possible to get 0xff as an input byte - // and it should not result in a surrogate pair. We need to check for that. + // We only want to write 2 * 16-bit code units when that is actually what we + // have. Unfortunately, we cannot trust the input. So it is possible to get + // 0xff as an input byte and it should not result in a surrogate pair. We + // need to check for that. uint32_t permbuffer[4]; vst1q_u32(permbuffer, perm); // Mask the low and middle bytes // 00000000 00000000 00000000 0ddddddd uint32x4_t ascii = vandq_u32(perm, vmovq_n_u32(0x7f)); - // Because the surrogates need more work, the high surrogate is computed first. + // Because the surrogates need more work, the high surrogate is computed + // first. uint32x4_t middlehigh = vshlq_n_u32(perm, 2); // 00000000 00000000 00cccccc 00000000 uint32x4_t middlebyte = vandq_u32(perm, vmovq_n_u32(0x3F00)); - // Start assembling the sequence. Since the 4th byte is in the same position as it - // would be in a surrogate and there is no dependency, shift left instead of right. - // 3 byte: 00000000 10bbbbxx xxxxxxxx xxxxxxxx - // 4 byte: 11110aaa bbbbbbxx xxxxxxxx xxxxxxxx + // Start assembling the sequence. Since the 4th byte is in the same position + // as it would be in a surrogate and there is no dependency, shift left + // instead of right. 3 byte: 00000000 10bbbbxx xxxxxxxx xxxxxxxx 4 byte: + // 11110aaa bbbbbbxx xxxxxxxx xxxxxxxx uint32x4_t ab = vbslq_u32(vmovq_n_u32(0xFF000000), perm, middlehigh); - // Top 16 bits contains the high ten bits of the surrogate pair before correction - // 3 byte: 00000000 10bbbbcc|cccc0000 00000000 - // 4 byte: 11110aaa bbbbbbcc|cccc0000 00000000 - high 10 bits correct w/o correction - uint32x4_t abc = vbslq_u32(vmovq_n_u32(0xFFFC0000), ab, vshlq_n_u32(middlebyte, 4)); + // Top 16 bits contains the high ten bits of the surrogate pair before + // correction 3 byte: 00000000 10bbbbcc|cccc0000 00000000 4 byte: 11110aaa + // bbbbbbcc|cccc0000 00000000 - high 10 bits correct w/o correction + uint32x4_t abc = + vbslq_u32(vmovq_n_u32(0xFFFC0000), ab, vshlq_n_u32(middlebyte, 4)); // Combine the low 6 or 7 bits by a shift right accumulate // 3 byte: 00000000 00000010|bbbbcccc ccdddddd - low 16 bits correct - // 4 byte: 00000011 110aaabb|bbbbcccc ccdddddd - low 10 bits correct w/o correction + // 4 byte: 00000011 110aaabb|bbbbcccc ccdddddd - low 10 bits correct w/o + // correction uint32x4_t composed = vsraq_n_u32(ascii, abc, 6); // After this is for surrogates // Blend the low and high surrogates // 4 byte: 11110aaa bbbbbbcc|bbbbcccc ccdddddd uint32x4_t mixed = vbslq_u32(vmovq_n_u32(0xFFFF0000), abc, composed); - // Clear the upper 6 bits of the low surrogate. Don't clear the upper bits yet as - // 0x10000 was not subtracted from the codepoint yet. - // 4 byte: 11110aaa bbbbbbcc|000000cc ccdddddd - uint16x8_t masked_pair = - vreinterpretq_u16_u32(vbicq_u32(mixed, vmovq_n_u32(uint32_t(~0xFFFF03FF)))); - // Correct the remaining UTF-8 prefix, surrogate offset, and add the surrogate prefixes - // in one magic 16-bit addition. - // similar magic number but without the continue byte adjust and halfword swapped - // UTF-8 4b prefix = -0xF000|0x0000 - // surrogate offset = -0x0040|0x0000 (0x10000 << 6) + // Clear the upper 6 bits of the low surrogate. Don't clear the upper bits + // yet as 0x10000 was not subtracted from the codepoint yet. 4 byte: + // 11110aaa bbbbbbcc|000000cc ccdddddd + uint16x8_t masked_pair = vreinterpretq_u16_u32( + vbicq_u32(mixed, vmovq_n_u32(uint32_t(~0xFFFF03FF)))); + // Correct the remaining UTF-8 prefix, surrogate offset, and add the + // surrogate prefixes in one magic 16-bit addition. similar magic number but + // without the continue byte adjust and halfword swapped UTF-8 4b prefix = + // -0xF000|0x0000 surrogate offset = -0x0040|0x0000 (0x10000 << 6) // surrogate high = +0xD800|0x0000 // surrogate low = +0x0000|0xDC00 // ----------------------------------- // = +0xE7C0|0xDC00 uint16x8_t magic = vreinterpretq_u16_u32(vmovq_n_u32(0xE7C0DC00)); // 4 byte: 110110AA BBBBBBCC|110111CC CCDDDDDD - surrogate pair complete - uint32x4_t surrogates = vreinterpretq_u32_u16(vaddq_u16(masked_pair, magic)); + uint32x4_t surrogates = + vreinterpretq_u32_u16(vaddq_u16(masked_pair, magic)); // If the high bit is 1 (s32 less than zero), this needs a surrogate pair uint32x4_t is_pair = vcltzq_s32(vreinterpretq_s32_u32(perm)); @@ -14905,19 +14225,21 @@ size_t convert_masked_utf8_to_utf16(const char *input, uint32x4_t selected = vbslq_u32(is_pair, surrogates, composed); // Byte swap if necessary if (!match_system(big_endian)) { - selected = vreinterpretq_u32_u8(vrev16q_u8(vreinterpretq_u8_u32(selected))); + selected = + vreinterpretq_u32_u8(vrev16q_u8(vreinterpretq_u8_u32(selected))); } // Attempting to shuffle and store would be complex, just scalarize. uint32_t buffer[4]; vst1q_u32(buffer, selected); // Test for the top bit of the surrogate mask. Remove due to issue 514 - // const uint32_t SURROGATE_MASK = match_system(big_endian) ? 0x80000000 : 0x00800000; + // const uint32_t SURROGATE_MASK = match_system(big_endian) ? 0x80000000 : + // 0x00800000; for (size_t i = 0; i < 3; i++) { // Surrogate // Used to be if (buffer[i] & SURROGATE_MASK) { // See discussion above. // patch for issue https://github.com/simdutf/simdutf/issues/514 - if((permbuffer[i] & 0xf8000000) == 0xf0000000) { + if ((permbuffer[i] & 0xf8000000) == 0xf0000000) { utf16_output[0] = uint16_t(buffer[i] >> 16); utf16_output[1] = uint16_t(buffer[i] & 0xFFFF); utf16_output += 2; @@ -14932,7 +14254,6 @@ size_t convert_masked_utf8_to_utf16(const char *input, return 12; } } - /* end file src/arm64/arm_convert_utf8_to_utf16.cpp */ /* begin file src/arm64/arm_convert_utf8_to_utf32.cpp */ // Convert up to 12 bytes from utf8 to utf32 using a mask indicating the @@ -14940,74 +14261,75 @@ size_t convert_masked_utf8_to_utf16(const char *input, // are accessed. // It returns how many bytes were consumed (up to 12). size_t convert_masked_utf8_to_utf32(const char *input, - uint64_t utf8_end_of_code_point_mask, - char32_t *&utf32_out) { + uint64_t utf8_end_of_code_point_mask, + char32_t *&utf32_out) { // we use an approach where we try to process up to 12 input bytes. // Why 12 input bytes and not 16? Because we are concerned with the size of // the lookup tables. Also 12 is nicely divisible by two and three. // - uint32_t*& utf32_output = reinterpret_cast(utf32_out); - uint8x16_t in = vld1q_u8(reinterpret_cast(input)); + uint32_t *&utf32_output = reinterpret_cast(utf32_out); + uint8x16_t in = vld1q_u8(reinterpret_cast(input)); const uint16_t input_utf8_end_of_code_point_mask = utf8_end_of_code_point_mask & 0xFFF; // - // Optimization note: our main path below is load-latency dependent. Thus it is maybe - // beneficial to have fast paths that depend on branch prediction but have less latency. - // This results in more instructions but, potentially, also higher speeds. + // Optimization note: our main path below is load-latency dependent. Thus it + // is maybe beneficial to have fast paths that depend on branch prediction but + // have less latency. This results in more instructions but, potentially, also + // higher speeds. // // We first try a few fast paths. - if(utf8_end_of_code_point_mask == 0xfff) { + if (utf8_end_of_code_point_mask == 0xfff) { // We process in chunks of 12 bytes. // use fast implementation in src/simdutf/arm64/simd.h // Ideally the compiler can keep the tables in registers. simd8 temp{vreinterpretq_s8_u8(in)}; temp.store_ascii_as_utf32_tbl(utf32_out); utf32_output += 12; // We wrote 12 32-bit characters. - return 12; // We consumed 12 bytes. + return 12; // We consumed 12 bytes. } - if(input_utf8_end_of_code_point_mask == 0x924) { - // We want to take 4 3-byte UTF-8 code units and turn them into 4 4-byte UTF-32 code units. - // Convert to UTF-16 + if (input_utf8_end_of_code_point_mask == 0x924) { + // We want to take 4 3-byte UTF-8 code units and turn them into 4 4-byte + // UTF-32 code units. Convert to UTF-16 uint16x4_t composed_utf16 = convert_utf8_3_byte_to_utf16(in); // Zero extend and store via ST2 with a zero. - uint16x4x2_t interleaver = {{ composed_utf16, vmov_n_u16(0) }}; + uint16x4x2_t interleaver = {{composed_utf16, vmov_n_u16(0)}}; vst2_u16(reinterpret_cast(utf32_output), interleaver); utf32_output += 4; // We wrote 4 32-bit characters. - return 12; // We consumed 12 bytes. + return 12; // We consumed 12 bytes. } // 2 byte sequences occur in short bursts in languages like Greek and Russian. - if(input_utf8_end_of_code_point_mask == 0xaaa) { - // We want to take 6 2-byte UTF-8 code units and turn them into 6 4-byte UTF-32 code units. - // Convert to UTF-16 + if (input_utf8_end_of_code_point_mask == 0xaaa) { + // We want to take 6 2-byte UTF-8 code units and turn them into 6 4-byte + // UTF-32 code units. Convert to UTF-16 uint16x8_t composed_utf16 = convert_utf8_2_byte_to_utf16(in); // Zero extend and store via ST2 with a zero. - uint16x8x2_t interleaver = {{ composed_utf16, vmovq_n_u16(0) }}; + uint16x8x2_t interleaver = {{composed_utf16, vmovq_n_u16(0)}}; vst2q_u16(reinterpret_cast(utf32_output), interleaver); utf32_output += 6; // We wrote 6 32-bit characters. - return 12; // We consumed 12 bytes. + return 12; // We consumed 12 bytes. } /// Either no fast path or an unimportant fast path. - const uint8_t idx = - simdutf::tables::utf8_to_utf16::utf8bigindex[input_utf8_end_of_code_point_mask][0]; - const uint8_t consumed = - simdutf::tables::utf8_to_utf16::utf8bigindex[input_utf8_end_of_code_point_mask][1]; - + const uint8_t idx = simdutf::tables::utf8_to_utf16::utf8bigindex + [input_utf8_end_of_code_point_mask][0]; + const uint8_t consumed = simdutf::tables::utf8_to_utf16::utf8bigindex + [input_utf8_end_of_code_point_mask][1]; if (idx < 64) { // SIX (6) input code-code units // Convert to UTF-16 uint16x8_t composed_utf16 = convert_utf8_1_to_2_byte_to_utf16(in, idx); // Zero extend and store with ST2 and zero - uint16x8x2_t interleaver = {{ composed_utf16, vmovq_n_u16(0) }}; + uint16x8x2_t interleaver = {{composed_utf16, vmovq_n_u16(0)}}; vst2q_u16(reinterpret_cast(utf32_output), interleaver); utf32_output += 6; // We wrote 6 32-bit characters. return consumed; } else if (idx < 145) { // FOUR (4) input code-code units // UTF-16 and UTF-32 use similar algorithms, but UTF-32 skips the narrowing. - uint8x16_t sh = vld1q_u8(reinterpret_cast(simdutf::tables::utf8_to_utf16::shufutf8[idx])); + uint8x16_t sh = vld1q_u8(reinterpret_cast( + simdutf::tables::utf8_to_utf16::shufutf8[idx])); // Shuffle // 1 byte: 00000000 00000000 0ccccccc // 2 byte: 00000000 110bbbbb 10cccccc @@ -15015,15 +14337,16 @@ size_t convert_masked_utf8_to_utf32(const char *input, uint32x4_t perm = vreinterpretq_u32_u8(vqtbl1q_u8(in, sh)); // Split // 00000000 00000000 0ccccccc - uint32x4_t ascii = vandq_u32(perm, vmovq_n_u32(0x7F)); // 6 or 7 bits + uint32x4_t ascii = vandq_u32(perm, vmovq_n_u32(0x7F)); // 6 or 7 bits // Note: unmasked // xxxxxxxx aaaaxxxx xxxxxxxx - uint32x4_t high = vshrq_n_u32(perm, 4); // 4 bits + uint32x4_t high = vshrq_n_u32(perm, 4); // 4 bits // Use 16 bit bic instead of and. // The top bits will be corrected later in the bsl // 00000000 10bbbbbb 00000000 - uint32x4_t middle = - vreinterpretq_u32_u16(vbicq_u16(vreinterpretq_u16_u32(perm), vmovq_n_u16(uint16_t(~0xff00)))); // 5 or 6 bits + uint32x4_t middle = vreinterpretq_u32_u16( + vbicq_u16(vreinterpretq_u16_u32(perm), + vmovq_n_u16(uint16_t(~0xff00)))); // 5 or 6 bits // Combine low and middle with shift right accumulate // 00000000 00xxbbbb bbcccccc uint32x4_t lowmid = vsraq_n_u32(ascii, middle, 2); @@ -15036,13 +14359,14 @@ size_t convert_masked_utf8_to_utf32(const char *input, } else if (idx < 209) { // THREE (3) input code-code units if (input_utf8_end_of_code_point_mask == 0x888) { - // We want to take 3 4-byte UTF-8 code units and turn them into 3 4-byte UTF-32 code units. - // This uses the same method as the fixed 3 byte version, reversing and shift left insert. - // However, there is no need for a shuffle mask now, just rev16 and rev32. + // We want to take 3 4-byte UTF-8 code units and turn them into 3 4-byte + // UTF-32 code units. This uses the same method as the fixed 3 byte + // version, reversing and shift left insert. However, there is no need for + // a shuffle mask now, just rev16 and rev32. // - // This version does not use the LUT, but 4 byte sequences are less common and the - // overhead of the extra memory access is less important than the early branch overhead - // in shorter sequences, so it comes last. + // This version does not use the LUT, but 4 byte sequences are less common + // and the overhead of the extra memory access is less important than the + // early branch overhead in shorter sequences, so it comes last. // Swap pairs of bytes // 10dddddd|10cccccc|10bbbbbb|11110aaa @@ -15065,11 +14389,12 @@ size_t convert_masked_utf8_to_utf32(const char *input, vst1q_u32(utf32_output, composed); utf32_output += 3; // We wrote 3 32-bit characters. - return 12; // We consumed 12 bytes. + return 12; // We consumed 12 bytes. } - // Unlike UTF-16, doing a fast codepath doesn't have nearly as much benefit due to - // surrogates no longer being involved. - uint8x16_t sh = vld1q_u8(reinterpret_cast(simdutf::tables::utf8_to_utf16::shufutf8[idx])); + // Unlike UTF-16, doing a fast codepath doesn't have nearly as much benefit + // due to surrogates no longer being involved. + uint8x16_t sh = vld1q_u8(reinterpret_cast( + simdutf::tables::utf8_to_utf16::shufutf8[idx])); // 1 byte: 00000000 00000000 00000000 0ddddddd // 2 byte: 00000000 00000000 110ccccc 10dddddd // 3 byte: 00000000 1110bbbb 10cccccc 10dddddd @@ -15078,11 +14403,11 @@ size_t convert_masked_utf8_to_utf32(const char *input, // Ascii uint32x4_t ascii = vandq_u32(perm, vmovq_n_u32(0x7F)); uint32x4_t middle = vandq_u32(perm, vmovq_n_u32(0x3f00)); - // When converting the way we do, the 3 byte prefix will be interpreted as the - // 18th bit being set, since the code would interpret the lead byte (0b1110bbbb) - // as a continuation byte (0b10bbbbbb). To fix this, we can either xor or do an - // 8 bit add of the 6th bit shifted right by 1. Since NEON has shift right accumulate, - // we use that. + // When converting the way we do, the 3 byte prefix will be interpreted as + // the 18th bit being set, since the code would interpret the lead byte + // (0b1110bbbb) as a continuation byte (0b10bbbbbb). To fix this, we can + // either xor or do an 8 bit add of the 6th bit shifted right by 1. Since + // NEON has shift right accumulate, we use that. // 4 byte 3 byte // 10bbbbbb 1110bbbb // 00000000 01000000 6th bit @@ -15091,13 +14416,14 @@ size_t convert_masked_utf8_to_utf32(const char *input, // 00bbbbbb 0000bbbb mask uint8x16_t correction = vreinterpretq_u8_u32(vandq_u32(perm, vmovq_n_u32(0x00400000))); - uint32x4_t corrected = - vreinterpretq_u32_u8(vsraq_n_u8(vreinterpretq_u8_u32(perm), correction, 1)); + uint32x4_t corrected = vreinterpretq_u32_u8( + vsraq_n_u8(vreinterpretq_u8_u32(perm), correction, 1)); // 00000000 00000000 0000cccc ccdddddd uint32x4_t cd = vsraq_n_u32(ascii, middle, 2); // Insert twice // xxxxxxxx xxxaaabb bbbbxxxx xxxxxxxx - uint32x4_t ab = vbslq_u32(vmovq_n_u32(0x01C0000), vshrq_n_u32(corrected, 6), vshrq_n_u32(corrected, 4)); + uint32x4_t ab = vbslq_u32(vmovq_n_u32(0x01C0000), vshrq_n_u32(corrected, 6), + vshrq_n_u32(corrected, 4)); // 00000000 000aaabb bbbbcccc ccdddddd uint32x4_t composed = vbslq_u32(vmovq_n_u32(0xFFE00FFF), cd, ab); // Store @@ -15110,130 +14436,73 @@ size_t convert_masked_utf8_to_utf32(const char *input, } } /* end file src/arm64/arm_convert_utf8_to_utf32.cpp */ -/* begin file src/arm64/arm_convert_utf8_to_latin1.cpp */ -// Convert up to 16 bytes from utf8 to utf16 using a mask indicating the -// end of the code points. Only the least significant 12 bits of the mask -// are accessed. -// It returns how many bytes were consumed (up to 16, usually 12). -size_t convert_masked_utf8_to_latin1(const char *input, - uint64_t utf8_end_of_code_point_mask, - char *&latin1_output) { - // we use an approach where we try to process up to 12 input bytes. - // Why 12 input bytes and not 16? Because we are concerned with the size of - // the lookup tables. Also 12 is nicely divisible by two and three. - // - uint8x16_t in = vld1q_u8(reinterpret_cast(input)); - const uint16_t input_utf8_end_of_code_point_mask = - utf8_end_of_code_point_mask & 0xfff; - // - // Optimization note: our main path below is load-latency dependent. Thus it is maybe - // beneficial to have fast paths that depend on branch prediction but have less latency. - // This results in more instructions but, potentially, also higher speeds. - - // We first try a few fast paths. - // The obvious first test is ASCII, which actually consumes the full 16. - if(utf8_end_of_code_point_mask == 0xfff) { - // We process in chunks of 12 bytes - vst1q_u8(reinterpret_cast(latin1_output), in); - latin1_output += 12; // We wrote 12 18-bit characters. - return 12; // We consumed 12 bytes. - } - /// We do not have a fast path available, or the fast path is unimportant, so we fallback. - const uint8_t idx = - simdutf::tables::utf8_to_utf16::utf8bigindex[input_utf8_end_of_code_point_mask][0]; - - const uint8_t consumed = - simdutf::tables::utf8_to_utf16::utf8bigindex[input_utf8_end_of_code_point_mask][1]; - // this indicates an invalid input: - if(idx >= 64) { return consumed; } - // Here we should have (idx < 64), if not, there is a bug in the validation or elsewhere. - // SIX (6) input code-code units - // this is a relatively easy scenario - // we process SIX (6) input code-code units. The max length in bytes of six code - // code units spanning between 1 and 2 bytes each is 12 bytes. - // Converts 6 1-2 byte UTF-8 characters to 6 UTF-16 characters. - // This is a relatively easy scenario - // we process SIX (6) input code-code units. The max length in bytes of six code - // code units spanning between 1 and 2 bytes each is 12 bytes. - uint8x16_t sh = vld1q_u8(reinterpret_cast(simdutf::tables::utf8_to_utf16::shufutf8[idx])); - // Shuffle - // 1 byte: 00000000 0bbbbbbb - // 2 byte: 110aaaaa 10bbbbbb - uint16x8_t perm = vreinterpretq_u16_u8(vqtbl1q_u8(in, sh)); - // Mask - // 1 byte: 00000000 0bbbbbbb - // 2 byte: 00000000 00bbbbbb - uint16x8_t ascii = vandq_u16(perm, vmovq_n_u16(0x7f)); // 6 or 7 bits - // 1 byte: 00000000 00000000 - // 2 byte: 000aaaaa 00000000 - uint16x8_t highbyte = vandq_u16(perm, vmovq_n_u16(0x1f00)); // 5 bits - // Combine with a shift right accumulate - // 1 byte: 00000000 0bbbbbbb - // 2 byte: 00000aaa aabbbbbb - uint16x8_t composed = vsraq_n_u16(ascii, highbyte, 2); - // writing 8 bytes even though we only care about the first 6 bytes. - uint8x8_t latin1_packed = vmovn_u16(composed); - vst1_u8(reinterpret_cast(latin1_output), latin1_packed); - latin1_output += 6; // We wrote 6 bytes. - return consumed; -} - -/* end file src/arm64/arm_convert_utf8_to_latin1.cpp */ /* begin file src/arm64/arm_convert_utf16_to_latin1.cpp */ template -std::pair arm_convert_utf16_to_latin1(const char16_t* buf, size_t len, char* latin1_output) { - const char16_t* end = buf + len; +std::pair +arm_convert_utf16_to_latin1(const char16_t *buf, size_t len, + char *latin1_output) { + const char16_t *end = buf + len; while (end - buf >= 8) { uint16x8_t in = vld1q_u16(reinterpret_cast(buf)); - if (!match_system(big_endian)) { in = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in))); } + if (!match_system(big_endian)) { + in = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in))); + } if (vmaxvq_u16(in) <= 0xff) { - // 1. pack the bytes - uint8x8_t latin1_packed = vmovn_u16(in); - // 2. store (8 bytes) - vst1_u8(reinterpret_cast(latin1_output), latin1_packed); - // 3. adjust pointers - buf += 8; - latin1_output += 8; + // 1. pack the bytes + uint8x8_t latin1_packed = vmovn_u16(in); + // 2. store (8 bytes) + vst1_u8(reinterpret_cast(latin1_output), latin1_packed); + // 3. adjust pointers + buf += 8; + latin1_output += 8; } else { - return std::make_pair(nullptr, reinterpret_cast(latin1_output)); + return std::make_pair(nullptr, reinterpret_cast(latin1_output)); } } // while return std::make_pair(buf, latin1_output); } template -std::pair arm_convert_utf16_to_latin1_with_errors(const char16_t* buf, size_t len, char* latin1_output) { - const char16_t* start = buf; - const char16_t* end = buf + len; +std::pair +arm_convert_utf16_to_latin1_with_errors(const char16_t *buf, size_t len, + char *latin1_output) { + const char16_t *start = buf; + const char16_t *end = buf + len; while (end - buf >= 8) { uint16x8_t in = vld1q_u16(reinterpret_cast(buf)); - if (!match_system(big_endian)) { in = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in))); } + if (!match_system(big_endian)) { + in = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in))); + } if (vmaxvq_u16(in) <= 0xff) { - // 1. pack the bytes - uint8x8_t latin1_packed = vmovn_u16(in); - // 2. store (8 bytes) - vst1_u8(reinterpret_cast(latin1_output), latin1_packed); - // 3. adjust pointers - buf += 8; - latin1_output += 8; + // 1. pack the bytes + uint8x8_t latin1_packed = vmovn_u16(in); + // 2. store (8 bytes) + vst1_u8(reinterpret_cast(latin1_output), latin1_packed); + // 3. adjust pointers + buf += 8; + latin1_output += 8; } else { // Let us do a scalar fallback. - for(int k = 0; k < 8; k++) { - uint16_t word = !match_system(big_endian) ? scalar::utf16::swap_bytes(buf[k]) : buf[k]; - if(word <= 0xff) { + for (int k = 0; k < 8; k++) { + uint16_t word = !match_system(big_endian) + ? scalar::utf16::swap_bytes(buf[k]) + : buf[k]; + if (word <= 0xff) { *latin1_output++ = char(word); } else { - return std::make_pair(result(error_code::TOO_LARGE, buf - start + k), latin1_output); + return std::make_pair(result(error_code::TOO_LARGE, buf - start + k), + latin1_output); } } } } // while - return std::make_pair(result(error_code::SUCCESS, buf - start), latin1_output); + return std::make_pair(result(error_code::SUCCESS, buf - start), + latin1_output); } /* end file src/arm64/arm_convert_utf16_to_latin1.cpp */ -/* begin file src/arm64/arm_convert_utf16_to_utf8.cpp */ +/* begin file src/arm64/arm_convert_utf16_to_utf32.cpp */ /* The vectorized algorithm works on single SSE register i.e., it loads eight 16-bit code units. @@ -15287,240 +14556,450 @@ std::pair arm_convert_utf16_to_latin1_with_errors(const char16_t* A scalar routing should carry on the conversion of the tail. */ template -std::pair arm_convert_utf16_to_utf8(const char16_t* buf, size_t len, char* utf8_out) { - uint8_t * utf8_output = reinterpret_cast(utf8_out); - const char16_t* end = buf + len; +std::pair +arm_convert_utf16_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_out) { + uint32_t *utf32_output = reinterpret_cast(utf32_out); + const char16_t *end = buf + len; const uint16x8_t v_f800 = vmovq_n_u16((uint16_t)0xf800); const uint16x8_t v_d800 = vmovq_n_u16((uint16_t)0xd800); - const uint16x8_t v_c080 = vmovq_n_u16((uint16_t)0xc080); - const size_t safety_margin = 12; // to avoid overruns, see issue https://github.com/simdutf/simdutf/issues/92 - while (end - buf >= std::ptrdiff_t(16 + safety_margin)) { + + while (end - buf >= 8) { uint16x8_t in = vld1q_u16(reinterpret_cast(buf)); - if (!match_system(big_endian)) { in = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in))); } - if(vmaxvq_u16(in) <= 0x7F) { // ASCII fast path!!!! - // It is common enough that we have sequences of 16 consecutive ASCII characters. - uint16x8_t nextin = vld1q_u16(reinterpret_cast(buf) + 8); - if (!match_system(big_endian)) { nextin = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(nextin))); } - if(vmaxvq_u16(nextin) > 0x7F) { - // 1. pack the bytes - // obviously suboptimal. - uint8x8_t utf8_packed = vmovn_u16(in); - // 2. store (8 bytes) - vst1_u8(utf8_output, utf8_packed); - // 3. adjust pointers - buf += 8; - utf8_output += 8; - in = nextin; + if (!match_system(big_endian)) { + in = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in))); + } + + const uint16x8_t surrogates_bytemask = + vceqq_u16(vandq_u16(in, v_f800), v_d800); + // It might seem like checking for surrogates_bitmask == 0xc000 could help. + // However, it is likely an uncommon occurrence. + if (vmaxvq_u16(surrogates_bytemask) == 0) { + // case: no surrogate pairs, extend all 16-bit code units to 32-bit code + // units + vst1q_u32(utf32_output, vmovl_u16(vget_low_u16(in))); + vst1q_u32(utf32_output + 4, vmovl_high_u16(in)); + utf32_output += 8; + buf += 8; + // surrogate pair(s) in a register + } else { + // Let us do a scalar fallback. + // It may seem wasteful to use scalar code, but being efficient with SIMD + // in the presence of surrogate pairs may require non-trivial tables. + size_t forward = 15; + size_t k = 0; + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { + uint16_t word = !match_system(big_endian) + ? scalar::utf16::swap_bytes(buf[k]) + : buf[k]; + if ((word & 0xF800) != 0xD800) { + *utf32_output++ = char32_t(word); } else { - // 1. pack the bytes - // obviously suboptimal. - uint8x16_t utf8_packed = vmovn_high_u16(vmovn_u16(in), nextin); - // 2. store (16 bytes) - vst1q_u8(utf8_output, utf8_packed); - // 3. adjust pointers - buf += 16; - utf8_output += 16; - continue; // we are done for this round! + // must be a surrogate pair + uint16_t diff = uint16_t(word - 0xD800); + uint16_t next_word = !match_system(big_endian) + ? scalar::utf16::swap_bytes(buf[k + 1]) + : buf[k + 1]; + k++; + uint16_t diff2 = uint16_t(next_word - 0xDC00); + if ((diff | diff2) > 0x3FF) { + return std::make_pair(nullptr, + reinterpret_cast(utf32_output)); + } + uint32_t value = (diff << 10) + diff2 + 0x10000; + *utf32_output++ = char32_t(value); } + } + buf += k; } + } // while + return std::make_pair(buf, reinterpret_cast(utf32_output)); +} - if (vmaxvq_u16(in) <= 0x7FF) { - // 1. prepare 2-byte values - // input 16-bit word : [0000|0aaa|aabb|bbbb] x 8 - // expected output : [110a|aaaa|10bb|bbbb] x 8 - const uint16x8_t v_1f00 = vmovq_n_u16((int16_t)0x1f00); - const uint16x8_t v_003f = vmovq_n_u16((int16_t)0x003f); - - // t0 = [000a|aaaa|bbbb|bb00] - const uint16x8_t t0 = vshlq_n_u16(in, 2); - // t1 = [000a|aaaa|0000|0000] - const uint16x8_t t1 = vandq_u16(t0, v_1f00); - // t2 = [0000|0000|00bb|bbbb] - const uint16x8_t t2 = vandq_u16(in, v_003f); - // t3 = [000a|aaaa|00bb|bbbb] - const uint16x8_t t3 = vorrq_u16(t1, t2); - // t4 = [110a|aaaa|10bb|bbbb] - const uint16x8_t t4 = vorrq_u16(t3, v_c080); - // 2. merge ASCII and 2-byte codewords - const uint16x8_t v_007f = vmovq_n_u16((uint16_t)0x007F); - const uint16x8_t one_byte_bytemask = vcleq_u16(in, v_007f); - const uint8x16_t utf8_unpacked = vreinterpretq_u8_u16(vbslq_u16(one_byte_bytemask, in, t4)); - // 3. prepare bitmask for 8-bit lookup -#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - const uint16x8_t mask = simdutf_make_uint16x8_t(0x0001, 0x0004, - 0x0010, 0x0040, - 0x0002, 0x0008, - 0x0020, 0x0080); -#else - const uint16x8_t mask = { 0x0001, 0x0004, - 0x0010, 0x0040, - 0x0002, 0x0008, - 0x0020, 0x0080 }; -#endif - uint16_t m2 = vaddvq_u16(vandq_u16(one_byte_bytemask, mask)); - // 4. pack the bytes - const uint8_t* row = &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[m2][0]; - const uint8x16_t shuffle = vld1q_u8(row + 1); - const uint8x16_t utf8_packed = vqtbl1q_u8(utf8_unpacked, shuffle); - - // 5. store bytes - vst1q_u8(utf8_output, utf8_packed); +/* + Returns a pair: a result struct and utf8_output. + If there is an error, the count field of the result is the position of the + error. Otherwise, it is the position of the first unprocessed byte in buf + (even if finished). A scalar routing should carry on the conversion of the + tail if needed. +*/ +template +std::pair +arm_convert_utf16_to_utf32_with_errors(const char16_t *buf, size_t len, + char32_t *utf32_out) { + uint32_t *utf32_output = reinterpret_cast(utf32_out); + const char16_t *start = buf; + const char16_t *end = buf + len; - // 6. adjust pointers - buf += 8; - utf8_output += row[0]; - continue; + const uint16x8_t v_f800 = vmovq_n_u16((uint16_t)0xf800); + const uint16x8_t v_d800 = vmovq_n_u16((uint16_t)0xd800); + while ((end - buf) >= 8) { + uint16x8_t in = vld1q_u16(reinterpret_cast(buf)); + if (!match_system(big_endian)) { + in = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in))); } - const uint16x8_t surrogates_bytemask = vceqq_u16(vandq_u16(in, v_f800), v_d800); - // It might seem like checking for surrogates_bitmask == 0xc000 could help. However, - // it is likely an uncommon occurrence. + + const uint16x8_t surrogates_bytemask = + vceqq_u16(vandq_u16(in, v_f800), v_d800); + // It might seem like checking for surrogates_bitmask == 0xc000 could help. + // However, it is likely an uncommon occurrence. if (vmaxvq_u16(surrogates_bytemask) == 0) { - // case: code units from register produce either 1, 2 or 3 UTF-8 bytes -#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - const uint16x8_t dup_even = simdutf_make_uint16x8_t(0x0000, 0x0202, 0x0404, 0x0606, - 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); -#else - const uint16x8_t dup_even = {0x0000, 0x0202, 0x0404, 0x0606, - 0x0808, 0x0a0a, 0x0c0c, 0x0e0e}; -#endif - /* In this branch we handle three cases: - 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - single UFT-8 byte - 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two UTF-8 bytes - 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - three UTF-8 bytes + // case: no surrogate pairs, extend all 16-bit code units to 32-bit code + // units + vst1q_u32(utf32_output, vmovl_u16(vget_low_u16(in))); + vst1q_u32(utf32_output + 4, vmovl_high_u16(in)); + utf32_output += 8; + buf += 8; + // surrogate pair(s) in a register + } else { + // Let us do a scalar fallback. + // It may seem wasteful to use scalar code, but being efficient with SIMD + // in the presence of surrogate pairs may require non-trivial tables. + size_t forward = 15; + size_t k = 0; + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { + uint16_t word = !match_system(big_endian) + ? scalar::utf16::swap_bytes(buf[k]) + : buf[k]; + if ((word & 0xF800) != 0xD800) { + *utf32_output++ = char32_t(word); + } else { + // must be a surrogate pair + uint16_t diff = uint16_t(word - 0xD800); + uint16_t next_word = !match_system(big_endian) + ? scalar::utf16::swap_bytes(buf[k + 1]) + : buf[k + 1]; + k++; + uint16_t diff2 = uint16_t(next_word - 0xDC00); + if ((diff | diff2) > 0x3FF) { + return std::make_pair( + result(error_code::SURROGATE, buf - start + k - 1), + reinterpret_cast(utf32_output)); + } + uint32_t value = (diff << 10) + diff2 + 0x10000; + *utf32_output++ = char32_t(value); + } + } + buf += k; + } + } // while + return std::make_pair(result(error_code::SUCCESS, buf - start), + reinterpret_cast(utf32_output)); +} +/* end file src/arm64/arm_convert_utf16_to_utf32.cpp */ +/* begin file src/arm64/arm_convert_utf16_to_utf8.cpp */ +/* + The vectorized algorithm works on single SSE register i.e., it + loads eight 16-bit code units. - We expand the input word (16-bit) into two code units (32-bit), thus - we have room for four bytes. However, we need five distinct bit - layouts. Note that the last byte in cases #2 and #3 is the same. + We consider three cases: + 1. an input register contains no surrogates and each value + is in range 0x0000 .. 0x07ff. + 2. an input register contains no surrogates and values are + is in range 0x0000 .. 0xffff. + 3. an input register contains surrogates --- i.e. codepoints + can have 16 or 32 bits. - We precompute byte 1 for case #1 and the common byte for cases #2 & #3 - in register t2. + Ad 1. - We precompute byte 1 for case #3 and -- **conditionally** -- precompute - either byte 1 for case #2 or byte 2 for case #3. Note that they - differ by exactly one bit. + When values are less than 0x0800, it means that a 16-bit code unit + can be converted into: 1) single UTF8 byte (when it is an ASCII + char) or 2) two UTF8 bytes. - Finally from these two code units we build proper UTF-8 sequence, taking - into account the case (i.e, the number of bytes to write). - */ - /** - * Given [aaaa|bbbb|bbcc|cccc] our goal is to produce: - * t2 => [0ccc|cccc] [10cc|cccc] - * s4 => [1110|aaaa] ([110b|bbbb] OR [10bb|bbbb]) - */ -#define simdutf_vec(x) vmovq_n_u16(static_cast(x)) - // [aaaa|bbbb|bbcc|cccc] => [bbcc|cccc|bbcc|cccc] - const uint16x8_t t0 = vreinterpretq_u16_u8(vqtbl1q_u8(vreinterpretq_u8_u16(in), vreinterpretq_u8_u16(dup_even))); - // [bbcc|cccc|bbcc|cccc] => [00cc|cccc|0bcc|cccc] - const uint16x8_t t1 = vandq_u16(t0, simdutf_vec(0b0011111101111111)); - // [00cc|cccc|0bcc|cccc] => [10cc|cccc|0bcc|cccc] - const uint16x8_t t2 = vorrq_u16 (t1, simdutf_vec(0b1000000000000000)); + For this case we do only some shuffle to obtain these 2-byte + codes and finally compress the whole SSE register with a single + shuffle. - // s0: [aaaa|bbbb|bbcc|cccc] => [0000|0000|0000|aaaa] - const uint16x8_t s0 = vshrq_n_u16(in, 12); - // s1: [aaaa|bbbb|bbcc|cccc] => [0000|bbbb|bb00|0000] - const uint16x8_t s1 = vandq_u16(in, simdutf_vec(0b0000111111000000)); - // [0000|bbbb|bb00|0000] => [00bb|bbbb|0000|0000] - const uint16x8_t s1s = vshlq_n_u16(s1, 2); - // [00bb|bbbb|0000|aaaa] - const uint16x8_t s2 = vorrq_u16(s0, s1s); - // s3: [00bb|bbbb|0000|aaaa] => [11bb|bbbb|1110|aaaa] - const uint16x8_t s3 = vorrq_u16(s2, simdutf_vec(0b1100000011100000)); - const uint16x8_t v_07ff = vmovq_n_u16((uint16_t)0x07FF); - const uint16x8_t one_or_two_bytes_bytemask = vcleq_u16(in, v_07ff); - const uint16x8_t m0 = vbicq_u16(simdutf_vec(0b0100000000000000), one_or_two_bytes_bytemask); - const uint16x8_t s4 = veorq_u16(s3, m0); -#undef simdutf_vec + We need 256-entry lookup table to get a compression pattern + and the number of output bytes in the compressed vector register. + Each entry occupies 17 bytes. - // 4. expand code units 16-bit => 32-bit - const uint8x16_t out0 = vreinterpretq_u8_u16(vzip1q_u16(t2, s4)); - const uint8x16_t out1 = vreinterpretq_u8_u16(vzip2q_u16(t2, s4)); + Ad 2. - // 5. compress 32-bit code units into 1, 2 or 3 bytes -- 2 x shuffle - const uint16x8_t v_007f = vmovq_n_u16((uint16_t)0x007F); - const uint16x8_t one_byte_bytemask = vcleq_u16(in, v_007f); + When values fit in 16-bit code units, but are above 0x07ff, then + a single word may produce one, two or three UTF8 bytes. + + We prepare data for all these three cases in two registers. + The first register contains lower two UTF8 bytes (used in all + cases), while the second one contains just the third byte for + the three-UTF8-bytes case. + + Finally these two registers are interleaved forming eight-element + array of 32-bit values. The array spans two SSE registers. + The bytes from the registers are compressed using two shuffles. + + We need 256-entry lookup table to get a compression pattern + and the number of output bytes in the compressed vector register. + Each entry occupies 17 bytes. + + + To summarize: + - We need two 256-entry tables that have 8704 bytes in total. +*/ +/* + Returns a pair: the first unprocessed byte from buf and utf8_output + A scalar routing should carry on the conversion of the tail. +*/ +template +std::pair +arm_convert_utf16_to_utf8(const char16_t *buf, size_t len, char *utf8_out) { + uint8_t *utf8_output = reinterpret_cast(utf8_out); + const char16_t *end = buf + len; + + const uint16x8_t v_f800 = vmovq_n_u16((uint16_t)0xf800); + const uint16x8_t v_d800 = vmovq_n_u16((uint16_t)0xd800); + const uint16x8_t v_c080 = vmovq_n_u16((uint16_t)0xc080); + const size_t safety_margin = + 12; // to avoid overruns, see issue + // https://github.com/simdutf/simdutf/issues/92 + while (end - buf >= std::ptrdiff_t(16 + safety_margin)) { + uint16x8_t in = vld1q_u16(reinterpret_cast(buf)); + if (!match_system(big_endian)) { + in = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in))); + } + if (vmaxvq_u16(in) <= 0x7F) { // ASCII fast path!!!! + // It is common enough that we have sequences of 16 consecutive ASCII + // characters. + uint16x8_t nextin = + vld1q_u16(reinterpret_cast(buf) + 8); + if (!match_system(big_endian)) { + nextin = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(nextin))); + } + if (vmaxvq_u16(nextin) > 0x7F) { + // 1. pack the bytes + // obviously suboptimal. + uint8x8_t utf8_packed = vmovn_u16(in); + // 2. store (8 bytes) + vst1_u8(utf8_output, utf8_packed); + // 3. adjust pointers + buf += 8; + utf8_output += 8; + in = nextin; + } else { + // 1. pack the bytes + // obviously suboptimal. + uint8x16_t utf8_packed = vmovn_high_u16(vmovn_u16(in), nextin); + // 2. store (16 bytes) + vst1q_u8(utf8_output, utf8_packed); + // 3. adjust pointers + buf += 16; + utf8_output += 16; + continue; // we are done for this round! + } + } + + if (vmaxvq_u16(in) <= 0x7FF) { + // 1. prepare 2-byte values + // input 16-bit word : [0000|0aaa|aabb|bbbb] x 8 + // expected output : [110a|aaaa|10bb|bbbb] x 8 + const uint16x8_t v_1f00 = vmovq_n_u16((int16_t)0x1f00); + const uint16x8_t v_003f = vmovq_n_u16((int16_t)0x003f); + + // t0 = [000a|aaaa|bbbb|bb00] + const uint16x8_t t0 = vshlq_n_u16(in, 2); + // t1 = [000a|aaaa|0000|0000] + const uint16x8_t t1 = vandq_u16(t0, v_1f00); + // t2 = [0000|0000|00bb|bbbb] + const uint16x8_t t2 = vandq_u16(in, v_003f); + // t3 = [000a|aaaa|00bb|bbbb] + const uint16x8_t t3 = vorrq_u16(t1, t2); + // t4 = [110a|aaaa|10bb|bbbb] + const uint16x8_t t4 = vorrq_u16(t3, v_c080); + // 2. merge ASCII and 2-byte codewords + const uint16x8_t v_007f = vmovq_n_u16((uint16_t)0x007F); + const uint16x8_t one_byte_bytemask = vcleq_u16(in, v_007f); + const uint8x16_t utf8_unpacked = + vreinterpretq_u8_u16(vbslq_u16(one_byte_bytemask, in, t4)); + // 3. prepare bitmask for 8-bit lookup #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - const uint16x8_t onemask = simdutf_make_uint16x8_t(0x0001, 0x0004, - 0x0010, 0x0040, - 0x0100, 0x0400, - 0x1000, 0x4000 ); - const uint16x8_t twomask = simdutf_make_uint16x8_t(0x0002, 0x0008, - 0x0020, 0x0080, - 0x0200, 0x0800, - 0x2000, 0x8000 ); + const uint16x8_t mask = simdutf_make_uint16x8_t( + 0x0001, 0x0004, 0x0010, 0x0040, 0x0002, 0x0008, 0x0020, 0x0080); #else - const uint16x8_t onemask = { 0x0001, 0x0004, - 0x0010, 0x0040, - 0x0100, 0x0400, - 0x1000, 0x4000 }; - const uint16x8_t twomask = { 0x0002, 0x0008, - 0x0020, 0x0080, - 0x0200, 0x0800, - 0x2000, 0x8000 }; + const uint16x8_t mask = {0x0001, 0x0004, 0x0010, 0x0040, + 0x0002, 0x0008, 0x0020, 0x0080}; #endif - const uint16x8_t combined = vorrq_u16(vandq_u16(one_byte_bytemask, onemask), vandq_u16(one_or_two_bytes_bytemask, twomask)); - const uint16_t mask = vaddvq_u16(combined); - // The following fast path may or may not be beneficial. - /*if(mask == 0) { - // We only have three-byte code units. Use fast path. - const uint8x16_t shuffle = {2,3,1,6,7,5,10,11,9,14,15,13,0,0,0,0}; - const uint8x16_t utf8_0 = vqtbl1q_u8(out0, shuffle); - const uint8x16_t utf8_1 = vqtbl1q_u8(out1, shuffle); - vst1q_u8(utf8_output, utf8_0); - utf8_output += 12; - vst1q_u8(utf8_output, utf8_1); - utf8_output += 12; - buf += 8; - continue; - }*/ - const uint8_t mask0 = uint8_t(mask); + uint16_t m2 = vaddvq_u16(vandq_u16(one_byte_bytemask, mask)); + // 4. pack the bytes + const uint8_t *row = + &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[m2][0]; + const uint8x16_t shuffle = vld1q_u8(row + 1); + const uint8x16_t utf8_packed = vqtbl1q_u8(utf8_unpacked, shuffle); - const uint8_t* row0 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; - const uint8x16_t shuffle0 = vld1q_u8(row0 + 1); - const uint8x16_t utf8_0 = vqtbl1q_u8(out0, shuffle0); + // 5. store bytes + vst1q_u8(utf8_output, utf8_packed); - const uint8_t mask1 = static_cast(mask >> 8); - const uint8_t* row1 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; - const uint8x16_t shuffle1 = vld1q_u8(row1 + 1); - const uint8x16_t utf8_1 = vqtbl1q_u8(out1, shuffle1); + // 6. adjust pointers + buf += 8; + utf8_output += row[0]; + continue; + } + const uint16x8_t surrogates_bytemask = + vceqq_u16(vandq_u16(in, v_f800), v_d800); + // It might seem like checking for surrogates_bitmask == 0xc000 could help. + // However, it is likely an uncommon occurrence. + if (vmaxvq_u16(surrogates_bytemask) == 0) { + // case: code units from register produce either 1, 2 or 3 UTF-8 bytes +#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO + const uint16x8_t dup_even = simdutf_make_uint16x8_t( + 0x0000, 0x0202, 0x0404, 0x0606, 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); +#else + const uint16x8_t dup_even = {0x0000, 0x0202, 0x0404, 0x0606, + 0x0808, 0x0a0a, 0x0c0c, 0x0e0e}; +#endif + /* In this branch we handle three cases: + 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - + single UFT-8 byte + 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two + UTF-8 bytes + 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - + three UTF-8 bytes + + We expand the input word (16-bit) into two code units (32-bit), thus + we have room for four bytes. However, we need five distinct bit + layouts. Note that the last byte in cases #2 and #3 is the same. + + We precompute byte 1 for case #1 and the common byte for cases #2 & #3 + in register t2. + + We precompute byte 1 for case #3 and -- **conditionally** -- precompute + either byte 1 for case #2 or byte 2 for case #3. Note that they + differ by exactly one bit. + + Finally from these two code units we build proper UTF-8 sequence, taking + into account the case (i.e, the number of bytes to write). + */ + /** + * Given [aaaa|bbbb|bbcc|cccc] our goal is to produce: + * t2 => [0ccc|cccc] [10cc|cccc] + * s4 => [1110|aaaa] ([110b|bbbb] OR [10bb|bbbb]) + */ +#define simdutf_vec(x) vmovq_n_u16(static_cast(x)) + // [aaaa|bbbb|bbcc|cccc] => [bbcc|cccc|bbcc|cccc] + const uint16x8_t t0 = vreinterpretq_u16_u8( + vqtbl1q_u8(vreinterpretq_u8_u16(in), vreinterpretq_u8_u16(dup_even))); + // [bbcc|cccc|bbcc|cccc] => [00cc|cccc|0bcc|cccc] + const uint16x8_t t1 = vandq_u16(t0, simdutf_vec(0b0011111101111111)); + // [00cc|cccc|0bcc|cccc] => [10cc|cccc|0bcc|cccc] + const uint16x8_t t2 = vorrq_u16(t1, simdutf_vec(0b1000000000000000)); + + // s0: [aaaa|bbbb|bbcc|cccc] => [0000|0000|0000|aaaa] + const uint16x8_t s0 = vshrq_n_u16(in, 12); + // s1: [aaaa|bbbb|bbcc|cccc] => [0000|bbbb|bb00|0000] + const uint16x8_t s1 = vandq_u16(in, simdutf_vec(0b0000111111000000)); + // [0000|bbbb|bb00|0000] => [00bb|bbbb|0000|0000] + const uint16x8_t s1s = vshlq_n_u16(s1, 2); + // [00bb|bbbb|0000|aaaa] + const uint16x8_t s2 = vorrq_u16(s0, s1s); + // s3: [00bb|bbbb|0000|aaaa] => [11bb|bbbb|1110|aaaa] + const uint16x8_t s3 = vorrq_u16(s2, simdutf_vec(0b1100000011100000)); + const uint16x8_t v_07ff = vmovq_n_u16((uint16_t)0x07FF); + const uint16x8_t one_or_two_bytes_bytemask = vcleq_u16(in, v_07ff); + const uint16x8_t m0 = + vbicq_u16(simdutf_vec(0b0100000000000000), one_or_two_bytes_bytemask); + const uint16x8_t s4 = veorq_u16(s3, m0); +#undef simdutf_vec + + // 4. expand code units 16-bit => 32-bit + const uint8x16_t out0 = vreinterpretq_u8_u16(vzip1q_u16(t2, s4)); + const uint8x16_t out1 = vreinterpretq_u8_u16(vzip2q_u16(t2, s4)); + // 5. compress 32-bit code units into 1, 2 or 3 bytes -- 2 x shuffle + const uint16x8_t v_007f = vmovq_n_u16((uint16_t)0x007F); + const uint16x8_t one_byte_bytemask = vcleq_u16(in, v_007f); +#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO + const uint16x8_t onemask = simdutf_make_uint16x8_t( + 0x0001, 0x0004, 0x0010, 0x0040, 0x0100, 0x0400, 0x1000, 0x4000); + const uint16x8_t twomask = simdutf_make_uint16x8_t( + 0x0002, 0x0008, 0x0020, 0x0080, 0x0200, 0x0800, 0x2000, 0x8000); +#else + const uint16x8_t onemask = {0x0001, 0x0004, 0x0010, 0x0040, + 0x0100, 0x0400, 0x1000, 0x4000}; + const uint16x8_t twomask = {0x0002, 0x0008, 0x0020, 0x0080, + 0x0200, 0x0800, 0x2000, 0x8000}; +#endif + const uint16x8_t combined = + vorrq_u16(vandq_u16(one_byte_bytemask, onemask), + vandq_u16(one_or_two_bytes_bytemask, twomask)); + const uint16_t mask = vaddvq_u16(combined); + // The following fast path may or may not be beneficial. + /*if(mask == 0) { + // We only have three-byte code units. Use fast path. + const uint8x16_t shuffle = {2,3,1,6,7,5,10,11,9,14,15,13,0,0,0,0}; + const uint8x16_t utf8_0 = vqtbl1q_u8(out0, shuffle); + const uint8x16_t utf8_1 = vqtbl1q_u8(out1, shuffle); vst1q_u8(utf8_output, utf8_0); - utf8_output += row0[0]; + utf8_output += 12; vst1q_u8(utf8_output, utf8_1); - utf8_output += row1[0]; - + utf8_output += 12; buf += 8; - // surrogate pair(s) in a register + continue; + }*/ + const uint8_t mask0 = uint8_t(mask); + + const uint8_t *row0 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; + const uint8x16_t shuffle0 = vld1q_u8(row0 + 1); + const uint8x16_t utf8_0 = vqtbl1q_u8(out0, shuffle0); + + const uint8_t mask1 = static_cast(mask >> 8); + const uint8_t *row1 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; + const uint8x16_t shuffle1 = vld1q_u8(row1 + 1); + const uint8x16_t utf8_1 = vqtbl1q_u8(out1, shuffle1); + + vst1q_u8(utf8_output, utf8_0); + utf8_output += row0[0]; + vst1q_u8(utf8_output, utf8_1); + utf8_output += row1[0]; + + buf += 8; + // surrogate pair(s) in a register } else { // Let us do a scalar fallback. // It may seem wasteful to use scalar code, but being efficient with SIMD // in the presence of surrogate pairs may require non-trivial tables. size_t forward = 15; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { - uint16_t word = !match_system(big_endian) ? scalar::utf16::swap_bytes(buf[k]) : buf[k]; - if((word & 0xFF80)==0) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { + uint16_t word = !match_system(big_endian) + ? scalar::utf16::swap_bytes(buf[k]) + : buf[k]; + if ((word & 0xFF80) == 0) { *utf8_output++ = char(word); - } else if((word & 0xF800)==0) { - *utf8_output++ = char((word>>6) | 0b11000000); + } else if ((word & 0xF800) == 0) { + *utf8_output++ = char((word >> 6) | 0b11000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); - } else if((word &0xF800 ) != 0xD800) { - *utf8_output++ = char((word>>12) | 0b11100000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + } else if ((word & 0xF800) != 0xD800) { + *utf8_output++ = char((word >> 12) | 0b11100000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); } else { // must be a surrogate pair uint16_t diff = uint16_t(word - 0xD800); - uint16_t next_word = !match_system(big_endian) ? scalar::utf16::swap_bytes(buf[k + 1]) : buf[k + 1]; + uint16_t next_word = !match_system(big_endian) + ? scalar::utf16::swap_bytes(buf[k + 1]) + : buf[k + 1]; k++; uint16_t diff2 = uint16_t(next_word - 0xDC00); - if((diff | diff2) > 0x3FF) { return std::make_pair(nullptr, reinterpret_cast(utf8_output)); } + if ((diff | diff2) > 0x3FF) { + return std::make_pair(nullptr, + reinterpret_cast(utf8_output)); + } uint32_t value = (diff << 10) + diff2 + 0x10000; - *utf8_output++ = char((value>>18) | 0b11110000); - *utf8_output++ = char(((value>>12) & 0b111111) | 0b10000000); - *utf8_output++ = char(((value>>6) & 0b111111) | 0b10000000); + *utf8_output++ = char((value >> 18) | 0b11110000); + *utf8_output++ = char(((value >> 12) & 0b111111) | 0b10000000); + *utf8_output++ = char(((value >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((value & 0b111111) | 0b10000000); } } @@ -15528,253 +15007,272 @@ std::pair arm_convert_utf16_to_utf8(const char16_t* buf, } } // while - return std::make_pair(buf, reinterpret_cast(utf8_output)); + return std::make_pair(buf, reinterpret_cast(utf8_output)); } - /* Returns a pair: a result struct and utf8_output. - If there is an error, the count field of the result is the position of the error. - Otherwise, it is the position of the first unprocessed byte in buf (even if finished). - A scalar routing should carry on the conversion of the tail if needed. + If there is an error, the count field of the result is the position of the + error. Otherwise, it is the position of the first unprocessed byte in buf + (even if finished). A scalar routing should carry on the conversion of the + tail if needed. */ template -std::pair arm_convert_utf16_to_utf8_with_errors(const char16_t* buf, size_t len, char* utf8_out) { - uint8_t * utf8_output = reinterpret_cast(utf8_out); - const char16_t* start = buf; - const char16_t* end = buf + len; +std::pair +arm_convert_utf16_to_utf8_with_errors(const char16_t *buf, size_t len, + char *utf8_out) { + uint8_t *utf8_output = reinterpret_cast(utf8_out); + const char16_t *start = buf; + const char16_t *end = buf + len; const uint16x8_t v_f800 = vmovq_n_u16((uint16_t)0xf800); const uint16x8_t v_d800 = vmovq_n_u16((uint16_t)0xd800); const uint16x8_t v_c080 = vmovq_n_u16((uint16_t)0xc080); - const size_t safety_margin = 12; // to avoid overruns, see issue https://github.com/simdutf/simdutf/issues/92 + const size_t safety_margin = + 12; // to avoid overruns, see issue + // https://github.com/simdutf/simdutf/issues/92 while (end - buf >= std::ptrdiff_t(16 + safety_margin)) { uint16x8_t in = vld1q_u16(reinterpret_cast(buf)); - if (!match_system(big_endian)) { in = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in))); } - if(vmaxvq_u16(in) <= 0x7F) { // ASCII fast path!!!! - // It is common enough that we have sequences of 16 consecutive ASCII characters. - uint16x8_t nextin = vld1q_u16(reinterpret_cast(buf) + 8); - if (!match_system(big_endian)) { nextin = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(nextin))); } - if(vmaxvq_u16(nextin) > 0x7F) { - // 1. pack the bytes - // obviously suboptimal. - uint8x8_t utf8_packed = vmovn_u16(in); - // 2. store (8 bytes) - vst1_u8(utf8_output, utf8_packed); - // 3. adjust pointers - buf += 8; - utf8_output += 8; - in = nextin; - } else { - // 1. pack the bytes - // obviously suboptimal. - uint8x16_t utf8_packed = vmovn_high_u16(vmovn_u16(in), nextin); - // 2. store (16 bytes) - vst1q_u8(utf8_output, utf8_packed); - // 3. adjust pointers - buf += 16; - utf8_output += 16; - continue; // we are done for this round! - } + if (!match_system(big_endian)) { + in = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in))); + } + if (vmaxvq_u16(in) <= 0x7F) { // ASCII fast path!!!! + // It is common enough that we have sequences of 16 consecutive ASCII + // characters. + uint16x8_t nextin = + vld1q_u16(reinterpret_cast(buf) + 8); + if (!match_system(big_endian)) { + nextin = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(nextin))); + } + if (vmaxvq_u16(nextin) > 0x7F) { + // 1. pack the bytes + // obviously suboptimal. + uint8x8_t utf8_packed = vmovn_u16(in); + // 2. store (8 bytes) + vst1_u8(utf8_output, utf8_packed); + // 3. adjust pointers + buf += 8; + utf8_output += 8; + in = nextin; + } else { + // 1. pack the bytes + // obviously suboptimal. + uint8x16_t utf8_packed = vmovn_high_u16(vmovn_u16(in), nextin); + // 2. store (16 bytes) + vst1q_u8(utf8_output, utf8_packed); + // 3. adjust pointers + buf += 16; + utf8_output += 16; + continue; // we are done for this round! + } } if (vmaxvq_u16(in) <= 0x7FF) { - // 1. prepare 2-byte values - // input 16-bit word : [0000|0aaa|aabb|bbbb] x 8 - // expected output : [110a|aaaa|10bb|bbbb] x 8 - const uint16x8_t v_1f00 = vmovq_n_u16((int16_t)0x1f00); - const uint16x8_t v_003f = vmovq_n_u16((int16_t)0x003f); - - // t0 = [000a|aaaa|bbbb|bb00] - const uint16x8_t t0 = vshlq_n_u16(in, 2); - // t1 = [000a|aaaa|0000|0000] - const uint16x8_t t1 = vandq_u16(t0, v_1f00); - // t2 = [0000|0000|00bb|bbbb] - const uint16x8_t t2 = vandq_u16(in, v_003f); - // t3 = [000a|aaaa|00bb|bbbb] - const uint16x8_t t3 = vorrq_u16(t1, t2); - // t4 = [110a|aaaa|10bb|bbbb] - const uint16x8_t t4 = vorrq_u16(t3, v_c080); - // 2. merge ASCII and 2-byte codewords - const uint16x8_t v_007f = vmovq_n_u16((uint16_t)0x007F); - const uint16x8_t one_byte_bytemask = vcleq_u16(in, v_007f); - const uint8x16_t utf8_unpacked = vreinterpretq_u8_u16(vbslq_u16(one_byte_bytemask, in, t4)); - // 3. prepare bitmask for 8-bit lookup + // 1. prepare 2-byte values + // input 16-bit word : [0000|0aaa|aabb|bbbb] x 8 + // expected output : [110a|aaaa|10bb|bbbb] x 8 + const uint16x8_t v_1f00 = vmovq_n_u16((int16_t)0x1f00); + const uint16x8_t v_003f = vmovq_n_u16((int16_t)0x003f); + + // t0 = [000a|aaaa|bbbb|bb00] + const uint16x8_t t0 = vshlq_n_u16(in, 2); + // t1 = [000a|aaaa|0000|0000] + const uint16x8_t t1 = vandq_u16(t0, v_1f00); + // t2 = [0000|0000|00bb|bbbb] + const uint16x8_t t2 = vandq_u16(in, v_003f); + // t3 = [000a|aaaa|00bb|bbbb] + const uint16x8_t t3 = vorrq_u16(t1, t2); + // t4 = [110a|aaaa|10bb|bbbb] + const uint16x8_t t4 = vorrq_u16(t3, v_c080); + // 2. merge ASCII and 2-byte codewords + const uint16x8_t v_007f = vmovq_n_u16((uint16_t)0x007F); + const uint16x8_t one_byte_bytemask = vcleq_u16(in, v_007f); + const uint8x16_t utf8_unpacked = + vreinterpretq_u8_u16(vbslq_u16(one_byte_bytemask, in, t4)); + // 3. prepare bitmask for 8-bit lookup #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - const uint16x8_t mask = simdutf_make_uint16x8_t(0x0001, 0x0004, - 0x0010, 0x0040, - 0x0002, 0x0008, - 0x0020, 0x0080); + const uint16x8_t mask = simdutf_make_uint16x8_t( + 0x0001, 0x0004, 0x0010, 0x0040, 0x0002, 0x0008, 0x0020, 0x0080); #else - const uint16x8_t mask = { 0x0001, 0x0004, - 0x0010, 0x0040, - 0x0002, 0x0008, - 0x0020, 0x0080 }; + const uint16x8_t mask = {0x0001, 0x0004, 0x0010, 0x0040, + 0x0002, 0x0008, 0x0020, 0x0080}; #endif - uint16_t m2 = vaddvq_u16(vandq_u16(one_byte_bytemask, mask)); - // 4. pack the bytes - const uint8_t* row = &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[m2][0]; - const uint8x16_t shuffle = vld1q_u8(row + 1); - const uint8x16_t utf8_packed = vqtbl1q_u8(utf8_unpacked, shuffle); - - // 5. store bytes - vst1q_u8(utf8_output, utf8_packed); + uint16_t m2 = vaddvq_u16(vandq_u16(one_byte_bytemask, mask)); + // 4. pack the bytes + const uint8_t *row = + &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[m2][0]; + const uint8x16_t shuffle = vld1q_u8(row + 1); + const uint8x16_t utf8_packed = vqtbl1q_u8(utf8_unpacked, shuffle); - // 6. adjust pointers - buf += 8; - utf8_output += row[0]; - continue; + // 5. store bytes + vst1q_u8(utf8_output, utf8_packed); + // 6. adjust pointers + buf += 8; + utf8_output += row[0]; + continue; } - const uint16x8_t surrogates_bytemask = vceqq_u16(vandq_u16(in, v_f800), v_d800); - // It might seem like checking for surrogates_bitmask == 0xc000 could help. However, - // it is likely an uncommon occurrence. + const uint16x8_t surrogates_bytemask = + vceqq_u16(vandq_u16(in, v_f800), v_d800); + // It might seem like checking for surrogates_bitmask == 0xc000 could help. + // However, it is likely an uncommon occurrence. if (vmaxvq_u16(surrogates_bytemask) == 0) { - // case: code units from register produce either 1, 2 or 3 UTF-8 bytes + // case: code units from register produce either 1, 2 or 3 UTF-8 bytes #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - const uint16x8_t dup_even = simdutf_make_uint16x8_t(0x0000, 0x0202, 0x0404, 0x0606, - 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); + const uint16x8_t dup_even = simdutf_make_uint16x8_t( + 0x0000, 0x0202, 0x0404, 0x0606, 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); #else - const uint16x8_t dup_even = {0x0000, 0x0202, 0x0404, 0x0606, - 0x0808, 0x0a0a, 0x0c0c, 0x0e0e}; + const uint16x8_t dup_even = {0x0000, 0x0202, 0x0404, 0x0606, + 0x0808, 0x0a0a, 0x0c0c, 0x0e0e}; #endif - /* In this branch we handle three cases: - 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - single UFT-8 byte - 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two UTF-8 bytes - 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - three UTF-8 bytes - - We expand the input word (16-bit) into two code units (32-bit), thus - we have room for four bytes. However, we need five distinct bit - layouts. Note that the last byte in cases #2 and #3 is the same. + /* In this branch we handle three cases: + 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - + single UFT-8 byte + 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two + UTF-8 bytes + 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - + three UTF-8 bytes - We precompute byte 1 for case #1 and the common byte for cases #2 & #3 - in register t2. + We expand the input word (16-bit) into two code units (32-bit), thus + we have room for four bytes. However, we need five distinct bit + layouts. Note that the last byte in cases #2 and #3 is the same. - We precompute byte 1 for case #3 and -- **conditionally** -- precompute - either byte 1 for case #2 or byte 2 for case #3. Note that they - differ by exactly one bit. + We precompute byte 1 for case #1 and the common byte for cases #2 & #3 + in register t2. - Finally from these two code units we build proper UTF-8 sequence, taking - into account the case (i.e, the number of bytes to write). - */ - /** - * Given [aaaa|bbbb|bbcc|cccc] our goal is to produce: - * t2 => [0ccc|cccc] [10cc|cccc] - * s4 => [1110|aaaa] ([110b|bbbb] OR [10bb|bbbb]) - */ -#define simdutf_vec(x) vmovq_n_u16(static_cast(x)) - // [aaaa|bbbb|bbcc|cccc] => [bbcc|cccc|bbcc|cccc] - const uint16x8_t t0 = vreinterpretq_u16_u8(vqtbl1q_u8(vreinterpretq_u8_u16(in), vreinterpretq_u8_u16(dup_even))); - // [bbcc|cccc|bbcc|cccc] => [00cc|cccc|0bcc|cccc] - const uint16x8_t t1 = vandq_u16(t0, simdutf_vec(0b0011111101111111)); - // [00cc|cccc|0bcc|cccc] => [10cc|cccc|0bcc|cccc] - const uint16x8_t t2 = vorrq_u16 (t1, simdutf_vec(0b1000000000000000)); + We precompute byte 1 for case #3 and -- **conditionally** -- precompute + either byte 1 for case #2 or byte 2 for case #3. Note that they + differ by exactly one bit. - // s0: [aaaa|bbbb|bbcc|cccc] => [0000|0000|0000|aaaa] - const uint16x8_t s0 = vshrq_n_u16(in, 12); - // s1: [aaaa|bbbb|bbcc|cccc] => [0000|bbbb|bb00|0000] - const uint16x8_t s1 = vandq_u16(in, simdutf_vec(0b0000111111000000)); - // [0000|bbbb|bb00|0000] => [00bb|bbbb|0000|0000] - const uint16x8_t s1s = vshlq_n_u16(s1, 2); - // [00bb|bbbb|0000|aaaa] - const uint16x8_t s2 = vorrq_u16(s0, s1s); - // s3: [00bb|bbbb|0000|aaaa] => [11bb|bbbb|1110|aaaa] - const uint16x8_t s3 = vorrq_u16(s2, simdutf_vec(0b1100000011100000)); - const uint16x8_t v_07ff = vmovq_n_u16((uint16_t)0x07FF); - const uint16x8_t one_or_two_bytes_bytemask = vcleq_u16(in, v_07ff); - const uint16x8_t m0 = vbicq_u16(simdutf_vec(0b0100000000000000), one_or_two_bytes_bytemask); - const uint16x8_t s4 = veorq_u16(s3, m0); + Finally from these two code units we build proper UTF-8 sequence, taking + into account the case (i.e, the number of bytes to write). + */ + /** + * Given [aaaa|bbbb|bbcc|cccc] our goal is to produce: + * t2 => [0ccc|cccc] [10cc|cccc] + * s4 => [1110|aaaa] ([110b|bbbb] OR [10bb|bbbb]) + */ +#define simdutf_vec(x) vmovq_n_u16(static_cast(x)) + // [aaaa|bbbb|bbcc|cccc] => [bbcc|cccc|bbcc|cccc] + const uint16x8_t t0 = vreinterpretq_u16_u8( + vqtbl1q_u8(vreinterpretq_u8_u16(in), vreinterpretq_u8_u16(dup_even))); + // [bbcc|cccc|bbcc|cccc] => [00cc|cccc|0bcc|cccc] + const uint16x8_t t1 = vandq_u16(t0, simdutf_vec(0b0011111101111111)); + // [00cc|cccc|0bcc|cccc] => [10cc|cccc|0bcc|cccc] + const uint16x8_t t2 = vorrq_u16(t1, simdutf_vec(0b1000000000000000)); + + // s0: [aaaa|bbbb|bbcc|cccc] => [0000|0000|0000|aaaa] + const uint16x8_t s0 = vshrq_n_u16(in, 12); + // s1: [aaaa|bbbb|bbcc|cccc] => [0000|bbbb|bb00|0000] + const uint16x8_t s1 = vandq_u16(in, simdutf_vec(0b0000111111000000)); + // [0000|bbbb|bb00|0000] => [00bb|bbbb|0000|0000] + const uint16x8_t s1s = vshlq_n_u16(s1, 2); + // [00bb|bbbb|0000|aaaa] + const uint16x8_t s2 = vorrq_u16(s0, s1s); + // s3: [00bb|bbbb|0000|aaaa] => [11bb|bbbb|1110|aaaa] + const uint16x8_t s3 = vorrq_u16(s2, simdutf_vec(0b1100000011100000)); + const uint16x8_t v_07ff = vmovq_n_u16((uint16_t)0x07FF); + const uint16x8_t one_or_two_bytes_bytemask = vcleq_u16(in, v_07ff); + const uint16x8_t m0 = + vbicq_u16(simdutf_vec(0b0100000000000000), one_or_two_bytes_bytemask); + const uint16x8_t s4 = veorq_u16(s3, m0); #undef simdutf_vec - // 4. expand code units 16-bit => 32-bit - const uint8x16_t out0 = vreinterpretq_u8_u16(vzip1q_u16(t2, s4)); - const uint8x16_t out1 = vreinterpretq_u8_u16(vzip2q_u16(t2, s4)); + // 4. expand code units 16-bit => 32-bit + const uint8x16_t out0 = vreinterpretq_u8_u16(vzip1q_u16(t2, s4)); + const uint8x16_t out1 = vreinterpretq_u8_u16(vzip2q_u16(t2, s4)); - // 5. compress 32-bit code units into 1, 2 or 3 bytes -- 2 x shuffle - const uint16x8_t v_007f = vmovq_n_u16((uint16_t)0x007F); - const uint16x8_t one_byte_bytemask = vcleq_u16(in, v_007f); + // 5. compress 32-bit code units into 1, 2 or 3 bytes -- 2 x shuffle + const uint16x8_t v_007f = vmovq_n_u16((uint16_t)0x007F); + const uint16x8_t one_byte_bytemask = vcleq_u16(in, v_007f); #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - const uint16x8_t onemask = simdutf_make_uint16x8_t(0x0001, 0x0004, - 0x0010, 0x0040, - 0x0100, 0x0400, - 0x1000, 0x4000 ); - const uint16x8_t twomask = simdutf_make_uint16x8_t(0x0002, 0x0008, - 0x0020, 0x0080, - 0x0200, 0x0800, - 0x2000, 0x8000 ); + const uint16x8_t onemask = simdutf_make_uint16x8_t( + 0x0001, 0x0004, 0x0010, 0x0040, 0x0100, 0x0400, 0x1000, 0x4000); + const uint16x8_t twomask = simdutf_make_uint16x8_t( + 0x0002, 0x0008, 0x0020, 0x0080, 0x0200, 0x0800, 0x2000, 0x8000); #else - const uint16x8_t onemask = { 0x0001, 0x0004, - 0x0010, 0x0040, - 0x0100, 0x0400, - 0x1000, 0x4000 }; - const uint16x8_t twomask = { 0x0002, 0x0008, - 0x0020, 0x0080, - 0x0200, 0x0800, - 0x2000, 0x8000 }; + const uint16x8_t onemask = {0x0001, 0x0004, 0x0010, 0x0040, + 0x0100, 0x0400, 0x1000, 0x4000}; + const uint16x8_t twomask = {0x0002, 0x0008, 0x0020, 0x0080, + 0x0200, 0x0800, 0x2000, 0x8000}; #endif - const uint16x8_t combined = vorrq_u16(vandq_u16(one_byte_bytemask, onemask), vandq_u16(one_or_two_bytes_bytemask, twomask)); - const uint16_t mask = vaddvq_u16(combined); - // The following fast path may or may not be beneficial. - /*if(mask == 0) { - // We only have three-byte code units. Use fast path. - const uint8x16_t shuffle = {2,3,1,6,7,5,10,11,9,14,15,13,0,0,0,0}; - const uint8x16_t utf8_0 = vqtbl1q_u8(out0, shuffle); - const uint8x16_t utf8_1 = vqtbl1q_u8(out1, shuffle); - vst1q_u8(utf8_output, utf8_0); - utf8_output += 12; - vst1q_u8(utf8_output, utf8_1); - utf8_output += 12; - buf += 8; - continue; - }*/ - const uint8_t mask0 = uint8_t(mask); + const uint16x8_t combined = + vorrq_u16(vandq_u16(one_byte_bytemask, onemask), + vandq_u16(one_or_two_bytes_bytemask, twomask)); + const uint16_t mask = vaddvq_u16(combined); + // The following fast path may or may not be beneficial. + /*if(mask == 0) { + // We only have three-byte code units. Use fast path. + const uint8x16_t shuffle = {2,3,1,6,7,5,10,11,9,14,15,13,0,0,0,0}; + const uint8x16_t utf8_0 = vqtbl1q_u8(out0, shuffle); + const uint8x16_t utf8_1 = vqtbl1q_u8(out1, shuffle); + vst1q_u8(utf8_output, utf8_0); + utf8_output += 12; + vst1q_u8(utf8_output, utf8_1); + utf8_output += 12; + buf += 8; + continue; + }*/ + const uint8_t mask0 = uint8_t(mask); - const uint8_t* row0 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; - const uint8x16_t shuffle0 = vld1q_u8(row0 + 1); - const uint8x16_t utf8_0 = vqtbl1q_u8(out0, shuffle0); + const uint8_t *row0 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; + const uint8x16_t shuffle0 = vld1q_u8(row0 + 1); + const uint8x16_t utf8_0 = vqtbl1q_u8(out0, shuffle0); - const uint8_t mask1 = static_cast(mask >> 8); - const uint8_t* row1 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; - const uint8x16_t shuffle1 = vld1q_u8(row1 + 1); - const uint8x16_t utf8_1 = vqtbl1q_u8(out1, shuffle1); + const uint8_t mask1 = static_cast(mask >> 8); + const uint8_t *row1 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; + const uint8x16_t shuffle1 = vld1q_u8(row1 + 1); + const uint8x16_t utf8_1 = vqtbl1q_u8(out1, shuffle1); - vst1q_u8(utf8_output, utf8_0); - utf8_output += row0[0]; - vst1q_u8(utf8_output, utf8_1); - utf8_output += row1[0]; + vst1q_u8(utf8_output, utf8_0); + utf8_output += row0[0]; + vst1q_u8(utf8_output, utf8_1); + utf8_output += row1[0]; - buf += 8; - // surrogate pair(s) in a register + buf += 8; + // surrogate pair(s) in a register } else { // Let us do a scalar fallback. // It may seem wasteful to use scalar code, but being efficient with SIMD // in the presence of surrogate pairs may require non-trivial tables. size_t forward = 15; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { - uint16_t word = !match_system(big_endian) ? scalar::utf16::swap_bytes(buf[k]) : buf[k]; - if((word & 0xFF80)==0) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { + uint16_t word = !match_system(big_endian) + ? scalar::utf16::swap_bytes(buf[k]) + : buf[k]; + if ((word & 0xFF80) == 0) { *utf8_output++ = char(word); - } else if((word & 0xF800)==0) { - *utf8_output++ = char((word>>6) | 0b11000000); + } else if ((word & 0xF800) == 0) { + *utf8_output++ = char((word >> 6) | 0b11000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); - } else if((word &0xF800 ) != 0xD800) { - *utf8_output++ = char((word>>12) | 0b11100000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + } else if ((word & 0xF800) != 0xD800) { + *utf8_output++ = char((word >> 12) | 0b11100000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); } else { // must be a surrogate pair uint16_t diff = uint16_t(word - 0xD800); - uint16_t next_word = !match_system(big_endian) ? scalar::utf16::swap_bytes(buf[k + 1]) : buf[k + 1]; + uint16_t next_word = !match_system(big_endian) + ? scalar::utf16::swap_bytes(buf[k + 1]) + : buf[k + 1]; k++; uint16_t diff2 = uint16_t(next_word - 0xDC00); - if((diff | diff2) > 0x3FF) { return std::make_pair(result(error_code::SURROGATE, buf - start + k - 1), reinterpret_cast(utf8_output)); } + if ((diff | diff2) > 0x3FF) { + return std::make_pair( + result(error_code::SURROGATE, buf - start + k - 1), + reinterpret_cast(utf8_output)); + } uint32_t value = (diff << 10) + diff2 + 0x10000; - *utf8_output++ = char((value>>18) | 0b11110000); - *utf8_output++ = char(((value>>12) & 0b111111) | 0b10000000); - *utf8_output++ = char(((value>>6) & 0b111111) | 0b10000000); + *utf8_output++ = char((value >> 18) | 0b11110000); + *utf8_output++ = char(((value >> 12) & 0b111111) | 0b10000000); + *utf8_output++ = char(((value >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((value & 0b111111) | 0b10000000); } } @@ -15782,740 +15280,630 @@ std::pair arm_convert_utf16_to_utf8_with_errors(const char16_t* b } } // while - return std::make_pair(result(error_code::SUCCESS, buf - start), reinterpret_cast(utf8_output)); + return std::make_pair(result(error_code::SUCCESS, buf - start), + reinterpret_cast(utf8_output)); } /* end file src/arm64/arm_convert_utf16_to_utf8.cpp */ -/* begin file src/arm64/arm_convert_utf16_to_utf32.cpp */ -/* - The vectorized algorithm works on single SSE register i.e., it - loads eight 16-bit code units. - - We consider three cases: - 1. an input register contains no surrogates and each value - is in range 0x0000 .. 0x07ff. - 2. an input register contains no surrogates and values are - is in range 0x0000 .. 0xffff. - 3. an input register contains surrogates --- i.e. codepoints - can have 16 or 32 bits. - Ad 1. +/* begin file src/arm64/arm_base64.cpp */ +/** + * References and further reading: + * + * Wojciech Muła, Daniel Lemire, Base64 encoding and decoding at almost the + * speed of a memory copy, Software: Practice and Experience 50 (2), 2020. + * https://arxiv.org/abs/1910.05109 + * + * Wojciech Muła, Daniel Lemire, Faster Base64 Encoding and Decoding using AVX2 + * Instructions, ACM Transactions on the Web 12 (3), 2018. + * https://arxiv.org/abs/1704.00605 + * + * Simon Josefsson. 2006. The Base16, Base32, and Base64 Data Encodings. + * https://tools.ietf.org/html/rfc4648. (2006). Internet Engineering Task Force, + * Request for Comments: 4648. + * + * Alfred Klomp. 2014a. Fast Base64 encoding/decoding with SSE vectorization. + * http://www.alfredklomp.com/programming/sse-base64/. (2014). + * + * Alfred Klomp. 2014b. Fast Base64 stream encoder/decoder in C99, with SIMD + * acceleration. https://github.com/aklomp/base64. (2014). + * + * Hanson Char. 2014. A Fast and Correct Base 64 Codec. (2014). + * https://aws.amazon.com/blogs/developer/a-fast-and-correct-base-64-codec/ + * + * Nick Kopp. 2013. Base64 Encoding on a GPU. + * https://www.codeproject.com/Articles/276993/Base-Encoding-on-a-GPU. (2013). + */ - When values are less than 0x0800, it means that a 16-bit code unit - can be converted into: 1) single UTF8 byte (when it is an ASCII - char) or 2) two UTF8 bytes. +size_t encode_base64(char *dst, const char *src, size_t srclen, + base64_options options) { + // credit: Wojciech Muła + uint8_t *out = (uint8_t *)dst; + constexpr static uint8_t source_table[64] = { + 'A', 'Q', 'g', 'w', 'B', 'R', 'h', 'x', 'C', 'S', 'i', 'y', 'D', + 'T', 'j', 'z', 'E', 'U', 'k', '0', 'F', 'V', 'l', '1', 'G', 'W', + 'm', '2', 'H', 'X', 'n', '3', 'I', 'Y', 'o', '4', 'J', 'Z', 'p', + '5', 'K', 'a', 'q', '6', 'L', 'b', 'r', '7', 'M', 'c', 's', '8', + 'N', 'd', 't', '9', 'O', 'e', 'u', '+', 'P', 'f', 'v', '/', + }; + constexpr static uint8_t source_table_url[64] = { + 'A', 'Q', 'g', 'w', 'B', 'R', 'h', 'x', 'C', 'S', 'i', 'y', 'D', + 'T', 'j', 'z', 'E', 'U', 'k', '0', 'F', 'V', 'l', '1', 'G', 'W', + 'm', '2', 'H', 'X', 'n', '3', 'I', 'Y', 'o', '4', 'J', 'Z', 'p', + '5', 'K', 'a', 'q', '6', 'L', 'b', 'r', '7', 'M', 'c', 's', '8', + 'N', 'd', 't', '9', 'O', 'e', 'u', '-', 'P', 'f', 'v', '_', + }; + const uint8x16_t v3f = vdupq_n_u8(0x3f); +#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO + // When trying to load a uint8_t array, Visual Studio might + // error with: error C2664: '__n128x4 neon_ld4m_q8(const char *)': + // cannot convert argument 1 from 'const uint8_t [64]' to 'const char * + const uint8x16x4_t table = vld4q_u8( + (reinterpret_cast(options & base64_url) ? source_table_url + : source_table)); +#else + const uint8x16x4_t table = + vld4q_u8((options & base64_url) ? source_table_url : source_table); +#endif + size_t i = 0; + for (; i + 16 * 3 <= srclen; i += 16 * 3) { + const uint8x16x3_t in = vld3q_u8((const uint8_t *)src + i); + uint8x16x4_t result; + result.val[0] = vshrq_n_u8(in.val[0], 2); + result.val[1] = + vandq_u8(vsliq_n_u8(vshrq_n_u8(in.val[1], 4), in.val[0], 4), v3f); + result.val[2] = + vandq_u8(vsliq_n_u8(vshrq_n_u8(in.val[2], 6), in.val[1], 2), v3f); + result.val[3] = vandq_u8(in.val[2], v3f); + result.val[0] = vqtbl4q_u8(table, result.val[0]); + result.val[1] = vqtbl4q_u8(table, result.val[1]); + result.val[2] = vqtbl4q_u8(table, result.val[2]); + result.val[3] = vqtbl4q_u8(table, result.val[3]); + vst4q_u8(out, result); + out += 64; + } + out += scalar::base64::tail_encode_base64((char *)out, src + i, srclen - i, + options); - For this case we do only some shuffle to obtain these 2-byte - codes and finally compress the whole SSE register with a single - shuffle. + return size_t((char *)out - dst); +} - We need 256-entry lookup table to get a compression pattern - and the number of output bytes in the compressed vector register. - Each entry occupies 17 bytes. +static inline void compress(uint8x16_t data, uint16_t mask, char *output) { + if (mask == 0) { + vst1q_u8((uint8_t *)output, data); + return; + } + uint8_t mask1 = uint8_t(mask); // least significant 8 bits + uint8_t mask2 = uint8_t(mask >> 8); // most significant 8 bits + uint64x2_t compactmasku64 = {tables::base64::thintable_epi8[mask1], + tables::base64::thintable_epi8[mask2]}; + uint8x16_t compactmask = vreinterpretq_u8_u64(compactmasku64); +#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO + const uint8x16_t off = + simdutf_make_uint8x16_t(0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8); +#else + const uint8x16_t off = {0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8}; +#endif - Ad 2. + compactmask = vaddq_u8(compactmask, off); + uint8x16_t pruned = vqtbl1q_u8(data, compactmask); - When values fit in 16-bit code units, but are above 0x07ff, then - a single word may produce one, two or three UTF8 bytes. + int pop1 = tables::base64::BitsSetTable256mul2[mask1]; + // then load the corresponding mask, what it does is to write + // only the first pop1 bytes from the first 8 bytes, and then + // it fills in with the bytes from the second 8 bytes + some filling + // at the end. + compactmask = vld1q_u8(tables::base64::pshufb_combine_table + pop1 * 8); + uint8x16_t answer = vqtbl1q_u8(pruned, compactmask); + vst1q_u8((uint8_t *)output, answer); +} - We prepare data for all these three cases in two registers. - The first register contains lower two UTF8 bytes (used in all - cases), while the second one contains just the third byte for - the three-UTF8-bytes case. +struct block64 { + uint8x16_t chunks[4]; +}; - Finally these two registers are interleaved forming eight-element - array of 32-bit values. The array spans two SSE registers. - The bytes from the registers are compressed using two shuffles. +static_assert(sizeof(block64) == 64, "block64 is not 64 bytes"); +template uint64_t to_base64_mask(block64 *b, bool *error) { + uint8x16_t v0f = vdupq_n_u8(0xf); - We need 256-entry lookup table to get a compression pattern - and the number of output bytes in the compressed vector register. - Each entry occupies 17 bytes. + uint8x16_t underscore0, underscore1, underscore2, underscore3; + if (base64_url) { + underscore0 = vceqq_u8(b->chunks[0], vdupq_n_u8(0x5f)); + underscore1 = vceqq_u8(b->chunks[1], vdupq_n_u8(0x5f)); + underscore2 = vceqq_u8(b->chunks[2], vdupq_n_u8(0x5f)); + underscore3 = vceqq_u8(b->chunks[3], vdupq_n_u8(0x5f)); + } else { + (void)underscore0; + (void)underscore1; + (void)underscore2; + (void)underscore3; + } + uint8x16_t lo_nibbles0 = vandq_u8(b->chunks[0], v0f); + uint8x16_t lo_nibbles1 = vandq_u8(b->chunks[1], v0f); + uint8x16_t lo_nibbles2 = vandq_u8(b->chunks[2], v0f); + uint8x16_t lo_nibbles3 = vandq_u8(b->chunks[3], v0f); - To summarize: - - We need two 256-entry tables that have 8704 bytes in total. -*/ -/* - Returns a pair: the first unprocessed byte from buf and utf8_output - A scalar routing should carry on the conversion of the tail. -*/ -template -std::pair arm_convert_utf16_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_out) { - uint32_t * utf32_output = reinterpret_cast(utf32_out); - const char16_t* end = buf + len; + // Needed by the decoding step. + uint8x16_t hi_nibbles0 = vshrq_n_u8(b->chunks[0], 4); + uint8x16_t hi_nibbles1 = vshrq_n_u8(b->chunks[1], 4); + uint8x16_t hi_nibbles2 = vshrq_n_u8(b->chunks[2], 4); + uint8x16_t hi_nibbles3 = vshrq_n_u8(b->chunks[3], 4); + uint8x16_t lut_lo; +#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO + if (base64_url) { + lut_lo = + simdutf_make_uint8x16_t(0x3a, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, + 0x70, 0x61, 0xe1, 0xf4, 0xe5, 0xa5, 0xf4, 0xf4); + } else { + lut_lo = + simdutf_make_uint8x16_t(0x3a, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, + 0x70, 0x61, 0xe1, 0xb4, 0xe5, 0xe5, 0xf4, 0xb4); + } +#else + if (base64_url) { + lut_lo = uint8x16_t{0x3a, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, + 0x70, 0x61, 0xe1, 0xf4, 0xe5, 0xa5, 0xf4, 0xf4}; + } else { + lut_lo = uint8x16_t{0x3a, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, + 0x70, 0x61, 0xe1, 0xb4, 0xe5, 0xe5, 0xf4, 0xb4}; + } +#endif + uint8x16_t lo0 = vqtbl1q_u8(lut_lo, lo_nibbles0); + uint8x16_t lo1 = vqtbl1q_u8(lut_lo, lo_nibbles1); + uint8x16_t lo2 = vqtbl1q_u8(lut_lo, lo_nibbles2); + uint8x16_t lo3 = vqtbl1q_u8(lut_lo, lo_nibbles3); + uint8x16_t lut_hi; +#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO + if (base64_url) { + lut_hi = + simdutf_make_uint8x16_t(0x11, 0x20, 0x42, 0x80, 0x8, 0x4, 0x8, 0x4, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20); + } else { + lut_hi = + simdutf_make_uint8x16_t(0x11, 0x20, 0x42, 0x80, 0x8, 0x4, 0x8, 0x4, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20); + } +#else + if (base64_url) { + lut_hi = uint8x16_t{0x11, 0x20, 0x42, 0x80, 0x8, 0x4, 0x8, 0x4, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20}; + } else { + lut_hi = uint8x16_t{0x11, 0x20, 0x42, 0x80, 0x8, 0x4, 0x8, 0x4, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20}; + } +#endif + uint8x16_t hi0 = vqtbl1q_u8(lut_hi, hi_nibbles0); + uint8x16_t hi1 = vqtbl1q_u8(lut_hi, hi_nibbles1); + uint8x16_t hi2 = vqtbl1q_u8(lut_hi, hi_nibbles2); + uint8x16_t hi3 = vqtbl1q_u8(lut_hi, hi_nibbles3); - const uint16x8_t v_f800 = vmovq_n_u16((uint16_t)0xf800); - const uint16x8_t v_d800 = vmovq_n_u16((uint16_t)0xd800); + if (base64_url) { + hi0 = vbicq_u8(hi0, underscore0); + hi1 = vbicq_u8(hi1, underscore1); + hi2 = vbicq_u8(hi2, underscore2); + hi3 = vbicq_u8(hi3, underscore3); + } - while (end - buf >= 8) { - uint16x8_t in = vld1q_u16(reinterpret_cast(buf)); - if (!match_system(big_endian)) { in = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in))); } + uint8_t checks = + vmaxvq_u8(vorrq_u8(vorrq_u8(vandq_u8(lo0, hi0), vandq_u8(lo1, hi1)), + vorrq_u8(vandq_u8(lo2, hi2), vandq_u8(lo3, hi3)))); +#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO + const uint8x16_t bit_mask = + simdutf_make_uint8x16_t(0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, + 0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80); +#else + const uint8x16_t bit_mask = {0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, + 0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; +#endif + uint64_t badcharmask = 0; + *error = checks > 0x3; + if (checks) { + // Add each of the elements next to each other, successively, to stuff each + // 8 byte mask into one. + uint8x16_t test0 = vtstq_u8(lo0, hi0); + uint8x16_t test1 = vtstq_u8(lo1, hi1); + uint8x16_t test2 = vtstq_u8(lo2, hi2); + uint8x16_t test3 = vtstq_u8(lo3, hi3); + uint8x16_t sum0 = + vpaddq_u8(vandq_u8(test0, bit_mask), vandq_u8(test1, bit_mask)); + uint8x16_t sum1 = + vpaddq_u8(vandq_u8(test2, bit_mask), vandq_u8(test3, bit_mask)); + sum0 = vpaddq_u8(sum0, sum1); + sum0 = vpaddq_u8(sum0, sum0); + badcharmask = vgetq_lane_u64(vreinterpretq_u64_u8(sum0), 0); + } + // This is the transformation step that can be done while we are waiting for + // sum0 + uint8x16_t roll_lut; +#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO + if (base64_url) { + roll_lut = + simdutf_make_uint8x16_t(0xe0, 0x11, 0x13, 0x4, 0xbf, 0xbf, 0xb9, 0xb9, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0); + } else { + roll_lut = + simdutf_make_uint8x16_t(0x0, 0x10, 0x13, 0x4, 0xbf, 0xbf, 0xb9, 0xb9, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0); + } +#else + if (base64_url) { + roll_lut = uint8x16_t{0xe0, 0x11, 0x13, 0x4, 0xbf, 0xbf, 0xb9, 0xb9, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; + } else { + roll_lut = uint8x16_t{0x0, 0x10, 0x13, 0x4, 0xbf, 0xbf, 0xb9, 0xb9, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; + } +#endif + uint8x16_t vsecond_last = base64_url ? vdupq_n_u8(0x2d) : vdupq_n_u8(0x2f); + if (base64_url) { + hi_nibbles0 = vbicq_u8(hi_nibbles0, underscore0); + hi_nibbles1 = vbicq_u8(hi_nibbles1, underscore1); + hi_nibbles2 = vbicq_u8(hi_nibbles2, underscore2); + hi_nibbles3 = vbicq_u8(hi_nibbles3, underscore3); + } + uint8x16_t roll0 = vqtbl1q_u8( + roll_lut, vaddq_u8(vceqq_u8(b->chunks[0], vsecond_last), hi_nibbles0)); + uint8x16_t roll1 = vqtbl1q_u8( + roll_lut, vaddq_u8(vceqq_u8(b->chunks[1], vsecond_last), hi_nibbles1)); + uint8x16_t roll2 = vqtbl1q_u8( + roll_lut, vaddq_u8(vceqq_u8(b->chunks[2], vsecond_last), hi_nibbles2)); + uint8x16_t roll3 = vqtbl1q_u8( + roll_lut, vaddq_u8(vceqq_u8(b->chunks[3], vsecond_last), hi_nibbles3)); + b->chunks[0] = vaddq_u8(b->chunks[0], roll0); + b->chunks[1] = vaddq_u8(b->chunks[1], roll1); + b->chunks[2] = vaddq_u8(b->chunks[2], roll2); + b->chunks[3] = vaddq_u8(b->chunks[3], roll3); + return badcharmask; +} - const uint16x8_t surrogates_bytemask = vceqq_u16(vandq_u16(in, v_f800), v_d800); - // It might seem like checking for surrogates_bitmask == 0xc000 could help. However, - // it is likely an uncommon occurrence. - if (vmaxvq_u16(surrogates_bytemask) == 0) { - // case: no surrogate pairs, extend all 16-bit code units to 32-bit code units - vst1q_u32(utf32_output, vmovl_u16(vget_low_u16(in))); - vst1q_u32(utf32_output+4, vmovl_high_u16(in)); - utf32_output += 8; - buf += 8; - // surrogate pair(s) in a register - } else { - // Let us do a scalar fallback. - // It may seem wasteful to use scalar code, but being efficient with SIMD - // in the presence of surrogate pairs may require non-trivial tables. - size_t forward = 15; - size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { - uint16_t word = !match_system(big_endian) ? scalar::utf16::swap_bytes(buf[k]) : buf[k]; - if((word &0xF800 ) != 0xD800) { - *utf32_output++ = char32_t(word); - } else { - // must be a surrogate pair - uint16_t diff = uint16_t(word - 0xD800); - uint16_t next_word = !match_system(big_endian) ? scalar::utf16::swap_bytes(buf[k + 1]) : buf[k + 1]; - k++; - uint16_t diff2 = uint16_t(next_word - 0xDC00); - if((diff | diff2) > 0x3FF) { return std::make_pair(nullptr, reinterpret_cast(utf32_output)); } - uint32_t value = (diff << 10) + diff2 + 0x10000; - *utf32_output++ = char32_t(value); - } - } - buf += k; - } - } // while - return std::make_pair(buf, reinterpret_cast(utf32_output)); +void copy_block(block64 *b, char *output) { + vst1q_u8((uint8_t *)output, b->chunks[0]); + vst1q_u8((uint8_t *)output + 16, b->chunks[1]); + vst1q_u8((uint8_t *)output + 32, b->chunks[2]); + vst1q_u8((uint8_t *)output + 48, b->chunks[3]); } +uint64_t compress_block(block64 *b, uint64_t mask, char *output) { + uint64_t popcounts = + vget_lane_u64(vreinterpret_u64_u8(vcnt_u8(vcreate_u8(~mask))), 0); + uint64_t offsets = popcounts * 0x0101010101010101; + compress(b->chunks[0], uint16_t(mask), output); + compress(b->chunks[1], uint16_t(mask >> 16), &output[(offsets >> 8) & 0xFF]); + compress(b->chunks[2], uint16_t(mask >> 32), &output[(offsets >> 24) & 0xFF]); + compress(b->chunks[3], uint16_t(mask >> 48), &output[(offsets >> 40) & 0xFF]); + return offsets >> 56; +} -/* - Returns a pair: a result struct and utf8_output. - If there is an error, the count field of the result is the position of the error. - Otherwise, it is the position of the first unprocessed byte in buf (even if finished). - A scalar routing should carry on the conversion of the tail if needed. -*/ -template -std::pair arm_convert_utf16_to_utf32_with_errors(const char16_t* buf, size_t len, char32_t* utf32_out) { - uint32_t * utf32_output = reinterpret_cast(utf32_out); - const char16_t* start = buf; - const char16_t* end = buf + len; +// The caller of this function is responsible to ensure that there are 64 bytes +// available from reading at src. The data is read into a block64 structure. +void load_block(block64 *b, const char *src) { + b->chunks[0] = vld1q_u8(reinterpret_cast(src)); + b->chunks[1] = vld1q_u8(reinterpret_cast(src) + 16); + b->chunks[2] = vld1q_u8(reinterpret_cast(src) + 32); + b->chunks[3] = vld1q_u8(reinterpret_cast(src) + 48); +} - const uint16x8_t v_f800 = vmovq_n_u16((uint16_t)0xf800); - const uint16x8_t v_d800 = vmovq_n_u16((uint16_t)0xd800); +// The caller of this function is responsible to ensure that there are 32 bytes +// available from reading at data. It returns a 16-byte value, narrowing with +// saturation the 16-bit words. +inline uint8x16_t load_satured(const uint16_t *data) { + uint16x8_t in1 = vld1q_u16(data); + uint16x8_t in2 = vld1q_u16(data + 8); + return vqmovn_high_u16(vqmovn_u16(in1), in2); +} - while ((end - buf) >= 8) { - uint16x8_t in = vld1q_u16(reinterpret_cast(buf)); - if (!match_system(big_endian)) { in = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in))); } +// The caller of this function is responsible to ensure that there are 128 bytes +// available from reading at src. The data is read into a block64 structure. +void load_block(block64 *b, const char16_t *src) { + b->chunks[0] = load_satured(reinterpret_cast(src)); + b->chunks[1] = load_satured(reinterpret_cast(src) + 16); + b->chunks[2] = load_satured(reinterpret_cast(src) + 32); + b->chunks[3] = load_satured(reinterpret_cast(src) + 48); +} - const uint16x8_t surrogates_bytemask = vceqq_u16(vandq_u16(in, v_f800), v_d800); - // It might seem like checking for surrogates_bitmask == 0xc000 could help. However, - // it is likely an uncommon occurrence. - if (vmaxvq_u16(surrogates_bytemask) == 0) { - // case: no surrogate pairs, extend all 16-bit code units to 32-bit code units - vst1q_u32(utf32_output, vmovl_u16(vget_low_u16(in))); - vst1q_u32(utf32_output+4, vmovl_high_u16(in)); - utf32_output += 8; - buf += 8; - // surrogate pair(s) in a register - } else { - // Let us do a scalar fallback. - // It may seem wasteful to use scalar code, but being efficient with SIMD - // in the presence of surrogate pairs may require non-trivial tables. - size_t forward = 15; - size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { - uint16_t word = !match_system(big_endian) ? scalar::utf16::swap_bytes(buf[k]) : buf[k]; - if((word &0xF800 ) != 0xD800) { - *utf32_output++ = char32_t(word); - } else { - // must be a surrogate pair - uint16_t diff = uint16_t(word - 0xD800); - uint16_t next_word = !match_system(big_endian) ? scalar::utf16::swap_bytes(buf[k + 1]) : buf[k + 1]; - k++; - uint16_t diff2 = uint16_t(next_word - 0xDC00); - if((diff | diff2) > 0x3FF) { return std::make_pair(result(error_code::SURROGATE, buf - start + k - 1), reinterpret_cast(utf32_output)); } - uint32_t value = (diff << 10) + diff2 + 0x10000; - *utf32_output++ = char32_t(value); +// decode 64 bytes and output 48 bytes +void base64_decode_block(char *out, const char *src) { + uint8x16x4_t str = vld4q_u8((uint8_t *)src); + uint8x16x3_t outvec; + outvec.val[0] = + vorrq_u8(vshlq_n_u8(str.val[0], 2), vshrq_n_u8(str.val[1], 4)); + outvec.val[1] = + vorrq_u8(vshlq_n_u8(str.val[1], 4), vshrq_n_u8(str.val[2], 2)); + outvec.val[2] = vorrq_u8(vshlq_n_u8(str.val[2], 6), str.val[3]); + vst3q_u8((uint8_t *)out, outvec); +} + +template +result compress_decode_base64(char *dst, const char_type *src, size_t srclen, + base64_options options, + last_chunk_handling_options last_chunk_options) { + const uint8_t *to_base64 = base64_url ? tables::base64::to_base64_url_value + : tables::base64::to_base64_value; + size_t equallocation = + srclen; // location of the first padding character if any + // skip trailing spaces + while (srclen > 0 && scalar::base64::is_eight_byte(src[srclen - 1]) && + to_base64[uint8_t(src[srclen - 1])] == 64) { + srclen--; + } + size_t equalsigns = 0; + if (srclen > 0 && src[srclen - 1] == '=') { + equallocation = srclen - 1; + srclen--; + equalsigns = 1; + // skip trailing spaces + while (srclen > 0 && scalar::base64::is_eight_byte(src[srclen - 1]) && + to_base64[uint8_t(src[srclen - 1])] == 64) { + srclen--; + } + if (srclen > 0 && src[srclen - 1] == '=') { + equallocation = srclen - 1; + srclen--; + equalsigns = 2; + } + } + if (srclen == 0) { + if (equalsigns > 0) { + return {INVALID_BASE64_CHARACTER, equallocation}; + } + return {SUCCESS, 0}; + } + const char_type *const srcinit = src; + const char *const dstinit = dst; + const char_type *const srcend = src + srclen; + + constexpr size_t block_size = 10; + char buffer[block_size * 64]; + char *bufferptr = buffer; + if (srclen >= 64) { + const char_type *const srcend64 = src + srclen - 64; + while (src <= srcend64) { + block64 b; + load_block(&b, src); + src += 64; + bool error = false; + uint64_t badcharmask = to_base64_mask(&b, &error); + if (badcharmask) { + if (error) { + src -= 64; + while (src < srcend && scalar::base64::is_eight_byte(*src) && + to_base64[uint8_t(*src)] <= 64) { + src++; + } + if (src < srcend) { + // should never happen + } + return {error_code::INVALID_BASE64_CHARACTER, size_t(src - srcinit)}; } } - buf += k; + + if (badcharmask != 0) { + // optimization opportunity: check for simple masks like those made of + // continuous 1s followed by continuous 0s. And masks containing a + // single bad character. + bufferptr += compress_block(&b, badcharmask, bufferptr); + } else { + // optimization opportunity: if bufferptr == buffer and mask == 0, we + // can avoid the call to compress_block and decode directly. + copy_block(&b, bufferptr); + bufferptr += 64; + } + if (bufferptr >= (block_size - 1) * 64 + buffer) { + for (size_t i = 0; i < (block_size - 1); i++) { + base64_decode_block(dst, buffer + i * 64); + dst += 48; + } + std::memcpy(buffer, buffer + (block_size - 1) * 64, + 64); // 64 might be too much + bufferptr -= (block_size - 1) * 64; + } + } + } + char *buffer_start = buffer; + // Optimization note: if this is almost full, then it is worth our + // time, otherwise, we should just decode directly. + int last_block = (int)((bufferptr - buffer_start) % 64); + if (last_block != 0 && srcend - src + last_block >= 64) { + while ((bufferptr - buffer_start) % 64 != 0 && src < srcend) { + uint8_t val = to_base64[uint8_t(*src)]; + *bufferptr = char(val); + if (!scalar::base64::is_eight_byte(*src) || val > 64) { + return {error_code::INVALID_BASE64_CHARACTER, size_t(src - srcinit)}; + } + bufferptr += (val <= 63); + src++; + } + } + + for (; buffer_start + 64 <= bufferptr; buffer_start += 64) { + base64_decode_block(dst, buffer_start); + dst += 48; + } + if ((bufferptr - buffer_start) % 64 != 0) { + while (buffer_start + 4 < bufferptr) { + uint32_t triple = ((uint32_t(uint8_t(buffer_start[0])) << 3 * 6) + + (uint32_t(uint8_t(buffer_start[1])) << 2 * 6) + + (uint32_t(uint8_t(buffer_start[2])) << 1 * 6) + + (uint32_t(uint8_t(buffer_start[3])) << 0 * 6)) + << 8; + triple = scalar::utf32::swap_bytes(triple); + std::memcpy(dst, &triple, 4); + + dst += 3; + buffer_start += 4; + } + if (buffer_start + 4 <= bufferptr) { + uint32_t triple = ((uint32_t(uint8_t(buffer_start[0])) << 3 * 6) + + (uint32_t(uint8_t(buffer_start[1])) << 2 * 6) + + (uint32_t(uint8_t(buffer_start[2])) << 1 * 6) + + (uint32_t(uint8_t(buffer_start[3])) << 0 * 6)) + << 8; + triple = scalar::utf32::swap_bytes(triple); + std::memcpy(dst, &triple, 3); + + dst += 3; + buffer_start += 4; + } + // we may have 1, 2 or 3 bytes left and we need to decode them so let us + // backtrack + int leftover = int(bufferptr - buffer_start); + while (leftover > 0) { + while (to_base64[uint8_t(*(src - 1))] == 64) { + src--; + } + src--; + leftover--; + } + } + if (src < srcend + equalsigns) { + result r = scalar::base64::base64_tail_decode( + dst, src, srcend - src, equalsigns, options, last_chunk_options); + if (r.error == error_code::INVALID_BASE64_CHARACTER) { + r.count += size_t(src - srcinit); + return r; + } else { + r.count += size_t(dst - dstinit); + } + if (last_chunk_options != stop_before_partial && + r.error == error_code::SUCCESS && equalsigns > 0) { + // additional checks + if ((r.count % 3 == 0) || ((r.count % 3) + 1 + equalsigns != 4)) { + r.error = error_code::INVALID_BASE64_CHARACTER; + r.count = equallocation; + } } - } // while - return std::make_pair(result(error_code::SUCCESS, buf - start), reinterpret_cast(utf32_output)); + return r; + } + if (equalsigns > 0) { + if ((size_t(dst - dstinit) % 3 == 0) || + ((size_t(dst - dstinit) % 3) + 1 + equalsigns != 4)) { + return {INVALID_BASE64_CHARACTER, equallocation}; + } + } + return {SUCCESS, size_t(dst - dstinit)}; } -/* end file src/arm64/arm_convert_utf16_to_utf32.cpp */ - +/* end file src/arm64/arm_base64.cpp */ /* begin file src/arm64/arm_convert_utf32_to_latin1.cpp */ -std::pair arm_convert_utf32_to_latin1(const char32_t* buf, size_t len, char* latin1_output) { - const char32_t* end = buf + len; +std::pair +arm_convert_utf32_to_latin1(const char32_t *buf, size_t len, + char *latin1_output) { + const char32_t *end = buf + len; while (end - buf >= 8) { uint32x4_t in1 = vld1q_u32(reinterpret_cast(buf)); - uint32x4_t in2 = vld1q_u32(reinterpret_cast(buf+4)); + uint32x4_t in2 = vld1q_u32(reinterpret_cast(buf + 4)); uint16x8_t utf16_packed = vcombine_u16(vqmovn_u32(in1), vqmovn_u32(in2)); if (vmaxvq_u16(utf16_packed) <= 0xff) { - // 1. pack the bytes - uint8x8_t latin1_packed = vmovn_u16(utf16_packed); - // 2. store (8 bytes) - vst1_u8(reinterpret_cast(latin1_output), latin1_packed); - // 3. adjust pointers - buf += 8; - latin1_output += 8; + // 1. pack the bytes + uint8x8_t latin1_packed = vmovn_u16(utf16_packed); + // 2. store (8 bytes) + vst1_u8(reinterpret_cast(latin1_output), latin1_packed); + // 3. adjust pointers + buf += 8; + latin1_output += 8; } else { - return std::make_pair(nullptr, reinterpret_cast(latin1_output)); + return std::make_pair(nullptr, reinterpret_cast(latin1_output)); } } // while return std::make_pair(buf, latin1_output); } - -std::pair arm_convert_utf32_to_latin1_with_errors(const char32_t* buf, size_t len, char* latin1_output) { - const char32_t* start = buf; - const char32_t* end = buf + len; +std::pair +arm_convert_utf32_to_latin1_with_errors(const char32_t *buf, size_t len, + char *latin1_output) { + const char32_t *start = buf; + const char32_t *end = buf + len; while (end - buf >= 8) { uint32x4_t in1 = vld1q_u32(reinterpret_cast(buf)); - uint32x4_t in2 = vld1q_u32(reinterpret_cast(buf+4)); + uint32x4_t in2 = vld1q_u32(reinterpret_cast(buf + 4)); uint16x8_t utf16_packed = vcombine_u16(vqmovn_u32(in1), vqmovn_u32(in2)); if (vmaxvq_u16(utf16_packed) <= 0xff) { - // 1. pack the bytes - uint8x8_t latin1_packed = vmovn_u16(utf16_packed); - // 2. store (8 bytes) - vst1_u8(reinterpret_cast(latin1_output), latin1_packed); - // 3. adjust pointers - buf += 8; - latin1_output += 8; + // 1. pack the bytes + uint8x8_t latin1_packed = vmovn_u16(utf16_packed); + // 2. store (8 bytes) + vst1_u8(reinterpret_cast(latin1_output), latin1_packed); + // 3. adjust pointers + buf += 8; + latin1_output += 8; } else { // Let us do a scalar fallback. - for(int k = 0; k < 8; k++) { + for (int k = 0; k < 8; k++) { uint32_t word = buf[k]; - if(word <= 0xff) { + if (word <= 0xff) { *latin1_output++ = char(word); } else { - return std::make_pair(result(error_code::TOO_LARGE, buf - start + k), latin1_output); + return std::make_pair(result(error_code::TOO_LARGE, buf - start + k), + latin1_output); } } } } // while - return std::make_pair(result(error_code::SUCCESS, buf - start), latin1_output); + return std::make_pair(result(error_code::SUCCESS, buf - start), + latin1_output); } /* end file src/arm64/arm_convert_utf32_to_latin1.cpp */ -/* begin file src/arm64/arm_convert_utf32_to_utf8.cpp */ -std::pair arm_convert_utf32_to_utf8(const char32_t* buf, size_t len, char* utf8_out) { - uint8_t * utf8_output = reinterpret_cast(utf8_out); - const char32_t* end = buf + len; - - const uint16x8_t v_c080 = vmovq_n_u16((uint16_t)0xc080); - - uint16x8_t forbidden_bytemask = vmovq_n_u16(0x0); - const size_t safety_margin = 12; // to avoid overruns, see issue https://github.com/simdutf/simdutf/issues/92 - - while (buf + 16 + safety_margin < end) { - uint32x4_t in = vld1q_u32(reinterpret_cast(buf)); - uint32x4_t nextin = vld1q_u32(reinterpret_cast(buf+4)); - - // Check if no bits set above 16th - if(vmaxvq_u32(vorrq_u32(in, nextin)) <= 0xFFFF) { - // Pack UTF-32 to UTF-16 safely (without surrogate pairs) - // Apply UTF-16 => UTF-8 routine (arm_convert_utf16_to_utf8.cpp) - uint16x8_t utf16_packed = vcombine_u16(vmovn_u32(in), vmovn_u32(nextin)); - if(vmaxvq_u16(utf16_packed) <= 0x7F) { // ASCII fast path!!!! - // 1. pack the bytes - // obviously suboptimal. - uint8x8_t utf8_packed = vmovn_u16(utf16_packed); - // 2. store (8 bytes) - vst1_u8(utf8_output, utf8_packed); - // 3. adjust pointers - buf += 8; - utf8_output += 8; - continue; // we are done for this round! - } - - if (vmaxvq_u16(utf16_packed) <= 0x7FF) { - // 1. prepare 2-byte values - // input 16-bit word : [0000|0aaa|aabb|bbbb] x 8 - // expected output : [110a|aaaa|10bb|bbbb] x 8 - const uint16x8_t v_1f00 = vmovq_n_u16((int16_t)0x1f00); - const uint16x8_t v_003f = vmovq_n_u16((int16_t)0x003f); - - // t0 = [000a|aaaa|bbbb|bb00] - const uint16x8_t t0 = vshlq_n_u16(utf16_packed, 2); - // t1 = [000a|aaaa|0000|0000] - const uint16x8_t t1 = vandq_u16(t0, v_1f00); - // t2 = [0000|0000|00bb|bbbb] - const uint16x8_t t2 = vandq_u16(utf16_packed, v_003f); - // t3 = [000a|aaaa|00bb|bbbb] - const uint16x8_t t3 = vorrq_u16(t1, t2); - // t4 = [110a|aaaa|10bb|bbbb] - const uint16x8_t t4 = vorrq_u16(t3, v_c080); - // 2. merge ASCII and 2-byte codewords - const uint16x8_t v_007f = vmovq_n_u16((uint16_t)0x007F); - const uint16x8_t one_byte_bytemask = vcleq_u16(utf16_packed, v_007f); - const uint8x16_t utf8_unpacked = vreinterpretq_u8_u16(vbslq_u16(one_byte_bytemask, utf16_packed, t4)); - // 3. prepare bitmask for 8-bit lookup - #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - const uint16x8_t mask = simdutf_make_uint16x8_t(0x0001, 0x0004, - 0x0010, 0x0040, - 0x0002, 0x0008, - 0x0020, 0x0080); - #else - const uint16x8_t mask = { 0x0001, 0x0004, - 0x0010, 0x0040, - 0x0002, 0x0008, - 0x0020, 0x0080 }; - #endif - uint16_t m2 = vaddvq_u16(vandq_u16(one_byte_bytemask, mask)); - // 4. pack the bytes - const uint8_t* row = &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[m2][0]; - const uint8x16_t shuffle = vld1q_u8(row + 1); - const uint8x16_t utf8_packed = vqtbl1q_u8(utf8_unpacked, shuffle); - - // 5. store bytes - vst1q_u8(utf8_output, utf8_packed); - - // 6. adjust pointers - buf += 8; - utf8_output += row[0]; - continue; - } else { - // case: code units from register produce either 1, 2 or 3 UTF-8 bytes - const uint16x8_t v_d800 = vmovq_n_u16((uint16_t)0xd800); - const uint16x8_t v_dfff = vmovq_n_u16((uint16_t)0xdfff); - forbidden_bytemask = vorrq_u16(vandq_u16(vcleq_u16(utf16_packed, v_dfff), vcgeq_u16(utf16_packed, v_d800)), forbidden_bytemask); - - #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - const uint16x8_t dup_even = simdutf_make_uint16x8_t(0x0000, 0x0202, 0x0404, 0x0606, - 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); - #else - const uint16x8_t dup_even = {0x0000, 0x0202, 0x0404, 0x0606, - 0x0808, 0x0a0a, 0x0c0c, 0x0e0e}; - #endif - /* In this branch we handle three cases: - 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - single UFT-8 byte - 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two UTF-8 bytes - 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - three UTF-8 bytes - - We expand the input word (16-bit) into two code units (32-bit), thus - we have room for four bytes. However, we need five distinct bit - layouts. Note that the last byte in cases #2 and #3 is the same. - - We precompute byte 1 for case #1 and the common byte for cases #2 & #3 - in register t2. - - We precompute byte 1 for case #3 and -- **conditionally** -- precompute - either byte 1 for case #2 or byte 2 for case #3. Note that they - differ by exactly one bit. - - Finally from these two code units we build proper UTF-8 sequence, taking - into account the case (i.e, the number of bytes to write). - */ - /** - * Given [aaaa|bbbb|bbcc|cccc] our goal is to produce: - * t2 => [0ccc|cccc] [10cc|cccc] - * s4 => [1110|aaaa] ([110b|bbbb] OR [10bb|bbbb]) - */ - #define simdutf_vec(x) vmovq_n_u16(static_cast(x)) - // [aaaa|bbbb|bbcc|cccc] => [bbcc|cccc|bbcc|cccc] - const uint16x8_t t0 = vreinterpretq_u16_u8(vqtbl1q_u8(vreinterpretq_u8_u16(utf16_packed), vreinterpretq_u8_u16(dup_even))); - // [bbcc|cccc|bbcc|cccc] => [00cc|cccc|0bcc|cccc] - const uint16x8_t t1 = vandq_u16(t0, simdutf_vec(0b0011111101111111)); - // [00cc|cccc|0bcc|cccc] => [10cc|cccc|0bcc|cccc] - const uint16x8_t t2 = vorrq_u16 (t1, simdutf_vec(0b1000000000000000)); - - // s0: [aaaa|bbbb|bbcc|cccc] => [0000|0000|0000|aaaa] - const uint16x8_t s0 = vshrq_n_u16(utf16_packed, 12); - // s1: [aaaa|bbbb|bbcc|cccc] => [0000|bbbb|bb00|0000] - const uint16x8_t s1 = vandq_u16(utf16_packed, simdutf_vec(0b0000111111000000)); - // [0000|bbbb|bb00|0000] => [00bb|bbbb|0000|0000] - const uint16x8_t s1s = vshlq_n_u16(s1, 2); - // [00bb|bbbb|0000|aaaa] - const uint16x8_t s2 = vorrq_u16(s0, s1s); - // s3: [00bb|bbbb|0000|aaaa] => [11bb|bbbb|1110|aaaa] - const uint16x8_t s3 = vorrq_u16(s2, simdutf_vec(0b1100000011100000)); - const uint16x8_t v_07ff = vmovq_n_u16((uint16_t)0x07FF); - const uint16x8_t one_or_two_bytes_bytemask = vcleq_u16(utf16_packed, v_07ff); - const uint16x8_t m0 = vbicq_u16(simdutf_vec(0b0100000000000000), one_or_two_bytes_bytemask); - const uint16x8_t s4 = veorq_u16(s3, m0); - #undef simdutf_vec - - // 4. expand code units 16-bit => 32-bit - const uint8x16_t out0 = vreinterpretq_u8_u16(vzip1q_u16(t2, s4)); - const uint8x16_t out1 = vreinterpretq_u8_u16(vzip2q_u16(t2, s4)); - - // 5. compress 32-bit code units into 1, 2 or 3 bytes -- 2 x shuffle - const uint16x8_t v_007f = vmovq_n_u16((uint16_t)0x007F); - const uint16x8_t one_byte_bytemask = vcleq_u16(utf16_packed, v_007f); - #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - const uint16x8_t onemask = simdutf_make_uint16x8_t(0x0001, 0x0004, - 0x0010, 0x0040, - 0x0100, 0x0400, - 0x1000, 0x4000 ); - const uint16x8_t twomask = simdutf_make_uint16x8_t(0x0002, 0x0008, - 0x0020, 0x0080, - 0x0200, 0x0800, - 0x2000, 0x8000 ); - #else - const uint16x8_t onemask = { 0x0001, 0x0004, - 0x0010, 0x0040, - 0x0100, 0x0400, - 0x1000, 0x4000 }; - const uint16x8_t twomask = { 0x0002, 0x0008, - 0x0020, 0x0080, - 0x0200, 0x0800, - 0x2000, 0x8000 }; - #endif - const uint16x8_t combined = vorrq_u16(vandq_u16(one_byte_bytemask, onemask), vandq_u16(one_or_two_bytes_bytemask, twomask)); - const uint16_t mask = vaddvq_u16(combined); - // The following fast path may or may not be beneficial. - /*if(mask == 0) { - // We only have three-byte code units. Use fast path. - const uint8x16_t shuffle = {2,3,1,6,7,5,10,11,9,14,15,13,0,0,0,0}; - const uint8x16_t utf8_0 = vqtbl1q_u8(out0, shuffle); - const uint8x16_t utf8_1 = vqtbl1q_u8(out1, shuffle); - vst1q_u8(utf8_output, utf8_0); - utf8_output += 12; - vst1q_u8(utf8_output, utf8_1); - utf8_output += 12; - buf += 8; - continue; - }*/ - const uint8_t mask0 = uint8_t(mask); - const uint8_t* row0 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; - const uint8x16_t shuffle0 = vld1q_u8(row0 + 1); - const uint8x16_t utf8_0 = vqtbl1q_u8(out0, shuffle0); - - const uint8_t mask1 = static_cast(mask >> 8); - const uint8_t* row1 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; - const uint8x16_t shuffle1 = vld1q_u8(row1 + 1); - const uint8x16_t utf8_1 = vqtbl1q_u8(out1, shuffle1); - - vst1q_u8(utf8_output, utf8_0); - utf8_output += row0[0]; - vst1q_u8(utf8_output, utf8_1); - utf8_output += row1[0]; - - buf += 8; - } - // At least one 32-bit word will produce a surrogate pair in UTF-16 <=> will produce four UTF-8 bytes. - } else { - // Let us do a scalar fallback. - // It may seem wasteful to use scalar code, but being efficient with SIMD - // in the presence of surrogate pairs may require non-trivial tables. - size_t forward = 15; - size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { - uint32_t word = buf[k]; - if((word & 0xFFFFFF80)==0) { - *utf8_output++ = char(word); - } else if((word & 0xFFFFF800)==0) { - *utf8_output++ = char((word>>6) | 0b11000000); - *utf8_output++ = char((word & 0b111111) | 0b10000000); - } else if((word & 0xFFFF0000)==0) { - if (word >= 0xD800 && word <= 0xDFFF) { return std::make_pair(nullptr, reinterpret_cast(utf8_output)); } - *utf8_output++ = char((word>>12) | 0b11100000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); - *utf8_output++ = char((word & 0b111111) | 0b10000000); - } else { - if (word > 0x10FFFF) { return std::make_pair(nullptr, reinterpret_cast(utf8_output)); } - *utf8_output++ = char((word>>18) | 0b11110000); - *utf8_output++ = char(((word>>12) & 0b111111) | 0b10000000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); - *utf8_output++ = char((word & 0b111111) | 0b10000000); - } - } - buf += k; - } - } // while - - // check for invalid input - if (vmaxvq_u16(forbidden_bytemask) != 0) { - return std::make_pair(nullptr, reinterpret_cast(utf8_output)); - } - return std::make_pair(buf, reinterpret_cast(utf8_output)); -} - - -std::pair arm_convert_utf32_to_utf8_with_errors(const char32_t* buf, size_t len, char* utf8_out) { - uint8_t * utf8_output = reinterpret_cast(utf8_out); - const char32_t* start = buf; - const char32_t* end = buf + len; - - const uint16x8_t v_c080 = vmovq_n_u16((uint16_t)0xc080); - const size_t safety_margin = 12; // to avoid overruns, see issue https://github.com/simdutf/simdutf/issues/92 - - while (buf + 16 + safety_margin < end) { - uint32x4_t in = vld1q_u32(reinterpret_cast(buf)); - uint32x4_t nextin = vld1q_u32(reinterpret_cast(buf+4)); - - // Check if no bits set above 16th - if(vmaxvq_u32(vorrq_u32(in, nextin)) <= 0xFFFF) { - // Pack UTF-32 to UTF-16 safely (without surrogate pairs) - // Apply UTF-16 => UTF-8 routine (arm_convert_utf16_to_utf8.cpp) - uint16x8_t utf16_packed = vcombine_u16(vmovn_u32(in), vmovn_u32(nextin)); - if(vmaxvq_u16(utf16_packed) <= 0x7F) { // ASCII fast path!!!! - // 1. pack the bytes - // obviously suboptimal. - uint8x8_t utf8_packed = vmovn_u16(utf16_packed); - // 2. store (8 bytes) - vst1_u8(utf8_output, utf8_packed); - // 3. adjust pointers - buf += 8; - utf8_output += 8; - continue; // we are done for this round! - } - - if (vmaxvq_u16(utf16_packed) <= 0x7FF) { - // 1. prepare 2-byte values - // input 16-bit word : [0000|0aaa|aabb|bbbb] x 8 - // expected output : [110a|aaaa|10bb|bbbb] x 8 - const uint16x8_t v_1f00 = vmovq_n_u16((int16_t)0x1f00); - const uint16x8_t v_003f = vmovq_n_u16((int16_t)0x003f); - - // t0 = [000a|aaaa|bbbb|bb00] - const uint16x8_t t0 = vshlq_n_u16(utf16_packed, 2); - // t1 = [000a|aaaa|0000|0000] - const uint16x8_t t1 = vandq_u16(t0, v_1f00); - // t2 = [0000|0000|00bb|bbbb] - const uint16x8_t t2 = vandq_u16(utf16_packed, v_003f); - // t3 = [000a|aaaa|00bb|bbbb] - const uint16x8_t t3 = vorrq_u16(t1, t2); - // t4 = [110a|aaaa|10bb|bbbb] - const uint16x8_t t4 = vorrq_u16(t3, v_c080); - // 2. merge ASCII and 2-byte codewords - const uint16x8_t v_007f = vmovq_n_u16((uint16_t)0x007F); - const uint16x8_t one_byte_bytemask = vcleq_u16(utf16_packed, v_007f); - const uint8x16_t utf8_unpacked = vreinterpretq_u8_u16(vbslq_u16(one_byte_bytemask, utf16_packed, t4)); - // 3. prepare bitmask for 8-bit lookup - #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - const uint16x8_t mask = simdutf_make_uint16x8_t(0x0001, 0x0004, - 0x0010, 0x0040, - 0x0002, 0x0008, - 0x0020, 0x0080); - #else - const uint16x8_t mask = { 0x0001, 0x0004, - 0x0010, 0x0040, - 0x0002, 0x0008, - 0x0020, 0x0080 }; - #endif - uint16_t m2 = vaddvq_u16(vandq_u16(one_byte_bytemask, mask)); - // 4. pack the bytes - const uint8_t* row = &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[m2][0]; - const uint8x16_t shuffle = vld1q_u8(row + 1); - const uint8x16_t utf8_packed = vqtbl1q_u8(utf8_unpacked, shuffle); - - // 5. store bytes - vst1q_u8(utf8_output, utf8_packed); - - // 6. adjust pointers - buf += 8; - utf8_output += row[0]; - continue; - } else { - // case: code units from register produce either 1, 2 or 3 UTF-8 bytes - - // check for invalid input - const uint16x8_t v_d800 = vmovq_n_u16((uint16_t)0xd800); - const uint16x8_t v_dfff = vmovq_n_u16((uint16_t)0xdfff); - const uint16x8_t forbidden_bytemask = vandq_u16(vcleq_u16(utf16_packed, v_dfff), vcgeq_u16(utf16_packed, v_d800)); - if (vmaxvq_u16(forbidden_bytemask) != 0) { - return std::make_pair(result(error_code::SURROGATE, buf - start), reinterpret_cast(utf8_output)); - } - - #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - const uint16x8_t dup_even = simdutf_make_uint16x8_t(0x0000, 0x0202, 0x0404, 0x0606, - 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); - #else - const uint16x8_t dup_even = {0x0000, 0x0202, 0x0404, 0x0606, - 0x0808, 0x0a0a, 0x0c0c, 0x0e0e}; - #endif - /* In this branch we handle three cases: - 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - single UFT-8 byte - 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two UTF-8 bytes - 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - three UTF-8 bytes - - We expand the input word (16-bit) into two code units (32-bit), thus - we have room for four bytes. However, we need five distinct bit - layouts. Note that the last byte in cases #2 and #3 is the same. - - We precompute byte 1 for case #1 and the common byte for cases #2 & #3 - in register t2. - - We precompute byte 1 for case #3 and -- **conditionally** -- precompute - either byte 1 for case #2 or byte 2 for case #3. Note that they - differ by exactly one bit. - - Finally from these two code units we build proper UTF-8 sequence, taking - into account the case (i.e, the number of bytes to write). - */ - /** - * Given [aaaa|bbbb|bbcc|cccc] our goal is to produce: - * t2 => [0ccc|cccc] [10cc|cccc] - * s4 => [1110|aaaa] ([110b|bbbb] OR [10bb|bbbb]) - */ - #define simdutf_vec(x) vmovq_n_u16(static_cast(x)) - // [aaaa|bbbb|bbcc|cccc] => [bbcc|cccc|bbcc|cccc] - const uint16x8_t t0 = vreinterpretq_u16_u8(vqtbl1q_u8(vreinterpretq_u8_u16(utf16_packed), vreinterpretq_u8_u16(dup_even))); - // [bbcc|cccc|bbcc|cccc] => [00cc|cccc|0bcc|cccc] - const uint16x8_t t1 = vandq_u16(t0, simdutf_vec(0b0011111101111111)); - // [00cc|cccc|0bcc|cccc] => [10cc|cccc|0bcc|cccc] - const uint16x8_t t2 = vorrq_u16 (t1, simdutf_vec(0b1000000000000000)); - - // s0: [aaaa|bbbb|bbcc|cccc] => [0000|0000|0000|aaaa] - const uint16x8_t s0 = vshrq_n_u16(utf16_packed, 12); - // s1: [aaaa|bbbb|bbcc|cccc] => [0000|bbbb|bb00|0000] - const uint16x8_t s1 = vandq_u16(utf16_packed, simdutf_vec(0b0000111111000000)); - // [0000|bbbb|bb00|0000] => [00bb|bbbb|0000|0000] - const uint16x8_t s1s = vshlq_n_u16(s1, 2); - // [00bb|bbbb|0000|aaaa] - const uint16x8_t s2 = vorrq_u16(s0, s1s); - // s3: [00bb|bbbb|0000|aaaa] => [11bb|bbbb|1110|aaaa] - const uint16x8_t s3 = vorrq_u16(s2, simdutf_vec(0b1100000011100000)); - const uint16x8_t v_07ff = vmovq_n_u16((uint16_t)0x07FF); - const uint16x8_t one_or_two_bytes_bytemask = vcleq_u16(utf16_packed, v_07ff); - const uint16x8_t m0 = vbicq_u16(simdutf_vec(0b0100000000000000), one_or_two_bytes_bytemask); - const uint16x8_t s4 = veorq_u16(s3, m0); - #undef simdutf_vec - - // 4. expand code units 16-bit => 32-bit - const uint8x16_t out0 = vreinterpretq_u8_u16(vzip1q_u16(t2, s4)); - const uint8x16_t out1 = vreinterpretq_u8_u16(vzip2q_u16(t2, s4)); - - // 5. compress 32-bit code units into 1, 2 or 3 bytes -- 2 x shuffle - const uint16x8_t v_007f = vmovq_n_u16((uint16_t)0x007F); - const uint16x8_t one_byte_bytemask = vcleq_u16(utf16_packed, v_007f); - #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - const uint16x8_t onemask = simdutf_make_uint16x8_t(0x0001, 0x0004, - 0x0010, 0x0040, - 0x0100, 0x0400, - 0x1000, 0x4000 ); - const uint16x8_t twomask = simdutf_make_uint16x8_t(0x0002, 0x0008, - 0x0020, 0x0080, - 0x0200, 0x0800, - 0x2000, 0x8000 ); - #else - const uint16x8_t onemask = { 0x0001, 0x0004, - 0x0010, 0x0040, - 0x0100, 0x0400, - 0x1000, 0x4000 }; - const uint16x8_t twomask = { 0x0002, 0x0008, - 0x0020, 0x0080, - 0x0200, 0x0800, - 0x2000, 0x8000 }; - #endif - const uint16x8_t combined = vorrq_u16(vandq_u16(one_byte_bytemask, onemask), vandq_u16(one_or_two_bytes_bytemask, twomask)); - const uint16_t mask = vaddvq_u16(combined); - // The following fast path may or may not be beneficial. - /*if(mask == 0) { - // We only have three-byte code units. Use fast path. - const uint8x16_t shuffle = {2,3,1,6,7,5,10,11,9,14,15,13,0,0,0,0}; - const uint8x16_t utf8_0 = vqtbl1q_u8(out0, shuffle); - const uint8x16_t utf8_1 = vqtbl1q_u8(out1, shuffle); - vst1q_u8(utf8_output, utf8_0); - utf8_output += 12; - vst1q_u8(utf8_output, utf8_1); - utf8_output += 12; - buf += 8; - continue; - }*/ - const uint8_t mask0 = uint8_t(mask); - - const uint8_t* row0 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; - const uint8x16_t shuffle0 = vld1q_u8(row0 + 1); - const uint8x16_t utf8_0 = vqtbl1q_u8(out0, shuffle0); - - const uint8_t mask1 = static_cast(mask >> 8); - const uint8_t* row1 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; - const uint8x16_t shuffle1 = vld1q_u8(row1 + 1); - const uint8x16_t utf8_1 = vqtbl1q_u8(out1, shuffle1); - - vst1q_u8(utf8_output, utf8_0); - utf8_output += row0[0]; - vst1q_u8(utf8_output, utf8_1); - utf8_output += row1[0]; - - buf += 8; - } - // At least one 32-bit word will produce a surrogate pair in UTF-16 <=> will produce four UTF-8 bytes. - } else { - // Let us do a scalar fallback. - // It may seem wasteful to use scalar code, but being efficient with SIMD - // in the presence of surrogate pairs may require non-trivial tables. - size_t forward = 15; - size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { - uint32_t word = buf[k]; - if((word & 0xFFFFFF80)==0) { - *utf8_output++ = char(word); - } else if((word & 0xFFFFF800)==0) { - *utf8_output++ = char((word>>6) | 0b11000000); - *utf8_output++ = char((word & 0b111111) | 0b10000000); - } else if((word & 0xFFFF0000)==0) { - if (word >= 0xD800 && word <= 0xDFFF) { return std::make_pair(result(error_code::SURROGATE, buf - start + k), reinterpret_cast(utf8_output)); } - *utf8_output++ = char((word>>12) | 0b11100000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); - *utf8_output++ = char((word & 0b111111) | 0b10000000); - } else { - if (word > 0x10FFFF) { return std::make_pair(result(error_code::TOO_LARGE, buf - start + k), reinterpret_cast(utf8_output)); } - *utf8_output++ = char((word>>18) | 0b11110000); - *utf8_output++ = char(((word>>12) & 0b111111) | 0b10000000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); - *utf8_output++ = char((word & 0b111111) | 0b10000000); - } - } - buf += k; - } - } // while - - return std::make_pair(result(error_code::SUCCESS, buf - start), reinterpret_cast(utf8_output)); -} -/* end file src/arm64/arm_convert_utf32_to_utf8.cpp */ /* begin file src/arm64/arm_convert_utf32_to_utf16.cpp */ template -std::pair arm_convert_utf32_to_utf16(const char32_t* buf, size_t len, char16_t* utf16_out) { - uint16_t * utf16_output = reinterpret_cast(utf16_out); - const char32_t* end = buf + len; +std::pair +arm_convert_utf32_to_utf16(const char32_t *buf, size_t len, + char16_t *utf16_out) { + uint16_t *utf16_output = reinterpret_cast(utf16_out); + const char32_t *end = buf + len; uint16x4_t forbidden_bytemask = vmov_n_u16(0x0); - while(end - buf >= 4) { + while (end - buf >= 4) { uint32x4_t in = vld1q_u32(reinterpret_cast(buf)); // Check if no bits set above 16th - if(vmaxvq_u32(in) <= 0xFFFF) { + if (vmaxvq_u32(in) <= 0xFFFF) { uint16x4_t utf16_packed = vmovn_u32(in); const uint16x4_t v_d800 = vmov_n_u16((uint16_t)0xd800); const uint16x4_t v_dfff = vmov_n_u16((uint16_t)0xdfff); - forbidden_bytemask = vorr_u16(vand_u16(vcle_u16(utf16_packed, v_dfff), vcge_u16(utf16_packed, v_d800)), forbidden_bytemask); + forbidden_bytemask = vorr_u16(vand_u16(vcle_u16(utf16_packed, v_dfff), + vcge_u16(utf16_packed, v_d800)), + forbidden_bytemask); - if (!match_system(big_endian)) { utf16_packed = vreinterpret_u16_u8(vrev16_u8(vreinterpret_u8_u16(utf16_packed))); } + if (!match_system(big_endian)) { + utf16_packed = + vreinterpret_u16_u8(vrev16_u8(vreinterpret_u8_u16(utf16_packed))); + } vst1_u16(utf16_output, utf16_packed); utf16_output += 4; buf += 4; } else { size_t forward = 3; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { uint32_t word = buf[k]; - if((word & 0xFFFF0000)==0) { + if ((word & 0xFFFF0000) == 0) { // will not generate a surrogate pair - if (word >= 0xD800 && word <= 0xDFFF) { return std::make_pair(nullptr, reinterpret_cast(utf16_output)); } - *utf16_output++ = !match_system(big_endian) ? char16_t(word >> 8 | word << 8) : char16_t(word); + if (word >= 0xD800 && word <= 0xDFFF) { + return std::make_pair(nullptr, + reinterpret_cast(utf16_output)); + } + *utf16_output++ = !match_system(big_endian) + ? char16_t(word >> 8 | word << 8) + : char16_t(word); } else { // will generate a surrogate pair - if (word > 0x10FFFF) { return std::make_pair(nullptr, reinterpret_cast(utf16_output)); } + if (word > 0x10FFFF) { + return std::make_pair(nullptr, + reinterpret_cast(utf16_output)); + } word -= 0x10000; uint16_t high_surrogate = uint16_t(0xD800 + (word >> 10)); uint16_t low_surrogate = uint16_t(0xDC00 + (word & 0x3FF)); if (!match_system(big_endian)) { - high_surrogate = uint16_t(high_surrogate >> 8 | high_surrogate << 8); + high_surrogate = + uint16_t(high_surrogate >> 8 | high_surrogate << 8); low_surrogate = uint16_t(low_surrogate << 8 | low_surrogate >> 8); } *utf16_output++ = char16_t(high_surrogate); @@ -16528,55 +15916,74 @@ std::pair arm_convert_utf32_to_utf16(const char32_t* // check for invalid input if (vmaxv_u16(forbidden_bytemask) != 0) { - return std::make_pair(nullptr, reinterpret_cast(utf16_output)); + return std::make_pair(nullptr, reinterpret_cast(utf16_output)); } - return std::make_pair(buf, reinterpret_cast(utf16_output)); + return std::make_pair(buf, reinterpret_cast(utf16_output)); } - template -std::pair arm_convert_utf32_to_utf16_with_errors(const char32_t* buf, size_t len, char16_t* utf16_out) { - uint16_t * utf16_output = reinterpret_cast(utf16_out); - const char32_t* start = buf; - const char32_t* end = buf + len; +std::pair +arm_convert_utf32_to_utf16_with_errors(const char32_t *buf, size_t len, + char16_t *utf16_out) { + uint16_t *utf16_output = reinterpret_cast(utf16_out); + const char32_t *start = buf; + const char32_t *end = buf + len; - while(end - buf >= 4) { + while (end - buf >= 4) { uint32x4_t in = vld1q_u32(reinterpret_cast(buf)); // Check if no bits set above 16th - if(vmaxvq_u32(in) <= 0xFFFF) { + if (vmaxvq_u32(in) <= 0xFFFF) { uint16x4_t utf16_packed = vmovn_u32(in); const uint16x4_t v_d800 = vmov_n_u16((uint16_t)0xd800); const uint16x4_t v_dfff = vmov_n_u16((uint16_t)0xdfff); - const uint16x4_t forbidden_bytemask = vand_u16(vcle_u16(utf16_packed, v_dfff), vcge_u16(utf16_packed, v_d800)); + const uint16x4_t forbidden_bytemask = vand_u16( + vcle_u16(utf16_packed, v_dfff), vcge_u16(utf16_packed, v_d800)); if (vmaxv_u16(forbidden_bytemask) != 0) { - return std::make_pair(result(error_code::SURROGATE, buf - start), reinterpret_cast(utf16_output)); + return std::make_pair(result(error_code::SURROGATE, buf - start), + reinterpret_cast(utf16_output)); } - if (!match_system(big_endian)) { utf16_packed = vreinterpret_u16_u8(vrev16_u8(vreinterpret_u8_u16(utf16_packed))); } + if (!match_system(big_endian)) { + utf16_packed = + vreinterpret_u16_u8(vrev16_u8(vreinterpret_u8_u16(utf16_packed))); + } vst1_u16(utf16_output, utf16_packed); utf16_output += 4; buf += 4; } else { size_t forward = 3; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { uint32_t word = buf[k]; - if((word & 0xFFFF0000)==0) { + if ((word & 0xFFFF0000) == 0) { // will not generate a surrogate pair - if (word >= 0xD800 && word <= 0xDFFF) { return std::make_pair(result(error_code::SURROGATE, buf - start + k), reinterpret_cast(utf16_output)); } - *utf16_output++ = !match_system(big_endian) ? char16_t(word >> 8 | word << 8) : char16_t(word); + if (word >= 0xD800 && word <= 0xDFFF) { + return std::make_pair( + result(error_code::SURROGATE, buf - start + k), + reinterpret_cast(utf16_output)); + } + *utf16_output++ = !match_system(big_endian) + ? char16_t(word >> 8 | word << 8) + : char16_t(word); } else { // will generate a surrogate pair - if (word > 0x10FFFF) { return std::make_pair(result(error_code::TOO_LARGE, buf - start + k), reinterpret_cast(utf16_output)); } + if (word > 0x10FFFF) { + return std::make_pair( + result(error_code::TOO_LARGE, buf - start + k), + reinterpret_cast(utf16_output)); + } word -= 0x10000; uint16_t high_surrogate = uint16_t(0xD800 + (word >> 10)); uint16_t low_surrogate = uint16_t(0xDC00 + (word & 0x3FF)); if (!match_system(big_endian)) { - high_surrogate = uint16_t(high_surrogate >> 8 | high_surrogate << 8); + high_surrogate = + uint16_t(high_surrogate >> 8 | high_surrogate << 8); low_surrogate = uint16_t(low_surrogate << 8 | low_surrogate >> 8); } *utf16_output++ = char16_t(high_surrogate); @@ -16587,523 +15994,517 @@ std::pair arm_convert_utf32_to_utf16_with_errors(const char32 } } - return std::make_pair(result(error_code::SUCCESS, buf - start), reinterpret_cast(utf16_output)); + return std::make_pair(result(error_code::SUCCESS, buf - start), + reinterpret_cast(utf16_output)); } /* end file src/arm64/arm_convert_utf32_to_utf16.cpp */ -/* begin file src/arm64/arm_base64.cpp */ -/** - * References and further reading: - * - * Wojciech Muła, Daniel Lemire, Base64 encoding and decoding at almost the - * speed of a memory copy, Software: Practice and Experience 50 (2), 2020. - * https://arxiv.org/abs/1910.05109 - * - * Wojciech Muła, Daniel Lemire, Faster Base64 Encoding and Decoding using AVX2 - * Instructions, ACM Transactions on the Web 12 (3), 2018. - * https://arxiv.org/abs/1704.00605 - * - * Simon Josefsson. 2006. The Base16, Base32, and Base64 Data Encodings. - * https://tools.ietf.org/html/rfc4648. (2006). Internet Engineering Task Force, - * Request for Comments: 4648. - * - * Alfred Klomp. 2014a. Fast Base64 encoding/decoding with SSE vectorization. - * http://www.alfredklomp.com/programming/sse-base64/. (2014). - * - * Alfred Klomp. 2014b. Fast Base64 stream encoder/decoder in C99, with SIMD - * acceleration. https://github.com/aklomp/base64. (2014). - * - * Hanson Char. 2014. A Fast and Correct Base 64 Codec. (2014). - * https://aws.amazon.com/blogs/developer/a-fast-and-correct-base-64-codec/ - * - * Nick Kopp. 2013. Base64 Encoding on a GPU. - * https://www.codeproject.com/Articles/276993/Base-Encoding-on-a-GPU. (2013). - */ - -size_t encode_base64(char *dst, const char *src, size_t srclen, - base64_options options) { - // credit: Wojciech Muła - uint8_t *out = (uint8_t *)dst; - constexpr static uint8_t source_table[64] = { - 'A', 'Q', 'g', 'w', 'B', 'R', 'h', 'x', 'C', 'S', 'i', 'y', 'D', - 'T', 'j', 'z', 'E', 'U', 'k', '0', 'F', 'V', 'l', '1', 'G', 'W', - 'm', '2', 'H', 'X', 'n', '3', 'I', 'Y', 'o', '4', 'J', 'Z', 'p', - '5', 'K', 'a', 'q', '6', 'L', 'b', 'r', '7', 'M', 'c', 's', '8', - 'N', 'd', 't', '9', 'O', 'e', 'u', '+', 'P', 'f', 'v', '/', - }; - constexpr static uint8_t source_table_url[64] = { - 'A', 'Q', 'g', 'w', 'B', 'R', 'h', 'x', 'C', 'S', 'i', 'y', 'D', - 'T', 'j', 'z', 'E', 'U', 'k', '0', 'F', 'V', 'l', '1', 'G', 'W', - 'm', '2', 'H', 'X', 'n', '3', 'I', 'Y', 'o', '4', 'J', 'Z', 'p', - '5', 'K', 'a', 'q', '6', 'L', 'b', 'r', '7', 'M', 'c', 's', '8', - 'N', 'd', 't', '9', 'O', 'e', 'u', '-', 'P', 'f', 'v', '_', - }; - const uint8x16_t v3f = vdupq_n_u8(0x3f); -#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - // When trying to load a uint8_t array, Visual Studio might - // error with: error C2664: '__n128x4 neon_ld4m_q8(const char *)': - // cannot convert argument 1 from 'const uint8_t [64]' to 'const char * - const uint8x16x4_t table = - vld4q_u8((reinterpret_cast( - options & base64_url) ? source_table_url : source_table)); -#else - const uint8x16x4_t table = - vld4q_u8((options & base64_url) ? source_table_url : source_table); -#endif - size_t i = 0; - for (; i + 16 * 3 <= srclen; i += 16 * 3) { - const uint8x16x3_t in = vld3q_u8((const uint8_t *)src + i); - uint8x16x4_t result; - result.val[0] = vshrq_n_u8(in.val[0], 2); - result.val[1] = - vandq_u8(vsliq_n_u8(vshrq_n_u8(in.val[1], 4), in.val[0], 4), v3f); - result.val[2] = - vandq_u8(vsliq_n_u8(vshrq_n_u8(in.val[2], 6), in.val[1], 2), v3f); - result.val[3] = vandq_u8(in.val[2], v3f); - result.val[0] = vqtbl4q_u8(table, result.val[0]); - result.val[1] = vqtbl4q_u8(table, result.val[1]); - result.val[2] = vqtbl4q_u8(table, result.val[2]); - result.val[3] = vqtbl4q_u8(table, result.val[3]); - vst4q_u8(out, result); - out += 64; - } - out += scalar::base64::tail_encode_base64((char *)out, src + i, srclen - i, - options); - - return size_t((char *)out - dst); -} - -static inline void compress(uint8x16_t data, uint16_t mask, char *output) { - if (mask == 0) { - vst1q_u8((uint8_t *)output, data); - return; - } - uint8_t mask1 = uint8_t(mask); // least significant 8 bits - uint8_t mask2 = uint8_t(mask >> 8); // most significant 8 bits - uint64x2_t compactmasku64 = {tables::base64::thintable_epi8[mask1], - tables::base64::thintable_epi8[mask2]}; - uint8x16_t compactmask = vreinterpretq_u8_u64(compactmasku64); -#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - const uint8x16_t off = - simdutf_make_uint8x16_t(0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8); -#else - const uint8x16_t off = {0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8}; -#endif - - compactmask = vaddq_u8(compactmask, off); - uint8x16_t pruned = vqtbl1q_u8(data, compactmask); - - int pop1 = tables::base64::BitsSetTable256mul2[mask1]; - // then load the corresponding mask, what it does is to write - // only the first pop1 bytes from the first 8 bytes, and then - // it fills in with the bytes from the second 8 bytes + some filling - // at the end. - compactmask = vld1q_u8(tables::base64::pshufb_combine_table + pop1 * 8); - uint8x16_t answer = vqtbl1q_u8(pruned, compactmask); - vst1q_u8((uint8_t *)output, answer); -} - -struct block64 { - uint8x16_t chunks[4]; -}; +/* begin file src/arm64/arm_convert_utf32_to_utf8.cpp */ +std::pair +arm_convert_utf32_to_utf8(const char32_t *buf, size_t len, char *utf8_out) { + uint8_t *utf8_output = reinterpret_cast(utf8_out); + const char32_t *end = buf + len; -static_assert(sizeof(block64) == 64, "block64 is not 64 bytes"); -template uint64_t to_base64_mask(block64 *b, bool *error) { - uint8x16_t v0f = vdupq_n_u8(0xf); + const uint16x8_t v_c080 = vmovq_n_u16((uint16_t)0xc080); - uint8x16_t underscore0, underscore1, underscore2, underscore3; - if (base64_url) { - underscore0 = vceqq_u8(b->chunks[0], vdupq_n_u8(0x5f)); - underscore1 = vceqq_u8(b->chunks[1], vdupq_n_u8(0x5f)); - underscore2 = vceqq_u8(b->chunks[2], vdupq_n_u8(0x5f)); - underscore3 = vceqq_u8(b->chunks[3], vdupq_n_u8(0x5f)); - } else { - (void)underscore0; - (void)underscore1; - (void)underscore2; - (void)underscore3; - } + uint16x8_t forbidden_bytemask = vmovq_n_u16(0x0); + const size_t safety_margin = + 12; // to avoid overruns, see issue + // https://github.com/simdutf/simdutf/issues/92 - uint8x16_t lo_nibbles0 = vandq_u8(b->chunks[0], v0f); - uint8x16_t lo_nibbles1 = vandq_u8(b->chunks[1], v0f); - uint8x16_t lo_nibbles2 = vandq_u8(b->chunks[2], v0f); - uint8x16_t lo_nibbles3 = vandq_u8(b->chunks[3], v0f); + while (buf + 16 + safety_margin < end) { + uint32x4_t in = vld1q_u32(reinterpret_cast(buf)); + uint32x4_t nextin = vld1q_u32(reinterpret_cast(buf + 4)); - // Needed by the decoding step. - uint8x16_t hi_nibbles0 = vshrq_n_u8(b->chunks[0], 4); - uint8x16_t hi_nibbles1 = vshrq_n_u8(b->chunks[1], 4); - uint8x16_t hi_nibbles2 = vshrq_n_u8(b->chunks[2], 4); - uint8x16_t hi_nibbles3 = vshrq_n_u8(b->chunks[3], 4); - uint8x16_t lut_lo; -#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - if (base64_url) { - lut_lo = - simdutf_make_uint8x16_t(0x3a,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x61,0xe1,0xf4,0xe5,0xa5,0xf4,0xf4); - } else { - lut_lo = - simdutf_make_uint8x16_t(0x3a,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x61,0xe1,0xb4,0xe5,0xe5,0xf4,0xb4); - } -#else - if (base64_url) { - lut_lo = uint8x16_t{0x3a,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x61,0xe1,0xf4,0xe5,0xa5,0xf4,0xf4}; - } else { - lut_lo = uint8x16_t{0x3a,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x61,0xe1,0xb4,0xe5,0xe5,0xf4,0xb4}; - } -#endif - uint8x16_t lo0 = vqtbl1q_u8(lut_lo, lo_nibbles0); - uint8x16_t lo1 = vqtbl1q_u8(lut_lo, lo_nibbles1); - uint8x16_t lo2 = vqtbl1q_u8(lut_lo, lo_nibbles2); - uint8x16_t lo3 = vqtbl1q_u8(lut_lo, lo_nibbles3); - uint8x16_t lut_hi; -#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - if (base64_url) { - lut_hi = - simdutf_make_uint8x16_t(0x11, 0x20, 0x42, 0x80, 0x8, 0x4, 0x8, 0x4, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20); - } else { - lut_hi = - simdutf_make_uint8x16_t(0x11, 0x20, 0x42, 0x80, 0x8, 0x4, 0x8, 0x4, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20); - } -#else - if (base64_url) { - lut_hi = uint8x16_t{0x11, 0x20, 0x42, 0x80, 0x8, 0x4, 0x8, 0x4, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20}; - } else { - lut_hi = uint8x16_t{0x11, 0x20, 0x42, 0x80, 0x8, 0x4, 0x8, 0x4, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20}; - } -#endif - uint8x16_t hi0 = vqtbl1q_u8(lut_hi, hi_nibbles0); - uint8x16_t hi1 = vqtbl1q_u8(lut_hi, hi_nibbles1); - uint8x16_t hi2 = vqtbl1q_u8(lut_hi, hi_nibbles2); - uint8x16_t hi3 = vqtbl1q_u8(lut_hi, hi_nibbles3); + // Check if no bits set above 16th + if (vmaxvq_u32(vorrq_u32(in, nextin)) <= 0xFFFF) { + // Pack UTF-32 to UTF-16 safely (without surrogate pairs) + // Apply UTF-16 => UTF-8 routine (arm_convert_utf16_to_utf8.cpp) + uint16x8_t utf16_packed = vcombine_u16(vmovn_u32(in), vmovn_u32(nextin)); + if (vmaxvq_u16(utf16_packed) <= 0x7F) { // ASCII fast path!!!! + // 1. pack the bytes + // obviously suboptimal. + uint8x8_t utf8_packed = vmovn_u16(utf16_packed); + // 2. store (8 bytes) + vst1_u8(utf8_output, utf8_packed); + // 3. adjust pointers + buf += 8; + utf8_output += 8; + continue; // we are done for this round! + } - if (base64_url) { - hi0 = vbicq_u8(hi0, underscore0); - hi1 = vbicq_u8(hi1, underscore1); - hi2 = vbicq_u8(hi2, underscore2); - hi3 = vbicq_u8(hi3, underscore3); - } + if (vmaxvq_u16(utf16_packed) <= 0x7FF) { + // 1. prepare 2-byte values + // input 16-bit word : [0000|0aaa|aabb|bbbb] x 8 + // expected output : [110a|aaaa|10bb|bbbb] x 8 + const uint16x8_t v_1f00 = vmovq_n_u16((int16_t)0x1f00); + const uint16x8_t v_003f = vmovq_n_u16((int16_t)0x003f); - uint8_t checks = - vmaxvq_u8(vorrq_u8(vorrq_u8(vandq_u8(lo0, hi0), vandq_u8(lo1, hi1)), - vorrq_u8(vandq_u8(lo2, hi2), vandq_u8(lo3, hi3)))); + // t0 = [000a|aaaa|bbbb|bb00] + const uint16x8_t t0 = vshlq_n_u16(utf16_packed, 2); + // t1 = [000a|aaaa|0000|0000] + const uint16x8_t t1 = vandq_u16(t0, v_1f00); + // t2 = [0000|0000|00bb|bbbb] + const uint16x8_t t2 = vandq_u16(utf16_packed, v_003f); + // t3 = [000a|aaaa|00bb|bbbb] + const uint16x8_t t3 = vorrq_u16(t1, t2); + // t4 = [110a|aaaa|10bb|bbbb] + const uint16x8_t t4 = vorrq_u16(t3, v_c080); + // 2. merge ASCII and 2-byte codewords + const uint16x8_t v_007f = vmovq_n_u16((uint16_t)0x007F); + const uint16x8_t one_byte_bytemask = vcleq_u16(utf16_packed, v_007f); + const uint8x16_t utf8_unpacked = vreinterpretq_u8_u16( + vbslq_u16(one_byte_bytemask, utf16_packed, t4)); + // 3. prepare bitmask for 8-bit lookup #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - const uint8x16_t bit_mask = - simdutf_make_uint8x16_t(0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, - 0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80); + const uint16x8_t mask = simdutf_make_uint16x8_t( + 0x0001, 0x0004, 0x0010, 0x0040, 0x0002, 0x0008, 0x0020, 0x0080); #else - const uint8x16_t bit_mask = {0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, - 0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; + const uint16x8_t mask = {0x0001, 0x0004, 0x0010, 0x0040, + 0x0002, 0x0008, 0x0020, 0x0080}; #endif - uint64_t badcharmask = 0; - *error = checks > 0x3; - if (checks) { - // Add each of the elements next to each other, successively, to stuff each - // 8 byte mask into one. - uint8x16_t test0 = vtstq_u8(lo0, hi0); - uint8x16_t test1 = vtstq_u8(lo1, hi1); - uint8x16_t test2 = vtstq_u8(lo2, hi2); - uint8x16_t test3 = vtstq_u8(lo3, hi3); - uint8x16_t sum0 = - vpaddq_u8(vandq_u8(test0, bit_mask), vandq_u8(test1, bit_mask)); - uint8x16_t sum1 = - vpaddq_u8(vandq_u8(test2, bit_mask), vandq_u8(test3, bit_mask)); - sum0 = vpaddq_u8(sum0, sum1); - sum0 = vpaddq_u8(sum0, sum0); - badcharmask = vgetq_lane_u64(vreinterpretq_u64_u8(sum0), 0); - } - // This is the transformation step that can be done while we are waiting for - // sum0 - uint8x16_t roll_lut; + uint16_t m2 = vaddvq_u16(vandq_u16(one_byte_bytemask, mask)); + // 4. pack the bytes + const uint8_t *row = + &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[m2][0]; + const uint8x16_t shuffle = vld1q_u8(row + 1); + const uint8x16_t utf8_packed = vqtbl1q_u8(utf8_unpacked, shuffle); + + // 5. store bytes + vst1q_u8(utf8_output, utf8_packed); + + // 6. adjust pointers + buf += 8; + utf8_output += row[0]; + continue; + } else { + // case: code units from register produce either 1, 2 or 3 UTF-8 bytes + const uint16x8_t v_d800 = vmovq_n_u16((uint16_t)0xd800); + const uint16x8_t v_dfff = vmovq_n_u16((uint16_t)0xdfff); + forbidden_bytemask = + vorrq_u16(vandq_u16(vcleq_u16(utf16_packed, v_dfff), + vcgeq_u16(utf16_packed, v_d800)), + forbidden_bytemask); + #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO - if (base64_url) { - roll_lut = - simdutf_make_uint8x16_t(0xe0, 0x11, 0x13, 0x4, 0xbf, 0xbf, 0xb9, 0xb9, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0); - } else { - roll_lut = - simdutf_make_uint8x16_t(0x0, 0x10, 0x13, 0x4, 0xbf, 0xbf, 0xb9, 0xb9, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0); - } + const uint16x8_t dup_even = simdutf_make_uint16x8_t( + 0x0000, 0x0202, 0x0404, 0x0606, 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); #else - if (base64_url) { - roll_lut = uint8x16_t{0xe0, 0x11, 0x13, 0x4, 0xbf, 0xbf, 0xb9, 0xb9, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; - } else { - roll_lut = uint8x16_t{0x0, 0x10, 0x13, 0x4, 0xbf, 0xbf, 0xb9, 0xb9, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; - } + const uint16x8_t dup_even = {0x0000, 0x0202, 0x0404, 0x0606, + 0x0808, 0x0a0a, 0x0c0c, 0x0e0e}; #endif - uint8x16_t vsecond_last = base64_url ? vdupq_n_u8(0x2d) : vdupq_n_u8(0x2f); - if (base64_url) { - hi_nibbles0 = vbicq_u8(hi_nibbles0, underscore0); - hi_nibbles1 = vbicq_u8(hi_nibbles1, underscore1); - hi_nibbles2 = vbicq_u8(hi_nibbles2, underscore2); - hi_nibbles3 = vbicq_u8(hi_nibbles3, underscore3); - } - uint8x16_t roll0 = vqtbl1q_u8( - roll_lut, vaddq_u8(vceqq_u8(b->chunks[0], vsecond_last), hi_nibbles0)); - uint8x16_t roll1 = vqtbl1q_u8( - roll_lut, vaddq_u8(vceqq_u8(b->chunks[1], vsecond_last), hi_nibbles1)); - uint8x16_t roll2 = vqtbl1q_u8( - roll_lut, vaddq_u8(vceqq_u8(b->chunks[2], vsecond_last), hi_nibbles2)); - uint8x16_t roll3 = vqtbl1q_u8( - roll_lut, vaddq_u8(vceqq_u8(b->chunks[3], vsecond_last), hi_nibbles3)); - b->chunks[0] = vaddq_u8(b->chunks[0], roll0); - b->chunks[1] = vaddq_u8(b->chunks[1], roll1); - b->chunks[2] = vaddq_u8(b->chunks[2], roll2); - b->chunks[3] = vaddq_u8(b->chunks[3], roll3); - return badcharmask; -} + /* In this branch we handle three cases: + 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - + single UFT-8 byte + 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - + two UTF-8 bytes + 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - + three UTF-8 bytes -void copy_block(block64 *b, char *output) { - vst1q_u8((uint8_t *)output, b->chunks[0]); - vst1q_u8((uint8_t *)output + 16, b->chunks[1]); - vst1q_u8((uint8_t *)output + 32, b->chunks[2]); - vst1q_u8((uint8_t *)output + 48, b->chunks[3]); -} + We expand the input word (16-bit) into two code units (32-bit), thus + we have room for four bytes. However, we need five distinct bit + layouts. Note that the last byte in cases #2 and #3 is the same. -uint64_t compress_block(block64 *b, uint64_t mask, char *output) { - uint64_t popcounts = - vget_lane_u64(vreinterpret_u64_u8(vcnt_u8(vcreate_u8(~mask))), 0); - uint64_t offsets = popcounts * 0x0101010101010101; - compress(b->chunks[0], uint16_t(mask), output); - compress(b->chunks[1], uint16_t(mask >> 16), &output[(offsets >> 8) & 0xFF]); - compress(b->chunks[2], uint16_t(mask >> 32), &output[(offsets >> 24) & 0xFF]); - compress(b->chunks[3], uint16_t(mask >> 48), &output[(offsets >> 40) & 0xFF]); - return offsets >> 56; -} + We precompute byte 1 for case #1 and the common byte for cases #2 & #3 + in register t2. -// The caller of this function is responsible to ensure that there are 64 bytes available -// from reading at src. The data is read into a block64 structure. -void load_block(block64 *b, const char *src) { - b->chunks[0] = vld1q_u8(reinterpret_cast(src)); - b->chunks[1] = vld1q_u8(reinterpret_cast(src) + 16); - b->chunks[2] = vld1q_u8(reinterpret_cast(src) + 32); - b->chunks[3] = vld1q_u8(reinterpret_cast(src) + 48); -} + We precompute byte 1 for case #3 and -- **conditionally** -- + precompute either byte 1 for case #2 or byte 2 for case #3. Note that + they differ by exactly one bit. -// The caller of this function is responsible to ensure that there are 32 bytes available -// from reading at data. It returns a 16-byte value, narrowing with saturation the 16-bit words. -inline uint8x16_t load_satured(const uint16_t *data) { - uint16x8_t in1 = vld1q_u16(data); - uint16x8_t in2 = vld1q_u16(data + 8); - return vqmovn_high_u16(vqmovn_u16(in1), in2); -} + Finally from these two code units we build proper UTF-8 sequence, + taking into account the case (i.e, the number of bytes to write). + */ + /** + * Given [aaaa|bbbb|bbcc|cccc] our goal is to produce: + * t2 => [0ccc|cccc] [10cc|cccc] + * s4 => [1110|aaaa] ([110b|bbbb] OR [10bb|bbbb]) + */ +#define simdutf_vec(x) vmovq_n_u16(static_cast(x)) + // [aaaa|bbbb|bbcc|cccc] => [bbcc|cccc|bbcc|cccc] + const uint16x8_t t0 = + vreinterpretq_u16_u8(vqtbl1q_u8(vreinterpretq_u8_u16(utf16_packed), + vreinterpretq_u8_u16(dup_even))); + // [bbcc|cccc|bbcc|cccc] => [00cc|cccc|0bcc|cccc] + const uint16x8_t t1 = vandq_u16(t0, simdutf_vec(0b0011111101111111)); + // [00cc|cccc|0bcc|cccc] => [10cc|cccc|0bcc|cccc] + const uint16x8_t t2 = vorrq_u16(t1, simdutf_vec(0b1000000000000000)); -// The caller of this function is responsible to ensure that there are 128 bytes available -// from reading at src. The data is read into a block64 structure. -void load_block(block64 *b, const char16_t *src) { - b->chunks[0] = load_satured(reinterpret_cast(src)); - b->chunks[1] = load_satured(reinterpret_cast(src) + 16); - b->chunks[2] = load_satured(reinterpret_cast(src) + 32); - b->chunks[3] = load_satured(reinterpret_cast(src) + 48); -} + // s0: [aaaa|bbbb|bbcc|cccc] => [0000|0000|0000|aaaa] + const uint16x8_t s0 = vshrq_n_u16(utf16_packed, 12); + // s1: [aaaa|bbbb|bbcc|cccc] => [0000|bbbb|bb00|0000] + const uint16x8_t s1 = + vandq_u16(utf16_packed, simdutf_vec(0b0000111111000000)); + // [0000|bbbb|bb00|0000] => [00bb|bbbb|0000|0000] + const uint16x8_t s1s = vshlq_n_u16(s1, 2); + // [00bb|bbbb|0000|aaaa] + const uint16x8_t s2 = vorrq_u16(s0, s1s); + // s3: [00bb|bbbb|0000|aaaa] => [11bb|bbbb|1110|aaaa] + const uint16x8_t s3 = vorrq_u16(s2, simdutf_vec(0b1100000011100000)); + const uint16x8_t v_07ff = vmovq_n_u16((uint16_t)0x07FF); + const uint16x8_t one_or_two_bytes_bytemask = + vcleq_u16(utf16_packed, v_07ff); + const uint16x8_t m0 = vbicq_u16(simdutf_vec(0b0100000000000000), + one_or_two_bytes_bytemask); + const uint16x8_t s4 = veorq_u16(s3, m0); +#undef simdutf_vec -// decode 64 bytes and output 48 bytes -void base64_decode_block(char *out, const char *src) { - uint8x16x4_t str = vld4q_u8((uint8_t *)src); - uint8x16x3_t outvec; - outvec.val[0] = - vorrq_u8(vshlq_n_u8(str.val[0], 2), vshrq_n_u8(str.val[1], 4)); - outvec.val[1] = - vorrq_u8(vshlq_n_u8(str.val[1], 4), vshrq_n_u8(str.val[2], 2)); - outvec.val[2] = vorrq_u8(vshlq_n_u8(str.val[2], 6), str.val[3]); - vst3q_u8((uint8_t *)out, outvec); -} + // 4. expand code units 16-bit => 32-bit + const uint8x16_t out0 = vreinterpretq_u8_u16(vzip1q_u16(t2, s4)); + const uint8x16_t out1 = vreinterpretq_u8_u16(vzip2q_u16(t2, s4)); -template -result compress_decode_base64(char *dst, const char_type *src, size_t srclen, - base64_options options) { - const uint8_t *to_base64 = base64_url ? tables::base64::to_base64_url_value - : tables::base64::to_base64_value; - size_t equallocation = srclen; // location of the first padding character if any - // skip trailing spaces - while (srclen > 0 && scalar::base64::is_eight_byte(src[srclen - 1]) && to_base64[uint8_t(src[srclen - 1])] == 64) { - srclen--; - } - size_t equalsigns = 0; - if (srclen > 0 && src[srclen - 1] == '=') { - equallocation = srclen - 1; - srclen--; - equalsigns = 1; - // skip trailing spaces - while (srclen > 0 && scalar::base64::is_eight_byte(src[srclen - 1]) && to_base64[uint8_t(src[srclen - 1])] == 64) { - srclen--; - } - if (srclen > 0 && src[srclen - 1] == '=') { - equallocation = srclen - 1; - srclen--; - equalsigns = 2; - } - } - const char_type *const srcinit = src; - const char *const dstinit = dst; - const char_type *const srcend = src + srclen; + // 5. compress 32-bit code units into 1, 2 or 3 bytes -- 2 x shuffle + const uint16x8_t v_007f = vmovq_n_u16((uint16_t)0x007F); + const uint16x8_t one_byte_bytemask = vcleq_u16(utf16_packed, v_007f); +#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO + const uint16x8_t onemask = simdutf_make_uint16x8_t( + 0x0001, 0x0004, 0x0010, 0x0040, 0x0100, 0x0400, 0x1000, 0x4000); + const uint16x8_t twomask = simdutf_make_uint16x8_t( + 0x0002, 0x0008, 0x0020, 0x0080, 0x0200, 0x0800, 0x2000, 0x8000); +#else + const uint16x8_t onemask = {0x0001, 0x0004, 0x0010, 0x0040, + 0x0100, 0x0400, 0x1000, 0x4000}; + const uint16x8_t twomask = {0x0002, 0x0008, 0x0020, 0x0080, + 0x0200, 0x0800, 0x2000, 0x8000}; +#endif + const uint16x8_t combined = + vorrq_u16(vandq_u16(one_byte_bytemask, onemask), + vandq_u16(one_or_two_bytes_bytemask, twomask)); + const uint16_t mask = vaddvq_u16(combined); + // The following fast path may or may not be beneficial. + /*if(mask == 0) { + // We only have three-byte code units. Use fast path. + const uint8x16_t shuffle = {2,3,1,6,7,5,10,11,9,14,15,13,0,0,0,0}; + const uint8x16_t utf8_0 = vqtbl1q_u8(out0, shuffle); + const uint8x16_t utf8_1 = vqtbl1q_u8(out1, shuffle); + vst1q_u8(utf8_output, utf8_0); + utf8_output += 12; + vst1q_u8(utf8_output, utf8_1); + utf8_output += 12; + buf += 8; + continue; + }*/ + const uint8_t mask0 = uint8_t(mask); + const uint8_t *row0 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; + const uint8x16_t shuffle0 = vld1q_u8(row0 + 1); + const uint8x16_t utf8_0 = vqtbl1q_u8(out0, shuffle0); - constexpr size_t block_size = 10; - char buffer[block_size * 64]; - char *bufferptr = buffer; - if (srclen >= 64) { - const char_type *const srcend64 = src + srclen - 64; - while (src <= srcend64) { - block64 b; - load_block(&b, src); - src += 64; - bool error = false; - uint64_t badcharmask = to_base64_mask(&b, &error); - if(badcharmask){ - if (error) { - src -= 64; - while (src < srcend && scalar::base64::is_eight_byte(*src) && to_base64[uint8_t(*src)] <= 64) { - src++; + const uint8_t mask1 = static_cast(mask >> 8); + const uint8_t *row1 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; + const uint8x16_t shuffle1 = vld1q_u8(row1 + 1); + const uint8x16_t utf8_1 = vqtbl1q_u8(out1, shuffle1); + + vst1q_u8(utf8_output, utf8_0); + utf8_output += row0[0]; + vst1q_u8(utf8_output, utf8_1); + utf8_output += row1[0]; + + buf += 8; + } + // At least one 32-bit word will produce a surrogate pair in UTF-16 <=> + // will produce four UTF-8 bytes. + } else { + // Let us do a scalar fallback. + // It may seem wasteful to use scalar code, but being efficient with SIMD + // in the presence of surrogate pairs may require non-trivial tables. + size_t forward = 15; + size_t k = 0; + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { + uint32_t word = buf[k]; + if ((word & 0xFFFFFF80) == 0) { + *utf8_output++ = char(word); + } else if ((word & 0xFFFFF800) == 0) { + *utf8_output++ = char((word >> 6) | 0b11000000); + *utf8_output++ = char((word & 0b111111) | 0b10000000); + } else if ((word & 0xFFFF0000) == 0) { + if (word >= 0xD800 && word <= 0xDFFF) { + return std::make_pair(nullptr, + reinterpret_cast(utf8_output)); } - if(src < srcend){ - // should never happen + *utf8_output++ = char((word >> 12) | 0b11100000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); + *utf8_output++ = char((word & 0b111111) | 0b10000000); + } else { + if (word > 0x10FFFF) { + return std::make_pair(nullptr, + reinterpret_cast(utf8_output)); } - return {error_code::INVALID_BASE64_CHARACTER, size_t(src - srcinit)}; + *utf8_output++ = char((word >> 18) | 0b11110000); + *utf8_output++ = char(((word >> 12) & 0b111111) | 0b10000000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); + *utf8_output++ = char((word & 0b111111) | 0b10000000); } } + buf += k; + } + } // while + + // check for invalid input + if (vmaxvq_u16(forbidden_bytemask) != 0) { + return std::make_pair(nullptr, reinterpret_cast(utf8_output)); + } + return std::make_pair(buf, reinterpret_cast(utf8_output)); +} + +std::pair +arm_convert_utf32_to_utf8_with_errors(const char32_t *buf, size_t len, + char *utf8_out) { + uint8_t *utf8_output = reinterpret_cast(utf8_out); + const char32_t *start = buf; + const char32_t *end = buf + len; + + const uint16x8_t v_c080 = vmovq_n_u16((uint16_t)0xc080); + const size_t safety_margin = + 12; // to avoid overruns, see issue + // https://github.com/simdutf/simdutf/issues/92 + + while (buf + 16 + safety_margin < end) { + uint32x4_t in = vld1q_u32(reinterpret_cast(buf)); + uint32x4_t nextin = vld1q_u32(reinterpret_cast(buf + 4)); + + // Check if no bits set above 16th + if (vmaxvq_u32(vorrq_u32(in, nextin)) <= 0xFFFF) { + // Pack UTF-32 to UTF-16 safely (without surrogate pairs) + // Apply UTF-16 => UTF-8 routine (arm_convert_utf16_to_utf8.cpp) + uint16x8_t utf16_packed = vcombine_u16(vmovn_u32(in), vmovn_u32(nextin)); + if (vmaxvq_u16(utf16_packed) <= 0x7F) { // ASCII fast path!!!! + // 1. pack the bytes + // obviously suboptimal. + uint8x8_t utf8_packed = vmovn_u16(utf16_packed); + // 2. store (8 bytes) + vst1_u8(utf8_output, utf8_packed); + // 3. adjust pointers + buf += 8; + utf8_output += 8; + continue; // we are done for this round! + } + + if (vmaxvq_u16(utf16_packed) <= 0x7FF) { + // 1. prepare 2-byte values + // input 16-bit word : [0000|0aaa|aabb|bbbb] x 8 + // expected output : [110a|aaaa|10bb|bbbb] x 8 + const uint16x8_t v_1f00 = vmovq_n_u16((int16_t)0x1f00); + const uint16x8_t v_003f = vmovq_n_u16((int16_t)0x003f); + + // t0 = [000a|aaaa|bbbb|bb00] + const uint16x8_t t0 = vshlq_n_u16(utf16_packed, 2); + // t1 = [000a|aaaa|0000|0000] + const uint16x8_t t1 = vandq_u16(t0, v_1f00); + // t2 = [0000|0000|00bb|bbbb] + const uint16x8_t t2 = vandq_u16(utf16_packed, v_003f); + // t3 = [000a|aaaa|00bb|bbbb] + const uint16x8_t t3 = vorrq_u16(t1, t2); + // t4 = [110a|aaaa|10bb|bbbb] + const uint16x8_t t4 = vorrq_u16(t3, v_c080); + // 2. merge ASCII and 2-byte codewords + const uint16x8_t v_007f = vmovq_n_u16((uint16_t)0x007F); + const uint16x8_t one_byte_bytemask = vcleq_u16(utf16_packed, v_007f); + const uint8x16_t utf8_unpacked = vreinterpretq_u8_u16( + vbslq_u16(one_byte_bytemask, utf16_packed, t4)); + // 3. prepare bitmask for 8-bit lookup +#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO + const uint16x8_t mask = simdutf_make_uint16x8_t( + 0x0001, 0x0004, 0x0010, 0x0040, 0x0002, 0x0008, 0x0020, 0x0080); +#else + const uint16x8_t mask = {0x0001, 0x0004, 0x0010, 0x0040, + 0x0002, 0x0008, 0x0020, 0x0080}; +#endif + uint16_t m2 = vaddvq_u16(vandq_u16(one_byte_bytemask, mask)); + // 4. pack the bytes + const uint8_t *row = + &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[m2][0]; + const uint8x16_t shuffle = vld1q_u8(row + 1); + const uint8x16_t utf8_packed = vqtbl1q_u8(utf8_unpacked, shuffle); - if (badcharmask != 0) { - // optimization opportunity: check for simple masks like those made of - // continuous 1s followed by continuous 0s. And masks containing a - // single bad character. - bufferptr += compress_block(&b, badcharmask, bufferptr); + // 5. store bytes + vst1q_u8(utf8_output, utf8_packed); + + // 6. adjust pointers + buf += 8; + utf8_output += row[0]; + continue; } else { - // optimization opportunity: if bufferptr == buffer and mask == 0, we - // can avoid the call to compress_block and decode directly. - copy_block(&b, bufferptr); - bufferptr += 64; - } - if (bufferptr >= (block_size - 1) * 64 + buffer) { - for (size_t i = 0; i < (block_size - 1); i++) { - base64_decode_block(dst, buffer + i * 64); - dst += 48; + // case: code units from register produce either 1, 2 or 3 UTF-8 bytes + + // check for invalid input + const uint16x8_t v_d800 = vmovq_n_u16((uint16_t)0xd800); + const uint16x8_t v_dfff = vmovq_n_u16((uint16_t)0xdfff); + const uint16x8_t forbidden_bytemask = vandq_u16( + vcleq_u16(utf16_packed, v_dfff), vcgeq_u16(utf16_packed, v_d800)); + if (vmaxvq_u16(forbidden_bytemask) != 0) { + return std::make_pair(result(error_code::SURROGATE, buf - start), + reinterpret_cast(utf8_output)); } - std::memcpy(buffer, buffer + (block_size - 1) * 64, - 64); // 64 might be too much - bufferptr -= (block_size - 1) * 64; - } - } - } - char *buffer_start = buffer; - // Optimization note: if this is almost full, then it is worth our - // time, otherwise, we should just decode directly. - int last_block = (int)((bufferptr - buffer_start) % 64); - if (last_block != 0 && srcend - src + last_block >= 64) { - while ((bufferptr - buffer_start) % 64 != 0 && src < srcend) { - uint8_t val = to_base64[uint8_t(*src)]; - *bufferptr = char(val); - if (!scalar::base64::is_eight_byte(*src) || val > 64) { - return {error_code::INVALID_BASE64_CHARACTER, size_t(src - srcinit)}; - } - bufferptr += (val <= 63); - src++; - } - } - for (; buffer_start + 64 <= bufferptr; buffer_start += 64) { - base64_decode_block(dst, buffer_start); - dst += 48; - } - if ((bufferptr - buffer_start) % 64 != 0) { - while (buffer_start + 4 < bufferptr) { - uint32_t triple = ((uint32_t(uint8_t(buffer_start[0])) << 3 * 6) + - (uint32_t(uint8_t(buffer_start[1])) << 2 * 6) + - (uint32_t(uint8_t(buffer_start[2])) << 1 * 6) + - (uint32_t(uint8_t(buffer_start[3])) << 0 * 6)) - << 8; - triple = scalar::utf32::swap_bytes(triple); - std::memcpy(dst, &triple, 4); +#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO + const uint16x8_t dup_even = simdutf_make_uint16x8_t( + 0x0000, 0x0202, 0x0404, 0x0606, 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); +#else + const uint16x8_t dup_even = {0x0000, 0x0202, 0x0404, 0x0606, + 0x0808, 0x0a0a, 0x0c0c, 0x0e0e}; +#endif + /* In this branch we handle three cases: + 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - + single UFT-8 byte + 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - + two UTF-8 bytes + 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - + three UTF-8 bytes - dst += 3; - buffer_start += 4; - } - if (buffer_start + 4 <= bufferptr) { - uint32_t triple = ((uint32_t(uint8_t(buffer_start[0])) << 3 * 6) + - (uint32_t(uint8_t(buffer_start[1])) << 2 * 6) + - (uint32_t(uint8_t(buffer_start[2])) << 1 * 6) + - (uint32_t(uint8_t(buffer_start[3])) << 0 * 6)) - << 8; - triple = scalar::utf32::swap_bytes(triple); - std::memcpy(dst, &triple, 3); + We expand the input word (16-bit) into two code units (32-bit), thus + we have room for four bytes. However, we need five distinct bit + layouts. Note that the last byte in cases #2 and #3 is the same. - dst += 3; - buffer_start += 4; - } - // we may have 1, 2 or 3 bytes left and we need to decode them so let us - // bring in src content - int leftover = int(bufferptr - buffer_start); - if (leftover > 0) { - while (leftover < 4 && src < srcend) { - uint8_t val = to_base64[uint8_t(*src)]; - if (!scalar::base64::is_eight_byte(*src) || val > 64) { - return {error_code::INVALID_BASE64_CHARACTER, size_t(src - srcinit)}; - } - buffer_start[leftover] = char(val); - leftover += (val <= 63); - src++; - } + We precompute byte 1 for case #1 and the common byte for cases #2 & #3 + in register t2. - if (leftover == 1) { - return {BASE64_INPUT_REMAINDER, size_t(dst - dstinit)}; - } - if (leftover == 2) { - uint32_t triple = (uint32_t(buffer_start[0]) << 3 * 6) + - (uint32_t(buffer_start[1]) << 2 * 6); - triple = scalar::utf32::swap_bytes(triple); - triple >>= 8; - std::memcpy(dst, &triple, 1); - dst += 1; - } else if (leftover == 3) { - uint32_t triple = (uint32_t(buffer_start[0]) << 3 * 6) + - (uint32_t(buffer_start[1]) << 2 * 6) + - (uint32_t(buffer_start[2]) << 1 * 6); - triple = scalar::utf32::swap_bytes(triple); - triple >>= 8; - - std::memcpy(dst, &triple, 2); - dst += 2; - } else { - uint32_t triple = ((uint32_t(uint8_t(buffer_start[0])) << 3 * 6) + - (uint32_t(uint8_t(buffer_start[1])) << 2 * 6) + - (uint32_t(uint8_t(buffer_start[2])) << 1 * 6) + - (uint32_t(uint8_t(buffer_start[3])) << 0 * 6)) - << 8; - triple = scalar::utf32::swap_bytes(triple); - std::memcpy(dst, &triple, 3); - dst += 3; + We precompute byte 1 for case #3 and -- **conditionally** -- + precompute either byte 1 for case #2 or byte 2 for case #3. Note that + they differ by exactly one bit. + + Finally from these two code units we build proper UTF-8 sequence, + taking into account the case (i.e, the number of bytes to write). + */ + /** + * Given [aaaa|bbbb|bbcc|cccc] our goal is to produce: + * t2 => [0ccc|cccc] [10cc|cccc] + * s4 => [1110|aaaa] ([110b|bbbb] OR [10bb|bbbb]) + */ +#define simdutf_vec(x) vmovq_n_u16(static_cast(x)) + // [aaaa|bbbb|bbcc|cccc] => [bbcc|cccc|bbcc|cccc] + const uint16x8_t t0 = + vreinterpretq_u16_u8(vqtbl1q_u8(vreinterpretq_u8_u16(utf16_packed), + vreinterpretq_u8_u16(dup_even))); + // [bbcc|cccc|bbcc|cccc] => [00cc|cccc|0bcc|cccc] + const uint16x8_t t1 = vandq_u16(t0, simdutf_vec(0b0011111101111111)); + // [00cc|cccc|0bcc|cccc] => [10cc|cccc|0bcc|cccc] + const uint16x8_t t2 = vorrq_u16(t1, simdutf_vec(0b1000000000000000)); + + // s0: [aaaa|bbbb|bbcc|cccc] => [0000|0000|0000|aaaa] + const uint16x8_t s0 = vshrq_n_u16(utf16_packed, 12); + // s1: [aaaa|bbbb|bbcc|cccc] => [0000|bbbb|bb00|0000] + const uint16x8_t s1 = + vandq_u16(utf16_packed, simdutf_vec(0b0000111111000000)); + // [0000|bbbb|bb00|0000] => [00bb|bbbb|0000|0000] + const uint16x8_t s1s = vshlq_n_u16(s1, 2); + // [00bb|bbbb|0000|aaaa] + const uint16x8_t s2 = vorrq_u16(s0, s1s); + // s3: [00bb|bbbb|0000|aaaa] => [11bb|bbbb|1110|aaaa] + const uint16x8_t s3 = vorrq_u16(s2, simdutf_vec(0b1100000011100000)); + const uint16x8_t v_07ff = vmovq_n_u16((uint16_t)0x07FF); + const uint16x8_t one_or_two_bytes_bytemask = + vcleq_u16(utf16_packed, v_07ff); + const uint16x8_t m0 = vbicq_u16(simdutf_vec(0b0100000000000000), + one_or_two_bytes_bytemask); + const uint16x8_t s4 = veorq_u16(s3, m0); +#undef simdutf_vec + + // 4. expand code units 16-bit => 32-bit + const uint8x16_t out0 = vreinterpretq_u8_u16(vzip1q_u16(t2, s4)); + const uint8x16_t out1 = vreinterpretq_u8_u16(vzip2q_u16(t2, s4)); + + // 5. compress 32-bit code units into 1, 2 or 3 bytes -- 2 x shuffle + const uint16x8_t v_007f = vmovq_n_u16((uint16_t)0x007F); + const uint16x8_t one_byte_bytemask = vcleq_u16(utf16_packed, v_007f); +#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO + const uint16x8_t onemask = simdutf_make_uint16x8_t( + 0x0001, 0x0004, 0x0010, 0x0040, 0x0100, 0x0400, 0x1000, 0x4000); + const uint16x8_t twomask = simdutf_make_uint16x8_t( + 0x0002, 0x0008, 0x0020, 0x0080, 0x0200, 0x0800, 0x2000, 0x8000); +#else + const uint16x8_t onemask = {0x0001, 0x0004, 0x0010, 0x0040, + 0x0100, 0x0400, 0x1000, 0x4000}; + const uint16x8_t twomask = {0x0002, 0x0008, 0x0020, 0x0080, + 0x0200, 0x0800, 0x2000, 0x8000}; +#endif + const uint16x8_t combined = + vorrq_u16(vandq_u16(one_byte_bytemask, onemask), + vandq_u16(one_or_two_bytes_bytemask, twomask)); + const uint16_t mask = vaddvq_u16(combined); + // The following fast path may or may not be beneficial. + /*if(mask == 0) { + // We only have three-byte code units. Use fast path. + const uint8x16_t shuffle = {2,3,1,6,7,5,10,11,9,14,15,13,0,0,0,0}; + const uint8x16_t utf8_0 = vqtbl1q_u8(out0, shuffle); + const uint8x16_t utf8_1 = vqtbl1q_u8(out1, shuffle); + vst1q_u8(utf8_output, utf8_0); + utf8_output += 12; + vst1q_u8(utf8_output, utf8_1); + utf8_output += 12; + buf += 8; + continue; + }*/ + const uint8_t mask0 = uint8_t(mask); + + const uint8_t *row0 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; + const uint8x16_t shuffle0 = vld1q_u8(row0 + 1); + const uint8x16_t utf8_0 = vqtbl1q_u8(out0, shuffle0); + + const uint8_t mask1 = static_cast(mask >> 8); + const uint8_t *row1 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; + const uint8x16_t shuffle1 = vld1q_u8(row1 + 1); + const uint8x16_t utf8_1 = vqtbl1q_u8(out1, shuffle1); + + vst1q_u8(utf8_output, utf8_0); + utf8_output += row0[0]; + vst1q_u8(utf8_output, utf8_1); + utf8_output += row1[0]; + + buf += 8; } - } - } - if (src < srcend + equalsigns) { - result r = - scalar::base64::base64_tail_decode(dst, src, srcend - src, options); - if (r.error == error_code::INVALID_BASE64_CHARACTER) { - r.count += size_t(src - srcinit); - return r; + // At least one 32-bit word will produce a surrogate pair in UTF-16 <=> + // will produce four UTF-8 bytes. } else { - r.count += size_t(dst - dstinit); - } - if(r.error == error_code::SUCCESS && equalsigns > 0) { - // additional checks - if((r.count % 3 == 0) || ((r.count % 3) + 1 + equalsigns != 4)) { - r.error = error_code::INVALID_BASE64_CHARACTER; - r.count = equallocation; + // Let us do a scalar fallback. + // It may seem wasteful to use scalar code, but being efficient with SIMD + // in the presence of surrogate pairs may require non-trivial tables. + size_t forward = 15; + size_t k = 0; + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); } + for (; k < forward; k++) { + uint32_t word = buf[k]; + if ((word & 0xFFFFFF80) == 0) { + *utf8_output++ = char(word); + } else if ((word & 0xFFFFF800) == 0) { + *utf8_output++ = char((word >> 6) | 0b11000000); + *utf8_output++ = char((word & 0b111111) | 0b10000000); + } else if ((word & 0xFFFF0000) == 0) { + if (word >= 0xD800 && word <= 0xDFFF) { + return std::make_pair( + result(error_code::SURROGATE, buf - start + k), + reinterpret_cast(utf8_output)); + } + *utf8_output++ = char((word >> 12) | 0b11100000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); + *utf8_output++ = char((word & 0b111111) | 0b10000000); + } else { + if (word > 0x10FFFF) { + return std::make_pair( + result(error_code::TOO_LARGE, buf - start + k), + reinterpret_cast(utf8_output)); + } + *utf8_output++ = char((word >> 18) | 0b11110000); + *utf8_output++ = char(((word >> 12) & 0b111111) | 0b10000000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); + *utf8_output++ = char((word & 0b111111) | 0b10000000); + } + } + buf += k; } - return r; - } - if(equalsigns > 0) { - if((size_t(dst - dstinit) % 3 == 0) || ((size_t(dst - dstinit) % 3) + 1 + equalsigns != 4)) { - return {INVALID_BASE64_CHARACTER, equallocation}; - } - } - return {SUCCESS, size_t(dst - dstinit)}; + } // while + + return std::make_pair(result(error_code::SUCCESS, buf - start), + reinterpret_cast(utf8_output)); } -/* end file src/arm64/arm_base64.cpp */ +/* end file src/arm64/arm_convert_utf32_to_utf8.cpp */ } // unnamed namespace } // namespace arm64 @@ -17113,9 +16514,9 @@ namespace simdutf { namespace arm64 { namespace { -// Walks through a buffer in block-sized increments, loading the last part with spaces -template -struct buf_block_reader { +// Walks through a buffer in block-sized increments, loading the last part with +// spaces +template struct buf_block_reader { public: simdutf_really_inline buf_block_reader(const uint8_t *_buf, size_t _len); simdutf_really_inline size_t block_index(); @@ -17124,14 +16525,16 @@ struct buf_block_reader { /** * Get the last block, padded with spaces. * - * There will always be a last block, with at least 1 byte, unless len == 0 (in which case this - * function fills the buffer with spaces and returns 0. In particular, if len == STEP_SIZE there - * will be 0 full_blocks and 1 remainder block with STEP_SIZE bytes and no spaces for padding. + * There will always be a last block, with at least 1 byte, unless len == 0 + * (in which case this function fills the buffer with spaces and returns 0. In + * particular, if len == STEP_SIZE there will be 0 full_blocks and 1 remainder + * block with STEP_SIZE bytes and no spaces for padding. * * @return the number of effective characters in the last block. */ simdutf_really_inline size_t get_remainder(uint8_t *dst) const; simdutf_really_inline void advance(); + private: const uint8_t *buf; const size_t len; @@ -17140,9 +16543,10 @@ struct buf_block_reader { }; // Routines to print masks and text for debugging bitmask operations -simdutf_unused static char * format_input_text_64(const uint8_t *text) { - static char *buf = reinterpret_cast(malloc(sizeof(simd8x64) + 1)); - for (size_t i=0; i); i++) { +simdutf_unused static char *format_input_text_64(const uint8_t *text) { + static char *buf = + reinterpret_cast(malloc(sizeof(simd8x64) + 1)); + for (size_t i = 0; i < sizeof(simd8x64); i++) { buf[i] = int8_t(text[i]) < ' ' ? '_' : int8_t(text[i]); } buf[sizeof(simd8x64)] = '\0'; @@ -17150,50 +16554,64 @@ simdutf_unused static char * format_input_text_64(const uint8_t *text) { } // Routines to print masks and text for debugging bitmask operations -simdutf_unused static char * format_input_text(const simd8x64& in) { - static char *buf = reinterpret_cast(malloc(sizeof(simd8x64) + 1)); - in.store(reinterpret_cast(buf)); - for (size_t i=0; i); i++) { - if (buf[i] < ' ') { buf[i] = '_'; } +simdutf_unused static char *format_input_text(const simd8x64 &in) { + static char *buf = + reinterpret_cast(malloc(sizeof(simd8x64) + 1)); + in.store(reinterpret_cast(buf)); + for (size_t i = 0; i < sizeof(simd8x64); i++) { + if (buf[i] < ' ') { + buf[i] = '_'; + } } buf[sizeof(simd8x64)] = '\0'; return buf; } -simdutf_unused static char * format_mask(uint64_t mask) { - static char *buf = reinterpret_cast(malloc(64 + 1)); - for (size_t i=0; i<64; i++) { +simdutf_unused static char *format_mask(uint64_t mask) { + static char *buf = reinterpret_cast(malloc(64 + 1)); + for (size_t i = 0; i < 64; i++) { buf[i] = (mask & (size_t(1) << i)) ? 'X' : ' '; } buf[64] = '\0'; return buf; } -template -simdutf_really_inline buf_block_reader::buf_block_reader(const uint8_t *_buf, size_t _len) : buf{_buf}, len{_len}, lenminusstep{len < STEP_SIZE ? 0 : len - STEP_SIZE}, idx{0} {} +template +simdutf_really_inline +buf_block_reader::buf_block_reader(const uint8_t *_buf, size_t _len) + : buf{_buf}, len{_len}, lenminusstep{len < STEP_SIZE ? 0 : len - STEP_SIZE}, + idx{0} {} -template -simdutf_really_inline size_t buf_block_reader::block_index() { return idx; } +template +simdutf_really_inline size_t buf_block_reader::block_index() { + return idx; +} -template +template simdutf_really_inline bool buf_block_reader::has_full_block() const { return idx < lenminusstep; } -template -simdutf_really_inline const uint8_t *buf_block_reader::full_block() const { +template +simdutf_really_inline const uint8_t * +buf_block_reader::full_block() const { return &buf[idx]; } -template -simdutf_really_inline size_t buf_block_reader::get_remainder(uint8_t *dst) const { - if(len == idx) { return 0; } // memcpy(dst, null, 0) will trigger an error with some sanitizers - std::memset(dst, 0x20, STEP_SIZE); // std::memset STEP_SIZE because it is more efficient to write out 8 or 16 bytes at once. +template +simdutf_really_inline size_t +buf_block_reader::get_remainder(uint8_t *dst) const { + if (len == idx) { + return 0; + } // memcpy(dst, null, 0) will trigger an error with some sanitizers + std::memset(dst, 0x20, + STEP_SIZE); // std::memset STEP_SIZE because it is more efficient + // to write out 8 or 16 bytes at once. std::memcpy(dst, buf + idx, len - idx); return len - idx; } -template +template simdutf_really_inline void buf_block_reader::advance() { idx += STEP_SIZE; } @@ -17210,38 +16628,39 @@ namespace utf8_validation { using namespace simd; - simdutf_really_inline simd8 check_special_cases(const simd8 input, const simd8 prev1) { -// Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) -// Bit 1 = Too Long (ASCII followed by continuation) -// Bit 2 = Overlong 3-byte -// Bit 4 = Surrogate -// Bit 5 = Overlong 2-byte -// Bit 7 = Two Continuations - constexpr const uint8_t TOO_SHORT = 1<<0; // 11______ 0_______ - // 11______ 11______ - constexpr const uint8_t TOO_LONG = 1<<1; // 0_______ 10______ - constexpr const uint8_t OVERLONG_3 = 1<<2; // 11100000 100_____ - constexpr const uint8_t SURROGATE = 1<<4; // 11101101 101_____ - constexpr const uint8_t OVERLONG_2 = 1<<5; // 1100000_ 10______ - constexpr const uint8_t TWO_CONTS = 1<<7; // 10______ 10______ - constexpr const uint8_t TOO_LARGE = 1<<3; // 11110100 1001____ - // 11110100 101_____ - // 11110101 1001____ - // 11110101 101_____ - // 1111011_ 1001____ - // 1111011_ 101_____ - // 11111___ 1001____ - // 11111___ 101_____ - constexpr const uint8_t TOO_LARGE_1000 = 1<<6; - // 11110101 1000____ - // 1111011_ 1000____ - // 11111___ 1000____ - constexpr const uint8_t OVERLONG_4 = 1<<6; // 11110000 1000____ - - const simd8 byte_1_high = prev1.shr<4>().lookup_16( +simdutf_really_inline simd8 +check_special_cases(const simd8 input, const simd8 prev1) { + // Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) + // Bit 1 = Too Long (ASCII followed by continuation) + // Bit 2 = Overlong 3-byte + // Bit 4 = Surrogate + // Bit 5 = Overlong 2-byte + // Bit 7 = Two Continuations + constexpr const uint8_t TOO_SHORT = 1 << 0; // 11______ 0_______ + // 11______ 11______ + constexpr const uint8_t TOO_LONG = 1 << 1; // 0_______ 10______ + constexpr const uint8_t OVERLONG_3 = 1 << 2; // 11100000 100_____ + constexpr const uint8_t SURROGATE = 1 << 4; // 11101101 101_____ + constexpr const uint8_t OVERLONG_2 = 1 << 5; // 1100000_ 10______ + constexpr const uint8_t TWO_CONTS = 1 << 7; // 10______ 10______ + constexpr const uint8_t TOO_LARGE = 1 << 3; // 11110100 1001____ + // 11110100 101_____ + // 11110101 1001____ + // 11110101 101_____ + // 1111011_ 1001____ + // 1111011_ 101_____ + // 11111___ 1001____ + // 11111___ 101_____ + constexpr const uint8_t TOO_LARGE_1000 = 1 << 6; + // 11110101 1000____ + // 1111011_ 1000____ + // 11111___ 1000____ + constexpr const uint8_t OVERLONG_4 = 1 << 6; // 11110000 1000____ + + const simd8 byte_1_high = prev1.shr<4>().lookup_16( // 0_______ ________ - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, // 10______ ________ TWO_CONTS, TWO_CONTS, TWO_CONTS, TWO_CONTS, // 1100____ ________ @@ -17251,137 +16670,173 @@ using namespace simd; // 1110____ ________ TOO_SHORT | OVERLONG_3 | SURROGATE, // 1111____ ________ - TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4 - ); - constexpr const uint8_t CARRY = TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . - const simd8 byte_1_low = (prev1 & 0x0F).lookup_16( - // ____0000 ________ - CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, - // ____0001 ________ - CARRY | OVERLONG_2, - // ____001_ ________ - CARRY, - CARRY, - - // ____0100 ________ - CARRY | TOO_LARGE, - // ____0101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____011_ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - - // ____1___ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____1101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000 - ); - const simd8 byte_2_high = input.shr<4>().lookup_16( + TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4); + constexpr const uint8_t CARRY = + TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . + const simd8 byte_1_low = + (prev1 & 0x0F) + .lookup_16( + // ____0000 ________ + CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, + // ____0001 ________ + CARRY | OVERLONG_2, + // ____001_ ________ + CARRY, CARRY, + + // ____0100 ________ + CARRY | TOO_LARGE, + // ____0101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____011_ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + + // ____1___ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____1101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000); + const simd8 byte_2_high = input.shr<4>().lookup_16( // ________ 0_______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, // ________ 1000____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | OVERLONG_4, + TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | + OVERLONG_4, // ________ 1001____ TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE, // ________ 101_____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, // ________ 11______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT - ); - return (byte_1_high & byte_1_low & byte_2_high); - } - simdutf_really_inline simd8 check_multibyte_lengths(const simd8 input, - const simd8 prev_input, const simd8 sc) { - simd8 prev2 = input.prev<2>(prev_input); - simd8 prev3 = input.prev<3>(prev_input); - simd8 must23 = simd8(must_be_2_3_continuation(prev2, prev3)); - simd8 must23_80 = must23 & uint8_t(0x80); - return must23_80 ^ sc; - } + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT); + return (byte_1_high & byte_1_low & byte_2_high); +} +simdutf_really_inline simd8 +check_multibyte_lengths(const simd8 input, + const simd8 prev_input, + const simd8 sc) { + simd8 prev2 = input.prev<2>(prev_input); + simd8 prev3 = input.prev<3>(prev_input); + simd8 must23 = + simd8(must_be_2_3_continuation(prev2, prev3)); + simd8 must23_80 = must23 & uint8_t(0x80); + return must23_80 ^ sc; +} + +// +// Return nonzero if there are incomplete multibyte characters at the end of the +// block: e.g. if there is a 4-byte character, but it is 3 bytes from the end. +// +simdutf_really_inline simd8 is_incomplete(const simd8 input) { + // If the previous input's last 3 bytes match this, they're too short (they + // ended at EOF): + // ... 1111____ 111_____ 11______ + static const uint8_t max_array[32] = {255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 0b11110000u - 1, + 0b11100000u - 1, + 0b11000000u - 1}; + const simd8 max_value( + &max_array[sizeof(max_array) - sizeof(simd8)]); + return input.gt_bits(max_value); +} + +struct utf8_checker { + // If this is nonzero, there has been a UTF-8 error. + simd8 error; + // The last input we received + simd8 prev_input_block; + // Whether the last input we received was incomplete (used for ASCII fast + // path) + simd8 prev_incomplete; // - // Return nonzero if there are incomplete multibyte characters at the end of the block: - // e.g. if there is a 4-byte character, but it is 3 bytes from the end. + // Check whether the current bytes are valid UTF-8. // - simdutf_really_inline simd8 is_incomplete(const simd8 input) { - // If the previous input's last 3 bytes match this, they're too short (they ended at EOF): - // ... 1111____ 111_____ 11______ - static const uint8_t max_array[32] = { - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0b11110000u-1, 0b11100000u-1, 0b11000000u-1 - }; - const simd8 max_value(&max_array[sizeof(max_array)-sizeof(simd8)]); - return input.gt_bits(max_value); - } - - struct utf8_checker { - // If this is nonzero, there has been a UTF-8 error. - simd8 error; - // The last input we received - simd8 prev_input_block; - // Whether the last input we received was incomplete (used for ASCII fast path) - simd8 prev_incomplete; - - // - // Check whether the current bytes are valid UTF-8. - // - simdutf_really_inline void check_utf8_bytes(const simd8 input, const simd8 prev_input) { - // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ lead bytes - // (2, 3, 4-byte leads become large positive numbers instead of small negative numbers) - simd8 prev1 = input.prev<1>(prev_input); - simd8 sc = check_special_cases(input, prev1); - this->error |= check_multibyte_lengths(input, prev_input, sc); - } - - // The only problem that can happen at EOF is that a multibyte character is too short - // or a byte value too large in the last bytes: check_special_cases only checks for bytes - // too large in the first of two bytes. - simdutf_really_inline void check_eof() { - // If the previous block had incomplete UTF-8 characters at the end, an ASCII block can't - // possibly finish them. + simdutf_really_inline void check_utf8_bytes(const simd8 input, + const simd8 prev_input) { + // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ + // lead bytes (2, 3, 4-byte leads become large positive numbers instead of + // small negative numbers) + simd8 prev1 = input.prev<1>(prev_input); + simd8 sc = check_special_cases(input, prev1); + this->error |= check_multibyte_lengths(input, prev_input, sc); + } + + // The only problem that can happen at EOF is that a multibyte character is + // too short or a byte value too large in the last bytes: check_special_cases + // only checks for bytes too large in the first of two bytes. + simdutf_really_inline void check_eof() { + // If the previous block had incomplete UTF-8 characters at the end, an + // ASCII block can't possibly finish them. + this->error |= this->prev_incomplete; + } + + simdutf_really_inline void check_next_input(const simd8x64 &input) { + if (simdutf_likely(is_ascii(input))) { this->error |= this->prev_incomplete; - } - - simdutf_really_inline void check_next_input(const simd8x64& input) { - if(simdutf_likely(is_ascii(input))) { - this->error |= this->prev_incomplete; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], this->prev_input_block); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], this->prev_input_block); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - this->prev_incomplete = is_incomplete(input.chunks[simd8x64::NUM_CHUNKS-1]); - this->prev_input_block = input.chunks[simd8x64::NUM_CHUNKS-1]; - + } else { + // you might think that a for-loop would work, but under Visual Studio, it + // is not good enough. + static_assert((simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], this->prev_input_block); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], this->prev_input_block); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); } + this->prev_incomplete = + is_incomplete(input.chunks[simd8x64::NUM_CHUNKS - 1]); + this->prev_input_block = input.chunks[simd8x64::NUM_CHUNKS - 1]; } + } - // do not forget to call check_eof! - simdutf_really_inline bool errors() const { - return this->error.any_bits_set_anywhere(); - } + // do not forget to call check_eof! + simdutf_really_inline bool errors() const { + return this->error.any_bits_set_anywhere(); + } - }; // struct utf8_checker +}; // struct utf8_checker } // namespace utf8_validation using utf8_validation::utf8_checker; @@ -17399,97 +16854,109 @@ namespace utf8_validation { /** * Validates that the string is actual UTF-8. */ -template -bool generic_validate_utf8(const uint8_t * input, size_t length) { - checker c{}; - buf_block_reader<64> reader(input, length); - while (reader.has_full_block()) { - simd::simd8x64 in(reader.full_block()); - c.check_next_input(in); - reader.advance(); - } - uint8_t block[64]{}; - reader.get_remainder(block); - simd::simd8x64 in(block); +template +bool generic_validate_utf8(const uint8_t *input, size_t length) { + checker c{}; + buf_block_reader<64> reader(input, length); + while (reader.has_full_block()) { + simd::simd8x64 in(reader.full_block()); c.check_next_input(in); reader.advance(); - c.check_eof(); - return !c.errors(); + } + uint8_t block[64]{}; + reader.get_remainder(block); + simd::simd8x64 in(block); + c.check_next_input(in); + reader.advance(); + c.check_eof(); + return !c.errors(); } -bool generic_validate_utf8(const char * input, size_t length) { - return generic_validate_utf8(reinterpret_cast(input),length); +bool generic_validate_utf8(const char *input, size_t length) { + return generic_validate_utf8( + reinterpret_cast(input), length); } /** * Validates that the string is actual UTF-8 and stops on errors. */ -template -result generic_validate_utf8_with_errors(const uint8_t * input, size_t length) { - checker c{}; - buf_block_reader<64> reader(input, length); - size_t count{0}; - while (reader.has_full_block()) { - simd::simd8x64 in(reader.full_block()); - c.check_next_input(in); - if(c.errors()) { - if (count != 0) { count--; } // Sometimes the error is only detected in the next chunk - result res = scalar::utf8::rewind_and_validate_with_errors(reinterpret_cast(input), reinterpret_cast(input + count), length - count); - res.count += count; - return res; - } - reader.advance(); - count += 64; - } - uint8_t block[64]{}; - reader.get_remainder(block); - simd::simd8x64 in(block); +template +result generic_validate_utf8_with_errors(const uint8_t *input, size_t length) { + checker c{}; + buf_block_reader<64> reader(input, length); + size_t count{0}; + while (reader.has_full_block()) { + simd::simd8x64 in(reader.full_block()); c.check_next_input(in); - reader.advance(); - c.check_eof(); if (c.errors()) { - if (count != 0) { count--; } // Sometimes the error is only detected in the next chunk - result res = scalar::utf8::rewind_and_validate_with_errors(reinterpret_cast(input), reinterpret_cast(input) + count, length - count); + if (count != 0) { + count--; + } // Sometimes the error is only detected in the next chunk + result res = scalar::utf8::rewind_and_validate_with_errors( + reinterpret_cast(input), + reinterpret_cast(input + count), length - count); res.count += count; return res; - } else { - return result(error_code::SUCCESS, length); } + reader.advance(); + count += 64; + } + uint8_t block[64]{}; + reader.get_remainder(block); + simd::simd8x64 in(block); + c.check_next_input(in); + reader.advance(); + c.check_eof(); + if (c.errors()) { + if (count != 0) { + count--; + } // Sometimes the error is only detected in the next chunk + result res = scalar::utf8::rewind_and_validate_with_errors( + reinterpret_cast(input), + reinterpret_cast(input) + count, length - count); + res.count += count; + return res; + } else { + return result(error_code::SUCCESS, length); + } } -result generic_validate_utf8_with_errors(const char * input, size_t length) { - return generic_validate_utf8_with_errors(reinterpret_cast(input),length); +result generic_validate_utf8_with_errors(const char *input, size_t length) { + return generic_validate_utf8_with_errors( + reinterpret_cast(input), length); } -template -bool generic_validate_ascii(const uint8_t * input, size_t length) { - buf_block_reader<64> reader(input, length); - uint8_t blocks[64]{}; - simd::simd8x64 running_or(blocks); - while (reader.has_full_block()) { - simd::simd8x64 in(reader.full_block()); - running_or |= in; - reader.advance(); - } - uint8_t block[64]{}; - reader.get_remainder(block); - simd::simd8x64 in(block); +template +bool generic_validate_ascii(const uint8_t *input, size_t length) { + buf_block_reader<64> reader(input, length); + uint8_t blocks[64]{}; + simd::simd8x64 running_or(blocks); + while (reader.has_full_block()) { + simd::simd8x64 in(reader.full_block()); running_or |= in; - return running_or.is_ascii(); + reader.advance(); + } + uint8_t block[64]{}; + reader.get_remainder(block); + simd::simd8x64 in(block); + running_or |= in; + return running_or.is_ascii(); } -bool generic_validate_ascii(const char * input, size_t length) { - return generic_validate_ascii(reinterpret_cast(input),length); +bool generic_validate_ascii(const char *input, size_t length) { + return generic_validate_ascii( + reinterpret_cast(input), length); } -template -result generic_validate_ascii_with_errors(const uint8_t * input, size_t length) { +template +result generic_validate_ascii_with_errors(const uint8_t *input, size_t length) { buf_block_reader<64> reader(input, length); size_t count{0}; while (reader.has_full_block()) { simd::simd8x64 in(reader.full_block()); if (!in.is_ascii()) { - result res = scalar::ascii::validate_with_errors(reinterpret_cast(input + count), length - count); + result res = scalar::ascii::validate_with_errors( + reinterpret_cast(input + count), length - count); return result(res.error, count + res.count); } reader.advance(); @@ -17500,15 +16967,17 @@ result generic_validate_ascii_with_errors(const uint8_t * input, size_t length) reader.get_remainder(block); simd::simd8x64 in(block); if (!in.is_ascii()) { - result res = scalar::ascii::validate_with_errors(reinterpret_cast(input + count), length - count); + result res = scalar::ascii::validate_with_errors( + reinterpret_cast(input + count), length - count); return result(res.error, count + res.count); } else { return result(error_code::SUCCESS, length); } } -result generic_validate_ascii_with_errors(const char * input, size_t length) { - return generic_validate_ascii_with_errors(reinterpret_cast(input),length); +result generic_validate_ascii_with_errors(const char *input, size_t length) { + return generic_validate_ascii_with_errors( + reinterpret_cast(input), length); } } // namespace utf8_validation @@ -17517,122 +16986,47 @@ result generic_validate_ascii_with_errors(const char * input, size_t length) { } // namespace simdutf /* end file src/generic/utf8_validation/utf8_validator.h */ // transcoding from UTF-8 to UTF-16 -/* begin file src/generic/utf8_to_utf16/valid_utf8_to_utf16.h */ - - -namespace simdutf { -namespace arm64 { -namespace { -namespace utf8_to_utf16 { - -using namespace simd; - -template -simdutf_warn_unused size_t convert_valid(const char* input, size_t size, - char16_t* utf16_output) noexcept { - // The implementation is not specific to haswell and should be moved to the generic directory. - size_t pos = 0; - char16_t* start{utf16_output}; - const size_t safety_margin = 16; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - // this loop could be unrolled further. For example, we could process the mask - // far more than 64 bytes. - simd8x64 in(reinterpret_cast(input + pos)); - if(in.is_ascii()) { - in.store_ascii_as_utf16(utf16_output); - utf16_output += 64; - pos += 64; - } else { - // Slow path. We hope that the compiler will recognize that this is a slow path. - // Anything that is not a continuation mask is a 'leading byte', that is, the - // start of a new code point. - uint64_t utf8_continuation_mask = in.lt(-65 + 1); - // -65 is 0b10111111 in two-complement's, so largest possible continuation byte - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - // The *start* of code points is not so useful, rather, we want the *end* of code points. - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times when using solely - // the slow/regular path, and at least four times if there are fast paths. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - // - // Thus we may allow convert_masked_utf8_to_utf16 to process - // more bytes at a time under a fast-path mode where 16 bytes - // are consumed at once (e.g., when encountering ASCII). - size_t consumed = convert_masked_utf8_to_utf16(input + pos, - utf8_end_of_code_point_mask, utf16_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. - } - } - utf16_output += scalar::utf8_to_utf16::convert_valid(input + pos, size - pos, utf16_output); - return utf16_output - start; -} - -} // namespace utf8_to_utf16 -} // unnamed namespace -} // namespace arm64 -} // namespace simdutf -/* end file src/generic/utf8_to_utf16/valid_utf8_to_utf16.h */ /* begin file src/generic/utf8_to_utf16/utf8_to_utf16.h */ - namespace simdutf { namespace arm64 { namespace { namespace utf8_to_utf16 { using namespace simd; - - simdutf_really_inline simd8 check_special_cases(const simd8 input, const simd8 prev1) { -// Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) -// Bit 1 = Too Long (ASCII followed by continuation) -// Bit 2 = Overlong 3-byte -// Bit 4 = Surrogate -// Bit 5 = Overlong 2-byte -// Bit 7 = Two Continuations - constexpr const uint8_t TOO_SHORT = 1<<0; // 11______ 0_______ - // 11______ 11______ - constexpr const uint8_t TOO_LONG = 1<<1; // 0_______ 10______ - constexpr const uint8_t OVERLONG_3 = 1<<2; // 11100000 100_____ - constexpr const uint8_t SURROGATE = 1<<4; // 11101101 101_____ - constexpr const uint8_t OVERLONG_2 = 1<<5; // 1100000_ 10______ - constexpr const uint8_t TWO_CONTS = 1<<7; // 10______ 10______ - constexpr const uint8_t TOO_LARGE = 1<<3; // 11110100 1001____ - // 11110100 101_____ - // 11110101 1001____ - // 11110101 101_____ - // 1111011_ 1001____ - // 1111011_ 101_____ - // 11111___ 1001____ - // 11111___ 101_____ - constexpr const uint8_t TOO_LARGE_1000 = 1<<6; - // 11110101 1000____ - // 1111011_ 1000____ - // 11111___ 1000____ - constexpr const uint8_t OVERLONG_4 = 1<<6; // 11110000 1000____ - - const simd8 byte_1_high = prev1.shr<4>().lookup_16( +simdutf_really_inline simd8 +check_special_cases(const simd8 input, const simd8 prev1) { + // Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) + // Bit 1 = Too Long (ASCII followed by continuation) + // Bit 2 = Overlong 3-byte + // Bit 4 = Surrogate + // Bit 5 = Overlong 2-byte + // Bit 7 = Two Continuations + constexpr const uint8_t TOO_SHORT = 1 << 0; // 11______ 0_______ + // 11______ 11______ + constexpr const uint8_t TOO_LONG = 1 << 1; // 0_______ 10______ + constexpr const uint8_t OVERLONG_3 = 1 << 2; // 11100000 100_____ + constexpr const uint8_t SURROGATE = 1 << 4; // 11101101 101_____ + constexpr const uint8_t OVERLONG_2 = 1 << 5; // 1100000_ 10______ + constexpr const uint8_t TWO_CONTS = 1 << 7; // 10______ 10______ + constexpr const uint8_t TOO_LARGE = 1 << 3; // 11110100 1001____ + // 11110100 101_____ + // 11110101 1001____ + // 11110101 101_____ + // 1111011_ 1001____ + // 1111011_ 101_____ + // 11111___ 1001____ + // 11111___ 101_____ + constexpr const uint8_t TOO_LARGE_1000 = 1 << 6; + // 11110101 1000____ + // 1111011_ 1000____ + // 11111___ 1000____ + constexpr const uint8_t OVERLONG_4 = 1 << 6; // 11110000 1000____ + + const simd8 byte_1_high = prev1.shr<4>().lookup_16( // 0_______ ________ - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, // 10______ ________ TWO_CONTS, TWO_CONTS, TWO_CONTS, TWO_CONTS, // 1100____ ________ @@ -17642,352 +17036,410 @@ using namespace simd; // 1110____ ________ TOO_SHORT | OVERLONG_3 | SURROGATE, // 1111____ ________ - TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4 - ); - constexpr const uint8_t CARRY = TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . - const simd8 byte_1_low = (prev1 & 0x0F).lookup_16( - // ____0000 ________ - CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, - // ____0001 ________ - CARRY | OVERLONG_2, - // ____001_ ________ - CARRY, - CARRY, - - // ____0100 ________ - CARRY | TOO_LARGE, - // ____0101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____011_ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - - // ____1___ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____1101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000 - ); - const simd8 byte_2_high = input.shr<4>().lookup_16( + TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4); + constexpr const uint8_t CARRY = + TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . + const simd8 byte_1_low = + (prev1 & 0x0F) + .lookup_16( + // ____0000 ________ + CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, + // ____0001 ________ + CARRY | OVERLONG_2, + // ____001_ ________ + CARRY, CARRY, + + // ____0100 ________ + CARRY | TOO_LARGE, + // ____0101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____011_ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + + // ____1___ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____1101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000); + const simd8 byte_2_high = input.shr<4>().lookup_16( // ________ 0_______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, // ________ 1000____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | OVERLONG_4, + TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | + OVERLONG_4, // ________ 1001____ TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE, // ________ 101_____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, // ________ 11______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT - ); - return (byte_1_high & byte_1_low & byte_2_high); - } - simdutf_really_inline simd8 check_multibyte_lengths(const simd8 input, - const simd8 prev_input, const simd8 sc) { - simd8 prev2 = input.prev<2>(prev_input); - simd8 prev3 = input.prev<3>(prev_input); - simd8 must23 = simd8(must_be_2_3_continuation(prev2, prev3)); - simd8 must23_80 = must23 & uint8_t(0x80); - return must23_80 ^ sc; - } - - - struct validating_transcoder { - // If this is nonzero, there has been a UTF-8 error. - simd8 error; - - validating_transcoder() : error(uint8_t(0)) {} - // - // Check whether the current bytes are valid UTF-8. - // - simdutf_really_inline void check_utf8_bytes(const simd8 input, const simd8 prev_input) { - // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ lead bytes - // (2, 3, 4-byte leads become large positive numbers instead of small negative numbers) - simd8 prev1 = input.prev<1>(prev_input); - simd8 sc = check_special_cases(input, prev1); - this->error |= check_multibyte_lengths(input, prev_input, sc); - } - - - template - simdutf_really_inline size_t convert(const char* in, size_t size, char16_t* utf16_output) { - size_t pos = 0; - char16_t* start{utf16_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 bytes when calling convert_masked_utf8_to_utf16. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 8 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); - } - // If the input is long enough, then we have that margin-1 is the eight last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store_ascii_as_utf16(utf16_output); - utf16_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - auto zero = simd8{uint8_t(0)}; - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - if(utf8_continuation_mask & 1) { - return 0; // error - } - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_utf16(in + pos, - utf8_end_of_code_point_mask, utf16_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT); + return (byte_1_high & byte_1_low & byte_2_high); +} +simdutf_really_inline simd8 +check_multibyte_lengths(const simd8 input, + const simd8 prev_input, + const simd8 sc) { + simd8 prev2 = input.prev<2>(prev_input); + simd8 prev3 = input.prev<3>(prev_input); + simd8 must23 = + simd8(must_be_2_3_continuation(prev2, prev3)); + simd8 must23_80 = must23 & uint8_t(0x80); + return must23_80 ^ sc; +} + +struct validating_transcoder { + // If this is nonzero, there has been a UTF-8 error. + simd8 error; + + validating_transcoder() : error(uint8_t(0)) {} + // + // Check whether the current bytes are valid UTF-8. + // + simdutf_really_inline void check_utf8_bytes(const simd8 input, + const simd8 prev_input) { + // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ + // lead bytes (2, 3, 4-byte leads become large positive numbers instead of + // small negative numbers) + simd8 prev1 = input.prev<1>(prev_input); + simd8 sc = check_special_cases(input, prev1); + this->error |= check_multibyte_lengths(input, prev_input, sc); + } + + template + simdutf_really_inline size_t convert(const char *in, size_t size, + char16_t *utf16_output) { + size_t pos = 0; + char16_t *start{utf16_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 bytes when calling convert_masked_utf8_to_utf16. If you skip the + // last 16 bytes, and if the data is valid, then it is entirely safe because + // 16 UTF-8 bytes generate much more than 8 bytes. However, you cannot + // generally assume that you have valid UTF-8 input, so we are going to go + // back from the end counting 8 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 8; margin--) { + leading_byte += (int8_t(in[margin - 1]) > -65); + } + // If the input is long enough, then we have that margin-1 is the eight last + // leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store_ascii_as_utf16(utf16_output); + utf16_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, + // it is not good enough. + static_assert( + (simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + auto zero = simd8{uint8_t(0)}; + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); } - } - if(errors()) { return 0; } - if(pos < size) { - size_t howmany = scalar::utf8_to_utf16::convert(in + pos, size - pos, utf16_output); - if(howmany == 0) { return 0; } - utf16_output += howmany; - } - return utf16_output - start; - } - - template - simdutf_really_inline result convert_with_errors(const char* in, size_t size, char16_t* utf16_output) { - size_t pos = 0; - char16_t* start{utf16_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 bytes when calling convert_masked_utf8_to_utf16. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 8 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); - } - // If the input is long enough, then we have that margin-1 is the eight last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store_ascii_as_utf16(utf16_output); - utf16_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - auto zero = simd8{uint8_t(0)}; - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - if (errors() || (utf8_continuation_mask & 1)) { - // rewind_and_convert_with_errors will seek a potential error from in+pos onward, - // with the ability to go back up to pos bytes, and read size-pos bytes forward. - result res = scalar::utf8_to_utf16::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf16_output); - res.count += pos; - return res; - } - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_utf16(in + pos, - utf8_end_of_code_point_mask, utf16_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + if (utf8_continuation_mask & 1) { + return 0; // error + } + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_utf16( + in + pos, utf8_end_of_code_point_mask, utf16_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. } - if(errors()) { - // rewind_and_convert_with_errors will seek a potential error from in+pos onward, - // with the ability to go back up to pos bytes, and read size-pos bytes forward. - result res = scalar::utf8_to_utf16::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf16_output); - res.count += pos; - return res; + } + if (errors()) { + return 0; + } + if (pos < size) { + size_t howmany = scalar::utf8_to_utf16::convert( + in + pos, size - pos, utf16_output); + if (howmany == 0) { + return 0; } - if(pos < size) { - // rewind_and_convert_with_errors will seek a potential error from in+pos onward, - // with the ability to go back up to pos bytes, and read size-pos bytes forward. - result res = scalar::utf8_to_utf16::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf16_output); - if (res.error) { // In case of error, we want the error position + utf16_output += howmany; + } + return utf16_output - start; + } + + template + simdutf_really_inline result convert_with_errors(const char *in, size_t size, + char16_t *utf16_output) { + size_t pos = 0; + char16_t *start{utf16_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 bytes when calling convert_masked_utf8_to_utf16. If you skip the + // last 16 bytes, and if the data is valid, then it is entirely safe because + // 16 UTF-8 bytes generate much more than 8 bytes. However, you cannot + // generally assume that you have valid UTF-8 input, so we are going to go + // back from the end counting 8 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 8; margin--) { + leading_byte += (int8_t(in[margin - 1]) > -65); + } + // If the input is long enough, then we have that margin-1 is the eight last + // leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store_ascii_as_utf16(utf16_output); + utf16_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, + // it is not good enough. + static_assert( + (simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + auto zero = simd8{uint8_t(0)}; + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); + } + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + if (errors() || (utf8_continuation_mask & 1)) { + // rewind_and_convert_with_errors will seek a potential error from + // in+pos onward, with the ability to go back up to pos bytes, and + // read size-pos bytes forward. + result res = + scalar::utf8_to_utf16::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf16_output); res.count += pos; return res; - } else { // In case of success, we want the number of word written - utf16_output += res.count; } + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_utf16( + in + pos, utf8_end_of_code_point_mask, utf16_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; + } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. + } + } + if (errors()) { + // rewind_and_convert_with_errors will seek a potential error from in+pos + // onward, with the ability to go back up to pos bytes, and read size-pos + // bytes forward. + result res = + scalar::utf8_to_utf16::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf16_output); + res.count += pos; + return res; + } + if (pos < size) { + // rewind_and_convert_with_errors will seek a potential error from in+pos + // onward, with the ability to go back up to pos bytes, and read size-pos + // bytes forward. + result res = + scalar::utf8_to_utf16::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf16_output); + if (res.error) { // In case of error, we want the error position + res.count += pos; + return res; + } else { // In case of success, we want the number of word written + utf16_output += res.count; } - return result(error_code::SUCCESS, utf16_output - start); } + return result(error_code::SUCCESS, utf16_output - start); + } - simdutf_really_inline bool errors() const { - return this->error.any_bits_set_anywhere(); - } + simdutf_really_inline bool errors() const { + return this->error.any_bits_set_anywhere(); + } - }; // struct utf8_checker -} // utf8_to_utf16 namespace +}; // struct utf8_checker +} // namespace utf8_to_utf16 } // unnamed namespace } // namespace arm64 } // namespace simdutf /* end file src/generic/utf8_to_utf16/utf8_to_utf16.h */ -// transcoding from UTF-8 to UTF-32 -/* begin file src/generic/utf8_to_utf32/valid_utf8_to_utf32.h */ +/* begin file src/generic/utf8_to_utf16/valid_utf8_to_utf16.h */ namespace simdutf { namespace arm64 { namespace { -namespace utf8_to_utf32 { +namespace utf8_to_utf16 { using namespace simd; - -simdutf_warn_unused size_t convert_valid(const char* input, size_t size, - char32_t* utf32_output) noexcept { +template +simdutf_warn_unused size_t convert_valid(const char *input, size_t size, + char16_t *utf16_output) noexcept { + // The implementation is not specific to haswell and should be moved to the + // generic directory. size_t pos = 0; - char32_t* start{utf32_output}; + char16_t *start{utf16_output}; const size_t safety_margin = 16; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { + while (pos + 64 + safety_margin <= size) { + // this loop could be unrolled further. For example, we could process the + // mask far more than 64 bytes. simd8x64 in(reinterpret_cast(input + pos)); - if(in.is_ascii()) { - in.store_ascii_as_utf32(utf32_output); - utf32_output += 64; + if (in.is_ascii()) { + in.store_ascii_as_utf16(utf16_output); + utf16_output += 64; pos += 64; } else { - // -65 is 0b10111111 in two-complement's, so largest possible continuation byte - uint64_t utf8_continuation_mask = in.lt(-65 + 1); - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - size_t max_starting_point = (pos + 64) - 12; - while(pos < max_starting_point) { - size_t consumed = convert_masked_utf8_to_utf32(input + pos, - utf8_end_of_code_point_mask, utf32_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; + // Slow path. We hope that the compiler will recognize that this is a slow + // path. Anything that is not a continuation mask is a 'leading byte', + // that is, the start of a new code point. + uint64_t utf8_continuation_mask = in.lt(-65 + 1); + // -65 is 0b10111111 in two-complement's, so largest possible continuation + // byte + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + // The *start* of code points is not so useful, rather, we want the *end* + // of code points. + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times when using solely + // the slow/regular path, and at least four times if there are fast paths. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + // + // Thus we may allow convert_masked_utf8_to_utf16 to process + // more bytes at a time under a fast-path mode where 16 bytes + // are consumed at once (e.g., when encountering ASCII). + size_t consumed = convert_masked_utf8_to_utf16( + input + pos, utf8_end_of_code_point_mask, utf16_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. } } - utf32_output += scalar::utf8_to_utf32::convert_valid(input + pos, size - pos, utf32_output); - return utf32_output - start; + utf16_output += scalar::utf8_to_utf16::convert_valid( + input + pos, size - pos, utf16_output); + return utf16_output - start; } - -} // namespace utf8_to_utf32 +} // namespace utf8_to_utf16 } // unnamed namespace } // namespace arm64 } // namespace simdutf -/* end file src/generic/utf8_to_utf32/valid_utf8_to_utf32.h */ +/* end file src/generic/utf8_to_utf16/valid_utf8_to_utf16.h */ +// transcoding from UTF-8 to UTF-32 /* begin file src/generic/utf8_to_utf32/utf8_to_utf32.h */ - namespace simdutf { namespace arm64 { namespace { namespace utf8_to_utf32 { using namespace simd; - - simdutf_really_inline simd8 check_special_cases(const simd8 input, const simd8 prev1) { -// Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) -// Bit 1 = Too Long (ASCII followed by continuation) -// Bit 2 = Overlong 3-byte -// Bit 4 = Surrogate -// Bit 5 = Overlong 2-byte -// Bit 7 = Two Continuations - constexpr const uint8_t TOO_SHORT = 1<<0; // 11______ 0_______ - // 11______ 11______ - constexpr const uint8_t TOO_LONG = 1<<1; // 0_______ 10______ - constexpr const uint8_t OVERLONG_3 = 1<<2; // 11100000 100_____ - constexpr const uint8_t SURROGATE = 1<<4; // 11101101 101_____ - constexpr const uint8_t OVERLONG_2 = 1<<5; // 1100000_ 10______ - constexpr const uint8_t TWO_CONTS = 1<<7; // 10______ 10______ - constexpr const uint8_t TOO_LARGE = 1<<3; // 11110100 1001____ - // 11110100 101_____ - // 11110101 1001____ - // 11110101 101_____ - // 1111011_ 1001____ - // 1111011_ 101_____ - // 11111___ 1001____ - // 11111___ 101_____ - constexpr const uint8_t TOO_LARGE_1000 = 1<<6; - // 11110101 1000____ - // 1111011_ 1000____ - // 11111___ 1000____ - constexpr const uint8_t OVERLONG_4 = 1<<6; // 11110000 1000____ - - const simd8 byte_1_high = prev1.shr<4>().lookup_16( +simdutf_really_inline simd8 +check_special_cases(const simd8 input, const simd8 prev1) { + // Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) + // Bit 1 = Too Long (ASCII followed by continuation) + // Bit 2 = Overlong 3-byte + // Bit 4 = Surrogate + // Bit 5 = Overlong 2-byte + // Bit 7 = Two Continuations + constexpr const uint8_t TOO_SHORT = 1 << 0; // 11______ 0_______ + // 11______ 11______ + constexpr const uint8_t TOO_LONG = 1 << 1; // 0_______ 10______ + constexpr const uint8_t OVERLONG_3 = 1 << 2; // 11100000 100_____ + constexpr const uint8_t SURROGATE = 1 << 4; // 11101101 101_____ + constexpr const uint8_t OVERLONG_2 = 1 << 5; // 1100000_ 10______ + constexpr const uint8_t TWO_CONTS = 1 << 7; // 10______ 10______ + constexpr const uint8_t TOO_LARGE = 1 << 3; // 11110100 1001____ + // 11110100 101_____ + // 11110101 1001____ + // 11110101 101_____ + // 1111011_ 1001____ + // 1111011_ 101_____ + // 11111___ 1001____ + // 11111___ 101_____ + constexpr const uint8_t TOO_LARGE_1000 = 1 << 6; + // 11110101 1000____ + // 1111011_ 1000____ + // 11111___ 1000____ + constexpr const uint8_t OVERLONG_4 = 1 << 6; // 11110000 1000____ + + const simd8 byte_1_high = prev1.shr<4>().lookup_16( // 0_______ ________ - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, // 10______ ________ TWO_CONTS, TWO_CONTS, TWO_CONTS, TWO_CONTS, // 1100____ ________ @@ -17997,298 +17449,323 @@ using namespace simd; // 1110____ ________ TOO_SHORT | OVERLONG_3 | SURROGATE, // 1111____ ________ - TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4 - ); - constexpr const uint8_t CARRY = TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . - const simd8 byte_1_low = (prev1 & 0x0F).lookup_16( - // ____0000 ________ - CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, - // ____0001 ________ - CARRY | OVERLONG_2, - // ____001_ ________ - CARRY, - CARRY, - - // ____0100 ________ - CARRY | TOO_LARGE, - // ____0101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____011_ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - - // ____1___ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____1101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000 - ); - const simd8 byte_2_high = input.shr<4>().lookup_16( + TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4); + constexpr const uint8_t CARRY = + TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . + const simd8 byte_1_low = + (prev1 & 0x0F) + .lookup_16( + // ____0000 ________ + CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, + // ____0001 ________ + CARRY | OVERLONG_2, + // ____001_ ________ + CARRY, CARRY, + + // ____0100 ________ + CARRY | TOO_LARGE, + // ____0101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____011_ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + + // ____1___ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____1101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000); + const simd8 byte_2_high = input.shr<4>().lookup_16( // ________ 0_______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, // ________ 1000____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | OVERLONG_4, + TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | + OVERLONG_4, // ________ 1001____ TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE, // ________ 101_____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, // ________ 11______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT - ); - return (byte_1_high & byte_1_low & byte_2_high); - } - simdutf_really_inline simd8 check_multibyte_lengths(const simd8 input, - const simd8 prev_input, const simd8 sc) { - simd8 prev2 = input.prev<2>(prev_input); - simd8 prev3 = input.prev<3>(prev_input); - simd8 must23 = simd8(must_be_2_3_continuation(prev2, prev3)); - simd8 must23_80 = must23 & uint8_t(0x80); - return must23_80 ^ sc; - } - - - struct validating_transcoder { - // If this is nonzero, there has been a UTF-8 error. - simd8 error; - - validating_transcoder() : error(uint8_t(0)) {} - // - // Check whether the current bytes are valid UTF-8. - // - simdutf_really_inline void check_utf8_bytes(const simd8 input, const simd8 prev_input) { - // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ lead bytes - // (2, 3, 4-byte leads become large positive numbers instead of small negative numbers) - simd8 prev1 = input.prev<1>(prev_input); - simd8 sc = check_special_cases(input, prev1); - this->error |= check_multibyte_lengths(input, prev_input, sc); - } - - - - simdutf_really_inline size_t convert(const char* in, size_t size, char32_t* utf32_output) { - size_t pos = 0; - char32_t* start{utf32_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 words when calling convert_masked_utf8_to_utf32. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 16 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); - } - // If the input is long enough, then we have that margin-1 is the fourth last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store_ascii_as_utf32(utf32_output); - utf32_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - auto zero = simd8{uint8_t(0)}; - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - if(utf8_continuation_mask & 1) { - return 0; // we have an error - } - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_utf32(in + pos, - utf8_end_of_code_point_mask, utf32_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT); + return (byte_1_high & byte_1_low & byte_2_high); +} +simdutf_really_inline simd8 +check_multibyte_lengths(const simd8 input, + const simd8 prev_input, + const simd8 sc) { + simd8 prev2 = input.prev<2>(prev_input); + simd8 prev3 = input.prev<3>(prev_input); + simd8 must23 = + simd8(must_be_2_3_continuation(prev2, prev3)); + simd8 must23_80 = must23 & uint8_t(0x80); + return must23_80 ^ sc; +} + +struct validating_transcoder { + // If this is nonzero, there has been a UTF-8 error. + simd8 error; + + validating_transcoder() : error(uint8_t(0)) {} + // + // Check whether the current bytes are valid UTF-8. + // + simdutf_really_inline void check_utf8_bytes(const simd8 input, + const simd8 prev_input) { + // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ + // lead bytes (2, 3, 4-byte leads become large positive numbers instead of + // small negative numbers) + simd8 prev1 = input.prev<1>(prev_input); + simd8 sc = check_special_cases(input, prev1); + this->error |= check_multibyte_lengths(input, prev_input, sc); + } + + simdutf_really_inline size_t convert(const char *in, size_t size, + char32_t *utf32_output) { + size_t pos = 0; + char32_t *start{utf32_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 words when calling convert_masked_utf8_to_utf32. If you skip the + // last 16 bytes, and if the data is valid, then it is entirely safe because + // 16 UTF-8 bytes generate much more than 8 bytes. However, you cannot + // generally assume that you have valid UTF-8 input, so we are going to go + // back from the end counting 16 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 8; margin--) { + leading_byte += (int8_t(in[margin - 1]) > -65); + } + // If the input is long enough, then we have that margin-1 is the fourth + // last leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store_ascii_as_utf32(utf32_output); + utf32_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, + // it is not good enough. + static_assert( + (simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + auto zero = simd8{uint8_t(0)}; + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); } - } - if(errors()) { return 0; } - if(pos < size) { - size_t howmany = scalar::utf8_to_utf32::convert(in + pos, size - pos, utf32_output); - if(howmany == 0) { return 0; } - utf32_output += howmany; - } - return utf32_output - start; - } - - simdutf_really_inline result convert_with_errors(const char* in, size_t size, char32_t* utf32_output) { - size_t pos = 0; - char32_t* start{utf32_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 bytes when calling convert_masked_utf8_to_utf32. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 8 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); - } - // If the input is long enough, then we have that margin-1 is the fourth last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store_ascii_as_utf32(utf32_output); - utf32_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - auto zero = simd8{uint8_t(0)}; - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - if (errors() || (utf8_continuation_mask & 1)) { - result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf32_output); - res.count += pos; - return res; - } - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_utf32(in + pos, - utf8_end_of_code_point_mask, utf32_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + if (utf8_continuation_mask & 1) { + return 0; // we have an error } + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_utf32( + in + pos, utf8_end_of_code_point_mask, utf32_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; + } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. } - if(errors()) { - result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf32_output); - res.count += pos; - return res; + } + if (errors()) { + return 0; + } + if (pos < size) { + size_t howmany = + scalar::utf8_to_utf32::convert(in + pos, size - pos, utf32_output); + if (howmany == 0) { + return 0; } - if(pos < size) { - result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf32_output); - if (res.error) { // In case of error, we want the error position + utf32_output += howmany; + } + return utf32_output - start; + } + + simdutf_really_inline result convert_with_errors(const char *in, size_t size, + char32_t *utf32_output) { + size_t pos = 0; + char32_t *start{utf32_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 bytes when calling convert_masked_utf8_to_utf32. If you skip the + // last 16 bytes, and if the data is valid, then it is entirely safe because + // 16 UTF-8 bytes generate much more than 8 bytes. However, you cannot + // generally assume that you have valid UTF-8 input, so we are going to go + // back from the end counting 8 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 8; margin--) { + leading_byte += (int8_t(in[margin - 1]) > -65); + } + // If the input is long enough, then we have that margin-1 is the fourth + // last leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store_ascii_as_utf32(utf32_output); + utf32_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, + // it is not good enough. + static_assert( + (simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + auto zero = simd8{uint8_t(0)}; + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); + } + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + if (errors() || (utf8_continuation_mask & 1)) { + result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf32_output); res.count += pos; return res; - } else { // In case of success, we want the number of word written - utf32_output += res.count; } + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_utf32( + in + pos, utf8_end_of_code_point_mask, utf32_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; + } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. } - return result(error_code::SUCCESS, utf32_output - start); } - - simdutf_really_inline bool errors() const { - return this->error.any_bits_set_anywhere(); + if (errors()) { + result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf32_output); + res.count += pos; + return res; + } + if (pos < size) { + result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf32_output); + if (res.error) { // In case of error, we want the error position + res.count += pos; + return res; + } else { // In case of success, we want the number of word written + utf32_output += res.count; + } } + return result(error_code::SUCCESS, utf32_output - start); + } - }; // struct utf8_checker -} // utf8_to_utf32 namespace + simdutf_really_inline bool errors() const { + return this->error.any_bits_set_anywhere(); + } + +}; // struct utf8_checker +} // namespace utf8_to_utf32 } // unnamed namespace } // namespace arm64 } // namespace simdutf /* end file src/generic/utf8_to_utf32/utf8_to_utf32.h */ -// other functions -/* begin file src/generic/utf8.h */ +/* begin file src/generic/utf8_to_utf32/valid_utf8_to_utf32.h */ namespace simdutf { namespace arm64 { namespace { -namespace utf8 { +namespace utf8_to_utf32 { using namespace simd; -simdutf_really_inline size_t count_code_points(const char* in, size_t size) { - size_t pos = 0; - size_t count = 0; - for(;pos + 64 <= size; pos += 64) { - simd8x64 input(reinterpret_cast(in + pos)); - uint64_t utf8_continuation_mask = input.gt(-65); - count += count_ones(utf8_continuation_mask); +simdutf_warn_unused size_t convert_valid(const char *input, size_t size, + char32_t *utf32_output) noexcept { + size_t pos = 0; + char32_t *start{utf32_output}; + const size_t safety_margin = 16; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 in(reinterpret_cast(input + pos)); + if (in.is_ascii()) { + in.store_ascii_as_utf32(utf32_output); + utf32_output += 64; + pos += 64; + } else { + // -65 is 0b10111111 in two-complement's, so largest possible continuation + // byte + uint64_t utf8_continuation_mask = in.lt(-65 + 1); + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + size_t max_starting_point = (pos + 64) - 12; + while (pos < max_starting_point) { + size_t consumed = convert_masked_utf8_to_utf32( + input + pos, utf8_end_of_code_point_mask, utf32_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; + } } - return count + scalar::utf8::count_code_points(in + pos, size - pos); + } + utf32_output += scalar::utf8_to_utf32::convert_valid(input + pos, size - pos, + utf32_output); + return utf32_output - start; } -simdutf_really_inline size_t utf16_length_from_utf8(const char* in, size_t size) { - size_t pos = 0; - size_t count = 0; - // This algorithm could no doubt be improved! - for(;pos + 64 <= size; pos += 64) { - simd8x64 input(reinterpret_cast(in + pos)); - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - // We count one word for anything that is not a continuation (so - // leading bytes). - count += 64 - count_ones(utf8_continuation_mask); - int64_t utf8_4byte = input.gteq_unsigned(240); - count += count_ones(utf8_4byte); - } - return count + scalar::utf8::utf16_length_from_utf8(in + pos, size - pos); -} -} // utf8 namespace +} // namespace utf8_to_utf32 } // unnamed namespace } // namespace arm64 } // namespace simdutf -/* end file src/generic/utf8.h */ +/* end file src/generic/utf8_to_utf32/valid_utf8_to_utf32.h */ +// other functions /* begin file src/generic/utf16.h */ namespace simdutf { namespace arm64 { @@ -18296,48 +17773,59 @@ namespace { namespace utf16 { template -simdutf_really_inline size_t count_code_points(const char16_t* in, size_t size) { - size_t pos = 0; - size_t count = 0; - for(;pos < size/32*32; pos += 32) { - simd16x32 input(reinterpret_cast(in + pos)); - if (!match_system(big_endian)) { input.swap_bytes(); } - uint64_t not_pair = input.not_in_range(0xDC00, 0xDFFF); - count += count_ones(not_pair) / 2; +simdutf_really_inline size_t count_code_points(const char16_t *in, + size_t size) { + size_t pos = 0; + size_t count = 0; + for (; pos < size / 32 * 32; pos += 32) { + simd16x32 input(reinterpret_cast(in + pos)); + if (!match_system(big_endian)) { + input.swap_bytes(); } - return count + scalar::utf16::count_code_points(in + pos, size - pos); + uint64_t not_pair = input.not_in_range(0xDC00, 0xDFFF); + count += count_ones(not_pair) / 2; + } + return count + + scalar::utf16::count_code_points(in + pos, size - pos); } template -simdutf_really_inline size_t utf8_length_from_utf16(const char16_t* in, size_t size) { - size_t pos = 0; - size_t count = 0; - // This algorithm could no doubt be improved! - for(;pos < size/32*32; pos += 32) { - simd16x32 input(reinterpret_cast(in + pos)); - if (!match_system(big_endian)) { input.swap_bytes(); } - uint64_t ascii_mask = input.lteq(0x7F); - uint64_t twobyte_mask = input.lteq(0x7FF); - uint64_t not_pair_mask = input.not_in_range(0xD800, 0xDFFF); - - size_t ascii_count = count_ones(ascii_mask) / 2; - size_t twobyte_count = count_ones(twobyte_mask & ~ ascii_mask) / 2; - size_t threebyte_count = count_ones(not_pair_mask & ~ twobyte_mask) / 2; - size_t fourbyte_count = 32 - count_ones(not_pair_mask) / 2; - count += 2 * fourbyte_count + 3 * threebyte_count + 2 * twobyte_count + ascii_count; +simdutf_really_inline size_t utf8_length_from_utf16(const char16_t *in, + size_t size) { + size_t pos = 0; + size_t count = 0; + // This algorithm could no doubt be improved! + for (; pos < size / 32 * 32; pos += 32) { + simd16x32 input(reinterpret_cast(in + pos)); + if (!match_system(big_endian)) { + input.swap_bytes(); } - return count + scalar::utf16::utf8_length_from_utf16(in + pos, size - pos); + uint64_t ascii_mask = input.lteq(0x7F); + uint64_t twobyte_mask = input.lteq(0x7FF); + uint64_t not_pair_mask = input.not_in_range(0xD800, 0xDFFF); + + size_t ascii_count = count_ones(ascii_mask) / 2; + size_t twobyte_count = count_ones(twobyte_mask & ~ascii_mask) / 2; + size_t threebyte_count = count_ones(not_pair_mask & ~twobyte_mask) / 2; + size_t fourbyte_count = 32 - count_ones(not_pair_mask) / 2; + count += 2 * fourbyte_count + 3 * threebyte_count + 2 * twobyte_count + + ascii_count; + } + return count + scalar::utf16::utf8_length_from_utf16(in + pos, + size - pos); } template -simdutf_really_inline size_t utf32_length_from_utf16(const char16_t* in, size_t size) { - return count_code_points(in, size); +simdutf_really_inline size_t utf32_length_from_utf16(const char16_t *in, + size_t size) { + return count_code_points(in, size); } -simdutf_really_inline void change_endianness_utf16(const char16_t* in, size_t size, char16_t* output) { +simdutf_really_inline void +change_endianness_utf16(const char16_t *in, size_t size, char16_t *output) { size_t pos = 0; - while (pos < size/32*32) { + while (pos < size / 32 * 32) { simd16x32 input(reinterpret_cast(in + pos)); input.swap_bytes(); input.store(reinterpret_cast(output)); @@ -18348,58 +17836,99 @@ simdutf_really_inline void change_endianness_utf16(const char16_t* in, size_t si scalar::utf16::change_endianness_utf16(in + pos, size - pos, output); } -} // utf16 +} // namespace utf16 } // unnamed namespace } // namespace arm64 } // namespace simdutf /* end file src/generic/utf16.h */ +/* begin file src/generic/utf8.h */ + +namespace simdutf { +namespace arm64 { +namespace { +namespace utf8 { + +using namespace simd; + +simdutf_really_inline size_t count_code_points(const char *in, size_t size) { + size_t pos = 0; + size_t count = 0; + for (; pos + 64 <= size; pos += 64) { + simd8x64 input(reinterpret_cast(in + pos)); + uint64_t utf8_continuation_mask = input.gt(-65); + count += count_ones(utf8_continuation_mask); + } + return count + scalar::utf8::count_code_points(in + pos, size - pos); +} + +simdutf_really_inline size_t utf16_length_from_utf8(const char *in, + size_t size) { + size_t pos = 0; + size_t count = 0; + // This algorithm could no doubt be improved! + for (; pos + 64 <= size; pos += 64) { + simd8x64 input(reinterpret_cast(in + pos)); + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + // We count one word for anything that is not a continuation (so + // leading bytes). + count += 64 - count_ones(utf8_continuation_mask); + int64_t utf8_4byte = input.gteq_unsigned(240); + count += count_ones(utf8_4byte); + } + return count + scalar::utf8::utf16_length_from_utf8(in + pos, size - pos); +} +} // namespace utf8 +} // unnamed namespace +} // namespace arm64 +} // namespace simdutf +/* end file src/generic/utf8.h */ // transcoding from UTF-8 to Latin 1 /* begin file src/generic/utf8_to_latin1/utf8_to_latin1.h */ - namespace simdutf { namespace arm64 { namespace { namespace utf8_to_latin1 { using namespace simd; - - simdutf_really_inline simd8 check_special_cases(const simd8 input, const simd8 prev1) { -// For UTF-8 to Latin 1, we can allow any ASCII character, and any continuation byte, -// but the non-ASCII leading bytes must be 0b11000011 or 0b11000010 and nothing else. -// -// Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) -// Bit 1 = Too Long (ASCII followed by continuation) -// Bit 2 = Overlong 3-byte -// Bit 4 = Surrogate -// Bit 5 = Overlong 2-byte -// Bit 7 = Two Continuations - constexpr const uint8_t TOO_SHORT = 1<<0; // 11______ 0_______ - // 11______ 11______ - constexpr const uint8_t TOO_LONG = 1<<1; // 0_______ 10______ - constexpr const uint8_t OVERLONG_3 = 1<<2; // 11100000 100_____ - constexpr const uint8_t SURROGATE = 1<<4; // 11101101 101_____ - constexpr const uint8_t OVERLONG_2 = 1<<5; // 1100000_ 10______ - constexpr const uint8_t TWO_CONTS = 1<<7; // 10______ 10______ - constexpr const uint8_t TOO_LARGE = 1<<3; // 11110100 1001____ - // 11110100 101_____ - // 11110101 1001____ - // 11110101 101_____ - // 1111011_ 1001____ - // 1111011_ 101_____ - // 11111___ 1001____ - // 11111___ 101_____ - constexpr const uint8_t TOO_LARGE_1000 = 1<<6; - // 11110101 1000____ - // 1111011_ 1000____ - // 11111___ 1000____ - constexpr const uint8_t OVERLONG_4 = 1<<6; // 11110000 1000____ - constexpr const uint8_t FORBIDDEN = 0xff; - - const simd8 byte_1_high = prev1.shr<4>().lookup_16( +simdutf_really_inline simd8 +check_special_cases(const simd8 input, const simd8 prev1) { + // For UTF-8 to Latin 1, we can allow any ASCII character, and any + // continuation byte, but the non-ASCII leading bytes must be 0b11000011 or + // 0b11000010 and nothing else. + // + // Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) + // Bit 1 = Too Long (ASCII followed by continuation) + // Bit 2 = Overlong 3-byte + // Bit 4 = Surrogate + // Bit 5 = Overlong 2-byte + // Bit 7 = Two Continuations + constexpr const uint8_t TOO_SHORT = 1 << 0; // 11______ 0_______ + // 11______ 11______ + constexpr const uint8_t TOO_LONG = 1 << 1; // 0_______ 10______ + constexpr const uint8_t OVERLONG_3 = 1 << 2; // 11100000 100_____ + constexpr const uint8_t SURROGATE = 1 << 4; // 11101101 101_____ + constexpr const uint8_t OVERLONG_2 = 1 << 5; // 1100000_ 10______ + constexpr const uint8_t TWO_CONTS = 1 << 7; // 10______ 10______ + constexpr const uint8_t TOO_LARGE = 1 << 3; // 11110100 1001____ + // 11110100 101_____ + // 11110101 1001____ + // 11110101 101_____ + // 1111011_ 1001____ + // 1111011_ 101_____ + // 11111___ 1001____ + // 11111___ 101_____ + constexpr const uint8_t TOO_LARGE_1000 = 1 << 6; + // 11110101 1000____ + // 1111011_ 1000____ + // 11111___ 1000____ + constexpr const uint8_t OVERLONG_4 = 1 << 6; // 11110000 1000____ + constexpr const uint8_t FORBIDDEN = 0xff; + + const simd8 byte_1_high = prev1.shr<4>().lookup_16( // 0_______ ________ - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, // 10______ ________ TWO_CONTS, TWO_CONTS, TWO_CONTS, TWO_CONTS, // 1100____ ________ @@ -18409,324 +17938,347 @@ using namespace simd; // 1110____ ________ FORBIDDEN, // 1111____ ________ - FORBIDDEN - ); - constexpr const uint8_t CARRY = TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . - const simd8 byte_1_low = (prev1 & 0x0F).lookup_16( - // ____0000 ________ - CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, - // ____0001 ________ - CARRY | OVERLONG_2, - // ____001_ ________ - CARRY, - CARRY, - - // ____0100 ________ - FORBIDDEN, - // ____0101 ________ - FORBIDDEN, - // ____011_ ________ - FORBIDDEN, - FORBIDDEN, - - // ____1___ ________ - FORBIDDEN, - FORBIDDEN, - FORBIDDEN, - FORBIDDEN, - FORBIDDEN, - // ____1101 ________ - FORBIDDEN, - FORBIDDEN, - FORBIDDEN - ); - const simd8 byte_2_high = input.shr<4>().lookup_16( + FORBIDDEN); + constexpr const uint8_t CARRY = + TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . + const simd8 byte_1_low = + (prev1 & 0x0F) + .lookup_16( + // ____0000 ________ + CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, + // ____0001 ________ + CARRY | OVERLONG_2, + // ____001_ ________ + CARRY, CARRY, + + // ____0100 ________ + FORBIDDEN, + // ____0101 ________ + FORBIDDEN, + // ____011_ ________ + FORBIDDEN, FORBIDDEN, + + // ____1___ ________ + FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, + // ____1101 ________ + FORBIDDEN, FORBIDDEN, FORBIDDEN); + const simd8 byte_2_high = input.shr<4>().lookup_16( // ________ 0_______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, // ________ 1000____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | OVERLONG_4, + TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | + OVERLONG_4, // ________ 1001____ TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE, // ________ 101_____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, // ________ 11______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT - ); - return (byte_1_high & byte_1_low & byte_2_high); - } + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT); + return (byte_1_high & byte_1_low & byte_2_high); +} - struct validating_transcoder { - // If this is nonzero, there has been a UTF-8 error. - simd8 error; +struct validating_transcoder { + // If this is nonzero, there has been a UTF-8 error. + simd8 error; - validating_transcoder() : error(uint8_t(0)) {} - // - // Check whether the current bytes are valid UTF-8. - // - simdutf_really_inline void check_utf8_bytes(const simd8 input, const simd8 prev_input) { - // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ lead bytes - // (2, 3, 4-byte leads become large positive numbers instead of small negative numbers) - simd8 prev1 = input.prev<1>(prev_input); - this->error |= check_special_cases(input, prev1); - } - - - simdutf_really_inline size_t convert(const char* in, size_t size, char* latin1_output) { - size_t pos = 0; - char* start{latin1_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 bytes when calling convert_masked_utf8_to_latin1. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 8 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); //twos complement of -65 is 1011 1111 ... - } - // If the input is long enough, then we have that margin-1 is the eight last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store((int8_t*)latin1_output); - latin1_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - auto zero = simd8{uint8_t(0)}; - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - uint64_t utf8_continuation_mask = input.lt(-65 + 1); // -64 is 1100 0000 in twos complement. Note: in this case, we also have ASCII to account for. - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_latin1(in + pos, - utf8_end_of_code_point_mask, latin1_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. + validating_transcoder() : error(uint8_t(0)) {} + // + // Check whether the current bytes are valid UTF-8. + // + simdutf_really_inline void check_utf8_bytes(const simd8 input, + const simd8 prev_input) { + // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ + // lead bytes (2, 3, 4-byte leads become large positive numbers instead of + // small negative numbers) + simd8 prev1 = input.prev<1>(prev_input); + this->error |= check_special_cases(input, prev1); + } + + simdutf_really_inline size_t convert(const char *in, size_t size, + char *latin1_output) { + size_t pos = 0; + char *start{latin1_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 bytes when calling convert_masked_utf8_to_latin1. If you skip the + // last 16 bytes, and if the data is valid, then it is entirely safe because + // 16 UTF-8 bytes generate much more than 8 bytes. However, you cannot + // generally assume that you have valid UTF-8 input, so we are going to go + // back from the end counting 16 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 16; margin--) { + leading_byte += (int8_t(in[margin - 1]) > + -65); // twos complement of -65 is 1011 1111 ... + } + // If the input is long enough, then we have that margin-1 is the eight last + // leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store((int8_t *)latin1_output); + latin1_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, + // it is not good enough. + static_assert( + (simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + auto zero = simd8{uint8_t(0)}; + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); } - } - if(errors()) { return 0; } - if(pos < size) { - size_t howmany = scalar::utf8_to_latin1::convert(in + pos, size - pos, latin1_output); - if(howmany == 0) { return 0; } - latin1_output += howmany; - } - return latin1_output - start; - } - - simdutf_really_inline result convert_with_errors(const char* in, size_t size, char* latin1_output) { - size_t pos = 0; - char* start{latin1_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 bytes when calling convert_masked_utf8_to_latin1. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 8 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); - } - // If the input is long enough, then we have that margin-1 is the eight last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store((int8_t*)latin1_output); - latin1_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - auto zero = simd8{uint8_t(0)}; - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - if (errors()) { - // rewind_and_convert_with_errors will seek a potential error from in+pos onward, - // with the ability to go back up to pos bytes, and read size-pos bytes forward. - result res = scalar::utf8_to_latin1::rewind_and_convert_with_errors(pos, in + pos, size - pos, latin1_output); - res.count += pos; - return res; - } - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_latin1(in + pos, - utf8_end_of_code_point_mask, latin1_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. + uint64_t utf8_continuation_mask = + input.lt(-65 + 1); // -64 is 1100 0000 in twos complement. Note: in + // this case, we also have ASCII to account for. + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_latin1( + in + pos, utf8_end_of_code_point_mask, latin1_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. } - if(errors()) { - // rewind_and_convert_with_errors will seek a potential error from in+pos onward, - // with the ability to go back up to pos bytes, and read size-pos bytes forward. - result res = scalar::utf8_to_latin1::rewind_and_convert_with_errors(pos, in + pos, size - pos, latin1_output); - res.count += pos; - return res; + } + if (errors()) { + return 0; + } + if (pos < size) { + size_t howmany = + scalar::utf8_to_latin1::convert(in + pos, size - pos, latin1_output); + if (howmany == 0) { + return 0; } - if(pos < size) { - // rewind_and_convert_with_errors will seek a potential error from in+pos onward, - // with the ability to go back up to pos bytes, and read size-pos bytes forward. - result res = scalar::utf8_to_latin1::rewind_and_convert_with_errors(pos, in + pos, size - pos, latin1_output); - if (res.error) { // In case of error, we want the error position + latin1_output += howmany; + } + return latin1_output - start; + } + + simdutf_really_inline result convert_with_errors(const char *in, size_t size, + char *latin1_output) { + size_t pos = 0; + char *start{latin1_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 bytes when calling convert_masked_utf8_to_latin1. If you skip the + // last 16 bytes, and if the data is valid, then it is entirely safe because + // 16 UTF-8 bytes generate much more than 8 bytes. However, you cannot + // generally assume that you have valid UTF-8 input, so we are going to go + // back from the end counting 8 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 8; margin--) { + leading_byte += (int8_t(in[margin - 1]) > -65); + } + // If the input is long enough, then we have that margin-1 is the eight last + // leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store((int8_t *)latin1_output); + latin1_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, + // it is not good enough. + static_assert( + (simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + auto zero = simd8{uint8_t(0)}; + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); + } + if (errors()) { + // rewind_and_convert_with_errors will seek a potential error from + // in+pos onward, with the ability to go back up to pos bytes, and + // read size-pos bytes forward. + result res = scalar::utf8_to_latin1::rewind_and_convert_with_errors( + pos, in + pos, size - pos, latin1_output); res.count += pos; return res; - } else { // In case of success, we want the number of word written - latin1_output += res.count; } + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_latin1( + in + pos, utf8_end_of_code_point_mask, latin1_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; + } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. + } + } + if (errors()) { + // rewind_and_convert_with_errors will seek a potential error from in+pos + // onward, with the ability to go back up to pos bytes, and read size-pos + // bytes forward. + result res = scalar::utf8_to_latin1::rewind_and_convert_with_errors( + pos, in + pos, size - pos, latin1_output); + res.count += pos; + return res; + } + if (pos < size) { + // rewind_and_convert_with_errors will seek a potential error from in+pos + // onward, with the ability to go back up to pos bytes, and read size-pos + // bytes forward. + result res = scalar::utf8_to_latin1::rewind_and_convert_with_errors( + pos, in + pos, size - pos, latin1_output); + if (res.error) { // In case of error, we want the error position + res.count += pos; + return res; + } else { // In case of success, we want the number of word written + latin1_output += res.count; } - return result(error_code::SUCCESS, latin1_output - start); } + return result(error_code::SUCCESS, latin1_output - start); + } - simdutf_really_inline bool errors() const { - return this->error.any_bits_set_anywhere(); - } + simdutf_really_inline bool errors() const { + return this->error.any_bits_set_anywhere(); + } - }; // struct utf8_checker -} // utf8_to_latin1 namespace +}; // struct utf8_checker +} // namespace utf8_to_latin1 } // unnamed namespace } // namespace arm64 } // namespace simdutf /* end file src/generic/utf8_to_latin1/utf8_to_latin1.h */ /* begin file src/generic/utf8_to_latin1/valid_utf8_to_latin1.h */ - namespace simdutf { namespace arm64 { namespace { namespace utf8_to_latin1 { using namespace simd; - - simdutf_really_inline size_t convert_valid(const char* in, size_t size, char* latin1_output) { - size_t pos = 0; - char* start{latin1_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 bytes when calling convert_masked_utf8_to_latin1. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 8 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); //twos complement of -65 is 1011 1111 ... - } - // If the input is long enough, then we have that margin-1 is the eight last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store((int8_t*)latin1_output); - latin1_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - uint64_t utf8_continuation_mask = input.lt(-65 + 1); // -64 is 1100 0000 in twos complement. Note: in this case, we also have ASCII to account for. - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_latin1(in + pos, - utf8_end_of_code_point_mask, latin1_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. - } - } - if(pos < size) { - size_t howmany = scalar::utf8_to_latin1::convert_valid(in + pos, size - pos, latin1_output); - latin1_output += howmany; +simdutf_really_inline size_t convert_valid(const char *in, size_t size, + char *latin1_output) { + size_t pos = 0; + char *start{latin1_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 bytes when calling convert_masked_utf8_to_latin1. If you skip the last + // 16 bytes, and if the data is valid, then it is entirely safe because 16 + // UTF-8 bytes generate much more than 8 bytes. However, you cannot generally + // assume that you have valid UTF-8 input, so we are going to go back from the + // end counting 8 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 8; margin--) { + leading_byte += (int8_t(in[margin - 1]) > + -65); // twos complement of -65 is 1011 1111 ... + } + // If the input is long enough, then we have that margin-1 is the eight last + // leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store((int8_t *)latin1_output); + latin1_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, it + // is not good enough. + uint64_t utf8_continuation_mask = + input.lt(-65 + 1); // -64 is 1100 0000 in twos complement. Note: in + // this case, we also have ASCII to account for. + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_latin1( + in + pos, utf8_end_of_code_point_mask, latin1_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; } - return latin1_output - start; + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. } - } -} // utf8_to_latin1 namespace -} // unnamed namespace -} // namespace arm64 - // namespace simdutf + if (pos < size) { + size_t howmany = scalar::utf8_to_latin1::convert_valid(in + pos, size - pos, + latin1_output); + latin1_output += howmany; + } + return latin1_output - start; +} + +} // namespace utf8_to_latin1 +} // namespace +} // namespace arm64 +} // namespace simdutf + // namespace simdutf /* end file src/generic/utf8_to_latin1/valid_utf8_to_latin1.h */ // placeholder scalars @@ -18737,52 +18289,72 @@ using namespace simd; namespace simdutf { namespace arm64 { -simdutf_warn_unused int implementation::detect_encodings(const char * input, size_t length) const noexcept { +simdutf_warn_unused int +implementation::detect_encodings(const char *input, + size_t length) const noexcept { // If there is a BOM, then we trust it. auto bom_encoding = simdutf::BOM::check_bom(input, length); - if(bom_encoding != encoding_type::unspecified) { return bom_encoding; } + if (bom_encoding != encoding_type::unspecified) { + return bom_encoding; + } // todo: reimplement as a one-pass algorithm. int out = 0; - if(validate_utf8(input, length)) { out |= encoding_type::UTF8; } - if((length % 2) == 0) { - if(validate_utf16le(reinterpret_cast(input), length/2)) { out |= encoding_type::UTF16_LE; } + if (validate_utf8(input, length)) { + out |= encoding_type::UTF8; + } + if ((length % 2) == 0) { + if (validate_utf16le(reinterpret_cast(input), + length / 2)) { + out |= encoding_type::UTF16_LE; + } } - if((length % 4) == 0) { - if(validate_utf32(reinterpret_cast(input), length/4)) { out |= encoding_type::UTF32_LE; } + if ((length % 4) == 0) { + if (validate_utf32(reinterpret_cast(input), length / 4)) { + out |= encoding_type::UTF32_LE; + } } return out; } -simdutf_warn_unused bool implementation::validate_utf8(const char *buf, size_t len) const noexcept { - return arm64::utf8_validation::generic_validate_utf8(buf,len); +simdutf_warn_unused bool +implementation::validate_utf8(const char *buf, size_t len) const noexcept { + return arm64::utf8_validation::generic_validate_utf8(buf, len); } -simdutf_warn_unused result implementation::validate_utf8_with_errors(const char *buf, size_t len) const noexcept { - return arm64::utf8_validation::generic_validate_utf8_with_errors(buf,len); +simdutf_warn_unused result implementation::validate_utf8_with_errors( + const char *buf, size_t len) const noexcept { + return arm64::utf8_validation::generic_validate_utf8_with_errors(buf, len); } -simdutf_warn_unused bool implementation::validate_ascii(const char *buf, size_t len) const noexcept { - return arm64::utf8_validation::generic_validate_ascii(buf,len); +simdutf_warn_unused bool +implementation::validate_ascii(const char *buf, size_t len) const noexcept { + return arm64::utf8_validation::generic_validate_ascii(buf, len); } -simdutf_warn_unused result implementation::validate_ascii_with_errors(const char *buf, size_t len) const noexcept { - return arm64::utf8_validation::generic_validate_ascii_with_errors(buf,len); +simdutf_warn_unused result implementation::validate_ascii_with_errors( + const char *buf, size_t len) const noexcept { + return arm64::utf8_validation::generic_validate_ascii_with_errors(buf, len); } -simdutf_warn_unused bool implementation::validate_utf16le(const char16_t *buf, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_utf16le(const char16_t *buf, + size_t len) const noexcept { if (simdutf_unlikely(len == 0)) { // empty input is valid. protected the implementation from nullptr. return true; } - const char16_t* tail = arm_validate_utf16(buf, len); + const char16_t *tail = arm_validate_utf16(buf, len); if (tail) { - return scalar::utf16::validate(tail, len - (tail - buf)); + return scalar::utf16::validate(tail, + len - (tail - buf)); } else { return false; } } -simdutf_warn_unused bool implementation::validate_utf16be(const char16_t *buf, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_utf16be(const char16_t *buf, + size_t len) const noexcept { if (simdutf_unlikely(len == 0)) { // empty input is valid. protected the implementation from nullptr. return true; @@ -18795,38 +18367,43 @@ simdutf_warn_unused bool implementation::validate_utf16be(const char16_t *buf, s } } -simdutf_warn_unused result implementation::validate_utf16le_with_errors(const char16_t *buf, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_utf16le_with_errors( + const char16_t *buf, size_t len) const noexcept { if (simdutf_unlikely(len == 0)) { return result(error_code::SUCCESS, 0); } result res = arm_validate_utf16_with_errors(buf, len); if (res.count != len) { - result scalar_res = scalar::utf16::validate_with_errors(buf + res.count, len - res.count); + result scalar_res = scalar::utf16::validate_with_errors( + buf + res.count, len - res.count); return result(scalar_res.error, res.count + scalar_res.count); } else { return res; } } -simdutf_warn_unused result implementation::validate_utf16be_with_errors(const char16_t *buf, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_utf16be_with_errors( + const char16_t *buf, size_t len) const noexcept { if (simdutf_unlikely(len == 0)) { return result(error_code::SUCCESS, 0); } result res = arm_validate_utf16_with_errors(buf, len); if (res.count != len) { - result scalar_res = scalar::utf16::validate_with_errors(buf + res.count, len - res.count); + result scalar_res = scalar::utf16::validate_with_errors( + buf + res.count, len - res.count); return result(scalar_res.error, res.count + scalar_res.count); } else { return res; } } -simdutf_warn_unused bool implementation::validate_utf32(const char32_t *buf, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_utf32(const char32_t *buf, size_t len) const noexcept { if (simdutf_unlikely(len == 0)) { // empty input is valid. protected the implementation from nullptr. return true; } - const char32_t* tail = arm_validate_utf32le(buf, len); + const char32_t *tail = arm_validate_utf32le(buf, len); if (tail) { return scalar::utf32::validate(tail, len - (tail - buf)); } else { @@ -18834,157 +18411,203 @@ simdutf_warn_unused bool implementation::validate_utf32(const char32_t *buf, siz } } -simdutf_warn_unused result implementation::validate_utf32_with_errors(const char32_t *buf, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_utf32_with_errors( + const char32_t *buf, size_t len) const noexcept { if (simdutf_unlikely(len == 0)) { return result(error_code::SUCCESS, 0); } result res = arm_validate_utf32le_with_errors(buf, len); if (res.count != len) { - result scalar_res = scalar::utf32::validate_with_errors(buf + res.count, len - res.count); + result scalar_res = + scalar::utf32::validate_with_errors(buf + res.count, len - res.count); return result(scalar_res.error, res.count + scalar_res.count); } else { return res; } } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf8(const char * buf, size_t len, char* utf8_output) const noexcept { - std::pair ret = arm_convert_latin1_to_utf8(buf, len, utf8_output); +simdutf_warn_unused size_t implementation::convert_latin1_to_utf8( + const char *buf, size_t len, char *utf8_output) const noexcept { + std::pair ret = + arm_convert_latin1_to_utf8(buf, len, utf8_output); size_t converted_chars = ret.second - utf8_output; if (ret.first != buf + len) { const size_t scalar_converted_chars = scalar::latin1_to_utf8::convert( - ret.first, len - (ret.first - buf), ret.second); + ret.first, len - (ret.first - buf), ret.second); converted_chars += scalar_converted_chars; } return converted_chars; } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf16le(const char* buf, size_t len, char16_t* utf16_output) const noexcept { - std::pair ret = arm_convert_latin1_to_utf16(buf, len, utf16_output); +simdutf_warn_unused size_t implementation::convert_latin1_to_utf16le( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { + std::pair ret = + arm_convert_latin1_to_utf16(buf, len, utf16_output); size_t converted_chars = ret.second - utf16_output; if (ret.first != buf + len) { - const size_t scalar_converted_chars = scalar::latin1_to_utf16::convert( - ret.first, len - (ret.first - buf), ret.second); + const size_t scalar_converted_chars = + scalar::latin1_to_utf16::convert( + ret.first, len - (ret.first - buf), ret.second); converted_chars += scalar_converted_chars; } return converted_chars; } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf16be(const char* buf, size_t len, char16_t* utf16_output) const noexcept { - std::pair ret = arm_convert_latin1_to_utf16(buf, len, utf16_output); +simdutf_warn_unused size_t implementation::convert_latin1_to_utf16be( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { + std::pair ret = + arm_convert_latin1_to_utf16(buf, len, utf16_output); size_t converted_chars = ret.second - utf16_output; if (ret.first != buf + len) { - const size_t scalar_converted_chars = scalar::latin1_to_utf16::convert( - ret.first, len - (ret.first - buf), ret.second); + const size_t scalar_converted_chars = + scalar::latin1_to_utf16::convert( + ret.first, len - (ret.first - buf), ret.second); converted_chars += scalar_converted_chars; } return converted_chars; } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf32(const char* buf, size_t len, char32_t* utf32_output) const noexcept { - std::pair ret = arm_convert_latin1_to_utf32(buf, len, utf32_output); +simdutf_warn_unused size_t implementation::convert_latin1_to_utf32( + const char *buf, size_t len, char32_t *utf32_output) const noexcept { + std::pair ret = + arm_convert_latin1_to_utf32(buf, len, utf32_output); size_t converted_chars = ret.second - utf32_output; if (ret.first != buf + len) { const size_t scalar_converted_chars = scalar::latin1_to_utf32::convert( - ret.first, len - (ret.first - buf), ret.second); + ret.first, len - (ret.first - buf), ret.second); converted_chars += scalar_converted_chars; } return converted_chars; } -simdutf_warn_unused size_t implementation::convert_utf8_to_latin1(const char* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) const noexcept { utf8_to_latin1::validating_transcoder converter; return converter.convert(buf, len, latin1_output); } -simdutf_warn_unused result implementation::convert_utf8_to_latin1_with_errors(const char* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused result implementation::convert_utf8_to_latin1_with_errors( + const char *buf, size_t len, char *latin1_output) const noexcept { utf8_to_latin1::validating_transcoder converter; return converter.convert_with_errors(buf, len, latin1_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_latin1(const char* buf, size_t len, char* latin1_output) const noexcept { - return arm64::utf8_to_latin1::convert_valid(buf,len,latin1_output); +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) const noexcept { + return arm64::utf8_to_latin1::convert_valid(buf, len, latin1_output); } -simdutf_warn_unused size_t implementation::convert_utf8_to_utf16le(const char* buf, size_t len, char16_t* utf16_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf8_to_utf16le( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { utf8_to_utf16::validating_transcoder converter; return converter.convert(buf, len, utf16_output); } -simdutf_warn_unused size_t implementation::convert_utf8_to_utf16be(const char* buf, size_t len, char16_t* utf16_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf8_to_utf16be( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { utf8_to_utf16::validating_transcoder converter; return converter.convert(buf, len, utf16_output); } -simdutf_warn_unused result implementation::convert_utf8_to_utf16le_with_errors(const char* buf, size_t len, char16_t* utf16_output) const noexcept { +simdutf_warn_unused result implementation::convert_utf8_to_utf16le_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { utf8_to_utf16::validating_transcoder converter; - return converter.convert_with_errors(buf, len, utf16_output); + return converter.convert_with_errors(buf, len, + utf16_output); } -simdutf_warn_unused result implementation::convert_utf8_to_utf16be_with_errors(const char* buf, size_t len, char16_t* utf16_output) const noexcept { +simdutf_warn_unused result implementation::convert_utf8_to_utf16be_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { utf8_to_utf16::validating_transcoder converter; return converter.convert_with_errors(buf, len, utf16_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16le(const char* input, size_t size, - char16_t* utf16_output) const noexcept { - return utf8_to_utf16::convert_valid(input, size, utf16_output); +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16le( + const char *input, size_t size, char16_t *utf16_output) const noexcept { + return utf8_to_utf16::convert_valid(input, size, + utf16_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16be(const char* input, size_t size, - char16_t* utf16_output) const noexcept { - return utf8_to_utf16::convert_valid(input, size, utf16_output); +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16be( + const char *input, size_t size, char16_t *utf16_output) const noexcept { + return utf8_to_utf16::convert_valid(input, size, + utf16_output); } -simdutf_warn_unused size_t implementation::convert_utf8_to_utf32(const char* buf, size_t len, char32_t* utf32_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf8_to_utf32( + const char *buf, size_t len, char32_t *utf32_output) const noexcept { utf8_to_utf32::validating_transcoder converter; return converter.convert(buf, len, utf32_output); } -simdutf_warn_unused result implementation::convert_utf8_to_utf32_with_errors(const char* buf, size_t len, char32_t* utf32_output) const noexcept { +simdutf_warn_unused result implementation::convert_utf8_to_utf32_with_errors( + const char *buf, size_t len, char32_t *utf32_output) const noexcept { utf8_to_utf32::validating_transcoder converter; return converter.convert_with_errors(buf, len, utf32_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf32(const char* input, size_t size, - char32_t* utf32_output) const noexcept { - return utf8_to_utf32::convert_valid(input, size, utf32_output); +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf32( + const char *input, size_t size, char32_t *utf32_output) const noexcept { + return utf8_to_utf32::convert_valid(input, size, utf32_output); } -simdutf_warn_unused size_t implementation::convert_utf16le_to_latin1(const char16_t* buf, size_t len, char* latin1_output) const noexcept { - std::pair ret = arm_convert_utf16_to_latin1(buf, len, latin1_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf16le_to_latin1( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { + std::pair ret = + arm_convert_utf16_to_latin1(buf, len, latin1_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - latin1_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf16_to_latin1::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf16_to_latin1::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused size_t implementation::convert_utf16be_to_latin1(const char16_t* buf, size_t len, char* latin1_output) const noexcept { - std::pair ret = arm_convert_utf16_to_latin1(buf, len, latin1_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf16be_to_latin1( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { + std::pair ret = + arm_convert_utf16_to_latin1(buf, len, latin1_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - latin1_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf16_to_latin1::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf16_to_latin1::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused result implementation::convert_utf16le_to_latin1_with_errors(const char16_t* buf, size_t len, char* latin1_output) const noexcept { - std::pair ret = arm_convert_utf16_to_latin1_with_errors(buf, len, latin1_output); - if (ret.first.error) { return ret.first; } // Can return directly since scalar fallback already found correct ret.first.count +simdutf_warn_unused result +implementation::convert_utf16le_to_latin1_with_errors( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { + std::pair ret = + arm_convert_utf16_to_latin1_with_errors( + buf, len, latin1_output); + if (ret.first.error) { + return ret.first; + } // Can return directly since scalar fallback already found correct + // ret.first.count if (ret.first.count != len) { // All good so far, but not finished - result scalar_res = scalar::utf16_to_latin1::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf16_to_latin1::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -18992,16 +18615,26 @@ simdutf_warn_unused result implementation::convert_utf16le_to_latin1_with_errors ret.second += scalar_res.count; } } - ret.first.count = ret.second - latin1_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + latin1_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused result implementation::convert_utf16be_to_latin1_with_errors(const char16_t* buf, size_t len, char* latin1_output) const noexcept { - std::pair ret = arm_convert_utf16_to_latin1_with_errors(buf, len, latin1_output); - if (ret.first.error) { return ret.first; } // Can return directly since scalar fallback already found correct ret.first.count +simdutf_warn_unused result +implementation::convert_utf16be_to_latin1_with_errors( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { + std::pair ret = + arm_convert_utf16_to_latin1_with_errors(buf, len, + latin1_output); + if (ret.first.error) { + return ret.first; + } // Can return directly since scalar fallback already found correct + // ret.first.count if (ret.first.count != len) { // All good so far, but not finished - result scalar_res = scalar::utf16_to_latin1::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf16_to_latin1::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -19009,53 +18642,79 @@ simdutf_warn_unused result implementation::convert_utf16be_to_latin1_with_errors ret.second += scalar_res.count; } } - ret.first.count = ret.second - latin1_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + latin1_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_latin1(const char16_t* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_latin1( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { // optimization opportunity: implement a custom function. return convert_utf16be_to_latin1(buf, len, latin1_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_latin1(const char16_t* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_latin1( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { // optimization opportunity: implement a custom function. return convert_utf16le_to_latin1(buf, len, latin1_output); } -simdutf_warn_unused size_t implementation::convert_utf16le_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { - std::pair ret = arm_convert_utf16_to_utf8(buf, len, utf8_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { + std::pair ret = + arm_convert_utf16_to_utf8(buf, len, utf8_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf8_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf16_to_utf8::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf16_to_utf8::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused size_t implementation::convert_utf16be_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { - std::pair ret = arm_convert_utf16_to_utf8(buf, len, utf8_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { + std::pair ret = + arm_convert_utf16_to_utf8(buf, len, utf8_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf8_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf16_to_utf8::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf16_to_utf8::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused result implementation::convert_utf16le_to_utf8_with_errors(const char16_t* buf, size_t len, char* utf8_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = arm_convert_utf16_to_utf8_with_errors(buf, len, utf8_output); - if (ret.first.error) { return ret.first; } // Can return directly since scalar fallback already found correct ret.first.count +simdutf_warn_unused result implementation::convert_utf16le_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + arm_convert_utf16_to_utf8_with_errors(buf, len, + utf8_output); + if (ret.first.error) { + return ret.first; + } // Can return directly since scalar fallback already found correct + // ret.first.count if (ret.first.count != len) { // All good so far, but not finished - result scalar_res = scalar::utf16_to_utf8::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf16_to_utf8::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -19063,17 +18722,27 @@ simdutf_warn_unused result implementation::convert_utf16le_to_utf8_with_errors(c ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf8_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf8_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused result implementation::convert_utf16be_to_utf8_with_errors(const char16_t* buf, size_t len, char* utf8_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = arm_convert_utf16_to_utf8_with_errors(buf, len, utf8_output); - if (ret.first.error) { return ret.first; } // Can return directly since scalar fallback already found correct ret.first.count +simdutf_warn_unused result implementation::convert_utf16be_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + arm_convert_utf16_to_utf8_with_errors(buf, len, + utf8_output); + if (ret.first.error) { + return ret.first; + } // Can return directly since scalar fallback already found correct + // ret.first.count if (ret.first.count != len) { // All good so far, but not finished - result scalar_res = scalar::utf16_to_utf8::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf16_to_utf8::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -19081,43 +18750,56 @@ simdutf_warn_unused result implementation::convert_utf16be_to_utf8_with_errors(c ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf8_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf8_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { return convert_utf16le_to_utf8(buf, len, utf8_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { return convert_utf16be_to_utf8(buf, len, utf8_output); } -simdutf_warn_unused size_t implementation::convert_utf32_to_utf8(const char32_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_output) const noexcept { if (simdutf_unlikely(len == 0)) { return 0; } - std::pair ret = arm_convert_utf32_to_utf8(buf, len, utf8_output); - if (ret.first == nullptr) { return 0; } + std::pair ret = + arm_convert_utf32_to_utf8(buf, len, utf8_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf8_output; if (ret.first != buf + len) { const size_t scalar_saved_bytes = scalar::utf32_to_utf8::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused result implementation::convert_utf32_to_utf8_with_errors(const char32_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused result implementation::convert_utf32_to_utf8_with_errors( + const char32_t *buf, size_t len, char *utf8_output) const noexcept { if (simdutf_unlikely(len == 0)) { return result(error_code::SUCCESS, 0); } - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = arm_convert_utf32_to_utf8_with_errors(buf, len, utf8_output); + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + arm_convert_utf32_to_utf8_with_errors(buf, len, utf8_output); if (ret.first.count != len) { result scalar_res = scalar::utf32_to_utf8::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -19125,43 +18807,67 @@ simdutf_warn_unused result implementation::convert_utf32_to_utf8_with_errors(con ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf8_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf8_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused size_t implementation::convert_utf16le_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - std::pair ret = arm_convert_utf16_to_utf32(buf, len, utf32_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf16le_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + std::pair ret = + arm_convert_utf16_to_utf32(buf, len, utf32_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf32_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf16_to_utf32::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf16_to_utf32::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused size_t implementation::convert_utf16be_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - std::pair ret = arm_convert_utf16_to_utf32(buf, len, utf32_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf16be_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + std::pair ret = + arm_convert_utf16_to_utf32(buf, len, utf32_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf32_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf16_to_utf32::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf16_to_utf32::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused result implementation::convert_utf16le_to_utf32_with_errors(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = arm_convert_utf16_to_utf32_with_errors(buf, len, utf32_output); - if (ret.first.error) { return ret.first; } // Can return directly since scalar fallback already found correct ret.first.count +simdutf_warn_unused result implementation::convert_utf16le_to_utf32_with_errors( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + arm_convert_utf16_to_utf32_with_errors(buf, len, + utf32_output); + if (ret.first.error) { + return ret.first; + } // Can return directly since scalar fallback already found correct + // ret.first.count if (ret.first.count != len) { // All good so far, but not finished - result scalar_res = scalar::utf16_to_utf32::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf16_to_utf32::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -19169,17 +18875,27 @@ simdutf_warn_unused result implementation::convert_utf16le_to_utf32_with_errors( ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf32_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf32_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused result implementation::convert_utf16be_to_utf32_with_errors(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = arm_convert_utf16_to_utf32_with_errors(buf, len, utf32_output); - if (ret.first.error) { return ret.first; } // Can return directly since scalar fallback already found correct ret.first.count +simdutf_warn_unused result implementation::convert_utf16be_to_utf32_with_errors( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + arm_convert_utf16_to_utf32_with_errors(buf, len, + utf32_output); + if (ret.first.error) { + return ret.first; + } // Can return directly since scalar fallback already found correct + // ret.first.count if (ret.first.count != len) { // All good so far, but not finished - result scalar_res = scalar::utf16_to_utf32::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf16_to_utf32::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -19187,30 +18903,43 @@ simdutf_warn_unused result implementation::convert_utf16be_to_utf32_with_errors( ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf32_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf32_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused size_t implementation::convert_utf32_to_latin1(const char32_t* buf, size_t len, char* latin1_output) const noexcept { - std::pair ret = arm_convert_utf32_to_latin1(buf, len, latin1_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf32_to_latin1( + const char32_t *buf, size_t len, char *latin1_output) const noexcept { + std::pair ret = + arm_convert_utf32_to_latin1(buf, len, latin1_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - latin1_output; if (ret.first != buf + len) { const size_t scalar_saved_bytes = scalar::utf32_to_latin1::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused result implementation::convert_utf32_to_latin1_with_errors(const char32_t* buf, size_t len, char* latin1_output) const noexcept { - std::pair ret = arm_convert_utf32_to_latin1_with_errors(buf, len, latin1_output); - if (ret.first.error) { return ret.first; } // Can return directly since scalar fallback already found correct ret.first.count +simdutf_warn_unused result implementation::convert_utf32_to_latin1_with_errors( + const char32_t *buf, size_t len, char *latin1_output) const noexcept { + std::pair ret = + arm_convert_utf32_to_latin1_with_errors(buf, len, latin1_output); + if (ret.first.error) { + return ret.first; + } // Can return directly since scalar fallback already found correct + // ret.first.count if (ret.first.count != len) { // All good so far, but not finished result scalar_res = scalar::utf32_to_latin1::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -19218,60 +18947,86 @@ simdutf_warn_unused result implementation::convert_utf32_to_latin1_with_errors(c ret.second += scalar_res.count; } } - ret.first.count = ret.second - latin1_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + latin1_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_latin1(const char32_t* buf, size_t len, char* latin1_output) const noexcept { - std::pair ret = arm_convert_utf32_to_latin1(buf, len, latin1_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_latin1( + const char32_t *buf, size_t len, char *latin1_output) const noexcept { + std::pair ret = + arm_convert_utf32_to_latin1(buf, len, latin1_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - latin1_output; if (ret.first != buf + len) { const size_t scalar_saved_bytes = scalar::utf32_to_latin1::convert_valid( - ret.first, len - (ret.first - buf), ret.second); + ret.first, len - (ret.first - buf), ret.second); saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf8(const char32_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_output) const noexcept { // optimization opportunity: implement a custom function. return convert_utf32_to_utf8(buf, len, utf8_output); } -simdutf_warn_unused size_t implementation::convert_utf32_to_utf16le(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - std::pair ret = arm_convert_utf32_to_utf16(buf, len, utf16_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf32_to_utf16le( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + std::pair ret = + arm_convert_utf32_to_utf16(buf, len, utf16_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf16_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf32_to_utf16::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf32_to_utf16::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused size_t implementation::convert_utf32_to_utf16be(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - std::pair ret = arm_convert_utf32_to_utf16(buf, len, utf16_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf32_to_utf16be( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + std::pair ret = + arm_convert_utf32_to_utf16(buf, len, utf16_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf16_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf32_to_utf16::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf32_to_utf16::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused result implementation::convert_utf32_to_utf16le_with_errors(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = arm_convert_utf32_to_utf16_with_errors(buf, len, utf16_output); +simdutf_warn_unused result implementation::convert_utf32_to_utf16le_with_errors( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + arm_convert_utf32_to_utf16_with_errors(buf, len, + utf16_output); if (ret.first.count != len) { - result scalar_res = scalar::utf32_to_utf16::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf32_to_utf16::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -19279,16 +19034,23 @@ simdutf_warn_unused result implementation::convert_utf32_to_utf16le_with_errors( ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf16_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf16_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused result implementation::convert_utf32_to_utf16be_with_errors(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = arm_convert_utf32_to_utf16_with_errors(buf, len, utf16_output); +simdutf_warn_unused result implementation::convert_utf32_to_utf16be_with_errors( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + arm_convert_utf32_to_utf16_with_errors(buf, len, + utf16_output); if (ret.first.count != len) { - result scalar_res = scalar::utf32_to_utf16::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf32_to_utf16::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -19296,56 +19058,72 @@ simdutf_warn_unused result implementation::convert_utf32_to_utf16be_with_errors( ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf16_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf16_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16le(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16le( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { return convert_utf32_to_utf16le(buf, len, utf16_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16be(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16be( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { return convert_utf32_to_utf16be(buf, len, utf16_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { return convert_utf16le_to_utf32(buf, len, utf32_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { return convert_utf16be_to_utf32(buf, len, utf32_output); } -void implementation::change_endianness_utf16(const char16_t * input, size_t length, char16_t * output) const noexcept { +void implementation::change_endianness_utf16(const char16_t *input, + size_t length, + char16_t *output) const noexcept { utf16::change_endianness_utf16(input, length, output); } -simdutf_warn_unused size_t implementation::count_utf16le(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::count_utf16le( + const char16_t *input, size_t length) const noexcept { return utf16::count_code_points(input, length); } -simdutf_warn_unused size_t implementation::count_utf16be(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::count_utf16be( + const char16_t *input, size_t length) const noexcept { return utf16::count_code_points(input, length); } -simdutf_warn_unused size_t implementation::count_utf8(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::count_utf8(const char *input, size_t length) const noexcept { return utf8::count_code_points(input, length); } -simdutf_warn_unused size_t implementation::latin1_length_from_utf8(const char* buf, size_t len) const noexcept { - return count_utf8(buf,len); +simdutf_warn_unused size_t implementation::latin1_length_from_utf8( + const char *buf, size_t len) const noexcept { + return count_utf8(buf, len); } -simdutf_warn_unused size_t implementation::latin1_length_from_utf16(size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::latin1_length_from_utf16(size_t length) const noexcept { return scalar::utf16::latin1_length_from_utf16(length); } -simdutf_warn_unused size_t implementation::latin1_length_from_utf32(size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::latin1_length_from_utf32(size_t length) const noexcept { return scalar::utf32::latin1_length_from_utf32(length); } -simdutf_warn_unused size_t implementation::utf8_length_from_latin1(const char * input, size_t length) const noexcept { - // See https://lemire.me/blog/2023/05/15/computing-the-utf-8-size-of-a-latin-1-string-quickly-arm-neon-edition/ +simdutf_warn_unused size_t implementation::utf8_length_from_latin1( + const char *input, size_t length) const noexcept { + // See + // https://lemire.me/blog/2023/05/15/computing-the-utf-8-size-of-a-latin-1-string-quickly-arm-neon-edition/ // credit to Pete Cawley const uint8_t *data = reinterpret_cast(input); uint64_t result = 0; @@ -19361,116 +19139,154 @@ simdutf_warn_unused size_t implementation::utf8_length_from_latin1(const char * // vertical addition result -= vaddvq_s8(vreinterpretq_s8_u8(withhighbit)); } - return result + (length / lanes) * lanes + scalar::latin1::utf8_length_from_latin1((const char*)simd_end, rem); + return result + (length / lanes) * lanes + + scalar::latin1::utf8_length_from_latin1((const char *)simd_end, rem); } -simdutf_warn_unused size_t implementation::utf8_length_from_utf16le(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf8_length_from_utf16le( + const char16_t *input, size_t length) const noexcept { return utf16::utf8_length_from_utf16(input, length); } -simdutf_warn_unused size_t implementation::utf8_length_from_utf16be(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf8_length_from_utf16be( + const char16_t *input, size_t length) const noexcept { return utf16::utf8_length_from_utf16(input, length); } - -simdutf_warn_unused size_t implementation::utf16_length_from_latin1(size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::utf16_length_from_latin1(size_t length) const noexcept { return scalar::latin1::utf16_length_from_latin1(length); } - -simdutf_warn_unused size_t implementation::utf32_length_from_latin1(size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::utf32_length_from_latin1(size_t length) const noexcept { return scalar::latin1::utf32_length_from_latin1(length); } - - -simdutf_warn_unused size_t implementation::utf32_length_from_utf16le(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf32_length_from_utf16le( + const char16_t *input, size_t length) const noexcept { return utf16::utf32_length_from_utf16(input, length); } -simdutf_warn_unused size_t implementation::utf32_length_from_utf16be(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf32_length_from_utf16be( + const char16_t *input, size_t length) const noexcept { return utf16::utf32_length_from_utf16(input, length); } -simdutf_warn_unused size_t implementation::utf16_length_from_utf8(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf16_length_from_utf8( + const char *input, size_t length) const noexcept { return utf8::utf16_length_from_utf8(input, length); } -simdutf_warn_unused size_t implementation::utf8_length_from_utf32(const char32_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf8_length_from_utf32( + const char32_t *input, size_t length) const noexcept { const uint32x4_t v_7f = vmovq_n_u32((uint32_t)0x7f); const uint32x4_t v_7ff = vmovq_n_u32((uint32_t)0x7ff); const uint32x4_t v_ffff = vmovq_n_u32((uint32_t)0xffff); const uint32x4_t v_1 = vmovq_n_u32((uint32_t)0x1); size_t pos = 0; size_t count = 0; - for(;pos + 4 <= length; pos += 4) { + for (; pos + 4 <= length; pos += 4) { uint32x4_t in = vld1q_u32(reinterpret_cast(input + pos)); const uint32x4_t ascii_bytes_bytemask = vcleq_u32(in, v_7f); const uint32x4_t one_two_bytes_bytemask = vcleq_u32(in, v_7ff); - const uint32x4_t two_bytes_bytemask = veorq_u32(one_two_bytes_bytemask, ascii_bytes_bytemask); - const uint32x4_t three_bytes_bytemask = veorq_u32(vcleq_u32(in, v_ffff), one_two_bytes_bytemask); - - const uint16x8_t reduced_ascii_bytes_bytemask = vreinterpretq_u16_u32(vandq_u32(ascii_bytes_bytemask, v_1)); - const uint16x8_t reduced_two_bytes_bytemask = vreinterpretq_u16_u32(vandq_u32(two_bytes_bytemask, v_1)); - const uint16x8_t reduced_three_bytes_bytemask = vreinterpretq_u16_u32(vandq_u32(three_bytes_bytemask, v_1)); - - const uint16x8_t compressed_bytemask0 = vpaddq_u16(reduced_ascii_bytes_bytemask, reduced_two_bytes_bytemask); - const uint16x8_t compressed_bytemask1 = vpaddq_u16(reduced_three_bytes_bytemask, reduced_three_bytes_bytemask); - - size_t ascii_count = count_ones(vgetq_lane_u64(vreinterpretq_u64_u16(compressed_bytemask0), 0)); - size_t two_bytes_count = count_ones(vgetq_lane_u64(vreinterpretq_u64_u16(compressed_bytemask0), 1)); - size_t three_bytes_count = count_ones(vgetq_lane_u64(vreinterpretq_u64_u16(compressed_bytemask1), 0)); - - count += 16 - 3*ascii_count - 2*two_bytes_count - three_bytes_count; - } - return count + scalar::utf32::utf8_length_from_utf32(input + pos, length - pos); -} - -simdutf_warn_unused size_t implementation::utf16_length_from_utf32(const char32_t * input, size_t length) const noexcept { + const uint32x4_t two_bytes_bytemask = + veorq_u32(one_two_bytes_bytemask, ascii_bytes_bytemask); + const uint32x4_t three_bytes_bytemask = + veorq_u32(vcleq_u32(in, v_ffff), one_two_bytes_bytemask); + + const uint16x8_t reduced_ascii_bytes_bytemask = + vreinterpretq_u16_u32(vandq_u32(ascii_bytes_bytemask, v_1)); + const uint16x8_t reduced_two_bytes_bytemask = + vreinterpretq_u16_u32(vandq_u32(two_bytes_bytemask, v_1)); + const uint16x8_t reduced_three_bytes_bytemask = + vreinterpretq_u16_u32(vandq_u32(three_bytes_bytemask, v_1)); + + const uint16x8_t compressed_bytemask0 = + vpaddq_u16(reduced_ascii_bytes_bytemask, reduced_two_bytes_bytemask); + const uint16x8_t compressed_bytemask1 = + vpaddq_u16(reduced_three_bytes_bytemask, reduced_three_bytes_bytemask); + + size_t ascii_count = count_ones( + vgetq_lane_u64(vreinterpretq_u64_u16(compressed_bytemask0), 0)); + size_t two_bytes_count = count_ones( + vgetq_lane_u64(vreinterpretq_u64_u16(compressed_bytemask0), 1)); + size_t three_bytes_count = count_ones( + vgetq_lane_u64(vreinterpretq_u64_u16(compressed_bytemask1), 0)); + + count += 16 - 3 * ascii_count - 2 * two_bytes_count - three_bytes_count; + } + return count + + scalar::utf32::utf8_length_from_utf32(input + pos, length - pos); +} + +simdutf_warn_unused size_t implementation::utf16_length_from_utf32( + const char32_t *input, size_t length) const noexcept { const uint32x4_t v_ffff = vmovq_n_u32((uint32_t)0xffff); const uint32x4_t v_1 = vmovq_n_u32((uint32_t)0x1); size_t pos = 0; size_t count = 0; - for(;pos + 4 <= length; pos += 4) { + for (; pos + 4 <= length; pos += 4) { uint32x4_t in = vld1q_u32(reinterpret_cast(input + pos)); const uint32x4_t surrogate_bytemask = vcgtq_u32(in, v_ffff); - const uint16x8_t reduced_bytemask = vreinterpretq_u16_u32(vandq_u32(surrogate_bytemask, v_1)); - const uint16x8_t compressed_bytemask = vpaddq_u16(reduced_bytemask, reduced_bytemask); - size_t surrogate_count = count_ones(vgetq_lane_u64(vreinterpretq_u64_u16(compressed_bytemask), 0)); + const uint16x8_t reduced_bytemask = + vreinterpretq_u16_u32(vandq_u32(surrogate_bytemask, v_1)); + const uint16x8_t compressed_bytemask = + vpaddq_u16(reduced_bytemask, reduced_bytemask); + size_t surrogate_count = count_ones( + vgetq_lane_u64(vreinterpretq_u64_u16(compressed_bytemask), 0)); count += 4 + surrogate_count; } - return count + scalar::utf32::utf16_length_from_utf32(input + pos, length - pos); + return count + + scalar::utf32::utf16_length_from_utf32(input + pos, length - pos); } -simdutf_warn_unused size_t implementation::utf32_length_from_utf8(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf32_length_from_utf8( + const char *input, size_t length) const noexcept { return utf8::count_code_points(input, length); } -simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64( + const char *input, size_t length) const noexcept { return scalar::base64::maximal_binary_length_from_base64(input, length); } -simdutf_warn_unused result implementation::base64_to_binary(const char * input, size_t length, char* output, base64_options options) const noexcept { - return (options & base64_url) ? compress_decode_base64(output, input, length, options) : compress_decode_base64(output, input, length, options); +simdutf_warn_unused result implementation::base64_to_binary( + const char *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_options) const noexcept { + return (options & base64_url) + ? compress_decode_base64(output, input, length, options, + last_chunk_options) + : compress_decode_base64(output, input, length, options, + last_chunk_options); } -simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64( + const char16_t *input, size_t length) const noexcept { return scalar::base64::maximal_binary_length_from_base64(input, length); } -simdutf_warn_unused result implementation::base64_to_binary(const char16_t * input, size_t length, char* output, base64_options options) const noexcept { - return (options & base64_url) ? compress_decode_base64(output, input, length, options) : compress_decode_base64(output, input, length, options); +simdutf_warn_unused result implementation::base64_to_binary( + const char16_t *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_options) const noexcept { + return (options & base64_url) + ? compress_decode_base64(output, input, length, options, + last_chunk_options) + : compress_decode_base64(output, input, length, options, + last_chunk_options); } -simdutf_warn_unused size_t implementation::base64_length_from_binary(size_t length, base64_options options) const noexcept { +simdutf_warn_unused size_t implementation::base64_length_from_binary( + size_t length, base64_options options) const noexcept { return scalar::base64::base64_length_from_binary(length, options); } -size_t implementation::binary_to_base64(const char * input, size_t length, char* output, base64_options options) const noexcept { +size_t implementation::binary_to_base64(const char *input, size_t length, + char *output, + base64_options options) const noexcept { return encode_base64(output, input, length, options); } - } // namespace arm64 } // namespace simdutf @@ -19498,282 +19314,394 @@ size_t implementation::binary_to_base64(const char * input, size_t length, char* namespace simdutf { namespace fallback { -simdutf_warn_unused int implementation::detect_encodings(const char * input, size_t length) const noexcept { +simdutf_warn_unused int +implementation::detect_encodings(const char *input, + size_t length) const noexcept { // If there is a BOM, then we trust it. auto bom_encoding = simdutf::BOM::check_bom(input, length); - if(bom_encoding != encoding_type::unspecified) { return bom_encoding; } + if (bom_encoding != encoding_type::unspecified) { + return bom_encoding; + } // todo: reimplement as a one-pass algorithm. int out = 0; - if(validate_utf8(input, length)) { out |= encoding_type::UTF8; } - if((length % 2) == 0) { - if(validate_utf16le(reinterpret_cast(input), length/2)) { out |= encoding_type::UTF16_LE; } + if (validate_utf8(input, length)) { + out |= encoding_type::UTF8; + } + if ((length % 2) == 0) { + if (validate_utf16le(reinterpret_cast(input), + length / 2)) { + out |= encoding_type::UTF16_LE; + } } - if((length % 4) == 0) { - if(validate_utf32(reinterpret_cast(input), length/4)) { out |= encoding_type::UTF32_LE; } + if ((length % 4) == 0) { + if (validate_utf32(reinterpret_cast(input), length / 4)) { + out |= encoding_type::UTF32_LE; + } } return out; } -simdutf_warn_unused bool implementation::validate_utf8(const char *buf, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_utf8(const char *buf, size_t len) const noexcept { return scalar::utf8::validate(buf, len); } -simdutf_warn_unused result implementation::validate_utf8_with_errors(const char *buf, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_utf8_with_errors( + const char *buf, size_t len) const noexcept { return scalar::utf8::validate_with_errors(buf, len); } -simdutf_warn_unused bool implementation::validate_ascii(const char *buf, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_ascii(const char *buf, size_t len) const noexcept { return scalar::ascii::validate(buf, len); } -simdutf_warn_unused result implementation::validate_ascii_with_errors(const char *buf, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_ascii_with_errors( + const char *buf, size_t len) const noexcept { return scalar::ascii::validate_with_errors(buf, len); } -simdutf_warn_unused bool implementation::validate_utf16le(const char16_t *buf, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_utf16le(const char16_t *buf, + size_t len) const noexcept { return scalar::utf16::validate(buf, len); } -simdutf_warn_unused bool implementation::validate_utf16be(const char16_t *buf, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_utf16be(const char16_t *buf, + size_t len) const noexcept { return scalar::utf16::validate(buf, len); } -simdutf_warn_unused result implementation::validate_utf16le_with_errors(const char16_t *buf, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_utf16le_with_errors( + const char16_t *buf, size_t len) const noexcept { return scalar::utf16::validate_with_errors(buf, len); } -simdutf_warn_unused result implementation::validate_utf16be_with_errors(const char16_t *buf, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_utf16be_with_errors( + const char16_t *buf, size_t len) const noexcept { return scalar::utf16::validate_with_errors(buf, len); } -simdutf_warn_unused bool implementation::validate_utf32(const char32_t *buf, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_utf32(const char32_t *buf, size_t len) const noexcept { return scalar::utf32::validate(buf, len); } -simdutf_warn_unused result implementation::validate_utf32_with_errors(const char32_t *buf, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_utf32_with_errors( + const char32_t *buf, size_t len) const noexcept { return scalar::utf32::validate_with_errors(buf, len); } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf8(const char * buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_latin1_to_utf8( + const char *buf, size_t len, char *utf8_output) const noexcept { return scalar::latin1_to_utf8::convert(buf, len, utf8_output); } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf16le(const char* buf, size_t len, char16_t* utf16_output) const noexcept { - return scalar::latin1_to_utf16::convert(buf, len, utf16_output); +simdutf_warn_unused size_t implementation::convert_latin1_to_utf16le( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { + return scalar::latin1_to_utf16::convert(buf, len, + utf16_output); } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf16be(const char* buf, size_t len, char16_t* utf16_output) const noexcept { - return scalar::latin1_to_utf16::convert(buf, len, utf16_output); +simdutf_warn_unused size_t implementation::convert_latin1_to_utf16be( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { + return scalar::latin1_to_utf16::convert(buf, len, + utf16_output); } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf32(const char * buf, size_t len, char32_t* utf32_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_latin1_to_utf32( + const char *buf, size_t len, char32_t *utf32_output) const noexcept { return scalar::latin1_to_utf32::convert(buf, len, utf32_output); } -simdutf_warn_unused size_t implementation::convert_utf8_to_latin1(const char* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) const noexcept { return scalar::utf8_to_latin1::convert(buf, len, latin1_output); } -simdutf_warn_unused result implementation::convert_utf8_to_latin1_with_errors(const char* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused result implementation::convert_utf8_to_latin1_with_errors( + const char *buf, size_t len, char *latin1_output) const noexcept { return scalar::utf8_to_latin1::convert_with_errors(buf, len, latin1_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_latin1(const char* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) const noexcept { return scalar::utf8_to_latin1::convert_valid(buf, len, latin1_output); } -simdutf_warn_unused size_t implementation::convert_utf8_to_utf16le(const char* buf, size_t len, char16_t* utf16_output) const noexcept { - return scalar::utf8_to_utf16::convert(buf, len, utf16_output); +simdutf_warn_unused size_t implementation::convert_utf8_to_utf16le( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { + return scalar::utf8_to_utf16::convert(buf, len, + utf16_output); } -simdutf_warn_unused size_t implementation::convert_utf8_to_utf16be(const char* buf, size_t len, char16_t* utf16_output) const noexcept { - return scalar::utf8_to_utf16::convert(buf, len, utf16_output); +simdutf_warn_unused size_t implementation::convert_utf8_to_utf16be( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { + return scalar::utf8_to_utf16::convert(buf, len, + utf16_output); } -simdutf_warn_unused result implementation::convert_utf8_to_utf16le_with_errors(const char* buf, size_t len, char16_t* utf16_output) const noexcept { - return scalar::utf8_to_utf16::convert_with_errors(buf, len, utf16_output); +simdutf_warn_unused result implementation::convert_utf8_to_utf16le_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { + return scalar::utf8_to_utf16::convert_with_errors( + buf, len, utf16_output); } -simdutf_warn_unused result implementation::convert_utf8_to_utf16be_with_errors(const char* buf, size_t len, char16_t* utf16_output) const noexcept { - return scalar::utf8_to_utf16::convert_with_errors(buf, len, utf16_output); +simdutf_warn_unused result implementation::convert_utf8_to_utf16be_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { + return scalar::utf8_to_utf16::convert_with_errors( + buf, len, utf16_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16le(const char* buf, size_t len, char16_t* utf16_output) const noexcept { - return scalar::utf8_to_utf16::convert_valid(buf, len, utf16_output); +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16le( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { + return scalar::utf8_to_utf16::convert_valid(buf, len, + utf16_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16be(const char* buf, size_t len, char16_t* utf16_output) const noexcept { - return scalar::utf8_to_utf16::convert_valid(buf, len, utf16_output); +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16be( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { + return scalar::utf8_to_utf16::convert_valid(buf, len, + utf16_output); } -simdutf_warn_unused size_t implementation::convert_utf8_to_utf32(const char* buf, size_t len, char32_t* utf32_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf8_to_utf32( + const char *buf, size_t len, char32_t *utf32_output) const noexcept { return scalar::utf8_to_utf32::convert(buf, len, utf32_output); } -simdutf_warn_unused result implementation::convert_utf8_to_utf32_with_errors(const char* buf, size_t len, char32_t* utf32_output) const noexcept { +simdutf_warn_unused result implementation::convert_utf8_to_utf32_with_errors( + const char *buf, size_t len, char32_t *utf32_output) const noexcept { return scalar::utf8_to_utf32::convert_with_errors(buf, len, utf32_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf32(const char* input, size_t size, - char32_t* utf32_output) const noexcept { - return scalar::utf8_to_utf32::convert_valid(input, size, utf32_output); +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf32( + const char *input, size_t size, char32_t *utf32_output) const noexcept { + return scalar::utf8_to_utf32::convert_valid(input, size, utf32_output); } -simdutf_warn_unused size_t implementation::convert_utf16le_to_latin1(const char16_t* buf, size_t len, char* latin1_output) const noexcept { - return scalar::utf16_to_latin1::convert(buf, len, latin1_output); +simdutf_warn_unused size_t implementation::convert_utf16le_to_latin1( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { + return scalar::utf16_to_latin1::convert(buf, len, + latin1_output); } -simdutf_warn_unused size_t implementation::convert_utf16be_to_latin1(const char16_t* buf, size_t len, char* latin1_output) const noexcept { - return scalar::utf16_to_latin1::convert(buf, len, latin1_output); +simdutf_warn_unused size_t implementation::convert_utf16be_to_latin1( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { + return scalar::utf16_to_latin1::convert(buf, len, + latin1_output); } -simdutf_warn_unused result implementation::convert_utf16le_to_latin1_with_errors(const char16_t* buf, size_t len, char* latin1_output) const noexcept { - return scalar::utf16_to_latin1::convert_with_errors(buf, len, latin1_output); +simdutf_warn_unused result +implementation::convert_utf16le_to_latin1_with_errors( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { + return scalar::utf16_to_latin1::convert_with_errors( + buf, len, latin1_output); } -simdutf_warn_unused result implementation::convert_utf16be_to_latin1_with_errors(const char16_t* buf, size_t len, char* latin1_output) const noexcept { - return scalar::utf16_to_latin1::convert_with_errors(buf, len, latin1_output); +simdutf_warn_unused result +implementation::convert_utf16be_to_latin1_with_errors( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { + return scalar::utf16_to_latin1::convert_with_errors( + buf, len, latin1_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_latin1(const char16_t* buf, size_t len, char* latin1_output) const noexcept { - return scalar::utf16_to_latin1::convert_valid(buf, len, latin1_output); +simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_latin1( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { + return scalar::utf16_to_latin1::convert_valid( + buf, len, latin1_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_latin1(const char16_t* buf, size_t len, char* latin1_output) const noexcept { - return scalar::utf16_to_latin1::convert_valid(buf, len, latin1_output); +simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_latin1( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { + return scalar::utf16_to_latin1::convert_valid(buf, len, + latin1_output); } -simdutf_warn_unused size_t implementation::convert_utf16le_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { - return scalar::utf16_to_utf8::convert(buf, len, utf8_output); +simdutf_warn_unused size_t implementation::convert_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { + return scalar::utf16_to_utf8::convert(buf, len, + utf8_output); } -simdutf_warn_unused size_t implementation::convert_utf16be_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { return scalar::utf16_to_utf8::convert(buf, len, utf8_output); } -simdutf_warn_unused result implementation::convert_utf16le_to_utf8_with_errors(const char16_t* buf, size_t len, char* utf8_output) const noexcept { - return scalar::utf16_to_utf8::convert_with_errors(buf, len, utf8_output); +simdutf_warn_unused result implementation::convert_utf16le_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { + return scalar::utf16_to_utf8::convert_with_errors( + buf, len, utf8_output); } -simdutf_warn_unused result implementation::convert_utf16be_to_utf8_with_errors(const char16_t* buf, size_t len, char* utf8_output) const noexcept { - return scalar::utf16_to_utf8::convert_with_errors(buf, len, utf8_output); +simdutf_warn_unused result implementation::convert_utf16be_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { + return scalar::utf16_to_utf8::convert_with_errors( + buf, len, utf8_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { - return scalar::utf16_to_utf8::convert_valid(buf, len, utf8_output); +simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { + return scalar::utf16_to_utf8::convert_valid(buf, len, + utf8_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { - return scalar::utf16_to_utf8::convert_valid(buf, len, utf8_output); +simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { + return scalar::utf16_to_utf8::convert_valid(buf, len, + utf8_output); } -simdutf_warn_unused size_t implementation::convert_utf32_to_latin1(const char32_t* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf32_to_latin1( + const char32_t *buf, size_t len, char *latin1_output) const noexcept { return scalar::utf32_to_latin1::convert(buf, len, latin1_output); } -simdutf_warn_unused result implementation::convert_utf32_to_latin1_with_errors(const char32_t* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused result implementation::convert_utf32_to_latin1_with_errors( + const char32_t *buf, size_t len, char *latin1_output) const noexcept { return scalar::utf32_to_latin1::convert_with_errors(buf, len, latin1_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_latin1(const char32_t* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_latin1( + const char32_t *buf, size_t len, char *latin1_output) const noexcept { return scalar::utf32_to_latin1::convert_valid(buf, len, latin1_output); } -simdutf_warn_unused size_t implementation::convert_utf32_to_utf8(const char32_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_output) const noexcept { return scalar::utf32_to_utf8::convert(buf, len, utf8_output); } -simdutf_warn_unused result implementation::convert_utf32_to_utf8_with_errors(const char32_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused result implementation::convert_utf32_to_utf8_with_errors( + const char32_t *buf, size_t len, char *utf8_output) const noexcept { return scalar::utf32_to_utf8::convert_with_errors(buf, len, utf8_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf8(const char32_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_output) const noexcept { return scalar::utf32_to_utf8::convert_valid(buf, len, utf8_output); } -simdutf_warn_unused size_t implementation::convert_utf32_to_utf16le(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - return scalar::utf32_to_utf16::convert(buf, len, utf16_output); +simdutf_warn_unused size_t implementation::convert_utf32_to_utf16le( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + return scalar::utf32_to_utf16::convert(buf, len, + utf16_output); } -simdutf_warn_unused size_t implementation::convert_utf32_to_utf16be(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - return scalar::utf32_to_utf16::convert(buf, len, utf16_output); +simdutf_warn_unused size_t implementation::convert_utf32_to_utf16be( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + return scalar::utf32_to_utf16::convert(buf, len, + utf16_output); } -simdutf_warn_unused result implementation::convert_utf32_to_utf16le_with_errors(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - return scalar::utf32_to_utf16::convert_with_errors(buf, len, utf16_output); +simdutf_warn_unused result implementation::convert_utf32_to_utf16le_with_errors( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + return scalar::utf32_to_utf16::convert_with_errors( + buf, len, utf16_output); } -simdutf_warn_unused result implementation::convert_utf32_to_utf16be_with_errors(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - return scalar::utf32_to_utf16::convert_with_errors(buf, len, utf16_output); +simdutf_warn_unused result implementation::convert_utf32_to_utf16be_with_errors( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + return scalar::utf32_to_utf16::convert_with_errors( + buf, len, utf16_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16le(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - return scalar::utf32_to_utf16::convert_valid(buf, len, utf16_output); +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16le( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + return scalar::utf32_to_utf16::convert_valid( + buf, len, utf16_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16be(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - return scalar::utf32_to_utf16::convert_valid(buf, len, utf16_output); +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16be( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + return scalar::utf32_to_utf16::convert_valid(buf, len, + utf16_output); } -simdutf_warn_unused size_t implementation::convert_utf16le_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - return scalar::utf16_to_utf32::convert(buf, len, utf32_output); +simdutf_warn_unused size_t implementation::convert_utf16le_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + return scalar::utf16_to_utf32::convert(buf, len, + utf32_output); } -simdutf_warn_unused size_t implementation::convert_utf16be_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - return scalar::utf16_to_utf32::convert(buf, len, utf32_output); +simdutf_warn_unused size_t implementation::convert_utf16be_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + return scalar::utf16_to_utf32::convert(buf, len, + utf32_output); } -simdutf_warn_unused result implementation::convert_utf16le_to_utf32_with_errors(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - return scalar::utf16_to_utf32::convert_with_errors(buf, len, utf32_output); +simdutf_warn_unused result implementation::convert_utf16le_to_utf32_with_errors( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + return scalar::utf16_to_utf32::convert_with_errors( + buf, len, utf32_output); } -simdutf_warn_unused result implementation::convert_utf16be_to_utf32_with_errors(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - return scalar::utf16_to_utf32::convert_with_errors(buf, len, utf32_output); +simdutf_warn_unused result implementation::convert_utf16be_to_utf32_with_errors( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + return scalar::utf16_to_utf32::convert_with_errors( + buf, len, utf32_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - return scalar::utf16_to_utf32::convert_valid(buf, len, utf32_output); +simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + return scalar::utf16_to_utf32::convert_valid( + buf, len, utf32_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - return scalar::utf16_to_utf32::convert_valid(buf, len, utf32_output); +simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + return scalar::utf16_to_utf32::convert_valid(buf, len, + utf32_output); } -void implementation::change_endianness_utf16(const char16_t * input, size_t length, char16_t * output) const noexcept { +void implementation::change_endianness_utf16(const char16_t *input, + size_t length, + char16_t *output) const noexcept { scalar::utf16::change_endianness_utf16(input, length, output); } -simdutf_warn_unused size_t implementation::count_utf16le(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::count_utf16le( + const char16_t *input, size_t length) const noexcept { return scalar::utf16::count_code_points(input, length); } -simdutf_warn_unused size_t implementation::count_utf16be(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::count_utf16be( + const char16_t *input, size_t length) const noexcept { return scalar::utf16::count_code_points(input, length); } -simdutf_warn_unused size_t implementation::count_utf8(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::count_utf8(const char *input, size_t length) const noexcept { return scalar::utf8::count_code_points(input, length); } -simdutf_warn_unused size_t implementation::latin1_length_from_utf8(const char* buf, size_t len) const noexcept { - return scalar::utf8::count_code_points(buf,len); +simdutf_warn_unused size_t implementation::latin1_length_from_utf8( + const char *buf, size_t len) const noexcept { + return scalar::utf8::count_code_points(buf, len); } -simdutf_warn_unused size_t implementation::latin1_length_from_utf16(size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::latin1_length_from_utf16(size_t length) const noexcept { return scalar::utf16::latin1_length_from_utf16(length); } -simdutf_warn_unused size_t implementation::latin1_length_from_utf32(size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::latin1_length_from_utf32(size_t length) const noexcept { return length; } -simdutf_warn_unused size_t implementation::utf8_length_from_latin1(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf8_length_from_latin1( + const char *input, size_t length) const noexcept { size_t answer = length; size_t i = 0; auto pop = [](uint64_t v) { - return (size_t)(((v>>7) & UINT64_C(0x0101010101010101)) * UINT64_C(0x0101010101010101) >> 56); + return (size_t)(((v >> 7) & UINT64_C(0x0101010101010101)) * + UINT64_C(0x0101010101010101) >> + 56); }; - for(; i + 32 <= length; i += 32) { + for (; i + 32 <= length; i += 32) { uint64_t v; memcpy(&v, input + i, 8); answer += pop(v); @@ -19784,140 +19712,171 @@ simdutf_warn_unused size_t implementation::utf8_length_from_latin1(const char * memcpy(&v, input + i + 24, sizeof(v)); answer += pop(v); } - for(; i + 8 <= length; i += 8) { + for (; i + 8 <= length; i += 8) { uint64_t v; memcpy(&v, input + i, sizeof(v)); answer += pop(v); } - for(; i + 1 <= length; i += 1) { - answer += static_cast(input[i]) >> 7; + for (; i + 1 <= length; i += 1) { + answer += static_cast(input[i]) >> 7; } return answer; } -simdutf_warn_unused size_t implementation::utf8_length_from_utf16le(const char16_t * input, size_t length) const noexcept { - return scalar::utf16::utf8_length_from_utf16(input, length); +simdutf_warn_unused size_t implementation::utf8_length_from_utf16le( + const char16_t *input, size_t length) const noexcept { + return scalar::utf16::utf8_length_from_utf16(input, + length); } -simdutf_warn_unused size_t implementation::utf8_length_from_utf16be(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf8_length_from_utf16be( + const char16_t *input, size_t length) const noexcept { return scalar::utf16::utf8_length_from_utf16(input, length); } -simdutf_warn_unused size_t implementation::utf32_length_from_utf16le(const char16_t * input, size_t length) const noexcept { - return scalar::utf16::utf32_length_from_utf16(input, length); +simdutf_warn_unused size_t implementation::utf32_length_from_utf16le( + const char16_t *input, size_t length) const noexcept { + return scalar::utf16::utf32_length_from_utf16(input, + length); } -simdutf_warn_unused size_t implementation::utf32_length_from_utf16be(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf32_length_from_utf16be( + const char16_t *input, size_t length) const noexcept { return scalar::utf16::utf32_length_from_utf16(input, length); } -simdutf_warn_unused size_t implementation::utf16_length_from_latin1(size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::utf16_length_from_latin1(size_t length) const noexcept { return scalar::latin1::utf16_length_from_latin1(length); } -simdutf_warn_unused size_t implementation::utf16_length_from_utf8(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf16_length_from_utf8( + const char *input, size_t length) const noexcept { return scalar::utf8::utf16_length_from_utf8(input, length); } -simdutf_warn_unused size_t implementation::utf8_length_from_utf32(const char32_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf8_length_from_utf32( + const char32_t *input, size_t length) const noexcept { return scalar::utf32::utf8_length_from_utf32(input, length); } -simdutf_warn_unused size_t implementation::utf16_length_from_utf32(const char32_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf16_length_from_utf32( + const char32_t *input, size_t length) const noexcept { return scalar::utf32::utf16_length_from_utf32(input, length); } -simdutf_warn_unused size_t implementation::utf32_length_from_latin1(size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::utf32_length_from_latin1(size_t length) const noexcept { return scalar::latin1::utf32_length_from_latin1(length); } -simdutf_warn_unused size_t implementation::utf32_length_from_utf8(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf32_length_from_utf8( + const char *input, size_t length) const noexcept { return scalar::utf8::count_code_points(input, length); } -simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64( + const char *input, size_t length) const noexcept { return scalar::base64::maximal_binary_length_from_base64(input, length); } -simdutf_warn_unused result implementation::base64_to_binary(const char * input, size_t length, char* output, base64_options options) const noexcept { - while(length > 0 && scalar::base64::is_ascii_white_space(input[length - 1])) { +simdutf_warn_unused result implementation::base64_to_binary( + const char *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_options) const noexcept { + while (length > 0 && + scalar::base64::is_ascii_white_space(input[length - 1])) { length--; } - size_t equallocation = length; // location of the first padding character if any + size_t equallocation = + length; // location of the first padding character if any size_t equalsigns = 0; - if(length > 0 && input[length - 1] == '=') { + if (length > 0 && input[length - 1] == '=') { equallocation = length - 1; length -= 1; equalsigns++; - while(length > 0 && scalar::base64::is_ascii_white_space(input[length - 1])) { + while (length > 0 && + scalar::base64::is_ascii_white_space(input[length - 1])) { length--; } - if(length > 0 && input[length - 1] == '=') { + if (length > 0 && input[length - 1] == '=') { equallocation = length - 1; equalsigns++; length -= 1; } } - if(length == 0) { - if(equalsigns > 0) { + if (length == 0) { + if (equalsigns > 0) { return {INVALID_BASE64_CHARACTER, equallocation}; } return {SUCCESS, 0}; } - result r = scalar::base64::base64_tail_decode(output, input, length, options); - if(r.error == error_code::SUCCESS && equalsigns > 0) { + result r = scalar::base64::base64_tail_decode( + output, input, length, equalsigns, options, last_chunk_options); + if (last_chunk_options != stop_before_partial && + r.error == error_code::SUCCESS && equalsigns > 0) { // additional checks - if((r.count % 3 == 0) || ((r.count % 3) + 1 + equalsigns != 4)) { + if ((r.count % 3 == 0) || ((r.count % 3) + 1 + equalsigns != 4)) { return {INVALID_BASE64_CHARACTER, equallocation}; } } return r; } -simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64( + const char16_t *input, size_t length) const noexcept { return scalar::base64::maximal_binary_length_from_base64(input, length); } -simdutf_warn_unused result implementation::base64_to_binary(const char16_t * input, size_t length, char* output, base64_options options) const noexcept { - while(length > 0 && scalar::base64::is_ascii_white_space(input[length - 1])) { +simdutf_warn_unused result implementation::base64_to_binary( + const char16_t *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_options) const noexcept { + while (length > 0 && + scalar::base64::is_ascii_white_space(input[length - 1])) { length--; } - size_t equallocation = length; // location of the first padding character if any + size_t equallocation = + length; // location of the first padding character if any size_t equalsigns = 0; - if(length > 0 && input[length - 1] == '=') { + if (length > 0 && input[length - 1] == '=') { equallocation = length - 1; length -= 1; equalsigns++; - while(length > 0 && scalar::base64::is_ascii_white_space(input[length - 1])) { + while (length > 0 && + scalar::base64::is_ascii_white_space(input[length - 1])) { length--; } - if(length > 0 && input[length - 1] == '=') { + if (length > 0 && input[length - 1] == '=') { equallocation = length - 1; equalsigns++; length -= 1; } } - if(length == 0) { - if(equalsigns > 0) { + if (length == 0) { + if (equalsigns > 0) { return {INVALID_BASE64_CHARACTER, equallocation}; } return {SUCCESS, 0}; } - result r = scalar::base64::base64_tail_decode(output, input, length, options); - if(r.error == error_code::SUCCESS && equalsigns > 0) { + result r = scalar::base64::base64_tail_decode( + output, input, length, equalsigns, options, last_chunk_options); + if (last_chunk_options != stop_before_partial && + r.error == error_code::SUCCESS && equalsigns > 0) { // additional checks - if((r.count % 3 == 0) || ((r.count % 3) + 1 + equalsigns != 4)) { + if ((r.count % 3 == 0) || ((r.count % 3) + 1 + equalsigns != 4)) { return {INVALID_BASE64_CHARACTER, equallocation}; } } return r; } -simdutf_warn_unused size_t implementation::base64_length_from_binary(size_t length, base64_options options) const noexcept { +simdutf_warn_unused size_t implementation::base64_length_from_binary( + size_t length, base64_options options) const noexcept { return scalar::base64::base64_length_from_binary(length, options); } -size_t implementation::binary_to_base64(const char * input, size_t length, char* output, base64_options options) const noexcept { +size_t implementation::binary_to_base64(const char *input, size_t length, + char *output, + base64_options options) const noexcept { return scalar::base64::tail_encode_base64(output, input, length, options); } } // namespace fallback @@ -19941,22 +19900,26 @@ size_t implementation::binary_to_base64(const char * input, size_t length, char* SIMDUTF_TARGET_ICELAKE #endif -#if SIMDUTF_GCC11ORMORE // workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105593 +#if SIMDUTF_GCC11ORMORE // workaround for + // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105593 +// clang-format off SIMDUTF_DISABLE_GCC_WARNING(-Wmaybe-uninitialized) +// clang-format on #endif // end of workaround /* end file src/simdutf/icelake/begin.h */ namespace simdutf { namespace icelake { namespace { #ifndef SIMDUTF_ICELAKE_H -#error "icelake.h must be included" + #error "icelake.h must be included" #endif /* begin file src/icelake/icelake_utf8_common.inl.cpp */ -// Common procedures for both validating and non-validating conversions from UTF-8. -enum block_processing_mode { SIMDUTF_FULL, SIMDUTF_TAIL}; +// Common procedures for both validating and non-validating conversions from +// UTF-8. +enum block_processing_mode { SIMDUTF_FULL, SIMDUTF_TAIL }; -using utf8_to_utf16_result = std::pair; -using utf8_to_utf32_result = std::pair; +using utf8_to_utf16_result = std::pair; +using utf8_to_utf32_result = std::pair; /* process_block_utf8_to_utf16 converts up to 64 bytes from 'in' from UTF-8 @@ -19970,42 +19933,54 @@ using utf8_to_utf32_result = std::pair; bytes have been processed, upon success. */ template -simdutf_really_inline bool process_block_utf8_to_utf16(const char *&in, char16_t *&out, size_t gap) { +simdutf_really_inline bool +process_block_utf8_to_utf16(const char *&in, char16_t *&out, size_t gap) { // constants - __m512i mask_identity = _mm512_set_epi8(63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); + __m512i mask_identity = _mm512_set_epi8( + 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, + 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, + 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, + 8, 7, 6, 5, 4, 3, 2, 1, 0); __m512i mask_c0c0c0c0 = _mm512_set1_epi32(0xc0c0c0c0); __m512i mask_80808080 = _mm512_set1_epi32(0x80808080); __m512i mask_f0f0f0f0 = _mm512_set1_epi32(0xf0f0f0f0); - __m512i mask_dfdfdfdf_tail = _mm512_set_epi64(0xffffdfdfdfdfdfdf, 0xdfdfdfdfdfdfdfdf, 0xdfdfdfdfdfdfdfdf, 0xdfdfdfdfdfdfdfdf, 0xdfdfdfdfdfdfdfdf, 0xdfdfdfdfdfdfdfdf, 0xdfdfdfdfdfdfdfdf, 0xdfdfdfdfdfdfdfdf); + __m512i mask_dfdfdfdf_tail = _mm512_set_epi64( + 0xffffdfdfdfdfdfdf, 0xdfdfdfdfdfdfdfdf, 0xdfdfdfdfdfdfdfdf, + 0xdfdfdfdfdfdfdfdf, 0xdfdfdfdfdfdfdfdf, 0xdfdfdfdfdfdfdfdf, + 0xdfdfdfdfdfdfdfdf, 0xdfdfdfdfdfdfdfdf); __m512i mask_c2c2c2c2 = _mm512_set1_epi32(0xc2c2c2c2); __m512i mask_ffffffff = _mm512_set1_epi32(0xffffffff); __m512i mask_d7c0d7c0 = _mm512_set1_epi32(0xd7c0d7c0); __m512i mask_dc00dc00 = _mm512_set1_epi32(0xdc00dc00); - __m512i byteflip = _mm512_setr_epi64( - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809 - ); + __m512i byteflip = _mm512_setr_epi64(0x0607040502030001, 0x0e0f0c0d0a0b0809, + 0x0607040502030001, 0x0e0f0c0d0a0b0809, + 0x0607040502030001, 0x0e0f0c0d0a0b0809, + 0x0607040502030001, 0x0e0f0c0d0a0b0809); // Note that 'tail' is a compile-time constant ! - __mmask64 b = (tail == SIMDUTF_FULL) ? 0xFFFFFFFFFFFFFFFF : (uint64_t(1) << gap) - 1; - __m512i input = (tail == SIMDUTF_FULL) ? _mm512_loadu_si512(in) : _mm512_maskz_loadu_epi8(b, in); - __mmask64 m1 = (tail == SIMDUTF_FULL) ? _mm512_cmplt_epu8_mask(input, mask_80808080) : _mm512_mask_cmplt_epu8_mask(b, input, mask_80808080); - if(_ktestc_mask64_u8(m1, b)) {// NOT(m1) AND b -- if all zeroes, then all ASCII - // alternatively, we could do 'if (m1 == b) { ' + __mmask64 b = + (tail == SIMDUTF_FULL) ? 0xFFFFFFFFFFFFFFFF : (uint64_t(1) << gap) - 1; + __m512i input = (tail == SIMDUTF_FULL) ? _mm512_loadu_si512(in) + : _mm512_maskz_loadu_epi8(b, in); + __mmask64 m1 = (tail == SIMDUTF_FULL) + ? _mm512_cmplt_epu8_mask(input, mask_80808080) + : _mm512_mask_cmplt_epu8_mask(b, input, mask_80808080); + if (_ktestc_mask64_u8(m1, + b)) { // NOT(m1) AND b -- if all zeroes, then all ASCII + // alternatively, we could do 'if (m1 == b) { ' if (tail == SIMDUTF_FULL) { - in += 64; // consumed 64 bytes + in += 64; // consumed 64 bytes // we convert a full 64-byte block, writing 128 bytes. __m512i input1 = _mm512_cvtepu8_epi16(_mm512_castsi512_si256(input)); - if(big_endian) { input1 = _mm512_shuffle_epi8(input1, byteflip); } + if (big_endian) { + input1 = _mm512_shuffle_epi8(input1, byteflip); + } _mm512_storeu_si512(out, input1); out += 32; - __m512i input2 = _mm512_cvtepu8_epi16(_mm512_extracti64x4_epi64(input, 1)); - if(big_endian) { input2 = _mm512_shuffle_epi8(input2, byteflip); } + __m512i input2 = + _mm512_cvtepu8_epi16(_mm512_extracti64x4_epi64(input, 1)); + if (big_endian) { + input2 = _mm512_shuffle_epi8(input2, byteflip); + } _mm512_storeu_si512(out, input2); out += 32; return true; // we are done @@ -20013,60 +19988,85 @@ simdutf_really_inline bool process_block_utf8_to_utf16(const char *&in, char16_t in += gap; if (gap <= 32) { __m512i input1 = _mm512_cvtepu8_epi16(_mm512_castsi512_si256(input)); - if(big_endian) { input1 = _mm512_shuffle_epi8(input1, byteflip); } - _mm512_mask_storeu_epi16(out, __mmask32((uint64_t(1) << (gap)) - 1), input1); + if (big_endian) { + input1 = _mm512_shuffle_epi8(input1, byteflip); + } + _mm512_mask_storeu_epi16(out, __mmask32((uint64_t(1) << (gap)) - 1), + input1); out += gap; } else { __m512i input1 = _mm512_cvtepu8_epi16(_mm512_castsi512_si256(input)); - if(big_endian) { input1 = _mm512_shuffle_epi8(input1, byteflip); } + if (big_endian) { + input1 = _mm512_shuffle_epi8(input1, byteflip); + } _mm512_storeu_si512(out, input1); out += 32; - __m512i input2 = _mm512_cvtepu8_epi16(_mm512_extracti64x4_epi64(input, 1)); - if(big_endian) { input2 = _mm512_shuffle_epi8(input2, byteflip); } - _mm512_mask_storeu_epi16(out, __mmask32((uint32_t(1) << (gap - 32)) - 1), input2); + __m512i input2 = + _mm512_cvtepu8_epi16(_mm512_extracti64x4_epi64(input, 1)); + if (big_endian) { + input2 = _mm512_shuffle_epi8(input2, byteflip); + } + _mm512_mask_storeu_epi16( + out, __mmask32((uint32_t(1) << (gap - 32)) - 1), input2); out += gap - 32; } return true; // we are done } } // classify characters further - __mmask64 m234 = _mm512_cmp_epu8_mask(mask_c0c0c0c0, input, - _MM_CMPINT_LE); // 0xc0 <= input, 2, 3, or 4 leading byte - __mmask64 m34 = _mm512_cmp_epu8_mask(mask_dfdfdfdf_tail, input, - _MM_CMPINT_LT); // 0xdf < input, 3 or 4 leading byte - - __mmask64 milltwobytes = _mm512_mask_cmp_epu8_mask(m234, input, mask_c2c2c2c2, - _MM_CMPINT_LT); // 0xc0 <= input < 0xc2 (illegal two byte sequence) - // Overlong 2-byte sequence + __mmask64 m234 = _mm512_cmp_epu8_mask( + mask_c0c0c0c0, input, + _MM_CMPINT_LE); // 0xc0 <= input, 2, 3, or 4 leading byte + __mmask64 m34 = + _mm512_cmp_epu8_mask(mask_dfdfdfdf_tail, input, + _MM_CMPINT_LT); // 0xdf < input, 3 or 4 leading byte + + __mmask64 milltwobytes = _mm512_mask_cmp_epu8_mask( + m234, input, mask_c2c2c2c2, + _MM_CMPINT_LT); // 0xc0 <= input < 0xc2 (illegal two byte sequence) + // Overlong 2-byte sequence if (_ktestz_mask64_u8(milltwobytes, milltwobytes) == 0) { // Overlong 2-byte sequence return false; } if (_ktestz_mask64_u8(m34, m34) == 0) { - // We have a 3-byte sequence and/or a 2-byte sequence, or possibly even a 4-byte sequence! - __mmask64 m4 = _mm512_cmp_epu8_mask(input, mask_f0f0f0f0, - _MM_CMPINT_NLT); // 0xf0 <= zmm0 (4 byte start bytes) + // We have a 3-byte sequence and/or a 2-byte sequence, or possibly even a + // 4-byte sequence! + __mmask64 m4 = _mm512_cmp_epu8_mask( + input, mask_f0f0f0f0, + _MM_CMPINT_NLT); // 0xf0 <= zmm0 (4 byte start bytes) - __mmask64 mask_not_ascii = (tail == SIMDUTF_FULL) ? _knot_mask64(m1) : _kand_mask64(_knot_mask64(m1), b); + __mmask64 mask_not_ascii = (tail == SIMDUTF_FULL) + ? _knot_mask64(m1) + : _kand_mask64(_knot_mask64(m1), b); __mmask64 mp1 = _kshiftli_mask64(m234, 1); __mmask64 mp2 = _kshiftli_mask64(m34, 2); // We could do it as follows... - // if (_kortestz_mask64_u8(m4,m4)) { // compute the bitwise OR of the 64-bit masks a and b and return 1 if all zeroes - // but GCC generates better code when we do: - if (m4 == 0) { // compute the bitwise OR of the 64-bit masks a and b and return 1 if all zeroes + // if (_kortestz_mask64_u8(m4,m4)) { // compute the bitwise OR of the 64-bit + // masks a and b and return 1 if all zeroes but GCC generates better code + // when we do: + if (m4 == 0) { // compute the bitwise OR of the 64-bit masks a and b and + // return 1 if all zeroes // Fast path with 1,2,3 bytes __mmask64 mc = _kor_mask64(mp1, mp2); // expected continuation bytes __mmask64 m1234 = _kor_mask64(m1, m234); // mismatched continuation bytes: if (tail == SIMDUTF_FULL) { - __mmask64 xnormcm1234 = _kxnor_mask64(mc, m1234); // XNOR of mc and m1234 should be all zero if they differ + __mmask64 xnormcm1234 = _kxnor_mask64( + mc, + m1234); // XNOR of mc and m1234 should be all zero if they differ // the presence of a 1 bit indicates that they overlap. - // _kortestz_mask64_u8: compute the bitwise OR of 64-bit masksand return 1 if all zeroes. - if (!_kortestz_mask64_u8(xnormcm1234, xnormcm1234)) { return false; } + // _kortestz_mask64_u8: compute the bitwise OR of 64-bit masksand return + // 1 if all zeroes. + if (!_kortestz_mask64_u8(xnormcm1234, xnormcm1234)) { + return false; + } } else { __mmask64 bxorm1234 = _kxor_mask64(b, m1234); - if (mc != bxorm1234) { return false; } + if (mc != bxorm1234) { + return false; + } } // mend: identifying the last bytes of each sequence to be decoded __mmask64 mend = _kshiftri_mask64(m1234, 1); @@ -20074,36 +20074,56 @@ simdutf_really_inline bool process_block_utf8_to_utf16(const char *&in, char16_t mend = _kor_mask64(mend, (uint64_t(1) << (gap - 1))); } - __m512i last_and_third = _mm512_maskz_compress_epi8(mend, mask_identity); - __m512i last_and_thirdu16 = _mm512_cvtepu8_epi16(_mm512_castsi512_si256(last_and_third)); - - __m512i nonasciitags = _mm512_maskz_mov_epi8(mask_not_ascii, mask_c0c0c0c0); // ASCII: 00000000 other: 11000000 - __m512i clearedbytes = _mm512_andnot_si512(nonasciitags, input); // high two bits cleared where not ASCII - __m512i lastbytes = _mm512_maskz_permutexvar_epi8(0x5555555555555555, last_and_thirdu16, - clearedbytes); // the last byte of each character - - __mmask64 mask_before_non_ascii = _kshiftri_mask64(mask_not_ascii, 1); // bytes that precede non-ASCII bytes - __m512i indexofsecondlastbytes = _mm512_add_epi16(mask_ffffffff, last_and_thirdu16); // indices of the second last bytes - __m512i beforeasciibytes = _mm512_maskz_mov_epi8(mask_before_non_ascii, clearedbytes); - __m512i secondlastbytes = _mm512_maskz_permutexvar_epi8(0x5555555555555555, indexofsecondlastbytes, - beforeasciibytes); // the second last bytes (of two, three byte seq, - // surrogates) - secondlastbytes = _mm512_slli_epi16(secondlastbytes, 6); // shifted into position - - __m512i indexofthirdlastbytes = _mm512_add_epi16(mask_ffffffff, - indexofsecondlastbytes); // indices of the second last bytes - __m512i thirdlastbyte = _mm512_maskz_mov_epi8(m34, - clearedbytes); // only those that are the third last byte of a sequence - __m512i thirdlastbytes = _mm512_maskz_permutexvar_epi8(0x5555555555555555, indexofthirdlastbytes, - thirdlastbyte); // the third last bytes (of three byte sequences, hi - // surrogate) - thirdlastbytes = _mm512_slli_epi16(thirdlastbytes, 12); // shifted into position - __m512i Wout = _mm512_ternarylogic_epi32(lastbytes, secondlastbytes, thirdlastbytes, 254); - // the elements of Wout excluding the last element if it happens to be a high surrogate: - - __mmask64 mprocessed = (tail == SIMDUTF_FULL) ? _pdep_u64(0xFFFFFFFF, mend) : _pdep_u64(0xFFFFFFFF, _kand_mask64(mend, b)); // we adjust mend at the end of the output. - + __m512i last_and_thirdu16 = + _mm512_cvtepu8_epi16(_mm512_castsi512_si256(last_and_third)); + + __m512i nonasciitags = _mm512_maskz_mov_epi8( + mask_not_ascii, mask_c0c0c0c0); // ASCII: 00000000 other: 11000000 + __m512i clearedbytes = _mm512_andnot_si512( + nonasciitags, input); // high two bits cleared where not ASCII + __m512i lastbytes = _mm512_maskz_permutexvar_epi8( + 0x5555555555555555, last_and_thirdu16, + clearedbytes); // the last byte of each character + + __mmask64 mask_before_non_ascii = _kshiftri_mask64( + mask_not_ascii, 1); // bytes that precede non-ASCII bytes + __m512i indexofsecondlastbytes = _mm512_add_epi16( + mask_ffffffff, last_and_thirdu16); // indices of the second last bytes + __m512i beforeasciibytes = + _mm512_maskz_mov_epi8(mask_before_non_ascii, clearedbytes); + __m512i secondlastbytes = _mm512_maskz_permutexvar_epi8( + 0x5555555555555555, indexofsecondlastbytes, + beforeasciibytes); // the second last bytes (of two, three byte seq, + // surrogates) + secondlastbytes = + _mm512_slli_epi16(secondlastbytes, 6); // shifted into position + + __m512i indexofthirdlastbytes = _mm512_add_epi16( + mask_ffffffff, + indexofsecondlastbytes); // indices of the second last bytes + __m512i thirdlastbyte = + _mm512_maskz_mov_epi8(m34, + clearedbytes); // only those that are the third + // last byte of a sequence + __m512i thirdlastbytes = _mm512_maskz_permutexvar_epi8( + 0x5555555555555555, indexofthirdlastbytes, + thirdlastbyte); // the third last bytes (of three byte sequences, hi + // surrogate) + thirdlastbytes = + _mm512_slli_epi16(thirdlastbytes, 12); // shifted into position + __m512i Wout = _mm512_ternarylogic_epi32(lastbytes, secondlastbytes, + thirdlastbytes, 254); + // the elements of Wout excluding the last element if it happens to be a + // high surrogate: + + __mmask64 mprocessed = + (tail == SIMDUTF_FULL) + ? _pdep_u64(0xFFFFFFFF, mend) + : _pdep_u64( + 0xFFFFFFFF, + _kand_mask64( + mend, b)); // we adjust mend at the end of the output. // Encodings out of range... { @@ -20112,15 +20132,21 @@ simdutf_really_inline bool process_block_utf8_to_utf16(const char *&in, char16_t // code units in Wout corresponding to 3-byte sequences. __mmask32 M3 = __mmask32(_pext_u64(m3 << 2, mend)); __m512i mask_08000800 = _mm512_set1_epi32(0x08000800); - __mmask32 Msmall800 = _mm512_mask_cmplt_epu16_mask(M3, Wout, mask_08000800); + __mmask32 Msmall800 = + _mm512_mask_cmplt_epu16_mask(M3, Wout, mask_08000800); __m512i mask_d800d800 = _mm512_set1_epi32(0xd800d800); __m512i Moutminusd800 = _mm512_sub_epi16(Wout, mask_d800d800); - __mmask32 M3s = _mm512_mask_cmplt_epu16_mask(M3, Moutminusd800, mask_08000800); - if (_kor_mask32(Msmall800, M3s)) { return false; } + __mmask32 M3s = + _mm512_mask_cmplt_epu16_mask(M3, Moutminusd800, mask_08000800); + if (_kor_mask32(Msmall800, M3s)) { + return false; + } } int64_t nout = _mm_popcnt_u64(mprocessed); - in += 64 - _lzcnt_u64(mprocessed); - if(big_endian) { Wout = _mm512_shuffle_epi8(Wout, byteflip); } + in += 64 - _lzcnt_u64(mprocessed); + if (big_endian) { + Wout = _mm512_shuffle_epi8(Wout, byteflip); + } _mm512_mask_storeu_epi16(out, __mmask32((uint64_t(1) << nout) - 1), Wout); out += nout; return true; // ok @@ -20129,64 +20155,96 @@ simdutf_really_inline bool process_block_utf8_to_utf16(const char *&in, char16_t // We have a 4-byte sequence, this is the general case. // Slow! __mmask64 mp3 = _kshiftli_mask64(m4, 3); - __mmask64 mc = _kor_mask64(_kor_mask64(mp1, mp2), mp3); // expected continuation bytes + __mmask64 mc = + _kor_mask64(_kor_mask64(mp1, mp2), mp3); // expected continuation bytes __mmask64 m1234 = _kor_mask64(m1, m234); // mend: identifying the last bytes of each sequence to be decoded - __mmask64 mend = _kor_mask64(_kshiftri_mask64(_kor_mask64(mp3, m1234), 1), mp3); + __mmask64 mend = + _kor_mask64(_kshiftri_mask64(_kor_mask64(mp3, m1234), 1), mp3); if (tail != SIMDUTF_FULL) { mend = _kor_mask64(mend, __mmask64(uint64_t(1) << (gap - 1))); } __m512i last_and_third = _mm512_maskz_compress_epi8(mend, mask_identity); - __m512i last_and_thirdu16 = _mm512_cvtepu8_epi16(_mm512_castsi512_si256(last_and_third)); - - __m512i nonasciitags = _mm512_maskz_mov_epi8(mask_not_ascii, mask_c0c0c0c0); // ASCII: 00000000 other: 11000000 - __m512i clearedbytes = _mm512_andnot_si512(nonasciitags, input); // high two bits cleared where not ASCII - __m512i lastbytes = _mm512_maskz_permutexvar_epi8(0x5555555555555555, last_and_thirdu16, - clearedbytes); // the last byte of each character - - __mmask64 mask_before_non_ascii = _kshiftri_mask64(mask_not_ascii, 1); // bytes that precede non-ASCII bytes - __m512i indexofsecondlastbytes = _mm512_add_epi16(mask_ffffffff, last_and_thirdu16); // indices of the second last bytes - __m512i beforeasciibytes = _mm512_maskz_mov_epi8(mask_before_non_ascii, clearedbytes); - __m512i secondlastbytes = _mm512_maskz_permutexvar_epi8(0x5555555555555555, indexofsecondlastbytes, - beforeasciibytes); // the second last bytes (of two, three byte seq, - // surrogates) - secondlastbytes = _mm512_slli_epi16(secondlastbytes, 6); // shifted into position - - __m512i indexofthirdlastbytes = _mm512_add_epi16(mask_ffffffff, - indexofsecondlastbytes); // indices of the second last bytes - __m512i thirdlastbyte = _mm512_maskz_mov_epi8(m34, - clearedbytes); // only those that are the third last byte of a sequence - __m512i thirdlastbytes = _mm512_maskz_permutexvar_epi8(0x5555555555555555, indexofthirdlastbytes, - thirdlastbyte); // the third last bytes (of three byte sequences, hi - // surrogate) - thirdlastbytes = _mm512_slli_epi16(thirdlastbytes, 12); // shifted into position - __m512i thirdsecondandlastbytes = _mm512_ternarylogic_epi32(lastbytes, secondlastbytes, thirdlastbytes, 254); + __m512i last_and_thirdu16 = + _mm512_cvtepu8_epi16(_mm512_castsi512_si256(last_and_third)); + + __m512i nonasciitags = _mm512_maskz_mov_epi8( + mask_not_ascii, mask_c0c0c0c0); // ASCII: 00000000 other: 11000000 + __m512i clearedbytes = _mm512_andnot_si512( + nonasciitags, input); // high two bits cleared where not ASCII + __m512i lastbytes = _mm512_maskz_permutexvar_epi8( + 0x5555555555555555, last_and_thirdu16, + clearedbytes); // the last byte of each character + + __mmask64 mask_before_non_ascii = _kshiftri_mask64( + mask_not_ascii, 1); // bytes that precede non-ASCII bytes + __m512i indexofsecondlastbytes = _mm512_add_epi16( + mask_ffffffff, last_and_thirdu16); // indices of the second last bytes + __m512i beforeasciibytes = + _mm512_maskz_mov_epi8(mask_before_non_ascii, clearedbytes); + __m512i secondlastbytes = _mm512_maskz_permutexvar_epi8( + 0x5555555555555555, indexofsecondlastbytes, + beforeasciibytes); // the second last bytes (of two, three byte seq, + // surrogates) + secondlastbytes = + _mm512_slli_epi16(secondlastbytes, 6); // shifted into position + + __m512i indexofthirdlastbytes = _mm512_add_epi16( + mask_ffffffff, + indexofsecondlastbytes); // indices of the second last bytes + __m512i thirdlastbyte = _mm512_maskz_mov_epi8( + m34, + clearedbytes); // only those that are the third last byte of a sequence + __m512i thirdlastbytes = _mm512_maskz_permutexvar_epi8( + 0x5555555555555555, indexofthirdlastbytes, + thirdlastbyte); // the third last bytes (of three byte sequences, hi + // surrogate) + thirdlastbytes = + _mm512_slli_epi16(thirdlastbytes, 12); // shifted into position + __m512i thirdsecondandlastbytes = _mm512_ternarylogic_epi32( + lastbytes, secondlastbytes, thirdlastbytes, 254); uint64_t Mlo_uint64 = _pext_u64(mp3, mend); __mmask32 Mlo = __mmask32(Mlo_uint64); __mmask32 Mhi = __mmask32(Mlo_uint64 >> 1); - __m512i lo_surr_mask = _mm512_maskz_mov_epi16(Mlo, - mask_dc00dc00); // lo surr: 1101110000000000, other: 0000000000000000 - __m512i shifted4_thirdsecondandlastbytes = _mm512_srli_epi16(thirdsecondandlastbytes, - 4); // hi surr: 00000WVUTSRQPNML vuts = WVUTS - 1 - __m512i tagged_lo_surrogates = _mm512_or_si512(thirdsecondandlastbytes, - lo_surr_mask); // lo surr: 110111KJHGFEDCBA, other: unchanged - __m512i Wout = _mm512_mask_add_epi16(tagged_lo_surrogates, Mhi, shifted4_thirdsecondandlastbytes, - mask_d7c0d7c0); // hi sur: 110110vutsRQPNML, other: unchanged - // the elements of Wout excluding the last element if it happens to be a high surrogate: + __m512i lo_surr_mask = _mm512_maskz_mov_epi16( + Mlo, + mask_dc00dc00); // lo surr: 1101110000000000, other: 0000000000000000 + __m512i shifted4_thirdsecondandlastbytes = + _mm512_srli_epi16(thirdsecondandlastbytes, + 4); // hi surr: 00000WVUTSRQPNML vuts = WVUTS - 1 + __m512i tagged_lo_surrogates = _mm512_or_si512( + thirdsecondandlastbytes, + lo_surr_mask); // lo surr: 110111KJHGFEDCBA, other: unchanged + __m512i Wout = _mm512_mask_add_epi16( + tagged_lo_surrogates, Mhi, shifted4_thirdsecondandlastbytes, + mask_d7c0d7c0); // hi sur: 110110vutsRQPNML, other: unchanged + // the elements of Wout excluding the last element if it happens to be a + // high surrogate: __mmask32 Mout = ~(Mhi & 0x80000000); - __mmask64 mprocessed = (tail == SIMDUTF_FULL) ? _pdep_u64(Mout, mend) : _pdep_u64(Mout, _kand_mask64(mend, b)); // we adjust mend at the end of the output. - + __mmask64 mprocessed = + (tail == SIMDUTF_FULL) + ? _pdep_u64(Mout, mend) + : _pdep_u64( + Mout, + _kand_mask64(mend, + b)); // we adjust mend at the end of the output. // mismatched continuation bytes: if (tail == SIMDUTF_FULL) { - __mmask64 xnormcm1234 = _kxnor_mask64(mc, m1234); // XNOR of mc and m1234 should be all zero if they differ + __mmask64 xnormcm1234 = _kxnor_mask64( + mc, m1234); // XNOR of mc and m1234 should be all zero if they differ // the presence of a 1 bit indicates that they overlap. - // _kortestz_mask64_u8: compute the bitwise OR of 64-bit masksand return 1 if all zeroes. - if (!_kortestz_mask64_u8(xnormcm1234, xnormcm1234)) { return false; } + // _kortestz_mask64_u8: compute the bitwise OR of 64-bit masksand return 1 + // if all zeroes. + if (!_kortestz_mask64_u8(xnormcm1234, xnormcm1234)) { + return false; + } } else { __mmask64 bxorm1234 = _kxor_mask64(b, m1234); - if (mc != bxorm1234) { return false; } + if (mc != bxorm1234) { + return false; + } } // Encodings out of range... { @@ -20195,33 +20253,50 @@ simdutf_really_inline bool process_block_utf8_to_utf16(const char *&in, char16_t // code units in Wout corresponding to 3-byte sequences. __mmask32 M3 = __mmask32(_pext_u64(m3 << 2, mend)); __m512i mask_08000800 = _mm512_set1_epi32(0x08000800); - __mmask32 Msmall800 = _mm512_mask_cmplt_epu16_mask(M3, Wout, mask_08000800); + __mmask32 Msmall800 = + _mm512_mask_cmplt_epu16_mask(M3, Wout, mask_08000800); __m512i mask_d800d800 = _mm512_set1_epi32(0xd800d800); __m512i Moutminusd800 = _mm512_sub_epi16(Wout, mask_d800d800); - __mmask32 M3s = _mm512_mask_cmplt_epu16_mask(M3, Moutminusd800, mask_08000800); + __mmask32 M3s = + _mm512_mask_cmplt_epu16_mask(M3, Moutminusd800, mask_08000800); __m512i mask_04000400 = _mm512_set1_epi32(0x04000400); - __mmask32 M4s = _mm512_mask_cmpge_epu16_mask(Mhi, Moutminusd800, mask_04000400); - if (!_kortestz_mask32_u8(M4s, _kor_mask32(Msmall800, M3s))) { return false; } + __mmask32 M4s = + _mm512_mask_cmpge_epu16_mask(Mhi, Moutminusd800, mask_04000400); + if (!_kortestz_mask32_u8(M4s, _kor_mask32(Msmall800, M3s))) { + return false; + } } in += 64 - _lzcnt_u64(mprocessed); int64_t nout = _mm_popcnt_u64(mprocessed); - if(big_endian) { Wout = _mm512_shuffle_epi8(Wout, byteflip); } + if (big_endian) { + Wout = _mm512_shuffle_epi8(Wout, byteflip); + } _mm512_mask_storeu_epi16(out, __mmask32((uint64_t(1) << nout) - 1), Wout); out += nout; return true; // ok } // Fast path 2: all ASCII or 2 byte - __mmask64 continuation_or_ascii = (tail == SIMDUTF_FULL) ? _knot_mask64(m234) : _kand_mask64(_knot_mask64(m234), b); + __mmask64 continuation_or_ascii = (tail == SIMDUTF_FULL) + ? _knot_mask64(m234) + : _kand_mask64(_knot_mask64(m234), b); // on top of -0xc0 we subtract -2 which we get back later of the // continuation byte tags __m512i leading2byte = _mm512_maskz_sub_epi8(m234, input, mask_c2c2c2c2); - __mmask64 leading = tail == (tail == SIMDUTF_FULL) ? _kor_mask64(m1, m234) : _kand_mask64(_kor_mask64(m1, m234), b); // first bytes of each sequence + __mmask64 leading = tail == (tail == SIMDUTF_FULL) + ? _kor_mask64(m1, m234) + : _kand_mask64(_kor_mask64(m1, m234), + b); // first bytes of each sequence if (tail == SIMDUTF_FULL) { - __mmask64 xnor234leading = _kxnor_mask64(_kshiftli_mask64(m234, 1), leading); - if (!_kortestz_mask64_u8(xnor234leading, xnor234leading)) { return false; } + __mmask64 xnor234leading = + _kxnor_mask64(_kshiftli_mask64(m234, 1), leading); + if (!_kortestz_mask64_u8(xnor234leading, xnor234leading)) { + return false; + } } else { __mmask64 bxorleading = _kxor_mask64(b, leading); - if (_kshiftli_mask64(m234, 1) != bxorleading) { return false; } + if (_kshiftli_mask64(m234, 1) != bxorleading) { + return false; + } } // if (tail == SIMDUTF_FULL) { @@ -20232,23 +20307,30 @@ simdutf_really_inline bool process_block_utf8_to_utf16(const char *&in, char16_t // Note that if x is an ASCII byte, then the following is false: // int8_t(x) <= int8_t(0xc0) under two's complement. in += 32; - if(int8_t(*in) <= int8_t(0xc0)) in++; + if (int8_t(*in) <= int8_t(0xc0)) + in++; // The alternative is to do // in += 64 - _lzcnt_u64(_pdep_u64(0xFFFFFFFF, continuation_or_ascii)); - // but it requires loading the input, doing the mask computation, and converting - // back the mask to a general register. It just takes too long, leaving the - // processor likely to be idle. + // but it requires loading the input, doing the mask computation, and + // converting back the mask to a general register. It just takes too long, + // leaving the processor likely to be idle. } else { in += 64 - _lzcnt_u64(_pdep_u64(0xFFFFFFFF, continuation_or_ascii)); } - __m512i lead = _mm512_maskz_compress_epi8(leading, leading2byte); // will contain zero for ascii, and the data - lead = _mm512_cvtepu8_epi16(_mm512_castsi512_si256(lead)); // ... zero extended into code units - __m512i follow = _mm512_maskz_compress_epi8(continuation_or_ascii, input); // the last bytes of each sequence - follow = _mm512_cvtepu8_epi16(_mm512_castsi512_si256(follow)); // ... zero extended into code units - lead = _mm512_slli_epi16(lead, 6); // shifted into position - __m512i final = _mm512_add_epi16(follow, lead); // combining lead and follow + __m512i lead = _mm512_maskz_compress_epi8( + leading, leading2byte); // will contain zero for ascii, and the data + lead = _mm512_cvtepu8_epi16( + _mm512_castsi512_si256(lead)); // ... zero extended into code units + __m512i follow = _mm512_maskz_compress_epi8( + continuation_or_ascii, input); // the last bytes of each sequence + follow = _mm512_cvtepu8_epi16( + _mm512_castsi512_si256(follow)); // ... zero extended into code units + lead = _mm512_slli_epi16(lead, 6); // shifted into position + __m512i final = _mm512_add_epi16(follow, lead); // combining lead and follow - if(big_endian) { final = _mm512_shuffle_epi8(final, byteflip); } + if (big_endian) { + final = _mm512_shuffle_epi8(final, byteflip); + } if (tail == SIMDUTF_FULL) { // Next part is UTF-16 specific and can be generalized to UTF-32. int nout = _mm_popcnt_u32(uint32_t(leading)); @@ -20263,9 +20345,6 @@ simdutf_really_inline bool process_block_utf8_to_utf16(const char *&in, char16_t return true; // we are fine. } - - - /* utf32_to_utf16_masked converts `count` lower UTF-32 code units from input `utf32` into UTF-16. It differs from utf32_to_utf16 @@ -20288,58 +20367,77 @@ simdutf_really_inline bool process_block_utf8_to_utf16(const char *&in, char16_t keep the value in a (constant) register. */ template -simdutf_really_inline size_t utf32_to_utf16_masked(const __m512i byteflip, __m512i utf32, unsigned int count, char16_t* output) { - - const __mmask16 valid = uint16_t((1 << count) - 1); - // 1. check if we have any surrogate pairs - const __m512i v_0000_ffff = _mm512_set1_epi32(0x0000ffff); - const __mmask16 sp_mask = _mm512_mask_cmpgt_epu32_mask(valid, utf32, v_0000_ffff); +simdutf_really_inline size_t utf32_to_utf16_masked(const __m512i byteflip, + __m512i utf32, + unsigned int count, + char16_t *output) { + + const __mmask16 valid = uint16_t((1 << count) - 1); + // 1. check if we have any surrogate pairs + const __m512i v_0000_ffff = _mm512_set1_epi32(0x0000ffff); + const __mmask16 sp_mask = + _mm512_mask_cmpgt_epu32_mask(valid, utf32, v_0000_ffff); + + if (sp_mask == 0) { + if (big_endian) { + _mm256_mask_storeu_epi16( + (__m256i *)output, valid, + _mm256_shuffle_epi8(_mm512_cvtepi32_epi16(utf32), + _mm512_castsi512_si256(byteflip))); - if (sp_mask == 0) { - if(big_endian) { - _mm256_mask_storeu_epi16((__m256i*)output, valid, _mm256_shuffle_epi8(_mm512_cvtepi32_epi16(utf32), _mm512_castsi512_si256(byteflip))); + } else { + _mm256_mask_storeu_epi16((__m256i *)output, valid, + _mm512_cvtepi32_epi16(utf32)); + } + return count; + } - } else { - _mm256_mask_storeu_epi16((__m256i*)output, valid, _mm512_cvtepi32_epi16(utf32)); - } - return count; + { + // build surrogate pair code units in 32-bit lanes + + // t0 = 8 x [000000000000aaaa|aaaaaabbbbbbbbbb] + const __m512i v_0001_0000 = _mm512_set1_epi32(0x00010000); + const __m512i t0 = _mm512_sub_epi32(utf32, v_0001_0000); + + // t1 = 8 x [000000aaaaaaaaaa|bbbbbbbbbb000000] + const __m512i t1 = _mm512_slli_epi32(t0, 6); + + // t2 = 8 x [000000aaaaaaaaaa|aaaaaabbbbbbbbbb] -- copy hi word from t1 + // to t0 + // 0xe4 = (t1 and v_ffff_0000) or (t0 and not v_ffff_0000) + const __m512i v_ffff_0000 = _mm512_set1_epi32(0xffff0000); + const __m512i t2 = _mm512_ternarylogic_epi32(t1, t0, v_ffff_0000, 0xe4); + + // t2 = 8 x [110110aaaaaaaaaa|110111bbbbbbbbbb] -- copy hi word from t1 + // to t0 + // 0xba = (t2 and not v_fc00_fc000) or v_d800_dc00 + const __m512i v_fc00_fc00 = _mm512_set1_epi32(0xfc00fc00); + const __m512i v_d800_dc00 = _mm512_set1_epi32(0xd800dc00); + const __m512i t3 = + _mm512_ternarylogic_epi32(t2, v_fc00_fc00, v_d800_dc00, 0xba); + const __m512i t4 = _mm512_mask_blend_epi32(sp_mask, utf32, t3); + __m512i t5 = _mm512_ror_epi32(t4, 16); + // Here we want to trim all of the upper 16-bit code units from the 2-byte + // characters represented as 4-byte values. We can compute it from + // sp_mask or the following... It can be more optimized! + const __mmask32 nonzero = _kor_mask32( + 0xaaaaaaaa, _mm512_cmpneq_epi16_mask(t5, _mm512_setzero_si512())); + const __mmask32 nonzero_masked = + _kand_mask32(nonzero, __mmask32((uint64_t(1) << (2 * count)) - 1)); + if (big_endian) { + t5 = _mm512_shuffle_epi8(t5, byteflip); } + // we deliberately avoid _mm512_mask_compressstoreu_epi16 for portability + // (zen4) + __m512i compressed = _mm512_maskz_compress_epi16(nonzero_masked, t5); + _mm512_mask_storeu_epi16( + output, + (1 << (count + static_cast(count_ones(sp_mask)))) - 1, + compressed); + //_mm512_mask_compressstoreu_epi16(output, nonzero_masked, t5); + } - { - // build surrogate pair code units in 32-bit lanes - - // t0 = 8 x [000000000000aaaa|aaaaaabbbbbbbbbb] - const __m512i v_0001_0000 = _mm512_set1_epi32(0x00010000); - const __m512i t0 = _mm512_sub_epi32(utf32, v_0001_0000); - - // t1 = 8 x [000000aaaaaaaaaa|bbbbbbbbbb000000] - const __m512i t1 = _mm512_slli_epi32(t0, 6); - - // t2 = 8 x [000000aaaaaaaaaa|aaaaaabbbbbbbbbb] -- copy hi word from t1 to t0 - // 0xe4 = (t1 and v_ffff_0000) or (t0 and not v_ffff_0000) - const __m512i v_ffff_0000 = _mm512_set1_epi32(0xffff0000); - const __m512i t2 = _mm512_ternarylogic_epi32(t1, t0, v_ffff_0000, 0xe4); - - // t2 = 8 x [110110aaaaaaaaaa|110111bbbbbbbbbb] -- copy hi word from t1 to t0 - // 0xba = (t2 and not v_fc00_fc000) or v_d800_dc00 - const __m512i v_fc00_fc00 = _mm512_set1_epi32(0xfc00fc00); - const __m512i v_d800_dc00 = _mm512_set1_epi32(0xd800dc00); - const __m512i t3 = _mm512_ternarylogic_epi32(t2, v_fc00_fc00, v_d800_dc00, 0xba); - const __m512i t4 = _mm512_mask_blend_epi32(sp_mask, utf32, t3); - __m512i t5 = _mm512_ror_epi32(t4, 16); - // Here we want to trim all of the upper 16-bit code units from the 2-byte - // characters represented as 4-byte values. We can compute it from - // sp_mask or the following... It can be more optimized! - const __mmask32 nonzero = _kor_mask32(0xaaaaaaaa,_mm512_cmpneq_epi16_mask(t5, _mm512_setzero_si512())); - const __mmask32 nonzero_masked = _kand_mask32(nonzero, __mmask32((uint64_t(1) << (2*count)) - 1)); - if(big_endian) { t5 = _mm512_shuffle_epi8(t5, byteflip); } - // we deliberately avoid _mm512_mask_compressstoreu_epi16 for portability (zen4) - __m512i compressed = _mm512_maskz_compress_epi16(nonzero_masked, t5); - _mm512_mask_storeu_epi16(output, (1<<(count + static_cast(count_ones(sp_mask)))) - 1, compressed); - //_mm512_mask_compressstoreu_epi16(output, nonzero_masked, t5); - } - - return count + static_cast(count_ones(sp_mask)); + return count + static_cast(count_ones(sp_mask)); } /* @@ -20363,96 +20461,109 @@ simdutf_really_inline size_t utf32_to_utf16_masked(const __m512i byteflip, __m51 keep the value in a (constant) register. */ template -simdutf_really_inline size_t utf32_to_utf16(const __m512i byteflip, __m512i utf32, unsigned int count, char16_t* output) { - // check if we have any surrogate pairs - const __m512i v_0000_ffff = _mm512_set1_epi32(0x0000ffff); - const __mmask16 sp_mask = _mm512_cmpgt_epu32_mask(utf32, v_0000_ffff); - - if (sp_mask == 0) { - // technically, it should be _mm256_storeu_epi16 - if(big_endian) { - _mm256_storeu_si256((__m256i*)output, _mm256_shuffle_epi8(_mm512_cvtepi32_epi16(utf32),_mm512_castsi512_si256(byteflip))); - } else { - _mm256_storeu_si256((__m256i*)output, _mm512_cvtepi32_epi16(utf32)); - } - return count; +simdutf_really_inline size_t utf32_to_utf16(const __m512i byteflip, + __m512i utf32, unsigned int count, + char16_t *output) { + // check if we have any surrogate pairs + const __m512i v_0000_ffff = _mm512_set1_epi32(0x0000ffff); + const __mmask16 sp_mask = _mm512_cmpgt_epu32_mask(utf32, v_0000_ffff); + + if (sp_mask == 0) { + // technically, it should be _mm256_storeu_epi16 + if (big_endian) { + _mm256_storeu_si256( + (__m256i *)output, + _mm256_shuffle_epi8(_mm512_cvtepi32_epi16(utf32), + _mm512_castsi512_si256(byteflip))); + } else { + _mm256_storeu_si256((__m256i *)output, _mm512_cvtepi32_epi16(utf32)); } + return count; + } - { - // build surrogate pair code units in 32-bit lanes - - // t0 = 8 x [000000000000aaaa|aaaaaabbbbbbbbbb] - const __m512i v_0001_0000 = _mm512_set1_epi32(0x00010000); - const __m512i t0 = _mm512_sub_epi32(utf32, v_0001_0000); - - // t1 = 8 x [000000aaaaaaaaaa|bbbbbbbbbb000000] - const __m512i t1 = _mm512_slli_epi32(t0, 6); - - // t2 = 8 x [000000aaaaaaaaaa|aaaaaabbbbbbbbbb] -- copy hi word from t1 to t0 - // 0xe4 = (t1 and v_ffff_0000) or (t0 and not v_ffff_0000) - const __m512i v_ffff_0000 = _mm512_set1_epi32(0xffff0000); - const __m512i t2 = _mm512_ternarylogic_epi32(t1, t0, v_ffff_0000, 0xe4); - - // t2 = 8 x [110110aaaaaaaaaa|110111bbbbbbbbbb] -- copy hi word from t1 to t0 - // 0xba = (t2 and not v_fc00_fc000) or v_d800_dc00 - const __m512i v_fc00_fc00 = _mm512_set1_epi32(0xfc00fc00); - const __m512i v_d800_dc00 = _mm512_set1_epi32(0xd800dc00); - const __m512i t3 = _mm512_ternarylogic_epi32(t2, v_fc00_fc00, v_d800_dc00, 0xba); - const __m512i t4 = _mm512_mask_blend_epi32(sp_mask, utf32, t3); - __m512i t5 = _mm512_ror_epi32(t4, 16); - const __mmask32 nonzero = _kor_mask32(0xaaaaaaaa,_mm512_cmpneq_epi16_mask(t5, _mm512_setzero_si512())); - if(big_endian) { t5 = _mm512_shuffle_epi8(t5, byteflip); } - // we deliberately avoid _mm512_mask_compressstoreu_epi16 for portability (zen4) - __m512i compressed = _mm512_maskz_compress_epi16(nonzero, t5); - _mm512_mask_storeu_epi16(output, (1<<(count + static_cast(count_ones(sp_mask)))) - 1, compressed); - //_mm512_mask_compressstoreu_epi16(output, nonzero, t5); + { + // build surrogate pair code units in 32-bit lanes + + // t0 = 8 x [000000000000aaaa|aaaaaabbbbbbbbbb] + const __m512i v_0001_0000 = _mm512_set1_epi32(0x00010000); + const __m512i t0 = _mm512_sub_epi32(utf32, v_0001_0000); + + // t1 = 8 x [000000aaaaaaaaaa|bbbbbbbbbb000000] + const __m512i t1 = _mm512_slli_epi32(t0, 6); + + // t2 = 8 x [000000aaaaaaaaaa|aaaaaabbbbbbbbbb] -- copy hi word from t1 + // to t0 + // 0xe4 = (t1 and v_ffff_0000) or (t0 and not v_ffff_0000) + const __m512i v_ffff_0000 = _mm512_set1_epi32(0xffff0000); + const __m512i t2 = _mm512_ternarylogic_epi32(t1, t0, v_ffff_0000, 0xe4); + + // t2 = 8 x [110110aaaaaaaaaa|110111bbbbbbbbbb] -- copy hi word from t1 + // to t0 + // 0xba = (t2 and not v_fc00_fc000) or v_d800_dc00 + const __m512i v_fc00_fc00 = _mm512_set1_epi32(0xfc00fc00); + const __m512i v_d800_dc00 = _mm512_set1_epi32(0xd800dc00); + const __m512i t3 = + _mm512_ternarylogic_epi32(t2, v_fc00_fc00, v_d800_dc00, 0xba); + const __m512i t4 = _mm512_mask_blend_epi32(sp_mask, utf32, t3); + __m512i t5 = _mm512_ror_epi32(t4, 16); + const __mmask32 nonzero = _kor_mask32( + 0xaaaaaaaa, _mm512_cmpneq_epi16_mask(t5, _mm512_setzero_si512())); + if (big_endian) { + t5 = _mm512_shuffle_epi8(t5, byteflip); } + // we deliberately avoid _mm512_mask_compressstoreu_epi16 for portability + // (zen4) + __m512i compressed = _mm512_maskz_compress_epi16(nonzero, t5); + _mm512_mask_storeu_epi16( + output, + (1 << (count + static_cast(count_ones(sp_mask)))) - 1, + compressed); + //_mm512_mask_compressstoreu_epi16(output, nonzero, t5); + } - return count + static_cast(count_ones(sp_mask)); + return count + static_cast(count_ones(sp_mask)); } /** * Store the last N bytes of previous followed by 512-N bytes from input. */ -template -__m512i prev(__m512i input, __m512i previous) { - static_assert(N<=32, "N must be no larger than 32"); - const __m512i movemask = _mm512_setr_epi32(28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11); - const __m512i rotated = _mm512_permutex2var_epi32(input, movemask, previous); +template __m512i prev(__m512i input, __m512i previous) { + static_assert(N <= 32, "N must be no larger than 32"); + const __m512i movemask = + _mm512_setr_epi32(28, 29, 30, 31, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11); + const __m512i rotated = _mm512_permutex2var_epi32(input, movemask, previous); #if SIMDUTF_GCC8 || SIMDUTF_GCC9 - constexpr int shift = 16-N; // workaround for GCC8,9 - return _mm512_alignr_epi8(input, rotated, shift); + constexpr int shift = 16 - N; // workaround for GCC8,9 + return _mm512_alignr_epi8(input, rotated, shift); #else - return _mm512_alignr_epi8(input, rotated, 16-N); + return _mm512_alignr_epi8(input, rotated, 16 - N); #endif // SIMDUTF_GCC8 || SIMDUTF_GCC9 } template __m512i shuffle_epi128(__m512i v) { - static_assert((idx0 >= 0 && idx0 <= 3), "idx0 must be in range 0..3"); - static_assert((idx1 >= 0 && idx1 <= 3), "idx1 must be in range 0..3"); - static_assert((idx2 >= 0 && idx2 <= 3), "idx2 must be in range 0..3"); - static_assert((idx3 >= 0 && idx3 <= 3), "idx3 must be in range 0..3"); + static_assert((idx0 >= 0 && idx0 <= 3), "idx0 must be in range 0..3"); + static_assert((idx1 >= 0 && idx1 <= 3), "idx1 must be in range 0..3"); + static_assert((idx2 >= 0 && idx2 <= 3), "idx2 must be in range 0..3"); + static_assert((idx3 >= 0 && idx3 <= 3), "idx3 must be in range 0..3"); - constexpr unsigned shuffle = idx0 | (idx1 << 2) | (idx2 << 4) | (idx3 << 6); - return _mm512_shuffle_i32x4(v, v, shuffle); + constexpr unsigned shuffle = idx0 | (idx1 << 2) | (idx2 << 4) | (idx3 << 6); + return _mm512_shuffle_i32x4(v, v, shuffle); } -template -constexpr __m512i broadcast_epi128(__m512i v) { - return shuffle_epi128(v); +template constexpr __m512i broadcast_epi128(__m512i v) { + return shuffle_epi128(v); } /** * Current unused. */ -template -__m512i rotate_by_N_epi8(const __m512i input) { +template __m512i rotate_by_N_epi8(const __m512i input) { - // lanes order: 1, 2, 3, 0 => 0b00_11_10_01 - const __m512i permuted = _mm512_shuffle_i32x4(input, input, 0x39); + // lanes order: 1, 2, 3, 0 => 0b00_11_10_01 + const __m512i permuted = _mm512_shuffle_i32x4(input, input, 0x39); - return _mm512_alignr_epi8(permuted, input, N); + return _mm512_alignr_epi8(permuted, input, N); } /* @@ -20463,163 +20574,149 @@ __m512i rotate_by_N_epi8(const __m512i input) { 0x8080800N, where N is 4 highest bits from the leading byte; 0x80 resets corresponding bytes during pshufb. */ -simdutf_really_inline __m512i expanded_utf8_to_utf32(__m512i char_class, __m512i utf8) { - /* - Input: - - utf8: bytes stored at separate 32-bit code units - - valid: which code units have valid UTF-8 characters - - Bit layout of single word. We show 4 cases for each possible - UTF-8 character encoding. The `?` denotes bits we must not - assume their value. - - |10dd.dddd|10cc.cccc|10bb.bbbb|1111.0aaa| 4-byte char - |????.????|10cc.cccc|10bb.bbbb|1110.aaaa| 3-byte char - |????.????|????.????|10bb.bbbb|110a.aaaa| 2-byte char - |????.????|????.????|????.????|0aaa.aaaa| ASCII char - byte 3 byte 2 byte 1 byte 0 - */ - - /* 1. Reset control bits of continuation bytes and the MSB - of the leading byte; this makes all bytes unsigned (and - does not alter ASCII char). - - |00dd.dddd|00cc.cccc|00bb.bbbb|0111.0aaa| 4-byte char - |00??.????|00cc.cccc|00bb.bbbb|0110.aaaa| 3-byte char - |00??.????|00??.????|00bb.bbbb|010a.aaaa| 2-byte char - |00??.????|00??.????|00??.????|0aaa.aaaa| ASCII char - ^^ ^^ ^^ ^ - */ - __m512i values; - const __m512i v_3f3f_3f7f = _mm512_set1_epi32(0x3f3f3f7f); - values = _mm512_and_si512(utf8, v_3f3f_3f7f); - - /* 2. Swap and join fields A-B and C-D - - |0000.cccc|ccdd.dddd|0001.110a|aabb.bbbb| 4-byte char - |0000.cccc|cc??.????|0001.10aa|aabb.bbbb| 3-byte char - |0000.????|????.????|0001.0aaa|aabb.bbbb| 2-byte char - |0000.????|????.????|000a.aaaa|aa??.????| ASCII char */ - const __m512i v_0140_0140 = _mm512_set1_epi32(0x01400140); - values = _mm512_maddubs_epi16(values, v_0140_0140); - - /* 3. Swap and join fields AB & CD - - |0000.0001|110a.aabb|bbbb.cccc|ccdd.dddd| 4-byte char - |0000.0001|10aa.aabb|bbbb.cccc|cc??.????| 3-byte char - |0000.0001|0aaa.aabb|bbbb.????|????.????| 2-byte char - |0000.000a|aaaa.aa??|????.????|????.????| ASCII char */ - const __m512i v_0001_1000 = _mm512_set1_epi32(0x00011000); - values = _mm512_madd_epi16(values, v_0001_1000); - - /* 4. Shift left the values by variable amounts to reset highest UTF-8 bits - |aaab.bbbb|bccc.cccd|dddd.d000|0000.0000| 4-byte char -- by 11 - |aaaa.bbbb|bbcc.cccc|????.??00|0000.0000| 3-byte char -- by 10 - |aaaa.abbb|bbb?.????|????.???0|0000.0000| 2-byte char -- by 9 - |aaaa.aaa?|????.????|????.????|?000.0000| ASCII char -- by 7 */ - { - /** pshufb - - continuation = 0 - ascii = 7 - _2_bytes = 9 - _3_bytes = 10 - _4_bytes = 11 - - shift_left_v3 = 4 * [ - ascii, # 0000 - ascii, # 0001 - ascii, # 0010 - ascii, # 0011 - ascii, # 0100 - ascii, # 0101 - ascii, # 0110 - ascii, # 0111 - continuation, # 1000 - continuation, # 1001 - continuation, # 1010 - continuation, # 1011 - _2_bytes, # 1100 - _2_bytes, # 1101 - _3_bytes, # 1110 - _4_bytes, # 1111 - ] */ - const __m512i shift_left_v3 = _mm512_setr_epi64( - 0x0707070707070707, - 0x0b0a090900000000, - 0x0707070707070707, - 0x0b0a090900000000, - 0x0707070707070707, - 0x0b0a090900000000, - 0x0707070707070707, - 0x0b0a090900000000 - ); - - const __m512i shift = _mm512_shuffle_epi8(shift_left_v3, char_class); - values = _mm512_sllv_epi32(values, shift); - } - - /* 5. Shift right the values by variable amounts to reset lowest bits - |0000.0000|000a.aabb|bbbb.cccc|ccdd.dddd| 4-byte char -- by 11 - |0000.0000|0000.0000|aaaa.bbbb|bbcc.cccc| 3-byte char -- by 16 - |0000.0000|0000.0000|0000.0aaa|aabb.bbbb| 2-byte char -- by 21 - |0000.0000|0000.0000|0000.0000|0aaa.aaaa| ASCII char -- by 25 */ - { - // 4 * [25, 25, 25, 25, 25, 25, 25, 25, 0, 0, 0, 0, 21, 21, 16, 11] - const __m512i shift_right = _mm512_setr_epi64( - 0x1919191919191919, - 0x0b10151500000000, - 0x1919191919191919, - 0x0b10151500000000, - 0x1919191919191919, - 0x0b10151500000000, - 0x1919191919191919, - 0x0b10151500000000 - ); +simdutf_really_inline __m512i expanded_utf8_to_utf32(__m512i char_class, + __m512i utf8) { + /* + Input: + - utf8: bytes stored at separate 32-bit code units + - valid: which code units have valid UTF-8 characters + + Bit layout of single word. We show 4 cases for each possible + UTF-8 character encoding. The `?` denotes bits we must not + assume their value. + + |10dd.dddd|10cc.cccc|10bb.bbbb|1111.0aaa| 4-byte char + |????.????|10cc.cccc|10bb.bbbb|1110.aaaa| 3-byte char + |????.????|????.????|10bb.bbbb|110a.aaaa| 2-byte char + |????.????|????.????|????.????|0aaa.aaaa| ASCII char + byte 3 byte 2 byte 1 byte 0 + */ + + /* 1. Reset control bits of continuation bytes and the MSB + of the leading byte; this makes all bytes unsigned (and + does not alter ASCII char). + + |00dd.dddd|00cc.cccc|00bb.bbbb|0111.0aaa| 4-byte char + |00??.????|00cc.cccc|00bb.bbbb|0110.aaaa| 3-byte char + |00??.????|00??.????|00bb.bbbb|010a.aaaa| 2-byte char + |00??.????|00??.????|00??.????|0aaa.aaaa| ASCII char + ^^ ^^ ^^ ^ + */ + __m512i values; + const __m512i v_3f3f_3f7f = _mm512_set1_epi32(0x3f3f3f7f); + values = _mm512_and_si512(utf8, v_3f3f_3f7f); + + /* 2. Swap and join fields A-B and C-D + + |0000.cccc|ccdd.dddd|0001.110a|aabb.bbbb| 4-byte char + |0000.cccc|cc??.????|0001.10aa|aabb.bbbb| 3-byte char + |0000.????|????.????|0001.0aaa|aabb.bbbb| 2-byte char + |0000.????|????.????|000a.aaaa|aa??.????| ASCII char */ + const __m512i v_0140_0140 = _mm512_set1_epi32(0x01400140); + values = _mm512_maddubs_epi16(values, v_0140_0140); + + /* 3. Swap and join fields AB & CD + + |0000.0001|110a.aabb|bbbb.cccc|ccdd.dddd| 4-byte char + |0000.0001|10aa.aabb|bbbb.cccc|cc??.????| 3-byte char + |0000.0001|0aaa.aabb|bbbb.????|????.????| 2-byte char + |0000.000a|aaaa.aa??|????.????|????.????| ASCII char */ + const __m512i v_0001_1000 = _mm512_set1_epi32(0x00011000); + values = _mm512_madd_epi16(values, v_0001_1000); + + /* 4. Shift left the values by variable amounts to reset highest UTF-8 bits + |aaab.bbbb|bccc.cccd|dddd.d000|0000.0000| 4-byte char -- by 11 + |aaaa.bbbb|bbcc.cccc|????.??00|0000.0000| 3-byte char -- by 10 + |aaaa.abbb|bbb?.????|????.???0|0000.0000| 2-byte char -- by 9 + |aaaa.aaa?|????.????|????.????|?000.0000| ASCII char -- by 7 */ + { + /** pshufb + + continuation = 0 + ascii = 7 + _2_bytes = 9 + _3_bytes = 10 + _4_bytes = 11 + + shift_left_v3 = 4 * [ + ascii, # 0000 + ascii, # 0001 + ascii, # 0010 + ascii, # 0011 + ascii, # 0100 + ascii, # 0101 + ascii, # 0110 + ascii, # 0111 + continuation, # 1000 + continuation, # 1001 + continuation, # 1010 + continuation, # 1011 + _2_bytes, # 1100 + _2_bytes, # 1101 + _3_bytes, # 1110 + _4_bytes, # 1111 + ] */ + const __m512i shift_left_v3 = _mm512_setr_epi64( + 0x0707070707070707, 0x0b0a090900000000, 0x0707070707070707, + 0x0b0a090900000000, 0x0707070707070707, 0x0b0a090900000000, + 0x0707070707070707, 0x0b0a090900000000); + + const __m512i shift = _mm512_shuffle_epi8(shift_left_v3, char_class); + values = _mm512_sllv_epi32(values, shift); + } + + /* 5. Shift right the values by variable amounts to reset lowest bits + |0000.0000|000a.aabb|bbbb.cccc|ccdd.dddd| 4-byte char -- by 11 + |0000.0000|0000.0000|aaaa.bbbb|bbcc.cccc| 3-byte char -- by 16 + |0000.0000|0000.0000|0000.0aaa|aabb.bbbb| 2-byte char -- by 21 + |0000.0000|0000.0000|0000.0000|0aaa.aaaa| ASCII char -- by 25 */ + { + // 4 * [25, 25, 25, 25, 25, 25, 25, 25, 0, 0, 0, 0, 21, 21, 16, 11] + const __m512i shift_right = _mm512_setr_epi64( + 0x1919191919191919, 0x0b10151500000000, 0x1919191919191919, + 0x0b10151500000000, 0x1919191919191919, 0x0b10151500000000, + 0x1919191919191919, 0x0b10151500000000); - const __m512i shift = _mm512_shuffle_epi8(shift_right, char_class); - values = _mm512_srlv_epi32(values, shift); - } + const __m512i shift = _mm512_shuffle_epi8(shift_right, char_class); + values = _mm512_srlv_epi32(values, shift); + } - return values; + return values; } - -simdutf_really_inline __m512i expand_and_identify(__m512i lane0, __m512i lane1, int &count) { - const __m512i merged = _mm512_mask_mov_epi32(lane0, 0x1000, lane1); - const __m512i expand_ver2 = _mm512_setr_epi64( - 0x0403020103020100, - 0x0605040305040302, - 0x0807060507060504, - 0x0a09080709080706, - 0x0c0b0a090b0a0908, - 0x0e0d0c0b0d0c0b0a, - 0x000f0e0d0f0e0d0c, - 0x0201000f01000f0e - ); - const __m512i input = _mm512_shuffle_epi8(merged, expand_ver2); - const __m512i v_0000_00c0 = _mm512_set1_epi32(0xc0); - const __m512i t0 = _mm512_and_si512(input, v_0000_00c0); - const __m512i v_0000_0080 = _mm512_set1_epi32(0x80); - const __mmask16 leading_bytes = _mm512_cmpneq_epu32_mask(t0, v_0000_0080); - count = static_cast(count_ones(leading_bytes)); - return _mm512_mask_compress_epi32(_mm512_setzero_si512(), leading_bytes, input); +simdutf_really_inline __m512i expand_and_identify(__m512i lane0, __m512i lane1, + int &count) { + const __m512i merged = _mm512_mask_mov_epi32(lane0, 0x1000, lane1); + const __m512i expand_ver2 = _mm512_setr_epi64( + 0x0403020103020100, 0x0605040305040302, 0x0807060507060504, + 0x0a09080709080706, 0x0c0b0a090b0a0908, 0x0e0d0c0b0d0c0b0a, + 0x000f0e0d0f0e0d0c, 0x0201000f01000f0e); + const __m512i input = _mm512_shuffle_epi8(merged, expand_ver2); + const __m512i v_0000_00c0 = _mm512_set1_epi32(0xc0); + const __m512i t0 = _mm512_and_si512(input, v_0000_00c0); + const __m512i v_0000_0080 = _mm512_set1_epi32(0x80); + const __mmask16 leading_bytes = _mm512_cmpneq_epu32_mask(t0, v_0000_0080); + count = static_cast(count_ones(leading_bytes)); + return _mm512_mask_compress_epi32(_mm512_setzero_si512(), leading_bytes, + input); } simdutf_really_inline __m512i expand_utf8_to_utf32(__m512i input) { - __m512i char_class = _mm512_srli_epi32(input, 4); - /* char_class = ((input >> 4) & 0x0f) | 0x80808000 */ - const __m512i v_0000_000f = _mm512_set1_epi32(0x0f); - const __m512i v_8080_8000 = _mm512_set1_epi32(0x80808000); - char_class = _mm512_ternarylogic_epi32(char_class, v_0000_000f, v_8080_8000, 0xea); - return expanded_utf8_to_utf32(char_class, input); + __m512i char_class = _mm512_srli_epi32(input, 4); + /* char_class = ((input >> 4) & 0x0f) | 0x80808000 */ + const __m512i v_0000_000f = _mm512_set1_epi32(0x0f); + const __m512i v_8080_8000 = _mm512_set1_epi32(0x80808000); + char_class = + _mm512_ternarylogic_epi32(char_class, v_0000_000f, v_8080_8000, 0xea); + return expanded_utf8_to_utf32(char_class, input); } /* end file src/icelake/icelake_utf8_common.inl.cpp */ /* begin file src/icelake/icelake_macros.inl.cpp */ /* - This upcoming macro (SIMDUTF_ICELAKE_TRANSCODE16) takes 16 + 4 bytes (of a UTF-8 string) - and loads all possible 4-byte substring into an AVX512 register. + This upcoming macro (SIMDUTF_ICELAKE_TRANSCODE16) takes 16 + 4 bytes (of a + UTF-8 string) and loads all possible 4-byte substring into an AVX512 + register. For example if we have bytes abcdefgh... we create following 32-bit lanes @@ -20628,8 +20725,9 @@ simdutf_really_inline __m512i expand_utf8_to_utf32(__m512i input) { byte 0 of reg byte 63 of reg */ /** pshufb - # lane{0,1,2} have got bytes: [ 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15] - # lane3 has got bytes: [ 16, 17, 18, 19, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15] + # lane{0,1,2} have got bytes: [ 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, + 11, 12, 13, 14, 15] # lane3 has got bytes: [ 16, 17, 18, 19, 4, 5, + 6, 8, 9, 10, 11, 12, 13, 14, 15] expand_ver2 = [ # lane 0: @@ -20650,105 +20748,113 @@ simdutf_really_inline __m512i expand_utf8_to_utf32(__m512i input) { 10, 11, 12, 13, 11, 12, 13, 14, - # lane 3 order: 13, 14, 15, 16 14, 15, 16, 17, 15, 16, 17, 18, 16, 17, 18, 19 - 12, 13, 14, 15, - 13, 14, 15, 0, - 14, 15, 0, 1, - 15, 0, 1, 2, + # lane 3 order: 13, 14, 15, 16 14, 15, 16, 17, 15, 16, 17, 18, 16, + 17, 18, 19 12, 13, 14, 15, 13, 14, 15, 0, 14, 15, 0, 1, 15, 0, 1, 2, ] */ -#define SIMDUTF_ICELAKE_TRANSCODE16(LANE0, LANE1, MASKED) \ - { \ - const __m512i merged = _mm512_mask_mov_epi32(LANE0, 0x1000, LANE1); \ - const __m512i expand_ver2 = _mm512_setr_epi64( \ - 0x0403020103020100, \ - 0x0605040305040302, \ - 0x0807060507060504, \ - 0x0a09080709080706, \ - 0x0c0b0a090b0a0908, \ - 0x0e0d0c0b0d0c0b0a, \ - 0x000f0e0d0f0e0d0c, \ - 0x0201000f01000f0e \ - ); \ - const __m512i input = _mm512_shuffle_epi8(merged, expand_ver2); \ - \ - __mmask16 leading_bytes; \ - const __m512i v_0000_00c0 = _mm512_set1_epi32(0xc0); \ - const __m512i t0 = _mm512_and_si512(input, v_0000_00c0); \ - const __m512i v_0000_0080 = _mm512_set1_epi32(0x80); \ - leading_bytes = _mm512_cmpneq_epu32_mask(t0, v_0000_0080); \ - \ - __m512i char_class; \ - char_class = _mm512_srli_epi32(input, 4); \ - /* char_class = ((input >> 4) & 0x0f) | 0x80808000 */ \ - const __m512i v_0000_000f = _mm512_set1_epi32(0x0f); \ - const __m512i v_8080_8000 = _mm512_set1_epi32(0x80808000); \ - char_class = _mm512_ternarylogic_epi32(char_class, v_0000_000f, v_8080_8000, 0xea); \ - \ - const int valid_count = static_cast(count_ones(leading_bytes)); \ - const __m512i utf32 = expanded_utf8_to_utf32(char_class, input); \ - \ - const __m512i out = _mm512_mask_compress_epi32(_mm512_setzero_si512(), leading_bytes, utf32); \ - \ - if (UTF32) { \ - if(MASKED) { \ - const __mmask16 valid = uint16_t((1 << valid_count) - 1); \ - _mm512_mask_storeu_epi32((__m512i*)output, valid, out); \ - } else { \ - _mm512_storeu_si512((__m512i*)output, out); \ - } \ - output += valid_count; \ - } else { \ - if(MASKED) { \ - output += utf32_to_utf16_masked(byteflip, out, valid_count, reinterpret_cast(output)); \ - } else { \ - output += utf32_to_utf16(byteflip, out, valid_count, reinterpret_cast(output)); \ - } \ - } \ - } - -#define SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(INPUT, VALID_COUNT, MASKED) \ -{ \ - if (UTF32) { \ - if(MASKED) { \ - const __mmask16 valid_mask = uint16_t((1 << VALID_COUNT) - 1); \ - _mm512_mask_storeu_epi32((__m512i*)output, valid_mask, INPUT); \ - } else { \ - _mm512_storeu_si512((__m512i*)output, INPUT); \ - } \ - output += VALID_COUNT; \ - } else { \ - if(MASKED) { \ - output += utf32_to_utf16_masked(byteflip, INPUT, VALID_COUNT, reinterpret_cast(output)); \ - } else { \ - output += utf32_to_utf16(byteflip, INPUT, VALID_COUNT, reinterpret_cast(output)); \ - } \ - } \ -} - - -#define SIMDUTF_ICELAKE_STORE_ASCII(UTF32, utf8, output) \ - if (UTF32) { \ - const __m128i t0 = _mm512_castsi512_si128(utf8); \ - const __m128i t1 = _mm512_extracti32x4_epi32(utf8, 1); \ - const __m128i t2 = _mm512_extracti32x4_epi32(utf8, 2); \ - const __m128i t3 = _mm512_extracti32x4_epi32(utf8, 3); \ - _mm512_storeu_si512((__m512i*)(output + 0*16), _mm512_cvtepu8_epi32(t0)); \ - _mm512_storeu_si512((__m512i*)(output + 1*16), _mm512_cvtepu8_epi32(t1)); \ - _mm512_storeu_si512((__m512i*)(output + 2*16), _mm512_cvtepu8_epi32(t2)); \ - _mm512_storeu_si512((__m512i*)(output + 3*16), _mm512_cvtepu8_epi32(t3)); \ - } else { \ - const __m256i h0 = _mm512_castsi512_si256(utf8); \ - const __m256i h1 = _mm512_extracti64x4_epi64(utf8, 1); \ - if(big_endian) { \ - _mm512_storeu_si512((__m512i*)(output + 0*16), _mm512_shuffle_epi8(_mm512_cvtepu8_epi16(h0), byteflip)); \ - _mm512_storeu_si512((__m512i*)(output + 2*16), _mm512_shuffle_epi8(_mm512_cvtepu8_epi16(h1), byteflip)); \ - } else { \ - _mm512_storeu_si512((__m512i*)(output + 0*16), _mm512_cvtepu8_epi16(h0)); \ - _mm512_storeu_si512((__m512i*)(output + 2*16), _mm512_cvtepu8_epi16(h1)); \ - } \ - } +#define SIMDUTF_ICELAKE_TRANSCODE16(LANE0, LANE1, MASKED) \ + { \ + const __m512i merged = _mm512_mask_mov_epi32(LANE0, 0x1000, LANE1); \ + const __m512i expand_ver2 = _mm512_setr_epi64( \ + 0x0403020103020100, 0x0605040305040302, 0x0807060507060504, \ + 0x0a09080709080706, 0x0c0b0a090b0a0908, 0x0e0d0c0b0d0c0b0a, \ + 0x000f0e0d0f0e0d0c, 0x0201000f01000f0e); \ + const __m512i input = _mm512_shuffle_epi8(merged, expand_ver2); \ + \ + __mmask16 leading_bytes; \ + const __m512i v_0000_00c0 = _mm512_set1_epi32(0xc0); \ + const __m512i t0 = _mm512_and_si512(input, v_0000_00c0); \ + const __m512i v_0000_0080 = _mm512_set1_epi32(0x80); \ + leading_bytes = _mm512_cmpneq_epu32_mask(t0, v_0000_0080); \ + \ + __m512i char_class; \ + char_class = _mm512_srli_epi32(input, 4); \ + /* char_class = ((input >> 4) & 0x0f) | 0x80808000 */ \ + const __m512i v_0000_000f = _mm512_set1_epi32(0x0f); \ + const __m512i v_8080_8000 = _mm512_set1_epi32(0x80808000); \ + char_class = \ + _mm512_ternarylogic_epi32(char_class, v_0000_000f, v_8080_8000, 0xea); \ + \ + const int valid_count = static_cast(count_ones(leading_bytes)); \ + const __m512i utf32 = expanded_utf8_to_utf32(char_class, input); \ + \ + const __m512i out = _mm512_mask_compress_epi32(_mm512_setzero_si512(), \ + leading_bytes, utf32); \ + \ + if (UTF32) { \ + if (MASKED) { \ + const __mmask16 valid = uint16_t((1 << valid_count) - 1); \ + _mm512_mask_storeu_epi32((__m512i *)output, valid, out); \ + } else { \ + _mm512_storeu_si512((__m512i *)output, out); \ + } \ + output += valid_count; \ + } else { \ + if (MASKED) { \ + output += utf32_to_utf16_masked( \ + byteflip, out, valid_count, reinterpret_cast(output)); \ + } else { \ + output += utf32_to_utf16( \ + byteflip, out, valid_count, reinterpret_cast(output)); \ + } \ + } \ + } + +#define SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(INPUT, VALID_COUNT, MASKED) \ + { \ + if (UTF32) { \ + if (MASKED) { \ + const __mmask16 valid_mask = uint16_t((1 << VALID_COUNT) - 1); \ + _mm512_mask_storeu_epi32((__m512i *)output, valid_mask, INPUT); \ + } else { \ + _mm512_storeu_si512((__m512i *)output, INPUT); \ + } \ + output += VALID_COUNT; \ + } else { \ + if (MASKED) { \ + output += utf32_to_utf16_masked( \ + byteflip, INPUT, VALID_COUNT, \ + reinterpret_cast(output)); \ + } else { \ + output += \ + utf32_to_utf16(byteflip, INPUT, VALID_COUNT, \ + reinterpret_cast(output)); \ + } \ + } \ + } + +#define SIMDUTF_ICELAKE_STORE_ASCII(UTF32, utf8, output) \ + if (UTF32) { \ + const __m128i t0 = _mm512_castsi512_si128(utf8); \ + const __m128i t1 = _mm512_extracti32x4_epi32(utf8, 1); \ + const __m128i t2 = _mm512_extracti32x4_epi32(utf8, 2); \ + const __m128i t3 = _mm512_extracti32x4_epi32(utf8, 3); \ + _mm512_storeu_si512((__m512i *)(output + 0 * 16), \ + _mm512_cvtepu8_epi32(t0)); \ + _mm512_storeu_si512((__m512i *)(output + 1 * 16), \ + _mm512_cvtepu8_epi32(t1)); \ + _mm512_storeu_si512((__m512i *)(output + 2 * 16), \ + _mm512_cvtepu8_epi32(t2)); \ + _mm512_storeu_si512((__m512i *)(output + 3 * 16), \ + _mm512_cvtepu8_epi32(t3)); \ + } else { \ + const __m256i h0 = _mm512_castsi512_si256(utf8); \ + const __m256i h1 = _mm512_extracti64x4_epi64(utf8, 1); \ + if (big_endian) { \ + _mm512_storeu_si512( \ + (__m512i *)(output + 0 * 16), \ + _mm512_shuffle_epi8(_mm512_cvtepu8_epi16(h0), byteflip)); \ + _mm512_storeu_si512( \ + (__m512i *)(output + 2 * 16), \ + _mm512_shuffle_epi8(_mm512_cvtepu8_epi16(h1), byteflip)); \ + } else { \ + _mm512_storeu_si512((__m512i *)(output + 0 * 16), \ + _mm512_cvtepu8_epi16(h0)); \ + _mm512_storeu_si512((__m512i *)(output + 2 * 16), \ + _mm512_cvtepu8_epi16(h1)); \ + } \ + } /* end file src/icelake/icelake_macros.inl.cpp */ /* begin file src/icelake/icelake_from_valid_utf8.inl.cpp */ // file included directly @@ -20771,250 +20877,240 @@ simdutf_really_inline __m512i expand_utf8_to_utf32(__m512i input) { - pair.second - the first unprocessed output word */ template -std::pair valid_utf8_to_fixed_length(const char* str, size_t len, OUTPUT* dwords) { - constexpr bool UTF32 = std::is_same::value; - constexpr bool UTF16 = std::is_same::value; - static_assert(UTF32 or UTF16, "output type has to be uint32_t (for UTF-32) or char16_t (for UTF-16)"); - static_assert(!(UTF32 and big_endian), "we do not currently support big-endian UTF-32"); +std::pair +valid_utf8_to_fixed_length(const char *str, size_t len, OUTPUT *dwords) { + constexpr bool UTF32 = std::is_same::value; + constexpr bool UTF16 = std::is_same::value; + static_assert( + UTF32 or UTF16, + "output type has to be uint32_t (for UTF-32) or char16_t (for UTF-16)"); + static_assert(!(UTF32 and big_endian), + "we do not currently support big-endian UTF-32"); - __m512i byteflip = _mm512_setr_epi64( - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809 - ); - const char* ptr = str; - const char* end = ptr + len; - - OUTPUT* output = dwords; - /** - * In the main loop, we consume 64 bytes per iteration, - * but we access 64 + 4 bytes. - * We check for ptr + 64 + 64 <= end because - * we want to be do maskless writes without overruns. - */ - while (end - ptr >= 64 + 4) { - const __m512i utf8 = _mm512_loadu_si512((const __m512i*)ptr); - const __m512i v_80 = _mm512_set1_epi8(char(0x80)); - const __mmask64 ascii = _mm512_test_epi8_mask(utf8, v_80); - if(ascii == 0) { - SIMDUTF_ICELAKE_STORE_ASCII(UTF32, utf8, output) - output += 64; - ptr += 64; - continue; - } + __m512i byteflip = _mm512_setr_epi64(0x0607040502030001, 0x0e0f0c0d0a0b0809, + 0x0607040502030001, 0x0e0f0c0d0a0b0809, + 0x0607040502030001, 0x0e0f0c0d0a0b0809, + 0x0607040502030001, 0x0e0f0c0d0a0b0809); + const char *ptr = str; + const char *end = ptr + len; - const __m512i lane0 = broadcast_epi128<0>(utf8); - const __m512i lane1 = broadcast_epi128<1>(utf8); - int valid_count0; - __m512i vec0 = expand_and_identify(lane0, lane1, valid_count0); - const __m512i lane2 = broadcast_epi128<2>(utf8); - int valid_count1; - __m512i vec1 = expand_and_identify(lane1, lane2, valid_count1); - if(valid_count0 + valid_count1 <= 16) { - vec0 = _mm512_mask_expand_epi32(vec0, __mmask16(((1<(utf8); - int valid_count2; - __m512i vec2 = expand_and_identify(lane2, lane3, valid_count2); - uint32_t tmp1; - ::memcpy(&tmp1, ptr + 64, sizeof(tmp1)); - const __m512i lane4 = _mm512_set1_epi32(tmp1); - int valid_count3; - __m512i vec3 = expand_and_identify(lane3, lane4, valid_count3); - if(valid_count2 + valid_count3 <= 16) { - vec2 = _mm512_mask_expand_epi32(vec2, __mmask16(((1<= 64 + 4) { + const __m512i utf8 = _mm512_loadu_si512((const __m512i *)ptr); + const __m512i v_80 = _mm512_set1_epi8(char(0x80)); + const __mmask64 ascii = _mm512_test_epi8_mask(utf8, v_80); + if (ascii == 0) { + SIMDUTF_ICELAKE_STORE_ASCII(UTF32, utf8, output) + output += 64; + ptr += 64; + continue; } - if (end - ptr >= 64) { - const __m512i utf8 = _mm512_loadu_si512((const __m512i*)ptr); - const __m512i v_80 = _mm512_set1_epi8(char(0x80)); - const __mmask64 ascii = _mm512_test_epi8_mask(utf8, v_80); - if(ascii == 0) { - SIMDUTF_ICELAKE_STORE_ASCII(UTF32, utf8, output) - output += 64; - ptr += 64; - } else { - const __m512i lane0 = broadcast_epi128<0>(utf8); - const __m512i lane1 = broadcast_epi128<1>(utf8); - int valid_count0; - __m512i vec0 = expand_and_identify(lane0, lane1, valid_count0); - const __m512i lane2 = broadcast_epi128<2>(utf8); - int valid_count1; - __m512i vec1 = expand_and_identify(lane1, lane2, valid_count1); - if(valid_count0 + valid_count1 <= 16) { - vec0 = _mm512_mask_expand_epi32(vec0, __mmask16(((1<(utf8); - SIMDUTF_ICELAKE_TRANSCODE16(lane2, lane3, true) - - ptr += 3*16; - } + const __m512i lane0 = broadcast_epi128<0>(utf8); + const __m512i lane1 = broadcast_epi128<1>(utf8); + int valid_count0; + __m512i vec0 = expand_and_identify(lane0, lane1, valid_count0); + const __m512i lane2 = broadcast_epi128<2>(utf8); + int valid_count1; + __m512i vec1 = expand_and_identify(lane1, lane2, valid_count1); + if (valid_count0 + valid_count1 <= 16) { + vec0 = _mm512_mask_expand_epi32( + vec0, __mmask16(((1 << valid_count1) - 1) << valid_count0), vec1); + valid_count0 += valid_count1; + vec0 = expand_utf8_to_utf32(vec0); + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec0, valid_count0, true) + } else { + vec0 = expand_utf8_to_utf32(vec0); + vec1 = expand_utf8_to_utf32(vec1); + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec0, valid_count0, true) + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec1, valid_count1, true) + } + const __m512i lane3 = broadcast_epi128<3>(utf8); + int valid_count2; + __m512i vec2 = expand_and_identify(lane2, lane3, valid_count2); + uint32_t tmp1; + ::memcpy(&tmp1, ptr + 64, sizeof(tmp1)); + const __m512i lane4 = _mm512_set1_epi32(tmp1); + int valid_count3; + __m512i vec3 = expand_and_identify(lane3, lane4, valid_count3); + if (valid_count2 + valid_count3 <= 16) { + vec2 = _mm512_mask_expand_epi32( + vec2, __mmask16(((1 << valid_count3) - 1) << valid_count2), vec3); + valid_count2 += valid_count3; + vec2 = expand_utf8_to_utf32(vec2); + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec2, valid_count2, true) + } else { + vec2 = expand_utf8_to_utf32(vec2); + vec3 = expand_utf8_to_utf32(vec3); + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec2, valid_count2, true) + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec3, valid_count3, true) } - return {ptr, output}; -} + ptr += 4 * 16; + } + + if (end - ptr >= 64) { + const __m512i utf8 = _mm512_loadu_si512((const __m512i *)ptr); + const __m512i v_80 = _mm512_set1_epi8(char(0x80)); + const __mmask64 ascii = _mm512_test_epi8_mask(utf8, v_80); + if (ascii == 0) { + SIMDUTF_ICELAKE_STORE_ASCII(UTF32, utf8, output) + output += 64; + ptr += 64; + } else { + const __m512i lane0 = broadcast_epi128<0>(utf8); + const __m512i lane1 = broadcast_epi128<1>(utf8); + int valid_count0; + __m512i vec0 = expand_and_identify(lane0, lane1, valid_count0); + const __m512i lane2 = broadcast_epi128<2>(utf8); + int valid_count1; + __m512i vec1 = expand_and_identify(lane1, lane2, valid_count1); + if (valid_count0 + valid_count1 <= 16) { + vec0 = _mm512_mask_expand_epi32( + vec0, __mmask16(((1 << valid_count1) - 1) << valid_count0), vec1); + valid_count0 += valid_count1; + vec0 = expand_utf8_to_utf32(vec0); + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec0, valid_count0, true) + } else { + vec0 = expand_utf8_to_utf32(vec0); + vec1 = expand_utf8_to_utf32(vec1); + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec0, valid_count0, true) + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec1, valid_count1, true) + } + + const __m512i lane3 = broadcast_epi128<3>(utf8); + SIMDUTF_ICELAKE_TRANSCODE16(lane2, lane3, true) + ptr += 3 * 16; + } + } + return {ptr, output}; +} -using utf8_to_utf16_result = std::pair; +using utf8_to_utf16_result = std::pair; /* end file src/icelake/icelake_from_valid_utf8.inl.cpp */ /* begin file src/icelake/icelake_utf8_validation.inl.cpp */ // file included directly +simdutf_really_inline __m512i check_special_cases(__m512i input, + const __m512i prev1) { + __m512i mask1 = _mm512_setr_epi64(0x0202020202020202, 0x4915012180808080, + 0x0202020202020202, 0x4915012180808080, + 0x0202020202020202, 0x4915012180808080, + 0x0202020202020202, 0x4915012180808080); + const __m512i v_0f = _mm512_set1_epi8(0x0f); + __m512i index1 = _mm512_and_si512(_mm512_srli_epi16(prev1, 4), v_0f); + + __m512i byte_1_high = _mm512_shuffle_epi8(mask1, index1); + __m512i mask2 = _mm512_setr_epi64(0xcbcbcb8b8383a3e7, 0xcbcbdbcbcbcbcbcb, + 0xcbcbcb8b8383a3e7, 0xcbcbdbcbcbcbcbcb, + 0xcbcbcb8b8383a3e7, 0xcbcbdbcbcbcbcbcb, + 0xcbcbcb8b8383a3e7, 0xcbcbdbcbcbcbcbcb); + __m512i index2 = _mm512_and_si512(prev1, v_0f); + + __m512i byte_1_low = _mm512_shuffle_epi8(mask2, index2); + __m512i mask3 = + _mm512_setr_epi64(0x101010101010101, 0x1010101babaaee6, 0x101010101010101, + 0x1010101babaaee6, 0x101010101010101, 0x1010101babaaee6, + 0x101010101010101, 0x1010101babaaee6); + __m512i index3 = _mm512_and_si512(_mm512_srli_epi16(input, 4), v_0f); + __m512i byte_2_high = _mm512_shuffle_epi8(mask3, index3); + return _mm512_ternarylogic_epi64(byte_1_high, byte_1_low, byte_2_high, 128); +} + +simdutf_really_inline __m512i check_multibyte_lengths(const __m512i input, + const __m512i prev_input, + const __m512i sc) { + __m512i prev2 = prev<2>(input, prev_input); + __m512i prev3 = prev<3>(input, prev_input); + __m512i is_third_byte = _mm512_subs_epu8( + prev2, _mm512_set1_epi8(0b11100000u - 1)); // Only 111_____ will be > 0 + __m512i is_fourth_byte = _mm512_subs_epu8( + prev3, _mm512_set1_epi8(0b11110000u - 1)); // Only 1111____ will be > 0 + __m512i is_third_or_fourth_byte = + _mm512_or_si512(is_third_byte, is_fourth_byte); + const __m512i v_7f = _mm512_set1_epi8(char(0x7f)); + is_third_or_fourth_byte = _mm512_adds_epu8(v_7f, is_third_or_fourth_byte); + // We want to compute (is_third_or_fourth_byte AND v80) XOR sc. + const __m512i v_80 = _mm512_set1_epi8(char(0x80)); + return _mm512_ternarylogic_epi32(is_third_or_fourth_byte, v_80, sc, + 0b1101010); + //__m512i is_third_or_fourth_byte_mask = + //_mm512_and_si512(is_third_or_fourth_byte, v_80); return + // _mm512_xor_si512(is_third_or_fourth_byte_mask, sc); +} +// +// Return nonzero if there are incomplete multibyte characters at the end of the +// block: e.g. if there is a 4-byte character, but it is 3 bytes from the end. +// +simdutf_really_inline __m512i is_incomplete(const __m512i input) { + // If the previous input's last 3 bytes match this, they're too short (they + // ended at EOF): + // ... 1111____ 111_____ 11______ + __m512i max_value = _mm512_setr_epi64(0xffffffffffffffff, 0xffffffffffffffff, + 0xffffffffffffffff, 0xffffffffffffffff, + 0xffffffffffffffff, 0xffffffffffffffff, + 0xffffffffffffffff, 0xbfdfefffffffffff); + return _mm512_subs_epu8(input, max_value); +} + +struct avx512_utf8_checker { + // If this is nonzero, there has been a UTF-8 error. + __m512i error{}; + + // The last input we received + __m512i prev_input_block{}; + // Whether the last input we received was incomplete (used for ASCII fast + // path) + __m512i prev_incomplete{}; -simdutf_really_inline __m512i check_special_cases(__m512i input, const __m512i prev1) { - __m512i mask1 = _mm512_setr_epi64( - 0x0202020202020202, - 0x4915012180808080, - 0x0202020202020202, - 0x4915012180808080, - 0x0202020202020202, - 0x4915012180808080, - 0x0202020202020202, - 0x4915012180808080); - const __m512i v_0f = _mm512_set1_epi8(0x0f); - __m512i index1 = _mm512_and_si512(_mm512_srli_epi16(prev1, 4), v_0f); - - __m512i byte_1_high = _mm512_shuffle_epi8(mask1, index1); - __m512i mask2 = _mm512_setr_epi64( - 0xcbcbcb8b8383a3e7, - 0xcbcbdbcbcbcbcbcb, - 0xcbcbcb8b8383a3e7, - 0xcbcbdbcbcbcbcbcb, - 0xcbcbcb8b8383a3e7, - 0xcbcbdbcbcbcbcbcb, - 0xcbcbcb8b8383a3e7, - 0xcbcbdbcbcbcbcbcb); - __m512i index2 = _mm512_and_si512(prev1, v_0f); - - __m512i byte_1_low = _mm512_shuffle_epi8(mask2, index2); - __m512i mask3 = _mm512_setr_epi64( - 0x101010101010101, - 0x1010101babaaee6, - 0x101010101010101, - 0x1010101babaaee6, - 0x101010101010101, - 0x1010101babaaee6, - 0x101010101010101, - 0x1010101babaaee6 - ); - __m512i index3 = _mm512_and_si512(_mm512_srli_epi16(input, 4), v_0f); - __m512i byte_2_high = _mm512_shuffle_epi8(mask3, index3); - return _mm512_ternarylogic_epi64(byte_1_high, byte_1_low, byte_2_high, 128); - } - - simdutf_really_inline __m512i check_multibyte_lengths(const __m512i input, - const __m512i prev_input, const __m512i sc) { - __m512i prev2 = prev<2>(input, prev_input); - __m512i prev3 = prev<3>(input, prev_input); - __m512i is_third_byte = _mm512_subs_epu8(prev2, _mm512_set1_epi8(0b11100000u-1)); // Only 111_____ will be > 0 - __m512i is_fourth_byte = _mm512_subs_epu8(prev3, _mm512_set1_epi8(0b11110000u-1)); // Only 1111____ will be > 0 - __m512i is_third_or_fourth_byte = _mm512_or_si512(is_third_byte, is_fourth_byte); - const __m512i v_7f = _mm512_set1_epi8(char(0x7f)); - is_third_or_fourth_byte = _mm512_adds_epu8(v_7f, is_third_or_fourth_byte); - // We want to compute (is_third_or_fourth_byte AND v80) XOR sc. - const __m512i v_80 = _mm512_set1_epi8(char(0x80)); - return _mm512_ternarylogic_epi32(is_third_or_fourth_byte, v_80, sc, 0b1101010); - //__m512i is_third_or_fourth_byte_mask = _mm512_and_si512(is_third_or_fourth_byte, v_80); - //return _mm512_xor_si512(is_third_or_fourth_byte_mask, sc); - } // - // Return nonzero if there are incomplete multibyte characters at the end of the block: - // e.g. if there is a 4-byte character, but it is 3 bytes from the end. + // Check whether the current bytes are valid UTF-8. // - simdutf_really_inline __m512i is_incomplete(const __m512i input) { - // If the previous input's last 3 bytes match this, they're too short (they ended at EOF): - // ... 1111____ 111_____ 11______ - __m512i max_value = _mm512_setr_epi64( - 0xffffffffffffffff, - 0xffffffffffffffff, - 0xffffffffffffffff, - 0xffffffffffffffff, - 0xffffffffffffffff, - 0xffffffffffffffff, - 0xffffffffffffffff, - 0xbfdfefffffffffff); - return _mm512_subs_epu8(input, max_value); - } - - struct avx512_utf8_checker { - // If this is nonzero, there has been a UTF-8 error. - __m512i error{}; - - // The last input we received - __m512i prev_input_block{}; - // Whether the last input we received was incomplete (used for ASCII fast path) - __m512i prev_incomplete{}; - - // - // Check whether the current bytes are valid UTF-8. - // - simdutf_really_inline void check_utf8_bytes(const __m512i input, const __m512i prev_input) { - // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ lead bytes - // (2, 3, 4-byte leads become large positive numbers instead of small negative numbers) - __m512i prev1 = prev<1>(input, prev_input); - __m512i sc = check_special_cases(input, prev1); - this->error = _mm512_or_si512(check_multibyte_lengths(input, prev_input, sc), this->error); - } - - // The only problem that can happen at EOF is that a multibyte character is too short - // or a byte value too large in the last bytes: check_special_cases only checks for bytes - // too large in the first of two bytes. - simdutf_really_inline void check_eof() { - // If the previous block had incomplete UTF-8 characters at the end, an ASCII block can't - // possibly finish them. + simdutf_really_inline void check_utf8_bytes(const __m512i input, + const __m512i prev_input) { + // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ + // lead bytes (2, 3, 4-byte leads become large positive numbers instead of + // small negative numbers) + __m512i prev1 = prev<1>(input, prev_input); + __m512i sc = check_special_cases(input, prev1); + this->error = _mm512_or_si512( + check_multibyte_lengths(input, prev_input, sc), this->error); + } + + // The only problem that can happen at EOF is that a multibyte character is + // too short or a byte value too large in the last bytes: check_special_cases + // only checks for bytes too large in the first of two bytes. + simdutf_really_inline void check_eof() { + // If the previous block had incomplete UTF-8 characters at the end, an + // ASCII block can't possibly finish them. + this->error = _mm512_or_si512(this->error, this->prev_incomplete); + } + + // returns true if ASCII. + simdutf_really_inline bool check_next_input(const __m512i input) { + const __m512i v_80 = _mm512_set1_epi8(char(0x80)); + const __mmask64 ascii = _mm512_test_epi8_mask(input, v_80); + if (ascii == 0) { this->error = _mm512_or_si512(this->error, this->prev_incomplete); + return true; + } else { + this->check_utf8_bytes(input, this->prev_input_block); + this->prev_incomplete = is_incomplete(input); + this->prev_input_block = input; + return false; } - - // returns true if ASCII. - simdutf_really_inline bool check_next_input(const __m512i input) { - const __m512i v_80 = _mm512_set1_epi8(char(0x80)); - const __mmask64 ascii = _mm512_test_epi8_mask(input, v_80); - if(ascii == 0) { - this->error = _mm512_or_si512(this->error, this->prev_incomplete); - return true; - } else { - this->check_utf8_bytes(input, this->prev_input_block); - this->prev_incomplete = is_incomplete(input); - this->prev_input_block = input; - return false; - } - } - // do not forget to call check_eof! - simdutf_really_inline bool errors() const { - return _mm512_test_epi8_mask(this->error, this->error) != 0; - } - }; // struct avx512_utf8_checker + } + // do not forget to call check_eof! + simdutf_really_inline bool errors() const { + return _mm512_test_epi8_mask(this->error, this->error) != 0; + } +}; // struct avx512_utf8_checker /* end file src/icelake/icelake_utf8_validation.inl.cpp */ /* begin file src/icelake/icelake_from_utf8.inl.cpp */ // file included directly @@ -21029,305 +21125,331 @@ simdutf_really_inline __m512i check_special_cases(__m512i input, const __m512i p */ template -utf8_to_utf16_result fast_avx512_convert_utf8_to_utf16(const char *in, size_t len, char16_t *out) { +utf8_to_utf16_result +fast_avx512_convert_utf8_to_utf16(const char *in, size_t len, char16_t *out) { const char *const final_in = in + len; bool result = true; while (result) { - if (final_in - in >= 64 ) { - result = process_block_utf8_to_utf16(in, out, final_in - in); - } else if(in < final_in) { - result = process_block_utf8_to_utf16(in, out, final_in - in); - } else { break; } + if (final_in - in >= 64) { + result = process_block_utf8_to_utf16( + in, out, final_in - in); + } else if (in < final_in) { + result = process_block_utf8_to_utf16( + in, out, final_in - in); + } else { + break; + } + } + if (!result) { + out = nullptr; } - if(!result) { out = nullptr; } return std::make_pair(in, out); } template -simdutf::result fast_avx512_convert_utf8_to_utf16_with_errors(const char *in, size_t len, char16_t *out) { +simdutf::result fast_avx512_convert_utf8_to_utf16_with_errors(const char *in, + size_t len, + char16_t *out) { const char *const init_in = in; const char16_t *const init_out = out; const char *const final_in = in + len; - bool result = true; + bool result = true; while (result) { - if (final_in - in >= 64 ) { - result = process_block_utf8_to_utf16(in, out, final_in - in); - } else if(in < final_in) { - result = process_block_utf8_to_utf16(in, out, final_in - in); - } else { break; } + if (final_in - in >= 64) { + result = process_block_utf8_to_utf16( + in, out, final_in - in); + } else if (in < final_in) { + result = process_block_utf8_to_utf16( + in, out, final_in - in); + } else { + break; + } } - if(!result) { + if (!result) { size_t pos = size_t(in - init_in); if (pos < len && (init_in[pos] & 0xc0) == 0x80 && pos >= 64) { // We must check whether we are the fourth continuation byte bool c1 = (init_in[pos - 1] & 0xc0) == 0x80; bool c2 = (init_in[pos - 2] & 0xc0) == 0x80; bool c3 = (init_in[pos - 3] & 0xc0) == 0x80; - if(c1 && c2 && c3) { + if (c1 && c2 && c3) { return {simdutf::TOO_LONG, pos}; } } - // rewind_and_convert_with_errors will seek a potential error from in onward, - // with the ability to go back up to in - init_in bytes, and read final_in - in bytes forward. - simdutf::result res = scalar::utf8_to_utf16::rewind_and_convert_with_errors(in - init_in, in, final_in - in, out); + // rewind_and_convert_with_errors will seek a potential error from in + // onward, with the ability to go back up to in - init_in bytes, and read + // final_in - in bytes forward. + simdutf::result res = + scalar::utf8_to_utf16::rewind_and_convert_with_errors( + in - init_in, in, final_in - in, out); res.count += (in - init_in); return res; } else { - return simdutf::result(error_code::SUCCESS,out - init_out); + return simdutf::result(error_code::SUCCESS, out - init_out); } } - template -// todo: replace with the utf-8 to utf-16 routine adapted to utf-32. This code is legacy. -std::pair validating_utf8_to_fixed_length(const char* str, size_t len, OUTPUT* dwords) { - constexpr bool UTF32 = std::is_same::value; - constexpr bool UTF16 = std::is_same::value; - static_assert(UTF32 or UTF16, "output type has to be uint32_t (for UTF-32) or char16_t (for UTF-16)"); - static_assert(!(UTF32 and big_endian), "we do not currently support big-endian UTF-32"); - - const char* ptr = str; - const char* end = ptr + len; - __m512i byteflip = _mm512_setr_epi64( - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809 - ); - OUTPUT* output = dwords; - avx512_utf8_checker checker{}; - /** - * In the main loop, we consume 64 bytes per iteration, - * but we access 64 + 4 bytes. - * We use masked writes to avoid overruns, see https://github.com/simdutf/simdutf/issues/471 - */ - while (end - ptr >= 64 + 4) { - const __m512i utf8 = _mm512_loadu_si512((const __m512i*)ptr); - if(checker.check_next_input(utf8)) { - SIMDUTF_ICELAKE_STORE_ASCII(UTF32, utf8, output) - output += 64; - ptr += 64; - continue; - } - const __m512i lane0 = broadcast_epi128<0>(utf8); - const __m512i lane1 = broadcast_epi128<1>(utf8); - int valid_count0; - __m512i vec0 = expand_and_identify(lane0, lane1, valid_count0); - const __m512i lane2 = broadcast_epi128<2>(utf8); - int valid_count1; - __m512i vec1 = expand_and_identify(lane1, lane2, valid_count1); - if(valid_count0 + valid_count1 <= 16) { - vec0 = _mm512_mask_expand_epi32(vec0, __mmask16(((1<(utf8); - int valid_count2; - __m512i vec2 = expand_and_identify(lane2, lane3, valid_count2); - uint32_t tmp1; - ::memcpy(&tmp1, ptr + 64, sizeof(tmp1)); - const __m512i lane4 = _mm512_set1_epi32(tmp1); - int valid_count3; - __m512i vec3 = expand_and_identify(lane3, lane4, valid_count3); - if(valid_count2 + valid_count3 <= 16) { - vec2 = _mm512_mask_expand_epi32(vec2, __mmask16(((1<= 64) { - const __m512i utf8 = _mm512_loadu_si512((const __m512i*)ptr); - if(checker.check_next_input(utf8)) { - SIMDUTF_ICELAKE_STORE_ASCII(UTF32, utf8, output) - output += 64; - ptr += 64; - } else { - const __m512i lane0 = broadcast_epi128<0>(utf8); - const __m512i lane1 = broadcast_epi128<1>(utf8); - int valid_count0; - __m512i vec0 = expand_and_identify(lane0, lane1, valid_count0); - const __m512i lane2 = broadcast_epi128<2>(utf8); - int valid_count1; - __m512i vec1 = expand_and_identify(lane1, lane2, valid_count1); - if(valid_count0 + valid_count1 <= 16) { - vec0 = _mm512_mask_expand_epi32(vec0, __mmask16(((1<(utf8); - SIMDUTF_ICELAKE_TRANSCODE16(lane2, lane3, true) - - ptr += 3*16; - } - validatedptr += 4*16; - } - if (end != validatedptr) { - const __m512i utf8 = _mm512_maskz_loadu_epi8(~UINT64_C(0) >> (64 - (end - validatedptr)), (const __m512i*)validatedptr); - checker.check_next_input(utf8); +// todo: replace with the utf-8 to utf-16 routine adapted to utf-32. This code +// is legacy. +std::pair +validating_utf8_to_fixed_length(const char *str, size_t len, OUTPUT *dwords) { + constexpr bool UTF32 = std::is_same::value; + constexpr bool UTF16 = std::is_same::value; + static_assert( + UTF32 or UTF16, + "output type has to be uint32_t (for UTF-32) or char16_t (for UTF-16)"); + static_assert(!(UTF32 and big_endian), + "we do not currently support big-endian UTF-32"); + + const char *ptr = str; + const char *end = ptr + len; + __m512i byteflip = _mm512_setr_epi64(0x0607040502030001, 0x0e0f0c0d0a0b0809, + 0x0607040502030001, 0x0e0f0c0d0a0b0809, + 0x0607040502030001, 0x0e0f0c0d0a0b0809, + 0x0607040502030001, 0x0e0f0c0d0a0b0809); + OUTPUT *output = dwords; + avx512_utf8_checker checker{}; + /** + * In the main loop, we consume 64 bytes per iteration, + * but we access 64 + 4 bytes. + * We use masked writes to avoid overruns, see + * https://github.com/simdutf/simdutf/issues/471 + */ + while (end - ptr >= 64 + 4) { + const __m512i utf8 = _mm512_loadu_si512((const __m512i *)ptr); + if (checker.check_next_input(utf8)) { + SIMDUTF_ICELAKE_STORE_ASCII(UTF32, utf8, output) + output += 64; + ptr += 64; + continue; } - checker.check_eof(); - if(checker.errors()) { - return {ptr, nullptr}; // We found an error. + const __m512i lane0 = broadcast_epi128<0>(utf8); + const __m512i lane1 = broadcast_epi128<1>(utf8); + int valid_count0; + __m512i vec0 = expand_and_identify(lane0, lane1, valid_count0); + const __m512i lane2 = broadcast_epi128<2>(utf8); + int valid_count1; + __m512i vec1 = expand_and_identify(lane1, lane2, valid_count1); + if (valid_count0 + valid_count1 <= 16) { + vec0 = _mm512_mask_expand_epi32( + vec0, __mmask16(((1 << valid_count1) - 1) << valid_count0), vec1); + valid_count0 += valid_count1; + vec0 = expand_utf8_to_utf32(vec0); + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec0, valid_count0, true) + } else { + vec0 = expand_utf8_to_utf32(vec0); + vec1 = expand_utf8_to_utf32(vec1); + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec0, valid_count0, true) + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec1, valid_count1, true) + } + const __m512i lane3 = broadcast_epi128<3>(utf8); + int valid_count2; + __m512i vec2 = expand_and_identify(lane2, lane3, valid_count2); + uint32_t tmp1; + ::memcpy(&tmp1, ptr + 64, sizeof(tmp1)); + const __m512i lane4 = _mm512_set1_epi32(tmp1); + int valid_count3; + __m512i vec3 = expand_and_identify(lane3, lane4, valid_count3); + if (valid_count2 + valid_count3 <= 16) { + vec2 = _mm512_mask_expand_epi32( + vec2, __mmask16(((1 << valid_count3) - 1) << valid_count2), vec3); + valid_count2 += valid_count3; + vec2 = expand_utf8_to_utf32(vec2); + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec2, valid_count2, true) + } else { + vec2 = expand_utf8_to_utf32(vec2); + vec3 = expand_utf8_to_utf32(vec3); + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec2, valid_count2, true) + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec3, valid_count3, true) + } + ptr += 4 * 16; + } + const char *validatedptr = ptr; // validated up to ptr + + // For the final pass, we validate 64 bytes, but we only transcode + // 3*16 bytes, so we may end up double-validating 16 bytes. + if (end - ptr >= 64) { + const __m512i utf8 = _mm512_loadu_si512((const __m512i *)ptr); + if (checker.check_next_input(utf8)) { + SIMDUTF_ICELAKE_STORE_ASCII(UTF32, utf8, output) + output += 64; + ptr += 64; + } else { + const __m512i lane0 = broadcast_epi128<0>(utf8); + const __m512i lane1 = broadcast_epi128<1>(utf8); + int valid_count0; + __m512i vec0 = expand_and_identify(lane0, lane1, valid_count0); + const __m512i lane2 = broadcast_epi128<2>(utf8); + int valid_count1; + __m512i vec1 = expand_and_identify(lane1, lane2, valid_count1); + if (valid_count0 + valid_count1 <= 16) { + vec0 = _mm512_mask_expand_epi32( + vec0, __mmask16(((1 << valid_count1) - 1) << valid_count0), vec1); + valid_count0 += valid_count1; + vec0 = expand_utf8_to_utf32(vec0); + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec0, valid_count0, true) + } else { + vec0 = expand_utf8_to_utf32(vec0); + vec1 = expand_utf8_to_utf32(vec1); + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec0, valid_count0, true) + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec1, valid_count1, true) + } + + const __m512i lane3 = broadcast_epi128<3>(utf8); + SIMDUTF_ICELAKE_TRANSCODE16(lane2, lane3, true) + + ptr += 3 * 16; } - return {ptr, output}; + validatedptr += 4 * 16; + } + if (end != validatedptr) { + const __m512i utf8 = + _mm512_maskz_loadu_epi8(~UINT64_C(0) >> (64 - (end - validatedptr)), + (const __m512i *)validatedptr); + checker.check_next_input(utf8); + } + checker.check_eof(); + if (checker.errors()) { + return {ptr, nullptr}; // We found an error. + } + return {ptr, output}; } -// Like validating_utf8_to_fixed_length but returns as soon as an error is identified -// todo: replace with the utf-8 to utf-16 routine adapted to utf-32. This code is legacy. +// Like validating_utf8_to_fixed_length but returns as soon as an error is +// identified todo: replace with the utf-8 to utf-16 routine adapted to utf-32. +// This code is legacy. template -std::tuple validating_utf8_to_fixed_length_with_constant_checks(const char* str, size_t len, OUTPUT* dwords) { - constexpr bool UTF32 = std::is_same::value; - constexpr bool UTF16 = std::is_same::value; - static_assert(UTF32 or UTF16, "output type has to be uint32_t (for UTF-32) or char16_t (for UTF-16)"); - static_assert(!(UTF32 and big_endian), "we do not currently support big-endian UTF-32"); - - const char* ptr = str; - const char* end = ptr + len; - __m512i byteflip = _mm512_setr_epi64( - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809 - ); - OUTPUT* output = dwords; - avx512_utf8_checker checker{}; - /** - * In the main loop, we consume 64 bytes per iteration, - * but we access 64 + 4 bytes. - */ - while (end - ptr >= 4 + 64) { - const __m512i utf8 = _mm512_loadu_si512((const __m512i*)ptr); - bool ascii = checker.check_next_input(utf8); - if(checker.errors()) { - return {ptr, output, false}; // We found an error. - } - if(ascii) { - SIMDUTF_ICELAKE_STORE_ASCII(UTF32, utf8, output) - output += 64; - ptr += 64; - continue; - } - const __m512i lane0 = broadcast_epi128<0>(utf8); - const __m512i lane1 = broadcast_epi128<1>(utf8); - int valid_count0; - __m512i vec0 = expand_and_identify(lane0, lane1, valid_count0); - const __m512i lane2 = broadcast_epi128<2>(utf8); - int valid_count1; - __m512i vec1 = expand_and_identify(lane1, lane2, valid_count1); - if(valid_count0 + valid_count1 <= 16) { - vec0 = _mm512_mask_expand_epi32(vec0, __mmask16(((1<(utf8); - int valid_count2; - __m512i vec2 = expand_and_identify(lane2, lane3, valid_count2); - uint32_t tmp1; - ::memcpy(&tmp1, ptr + 64, sizeof(tmp1)); - const __m512i lane4 = _mm512_set1_epi32(tmp1); - int valid_count3; - __m512i vec3 = expand_and_identify(lane3, lane4, valid_count3); - if(valid_count2 + valid_count3 <= 16) { - vec2 = _mm512_mask_expand_epi32(vec2, __mmask16(((1< +validating_utf8_to_fixed_length_with_constant_checks(const char *str, + size_t len, + OUTPUT *dwords) { + constexpr bool UTF32 = std::is_same::value; + constexpr bool UTF16 = std::is_same::value; + static_assert( + UTF32 or UTF16, + "output type has to be uint32_t (for UTF-32) or char16_t (for UTF-16)"); + static_assert(!(UTF32 and big_endian), + "we do not currently support big-endian UTF-32"); + + const char *ptr = str; + const char *end = ptr + len; + __m512i byteflip = _mm512_setr_epi64(0x0607040502030001, 0x0e0f0c0d0a0b0809, + 0x0607040502030001, 0x0e0f0c0d0a0b0809, + 0x0607040502030001, 0x0e0f0c0d0a0b0809, + 0x0607040502030001, 0x0e0f0c0d0a0b0809); + OUTPUT *output = dwords; + avx512_utf8_checker checker{}; + /** + * In the main loop, we consume 64 bytes per iteration, + * but we access 64 + 4 bytes. + */ + while (end - ptr >= 4 + 64) { + const __m512i utf8 = _mm512_loadu_si512((const __m512i *)ptr); + bool ascii = checker.check_next_input(utf8); + if (checker.errors()) { + return {ptr, output, false}; // We found an error. + } + if (ascii) { + SIMDUTF_ICELAKE_STORE_ASCII(UTF32, utf8, output) + output += 64; + ptr += 64; + continue; } - const char* validatedptr = ptr; // validated up to ptr + const __m512i lane0 = broadcast_epi128<0>(utf8); + const __m512i lane1 = broadcast_epi128<1>(utf8); + int valid_count0; + __m512i vec0 = expand_and_identify(lane0, lane1, valid_count0); + const __m512i lane2 = broadcast_epi128<2>(utf8); + int valid_count1; + __m512i vec1 = expand_and_identify(lane1, lane2, valid_count1); + if (valid_count0 + valid_count1 <= 16) { + vec0 = _mm512_mask_expand_epi32( + vec0, __mmask16(((1 << valid_count1) - 1) << valid_count0), vec1); + valid_count0 += valid_count1; + vec0 = expand_utf8_to_utf32(vec0); + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec0, valid_count0, true) + } else { + vec0 = expand_utf8_to_utf32(vec0); + vec1 = expand_utf8_to_utf32(vec1); + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec0, valid_count0, true) + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec1, valid_count1, true) + } + const __m512i lane3 = broadcast_epi128<3>(utf8); + int valid_count2; + __m512i vec2 = expand_and_identify(lane2, lane3, valid_count2); + uint32_t tmp1; + ::memcpy(&tmp1, ptr + 64, sizeof(tmp1)); + const __m512i lane4 = _mm512_set1_epi32(tmp1); + int valid_count3; + __m512i vec3 = expand_and_identify(lane3, lane4, valid_count3); + if (valid_count2 + valid_count3 <= 16) { + vec2 = _mm512_mask_expand_epi32( + vec2, __mmask16(((1 << valid_count3) - 1) << valid_count2), vec3); + valid_count2 += valid_count3; + vec2 = expand_utf8_to_utf32(vec2); + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec2, valid_count2, true) + } else { + vec2 = expand_utf8_to_utf32(vec2); + vec3 = expand_utf8_to_utf32(vec3); + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec2, valid_count2, true) + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec3, valid_count3, true) + } + ptr += 4 * 16; + } + const char *validatedptr = ptr; // validated up to ptr + + // For the final pass, we validate 64 bytes, but we only transcode + // 3*16 bytes, so we may end up double-validating 16 bytes. + if (end - ptr >= 64) { + const __m512i utf8 = _mm512_loadu_si512((const __m512i *)ptr); + bool ascii = checker.check_next_input(utf8); + if (checker.errors()) { + return {ptr, output, false}; // We found an error. + } + if (ascii) { + SIMDUTF_ICELAKE_STORE_ASCII(UTF32, utf8, output) + output += 64; + ptr += 64; + } else { + const __m512i lane0 = broadcast_epi128<0>(utf8); + const __m512i lane1 = broadcast_epi128<1>(utf8); + int valid_count0; + __m512i vec0 = expand_and_identify(lane0, lane1, valid_count0); + const __m512i lane2 = broadcast_epi128<2>(utf8); + int valid_count1; + __m512i vec1 = expand_and_identify(lane1, lane2, valid_count1); + if (valid_count0 + valid_count1 <= 16) { + vec0 = _mm512_mask_expand_epi32( + vec0, __mmask16(((1 << valid_count1) - 1) << valid_count0), vec1); + valid_count0 += valid_count1; + vec0 = expand_utf8_to_utf32(vec0); + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec0, valid_count0, true) + } else { + vec0 = expand_utf8_to_utf32(vec0); + vec1 = expand_utf8_to_utf32(vec1); + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec0, valid_count0, true) + SIMDUTF_ICELAKE_WRITE_UTF16_OR_UTF32(vec1, valid_count1, true) + } - // For the final pass, we validate 64 bytes, but we only transcode - // 3*16 bytes, so we may end up double-validating 16 bytes. - if (end - ptr >= 64) { - const __m512i utf8 = _mm512_loadu_si512((const __m512i*)ptr); - bool ascii = checker.check_next_input(utf8); - if(checker.errors()) { - return {ptr, output, false}; // We found an error. - } - if(ascii) { - SIMDUTF_ICELAKE_STORE_ASCII(UTF32, utf8, output) - output += 64; - ptr += 64; - } else { - const __m512i lane0 = broadcast_epi128<0>(utf8); - const __m512i lane1 = broadcast_epi128<1>(utf8); - int valid_count0; - __m512i vec0 = expand_and_identify(lane0, lane1, valid_count0); - const __m512i lane2 = broadcast_epi128<2>(utf8); - int valid_count1; - __m512i vec1 = expand_and_identify(lane1, lane2, valid_count1); - if(valid_count0 + valid_count1 <= 16) { - vec0 = _mm512_mask_expand_epi32(vec0, __mmask16(((1<(utf8); - SIMDUTF_ICELAKE_TRANSCODE16(lane2, lane3, true) - - ptr += 3*16; - } - validatedptr += 4*16; - } - if (end != validatedptr) { - const __m512i utf8 = _mm512_maskz_loadu_epi8(~UINT64_C(0) >> (64 - (end - validatedptr)), (const __m512i*)validatedptr); - checker.check_next_input(utf8); - } - checker.check_eof(); - if(checker.errors()) { - return {ptr, output, false}; // We found an error. + const __m512i lane3 = broadcast_epi128<3>(utf8); + SIMDUTF_ICELAKE_TRANSCODE16(lane2, lane3, true) + + ptr += 3 * 16; } - return {ptr, output, true}; + validatedptr += 4 * 16; + } + if (end != validatedptr) { + const __m512i utf8 = + _mm512_maskz_loadu_epi8(~UINT64_C(0) >> (64 - (end - validatedptr)), + (const __m512i *)validatedptr); + checker.check_next_input(utf8); + } + checker.check_eof(); + if (checker.errors()) { + return {ptr, output, false}; // We found an error. + } + return {ptr, output, true}; } /* end file src/icelake/icelake_from_utf8.inl.cpp */ /* begin file src/icelake/icelake_convert_utf8_to_latin1.inl.cpp */ @@ -21336,18 +21458,16 @@ std::tuple validating_utf8_to_fixed_length_with_cons // File contains conversion procedure from possibly invalid UTF-8 strings. template -simdutf_really_inline size_t process_block_from_utf8_to_latin1(const char *buf, size_t len, - char *latin_output, __m512i minus64, - __m512i one, - __mmask64 *next_leading_ptr, - __mmask64 *next_bit6_ptr) { +simdutf_really_inline size_t process_block_from_utf8_to_latin1( + const char *buf, size_t len, char *latin_output, __m512i minus64, + __m512i one, __mmask64 *next_leading_ptr, __mmask64 *next_bit6_ptr) { __mmask64 load_mask = is_remaining ? _bzhi_u64(~0ULL, (unsigned int)len) : ~0ULL; __m512i input = _mm512_maskz_loadu_epi8(load_mask, (__m512i *)buf); __mmask64 nonascii = _mm512_movepi8_mask(input); if (nonascii == 0) { - if(*next_leading_ptr) { // If we ended with a leading byte, it is an error. - return 0; // Indicates error + if (*next_leading_ptr) { // If we ended with a leading byte, it is an error. + return 0; // Indicates error } is_remaining ? _mm512_mask_storeu_epi8((__m512i *)latin_output, load_mask, input) @@ -21378,7 +21498,7 @@ simdutf_really_inline size_t process_block_from_utf8_to_latin1(const char *buf, __mmask64 retain = ~leading & load_mask; __m512i output = _mm512_maskz_compress_epi8(retain, input); int64_t written_out = count_ones(retain); - if(written_out == 0) { + if (written_out == 0) { return 0; // Indicates error } *next_bit6_ptr = bit6 >> 63; @@ -21391,7 +21511,8 @@ simdutf_really_inline size_t process_block_from_utf8_to_latin1(const char *buf, return written_out; } -size_t utf8_to_latin1_avx512(const char *&inbuf, size_t len, char *&inlatin_output) { +size_t utf8_to_latin1_avx512(const char *&inbuf, size_t len, + char *&inlatin_output) { const char *buf = inbuf; char *latin_output = inlatin_output; char *start = latin_output; @@ -21402,12 +21523,13 @@ size_t utf8_to_latin1_avx512(const char *&inbuf, size_t len, char *&inlatin_outp __mmask64 next_bit6 = 0; while (pos + 64 <= len) { - size_t written = process_block_from_utf8_to_latin1(buf + pos, 64, latin_output, minus64, - one, &next_leading, &next_bit6); + size_t written = process_block_from_utf8_to_latin1( + buf + pos, 64, latin_output, minus64, one, &next_leading, &next_bit6); if (written == 0) { inlatin_output = latin_output; inbuf = buf + pos - next_leading; - return 0; // Indicates error at pos or after, or just before pos (too short error) + return 0; // Indicates error at pos or after, or just before pos (too + // short error) } latin_output += written; pos += 64; @@ -21415,17 +21537,18 @@ size_t utf8_to_latin1_avx512(const char *&inbuf, size_t len, char *&inlatin_outp if (pos < len) { size_t remaining = len - pos; - size_t written = - process_block_from_utf8_to_latin1(buf + pos, remaining, latin_output, minus64, one, - &next_leading, &next_bit6); + size_t written = process_block_from_utf8_to_latin1( + buf + pos, remaining, latin_output, minus64, one, &next_leading, + &next_bit6); if (written == 0) { inbuf = buf + pos - next_leading; inlatin_output = latin_output; - return 0; // Indicates error at pos or after, or just before pos (too short error) + return 0; // Indicates error at pos or after, or just before pos (too + // short error) } latin_output += written; } - if(next_leading) { + if (next_leading) { inbuf = buf + len - next_leading; inlatin_output = latin_output; return 0; // Indicates error at end of buffer @@ -21441,11 +21564,9 @@ size_t utf8_to_latin1_avx512(const char *&inbuf, size_t len, char *&inlatin_outp // File contains conversion procedure from valid UTF-8 strings. template -simdutf_really_inline size_t process_valid_block_from_utf8_to_latin1(const char *buf, size_t len, - char *latin_output, - __m512i minus64, __m512i one, - __mmask64 *next_leading_ptr, - __mmask64 *next_bit6_ptr) { +simdutf_really_inline size_t process_valid_block_from_utf8_to_latin1( + const char *buf, size_t len, char *latin_output, __m512i minus64, + __m512i one, __mmask64 *next_leading_ptr, __mmask64 *next_bit6_ptr) { __mmask64 load_mask = is_remaining ? _bzhi_u64(~0ULL, (unsigned int)len) : ~0ULL; __m512i input = _mm512_maskz_loadu_epi8(load_mask, (__m512i *)buf); @@ -21472,7 +21593,7 @@ simdutf_really_inline size_t process_valid_block_from_utf8_to_latin1(const char __mmask64 retain = ~leading & load_mask; __m512i output = _mm512_maskz_compress_epi8(retain, input); int64_t written_out = count_ones(retain); - if(written_out == 0) { + if (written_out == 0) { return 0; // Indicates error } __mmask64 store_mask = ~UINT64_C(0) >> (64 - written_out); @@ -21499,9 +21620,9 @@ size_t valid_utf8_to_latin1_avx512(const char *buf, size_t len, if (pos < len) { size_t remaining = len - pos; - size_t written = - process_valid_block_from_utf8_to_latin1(buf + pos, remaining, latin_output, minus64, - one, &next_leading, &next_bit6); + size_t written = process_valid_block_from_utf8_to_latin1( + buf + pos, remaining, latin_output, minus64, one, &next_leading, + &next_bit6); latin_output += written; } @@ -21618,40 +21739,36 @@ icelake_convert_utf16_to_latin1_with_errors(const char16_t *buf, size_t len, /** * This function converts the input (inbuf, inlen), assumed to be valid - * UTF16 (little endian) into UTF-8 (to outbuf). The number of code units written - * is written to 'outlen' and the function reports the number of input word - * consumed. + * UTF16 (little endian) into UTF-8 (to outbuf). The number of code units + * written is written to 'outlen' and the function reports the number of input + * word consumed. */ template size_t utf16_to_utf8_avx512i(const char16_t *inbuf, size_t inlen, - unsigned char *outbuf, size_t *outlen) { + unsigned char *outbuf, size_t *outlen) { __m512i in; __mmask32 inmask = _cvtu32_mask32(0x7fffffff); - __m512i byteflip = _mm512_setr_epi64( - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809 - ); - const char16_t * const inbuf_orig = inbuf; - const unsigned char * const outbuf_orig = outbuf; + __m512i byteflip = _mm512_setr_epi64(0x0607040502030001, 0x0e0f0c0d0a0b0809, + 0x0607040502030001, 0x0e0f0c0d0a0b0809, + 0x0607040502030001, 0x0e0f0c0d0a0b0809, + 0x0607040502030001, 0x0e0f0c0d0a0b0809); + const char16_t *const inbuf_orig = inbuf; + const unsigned char *const outbuf_orig = outbuf; int adjust = 0; int carry = 0; while (inlen >= 32) { in = _mm512_loadu_si512(inbuf); - if(big_endian) { in = _mm512_shuffle_epi8(in, byteflip); } + if (big_endian) { + in = _mm512_shuffle_epi8(in, byteflip); + } inlen -= 31; lastiteration: inbuf += 31; failiteration: const __mmask32 is234byte = _mm512_mask_cmp_epu16_mask( - inmask, in, _mm512_set1_epi16(0x0080), _MM_CMPINT_NLT); + inmask, in, _mm512_set1_epi16(0x0080), _MM_CMPINT_NLT); if (_ktestz_mask32_u8(inmask, is234byte)) { // fast path for ASCII only @@ -21680,9 +21797,12 @@ size_t utf16_to_utf8_avx512i(const char16_t *inbuf, size_t inlen, const __m512i cmpmask = _mm512_mask_blend_epi16(inmask, _mm512_set1_epi16(int16_t(0xffff)), _mm512_set1_epi16(0x0800)); - const __mmask64 smoosh = _mm512_cmp_epu8_mask(in, cmpmask, _MM_CMPINT_NLT); + const __mmask64 smoosh = + _mm512_cmp_epu8_mask(in, cmpmask, _MM_CMPINT_NLT); const __m512i out = _mm512_maskz_compress_epi8(smoosh, in); - _mm512_mask_storeu_epi8(outbuf, _cvtu64_mask64(_pext_u64(_cvtmask64_u64(smoosh), _cvtmask64_u64(smoosh))), + _mm512_mask_storeu_epi8(outbuf, + _cvtu64_mask64(_pext_u64(_cvtmask64_u64(smoosh), + _cvtmask64_u64(smoosh))), out); outbuf += 31 + _mm_popcnt_u32(_cvtmask32_u32(is234byte)); carry = 0; @@ -21696,11 +21816,11 @@ size_t utf16_to_utf8_avx512i(const char16_t *inbuf, size_t inlen, __m512i lo = _mm512_cvtepu16_epi32(_mm512_castsi512_si256(in)); __m512i hi = _mm512_cvtepu16_epi32(_mm512_extracti32x8_epi32(in, 1)); - __m512i taglo = _mm512_set1_epi32(0x8080e000); __m512i taghi = taglo; - const __m512i fc00masked = _mm512_and_epi32(in, _mm512_set1_epi16(int16_t(0xfc00))); + const __m512i fc00masked = + _mm512_and_epi32(in, _mm512_set1_epi16(int16_t(0xfc00))); const __mmask32 hisurr = _mm512_mask_cmp_epu16_mask( inmask, fc00masked, _mm512_set1_epi16(int16_t(0xd800)), _MM_CMPINT_EQ); const __mmask32 losurr = _mm512_cmp_epu16_mask( @@ -21714,10 +21834,10 @@ size_t utf16_to_utf8_avx512i(const char16_t *inbuf, size_t inlen, __m512i his = _mm512_alignr_epi32(lo, hi, 1); const __mmask32 hisurrhi = _kshiftri_mask32(hisurr, 16); - taglo = - _mm512_mask_mov_epi32(taglo,__mmask16(hisurr), _mm512_set1_epi32(0x808080f0)); - taghi = - _mm512_mask_mov_epi32(taghi, __mmask16(hisurrhi), _mm512_set1_epi32(0x808080f0)); + taglo = _mm512_mask_mov_epi32(taglo, __mmask16(hisurr), + _mm512_set1_epi32(0x808080f0)); + taghi = _mm512_mask_mov_epi32(taghi, __mmask16(hisurrhi), + _mm512_set1_epi32(0x808080f0)); lo = _mm512_mask_slli_epi32(lo, __mmask16(hisurr), lo, 10); hi = _mm512_mask_slli_epi32(hi, __mmask16(hisurrhi), hi, 10); @@ -21728,8 +21848,8 @@ size_t utf16_to_utf8_avx512i(const char16_t *inbuf, size_t inlen, carryout = _cvtu32_mask32(_kshiftri_mask32(hisurr, 30)); - const uint32_t h = _cvtmask32_u32(hisurr); - const uint32_t l = _cvtmask32_u32(losurr); + const uint32_t h = _cvtmask32_u32(hisurr); + const uint32_t l = _cvtmask32_u32(losurr); // check for mismatched surrogates if ((h + h + carry) ^ l) { const uint32_t lonohi = l & ~(h + h + carry); @@ -21743,7 +21863,7 @@ size_t utf16_to_utf8_avx512i(const char16_t *inbuf, size_t inlen, } } - hi = _mm512_maskz_mov_epi32(_cvtu32_mask16(0x7fff),hi); + hi = _mm512_maskz_mov_epi32(_cvtu32_mask16(0x7fff), hi); carry = carryout; __m512i mslo = @@ -21759,19 +21879,22 @@ size_t utf16_to_utf8_avx512i(const char16_t *inbuf, size_t inlen, const __mmask64 is1bhi = _kshiftri_mask64(is1byte, 16); const __mmask64 is12bhi = _kshiftri_mask64(is12byte, 16); - taglo = - _mm512_mask_mov_epi32(taglo, __mmask16(is12byte), _mm512_set1_epi32(0x80c00000)); - taghi = - _mm512_mask_mov_epi32(taghi, __mmask16(is12bhi), _mm512_set1_epi32(0x80c00000)); - __m512i magiclo = _mm512_mask_blend_epi32(__mmask16(outmask), _mm512_set1_epi32(0xffffffff), - _mm512_set1_epi32(0x00010101)); - __m512i magichi = _mm512_mask_blend_epi32(__mmask16(outmhi), _mm512_set1_epi32(0xffffffff), - _mm512_set1_epi32(0x00010101)); - - - magiclo = _mm512_mask_blend_epi32(__mmask16(outmask), _mm512_set1_epi32(0xffffffff), + taglo = _mm512_mask_mov_epi32(taglo, __mmask16(is12byte), + _mm512_set1_epi32(0x80c00000)); + taghi = _mm512_mask_mov_epi32(taghi, __mmask16(is12bhi), + _mm512_set1_epi32(0x80c00000)); + __m512i magiclo = _mm512_mask_blend_epi32(__mmask16(outmask), + _mm512_set1_epi32(0xffffffff), + _mm512_set1_epi32(0x00010101)); + __m512i magichi = _mm512_mask_blend_epi32(__mmask16(outmhi), + _mm512_set1_epi32(0xffffffff), + _mm512_set1_epi32(0x00010101)); + + magiclo = _mm512_mask_blend_epi32(__mmask16(outmask), + _mm512_set1_epi32(0xffffffff), _mm512_set1_epi32(0x00010101)); - magichi = _mm512_mask_blend_epi32(__mmask16(outmhi), _mm512_set1_epi32(0xffffffff), + magichi = _mm512_mask_blend_epi32(__mmask16(outmhi), + _mm512_set1_epi32(0xffffffff), _mm512_set1_epi32(0x00010101)); mslo = _mm512_ternarylogic_epi32(mslo, _mm512_set1_epi32(0x3f3f3f3f), taglo, @@ -21782,8 +21905,10 @@ size_t utf16_to_utf8_avx512i(const char16_t *inbuf, size_t inlen, mshi = _mm512_mask_slli_epi32(mshi, __mmask16(is1bhi), hi, 24); - const __mmask64 wantlo = _mm512_cmp_epu8_mask(mslo, magiclo, _MM_CMPINT_NLT); - const __mmask64 wanthi = _mm512_cmp_epu8_mask(mshi, magichi, _MM_CMPINT_NLT); + const __mmask64 wantlo = + _mm512_cmp_epu8_mask(mslo, magiclo, _MM_CMPINT_NLT); + const __mmask64 wanthi = + _mm512_cmp_epu8_mask(mshi, magichi, _MM_CMPINT_NLT); const __m512i outlo = _mm512_maskz_compress_epi8(wantlo, mslo); const __m512i outhi = _mm512_maskz_compress_epi8(wanthi, mshi); const uint64_t wantlo_uint64 = _cvtmask64_u64(wantlo); @@ -21792,8 +21917,11 @@ size_t utf16_to_utf8_avx512i(const char16_t *inbuf, size_t inlen, uint64_t advlo = _mm_popcnt_u64(wantlo_uint64); uint64_t advhi = _mm_popcnt_u64(wanthi_uint64); - _mm512_mask_storeu_epi8(outbuf, _cvtu64_mask64(_pext_u64(wantlo_uint64, wantlo_uint64)), outlo); - _mm512_mask_storeu_epi8(outbuf + advlo, _cvtu64_mask64(_pext_u64(wanthi_uint64, wanthi_uint64)), outhi); + _mm512_mask_storeu_epi8( + outbuf, _cvtu64_mask64(_pext_u64(wantlo_uint64, wantlo_uint64)), outlo); + _mm512_mask_storeu_epi8( + outbuf + advlo, _cvtu64_mask64(_pext_u64(wanthi_uint64, wanthi_uint64)), + outhi); outbuf += advlo + advhi; } outbuf += -adjust; @@ -21803,7 +21931,9 @@ size_t utf16_to_utf8_avx512i(const char16_t *inbuf, size_t inlen, // We must have inlen < 31. inmask = _cvtu32_mask32((1U << inlen) - 1); in = _mm512_maskz_loadu_epi16(inmask, inbuf); - if(big_endian) { in = _mm512_shuffle_epi8(in, byteflip); } + if (big_endian) { + in = _mm512_shuffle_epi8(in, byteflip); + } adjust = (int)inlen - 31; inlen = 0; goto lastiteration; @@ -21820,38 +21950,41 @@ size_t utf16_to_utf8_avx512i(const char16_t *inbuf, size_t inlen, A scalar routing should carry on the conversion of the tail. */ template -std::tuple convert_utf16_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) { - const char16_t* end = buf + len; +std::tuple +convert_utf16_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_output) { + const char16_t *end = buf + len; const __m512i v_fc00 = _mm512_set1_epi16((uint16_t)0xfc00); const __m512i v_d800 = _mm512_set1_epi16((uint16_t)0xd800); const __m512i v_dc00 = _mm512_set1_epi16((uint16_t)0xdc00); __mmask32 carry{0}; const __m512i byteflip = _mm512_setr_epi64( - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809 - ); - while (std::distance(buf,end) >= 32) { + 0x0607040502030001, 0x0e0f0c0d0a0b0809, 0x0607040502030001, + 0x0e0f0c0d0a0b0809, 0x0607040502030001, 0x0e0f0c0d0a0b0809, + 0x0607040502030001, 0x0e0f0c0d0a0b0809); + while (std::distance(buf, end) >= 32) { // Always safe because buf + 32 <= end so that end - buf >= 32 bytes: - __m512i in = _mm512_loadu_si512((__m512i*)buf); - if(big_endian) { in = _mm512_shuffle_epi8(in, byteflip); } + __m512i in = _mm512_loadu_si512((__m512i *)buf); + if (big_endian) { + in = _mm512_shuffle_epi8(in, byteflip); + } // H - bitmask for high surrogates - const __mmask32 H = _mm512_cmpeq_epi16_mask(_mm512_and_si512(in, v_fc00), v_d800); + const __mmask32 H = + _mm512_cmpeq_epi16_mask(_mm512_and_si512(in, v_fc00), v_d800); // H - bitmask for low surrogates - const __mmask32 L = _mm512_cmpeq_epi16_mask(_mm512_and_si512(in, v_fc00), v_dc00); + const __mmask32 L = + _mm512_cmpeq_epi16_mask(_mm512_and_si512(in, v_fc00), v_dc00); - if ((H|L)) { + if ((H | L)) { // surrogate pair(s) in a register - const __mmask32 V = (L ^ (carry | (H << 1))); // A high surrogate must be followed by low one and a low one must be preceded by a high one. - // If valid, V should be equal to 0 + const __mmask32 V = + (L ^ + (carry | (H << 1))); // A high surrogate must be followed by low one + // and a low one must be preceded by a high one. + // If valid, V should be equal to 0 - if(V == 0) { + if (V == 0) { // valid case /* Input surrogate pair: @@ -21859,68 +21992,92 @@ std::tuple convert_utf16_to_utf32(const char16 low surrogate high surrogate */ /* 1. Expand all code units to 32-bit code units - in |0000.0000.0000.0000.1101.11aa.aaaa.aaaa|0000.0000.0000.0000.1101.10bb.bbbb.bbbb| + in + |0000.0000.0000.0000.1101.11aa.aaaa.aaaa|0000.0000.0000.0000.1101.10bb.bbbb.bbbb| */ const __m512i first = _mm512_cvtepu16_epi32(_mm512_castsi512_si256(in)); - const __m512i second = _mm512_cvtepu16_epi32(_mm512_extracti32x8_epi32(in,1)); - - /* 2. Shift by one 16-bit word to align low surrogates with high surrogates - in |0000.0000.0000.0000.1101.11aa.aaaa.aaaa|0000.0000.0000.0000.1101.10bb.bbbb.bbbb| - shifted |????.????.????.????.????.????.????.????|0000.0000.0000.0000.1101.11aa.aaaa.aaaa| + const __m512i second = + _mm512_cvtepu16_epi32(_mm512_extracti32x8_epi32(in, 1)); + + /* 2. Shift by one 16-bit word to align low surrogates with high + surrogates in + |0000.0000.0000.0000.1101.11aa.aaaa.aaaa|0000.0000.0000.0000.1101.10bb.bbbb.bbbb| + shifted + |????.????.????.????.????.????.????.????|0000.0000.0000.0000.1101.11aa.aaaa.aaaa| */ const __m512i shifted_first = _mm512_alignr_epi32(second, first, 1); - const __m512i shifted_second = _mm512_alignr_epi32(_mm512_setzero_si512(), second, 1); + const __m512i shifted_second = + _mm512_alignr_epi32(_mm512_setzero_si512(), second, 1); - /* 3. Align all high surrogates in first and second by shifting to the left by 10 bits + /* 3. Align all high surrogates in first and second by shifting to the + left by 10 bits |0000.0000.0000.0000.1101.11aa.aaaa.aaaa|0000.0011.0110.bbbb.bbbb.bb00.0000.0000| */ - const __m512i aligned_first = _mm512_mask_slli_epi32(first, (__mmask16)H, first, 10); - const __m512i aligned_second = _mm512_mask_slli_epi32(second, (__mmask16)(H>>16), second, 10); - - /* 4. Remove surrogate prefixes and add offset 0x10000 by adding in, shifted and constant - in |0000.0000.0000.0000.1101.11aa.aaaa.aaaa|0000.0011.0110.bbbb.bbbb.bb00.0000.0000| - shifted |????.????.????.????.????.????.????.????|0000.0000.0000.0000.1101.11aa.aaaa.aaaa| + const __m512i aligned_first = + _mm512_mask_slli_epi32(first, (__mmask16)H, first, 10); + const __m512i aligned_second = + _mm512_mask_slli_epi32(second, (__mmask16)(H >> 16), second, 10); + + /* 4. Remove surrogate prefixes and add offset 0x10000 by adding in, + shifted and constant in + |0000.0000.0000.0000.1101.11aa.aaaa.aaaa|0000.0011.0110.bbbb.bbbb.bb00.0000.0000| + shifted + |????.????.????.????.????.????.????.????|0000.0000.0000.0000.1101.11aa.aaaa.aaaa| constant|1111.1100.1010.0000.0010.0100.0000.0000|1111.1100.1010.0000.0010.0100.0000.0000| */ const __m512i constant = _mm512_set1_epi32((uint32_t)0xfca02400); - const __m512i added_first = _mm512_mask_add_epi32(aligned_first, (__mmask16)H, aligned_first, shifted_first); - const __m512i utf32_first = _mm512_mask_add_epi32(added_first, (__mmask16)H, added_first, constant); - - const __m512i added_second = _mm512_mask_add_epi32(aligned_second, (__mmask16)(H>>16), aligned_second, shifted_second); - const __m512i utf32_second = _mm512_mask_add_epi32(added_second, (__mmask16)(H>>16), added_second, constant); - - // 5. Store all valid UTF-32 code units (low surrogate positions and 32nd word are invalid) + const __m512i added_first = _mm512_mask_add_epi32( + aligned_first, (__mmask16)H, aligned_first, shifted_first); + const __m512i utf32_first = _mm512_mask_add_epi32( + added_first, (__mmask16)H, added_first, constant); + + const __m512i added_second = + _mm512_mask_add_epi32(aligned_second, (__mmask16)(H >> 16), + aligned_second, shifted_second); + const __m512i utf32_second = _mm512_mask_add_epi32( + added_second, (__mmask16)(H >> 16), added_second, constant); + + // 5. Store all valid UTF-32 code units (low surrogate positions and + // 32nd word are invalid) const __mmask32 valid = ~L & 0x7fffffff; - // We deliberately do a _mm512_maskz_compress_epi32 followed by storeu_epi32 - // to ease performance portability to Zen 4. - const __m512i compressed_first = _mm512_maskz_compress_epi32((__mmask16)(valid), utf32_first); + // We deliberately do a _mm512_maskz_compress_epi32 followed by + // storeu_epi32 to ease performance portability to Zen 4. + const __m512i compressed_first = + _mm512_maskz_compress_epi32((__mmask16)(valid), utf32_first); const size_t howmany1 = count_ones((uint16_t)(valid)); - _mm512_storeu_si512((__m512i *) utf32_output, compressed_first); + _mm512_storeu_si512((__m512i *)utf32_output, compressed_first); utf32_output += howmany1; - const __m512i compressed_second = _mm512_maskz_compress_epi32((__mmask16)(valid >> 16), utf32_second); + const __m512i compressed_second = + _mm512_maskz_compress_epi32((__mmask16)(valid >> 16), utf32_second); const size_t howmany2 = count_ones((uint16_t)(valid >> 16)); // The following could be unsafe in some cases? //_mm512_storeu_epi32((__m512i *) utf32_output, compressed_second); - _mm512_mask_storeu_epi32((__m512i *) utf32_output, __mmask16((1<> 30) & 0x1; } else { // invalid case - return std::make_tuple(buf+carry, utf32_output, false); + return std::make_tuple(buf + carry, utf32_output, false); } } else { // no surrogates // extend all thirty-two 16-bit code units to thirty-two 32-bit code units - _mm512_storeu_si512((__m512i *)(utf32_output), _mm512_cvtepu16_epi32(_mm512_castsi512_si256(in))); - _mm512_storeu_si512((__m512i *)(utf32_output) + 1, _mm512_cvtepu16_epi32(_mm512_extracti32x8_epi32(in,1))); + _mm512_storeu_si512((__m512i *)(utf32_output), + _mm512_cvtepu16_epi32(_mm512_castsi512_si256(in))); + _mm512_storeu_si512( + (__m512i *)(utf32_output) + 1, + _mm512_cvtepu16_epi32(_mm512_extracti32x8_epi32(in, 1))); utf32_output += 32; buf += 32; carry = 0; } } // while - return std::make_tuple(buf+carry, utf32_output, true); + return std::make_tuple(buf + carry, utf32_output, true); } /* end file src/icelake/icelake_convert_utf16_to_utf32.inl.cpp */ /* begin file src/icelake/icelake_convert_utf32_to_latin1.inl.cpp */ @@ -21938,8 +22095,9 @@ size_t icelake_convert_utf32_to_latin1(const char32_t *buf, size_t len, if (_mm512_cmpgt_epu32_mask(in, v_0xFF)) { return 0; } - _mm_storeu_si128((__m128i *)latin1_output, - _mm512_castsi512_si128(_mm512_permutexvar_epi8(shufmask, in))); + _mm_storeu_si128( + (__m128i *)latin1_output, + _mm512_castsi512_si128(_mm512_permutexvar_epi8(shufmask, in))); latin1_output += 16; buf += 16; } @@ -21975,8 +22133,9 @@ icelake_convert_utf32_to_latin1_with_errors(const char32_t *buf, size_t len, return std::make_pair(result(error_code::TOO_LARGE, buf - start), latin1_output); } - _mm_storeu_si128((__m128i *)latin1_output, - _mm512_castsi512_si128(_mm512_permutexvar_epi8(shufmask, in))); + _mm_storeu_si128( + (__m128i *)latin1_output, + _mm512_castsi512_si128(_mm512_permutexvar_epi8(shufmask, in))); latin1_output += 16; buf += 16; } @@ -22001,8 +22160,10 @@ icelake_convert_utf32_to_latin1_with_errors(const char32_t *buf, size_t len, // file included directly // Todo: currently, this is just the haswell code, optimize for icelake kernel. -std::pair avx512_convert_utf32_to_utf8(const char32_t* buf, size_t len, char* utf8_output) { - const char32_t* end = buf + len; +std::pair +avx512_convert_utf32_to_utf8(const char32_t *buf, size_t len, + char *utf8_output) { + const char32_t *end = buf + len; const __m256i v_0000 = _mm256_setzero_si256(); const __m256i v_ffff0000 = _mm256_set1_epi32((uint32_t)0xffff0000); const __m256i v_ff80 = _mm256_set1_epi16((uint16_t)0xff80); @@ -22012,36 +22173,46 @@ std::pair avx512_convert_utf32_to_utf8(const char32_t* b __m256i running_max = _mm256_setzero_si256(); __m256i forbidden_bytemask = _mm256_setzero_si256(); - const size_t safety_margin = 12; // to avoid overruns, see issue https://github.com/simdutf/simdutf/issues/92 + const size_t safety_margin = + 12; // to avoid overruns, see issue + // https://github.com/simdutf/simdutf/issues/92 while (end - buf >= std::ptrdiff_t(16 + safety_margin)) { - __m256i in = _mm256_loadu_si256((__m256i*)buf); - __m256i nextin = _mm256_loadu_si256((__m256i*)buf+1); + __m256i in = _mm256_loadu_si256((__m256i *)buf); + __m256i nextin = _mm256_loadu_si256((__m256i *)buf + 1); running_max = _mm256_max_epu32(_mm256_max_epu32(in, running_max), nextin); - // Pack 32-bit UTF-32 code units to 16-bit UTF-16 code units with unsigned saturation - __m256i in_16 = _mm256_packus_epi32(_mm256_and_si256(in, v_7fffffff), _mm256_and_si256(nextin, v_7fffffff)); + // Pack 32-bit UTF-32 code units to 16-bit UTF-16 code units with unsigned + // saturation + __m256i in_16 = _mm256_packus_epi32(_mm256_and_si256(in, v_7fffffff), + _mm256_and_si256(nextin, v_7fffffff)); in_16 = _mm256_permute4x64_epi64(in_16, 0b11011000); - // Try to apply UTF-16 => UTF-8 routine on 256 bits (haswell/avx2_convert_utf16_to_utf8.cpp) + // Try to apply UTF-16 => UTF-8 routine on 256 bits + // (haswell/avx2_convert_utf16_to_utf8.cpp) - if(_mm256_testz_si256(in_16, v_ff80)) { // ASCII fast path!!!! + if (_mm256_testz_si256(in_16, v_ff80)) { // ASCII fast path!!!! // 1. pack the bytes - const __m128i utf8_packed = _mm_packus_epi16(_mm256_castsi256_si128(in_16),_mm256_extractf128_si256(in_16,1)); + const __m128i utf8_packed = _mm_packus_epi16( + _mm256_castsi256_si128(in_16), _mm256_extractf128_si256(in_16, 1)); // 2. store (16 bytes) - _mm_storeu_si128((__m128i*)utf8_output, utf8_packed); + _mm_storeu_si128((__m128i *)utf8_output, utf8_packed); // 3. adjust pointers buf += 16; utf8_output += 16; continue; // we are done for this round! } // no bits set above 7th bit - const __m256i one_byte_bytemask = _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_ff80), v_0000); - const uint32_t one_byte_bitmask = static_cast(_mm256_movemask_epi8(one_byte_bytemask)); + const __m256i one_byte_bytemask = + _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_ff80), v_0000); + const uint32_t one_byte_bitmask = + static_cast(_mm256_movemask_epi8(one_byte_bytemask)); // no bits set above 11th bit - const __m256i one_or_two_bytes_bytemask = _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_f800), v_0000); - const uint32_t one_or_two_bytes_bitmask = static_cast(_mm256_movemask_epi8(one_or_two_bytes_bytemask)); + const __m256i one_or_two_bytes_bytemask = + _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_f800), v_0000); + const uint32_t one_or_two_bytes_bitmask = + static_cast(_mm256_movemask_epi8(one_or_two_bytes_bytemask)); if (one_or_two_bytes_bitmask == 0xffffffff) { // 1. prepare 2-byte values // input 16-bit word : [0000|0aaa|aabb|bbbb] x 8 @@ -22061,25 +22232,32 @@ std::pair avx512_convert_utf32_to_utf8(const char32_t* b const __m256i t4 = _mm256_or_si256(t3, v_c080); // 2. merge ASCII and 2-byte codewords - const __m256i utf8_unpacked = _mm256_blendv_epi8(t4, in_16, one_byte_bytemask); + const __m256i utf8_unpacked = + _mm256_blendv_epi8(t4, in_16, one_byte_bytemask); // 3. prepare bitmask for 8-bit lookup const uint32_t M0 = one_byte_bitmask & 0x55555555; const uint32_t M1 = M0 >> 7; - const uint32_t M2 = (M1 | M0) & 0x00ff00ff; + const uint32_t M2 = (M1 | M0) & 0x00ff00ff; // 4. pack the bytes - const uint8_t* row = &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2)][0]; - const uint8_t* row_2 = &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2>>16)][0]; + const uint8_t *row = + &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2)][0]; + const uint8_t *row_2 = + &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2 >> + 16)][0]; - const __m128i shuffle = _mm_loadu_si128((__m128i*)(row + 1)); - const __m128i shuffle_2 = _mm_loadu_si128((__m128i*)(row_2 + 1)); + const __m128i shuffle = _mm_loadu_si128((__m128i *)(row + 1)); + const __m128i shuffle_2 = _mm_loadu_si128((__m128i *)(row_2 + 1)); - const __m256i utf8_packed = _mm256_shuffle_epi8(utf8_unpacked, _mm256_setr_m128i(shuffle,shuffle_2)); + const __m256i utf8_packed = _mm256_shuffle_epi8( + utf8_unpacked, _mm256_setr_m128i(shuffle, shuffle_2)); // 5. store bytes - _mm_storeu_si128((__m128i*)utf8_output, _mm256_castsi256_si128(utf8_packed)); + _mm_storeu_si128((__m128i *)utf8_output, + _mm256_castsi256_si128(utf8_packed)); utf8_output += row[0]; - _mm_storeu_si128((__m128i*)utf8_output, _mm256_extractf128_si256(utf8_packed,1)); + _mm_storeu_si128((__m128i *)utf8_output, + _mm256_extractf128_si256(utf8_packed, 1)); utf8_output += row_2[0]; // 6. adjust pointers @@ -22087,22 +22265,28 @@ std::pair avx512_convert_utf32_to_utf8(const char32_t* b continue; } // Must check for overflow in packing - const __m256i saturation_bytemask = _mm256_cmpeq_epi32(_mm256_and_si256(_mm256_or_si256(in, nextin), v_ffff0000), v_0000); - const uint32_t saturation_bitmask = static_cast(_mm256_movemask_epi8(saturation_bytemask)); + const __m256i saturation_bytemask = _mm256_cmpeq_epi32( + _mm256_and_si256(_mm256_or_si256(in, nextin), v_ffff0000), v_0000); + const uint32_t saturation_bitmask = + static_cast(_mm256_movemask_epi8(saturation_bytemask)); if (saturation_bitmask == 0xffffffff) { // case: code units from register produce either 1, 2 or 3 UTF-8 bytes const __m256i v_d800 = _mm256_set1_epi16((uint16_t)0xd800); - forbidden_bytemask = _mm256_or_si256(forbidden_bytemask, _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_f800), v_d800)); + forbidden_bytemask = _mm256_or_si256( + forbidden_bytemask, + _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_f800), v_d800)); - const __m256i dup_even = _mm256_setr_epi16(0x0000, 0x0202, 0x0404, 0x0606, - 0x0808, 0x0a0a, 0x0c0c, 0x0e0e, - 0x0000, 0x0202, 0x0404, 0x0606, - 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); + const __m256i dup_even = _mm256_setr_epi16( + 0x0000, 0x0202, 0x0404, 0x0606, 0x0808, 0x0a0a, 0x0c0c, 0x0e0e, + 0x0000, 0x0202, 0x0404, 0x0606, 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); /* In this branch we handle three cases: - 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - single UFT-8 byte - 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two UTF-8 bytes - 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - three UTF-8 bytes + 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - + single UFT-8 byte + 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two + UTF-8 bytes + 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - + three UTF-8 bytes We expand the input word (16-bit) into two code units (32-bit), thus we have room for four bytes. However, we need five distinct bit @@ -22129,7 +22313,7 @@ std::pair avx512_convert_utf32_to_utf8(const char32_t* b // [bbcc|cccc|bbcc|cccc] => [00cc|cccc|0bcc|cccc] const __m256i t1 = _mm256_and_si256(t0, simdutf_vec(0b0011111101111111)); // [00cc|cccc|0bcc|cccc] => [10cc|cccc|0bcc|cccc] - const __m256i t2 = _mm256_or_si256 (t1, simdutf_vec(0b1000000000000000)); + const __m256i t2 = _mm256_or_si256(t1, simdutf_vec(0b1000000000000000)); // [aaaa|bbbb|bbcc|cccc] => [0000|aaaa|bbbb|bbcc] const __m256i s0 = _mm256_srli_epi16(in_16, 4); @@ -22139,7 +22323,8 @@ std::pair avx512_convert_utf32_to_utf8(const char32_t* b const __m256i s2 = _mm256_maddubs_epi16(s1, simdutf_vec(0x0140)); // [00bb|bbbb|0000|aaaa] => [11bb|bbbb|1110|aaaa] const __m256i s3 = _mm256_or_si256(s2, simdutf_vec(0b1100000011100000)); - const __m256i m0 = _mm256_andnot_si256(one_or_two_bytes_bytemask, simdutf_vec(0b0100000000000000)); + const __m256i m0 = _mm256_andnot_si256(one_or_two_bytes_bytemask, + simdutf_vec(0b0100000000000000)); const __m256i s4 = _mm256_xor_si256(s3, m0); #undef simdutf_vec @@ -22150,78 +22335,93 @@ std::pair avx512_convert_utf32_to_utf8(const char32_t* b // 5. compress 32-bit code units into 1, 2 or 3 bytes -- 2 x shuffle const uint32_t mask = (one_byte_bitmask & 0x55555555) | (one_or_two_bytes_bitmask & 0xaaaaaaaa); - // Due to the wider registers, the following path is less likely to be useful. + // Due to the wider registers, the following path is less likely to be + // useful. /*if(mask == 0) { // We only have three-byte code units. Use fast path. - const __m256i shuffle = _mm256_setr_epi8(2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1, 2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1); - const __m256i utf8_0 = _mm256_shuffle_epi8(out0, shuffle); - const __m256i utf8_1 = _mm256_shuffle_epi8(out1, shuffle); + const __m256i shuffle = + _mm256_setr_epi8(2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1, + 2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1); const __m256i utf8_0 = + _mm256_shuffle_epi8(out0, shuffle); const __m256i utf8_1 = + _mm256_shuffle_epi8(out1, shuffle); _mm_storeu_si128((__m128i*)utf8_output, _mm256_castsi256_si128(utf8_0)); utf8_output += 12; _mm_storeu_si128((__m128i*)utf8_output, _mm256_castsi256_si128(utf8_1)); utf8_output += 12; - _mm_storeu_si128((__m128i*)utf8_output, _mm256_extractf128_si256(utf8_0,1)); - utf8_output += 12; - _mm_storeu_si128((__m128i*)utf8_output, _mm256_extractf128_si256(utf8_1,1)); - utf8_output += 12; - buf += 16; + _mm_storeu_si128((__m128i*)utf8_output, + _mm256_extractf128_si256(utf8_0,1)); utf8_output += 12; + _mm_storeu_si128((__m128i*)utf8_output, + _mm256_extractf128_si256(utf8_1,1)); utf8_output += 12; buf += 16; continue; }*/ const uint8_t mask0 = uint8_t(mask); - const uint8_t* row0 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; - const __m128i shuffle0 = _mm_loadu_si128((__m128i*)(row0 + 1)); - const __m128i utf8_0 = _mm_shuffle_epi8(_mm256_castsi256_si128(out0), shuffle0); + const uint8_t *row0 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; + const __m128i shuffle0 = _mm_loadu_si128((__m128i *)(row0 + 1)); + const __m128i utf8_0 = + _mm_shuffle_epi8(_mm256_castsi256_si128(out0), shuffle0); const uint8_t mask1 = static_cast(mask >> 8); - const uint8_t* row1 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; - const __m128i shuffle1 = _mm_loadu_si128((__m128i*)(row1 + 1)); - const __m128i utf8_1 = _mm_shuffle_epi8(_mm256_castsi256_si128(out1), shuffle1); + const uint8_t *row1 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; + const __m128i shuffle1 = _mm_loadu_si128((__m128i *)(row1 + 1)); + const __m128i utf8_1 = + _mm_shuffle_epi8(_mm256_castsi256_si128(out1), shuffle1); const uint8_t mask2 = static_cast(mask >> 16); - const uint8_t* row2 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask2][0]; - const __m128i shuffle2 = _mm_loadu_si128((__m128i*)(row2 + 1)); - const __m128i utf8_2 = _mm_shuffle_epi8(_mm256_extractf128_si256(out0,1), shuffle2); - + const uint8_t *row2 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask2][0]; + const __m128i shuffle2 = _mm_loadu_si128((__m128i *)(row2 + 1)); + const __m128i utf8_2 = + _mm_shuffle_epi8(_mm256_extractf128_si256(out0, 1), shuffle2); const uint8_t mask3 = static_cast(mask >> 24); - const uint8_t* row3 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask3][0]; - const __m128i shuffle3 = _mm_loadu_si128((__m128i*)(row3 + 1)); - const __m128i utf8_3 = _mm_shuffle_epi8(_mm256_extractf128_si256(out1,1), shuffle3); + const uint8_t *row3 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask3][0]; + const __m128i shuffle3 = _mm_loadu_si128((__m128i *)(row3 + 1)); + const __m128i utf8_3 = + _mm_shuffle_epi8(_mm256_extractf128_si256(out1, 1), shuffle3); - _mm_storeu_si128((__m128i*)utf8_output, utf8_0); + _mm_storeu_si128((__m128i *)utf8_output, utf8_0); utf8_output += row0[0]; - _mm_storeu_si128((__m128i*)utf8_output, utf8_1); + _mm_storeu_si128((__m128i *)utf8_output, utf8_1); utf8_output += row1[0]; - _mm_storeu_si128((__m128i*)utf8_output, utf8_2); + _mm_storeu_si128((__m128i *)utf8_output, utf8_2); utf8_output += row2[0]; - _mm_storeu_si128((__m128i*)utf8_output, utf8_3); + _mm_storeu_si128((__m128i *)utf8_output, utf8_3); utf8_output += row3[0]; buf += 16; } else { - // case: at least one 32-bit word is larger than 0xFFFF <=> it will produce four UTF-8 bytes. - // Let us do a scalar fallback. - // It may seem wasteful to use scalar code, but being efficient with SIMD - // may require large, non-trivial tables? + // case: at least one 32-bit word is larger than 0xFFFF <=> it will + // produce four UTF-8 bytes. Let us do a scalar fallback. It may seem + // wasteful to use scalar code, but being efficient with SIMD may require + // large, non-trivial tables? size_t forward = 15; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { uint32_t word = buf[k]; - if((word & 0xFFFFFF80)==0) { // 1-byte (ASCII) + if ((word & 0xFFFFFF80) == 0) { // 1-byte (ASCII) *utf8_output++ = char(word); - } else if((word & 0xFFFFF800)==0) { // 2-byte - *utf8_output++ = char((word>>6) | 0b11000000); + } else if ((word & 0xFFFFF800) == 0) { // 2-byte + *utf8_output++ = char((word >> 6) | 0b11000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); - } else if((word & 0xFFFF0000 )==0) { // 3-byte - if (word >= 0xD800 && word <= 0xDFFF) { return std::make_pair(nullptr, utf8_output); } - *utf8_output++ = char((word>>12) | 0b11100000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + } else if ((word & 0xFFFF0000) == 0) { // 3-byte + if (word >= 0xD800 && word <= 0xDFFF) { + return std::make_pair(nullptr, utf8_output); + } + *utf8_output++ = char((word >> 12) | 0b11100000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); - } else { // 4-byte - if (word > 0x10FFFF) { return std::make_pair(nullptr, utf8_output); } - *utf8_output++ = char((word>>18) | 0b11110000); - *utf8_output++ = char(((word>>12) & 0b111111) | 0b10000000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + } else { // 4-byte + if (word > 0x10FFFF) { + return std::make_pair(nullptr, utf8_output); + } + *utf8_output++ = char((word >> 18) | 0b11110000); + *utf8_output++ = char(((word >> 12) & 0b111111) | 0b10000000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); } } @@ -22231,19 +22431,24 @@ std::pair avx512_convert_utf32_to_utf8(const char32_t* b // check for invalid input const __m256i v_10ffff = _mm256_set1_epi32((uint32_t)0x10ffff); - if(static_cast(_mm256_movemask_epi8(_mm256_cmpeq_epi32(_mm256_max_epu32(running_max, v_10ffff), v_10ffff))) != 0xffffffff) { + if (static_cast(_mm256_movemask_epi8(_mm256_cmpeq_epi32( + _mm256_max_epu32(running_max, v_10ffff), v_10ffff))) != 0xffffffff) { return std::make_pair(nullptr, utf8_output); } - if (static_cast(_mm256_movemask_epi8(forbidden_bytemask)) != 0) { return std::make_pair(nullptr, utf8_output); } + if (static_cast(_mm256_movemask_epi8(forbidden_bytemask)) != 0) { + return std::make_pair(nullptr, utf8_output); + } return std::make_pair(buf, utf8_output); } // Todo: currently, this is just the haswell code, optimize for icelake kernel. -std::pair avx512_convert_utf32_to_utf8_with_errors(const char32_t* buf, size_t len, char* utf8_output) { - const char32_t* end = buf + len; - const char32_t* start = buf; +std::pair +avx512_convert_utf32_to_utf8_with_errors(const char32_t *buf, size_t len, + char *utf8_output) { + const char32_t *end = buf + len; + const char32_t *start = buf; const __m256i v_0000 = _mm256_setzero_si256(); const __m256i v_ffff0000 = _mm256_set1_epi32((uint32_t)0xffff0000); @@ -22253,40 +22458,53 @@ std::pair avx512_convert_utf32_to_utf8_with_errors(const char32_t const __m256i v_7fffffff = _mm256_set1_epi32((uint32_t)0x7fffffff); const __m256i v_10ffff = _mm256_set1_epi32((uint32_t)0x10ffff); - const size_t safety_margin = 12; // to avoid overruns, see issue https://github.com/simdutf/simdutf/issues/92 + const size_t safety_margin = + 12; // to avoid overruns, see issue + // https://github.com/simdutf/simdutf/issues/92 while (end - buf >= std::ptrdiff_t(16 + safety_margin)) { - __m256i in = _mm256_loadu_si256((__m256i*)buf); - __m256i nextin = _mm256_loadu_si256((__m256i*)buf+1); + __m256i in = _mm256_loadu_si256((__m256i *)buf); + __m256i nextin = _mm256_loadu_si256((__m256i *)buf + 1); // Check for too large input - const __m256i max_input = _mm256_max_epu32(_mm256_max_epu32(in, nextin), v_10ffff); - if(static_cast(_mm256_movemask_epi8(_mm256_cmpeq_epi32(max_input, v_10ffff))) != 0xffffffff) { - return std::make_pair(result(error_code::TOO_LARGE, buf - start), utf8_output); + const __m256i max_input = + _mm256_max_epu32(_mm256_max_epu32(in, nextin), v_10ffff); + if (static_cast(_mm256_movemask_epi8( + _mm256_cmpeq_epi32(max_input, v_10ffff))) != 0xffffffff) { + return std::make_pair(result(error_code::TOO_LARGE, buf - start), + utf8_output); } - // Pack 32-bit UTF-32 code units to 16-bit UTF-16 code units with unsigned saturation - __m256i in_16 = _mm256_packus_epi32(_mm256_and_si256(in, v_7fffffff), _mm256_and_si256(nextin, v_7fffffff)); + // Pack 32-bit UTF-32 code units to 16-bit UTF-16 code units with unsigned + // saturation + __m256i in_16 = _mm256_packus_epi32(_mm256_and_si256(in, v_7fffffff), + _mm256_and_si256(nextin, v_7fffffff)); in_16 = _mm256_permute4x64_epi64(in_16, 0b11011000); - // Try to apply UTF-16 => UTF-8 routine on 256 bits (haswell/avx2_convert_utf16_to_utf8.cpp) + // Try to apply UTF-16 => UTF-8 routine on 256 bits + // (haswell/avx2_convert_utf16_to_utf8.cpp) - if(_mm256_testz_si256(in_16, v_ff80)) { // ASCII fast path!!!! + if (_mm256_testz_si256(in_16, v_ff80)) { // ASCII fast path!!!! // 1. pack the bytes - const __m128i utf8_packed = _mm_packus_epi16(_mm256_castsi256_si128(in_16),_mm256_extractf128_si256(in_16,1)); + const __m128i utf8_packed = _mm_packus_epi16( + _mm256_castsi256_si128(in_16), _mm256_extractf128_si256(in_16, 1)); // 2. store (16 bytes) - _mm_storeu_si128((__m128i*)utf8_output, utf8_packed); + _mm_storeu_si128((__m128i *)utf8_output, utf8_packed); // 3. adjust pointers buf += 16; utf8_output += 16; continue; // we are done for this round! } // no bits set above 7th bit - const __m256i one_byte_bytemask = _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_ff80), v_0000); - const uint32_t one_byte_bitmask = static_cast(_mm256_movemask_epi8(one_byte_bytemask)); + const __m256i one_byte_bytemask = + _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_ff80), v_0000); + const uint32_t one_byte_bitmask = + static_cast(_mm256_movemask_epi8(one_byte_bytemask)); // no bits set above 11th bit - const __m256i one_or_two_bytes_bytemask = _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_f800), v_0000); - const uint32_t one_or_two_bytes_bitmask = static_cast(_mm256_movemask_epi8(one_or_two_bytes_bytemask)); + const __m256i one_or_two_bytes_bytemask = + _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_f800), v_0000); + const uint32_t one_or_two_bytes_bitmask = + static_cast(_mm256_movemask_epi8(one_or_two_bytes_bytemask)); if (one_or_two_bytes_bitmask == 0xffffffff) { // 1. prepare 2-byte values // input 16-bit word : [0000|0aaa|aabb|bbbb] x 8 @@ -22306,25 +22524,32 @@ std::pair avx512_convert_utf32_to_utf8_with_errors(const char32_t const __m256i t4 = _mm256_or_si256(t3, v_c080); // 2. merge ASCII and 2-byte codewords - const __m256i utf8_unpacked = _mm256_blendv_epi8(t4, in_16, one_byte_bytemask); + const __m256i utf8_unpacked = + _mm256_blendv_epi8(t4, in_16, one_byte_bytemask); // 3. prepare bitmask for 8-bit lookup const uint32_t M0 = one_byte_bitmask & 0x55555555; const uint32_t M1 = M0 >> 7; - const uint32_t M2 = (M1 | M0) & 0x00ff00ff; + const uint32_t M2 = (M1 | M0) & 0x00ff00ff; // 4. pack the bytes - const uint8_t* row = &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2)][0]; - const uint8_t* row_2 = &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2>>16)][0]; + const uint8_t *row = + &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2)][0]; + const uint8_t *row_2 = + &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2 >> + 16)][0]; - const __m128i shuffle = _mm_loadu_si128((__m128i*)(row + 1)); - const __m128i shuffle_2 = _mm_loadu_si128((__m128i*)(row_2 + 1)); + const __m128i shuffle = _mm_loadu_si128((__m128i *)(row + 1)); + const __m128i shuffle_2 = _mm_loadu_si128((__m128i *)(row_2 + 1)); - const __m256i utf8_packed = _mm256_shuffle_epi8(utf8_unpacked, _mm256_setr_m128i(shuffle,shuffle_2)); + const __m256i utf8_packed = _mm256_shuffle_epi8( + utf8_unpacked, _mm256_setr_m128i(shuffle, shuffle_2)); // 5. store bytes - _mm_storeu_si128((__m128i*)utf8_output, _mm256_castsi256_si128(utf8_packed)); + _mm_storeu_si128((__m128i *)utf8_output, + _mm256_castsi256_si128(utf8_packed)); utf8_output += row[0]; - _mm_storeu_si128((__m128i*)utf8_output, _mm256_extractf128_si256(utf8_packed,1)); + _mm_storeu_si128((__m128i *)utf8_output, + _mm256_extractf128_si256(utf8_packed, 1)); utf8_output += row_2[0]; // 6. adjust pointers @@ -22332,27 +22557,34 @@ std::pair avx512_convert_utf32_to_utf8_with_errors(const char32_t continue; } // Must check for overflow in packing - const __m256i saturation_bytemask = _mm256_cmpeq_epi32(_mm256_and_si256(_mm256_or_si256(in, nextin), v_ffff0000), v_0000); - const uint32_t saturation_bitmask = static_cast(_mm256_movemask_epi8(saturation_bytemask)); + const __m256i saturation_bytemask = _mm256_cmpeq_epi32( + _mm256_and_si256(_mm256_or_si256(in, nextin), v_ffff0000), v_0000); + const uint32_t saturation_bitmask = + static_cast(_mm256_movemask_epi8(saturation_bytemask)); if (saturation_bitmask == 0xffffffff) { // case: code units from register produce either 1, 2 or 3 UTF-8 bytes // Check for illegal surrogate code units const __m256i v_d800 = _mm256_set1_epi16((uint16_t)0xd800); - const __m256i forbidden_bytemask = _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_f800), v_d800); - if (static_cast(_mm256_movemask_epi8(forbidden_bytemask)) != 0x0) { - return std::make_pair(result(error_code::SURROGATE, buf - start), utf8_output); + const __m256i forbidden_bytemask = + _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_f800), v_d800); + if (static_cast(_mm256_movemask_epi8(forbidden_bytemask)) != + 0x0) { + return std::make_pair(result(error_code::SURROGATE, buf - start), + utf8_output); } - const __m256i dup_even = _mm256_setr_epi16(0x0000, 0x0202, 0x0404, 0x0606, - 0x0808, 0x0a0a, 0x0c0c, 0x0e0e, - 0x0000, 0x0202, 0x0404, 0x0606, - 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); + const __m256i dup_even = _mm256_setr_epi16( + 0x0000, 0x0202, 0x0404, 0x0606, 0x0808, 0x0a0a, 0x0c0c, 0x0e0e, + 0x0000, 0x0202, 0x0404, 0x0606, 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); /* In this branch we handle three cases: - 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - single UFT-8 byte - 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two UTF-8 bytes - 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - three UTF-8 bytes + 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - + single UFT-8 byte + 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two + UTF-8 bytes + 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - + three UTF-8 bytes We expand the input word (16-bit) into two code units (32-bit), thus we have room for four bytes. However, we need five distinct bit @@ -22379,7 +22611,7 @@ std::pair avx512_convert_utf32_to_utf8_with_errors(const char32_t // [bbcc|cccc|bbcc|cccc] => [00cc|cccc|0bcc|cccc] const __m256i t1 = _mm256_and_si256(t0, simdutf_vec(0b0011111101111111)); // [00cc|cccc|0bcc|cccc] => [10cc|cccc|0bcc|cccc] - const __m256i t2 = _mm256_or_si256 (t1, simdutf_vec(0b1000000000000000)); + const __m256i t2 = _mm256_or_si256(t1, simdutf_vec(0b1000000000000000)); // [aaaa|bbbb|bbcc|cccc] => [0000|aaaa|bbbb|bbcc] const __m256i s0 = _mm256_srli_epi16(in_16, 4); @@ -22389,7 +22621,8 @@ std::pair avx512_convert_utf32_to_utf8_with_errors(const char32_t const __m256i s2 = _mm256_maddubs_epi16(s1, simdutf_vec(0x0140)); // [00bb|bbbb|0000|aaaa] => [11bb|bbbb|1110|aaaa] const __m256i s3 = _mm256_or_si256(s2, simdutf_vec(0b1100000011100000)); - const __m256i m0 = _mm256_andnot_si256(one_or_two_bytes_bytemask, simdutf_vec(0b0100000000000000)); + const __m256i m0 = _mm256_andnot_si256(one_or_two_bytes_bytemask, + simdutf_vec(0b0100000000000000)); const __m256i s4 = _mm256_xor_si256(s3, m0); #undef simdutf_vec @@ -22400,78 +22633,95 @@ std::pair avx512_convert_utf32_to_utf8_with_errors(const char32_t // 5. compress 32-bit code units into 1, 2 or 3 bytes -- 2 x shuffle const uint32_t mask = (one_byte_bitmask & 0x55555555) | (one_or_two_bytes_bitmask & 0xaaaaaaaa); - // Due to the wider registers, the following path is less likely to be useful. + // Due to the wider registers, the following path is less likely to be + // useful. /*if(mask == 0) { // We only have three-byte code units. Use fast path. - const __m256i shuffle = _mm256_setr_epi8(2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1, 2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1); - const __m256i utf8_0 = _mm256_shuffle_epi8(out0, shuffle); - const __m256i utf8_1 = _mm256_shuffle_epi8(out1, shuffle); + const __m256i shuffle = + _mm256_setr_epi8(2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1, + 2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1); const __m256i utf8_0 = + _mm256_shuffle_epi8(out0, shuffle); const __m256i utf8_1 = + _mm256_shuffle_epi8(out1, shuffle); _mm_storeu_si128((__m128i*)utf8_output, _mm256_castsi256_si128(utf8_0)); utf8_output += 12; _mm_storeu_si128((__m128i*)utf8_output, _mm256_castsi256_si128(utf8_1)); utf8_output += 12; - _mm_storeu_si128((__m128i*)utf8_output, _mm256_extractf128_si256(utf8_0,1)); - utf8_output += 12; - _mm_storeu_si128((__m128i*)utf8_output, _mm256_extractf128_si256(utf8_1,1)); - utf8_output += 12; - buf += 16; + _mm_storeu_si128((__m128i*)utf8_output, + _mm256_extractf128_si256(utf8_0,1)); utf8_output += 12; + _mm_storeu_si128((__m128i*)utf8_output, + _mm256_extractf128_si256(utf8_1,1)); utf8_output += 12; buf += 16; continue; }*/ const uint8_t mask0 = uint8_t(mask); - const uint8_t* row0 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; - const __m128i shuffle0 = _mm_loadu_si128((__m128i*)(row0 + 1)); - const __m128i utf8_0 = _mm_shuffle_epi8(_mm256_castsi256_si128(out0), shuffle0); + const uint8_t *row0 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; + const __m128i shuffle0 = _mm_loadu_si128((__m128i *)(row0 + 1)); + const __m128i utf8_0 = + _mm_shuffle_epi8(_mm256_castsi256_si128(out0), shuffle0); const uint8_t mask1 = static_cast(mask >> 8); - const uint8_t* row1 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; - const __m128i shuffle1 = _mm_loadu_si128((__m128i*)(row1 + 1)); - const __m128i utf8_1 = _mm_shuffle_epi8(_mm256_castsi256_si128(out1), shuffle1); + const uint8_t *row1 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; + const __m128i shuffle1 = _mm_loadu_si128((__m128i *)(row1 + 1)); + const __m128i utf8_1 = + _mm_shuffle_epi8(_mm256_castsi256_si128(out1), shuffle1); const uint8_t mask2 = static_cast(mask >> 16); - const uint8_t* row2 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask2][0]; - const __m128i shuffle2 = _mm_loadu_si128((__m128i*)(row2 + 1)); - const __m128i utf8_2 = _mm_shuffle_epi8(_mm256_extractf128_si256(out0,1), shuffle2); - + const uint8_t *row2 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask2][0]; + const __m128i shuffle2 = _mm_loadu_si128((__m128i *)(row2 + 1)); + const __m128i utf8_2 = + _mm_shuffle_epi8(_mm256_extractf128_si256(out0, 1), shuffle2); const uint8_t mask3 = static_cast(mask >> 24); - const uint8_t* row3 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask3][0]; - const __m128i shuffle3 = _mm_loadu_si128((__m128i*)(row3 + 1)); - const __m128i utf8_3 = _mm_shuffle_epi8(_mm256_extractf128_si256(out1,1), shuffle3); + const uint8_t *row3 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask3][0]; + const __m128i shuffle3 = _mm_loadu_si128((__m128i *)(row3 + 1)); + const __m128i utf8_3 = + _mm_shuffle_epi8(_mm256_extractf128_si256(out1, 1), shuffle3); - _mm_storeu_si128((__m128i*)utf8_output, utf8_0); + _mm_storeu_si128((__m128i *)utf8_output, utf8_0); utf8_output += row0[0]; - _mm_storeu_si128((__m128i*)utf8_output, utf8_1); + _mm_storeu_si128((__m128i *)utf8_output, utf8_1); utf8_output += row1[0]; - _mm_storeu_si128((__m128i*)utf8_output, utf8_2); + _mm_storeu_si128((__m128i *)utf8_output, utf8_2); utf8_output += row2[0]; - _mm_storeu_si128((__m128i*)utf8_output, utf8_3); + _mm_storeu_si128((__m128i *)utf8_output, utf8_3); utf8_output += row3[0]; buf += 16; } else { - // case: at least one 32-bit word is larger than 0xFFFF <=> it will produce four UTF-8 bytes. - // Let us do a scalar fallback. - // It may seem wasteful to use scalar code, but being efficient with SIMD - // may require large, non-trivial tables? + // case: at least one 32-bit word is larger than 0xFFFF <=> it will + // produce four UTF-8 bytes. Let us do a scalar fallback. It may seem + // wasteful to use scalar code, but being efficient with SIMD may require + // large, non-trivial tables? size_t forward = 15; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { uint32_t word = buf[k]; - if((word & 0xFFFFFF80)==0) { // 1-byte (ASCII) + if ((word & 0xFFFFFF80) == 0) { // 1-byte (ASCII) *utf8_output++ = char(word); - } else if((word & 0xFFFFF800)==0) { // 2-byte - *utf8_output++ = char((word>>6) | 0b11000000); + } else if ((word & 0xFFFFF800) == 0) { // 2-byte + *utf8_output++ = char((word >> 6) | 0b11000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); - } else if((word & 0xFFFF0000 )==0) { // 3-byte - if (word >= 0xD800 && word <= 0xDFFF) { return std::make_pair(result(error_code::SURROGATE, buf - start + k), utf8_output); } - *utf8_output++ = char((word>>12) | 0b11100000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + } else if ((word & 0xFFFF0000) == 0) { // 3-byte + if (word >= 0xD800 && word <= 0xDFFF) { + return std::make_pair( + result(error_code::SURROGATE, buf - start + k), utf8_output); + } + *utf8_output++ = char((word >> 12) | 0b11100000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); - } else { // 4-byte - if (word > 0x10FFFF) { return std::make_pair(result(error_code::TOO_LARGE, buf - start + k), utf8_output); } - *utf8_output++ = char((word>>18) | 0b11110000); - *utf8_output++ = char(((word>>12) & 0b111111) | 0b10000000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + } else { // 4-byte + if (word > 0x10FFFF) { + return std::make_pair( + result(error_code::TOO_LARGE, buf - start + k), utf8_output); + } + *utf8_output++ = char((word >> 18) | 0b11110000); + *utf8_output++ = char(((word >> 12) & 0b111111) | 0b10000000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); } } @@ -22487,55 +22737,75 @@ std::pair avx512_convert_utf32_to_utf8_with_errors(const char32_t // Todo: currently, this is just the haswell code, optimize for icelake kernel. template -std::pair avx512_convert_utf32_to_utf16(const char32_t* buf, size_t len, char16_t* utf16_output) { - const char32_t* end = buf + len; +std::pair +avx512_convert_utf32_to_utf16(const char32_t *buf, size_t len, + char16_t *utf16_output) { + const char32_t *end = buf + len; - const size_t safety_margin = 12; // to avoid overruns, see issue https://github.com/simdutf/simdutf/issues/92 + const size_t safety_margin = + 12; // to avoid overruns, see issue + // https://github.com/simdutf/simdutf/issues/92 __m256i forbidden_bytemask = _mm256_setzero_si256(); - while (end - buf >= std::ptrdiff_t(8 + safety_margin)) { - __m256i in = _mm256_loadu_si256((__m256i*)buf); + __m256i in = _mm256_loadu_si256((__m256i *)buf); const __m256i v_00000000 = _mm256_setzero_si256(); const __m256i v_ffff0000 = _mm256_set1_epi32((int32_t)0xffff0000); // no bits set above 16th bit <=> can pack to UTF16 without surrogate pairs - const __m256i saturation_bytemask = _mm256_cmpeq_epi32(_mm256_and_si256(in, v_ffff0000), v_00000000); - const uint32_t saturation_bitmask = static_cast(_mm256_movemask_epi8(saturation_bytemask)); + const __m256i saturation_bytemask = + _mm256_cmpeq_epi32(_mm256_and_si256(in, v_ffff0000), v_00000000); + const uint32_t saturation_bitmask = + static_cast(_mm256_movemask_epi8(saturation_bytemask)); if (saturation_bitmask == 0xffffffff) { const __m256i v_f800 = _mm256_set1_epi32((uint32_t)0xf800); const __m256i v_d800 = _mm256_set1_epi32((uint32_t)0xd800); - forbidden_bytemask = _mm256_or_si256(forbidden_bytemask, _mm256_cmpeq_epi32(_mm256_and_si256(in, v_f800), v_d800)); + forbidden_bytemask = _mm256_or_si256( + forbidden_bytemask, + _mm256_cmpeq_epi32(_mm256_and_si256(in, v_f800), v_d800)); - __m128i utf16_packed = _mm_packus_epi32(_mm256_castsi256_si128(in),_mm256_extractf128_si256(in,1)); + __m128i utf16_packed = _mm_packus_epi32(_mm256_castsi256_si128(in), + _mm256_extractf128_si256(in, 1)); if (big_endian) { - const __m128i swap = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + const __m128i swap = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); utf16_packed = _mm_shuffle_epi8(utf16_packed, swap); } - _mm_storeu_si128((__m128i*)utf16_output, utf16_packed); + _mm_storeu_si128((__m128i *)utf16_output, utf16_packed); utf16_output += 8; buf += 8; } else { size_t forward = 7; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { uint32_t word = buf[k]; - if((word & 0xFFFF0000)==0) { + if ((word & 0xFFFF0000) == 0) { // will not generate a surrogate pair - if (word >= 0xD800 && word <= 0xDFFF) { return std::make_pair(nullptr, utf16_output); } - *utf16_output++ = big_endian ? char16_t((uint16_t(word) >> 8) | (uint16_t(word) << 8)) : char16_t(word); + if (word >= 0xD800 && word <= 0xDFFF) { + return std::make_pair(nullptr, utf16_output); + } + *utf16_output++ = + big_endian + ? char16_t((uint16_t(word) >> 8) | (uint16_t(word) << 8)) + : char16_t(word); } else { // will generate a surrogate pair - if (word > 0x10FFFF) { return std::make_pair(nullptr, utf16_output); } + if (word > 0x10FFFF) { + return std::make_pair(nullptr, utf16_output); + } word -= 0x10000; uint16_t high_surrogate = uint16_t(0xD800 + (word >> 10)); uint16_t low_surrogate = uint16_t(0xDC00 + (word & 0x3FF)); if (big_endian) { - high_surrogate = uint16_t((high_surrogate >> 8) | (high_surrogate << 8)); - low_surrogate = uint16_t((low_surrogate >> 8) | (low_surrogate << 8)); + high_surrogate = + uint16_t((high_surrogate >> 8) | (high_surrogate << 8)); + low_surrogate = + uint16_t((low_surrogate >> 8) | (low_surrogate << 8)); } *utf16_output++ = char16_t(high_surrogate); *utf16_output++ = char16_t(low_surrogate); @@ -22546,64 +22816,90 @@ std::pair avx512_convert_utf32_to_utf16(const char32 } // check for invalid input - if (static_cast(_mm256_movemask_epi8(forbidden_bytemask)) != 0) { return std::make_pair(nullptr, utf16_output); } + if (static_cast(_mm256_movemask_epi8(forbidden_bytemask)) != 0) { + return std::make_pair(nullptr, utf16_output); + } return std::make_pair(buf, utf16_output); } // Todo: currently, this is just the haswell code, optimize for icelake kernel. template -std::pair avx512_convert_utf32_to_utf16_with_errors(const char32_t* buf, size_t len, char16_t* utf16_output) { - const char32_t* start = buf; - const char32_t* end = buf + len; +std::pair +avx512_convert_utf32_to_utf16_with_errors(const char32_t *buf, size_t len, + char16_t *utf16_output) { + const char32_t *start = buf; + const char32_t *end = buf + len; - const size_t safety_margin = 12; // to avoid overruns, see issue https://github.com/simdutf/simdutf/issues/92 + const size_t safety_margin = + 12; // to avoid overruns, see issue + // https://github.com/simdutf/simdutf/issues/92 while (end - buf >= std::ptrdiff_t(8 + safety_margin)) { - __m256i in = _mm256_loadu_si256((__m256i*)buf); + __m256i in = _mm256_loadu_si256((__m256i *)buf); const __m256i v_00000000 = _mm256_setzero_si256(); const __m256i v_ffff0000 = _mm256_set1_epi32((int32_t)0xffff0000); // no bits set above 16th bit <=> can pack to UTF16 without surrogate pairs - const __m256i saturation_bytemask = _mm256_cmpeq_epi32(_mm256_and_si256(in, v_ffff0000), v_00000000); - const uint32_t saturation_bitmask = static_cast(_mm256_movemask_epi8(saturation_bytemask)); + const __m256i saturation_bytemask = + _mm256_cmpeq_epi32(_mm256_and_si256(in, v_ffff0000), v_00000000); + const uint32_t saturation_bitmask = + static_cast(_mm256_movemask_epi8(saturation_bytemask)); if (saturation_bitmask == 0xffffffff) { const __m256i v_f800 = _mm256_set1_epi32((uint32_t)0xf800); const __m256i v_d800 = _mm256_set1_epi32((uint32_t)0xd800); - const __m256i forbidden_bytemask = _mm256_cmpeq_epi32(_mm256_and_si256(in, v_f800), v_d800); - if (static_cast(_mm256_movemask_epi8(forbidden_bytemask)) != 0x0) { - return std::make_pair(result(error_code::SURROGATE, buf - start), utf16_output); + const __m256i forbidden_bytemask = + _mm256_cmpeq_epi32(_mm256_and_si256(in, v_f800), v_d800); + if (static_cast(_mm256_movemask_epi8(forbidden_bytemask)) != + 0x0) { + return std::make_pair(result(error_code::SURROGATE, buf - start), + utf16_output); } - __m128i utf16_packed = _mm_packus_epi32(_mm256_castsi256_si128(in),_mm256_extractf128_si256(in,1)); + __m128i utf16_packed = _mm_packus_epi32(_mm256_castsi256_si128(in), + _mm256_extractf128_si256(in, 1)); if (big_endian) { - const __m128i swap = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + const __m128i swap = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); utf16_packed = _mm_shuffle_epi8(utf16_packed, swap); } - _mm_storeu_si128((__m128i*)utf16_output, utf16_packed); + _mm_storeu_si128((__m128i *)utf16_output, utf16_packed); utf16_output += 8; buf += 8; } else { size_t forward = 7; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { uint32_t word = buf[k]; - if((word & 0xFFFF0000)==0) { + if ((word & 0xFFFF0000) == 0) { // will not generate a surrogate pair - if (word >= 0xD800 && word <= 0xDFFF) { return std::make_pair(result(error_code::SURROGATE, buf - start + k), utf16_output); } - *utf16_output++ = big_endian ? char16_t((uint16_t(word) >> 8) | (uint16_t(word) << 8)) : char16_t(word); + if (word >= 0xD800 && word <= 0xDFFF) { + return std::make_pair( + result(error_code::SURROGATE, buf - start + k), utf16_output); + } + *utf16_output++ = + big_endian + ? char16_t((uint16_t(word) >> 8) | (uint16_t(word) << 8)) + : char16_t(word); } else { // will generate a surrogate pair - if (word > 0x10FFFF) { return std::make_pair(result(error_code::TOO_LARGE, buf - start + k), utf16_output); } + if (word > 0x10FFFF) { + return std::make_pair( + result(error_code::TOO_LARGE, buf - start + k), utf16_output); + } word -= 0x10000; uint16_t high_surrogate = uint16_t(0xD800 + (word >> 10)); uint16_t low_surrogate = uint16_t(0xDC00 + (word & 0x3FF)); if (big_endian) { - high_surrogate = uint16_t((high_surrogate >> 8) | (high_surrogate << 8)); - low_surrogate = uint16_t((low_surrogate >> 8) | (low_surrogate << 8)); + high_surrogate = + uint16_t((high_surrogate >> 8) | (high_surrogate << 8)); + low_surrogate = + uint16_t((low_surrogate >> 8) | (low_surrogate << 8)); } *utf16_output++ = char16_t(high_surrogate); *utf16_output++ = char16_t(low_surrogate); @@ -22619,17 +22915,20 @@ std::pair avx512_convert_utf32_to_utf16_with_errors(const cha /* begin file src/icelake/icelake_ascii_validation.inl.cpp */ // file included directly -bool validate_ascii(const char* buf, size_t len) { - const char* end = buf + len; +bool validate_ascii(const char *buf, size_t len) { + const char *end = buf + len; const __m512i ascii = _mm512_set1_epi8((uint8_t)0x80); __m512i running_or = _mm512_setzero_si512(); for (; end - buf >= 64; buf += 64) { - const __m512i utf8 = _mm512_loadu_si512((const __m512i*)buf); - running_or = _mm512_ternarylogic_epi32(running_or, utf8, ascii, 0xf8); // running_or | (utf8 & ascii) + const __m512i utf8 = _mm512_loadu_si512((const __m512i *)buf); + running_or = _mm512_ternarylogic_epi32(running_or, utf8, ascii, + 0xf8); // running_or | (utf8 & ascii) } - if(buf < end) { - const __m512i utf8 = _mm512_maskz_loadu_epi8((uint64_t(1) << (end-buf)) - 1,(const __m512i*)buf); - running_or = _mm512_ternarylogic_epi32(running_or, utf8, ascii, 0xf8); // running_or | (utf8 & ascii) + if (buf < end) { + const __m512i utf8 = _mm512_maskz_loadu_epi8( + (uint64_t(1) << (end - buf)) - 1, (const __m512i *)buf); + running_or = _mm512_ternarylogic_epi32(running_or, utf8, ascii, + 0xf8); // running_or | (utf8 & ascii) } return (_mm512_test_epi8_mask(running_or, running_or) == 0); } @@ -22637,92 +22936,97 @@ bool validate_ascii(const char* buf, size_t len) { /* begin file src/icelake/icelake_utf32_validation.inl.cpp */ // file included directly -const char32_t* validate_utf32(const char32_t* buf, size_t len) { - if(len < 16) { return buf; } - const char32_t* end = buf + len - 16; +const char32_t *validate_utf32(const char32_t *buf, size_t len) { + if (len < 16) { + return buf; + } + const char32_t *end = buf + len - 16; - const __m512i offset = _mm512_set1_epi32((uint32_t)0xffff2000); - __m512i currentmax = _mm512_setzero_si512(); - __m512i currentoffsetmax = _mm512_setzero_si512(); + const __m512i offset = _mm512_set1_epi32((uint32_t)0xffff2000); + __m512i currentmax = _mm512_setzero_si512(); + __m512i currentoffsetmax = _mm512_setzero_si512(); - while (buf <= end) { - __m512i utf32 = _mm512_loadu_si512((const __m512i*)buf); - buf += 16; - currentoffsetmax = _mm512_max_epu32(_mm512_add_epi32(utf32, offset), currentoffsetmax); - currentmax = _mm512_max_epu32(utf32, currentmax); - } + while (buf <= end) { + __m512i utf32 = _mm512_loadu_si512((const __m512i *)buf); + buf += 16; + currentoffsetmax = + _mm512_max_epu32(_mm512_add_epi32(utf32, offset), currentoffsetmax); + currentmax = _mm512_max_epu32(utf32, currentmax); + } - const __m512i standardmax = _mm512_set1_epi32((uint32_t)0x10ffff); - const __m512i standardoffsetmax = _mm512_set1_epi32((uint32_t)0xfffff7ff); - __m512i is_zero = _mm512_xor_si512(_mm512_max_epu32(currentmax, standardmax), standardmax); - if (_mm512_test_epi8_mask(is_zero, is_zero) != 0) { - return nullptr; - } - is_zero = _mm512_xor_si512(_mm512_max_epu32(currentoffsetmax, standardoffsetmax), standardoffsetmax); - if (_mm512_test_epi8_mask(is_zero, is_zero) != 0) { - return nullptr; - } + const __m512i standardmax = _mm512_set1_epi32((uint32_t)0x10ffff); + const __m512i standardoffsetmax = _mm512_set1_epi32((uint32_t)0xfffff7ff); + __m512i is_zero = + _mm512_xor_si512(_mm512_max_epu32(currentmax, standardmax), standardmax); + if (_mm512_test_epi8_mask(is_zero, is_zero) != 0) { + return nullptr; + } + is_zero = _mm512_xor_si512( + _mm512_max_epu32(currentoffsetmax, standardoffsetmax), standardoffsetmax); + if (_mm512_test_epi8_mask(is_zero, is_zero) != 0) { + return nullptr; + } - return buf; + return buf; } /* end file src/icelake/icelake_utf32_validation.inl.cpp */ /* begin file src/icelake/icelake_convert_latin1_to_utf8.inl.cpp */ // file included directly -static inline size_t latin1_to_utf8_avx512_vec(__m512i input, size_t input_len, char *utf8_output, int mask_output) { +static inline size_t latin1_to_utf8_avx512_vec(__m512i input, size_t input_len, + char *utf8_output, + int mask_output) { __mmask64 nonascii = _mm512_movepi8_mask(input); size_t output_size = input_len + (size_t)count_ones(nonascii); // Mask to denote whether the byte is a leading byte that is not ascii - __mmask64 sixth = - _mm512_cmpge_epu8_mask(input, _mm512_set1_epi8(-64)); //binary representation of -64: 1100 0000 + __mmask64 sixth = _mm512_cmpge_epu8_mask( + input, _mm512_set1_epi8(-64)); // binary representation of -64: 1100 0000 const uint64_t alternate_bits = UINT64_C(0x5555555555555555); uint64_t ascii = ~nonascii; // the bits in ascii are inverted and zeros are interspersed in between them uint64_t maskA = ~_pdep_u64(ascii, alternate_bits); - uint64_t maskB = ~_pdep_u64(ascii>>32, alternate_bits); + uint64_t maskB = ~_pdep_u64(ascii >> 32, alternate_bits); // interleave bytes from top and bottom halves (abcd...ABCD -> aAbBcCdD) - __m512i input_interleaved = _mm512_permutexvar_epi8(_mm512_set_epi32( - 0x3f1f3e1e, 0x3d1d3c1c, 0x3b1b3a1a, 0x39193818, - 0x37173616, 0x35153414, 0x33133212, 0x31113010, - 0x2f0f2e0e, 0x2d0d2c0c, 0x2b0b2a0a, 0x29092808, - 0x27072606, 0x25052404, 0x23032202, 0x21012000 - ), input); + __m512i input_interleaved = _mm512_permutexvar_epi8( + _mm512_set_epi32(0x3f1f3e1e, 0x3d1d3c1c, 0x3b1b3a1a, 0x39193818, + 0x37173616, 0x35153414, 0x33133212, 0x31113010, + 0x2f0f2e0e, 0x2d0d2c0c, 0x2b0b2a0a, 0x29092808, + 0x27072606, 0x25052404, 0x23032202, 0x21012000), + input); // double size of each byte, and insert the leading byte 1100 0010 -/* -upscale the bytes to 16-bit value, adding the 0b11000000 leading byte in the process. -We adjust for the bytes that have their two most significant bits. This takes care of the first 32 bytes, assuming we interleaved the bytes. */ - __m512i outputA = _mm512_shldi_epi16(input_interleaved, _mm512_set1_epi8(-62), 8); + /* + upscale the bytes to 16-bit value, adding the 0b11000000 leading byte in the + process. We adjust for the bytes that have their two most significant bits. + This takes care of the first 32 bytes, assuming we interleaved the bytes. */ + __m512i outputA = + _mm512_shldi_epi16(input_interleaved, _mm512_set1_epi8(-62), 8); outputA = _mm512_mask_add_epi16( - outputA, - (__mmask32)sixth, - outputA, - _mm512_set1_epi16(1 - 0x4000)); // 1- 0x4000 = 1100 0000 0000 0001???? - - // in the second 32-bit half, set first or second option based on whether original input is leading byte (second case) or not (first case) - __m512i leadingB = _mm512_mask_blend_epi16( - (__mmask32)(sixth>>32), - _mm512_set1_epi16(0x00c2), // 0000 0000 1101 0010 - _mm512_set1_epi16(0x40c3));// 0100 0000 1100 0011 + outputA, (__mmask32)sixth, outputA, + _mm512_set1_epi16(1 - 0x4000)); // 1- 0x4000 = 1100 0000 0000 0001???? + + // in the second 32-bit half, set first or second option based on whether + // original input is leading byte (second case) or not (first case) + __m512i leadingB = + _mm512_mask_blend_epi16((__mmask32)(sixth >> 32), + _mm512_set1_epi16(0x00c2), // 0000 0000 1101 0010 + _mm512_set1_epi16(0x40c3)); // 0100 0000 1100 0011 __m512i outputB = _mm512_ternarylogic_epi32( - input_interleaved, - leadingB, - _mm512_set1_epi16((short)0xff00), - (240 & 170) ^ 204); // (input_interleaved & 0xff00) ^ leadingB + input_interleaved, leadingB, _mm512_set1_epi16((short)0xff00), + (240 & 170) ^ 204); // (input_interleaved & 0xff00) ^ leadingB // prune redundant bytes outputA = _mm512_maskz_compress_epi8(maskA, outputA); outputB = _mm512_maskz_compress_epi8(maskB, outputB); - size_t output_sizeA = (size_t)count_ones((uint32_t)nonascii) + 32; - if(mask_output) { - if(input_len > 32) { // is the second half of the input vector used? + if (mask_output) { + if (input_len > 32) { // is the second half of the input vector used? __mmask64 write_mask = _bzhi_u64(~0ULL, (unsigned int)output_sizeA); _mm512_mask_storeu_epi8(utf8_output, write_mask, outputA); utf8_output += output_sizeA; @@ -22740,9 +23044,10 @@ We adjust for the bytes that have their two most significant bits. This takes ca return output_size; } -static inline size_t latin1_to_utf8_avx512_branch(__m512i input, char *utf8_output) { +static inline size_t latin1_to_utf8_avx512_branch(__m512i input, + char *utf8_output) { __mmask64 nonascii = _mm512_movepi8_mask(input); - if(nonascii) { + if (nonascii) { return latin1_to_utf8_avx512_vec(input, 64, utf8_output, 0); } else { _mm512_storeu_si512(utf8_output, input); @@ -22750,7 +23055,8 @@ static inline size_t latin1_to_utf8_avx512_branch(__m512i input, char *utf8_outp } } -size_t latin1_to_utf8_avx512_start(const char *buf, size_t len, char *utf8_output) { +size_t latin1_to_utf8_avx512_start(const char *buf, size_t len, + char *utf8_output) { char *start = utf8_output; size_t pos = 0; // if there's at least 128 bytes remaining, we don't need to mask the output @@ -22812,22 +23118,25 @@ size_t icelake_convert_latin1_to_utf16(const char *latin1_input, size_t len, } /* end file src/icelake/icelake_convert_latin1_to_utf16.inl.cpp */ /* begin file src/icelake/icelake_convert_latin1_to_utf32.inl.cpp */ -std::pair avx512_convert_latin1_to_utf32(const char* buf, size_t len, char32_t* utf32_output) { - size_t rounded_len = len & ~0xF; // Round down to nearest multiple of 16 +std::pair +avx512_convert_latin1_to_utf32(const char *buf, size_t len, + char32_t *utf32_output) { + size_t rounded_len = len & ~0xF; // Round down to nearest multiple of 16 - for (size_t i = 0; i < rounded_len; i += 16) { - // Load 16 Latin1 characters into a 128-bit register - __m128i in = _mm_loadu_si128((__m128i*)&buf[i]); + for (size_t i = 0; i < rounded_len; i += 16) { + // Load 16 Latin1 characters into a 128-bit register + __m128i in = _mm_loadu_si128((__m128i *)&buf[i]); - // Zero extend each set of 8 Latin1 characters to 16 32-bit integers using vpmovzxbd - __m512i out = _mm512_cvtepu8_epi32(in); + // Zero extend each set of 8 Latin1 characters to 16 32-bit integers using + // vpmovzxbd + __m512i out = _mm512_cvtepu8_epi32(in); - // Store the results back to memory - _mm512_storeu_si512((__m512i*)&utf32_output[i], out); - } + // Store the results back to memory + _mm512_storeu_si512((__m512i *)&utf32_output[i], out); + } - // Return pointers pointing to where we left off - return std::make_pair(buf + rounded_len, utf32_output + rounded_len); + // Return pointers pointing to where we left off + return std::make_pair(buf + rounded_len, utf32_output + rounded_len); } /* end file src/icelake/icelake_convert_latin1_to_utf32.inl.cpp */ /* begin file src/icelake/icelake_base64.inl.cpp */ @@ -22901,9 +23210,9 @@ template static inline uint64_t to_base64_mask(block64 *b, bool *error) { __m512i input = b->chunks[0]; const __m512i ascii_space_tbl = _mm512_set_epi8( - 0, 0, 13, 12, 0, 10, 9, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 13, 12, 0, 10, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 13, 12, 0, 10, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 32, 0, 0, 13, 12, 0, 10, 9, 0, 0, 0, 0, 0, 0, 0, 0, 32); + 0, 0, 13, 12, 0, 10, 9, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 13, 12, 0, 10, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 13, 12, 0, 10, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 0, 0, 13, 12, 0, 10, 9, 0, 0, 0, 0, 0, 0, 0, 0, 32); __m512i lookup0; if (base64_url) { lookup0 = _mm512_set_epi8( @@ -22959,14 +23268,14 @@ static inline uint64_t compress_block(block64 *b, uint64_t mask, char *output) { return _mm_popcnt_u64(nmask); } -// The caller of this function is responsible to ensure that there are 64 bytes available -// from reading at src. The data is read into a block64 structure. +// The caller of this function is responsible to ensure that there are 64 bytes +// available from reading at src. The data is read into a block64 structure. static inline void load_block(block64 *b, const char *src) { b->chunks[0] = _mm512_loadu_si512(reinterpret_cast(src)); } -// The caller of this function is responsible to ensure that there are 128 bytes available -// from reading at src. The data is read into a block64 structure. +// The caller of this function is responsible to ensure that there are 128 bytes +// available from reading at src. The data is read into a block64 structure. static inline void load_block(block64 *b, const char16_t *src) { __m512i m1 = _mm512_loadu_si512(reinterpret_cast(src)); __m512i m2 = _mm512_loadu_si512(reinterpret_cast(src + 32)); @@ -23001,13 +23310,16 @@ static inline void base64_decode_block(char *out, block64 *b) { template result compress_decode_base64(char *dst, const chartype *src, size_t srclen, - base64_options options) { + base64_options options, + last_chunk_handling_options last_chunk_options) { const uint8_t *to_base64 = base64_url ? tables::base64::to_base64_url_value : tables::base64::to_base64_value; - size_t equallocation = srclen; // location of the first padding character if any + size_t equallocation = + srclen; // location of the first padding character if any size_t equalsigns = 0; // skip trailing spaces - while (srclen > 0 && scalar::base64::is_eight_byte(src[srclen - 1]) && to_base64[uint8_t(src[srclen - 1])] == 64) { + while (srclen > 0 && scalar::base64::is_eight_byte(src[srclen - 1]) && + to_base64[uint8_t(src[srclen - 1])] == 64) { srclen--; } if (srclen > 0 && src[srclen - 1] == '=') { @@ -23015,7 +23327,8 @@ result compress_decode_base64(char *dst, const chartype *src, size_t srclen, srclen--; equalsigns = 1; // skip trailing spaces - while (srclen > 0 && scalar::base64::is_eight_byte(src[srclen - 1]) && to_base64[uint8_t(src[srclen - 1])] == 64) { + while (srclen > 0 && scalar::base64::is_eight_byte(src[srclen - 1]) && + to_base64[uint8_t(src[srclen - 1])] == 64) { srclen--; } if (srclen > 0 && src[srclen - 1] == '=') { @@ -23024,6 +23337,12 @@ result compress_decode_base64(char *dst, const chartype *src, size_t srclen, equalsigns = 2; } } + if (srclen == 0) { + if (equalsigns > 0) { + return {INVALID_BASE64_CHARACTER, equallocation}; + } + return {SUCCESS, 0}; + } const chartype *const srcinit = src; const char *const dstinit = dst; const chartype *const srcend = src + srclen; @@ -23042,7 +23361,8 @@ result compress_decode_base64(char *dst, const chartype *src, size_t srclen, uint64_t badcharmask = to_base64_mask(&b, &error); if (error) { src -= 64; - while (src < srcend && scalar::base64::is_eight_byte(*src) && to_base64[uint8_t(*src)] <= 64) { + while (src < srcend && scalar::base64::is_eight_byte(*src) && + to_base64[uint8_t(*src)] <= 64) { src++; } return {error_code::INVALID_BASE64_CHARACTER, size_t(src - srcinit)}; @@ -23116,70 +23436,38 @@ result compress_decode_base64(char *dst, const chartype *src, size_t srclen, buffer_start += 4; } // we may have 1, 2 or 3 bytes left and we need to decode them so let us - // bring in src content + // backtrack int leftover = int(bufferptr - buffer_start); - if (leftover > 0) { - while (leftover < 4 && src < srcend) { - uint8_t val = to_base64[uint8_t(*src)]; - if (!scalar::base64::is_eight_byte(*src) || val > 64) { - return {error_code::INVALID_BASE64_CHARACTER, size_t(src - srcinit)}; - } - buffer_start[leftover] = char(val); - leftover += (val <= 63); - src++; - } - - if (leftover == 1) { - return {BASE64_INPUT_REMAINDER, size_t(dst - dstinit)}; - } - if (leftover == 2) { - uint32_t triple = (uint32_t(buffer_start[0]) << 3 * 6) + - (uint32_t(buffer_start[1]) << 2 * 6); - triple = scalar::utf32::swap_bytes(triple); - triple >>= 8; - std::memcpy(dst, &triple, 1); - dst += 1; - } else if (leftover == 3) { - uint32_t triple = (uint32_t(buffer_start[0]) << 3 * 6) + - (uint32_t(buffer_start[1]) << 2 * 6) + - (uint32_t(buffer_start[2]) << 1 * 6); - triple = scalar::utf32::swap_bytes(triple); - triple >>= 8; - - std::memcpy(dst, &triple, 2); - dst += 2; - } else { - uint32_t triple = ((uint32_t(uint8_t(buffer_start[0])) << 3 * 6) + - (uint32_t(uint8_t(buffer_start[1])) << 2 * 6) + - (uint32_t(uint8_t(buffer_start[2])) << 1 * 6) + - (uint32_t(uint8_t(buffer_start[3])) << 0 * 6)) - << 8; - triple = scalar::utf32::swap_bytes(triple); - std::memcpy(dst, &triple, 3); - dst += 3; + while (leftover > 0) { + while (to_base64[uint8_t(*(src - 1))] == 64) { + src--; } + src--; + leftover--; } } if (src < srcend + equalsigns) { - result r = - scalar::base64::base64_tail_decode(dst, src, srcend - src, options); + result r = scalar::base64::base64_tail_decode( + dst, src, srcend - src, equalsigns, options, last_chunk_options); if (r.error == error_code::INVALID_BASE64_CHARACTER) { r.count += size_t(src - srcinit); return r; } else { r.count += size_t(dst - dstinit); } - if(r.error == error_code::SUCCESS && equalsigns > 0) { + if (last_chunk_options != stop_before_partial && + r.error == error_code::SUCCESS && equalsigns > 0) { // additional checks - if((r.count % 3 == 0) || ((r.count % 3) + 1 + equalsigns != 4)) { + if ((r.count % 3 == 0) || ((r.count % 3) + 1 + equalsigns != 4)) { r.error = error_code::INVALID_BASE64_CHARACTER; r.count = equallocation; } } return r; } - if(equalsigns > 0) { - if((size_t(dst - dstinit) % 3 == 0) || ((size_t(dst - dstinit) % 3) + 1 + equalsigns != 4)) { + if (equalsigns > 0) { + if ((size_t(dst - dstinit) % 3 == 0) || + ((size_t(dst - dstinit) % 3) + 1 + equalsigns != 4)) { return {INVALID_BASE64_CHARACTER, equallocation}; } } @@ -23187,7 +23475,6 @@ result compress_decode_base64(char *dst, const chartype *src, size_t srclen, } /* end file src/icelake/icelake_base64.inl.cpp */ - #include } // namespace @@ -23203,306 +23490,370 @@ implementation::detect_encodings(const char *input, // If there is a BOM, then we trust it. auto bom_encoding = simdutf::BOM::check_bom(input, length); // todo: convert to a one-pass algorithm - if(bom_encoding != encoding_type::unspecified) { return bom_encoding; } + if (bom_encoding != encoding_type::unspecified) { + return bom_encoding; + } int out = 0; - if(validate_utf8(input, length)) { out |= encoding_type::UTF8; } - if((length % 2) == 0) { - if(validate_utf16le(reinterpret_cast(input), length/2)) { out |= encoding_type::UTF16_LE; } + if (validate_utf8(input, length)) { + out |= encoding_type::UTF8; + } + if ((length % 2) == 0) { + if (validate_utf16le(reinterpret_cast(input), + length / 2)) { + out |= encoding_type::UTF16_LE; + } } - if((length % 4) == 0) { - if(validate_utf32(reinterpret_cast(input), length/4)) { out |= encoding_type::UTF32_LE; } + if ((length % 4) == 0) { + if (validate_utf32(reinterpret_cast(input), length / 4)) { + out |= encoding_type::UTF32_LE; + } } return out; } -simdutf_warn_unused bool implementation::validate_utf8(const char *buf, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_utf8(const char *buf, size_t len) const noexcept { if (simdutf_unlikely(len == 0)) { return true; } - avx512_utf8_checker checker{}; - const char* ptr = buf; - const char* end = ptr + len; - for (; end - ptr >= 64 ; ptr += 64) { - const __m512i utf8 = _mm512_loadu_si512((const __m512i*)ptr); - checker.check_next_input(utf8); - } - if(end != ptr) { - const __m512i utf8 = _mm512_maskz_loadu_epi8(~UINT64_C(0) >> (64 - (end - ptr)), (const __m512i*)ptr); - checker.check_next_input(utf8); - } - checker.check_eof(); - return ! checker.errors(); -} - -simdutf_warn_unused result implementation::validate_utf8_with_errors(const char *buf, size_t len) const noexcept { - if (simdutf_unlikely(len == 0)) { - return result(error_code::SUCCESS, len); - } - avx512_utf8_checker checker{}; - const char* ptr = buf; - const char* end = ptr + len; - size_t count{0}; - for (; end - ptr >= 64 ; ptr += 64) { - const __m512i utf8 = _mm512_loadu_si512((const __m512i*)ptr); - checker.check_next_input(utf8); - if(checker.errors()) { - if (count != 0) { count--; } // Sometimes the error is only detected in the next chunk - result res = scalar::utf8::rewind_and_validate_with_errors(reinterpret_cast(buf), reinterpret_cast(buf + count), len - count); - res.count += count; - return res; - } - count += 64; - } - if (end != ptr) { - const __m512i utf8 = _mm512_maskz_loadu_epi8(~UINT64_C(0) >> (64 - (end - ptr)), (const __m512i*)ptr); - checker.check_next_input(utf8); - } - checker.check_eof(); - if(checker.errors()) { - if (count != 0) { count--; } // Sometimes the error is only detected in the next chunk - result res = scalar::utf8::rewind_and_validate_with_errors(reinterpret_cast(buf), reinterpret_cast(buf + count), len - count); + avx512_utf8_checker checker{}; + const char *ptr = buf; + const char *end = ptr + len; + for (; end - ptr >= 64; ptr += 64) { + const __m512i utf8 = _mm512_loadu_si512((const __m512i *)ptr); + checker.check_next_input(utf8); + } + if (end != ptr) { + const __m512i utf8 = _mm512_maskz_loadu_epi8( + ~UINT64_C(0) >> (64 - (end - ptr)), (const __m512i *)ptr); + checker.check_next_input(utf8); + } + checker.check_eof(); + return !checker.errors(); +} + +simdutf_warn_unused result implementation::validate_utf8_with_errors( + const char *buf, size_t len) const noexcept { + if (simdutf_unlikely(len == 0)) { + return result(error_code::SUCCESS, len); + } + avx512_utf8_checker checker{}; + const char *ptr = buf; + const char *end = ptr + len; + size_t count{0}; + for (; end - ptr >= 64; ptr += 64) { + const __m512i utf8 = _mm512_loadu_si512((const __m512i *)ptr); + checker.check_next_input(utf8); + if (checker.errors()) { + if (count != 0) { + count--; + } // Sometimes the error is only detected in the next chunk + result res = scalar::utf8::rewind_and_validate_with_errors( + reinterpret_cast(buf), + reinterpret_cast(buf + count), len - count); res.count += count; return res; } - return result(error_code::SUCCESS, len); + count += 64; + } + if (end != ptr) { + const __m512i utf8 = _mm512_maskz_loadu_epi8( + ~UINT64_C(0) >> (64 - (end - ptr)), (const __m512i *)ptr); + checker.check_next_input(utf8); + } + checker.check_eof(); + if (checker.errors()) { + if (count != 0) { + count--; + } // Sometimes the error is only detected in the next chunk + result res = scalar::utf8::rewind_and_validate_with_errors( + reinterpret_cast(buf), + reinterpret_cast(buf + count), len - count); + res.count += count; + return res; + } + return result(error_code::SUCCESS, len); } -simdutf_warn_unused bool implementation::validate_ascii(const char *buf, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_ascii(const char *buf, size_t len) const noexcept { return icelake::validate_ascii(buf, len); } -simdutf_warn_unused result implementation::validate_ascii_with_errors(const char *buf, size_t len) const noexcept { - const char* buf_orig = buf; - const char* end = buf + len; +simdutf_warn_unused result implementation::validate_ascii_with_errors( + const char *buf, size_t len) const noexcept { + const char *buf_orig = buf; + const char *end = buf + len; const __m512i ascii = _mm512_set1_epi8((uint8_t)0x80); - for (; end - buf >= 64 ; buf += 64) { - const __m512i input = _mm512_loadu_si512((const __m512i*)buf); + for (; end - buf >= 64; buf += 64) { + const __m512i input = _mm512_loadu_si512((const __m512i *)buf); __mmask64 notascii = _mm512_cmp_epu8_mask(input, ascii, _MM_CMPINT_NLT); - if(notascii) { - return result(error_code::TOO_LARGE, buf - buf_orig + _tzcnt_u64(notascii)); + if (notascii) { + return result(error_code::TOO_LARGE, + buf - buf_orig + _tzcnt_u64(notascii)); } } if (end != buf) { - const __m512i input = _mm512_maskz_loadu_epi8(~UINT64_C(0) >> (64 - (end - buf)), (const __m512i*)buf); + const __m512i input = _mm512_maskz_loadu_epi8( + ~UINT64_C(0) >> (64 - (end - buf)), (const __m512i *)buf); __mmask64 notascii = _mm512_cmp_epu8_mask(input, ascii, _MM_CMPINT_NLT); - if(notascii) { - return result(error_code::TOO_LARGE, buf - buf_orig + _tzcnt_u64(notascii)); + if (notascii) { + return result(error_code::TOO_LARGE, + buf - buf_orig + _tzcnt_u64(notascii)); } } return result(error_code::SUCCESS, len); } -simdutf_warn_unused bool implementation::validate_utf16le(const char16_t *buf, size_t len) const noexcept { - const char16_t *end = buf + len; +simdutf_warn_unused bool +implementation::validate_utf16le(const char16_t *buf, + size_t len) const noexcept { + const char16_t *end = buf + len; - for(;end - buf >= 32; ) { - __m512i in = _mm512_loadu_si512((__m512i*)buf); - __m512i diff = _mm512_sub_epi16(in, _mm512_set1_epi16(uint16_t(0xD800))); - __mmask32 surrogates = _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0800))); - if(surrogates) { - __mmask32 highsurrogates = _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0400))); - __mmask32 lowsurrogates = surrogates ^ highsurrogates; - // high must be followed by low - if ((highsurrogates << 1) != lowsurrogates) { - return false; - } - bool ends_with_high = ((highsurrogates & 0x80000000) != 0); - if(ends_with_high) { - buf += 31; // advance only by 31 code units so that we start with the high surrogate on the next round. - } else { - buf += 32; - } + for (; end - buf >= 32;) { + __m512i in = _mm512_loadu_si512((__m512i *)buf); + __m512i diff = _mm512_sub_epi16(in, _mm512_set1_epi16(uint16_t(0xD800))); + __mmask32 surrogates = + _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0800))); + if (surrogates) { + __mmask32 highsurrogates = + _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0400))); + __mmask32 lowsurrogates = surrogates ^ highsurrogates; + // high must be followed by low + if ((highsurrogates << 1) != lowsurrogates) { + return false; + } + bool ends_with_high = ((highsurrogates & 0x80000000) != 0); + if (ends_with_high) { + buf += 31; // advance only by 31 code units so that we start with the + // high surrogate on the next round. } else { buf += 32; } + } else { + buf += 32; } - if(buf < end) { - __m512i in = _mm512_maskz_loadu_epi16((1U<<(end-buf))-1,(__m512i*)buf); - __m512i diff = _mm512_sub_epi16(in, _mm512_set1_epi16(uint16_t(0xD800))); - __mmask32 surrogates = _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0800))); - if(surrogates) { - __mmask32 highsurrogates = _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0400))); - __mmask32 lowsurrogates = surrogates ^ highsurrogates; - // high must be followed by low - if ((highsurrogates << 1) != lowsurrogates) { - return false; - } + } + if (buf < end) { + __m512i in = + _mm512_maskz_loadu_epi16((1U << (end - buf)) - 1, (__m512i *)buf); + __m512i diff = _mm512_sub_epi16(in, _mm512_set1_epi16(uint16_t(0xD800))); + __mmask32 surrogates = + _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0800))); + if (surrogates) { + __mmask32 highsurrogates = + _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0400))); + __mmask32 lowsurrogates = surrogates ^ highsurrogates; + // high must be followed by low + if ((highsurrogates << 1) != lowsurrogates) { + return false; } } - return true; + } + return true; } -simdutf_warn_unused bool implementation::validate_utf16be(const char16_t *buf, size_t len) const noexcept { - const char16_t *end = buf + len; - const __m512i byteflip = _mm512_setr_epi64( - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809 - ); - for(;end - buf >= 32; ) { - __m512i in = _mm512_shuffle_epi8(_mm512_loadu_si512((__m512i*)buf), byteflip); - __m512i diff = _mm512_sub_epi16(in, _mm512_set1_epi16(uint16_t(0xD800))); - __mmask32 surrogates = _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0800))); - if(surrogates) { - __mmask32 highsurrogates = _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0400))); - __mmask32 lowsurrogates = surrogates ^ highsurrogates; - // high must be followed by low - if ((highsurrogates << 1) != lowsurrogates) { - return false; - } - bool ends_with_high = ((highsurrogates & 0x80000000) != 0); - if(ends_with_high) { - buf += 31; // advance only by 31 code units so that we start with the high surrogate on the next round. - } else { - buf += 32; - } +simdutf_warn_unused bool +implementation::validate_utf16be(const char16_t *buf, + size_t len) const noexcept { + const char16_t *end = buf + len; + const __m512i byteflip = _mm512_setr_epi64( + 0x0607040502030001, 0x0e0f0c0d0a0b0809, 0x0607040502030001, + 0x0e0f0c0d0a0b0809, 0x0607040502030001, 0x0e0f0c0d0a0b0809, + 0x0607040502030001, 0x0e0f0c0d0a0b0809); + for (; end - buf >= 32;) { + __m512i in = + _mm512_shuffle_epi8(_mm512_loadu_si512((__m512i *)buf), byteflip); + __m512i diff = _mm512_sub_epi16(in, _mm512_set1_epi16(uint16_t(0xD800))); + __mmask32 surrogates = + _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0800))); + if (surrogates) { + __mmask32 highsurrogates = + _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0400))); + __mmask32 lowsurrogates = surrogates ^ highsurrogates; + // high must be followed by low + if ((highsurrogates << 1) != lowsurrogates) { + return false; + } + bool ends_with_high = ((highsurrogates & 0x80000000) != 0); + if (ends_with_high) { + buf += 31; // advance only by 31 code units so that we start with the + // high surrogate on the next round. } else { buf += 32; } + } else { + buf += 32; } - if(buf < end) { - __m512i in = _mm512_shuffle_epi8(_mm512_maskz_loadu_epi16((1U<<(end-buf))-1,(__m512i*)buf), byteflip); - __m512i diff = _mm512_sub_epi16(in, _mm512_set1_epi16(uint16_t(0xD800))); - __mmask32 surrogates = _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0800))); - if(surrogates) { - __mmask32 highsurrogates = _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0400))); - __mmask32 lowsurrogates = surrogates ^ highsurrogates; - // high must be followed by low - if ((highsurrogates << 1) != lowsurrogates) { - return false; - } + } + if (buf < end) { + __m512i in = _mm512_shuffle_epi8( + _mm512_maskz_loadu_epi16((1U << (end - buf)) - 1, (__m512i *)buf), + byteflip); + __m512i diff = _mm512_sub_epi16(in, _mm512_set1_epi16(uint16_t(0xD800))); + __mmask32 surrogates = + _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0800))); + if (surrogates) { + __mmask32 highsurrogates = + _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0400))); + __mmask32 lowsurrogates = surrogates ^ highsurrogates; + // high must be followed by low + if ((highsurrogates << 1) != lowsurrogates) { + return false; } } - return true; + } + return true; } -simdutf_warn_unused result implementation::validate_utf16le_with_errors(const char16_t *buf, size_t len) const noexcept { - const char16_t *start_buf = buf; - const char16_t *end = buf + len; - for(;end - buf >= 32; ) { - __m512i in = _mm512_loadu_si512((__m512i*)buf); - __m512i diff = _mm512_sub_epi16(in, _mm512_set1_epi16(uint16_t(0xD800))); - __mmask32 surrogates = _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0800))); - if(surrogates) { - __mmask32 highsurrogates = _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0400))); - __mmask32 lowsurrogates = surrogates ^ highsurrogates; - // high must be followed by low - if ((highsurrogates << 1) != lowsurrogates) { - uint32_t extra_low = _tzcnt_u32(lowsurrogates &~(highsurrogates << 1)); - uint32_t extra_high = _tzcnt_u32(highsurrogates &~(lowsurrogates >> 1)); - return result(error_code::SURROGATE, (buf - start_buf) + (extra_low < extra_high ? extra_low : extra_high)); - } - bool ends_with_high = ((highsurrogates & 0x80000000) != 0); - if(ends_with_high) { - buf += 31; // advance only by 31 code units so that we start with the high surrogate on the next round. - } else { - buf += 32; - } +simdutf_warn_unused result implementation::validate_utf16le_with_errors( + const char16_t *buf, size_t len) const noexcept { + const char16_t *start_buf = buf; + const char16_t *end = buf + len; + for (; end - buf >= 32;) { + __m512i in = _mm512_loadu_si512((__m512i *)buf); + __m512i diff = _mm512_sub_epi16(in, _mm512_set1_epi16(uint16_t(0xD800))); + __mmask32 surrogates = + _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0800))); + if (surrogates) { + __mmask32 highsurrogates = + _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0400))); + __mmask32 lowsurrogates = surrogates ^ highsurrogates; + // high must be followed by low + if ((highsurrogates << 1) != lowsurrogates) { + uint32_t extra_low = _tzcnt_u32(lowsurrogates & ~(highsurrogates << 1)); + uint32_t extra_high = + _tzcnt_u32(highsurrogates & ~(lowsurrogates >> 1)); + return result(error_code::SURROGATE, + (buf - start_buf) + + (extra_low < extra_high ? extra_low : extra_high)); + } + bool ends_with_high = ((highsurrogates & 0x80000000) != 0); + if (ends_with_high) { + buf += 31; // advance only by 31 code units so that we start with the + // high surrogate on the next round. } else { buf += 32; } + } else { + buf += 32; } - if(buf < end) { - __m512i in = _mm512_maskz_loadu_epi16((1U<<(end-buf))-1,(__m512i*)buf); - __m512i diff = _mm512_sub_epi16(in, _mm512_set1_epi16(uint16_t(0xD800))); - __mmask32 surrogates = _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0800))); - if(surrogates) { - __mmask32 highsurrogates = _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0400))); - __mmask32 lowsurrogates = surrogates ^ highsurrogates; - // high must be followed by low - if ((highsurrogates << 1) != lowsurrogates) { - uint32_t extra_low = _tzcnt_u32(lowsurrogates &~(highsurrogates << 1)); - uint32_t extra_high = _tzcnt_u32(highsurrogates &~(lowsurrogates >> 1)); - return result(error_code::SURROGATE, (buf - start_buf) + (extra_low < extra_high ? extra_low : extra_high)); - } + } + if (buf < end) { + __m512i in = + _mm512_maskz_loadu_epi16((1U << (end - buf)) - 1, (__m512i *)buf); + __m512i diff = _mm512_sub_epi16(in, _mm512_set1_epi16(uint16_t(0xD800))); + __mmask32 surrogates = + _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0800))); + if (surrogates) { + __mmask32 highsurrogates = + _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0400))); + __mmask32 lowsurrogates = surrogates ^ highsurrogates; + // high must be followed by low + if ((highsurrogates << 1) != lowsurrogates) { + uint32_t extra_low = _tzcnt_u32(lowsurrogates & ~(highsurrogates << 1)); + uint32_t extra_high = + _tzcnt_u32(highsurrogates & ~(lowsurrogates >> 1)); + return result(error_code::SURROGATE, + (buf - start_buf) + + (extra_low < extra_high ? extra_low : extra_high)); } } - return result(error_code::SUCCESS, len); + } + return result(error_code::SUCCESS, len); } -simdutf_warn_unused result implementation::validate_utf16be_with_errors(const char16_t *buf, size_t len) const noexcept { - const char16_t *start_buf = buf; - const char16_t *end = buf + len; - const __m512i byteflip = _mm512_setr_epi64( - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809 - ); - for(;end - buf >= 32; ) { - __m512i in = _mm512_shuffle_epi8(_mm512_loadu_si512((__m512i*)buf), byteflip); - __m512i diff = _mm512_sub_epi16(in, _mm512_set1_epi16(uint16_t(0xD800))); - __mmask32 surrogates = _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0800))); - if(surrogates) { - __mmask32 highsurrogates = _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0400))); - __mmask32 lowsurrogates = surrogates ^ highsurrogates; - // high must be followed by low - if ((highsurrogates << 1) != lowsurrogates) { - uint32_t extra_low = _tzcnt_u32(lowsurrogates &~(highsurrogates << 1)); - uint32_t extra_high = _tzcnt_u32(highsurrogates &~(lowsurrogates >> 1)); - return result(error_code::SURROGATE, (buf - start_buf) + (extra_low < extra_high ? extra_low : extra_high)); - } - bool ends_with_high = ((highsurrogates & 0x80000000) != 0); - if(ends_with_high) { - buf += 31; // advance only by 31 code units so that we start with the high surrogate on the next round. - } else { - buf += 32; - } +simdutf_warn_unused result implementation::validate_utf16be_with_errors( + const char16_t *buf, size_t len) const noexcept { + const char16_t *start_buf = buf; + const char16_t *end = buf + len; + const __m512i byteflip = _mm512_setr_epi64( + 0x0607040502030001, 0x0e0f0c0d0a0b0809, 0x0607040502030001, + 0x0e0f0c0d0a0b0809, 0x0607040502030001, 0x0e0f0c0d0a0b0809, + 0x0607040502030001, 0x0e0f0c0d0a0b0809); + for (; end - buf >= 32;) { + __m512i in = + _mm512_shuffle_epi8(_mm512_loadu_si512((__m512i *)buf), byteflip); + __m512i diff = _mm512_sub_epi16(in, _mm512_set1_epi16(uint16_t(0xD800))); + __mmask32 surrogates = + _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0800))); + if (surrogates) { + __mmask32 highsurrogates = + _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0400))); + __mmask32 lowsurrogates = surrogates ^ highsurrogates; + // high must be followed by low + if ((highsurrogates << 1) != lowsurrogates) { + uint32_t extra_low = _tzcnt_u32(lowsurrogates & ~(highsurrogates << 1)); + uint32_t extra_high = + _tzcnt_u32(highsurrogates & ~(lowsurrogates >> 1)); + return result(error_code::SURROGATE, + (buf - start_buf) + + (extra_low < extra_high ? extra_low : extra_high)); + } + bool ends_with_high = ((highsurrogates & 0x80000000) != 0); + if (ends_with_high) { + buf += 31; // advance only by 31 code units so that we start with the + // high surrogate on the next round. } else { buf += 32; } + } else { + buf += 32; } - if(buf < end) { - __m512i in = _mm512_shuffle_epi8(_mm512_maskz_loadu_epi16((1U<<(end-buf))-1,(__m512i*)buf), byteflip); - __m512i diff = _mm512_sub_epi16(in, _mm512_set1_epi16(uint16_t(0xD800))); - __mmask32 surrogates = _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0800))); - if(surrogates) { - __mmask32 highsurrogates = _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0400))); - __mmask32 lowsurrogates = surrogates ^ highsurrogates; - // high must be followed by low - if ((highsurrogates << 1) != lowsurrogates) { - uint32_t extra_low = _tzcnt_u32(lowsurrogates &~(highsurrogates << 1)); - uint32_t extra_high = _tzcnt_u32(highsurrogates &~(lowsurrogates >> 1)); - return result(error_code::SURROGATE, (buf - start_buf) + (extra_low < extra_high ? extra_low : extra_high)); - } + } + if (buf < end) { + __m512i in = _mm512_shuffle_epi8( + _mm512_maskz_loadu_epi16((1U << (end - buf)) - 1, (__m512i *)buf), + byteflip); + __m512i diff = _mm512_sub_epi16(in, _mm512_set1_epi16(uint16_t(0xD800))); + __mmask32 surrogates = + _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0800))); + if (surrogates) { + __mmask32 highsurrogates = + _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0400))); + __mmask32 lowsurrogates = surrogates ^ highsurrogates; + // high must be followed by low + if ((highsurrogates << 1) != lowsurrogates) { + uint32_t extra_low = _tzcnt_u32(lowsurrogates & ~(highsurrogates << 1)); + uint32_t extra_high = + _tzcnt_u32(highsurrogates & ~(lowsurrogates >> 1)); + return result(error_code::SURROGATE, + (buf - start_buf) + + (extra_low < extra_high ? extra_low : extra_high)); } } - return result(error_code::SUCCESS, len); + } + return result(error_code::SUCCESS, len); } -simdutf_warn_unused bool implementation::validate_utf32(const char32_t *buf, size_t len) const noexcept { - const char32_t * tail = icelake::validate_utf32(buf, len); +simdutf_warn_unused bool +implementation::validate_utf32(const char32_t *buf, size_t len) const noexcept { + const char32_t *tail = icelake::validate_utf32(buf, len); if (tail) { return scalar::utf32::validate(tail, len - (tail - buf)); } else { - // we come here if there was an error, or buf was nullptr which may happen for empty input. + // we come here if there was an error, or buf was nullptr which may happen + // for empty input. return len == 0; } } -simdutf_warn_unused result implementation::validate_utf32_with_errors(const char32_t *buf, size_t len) const noexcept { - const char32_t* buf_orig = buf; - if(len >= 16) { - const char32_t* end = buf + len - 16; +simdutf_warn_unused result implementation::validate_utf32_with_errors( + const char32_t *buf, size_t len) const noexcept { + const char32_t *buf_orig = buf; + if (len >= 16) { + const char32_t *end = buf + len - 16; while (buf <= end) { - __m512i utf32 = _mm512_loadu_si512((const __m512i*)buf); - __mmask16 outside_range = _mm512_cmp_epu32_mask(utf32, _mm512_set1_epi32(0x10ffff), - _MM_CMPINT_GT); + __m512i utf32 = _mm512_loadu_si512((const __m512i *)buf); + __mmask16 outside_range = _mm512_cmp_epu32_mask( + utf32, _mm512_set1_epi32(0x10ffff), _MM_CMPINT_GT); - __m512i utf32_off = _mm512_add_epi32(utf32, _mm512_set1_epi32(0xffff2000)); + __m512i utf32_off = + _mm512_add_epi32(utf32, _mm512_set1_epi32(0xffff2000)); - __mmask16 surrogate_range = _mm512_cmp_epu32_mask(utf32_off, _mm512_set1_epi32(0xfffff7ff), - _MM_CMPINT_GT); - if((outside_range | surrogate_range)) { + __mmask16 surrogate_range = _mm512_cmp_epu32_mask( + utf32_off, _mm512_set1_epi32(0xfffff7ff), _MM_CMPINT_GT); + if ((outside_range | surrogate_range)) { auto outside_idx = _tzcnt_u32(outside_range); auto surrogate_idx = _tzcnt_u32(surrogate_range); @@ -23516,15 +23867,16 @@ simdutf_warn_unused result implementation::validate_utf32_with_errors(const char buf += 16; } } - if(len > 0) { - __m512i utf32 = _mm512_maskz_loadu_epi32(__mmask16((1U<<(buf_orig + len - buf))-1),(const __m512i*)buf); - __mmask16 outside_range = _mm512_cmp_epu32_mask(utf32, _mm512_set1_epi32(0x10ffff), - _MM_CMPINT_GT); + if (len > 0) { + __m512i utf32 = _mm512_maskz_loadu_epi32( + __mmask16((1U << (buf_orig + len - buf)) - 1), (const __m512i *)buf); + __mmask16 outside_range = _mm512_cmp_epu32_mask( + utf32, _mm512_set1_epi32(0x10ffff), _MM_CMPINT_GT); __m512i utf32_off = _mm512_add_epi32(utf32, _mm512_set1_epi32(0xffff2000)); - __mmask16 surrogate_range = _mm512_cmp_epu32_mask(utf32_off, _mm512_set1_epi32(0xfffff7ff), - _MM_CMPINT_GT); - if((outside_range | surrogate_range)) { + __mmask16 surrogate_range = _mm512_cmp_epu32_mask( + utf32_off, _mm512_set1_epi32(0xfffff7ff), _MM_CMPINT_GT); + if ((outside_range | surrogate_range)) { auto outside_idx = _tzcnt_u32(outside_range); auto surrogate_idx = _tzcnt_u32(surrogate_range); @@ -23534,91 +23886,115 @@ simdutf_warn_unused result implementation::validate_utf32_with_errors(const char return result(error_code::SURROGATE, buf - buf_orig + surrogate_idx); } - } return result(error_code::SUCCESS, len); } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf8(const char * buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_latin1_to_utf8( + const char *buf, size_t len, char *utf8_output) const noexcept { return icelake::latin1_to_utf8_avx512_start(buf, len, utf8_output); } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf16le(const char* buf, size_t len, char16_t* utf16_output) const noexcept { - return icelake_convert_latin1_to_utf16(buf, len, utf16_output); +simdutf_warn_unused size_t implementation::convert_latin1_to_utf16le( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { + return icelake_convert_latin1_to_utf16(buf, len, + utf16_output); } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf16be(const char* buf, size_t len, char16_t* utf16_output) const noexcept { - return icelake_convert_latin1_to_utf16(buf, len, utf16_output); +simdutf_warn_unused size_t implementation::convert_latin1_to_utf16be( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { + return icelake_convert_latin1_to_utf16(buf, len, + utf16_output); } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf32(const char* buf, size_t len, char32_t* utf32_output) const noexcept { - std::pair ret = avx512_convert_latin1_to_utf32(buf, len, utf32_output); - if (ret.first == nullptr) { return 0; } - size_t converted_chars = ret.second - utf32_output; - if (ret.first != buf + len) { - const size_t scalar_converted_chars = scalar::latin1_to_utf32::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_converted_chars == 0) { return 0; } - converted_chars += scalar_converted_chars; +simdutf_warn_unused size_t implementation::convert_latin1_to_utf32( + const char *buf, size_t len, char32_t *utf32_output) const noexcept { + std::pair ret = + avx512_convert_latin1_to_utf32(buf, len, utf32_output); + if (ret.first == nullptr) { + return 0; + } + size_t converted_chars = ret.second - utf32_output; + if (ret.first != buf + len) { + const size_t scalar_converted_chars = scalar::latin1_to_utf32::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_converted_chars == 0) { + return 0; } - return converted_chars; + converted_chars += scalar_converted_chars; + } + return converted_chars; } -simdutf_warn_unused size_t implementation::convert_utf8_to_latin1(const char* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) const noexcept { return icelake::utf8_to_latin1_avx512(buf, len, latin1_output); } - -simdutf_warn_unused result implementation::convert_utf8_to_latin1_with_errors(const char* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused result implementation::convert_utf8_to_latin1_with_errors( + const char *buf, size_t len, char *latin1_output) const noexcept { // First, try to convert as much as possible using the SIMD implementation. - const char * obuf = buf; - char * olatin1_output = latin1_output; + const char *obuf = buf; + char *olatin1_output = latin1_output; size_t written = icelake::utf8_to_latin1_avx512(obuf, len, olatin1_output); // If we have completely converted the string - if(obuf == buf + len) { + if (obuf == buf + len) { return {simdutf::SUCCESS, written}; } size_t pos = obuf - buf; - result res = scalar::utf8_to_latin1::rewind_and_convert_with_errors(pos, buf + pos, len - pos, latin1_output); + result res = scalar::utf8_to_latin1::rewind_and_convert_with_errors( + pos, buf + pos, len - pos, latin1_output); res.count += pos; return res; } - -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_latin1(const char* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) const noexcept { return icelake::valid_utf8_to_latin1_avx512(buf, len, latin1_output); } -simdutf_warn_unused size_t implementation::convert_utf8_to_utf16le(const char* buf, size_t len, char16_t* utf16_output) const noexcept { - utf8_to_utf16_result ret = fast_avx512_convert_utf8_to_utf16(buf, len, utf16_output); +simdutf_warn_unused size_t implementation::convert_utf8_to_utf16le( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { + utf8_to_utf16_result ret = + fast_avx512_convert_utf8_to_utf16(buf, len, + utf16_output); if (ret.second == nullptr) { return 0; } return ret.second - utf16_output; } -simdutf_warn_unused size_t implementation::convert_utf8_to_utf16be(const char* buf, size_t len, char16_t* utf16_output) const noexcept { - utf8_to_utf16_result ret = fast_avx512_convert_utf8_to_utf16(buf, len, utf16_output); +simdutf_warn_unused size_t implementation::convert_utf8_to_utf16be( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { + utf8_to_utf16_result ret = fast_avx512_convert_utf8_to_utf16( + buf, len, utf16_output); if (ret.second == nullptr) { return 0; } return ret.second - utf16_output; } -simdutf_warn_unused result implementation::convert_utf8_to_utf16le_with_errors(const char* buf, size_t len, char16_t* utf16_output) const noexcept { - return fast_avx512_convert_utf8_to_utf16_with_errors(buf, len, utf16_output); +simdutf_warn_unused result implementation::convert_utf8_to_utf16le_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { + return fast_avx512_convert_utf8_to_utf16_with_errors( + buf, len, utf16_output); } -simdutf_warn_unused result implementation::convert_utf8_to_utf16be_with_errors(const char* buf, size_t len, char16_t* utf16_output) const noexcept { - return fast_avx512_convert_utf8_to_utf16_with_errors(buf, len, utf16_output); +simdutf_warn_unused result implementation::convert_utf8_to_utf16be_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { + return fast_avx512_convert_utf8_to_utf16_with_errors( + buf, len, utf16_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16le(const char* buf, size_t len, char16_t* utf16_output) const noexcept { - utf8_to_utf16_result ret = icelake::valid_utf8_to_fixed_length(buf, len, utf16_output); +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16le( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { + utf8_to_utf16_result ret = + icelake::valid_utf8_to_fixed_length( + buf, len, utf16_output); size_t saved_bytes = ret.second - utf16_output; - const char* end = buf + len; + const char *end = buf + len; if (ret.first == end) { return saved_bytes; } @@ -23629,23 +24005,29 @@ simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16le(const c // It meas, we have to skip continuation bytes from // the beginning ret.first, as they were already consumed. while (ret.first != end && ((uint8_t(*ret.first) & 0xc0) == 0x80)) { - ret.first += 1; + ret.first += 1; } if (ret.first != end) { - const size_t scalar_saved_bytes = scalar::utf8_to_utf16::convert_valid( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf8_to_utf16::convert_valid( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16be(const char* buf, size_t len, char16_t* utf16_output) const noexcept { - utf8_to_utf16_result ret = icelake::valid_utf8_to_fixed_length(buf, len, utf16_output); +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16be( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { + utf8_to_utf16_result ret = + icelake::valid_utf8_to_fixed_length( + buf, len, utf16_output); size_t saved_bytes = ret.second - utf16_output; - const char* end = buf + len; + const char *end = buf + len; if (ret.first == end) { return saved_bytes; } @@ -23656,28 +24038,33 @@ simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16be(const c // It meas, we have to skip continuation bytes from // the beginning ret.first, as they were already consumed. while (ret.first != end && ((uint8_t(*ret.first) & 0xc0) == 0x80)) { - ret.first += 1; + ret.first += 1; } if (ret.first != end) { - const size_t scalar_saved_bytes = scalar::utf8_to_utf16::convert_valid( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf8_to_utf16::convert_valid( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } - -simdutf_warn_unused size_t implementation::convert_utf8_to_utf32(const char* buf, size_t len, char32_t* utf32_out) const noexcept { - uint32_t * utf32_output = reinterpret_cast(utf32_out); - utf8_to_utf32_result ret = icelake::validating_utf8_to_fixed_length(buf, len, utf32_output); +simdutf_warn_unused size_t implementation::convert_utf8_to_utf32( + const char *buf, size_t len, char32_t *utf32_out) const noexcept { + uint32_t *utf32_output = reinterpret_cast(utf32_out); + utf8_to_utf32_result ret = + icelake::validating_utf8_to_fixed_length( + buf, len, utf32_output); if (ret.second == nullptr) return 0; size_t saved_bytes = ret.second - utf32_output; - const char* end = buf + len; + const char *end = buf + len; if (ret.first == end) { return saved_bytes; } @@ -23688,49 +24075,55 @@ simdutf_warn_unused size_t implementation::convert_utf8_to_utf32(const char* buf // It means, we have to skip continuation bytes from // the beginning ret.first, as they were already consumed. while (ret.first != end && ((uint8_t(*ret.first) & 0xc0) == 0x80)) { - ret.first += 1; + ret.first += 1; } if (ret.first != end) { const size_t scalar_saved_bytes = scalar::utf8_to_utf32::convert( - ret.first, len - (ret.first - buf), utf32_out + saved_bytes); - if (scalar_saved_bytes == 0) { return 0; } + ret.first, len - (ret.first - buf), utf32_out + saved_bytes); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused result implementation::convert_utf8_to_utf32_with_errors(const char* buf, size_t len, char32_t* utf32) const noexcept { +simdutf_warn_unused result implementation::convert_utf8_to_utf32_with_errors( + const char *buf, size_t len, char32_t *utf32) const noexcept { if (simdutf_unlikely(len == 0)) { return {error_code::SUCCESS, 0}; } - uint32_t * utf32_output = reinterpret_cast(utf32); - auto ret = icelake::validating_utf8_to_fixed_length_with_constant_checks(buf, len, utf32_output); + uint32_t *utf32_output = reinterpret_cast(utf32); + auto ret = icelake::validating_utf8_to_fixed_length_with_constant_checks< + endianness::LITTLE, uint32_t>(buf, len, utf32_output); if (!std::get<2>(ret)) { size_t pos = std::get<0>(ret) - buf; // We might have an error that occurs right before pos. // This is only a concern if buf[pos] is not a continuation byte. - if((buf[pos] & 0xc0) != 0x80 && pos >= 64) { + if ((buf[pos] & 0xc0) != 0x80 && pos >= 64) { pos -= 1; } else if ((buf[pos] & 0xc0) == 0x80 && pos >= 64) { // We must check whether we are the fourth continuation byte bool c1 = (buf[pos - 1] & 0xc0) == 0x80; bool c2 = (buf[pos - 2] & 0xc0) == 0x80; bool c3 = (buf[pos - 3] & 0xc0) == 0x80; - if(c1 && c2 && c3) { + if (c1 && c2 && c3) { return {simdutf::TOO_LONG, pos}; } } - // todo: we reset the output to utf32 instead of using std::get<2.(ret) as you'd expect. - // that is because validating_utf8_to_fixed_length_with_constant_checks may have processed + // todo: we reset the output to utf32 instead of using std::get<2.(ret) as + // you'd expect. that is because + // validating_utf8_to_fixed_length_with_constant_checks may have processed // data beyond the error. - result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors(pos, buf + pos, len - pos, utf32); - res.count += pos; - return res; + result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors( + pos, buf + pos, len - pos, utf32); + res.count += pos; + return res; } size_t saved_bytes = std::get<1>(ret) - utf32_output; - const char* end = buf + len; + const char *end = buf + len; if (std::get<0>(ret) == end) { return {simdutf::SUCCESS, saved_bytes}; } @@ -23740,15 +24133,17 @@ simdutf_warn_unused result implementation::convert_utf8_to_utf32_with_errors(con // continuation bytes lie outside 16-byte window. // It means, we have to skip continuation bytes from // the beginning ret.first, as they were already consumed. - while (std::get<0>(ret) != end and ((uint8_t(*std::get<0>(ret)) & 0xc0) == 0x80)) { - std::get<0>(ret) += 1; + while (std::get<0>(ret) != end and + ((uint8_t(*std::get<0>(ret)) & 0xc0) == 0x80)) { + std::get<0>(ret) += 1; } if (std::get<0>(ret) != end) { auto scalar_result = scalar::utf8_to_utf32::convert_with_errors( - std::get<0>(ret), len - (std::get<0>(ret) - buf), reinterpret_cast(utf32_output) + saved_bytes); + std::get<0>(ret), len - (std::get<0>(ret) - buf), + reinterpret_cast(utf32_output) + saved_bytes); if (scalar_result.error != simdutf::SUCCESS) { - scalar_result.count += (std::get<0>(ret) - buf); + scalar_result.count += (std::get<0>(ret) - buf); } else { scalar_result.count += saved_bytes; } @@ -23758,12 +24153,14 @@ simdutf_warn_unused result implementation::convert_utf8_to_utf32_with_errors(con return {simdutf::SUCCESS, size_t(std::get<1>(ret) - utf32_output)}; } - -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf32(const char* buf, size_t len, char32_t* utf32_out) const noexcept { - uint32_t * utf32_output = reinterpret_cast(utf32_out); - utf8_to_utf32_result ret = icelake::valid_utf8_to_fixed_length(buf, len, utf32_output); +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf32( + const char *buf, size_t len, char32_t *utf32_out) const noexcept { + uint32_t *utf32_output = reinterpret_cast(utf32_out); + utf8_to_utf32_result ret = + icelake::valid_utf8_to_fixed_length( + buf, len, utf32_output); size_t saved_bytes = ret.second - utf32_output; - const char* end = buf + len; + const char *end = buf + len; if (ret.first == end) { return saved_bytes; } @@ -23774,122 +24171,165 @@ simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf32(const cha // It meas, we have to skip continuation bytes from // the beginning ret.first, as they were already consumed. while (ret.first != end && ((uint8_t(*ret.first) & 0xc0) == 0x80)) { - ret.first += 1; + ret.first += 1; } if (ret.first != end) { const size_t scalar_saved_bytes = scalar::utf8_to_utf32::convert_valid( - ret.first, len - (ret.first - buf), utf32_out + saved_bytes); - if (scalar_saved_bytes == 0) { return 0; } + ret.first, len - (ret.first - buf), utf32_out + saved_bytes); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } - -simdutf_warn_unused size_t implementation::convert_utf16le_to_latin1(const char16_t* buf, size_t len, char* latin1_output) const noexcept { - return icelake_convert_utf16_to_latin1(buf,len,latin1_output); +simdutf_warn_unused size_t implementation::convert_utf16le_to_latin1( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { + return icelake_convert_utf16_to_latin1(buf, len, + latin1_output); } -simdutf_warn_unused size_t implementation::convert_utf16be_to_latin1(const char16_t* buf, size_t len, char* latin1_output) const noexcept { - return icelake_convert_utf16_to_latin1(buf,len,latin1_output); +simdutf_warn_unused size_t implementation::convert_utf16be_to_latin1( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { + return icelake_convert_utf16_to_latin1(buf, len, + latin1_output); } -simdutf_warn_unused result implementation::convert_utf16le_to_latin1_with_errors(const char16_t* buf, size_t len, char* latin1_output) const noexcept { - return icelake_convert_utf16_to_latin1_with_errors(buf,len,latin1_output).first; +simdutf_warn_unused result +implementation::convert_utf16le_to_latin1_with_errors( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { + return icelake_convert_utf16_to_latin1_with_errors( + buf, len, latin1_output) + .first; } -simdutf_warn_unused result implementation::convert_utf16be_to_latin1_with_errors(const char16_t* buf, size_t len, char* latin1_output) const noexcept { - return icelake_convert_utf16_to_latin1_with_errors(buf,len,latin1_output).first; +simdutf_warn_unused result +implementation::convert_utf16be_to_latin1_with_errors( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { + return icelake_convert_utf16_to_latin1_with_errors( + buf, len, latin1_output) + .first; } -simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_latin1(const char16_t* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_latin1( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { // optimization opportunity: implement custom function return convert_utf16be_to_latin1(buf, len, latin1_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_latin1(const char16_t* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_latin1( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { // optimization opportunity: implement custom function return convert_utf16le_to_latin1(buf, len, latin1_output); } -simdutf_warn_unused size_t implementation::convert_utf16le_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { size_t outlen; - size_t inlen = utf16_to_utf8_avx512i(buf, len, (unsigned char*)utf8_output, &outlen); - if(inlen != len) { return 0; } + size_t inlen = utf16_to_utf8_avx512i( + buf, len, (unsigned char *)utf8_output, &outlen); + if (inlen != len) { + return 0; + } return outlen; } -simdutf_warn_unused size_t implementation::convert_utf16be_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { size_t outlen; - size_t inlen = utf16_to_utf8_avx512i(buf, len, (unsigned char*)utf8_output, &outlen); - if(inlen != len) { return 0; } + size_t inlen = utf16_to_utf8_avx512i( + buf, len, (unsigned char *)utf8_output, &outlen); + if (inlen != len) { + return 0; + } return outlen; } -simdutf_warn_unused result implementation::convert_utf16le_to_utf8_with_errors(const char16_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused result implementation::convert_utf16le_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { size_t outlen; - size_t inlen = utf16_to_utf8_avx512i(buf, len, (unsigned char*)utf8_output, &outlen); - if(inlen != len) { - result res = scalar::utf16_to_utf8::convert_with_errors(buf + inlen, len - inlen, utf8_output + outlen); + size_t inlen = utf16_to_utf8_avx512i( + buf, len, (unsigned char *)utf8_output, &outlen); + if (inlen != len) { + result res = scalar::utf16_to_utf8::convert_with_errors( + buf + inlen, len - inlen, utf8_output + outlen); res.count += inlen; return res; } return {simdutf::SUCCESS, outlen}; } -simdutf_warn_unused result implementation::convert_utf16be_to_utf8_with_errors(const char16_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused result implementation::convert_utf16be_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { size_t outlen; - size_t inlen = utf16_to_utf8_avx512i(buf, len, (unsigned char*)utf8_output, &outlen); - if(inlen != len) { - result res = scalar::utf16_to_utf8::convert_with_errors(buf + inlen, len - inlen, utf8_output + outlen); + size_t inlen = utf16_to_utf8_avx512i( + buf, len, (unsigned char *)utf8_output, &outlen); + if (inlen != len) { + result res = scalar::utf16_to_utf8::convert_with_errors( + buf + inlen, len - inlen, utf8_output + outlen); res.count += inlen; return res; } return {simdutf::SUCCESS, outlen}; } -simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { return convert_utf16le_to_utf8(buf, len, utf8_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { return convert_utf16be_to_utf8(buf, len, utf8_output); } -simdutf_warn_unused size_t implementation::convert_utf32_to_latin1(const char32_t* buf, size_t len, char* latin1_output) const noexcept { - return icelake_convert_utf32_to_latin1(buf,len,latin1_output); +simdutf_warn_unused size_t implementation::convert_utf32_to_latin1( + const char32_t *buf, size_t len, char *latin1_output) const noexcept { + return icelake_convert_utf32_to_latin1(buf, len, latin1_output); } -simdutf_warn_unused result implementation::convert_utf32_to_latin1_with_errors(const char32_t* buf, size_t len, char* latin1_output) const noexcept { - return icelake_convert_utf32_to_latin1_with_errors(buf,len,latin1_output).first; +simdutf_warn_unused result implementation::convert_utf32_to_latin1_with_errors( + const char32_t *buf, size_t len, char *latin1_output) const noexcept { + return icelake_convert_utf32_to_latin1_with_errors(buf, len, latin1_output) + .first; } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_latin1(const char32_t* buf, size_t len, char* latin1_output) const noexcept { - return icelake_convert_utf32_to_latin1(buf,len,latin1_output); +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_latin1( + const char32_t *buf, size_t len, char *latin1_output) const noexcept { + return icelake_convert_utf32_to_latin1(buf, len, latin1_output); } - -simdutf_warn_unused size_t implementation::convert_utf32_to_utf8(const char32_t* buf, size_t len, char* utf8_output) const noexcept { - std::pair ret = avx512_convert_utf32_to_utf8(buf, len, utf8_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_output) const noexcept { + std::pair ret = + avx512_convert_utf32_to_utf8(buf, len, utf8_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf8_output; if (ret.first != buf + len) { const size_t scalar_saved_bytes = scalar::utf32_to_utf8::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused result implementation::convert_utf32_to_utf8_with_errors(const char32_t* buf, size_t len, char* utf8_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = icelake::avx512_convert_utf32_to_utf8_with_errors(buf, len, utf8_output); +simdutf_warn_unused result implementation::convert_utf32_to_utf8_with_errors( + const char32_t *buf, size_t len, char *utf8_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + icelake::avx512_convert_utf32_to_utf8_with_errors(buf, len, utf8_output); if (ret.first.count != len) { result scalar_res = scalar::utf32_to_utf8::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -23897,46 +24337,68 @@ simdutf_warn_unused result implementation::convert_utf32_to_utf8_with_errors(con ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf8_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf8_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf8(const char32_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_output) const noexcept { return convert_utf32_to_utf8(buf, len, utf8_output); } -simdutf_warn_unused size_t implementation::convert_utf32_to_utf16le(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - std::pair ret = avx512_convert_utf32_to_utf16(buf, len, utf16_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf32_to_utf16le( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + std::pair ret = + avx512_convert_utf32_to_utf16(buf, len, utf16_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf16_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf32_to_utf16::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf32_to_utf16::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused size_t implementation::convert_utf32_to_utf16be(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - std::pair ret = avx512_convert_utf32_to_utf16(buf, len, utf16_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf32_to_utf16be( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + std::pair ret = + avx512_convert_utf32_to_utf16(buf, len, utf16_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf16_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf32_to_utf16::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf32_to_utf16::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused result implementation::convert_utf32_to_utf16le_with_errors(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = avx512_convert_utf32_to_utf16_with_errors(buf, len, utf16_output); +simdutf_warn_unused result implementation::convert_utf32_to_utf16le_with_errors( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + avx512_convert_utf32_to_utf16_with_errors( + buf, len, utf16_output); if (ret.first.count != len) { - result scalar_res = scalar::utf32_to_utf16::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf32_to_utf16::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -23944,16 +24406,23 @@ simdutf_warn_unused result implementation::convert_utf32_to_utf16le_with_errors( ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf16_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf16_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused result implementation::convert_utf32_to_utf16be_with_errors(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = avx512_convert_utf32_to_utf16_with_errors(buf, len, utf16_output); +simdutf_warn_unused result implementation::convert_utf32_to_utf16be_with_errors( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + avx512_convert_utf32_to_utf16_with_errors(buf, len, + utf16_output); if (ret.first.count != len) { - result scalar_res = scalar::utf32_to_utf16::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf32_to_utf16::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -23961,56 +24430,80 @@ simdutf_warn_unused result implementation::convert_utf32_to_utf16be_with_errors( ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf16_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf16_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16le(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16le( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { return convert_utf32_to_utf16le(buf, len, utf16_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16be(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16be( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { return convert_utf32_to_utf16be(buf, len, utf16_output); } -simdutf_warn_unused size_t implementation::convert_utf16le_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - std::tuple ret = icelake::convert_utf16_to_utf32(buf, len, utf32_output); - if (!std::get<2>(ret)) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf16le_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + std::tuple ret = + icelake::convert_utf16_to_utf32(buf, len, + utf32_output); + if (!std::get<2>(ret)) { + return 0; + } size_t saved_bytes = std::get<1>(ret) - utf32_output; if (std::get<0>(ret) != buf + len) { - const size_t scalar_saved_bytes = scalar::utf16_to_utf32::convert( - std::get<0>(ret), len - (std::get<0>(ret) - buf), std::get<1>(ret)); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf16_to_utf32::convert( + std::get<0>(ret), len - (std::get<0>(ret) - buf), std::get<1>(ret)); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused size_t implementation::convert_utf16be_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - std::tuple ret = icelake::convert_utf16_to_utf32(buf, len, utf32_output); - if (!std::get<2>(ret)) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf16be_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + std::tuple ret = + icelake::convert_utf16_to_utf32(buf, len, utf32_output); + if (!std::get<2>(ret)) { + return 0; + } size_t saved_bytes = std::get<1>(ret) - utf32_output; if (std::get<0>(ret) != buf + len) { - const size_t scalar_saved_bytes = scalar::utf16_to_utf32::convert( - std::get<0>(ret), len - (std::get<0>(ret) - buf), std::get<1>(ret)); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf16_to_utf32::convert( + std::get<0>(ret), len - (std::get<0>(ret) - buf), std::get<1>(ret)); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused result implementation::convert_utf16le_to_utf32_with_errors(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - std::tuple ret = icelake::convert_utf16_to_utf32(buf, len, utf32_output); +simdutf_warn_unused result implementation::convert_utf16le_to_utf32_with_errors( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + std::tuple ret = + icelake::convert_utf16_to_utf32(buf, len, + utf32_output); if (!std::get<2>(ret)) { - result scalar_res = scalar::utf16_to_utf32::convert_with_errors( - std::get<0>(ret), len - (std::get<0>(ret) - buf), std::get<1>(ret)); + result scalar_res = + scalar::utf16_to_utf32::convert_with_errors( + std::get<0>(ret), len - (std::get<0>(ret) - buf), std::get<1>(ret)); scalar_res.count += (std::get<0>(ret) - buf); return scalar_res; } size_t saved_bytes = std::get<1>(ret) - utf32_output; if (std::get<0>(ret) != buf + len) { - result scalar_res = scalar::utf16_to_utf32::convert_with_errors( - std::get<0>(ret), len - (std::get<0>(ret) - buf), std::get<1>(ret)); + result scalar_res = + scalar::utf16_to_utf32::convert_with_errors( + std::get<0>(ret), len - (std::get<0>(ret) - buf), std::get<1>(ret)); if (scalar_res.error) { scalar_res.count += (std::get<0>(ret) - buf); return scalar_res; @@ -24022,18 +24515,22 @@ simdutf_warn_unused result implementation::convert_utf16le_to_utf32_with_errors( return simdutf::result(simdutf::SUCCESS, saved_bytes); } -simdutf_warn_unused result implementation::convert_utf16be_to_utf32_with_errors(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - std::tuple ret = icelake::convert_utf16_to_utf32(buf, len, utf32_output); +simdutf_warn_unused result implementation::convert_utf16be_to_utf32_with_errors( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + std::tuple ret = + icelake::convert_utf16_to_utf32(buf, len, utf32_output); if (!std::get<2>(ret)) { - result scalar_res = scalar::utf16_to_utf32::convert_with_errors( - std::get<0>(ret), len - (std::get<0>(ret) - buf), std::get<1>(ret)); + result scalar_res = + scalar::utf16_to_utf32::convert_with_errors( + std::get<0>(ret), len - (std::get<0>(ret) - buf), std::get<1>(ret)); scalar_res.count += (std::get<0>(ret) - buf); return scalar_res; } size_t saved_bytes = std::get<1>(ret) - utf32_output; if (std::get<0>(ret) != buf + len) { - result scalar_res = scalar::utf16_to_utf32::convert_with_errors( - std::get<0>(ret), len - (std::get<0>(ret) - buf), std::get<1>(ret)); + result scalar_res = + scalar::utf16_to_utf32::convert_with_errors( + std::get<0>(ret), len - (std::get<0>(ret) - buf), std::get<1>(ret)); if (scalar_res.error) { scalar_res.count += (std::get<0>(ret) - buf); return scalar_res; @@ -24045,116 +24542,130 @@ simdutf_warn_unused result implementation::convert_utf16be_to_utf32_with_errors( return simdutf::result(simdutf::SUCCESS, saved_bytes); } -simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - std::tuple ret = icelake::convert_utf16_to_utf32(buf, len, utf32_output); - if (!std::get<2>(ret)) { return 0; } +simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + std::tuple ret = + icelake::convert_utf16_to_utf32(buf, len, + utf32_output); + if (!std::get<2>(ret)) { + return 0; + } size_t saved_bytes = std::get<1>(ret) - utf32_output; if (std::get<0>(ret) != buf + len) { - const size_t scalar_saved_bytes = scalar::utf16_to_utf32::convert( - std::get<0>(ret), len - (std::get<0>(ret) - buf), std::get<1>(ret)); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf16_to_utf32::convert( + std::get<0>(ret), len - (std::get<0>(ret) - buf), std::get<1>(ret)); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - std::tuple ret = icelake::convert_utf16_to_utf32(buf, len, utf32_output); - if (!std::get<2>(ret)) { return 0; } +simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + std::tuple ret = + icelake::convert_utf16_to_utf32(buf, len, utf32_output); + if (!std::get<2>(ret)) { + return 0; + } size_t saved_bytes = std::get<1>(ret) - utf32_output; if (std::get<0>(ret) != buf + len) { - const size_t scalar_saved_bytes = scalar::utf16_to_utf32::convert( - std::get<0>(ret), len - (std::get<0>(ret) - buf), std::get<1>(ret)); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf16_to_utf32::convert( + std::get<0>(ret), len - (std::get<0>(ret) - buf), std::get<1>(ret)); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -void implementation::change_endianness_utf16(const char16_t * input, size_t length, char16_t * output) const noexcept { +void implementation::change_endianness_utf16(const char16_t *input, + size_t length, + char16_t *output) const noexcept { size_t pos = 0; const __m512i byteflip = _mm512_setr_epi64( - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809 - ); + 0x0607040502030001, 0x0e0f0c0d0a0b0809, 0x0607040502030001, + 0x0e0f0c0d0a0b0809, 0x0607040502030001, 0x0e0f0c0d0a0b0809, + 0x0607040502030001, 0x0e0f0c0d0a0b0809); while (pos + 32 <= length) { - __m512i utf16 = _mm512_loadu_si512((const __m512i*)(input + pos)); + __m512i utf16 = _mm512_loadu_si512((const __m512i *)(input + pos)); utf16 = _mm512_shuffle_epi8(utf16, byteflip); _mm512_storeu_si512(output + pos, utf16); pos += 32; } - if(pos < length) { - __mmask32 m((1U<< (length - pos))-1); - __m512i utf16 = _mm512_maskz_loadu_epi16(m, (const __m512i*)(input + pos)); + if (pos < length) { + __mmask32 m((1U << (length - pos)) - 1); + __m512i utf16 = _mm512_maskz_loadu_epi16(m, (const __m512i *)(input + pos)); utf16 = _mm512_shuffle_epi8(utf16, byteflip); _mm512_mask_storeu_epi16(output + pos, m, utf16); } } - -simdutf_warn_unused size_t implementation::count_utf16le(const char16_t * input, size_t length) const noexcept { - const char16_t* ptr = input; +simdutf_warn_unused size_t implementation::count_utf16le( + const char16_t *input, size_t length) const noexcept { + const char16_t *ptr = input; size_t count{0}; - if(length >= 32) { - const char16_t* end = input + length - 32; + if (length >= 32) { + const char16_t *end = input + length - 32; const __m512i low = _mm512_set1_epi16((uint16_t)0xdc00); const __m512i high = _mm512_set1_epi16((uint16_t)0xdfff); - while (ptr <= end) { - __m512i utf16 = _mm512_loadu_si512((const __m512i*)ptr); + __m512i utf16 = _mm512_loadu_si512((const __m512i *)ptr); ptr += 32; - uint64_t not_high_surrogate = static_cast(_mm512_cmpgt_epu16_mask(utf16, high) | _mm512_cmplt_epu16_mask(utf16, low)); + uint64_t not_high_surrogate = + static_cast(_mm512_cmpgt_epu16_mask(utf16, high) | + _mm512_cmplt_epu16_mask(utf16, low)); count += count_ones(not_high_surrogate); } } - return count + scalar::utf16::count_code_points(ptr, length - (ptr - input)); + return count + scalar::utf16::count_code_points( + ptr, length - (ptr - input)); } -simdutf_warn_unused size_t implementation::count_utf16be(const char16_t * input, size_t length) const noexcept { - const char16_t* ptr = input; +simdutf_warn_unused size_t implementation::count_utf16be( + const char16_t *input, size_t length) const noexcept { + const char16_t *ptr = input; size_t count{0}; - if(length >= 32) { + if (length >= 32) { - const char16_t* end = input + length - 32; + const char16_t *end = input + length - 32; const __m512i low = _mm512_set1_epi16((uint16_t)0xdc00); const __m512i high = _mm512_set1_epi16((uint16_t)0xdfff); const __m512i byteflip = _mm512_setr_epi64( - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809 - ); + 0x0607040502030001, 0x0e0f0c0d0a0b0809, 0x0607040502030001, + 0x0e0f0c0d0a0b0809, 0x0607040502030001, 0x0e0f0c0d0a0b0809, + 0x0607040502030001, 0x0e0f0c0d0a0b0809); while (ptr <= end) { - __m512i utf16 = _mm512_shuffle_epi8(_mm512_loadu_si512((__m512i*)ptr), byteflip); + __m512i utf16 = + _mm512_shuffle_epi8(_mm512_loadu_si512((__m512i *)ptr), byteflip); ptr += 32; - uint64_t not_high_surrogate = static_cast(_mm512_cmpgt_epu16_mask(utf16, high) | _mm512_cmplt_epu16_mask(utf16, low)); + uint64_t not_high_surrogate = + static_cast(_mm512_cmpgt_epu16_mask(utf16, high) | + _mm512_cmplt_epu16_mask(utf16, low)); count += count_ones(not_high_surrogate); } } - return count + scalar::utf16::count_code_points(ptr, length - (ptr - input)); + return count + scalar::utf16::count_code_points( + ptr, length - (ptr - input)); } - -simdutf_warn_unused size_t implementation::count_utf8(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::count_utf8(const char *input, size_t length) const noexcept { const uint8_t *str = reinterpret_cast(input); - size_t answer = length / sizeof(__m512i) * sizeof(__m512i); // Number of 512-bit chunks that fits into the length. + size_t answer = + length / sizeof(__m512i) * + sizeof(__m512i); // Number of 512-bit chunks that fits into the length. size_t i = 0; __m512i unrolled_popcount{0}; @@ -24164,35 +24675,43 @@ simdutf_warn_unused size_t implementation::count_utf8(const char * input, size_t size_t iterations = (length - i) / sizeof(__m512i); size_t max_i = i + iterations * sizeof(__m512i) - sizeof(__m512i); - for (; i + 8*sizeof(__m512i) <= max_i; i += 8*sizeof(__m512i)) { - __m512i input1 = _mm512_loadu_si512((const __m512i *)(str + i)); - __m512i input2 = _mm512_loadu_si512((const __m512i *)(str + i + sizeof(__m512i))); - __m512i input3 = _mm512_loadu_si512((const __m512i *)(str + i + 2*sizeof(__m512i))); - __m512i input4 = _mm512_loadu_si512((const __m512i *)(str + i + 3*sizeof(__m512i))); - __m512i input5 = _mm512_loadu_si512((const __m512i *)(str + i + 4*sizeof(__m512i))); - __m512i input6 = _mm512_loadu_si512((const __m512i *)(str + i + 5*sizeof(__m512i))); - __m512i input7 = _mm512_loadu_si512((const __m512i *)(str + i + 6*sizeof(__m512i))); - __m512i input8 = _mm512_loadu_si512((const __m512i *)(str + i + 7*sizeof(__m512i))); - - - __mmask64 mask1 = _mm512_cmple_epi8_mask(input1, continuation); - __mmask64 mask2 = _mm512_cmple_epi8_mask(input2, continuation); - __mmask64 mask3 = _mm512_cmple_epi8_mask(input3, continuation); - __mmask64 mask4 = _mm512_cmple_epi8_mask(input4, continuation); - __mmask64 mask5 = _mm512_cmple_epi8_mask(input5, continuation); - __mmask64 mask6 = _mm512_cmple_epi8_mask(input6, continuation); - __mmask64 mask7 = _mm512_cmple_epi8_mask(input7, continuation); - __mmask64 mask8 = _mm512_cmple_epi8_mask(input8, continuation); - - __m512i mask_register = _mm512_set_epi64(mask8, mask7, mask6, mask5, mask4, mask3, mask2, mask1); - - - unrolled_popcount = _mm512_add_epi64(unrolled_popcount, _mm512_popcnt_epi64(mask_register)); + for (; i + 8 * sizeof(__m512i) <= max_i; i += 8 * sizeof(__m512i)) { + __m512i input1 = _mm512_loadu_si512((const __m512i *)(str + i)); + __m512i input2 = + _mm512_loadu_si512((const __m512i *)(str + i + sizeof(__m512i))); + __m512i input3 = + _mm512_loadu_si512((const __m512i *)(str + i + 2 * sizeof(__m512i))); + __m512i input4 = + _mm512_loadu_si512((const __m512i *)(str + i + 3 * sizeof(__m512i))); + __m512i input5 = + _mm512_loadu_si512((const __m512i *)(str + i + 4 * sizeof(__m512i))); + __m512i input6 = + _mm512_loadu_si512((const __m512i *)(str + i + 5 * sizeof(__m512i))); + __m512i input7 = + _mm512_loadu_si512((const __m512i *)(str + i + 6 * sizeof(__m512i))); + __m512i input8 = + _mm512_loadu_si512((const __m512i *)(str + i + 7 * sizeof(__m512i))); + + __mmask64 mask1 = _mm512_cmple_epi8_mask(input1, continuation); + __mmask64 mask2 = _mm512_cmple_epi8_mask(input2, continuation); + __mmask64 mask3 = _mm512_cmple_epi8_mask(input3, continuation); + __mmask64 mask4 = _mm512_cmple_epi8_mask(input4, continuation); + __mmask64 mask5 = _mm512_cmple_epi8_mask(input5, continuation); + __mmask64 mask6 = _mm512_cmple_epi8_mask(input6, continuation); + __mmask64 mask7 = _mm512_cmple_epi8_mask(input7, continuation); + __mmask64 mask8 = _mm512_cmple_epi8_mask(input8, continuation); + + __m512i mask_register = _mm512_set_epi64(mask8, mask7, mask6, mask5, + mask4, mask3, mask2, mask1); + + unrolled_popcount = _mm512_add_epi64(unrolled_popcount, + _mm512_popcnt_epi64(mask_register)); } for (; i <= max_i; i += sizeof(__m512i)) { __m512i more_input = _mm512_loadu_si512((const __m512i *)(str + i)); - uint64_t continuation_bitmask = static_cast(_mm512_cmple_epi8_mask(more_input, continuation)); + uint64_t continuation_bitmask = static_cast( + _mm512_cmple_epi8_mask(more_input, continuation)); answer -= count_ones(continuation_bitmask); } } @@ -24208,59 +24727,70 @@ simdutf_warn_unused size_t implementation::count_utf8(const char * input, size_t (size_t)_mm256_extract_epi64(second_half, 2) + (size_t)_mm256_extract_epi64(second_half, 3); - return answer + scalar::utf8::count_code_points(reinterpret_cast(str + i), length - i); + return answer + scalar::utf8::count_code_points( + reinterpret_cast(str + i), length - i); } -simdutf_warn_unused size_t implementation::latin1_length_from_utf8(const char* buf, size_t len) const noexcept { - return count_utf8(buf,len); +simdutf_warn_unused size_t implementation::latin1_length_from_utf8( + const char *buf, size_t len) const noexcept { + return count_utf8(buf, len); } -simdutf_warn_unused size_t implementation::latin1_length_from_utf16(size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::latin1_length_from_utf16(size_t length) const noexcept { return scalar::utf16::latin1_length_from_utf16(length); } -simdutf_warn_unused size_t implementation::latin1_length_from_utf32(size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::latin1_length_from_utf32(size_t length) const noexcept { return scalar::utf32::latin1_length_from_utf32(length); } -simdutf_warn_unused size_t implementation::utf8_length_from_utf16le(const char16_t * input, size_t length) const noexcept { - const char16_t* ptr = input; +simdutf_warn_unused size_t implementation::utf8_length_from_utf16le( + const char16_t *input, size_t length) const noexcept { + const char16_t *ptr = input; size_t count{0}; - if(length >= 32) { - const char16_t* end = input + length - 32; + if (length >= 32) { + const char16_t *end = input + length - 32; const __m512i v_007f = _mm512_set1_epi16((uint16_t)0x007f); const __m512i v_07ff = _mm512_set1_epi16((uint16_t)0x07ff); const __m512i v_dfff = _mm512_set1_epi16((uint16_t)0xdfff); const __m512i v_d800 = _mm512_set1_epi16((uint16_t)0xd800); - while (ptr <= end) { - __m512i utf16 = _mm512_loadu_si512((const __m512i*)ptr); + __m512i utf16 = _mm512_loadu_si512((const __m512i *)ptr); ptr += 32; __mmask32 ascii_bitmask = _mm512_cmple_epu16_mask(utf16, v_007f); - __mmask32 two_bytes_bitmask = _mm512_mask_cmple_epu16_mask(~ascii_bitmask, utf16, v_07ff); + __mmask32 two_bytes_bitmask = + _mm512_mask_cmple_epu16_mask(~ascii_bitmask, utf16, v_07ff); __mmask32 not_one_two_bytes = ~(ascii_bitmask | two_bytes_bitmask); - __mmask32 surrogates_bitmask = _mm512_mask_cmple_epu16_mask(not_one_two_bytes, utf16, v_dfff) & _mm512_mask_cmpge_epu16_mask(not_one_two_bytes, utf16, v_d800); + __mmask32 surrogates_bitmask = + _mm512_mask_cmple_epu16_mask(not_one_two_bytes, utf16, v_dfff) & + _mm512_mask_cmpge_epu16_mask(not_one_two_bytes, utf16, v_d800); size_t ascii_count = count_ones(ascii_bitmask); size_t two_bytes_count = count_ones(two_bytes_bitmask); size_t surrogate_bytes_count = count_ones(surrogates_bitmask); - size_t three_bytes_count = 32 - ascii_count - two_bytes_count - surrogate_bytes_count; + size_t three_bytes_count = + 32 - ascii_count - two_bytes_count - surrogate_bytes_count; - count += ascii_count + 2*two_bytes_count + 3*three_bytes_count + 2*surrogate_bytes_count; + count += ascii_count + 2 * two_bytes_count + 3 * three_bytes_count + + 2 * surrogate_bytes_count; } } - return count + scalar::utf16::utf8_length_from_utf16(ptr, length - (ptr - input)); + return count + scalar::utf16::utf8_length_from_utf16( + ptr, length - (ptr - input)); } -simdutf_warn_unused size_t implementation::utf8_length_from_utf16be(const char16_t * input, size_t length) const noexcept { - const char16_t* ptr = input; +simdutf_warn_unused size_t implementation::utf8_length_from_utf16be( + const char16_t *input, size_t length) const noexcept { + const char16_t *ptr = input; size_t count{0}; - if(length >= 32) { - const char16_t* end = input + length - 32; + if (length >= 32) { + const char16_t *end = input + length - 32; const __m512i v_007f = _mm512_set1_epi16((uint16_t)0x007f); const __m512i v_07ff = _mm512_set1_epi16((uint16_t)0x07ff); @@ -24268,57 +24798,61 @@ simdutf_warn_unused size_t implementation::utf8_length_from_utf16be(const char16 const __m512i v_d800 = _mm512_set1_epi16((uint16_t)0xd800); const __m512i byteflip = _mm512_setr_epi64( - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809, - 0x0607040502030001, - 0x0e0f0c0d0a0b0809 - ); + 0x0607040502030001, 0x0e0f0c0d0a0b0809, 0x0607040502030001, + 0x0e0f0c0d0a0b0809, 0x0607040502030001, 0x0e0f0c0d0a0b0809, + 0x0607040502030001, 0x0e0f0c0d0a0b0809); while (ptr <= end) { - __m512i utf16 = _mm512_loadu_si512((const __m512i*)ptr); + __m512i utf16 = _mm512_loadu_si512((const __m512i *)ptr); utf16 = _mm512_shuffle_epi8(utf16, byteflip); ptr += 32; __mmask32 ascii_bitmask = _mm512_cmple_epu16_mask(utf16, v_007f); - __mmask32 two_bytes_bitmask = _mm512_mask_cmple_epu16_mask(~ascii_bitmask, utf16, v_07ff); + __mmask32 two_bytes_bitmask = + _mm512_mask_cmple_epu16_mask(~ascii_bitmask, utf16, v_07ff); __mmask32 not_one_two_bytes = ~(ascii_bitmask | two_bytes_bitmask); - __mmask32 surrogates_bitmask = _mm512_mask_cmple_epu16_mask(not_one_two_bytes, utf16, v_dfff) & _mm512_mask_cmpge_epu16_mask(not_one_two_bytes, utf16, v_d800); + __mmask32 surrogates_bitmask = + _mm512_mask_cmple_epu16_mask(not_one_two_bytes, utf16, v_dfff) & + _mm512_mask_cmpge_epu16_mask(not_one_two_bytes, utf16, v_d800); size_t ascii_count = count_ones(ascii_bitmask); size_t two_bytes_count = count_ones(two_bytes_bitmask); size_t surrogate_bytes_count = count_ones(surrogates_bitmask); - size_t three_bytes_count = 32 - ascii_count - two_bytes_count - surrogate_bytes_count; - count += ascii_count + 2*two_bytes_count + 3*three_bytes_count + 2*surrogate_bytes_count; + size_t three_bytes_count = + 32 - ascii_count - two_bytes_count - surrogate_bytes_count; + count += ascii_count + 2 * two_bytes_count + 3 * three_bytes_count + + 2 * surrogate_bytes_count; } } - return count + scalar::utf16::utf8_length_from_utf16(ptr, length - (ptr - input)); + return count + scalar::utf16::utf8_length_from_utf16( + ptr, length - (ptr - input)); } -simdutf_warn_unused size_t implementation::utf32_length_from_utf16le(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf32_length_from_utf16le( + const char16_t *input, size_t length) const noexcept { return implementation::count_utf16le(input, length); } -simdutf_warn_unused size_t implementation::utf32_length_from_utf16be(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf32_length_from_utf16be( + const char16_t *input, size_t length) const noexcept { return implementation::count_utf16be(input, length); } -simdutf_warn_unused size_t implementation::utf16_length_from_latin1(size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::utf16_length_from_latin1(size_t length) const noexcept { return scalar::latin1::utf16_length_from_latin1(length); } - -simdutf_warn_unused size_t implementation::utf32_length_from_latin1(size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::utf32_length_from_latin1(size_t length) const noexcept { return scalar::latin1::utf32_length_from_latin1(length); } -simdutf_warn_unused size_t implementation::utf8_length_from_latin1(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf8_length_from_latin1( + const char *input, size_t length) const noexcept { const uint8_t *str = reinterpret_cast(input); size_t answer = length / sizeof(__m512i) * sizeof(__m512i); size_t i = 0; - if(answer >= 2048) { // long strings optimization + if (answer >= 2048) { // long strings optimization unsigned char v_0xFF = 0xff; __m512i eight_64bits = _mm512_setzero_si512(); while (i + sizeof(__m512i) <= length) { @@ -24328,39 +24862,53 @@ simdutf_warn_unused size_t implementation::utf8_length_from_latin1(const char * iterations = 255; } size_t max_i = i + iterations * sizeof(__m512i) - sizeof(__m512i); - for (; i + 4*sizeof(__m512i) <= max_i; i += 4*sizeof(__m512i)) { - // Load four __m512i vectors - __m512i input1 = _mm512_loadu_si512((const __m512i *)(str + i)); - __m512i input2 = _mm512_loadu_si512((const __m512i *)(str + i + sizeof(__m512i))); - __m512i input3 = _mm512_loadu_si512((const __m512i *)(str + i + 2*sizeof(__m512i))); - __m512i input4 = _mm512_loadu_si512((const __m512i *)(str + i + 3*sizeof(__m512i))); - - // Generate four masks - __mmask64 mask1 = _mm512_cmpgt_epi8_mask(_mm512_setzero_si512(), input1); - __mmask64 mask2 = _mm512_cmpgt_epi8_mask(_mm512_setzero_si512(), input2); - __mmask64 mask3 = _mm512_cmpgt_epi8_mask(_mm512_setzero_si512(), input3); - __mmask64 mask4 = _mm512_cmpgt_epi8_mask(_mm512_setzero_si512(), input4); - // Apply the masks and subtract from the runner - __m512i not_ascii1 = _mm512_mask_set1_epi8(_mm512_setzero_si512(), mask1, v_0xFF); - __m512i not_ascii2 = _mm512_mask_set1_epi8(_mm512_setzero_si512(), mask2, v_0xFF); - __m512i not_ascii3 = _mm512_mask_set1_epi8(_mm512_setzero_si512(), mask3, v_0xFF); - __m512i not_ascii4 = _mm512_mask_set1_epi8(_mm512_setzero_si512(), mask4, v_0xFF); - - runner = _mm512_sub_epi8(runner, not_ascii1); - runner = _mm512_sub_epi8(runner, not_ascii2); - runner = _mm512_sub_epi8(runner, not_ascii3); - runner = _mm512_sub_epi8(runner, not_ascii4); + for (; i + 4 * sizeof(__m512i) <= max_i; i += 4 * sizeof(__m512i)) { + // Load four __m512i vectors + __m512i input1 = _mm512_loadu_si512((const __m512i *)(str + i)); + __m512i input2 = + _mm512_loadu_si512((const __m512i *)(str + i + sizeof(__m512i))); + __m512i input3 = _mm512_loadu_si512( + (const __m512i *)(str + i + 2 * sizeof(__m512i))); + __m512i input4 = _mm512_loadu_si512( + (const __m512i *)(str + i + 3 * sizeof(__m512i))); + + // Generate four masks + __mmask64 mask1 = + _mm512_cmpgt_epi8_mask(_mm512_setzero_si512(), input1); + __mmask64 mask2 = + _mm512_cmpgt_epi8_mask(_mm512_setzero_si512(), input2); + __mmask64 mask3 = + _mm512_cmpgt_epi8_mask(_mm512_setzero_si512(), input3); + __mmask64 mask4 = + _mm512_cmpgt_epi8_mask(_mm512_setzero_si512(), input4); + // Apply the masks and subtract from the runner + __m512i not_ascii1 = + _mm512_mask_set1_epi8(_mm512_setzero_si512(), mask1, v_0xFF); + __m512i not_ascii2 = + _mm512_mask_set1_epi8(_mm512_setzero_si512(), mask2, v_0xFF); + __m512i not_ascii3 = + _mm512_mask_set1_epi8(_mm512_setzero_si512(), mask3, v_0xFF); + __m512i not_ascii4 = + _mm512_mask_set1_epi8(_mm512_setzero_si512(), mask4, v_0xFF); + + runner = _mm512_sub_epi8(runner, not_ascii1); + runner = _mm512_sub_epi8(runner, not_ascii2); + runner = _mm512_sub_epi8(runner, not_ascii3); + runner = _mm512_sub_epi8(runner, not_ascii4); } for (; i <= max_i; i += sizeof(__m512i)) { __m512i more_input = _mm512_loadu_si512((const __m512i *)(str + i)); - __mmask64 mask = _mm512_cmpgt_epi8_mask(_mm512_setzero_si512(), more_input); - __m512i not_ascii = _mm512_mask_set1_epi8(_mm512_setzero_si512(), mask, v_0xFF); + __mmask64 mask = + _mm512_cmpgt_epi8_mask(_mm512_setzero_si512(), more_input); + __m512i not_ascii = + _mm512_mask_set1_epi8(_mm512_setzero_si512(), mask, v_0xFF); runner = _mm512_sub_epi8(runner, not_ascii); } - eight_64bits = _mm512_add_epi64(eight_64bits, _mm512_sad_epu8(runner, _mm512_setzero_si512())); + eight_64bits = _mm512_add_epi64( + eight_64bits, _mm512_sad_epu8(runner, _mm512_setzero_si512())); } __m256i first_half = _mm512_extracti64x4_epi64(eight_64bits, 0); @@ -24374,110 +24922,140 @@ simdutf_warn_unused size_t implementation::utf8_length_from_latin1(const char * (size_t)_mm256_extract_epi64(second_half, 2) + (size_t)_mm256_extract_epi64(second_half, 3); } else if (answer > 0) { - for(; i + sizeof(__m512i) <= length; i += sizeof(__m512i)) { - __m512i latin = _mm512_loadu_si512((const __m512i*)(str + i)); + for (; i + sizeof(__m512i) <= length; i += sizeof(__m512i)) { + __m512i latin = _mm512_loadu_si512((const __m512i *)(str + i)); uint64_t non_ascii = _mm512_movepi8_mask(latin); answer += count_ones(non_ascii); } } - return answer + scalar::latin1::utf8_length_from_latin1(reinterpret_cast(str + i), length - i); + return answer + scalar::latin1::utf8_length_from_latin1( + reinterpret_cast(str + i), length - i); } -simdutf_warn_unused size_t implementation::utf16_length_from_utf8(const char * input, size_t length) const noexcept { - size_t pos = 0; - size_t count = 0; - // This algorithm could no doubt be improved! - for(;pos + 64 <= length; pos += 64) { - __m512i utf8 = _mm512_loadu_si512((const __m512i*)(input+pos)); - uint64_t utf8_continuation_mask = _mm512_cmplt_epi8_mask(utf8, _mm512_set1_epi8(-65+1)); - // We count one word for anything that is not a continuation (so - // leading bytes). - count += 64 - count_ones(utf8_continuation_mask); - uint64_t utf8_4byte = _mm512_cmpge_epu8_mask(utf8, _mm512_set1_epi8(int8_t(240))); - count += count_ones(utf8_4byte); - } - return count + scalar::utf8::utf16_length_from_utf8(input + pos, length - pos); -} - -simdutf_warn_unused size_t implementation::utf8_length_from_utf32(const char32_t * input, size_t length) const noexcept { - const char32_t* ptr = input; +simdutf_warn_unused size_t implementation::utf16_length_from_utf8( + const char *input, size_t length) const noexcept { + size_t pos = 0; + size_t count = 0; + // This algorithm could no doubt be improved! + for (; pos + 64 <= length; pos += 64) { + __m512i utf8 = _mm512_loadu_si512((const __m512i *)(input + pos)); + uint64_t utf8_continuation_mask = + _mm512_cmplt_epi8_mask(utf8, _mm512_set1_epi8(-65 + 1)); + // We count one word for anything that is not a continuation (so + // leading bytes). + count += 64 - count_ones(utf8_continuation_mask); + uint64_t utf8_4byte = + _mm512_cmpge_epu8_mask(utf8, _mm512_set1_epi8(int8_t(240))); + count += count_ones(utf8_4byte); + } + return count + + scalar::utf8::utf16_length_from_utf8(input + pos, length - pos); +} + +simdutf_warn_unused size_t implementation::utf8_length_from_utf32( + const char32_t *input, size_t length) const noexcept { + const char32_t *ptr = input; size_t count{0}; - if(length >= 16) { - const char32_t* end = input + length - 16; + if (length >= 16) { + const char32_t *end = input + length - 16; const __m512i v_0000_007f = _mm512_set1_epi32((uint32_t)0x7f); const __m512i v_0000_07ff = _mm512_set1_epi32((uint32_t)0x7ff); const __m512i v_0000_ffff = _mm512_set1_epi32((uint32_t)0x0000ffff); - while (ptr <= end) { - __m512i utf32 = _mm512_loadu_si512((const __m512i*)ptr); + __m512i utf32 = _mm512_loadu_si512((const __m512i *)ptr); ptr += 16; __mmask16 ascii_bitmask = _mm512_cmple_epu32_mask(utf32, v_0000_007f); - __mmask16 two_bytes_bitmask = _mm512_mask_cmple_epu32_mask(_knot_mask16(ascii_bitmask), utf32, v_0000_07ff); - __mmask16 three_bytes_bitmask = _mm512_mask_cmple_epu32_mask(_knot_mask16(_mm512_kor(ascii_bitmask, two_bytes_bitmask)), utf32, v_0000_ffff); + __mmask16 two_bytes_bitmask = _mm512_mask_cmple_epu32_mask( + _knot_mask16(ascii_bitmask), utf32, v_0000_07ff); + __mmask16 three_bytes_bitmask = _mm512_mask_cmple_epu32_mask( + _knot_mask16(_mm512_kor(ascii_bitmask, two_bytes_bitmask)), utf32, + v_0000_ffff); size_t ascii_count = count_ones(ascii_bitmask); size_t two_bytes_count = count_ones(two_bytes_bitmask); size_t three_bytes_count = count_ones(three_bytes_bitmask); - size_t four_bytes_count = 16 - ascii_count - two_bytes_count - three_bytes_count; - count += ascii_count + 2*two_bytes_count + 3*three_bytes_count + 4*four_bytes_count; + size_t four_bytes_count = + 16 - ascii_count - two_bytes_count - three_bytes_count; + count += ascii_count + 2 * two_bytes_count + 3 * three_bytes_count + + 4 * four_bytes_count; } } - return count + scalar::utf32::utf8_length_from_utf32(ptr, length - (ptr - input)); + return count + + scalar::utf32::utf8_length_from_utf32(ptr, length - (ptr - input)); } -simdutf_warn_unused size_t implementation::utf16_length_from_utf32(const char32_t * input, size_t length) const noexcept { - const char32_t* ptr = input; +simdutf_warn_unused size_t implementation::utf16_length_from_utf32( + const char32_t *input, size_t length) const noexcept { + const char32_t *ptr = input; size_t count{0}; - if(length >= 16) { - const char32_t* end = input + length - 16; + if (length >= 16) { + const char32_t *end = input + length - 16; const __m512i v_0000_ffff = _mm512_set1_epi32((uint32_t)0x0000ffff); - while (ptr <= end) { - __m512i utf32 = _mm512_loadu_si512((const __m512i*)ptr); + __m512i utf32 = _mm512_loadu_si512((const __m512i *)ptr); ptr += 16; - __mmask16 surrogates_bitmask = _mm512_cmpgt_epu32_mask(utf32, v_0000_ffff); + __mmask16 surrogates_bitmask = + _mm512_cmpgt_epu32_mask(utf32, v_0000_ffff); count += 16 + count_ones(surrogates_bitmask); } } - return count + scalar::utf32::utf16_length_from_utf32(ptr, length - (ptr - input)); + return count + + scalar::utf32::utf16_length_from_utf32(ptr, length - (ptr - input)); } -simdutf_warn_unused size_t implementation::utf32_length_from_utf8(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf32_length_from_utf8( + const char *input, size_t length) const noexcept { return implementation::count_utf8(input, length); } -simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64( + const char *input, size_t length) const noexcept { return scalar::base64::maximal_binary_length_from_base64(input, length); } -simdutf_warn_unused result implementation::base64_to_binary(const char * input, size_t length, char* output, base64_options options) const noexcept { - return (options & base64_url) ? compress_decode_base64(output, input, length, options) : compress_decode_base64(output, input, length, options); +simdutf_warn_unused result implementation::base64_to_binary( + const char *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_options) const noexcept { + return (options & base64_url) + ? compress_decode_base64(output, input, length, options, + last_chunk_options) + : compress_decode_base64(output, input, length, options, + last_chunk_options); } -simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64( + const char16_t *input, size_t length) const noexcept { return scalar::base64::maximal_binary_length_from_base64(input, length); } -simdutf_warn_unused result implementation::base64_to_binary(const char16_t * input, size_t length, char* output, base64_options options) const noexcept { - return (options & base64_url) ? compress_decode_base64(output, input, length, options) : compress_decode_base64(output, input, length, options); +simdutf_warn_unused result implementation::base64_to_binary( + const char16_t *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_options) const noexcept { + return (options & base64_url) + ? compress_decode_base64(output, input, length, options, + last_chunk_options) + : compress_decode_base64(output, input, length, options, + last_chunk_options); } - -simdutf_warn_unused size_t implementation::base64_length_from_binary(size_t length, base64_options options) const noexcept { +simdutf_warn_unused size_t implementation::base64_length_from_binary( + size_t length, base64_options options) const noexcept { return scalar::base64::base64_length_from_binary(length, options); } -size_t implementation::binary_to_base64(const char * input, size_t length, char* output, base64_options options) const noexcept { - if(options & base64_url) { +size_t implementation::binary_to_base64(const char *input, size_t length, + char *output, + base64_options options) const noexcept { + if (options & base64_url) { return encode_base64(output, input, length, options); } else { return encode_base64(output, input, length, options); @@ -24495,7 +25073,8 @@ SIMDUTF_UNTARGET_REGION #endif -#if SIMDUTF_GCC11ORMORE // workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105593 +#if SIMDUTF_GCC11ORMORE // workaround for + // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105593 SIMDUTF_POP_DISABLE_WARNINGS #endif // end of workaround /* end file src/simdutf/icelake/end.h */ @@ -24514,34 +25093,47 @@ SIMDUTF_POP_DISABLE_WARNINGS SIMDUTF_TARGET_HASWELL #endif -#if SIMDUTF_GCC11ORMORE // workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105593 +#if SIMDUTF_GCC11ORMORE // workaround for + // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105593 +// clang-format off SIMDUTF_DISABLE_GCC_WARNING(-Wmaybe-uninitialized) +// clang-format on #endif // end of workaround /* end file src/simdutf/haswell/begin.h */ namespace simdutf { namespace haswell { namespace { #ifndef SIMDUTF_HASWELL_H -#error "haswell.h must be included" + #error "haswell.h must be included" #endif using namespace simd; - -simdutf_really_inline bool is_ascii(const simd8x64& input) { +simdutf_really_inline bool is_ascii(const simd8x64 &input) { return input.reduce_or().is_ascii(); } -simdutf_unused simdutf_really_inline simd8 must_be_continuation(const simd8 prev1, const simd8 prev2, const simd8 prev3) { - simd8 is_second_byte = prev1.saturating_sub(0b11000000u-1); // Only 11______ will be > 0 - simd8 is_third_byte = prev2.saturating_sub(0b11100000u-1); // Only 111_____ will be > 0 - simd8 is_fourth_byte = prev3.saturating_sub(0b11110000u-1); // Only 1111____ will be > 0 - // Caller requires a bool (all 1's). All values resulting from the subtraction will be <= 64, so signed comparison is fine. - return simd8(is_second_byte | is_third_byte | is_fourth_byte) > int8_t(0); -} - -simdutf_really_inline simd8 must_be_2_3_continuation(const simd8 prev2, const simd8 prev3) { - simd8 is_third_byte = prev2.saturating_sub(0xe0u-0x80); // Only 111_____ will be > 0x80 - simd8 is_fourth_byte = prev3.saturating_sub(0xf0u-0x80); // Only 1111____ will be > 0x80 +simdutf_unused simdutf_really_inline simd8 +must_be_continuation(const simd8 prev1, const simd8 prev2, + const simd8 prev3) { + simd8 is_second_byte = + prev1.saturating_sub(0b11000000u - 1); // Only 11______ will be > 0 + simd8 is_third_byte = + prev2.saturating_sub(0b11100000u - 1); // Only 111_____ will be > 0 + simd8 is_fourth_byte = + prev3.saturating_sub(0b11110000u - 1); // Only 1111____ will be > 0 + // Caller requires a bool (all 1's). All values resulting from the subtraction + // will be <= 64, so signed comparison is fine. + return simd8(is_second_byte | is_third_byte | is_fourth_byte) > + int8_t(0); +} + +simdutf_really_inline simd8 +must_be_2_3_continuation(const simd8 prev2, + const simd8 prev3) { + simd8 is_third_byte = + prev2.saturating_sub(0xe0u - 0x80); // Only 111_____ will be > 0x80 + simd8 is_fourth_byte = + prev3.saturating_sub(0xf0u - 0x80); // Only 1111____ will be > 0x80 return simd8(is_third_byte | is_fourth_byte); } @@ -24583,239 +25175,253 @@ simdutf_really_inline simd8 must_be_2_3_continuation(const simd8 0 0 1 0 1 0 0 0 b = a << 1 1 1 1 1 1 1 1 0 c = V | a | b ^ - the last bit can be zero, we just consume 7 code units - and recheck this word in the next iteration + the last bit can be zero, we just consume 7 + code units and recheck this word in the next iteration */ /* Returns: - - pointer to the last unprocessed character (a scalar fallback should check the rest); + - pointer to the last unprocessed character (a scalar fallback should check + the rest); - nullptr if an error was detected. */ template -const char16_t* avx2_validate_utf16(const char16_t* input, size_t size) { - const char16_t* end = input + size; +const char16_t *avx2_validate_utf16(const char16_t *input, size_t size) { + const char16_t *end = input + size; - const auto v_d8 = simd8::splat(0xd8); - const auto v_f8 = simd8::splat(0xf8); - const auto v_fc = simd8::splat(0xfc); - const auto v_dc = simd8::splat(0xdc); + const auto v_d8 = simd8::splat(0xd8); + const auto v_f8 = simd8::splat(0xf8); + const auto v_fc = simd8::splat(0xfc); + const auto v_dc = simd8::splat(0xdc); - while (input + simd16::ELEMENTS * 2 < end) { - // 0. Load data: since the validation takes into account only higher - // byte of each word, we compress the two vectors into one which - // consists only the higher bytes. - auto in0 = simd16(input); - auto in1 = simd16(input + simd16::ELEMENTS); + while (input + simd16::ELEMENTS * 2 < end) { + // 0. Load data: since the validation takes into account only higher + // byte of each word, we compress the two vectors into one which + // consists only the higher bytes. + auto in0 = simd16(input); + auto in1 = simd16(input + simd16::ELEMENTS); - if (big_endian) { - in0 = in0.swap_bytes(); - in1 = in1.swap_bytes(); - } + if (big_endian) { + in0 = in0.swap_bytes(); + in1 = in1.swap_bytes(); + } - const auto t0 = in0.shr<8>(); - const auto t1 = in1.shr<8>(); + const auto t0 = in0.shr<8>(); + const auto t1 = in1.shr<8>(); - const auto in = simd16::pack(t0, t1); + const auto in = simd16::pack(t0, t1); - // 1. Check whether we have any 0xD800..DFFF word (0b1101'1xxx'yyyy'yyyy). - const auto surrogates_wordmask = (in & v_f8) == v_d8; - const uint32_t surrogates_bitmask = surrogates_wordmask.to_bitmask(); - if (surrogates_bitmask == 0x0) { - input += simd16::ELEMENTS * 2; - } else { - // 2. We have some surrogates that have to be distinguished: - // - low surrogates: 0b1101'10xx'yyyy'yyyy (0xD800..0xDBFF) - // - high surrogates: 0b1101'11xx'yyyy'yyyy (0xDC00..0xDFFF) - // - // Fact: high surrogate has 11th bit set (3rd bit in the higher word) - - // V - non-surrogate code units - // V = not surrogates_wordmask - const uint32_t V = ~surrogates_bitmask; - - // H - word-mask for high surrogates: the six highest bits are 0b1101'11 - const auto vH = (in & v_fc) == v_dc; - const uint32_t H = vH.to_bitmask(); - - // L - word mask for low surrogates - // L = not H and surrogates_wordmask - const uint32_t L = ~H & surrogates_bitmask; - - const uint32_t a = L & (H >> 1); // A low surrogate must be followed by high one. - // (A low surrogate placed in the 7th register's word - // is an exception we handle.) - const uint32_t b = a << 1; // Just mark that the opposite fact is hold, - // thanks to that we have only two masks for valid case. - const uint32_t c = V | a | b; // Combine all the masks into the final one. - - if (c == 0xffffffff) { - // The whole input register contains valid UTF-16, i.e., - // either single code units or proper surrogate pairs. - input += simd16::ELEMENTS * 2; - } else if (c == 0x7fffffff) { - // The 31 lower code units of the input register contains valid UTF-16. - // The 31 word may be either a low or high surrogate. It the next - // iteration we 1) check if the low surrogate is followed by a high - // one, 2) reject sole high surrogate. - input += simd16::ELEMENTS * 2 - 1; - } else { - return nullptr; - } - } + // 1. Check whether we have any 0xD800..DFFF word (0b1101'1xxx'yyyy'yyyy). + const auto surrogates_wordmask = (in & v_f8) == v_d8; + const uint32_t surrogates_bitmask = surrogates_wordmask.to_bitmask(); + if (surrogates_bitmask == 0x0) { + input += simd16::ELEMENTS * 2; + } else { + // 2. We have some surrogates that have to be distinguished: + // - low surrogates: 0b1101'10xx'yyyy'yyyy (0xD800..0xDBFF) + // - high surrogates: 0b1101'11xx'yyyy'yyyy (0xDC00..0xDFFF) + // + // Fact: high surrogate has 11th bit set (3rd bit in the higher word) + + // V - non-surrogate code units + // V = not surrogates_wordmask + const uint32_t V = ~surrogates_bitmask; + + // H - word-mask for high surrogates: the six highest bits are 0b1101'11 + const auto vH = (in & v_fc) == v_dc; + const uint32_t H = vH.to_bitmask(); + + // L - word mask for low surrogates + // L = not H and surrogates_wordmask + const uint32_t L = ~H & surrogates_bitmask; + + const uint32_t a = + L & (H >> 1); // A low surrogate must be followed by high one. + // (A low surrogate placed in the 7th register's word + // is an exception we handle.) + const uint32_t b = + a << 1; // Just mark that the opposite fact is hold, + // thanks to that we have only two masks for valid case. + const uint32_t c = V | a | b; // Combine all the masks into the final one. + + if (c == 0xffffffff) { + // The whole input register contains valid UTF-16, i.e., + // either single code units or proper surrogate pairs. + input += simd16::ELEMENTS * 2; + } else if (c == 0x7fffffff) { + // The 31 lower code units of the input register contains valid UTF-16. + // The 31 word may be either a low or high surrogate. It the next + // iteration we 1) check if the low surrogate is followed by a high + // one, 2) reject sole high surrogate. + input += simd16::ELEMENTS * 2 - 1; + } else { + return nullptr; + } } + } - return input; + return input; } - template -const result avx2_validate_utf16_with_errors(const char16_t* input, size_t size) { - if (simdutf_unlikely(size == 0)) { - return result(error_code::SUCCESS, 0); - } - const char16_t *start = input; - const char16_t* end = input + size; +const result avx2_validate_utf16_with_errors(const char16_t *input, + size_t size) { + if (simdutf_unlikely(size == 0)) { + return result(error_code::SUCCESS, 0); + } + const char16_t *start = input; + const char16_t *end = input + size; - const auto v_d8 = simd8::splat(0xd8); - const auto v_f8 = simd8::splat(0xf8); - const auto v_fc = simd8::splat(0xfc); - const auto v_dc = simd8::splat(0xdc); + const auto v_d8 = simd8::splat(0xd8); + const auto v_f8 = simd8::splat(0xf8); + const auto v_fc = simd8::splat(0xfc); + const auto v_dc = simd8::splat(0xdc); - while (input + simd16::ELEMENTS * 2 < end) { - // 0. Load data: since the validation takes into account only higher - // byte of each word, we compress the two vectors into one which - // consists only the higher bytes. - auto in0 = simd16(input); - auto in1 = simd16(input + simd16::ELEMENTS); + while (input + simd16::ELEMENTS * 2 < end) { + // 0. Load data: since the validation takes into account only higher + // byte of each word, we compress the two vectors into one which + // consists only the higher bytes. + auto in0 = simd16(input); + auto in1 = simd16(input + simd16::ELEMENTS); - if (big_endian) { - in0 = in0.swap_bytes(); - in1 = in1.swap_bytes(); - } + if (big_endian) { + in0 = in0.swap_bytes(); + in1 = in1.swap_bytes(); + } - const auto t0 = in0.shr<8>(); - const auto t1 = in1.shr<8>(); + const auto t0 = in0.shr<8>(); + const auto t1 = in1.shr<8>(); - const auto in = simd16::pack(t0, t1); + const auto in = simd16::pack(t0, t1); - // 1. Check whether we have any 0xD800..DFFF word (0b1101'1xxx'yyyy'yyyy). - const auto surrogates_wordmask = (in & v_f8) == v_d8; - const uint32_t surrogates_bitmask = surrogates_wordmask.to_bitmask(); - if (surrogates_bitmask == 0x0) { - input += simd16::ELEMENTS * 2; - } else { - // 2. We have some surrogates that have to be distinguished: - // - low surrogates: 0b1101'10xx'yyyy'yyyy (0xD800..0xDBFF) - // - high surrogates: 0b1101'11xx'yyyy'yyyy (0xDC00..0xDFFF) - // - // Fact: high surrogate has 11th bit set (3rd bit in the higher word) - - // V - non-surrogate code units - // V = not surrogates_wordmask - const uint32_t V = ~surrogates_bitmask; - - // H - word-mask for high surrogates: the six highest bits are 0b1101'11 - const auto vH = (in & v_fc) == v_dc; - const uint32_t H = vH.to_bitmask(); - - // L - word mask for low surrogates - // L = not H and surrogates_wordmask - const uint32_t L = ~H & surrogates_bitmask; - - const uint32_t a = L & (H >> 1); // A low surrogate must be followed by high one. - // (A low surrogate placed in the 7th register's word - // is an exception we handle.) - const uint32_t b = a << 1; // Just mark that the opposite fact is hold, - // thanks to that we have only two masks for valid case. - const uint32_t c = V | a | b; // Combine all the masks into the final one. - - if (c == 0xffffffff) { - // The whole input register contains valid UTF-16, i.e., - // either single code units or proper surrogate pairs. - input += simd16::ELEMENTS * 2; - } else if (c == 0x7fffffff) { - // The 31 lower code units of the input register contains valid UTF-16. - // The 31 word may be either a low or high surrogate. It the next - // iteration we 1) check if the low surrogate is followed by a high - // one, 2) reject sole high surrogate. - input += simd16::ELEMENTS * 2 - 1; - } else { - return result(error_code::SURROGATE, input - start); - } - } + // 1. Check whether we have any 0xD800..DFFF word (0b1101'1xxx'yyyy'yyyy). + const auto surrogates_wordmask = (in & v_f8) == v_d8; + const uint32_t surrogates_bitmask = surrogates_wordmask.to_bitmask(); + if (surrogates_bitmask == 0x0) { + input += simd16::ELEMENTS * 2; + } else { + // 2. We have some surrogates that have to be distinguished: + // - low surrogates: 0b1101'10xx'yyyy'yyyy (0xD800..0xDBFF) + // - high surrogates: 0b1101'11xx'yyyy'yyyy (0xDC00..0xDFFF) + // + // Fact: high surrogate has 11th bit set (3rd bit in the higher word) + + // V - non-surrogate code units + // V = not surrogates_wordmask + const uint32_t V = ~surrogates_bitmask; + + // H - word-mask for high surrogates: the six highest bits are 0b1101'11 + const auto vH = (in & v_fc) == v_dc; + const uint32_t H = vH.to_bitmask(); + + // L - word mask for low surrogates + // L = not H and surrogates_wordmask + const uint32_t L = ~H & surrogates_bitmask; + + const uint32_t a = + L & (H >> 1); // A low surrogate must be followed by high one. + // (A low surrogate placed in the 7th register's word + // is an exception we handle.) + const uint32_t b = + a << 1; // Just mark that the opposite fact is hold, + // thanks to that we have only two masks for valid case. + const uint32_t c = V | a | b; // Combine all the masks into the final one. + + if (c == 0xffffffff) { + // The whole input register contains valid UTF-16, i.e., + // either single code units or proper surrogate pairs. + input += simd16::ELEMENTS * 2; + } else if (c == 0x7fffffff) { + // The 31 lower code units of the input register contains valid UTF-16. + // The 31 word may be either a low or high surrogate. It the next + // iteration we 1) check if the low surrogate is followed by a high + // one, 2) reject sole high surrogate. + input += simd16::ELEMENTS * 2 - 1; + } else { + return result(error_code::SURROGATE, input - start); + } } + } - return result(error_code::SUCCESS, input - start); + return result(error_code::SUCCESS, input - start); } /* end file src/haswell/avx2_validate_utf16.cpp */ /* begin file src/haswell/avx2_validate_utf32le.cpp */ /* Returns: - - pointer to the last unprocessed character (a scalar fallback should check the rest); + - pointer to the last unprocessed character (a scalar fallback should check + the rest); - nullptr if an error was detected. */ -const char32_t* avx2_validate_utf32le(const char32_t* input, size_t size) { - const char32_t* end = input + size; - - const __m256i standardmax = _mm256_set1_epi32(0x10ffff); - const __m256i offset = _mm256_set1_epi32(0xffff2000); - const __m256i standardoffsetmax = _mm256_set1_epi32(0xfffff7ff); - __m256i currentmax = _mm256_setzero_si256(); - __m256i currentoffsetmax = _mm256_setzero_si256(); - - while (input + 8 < end) { - const __m256i in = _mm256_loadu_si256((__m256i *)input); - currentmax = _mm256_max_epu32(in,currentmax); - currentoffsetmax = _mm256_max_epu32(_mm256_add_epi32(in, offset), currentoffsetmax); - input += 8; - } - __m256i is_zero = _mm256_xor_si256(_mm256_max_epu32(currentmax, standardmax), standardmax); - if(_mm256_testz_si256(is_zero, is_zero) == 0) { - return nullptr; - } +const char32_t *avx2_validate_utf32le(const char32_t *input, size_t size) { + const char32_t *end = input + size; - is_zero = _mm256_xor_si256(_mm256_max_epu32(currentoffsetmax, standardoffsetmax), standardoffsetmax); - if(_mm256_testz_si256(is_zero, is_zero) == 0) { - return nullptr; - } + const __m256i standardmax = _mm256_set1_epi32(0x10ffff); + const __m256i offset = _mm256_set1_epi32(0xffff2000); + const __m256i standardoffsetmax = _mm256_set1_epi32(0xfffff7ff); + __m256i currentmax = _mm256_setzero_si256(); + __m256i currentoffsetmax = _mm256_setzero_si256(); - return input; -} + while (input + 8 < end) { + const __m256i in = _mm256_loadu_si256((__m256i *)input); + currentmax = _mm256_max_epu32(in, currentmax); + currentoffsetmax = + _mm256_max_epu32(_mm256_add_epi32(in, offset), currentoffsetmax); + input += 8; + } + __m256i is_zero = + _mm256_xor_si256(_mm256_max_epu32(currentmax, standardmax), standardmax); + if (_mm256_testz_si256(is_zero, is_zero) == 0) { + return nullptr; + } + is_zero = _mm256_xor_si256( + _mm256_max_epu32(currentoffsetmax, standardoffsetmax), standardoffsetmax); + if (_mm256_testz_si256(is_zero, is_zero) == 0) { + return nullptr; + } -const result avx2_validate_utf32le_with_errors(const char32_t* input, size_t size) { - const char32_t* start = input; - const char32_t* end = input + size; + return input; +} - const __m256i standardmax = _mm256_set1_epi32(0x10ffff); - const __m256i offset = _mm256_set1_epi32(0xffff2000); - const __m256i standardoffsetmax = _mm256_set1_epi32(0xfffff7ff); - __m256i currentmax = _mm256_setzero_si256(); - __m256i currentoffsetmax = _mm256_setzero_si256(); +const result avx2_validate_utf32le_with_errors(const char32_t *input, + size_t size) { + const char32_t *start = input; + const char32_t *end = input + size; - while (input + 8 < end) { - const __m256i in = _mm256_loadu_si256((__m256i *)input); - currentmax = _mm256_max_epu32(in,currentmax); - currentoffsetmax = _mm256_max_epu32(_mm256_add_epi32(in, offset), currentoffsetmax); + const __m256i standardmax = _mm256_set1_epi32(0x10ffff); + const __m256i offset = _mm256_set1_epi32(0xffff2000); + const __m256i standardoffsetmax = _mm256_set1_epi32(0xfffff7ff); + __m256i currentmax = _mm256_setzero_si256(); + __m256i currentoffsetmax = _mm256_setzero_si256(); - __m256i is_zero = _mm256_xor_si256(_mm256_max_epu32(currentmax, standardmax), standardmax); - if(_mm256_testz_si256(is_zero, is_zero) == 0) { - return result(error_code::TOO_LARGE, input - start); - } + while (input + 8 < end) { + const __m256i in = _mm256_loadu_si256((__m256i *)input); + currentmax = _mm256_max_epu32(in, currentmax); + currentoffsetmax = + _mm256_max_epu32(_mm256_add_epi32(in, offset), currentoffsetmax); - is_zero = _mm256_xor_si256(_mm256_max_epu32(currentoffsetmax, standardoffsetmax), standardoffsetmax); - if(_mm256_testz_si256(is_zero, is_zero) == 0) { - return result(error_code::SURROGATE, input - start); - } - input += 8; + __m256i is_zero = _mm256_xor_si256( + _mm256_max_epu32(currentmax, standardmax), standardmax); + if (_mm256_testz_si256(is_zero, is_zero) == 0) { + return result(error_code::TOO_LARGE, input - start); + } + + is_zero = + _mm256_xor_si256(_mm256_max_epu32(currentoffsetmax, standardoffsetmax), + standardoffsetmax); + if (_mm256_testz_si256(is_zero, is_zero) == 0) { + return result(error_code::SURROGATE, input - start); } + input += 8; + } - return result(error_code::SUCCESS, input - start); + return result(error_code::SUCCESS, input - start); } /* end file src/haswell/avx2_validate_utf32le.cpp */ /* begin file src/haswell/avx2_convert_latin1_to_utf8.cpp */ -std::pair avx2_convert_latin1_to_utf8(const char *latin1_input, size_t len, - char *utf8_output) { +std::pair +avx2_convert_latin1_to_utf8(const char *latin1_input, size_t len, + char *utf8_output) { const char *end = latin1_input + len; const __m256i v_0000 = _mm256_setzero_si256(); const __m256i v_c080 = _mm256_set1_epi16((int16_t)0xc080); @@ -24857,8 +25463,10 @@ std::pair avx2_convert_latin1_to_utf8(const char *latin1_i // 2. merge ASCII and 2-byte codewords // no bits set above 7th bit - const __m256i one_byte_bytemask = _mm256_cmpeq_epi16(_mm256_and_si256(in, v_ff80), v_0000); - const uint32_t one_byte_bitmask = static_cast(_mm256_movemask_epi8(one_byte_bytemask)); + const __m256i one_byte_bytemask = + _mm256_cmpeq_epi16(_mm256_and_si256(in, v_ff80), v_0000); + const uint32_t one_byte_bitmask = + static_cast(_mm256_movemask_epi8(one_byte_bytemask)); const __m256i utf8_unpacked = _mm256_blendv_epi8(t4, in, one_byte_bytemask); @@ -24897,116 +25505,128 @@ std::pair avx2_convert_latin1_to_utf8(const char *latin1_i /* end file src/haswell/avx2_convert_latin1_to_utf8.cpp */ /* begin file src/haswell/avx2_convert_latin1_to_utf16.cpp */ template -std::pair avx2_convert_latin1_to_utf16(const char* latin1_input, size_t len, char16_t* utf16_output) { - size_t rounded_len = len & ~0xF; // Round down to nearest multiple of 32 - - size_t i = 0; - for (; i < rounded_len; i += 16) { - // Load 16 bytes from the address (input + i) into a xmm register - __m128i xmm0 = _mm_loadu_si128(reinterpret_cast(latin1_input + i)); +std::pair +avx2_convert_latin1_to_utf16(const char *latin1_input, size_t len, + char16_t *utf16_output) { + size_t rounded_len = len & ~0xF; // Round down to nearest multiple of 32 - // Zero extend each byte in xmm0 to word and put it in another xmm register - __m128i xmm1 = _mm_cvtepu8_epi16(xmm0); - - // Shift xmm0 to the right by 8 bytes - xmm0 = _mm_srli_si128(xmm0, 8); + size_t i = 0; + for (; i < rounded_len; i += 16) { + // Load 16 bytes from the address (input + i) into a xmm register + __m128i xmm0 = + _mm_loadu_si128(reinterpret_cast(latin1_input + i)); - // Zero extend each byte in the shifted xmm0 to word in xmm0 - xmm0 = _mm_cvtepu8_epi16(xmm0); + // Zero extend each byte in xmm0 to word and put it in another xmm register + __m128i xmm1 = _mm_cvtepu8_epi16(xmm0); - if (big_endian) { - const __m128i swap = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); - xmm0 = _mm_shuffle_epi8(xmm0, swap); - xmm1 = _mm_shuffle_epi8(xmm1, swap); - } + // Shift xmm0 to the right by 8 bytes + xmm0 = _mm_srli_si128(xmm0, 8); - // Store the contents of xmm1 into the address pointed by (output + i) - _mm_storeu_si128(reinterpret_cast<__m128i*>(utf16_output + i), xmm1); + // Zero extend each byte in the shifted xmm0 to word in xmm0 + xmm0 = _mm_cvtepu8_epi16(xmm0); - // Store the contents of xmm0 into the address pointed by (output + i + 8) - _mm_storeu_si128(reinterpret_cast<__m128i*>(utf16_output + i + 8), xmm0); + if (big_endian) { + const __m128i swap = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + xmm0 = _mm_shuffle_epi8(xmm0, swap); + xmm1 = _mm_shuffle_epi8(xmm1, swap); } - return std::make_pair(latin1_input + rounded_len, utf16_output + rounded_len); + // Store the contents of xmm1 into the address pointed by (output + i) + _mm_storeu_si128(reinterpret_cast<__m128i *>(utf16_output + i), xmm1); + + // Store the contents of xmm0 into the address pointed by (output + i + 8) + _mm_storeu_si128(reinterpret_cast<__m128i *>(utf16_output + i + 8), xmm0); + } + return std::make_pair(latin1_input + rounded_len, utf16_output + rounded_len); } /* end file src/haswell/avx2_convert_latin1_to_utf16.cpp */ /* begin file src/haswell/avx2_convert_latin1_to_utf32.cpp */ -std::pair avx2_convert_latin1_to_utf32(const char* buf, size_t len, char32_t* utf32_output) { - size_t rounded_len = ((len | 7) ^ 7); // Round down to nearest multiple of 8 +std::pair +avx2_convert_latin1_to_utf32(const char *buf, size_t len, + char32_t *utf32_output) { + size_t rounded_len = ((len | 7) ^ 7); // Round down to nearest multiple of 8 - for (size_t i = 0; i < rounded_len; i += 8) { - // Load 8 Latin1 characters into a 64-bit register - __m128i in = _mm_loadl_epi64((__m128i*)&buf[i]); + for (size_t i = 0; i < rounded_len; i += 8) { + // Load 8 Latin1 characters into a 64-bit register + __m128i in = _mm_loadl_epi64((__m128i *)&buf[i]); - // Zero extend each set of 8 Latin1 characters to 8 32-bit integers using vpmovzxbd - __m256i out = _mm256_cvtepu8_epi32(in); + // Zero extend each set of 8 Latin1 characters to 8 32-bit integers using + // vpmovzxbd + __m256i out = _mm256_cvtepu8_epi32(in); - // Store the results back to memory - _mm256_storeu_si256((__m256i*)&utf32_output[i], out); - } + // Store the results back to memory + _mm256_storeu_si256((__m256i *)&utf32_output[i], out); + } - // return pointers pointing to where we left off - return std::make_pair(buf + rounded_len, utf32_output + rounded_len); + // return pointers pointing to where we left off + return std::make_pair(buf + rounded_len, utf32_output + rounded_len); } - /* end file src/haswell/avx2_convert_latin1_to_utf32.cpp */ /* begin file src/haswell/avx2_convert_utf8_to_utf16.cpp */ // depends on "tables/utf8_to_utf16_tables.h" - // Convert up to 12 bytes from utf8 to utf16 using a mask indicating the // end of the code points. Only the least significant 12 bits of the mask // are accessed. // It returns how many bytes were consumed (up to 12). template size_t convert_masked_utf8_to_utf16(const char *input, - uint64_t utf8_end_of_code_point_mask, - char16_t *&utf16_output) { + uint64_t utf8_end_of_code_point_mask, + char16_t *&utf16_output) { // we use an approach where we try to process up to 12 input bytes. // Why 12 input bytes and not 16? Because we are concerned with the size of // the lookup tables. Also 12 is nicely divisible by two and three. // // - // Optimization note: our main path below is load-latency dependent. Thus it is maybe - // beneficial to have fast paths that depend on branch prediction but have less latency. - // This results in more instructions but, potentially, also higher speeds. + // Optimization note: our main path below is load-latency dependent. Thus it + // is maybe beneficial to have fast paths that depend on branch prediction but + // have less latency. This results in more instructions but, potentially, also + // higher speeds. // // We first try a few fast paths. - const __m128i swap = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + const __m128i swap = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); const __m128i in = _mm_loadu_si128((__m128i *)input); const uint16_t input_utf8_end_of_code_point_mask = utf8_end_of_code_point_mask & 0xfff; - if(utf8_end_of_code_point_mask == 0xfff) { + if (utf8_end_of_code_point_mask == 0xfff) { // We process the data in chunks of 12 bytes. __m256i ascii = _mm256_cvtepu8_epi16(in); if (big_endian) { - const __m256i swap256 = _mm256_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, - 17, 16, 19, 18, 21, 20, 23, 22, 25, 24, 27, 26, 29, 28, 31, 30); + const __m256i swap256 = _mm256_setr_epi8( + 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, 17, 16, 19, 18, + 21, 20, 23, 22, 25, 24, 27, 26, 29, 28, 31, 30); ascii = _mm256_shuffle_epi8(ascii, swap256); } _mm256_storeu_si256(reinterpret_cast<__m256i *>(utf16_output), ascii); utf16_output += 12; // We wrote 12 16-bit characters. - return 12; // We consumed 12 bytes. + return 12; // We consumed 12 bytes. } - if(((utf8_end_of_code_point_mask & 0xffff) == 0xaaaa)) { - // We want to take 8 2-byte UTF-8 code units and turn them into 8 2-byte UTF-16 code units. - // There is probably a more efficient sequence, but the following might do. - const __m128i sh = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + if (((utf8_end_of_code_point_mask & 0xffff) == 0xaaaa)) { + // We want to take 8 2-byte UTF-8 code units and turn them into 8 2-byte + // UTF-16 code units. There is probably a more efficient sequence, but the + // following might do. + const __m128i sh = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); const __m128i perm = _mm_shuffle_epi8(in, sh); const __m128i ascii = _mm_and_si128(perm, _mm_set1_epi16(0x7f)); const __m128i highbyte = _mm_and_si128(perm, _mm_set1_epi16(0x1f00)); __m128i composed = _mm_or_si128(ascii, _mm_srli_epi16(highbyte, 2)); - if (big_endian) composed = _mm_shuffle_epi8(composed, swap); + if (big_endian) + composed = _mm_shuffle_epi8(composed, swap); _mm_storeu_si128((__m128i *)utf16_output, composed); utf16_output += 8; // We wrote 16 bytes, 8 code points. return 16; } - if(input_utf8_end_of_code_point_mask == 0x924) { - // We want to take 4 3-byte UTF-8 code units and turn them into 4 2-byte UTF-16 code units. - // There is probably a more efficient sequence, but the following might do. - const __m128i sh = _mm_setr_epi8(2, 1, 0, -1, 5, 4, 3, -1, 8, 7, 6, -1, 11, 10, 9, -1); + if (input_utf8_end_of_code_point_mask == 0x924) { + // We want to take 4 3-byte UTF-8 code units and turn them into 4 2-byte + // UTF-16 code units. There is probably a more efficient sequence, but the + // following might do. + const __m128i sh = + _mm_setr_epi8(2, 1, 0, -1, 5, 4, 3, -1, 8, 7, 6, -1, 11, 10, 9, -1); const __m128i perm = _mm_shuffle_epi8(in, sh); const __m128i ascii = _mm_and_si128(perm, _mm_set1_epi32(0x7f)); // 7 or 6 bits @@ -25019,35 +25639,39 @@ size_t convert_masked_utf8_to_utf16(const char *input, const __m128i composed = _mm_or_si128(_mm_or_si128(ascii, middlebyte_shifted), highbyte_shifted); __m128i composed_repacked = _mm_packus_epi32(composed, composed); - if (big_endian) composed_repacked = _mm_shuffle_epi8(composed_repacked, swap); + if (big_endian) + composed_repacked = _mm_shuffle_epi8(composed_repacked, swap); _mm_storeu_si128((__m128i *)utf16_output, composed_repacked); utf16_output += 4; return 12; } - const uint8_t idx = - simdutf::tables::utf8_to_utf16::utf8bigindex[input_utf8_end_of_code_point_mask][0]; - const uint8_t consumed = - simdutf::tables::utf8_to_utf16::utf8bigindex[input_utf8_end_of_code_point_mask][1]; + const uint8_t idx = simdutf::tables::utf8_to_utf16::utf8bigindex + [input_utf8_end_of_code_point_mask][0]; + const uint8_t consumed = simdutf::tables::utf8_to_utf16::utf8bigindex + [input_utf8_end_of_code_point_mask][1]; if (idx < 64) { // SIX (6) input code-code units // this is a relatively easy scenario - // we process SIX (6) input code-code units. The max length in bytes of six code - // code units spanning between 1 and 2 bytes each is 12 bytes. On processors - // where pdep/pext is fast, we might be able to use a small lookup table. - const __m128i sh = - _mm_loadu_si128((const __m128i *)simdutf::tables::utf8_to_utf16::shufutf8[idx]); + // we process SIX (6) input code-code units. The max length in bytes of six + // code code units spanning between 1 and 2 bytes each is 12 bytes. On + // processors where pdep/pext is fast, we might be able to use a small + // lookup table. + const __m128i sh = _mm_loadu_si128( + (const __m128i *)simdutf::tables::utf8_to_utf16::shufutf8[idx]); const __m128i perm = _mm_shuffle_epi8(in, sh); const __m128i ascii = _mm_and_si128(perm, _mm_set1_epi16(0x7f)); const __m128i highbyte = _mm_and_si128(perm, _mm_set1_epi16(0x1f00)); __m128i composed = _mm_or_si128(ascii, _mm_srli_epi16(highbyte, 2)); - if (big_endian) composed = _mm_shuffle_epi8(composed, swap); + if (big_endian) + composed = _mm_shuffle_epi8(composed, swap); _mm_storeu_si128((__m128i *)utf16_output, composed); - utf16_output += 6; // We wrote 12 bytes, 6 code points. There is a potential overflow of 4 bytes. + utf16_output += 6; // We wrote 12 bytes, 6 code points. There is a potential + // overflow of 4 bytes. } else if (idx < 145) { // FOUR (4) input code-code units - const __m128i sh = - _mm_loadu_si128((const __m128i *)simdutf::tables::utf8_to_utf16::shufutf8[idx]); + const __m128i sh = _mm_loadu_si128( + (const __m128i *)simdutf::tables::utf8_to_utf16::shufutf8[idx]); const __m128i perm = _mm_shuffle_epi8(in, sh); const __m128i ascii = _mm_and_si128(perm, _mm_set1_epi32(0x7f)); // 7 or 6 bits @@ -25060,21 +25684,23 @@ size_t convert_masked_utf8_to_utf16(const char *input, const __m128i composed = _mm_or_si128(_mm_or_si128(ascii, middlebyte_shifted), highbyte_shifted); __m128i composed_repacked = _mm_packus_epi32(composed, composed); - if (big_endian) composed_repacked = _mm_shuffle_epi8(composed_repacked, swap); + if (big_endian) + composed_repacked = _mm_shuffle_epi8(composed_repacked, swap); _mm_storeu_si128((__m128i *)utf16_output, composed_repacked); utf16_output += 4; // Here we overflow by 8 bytes. } else if (idx < 209) { // TWO (2) input code-code units ////////////// - // There might be garbage inputs where a leading byte mascarades as a four-byte - // leading byte (by being followed by 3 continuation byte), but is not greater than - // 0xf0. This could trigger a buffer overflow if we only counted leading - // bytes of the form 0xf0 as generating surrogate pairs, without further UTF-8 validation. - // Thus we must be careful to ensure that only leading bytes at least as large as 0xf0 generate surrogate pairs. - // We do as at the cost of an extra mask. + // There might be garbage inputs where a leading byte mascarades as a + // four-byte leading byte (by being followed by 3 continuation byte), but is + // not greater than 0xf0. This could trigger a buffer overflow if we only + // counted leading bytes of the form 0xf0 as generating surrogate pairs, + // without further UTF-8 validation. Thus we must be careful to ensure that + // only leading bytes at least as large as 0xf0 generate surrogate pairs. We + // do as at the cost of an extra mask. ///////////// - const __m128i sh = - _mm_loadu_si128((const __m128i *)simdutf::tables::utf8_to_utf16::shufutf8[idx]); + const __m128i sh = _mm_loadu_si128( + (const __m128i *)simdutf::tables::utf8_to_utf16::shufutf8[idx]); const __m128i perm = _mm_shuffle_epi8(in, sh); const __m128i ascii = _mm_and_si128(perm, _mm_set1_epi32(0x7f)); const __m128i middlebyte = _mm_and_si128(perm, _mm_set1_epi32(0x3f00)); @@ -25085,8 +25711,8 @@ size_t convert_masked_utf8_to_utf16(const char *input, _mm_srli_epi32(_mm_and_si128(perm, _mm_set1_epi32(0x400000)), 1); middlehighbyte = _mm_xor_si128(correct, middlehighbyte); const __m128i middlehighbyte_shifted = _mm_srli_epi32(middlehighbyte, 4); - // We deliberately carry the leading four bits in highbyte if they are present, - // we remove them later when computing hightenbits. + // We deliberately carry the leading four bits in highbyte if they are + // present, we remove them later when computing hightenbits. const __m128i highbyte = _mm_and_si128(perm, _mm_set1_epi32(0xff000000)); const __m128i highbyte_shifted = _mm_srli_epi32(highbyte, 6); // When we need to generate a surrogate pair (leading byte > 0xF0), then @@ -25101,30 +25727,32 @@ size_t convert_masked_utf8_to_utf16(const char *input, const __m128i lowtenbits = _mm_and_si128(composedminus, _mm_set1_epi32(0x3ff)); // Notice the 0x3ff mask: - const __m128i hightenbits = _mm_and_si128(_mm_srli_epi32(composedminus, 10), _mm_set1_epi32(0x3ff)); + const __m128i hightenbits = + _mm_and_si128(_mm_srli_epi32(composedminus, 10), _mm_set1_epi32(0x3ff)); const __m128i lowtenbitsadd = _mm_add_epi32(lowtenbits, _mm_set1_epi32(0xDC00)); const __m128i hightenbitsadd = _mm_add_epi32(hightenbits, _mm_set1_epi32(0xD800)); const __m128i lowtenbitsaddshifted = _mm_slli_epi32(lowtenbitsadd, 16); - __m128i surrogates = - _mm_or_si128(hightenbitsadd, lowtenbitsaddshifted); + __m128i surrogates = _mm_or_si128(hightenbitsadd, lowtenbitsaddshifted); uint32_t basic_buffer[4]; uint32_t basic_buffer_swap[4]; if (big_endian) { - _mm_storeu_si128((__m128i *)basic_buffer_swap, _mm_shuffle_epi8(composed, swap)); + _mm_storeu_si128((__m128i *)basic_buffer_swap, + _mm_shuffle_epi8(composed, swap)); surrogates = _mm_shuffle_epi8(surrogates, swap); } _mm_storeu_si128((__m128i *)basic_buffer, composed); uint32_t surrogate_buffer[4]; _mm_storeu_si128((__m128i *)surrogate_buffer, surrogates); for (size_t i = 0; i < 3; i++) { - if(basic_buffer[i] > 0x3c00000) { + if (basic_buffer[i] > 0x3c00000) { utf16_output[0] = uint16_t(surrogate_buffer[i] & 0xffff); utf16_output[1] = uint16_t(surrogate_buffer[i] >> 16); utf16_output += 2; - } else { - utf16_output[0] = big_endian ? uint16_t(basic_buffer_swap[i]) : uint16_t(basic_buffer[i]); + } else { + utf16_output[0] = big_endian ? uint16_t(basic_buffer_swap[i]) + : uint16_t(basic_buffer[i]); utf16_output++; } } @@ -25137,50 +25765,57 @@ size_t convert_masked_utf8_to_utf16(const char *input, /* begin file src/haswell/avx2_convert_utf8_to_utf32.cpp */ // depends on "tables/utf8_to_utf16_tables.h" - // Convert up to 12 bytes from utf8 to utf32 using a mask indicating the // end of the code points. Only the least significant 12 bits of the mask // are accessed. // It returns how many bytes were consumed (up to 12). size_t convert_masked_utf8_to_utf32(const char *input, - uint64_t utf8_end_of_code_point_mask, - char32_t *&utf32_output) { + uint64_t utf8_end_of_code_point_mask, + char32_t *&utf32_output) { // we use an approach where we try to process up to 12 input bytes. // Why 12 input bytes and not 16? Because we are concerned with the size of // the lookup tables. Also 12 is nicely divisible by two and three. // // - // Optimization note: our main path below is load-latency dependent. Thus it is maybe - // beneficial to have fast paths that depend on branch prediction but have less latency. - // This results in more instructions but, potentially, also higher speeds. + // Optimization note: our main path below is load-latency dependent. Thus it + // is maybe beneficial to have fast paths that depend on branch prediction but + // have less latency. This results in more instructions but, potentially, also + // higher speeds. // // We first try a few fast paths. const __m128i in = _mm_loadu_si128((__m128i *)input); const uint16_t input_utf8_end_of_code_point_mask = utf8_end_of_code_point_mask & 0xfff; - if(utf8_end_of_code_point_mask == 0xfff) { + if (utf8_end_of_code_point_mask == 0xfff) { // We process the data in chunks of 12 bytes. - _mm256_storeu_si256(reinterpret_cast<__m256i *>(utf32_output), _mm256_cvtepu8_epi32(in)); - _mm256_storeu_si256(reinterpret_cast<__m256i *>(utf32_output+8), _mm256_cvtepu8_epi32(_mm_srli_si128(in,8))); + _mm256_storeu_si256(reinterpret_cast<__m256i *>(utf32_output), + _mm256_cvtepu8_epi32(in)); + _mm256_storeu_si256(reinterpret_cast<__m256i *>(utf32_output + 8), + _mm256_cvtepu8_epi32(_mm_srli_si128(in, 8))); utf32_output += 12; // We wrote 12 32-bit characters. - return 12; // We consumed 12 bytes. + return 12; // We consumed 12 bytes. } - if(((utf8_end_of_code_point_mask & 0xffff) == 0xaaaa)) { - // We want to take 8 2-byte UTF-8 code units and turn them into 8 4-byte UTF-32 code units. - // There is probably a more efficient sequence, but the following might do. - const __m128i sh = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + if (((utf8_end_of_code_point_mask & 0xffff) == 0xaaaa)) { + // We want to take 8 2-byte UTF-8 code units and turn them into 8 4-byte + // UTF-32 code units. There is probably a more efficient sequence, but the + // following might do. + const __m128i sh = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); const __m128i perm = _mm_shuffle_epi8(in, sh); const __m128i ascii = _mm_and_si128(perm, _mm_set1_epi16(0x7f)); const __m128i highbyte = _mm_and_si128(perm, _mm_set1_epi16(0x1f00)); const __m128i composed = _mm_or_si128(ascii, _mm_srli_epi16(highbyte, 2)); - _mm256_storeu_si256((__m256i *)utf32_output, _mm256_cvtepu16_epi32(composed)); + _mm256_storeu_si256((__m256i *)utf32_output, + _mm256_cvtepu16_epi32(composed)); utf32_output += 8; // We wrote 16 bytes, 8 code points. return 16; } - if(input_utf8_end_of_code_point_mask == 0x924) { - // We want to take 4 3-byte UTF-8 code units and turn them into 4 4-byte UTF-32 code units. - // There is probably a more efficient sequence, but the following might do. - const __m128i sh = _mm_setr_epi8(2, 1, 0, -1, 5, 4, 3, -1, 8, 7, 6, -1, 11, 10, 9, -1); + if (input_utf8_end_of_code_point_mask == 0x924) { + // We want to take 4 3-byte UTF-8 code units and turn them into 4 4-byte + // UTF-32 code units. There is probably a more efficient sequence, but the + // following might do. + const __m128i sh = + _mm_setr_epi8(2, 1, 0, -1, 5, 4, 3, -1, 8, 7, 6, -1, 11, 10, 9, -1); const __m128i perm = _mm_shuffle_epi8(in, sh); const __m128i ascii = _mm_and_si128(perm, _mm_set1_epi32(0x7f)); // 7 or 6 bits @@ -25205,16 +25840,18 @@ size_t convert_masked_utf8_to_utf32(const char *input, if (idx < 64) { // SIX (6) input code-code units // this is a relatively easy scenario - // we process SIX (6) input code-code units. The max length in bytes of six code - // code units spanning between 1 and 2 bytes each is 12 bytes. On processors - // where pdep/pext is fast, we might be able to use a small lookup table. + // we process SIX (6) input code-code units. The max length in bytes of six + // code code units spanning between 1 and 2 bytes each is 12 bytes. On + // processors where pdep/pext is fast, we might be able to use a small + // lookup table. const __m128i sh = _mm_loadu_si128((const __m128i *)tables::utf8_to_utf16::shufutf8[idx]); const __m128i perm = _mm_shuffle_epi8(in, sh); const __m128i ascii = _mm_and_si128(perm, _mm_set1_epi16(0x7f)); const __m128i highbyte = _mm_and_si128(perm, _mm_set1_epi16(0x1f00)); const __m128i composed = _mm_or_si128(ascii, _mm_srli_epi16(highbyte, 2)); - _mm256_storeu_si256((__m256i *)utf32_output, _mm256_cvtepu16_epi32(composed)); + _mm256_storeu_si256((__m256i *)utf32_output, + _mm256_cvtepu16_epi32(composed)); utf32_output += 6; // We wrote 24 bytes, 6 code points. There is a potential // overflow of 32 - 24 = 8 bytes. } else if (idx < 145) { @@ -25254,7 +25891,8 @@ size_t convert_masked_utf8_to_utf32(const char *input, _mm_or_si128(_mm_or_si128(ascii, middlebyte_shifted), _mm_or_si128(highbyte_shifted, middlehighbyte_shifted)); _mm_storeu_si128((__m128i *)utf32_output, composed); - utf32_output += 3; // We wrote 3 * 4 bytes, there is a potential overflow of 4 bytes. + utf32_output += + 3; // We wrote 3 * 4 bytes, there is a potential overflow of 4 bytes. } else { // here we know that there is an error but we do not handle errors } @@ -25399,236 +26037,270 @@ avx2_convert_utf16_to_latin1_with_errors(const char16_t *buf, size_t len, - We need two 256-entry tables that have 8704 bytes in total. */ - /* Returns a pair: the first unprocessed byte from buf and utf8_output A scalar routing should carry on the conversion of the tail. */ template -std::pair avx2_convert_utf16_to_utf8(const char16_t* buf, size_t len, char* utf8_output) { - const char16_t* end = buf + len; +std::pair +avx2_convert_utf16_to_utf8(const char16_t *buf, size_t len, char *utf8_output) { + const char16_t *end = buf + len; const __m256i v_0000 = _mm256_setzero_si256(); const __m256i v_f800 = _mm256_set1_epi16((int16_t)0xf800); const __m256i v_d800 = _mm256_set1_epi16((int16_t)0xd800); const __m256i v_c080 = _mm256_set1_epi16((int16_t)0xc080); - const size_t safety_margin = 12; // to avoid overruns, see issue https://github.com/simdutf/simdutf/issues/92 + const size_t safety_margin = + 12; // to avoid overruns, see issue + // https://github.com/simdutf/simdutf/issues/92 - while (end - buf >= std::ptrdiff_t(16 + safety_margin)) { - __m256i in = _mm256_loadu_si256((__m256i*)buf); + while (end - buf >= std::ptrdiff_t(16 + safety_margin)) { + __m256i in = _mm256_loadu_si256((__m256i *)buf); if (big_endian) { - const __m256i swap = _mm256_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, - 17, 16, 19, 18, 21, 20, 23, 22, 25, 24, 27, 26, 29, 28, 31, 30); + const __m256i swap = _mm256_setr_epi8( + 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, 17, 16, 19, 18, + 21, 20, 23, 22, 25, 24, 27, 26, 29, 28, 31, 30); in = _mm256_shuffle_epi8(in, swap); } // a single 16-bit UTF-16 word can yield 1, 2 or 3 UTF-8 bytes const __m256i v_ff80 = _mm256_set1_epi16((int16_t)0xff80); - if(_mm256_testz_si256(in, v_ff80)) { // ASCII fast path!!!! - // 1. pack the bytes - const __m128i utf8_packed = _mm_packus_epi16(_mm256_castsi256_si128(in),_mm256_extractf128_si256(in,1)); - // 2. store (16 bytes) - _mm_storeu_si128((__m128i*)utf8_output, utf8_packed); - // 3. adjust pointers - buf += 16; - utf8_output += 16; - continue; // we are done for this round! + if (_mm256_testz_si256(in, v_ff80)) { // ASCII fast path!!!! + // 1. pack the bytes + const __m128i utf8_packed = _mm_packus_epi16( + _mm256_castsi256_si128(in), _mm256_extractf128_si256(in, 1)); + // 2. store (16 bytes) + _mm_storeu_si128((__m128i *)utf8_output, utf8_packed); + // 3. adjust pointers + buf += 16; + utf8_output += 16; + continue; // we are done for this round! } // no bits set above 7th bit - const __m256i one_byte_bytemask = _mm256_cmpeq_epi16(_mm256_and_si256(in, v_ff80), v_0000); - const uint32_t one_byte_bitmask = static_cast(_mm256_movemask_epi8(one_byte_bytemask)); + const __m256i one_byte_bytemask = + _mm256_cmpeq_epi16(_mm256_and_si256(in, v_ff80), v_0000); + const uint32_t one_byte_bitmask = + static_cast(_mm256_movemask_epi8(one_byte_bytemask)); // no bits set above 11th bit - const __m256i one_or_two_bytes_bytemask = _mm256_cmpeq_epi16(_mm256_and_si256(in, v_f800), v_0000); - const uint32_t one_or_two_bytes_bitmask = static_cast(_mm256_movemask_epi8(one_or_two_bytes_bytemask)); + const __m256i one_or_two_bytes_bytemask = + _mm256_cmpeq_epi16(_mm256_and_si256(in, v_f800), v_0000); + const uint32_t one_or_two_bytes_bitmask = + static_cast(_mm256_movemask_epi8(one_or_two_bytes_bytemask)); if (one_or_two_bytes_bitmask == 0xffffffff) { - // 1. prepare 2-byte values - // input 16-bit word : [0000|0aaa|aabb|bbbb] x 8 - // expected output : [110a|aaaa|10bb|bbbb] x 8 - const __m256i v_1f00 = _mm256_set1_epi16((int16_t)0x1f00); - const __m256i v_003f = _mm256_set1_epi16((int16_t)0x003f); - - // t0 = [000a|aaaa|bbbb|bb00] - const __m256i t0 = _mm256_slli_epi16(in, 2); - // t1 = [000a|aaaa|0000|0000] - const __m256i t1 = _mm256_and_si256(t0, v_1f00); - // t2 = [0000|0000|00bb|bbbb] - const __m256i t2 = _mm256_and_si256(in, v_003f); - // t3 = [000a|aaaa|00bb|bbbb] - const __m256i t3 = _mm256_or_si256(t1, t2); - // t4 = [110a|aaaa|10bb|bbbb] - const __m256i t4 = _mm256_or_si256(t3, v_c080); - - // 2. merge ASCII and 2-byte codewords - const __m256i utf8_unpacked = _mm256_blendv_epi8(t4, in, one_byte_bytemask); - - // 3. prepare bitmask for 8-bit lookup - const uint32_t M0 = one_byte_bitmask & 0x55555555; - const uint32_t M1 = M0 >> 7; - const uint32_t M2 = (M1 | M0) & 0x00ff00ff; - // 4. pack the bytes - - const uint8_t* row = &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2)][0]; - const uint8_t* row_2 = &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2>>16)][0]; - - const __m128i shuffle = _mm_loadu_si128((__m128i*)(row + 1)); - const __m128i shuffle_2 = _mm_loadu_si128((__m128i*)(row_2 + 1)); - - const __m256i utf8_packed = _mm256_shuffle_epi8(utf8_unpacked, _mm256_setr_m128i(shuffle,shuffle_2)); - // 5. store bytes - _mm_storeu_si128((__m128i*)utf8_output, _mm256_castsi256_si128(utf8_packed)); - utf8_output += row[0]; - _mm_storeu_si128((__m128i*)utf8_output, _mm256_extractf128_si256(utf8_packed,1)); - utf8_output += row_2[0]; - - // 6. adjust pointers - buf += 16; - continue; + // 1. prepare 2-byte values + // input 16-bit word : [0000|0aaa|aabb|bbbb] x 8 + // expected output : [110a|aaaa|10bb|bbbb] x 8 + const __m256i v_1f00 = _mm256_set1_epi16((int16_t)0x1f00); + const __m256i v_003f = _mm256_set1_epi16((int16_t)0x003f); + + // t0 = [000a|aaaa|bbbb|bb00] + const __m256i t0 = _mm256_slli_epi16(in, 2); + // t1 = [000a|aaaa|0000|0000] + const __m256i t1 = _mm256_and_si256(t0, v_1f00); + // t2 = [0000|0000|00bb|bbbb] + const __m256i t2 = _mm256_and_si256(in, v_003f); + // t3 = [000a|aaaa|00bb|bbbb] + const __m256i t3 = _mm256_or_si256(t1, t2); + // t4 = [110a|aaaa|10bb|bbbb] + const __m256i t4 = _mm256_or_si256(t3, v_c080); + + // 2. merge ASCII and 2-byte codewords + const __m256i utf8_unpacked = + _mm256_blendv_epi8(t4, in, one_byte_bytemask); + + // 3. prepare bitmask for 8-bit lookup + const uint32_t M0 = one_byte_bitmask & 0x55555555; + const uint32_t M1 = M0 >> 7; + const uint32_t M2 = (M1 | M0) & 0x00ff00ff; + // 4. pack the bytes + + const uint8_t *row = + &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2)][0]; + const uint8_t *row_2 = + &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2 >> + 16)][0]; + + const __m128i shuffle = _mm_loadu_si128((__m128i *)(row + 1)); + const __m128i shuffle_2 = _mm_loadu_si128((__m128i *)(row_2 + 1)); + + const __m256i utf8_packed = _mm256_shuffle_epi8( + utf8_unpacked, _mm256_setr_m128i(shuffle, shuffle_2)); + // 5. store bytes + _mm_storeu_si128((__m128i *)utf8_output, + _mm256_castsi256_si128(utf8_packed)); + utf8_output += row[0]; + _mm_storeu_si128((__m128i *)utf8_output, + _mm256_extractf128_si256(utf8_packed, 1)); + utf8_output += row_2[0]; + + // 6. adjust pointers + buf += 16; + continue; } // 1. Check if there are any surrogate word in the input chunk. // We have also deal with situation when there is a surrogate word // at the end of a chunk. - const __m256i surrogates_bytemask = _mm256_cmpeq_epi16(_mm256_and_si256(in, v_f800), v_d800); + const __m256i surrogates_bytemask = + _mm256_cmpeq_epi16(_mm256_and_si256(in, v_f800), v_d800); // bitmask = 0x0000 if there are no surrogates // = 0xc000 if the last word is a surrogate - const uint32_t surrogates_bitmask = static_cast(_mm256_movemask_epi8(surrogates_bytemask)); - // It might seem like checking for surrogates_bitmask == 0xc000 could help. However, - // it is likely an uncommon occurrence. + const uint32_t surrogates_bitmask = + static_cast(_mm256_movemask_epi8(surrogates_bytemask)); + // It might seem like checking for surrogates_bitmask == 0xc000 could help. + // However, it is likely an uncommon occurrence. if (surrogates_bitmask == 0x00000000) { // case: code units from register produce either 1, 2 or 3 UTF-8 bytes - const __m256i dup_even = _mm256_setr_epi16(0x0000, 0x0202, 0x0404, 0x0606, - 0x0808, 0x0a0a, 0x0c0c, 0x0e0e, - 0x0000, 0x0202, 0x0404, 0x0606, - 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); + const __m256i dup_even = _mm256_setr_epi16( + 0x0000, 0x0202, 0x0404, 0x0606, 0x0808, 0x0a0a, 0x0c0c, 0x0e0e, + 0x0000, 0x0202, 0x0404, 0x0606, 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); - /* In this branch we handle three cases: - 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - single UFT-8 byte - 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two UTF-8 bytes - 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - three UTF-8 bytes + /* In this branch we handle three cases: + 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - + single UFT-8 byte + 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two + UTF-8 bytes + 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - + three UTF-8 bytes - We expand the input word (16-bit) into two code units (32-bit), thus - we have room for four bytes. However, we need five distinct bit - layouts. Note that the last byte in cases #2 and #3 is the same. + We expand the input word (16-bit) into two code units (32-bit), thus + we have room for four bytes. However, we need five distinct bit + layouts. Note that the last byte in cases #2 and #3 is the same. - We precompute byte 1 for case #1 and the common byte for cases #2 & #3 - in register t2. + We precompute byte 1 for case #1 and the common byte for cases #2 & #3 + in register t2. - We precompute byte 1 for case #3 and -- **conditionally** -- precompute - either byte 1 for case #2 or byte 2 for case #3. Note that they - differ by exactly one bit. + We precompute byte 1 for case #3 and -- **conditionally** -- precompute + either byte 1 for case #2 or byte 2 for case #3. Note that they + differ by exactly one bit. - Finally from these two code units we build proper UTF-8 sequence, taking - into account the case (i.e, the number of bytes to write). - */ - /** - * Given [aaaa|bbbb|bbcc|cccc] our goal is to produce: - * t2 => [0ccc|cccc] [10cc|cccc] - * s4 => [1110|aaaa] ([110b|bbbb] OR [10bb|bbbb]) - */ + Finally from these two code units we build proper UTF-8 sequence, taking + into account the case (i.e, the number of bytes to write). + */ + /** + * Given [aaaa|bbbb|bbcc|cccc] our goal is to produce: + * t2 => [0ccc|cccc] [10cc|cccc] + * s4 => [1110|aaaa] ([110b|bbbb] OR [10bb|bbbb]) + */ #define simdutf_vec(x) _mm256_set1_epi16(static_cast(x)) - // [aaaa|bbbb|bbcc|cccc] => [bbcc|cccc|bbcc|cccc] - const __m256i t0 = _mm256_shuffle_epi8(in, dup_even); - // [bbcc|cccc|bbcc|cccc] => [00cc|cccc|0bcc|cccc] - const __m256i t1 = _mm256_and_si256(t0, simdutf_vec(0b0011111101111111)); - // [00cc|cccc|0bcc|cccc] => [10cc|cccc|0bcc|cccc] - const __m256i t2 = _mm256_or_si256 (t1, simdutf_vec(0b1000000000000000)); - - // [aaaa|bbbb|bbcc|cccc] => [0000|aaaa|bbbb|bbcc] - const __m256i s0 = _mm256_srli_epi16(in, 4); - // [0000|aaaa|bbbb|bbcc] => [0000|aaaa|bbbb|bb00] - const __m256i s1 = _mm256_and_si256(s0, simdutf_vec(0b0000111111111100)); - // [0000|aaaa|bbbb|bb00] => [00bb|bbbb|0000|aaaa] - const __m256i s2 = _mm256_maddubs_epi16(s1, simdutf_vec(0x0140)); - // [00bb|bbbb|0000|aaaa] => [11bb|bbbb|1110|aaaa] - const __m256i s3 = _mm256_or_si256(s2, simdutf_vec(0b1100000011100000)); - const __m256i m0 = _mm256_andnot_si256(one_or_two_bytes_bytemask, simdutf_vec(0b0100000000000000)); - const __m256i s4 = _mm256_xor_si256(s3, m0); -#undef simdutf_vec + // [aaaa|bbbb|bbcc|cccc] => [bbcc|cccc|bbcc|cccc] + const __m256i t0 = _mm256_shuffle_epi8(in, dup_even); + // [bbcc|cccc|bbcc|cccc] => [00cc|cccc|0bcc|cccc] + const __m256i t1 = _mm256_and_si256(t0, simdutf_vec(0b0011111101111111)); + // [00cc|cccc|0bcc|cccc] => [10cc|cccc|0bcc|cccc] + const __m256i t2 = _mm256_or_si256(t1, simdutf_vec(0b1000000000000000)); - // 4. expand code units 16-bit => 32-bit - const __m256i out0 = _mm256_unpacklo_epi16(t2, s4); - const __m256i out1 = _mm256_unpackhi_epi16(t2, s4); + // [aaaa|bbbb|bbcc|cccc] => [0000|aaaa|bbbb|bbcc] + const __m256i s0 = _mm256_srli_epi16(in, 4); + // [0000|aaaa|bbbb|bbcc] => [0000|aaaa|bbbb|bb00] + const __m256i s1 = _mm256_and_si256(s0, simdutf_vec(0b0000111111111100)); + // [0000|aaaa|bbbb|bb00] => [00bb|bbbb|0000|aaaa] + const __m256i s2 = _mm256_maddubs_epi16(s1, simdutf_vec(0x0140)); + // [00bb|bbbb|0000|aaaa] => [11bb|bbbb|1110|aaaa] + const __m256i s3 = _mm256_or_si256(s2, simdutf_vec(0b1100000011100000)); + const __m256i m0 = _mm256_andnot_si256(one_or_two_bytes_bytemask, + simdutf_vec(0b0100000000000000)); + const __m256i s4 = _mm256_xor_si256(s3, m0); +#undef simdutf_vec - // 5. compress 32-bit code units into 1, 2 or 3 bytes -- 2 x shuffle - const uint32_t mask = (one_byte_bitmask & 0x55555555) | - (one_or_two_bytes_bitmask & 0xaaaaaaaa); - // Due to the wider registers, the following path is less likely to be useful. - /*if(mask == 0) { - // We only have three-byte code units. Use fast path. - const __m256i shuffle = _mm256_setr_epi8(2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1, 2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1); - const __m256i utf8_0 = _mm256_shuffle_epi8(out0, shuffle); - const __m256i utf8_1 = _mm256_shuffle_epi8(out1, shuffle); - _mm_storeu_si128((__m128i*)utf8_output, _mm256_castsi256_si128(utf8_0)); - utf8_output += 12; - _mm_storeu_si128((__m128i*)utf8_output, _mm256_castsi256_si128(utf8_1)); - utf8_output += 12; - _mm_storeu_si128((__m128i*)utf8_output, _mm256_extractf128_si256(utf8_0,1)); - utf8_output += 12; - _mm_storeu_si128((__m128i*)utf8_output, _mm256_extractf128_si256(utf8_1,1)); - utf8_output += 12; - buf += 16; - continue; - }*/ - const uint8_t mask0 = uint8_t(mask); - const uint8_t* row0 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; - const __m128i shuffle0 = _mm_loadu_si128((__m128i*)(row0 + 1)); - const __m128i utf8_0 = _mm_shuffle_epi8(_mm256_castsi256_si128(out0), shuffle0); + // 4. expand code units 16-bit => 32-bit + const __m256i out0 = _mm256_unpacklo_epi16(t2, s4); + const __m256i out1 = _mm256_unpackhi_epi16(t2, s4); - const uint8_t mask1 = static_cast(mask >> 8); - const uint8_t* row1 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; - const __m128i shuffle1 = _mm_loadu_si128((__m128i*)(row1 + 1)); - const __m128i utf8_1 = _mm_shuffle_epi8(_mm256_castsi256_si128(out1), shuffle1); + // 5. compress 32-bit code units into 1, 2 or 3 bytes -- 2 x shuffle + const uint32_t mask = (one_byte_bitmask & 0x55555555) | + (one_or_two_bytes_bitmask & 0xaaaaaaaa); + // Due to the wider registers, the following path is less likely to be + // useful. + /*if(mask == 0) { + // We only have three-byte code units. Use fast path. + const __m256i shuffle = + _mm256_setr_epi8(2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1, + 2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1); const __m256i utf8_0 = + _mm256_shuffle_epi8(out0, shuffle); const __m256i utf8_1 = + _mm256_shuffle_epi8(out1, shuffle); + _mm_storeu_si128((__m128i*)utf8_output, _mm256_castsi256_si128(utf8_0)); + utf8_output += 12; + _mm_storeu_si128((__m128i*)utf8_output, _mm256_castsi256_si128(utf8_1)); + utf8_output += 12; + _mm_storeu_si128((__m128i*)utf8_output, + _mm256_extractf128_si256(utf8_0,1)); utf8_output += 12; + _mm_storeu_si128((__m128i*)utf8_output, + _mm256_extractf128_si256(utf8_1,1)); utf8_output += 12; buf += 16; + continue; + }*/ + const uint8_t mask0 = uint8_t(mask); + const uint8_t *row0 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; + const __m128i shuffle0 = _mm_loadu_si128((__m128i *)(row0 + 1)); + const __m128i utf8_0 = + _mm_shuffle_epi8(_mm256_castsi256_si128(out0), shuffle0); - const uint8_t mask2 = static_cast(mask >> 16); - const uint8_t* row2 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask2][0]; - const __m128i shuffle2 = _mm_loadu_si128((__m128i*)(row2 + 1)); - const __m128i utf8_2 = _mm_shuffle_epi8(_mm256_extractf128_si256(out0,1), shuffle2); + const uint8_t mask1 = static_cast(mask >> 8); + const uint8_t *row1 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; + const __m128i shuffle1 = _mm_loadu_si128((__m128i *)(row1 + 1)); + const __m128i utf8_1 = + _mm_shuffle_epi8(_mm256_castsi256_si128(out1), shuffle1); + const uint8_t mask2 = static_cast(mask >> 16); + const uint8_t *row2 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask2][0]; + const __m128i shuffle2 = _mm_loadu_si128((__m128i *)(row2 + 1)); + const __m128i utf8_2 = + _mm_shuffle_epi8(_mm256_extractf128_si256(out0, 1), shuffle2); - const uint8_t mask3 = static_cast(mask >> 24); - const uint8_t* row3 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask3][0]; - const __m128i shuffle3 = _mm_loadu_si128((__m128i*)(row3 + 1)); - const __m128i utf8_3 = _mm_shuffle_epi8(_mm256_extractf128_si256(out1,1), shuffle3); + const uint8_t mask3 = static_cast(mask >> 24); + const uint8_t *row3 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask3][0]; + const __m128i shuffle3 = _mm_loadu_si128((__m128i *)(row3 + 1)); + const __m128i utf8_3 = + _mm_shuffle_epi8(_mm256_extractf128_si256(out1, 1), shuffle3); - _mm_storeu_si128((__m128i*)utf8_output, utf8_0); - utf8_output += row0[0]; - _mm_storeu_si128((__m128i*)utf8_output, utf8_1); - utf8_output += row1[0]; - _mm_storeu_si128((__m128i*)utf8_output, utf8_2); - utf8_output += row2[0]; - _mm_storeu_si128((__m128i*)utf8_output, utf8_3); - utf8_output += row3[0]; - buf += 16; - // surrogate pair(s) in a register + _mm_storeu_si128((__m128i *)utf8_output, utf8_0); + utf8_output += row0[0]; + _mm_storeu_si128((__m128i *)utf8_output, utf8_1); + utf8_output += row1[0]; + _mm_storeu_si128((__m128i *)utf8_output, utf8_2); + utf8_output += row2[0]; + _mm_storeu_si128((__m128i *)utf8_output, utf8_3); + utf8_output += row3[0]; + buf += 16; + // surrogate pair(s) in a register } else { // Let us do a scalar fallback. // It may seem wasteful to use scalar code, but being efficient with SIMD // in the presence of surrogate pairs may require non-trivial tables. size_t forward = 15; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { uint16_t word = big_endian ? scalar::utf16::swap_bytes(buf[k]) : buf[k]; - if((word & 0xFF80)==0) { + if ((word & 0xFF80) == 0) { *utf8_output++ = char(word); - } else if((word & 0xF800)==0) { - *utf8_output++ = char((word>>6) | 0b11000000); + } else if ((word & 0xF800) == 0) { + *utf8_output++ = char((word >> 6) | 0b11000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); - } else if((word &0xF800 ) != 0xD800) { - *utf8_output++ = char((word>>12) | 0b11100000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + } else if ((word & 0xF800) != 0xD800) { + *utf8_output++ = char((word >> 12) | 0b11100000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); } else { // must be a surrogate pair uint16_t diff = uint16_t(word - 0xD800); - uint16_t next_word = big_endian ? scalar::utf16::swap_bytes(buf[k+1]) : buf[k+1]; + uint16_t next_word = + big_endian ? scalar::utf16::swap_bytes(buf[k + 1]) : buf[k + 1]; k++; uint16_t diff2 = uint16_t(next_word - 0xDC00); - if((diff | diff2) > 0x3FF) { return std::make_pair(nullptr, utf8_output); } + if ((diff | diff2) > 0x3FF) { + return std::make_pair(nullptr, utf8_output); + } uint32_t value = (diff << 10) + diff2 + 0x10000; - *utf8_output++ = char((value>>18) | 0b11110000); - *utf8_output++ = char(((value>>12) & 0b111111) | 0b10000000); - *utf8_output++ = char(((value>>6) & 0b111111) | 0b10000000); + *utf8_output++ = char((value >> 18) | 0b11110000); + *utf8_output++ = char(((value >> 12) & 0b111111) | 0b10000000); + *utf8_output++ = char(((value >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((value & 0b111111) | 0b10000000); } } @@ -25638,240 +26310,278 @@ std::pair avx2_convert_utf16_to_utf8(const char16_t* buf return std::make_pair(buf, utf8_output); } - /* Returns a pair: a result struct and utf8_output. - If there is an error, the count field of the result is the position of the error. - Otherwise, it is the position of the first unprocessed byte in buf (even if finished). - A scalar routing should carry on the conversion of the tail if needed. + If there is an error, the count field of the result is the position of the + error. Otherwise, it is the position of the first unprocessed byte in buf + (even if finished). A scalar routing should carry on the conversion of the + tail if needed. */ template -std::pair avx2_convert_utf16_to_utf8_with_errors(const char16_t* buf, size_t len, char* utf8_output) { - const char16_t* start = buf; - const char16_t* end = buf + len; +std::pair +avx2_convert_utf16_to_utf8_with_errors(const char16_t *buf, size_t len, + char *utf8_output) { + const char16_t *start = buf; + const char16_t *end = buf + len; const __m256i v_0000 = _mm256_setzero_si256(); const __m256i v_f800 = _mm256_set1_epi16((int16_t)0xf800); const __m256i v_d800 = _mm256_set1_epi16((int16_t)0xd800); const __m256i v_c080 = _mm256_set1_epi16((int16_t)0xc080); - const size_t safety_margin = 12; // to avoid overruns, see issue https://github.com/simdutf/simdutf/issues/92 + const size_t safety_margin = + 12; // to avoid overruns, see issue + // https://github.com/simdutf/simdutf/issues/92 while (end - buf >= std::ptrdiff_t(16 + safety_margin)) { - __m256i in = _mm256_loadu_si256((__m256i*)buf); + __m256i in = _mm256_loadu_si256((__m256i *)buf); if (big_endian) { - const __m256i swap = _mm256_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, - 17, 16, 19, 18, 21, 20, 23, 22, 25, 24, 27, 26, 29, 28, 31, 30); + const __m256i swap = _mm256_setr_epi8( + 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, 17, 16, 19, 18, + 21, 20, 23, 22, 25, 24, 27, 26, 29, 28, 31, 30); in = _mm256_shuffle_epi8(in, swap); } // a single 16-bit UTF-16 word can yield 1, 2 or 3 UTF-8 bytes const __m256i v_ff80 = _mm256_set1_epi16((int16_t)0xff80); - if(_mm256_testz_si256(in, v_ff80)) { // ASCII fast path!!!! - // 1. pack the bytes - const __m128i utf8_packed = _mm_packus_epi16(_mm256_castsi256_si128(in),_mm256_extractf128_si256(in,1)); - // 2. store (16 bytes) - _mm_storeu_si128((__m128i*)utf8_output, utf8_packed); - // 3. adjust pointers - buf += 16; - utf8_output += 16; - continue; // we are done for this round! + if (_mm256_testz_si256(in, v_ff80)) { // ASCII fast path!!!! + // 1. pack the bytes + const __m128i utf8_packed = _mm_packus_epi16( + _mm256_castsi256_si128(in), _mm256_extractf128_si256(in, 1)); + // 2. store (16 bytes) + _mm_storeu_si128((__m128i *)utf8_output, utf8_packed); + // 3. adjust pointers + buf += 16; + utf8_output += 16; + continue; // we are done for this round! } // no bits set above 7th bit - const __m256i one_byte_bytemask = _mm256_cmpeq_epi16(_mm256_and_si256(in, v_ff80), v_0000); - const uint32_t one_byte_bitmask = static_cast(_mm256_movemask_epi8(one_byte_bytemask)); + const __m256i one_byte_bytemask = + _mm256_cmpeq_epi16(_mm256_and_si256(in, v_ff80), v_0000); + const uint32_t one_byte_bitmask = + static_cast(_mm256_movemask_epi8(one_byte_bytemask)); // no bits set above 11th bit - const __m256i one_or_two_bytes_bytemask = _mm256_cmpeq_epi16(_mm256_and_si256(in, v_f800), v_0000); - const uint32_t one_or_two_bytes_bitmask = static_cast(_mm256_movemask_epi8(one_or_two_bytes_bytemask)); + const __m256i one_or_two_bytes_bytemask = + _mm256_cmpeq_epi16(_mm256_and_si256(in, v_f800), v_0000); + const uint32_t one_or_two_bytes_bitmask = + static_cast(_mm256_movemask_epi8(one_or_two_bytes_bytemask)); if (one_or_two_bytes_bitmask == 0xffffffff) { - // 1. prepare 2-byte values - // input 16-bit word : [0000|0aaa|aabb|bbbb] x 8 - // expected output : [110a|aaaa|10bb|bbbb] x 8 - const __m256i v_1f00 = _mm256_set1_epi16((int16_t)0x1f00); - const __m256i v_003f = _mm256_set1_epi16((int16_t)0x003f); - - // t0 = [000a|aaaa|bbbb|bb00] - const __m256i t0 = _mm256_slli_epi16(in, 2); - // t1 = [000a|aaaa|0000|0000] - const __m256i t1 = _mm256_and_si256(t0, v_1f00); - // t2 = [0000|0000|00bb|bbbb] - const __m256i t2 = _mm256_and_si256(in, v_003f); - // t3 = [000a|aaaa|00bb|bbbb] - const __m256i t3 = _mm256_or_si256(t1, t2); - // t4 = [110a|aaaa|10bb|bbbb] - const __m256i t4 = _mm256_or_si256(t3, v_c080); - - // 2. merge ASCII and 2-byte codewords - const __m256i utf8_unpacked = _mm256_blendv_epi8(t4, in, one_byte_bytemask); - - // 3. prepare bitmask for 8-bit lookup - const uint32_t M0 = one_byte_bitmask & 0x55555555; - const uint32_t M1 = M0 >> 7; - const uint32_t M2 = (M1 | M0) & 0x00ff00ff; - // 4. pack the bytes - - const uint8_t* row = &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2)][0]; - const uint8_t* row_2 = &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2>>16)][0]; - - const __m128i shuffle = _mm_loadu_si128((__m128i*)(row + 1)); - const __m128i shuffle_2 = _mm_loadu_si128((__m128i*)(row_2 + 1)); - - const __m256i utf8_packed = _mm256_shuffle_epi8(utf8_unpacked, _mm256_setr_m128i(shuffle,shuffle_2)); - // 5. store bytes - _mm_storeu_si128((__m128i*)utf8_output, _mm256_castsi256_si128(utf8_packed)); - utf8_output += row[0]; - _mm_storeu_si128((__m128i*)utf8_output, _mm256_extractf128_si256(utf8_packed,1)); - utf8_output += row_2[0]; - - // 6. adjust pointers - buf += 16; - continue; + // 1. prepare 2-byte values + // input 16-bit word : [0000|0aaa|aabb|bbbb] x 8 + // expected output : [110a|aaaa|10bb|bbbb] x 8 + const __m256i v_1f00 = _mm256_set1_epi16((int16_t)0x1f00); + const __m256i v_003f = _mm256_set1_epi16((int16_t)0x003f); + + // t0 = [000a|aaaa|bbbb|bb00] + const __m256i t0 = _mm256_slli_epi16(in, 2); + // t1 = [000a|aaaa|0000|0000] + const __m256i t1 = _mm256_and_si256(t0, v_1f00); + // t2 = [0000|0000|00bb|bbbb] + const __m256i t2 = _mm256_and_si256(in, v_003f); + // t3 = [000a|aaaa|00bb|bbbb] + const __m256i t3 = _mm256_or_si256(t1, t2); + // t4 = [110a|aaaa|10bb|bbbb] + const __m256i t4 = _mm256_or_si256(t3, v_c080); + + // 2. merge ASCII and 2-byte codewords + const __m256i utf8_unpacked = + _mm256_blendv_epi8(t4, in, one_byte_bytemask); + + // 3. prepare bitmask for 8-bit lookup + const uint32_t M0 = one_byte_bitmask & 0x55555555; + const uint32_t M1 = M0 >> 7; + const uint32_t M2 = (M1 | M0) & 0x00ff00ff; + // 4. pack the bytes + + const uint8_t *row = + &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2)][0]; + const uint8_t *row_2 = + &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2 >> + 16)][0]; + + const __m128i shuffle = _mm_loadu_si128((__m128i *)(row + 1)); + const __m128i shuffle_2 = _mm_loadu_si128((__m128i *)(row_2 + 1)); + + const __m256i utf8_packed = _mm256_shuffle_epi8( + utf8_unpacked, _mm256_setr_m128i(shuffle, shuffle_2)); + // 5. store bytes + _mm_storeu_si128((__m128i *)utf8_output, + _mm256_castsi256_si128(utf8_packed)); + utf8_output += row[0]; + _mm_storeu_si128((__m128i *)utf8_output, + _mm256_extractf128_si256(utf8_packed, 1)); + utf8_output += row_2[0]; + + // 6. adjust pointers + buf += 16; + continue; } // 1. Check if there are any surrogate word in the input chunk. // We have also deal with situation when there is a surrogate word // at the end of a chunk. - const __m256i surrogates_bytemask = _mm256_cmpeq_epi16(_mm256_and_si256(in, v_f800), v_d800); + const __m256i surrogates_bytemask = + _mm256_cmpeq_epi16(_mm256_and_si256(in, v_f800), v_d800); // bitmask = 0x0000 if there are no surrogates // = 0xc000 if the last word is a surrogate - const uint32_t surrogates_bitmask = static_cast(_mm256_movemask_epi8(surrogates_bytemask)); - // It might seem like checking for surrogates_bitmask == 0xc000 could help. However, - // it is likely an uncommon occurrence. + const uint32_t surrogates_bitmask = + static_cast(_mm256_movemask_epi8(surrogates_bytemask)); + // It might seem like checking for surrogates_bitmask == 0xc000 could help. + // However, it is likely an uncommon occurrence. if (surrogates_bitmask == 0x00000000) { // case: code units from register produce either 1, 2 or 3 UTF-8 bytes - const __m256i dup_even = _mm256_setr_epi16(0x0000, 0x0202, 0x0404, 0x0606, - 0x0808, 0x0a0a, 0x0c0c, 0x0e0e, - 0x0000, 0x0202, 0x0404, 0x0606, - 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); + const __m256i dup_even = _mm256_setr_epi16( + 0x0000, 0x0202, 0x0404, 0x0606, 0x0808, 0x0a0a, 0x0c0c, 0x0e0e, + 0x0000, 0x0202, 0x0404, 0x0606, 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); - /* In this branch we handle three cases: - 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - single UFT-8 byte - 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two UTF-8 bytes - 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - three UTF-8 bytes + /* In this branch we handle three cases: + 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - + single UFT-8 byte + 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two + UTF-8 bytes + 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - + three UTF-8 bytes - We expand the input word (16-bit) into two code units (32-bit), thus - we have room for four bytes. However, we need five distinct bit - layouts. Note that the last byte in cases #2 and #3 is the same. + We expand the input word (16-bit) into two code units (32-bit), thus + we have room for four bytes. However, we need five distinct bit + layouts. Note that the last byte in cases #2 and #3 is the same. - We precompute byte 1 for case #1 and the common byte for cases #2 & #3 - in register t2. + We precompute byte 1 for case #1 and the common byte for cases #2 & #3 + in register t2. - We precompute byte 1 for case #3 and -- **conditionally** -- precompute - either byte 1 for case #2 or byte 2 for case #3. Note that they - differ by exactly one bit. + We precompute byte 1 for case #3 and -- **conditionally** -- precompute + either byte 1 for case #2 or byte 2 for case #3. Note that they + differ by exactly one bit. - Finally from these two code units we build proper UTF-8 sequence, taking - into account the case (i.e, the number of bytes to write). - */ - /** - * Given [aaaa|bbbb|bbcc|cccc] our goal is to produce: - * t2 => [0ccc|cccc] [10cc|cccc] - * s4 => [1110|aaaa] ([110b|bbbb] OR [10bb|bbbb]) - */ + Finally from these two code units we build proper UTF-8 sequence, taking + into account the case (i.e, the number of bytes to write). + */ + /** + * Given [aaaa|bbbb|bbcc|cccc] our goal is to produce: + * t2 => [0ccc|cccc] [10cc|cccc] + * s4 => [1110|aaaa] ([110b|bbbb] OR [10bb|bbbb]) + */ #define simdutf_vec(x) _mm256_set1_epi16(static_cast(x)) - // [aaaa|bbbb|bbcc|cccc] => [bbcc|cccc|bbcc|cccc] - const __m256i t0 = _mm256_shuffle_epi8(in, dup_even); - // [bbcc|cccc|bbcc|cccc] => [00cc|cccc|0bcc|cccc] - const __m256i t1 = _mm256_and_si256(t0, simdutf_vec(0b0011111101111111)); - // [00cc|cccc|0bcc|cccc] => [10cc|cccc|0bcc|cccc] - const __m256i t2 = _mm256_or_si256 (t1, simdutf_vec(0b1000000000000000)); - - // [aaaa|bbbb|bbcc|cccc] => [0000|aaaa|bbbb|bbcc] - const __m256i s0 = _mm256_srli_epi16(in, 4); - // [0000|aaaa|bbbb|bbcc] => [0000|aaaa|bbbb|bb00] - const __m256i s1 = _mm256_and_si256(s0, simdutf_vec(0b0000111111111100)); - // [0000|aaaa|bbbb|bb00] => [00bb|bbbb|0000|aaaa] - const __m256i s2 = _mm256_maddubs_epi16(s1, simdutf_vec(0x0140)); - // [00bb|bbbb|0000|aaaa] => [11bb|bbbb|1110|aaaa] - const __m256i s3 = _mm256_or_si256(s2, simdutf_vec(0b1100000011100000)); - const __m256i m0 = _mm256_andnot_si256(one_or_two_bytes_bytemask, simdutf_vec(0b0100000000000000)); - const __m256i s4 = _mm256_xor_si256(s3, m0); -#undef simdutf_vec + // [aaaa|bbbb|bbcc|cccc] => [bbcc|cccc|bbcc|cccc] + const __m256i t0 = _mm256_shuffle_epi8(in, dup_even); + // [bbcc|cccc|bbcc|cccc] => [00cc|cccc|0bcc|cccc] + const __m256i t1 = _mm256_and_si256(t0, simdutf_vec(0b0011111101111111)); + // [00cc|cccc|0bcc|cccc] => [10cc|cccc|0bcc|cccc] + const __m256i t2 = _mm256_or_si256(t1, simdutf_vec(0b1000000000000000)); - // 4. expand code units 16-bit => 32-bit - const __m256i out0 = _mm256_unpacklo_epi16(t2, s4); - const __m256i out1 = _mm256_unpackhi_epi16(t2, s4); + // [aaaa|bbbb|bbcc|cccc] => [0000|aaaa|bbbb|bbcc] + const __m256i s0 = _mm256_srli_epi16(in, 4); + // [0000|aaaa|bbbb|bbcc] => [0000|aaaa|bbbb|bb00] + const __m256i s1 = _mm256_and_si256(s0, simdutf_vec(0b0000111111111100)); + // [0000|aaaa|bbbb|bb00] => [00bb|bbbb|0000|aaaa] + const __m256i s2 = _mm256_maddubs_epi16(s1, simdutf_vec(0x0140)); + // [00bb|bbbb|0000|aaaa] => [11bb|bbbb|1110|aaaa] + const __m256i s3 = _mm256_or_si256(s2, simdutf_vec(0b1100000011100000)); + const __m256i m0 = _mm256_andnot_si256(one_or_two_bytes_bytemask, + simdutf_vec(0b0100000000000000)); + const __m256i s4 = _mm256_xor_si256(s3, m0); +#undef simdutf_vec - // 5. compress 32-bit code units into 1, 2 or 3 bytes -- 2 x shuffle - const uint32_t mask = (one_byte_bitmask & 0x55555555) | - (one_or_two_bytes_bitmask & 0xaaaaaaaa); - // Due to the wider registers, the following path is less likely to be useful. - /*if(mask == 0) { - // We only have three-byte code units. Use fast path. - const __m256i shuffle = _mm256_setr_epi8(2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1, 2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1); - const __m256i utf8_0 = _mm256_shuffle_epi8(out0, shuffle); - const __m256i utf8_1 = _mm256_shuffle_epi8(out1, shuffle); - _mm_storeu_si128((__m128i*)utf8_output, _mm256_castsi256_si128(utf8_0)); - utf8_output += 12; - _mm_storeu_si128((__m128i*)utf8_output, _mm256_castsi256_si128(utf8_1)); - utf8_output += 12; - _mm_storeu_si128((__m128i*)utf8_output, _mm256_extractf128_si256(utf8_0,1)); - utf8_output += 12; - _mm_storeu_si128((__m128i*)utf8_output, _mm256_extractf128_si256(utf8_1,1)); - utf8_output += 12; - buf += 16; - continue; - }*/ - const uint8_t mask0 = uint8_t(mask); - const uint8_t* row0 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; - const __m128i shuffle0 = _mm_loadu_si128((__m128i*)(row0 + 1)); - const __m128i utf8_0 = _mm_shuffle_epi8(_mm256_castsi256_si128(out0), shuffle0); + // 4. expand code units 16-bit => 32-bit + const __m256i out0 = _mm256_unpacklo_epi16(t2, s4); + const __m256i out1 = _mm256_unpackhi_epi16(t2, s4); - const uint8_t mask1 = static_cast(mask >> 8); - const uint8_t* row1 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; - const __m128i shuffle1 = _mm_loadu_si128((__m128i*)(row1 + 1)); - const __m128i utf8_1 = _mm_shuffle_epi8(_mm256_castsi256_si128(out1), shuffle1); + // 5. compress 32-bit code units into 1, 2 or 3 bytes -- 2 x shuffle + const uint32_t mask = (one_byte_bitmask & 0x55555555) | + (one_or_two_bytes_bitmask & 0xaaaaaaaa); + // Due to the wider registers, the following path is less likely to be + // useful. + /*if(mask == 0) { + // We only have three-byte code units. Use fast path. + const __m256i shuffle = + _mm256_setr_epi8(2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1, + 2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1); const __m256i utf8_0 = + _mm256_shuffle_epi8(out0, shuffle); const __m256i utf8_1 = + _mm256_shuffle_epi8(out1, shuffle); + _mm_storeu_si128((__m128i*)utf8_output, _mm256_castsi256_si128(utf8_0)); + utf8_output += 12; + _mm_storeu_si128((__m128i*)utf8_output, _mm256_castsi256_si128(utf8_1)); + utf8_output += 12; + _mm_storeu_si128((__m128i*)utf8_output, + _mm256_extractf128_si256(utf8_0,1)); utf8_output += 12; + _mm_storeu_si128((__m128i*)utf8_output, + _mm256_extractf128_si256(utf8_1,1)); utf8_output += 12; buf += 16; + continue; + }*/ + const uint8_t mask0 = uint8_t(mask); + const uint8_t *row0 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; + const __m128i shuffle0 = _mm_loadu_si128((__m128i *)(row0 + 1)); + const __m128i utf8_0 = + _mm_shuffle_epi8(_mm256_castsi256_si128(out0), shuffle0); - const uint8_t mask2 = static_cast(mask >> 16); - const uint8_t* row2 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask2][0]; - const __m128i shuffle2 = _mm_loadu_si128((__m128i*)(row2 + 1)); - const __m128i utf8_2 = _mm_shuffle_epi8(_mm256_extractf128_si256(out0,1), shuffle2); + const uint8_t mask1 = static_cast(mask >> 8); + const uint8_t *row1 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; + const __m128i shuffle1 = _mm_loadu_si128((__m128i *)(row1 + 1)); + const __m128i utf8_1 = + _mm_shuffle_epi8(_mm256_castsi256_si128(out1), shuffle1); + const uint8_t mask2 = static_cast(mask >> 16); + const uint8_t *row2 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask2][0]; + const __m128i shuffle2 = _mm_loadu_si128((__m128i *)(row2 + 1)); + const __m128i utf8_2 = + _mm_shuffle_epi8(_mm256_extractf128_si256(out0, 1), shuffle2); - const uint8_t mask3 = static_cast(mask >> 24); - const uint8_t* row3 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask3][0]; - const __m128i shuffle3 = _mm_loadu_si128((__m128i*)(row3 + 1)); - const __m128i utf8_3 = _mm_shuffle_epi8(_mm256_extractf128_si256(out1,1), shuffle3); + const uint8_t mask3 = static_cast(mask >> 24); + const uint8_t *row3 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask3][0]; + const __m128i shuffle3 = _mm_loadu_si128((__m128i *)(row3 + 1)); + const __m128i utf8_3 = + _mm_shuffle_epi8(_mm256_extractf128_si256(out1, 1), shuffle3); - _mm_storeu_si128((__m128i*)utf8_output, utf8_0); - utf8_output += row0[0]; - _mm_storeu_si128((__m128i*)utf8_output, utf8_1); - utf8_output += row1[0]; - _mm_storeu_si128((__m128i*)utf8_output, utf8_2); - utf8_output += row2[0]; - _mm_storeu_si128((__m128i*)utf8_output, utf8_3); - utf8_output += row3[0]; - buf += 16; - // surrogate pair(s) in a register + _mm_storeu_si128((__m128i *)utf8_output, utf8_0); + utf8_output += row0[0]; + _mm_storeu_si128((__m128i *)utf8_output, utf8_1); + utf8_output += row1[0]; + _mm_storeu_si128((__m128i *)utf8_output, utf8_2); + utf8_output += row2[0]; + _mm_storeu_si128((__m128i *)utf8_output, utf8_3); + utf8_output += row3[0]; + buf += 16; + // surrogate pair(s) in a register } else { // Let us do a scalar fallback. // It may seem wasteful to use scalar code, but being efficient with SIMD // in the presence of surrogate pairs may require non-trivial tables. size_t forward = 15; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { uint16_t word = big_endian ? scalar::utf16::swap_bytes(buf[k]) : buf[k]; - if((word & 0xFF80)==0) { + if ((word & 0xFF80) == 0) { *utf8_output++ = char(word); - } else if((word & 0xF800)==0) { - *utf8_output++ = char((word>>6) | 0b11000000); + } else if ((word & 0xF800) == 0) { + *utf8_output++ = char((word >> 6) | 0b11000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); - } else if((word &0xF800 ) != 0xD800) { - *utf8_output++ = char((word>>12) | 0b11100000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + } else if ((word & 0xF800) != 0xD800) { + *utf8_output++ = char((word >> 12) | 0b11100000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); } else { // must be a surrogate pair uint16_t diff = uint16_t(word - 0xD800); - uint16_t next_word = big_endian ? scalar::utf16::swap_bytes(buf[k+1]) : buf[k+1]; + uint16_t next_word = + big_endian ? scalar::utf16::swap_bytes(buf[k + 1]) : buf[k + 1]; k++; uint16_t diff2 = uint16_t(next_word - 0xDC00); - if((diff | diff2) > 0x3FF) { return std::make_pair(result(error_code::SURROGATE, buf - start + k - 1), utf8_output); } + if ((diff | diff2) > 0x3FF) { + return std::make_pair( + result(error_code::SURROGATE, buf - start + k - 1), + utf8_output); + } uint32_t value = (diff << 10) + diff2 + 0x10000; - *utf8_output++ = char((value>>18) | 0b11110000); - *utf8_output++ = char(((value>>12) & 0b111111) | 0b10000000); - *utf8_output++ = char(((value>>6) & 0b111111) | 0b10000000); + *utf8_output++ = char((value >> 18) | 0b11110000); + *utf8_output++ = char(((value >> 12) & 0b111111) | 0b10000000); + *utf8_output++ = char(((value >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((value & 0b111111) | 0b10000000); } } @@ -25931,61 +26641,74 @@ std::pair avx2_convert_utf16_to_utf8_with_errors(const char16_t* - We need two 256-entry tables that have 8704 bytes in total. */ - /* Returns a pair: the first unprocessed byte from buf and utf32_output A scalar routing should carry on the conversion of the tail. */ template -std::pair avx2_convert_utf16_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) { - const char16_t* end = buf + len; +std::pair +avx2_convert_utf16_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_output) { + const char16_t *end = buf + len; const __m256i v_f800 = _mm256_set1_epi16((int16_t)0xf800); const __m256i v_d800 = _mm256_set1_epi16((int16_t)0xd800); while (end - buf >= 16) { - __m256i in = _mm256_loadu_si256((__m256i*)buf); + __m256i in = _mm256_loadu_si256((__m256i *)buf); if (big_endian) { - const __m256i swap = _mm256_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, - 17, 16, 19, 18, 21, 20, 23, 22, 25, 24, 27, 26, 29, 28, 31, 30); + const __m256i swap = _mm256_setr_epi8( + 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, 17, 16, 19, 18, + 21, 20, 23, 22, 25, 24, 27, 26, 29, 28, 31, 30); in = _mm256_shuffle_epi8(in, swap); } // 1. Check if there are any surrogate word in the input chunk. // We have also deal with situation when there is a surrogate word // at the end of a chunk. - const __m256i surrogates_bytemask = _mm256_cmpeq_epi16(_mm256_and_si256(in, v_f800), v_d800); + const __m256i surrogates_bytemask = + _mm256_cmpeq_epi16(_mm256_and_si256(in, v_f800), v_d800); // bitmask = 0x0000 if there are no surrogates // = 0xc000 if the last word is a surrogate - const uint32_t surrogates_bitmask = static_cast(_mm256_movemask_epi8(surrogates_bytemask)); - // It might seem like checking for surrogates_bitmask == 0xc000 could help. However, - // it is likely an uncommon occurrence. + const uint32_t surrogates_bitmask = + static_cast(_mm256_movemask_epi8(surrogates_bytemask)); + // It might seem like checking for surrogates_bitmask == 0xc000 could help. + // However, it is likely an uncommon occurrence. if (surrogates_bitmask == 0x00000000) { - // case: we extend all sixteen 16-bit code units to sixteen 32-bit code units - _mm256_storeu_si256(reinterpret_cast<__m256i *>(utf32_output), _mm256_cvtepu16_epi32(_mm256_castsi256_si128(in))); - _mm256_storeu_si256(reinterpret_cast<__m256i *>(utf32_output + 8), _mm256_cvtepu16_epi32(_mm256_extractf128_si256(in,1))); - utf32_output += 16; - buf += 16; - // surrogate pair(s) in a register + // case: we extend all sixteen 16-bit code units to sixteen 32-bit code + // units + _mm256_storeu_si256(reinterpret_cast<__m256i *>(utf32_output), + _mm256_cvtepu16_epi32(_mm256_castsi256_si128(in))); + _mm256_storeu_si256( + reinterpret_cast<__m256i *>(utf32_output + 8), + _mm256_cvtepu16_epi32(_mm256_extractf128_si256(in, 1))); + utf32_output += 16; + buf += 16; + // surrogate pair(s) in a register } else { // Let us do a scalar fallback. // It may seem wasteful to use scalar code, but being efficient with SIMD // in the presence of surrogate pairs may require non-trivial tables. size_t forward = 15; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { uint16_t word = big_endian ? scalar::utf16::swap_bytes(buf[k]) : buf[k]; - if((word &0xF800 ) != 0xD800) { + if ((word & 0xF800) != 0xD800) { // No surrogate pair *utf32_output++ = char32_t(word); } else { // must be a surrogate pair uint16_t diff = uint16_t(word - 0xD800); - uint16_t next_word = big_endian ? scalar::utf16::swap_bytes(buf[k+1]) : buf[k+1]; + uint16_t next_word = + big_endian ? scalar::utf16::swap_bytes(buf[k + 1]) : buf[k + 1]; k++; uint16_t diff2 = uint16_t(next_word - 0xDC00); - if((diff | diff2) > 0x3FF) { return std::make_pair(nullptr, utf32_output); } + if ((diff | diff2) > 0x3FF) { + return std::make_pair(nullptr, utf32_output); + } uint32_t value = (diff << 10) + diff2 + 0x10000; *utf32_output++ = char32_t(value); } @@ -25996,64 +26719,80 @@ std::pair avx2_convert_utf16_to_utf32(const char16_t return std::make_pair(buf, utf32_output); } - /* Returns a pair: a result struct and utf8_output. - If there is an error, the count field of the result is the position of the error. - Otherwise, it is the position of the first unprocessed byte in buf (even if finished). - A scalar routing should carry on the conversion of the tail if needed. + If there is an error, the count field of the result is the position of the + error. Otherwise, it is the position of the first unprocessed byte in buf + (even if finished). A scalar routing should carry on the conversion of the + tail if needed. */ template -std::pair avx2_convert_utf16_to_utf32_with_errors(const char16_t* buf, size_t len, char32_t* utf32_output) { - const char16_t* start = buf; - const char16_t* end = buf + len; +std::pair +avx2_convert_utf16_to_utf32_with_errors(const char16_t *buf, size_t len, + char32_t *utf32_output) { + const char16_t *start = buf; + const char16_t *end = buf + len; const __m256i v_f800 = _mm256_set1_epi16((int16_t)0xf800); const __m256i v_d800 = _mm256_set1_epi16((int16_t)0xd800); while (end - buf >= 16) { - __m256i in = _mm256_loadu_si256((__m256i*)buf); + __m256i in = _mm256_loadu_si256((__m256i *)buf); if (big_endian) { - const __m256i swap = _mm256_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, - 17, 16, 19, 18, 21, 20, 23, 22, 25, 24, 27, 26, 29, 28, 31, 30); + const __m256i swap = _mm256_setr_epi8( + 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, 17, 16, 19, 18, + 21, 20, 23, 22, 25, 24, 27, 26, 29, 28, 31, 30); in = _mm256_shuffle_epi8(in, swap); } // 1. Check if there are any surrogate word in the input chunk. // We have also deal with situation when there is a surrogate word // at the end of a chunk. - const __m256i surrogates_bytemask = _mm256_cmpeq_epi16(_mm256_and_si256(in, v_f800), v_d800); + const __m256i surrogates_bytemask = + _mm256_cmpeq_epi16(_mm256_and_si256(in, v_f800), v_d800); // bitmask = 0x0000 if there are no surrogates // = 0xc000 if the last word is a surrogate - const uint32_t surrogates_bitmask = static_cast(_mm256_movemask_epi8(surrogates_bytemask)); - // It might seem like checking for surrogates_bitmask == 0xc000 could help. However, - // it is likely an uncommon occurrence. + const uint32_t surrogates_bitmask = + static_cast(_mm256_movemask_epi8(surrogates_bytemask)); + // It might seem like checking for surrogates_bitmask == 0xc000 could help. + // However, it is likely an uncommon occurrence. if (surrogates_bitmask == 0x00000000) { - // case: we extend all sixteen 16-bit code units to sixteen 32-bit code units - _mm256_storeu_si256(reinterpret_cast<__m256i *>(utf32_output), _mm256_cvtepu16_epi32(_mm256_castsi256_si128(in))); - _mm256_storeu_si256(reinterpret_cast<__m256i *>(utf32_output + 8), _mm256_cvtepu16_epi32(_mm256_extractf128_si256(in,1))); - utf32_output += 16; - buf += 16; - // surrogate pair(s) in a register + // case: we extend all sixteen 16-bit code units to sixteen 32-bit code + // units + _mm256_storeu_si256(reinterpret_cast<__m256i *>(utf32_output), + _mm256_cvtepu16_epi32(_mm256_castsi256_si128(in))); + _mm256_storeu_si256( + reinterpret_cast<__m256i *>(utf32_output + 8), + _mm256_cvtepu16_epi32(_mm256_extractf128_si256(in, 1))); + utf32_output += 16; + buf += 16; + // surrogate pair(s) in a register } else { // Let us do a scalar fallback. // It may seem wasteful to use scalar code, but being efficient with SIMD // in the presence of surrogate pairs may require non-trivial tables. size_t forward = 15; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { uint16_t word = big_endian ? scalar::utf16::swap_bytes(buf[k]) : buf[k]; - if((word &0xF800 ) != 0xD800) { + if ((word & 0xF800) != 0xD800) { // No surrogate pair *utf32_output++ = char32_t(word); } else { // must be a surrogate pair uint16_t diff = uint16_t(word - 0xD800); - uint16_t next_word = big_endian ? scalar::utf16::swap_bytes(buf[k+1]) : buf[k+1]; + uint16_t next_word = + big_endian ? scalar::utf16::swap_bytes(buf[k + 1]) : buf[k + 1]; k++; uint16_t diff2 = uint16_t(next_word - 0xDC00); - if((diff | diff2) > 0x3FF) { return std::make_pair(result(error_code::SURROGATE, buf - start + k - 1), utf32_output); } + if ((diff | diff2) > 0x3FF) { + return std::make_pair( + result(error_code::SURROGATE, buf - start + k - 1), + utf32_output); + } uint32_t value = (diff << 10) + diff2 + 0x10000; *utf32_output++ = char32_t(value); } @@ -26070,13 +26809,13 @@ std::pair avx2_convert_utf32_to_latin1(const char32_t *buf, size_t len, char *latin1_output) { const size_t rounded_len = - len & ~0x1F; // Round down to nearest multiple of 32 + len & ~0x1F; // Round down to nearest multiple of 32 __m256i high_bytes_mask = _mm256_set1_epi32(0xFFFFFF00); __m256i shufmask = _mm256_set_epi8(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 12, 8, 4, 0, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 12, 8, 4, 0); + -1, 12, 8, 4, 0, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 12, 8, 4, 0); for (size_t i = 0; i < rounded_len; i += 16) { __m256i in1 = _mm256_loadu_si256((__m256i *)buf); @@ -26088,19 +26827,18 @@ avx2_convert_utf32_to_latin1(const char32_t *buf, size_t len, return std::make_pair(nullptr, latin1_output); } - //Turn UTF32 bytes into latin 1 bytes + // Turn UTF32 bytes into latin 1 bytes __m256i shuffled1 = _mm256_shuffle_epi8(in1, shufmask); __m256i shuffled2 = _mm256_shuffle_epi8(in2, shufmask); - //move Latin1 bytes to their correct spot - __m256i idx1 = _mm256_set_epi32(-1, -1,-1,-1,-1,-1,4,0); - __m256i idx2 = _mm256_set_epi32(-1, -1,-1,-1,4,0,-1,-1); + // move Latin1 bytes to their correct spot + __m256i idx1 = _mm256_set_epi32(-1, -1, -1, -1, -1, -1, 4, 0); + __m256i idx2 = _mm256_set_epi32(-1, -1, -1, -1, 4, 0, -1, -1); __m256i reshuffled1 = _mm256_permutevar8x32_epi32(shuffled1, idx1); __m256i reshuffled2 = _mm256_permutevar8x32_epi32(shuffled2, idx2); __m256i result = _mm256_or_si256(reshuffled1, reshuffled2); - _mm_storeu_si128((__m128i *)latin1_output, - _mm256_castsi256_si128(result)); + _mm_storeu_si128((__m128i *)latin1_output, _mm256_castsi256_si128(result)); latin1_output += 16; buf += 16; @@ -26111,57 +26849,60 @@ avx2_convert_utf32_to_latin1(const char32_t *buf, size_t len, std::pair avx2_convert_utf32_to_latin1_with_errors(const char32_t *buf, size_t len, char *latin1_output) { - const size_t rounded_len = - len & ~0x1F; // Round down to nearest multiple of 32 - - __m256i high_bytes_mask = _mm256_set1_epi32(0xFFFFFF00); - __m256i shufmask = _mm256_set_epi8(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 12, 8, 4, 0, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 12, 8, 4, 0); - - const char32_t *start = buf; - - for (size_t i = 0; i < rounded_len; i += 16) { - __m256i in1 = _mm256_loadu_si256((__m256i *)buf); - __m256i in2 = _mm256_loadu_si256((__m256i *)(buf + 8)); - - __m256i check_combined = _mm256_or_si256(in1, in2); - - if (!_mm256_testz_si256(check_combined, high_bytes_mask)) { - // Fallback to scalar code for handling errors - for (int k = 0; k < 8; k++) { - char32_t codepoint = buf[k]; - if (codepoint <= 0xFF) { - *latin1_output++ = static_cast(codepoint); - } else { - return std::make_pair(result(error_code::TOO_LARGE, buf - start + k), - latin1_output); - } - } - buf += 8; - } else { - __m256i shuffled1 = _mm256_shuffle_epi8(in1, shufmask); - __m256i shuffled2 = _mm256_shuffle_epi8(in2, shufmask); + const size_t rounded_len = + len & ~0x1F; // Round down to nearest multiple of 32 + + __m256i high_bytes_mask = _mm256_set1_epi32(0xFFFFFF00); + __m256i shufmask = _mm256_set_epi8(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 12, 8, 4, 0, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 12, 8, 4, 0); + + const char32_t *start = buf; - __m256i idx1 = _mm256_set_epi32(-1, -1, -1, -1, -1, -1, 4, 0); - __m256i idx2 = _mm256_set_epi32(-1, -1, -1, -1, 4, 0, -1, -1); - __m256i reshuffled1 = _mm256_permutevar8x32_epi32(shuffled1, idx1); - __m256i reshuffled2 = _mm256_permutevar8x32_epi32(shuffled2, idx2); + for (size_t i = 0; i < rounded_len; i += 16) { + __m256i in1 = _mm256_loadu_si256((__m256i *)buf); + __m256i in2 = _mm256_loadu_si256((__m256i *)(buf + 8)); - __m256i result = _mm256_or_si256(reshuffled1, reshuffled2); - _mm_storeu_si128((__m128i *)latin1_output, _mm256_castsi256_si128(result)); + __m256i check_combined = _mm256_or_si256(in1, in2); - latin1_output += 16; - buf += 16; + if (!_mm256_testz_si256(check_combined, high_bytes_mask)) { + // Fallback to scalar code for handling errors + for (int k = 0; k < 8; k++) { + char32_t codepoint = buf[k]; + if (codepoint <= 0xFF) { + *latin1_output++ = static_cast(codepoint); + } else { + return std::make_pair(result(error_code::TOO_LARGE, buf - start + k), + latin1_output); } + } + buf += 8; + } else { + __m256i shuffled1 = _mm256_shuffle_epi8(in1, shufmask); + __m256i shuffled2 = _mm256_shuffle_epi8(in2, shufmask); + + __m256i idx1 = _mm256_set_epi32(-1, -1, -1, -1, -1, -1, 4, 0); + __m256i idx2 = _mm256_set_epi32(-1, -1, -1, -1, 4, 0, -1, -1); + __m256i reshuffled1 = _mm256_permutevar8x32_epi32(shuffled1, idx1); + __m256i reshuffled2 = _mm256_permutevar8x32_epi32(shuffled2, idx2); + + __m256i result = _mm256_or_si256(reshuffled1, reshuffled2); + _mm_storeu_si128((__m128i *)latin1_output, + _mm256_castsi256_si128(result)); + + latin1_output += 16; + buf += 16; } + } - return std::make_pair(result(error_code::SUCCESS, buf - start), latin1_output); + return std::make_pair(result(error_code::SUCCESS, buf - start), + latin1_output); } /* end file src/haswell/avx2_convert_utf32_to_latin1.cpp */ /* begin file src/haswell/avx2_convert_utf32_to_utf8.cpp */ -std::pair avx2_convert_utf32_to_utf8(const char32_t* buf, size_t len, char* utf8_output) { - const char32_t* end = buf + len; +std::pair +avx2_convert_utf32_to_utf8(const char32_t *buf, size_t len, char *utf8_output) { + const char32_t *end = buf + len; const __m256i v_0000 = _mm256_setzero_si256(); const __m256i v_ffff0000 = _mm256_set1_epi32((uint32_t)0xffff0000); const __m256i v_ff80 = _mm256_set1_epi16((uint16_t)0xff80); @@ -26171,36 +26912,46 @@ std::pair avx2_convert_utf32_to_utf8(const char32_t* buf __m256i running_max = _mm256_setzero_si256(); __m256i forbidden_bytemask = _mm256_setzero_si256(); - const size_t safety_margin = 12; // to avoid overruns, see issue https://github.com/simdutf/simdutf/issues/92 + const size_t safety_margin = + 12; // to avoid overruns, see issue + // https://github.com/simdutf/simdutf/issues/92 while (end - buf >= std::ptrdiff_t(16 + safety_margin)) { - __m256i in = _mm256_loadu_si256((__m256i*)buf); - __m256i nextin = _mm256_loadu_si256((__m256i*)buf+1); + __m256i in = _mm256_loadu_si256((__m256i *)buf); + __m256i nextin = _mm256_loadu_si256((__m256i *)buf + 1); running_max = _mm256_max_epu32(_mm256_max_epu32(in, running_max), nextin); - // Pack 32-bit UTF-32 code units to 16-bit UTF-16 code units with unsigned saturation - __m256i in_16 = _mm256_packus_epi32(_mm256_and_si256(in, v_7fffffff), _mm256_and_si256(nextin, v_7fffffff)); + // Pack 32-bit UTF-32 code units to 16-bit UTF-16 code units with unsigned + // saturation + __m256i in_16 = _mm256_packus_epi32(_mm256_and_si256(in, v_7fffffff), + _mm256_and_si256(nextin, v_7fffffff)); in_16 = _mm256_permute4x64_epi64(in_16, 0b11011000); - // Try to apply UTF-16 => UTF-8 routine on 256 bits (haswell/avx2_convert_utf16_to_utf8.cpp) + // Try to apply UTF-16 => UTF-8 routine on 256 bits + // (haswell/avx2_convert_utf16_to_utf8.cpp) - if(_mm256_testz_si256(in_16, v_ff80)) { // ASCII fast path!!!! + if (_mm256_testz_si256(in_16, v_ff80)) { // ASCII fast path!!!! // 1. pack the bytes - const __m128i utf8_packed = _mm_packus_epi16(_mm256_castsi256_si128(in_16),_mm256_extractf128_si256(in_16,1)); + const __m128i utf8_packed = _mm_packus_epi16( + _mm256_castsi256_si128(in_16), _mm256_extractf128_si256(in_16, 1)); // 2. store (16 bytes) - _mm_storeu_si128((__m128i*)utf8_output, utf8_packed); + _mm_storeu_si128((__m128i *)utf8_output, utf8_packed); // 3. adjust pointers buf += 16; utf8_output += 16; continue; // we are done for this round! } // no bits set above 7th bit - const __m256i one_byte_bytemask = _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_ff80), v_0000); - const uint32_t one_byte_bitmask = static_cast(_mm256_movemask_epi8(one_byte_bytemask)); + const __m256i one_byte_bytemask = + _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_ff80), v_0000); + const uint32_t one_byte_bitmask = + static_cast(_mm256_movemask_epi8(one_byte_bytemask)); // no bits set above 11th bit - const __m256i one_or_two_bytes_bytemask = _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_f800), v_0000); - const uint32_t one_or_two_bytes_bitmask = static_cast(_mm256_movemask_epi8(one_or_two_bytes_bytemask)); + const __m256i one_or_two_bytes_bytemask = + _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_f800), v_0000); + const uint32_t one_or_two_bytes_bitmask = + static_cast(_mm256_movemask_epi8(one_or_two_bytes_bytemask)); if (one_or_two_bytes_bitmask == 0xffffffff) { // 1. prepare 2-byte values // input 16-bit word : [0000|0aaa|aabb|bbbb] x 8 @@ -26220,25 +26971,32 @@ std::pair avx2_convert_utf32_to_utf8(const char32_t* buf const __m256i t4 = _mm256_or_si256(t3, v_c080); // 2. merge ASCII and 2-byte codewords - const __m256i utf8_unpacked = _mm256_blendv_epi8(t4, in_16, one_byte_bytemask); + const __m256i utf8_unpacked = + _mm256_blendv_epi8(t4, in_16, one_byte_bytemask); // 3. prepare bitmask for 8-bit lookup const uint32_t M0 = one_byte_bitmask & 0x55555555; const uint32_t M1 = M0 >> 7; - const uint32_t M2 = (M1 | M0) & 0x00ff00ff; + const uint32_t M2 = (M1 | M0) & 0x00ff00ff; // 4. pack the bytes - const uint8_t* row = &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2)][0]; - const uint8_t* row_2 = &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2>>16)][0]; + const uint8_t *row = + &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2)][0]; + const uint8_t *row_2 = + &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2 >> + 16)][0]; - const __m128i shuffle = _mm_loadu_si128((__m128i*)(row + 1)); - const __m128i shuffle_2 = _mm_loadu_si128((__m128i*)(row_2 + 1)); + const __m128i shuffle = _mm_loadu_si128((__m128i *)(row + 1)); + const __m128i shuffle_2 = _mm_loadu_si128((__m128i *)(row_2 + 1)); - const __m256i utf8_packed = _mm256_shuffle_epi8(utf8_unpacked, _mm256_setr_m128i(shuffle,shuffle_2)); + const __m256i utf8_packed = _mm256_shuffle_epi8( + utf8_unpacked, _mm256_setr_m128i(shuffle, shuffle_2)); // 5. store bytes - _mm_storeu_si128((__m128i*)utf8_output, _mm256_castsi256_si128(utf8_packed)); + _mm_storeu_si128((__m128i *)utf8_output, + _mm256_castsi256_si128(utf8_packed)); utf8_output += row[0]; - _mm_storeu_si128((__m128i*)utf8_output, _mm256_extractf128_si256(utf8_packed,1)); + _mm_storeu_si128((__m128i *)utf8_output, + _mm256_extractf128_si256(utf8_packed, 1)); utf8_output += row_2[0]; // 6. adjust pointers @@ -26246,22 +27004,28 @@ std::pair avx2_convert_utf32_to_utf8(const char32_t* buf continue; } // Must check for overflow in packing - const __m256i saturation_bytemask = _mm256_cmpeq_epi32(_mm256_and_si256(_mm256_or_si256(in, nextin), v_ffff0000), v_0000); - const uint32_t saturation_bitmask = static_cast(_mm256_movemask_epi8(saturation_bytemask)); + const __m256i saturation_bytemask = _mm256_cmpeq_epi32( + _mm256_and_si256(_mm256_or_si256(in, nextin), v_ffff0000), v_0000); + const uint32_t saturation_bitmask = + static_cast(_mm256_movemask_epi8(saturation_bytemask)); if (saturation_bitmask == 0xffffffff) { // case: code units from register produce either 1, 2 or 3 UTF-8 bytes const __m256i v_d800 = _mm256_set1_epi16((uint16_t)0xd800); - forbidden_bytemask = _mm256_or_si256(forbidden_bytemask, _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_f800), v_d800)); + forbidden_bytemask = _mm256_or_si256( + forbidden_bytemask, + _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_f800), v_d800)); - const __m256i dup_even = _mm256_setr_epi16(0x0000, 0x0202, 0x0404, 0x0606, - 0x0808, 0x0a0a, 0x0c0c, 0x0e0e, - 0x0000, 0x0202, 0x0404, 0x0606, - 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); + const __m256i dup_even = _mm256_setr_epi16( + 0x0000, 0x0202, 0x0404, 0x0606, 0x0808, 0x0a0a, 0x0c0c, 0x0e0e, + 0x0000, 0x0202, 0x0404, 0x0606, 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); /* In this branch we handle three cases: - 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - single UFT-8 byte - 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two UTF-8 bytes - 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - three UTF-8 bytes + 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - + single UFT-8 byte + 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two + UTF-8 bytes + 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - + three UTF-8 bytes We expand the input word (16-bit) into two code units (32-bit), thus we have room for four bytes. However, we need five distinct bit @@ -26288,7 +27052,7 @@ std::pair avx2_convert_utf32_to_utf8(const char32_t* buf // [bbcc|cccc|bbcc|cccc] => [00cc|cccc|0bcc|cccc] const __m256i t1 = _mm256_and_si256(t0, simdutf_vec(0b0011111101111111)); // [00cc|cccc|0bcc|cccc] => [10cc|cccc|0bcc|cccc] - const __m256i t2 = _mm256_or_si256 (t1, simdutf_vec(0b1000000000000000)); + const __m256i t2 = _mm256_or_si256(t1, simdutf_vec(0b1000000000000000)); // [aaaa|bbbb|bbcc|cccc] => [0000|aaaa|bbbb|bbcc] const __m256i s0 = _mm256_srli_epi16(in_16, 4); @@ -26298,7 +27062,8 @@ std::pair avx2_convert_utf32_to_utf8(const char32_t* buf const __m256i s2 = _mm256_maddubs_epi16(s1, simdutf_vec(0x0140)); // [00bb|bbbb|0000|aaaa] => [11bb|bbbb|1110|aaaa] const __m256i s3 = _mm256_or_si256(s2, simdutf_vec(0b1100000011100000)); - const __m256i m0 = _mm256_andnot_si256(one_or_two_bytes_bytemask, simdutf_vec(0b0100000000000000)); + const __m256i m0 = _mm256_andnot_si256(one_or_two_bytes_bytemask, + simdutf_vec(0b0100000000000000)); const __m256i s4 = _mm256_xor_si256(s3, m0); #undef simdutf_vec @@ -26309,78 +27074,93 @@ std::pair avx2_convert_utf32_to_utf8(const char32_t* buf // 5. compress 32-bit code units into 1, 2 or 3 bytes -- 2 x shuffle const uint32_t mask = (one_byte_bitmask & 0x55555555) | (one_or_two_bytes_bitmask & 0xaaaaaaaa); - // Due to the wider registers, the following path is less likely to be useful. + // Due to the wider registers, the following path is less likely to be + // useful. /*if(mask == 0) { // We only have three-byte code units. Use fast path. - const __m256i shuffle = _mm256_setr_epi8(2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1, 2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1); - const __m256i utf8_0 = _mm256_shuffle_epi8(out0, shuffle); - const __m256i utf8_1 = _mm256_shuffle_epi8(out1, shuffle); + const __m256i shuffle = + _mm256_setr_epi8(2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1, + 2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1); const __m256i utf8_0 = + _mm256_shuffle_epi8(out0, shuffle); const __m256i utf8_1 = + _mm256_shuffle_epi8(out1, shuffle); _mm_storeu_si128((__m128i*)utf8_output, _mm256_castsi256_si128(utf8_0)); utf8_output += 12; _mm_storeu_si128((__m128i*)utf8_output, _mm256_castsi256_si128(utf8_1)); utf8_output += 12; - _mm_storeu_si128((__m128i*)utf8_output, _mm256_extractf128_si256(utf8_0,1)); - utf8_output += 12; - _mm_storeu_si128((__m128i*)utf8_output, _mm256_extractf128_si256(utf8_1,1)); - utf8_output += 12; - buf += 16; + _mm_storeu_si128((__m128i*)utf8_output, + _mm256_extractf128_si256(utf8_0,1)); utf8_output += 12; + _mm_storeu_si128((__m128i*)utf8_output, + _mm256_extractf128_si256(utf8_1,1)); utf8_output += 12; buf += 16; continue; }*/ const uint8_t mask0 = uint8_t(mask); - const uint8_t* row0 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; - const __m128i shuffle0 = _mm_loadu_si128((__m128i*)(row0 + 1)); - const __m128i utf8_0 = _mm_shuffle_epi8(_mm256_castsi256_si128(out0), shuffle0); + const uint8_t *row0 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; + const __m128i shuffle0 = _mm_loadu_si128((__m128i *)(row0 + 1)); + const __m128i utf8_0 = + _mm_shuffle_epi8(_mm256_castsi256_si128(out0), shuffle0); const uint8_t mask1 = static_cast(mask >> 8); - const uint8_t* row1 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; - const __m128i shuffle1 = _mm_loadu_si128((__m128i*)(row1 + 1)); - const __m128i utf8_1 = _mm_shuffle_epi8(_mm256_castsi256_si128(out1), shuffle1); + const uint8_t *row1 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; + const __m128i shuffle1 = _mm_loadu_si128((__m128i *)(row1 + 1)); + const __m128i utf8_1 = + _mm_shuffle_epi8(_mm256_castsi256_si128(out1), shuffle1); const uint8_t mask2 = static_cast(mask >> 16); - const uint8_t* row2 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask2][0]; - const __m128i shuffle2 = _mm_loadu_si128((__m128i*)(row2 + 1)); - const __m128i utf8_2 = _mm_shuffle_epi8(_mm256_extractf128_si256(out0,1), shuffle2); - + const uint8_t *row2 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask2][0]; + const __m128i shuffle2 = _mm_loadu_si128((__m128i *)(row2 + 1)); + const __m128i utf8_2 = + _mm_shuffle_epi8(_mm256_extractf128_si256(out0, 1), shuffle2); const uint8_t mask3 = static_cast(mask >> 24); - const uint8_t* row3 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask3][0]; - const __m128i shuffle3 = _mm_loadu_si128((__m128i*)(row3 + 1)); - const __m128i utf8_3 = _mm_shuffle_epi8(_mm256_extractf128_si256(out1,1), shuffle3); + const uint8_t *row3 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask3][0]; + const __m128i shuffle3 = _mm_loadu_si128((__m128i *)(row3 + 1)); + const __m128i utf8_3 = + _mm_shuffle_epi8(_mm256_extractf128_si256(out1, 1), shuffle3); - _mm_storeu_si128((__m128i*)utf8_output, utf8_0); + _mm_storeu_si128((__m128i *)utf8_output, utf8_0); utf8_output += row0[0]; - _mm_storeu_si128((__m128i*)utf8_output, utf8_1); + _mm_storeu_si128((__m128i *)utf8_output, utf8_1); utf8_output += row1[0]; - _mm_storeu_si128((__m128i*)utf8_output, utf8_2); + _mm_storeu_si128((__m128i *)utf8_output, utf8_2); utf8_output += row2[0]; - _mm_storeu_si128((__m128i*)utf8_output, utf8_3); + _mm_storeu_si128((__m128i *)utf8_output, utf8_3); utf8_output += row3[0]; buf += 16; } else { - // case: at least one 32-bit word is larger than 0xFFFF <=> it will produce four UTF-8 bytes. - // Let us do a scalar fallback. - // It may seem wasteful to use scalar code, but being efficient with SIMD - // may require large, non-trivial tables? + // case: at least one 32-bit word is larger than 0xFFFF <=> it will + // produce four UTF-8 bytes. Let us do a scalar fallback. It may seem + // wasteful to use scalar code, but being efficient with SIMD may require + // large, non-trivial tables? size_t forward = 15; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { uint32_t word = buf[k]; - if((word & 0xFFFFFF80)==0) { // 1-byte (ASCII) + if ((word & 0xFFFFFF80) == 0) { // 1-byte (ASCII) *utf8_output++ = char(word); - } else if((word & 0xFFFFF800)==0) { // 2-byte - *utf8_output++ = char((word>>6) | 0b11000000); + } else if ((word & 0xFFFFF800) == 0) { // 2-byte + *utf8_output++ = char((word >> 6) | 0b11000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); - } else if((word & 0xFFFF0000 )==0) { // 3-byte - if (word >= 0xD800 && word <= 0xDFFF) { return std::make_pair(nullptr, utf8_output); } - *utf8_output++ = char((word>>12) | 0b11100000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + } else if ((word & 0xFFFF0000) == 0) { // 3-byte + if (word >= 0xD800 && word <= 0xDFFF) { + return std::make_pair(nullptr, utf8_output); + } + *utf8_output++ = char((word >> 12) | 0b11100000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); - } else { // 4-byte - if (word > 0x10FFFF) { return std::make_pair(nullptr, utf8_output); } - *utf8_output++ = char((word>>18) | 0b11110000); - *utf8_output++ = char(((word>>12) & 0b111111) | 0b10000000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + } else { // 4-byte + if (word > 0x10FFFF) { + return std::make_pair(nullptr, utf8_output); + } + *utf8_output++ = char((word >> 18) | 0b11110000); + *utf8_output++ = char(((word >> 12) & 0b111111) | 0b10000000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); } } @@ -26390,19 +27170,23 @@ std::pair avx2_convert_utf32_to_utf8(const char32_t* buf // check for invalid input const __m256i v_10ffff = _mm256_set1_epi32((uint32_t)0x10ffff); - if(static_cast(_mm256_movemask_epi8(_mm256_cmpeq_epi32(_mm256_max_epu32(running_max, v_10ffff), v_10ffff))) != 0xffffffff) { + if (static_cast(_mm256_movemask_epi8(_mm256_cmpeq_epi32( + _mm256_max_epu32(running_max, v_10ffff), v_10ffff))) != 0xffffffff) { return std::make_pair(nullptr, utf8_output); } - if (static_cast(_mm256_movemask_epi8(forbidden_bytemask)) != 0) { return std::make_pair(nullptr, utf8_output); } + if (static_cast(_mm256_movemask_epi8(forbidden_bytemask)) != 0) { + return std::make_pair(nullptr, utf8_output); + } return std::make_pair(buf, utf8_output); } - -std::pair avx2_convert_utf32_to_utf8_with_errors(const char32_t* buf, size_t len, char* utf8_output) { - const char32_t* end = buf + len; - const char32_t* start = buf; +std::pair +avx2_convert_utf32_to_utf8_with_errors(const char32_t *buf, size_t len, + char *utf8_output) { + const char32_t *end = buf + len; + const char32_t *start = buf; const __m256i v_0000 = _mm256_setzero_si256(); const __m256i v_ffff0000 = _mm256_set1_epi32((uint32_t)0xffff0000); @@ -26412,40 +27196,53 @@ std::pair avx2_convert_utf32_to_utf8_with_errors(const char32_t* const __m256i v_7fffffff = _mm256_set1_epi32((uint32_t)0x7fffffff); const __m256i v_10ffff = _mm256_set1_epi32((uint32_t)0x10ffff); - const size_t safety_margin = 12; // to avoid overruns, see issue https://github.com/simdutf/simdutf/issues/92 + const size_t safety_margin = + 12; // to avoid overruns, see issue + // https://github.com/simdutf/simdutf/issues/92 while (end - buf >= std::ptrdiff_t(16 + safety_margin)) { - __m256i in = _mm256_loadu_si256((__m256i*)buf); - __m256i nextin = _mm256_loadu_si256((__m256i*)buf+1); + __m256i in = _mm256_loadu_si256((__m256i *)buf); + __m256i nextin = _mm256_loadu_si256((__m256i *)buf + 1); // Check for too large input - const __m256i max_input = _mm256_max_epu32(_mm256_max_epu32(in, nextin), v_10ffff); - if(static_cast(_mm256_movemask_epi8(_mm256_cmpeq_epi32(max_input, v_10ffff))) != 0xffffffff) { - return std::make_pair(result(error_code::TOO_LARGE, buf - start), utf8_output); + const __m256i max_input = + _mm256_max_epu32(_mm256_max_epu32(in, nextin), v_10ffff); + if (static_cast(_mm256_movemask_epi8( + _mm256_cmpeq_epi32(max_input, v_10ffff))) != 0xffffffff) { + return std::make_pair(result(error_code::TOO_LARGE, buf - start), + utf8_output); } - // Pack 32-bit UTF-32 code units to 16-bit UTF-16 code units with unsigned saturation - __m256i in_16 = _mm256_packus_epi32(_mm256_and_si256(in, v_7fffffff), _mm256_and_si256(nextin, v_7fffffff)); + // Pack 32-bit UTF-32 code units to 16-bit UTF-16 code units with unsigned + // saturation + __m256i in_16 = _mm256_packus_epi32(_mm256_and_si256(in, v_7fffffff), + _mm256_and_si256(nextin, v_7fffffff)); in_16 = _mm256_permute4x64_epi64(in_16, 0b11011000); - // Try to apply UTF-16 => UTF-8 routine on 256 bits (haswell/avx2_convert_utf16_to_utf8.cpp) + // Try to apply UTF-16 => UTF-8 routine on 256 bits + // (haswell/avx2_convert_utf16_to_utf8.cpp) - if(_mm256_testz_si256(in_16, v_ff80)) { // ASCII fast path!!!! + if (_mm256_testz_si256(in_16, v_ff80)) { // ASCII fast path!!!! // 1. pack the bytes - const __m128i utf8_packed = _mm_packus_epi16(_mm256_castsi256_si128(in_16),_mm256_extractf128_si256(in_16,1)); + const __m128i utf8_packed = _mm_packus_epi16( + _mm256_castsi256_si128(in_16), _mm256_extractf128_si256(in_16, 1)); // 2. store (16 bytes) - _mm_storeu_si128((__m128i*)utf8_output, utf8_packed); + _mm_storeu_si128((__m128i *)utf8_output, utf8_packed); // 3. adjust pointers buf += 16; utf8_output += 16; continue; // we are done for this round! } // no bits set above 7th bit - const __m256i one_byte_bytemask = _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_ff80), v_0000); - const uint32_t one_byte_bitmask = static_cast(_mm256_movemask_epi8(one_byte_bytemask)); + const __m256i one_byte_bytemask = + _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_ff80), v_0000); + const uint32_t one_byte_bitmask = + static_cast(_mm256_movemask_epi8(one_byte_bytemask)); // no bits set above 11th bit - const __m256i one_or_two_bytes_bytemask = _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_f800), v_0000); - const uint32_t one_or_two_bytes_bitmask = static_cast(_mm256_movemask_epi8(one_or_two_bytes_bytemask)); + const __m256i one_or_two_bytes_bytemask = + _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_f800), v_0000); + const uint32_t one_or_two_bytes_bitmask = + static_cast(_mm256_movemask_epi8(one_or_two_bytes_bytemask)); if (one_or_two_bytes_bitmask == 0xffffffff) { // 1. prepare 2-byte values // input 16-bit word : [0000|0aaa|aabb|bbbb] x 8 @@ -26465,25 +27262,32 @@ std::pair avx2_convert_utf32_to_utf8_with_errors(const char32_t* const __m256i t4 = _mm256_or_si256(t3, v_c080); // 2. merge ASCII and 2-byte codewords - const __m256i utf8_unpacked = _mm256_blendv_epi8(t4, in_16, one_byte_bytemask); + const __m256i utf8_unpacked = + _mm256_blendv_epi8(t4, in_16, one_byte_bytemask); // 3. prepare bitmask for 8-bit lookup const uint32_t M0 = one_byte_bitmask & 0x55555555; const uint32_t M1 = M0 >> 7; - const uint32_t M2 = (M1 | M0) & 0x00ff00ff; + const uint32_t M2 = (M1 | M0) & 0x00ff00ff; // 4. pack the bytes - const uint8_t* row = &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2)][0]; - const uint8_t* row_2 = &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2>>16)][0]; + const uint8_t *row = + &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2)][0]; + const uint8_t *row_2 = + &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[uint8_t(M2 >> + 16)][0]; - const __m128i shuffle = _mm_loadu_si128((__m128i*)(row + 1)); - const __m128i shuffle_2 = _mm_loadu_si128((__m128i*)(row_2 + 1)); + const __m128i shuffle = _mm_loadu_si128((__m128i *)(row + 1)); + const __m128i shuffle_2 = _mm_loadu_si128((__m128i *)(row_2 + 1)); - const __m256i utf8_packed = _mm256_shuffle_epi8(utf8_unpacked, _mm256_setr_m128i(shuffle,shuffle_2)); + const __m256i utf8_packed = _mm256_shuffle_epi8( + utf8_unpacked, _mm256_setr_m128i(shuffle, shuffle_2)); // 5. store bytes - _mm_storeu_si128((__m128i*)utf8_output, _mm256_castsi256_si128(utf8_packed)); + _mm_storeu_si128((__m128i *)utf8_output, + _mm256_castsi256_si128(utf8_packed)); utf8_output += row[0]; - _mm_storeu_si128((__m128i*)utf8_output, _mm256_extractf128_si256(utf8_packed,1)); + _mm_storeu_si128((__m128i *)utf8_output, + _mm256_extractf128_si256(utf8_packed, 1)); utf8_output += row_2[0]; // 6. adjust pointers @@ -26491,27 +27295,34 @@ std::pair avx2_convert_utf32_to_utf8_with_errors(const char32_t* continue; } // Must check for overflow in packing - const __m256i saturation_bytemask = _mm256_cmpeq_epi32(_mm256_and_si256(_mm256_or_si256(in, nextin), v_ffff0000), v_0000); - const uint32_t saturation_bitmask = static_cast(_mm256_movemask_epi8(saturation_bytemask)); + const __m256i saturation_bytemask = _mm256_cmpeq_epi32( + _mm256_and_si256(_mm256_or_si256(in, nextin), v_ffff0000), v_0000); + const uint32_t saturation_bitmask = + static_cast(_mm256_movemask_epi8(saturation_bytemask)); if (saturation_bitmask == 0xffffffff) { // case: code units from register produce either 1, 2 or 3 UTF-8 bytes // Check for illegal surrogate code units const __m256i v_d800 = _mm256_set1_epi16((uint16_t)0xd800); - const __m256i forbidden_bytemask = _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_f800), v_d800); - if (static_cast(_mm256_movemask_epi8(forbidden_bytemask)) != 0x0) { - return std::make_pair(result(error_code::SURROGATE, buf - start), utf8_output); + const __m256i forbidden_bytemask = + _mm256_cmpeq_epi16(_mm256_and_si256(in_16, v_f800), v_d800); + if (static_cast(_mm256_movemask_epi8(forbidden_bytemask)) != + 0x0) { + return std::make_pair(result(error_code::SURROGATE, buf - start), + utf8_output); } - const __m256i dup_even = _mm256_setr_epi16(0x0000, 0x0202, 0x0404, 0x0606, - 0x0808, 0x0a0a, 0x0c0c, 0x0e0e, - 0x0000, 0x0202, 0x0404, 0x0606, - 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); + const __m256i dup_even = _mm256_setr_epi16( + 0x0000, 0x0202, 0x0404, 0x0606, 0x0808, 0x0a0a, 0x0c0c, 0x0e0e, + 0x0000, 0x0202, 0x0404, 0x0606, 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); /* In this branch we handle three cases: - 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - single UFT-8 byte - 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two UTF-8 bytes - 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - three UTF-8 bytes + 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - + single UFT-8 byte + 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two + UTF-8 bytes + 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - + three UTF-8 bytes We expand the input word (16-bit) into two code units (32-bit), thus we have room for four bytes. However, we need five distinct bit @@ -26538,7 +27349,7 @@ std::pair avx2_convert_utf32_to_utf8_with_errors(const char32_t* // [bbcc|cccc|bbcc|cccc] => [00cc|cccc|0bcc|cccc] const __m256i t1 = _mm256_and_si256(t0, simdutf_vec(0b0011111101111111)); // [00cc|cccc|0bcc|cccc] => [10cc|cccc|0bcc|cccc] - const __m256i t2 = _mm256_or_si256 (t1, simdutf_vec(0b1000000000000000)); + const __m256i t2 = _mm256_or_si256(t1, simdutf_vec(0b1000000000000000)); // [aaaa|bbbb|bbcc|cccc] => [0000|aaaa|bbbb|bbcc] const __m256i s0 = _mm256_srli_epi16(in_16, 4); @@ -26548,7 +27359,8 @@ std::pair avx2_convert_utf32_to_utf8_with_errors(const char32_t* const __m256i s2 = _mm256_maddubs_epi16(s1, simdutf_vec(0x0140)); // [00bb|bbbb|0000|aaaa] => [11bb|bbbb|1110|aaaa] const __m256i s3 = _mm256_or_si256(s2, simdutf_vec(0b1100000011100000)); - const __m256i m0 = _mm256_andnot_si256(one_or_two_bytes_bytemask, simdutf_vec(0b0100000000000000)); + const __m256i m0 = _mm256_andnot_si256(one_or_two_bytes_bytemask, + simdutf_vec(0b0100000000000000)); const __m256i s4 = _mm256_xor_si256(s3, m0); #undef simdutf_vec @@ -26559,78 +27371,95 @@ std::pair avx2_convert_utf32_to_utf8_with_errors(const char32_t* // 5. compress 32-bit code units into 1, 2 or 3 bytes -- 2 x shuffle const uint32_t mask = (one_byte_bitmask & 0x55555555) | (one_or_two_bytes_bitmask & 0xaaaaaaaa); - // Due to the wider registers, the following path is less likely to be useful. + // Due to the wider registers, the following path is less likely to be + // useful. /*if(mask == 0) { // We only have three-byte code units. Use fast path. - const __m256i shuffle = _mm256_setr_epi8(2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1, 2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1); - const __m256i utf8_0 = _mm256_shuffle_epi8(out0, shuffle); - const __m256i utf8_1 = _mm256_shuffle_epi8(out1, shuffle); + const __m256i shuffle = + _mm256_setr_epi8(2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1, + 2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1); const __m256i utf8_0 = + _mm256_shuffle_epi8(out0, shuffle); const __m256i utf8_1 = + _mm256_shuffle_epi8(out1, shuffle); _mm_storeu_si128((__m128i*)utf8_output, _mm256_castsi256_si128(utf8_0)); utf8_output += 12; _mm_storeu_si128((__m128i*)utf8_output, _mm256_castsi256_si128(utf8_1)); utf8_output += 12; - _mm_storeu_si128((__m128i*)utf8_output, _mm256_extractf128_si256(utf8_0,1)); - utf8_output += 12; - _mm_storeu_si128((__m128i*)utf8_output, _mm256_extractf128_si256(utf8_1,1)); - utf8_output += 12; - buf += 16; + _mm_storeu_si128((__m128i*)utf8_output, + _mm256_extractf128_si256(utf8_0,1)); utf8_output += 12; + _mm_storeu_si128((__m128i*)utf8_output, + _mm256_extractf128_si256(utf8_1,1)); utf8_output += 12; buf += 16; continue; }*/ const uint8_t mask0 = uint8_t(mask); - const uint8_t* row0 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; - const __m128i shuffle0 = _mm_loadu_si128((__m128i*)(row0 + 1)); - const __m128i utf8_0 = _mm_shuffle_epi8(_mm256_castsi256_si128(out0), shuffle0); + const uint8_t *row0 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; + const __m128i shuffle0 = _mm_loadu_si128((__m128i *)(row0 + 1)); + const __m128i utf8_0 = + _mm_shuffle_epi8(_mm256_castsi256_si128(out0), shuffle0); const uint8_t mask1 = static_cast(mask >> 8); - const uint8_t* row1 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; - const __m128i shuffle1 = _mm_loadu_si128((__m128i*)(row1 + 1)); - const __m128i utf8_1 = _mm_shuffle_epi8(_mm256_castsi256_si128(out1), shuffle1); + const uint8_t *row1 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; + const __m128i shuffle1 = _mm_loadu_si128((__m128i *)(row1 + 1)); + const __m128i utf8_1 = + _mm_shuffle_epi8(_mm256_castsi256_si128(out1), shuffle1); const uint8_t mask2 = static_cast(mask >> 16); - const uint8_t* row2 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask2][0]; - const __m128i shuffle2 = _mm_loadu_si128((__m128i*)(row2 + 1)); - const __m128i utf8_2 = _mm_shuffle_epi8(_mm256_extractf128_si256(out0,1), shuffle2); - + const uint8_t *row2 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask2][0]; + const __m128i shuffle2 = _mm_loadu_si128((__m128i *)(row2 + 1)); + const __m128i utf8_2 = + _mm_shuffle_epi8(_mm256_extractf128_si256(out0, 1), shuffle2); const uint8_t mask3 = static_cast(mask >> 24); - const uint8_t* row3 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask3][0]; - const __m128i shuffle3 = _mm_loadu_si128((__m128i*)(row3 + 1)); - const __m128i utf8_3 = _mm_shuffle_epi8(_mm256_extractf128_si256(out1,1), shuffle3); + const uint8_t *row3 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask3][0]; + const __m128i shuffle3 = _mm_loadu_si128((__m128i *)(row3 + 1)); + const __m128i utf8_3 = + _mm_shuffle_epi8(_mm256_extractf128_si256(out1, 1), shuffle3); - _mm_storeu_si128((__m128i*)utf8_output, utf8_0); + _mm_storeu_si128((__m128i *)utf8_output, utf8_0); utf8_output += row0[0]; - _mm_storeu_si128((__m128i*)utf8_output, utf8_1); + _mm_storeu_si128((__m128i *)utf8_output, utf8_1); utf8_output += row1[0]; - _mm_storeu_si128((__m128i*)utf8_output, utf8_2); + _mm_storeu_si128((__m128i *)utf8_output, utf8_2); utf8_output += row2[0]; - _mm_storeu_si128((__m128i*)utf8_output, utf8_3); + _mm_storeu_si128((__m128i *)utf8_output, utf8_3); utf8_output += row3[0]; buf += 16; } else { - // case: at least one 32-bit word is larger than 0xFFFF <=> it will produce four UTF-8 bytes. - // Let us do a scalar fallback. - // It may seem wasteful to use scalar code, but being efficient with SIMD - // may require large, non-trivial tables? + // case: at least one 32-bit word is larger than 0xFFFF <=> it will + // produce four UTF-8 bytes. Let us do a scalar fallback. It may seem + // wasteful to use scalar code, but being efficient with SIMD may require + // large, non-trivial tables? size_t forward = 15; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { uint32_t word = buf[k]; - if((word & 0xFFFFFF80)==0) { // 1-byte (ASCII) + if ((word & 0xFFFFFF80) == 0) { // 1-byte (ASCII) *utf8_output++ = char(word); - } else if((word & 0xFFFFF800)==0) { // 2-byte - *utf8_output++ = char((word>>6) | 0b11000000); + } else if ((word & 0xFFFFF800) == 0) { // 2-byte + *utf8_output++ = char((word >> 6) | 0b11000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); - } else if((word & 0xFFFF0000 )==0) { // 3-byte - if (word >= 0xD800 && word <= 0xDFFF) { return std::make_pair(result(error_code::SURROGATE, buf - start + k), utf8_output); } - *utf8_output++ = char((word>>12) | 0b11100000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + } else if ((word & 0xFFFF0000) == 0) { // 3-byte + if (word >= 0xD800 && word <= 0xDFFF) { + return std::make_pair( + result(error_code::SURROGATE, buf - start + k), utf8_output); + } + *utf8_output++ = char((word >> 12) | 0b11100000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); - } else { // 4-byte - if (word > 0x10FFFF) { return std::make_pair(result(error_code::TOO_LARGE, buf - start + k), utf8_output); } - *utf8_output++ = char((word>>18) | 0b11110000); - *utf8_output++ = char(((word>>12) & 0b111111) | 0b10000000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + } else { // 4-byte + if (word > 0x10FFFF) { + return std::make_pair( + result(error_code::TOO_LARGE, buf - start + k), utf8_output); + } + *utf8_output++ = char((word >> 18) | 0b11110000); + *utf8_output++ = char(((word >> 12) & 0b111111) | 0b10000000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); } } @@ -26643,55 +27472,75 @@ std::pair avx2_convert_utf32_to_utf8_with_errors(const char32_t* /* end file src/haswell/avx2_convert_utf32_to_utf8.cpp */ /* begin file src/haswell/avx2_convert_utf32_to_utf16.cpp */ template -std::pair avx2_convert_utf32_to_utf16(const char32_t* buf, size_t len, char16_t* utf16_output) { - const char32_t* end = buf + len; +std::pair +avx2_convert_utf32_to_utf16(const char32_t *buf, size_t len, + char16_t *utf16_output) { + const char32_t *end = buf + len; - const size_t safety_margin = 12; // to avoid overruns, see issue https://github.com/simdutf/simdutf/issues/92 + const size_t safety_margin = + 12; // to avoid overruns, see issue + // https://github.com/simdutf/simdutf/issues/92 __m256i forbidden_bytemask = _mm256_setzero_si256(); - while (end - buf >= std::ptrdiff_t(8 + safety_margin)) { - __m256i in = _mm256_loadu_si256((__m256i*)buf); + __m256i in = _mm256_loadu_si256((__m256i *)buf); const __m256i v_00000000 = _mm256_setzero_si256(); const __m256i v_ffff0000 = _mm256_set1_epi32((int32_t)0xffff0000); // no bits set above 16th bit <=> can pack to UTF16 without surrogate pairs - const __m256i saturation_bytemask = _mm256_cmpeq_epi32(_mm256_and_si256(in, v_ffff0000), v_00000000); - const uint32_t saturation_bitmask = static_cast(_mm256_movemask_epi8(saturation_bytemask)); + const __m256i saturation_bytemask = + _mm256_cmpeq_epi32(_mm256_and_si256(in, v_ffff0000), v_00000000); + const uint32_t saturation_bitmask = + static_cast(_mm256_movemask_epi8(saturation_bytemask)); if (saturation_bitmask == 0xffffffff) { const __m256i v_f800 = _mm256_set1_epi32((uint32_t)0xf800); const __m256i v_d800 = _mm256_set1_epi32((uint32_t)0xd800); - forbidden_bytemask = _mm256_or_si256(forbidden_bytemask, _mm256_cmpeq_epi32(_mm256_and_si256(in, v_f800), v_d800)); + forbidden_bytemask = _mm256_or_si256( + forbidden_bytemask, + _mm256_cmpeq_epi32(_mm256_and_si256(in, v_f800), v_d800)); - __m128i utf16_packed = _mm_packus_epi32(_mm256_castsi256_si128(in),_mm256_extractf128_si256(in,1)); + __m128i utf16_packed = _mm_packus_epi32(_mm256_castsi256_si128(in), + _mm256_extractf128_si256(in, 1)); if (big_endian) { - const __m128i swap = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + const __m128i swap = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); utf16_packed = _mm_shuffle_epi8(utf16_packed, swap); } - _mm_storeu_si128((__m128i*)utf16_output, utf16_packed); + _mm_storeu_si128((__m128i *)utf16_output, utf16_packed); utf16_output += 8; buf += 8; } else { size_t forward = 7; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { uint32_t word = buf[k]; - if((word & 0xFFFF0000)==0) { + if ((word & 0xFFFF0000) == 0) { // will not generate a surrogate pair - if (word >= 0xD800 && word <= 0xDFFF) { return std::make_pair(nullptr, utf16_output); } - *utf16_output++ = big_endian ? char16_t((uint16_t(word) >> 8) | (uint16_t(word) << 8)) : char16_t(word); + if (word >= 0xD800 && word <= 0xDFFF) { + return std::make_pair(nullptr, utf16_output); + } + *utf16_output++ = + big_endian + ? char16_t((uint16_t(word) >> 8) | (uint16_t(word) << 8)) + : char16_t(word); } else { // will generate a surrogate pair - if (word > 0x10FFFF) { return std::make_pair(nullptr, utf16_output); } + if (word > 0x10FFFF) { + return std::make_pair(nullptr, utf16_output); + } word -= 0x10000; uint16_t high_surrogate = uint16_t(0xD800 + (word >> 10)); uint16_t low_surrogate = uint16_t(0xDC00 + (word & 0x3FF)); if (big_endian) { - high_surrogate = uint16_t((high_surrogate >> 8) | (high_surrogate << 8)); - low_surrogate = uint16_t((low_surrogate >> 8) | (low_surrogate << 8)); + high_surrogate = + uint16_t((high_surrogate >> 8) | (high_surrogate << 8)); + low_surrogate = + uint16_t((low_surrogate >> 8) | (low_surrogate << 8)); } *utf16_output++ = char16_t(high_surrogate); *utf16_output++ = char16_t(low_surrogate); @@ -26702,64 +27551,89 @@ std::pair avx2_convert_utf32_to_utf16(const char32_t } // check for invalid input - if (static_cast(_mm256_movemask_epi8(forbidden_bytemask)) != 0) { return std::make_pair(nullptr, utf16_output); } + if (static_cast(_mm256_movemask_epi8(forbidden_bytemask)) != 0) { + return std::make_pair(nullptr, utf16_output); + } return std::make_pair(buf, utf16_output); } - template -std::pair avx2_convert_utf32_to_utf16_with_errors(const char32_t* buf, size_t len, char16_t* utf16_output) { - const char32_t* start = buf; - const char32_t* end = buf + len; +std::pair +avx2_convert_utf32_to_utf16_with_errors(const char32_t *buf, size_t len, + char16_t *utf16_output) { + const char32_t *start = buf; + const char32_t *end = buf + len; - const size_t safety_margin = 12; // to avoid overruns, see issue https://github.com/simdutf/simdutf/issues/92 + const size_t safety_margin = + 12; // to avoid overruns, see issue + // https://github.com/simdutf/simdutf/issues/92 while (end - buf >= std::ptrdiff_t(8 + safety_margin)) { - __m256i in = _mm256_loadu_si256((__m256i*)buf); + __m256i in = _mm256_loadu_si256((__m256i *)buf); const __m256i v_00000000 = _mm256_setzero_si256(); const __m256i v_ffff0000 = _mm256_set1_epi32((int32_t)0xffff0000); // no bits set above 16th bit <=> can pack to UTF16 without surrogate pairs - const __m256i saturation_bytemask = _mm256_cmpeq_epi32(_mm256_and_si256(in, v_ffff0000), v_00000000); - const uint32_t saturation_bitmask = static_cast(_mm256_movemask_epi8(saturation_bytemask)); + const __m256i saturation_bytemask = + _mm256_cmpeq_epi32(_mm256_and_si256(in, v_ffff0000), v_00000000); + const uint32_t saturation_bitmask = + static_cast(_mm256_movemask_epi8(saturation_bytemask)); if (saturation_bitmask == 0xffffffff) { const __m256i v_f800 = _mm256_set1_epi32((uint32_t)0xf800); const __m256i v_d800 = _mm256_set1_epi32((uint32_t)0xd800); - const __m256i forbidden_bytemask = _mm256_cmpeq_epi32(_mm256_and_si256(in, v_f800), v_d800); - if (static_cast(_mm256_movemask_epi8(forbidden_bytemask)) != 0x0) { - return std::make_pair(result(error_code::SURROGATE, buf - start), utf16_output); + const __m256i forbidden_bytemask = + _mm256_cmpeq_epi32(_mm256_and_si256(in, v_f800), v_d800); + if (static_cast(_mm256_movemask_epi8(forbidden_bytemask)) != + 0x0) { + return std::make_pair(result(error_code::SURROGATE, buf - start), + utf16_output); } - __m128i utf16_packed = _mm_packus_epi32(_mm256_castsi256_si128(in),_mm256_extractf128_si256(in,1)); + __m128i utf16_packed = _mm_packus_epi32(_mm256_castsi256_si128(in), + _mm256_extractf128_si256(in, 1)); if (big_endian) { - const __m128i swap = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + const __m128i swap = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); utf16_packed = _mm_shuffle_epi8(utf16_packed, swap); } - _mm_storeu_si128((__m128i*)utf16_output, utf16_packed); + _mm_storeu_si128((__m128i *)utf16_output, utf16_packed); utf16_output += 8; buf += 8; } else { size_t forward = 7; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { uint32_t word = buf[k]; - if((word & 0xFFFF0000)==0) { + if ((word & 0xFFFF0000) == 0) { // will not generate a surrogate pair - if (word >= 0xD800 && word <= 0xDFFF) { return std::make_pair(result(error_code::SURROGATE, buf - start + k), utf16_output); } - *utf16_output++ = big_endian ? char16_t((uint16_t(word) >> 8) | (uint16_t(word) << 8)) : char16_t(word); + if (word >= 0xD800 && word <= 0xDFFF) { + return std::make_pair( + result(error_code::SURROGATE, buf - start + k), utf16_output); + } + *utf16_output++ = + big_endian + ? char16_t((uint16_t(word) >> 8) | (uint16_t(word) << 8)) + : char16_t(word); } else { // will generate a surrogate pair - if (word > 0x10FFFF) { return std::make_pair(result(error_code::TOO_LARGE, buf - start + k), utf16_output); } + if (word > 0x10FFFF) { + return std::make_pair( + result(error_code::TOO_LARGE, buf - start + k), utf16_output); + } word -= 0x10000; uint16_t high_surrogate = uint16_t(0xD800 + (word >> 10)); uint16_t low_surrogate = uint16_t(0xDC00 + (word & 0x3FF)); if (big_endian) { - high_surrogate = uint16_t((high_surrogate >> 8) | (high_surrogate << 8)); - low_surrogate = uint16_t((low_surrogate >> 8) | (low_surrogate << 8)); + high_surrogate = + uint16_t((high_surrogate >> 8) | (high_surrogate << 8)); + low_surrogate = + uint16_t((low_surrogate >> 8) | (low_surrogate << 8)); } *utf16_output++ = char16_t(high_surrogate); *utf16_output++ = char16_t(low_surrogate); @@ -26781,27 +27655,29 @@ std::pair avx2_convert_utf32_to_utf16_with_errors(const char3 // are accessed. // It returns how many bytes were consumed (up to 12). size_t convert_masked_utf8_to_latin1(const char *input, - uint64_t utf8_end_of_code_point_mask, - char *&latin1_output) { + uint64_t utf8_end_of_code_point_mask, + char *&latin1_output) { // we use an approach where we try to process up to 12 input bytes. // Why 12 input bytes and not 16? Because we are concerned with the size of // the lookup tables. Also 12 is nicely divisible by two and three. // // - // Optimization note: our main path below is load-latency dependent. Thus it is maybe - // beneficial to have fast paths that depend on branch prediction but have less latency. - // This results in more instructions but, potentially, also higher speeds. + // Optimization note: our main path below is load-latency dependent. Thus it + // is maybe beneficial to have fast paths that depend on branch prediction but + // have less latency. This results in more instructions but, potentially, also + // higher speeds. // const __m128i in = _mm_loadu_si128((__m128i *)input); const uint16_t input_utf8_end_of_code_point_mask = - utf8_end_of_code_point_mask & 0xfff; // we are only processing 12 bytes in case it is not all ASCII + utf8_end_of_code_point_mask & + 0xfff; // we are only processing 12 bytes in case it is not all ASCII - if(utf8_end_of_code_point_mask == 0xfff) { + if (utf8_end_of_code_point_mask == 0xfff) { // We process the data in chunks of 12 bytes. _mm_storeu_si128(reinterpret_cast<__m128i *>(latin1_output), in); latin1_output += 12; // We wrote 12 characters. - return 12; // We consumed 1 bytes. + return 12; // We consumed 1 bytes. } /// We do not have a fast path available, so we fallback. const uint8_t idx = @@ -26809,22 +27685,25 @@ size_t convert_masked_utf8_to_latin1(const char *input, const uint8_t consumed = tables::utf8_to_utf16::utf8bigindex[input_utf8_end_of_code_point_mask][1]; // this indicates an invalid input: - if(idx >= 64) { return consumed; } - // Here we should have (idx < 64), if not, there is a bug in the validation or elsewhere. - // SIX (6) input code-code units - // this is a relatively easy scenario - // we process SIX (6) input code-code units. The max length in bytes of six code - // code units spanning between 1 and 2 bytes each is 12 bytes. On processors - // where pdep/pext is fast, we might be able to use a small lookup table. + if (idx >= 64) { + return consumed; + } + // Here we should have (idx < 64), if not, there is a bug in the validation or + // elsewhere. SIX (6) input code-code units this is a relatively easy scenario + // we process SIX (6) input code-code units. The max length in bytes of six + // code code units spanning between 1 and 2 bytes each is 12 bytes. On + // processors where pdep/pext is fast, we might be able to use a small lookup + // table. const __m128i sh = - _mm_loadu_si128((const __m128i *)tables::utf8_to_utf16::shufutf8[idx]); + _mm_loadu_si128((const __m128i *)tables::utf8_to_utf16::shufutf8[idx]); const __m128i perm = _mm_shuffle_epi8(in, sh); const __m128i ascii = _mm_and_si128(perm, _mm_set1_epi16(0x7f)); const __m128i highbyte = _mm_and_si128(perm, _mm_set1_epi16(0x1f00)); __m128i composed = _mm_or_si128(ascii, _mm_srli_epi16(highbyte, 2)); - const __m128i latin1_packed = _mm_packus_epi16(composed,composed); + const __m128i latin1_packed = _mm_packus_epi16(composed, composed); // writing 8 bytes even though we only care about the first 6 bytes. - // performance note: it would be faster to use _mm_storeu_si128, we should investigate. + // performance note: it would be faster to use _mm_storeu_si128, we should + // investigate. _mm_storel_epi64((__m128i *)latin1_output, latin1_packed); latin1_output += 6; // We wrote 6 bytes. return consumed; @@ -26889,7 +27768,8 @@ simdutf_really_inline __m256i lookup_pshufb_improved(const __m256i input) { } template -size_t encode_base64(char *dst, const char *src, size_t srclen, base64_options options) { +size_t encode_base64(char *dst, const char *src, size_t srclen, + base64_options options) { // credit: Wojciech Muła const uint8_t *input = (const uint8_t *)src; @@ -27088,8 +27968,9 @@ static inline uint32_t to_base64_mask(__m256i *src, bool *error) { if (base64_url) { check_asso = - _mm256_setr_epi8(0xD,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x3,0x7,0xB,0xE,0xB,0x6, - 0xD,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x3,0x7,0xB,0xE,0xB,0x6); + _mm256_setr_epi8(0xD, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, + 0x7, 0xB, 0xE, 0xB, 0x6, 0xD, 0x1, 0x1, 0x1, 0x1, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x3, 0x7, 0xB, 0xE, 0xB, 0x6); } else { check_asso = _mm256_setr_epi8( @@ -27100,8 +27981,13 @@ static inline uint32_t to_base64_mask(__m256i *src, bool *error) { __m256i check_values; if (base64_url) { check_values = _mm256_setr_epi8( - uint8_t(0x80),uint8_t(0x80),uint8_t(0x80),uint8_t(0x80),uint8_t(0xCF),uint8_t(0xBF),uint8_t(0xB6),uint8_t(0xA6),uint8_t(0xB5),uint8_t(0xA1),0x0,uint8_t(0x80),0x0,uint8_t(0x80),0x0,uint8_t(0x80), - uint8_t(0x80),uint8_t(0x80),uint8_t(0x80),uint8_t(0x80),uint8_t(0xCF),uint8_t(0xBF),uint8_t(0xB6),uint8_t(0xA6),uint8_t(0xB5),uint8_t(0xA1),0x0,uint8_t(0x80),0x0,uint8_t(0x80),0x0,uint8_t(0x80)); + uint8_t(0x80), uint8_t(0x80), uint8_t(0x80), uint8_t(0x80), + uint8_t(0xCF), uint8_t(0xBF), uint8_t(0xB6), uint8_t(0xA6), + uint8_t(0xB5), uint8_t(0xA1), 0x0, uint8_t(0x80), 0x0, uint8_t(0x80), + 0x0, uint8_t(0x80), uint8_t(0x80), uint8_t(0x80), uint8_t(0x80), + uint8_t(0x80), uint8_t(0xCF), uint8_t(0xBF), uint8_t(0xB6), + uint8_t(0xA6), uint8_t(0xB5), uint8_t(0xA1), 0x0, uint8_t(0x80), 0x0, + uint8_t(0x80), 0x0, uint8_t(0x80)); } else { check_values = _mm256_setr_epi8( int8_t(0x80), int8_t(0x80), int8_t(0x80), int8_t(0x80), int8_t(0xCF), @@ -27112,7 +27998,7 @@ static inline uint32_t to_base64_mask(__m256i *src, bool *error) { int8_t(0x86), int8_t(0xD1), int8_t(0x80), int8_t(0xB1), int8_t(0x80), int8_t(0x91), int8_t(0x80)); } - const __m256i shifted =_mm256_srli_epi32(*src, 3); + const __m256i shifted = _mm256_srli_epi32(*src, 3); const __m256i delta_hash = _mm256_avg_epu8(_mm256_shuffle_epi8(delta_asso, *src), shifted); const __m256i check_hash = @@ -27152,16 +28038,16 @@ static inline uint64_t compress_block(block64 *b, uint64_t mask, char *output) { return _mm_popcnt_u64(nmask); } -// The caller of this function is responsible to ensure that there are 64 bytes available -// from reading at src. The data is read into a block64 structure. +// The caller of this function is responsible to ensure that there are 64 bytes +// available from reading at src. The data is read into a block64 structure. static inline void load_block(block64 *b, const char *src) { b->chunks[0] = _mm256_loadu_si256(reinterpret_cast(src)); b->chunks[1] = _mm256_loadu_si256(reinterpret_cast(src + 32)); } -// The caller of this function is responsible to ensure that there are 128 bytes available -// from reading at src. The data is read into a block64 structure. +// The caller of this function is responsible to ensure that there are 128 bytes +// available from reading at src. The data is read into a block64 structure. static inline void load_block(block64 *b, const char16_t *src) { __m256i m1 = _mm256_loadu_si256(reinterpret_cast(src)); __m256i m2 = _mm256_loadu_si256(reinterpret_cast(src + 16)); @@ -27216,12 +28102,15 @@ static inline void base64_decode_block_safe(char *out, block64 *b) { template result compress_decode_base64(char *dst, const chartype *src, size_t srclen, - base64_options options) { + base64_options options, + last_chunk_handling_options last_chunk_options) { const uint8_t *to_base64 = base64_url ? tables::base64::to_base64_url_value : tables::base64::to_base64_value; - size_t equallocation = srclen; // location of the first padding character if any + size_t equallocation = + srclen; // location of the first padding character if any // skip trailing spaces - while (srclen > 0 && scalar::base64::is_eight_byte(src[srclen - 1]) && to_base64[uint8_t(src[srclen - 1])] == 64) { + while (srclen > 0 && scalar::base64::is_eight_byte(src[srclen - 1]) && + to_base64[uint8_t(src[srclen - 1])] == 64) { srclen--; } size_t equalsigns = 0; @@ -27230,7 +28119,8 @@ result compress_decode_base64(char *dst, const chartype *src, size_t srclen, srclen--; equalsigns = 1; // skip trailing spaces - while (srclen > 0 && scalar::base64::is_eight_byte(src[srclen - 1]) && to_base64[uint8_t(src[srclen - 1])] == 64) { + while (srclen > 0 && scalar::base64::is_eight_byte(src[srclen - 1]) && + to_base64[uint8_t(src[srclen - 1])] == 64) { srclen--; } if (srclen > 0 && src[srclen - 1] == '=') { @@ -27239,6 +28129,12 @@ result compress_decode_base64(char *dst, const chartype *src, size_t srclen, equalsigns = 2; } } + if (srclen == 0) { + if (equalsigns > 0) { + return {INVALID_BASE64_CHARACTER, equallocation}; + } + return {SUCCESS, 0}; + } char *end_of_safe_64byte_zone = (srclen + 3) / 4 * 3 >= 63 ? dst + (srclen + 3) / 4 * 3 - 63 : dst; @@ -27260,7 +28156,8 @@ result compress_decode_base64(char *dst, const chartype *src, size_t srclen, uint64_t badcharmask = to_base64_mask(&b, &error); if (error) { src -= 64; - while (src < srcend && scalar::base64::is_eight_byte(*src) && to_base64[uint8_t(*src)] <= 64) { + while (src < srcend && scalar::base64::is_eight_byte(*src) && + to_base64[uint8_t(*src)] <= 64) { src++; } return {error_code::INVALID_BASE64_CHARACTER, size_t(src - srcinit)}; @@ -27350,69 +28247,38 @@ result compress_decode_base64(char *dst, const chartype *src, size_t srclen, buffer_start += 4; } // we may have 1, 2 or 3 bytes left and we need to decode them so let us - // bring in src content + // backtrack int leftover = int(bufferptr - buffer_start); - if (leftover > 0) { - while (leftover < 4 && src < srcend) { - uint8_t val = to_base64[uint8_t(*src)]; - if (!scalar::base64::is_eight_byte(*src) || val > 64) { - return {error_code::INVALID_BASE64_CHARACTER, size_t(src - srcinit)}; - } - buffer_start[leftover] = char(val); - leftover += (val <= 63); - src++; - } - - if (leftover == 1) { - return {BASE64_INPUT_REMAINDER, size_t(dst - dstinit)}; - } - if (leftover == 2) { - uint32_t triple = (uint32_t(buffer_start[0]) << 3 * 6) + - (uint32_t(buffer_start[1]) << 2 * 6); - triple = scalar::utf32::swap_bytes(triple); - triple >>= 8; - std::memcpy(dst, &triple, 1); - dst += 1; - } else if (leftover == 3) { - uint32_t triple = (uint32_t(buffer_start[0]) << 3 * 6) + - (uint32_t(buffer_start[1]) << 2 * 6) + - (uint32_t(buffer_start[2]) << 1 * 6); - triple = scalar::utf32::swap_bytes(triple); - triple >>= 8; - std::memcpy(dst, &triple, 2); - dst += 2; - } else { - uint32_t triple = ((uint32_t(uint8_t(buffer_start[0])) << 3 * 6) + - (uint32_t(uint8_t(buffer_start[1])) << 2 * 6) + - (uint32_t(uint8_t(buffer_start[2])) << 1 * 6) + - (uint32_t(uint8_t(buffer_start[3])) << 0 * 6)) - << 8; - triple = scalar::utf32::swap_bytes(triple); - std::memcpy(dst, &triple, 3); - dst += 3; + while (leftover > 0) { + while (to_base64[uint8_t(*(src - 1))] == 64) { + src--; } + src--; + leftover--; } } if (src < srcend + equalsigns) { - result r = - scalar::base64::base64_tail_decode(dst, src, srcend - src, options); + result r = scalar::base64::base64_tail_decode( + dst, src, srcend - src, equalsigns, options, last_chunk_options); if (r.error == error_code::INVALID_BASE64_CHARACTER) { r.count += size_t(src - srcinit); return r; } else { r.count += size_t(dst - dstinit); } - if(r.error == error_code::SUCCESS && equalsigns > 0) { + if (last_chunk_options != stop_before_partial && + r.error == error_code::SUCCESS && equalsigns > 0) { // additional checks - if((r.count % 3 == 0) || ((r.count % 3) + 1 + equalsigns != 4)) { + if ((r.count % 3 == 0) || ((r.count % 3) + 1 + equalsigns != 4)) { r.error = error_code::INVALID_BASE64_CHARACTER; r.count = equallocation; } } return r; } - if(equalsigns > 0) { - if((size_t(dst - dstinit) % 3 == 0) || ((size_t(dst - dstinit) % 3) + 1 + equalsigns != 4)) { + if (equalsigns > 0) { + if ((size_t(dst - dstinit) % 3 == 0) || + ((size_t(dst - dstinit) % 3) + 1 + equalsigns != 4)) { return {INVALID_BASE64_CHARACTER, equallocation}; } } @@ -27429,9 +28295,9 @@ namespace simdutf { namespace haswell { namespace { -// Walks through a buffer in block-sized increments, loading the last part with spaces -template -struct buf_block_reader { +// Walks through a buffer in block-sized increments, loading the last part with +// spaces +template struct buf_block_reader { public: simdutf_really_inline buf_block_reader(const uint8_t *_buf, size_t _len); simdutf_really_inline size_t block_index(); @@ -27440,14 +28306,16 @@ struct buf_block_reader { /** * Get the last block, padded with spaces. * - * There will always be a last block, with at least 1 byte, unless len == 0 (in which case this - * function fills the buffer with spaces and returns 0. In particular, if len == STEP_SIZE there - * will be 0 full_blocks and 1 remainder block with STEP_SIZE bytes and no spaces for padding. + * There will always be a last block, with at least 1 byte, unless len == 0 + * (in which case this function fills the buffer with spaces and returns 0. In + * particular, if len == STEP_SIZE there will be 0 full_blocks and 1 remainder + * block with STEP_SIZE bytes and no spaces for padding. * * @return the number of effective characters in the last block. */ simdutf_really_inline size_t get_remainder(uint8_t *dst) const; simdutf_really_inline void advance(); + private: const uint8_t *buf; const size_t len; @@ -27456,9 +28324,10 @@ struct buf_block_reader { }; // Routines to print masks and text for debugging bitmask operations -simdutf_unused static char * format_input_text_64(const uint8_t *text) { - static char *buf = reinterpret_cast(malloc(sizeof(simd8x64) + 1)); - for (size_t i=0; i); i++) { +simdutf_unused static char *format_input_text_64(const uint8_t *text) { + static char *buf = + reinterpret_cast(malloc(sizeof(simd8x64) + 1)); + for (size_t i = 0; i < sizeof(simd8x64); i++) { buf[i] = int8_t(text[i]) < ' ' ? '_' : int8_t(text[i]); } buf[sizeof(simd8x64)] = '\0'; @@ -27466,50 +28335,64 @@ simdutf_unused static char * format_input_text_64(const uint8_t *text) { } // Routines to print masks and text for debugging bitmask operations -simdutf_unused static char * format_input_text(const simd8x64& in) { - static char *buf = reinterpret_cast(malloc(sizeof(simd8x64) + 1)); - in.store(reinterpret_cast(buf)); - for (size_t i=0; i); i++) { - if (buf[i] < ' ') { buf[i] = '_'; } +simdutf_unused static char *format_input_text(const simd8x64 &in) { + static char *buf = + reinterpret_cast(malloc(sizeof(simd8x64) + 1)); + in.store(reinterpret_cast(buf)); + for (size_t i = 0; i < sizeof(simd8x64); i++) { + if (buf[i] < ' ') { + buf[i] = '_'; + } } buf[sizeof(simd8x64)] = '\0'; return buf; } -simdutf_unused static char * format_mask(uint64_t mask) { - static char *buf = reinterpret_cast(malloc(64 + 1)); - for (size_t i=0; i<64; i++) { +simdutf_unused static char *format_mask(uint64_t mask) { + static char *buf = reinterpret_cast(malloc(64 + 1)); + for (size_t i = 0; i < 64; i++) { buf[i] = (mask & (size_t(1) << i)) ? 'X' : ' '; } buf[64] = '\0'; return buf; } -template -simdutf_really_inline buf_block_reader::buf_block_reader(const uint8_t *_buf, size_t _len) : buf{_buf}, len{_len}, lenminusstep{len < STEP_SIZE ? 0 : len - STEP_SIZE}, idx{0} {} +template +simdutf_really_inline +buf_block_reader::buf_block_reader(const uint8_t *_buf, size_t _len) + : buf{_buf}, len{_len}, lenminusstep{len < STEP_SIZE ? 0 : len - STEP_SIZE}, + idx{0} {} -template -simdutf_really_inline size_t buf_block_reader::block_index() { return idx; } +template +simdutf_really_inline size_t buf_block_reader::block_index() { + return idx; +} -template +template simdutf_really_inline bool buf_block_reader::has_full_block() const { return idx < lenminusstep; } -template -simdutf_really_inline const uint8_t *buf_block_reader::full_block() const { +template +simdutf_really_inline const uint8_t * +buf_block_reader::full_block() const { return &buf[idx]; } -template -simdutf_really_inline size_t buf_block_reader::get_remainder(uint8_t *dst) const { - if(len == idx) { return 0; } // memcpy(dst, null, 0) will trigger an error with some sanitizers - std::memset(dst, 0x20, STEP_SIZE); // std::memset STEP_SIZE because it is more efficient to write out 8 or 16 bytes at once. +template +simdutf_really_inline size_t +buf_block_reader::get_remainder(uint8_t *dst) const { + if (len == idx) { + return 0; + } // memcpy(dst, null, 0) will trigger an error with some sanitizers + std::memset(dst, 0x20, + STEP_SIZE); // std::memset STEP_SIZE because it is more efficient + // to write out 8 or 16 bytes at once. std::memcpy(dst, buf + idx, len - idx); return len - idx; } -template +template simdutf_really_inline void buf_block_reader::advance() { idx += STEP_SIZE; } @@ -27526,38 +28409,39 @@ namespace utf8_validation { using namespace simd; - simdutf_really_inline simd8 check_special_cases(const simd8 input, const simd8 prev1) { -// Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) -// Bit 1 = Too Long (ASCII followed by continuation) -// Bit 2 = Overlong 3-byte -// Bit 4 = Surrogate -// Bit 5 = Overlong 2-byte -// Bit 7 = Two Continuations - constexpr const uint8_t TOO_SHORT = 1<<0; // 11______ 0_______ - // 11______ 11______ - constexpr const uint8_t TOO_LONG = 1<<1; // 0_______ 10______ - constexpr const uint8_t OVERLONG_3 = 1<<2; // 11100000 100_____ - constexpr const uint8_t SURROGATE = 1<<4; // 11101101 101_____ - constexpr const uint8_t OVERLONG_2 = 1<<5; // 1100000_ 10______ - constexpr const uint8_t TWO_CONTS = 1<<7; // 10______ 10______ - constexpr const uint8_t TOO_LARGE = 1<<3; // 11110100 1001____ - // 11110100 101_____ - // 11110101 1001____ - // 11110101 101_____ - // 1111011_ 1001____ - // 1111011_ 101_____ - // 11111___ 1001____ - // 11111___ 101_____ - constexpr const uint8_t TOO_LARGE_1000 = 1<<6; - // 11110101 1000____ - // 1111011_ 1000____ - // 11111___ 1000____ - constexpr const uint8_t OVERLONG_4 = 1<<6; // 11110000 1000____ - - const simd8 byte_1_high = prev1.shr<4>().lookup_16( +simdutf_really_inline simd8 +check_special_cases(const simd8 input, const simd8 prev1) { + // Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) + // Bit 1 = Too Long (ASCII followed by continuation) + // Bit 2 = Overlong 3-byte + // Bit 4 = Surrogate + // Bit 5 = Overlong 2-byte + // Bit 7 = Two Continuations + constexpr const uint8_t TOO_SHORT = 1 << 0; // 11______ 0_______ + // 11______ 11______ + constexpr const uint8_t TOO_LONG = 1 << 1; // 0_______ 10______ + constexpr const uint8_t OVERLONG_3 = 1 << 2; // 11100000 100_____ + constexpr const uint8_t SURROGATE = 1 << 4; // 11101101 101_____ + constexpr const uint8_t OVERLONG_2 = 1 << 5; // 1100000_ 10______ + constexpr const uint8_t TWO_CONTS = 1 << 7; // 10______ 10______ + constexpr const uint8_t TOO_LARGE = 1 << 3; // 11110100 1001____ + // 11110100 101_____ + // 11110101 1001____ + // 11110101 101_____ + // 1111011_ 1001____ + // 1111011_ 101_____ + // 11111___ 1001____ + // 11111___ 101_____ + constexpr const uint8_t TOO_LARGE_1000 = 1 << 6; + // 11110101 1000____ + // 1111011_ 1000____ + // 11111___ 1000____ + constexpr const uint8_t OVERLONG_4 = 1 << 6; // 11110000 1000____ + + const simd8 byte_1_high = prev1.shr<4>().lookup_16( // 0_______ ________ - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, // 10______ ________ TWO_CONTS, TWO_CONTS, TWO_CONTS, TWO_CONTS, // 1100____ ________ @@ -27567,137 +28451,173 @@ using namespace simd; // 1110____ ________ TOO_SHORT | OVERLONG_3 | SURROGATE, // 1111____ ________ - TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4 - ); - constexpr const uint8_t CARRY = TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . - const simd8 byte_1_low = (prev1 & 0x0F).lookup_16( - // ____0000 ________ - CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, - // ____0001 ________ - CARRY | OVERLONG_2, - // ____001_ ________ - CARRY, - CARRY, - - // ____0100 ________ - CARRY | TOO_LARGE, - // ____0101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____011_ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - - // ____1___ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____1101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000 - ); - const simd8 byte_2_high = input.shr<4>().lookup_16( + TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4); + constexpr const uint8_t CARRY = + TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . + const simd8 byte_1_low = + (prev1 & 0x0F) + .lookup_16( + // ____0000 ________ + CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, + // ____0001 ________ + CARRY | OVERLONG_2, + // ____001_ ________ + CARRY, CARRY, + + // ____0100 ________ + CARRY | TOO_LARGE, + // ____0101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____011_ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + + // ____1___ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____1101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000); + const simd8 byte_2_high = input.shr<4>().lookup_16( // ________ 0_______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, // ________ 1000____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | OVERLONG_4, + TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | + OVERLONG_4, // ________ 1001____ TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE, // ________ 101_____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, // ________ 11______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT - ); - return (byte_1_high & byte_1_low & byte_2_high); - } - simdutf_really_inline simd8 check_multibyte_lengths(const simd8 input, - const simd8 prev_input, const simd8 sc) { - simd8 prev2 = input.prev<2>(prev_input); - simd8 prev3 = input.prev<3>(prev_input); - simd8 must23 = simd8(must_be_2_3_continuation(prev2, prev3)); - simd8 must23_80 = must23 & uint8_t(0x80); - return must23_80 ^ sc; - } + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT); + return (byte_1_high & byte_1_low & byte_2_high); +} +simdutf_really_inline simd8 +check_multibyte_lengths(const simd8 input, + const simd8 prev_input, + const simd8 sc) { + simd8 prev2 = input.prev<2>(prev_input); + simd8 prev3 = input.prev<3>(prev_input); + simd8 must23 = + simd8(must_be_2_3_continuation(prev2, prev3)); + simd8 must23_80 = must23 & uint8_t(0x80); + return must23_80 ^ sc; +} + +// +// Return nonzero if there are incomplete multibyte characters at the end of the +// block: e.g. if there is a 4-byte character, but it is 3 bytes from the end. +// +simdutf_really_inline simd8 is_incomplete(const simd8 input) { + // If the previous input's last 3 bytes match this, they're too short (they + // ended at EOF): + // ... 1111____ 111_____ 11______ + static const uint8_t max_array[32] = {255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 0b11110000u - 1, + 0b11100000u - 1, + 0b11000000u - 1}; + const simd8 max_value( + &max_array[sizeof(max_array) - sizeof(simd8)]); + return input.gt_bits(max_value); +} + +struct utf8_checker { + // If this is nonzero, there has been a UTF-8 error. + simd8 error; + // The last input we received + simd8 prev_input_block; + // Whether the last input we received was incomplete (used for ASCII fast + // path) + simd8 prev_incomplete; // - // Return nonzero if there are incomplete multibyte characters at the end of the block: - // e.g. if there is a 4-byte character, but it is 3 bytes from the end. + // Check whether the current bytes are valid UTF-8. // - simdutf_really_inline simd8 is_incomplete(const simd8 input) { - // If the previous input's last 3 bytes match this, they're too short (they ended at EOF): - // ... 1111____ 111_____ 11______ - static const uint8_t max_array[32] = { - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0b11110000u-1, 0b11100000u-1, 0b11000000u-1 - }; - const simd8 max_value(&max_array[sizeof(max_array)-sizeof(simd8)]); - return input.gt_bits(max_value); - } - - struct utf8_checker { - // If this is nonzero, there has been a UTF-8 error. - simd8 error; - // The last input we received - simd8 prev_input_block; - // Whether the last input we received was incomplete (used for ASCII fast path) - simd8 prev_incomplete; - - // - // Check whether the current bytes are valid UTF-8. - // - simdutf_really_inline void check_utf8_bytes(const simd8 input, const simd8 prev_input) { - // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ lead bytes - // (2, 3, 4-byte leads become large positive numbers instead of small negative numbers) - simd8 prev1 = input.prev<1>(prev_input); - simd8 sc = check_special_cases(input, prev1); - this->error |= check_multibyte_lengths(input, prev_input, sc); - } - - // The only problem that can happen at EOF is that a multibyte character is too short - // or a byte value too large in the last bytes: check_special_cases only checks for bytes - // too large in the first of two bytes. - simdutf_really_inline void check_eof() { - // If the previous block had incomplete UTF-8 characters at the end, an ASCII block can't - // possibly finish them. + simdutf_really_inline void check_utf8_bytes(const simd8 input, + const simd8 prev_input) { + // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ + // lead bytes (2, 3, 4-byte leads become large positive numbers instead of + // small negative numbers) + simd8 prev1 = input.prev<1>(prev_input); + simd8 sc = check_special_cases(input, prev1); + this->error |= check_multibyte_lengths(input, prev_input, sc); + } + + // The only problem that can happen at EOF is that a multibyte character is + // too short or a byte value too large in the last bytes: check_special_cases + // only checks for bytes too large in the first of two bytes. + simdutf_really_inline void check_eof() { + // If the previous block had incomplete UTF-8 characters at the end, an + // ASCII block can't possibly finish them. + this->error |= this->prev_incomplete; + } + + simdutf_really_inline void check_next_input(const simd8x64 &input) { + if (simdutf_likely(is_ascii(input))) { this->error |= this->prev_incomplete; - } - - simdutf_really_inline void check_next_input(const simd8x64& input) { - if(simdutf_likely(is_ascii(input))) { - this->error |= this->prev_incomplete; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], this->prev_input_block); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], this->prev_input_block); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - this->prev_incomplete = is_incomplete(input.chunks[simd8x64::NUM_CHUNKS-1]); - this->prev_input_block = input.chunks[simd8x64::NUM_CHUNKS-1]; - + } else { + // you might think that a for-loop would work, but under Visual Studio, it + // is not good enough. + static_assert((simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], this->prev_input_block); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], this->prev_input_block); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); } + this->prev_incomplete = + is_incomplete(input.chunks[simd8x64::NUM_CHUNKS - 1]); + this->prev_input_block = input.chunks[simd8x64::NUM_CHUNKS - 1]; } + } - // do not forget to call check_eof! - simdutf_really_inline bool errors() const { - return this->error.any_bits_set_anywhere(); - } + // do not forget to call check_eof! + simdutf_really_inline bool errors() const { + return this->error.any_bits_set_anywhere(); + } - }; // struct utf8_checker +}; // struct utf8_checker } // namespace utf8_validation using utf8_validation::utf8_checker; @@ -27715,97 +28635,109 @@ namespace utf8_validation { /** * Validates that the string is actual UTF-8. */ -template -bool generic_validate_utf8(const uint8_t * input, size_t length) { - checker c{}; - buf_block_reader<64> reader(input, length); - while (reader.has_full_block()) { - simd::simd8x64 in(reader.full_block()); - c.check_next_input(in); - reader.advance(); - } - uint8_t block[64]{}; - reader.get_remainder(block); - simd::simd8x64 in(block); +template +bool generic_validate_utf8(const uint8_t *input, size_t length) { + checker c{}; + buf_block_reader<64> reader(input, length); + while (reader.has_full_block()) { + simd::simd8x64 in(reader.full_block()); c.check_next_input(in); reader.advance(); - c.check_eof(); - return !c.errors(); + } + uint8_t block[64]{}; + reader.get_remainder(block); + simd::simd8x64 in(block); + c.check_next_input(in); + reader.advance(); + c.check_eof(); + return !c.errors(); } -bool generic_validate_utf8(const char * input, size_t length) { - return generic_validate_utf8(reinterpret_cast(input),length); +bool generic_validate_utf8(const char *input, size_t length) { + return generic_validate_utf8( + reinterpret_cast(input), length); } /** * Validates that the string is actual UTF-8 and stops on errors. */ -template -result generic_validate_utf8_with_errors(const uint8_t * input, size_t length) { - checker c{}; - buf_block_reader<64> reader(input, length); - size_t count{0}; - while (reader.has_full_block()) { - simd::simd8x64 in(reader.full_block()); - c.check_next_input(in); - if(c.errors()) { - if (count != 0) { count--; } // Sometimes the error is only detected in the next chunk - result res = scalar::utf8::rewind_and_validate_with_errors(reinterpret_cast(input), reinterpret_cast(input + count), length - count); - res.count += count; - return res; - } - reader.advance(); - count += 64; - } - uint8_t block[64]{}; - reader.get_remainder(block); - simd::simd8x64 in(block); +template +result generic_validate_utf8_with_errors(const uint8_t *input, size_t length) { + checker c{}; + buf_block_reader<64> reader(input, length); + size_t count{0}; + while (reader.has_full_block()) { + simd::simd8x64 in(reader.full_block()); c.check_next_input(in); - reader.advance(); - c.check_eof(); if (c.errors()) { - if (count != 0) { count--; } // Sometimes the error is only detected in the next chunk - result res = scalar::utf8::rewind_and_validate_with_errors(reinterpret_cast(input), reinterpret_cast(input) + count, length - count); + if (count != 0) { + count--; + } // Sometimes the error is only detected in the next chunk + result res = scalar::utf8::rewind_and_validate_with_errors( + reinterpret_cast(input), + reinterpret_cast(input + count), length - count); res.count += count; return res; - } else { - return result(error_code::SUCCESS, length); } + reader.advance(); + count += 64; + } + uint8_t block[64]{}; + reader.get_remainder(block); + simd::simd8x64 in(block); + c.check_next_input(in); + reader.advance(); + c.check_eof(); + if (c.errors()) { + if (count != 0) { + count--; + } // Sometimes the error is only detected in the next chunk + result res = scalar::utf8::rewind_and_validate_with_errors( + reinterpret_cast(input), + reinterpret_cast(input) + count, length - count); + res.count += count; + return res; + } else { + return result(error_code::SUCCESS, length); + } } -result generic_validate_utf8_with_errors(const char * input, size_t length) { - return generic_validate_utf8_with_errors(reinterpret_cast(input),length); +result generic_validate_utf8_with_errors(const char *input, size_t length) { + return generic_validate_utf8_with_errors( + reinterpret_cast(input), length); } -template -bool generic_validate_ascii(const uint8_t * input, size_t length) { - buf_block_reader<64> reader(input, length); - uint8_t blocks[64]{}; - simd::simd8x64 running_or(blocks); - while (reader.has_full_block()) { - simd::simd8x64 in(reader.full_block()); - running_or |= in; - reader.advance(); - } - uint8_t block[64]{}; - reader.get_remainder(block); - simd::simd8x64 in(block); +template +bool generic_validate_ascii(const uint8_t *input, size_t length) { + buf_block_reader<64> reader(input, length); + uint8_t blocks[64]{}; + simd::simd8x64 running_or(blocks); + while (reader.has_full_block()) { + simd::simd8x64 in(reader.full_block()); running_or |= in; - return running_or.is_ascii(); + reader.advance(); + } + uint8_t block[64]{}; + reader.get_remainder(block); + simd::simd8x64 in(block); + running_or |= in; + return running_or.is_ascii(); } -bool generic_validate_ascii(const char * input, size_t length) { - return generic_validate_ascii(reinterpret_cast(input),length); +bool generic_validate_ascii(const char *input, size_t length) { + return generic_validate_ascii( + reinterpret_cast(input), length); } -template -result generic_validate_ascii_with_errors(const uint8_t * input, size_t length) { +template +result generic_validate_ascii_with_errors(const uint8_t *input, size_t length) { buf_block_reader<64> reader(input, length); size_t count{0}; while (reader.has_full_block()) { simd::simd8x64 in(reader.full_block()); if (!in.is_ascii()) { - result res = scalar::ascii::validate_with_errors(reinterpret_cast(input + count), length - count); + result res = scalar::ascii::validate_with_errors( + reinterpret_cast(input + count), length - count); return result(res.error, count + res.count); } reader.advance(); @@ -27816,15 +28748,17 @@ result generic_validate_ascii_with_errors(const uint8_t * input, size_t length) reader.get_remainder(block); simd::simd8x64 in(block); if (!in.is_ascii()) { - result res = scalar::ascii::validate_with_errors(reinterpret_cast(input + count), length - count); + result res = scalar::ascii::validate_with_errors( + reinterpret_cast(input + count), length - count); return result(res.error, count + res.count); } else { return result(error_code::SUCCESS, length); } } -result generic_validate_ascii_with_errors(const char * input, size_t length) { - return generic_validate_ascii_with_errors(reinterpret_cast(input),length); +result generic_validate_ascii_with_errors(const char *input, size_t length) { + return generic_validate_ascii_with_errors( + reinterpret_cast(input), length); } } // namespace utf8_validation @@ -27835,7 +28769,6 @@ result generic_validate_ascii_with_errors(const char * input, size_t length) { // transcoding from UTF-8 to UTF-16 /* begin file src/generic/utf8_to_utf16/valid_utf8_to_utf16.h */ - namespace simdutf { namespace haswell { namespace { @@ -27844,36 +28777,39 @@ namespace utf8_to_utf16 { using namespace simd; template -simdutf_warn_unused size_t convert_valid(const char* input, size_t size, - char16_t* utf16_output) noexcept { - // The implementation is not specific to haswell and should be moved to the generic directory. +simdutf_warn_unused size_t convert_valid(const char *input, size_t size, + char16_t *utf16_output) noexcept { + // The implementation is not specific to haswell and should be moved to the + // generic directory. size_t pos = 0; - char16_t* start{utf16_output}; + char16_t *start{utf16_output}; const size_t safety_margin = 16; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - // this loop could be unrolled further. For example, we could process the mask - // far more than 64 bytes. + while (pos + 64 + safety_margin <= size) { + // this loop could be unrolled further. For example, we could process the + // mask far more than 64 bytes. simd8x64 in(reinterpret_cast(input + pos)); - if(in.is_ascii()) { + if (in.is_ascii()) { in.store_ascii_as_utf16(utf16_output); utf16_output += 64; pos += 64; } else { - // Slow path. We hope that the compiler will recognize that this is a slow path. - // Anything that is not a continuation mask is a 'leading byte', that is, the - // start of a new code point. + // Slow path. We hope that the compiler will recognize that this is a slow + // path. Anything that is not a continuation mask is a 'leading byte', + // that is, the start of a new code point. uint64_t utf8_continuation_mask = in.lt(-65 + 1); - // -65 is 0b10111111 in two-complement's, so largest possible continuation byte + // -65 is 0b10111111 in two-complement's, so largest possible continuation + // byte uint64_t utf8_leading_mask = ~utf8_continuation_mask; - // The *start* of code points is not so useful, rather, we want the *end* of code points. - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; + // The *start* of code points is not so useful, rather, we want the *end* + // of code points. + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; // We process in blocks of up to 12 bytes except possibly // for fast paths which may process up to 16 bytes. For the // slow path to work, we should have at least 12 input bytes left. size_t max_starting_point = (pos + 64) - 12; // Next loop is going to run at least five times when using solely // the slow/regular path, and at least four times if there are fast paths. - while(pos < max_starting_point) { + while (pos < max_starting_point) { // Performance note: our ability to compute 'consumed' and // then shift and recompute is critical. If there is a // latency of, say, 4 cycles on getting 'consumed', then @@ -27887,8 +28823,8 @@ simdutf_warn_unused size_t convert_valid(const char* input, size_t size, // Thus we may allow convert_masked_utf8_to_utf16 to process // more bytes at a time under a fast-path mode where 16 bytes // are consumed at once (e.g., when encountering ASCII). - size_t consumed = convert_masked_utf8_to_utf16(input + pos, - utf8_end_of_code_point_mask, utf16_output); + size_t consumed = convert_masked_utf8_to_utf16( + input + pos, utf8_end_of_code_point_mask, utf16_output); pos += consumed; utf8_end_of_code_point_mask >>= consumed; } @@ -27898,7 +28834,8 @@ simdutf_warn_unused size_t convert_valid(const char* input, size_t size, // 85% to 90% efficiency. } } - utf16_output += scalar::utf8_to_utf16::convert_valid(input + pos, size - pos, utf16_output); + utf16_output += scalar::utf8_to_utf16::convert_valid( + input + pos, size - pos, utf16_output); return utf16_output - start; } @@ -27909,46 +28846,45 @@ simdutf_warn_unused size_t convert_valid(const char* input, size_t size, /* end file src/generic/utf8_to_utf16/valid_utf8_to_utf16.h */ /* begin file src/generic/utf8_to_utf16/utf8_to_utf16.h */ - namespace simdutf { namespace haswell { namespace { namespace utf8_to_utf16 { using namespace simd; - - simdutf_really_inline simd8 check_special_cases(const simd8 input, const simd8 prev1) { -// Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) -// Bit 1 = Too Long (ASCII followed by continuation) -// Bit 2 = Overlong 3-byte -// Bit 4 = Surrogate -// Bit 5 = Overlong 2-byte -// Bit 7 = Two Continuations - constexpr const uint8_t TOO_SHORT = 1<<0; // 11______ 0_______ - // 11______ 11______ - constexpr const uint8_t TOO_LONG = 1<<1; // 0_______ 10______ - constexpr const uint8_t OVERLONG_3 = 1<<2; // 11100000 100_____ - constexpr const uint8_t SURROGATE = 1<<4; // 11101101 101_____ - constexpr const uint8_t OVERLONG_2 = 1<<5; // 1100000_ 10______ - constexpr const uint8_t TWO_CONTS = 1<<7; // 10______ 10______ - constexpr const uint8_t TOO_LARGE = 1<<3; // 11110100 1001____ - // 11110100 101_____ - // 11110101 1001____ - // 11110101 101_____ - // 1111011_ 1001____ - // 1111011_ 101_____ - // 11111___ 1001____ - // 11111___ 101_____ - constexpr const uint8_t TOO_LARGE_1000 = 1<<6; - // 11110101 1000____ - // 1111011_ 1000____ - // 11111___ 1000____ - constexpr const uint8_t OVERLONG_4 = 1<<6; // 11110000 1000____ - - const simd8 byte_1_high = prev1.shr<4>().lookup_16( +simdutf_really_inline simd8 +check_special_cases(const simd8 input, const simd8 prev1) { + // Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) + // Bit 1 = Too Long (ASCII followed by continuation) + // Bit 2 = Overlong 3-byte + // Bit 4 = Surrogate + // Bit 5 = Overlong 2-byte + // Bit 7 = Two Continuations + constexpr const uint8_t TOO_SHORT = 1 << 0; // 11______ 0_______ + // 11______ 11______ + constexpr const uint8_t TOO_LONG = 1 << 1; // 0_______ 10______ + constexpr const uint8_t OVERLONG_3 = 1 << 2; // 11100000 100_____ + constexpr const uint8_t SURROGATE = 1 << 4; // 11101101 101_____ + constexpr const uint8_t OVERLONG_2 = 1 << 5; // 1100000_ 10______ + constexpr const uint8_t TWO_CONTS = 1 << 7; // 10______ 10______ + constexpr const uint8_t TOO_LARGE = 1 << 3; // 11110100 1001____ + // 11110100 101_____ + // 11110101 1001____ + // 11110101 101_____ + // 1111011_ 1001____ + // 1111011_ 101_____ + // 11111___ 1001____ + // 11111___ 101_____ + constexpr const uint8_t TOO_LARGE_1000 = 1 << 6; + // 11110101 1000____ + // 1111011_ 1000____ + // 11111___ 1000____ + constexpr const uint8_t OVERLONG_4 = 1 << 6; // 11110000 1000____ + + const simd8 byte_1_high = prev1.shr<4>().lookup_16( // 0_______ ________ - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, // 10______ ________ TWO_CONTS, TWO_CONTS, TWO_CONTS, TWO_CONTS, // 1100____ ________ @@ -27958,260 +28894,287 @@ using namespace simd; // 1110____ ________ TOO_SHORT | OVERLONG_3 | SURROGATE, // 1111____ ________ - TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4 - ); - constexpr const uint8_t CARRY = TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . - const simd8 byte_1_low = (prev1 & 0x0F).lookup_16( - // ____0000 ________ - CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, - // ____0001 ________ - CARRY | OVERLONG_2, - // ____001_ ________ - CARRY, - CARRY, - - // ____0100 ________ - CARRY | TOO_LARGE, - // ____0101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____011_ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - - // ____1___ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____1101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000 - ); - const simd8 byte_2_high = input.shr<4>().lookup_16( + TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4); + constexpr const uint8_t CARRY = + TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . + const simd8 byte_1_low = + (prev1 & 0x0F) + .lookup_16( + // ____0000 ________ + CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, + // ____0001 ________ + CARRY | OVERLONG_2, + // ____001_ ________ + CARRY, CARRY, + + // ____0100 ________ + CARRY | TOO_LARGE, + // ____0101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____011_ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + + // ____1___ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____1101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000); + const simd8 byte_2_high = input.shr<4>().lookup_16( // ________ 0_______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, // ________ 1000____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | OVERLONG_4, + TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | + OVERLONG_4, // ________ 1001____ TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE, // ________ 101_____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, // ________ 11______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT - ); - return (byte_1_high & byte_1_low & byte_2_high); - } - simdutf_really_inline simd8 check_multibyte_lengths(const simd8 input, - const simd8 prev_input, const simd8 sc) { - simd8 prev2 = input.prev<2>(prev_input); - simd8 prev3 = input.prev<3>(prev_input); - simd8 must23 = simd8(must_be_2_3_continuation(prev2, prev3)); - simd8 must23_80 = must23 & uint8_t(0x80); - return must23_80 ^ sc; - } - - - struct validating_transcoder { - // If this is nonzero, there has been a UTF-8 error. - simd8 error; - - validating_transcoder() : error(uint8_t(0)) {} - // - // Check whether the current bytes are valid UTF-8. - // - simdutf_really_inline void check_utf8_bytes(const simd8 input, const simd8 prev_input) { - // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ lead bytes - // (2, 3, 4-byte leads become large positive numbers instead of small negative numbers) - simd8 prev1 = input.prev<1>(prev_input); - simd8 sc = check_special_cases(input, prev1); - this->error |= check_multibyte_lengths(input, prev_input, sc); - } - - - template - simdutf_really_inline size_t convert(const char* in, size_t size, char16_t* utf16_output) { - size_t pos = 0; - char16_t* start{utf16_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 bytes when calling convert_masked_utf8_to_utf16. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 8 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); - } - // If the input is long enough, then we have that margin-1 is the eight last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store_ascii_as_utf16(utf16_output); - utf16_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - auto zero = simd8{uint8_t(0)}; - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - if(utf8_continuation_mask & 1) { - return 0; // error - } - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_utf16(in + pos, - utf8_end_of_code_point_mask, utf16_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT); + return (byte_1_high & byte_1_low & byte_2_high); +} +simdutf_really_inline simd8 +check_multibyte_lengths(const simd8 input, + const simd8 prev_input, + const simd8 sc) { + simd8 prev2 = input.prev<2>(prev_input); + simd8 prev3 = input.prev<3>(prev_input); + simd8 must23 = + simd8(must_be_2_3_continuation(prev2, prev3)); + simd8 must23_80 = must23 & uint8_t(0x80); + return must23_80 ^ sc; +} + +struct validating_transcoder { + // If this is nonzero, there has been a UTF-8 error. + simd8 error; + + validating_transcoder() : error(uint8_t(0)) {} + // + // Check whether the current bytes are valid UTF-8. + // + simdutf_really_inline void check_utf8_bytes(const simd8 input, + const simd8 prev_input) { + // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ + // lead bytes (2, 3, 4-byte leads become large positive numbers instead of + // small negative numbers) + simd8 prev1 = input.prev<1>(prev_input); + simd8 sc = check_special_cases(input, prev1); + this->error |= check_multibyte_lengths(input, prev_input, sc); + } + + template + simdutf_really_inline size_t convert(const char *in, size_t size, + char16_t *utf16_output) { + size_t pos = 0; + char16_t *start{utf16_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 bytes when calling convert_masked_utf8_to_utf16. If you skip the + // last 16 bytes, and if the data is valid, then it is entirely safe because + // 16 UTF-8 bytes generate much more than 8 bytes. However, you cannot + // generally assume that you have valid UTF-8 input, so we are going to go + // back from the end counting 8 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 8; margin--) { + leading_byte += (int8_t(in[margin - 1]) > -65); + } + // If the input is long enough, then we have that margin-1 is the eight last + // leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store_ascii_as_utf16(utf16_output); + utf16_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, + // it is not good enough. + static_assert( + (simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + auto zero = simd8{uint8_t(0)}; + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); } - } - if(errors()) { return 0; } - if(pos < size) { - size_t howmany = scalar::utf8_to_utf16::convert(in + pos, size - pos, utf16_output); - if(howmany == 0) { return 0; } - utf16_output += howmany; - } - return utf16_output - start; - } - - template - simdutf_really_inline result convert_with_errors(const char* in, size_t size, char16_t* utf16_output) { - size_t pos = 0; - char16_t* start{utf16_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 bytes when calling convert_masked_utf8_to_utf16. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 8 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); - } - // If the input is long enough, then we have that margin-1 is the eight last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store_ascii_as_utf16(utf16_output); - utf16_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - auto zero = simd8{uint8_t(0)}; - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - if (errors() || (utf8_continuation_mask & 1)) { - // rewind_and_convert_with_errors will seek a potential error from in+pos onward, - // with the ability to go back up to pos bytes, and read size-pos bytes forward. - result res = scalar::utf8_to_utf16::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf16_output); - res.count += pos; - return res; - } - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_utf16(in + pos, - utf8_end_of_code_point_mask, utf16_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + if (utf8_continuation_mask & 1) { + return 0; // error + } + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_utf16( + in + pos, utf8_end_of_code_point_mask, utf16_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. } - if(errors()) { - // rewind_and_convert_with_errors will seek a potential error from in+pos onward, - // with the ability to go back up to pos bytes, and read size-pos bytes forward. - result res = scalar::utf8_to_utf16::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf16_output); - res.count += pos; - return res; + } + if (errors()) { + return 0; + } + if (pos < size) { + size_t howmany = scalar::utf8_to_utf16::convert( + in + pos, size - pos, utf16_output); + if (howmany == 0) { + return 0; } - if(pos < size) { - // rewind_and_convert_with_errors will seek a potential error from in+pos onward, - // with the ability to go back up to pos bytes, and read size-pos bytes forward. - result res = scalar::utf8_to_utf16::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf16_output); - if (res.error) { // In case of error, we want the error position + utf16_output += howmany; + } + return utf16_output - start; + } + + template + simdutf_really_inline result convert_with_errors(const char *in, size_t size, + char16_t *utf16_output) { + size_t pos = 0; + char16_t *start{utf16_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 bytes when calling convert_masked_utf8_to_utf16. If you skip the + // last 16 bytes, and if the data is valid, then it is entirely safe because + // 16 UTF-8 bytes generate much more than 8 bytes. However, you cannot + // generally assume that you have valid UTF-8 input, so we are going to go + // back from the end counting 8 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 8; margin--) { + leading_byte += (int8_t(in[margin - 1]) > -65); + } + // If the input is long enough, then we have that margin-1 is the eight last + // leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store_ascii_as_utf16(utf16_output); + utf16_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, + // it is not good enough. + static_assert( + (simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + auto zero = simd8{uint8_t(0)}; + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); + } + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + if (errors() || (utf8_continuation_mask & 1)) { + // rewind_and_convert_with_errors will seek a potential error from + // in+pos onward, with the ability to go back up to pos bytes, and + // read size-pos bytes forward. + result res = + scalar::utf8_to_utf16::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf16_output); res.count += pos; return res; - } else { // In case of success, we want the number of word written - utf16_output += res.count; } + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_utf16( + in + pos, utf8_end_of_code_point_mask, utf16_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; + } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. + } + } + if (errors()) { + // rewind_and_convert_with_errors will seek a potential error from in+pos + // onward, with the ability to go back up to pos bytes, and read size-pos + // bytes forward. + result res = + scalar::utf8_to_utf16::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf16_output); + res.count += pos; + return res; + } + if (pos < size) { + // rewind_and_convert_with_errors will seek a potential error from in+pos + // onward, with the ability to go back up to pos bytes, and read size-pos + // bytes forward. + result res = + scalar::utf8_to_utf16::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf16_output); + if (res.error) { // In case of error, we want the error position + res.count += pos; + return res; + } else { // In case of success, we want the number of word written + utf16_output += res.count; } - return result(error_code::SUCCESS, utf16_output - start); } + return result(error_code::SUCCESS, utf16_output - start); + } - simdutf_really_inline bool errors() const { - return this->error.any_bits_set_anywhere(); - } + simdutf_really_inline bool errors() const { + return this->error.any_bits_set_anywhere(); + } - }; // struct utf8_checker -} // utf8_to_utf16 namespace +}; // struct utf8_checker +} // namespace utf8_to_utf16 } // unnamed namespace } // namespace haswell } // namespace simdutf @@ -28226,37 +29189,37 @@ namespace utf8_to_utf32 { using namespace simd; - -simdutf_warn_unused size_t convert_valid(const char* input, size_t size, - char32_t* utf32_output) noexcept { +simdutf_warn_unused size_t convert_valid(const char *input, size_t size, + char32_t *utf32_output) noexcept { size_t pos = 0; - char32_t* start{utf32_output}; + char32_t *start{utf32_output}; const size_t safety_margin = 16; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { + while (pos + 64 + safety_margin <= size) { simd8x64 in(reinterpret_cast(input + pos)); - if(in.is_ascii()) { + if (in.is_ascii()) { in.store_ascii_as_utf32(utf32_output); utf32_output += 64; pos += 64; } else { - // -65 is 0b10111111 in two-complement's, so largest possible continuation byte - uint64_t utf8_continuation_mask = in.lt(-65 + 1); - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - size_t max_starting_point = (pos + 64) - 12; - while(pos < max_starting_point) { - size_t consumed = convert_masked_utf8_to_utf32(input + pos, - utf8_end_of_code_point_mask, utf32_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; + // -65 is 0b10111111 in two-complement's, so largest possible continuation + // byte + uint64_t utf8_continuation_mask = in.lt(-65 + 1); + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + size_t max_starting_point = (pos + 64) - 12; + while (pos < max_starting_point) { + size_t consumed = convert_masked_utf8_to_utf32( + input + pos, utf8_end_of_code_point_mask, utf32_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; } } } - utf32_output += scalar::utf8_to_utf32::convert_valid(input + pos, size - pos, utf32_output); + utf32_output += scalar::utf8_to_utf32::convert_valid(input + pos, size - pos, + utf32_output); return utf32_output - start; } - } // namespace utf8_to_utf32 } // unnamed namespace } // namespace haswell @@ -28264,46 +29227,45 @@ simdutf_warn_unused size_t convert_valid(const char* input, size_t size, /* end file src/generic/utf8_to_utf32/valid_utf8_to_utf32.h */ /* begin file src/generic/utf8_to_utf32/utf8_to_utf32.h */ - namespace simdutf { namespace haswell { namespace { namespace utf8_to_utf32 { using namespace simd; - - simdutf_really_inline simd8 check_special_cases(const simd8 input, const simd8 prev1) { -// Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) -// Bit 1 = Too Long (ASCII followed by continuation) -// Bit 2 = Overlong 3-byte -// Bit 4 = Surrogate -// Bit 5 = Overlong 2-byte -// Bit 7 = Two Continuations - constexpr const uint8_t TOO_SHORT = 1<<0; // 11______ 0_______ - // 11______ 11______ - constexpr const uint8_t TOO_LONG = 1<<1; // 0_______ 10______ - constexpr const uint8_t OVERLONG_3 = 1<<2; // 11100000 100_____ - constexpr const uint8_t SURROGATE = 1<<4; // 11101101 101_____ - constexpr const uint8_t OVERLONG_2 = 1<<5; // 1100000_ 10______ - constexpr const uint8_t TWO_CONTS = 1<<7; // 10______ 10______ - constexpr const uint8_t TOO_LARGE = 1<<3; // 11110100 1001____ - // 11110100 101_____ - // 11110101 1001____ - // 11110101 101_____ - // 1111011_ 1001____ - // 1111011_ 101_____ - // 11111___ 1001____ - // 11111___ 101_____ - constexpr const uint8_t TOO_LARGE_1000 = 1<<6; - // 11110101 1000____ - // 1111011_ 1000____ - // 11111___ 1000____ - constexpr const uint8_t OVERLONG_4 = 1<<6; // 11110000 1000____ - - const simd8 byte_1_high = prev1.shr<4>().lookup_16( +simdutf_really_inline simd8 +check_special_cases(const simd8 input, const simd8 prev1) { + // Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) + // Bit 1 = Too Long (ASCII followed by continuation) + // Bit 2 = Overlong 3-byte + // Bit 4 = Surrogate + // Bit 5 = Overlong 2-byte + // Bit 7 = Two Continuations + constexpr const uint8_t TOO_SHORT = 1 << 0; // 11______ 0_______ + // 11______ 11______ + constexpr const uint8_t TOO_LONG = 1 << 1; // 0_______ 10______ + constexpr const uint8_t OVERLONG_3 = 1 << 2; // 11100000 100_____ + constexpr const uint8_t SURROGATE = 1 << 4; // 11101101 101_____ + constexpr const uint8_t OVERLONG_2 = 1 << 5; // 1100000_ 10______ + constexpr const uint8_t TWO_CONTS = 1 << 7; // 10______ 10______ + constexpr const uint8_t TOO_LARGE = 1 << 3; // 11110100 1001____ + // 11110100 101_____ + // 11110101 1001____ + // 11110101 101_____ + // 1111011_ 1001____ + // 1111011_ 101_____ + // 11111___ 1001____ + // 11111___ 101_____ + constexpr const uint8_t TOO_LARGE_1000 = 1 << 6; + // 11110101 1000____ + // 1111011_ 1000____ + // 11111___ 1000____ + constexpr const uint8_t OVERLONG_4 = 1 << 6; // 11110000 1000____ + + const simd8 byte_1_high = prev1.shr<4>().lookup_16( // 0_______ ________ - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, // 10______ ________ TWO_CONTS, TWO_CONTS, TWO_CONTS, TWO_CONTS, // 1100____ ________ @@ -28313,253 +29275,273 @@ using namespace simd; // 1110____ ________ TOO_SHORT | OVERLONG_3 | SURROGATE, // 1111____ ________ - TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4 - ); - constexpr const uint8_t CARRY = TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . - const simd8 byte_1_low = (prev1 & 0x0F).lookup_16( - // ____0000 ________ - CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, - // ____0001 ________ - CARRY | OVERLONG_2, - // ____001_ ________ - CARRY, - CARRY, - - // ____0100 ________ - CARRY | TOO_LARGE, - // ____0101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____011_ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - - // ____1___ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____1101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000 - ); - const simd8 byte_2_high = input.shr<4>().lookup_16( + TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4); + constexpr const uint8_t CARRY = + TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . + const simd8 byte_1_low = + (prev1 & 0x0F) + .lookup_16( + // ____0000 ________ + CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, + // ____0001 ________ + CARRY | OVERLONG_2, + // ____001_ ________ + CARRY, CARRY, + + // ____0100 ________ + CARRY | TOO_LARGE, + // ____0101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____011_ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + + // ____1___ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____1101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000); + const simd8 byte_2_high = input.shr<4>().lookup_16( // ________ 0_______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, // ________ 1000____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | OVERLONG_4, + TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | + OVERLONG_4, // ________ 1001____ TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE, // ________ 101_____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, // ________ 11______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT - ); - return (byte_1_high & byte_1_low & byte_2_high); - } - simdutf_really_inline simd8 check_multibyte_lengths(const simd8 input, - const simd8 prev_input, const simd8 sc) { - simd8 prev2 = input.prev<2>(prev_input); - simd8 prev3 = input.prev<3>(prev_input); - simd8 must23 = simd8(must_be_2_3_continuation(prev2, prev3)); - simd8 must23_80 = must23 & uint8_t(0x80); - return must23_80 ^ sc; - } - - - struct validating_transcoder { - // If this is nonzero, there has been a UTF-8 error. - simd8 error; - - validating_transcoder() : error(uint8_t(0)) {} - // - // Check whether the current bytes are valid UTF-8. - // - simdutf_really_inline void check_utf8_bytes(const simd8 input, const simd8 prev_input) { - // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ lead bytes - // (2, 3, 4-byte leads become large positive numbers instead of small negative numbers) - simd8 prev1 = input.prev<1>(prev_input); - simd8 sc = check_special_cases(input, prev1); - this->error |= check_multibyte_lengths(input, prev_input, sc); - } - - - - simdutf_really_inline size_t convert(const char* in, size_t size, char32_t* utf32_output) { - size_t pos = 0; - char32_t* start{utf32_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 words when calling convert_masked_utf8_to_utf32. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 16 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); - } - // If the input is long enough, then we have that margin-1 is the fourth last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store_ascii_as_utf32(utf32_output); - utf32_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - auto zero = simd8{uint8_t(0)}; - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - if(utf8_continuation_mask & 1) { - return 0; // we have an error - } - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_utf32(in + pos, - utf8_end_of_code_point_mask, utf32_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT); + return (byte_1_high & byte_1_low & byte_2_high); +} +simdutf_really_inline simd8 +check_multibyte_lengths(const simd8 input, + const simd8 prev_input, + const simd8 sc) { + simd8 prev2 = input.prev<2>(prev_input); + simd8 prev3 = input.prev<3>(prev_input); + simd8 must23 = + simd8(must_be_2_3_continuation(prev2, prev3)); + simd8 must23_80 = must23 & uint8_t(0x80); + return must23_80 ^ sc; +} + +struct validating_transcoder { + // If this is nonzero, there has been a UTF-8 error. + simd8 error; + + validating_transcoder() : error(uint8_t(0)) {} + // + // Check whether the current bytes are valid UTF-8. + // + simdutf_really_inline void check_utf8_bytes(const simd8 input, + const simd8 prev_input) { + // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ + // lead bytes (2, 3, 4-byte leads become large positive numbers instead of + // small negative numbers) + simd8 prev1 = input.prev<1>(prev_input); + simd8 sc = check_special_cases(input, prev1); + this->error |= check_multibyte_lengths(input, prev_input, sc); + } + + simdutf_really_inline size_t convert(const char *in, size_t size, + char32_t *utf32_output) { + size_t pos = 0; + char32_t *start{utf32_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 words when calling convert_masked_utf8_to_utf32. If you skip the + // last 16 bytes, and if the data is valid, then it is entirely safe because + // 16 UTF-8 bytes generate much more than 8 bytes. However, you cannot + // generally assume that you have valid UTF-8 input, so we are going to go + // back from the end counting 16 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 8; margin--) { + leading_byte += (int8_t(in[margin - 1]) > -65); + } + // If the input is long enough, then we have that margin-1 is the fourth + // last leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store_ascii_as_utf32(utf32_output); + utf32_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, + // it is not good enough. + static_assert( + (simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + auto zero = simd8{uint8_t(0)}; + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); } - } - if(errors()) { return 0; } - if(pos < size) { - size_t howmany = scalar::utf8_to_utf32::convert(in + pos, size - pos, utf32_output); - if(howmany == 0) { return 0; } - utf32_output += howmany; - } - return utf32_output - start; - } - - simdutf_really_inline result convert_with_errors(const char* in, size_t size, char32_t* utf32_output) { - size_t pos = 0; - char32_t* start{utf32_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 bytes when calling convert_masked_utf8_to_utf32. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 8 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); - } - // If the input is long enough, then we have that margin-1 is the fourth last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store_ascii_as_utf32(utf32_output); - utf32_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - auto zero = simd8{uint8_t(0)}; - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - if (errors() || (utf8_continuation_mask & 1)) { - result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf32_output); - res.count += pos; - return res; - } - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_utf32(in + pos, - utf8_end_of_code_point_mask, utf32_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + if (utf8_continuation_mask & 1) { + return 0; // we have an error + } + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_utf32( + in + pos, utf8_end_of_code_point_mask, utf32_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. } - if(errors()) { - result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf32_output); - res.count += pos; - return res; + } + if (errors()) { + return 0; + } + if (pos < size) { + size_t howmany = + scalar::utf8_to_utf32::convert(in + pos, size - pos, utf32_output); + if (howmany == 0) { + return 0; } - if(pos < size) { - result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf32_output); - if (res.error) { // In case of error, we want the error position + utf32_output += howmany; + } + return utf32_output - start; + } + + simdutf_really_inline result convert_with_errors(const char *in, size_t size, + char32_t *utf32_output) { + size_t pos = 0; + char32_t *start{utf32_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 bytes when calling convert_masked_utf8_to_utf32. If you skip the + // last 16 bytes, and if the data is valid, then it is entirely safe because + // 16 UTF-8 bytes generate much more than 8 bytes. However, you cannot + // generally assume that you have valid UTF-8 input, so we are going to go + // back from the end counting 8 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 8; margin--) { + leading_byte += (int8_t(in[margin - 1]) > -65); + } + // If the input is long enough, then we have that margin-1 is the fourth + // last leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store_ascii_as_utf32(utf32_output); + utf32_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, + // it is not good enough. + static_assert( + (simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + auto zero = simd8{uint8_t(0)}; + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); + } + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + if (errors() || (utf8_continuation_mask & 1)) { + result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf32_output); res.count += pos; return res; - } else { // In case of success, we want the number of word written - utf32_output += res.count; } + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_utf32( + in + pos, utf8_end_of_code_point_mask, utf32_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; + } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. } - return result(error_code::SUCCESS, utf32_output - start); } - - simdutf_really_inline bool errors() const { - return this->error.any_bits_set_anywhere(); + if (errors()) { + result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf32_output); + res.count += pos; + return res; + } + if (pos < size) { + result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf32_output); + if (res.error) { // In case of error, we want the error position + res.count += pos; + return res; + } else { // In case of success, we want the number of word written + utf32_output += res.count; + } } + return result(error_code::SUCCESS, utf32_output - start); + } + + simdutf_really_inline bool errors() const { + return this->error.any_bits_set_anywhere(); + } - }; // struct utf8_checker -} // utf8_to_utf32 namespace +}; // struct utf8_checker +} // namespace utf8_to_utf32 } // unnamed namespace } // namespace haswell } // namespace simdutf @@ -28574,33 +29556,34 @@ namespace utf8 { using namespace simd; -simdutf_really_inline size_t count_code_points(const char* in, size_t size) { - size_t pos = 0; - size_t count = 0; - for(;pos + 64 <= size; pos += 64) { - simd8x64 input(reinterpret_cast(in + pos)); - uint64_t utf8_continuation_mask = input.gt(-65); - count += count_ones(utf8_continuation_mask); - } - return count + scalar::utf8::count_code_points(in + pos, size - pos); +simdutf_really_inline size_t count_code_points(const char *in, size_t size) { + size_t pos = 0; + size_t count = 0; + for (; pos + 64 <= size; pos += 64) { + simd8x64 input(reinterpret_cast(in + pos)); + uint64_t utf8_continuation_mask = input.gt(-65); + count += count_ones(utf8_continuation_mask); + } + return count + scalar::utf8::count_code_points(in + pos, size - pos); } -simdutf_really_inline size_t utf16_length_from_utf8(const char* in, size_t size) { - size_t pos = 0; - size_t count = 0; - // This algorithm could no doubt be improved! - for(;pos + 64 <= size; pos += 64) { - simd8x64 input(reinterpret_cast(in + pos)); - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - // We count one word for anything that is not a continuation (so - // leading bytes). - count += 64 - count_ones(utf8_continuation_mask); - int64_t utf8_4byte = input.gteq_unsigned(240); - count += count_ones(utf8_4byte); - } - return count + scalar::utf8::utf16_length_from_utf8(in + pos, size - pos); -} -} // utf8 namespace +simdutf_really_inline size_t utf16_length_from_utf8(const char *in, + size_t size) { + size_t pos = 0; + size_t count = 0; + // This algorithm could no doubt be improved! + for (; pos + 64 <= size; pos += 64) { + simd8x64 input(reinterpret_cast(in + pos)); + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + // We count one word for anything that is not a continuation (so + // leading bytes). + count += 64 - count_ones(utf8_continuation_mask); + int64_t utf8_4byte = input.gteq_unsigned(240); + count += count_ones(utf8_4byte); + } + return count + scalar::utf8::utf16_length_from_utf8(in + pos, size - pos); +} +} // namespace utf8 } // unnamed namespace } // namespace haswell } // namespace simdutf @@ -28612,48 +29595,59 @@ namespace { namespace utf16 { template -simdutf_really_inline size_t count_code_points(const char16_t* in, size_t size) { - size_t pos = 0; - size_t count = 0; - for(;pos < size/32*32; pos += 32) { - simd16x32 input(reinterpret_cast(in + pos)); - if (!match_system(big_endian)) { input.swap_bytes(); } - uint64_t not_pair = input.not_in_range(0xDC00, 0xDFFF); - count += count_ones(not_pair) / 2; +simdutf_really_inline size_t count_code_points(const char16_t *in, + size_t size) { + size_t pos = 0; + size_t count = 0; + for (; pos < size / 32 * 32; pos += 32) { + simd16x32 input(reinterpret_cast(in + pos)); + if (!match_system(big_endian)) { + input.swap_bytes(); } - return count + scalar::utf16::count_code_points(in + pos, size - pos); + uint64_t not_pair = input.not_in_range(0xDC00, 0xDFFF); + count += count_ones(not_pair) / 2; + } + return count + + scalar::utf16::count_code_points(in + pos, size - pos); } template -simdutf_really_inline size_t utf8_length_from_utf16(const char16_t* in, size_t size) { - size_t pos = 0; - size_t count = 0; - // This algorithm could no doubt be improved! - for(;pos < size/32*32; pos += 32) { - simd16x32 input(reinterpret_cast(in + pos)); - if (!match_system(big_endian)) { input.swap_bytes(); } - uint64_t ascii_mask = input.lteq(0x7F); - uint64_t twobyte_mask = input.lteq(0x7FF); - uint64_t not_pair_mask = input.not_in_range(0xD800, 0xDFFF); - - size_t ascii_count = count_ones(ascii_mask) / 2; - size_t twobyte_count = count_ones(twobyte_mask & ~ ascii_mask) / 2; - size_t threebyte_count = count_ones(not_pair_mask & ~ twobyte_mask) / 2; - size_t fourbyte_count = 32 - count_ones(not_pair_mask) / 2; - count += 2 * fourbyte_count + 3 * threebyte_count + 2 * twobyte_count + ascii_count; +simdutf_really_inline size_t utf8_length_from_utf16(const char16_t *in, + size_t size) { + size_t pos = 0; + size_t count = 0; + // This algorithm could no doubt be improved! + for (; pos < size / 32 * 32; pos += 32) { + simd16x32 input(reinterpret_cast(in + pos)); + if (!match_system(big_endian)) { + input.swap_bytes(); } - return count + scalar::utf16::utf8_length_from_utf16(in + pos, size - pos); + uint64_t ascii_mask = input.lteq(0x7F); + uint64_t twobyte_mask = input.lteq(0x7FF); + uint64_t not_pair_mask = input.not_in_range(0xD800, 0xDFFF); + + size_t ascii_count = count_ones(ascii_mask) / 2; + size_t twobyte_count = count_ones(twobyte_mask & ~ascii_mask) / 2; + size_t threebyte_count = count_ones(not_pair_mask & ~twobyte_mask) / 2; + size_t fourbyte_count = 32 - count_ones(not_pair_mask) / 2; + count += 2 * fourbyte_count + 3 * threebyte_count + 2 * twobyte_count + + ascii_count; + } + return count + scalar::utf16::utf8_length_from_utf16(in + pos, + size - pos); } template -simdutf_really_inline size_t utf32_length_from_utf16(const char16_t* in, size_t size) { - return count_code_points(in, size); +simdutf_really_inline size_t utf32_length_from_utf16(const char16_t *in, + size_t size) { + return count_code_points(in, size); } -simdutf_really_inline void change_endianness_utf16(const char16_t* in, size_t size, char16_t* output) { +simdutf_really_inline void +change_endianness_utf16(const char16_t *in, size_t size, char16_t *output) { size_t pos = 0; - while (pos < size/32*32) { + while (pos < size / 32 * 32) { simd16x32 input(reinterpret_cast(in + pos)); input.swap_bytes(); input.store(reinterpret_cast(output)); @@ -28664,60 +29658,59 @@ simdutf_really_inline void change_endianness_utf16(const char16_t* in, size_t si scalar::utf16::change_endianness_utf16(in + pos, size - pos, output); } -} // utf16 +} // namespace utf16 } // unnamed namespace } // namespace haswell } // namespace simdutf /* end file src/generic/utf16.h */ - // transcoding from UTF-8 to Latin 1 /* begin file src/generic/utf8_to_latin1/utf8_to_latin1.h */ - namespace simdutf { namespace haswell { namespace { namespace utf8_to_latin1 { using namespace simd; - - simdutf_really_inline simd8 check_special_cases(const simd8 input, const simd8 prev1) { -// For UTF-8 to Latin 1, we can allow any ASCII character, and any continuation byte, -// but the non-ASCII leading bytes must be 0b11000011 or 0b11000010 and nothing else. -// -// Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) -// Bit 1 = Too Long (ASCII followed by continuation) -// Bit 2 = Overlong 3-byte -// Bit 4 = Surrogate -// Bit 5 = Overlong 2-byte -// Bit 7 = Two Continuations - constexpr const uint8_t TOO_SHORT = 1<<0; // 11______ 0_______ - // 11______ 11______ - constexpr const uint8_t TOO_LONG = 1<<1; // 0_______ 10______ - constexpr const uint8_t OVERLONG_3 = 1<<2; // 11100000 100_____ - constexpr const uint8_t SURROGATE = 1<<4; // 11101101 101_____ - constexpr const uint8_t OVERLONG_2 = 1<<5; // 1100000_ 10______ - constexpr const uint8_t TWO_CONTS = 1<<7; // 10______ 10______ - constexpr const uint8_t TOO_LARGE = 1<<3; // 11110100 1001____ - // 11110100 101_____ - // 11110101 1001____ - // 11110101 101_____ - // 1111011_ 1001____ - // 1111011_ 101_____ - // 11111___ 1001____ - // 11111___ 101_____ - constexpr const uint8_t TOO_LARGE_1000 = 1<<6; - // 11110101 1000____ - // 1111011_ 1000____ - // 11111___ 1000____ - constexpr const uint8_t OVERLONG_4 = 1<<6; // 11110000 1000____ - constexpr const uint8_t FORBIDDEN = 0xff; - - const simd8 byte_1_high = prev1.shr<4>().lookup_16( +simdutf_really_inline simd8 +check_special_cases(const simd8 input, const simd8 prev1) { + // For UTF-8 to Latin 1, we can allow any ASCII character, and any + // continuation byte, but the non-ASCII leading bytes must be 0b11000011 or + // 0b11000010 and nothing else. + // + // Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) + // Bit 1 = Too Long (ASCII followed by continuation) + // Bit 2 = Overlong 3-byte + // Bit 4 = Surrogate + // Bit 5 = Overlong 2-byte + // Bit 7 = Two Continuations + constexpr const uint8_t TOO_SHORT = 1 << 0; // 11______ 0_______ + // 11______ 11______ + constexpr const uint8_t TOO_LONG = 1 << 1; // 0_______ 10______ + constexpr const uint8_t OVERLONG_3 = 1 << 2; // 11100000 100_____ + constexpr const uint8_t SURROGATE = 1 << 4; // 11101101 101_____ + constexpr const uint8_t OVERLONG_2 = 1 << 5; // 1100000_ 10______ + constexpr const uint8_t TWO_CONTS = 1 << 7; // 10______ 10______ + constexpr const uint8_t TOO_LARGE = 1 << 3; // 11110100 1001____ + // 11110100 101_____ + // 11110101 1001____ + // 11110101 101_____ + // 1111011_ 1001____ + // 1111011_ 101_____ + // 11111___ 1001____ + // 11111___ 101_____ + constexpr const uint8_t TOO_LARGE_1000 = 1 << 6; + // 11110101 1000____ + // 1111011_ 1000____ + // 11111___ 1000____ + constexpr const uint8_t OVERLONG_4 = 1 << 6; // 11110000 1000____ + constexpr const uint8_t FORBIDDEN = 0xff; + + const simd8 byte_1_high = prev1.shr<4>().lookup_16( // 0_______ ________ - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, // 10______ ________ TWO_CONTS, TWO_CONTS, TWO_CONTS, TWO_CONTS, // 1100____ ________ @@ -28727,361 +29720,401 @@ using namespace simd; // 1110____ ________ FORBIDDEN, // 1111____ ________ - FORBIDDEN - ); - constexpr const uint8_t CARRY = TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . - const simd8 byte_1_low = (prev1 & 0x0F).lookup_16( - // ____0000 ________ - CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, - // ____0001 ________ - CARRY | OVERLONG_2, - // ____001_ ________ - CARRY, - CARRY, - - // ____0100 ________ - FORBIDDEN, - // ____0101 ________ - FORBIDDEN, - // ____011_ ________ - FORBIDDEN, - FORBIDDEN, - - // ____1___ ________ - FORBIDDEN, - FORBIDDEN, - FORBIDDEN, - FORBIDDEN, - FORBIDDEN, - // ____1101 ________ - FORBIDDEN, - FORBIDDEN, - FORBIDDEN - ); - const simd8 byte_2_high = input.shr<4>().lookup_16( + FORBIDDEN); + constexpr const uint8_t CARRY = + TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . + const simd8 byte_1_low = + (prev1 & 0x0F) + .lookup_16( + // ____0000 ________ + CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, + // ____0001 ________ + CARRY | OVERLONG_2, + // ____001_ ________ + CARRY, CARRY, + + // ____0100 ________ + FORBIDDEN, + // ____0101 ________ + FORBIDDEN, + // ____011_ ________ + FORBIDDEN, FORBIDDEN, + + // ____1___ ________ + FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, + // ____1101 ________ + FORBIDDEN, FORBIDDEN, FORBIDDEN); + const simd8 byte_2_high = input.shr<4>().lookup_16( // ________ 0_______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, // ________ 1000____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | OVERLONG_4, + TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | + OVERLONG_4, // ________ 1001____ TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE, // ________ 101_____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, // ________ 11______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT - ); - return (byte_1_high & byte_1_low & byte_2_high); - } + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT); + return (byte_1_high & byte_1_low & byte_2_high); +} - struct validating_transcoder { - // If this is nonzero, there has been a UTF-8 error. - simd8 error; +struct validating_transcoder { + // If this is nonzero, there has been a UTF-8 error. + simd8 error; - validating_transcoder() : error(uint8_t(0)) {} - // - // Check whether the current bytes are valid UTF-8. - // - simdutf_really_inline void check_utf8_bytes(const simd8 input, const simd8 prev_input) { - // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ lead bytes - // (2, 3, 4-byte leads become large positive numbers instead of small negative numbers) - simd8 prev1 = input.prev<1>(prev_input); - this->error |= check_special_cases(input, prev1); - } - - - simdutf_really_inline size_t convert(const char* in, size_t size, char* latin1_output) { - size_t pos = 0; - char* start{latin1_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 bytes when calling convert_masked_utf8_to_latin1. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 8 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); //twos complement of -65 is 1011 1111 ... - } - // If the input is long enough, then we have that margin-1 is the eight last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store((int8_t*)latin1_output); - latin1_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - auto zero = simd8{uint8_t(0)}; - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - uint64_t utf8_continuation_mask = input.lt(-65 + 1); // -64 is 1100 0000 in twos complement. Note: in this case, we also have ASCII to account for. - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_latin1(in + pos, - utf8_end_of_code_point_mask, latin1_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. + validating_transcoder() : error(uint8_t(0)) {} + // + // Check whether the current bytes are valid UTF-8. + // + simdutf_really_inline void check_utf8_bytes(const simd8 input, + const simd8 prev_input) { + // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ + // lead bytes (2, 3, 4-byte leads become large positive numbers instead of + // small negative numbers) + simd8 prev1 = input.prev<1>(prev_input); + this->error |= check_special_cases(input, prev1); + } + + simdutf_really_inline size_t convert(const char *in, size_t size, + char *latin1_output) { + size_t pos = 0; + char *start{latin1_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 bytes when calling convert_masked_utf8_to_latin1. If you skip the + // last 16 bytes, and if the data is valid, then it is entirely safe because + // 16 UTF-8 bytes generate much more than 8 bytes. However, you cannot + // generally assume that you have valid UTF-8 input, so we are going to go + // back from the end counting 16 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 16; margin--) { + leading_byte += (int8_t(in[margin - 1]) > + -65); // twos complement of -65 is 1011 1111 ... + } + // If the input is long enough, then we have that margin-1 is the eight last + // leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store((int8_t *)latin1_output); + latin1_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, + // it is not good enough. + static_assert( + (simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + auto zero = simd8{uint8_t(0)}; + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); } - } - if(errors()) { return 0; } - if(pos < size) { - size_t howmany = scalar::utf8_to_latin1::convert(in + pos, size - pos, latin1_output); - if(howmany == 0) { return 0; } - latin1_output += howmany; - } - return latin1_output - start; - } - - simdutf_really_inline result convert_with_errors(const char* in, size_t size, char* latin1_output) { - size_t pos = 0; - char* start{latin1_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 bytes when calling convert_masked_utf8_to_latin1. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 8 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); - } - // If the input is long enough, then we have that margin-1 is the eight last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store((int8_t*)latin1_output); - latin1_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - auto zero = simd8{uint8_t(0)}; - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - if (errors()) { - // rewind_and_convert_with_errors will seek a potential error from in+pos onward, - // with the ability to go back up to pos bytes, and read size-pos bytes forward. - result res = scalar::utf8_to_latin1::rewind_and_convert_with_errors(pos, in + pos, size - pos, latin1_output); - res.count += pos; - return res; - } - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_latin1(in + pos, - utf8_end_of_code_point_mask, latin1_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. + uint64_t utf8_continuation_mask = + input.lt(-65 + 1); // -64 is 1100 0000 in twos complement. Note: in + // this case, we also have ASCII to account for. + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_latin1( + in + pos, utf8_end_of_code_point_mask, latin1_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. } - if(errors()) { - // rewind_and_convert_with_errors will seek a potential error from in+pos onward, - // with the ability to go back up to pos bytes, and read size-pos bytes forward. - result res = scalar::utf8_to_latin1::rewind_and_convert_with_errors(pos, in + pos, size - pos, latin1_output); - res.count += pos; - return res; + } + if (errors()) { + return 0; + } + if (pos < size) { + size_t howmany = + scalar::utf8_to_latin1::convert(in + pos, size - pos, latin1_output); + if (howmany == 0) { + return 0; } - if(pos < size) { - // rewind_and_convert_with_errors will seek a potential error from in+pos onward, - // with the ability to go back up to pos bytes, and read size-pos bytes forward. - result res = scalar::utf8_to_latin1::rewind_and_convert_with_errors(pos, in + pos, size - pos, latin1_output); - if (res.error) { // In case of error, we want the error position + latin1_output += howmany; + } + return latin1_output - start; + } + + simdutf_really_inline result convert_with_errors(const char *in, size_t size, + char *latin1_output) { + size_t pos = 0; + char *start{latin1_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 bytes when calling convert_masked_utf8_to_latin1. If you skip the + // last 16 bytes, and if the data is valid, then it is entirely safe because + // 16 UTF-8 bytes generate much more than 8 bytes. However, you cannot + // generally assume that you have valid UTF-8 input, so we are going to go + // back from the end counting 8 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 8; margin--) { + leading_byte += (int8_t(in[margin - 1]) > -65); + } + // If the input is long enough, then we have that margin-1 is the eight last + // leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store((int8_t *)latin1_output); + latin1_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, + // it is not good enough. + static_assert( + (simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + auto zero = simd8{uint8_t(0)}; + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); + } + if (errors()) { + // rewind_and_convert_with_errors will seek a potential error from + // in+pos onward, with the ability to go back up to pos bytes, and + // read size-pos bytes forward. + result res = scalar::utf8_to_latin1::rewind_and_convert_with_errors( + pos, in + pos, size - pos, latin1_output); res.count += pos; return res; - } else { // In case of success, we want the number of word written - latin1_output += res.count; } + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_latin1( + in + pos, utf8_end_of_code_point_mask, latin1_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; + } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. + } + } + if (errors()) { + // rewind_and_convert_with_errors will seek a potential error from in+pos + // onward, with the ability to go back up to pos bytes, and read size-pos + // bytes forward. + result res = scalar::utf8_to_latin1::rewind_and_convert_with_errors( + pos, in + pos, size - pos, latin1_output); + res.count += pos; + return res; + } + if (pos < size) { + // rewind_and_convert_with_errors will seek a potential error from in+pos + // onward, with the ability to go back up to pos bytes, and read size-pos + // bytes forward. + result res = scalar::utf8_to_latin1::rewind_and_convert_with_errors( + pos, in + pos, size - pos, latin1_output); + if (res.error) { // In case of error, we want the error position + res.count += pos; + return res; + } else { // In case of success, we want the number of word written + latin1_output += res.count; } - return result(error_code::SUCCESS, latin1_output - start); } + return result(error_code::SUCCESS, latin1_output - start); + } - simdutf_really_inline bool errors() const { - return this->error.any_bits_set_anywhere(); - } + simdutf_really_inline bool errors() const { + return this->error.any_bits_set_anywhere(); + } - }; // struct utf8_checker -} // utf8_to_latin1 namespace +}; // struct utf8_checker +} // namespace utf8_to_latin1 } // unnamed namespace } // namespace haswell } // namespace simdutf /* end file src/generic/utf8_to_latin1/utf8_to_latin1.h */ /* begin file src/generic/utf8_to_latin1/valid_utf8_to_latin1.h */ - namespace simdutf { namespace haswell { namespace { namespace utf8_to_latin1 { using namespace simd; - - simdutf_really_inline size_t convert_valid(const char* in, size_t size, char* latin1_output) { - size_t pos = 0; - char* start{latin1_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 bytes when calling convert_masked_utf8_to_latin1. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 8 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); //twos complement of -65 is 1011 1111 ... - } - // If the input is long enough, then we have that margin-1 is the eight last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store((int8_t*)latin1_output); - latin1_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - uint64_t utf8_continuation_mask = input.lt(-65 + 1); // -64 is 1100 0000 in twos complement. Note: in this case, we also have ASCII to account for. - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_latin1(in + pos, - utf8_end_of_code_point_mask, latin1_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. - } - } - if(pos < size) { - size_t howmany = scalar::utf8_to_latin1::convert_valid(in + pos, size - pos, latin1_output); - latin1_output += howmany; +simdutf_really_inline size_t convert_valid(const char *in, size_t size, + char *latin1_output) { + size_t pos = 0; + char *start{latin1_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 bytes when calling convert_masked_utf8_to_latin1. If you skip the last + // 16 bytes, and if the data is valid, then it is entirely safe because 16 + // UTF-8 bytes generate much more than 8 bytes. However, you cannot generally + // assume that you have valid UTF-8 input, so we are going to go back from the + // end counting 8 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 8; margin--) { + leading_byte += (int8_t(in[margin - 1]) > + -65); // twos complement of -65 is 1011 1111 ... + } + // If the input is long enough, then we have that margin-1 is the eight last + // leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store((int8_t *)latin1_output); + latin1_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, it + // is not good enough. + uint64_t utf8_continuation_mask = + input.lt(-65 + 1); // -64 is 1100 0000 in twos complement. Note: in + // this case, we also have ASCII to account for. + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_latin1( + in + pos, utf8_end_of_code_point_mask, latin1_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; } - return latin1_output - start; + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. } - } -} // utf8_to_latin1 namespace -} // unnamed namespace -} // namespace haswell - // namespace simdutf + if (pos < size) { + size_t howmany = scalar::utf8_to_latin1::convert_valid(in + pos, size - pos, + latin1_output); + latin1_output += howmany; + } + return latin1_output - start; +} + +} // namespace utf8_to_latin1 +} // namespace +} // namespace haswell +} // namespace simdutf + // namespace simdutf /* end file src/generic/utf8_to_latin1/valid_utf8_to_latin1.h */ namespace simdutf { namespace haswell { -simdutf_warn_unused int implementation::detect_encodings(const char * input, size_t length) const noexcept { +simdutf_warn_unused int +implementation::detect_encodings(const char *input, + size_t length) const noexcept { // If there is a BOM, then we trust it. auto bom_encoding = simdutf::BOM::check_bom(input, length); - if(bom_encoding != encoding_type::unspecified) { return bom_encoding; } + if (bom_encoding != encoding_type::unspecified) { + return bom_encoding; + } int out = 0; - if(validate_utf8(input, length)) { out |= encoding_type::UTF8; } - if((length % 2) == 0) { - if(validate_utf16le(reinterpret_cast(input), length/2)) { out |= encoding_type::UTF16_LE; } + if (validate_utf8(input, length)) { + out |= encoding_type::UTF8; } - if((length % 4) == 0) { - if(validate_utf32(reinterpret_cast(input), length/4)) { out |= encoding_type::UTF32_LE; } + if ((length % 2) == 0) { + if (validate_utf16le(reinterpret_cast(input), + length / 2)) { + out |= encoding_type::UTF16_LE; + } + } + if ((length % 4) == 0) { + if (validate_utf32(reinterpret_cast(input), length / 4)) { + out |= encoding_type::UTF32_LE; + } } return out; } -simdutf_warn_unused bool implementation::validate_utf8(const char *buf, size_t len) const noexcept { - return haswell::utf8_validation::generic_validate_utf8(buf,len); +simdutf_warn_unused bool +implementation::validate_utf8(const char *buf, size_t len) const noexcept { + return haswell::utf8_validation::generic_validate_utf8(buf, len); } -simdutf_warn_unused result implementation::validate_utf8_with_errors(const char *buf, size_t len) const noexcept { - return haswell::utf8_validation::generic_validate_utf8_with_errors(buf,len); +simdutf_warn_unused result implementation::validate_utf8_with_errors( + const char *buf, size_t len) const noexcept { + return haswell::utf8_validation::generic_validate_utf8_with_errors(buf, len); } -simdutf_warn_unused bool implementation::validate_ascii(const char *buf, size_t len) const noexcept { - return haswell::utf8_validation::generic_validate_ascii(buf,len); +simdutf_warn_unused bool +implementation::validate_ascii(const char *buf, size_t len) const noexcept { + return haswell::utf8_validation::generic_validate_ascii(buf, len); } -simdutf_warn_unused result implementation::validate_ascii_with_errors(const char *buf, size_t len) const noexcept { - return haswell::utf8_validation::generic_validate_ascii_with_errors(buf,len); +simdutf_warn_unused result implementation::validate_ascii_with_errors( + const char *buf, size_t len) const noexcept { + return haswell::utf8_validation::generic_validate_ascii_with_errors(buf, len); } -simdutf_warn_unused bool implementation::validate_utf16le(const char16_t *buf, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_utf16le(const char16_t *buf, + size_t len) const noexcept { if (simdutf_unlikely(len == 0)) { // empty input is valid UTF-16. protect the implementation from // handling nullptr @@ -29089,19 +30122,22 @@ simdutf_warn_unused bool implementation::validate_utf16le(const char16_t *buf, s } const char16_t *tail = avx2_validate_utf16(buf, len); if (tail) { - return scalar::utf16::validate(tail, len - (tail - buf)); + return scalar::utf16::validate(tail, + len - (tail - buf)); } else { return false; } } -simdutf_warn_unused bool implementation::validate_utf16be(const char16_t *buf, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_utf16be(const char16_t *buf, + size_t len) const noexcept { if (simdutf_unlikely(len == 0)) { // empty input is valid UTF-16. protect the implementation from // handling nullptr return true; } - const char16_t* tail = avx2_validate_utf16(buf, len); + const char16_t *tail = avx2_validate_utf16(buf, len); if (tail) { return scalar::utf16::validate(tail, len - (tail - buf)); } else { @@ -29109,33 +30145,38 @@ simdutf_warn_unused bool implementation::validate_utf16be(const char16_t *buf, s } } -simdutf_warn_unused result implementation::validate_utf16le_with_errors(const char16_t *buf, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_utf16le_with_errors( + const char16_t *buf, size_t len) const noexcept { result res = avx2_validate_utf16_with_errors(buf, len); if (res.count != len) { - result scalar_res = scalar::utf16::validate_with_errors(buf + res.count, len - res.count); + result scalar_res = scalar::utf16::validate_with_errors( + buf + res.count, len - res.count); return result(scalar_res.error, res.count + scalar_res.count); } else { return res; } } -simdutf_warn_unused result implementation::validate_utf16be_with_errors(const char16_t *buf, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_utf16be_with_errors( + const char16_t *buf, size_t len) const noexcept { result res = avx2_validate_utf16_with_errors(buf, len); if (res.count != len) { - result scalar_res = scalar::utf16::validate_with_errors(buf + res.count, len - res.count); + result scalar_res = scalar::utf16::validate_with_errors( + buf + res.count, len - res.count); return result(scalar_res.error, res.count + scalar_res.count); } else { return res; } } -simdutf_warn_unused bool implementation::validate_utf32(const char32_t *buf, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_utf32(const char32_t *buf, size_t len) const noexcept { if (simdutf_unlikely(len == 0)) { // empty input is valid UTF-32. protect the implementation from // handling nullptr return true; } - const char32_t* tail = avx2_validate_utf32le(buf, len); + const char32_t *tail = avx2_validate_utf32le(buf, len); if (tail) { return scalar::utf32::validate(tail, len - (tail - buf)); } else { @@ -29143,7 +30184,8 @@ simdutf_warn_unused bool implementation::validate_utf32(const char32_t *buf, siz } } -simdutf_warn_unused result implementation::validate_utf32_with_errors(const char32_t *buf, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_utf32_with_errors( + const char32_t *buf, size_t len) const noexcept { if (simdutf_unlikely(len == 0)) { // empty input is valid UTF-32. protect the implementation from // handling nullptr @@ -29151,158 +30193,215 @@ simdutf_warn_unused result implementation::validate_utf32_with_errors(const char } result res = avx2_validate_utf32le_with_errors(buf, len); if (res.count != len) { - result scalar_res = scalar::utf32::validate_with_errors(buf + res.count, len - res.count); + result scalar_res = + scalar::utf32::validate_with_errors(buf + res.count, len - res.count); return result(scalar_res.error, res.count + scalar_res.count); } else { return res; } } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf8(const char * buf, size_t len, char* utf8_output) const noexcept { - std::pair ret = avx2_convert_latin1_to_utf8(buf, len, utf8_output); +simdutf_warn_unused size_t implementation::convert_latin1_to_utf8( + const char *buf, size_t len, char *utf8_output) const noexcept { + std::pair ret = + avx2_convert_latin1_to_utf8(buf, len, utf8_output); size_t converted_chars = ret.second - utf8_output; if (ret.first != buf + len) { const size_t scalar_converted_chars = scalar::latin1_to_utf8::convert( - ret.first, len - (ret.first - buf), ret.second); + ret.first, len - (ret.first - buf), ret.second); converted_chars += scalar_converted_chars; } return converted_chars; } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf16le(const char* buf, size_t len, char16_t* utf16_output) const noexcept { - std::pair ret = avx2_convert_latin1_to_utf16(buf, len, utf16_output); - if (ret.first == nullptr) { return 0; } - size_t converted_chars = ret.second - utf16_output; - if (ret.first != buf + len) { - const size_t scalar_converted_chars = scalar::latin1_to_utf16::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_converted_chars == 0) { return 0; } - converted_chars += scalar_converted_chars; +simdutf_warn_unused size_t implementation::convert_latin1_to_utf16le( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { + std::pair ret = + avx2_convert_latin1_to_utf16(buf, len, utf16_output); + if (ret.first == nullptr) { + return 0; + } + size_t converted_chars = ret.second - utf16_output; + if (ret.first != buf + len) { + const size_t scalar_converted_chars = + scalar::latin1_to_utf16::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_converted_chars == 0) { + return 0; } - return converted_chars; + converted_chars += scalar_converted_chars; + } + return converted_chars; } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf16be(const char* buf, size_t len, char16_t* utf16_output) const noexcept { - std::pair ret = avx2_convert_latin1_to_utf16(buf, len, utf16_output); - if (ret.first == nullptr) { return 0; } - size_t converted_chars = ret.second - utf16_output; - if (ret.first != buf + len) { - const size_t scalar_converted_chars = scalar::latin1_to_utf16::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_converted_chars == 0) { return 0; } - converted_chars += scalar_converted_chars; +simdutf_warn_unused size_t implementation::convert_latin1_to_utf16be( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { + std::pair ret = + avx2_convert_latin1_to_utf16(buf, len, utf16_output); + if (ret.first == nullptr) { + return 0; + } + size_t converted_chars = ret.second - utf16_output; + if (ret.first != buf + len) { + const size_t scalar_converted_chars = + scalar::latin1_to_utf16::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_converted_chars == 0) { + return 0; } - return converted_chars; + converted_chars += scalar_converted_chars; + } + return converted_chars; } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf32(const char* buf, size_t len, char32_t* utf32_output) const noexcept { - std::pair ret = avx2_convert_latin1_to_utf32(buf, len, utf32_output); - if (ret.first == nullptr) { return 0; } - size_t converted_chars = ret.second - utf32_output; - if (ret.first != buf + len) { - const size_t scalar_converted_chars = scalar::latin1_to_utf32::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_converted_chars == 0) { return 0; } - converted_chars += scalar_converted_chars; +simdutf_warn_unused size_t implementation::convert_latin1_to_utf32( + const char *buf, size_t len, char32_t *utf32_output) const noexcept { + std::pair ret = + avx2_convert_latin1_to_utf32(buf, len, utf32_output); + if (ret.first == nullptr) { + return 0; + } + size_t converted_chars = ret.second - utf32_output; + if (ret.first != buf + len) { + const size_t scalar_converted_chars = scalar::latin1_to_utf32::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_converted_chars == 0) { + return 0; } - return converted_chars; + converted_chars += scalar_converted_chars; + } + return converted_chars; } -simdutf_warn_unused size_t implementation::convert_utf8_to_latin1(const char* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) const noexcept { utf8_to_latin1::validating_transcoder converter; return converter.convert(buf, len, latin1_output); } -simdutf_warn_unused result implementation::convert_utf8_to_latin1_with_errors(const char* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused result implementation::convert_utf8_to_latin1_with_errors( + const char *buf, size_t len, char *latin1_output) const noexcept { utf8_to_latin1::validating_transcoder converter; return converter.convert_with_errors(buf, len, latin1_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_latin1(const char* input, size_t size, - char* latin1_output) const noexcept { - return utf8_to_latin1::convert_valid(input, size, latin1_output); +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_latin1( + const char *input, size_t size, char *latin1_output) const noexcept { + return utf8_to_latin1::convert_valid(input, size, latin1_output); } -simdutf_warn_unused size_t implementation::convert_utf8_to_utf16le(const char* buf, size_t len, char16_t* utf16_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf8_to_utf16le( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { utf8_to_utf16::validating_transcoder converter; return converter.convert(buf, len, utf16_output); } -simdutf_warn_unused size_t implementation::convert_utf8_to_utf16be(const char* buf, size_t len, char16_t* utf16_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf8_to_utf16be( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { utf8_to_utf16::validating_transcoder converter; return converter.convert(buf, len, utf16_output); } -simdutf_warn_unused result implementation::convert_utf8_to_utf16le_with_errors(const char* buf, size_t len, char16_t* utf16_output) const noexcept { +simdutf_warn_unused result implementation::convert_utf8_to_utf16le_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { utf8_to_utf16::validating_transcoder converter; - return converter.convert_with_errors(buf, len, utf16_output); + return converter.convert_with_errors(buf, len, + utf16_output); } -simdutf_warn_unused result implementation::convert_utf8_to_utf16be_with_errors(const char* buf, size_t len, char16_t* utf16_output) const noexcept { +simdutf_warn_unused result implementation::convert_utf8_to_utf16be_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { utf8_to_utf16::validating_transcoder converter; return converter.convert_with_errors(buf, len, utf16_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16le(const char* input, size_t size, - char16_t* utf16_output) const noexcept { - return utf8_to_utf16::convert_valid(input, size, utf16_output); +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16le( + const char *input, size_t size, char16_t *utf16_output) const noexcept { + return utf8_to_utf16::convert_valid(input, size, + utf16_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16be(const char* input, size_t size, - char16_t* utf16_output) const noexcept { - return utf8_to_utf16::convert_valid(input, size, utf16_output); +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16be( + const char *input, size_t size, char16_t *utf16_output) const noexcept { + return utf8_to_utf16::convert_valid(input, size, + utf16_output); } -simdutf_warn_unused size_t implementation::convert_utf8_to_utf32(const char* buf, size_t len, char32_t* utf32_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf8_to_utf32( + const char *buf, size_t len, char32_t *utf32_output) const noexcept { utf8_to_utf32::validating_transcoder converter; return converter.convert(buf, len, utf32_output); } -simdutf_warn_unused result implementation::convert_utf8_to_utf32_with_errors(const char* buf, size_t len, char32_t* utf32_output) const noexcept { +simdutf_warn_unused result implementation::convert_utf8_to_utf32_with_errors( + const char *buf, size_t len, char32_t *utf32_output) const noexcept { utf8_to_utf32::validating_transcoder converter; return converter.convert_with_errors(buf, len, utf32_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf32(const char* input, size_t size, - char32_t* utf32_output) const noexcept { - return utf8_to_utf32::convert_valid(input, size, utf32_output); +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf32( + const char *input, size_t size, char32_t *utf32_output) const noexcept { + return utf8_to_utf32::convert_valid(input, size, utf32_output); } - -simdutf_warn_unused size_t implementation::convert_utf16le_to_latin1(const char16_t* buf, size_t len, char* latin1_output) const noexcept { - std::pair ret = haswell::avx2_convert_utf16_to_latin1(buf, len, latin1_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf16le_to_latin1( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { + std::pair ret = + haswell::avx2_convert_utf16_to_latin1(buf, len, + latin1_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - latin1_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf16_to_latin1::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf16_to_latin1::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused size_t implementation::convert_utf16be_to_latin1(const char16_t* buf, size_t len, char* latin1_output) const noexcept { - std::pair ret = haswell::avx2_convert_utf16_to_latin1(buf, len, latin1_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf16be_to_latin1( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { + std::pair ret = + haswell::avx2_convert_utf16_to_latin1(buf, len, + latin1_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - latin1_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf16_to_latin1::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf16_to_latin1::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused result implementation::convert_utf16le_to_latin1_with_errors(const char16_t* buf, size_t len, char* latin1_output) const noexcept { - std::pair ret = avx2_convert_utf16_to_latin1_with_errors(buf, len, latin1_output); - if (ret.first.error) { return ret.first; } // Can return directly since scalar fallback already found correct ret.first.count +simdutf_warn_unused result +implementation::convert_utf16le_to_latin1_with_errors( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { + std::pair ret = + avx2_convert_utf16_to_latin1_with_errors( + buf, len, latin1_output); + if (ret.first.error) { + return ret.first; + } // Can return directly since scalar fallback already found correct + // ret.first.count if (ret.first.count != len) { // All good so far, but not finished - result scalar_res = scalar::utf16_to_latin1::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf16_to_latin1::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -29310,16 +30409,26 @@ simdutf_warn_unused result implementation::convert_utf16le_to_latin1_with_errors ret.second += scalar_res.count; } } - ret.first.count = ret.second - latin1_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + latin1_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused result implementation::convert_utf16be_to_latin1_with_errors(const char16_t* buf, size_t len, char* latin1_output) const noexcept { - std::pair ret = avx2_convert_utf16_to_latin1_with_errors(buf, len, latin1_output); - if (ret.first.error) { return ret.first; } // Can return directly since scalar fallback already found correct ret.first.count +simdutf_warn_unused result +implementation::convert_utf16be_to_latin1_with_errors( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { + std::pair ret = + avx2_convert_utf16_to_latin1_with_errors(buf, len, + latin1_output); + if (ret.first.error) { + return ret.first; + } // Can return directly since scalar fallback already found correct + // ret.first.count if (ret.first.count != len) { // All good so far, but not finished - result scalar_res = scalar::utf16_to_latin1::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf16_to_latin1::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -29327,53 +30436,81 @@ simdutf_warn_unused result implementation::convert_utf16be_to_latin1_with_errors ret.second += scalar_res.count; } } - ret.first.count = ret.second - latin1_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + latin1_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_latin1(const char16_t* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_latin1( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { // optimization opportunity: implement a custom function return convert_utf16be_to_latin1(buf, len, latin1_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_latin1(const char16_t* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_latin1( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { // optimization opportunity: implement a custom function return convert_utf16le_to_latin1(buf, len, latin1_output); } -simdutf_warn_unused size_t implementation::convert_utf16le_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { - std::pair ret = haswell::avx2_convert_utf16_to_utf8(buf, len, utf8_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { + std::pair ret = + haswell::avx2_convert_utf16_to_utf8(buf, len, + utf8_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf8_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf16_to_utf8::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf16_to_utf8::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused size_t implementation::convert_utf16be_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { - std::pair ret = haswell::avx2_convert_utf16_to_utf8(buf, len, utf8_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { + std::pair ret = + haswell::avx2_convert_utf16_to_utf8(buf, len, + utf8_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf8_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf16_to_utf8::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf16_to_utf8::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused result implementation::convert_utf16le_to_utf8_with_errors(const char16_t* buf, size_t len, char* utf8_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = haswell::avx2_convert_utf16_to_utf8_with_errors(buf, len, utf8_output); - if (ret.first.error) { return ret.first; } // Can return directly since scalar fallback already found correct ret.first.count +simdutf_warn_unused result implementation::convert_utf16le_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + haswell::avx2_convert_utf16_to_utf8_with_errors( + buf, len, utf8_output); + if (ret.first.error) { + return ret.first; + } // Can return directly since scalar fallback already found correct + // ret.first.count if (ret.first.count != len) { // All good so far, but not finished - result scalar_res = scalar::utf16_to_utf8::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf16_to_utf8::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -29381,17 +30518,27 @@ simdutf_warn_unused result implementation::convert_utf16le_to_utf8_with_errors(c ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf8_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf8_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused result implementation::convert_utf16be_to_utf8_with_errors(const char16_t* buf, size_t len, char* utf8_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = haswell::avx2_convert_utf16_to_utf8_with_errors(buf, len, utf8_output); - if (ret.first.error) { return ret.first; } // Can return directly since scalar fallback already found correct ret.first.count +simdutf_warn_unused result implementation::convert_utf16be_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + haswell::avx2_convert_utf16_to_utf8_with_errors( + buf, len, utf8_output); + if (ret.first.error) { + return ret.first; + } // Can return directly since scalar fallback already found correct + // ret.first.count if (ret.first.count != len) { // All good so far, but not finished - result scalar_res = scalar::utf16_to_utf8::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf16_to_utf8::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -29399,50 +30546,69 @@ simdutf_warn_unused result implementation::convert_utf16be_to_utf8_with_errors(c ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf8_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf8_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { return convert_utf16le_to_utf8(buf, len, utf8_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { return convert_utf16be_to_utf8(buf, len, utf8_output); } -simdutf_warn_unused size_t implementation::convert_utf32_to_utf8(const char32_t* buf, size_t len, char* utf8_output) const noexcept { - std::pair ret = avx2_convert_utf32_to_utf8(buf, len, utf8_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_output) const noexcept { + std::pair ret = + avx2_convert_utf32_to_utf8(buf, len, utf8_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf8_output; if (ret.first != buf + len) { const size_t scalar_saved_bytes = scalar::utf32_to_utf8::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused size_t implementation::convert_utf32_to_latin1(const char32_t* buf, size_t len, char* latin1_output) const noexcept { - std::pair ret = avx2_convert_utf32_to_latin1(buf, len, latin1_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf32_to_latin1( + const char32_t *buf, size_t len, char *latin1_output) const noexcept { + std::pair ret = + avx2_convert_utf32_to_latin1(buf, len, latin1_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - latin1_output; if (ret.first != buf + len) { const size_t scalar_saved_bytes = scalar::utf32_to_latin1::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused result implementation::convert_utf32_to_latin1_with_errors(const char32_t* buf, size_t len, char* latin1_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = avx2_convert_utf32_to_latin1_with_errors(buf, len, latin1_output); +simdutf_warn_unused result implementation::convert_utf32_to_latin1_with_errors( + const char32_t *buf, size_t len, char *latin1_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + avx2_convert_utf32_to_latin1_with_errors(buf, len, latin1_output); if (ret.first.count != len) { result scalar_res = scalar::utf32_to_latin1::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -29450,20 +30616,26 @@ simdutf_warn_unused result implementation::convert_utf32_to_latin1_with_errors(c ret.second += scalar_res.count; } } - ret.first.count = ret.second - latin1_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + latin1_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_latin1(const char32_t* buf, size_t len, char* latin1_output) const noexcept { - return convert_utf32_to_latin1(buf,len,latin1_output); +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_latin1( + const char32_t *buf, size_t len, char *latin1_output) const noexcept { + return convert_utf32_to_latin1(buf, len, latin1_output); } -simdutf_warn_unused result implementation::convert_utf32_to_utf8_with_errors(const char32_t* buf, size_t len, char* utf8_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = haswell::avx2_convert_utf32_to_utf8_with_errors(buf, len, utf8_output); +simdutf_warn_unused result implementation::convert_utf32_to_utf8_with_errors( + const char32_t *buf, size_t len, char *utf8_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + haswell::avx2_convert_utf32_to_utf8_with_errors(buf, len, utf8_output); if (ret.first.count != len) { result scalar_res = scalar::utf32_to_utf8::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -29471,43 +30643,69 @@ simdutf_warn_unused result implementation::convert_utf32_to_utf8_with_errors(con ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf8_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf8_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused size_t implementation::convert_utf16le_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - std::pair ret = haswell::avx2_convert_utf16_to_utf32(buf, len, utf32_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf16le_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + std::pair ret = + haswell::avx2_convert_utf16_to_utf32(buf, len, + utf32_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf32_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf16_to_utf32::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf16_to_utf32::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused size_t implementation::convert_utf16be_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - std::pair ret = haswell::avx2_convert_utf16_to_utf32(buf, len, utf32_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf16be_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + std::pair ret = + haswell::avx2_convert_utf16_to_utf32(buf, len, + utf32_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf32_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf16_to_utf32::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf16_to_utf32::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused result implementation::convert_utf16le_to_utf32_with_errors(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = haswell::avx2_convert_utf16_to_utf32_with_errors(buf, len, utf32_output); - if (ret.first.error) { return ret.first; } // Can return directly since scalar fallback already found correct ret.first.count +simdutf_warn_unused result implementation::convert_utf16le_to_utf32_with_errors( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + haswell::avx2_convert_utf16_to_utf32_with_errors( + buf, len, utf32_output); + if (ret.first.error) { + return ret.first; + } // Can return directly since scalar fallback already found correct + // ret.first.count if (ret.first.count != len) { // All good so far, but not finished - result scalar_res = scalar::utf16_to_utf32::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf16_to_utf32::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -29515,17 +30713,27 @@ simdutf_warn_unused result implementation::convert_utf16le_to_utf32_with_errors( ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf32_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf32_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused result implementation::convert_utf16be_to_utf32_with_errors(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = haswell::avx2_convert_utf16_to_utf32_with_errors(buf, len, utf32_output); - if (ret.first.error) { return ret.first; } // Can return directly since scalar fallback already found correct ret.first.count +simdutf_warn_unused result implementation::convert_utf16be_to_utf32_with_errors( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + haswell::avx2_convert_utf16_to_utf32_with_errors( + buf, len, utf32_output); + if (ret.first.error) { + return ret.first; + } // Can return directly since scalar fallback already found correct + // ret.first.count if (ret.first.count != len) { // All good so far, but not finished - result scalar_res = scalar::utf16_to_utf32::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf16_to_utf32::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -29533,46 +30741,68 @@ simdutf_warn_unused result implementation::convert_utf16be_to_utf32_with_errors( ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf32_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf32_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf8(const char32_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_output) const noexcept { return convert_utf32_to_utf8(buf, len, utf8_output); } -simdutf_warn_unused size_t implementation::convert_utf32_to_utf16le(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - std::pair ret = avx2_convert_utf32_to_utf16(buf, len, utf16_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf32_to_utf16le( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + std::pair ret = + avx2_convert_utf32_to_utf16(buf, len, utf16_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf16_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf32_to_utf16::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf32_to_utf16::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused size_t implementation::convert_utf32_to_utf16be(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - std::pair ret = avx2_convert_utf32_to_utf16(buf, len, utf16_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf32_to_utf16be( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + std::pair ret = + avx2_convert_utf32_to_utf16(buf, len, utf16_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf16_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf32_to_utf16::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf32_to_utf16::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused result implementation::convert_utf32_to_utf16le_with_errors(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = haswell::avx2_convert_utf32_to_utf16_with_errors(buf, len, utf16_output); +simdutf_warn_unused result implementation::convert_utf32_to_utf16le_with_errors( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + haswell::avx2_convert_utf32_to_utf16_with_errors( + buf, len, utf16_output); if (ret.first.count != len) { - result scalar_res = scalar::utf32_to_utf16::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf32_to_utf16::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -29580,16 +30810,23 @@ simdutf_warn_unused result implementation::convert_utf32_to_utf16le_with_errors( ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf16_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf16_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused result implementation::convert_utf32_to_utf16be_with_errors(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = haswell::avx2_convert_utf32_to_utf16_with_errors(buf, len, utf16_output); +simdutf_warn_unused result implementation::convert_utf32_to_utf16be_with_errors( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + haswell::avx2_convert_utf32_to_utf16_with_errors( + buf, len, utf16_output); if (ret.first.count != len) { - result scalar_res = scalar::utf32_to_utf16::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf32_to_utf16::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -29597,89 +30834,109 @@ simdutf_warn_unused result implementation::convert_utf32_to_utf16be_with_errors( ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf16_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf16_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16le(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16le( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { return convert_utf32_to_utf16le(buf, len, utf16_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16be(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16be( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { return convert_utf32_to_utf16be(buf, len, utf16_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { return convert_utf16le_to_utf32(buf, len, utf32_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { return convert_utf16be_to_utf32(buf, len, utf32_output); } -void implementation::change_endianness_utf16(const char16_t * input, size_t length, char16_t * output) const noexcept { +void implementation::change_endianness_utf16(const char16_t *input, + size_t length, + char16_t *output) const noexcept { utf16::change_endianness_utf16(input, length, output); } -simdutf_warn_unused size_t implementation::count_utf16le(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::count_utf16le( + const char16_t *input, size_t length) const noexcept { return utf16::count_code_points(input, length); } -simdutf_warn_unused size_t implementation::count_utf16be(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::count_utf16be( + const char16_t *input, size_t length) const noexcept { return utf16::count_code_points(input, length); } -simdutf_warn_unused size_t implementation::count_utf8(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::count_utf8(const char *input, size_t length) const noexcept { return utf8::count_code_points(input, length); } -simdutf_warn_unused size_t implementation::latin1_length_from_utf8(const char* buf, size_t len) const noexcept { - return count_utf8(buf,len); +simdutf_warn_unused size_t implementation::latin1_length_from_utf8( + const char *buf, size_t len) const noexcept { + return count_utf8(buf, len); } -simdutf_warn_unused size_t implementation::latin1_length_from_utf16(size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::latin1_length_from_utf16(size_t length) const noexcept { return scalar::utf16::latin1_length_from_utf16(length); } -simdutf_warn_unused size_t implementation::latin1_length_from_utf32(size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::latin1_length_from_utf32(size_t length) const noexcept { return scalar::utf32::latin1_length_from_utf32(length); } -simdutf_warn_unused size_t implementation::utf8_length_from_utf16le(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf8_length_from_utf16le( + const char16_t *input, size_t length) const noexcept { return utf16::utf8_length_from_utf16(input, length); } -simdutf_warn_unused size_t implementation::utf8_length_from_utf16be(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf8_length_from_utf16be( + const char16_t *input, size_t length) const noexcept { return utf16::utf8_length_from_utf16(input, length); } -simdutf_warn_unused size_t implementation::utf32_length_from_utf16le(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf32_length_from_utf16le( + const char16_t *input, size_t length) const noexcept { return utf16::utf32_length_from_utf16(input, length); } -simdutf_warn_unused size_t implementation::utf32_length_from_utf16be(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf32_length_from_utf16be( + const char16_t *input, size_t length) const noexcept { return utf16::utf32_length_from_utf16(input, length); } - -simdutf_warn_unused size_t implementation::utf16_length_from_latin1(size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::utf16_length_from_latin1(size_t length) const noexcept { return scalar::latin1::utf16_length_from_latin1(length); } -simdutf_warn_unused size_t implementation::utf16_length_from_utf8(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf16_length_from_utf8( + const char *input, size_t length) const noexcept { return utf8::utf16_length_from_utf8(input, length); } - -simdutf_warn_unused size_t implementation::utf32_length_from_latin1(size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::utf32_length_from_latin1(size_t length) const noexcept { return scalar::latin1::utf32_length_from_latin1(length); } -simdutf_warn_unused size_t implementation::utf8_length_from_latin1(const char *input, size_t len) const noexcept { +simdutf_warn_unused size_t implementation::utf8_length_from_latin1( + const char *input, size_t len) const noexcept { const uint8_t *data = reinterpret_cast(input); size_t answer = len / sizeof(__m256i) * sizeof(__m256i); size_t i = 0; - if(answer >= 2048) { // long strings optimization + if (answer >= 2048) { // long strings optimization __m256i four_64bits = _mm256_setzero_si256(); while (i + sizeof(__m256i) <= len) { __m256i runner = _mm256_setzero_si256(); @@ -29689,21 +30946,26 @@ simdutf_warn_unused size_t implementation::utf8_length_from_latin1(const char *i iterations = 255; } size_t max_i = i + iterations * sizeof(__m256i) - sizeof(__m256i); - for (; i + 4*sizeof(__m256i) <= max_i; i += 4*sizeof(__m256i)) { + for (; i + 4 * sizeof(__m256i) <= max_i; i += 4 * sizeof(__m256i)) { __m256i input1 = _mm256_loadu_si256((const __m256i *)(data + i)); - __m256i input2 = _mm256_loadu_si256((const __m256i *)(data + i + sizeof(__m256i))); - __m256i input3 = _mm256_loadu_si256((const __m256i *)(data + i + 2*sizeof(__m256i))); - __m256i input4 = _mm256_loadu_si256((const __m256i *)(data + i + 3*sizeof(__m256i))); - __m256i input12 = _mm256_add_epi8(_mm256_cmpgt_epi8(_mm256_setzero_si256(), input1), - _mm256_cmpgt_epi8(_mm256_setzero_si256(), input2)); - __m256i input23 = _mm256_add_epi8(_mm256_cmpgt_epi8(_mm256_setzero_si256(), input3), - _mm256_cmpgt_epi8(_mm256_setzero_si256(), input4)); + __m256i input2 = + _mm256_loadu_si256((const __m256i *)(data + i + sizeof(__m256i))); + __m256i input3 = _mm256_loadu_si256( + (const __m256i *)(data + i + 2 * sizeof(__m256i))); + __m256i input4 = _mm256_loadu_si256( + (const __m256i *)(data + i + 3 * sizeof(__m256i))); + __m256i input12 = + _mm256_add_epi8(_mm256_cmpgt_epi8(_mm256_setzero_si256(), input1), + _mm256_cmpgt_epi8(_mm256_setzero_si256(), input2)); + __m256i input23 = + _mm256_add_epi8(_mm256_cmpgt_epi8(_mm256_setzero_si256(), input3), + _mm256_cmpgt_epi8(_mm256_setzero_si256(), input4)); __m256i input1234 = _mm256_add_epi8(input12, input23); - runner = _mm256_sub_epi8( - runner, input1234); + runner = _mm256_sub_epi8(runner, input1234); } for (; i <= max_i; i += sizeof(__m256i)) { - __m256i input_256_chunk = _mm256_loadu_si256((const __m256i *)(data + i)); + __m256i input_256_chunk = + _mm256_loadu_si256((const __m256i *)(data + i)); runner = _mm256_sub_epi8( runner, _mm256_cmpgt_epi8(_mm256_setzero_si256(), input_256_chunk)); } @@ -29715,82 +30977,115 @@ simdutf_warn_unused size_t implementation::utf8_length_from_latin1(const char *i _mm256_extract_epi64(four_64bits, 2) + _mm256_extract_epi64(four_64bits, 3); } else if (answer > 0) { - for(; i + sizeof(__m256i) <= len; i += sizeof(__m256i)) { - __m256i latin = _mm256_loadu_si256((const __m256i*)(data + i)); + for (; i + sizeof(__m256i) <= len; i += sizeof(__m256i)) { + __m256i latin = _mm256_loadu_si256((const __m256i *)(data + i)); uint32_t non_ascii = _mm256_movemask_epi8(latin); answer += count_ones(non_ascii); } } - return answer + scalar::latin1::utf8_length_from_latin1(reinterpret_cast(data + i), len - i); + return answer + scalar::latin1::utf8_length_from_latin1( + reinterpret_cast(data + i), len - i); } -simdutf_warn_unused size_t implementation::utf8_length_from_utf32(const char32_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf8_length_from_utf32( + const char32_t *input, size_t length) const noexcept { const __m256i v_00000000 = _mm256_setzero_si256(); const __m256i v_ffffff80 = _mm256_set1_epi32((uint32_t)0xffffff80); const __m256i v_fffff800 = _mm256_set1_epi32((uint32_t)0xfffff800); const __m256i v_ffff0000 = _mm256_set1_epi32((uint32_t)0xffff0000); size_t pos = 0; size_t count = 0; - for(;pos + 8 <= length; pos += 8) { - __m256i in = _mm256_loadu_si256((__m256i*)(input + pos)); - const __m256i ascii_bytes_bytemask = _mm256_cmpeq_epi32(_mm256_and_si256(in, v_ffffff80), v_00000000); - const __m256i one_two_bytes_bytemask = _mm256_cmpeq_epi32(_mm256_and_si256(in, v_fffff800), v_00000000); - const __m256i two_bytes_bytemask = _mm256_xor_si256(one_two_bytes_bytemask, ascii_bytes_bytemask); - const __m256i one_two_three_bytes_bytemask = _mm256_cmpeq_epi32(_mm256_and_si256(in, v_ffff0000), v_00000000); - const __m256i three_bytes_bytemask = _mm256_xor_si256(one_two_three_bytes_bytemask, one_two_bytes_bytemask); - const uint32_t ascii_bytes_bitmask = static_cast(_mm256_movemask_epi8(ascii_bytes_bytemask)); - const uint32_t two_bytes_bitmask = static_cast(_mm256_movemask_epi8(two_bytes_bytemask)); - const uint32_t three_bytes_bitmask = static_cast(_mm256_movemask_epi8(three_bytes_bytemask)); + for (; pos + 8 <= length; pos += 8) { + __m256i in = _mm256_loadu_si256((__m256i *)(input + pos)); + const __m256i ascii_bytes_bytemask = + _mm256_cmpeq_epi32(_mm256_and_si256(in, v_ffffff80), v_00000000); + const __m256i one_two_bytes_bytemask = + _mm256_cmpeq_epi32(_mm256_and_si256(in, v_fffff800), v_00000000); + const __m256i two_bytes_bytemask = + _mm256_xor_si256(one_two_bytes_bytemask, ascii_bytes_bytemask); + const __m256i one_two_three_bytes_bytemask = + _mm256_cmpeq_epi32(_mm256_and_si256(in, v_ffff0000), v_00000000); + const __m256i three_bytes_bytemask = + _mm256_xor_si256(one_two_three_bytes_bytemask, one_two_bytes_bytemask); + const uint32_t ascii_bytes_bitmask = + static_cast(_mm256_movemask_epi8(ascii_bytes_bytemask)); + const uint32_t two_bytes_bitmask = + static_cast(_mm256_movemask_epi8(two_bytes_bytemask)); + const uint32_t three_bytes_bitmask = + static_cast(_mm256_movemask_epi8(three_bytes_bytemask)); size_t ascii_count = count_ones(ascii_bytes_bitmask) / 4; size_t two_bytes_count = count_ones(two_bytes_bitmask) / 4; size_t three_bytes_count = count_ones(three_bytes_bitmask) / 4; - count += 32 - 3*ascii_count - 2*two_bytes_count - three_bytes_count; + count += 32 - 3 * ascii_count - 2 * two_bytes_count - three_bytes_count; } - return count + scalar::utf32::utf8_length_from_utf32(input + pos, length - pos); + return count + + scalar::utf32::utf8_length_from_utf32(input + pos, length - pos); } -simdutf_warn_unused size_t implementation::utf16_length_from_utf32(const char32_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf16_length_from_utf32( + const char32_t *input, size_t length) const noexcept { const __m256i v_00000000 = _mm256_setzero_si256(); const __m256i v_ffff0000 = _mm256_set1_epi32((uint32_t)0xffff0000); size_t pos = 0; size_t count = 0; - for(;pos + 8 <= length; pos += 8) { - __m256i in = _mm256_loadu_si256((__m256i*)(input + pos)); - const __m256i surrogate_bytemask = _mm256_cmpeq_epi32(_mm256_and_si256(in, v_ffff0000), v_00000000); - const uint32_t surrogate_bitmask = static_cast(_mm256_movemask_epi8(surrogate_bytemask)); - size_t surrogate_count = (32-count_ones(surrogate_bitmask))/4; + for (; pos + 8 <= length; pos += 8) { + __m256i in = _mm256_loadu_si256((__m256i *)(input + pos)); + const __m256i surrogate_bytemask = + _mm256_cmpeq_epi32(_mm256_and_si256(in, v_ffff0000), v_00000000); + const uint32_t surrogate_bitmask = + static_cast(_mm256_movemask_epi8(surrogate_bytemask)); + size_t surrogate_count = (32 - count_ones(surrogate_bitmask)) / 4; count += 8 + surrogate_count; } - return count + scalar::utf32::utf16_length_from_utf32(input + pos, length - pos); + return count + + scalar::utf32::utf16_length_from_utf32(input + pos, length - pos); } -simdutf_warn_unused size_t implementation::utf32_length_from_utf8(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf32_length_from_utf8( + const char *input, size_t length) const noexcept { return utf8::count_code_points(input, length); } -simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64( + const char *input, size_t length) const noexcept { return scalar::base64::maximal_binary_length_from_base64(input, length); } -simdutf_warn_unused result implementation::base64_to_binary(const char * input, size_t length, char* output, base64_options options) const noexcept { - return (options & base64_url) ? compress_decode_base64(output, input, length, options) : compress_decode_base64(output, input, length, options); +simdutf_warn_unused result implementation::base64_to_binary( + const char *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_options) const noexcept { + return (options & base64_url) + ? compress_decode_base64(output, input, length, options, + last_chunk_options) + : compress_decode_base64(output, input, length, options, + last_chunk_options); } -simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64( + const char16_t *input, size_t length) const noexcept { return scalar::base64::maximal_binary_length_from_base64(input, length); } -simdutf_warn_unused result implementation::base64_to_binary(const char16_t * input, size_t length, char* output, base64_options options) const noexcept { - return (options & base64_url) ? compress_decode_base64(output, input, length, options) : compress_decode_base64(output, input, length, options); +simdutf_warn_unused result implementation::base64_to_binary( + const char16_t *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_options) const noexcept { + return (options & base64_url) + ? compress_decode_base64(output, input, length, options, + last_chunk_options) + : compress_decode_base64(output, input, length, options, + last_chunk_options); } -simdutf_warn_unused size_t implementation::base64_length_from_binary(size_t length, base64_options options) const noexcept { +simdutf_warn_unused size_t implementation::base64_length_from_binary( + size_t length, base64_options options) const noexcept { return scalar::base64::base64_length_from_binary(length, options); } -size_t implementation::binary_to_base64(const char * input, size_t length, char* output, base64_options options) const noexcept { - if(options & base64_url) { +size_t implementation::binary_to_base64(const char *input, size_t length, + char *output, + base64_options options) const noexcept { + if (options & base64_url) { return encode_base64(output, input, length, options); } else { return encode_base64(output, input, length, options); @@ -29807,7 +31102,8 @@ SIMDUTF_UNTARGET_REGION #endif -#if SIMDUTF_GCC11ORMORE // workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105593 +#if SIMDUTF_GCC11ORMORE // workaround for + // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105593 SIMDUTF_POP_DISABLE_WARNINGS #endif // end of workaround /* end file src/simdutf/haswell/end.h */ @@ -29828,28 +31124,39 @@ namespace simdutf { namespace ppc64 { namespace { #ifndef SIMDUTF_PPC64_H -#error "ppc64.h must be included" + #error "ppc64.h must be included" #endif using namespace simd; - -simdutf_really_inline bool is_ascii(const simd8x64& input) { +simdutf_really_inline bool is_ascii(const simd8x64 &input) { // careful: 0x80 is not ascii. return input.reduce_or().saturating_sub(0b01111111u).bits_not_set_anywhere(); } -simdutf_unused simdutf_really_inline simd8 must_be_continuation(const simd8 prev1, const simd8 prev2, const simd8 prev3) { - simd8 is_second_byte = prev1.saturating_sub(0b11000000u-1); // Only 11______ will be > 0 - simd8 is_third_byte = prev2.saturating_sub(0b11100000u-1); // Only 111_____ will be > 0 - simd8 is_fourth_byte = prev3.saturating_sub(0b11110000u-1); // Only 1111____ will be > 0 - // Caller requires a bool (all 1's). All values resulting from the subtraction will be <= 64, so signed comparison is fine. - return simd8(is_second_byte | is_third_byte | is_fourth_byte) > int8_t(0); -} - -simdutf_really_inline simd8 must_be_2_3_continuation(const simd8 prev2, const simd8 prev3) { - simd8 is_third_byte = prev2.saturating_sub(0xe0u-0x80); // Only 111_____ will be >= 0x80 - simd8 is_fourth_byte = prev3.saturating_sub(0xf0u-0x80); // Only 1111____ will be >= 0x80 - // Caller requires a bool (all 1's). All values resulting from the subtraction will be <= 64, so signed comparison is fine. +simdutf_unused simdutf_really_inline simd8 +must_be_continuation(const simd8 prev1, const simd8 prev2, + const simd8 prev3) { + simd8 is_second_byte = + prev1.saturating_sub(0b11000000u - 1); // Only 11______ will be > 0 + simd8 is_third_byte = + prev2.saturating_sub(0b11100000u - 1); // Only 111_____ will be > 0 + simd8 is_fourth_byte = + prev3.saturating_sub(0b11110000u - 1); // Only 1111____ will be > 0 + // Caller requires a bool (all 1's). All values resulting from the subtraction + // will be <= 64, so signed comparison is fine. + return simd8(is_second_byte | is_third_byte | is_fourth_byte) > + int8_t(0); +} + +simdutf_really_inline simd8 +must_be_2_3_continuation(const simd8 prev2, + const simd8 prev3) { + simd8 is_third_byte = + prev2.saturating_sub(0xe0u - 0x80); // Only 111_____ will be >= 0x80 + simd8 is_fourth_byte = + prev3.saturating_sub(0xf0u - 0x80); // Only 1111____ will be >= 0x80 + // Caller requires a bool (all 1's). All values resulting from the subtraction + // will be <= 64, so signed comparison is fine. return simd8(is_third_byte | is_fourth_byte); } @@ -29862,9 +31169,9 @@ namespace simdutf { namespace ppc64 { namespace { -// Walks through a buffer in block-sized increments, loading the last part with spaces -template -struct buf_block_reader { +// Walks through a buffer in block-sized increments, loading the last part with +// spaces +template struct buf_block_reader { public: simdutf_really_inline buf_block_reader(const uint8_t *_buf, size_t _len); simdutf_really_inline size_t block_index(); @@ -29873,14 +31180,16 @@ struct buf_block_reader { /** * Get the last block, padded with spaces. * - * There will always be a last block, with at least 1 byte, unless len == 0 (in which case this - * function fills the buffer with spaces and returns 0. In particular, if len == STEP_SIZE there - * will be 0 full_blocks and 1 remainder block with STEP_SIZE bytes and no spaces for padding. + * There will always be a last block, with at least 1 byte, unless len == 0 + * (in which case this function fills the buffer with spaces and returns 0. In + * particular, if len == STEP_SIZE there will be 0 full_blocks and 1 remainder + * block with STEP_SIZE bytes and no spaces for padding. * * @return the number of effective characters in the last block. */ simdutf_really_inline size_t get_remainder(uint8_t *dst) const; simdutf_really_inline void advance(); + private: const uint8_t *buf; const size_t len; @@ -29889,9 +31198,10 @@ struct buf_block_reader { }; // Routines to print masks and text for debugging bitmask operations -simdutf_unused static char * format_input_text_64(const uint8_t *text) { - static char *buf = reinterpret_cast(malloc(sizeof(simd8x64) + 1)); - for (size_t i=0; i); i++) { +simdutf_unused static char *format_input_text_64(const uint8_t *text) { + static char *buf = + reinterpret_cast(malloc(sizeof(simd8x64) + 1)); + for (size_t i = 0; i < sizeof(simd8x64); i++) { buf[i] = int8_t(text[i]) < ' ' ? '_' : int8_t(text[i]); } buf[sizeof(simd8x64)] = '\0'; @@ -29899,50 +31209,64 @@ simdutf_unused static char * format_input_text_64(const uint8_t *text) { } // Routines to print masks and text for debugging bitmask operations -simdutf_unused static char * format_input_text(const simd8x64& in) { - static char *buf = reinterpret_cast(malloc(sizeof(simd8x64) + 1)); - in.store(reinterpret_cast(buf)); - for (size_t i=0; i); i++) { - if (buf[i] < ' ') { buf[i] = '_'; } +simdutf_unused static char *format_input_text(const simd8x64 &in) { + static char *buf = + reinterpret_cast(malloc(sizeof(simd8x64) + 1)); + in.store(reinterpret_cast(buf)); + for (size_t i = 0; i < sizeof(simd8x64); i++) { + if (buf[i] < ' ') { + buf[i] = '_'; + } } buf[sizeof(simd8x64)] = '\0'; return buf; } -simdutf_unused static char * format_mask(uint64_t mask) { - static char *buf = reinterpret_cast(malloc(64 + 1)); - for (size_t i=0; i<64; i++) { +simdutf_unused static char *format_mask(uint64_t mask) { + static char *buf = reinterpret_cast(malloc(64 + 1)); + for (size_t i = 0; i < 64; i++) { buf[i] = (mask & (size_t(1) << i)) ? 'X' : ' '; } buf[64] = '\0'; return buf; } -template -simdutf_really_inline buf_block_reader::buf_block_reader(const uint8_t *_buf, size_t _len) : buf{_buf}, len{_len}, lenminusstep{len < STEP_SIZE ? 0 : len - STEP_SIZE}, idx{0} {} +template +simdutf_really_inline +buf_block_reader::buf_block_reader(const uint8_t *_buf, size_t _len) + : buf{_buf}, len{_len}, lenminusstep{len < STEP_SIZE ? 0 : len - STEP_SIZE}, + idx{0} {} -template -simdutf_really_inline size_t buf_block_reader::block_index() { return idx; } +template +simdutf_really_inline size_t buf_block_reader::block_index() { + return idx; +} -template +template simdutf_really_inline bool buf_block_reader::has_full_block() const { return idx < lenminusstep; } -template -simdutf_really_inline const uint8_t *buf_block_reader::full_block() const { +template +simdutf_really_inline const uint8_t * +buf_block_reader::full_block() const { return &buf[idx]; } -template -simdutf_really_inline size_t buf_block_reader::get_remainder(uint8_t *dst) const { - if(len == idx) { return 0; } // memcpy(dst, null, 0) will trigger an error with some sanitizers - std::memset(dst, 0x20, STEP_SIZE); // std::memset STEP_SIZE because it is more efficient to write out 8 or 16 bytes at once. +template +simdutf_really_inline size_t +buf_block_reader::get_remainder(uint8_t *dst) const { + if (len == idx) { + return 0; + } // memcpy(dst, null, 0) will trigger an error with some sanitizers + std::memset(dst, 0x20, + STEP_SIZE); // std::memset STEP_SIZE because it is more efficient + // to write out 8 or 16 bytes at once. std::memcpy(dst, buf + idx, len - idx); return len - idx; } -template +template simdutf_really_inline void buf_block_reader::advance() { idx += STEP_SIZE; } @@ -29959,38 +31283,39 @@ namespace utf8_validation { using namespace simd; - simdutf_really_inline simd8 check_special_cases(const simd8 input, const simd8 prev1) { -// Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) -// Bit 1 = Too Long (ASCII followed by continuation) -// Bit 2 = Overlong 3-byte -// Bit 4 = Surrogate -// Bit 5 = Overlong 2-byte -// Bit 7 = Two Continuations - constexpr const uint8_t TOO_SHORT = 1<<0; // 11______ 0_______ - // 11______ 11______ - constexpr const uint8_t TOO_LONG = 1<<1; // 0_______ 10______ - constexpr const uint8_t OVERLONG_3 = 1<<2; // 11100000 100_____ - constexpr const uint8_t SURROGATE = 1<<4; // 11101101 101_____ - constexpr const uint8_t OVERLONG_2 = 1<<5; // 1100000_ 10______ - constexpr const uint8_t TWO_CONTS = 1<<7; // 10______ 10______ - constexpr const uint8_t TOO_LARGE = 1<<3; // 11110100 1001____ - // 11110100 101_____ - // 11110101 1001____ - // 11110101 101_____ - // 1111011_ 1001____ - // 1111011_ 101_____ - // 11111___ 1001____ - // 11111___ 101_____ - constexpr const uint8_t TOO_LARGE_1000 = 1<<6; - // 11110101 1000____ - // 1111011_ 1000____ - // 11111___ 1000____ - constexpr const uint8_t OVERLONG_4 = 1<<6; // 11110000 1000____ - - const simd8 byte_1_high = prev1.shr<4>().lookup_16( +simdutf_really_inline simd8 +check_special_cases(const simd8 input, const simd8 prev1) { + // Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) + // Bit 1 = Too Long (ASCII followed by continuation) + // Bit 2 = Overlong 3-byte + // Bit 4 = Surrogate + // Bit 5 = Overlong 2-byte + // Bit 7 = Two Continuations + constexpr const uint8_t TOO_SHORT = 1 << 0; // 11______ 0_______ + // 11______ 11______ + constexpr const uint8_t TOO_LONG = 1 << 1; // 0_______ 10______ + constexpr const uint8_t OVERLONG_3 = 1 << 2; // 11100000 100_____ + constexpr const uint8_t SURROGATE = 1 << 4; // 11101101 101_____ + constexpr const uint8_t OVERLONG_2 = 1 << 5; // 1100000_ 10______ + constexpr const uint8_t TWO_CONTS = 1 << 7; // 10______ 10______ + constexpr const uint8_t TOO_LARGE = 1 << 3; // 11110100 1001____ + // 11110100 101_____ + // 11110101 1001____ + // 11110101 101_____ + // 1111011_ 1001____ + // 1111011_ 101_____ + // 11111___ 1001____ + // 11111___ 101_____ + constexpr const uint8_t TOO_LARGE_1000 = 1 << 6; + // 11110101 1000____ + // 1111011_ 1000____ + // 11111___ 1000____ + constexpr const uint8_t OVERLONG_4 = 1 << 6; // 11110000 1000____ + + const simd8 byte_1_high = prev1.shr<4>().lookup_16( // 0_______ ________ - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, // 10______ ________ TWO_CONTS, TWO_CONTS, TWO_CONTS, TWO_CONTS, // 1100____ ________ @@ -30000,137 +31325,173 @@ using namespace simd; // 1110____ ________ TOO_SHORT | OVERLONG_3 | SURROGATE, // 1111____ ________ - TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4 - ); - constexpr const uint8_t CARRY = TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . - const simd8 byte_1_low = (prev1 & 0x0F).lookup_16( - // ____0000 ________ - CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, - // ____0001 ________ - CARRY | OVERLONG_2, - // ____001_ ________ - CARRY, - CARRY, - - // ____0100 ________ - CARRY | TOO_LARGE, - // ____0101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____011_ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - - // ____1___ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____1101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000 - ); - const simd8 byte_2_high = input.shr<4>().lookup_16( + TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4); + constexpr const uint8_t CARRY = + TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . + const simd8 byte_1_low = + (prev1 & 0x0F) + .lookup_16( + // ____0000 ________ + CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, + // ____0001 ________ + CARRY | OVERLONG_2, + // ____001_ ________ + CARRY, CARRY, + + // ____0100 ________ + CARRY | TOO_LARGE, + // ____0101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____011_ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + + // ____1___ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____1101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000); + const simd8 byte_2_high = input.shr<4>().lookup_16( // ________ 0_______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, // ________ 1000____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | OVERLONG_4, + TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | + OVERLONG_4, // ________ 1001____ TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE, // ________ 101_____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, // ________ 11______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT - ); - return (byte_1_high & byte_1_low & byte_2_high); - } - simdutf_really_inline simd8 check_multibyte_lengths(const simd8 input, - const simd8 prev_input, const simd8 sc) { - simd8 prev2 = input.prev<2>(prev_input); - simd8 prev3 = input.prev<3>(prev_input); - simd8 must23 = simd8(must_be_2_3_continuation(prev2, prev3)); - simd8 must23_80 = must23 & uint8_t(0x80); - return must23_80 ^ sc; - } + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT); + return (byte_1_high & byte_1_low & byte_2_high); +} +simdutf_really_inline simd8 +check_multibyte_lengths(const simd8 input, + const simd8 prev_input, + const simd8 sc) { + simd8 prev2 = input.prev<2>(prev_input); + simd8 prev3 = input.prev<3>(prev_input); + simd8 must23 = + simd8(must_be_2_3_continuation(prev2, prev3)); + simd8 must23_80 = must23 & uint8_t(0x80); + return must23_80 ^ sc; +} + +// +// Return nonzero if there are incomplete multibyte characters at the end of the +// block: e.g. if there is a 4-byte character, but it is 3 bytes from the end. +// +simdutf_really_inline simd8 is_incomplete(const simd8 input) { + // If the previous input's last 3 bytes match this, they're too short (they + // ended at EOF): + // ... 1111____ 111_____ 11______ + static const uint8_t max_array[32] = {255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 0b11110000u - 1, + 0b11100000u - 1, + 0b11000000u - 1}; + const simd8 max_value( + &max_array[sizeof(max_array) - sizeof(simd8)]); + return input.gt_bits(max_value); +} + +struct utf8_checker { + // If this is nonzero, there has been a UTF-8 error. + simd8 error; + // The last input we received + simd8 prev_input_block; + // Whether the last input we received was incomplete (used for ASCII fast + // path) + simd8 prev_incomplete; // - // Return nonzero if there are incomplete multibyte characters at the end of the block: - // e.g. if there is a 4-byte character, but it is 3 bytes from the end. + // Check whether the current bytes are valid UTF-8. // - simdutf_really_inline simd8 is_incomplete(const simd8 input) { - // If the previous input's last 3 bytes match this, they're too short (they ended at EOF): - // ... 1111____ 111_____ 11______ - static const uint8_t max_array[32] = { - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0b11110000u-1, 0b11100000u-1, 0b11000000u-1 - }; - const simd8 max_value(&max_array[sizeof(max_array)-sizeof(simd8)]); - return input.gt_bits(max_value); - } - - struct utf8_checker { - // If this is nonzero, there has been a UTF-8 error. - simd8 error; - // The last input we received - simd8 prev_input_block; - // Whether the last input we received was incomplete (used for ASCII fast path) - simd8 prev_incomplete; - - // - // Check whether the current bytes are valid UTF-8. - // - simdutf_really_inline void check_utf8_bytes(const simd8 input, const simd8 prev_input) { - // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ lead bytes - // (2, 3, 4-byte leads become large positive numbers instead of small negative numbers) - simd8 prev1 = input.prev<1>(prev_input); - simd8 sc = check_special_cases(input, prev1); - this->error |= check_multibyte_lengths(input, prev_input, sc); - } - - // The only problem that can happen at EOF is that a multibyte character is too short - // or a byte value too large in the last bytes: check_special_cases only checks for bytes - // too large in the first of two bytes. - simdutf_really_inline void check_eof() { - // If the previous block had incomplete UTF-8 characters at the end, an ASCII block can't - // possibly finish them. + simdutf_really_inline void check_utf8_bytes(const simd8 input, + const simd8 prev_input) { + // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ + // lead bytes (2, 3, 4-byte leads become large positive numbers instead of + // small negative numbers) + simd8 prev1 = input.prev<1>(prev_input); + simd8 sc = check_special_cases(input, prev1); + this->error |= check_multibyte_lengths(input, prev_input, sc); + } + + // The only problem that can happen at EOF is that a multibyte character is + // too short or a byte value too large in the last bytes: check_special_cases + // only checks for bytes too large in the first of two bytes. + simdutf_really_inline void check_eof() { + // If the previous block had incomplete UTF-8 characters at the end, an + // ASCII block can't possibly finish them. + this->error |= this->prev_incomplete; + } + + simdutf_really_inline void check_next_input(const simd8x64 &input) { + if (simdutf_likely(is_ascii(input))) { this->error |= this->prev_incomplete; - } - - simdutf_really_inline void check_next_input(const simd8x64& input) { - if(simdutf_likely(is_ascii(input))) { - this->error |= this->prev_incomplete; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], this->prev_input_block); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], this->prev_input_block); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - this->prev_incomplete = is_incomplete(input.chunks[simd8x64::NUM_CHUNKS-1]); - this->prev_input_block = input.chunks[simd8x64::NUM_CHUNKS-1]; - + } else { + // you might think that a for-loop would work, but under Visual Studio, it + // is not good enough. + static_assert((simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], this->prev_input_block); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], this->prev_input_block); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); } + this->prev_incomplete = + is_incomplete(input.chunks[simd8x64::NUM_CHUNKS - 1]); + this->prev_input_block = input.chunks[simd8x64::NUM_CHUNKS - 1]; } + } - // do not forget to call check_eof! - simdutf_really_inline bool errors() const { - return this->error.any_bits_set_anywhere(); - } + // do not forget to call check_eof! + simdutf_really_inline bool errors() const { + return this->error.any_bits_set_anywhere(); + } - }; // struct utf8_checker +}; // struct utf8_checker } // namespace utf8_validation using utf8_validation::utf8_checker; @@ -30148,127 +31509,475 @@ namespace utf8_validation { /** * Validates that the string is actual UTF-8. */ -template -bool generic_validate_utf8(const uint8_t * input, size_t length) { - checker c{}; - buf_block_reader<64> reader(input, length); - while (reader.has_full_block()) { - simd::simd8x64 in(reader.full_block()); - c.check_next_input(in); - reader.advance(); - } - uint8_t block[64]{}; - reader.get_remainder(block); - simd::simd8x64 in(block); +template +bool generic_validate_utf8(const uint8_t *input, size_t length) { + checker c{}; + buf_block_reader<64> reader(input, length); + while (reader.has_full_block()) { + simd::simd8x64 in(reader.full_block()); c.check_next_input(in); reader.advance(); - c.check_eof(); - return !c.errors(); + } + uint8_t block[64]{}; + reader.get_remainder(block); + simd::simd8x64 in(block); + c.check_next_input(in); + reader.advance(); + c.check_eof(); + return !c.errors(); } -bool generic_validate_utf8(const char * input, size_t length) { - return generic_validate_utf8(reinterpret_cast(input),length); +bool generic_validate_utf8(const char *input, size_t length) { + return generic_validate_utf8( + reinterpret_cast(input), length); } /** * Validates that the string is actual UTF-8 and stops on errors. */ -template -result generic_validate_utf8_with_errors(const uint8_t * input, size_t length) { - checker c{}; - buf_block_reader<64> reader(input, length); - size_t count{0}; - while (reader.has_full_block()) { - simd::simd8x64 in(reader.full_block()); - c.check_next_input(in); - if(c.errors()) { - if (count != 0) { count--; } // Sometimes the error is only detected in the next chunk - result res = scalar::utf8::rewind_and_validate_with_errors(reinterpret_cast(input), reinterpret_cast(input + count), length - count); - res.count += count; - return res; - } - reader.advance(); - count += 64; - } - uint8_t block[64]{}; - reader.get_remainder(block); - simd::simd8x64 in(block); +template +result generic_validate_utf8_with_errors(const uint8_t *input, size_t length) { + checker c{}; + buf_block_reader<64> reader(input, length); + size_t count{0}; + while (reader.has_full_block()) { + simd::simd8x64 in(reader.full_block()); c.check_next_input(in); - reader.advance(); - c.check_eof(); if (c.errors()) { - if (count != 0) { count--; } // Sometimes the error is only detected in the next chunk - result res = scalar::utf8::rewind_and_validate_with_errors(reinterpret_cast(input), reinterpret_cast(input) + count, length - count); + if (count != 0) { + count--; + } // Sometimes the error is only detected in the next chunk + result res = scalar::utf8::rewind_and_validate_with_errors( + reinterpret_cast(input), + reinterpret_cast(input + count), length - count); res.count += count; return res; - } else { - return result(error_code::SUCCESS, length); - } -} - -result generic_validate_utf8_with_errors(const char * input, size_t length) { - return generic_validate_utf8_with_errors(reinterpret_cast(input),length); -} - -template -bool generic_validate_ascii(const uint8_t * input, size_t length) { - buf_block_reader<64> reader(input, length); - uint8_t blocks[64]{}; - simd::simd8x64 running_or(blocks); - while (reader.has_full_block()) { - simd::simd8x64 in(reader.full_block()); - running_or |= in; - reader.advance(); } - uint8_t block[64]{}; - reader.get_remainder(block); - simd::simd8x64 in(block); - running_or |= in; - return running_or.is_ascii(); -} - -bool generic_validate_ascii(const char * input, size_t length) { - return generic_validate_ascii(reinterpret_cast(input),length); -} - -template -result generic_validate_ascii_with_errors(const uint8_t * input, size_t length) { - buf_block_reader<64> reader(input, length); - size_t count{0}; - while (reader.has_full_block()) { - simd::simd8x64 in(reader.full_block()); - if (!in.is_ascii()) { - result res = scalar::ascii::validate_with_errors(reinterpret_cast(input + count), length - count); - return result(res.error, count + res.count); + reader.advance(); + count += 64; + } + uint8_t block[64]{}; + reader.get_remainder(block); + simd::simd8x64 in(block); + c.check_next_input(in); + reader.advance(); + c.check_eof(); + if (c.errors()) { + if (count != 0) { + count--; + } // Sometimes the error is only detected in the next chunk + result res = scalar::utf8::rewind_and_validate_with_errors( + reinterpret_cast(input), + reinterpret_cast(input) + count, length - count); + res.count += count; + return res; + } else { + return result(error_code::SUCCESS, length); + } +} + +result generic_validate_utf8_with_errors(const char *input, size_t length) { + return generic_validate_utf8_with_errors( + reinterpret_cast(input), length); +} + +template +bool generic_validate_ascii(const uint8_t *input, size_t length) { + buf_block_reader<64> reader(input, length); + uint8_t blocks[64]{}; + simd::simd8x64 running_or(blocks); + while (reader.has_full_block()) { + simd::simd8x64 in(reader.full_block()); + running_or |= in; + reader.advance(); + } + uint8_t block[64]{}; + reader.get_remainder(block); + simd::simd8x64 in(block); + running_or |= in; + return running_or.is_ascii(); +} + +bool generic_validate_ascii(const char *input, size_t length) { + return generic_validate_ascii( + reinterpret_cast(input), length); +} + +template +result generic_validate_ascii_with_errors(const uint8_t *input, size_t length) { + buf_block_reader<64> reader(input, length); + size_t count{0}; + while (reader.has_full_block()) { + simd::simd8x64 in(reader.full_block()); + if (!in.is_ascii()) { + result res = scalar::ascii::validate_with_errors( + reinterpret_cast(input + count), length - count); + return result(res.error, count + res.count); + } + reader.advance(); + + count += 64; + } + uint8_t block[64]{}; + reader.get_remainder(block); + simd::simd8x64 in(block); + if (!in.is_ascii()) { + result res = scalar::ascii::validate_with_errors( + reinterpret_cast(input + count), length - count); + return result(res.error, count + res.count); + } else { + return result(error_code::SUCCESS, length); + } +} + +result generic_validate_ascii_with_errors(const char *input, size_t length) { + return generic_validate_ascii_with_errors( + reinterpret_cast(input), length); +} + +} // namespace utf8_validation +} // unnamed namespace +} // namespace ppc64 +} // namespace simdutf +/* end file src/generic/utf8_validation/utf8_validator.h */ +// transcoding from UTF-8 to UTF-16 +/* begin file src/generic/utf8_to_utf16/utf8_to_utf16.h */ + +namespace simdutf { +namespace ppc64 { +namespace { +namespace utf8_to_utf16 { +using namespace simd; + +simdutf_really_inline simd8 +check_special_cases(const simd8 input, const simd8 prev1) { + // Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) + // Bit 1 = Too Long (ASCII followed by continuation) + // Bit 2 = Overlong 3-byte + // Bit 4 = Surrogate + // Bit 5 = Overlong 2-byte + // Bit 7 = Two Continuations + constexpr const uint8_t TOO_SHORT = 1 << 0; // 11______ 0_______ + // 11______ 11______ + constexpr const uint8_t TOO_LONG = 1 << 1; // 0_______ 10______ + constexpr const uint8_t OVERLONG_3 = 1 << 2; // 11100000 100_____ + constexpr const uint8_t SURROGATE = 1 << 4; // 11101101 101_____ + constexpr const uint8_t OVERLONG_2 = 1 << 5; // 1100000_ 10______ + constexpr const uint8_t TWO_CONTS = 1 << 7; // 10______ 10______ + constexpr const uint8_t TOO_LARGE = 1 << 3; // 11110100 1001____ + // 11110100 101_____ + // 11110101 1001____ + // 11110101 101_____ + // 1111011_ 1001____ + // 1111011_ 101_____ + // 11111___ 1001____ + // 11111___ 101_____ + constexpr const uint8_t TOO_LARGE_1000 = 1 << 6; + // 11110101 1000____ + // 1111011_ 1000____ + // 11111___ 1000____ + constexpr const uint8_t OVERLONG_4 = 1 << 6; // 11110000 1000____ + + const simd8 byte_1_high = prev1.shr<4>().lookup_16( + // 0_______ ________ + TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, + // 10______ ________ + TWO_CONTS, TWO_CONTS, TWO_CONTS, TWO_CONTS, + // 1100____ ________ + TOO_SHORT | OVERLONG_2, + // 1101____ ________ + TOO_SHORT, + // 1110____ ________ + TOO_SHORT | OVERLONG_3 | SURROGATE, + // 1111____ ________ + TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4); + constexpr const uint8_t CARRY = + TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . + const simd8 byte_1_low = + (prev1 & 0x0F) + .lookup_16( + // ____0000 ________ + CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, + // ____0001 ________ + CARRY | OVERLONG_2, + // ____001_ ________ + CARRY, CARRY, + + // ____0100 ________ + CARRY | TOO_LARGE, + // ____0101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____011_ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + + // ____1___ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____1101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000); + const simd8 byte_2_high = input.shr<4>().lookup_16( + // ________ 0_______ + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, + + // ________ 1000____ + TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | + OVERLONG_4, + // ________ 1001____ + TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE, + // ________ 101_____ + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + + // ________ 11______ + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT); + return (byte_1_high & byte_1_low & byte_2_high); +} +simdutf_really_inline simd8 +check_multibyte_lengths(const simd8 input, + const simd8 prev_input, + const simd8 sc) { + simd8 prev2 = input.prev<2>(prev_input); + simd8 prev3 = input.prev<3>(prev_input); + simd8 must23 = + simd8(must_be_2_3_continuation(prev2, prev3)); + simd8 must23_80 = must23 & uint8_t(0x80); + return must23_80 ^ sc; +} + +struct validating_transcoder { + // If this is nonzero, there has been a UTF-8 error. + simd8 error; + + validating_transcoder() : error(uint8_t(0)) {} + // + // Check whether the current bytes are valid UTF-8. + // + simdutf_really_inline void check_utf8_bytes(const simd8 input, + const simd8 prev_input) { + // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ + // lead bytes (2, 3, 4-byte leads become large positive numbers instead of + // small negative numbers) + simd8 prev1 = input.prev<1>(prev_input); + simd8 sc = check_special_cases(input, prev1); + this->error |= check_multibyte_lengths(input, prev_input, sc); + } + + template + simdutf_really_inline size_t convert(const char *in, size_t size, + char16_t *utf16_output) { + size_t pos = 0; + char16_t *start{utf16_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 bytes when calling convert_masked_utf8_to_utf16. If you skip the + // last 16 bytes, and if the data is valid, then it is entirely safe because + // 16 UTF-8 bytes generate much more than 8 bytes. However, you cannot + // generally assume that you have valid UTF-8 input, so we are going to go + // back from the end counting 8 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 8; margin--) { + leading_byte += (int8_t(in[margin - 1]) > -65); + } + // If the input is long enough, then we have that margin-1 is the eight last + // leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store_ascii_as_utf16(utf16_output); + utf16_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, + // it is not good enough. + static_assert( + (simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + auto zero = simd8{uint8_t(0)}; + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); + } + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + if (utf8_continuation_mask & 1) { + return 0; // error + } + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_utf16( + in + pos, utf8_end_of_code_point_mask, utf16_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; + } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. + } + } + if (errors()) { + return 0; + } + if (pos < size) { + size_t howmany = scalar::utf8_to_utf16::convert( + in + pos, size - pos, utf16_output); + if (howmany == 0) { + return 0; + } + utf16_output += howmany; + } + return utf16_output - start; + } + + template + simdutf_really_inline result convert_with_errors(const char *in, size_t size, + char16_t *utf16_output) { + size_t pos = 0; + char16_t *start{utf16_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 bytes when calling convert_masked_utf8_to_utf16. If you skip the + // last 16 bytes, and if the data is valid, then it is entirely safe because + // 16 UTF-8 bytes generate much more than 8 bytes. However, you cannot + // generally assume that you have valid UTF-8 input, so we are going to go + // back from the end counting 8 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 8; margin--) { + leading_byte += (int8_t(in[margin - 1]) > -65); + } + // If the input is long enough, then we have that margin-1 is the eight last + // leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store_ascii_as_utf16(utf16_output); + utf16_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, + // it is not good enough. + static_assert( + (simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + auto zero = simd8{uint8_t(0)}; + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); + } + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + if (errors() || (utf8_continuation_mask & 1)) { + // rewind_and_convert_with_errors will seek a potential error from + // in+pos onward, with the ability to go back up to pos bytes, and + // read size-pos bytes forward. + result res = + scalar::utf8_to_utf16::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf16_output); + res.count += pos; + return res; + } + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_utf16( + in + pos, utf8_end_of_code_point_mask, utf16_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; + } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. + } + } + if (errors()) { + // rewind_and_convert_with_errors will seek a potential error from in+pos + // onward, with the ability to go back up to pos bytes, and read size-pos + // bytes forward. + result res = + scalar::utf8_to_utf16::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf16_output); + res.count += pos; + return res; + } + if (pos < size) { + // rewind_and_convert_with_errors will seek a potential error from in+pos + // onward, with the ability to go back up to pos bytes, and read size-pos + // bytes forward. + result res = + scalar::utf8_to_utf16::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf16_output); + if (res.error) { // In case of error, we want the error position + res.count += pos; + return res; + } else { // In case of success, we want the number of word written + utf16_output += res.count; + } } - reader.advance(); - - count += 64; - } - uint8_t block[64]{}; - reader.get_remainder(block); - simd::simd8x64 in(block); - if (!in.is_ascii()) { - result res = scalar::ascii::validate_with_errors(reinterpret_cast(input + count), length - count); - return result(res.error, count + res.count); - } else { - return result(error_code::SUCCESS, length); + return result(error_code::SUCCESS, utf16_output - start); } -} -result generic_validate_ascii_with_errors(const char * input, size_t length) { - return generic_validate_ascii_with_errors(reinterpret_cast(input),length); -} + simdutf_really_inline bool errors() const { + return this->error.any_bits_set_anywhere(); + } -} // namespace utf8_validation +}; // struct utf8_checker +} // namespace utf8_to_utf16 } // unnamed namespace } // namespace ppc64 } // namespace simdutf -/* end file src/generic/utf8_validation/utf8_validator.h */ -// transcoding from UTF-8 to UTF-16 +/* end file src/generic/utf8_to_utf16/utf8_to_utf16.h */ /* begin file src/generic/utf8_to_utf16/valid_utf8_to_utf16.h */ - namespace simdutf { namespace ppc64 { namespace { @@ -30277,36 +31986,39 @@ namespace utf8_to_utf16 { using namespace simd; template -simdutf_warn_unused size_t convert_valid(const char* input, size_t size, - char16_t* utf16_output) noexcept { - // The implementation is not specific to haswell and should be moved to the generic directory. +simdutf_warn_unused size_t convert_valid(const char *input, size_t size, + char16_t *utf16_output) noexcept { + // The implementation is not specific to haswell and should be moved to the + // generic directory. size_t pos = 0; - char16_t* start{utf16_output}; + char16_t *start{utf16_output}; const size_t safety_margin = 16; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - // this loop could be unrolled further. For example, we could process the mask - // far more than 64 bytes. + while (pos + 64 + safety_margin <= size) { + // this loop could be unrolled further. For example, we could process the + // mask far more than 64 bytes. simd8x64 in(reinterpret_cast(input + pos)); - if(in.is_ascii()) { + if (in.is_ascii()) { in.store_ascii_as_utf16(utf16_output); utf16_output += 64; pos += 64; } else { - // Slow path. We hope that the compiler will recognize that this is a slow path. - // Anything that is not a continuation mask is a 'leading byte', that is, the - // start of a new code point. + // Slow path. We hope that the compiler will recognize that this is a slow + // path. Anything that is not a continuation mask is a 'leading byte', + // that is, the start of a new code point. uint64_t utf8_continuation_mask = in.lt(-65 + 1); - // -65 is 0b10111111 in two-complement's, so largest possible continuation byte + // -65 is 0b10111111 in two-complement's, so largest possible continuation + // byte uint64_t utf8_leading_mask = ~utf8_continuation_mask; - // The *start* of code points is not so useful, rather, we want the *end* of code points. - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; + // The *start* of code points is not so useful, rather, we want the *end* + // of code points. + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; // We process in blocks of up to 12 bytes except possibly // for fast paths which may process up to 16 bytes. For the // slow path to work, we should have at least 12 input bytes left. size_t max_starting_point = (pos + 64) - 12; // Next loop is going to run at least five times when using solely // the slow/regular path, and at least four times if there are fast paths. - while(pos < max_starting_point) { + while (pos < max_starting_point) { // Performance note: our ability to compute 'consumed' and // then shift and recompute is critical. If there is a // latency of, say, 4 cycles on getting 'consumed', then @@ -30320,8 +32032,8 @@ simdutf_warn_unused size_t convert_valid(const char* input, size_t size, // Thus we may allow convert_masked_utf8_to_utf16 to process // more bytes at a time under a fast-path mode where 16 bytes // are consumed at once (e.g., when encountering ASCII). - size_t consumed = convert_masked_utf8_to_utf16(input + pos, - utf8_end_of_code_point_mask, utf16_output); + size_t consumed = convert_masked_utf8_to_utf16( + input + pos, utf8_end_of_code_point_mask, utf16_output); pos += consumed; utf8_end_of_code_point_mask >>= consumed; } @@ -30331,7 +32043,8 @@ simdutf_warn_unused size_t convert_valid(const char* input, size_t size, // 85% to 90% efficiency. } } - utf16_output += scalar::utf8_to_utf16::convert_valid(input + pos, size - pos, utf16_output); + utf16_output += scalar::utf8_to_utf16::convert_valid( + input + pos, size - pos, utf16_output); return utf16_output - start; } @@ -30340,48 +32053,48 @@ simdutf_warn_unused size_t convert_valid(const char* input, size_t size, } // namespace ppc64 } // namespace simdutf /* end file src/generic/utf8_to_utf16/valid_utf8_to_utf16.h */ -/* begin file src/generic/utf8_to_utf16/utf8_to_utf16.h */ - +// transcoding from UTF-8 to UTF-32 +/* begin file src/generic/utf8_to_utf32/utf8_to_utf32.h */ namespace simdutf { namespace ppc64 { namespace { -namespace utf8_to_utf16 { +namespace utf8_to_utf32 { using namespace simd; - - simdutf_really_inline simd8 check_special_cases(const simd8 input, const simd8 prev1) { -// Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) -// Bit 1 = Too Long (ASCII followed by continuation) -// Bit 2 = Overlong 3-byte -// Bit 4 = Surrogate -// Bit 5 = Overlong 2-byte -// Bit 7 = Two Continuations - constexpr const uint8_t TOO_SHORT = 1<<0; // 11______ 0_______ - // 11______ 11______ - constexpr const uint8_t TOO_LONG = 1<<1; // 0_______ 10______ - constexpr const uint8_t OVERLONG_3 = 1<<2; // 11100000 100_____ - constexpr const uint8_t SURROGATE = 1<<4; // 11101101 101_____ - constexpr const uint8_t OVERLONG_2 = 1<<5; // 1100000_ 10______ - constexpr const uint8_t TWO_CONTS = 1<<7; // 10______ 10______ - constexpr const uint8_t TOO_LARGE = 1<<3; // 11110100 1001____ - // 11110100 101_____ - // 11110101 1001____ - // 11110101 101_____ - // 1111011_ 1001____ - // 1111011_ 101_____ - // 11111___ 1001____ - // 11111___ 101_____ - constexpr const uint8_t TOO_LARGE_1000 = 1<<6; - // 11110101 1000____ - // 1111011_ 1000____ - // 11111___ 1000____ - constexpr const uint8_t OVERLONG_4 = 1<<6; // 11110000 1000____ - - const simd8 byte_1_high = prev1.shr<4>().lookup_16( +simdutf_really_inline simd8 +check_special_cases(const simd8 input, const simd8 prev1) { + // Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) + // Bit 1 = Too Long (ASCII followed by continuation) + // Bit 2 = Overlong 3-byte + // Bit 4 = Surrogate + // Bit 5 = Overlong 2-byte + // Bit 7 = Two Continuations + constexpr const uint8_t TOO_SHORT = 1 << 0; // 11______ 0_______ + // 11______ 11______ + constexpr const uint8_t TOO_LONG = 1 << 1; // 0_______ 10______ + constexpr const uint8_t OVERLONG_3 = 1 << 2; // 11100000 100_____ + constexpr const uint8_t SURROGATE = 1 << 4; // 11101101 101_____ + constexpr const uint8_t OVERLONG_2 = 1 << 5; // 1100000_ 10______ + constexpr const uint8_t TWO_CONTS = 1 << 7; // 10______ 10______ + constexpr const uint8_t TOO_LARGE = 1 << 3; // 11110100 1001____ + // 11110100 101_____ + // 11110101 1001____ + // 11110101 101_____ + // 1111011_ 1001____ + // 1111011_ 101_____ + // 11111___ 1001____ + // 11111___ 101_____ + constexpr const uint8_t TOO_LARGE_1000 = 1 << 6; + // 11110101 1000____ + // 1111011_ 1000____ + // 11111___ 1000____ + constexpr const uint8_t OVERLONG_4 = 1 << 6; // 11110000 1000____ + + const simd8 byte_1_high = prev1.shr<4>().lookup_16( // 0_______ ________ - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, // 10______ ________ TWO_CONTS, TWO_CONTS, TWO_CONTS, TWO_CONTS, // 1100____ ________ @@ -30391,265 +32104,277 @@ using namespace simd; // 1110____ ________ TOO_SHORT | OVERLONG_3 | SURROGATE, // 1111____ ________ - TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4 - ); - constexpr const uint8_t CARRY = TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . - const simd8 byte_1_low = (prev1 & 0x0F).lookup_16( - // ____0000 ________ - CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, - // ____0001 ________ - CARRY | OVERLONG_2, - // ____001_ ________ - CARRY, - CARRY, - - // ____0100 ________ - CARRY | TOO_LARGE, - // ____0101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____011_ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - - // ____1___ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____1101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000 - ); - const simd8 byte_2_high = input.shr<4>().lookup_16( + TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4); + constexpr const uint8_t CARRY = + TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . + const simd8 byte_1_low = + (prev1 & 0x0F) + .lookup_16( + // ____0000 ________ + CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, + // ____0001 ________ + CARRY | OVERLONG_2, + // ____001_ ________ + CARRY, CARRY, + + // ____0100 ________ + CARRY | TOO_LARGE, + // ____0101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____011_ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + + // ____1___ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____1101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000); + const simd8 byte_2_high = input.shr<4>().lookup_16( // ________ 0_______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, // ________ 1000____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | OVERLONG_4, + TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | + OVERLONG_4, // ________ 1001____ TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE, // ________ 101_____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, // ________ 11______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT - ); - return (byte_1_high & byte_1_low & byte_2_high); - } - simdutf_really_inline simd8 check_multibyte_lengths(const simd8 input, - const simd8 prev_input, const simd8 sc) { - simd8 prev2 = input.prev<2>(prev_input); - simd8 prev3 = input.prev<3>(prev_input); - simd8 must23 = simd8(must_be_2_3_continuation(prev2, prev3)); - simd8 must23_80 = must23 & uint8_t(0x80); - return must23_80 ^ sc; - } - - - struct validating_transcoder { - // If this is nonzero, there has been a UTF-8 error. - simd8 error; - - validating_transcoder() : error(uint8_t(0)) {} - // - // Check whether the current bytes are valid UTF-8. - // - simdutf_really_inline void check_utf8_bytes(const simd8 input, const simd8 prev_input) { - // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ lead bytes - // (2, 3, 4-byte leads become large positive numbers instead of small negative numbers) - simd8 prev1 = input.prev<1>(prev_input); - simd8 sc = check_special_cases(input, prev1); - this->error |= check_multibyte_lengths(input, prev_input, sc); - } - - - template - simdutf_really_inline size_t convert(const char* in, size_t size, char16_t* utf16_output) { - size_t pos = 0; - char16_t* start{utf16_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 bytes when calling convert_masked_utf8_to_utf16. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 8 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); - } - // If the input is long enough, then we have that margin-1 is the eight last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store_ascii_as_utf16(utf16_output); - utf16_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - auto zero = simd8{uint8_t(0)}; - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - if(utf8_continuation_mask & 1) { - return 0; // error - } - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_utf16(in + pos, - utf8_end_of_code_point_mask, utf16_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT); + return (byte_1_high & byte_1_low & byte_2_high); +} +simdutf_really_inline simd8 +check_multibyte_lengths(const simd8 input, + const simd8 prev_input, + const simd8 sc) { + simd8 prev2 = input.prev<2>(prev_input); + simd8 prev3 = input.prev<3>(prev_input); + simd8 must23 = + simd8(must_be_2_3_continuation(prev2, prev3)); + simd8 must23_80 = must23 & uint8_t(0x80); + return must23_80 ^ sc; +} + +struct validating_transcoder { + // If this is nonzero, there has been a UTF-8 error. + simd8 error; + + validating_transcoder() : error(uint8_t(0)) {} + // + // Check whether the current bytes are valid UTF-8. + // + simdutf_really_inline void check_utf8_bytes(const simd8 input, + const simd8 prev_input) { + // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ + // lead bytes (2, 3, 4-byte leads become large positive numbers instead of + // small negative numbers) + simd8 prev1 = input.prev<1>(prev_input); + simd8 sc = check_special_cases(input, prev1); + this->error |= check_multibyte_lengths(input, prev_input, sc); + } + + simdutf_really_inline size_t convert(const char *in, size_t size, + char32_t *utf32_output) { + size_t pos = 0; + char32_t *start{utf32_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 words when calling convert_masked_utf8_to_utf32. If you skip the + // last 16 bytes, and if the data is valid, then it is entirely safe because + // 16 UTF-8 bytes generate much more than 8 bytes. However, you cannot + // generally assume that you have valid UTF-8 input, so we are going to go + // back from the end counting 16 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 8; margin--) { + leading_byte += (int8_t(in[margin - 1]) > -65); + } + // If the input is long enough, then we have that margin-1 is the fourth + // last leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store_ascii_as_utf32(utf32_output); + utf32_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, + // it is not good enough. + static_assert( + (simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + auto zero = simd8{uint8_t(0)}; + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); } - } - if(errors()) { return 0; } - if(pos < size) { - size_t howmany = scalar::utf8_to_utf16::convert(in + pos, size - pos, utf16_output); - if(howmany == 0) { return 0; } - utf16_output += howmany; - } - return utf16_output - start; - } - - template - simdutf_really_inline result convert_with_errors(const char* in, size_t size, char16_t* utf16_output) { - size_t pos = 0; - char16_t* start{utf16_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 bytes when calling convert_masked_utf8_to_utf16. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 8 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); - } - // If the input is long enough, then we have that margin-1 is the eight last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store_ascii_as_utf16(utf16_output); - utf16_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - auto zero = simd8{uint8_t(0)}; - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - if (errors() || (utf8_continuation_mask & 1)) { - // rewind_and_convert_with_errors will seek a potential error from in+pos onward, - // with the ability to go back up to pos bytes, and read size-pos bytes forward. - result res = scalar::utf8_to_utf16::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf16_output); - res.count += pos; - return res; - } - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_utf16(in + pos, - utf8_end_of_code_point_mask, utf16_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + if (utf8_continuation_mask & 1) { + return 0; // we have an error + } + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_utf32( + in + pos, utf8_end_of_code_point_mask, utf32_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. } - if(errors()) { - // rewind_and_convert_with_errors will seek a potential error from in+pos onward, - // with the ability to go back up to pos bytes, and read size-pos bytes forward. - result res = scalar::utf8_to_utf16::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf16_output); - res.count += pos; - return res; + } + if (errors()) { + return 0; + } + if (pos < size) { + size_t howmany = + scalar::utf8_to_utf32::convert(in + pos, size - pos, utf32_output); + if (howmany == 0) { + return 0; } - if(pos < size) { - // rewind_and_convert_with_errors will seek a potential error from in+pos onward, - // with the ability to go back up to pos bytes, and read size-pos bytes forward. - result res = scalar::utf8_to_utf16::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf16_output); - if (res.error) { // In case of error, we want the error position + utf32_output += howmany; + } + return utf32_output - start; + } + + simdutf_really_inline result convert_with_errors(const char *in, size_t size, + char32_t *utf32_output) { + size_t pos = 0; + char32_t *start{utf32_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 bytes when calling convert_masked_utf8_to_utf32. If you skip the + // last 16 bytes, and if the data is valid, then it is entirely safe because + // 16 UTF-8 bytes generate much more than 8 bytes. However, you cannot + // generally assume that you have valid UTF-8 input, so we are going to go + // back from the end counting 8 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 8; margin--) { + leading_byte += (int8_t(in[margin - 1]) > -65); + } + // If the input is long enough, then we have that margin-1 is the fourth + // last leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store_ascii_as_utf32(utf32_output); + utf32_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, + // it is not good enough. + static_assert( + (simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + auto zero = simd8{uint8_t(0)}; + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); + } + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + if (errors() || (utf8_continuation_mask & 1)) { + result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf32_output); res.count += pos; return res; - } else { // In case of success, we want the number of word written - utf16_output += res.count; } + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_utf32( + in + pos, utf8_end_of_code_point_mask, utf32_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; + } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. } - return result(error_code::SUCCESS, utf16_output - start); } - - simdutf_really_inline bool errors() const { - return this->error.any_bits_set_anywhere(); + if (errors()) { + result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf32_output); + res.count += pos; + return res; + } + if (pos < size) { + result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf32_output); + if (res.error) { // In case of error, we want the error position + res.count += pos; + return res; + } else { // In case of success, we want the number of word written + utf32_output += res.count; + } } + return result(error_code::SUCCESS, utf32_output - start); + } + + simdutf_really_inline bool errors() const { + return this->error.any_bits_set_anywhere(); + } - }; // struct utf8_checker -} // utf8_to_utf16 namespace +}; // struct utf8_checker +} // namespace utf8_to_utf32 } // unnamed namespace } // namespace ppc64 } // namespace simdutf -/* end file src/generic/utf8_to_utf16/utf8_to_utf16.h */ -// transcoding from UTF-8 to UTF-32 +/* end file src/generic/utf8_to_utf32/utf8_to_utf32.h */ /* begin file src/generic/utf8_to_utf32/valid_utf8_to_utf32.h */ namespace simdutf { @@ -30659,385 +32384,43 @@ namespace utf8_to_utf32 { using namespace simd; - -simdutf_warn_unused size_t convert_valid(const char* input, size_t size, - char32_t* utf32_output) noexcept { +simdutf_warn_unused size_t convert_valid(const char *input, size_t size, + char32_t *utf32_output) noexcept { size_t pos = 0; - char32_t* start{utf32_output}; + char32_t *start{utf32_output}; const size_t safety_margin = 16; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { + while (pos + 64 + safety_margin <= size) { simd8x64 in(reinterpret_cast(input + pos)); - if(in.is_ascii()) { + if (in.is_ascii()) { in.store_ascii_as_utf32(utf32_output); utf32_output += 64; pos += 64; } else { - // -65 is 0b10111111 in two-complement's, so largest possible continuation byte - uint64_t utf8_continuation_mask = in.lt(-65 + 1); - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - size_t max_starting_point = (pos + 64) - 12; - while(pos < max_starting_point) { - size_t consumed = convert_masked_utf8_to_utf32(input + pos, - utf8_end_of_code_point_mask, utf32_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; + // -65 is 0b10111111 in two-complement's, so largest possible continuation + // byte + uint64_t utf8_continuation_mask = in.lt(-65 + 1); + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + size_t max_starting_point = (pos + 64) - 12; + while (pos < max_starting_point) { + size_t consumed = convert_masked_utf8_to_utf32( + input + pos, utf8_end_of_code_point_mask, utf32_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; } } } - utf32_output += scalar::utf8_to_utf32::convert_valid(input + pos, size - pos, utf32_output); + utf32_output += scalar::utf8_to_utf32::convert_valid(input + pos, size - pos, + utf32_output); return utf32_output - start; } - } // namespace utf8_to_utf32 } // unnamed namespace } // namespace ppc64 } // namespace simdutf /* end file src/generic/utf8_to_utf32/valid_utf8_to_utf32.h */ -/* begin file src/generic/utf8_to_utf32/utf8_to_utf32.h */ - - -namespace simdutf { -namespace ppc64 { -namespace { -namespace utf8_to_utf32 { -using namespace simd; - - - simdutf_really_inline simd8 check_special_cases(const simd8 input, const simd8 prev1) { -// Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) -// Bit 1 = Too Long (ASCII followed by continuation) -// Bit 2 = Overlong 3-byte -// Bit 4 = Surrogate -// Bit 5 = Overlong 2-byte -// Bit 7 = Two Continuations - constexpr const uint8_t TOO_SHORT = 1<<0; // 11______ 0_______ - // 11______ 11______ - constexpr const uint8_t TOO_LONG = 1<<1; // 0_______ 10______ - constexpr const uint8_t OVERLONG_3 = 1<<2; // 11100000 100_____ - constexpr const uint8_t SURROGATE = 1<<4; // 11101101 101_____ - constexpr const uint8_t OVERLONG_2 = 1<<5; // 1100000_ 10______ - constexpr const uint8_t TWO_CONTS = 1<<7; // 10______ 10______ - constexpr const uint8_t TOO_LARGE = 1<<3; // 11110100 1001____ - // 11110100 101_____ - // 11110101 1001____ - // 11110101 101_____ - // 1111011_ 1001____ - // 1111011_ 101_____ - // 11111___ 1001____ - // 11111___ 101_____ - constexpr const uint8_t TOO_LARGE_1000 = 1<<6; - // 11110101 1000____ - // 1111011_ 1000____ - // 11111___ 1000____ - constexpr const uint8_t OVERLONG_4 = 1<<6; // 11110000 1000____ - - const simd8 byte_1_high = prev1.shr<4>().lookup_16( - // 0_______ ________ - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, - // 10______ ________ - TWO_CONTS, TWO_CONTS, TWO_CONTS, TWO_CONTS, - // 1100____ ________ - TOO_SHORT | OVERLONG_2, - // 1101____ ________ - TOO_SHORT, - // 1110____ ________ - TOO_SHORT | OVERLONG_3 | SURROGATE, - // 1111____ ________ - TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4 - ); - constexpr const uint8_t CARRY = TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . - const simd8 byte_1_low = (prev1 & 0x0F).lookup_16( - // ____0000 ________ - CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, - // ____0001 ________ - CARRY | OVERLONG_2, - // ____001_ ________ - CARRY, - CARRY, - - // ____0100 ________ - CARRY | TOO_LARGE, - // ____0101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____011_ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - - // ____1___ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____1101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000 - ); - const simd8 byte_2_high = input.shr<4>().lookup_16( - // ________ 0_______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, - - // ________ 1000____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | OVERLONG_4, - // ________ 1001____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE, - // ________ 101_____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, - - // ________ 11______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT - ); - return (byte_1_high & byte_1_low & byte_2_high); - } - simdutf_really_inline simd8 check_multibyte_lengths(const simd8 input, - const simd8 prev_input, const simd8 sc) { - simd8 prev2 = input.prev<2>(prev_input); - simd8 prev3 = input.prev<3>(prev_input); - simd8 must23 = simd8(must_be_2_3_continuation(prev2, prev3)); - simd8 must23_80 = must23 & uint8_t(0x80); - return must23_80 ^ sc; - } - - - struct validating_transcoder { - // If this is nonzero, there has been a UTF-8 error. - simd8 error; - - validating_transcoder() : error(uint8_t(0)) {} - // - // Check whether the current bytes are valid UTF-8. - // - simdutf_really_inline void check_utf8_bytes(const simd8 input, const simd8 prev_input) { - // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ lead bytes - // (2, 3, 4-byte leads become large positive numbers instead of small negative numbers) - simd8 prev1 = input.prev<1>(prev_input); - simd8 sc = check_special_cases(input, prev1); - this->error |= check_multibyte_lengths(input, prev_input, sc); - } - - - - simdutf_really_inline size_t convert(const char* in, size_t size, char32_t* utf32_output) { - size_t pos = 0; - char32_t* start{utf32_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 words when calling convert_masked_utf8_to_utf32. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 16 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); - } - // If the input is long enough, then we have that margin-1 is the fourth last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store_ascii_as_utf32(utf32_output); - utf32_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - auto zero = simd8{uint8_t(0)}; - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - if(utf8_continuation_mask & 1) { - return 0; // we have an error - } - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_utf32(in + pos, - utf8_end_of_code_point_mask, utf32_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. - } - } - if(errors()) { return 0; } - if(pos < size) { - size_t howmany = scalar::utf8_to_utf32::convert(in + pos, size - pos, utf32_output); - if(howmany == 0) { return 0; } - utf32_output += howmany; - } - return utf32_output - start; - } - - simdutf_really_inline result convert_with_errors(const char* in, size_t size, char32_t* utf32_output) { - size_t pos = 0; - char32_t* start{utf32_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 bytes when calling convert_masked_utf8_to_utf32. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 8 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); - } - // If the input is long enough, then we have that margin-1 is the fourth last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store_ascii_as_utf32(utf32_output); - utf32_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - auto zero = simd8{uint8_t(0)}; - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - if (errors() || (utf8_continuation_mask & 1)) { - result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf32_output); - res.count += pos; - return res; - } - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_utf32(in + pos, - utf8_end_of_code_point_mask, utf32_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. - } - } - if(errors()) { - result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf32_output); - res.count += pos; - return res; - } - if(pos < size) { - result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf32_output); - if (res.error) { // In case of error, we want the error position - res.count += pos; - return res; - } else { // In case of success, we want the number of word written - utf32_output += res.count; - } - } - return result(error_code::SUCCESS, utf32_output - start); - } - - simdutf_really_inline bool errors() const { - return this->error.any_bits_set_anywhere(); - } - - }; // struct utf8_checker -} // utf8_to_utf32 namespace -} // unnamed namespace -} // namespace ppc64 -} // namespace simdutf -/* end file src/generic/utf8_to_utf32/utf8_to_utf32.h */ // other functions -/* begin file src/generic/utf8.h */ - -namespace simdutf { -namespace ppc64 { -namespace { -namespace utf8 { - -using namespace simd; - -simdutf_really_inline size_t count_code_points(const char* in, size_t size) { - size_t pos = 0; - size_t count = 0; - for(;pos + 64 <= size; pos += 64) { - simd8x64 input(reinterpret_cast(in + pos)); - uint64_t utf8_continuation_mask = input.gt(-65); - count += count_ones(utf8_continuation_mask); - } - return count + scalar::utf8::count_code_points(in + pos, size - pos); -} - -simdutf_really_inline size_t utf16_length_from_utf8(const char* in, size_t size) { - size_t pos = 0; - size_t count = 0; - // This algorithm could no doubt be improved! - for(;pos + 64 <= size; pos += 64) { - simd8x64 input(reinterpret_cast(in + pos)); - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - // We count one word for anything that is not a continuation (so - // leading bytes). - count += 64 - count_ones(utf8_continuation_mask); - int64_t utf8_4byte = input.gteq_unsigned(240); - count += count_ones(utf8_4byte); - } - return count + scalar::utf8::utf16_length_from_utf8(in + pos, size - pos); -} -} // utf8 namespace -} // unnamed namespace -} // namespace ppc64 -} // namespace simdutf -/* end file src/generic/utf8.h */ /* begin file src/generic/utf16.h */ namespace simdutf { namespace ppc64 { @@ -31045,48 +32428,59 @@ namespace { namespace utf16 { template -simdutf_really_inline size_t count_code_points(const char16_t* in, size_t size) { - size_t pos = 0; - size_t count = 0; - for(;pos < size/32*32; pos += 32) { - simd16x32 input(reinterpret_cast(in + pos)); - if (!match_system(big_endian)) { input.swap_bytes(); } - uint64_t not_pair = input.not_in_range(0xDC00, 0xDFFF); - count += count_ones(not_pair) / 2; +simdutf_really_inline size_t count_code_points(const char16_t *in, + size_t size) { + size_t pos = 0; + size_t count = 0; + for (; pos < size / 32 * 32; pos += 32) { + simd16x32 input(reinterpret_cast(in + pos)); + if (!match_system(big_endian)) { + input.swap_bytes(); } - return count + scalar::utf16::count_code_points(in + pos, size - pos); + uint64_t not_pair = input.not_in_range(0xDC00, 0xDFFF); + count += count_ones(not_pair) / 2; + } + return count + + scalar::utf16::count_code_points(in + pos, size - pos); } template -simdutf_really_inline size_t utf8_length_from_utf16(const char16_t* in, size_t size) { - size_t pos = 0; - size_t count = 0; - // This algorithm could no doubt be improved! - for(;pos < size/32*32; pos += 32) { - simd16x32 input(reinterpret_cast(in + pos)); - if (!match_system(big_endian)) { input.swap_bytes(); } - uint64_t ascii_mask = input.lteq(0x7F); - uint64_t twobyte_mask = input.lteq(0x7FF); - uint64_t not_pair_mask = input.not_in_range(0xD800, 0xDFFF); - - size_t ascii_count = count_ones(ascii_mask) / 2; - size_t twobyte_count = count_ones(twobyte_mask & ~ ascii_mask) / 2; - size_t threebyte_count = count_ones(not_pair_mask & ~ twobyte_mask) / 2; - size_t fourbyte_count = 32 - count_ones(not_pair_mask) / 2; - count += 2 * fourbyte_count + 3 * threebyte_count + 2 * twobyte_count + ascii_count; +simdutf_really_inline size_t utf8_length_from_utf16(const char16_t *in, + size_t size) { + size_t pos = 0; + size_t count = 0; + // This algorithm could no doubt be improved! + for (; pos < size / 32 * 32; pos += 32) { + simd16x32 input(reinterpret_cast(in + pos)); + if (!match_system(big_endian)) { + input.swap_bytes(); } - return count + scalar::utf16::utf8_length_from_utf16(in + pos, size - pos); + uint64_t ascii_mask = input.lteq(0x7F); + uint64_t twobyte_mask = input.lteq(0x7FF); + uint64_t not_pair_mask = input.not_in_range(0xD800, 0xDFFF); + + size_t ascii_count = count_ones(ascii_mask) / 2; + size_t twobyte_count = count_ones(twobyte_mask & ~ascii_mask) / 2; + size_t threebyte_count = count_ones(not_pair_mask & ~twobyte_mask) / 2; + size_t fourbyte_count = 32 - count_ones(not_pair_mask) / 2; + count += 2 * fourbyte_count + 3 * threebyte_count + 2 * twobyte_count + + ascii_count; + } + return count + scalar::utf16::utf8_length_from_utf16(in + pos, + size - pos); } template -simdutf_really_inline size_t utf32_length_from_utf16(const char16_t* in, size_t size) { - return count_code_points(in, size); +simdutf_really_inline size_t utf32_length_from_utf16(const char16_t *in, + size_t size) { + return count_code_points(in, size); } -simdutf_really_inline void change_endianness_utf16(const char16_t* in, size_t size, char16_t* output) { +simdutf_really_inline void +change_endianness_utf16(const char16_t *in, size_t size, char16_t *output) { size_t pos = 0; - while (pos < size/32*32) { + while (pos < size / 32 * 32) { simd16x32 input(reinterpret_cast(in + pos)); input.swap_bytes(); input.store(reinterpret_cast(output)); @@ -31097,11 +32491,52 @@ simdutf_really_inline void change_endianness_utf16(const char16_t* in, size_t si scalar::utf16::change_endianness_utf16(in + pos, size - pos, output); } -} // utf16 +} // namespace utf16 } // unnamed namespace } // namespace ppc64 } // namespace simdutf /* end file src/generic/utf16.h */ +/* begin file src/generic/utf8.h */ + +namespace simdutf { +namespace ppc64 { +namespace { +namespace utf8 { + +using namespace simd; + +simdutf_really_inline size_t count_code_points(const char *in, size_t size) { + size_t pos = 0; + size_t count = 0; + for (; pos + 64 <= size; pos += 64) { + simd8x64 input(reinterpret_cast(in + pos)); + uint64_t utf8_continuation_mask = input.gt(-65); + count += count_ones(utf8_continuation_mask); + } + return count + scalar::utf8::count_code_points(in + pos, size - pos); +} + +simdutf_really_inline size_t utf16_length_from_utf8(const char *in, + size_t size) { + size_t pos = 0; + size_t count = 0; + // This algorithm could no doubt be improved! + for (; pos + 64 <= size; pos += 64) { + simd8x64 input(reinterpret_cast(in + pos)); + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + // We count one word for anything that is not a continuation (so + // leading bytes). + count += 64 - count_ones(utf8_continuation_mask); + int64_t utf8_4byte = input.gteq_unsigned(240); + count += count_ones(utf8_4byte); + } + return count + scalar::utf8::utf16_length_from_utf8(in + pos, size - pos); +} +} // namespace utf8 +} // unnamed namespace +} // namespace ppc64 +} // namespace simdutf +/* end file src/generic/utf8.h */ // // Implementation-specific overrides @@ -31109,317 +32544,428 @@ simdutf_really_inline void change_endianness_utf16(const char16_t* in, size_t si namespace simdutf { namespace ppc64 { -simdutf_warn_unused int implementation::detect_encodings(const char * input, size_t length) const noexcept { +simdutf_warn_unused int +implementation::detect_encodings(const char *input, + size_t length) const noexcept { // If there is a BOM, then we trust it. auto bom_encoding = simdutf::BOM::check_bom(input, length); - if(bom_encoding != encoding_type::unspecified) { return bom_encoding; } + if (bom_encoding != encoding_type::unspecified) { + return bom_encoding; + } // todo: reimplement as a one-pass algorithm. int out = 0; - if(validate_utf8(input, length)) { out |= encoding_type::UTF8; } - if((length % 2) == 0) { - if(validate_utf16(reinterpret_cast(input), length/2)) { out |= encoding_type::UTF16_LE; } + if (validate_utf8(input, length)) { + out |= encoding_type::UTF8; + } + if ((length % 2) == 0) { + if (validate_utf16(reinterpret_cast(input), length / 2)) { + out |= encoding_type::UTF16_LE; + } } - if((length % 4) == 0) { - if(validate_utf32(reinterpret_cast(input), length/4)) { out |= encoding_type::UTF32_LE; } + if ((length % 4) == 0) { + if (validate_utf32(reinterpret_cast(input), length / 4)) { + out |= encoding_type::UTF32_LE; + } } return out; } -simdutf_warn_unused bool implementation::validate_utf8(const char *buf, size_t len) const noexcept { - return ppc64::utf8_validation::generic_validate_utf8(buf,len); +simdutf_warn_unused bool +implementation::validate_utf8(const char *buf, size_t len) const noexcept { + return ppc64::utf8_validation::generic_validate_utf8(buf, len); } -simdutf_warn_unused result implementation::validate_utf8_with_errors(const char *buf, size_t len) const noexcept { - return ppc64::utf8_validation::generic_validate_utf8_with_errors(buf,len); +simdutf_warn_unused result implementation::validate_utf8_with_errors( + const char *buf, size_t len) const noexcept { + return ppc64::utf8_validation::generic_validate_utf8_with_errors(buf, len); } -simdutf_warn_unused bool implementation::validate_ascii(const char *buf, size_t len) const noexcept { - return ppc64::utf8_validation::generic_validate_ascii(buf,len); +simdutf_warn_unused bool +implementation::validate_ascii(const char *buf, size_t len) const noexcept { + return ppc64::utf8_validation::generic_validate_ascii(buf, len); } -simdutf_warn_unused result implementation::validate_ascii_with_errors(const char *buf, size_t len) const noexcept { - return ppc64::utf8_validation::generic_validate_ascii_with_errors(buf,len); +simdutf_warn_unused result implementation::validate_ascii_with_errors( + const char *buf, size_t len) const noexcept { + return ppc64::utf8_validation::generic_validate_ascii_with_errors(buf, len); } -simdutf_warn_unused bool implementation::validate_utf16le(const char16_t *buf, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_utf16le(const char16_t *buf, + size_t len) const noexcept { return scalar::utf16::validate(buf, len); } -simdutf_warn_unused bool implementation::validate_utf16be(const char16_t *buf, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_utf16be(const char16_t *buf, + size_t len) const noexcept { return scalar::utf16::validate(buf, len); } -simdutf_warn_unused result implementation::validate_utf16le_with_errors(const char16_t *buf, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_utf16le_with_errors( + const char16_t *buf, size_t len) const noexcept { return scalar::utf16::validate_with_errors(buf, len); } -simdutf_warn_unused result implementation::validate_utf16be_with_errors(const char16_t *buf, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_utf16be_with_errors( + const char16_t *buf, size_t len) const noexcept { return scalar::utf16::validate_with_errors(buf, len); } -simdutf_warn_unused result implementation::validate_utf32_with_errors(const char32_t *buf, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_utf32_with_errors( + const char32_t *buf, size_t len) const noexcept { return scalar::utf32::validate_with_errors(buf, len); } -simdutf_warn_unused bool implementation::validate_utf32(const char16_t *buf, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_utf32(const char16_t *buf, size_t len) const noexcept { return scalar::utf32::validate(buf, len); } -simdutf_warn_unused size_t implementation::convert_utf8_to_utf16le(const char* /*buf*/, size_t /*len*/, char16_t* /*utf16_output*/) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf8_to_utf16le( + const char * /*buf*/, size_t /*len*/, + char16_t * /*utf16_output*/) const noexcept { return 0; // stub } -simdutf_warn_unused size_t implementation::convert_utf8_to_utf16be(const char* /*buf*/, size_t /*len*/, char16_t* /*utf16_output*/) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf8_to_utf16be( + const char * /*buf*/, size_t /*len*/, + char16_t * /*utf16_output*/) const noexcept { return 0; // stub } -simdutf_warn_unused result implementation::convert_utf8_to_utf16le_with_errors(const char* /*buf*/, size_t /*len*/, char16_t* /*utf16_output*/) const noexcept { +simdutf_warn_unused result implementation::convert_utf8_to_utf16le_with_errors( + const char * /*buf*/, size_t /*len*/, + char16_t * /*utf16_output*/) const noexcept { return result(error_code::OTHER, 0); // stub } -simdutf_warn_unused result implementation::convert_utf8_to_utf16be_with_errors(const char* /*buf*/, size_t /*len*/, char16_t* /*utf16_output*/) const noexcept { +simdutf_warn_unused result implementation::convert_utf8_to_utf16be_with_errors( + const char * /*buf*/, size_t /*len*/, + char16_t * /*utf16_output*/) const noexcept { return result(error_code::OTHER, 0); // stub } -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16le(const char* /*buf*/, size_t /*len*/, char16_t* /*utf16_output*/) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16le( + const char * /*buf*/, size_t /*len*/, + char16_t * /*utf16_output*/) const noexcept { return 0; // stub } -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16be(const char* /*buf*/, size_t /*len*/, char16_t* /*utf16_output*/) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16be( + const char * /*buf*/, size_t /*len*/, + char16_t * /*utf16_output*/) const noexcept { return 0; // stub } -simdutf_warn_unused size_t implementation::convert_utf8_to_utf32(const char* /*buf*/, size_t /*len*/, char32_t* /*utf16_output*/) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf8_to_utf32( + const char * /*buf*/, size_t /*len*/, + char32_t * /*utf16_output*/) const noexcept { return 0; // stub } -simdutf_warn_unused result implementation::convert_utf8_to_utf32_with_errors(const char* /*buf*/, size_t /*len*/, char32_t* /*utf16_output*/) const noexcept { +simdutf_warn_unused result implementation::convert_utf8_to_utf32_with_errors( + const char * /*buf*/, size_t /*len*/, + char32_t * /*utf16_output*/) const noexcept { return result(error_code::OTHER, 0); // stub } -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf32(const char* /*buf*/, size_t /*len*/, char32_t* /*utf16_output*/) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf32( + const char * /*buf*/, size_t /*len*/, + char32_t * /*utf16_output*/) const noexcept { return 0; // stub } -simdutf_warn_unused size_t implementation::convert_utf16le_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { - return scalar::utf16_to_utf8::convert(buf, len, utf8_output); +simdutf_warn_unused size_t implementation::convert_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { + return scalar::utf16_to_utf8::convert(buf, len, + utf8_output); } -simdutf_warn_unused size_t implementation::convert_utf16be_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { return scalar::utf16_to_utf8::convert(buf, len, utf8_output); } -simdutf_warn_unused result implementation::convert_utf16le_to_utf8_with_errors(const char16_t* buf, size_t len, char* utf8_output) const noexcept { - return scalar::utf16_to_utf8::convert_with_errors(buf, len, utf8_output); +simdutf_warn_unused result implementation::convert_utf16le_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { + return scalar::utf16_to_utf8::convert_with_errors( + buf, len, utf8_output); } -simdutf_warn_unused result implementation::convert_utf16be_to_utf8_with_errors(const char16_t* buf, size_t len, char* utf8_output) const noexcept { - return scalar::utf16_to_utf8::convert_with_errors(buf, len, utf8_output); +simdutf_warn_unused result implementation::convert_utf16be_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { + return scalar::utf16_to_utf8::convert_with_errors( + buf, len, utf8_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { - return scalar::utf16_to_utf8::convert_valid(buf, len, utf8_output); +simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { + return scalar::utf16_to_utf8::convert_valid(buf, len, + utf8_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { - return scalar::utf16_to_utf8::convert_valid(buf, len, utf8_output); +simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { + return scalar::utf16_to_utf8::convert_valid(buf, len, + utf8_output); } -simdutf_warn_unused size_t implementation::convert_utf32_to_utf8(const char32_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_output) const noexcept { return scalar::utf32_to_utf8::convert(buf, len, utf8_output); } -simdutf_warn_unused result implementation::convert_utf32_to_utf8_with_errors(const char32_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused result implementation::convert_utf32_to_utf8_with_errors( + const char32_t *buf, size_t len, char *utf8_output) const noexcept { return scalar::utf32_to_utf8::convert_with_errors(buf, len, utf8_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf8(const char32_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_output) const noexcept { return scalar::utf32_to_utf8::convert_valid(buf, len, utf8_output); } -simdutf_warn_unused size_t implementation::convert_utf32_to_utf16le(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - return scalar::utf32_to_utf16::convert(buf, len, utf16_output); +simdutf_warn_unused size_t implementation::convert_utf32_to_utf16le( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + return scalar::utf32_to_utf16::convert(buf, len, + utf16_output); } -simdutf_warn_unused size_t implementation::convert_utf32_to_utf16be(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - return scalar::utf32_to_utf16::convert(buf, len, utf16_output); +simdutf_warn_unused size_t implementation::convert_utf32_to_utf16be( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + return scalar::utf32_to_utf16::convert(buf, len, + utf16_output); } -simdutf_warn_unused result implementation::convert_utf32_to_utf16le_with_errors(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - return scalar::utf32_to_utf16::convert_with_errors(buf, len, utf16_output); +simdutf_warn_unused result implementation::convert_utf32_to_utf16le_with_errors( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + return scalar::utf32_to_utf16::convert_with_errors( + buf, len, utf16_output); } -simdutf_warn_unused result implementation::convert_utf32_to_utf16be_with_errors(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - return scalar::utf32_to_utf16::convert_with_errors(buf, len, utf16_output); +simdutf_warn_unused result implementation::convert_utf32_to_utf16be_with_errors( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + return scalar::utf32_to_utf16::convert_with_errors( + buf, len, utf16_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16le(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - return scalar::utf32_to_utf16::convert_valid(buf, len, utf16_output); +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16le( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + return scalar::utf32_to_utf16::convert_valid( + buf, len, utf16_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16be(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - return scalar::utf32_to_utf16::convert_valid(buf, len, utf16_output); +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16be( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + return scalar::utf32_to_utf16::convert_valid(buf, len, + utf16_output); } -simdutf_warn_unused size_t implementation::convert_utf16le_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - return scalar::utf16_to_utf32::convert(buf, len, utf32_output); +simdutf_warn_unused size_t implementation::convert_utf16le_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + return scalar::utf16_to_utf32::convert(buf, len, + utf32_output); } -simdutf_warn_unused size_t implementation::convert_utf16be_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - return scalar::utf16_to_utf32::convert(buf, len, utf32_output); +simdutf_warn_unused size_t implementation::convert_utf16be_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + return scalar::utf16_to_utf32::convert(buf, len, + utf32_output); } -simdutf_warn_unused result implementation::convert_utf16le_to_utf32_with_errors(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - return scalar::utf16_to_utf32::convert_with_errors(buf, len, utf32_output); +simdutf_warn_unused result implementation::convert_utf16le_to_utf32_with_errors( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + return scalar::utf16_to_utf32::convert_with_errors( + buf, len, utf32_output); } -simdutf_warn_unused result implementation::convert_utf16be_to_utf32_with_errors(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - return scalar::utf16_to_utf32::convert_with_errors(buf, len, utf32_output); +simdutf_warn_unused result implementation::convert_utf16be_to_utf32_with_errors( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + return scalar::utf16_to_utf32::convert_with_errors( + buf, len, utf32_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - return scalar::utf16_to_utf32::convert_valid(buf, len, utf32_output); +simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + return scalar::utf16_to_utf32::convert_valid( + buf, len, utf32_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - return scalar::utf16_to_utf32::convert_valid(buf, len, utf32_output); +simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + return scalar::utf16_to_utf32::convert_valid(buf, len, + utf32_output); } -void implementation::change_endianness_utf16(const char16_t * input, size_t length, char16_t * output) const noexcept { +void implementation::change_endianness_utf16(const char16_t *input, + size_t length, + char16_t *output) const noexcept { scalar::utf16::change_endianness_utf16(input, length, output); } -simdutf_warn_unused size_t implementation::count_utf16le(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::count_utf16le( + const char16_t *input, size_t length) const noexcept { return scalar::utf16::count_code_points(input, length); } -simdutf_warn_unused size_t implementation::count_utf16be(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::count_utf16be( + const char16_t *input, size_t length) const noexcept { return scalar::utf16::count_code_points(input, length); } -simdutf_warn_unused size_t implementation::count_utf8(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::count_utf8(const char *input, size_t length) const noexcept { return utf8::count_code_points(input, length); } -simdutf_warn_unused size_t implementation::utf8_length_from_utf16le(const char16_t * input, size_t length) const noexcept { - return scalar::utf16::utf8_length_from_utf16(input, length); +simdutf_warn_unused size_t implementation::utf8_length_from_utf16le( + const char16_t *input, size_t length) const noexcept { + return scalar::utf16::utf8_length_from_utf16(input, + length); } -simdutf_warn_unused size_t implementation::utf8_length_from_utf16be(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf8_length_from_utf16be( + const char16_t *input, size_t length) const noexcept { return scalar::utf16::utf8_length_from_utf16(input, length); } -simdutf_warn_unused size_t implementation::utf32_length_from_utf16le(const char16_t * input, size_t length) const noexcept { - return scalar::utf16::utf32_length_from_utf16(input, length); +simdutf_warn_unused size_t implementation::utf32_length_from_utf16le( + const char16_t *input, size_t length) const noexcept { + return scalar::utf16::utf32_length_from_utf16(input, + length); } -simdutf_warn_unused size_t implementation::utf32_length_from_utf16be(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf32_length_from_utf16be( + const char16_t *input, size_t length) const noexcept { return scalar::utf16::utf32_length_from_utf16(input, length); } -simdutf_warn_unused size_t implementation::utf16_length_from_utf8(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf16_length_from_utf8( + const char *input, size_t length) const noexcept { return scalar::utf8::utf16_length_from_utf8(input, length); } -simdutf_warn_unused size_t implementation::utf8_length_from_utf32(const char32_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf8_length_from_utf32( + const char32_t *input, size_t length) const noexcept { return scalar::utf32::utf8_length_from_utf32(input, length); } -simdutf_warn_unused size_t implementation::utf16_length_from_utf32(const char32_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf16_length_from_utf32( + const char32_t *input, size_t length) const noexcept { return scalar::utf32::utf16_length_from_utf32(input, length); } -simdutf_warn_unused size_t implementation::utf32_length_from_utf8(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf32_length_from_utf8( + const char *input, size_t length) const noexcept { return scalar::utf8::count_code_points(input, length); } - -simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64( + const char *input, size_t length) const noexcept { return scalar::base64::maximal_binary_length_from_base64(input, length); } -simdutf_warn_unused result implementation::base64_to_binary(const char * input, size_t length, char* output, base64_options options) const noexcept { +simdutf_warn_unused result implementation::base64_to_binary( + const char *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_options) const noexcept { // skip trailing spaces - while(length > 0 && scalar::base64::is_ascii_white_space(input[length - 1])) { + while (length > 0 && + scalar::base64::is_ascii_white_space(input[length - 1])) { length--; } - size_t equallocation = length; // location of the first padding character if any + size_t equallocation = + length; // location of the first padding character if any size_t equalsigns = 0; - if(length > 0 && input[length - 1] == '=') { + if (length > 0 && input[length - 1] == '=') { equallocation = length - 1; length -= 1; equalsigns++; - while(length > 0 && scalar::base64::is_ascii_white_space(input[length - 1])) { + while (length > 0 && + scalar::base64::is_ascii_white_space(input[length - 1])) { length--; } - if(length > 0 && input[length - 1] == '=') { + if (length > 0 && input[length - 1] == '=') { equallocation = length - 1; equalsigns++; length -= 1; } } - if(length == 0) { - if(equalsigns > 0) { - return {INVALID_BASE64_CHARACTER, equallocation};; + if (length == 0) { + if (equalsigns > 0) { + return {INVALID_BASE64_CHARACTER, equallocation}; } return {SUCCESS, 0}; } - result r = scalar::base64::base64_tail_decode(output, input, length, options); - if(r.error == error_code::SUCCESS && equalsigns > 0) { + result r = scalar::base64::base64_tail_decode( + output, input, length, equalsigns, options, last_chunk_options); + if (last_chunk_options != stop_before_partial && + r.error == error_code::SUCCESS && equalsigns > 0) { // additional checks - if((r.count % 3 == 0) || ((r.count % 3) + 1 + equalsigns != 4)) { + if ((r.count % 3 == 0) || ((r.count % 3) + 1 + equalsigns != 4)) { return {INVALID_BASE64_CHARACTER, equallocation}; } } return r; } -simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64( + const char16_t *input, size_t length) const noexcept { return scalar::base64::maximal_binary_length_from_base64(input, length); } -simdutf_warn_unused result implementation::base64_to_binary(const char16_t * input, size_t length, char* output, base64_options options) const noexcept { +simdutf_warn_unused result implementation::base64_to_binary( + const char16_t *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_options) const noexcept { // skip trailing spaces - while(length > 0 && scalar::base64::is_ascii_white_space(input[length - 1])) { + while (length > 0 && + scalar::base64::is_ascii_white_space(input[length - 1])) { length--; } - size_t equallocation = length; // location of the first padding character if any + size_t equallocation = + length; // location of the first padding character if any size_t equalsigns = 0; - if(length > 0 && input[length - 1] == '=') { + if (length > 0 && input[length - 1] == '=') { equallocation = length - 1; length -= 1; equalsigns++; - while(length > 0 && scalar::base64::is_ascii_white_space(input[length - 1])) { + while (length > 0 && + scalar::base64::is_ascii_white_space(input[length - 1])) { length--; } - if(length > 0 && input[length - 1] == '=') { + if (length > 0 && input[length - 1] == '=') { equallocation = length - 1; equalsigns++; length -= 1; } } - if(length == 0) { - if(equalsigns > 0) { + if (length == 0) { + if (equalsigns > 0) { return {INVALID_BASE64_CHARACTER, equallocation}; } return {SUCCESS, 0}; } - result r = scalar::base64::base64_tail_decode(output, input, length, options); - if(r.error == error_code::SUCCESS && equalsigns > 0) { + result r = scalar::base64::base64_tail_decode( + output, input, length, equalsigns, options, last_chunk_options); + if (last_chunk_options != stop_before_partial && + r.error == error_code::SUCCESS && equalsigns > 0) { // additional checks - if((r.count % 3 == 0) || ((r.count % 3) + 1 + equalsigns != 4)) { + if ((r.count % 3 == 0) || ((r.count % 3) + 1 + equalsigns != 4)) { return {INVALID_BASE64_CHARACTER, equallocation}; } } return r; } -simdutf_warn_unused size_t implementation::base64_length_from_binary(size_t length, base64_options options) const noexcept { +simdutf_warn_unused size_t implementation::base64_length_from_binary( + size_t length, base64_options options) const noexcept { return scalar::base64::base64_length_from_binary(length, options); } -size_t implementation::binary_to_base64(const char * input, size_t length, char* output, base64_options options) const noexcept { +size_t implementation::binary_to_base64(const char *input, size_t length, + char *output, + base64_options options) const noexcept { return scalar::base64::binary_to_base64(input, length, output, options); } } // namespace ppc64 @@ -31450,7 +32996,7 @@ namespace simdutf { namespace rvv { namespace { #ifndef SIMDUTF_RVV_H -#error "rvv.h must be included" + #error "rvv.h must be included" #endif } // unnamed namespace @@ -31462,216 +33008,271 @@ namespace { // namespace simdutf { namespace rvv { +/* begin file src/rvv/rvv_helpers.inl.cpp */ +template +simdutf_really_inline static size_t +rvv_utf32_store_utf16_m4(uint16_t *dst, vuint32m4_t utf32, size_t vl, + vbool4_t m4even) { + /* convert [000000000000aaaa|aaaaaabbbbbbbbbb] + * to [110111bbbbbbbbbb|110110aaaaaaaaaa] */ + vuint32m4_t sur = __riscv_vsub_vx_u32m4(utf32, 0x10000, vl); + sur = __riscv_vor_vv_u32m4(__riscv_vsll_vx_u32m4(sur, 16, vl), + __riscv_vsrl_vx_u32m4(sur, 10, vl), vl); + sur = __riscv_vand_vx_u32m4(sur, 0x3FF03FF, vl); + sur = __riscv_vor_vx_u32m4(sur, 0xDC00D800, vl); + /* merge 1 byte utf32 and 2 byte sur */ + vbool8_t m4 = __riscv_vmsgtu_vx_u32m4_b8(utf32, 0xFFFF, vl); + vuint16m4_t utf32_16 = __riscv_vreinterpret_v_u32m4_u16m4( + __riscv_vmerge_vvm_u32m4(utf32, sur, m4, vl)); + /* compress and store */ + vbool4_t mOut = __riscv_vmor_mm_b4( + __riscv_vmsne_vx_u16m4_b4(utf32_16, 0, vl * 2), m4even, vl * 2); + vuint16m4_t vout = __riscv_vcompress_vm_u16m4(utf32_16, mOut, vl * 2); + vl = __riscv_vcpop_m_b4(mOut, vl * 2); + __riscv_vse16_v_u16m4(dst, simdutf_byteflip(vout, vl), vl); + return vl; +}; +/* end file src/rvv/rvv_helpers.inl.cpp */ /* begin file src/rvv/rvv_length_from.inl.cpp */ -simdutf_warn_unused size_t implementation::count_utf16le(const char16_t *src, size_t len) const noexcept { +simdutf_warn_unused size_t +implementation::count_utf16le(const char16_t *src, size_t len) const noexcept { return utf32_length_from_utf16le(src, len); } -simdutf_warn_unused size_t implementation::count_utf16be(const char16_t *src, size_t len) const noexcept { +simdutf_warn_unused size_t +implementation::count_utf16be(const char16_t *src, size_t len) const noexcept { return utf32_length_from_utf16be(src, len); } -simdutf_warn_unused size_t implementation::count_utf8(const char *src, size_t len) const noexcept { +simdutf_warn_unused size_t +implementation::count_utf8(const char *src, size_t len) const noexcept { return utf32_length_from_utf8(src, len); } -simdutf_warn_unused size_t implementation::latin1_length_from_utf8(const char *src, size_t len) const noexcept { +simdutf_warn_unused size_t implementation::latin1_length_from_utf8( + const char *src, size_t len) const noexcept { return utf32_length_from_utf8(src, len); } -simdutf_warn_unused size_t implementation::latin1_length_from_utf16(size_t len) const noexcept { +simdutf_warn_unused size_t +implementation::latin1_length_from_utf16(size_t len) const noexcept { return len; } -simdutf_warn_unused size_t implementation::latin1_length_from_utf32(size_t len) const noexcept { +simdutf_warn_unused size_t +implementation::latin1_length_from_utf32(size_t len) const noexcept { return len; } -simdutf_warn_unused size_t implementation::utf16_length_from_latin1(size_t len) const noexcept { +simdutf_warn_unused size_t +implementation::utf16_length_from_latin1(size_t len) const noexcept { return len; } -simdutf_warn_unused size_t implementation::utf32_length_from_latin1(size_t len) const noexcept { +simdutf_warn_unused size_t +implementation::utf32_length_from_latin1(size_t len) const noexcept { return len; } -simdutf_warn_unused size_t implementation::utf32_length_from_utf8(const char *src, size_t len) const noexcept { +simdutf_warn_unused size_t implementation::utf32_length_from_utf8( + const char *src, size_t len) const noexcept { size_t count = 0; for (size_t vl; len > 0; len -= vl, src += vl) { vl = __riscv_vsetvl_e8m8(len); - vint8m8_t v = __riscv_vle8_v_i8m8((int8_t*)src, vl); + vint8m8_t v = __riscv_vle8_v_i8m8((int8_t *)src, vl); vbool1_t mask = __riscv_vmsgt_vx_i8m8_b1(v, -65, vl); count += __riscv_vcpop_m_b1(mask, vl); } return count; } -template -simdutf_really_inline static size_t rvv_utf32_length_from_utf16(const char16_t *src, size_t len) { +template +simdutf_really_inline static size_t +rvv_utf32_length_from_utf16(const char16_t *src, size_t len) { size_t count = 0; for (size_t vl; len > 0; len -= vl, src += vl) { vl = __riscv_vsetvl_e16m8(len); - vuint16m8_t v = __riscv_vle16_v_u16m8((uint16_t*)src, vl); + vuint16m8_t v = __riscv_vle16_v_u16m8((uint16_t *)src, vl); v = simdutf_byteflip(v, vl); - vbool2_t notHigh = __riscv_vmor_mm_b2( - __riscv_vmsgtu_vx_u16m8_b2(v, 0xDFFF, vl), - __riscv_vmsltu_vx_u16m8_b2(v, 0xDC00, vl), vl); + vbool2_t notHigh = + __riscv_vmor_mm_b2(__riscv_vmsgtu_vx_u16m8_b2(v, 0xDFFF, vl), + __riscv_vmsltu_vx_u16m8_b2(v, 0xDC00, vl), vl); count += __riscv_vcpop_m_b2(notHigh, vl); } return count; } -simdutf_warn_unused size_t implementation::utf32_length_from_utf16le(const char16_t *src, size_t len) const noexcept { +simdutf_warn_unused size_t implementation::utf32_length_from_utf16le( + const char16_t *src, size_t len) const noexcept { return rvv_utf32_length_from_utf16(src, len); } -simdutf_warn_unused size_t implementation::utf32_length_from_utf16be(const char16_t *src, size_t len) const noexcept { +simdutf_warn_unused size_t implementation::utf32_length_from_utf16be( + const char16_t *src, size_t len) const noexcept { if (supports_zvbb()) return rvv_utf32_length_from_utf16(src, len); else return rvv_utf32_length_from_utf16(src, len); } -simdutf_warn_unused size_t implementation::utf8_length_from_latin1(const char *src, size_t len) const noexcept { +simdutf_warn_unused size_t implementation::utf8_length_from_latin1( + const char *src, size_t len) const noexcept { size_t count = len; for (size_t vl; len > 0; len -= vl, src += vl) { vl = __riscv_vsetvl_e8m8(len); - vint8m8_t v = __riscv_vle8_v_i8m8((int8_t*)src, vl); + vint8m8_t v = __riscv_vle8_v_i8m8((int8_t *)src, vl); count += __riscv_vcpop_m_b1(__riscv_vmslt_vx_i8m8_b1(v, 0, vl), vl); } return count; } -template -simdutf_really_inline static size_t rvv_utf8_length_from_utf16(const char16_t *src, size_t len) { +template +simdutf_really_inline static size_t +rvv_utf8_length_from_utf16(const char16_t *src, size_t len) { size_t count = 0; for (size_t vl; len > 0; len -= vl, src += vl) { vl = __riscv_vsetvl_e16m8(len); - vuint16m8_t v = __riscv_vle16_v_u16m8((uint16_t*)src, vl); + vuint16m8_t v = __riscv_vle16_v_u16m8((uint16_t *)src, vl); v = simdutf_byteflip(v, vl); vbool2_t m234 = __riscv_vmsgtu_vx_u16m8_b2(v, 0x7F, vl); vbool2_t m34 = __riscv_vmsgtu_vx_u16m8_b2(v, 0x7FF, vl); - vbool2_t notSur = __riscv_vmor_mm_b2( - __riscv_vmsltu_vx_u16m8_b2(v, 0xD800, vl), - __riscv_vmsgtu_vx_u16m8_b2(v, 0xDFFF, vl), vl); + vbool2_t notSur = + __riscv_vmor_mm_b2(__riscv_vmsltu_vx_u16m8_b2(v, 0xD800, vl), + __riscv_vmsgtu_vx_u16m8_b2(v, 0xDFFF, vl), vl); vbool2_t m3 = __riscv_vmand_mm_b2(m34, notSur, vl); count += vl + __riscv_vcpop_m_b2(m234, vl) + __riscv_vcpop_m_b2(m3, vl); } return count; } -simdutf_warn_unused size_t implementation::utf8_length_from_utf16le(const char16_t *src, size_t len) const noexcept { +simdutf_warn_unused size_t implementation::utf8_length_from_utf16le( + const char16_t *src, size_t len) const noexcept { return rvv_utf8_length_from_utf16(src, len); } -simdutf_warn_unused size_t implementation::utf8_length_from_utf16be(const char16_t *src, size_t len) const noexcept { +simdutf_warn_unused size_t implementation::utf8_length_from_utf16be( + const char16_t *src, size_t len) const noexcept { if (supports_zvbb()) return rvv_utf8_length_from_utf16(src, len); else return rvv_utf8_length_from_utf16(src, len); } -simdutf_warn_unused size_t implementation::utf8_length_from_utf32(const char32_t *src, size_t len) const noexcept { +simdutf_warn_unused size_t implementation::utf8_length_from_utf32( + const char32_t *src, size_t len) const noexcept { size_t count = 0; for (size_t vl; len > 0; len -= vl, src += vl) { vl = __riscv_vsetvl_e32m8(len); - vuint32m8_t v = __riscv_vle32_v_u32m8((uint32_t*)src, vl); + vuint32m8_t v = __riscv_vle32_v_u32m8((uint32_t *)src, vl); vbool4_t m234 = __riscv_vmsgtu_vx_u32m8_b4(v, 0x7F, vl); - vbool4_t m34 = __riscv_vmsgtu_vx_u32m8_b4(v, 0x7FF, vl); - vbool4_t m4 = __riscv_vmsgtu_vx_u32m8_b4(v, 0xFFFF, vl); - count += vl + __riscv_vcpop_m_b4(m234, vl) + __riscv_vcpop_m_b4(m34, vl) + __riscv_vcpop_m_b4(m4, vl); + vbool4_t m34 = __riscv_vmsgtu_vx_u32m8_b4(v, 0x7FF, vl); + vbool4_t m4 = __riscv_vmsgtu_vx_u32m8_b4(v, 0xFFFF, vl); + count += vl + __riscv_vcpop_m_b4(m234, vl) + __riscv_vcpop_m_b4(m34, vl) + + __riscv_vcpop_m_b4(m4, vl); } return count; } -simdutf_warn_unused size_t implementation::utf16_length_from_utf8(const char *src, size_t len) const noexcept { +simdutf_warn_unused size_t implementation::utf16_length_from_utf8( + const char *src, size_t len) const noexcept { size_t count = 0; for (size_t vl; len > 0; len -= vl, src += vl) { vl = __riscv_vsetvl_e8m8(len); - vint8m8_t v = __riscv_vle8_v_i8m8((int8_t*)src, vl); + vint8m8_t v = __riscv_vle8_v_i8m8((int8_t *)src, vl); vbool1_t m1234 = __riscv_vmsgt_vx_i8m8_b1(v, -65, vl); - vbool1_t m4 = __riscv_vmsgtu_vx_u8m8_b1( - __riscv_vreinterpret_u8m8(v), (uint8_t)0b11101111, vl); + vbool1_t m4 = __riscv_vmsgtu_vx_u8m8_b1(__riscv_vreinterpret_u8m8(v), + (uint8_t)0b11101111, vl); count += __riscv_vcpop_m_b1(m1234, vl) + __riscv_vcpop_m_b1(m4, vl); } return count; } -simdutf_warn_unused size_t implementation::utf16_length_from_utf32(const char32_t *src, size_t len) const noexcept { +simdutf_warn_unused size_t implementation::utf16_length_from_utf32( + const char32_t *src, size_t len) const noexcept { size_t count = 0; for (size_t vl; len > 0; len -= vl, src += vl) { vl = __riscv_vsetvl_e32m8(len); - vuint32m8_t v = __riscv_vle32_v_u32m8((uint32_t*)src, vl); + vuint32m8_t v = __riscv_vle32_v_u32m8((uint32_t *)src, vl); vbool4_t m4 = __riscv_vmsgtu_vx_u32m8_b4(v, 0xFFFF, vl); count += vl + __riscv_vcpop_m_b4(m4, vl); } return count; } - /* end file src/rvv/rvv_length_from.inl.cpp */ /* begin file src/rvv/rvv_validate.inl.cpp */ -simdutf_warn_unused bool implementation::validate_ascii(const char *src, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_ascii(const char *src, size_t len) const noexcept { size_t vlmax = __riscv_vsetvlmax_e8m8(); vint8m8_t mask = __riscv_vmv_v_x_i8m8(0, vlmax); for (size_t vl; len > 0; len -= vl, src += vl) { vl = __riscv_vsetvl_e8m8(len); - vint8m8_t v = __riscv_vle8_v_i8m8((int8_t*)src, vl); + vint8m8_t v = __riscv_vle8_v_i8m8((int8_t *)src, vl); mask = __riscv_vor_vv_i8m8_tu(mask, mask, v, vl); } - return __riscv_vfirst_m_b1(__riscv_vmslt_vx_i8m8_b1(mask, 0, vlmax), vlmax) < 0; + return __riscv_vfirst_m_b1(__riscv_vmslt_vx_i8m8_b1(mask, 0, vlmax), vlmax) < + 0; } -simdutf_warn_unused result implementation::validate_ascii_with_errors(const char *src, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_ascii_with_errors( + const char *src, size_t len) const noexcept { const char *beg = src; for (size_t vl; len > 0; len -= vl, src += vl) { vl = __riscv_vsetvl_e8m8(len); - vint8m8_t v = __riscv_vle8_v_i8m8((int8_t*)src, vl); + vint8m8_t v = __riscv_vle8_v_i8m8((int8_t *)src, vl); long idx = __riscv_vfirst_m_b1(__riscv_vmslt_vx_i8m8_b1(v, 0, vl), vl); - if (idx >= 0) return result(error_code::TOO_LARGE, src - beg + idx); + if (idx >= 0) + return result(error_code::TOO_LARGE, src - beg + idx); } return result(error_code::SUCCESS, src - beg); } /* Returns a close estimation of the number of valid UTF-8 bytes up to the * first invalid one, but never overestimating. */ -simdutf_really_inline static size_t rvv_count_valid_utf8(const char *src, size_t len) { +simdutf_really_inline static size_t rvv_count_valid_utf8(const char *src, + size_t len) { const char *beg = src; - if (len < 32) return 0; + if (len < 32) + return 0; /* validate first three bytes */ { size_t idx = 3; while (idx < len && (src[idx] >> 6) == 0b10) ++idx; - if (idx > 3+3 || !scalar::utf8::validate(src, idx)) + if (idx > 3 + 3 || !scalar::utf8::validate(src, idx)) return 0; } - static const uint64_t err1m[] = { 0x0202020202020202, 0x4915012180808080 }; - static const uint64_t err2m[] = { 0xCBCBCB8B8383A3E7, 0xCBCBDBCBCBCBCBCB }; - static const uint64_t err3m[] = { 0x0101010101010101, 0X01010101BABAAEE6 }; + static const uint64_t err1m[] = {0x0202020202020202, 0x4915012180808080}; + static const uint64_t err2m[] = {0xCBCBCB8B8383A3E7, 0xCBCBDBCBCBCBCBCB}; + static const uint64_t err3m[] = {0x0101010101010101, 0X01010101BABAAEE6}; - const vuint8m1_t err1tbl = __riscv_vreinterpret_v_u64m1_u8m1(__riscv_vle64_v_u64m1(err1m, 2)); - const vuint8m1_t err2tbl = __riscv_vreinterpret_v_u64m1_u8m1(__riscv_vle64_v_u64m1(err2m, 2)); - const vuint8m1_t err3tbl = __riscv_vreinterpret_v_u64m1_u8m1(__riscv_vle64_v_u64m1(err3m, 2)); + const vuint8m1_t err1tbl = + __riscv_vreinterpret_v_u64m1_u8m1(__riscv_vle64_v_u64m1(err1m, 2)); + const vuint8m1_t err2tbl = + __riscv_vreinterpret_v_u64m1_u8m1(__riscv_vle64_v_u64m1(err2m, 2)); + const vuint8m1_t err3tbl = + __riscv_vreinterpret_v_u64m1_u8m1(__riscv_vle64_v_u64m1(err3m, 2)); size_t tail = 3; size_t n = len - tail; for (size_t vl; n > 0; n -= vl, src += vl) { vl = __riscv_vsetvl_e8m4(n); - vuint8m4_t v0 = __riscv_vle8_v_u8m4((uint8_t const*)src, vl); + vuint8m4_t v0 = __riscv_vle8_v_u8m4((uint8_t const *)src, vl); - uint8_t next0 = src[vl+0]; - uint8_t next1 = src[vl+1]; - uint8_t next2 = src[vl+2]; + uint8_t next0 = src[vl + 0]; + uint8_t next1 = src[vl + 1]; + uint8_t next2 = src[vl + 2]; /* fast path: ASCII */ - if (__riscv_vfirst_m_b2(__riscv_vmsgtu_vx_u8m4_b2(v0, 0b01111111, vl), vl) < 0 && (next0|next1|next2) < 0b10000000) + if (__riscv_vfirst_m_b2(__riscv_vmsgtu_vx_u8m4_b2(v0, 0b01111111, vl), vl) < + 0 && + (next0 | next1 | next2) < 0b10000000) continue; /* see "Validating UTF-8 In Less Than One Instruction Per Byte" @@ -31680,8 +33281,10 @@ simdutf_really_inline static size_t rvv_count_valid_utf8(const char *src, size_t vuint8m4_t v2 = __riscv_vslide1down_vx_u8m4(v1, next1, vl); vuint8m4_t v3 = __riscv_vslide1down_vx_u8m4(v2, next2, vl); - vuint8m4_t s1 = __riscv_vreinterpret_v_u16m4_u8m4(__riscv_vsrl_vx_u16m4(__riscv_vreinterpret_v_u8m4_u16m4(v2), 4, __riscv_vsetvlmax_e16m4())); - vuint8m4_t s3 = __riscv_vreinterpret_v_u16m4_u8m4(__riscv_vsrl_vx_u16m4(__riscv_vreinterpret_v_u8m4_u16m4(v3), 4, __riscv_vsetvlmax_e16m4())); + vuint8m4_t s1 = __riscv_vreinterpret_v_u16m4_u8m4(__riscv_vsrl_vx_u16m4( + __riscv_vreinterpret_v_u8m4_u16m4(v2), 4, __riscv_vsetvlmax_e16m4())); + vuint8m4_t s3 = __riscv_vreinterpret_v_u16m4_u8m4(__riscv_vsrl_vx_u16m4( + __riscv_vreinterpret_v_u8m4_u16m4(v3), 4, __riscv_vsetvlmax_e16m4())); vuint8m4_t idx2 = __riscv_vand_vx_u8m4(v2, 0xF, vl); vuint8m4_t idx1 = __riscv_vand_vx_u8m4(s1, 0xF, vl); @@ -31690,614 +33293,310 @@ simdutf_really_inline static size_t rvv_count_valid_utf8(const char *src, size_t vuint8m4_t err1 = simdutf_vrgather_u8m1x4(err1tbl, idx1); vuint8m4_t err2 = simdutf_vrgather_u8m1x4(err2tbl, idx2); vuint8m4_t err3 = simdutf_vrgather_u8m1x4(err3tbl, idx3); - vint8m4_t errs = __riscv_vreinterpret_v_u8m4_i8m4(__riscv_vand_vv_u8m4(__riscv_vand_vv_u8m4(err1, err2, vl), err3, vl)); + vint8m4_t errs = __riscv_vreinterpret_v_u8m4_i8m4( + __riscv_vand_vv_u8m4(__riscv_vand_vv_u8m4(err1, err2, vl), err3, vl)); - vbool2_t is_3 = __riscv_vmsgtu_vx_u8m4_b2(v1, 0b11100000-1, vl); - vbool2_t is_4 = __riscv_vmsgtu_vx_u8m4_b2(v0, 0b11110000-1, vl); + vbool2_t is_3 = __riscv_vmsgtu_vx_u8m4_b2(v1, 0b11100000 - 1, vl); + vbool2_t is_4 = __riscv_vmsgtu_vx_u8m4_b2(v0, 0b11110000 - 1, vl); vbool2_t is_34 = __riscv_vmor_mm_b2(is_3, is_4, vl); - vbool2_t err34 = __riscv_vmxor_mm_b2(is_34, __riscv_vmslt_vx_i8m4_b2(errs, 0, vl), vl); - vbool2_t errm = __riscv_vmor_mm_b2(__riscv_vmsgt_vx_i8m4_b2(errs, 0, vl), err34, vl); - if (__riscv_vfirst_m_b2(errm , vl) >= 0) + vbool2_t err34 = + __riscv_vmxor_mm_b2(is_34, __riscv_vmslt_vx_i8m4_b2(errs, 0, vl), vl); + vbool2_t errm = + __riscv_vmor_mm_b2(__riscv_vmsgt_vx_i8m4_b2(errs, 0, vl), err34, vl); + if (__riscv_vfirst_m_b2(errm, vl) >= 0) break; } /* we need to validate the last character */ - while (tail < len && (src[0] >> 6) == 0b10) --src, ++tail; + while (tail < len && (src[0] >> 6) == 0b10) + --src, ++tail; return src - beg; } -simdutf_warn_unused bool implementation::validate_utf8(const char *src, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_utf8(const char *src, size_t len) const noexcept { size_t count = rvv_count_valid_utf8(src, len); return scalar::utf8::validate(src + count, len - count); } -simdutf_warn_unused result implementation::validate_utf8_with_errors(const char *src, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_utf8_with_errors( + const char *src, size_t len) const noexcept { size_t count = rvv_count_valid_utf8(src, len); result res = scalar::utf8::validate_with_errors(src + count, len - count); return result(res.error, count + res.count); } -simdutf_warn_unused bool implementation::validate_utf16le(const char16_t *src, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_utf16le(const char16_t *src, + size_t len) const noexcept { return validate_utf16le_with_errors(src, len).error == error_code::SUCCESS; } -simdutf_warn_unused bool implementation::validate_utf16be(const char16_t *src, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_utf16be(const char16_t *src, + size_t len) const noexcept { return validate_utf16be_with_errors(src, len).error == error_code::SUCCESS; } -template -simdutf_really_inline static result rvv_validate_utf16_with_errors(const char16_t *src, size_t len) { +template +simdutf_really_inline static result +rvv_validate_utf16_with_errors(const char16_t *src, size_t len) { const char16_t *beg = src; uint16_t last = 0; - for (size_t vl; len > 0; len -= vl, src += vl, last = simdutf_byteflip(src[-1])) { + for (size_t vl; len > 0; + len -= vl, src += vl, last = simdutf_byteflip(src[-1])) { vl = __riscv_vsetvl_e16m8(len); - vuint16m8_t v1 = __riscv_vle16_v_u16m8((const uint16_t*)src, vl); + vuint16m8_t v1 = __riscv_vle16_v_u16m8((const uint16_t *)src, vl); v1 = simdutf_byteflip(v1, vl); vuint16m8_t v0 = __riscv_vslide1up_vx_u16m8(v1, last, vl); - vbool2_t surhi = __riscv_vmseq_vx_u16m8_b2(__riscv_vand_vx_u16m8(v0, 0xFC00, vl), 0xD800, vl); - vbool2_t surlo = __riscv_vmseq_vx_u16m8_b2(__riscv_vand_vx_u16m8(v1, 0xFC00, vl), 0xDC00, vl); + vbool2_t surhi = __riscv_vmseq_vx_u16m8_b2( + __riscv_vand_vx_u16m8(v0, 0xFC00, vl), 0xD800, vl); + vbool2_t surlo = __riscv_vmseq_vx_u16m8_b2( + __riscv_vand_vx_u16m8(v1, 0xFC00, vl), 0xDC00, vl); long idx = __riscv_vfirst_m_b2(__riscv_vmxor_mm_b2(surhi, surlo, vl), vl); if (idx >= 0) { - last = idx > 0 ? simdutf_byteflip(src[idx-1]) : last; - return result(error_code::SURROGATE, src - beg + idx - (last - 0xD800u < 0x400u)); + last = idx > 0 ? simdutf_byteflip(src[idx - 1]) : last; + return result(error_code::SURROGATE, + src - beg + idx - (last - 0xD800u < 0x400u)); break; } } if (last - 0xD800u < 0x400u) { - return result(error_code::SURROGATE, src - beg - 1); /* end on high surrogate */ + return result(error_code::SURROGATE, + src - beg - 1); /* end on high surrogate */ } else { return result(error_code::SUCCESS, src - beg); } } -simdutf_warn_unused result implementation::validate_utf16le_with_errors(const char16_t *src, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_utf16le_with_errors( + const char16_t *src, size_t len) const noexcept { return rvv_validate_utf16_with_errors(src, len); } -simdutf_warn_unused result implementation::validate_utf16be_with_errors(const char16_t *src, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_utf16be_with_errors( + const char16_t *src, size_t len) const noexcept { if (supports_zvbb()) return rvv_validate_utf16_with_errors(src, len); else return rvv_validate_utf16_with_errors(src, len); } -simdutf_warn_unused bool implementation::validate_utf32(const char32_t *src, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_utf32(const char32_t *src, size_t len) const noexcept { size_t vlmax = __riscv_vsetvlmax_e32m8(); - vuint32m8_t max = __riscv_vmv_v_x_u32m8(0x10FFFF, vlmax); + vuint32m8_t max = __riscv_vmv_v_x_u32m8(0x10FFFF, vlmax); vuint32m8_t maxOff = __riscv_vmv_v_x_u32m8(0xFFFFF7FF, vlmax); for (size_t vl; len > 0; len -= vl, src += vl) { vl = __riscv_vsetvl_e32m8(len); - vuint32m8_t v = __riscv_vle32_v_u32m8((uint32_t*)src, vl); + vuint32m8_t v = __riscv_vle32_v_u32m8((uint32_t *)src, vl); vuint32m8_t off = __riscv_vadd_vx_u32m8(v, 0xFFFF2000, vl); - max = __riscv_vmaxu_vv_u32m8_tu(max, max, v, vl); + max = __riscv_vmaxu_vv_u32m8_tu(max, max, v, vl); maxOff = __riscv_vmaxu_vv_u32m8_tu(maxOff, maxOff, off, vl); } - return __riscv_vfirst_m_b4(__riscv_vmor_mm_b4( - __riscv_vmsne_vx_u32m8_b4(max, 0x10FFFF, vlmax), - __riscv_vmsne_vx_u32m8_b4(maxOff, 0xFFFFF7FF, vlmax), vlmax), vlmax) < 0; + return __riscv_vfirst_m_b4( + __riscv_vmor_mm_b4( + __riscv_vmsne_vx_u32m8_b4(max, 0x10FFFF, vlmax), + __riscv_vmsne_vx_u32m8_b4(maxOff, 0xFFFFF7FF, vlmax), vlmax), + vlmax) < 0; } -simdutf_warn_unused result implementation::validate_utf32_with_errors(const char32_t *src, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_utf32_with_errors( + const char32_t *src, size_t len) const noexcept { const char32_t *beg = src; for (size_t vl; len > 0; len -= vl, src += vl) { vl = __riscv_vsetvl_e32m8(len); - vuint32m8_t v = __riscv_vle32_v_u32m8((uint32_t*)src, vl); + vuint32m8_t v = __riscv_vle32_v_u32m8((uint32_t *)src, vl); vuint32m8_t off = __riscv_vadd_vx_u32m8(v, 0xFFFF2000, vl); - long idx1 = __riscv_vfirst_m_b4(__riscv_vmsgtu_vx_u32m8_b4(v, 0x10FFFF, vl), vl); - long idx2 = __riscv_vfirst_m_b4(__riscv_vmsgtu_vx_u32m8_b4(off, 0xFFFFF7FF, vl), vl); - if(idx1 >= 0 && idx2 >= 0) { - if(idx1 <= idx2) { return result(error_code::TOO_LARGE, src - beg + idx1); } - else { return result(error_code::SURROGATE, src - beg + idx2); } + long idx1 = + __riscv_vfirst_m_b4(__riscv_vmsgtu_vx_u32m8_b4(v, 0x10FFFF, vl), vl); + long idx2 = __riscv_vfirst_m_b4( + __riscv_vmsgtu_vx_u32m8_b4(off, 0xFFFFF7FF, vl), vl); + if (idx1 >= 0 && idx2 >= 0) { + if (idx1 <= idx2) { + return result(error_code::TOO_LARGE, src - beg + idx1); + } else { + return result(error_code::SURROGATE, src - beg + idx2); + } + } + if (idx1 >= 0) { + return result(error_code::TOO_LARGE, src - beg + idx1); + } + if (idx2 >= 0) { + return result(error_code::SURROGATE, src - beg + idx2); } - if (idx1 >= 0) { return result(error_code::TOO_LARGE, src - beg + idx1); } - if (idx2 >= 0) { return result(error_code::SURROGATE, src - beg + idx2); } } return result(error_code::SUCCESS, src - beg); } - /* end file src/rvv/rvv_validate.inl.cpp */ /* begin file src/rvv/rvv_latin1_to.inl.cpp */ -simdutf_warn_unused size_t implementation::convert_latin1_to_utf8(const char *src, size_t len, char *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_latin1_to_utf8( + const char *src, size_t len, char *dst) const noexcept { char *beg = dst; for (size_t vl, vlOut; len > 0; len -= vl, src += vl, dst += vlOut) { vl = __riscv_vsetvl_e8m2(len); - vuint8m2_t v1 = __riscv_vle8_v_u8m2((uint8_t*)src, vl); - vbool4_t nascii = __riscv_vmslt_vx_i8m2_b4(__riscv_vreinterpret_v_u8m2_i8m2(v1), 0, vl); + vuint8m2_t v1 = __riscv_vle8_v_u8m2((uint8_t *)src, vl); + vbool4_t nascii = + __riscv_vmslt_vx_i8m2_b4(__riscv_vreinterpret_v_u8m2_i8m2(v1), 0, vl); size_t cnt = __riscv_vcpop_m_b4(nascii, vl); vlOut = vl + cnt; if (cnt == 0) { - __riscv_vse8_v_u8m2((uint8_t*)dst, v1, vlOut); + __riscv_vse8_v_u8m2((uint8_t *)dst, v1, vlOut); continue; } - vuint8m2_t v0 = __riscv_vor_vx_u8m2(__riscv_vsrl_vx_u8m2(v1, 6, vl), 0b11000000, vl); + vuint8m2_t v0 = + __riscv_vor_vx_u8m2(__riscv_vsrl_vx_u8m2(v1, 6, vl), 0b11000000, vl); v1 = __riscv_vand_vx_u8m2_mu(nascii, v1, v1, 0b10111111, vl); - vuint8m4_t wide = __riscv_vreinterpret_v_u16m4_u8m4(__riscv_vwmaccu_vx_u16m4(__riscv_vwaddu_vv_u16m4(v0, v1, vl), 0xFF, v1, vl)); - vbool2_t mask = __riscv_vmsgtu_vx_u8m4_b2(__riscv_vsub_vx_u8m4(wide, 0b11000000, vl*2), 1, vl*2); - vuint8m4_t comp = __riscv_vcompress_vm_u8m4(wide, mask, vl*2); + vuint8m4_t wide = + __riscv_vreinterpret_v_u16m4_u8m4(__riscv_vwmaccu_vx_u16m4( + __riscv_vwaddu_vv_u16m4(v0, v1, vl), 0xFF, v1, vl)); + vbool2_t mask = __riscv_vmsgtu_vx_u8m4_b2( + __riscv_vsub_vx_u8m4(wide, 0b11000000, vl * 2), 1, vl * 2); + vuint8m4_t comp = __riscv_vcompress_vm_u8m4(wide, mask, vl * 2); - __riscv_vse8_v_u8m4((uint8_t*)dst, comp, vlOut); + __riscv_vse8_v_u8m4((uint8_t *)dst, comp, vlOut); } return dst - beg; } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf16le(const char *src, size_t len, char16_t *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_latin1_to_utf16le( + const char *src, size_t len, char16_t *dst) const noexcept { char16_t *beg = dst; for (size_t vl; len > 0; len -= vl, src += vl, dst += vl) { vl = __riscv_vsetvl_e8m4(len); - vuint8m4_t v = __riscv_vle8_v_u8m4((uint8_t*)src, vl); - __riscv_vse16_v_u16m8((uint16_t*)dst, __riscv_vzext_vf2_u16m8(v, vl), vl); + vuint8m4_t v = __riscv_vle8_v_u8m4((uint8_t *)src, vl); + __riscv_vse16_v_u16m8((uint16_t *)dst, __riscv_vzext_vf2_u16m8(v, vl), vl); } return dst - beg; } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf16be(const char *src, size_t len, char16_t *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_latin1_to_utf16be( + const char *src, size_t len, char16_t *dst) const noexcept { char16_t *beg = dst; for (size_t vl; len > 0; len -= vl, src += vl, dst += vl) { vl = __riscv_vsetvl_e8m4(len); - vuint8m4_t v = __riscv_vle8_v_u8m4((uint8_t*)src, vl); - __riscv_vse16_v_u16m8((uint16_t*)dst, __riscv_vsll_vx_u16m8(__riscv_vzext_vf2_u16m8(v, vl), 8, vl), vl); + vuint8m4_t v = __riscv_vle8_v_u8m4((uint8_t *)src, vl); + __riscv_vse16_v_u16m8( + (uint16_t *)dst, + __riscv_vsll_vx_u16m8(__riscv_vzext_vf2_u16m8(v, vl), 8, vl), vl); } return dst - beg; } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf32(const char *src, size_t len, char32_t *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_latin1_to_utf32( + const char *src, size_t len, char32_t *dst) const noexcept { char32_t *beg = dst; for (size_t vl; len > 0; len -= vl, src += vl, dst += vl) { vl = __riscv_vsetvl_e8m2(len); - vuint8m2_t v = __riscv_vle8_v_u8m2((uint8_t*)src, vl); - __riscv_vse32_v_u32m8((uint32_t*)dst, __riscv_vzext_vf4_u32m8(v, vl), vl); + vuint8m2_t v = __riscv_vle8_v_u8m2((uint8_t *)src, vl); + __riscv_vse32_v_u32m8((uint32_t *)dst, __riscv_vzext_vf4_u32m8(v, vl), vl); } return dst - beg; } - /* end file src/rvv/rvv_latin1_to.inl.cpp */ -/* begin file src/rvv/rvv_utf8_to.inl.cpp */ -template -simdutf_really_inline static size_t rvv_utf32_store_utf16_m4(uint16_t *dst, vuint32m4_t utf32, size_t vl, vbool4_t m4even) { - /* convert [000000000000aaaa|aaaaaabbbbbbbbbb] - * to [110111bbbbbbbbbb|110110aaaaaaaaaa] */ - vuint32m4_t sur = __riscv_vsub_vx_u32m4(utf32, 0x10000, vl); - sur = __riscv_vor_vv_u32m4(__riscv_vsll_vx_u32m4(sur, 16, vl), - __riscv_vsrl_vx_u32m4(sur, 10, vl), vl); - sur = __riscv_vand_vx_u32m4(sur, 0x3FF03FF, vl); - sur = __riscv_vor_vx_u32m4(sur, 0xDC00D800, vl); - /* merge 1 byte utf32 and 2 byte sur */ - vbool8_t m4 = __riscv_vmsgtu_vx_u32m4_b8(utf32, 0xFFFF, vl); - vuint16m4_t utf32_16 = __riscv_vreinterpret_v_u32m4_u16m4(__riscv_vmerge_vvm_u32m4(utf32, sur, m4, vl)); - /* compress and store */ - vbool4_t mOut = __riscv_vmor_mm_b4(__riscv_vmsne_vx_u16m4_b4(utf32_16, 0, vl*2), m4even, vl*2); - vuint16m4_t vout = __riscv_vcompress_vm_u16m4(utf32_16, mOut, vl*2); - vl = __riscv_vcpop_m_b4(mOut, vl*2); - __riscv_vse16_v_u16m4(dst, simdutf_byteflip(vout, vl), vl); - return vl; -}; - -template -simdutf_really_inline static size_t rvv_utf8_to_common(char const *src, size_t len, Tdst *dst) { - static_assert(std::is_same() || std::is_same(), "invalid type"); - constexpr bool is16 = std::is_same(); - constexpr endianness endian = bflip == simdutf_ByteFlip::NONE ? endianness::LITTLE : endianness::BIG; - const auto scalar = [](char const *in, size_t count, Tdst *out) { - return is16 ? scalar::utf8_to_utf16::convert(in, count, (char16_t*)out) - : scalar::utf8_to_utf32::convert(in, count, (char32_t*)out); - }; - - if (len < 32) return scalar(src, len, dst); - - /* validate first three bytes */ - if (validate) { - size_t idx = 3; - while (idx < len && (src[idx] >> 6) == 0b10) - ++idx; - if (idx > 3+3 || !scalar::utf8::validate(src, idx)) - return 0; - } - - size_t tail = 3; - size_t n = len - tail; - Tdst *beg = dst; - - static const uint64_t err1m[] = { 0x0202020202020202, 0x4915012180808080 }; - static const uint64_t err2m[] = { 0xCBCBCB8B8383A3E7, 0xCBCBDBCBCBCBCBCB }; - static const uint64_t err3m[] = { 0x0101010101010101, 0X01010101BABAAEE6 }; - - const vuint8m1_t err1tbl = __riscv_vreinterpret_v_u64m1_u8m1(__riscv_vle64_v_u64m1(err1m, 2)); - const vuint8m1_t err2tbl = __riscv_vreinterpret_v_u64m1_u8m1(__riscv_vle64_v_u64m1(err2m, 2)); - const vuint8m1_t err3tbl = __riscv_vreinterpret_v_u64m1_u8m1(__riscv_vle64_v_u64m1(err3m, 2)); - - size_t vl8m2 = __riscv_vsetvlmax_e8m2(); - vbool4_t m4even = __riscv_vmseq_vx_u8m2_b4(__riscv_vand_vx_u8m2(__riscv_vid_v_u8m2(vl8m2), 1, vl8m2), 0, vl8m2); - - for (size_t vl, vlOut; n > 0; n -= vl, src += vl, dst += vlOut) { - vl = __riscv_vsetvl_e8m2(n); - - vuint8m2_t v0 = __riscv_vle8_v_u8m2((uint8_t const*)src, vl); - uint64_t max = __riscv_vmv_x_s_u8m1_u8(__riscv_vredmaxu_vs_u8m2_u8m1(v0, __riscv_vmv_s_x_u8m1(0, vl), vl)); - - uint8_t next0 = src[vl+0]; - uint8_t next1 = src[vl+1]; - uint8_t next2 = src[vl+2]; - - /* fast path: ASCII */ - if ((max|next0|next1|next2) < 0b10000000) { - vlOut = vl; - if (is16) __riscv_vse16_v_u16m4((uint16_t*)dst, simdutf_byteflip(__riscv_vzext_vf2_u16m4(v0, vlOut), vlOut), vlOut); - else __riscv_vse32_v_u32m8((uint32_t*)dst, __riscv_vzext_vf4_u32m8(v0, vlOut), vlOut); - continue; - } - - /* see "Validating UTF-8 In Less Than One Instruction Per Byte" - * https://arxiv.org/abs/2010.03090 */ - vuint8m2_t v1 = __riscv_vslide1down_vx_u8m2(v0, next0, vl); - vuint8m2_t v2 = __riscv_vslide1down_vx_u8m2(v1, next1, vl); - vuint8m2_t v3 = __riscv_vslide1down_vx_u8m2(v2, next2, vl); - - if (validate) { - vuint8m2_t s1 = __riscv_vreinterpret_v_u16m2_u8m2(__riscv_vsrl_vx_u16m2(__riscv_vreinterpret_v_u8m2_u16m2(v2), 4, __riscv_vsetvlmax_e16m2())); - vuint8m2_t s3 = __riscv_vreinterpret_v_u16m2_u8m2(__riscv_vsrl_vx_u16m2(__riscv_vreinterpret_v_u8m2_u16m2(v3), 4, __riscv_vsetvlmax_e16m2())); - - vuint8m2_t idx2 = __riscv_vand_vx_u8m2(v2, 0xF, vl); - vuint8m2_t idx1 = __riscv_vand_vx_u8m2(s1, 0xF, vl); - vuint8m2_t idx3 = __riscv_vand_vx_u8m2(s3, 0xF, vl); - - vuint8m2_t err1 = simdutf_vrgather_u8m1x2(err1tbl, idx1); - vuint8m2_t err2 = simdutf_vrgather_u8m1x2(err2tbl, idx2); - vuint8m2_t err3 = simdutf_vrgather_u8m1x2(err3tbl, idx3); - vint8m2_t errs = __riscv_vreinterpret_v_u8m2_i8m2(__riscv_vand_vv_u8m2(__riscv_vand_vv_u8m2(err1, err2, vl), err3, vl)); - - vbool4_t is_3 = __riscv_vmsgtu_vx_u8m2_b4(v1, 0b11100000-1, vl); - vbool4_t is_4 = __riscv_vmsgtu_vx_u8m2_b4(v0, 0b11110000-1, vl); - vbool4_t is_34 = __riscv_vmor_mm_b4(is_3, is_4, vl); - vbool4_t err34 = __riscv_vmxor_mm_b4(is_34, __riscv_vmslt_vx_i8m2_b4(errs, 0, vl), vl); - vbool4_t errm = __riscv_vmor_mm_b4(__riscv_vmsgt_vx_i8m2_b4(errs, 0, vl), err34, vl); - if (__riscv_vfirst_m_b4(errm , vl) >= 0) - return 0; - } - - /* decoding */ - - /* mask of non continuation bytes */ - vbool4_t m = __riscv_vmsgt_vx_i8m2_b4(__riscv_vreinterpret_v_u8m2_i8m2(v0), -65, vl); - vlOut = __riscv_vcpop_m_b4(m, vl); - - /* extract first and second bytes */ - vuint8m2_t b1 = __riscv_vcompress_vm_u8m2(v0, m, vl); - vuint8m2_t b2 = __riscv_vcompress_vm_u8m2(v1, m, vl); - - /* fast path: one and two byte */ - if (max < 0b11100000) { - b2 = __riscv_vand_vx_u8m2(b2, 0b00111111, vlOut); - - vbool4_t m1 = __riscv_vmsgtu_vx_u8m2_b4(b1, 0b10111111, vlOut); - b1 = __riscv_vand_vx_u8m2_mu(m1, b1, b1, 63, vlOut); - - vuint16m4_t b12 = __riscv_vwmulu_vv_u16m4(b1, __riscv_vmerge_vxm_u8m2(__riscv_vmv_v_x_u8m2(1, vlOut), 1<<6, m1, vlOut), vlOut); - b12 = __riscv_vwaddu_wv_u16m4_mu(m1, b12, b12, b2, vlOut); - if (is16) __riscv_vse16_v_u16m4((uint16_t*)dst, simdutf_byteflip(b12, vlOut), vlOut); - else __riscv_vse32_v_u32m8((uint32_t*)dst, __riscv_vzext_vf2_u32m8(b12, vlOut), vlOut); - continue; - } - - /* fast path: one, two and three byte */ - if (max < 0b11110000) { - vuint8m2_t b3 = __riscv_vcompress_vm_u8m2(v2, m, vl); - - b2 = __riscv_vand_vx_u8m2(b2, 0b00111111, vlOut); - b3 = __riscv_vand_vx_u8m2(b3, 0b00111111, vlOut); - - vbool4_t m1 = __riscv_vmsgtu_vx_u8m2_b4(b1, 0b10111111, vlOut); - vbool4_t m3 = __riscv_vmsgtu_vx_u8m2_b4(b1, 0b11011111, vlOut); - - vuint8m2_t t1 = __riscv_vand_vx_u8m2_mu(m1, b1, b1, 63, vlOut); - b1 = __riscv_vand_vx_u8m2_mu(m3, t1, b1, 15, vlOut); - - vuint16m4_t b12 = __riscv_vwmulu_vv_u16m4(b1, __riscv_vmerge_vxm_u8m2(__riscv_vmv_v_x_u8m2(1, vlOut), 1<<6, m1, vlOut), vlOut); - b12 = __riscv_vwaddu_wv_u16m4_mu(m1, b12, b12, b2, vlOut); - vuint16m4_t b123 = __riscv_vwaddu_wv_u16m4_mu(m3, b12, __riscv_vsll_vx_u16m4_mu(m3, b12, b12, 6, vlOut), b3, vlOut); - if (is16) __riscv_vse16_v_u16m4((uint16_t*)dst, simdutf_byteflip(b123, vlOut), vlOut); - else __riscv_vse32_v_u32m8((uint32_t*)dst, __riscv_vzext_vf2_u32m8(b123, vlOut), vlOut); - continue; - } - - /* extract third and fourth bytes */ - vuint8m2_t b3 = __riscv_vcompress_vm_u8m2(v2, m, vl); - vuint8m2_t b4 = __riscv_vcompress_vm_u8m2(v3, m, vl); - - /* remove prefix from leading bytes - * - * We could also use vrgather here, but it increases register pressure, - * and its performance varies widely on current platforms. It might be - * worth reconsidering, though, once there is more hardware available. - * Same goes for the __riscv_vsrl_vv_u32m4 correction step. - * - * We shift left and then right by the number of bytes in the prefix, - * which can be calculated as follows: - * x max(x-10, 0) - * 0xxx -> 0000-0111 -> sift by 0 or 1 -> 0 - * 10xx -> 1000-1011 -> don't care - * 110x -> 1100,1101 -> sift by 3 -> 2,3 - * 1110 -> 1110 -> sift by 4 -> 4 - * 1111 -> 1111 -> sift by 5 -> 5 - * - * vssubu.vx v, 10, (max(x-10, 0)) almost gives us what we want, we - * just need to manually detect and handle the one special case: - */ - #define SIMDUTF_RVV_UTF8_TO_COMMON_M1(idx) \ - vuint8m1_t c1 = __riscv_vget_v_u8m2_u8m1(b1, idx); \ - vuint8m1_t c2 = __riscv_vget_v_u8m2_u8m1(b2, idx); \ - vuint8m1_t c3 = __riscv_vget_v_u8m2_u8m1(b3, idx); \ - vuint8m1_t c4 = __riscv_vget_v_u8m2_u8m1(b4, idx); \ - /* remove prefix from trailing bytes */ \ - c2 = __riscv_vand_vx_u8m1(c2, 0b00111111, vlOut); \ - c3 = __riscv_vand_vx_u8m1(c3, 0b00111111, vlOut); \ - c4 = __riscv_vand_vx_u8m1(c4, 0b00111111, vlOut); \ - vuint8m1_t shift = __riscv_vsrl_vx_u8m1(c1, 4, vlOut); \ - shift = __riscv_vmerge_vxm_u8m1(__riscv_vssubu_vx_u8m1(shift, 10, vlOut), 3, __riscv_vmseq_vx_u8m1_b8(shift, 12, vlOut), vlOut); \ - c1 = __riscv_vsll_vv_u8m1(c1, shift, vlOut); \ - c1 = __riscv_vsrl_vv_u8m1(c1, shift, vlOut); \ - /* unconditionally widen and combine to c1234 */ \ - vuint16m2_t c34 = __riscv_vwaddu_wv_u16m2(__riscv_vwmulu_vx_u16m2(c3, 1<<6, vlOut), c4, vlOut); \ - vuint16m2_t c12 = __riscv_vwaddu_wv_u16m2(__riscv_vwmulu_vx_u16m2(c1, 1<<6, vlOut), c2, vlOut); \ - vuint32m4_t c1234 = __riscv_vwaddu_wv_u32m4(__riscv_vwmulu_vx_u32m4(c12, 1 << 12, vlOut), c34, vlOut); \ - /* derive required right-shift amount from `shift` to reduce - * c1234 to the required number of bytes */ \ - c1234 = __riscv_vsrl_vv_u32m4(c1234, __riscv_vzext_vf4_u32m4(__riscv_vmul_vx_u8m1( \ - __riscv_vrsub_vx_u8m1( __riscv_vssubu_vx_u8m1(shift, 2, vlOut), 3, vlOut), 6, vlOut), vlOut), vlOut); \ - /* store result in desired format */ \ - if (is16) vlDst = rvv_utf32_store_utf16_m4((uint16_t*)dst, c1234, vlOut, m4even); \ - else vlDst = vlOut, __riscv_vse32_v_u32m4((uint32_t*)dst, c1234, vlOut); - - /* Unrolling this manually reduces register pressure and allows - * us to terminate early. */ - { - size_t vlOutm2 = vlOut, vlDst; - vlOut = __riscv_vsetvl_e8m1(vlOut); - SIMDUTF_RVV_UTF8_TO_COMMON_M1(0) - if (vlOutm2 == vlOut) { - vlOut = vlDst; - continue; - } - - dst += vlDst; - vlOut = vlOutm2 - vlOut; - } - { - size_t vlDst; - SIMDUTF_RVV_UTF8_TO_COMMON_M1(1) - vlOut = vlDst; - } - -#undef SIMDUTF_RVV_UTF8_TO_COMMON_M1 - } - - /* validate the last character and reparse it + tail */ - if (len > tail) { - if ((src[0] >> 6) == 0b10) - --dst; - while ((src[0] >> 6) == 0b10 && tail < len) - --src, ++tail; - if (is16) { - /* go back one more, when on high surrogate */ - if (simdutf_byteflip((uint16_t)dst[-1]) >= 0xD800 && simdutf_byteflip((uint16_t)dst[-1]) <= 0xDBFF) - --dst; - } - } - size_t ret = scalar(src, tail, dst); - if (ret == 0) return 0; - return (size_t)(dst - beg) + ret; -} - - -simdutf_warn_unused size_t implementation::convert_utf8_to_latin1(const char *src, size_t len, char *dst) const noexcept { - const char *beg = dst; - uint8_t last = 0; - for (size_t vl, vlOut; len > 0; len -= vl, src += vl, dst += vlOut, last = src[-1]) { - vl = __riscv_vsetvl_e8m2(len); - vuint8m2_t v1 = __riscv_vle8_v_u8m2((uint8_t*)src, vl); - // check which bytes are ASCII - vbool4_t ascii = __riscv_vmsltu_vx_u8m2_b4(v1, 0b10000000, vl); - // count ASCII bytes - vlOut = __riscv_vcpop_m_b4(ascii, vl); - // The original code would only enter the next block after this check: - // vbool4_t m = __riscv_vmsltu_vx_u8m2_b4(v1, 0b11000000, vl); - // vlOut = __riscv_vcpop_m_b4(m, vl); - // if (vlOut != vl || last > 0b01111111) {...}q - // So that everything is ASCII or continuation bytes, we just proceeded - // without any processing, going straight to __riscv_vse8_v_u8m2. - // But you need the __riscv_vslide1up_vx_u8m2 whenever there is a non-ASCII byte. - if (vlOut != vl) { // If not pure ASCII - // Non-ASCII characters - // We now want to mark the ascii and continuation bytes - vbool4_t m = __riscv_vmsltu_vx_u8m2_b4(v1, 0b11000000, vl); - // We count them, that's our new vlOut (output vector length) - vlOut = __riscv_vcpop_m_b4(m, vl); - - vuint8m2_t v0 = __riscv_vslide1up_vx_u8m2(v1, last, vl); - - vbool4_t leading0 = __riscv_vmsgtu_vx_u8m2_b4(v0, 0b10111111, vl); - vbool4_t trailing1 = __riscv_vmslt_vx_i8m2_b4(__riscv_vreinterpret_v_u8m2_i8m2(v1), (uint8_t)0b11000000, vl); - // -62 i 0b11000010, so we check whether any of v0 is too big - vbool4_t tobig = __riscv_vmand_mm_b4(leading0, __riscv_vmsgtu_vx_u8m2_b4(__riscv_vxor_vx_u8m2(v0, (uint8_t)-62, vl), 1, vl), vl); - if (__riscv_vfirst_m_b4(__riscv_vmor_mm_b4(tobig, __riscv_vmxor_mm_b4(leading0, trailing1, vl), vl), vl) >= 0) - return 0; - - v1 = __riscv_vor_vx_u8m2_mu(__riscv_vmseq_vx_u8m2_b4(v0, 0b11000011, vl), v1, v1, 0b01000000, vl); - v1 = __riscv_vcompress_vm_u8m2(v1, m, vl); - } else if (last >= 0b11000000) { // If last byte is a leading byte and we got only ASCII, error! - return 0; - } - __riscv_vse8_v_u8m2((uint8_t*)dst, v1, vlOut); - } - if (last > 0b10111111) - return 0; - return dst - beg; -} - -simdutf_warn_unused result implementation::convert_utf8_to_latin1_with_errors(const char *src, size_t len, char *dst) const noexcept { - size_t res = convert_utf8_to_latin1(src, len, dst); - if (res) return result(error_code::SUCCESS, res); - return scalar::utf8_to_latin1::convert_with_errors(src, len, dst); -} - -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_latin1(const char *src, size_t len, char *dst) const noexcept { - const char *beg = dst; - uint8_t last = 0; - for (size_t vl, vlOut; len > 0; len -= vl, src += vl, dst += vlOut, last = src[-1]) { - vl = __riscv_vsetvl_e8m2(len); - vuint8m2_t v1 = __riscv_vle8_v_u8m2((uint8_t*)src, vl); - vbool4_t ascii = __riscv_vmsltu_vx_u8m2_b4(v1, 0b10000000, vl); - vlOut = __riscv_vcpop_m_b4(ascii, vl); - if (vlOut != vl) { // If not pure ASCII - vbool4_t m = __riscv_vmsltu_vx_u8m2_b4(v1, 0b11000000, vl); - vlOut = __riscv_vcpop_m_b4(m, vl); - vuint8m2_t v0 = __riscv_vslide1up_vx_u8m2(v1, last, vl); - v1 = __riscv_vor_vx_u8m2_mu(__riscv_vmseq_vx_u8m2_b4(v0, 0b11000011, vl), v1, v1, 0b01000000, vl); - v1 = __riscv_vcompress_vm_u8m2(v1, m, vl); - } - __riscv_vse8_v_u8m2((uint8_t*)dst, v1, vlOut); - } - return dst - beg; -} - -simdutf_warn_unused size_t implementation::convert_utf8_to_utf16le(const char *src, size_t len, char16_t *dst) const noexcept { - return rvv_utf8_to_common(src, len, (uint16_t*)dst); -} - -simdutf_warn_unused size_t implementation::convert_utf8_to_utf16be(const char *src, size_t len, char16_t *dst) const noexcept { - if (supports_zvbb()) - return rvv_utf8_to_common(src, len, (uint16_t*)dst); - else - return rvv_utf8_to_common(src, len, (uint16_t*)dst); -} - -simdutf_warn_unused result implementation::convert_utf8_to_utf16le_with_errors(const char *src, size_t len, char16_t *dst) const noexcept { - size_t res = convert_utf8_to_utf16le(src, len, dst); - if (res) return result(error_code::SUCCESS, res); - return scalar::utf8_to_utf16::convert_with_errors(src, len, dst); -} - -simdutf_warn_unused result implementation::convert_utf8_to_utf16be_with_errors(const char *src, size_t len, char16_t *dst) const noexcept { - size_t res = convert_utf8_to_utf16be(src, len, dst); - if (res) return result(error_code::SUCCESS, res); - return scalar::utf8_to_utf16::convert_with_errors(src, len, dst); -} - -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16le(const char *src, size_t len, char16_t *dst) const noexcept { - return rvv_utf8_to_common(src, len, (uint16_t*)dst); -} - -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16be(const char *src, size_t len, char16_t *dst) const noexcept { - if (supports_zvbb()) - return rvv_utf8_to_common(src, len, (uint16_t*)dst); - else - return rvv_utf8_to_common(src, len, (uint16_t*)dst); -} - -simdutf_warn_unused size_t implementation::convert_utf8_to_utf32(const char *src, size_t len, char32_t *dst) const noexcept { - return rvv_utf8_to_common(src, len, (uint32_t*)dst); -} - -simdutf_warn_unused result implementation::convert_utf8_to_utf32_with_errors(const char *src, size_t len, char32_t *dst) const noexcept { - size_t res = convert_utf8_to_utf32(src, len, dst); - if (res) return result(error_code::SUCCESS, res); - return scalar::utf8_to_utf32::convert_with_errors(src, len, dst); -} - -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf32(const char *src, size_t len, char32_t *dst) const noexcept { - return rvv_utf8_to_common(src, len, (uint32_t*)dst); -} - -/* end file src/rvv/rvv_utf8_to.inl.cpp */ /* begin file src/rvv/rvv_utf16_to.inl.cpp */ #include -template -simdutf_really_inline static result rvv_utf16_to_latin1_with_errors(const char16_t *src, size_t len, char *dst) { +template +simdutf_really_inline static result +rvv_utf16_to_latin1_with_errors(const char16_t *src, size_t len, char *dst) { const char16_t *const beg = src; for (size_t vl; len > 0; len -= vl, src += vl, dst += vl) { vl = __riscv_vsetvl_e16m8(len); - vuint16m8_t v = __riscv_vle16_v_u16m8((uint16_t*)src, vl); + vuint16m8_t v = __riscv_vle16_v_u16m8((uint16_t *)src, vl); v = simdutf_byteflip(v, vl); long idx = __riscv_vfirst_m_b2(__riscv_vmsgtu_vx_u16m8_b2(v, 255, vl), vl); if (idx >= 0) return result(error_code::TOO_LARGE, src - beg + idx); - __riscv_vse8_v_u8m4((uint8_t*)dst, __riscv_vncvt_x_x_w_u8m4(v, vl), vl); + __riscv_vse8_v_u8m4((uint8_t *)dst, __riscv_vncvt_x_x_w_u8m4(v, vl), vl); } return result(error_code::SUCCESS, src - beg); } -simdutf_warn_unused size_t implementation::convert_utf16le_to_latin1(const char16_t *src, size_t len, char *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf16le_to_latin1( + const char16_t *src, size_t len, char *dst) const noexcept { result res = convert_utf16le_to_latin1_with_errors(src, len, dst); return res.error == error_code::SUCCESS ? res.count : 0; } -simdutf_warn_unused size_t implementation::convert_utf16be_to_latin1(const char16_t *src, size_t len, char *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf16be_to_latin1( + const char16_t *src, size_t len, char *dst) const noexcept { result res = convert_utf16be_to_latin1_with_errors(src, len, dst); return res.error == error_code::SUCCESS ? res.count : 0; } -simdutf_warn_unused result implementation::convert_utf16le_to_latin1_with_errors(const char16_t *src, size_t len, char *dst) const noexcept { +simdutf_warn_unused result +implementation::convert_utf16le_to_latin1_with_errors( + const char16_t *src, size_t len, char *dst) const noexcept { return rvv_utf16_to_latin1_with_errors(src, len, dst); } -simdutf_warn_unused result implementation::convert_utf16be_to_latin1_with_errors(const char16_t *src, size_t len, char *dst) const noexcept { +simdutf_warn_unused result +implementation::convert_utf16be_to_latin1_with_errors( + const char16_t *src, size_t len, char *dst) const noexcept { if (supports_zvbb()) - return rvv_utf16_to_latin1_with_errors(src, len, dst); + return rvv_utf16_to_latin1_with_errors(src, len, + dst); else return rvv_utf16_to_latin1_with_errors(src, len, dst); } -simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_latin1(const char16_t *src, size_t len, char *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_latin1( + const char16_t *src, size_t len, char *dst) const noexcept { const char16_t *const beg = src; for (size_t vl; len > 0; len -= vl, src += vl, dst += vl) { vl = __riscv_vsetvl_e16m8(len); - vuint16m8_t v = __riscv_vle16_v_u16m8((uint16_t*)src, vl); - __riscv_vse8_v_u8m4((uint8_t*)dst, __riscv_vncvt_x_x_w_u8m4(v, vl), vl); + vuint16m8_t v = __riscv_vle16_v_u16m8((uint16_t *)src, vl); + __riscv_vse8_v_u8m4((uint8_t *)dst, __riscv_vncvt_x_x_w_u8m4(v, vl), vl); } return src - beg; } -simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_latin1(const char16_t *src, size_t len, char *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_latin1( + const char16_t *src, size_t len, char *dst) const noexcept { const char16_t *const beg = src; for (size_t vl; len > 0; len -= vl, src += vl, dst += vl) { vl = __riscv_vsetvl_e16m8(len); - vuint16m8_t v = __riscv_vle16_v_u16m8((uint16_t*)src, vl); - __riscv_vse8_v_u8m4((uint8_t*)dst, __riscv_vnsrl_wx_u8m4(v, 8, vl), vl); + vuint16m8_t v = __riscv_vle16_v_u16m8((uint16_t *)src, vl); + __riscv_vse8_v_u8m4((uint8_t *)dst, __riscv_vnsrl_wx_u8m4(v, 8, vl), vl); } return src - beg; } -template -simdutf_really_inline static result rvv_utf16_to_utf8_with_errors(const char16_t *src, size_t len, char *dst) { +template +simdutf_really_inline static result +rvv_utf16_to_utf8_with_errors(const char16_t *src, size_t len, char *dst) { size_t n = len; const char16_t *srcBeg = src; const char *dstBeg = dst; size_t vl8m4 = __riscv_vsetvlmax_e8m4(); - vbool2_t m4mulp2 = __riscv_vmseq_vx_u8m4_b2(__riscv_vand_vx_u8m4(__riscv_vid_v_u8m4(vl8m4), 3, vl8m4), 2, vl8m4); + vbool2_t m4mulp2 = __riscv_vmseq_vx_u8m4_b2( + __riscv_vand_vx_u8m4(__riscv_vid_v_u8m4(vl8m4), 3, vl8m4), 2, vl8m4); - for (size_t vl, vlOut; n > 0; ) { + for (size_t vl, vlOut; n > 0;) { vl = __riscv_vsetvl_e16m2(n); - vuint16m2_t v = __riscv_vle16_v_u16m2((uint16_t const*)src, vl); + vuint16m2_t v = __riscv_vle16_v_u16m2((uint16_t const *)src, vl); v = simdutf_byteflip(v, vl); - vbool8_t m234 = __riscv_vmsgtu_vx_u16m2_b8(v, 0x80-1, vl); + vbool8_t m234 = __riscv_vmsgtu_vx_u16m2_b8(v, 0x80 - 1, vl); - if (__riscv_vfirst_m_b8(m234,vl) < 0) { /* 1 byte utf8 */ + if (__riscv_vfirst_m_b8(m234, vl) < 0) { /* 1 byte utf8 */ vlOut = vl; - __riscv_vse8_v_u8m1((uint8_t*)dst, __riscv_vncvt_x_x_w_u8m1(v, vlOut), vlOut); + __riscv_vse8_v_u8m1((uint8_t *)dst, __riscv_vncvt_x_x_w_u8m1(v, vlOut), + vlOut); n -= vl, src += vl, dst += vlOut; continue; } - vbool8_t m34 = __riscv_vmsgtu_vx_u16m2_b8(v, 0x800-1, vl); + vbool8_t m34 = __riscv_vmsgtu_vx_u16m2_b8(v, 0x800 - 1, vl); - if (__riscv_vfirst_m_b8(m34,vl) < 0) { /* 1/2 byte utf8 */ + if (__riscv_vfirst_m_b8(m34, vl) < 0) { /* 1/2 byte utf8 */ /* 0: [ aaa|aabbbbbb] * 1: [aabbbbbb| ] vsll 8 * 2: [ | aaaaa] vsrl 6 @@ -32305,28 +33604,32 @@ simdutf_really_inline static result rvv_utf16_to_utf8_with_errors(const char16_t * 4: [ bbbbbb|000aaaaa] (1|2)&3 * 5: [11000000|11000000] * 6: [10bbbbbb|110aaaaa] 4|5 */ - vuint16m2_t twoByte = - __riscv_vand_vx_u16m2(__riscv_vor_vv_u16m2( - __riscv_vsll_vx_u16m2(v, 8, vl), - __riscv_vsrl_vx_u16m2(v, 6, vl), - vl), 0b0011111100011111, vl); - vuint16m2_t vout16 = __riscv_vor_vx_u16m2_mu(m234, v, twoByte, 0b1000000011000000, vl); + vuint16m2_t twoByte = __riscv_vand_vx_u16m2( + __riscv_vor_vv_u16m2(__riscv_vsll_vx_u16m2(v, 8, vl), + __riscv_vsrl_vx_u16m2(v, 6, vl), vl), + 0b0011111100011111, vl); + vuint16m2_t vout16 = + __riscv_vor_vx_u16m2_mu(m234, v, twoByte, 0b1000000011000000, vl); vuint8m2_t vout = __riscv_vreinterpret_v_u16m2_u8m2(vout16); /* Every high byte that is zero should be compressed * low bytes should never be compressed, so we set them * to all ones, and then create a non-zero bytes mask */ - vbool4_t mcomp = __riscv_vmsne_vx_u8m2_b4(__riscv_vreinterpret_v_u16m2_u8m2(__riscv_vor_vx_u16m2(vout16, 0xFF, vl)), 0, vl*2); - vlOut = __riscv_vcpop_m_b4(mcomp, vl*2); + vbool4_t mcomp = + __riscv_vmsne_vx_u8m2_b4(__riscv_vreinterpret_v_u16m2_u8m2( + __riscv_vor_vx_u16m2(vout16, 0xFF, vl)), + 0, vl * 2); + vlOut = __riscv_vcpop_m_b4(mcomp, vl * 2); - vout = __riscv_vcompress_vm_u8m2(vout, mcomp, vl*2); - __riscv_vse8_v_u8m2((uint8_t*)dst, vout, vlOut); + vout = __riscv_vcompress_vm_u8m2(vout, mcomp, vl * 2); + __riscv_vse8_v_u8m2((uint8_t *)dst, vout, vlOut); n -= vl, src += vl, dst += vlOut; continue; } - vbool8_t sur = __riscv_vmseq_vx_u16m2_b8(__riscv_vand_vx_u16m2(v, 0xF800, vl), 0xD800, vl); + vbool8_t sur = __riscv_vmseq_vx_u16m2_b8( + __riscv_vand_vx_u16m2(v, 0xF800, vl), 0xD800, vl); long first = __riscv_vfirst_m_b8(sur, vl); size_t tail = vl - first; vl = first < 0 ? vl : first; @@ -32340,124 +33643,146 @@ simdutf_really_inline static result rvv_utf16_to_utf8_with_errors(const char16_t * v3: [ |1110aaaa] vsrl 12 | 0b11100000 * 1: [00000000|0bcccccc|00000000|00000000] => [0bcccccc] * 2: [00000000|10cccccc|110bbbbb|00000000] => [110bbbbb] [10cccccc] - * 3: [00000000|10cccccc|10bbbbbb|1110aaaa] => [1110aaaa] [10bbbbbb] [10cccccc] + * 3: [00000000|10cccccc|10bbbbbb|1110aaaa] => [1110aaaa] [10bbbbbb] + * [10cccccc] */ vuint16m2_t v1, v2, v3, v12; - v1 = __riscv_vor_vx_u16m2_mu(m234, v, __riscv_vand_vx_u16m2(v, 0b00111111, vl), 0b10000000, vl); + v1 = __riscv_vor_vx_u16m2_mu( + m234, v, __riscv_vand_vx_u16m2(v, 0b00111111, vl), 0b10000000, vl); v1 = __riscv_vsll_vx_u16m2(v1, 8, vl); - v2 = __riscv_vor_vx_u16m2(__riscv_vand_vx_u16m2(__riscv_vsrl_vx_u16m2(v, 6, vl), 0b00111111, vl), 0b10000000, vl); - v2 = __riscv_vor_vx_u16m2_mu(__riscv_vmnot_m_b8(m34,vl), v2, v2, 0b01000000, vl); - v3 = __riscv_vor_vx_u16m2(__riscv_vsrl_vx_u16m2(v, 12, vl), 0b11100000, vl); + v2 = __riscv_vor_vx_u16m2( + __riscv_vand_vx_u16m2(__riscv_vsrl_vx_u16m2(v, 6, vl), 0b00111111, + vl), + 0b10000000, vl); + v2 = __riscv_vor_vx_u16m2_mu(__riscv_vmnot_m_b8(m34, vl), v2, v2, + 0b01000000, vl); + v3 = __riscv_vor_vx_u16m2(__riscv_vsrl_vx_u16m2(v, 12, vl), 0b11100000, + vl); v12 = __riscv_vor_vv_u16m2_mu(m234, v1, v1, v2, vl); - vuint32m4_t w12 = __riscv_vwmulu_vx_u32m4(v12, 1<<8, vl); + vuint32m4_t w12 = __riscv_vwmulu_vx_u32m4(v12, 1 << 8, vl); vuint32m4_t w123 = __riscv_vwaddu_wv_u32m4_mu(m34, w12, w12, v3, vl); vuint8m4_t vout = __riscv_vreinterpret_v_u32m4_u8m4(w123); - vbool2_t mcomp = __riscv_vmor_mm_b2(m4mulp2, __riscv_vmsne_vx_u8m4_b2(vout, 0, vl*4), vl*4); - vlOut = __riscv_vcpop_m_b2(mcomp, vl*4); + vbool2_t mcomp = __riscv_vmor_mm_b2( + m4mulp2, __riscv_vmsne_vx_u8m4_b2(vout, 0, vl * 4), vl * 4); + vlOut = __riscv_vcpop_m_b2(mcomp, vl * 4); - vout = __riscv_vcompress_vm_u8m4(vout, mcomp, vl*4); - __riscv_vse8_v_u8m4((uint8_t*)dst, vout, vlOut); + vout = __riscv_vcompress_vm_u8m4(vout, mcomp, vl * 4); + __riscv_vse8_v_u8m4((uint8_t *)dst, vout, vlOut); n -= vl, src += vl, dst += vlOut; } - if (tail) while (n) { - uint16_t word = simdutf_byteflip(src[0]); - if((word & 0xFF80)==0) { - break; - } else if((word & 0xF800)==0) { - break; - } else if ((word & 0xF800) != 0xD800) { - break; - } else { - // must be a surrogate pair - if (n <= 1) return result(error_code::SURROGATE, src - srcBeg); - uint16_t diff = word - 0xD800; - if (diff > 0x3FF) return result(error_code::SURROGATE, src - srcBeg); - uint16_t diff2 = simdutf_byteflip(src[1]) - 0xDC00; - if (diff2 > 0x3FF) return result(error_code::SURROGATE, src - srcBeg); - - uint32_t value = ((diff + 0x40) << 10) + diff2 ; - - // will generate four UTF-8 bytes - // we have 0b11110XXX 0b10XXXXXX 0b10XXXXXX 0b10XXXXXX - *dst++ = (char)( (value>>18) | 0b11110000); - *dst++ = (char)(((value>>12) & 0b111111) | 0b10000000); - *dst++ = (char)(((value>> 6) & 0b111111) | 0b10000000); - *dst++ = (char)(( value & 0b111111) | 0b10000000); - src += 2; - n -= 2; + if (tail) + while (n) { + uint16_t word = simdutf_byteflip(src[0]); + if ((word & 0xFF80) == 0) { + break; + } else if ((word & 0xF800) == 0) { + break; + } else if ((word & 0xF800) != 0xD800) { + break; + } else { + // must be a surrogate pair + if (n <= 1) + return result(error_code::SURROGATE, src - srcBeg); + uint16_t diff = word - 0xD800; + if (diff > 0x3FF) + return result(error_code::SURROGATE, src - srcBeg); + uint16_t diff2 = simdutf_byteflip(src[1]) - 0xDC00; + if (diff2 > 0x3FF) + return result(error_code::SURROGATE, src - srcBeg); + + uint32_t value = ((diff + 0x40) << 10) + diff2; + + // will generate four UTF-8 bytes + // we have 0b11110XXX 0b10XXXXXX 0b10XXXXXX 0b10XXXXXX + *dst++ = (char)((value >> 18) | 0b11110000); + *dst++ = (char)(((value >> 12) & 0b111111) | 0b10000000); + *dst++ = (char)(((value >> 6) & 0b111111) | 0b10000000); + *dst++ = (char)((value & 0b111111) | 0b10000000); + src += 2; + n -= 2; + } } - } } return result(error_code::SUCCESS, dst - dstBeg); } -simdutf_warn_unused size_t implementation::convert_utf16le_to_utf8(const char16_t *src, size_t len, char *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf16le_to_utf8( + const char16_t *src, size_t len, char *dst) const noexcept { result res = convert_utf16le_to_utf8_with_errors(src, len, dst); return res.error == error_code::SUCCESS ? res.count : 0; } -simdutf_warn_unused size_t implementation::convert_utf16be_to_utf8(const char16_t *src, size_t len, char *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf16be_to_utf8( + const char16_t *src, size_t len, char *dst) const noexcept { result res = convert_utf16be_to_utf8_with_errors(src, len, dst); return res.error == error_code::SUCCESS ? res.count : 0; } -simdutf_warn_unused result implementation::convert_utf16le_to_utf8_with_errors(const char16_t *src, size_t len, char *dst) const noexcept { +simdutf_warn_unused result implementation::convert_utf16le_to_utf8_with_errors( + const char16_t *src, size_t len, char *dst) const noexcept { return rvv_utf16_to_utf8_with_errors(src, len, dst); } -simdutf_warn_unused result implementation::convert_utf16be_to_utf8_with_errors(const char16_t *src, size_t len, char *dst) const noexcept { +simdutf_warn_unused result implementation::convert_utf16be_to_utf8_with_errors( + const char16_t *src, size_t len, char *dst) const noexcept { if (supports_zvbb()) return rvv_utf16_to_utf8_with_errors(src, len, dst); else return rvv_utf16_to_utf8_with_errors(src, len, dst); } -simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf8(const char16_t *src, size_t len, char *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf8( + const char16_t *src, size_t len, char *dst) const noexcept { return convert_utf16le_to_utf8(src, len, dst); } -simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf8(const char16_t *src, size_t len, char *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf8( + const char16_t *src, size_t len, char *dst) const noexcept { return convert_utf16be_to_utf8(src, len, dst); } -template -simdutf_really_inline static result rvv_utf16_to_utf32_with_errors(const char16_t *src, size_t len, char32_t *dst) { +template +simdutf_really_inline static result +rvv_utf16_to_utf32_with_errors(const char16_t *src, size_t len, char32_t *dst) { const char16_t *const srcBeg = src; char32_t *const dstBeg = dst; - constexpr const uint16_t ANY_SURROGATE_MASK = 0xf800; + constexpr const uint16_t ANY_SURROGATE_MASK = 0xf800; constexpr const uint16_t ANY_SURROGATE_VALUE = 0xd800; - constexpr const uint16_t LO_SURROGATE_MASK = 0xfc00; + constexpr const uint16_t LO_SURROGATE_MASK = 0xfc00; constexpr const uint16_t LO_SURROGATE_VALUE = 0xdc00; - constexpr const uint16_t HI_SURROGATE_MASK = 0xfc00; + constexpr const uint16_t HI_SURROGATE_MASK = 0xfc00; constexpr const uint16_t HI_SURROGATE_VALUE = 0xd800; uint16_t last = 0; while (len > 0) { size_t vl = __riscv_vsetvl_e16m2(len); - vuint16m2_t v0 = __riscv_vle16_v_u16m2((uint16_t const*)src, vl); + vuint16m2_t v0 = __riscv_vle16_v_u16m2((uint16_t const *)src, vl); v0 = simdutf_byteflip(v0, vl); - { // check fast-path - const vuint16m2_t v = __riscv_vand_vx_u16m2(v0, ANY_SURROGATE_MASK, vl); - const vbool8_t any_surrogate = __riscv_vmseq_vx_u16m2_b8(v, ANY_SURROGATE_VALUE, vl); - if (__riscv_vfirst_m_b8(any_surrogate, vl) < 0) { - /* no surrogates */ - __riscv_vse32_v_u32m4((uint32_t*)dst, __riscv_vzext_vf2_u32m4(v0, vl), vl); - len -= vl; - src += vl; - dst += vl; - continue; - } + { // check fast-path + const vuint16m2_t v = __riscv_vand_vx_u16m2(v0, ANY_SURROGATE_MASK, vl); + const vbool8_t any_surrogate = + __riscv_vmseq_vx_u16m2_b8(v, ANY_SURROGATE_VALUE, vl); + if (__riscv_vfirst_m_b8(any_surrogate, vl) < 0) { + /* no surrogates */ + __riscv_vse32_v_u32m4((uint32_t *)dst, __riscv_vzext_vf2_u32m4(v0, vl), + vl); + len -= vl; + src += vl; + dst += vl; + continue; + } } - if ((simdutf_byteflip(src[0]) & LO_SURROGATE_MASK) == LO_SURROGATE_VALUE) { + if ((simdutf_byteflip(src[0]) & LO_SURROGATE_MASK) == + LO_SURROGATE_VALUE) { return result(error_code::SURROGATE, src - srcBeg); } @@ -32465,25 +33790,31 @@ simdutf_really_inline static result rvv_utf16_to_utf32_with_errors(const char16_ vuint16m2_t v1 = __riscv_vslide1down_vx_u16m2(v0, 0, vl); vl = __riscv_vsetvl_e16m2(vl - 1); if (vl == 0) { - return result(error_code::SURROGATE, src - srcBeg); + return result(error_code::SURROGATE, src - srcBeg); } - const vbool8_t surhi = __riscv_vmseq_vx_u16m2_b8(__riscv_vand_vx_u16m2(v0, HI_SURROGATE_MASK, vl), HI_SURROGATE_VALUE, vl); - const vbool8_t surlo = __riscv_vmseq_vx_u16m2_b8(__riscv_vand_vx_u16m2(v1, LO_SURROGATE_MASK, vl), LO_SURROGATE_VALUE, vl); + const vbool8_t surhi = __riscv_vmseq_vx_u16m2_b8( + __riscv_vand_vx_u16m2(v0, HI_SURROGATE_MASK, vl), HI_SURROGATE_VALUE, + vl); + const vbool8_t surlo = __riscv_vmseq_vx_u16m2_b8( + __riscv_vand_vx_u16m2(v1, LO_SURROGATE_MASK, vl), LO_SURROGATE_VALUE, + vl); // compress everything but lo surrogates - const vbool8_t compress = __riscv_vmsne_vx_u16m2_b8(__riscv_vand_vx_u16m2(v0, LO_SURROGATE_MASK, vl), LO_SURROGATE_VALUE, vl); + const vbool8_t compress = __riscv_vmsne_vx_u16m2_b8( + __riscv_vand_vx_u16m2(v0, LO_SURROGATE_MASK, vl), LO_SURROGATE_VALUE, + vl); { - const vbool8_t diff = __riscv_vmxor_mm_b8(surhi, surlo, vl); - const long idx = __riscv_vfirst_m_b8(diff, vl); - if (idx >= 0) { - uint16_t word = simdutf_byteflip(src[idx]); - if(word < 0xD800 || word > 0xDBFF) { - return result(error_code::SURROGATE, src - srcBeg + idx + 1); - } - return result(error_code::SURROGATE, src - srcBeg + idx); + const vbool8_t diff = __riscv_vmxor_mm_b8(surhi, surlo, vl); + const long idx = __riscv_vfirst_m_b8(diff, vl); + if (idx >= 0) { + uint16_t word = simdutf_byteflip(src[idx]); + if (word < 0xD800 || word > 0xDBFF) { + return result(error_code::SURROGATE, src - srcBeg + idx + 1); } + return result(error_code::SURROGATE, src - srcBeg + idx); + } } last = simdutf_byteflip(src[vl]); @@ -32493,12 +33824,14 @@ simdutf_really_inline static result rvv_utf16_to_utf32_with_errors(const char16_ // v1 = 110111xxxxxxxxxx (0xdc00 + xxxxxxxxxx) --- lo surrogate // t0 = u16( 0000_00yy_yyyy_yyyy) - const vuint32m4_t t0 = __riscv_vzext_vf2_u32m4(__riscv_vand_vx_u16m2(v0, 0x03ff, vl), vl); + const vuint32m4_t t0 = + __riscv_vzext_vf2_u32m4(__riscv_vand_vx_u16m2(v0, 0x03ff, vl), vl); // t1 = u32(0000_0000_0000_yyyy_yyyy_yy00_0000_0000) const vuint32m4_t t1 = __riscv_vsll_vx_u32m4(t0, 10, vl); // t2 = u32(0000_0000_0000_0000_0000_00xx_xxxx_xxxx) - const vuint32m4_t t2 = __riscv_vzext_vf2_u32m4(__riscv_vand_vx_u16m2(v1, 0x03ff, vl), vl); + const vuint32m4_t t2 = + __riscv_vzext_vf2_u32m4(__riscv_vand_vx_u16m2(v1, 0x03ff, vl), vl); // t3 = u32(0000_0000_0000_yyyy_yyyy_yyxx_xxxx_xxxx) const vuint32m4_t t3 = __riscv_vor_vv_u32m4(t1, t2, vl); @@ -32510,101 +33843,117 @@ simdutf_really_inline static result rvv_utf16_to_utf32_with_errors(const char16_ const vuint32m4_t comp = __riscv_vcompress_vm_u32m4(result, compress, vl); const size_t vlOut = __riscv_vcpop_m_b8(compress, vl); - __riscv_vse32_v_u32m4((uint32_t*)dst, comp, vlOut); + __riscv_vse32_v_u32m4((uint32_t *)dst, comp, vlOut); len -= vl; src += vl; dst += vlOut; if ((last & LO_SURROGATE_MASK) == LO_SURROGATE_VALUE) { - // last item is lo surrogate and got already consumed - len -= 1; - src += 1; + // last item is lo surrogate and got already consumed + len -= 1; + src += 1; } } return result(error_code::SUCCESS, dst - dstBeg); } -simdutf_warn_unused size_t implementation::convert_utf16le_to_utf32(const char16_t *src, size_t len, char32_t *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf16le_to_utf32( + const char16_t *src, size_t len, char32_t *dst) const noexcept { result res = convert_utf16le_to_utf32_with_errors(src, len, dst); return res.error == error_code::SUCCESS ? res.count : 0; } -simdutf_warn_unused size_t implementation::convert_utf16be_to_utf32(const char16_t *src, size_t len, char32_t *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf16be_to_utf32( + const char16_t *src, size_t len, char32_t *dst) const noexcept { result res = convert_utf16be_to_utf32_with_errors(src, len, dst); return res.error == error_code::SUCCESS ? res.count : 0; } -simdutf_warn_unused result implementation::convert_utf16le_to_utf32_with_errors(const char16_t *src, size_t len, char32_t *dst) const noexcept { +simdutf_warn_unused result implementation::convert_utf16le_to_utf32_with_errors( + const char16_t *src, size_t len, char32_t *dst) const noexcept { return rvv_utf16_to_utf32_with_errors(src, len, dst); } -simdutf_warn_unused result implementation::convert_utf16be_to_utf32_with_errors(const char16_t *src, size_t len, char32_t *dst) const noexcept { +simdutf_warn_unused result implementation::convert_utf16be_to_utf32_with_errors( + const char16_t *src, size_t len, char32_t *dst) const noexcept { if (supports_zvbb()) - return rvv_utf16_to_utf32_with_errors(src, len, dst); + return rvv_utf16_to_utf32_with_errors(src, len, + dst); else return rvv_utf16_to_utf32_with_errors(src, len, dst); } -simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf32(const char16_t *src, size_t len, char32_t *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf32( + const char16_t *src, size_t len, char32_t *dst) const noexcept { return convert_utf16le_to_utf32(src, len, dst); } -simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf32(const char16_t *src, size_t len, char32_t *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf32( + const char16_t *src, size_t len, char32_t *dst) const noexcept { return convert_utf16be_to_utf32(src, len, dst); } /* end file src/rvv/rvv_utf16_to.inl.cpp */ /* begin file src/rvv/rvv_utf32_to.inl.cpp */ -simdutf_warn_unused size_t implementation::convert_utf32_to_latin1(const char32_t *src, size_t len, char *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf32_to_latin1( + const char32_t *src, size_t len, char *dst) const noexcept { result res = convert_utf32_to_latin1_with_errors(src, len, dst); return res.error == error_code::SUCCESS ? res.count : 0; } -simdutf_warn_unused result implementation::convert_utf32_to_latin1_with_errors(const char32_t *src, size_t len, char *dst) const noexcept { +simdutf_warn_unused result implementation::convert_utf32_to_latin1_with_errors( + const char32_t *src, size_t len, char *dst) const noexcept { const char32_t *const beg = src; for (size_t vl; len > 0; len -= vl, src += vl, dst += vl) { vl = __riscv_vsetvl_e32m8(len); - vuint32m8_t v = __riscv_vle32_v_u32m8((uint32_t*)src, vl); + vuint32m8_t v = __riscv_vle32_v_u32m8((uint32_t *)src, vl); long idx = __riscv_vfirst_m_b4(__riscv_vmsgtu_vx_u32m8_b4(v, 255, vl), vl); if (idx >= 0) return result(error_code::TOO_LARGE, src - beg + idx); - /* We don't use vcompress here, because its performance varies widely on current platforms. - * This might be worth reconsidering once there is more hardware available. */ - __riscv_vse8_v_u8m2((uint8_t*)dst, __riscv_vncvt_x_x_w_u8m2(__riscv_vncvt_x_x_w_u16m4(v, vl), vl), vl); + /* We don't use vcompress here, because its performance varies widely on + * current platforms. This might be worth reconsidering once there is more + * hardware available. */ + __riscv_vse8_v_u8m2( + (uint8_t *)dst, + __riscv_vncvt_x_x_w_u8m2(__riscv_vncvt_x_x_w_u16m4(v, vl), vl), vl); } return result(error_code::SUCCESS, src - beg); } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_latin1(const char32_t *src, size_t len, char *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_latin1( + const char32_t *src, size_t len, char *dst) const noexcept { return convert_utf32_to_latin1(src, len, dst); } -simdutf_warn_unused result implementation::convert_utf32_to_utf8_with_errors(const char32_t *src, size_t len, char *dst) const noexcept { +simdutf_warn_unused result implementation::convert_utf32_to_utf8_with_errors( + const char32_t *src, size_t len, char *dst) const noexcept { size_t n = len; const char32_t *srcBeg = src; const char *dstBeg = dst; size_t vl8m4 = __riscv_vsetvlmax_e8m4(); - vbool2_t m4mulp2 = __riscv_vmseq_vx_u8m4_b2(__riscv_vand_vx_u8m4(__riscv_vid_v_u8m4(vl8m4), 3, vl8m4), 2, vl8m4); + vbool2_t m4mulp2 = __riscv_vmseq_vx_u8m4_b2( + __riscv_vand_vx_u8m4(__riscv_vid_v_u8m4(vl8m4), 3, vl8m4), 2, vl8m4); - for (size_t vl, vlOut; n > 0; ) { + for (size_t vl, vlOut; n > 0;) { vl = __riscv_vsetvl_e32m4(n); - vuint32m4_t v = __riscv_vle32_v_u32m4((uint32_t const*)src, vl); - vbool8_t m234 = __riscv_vmsgtu_vx_u32m4_b8(v, 0x80-1, vl); + vuint32m4_t v = __riscv_vle32_v_u32m4((uint32_t const *)src, vl); + vbool8_t m234 = __riscv_vmsgtu_vx_u32m4_b8(v, 0x80 - 1, vl); vuint16m2_t vn = __riscv_vncvt_x_x_w_u16m2(v, vl); if (__riscv_vfirst_m_b8(m234, vl) < 0) { /* 1 byte utf8 */ vlOut = vl; - __riscv_vse8_v_u8m1((uint8_t*)dst, __riscv_vncvt_x_x_w_u8m1(vn, vlOut), vlOut); + __riscv_vse8_v_u8m1((uint8_t *)dst, __riscv_vncvt_x_x_w_u8m1(vn, vlOut), + vlOut); n -= vl, src += vl, dst += vlOut; continue; } - vbool8_t m34 = __riscv_vmsgtu_vx_u32m4_b8(v, 0x800-1, vl); + vbool8_t m34 = __riscv_vmsgtu_vx_u32m4_b8(v, 0x800 - 1, vl); - if (__riscv_vfirst_m_b8(m34,vl) < 0) { /* 1/2 byte utf8 */ + if (__riscv_vfirst_m_b8(m34, vl) < 0) { /* 1/2 byte utf8 */ /* 0: [ aaa|aabbbbbb] * 1: [aabbbbbb| ] vsll 8 * 2: [ | aaaaa] vsrl 6 @@ -32612,37 +33961,49 @@ simdutf_warn_unused result implementation::convert_utf32_to_utf8_with_errors(con * 4: [ bbbbbb|000aaaaa] (1|2)&3 * 5: [10000000|11000000] * 6: [10bbbbbb|110aaaaa] 4|5 */ - vuint16m2_t twoByte = - __riscv_vand_vx_u16m2(__riscv_vor_vv_u16m2( - __riscv_vsll_vx_u16m2(vn, 8, vl), - __riscv_vsrl_vx_u16m2(vn, 6, vl), - vl), 0b0011111100111111, vl); - vuint16m2_t vout16 = __riscv_vor_vx_u16m2_mu(m234, vn, twoByte, 0b1000000011000000, vl); + vuint16m2_t twoByte = __riscv_vand_vx_u16m2( + __riscv_vor_vv_u16m2(__riscv_vsll_vx_u16m2(vn, 8, vl), + __riscv_vsrl_vx_u16m2(vn, 6, vl), vl), + 0b0011111100111111, vl); + vuint16m2_t vout16 = + __riscv_vor_vx_u16m2_mu(m234, vn, twoByte, 0b1000000011000000, vl); vuint8m2_t vout = __riscv_vreinterpret_v_u16m2_u8m2(vout16); /* Every high byte that is zero should be compressed * low bytes should never be compressed, so we set them * to all ones, and then create a non-zero bytes mask */ - vbool4_t mcomp = __riscv_vmsne_vx_u8m2_b4(__riscv_vreinterpret_v_u16m2_u8m2(__riscv_vor_vx_u16m2(vout16, 0xFF, vl)), 0, vl*2); - vlOut = __riscv_vcpop_m_b4(mcomp, vl*2); + vbool4_t mcomp = + __riscv_vmsne_vx_u8m2_b4(__riscv_vreinterpret_v_u16m2_u8m2( + __riscv_vor_vx_u16m2(vout16, 0xFF, vl)), + 0, vl * 2); + vlOut = __riscv_vcpop_m_b4(mcomp, vl * 2); - vout = __riscv_vcompress_vm_u8m2(vout, mcomp, vl*2); - __riscv_vse8_v_u8m2((uint8_t*)dst, vout, vlOut); + vout = __riscv_vcompress_vm_u8m2(vout, mcomp, vl * 2); + __riscv_vse8_v_u8m2((uint8_t *)dst, vout, vlOut); n -= vl, src += vl, dst += vlOut; continue; } - long idx1 = __riscv_vfirst_m_b8(__riscv_vmsgtu_vx_u32m4_b8(v, 0x10FFFF, vl), vl); - vbool8_t sur = __riscv_vmseq_vx_u32m4_b8(__riscv_vand_vx_u32m4(v, 0xFFFFF800, vl), 0xD800, vl); + long idx1 = + __riscv_vfirst_m_b8(__riscv_vmsgtu_vx_u32m4_b8(v, 0x10FFFF, vl), vl); + vbool8_t sur = __riscv_vmseq_vx_u32m4_b8( + __riscv_vand_vx_u32m4(v, 0xFFFFF800, vl), 0xD800, vl); long idx2 = __riscv_vfirst_m_b8(sur, vl); - if(idx1 >= 0 && idx2 >= 0) { - if(idx1 <= idx2) { return result(error_code::TOO_LARGE, src - srcBeg + idx1); } - else { return result(error_code::SURROGATE, src - srcBeg + idx2); } + if (idx1 >= 0 && idx2 >= 0) { + if (idx1 <= idx2) { + return result(error_code::TOO_LARGE, src - srcBeg + idx1); + } else { + return result(error_code::SURROGATE, src - srcBeg + idx2); + } + } + if (idx1 >= 0) { + return result(error_code::TOO_LARGE, src - srcBeg + idx1); + } + if (idx2 >= 0) { + return result(error_code::SURROGATE, src - srcBeg + idx2); } - if (idx1 >= 0) { return result(error_code::TOO_LARGE, src - srcBeg + idx1); } - if (idx2 >= 0) { return result(error_code::SURROGATE, src - srcBeg + idx2); } - vbool8_t m4 = __riscv_vmsgtu_vx_u32m4_b8(v, 0x10000-1, vl); + vbool8_t m4 = __riscv_vmsgtu_vx_u32m4_b8(v, 0x10000 - 1, vl); long first = __riscv_vfirst_m_b8(m4, vl); size_t tail = vl - first; vl = first < 0 ? vl : first; @@ -32656,138 +34017,611 @@ simdutf_warn_unused result implementation::convert_utf32_to_utf8_with_errors(con * v3: [ |1110aaaa] vsrl 12 | 0b11100000 * 1: [00000000|0bcccccc|00000000|00000000] => [0bcccccc] * 2: [00000000|10cccccc|110bbbbb|00000000] => [110bbbbb] [10cccccc] - * 3: [00000000|10cccccc|10bbbbbb|1110aaaa] => [1110aaaa] [10bbbbbb] [10cccccc] + * 3: [00000000|10cccccc|10bbbbbb|1110aaaa] => [1110aaaa] [10bbbbbb] + * [10cccccc] */ vuint16m2_t v1, v2, v3, v12; - v1 = __riscv_vor_vx_u16m2_mu(m234, vn, __riscv_vand_vx_u16m2(vn, 0b00111111, vl), 0b10000000, vl); + v1 = __riscv_vor_vx_u16m2_mu( + m234, vn, __riscv_vand_vx_u16m2(vn, 0b00111111, vl), 0b10000000, vl); v1 = __riscv_vsll_vx_u16m2(v1, 8, vl); - v2 = __riscv_vor_vx_u16m2(__riscv_vand_vx_u16m2(__riscv_vsrl_vx_u16m2(vn, 6, vl), 0b00111111, vl), 0b10000000, vl); - v2 = __riscv_vor_vx_u16m2_mu(__riscv_vmnot_m_b8(m34,vl), v2, v2, 0b01000000, vl); - v3 = __riscv_vor_vx_u16m2(__riscv_vsrl_vx_u16m2(vn, 12, vl), 0b11100000, vl); + v2 = __riscv_vor_vx_u16m2( + __riscv_vand_vx_u16m2(__riscv_vsrl_vx_u16m2(vn, 6, vl), 0b00111111, + vl), + 0b10000000, vl); + v2 = __riscv_vor_vx_u16m2_mu(__riscv_vmnot_m_b8(m34, vl), v2, v2, + 0b01000000, vl); + v3 = __riscv_vor_vx_u16m2(__riscv_vsrl_vx_u16m2(vn, 12, vl), 0b11100000, + vl); v12 = __riscv_vor_vv_u16m2_mu(m234, v1, v1, v2, vl); - vuint32m4_t w12 = __riscv_vwmulu_vx_u32m4(v12, 1<<8, vl); + vuint32m4_t w12 = __riscv_vwmulu_vx_u32m4(v12, 1 << 8, vl); vuint32m4_t w123 = __riscv_vwaddu_wv_u32m4_mu(m34, w12, w12, v3, vl); vuint8m4_t vout = __riscv_vreinterpret_v_u32m4_u8m4(w123); - vbool2_t mcomp = __riscv_vmor_mm_b2(m4mulp2, __riscv_vmsne_vx_u8m4_b2(vout, 0, vl*4), vl*4); - vlOut = __riscv_vcpop_m_b2(mcomp, vl*4); + vbool2_t mcomp = __riscv_vmor_mm_b2( + m4mulp2, __riscv_vmsne_vx_u8m4_b2(vout, 0, vl * 4), vl * 4); + vlOut = __riscv_vcpop_m_b2(mcomp, vl * 4); - vout = __riscv_vcompress_vm_u8m4(vout, mcomp, vl*4); - __riscv_vse8_v_u8m4((uint8_t*)dst, vout, vlOut); + vout = __riscv_vcompress_vm_u8m4(vout, mcomp, vl * 4); + __riscv_vse8_v_u8m4((uint8_t *)dst, vout, vlOut); n -= vl, src += vl, dst += vlOut; } - if (tail) while (n) { - uint32_t word = src[0]; - if (word < 0x10000) break; - if (word > 0x10FFFF) return result(error_code::TOO_LARGE, src - srcBeg); - *dst++ = (uint8_t)(( word>>18) | 0b11110000); - *dst++ = (uint8_t)(((word>>12) & 0b111111) | 0b10000000); - *dst++ = (uint8_t)(((word>> 6) & 0b111111) | 0b10000000); - *dst++ = (uint8_t)(( word & 0b111111) | 0b10000000); - ++src; - --n; - } + if (tail) + while (n) { + uint32_t word = src[0]; + if (word < 0x10000) + break; + if (word > 0x10FFFF) + return result(error_code::TOO_LARGE, src - srcBeg); + *dst++ = (uint8_t)((word >> 18) | 0b11110000); + *dst++ = (uint8_t)(((word >> 12) & 0b111111) | 0b10000000); + *dst++ = (uint8_t)(((word >> 6) & 0b111111) | 0b10000000); + *dst++ = (uint8_t)((word & 0b111111) | 0b10000000); + ++src; + --n; + } } return result(error_code::SUCCESS, dst - dstBeg); } -simdutf_warn_unused size_t implementation::convert_utf32_to_utf8(const char32_t *src, size_t len, char *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf32_to_utf8( + const char32_t *src, size_t len, char *dst) const noexcept { result res = convert_utf32_to_utf8_with_errors(src, len, dst); return res.error == error_code::SUCCESS ? res.count : 0; } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf8(const char32_t *src, size_t len, char *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf8( + const char32_t *src, size_t len, char *dst) const noexcept { return convert_utf32_to_utf8(src, len, dst); } -template -simdutf_really_inline static result rvv_convert_utf32_to_utf16_with_errors(const char32_t *src, size_t len, char16_t *dst) { +template +simdutf_really_inline static result +rvv_convert_utf32_to_utf16_with_errors(const char32_t *src, size_t len, + char16_t *dst) { size_t vl8m2 = __riscv_vsetvlmax_e8m2(); - vbool4_t m4even = __riscv_vmseq_vx_u8m2_b4(__riscv_vand_vx_u8m2(__riscv_vid_v_u8m2(vl8m2), 1, vl8m2), 0, vl8m2); + vbool4_t m4even = __riscv_vmseq_vx_u8m2_b4( + __riscv_vand_vx_u8m2(__riscv_vid_v_u8m2(vl8m2), 1, vl8m2), 0, vl8m2); const char16_t *dstBeg = dst; const char32_t *srcBeg = src; for (size_t vl, vlOut; len > 0; len -= vl, src += vl, dst += vlOut) { vl = __riscv_vsetvl_e32m4(len); - vuint32m4_t v = __riscv_vle32_v_u32m4((uint32_t*)src, vl); + vuint32m4_t v = __riscv_vle32_v_u32m4((uint32_t *)src, vl); vuint32m4_t off = __riscv_vadd_vx_u32m4(v, 0xFFFF2000, vl); - long idx1 = __riscv_vfirst_m_b8(__riscv_vmsgtu_vx_u32m4_b8(v, 0x10FFFF, vl), vl); - long idx2 = __riscv_vfirst_m_b8(__riscv_vmsgtu_vx_u32m4_b8(off, 0xFFFFF7FF, vl), vl); + long idx1 = + __riscv_vfirst_m_b8(__riscv_vmsgtu_vx_u32m4_b8(v, 0x10FFFF, vl), vl); + long idx2 = __riscv_vfirst_m_b8( + __riscv_vmsgtu_vx_u32m4_b8(off, 0xFFFFF7FF, vl), vl); if (idx1 >= 0 && idx2 >= 0) { - if (idx1 <= idx2) return result(error_code::TOO_LARGE, src - srcBeg + idx1); + if (idx1 <= idx2) + return result(error_code::TOO_LARGE, src - srcBeg + idx1); return result(error_code::SURROGATE, src - srcBeg + idx2); } - if (idx1 >= 0) return result(error_code::TOO_LARGE, src - srcBeg + idx1); - if (idx2 >= 0) return result(error_code::SURROGATE, src - srcBeg + idx2); - long idx = __riscv_vfirst_m_b8(__riscv_vmsgtu_vx_u32m4_b8(v, 0xFFFF, vl), vl); + if (idx1 >= 0) + return result(error_code::TOO_LARGE, src - srcBeg + idx1); + if (idx2 >= 0) + return result(error_code::SURROGATE, src - srcBeg + idx2); + long idx = + __riscv_vfirst_m_b8(__riscv_vmsgtu_vx_u32m4_b8(v, 0xFFFF, vl), vl); if (idx < 0) { vlOut = vl; - vuint16m2_t n = simdutf_byteflip(__riscv_vncvt_x_x_w_u16m2(v, vlOut), vlOut); - __riscv_vse16_v_u16m2((uint16_t*)dst, n, vlOut); + vuint16m2_t n = + simdutf_byteflip(__riscv_vncvt_x_x_w_u16m2(v, vlOut), vlOut); + __riscv_vse16_v_u16m2((uint16_t *)dst, n, vlOut); continue; } - vlOut = rvv_utf32_store_utf16_m4((uint16_t*)dst, v, vl, m4even); + vlOut = rvv_utf32_store_utf16_m4((uint16_t *)dst, v, vl, m4even); } return result(error_code::SUCCESS, dst - dstBeg); } -simdutf_warn_unused size_t implementation::convert_utf32_to_utf16le(const char32_t *src, size_t len, char16_t *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf32_to_utf16le( + const char32_t *src, size_t len, char16_t *dst) const noexcept { result res = convert_utf32_to_utf16le_with_errors(src, len, dst); return res.error == error_code::SUCCESS ? res.count : 0; } -simdutf_warn_unused size_t implementation::convert_utf32_to_utf16be(const char32_t *src, size_t len, char16_t *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf32_to_utf16be( + const char32_t *src, size_t len, char16_t *dst) const noexcept { result res = convert_utf32_to_utf16be_with_errors(src, len, dst); return res.error == error_code::SUCCESS ? res.count : 0; } -simdutf_warn_unused result implementation::convert_utf32_to_utf16le_with_errors(const char32_t *src, size_t len, char16_t *dst) const noexcept { - return rvv_convert_utf32_to_utf16_with_errors(src, len, dst); +simdutf_warn_unused result implementation::convert_utf32_to_utf16le_with_errors( + const char32_t *src, size_t len, char16_t *dst) const noexcept { + return rvv_convert_utf32_to_utf16_with_errors( + src, len, dst); } -simdutf_warn_unused result implementation::convert_utf32_to_utf16be_with_errors(const char32_t *src, size_t len, char16_t *dst) const noexcept { +simdutf_warn_unused result implementation::convert_utf32_to_utf16be_with_errors( + const char32_t *src, size_t len, char16_t *dst) const noexcept { if (supports_zvbb()) - return rvv_convert_utf32_to_utf16_with_errors(src, len, dst); + return rvv_convert_utf32_to_utf16_with_errors( + src, len, dst); else - return rvv_convert_utf32_to_utf16_with_errors(src, len, dst); + return rvv_convert_utf32_to_utf16_with_errors(src, len, + dst); } -template -simdutf_really_inline static size_t rvv_convert_valid_utf32_to_utf16(const char32_t *src, size_t len, char16_t *dst) { +template +simdutf_really_inline static size_t +rvv_convert_valid_utf32_to_utf16(const char32_t *src, size_t len, + char16_t *dst) { size_t vl8m2 = __riscv_vsetvlmax_e8m2(); - vbool4_t m4even = __riscv_vmseq_vx_u8m2_b4(__riscv_vand_vx_u8m2(__riscv_vid_v_u8m2(vl8m2), 1, vl8m2), 0, vl8m2); + vbool4_t m4even = __riscv_vmseq_vx_u8m2_b4( + __riscv_vand_vx_u8m2(__riscv_vid_v_u8m2(vl8m2), 1, vl8m2), 0, vl8m2); char16_t *dstBeg = dst; for (size_t vl, vlOut; len > 0; len -= vl, src += vl, dst += vlOut) { vl = __riscv_vsetvl_e32m4(len); - vuint32m4_t v = __riscv_vle32_v_u32m4((uint32_t*)src, vl); - if (__riscv_vfirst_m_b8(__riscv_vmsgtu_vx_u32m4_b8(v, 0xFFFF, vl), vl) < 0) { + vuint32m4_t v = __riscv_vle32_v_u32m4((uint32_t *)src, vl); + if (__riscv_vfirst_m_b8(__riscv_vmsgtu_vx_u32m4_b8(v, 0xFFFF, vl), vl) < + 0) { vlOut = vl; - vuint16m2_t n = simdutf_byteflip(__riscv_vncvt_x_x_w_u16m2(v, vlOut), vlOut); - __riscv_vse16_v_u16m2((uint16_t*)dst, n, vlOut); + vuint16m2_t n = + simdutf_byteflip(__riscv_vncvt_x_x_w_u16m2(v, vlOut), vlOut); + __riscv_vse16_v_u16m2((uint16_t *)dst, n, vlOut); continue; } - vlOut = rvv_utf32_store_utf16_m4((uint16_t*)dst, v, vl, m4even); + vlOut = rvv_utf32_store_utf16_m4((uint16_t *)dst, v, vl, m4even); } return dst - dstBeg; } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16le(const char32_t *src, size_t len, char16_t *dst) const noexcept { - return rvv_convert_valid_utf32_to_utf16(src, len, dst); +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16le( + const char32_t *src, size_t len, char16_t *dst) const noexcept { + return rvv_convert_valid_utf32_to_utf16(src, len, + dst); } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16be(const char32_t *src, size_t len, char16_t *dst) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16be( + const char32_t *src, size_t len, char16_t *dst) const noexcept { if (supports_zvbb()) - return rvv_convert_valid_utf32_to_utf16(src, len, dst); + return rvv_convert_valid_utf32_to_utf16(src, len, + dst); else return rvv_convert_valid_utf32_to_utf16(src, len, dst); } /* end file src/rvv/rvv_utf32_to.inl.cpp */ +/* begin file src/rvv/rvv_utf8_to.inl.cpp */ +template +simdutf_really_inline static size_t rvv_utf8_to_common(char const *src, + size_t len, Tdst *dst) { + static_assert(std::is_same() || + std::is_same(), + "invalid type"); + constexpr bool is16 = std::is_same(); + constexpr endianness endian = + bflip == simdutf_ByteFlip::NONE ? endianness::LITTLE : endianness::BIG; + const auto scalar = [](char const *in, size_t count, Tdst *out) { + return is16 ? scalar::utf8_to_utf16::convert(in, count, + (char16_t *)out) + : scalar::utf8_to_utf32::convert(in, count, (char32_t *)out); + }; + + if (len < 32) + return scalar(src, len, dst); + + /* validate first three bytes */ + if (validate) { + size_t idx = 3; + while (idx < len && (src[idx] >> 6) == 0b10) + ++idx; + if (idx > 3 + 3 || !scalar::utf8::validate(src, idx)) + return 0; + } + + size_t tail = 3; + size_t n = len - tail; + Tdst *beg = dst; + + static const uint64_t err1m[] = {0x0202020202020202, 0x4915012180808080}; + static const uint64_t err2m[] = {0xCBCBCB8B8383A3E7, 0xCBCBDBCBCBCBCBCB}; + static const uint64_t err3m[] = {0x0101010101010101, 0X01010101BABAAEE6}; + + const vuint8m1_t err1tbl = + __riscv_vreinterpret_v_u64m1_u8m1(__riscv_vle64_v_u64m1(err1m, 2)); + const vuint8m1_t err2tbl = + __riscv_vreinterpret_v_u64m1_u8m1(__riscv_vle64_v_u64m1(err2m, 2)); + const vuint8m1_t err3tbl = + __riscv_vreinterpret_v_u64m1_u8m1(__riscv_vle64_v_u64m1(err3m, 2)); + + size_t vl8m2 = __riscv_vsetvlmax_e8m2(); + vbool4_t m4even = __riscv_vmseq_vx_u8m2_b4( + __riscv_vand_vx_u8m2(__riscv_vid_v_u8m2(vl8m2), 1, vl8m2), 0, vl8m2); + + for (size_t vl, vlOut; n > 0; n -= vl, src += vl, dst += vlOut) { + vl = __riscv_vsetvl_e8m2(n); + + vuint8m2_t v0 = __riscv_vle8_v_u8m2((uint8_t const *)src, vl); + uint64_t max = __riscv_vmv_x_s_u8m1_u8( + __riscv_vredmaxu_vs_u8m2_u8m1(v0, __riscv_vmv_s_x_u8m1(0, vl), vl)); + + uint8_t next0 = src[vl + 0]; + uint8_t next1 = src[vl + 1]; + uint8_t next2 = src[vl + 2]; + + /* fast path: ASCII */ + if ((max | next0 | next1 | next2) < 0b10000000) { + vlOut = vl; + if (is16) + __riscv_vse16_v_u16m4( + (uint16_t *)dst, + simdutf_byteflip(__riscv_vzext_vf2_u16m4(v0, vlOut), vlOut), + vlOut); + else + __riscv_vse32_v_u32m8((uint32_t *)dst, + __riscv_vzext_vf4_u32m8(v0, vlOut), vlOut); + continue; + } + + /* see "Validating UTF-8 In Less Than One Instruction Per Byte" + * https://arxiv.org/abs/2010.03090 */ + vuint8m2_t v1 = __riscv_vslide1down_vx_u8m2(v0, next0, vl); + vuint8m2_t v2 = __riscv_vslide1down_vx_u8m2(v1, next1, vl); + vuint8m2_t v3 = __riscv_vslide1down_vx_u8m2(v2, next2, vl); + + if (validate) { + vuint8m2_t s1 = __riscv_vreinterpret_v_u16m2_u8m2(__riscv_vsrl_vx_u16m2( + __riscv_vreinterpret_v_u8m2_u16m2(v2), 4, __riscv_vsetvlmax_e16m2())); + vuint8m2_t s3 = __riscv_vreinterpret_v_u16m2_u8m2(__riscv_vsrl_vx_u16m2( + __riscv_vreinterpret_v_u8m2_u16m2(v3), 4, __riscv_vsetvlmax_e16m2())); + + vuint8m2_t idx2 = __riscv_vand_vx_u8m2(v2, 0xF, vl); + vuint8m2_t idx1 = __riscv_vand_vx_u8m2(s1, 0xF, vl); + vuint8m2_t idx3 = __riscv_vand_vx_u8m2(s3, 0xF, vl); + + vuint8m2_t err1 = simdutf_vrgather_u8m1x2(err1tbl, idx1); + vuint8m2_t err2 = simdutf_vrgather_u8m1x2(err2tbl, idx2); + vuint8m2_t err3 = simdutf_vrgather_u8m1x2(err3tbl, idx3); + vint8m2_t errs = __riscv_vreinterpret_v_u8m2_i8m2( + __riscv_vand_vv_u8m2(__riscv_vand_vv_u8m2(err1, err2, vl), err3, vl)); + + vbool4_t is_3 = __riscv_vmsgtu_vx_u8m2_b4(v1, 0b11100000 - 1, vl); + vbool4_t is_4 = __riscv_vmsgtu_vx_u8m2_b4(v0, 0b11110000 - 1, vl); + vbool4_t is_34 = __riscv_vmor_mm_b4(is_3, is_4, vl); + vbool4_t err34 = + __riscv_vmxor_mm_b4(is_34, __riscv_vmslt_vx_i8m2_b4(errs, 0, vl), vl); + vbool4_t errm = + __riscv_vmor_mm_b4(__riscv_vmsgt_vx_i8m2_b4(errs, 0, vl), err34, vl); + if (__riscv_vfirst_m_b4(errm, vl) >= 0) + return 0; + } + + /* decoding */ + + /* mask of non continuation bytes */ + vbool4_t m = + __riscv_vmsgt_vx_i8m2_b4(__riscv_vreinterpret_v_u8m2_i8m2(v0), -65, vl); + vlOut = __riscv_vcpop_m_b4(m, vl); + + /* extract first and second bytes */ + vuint8m2_t b1 = __riscv_vcompress_vm_u8m2(v0, m, vl); + vuint8m2_t b2 = __riscv_vcompress_vm_u8m2(v1, m, vl); + + /* fast path: one and two byte */ + if (max < 0b11100000) { + b2 = __riscv_vand_vx_u8m2(b2, 0b00111111, vlOut); + + vbool4_t m1 = __riscv_vmsgtu_vx_u8m2_b4(b1, 0b10111111, vlOut); + b1 = __riscv_vand_vx_u8m2_mu(m1, b1, b1, 63, vlOut); + + vuint16m4_t b12 = __riscv_vwmulu_vv_u16m4( + b1, + __riscv_vmerge_vxm_u8m2(__riscv_vmv_v_x_u8m2(1, vlOut), 1 << 6, m1, + vlOut), + vlOut); + b12 = __riscv_vwaddu_wv_u16m4_mu(m1, b12, b12, b2, vlOut); + if (is16) + __riscv_vse16_v_u16m4((uint16_t *)dst, + simdutf_byteflip(b12, vlOut), vlOut); + else + __riscv_vse32_v_u32m8((uint32_t *)dst, + __riscv_vzext_vf2_u32m8(b12, vlOut), vlOut); + continue; + } + + /* fast path: one, two and three byte */ + if (max < 0b11110000) { + vuint8m2_t b3 = __riscv_vcompress_vm_u8m2(v2, m, vl); + + b2 = __riscv_vand_vx_u8m2(b2, 0b00111111, vlOut); + b3 = __riscv_vand_vx_u8m2(b3, 0b00111111, vlOut); + + vbool4_t m1 = __riscv_vmsgtu_vx_u8m2_b4(b1, 0b10111111, vlOut); + vbool4_t m3 = __riscv_vmsgtu_vx_u8m2_b4(b1, 0b11011111, vlOut); + + vuint8m2_t t1 = __riscv_vand_vx_u8m2_mu(m1, b1, b1, 63, vlOut); + b1 = __riscv_vand_vx_u8m2_mu(m3, t1, b1, 15, vlOut); + + vuint16m4_t b12 = __riscv_vwmulu_vv_u16m4( + b1, + __riscv_vmerge_vxm_u8m2(__riscv_vmv_v_x_u8m2(1, vlOut), 1 << 6, m1, + vlOut), + vlOut); + b12 = __riscv_vwaddu_wv_u16m4_mu(m1, b12, b12, b2, vlOut); + vuint16m4_t b123 = __riscv_vwaddu_wv_u16m4_mu( + m3, b12, __riscv_vsll_vx_u16m4_mu(m3, b12, b12, 6, vlOut), b3, vlOut); + if (is16) + __riscv_vse16_v_u16m4((uint16_t *)dst, + simdutf_byteflip(b123, vlOut), vlOut); + else + __riscv_vse32_v_u32m8((uint32_t *)dst, + __riscv_vzext_vf2_u32m8(b123, vlOut), vlOut); + continue; + } + + /* extract third and fourth bytes */ + vuint8m2_t b3 = __riscv_vcompress_vm_u8m2(v2, m, vl); + vuint8m2_t b4 = __riscv_vcompress_vm_u8m2(v3, m, vl); + + /* remove prefix from leading bytes + * + * We could also use vrgather here, but it increases register pressure, + * and its performance varies widely on current platforms. It might be + * worth reconsidering, though, once there is more hardware available. + * Same goes for the __riscv_vsrl_vv_u32m4 correction step. + * + * We shift left and then right by the number of bytes in the prefix, + * which can be calculated as follows: + * x max(x-10, 0) + * 0xxx -> 0000-0111 -> sift by 0 or 1 -> 0 + * 10xx -> 1000-1011 -> don't care + * 110x -> 1100,1101 -> sift by 3 -> 2,3 + * 1110 -> 1110 -> sift by 4 -> 4 + * 1111 -> 1111 -> sift by 5 -> 5 + * + * vssubu.vx v, 10, (max(x-10, 0)) almost gives us what we want, we + * just need to manually detect and handle the one special case: + */ +#define SIMDUTF_RVV_UTF8_TO_COMMON_M1(idx) \ + vuint8m1_t c1 = __riscv_vget_v_u8m2_u8m1(b1, idx); \ + vuint8m1_t c2 = __riscv_vget_v_u8m2_u8m1(b2, idx); \ + vuint8m1_t c3 = __riscv_vget_v_u8m2_u8m1(b3, idx); \ + vuint8m1_t c4 = __riscv_vget_v_u8m2_u8m1(b4, idx); \ + /* remove prefix from trailing bytes */ \ + c2 = __riscv_vand_vx_u8m1(c2, 0b00111111, vlOut); \ + c3 = __riscv_vand_vx_u8m1(c3, 0b00111111, vlOut); \ + c4 = __riscv_vand_vx_u8m1(c4, 0b00111111, vlOut); \ + vuint8m1_t shift = __riscv_vsrl_vx_u8m1(c1, 4, vlOut); \ + shift = __riscv_vmerge_vxm_u8m1(__riscv_vssubu_vx_u8m1(shift, 10, vlOut), 3, \ + __riscv_vmseq_vx_u8m1_b8(shift, 12, vlOut), \ + vlOut); \ + c1 = __riscv_vsll_vv_u8m1(c1, shift, vlOut); \ + c1 = __riscv_vsrl_vv_u8m1(c1, shift, vlOut); \ + /* unconditionally widen and combine to c1234 */ \ + vuint16m2_t c34 = __riscv_vwaddu_wv_u16m2( \ + __riscv_vwmulu_vx_u16m2(c3, 1 << 6, vlOut), c4, vlOut); \ + vuint16m2_t c12 = __riscv_vwaddu_wv_u16m2( \ + __riscv_vwmulu_vx_u16m2(c1, 1 << 6, vlOut), c2, vlOut); \ + vuint32m4_t c1234 = __riscv_vwaddu_wv_u32m4( \ + __riscv_vwmulu_vx_u32m4(c12, 1 << 12, vlOut), c34, vlOut); \ + /* derive required right-shift amount from `shift` to reduce \ + * c1234 to the required number of bytes */ \ + c1234 = __riscv_vsrl_vv_u32m4( \ + c1234, \ + __riscv_vzext_vf4_u32m4( \ + __riscv_vmul_vx_u8m1( \ + __riscv_vrsub_vx_u8m1(__riscv_vssubu_vx_u8m1(shift, 2, vlOut), \ + 3, vlOut), \ + 6, vlOut), \ + vlOut), \ + vlOut); \ + /* store result in desired format */ \ + if (is16) \ + vlDst = rvv_utf32_store_utf16_m4((uint16_t *)dst, c1234, vlOut, \ + m4even); \ + else \ + vlDst = vlOut, __riscv_vse32_v_u32m4((uint32_t *)dst, c1234, vlOut); + + /* Unrolling this manually reduces register pressure and allows + * us to terminate early. */ + { + size_t vlOutm2 = vlOut, vlDst; + vlOut = __riscv_vsetvl_e8m1(vlOut); + SIMDUTF_RVV_UTF8_TO_COMMON_M1(0) + if (vlOutm2 == vlOut) { + vlOut = vlDst; + continue; + } + + dst += vlDst; + vlOut = vlOutm2 - vlOut; + } + { + size_t vlDst; + SIMDUTF_RVV_UTF8_TO_COMMON_M1(1) + vlOut = vlDst; + } + +#undef SIMDUTF_RVV_UTF8_TO_COMMON_M1 + } + + /* validate the last character and reparse it + tail */ + if (len > tail) { + if ((src[0] >> 6) == 0b10) + --dst; + while ((src[0] >> 6) == 0b10 && tail < len) + --src, ++tail; + if (is16) { + /* go back one more, when on high surrogate */ + if (simdutf_byteflip((uint16_t)dst[-1]) >= 0xD800 && + simdutf_byteflip((uint16_t)dst[-1]) <= 0xDBFF) + --dst; + } + } + size_t ret = scalar(src, tail, dst); + if (ret == 0) + return 0; + return (size_t)(dst - beg) + ret; +} + +simdutf_warn_unused size_t implementation::convert_utf8_to_latin1( + const char *src, size_t len, char *dst) const noexcept { + const char *beg = dst; + uint8_t last = 0; + for (size_t vl, vlOut; len > 0; + len -= vl, src += vl, dst += vlOut, last = src[-1]) { + vl = __riscv_vsetvl_e8m2(len); + vuint8m2_t v1 = __riscv_vle8_v_u8m2((uint8_t *)src, vl); + // check which bytes are ASCII + vbool4_t ascii = __riscv_vmsltu_vx_u8m2_b4(v1, 0b10000000, vl); + // count ASCII bytes + vlOut = __riscv_vcpop_m_b4(ascii, vl); + // The original code would only enter the next block after this check: + // vbool4_t m = __riscv_vmsltu_vx_u8m2_b4(v1, 0b11000000, vl); + // vlOut = __riscv_vcpop_m_b4(m, vl); + // if (vlOut != vl || last > 0b01111111) {...}q + // So that everything is ASCII or continuation bytes, we just proceeded + // without any processing, going straight to __riscv_vse8_v_u8m2. + // But you need the __riscv_vslide1up_vx_u8m2 whenever there is a non-ASCII + // byte. + if (vlOut != vl) { // If not pure ASCII + // Non-ASCII characters + // We now want to mark the ascii and continuation bytes + vbool4_t m = __riscv_vmsltu_vx_u8m2_b4(v1, 0b11000000, vl); + // We count them, that's our new vlOut (output vector length) + vlOut = __riscv_vcpop_m_b4(m, vl); + + vuint8m2_t v0 = __riscv_vslide1up_vx_u8m2(v1, last, vl); + + vbool4_t leading0 = __riscv_vmsgtu_vx_u8m2_b4(v0, 0b10111111, vl); + vbool4_t trailing1 = __riscv_vmslt_vx_i8m2_b4( + __riscv_vreinterpret_v_u8m2_i8m2(v1), (uint8_t)0b11000000, vl); + // -62 i 0b11000010, so we check whether any of v0 is too big + vbool4_t tobig = __riscv_vmand_mm_b4( + leading0, + __riscv_vmsgtu_vx_u8m2_b4(__riscv_vxor_vx_u8m2(v0, (uint8_t)-62, vl), + 1, vl), + vl); + if (__riscv_vfirst_m_b4( + __riscv_vmor_mm_b4( + tobig, __riscv_vmxor_mm_b4(leading0, trailing1, vl), vl), + vl) >= 0) + return 0; + + v1 = __riscv_vor_vx_u8m2_mu(__riscv_vmseq_vx_u8m2_b4(v0, 0b11000011, vl), + v1, v1, 0b01000000, vl); + v1 = __riscv_vcompress_vm_u8m2(v1, m, vl); + } else if (last >= 0b11000000) { // If last byte is a leading byte and we + // got only ASCII, error! + return 0; + } + __riscv_vse8_v_u8m2((uint8_t *)dst, v1, vlOut); + } + if (last > 0b10111111) + return 0; + return dst - beg; +} + +simdutf_warn_unused result implementation::convert_utf8_to_latin1_with_errors( + const char *src, size_t len, char *dst) const noexcept { + size_t res = convert_utf8_to_latin1(src, len, dst); + if (res) + return result(error_code::SUCCESS, res); + return scalar::utf8_to_latin1::convert_with_errors(src, len, dst); +} + +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_latin1( + const char *src, size_t len, char *dst) const noexcept { + const char *beg = dst; + uint8_t last = 0; + for (size_t vl, vlOut; len > 0; + len -= vl, src += vl, dst += vlOut, last = src[-1]) { + vl = __riscv_vsetvl_e8m2(len); + vuint8m2_t v1 = __riscv_vle8_v_u8m2((uint8_t *)src, vl); + vbool4_t ascii = __riscv_vmsltu_vx_u8m2_b4(v1, 0b10000000, vl); + vlOut = __riscv_vcpop_m_b4(ascii, vl); + if (vlOut != vl) { // If not pure ASCII + vbool4_t m = __riscv_vmsltu_vx_u8m2_b4(v1, 0b11000000, vl); + vlOut = __riscv_vcpop_m_b4(m, vl); + vuint8m2_t v0 = __riscv_vslide1up_vx_u8m2(v1, last, vl); + v1 = __riscv_vor_vx_u8m2_mu(__riscv_vmseq_vx_u8m2_b4(v0, 0b11000011, vl), + v1, v1, 0b01000000, vl); + v1 = __riscv_vcompress_vm_u8m2(v1, m, vl); + } + __riscv_vse8_v_u8m2((uint8_t *)dst, v1, vlOut); + } + return dst - beg; +} + +simdutf_warn_unused size_t implementation::convert_utf8_to_utf16le( + const char *src, size_t len, char16_t *dst) const noexcept { + return rvv_utf8_to_common(src, len, + (uint16_t *)dst); +} + +simdutf_warn_unused size_t implementation::convert_utf8_to_utf16be( + const char *src, size_t len, char16_t *dst) const noexcept { + if (supports_zvbb()) + return rvv_utf8_to_common( + src, len, (uint16_t *)dst); + else + return rvv_utf8_to_common(src, len, + (uint16_t *)dst); +} + +simdutf_warn_unused result implementation::convert_utf8_to_utf16le_with_errors( + const char *src, size_t len, char16_t *dst) const noexcept { + size_t res = convert_utf8_to_utf16le(src, len, dst); + if (res) + return result(error_code::SUCCESS, res); + return scalar::utf8_to_utf16::convert_with_errors( + src, len, dst); +} + +simdutf_warn_unused result implementation::convert_utf8_to_utf16be_with_errors( + const char *src, size_t len, char16_t *dst) const noexcept { + size_t res = convert_utf8_to_utf16be(src, len, dst); + if (res) + return result(error_code::SUCCESS, res); + return scalar::utf8_to_utf16::convert_with_errors(src, len, + dst); +} + +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16le( + const char *src, size_t len, char16_t *dst) const noexcept { + return rvv_utf8_to_common( + src, len, (uint16_t *)dst); +} + +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16be( + const char *src, size_t len, char16_t *dst) const noexcept { + if (supports_zvbb()) + return rvv_utf8_to_common( + src, len, (uint16_t *)dst); + else + return rvv_utf8_to_common( + src, len, (uint16_t *)dst); +} + +simdutf_warn_unused size_t implementation::convert_utf8_to_utf32( + const char *src, size_t len, char32_t *dst) const noexcept { + return rvv_utf8_to_common(src, len, + (uint32_t *)dst); +} + +simdutf_warn_unused result implementation::convert_utf8_to_utf32_with_errors( + const char *src, size_t len, char32_t *dst) const noexcept { + size_t res = convert_utf8_to_utf32(src, len, dst); + if (res) + return result(error_code::SUCCESS, res); + return scalar::utf8_to_utf32::convert_with_errors(src, len, dst); +} + +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf32( + const char *src, size_t len, char32_t *dst) const noexcept { + return rvv_utf8_to_common( + src, len, (uint32_t *)dst); +} +/* end file src/rvv/rvv_utf8_to.inl.cpp */ -simdutf_warn_unused int implementation::detect_encodings(const char *input, size_t length) const noexcept { +simdutf_warn_unused int +implementation::detect_encodings(const char *input, + size_t length) const noexcept { // If there is a BOM, then we trust it. auto bom_encoding = simdutf::BOM::check_bom(input, length); if (bom_encoding != encoding_type::unspecified) @@ -32797,117 +34631,137 @@ simdutf_warn_unused int implementation::detect_encodings(const char *input, size if (validate_utf8(input, length)) out |= encoding_type::UTF8; if (length % 2 == 0) { - if (validate_utf16(reinterpret_cast(input), length/2)) + if (validate_utf16(reinterpret_cast(input), length / 2)) out |= encoding_type::UTF16_LE; } if (length % 4 == 0) { - if (validate_utf32(reinterpret_cast(input), length/4)) + if (validate_utf32(reinterpret_cast(input), length / 4)) out |= encoding_type::UTF32_LE; } return out; } -template -simdutf_really_inline static void rvv_change_endianness_utf16(const char16_t *src, size_t len, char16_t *dst) { +template +simdutf_really_inline static void +rvv_change_endianness_utf16(const char16_t *src, size_t len, char16_t *dst) { for (size_t vl; len > 0; len -= vl, src += vl, dst += vl) { vl = __riscv_vsetvl_e16m8(len); - vuint16m8_t v = __riscv_vle16_v_u16m8((uint16_t*)src, vl); + vuint16m8_t v = __riscv_vle16_v_u16m8((uint16_t *)src, vl); __riscv_vse16_v_u16m8((uint16_t *)dst, simdutf_byteflip(v, vl), vl); } } -void implementation::change_endianness_utf16(const char16_t *src, size_t len, char16_t *dst) const noexcept { +void implementation::change_endianness_utf16(const char16_t *src, size_t len, + char16_t *dst) const noexcept { if (supports_zvbb()) return rvv_change_endianness_utf16(src, len, dst); else return rvv_change_endianness_utf16(src, len, dst); } -simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64( + const char *input, size_t length) const noexcept { return scalar::base64::maximal_binary_length_from_base64(input, length); } -simdutf_warn_unused result implementation::base64_to_binary(const char * input, size_t length, char* output, base64_options options) const noexcept { - while(length > 0 && scalar::base64::is_ascii_white_space(input[length - 1])) { +simdutf_warn_unused result implementation::base64_to_binary( + const char *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_options) const noexcept { + while (length > 0 && + scalar::base64::is_ascii_white_space(input[length - 1])) { length--; } - size_t equallocation = length; // location of the first padding character if any + size_t equallocation = + length; // location of the first padding character if any size_t equalsigns = 0; - if(length > 0 && input[length - 1] == '=') { + if (length > 0 && input[length - 1] == '=') { equallocation = length - 1; length -= 1; equalsigns++; - while(length > 0 && scalar::base64::is_ascii_white_space(input[length - 1])) { + while (length > 0 && + scalar::base64::is_ascii_white_space(input[length - 1])) { length--; } - if(length > 0 && input[length - 1] == '=') { + if (length > 0 && input[length - 1] == '=') { equallocation = length - 1; equalsigns++; length -= 1; } } - if(length == 0) { - if(equalsigns > 0) { + if (length == 0) { + if (equalsigns > 0) { return {INVALID_BASE64_CHARACTER, equallocation}; } return {SUCCESS, 0}; } - result r = scalar::base64::base64_tail_decode(output, input, length, options); - if(r.error == error_code::SUCCESS && equalsigns > 0) { + result r = scalar::base64::base64_tail_decode( + output, input, length, equalsigns, options, last_chunk_options); + if (last_chunk_options != stop_before_partial && + r.error == error_code::SUCCESS && equalsigns > 0) { // additional checks - if((r.count % 3 == 0) || ((r.count % 3) + 1 + equalsigns != 4)) { + if ((r.count % 3 == 0) || ((r.count % 3) + 1 + equalsigns != 4)) { return {INVALID_BASE64_CHARACTER, equallocation}; } } return r; } - -simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64( + const char16_t *input, size_t length) const noexcept { return scalar::base64::maximal_binary_length_from_base64(input, length); } -simdutf_warn_unused result implementation::base64_to_binary(const char16_t * input, size_t length, char* output, base64_options options) const noexcept { - while(length > 0 && scalar::base64::is_ascii_white_space(input[length - 1])) { +simdutf_warn_unused result implementation::base64_to_binary( + const char16_t *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_options) const noexcept { + while (length > 0 && + scalar::base64::is_ascii_white_space(input[length - 1])) { length--; } - size_t equallocation = length; // location of the first padding character if any + size_t equallocation = + length; // location of the first padding character if any auto equalsigns = 0; - if(length > 0 && input[length - 1] == '=') { + if (length > 0 && input[length - 1] == '=') { equallocation = length - 1; length -= 1; equalsigns++; - while(length > 0 && scalar::base64::is_ascii_white_space(input[length - 1])) { + while (length > 0 && + scalar::base64::is_ascii_white_space(input[length - 1])) { length--; } - if(length > 0 && input[length - 1] == '=') { + if (length > 0 && input[length - 1] == '=') { equallocation = length - 1; equalsigns++; length -= 1; } } - if(length == 0) { - if(equalsigns > 0) { + if (length == 0) { + if (equalsigns > 0) { return {INVALID_BASE64_CHARACTER, equallocation}; } return {SUCCESS, 0}; } - result r = scalar::base64::base64_tail_decode(output, input, length, options); - if(r.error == error_code::SUCCESS && equalsigns > 0) { + result r = scalar::base64::base64_tail_decode( + output, input, length, equalsigns, options, last_chunk_options); + if (last_chunk_options != stop_before_partial && + r.error == error_code::SUCCESS && equalsigns > 0) { // additional checks - if((r.count % 3 == 0) || ((r.count % 3) + 1 + equalsigns != 4)) { + if ((r.count % 3 == 0) || ((r.count % 3) + 1 + equalsigns != 4)) { return {INVALID_BASE64_CHARACTER, equallocation}; } } return r; } -simdutf_warn_unused size_t implementation::base64_length_from_binary(size_t length, base64_options options) const noexcept { +simdutf_warn_unused size_t implementation::base64_length_from_binary( + size_t length, base64_options options) const noexcept { return scalar::base64::base64_length_from_binary(length, options); } -size_t implementation::binary_to_base64(const char * input, size_t length, char* output, base64_options options) const noexcept { +size_t implementation::binary_to_base64(const char *input, size_t length, + char *output, + base64_options options) const noexcept { return scalar::base64::tail_encode_base64(output, input, length, options); } } // namespace rvv @@ -32939,25 +34793,36 @@ namespace simdutf { namespace westmere { namespace { #ifndef SIMDUTF_WESTMERE_H -#error "westmere.h must be included" + #error "westmere.h must be included" #endif using namespace simd; -simdutf_really_inline bool is_ascii(const simd8x64& input) { +simdutf_really_inline bool is_ascii(const simd8x64 &input) { return input.reduce_or().is_ascii(); } -simdutf_unused simdutf_really_inline simd8 must_be_continuation(const simd8 prev1, const simd8 prev2, const simd8 prev3) { - simd8 is_second_byte = prev1.saturating_sub(0b11000000u-1); // Only 11______ will be > 0 - simd8 is_third_byte = prev2.saturating_sub(0b11100000u-1); // Only 111_____ will be > 0 - simd8 is_fourth_byte = prev3.saturating_sub(0b11110000u-1); // Only 1111____ will be > 0 - // Caller requires a bool (all 1's). All values resulting from the subtraction will be <= 64, so signed comparison is fine. - return simd8(is_second_byte | is_third_byte | is_fourth_byte) > int8_t(0); -} - -simdutf_really_inline simd8 must_be_2_3_continuation(const simd8 prev2, const simd8 prev3) { - simd8 is_third_byte = prev2.saturating_sub(0xe0u-0x80); // Only 111_____ will be >= 0x80 - simd8 is_fourth_byte = prev3.saturating_sub(0xf0u-0x80); // Only 1111____ will be >= 0x80 +simdutf_unused simdutf_really_inline simd8 +must_be_continuation(const simd8 prev1, const simd8 prev2, + const simd8 prev3) { + simd8 is_second_byte = + prev1.saturating_sub(0b11000000u - 1); // Only 11______ will be > 0 + simd8 is_third_byte = + prev2.saturating_sub(0b11100000u - 1); // Only 111_____ will be > 0 + simd8 is_fourth_byte = + prev3.saturating_sub(0b11110000u - 1); // Only 1111____ will be > 0 + // Caller requires a bool (all 1's). All values resulting from the subtraction + // will be <= 64, so signed comparison is fine. + return simd8(is_second_byte | is_third_byte | is_fourth_byte) > + int8_t(0); +} + +simdutf_really_inline simd8 +must_be_2_3_continuation(const simd8 prev2, + const simd8 prev3) { + simd8 is_third_byte = + prev2.saturating_sub(0xe0u - 0x80); // Only 111_____ will be >= 0x80 + simd8 is_fourth_byte = + prev3.saturating_sub(0xf0u - 0x80); // Only 1111____ will be >= 0x80 return simd8(is_third_byte | is_fourth_byte); } @@ -32967,18 +34832,15 @@ namespace westmere { /* begin file src/westmere/internal/write_v_u16_11bits_to_utf8.cpp */ /* -* reads a vector of uint16 values -* bits after 11th are ignored -* first 11 bits are encoded into utf8 -* !important! utf8_output must have at least 16 writable bytes -*/ + * reads a vector of uint16 values + * bits after 11th are ignored + * first 11 bits are encoded into utf8 + * !important! utf8_output must have at least 16 writable bytes + */ -inline void write_v_u16_11bits_to_utf8( - const __m128i v_u16, - char*& utf8_output, - const __m128i one_byte_bytemask, - const uint16_t one_byte_bitmask -) { +inline void write_v_u16_11bits_to_utf8(const __m128i v_u16, char *&utf8_output, + const __m128i one_byte_bytemask, + const uint16_t one_byte_bitmask) { // 0b1100_0000_1000_0000 const __m128i v_c080 = _mm_set1_epi16((int16_t)0xc080); // 0b0001_1111_0000_0000 @@ -32987,8 +34849,8 @@ inline void write_v_u16_11bits_to_utf8( const __m128i v_003f = _mm_set1_epi16((int16_t)0x003f); // 1. prepare 2-byte values - // input 16-bit word : [0000|0aaa|aabb|bbbb] x 8 - // expected output : [110a|aaaa|10bb|bbbb] x 8 + // input 16-bit word : [0000|0aaa|aabb|bbbb] x 8 + // expected output : [110a|aaaa|10bb|bbbb] x 8 // t0 = [000a|aaaa|bbbb|bb00] const __m128i t0 = _mm_slli_epi16(v_u16, 2); @@ -33005,34 +34867,35 @@ inline void write_v_u16_11bits_to_utf8( const __m128i utf8_unpacked = _mm_blendv_epi8(t4, v_u16, one_byte_bytemask); // 3. prepare bitmask for 8-bit lookup - // one_byte_bitmask = hhggffeeddccbbaa -- the bits are doubled (h - MSB, a - LSB) - const uint16_t m0 = one_byte_bitmask & 0x5555; // m0 = 0h0g0f0e0d0c0b0a - const uint16_t m1 = static_cast(m0 >> 7); // m1 = 00000000h0g0f0e0 - const uint8_t m2 = static_cast((m0 | m1) & 0xff); // m2 = hdgcfbea + // one_byte_bitmask = hhggffeeddccbbaa -- the bits are doubled (h - MSB, a + // - LSB) + const uint16_t m0 = one_byte_bitmask & 0x5555; // m0 = 0h0g0f0e0d0c0b0a + const uint16_t m1 = static_cast(m0 >> 7); // m1 = 00000000h0g0f0e0 + const uint8_t m2 = static_cast((m0 | m1) & 0xff); // m2 = hdgcfbea // 4. pack the bytes - const uint8_t* row = &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[m2][0]; - const __m128i shuffle = _mm_loadu_si128((__m128i*)(row + 1)); + const uint8_t *row = + &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[m2][0]; + const __m128i shuffle = _mm_loadu_si128((__m128i *)(row + 1)); const __m128i utf8_packed = _mm_shuffle_epi8(utf8_unpacked, shuffle); // 5. store bytes - _mm_storeu_si128((__m128i*)utf8_output, utf8_packed); + _mm_storeu_si128((__m128i *)utf8_output, utf8_packed); // 6. adjust pointers utf8_output += row[0]; } -inline void write_v_u16_11bits_to_utf8( - const __m128i v_u16, - char*& utf8_output, - const __m128i v_0000, - const __m128i v_ff80 -) { +inline void write_v_u16_11bits_to_utf8(const __m128i v_u16, char *&utf8_output, + const __m128i v_0000, + const __m128i v_ff80) { // no bits set above 7th bit - const __m128i one_byte_bytemask = _mm_cmpeq_epi16(_mm_and_si128(v_u16, v_ff80), v_0000); - const uint16_t one_byte_bitmask = static_cast(_mm_movemask_epi8(one_byte_bytemask)); + const __m128i one_byte_bytemask = + _mm_cmpeq_epi16(_mm_and_si128(v_u16, v_ff80), v_0000); + const uint16_t one_byte_bitmask = + static_cast(_mm_movemask_epi8(one_byte_bytemask)); - write_v_u16_11bits_to_utf8( - v_u16, utf8_output, one_byte_bytemask, one_byte_bitmask); + write_v_u16_11bits_to_utf8(v_u16, utf8_output, one_byte_bytemask, + one_byte_bitmask); } /* end file src/westmere/internal/write_v_u16_11bits_to_utf8.cpp */ @@ -33078,241 +34941,258 @@ inline void write_v_u16_11bits_to_utf8( 0 0 1 0 1 0 0 0 b = a << 1 1 1 1 1 1 1 1 0 c = V | a | b ^ - the last bit can be zero, we just consume 7 code units - and recheck this word in the next iteration + the last bit can be zero, we just consume 7 + code units and recheck this word in the next iteration */ /* Returns: - - pointer to the last unprocessed character (a scalar fallback should check the rest); + - pointer to the last unprocessed character (a scalar fallback should check + the rest); - nullptr if an error was detected. */ template -const char16_t* sse_validate_utf16(const char16_t* input, size_t size) { - const char16_t* end = input + size; - - const auto v_d8 = simd8::splat(0xd8); - const auto v_f8 = simd8::splat(0xf8); - const auto v_fc = simd8::splat(0xfc); - const auto v_dc = simd8::splat(0xdc); - - while (input + simd16::SIZE * 2 < end) { - // 0. Load data: since the validation takes into account only higher - // byte of each word, we compress the two vectors into one which - // consists only the higher bytes. - auto in0 = simd16(input); - auto in1 = simd16(input + simd16::SIZE / sizeof(char16_t)); - if (big_endian) { - in0 = in0.swap_bytes(); - in1 = in1.swap_bytes(); - } +const char16_t *sse_validate_utf16(const char16_t *input, size_t size) { + const char16_t *end = input + size; + + const auto v_d8 = simd8::splat(0xd8); + const auto v_f8 = simd8::splat(0xf8); + const auto v_fc = simd8::splat(0xfc); + const auto v_dc = simd8::splat(0xdc); + + while (input + simd16::SIZE * 2 < end) { + // 0. Load data: since the validation takes into account only higher + // byte of each word, we compress the two vectors into one which + // consists only the higher bytes. + auto in0 = simd16(input); + auto in1 = + simd16(input + simd16::SIZE / sizeof(char16_t)); + if (big_endian) { + in0 = in0.swap_bytes(); + in1 = in1.swap_bytes(); + } - const auto t0 = in0.shr<8>(); - const auto t1 = in1.shr<8>(); + const auto t0 = in0.shr<8>(); + const auto t1 = in1.shr<8>(); - const auto in = simd16::pack(t0, t1); + const auto in = simd16::pack(t0, t1); - // 1. Check whether we have any 0xD800..DFFF word (0b1101'1xxx'yyyy'yyyy). - const auto surrogates_wordmask = (in & v_f8) == v_d8; - const uint16_t surrogates_bitmask = static_cast(surrogates_wordmask.to_bitmask()); - if (surrogates_bitmask == 0x0000) { - input += 16; - } else { - // 2. We have some surrogates that have to be distinguished: - // - low surrogates: 0b1101'10xx'yyyy'yyyy (0xD800..0xDBFF) - // - high surrogates: 0b1101'11xx'yyyy'yyyy (0xDC00..0xDFFF) - // - // Fact: high surrogate has 11th bit set (3rd bit in the higher word) - - // V - non-surrogate code units - // V = not surrogates_wordmask - const uint16_t V = static_cast(~surrogates_bitmask); - - // H - word-mask for high surrogates: the six highest bits are 0b1101'11 - const auto vH = (in & v_fc) == v_dc; - const uint16_t H = static_cast(vH.to_bitmask()); - - // L - word mask for low surrogates - // L = not H and surrogates_wordmask - const uint16_t L = static_cast(~H & surrogates_bitmask); - - const uint16_t a = static_cast(L & (H >> 1)); // A low surrogate must be followed by high one. - // (A low surrogate placed in the 7th register's word - // is an exception we handle.) - const uint16_t b = static_cast(a << 1); // Just mark that the opinput - startite fact is hold, - // thanks to that we have only two masks for valid case. - const uint16_t c = static_cast(V | a | b); // Combine all the masks into the final one. - - if (c == 0xffff) { - // The whole input register contains valid UTF-16, i.e., - // either single code units or proper surrogate pairs. - input += 16; - } else if (c == 0x7fff) { - // The 15 lower code units of the input register contains valid UTF-16. - // The 15th word may be either a low or high surrogate. It the next - // iteration we 1) check if the low surrogate is followed by a high - // one, 2) reject sole high surrogate. - input += 15; - } else { - return nullptr; - } - } + // 1. Check whether we have any 0xD800..DFFF word (0b1101'1xxx'yyyy'yyyy). + const auto surrogates_wordmask = (in & v_f8) == v_d8; + const uint16_t surrogates_bitmask = + static_cast(surrogates_wordmask.to_bitmask()); + if (surrogates_bitmask == 0x0000) { + input += 16; + } else { + // 2. We have some surrogates that have to be distinguished: + // - low surrogates: 0b1101'10xx'yyyy'yyyy (0xD800..0xDBFF) + // - high surrogates: 0b1101'11xx'yyyy'yyyy (0xDC00..0xDFFF) + // + // Fact: high surrogate has 11th bit set (3rd bit in the higher word) + + // V - non-surrogate code units + // V = not surrogates_wordmask + const uint16_t V = static_cast(~surrogates_bitmask); + + // H - word-mask for high surrogates: the six highest bits are 0b1101'11 + const auto vH = (in & v_fc) == v_dc; + const uint16_t H = static_cast(vH.to_bitmask()); + + // L - word mask for low surrogates + // L = not H and surrogates_wordmask + const uint16_t L = static_cast(~H & surrogates_bitmask); + + const uint16_t a = static_cast( + L & (H >> 1)); // A low surrogate must be followed by high one. + // (A low surrogate placed in the 7th register's word + // is an exception we handle.) + const uint16_t b = static_cast( + a << 1); // Just mark that the opinput - startite fact is hold, + // thanks to that we have only two masks for valid case. + const uint16_t c = static_cast( + V | a | b); // Combine all the masks into the final one. + + if (c == 0xffff) { + // The whole input register contains valid UTF-16, i.e., + // either single code units or proper surrogate pairs. + input += 16; + } else if (c == 0x7fff) { + // The 15 lower code units of the input register contains valid UTF-16. + // The 15th word may be either a low or high surrogate. It the next + // iteration we 1) check if the low surrogate is followed by a high + // one, 2) reject sole high surrogate. + input += 15; + } else { + return nullptr; + } } + } - return input; + return input; } - template -const result sse_validate_utf16_with_errors(const char16_t* input, size_t size) { - if (simdutf_unlikely(size == 0)) { - return result(error_code::SUCCESS, 0); - } - const char16_t* start = input; - const char16_t* end = input + size; +const result sse_validate_utf16_with_errors(const char16_t *input, + size_t size) { + if (simdutf_unlikely(size == 0)) { + return result(error_code::SUCCESS, 0); + } + const char16_t *start = input; + const char16_t *end = input + size; - const auto v_d8 = simd8::splat(0xd8); - const auto v_f8 = simd8::splat(0xf8); - const auto v_fc = simd8::splat(0xfc); - const auto v_dc = simd8::splat(0xdc); + const auto v_d8 = simd8::splat(0xd8); + const auto v_f8 = simd8::splat(0xf8); + const auto v_fc = simd8::splat(0xfc); + const auto v_dc = simd8::splat(0xdc); - while (input + simd16::SIZE * 2 < end) { - // 0. Load data: since the validation takes into account only higher - // byte of each word, we compress the two vectors into one which - // consists only the higher bytes. - auto in0 = simd16(input); - auto in1 = simd16(input + simd16::SIZE / sizeof(char16_t)); + while (input + simd16::SIZE * 2 < end) { + // 0. Load data: since the validation takes into account only higher + // byte of each word, we compress the two vectors into one which + // consists only the higher bytes. + auto in0 = simd16(input); + auto in1 = + simd16(input + simd16::SIZE / sizeof(char16_t)); - if (big_endian) { - in0 = in0.swap_bytes(); - in1 = in1.swap_bytes(); - } + if (big_endian) { + in0 = in0.swap_bytes(); + in1 = in1.swap_bytes(); + } - const auto t0 = in0.shr<8>(); - const auto t1 = in1.shr<8>(); + const auto t0 = in0.shr<8>(); + const auto t1 = in1.shr<8>(); - const auto in = simd16::pack(t0, t1); + const auto in = simd16::pack(t0, t1); - // 1. Check whether we have any 0xD800..DFFF word (0b1101'1xxx'yyyy'yyyy). - const auto surrogates_wordmask = (in & v_f8) == v_d8; - const uint16_t surrogates_bitmask = static_cast(surrogates_wordmask.to_bitmask()); - if (surrogates_bitmask == 0x0000) { - input += 16; - } else { - // 2. We have some surrogates that have to be distinguished: - // - low surrogates: 0b1101'10xx'yyyy'yyyy (0xD800..0xDBFF) - // - high surrogates: 0b1101'11xx'yyyy'yyyy (0xDC00..0xDFFF) - // - // Fact: high surrogate has 11th bit set (3rd bit in the higher word) - - // V - non-surrogate code units - // V = not surrogates_wordmask - const uint16_t V = static_cast(~surrogates_bitmask); - - // H - word-mask for high surrogates: the six highest bits are 0b1101'11 - const auto vH = (in & v_fc) == v_dc; - const uint16_t H = static_cast(vH.to_bitmask()); - - // L - word mask for low surrogates - // L = not H and surrogates_wordmask - const uint16_t L = static_cast(~H & surrogates_bitmask); - - const uint16_t a = static_cast(L & (H >> 1)); // A low surrogate must be followed by high one. - // (A low surrogate placed in the 7th register's word - // is an exception we handle.) - const uint16_t b = static_cast(a << 1); // Just mark that the opinput - startite fact is hold, - // thanks to that we have only two masks for valid case. - const uint16_t c = static_cast(V | a | b); // Combine all the masks into the final one. - - if (c == 0xffff) { - // The whole input register contains valid UTF-16, i.e., - // either single code units or proper surrogate pairs. - input += 16; - } else if (c == 0x7fff) { - // The 15 lower code units of the input register contains valid UTF-16. - // The 15th word may be either a low or high surrogate. It the next - // iteration we 1) check if the low surrogate is followed by a high - // one, 2) reject sole high surrogate. - input += 15; - } else { - return result(error_code::SURROGATE, input - start); - } - } + // 1. Check whether we have any 0xD800..DFFF word (0b1101'1xxx'yyyy'yyyy). + const auto surrogates_wordmask = (in & v_f8) == v_d8; + const uint16_t surrogates_bitmask = + static_cast(surrogates_wordmask.to_bitmask()); + if (surrogates_bitmask == 0x0000) { + input += 16; + } else { + // 2. We have some surrogates that have to be distinguished: + // - low surrogates: 0b1101'10xx'yyyy'yyyy (0xD800..0xDBFF) + // - high surrogates: 0b1101'11xx'yyyy'yyyy (0xDC00..0xDFFF) + // + // Fact: high surrogate has 11th bit set (3rd bit in the higher word) + + // V - non-surrogate code units + // V = not surrogates_wordmask + const uint16_t V = static_cast(~surrogates_bitmask); + + // H - word-mask for high surrogates: the six highest bits are 0b1101'11 + const auto vH = (in & v_fc) == v_dc; + const uint16_t H = static_cast(vH.to_bitmask()); + + // L - word mask for low surrogates + // L = not H and surrogates_wordmask + const uint16_t L = static_cast(~H & surrogates_bitmask); + + const uint16_t a = static_cast( + L & (H >> 1)); // A low surrogate must be followed by high one. + // (A low surrogate placed in the 7th register's word + // is an exception we handle.) + const uint16_t b = static_cast( + a << 1); // Just mark that the opinput - startite fact is hold, + // thanks to that we have only two masks for valid case. + const uint16_t c = static_cast( + V | a | b); // Combine all the masks into the final one. + + if (c == 0xffff) { + // The whole input register contains valid UTF-16, i.e., + // either single code units or proper surrogate pairs. + input += 16; + } else if (c == 0x7fff) { + // The 15 lower code units of the input register contains valid UTF-16. + // The 15th word may be either a low or high surrogate. It the next + // iteration we 1) check if the low surrogate is followed by a high + // one, 2) reject sole high surrogate. + input += 15; + } else { + return result(error_code::SURROGATE, input - start); + } } + } - return result(error_code::SUCCESS, input - start); + return result(error_code::SUCCESS, input - start); } /* end file src/westmere/sse_validate_utf16.cpp */ /* begin file src/westmere/sse_validate_utf32le.cpp */ /* Returns: - - pointer to the last unprocessed character (a scalar fallback should check the rest); + - pointer to the last unprocessed character (a scalar fallback should check + the rest); - nullptr if an error was detected. */ -const char32_t* sse_validate_utf32le(const char32_t* input, size_t size) { - const char32_t* end = input + size; - - const __m128i standardmax = _mm_set1_epi32(0x10ffff); - const __m128i offset = _mm_set1_epi32(0xffff2000); - const __m128i standardoffsetmax = _mm_set1_epi32(0xfffff7ff); - __m128i currentmax = _mm_setzero_si128(); - __m128i currentoffsetmax = _mm_setzero_si128(); - - while (input + 4 < end) { - const __m128i in = _mm_loadu_si128((__m128i *)input); - currentmax = _mm_max_epu32(in,currentmax); - currentoffsetmax = _mm_max_epu32(_mm_add_epi32(in, offset), currentoffsetmax); - input += 4; - } - __m128i is_zero = _mm_xor_si128(_mm_max_epu32(currentmax, standardmax), standardmax); - if(_mm_test_all_zeros(is_zero, is_zero) == 0) { - return nullptr; - } +const char32_t *sse_validate_utf32le(const char32_t *input, size_t size) { + const char32_t *end = input + size; - is_zero = _mm_xor_si128(_mm_max_epu32(currentoffsetmax, standardoffsetmax), standardoffsetmax); - if(_mm_test_all_zeros(is_zero, is_zero) == 0) { - return nullptr; - } + const __m128i standardmax = _mm_set1_epi32(0x10ffff); + const __m128i offset = _mm_set1_epi32(0xffff2000); + const __m128i standardoffsetmax = _mm_set1_epi32(0xfffff7ff); + __m128i currentmax = _mm_setzero_si128(); + __m128i currentoffsetmax = _mm_setzero_si128(); - return input; -} + while (input + 4 < end) { + const __m128i in = _mm_loadu_si128((__m128i *)input); + currentmax = _mm_max_epu32(in, currentmax); + currentoffsetmax = + _mm_max_epu32(_mm_add_epi32(in, offset), currentoffsetmax); + input += 4; + } + __m128i is_zero = + _mm_xor_si128(_mm_max_epu32(currentmax, standardmax), standardmax); + if (_mm_test_all_zeros(is_zero, is_zero) == 0) { + return nullptr; + } + is_zero = _mm_xor_si128(_mm_max_epu32(currentoffsetmax, standardoffsetmax), + standardoffsetmax); + if (_mm_test_all_zeros(is_zero, is_zero) == 0) { + return nullptr; + } -const result sse_validate_utf32le_with_errors(const char32_t* input, size_t size) { - const char32_t* start = input; - const char32_t* end = input + size; + return input; +} - const __m128i standardmax = _mm_set1_epi32(0x10ffff); - const __m128i offset = _mm_set1_epi32(0xffff2000); - const __m128i standardoffsetmax = _mm_set1_epi32(0xfffff7ff); - __m128i currentmax = _mm_setzero_si128(); - __m128i currentoffsetmax = _mm_setzero_si128(); +const result sse_validate_utf32le_with_errors(const char32_t *input, + size_t size) { + const char32_t *start = input; + const char32_t *end = input + size; - while (input + 4 < end) { - const __m128i in = _mm_loadu_si128((__m128i *)input); - currentmax = _mm_max_epu32(in,currentmax); - currentoffsetmax = _mm_max_epu32(_mm_add_epi32(in, offset), currentoffsetmax); + const __m128i standardmax = _mm_set1_epi32(0x10ffff); + const __m128i offset = _mm_set1_epi32(0xffff2000); + const __m128i standardoffsetmax = _mm_set1_epi32(0xfffff7ff); + __m128i currentmax = _mm_setzero_si128(); + __m128i currentoffsetmax = _mm_setzero_si128(); - __m128i is_zero = _mm_xor_si128(_mm_max_epu32(currentmax, standardmax), standardmax); - if(_mm_test_all_zeros(is_zero, is_zero) == 0) { - return result(error_code::TOO_LARGE, input - start); - } + while (input + 4 < end) { + const __m128i in = _mm_loadu_si128((__m128i *)input); + currentmax = _mm_max_epu32(in, currentmax); + currentoffsetmax = + _mm_max_epu32(_mm_add_epi32(in, offset), currentoffsetmax); - is_zero = _mm_xor_si128(_mm_max_epu32(currentoffsetmax, standardoffsetmax), standardoffsetmax); - if(_mm_test_all_zeros(is_zero, is_zero) == 0) { - return result(error_code::SURROGATE, input - start); - } - input += 4; + __m128i is_zero = + _mm_xor_si128(_mm_max_epu32(currentmax, standardmax), standardmax); + if (_mm_test_all_zeros(is_zero, is_zero) == 0) { + return result(error_code::TOO_LARGE, input - start); + } + + is_zero = _mm_xor_si128(_mm_max_epu32(currentoffsetmax, standardoffsetmax), + standardoffsetmax); + if (_mm_test_all_zeros(is_zero, is_zero) == 0) { + return result(error_code::SURROGATE, input - start); } + input += 4; + } - return result(error_code::SUCCESS, input - start); + return result(error_code::SUCCESS, input - start); } /* end file src/westmere/sse_validate_utf32le.cpp */ /* begin file src/westmere/sse_convert_latin1_to_utf8.cpp */ -std::pair sse_convert_latin1_to_utf8( - const char* latin_input, - const size_t latin_input_length, - char* utf8_output) { - const char* end = latin_input + latin_input_length; +std::pair +sse_convert_latin1_to_utf8(const char *latin_input, + const size_t latin_input_length, char *utf8_output) { + const char *end = latin_input + latin_input_length; const __m128i v_0000 = _mm_setzero_si128(); // 0b1000_0000 @@ -33320,70 +35200,60 @@ std::pair sse_convert_latin1_to_utf8( // 0b1111_1111_1000_0000 const __m128i v_ff80 = _mm_set1_epi16((uint16_t)0xff80); - const __m128i latin_1_half_into_u16_byte_mask = _mm_setr_epi8( - 0, '\x80', - 1, '\x80', - 2, '\x80', - 3, '\x80', - 4, '\x80', - 5, '\x80', - 6, '\x80', - 7, '\x80' - ); - - const __m128i latin_2_half_into_u16_byte_mask = _mm_setr_epi8( - 8, '\x80', - 9, '\x80', - 10, '\x80', - 11, '\x80', - 12, '\x80', - 13, '\x80', - 14, '\x80', - 15, '\x80' - ); + const __m128i latin_1_half_into_u16_byte_mask = + _mm_setr_epi8(0, '\x80', 1, '\x80', 2, '\x80', 3, '\x80', 4, '\x80', 5, + '\x80', 6, '\x80', 7, '\x80'); + + const __m128i latin_2_half_into_u16_byte_mask = + _mm_setr_epi8(8, '\x80', 9, '\x80', 10, '\x80', 11, '\x80', 12, '\x80', + 13, '\x80', 14, '\x80', 15, '\x80'); // each latin1 takes 1-2 utf8 bytes - // slow path writes useful 8-15 bytes twice (eagerly writes 16 bytes and then adjust the pointer) - // so the last write can exceed the utf8_output size by 8-1 bytes - // by reserving 8 extra input bytes, we expect the output to have 8-16 bytes free + // slow path writes useful 8-15 bytes twice (eagerly writes 16 bytes and then + // adjust the pointer) so the last write can exceed the utf8_output size by + // 8-1 bytes by reserving 8 extra input bytes, we expect the output to have + // 8-16 bytes free while (end - latin_input >= 16 + 8) { // Load 16 Latin1 characters (16 bytes) into a 128-bit register - __m128i v_latin = _mm_loadu_si128((__m128i*)latin_input); - + __m128i v_latin = _mm_loadu_si128((__m128i *)latin_input); - if (_mm_testz_si128(v_latin, v_80)) {// ASCII fast path!!!! - _mm_storeu_si128((__m128i*)utf8_output, v_latin); + if (_mm_testz_si128(v_latin, v_80)) { // ASCII fast path!!!! + _mm_storeu_si128((__m128i *)utf8_output, v_latin); latin_input += 16; utf8_output += 16; continue; } - // assuming a/b are bytes and A/B are uint16 of the same value // aaaa_aaaa_bbbb_bbbb -> AAAA_AAAA - __m128i v_u16_latin_1_half = _mm_shuffle_epi8(v_latin, latin_1_half_into_u16_byte_mask); + __m128i v_u16_latin_1_half = + _mm_shuffle_epi8(v_latin, latin_1_half_into_u16_byte_mask); // aaaa_aaaa_bbbb_bbbb -> BBBB_BBBB - __m128i v_u16_latin_2_half = _mm_shuffle_epi8(v_latin, latin_2_half_into_u16_byte_mask); - + __m128i v_u16_latin_2_half = + _mm_shuffle_epi8(v_latin, latin_2_half_into_u16_byte_mask); - internal::westmere::write_v_u16_11bits_to_utf8(v_u16_latin_1_half, utf8_output, v_0000, v_ff80); - internal::westmere::write_v_u16_11bits_to_utf8(v_u16_latin_2_half, utf8_output, v_0000, v_ff80); + internal::westmere::write_v_u16_11bits_to_utf8(v_u16_latin_1_half, + utf8_output, v_0000, v_ff80); + internal::westmere::write_v_u16_11bits_to_utf8(v_u16_latin_2_half, + utf8_output, v_0000, v_ff80); latin_input += 16; } if (end - latin_input >= 16) { // Load 16 Latin1 characters (16 bytes) into a 128-bit register - __m128i v_latin = _mm_loadu_si128((__m128i*)latin_input); + __m128i v_latin = _mm_loadu_si128((__m128i *)latin_input); - if (_mm_testz_si128(v_latin, v_80)) {// ASCII fast path!!!! - _mm_storeu_si128((__m128i*)utf8_output, v_latin); + if (_mm_testz_si128(v_latin, v_80)) { // ASCII fast path!!!! + _mm_storeu_si128((__m128i *)utf8_output, v_latin); latin_input += 16; utf8_output += 16; } else { // assuming a/b are bytes and A/B are uint16 of the same value // aaaa_aaaa_bbbb_bbbb -> AAAA_AAAA - __m128i v_u16_latin_1_half = _mm_shuffle_epi8(v_latin, latin_1_half_into_u16_byte_mask); - internal::westmere::write_v_u16_11bits_to_utf8(v_u16_latin_1_half, utf8_output, v_0000, v_ff80); + __m128i v_u16_latin_1_half = + _mm_shuffle_epi8(v_latin, latin_1_half_into_u16_byte_mask); + internal::westmere::write_v_u16_11bits_to_utf8( + v_u16_latin_1_half, utf8_output, v_0000, v_ff80); latin_input += 8; } } @@ -33393,115 +35263,125 @@ std::pair sse_convert_latin1_to_utf8( /* end file src/westmere/sse_convert_latin1_to_utf8.cpp */ /* begin file src/westmere/sse_convert_latin1_to_utf16.cpp */ template -std::pair sse_convert_latin1_to_utf16(const char *latin1_input, size_t len, - char16_t *utf16_output) { - size_t rounded_len = len & ~0xF; // Round down to nearest multiple of 16 - for (size_t i = 0; i < rounded_len; i += 16) { - // Load 16 Latin1 characters into a 128-bit register - __m128i in = _mm_loadu_si128(reinterpret_cast(&latin1_input[i])); - __m128i out1 = big_endian ? _mm_unpacklo_epi8(_mm_setzero_si128(), in) - : _mm_unpacklo_epi8(in, _mm_setzero_si128()); - __m128i out2 = big_endian ? _mm_unpackhi_epi8(_mm_setzero_si128(), in) - : _mm_unpackhi_epi8(in, _mm_setzero_si128()); - // Zero extend each Latin1 character to 16-bit integers and store the results back to memory - _mm_storeu_si128(reinterpret_cast<__m128i*>(&utf16_output[i]), out1); - _mm_storeu_si128(reinterpret_cast<__m128i*>(&utf16_output[i + 8]), out2); - } - // return pointers pointing to where we left off - return std::make_pair(latin1_input + rounded_len, utf16_output + rounded_len); +std::pair +sse_convert_latin1_to_utf16(const char *latin1_input, size_t len, + char16_t *utf16_output) { + size_t rounded_len = len & ~0xF; // Round down to nearest multiple of 16 + for (size_t i = 0; i < rounded_len; i += 16) { + // Load 16 Latin1 characters into a 128-bit register + __m128i in = + _mm_loadu_si128(reinterpret_cast(&latin1_input[i])); + __m128i out1 = big_endian ? _mm_unpacklo_epi8(_mm_setzero_si128(), in) + : _mm_unpacklo_epi8(in, _mm_setzero_si128()); + __m128i out2 = big_endian ? _mm_unpackhi_epi8(_mm_setzero_si128(), in) + : _mm_unpackhi_epi8(in, _mm_setzero_si128()); + // Zero extend each Latin1 character to 16-bit integers and store the + // results back to memory + _mm_storeu_si128(reinterpret_cast<__m128i *>(&utf16_output[i]), out1); + _mm_storeu_si128(reinterpret_cast<__m128i *>(&utf16_output[i + 8]), out2); + } + // return pointers pointing to where we left off + return std::make_pair(latin1_input + rounded_len, utf16_output + rounded_len); } /* end file src/westmere/sse_convert_latin1_to_utf16.cpp */ /* begin file src/westmere/sse_convert_latin1_to_utf32.cpp */ -std::pair sse_convert_latin1_to_utf32(const char* buf, size_t len, char32_t* utf32_output) { - const char* end = buf + len; - - while (end - buf >= 16) { - // Load 16 Latin1 characters (16 bytes) into a 128-bit register - __m128i in = _mm_loadu_si128((__m128i*)buf); - - // Shift input to process next 4 bytes - __m128i in_shifted1 = _mm_srli_si128(in, 4); - __m128i in_shifted2 = _mm_srli_si128(in, 8); - __m128i in_shifted3 = _mm_srli_si128(in, 12); - - // expand 8-bit to 32-bit unit - __m128i out1 = _mm_cvtepu8_epi32(in); - __m128i out2 = _mm_cvtepu8_epi32(in_shifted1); - __m128i out3 = _mm_cvtepu8_epi32(in_shifted2); - __m128i out4 = _mm_cvtepu8_epi32(in_shifted3); - - _mm_storeu_si128((__m128i*)utf32_output, out1); - _mm_storeu_si128((__m128i*)(utf32_output + 4), out2); - _mm_storeu_si128((__m128i*)(utf32_output + 8), out3); - _mm_storeu_si128((__m128i*)(utf32_output + 12), out4); - - utf32_output += 16; - buf += 16; - } +std::pair +sse_convert_latin1_to_utf32(const char *buf, size_t len, + char32_t *utf32_output) { + const char *end = buf + len; - return std::make_pair(buf, utf32_output); -} + while (end - buf >= 16) { + // Load 16 Latin1 characters (16 bytes) into a 128-bit register + __m128i in = _mm_loadu_si128((__m128i *)buf); -/* end file src/westmere/sse_convert_latin1_to_utf32.cpp */ + // Shift input to process next 4 bytes + __m128i in_shifted1 = _mm_srli_si128(in, 4); + __m128i in_shifted2 = _mm_srli_si128(in, 8); + __m128i in_shifted3 = _mm_srli_si128(in, 12); + + // expand 8-bit to 32-bit unit + __m128i out1 = _mm_cvtepu8_epi32(in); + __m128i out2 = _mm_cvtepu8_epi32(in_shifted1); + __m128i out3 = _mm_cvtepu8_epi32(in_shifted2); + __m128i out4 = _mm_cvtepu8_epi32(in_shifted3); + + _mm_storeu_si128((__m128i *)utf32_output, out1); + _mm_storeu_si128((__m128i *)(utf32_output + 4), out2); + _mm_storeu_si128((__m128i *)(utf32_output + 8), out3); + _mm_storeu_si128((__m128i *)(utf32_output + 12), out4); + + utf32_output += 16; + buf += 16; + } + return std::make_pair(buf, utf32_output); +} +/* end file src/westmere/sse_convert_latin1_to_utf32.cpp */ /* begin file src/westmere/sse_convert_utf8_to_utf16.cpp */ // depends on "tables/utf8_to_utf16_tables.h" - // Convert up to 12 bytes from utf8 to utf16 using a mask indicating the // end of the code points. Only the least significant 12 bits of the mask // are accessed. // It returns how many bytes were consumed (up to 12). template size_t convert_masked_utf8_to_utf16(const char *input, - uint64_t utf8_end_of_code_point_mask, - char16_t *&utf16_output) { + uint64_t utf8_end_of_code_point_mask, + char16_t *&utf16_output) { // we use an approach where we try to process up to 12 input bytes. // Why 12 input bytes and not 16? Because we are concerned with the size of // the lookup tables. Also 12 is nicely divisible by two and three. // // - // Optimization note: our main path below is load-latency dependent. Thus it is maybe - // beneficial to have fast paths that depend on branch prediction but have less latency. - // This results in more instructions but, potentially, also higher speeds. + // Optimization note: our main path below is load-latency dependent. Thus it + // is maybe beneficial to have fast paths that depend on branch prediction but + // have less latency. This results in more instructions but, potentially, also + // higher speeds. // // We first try a few fast paths. - const __m128i swap = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + const __m128i swap = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); const __m128i in = _mm_loadu_si128((__m128i *)input); const uint16_t input_utf8_end_of_code_point_mask = utf8_end_of_code_point_mask & 0xfff; - if(utf8_end_of_code_point_mask == 0xfff) { + if (utf8_end_of_code_point_mask == 0xfff) { // We process the data in chunks of 12 bytes. // Note: using 16 bytes is unsafe, see issue_ossfuzz_71218 __m128i ascii_first = _mm_cvtepu8_epi16(in); - __m128i ascii_second = _mm_cvtepu8_epi16(_mm_srli_si128(in,8)); + __m128i ascii_second = _mm_cvtepu8_epi16(_mm_srli_si128(in, 8)); if (big_endian) { ascii_first = _mm_shuffle_epi8(ascii_first, swap); ascii_second = _mm_shuffle_epi8(ascii_second, swap); } _mm_storeu_si128(reinterpret_cast<__m128i *>(utf16_output), ascii_first); - _mm_storeu_si128(reinterpret_cast<__m128i *>(utf16_output + 8), ascii_second); + _mm_storeu_si128(reinterpret_cast<__m128i *>(utf16_output + 8), + ascii_second); utf16_output += 12; // We wrote 12 16-bit characters. - return 12; // We consumed 12 bytes. + return 12; // We consumed 12 bytes. } - if(((utf8_end_of_code_point_mask & 0xFFFF) == 0xaaaa)) { - // We want to take 8 2-byte UTF-8 code units and turn them into 8 2-byte UTF-16 code units. - // There is probably a more efficient sequence, but the following might do. - const __m128i sh = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + if (((utf8_end_of_code_point_mask & 0xFFFF) == 0xaaaa)) { + // We want to take 8 2-byte UTF-8 code units and turn them into 8 2-byte + // UTF-16 code units. There is probably a more efficient sequence, but the + // following might do. + const __m128i sh = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); const __m128i perm = _mm_shuffle_epi8(in, sh); const __m128i ascii = _mm_and_si128(perm, _mm_set1_epi16(0x7f)); const __m128i highbyte = _mm_and_si128(perm, _mm_set1_epi16(0x1f00)); __m128i composed = _mm_or_si128(ascii, _mm_srli_epi16(highbyte, 2)); - if (big_endian) composed = _mm_shuffle_epi8(composed, swap); + if (big_endian) + composed = _mm_shuffle_epi8(composed, swap); _mm_storeu_si128((__m128i *)utf16_output, composed); utf16_output += 8; // We wrote 16 bytes, 8 code points. return 16; } - if(input_utf8_end_of_code_point_mask == 0x924) { - // We want to take 4 3-byte UTF-8 code units and turn them into 4 2-byte UTF-16 code units. - // There is probably a more efficient sequence, but the following might do. - const __m128i sh = _mm_setr_epi8(2, 1, 0, -1, 5, 4, 3, -1, 8, 7, 6, -1, 11, 10, 9, -1); + if (input_utf8_end_of_code_point_mask == 0x924) { + // We want to take 4 3-byte UTF-8 code units and turn them into 4 2-byte + // UTF-16 code units. There is probably a more efficient sequence, but the + // following might do. + const __m128i sh = + _mm_setr_epi8(2, 1, 0, -1, 5, 4, 3, -1, 8, 7, 6, -1, 11, 10, 9, -1); const __m128i perm = _mm_shuffle_epi8(in, sh); const __m128i ascii = _mm_and_si128(perm, _mm_set1_epi32(0x7f)); // 7 or 6 bits @@ -33514,7 +35394,8 @@ size_t convert_masked_utf8_to_utf16(const char *input, const __m128i composed = _mm_or_si128(_mm_or_si128(ascii, middlebyte_shifted), highbyte_shifted); __m128i composed_repacked = _mm_packus_epi32(composed, composed); - if (big_endian) composed_repacked = _mm_shuffle_epi8(composed_repacked, swap); + if (big_endian) + composed_repacked = _mm_shuffle_epi8(composed_repacked, swap); _mm_storeu_si128((__m128i *)utf16_output, composed_repacked); utf16_output += 4; return 12; @@ -33528,16 +35409,18 @@ size_t convert_masked_utf8_to_utf16(const char *input, if (idx < 64) { // SIX (6) input code-code units // this is a relatively easy scenario - // we process SIX (6) input code-code units. The max length in bytes of six code - // code units spanning between 1 and 2 bytes each is 12 bytes. On processors - // where pdep/pext is fast, we might be able to use a small lookup table. + // we process SIX (6) input code-code units. The max length in bytes of six + // code code units spanning between 1 and 2 bytes each is 12 bytes. On + // processors where pdep/pext is fast, we might be able to use a small + // lookup table. const __m128i sh = _mm_loadu_si128((const __m128i *)tables::utf8_to_utf16::shufutf8[idx]); const __m128i perm = _mm_shuffle_epi8(in, sh); const __m128i ascii = _mm_and_si128(perm, _mm_set1_epi16(0x7f)); const __m128i highbyte = _mm_and_si128(perm, _mm_set1_epi16(0x1f00)); __m128i composed = _mm_or_si128(ascii, _mm_srli_epi16(highbyte, 2)); - if (big_endian) composed = _mm_shuffle_epi8(composed, swap); + if (big_endian) + composed = _mm_shuffle_epi8(composed, swap); _mm_storeu_si128((__m128i *)utf16_output, composed); utf16_output += 6; // We wrote 12 bytes, 6 code points. } else if (idx < 145) { @@ -33555,19 +35438,21 @@ size_t convert_masked_utf8_to_utf16(const char *input, const __m128i highbyte_shifted = _mm_srli_epi32(highbyte, 4); const __m128i composed = _mm_or_si128(_mm_or_si128(ascii, middlebyte_shifted), highbyte_shifted); - __m128i composed_repacked = _mm_packus_epi32(composed, composed); - if (big_endian) composed_repacked = _mm_shuffle_epi8(composed_repacked, swap); + __m128i composed_repacked = _mm_packus_epi32(composed, composed); + if (big_endian) + composed_repacked = _mm_shuffle_epi8(composed_repacked, swap); _mm_storeu_si128((__m128i *)utf16_output, composed_repacked); utf16_output += 4; } else if (idx < 209) { // TWO (2) input code-code units ////////////// - // There might be garbage inputs where a leading byte mascarades as a four-byte - // leading byte (by being followed by 3 continuation byte), but is not greater than - // 0xf0. This could trigger a buffer overflow if we only counted leading - // bytes of the form 0xf0 as generating surrogate pairs, without further UTF-8 validation. - // Thus we must be careful to ensure that only leading bytes at least as large as 0xf0 generate surrogate pairs. - // We do as at the cost of an extra mask. + // There might be garbage inputs where a leading byte mascarades as a + // four-byte leading byte (by being followed by 3 continuation byte), but is + // not greater than 0xf0. This could trigger a buffer overflow if we only + // counted leading bytes of the form 0xf0 as generating surrogate pairs, + // without further UTF-8 validation. Thus we must be careful to ensure that + // only leading bytes at least as large as 0xf0 generate surrogate pairs. We + // do as at the cost of an extra mask. ///////////// const __m128i sh = _mm_loadu_si128((const __m128i *)tables::utf8_to_utf16::shufutf8[idx]); @@ -33581,8 +35466,8 @@ size_t convert_masked_utf8_to_utf16(const char *input, _mm_srli_epi32(_mm_and_si128(perm, _mm_set1_epi32(0x400000)), 1); middlehighbyte = _mm_xor_si128(correct, middlehighbyte); const __m128i middlehighbyte_shifted = _mm_srli_epi32(middlehighbyte, 4); - // We deliberately carry the leading four bits in highbyte if they are present, - // we remove them later when computing hightenbits. + // We deliberately carry the leading four bits in highbyte if they are + // present, we remove them later when computing hightenbits. const __m128i highbyte = _mm_and_si128(perm, _mm_set1_epi32(0xff000000)); const __m128i highbyte_shifted = _mm_srli_epi32(highbyte, 6); // When we need to generate a surrogate pair (leading byte > 0xF0), then @@ -33597,30 +35482,32 @@ size_t convert_masked_utf8_to_utf16(const char *input, const __m128i lowtenbits = _mm_and_si128(composedminus, _mm_set1_epi32(0x3ff)); // Notice the 0x3ff mask: - const __m128i hightenbits = _mm_and_si128(_mm_srli_epi32(composedminus, 10), _mm_set1_epi32(0x3ff)); + const __m128i hightenbits = + _mm_and_si128(_mm_srli_epi32(composedminus, 10), _mm_set1_epi32(0x3ff)); const __m128i lowtenbitsadd = _mm_add_epi32(lowtenbits, _mm_set1_epi32(0xDC00)); const __m128i hightenbitsadd = _mm_add_epi32(hightenbits, _mm_set1_epi32(0xD800)); const __m128i lowtenbitsaddshifted = _mm_slli_epi32(lowtenbitsadd, 16); - __m128i surrogates = - _mm_or_si128(hightenbitsadd, lowtenbitsaddshifted); + __m128i surrogates = _mm_or_si128(hightenbitsadd, lowtenbitsaddshifted); uint32_t basic_buffer[4]; uint32_t basic_buffer_swap[4]; if (big_endian) { - _mm_storeu_si128((__m128i *)basic_buffer_swap, _mm_shuffle_epi8(composed, swap)); + _mm_storeu_si128((__m128i *)basic_buffer_swap, + _mm_shuffle_epi8(composed, swap)); surrogates = _mm_shuffle_epi8(surrogates, swap); } _mm_storeu_si128((__m128i *)basic_buffer, composed); uint32_t surrogate_buffer[4]; _mm_storeu_si128((__m128i *)surrogate_buffer, surrogates); for (size_t i = 0; i < 3; i++) { - if(basic_buffer[i] > 0x3c00000) { + if (basic_buffer[i] > 0x3c00000) { utf16_output[0] = uint16_t(surrogate_buffer[i] & 0xffff); utf16_output[1] = uint16_t(surrogate_buffer[i] >> 16); utf16_output += 2; } else { - utf16_output[0] = big_endian ? uint16_t(basic_buffer_swap[i]) : uint16_t(basic_buffer[i]); + utf16_output[0] = big_endian ? uint16_t(basic_buffer_swap[i]) + : uint16_t(basic_buffer[i]); utf16_output++; } } @@ -33633,53 +35520,63 @@ size_t convert_masked_utf8_to_utf16(const char *input, /* begin file src/westmere/sse_convert_utf8_to_utf32.cpp */ // depends on "tables/utf8_to_utf16_tables.h" - // Convert up to 12 bytes from utf8 to utf32 using a mask indicating the // end of the code points. Only the least significant 12 bits of the mask // are accessed. // It returns how many bytes were consumed (up to 12). size_t convert_masked_utf8_to_utf32(const char *input, - uint64_t utf8_end_of_code_point_mask, - char32_t *&utf32_output) { + uint64_t utf8_end_of_code_point_mask, + char32_t *&utf32_output) { // we use an approach where we try to process up to 12 input bytes. // Why 12 input bytes and not 16? Because we are concerned with the size of // the lookup tables. Also 12 is nicely divisible by two and three. // // - // Optimization note: our main path below is load-latency dependent. Thus it is maybe - // beneficial to have fast paths that depend on branch prediction but have less latency. - // This results in more instructions but, potentially, also higher speeds. + // Optimization note: our main path below is load-latency dependent. Thus it + // is maybe beneficial to have fast paths that depend on branch prediction but + // have less latency. This results in more instructions but, potentially, also + // higher speeds. // // We first try a few fast paths. const __m128i in = _mm_loadu_si128((__m128i *)input); const uint16_t input_utf8_end_of_code_point_mask = utf8_end_of_code_point_mask & 0xfff; - if(utf8_end_of_code_point_mask == 0xfff) { + if (utf8_end_of_code_point_mask == 0xfff) { // We process the data in chunks of 12 bytes. - _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output), _mm_cvtepu8_epi32(in)); - _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output+4), _mm_cvtepu8_epi32(_mm_srli_si128(in,4))); - _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output+8), _mm_cvtepu8_epi32(_mm_srli_si128(in,8))); - _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output+12), _mm_cvtepu8_epi32(_mm_srli_si128(in,12))); + _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output), + _mm_cvtepu8_epi32(in)); + _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output + 4), + _mm_cvtepu8_epi32(_mm_srli_si128(in, 4))); + _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output + 8), + _mm_cvtepu8_epi32(_mm_srli_si128(in, 8))); + _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output + 12), + _mm_cvtepu8_epi32(_mm_srli_si128(in, 12))); utf32_output += 12; // We wrote 12 32-bit characters. - return 12; // We consumed 12 bytes. + return 12; // We consumed 12 bytes. } - if(((utf8_end_of_code_point_mask & 0xffff) == 0xaaaa)) { - // We want to take 8 2-byte UTF-8 code units and turn them into 8 4-byte UTF-32 code units. - // There is probably a more efficient sequence, but the following might do. - const __m128i sh = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + if (((utf8_end_of_code_point_mask & 0xffff) == 0xaaaa)) { + // We want to take 8 2-byte UTF-8 code units and turn them into 8 4-byte + // UTF-32 code units. There is probably a more efficient sequence, but the + // following might do. + const __m128i sh = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); const __m128i perm = _mm_shuffle_epi8(in, sh); const __m128i ascii = _mm_and_si128(perm, _mm_set1_epi16(0x7f)); const __m128i highbyte = _mm_and_si128(perm, _mm_set1_epi16(0x1f00)); const __m128i composed = _mm_or_si128(ascii, _mm_srli_epi16(highbyte, 2)); - _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output), _mm_cvtepu16_epi32(composed)); - _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output+4), _mm_cvtepu16_epi32(_mm_srli_si128(composed,8))); + _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output), + _mm_cvtepu16_epi32(composed)); + _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output + 4), + _mm_cvtepu16_epi32(_mm_srli_si128(composed, 8))); utf32_output += 8; // We wrote 32 bytes, 8 code points. return 16; } - if(input_utf8_end_of_code_point_mask == 0x924) { - // We want to take 4 3-byte UTF-8 code units and turn them into 4 4-byte UTF-32 code units. - // There is probably a more efficient sequence, but the following might do. - const __m128i sh = _mm_setr_epi8(2, 1, 0, -1, 5, 4, 3, -1, 8, 7, 6, -1, 11, 10, 9, -1); + if (input_utf8_end_of_code_point_mask == 0x924) { + // We want to take 4 3-byte UTF-8 code units and turn them into 4 4-byte + // UTF-32 code units. There is probably a more efficient sequence, but the + // following might do. + const __m128i sh = + _mm_setr_epi8(2, 1, 0, -1, 5, 4, 3, -1, 8, 7, 6, -1, 11, 10, 9, -1); const __m128i perm = _mm_shuffle_epi8(in, sh); const __m128i ascii = _mm_and_si128(perm, _mm_set1_epi32(0x7f)); // 7 or 6 bits @@ -33704,17 +35601,20 @@ size_t convert_masked_utf8_to_utf32(const char *input, if (idx < 64) { // SIX (6) input code-code units // this is a relatively easy scenario - // we process SIX (6) input code-code units. The max length in bytes of six code - // code units spanning between 1 and 2 bytes each is 12 bytes. On processors - // where pdep/pext is fast, we might be able to use a small lookup table. + // we process SIX (6) input code-code units. The max length in bytes of six + // code code units spanning between 1 and 2 bytes each is 12 bytes. On + // processors where pdep/pext is fast, we might be able to use a small + // lookup table. const __m128i sh = _mm_loadu_si128((const __m128i *)tables::utf8_to_utf16::shufutf8[idx]); const __m128i perm = _mm_shuffle_epi8(in, sh); const __m128i ascii = _mm_and_si128(perm, _mm_set1_epi16(0x7f)); const __m128i highbyte = _mm_and_si128(perm, _mm_set1_epi16(0x1f00)); const __m128i composed = _mm_or_si128(ascii, _mm_srli_epi16(highbyte, 2)); - _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output), _mm_cvtepu16_epi32(composed)); - _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output+4), _mm_cvtepu16_epi32(_mm_srli_si128(composed,8))); + _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output), + _mm_cvtepu16_epi32(composed)); + _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output + 4), + _mm_cvtepu16_epi32(_mm_srli_si128(composed, 8))); utf32_output += 6; // We wrote 12 bytes, 6 code points. } else if (idx < 145) { // FOUR (4) input code-code units @@ -33763,31 +35663,32 @@ size_t convert_masked_utf8_to_utf32(const char *input, /* begin file src/westmere/sse_convert_utf8_to_latin1.cpp */ // depends on "tables/utf8_to_utf16_tables.h" - // Convert up to 12 bytes from utf8 to latin1 using a mask indicating the // end of the code points. Only the least significant 12 bits of the mask // are accessed. // It returns how many bytes were consumed (up to 12). size_t convert_masked_utf8_to_latin1(const char *input, - uint64_t utf8_end_of_code_point_mask, - char *&latin1_output) { + uint64_t utf8_end_of_code_point_mask, + char *&latin1_output) { // we use an approach where we try to process up to 12 input bytes. // Why 12 input bytes and not 16? Because we are concerned with the size of // the lookup tables. Also 12 is nicely divisible by two and three. // // - // Optimization note: our main path below is load-latency dependent. Thus it is maybe - // beneficial to have fast paths that depend on branch prediction but have less latency. - // This results in more instructions but, potentially, also higher speeds. + // Optimization note: our main path below is load-latency dependent. Thus it + // is maybe beneficial to have fast paths that depend on branch prediction but + // have less latency. This results in more instructions but, potentially, also + // higher speeds. // const __m128i in = _mm_loadu_si128((__m128i *)input); const uint16_t input_utf8_end_of_code_point_mask = - utf8_end_of_code_point_mask & 0xfff; // we are only processing 12 bytes in case it is not all ASCII - if(utf8_end_of_code_point_mask == 0xfff) { + utf8_end_of_code_point_mask & + 0xfff; // we are only processing 12 bytes in case it is not all ASCII + if (utf8_end_of_code_point_mask == 0xfff) { // We process the data in chunks of 12 bytes. _mm_storeu_si128(reinterpret_cast<__m128i *>(latin1_output), in); latin1_output += 12; // We wrote 12 characters. - return 12; // We consumed 12 bytes. + return 12; // We consumed 12 bytes. } /// We do not have a fast path available, so we fallback. const uint8_t idx = @@ -33795,22 +35696,25 @@ size_t convert_masked_utf8_to_latin1(const char *input, const uint8_t consumed = tables::utf8_to_utf16::utf8bigindex[input_utf8_end_of_code_point_mask][1]; // this indicates an invalid input: - if(idx >= 64) { return consumed; } - // Here we should have (idx < 64), if not, there is a bug in the validation or elsewhere. - // SIX (6) input code-code units - // this is a relatively easy scenario - // we process SIX (6) input code-code units. The max length in bytes of six code - // code units spanning between 1 and 2 bytes each is 12 bytes. On processors - // where pdep/pext is fast, we might be able to use a small lookup table. + if (idx >= 64) { + return consumed; + } + // Here we should have (idx < 64), if not, there is a bug in the validation or + // elsewhere. SIX (6) input code-code units this is a relatively easy scenario + // we process SIX (6) input code-code units. The max length in bytes of six + // code code units spanning between 1 and 2 bytes each is 12 bytes. On + // processors where pdep/pext is fast, we might be able to use a small lookup + // table. const __m128i sh = - _mm_loadu_si128((const __m128i *)tables::utf8_to_utf16::shufutf8[idx]); + _mm_loadu_si128((const __m128i *)tables::utf8_to_utf16::shufutf8[idx]); const __m128i perm = _mm_shuffle_epi8(in, sh); const __m128i ascii = _mm_and_si128(perm, _mm_set1_epi16(0x7f)); const __m128i highbyte = _mm_and_si128(perm, _mm_set1_epi16(0x1f00)); __m128i composed = _mm_or_si128(ascii, _mm_srli_epi16(highbyte, 2)); - const __m128i latin1_packed = _mm_packus_epi16(composed,composed); + const __m128i latin1_packed = _mm_packus_epi16(composed, composed); // writing 8 bytes even though we only care about the first 6 bytes. - // performance note: it would be faster to use _mm_storeu_si128, we should investigate. + // performance note: it would be faster to use _mm_storeu_si128, we should + // investigate. _mm_storel_epi64((__m128i *)latin1_output, latin1_packed); latin1_output += 6; // We wrote 6 bytes. return consumed; @@ -33819,14 +35723,17 @@ size_t convert_masked_utf8_to_latin1(const char *input, /* begin file src/westmere/sse_convert_utf16_to_latin1.cpp */ template -std::pair sse_convert_utf16_to_latin1(const char16_t* buf, size_t len, char* latin1_output) { - const char16_t* end = buf + len; +std::pair +sse_convert_utf16_to_latin1(const char16_t *buf, size_t len, + char *latin1_output) { + const char16_t *end = buf + len; while (end - buf >= 8) { // Load 8 UTF-16 characters into 128-bit SSE register - __m128i in = _mm_loadu_si128(reinterpret_cast(buf)); + __m128i in = _mm_loadu_si128(reinterpret_cast(buf)); if (!match_system(big_endian)) { - const __m128i swap = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + const __m128i swap = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); in = _mm_shuffle_epi8(in, swap); } @@ -33834,49 +35741,58 @@ std::pair sse_convert_utf16_to_latin1(const char16_t* bu if (_mm_testz_si128(in, high_byte_mask)) { // Pack 16-bit characters into 8-bit and store in latin1_output __m128i latin1_packed = _mm_packus_epi16(in, in); - _mm_storel_epi64(reinterpret_cast<__m128i*>(latin1_output), latin1_packed); + _mm_storel_epi64(reinterpret_cast<__m128i *>(latin1_output), + latin1_packed); // Adjust pointers for next iteration buf += 8; latin1_output += 8; } else { - return std::make_pair(nullptr, reinterpret_cast(latin1_output)); + return std::make_pair(nullptr, reinterpret_cast(latin1_output)); } } // while return std::make_pair(buf, latin1_output); } template -std::pair sse_convert_utf16_to_latin1_with_errors(const char16_t* buf, size_t len, char* latin1_output) { - const char16_t* start = buf; - const char16_t* end = buf + len; +std::pair +sse_convert_utf16_to_latin1_with_errors(const char16_t *buf, size_t len, + char *latin1_output) { + const char16_t *start = buf; + const char16_t *end = buf + len; while (end - buf >= 8) { - __m128i in = _mm_loadu_si128(reinterpret_cast(buf)); + __m128i in = _mm_loadu_si128(reinterpret_cast(buf)); if (!match_system(big_endian)) { - const __m128i swap = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + const __m128i swap = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); in = _mm_shuffle_epi8(in, swap); } __m128i high_byte_mask = _mm_set1_epi16((int16_t)0xFF00); if (_mm_testz_si128(in, high_byte_mask)) { __m128i latin1_packed = _mm_packus_epi16(in, in); - _mm_storel_epi64(reinterpret_cast<__m128i*>(latin1_output), latin1_packed); + _mm_storel_epi64(reinterpret_cast<__m128i *>(latin1_output), + latin1_packed); buf += 8; latin1_output += 8; } else { // Fallback to scalar code for handling errors - for(int k = 0; k < 8; k++) { - uint16_t word = !match_system(big_endian) ? scalar::utf16::swap_bytes(buf[k]) : buf[k]; - if(word <= 0xff) { + for (int k = 0; k < 8; k++) { + uint16_t word = !match_system(big_endian) + ? scalar::utf16::swap_bytes(buf[k]) + : buf[k]; + if (word <= 0xff) { *latin1_output++ = char(word); } else { - return std::make_pair(result(error_code::TOO_LARGE, buf - start + k), latin1_output); + return std::make_pair(result(error_code::TOO_LARGE, buf - start + k), + latin1_output); } } buf += 8; } } // while - return std::make_pair(result(error_code::SUCCESS, buf - start), latin1_output); + return std::make_pair(result(error_code::SUCCESS, buf - start), + latin1_output); } /* end file src/westmere/sse_convert_utf16_to_latin1.cpp */ /* begin file src/westmere/sse_convert_utf16_to_utf8.cpp */ @@ -33934,62 +35850,72 @@ std::pair sse_convert_utf16_to_latin1_with_errors(const char16_t* A scalar routing should carry on the conversion of the tail. */ template -std::pair sse_convert_utf16_to_utf8(const char16_t* buf, size_t len, char* utf8_output) { +std::pair +sse_convert_utf16_to_utf8(const char16_t *buf, size_t len, char *utf8_output) { - const char16_t* end = buf + len; + const char16_t *end = buf + len; const __m128i v_0000 = _mm_setzero_si128(); const __m128i v_f800 = _mm_set1_epi16((int16_t)0xf800); const __m128i v_d800 = _mm_set1_epi16((int16_t)0xd800); - const size_t safety_margin = 12; // to avoid overruns, see issue https://github.com/simdutf/simdutf/issues/92 + const size_t safety_margin = + 12; // to avoid overruns, see issue + // https://github.com/simdutf/simdutf/issues/92 while (end - buf >= std::ptrdiff_t(16 + safety_margin)) { - __m128i in = _mm_loadu_si128((__m128i*)buf); + __m128i in = _mm_loadu_si128((__m128i *)buf); if (big_endian) { - const __m128i swap = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + const __m128i swap = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); in = _mm_shuffle_epi8(in, swap); } // a single 16-bit UTF-16 word can yield 1, 2 or 3 UTF-8 bytes const __m128i v_ff80 = _mm_set1_epi16((int16_t)0xff80); - if(_mm_testz_si128(in, v_ff80)) { // ASCII fast path!!!! - __m128i nextin = _mm_loadu_si128((__m128i*)buf+1); - if (big_endian) { - const __m128i swap = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); - nextin = _mm_shuffle_epi8(nextin, swap); - } - if(!_mm_testz_si128(nextin, v_ff80)) { - // 1. pack the bytes - // obviously suboptimal. - const __m128i utf8_packed = _mm_packus_epi16(in,in); - // 2. store (16 bytes) - _mm_storeu_si128((__m128i*)utf8_output, utf8_packed); - // 3. adjust pointers - buf += 8; - utf8_output += 8; - in = nextin; - } else { - // 1. pack the bytes - // obviously suboptimal. - const __m128i utf8_packed = _mm_packus_epi16(in,nextin); - // 2. store (16 bytes) - _mm_storeu_si128((__m128i*)utf8_output, utf8_packed); - // 3. adjust pointers - buf += 16; - utf8_output += 16; - continue; // we are done for this round! - } + if (_mm_testz_si128(in, v_ff80)) { // ASCII fast path!!!! + __m128i nextin = _mm_loadu_si128((__m128i *)buf + 1); + if (big_endian) { + const __m128i swap = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + nextin = _mm_shuffle_epi8(nextin, swap); + } + if (!_mm_testz_si128(nextin, v_ff80)) { + // 1. pack the bytes + // obviously suboptimal. + const __m128i utf8_packed = _mm_packus_epi16(in, in); + // 2. store (16 bytes) + _mm_storeu_si128((__m128i *)utf8_output, utf8_packed); + // 3. adjust pointers + buf += 8; + utf8_output += 8; + in = nextin; + } else { + // 1. pack the bytes + // obviously suboptimal. + const __m128i utf8_packed = _mm_packus_epi16(in, nextin); + // 2. store (16 bytes) + _mm_storeu_si128((__m128i *)utf8_output, utf8_packed); + // 3. adjust pointers + buf += 16; + utf8_output += 16; + continue; // we are done for this round! + } } // no bits set above 7th bit - const __m128i one_byte_bytemask = _mm_cmpeq_epi16(_mm_and_si128(in, v_ff80), v_0000); - const uint16_t one_byte_bitmask = static_cast(_mm_movemask_epi8(one_byte_bytemask)); + const __m128i one_byte_bytemask = + _mm_cmpeq_epi16(_mm_and_si128(in, v_ff80), v_0000); + const uint16_t one_byte_bitmask = + static_cast(_mm_movemask_epi8(one_byte_bytemask)); // no bits set above 11th bit - const __m128i one_or_two_bytes_bytemask = _mm_cmpeq_epi16(_mm_and_si128(in, v_f800), v_0000); - const uint16_t one_or_two_bytes_bitmask = static_cast(_mm_movemask_epi8(one_or_two_bytes_bytemask)); + const __m128i one_or_two_bytes_bytemask = + _mm_cmpeq_epi16(_mm_and_si128(in, v_f800), v_0000); + const uint16_t one_or_two_bytes_bitmask = + static_cast(_mm_movemask_epi8(one_or_two_bytes_bytemask)); if (one_or_two_bytes_bitmask == 0xffff) { - internal::westmere::write_v_u16_11bits_to_utf8(in, utf8_output, one_byte_bytemask, one_byte_bitmask); + internal::westmere::write_v_u16_11bits_to_utf8( + in, utf8_output, one_byte_bytemask, one_byte_bitmask); buf += 8; continue; } @@ -33997,129 +35923,143 @@ std::pair sse_convert_utf16_to_utf8(const char16_t* buf, // 1. Check if there are any surrogate word in the input chunk. // We have also deal with situation when there is a surrogate word // at the end of a chunk. - const __m128i surrogates_bytemask = _mm_cmpeq_epi16(_mm_and_si128(in, v_f800), v_d800); + const __m128i surrogates_bytemask = + _mm_cmpeq_epi16(_mm_and_si128(in, v_f800), v_d800); // bitmask = 0x0000 if there are no surrogates // = 0xc000 if the last word is a surrogate - const uint16_t surrogates_bitmask = static_cast(_mm_movemask_epi8(surrogates_bytemask)); - // It might seem like checking for surrogates_bitmask == 0xc000 could help. However, - // it is likely an uncommon occurrence. + const uint16_t surrogates_bitmask = + static_cast(_mm_movemask_epi8(surrogates_bytemask)); + // It might seem like checking for surrogates_bitmask == 0xc000 could help. + // However, it is likely an uncommon occurrence. if (surrogates_bitmask == 0x0000) { // case: code units from register produce either 1, 2 or 3 UTF-8 bytes - const __m128i dup_even = _mm_setr_epi16(0x0000, 0x0202, 0x0404, 0x0606, - 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); + const __m128i dup_even = _mm_setr_epi16(0x0000, 0x0202, 0x0404, 0x0606, + 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); - /* In this branch we handle three cases: - 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - single UFT-8 byte - 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two UTF-8 bytes - 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - three UTF-8 bytes + /* In this branch we handle three cases: + 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - + single UFT-8 byte + 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two + UTF-8 bytes + 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - + three UTF-8 bytes - We expand the input word (16-bit) into two code units (32-bit), thus - we have room for four bytes. However, we need five distinct bit - layouts. Note that the last byte in cases #2 and #3 is the same. + We expand the input word (16-bit) into two code units (32-bit), thus + we have room for four bytes. However, we need five distinct bit + layouts. Note that the last byte in cases #2 and #3 is the same. - We precompute byte 1 for case #1 and the common byte for cases #2 & #3 - in register t2. + We precompute byte 1 for case #1 and the common byte for cases #2 & #3 + in register t2. - We precompute byte 1 for case #3 and -- **conditionally** -- precompute - either byte 1 for case #2 or byte 2 for case #3. Note that they - differ by exactly one bit. + We precompute byte 1 for case #3 and -- **conditionally** -- precompute + either byte 1 for case #2 or byte 2 for case #3. Note that they + differ by exactly one bit. - Finally from these two code units we build proper UTF-8 sequence, taking - into account the case (i.e, the number of bytes to write). - */ - /** - * Given [aaaa|bbbb|bbcc|cccc] our goal is to produce: - * t2 => [0ccc|cccc] [10cc|cccc] - * s4 => [1110|aaaa] ([110b|bbbb] OR [10bb|bbbb]) - */ + Finally from these two code units we build proper UTF-8 sequence, taking + into account the case (i.e, the number of bytes to write). + */ + /** + * Given [aaaa|bbbb|bbcc|cccc] our goal is to produce: + * t2 => [0ccc|cccc] [10cc|cccc] + * s4 => [1110|aaaa] ([110b|bbbb] OR [10bb|bbbb]) + */ #define simdutf_vec(x) _mm_set1_epi16(static_cast(x)) - // [aaaa|bbbb|bbcc|cccc] => [bbcc|cccc|bbcc|cccc] - const __m128i t0 = _mm_shuffle_epi8(in, dup_even); - // [bbcc|cccc|bbcc|cccc] => [00cc|cccc|0bcc|cccc] - const __m128i t1 = _mm_and_si128(t0, simdutf_vec(0b0011111101111111)); - // [00cc|cccc|0bcc|cccc] => [10cc|cccc|0bcc|cccc] - const __m128i t2 = _mm_or_si128 (t1, simdutf_vec(0b1000000000000000)); - - // [aaaa|bbbb|bbcc|cccc] => [0000|aaaa|bbbb|bbcc] - const __m128i s0 = _mm_srli_epi16(in, 4); - // [0000|aaaa|bbbb|bbcc] => [0000|aaaa|bbbb|bb00] - const __m128i s1 = _mm_and_si128(s0, simdutf_vec(0b0000111111111100)); - // [0000|aaaa|bbbb|bb00] => [00bb|bbbb|0000|aaaa] - const __m128i s2 = _mm_maddubs_epi16(s1, simdutf_vec(0x0140)); - // [00bb|bbbb|0000|aaaa] => [11bb|bbbb|1110|aaaa] - const __m128i s3 = _mm_or_si128(s2, simdutf_vec(0b1100000011100000)); - const __m128i m0 = _mm_andnot_si128(one_or_two_bytes_bytemask, simdutf_vec(0b0100000000000000)); - const __m128i s4 = _mm_xor_si128(s3, m0); + // [aaaa|bbbb|bbcc|cccc] => [bbcc|cccc|bbcc|cccc] + const __m128i t0 = _mm_shuffle_epi8(in, dup_even); + // [bbcc|cccc|bbcc|cccc] => [00cc|cccc|0bcc|cccc] + const __m128i t1 = _mm_and_si128(t0, simdutf_vec(0b0011111101111111)); + // [00cc|cccc|0bcc|cccc] => [10cc|cccc|0bcc|cccc] + const __m128i t2 = _mm_or_si128(t1, simdutf_vec(0b1000000000000000)); + + // [aaaa|bbbb|bbcc|cccc] => [0000|aaaa|bbbb|bbcc] + const __m128i s0 = _mm_srli_epi16(in, 4); + // [0000|aaaa|bbbb|bbcc] => [0000|aaaa|bbbb|bb00] + const __m128i s1 = _mm_and_si128(s0, simdutf_vec(0b0000111111111100)); + // [0000|aaaa|bbbb|bb00] => [00bb|bbbb|0000|aaaa] + const __m128i s2 = _mm_maddubs_epi16(s1, simdutf_vec(0x0140)); + // [00bb|bbbb|0000|aaaa] => [11bb|bbbb|1110|aaaa] + const __m128i s3 = _mm_or_si128(s2, simdutf_vec(0b1100000011100000)); + const __m128i m0 = _mm_andnot_si128(one_or_two_bytes_bytemask, + simdutf_vec(0b0100000000000000)); + const __m128i s4 = _mm_xor_si128(s3, m0); #undef simdutf_vec - // 4. expand code units 16-bit => 32-bit - const __m128i out0 = _mm_unpacklo_epi16(t2, s4); - const __m128i out1 = _mm_unpackhi_epi16(t2, s4); + // 4. expand code units 16-bit => 32-bit + const __m128i out0 = _mm_unpacklo_epi16(t2, s4); + const __m128i out1 = _mm_unpackhi_epi16(t2, s4); - // 5. compress 32-bit code units into 1, 2 or 3 bytes -- 2 x shuffle - const uint16_t mask = (one_byte_bitmask & 0x5555) | - (one_or_two_bytes_bitmask & 0xaaaa); - if(mask == 0) { - // We only have three-byte code units. Use fast path. - const __m128i shuffle = _mm_setr_epi8(2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1); - const __m128i utf8_0 = _mm_shuffle_epi8(out0, shuffle); - const __m128i utf8_1 = _mm_shuffle_epi8(out1, shuffle); - _mm_storeu_si128((__m128i*)utf8_output, utf8_0); - utf8_output += 12; - _mm_storeu_si128((__m128i*)utf8_output, utf8_1); - utf8_output += 12; - buf += 8; - continue; - } - const uint8_t mask0 = uint8_t(mask); + // 5. compress 32-bit code units into 1, 2 or 3 bytes -- 2 x shuffle + const uint16_t mask = + (one_byte_bitmask & 0x5555) | (one_or_two_bytes_bitmask & 0xaaaa); + if (mask == 0) { + // We only have three-byte code units. Use fast path. + const __m128i shuffle = _mm_setr_epi8(2, 3, 1, 6, 7, 5, 10, 11, 9, 14, + 15, 13, -1, -1, -1, -1); + const __m128i utf8_0 = _mm_shuffle_epi8(out0, shuffle); + const __m128i utf8_1 = _mm_shuffle_epi8(out1, shuffle); + _mm_storeu_si128((__m128i *)utf8_output, utf8_0); + utf8_output += 12; + _mm_storeu_si128((__m128i *)utf8_output, utf8_1); + utf8_output += 12; + buf += 8; + continue; + } + const uint8_t mask0 = uint8_t(mask); - const uint8_t* row0 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; - const __m128i shuffle0 = _mm_loadu_si128((__m128i*)(row0 + 1)); - const __m128i utf8_0 = _mm_shuffle_epi8(out0, shuffle0); + const uint8_t *row0 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; + const __m128i shuffle0 = _mm_loadu_si128((__m128i *)(row0 + 1)); + const __m128i utf8_0 = _mm_shuffle_epi8(out0, shuffle0); - const uint8_t mask1 = static_cast(mask >> 8); + const uint8_t mask1 = static_cast(mask >> 8); - const uint8_t* row1 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; - const __m128i shuffle1 = _mm_loadu_si128((__m128i*)(row1 + 1)); - const __m128i utf8_1 = _mm_shuffle_epi8(out1, shuffle1); + const uint8_t *row1 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; + const __m128i shuffle1 = _mm_loadu_si128((__m128i *)(row1 + 1)); + const __m128i utf8_1 = _mm_shuffle_epi8(out1, shuffle1); - _mm_storeu_si128((__m128i*)utf8_output, utf8_0); - utf8_output += row0[0]; - _mm_storeu_si128((__m128i*)utf8_output, utf8_1); - utf8_output += row1[0]; + _mm_storeu_si128((__m128i *)utf8_output, utf8_0); + utf8_output += row0[0]; + _mm_storeu_si128((__m128i *)utf8_output, utf8_1); + utf8_output += row1[0]; - buf += 8; - // surrogate pair(s) in a register + buf += 8; + // surrogate pair(s) in a register } else { // Let us do a scalar fallback. // It may seem wasteful to use scalar code, but being efficient with SIMD // in the presence of surrogate pairs may require non-trivial tables. size_t forward = 15; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { uint16_t word = big_endian ? scalar::utf16::swap_bytes(buf[k]) : buf[k]; - if((word & 0xFF80)==0) { + if ((word & 0xFF80) == 0) { *utf8_output++ = char(word); - } else if((word & 0xF800)==0) { - *utf8_output++ = char((word>>6) | 0b11000000); + } else if ((word & 0xF800) == 0) { + *utf8_output++ = char((word >> 6) | 0b11000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); - } else if((word &0xF800 ) != 0xD800) { - *utf8_output++ = char((word>>12) | 0b11100000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + } else if ((word & 0xF800) != 0xD800) { + *utf8_output++ = char((word >> 12) | 0b11100000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); } else { // must be a surrogate pair uint16_t diff = uint16_t(word - 0xD800); - uint16_t next_word = big_endian ? scalar::utf16::swap_bytes(buf[k+1]) : buf[k+1]; + uint16_t next_word = + big_endian ? scalar::utf16::swap_bytes(buf[k + 1]) : buf[k + 1]; k++; uint16_t diff2 = uint16_t(next_word - 0xDC00); - if((diff | diff2) > 0x3FF) { return std::make_pair(nullptr, utf8_output); } + if ((diff | diff2) > 0x3FF) { + return std::make_pair(nullptr, utf8_output); + } uint32_t value = (diff << 10) + diff2 + 0x10000; - *utf8_output++ = char((value>>18) | 0b11110000); - *utf8_output++ = char(((value>>12) & 0b111111) | 0b10000000); - *utf8_output++ = char(((value>>6) & 0b111111) | 0b10000000); + *utf8_output++ = char((value >> 18) | 0b11110000); + *utf8_output++ = char(((value >> 12) & 0b111111) | 0b10000000); + *utf8_output++ = char(((value >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((value & 0b111111) | 0b10000000); } } @@ -34130,70 +36070,81 @@ std::pair sse_convert_utf16_to_utf8(const char16_t* buf, return std::make_pair(buf, utf8_output); } - /* Returns a pair: a result struct and utf8_output. - If there is an error, the count field of the result is the position of the error. - Otherwise, it is the position of the first unprocessed byte in buf (even if finished). - A scalar routing should carry on the conversion of the tail if needed. + If there is an error, the count field of the result is the position of the + error. Otherwise, it is the position of the first unprocessed byte in buf + (even if finished). A scalar routing should carry on the conversion of the + tail if needed. */ template -std::pair sse_convert_utf16_to_utf8_with_errors(const char16_t* buf, size_t len, char* utf8_output) { - const char16_t* start = buf; - const char16_t* end = buf + len; +std::pair +sse_convert_utf16_to_utf8_with_errors(const char16_t *buf, size_t len, + char *utf8_output) { + const char16_t *start = buf; + const char16_t *end = buf + len; const __m128i v_0000 = _mm_setzero_si128(); const __m128i v_f800 = _mm_set1_epi16((int16_t)0xf800); const __m128i v_d800 = _mm_set1_epi16((int16_t)0xd800); - const size_t safety_margin = 12; // to avoid overruns, see issue https://github.com/simdutf/simdutf/issues/92 + const size_t safety_margin = + 12; // to avoid overruns, see issue + // https://github.com/simdutf/simdutf/issues/92 while (end - buf >= std::ptrdiff_t(16 + safety_margin)) { - __m128i in = _mm_loadu_si128((__m128i*)buf); + __m128i in = _mm_loadu_si128((__m128i *)buf); if (big_endian) { - const __m128i swap = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + const __m128i swap = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); in = _mm_shuffle_epi8(in, swap); } // a single 16-bit UTF-16 word can yield 1, 2 or 3 UTF-8 bytes const __m128i v_ff80 = _mm_set1_epi16((int16_t)0xff80); - if(_mm_testz_si128(in, v_ff80)) { // ASCII fast path!!!! - __m128i nextin = _mm_loadu_si128((__m128i*)buf+1); - if (big_endian) { - const __m128i swap = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); - nextin = _mm_shuffle_epi8(nextin, swap); - } - if(!_mm_testz_si128(nextin, v_ff80)) { - // 1. pack the bytes - // obviously suboptimal. - const __m128i utf8_packed = _mm_packus_epi16(in,in); - // 2. store (16 bytes) - _mm_storeu_si128((__m128i*)utf8_output, utf8_packed); - // 3. adjust pointers - buf += 8; - utf8_output += 8; - in = nextin; - } else { - // 1. pack the bytes - // obviously suboptimal. - const __m128i utf8_packed = _mm_packus_epi16(in,nextin); - // 2. store (16 bytes) - _mm_storeu_si128((__m128i*)utf8_output, utf8_packed); - // 3. adjust pointers - buf += 16; - utf8_output += 16; - continue; // we are done for this round! - } + if (_mm_testz_si128(in, v_ff80)) { // ASCII fast path!!!! + __m128i nextin = _mm_loadu_si128((__m128i *)buf + 1); + if (big_endian) { + const __m128i swap = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + nextin = _mm_shuffle_epi8(nextin, swap); + } + if (!_mm_testz_si128(nextin, v_ff80)) { + // 1. pack the bytes + // obviously suboptimal. + const __m128i utf8_packed = _mm_packus_epi16(in, in); + // 2. store (16 bytes) + _mm_storeu_si128((__m128i *)utf8_output, utf8_packed); + // 3. adjust pointers + buf += 8; + utf8_output += 8; + in = nextin; + } else { + // 1. pack the bytes + // obviously suboptimal. + const __m128i utf8_packed = _mm_packus_epi16(in, nextin); + // 2. store (16 bytes) + _mm_storeu_si128((__m128i *)utf8_output, utf8_packed); + // 3. adjust pointers + buf += 16; + utf8_output += 16; + continue; // we are done for this round! + } } // no bits set above 7th bit - const __m128i one_byte_bytemask = _mm_cmpeq_epi16(_mm_and_si128(in, v_ff80), v_0000); - const uint16_t one_byte_bitmask = static_cast(_mm_movemask_epi8(one_byte_bytemask)); + const __m128i one_byte_bytemask = + _mm_cmpeq_epi16(_mm_and_si128(in, v_ff80), v_0000); + const uint16_t one_byte_bitmask = + static_cast(_mm_movemask_epi8(one_byte_bytemask)); // no bits set above 11th bit - const __m128i one_or_two_bytes_bytemask = _mm_cmpeq_epi16(_mm_and_si128(in, v_f800), v_0000); - const uint16_t one_or_two_bytes_bitmask = static_cast(_mm_movemask_epi8(one_or_two_bytes_bytemask)); + const __m128i one_or_two_bytes_bytemask = + _mm_cmpeq_epi16(_mm_and_si128(in, v_f800), v_0000); + const uint16_t one_or_two_bytes_bitmask = + static_cast(_mm_movemask_epi8(one_or_two_bytes_bytemask)); if (one_or_two_bytes_bitmask == 0xffff) { - internal::westmere::write_v_u16_11bits_to_utf8(in, utf8_output, one_byte_bytemask, one_byte_bitmask); + internal::westmere::write_v_u16_11bits_to_utf8( + in, utf8_output, one_byte_bytemask, one_byte_bitmask); buf += 8; continue; } @@ -34201,129 +36152,145 @@ std::pair sse_convert_utf16_to_utf8_with_errors(const char16_t* b // 1. Check if there are any surrogate word in the input chunk. // We have also deal with situation when there is a surrogate word // at the end of a chunk. - const __m128i surrogates_bytemask = _mm_cmpeq_epi16(_mm_and_si128(in, v_f800), v_d800); + const __m128i surrogates_bytemask = + _mm_cmpeq_epi16(_mm_and_si128(in, v_f800), v_d800); // bitmask = 0x0000 if there are no surrogates // = 0xc000 if the last word is a surrogate - const uint16_t surrogates_bitmask = static_cast(_mm_movemask_epi8(surrogates_bytemask)); - // It might seem like checking for surrogates_bitmask == 0xc000 could help. However, - // it is likely an uncommon occurrence. + const uint16_t surrogates_bitmask = + static_cast(_mm_movemask_epi8(surrogates_bytemask)); + // It might seem like checking for surrogates_bitmask == 0xc000 could help. + // However, it is likely an uncommon occurrence. if (surrogates_bitmask == 0x0000) { // case: code units from register produce either 1, 2 or 3 UTF-8 bytes - const __m128i dup_even = _mm_setr_epi16(0x0000, 0x0202, 0x0404, 0x0606, - 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); + const __m128i dup_even = _mm_setr_epi16(0x0000, 0x0202, 0x0404, 0x0606, + 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); - /* In this branch we handle three cases: - 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - single UFT-8 byte - 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two UTF-8 bytes - 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - three UTF-8 bytes + /* In this branch we handle three cases: + 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - + single UFT-8 byte + 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two + UTF-8 bytes + 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - + three UTF-8 bytes - We expand the input word (16-bit) into two code units (32-bit), thus - we have room for four bytes. However, we need five distinct bit - layouts. Note that the last byte in cases #2 and #3 is the same. + We expand the input word (16-bit) into two code units (32-bit), thus + we have room for four bytes. However, we need five distinct bit + layouts. Note that the last byte in cases #2 and #3 is the same. - We precompute byte 1 for case #1 and the common byte for cases #2 & #3 - in register t2. + We precompute byte 1 for case #1 and the common byte for cases #2 & #3 + in register t2. - We precompute byte 1 for case #3 and -- **conditionally** -- precompute - either byte 1 for case #2 or byte 2 for case #3. Note that they - differ by exactly one bit. + We precompute byte 1 for case #3 and -- **conditionally** -- precompute + either byte 1 for case #2 or byte 2 for case #3. Note that they + differ by exactly one bit. - Finally from these two code units we build proper UTF-8 sequence, taking - into account the case (i.e, the number of bytes to write). - */ - /** - * Given [aaaa|bbbb|bbcc|cccc] our goal is to produce: - * t2 => [0ccc|cccc] [10cc|cccc] - * s4 => [1110|aaaa] ([110b|bbbb] OR [10bb|bbbb]) - */ + Finally from these two code units we build proper UTF-8 sequence, taking + into account the case (i.e, the number of bytes to write). + */ + /** + * Given [aaaa|bbbb|bbcc|cccc] our goal is to produce: + * t2 => [0ccc|cccc] [10cc|cccc] + * s4 => [1110|aaaa] ([110b|bbbb] OR [10bb|bbbb]) + */ #define simdutf_vec(x) _mm_set1_epi16(static_cast(x)) - // [aaaa|bbbb|bbcc|cccc] => [bbcc|cccc|bbcc|cccc] - const __m128i t0 = _mm_shuffle_epi8(in, dup_even); - // [bbcc|cccc|bbcc|cccc] => [00cc|cccc|0bcc|cccc] - const __m128i t1 = _mm_and_si128(t0, simdutf_vec(0b0011111101111111)); - // [00cc|cccc|0bcc|cccc] => [10cc|cccc|0bcc|cccc] - const __m128i t2 = _mm_or_si128 (t1, simdutf_vec(0b1000000000000000)); - - // [aaaa|bbbb|bbcc|cccc] => [0000|aaaa|bbbb|bbcc] - const __m128i s0 = _mm_srli_epi16(in, 4); - // [0000|aaaa|bbbb|bbcc] => [0000|aaaa|bbbb|bb00] - const __m128i s1 = _mm_and_si128(s0, simdutf_vec(0b0000111111111100)); - // [0000|aaaa|bbbb|bb00] => [00bb|bbbb|0000|aaaa] - const __m128i s2 = _mm_maddubs_epi16(s1, simdutf_vec(0x0140)); - // [00bb|bbbb|0000|aaaa] => [11bb|bbbb|1110|aaaa] - const __m128i s3 = _mm_or_si128(s2, simdutf_vec(0b1100000011100000)); - const __m128i m0 = _mm_andnot_si128(one_or_two_bytes_bytemask, simdutf_vec(0b0100000000000000)); - const __m128i s4 = _mm_xor_si128(s3, m0); + // [aaaa|bbbb|bbcc|cccc] => [bbcc|cccc|bbcc|cccc] + const __m128i t0 = _mm_shuffle_epi8(in, dup_even); + // [bbcc|cccc|bbcc|cccc] => [00cc|cccc|0bcc|cccc] + const __m128i t1 = _mm_and_si128(t0, simdutf_vec(0b0011111101111111)); + // [00cc|cccc|0bcc|cccc] => [10cc|cccc|0bcc|cccc] + const __m128i t2 = _mm_or_si128(t1, simdutf_vec(0b1000000000000000)); + + // [aaaa|bbbb|bbcc|cccc] => [0000|aaaa|bbbb|bbcc] + const __m128i s0 = _mm_srli_epi16(in, 4); + // [0000|aaaa|bbbb|bbcc] => [0000|aaaa|bbbb|bb00] + const __m128i s1 = _mm_and_si128(s0, simdutf_vec(0b0000111111111100)); + // [0000|aaaa|bbbb|bb00] => [00bb|bbbb|0000|aaaa] + const __m128i s2 = _mm_maddubs_epi16(s1, simdutf_vec(0x0140)); + // [00bb|bbbb|0000|aaaa] => [11bb|bbbb|1110|aaaa] + const __m128i s3 = _mm_or_si128(s2, simdutf_vec(0b1100000011100000)); + const __m128i m0 = _mm_andnot_si128(one_or_two_bytes_bytemask, + simdutf_vec(0b0100000000000000)); + const __m128i s4 = _mm_xor_si128(s3, m0); #undef simdutf_vec - // 4. expand code units 16-bit => 32-bit - const __m128i out0 = _mm_unpacklo_epi16(t2, s4); - const __m128i out1 = _mm_unpackhi_epi16(t2, s4); + // 4. expand code units 16-bit => 32-bit + const __m128i out0 = _mm_unpacklo_epi16(t2, s4); + const __m128i out1 = _mm_unpackhi_epi16(t2, s4); - // 5. compress 32-bit code units into 1, 2 or 3 bytes -- 2 x shuffle - const uint16_t mask = (one_byte_bitmask & 0x5555) | - (one_or_two_bytes_bitmask & 0xaaaa); - if(mask == 0) { - // We only have three-byte code units. Use fast path. - const __m128i shuffle = _mm_setr_epi8(2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1); - const __m128i utf8_0 = _mm_shuffle_epi8(out0, shuffle); - const __m128i utf8_1 = _mm_shuffle_epi8(out1, shuffle); - _mm_storeu_si128((__m128i*)utf8_output, utf8_0); - utf8_output += 12; - _mm_storeu_si128((__m128i*)utf8_output, utf8_1); - utf8_output += 12; - buf += 8; - continue; - } - const uint8_t mask0 = uint8_t(mask); + // 5. compress 32-bit code units into 1, 2 or 3 bytes -- 2 x shuffle + const uint16_t mask = + (one_byte_bitmask & 0x5555) | (one_or_two_bytes_bitmask & 0xaaaa); + if (mask == 0) { + // We only have three-byte code units. Use fast path. + const __m128i shuffle = _mm_setr_epi8(2, 3, 1, 6, 7, 5, 10, 11, 9, 14, + 15, 13, -1, -1, -1, -1); + const __m128i utf8_0 = _mm_shuffle_epi8(out0, shuffle); + const __m128i utf8_1 = _mm_shuffle_epi8(out1, shuffle); + _mm_storeu_si128((__m128i *)utf8_output, utf8_0); + utf8_output += 12; + _mm_storeu_si128((__m128i *)utf8_output, utf8_1); + utf8_output += 12; + buf += 8; + continue; + } + const uint8_t mask0 = uint8_t(mask); - const uint8_t* row0 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; - const __m128i shuffle0 = _mm_loadu_si128((__m128i*)(row0 + 1)); - const __m128i utf8_0 = _mm_shuffle_epi8(out0, shuffle0); + const uint8_t *row0 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; + const __m128i shuffle0 = _mm_loadu_si128((__m128i *)(row0 + 1)); + const __m128i utf8_0 = _mm_shuffle_epi8(out0, shuffle0); - const uint8_t mask1 = static_cast(mask >> 8); + const uint8_t mask1 = static_cast(mask >> 8); - const uint8_t* row1 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; - const __m128i shuffle1 = _mm_loadu_si128((__m128i*)(row1 + 1)); - const __m128i utf8_1 = _mm_shuffle_epi8(out1, shuffle1); + const uint8_t *row1 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; + const __m128i shuffle1 = _mm_loadu_si128((__m128i *)(row1 + 1)); + const __m128i utf8_1 = _mm_shuffle_epi8(out1, shuffle1); - _mm_storeu_si128((__m128i*)utf8_output, utf8_0); - utf8_output += row0[0]; - _mm_storeu_si128((__m128i*)utf8_output, utf8_1); - utf8_output += row1[0]; + _mm_storeu_si128((__m128i *)utf8_output, utf8_0); + utf8_output += row0[0]; + _mm_storeu_si128((__m128i *)utf8_output, utf8_1); + utf8_output += row1[0]; - buf += 8; - // surrogate pair(s) in a register + buf += 8; + // surrogate pair(s) in a register } else { // Let us do a scalar fallback. // It may seem wasteful to use scalar code, but being efficient with SIMD // in the presence of surrogate pairs may require non-trivial tables. size_t forward = 15; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { uint16_t word = big_endian ? scalar::utf16::swap_bytes(buf[k]) : buf[k]; - if((word & 0xFF80)==0) { + if ((word & 0xFF80) == 0) { *utf8_output++ = char(word); - } else if((word & 0xF800)==0) { - *utf8_output++ = char((word>>6) | 0b11000000); + } else if ((word & 0xF800) == 0) { + *utf8_output++ = char((word >> 6) | 0b11000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); - } else if((word &0xF800 ) != 0xD800) { - *utf8_output++ = char((word>>12) | 0b11100000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + } else if ((word & 0xF800) != 0xD800) { + *utf8_output++ = char((word >> 12) | 0b11100000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); } else { // must be a surrogate pair uint16_t diff = uint16_t(word - 0xD800); - uint16_t next_word = big_endian ? scalar::utf16::swap_bytes(buf[k+1]) : buf[k+1]; + uint16_t next_word = + big_endian ? scalar::utf16::swap_bytes(buf[k + 1]) : buf[k + 1]; k++; uint16_t diff2 = uint16_t(next_word - 0xDC00); - if((diff | diff2) > 0x3FF) { return std::make_pair(result(error_code::SURROGATE, buf - start + k - 1), utf8_output); } + if ((diff | diff2) > 0x3FF) { + return std::make_pair( + result(error_code::SURROGATE, buf - start + k - 1), + utf8_output); + } uint32_t value = (diff << 10) + diff2 + 0x10000; - *utf8_output++ = char((value>>18) | 0b11110000); - *utf8_output++ = char(((value>>12) & 0b111111) | 0b10000000); - *utf8_output++ = char(((value>>6) & 0b111111) | 0b10000000); + *utf8_output++ = char((value >> 18) | 0b11110000); + *utf8_output++ = char(((value >> 12) & 0b111111) | 0b10000000); + *utf8_output++ = char(((value >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((value & 0b111111) | 0b10000000); } } @@ -34389,55 +36356,67 @@ std::pair sse_convert_utf16_to_utf8_with_errors(const char16_t* b A scalar routing should carry on the conversion of the tail. */ template -std::pair sse_convert_utf16_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) { - const char16_t* end = buf + len; +std::pair +sse_convert_utf16_to_utf32(const char16_t *buf, size_t len, + char32_t *utf32_output) { + const char16_t *end = buf + len; const __m128i v_f800 = _mm_set1_epi16((int16_t)0xf800); const __m128i v_d800 = _mm_set1_epi16((int16_t)0xd800); while (end - buf >= 8) { - __m128i in = _mm_loadu_si128((__m128i*)buf); + __m128i in = _mm_loadu_si128((__m128i *)buf); if (big_endian) { - const __m128i swap = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + const __m128i swap = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); in = _mm_shuffle_epi8(in, swap); } // 1. Check if there are any surrogate word in the input chunk. // We have also deal with situation when there is a surrogate word // at the end of a chunk. - const __m128i surrogates_bytemask = _mm_cmpeq_epi16(_mm_and_si128(in, v_f800), v_d800); + const __m128i surrogates_bytemask = + _mm_cmpeq_epi16(_mm_and_si128(in, v_f800), v_d800); // bitmask = 0x0000 if there are no surrogates // = 0xc000 if the last word is a surrogate - const uint16_t surrogates_bitmask = static_cast(_mm_movemask_epi8(surrogates_bytemask)); - // It might seem like checking for surrogates_bitmask == 0xc000 could help. However, - // it is likely an uncommon occurrence. + const uint16_t surrogates_bitmask = + static_cast(_mm_movemask_epi8(surrogates_bytemask)); + // It might seem like checking for surrogates_bitmask == 0xc000 could help. + // However, it is likely an uncommon occurrence. if (surrogates_bitmask == 0x0000) { // case: no surrogate pair, extend 16-bit code units to 32-bit code units - _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output), _mm_cvtepu16_epi32(in)); - _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output+4), _mm_cvtepu16_epi32(_mm_srli_si128(in,8))); - utf32_output += 8; - buf += 8; - // surrogate pair(s) in a register + _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output), + _mm_cvtepu16_epi32(in)); + _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output + 4), + _mm_cvtepu16_epi32(_mm_srli_si128(in, 8))); + utf32_output += 8; + buf += 8; + // surrogate pair(s) in a register } else { // Let us do a scalar fallback. // It may seem wasteful to use scalar code, but being efficient with SIMD // in the presence of surrogate pairs may require non-trivial tables. size_t forward = 15; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { uint16_t word = big_endian ? scalar::utf16::swap_bytes(buf[k]) : buf[k]; - if((word &0xF800 ) != 0xD800) { + if ((word & 0xF800) != 0xD800) { *utf32_output++ = char32_t(word); } else { // must be a surrogate pair uint16_t diff = uint16_t(word - 0xD800); - uint16_t next_word = big_endian ? scalar::utf16::swap_bytes(buf[k+1]) : buf[k+1]; + uint16_t next_word = + big_endian ? scalar::utf16::swap_bytes(buf[k + 1]) : buf[k + 1]; k++; uint16_t diff2 = uint16_t(next_word - 0xDC00); - if((diff | diff2) > 0x3FF) { return std::make_pair(nullptr, utf32_output); } + if ((diff | diff2) > 0x3FF) { + return std::make_pair(nullptr, utf32_output); + } uint32_t value = (diff << 10) + diff2 + 0x10000; *utf32_output++ = char32_t(value); } @@ -34448,64 +36427,78 @@ std::pair sse_convert_utf16_to_utf32(const char16_t* return std::make_pair(buf, utf32_output); } - /* Returns a pair: a result struct and utf8_output. - If there is an error, the count field of the result is the position of the error. - Otherwise, it is the position of the first unprocessed byte in buf (even if finished). - A scalar routing should carry on the conversion of the tail if needed. + If there is an error, the count field of the result is the position of the + error. Otherwise, it is the position of the first unprocessed byte in buf + (even if finished). A scalar routing should carry on the conversion of the + tail if needed. */ template -std::pair sse_convert_utf16_to_utf32_with_errors(const char16_t* buf, size_t len, char32_t* utf32_output) { - const char16_t* start = buf; - const char16_t* end = buf + len; +std::pair +sse_convert_utf16_to_utf32_with_errors(const char16_t *buf, size_t len, + char32_t *utf32_output) { + const char16_t *start = buf; + const char16_t *end = buf + len; const __m128i v_f800 = _mm_set1_epi16((int16_t)0xf800); const __m128i v_d800 = _mm_set1_epi16((int16_t)0xd800); while (end - buf >= 8) { - __m128i in = _mm_loadu_si128((__m128i*)buf); + __m128i in = _mm_loadu_si128((__m128i *)buf); if (big_endian) { - const __m128i swap = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + const __m128i swap = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); in = _mm_shuffle_epi8(in, swap); } // 1. Check if there are any surrogate word in the input chunk. // We have also deal with situation when there is a surrogate word // at the end of a chunk. - const __m128i surrogates_bytemask = _mm_cmpeq_epi16(_mm_and_si128(in, v_f800), v_d800); + const __m128i surrogates_bytemask = + _mm_cmpeq_epi16(_mm_and_si128(in, v_f800), v_d800); // bitmask = 0x0000 if there are no surrogates // = 0xc000 if the last word is a surrogate - const uint16_t surrogates_bitmask = static_cast(_mm_movemask_epi8(surrogates_bytemask)); - // It might seem like checking for surrogates_bitmask == 0xc000 could help. However, - // it is likely an uncommon occurrence. + const uint16_t surrogates_bitmask = + static_cast(_mm_movemask_epi8(surrogates_bytemask)); + // It might seem like checking for surrogates_bitmask == 0xc000 could help. + // However, it is likely an uncommon occurrence. if (surrogates_bitmask == 0x0000) { // case: no surrogate pair, extend 16-bit code units to 32-bit code units - _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output), _mm_cvtepu16_epi32(in)); - _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output+4), _mm_cvtepu16_epi32(_mm_srli_si128(in,8))); - utf32_output += 8; - buf += 8; - // surrogate pair(s) in a register + _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output), + _mm_cvtepu16_epi32(in)); + _mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output + 4), + _mm_cvtepu16_epi32(_mm_srli_si128(in, 8))); + utf32_output += 8; + buf += 8; + // surrogate pair(s) in a register } else { // Let us do a scalar fallback. // It may seem wasteful to use scalar code, but being efficient with SIMD // in the presence of surrogate pairs may require non-trivial tables. size_t forward = 15; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { uint16_t word = big_endian ? scalar::utf16::swap_bytes(buf[k]) : buf[k]; - if((word &0xF800 ) != 0xD800) { + if ((word & 0xF800) != 0xD800) { *utf32_output++ = char32_t(word); } else { // must be a surrogate pair uint16_t diff = uint16_t(word - 0xD800); - uint16_t next_word = big_endian ? scalar::utf16::swap_bytes(buf[k+1]) : buf[k+1]; + uint16_t next_word = + big_endian ? scalar::utf16::swap_bytes(buf[k + 1]) : buf[k + 1]; k++; uint16_t diff2 = uint16_t(next_word - 0xDC00); - if((diff | diff2) > 0x3FF) { return std::make_pair(result(error_code::SURROGATE, buf - start + k - 1), utf32_output); } + if ((diff | diff2) > 0x3FF) { + return std::make_pair( + result(error_code::SURROGATE, buf - start + k - 1), + utf32_output); + } uint32_t value = (diff << 10) + diff2 + 0x10000; *utf32_output++ = char32_t(value); } @@ -34540,8 +36533,10 @@ sse_convert_utf32_to_latin1(const char32_t *buf, size_t len, if (!_mm_testz_si128(check_combined, high_bytes_mask)) { return std::make_pair(nullptr, latin1_output); } - __m128i pack1 = _mm_unpacklo_epi32(_mm_shuffle_epi8(in1, shufmask), _mm_shuffle_epi8(in2, shufmask)); - __m128i pack2 = _mm_unpacklo_epi32(_mm_shuffle_epi8(in3, shufmask), _mm_shuffle_epi8(in4, shufmask)); + __m128i pack1 = _mm_unpacklo_epi32(_mm_shuffle_epi8(in1, shufmask), + _mm_shuffle_epi8(in2, shufmask)); + __m128i pack2 = _mm_unpacklo_epi32(_mm_shuffle_epi8(in3, shufmask), + _mm_shuffle_epi8(in4, shufmask)); __m128i pack = _mm_unpacklo_epi64(pack1, pack2); _mm_storeu_si128((__m128i *)latin1_output, pack); latin1_output += 16; @@ -34585,8 +36580,10 @@ sse_convert_utf32_to_latin1_with_errors(const char32_t *buf, size_t len, buf += 16; continue; } - __m128i pack1 = _mm_unpacklo_epi32(_mm_shuffle_epi8(in1, shufmask), _mm_shuffle_epi8(in2, shufmask)); - __m128i pack2 = _mm_unpacklo_epi32(_mm_shuffle_epi8(in3, shufmask), _mm_shuffle_epi8(in4, shufmask)); + __m128i pack1 = _mm_unpacklo_epi32(_mm_shuffle_epi8(in1, shufmask), + _mm_shuffle_epi8(in2, shufmask)); + __m128i pack2 = _mm_unpacklo_epi32(_mm_shuffle_epi8(in3, shufmask), + _mm_shuffle_epi8(in4, shufmask)); __m128i pack = _mm_unpacklo_epi64(pack1, pack2); _mm_storeu_si128((__m128i *)latin1_output, pack); latin1_output += 16; @@ -34598,58 +36595,90 @@ sse_convert_utf32_to_latin1_with_errors(const char32_t *buf, size_t len, } /* end file src/westmere/sse_convert_utf32_to_latin1.cpp */ /* begin file src/westmere/sse_convert_utf32_to_utf8.cpp */ -std::pair sse_convert_utf32_to_utf8(const char32_t* buf, size_t len, char* utf8_output) { - const char32_t* end = buf + len; - - const __m128i v_0000 = _mm_setzero_si128();//__m128 = 128 bits - const __m128i v_f800 = _mm_set1_epi16((uint16_t)0xf800); //1111 1000 0000 0000 - const __m128i v_c080 = _mm_set1_epi16((uint16_t)0xc080); //1100 0000 1000 0000 - const __m128i v_ff80 = _mm_set1_epi16((uint16_t)0xff80); //1111 1111 1000 0000 - const __m128i v_ffff0000 = _mm_set1_epi32((uint32_t)0xffff0000); //1111 1111 1111 1111 0000 0000 0000 0000 - const __m128i v_7fffffff = _mm_set1_epi32((uint32_t)0x7fffffff); //0111 1111 1111 1111 1111 1111 1111 1111 +std::pair +sse_convert_utf32_to_utf8(const char32_t *buf, size_t len, char *utf8_output) { + const char32_t *end = buf + len; + + const __m128i v_0000 = _mm_setzero_si128(); //__m128 = 128 bits + const __m128i v_f800 = _mm_set1_epi16((uint16_t)0xf800); // 1111 1000 0000 + // 0000 + const __m128i v_c080 = _mm_set1_epi16((uint16_t)0xc080); // 1100 0000 1000 + // 0000 + const __m128i v_ff80 = _mm_set1_epi16((uint16_t)0xff80); // 1111 1111 1000 + // 0000 + const __m128i v_ffff0000 = _mm_set1_epi32( + (uint32_t)0xffff0000); // 1111 1111 1111 1111 0000 0000 0000 0000 + const __m128i v_7fffffff = _mm_set1_epi32( + (uint32_t)0x7fffffff); // 0111 1111 1111 1111 1111 1111 1111 1111 __m128i running_max = _mm_setzero_si128(); __m128i forbidden_bytemask = _mm_setzero_si128(); - const size_t safety_margin = 12; // to avoid overruns, see issue https://github.com/simdutf/simdutf/issues/92 - - while (end - buf >= std::ptrdiff_t(16 + safety_margin)) { // buf is a char32_t pointer, each char32_t has 4 bytes or 32 bits, thus buf + 16 * char_32t = 512 bits = 64 bytes + const size_t safety_margin = + 12; // to avoid overruns, see issue + // https://github.com/simdutf/simdutf/issues/92 + + while (end - buf >= + std::ptrdiff_t( + 16 + safety_margin)) { // buf is a char32_t pointer, each char32_t + // has 4 bytes or 32 bits, thus buf + 16 * + // char_32t = 512 bits = 64 bytes // We load two 16 bytes registers for a total of 32 bytes or 16 characters. - __m128i in = _mm_loadu_si128((__m128i*)buf); - __m128i nextin = _mm_loadu_si128((__m128i*)buf+1);//These two values can hold only 8 UTF32 chars + __m128i in = _mm_loadu_si128((__m128i *)buf); + __m128i nextin = _mm_loadu_si128( + (__m128i *)buf + 1); // These two values can hold only 8 UTF32 chars running_max = _mm_max_epu32( - _mm_max_epu32(in, running_max), //take element-wise max char32_t from in and running_max vector - nextin); //and take element-wise max element from nextin and running_max vector + _mm_max_epu32(in, running_max), // take element-wise max char32_t from + // in and running_max vector + nextin); // and take element-wise max element from nextin and + // running_max vector - // Pack 32-bit UTF-32 code units to 16-bit UTF-16 code units with unsigned saturation + // Pack 32-bit UTF-32 code units to 16-bit UTF-16 code units with unsigned + // saturation __m128i in_16 = _mm_packus_epi32( - _mm_and_si128(in, v_7fffffff), - _mm_and_si128(nextin, v_7fffffff) - );//in this context pack the two __m128 into a single - //By ensuring the highest bit is set to 0(&v_7fffffff), we are making sure all values are interpreted as non-negative, or specifically, the values are within the range of valid Unicode code points. - //remember : having leading byte 0 means a positive number by the two complements system. Unicode is well beneath the range where you'll start getting issues so that's OK. + _mm_and_si128(in, v_7fffffff), + _mm_and_si128( + nextin, + v_7fffffff)); // in this context pack the two __m128 into a single + // By ensuring the highest bit is set to 0(&v_7fffffff), we are making sure + // all values are interpreted as non-negative, or specifically, the values + // are within the range of valid Unicode code points. remember : having + // leading byte 0 means a positive number by the two complements system. + // Unicode is well beneath the range where you'll start getting issues so + // that's OK. // Try to apply UTF-16 => UTF-8 from ./sse_convert_utf16_to_utf8.cpp // Check for ASCII fast path // ASCII fast path!!!! - // We eagerly load another 32 bytes, hoping that they will be ASCII too. - // The intuition is that we try to collect 16 ASCII characters which requires - // a total of 64 bytes of input. If we fail, we just pass thirdin and fourthin - // as our new inputs. - if(_mm_testz_si128(in_16, v_ff80)) { //if the first two blocks are ASCII - __m128i thirdin = _mm_loadu_si128((__m128i*)buf+2); - __m128i fourthin = _mm_loadu_si128((__m128i*)buf+3); - running_max = _mm_max_epu32(_mm_max_epu32(thirdin, running_max), fourthin);//take the running max of all 4 vectors thus far - __m128i nextin_16 = _mm_packus_epi32(_mm_and_si128(thirdin, v_7fffffff), _mm_and_si128(fourthin, v_7fffffff));//pack into 1 vector, now you have two - if(!_mm_testz_si128(nextin_16, v_ff80)) { //checks if the second packed vector is ASCII, if not: + // We eagerly load another 32 bytes, hoping that they will be ASCII too. + // The intuition is that we try to collect 16 ASCII characters which + // requires a total of 64 bytes of input. If we fail, we just pass thirdin + // and fourthin as our new inputs. + if (_mm_testz_si128(in_16, v_ff80)) { // if the first two blocks are ASCII + __m128i thirdin = _mm_loadu_si128((__m128i *)buf + 2); + __m128i fourthin = _mm_loadu_si128((__m128i *)buf + 3); + running_max = _mm_max_epu32( + _mm_max_epu32(thirdin, running_max), + fourthin); // take the running max of all 4 vectors thus far + __m128i nextin_16 = _mm_packus_epi32( + _mm_and_si128(thirdin, v_7fffffff), + _mm_and_si128(fourthin, + v_7fffffff)); // pack into 1 vector, now you have two + if (!_mm_testz_si128( + nextin_16, + v_ff80)) { // checks if the second packed vector is ASCII, if not: // 1. pack the bytes // obviously suboptimal. - const __m128i utf8_packed = _mm_packus_epi16(in_16,in_16); //creates two copy of in_16 in 1 vector + const __m128i utf8_packed = _mm_packus_epi16( + in_16, in_16); // creates two copy of in_16 in 1 vector // 2. store (16 bytes) - _mm_storeu_si128((__m128i*)utf8_output, utf8_packed); //put them into the output + _mm_storeu_si128((__m128i *)utf8_output, + utf8_packed); // put them into the output // 3. adjust pointers - buf += 8; //the char32_t buffer pointer goes up 8 char32_t chars* 32 bits = 256 bits - utf8_output += 8; //same with output, e.g. lift the first two blocks alone. + buf += 8; // the char32_t buffer pointer goes up 8 char32_t chars* 32 + // bits = 256 bits + utf8_output += + 8; // same with output, e.g. lift the first two blocks alone. // Proceed with next input in_16 = nextin_16; // We need to update in and nextin because they are used later. @@ -34659,7 +36688,7 @@ std::pair sse_convert_utf32_to_utf8(const char32_t* buf, // 1. pack the bytes const __m128i utf8_packed = _mm_packus_epi16(in_16, nextin_16); // 2. store (16 bytes) - _mm_storeu_si128((__m128i*)utf8_output, utf8_packed); + _mm_storeu_si128((__m128i *)utf8_output, utf8_packed); // 3. adjust pointers buf += 16; utf8_output += 16; @@ -34668,51 +36697,72 @@ std::pair sse_convert_utf32_to_utf8(const char32_t* buf, } // no bits set above 7th bit -- find out all the ASCII characters - const __m128i one_byte_bytemask = _mm_cmpeq_epi16( // this takes four bytes at a time and compares: - _mm_and_si128(in_16, v_ff80), // the vector that get only the first 9 bits of each 16-bit/2-byte units - v_0000 // - ); // they should be all zero if they are ASCII. E.g. ASCII in UTF32 is of format 0000 0000 0000 0XXX XXXX - // _mm_cmpeq_epi16 should now return a 1111 1111 1111 1111 for equals, and 0000 0000 0000 0000 if not for each 16-bit/2-byte units - const uint16_t one_byte_bitmask = static_cast(_mm_movemask_epi8(one_byte_bytemask)); // collect the MSB from previous vector and put them into uint16_t mas + const __m128i one_byte_bytemask = + _mm_cmpeq_epi16( // this takes four bytes at a time and compares: + _mm_and_si128(in_16, v_ff80), // the vector that get only the first + // 9 bits of each 16-bit/2-byte units + v_0000 // + ); // they should be all zero if they are ASCII. E.g. ASCII in UTF32 is + // of format 0000 0000 0000 0XXX XXXX + // _mm_cmpeq_epi16 should now return a 1111 1111 1111 1111 for equals, and + // 0000 0000 0000 0000 if not for each 16-bit/2-byte units + const uint16_t one_byte_bitmask = static_cast(_mm_movemask_epi8( + one_byte_bytemask)); // collect the MSB from previous vector and put + // them into uint16_t mas // no bits set above 11th bit - const __m128i one_or_two_bytes_bytemask = _mm_cmpeq_epi16(_mm_and_si128(in_16, v_f800), v_0000); - const uint16_t one_or_two_bytes_bitmask = static_cast(_mm_movemask_epi8(one_or_two_bytes_bytemask)); + const __m128i one_or_two_bytes_bytemask = + _mm_cmpeq_epi16(_mm_and_si128(in_16, v_f800), v_0000); + const uint16_t one_or_two_bytes_bitmask = + static_cast(_mm_movemask_epi8(one_or_two_bytes_bytemask)); if (one_or_two_bytes_bitmask == 0xffff) { - // case: all code units either produce 1 or 2 UTF-8 bytes (at least one produces 2 bytes) + // case: all code units either produce 1 or 2 UTF-8 bytes (at least one + // produces 2 bytes) // 1. prepare 2-byte values // input 16-bit word : [0000|0aaa|aabb|bbbb] x 8 // expected output : [110a|aaaa|10bb|bbbb] x 8 - const __m128i v_1f00 = _mm_set1_epi16((int16_t)0x1f00); // 0001 1111 0000 0000 - const __m128i v_003f = _mm_set1_epi16((int16_t)0x003f); // 0000 0000 0011 1111 + const __m128i v_1f00 = + _mm_set1_epi16((int16_t)0x1f00); // 0001 1111 0000 0000 + const __m128i v_003f = + _mm_set1_epi16((int16_t)0x003f); // 0000 0000 0011 1111 // t0 = [000a|aaaa|bbbb|bb00] const __m128i t0 = _mm_slli_epi16(in_16, 2); // shift packed vector by two // t1 = [000a|aaaa|0000|0000] - const __m128i t1 = _mm_and_si128(t0, v_1f00); // potentital first utf8 byte + const __m128i t1 = + _mm_and_si128(t0, v_1f00); // potentital first utf8 byte // t2 = [0000|0000|00bb|bbbb] - const __m128i t2 = _mm_and_si128(in_16, v_003f);// potential second utf8 byte + const __m128i t2 = + _mm_and_si128(in_16, v_003f); // potential second utf8 byte // t3 = [000a|aaaa|00bb|bbbb] - const __m128i t3 = _mm_or_si128(t1, t2); // first and second potential utf8 byte together + const __m128i t3 = + _mm_or_si128(t1, t2); // first and second potential utf8 byte together // t4 = [110a|aaaa|10bb|bbbb] - const __m128i t4 = _mm_or_si128(t3, v_c080); // t3 | 1100 0000 1000 0000 = full potential 2-byte utf8 unit + const __m128i t4 = _mm_or_si128( + t3, + v_c080); // t3 | 1100 0000 1000 0000 = full potential 2-byte utf8 unit // 2. merge ASCII and 2-byte codewords - const __m128i utf8_unpacked = _mm_blendv_epi8(t4, in_16, one_byte_bytemask); + const __m128i utf8_unpacked = + _mm_blendv_epi8(t4, in_16, one_byte_bytemask); // 3. prepare bitmask for 8-bit lookup - // one_byte_bitmask = hhggffeeddccbbaa -- the bits are doubled (h - MSB, a - LSB) - const uint16_t m0 = one_byte_bitmask & 0x5555; // m0 = 0h0g0f0e0d0c0b0a - const uint16_t m1 = static_cast(m0 >> 7); // m1 = 00000000h0g0f0e0 - const uint8_t m2 = static_cast((m0 | m1) & 0xff); // m2 = hdgcfbea + // one_byte_bitmask = hhggffeeddccbbaa -- the bits are doubled (h - + // MSB, a - LSB) + const uint16_t m0 = one_byte_bitmask & 0x5555; // m0 = 0h0g0f0e0d0c0b0a + const uint16_t m1 = + static_cast(m0 >> 7); // m1 = 00000000h0g0f0e0 + const uint8_t m2 = + static_cast((m0 | m1) & 0xff); // m2 = hdgcfbea // 4. pack the bytes - const uint8_t* row = &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[m2][0]; - const __m128i shuffle = _mm_loadu_si128((__m128i*)(row + 1)); + const uint8_t *row = + &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[m2][0]; + const __m128i shuffle = _mm_loadu_si128((__m128i *)(row + 1)); const __m128i utf8_packed = _mm_shuffle_epi8(utf8_unpacked, shuffle); // 5. store bytes - _mm_storeu_si128((__m128i*)utf8_output, utf8_packed); + _mm_storeu_si128((__m128i *)utf8_output, utf8_packed); // 6. adjust pointers buf += 8; @@ -34722,20 +36772,27 @@ std::pair sse_convert_utf32_to_utf8(const char32_t* buf, // Check for overflow in packing - const __m128i saturation_bytemask = _mm_cmpeq_epi32(_mm_and_si128(_mm_or_si128(in, nextin), v_ffff0000), v_0000); - const uint32_t saturation_bitmask = static_cast(_mm_movemask_epi8(saturation_bytemask)); + const __m128i saturation_bytemask = _mm_cmpeq_epi32( + _mm_and_si128(_mm_or_si128(in, nextin), v_ffff0000), v_0000); + const uint32_t saturation_bitmask = + static_cast(_mm_movemask_epi8(saturation_bytemask)); if (saturation_bitmask == 0xffff) { // case: code units from register produce either 1, 2 or 3 UTF-8 bytes const __m128i v_d800 = _mm_set1_epi16((uint16_t)0xd800); - forbidden_bytemask = _mm_or_si128(forbidden_bytemask, _mm_cmpeq_epi16(_mm_and_si128(in_16, v_f800), v_d800)); + forbidden_bytemask = + _mm_or_si128(forbidden_bytemask, + _mm_cmpeq_epi16(_mm_and_si128(in_16, v_f800), v_d800)); const __m128i dup_even = _mm_setr_epi16(0x0000, 0x0202, 0x0404, 0x0606, 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); /* In this branch we handle three cases: - 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - single UFT-8 byte - 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two UTF-8 bytes - 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - three UTF-8 bytes + 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - + single UFT-8 byte + 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - + two UTF-8 bytes + 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - + three UTF-8 bytes We expand the input word (16-bit) into two code units (32-bit), thus we have room for four bytes. However, we need five distinct bit @@ -34762,7 +36819,7 @@ std::pair sse_convert_utf32_to_utf8(const char32_t* buf, // [bbcc|cccc|bbcc|cccc] => [00cc|cccc|0bcc|cccc] const __m128i t1 = _mm_and_si128(t0, simdutf_vec(0b0011111101111111)); // [00cc|cccc|0bcc|cccc] => [10cc|cccc|0bcc|cccc] - const __m128i t2 = _mm_or_si128 (t1, simdutf_vec(0b1000000000000000)); + const __m128i t2 = _mm_or_si128(t1, simdutf_vec(0b1000000000000000)); // [aaaa|bbbb|bbcc|cccc] => [0000|aaaa|bbbb|bbcc] const __m128i s0 = _mm_srli_epi16(in_16, 4); @@ -34772,7 +36829,8 @@ std::pair sse_convert_utf32_to_utf8(const char32_t* buf, const __m128i s2 = _mm_maddubs_epi16(s1, simdutf_vec(0x0140)); // [00bb|bbbb|0000|aaaa] => [11bb|bbbb|1110|aaaa] const __m128i s3 = _mm_or_si128(s2, simdutf_vec(0b1100000011100000)); - const __m128i m0 = _mm_andnot_si128(one_or_two_bytes_bytemask, simdutf_vec(0b0100000000000000)); + const __m128i m0 = _mm_andnot_si128(one_or_two_bytes_bytemask, + simdutf_vec(0b0100000000000000)); const __m128i s4 = _mm_xor_si128(s3, m0); #undef simdutf_vec @@ -34781,63 +36839,72 @@ std::pair sse_convert_utf32_to_utf8(const char32_t* buf, const __m128i out1 = _mm_unpackhi_epi16(t2, s4); // 5. compress 32-bit code units into 1, 2 or 3 bytes -- 2 x shuffle - const uint16_t mask = (one_byte_bitmask & 0x5555) | - (one_or_two_bytes_bitmask & 0xaaaa); - if(mask == 0) { + const uint16_t mask = + (one_byte_bitmask & 0x5555) | (one_or_two_bytes_bitmask & 0xaaaa); + if (mask == 0) { // We only have three-byte code units. Use fast path. - const __m128i shuffle = _mm_setr_epi8(2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1); + const __m128i shuffle = _mm_setr_epi8(2, 3, 1, 6, 7, 5, 10, 11, 9, 14, + 15, 13, -1, -1, -1, -1); const __m128i utf8_0 = _mm_shuffle_epi8(out0, shuffle); const __m128i utf8_1 = _mm_shuffle_epi8(out1, shuffle); - _mm_storeu_si128((__m128i*)utf8_output, utf8_0); + _mm_storeu_si128((__m128i *)utf8_output, utf8_0); utf8_output += 12; - _mm_storeu_si128((__m128i*)utf8_output, utf8_1); + _mm_storeu_si128((__m128i *)utf8_output, utf8_1); utf8_output += 12; buf += 8; continue; } const uint8_t mask0 = uint8_t(mask); - const uint8_t* row0 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; - const __m128i shuffle0 = _mm_loadu_si128((__m128i*)(row0 + 1)); + const uint8_t *row0 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; + const __m128i shuffle0 = _mm_loadu_si128((__m128i *)(row0 + 1)); const __m128i utf8_0 = _mm_shuffle_epi8(out0, shuffle0); const uint8_t mask1 = static_cast(mask >> 8); - const uint8_t* row1 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; - const __m128i shuffle1 = _mm_loadu_si128((__m128i*)(row1 + 1)); + const uint8_t *row1 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; + const __m128i shuffle1 = _mm_loadu_si128((__m128i *)(row1 + 1)); const __m128i utf8_1 = _mm_shuffle_epi8(out1, shuffle1); - _mm_storeu_si128((__m128i*)utf8_output, utf8_0); + _mm_storeu_si128((__m128i *)utf8_output, utf8_0); utf8_output += row0[0]; - _mm_storeu_si128((__m128i*)utf8_output, utf8_1); + _mm_storeu_si128((__m128i *)utf8_output, utf8_1); utf8_output += row1[0]; buf += 8; } else { - // case: at least one 32-bit word produce a surrogate pair in UTF-16 <=> will produce four UTF-8 bytes - // Let us do a scalar fallback. - // It may seem wasteful to use scalar code, but being efficient with SIMD - // in the presence of surrogate pairs may require non-trivial tables. + // case: at least one 32-bit word produce a surrogate pair in UTF-16 <=> + // will produce four UTF-8 bytes Let us do a scalar fallback. It may seem + // wasteful to use scalar code, but being efficient with SIMD in the + // presence of surrogate pairs may require non-trivial tables. size_t forward = 15; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { uint32_t word = buf[k]; - if((word & 0xFFFFFF80)==0) { + if ((word & 0xFFFFFF80) == 0) { *utf8_output++ = char(word); - } else if((word & 0xFFFFF800)==0) { - *utf8_output++ = char((word>>6) | 0b11000000); + } else if ((word & 0xFFFFF800) == 0) { + *utf8_output++ = char((word >> 6) | 0b11000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); - } else if((word &0xFFFF0000 )==0) { - if (word >= 0xD800 && word <= 0xDFFF) { return std::make_pair(nullptr, utf8_output); } - *utf8_output++ = char((word>>12) | 0b11100000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + } else if ((word & 0xFFFF0000) == 0) { + if (word >= 0xD800 && word <= 0xDFFF) { + return std::make_pair(nullptr, utf8_output); + } + *utf8_output++ = char((word >> 12) | 0b11100000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); } else { - if (word > 0x10FFFF) { return std::make_pair(nullptr, utf8_output); } - *utf8_output++ = char((word>>18) | 0b11110000); - *utf8_output++ = char(((word>>12) & 0b111111) | 0b10000000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + if (word > 0x10FFFF) { + return std::make_pair(nullptr, utf8_output); + } + *utf8_output++ = char((word >> 18) | 0b11110000); + *utf8_output++ = char(((word >> 12) & 0b111111) | 0b10000000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); } } @@ -34847,19 +36914,23 @@ std::pair sse_convert_utf32_to_utf8(const char32_t* buf, // check for invalid input const __m128i v_10ffff = _mm_set1_epi32((uint32_t)0x10ffff); - if(static_cast(_mm_movemask_epi8(_mm_cmpeq_epi32(_mm_max_epu32(running_max, v_10ffff), v_10ffff))) != 0xffff) { + if (static_cast(_mm_movemask_epi8(_mm_cmpeq_epi32( + _mm_max_epu32(running_max, v_10ffff), v_10ffff))) != 0xffff) { return std::make_pair(nullptr, utf8_output); } - if (static_cast(_mm_movemask_epi8(forbidden_bytemask)) != 0) { return std::make_pair(nullptr, utf8_output); } + if (static_cast(_mm_movemask_epi8(forbidden_bytemask)) != 0) { + return std::make_pair(nullptr, utf8_output); + } return std::make_pair(buf, utf8_output); } - -std::pair sse_convert_utf32_to_utf8_with_errors(const char32_t* buf, size_t len, char* utf8_output) { - const char32_t* end = buf + len; - const char32_t* start = buf; +std::pair +sse_convert_utf32_to_utf8_with_errors(const char32_t *buf, size_t len, + char *utf8_output) { + const char32_t *end = buf + len; + const char32_t *start = buf; const __m128i v_0000 = _mm_setzero_si128(); const __m128i v_f800 = _mm_set1_epi16((uint16_t)0xf800); @@ -34869,46 +36940,57 @@ std::pair sse_convert_utf32_to_utf8_with_errors(const char32_t* b const __m128i v_7fffffff = _mm_set1_epi32((uint32_t)0x7fffffff); const __m128i v_10ffff = _mm_set1_epi32((uint32_t)0x10ffff); - const size_t safety_margin = 12; // to avoid overruns, see issue https://github.com/simdutf/simdutf/issues/92 + const size_t safety_margin = + 12; // to avoid overruns, see issue + // https://github.com/simdutf/simdutf/issues/92 while (end - buf >= std::ptrdiff_t(16 + safety_margin)) { // We load two 16 bytes registers for a total of 32 bytes or 8 characters. - __m128i in = _mm_loadu_si128((__m128i*)buf); - __m128i nextin = _mm_loadu_si128((__m128i*)buf+1); + __m128i in = _mm_loadu_si128((__m128i *)buf); + __m128i nextin = _mm_loadu_si128((__m128i *)buf + 1); // Check for too large input __m128i max_input = _mm_max_epu32(_mm_max_epu32(in, nextin), v_10ffff); - if(static_cast(_mm_movemask_epi8(_mm_cmpeq_epi32(max_input, v_10ffff))) != 0xffff) { - return std::make_pair(result(error_code::TOO_LARGE, buf - start), utf8_output); + if (static_cast(_mm_movemask_epi8( + _mm_cmpeq_epi32(max_input, v_10ffff))) != 0xffff) { + return std::make_pair(result(error_code::TOO_LARGE, buf - start), + utf8_output); } - // Pack 32-bit UTF-32 code units to 16-bit UTF-16 code units with unsigned saturation - __m128i in_16 = _mm_packus_epi32(_mm_and_si128(in, v_7fffffff), _mm_and_si128(nextin, v_7fffffff)); + // Pack 32-bit UTF-32 code units to 16-bit UTF-16 code units with unsigned + // saturation + __m128i in_16 = _mm_packus_epi32(_mm_and_si128(in, v_7fffffff), + _mm_and_si128(nextin, v_7fffffff)); // Try to apply UTF-16 => UTF-8 from ./sse_convert_utf16_to_utf8.cpp // Check for ASCII fast path - if(_mm_testz_si128(in_16, v_ff80)) { // ASCII fast path!!!! - // 1. pack the bytes - // obviously suboptimal. - const __m128i utf8_packed = _mm_packus_epi16(in_16,in_16); - // 2. store (16 bytes) - _mm_storeu_si128((__m128i*)utf8_output, utf8_packed); - // 3. adjust pointers - buf += 8; - utf8_output += 8; - continue; + if (_mm_testz_si128(in_16, v_ff80)) { // ASCII fast path!!!! + // 1. pack the bytes + // obviously suboptimal. + const __m128i utf8_packed = _mm_packus_epi16(in_16, in_16); + // 2. store (16 bytes) + _mm_storeu_si128((__m128i *)utf8_output, utf8_packed); + // 3. adjust pointers + buf += 8; + utf8_output += 8; + continue; } // no bits set above 7th bit - const __m128i one_byte_bytemask = _mm_cmpeq_epi16(_mm_and_si128(in_16, v_ff80), v_0000); - const uint16_t one_byte_bitmask = static_cast(_mm_movemask_epi8(one_byte_bytemask)); + const __m128i one_byte_bytemask = + _mm_cmpeq_epi16(_mm_and_si128(in_16, v_ff80), v_0000); + const uint16_t one_byte_bitmask = + static_cast(_mm_movemask_epi8(one_byte_bytemask)); // no bits set above 11th bit - const __m128i one_or_two_bytes_bytemask = _mm_cmpeq_epi16(_mm_and_si128(in_16, v_f800), v_0000); - const uint16_t one_or_two_bytes_bitmask = static_cast(_mm_movemask_epi8(one_or_two_bytes_bytemask)); + const __m128i one_or_two_bytes_bytemask = + _mm_cmpeq_epi16(_mm_and_si128(in_16, v_f800), v_0000); + const uint16_t one_or_two_bytes_bitmask = + static_cast(_mm_movemask_epi8(one_or_two_bytes_bytemask)); if (one_or_two_bytes_bitmask == 0xffff) { - // case: all code units either produce 1 or 2 UTF-8 bytes (at least one produces 2 bytes) + // case: all code units either produce 1 or 2 UTF-8 bytes (at least one + // produces 2 bytes) // 1. prepare 2-byte values // input 16-bit word : [0000|0aaa|aabb|bbbb] x 8 // expected output : [110a|aaaa|10bb|bbbb] x 8 @@ -34927,20 +37009,25 @@ std::pair sse_convert_utf32_to_utf8_with_errors(const char32_t* b const __m128i t4 = _mm_or_si128(t3, v_c080); // 2. merge ASCII and 2-byte codewords - const __m128i utf8_unpacked = _mm_blendv_epi8(t4, in_16, one_byte_bytemask); + const __m128i utf8_unpacked = + _mm_blendv_epi8(t4, in_16, one_byte_bytemask); // 3. prepare bitmask for 8-bit lookup - // one_byte_bitmask = hhggffeeddccbbaa -- the bits are doubled (h - MSB, a - LSB) - const uint16_t m0 = one_byte_bitmask & 0x5555; // m0 = 0h0g0f0e0d0c0b0a - const uint16_t m1 = static_cast(m0 >> 7); // m1 = 00000000h0g0f0e0 - const uint8_t m2 = static_cast((m0 | m1) & 0xff); // m2 = hdgcfbea + // one_byte_bitmask = hhggffeeddccbbaa -- the bits are doubled (h - + // MSB, a - LSB) + const uint16_t m0 = one_byte_bitmask & 0x5555; // m0 = 0h0g0f0e0d0c0b0a + const uint16_t m1 = + static_cast(m0 >> 7); // m1 = 00000000h0g0f0e0 + const uint8_t m2 = + static_cast((m0 | m1) & 0xff); // m2 = hdgcfbea // 4. pack the bytes - const uint8_t* row = &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[m2][0]; - const __m128i shuffle = _mm_loadu_si128((__m128i*)(row + 1)); + const uint8_t *row = + &simdutf::tables::utf16_to_utf8::pack_1_2_utf8_bytes[m2][0]; + const __m128i shuffle = _mm_loadu_si128((__m128i *)(row + 1)); const __m128i utf8_packed = _mm_shuffle_epi8(utf8_unpacked, shuffle); // 5. store bytes - _mm_storeu_si128((__m128i*)utf8_output, utf8_packed); + _mm_storeu_si128((__m128i *)utf8_output, utf8_packed); // 6. adjust pointers buf += 8; @@ -34948,28 +37035,34 @@ std::pair sse_convert_utf32_to_utf8_with_errors(const char32_t* b continue; } - // Check for overflow in packing - const __m128i saturation_bytemask = _mm_cmpeq_epi32(_mm_and_si128(_mm_or_si128(in, nextin), v_ffff0000), v_0000); - const uint32_t saturation_bitmask = static_cast(_mm_movemask_epi8(saturation_bytemask)); + const __m128i saturation_bytemask = _mm_cmpeq_epi32( + _mm_and_si128(_mm_or_si128(in, nextin), v_ffff0000), v_0000); + const uint32_t saturation_bitmask = + static_cast(_mm_movemask_epi8(saturation_bytemask)); if (saturation_bitmask == 0xffff) { // case: code units from register produce either 1, 2 or 3 UTF-8 bytes // Check for illegal surrogate code units const __m128i v_d800 = _mm_set1_epi16((uint16_t)0xd800); - const __m128i forbidden_bytemask = _mm_cmpeq_epi16(_mm_and_si128(in_16, v_f800), v_d800); + const __m128i forbidden_bytemask = + _mm_cmpeq_epi16(_mm_and_si128(in_16, v_f800), v_d800); if (static_cast(_mm_movemask_epi8(forbidden_bytemask)) != 0) { - return std::make_pair(result(error_code::SURROGATE, buf - start), utf8_output); + return std::make_pair(result(error_code::SURROGATE, buf - start), + utf8_output); } const __m128i dup_even = _mm_setr_epi16(0x0000, 0x0202, 0x0404, 0x0606, 0x0808, 0x0a0a, 0x0c0c, 0x0e0e); /* In this branch we handle three cases: - 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - single UFT-8 byte - 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - two UTF-8 bytes - 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - three UTF-8 bytes + 1. [0000|0000|0ccc|cccc] => [0ccc|cccc] - + single UFT-8 byte + 2. [0000|0bbb|bbcc|cccc] => [110b|bbbb], [10cc|cccc] - + two UTF-8 bytes + 3. [aaaa|bbbb|bbcc|cccc] => [1110|aaaa], [10bb|bbbb], [10cc|cccc] - + three UTF-8 bytes We expand the input word (16-bit) into two code units (32-bit), thus we have room for four bytes. However, we need five distinct bit @@ -34996,7 +37089,7 @@ std::pair sse_convert_utf32_to_utf8_with_errors(const char32_t* b // [bbcc|cccc|bbcc|cccc] => [00cc|cccc|0bcc|cccc] const __m128i t1 = _mm_and_si128(t0, simdutf_vec(0b0011111101111111)); // [00cc|cccc|0bcc|cccc] => [10cc|cccc|0bcc|cccc] - const __m128i t2 = _mm_or_si128 (t1, simdutf_vec(0b1000000000000000)); + const __m128i t2 = _mm_or_si128(t1, simdutf_vec(0b1000000000000000)); // [aaaa|bbbb|bbcc|cccc] => [0000|aaaa|bbbb|bbcc] const __m128i s0 = _mm_srli_epi16(in_16, 4); @@ -35006,7 +37099,8 @@ std::pair sse_convert_utf32_to_utf8_with_errors(const char32_t* b const __m128i s2 = _mm_maddubs_epi16(s1, simdutf_vec(0x0140)); // [00bb|bbbb|0000|aaaa] => [11bb|bbbb|1110|aaaa] const __m128i s3 = _mm_or_si128(s2, simdutf_vec(0b1100000011100000)); - const __m128i m0 = _mm_andnot_si128(one_or_two_bytes_bytemask, simdutf_vec(0b0100000000000000)); + const __m128i m0 = _mm_andnot_si128(one_or_two_bytes_bytemask, + simdutf_vec(0b0100000000000000)); const __m128i s4 = _mm_xor_si128(s3, m0); #undef simdutf_vec @@ -35015,63 +37109,74 @@ std::pair sse_convert_utf32_to_utf8_with_errors(const char32_t* b const __m128i out1 = _mm_unpackhi_epi16(t2, s4); // 5. compress 32-bit code units into 1, 2 or 3 bytes -- 2 x shuffle - const uint16_t mask = (one_byte_bitmask & 0x5555) | - (one_or_two_bytes_bitmask & 0xaaaa); - if(mask == 0) { + const uint16_t mask = + (one_byte_bitmask & 0x5555) | (one_or_two_bytes_bitmask & 0xaaaa); + if (mask == 0) { // We only have three-byte code units. Use fast path. - const __m128i shuffle = _mm_setr_epi8(2,3,1,6,7,5,10,11,9,14,15,13,-1,-1,-1,-1); + const __m128i shuffle = _mm_setr_epi8(2, 3, 1, 6, 7, 5, 10, 11, 9, 14, + 15, 13, -1, -1, -1, -1); const __m128i utf8_0 = _mm_shuffle_epi8(out0, shuffle); const __m128i utf8_1 = _mm_shuffle_epi8(out1, shuffle); - _mm_storeu_si128((__m128i*)utf8_output, utf8_0); + _mm_storeu_si128((__m128i *)utf8_output, utf8_0); utf8_output += 12; - _mm_storeu_si128((__m128i*)utf8_output, utf8_1); + _mm_storeu_si128((__m128i *)utf8_output, utf8_1); utf8_output += 12; buf += 8; continue; } const uint8_t mask0 = uint8_t(mask); - const uint8_t* row0 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; - const __m128i shuffle0 = _mm_loadu_si128((__m128i*)(row0 + 1)); + const uint8_t *row0 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask0][0]; + const __m128i shuffle0 = _mm_loadu_si128((__m128i *)(row0 + 1)); const __m128i utf8_0 = _mm_shuffle_epi8(out0, shuffle0); const uint8_t mask1 = static_cast(mask >> 8); - const uint8_t* row1 = &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; - const __m128i shuffle1 = _mm_loadu_si128((__m128i*)(row1 + 1)); + const uint8_t *row1 = + &simdutf::tables::utf16_to_utf8::pack_1_2_3_utf8_bytes[mask1][0]; + const __m128i shuffle1 = _mm_loadu_si128((__m128i *)(row1 + 1)); const __m128i utf8_1 = _mm_shuffle_epi8(out1, shuffle1); - _mm_storeu_si128((__m128i*)utf8_output, utf8_0); + _mm_storeu_si128((__m128i *)utf8_output, utf8_0); utf8_output += row0[0]; - _mm_storeu_si128((__m128i*)utf8_output, utf8_1); + _mm_storeu_si128((__m128i *)utf8_output, utf8_1); utf8_output += row1[0]; buf += 8; } else { - // case: at least one 32-bit word produce a surrogate pair in UTF-16 <=> will produce four UTF-8 bytes - // Let us do a scalar fallback. - // It may seem wasteful to use scalar code, but being efficient with SIMD - // in the presence of surrogate pairs may require non-trivial tables. + // case: at least one 32-bit word produce a surrogate pair in UTF-16 <=> + // will produce four UTF-8 bytes Let us do a scalar fallback. It may seem + // wasteful to use scalar code, but being efficient with SIMD in the + // presence of surrogate pairs may require non-trivial tables. size_t forward = 15; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { uint32_t word = buf[k]; - if((word & 0xFFFFFF80)==0) { + if ((word & 0xFFFFFF80) == 0) { *utf8_output++ = char(word); - } else if((word & 0xFFFFF800)==0) { - *utf8_output++ = char((word>>6) | 0b11000000); + } else if ((word & 0xFFFFF800) == 0) { + *utf8_output++ = char((word >> 6) | 0b11000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); - } else if((word &0xFFFF0000 )==0) { - if (word >= 0xD800 && word <= 0xDFFF) { return std::make_pair(result(error_code::SURROGATE, buf - start + k), utf8_output); } - *utf8_output++ = char((word>>12) | 0b11100000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + } else if ((word & 0xFFFF0000) == 0) { + if (word >= 0xD800 && word <= 0xDFFF) { + return std::make_pair( + result(error_code::SURROGATE, buf - start + k), utf8_output); + } + *utf8_output++ = char((word >> 12) | 0b11100000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); } else { - if (word > 0x10FFFF) { return std::make_pair(result(error_code::TOO_LARGE, buf- start + k), utf8_output); } - *utf8_output++ = char((word>>18) | 0b11110000); - *utf8_output++ = char(((word>>12) & 0b111111) | 0b10000000); - *utf8_output++ = char(((word>>6) & 0b111111) | 0b10000000); + if (word > 0x10FFFF) { + return std::make_pair( + result(error_code::TOO_LARGE, buf - start + k), utf8_output); + } + *utf8_output++ = char((word >> 18) | 0b11110000); + *utf8_output++ = char(((word >> 12) & 0b111111) | 0b10000000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); *utf8_output++ = char((word & 0b111111) | 0b10000000); } } @@ -35083,19 +37188,23 @@ std::pair sse_convert_utf32_to_utf8_with_errors(const char32_t* b /* end file src/westmere/sse_convert_utf32_to_utf8.cpp */ /* begin file src/westmere/sse_convert_utf32_to_utf16.cpp */ template -std::pair sse_convert_utf32_to_utf16(const char32_t* buf, size_t len, char16_t* utf16_output) { +std::pair +sse_convert_utf32_to_utf16(const char32_t *buf, size_t len, + char16_t *utf16_output) { - const char32_t* end = buf + len; + const char32_t *end = buf + len; const __m128i v_0000 = _mm_setzero_si128(); const __m128i v_ffff0000 = _mm_set1_epi32((int32_t)0xffff0000); __m128i forbidden_bytemask = _mm_setzero_si128(); while (end - buf >= 8) { - __m128i in = _mm_loadu_si128((__m128i*)buf); - __m128i nextin = _mm_loadu_si128((__m128i*)buf+1); - const __m128i saturation_bytemask = _mm_cmpeq_epi32(_mm_and_si128(_mm_or_si128(in, nextin), v_ffff0000), v_0000); - const uint32_t saturation_bitmask = static_cast(_mm_movemask_epi8(saturation_bytemask)); + __m128i in = _mm_loadu_si128((__m128i *)buf); + __m128i nextin = _mm_loadu_si128((__m128i *)buf + 1); + const __m128i saturation_bytemask = _mm_cmpeq_epi32( + _mm_and_si128(_mm_or_si128(in, nextin), v_ffff0000), v_0000); + const uint32_t saturation_bitmask = + static_cast(_mm_movemask_epi8(saturation_bytemask)); // Check if no bits set above 16th if (saturation_bitmask == 0xffff) { @@ -35104,35 +37213,49 @@ std::pair sse_convert_utf32_to_utf16(const char32_t* const __m128i v_f800 = _mm_set1_epi16((uint16_t)0xf800); const __m128i v_d800 = _mm_set1_epi16((uint16_t)0xd800); - forbidden_bytemask = _mm_or_si128(forbidden_bytemask, _mm_cmpeq_epi16(_mm_and_si128(utf16_packed, v_f800), v_d800)); + forbidden_bytemask = _mm_or_si128( + forbidden_bytemask, + _mm_cmpeq_epi16(_mm_and_si128(utf16_packed, v_f800), v_d800)); if (big_endian) { - const __m128i swap = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + const __m128i swap = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); utf16_packed = _mm_shuffle_epi8(utf16_packed, swap); } - _mm_storeu_si128((__m128i*)utf16_output, utf16_packed); + _mm_storeu_si128((__m128i *)utf16_output, utf16_packed); utf16_output += 8; buf += 8; } else { size_t forward = 7; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { uint32_t word = buf[k]; - if((word & 0xFFFF0000)==0) { + if ((word & 0xFFFF0000) == 0) { // will not generate a surrogate pair - if (word >= 0xD800 && word <= 0xDFFF) { return std::make_pair(nullptr, utf16_output); } - *utf16_output++ = big_endian ? char16_t((uint16_t(word) >> 8) | (uint16_t(word) << 8)) : char16_t(word); + if (word >= 0xD800 && word <= 0xDFFF) { + return std::make_pair(nullptr, utf16_output); + } + *utf16_output++ = + big_endian + ? char16_t((uint16_t(word) >> 8) | (uint16_t(word) << 8)) + : char16_t(word); } else { // will generate a surrogate pair - if (word > 0x10FFFF) { return std::make_pair(nullptr, utf16_output); } + if (word > 0x10FFFF) { + return std::make_pair(nullptr, utf16_output); + } word -= 0x10000; uint16_t high_surrogate = uint16_t(0xD800 + (word >> 10)); uint16_t low_surrogate = uint16_t(0xDC00 + (word & 0x3FF)); if (big_endian) { - high_surrogate = uint16_t((high_surrogate >> 8) | (high_surrogate << 8)); - low_surrogate = uint16_t((low_surrogate >> 8) | (low_surrogate << 8)); + high_surrogate = + uint16_t((high_surrogate >> 8) | (high_surrogate << 8)); + low_surrogate = + uint16_t((low_surrogate >> 8) | (low_surrogate << 8)); } *utf16_output++ = char16_t(high_surrogate); *utf16_output++ = char16_t(low_surrogate); @@ -35143,25 +37266,30 @@ std::pair sse_convert_utf32_to_utf16(const char32_t* } // check for invalid input - if (static_cast(_mm_movemask_epi8(forbidden_bytemask)) != 0) { return std::make_pair(nullptr, utf16_output); } + if (static_cast(_mm_movemask_epi8(forbidden_bytemask)) != 0) { + return std::make_pair(nullptr, utf16_output); + } return std::make_pair(buf, utf16_output); } - template -std::pair sse_convert_utf32_to_utf16_with_errors(const char32_t* buf, size_t len, char16_t* utf16_output) { - const char32_t* start = buf; - const char32_t* end = buf + len; +std::pair +sse_convert_utf32_to_utf16_with_errors(const char32_t *buf, size_t len, + char16_t *utf16_output) { + const char32_t *start = buf; + const char32_t *end = buf + len; const __m128i v_0000 = _mm_setzero_si128(); const __m128i v_ffff0000 = _mm_set1_epi32((int32_t)0xffff0000); while (end - buf >= 8) { - __m128i in = _mm_loadu_si128((__m128i*)buf); - __m128i nextin = _mm_loadu_si128((__m128i*)buf+1); - const __m128i saturation_bytemask = _mm_cmpeq_epi32(_mm_and_si128(_mm_or_si128(in, nextin), v_ffff0000), v_0000); - const uint32_t saturation_bitmask = static_cast(_mm_movemask_epi8(saturation_bytemask)); + __m128i in = _mm_loadu_si128((__m128i *)buf); + __m128i nextin = _mm_loadu_si128((__m128i *)buf + 1); + const __m128i saturation_bytemask = _mm_cmpeq_epi32( + _mm_and_si128(_mm_or_si128(in, nextin), v_ffff0000), v_0000); + const uint32_t saturation_bitmask = + static_cast(_mm_movemask_epi8(saturation_bytemask)); // Check if no bits set above 16th if (saturation_bitmask == 0xffff) { @@ -35170,38 +37298,54 @@ std::pair sse_convert_utf32_to_utf16_with_errors(const char32 const __m128i v_f800 = _mm_set1_epi16((uint16_t)0xf800); const __m128i v_d800 = _mm_set1_epi16((uint16_t)0xd800); - const __m128i forbidden_bytemask = _mm_cmpeq_epi16(_mm_and_si128(utf16_packed, v_f800), v_d800); + const __m128i forbidden_bytemask = + _mm_cmpeq_epi16(_mm_and_si128(utf16_packed, v_f800), v_d800); if (static_cast(_mm_movemask_epi8(forbidden_bytemask)) != 0) { - return std::make_pair(result(error_code::SURROGATE, buf - start), utf16_output); + return std::make_pair(result(error_code::SURROGATE, buf - start), + utf16_output); } if (big_endian) { - const __m128i swap = _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); + const __m128i swap = + _mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); utf16_packed = _mm_shuffle_epi8(utf16_packed, swap); } - _mm_storeu_si128((__m128i*)utf16_output, utf16_packed); + _mm_storeu_si128((__m128i *)utf16_output, utf16_packed); utf16_output += 8; buf += 8; } else { size_t forward = 7; size_t k = 0; - if(size_t(end - buf) < forward + 1) { forward = size_t(end - buf - 1);} - for(; k < forward; k++) { + if (size_t(end - buf) < forward + 1) { + forward = size_t(end - buf - 1); + } + for (; k < forward; k++) { uint32_t word = buf[k]; - if((word & 0xFFFF0000)==0) { + if ((word & 0xFFFF0000) == 0) { // will not generate a surrogate pair - if (word >= 0xD800 && word <= 0xDFFF) { return std::make_pair(result(error_code::SURROGATE, buf - start + k), utf16_output); } - *utf16_output++ = big_endian ? char16_t((uint16_t(word) >> 8) | (uint16_t(word) << 8)) : char16_t(word); + if (word >= 0xD800 && word <= 0xDFFF) { + return std::make_pair( + result(error_code::SURROGATE, buf - start + k), utf16_output); + } + *utf16_output++ = + big_endian + ? char16_t((uint16_t(word) >> 8) | (uint16_t(word) << 8)) + : char16_t(word); } else { // will generate a surrogate pair - if (word > 0x10FFFF) { return std::make_pair(result(error_code::TOO_LARGE, buf - start + k), utf16_output); } + if (word > 0x10FFFF) { + return std::make_pair( + result(error_code::TOO_LARGE, buf - start + k), utf16_output); + } word -= 0x10000; uint16_t high_surrogate = uint16_t(0xD800 + (word >> 10)); uint16_t low_surrogate = uint16_t(0xDC00 + (word & 0x3FF)); if (big_endian) { - high_surrogate = uint16_t((high_surrogate >> 8) | (high_surrogate << 8)); - low_surrogate = uint16_t((low_surrogate >> 8) | (low_surrogate << 8)); + high_surrogate = + uint16_t((high_surrogate >> 8) | (high_surrogate << 8)); + low_surrogate = + uint16_t((low_surrogate >> 8) | (low_surrogate << 8)); } *utf16_output++ = char16_t(high_surrogate); *utf16_output++ = char16_t(low_surrogate); @@ -35274,7 +37418,8 @@ template __m128i lookup_pshufb_improved(const __m128i input) { } template -size_t encode_base64(char *dst, const char *src, size_t srclen, base64_options options) { +size_t encode_base64(char *dst, const char *src, size_t srclen, + base64_options options) { // credit: Wojciech Muła // SSE (lookup: pshufb improved unrolled) const uint8_t *input = (const uint8_t *)src; @@ -35453,7 +37598,8 @@ static inline uint16_t to_base64_mask(__m128i *src, bool *error) { } __m128i check_asso; if (base64_url) { - check_asso = _mm_setr_epi8(0xD,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x3,0x7,0xB,0xE,0xB,0x6); + check_asso = _mm_setr_epi8(0xD, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, + 0x3, 0x7, 0xB, 0xE, 0xB, 0x6); } else { check_asso = _mm_setr_epi8(0x0D, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, @@ -35461,9 +37607,11 @@ static inline uint16_t to_base64_mask(__m128i *src, bool *error) { } __m128i check_values; if (base64_url) { - check_values = _mm_setr_epi8(uint8_t(0x80),uint8_t(0x80),uint8_t(0x80),uint8_t(0x80),uint8_t(0xCF), - uint8_t(0xBF),uint8_t(0xB6),uint8_t(0xA6),uint8_t(0xB5),uint8_t(0xA1),0x0,uint8_t(0x80), - 0x0,uint8_t(0x80),0x0,uint8_t(0x80)); + check_values = _mm_setr_epi8(uint8_t(0x80), uint8_t(0x80), uint8_t(0x80), + uint8_t(0x80), uint8_t(0xCF), uint8_t(0xBF), + uint8_t(0xB6), uint8_t(0xA6), uint8_t(0xB5), + uint8_t(0xA1), 0x0, uint8_t(0x80), 0x0, + uint8_t(0x80), 0x0, uint8_t(0x80)); } else { check_values = @@ -35472,7 +37620,7 @@ static inline uint16_t to_base64_mask(__m128i *src, bool *error) { int8_t(0xB5), int8_t(0x86), int8_t(0xD1), int8_t(0x80), int8_t(0xB1), int8_t(0x80), int8_t(0x91), int8_t(0x80)); } - const __m128i shifted =_mm_srli_epi32(*src, 3); + const __m128i shifted = _mm_srli_epi32(*src, 3); const __m128i delta_hash = _mm_avg_epu8(_mm_shuffle_epi8(delta_asso, *src), shifted); @@ -35522,8 +37670,8 @@ static inline uint64_t compress_block(block64 *b, uint64_t mask, char *output) { return _mm_popcnt_u64(nmask); } -// The caller of this function is responsible to ensure that there are 64 bytes available -// from reading at src. The data is read into a block64 structure. +// The caller of this function is responsible to ensure that there are 64 bytes +// available from reading at src. The data is read into a block64 structure. static inline void load_block(block64 *b, const char *src) { b->chunks[0] = _mm_loadu_si128(reinterpret_cast(src)); b->chunks[1] = _mm_loadu_si128(reinterpret_cast(src + 16)); @@ -35531,8 +37679,8 @@ static inline void load_block(block64 *b, const char *src) { b->chunks[3] = _mm_loadu_si128(reinterpret_cast(src + 48)); } -// The caller of this function is responsible to ensure that there are 128 bytes available -// from reading at src. The data is read into a block64 structure. +// The caller of this function is responsible to ensure that there are 128 bytes +// available from reading at src. The data is read into a block64 structure. static inline void load_block(block64 *b, const char16_t *src) { __m128i m1 = _mm_loadu_si128(reinterpret_cast(src)); __m128i m2 = _mm_loadu_si128(reinterpret_cast(src + 8)); @@ -35599,12 +37747,15 @@ static inline void base64_decode_block_safe(char *out, block64 *b) { template result compress_decode_base64(char *dst, const chartype *src, size_t srclen, - base64_options options) { + base64_options options, + last_chunk_handling_options last_chunk_options) { const uint8_t *to_base64 = base64_url ? tables::base64::to_base64_url_value : tables::base64::to_base64_value; - size_t equallocation = srclen; // location of the first padding character if any + size_t equallocation = + srclen; // location of the first padding character if any // skip trailing spaces - while (srclen > 0 && scalar::base64::is_eight_byte(src[srclen - 1]) && to_base64[uint8_t(src[srclen - 1])] == 64) { + while (srclen > 0 && scalar::base64::is_eight_byte(src[srclen - 1]) && + to_base64[uint8_t(src[srclen - 1])] == 64) { srclen--; } size_t equalsigns = 0; @@ -35613,7 +37764,8 @@ result compress_decode_base64(char *dst, const chartype *src, size_t srclen, srclen--; equalsigns = 1; // skip trailing spaces - while (srclen > 0 && scalar::base64::is_eight_byte(src[srclen - 1]) && to_base64[uint8_t(src[srclen - 1])] == 64) { + while (srclen > 0 && scalar::base64::is_eight_byte(src[srclen - 1]) && + to_base64[uint8_t(src[srclen - 1])] == 64) { srclen--; } if (srclen > 0 && src[srclen - 1] == '=') { @@ -35622,6 +37774,12 @@ result compress_decode_base64(char *dst, const chartype *src, size_t srclen, equalsigns = 2; } } + if (srclen == 0) { + if (equalsigns > 0) { + return {INVALID_BASE64_CHARACTER, equallocation}; + } + return {SUCCESS, 0}; + } char *end_of_safe_64byte_zone = (srclen + 3) / 4 * 3 >= 63 ? dst + (srclen + 3) / 4 * 3 - 63 : dst; @@ -35643,7 +37801,8 @@ result compress_decode_base64(char *dst, const chartype *src, size_t srclen, uint64_t badcharmask = to_base64_mask(&b, &error); if (error) { src -= 64; - while (src < srcend && scalar::base64::is_eight_byte(*src) && to_base64[uint8_t(*src)] <= 64) { + while (src < srcend && scalar::base64::is_eight_byte(*src) && + to_base64[uint8_t(*src)] <= 64) { src++; } return {error_code::INVALID_BASE64_CHARACTER, size_t(src - srcinit)}; @@ -35732,71 +37891,38 @@ result compress_decode_base64(char *dst, const chartype *src, size_t srclen, buffer_start += 4; } // we may have 1, 2 or 3 bytes left and we need to decode them so let us - // bring in src content + // backtrack int leftover = int(bufferptr - buffer_start); - if (leftover > 0) { - while (leftover < 4 && src < srcend) { - uint8_t val = to_base64[uint8_t(*src)]; - if (!scalar::base64::is_eight_byte(*src) || val > 64) { - return {error_code::INVALID_BASE64_CHARACTER, size_t(src - srcinit)}; - } - buffer_start[leftover] = char(val); - leftover += (val <= 63); - src++; - } - - if (leftover == 1) { - return {BASE64_INPUT_REMAINDER, size_t(dst - dstinit)}; - } - if (leftover == 2) { - uint32_t triple = (uint32_t(buffer_start[0]) << 3 * 6) + - (uint32_t(buffer_start[1]) << 2 * 6); - triple = scalar::utf32::swap_bytes(triple); - triple >>= 8; - std::memcpy(dst, &triple, 1); - dst += 1; - } else if (leftover == 3) { - uint32_t triple = (uint32_t(buffer_start[0]) << 3 * 6) + - (uint32_t(buffer_start[1]) << 2 * 6) + - (uint32_t(buffer_start[2]) << 1 * 6); - triple = scalar::utf32::swap_bytes(triple); - - triple >>= 8; - - std::memcpy(dst, &triple, 2); - dst += 2; - } else { - uint32_t triple = ((uint32_t(uint8_t(buffer_start[0])) << 3 * 6) + - (uint32_t(uint8_t(buffer_start[1])) << 2 * 6) + - (uint32_t(uint8_t(buffer_start[2])) << 1 * 6) + - (uint32_t(uint8_t(buffer_start[3])) << 0 * 6)) - << 8; - triple = scalar::utf32::swap_bytes(triple); - std::memcpy(dst, &triple, 3); - dst += 3; + while (leftover > 0) { + while (to_base64[uint8_t(*(src - 1))] == 64) { + src--; } + src--; + leftover--; } } if (src < srcend + equalsigns) { - result r = - scalar::base64::base64_tail_decode(dst, src, srcend - src, options); + result r = scalar::base64::base64_tail_decode( + dst, src, srcend - src, equalsigns, options, last_chunk_options); if (r.error == error_code::INVALID_BASE64_CHARACTER) { r.count += size_t(src - srcinit); return r; } else { r.count += size_t(dst - dstinit); } - if(r.error == error_code::SUCCESS && equalsigns > 0) { + if (last_chunk_options != stop_before_partial && + r.error == error_code::SUCCESS && equalsigns > 0) { // additional checks - if((r.count % 3 == 0) || ((r.count % 3) + 1 + equalsigns != 4)) { + if ((r.count % 3 == 0) || ((r.count % 3) + 1 + equalsigns != 4)) { r.error = error_code::INVALID_BASE64_CHARACTER; r.count = equallocation; } } return r; } - if(equalsigns > 0) { - if((size_t(dst - dstinit) % 3 == 0) || ((size_t(dst - dstinit) % 3) + 1 + equalsigns != 4)) { + if (equalsigns > 0) { + if ((size_t(dst - dstinit) % 3 == 0) || + ((size_t(dst - dstinit) % 3) + 1 + equalsigns != 4)) { return {INVALID_BASE64_CHARACTER, equallocation}; } } @@ -35813,9 +37939,9 @@ namespace simdutf { namespace westmere { namespace { -// Walks through a buffer in block-sized increments, loading the last part with spaces -template -struct buf_block_reader { +// Walks through a buffer in block-sized increments, loading the last part with +// spaces +template struct buf_block_reader { public: simdutf_really_inline buf_block_reader(const uint8_t *_buf, size_t _len); simdutf_really_inline size_t block_index(); @@ -35824,14 +37950,16 @@ struct buf_block_reader { /** * Get the last block, padded with spaces. * - * There will always be a last block, with at least 1 byte, unless len == 0 (in which case this - * function fills the buffer with spaces and returns 0. In particular, if len == STEP_SIZE there - * will be 0 full_blocks and 1 remainder block with STEP_SIZE bytes and no spaces for padding. + * There will always be a last block, with at least 1 byte, unless len == 0 + * (in which case this function fills the buffer with spaces and returns 0. In + * particular, if len == STEP_SIZE there will be 0 full_blocks and 1 remainder + * block with STEP_SIZE bytes and no spaces for padding. * * @return the number of effective characters in the last block. */ simdutf_really_inline size_t get_remainder(uint8_t *dst) const; simdutf_really_inline void advance(); + private: const uint8_t *buf; const size_t len; @@ -35840,9 +37968,10 @@ struct buf_block_reader { }; // Routines to print masks and text for debugging bitmask operations -simdutf_unused static char * format_input_text_64(const uint8_t *text) { - static char *buf = reinterpret_cast(malloc(sizeof(simd8x64) + 1)); - for (size_t i=0; i); i++) { +simdutf_unused static char *format_input_text_64(const uint8_t *text) { + static char *buf = + reinterpret_cast(malloc(sizeof(simd8x64) + 1)); + for (size_t i = 0; i < sizeof(simd8x64); i++) { buf[i] = int8_t(text[i]) < ' ' ? '_' : int8_t(text[i]); } buf[sizeof(simd8x64)] = '\0'; @@ -35850,50 +37979,64 @@ simdutf_unused static char * format_input_text_64(const uint8_t *text) { } // Routines to print masks and text for debugging bitmask operations -simdutf_unused static char * format_input_text(const simd8x64& in) { - static char *buf = reinterpret_cast(malloc(sizeof(simd8x64) + 1)); - in.store(reinterpret_cast(buf)); - for (size_t i=0; i); i++) { - if (buf[i] < ' ') { buf[i] = '_'; } +simdutf_unused static char *format_input_text(const simd8x64 &in) { + static char *buf = + reinterpret_cast(malloc(sizeof(simd8x64) + 1)); + in.store(reinterpret_cast(buf)); + for (size_t i = 0; i < sizeof(simd8x64); i++) { + if (buf[i] < ' ') { + buf[i] = '_'; + } } buf[sizeof(simd8x64)] = '\0'; return buf; } -simdutf_unused static char * format_mask(uint64_t mask) { - static char *buf = reinterpret_cast(malloc(64 + 1)); - for (size_t i=0; i<64; i++) { +simdutf_unused static char *format_mask(uint64_t mask) { + static char *buf = reinterpret_cast(malloc(64 + 1)); + for (size_t i = 0; i < 64; i++) { buf[i] = (mask & (size_t(1) << i)) ? 'X' : ' '; } buf[64] = '\0'; return buf; } -template -simdutf_really_inline buf_block_reader::buf_block_reader(const uint8_t *_buf, size_t _len) : buf{_buf}, len{_len}, lenminusstep{len < STEP_SIZE ? 0 : len - STEP_SIZE}, idx{0} {} +template +simdutf_really_inline +buf_block_reader::buf_block_reader(const uint8_t *_buf, size_t _len) + : buf{_buf}, len{_len}, lenminusstep{len < STEP_SIZE ? 0 : len - STEP_SIZE}, + idx{0} {} -template -simdutf_really_inline size_t buf_block_reader::block_index() { return idx; } +template +simdutf_really_inline size_t buf_block_reader::block_index() { + return idx; +} -template +template simdutf_really_inline bool buf_block_reader::has_full_block() const { return idx < lenminusstep; } -template -simdutf_really_inline const uint8_t *buf_block_reader::full_block() const { +template +simdutf_really_inline const uint8_t * +buf_block_reader::full_block() const { return &buf[idx]; } -template -simdutf_really_inline size_t buf_block_reader::get_remainder(uint8_t *dst) const { - if(len == idx) { return 0; } // memcpy(dst, null, 0) will trigger an error with some sanitizers - std::memset(dst, 0x20, STEP_SIZE); // std::memset STEP_SIZE because it is more efficient to write out 8 or 16 bytes at once. +template +simdutf_really_inline size_t +buf_block_reader::get_remainder(uint8_t *dst) const { + if (len == idx) { + return 0; + } // memcpy(dst, null, 0) will trigger an error with some sanitizers + std::memset(dst, 0x20, + STEP_SIZE); // std::memset STEP_SIZE because it is more efficient + // to write out 8 or 16 bytes at once. std::memcpy(dst, buf + idx, len - idx); return len - idx; } -template +template simdutf_really_inline void buf_block_reader::advance() { idx += STEP_SIZE; } @@ -35910,38 +38053,39 @@ namespace utf8_validation { using namespace simd; - simdutf_really_inline simd8 check_special_cases(const simd8 input, const simd8 prev1) { -// Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) -// Bit 1 = Too Long (ASCII followed by continuation) -// Bit 2 = Overlong 3-byte -// Bit 4 = Surrogate -// Bit 5 = Overlong 2-byte -// Bit 7 = Two Continuations - constexpr const uint8_t TOO_SHORT = 1<<0; // 11______ 0_______ - // 11______ 11______ - constexpr const uint8_t TOO_LONG = 1<<1; // 0_______ 10______ - constexpr const uint8_t OVERLONG_3 = 1<<2; // 11100000 100_____ - constexpr const uint8_t SURROGATE = 1<<4; // 11101101 101_____ - constexpr const uint8_t OVERLONG_2 = 1<<5; // 1100000_ 10______ - constexpr const uint8_t TWO_CONTS = 1<<7; // 10______ 10______ - constexpr const uint8_t TOO_LARGE = 1<<3; // 11110100 1001____ - // 11110100 101_____ - // 11110101 1001____ - // 11110101 101_____ - // 1111011_ 1001____ - // 1111011_ 101_____ - // 11111___ 1001____ - // 11111___ 101_____ - constexpr const uint8_t TOO_LARGE_1000 = 1<<6; - // 11110101 1000____ - // 1111011_ 1000____ - // 11111___ 1000____ - constexpr const uint8_t OVERLONG_4 = 1<<6; // 11110000 1000____ - - const simd8 byte_1_high = prev1.shr<4>().lookup_16( +simdutf_really_inline simd8 +check_special_cases(const simd8 input, const simd8 prev1) { + // Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) + // Bit 1 = Too Long (ASCII followed by continuation) + // Bit 2 = Overlong 3-byte + // Bit 4 = Surrogate + // Bit 5 = Overlong 2-byte + // Bit 7 = Two Continuations + constexpr const uint8_t TOO_SHORT = 1 << 0; // 11______ 0_______ + // 11______ 11______ + constexpr const uint8_t TOO_LONG = 1 << 1; // 0_______ 10______ + constexpr const uint8_t OVERLONG_3 = 1 << 2; // 11100000 100_____ + constexpr const uint8_t SURROGATE = 1 << 4; // 11101101 101_____ + constexpr const uint8_t OVERLONG_2 = 1 << 5; // 1100000_ 10______ + constexpr const uint8_t TWO_CONTS = 1 << 7; // 10______ 10______ + constexpr const uint8_t TOO_LARGE = 1 << 3; // 11110100 1001____ + // 11110100 101_____ + // 11110101 1001____ + // 11110101 101_____ + // 1111011_ 1001____ + // 1111011_ 101_____ + // 11111___ 1001____ + // 11111___ 101_____ + constexpr const uint8_t TOO_LARGE_1000 = 1 << 6; + // 11110101 1000____ + // 1111011_ 1000____ + // 11111___ 1000____ + constexpr const uint8_t OVERLONG_4 = 1 << 6; // 11110000 1000____ + + const simd8 byte_1_high = prev1.shr<4>().lookup_16( // 0_______ ________ - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, // 10______ ________ TWO_CONTS, TWO_CONTS, TWO_CONTS, TWO_CONTS, // 1100____ ________ @@ -35951,137 +38095,173 @@ using namespace simd; // 1110____ ________ TOO_SHORT | OVERLONG_3 | SURROGATE, // 1111____ ________ - TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4 - ); - constexpr const uint8_t CARRY = TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . - const simd8 byte_1_low = (prev1 & 0x0F).lookup_16( - // ____0000 ________ - CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, - // ____0001 ________ - CARRY | OVERLONG_2, - // ____001_ ________ - CARRY, - CARRY, - - // ____0100 ________ - CARRY | TOO_LARGE, - // ____0101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____011_ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - - // ____1___ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____1101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000 - ); - const simd8 byte_2_high = input.shr<4>().lookup_16( + TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4); + constexpr const uint8_t CARRY = + TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . + const simd8 byte_1_low = + (prev1 & 0x0F) + .lookup_16( + // ____0000 ________ + CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, + // ____0001 ________ + CARRY | OVERLONG_2, + // ____001_ ________ + CARRY, CARRY, + + // ____0100 ________ + CARRY | TOO_LARGE, + // ____0101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____011_ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + + // ____1___ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____1101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000); + const simd8 byte_2_high = input.shr<4>().lookup_16( // ________ 0_______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, // ________ 1000____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | OVERLONG_4, + TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | + OVERLONG_4, // ________ 1001____ TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE, // ________ 101_____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, // ________ 11______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT - ); - return (byte_1_high & byte_1_low & byte_2_high); - } - simdutf_really_inline simd8 check_multibyte_lengths(const simd8 input, - const simd8 prev_input, const simd8 sc) { - simd8 prev2 = input.prev<2>(prev_input); - simd8 prev3 = input.prev<3>(prev_input); - simd8 must23 = simd8(must_be_2_3_continuation(prev2, prev3)); - simd8 must23_80 = must23 & uint8_t(0x80); - return must23_80 ^ sc; - } + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT); + return (byte_1_high & byte_1_low & byte_2_high); +} +simdutf_really_inline simd8 +check_multibyte_lengths(const simd8 input, + const simd8 prev_input, + const simd8 sc) { + simd8 prev2 = input.prev<2>(prev_input); + simd8 prev3 = input.prev<3>(prev_input); + simd8 must23 = + simd8(must_be_2_3_continuation(prev2, prev3)); + simd8 must23_80 = must23 & uint8_t(0x80); + return must23_80 ^ sc; +} + +// +// Return nonzero if there are incomplete multibyte characters at the end of the +// block: e.g. if there is a 4-byte character, but it is 3 bytes from the end. +// +simdutf_really_inline simd8 is_incomplete(const simd8 input) { + // If the previous input's last 3 bytes match this, they're too short (they + // ended at EOF): + // ... 1111____ 111_____ 11______ + static const uint8_t max_array[32] = {255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 0b11110000u - 1, + 0b11100000u - 1, + 0b11000000u - 1}; + const simd8 max_value( + &max_array[sizeof(max_array) - sizeof(simd8)]); + return input.gt_bits(max_value); +} + +struct utf8_checker { + // If this is nonzero, there has been a UTF-8 error. + simd8 error; + // The last input we received + simd8 prev_input_block; + // Whether the last input we received was incomplete (used for ASCII fast + // path) + simd8 prev_incomplete; // - // Return nonzero if there are incomplete multibyte characters at the end of the block: - // e.g. if there is a 4-byte character, but it is 3 bytes from the end. + // Check whether the current bytes are valid UTF-8. // - simdutf_really_inline simd8 is_incomplete(const simd8 input) { - // If the previous input's last 3 bytes match this, they're too short (they ended at EOF): - // ... 1111____ 111_____ 11______ - static const uint8_t max_array[32] = { - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0b11110000u-1, 0b11100000u-1, 0b11000000u-1 - }; - const simd8 max_value(&max_array[sizeof(max_array)-sizeof(simd8)]); - return input.gt_bits(max_value); - } - - struct utf8_checker { - // If this is nonzero, there has been a UTF-8 error. - simd8 error; - // The last input we received - simd8 prev_input_block; - // Whether the last input we received was incomplete (used for ASCII fast path) - simd8 prev_incomplete; - - // - // Check whether the current bytes are valid UTF-8. - // - simdutf_really_inline void check_utf8_bytes(const simd8 input, const simd8 prev_input) { - // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ lead bytes - // (2, 3, 4-byte leads become large positive numbers instead of small negative numbers) - simd8 prev1 = input.prev<1>(prev_input); - simd8 sc = check_special_cases(input, prev1); - this->error |= check_multibyte_lengths(input, prev_input, sc); - } - - // The only problem that can happen at EOF is that a multibyte character is too short - // or a byte value too large in the last bytes: check_special_cases only checks for bytes - // too large in the first of two bytes. - simdutf_really_inline void check_eof() { - // If the previous block had incomplete UTF-8 characters at the end, an ASCII block can't - // possibly finish them. + simdutf_really_inline void check_utf8_bytes(const simd8 input, + const simd8 prev_input) { + // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ + // lead bytes (2, 3, 4-byte leads become large positive numbers instead of + // small negative numbers) + simd8 prev1 = input.prev<1>(prev_input); + simd8 sc = check_special_cases(input, prev1); + this->error |= check_multibyte_lengths(input, prev_input, sc); + } + + // The only problem that can happen at EOF is that a multibyte character is + // too short or a byte value too large in the last bytes: check_special_cases + // only checks for bytes too large in the first of two bytes. + simdutf_really_inline void check_eof() { + // If the previous block had incomplete UTF-8 characters at the end, an + // ASCII block can't possibly finish them. + this->error |= this->prev_incomplete; + } + + simdutf_really_inline void check_next_input(const simd8x64 &input) { + if (simdutf_likely(is_ascii(input))) { this->error |= this->prev_incomplete; - } - - simdutf_really_inline void check_next_input(const simd8x64& input) { - if(simdutf_likely(is_ascii(input))) { - this->error |= this->prev_incomplete; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], this->prev_input_block); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], this->prev_input_block); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - this->prev_incomplete = is_incomplete(input.chunks[simd8x64::NUM_CHUNKS-1]); - this->prev_input_block = input.chunks[simd8x64::NUM_CHUNKS-1]; - + } else { + // you might think that a for-loop would work, but under Visual Studio, it + // is not good enough. + static_assert((simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], this->prev_input_block); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], this->prev_input_block); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); } + this->prev_incomplete = + is_incomplete(input.chunks[simd8x64::NUM_CHUNKS - 1]); + this->prev_input_block = input.chunks[simd8x64::NUM_CHUNKS - 1]; } + } - // do not forget to call check_eof! - simdutf_really_inline bool errors() const { - return this->error.any_bits_set_anywhere(); - } + // do not forget to call check_eof! + simdutf_really_inline bool errors() const { + return this->error.any_bits_set_anywhere(); + } - }; // struct utf8_checker +}; // struct utf8_checker } // namespace utf8_validation using utf8_validation::utf8_checker; @@ -36099,97 +38279,109 @@ namespace utf8_validation { /** * Validates that the string is actual UTF-8. */ -template -bool generic_validate_utf8(const uint8_t * input, size_t length) { - checker c{}; - buf_block_reader<64> reader(input, length); - while (reader.has_full_block()) { - simd::simd8x64 in(reader.full_block()); - c.check_next_input(in); - reader.advance(); - } - uint8_t block[64]{}; - reader.get_remainder(block); - simd::simd8x64 in(block); +template +bool generic_validate_utf8(const uint8_t *input, size_t length) { + checker c{}; + buf_block_reader<64> reader(input, length); + while (reader.has_full_block()) { + simd::simd8x64 in(reader.full_block()); c.check_next_input(in); reader.advance(); - c.check_eof(); - return !c.errors(); + } + uint8_t block[64]{}; + reader.get_remainder(block); + simd::simd8x64 in(block); + c.check_next_input(in); + reader.advance(); + c.check_eof(); + return !c.errors(); } -bool generic_validate_utf8(const char * input, size_t length) { - return generic_validate_utf8(reinterpret_cast(input),length); +bool generic_validate_utf8(const char *input, size_t length) { + return generic_validate_utf8( + reinterpret_cast(input), length); } /** * Validates that the string is actual UTF-8 and stops on errors. */ -template -result generic_validate_utf8_with_errors(const uint8_t * input, size_t length) { - checker c{}; - buf_block_reader<64> reader(input, length); - size_t count{0}; - while (reader.has_full_block()) { - simd::simd8x64 in(reader.full_block()); - c.check_next_input(in); - if(c.errors()) { - if (count != 0) { count--; } // Sometimes the error is only detected in the next chunk - result res = scalar::utf8::rewind_and_validate_with_errors(reinterpret_cast(input), reinterpret_cast(input + count), length - count); - res.count += count; - return res; - } - reader.advance(); - count += 64; - } - uint8_t block[64]{}; - reader.get_remainder(block); - simd::simd8x64 in(block); +template +result generic_validate_utf8_with_errors(const uint8_t *input, size_t length) { + checker c{}; + buf_block_reader<64> reader(input, length); + size_t count{0}; + while (reader.has_full_block()) { + simd::simd8x64 in(reader.full_block()); c.check_next_input(in); - reader.advance(); - c.check_eof(); if (c.errors()) { - if (count != 0) { count--; } // Sometimes the error is only detected in the next chunk - result res = scalar::utf8::rewind_and_validate_with_errors(reinterpret_cast(input), reinterpret_cast(input) + count, length - count); + if (count != 0) { + count--; + } // Sometimes the error is only detected in the next chunk + result res = scalar::utf8::rewind_and_validate_with_errors( + reinterpret_cast(input), + reinterpret_cast(input + count), length - count); res.count += count; return res; - } else { - return result(error_code::SUCCESS, length); } + reader.advance(); + count += 64; + } + uint8_t block[64]{}; + reader.get_remainder(block); + simd::simd8x64 in(block); + c.check_next_input(in); + reader.advance(); + c.check_eof(); + if (c.errors()) { + if (count != 0) { + count--; + } // Sometimes the error is only detected in the next chunk + result res = scalar::utf8::rewind_and_validate_with_errors( + reinterpret_cast(input), + reinterpret_cast(input) + count, length - count); + res.count += count; + return res; + } else { + return result(error_code::SUCCESS, length); + } } -result generic_validate_utf8_with_errors(const char * input, size_t length) { - return generic_validate_utf8_with_errors(reinterpret_cast(input),length); +result generic_validate_utf8_with_errors(const char *input, size_t length) { + return generic_validate_utf8_with_errors( + reinterpret_cast(input), length); } -template -bool generic_validate_ascii(const uint8_t * input, size_t length) { - buf_block_reader<64> reader(input, length); - uint8_t blocks[64]{}; - simd::simd8x64 running_or(blocks); - while (reader.has_full_block()) { - simd::simd8x64 in(reader.full_block()); - running_or |= in; - reader.advance(); - } - uint8_t block[64]{}; - reader.get_remainder(block); - simd::simd8x64 in(block); +template +bool generic_validate_ascii(const uint8_t *input, size_t length) { + buf_block_reader<64> reader(input, length); + uint8_t blocks[64]{}; + simd::simd8x64 running_or(blocks); + while (reader.has_full_block()) { + simd::simd8x64 in(reader.full_block()); running_or |= in; - return running_or.is_ascii(); + reader.advance(); + } + uint8_t block[64]{}; + reader.get_remainder(block); + simd::simd8x64 in(block); + running_or |= in; + return running_or.is_ascii(); } -bool generic_validate_ascii(const char * input, size_t length) { - return generic_validate_ascii(reinterpret_cast(input),length); +bool generic_validate_ascii(const char *input, size_t length) { + return generic_validate_ascii( + reinterpret_cast(input), length); } -template -result generic_validate_ascii_with_errors(const uint8_t * input, size_t length) { +template +result generic_validate_ascii_with_errors(const uint8_t *input, size_t length) { buf_block_reader<64> reader(input, length); size_t count{0}; while (reader.has_full_block()) { simd::simd8x64 in(reader.full_block()); if (!in.is_ascii()) { - result res = scalar::ascii::validate_with_errors(reinterpret_cast(input + count), length - count); + result res = scalar::ascii::validate_with_errors( + reinterpret_cast(input + count), length - count); return result(res.error, count + res.count); } reader.advance(); @@ -36200,15 +38392,17 @@ result generic_validate_ascii_with_errors(const uint8_t * input, size_t length) reader.get_remainder(block); simd::simd8x64 in(block); if (!in.is_ascii()) { - result res = scalar::ascii::validate_with_errors(reinterpret_cast(input + count), length - count); + result res = scalar::ascii::validate_with_errors( + reinterpret_cast(input + count), length - count); return result(res.error, count + res.count); } else { return result(error_code::SUCCESS, length); } } -result generic_validate_ascii_with_errors(const char * input, size_t length) { - return generic_validate_ascii_with_errors(reinterpret_cast(input),length); +result generic_validate_ascii_with_errors(const char *input, size_t length) { + return generic_validate_ascii_with_errors( + reinterpret_cast(input), length); } } // namespace utf8_validation @@ -36219,7 +38413,6 @@ result generic_validate_ascii_with_errors(const char * input, size_t length) { // transcoding from UTF-8 to UTF-16 /* begin file src/generic/utf8_to_utf16/valid_utf8_to_utf16.h */ - namespace simdutf { namespace westmere { namespace { @@ -36228,36 +38421,39 @@ namespace utf8_to_utf16 { using namespace simd; template -simdutf_warn_unused size_t convert_valid(const char* input, size_t size, - char16_t* utf16_output) noexcept { - // The implementation is not specific to haswell and should be moved to the generic directory. +simdutf_warn_unused size_t convert_valid(const char *input, size_t size, + char16_t *utf16_output) noexcept { + // The implementation is not specific to haswell and should be moved to the + // generic directory. size_t pos = 0; - char16_t* start{utf16_output}; + char16_t *start{utf16_output}; const size_t safety_margin = 16; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - // this loop could be unrolled further. For example, we could process the mask - // far more than 64 bytes. + while (pos + 64 + safety_margin <= size) { + // this loop could be unrolled further. For example, we could process the + // mask far more than 64 bytes. simd8x64 in(reinterpret_cast(input + pos)); - if(in.is_ascii()) { + if (in.is_ascii()) { in.store_ascii_as_utf16(utf16_output); utf16_output += 64; pos += 64; } else { - // Slow path. We hope that the compiler will recognize that this is a slow path. - // Anything that is not a continuation mask is a 'leading byte', that is, the - // start of a new code point. + // Slow path. We hope that the compiler will recognize that this is a slow + // path. Anything that is not a continuation mask is a 'leading byte', + // that is, the start of a new code point. uint64_t utf8_continuation_mask = in.lt(-65 + 1); - // -65 is 0b10111111 in two-complement's, so largest possible continuation byte + // -65 is 0b10111111 in two-complement's, so largest possible continuation + // byte uint64_t utf8_leading_mask = ~utf8_continuation_mask; - // The *start* of code points is not so useful, rather, we want the *end* of code points. - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; + // The *start* of code points is not so useful, rather, we want the *end* + // of code points. + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; // We process in blocks of up to 12 bytes except possibly // for fast paths which may process up to 16 bytes. For the // slow path to work, we should have at least 12 input bytes left. size_t max_starting_point = (pos + 64) - 12; // Next loop is going to run at least five times when using solely // the slow/regular path, and at least four times if there are fast paths. - while(pos < max_starting_point) { + while (pos < max_starting_point) { // Performance note: our ability to compute 'consumed' and // then shift and recompute is critical. If there is a // latency of, say, 4 cycles on getting 'consumed', then @@ -36271,8 +38467,8 @@ simdutf_warn_unused size_t convert_valid(const char* input, size_t size, // Thus we may allow convert_masked_utf8_to_utf16 to process // more bytes at a time under a fast-path mode where 16 bytes // are consumed at once (e.g., when encountering ASCII). - size_t consumed = convert_masked_utf8_to_utf16(input + pos, - utf8_end_of_code_point_mask, utf16_output); + size_t consumed = convert_masked_utf8_to_utf16( + input + pos, utf8_end_of_code_point_mask, utf16_output); pos += consumed; utf8_end_of_code_point_mask >>= consumed; } @@ -36282,7 +38478,8 @@ simdutf_warn_unused size_t convert_valid(const char* input, size_t size, // 85% to 90% efficiency. } } - utf16_output += scalar::utf8_to_utf16::convert_valid(input + pos, size - pos, utf16_output); + utf16_output += scalar::utf8_to_utf16::convert_valid( + input + pos, size - pos, utf16_output); return utf16_output - start; } @@ -36293,46 +38490,45 @@ simdutf_warn_unused size_t convert_valid(const char* input, size_t size, /* end file src/generic/utf8_to_utf16/valid_utf8_to_utf16.h */ /* begin file src/generic/utf8_to_utf16/utf8_to_utf16.h */ - namespace simdutf { namespace westmere { namespace { namespace utf8_to_utf16 { using namespace simd; - - simdutf_really_inline simd8 check_special_cases(const simd8 input, const simd8 prev1) { -// Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) -// Bit 1 = Too Long (ASCII followed by continuation) -// Bit 2 = Overlong 3-byte -// Bit 4 = Surrogate -// Bit 5 = Overlong 2-byte -// Bit 7 = Two Continuations - constexpr const uint8_t TOO_SHORT = 1<<0; // 11______ 0_______ - // 11______ 11______ - constexpr const uint8_t TOO_LONG = 1<<1; // 0_______ 10______ - constexpr const uint8_t OVERLONG_3 = 1<<2; // 11100000 100_____ - constexpr const uint8_t SURROGATE = 1<<4; // 11101101 101_____ - constexpr const uint8_t OVERLONG_2 = 1<<5; // 1100000_ 10______ - constexpr const uint8_t TWO_CONTS = 1<<7; // 10______ 10______ - constexpr const uint8_t TOO_LARGE = 1<<3; // 11110100 1001____ - // 11110100 101_____ - // 11110101 1001____ - // 11110101 101_____ - // 1111011_ 1001____ - // 1111011_ 101_____ - // 11111___ 1001____ - // 11111___ 101_____ - constexpr const uint8_t TOO_LARGE_1000 = 1<<6; - // 11110101 1000____ - // 1111011_ 1000____ - // 11111___ 1000____ - constexpr const uint8_t OVERLONG_4 = 1<<6; // 11110000 1000____ - - const simd8 byte_1_high = prev1.shr<4>().lookup_16( +simdutf_really_inline simd8 +check_special_cases(const simd8 input, const simd8 prev1) { + // Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) + // Bit 1 = Too Long (ASCII followed by continuation) + // Bit 2 = Overlong 3-byte + // Bit 4 = Surrogate + // Bit 5 = Overlong 2-byte + // Bit 7 = Two Continuations + constexpr const uint8_t TOO_SHORT = 1 << 0; // 11______ 0_______ + // 11______ 11______ + constexpr const uint8_t TOO_LONG = 1 << 1; // 0_______ 10______ + constexpr const uint8_t OVERLONG_3 = 1 << 2; // 11100000 100_____ + constexpr const uint8_t SURROGATE = 1 << 4; // 11101101 101_____ + constexpr const uint8_t OVERLONG_2 = 1 << 5; // 1100000_ 10______ + constexpr const uint8_t TWO_CONTS = 1 << 7; // 10______ 10______ + constexpr const uint8_t TOO_LARGE = 1 << 3; // 11110100 1001____ + // 11110100 101_____ + // 11110101 1001____ + // 11110101 101_____ + // 1111011_ 1001____ + // 1111011_ 101_____ + // 11111___ 1001____ + // 11111___ 101_____ + constexpr const uint8_t TOO_LARGE_1000 = 1 << 6; + // 11110101 1000____ + // 1111011_ 1000____ + // 11111___ 1000____ + constexpr const uint8_t OVERLONG_4 = 1 << 6; // 11110000 1000____ + + const simd8 byte_1_high = prev1.shr<4>().lookup_16( // 0_______ ________ - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, // 10______ ________ TWO_CONTS, TWO_CONTS, TWO_CONTS, TWO_CONTS, // 1100____ ________ @@ -36342,260 +38538,287 @@ using namespace simd; // 1110____ ________ TOO_SHORT | OVERLONG_3 | SURROGATE, // 1111____ ________ - TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4 - ); - constexpr const uint8_t CARRY = TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . - const simd8 byte_1_low = (prev1 & 0x0F).lookup_16( - // ____0000 ________ - CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, - // ____0001 ________ - CARRY | OVERLONG_2, - // ____001_ ________ - CARRY, - CARRY, - - // ____0100 ________ - CARRY | TOO_LARGE, - // ____0101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____011_ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - - // ____1___ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____1101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000 - ); - const simd8 byte_2_high = input.shr<4>().lookup_16( + TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4); + constexpr const uint8_t CARRY = + TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . + const simd8 byte_1_low = + (prev1 & 0x0F) + .lookup_16( + // ____0000 ________ + CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, + // ____0001 ________ + CARRY | OVERLONG_2, + // ____001_ ________ + CARRY, CARRY, + + // ____0100 ________ + CARRY | TOO_LARGE, + // ____0101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____011_ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + + // ____1___ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____1101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000); + const simd8 byte_2_high = input.shr<4>().lookup_16( // ________ 0_______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, // ________ 1000____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | OVERLONG_4, + TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | + OVERLONG_4, // ________ 1001____ TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE, // ________ 101_____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, // ________ 11______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT - ); - return (byte_1_high & byte_1_low & byte_2_high); - } - simdutf_really_inline simd8 check_multibyte_lengths(const simd8 input, - const simd8 prev_input, const simd8 sc) { - simd8 prev2 = input.prev<2>(prev_input); - simd8 prev3 = input.prev<3>(prev_input); - simd8 must23 = simd8(must_be_2_3_continuation(prev2, prev3)); - simd8 must23_80 = must23 & uint8_t(0x80); - return must23_80 ^ sc; - } - - - struct validating_transcoder { - // If this is nonzero, there has been a UTF-8 error. - simd8 error; - - validating_transcoder() : error(uint8_t(0)) {} - // - // Check whether the current bytes are valid UTF-8. - // - simdutf_really_inline void check_utf8_bytes(const simd8 input, const simd8 prev_input) { - // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ lead bytes - // (2, 3, 4-byte leads become large positive numbers instead of small negative numbers) - simd8 prev1 = input.prev<1>(prev_input); - simd8 sc = check_special_cases(input, prev1); - this->error |= check_multibyte_lengths(input, prev_input, sc); - } - - - template - simdutf_really_inline size_t convert(const char* in, size_t size, char16_t* utf16_output) { - size_t pos = 0; - char16_t* start{utf16_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 bytes when calling convert_masked_utf8_to_utf16. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 8 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); - } - // If the input is long enough, then we have that margin-1 is the eight last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store_ascii_as_utf16(utf16_output); - utf16_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - auto zero = simd8{uint8_t(0)}; - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - if(utf8_continuation_mask & 1) { - return 0; // error - } - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_utf16(in + pos, - utf8_end_of_code_point_mask, utf16_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT); + return (byte_1_high & byte_1_low & byte_2_high); +} +simdutf_really_inline simd8 +check_multibyte_lengths(const simd8 input, + const simd8 prev_input, + const simd8 sc) { + simd8 prev2 = input.prev<2>(prev_input); + simd8 prev3 = input.prev<3>(prev_input); + simd8 must23 = + simd8(must_be_2_3_continuation(prev2, prev3)); + simd8 must23_80 = must23 & uint8_t(0x80); + return must23_80 ^ sc; +} + +struct validating_transcoder { + // If this is nonzero, there has been a UTF-8 error. + simd8 error; + + validating_transcoder() : error(uint8_t(0)) {} + // + // Check whether the current bytes are valid UTF-8. + // + simdutf_really_inline void check_utf8_bytes(const simd8 input, + const simd8 prev_input) { + // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ + // lead bytes (2, 3, 4-byte leads become large positive numbers instead of + // small negative numbers) + simd8 prev1 = input.prev<1>(prev_input); + simd8 sc = check_special_cases(input, prev1); + this->error |= check_multibyte_lengths(input, prev_input, sc); + } + + template + simdutf_really_inline size_t convert(const char *in, size_t size, + char16_t *utf16_output) { + size_t pos = 0; + char16_t *start{utf16_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 bytes when calling convert_masked_utf8_to_utf16. If you skip the + // last 16 bytes, and if the data is valid, then it is entirely safe because + // 16 UTF-8 bytes generate much more than 8 bytes. However, you cannot + // generally assume that you have valid UTF-8 input, so we are going to go + // back from the end counting 8 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 8; margin--) { + leading_byte += (int8_t(in[margin - 1]) > -65); + } + // If the input is long enough, then we have that margin-1 is the eight last + // leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store_ascii_as_utf16(utf16_output); + utf16_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, + // it is not good enough. + static_assert( + (simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + auto zero = simd8{uint8_t(0)}; + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); } - } - if(errors()) { return 0; } - if(pos < size) { - size_t howmany = scalar::utf8_to_utf16::convert(in + pos, size - pos, utf16_output); - if(howmany == 0) { return 0; } - utf16_output += howmany; - } - return utf16_output - start; - } - - template - simdutf_really_inline result convert_with_errors(const char* in, size_t size, char16_t* utf16_output) { - size_t pos = 0; - char16_t* start{utf16_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 bytes when calling convert_masked_utf8_to_utf16. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 8 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); - } - // If the input is long enough, then we have that margin-1 is the eight last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store_ascii_as_utf16(utf16_output); - utf16_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - auto zero = simd8{uint8_t(0)}; - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - if (errors() || (utf8_continuation_mask & 1)) { - // rewind_and_convert_with_errors will seek a potential error from in+pos onward, - // with the ability to go back up to pos bytes, and read size-pos bytes forward. - result res = scalar::utf8_to_utf16::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf16_output); - res.count += pos; - return res; - } - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_utf16(in + pos, - utf8_end_of_code_point_mask, utf16_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + if (utf8_continuation_mask & 1) { + return 0; // error + } + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_utf16( + in + pos, utf8_end_of_code_point_mask, utf16_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. } - if(errors()) { - // rewind_and_convert_with_errors will seek a potential error from in+pos onward, - // with the ability to go back up to pos bytes, and read size-pos bytes forward. - result res = scalar::utf8_to_utf16::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf16_output); - res.count += pos; - return res; + } + if (errors()) { + return 0; + } + if (pos < size) { + size_t howmany = scalar::utf8_to_utf16::convert( + in + pos, size - pos, utf16_output); + if (howmany == 0) { + return 0; } - if(pos < size) { - // rewind_and_convert_with_errors will seek a potential error from in+pos onward, - // with the ability to go back up to pos bytes, and read size-pos bytes forward. - result res = scalar::utf8_to_utf16::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf16_output); - if (res.error) { // In case of error, we want the error position + utf16_output += howmany; + } + return utf16_output - start; + } + + template + simdutf_really_inline result convert_with_errors(const char *in, size_t size, + char16_t *utf16_output) { + size_t pos = 0; + char16_t *start{utf16_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 bytes when calling convert_masked_utf8_to_utf16. If you skip the + // last 16 bytes, and if the data is valid, then it is entirely safe because + // 16 UTF-8 bytes generate much more than 8 bytes. However, you cannot + // generally assume that you have valid UTF-8 input, so we are going to go + // back from the end counting 8 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 8; margin--) { + leading_byte += (int8_t(in[margin - 1]) > -65); + } + // If the input is long enough, then we have that margin-1 is the eight last + // leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store_ascii_as_utf16(utf16_output); + utf16_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, + // it is not good enough. + static_assert( + (simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + auto zero = simd8{uint8_t(0)}; + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); + } + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + if (errors() || (utf8_continuation_mask & 1)) { + // rewind_and_convert_with_errors will seek a potential error from + // in+pos onward, with the ability to go back up to pos bytes, and + // read size-pos bytes forward. + result res = + scalar::utf8_to_utf16::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf16_output); res.count += pos; return res; - } else { // In case of success, we want the number of word written - utf16_output += res.count; } + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_utf16( + in + pos, utf8_end_of_code_point_mask, utf16_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; + } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. + } + } + if (errors()) { + // rewind_and_convert_with_errors will seek a potential error from in+pos + // onward, with the ability to go back up to pos bytes, and read size-pos + // bytes forward. + result res = + scalar::utf8_to_utf16::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf16_output); + res.count += pos; + return res; + } + if (pos < size) { + // rewind_and_convert_with_errors will seek a potential error from in+pos + // onward, with the ability to go back up to pos bytes, and read size-pos + // bytes forward. + result res = + scalar::utf8_to_utf16::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf16_output); + if (res.error) { // In case of error, we want the error position + res.count += pos; + return res; + } else { // In case of success, we want the number of word written + utf16_output += res.count; } - return result(error_code::SUCCESS, utf16_output - start); } + return result(error_code::SUCCESS, utf16_output - start); + } - simdutf_really_inline bool errors() const { - return this->error.any_bits_set_anywhere(); - } + simdutf_really_inline bool errors() const { + return this->error.any_bits_set_anywhere(); + } - }; // struct utf8_checker -} // utf8_to_utf16 namespace +}; // struct utf8_checker +} // namespace utf8_to_utf16 } // unnamed namespace } // namespace westmere } // namespace simdutf @@ -36610,37 +38833,37 @@ namespace utf8_to_utf32 { using namespace simd; - -simdutf_warn_unused size_t convert_valid(const char* input, size_t size, - char32_t* utf32_output) noexcept { +simdutf_warn_unused size_t convert_valid(const char *input, size_t size, + char32_t *utf32_output) noexcept { size_t pos = 0; - char32_t* start{utf32_output}; + char32_t *start{utf32_output}; const size_t safety_margin = 16; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { + while (pos + 64 + safety_margin <= size) { simd8x64 in(reinterpret_cast(input + pos)); - if(in.is_ascii()) { + if (in.is_ascii()) { in.store_ascii_as_utf32(utf32_output); utf32_output += 64; pos += 64; } else { - // -65 is 0b10111111 in two-complement's, so largest possible continuation byte - uint64_t utf8_continuation_mask = in.lt(-65 + 1); - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - size_t max_starting_point = (pos + 64) - 12; - while(pos < max_starting_point) { - size_t consumed = convert_masked_utf8_to_utf32(input + pos, - utf8_end_of_code_point_mask, utf32_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; + // -65 is 0b10111111 in two-complement's, so largest possible continuation + // byte + uint64_t utf8_continuation_mask = in.lt(-65 + 1); + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + size_t max_starting_point = (pos + 64) - 12; + while (pos < max_starting_point) { + size_t consumed = convert_masked_utf8_to_utf32( + input + pos, utf8_end_of_code_point_mask, utf32_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; } } } - utf32_output += scalar::utf8_to_utf32::convert_valid(input + pos, size - pos, utf32_output); + utf32_output += scalar::utf8_to_utf32::convert_valid(input + pos, size - pos, + utf32_output); return utf32_output - start; } - } // namespace utf8_to_utf32 } // unnamed namespace } // namespace westmere @@ -36648,46 +38871,45 @@ simdutf_warn_unused size_t convert_valid(const char* input, size_t size, /* end file src/generic/utf8_to_utf32/valid_utf8_to_utf32.h */ /* begin file src/generic/utf8_to_utf32/utf8_to_utf32.h */ - namespace simdutf { namespace westmere { namespace { namespace utf8_to_utf32 { using namespace simd; - - simdutf_really_inline simd8 check_special_cases(const simd8 input, const simd8 prev1) { -// Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) -// Bit 1 = Too Long (ASCII followed by continuation) -// Bit 2 = Overlong 3-byte -// Bit 4 = Surrogate -// Bit 5 = Overlong 2-byte -// Bit 7 = Two Continuations - constexpr const uint8_t TOO_SHORT = 1<<0; // 11______ 0_______ - // 11______ 11______ - constexpr const uint8_t TOO_LONG = 1<<1; // 0_______ 10______ - constexpr const uint8_t OVERLONG_3 = 1<<2; // 11100000 100_____ - constexpr const uint8_t SURROGATE = 1<<4; // 11101101 101_____ - constexpr const uint8_t OVERLONG_2 = 1<<5; // 1100000_ 10______ - constexpr const uint8_t TWO_CONTS = 1<<7; // 10______ 10______ - constexpr const uint8_t TOO_LARGE = 1<<3; // 11110100 1001____ - // 11110100 101_____ - // 11110101 1001____ - // 11110101 101_____ - // 1111011_ 1001____ - // 1111011_ 101_____ - // 11111___ 1001____ - // 11111___ 101_____ - constexpr const uint8_t TOO_LARGE_1000 = 1<<6; - // 11110101 1000____ - // 1111011_ 1000____ - // 11111___ 1000____ - constexpr const uint8_t OVERLONG_4 = 1<<6; // 11110000 1000____ - - const simd8 byte_1_high = prev1.shr<4>().lookup_16( +simdutf_really_inline simd8 +check_special_cases(const simd8 input, const simd8 prev1) { + // Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) + // Bit 1 = Too Long (ASCII followed by continuation) + // Bit 2 = Overlong 3-byte + // Bit 4 = Surrogate + // Bit 5 = Overlong 2-byte + // Bit 7 = Two Continuations + constexpr const uint8_t TOO_SHORT = 1 << 0; // 11______ 0_______ + // 11______ 11______ + constexpr const uint8_t TOO_LONG = 1 << 1; // 0_______ 10______ + constexpr const uint8_t OVERLONG_3 = 1 << 2; // 11100000 100_____ + constexpr const uint8_t SURROGATE = 1 << 4; // 11101101 101_____ + constexpr const uint8_t OVERLONG_2 = 1 << 5; // 1100000_ 10______ + constexpr const uint8_t TWO_CONTS = 1 << 7; // 10______ 10______ + constexpr const uint8_t TOO_LARGE = 1 << 3; // 11110100 1001____ + // 11110100 101_____ + // 11110101 1001____ + // 11110101 101_____ + // 1111011_ 1001____ + // 1111011_ 101_____ + // 11111___ 1001____ + // 11111___ 101_____ + constexpr const uint8_t TOO_LARGE_1000 = 1 << 6; + // 11110101 1000____ + // 1111011_ 1000____ + // 11111___ 1000____ + constexpr const uint8_t OVERLONG_4 = 1 << 6; // 11110000 1000____ + + const simd8 byte_1_high = prev1.shr<4>().lookup_16( // 0_______ ________ - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, // 10______ ________ TWO_CONTS, TWO_CONTS, TWO_CONTS, TWO_CONTS, // 1100____ ________ @@ -36697,253 +38919,273 @@ using namespace simd; // 1110____ ________ TOO_SHORT | OVERLONG_3 | SURROGATE, // 1111____ ________ - TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4 - ); - constexpr const uint8_t CARRY = TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . - const simd8 byte_1_low = (prev1 & 0x0F).lookup_16( - // ____0000 ________ - CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, - // ____0001 ________ - CARRY | OVERLONG_2, - // ____001_ ________ - CARRY, - CARRY, - - // ____0100 ________ - CARRY | TOO_LARGE, - // ____0101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____011_ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - - // ____1___ ________ - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000, - // ____1101 ________ - CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, - CARRY | TOO_LARGE | TOO_LARGE_1000, - CARRY | TOO_LARGE | TOO_LARGE_1000 - ); - const simd8 byte_2_high = input.shr<4>().lookup_16( + TOO_SHORT | TOO_LARGE | TOO_LARGE_1000 | OVERLONG_4); + constexpr const uint8_t CARRY = + TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . + const simd8 byte_1_low = + (prev1 & 0x0F) + .lookup_16( + // ____0000 ________ + CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, + // ____0001 ________ + CARRY | OVERLONG_2, + // ____001_ ________ + CARRY, CARRY, + + // ____0100 ________ + CARRY | TOO_LARGE, + // ____0101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____011_ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + + // ____1___ ________ + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000, + // ____1101 ________ + CARRY | TOO_LARGE | TOO_LARGE_1000 | SURROGATE, + CARRY | TOO_LARGE | TOO_LARGE_1000, + CARRY | TOO_LARGE | TOO_LARGE_1000); + const simd8 byte_2_high = input.shr<4>().lookup_16( // ________ 0_______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, // ________ 1000____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | OVERLONG_4, + TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | + OVERLONG_4, // ________ 1001____ TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE, // ________ 101_____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, // ________ 11______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT - ); - return (byte_1_high & byte_1_low & byte_2_high); - } - simdutf_really_inline simd8 check_multibyte_lengths(const simd8 input, - const simd8 prev_input, const simd8 sc) { - simd8 prev2 = input.prev<2>(prev_input); - simd8 prev3 = input.prev<3>(prev_input); - simd8 must23 = simd8(must_be_2_3_continuation(prev2, prev3)); - simd8 must23_80 = must23 & uint8_t(0x80); - return must23_80 ^ sc; - } - - - struct validating_transcoder { - // If this is nonzero, there has been a UTF-8 error. - simd8 error; - - validating_transcoder() : error(uint8_t(0)) {} - // - // Check whether the current bytes are valid UTF-8. - // - simdutf_really_inline void check_utf8_bytes(const simd8 input, const simd8 prev_input) { - // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ lead bytes - // (2, 3, 4-byte leads become large positive numbers instead of small negative numbers) - simd8 prev1 = input.prev<1>(prev_input); - simd8 sc = check_special_cases(input, prev1); - this->error |= check_multibyte_lengths(input, prev_input, sc); - } - - - - simdutf_really_inline size_t convert(const char* in, size_t size, char32_t* utf32_output) { - size_t pos = 0; - char32_t* start{utf32_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 words when calling convert_masked_utf8_to_utf32. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 16 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); - } - // If the input is long enough, then we have that margin-1 is the fourth last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store_ascii_as_utf32(utf32_output); - utf32_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - auto zero = simd8{uint8_t(0)}; - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - if(utf8_continuation_mask & 1) { - return 0; // we have an error - } - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_utf32(in + pos, - utf8_end_of_code_point_mask, utf32_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT); + return (byte_1_high & byte_1_low & byte_2_high); +} +simdutf_really_inline simd8 +check_multibyte_lengths(const simd8 input, + const simd8 prev_input, + const simd8 sc) { + simd8 prev2 = input.prev<2>(prev_input); + simd8 prev3 = input.prev<3>(prev_input); + simd8 must23 = + simd8(must_be_2_3_continuation(prev2, prev3)); + simd8 must23_80 = must23 & uint8_t(0x80); + return must23_80 ^ sc; +} + +struct validating_transcoder { + // If this is nonzero, there has been a UTF-8 error. + simd8 error; + + validating_transcoder() : error(uint8_t(0)) {} + // + // Check whether the current bytes are valid UTF-8. + // + simdutf_really_inline void check_utf8_bytes(const simd8 input, + const simd8 prev_input) { + // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ + // lead bytes (2, 3, 4-byte leads become large positive numbers instead of + // small negative numbers) + simd8 prev1 = input.prev<1>(prev_input); + simd8 sc = check_special_cases(input, prev1); + this->error |= check_multibyte_lengths(input, prev_input, sc); + } + + simdutf_really_inline size_t convert(const char *in, size_t size, + char32_t *utf32_output) { + size_t pos = 0; + char32_t *start{utf32_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 words when calling convert_masked_utf8_to_utf32. If you skip the + // last 16 bytes, and if the data is valid, then it is entirely safe because + // 16 UTF-8 bytes generate much more than 8 bytes. However, you cannot + // generally assume that you have valid UTF-8 input, so we are going to go + // back from the end counting 16 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 8; margin--) { + leading_byte += (int8_t(in[margin - 1]) > -65); + } + // If the input is long enough, then we have that margin-1 is the fourth + // last leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store_ascii_as_utf32(utf32_output); + utf32_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, + // it is not good enough. + static_assert( + (simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + auto zero = simd8{uint8_t(0)}; + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); } - } - if(errors()) { return 0; } - if(pos < size) { - size_t howmany = scalar::utf8_to_utf32::convert(in + pos, size - pos, utf32_output); - if(howmany == 0) { return 0; } - utf32_output += howmany; - } - return utf32_output - start; - } - - simdutf_really_inline result convert_with_errors(const char* in, size_t size, char32_t* utf32_output) { - size_t pos = 0; - char32_t* start{utf32_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 bytes when calling convert_masked_utf8_to_utf32. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 8 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); - } - // If the input is long enough, then we have that margin-1 is the fourth last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store_ascii_as_utf32(utf32_output); - utf32_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - auto zero = simd8{uint8_t(0)}; - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - if (errors() || (utf8_continuation_mask & 1)) { - result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf32_output); - res.count += pos; - return res; - } - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_utf32(in + pos, - utf8_end_of_code_point_mask, utf32_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + if (utf8_continuation_mask & 1) { + return 0; // we have an error + } + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_utf32( + in + pos, utf8_end_of_code_point_mask, utf32_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. } - if(errors()) { - result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf32_output); - res.count += pos; - return res; + } + if (errors()) { + return 0; + } + if (pos < size) { + size_t howmany = + scalar::utf8_to_utf32::convert(in + pos, size - pos, utf32_output); + if (howmany == 0) { + return 0; } - if(pos < size) { - result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors(pos, in + pos, size - pos, utf32_output); - if (res.error) { // In case of error, we want the error position + utf32_output += howmany; + } + return utf32_output - start; + } + + simdutf_really_inline result convert_with_errors(const char *in, size_t size, + char32_t *utf32_output) { + size_t pos = 0; + char32_t *start{utf32_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 bytes when calling convert_masked_utf8_to_utf32. If you skip the + // last 16 bytes, and if the data is valid, then it is entirely safe because + // 16 UTF-8 bytes generate much more than 8 bytes. However, you cannot + // generally assume that you have valid UTF-8 input, so we are going to go + // back from the end counting 8 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 8; margin--) { + leading_byte += (int8_t(in[margin - 1]) > -65); + } + // If the input is long enough, then we have that margin-1 is the fourth + // last leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store_ascii_as_utf32(utf32_output); + utf32_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, + // it is not good enough. + static_assert( + (simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + auto zero = simd8{uint8_t(0)}; + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); + } + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + if (errors() || (utf8_continuation_mask & 1)) { + result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf32_output); res.count += pos; return res; - } else { // In case of success, we want the number of word written - utf32_output += res.count; } + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_utf32( + in + pos, utf8_end_of_code_point_mask, utf32_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; + } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. } - return result(error_code::SUCCESS, utf32_output - start); } - - simdutf_really_inline bool errors() const { - return this->error.any_bits_set_anywhere(); + if (errors()) { + result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf32_output); + res.count += pos; + return res; + } + if (pos < size) { + result res = scalar::utf8_to_utf32::rewind_and_convert_with_errors( + pos, in + pos, size - pos, utf32_output); + if (res.error) { // In case of error, we want the error position + res.count += pos; + return res; + } else { // In case of success, we want the number of word written + utf32_output += res.count; + } } + return result(error_code::SUCCESS, utf32_output - start); + } + + simdutf_really_inline bool errors() const { + return this->error.any_bits_set_anywhere(); + } - }; // struct utf8_checker -} // utf8_to_utf32 namespace +}; // struct utf8_checker +} // namespace utf8_to_utf32 } // unnamed namespace } // namespace westmere } // namespace simdutf @@ -36958,33 +39200,34 @@ namespace utf8 { using namespace simd; -simdutf_really_inline size_t count_code_points(const char* in, size_t size) { - size_t pos = 0; - size_t count = 0; - for(;pos + 64 <= size; pos += 64) { - simd8x64 input(reinterpret_cast(in + pos)); - uint64_t utf8_continuation_mask = input.gt(-65); - count += count_ones(utf8_continuation_mask); - } - return count + scalar::utf8::count_code_points(in + pos, size - pos); +simdutf_really_inline size_t count_code_points(const char *in, size_t size) { + size_t pos = 0; + size_t count = 0; + for (; pos + 64 <= size; pos += 64) { + simd8x64 input(reinterpret_cast(in + pos)); + uint64_t utf8_continuation_mask = input.gt(-65); + count += count_ones(utf8_continuation_mask); + } + return count + scalar::utf8::count_code_points(in + pos, size - pos); } -simdutf_really_inline size_t utf16_length_from_utf8(const char* in, size_t size) { - size_t pos = 0; - size_t count = 0; - // This algorithm could no doubt be improved! - for(;pos + 64 <= size; pos += 64) { - simd8x64 input(reinterpret_cast(in + pos)); - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - // We count one word for anything that is not a continuation (so - // leading bytes). - count += 64 - count_ones(utf8_continuation_mask); - int64_t utf8_4byte = input.gteq_unsigned(240); - count += count_ones(utf8_4byte); - } - return count + scalar::utf8::utf16_length_from_utf8(in + pos, size - pos); -} -} // utf8 namespace +simdutf_really_inline size_t utf16_length_from_utf8(const char *in, + size_t size) { + size_t pos = 0; + size_t count = 0; + // This algorithm could no doubt be improved! + for (; pos + 64 <= size; pos += 64) { + simd8x64 input(reinterpret_cast(in + pos)); + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + // We count one word for anything that is not a continuation (so + // leading bytes). + count += 64 - count_ones(utf8_continuation_mask); + int64_t utf8_4byte = input.gteq_unsigned(240); + count += count_ones(utf8_4byte); + } + return count + scalar::utf8::utf16_length_from_utf8(in + pos, size - pos); +} +} // namespace utf8 } // unnamed namespace } // namespace westmere } // namespace simdutf @@ -36996,48 +39239,59 @@ namespace { namespace utf16 { template -simdutf_really_inline size_t count_code_points(const char16_t* in, size_t size) { - size_t pos = 0; - size_t count = 0; - for(;pos < size/32*32; pos += 32) { - simd16x32 input(reinterpret_cast(in + pos)); - if (!match_system(big_endian)) { input.swap_bytes(); } - uint64_t not_pair = input.not_in_range(0xDC00, 0xDFFF); - count += count_ones(not_pair) / 2; +simdutf_really_inline size_t count_code_points(const char16_t *in, + size_t size) { + size_t pos = 0; + size_t count = 0; + for (; pos < size / 32 * 32; pos += 32) { + simd16x32 input(reinterpret_cast(in + pos)); + if (!match_system(big_endian)) { + input.swap_bytes(); } - return count + scalar::utf16::count_code_points(in + pos, size - pos); + uint64_t not_pair = input.not_in_range(0xDC00, 0xDFFF); + count += count_ones(not_pair) / 2; + } + return count + + scalar::utf16::count_code_points(in + pos, size - pos); } template -simdutf_really_inline size_t utf8_length_from_utf16(const char16_t* in, size_t size) { - size_t pos = 0; - size_t count = 0; - // This algorithm could no doubt be improved! - for(;pos < size/32*32; pos += 32) { - simd16x32 input(reinterpret_cast(in + pos)); - if (!match_system(big_endian)) { input.swap_bytes(); } - uint64_t ascii_mask = input.lteq(0x7F); - uint64_t twobyte_mask = input.lteq(0x7FF); - uint64_t not_pair_mask = input.not_in_range(0xD800, 0xDFFF); - - size_t ascii_count = count_ones(ascii_mask) / 2; - size_t twobyte_count = count_ones(twobyte_mask & ~ ascii_mask) / 2; - size_t threebyte_count = count_ones(not_pair_mask & ~ twobyte_mask) / 2; - size_t fourbyte_count = 32 - count_ones(not_pair_mask) / 2; - count += 2 * fourbyte_count + 3 * threebyte_count + 2 * twobyte_count + ascii_count; +simdutf_really_inline size_t utf8_length_from_utf16(const char16_t *in, + size_t size) { + size_t pos = 0; + size_t count = 0; + // This algorithm could no doubt be improved! + for (; pos < size / 32 * 32; pos += 32) { + simd16x32 input(reinterpret_cast(in + pos)); + if (!match_system(big_endian)) { + input.swap_bytes(); } - return count + scalar::utf16::utf8_length_from_utf16(in + pos, size - pos); + uint64_t ascii_mask = input.lteq(0x7F); + uint64_t twobyte_mask = input.lteq(0x7FF); + uint64_t not_pair_mask = input.not_in_range(0xD800, 0xDFFF); + + size_t ascii_count = count_ones(ascii_mask) / 2; + size_t twobyte_count = count_ones(twobyte_mask & ~ascii_mask) / 2; + size_t threebyte_count = count_ones(not_pair_mask & ~twobyte_mask) / 2; + size_t fourbyte_count = 32 - count_ones(not_pair_mask) / 2; + count += 2 * fourbyte_count + 3 * threebyte_count + 2 * twobyte_count + + ascii_count; + } + return count + scalar::utf16::utf8_length_from_utf16(in + pos, + size - pos); } template -simdutf_really_inline size_t utf32_length_from_utf16(const char16_t* in, size_t size) { - return count_code_points(in, size); +simdutf_really_inline size_t utf32_length_from_utf16(const char16_t *in, + size_t size) { + return count_code_points(in, size); } -simdutf_really_inline void change_endianness_utf16(const char16_t* in, size_t size, char16_t* output) { +simdutf_really_inline void +change_endianness_utf16(const char16_t *in, size_t size, char16_t *output) { size_t pos = 0; - while (pos < size/32*32) { + while (pos < size / 32 * 32) { simd16x32 input(reinterpret_cast(in + pos)); input.swap_bytes(); input.store(reinterpret_cast(output)); @@ -37048,7 +39302,7 @@ simdutf_really_inline void change_endianness_utf16(const char16_t* in, size_t si scalar::utf16::change_endianness_utf16(in + pos, size - pos, output); } -} // utf16 +} // namespace utf16 } // unnamed namespace } // namespace westmere } // namespace simdutf @@ -37056,50 +39310,50 @@ simdutf_really_inline void change_endianness_utf16(const char16_t* in, size_t si // transcoding from UTF-8 to Latin 1 /* begin file src/generic/utf8_to_latin1/utf8_to_latin1.h */ - namespace simdutf { namespace westmere { namespace { namespace utf8_to_latin1 { using namespace simd; - - simdutf_really_inline simd8 check_special_cases(const simd8 input, const simd8 prev1) { -// For UTF-8 to Latin 1, we can allow any ASCII character, and any continuation byte, -// but the non-ASCII leading bytes must be 0b11000011 or 0b11000010 and nothing else. -// -// Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) -// Bit 1 = Too Long (ASCII followed by continuation) -// Bit 2 = Overlong 3-byte -// Bit 4 = Surrogate -// Bit 5 = Overlong 2-byte -// Bit 7 = Two Continuations - constexpr const uint8_t TOO_SHORT = 1<<0; // 11______ 0_______ - // 11______ 11______ - constexpr const uint8_t TOO_LONG = 1<<1; // 0_______ 10______ - constexpr const uint8_t OVERLONG_3 = 1<<2; // 11100000 100_____ - constexpr const uint8_t SURROGATE = 1<<4; // 11101101 101_____ - constexpr const uint8_t OVERLONG_2 = 1<<5; // 1100000_ 10______ - constexpr const uint8_t TWO_CONTS = 1<<7; // 10______ 10______ - constexpr const uint8_t TOO_LARGE = 1<<3; // 11110100 1001____ - // 11110100 101_____ - // 11110101 1001____ - // 11110101 101_____ - // 1111011_ 1001____ - // 1111011_ 101_____ - // 11111___ 1001____ - // 11111___ 101_____ - constexpr const uint8_t TOO_LARGE_1000 = 1<<6; - // 11110101 1000____ - // 1111011_ 1000____ - // 11111___ 1000____ - constexpr const uint8_t OVERLONG_4 = 1<<6; // 11110000 1000____ - constexpr const uint8_t FORBIDDEN = 0xff; - - const simd8 byte_1_high = prev1.shr<4>().lookup_16( +simdutf_really_inline simd8 +check_special_cases(const simd8 input, const simd8 prev1) { + // For UTF-8 to Latin 1, we can allow any ASCII character, and any + // continuation byte, but the non-ASCII leading bytes must be 0b11000011 or + // 0b11000010 and nothing else. + // + // Bit 0 = Too Short (lead byte/ASCII followed by lead byte/ASCII) + // Bit 1 = Too Long (ASCII followed by continuation) + // Bit 2 = Overlong 3-byte + // Bit 4 = Surrogate + // Bit 5 = Overlong 2-byte + // Bit 7 = Two Continuations + constexpr const uint8_t TOO_SHORT = 1 << 0; // 11______ 0_______ + // 11______ 11______ + constexpr const uint8_t TOO_LONG = 1 << 1; // 0_______ 10______ + constexpr const uint8_t OVERLONG_3 = 1 << 2; // 11100000 100_____ + constexpr const uint8_t SURROGATE = 1 << 4; // 11101101 101_____ + constexpr const uint8_t OVERLONG_2 = 1 << 5; // 1100000_ 10______ + constexpr const uint8_t TWO_CONTS = 1 << 7; // 10______ 10______ + constexpr const uint8_t TOO_LARGE = 1 << 3; // 11110100 1001____ + // 11110100 101_____ + // 11110101 1001____ + // 11110101 101_____ + // 1111011_ 1001____ + // 1111011_ 101_____ + // 11111___ 1001____ + // 11111___ 101_____ + constexpr const uint8_t TOO_LARGE_1000 = 1 << 6; + // 11110101 1000____ + // 1111011_ 1000____ + // 11111___ 1000____ + constexpr const uint8_t OVERLONG_4 = 1 << 6; // 11110000 1000____ + constexpr const uint8_t FORBIDDEN = 0xff; + + const simd8 byte_1_high = prev1.shr<4>().lookup_16( // 0_______ ________ - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, - TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, TOO_LONG, + TOO_LONG, // 10______ ________ TWO_CONTS, TWO_CONTS, TWO_CONTS, TWO_CONTS, // 1100____ ________ @@ -37109,326 +39363,348 @@ using namespace simd; // 1110____ ________ FORBIDDEN, // 1111____ ________ - FORBIDDEN - ); - constexpr const uint8_t CARRY = TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . - const simd8 byte_1_low = (prev1 & 0x0F).lookup_16( - // ____0000 ________ - CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, - // ____0001 ________ - CARRY | OVERLONG_2, - // ____001_ ________ - CARRY, - CARRY, - - // ____0100 ________ - FORBIDDEN, - // ____0101 ________ - FORBIDDEN, - // ____011_ ________ - FORBIDDEN, - FORBIDDEN, - - // ____1___ ________ - FORBIDDEN, - FORBIDDEN, - FORBIDDEN, - FORBIDDEN, - FORBIDDEN, - // ____1101 ________ - FORBIDDEN, - FORBIDDEN, - FORBIDDEN - ); - const simd8 byte_2_high = input.shr<4>().lookup_16( + FORBIDDEN); + constexpr const uint8_t CARRY = + TOO_SHORT | TOO_LONG | TWO_CONTS; // These all have ____ in byte 1 . + const simd8 byte_1_low = + (prev1 & 0x0F) + .lookup_16( + // ____0000 ________ + CARRY | OVERLONG_3 | OVERLONG_2 | OVERLONG_4, + // ____0001 ________ + CARRY | OVERLONG_2, + // ____001_ ________ + CARRY, CARRY, + + // ____0100 ________ + FORBIDDEN, + // ____0101 ________ + FORBIDDEN, + // ____011_ ________ + FORBIDDEN, FORBIDDEN, + + // ____1___ ________ + FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, + // ____1101 ________ + FORBIDDEN, FORBIDDEN, FORBIDDEN); + const simd8 byte_2_high = input.shr<4>().lookup_16( // ________ 0_______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT, + TOO_SHORT, TOO_SHORT, // ________ 1000____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | OVERLONG_4, + TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE_1000 | + OVERLONG_4, // ________ 1001____ TOO_LONG | OVERLONG_2 | TWO_CONTS | OVERLONG_3 | TOO_LARGE, // ________ 101_____ - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, - TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, + TOO_LONG | OVERLONG_2 | TWO_CONTS | SURROGATE | TOO_LARGE, // ________ 11______ - TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT - ); - return (byte_1_high & byte_1_low & byte_2_high); - } + TOO_SHORT, TOO_SHORT, TOO_SHORT, TOO_SHORT); + return (byte_1_high & byte_1_low & byte_2_high); +} - struct validating_transcoder { - // If this is nonzero, there has been a UTF-8 error. - simd8 error; +struct validating_transcoder { + // If this is nonzero, there has been a UTF-8 error. + simd8 error; - validating_transcoder() : error(uint8_t(0)) {} - // - // Check whether the current bytes are valid UTF-8. - // - simdutf_really_inline void check_utf8_bytes(const simd8 input, const simd8 prev_input) { - // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ lead bytes - // (2, 3, 4-byte leads become large positive numbers instead of small negative numbers) - simd8 prev1 = input.prev<1>(prev_input); - this->error |= check_special_cases(input, prev1); - } - - - simdutf_really_inline size_t convert(const char* in, size_t size, char* latin1_output) { - size_t pos = 0; - char* start{latin1_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 bytes when calling convert_masked_utf8_to_latin1. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 8 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); //twos complement of -65 is 1011 1111 ... - } - // If the input is long enough, then we have that margin-1 is the eight last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store((int8_t*)latin1_output); - latin1_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - auto zero = simd8{uint8_t(0)}; - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - uint64_t utf8_continuation_mask = input.lt(-65 + 1); // -64 is 1100 0000 in twos complement. Note: in this case, we also have ASCII to account for. - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_latin1(in + pos, - utf8_end_of_code_point_mask, latin1_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. + validating_transcoder() : error(uint8_t(0)) {} + // + // Check whether the current bytes are valid UTF-8. + // + simdutf_really_inline void check_utf8_bytes(const simd8 input, + const simd8 prev_input) { + // Flip prev1...prev3 so we can easily determine if they are 2+, 3+ or 4+ + // lead bytes (2, 3, 4-byte leads become large positive numbers instead of + // small negative numbers) + simd8 prev1 = input.prev<1>(prev_input); + this->error |= check_special_cases(input, prev1); + } + + simdutf_really_inline size_t convert(const char *in, size_t size, + char *latin1_output) { + size_t pos = 0; + char *start{latin1_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 bytes when calling convert_masked_utf8_to_latin1. If you skip the + // last 16 bytes, and if the data is valid, then it is entirely safe because + // 16 UTF-8 bytes generate much more than 8 bytes. However, you cannot + // generally assume that you have valid UTF-8 input, so we are going to go + // back from the end counting 16 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 16; margin--) { + leading_byte += (int8_t(in[margin - 1]) > + -65); // twos complement of -65 is 1011 1111 ... + } + // If the input is long enough, then we have that margin-1 is the eight last + // leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store((int8_t *)latin1_output); + latin1_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, + // it is not good enough. + static_assert( + (simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + auto zero = simd8{uint8_t(0)}; + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); } - } - if(errors()) { return 0; } - if(pos < size) { - size_t howmany = scalar::utf8_to_latin1::convert(in + pos, size - pos, latin1_output); - if(howmany == 0) { return 0; } - latin1_output += howmany; - } - return latin1_output - start; - } - - simdutf_really_inline result convert_with_errors(const char* in, size_t size, char* latin1_output) { - size_t pos = 0; - char* start{latin1_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 bytes when calling convert_masked_utf8_to_latin1. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 8 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); - } - // If the input is long enough, then we have that margin-1 is the eight last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store((int8_t*)latin1_output); - latin1_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - static_assert((simd8x64::NUM_CHUNKS == 2) || (simd8x64::NUM_CHUNKS == 4), - "We support either two or four chunks per 64-byte block."); - auto zero = simd8{uint8_t(0)}; - if(simd8x64::NUM_CHUNKS == 2) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - } else if(simd8x64::NUM_CHUNKS == 4) { - this->check_utf8_bytes(input.chunks[0], zero); - this->check_utf8_bytes(input.chunks[1], input.chunks[0]); - this->check_utf8_bytes(input.chunks[2], input.chunks[1]); - this->check_utf8_bytes(input.chunks[3], input.chunks[2]); - } - if (errors()) { - // rewind_and_convert_with_errors will seek a potential error from in+pos onward, - // with the ability to go back up to pos bytes, and read size-pos bytes forward. - result res = scalar::utf8_to_latin1::rewind_and_convert_with_errors(pos, in + pos, size - pos, latin1_output); - res.count += pos; - return res; - } - uint64_t utf8_continuation_mask = input.lt(-65 + 1); - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_latin1(in + pos, - utf8_end_of_code_point_mask, latin1_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. + uint64_t utf8_continuation_mask = + input.lt(-65 + 1); // -64 is 1100 0000 in twos complement. Note: in + // this case, we also have ASCII to account for. + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_latin1( + in + pos, utf8_end_of_code_point_mask, latin1_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. } - if(errors()) { - // rewind_and_convert_with_errors will seek a potential error from in+pos onward, - // with the ability to go back up to pos bytes, and read size-pos bytes forward. - result res = scalar::utf8_to_latin1::rewind_and_convert_with_errors(pos, in + pos, size - pos, latin1_output); - res.count += pos; - return res; + } + if (errors()) { + return 0; + } + if (pos < size) { + size_t howmany = + scalar::utf8_to_latin1::convert(in + pos, size - pos, latin1_output); + if (howmany == 0) { + return 0; } - if(pos < size) { - // rewind_and_convert_with_errors will seek a potential error from in+pos onward, - // with the ability to go back up to pos bytes, and read size-pos bytes forward. - result res = scalar::utf8_to_latin1::rewind_and_convert_with_errors(pos, in + pos, size - pos, latin1_output); - if (res.error) { // In case of error, we want the error position + latin1_output += howmany; + } + return latin1_output - start; + } + + simdutf_really_inline result convert_with_errors(const char *in, size_t size, + char *latin1_output) { + size_t pos = 0; + char *start{latin1_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 bytes when calling convert_masked_utf8_to_latin1. If you skip the + // last 16 bytes, and if the data is valid, then it is entirely safe because + // 16 UTF-8 bytes generate much more than 8 bytes. However, you cannot + // generally assume that you have valid UTF-8 input, so we are going to go + // back from the end counting 8 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 8; margin--) { + leading_byte += (int8_t(in[margin - 1]) > -65); + } + // If the input is long enough, then we have that margin-1 is the eight last + // leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store((int8_t *)latin1_output); + latin1_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, + // it is not good enough. + static_assert( + (simd8x64::NUM_CHUNKS == 2) || + (simd8x64::NUM_CHUNKS == 4), + "We support either two or four chunks per 64-byte block."); + auto zero = simd8{uint8_t(0)}; + if (simd8x64::NUM_CHUNKS == 2) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + } else if (simd8x64::NUM_CHUNKS == 4) { + this->check_utf8_bytes(input.chunks[0], zero); + this->check_utf8_bytes(input.chunks[1], input.chunks[0]); + this->check_utf8_bytes(input.chunks[2], input.chunks[1]); + this->check_utf8_bytes(input.chunks[3], input.chunks[2]); + } + if (errors()) { + // rewind_and_convert_with_errors will seek a potential error from + // in+pos onward, with the ability to go back up to pos bytes, and + // read size-pos bytes forward. + result res = scalar::utf8_to_latin1::rewind_and_convert_with_errors( + pos, in + pos, size - pos, latin1_output); res.count += pos; return res; - } else { // In case of success, we want the number of word written - latin1_output += res.count; } + uint64_t utf8_continuation_mask = input.lt(-65 + 1); + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_latin1( + in + pos, utf8_end_of_code_point_mask, latin1_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; + } + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. + } + } + if (errors()) { + // rewind_and_convert_with_errors will seek a potential error from in+pos + // onward, with the ability to go back up to pos bytes, and read size-pos + // bytes forward. + result res = scalar::utf8_to_latin1::rewind_and_convert_with_errors( + pos, in + pos, size - pos, latin1_output); + res.count += pos; + return res; + } + if (pos < size) { + // rewind_and_convert_with_errors will seek a potential error from in+pos + // onward, with the ability to go back up to pos bytes, and read size-pos + // bytes forward. + result res = scalar::utf8_to_latin1::rewind_and_convert_with_errors( + pos, in + pos, size - pos, latin1_output); + if (res.error) { // In case of error, we want the error position + res.count += pos; + return res; + } else { // In case of success, we want the number of word written + latin1_output += res.count; } - return result(error_code::SUCCESS, latin1_output - start); } + return result(error_code::SUCCESS, latin1_output - start); + } - simdutf_really_inline bool errors() const { - return this->error.any_bits_set_anywhere(); - } + simdutf_really_inline bool errors() const { + return this->error.any_bits_set_anywhere(); + } - }; // struct utf8_checker -} // utf8_to_latin1 namespace +}; // struct utf8_checker +} // namespace utf8_to_latin1 } // unnamed namespace } // namespace westmere } // namespace simdutf /* end file src/generic/utf8_to_latin1/utf8_to_latin1.h */ /* begin file src/generic/utf8_to_latin1/valid_utf8_to_latin1.h */ - namespace simdutf { namespace westmere { namespace { namespace utf8_to_latin1 { using namespace simd; - - simdutf_really_inline size_t convert_valid(const char* in, size_t size, char* latin1_output) { - size_t pos = 0; - char* start{latin1_output}; - // In the worst case, we have the haswell kernel which can cause an overflow of - // 8 bytes when calling convert_masked_utf8_to_latin1. If you skip the last 16 bytes, - // and if the data is valid, then it is entirely safe because 16 UTF-8 bytes generate - // much more than 8 bytes. However, you cannot generally assume that you have valid - // UTF-8 input, so we are going to go back from the end counting 8 leading bytes, - // to give us a good margin. - size_t leading_byte = 0; - size_t margin = size; - for(; margin > 0 && leading_byte < 8; margin--) { - leading_byte += (int8_t(in[margin-1]) > -65); //twos complement of -65 is 1011 1111 ... - } - // If the input is long enough, then we have that margin-1 is the eight last leading byte. - const size_t safety_margin = size - margin + 1; // to avoid overruns! - while(pos + 64 + safety_margin <= size) { - simd8x64 input(reinterpret_cast(in + pos)); - if(input.is_ascii()) { - input.store((int8_t*)latin1_output); - latin1_output += 64; - pos += 64; - } else { - // you might think that a for-loop would work, but under Visual Studio, it is not good enough. - uint64_t utf8_continuation_mask = input.lt(-65 + 1); // -64 is 1100 0000 in twos complement. Note: in this case, we also have ASCII to account for. - uint64_t utf8_leading_mask = ~utf8_continuation_mask; - uint64_t utf8_end_of_code_point_mask = utf8_leading_mask>>1; - // We process in blocks of up to 12 bytes except possibly - // for fast paths which may process up to 16 bytes. For the - // slow path to work, we should have at least 12 input bytes left. - size_t max_starting_point = (pos + 64) - 12; - // Next loop is going to run at least five times. - while(pos < max_starting_point) { - // Performance note: our ability to compute 'consumed' and - // then shift and recompute is critical. If there is a - // latency of, say, 4 cycles on getting 'consumed', then - // the inner loop might have a total latency of about 6 cycles. - // Yet we process between 6 to 12 inputs bytes, thus we get - // a speed limit between 1 cycle/byte and 0.5 cycle/byte - // for this section of the code. Hence, there is a limit - // to how much we can further increase this latency before - // it seriously harms performance. - size_t consumed = convert_masked_utf8_to_latin1(in + pos, - utf8_end_of_code_point_mask, latin1_output); - pos += consumed; - utf8_end_of_code_point_mask >>= consumed; - } - // At this point there may remain between 0 and 12 bytes in the - // 64-byte block. These bytes will be processed again. So we have an - // 80% efficiency (in the worst case). In practice we expect an - // 85% to 90% efficiency. - } - } - if(pos < size) { - size_t howmany = scalar::utf8_to_latin1::convert_valid(in + pos, size - pos, latin1_output); - latin1_output += howmany; +simdutf_really_inline size_t convert_valid(const char *in, size_t size, + char *latin1_output) { + size_t pos = 0; + char *start{latin1_output}; + // In the worst case, we have the haswell kernel which can cause an overflow + // of 8 bytes when calling convert_masked_utf8_to_latin1. If you skip the last + // 16 bytes, and if the data is valid, then it is entirely safe because 16 + // UTF-8 bytes generate much more than 8 bytes. However, you cannot generally + // assume that you have valid UTF-8 input, so we are going to go back from the + // end counting 8 leading bytes, to give us a good margin. + size_t leading_byte = 0; + size_t margin = size; + for (; margin > 0 && leading_byte < 8; margin--) { + leading_byte += (int8_t(in[margin - 1]) > + -65); // twos complement of -65 is 1011 1111 ... + } + // If the input is long enough, then we have that margin-1 is the eight last + // leading byte. + const size_t safety_margin = size - margin + 1; // to avoid overruns! + while (pos + 64 + safety_margin <= size) { + simd8x64 input(reinterpret_cast(in + pos)); + if (input.is_ascii()) { + input.store((int8_t *)latin1_output); + latin1_output += 64; + pos += 64; + } else { + // you might think that a for-loop would work, but under Visual Studio, it + // is not good enough. + uint64_t utf8_continuation_mask = + input.lt(-65 + 1); // -64 is 1100 0000 in twos complement. Note: in + // this case, we also have ASCII to account for. + uint64_t utf8_leading_mask = ~utf8_continuation_mask; + uint64_t utf8_end_of_code_point_mask = utf8_leading_mask >> 1; + // We process in blocks of up to 12 bytes except possibly + // for fast paths which may process up to 16 bytes. For the + // slow path to work, we should have at least 12 input bytes left. + size_t max_starting_point = (pos + 64) - 12; + // Next loop is going to run at least five times. + while (pos < max_starting_point) { + // Performance note: our ability to compute 'consumed' and + // then shift and recompute is critical. If there is a + // latency of, say, 4 cycles on getting 'consumed', then + // the inner loop might have a total latency of about 6 cycles. + // Yet we process between 6 to 12 inputs bytes, thus we get + // a speed limit between 1 cycle/byte and 0.5 cycle/byte + // for this section of the code. Hence, there is a limit + // to how much we can further increase this latency before + // it seriously harms performance. + size_t consumed = convert_masked_utf8_to_latin1( + in + pos, utf8_end_of_code_point_mask, latin1_output); + pos += consumed; + utf8_end_of_code_point_mask >>= consumed; } - return latin1_output - start; + // At this point there may remain between 0 and 12 bytes in the + // 64-byte block. These bytes will be processed again. So we have an + // 80% efficiency (in the worst case). In practice we expect an + // 85% to 90% efficiency. } - } -} // utf8_to_latin1 namespace -} // unnamed namespace -} // namespace westmere - // namespace simdutf -/* end file src/generic/utf8_to_latin1/valid_utf8_to_latin1.h */ + if (pos < size) { + size_t howmany = scalar::utf8_to_latin1::convert_valid(in + pos, size - pos, + latin1_output); + latin1_output += howmany; + } + return latin1_output - start; +} +} // namespace utf8_to_latin1 +} // namespace +} // namespace westmere +} // namespace simdutf + // namespace simdutf +/* end file src/generic/utf8_to_latin1/valid_utf8_to_latin1.h */ // // Implementation-specific overrides @@ -37437,39 +39713,57 @@ using namespace simd; namespace simdutf { namespace westmere { -simdutf_warn_unused int implementation::detect_encodings(const char * input, size_t length) const noexcept { +simdutf_warn_unused int +implementation::detect_encodings(const char *input, + size_t length) const noexcept { // If there is a BOM, then we trust it. auto bom_encoding = simdutf::BOM::check_bom(input, length); // todo: reimplement as a one-pass algorithm. - if(bom_encoding != encoding_type::unspecified) { return bom_encoding; } + if (bom_encoding != encoding_type::unspecified) { + return bom_encoding; + } int out = 0; - if(validate_utf8(input, length)) { out |= encoding_type::UTF8; } - if((length % 2) == 0) { - if(validate_utf16le(reinterpret_cast(input), length/2)) { out |= encoding_type::UTF16_LE; } + if (validate_utf8(input, length)) { + out |= encoding_type::UTF8; + } + if ((length % 2) == 0) { + if (validate_utf16le(reinterpret_cast(input), + length / 2)) { + out |= encoding_type::UTF16_LE; + } } - if((length % 4) == 0) { - if(validate_utf32(reinterpret_cast(input), length/4)) { out |= encoding_type::UTF32_LE; } + if ((length % 4) == 0) { + if (validate_utf32(reinterpret_cast(input), length / 4)) { + out |= encoding_type::UTF32_LE; + } } return out; } -simdutf_warn_unused bool implementation::validate_utf8(const char *buf, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_utf8(const char *buf, size_t len) const noexcept { return westmere::utf8_validation::generic_validate_utf8(buf, len); } -simdutf_warn_unused result implementation::validate_utf8_with_errors(const char *buf, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_utf8_with_errors( + const char *buf, size_t len) const noexcept { return westmere::utf8_validation::generic_validate_utf8_with_errors(buf, len); } -simdutf_warn_unused bool implementation::validate_ascii(const char *buf, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_ascii(const char *buf, size_t len) const noexcept { return westmere::utf8_validation::generic_validate_ascii(buf, len); } -simdutf_warn_unused result implementation::validate_ascii_with_errors(const char *buf, size_t len) const noexcept { - return westmere::utf8_validation::generic_validate_ascii_with_errors(buf,len); +simdutf_warn_unused result implementation::validate_ascii_with_errors( + const char *buf, size_t len) const noexcept { + return westmere::utf8_validation::generic_validate_ascii_with_errors(buf, + len); } -simdutf_warn_unused bool implementation::validate_utf16le(const char16_t *buf, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_utf16le(const char16_t *buf, + size_t len) const noexcept { if (simdutf_unlikely(len == 0)) { // empty input is valid UTF-16. protect the implementation from // handling nullptr @@ -37477,13 +39771,16 @@ simdutf_warn_unused bool implementation::validate_utf16le(const char16_t *buf, s } const char16_t *tail = sse_validate_utf16(buf, len); if (tail) { - return scalar::utf16::validate(tail, len - (tail - buf)); + return scalar::utf16::validate(tail, + len - (tail - buf)); } else { return false; } } -simdutf_warn_unused bool implementation::validate_utf16be(const char16_t *buf, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_utf16be(const char16_t *buf, + size_t len) const noexcept { if (simdutf_unlikely(len == 0)) { // empty input is valid UTF-16. protect the implementation from // handling nullptr @@ -37497,27 +39794,32 @@ simdutf_warn_unused bool implementation::validate_utf16be(const char16_t *buf, s } } -simdutf_warn_unused result implementation::validate_utf16le_with_errors(const char16_t *buf, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_utf16le_with_errors( + const char16_t *buf, size_t len) const noexcept { result res = sse_validate_utf16_with_errors(buf, len); if (res.count != len) { - result scalar_res = scalar::utf16::validate_with_errors(buf + res.count, len - res.count); + result scalar_res = scalar::utf16::validate_with_errors( + buf + res.count, len - res.count); return result(scalar_res.error, res.count + scalar_res.count); } else { return res; } } -simdutf_warn_unused result implementation::validate_utf16be_with_errors(const char16_t *buf, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_utf16be_with_errors( + const char16_t *buf, size_t len) const noexcept { result res = sse_validate_utf16_with_errors(buf, len); if (res.count != len) { - result scalar_res = scalar::utf16::validate_with_errors(buf + res.count, len - res.count); + result scalar_res = scalar::utf16::validate_with_errors( + buf + res.count, len - res.count); return result(scalar_res.error, res.count + scalar_res.count); } else { return res; } } -simdutf_warn_unused bool implementation::validate_utf32(const char32_t *buf, size_t len) const noexcept { +simdutf_warn_unused bool +implementation::validate_utf32(const char32_t *buf, size_t len) const noexcept { if (simdutf_unlikely(len == 0)) { // empty input is valid UTF-32. protect the implementation from // handling nullptr @@ -37531,7 +39833,8 @@ simdutf_warn_unused bool implementation::validate_utf32(const char32_t *buf, siz } } -simdutf_warn_unused result implementation::validate_utf32_with_errors(const char32_t *buf, size_t len) const noexcept { +simdutf_warn_unused result implementation::validate_utf32_with_errors( + const char32_t *buf, size_t len) const noexcept { if (len == 0) { // empty input is valid UTF-32. protect the implementation from // handling nullptr @@ -37539,161 +39842,216 @@ simdutf_warn_unused result implementation::validate_utf32_with_errors(const char } result res = sse_validate_utf32le_with_errors(buf, len); if (res.count != len) { - result scalar_res = scalar::utf32::validate_with_errors(buf + res.count, len - res.count); + result scalar_res = + scalar::utf32::validate_with_errors(buf + res.count, len - res.count); return result(scalar_res.error, res.count + scalar_res.count); } else { return res; } } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf8(const char * buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_latin1_to_utf8( + const char *buf, size_t len, char *utf8_output) const noexcept { - std::pair ret = sse_convert_latin1_to_utf8(buf, len, utf8_output); + std::pair ret = + sse_convert_latin1_to_utf8(buf, len, utf8_output); size_t converted_chars = ret.second - utf8_output; if (ret.first != buf + len) { const size_t scalar_converted_chars = scalar::latin1_to_utf8::convert( - ret.first, len - (ret.first - buf), ret.second); + ret.first, len - (ret.first - buf), ret.second); converted_chars += scalar_converted_chars; } return converted_chars; } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf16le(const char* buf, size_t len, char16_t* utf16_output) const noexcept { - std::pair ret = sse_convert_latin1_to_utf16(buf, len, utf16_output); - if (ret.first == nullptr) { return 0; } - size_t converted_chars = ret.second - utf16_output; - if (ret.first != buf + len) { - const size_t scalar_converted_chars = scalar::latin1_to_utf16::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_converted_chars == 0) { return 0; } - converted_chars += scalar_converted_chars; +simdutf_warn_unused size_t implementation::convert_latin1_to_utf16le( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { + std::pair ret = + sse_convert_latin1_to_utf16(buf, len, utf16_output); + if (ret.first == nullptr) { + return 0; + } + size_t converted_chars = ret.second - utf16_output; + if (ret.first != buf + len) { + const size_t scalar_converted_chars = + scalar::latin1_to_utf16::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_converted_chars == 0) { + return 0; } - return converted_chars; + converted_chars += scalar_converted_chars; + } + return converted_chars; } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf16be(const char* buf, size_t len, char16_t* utf16_output) const noexcept { - std::pair ret = sse_convert_latin1_to_utf16(buf, len, utf16_output); - if (ret.first == nullptr) { return 0; } - size_t converted_chars = ret.second - utf16_output; - if (ret.first != buf + len) { - const size_t scalar_converted_chars = scalar::latin1_to_utf16::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_converted_chars == 0) { return 0; } - converted_chars += scalar_converted_chars; +simdutf_warn_unused size_t implementation::convert_latin1_to_utf16be( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { + std::pair ret = + sse_convert_latin1_to_utf16(buf, len, utf16_output); + if (ret.first == nullptr) { + return 0; + } + size_t converted_chars = ret.second - utf16_output; + if (ret.first != buf + len) { + const size_t scalar_converted_chars = + scalar::latin1_to_utf16::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_converted_chars == 0) { + return 0; } - return converted_chars; + converted_chars += scalar_converted_chars; + } + return converted_chars; } -simdutf_warn_unused size_t implementation::convert_latin1_to_utf32(const char* buf, size_t len, char32_t* utf32_output) const noexcept { - std::pair ret = sse_convert_latin1_to_utf32(buf, len, utf32_output); - if (ret.first == nullptr) { return 0; } - size_t converted_chars = ret.second - utf32_output; - if (ret.first != buf + len) { - const size_t scalar_converted_chars = scalar::latin1_to_utf32::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_converted_chars == 0) { return 0; } - converted_chars += scalar_converted_chars; +simdutf_warn_unused size_t implementation::convert_latin1_to_utf32( + const char *buf, size_t len, char32_t *utf32_output) const noexcept { + std::pair ret = + sse_convert_latin1_to_utf32(buf, len, utf32_output); + if (ret.first == nullptr) { + return 0; + } + size_t converted_chars = ret.second - utf32_output; + if (ret.first != buf + len) { + const size_t scalar_converted_chars = scalar::latin1_to_utf32::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_converted_chars == 0) { + return 0; } - return converted_chars; + converted_chars += scalar_converted_chars; + } + return converted_chars; } - -simdutf_warn_unused size_t implementation::convert_utf8_to_latin1(const char* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) const noexcept { utf8_to_latin1::validating_transcoder converter; return converter.convert(buf, len, latin1_output); } -simdutf_warn_unused result implementation::convert_utf8_to_latin1_with_errors(const char* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused result implementation::convert_utf8_to_latin1_with_errors( + const char *buf, size_t len, char *latin1_output) const noexcept { utf8_to_latin1::validating_transcoder converter; return converter.convert_with_errors(buf, len, latin1_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_latin1(const char* buf, size_t len, char* latin1_output) const noexcept { - return westmere::utf8_to_latin1::convert_valid(buf,len,latin1_output); +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_latin1( + const char *buf, size_t len, char *latin1_output) const noexcept { + return westmere::utf8_to_latin1::convert_valid(buf, len, latin1_output); } -simdutf_warn_unused size_t implementation::convert_utf8_to_utf16le(const char* buf, size_t len, char16_t* utf16_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf8_to_utf16le( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { utf8_to_utf16::validating_transcoder converter; return converter.convert(buf, len, utf16_output); } -simdutf_warn_unused size_t implementation::convert_utf8_to_utf16be(const char* buf, size_t len, char16_t* utf16_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf8_to_utf16be( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { utf8_to_utf16::validating_transcoder converter; return converter.convert(buf, len, utf16_output); } -simdutf_warn_unused result implementation::convert_utf8_to_utf16le_with_errors(const char* buf, size_t len, char16_t* utf16_output) const noexcept { +simdutf_warn_unused result implementation::convert_utf8_to_utf16le_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { utf8_to_utf16::validating_transcoder converter; - return converter.convert_with_errors(buf, len, utf16_output); + return converter.convert_with_errors(buf, len, + utf16_output); } -simdutf_warn_unused result implementation::convert_utf8_to_utf16be_with_errors(const char* buf, size_t len, char16_t* utf16_output) const noexcept { +simdutf_warn_unused result implementation::convert_utf8_to_utf16be_with_errors( + const char *buf, size_t len, char16_t *utf16_output) const noexcept { utf8_to_utf16::validating_transcoder converter; return converter.convert_with_errors(buf, len, utf16_output); } - -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16le(const char* input, size_t size, - char16_t* utf16_output) const noexcept { - return utf8_to_utf16::convert_valid(input, size, utf16_output); +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16le( + const char *input, size_t size, char16_t *utf16_output) const noexcept { + return utf8_to_utf16::convert_valid(input, size, + utf16_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16be(const char* input, size_t size, - char16_t* utf16_output) const noexcept { - return utf8_to_utf16::convert_valid(input, size, utf16_output); +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16be( + const char *input, size_t size, char16_t *utf16_output) const noexcept { + return utf8_to_utf16::convert_valid(input, size, + utf16_output); } -simdutf_warn_unused size_t implementation::convert_utf8_to_utf32(const char* buf, size_t len, char32_t* utf32_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_utf8_to_utf32( + const char *buf, size_t len, char32_t *utf32_output) const noexcept { utf8_to_utf32::validating_transcoder converter; return converter.convert(buf, len, utf32_output); } -simdutf_warn_unused result implementation::convert_utf8_to_utf32_with_errors(const char* buf, size_t len, char32_t* utf32_output) const noexcept { +simdutf_warn_unused result implementation::convert_utf8_to_utf32_with_errors( + const char *buf, size_t len, char32_t *utf32_output) const noexcept { utf8_to_utf32::validating_transcoder converter; return converter.convert_with_errors(buf, len, utf32_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf32(const char* input, size_t size, - char32_t* utf32_output) const noexcept { - return utf8_to_utf32::convert_valid(input, size, utf32_output); +simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf32( + const char *input, size_t size, char32_t *utf32_output) const noexcept { + return utf8_to_utf32::convert_valid(input, size, utf32_output); } -simdutf_warn_unused size_t implementation::convert_utf16le_to_latin1(const char16_t* buf, size_t len, char* latin1_output) const noexcept { - std::pair ret = sse_convert_utf16_to_latin1(buf, len, latin1_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf16le_to_latin1( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { + std::pair ret = + sse_convert_utf16_to_latin1(buf, len, latin1_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - latin1_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf16_to_latin1::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf16_to_latin1::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused size_t implementation::convert_utf16be_to_latin1(const char16_t* buf, size_t len, char* latin1_output) const noexcept { - std::pair ret = sse_convert_utf16_to_latin1(buf, len, latin1_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf16be_to_latin1( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { + std::pair ret = + sse_convert_utf16_to_latin1(buf, len, latin1_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - latin1_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf16_to_latin1::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf16_to_latin1::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused result implementation::convert_utf16le_to_latin1_with_errors(const char16_t* buf, size_t len, char* latin1_output) const noexcept { - std::pair ret = sse_convert_utf16_to_latin1_with_errors(buf, len, latin1_output); - if (ret.first.error) { return ret.first; } // Can return directly since scalar fallback already found correct ret.first.count +simdutf_warn_unused result +implementation::convert_utf16le_to_latin1_with_errors( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { + std::pair ret = + sse_convert_utf16_to_latin1_with_errors( + buf, len, latin1_output); + if (ret.first.error) { + return ret.first; + } // Can return directly since scalar fallback already found correct + // ret.first.count if (ret.first.count != len) { // All good so far, but not finished - result scalar_res = scalar::utf16_to_latin1::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf16_to_latin1::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -37701,16 +40059,26 @@ simdutf_warn_unused result implementation::convert_utf16le_to_latin1_with_errors ret.second += scalar_res.count; } } - ret.first.count = ret.second - latin1_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + latin1_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused result implementation::convert_utf16be_to_latin1_with_errors(const char16_t* buf, size_t len, char* latin1_output) const noexcept { - std::pair ret = sse_convert_utf16_to_latin1_with_errors(buf, len, latin1_output); - if (ret.first.error) { return ret.first; } // Can return directly since scalar fallback already found correct ret.first.count +simdutf_warn_unused result +implementation::convert_utf16be_to_latin1_with_errors( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { + std::pair ret = + sse_convert_utf16_to_latin1_with_errors(buf, len, + latin1_output); + if (ret.first.error) { + return ret.first; + } // Can return directly since scalar fallback already found correct + // ret.first.count if (ret.first.count != len) { // All good so far, but not finished - result scalar_res = scalar::utf16_to_latin1::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf16_to_latin1::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -37718,54 +40086,79 @@ simdutf_warn_unused result implementation::convert_utf16be_to_latin1_with_errors ret.second += scalar_res.count; } } - ret.first.count = ret.second - latin1_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + latin1_output; // Set count to the number of 8-bit code units written return ret.first; } - -simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_latin1(const char16_t* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_latin1( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { // optimization opportunity: we could provide an optimized function. return convert_utf16be_to_latin1(buf, len, latin1_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_latin1(const char16_t* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_latin1( + const char16_t *buf, size_t len, char *latin1_output) const noexcept { // optimization opportunity: we could provide an optimized function. return convert_utf16le_to_latin1(buf, len, latin1_output); } -simdutf_warn_unused size_t implementation::convert_utf16le_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { - std::pair ret = sse_convert_utf16_to_utf8(buf, len, utf8_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { + std::pair ret = + sse_convert_utf16_to_utf8(buf, len, utf8_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf8_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf16_to_utf8::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf16_to_utf8::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused size_t implementation::convert_utf16be_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { - std::pair ret = sse_convert_utf16_to_utf8(buf, len, utf8_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { + std::pair ret = + sse_convert_utf16_to_utf8(buf, len, utf8_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf8_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf16_to_utf8::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf16_to_utf8::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused result implementation::convert_utf16le_to_utf8_with_errors(const char16_t* buf, size_t len, char* utf8_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = westmere::sse_convert_utf16_to_utf8_with_errors(buf, len, utf8_output); - if (ret.first.error) { return ret.first; } // Can return directly since scalar fallback already found correct ret.first.count +simdutf_warn_unused result implementation::convert_utf16le_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + westmere::sse_convert_utf16_to_utf8_with_errors( + buf, len, utf8_output); + if (ret.first.error) { + return ret.first; + } // Can return directly since scalar fallback already found correct + // ret.first.count if (ret.first.count != len) { // All good so far, but not finished - result scalar_res = scalar::utf16_to_utf8::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf16_to_utf8::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -37773,17 +40166,27 @@ simdutf_warn_unused result implementation::convert_utf16le_to_utf8_with_errors(c ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf8_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf8_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused result implementation::convert_utf16be_to_utf8_with_errors(const char16_t* buf, size_t len, char* utf8_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = westmere::sse_convert_utf16_to_utf8_with_errors(buf, len, utf8_output); - if (ret.first.error) { return ret.first; } // Can return directly since scalar fallback already found correct ret.first.count +simdutf_warn_unused result implementation::convert_utf16be_to_utf8_with_errors( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + westmere::sse_convert_utf16_to_utf8_with_errors( + buf, len, utf8_output); + if (ret.first.error) { + return ret.first; + } // Can return directly since scalar fallback already found correct + // ret.first.count if (ret.first.count != len) { // All good so far, but not finished - result scalar_res = scalar::utf16_to_utf8::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf16_to_utf8::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -37791,39 +40194,52 @@ simdutf_warn_unused result implementation::convert_utf16be_to_utf8_with_errors(c ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf8_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf8_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { return convert_utf16le_to_utf8(buf, len, utf8_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf8(const char16_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf8( + const char16_t *buf, size_t len, char *utf8_output) const noexcept { return convert_utf16be_to_utf8(buf, len, utf8_output); } -simdutf_warn_unused size_t implementation::convert_utf32_to_latin1(const char32_t* buf, size_t len, char* latin1_output) const noexcept { - std::pair ret = sse_convert_utf32_to_latin1(buf, len, latin1_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf32_to_latin1( + const char32_t *buf, size_t len, char *latin1_output) const noexcept { + std::pair ret = + sse_convert_utf32_to_latin1(buf, len, latin1_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - latin1_output; // if (ret.first != buf + len) { if (ret.first < buf + len) { const size_t scalar_saved_bytes = scalar::utf32_to_latin1::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } - -simdutf_warn_unused result implementation::convert_utf32_to_latin1_with_errors(const char32_t* buf, size_t len, char* latin1_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = westmere::sse_convert_utf32_to_latin1_with_errors(buf, len, latin1_output); +simdutf_warn_unused result implementation::convert_utf32_to_latin1_with_errors( + const char32_t *buf, size_t len, char *latin1_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + westmere::sse_convert_utf32_to_latin1_with_errors(buf, len, + latin1_output); if (ret.first.count != len) { result scalar_res = scalar::utf32_to_latin1::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -37831,34 +40247,46 @@ simdutf_warn_unused result implementation::convert_utf32_to_latin1_with_errors(c ret.second += scalar_res.count; } } - ret.first.count = ret.second - latin1_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + latin1_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_latin1(const char32_t* buf, size_t len, char* latin1_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_latin1( + const char32_t *buf, size_t len, char *latin1_output) const noexcept { // optimization opportunity: we could provide an optimized function. - return convert_utf32_to_latin1(buf,len,latin1_output); + return convert_utf32_to_latin1(buf, len, latin1_output); } -simdutf_warn_unused size_t implementation::convert_utf32_to_utf8(const char32_t* buf, size_t len, char* utf8_output) const noexcept { - std::pair ret = sse_convert_utf32_to_utf8(buf, len, utf8_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_output) const noexcept { + std::pair ret = + sse_convert_utf32_to_utf8(buf, len, utf8_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf8_output; if (ret.first != buf + len) { const size_t scalar_saved_bytes = scalar::utf32_to_utf8::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused result implementation::convert_utf32_to_utf8_with_errors(const char32_t* buf, size_t len, char* utf8_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = westmere::sse_convert_utf32_to_utf8_with_errors(buf, len, utf8_output); +simdutf_warn_unused result implementation::convert_utf32_to_utf8_with_errors( + const char32_t *buf, size_t len, char *utf8_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + westmere::sse_convert_utf32_to_utf8_with_errors(buf, len, utf8_output); if (ret.first.count != len) { result scalar_res = scalar::utf32_to_utf8::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -37866,43 +40294,67 @@ simdutf_warn_unused result implementation::convert_utf32_to_utf8_with_errors(con ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf8_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf8_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused size_t implementation::convert_utf16le_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - std::pair ret = sse_convert_utf16_to_utf32(buf, len, utf32_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf16le_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + std::pair ret = + sse_convert_utf16_to_utf32(buf, len, utf32_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf32_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf16_to_utf32::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf16_to_utf32::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused size_t implementation::convert_utf16be_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - std::pair ret = sse_convert_utf16_to_utf32(buf, len, utf32_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf16be_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + std::pair ret = + sse_convert_utf16_to_utf32(buf, len, utf32_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf32_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf16_to_utf32::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf16_to_utf32::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused result implementation::convert_utf16le_to_utf32_with_errors(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = westmere::sse_convert_utf16_to_utf32_with_errors(buf, len, utf32_output); - if (ret.first.error) { return ret.first; } // Can return directly since scalar fallback already found correct ret.first.count +simdutf_warn_unused result implementation::convert_utf16le_to_utf32_with_errors( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + westmere::sse_convert_utf16_to_utf32_with_errors( + buf, len, utf32_output); + if (ret.first.error) { + return ret.first; + } // Can return directly since scalar fallback already found correct + // ret.first.count if (ret.first.count != len) { // All good so far, but not finished - result scalar_res = scalar::utf16_to_utf32::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf16_to_utf32::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -37910,17 +40362,27 @@ simdutf_warn_unused result implementation::convert_utf16le_to_utf32_with_errors( ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf32_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf32_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused result implementation::convert_utf16be_to_utf32_with_errors(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = westmere::sse_convert_utf16_to_utf32_with_errors(buf, len, utf32_output); - if (ret.first.error) { return ret.first; } // Can return directly since scalar fallback already found correct ret.first.count +simdutf_warn_unused result implementation::convert_utf16be_to_utf32_with_errors( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + westmere::sse_convert_utf16_to_utf32_with_errors( + buf, len, utf32_output); + if (ret.first.error) { + return ret.first; + } // Can return directly since scalar fallback already found correct + // ret.first.count if (ret.first.count != len) { // All good so far, but not finished - result scalar_res = scalar::utf16_to_utf32::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf16_to_utf32::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -37928,46 +40390,68 @@ simdutf_warn_unused result implementation::convert_utf16be_to_utf32_with_errors( ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf32_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf32_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf8(const char32_t* buf, size_t len, char* utf8_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf8( + const char32_t *buf, size_t len, char *utf8_output) const noexcept { return convert_utf32_to_utf8(buf, len, utf8_output); } -simdutf_warn_unused size_t implementation::convert_utf32_to_utf16le(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - std::pair ret = sse_convert_utf32_to_utf16(buf, len, utf16_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf32_to_utf16le( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + std::pair ret = + sse_convert_utf32_to_utf16(buf, len, utf16_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf16_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf32_to_utf16::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf32_to_utf16::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused size_t implementation::convert_utf32_to_utf16be(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - std::pair ret = sse_convert_utf32_to_utf16(buf, len, utf16_output); - if (ret.first == nullptr) { return 0; } +simdutf_warn_unused size_t implementation::convert_utf32_to_utf16be( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + std::pair ret = + sse_convert_utf32_to_utf16(buf, len, utf16_output); + if (ret.first == nullptr) { + return 0; + } size_t saved_bytes = ret.second - utf16_output; if (ret.first != buf + len) { - const size_t scalar_saved_bytes = scalar::utf32_to_utf16::convert( - ret.first, len - (ret.first - buf), ret.second); - if (scalar_saved_bytes == 0) { return 0; } + const size_t scalar_saved_bytes = + scalar::utf32_to_utf16::convert( + ret.first, len - (ret.first - buf), ret.second); + if (scalar_saved_bytes == 0) { + return 0; + } saved_bytes += scalar_saved_bytes; } return saved_bytes; } -simdutf_warn_unused result implementation::convert_utf32_to_utf16le_with_errors(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = westmere::sse_convert_utf32_to_utf16_with_errors(buf, len, utf16_output); +simdutf_warn_unused result implementation::convert_utf32_to_utf16le_with_errors( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + westmere::sse_convert_utf32_to_utf16_with_errors( + buf, len, utf16_output); if (ret.first.count != len) { - result scalar_res = scalar::utf32_to_utf16::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf32_to_utf16::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -37975,16 +40459,23 @@ simdutf_warn_unused result implementation::convert_utf32_to_utf16le_with_errors( ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf16_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf16_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused result implementation::convert_utf32_to_utf16be_with_errors(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { - // ret.first.count is always the position in the buffer, not the number of code units written even if finished - std::pair ret = westmere::sse_convert_utf32_to_utf16_with_errors(buf, len, utf16_output); +simdutf_warn_unused result implementation::convert_utf32_to_utf16be_with_errors( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { + // ret.first.count is always the position in the buffer, not the number of + // code units written even if finished + std::pair ret = + westmere::sse_convert_utf32_to_utf16_with_errors( + buf, len, utf16_output); if (ret.first.count != len) { - result scalar_res = scalar::utf32_to_utf16::convert_with_errors( - buf + ret.first.count, len - ret.first.count, ret.second); + result scalar_res = + scalar::utf32_to_utf16::convert_with_errors( + buf + ret.first.count, len - ret.first.count, ret.second); if (scalar_res.error) { scalar_res.count += ret.first.count; return scalar_res; @@ -37992,75 +40483,94 @@ simdutf_warn_unused result implementation::convert_utf32_to_utf16be_with_errors( ret.second += scalar_res.count; } } - ret.first.count = ret.second - utf16_output; // Set count to the number of 8-bit code units written + ret.first.count = + ret.second - + utf16_output; // Set count to the number of 8-bit code units written return ret.first; } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16le(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16le( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { return convert_utf32_to_utf16le(buf, len, utf16_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16be(const char32_t* buf, size_t len, char16_t* utf16_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16be( + const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept { return convert_utf32_to_utf16be(buf, len, utf16_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { return convert_utf16le_to_utf32(buf, len, utf32_output); } -simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf32(const char16_t* buf, size_t len, char32_t* utf32_output) const noexcept { +simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf32( + const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept { return convert_utf16be_to_utf32(buf, len, utf32_output); } -void implementation::change_endianness_utf16(const char16_t * input, size_t length, char16_t * output) const noexcept { +void implementation::change_endianness_utf16(const char16_t *input, + size_t length, + char16_t *output) const noexcept { utf16::change_endianness_utf16(input, length, output); } -simdutf_warn_unused size_t implementation::count_utf16le(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::count_utf16le( + const char16_t *input, size_t length) const noexcept { return utf16::count_code_points(input, length); } -simdutf_warn_unused size_t implementation::count_utf16be(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::count_utf16be( + const char16_t *input, size_t length) const noexcept { return utf16::count_code_points(input, length); } -simdutf_warn_unused size_t implementation::count_utf8(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::count_utf8(const char *input, size_t length) const noexcept { return utf8::count_code_points(input, length); } -simdutf_warn_unused size_t implementation::latin1_length_from_utf8(const char* buf, size_t len) const noexcept { - return count_utf8(buf,len); +simdutf_warn_unused size_t implementation::latin1_length_from_utf8( + const char *buf, size_t len) const noexcept { + return count_utf8(buf, len); } -simdutf_warn_unused size_t implementation::latin1_length_from_utf16(size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::latin1_length_from_utf16(size_t length) const noexcept { return scalar::utf16::latin1_length_from_utf16(length); } -simdutf_warn_unused size_t implementation::latin1_length_from_utf32(size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::latin1_length_from_utf32(size_t length) const noexcept { return scalar::utf32::latin1_length_from_utf32(length); } -simdutf_warn_unused size_t implementation::utf8_length_from_utf16le(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf8_length_from_utf16le( + const char16_t *input, size_t length) const noexcept { return utf16::utf8_length_from_utf16(input, length); } -simdutf_warn_unused size_t implementation::utf8_length_from_utf16be(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf8_length_from_utf16be( + const char16_t *input, size_t length) const noexcept { return utf16::utf8_length_from_utf16(input, length); } -simdutf_warn_unused size_t implementation::utf16_length_from_latin1(size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::utf16_length_from_latin1(size_t length) const noexcept { return scalar::latin1::utf16_length_from_latin1(length); } -simdutf_warn_unused size_t implementation::utf32_length_from_latin1(size_t length) const noexcept { +simdutf_warn_unused size_t +implementation::utf32_length_from_latin1(size_t length) const noexcept { return scalar::latin1::utf32_length_from_latin1(length); } -simdutf_warn_unused size_t implementation::utf8_length_from_latin1(const char * input, size_t len) const noexcept { +simdutf_warn_unused size_t implementation::utf8_length_from_latin1( + const char *input, size_t len) const noexcept { const uint8_t *str = reinterpret_cast(input); size_t answer = len / sizeof(__m128i) * sizeof(__m128i); size_t i = 0; - if(answer >= 2048) { // long strings optimization + if (answer >= 2048) { // long strings optimization __m128i two_64bits = _mm_setzero_si128(); while (i + sizeof(__m128i) <= len) { __m128i runner = _mm_setzero_si128(); @@ -38069,135 +40579,166 @@ simdutf_warn_unused size_t implementation::utf8_length_from_latin1(const char * iterations = 255; } size_t max_i = i + iterations * sizeof(__m128i) - sizeof(__m128i); - for (; i + 4*sizeof(__m128i) <= max_i; i += 4*sizeof(__m128i)) { + for (; i + 4 * sizeof(__m128i) <= max_i; i += 4 * sizeof(__m128i)) { __m128i input1 = _mm_loadu_si128((const __m128i *)(str + i)); - __m128i input2 = _mm_loadu_si128((const __m128i *)(str + i + sizeof(__m128i))); - __m128i input3 = _mm_loadu_si128((const __m128i *)(str + i + 2*sizeof(__m128i))); - __m128i input4 = _mm_loadu_si128((const __m128i *)(str + i + 3*sizeof(__m128i))); - __m128i input12 = _mm_add_epi8( - _mm_cmpgt_epi8( - _mm_setzero_si128(), - input1), - _mm_cmpgt_epi8( - _mm_setzero_si128(), - input2)); - __m128i input34 = _mm_add_epi8( - _mm_cmpgt_epi8( - _mm_setzero_si128(), - input3), - _mm_cmpgt_epi8( - _mm_setzero_si128(), - input4)); + __m128i input2 = + _mm_loadu_si128((const __m128i *)(str + i + sizeof(__m128i))); + __m128i input3 = + _mm_loadu_si128((const __m128i *)(str + i + 2 * sizeof(__m128i))); + __m128i input4 = + _mm_loadu_si128((const __m128i *)(str + i + 3 * sizeof(__m128i))); + __m128i input12 = + _mm_add_epi8(_mm_cmpgt_epi8(_mm_setzero_si128(), input1), + _mm_cmpgt_epi8(_mm_setzero_si128(), input2)); + __m128i input34 = + _mm_add_epi8(_mm_cmpgt_epi8(_mm_setzero_si128(), input3), + _mm_cmpgt_epi8(_mm_setzero_si128(), input4)); __m128i input1234 = _mm_add_epi8(input12, input34); runner = _mm_sub_epi8(runner, input1234); } for (; i <= max_i; i += sizeof(__m128i)) { __m128i more_input = _mm_loadu_si128((const __m128i *)(str + i)); - runner = _mm_sub_epi8( - runner, _mm_cmpgt_epi8(_mm_setzero_si128(), more_input)); + runner = _mm_sub_epi8(runner, + _mm_cmpgt_epi8(_mm_setzero_si128(), more_input)); } - two_64bits = _mm_add_epi64( - two_64bits, _mm_sad_epu8(runner, _mm_setzero_si128())); + two_64bits = + _mm_add_epi64(two_64bits, _mm_sad_epu8(runner, _mm_setzero_si128())); } - answer += _mm_extract_epi64(two_64bits, 0) + - _mm_extract_epi64(two_64bits, 1); + answer += + _mm_extract_epi64(two_64bits, 0) + _mm_extract_epi64(two_64bits, 1); } else if (answer > 0) { // short string optimization - for(; i + 2*sizeof(__m128i) <= len; i += 2*sizeof(__m128i)) { - __m128i latin = _mm_loadu_si128((const __m128i*)(input + i)); + for (; i + 2 * sizeof(__m128i) <= len; i += 2 * sizeof(__m128i)) { + __m128i latin = _mm_loadu_si128((const __m128i *)(input + i)); uint16_t non_ascii = (uint16_t)_mm_movemask_epi8(latin); answer += count_ones(non_ascii); - latin = _mm_loadu_si128((const __m128i*)(input + i)+1); + latin = _mm_loadu_si128((const __m128i *)(input + i) + 1); non_ascii = (uint16_t)_mm_movemask_epi8(latin); answer += count_ones(non_ascii); } - for(; i + sizeof(__m128i) <= len; i += sizeof(__m128i)) { - __m128i latin = _mm_loadu_si128((const __m128i*)(input + i)); + for (; i + sizeof(__m128i) <= len; i += sizeof(__m128i)) { + __m128i latin = _mm_loadu_si128((const __m128i *)(input + i)); uint16_t non_ascii = (uint16_t)_mm_movemask_epi8(latin); answer += count_ones(non_ascii); } } - return answer + scalar::latin1::utf8_length_from_latin1(reinterpret_cast(str + i), len - i); + return answer + scalar::latin1::utf8_length_from_latin1( + reinterpret_cast(str + i), len - i); } -simdutf_warn_unused size_t implementation::utf32_length_from_utf16le(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf32_length_from_utf16le( + const char16_t *input, size_t length) const noexcept { return utf16::utf32_length_from_utf16(input, length); } -simdutf_warn_unused size_t implementation::utf32_length_from_utf16be(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf32_length_from_utf16be( + const char16_t *input, size_t length) const noexcept { return utf16::utf32_length_from_utf16(input, length); } -simdutf_warn_unused size_t implementation::utf16_length_from_utf8(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf16_length_from_utf8( + const char *input, size_t length) const noexcept { return utf8::utf16_length_from_utf8(input, length); } -simdutf_warn_unused size_t implementation::utf8_length_from_utf32(const char32_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf8_length_from_utf32( + const char32_t *input, size_t length) const noexcept { const __m128i v_00000000 = _mm_setzero_si128(); const __m128i v_ffffff80 = _mm_set1_epi32((uint32_t)0xffffff80); const __m128i v_fffff800 = _mm_set1_epi32((uint32_t)0xfffff800); const __m128i v_ffff0000 = _mm_set1_epi32((uint32_t)0xffff0000); size_t pos = 0; size_t count = 0; - for(;pos + 4 <= length; pos += 4) { - __m128i in = _mm_loadu_si128((__m128i*)(input + pos)); - const __m128i ascii_bytes_bytemask = _mm_cmpeq_epi32(_mm_and_si128(in, v_ffffff80), v_00000000); - const __m128i one_two_bytes_bytemask = _mm_cmpeq_epi32(_mm_and_si128(in, v_fffff800), v_00000000); - const __m128i two_bytes_bytemask = _mm_xor_si128(one_two_bytes_bytemask, ascii_bytes_bytemask); - const __m128i one_two_three_bytes_bytemask = _mm_cmpeq_epi32(_mm_and_si128(in, v_ffff0000), v_00000000); - const __m128i three_bytes_bytemask = _mm_xor_si128(one_two_three_bytes_bytemask, one_two_bytes_bytemask); - const uint16_t ascii_bytes_bitmask = static_cast(_mm_movemask_epi8(ascii_bytes_bytemask)); - const uint16_t two_bytes_bitmask = static_cast(_mm_movemask_epi8(two_bytes_bytemask)); - const uint16_t three_bytes_bitmask = static_cast(_mm_movemask_epi8(three_bytes_bytemask)); + for (; pos + 4 <= length; pos += 4) { + __m128i in = _mm_loadu_si128((__m128i *)(input + pos)); + const __m128i ascii_bytes_bytemask = + _mm_cmpeq_epi32(_mm_and_si128(in, v_ffffff80), v_00000000); + const __m128i one_two_bytes_bytemask = + _mm_cmpeq_epi32(_mm_and_si128(in, v_fffff800), v_00000000); + const __m128i two_bytes_bytemask = + _mm_xor_si128(one_two_bytes_bytemask, ascii_bytes_bytemask); + const __m128i one_two_three_bytes_bytemask = + _mm_cmpeq_epi32(_mm_and_si128(in, v_ffff0000), v_00000000); + const __m128i three_bytes_bytemask = + _mm_xor_si128(one_two_three_bytes_bytemask, one_two_bytes_bytemask); + const uint16_t ascii_bytes_bitmask = + static_cast(_mm_movemask_epi8(ascii_bytes_bytemask)); + const uint16_t two_bytes_bitmask = + static_cast(_mm_movemask_epi8(two_bytes_bytemask)); + const uint16_t three_bytes_bitmask = + static_cast(_mm_movemask_epi8(three_bytes_bytemask)); size_t ascii_count = count_ones(ascii_bytes_bitmask) / 4; size_t two_bytes_count = count_ones(two_bytes_bitmask) / 4; size_t three_bytes_count = count_ones(three_bytes_bitmask) / 4; - count += 16 - 3*ascii_count - 2*two_bytes_count - three_bytes_count; + count += 16 - 3 * ascii_count - 2 * two_bytes_count - three_bytes_count; } - return count + scalar::utf32::utf8_length_from_utf32(input + pos, length - pos); + return count + + scalar::utf32::utf8_length_from_utf32(input + pos, length - pos); } -simdutf_warn_unused size_t implementation::utf16_length_from_utf32(const char32_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf16_length_from_utf32( + const char32_t *input, size_t length) const noexcept { const __m128i v_00000000 = _mm_setzero_si128(); const __m128i v_ffff0000 = _mm_set1_epi32((uint32_t)0xffff0000); size_t pos = 0; size_t count = 0; - for(;pos + 4 <= length; pos += 4) { - __m128i in = _mm_loadu_si128((__m128i*)(input + pos)); - const __m128i surrogate_bytemask = _mm_cmpeq_epi32(_mm_and_si128(in, v_ffff0000), v_00000000); - const uint16_t surrogate_bitmask = static_cast(_mm_movemask_epi8(surrogate_bytemask)); - size_t surrogate_count = (16-count_ones(surrogate_bitmask))/4; + for (; pos + 4 <= length; pos += 4) { + __m128i in = _mm_loadu_si128((__m128i *)(input + pos)); + const __m128i surrogate_bytemask = + _mm_cmpeq_epi32(_mm_and_si128(in, v_ffff0000), v_00000000); + const uint16_t surrogate_bitmask = + static_cast(_mm_movemask_epi8(surrogate_bytemask)); + size_t surrogate_count = (16 - count_ones(surrogate_bitmask)) / 4; count += 4 + surrogate_count; } - return count + scalar::utf32::utf16_length_from_utf32(input + pos, length - pos); + return count + + scalar::utf32::utf16_length_from_utf32(input + pos, length - pos); } -simdutf_warn_unused size_t implementation::utf32_length_from_utf8(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::utf32_length_from_utf8( + const char *input, size_t length) const noexcept { return utf8::count_code_points(input, length); } -simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64(const char * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64( + const char *input, size_t length) const noexcept { return scalar::base64::maximal_binary_length_from_base64(input, length); } -simdutf_warn_unused result implementation::base64_to_binary(const char * input, size_t length, char* output, base64_options options) const noexcept { - return (options & base64_url) ? compress_decode_base64(output, input, length, options) : compress_decode_base64(output, input, length, options); +simdutf_warn_unused result implementation::base64_to_binary( + const char *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_options) const noexcept { + return (options & base64_url) + ? compress_decode_base64(output, input, length, options, + last_chunk_options) + : compress_decode_base64(output, input, length, options, + last_chunk_options); } -simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64(const char16_t * input, size_t length) const noexcept { +simdutf_warn_unused size_t implementation::maximal_binary_length_from_base64( + const char16_t *input, size_t length) const noexcept { return scalar::base64::maximal_binary_length_from_base64(input, length); } -simdutf_warn_unused result implementation::base64_to_binary(const char16_t * input, size_t length, char* output, base64_options options) const noexcept { - return (options & base64_url) ? compress_decode_base64(output, input, length, options) : compress_decode_base64(output, input, length, options); +simdutf_warn_unused result implementation::base64_to_binary( + const char16_t *input, size_t length, char *output, base64_options options, + last_chunk_handling_options last_chunk_options) const noexcept { + return (options & base64_url) + ? compress_decode_base64(output, input, length, options, + last_chunk_options) + : compress_decode_base64(output, input, length, options, + last_chunk_options); } -simdutf_warn_unused size_t implementation::base64_length_from_binary(size_t length, base64_options options) const noexcept { +simdutf_warn_unused size_t implementation::base64_length_from_binary( + size_t length, base64_options options) const noexcept { return scalar::base64::base64_length_from_binary(length, options); } -size_t implementation::binary_to_base64(const char * input, size_t length, char* output, base64_options options) const noexcept { - if(options & base64_url) { +size_t implementation::binary_to_base64(const char *input, size_t length, + char *output, + base64_options options) const noexcept { + if (options & base64_url) { return encode_base64(output, input, length, options); } else { return encode_base64(output, input, length, options); diff --git a/deps/simdutf/simdutf.h b/deps/simdutf/simdutf.h index 4b534c12563072..4ed08d542b0ac3 100644 --- a/deps/simdutf/simdutf.h +++ b/deps/simdutf/simdutf.h @@ -1,4 +1,4 @@ -/* auto-generated on 2024-09-04 18:13:32 +0200. Do not edit! */ +/* auto-generated on 2024-10-11 12:35:29 -0400. Do not edit! */ /* begin file include/simdutf.h */ #ifndef SIMDUTF_H #define SIMDUTF_H @@ -9,46 +9,44 @@ #define SIMDUTF_COMPILER_CHECK_H #ifndef __cplusplus -#error simdutf requires a C++ compiler + #error simdutf requires a C++ compiler #endif #ifndef SIMDUTF_CPLUSPLUS -#if defined(_MSVC_LANG) && !defined(__clang__) -#define SIMDUTF_CPLUSPLUS (_MSC_VER == 1900 ? 201103L : _MSVC_LANG) -#else -#define SIMDUTF_CPLUSPLUS __cplusplus -#endif + #if defined(_MSVC_LANG) && !defined(__clang__) + #define SIMDUTF_CPLUSPLUS (_MSC_VER == 1900 ? 201103L : _MSVC_LANG) + #else + #define SIMDUTF_CPLUSPLUS __cplusplus + #endif #endif - // C++ 23 #if !defined(SIMDUTF_CPLUSPLUS23) && (SIMDUTF_CPLUSPLUS >= 202302L) -#define SIMDUTF_CPLUSPLUS23 1 + #define SIMDUTF_CPLUSPLUS23 1 #endif // C++ 20 #if !defined(SIMDUTF_CPLUSPLUS20) && (SIMDUTF_CPLUSPLUS >= 202002L) -#define SIMDUTF_CPLUSPLUS20 1 + #define SIMDUTF_CPLUSPLUS20 1 #endif - // C++ 17 #if !defined(SIMDUTF_CPLUSPLUS17) && (SIMDUTF_CPLUSPLUS >= 201703L) -#define SIMDUTF_CPLUSPLUS17 1 + #define SIMDUTF_CPLUSPLUS17 1 #endif // C++ 14 #if !defined(SIMDUTF_CPLUSPLUS14) && (SIMDUTF_CPLUSPLUS >= 201402L) -#define SIMDUTF_CPLUSPLUS14 1 + #define SIMDUTF_CPLUSPLUS14 1 #endif // C++ 11 #if !defined(SIMDUTF_CPLUSPLUS11) && (SIMDUTF_CPLUSPLUS >= 201103L) -#define SIMDUTF_CPLUSPLUS11 1 + #define SIMDUTF_CPLUSPLUS11 1 #endif #ifndef SIMDUTF_CPLUSPLUS11 -#error simdutf requires a compiler compliant with the C++11 standard + #error simdutf requires a compiler compliant with the C++11 standard #endif #endif // SIMDUTF_COMPILER_CHECK_H @@ -68,8 +66,8 @@ #include #include #ifndef _WIN32 -// strcasecmp, strncasecmp -#include + // strcasecmp, strncasecmp + #include #endif /** @@ -78,131 +76,134 @@ */ #if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) -#define SIMDUTF_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) + #define SIMDUTF_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) #elif defined(_WIN32) -#define SIMDUTF_IS_BIG_ENDIAN 0 + #define SIMDUTF_IS_BIG_ENDIAN 0 #else -#if defined(__APPLE__) || defined(__FreeBSD__) // defined __BYTE_ORDER__ && defined __ORDER_BIG_ENDIAN__ -#include -#elif defined(sun) || defined(__sun) // defined(__APPLE__) || defined(__FreeBSD__) -#include -#else // defined(__APPLE__) || defined(__FreeBSD__) - -#ifdef __has_include -#if __has_include() -#include -#endif //__has_include() -#endif //__has_include - -#endif // defined(__APPLE__) || defined(__FreeBSD__) - - -#ifndef !defined(__BYTE_ORDER__) || !defined(__ORDER_LITTLE_ENDIAN__) -#define SIMDUTF_IS_BIG_ENDIAN 0 -#endif + #if defined(__APPLE__) || \ + defined(__FreeBSD__) // defined __BYTE_ORDER__ && defined + // __ORDER_BIG_ENDIAN__ + #include + #elif defined(sun) || \ + defined(__sun) // defined(__APPLE__) || defined(__FreeBSD__) + #include + #else // defined(__APPLE__) || defined(__FreeBSD__) + + #ifdef __has_include + #if __has_include() + #include + #endif //__has_include() + #endif //__has_include + + #endif // defined(__APPLE__) || defined(__FreeBSD__) + + #ifndef !defined(__BYTE_ORDER__) || !defined(__ORDER_LITTLE_ENDIAN__) + #define SIMDUTF_IS_BIG_ENDIAN 0 + #endif -#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ -#define SIMDUTF_IS_BIG_ENDIAN 0 -#else // __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ -#define SIMDUTF_IS_BIG_ENDIAN 1 -#endif // __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ + #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ + #define SIMDUTF_IS_BIG_ENDIAN 0 + #else // __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ + #define SIMDUTF_IS_BIG_ENDIAN 1 + #endif // __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ #endif // defined __BYTE_ORDER__ && defined __ORDER_BIG_ENDIAN__ - /** * At this point in time, SIMDUTF_IS_BIG_ENDIAN is defined. */ #ifdef _MSC_VER -#define SIMDUTF_VISUAL_STUDIO 1 -/** - * We want to differentiate carefully between - * clang under visual studio and regular visual - * studio. - * - * Under clang for Windows, we enable: - * * target pragmas so that part and only part of the - * code gets compiled for advanced instructions. - * - */ -#ifdef __clang__ -// clang under visual studio -#define SIMDUTF_CLANG_VISUAL_STUDIO 1 -#else -// just regular visual studio (best guess) -#define SIMDUTF_REGULAR_VISUAL_STUDIO 1 -#endif // __clang__ -#endif // _MSC_VER + #define SIMDUTF_VISUAL_STUDIO 1 + /** + * We want to differentiate carefully between + * clang under visual studio and regular visual + * studio. + * + * Under clang for Windows, we enable: + * * target pragmas so that part and only part of the + * code gets compiled for advanced instructions. + * + */ + #ifdef __clang__ + // clang under visual studio + #define SIMDUTF_CLANG_VISUAL_STUDIO 1 + #else + // just regular visual studio (best guess) + #define SIMDUTF_REGULAR_VISUAL_STUDIO 1 + #endif // __clang__ +#endif // _MSC_VER #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO -// https://en.wikipedia.org/wiki/C_alternative_tokens -// This header should have no effect, except maybe -// under Visual Studio. -#include + // https://en.wikipedia.org/wiki/C_alternative_tokens + // This header should have no effect, except maybe + // under Visual Studio. + #include #endif #if (defined(__x86_64__) || defined(_M_AMD64)) && !defined(_M_ARM64EC) -#define SIMDUTF_IS_X86_64 1 + #define SIMDUTF_IS_X86_64 1 #elif defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) -#define SIMDUTF_IS_ARM64 1 + #define SIMDUTF_IS_ARM64 1 #elif defined(__PPC64__) || defined(_M_PPC64) -//#define SIMDUTF_IS_PPC64 1 -// The simdutf library does yet support SIMD acceleration under -// POWER processors. Please see https://github.com/lemire/simdutf/issues/51 +// #define SIMDUTF_IS_PPC64 1 +// The simdutf library does yet support SIMD acceleration under +// POWER processors. Please see https://github.com/lemire/simdutf/issues/51 #elif defined(__s390__) // s390 IBM system. Big endian. #elif (defined(__riscv) || defined(__riscv__)) && __riscv_xlen == 64 -// RISC-V 64-bit -#define SIMDUTF_IS_RISCV64 1 + // RISC-V 64-bit + #define SIMDUTF_IS_RISCV64 1 -#if __clang_major__ >= 19 -// Does the compiler support target regions for RISC-V -#define SIMDUTF_HAS_RVV_TARGET_REGION 1 -#endif + #if __clang_major__ >= 19 + // Does the compiler support target regions for RISC-V + #define SIMDUTF_HAS_RVV_TARGET_REGION 1 + #endif -#if __riscv_v_intrinsic >= 11000 -#define SIMDUTF_HAS_RVV_INTRINSICS 1 -#endif + #if __riscv_v_intrinsic >= 11000 + #define SIMDUTF_HAS_RVV_INTRINSICS 1 + #endif -#define SIMDUTF_HAS_ZVBB_INTRINSICS 0 // there is currently no way to detect this + #define SIMDUTF_HAS_ZVBB_INTRINSICS \ + 0 // there is currently no way to detect this -#if SIMDUTF_HAS_RVV_INTRINSICS && __riscv_vector && __riscv_v_min_vlen >= 128 && __riscv_v_elen >= 64 -// RISC-V V extension -#define SIMDUTF_IS_RVV 1 -#if SIMDUTF_HAS_ZVBB_INTRINSICS && __riscv_zvbb >= 1000000 -// RISC-V Vector Basic Bit-manipulation -#define SIMDUTF_IS_ZVBB 1 -#endif -#endif + #if SIMDUTF_HAS_RVV_INTRINSICS && __riscv_vector && \ + __riscv_v_min_vlen >= 128 && __riscv_v_elen >= 64 + // RISC-V V extension + #define SIMDUTF_IS_RVV 1 + #if SIMDUTF_HAS_ZVBB_INTRINSICS && __riscv_zvbb >= 1000000 + // RISC-V Vector Basic Bit-manipulation + #define SIMDUTF_IS_ZVBB 1 + #endif + #endif #elif defined(__loongarch_lp64) // LoongArch 64-bit #else -// The simdutf library is designed -// for 64-bit processors and it seems that you are not -// compiling for a known 64-bit platform. Please -// use a 64-bit target such as x64 or 64-bit ARM for best performance. -#define SIMDUTF_IS_32BITS 1 - -// We do not support 32-bit platforms, but it can be -// handy to identify them. -#if defined(_M_IX86) || defined(__i386__) -#define SIMDUTF_IS_X86_32BITS 1 -#elif defined(__arm__) || defined(_M_ARM) -#define SIMDUTF_IS_ARM_32BITS 1 -#elif defined(__PPC__) || defined(_M_PPC) -#define SIMDUTF_IS_PPC_32BITS 1 -#endif + // The simdutf library is designed + // for 64-bit processors and it seems that you are not + // compiling for a known 64-bit platform. Please + // use a 64-bit target such as x64 or 64-bit ARM for best performance. + #define SIMDUTF_IS_32BITS 1 + + // We do not support 32-bit platforms, but it can be + // handy to identify them. + #if defined(_M_IX86) || defined(__i386__) + #define SIMDUTF_IS_X86_32BITS 1 + #elif defined(__arm__) || defined(_M_ARM) + #define SIMDUTF_IS_ARM_32BITS 1 + #elif defined(__PPC__) || defined(_M_PPC) + #define SIMDUTF_IS_PPC_32BITS 1 + #endif #endif // defined(__x86_64__) || defined(_M_AMD64) #ifdef SIMDUTF_IS_32BITS -#ifndef SIMDUTF_NO_PORTABILITY_WARNING -// In the future, we may want to warn users of 32-bit systems that -// the simdutf does not support accelerated kernels for such systems. -#endif // SIMDUTF_NO_PORTABILITY_WARNING -#endif // SIMDUTF_IS_32BITS + #ifndef SIMDUTF_NO_PORTABILITY_WARNING + // In the future, we may want to warn users of 32-bit systems that + // the simdutf does not support accelerated kernels for such systems. + #endif // SIMDUTF_NO_PORTABILITY_WARNING +#endif // SIMDUTF_IS_32BITS // this is almost standard? #define SIMDUTF_STRINGIFY_IMPLEMENTATION_(a) #a @@ -219,93 +220,98 @@ // slower, but it should run everywhere. // -// Enable valid runtime implementations, and select SIMDUTF_BUILTIN_IMPLEMENTATION +// Enable valid runtime implementations, and select +// SIMDUTF_BUILTIN_IMPLEMENTATION // // We are going to use runtime dispatch. #ifdef SIMDUTF_IS_X86_64 -#ifdef __clang__ -// clang does not have GCC push pop -// warning: clang attribute push can't be used within a namespace in clang up -// til 8.0 so SIMDUTF_TARGET_REGION and SIMDUTF_UNTARGET_REGION must be *outside* of a -// namespace. -#define SIMDUTF_TARGET_REGION(T) \ - _Pragma(SIMDUTF_STRINGIFY( \ - clang attribute push(__attribute__((target(T))), apply_to = function))) -#define SIMDUTF_UNTARGET_REGION _Pragma("clang attribute pop") -#elif defined(__GNUC__) -// GCC is easier -#define SIMDUTF_TARGET_REGION(T) \ - _Pragma("GCC push_options") _Pragma(SIMDUTF_STRINGIFY(GCC target(T))) -#define SIMDUTF_UNTARGET_REGION _Pragma("GCC pop_options") -#endif // clang then gcc + #ifdef __clang__ + // clang does not have GCC push pop + // warning: clang attribute push can't be used within a namespace in clang + // up til 8.0 so SIMDUTF_TARGET_REGION and SIMDUTF_UNTARGET_REGION must be + // *outside* of a namespace. + #define SIMDUTF_TARGET_REGION(T) \ + _Pragma(SIMDUTF_STRINGIFY(clang attribute push( \ + __attribute__((target(T))), apply_to = function))) + #define SIMDUTF_UNTARGET_REGION _Pragma("clang attribute pop") + #elif defined(__GNUC__) + // GCC is easier + #define SIMDUTF_TARGET_REGION(T) \ + _Pragma("GCC push_options") _Pragma(SIMDUTF_STRINGIFY(GCC target(T))) + #define SIMDUTF_UNTARGET_REGION _Pragma("GCC pop_options") + #endif // clang then gcc #endif // x86 // Default target region macros don't do anything. #ifndef SIMDUTF_TARGET_REGION -#define SIMDUTF_TARGET_REGION(T) -#define SIMDUTF_UNTARGET_REGION + #define SIMDUTF_TARGET_REGION(T) + #define SIMDUTF_UNTARGET_REGION #endif // Is threading enabled? #if defined(_REENTRANT) || defined(_MT) -#ifndef SIMDUTF_THREADS_ENABLED -#define SIMDUTF_THREADS_ENABLED -#endif + #ifndef SIMDUTF_THREADS_ENABLED + #define SIMDUTF_THREADS_ENABLED + #endif #endif // workaround for large stack sizes under -O0. // https://github.com/simdutf/simdutf/issues/691 #ifdef __APPLE__ -#ifndef __OPTIMIZE__ -// Apple systems have small stack sizes in secondary threads. -// Lack of compiler optimization may generate high stack usage. -// Users may want to disable threads for safety, but only when -// in debug mode which we detect by the fact that the __OPTIMIZE__ -// macro is not defined. -#undef SIMDUTF_THREADS_ENABLED -#endif + #ifndef __OPTIMIZE__ + // Apple systems have small stack sizes in secondary threads. + // Lack of compiler optimization may generate high stack usage. + // Users may want to disable threads for safety, but only when + // in debug mode which we detect by the fact that the __OPTIMIZE__ + // macro is not defined. + #undef SIMDUTF_THREADS_ENABLED + #endif #endif #ifdef SIMDUTF_VISUAL_STUDIO -// This is one case where we do not distinguish between -// regular visual studio and clang under visual studio. -// clang under Windows has _stricmp (like visual studio) but not strcasecmp (as clang normally has) -#define simdutf_strcasecmp _stricmp -#define simdutf_strncasecmp _strnicmp + // This is one case where we do not distinguish between + // regular visual studio and clang under visual studio. + // clang under Windows has _stricmp (like visual studio) but not strcasecmp + // (as clang normally has) + #define simdutf_strcasecmp _stricmp + #define simdutf_strncasecmp _strnicmp #else -// The strcasecmp, strncasecmp, and strcasestr functions do not work with multibyte strings (e.g. UTF-8). -// So they are only useful for ASCII in our context. -// https://www.gnu.org/software/libunistring/manual/libunistring.html#char-_002a-strings -#define simdutf_strcasecmp strcasecmp -#define simdutf_strncasecmp strncasecmp + // The strcasecmp, strncasecmp, and strcasestr functions do not work with + // multibyte strings (e.g. UTF-8). So they are only useful for ASCII in our + // context. + // https://www.gnu.org/software/libunistring/manual/libunistring.html#char-_002a-strings + #define simdutf_strcasecmp strcasecmp + #define simdutf_strncasecmp strncasecmp #endif #ifdef NDEBUG -#ifdef SIMDUTF_VISUAL_STUDIO -#define SIMDUTF_UNREACHABLE() __assume(0) -#define SIMDUTF_ASSUME(COND) __assume(COND) -#else -#define SIMDUTF_UNREACHABLE() __builtin_unreachable(); -#define SIMDUTF_ASSUME(COND) do { if (!(COND)) __builtin_unreachable(); } while (0) -#endif + #ifdef SIMDUTF_VISUAL_STUDIO + #define SIMDUTF_UNREACHABLE() __assume(0) + #define SIMDUTF_ASSUME(COND) __assume(COND) + #else + #define SIMDUTF_UNREACHABLE() __builtin_unreachable(); + #define SIMDUTF_ASSUME(COND) \ + do { \ + if (!(COND)) \ + __builtin_unreachable(); \ + } while (0) + #endif #else // NDEBUG -#define SIMDUTF_UNREACHABLE() assert(0); -#define SIMDUTF_ASSUME(COND) assert(COND) + #define SIMDUTF_UNREACHABLE() assert(0); + #define SIMDUTF_ASSUME(COND) assert(COND) #endif - #if defined(__GNUC__) && !defined(__clang__) -#if __GNUC__ >= 11 -#define SIMDUTF_GCC11ORMORE 1 -#endif // __GNUC__ >= 11 -#endif // defined(__GNUC__) && !defined(__clang__) - + #if __GNUC__ >= 11 + #define SIMDUTF_GCC11ORMORE 1 + #endif // __GNUC__ >= 11 +#endif // defined(__GNUC__) && !defined(__clang__) #endif // SIMDUTF_PORTABILITY_H /* end file include/simdutf/portability.h */ @@ -323,80 +329,83 @@ */ #ifndef SIMDUTF_HAS_AVX512F -# if defined(__AVX512F__) && __AVX512F__ == 1 -# define SIMDUTF_HAS_AVX512F 1 -# endif + #if defined(__AVX512F__) && __AVX512F__ == 1 + #define SIMDUTF_HAS_AVX512F 1 + #endif #endif #ifndef SIMDUTF_HAS_AVX512DQ -# if defined(__AVX512DQ__) && __AVX512DQ__ == 1 -# define SIMDUTF_HAS_AVX512DQ 1 -# endif + #if defined(__AVX512DQ__) && __AVX512DQ__ == 1 + #define SIMDUTF_HAS_AVX512DQ 1 + #endif #endif #ifndef SIMDUTF_HAS_AVX512IFMA -# if defined(__AVX512IFMA__) && __AVX512IFMA__ == 1 -# define SIMDUTF_HAS_AVX512IFMA 1 -# endif + #if defined(__AVX512IFMA__) && __AVX512IFMA__ == 1 + #define SIMDUTF_HAS_AVX512IFMA 1 + #endif #endif #ifndef SIMDUTF_HAS_AVX512CD -# if defined(__AVX512CD__) && __AVX512CD__ == 1 -# define SIMDUTF_HAS_AVX512CD 1 -# endif + #if defined(__AVX512CD__) && __AVX512CD__ == 1 + #define SIMDUTF_HAS_AVX512CD 1 + #endif #endif #ifndef SIMDUTF_HAS_AVX512BW -# if defined(__AVX512BW__) && __AVX512BW__ == 1 -# define SIMDUTF_HAS_AVX512BW 1 -# endif + #if defined(__AVX512BW__) && __AVX512BW__ == 1 + #define SIMDUTF_HAS_AVX512BW 1 + #endif #endif #ifndef SIMDUTF_HAS_AVX512VL -# if defined(__AVX512VL__) && __AVX512VL__ == 1 -# define SIMDUTF_HAS_AVX512VL 1 -# endif + #if defined(__AVX512VL__) && __AVX512VL__ == 1 + #define SIMDUTF_HAS_AVX512VL 1 + #endif #endif #ifndef SIMDUTF_HAS_AVX512VBMI -# if defined(__AVX512VBMI__) && __AVX512VBMI__ == 1 -# define SIMDUTF_HAS_AVX512VBMI 1 -# endif + #if defined(__AVX512VBMI__) && __AVX512VBMI__ == 1 + #define SIMDUTF_HAS_AVX512VBMI 1 + #endif #endif #ifndef SIMDUTF_HAS_AVX512VBMI2 -# if defined(__AVX512VBMI2__) && __AVX512VBMI2__ == 1 -# define SIMDUTF_HAS_AVX512VBMI2 1 -# endif + #if defined(__AVX512VBMI2__) && __AVX512VBMI2__ == 1 + #define SIMDUTF_HAS_AVX512VBMI2 1 + #endif #endif #ifndef SIMDUTF_HAS_AVX512VNNI -# if defined(__AVX512VNNI__) && __AVX512VNNI__ == 1 -# define SIMDUTF_HAS_AVX512VNNI 1 -# endif + #if defined(__AVX512VNNI__) && __AVX512VNNI__ == 1 + #define SIMDUTF_HAS_AVX512VNNI 1 + #endif #endif #ifndef SIMDUTF_HAS_AVX512BITALG -# if defined(__AVX512BITALG__) && __AVX512BITALG__ == 1 -# define SIMDUTF_HAS_AVX512BITALG 1 -# endif + #if defined(__AVX512BITALG__) && __AVX512BITALG__ == 1 + #define SIMDUTF_HAS_AVX512BITALG 1 + #endif #endif #ifndef SIMDUTF_HAS_AVX512VPOPCNTDQ -# if defined(__AVX512VPOPCNTDQ__) && __AVX512VPOPCNTDQ__ == 1 -# define SIMDUTF_HAS_AVX512VPOPCNTDQ 1 -# endif + #if defined(__AVX512VPOPCNTDQ__) && __AVX512VPOPCNTDQ__ == 1 + #define SIMDUTF_HAS_AVX512VPOPCNTDQ 1 + #endif #endif #endif // SIMDUTF_AVX512_H_ /* end file include/simdutf/avx512.h */ - #if defined(__GNUC__) // Marks a block with a name so that MCA analysis can see it. - #define SIMDUTF_BEGIN_DEBUG_BLOCK(name) __asm volatile("# LLVM-MCA-BEGIN " #name); + #define SIMDUTF_BEGIN_DEBUG_BLOCK(name) \ + __asm volatile("# LLVM-MCA-BEGIN " #name); #define SIMDUTF_END_DEBUG_BLOCK(name) __asm volatile("# LLVM-MCA-END " #name); - #define SIMDUTF_DEBUG_BLOCK(name, block) BEGIN_DEBUG_BLOCK(name); block; END_DEBUG_BLOCK(name); + #define SIMDUTF_DEBUG_BLOCK(name, block) \ + BEGIN_DEBUG_BLOCK(name); \ + block; \ + END_DEBUG_BLOCK(name); #else #define SIMDUTF_BEGIN_DEBUG_BLOCK(name) #define SIMDUTF_END_DEBUG_BLOCK(name) @@ -404,55 +413,59 @@ #endif // Align to N-byte boundary -#define SIMDUTF_ROUNDUP_N(a, n) (((a) + ((n)-1)) & ~((n)-1)) -#define SIMDUTF_ROUNDDOWN_N(a, n) ((a) & ~((n)-1)) +#define SIMDUTF_ROUNDUP_N(a, n) (((a) + ((n) - 1)) & ~((n) - 1)) +#define SIMDUTF_ROUNDDOWN_N(a, n) ((a) & ~((n) - 1)) -#define SIMDUTF_ISALIGNED_N(ptr, n) (((uintptr_t)(ptr) & ((n)-1)) == 0) +#define SIMDUTF_ISALIGNED_N(ptr, n) (((uintptr_t)(ptr) & ((n) - 1)) == 0) #if defined(SIMDUTF_REGULAR_VISUAL_STUDIO) #define SIMDUTF_DEPRECATED __declspec(deprecated) - - #define simdutf_really_inline __forceinline + #define simdutf_really_inline __forceinline // really inline in release mode + #define simdutf_always_inline __forceinline // always inline, no matter what #define simdutf_never_inline __declspec(noinline) #define simdutf_unused #define simdutf_warn_unused #ifndef simdutf_likely - #define simdutf_likely(x) x + #define simdutf_likely(x) x #endif #ifndef simdutf_unlikely - #define simdutf_unlikely(x) x + #define simdutf_unlikely(x) x #endif - #define SIMDUTF_PUSH_DISABLE_WARNINGS __pragma(warning( push )) - #define SIMDUTF_PUSH_DISABLE_ALL_WARNINGS __pragma(warning( push, 0 )) - #define SIMDUTF_DISABLE_VS_WARNING(WARNING_NUMBER) __pragma(warning( disable : WARNING_NUMBER )) + #define SIMDUTF_PUSH_DISABLE_WARNINGS __pragma(warning(push)) + #define SIMDUTF_PUSH_DISABLE_ALL_WARNINGS __pragma(warning(push, 0)) + #define SIMDUTF_DISABLE_VS_WARNING(WARNING_NUMBER) \ + __pragma(warning(disable : WARNING_NUMBER)) // Get rid of Intellisense-only warnings (Code Analysis) - // Though __has_include is C++17, it is supported in Visual Studio 2017 or better (_MSC_VER>=1910). + // Though __has_include is C++17, it is supported in Visual Studio 2017 or + // better (_MSC_VER>=1910). #ifdef __has_include - #if __has_include() - #include - #define SIMDUTF_DISABLE_UNDESIRED_WARNINGS SIMDUTF_DISABLE_VS_WARNING(ALL_CPPCORECHECK_WARNINGS) - #endif + #if __has_include() + #include + #define SIMDUTF_DISABLE_UNDESIRED_WARNINGS \ + SIMDUTF_DISABLE_VS_WARNING(ALL_CPPCORECHECK_WARNINGS) + #endif #endif #ifndef SIMDUTF_DISABLE_UNDESIRED_WARNINGS - #define SIMDUTF_DISABLE_UNDESIRED_WARNINGS + #define SIMDUTF_DISABLE_UNDESIRED_WARNINGS #endif #define SIMDUTF_DISABLE_DEPRECATED_WARNING SIMDUTF_DISABLE_VS_WARNING(4996) #define SIMDUTF_DISABLE_STRICT_OVERFLOW_WARNING - #define SIMDUTF_POP_DISABLE_WARNINGS __pragma(warning( pop )) + #define SIMDUTF_POP_DISABLE_WARNINGS __pragma(warning(pop)) #else // SIMDUTF_REGULAR_VISUAL_STUDIO -#if defined(__OPTIMIZE__) || defined(NDEBUG) - #define simdutf_really_inline inline __attribute__((always_inline)) -#else - #define simdutf_really_inline inline -#endif - + #if defined(__OPTIMIZE__) || defined(NDEBUG) + #define simdutf_really_inline inline __attribute__((always_inline)) + #else + #define simdutf_really_inline inline + #endif + #define simdutf_always_inline \ + inline __attribute__((always_inline)) // always inline, no matter what #define SIMDUTF_DEPRECATED __attribute__((deprecated)) #define simdutf_never_inline inline __attribute__((noinline)) @@ -460,61 +473,72 @@ #define simdutf_warn_unused __attribute__((warn_unused_result)) #ifndef simdutf_likely - #define simdutf_likely(x) __builtin_expect(!!(x), 1) + #define simdutf_likely(x) __builtin_expect(!!(x), 1) #endif #ifndef simdutf_unlikely - #define simdutf_unlikely(x) __builtin_expect(!!(x), 0) + #define simdutf_unlikely(x) __builtin_expect(!!(x), 0) #endif + // clang-format off #define SIMDUTF_PUSH_DISABLE_WARNINGS _Pragma("GCC diagnostic push") - // gcc doesn't seem to disable all warnings with all and extra, add warnings here as necessary - #define SIMDUTF_PUSH_DISABLE_ALL_WARNINGS SIMDUTF_PUSH_DISABLE_WARNINGS \ - SIMDUTF_DISABLE_GCC_WARNING(-Weffc++) \ - SIMDUTF_DISABLE_GCC_WARNING(-Wall) \ - SIMDUTF_DISABLE_GCC_WARNING(-Wconversion) \ - SIMDUTF_DISABLE_GCC_WARNING(-Wextra) \ - SIMDUTF_DISABLE_GCC_WARNING(-Wattributes) \ - SIMDUTF_DISABLE_GCC_WARNING(-Wimplicit-fallthrough) \ - SIMDUTF_DISABLE_GCC_WARNING(-Wnon-virtual-dtor) \ - SIMDUTF_DISABLE_GCC_WARNING(-Wreturn-type) \ - SIMDUTF_DISABLE_GCC_WARNING(-Wshadow) \ - SIMDUTF_DISABLE_GCC_WARNING(-Wunused-parameter) \ + // gcc doesn't seem to disable all warnings with all and extra, add warnings + // here as necessary + #define SIMDUTF_PUSH_DISABLE_ALL_WARNINGS \ + SIMDUTF_PUSH_DISABLE_WARNINGS \ + SIMDUTF_DISABLE_GCC_WARNING(-Weffc++) \ + SIMDUTF_DISABLE_GCC_WARNING(-Wall) \ + SIMDUTF_DISABLE_GCC_WARNING(-Wconversion) \ + SIMDUTF_DISABLE_GCC_WARNING(-Wextra) \ + SIMDUTF_DISABLE_GCC_WARNING(-Wattributes) \ + SIMDUTF_DISABLE_GCC_WARNING(-Wimplicit-fallthrough) \ + SIMDUTF_DISABLE_GCC_WARNING(-Wnon-virtual-dtor) \ + SIMDUTF_DISABLE_GCC_WARNING(-Wreturn-type) \ + SIMDUTF_DISABLE_GCC_WARNING(-Wshadow) \ + SIMDUTF_DISABLE_GCC_WARNING(-Wunused-parameter) \ SIMDUTF_DISABLE_GCC_WARNING(-Wunused-variable) #define SIMDUTF_PRAGMA(P) _Pragma(#P) - #define SIMDUTF_DISABLE_GCC_WARNING(WARNING) SIMDUTF_PRAGMA(GCC diagnostic ignored #WARNING) + #define SIMDUTF_DISABLE_GCC_WARNING(WARNING) \ + SIMDUTF_PRAGMA(GCC diagnostic ignored #WARNING) #if defined(SIMDUTF_CLANG_VISUAL_STUDIO) - #define SIMDUTF_DISABLE_UNDESIRED_WARNINGS SIMDUTF_DISABLE_GCC_WARNING(-Wmicrosoft-include) + #define SIMDUTF_DISABLE_UNDESIRED_WARNINGS \ + SIMDUTF_DISABLE_GCC_WARNING(-Wmicrosoft-include) #else - #define SIMDUTF_DISABLE_UNDESIRED_WARNINGS + #define SIMDUTF_DISABLE_UNDESIRED_WARNINGS #endif - #define SIMDUTF_DISABLE_DEPRECATED_WARNING SIMDUTF_DISABLE_GCC_WARNING(-Wdeprecated-declarations) - #define SIMDUTF_DISABLE_STRICT_OVERFLOW_WARNING SIMDUTF_DISABLE_GCC_WARNING(-Wstrict-overflow) + #define SIMDUTF_DISABLE_DEPRECATED_WARNING \ + SIMDUTF_DISABLE_GCC_WARNING(-Wdeprecated-declarations) + #define SIMDUTF_DISABLE_STRICT_OVERFLOW_WARNING \ + SIMDUTF_DISABLE_GCC_WARNING(-Wstrict-overflow) #define SIMDUTF_POP_DISABLE_WARNINGS _Pragma("GCC diagnostic pop") - - + // clang-format on #endif // MSC_VER #ifndef SIMDUTF_DLLIMPORTEXPORT - #if defined(SIMDUTF_VISUAL_STUDIO) - /** - * It does not matter here whether you are using - * the regular visual studio or clang under visual - * studio. - */ - #if SIMDUTF_USING_LIBRARY + #if defined(SIMDUTF_VISUAL_STUDIO) + /** + * It does not matter here whether you are using + * the regular visual studio or clang under visual + * studio. + */ + #if SIMDUTF_USING_LIBRARY #define SIMDUTF_DLLIMPORTEXPORT __declspec(dllimport) - #else - #define SIMDUTF_DLLIMPORTEXPORT __declspec(dllexport) - #endif #else - #define SIMDUTF_DLLIMPORTEXPORT + #define SIMDUTF_DLLIMPORTEXPORT __declspec(dllexport) #endif + #else + #define SIMDUTF_DLLIMPORTEXPORT + #endif #endif /// If EXPR is an error, returns it. -#define SIMDUTF_TRY(EXPR) { auto _err = (EXPR); if (_err) { return _err; } } - +#define SIMDUTF_TRY(EXPR) \ + { \ + auto _err = (EXPR); \ + if (_err) { \ + return _err; \ + } \ + } #endif // SIMDUTF_COMMON_DEFS_H /* end file include/simdutf/common_defs.h */ @@ -524,20 +548,17 @@ namespace simdutf { enum encoding_type { - UTF8 = 1, // BOM 0xef 0xbb 0xbf - UTF16_LE = 2, // BOM 0xff 0xfe - UTF16_BE = 4, // BOM 0xfe 0xff - UTF32_LE = 8, // BOM 0xff 0xfe 0x00 0x00 - UTF32_BE = 16, // BOM 0x00 0x00 0xfe 0xff - Latin1 = 32, - - unspecified = 0 + UTF8 = 1, // BOM 0xef 0xbb 0xbf + UTF16_LE = 2, // BOM 0xff 0xfe + UTF16_BE = 4, // BOM 0xfe 0xff + UTF32_LE = 8, // BOM 0xff 0xfe 0x00 0x00 + UTF32_BE = 16, // BOM 0x00 0x00 0xfe 0xff + Latin1 = 32, + + unspecified = 0 }; -enum endianness { - LITTLE = 0, - BIG = 1 -}; +enum endianness { LITTLE = 0, BIG = 1 }; bool match_system(endianness e); @@ -553,8 +574,8 @@ namespace BOM { * @return the corresponding encoding */ -encoding_type check_bom(const uint8_t* byte, size_t length); -encoding_type check_bom(const char* byte, size_t length); +encoding_type check_bom(const uint8_t *byte, size_t length); +encoding_type check_bom(const char *byte, size_t length); /** * Returns the size, in bytes, of the BOM for a given encoding type. * Note that UTF8 BOM are discouraged. @@ -563,8 +584,8 @@ encoding_type check_bom(const char* byte, size_t length); */ size_t bom_byte_size(encoding_type bom); -} // BOM namespace -} // simdutf namespace +} // namespace BOM +} // namespace simdutf /* end file include/simdutf/encoding_types.h */ /* begin file include/simdutf/error.h */ #ifndef SIMDUTF_ERROR_H @@ -573,32 +594,43 @@ namespace simdutf { enum error_code { SUCCESS = 0, - HEADER_BITS, // Any byte must have fewer than 5 header bits. - TOO_SHORT, // The leading byte must be followed by N-1 continuation bytes, where N is the UTF-8 character length - // This is also the error when the input is truncated. - TOO_LONG, // We either have too many consecutive continuation bytes or the string starts with a continuation byte. - OVERLONG, // The decoded character must be above U+7F for two-byte characters, U+7FF for three-byte characters, - // and U+FFFF for four-byte characters. - TOO_LARGE, // The decoded character must be less than or equal to U+10FFFF,less than or equal than U+7F for ASCII OR less than equal than U+FF for Latin1 - SURROGATE, // The decoded character must be not be in U+D800...DFFF (UTF-8 or UTF-32) OR - // a high surrogate must be followed by a low surrogate and a low surrogate must be preceded by a high surrogate (UTF-16) OR - // there must be no surrogate at all (Latin1) - INVALID_BASE64_CHARACTER, // Found a character that cannot be part of a valid base64 string. - BASE64_INPUT_REMAINDER, // The base64 input terminates with a single character, excluding padding (=). - OUTPUT_BUFFER_TOO_SMALL, // The provided buffer is too small. - OTHER // Not related to validation/transcoding. + HEADER_BITS, // Any byte must have fewer than 5 header bits. + TOO_SHORT, // The leading byte must be followed by N-1 continuation bytes, + // where N is the UTF-8 character length This is also the error + // when the input is truncated. + TOO_LONG, // We either have too many consecutive continuation bytes or the + // string starts with a continuation byte. + OVERLONG, // The decoded character must be above U+7F for two-byte characters, + // U+7FF for three-byte characters, and U+FFFF for four-byte + // characters. + TOO_LARGE, // The decoded character must be less than or equal to + // U+10FFFF,less than or equal than U+7F for ASCII OR less than + // equal than U+FF for Latin1 + SURROGATE, // The decoded character must be not be in U+D800...DFFF (UTF-8 or + // UTF-32) OR a high surrogate must be followed by a low surrogate + // and a low surrogate must be preceded by a high surrogate + // (UTF-16) OR there must be no surrogate at all (Latin1) + INVALID_BASE64_CHARACTER, // Found a character that cannot be part of a valid + // base64 string. + BASE64_INPUT_REMAINDER, // The base64 input terminates with a single + // character, excluding padding (=). + OUTPUT_BUFFER_TOO_SMALL, // The provided buffer is too small. + OTHER // Not related to validation/transcoding. }; struct result { error_code error; - size_t count; // In case of error, indicates the position of the error. In case of success, indicates the number of code units validated/written. + size_t count; // In case of error, indicates the position of the error. In + // case of success, indicates the number of code units + // validated/written. simdutf_really_inline result() : error{error_code::SUCCESS}, count{0} {} - simdutf_really_inline result(error_code _err, size_t _pos) : error{_err}, count{_pos} {} + simdutf_really_inline result(error_code _err, size_t _pos) + : error{_err}, count{_pos} {} }; -} +} // namespace simdutf #endif /* end file include/simdutf/error.h */ @@ -613,7 +645,7 @@ SIMDUTF_DISABLE_UNDESIRED_WARNINGS #define SIMDUTF_SIMDUTF_VERSION_H /** The version of simdutf being used (major.minor.revision) */ -#define SIMDUTF_VERSION "5.5.0" +#define SIMDUTF_VERSION "5.6.0" namespace simdutf { enum { @@ -624,7 +656,7 @@ enum { /** * The minor version (major.MINOR.revision) of simdutf being used. */ - SIMDUTF_VERSION_MINOR = 5, + SIMDUTF_VERSION_MINOR = 6, /** * The revision (major.minor.REVISION) of simdutf being used. */ @@ -639,10 +671,10 @@ enum { #define SIMDUTF_IMPLEMENTATION_H #include #if !defined(SIMDUTF_NO_THREADS) -#include + #include #endif -#include #include +#include /* begin file include/simdutf/internal/isadetection.h */ /* From https://github.com/endorno/pytorch/blob/master/torch/lib/TH/generic/simd/simd.h @@ -695,21 +727,24 @@ POSSIBILITY OF SUCH DAMAGE. #include #include #if defined(_MSC_VER) -#include + #include #elif defined(HAVE_GCC_GET_CPUID) && defined(USE_GCC_GET_CPUID) -#include + #include #endif // RISC-V ISA detection utilities #if SIMDUTF_IS_RISCV64 && defined(__linux__) -#include // for syscall + #include // for syscall // We define these ourselves, for backwards compatibility -struct simdutf_riscv_hwprobe { int64_t key; uint64_t value; }; -#define simdutf_riscv_hwprobe(...) syscall(258, __VA_ARGS__) -#define SIMDUTF_RISCV_HWPROBE_KEY_IMA_EXT_0 4 -#define SIMDUTF_RISCV_HWPROBE_IMA_V (1 << 2) -#define SIMDUTF_RISCV_HWPROBE_EXT_ZVBB (1 << 17) +struct simdutf_riscv_hwprobe { + int64_t key; + uint64_t value; +}; + #define simdutf_riscv_hwprobe(...) syscall(258, __VA_ARGS__) + #define SIMDUTF_RISCV_HWPROBE_KEY_IMA_EXT_0 4 + #define SIMDUTF_RISCV_HWPROBE_IMA_V (1 << 2) + #define SIMDUTF_RISCV_HWPROBE_EXT_ZVBB (1 << 17) #endif // SIMDUTF_IS_RISCV64 && defined(__linux__) namespace simdutf { @@ -748,15 +783,16 @@ static inline uint32_t detect_supported_architectures() { static inline uint32_t detect_supported_architectures() { uint32_t host_isa = instruction_set::DEFAULT; -#if SIMDUTF_IS_RVV + #if SIMDUTF_IS_RVV host_isa |= instruction_set::RVV; -#endif -#if SIMDUTF_IS_ZVBB + #endif + #if SIMDUTF_IS_ZVBB host_isa |= instruction_set::ZVBB; -#endif -#if defined(__linux__) - simdutf_riscv_hwprobe probes[] = { { SIMDUTF_RISCV_HWPROBE_KEY_IMA_EXT_0, 0 } }; - long ret = simdutf_riscv_hwprobe(&probes, sizeof probes/sizeof *probes, 0, nullptr, 0); + #endif + #if defined(__linux__) + simdutf_riscv_hwprobe probes[] = {{SIMDUTF_RISCV_HWPROBE_KEY_IMA_EXT_0, 0}}; + long ret = simdutf_riscv_hwprobe(&probes, sizeof probes / sizeof *probes, 0, + nullptr, 0); if (ret == 0) { uint64_t extensions = probes[0].value; if (extensions & SIMDUTF_RISCV_HWPROBE_IMA_V) @@ -764,11 +800,11 @@ static inline uint32_t detect_supported_architectures() { if (extensions & SIMDUTF_RISCV_HWPROBE_EXT_ZVBB) host_isa |= instruction_set::ZVBB; } -#endif -#if defined(RUN_IN_SPIKE_SIMULATOR) + #endif + #if defined(RUN_IN_SPIKE_SIMULATOR) // Proxy Kernel does not implement yet hwprobe syscall host_isa |= instruction_set::RVV; -#endif + #endif return host_isa; } @@ -780,80 +816,82 @@ static inline uint32_t detect_supported_architectures() { #elif defined(__x86_64__) || defined(_M_AMD64) // x64 - namespace { namespace cpuid_bit { - // Can be found on Intel ISA Reference for CPUID - - // EAX = 0x01 - constexpr uint32_t pclmulqdq = uint32_t(1) << 1; ///< @private bit 1 of ECX for EAX=0x1 - constexpr uint32_t sse42 = uint32_t(1) << 20; ///< @private bit 20 of ECX for EAX=0x1 - constexpr uint32_t osxsave = (uint32_t(1) << 26) | (uint32_t(1) << 27); ///< @private bits 26+27 of ECX for EAX=0x1 - - // EAX = 0x7f (Structured Extended Feature Flags), ECX = 0x00 (Sub-leaf) - // See: "Table 3-8. Information Returned by CPUID Instruction" - namespace ebx { - constexpr uint32_t bmi1 = uint32_t(1) << 3; - constexpr uint32_t avx2 = uint32_t(1) << 5; - constexpr uint32_t bmi2 = uint32_t(1) << 8; - constexpr uint32_t avx512f = uint32_t(1) << 16; - constexpr uint32_t avx512dq = uint32_t(1) << 17; - constexpr uint32_t avx512ifma = uint32_t(1) << 21; - constexpr uint32_t avx512cd = uint32_t(1) << 28; - constexpr uint32_t avx512bw = uint32_t(1) << 30; - constexpr uint32_t avx512vl = uint32_t(1) << 31; - } - - namespace ecx { - constexpr uint32_t avx512vbmi = uint32_t(1) << 1; - constexpr uint32_t avx512vbmi2 = uint32_t(1) << 6; - constexpr uint32_t avx512vnni = uint32_t(1) << 11; - constexpr uint32_t avx512bitalg = uint32_t(1) << 12; - constexpr uint32_t avx512vpopcnt = uint32_t(1) << 14; - } - namespace edx { - constexpr uint32_t avx512vp2intersect = uint32_t(1) << 8; - } - namespace xcr0_bit { - constexpr uint64_t avx256_saved = uint64_t(1) << 2; ///< @private bit 2 = AVX - constexpr uint64_t avx512_saved = uint64_t(7) << 5; ///< @private bits 5,6,7 = opmask, ZMM_hi256, hi16_ZMM - } - } +// Can be found on Intel ISA Reference for CPUID + +// EAX = 0x01 +constexpr uint32_t pclmulqdq = uint32_t(1) + << 1; ///< @private bit 1 of ECX for EAX=0x1 +constexpr uint32_t sse42 = uint32_t(1) + << 20; ///< @private bit 20 of ECX for EAX=0x1 +constexpr uint32_t osxsave = + (uint32_t(1) << 26) | + (uint32_t(1) << 27); ///< @private bits 26+27 of ECX for EAX=0x1 + +// EAX = 0x7f (Structured Extended Feature Flags), ECX = 0x00 (Sub-leaf) +// See: "Table 3-8. Information Returned by CPUID Instruction" +namespace ebx { +constexpr uint32_t bmi1 = uint32_t(1) << 3; +constexpr uint32_t avx2 = uint32_t(1) << 5; +constexpr uint32_t bmi2 = uint32_t(1) << 8; +constexpr uint32_t avx512f = uint32_t(1) << 16; +constexpr uint32_t avx512dq = uint32_t(1) << 17; +constexpr uint32_t avx512ifma = uint32_t(1) << 21; +constexpr uint32_t avx512cd = uint32_t(1) << 28; +constexpr uint32_t avx512bw = uint32_t(1) << 30; +constexpr uint32_t avx512vl = uint32_t(1) << 31; +} // namespace ebx + +namespace ecx { +constexpr uint32_t avx512vbmi = uint32_t(1) << 1; +constexpr uint32_t avx512vbmi2 = uint32_t(1) << 6; +constexpr uint32_t avx512vnni = uint32_t(1) << 11; +constexpr uint32_t avx512bitalg = uint32_t(1) << 12; +constexpr uint32_t avx512vpopcnt = uint32_t(1) << 14; +} // namespace ecx +namespace edx { +constexpr uint32_t avx512vp2intersect = uint32_t(1) << 8; } - - +namespace xcr0_bit { +constexpr uint64_t avx256_saved = uint64_t(1) << 2; ///< @private bit 2 = AVX +constexpr uint64_t avx512_saved = + uint64_t(7) << 5; ///< @private bits 5,6,7 = opmask, ZMM_hi256, hi16_ZMM +} // namespace xcr0_bit +} // namespace cpuid_bit +} // namespace static inline void cpuid(uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) { -#if defined(_MSC_VER) + #if defined(_MSC_VER) int cpu_info[4]; __cpuidex(cpu_info, *eax, *ecx); *eax = cpu_info[0]; *ebx = cpu_info[1]; *ecx = cpu_info[2]; *edx = cpu_info[3]; -#elif defined(HAVE_GCC_GET_CPUID) && defined(USE_GCC_GET_CPUID) + #elif defined(HAVE_GCC_GET_CPUID) && defined(USE_GCC_GET_CPUID) uint32_t level = *eax; __get_cpuid(level, eax, ebx, ecx, edx); -#else + #else uint32_t a = *eax, b, c = *ecx, d; asm volatile("cpuid\n\t" : "+a"(a), "=b"(b), "+c"(c), "=d"(d)); *eax = a; *ebx = b; *ecx = c; *edx = d; -#endif + #endif } static inline uint64_t xgetbv() { - #if defined(_MSC_VER) - return _xgetbv(0); - #else - uint32_t xcr0_lo, xcr0_hi; - asm volatile("xgetbv\n\t" : "=a" (xcr0_lo), "=d" (xcr0_hi) : "c" (0)); - return xcr0_lo | ((uint64_t)xcr0_hi << 32); - #endif - } + #if defined(_MSC_VER) + return _xgetbv(0); + #else + uint32_t xcr0_lo, xcr0_hi; + asm volatile("xgetbv\n\t" : "=a"(xcr0_lo), "=d"(xcr0_hi) : "c"(0)); + return xcr0_lo | ((uint64_t)xcr0_hi << 32); + #endif +} static inline uint32_t detect_supported_architectures() { uint32_t eax; @@ -897,7 +935,8 @@ static inline uint32_t detect_supported_architectures() { if (ebx & cpuid_bit::ebx::bmi2) { host_isa |= instruction_set::BMI2; } - if (!((xcr0 & cpuid_bit::xcr0_bit::avx512_saved) == cpuid_bit::xcr0_bit::avx512_saved)) { + if (!((xcr0 & cpuid_bit::xcr0_bit::avx512_saved) == + cpuid_bit::xcr0_bit::avx512_saved)) { return host_isa; } if (ebx & cpuid_bit::ebx::avx512f) { @@ -930,7 +969,6 @@ static inline uint32_t detect_supported_architectures() { return instruction_set::DEFAULT; } - #endif // end SIMD extension detection code } // namespace internal @@ -939,7 +977,6 @@ static inline uint32_t detect_supported_architectures() { #endif // SIMDutf_INTERNAL_ISADETECTION_H /* end file include/simdutf/internal/isadetection.h */ - namespace simdutf { /** @@ -952,8 +989,10 @@ namespace simdutf { * @param length the length of the string in bytes. * @return the detected encoding type */ -simdutf_warn_unused simdutf::encoding_type autodetect_encoding(const char * input, size_t length) noexcept; -simdutf_really_inline simdutf_warn_unused simdutf::encoding_type autodetect_encoding(const uint8_t * input, size_t length) noexcept { +simdutf_warn_unused simdutf::encoding_type +autodetect_encoding(const char *input, size_t length) noexcept; +simdutf_really_inline simdutf_warn_unused simdutf::encoding_type +autodetect_encoding(const uint8_t *input, size_t length) noexcept { return autodetect_encoding(reinterpret_cast(input), length); } @@ -968,8 +1007,10 @@ simdutf_really_inline simdutf_warn_unused simdutf::encoding_type autodetect_enco * @param length the length of the string in bytes. * @return the detected encoding type */ -simdutf_warn_unused int detect_encodings(const char * input, size_t length) noexcept; -simdutf_really_inline simdutf_warn_unused int detect_encodings(const uint8_t * input, size_t length) noexcept { +simdutf_warn_unused int detect_encodings(const char *input, + size_t length) noexcept; +simdutf_really_inline simdutf_warn_unused int +detect_encodings(const uint8_t *input, size_t length) noexcept { return detect_encodings(reinterpret_cast(input), length); } @@ -993,9 +1034,13 @@ simdutf_warn_unused bool validate_utf8(const char *buf, size_t len) noexcept; * * @param buf the UTF-8 string to validate. * @param len the length of the string in bytes. - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of code units validated if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of code units validated if + * successful. */ -simdutf_warn_unused result validate_utf8_with_errors(const char *buf, size_t len) noexcept; +simdutf_warn_unused result validate_utf8_with_errors(const char *buf, + size_t len) noexcept; /** * Validate the ASCII string. @@ -1016,24 +1061,30 @@ simdutf_warn_unused bool validate_ascii(const char *buf, size_t len) noexcept; * * @param buf the ASCII string to validate. * @param len the length of the string in bytes. - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of code units validated if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of code units validated if + * successful. */ -simdutf_warn_unused result validate_ascii_with_errors(const char *buf, size_t len) noexcept; +simdutf_warn_unused result validate_ascii_with_errors(const char *buf, + size_t len) noexcept; /** * Using native endianness; Validate the UTF-16 string. - * This function may be best when you expect the input to be almost always valid. - * Otherwise, consider using validate_utf16_with_errors. + * This function may be best when you expect the input to be almost always + * valid. Otherwise, consider using validate_utf16_with_errors. * * Overridden by each implementation. * * This function is not BOM-aware. * * @param buf the UTF-16 string to validate. - * @param len the length of the string in number of 2-byte code units (char16_t). + * @param len the length of the string in number of 2-byte code units + * (char16_t). * @return true if and only if the string is valid UTF-16. */ -simdutf_warn_unused bool validate_utf16(const char16_t *buf, size_t len) noexcept; +simdutf_warn_unused bool validate_utf16(const char16_t *buf, + size_t len) noexcept; /** * Validate the UTF-16LE string. This function may be best when you expect @@ -1045,10 +1096,12 @@ simdutf_warn_unused bool validate_utf16(const char16_t *buf, size_t len) noexcep * This function is not BOM-aware. * * @param buf the UTF-16LE string to validate. - * @param len the length of the string in number of 2-byte code units (char16_t). + * @param len the length of the string in number of 2-byte code units + * (char16_t). * @return true if and only if the string is valid UTF-16LE. */ -simdutf_warn_unused bool validate_utf16le(const char16_t *buf, size_t len) noexcept; +simdutf_warn_unused bool validate_utf16le(const char16_t *buf, + size_t len) noexcept; /** * Validate the UTF-16BE string. This function may be best when you expect @@ -1060,24 +1113,32 @@ simdutf_warn_unused bool validate_utf16le(const char16_t *buf, size_t len) noexc * This function is not BOM-aware. * * @param buf the UTF-16BE string to validate. - * @param len the length of the string in number of 2-byte code units (char16_t). + * @param len the length of the string in number of 2-byte code units + * (char16_t). * @return true if and only if the string is valid UTF-16BE. */ -simdutf_warn_unused bool validate_utf16be(const char16_t *buf, size_t len) noexcept; +simdutf_warn_unused bool validate_utf16be(const char16_t *buf, + size_t len) noexcept; /** * Using native endianness; Validate the UTF-16 string and stop on error. - * It might be faster than validate_utf16 when an error is expected to occur early. + * It might be faster than validate_utf16 when an error is expected to occur + * early. * * Overridden by each implementation. * * This function is not BOM-aware. * * @param buf the UTF-16 string to validate. - * @param len the length of the string in number of 2-byte code units (char16_t). - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of code units validated if successful. + * @param len the length of the string in number of 2-byte code units + * (char16_t). + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of code units validated if + * successful. */ -simdutf_warn_unused result validate_utf16_with_errors(const char16_t *buf, size_t len) noexcept; +simdutf_warn_unused result validate_utf16_with_errors(const char16_t *buf, + size_t len) noexcept; /** * Validate the UTF-16LE string and stop on error. It might be faster than @@ -1088,10 +1149,15 @@ simdutf_warn_unused result validate_utf16_with_errors(const char16_t *buf, size_ * This function is not BOM-aware. * * @param buf the UTF-16LE string to validate. - * @param len the length of the string in number of 2-byte code units (char16_t). - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of code units validated if successful. + * @param len the length of the string in number of 2-byte code units + * (char16_t). + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of code units validated if + * successful. */ -simdutf_warn_unused result validate_utf16le_with_errors(const char16_t *buf, size_t len) noexcept; +simdutf_warn_unused result validate_utf16le_with_errors(const char16_t *buf, + size_t len) noexcept; /** * Validate the UTF-16BE string and stop on error. It might be faster than @@ -1102,10 +1168,15 @@ simdutf_warn_unused result validate_utf16le_with_errors(const char16_t *buf, siz * This function is not BOM-aware. * * @param buf the UTF-16BE string to validate. - * @param len the length of the string in number of 2-byte code units (char16_t). - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of code units validated if successful. + * @param len the length of the string in number of 2-byte code units + * (char16_t). + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of code units validated if + * successful. */ -simdutf_warn_unused result validate_utf16be_with_errors(const char16_t *buf, size_t len) noexcept; +simdutf_warn_unused result validate_utf16be_with_errors(const char16_t *buf, + size_t len) noexcept; /** * Validate the UTF-32 string. This function may be best when you expect @@ -1117,10 +1188,12 @@ simdutf_warn_unused result validate_utf16be_with_errors(const char16_t *buf, siz * This function is not BOM-aware. * * @param buf the UTF-32 string to validate. - * @param len the length of the string in number of 4-byte code units (char32_t). + * @param len the length of the string in number of 4-byte code units + * (char32_t). * @return true if and only if the string is valid UTF-32. */ -simdutf_warn_unused bool validate_utf32(const char32_t *buf, size_t len) noexcept; +simdutf_warn_unused bool validate_utf32(const char32_t *buf, + size_t len) noexcept; /** * Validate the UTF-32 string and stop on error. It might be faster than @@ -1131,10 +1204,15 @@ simdutf_warn_unused bool validate_utf32(const char32_t *buf, size_t len) noexcep * This function is not BOM-aware. * * @param buf the UTF-32 string to validate. - * @param len the length of the string in number of 4-byte code units (char32_t). - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of code units validated if successful. + * @param len the length of the string in number of 4-byte code units + * (char32_t). + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of code units validated if + * successful. */ -simdutf_warn_unused result validate_utf32_with_errors(const char32_t *buf, size_t len) noexcept; +simdutf_warn_unused result validate_utf32_with_errors(const char32_t *buf, + size_t len) noexcept; /** * Convert Latin1 string into UTF8 string. @@ -1146,7 +1224,9 @@ simdutf_warn_unused result validate_utf32_with_errors(const char32_t *buf, size_ * @param utf8_output the pointer to buffer that can hold conversion result * @return the number of written char; 0 if conversion is not possible */ -simdutf_warn_unused size_t convert_latin1_to_utf8(const char * input, size_t length, char* utf8_output) noexcept; +simdutf_warn_unused size_t convert_latin1_to_utf8(const char *input, + size_t length, + char *utf8_output) noexcept; /** * Convert Latin1 string into UTF8 string with output limit. @@ -1159,7 +1239,9 @@ simdutf_warn_unused size_t convert_latin1_to_utf8(const char * input, size_t len * @param utf8_len the maximum output length * @return the number of written char; 0 if conversion is not possible */ -simdutf_warn_unused size_t convert_latin1_to_utf8_safe(const char * input, size_t length, char* utf8_output, size_t utf8_len) noexcept; +simdutf_warn_unused size_t +convert_latin1_to_utf8_safe(const char *input, size_t length, char *utf8_output, + size_t utf8_len) noexcept; /** * Convert possibly Latin1 string into UTF-16LE string. @@ -1171,7 +1253,8 @@ simdutf_warn_unused size_t convert_latin1_to_utf8_safe(const char * input, size_ * @param utf16_buffer the pointer to buffer that can hold conversion result * @return the number of written char16_t; 0 if conversion is not possible */ -simdutf_warn_unused size_t convert_latin1_to_utf16le(const char * input, size_t length, char16_t* utf16_output) noexcept; +simdutf_warn_unused size_t convert_latin1_to_utf16le( + const char *input, size_t length, char16_t *utf16_output) noexcept; /** * Convert Latin1 string into UTF-16BE string. @@ -1183,7 +1266,8 @@ simdutf_warn_unused size_t convert_latin1_to_utf16le(const char * input, size_t * @param utf16_buffer the pointer to buffer that can hold conversion result * @return the number of written char16_t; 0 if conversion is not possible */ -simdutf_warn_unused size_t convert_latin1_to_utf16be(const char * input, size_t length, char16_t* utf16_output) noexcept; +simdutf_warn_unused size_t convert_latin1_to_utf16be( + const char *input, size_t length, char16_t *utf16_output) noexcept; /** * Convert Latin1 string into UTF-32 string. @@ -1195,7 +1279,8 @@ simdutf_warn_unused size_t convert_latin1_to_utf16be(const char * input, size_t * @param utf32_buffer the pointer to buffer that can hold conversion result * @return the number of written char32_t; 0 if conversion is not possible */ -simdutf_warn_unused size_t convert_latin1_to_utf32(const char * input, size_t length, char32_t* utf32_buffer) noexcept; +simdutf_warn_unused size_t convert_latin1_to_utf32( + const char *input, size_t length, char32_t *utf32_buffer) noexcept; /** * Convert possibly broken UTF-8 string into latin1 string. @@ -1206,12 +1291,16 @@ simdutf_warn_unused size_t convert_latin1_to_utf32(const char * input, size_t le * @param input the UTF-8 string to convert * @param length the length of the string in bytes * @param latin1_output the pointer to buffer that can hold conversion result - * @return the number of written char; 0 if the input was not valid UTF-8 string or if it cannot be represented as Latin1 + * @return the number of written char; 0 if the input was not valid UTF-8 string + * or if it cannot be represented as Latin1 */ -simdutf_warn_unused size_t convert_utf8_to_latin1(const char * input, size_t length, char* latin1_output) noexcept; +simdutf_warn_unused size_t convert_utf8_to_latin1(const char *input, + size_t length, + char *latin1_output) noexcept; /** - * Using native endianness, convert possibly broken UTF-8 string into a UTF-16 string. + * Using native endianness, convert possibly broken UTF-8 string into a UTF-16 + * string. * * During the conversion also validation of the input string is done. * This function is suitable to work with inputs from untrusted sources. @@ -1219,9 +1308,11 @@ simdutf_warn_unused size_t convert_utf8_to_latin1(const char * input, size_t len * @param input the UTF-8 string to convert * @param length the length of the string in bytes * @param utf16_buffer the pointer to buffer that can hold conversion result - * @return the number of written char16_t; 0 if the input was not valid UTF-8 string + * @return the number of written char16_t; 0 if the input was not valid UTF-8 + * string */ -simdutf_warn_unused size_t convert_utf8_to_utf16(const char * input, size_t length, char16_t* utf16_output) noexcept; +simdutf_warn_unused size_t convert_utf8_to_utf16( + const char *input, size_t length, char16_t *utf16_output) noexcept; /** * Using native endianness, convert a Latin1 string into a UTF-16 string. @@ -1231,7 +1322,8 @@ simdutf_warn_unused size_t convert_utf8_to_utf16(const char * input, size_t leng * @param utf16_buffer the pointer to buffer that can hold conversion result * @return the number of written char16_t. */ -simdutf_warn_unused size_t convert_latin1_to_utf16(const char * input, size_t length, char16_t* utf16_output) noexcept; +simdutf_warn_unused size_t convert_latin1_to_utf16( + const char *input, size_t length, char16_t *utf16_output) noexcept; /** * Convert possibly broken UTF-8 string into UTF-16LE string. @@ -1242,9 +1334,11 @@ simdutf_warn_unused size_t convert_latin1_to_utf16(const char * input, size_t le * @param input the UTF-8 string to convert * @param length the length of the string in bytes * @param utf16_buffer the pointer to buffer that can hold conversion result - * @return the number of written char16_t; 0 if the input was not valid UTF-8 string + * @return the number of written char16_t; 0 if the input was not valid UTF-8 + * string */ -simdutf_warn_unused size_t convert_utf8_to_utf16le(const char * input, size_t length, char16_t* utf16_output) noexcept; +simdutf_warn_unused size_t convert_utf8_to_utf16le( + const char *input, size_t length, char16_t *utf16_output) noexcept; /** * Convert possibly broken UTF-8 string into UTF-16BE string. @@ -1255,25 +1349,30 @@ simdutf_warn_unused size_t convert_utf8_to_utf16le(const char * input, size_t le * @param input the UTF-8 string to convert * @param length the length of the string in bytes * @param utf16_buffer the pointer to buffer that can hold conversion result - * @return the number of written char16_t; 0 if the input was not valid UTF-8 string + * @return the number of written char16_t; 0 if the input was not valid UTF-8 + * string */ -simdutf_warn_unused size_t convert_utf8_to_utf16be(const char * input, size_t length, char16_t* utf16_output) noexcept; +simdutf_warn_unused size_t convert_utf8_to_utf16be( + const char *input, size_t length, char16_t *utf16_output) noexcept; - - /** - * Convert possibly broken UTF-8 string into latin1 string with errors. - * If the string cannot be represented as Latin1, an error - * code is returned. - * - * During the conversion also validation of the input string is done. - * This function is suitable to work with inputs from untrusted sources. - * - * @param input the UTF-8 string to convert - * @param length the length of the string in bytes - * @param latin1_output the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of code units validated if successful. - */ - simdutf_warn_unused result convert_utf8_to_latin1_with_errors(const char * input, size_t length, char* latin1_output) noexcept; +/** + * Convert possibly broken UTF-8 string into latin1 string with errors. + * If the string cannot be represented as Latin1, an error + * code is returned. + * + * During the conversion also validation of the input string is done. + * This function is suitable to work with inputs from untrusted sources. + * + * @param input the UTF-8 string to convert + * @param length the length of the string in bytes + * @param latin1_output the pointer to buffer that can hold conversion result + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of code units validated if + * successful. + */ +simdutf_warn_unused result convert_utf8_to_latin1_with_errors( + const char *input, size_t length, char *latin1_output) noexcept; /** * Using native endianness, convert possibly broken UTF-8 string into UTF-16 @@ -1285,9 +1384,13 @@ simdutf_warn_unused size_t convert_utf8_to_utf16be(const char * input, size_t le * @param input the UTF-8 string to convert * @param length the length of the string in bytes * @param utf16_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char16_t written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char16_t written if + * successful. */ -simdutf_warn_unused result convert_utf8_to_utf16_with_errors(const char * input, size_t length, char16_t* utf16_output) noexcept; +simdutf_warn_unused result convert_utf8_to_utf16_with_errors( + const char *input, size_t length, char16_t *utf16_output) noexcept; /** * Convert possibly broken UTF-8 string into UTF-16LE string and stop on error. @@ -1298,9 +1401,13 @@ simdutf_warn_unused result convert_utf8_to_utf16_with_errors(const char * input, * @param input the UTF-8 string to convert * @param length the length of the string in bytes * @param utf16_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char16_t written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char16_t written if + * successful. */ -simdutf_warn_unused result convert_utf8_to_utf16le_with_errors(const char * input, size_t length, char16_t* utf16_output) noexcept; +simdutf_warn_unused result convert_utf8_to_utf16le_with_errors( + const char *input, size_t length, char16_t *utf16_output) noexcept; /** * Convert possibly broken UTF-8 string into UTF-16BE string and stop on error. @@ -1311,9 +1418,13 @@ simdutf_warn_unused result convert_utf8_to_utf16le_with_errors(const char * inpu * @param input the UTF-8 string to convert * @param length the length of the string in bytes * @param utf16_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char16_t written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char16_t written if + * successful. */ -simdutf_warn_unused result convert_utf8_to_utf16be_with_errors(const char * input, size_t length, char16_t* utf16_output) noexcept; +simdutf_warn_unused result convert_utf8_to_utf16be_with_errors( + const char *input, size_t length, char16_t *utf16_output) noexcept; /** * Convert possibly broken UTF-8 string into UTF-32 string. @@ -1324,9 +1435,11 @@ simdutf_warn_unused result convert_utf8_to_utf16be_with_errors(const char * inpu * @param input the UTF-8 string to convert * @param length the length of the string in bytes * @param utf32_buffer the pointer to buffer that can hold conversion result - * @return the number of written char32_t; 0 if the input was not valid UTF-8 string + * @return the number of written char32_t; 0 if the input was not valid UTF-8 + * string */ -simdutf_warn_unused size_t convert_utf8_to_utf32(const char * input, size_t length, char32_t* utf32_output) noexcept; +simdutf_warn_unused size_t convert_utf8_to_utf32( + const char *input, size_t length, char32_t *utf32_output) noexcept; /** * Convert possibly broken UTF-8 string into UTF-32 string and stop on error. @@ -1337,18 +1450,25 @@ simdutf_warn_unused size_t convert_utf8_to_utf32(const char * input, size_t leng * @param input the UTF-8 string to convert * @param length the length of the string in bytes * @param utf32_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char32_t written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char32_t written if + * successful. */ -simdutf_warn_unused result convert_utf8_to_utf32_with_errors(const char * input, size_t length, char32_t* utf32_output) noexcept; +simdutf_warn_unused result convert_utf8_to_utf32_with_errors( + const char *input, size_t length, char32_t *utf32_output) noexcept; /** * Convert valid UTF-8 string into latin1 string. * - * This function assumes that the input string is valid UTF-8 and that it can be represented as Latin1. - * If you violate this assumption, the result is implementation defined and may include system-dependent behavior such as crashes. + * This function assumes that the input string is valid UTF-8 and that it can be + * represented as Latin1. If you violate this assumption, the result is + * implementation defined and may include system-dependent behavior such as + * crashes. * - * This function is for expert users only and not part of our public API. Use convert_utf8_to_latin1 instead. - * The function may be removed from the library in the future. + * This function is for expert users only and not part of our public API. Use + * convert_utf8_to_latin1 instead. The function may be removed from the library + * in the future. * * This function is not BOM-aware. * @@ -1357,8 +1477,8 @@ simdutf_warn_unused result convert_utf8_to_utf32_with_errors(const char * input, * @param latin1_output the pointer to buffer that can hold conversion result * @return the number of written char; 0 if the input was not valid UTF-8 string */ -simdutf_warn_unused size_t convert_valid_utf8_to_latin1(const char * input, size_t length, char* latin1_output) noexcept; - +simdutf_warn_unused size_t convert_valid_utf8_to_latin1( + const char *input, size_t length, char *latin1_output) noexcept; /** * Using native endianness, convert valid UTF-8 string into a UTF-16 string. @@ -1370,7 +1490,8 @@ simdutf_warn_unused size_t convert_valid_utf8_to_latin1(const char * input, size * @param utf16_buffer the pointer to buffer that can hold conversion result * @return the number of written char16_t */ -simdutf_warn_unused size_t convert_valid_utf8_to_utf16(const char * input, size_t length, char16_t* utf16_buffer) noexcept; +simdutf_warn_unused size_t convert_valid_utf8_to_utf16( + const char *input, size_t length, char16_t *utf16_buffer) noexcept; /** * Convert valid UTF-8 string into UTF-16LE string. @@ -1382,7 +1503,8 @@ simdutf_warn_unused size_t convert_valid_utf8_to_utf16(const char * input, size_ * @param utf16_buffer the pointer to buffer that can hold conversion result * @return the number of written char16_t */ -simdutf_warn_unused size_t convert_valid_utf8_to_utf16le(const char * input, size_t length, char16_t* utf16_buffer) noexcept; +simdutf_warn_unused size_t convert_valid_utf8_to_utf16le( + const char *input, size_t length, char16_t *utf16_buffer) noexcept; /** * Convert valid UTF-8 string into UTF-16BE string. @@ -1394,7 +1516,8 @@ simdutf_warn_unused size_t convert_valid_utf8_to_utf16le(const char * input, siz * @param utf16_buffer the pointer to buffer that can hold conversion result * @return the number of written char16_t */ -simdutf_warn_unused size_t convert_valid_utf8_to_utf16be(const char * input, size_t length, char16_t* utf16_buffer) noexcept; +simdutf_warn_unused size_t convert_valid_utf8_to_utf16be( + const char *input, size_t length, char16_t *utf16_buffer) noexcept; /** * Convert valid UTF-8 string into UTF-32 string. @@ -1406,23 +1529,26 @@ simdutf_warn_unused size_t convert_valid_utf8_to_utf16be(const char * input, siz * @param utf32_buffer the pointer to buffer that can hold conversion result * @return the number of written char32_t */ -simdutf_warn_unused size_t convert_valid_utf8_to_utf32(const char * input, size_t length, char32_t* utf32_buffer) noexcept; - +simdutf_warn_unused size_t convert_valid_utf8_to_utf32( + const char *input, size_t length, char32_t *utf32_buffer) noexcept; /** - * Return the number of bytes that this Latin1 string would require in UTF-8 format. + * Return the number of bytes that this Latin1 string would require in UTF-8 + * format. * * @param input the Latin1 string to convert * @param length the length of the string bytes * @return the number of bytes required to encode the Latin1 string as UTF-8 */ -simdutf_warn_unused size_t utf8_length_from_latin1(const char * input, size_t length) noexcept; +simdutf_warn_unused size_t utf8_length_from_latin1(const char *input, + size_t length) noexcept; /** - * Compute the number of bytes that this UTF-8 string would require in Latin1 format. + * Compute the number of bytes that this UTF-8 string would require in Latin1 + * format. * - * This function does not validate the input. It is acceptable to pass invalid UTF-8 strings but in such cases - * the result is implementation defined. + * This function does not validate the input. It is acceptable to pass invalid + * UTF-8 strings but in such cases the result is implementation defined. * * This function is not BOM-aware. * @@ -1430,40 +1556,48 @@ simdutf_warn_unused size_t utf8_length_from_latin1(const char * input, size_t le * @param length the length of the string in byte * @return the number of bytes required to encode the UTF-8 string as Latin1 */ -simdutf_warn_unused size_t latin1_length_from_utf8(const char * input, size_t length) noexcept; +simdutf_warn_unused size_t latin1_length_from_utf8(const char *input, + size_t length) noexcept; /** - * Compute the number of 2-byte code units that this UTF-8 string would require in UTF-16LE format. + * Compute the number of 2-byte code units that this UTF-8 string would require + * in UTF-16LE format. * - * This function does not validate the input. It is acceptable to pass invalid UTF-8 strings but in such cases - * the result is implementation defined. + * This function does not validate the input. It is acceptable to pass invalid + * UTF-8 strings but in such cases the result is implementation defined. * * This function is not BOM-aware. * * @param input the UTF-8 string to process * @param length the length of the string in bytes - * @return the number of char16_t code units required to encode the UTF-8 string as UTF-16LE + * @return the number of char16_t code units required to encode the UTF-8 string + * as UTF-16LE */ -simdutf_warn_unused size_t utf16_length_from_utf8(const char * input, size_t length) noexcept; +simdutf_warn_unused size_t utf16_length_from_utf8(const char *input, + size_t length) noexcept; /** - * Compute the number of 4-byte code units that this UTF-8 string would require in UTF-32 format. + * Compute the number of 4-byte code units that this UTF-8 string would require + * in UTF-32 format. * * This function is equivalent to count_utf8 * - * This function does not validate the input. It is acceptable to pass invalid UTF-8 strings but in such cases - * the result is implementation defined. + * This function does not validate the input. It is acceptable to pass invalid + * UTF-8 strings but in such cases the result is implementation defined. * * This function is not BOM-aware. * * @param input the UTF-8 string to process * @param length the length of the string in bytes - * @return the number of char32_t code units required to encode the UTF-8 string as UTF-32 + * @return the number of char32_t code units required to encode the UTF-8 string + * as UTF-32 */ -simdutf_warn_unused size_t utf32_length_from_utf8(const char * input, size_t length) noexcept; +simdutf_warn_unused size_t utf32_length_from_utf8(const char *input, + size_t length) noexcept; /** - * Using native endianness, convert possibly broken UTF-16 string into UTF-8 string. + * Using native endianness, convert possibly broken UTF-16 string into UTF-8 + * string. * * During the conversion also validation of the input string is done. * This function is suitable to work with inputs from untrusted sources. @@ -1473,14 +1607,16 @@ simdutf_warn_unused size_t utf32_length_from_utf8(const char * input, size_t len * @param input the UTF-16 string to convert * @param length the length of the string in 2-byte code units (char16_t) * @param utf8_buffer the pointer to buffer that can hold conversion result - * @return number of written code units; 0 if input is not a valid UTF-16LE string + * @return number of written code units; 0 if input is not a valid UTF-16LE + * string */ -simdutf_warn_unused size_t convert_utf16_to_utf8(const char16_t * input, size_t length, char* utf8_buffer) noexcept; - - +simdutf_warn_unused size_t convert_utf16_to_utf8(const char16_t *input, + size_t length, + char *utf8_buffer) noexcept; /** - * Using native endianness, convert possibly broken UTF-16 string into Latin1 string. + * Using native endianness, convert possibly broken UTF-16 string into Latin1 + * string. * * During the conversion also validation of the input string is done. * This function is suitable to work with inputs from untrusted sources. @@ -1490,9 +1626,11 @@ simdutf_warn_unused size_t convert_utf16_to_utf8(const char16_t * input, size_t * @param input the UTF-16 string to convert * @param length the length of the string in 2-byte code units (char16_t) * @param latin1_buffer the pointer to buffer that can hold conversion result - * @return number of written code units; 0 if input is not a valid UTF-16 string or if it cannot be represented as Latin1 + * @return number of written code units; 0 if input is not a valid UTF-16 string + * or if it cannot be represented as Latin1 */ -simdutf_warn_unused size_t convert_utf16_to_latin1(const char16_t * input, size_t length, char* latin1_buffer) noexcept; +simdutf_warn_unused size_t convert_utf16_to_latin1( + const char16_t *input, size_t length, char *latin1_buffer) noexcept; /** * Convert possibly broken UTF-16LE string into Latin1 string. @@ -1507,9 +1645,11 @@ simdutf_warn_unused size_t convert_utf16_to_latin1(const char16_t * input, size_ * @param input the UTF-16LE string to convert * @param length the length of the string in 2-byte code units (char16_t) * @param latin1_buffer the pointer to buffer that can hold conversion result - * @return number of written code units; 0 if input is not a valid UTF-16LE string or if it cannot be represented as Latin1 + * @return number of written code units; 0 if input is not a valid UTF-16LE + * string or if it cannot be represented as Latin1 */ -simdutf_warn_unused size_t convert_utf16le_to_latin1(const char16_t * input, size_t length, char* latin1_buffer) noexcept; +simdutf_warn_unused size_t convert_utf16le_to_latin1( + const char16_t *input, size_t length, char *latin1_buffer) noexcept; /** * Convert possibly broken UTF-16BE string into Latin1 string. @@ -1522,10 +1662,11 @@ simdutf_warn_unused size_t convert_utf16le_to_latin1(const char16_t * input, siz * @param input the UTF-16BE string to convert * @param length the length of the string in 2-byte code units (char16_t) * @param latin1_buffer the pointer to buffer that can hold conversion result - * @return number of written code units; 0 if input is not a valid UTF-16BE string or if it cannot be represented as Latin1 + * @return number of written code units; 0 if input is not a valid UTF-16BE + * string or if it cannot be represented as Latin1 */ -simdutf_warn_unused size_t convert_utf16be_to_latin1(const char16_t * input, size_t length, char* latin1_buffer) noexcept; - +simdutf_warn_unused size_t convert_utf16be_to_latin1( + const char16_t *input, size_t length, char *latin1_buffer) noexcept; /** * Convert possibly broken UTF-16LE string into UTF-8 string. @@ -1538,9 +1679,12 @@ simdutf_warn_unused size_t convert_utf16be_to_latin1(const char16_t * input, siz * @param input the UTF-16LE string to convert * @param length the length of the string in 2-byte code units (char16_t) * @param utf8_buffer the pointer to buffer that can hold conversion result - * @return number of written code units; 0 if input is not a valid UTF-16LE string + * @return number of written code units; 0 if input is not a valid UTF-16LE + * string */ -simdutf_warn_unused size_t convert_utf16le_to_utf8(const char16_t * input, size_t length, char* utf8_buffer) noexcept; +simdutf_warn_unused size_t convert_utf16le_to_utf8(const char16_t *input, + size_t length, + char *utf8_buffer) noexcept; /** * Convert possibly broken UTF-16BE string into UTF-8 string. @@ -1553,12 +1697,16 @@ simdutf_warn_unused size_t convert_utf16le_to_utf8(const char16_t * input, size_ * @param input the UTF-16BE string to convert * @param length the length of the string in 2-byte code units (char16_t) * @param utf8_buffer the pointer to buffer that can hold conversion result - * @return number of written code units; 0 if input is not a valid UTF-16LE string + * @return number of written code units; 0 if input is not a valid UTF-16LE + * string */ -simdutf_warn_unused size_t convert_utf16be_to_utf8(const char16_t * input, size_t length, char* utf8_buffer) noexcept; +simdutf_warn_unused size_t convert_utf16be_to_utf8(const char16_t *input, + size_t length, + char *utf8_buffer) noexcept; /** - * Using native endianness, convert possibly broken UTF-16 string into Latin1 string. + * Using native endianness, convert possibly broken UTF-16 string into Latin1 + * string. * * During the conversion also validation of the input string is done. * This function is suitable to work with inputs from untrusted sources. @@ -1567,9 +1715,13 @@ simdutf_warn_unused size_t convert_utf16be_to_utf8(const char16_t * input, size_ * @param input the UTF-16 string to convert * @param length the length of the string in 2-byte code units (char16_t) * @param latin1_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char written if + * successful. */ -simdutf_warn_unused result convert_utf16_to_latin1_with_errors(const char16_t * input, size_t length, char* latin1_buffer) noexcept; +simdutf_warn_unused result convert_utf16_to_latin1_with_errors( + const char16_t *input, size_t length, char *latin1_buffer) noexcept; /** * Convert possibly broken UTF-16LE string into Latin1 string. @@ -1581,9 +1733,13 @@ simdutf_warn_unused result convert_utf16_to_latin1_with_errors(const char16_t * * @param input the UTF-16LE string to convert * @param length the length of the string in 2-byte code units (char16_t) * @param latin1_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char written if + * successful. */ -simdutf_warn_unused result convert_utf16le_to_latin1_with_errors(const char16_t * input, size_t length, char* latin1_buffer) noexcept; +simdutf_warn_unused result convert_utf16le_to_latin1_with_errors( + const char16_t *input, size_t length, char *latin1_buffer) noexcept; /** * Convert possibly broken UTF-16BE string into Latin1 string. @@ -1597,13 +1753,17 @@ simdutf_warn_unused result convert_utf16le_to_latin1_with_errors(const char16_t * @param input the UTF-16BE string to convert * @param length the length of the string in 2-byte code units (char16_t) * @param latin1_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char written if + * successful. */ -simdutf_warn_unused result convert_utf16be_to_latin1_with_errors(const char16_t * input, size_t length, char* latin1_buffer) noexcept; - +simdutf_warn_unused result convert_utf16be_to_latin1_with_errors( + const char16_t *input, size_t length, char *latin1_buffer) noexcept; /** - * Using native endianness, convert possibly broken UTF-16 string into UTF-8 string and stop on error. + * Using native endianness, convert possibly broken UTF-16 string into UTF-8 + * string and stop on error. * * During the conversion also validation of the input string is done. * This function is suitable to work with inputs from untrusted sources. @@ -1613,9 +1773,13 @@ simdutf_warn_unused result convert_utf16be_to_latin1_with_errors(const char16_t * @param input the UTF-16 string to convert * @param length the length of the string in 2-byte code units (char16_t) * @param utf8_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char written if + * successful. */ -simdutf_warn_unused result convert_utf16_to_utf8_with_errors(const char16_t * input, size_t length, char* utf8_buffer) noexcept; +simdutf_warn_unused result convert_utf16_to_utf8_with_errors( + const char16_t *input, size_t length, char *utf8_buffer) noexcept; /** * Convert possibly broken UTF-16LE string into UTF-8 string and stop on error. @@ -1628,9 +1792,13 @@ simdutf_warn_unused result convert_utf16_to_utf8_with_errors(const char16_t * in * @param input the UTF-16LE string to convert * @param length the length of the string in 2-byte code units (char16_t) * @param utf8_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char written if + * successful. */ -simdutf_warn_unused result convert_utf16le_to_utf8_with_errors(const char16_t * input, size_t length, char* utf8_buffer) noexcept; +simdutf_warn_unused result convert_utf16le_to_utf8_with_errors( + const char16_t *input, size_t length, char *utf8_buffer) noexcept; /** * Convert possibly broken UTF-16BE string into UTF-8 string and stop on error. @@ -1643,9 +1811,13 @@ simdutf_warn_unused result convert_utf16le_to_utf8_with_errors(const char16_t * * @param input the UTF-16BE string to convert * @param length the length of the string in 2-byte code units (char16_t) * @param utf8_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char written if + * successful. */ -simdutf_warn_unused result convert_utf16be_to_utf8_with_errors(const char16_t * input, size_t length, char* utf8_buffer) noexcept; +simdutf_warn_unused result convert_utf16be_to_utf8_with_errors( + const char16_t *input, size_t length, char *utf8_buffer) noexcept; /** * Using native endianness, convert valid UTF-16 string into UTF-8 string. @@ -1656,20 +1828,24 @@ simdutf_warn_unused result convert_utf16be_to_utf8_with_errors(const char16_t * * * @param input the UTF-16 string to convert * @param length the length of the string in 2-byte code units (char16_t) - * @param utf8_buffer the pointer to buffer that can hold the conversion result + * @param utf8_buffer the pointer to buffer that can hold the conversion + * result * @return number of written code units; 0 if conversion is not possible */ -simdutf_warn_unused size_t convert_valid_utf16_to_utf8(const char16_t * input, size_t length, char* utf8_buffer) noexcept; - +simdutf_warn_unused size_t convert_valid_utf16_to_utf8( + const char16_t *input, size_t length, char *utf8_buffer) noexcept; /** * Using native endianness, convert UTF-16 string into Latin1 string. * - * This function assumes that the input string is valid UTF-16 and that it can be represented as Latin1. - * If you violate this assumption, the result is implementation defined and may include system-dependent behavior such as crashes. + * This function assumes that the input string is valid UTF-16 and that it can + * be represented as Latin1. If you violate this assumption, the result is + * implementation defined and may include system-dependent behavior such as + * crashes. * - * This function is for expert users only and not part of our public API. Use convert_utf16_to_latin1 instead. - * The function may be removed from the library in the future. + * This function is for expert users only and not part of our public API. Use + * convert_utf16_to_latin1 instead. The function may be removed from the library + * in the future. * * This function is not BOM-aware. * @@ -1678,16 +1854,20 @@ simdutf_warn_unused size_t convert_valid_utf16_to_utf8(const char16_t * input, s * @param latin1_buffer the pointer to buffer that can hold conversion result * @return number of written code units; 0 if conversion is not possible */ -simdutf_warn_unused size_t convert_valid_utf16_to_latin1(const char16_t * input, size_t length, char* latin1_buffer) noexcept; +simdutf_warn_unused size_t convert_valid_utf16_to_latin1( + const char16_t *input, size_t length, char *latin1_buffer) noexcept; /** * Convert valid UTF-16LE string into Latin1 string. * - * This function assumes that the input string is valid UTF-16LE and that it can be represented as Latin1. - * If you violate this assumption, the result is implementation defined and may include system-dependent behavior such as crashes. + * This function assumes that the input string is valid UTF-16LE and that it can + * be represented as Latin1. If you violate this assumption, the result is + * implementation defined and may include system-dependent behavior such as + * crashes. * - * This function is for expert users only and not part of our public API. Use convert_utf16le_to_latin1 instead. - * The function may be removed from the library in the future. + * This function is for expert users only and not part of our public API. Use + * convert_utf16le_to_latin1 instead. The function may be removed from the + * library in the future. * * This function is not BOM-aware. * @@ -1696,16 +1876,20 @@ simdutf_warn_unused size_t convert_valid_utf16_to_latin1(const char16_t * input, * @param latin1_buffer the pointer to buffer that can hold conversion result * @return number of written code units; 0 if conversion is not possible */ -simdutf_warn_unused size_t convert_valid_utf16le_to_latin1(const char16_t * input, size_t length, char* latin1_buffer) noexcept; +simdutf_warn_unused size_t convert_valid_utf16le_to_latin1( + const char16_t *input, size_t length, char *latin1_buffer) noexcept; /** * Convert valid UTF-16BE string into Latin1 string. * - * This function assumes that the input string is valid UTF-16BE and that it can be represented as Latin1. - * If you violate this assumption, the result is implementation defined and may include system-dependent behavior such as crashes. + * This function assumes that the input string is valid UTF-16BE and that it can + * be represented as Latin1. If you violate this assumption, the result is + * implementation defined and may include system-dependent behavior such as + * crashes. * - * This function is for expert users only and not part of our public API. Use convert_utf16be_to_latin1 instead. - * The function may be removed from the library in the future. + * This function is for expert users only and not part of our public API. Use + * convert_utf16be_to_latin1 instead. The function may be removed from the + * library in the future. * * This function is not BOM-aware. * @@ -1714,22 +1898,25 @@ simdutf_warn_unused size_t convert_valid_utf16le_to_latin1(const char16_t * inpu * @param latin1_buffer the pointer to buffer that can hold conversion result * @return number of written code units; 0 if conversion is not possible */ -simdutf_warn_unused size_t convert_valid_utf16be_to_latin1(const char16_t * input, size_t length, char* latin1_buffer) noexcept; - +simdutf_warn_unused size_t convert_valid_utf16be_to_latin1( + const char16_t *input, size_t length, char *latin1_buffer) noexcept; /** * Convert valid UTF-16LE string into UTF-8 string. * - * This function assumes that the input string is valid UTF-16LE and that it can be represented as Latin1. + * This function assumes that the input string is valid UTF-16LE and that it can + * be represented as Latin1. * * This function is not BOM-aware. * * @param input the UTF-16LE string to convert * @param length the length of the string in 2-byte code units (char16_t) - * @param utf8_buffer the pointer to buffer that can hold the conversion result + * @param utf8_buffer the pointer to buffer that can hold the conversion + * result * @return number of written code units; 0 if conversion is not possible */ -simdutf_warn_unused size_t convert_valid_utf16le_to_utf8(const char16_t * input, size_t length, char* utf8_buffer) noexcept; +simdutf_warn_unused size_t convert_valid_utf16le_to_utf8( + const char16_t *input, size_t length, char *utf8_buffer) noexcept; /** * Convert valid UTF-16BE string into UTF-8 string. @@ -1740,13 +1927,16 @@ simdutf_warn_unused size_t convert_valid_utf16le_to_utf8(const char16_t * input, * * @param input the UTF-16BE string to convert * @param length the length of the string in 2-byte code units (char16_t) - * @param utf8_buffer the pointer to buffer that can hold the conversion result + * @param utf8_buffer the pointer to buffer that can hold the conversion + * result * @return number of written code units; 0 if conversion is not possible */ -simdutf_warn_unused size_t convert_valid_utf16be_to_utf8(const char16_t * input, size_t length, char* utf8_buffer) noexcept; +simdutf_warn_unused size_t convert_valid_utf16be_to_utf8( + const char16_t *input, size_t length, char *utf8_buffer) noexcept; /** - * Using native endianness, convert possibly broken UTF-16 string into UTF-32 string. + * Using native endianness, convert possibly broken UTF-16 string into UTF-32 + * string. * * During the conversion also validation of the input string is done. * This function is suitable to work with inputs from untrusted sources. @@ -1756,9 +1946,11 @@ simdutf_warn_unused size_t convert_valid_utf16be_to_utf8(const char16_t * input, * @param input the UTF-16 string to convert * @param length the length of the string in 2-byte code units (char16_t) * @param utf32_buffer the pointer to buffer that can hold conversion result - * @return number of written code units; 0 if input is not a valid UTF-16LE string + * @return number of written code units; 0 if input is not a valid UTF-16LE + * string */ -simdutf_warn_unused size_t convert_utf16_to_utf32(const char16_t * input, size_t length, char32_t* utf32_buffer) noexcept; +simdutf_warn_unused size_t convert_utf16_to_utf32( + const char16_t *input, size_t length, char32_t *utf32_buffer) noexcept; /** * Convert possibly broken UTF-16LE string into UTF-32 string. @@ -1771,9 +1963,11 @@ simdutf_warn_unused size_t convert_utf16_to_utf32(const char16_t * input, size_t * @param input the UTF-16LE string to convert * @param length the length of the string in 2-byte code units (char16_t) * @param utf32_buffer the pointer to buffer that can hold conversion result - * @return number of written code units; 0 if input is not a valid UTF-16LE string + * @return number of written code units; 0 if input is not a valid UTF-16LE + * string */ -simdutf_warn_unused size_t convert_utf16le_to_utf32(const char16_t * input, size_t length, char32_t* utf32_buffer) noexcept; +simdutf_warn_unused size_t convert_utf16le_to_utf32( + const char16_t *input, size_t length, char32_t *utf32_buffer) noexcept; /** * Convert possibly broken UTF-16BE string into UTF-32 string. @@ -1786,9 +1980,11 @@ simdutf_warn_unused size_t convert_utf16le_to_utf32(const char16_t * input, size * @param input the UTF-16BE string to convert * @param length the length of the string in 2-byte code units (char16_t) * @param utf32_buffer the pointer to buffer that can hold conversion result - * @return number of written code units; 0 if input is not a valid UTF-16LE string + * @return number of written code units; 0 if input is not a valid UTF-16LE + * string */ -simdutf_warn_unused size_t convert_utf16be_to_utf32(const char16_t * input, size_t length, char32_t* utf32_buffer) noexcept; +simdutf_warn_unused size_t convert_utf16be_to_utf32( + const char16_t *input, size_t length, char32_t *utf32_buffer) noexcept; /** * Using native endianness, convert possibly broken UTF-16 string into @@ -1802,9 +1998,13 @@ simdutf_warn_unused size_t convert_utf16be_to_utf32(const char16_t * input, size * @param input the UTF-16 string to convert * @param length the length of the string in 2-byte code units (char16_t) * @param utf32_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char32_t written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char32_t written if + * successful. */ -simdutf_warn_unused result convert_utf16_to_utf32_with_errors(const char16_t * input, size_t length, char32_t* utf32_buffer) noexcept; +simdutf_warn_unused result convert_utf16_to_utf32_with_errors( + const char16_t *input, size_t length, char32_t *utf32_buffer) noexcept; /** * Convert possibly broken UTF-16LE string into UTF-32 string and stop on error. @@ -1817,9 +2017,13 @@ simdutf_warn_unused result convert_utf16_to_utf32_with_errors(const char16_t * i * @param input the UTF-16LE string to convert * @param length the length of the string in 2-byte code units (char16_t) * @param utf32_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char32_t written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char32_t written if + * successful. */ -simdutf_warn_unused result convert_utf16le_to_utf32_with_errors(const char16_t * input, size_t length, char32_t* utf32_buffer) noexcept; +simdutf_warn_unused result convert_utf16le_to_utf32_with_errors( + const char16_t *input, size_t length, char32_t *utf32_buffer) noexcept; /** * Convert possibly broken UTF-16BE string into UTF-32 string and stop on error. @@ -1832,23 +2036,30 @@ simdutf_warn_unused result convert_utf16le_to_utf32_with_errors(const char16_t * * @param input the UTF-16BE string to convert * @param length the length of the string in 2-byte code units (char16_t) * @param utf32_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char32_t written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char32_t written if + * successful. */ -simdutf_warn_unused result convert_utf16be_to_utf32_with_errors(const char16_t * input, size_t length, char32_t* utf32_buffer) noexcept; +simdutf_warn_unused result convert_utf16be_to_utf32_with_errors( + const char16_t *input, size_t length, char32_t *utf32_buffer) noexcept; /** * Using native endianness, convert valid UTF-16 string into UTF-32 string. * - * This function assumes that the input string is valid UTF-16 (native endianness). + * This function assumes that the input string is valid UTF-16 (native + * endianness). * * This function is not BOM-aware. * * @param input the UTF-16 string to convert * @param length the length of the string in 2-byte code units (char16_t) - * @param utf32_buffer the pointer to buffer that can hold the conversion result + * @param utf32_buffer the pointer to buffer that can hold the conversion + * result * @return number of written code units; 0 if conversion is not possible */ -simdutf_warn_unused size_t convert_valid_utf16_to_utf32(const char16_t * input, size_t length, char32_t* utf32_buffer) noexcept; +simdutf_warn_unused size_t convert_valid_utf16_to_utf32( + const char16_t *input, size_t length, char32_t *utf32_buffer) noexcept; /** * Convert valid UTF-16LE string into UTF-32 string. @@ -1859,10 +2070,12 @@ simdutf_warn_unused size_t convert_valid_utf16_to_utf32(const char16_t * input, * * @param input the UTF-16LE string to convert * @param length the length of the string in 2-byte code units (char16_t) - * @param utf32_buffer the pointer to buffer that can hold the conversion result + * @param utf32_buffer the pointer to buffer that can hold the conversion + * result * @return number of written code units; 0 if conversion is not possible */ -simdutf_warn_unused size_t convert_valid_utf16le_to_utf32(const char16_t * input, size_t length, char32_t* utf32_buffer) noexcept; +simdutf_warn_unused size_t convert_valid_utf16le_to_utf32( + const char16_t *input, size_t length, char32_t *utf32_buffer) noexcept; /** * Convert valid UTF-16BE string into UTF-32 string. @@ -1873,17 +2086,19 @@ simdutf_warn_unused size_t convert_valid_utf16le_to_utf32(const char16_t * input * * @param input the UTF-16BE string to convert * @param length the length of the string in 2-byte code units (char16_t) - * @param utf32_buffer the pointer to buffer that can hold the conversion result + * @param utf32_buffer the pointer to buffer that can hold the conversion + * result * @return number of written code units; 0 if conversion is not possible */ -simdutf_warn_unused size_t convert_valid_utf16be_to_utf32(const char16_t * input, size_t length, char32_t* utf32_buffer) noexcept; - +simdutf_warn_unused size_t convert_valid_utf16be_to_utf32( + const char16_t *input, size_t length, char32_t *utf32_buffer) noexcept; /* - * Compute the number of bytes that this UTF-16LE/BE string would require in Latin1 format. + * Compute the number of bytes that this UTF-16LE/BE string would require in + * Latin1 format. * - * This function does not validate the input. It is acceptable to pass invalid UTF-16 strings but in such cases - * the result is implementation defined. + * This function does not validate the input. It is acceptable to pass invalid + * UTF-16 strings but in such cases the result is implementation defined. * * This function is not BOM-aware. * @@ -1892,43 +2107,47 @@ simdutf_warn_unused size_t convert_valid_utf16be_to_utf32(const char16_t * input */ simdutf_warn_unused size_t latin1_length_from_utf16(size_t length) noexcept; - /** * Using native endianness; Compute the number of bytes that this UTF-16 * string would require in UTF-8 format. * - * This function does not validate the input. It is acceptable to pass invalid UTF-16 strings but in such cases - * the result is implementation defined. + * This function does not validate the input. It is acceptable to pass invalid + * UTF-16 strings but in such cases the result is implementation defined. * * @param input the UTF-16 string to convert * @param length the length of the string in 2-byte code units (char16_t) * @return the number of bytes required to encode the UTF-16LE string as UTF-8 */ -simdutf_warn_unused size_t utf8_length_from_utf16(const char16_t * input, size_t length) noexcept; +simdutf_warn_unused size_t utf8_length_from_utf16(const char16_t *input, + size_t length) noexcept; /** - * Compute the number of bytes that this UTF-16LE string would require in UTF-8 format. + * Compute the number of bytes that this UTF-16LE string would require in UTF-8 + * format. * - * This function does not validate the input. It is acceptable to pass invalid UTF-16 strings but in such cases - * the result is implementation defined. + * This function does not validate the input. It is acceptable to pass invalid + * UTF-16 strings but in such cases the result is implementation defined. * * @param input the UTF-16LE string to convert * @param length the length of the string in 2-byte code units (char16_t) * @return the number of bytes required to encode the UTF-16LE string as UTF-8 */ -simdutf_warn_unused size_t utf8_length_from_utf16le(const char16_t * input, size_t length) noexcept; +simdutf_warn_unused size_t utf8_length_from_utf16le(const char16_t *input, + size_t length) noexcept; /** - * Compute the number of bytes that this UTF-16BE string would require in UTF-8 format. + * Compute the number of bytes that this UTF-16BE string would require in UTF-8 + * format. * - * This function does not validate the input. It is acceptable to pass invalid UTF-16 strings but in such cases - * the result is implementation defined. + * This function does not validate the input. It is acceptable to pass invalid + * UTF-16 strings but in such cases the result is implementation defined. * * @param input the UTF-16BE string to convert * @param length the length of the string in 2-byte code units (char16_t) * @return the number of bytes required to encode the UTF-16BE string as UTF-8 */ -simdutf_warn_unused size_t utf8_length_from_utf16be(const char16_t * input, size_t length) noexcept; +simdutf_warn_unused size_t utf8_length_from_utf16be(const char16_t *input, + size_t length) noexcept; /** * Convert possibly broken UTF-32 string into UTF-8 string. @@ -1943,7 +2162,9 @@ simdutf_warn_unused size_t utf8_length_from_utf16be(const char16_t * input, size * @param utf8_buffer the pointer to buffer that can hold conversion result * @return number of written code units; 0 if input is not a valid UTF-32 string */ -simdutf_warn_unused size_t convert_utf32_to_utf8(const char32_t * input, size_t length, char* utf8_buffer) noexcept; +simdutf_warn_unused size_t convert_utf32_to_utf8(const char32_t *input, + size_t length, + char *utf8_buffer) noexcept; /** * Convert possibly broken UTF-32 string into UTF-8 string and stop on error. @@ -1956,9 +2177,13 @@ simdutf_warn_unused size_t convert_utf32_to_utf8(const char32_t * input, size_t * @param input the UTF-32 string to convert * @param length the length of the string in 4-byte code units (char32_t) * @param utf8_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char written if + * successful. */ -simdutf_warn_unused result convert_utf32_to_utf8_with_errors(const char32_t * input, size_t length, char* utf8_buffer) noexcept; +simdutf_warn_unused result convert_utf32_to_utf8_with_errors( + const char32_t *input, size_t length, char *utf8_buffer) noexcept; /** * Convert valid UTF-32 string into UTF-8 string. @@ -1969,13 +2194,16 @@ simdutf_warn_unused result convert_utf32_to_utf8_with_errors(const char32_t * in * * @param input the UTF-32 string to convert * @param length the length of the string in 4-byte code units (char32_t) - * @param utf8_buffer the pointer to buffer that can hold the conversion result + * @param utf8_buffer the pointer to buffer that can hold the conversion + * result * @return number of written code units; 0 if conversion is not possible */ -simdutf_warn_unused size_t convert_valid_utf32_to_utf8(const char32_t * input, size_t length, char* utf8_buffer) noexcept; +simdutf_warn_unused size_t convert_valid_utf32_to_utf8( + const char32_t *input, size_t length, char *utf8_buffer) noexcept; /** - * Using native endianness, convert possibly broken UTF-32 string into a UTF-16 string. + * Using native endianness, convert possibly broken UTF-32 string into a UTF-16 + * string. * * During the conversion also validation of the input string is done. * This function is suitable to work with inputs from untrusted sources. @@ -1987,7 +2215,8 @@ simdutf_warn_unused size_t convert_valid_utf32_to_utf8(const char32_t * input, s * @param utf16_buffer the pointer to buffer that can hold conversion result * @return number of written code units; 0 if input is not a valid UTF-32 string */ -simdutf_warn_unused size_t convert_utf32_to_utf16(const char32_t * input, size_t length, char16_t* utf16_buffer) noexcept; +simdutf_warn_unused size_t convert_utf32_to_utf16( + const char32_t *input, size_t length, char16_t *utf16_buffer) noexcept; /** * Convert possibly broken UTF-32 string into UTF-16LE string. @@ -2002,7 +2231,8 @@ simdutf_warn_unused size_t convert_utf32_to_utf16(const char32_t * input, size_t * @param utf16_buffer the pointer to buffer that can hold conversion result * @return number of written code units; 0 if input is not a valid UTF-32 string */ -simdutf_warn_unused size_t convert_utf32_to_utf16le(const char32_t * input, size_t length, char16_t* utf16_buffer) noexcept; +simdutf_warn_unused size_t convert_utf32_to_utf16le( + const char32_t *input, size_t length, char16_t *utf16_buffer) noexcept; /** * Convert possibly broken UTF-32 string into Latin1 string. @@ -2015,10 +2245,11 @@ simdutf_warn_unused size_t convert_utf32_to_utf16le(const char32_t * input, size * @param input the UTF-32 string to convert * @param length the length of the string in 4-byte code units (char32_t) * @param latin1_buffer the pointer to buffer that can hold conversion result - * @return number of written code units; 0 if input is not a valid UTF-32 string or if it cannot be represented as Latin1 + * @return number of written code units; 0 if input is not a valid UTF-32 string + * or if it cannot be represented as Latin1 */ -simdutf_warn_unused size_t convert_utf32_to_latin1(const char32_t * input, size_t length, char* latin1_buffer) noexcept; - +simdutf_warn_unused size_t convert_utf32_to_latin1( + const char32_t *input, size_t length, char *latin1_buffer) noexcept; /** * Convert possibly broken UTF-32 string into Latin1 string and stop on error. @@ -2032,27 +2263,36 @@ simdutf_warn_unused size_t convert_utf32_to_latin1(const char32_t * input, size_ * @param input the UTF-32 string to convert * @param length the length of the string in 4-byte code units (char32_t) * @param latin1_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char written if + * successful. */ -simdutf_warn_unused result convert_utf32_to_latin1_with_errors(const char32_t * input, size_t length, char* latin1_buffer) noexcept; +simdutf_warn_unused result convert_utf32_to_latin1_with_errors( + const char32_t *input, size_t length, char *latin1_buffer) noexcept; /** * Convert valid UTF-32 string into Latin1 string. * - * This function assumes that the input string is valid UTF-32 and that it can be represented as Latin1. - * If you violate this assumption, the result is implementation defined and may include system-dependent behavior such as crashes. + * This function assumes that the input string is valid UTF-32 and that it can + * be represented as Latin1. If you violate this assumption, the result is + * implementation defined and may include system-dependent behavior such as + * crashes. * - * This function is for expert users only and not part of our public API. Use convert_utf32_to_latin1 instead. - * The function may be removed from the library in the future. + * This function is for expert users only and not part of our public API. Use + * convert_utf32_to_latin1 instead. The function may be removed from the library + * in the future. * * This function is not BOM-aware. * * @param input the UTF-32 string to convert * @param length the length of the string in 4-byte code units (char32_t) - * @param latin1_buffer the pointer to buffer that can hold the conversion result + * @param latin1_buffer the pointer to buffer that can hold the conversion + * result * @return number of written code units; 0 if conversion is not possible */ -simdutf_warn_unused size_t convert_valid_utf32_to_latin1(const char32_t * input, size_t length, char* latin1_buffer) noexcept; +simdutf_warn_unused size_t convert_valid_utf32_to_latin1( + const char32_t *input, size_t length, char *latin1_buffer) noexcept; /** * Convert possibly broken UTF-32 string into UTF-16BE string. @@ -2067,7 +2307,8 @@ simdutf_warn_unused size_t convert_valid_utf32_to_latin1(const char32_t * input, * @param utf16_buffer the pointer to buffer that can hold conversion result * @return number of written code units; 0 if input is not a valid UTF-32 string */ -simdutf_warn_unused size_t convert_utf32_to_utf16be(const char32_t * input, size_t length, char16_t* utf16_buffer) noexcept; +simdutf_warn_unused size_t convert_utf32_to_utf16be( + const char32_t *input, size_t length, char16_t *utf16_buffer) noexcept; /** * Using native endianness, convert possibly broken UTF-32 string into UTF-16 @@ -2081,9 +2322,13 @@ simdutf_warn_unused size_t convert_utf32_to_utf16be(const char32_t * input, size * @param input the UTF-32 string to convert * @param length the length of the string in 4-byte code units (char32_t) * @param utf16_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char16_t written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char16_t written if + * successful. */ -simdutf_warn_unused result convert_utf32_to_utf16_with_errors(const char32_t * input, size_t length, char16_t* utf16_buffer) noexcept; +simdutf_warn_unused result convert_utf32_to_utf16_with_errors( + const char32_t *input, size_t length, char16_t *utf16_buffer) noexcept; /** * Convert possibly broken UTF-32 string into UTF-16LE string and stop on error. @@ -2096,9 +2341,13 @@ simdutf_warn_unused result convert_utf32_to_utf16_with_errors(const char32_t * i * @param input the UTF-32 string to convert * @param length the length of the string in 4-byte code units (char32_t) * @param utf16_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char16_t written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char16_t written if + * successful. */ -simdutf_warn_unused result convert_utf32_to_utf16le_with_errors(const char32_t * input, size_t length, char16_t* utf16_buffer) noexcept; +simdutf_warn_unused result convert_utf32_to_utf16le_with_errors( + const char32_t *input, size_t length, char16_t *utf16_buffer) noexcept; /** * Convert possibly broken UTF-32 string into UTF-16BE string and stop on error. @@ -2111,9 +2360,13 @@ simdutf_warn_unused result convert_utf32_to_utf16le_with_errors(const char32_t * * @param input the UTF-32 string to convert * @param length the length of the string in 4-byte code units (char32_t) * @param utf16_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char16_t written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char16_t written if + * successful. */ -simdutf_warn_unused result convert_utf32_to_utf16be_with_errors(const char32_t * input, size_t length, char16_t* utf16_buffer) noexcept; +simdutf_warn_unused result convert_utf32_to_utf16be_with_errors( + const char32_t *input, size_t length, char16_t *utf16_buffer) noexcept; /** * Using native endianness, convert valid UTF-32 string into a UTF-16 string. @@ -2124,10 +2377,12 @@ simdutf_warn_unused result convert_utf32_to_utf16be_with_errors(const char32_t * * * @param input the UTF-32 string to convert * @param length the length of the string in 4-byte code units (char32_t) - * @param utf16_buffer the pointer to buffer that can hold the conversion result + * @param utf16_buffer the pointer to buffer that can hold the conversion + * result * @return number of written code units; 0 if conversion is not possible */ -simdutf_warn_unused size_t convert_valid_utf32_to_utf16(const char32_t * input, size_t length, char16_t* utf16_buffer) noexcept; +simdutf_warn_unused size_t convert_valid_utf32_to_utf16( + const char32_t *input, size_t length, char16_t *utf16_buffer) noexcept; /** * Convert valid UTF-32 string into UTF-16LE string. @@ -2138,10 +2393,12 @@ simdutf_warn_unused size_t convert_valid_utf32_to_utf16(const char32_t * input, * * @param input the UTF-32 string to convert * @param length the length of the string in 4-byte code units (char32_t) - * @param utf16_buffer the pointer to buffer that can hold the conversion result + * @param utf16_buffer the pointer to buffer that can hold the conversion + * result * @return number of written code units; 0 if conversion is not possible */ -simdutf_warn_unused size_t convert_valid_utf32_to_utf16le(const char32_t * input, size_t length, char16_t* utf16_buffer) noexcept; +simdutf_warn_unused size_t convert_valid_utf32_to_utf16le( + const char32_t *input, size_t length, char16_t *utf16_buffer) noexcept; /** * Convert valid UTF-32 string into UTF-16BE string. @@ -2152,14 +2409,16 @@ simdutf_warn_unused size_t convert_valid_utf32_to_utf16le(const char32_t * input * * @param input the UTF-32 string to convert * @param length the length of the string in 4-byte code units (char32_t) - * @param utf16_buffer the pointer to buffer that can hold the conversion result + * @param utf16_buffer the pointer to buffer that can hold the conversion + * result * @return number of written code units; 0 if conversion is not possible */ -simdutf_warn_unused size_t convert_valid_utf32_to_utf16be(const char32_t * input, size_t length, char16_t* utf16_buffer) noexcept; +simdutf_warn_unused size_t convert_valid_utf32_to_utf16be( + const char32_t *input, size_t length, char16_t *utf16_buffer) noexcept; /** - * Change the endianness of the input. Can be used to go from UTF-16LE to UTF-16BE or - * from UTF-16BE to UTF-16LE. + * Change the endianness of the input. Can be used to go from UTF-16LE to + * UTF-16BE or from UTF-16BE to UTF-16LE. * * This function does not validate the input. * @@ -2167,33 +2426,39 @@ simdutf_warn_unused size_t convert_valid_utf32_to_utf16be(const char32_t * input * * @param input the UTF-16 string to process * @param length the length of the string in 2-byte code units (char16_t) - * @param output the pointer to buffer that can hold the conversion result + * @param output the pointer to buffer that can hold the conversion + * result */ -void change_endianness_utf16(const char16_t * input, size_t length, char16_t * output) noexcept; +void change_endianness_utf16(const char16_t *input, size_t length, + char16_t *output) noexcept; /** - * Compute the number of bytes that this UTF-32 string would require in UTF-8 format. + * Compute the number of bytes that this UTF-32 string would require in UTF-8 + * format. * - * This function does not validate the input. It is acceptable to pass invalid UTF-32 strings but in such cases - * the result is implementation defined. + * This function does not validate the input. It is acceptable to pass invalid + * UTF-32 strings but in such cases the result is implementation defined. * * @param input the UTF-32 string to convert * @param length the length of the string in 4-byte code units (char32_t) * @return the number of bytes required to encode the UTF-32 string as UTF-8 */ -simdutf_warn_unused size_t utf8_length_from_utf32(const char32_t * input, size_t length) noexcept; +simdutf_warn_unused size_t utf8_length_from_utf32(const char32_t *input, + size_t length) noexcept; /** - * Compute the number of two-byte code units that this UTF-32 string would require in UTF-16 format. + * Compute the number of two-byte code units that this UTF-32 string would + * require in UTF-16 format. * - * This function does not validate the input. It is acceptable to pass invalid UTF-32 strings but in such cases - * the result is implementation defined. + * This function does not validate the input. It is acceptable to pass invalid + * UTF-32 strings but in such cases the result is implementation defined. * * @param input the UTF-32 string to convert * @param length the length of the string in 4-byte code units (char32_t) * @return the number of bytes required to encode the UTF-32 string as UTF-16 */ -simdutf_warn_unused size_t utf16_length_from_utf32(const char32_t * input, size_t length) noexcept; +simdutf_warn_unused size_t utf16_length_from_utf32(const char32_t *input, + size_t length) noexcept; /** * Using native endianness; Compute the number of bytes that this UTF-16 @@ -2201,8 +2466,8 @@ simdutf_warn_unused size_t utf16_length_from_utf32(const char32_t * input, size_ * * This function is equivalent to count_utf16. * - * This function does not validate the input. It is acceptable to pass invalid UTF-16 strings but in such cases - * the result is implementation defined. + * This function does not validate the input. It is acceptable to pass invalid + * UTF-16 strings but in such cases the result is implementation defined. * * This function is not BOM-aware. * @@ -2210,15 +2475,17 @@ simdutf_warn_unused size_t utf16_length_from_utf32(const char32_t * input, size_ * @param length the length of the string in 2-byte code units (char16_t) * @return the number of bytes required to encode the UTF-16LE string as UTF-32 */ -simdutf_warn_unused size_t utf32_length_from_utf16(const char16_t * input, size_t length) noexcept; +simdutf_warn_unused size_t utf32_length_from_utf16(const char16_t *input, + size_t length) noexcept; /** - * Compute the number of bytes that this UTF-16LE string would require in UTF-32 format. + * Compute the number of bytes that this UTF-16LE string would require in UTF-32 + * format. * * This function is equivalent to count_utf16le. * - * This function does not validate the input. It is acceptable to pass invalid UTF-16 strings but in such cases - * the result is implementation defined. + * This function does not validate the input. It is acceptable to pass invalid + * UTF-16 strings but in such cases the result is implementation defined. * * This function is not BOM-aware. * @@ -2226,15 +2493,17 @@ simdutf_warn_unused size_t utf32_length_from_utf16(const char16_t * input, size_ * @param length the length of the string in 2-byte code units (char16_t) * @return the number of bytes required to encode the UTF-16LE string as UTF-32 */ -simdutf_warn_unused size_t utf32_length_from_utf16le(const char16_t * input, size_t length) noexcept; +simdutf_warn_unused size_t utf32_length_from_utf16le(const char16_t *input, + size_t length) noexcept; /** - * Compute the number of bytes that this UTF-16BE string would require in UTF-32 format. + * Compute the number of bytes that this UTF-16BE string would require in UTF-32 + * format. * * This function is equivalent to count_utf16be. * - * This function does not validate the input. It is acceptable to pass invalid UTF-16 strings but in such cases - * the result is implementation defined. + * This function does not validate the input. It is acceptable to pass invalid + * UTF-16 strings but in such cases the result is implementation defined. * * This function is not BOM-aware. * @@ -2242,15 +2511,16 @@ simdutf_warn_unused size_t utf32_length_from_utf16le(const char16_t * input, siz * @param length the length of the string in 2-byte code units (char16_t) * @return the number of bytes required to encode the UTF-16BE string as UTF-32 */ -simdutf_warn_unused size_t utf32_length_from_utf16be(const char16_t * input, size_t length) noexcept; +simdutf_warn_unused size_t utf32_length_from_utf16be(const char16_t *input, + size_t length) noexcept; /** * Count the number of code points (characters) in the string assuming that * it is valid. * - * This function assumes that the input string is valid UTF-16 (native endianness). - * It is acceptable to pass invalid UTF-16 strings but in such cases - * the result is implementation defined. + * This function assumes that the input string is valid UTF-16 (native + * endianness). It is acceptable to pass invalid UTF-16 strings but in such + * cases the result is implementation defined. * * This function is not BOM-aware. * @@ -2258,7 +2528,8 @@ simdutf_warn_unused size_t utf32_length_from_utf16be(const char16_t * input, siz * @param length the length of the string in 2-byte code units (char16_t) * @return number of code points */ -simdutf_warn_unused size_t count_utf16(const char16_t * input, size_t length) noexcept; +simdutf_warn_unused size_t count_utf16(const char16_t *input, + size_t length) noexcept; /** * Count the number of code points (characters) in the string assuming that @@ -2274,7 +2545,8 @@ simdutf_warn_unused size_t count_utf16(const char16_t * input, size_t length) no * @param length the length of the string in 2-byte code units (char16_t) * @return number of code points */ -simdutf_warn_unused size_t count_utf16le(const char16_t * input, size_t length) noexcept; +simdutf_warn_unused size_t count_utf16le(const char16_t *input, + size_t length) noexcept; /** * Count the number of code points (characters) in the string assuming that @@ -2290,7 +2562,8 @@ simdutf_warn_unused size_t count_utf16le(const char16_t * input, size_t length) * @param length the length of the string in 2-byte code units (char16_t) * @return number of code points */ -simdutf_warn_unused size_t count_utf16be(const char16_t * input, size_t length) noexcept; +simdutf_warn_unused size_t count_utf16be(const char16_t *input, + size_t length) noexcept; /** * Count the number of code points (characters) in the string assuming that @@ -2304,16 +2577,18 @@ simdutf_warn_unused size_t count_utf16be(const char16_t * input, size_t length) * @param length the length of the string in bytes * @return number of code points */ -simdutf_warn_unused size_t count_utf8(const char * input, size_t length) noexcept; +simdutf_warn_unused size_t count_utf8(const char *input, + size_t length) noexcept; /** * Given a valid UTF-8 string having a possibly truncated last character, - * this function checks the end of string. If the last character is truncated (or partial), - * then it returns a shorter length (shorter by 1 to 3 bytes) so that the short UTF-8 - * strings only contain complete characters. If there is no truncated character, - * the original length is returned. + * this function checks the end of string. If the last character is truncated + * (or partial), then it returns a shorter length (shorter by 1 to 3 bytes) so + * that the short UTF-8 strings only contain complete characters. If there is no + * truncated character, the original length is returned. * - * This function assumes that the input string is valid UTF-8, but possibly truncated. + * This function assumes that the input string is valid UTF-8, but possibly + * truncated. * * @param input the UTF-8 string to process * @param length the length of the string in bytes @@ -2323,59 +2598,77 @@ simdutf_warn_unused size_t trim_partial_utf8(const char *input, size_t length); /** * Given a valid UTF-16BE string having a possibly truncated last character, - * this function checks the end of string. If the last character is truncated (or partial), - * then it returns a shorter length (shorter by 1 unit) so that the short UTF-16BE - * strings only contain complete characters. If there is no truncated character, - * the original length is returned. + * this function checks the end of string. If the last character is truncated + * (or partial), then it returns a shorter length (shorter by 1 unit) so that + * the short UTF-16BE strings only contain complete characters. If there is no + * truncated character, the original length is returned. * - * This function assumes that the input string is valid UTF-16BE, but possibly truncated. + * This function assumes that the input string is valid UTF-16BE, but possibly + * truncated. * * @param input the UTF-16BE string to process * @param length the length of the string in bytes * @return the length of the string in bytes, possibly shorter by 1 unit */ -simdutf_warn_unused size_t trim_partial_utf16be(const char16_t* input, size_t length); +simdutf_warn_unused size_t trim_partial_utf16be(const char16_t *input, + size_t length); /** * Given a valid UTF-16LE string having a possibly truncated last character, - * this function checks the end of string. If the last character is truncated (or partial), - * then it returns a shorter length (shorter by 1 unit) so that the short UTF-16LE - * strings only contain complete characters. If there is no truncated character, - * the original length is returned. + * this function checks the end of string. If the last character is truncated + * (or partial), then it returns a shorter length (shorter by 1 unit) so that + * the short UTF-16LE strings only contain complete characters. If there is no + * truncated character, the original length is returned. * - * This function assumes that the input string is valid UTF-16LE, but possibly truncated. + * This function assumes that the input string is valid UTF-16LE, but possibly + * truncated. * * @param input the UTF-16LE string to process * @param length the length of the string in bytes * @return the length of the string in unit, possibly shorter by 1 unit */ -simdutf_warn_unused size_t trim_partial_utf16le(const char16_t* input, size_t length); - +simdutf_warn_unused size_t trim_partial_utf16le(const char16_t *input, + size_t length); /** * Given a valid UTF-16 string having a possibly truncated last character, - * this function checks the end of string. If the last character is truncated (or partial), - * then it returns a shorter length (shorter by 1 unit) so that the short UTF-16 - * strings only contain complete characters. If there is no truncated character, - * the original length is returned. + * this function checks the end of string. If the last character is truncated + * (or partial), then it returns a shorter length (shorter by 1 unit) so that + * the short UTF-16 strings only contain complete characters. If there is no + * truncated character, the original length is returned. * - * This function assumes that the input string is valid UTF-16, but possibly truncated. - * We use the native endianness. + * This function assumes that the input string is valid UTF-16, but possibly + * truncated. We use the native endianness. * * @param input the UTF-16 string to process * @param length the length of the string in bytes * @return the length of the string in unit, possibly shorter by 1 unit */ -simdutf_warn_unused size_t trim_partial_utf16(const char16_t* input, size_t length); +simdutf_warn_unused size_t trim_partial_utf16(const char16_t *input, + size_t length); // base64_options are used to specify the base64 encoding options. using base64_options = uint64_t; enum : base64_options { - base64_default = 0, /* standard base64 format (with padding) */ - base64_url = 1, /* base64url format (no padding) */ + base64_default = 0, /* standard base64 format (with padding) */ + base64_url = 1, /* base64url format (no padding) */ base64_reverse_padding = 2, /* modifier for base64_default and base64_url */ - base64_default_no_padding = base64_default | base64_reverse_padding, /* standard base64 format without padding */ - base64_url_with_padding = base64_url | base64_reverse_padding, /* base64url with padding */ + base64_default_no_padding = + base64_default | + base64_reverse_padding, /* standard base64 format without padding */ + base64_url_with_padding = + base64_url | base64_reverse_padding, /* base64url with padding */ +}; + +// last_chunk_handling_options are used to specify the handling of the last +// chunk in base64 decoding. +// https://tc39.es/proposal-arraybuffer-base64/spec/#sec-frombase64 +enum last_chunk_handling_options : uint64_t { + loose = 0, /* standard base64 format, decode partial final chunk */ + strict = + 1, /* error when the last chunk is partial, 2 or 3 chars, and unpadded */ + stop_before_partial = + 2, /* if the last chunk is partial (2 or 3 chars), ignore it (no error) */ }; /** @@ -2387,53 +2680,80 @@ enum : base64_options { * @param length the length of the base64 input in bytes * @return maximum number of binary bytes */ -simdutf_warn_unused size_t maximal_binary_length_from_base64(const char * input, size_t length) noexcept; +simdutf_warn_unused size_t +maximal_binary_length_from_base64(const char *input, size_t length) noexcept; /** * Provide the maximal binary length in bytes given the base64 input. * In general, if the input contains ASCII spaces, the result will be less than * the maximum length. * - * @param input the base64 input to process, in ASCII stored as 16-bit units + * @param input the base64 input to process, in ASCII stored as 16-bit + * units * @param length the length of the base64 input in 16-bit units * @return maximal number of binary bytes */ -simdutf_warn_unused size_t maximal_binary_length_from_base64(const char16_t * input, size_t length) noexcept; +simdutf_warn_unused size_t maximal_binary_length_from_base64( + const char16_t *input, size_t length) noexcept; /** * Convert a base64 input to a binary output. * - * This function follows the WHATWG forgiving-base64 format, which means that it will - * ignore any ASCII spaces in the input. You may provide a padded input (with one or two - * equal signs at the end) or an unpadded input (without any equal signs at the end). + * This function follows the WHATWG forgiving-base64 format, which means that it + * will ignore any ASCII spaces in the input. You may provide a padded input + * (with one or two equal signs at the end) or an unpadded input (without any + * equal signs at the end). * * See https://infra.spec.whatwg.org/#forgiving-base64-decode * - * This function will fail in case of invalid input. There are two possible reasons for - * failure: the input contains a number of base64 characters that when divided by 4, leaves - * a single remainder character (BASE64_INPUT_REMAINDER), or the input contains a character - * that is not a valid base64 character (INVALID_BASE64_CHARACTER). + * This function will fail in case of invalid input. There are two possible + * reasons for failure: the input contains a number of base64 characters that + * when divided by 4, leaves a single remainder character + * (BASE64_INPUT_REMAINDER), or the input contains a character that is not a + * valid base64 character (INVALID_BASE64_CHARACTER). + * + * When the error is INVALID_BASE64_CHARACTER, r.count contains the index in the + * input where the invalid character was found. When the error is + * BASE64_INPUT_REMAINDER, then r.count contains the number of bytes decoded. * - * When the error is INVALID_BASE64_CHARACTER, r.count contains the index in the input - * where the invalid character was found. When the error is BASE64_INPUT_REMAINDER, then - * r.count contains the number of bytes decoded. + * The default option (simdutf::base64_default) expects the characters `+` and + * `/` as part of its alphabet. The URL option (simdutf::base64_url) expects the + * characters `-` and `_` as part of its alphabet. * - * The default option (simdutf::base64_default) expects the characters `+` and `/` as part of its alphabet. - * The URL option (simdutf::base64_url) expects the characters `-` and `_` as part of its alphabet. + * The padding (`=`) is validated if present. There may be at most two padding + * characters at the end of the input. If there are any padding characters, the + * total number of characters (excluding spaces but including padding + * characters) must be divisible by four. * - * The padding (`=`) is validated if present. There may be at most two padding characters at the end of the input. - * If there are any padding characters, the total number of characters (excluding spaces but including padding characters) must be divisible by four. + * You should call this function with a buffer that is at least + * maximal_binary_length_from_base64(input, length) bytes long. If you fail to + * provide that much space, the function may cause a buffer overflow. * - * You should call this function with a buffer that is at least maximal_binary_length_from_base64(input, length) bytes long. - * If you fail to provide that much space, the function may cause a buffer overflow. + * Advanced users may want to taylor how the last chunk is handled. By default, + * we use a loose (forgiving) approach but we also support a strict approach + * as well as a stop_before_partial approach, as per the following proposal: + * + * https://tc39.es/proposal-arraybuffer-base64/spec/#sec-frombase64 * * @param input the base64 string to process * @param length the length of the string in bytes - * @param output the pointer to buffer that can hold the conversion result (should be at least maximal_binary_length_from_base64(input, length) bytes long). - * @param options the base64 options to use, can be base64_default or base64_url, is base64_default by default. - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in bytes) if any, or the number of bytes written if successful. + * @param output the pointer to buffer that can hold the conversion + * result (should be at least maximal_binary_length_from_base64(input, length) + * bytes long). + * @param options the base64 options to use, usually base64_default or + * base64_url, and base64_default by default. + * @param last_chunk_options the last chunk handling options, + * last_chunk_handling_options::loose by default + * but can also be last_chunk_handling_options::strict or + * last_chunk_handling_options::stop_before_partial. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in bytes) if any, or the number of bytes written if successful. */ -simdutf_warn_unused result base64_to_binary(const char * input, size_t length, char* output, base64_options options = base64_default) noexcept; +simdutf_warn_unused result base64_to_binary( + const char *input, size_t length, char *output, + base64_options options = base64_default, + last_chunk_handling_options last_chunk_options = loose) noexcept; /** * Provide the base64 length in bytes given the length of a binary input. @@ -2441,117 +2761,182 @@ simdutf_warn_unused result base64_to_binary(const char * input, size_t length, c * @param length the length of the input in bytes * @return number of base64 bytes */ -simdutf_warn_unused size_t base64_length_from_binary(size_t length, base64_options options = base64_default) noexcept; +simdutf_warn_unused size_t base64_length_from_binary( + size_t length, base64_options options = base64_default) noexcept; /** * Convert a binary input to a base64 output. * - * The default option (simdutf::base64_default) uses the characters `+` and `/` as part of its alphabet. - * Further, it adds padding (`=`) at the end of the output to ensure that the output length is a multiple of four. + * The default option (simdutf::base64_default) uses the characters `+` and `/` + * as part of its alphabet. Further, it adds padding (`=`) at the end of the + * output to ensure that the output length is a multiple of four. * - * The URL option (simdutf::base64_url) uses the characters `-` and `_` as part of its alphabet. No padding - * is added at the end of the output. + * The URL option (simdutf::base64_url) uses the characters `-` and `_` as part + * of its alphabet. No padding is added at the end of the output. * * This function always succeeds. * * @param input the binary to process * @param length the length of the input in bytes - * @param output the pointer to buffer that can hold the conversion result (should be at least base64_length_from_binary(length) bytes long) - * @param options the base64 options to use, can be base64_default or base64_url, is base64_default by default. - * @return number of written bytes, will be equal to base64_length_from_binary(length, options) + * @param output the pointer to buffer that can hold the conversion + * result (should be at least base64_length_from_binary(length) bytes long) + * @param options the base64 options to use, can be base64_default or + * base64_url, is base64_default by default. + * @return number of written bytes, will be equal to + * base64_length_from_binary(length, options) */ -size_t binary_to_base64(const char * input, size_t length, char* output, base64_options options = base64_default) noexcept; +size_t binary_to_base64(const char *input, size_t length, char *output, + base64_options options = base64_default) noexcept; /** * Convert a base64 input to a binary output. * - * This function follows the WHATWG forgiving-base64 format, which means that it will - * ignore any ASCII spaces in the input. You may provide a padded input (with one or two - * equal signs at the end) or an unpadded input (without any equal signs at the end). + * This function follows the WHATWG forgiving-base64 format, which means that it + * will ignore any ASCII spaces in the input. You may provide a padded input + * (with one or two equal signs at the end) or an unpadded input (without any + * equal signs at the end). * * See https://infra.spec.whatwg.org/#forgiving-base64-decode * - * This function will fail in case of invalid input. There are two possible reasons for - * failure: the input contains a number of base64 characters that when divided by 4, leaves - * a single remainder character (BASE64_INPUT_REMAINDER), or the input contains a character - * that is not a valid base64 character (INVALID_BASE64_CHARACTER). + * This function will fail in case of invalid input. There are two possible + * reasons for failure: the input contains a number of base64 characters that + * when divided by 4, leaves a single remainder character + * (BASE64_INPUT_REMAINDER), or the input contains a character that is not a + * valid base64 character (INVALID_BASE64_CHARACTER). + * + * When the error is INVALID_BASE64_CHARACTER, r.count contains the index in the + * input where the invalid character was found. When the error is + * BASE64_INPUT_REMAINDER, then r.count contains the number of bytes decoded. + * + * The default option (simdutf::base64_default) expects the characters `+` and + * `/` as part of its alphabet. The URL option (simdutf::base64_url) expects the + * characters `-` and `_` as part of its alphabet. * - * When the error is INVALID_BASE64_CHARACTER, r.count contains the index in the input - * where the invalid character was found. When the error is BASE64_INPUT_REMAINDER, then - * r.count contains the number of bytes decoded. + * The padding (`=`) is validated if present. There may be at most two padding + * characters at the end of the input. If there are any padding characters, the + * total number of characters (excluding spaces but including padding + * characters) must be divisible by four. * - * The default option (simdutf::base64_default) expects the characters `+` and `/` as part of its alphabet. - * The URL option (simdutf::base64_url) expects the characters `-` and `_` as part of its alphabet. + * You should call this function with a buffer that is at least + * maximal_binary_length_from_utf6_base64(input, length) bytes long. If you fail + * to provide that much space, the function may cause a buffer overflow. * - * The padding (`=`) is validated if present. There may be at most two padding characters at the end of the input. - * If there are any padding characters, the total number of characters (excluding spaces but including padding characters) must be divisible by four. + * Advanced users may want to taylor how the last chunk is handled. By default, + * we use a loose (forgiving) approach but we also support a strict approach + * as well as a stop_before_partial approach, as per the following proposal: * - * You should call this function with a buffer that is at least maximal_binary_length_from_utf6_base64(input, length) bytes long. - * If you fail to provide that much space, the function may cause a buffer overflow. + * https://tc39.es/proposal-arraybuffer-base64/spec/#sec-frombase64 * - * @param input the base64 string to process, in ASCII stored as 16-bit units + * @param input the base64 string to process, in ASCII stored as 16-bit + * units * @param length the length of the string in 16-bit units - * @param output the pointer to buffer that can hold the conversion result (should be at least maximal_binary_length_from_base64(input, length) bytes long). - * @param options the base64 options to use, can be base64_default or base64_url, is base64_default by default. - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and position of the INVALID_BASE64_CHARACTER error (in the input in units) if any, or the number of bytes written if successful. + * @param output the pointer to buffer that can hold the conversion + * result (should be at least maximal_binary_length_from_base64(input, length) + * bytes long). + * @param options the base64 options to use, can be base64_default or + * base64_url, is base64_default by default. + * @param last_chunk_options the last chunk handling options, + * last_chunk_handling_options::loose by default + * but can also be last_chunk_handling_options::strict or + * last_chunk_handling_options::stop_before_partial. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and position of the + * INVALID_BASE64_CHARACTER error (in the input in units) if any, or the number + * of bytes written if successful. */ -simdutf_warn_unused result base64_to_binary(const char16_t * input, size_t length, char* output, base64_options options = base64_default) noexcept; +simdutf_warn_unused result +base64_to_binary(const char16_t *input, size_t length, char *output, + base64_options options = base64_default, + last_chunk_handling_options last_chunk_options = + last_chunk_handling_options::loose) noexcept; /** * Convert a base64 input to a binary output. * - * This function follows the WHATWG forgiving-base64 format, which means that it will - * ignore any ASCII spaces in the input. You may provide a padded input (with one or two - * equal signs at the end) or an unpadded input (without any equal signs at the end). + * This function follows the WHATWG forgiving-base64 format, which means that it + * will ignore any ASCII spaces in the input. You may provide a padded input + * (with one or two equal signs at the end) or an unpadded input (without any + * equal signs at the end). * * See https://infra.spec.whatwg.org/#forgiving-base64-decode * - * This function will fail in case of invalid input. There are three possible reasons for - * failure: the input contains a number of base64 characters that when divided by 4, leaves - * a single remainder character (BASE64_INPUT_REMAINDER), the input contains a character - * that is not a valid base64 character (INVALID_BASE64_CHARACTER), or the output buffer - * is too small (OUTPUT_BUFFER_TOO_SMALL). + * This function will fail in case of invalid input. There are three possible + * reasons for failure: the input contains a number of base64 characters that + * when divided by 4, leaves a single remainder character + * (BASE64_INPUT_REMAINDER), the input contains a character that is not a valid + * base64 character (INVALID_BASE64_CHARACTER), or the output buffer is too + * small (OUTPUT_BUFFER_TOO_SMALL). * * When OUTPUT_BUFFER_TOO_SMALL, we return both the number of bytes written - * and the number of units processed, see description of the parameters and returned value. + * and the number of units processed, see description of the parameters and + * returned value. * - * When the error is INVALID_BASE64_CHARACTER, r.count contains the index in the input - * where the invalid character was found. When the error is BASE64_INPUT_REMAINDER, then - * r.count contains the number of bytes decoded. + * When the error is INVALID_BASE64_CHARACTER, r.count contains the index in the + * input where the invalid character was found. When the error is + * BASE64_INPUT_REMAINDER, then r.count contains the number of bytes decoded. * - * The default option (simdutf::base64_default) expects the characters `+` and `/` as part of its alphabet. - * The URL option (simdutf::base64_url) expects the characters `-` and `_` as part of its alphabet. + * The default option (simdutf::base64_default) expects the characters `+` and + * `/` as part of its alphabet. The URL option (simdutf::base64_url) expects the + * characters `-` and `_` as part of its alphabet. * - * The padding (`=`) is validated if present. There may be at most two padding characters at the end of the input. - * If there are any padding characters, the total number of characters (excluding spaces but including padding characters) must be divisible by four. + * The padding (`=`) is validated if present. There may be at most two padding + * characters at the end of the input. If there are any padding characters, the + * total number of characters (excluding spaces but including padding + * characters) must be divisible by four. * - * The INVALID_BASE64_CHARACTER cases are considered fatal and you are expected to discard - * the output. + * The INVALID_BASE64_CHARACTER cases are considered fatal and you are expected + * to discard the output. * - * @param input the base64 string to process, in ASCII stored as 8-bit or 16-bit units + * Advanced users may want to taylor how the last chunk is handled. By default, + * we use a loose (forgiving) approach but we also support a strict approach + * as well as a stop_before_partial approach, as per the following proposal: + * + * https://tc39.es/proposal-arraybuffer-base64/spec/#sec-frombase64 + * + * @param input the base64 string to process, in ASCII stored as 8-bit + * or 16-bit units * @param length the length of the string in 8-bit or 16-bit units. - * @param output the pointer to buffer that can hold the conversion result. - * @param outlen the number of bytes that can be written in the output buffer. Upon return, it is modified to reflect how many bytes were written. - * @param options the base64 options to use, can be base64_default or base64_url, is base64_default by default. - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and position of the INVALID_BASE64_CHARACTER error (in the input in units) if any, or the number of units processed if successful. + * @param output the pointer to buffer that can hold the conversion + * result. + * @param outlen the number of bytes that can be written in the output + * buffer. Upon return, it is modified to reflect how many bytes were written. + * @param options the base64 options to use, can be base64_default or + * base64_url, is base64_default by default. + * @param last_chunk_options the last chunk handling options, + * last_chunk_handling_options::loose by default + * but can also be last_chunk_handling_options::strict or + * last_chunk_handling_options::stop_before_partial. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and position of the + * INVALID_BASE64_CHARACTER error (in the input in units) if any, or the number + * of units processed if successful. */ -simdutf_warn_unused result base64_to_binary_safe(const char * input, size_t length, char* output, size_t& outlen, base64_options options = base64_default) noexcept; -simdutf_warn_unused result base64_to_binary_safe(const char16_t * input, size_t length, char* output, size_t& outlen, base64_options options = base64_default) noexcept; +simdutf_warn_unused result +base64_to_binary_safe(const char *input, size_t length, char *output, + size_t &outlen, base64_options options = base64_default, + last_chunk_handling_options last_chunk_options = + last_chunk_handling_options::loose) noexcept; +simdutf_warn_unused result +base64_to_binary_safe(const char16_t *input, size_t length, char *output, + size_t &outlen, base64_options options = base64_default, + last_chunk_handling_options last_chunk_options = + last_chunk_handling_options::loose) noexcept; /** * An implementation of simdutf for a particular CPU architecture. * - * Also used to maintain the currently active implementation. The active implementation is - * automatically initialized on first use to the most advanced implementation supported by the host. + * Also used to maintain the currently active implementation. The active + * implementation is automatically initialized on first use to the most advanced + * implementation supported by the host. */ class implementation { public: - /** * The name of this implementation. * * const implementation *impl = simdutf::active_implementation; - * cout << "simdutf is optimized for " << impl->name() << "(" << impl->description() << ")" << endl; + * cout << "simdutf is optimized for " << impl->name() << "(" << + * impl->description() << ")" << endl; * * @return the name of the implementation, e.g. "haswell", "westmere", "arm64" */ @@ -2561,7 +2946,8 @@ class implementation { * The description of this implementation. * * const implementation *impl = simdutf::active_implementation; - * cout << "simdutf is optimized for " << impl->name() << "(" << impl->description() << ")" << endl; + * cout << "simdutf is optimized for " << impl->name() << "(" << + * impl->description() << ")" << endl; * * @return the name of the implementation, e.g. "haswell", "westmere", "arm64" */ @@ -2573,7 +2959,8 @@ class implementation { * and should therefore not be called too often if performance is a concern. * * - * @return true if the implementation can be safely used on the current system (determined at runtime) + * @return true if the implementation can be safely used on the current system + * (determined at runtime) */ bool supported_by_runtime_system() const; @@ -2583,7 +2970,8 @@ class implementation { * @param length the length of the string in bytes. * @return the encoding type detected */ - virtual encoding_type autodetect_encoding(const char * input, size_t length) const noexcept; + virtual encoding_type autodetect_encoding(const char *input, + size_t length) const noexcept; /** * This function will try to detect the possible encodings in one pass @@ -2591,7 +2979,8 @@ class implementation { * @param length the length of the string in bytes. * @return the encoding type detected */ - virtual int detect_encodings(const char * input, size_t length) const noexcept = 0; + virtual int detect_encodings(const char *input, + size_t length) const noexcept = 0; /** * @private For internal implementation use @@ -2600,8 +2989,9 @@ class implementation { * * @return a mask of all required `internal::instruction_set::` values */ - virtual uint32_t required_instruction_sets() const { return _required_instruction_sets; } - + virtual uint32_t required_instruction_sets() const { + return _required_instruction_sets; + } /** * Validate the UTF-8 string. @@ -2612,7 +3002,8 @@ class implementation { * @param len the length of the string in bytes. * @return true if and only if the string is valid UTF-8. */ - simdutf_warn_unused virtual bool validate_utf8(const char *buf, size_t len) const noexcept = 0; + simdutf_warn_unused virtual bool validate_utf8(const char *buf, + size_t len) const noexcept = 0; /** * Validate the UTF-8 string and stop on errors. @@ -2621,9 +3012,13 @@ class implementation { * * @param buf the UTF-8 string to validate. * @param len the length of the string in bytes. - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of code units validated if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of code units validated + * if successful. */ - simdutf_warn_unused virtual result validate_utf8_with_errors(const char *buf, size_t len) const noexcept = 0; + simdutf_warn_unused virtual result + validate_utf8_with_errors(const char *buf, size_t len) const noexcept = 0; /** * Validate the ASCII string. @@ -2634,7 +3029,8 @@ class implementation { * @param len the length of the string in bytes. * @return true if and only if the string is valid ASCII. */ - simdutf_warn_unused virtual bool validate_ascii(const char *buf, size_t len) const noexcept = 0; + simdutf_warn_unused virtual bool + validate_ascii(const char *buf, size_t len) const noexcept = 0; /** * Validate the ASCII string and stop on error. @@ -2643,9 +3039,13 @@ class implementation { * * @param buf the ASCII string to validate. * @param len the length of the string in bytes. - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of code units validated if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of code units validated + * if successful. */ - simdutf_warn_unused virtual result validate_ascii_with_errors(const char *buf, size_t len) const noexcept = 0; + simdutf_warn_unused virtual result + validate_ascii_with_errors(const char *buf, size_t len) const noexcept = 0; /** * Validate the UTF-16LE string.This function may be best when you expect @@ -2657,10 +3057,12 @@ class implementation { * This function is not BOM-aware. * * @param buf the UTF-16LE string to validate. - * @param len the length of the string in number of 2-byte code units (char16_t). + * @param len the length of the string in number of 2-byte code units + * (char16_t). * @return true if and only if the string is valid UTF-16LE. */ - simdutf_warn_unused virtual bool validate_utf16le(const char16_t *buf, size_t len) const noexcept = 0; + simdutf_warn_unused virtual bool + validate_utf16le(const char16_t *buf, size_t len) const noexcept = 0; /** * Validate the UTF-16BE string. This function may be best when you expect @@ -2672,24 +3074,32 @@ class implementation { * This function is not BOM-aware. * * @param buf the UTF-16BE string to validate. - * @param len the length of the string in number of 2-byte code units (char16_t). + * @param len the length of the string in number of 2-byte code units + * (char16_t). * @return true if and only if the string is valid UTF-16BE. */ - simdutf_warn_unused virtual bool validate_utf16be(const char16_t *buf, size_t len) const noexcept = 0; + simdutf_warn_unused virtual bool + validate_utf16be(const char16_t *buf, size_t len) const noexcept = 0; /** * Validate the UTF-16LE string and stop on error. It might be faster than - * validate_utf16le when an error is expected to occur early. + * validate_utf16le when an error is expected to occur early. * * Overridden by each implementation. * * This function is not BOM-aware. * * @param buf the UTF-16LE string to validate. - * @param len the length of the string in number of 2-byte code units (char16_t). - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of code units validated if successful. + * @param len the length of the string in number of 2-byte code units + * (char16_t). + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of code units validated + * if successful. */ - simdutf_warn_unused virtual result validate_utf16le_with_errors(const char16_t *buf, size_t len) const noexcept = 0; + simdutf_warn_unused virtual result + validate_utf16le_with_errors(const char16_t *buf, + size_t len) const noexcept = 0; /** * Validate the UTF-16BE string and stop on error. It might be faster than @@ -2700,10 +3110,16 @@ class implementation { * This function is not BOM-aware. * * @param buf the UTF-16BE string to validate. - * @param len the length of the string in number of 2-byte code units (char16_t). - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of code units validated if successful. + * @param len the length of the string in number of 2-byte code units + * (char16_t). + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of code units validated + * if successful. */ - simdutf_warn_unused virtual result validate_utf16be_with_errors(const char16_t *buf, size_t len) const noexcept = 0; + simdutf_warn_unused virtual result + validate_utf16be_with_errors(const char16_t *buf, + size_t len) const noexcept = 0; /** * Validate the UTF-32 string. @@ -2713,10 +3129,12 @@ class implementation { * This function is not BOM-aware. * * @param buf the UTF-32 string to validate. - * @param len the length of the string in number of 4-byte code units (char32_t). + * @param len the length of the string in number of 4-byte code units + * (char32_t). * @return true if and only if the string is valid UTF-32. */ - simdutf_warn_unused virtual bool validate_utf32(const char32_t *buf, size_t len) const noexcept = 0; + simdutf_warn_unused virtual bool + validate_utf32(const char32_t *buf, size_t len) const noexcept = 0; /** * Validate the UTF-32 string and stop on error. @@ -2726,10 +3144,16 @@ class implementation { * This function is not BOM-aware. * * @param buf the UTF-32 string to validate. - * @param len the length of the string in number of 4-byte code units (char32_t). - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of code units validated if successful. + * @param len the length of the string in number of 4-byte code units + * (char32_t). + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of code units validated + * if successful. */ - simdutf_warn_unused virtual result validate_utf32_with_errors(const char32_t *buf, size_t len) const noexcept = 0; + simdutf_warn_unused virtual result + validate_utf32_with_errors(const char32_t *buf, + size_t len) const noexcept = 0; /** * Convert Latin1 string into UTF8 string. @@ -2741,7 +3165,9 @@ class implementation { * @param utf8_output the pointer to buffer that can hold conversion result * @return the number of written char; 0 if conversion is not possible */ - simdutf_warn_unused virtual size_t convert_latin1_to_utf8(const char * input, size_t length, char* utf8_output) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_latin1_to_utf8(const char *input, size_t length, + char *utf8_output) const noexcept = 0; /** * Convert possibly Latin1 string into UTF-16LE string. @@ -2753,7 +3179,9 @@ class implementation { * @param utf16_buffer the pointer to buffer that can hold conversion result * @return the number of written char16_t; 0 if conversion is not possible */ - simdutf_warn_unused virtual size_t convert_latin1_to_utf16le(const char * input, size_t length, char16_t* utf16_output) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_latin1_to_utf16le(const char *input, size_t length, + char16_t *utf16_output) const noexcept = 0; /** * Convert Latin1 string into UTF-16BE string. @@ -2765,7 +3193,9 @@ class implementation { * @param utf16_buffer the pointer to buffer that can hold conversion result * @return the number of written char16_t; 0 if conversion is not possible */ - simdutf_warn_unused virtual size_t convert_latin1_to_utf16be(const char * input, size_t length, char16_t* utf16_output) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_latin1_to_utf16be(const char *input, size_t length, + char16_t *utf16_output) const noexcept = 0; /** * Convert Latin1 string into UTF-32 string. @@ -2777,9 +3207,11 @@ class implementation { * @param utf32_buffer the pointer to buffer that can hold conversion result * @return the number of written char32_t; 0 if conversion is not possible */ - simdutf_warn_unused virtual size_t convert_latin1_to_utf32(const char * input, size_t length, char32_t* utf32_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_latin1_to_utf32(const char *input, size_t length, + char32_t *utf32_buffer) const noexcept = 0; - /** + /** * Convert possibly broken UTF-8 string into latin1 string. * * During the conversion also validation of the input string is done. @@ -2788,9 +3220,12 @@ class implementation { * @param input the UTF-8 string to convert * @param length the length of the string in bytes * @param latin1_output the pointer to buffer that can hold conversion result - * @return the number of written char; 0 if the input was not valid UTF-8 string or if it cannot be represented as Latin1 + * @return the number of written char; 0 if the input was not valid UTF-8 + * string or if it cannot be represented as Latin1 */ - simdutf_warn_unused virtual size_t convert_utf8_to_latin1(const char * input, size_t length, char* latin1_output) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_utf8_to_latin1(const char *input, size_t length, + char *latin1_output) const noexcept = 0; /** * Convert possibly broken UTF-8 string into latin1 string with errors. @@ -2803,27 +3238,37 @@ class implementation { * @param input the UTF-8 string to convert * @param length the length of the string in bytes * @param latin1_output the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of code units validated if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of code units validated + * if successful. */ - simdutf_warn_unused virtual result convert_utf8_to_latin1_with_errors(const char * input, size_t length, char* latin1_output) const noexcept = 0; + simdutf_warn_unused virtual result + convert_utf8_to_latin1_with_errors(const char *input, size_t length, + char *latin1_output) const noexcept = 0; /** * Convert valid UTF-8 string into latin1 string. * - * This function assumes that the input string is valid UTF-8 and that it can be represented as Latin1. - * If you violate this assumption, the result is implementation defined and may include system-dependent behavior such as crashes. + * This function assumes that the input string is valid UTF-8 and that it can + * be represented as Latin1. If you violate this assumption, the result is + * implementation defined and may include system-dependent behavior such as + * crashes. * - * This function is for expert users only and not part of our public API. Use convert_utf8_to_latin1 instead. + * This function is for expert users only and not part of our public API. Use + * convert_utf8_to_latin1 instead. * * This function is not BOM-aware. * * @param input the UTF-8 string to convert * @param length the length of the string in bytes * @param latin1_output the pointer to buffer that can hold conversion result - * @return the number of written char; 0 if the input was not valid UTF-8 string + * @return the number of written char; 0 if the input was not valid UTF-8 + * string */ - simdutf_warn_unused virtual size_t convert_valid_utf8_to_latin1(const char * input, size_t length, char* latin1_output) const noexcept = 0; - + simdutf_warn_unused virtual size_t + convert_valid_utf8_to_latin1(const char *input, size_t length, + char *latin1_output) const noexcept = 0; /** * Convert possibly broken UTF-8 string into UTF-16LE string. @@ -2834,9 +3279,12 @@ class implementation { * @param input the UTF-8 string to convert * @param length the length of the string in bytes * @param utf16_buffer the pointer to buffer that can hold conversion result - * @return the number of written char16_t; 0 if the input was not valid UTF-8 string + * @return the number of written char16_t; 0 if the input was not valid UTF-8 + * string */ - simdutf_warn_unused virtual size_t convert_utf8_to_utf16le(const char * input, size_t length, char16_t* utf16_output) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_utf8_to_utf16le(const char *input, size_t length, + char16_t *utf16_output) const noexcept = 0; /** * Convert possibly broken UTF-8 string into UTF-16BE string. @@ -2847,12 +3295,16 @@ class implementation { * @param input the UTF-8 string to convert * @param length the length of the string in bytes * @param utf16_buffer the pointer to buffer that can hold conversion result - * @return the number of written char16_t; 0 if the input was not valid UTF-8 string + * @return the number of written char16_t; 0 if the input was not valid UTF-8 + * string */ - simdutf_warn_unused virtual size_t convert_utf8_to_utf16be(const char * input, size_t length, char16_t* utf16_output) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_utf8_to_utf16be(const char *input, size_t length, + char16_t *utf16_output) const noexcept = 0; /** - * Convert possibly broken UTF-8 string into UTF-16LE string and stop on error. + * Convert possibly broken UTF-8 string into UTF-16LE string and stop on + * error. * * During the conversion also validation of the input string is done. * This function is suitable to work with inputs from untrusted sources. @@ -2860,12 +3312,18 @@ class implementation { * @param input the UTF-8 string to convert * @param length the length of the string in bytes * @param utf16_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of code units validated if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of code units validated + * if successful. */ - simdutf_warn_unused virtual result convert_utf8_to_utf16le_with_errors(const char * input, size_t length, char16_t* utf16_output) const noexcept = 0; + simdutf_warn_unused virtual result convert_utf8_to_utf16le_with_errors( + const char *input, size_t length, + char16_t *utf16_output) const noexcept = 0; /** - * Convert possibly broken UTF-8 string into UTF-16BE string and stop on error. + * Convert possibly broken UTF-8 string into UTF-16BE string and stop on + * error. * * During the conversion also validation of the input string is done. * This function is suitable to work with inputs from untrusted sources. @@ -2873,9 +3331,14 @@ class implementation { * @param input the UTF-8 string to convert * @param length the length of the string in bytes * @param utf16_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of code units validated if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of code units validated + * if successful. */ - simdutf_warn_unused virtual result convert_utf8_to_utf16be_with_errors(const char * input, size_t length, char16_t* utf16_output) const noexcept = 0; + simdutf_warn_unused virtual result convert_utf8_to_utf16be_with_errors( + const char *input, size_t length, + char16_t *utf16_output) const noexcept = 0; /** * Convert possibly broken UTF-8 string into UTF-32 string. @@ -2886,9 +3349,12 @@ class implementation { * @param input the UTF-8 string to convert * @param length the length of the string in bytes * @param utf32_buffer the pointer to buffer that can hold conversion result - * @return the number of written char16_t; 0 if the input was not valid UTF-8 string + * @return the number of written char16_t; 0 if the input was not valid UTF-8 + * string */ - simdutf_warn_unused virtual size_t convert_utf8_to_utf32(const char * input, size_t length, char32_t* utf32_output) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_utf8_to_utf32(const char *input, size_t length, + char32_t *utf32_output) const noexcept = 0; /** * Convert possibly broken UTF-8 string into UTF-32 string and stop on error. @@ -2899,9 +3365,14 @@ class implementation { * @param input the UTF-8 string to convert * @param length the length of the string in bytes * @param utf32_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char32_t written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char32_t written if + * successful. */ - simdutf_warn_unused virtual result convert_utf8_to_utf32_with_errors(const char * input, size_t length, char32_t* utf32_output) const noexcept = 0; + simdutf_warn_unused virtual result + convert_utf8_to_utf32_with_errors(const char *input, size_t length, + char32_t *utf32_output) const noexcept = 0; /** * Convert valid UTF-8 string into UTF-16LE string. @@ -2913,9 +3384,11 @@ class implementation { * @param utf16_buffer the pointer to buffer that can hold conversion result * @return the number of written char16_t */ - simdutf_warn_unused virtual size_t convert_valid_utf8_to_utf16le(const char * input, size_t length, char16_t* utf16_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_valid_utf8_to_utf16le(const char *input, size_t length, + char16_t *utf16_buffer) const noexcept = 0; -/** + /** * Convert valid UTF-8 string into UTF-16BE string. * * This function assumes that the input string is valid UTF-8. @@ -2925,7 +3398,9 @@ class implementation { * @param utf16_buffer the pointer to buffer that can hold conversion result * @return the number of written char16_t */ - simdutf_warn_unused virtual size_t convert_valid_utf8_to_utf16be(const char * input, size_t length, char16_t* utf16_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_valid_utf8_to_utf16be(const char *input, size_t length, + char16_t *utf16_buffer) const noexcept = 0; /** * Convert valid UTF-8 string into UTF-32 string. @@ -2937,33 +3412,41 @@ class implementation { * @param utf16_buffer the pointer to buffer that can hold conversion result * @return the number of written char32_t */ - simdutf_warn_unused virtual size_t convert_valid_utf8_to_utf32(const char * input, size_t length, char32_t* utf32_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_valid_utf8_to_utf32(const char *input, size_t length, + char32_t *utf32_buffer) const noexcept = 0; /** - * Compute the number of 2-byte code units that this UTF-8 string would require in UTF-16LE format. + * Compute the number of 2-byte code units that this UTF-8 string would + * require in UTF-16LE format. * - * This function does not validate the input. It is acceptable to pass invalid UTF-8 strings but in such cases - * the result is implementation defined. + * This function does not validate the input. It is acceptable to pass invalid + * UTF-8 strings but in such cases the result is implementation defined. * * @param input the UTF-8 string to process * @param length the length of the string in bytes - * @return the number of char16_t code units required to encode the UTF-8 string as UTF-16LE + * @return the number of char16_t code units required to encode the UTF-8 + * string as UTF-16LE */ - simdutf_warn_unused virtual size_t utf16_length_from_utf8(const char * input, size_t length) const noexcept = 0; + simdutf_warn_unused virtual size_t + utf16_length_from_utf8(const char *input, size_t length) const noexcept = 0; - /** - * Compute the number of 4-byte code units that this UTF-8 string would require in UTF-32 format. + /** + * Compute the number of 4-byte code units that this UTF-8 string would + * require in UTF-32 format. * - * This function is equivalent to count_utf8. It is acceptable to pass invalid UTF-8 strings but in such cases - * the result is implementation defined. + * This function is equivalent to count_utf8. It is acceptable to pass invalid + * UTF-8 strings but in such cases the result is implementation defined. * * This function does not validate the input. * * @param input the UTF-8 string to process * @param length the length of the string in bytes - * @return the number of char32_t code units required to encode the UTF-8 string as UTF-32 + * @return the number of char32_t code units required to encode the UTF-8 + * string as UTF-32 */ - simdutf_warn_unused virtual size_t utf32_length_from_utf8(const char * input, size_t length) const noexcept = 0; + simdutf_warn_unused virtual size_t + utf32_length_from_utf8(const char *input, size_t length) const noexcept = 0; /** * Convert possibly broken UTF-16LE string into Latin1 string. @@ -2974,11 +3457,16 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-16LE string to convert - * @param length the length of the string in 2-byte code units (char16_t) - * @param latin1_buffer the pointer to buffer that can hold conversion result - * @return number of written code units; 0 if input is not a valid UTF-16LE string or if it cannot be represented as Latin1 + * @param length the length of the string in 2-byte code units + * (char16_t) + * @param latin1_buffer the pointer to buffer that can hold conversion + * result + * @return number of written code units; 0 if input is not a valid UTF-16LE + * string or if it cannot be represented as Latin1 */ - simdutf_warn_unused virtual size_t convert_utf16le_to_latin1(const char16_t * input, size_t length, char* latin1_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_utf16le_to_latin1(const char16_t *input, size_t length, + char *latin1_buffer) const noexcept = 0; /** * Convert possibly broken UTF-16BE string into Latin1 string. @@ -2989,11 +3477,16 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-16BE string to convert - * @param length the length of the string in 2-byte code units (char16_t) - * @param latin1_buffer the pointer to buffer that can hold conversion result - * @return number of written code units; 0 if input is not a valid UTF-16BE string or if it cannot be represented as Latin1 + * @param length the length of the string in 2-byte code units + * (char16_t) + * @param latin1_buffer the pointer to buffer that can hold conversion + * result + * @return number of written code units; 0 if input is not a valid UTF-16BE + * string or if it cannot be represented as Latin1 */ - simdutf_warn_unused virtual size_t convert_utf16be_to_latin1(const char16_t * input, size_t length, char* latin1_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_utf16be_to_latin1(const char16_t *input, size_t length, + char *latin1_buffer) const noexcept = 0; /** * Convert possibly broken UTF-16LE string into Latin1 string. @@ -3005,11 +3498,18 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-16LE string to convert - * @param length the length of the string in 2-byte code units (char16_t) - * @param latin1_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char written if successful. + * @param length the length of the string in 2-byte code units + * (char16_t) + * @param latin1_buffer the pointer to buffer that can hold conversion + * result + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char written if + * successful. */ - simdutf_warn_unused virtual result convert_utf16le_to_latin1_with_errors(const char16_t * input, size_t length, char* latin1_buffer) const noexcept = 0; + simdutf_warn_unused virtual result + convert_utf16le_to_latin1_with_errors(const char16_t *input, size_t length, + char *latin1_buffer) const noexcept = 0; /** * Convert possibly broken UTF-16BE string into Latin1 string. @@ -3021,45 +3521,66 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-16BE string to convert - * @param length the length of the string in 2-byte code units (char16_t) - * @param latin1_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char written if successful. + * @param length the length of the string in 2-byte code units + * (char16_t) + * @param latin1_buffer the pointer to buffer that can hold conversion + * result + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char written if + * successful. */ - simdutf_warn_unused virtual result convert_utf16be_to_latin1_with_errors(const char16_t * input, size_t length, char* latin1_buffer) const noexcept = 0; + simdutf_warn_unused virtual result + convert_utf16be_to_latin1_with_errors(const char16_t *input, size_t length, + char *latin1_buffer) const noexcept = 0; /** * Convert valid UTF-16LE string into Latin1 string. * - * This function assumes that the input string is valid UTF-L16LE and that it can be represented as Latin1. - * If you violate this assumption, the result is implementation defined and may include system-dependent behavior such as crashes. + * This function assumes that the input string is valid UTF-L16LE and that it + * can be represented as Latin1. If you violate this assumption, the result is + * implementation defined and may include system-dependent behavior such as + * crashes. * - * This function is for expert users only and not part of our public API. Use convert_utf16le_to_latin1 instead. + * This function is for expert users only and not part of our public API. Use + * convert_utf16le_to_latin1 instead. * * This function is not BOM-aware. * * @param input the UTF-16LE string to convert - * @param length the length of the string in 2-byte code units (char16_t) - * @param latin1_buffer the pointer to buffer that can hold conversion result + * @param length the length of the string in 2-byte code units + * (char16_t) + * @param latin1_buffer the pointer to buffer that can hold conversion + * result * @return number of written code units; 0 if conversion is not possible */ - simdutf_warn_unused virtual size_t convert_valid_utf16le_to_latin1(const char16_t * input, size_t length, char* latin1_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_valid_utf16le_to_latin1(const char16_t *input, size_t length, + char *latin1_buffer) const noexcept = 0; /** * Convert valid UTF-16BE string into Latin1 string. * - * This function assumes that the input string is valid UTF16-BE and that it can be represented as Latin1. - * If you violate this assumption, the result is implementation defined and may include system-dependent behavior such as crashes. + * This function assumes that the input string is valid UTF16-BE and that it + * can be represented as Latin1. If you violate this assumption, the result is + * implementation defined and may include system-dependent behavior such as + * crashes. * - * This function is for expert users only and not part of our public API. Use convert_utf16be_to_latin1 instead. + * This function is for expert users only and not part of our public API. Use + * convert_utf16be_to_latin1 instead. * * This function is not BOM-aware. * * @param input the UTF-16BE string to convert - * @param length the length of the string in 2-byte code units (char16_t) - * @param latin1_buffer the pointer to buffer that can hold conversion result + * @param length the length of the string in 2-byte code units + * (char16_t) + * @param latin1_buffer the pointer to buffer that can hold conversion + * result * @return number of written code units; 0 if conversion is not possible */ - simdutf_warn_unused virtual size_t convert_valid_utf16be_to_latin1(const char16_t * input, size_t length, char* latin1_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_valid_utf16be_to_latin1(const char16_t *input, size_t length, + char *latin1_buffer) const noexcept = 0; /** * Convert possibly broken UTF-16LE string into UTF-8 string. @@ -3070,11 +3591,15 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-16LE string to convert - * @param length the length of the string in 2-byte code units (char16_t) + * @param length the length of the string in 2-byte code units + * (char16_t) * @param utf8_buffer the pointer to buffer that can hold conversion result - * @return number of written code units; 0 if input is not a valid UTF-16LE string + * @return number of written code units; 0 if input is not a valid UTF-16LE + * string */ - simdutf_warn_unused virtual size_t convert_utf16le_to_utf8(const char16_t * input, size_t length, char* utf8_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_utf16le_to_utf8(const char16_t *input, size_t length, + char *utf8_buffer) const noexcept = 0; /** * Convert possibly broken UTF-16BE string into UTF-8 string. @@ -3085,14 +3610,19 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-16BE string to convert - * @param length the length of the string in 2-byte code units (char16_t) + * @param length the length of the string in 2-byte code units + * (char16_t) * @param utf8_buffer the pointer to buffer that can hold conversion result - * @return number of written code units; 0 if input is not a valid UTF-16BE string + * @return number of written code units; 0 if input is not a valid UTF-16BE + * string */ - simdutf_warn_unused virtual size_t convert_utf16be_to_utf8(const char16_t * input, size_t length, char* utf8_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_utf16be_to_utf8(const char16_t *input, size_t length, + char *utf8_buffer) const noexcept = 0; /** - * Convert possibly broken UTF-16LE string into UTF-8 string and stop on error. + * Convert possibly broken UTF-16LE string into UTF-8 string and stop on + * error. * * During the conversion also validation of the input string is done. * This function is suitable to work with inputs from untrusted sources. @@ -3100,14 +3630,21 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-16LE string to convert - * @param length the length of the string in 2-byte code units (char16_t) + * @param length the length of the string in 2-byte code units + * (char16_t) * @param utf8_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char written if + * successful. */ - simdutf_warn_unused virtual result convert_utf16le_to_utf8_with_errors(const char16_t * input, size_t length, char* utf8_buffer) const noexcept = 0; + simdutf_warn_unused virtual result + convert_utf16le_to_utf8_with_errors(const char16_t *input, size_t length, + char *utf8_buffer) const noexcept = 0; /** - * Convert possibly broken UTF-16BE string into UTF-8 string and stop on error. + * Convert possibly broken UTF-16BE string into UTF-8 string and stop on + * error. * * During the conversion also validation of the input string is done. * This function is suitable to work with inputs from untrusted sources. @@ -3115,11 +3652,17 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-16BE string to convert - * @param length the length of the string in 2-byte code units (char16_t) + * @param length the length of the string in 2-byte code units + * (char16_t) * @param utf8_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char written if + * successful. */ - simdutf_warn_unused virtual result convert_utf16be_to_utf8_with_errors(const char16_t * input, size_t length, char* utf8_buffer) const noexcept = 0; + simdutf_warn_unused virtual result + convert_utf16be_to_utf8_with_errors(const char16_t *input, size_t length, + char *utf8_buffer) const noexcept = 0; /** * Convert valid UTF-16LE string into UTF-8 string. @@ -3129,11 +3672,15 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-16LE string to convert - * @param length the length of the string in 2-byte code units (char16_t) - * @param utf8_buffer the pointer to buffer that can hold the conversion result + * @param length the length of the string in 2-byte code units + * (char16_t) + * @param utf8_buffer the pointer to buffer that can hold the conversion + * result * @return number of written code units; 0 if conversion is not possible */ - simdutf_warn_unused virtual size_t convert_valid_utf16le_to_utf8(const char16_t * input, size_t length, char* utf8_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_valid_utf16le_to_utf8(const char16_t *input, size_t length, + char *utf8_buffer) const noexcept = 0; /** * Convert valid UTF-16BE string into UTF-8 string. @@ -3143,11 +3690,15 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-16BE string to convert - * @param length the length of the string in 2-byte code units (char16_t) - * @param utf8_buffer the pointer to buffer that can hold the conversion result + * @param length the length of the string in 2-byte code units + * (char16_t) + * @param utf8_buffer the pointer to buffer that can hold the conversion + * result * @return number of written code units; 0 if conversion is not possible */ - simdutf_warn_unused virtual size_t convert_valid_utf16be_to_utf8(const char16_t * input, size_t length, char* utf8_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_valid_utf16be_to_utf8(const char16_t *input, size_t length, + char *utf8_buffer) const noexcept = 0; /** * Convert possibly broken UTF-16LE string into UTF-32 string. @@ -3158,11 +3709,15 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-16LE string to convert - * @param length the length of the string in 2-byte code units (char16_t) + * @param length the length of the string in 2-byte code units + * (char16_t) * @param utf32_buffer the pointer to buffer that can hold conversion result - * @return number of written code units; 0 if input is not a valid UTF-16LE string + * @return number of written code units; 0 if input is not a valid UTF-16LE + * string */ - simdutf_warn_unused virtual size_t convert_utf16le_to_utf32(const char16_t * input, size_t length, char32_t* utf32_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_utf16le_to_utf32(const char16_t *input, size_t length, + char32_t *utf32_buffer) const noexcept = 0; /** * Convert possibly broken UTF-16BE string into UTF-32 string. @@ -3173,14 +3728,19 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-16BE string to convert - * @param length the length of the string in 2-byte code units (char16_t) + * @param length the length of the string in 2-byte code units + * (char16_t) * @param utf32_buffer the pointer to buffer that can hold conversion result - * @return number of written code units; 0 if input is not a valid UTF-16BE string + * @return number of written code units; 0 if input is not a valid UTF-16BE + * string */ - simdutf_warn_unused virtual size_t convert_utf16be_to_utf32(const char16_t * input, size_t length, char32_t* utf32_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_utf16be_to_utf32(const char16_t *input, size_t length, + char32_t *utf32_buffer) const noexcept = 0; /** - * Convert possibly broken UTF-16LE string into UTF-32 string and stop on error. + * Convert possibly broken UTF-16LE string into UTF-32 string and stop on + * error. * * During the conversion also validation of the input string is done. * This function is suitable to work with inputs from untrusted sources. @@ -3188,14 +3748,21 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-16LE string to convert - * @param length the length of the string in 2-byte code units (char16_t) + * @param length the length of the string in 2-byte code units + * (char16_t) * @param utf32_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char32_t written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char32_t written if + * successful. */ - simdutf_warn_unused virtual result convert_utf16le_to_utf32_with_errors(const char16_t * input, size_t length, char32_t* utf32_buffer) const noexcept = 0; + simdutf_warn_unused virtual result convert_utf16le_to_utf32_with_errors( + const char16_t *input, size_t length, + char32_t *utf32_buffer) const noexcept = 0; /** - * Convert possibly broken UTF-16BE string into UTF-32 string and stop on error. + * Convert possibly broken UTF-16BE string into UTF-32 string and stop on + * error. * * During the conversion also validation of the input string is done. * This function is suitable to work with inputs from untrusted sources. @@ -3203,11 +3770,17 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-16BE string to convert - * @param length the length of the string in 2-byte code units (char16_t) + * @param length the length of the string in 2-byte code units + * (char16_t) * @param utf32_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char32_t written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char32_t written if + * successful. */ - simdutf_warn_unused virtual result convert_utf16be_to_utf32_with_errors(const char16_t * input, size_t length, char32_t* utf32_buffer) const noexcept = 0; + simdutf_warn_unused virtual result convert_utf16be_to_utf32_with_errors( + const char16_t *input, size_t length, + char32_t *utf32_buffer) const noexcept = 0; /** * Convert valid UTF-16LE string into UTF-32 string. @@ -3217,11 +3790,15 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-16LE string to convert - * @param length the length of the string in 2-byte code units (char16_t) - * @param utf32_buffer the pointer to buffer that can hold the conversion result + * @param length the length of the string in 2-byte code units + * (char16_t) + * @param utf32_buffer the pointer to buffer that can hold the conversion + * result * @return number of written code units; 0 if conversion is not possible */ - simdutf_warn_unused virtual size_t convert_valid_utf16le_to_utf32(const char16_t * input, size_t length, char32_t* utf32_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_valid_utf16le_to_utf32(const char16_t *input, size_t length, + char32_t *utf32_buffer) const noexcept = 0; /** * Convert valid UTF-16LE string into UTF-32BE string. @@ -3231,39 +3808,51 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-16BE string to convert - * @param length the length of the string in 2-byte code units (char16_t) - * @param utf32_buffer the pointer to buffer that can hold the conversion result + * @param length the length of the string in 2-byte code units + * (char16_t) + * @param utf32_buffer the pointer to buffer that can hold the conversion + * result * @return number of written code units; 0 if conversion is not possible */ - simdutf_warn_unused virtual size_t convert_valid_utf16be_to_utf32(const char16_t * input, size_t length, char32_t* utf32_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_valid_utf16be_to_utf32(const char16_t *input, size_t length, + char32_t *utf32_buffer) const noexcept = 0; /** - * Compute the number of bytes that this UTF-16LE string would require in UTF-8 format. + * Compute the number of bytes that this UTF-16LE string would require in + * UTF-8 format. * - * This function does not validate the input. It is acceptable to pass invalid UTF-16 strings but in such cases - * the result is implementation defined. + * This function does not validate the input. It is acceptable to pass invalid + * UTF-16 strings but in such cases the result is implementation defined. * * This function is not BOM-aware. * * @param input the UTF-16LE string to convert - * @param length the length of the string in 2-byte code units (char16_t) + * @param length the length of the string in 2-byte code units + * (char16_t) * @return the number of bytes required to encode the UTF-16LE string as UTF-8 */ - simdutf_warn_unused virtual size_t utf8_length_from_utf16le(const char16_t * input, size_t length) const noexcept = 0; + simdutf_warn_unused virtual size_t + utf8_length_from_utf16le(const char16_t *input, + size_t length) const noexcept = 0; /** - * Compute the number of bytes that this UTF-16BE string would require in UTF-8 format. + * Compute the number of bytes that this UTF-16BE string would require in + * UTF-8 format. * - * This function does not validate the input. It is acceptable to pass invalid UTF-16 strings but in such cases - * the result is implementation defined. + * This function does not validate the input. It is acceptable to pass invalid + * UTF-16 strings but in such cases the result is implementation defined. * * This function is not BOM-aware. * * @param input the UTF-16BE string to convert - * @param length the length of the string in 2-byte code units (char16_t) + * @param length the length of the string in 2-byte code units + * (char16_t) * @return the number of bytes required to encode the UTF-16BE string as UTF-8 */ - simdutf_warn_unused virtual size_t utf8_length_from_utf16be(const char16_t * input, size_t length) const noexcept = 0; + simdutf_warn_unused virtual size_t + utf8_length_from_utf16be(const char16_t *input, + size_t length) const noexcept = 0; /** * Convert possibly broken UTF-32 string into Latin1 string. @@ -3274,12 +3863,17 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-32 string to convert - * @param length the length of the string in 4-byte code units (char32_t) - * @param latin1_buffer the pointer to buffer that can hold conversion result - * @return number of written code units; 0 if input is not a valid UTF-32 string + * @param length the length of the string in 4-byte code units + * (char32_t) + * @param latin1_buffer the pointer to buffer that can hold conversion + * result + * @return number of written code units; 0 if input is not a valid UTF-32 + * string */ - simdutf_warn_unused virtual size_t convert_utf32_to_latin1(const char32_t * input, size_t length, char* latin1_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_utf32_to_latin1(const char32_t *input, size_t length, + char *latin1_buffer) const noexcept = 0; /** * Convert possibly broken UTF-32 string into Latin1 string and stop on error. @@ -3291,28 +3885,42 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-32 string to convert - * @param length the length of the string in 4-byte code units (char32_t) - * @param latin1_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char written if successful. + * @param length the length of the string in 4-byte code units + * (char32_t) + * @param latin1_buffer the pointer to buffer that can hold conversion + * result + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char written if + * successful. */ - simdutf_warn_unused virtual result convert_utf32_to_latin1_with_errors(const char32_t * input, size_t length, char* latin1_buffer) const noexcept = 0; + simdutf_warn_unused virtual result + convert_utf32_to_latin1_with_errors(const char32_t *input, size_t length, + char *latin1_buffer) const noexcept = 0; /** * Convert valid UTF-32 string into Latin1 string. * - * This function assumes that the input string is valid UTF-32 and can be represented as Latin1. - * If you violate this assumption, the result is implementation defined and may include system-dependent behavior such as crashes. + * This function assumes that the input string is valid UTF-32 and can be + * represented as Latin1. If you violate this assumption, the result is + * implementation defined and may include system-dependent behavior such as + * crashes. * - * This function is for expert users only and not part of our public API. Use convert_utf32_to_latin1 instead. + * This function is for expert users only and not part of our public API. Use + * convert_utf32_to_latin1 instead. * * This function is not BOM-aware. * * @param input the UTF-32 string to convert - * @param length the length of the string in 4-byte code units (char32_t) - * @param latin1_buffer the pointer to buffer that can hold the conversion result + * @param length the length of the string in 4-byte code units + * (char32_t) + * @param latin1_buffer the pointer to buffer that can hold the conversion + * result * @return number of written code units; 0 if conversion is not possible */ - simdutf_warn_unused virtual size_t convert_valid_utf32_to_latin1(const char32_t * input, size_t length, char* latin1_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_valid_utf32_to_latin1(const char32_t *input, size_t length, + char *latin1_buffer) const noexcept = 0; /** * Convert possibly broken UTF-32 string into UTF-8 string. @@ -3323,11 +3931,15 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-32 string to convert - * @param length the length of the string in 4-byte code units (char32_t) + * @param length the length of the string in 4-byte code units + * (char32_t) * @param utf8_buffer the pointer to buffer that can hold conversion result - * @return number of written code units; 0 if input is not a valid UTF-32 string + * @return number of written code units; 0 if input is not a valid UTF-32 + * string */ - simdutf_warn_unused virtual size_t convert_utf32_to_utf8(const char32_t * input, size_t length, char* utf8_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_utf32_to_utf8(const char32_t *input, size_t length, + char *utf8_buffer) const noexcept = 0; /** * Convert possibly broken UTF-32 string into UTF-8 string and stop on error. @@ -3338,11 +3950,17 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-32 string to convert - * @param length the length of the string in 4-byte code units (char32_t) + * @param length the length of the string in 4-byte code units + * (char32_t) * @param utf8_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char written if + * successful. */ - simdutf_warn_unused virtual result convert_utf32_to_utf8_with_errors(const char32_t * input, size_t length, char* utf8_buffer) const noexcept = 0; + simdutf_warn_unused virtual result + convert_utf32_to_utf8_with_errors(const char32_t *input, size_t length, + char *utf8_buffer) const noexcept = 0; /** * Convert valid UTF-32 string into UTF-8 string. @@ -3352,22 +3970,28 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-32 string to convert - * @param length the length of the string in 4-byte code units (char32_t) - * @param utf8_buffer the pointer to buffer that can hold the conversion result + * @param length the length of the string in 4-byte code units + * (char32_t) + * @param utf8_buffer the pointer to buffer that can hold the conversion + * result * @return number of written code units; 0 if conversion is not possible */ - simdutf_warn_unused virtual size_t convert_valid_utf32_to_utf8(const char32_t * input, size_t length, char* utf8_buffer) const noexcept = 0; - + simdutf_warn_unused virtual size_t + convert_valid_utf32_to_utf8(const char32_t *input, size_t length, + char *utf8_buffer) const noexcept = 0; /** - * Return the number of bytes that this UTF-16 string would require in Latin1 format. + * Return the number of bytes that this UTF-16 string would require in Latin1 + * format. * * * @param input the UTF-16 string to convert - * @param length the length of the string in 2-byte code units (char16_t) + * @param length the length of the string in 2-byte code units + * (char16_t) * @return the number of bytes required to encode the UTF-16 string as Latin1 */ - simdutf_warn_unused virtual size_t utf16_length_from_latin1(size_t length) const noexcept = 0; + simdutf_warn_unused virtual size_t + utf16_length_from_latin1(size_t length) const noexcept = 0; /** * Convert possibly broken UTF-32 string into UTF-16LE string. @@ -3378,11 +4002,15 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-32 string to convert - * @param length the length of the string in 4-byte code units (char32_t) + * @param length the length of the string in 4-byte code units + * (char32_t) * @param utf16_buffer the pointer to buffer that can hold conversion result - * @return number of written code units; 0 if input is not a valid UTF-32 string + * @return number of written code units; 0 if input is not a valid UTF-32 + * string */ - simdutf_warn_unused virtual size_t convert_utf32_to_utf16le(const char32_t * input, size_t length, char16_t* utf16_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_utf32_to_utf16le(const char32_t *input, size_t length, + char16_t *utf16_buffer) const noexcept = 0; /** * Convert possibly broken UTF-32 string into UTF-16BE string. @@ -3393,14 +4021,19 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-32 string to convert - * @param length the length of the string in 4-byte code units (char32_t) + * @param length the length of the string in 4-byte code units + * (char32_t) * @param utf16_buffer the pointer to buffer that can hold conversion result - * @return number of written code units; 0 if input is not a valid UTF-32 string + * @return number of written code units; 0 if input is not a valid UTF-32 + * string */ - simdutf_warn_unused virtual size_t convert_utf32_to_utf16be(const char32_t * input, size_t length, char16_t* utf16_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_utf32_to_utf16be(const char32_t *input, size_t length, + char16_t *utf16_buffer) const noexcept = 0; /** - * Convert possibly broken UTF-32 string into UTF-16LE string and stop on error. + * Convert possibly broken UTF-32 string into UTF-16LE string and stop on + * error. * * During the conversion also validation of the input string is done. * This function is suitable to work with inputs from untrusted sources. @@ -3408,14 +4041,21 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-32 string to convert - * @param length the length of the string in 4-byte code units (char32_t) + * @param length the length of the string in 4-byte code units + * (char32_t) * @param utf16_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char16_t written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char16_t written if + * successful. */ - simdutf_warn_unused virtual result convert_utf32_to_utf16le_with_errors(const char32_t * input, size_t length, char16_t* utf16_buffer) const noexcept = 0; + simdutf_warn_unused virtual result convert_utf32_to_utf16le_with_errors( + const char32_t *input, size_t length, + char16_t *utf16_buffer) const noexcept = 0; /** - * Convert possibly broken UTF-32 string into UTF-16BE string and stop on error. + * Convert possibly broken UTF-32 string into UTF-16BE string and stop on + * error. * * During the conversion also validation of the input string is done. * This function is suitable to work with inputs from untrusted sources. @@ -3423,11 +4063,17 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-32 string to convert - * @param length the length of the string in 4-byte code units (char32_t) + * @param length the length of the string in 4-byte code units + * (char32_t) * @param utf16_buffer the pointer to buffer that can hold conversion result - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in code units) if any, or the number of char16_t written if successful. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in code units) if any, or the number of char16_t written if + * successful. */ - simdutf_warn_unused virtual result convert_utf32_to_utf16be_with_errors(const char32_t * input, size_t length, char16_t* utf16_buffer) const noexcept = 0; + simdutf_warn_unused virtual result convert_utf32_to_utf16be_with_errors( + const char32_t *input, size_t length, + char16_t *utf16_buffer) const noexcept = 0; /** * Convert valid UTF-32 string into UTF-16LE string. @@ -3437,11 +4083,15 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-32 string to convert - * @param length the length of the string in 4-byte code units (char32_t) - * @param utf16_buffer the pointer to buffer that can hold the conversion result + * @param length the length of the string in 4-byte code units + * (char32_t) + * @param utf16_buffer the pointer to buffer that can hold the conversion + * result * @return number of written code units; 0 if conversion is not possible */ - simdutf_warn_unused virtual size_t convert_valid_utf32_to_utf16le(const char32_t * input, size_t length, char16_t* utf16_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_valid_utf32_to_utf16le(const char32_t *input, size_t length, + char16_t *utf16_buffer) const noexcept = 0; /** * Convert valid UTF-32 string into UTF-16BE string. @@ -3451,137 +4101,175 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-32 string to convert - * @param length the length of the string in 4-byte code units (char32_t) - * @param utf16_buffer the pointer to buffer that can hold the conversion result + * @param length the length of the string in 4-byte code units + * (char32_t) + * @param utf16_buffer the pointer to buffer that can hold the conversion + * result * @return number of written code units; 0 if conversion is not possible */ - simdutf_warn_unused virtual size_t convert_valid_utf32_to_utf16be(const char32_t * input, size_t length, char16_t* utf16_buffer) const noexcept = 0; + simdutf_warn_unused virtual size_t + convert_valid_utf32_to_utf16be(const char32_t *input, size_t length, + char16_t *utf16_buffer) const noexcept = 0; /** - * Change the endianness of the input. Can be used to go from UTF-16LE to UTF-16BE or - * from UTF-16BE to UTF-16LE. + * Change the endianness of the input. Can be used to go from UTF-16LE to + * UTF-16BE or from UTF-16BE to UTF-16LE. * * This function does not validate the input. * * This function is not BOM-aware. * * @param input the UTF-16 string to process - * @param length the length of the string in 2-byte code units (char16_t) - * @param output the pointer to buffer that can hold the conversion result + * @param length the length of the string in 2-byte code units + * (char16_t) + * @param output the pointer to buffer that can hold the conversion + * result */ - virtual void change_endianness_utf16(const char16_t * input, size_t length, char16_t * output) const noexcept = 0; + virtual void change_endianness_utf16(const char16_t *input, size_t length, + char16_t *output) const noexcept = 0; - /** - * Return the number of bytes that this Latin1 string would require in UTF-8 format. + /** + * Return the number of bytes that this Latin1 string would require in UTF-8 + * format. * * @param input the Latin1 string to convert * @param length the length of the string bytes * @return the number of bytes required to encode the Latin1 string as UTF-8 */ - simdutf_warn_unused virtual size_t utf8_length_from_latin1(const char * input, size_t length) const noexcept = 0; + simdutf_warn_unused virtual size_t + utf8_length_from_latin1(const char *input, size_t length) const noexcept = 0; /** - * Compute the number of bytes that this UTF-32 string would require in UTF-8 format. + * Compute the number of bytes that this UTF-32 string would require in UTF-8 + * format. * - * This function does not validate the input. It is acceptable to pass invalid UTF-32 strings but in such cases - * the result is implementation defined. + * This function does not validate the input. It is acceptable to pass invalid + * UTF-32 strings but in such cases the result is implementation defined. * * @param input the UTF-32 string to convert - * @param length the length of the string in 4-byte code units (char32_t) + * @param length the length of the string in 4-byte code units + * (char32_t) * @return the number of bytes required to encode the UTF-32 string as UTF-8 */ - simdutf_warn_unused virtual size_t utf8_length_from_utf32(const char32_t * input, size_t length) const noexcept = 0; + simdutf_warn_unused virtual size_t + utf8_length_from_utf32(const char32_t *input, + size_t length) const noexcept = 0; /** - * Compute the number of bytes that this UTF-32 string would require in Latin1 format. + * Compute the number of bytes that this UTF-32 string would require in Latin1 + * format. * - * This function does not validate the input. It is acceptable to pass invalid UTF-32 strings but in such cases - * the result is implementation defined. + * This function does not validate the input. It is acceptable to pass invalid + * UTF-32 strings but in such cases the result is implementation defined. * - * @param length the length of the string in 4-byte code units (char32_t) + * @param length the length of the string in 4-byte code units + * (char32_t) * @return the number of bytes required to encode the UTF-32 string as Latin1 */ - simdutf_warn_unused virtual size_t latin1_length_from_utf32(size_t length) const noexcept = 0; + simdutf_warn_unused virtual size_t + latin1_length_from_utf32(size_t length) const noexcept = 0; /** - * Compute the number of bytes that this UTF-8 string would require in Latin1 format. + * Compute the number of bytes that this UTF-8 string would require in Latin1 + * format. * - * This function does not validate the input. It is acceptable to pass invalid UTF-8 strings but in such cases - * the result is implementation defined. + * This function does not validate the input. It is acceptable to pass invalid + * UTF-8 strings but in such cases the result is implementation defined. * * @param input the UTF-8 string to convert * @param length the length of the string in byte * @return the number of bytes required to encode the UTF-8 string as Latin1 */ - simdutf_warn_unused virtual size_t latin1_length_from_utf8(const char * input, size_t length) const noexcept = 0; + simdutf_warn_unused virtual size_t + latin1_length_from_utf8(const char *input, size_t length) const noexcept = 0; /* - * Compute the number of bytes that this UTF-16LE/BE string would require in Latin1 format. + * Compute the number of bytes that this UTF-16LE/BE string would require in + * Latin1 format. * - * This function does not validate the input. It is acceptable to pass invalid UTF-16 strings but in such cases - * the result is implementation defined. + * This function does not validate the input. It is acceptable to pass invalid + * UTF-16 strings but in such cases the result is implementation defined. * * This function is not BOM-aware. * * @param input the UTF-16LE string to convert - * @param length the length of the string in 2-byte code units (char16_t) - * @return the number of bytes required to encode the UTF-16LE string as Latin1 + * @param length the length of the string in 2-byte code units + * (char16_t) + * @return the number of bytes required to encode the UTF-16LE string as + * Latin1 */ - simdutf_warn_unused virtual size_t latin1_length_from_utf16(size_t length) const noexcept = 0; + simdutf_warn_unused virtual size_t + latin1_length_from_utf16(size_t length) const noexcept = 0; /** - * Compute the number of two-byte code units that this UTF-32 string would require in UTF-16 format. + * Compute the number of two-byte code units that this UTF-32 string would + * require in UTF-16 format. * - * This function does not validate the input. It is acceptable to pass invalid UTF-32 strings but in such cases - * the result is implementation defined. + * This function does not validate the input. It is acceptable to pass invalid + * UTF-32 strings but in such cases the result is implementation defined. * * @param input the UTF-32 string to convert - * @param length the length of the string in 4-byte code units (char32_t) + * @param length the length of the string in 4-byte code units + * (char32_t) * @return the number of bytes required to encode the UTF-32 string as UTF-16 */ - simdutf_warn_unused virtual size_t utf16_length_from_utf32(const char32_t * input, size_t length) const noexcept = 0; - + simdutf_warn_unused virtual size_t + utf16_length_from_utf32(const char32_t *input, + size_t length) const noexcept = 0; /** - * Return the number of bytes that this UTF-32 string would require in Latin1 format. + * Return the number of bytes that this UTF-32 string would require in Latin1 + * format. * * @param input the UTF-32 string to convert - * @param length the length of the string in 4-byte code units (char32_t) + * @param length the length of the string in 4-byte code units + * (char32_t) * @return the number of bytes required to encode the UTF-32 string as Latin1 */ - simdutf_warn_unused virtual size_t utf32_length_from_latin1(size_t length) const noexcept = 0; + simdutf_warn_unused virtual size_t + utf32_length_from_latin1(size_t length) const noexcept = 0; /* - * Compute the number of bytes that this UTF-16LE string would require in UTF-32 format. + * Compute the number of bytes that this UTF-16LE string would require in + * UTF-32 format. * * This function is equivalent to count_utf16le. * - * This function does not validate the input. It is acceptable to pass invalid UTF-16 strings but in such cases - * the result is implementation defined. + * This function does not validate the input. It is acceptable to pass invalid + * UTF-16 strings but in such cases the result is implementation defined. * * This function is not BOM-aware. * * @param input the UTF-16LE string to convert - * @param length the length of the string in 2-byte code units (char16_t) - * @return the number of bytes required to encode the UTF-16LE string as UTF-32 + * @param length the length of the string in 2-byte code units + * (char16_t) + * @return the number of bytes required to encode the UTF-16LE string as + * UTF-32 */ - simdutf_warn_unused virtual size_t utf32_length_from_utf16le(const char16_t * input, size_t length) const noexcept = 0; + simdutf_warn_unused virtual size_t + utf32_length_from_utf16le(const char16_t *input, + size_t length) const noexcept = 0; /* - * Compute the number of bytes that this UTF-16BE string would require in UTF-32 format. + * Compute the number of bytes that this UTF-16BE string would require in + * UTF-32 format. * * This function is equivalent to count_utf16be. * - * This function does not validate the input. It is acceptable to pass invalid UTF-16 strings but in such cases - * the result is implementation defined. + * This function does not validate the input. It is acceptable to pass invalid + * UTF-16 strings but in such cases the result is implementation defined. * * This function is not BOM-aware. * * @param input the UTF-16BE string to convert - * @param length the length of the string in 2-byte code units (char16_t) - * @return the number of bytes required to encode the UTF-16BE string as UTF-32 + * @param length the length of the string in 2-byte code units + * (char16_t) + * @return the number of bytes required to encode the UTF-16BE string as + * UTF-32 */ - simdutf_warn_unused virtual size_t utf32_length_from_utf16be(const char16_t * input, size_t length) const noexcept = 0; + simdutf_warn_unused virtual size_t + utf32_length_from_utf16be(const char16_t *input, + size_t length) const noexcept = 0; /** * Count the number of code points (characters) in the string assuming that @@ -3594,10 +4282,12 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-16LE string to process - * @param length the length of the string in 2-byte code units (char16_t) + * @param length the length of the string in 2-byte code units + * (char16_t) * @return number of code points */ - simdutf_warn_unused virtual size_t count_utf16le(const char16_t * input, size_t length) const noexcept = 0; + simdutf_warn_unused virtual size_t + count_utf16le(const char16_t *input, size_t length) const noexcept = 0; /** * Count the number of code points (characters) in the string assuming that @@ -3610,11 +4300,12 @@ class implementation { * This function is not BOM-aware. * * @param input the UTF-16BE string to process - * @param length the length of the string in 2-byte code units (char16_t) + * @param length the length of the string in 2-byte code units + * (char16_t) * @return number of code points */ - simdutf_warn_unused virtual size_t count_utf16be(const char16_t * input, size_t length) const noexcept = 0; - + simdutf_warn_unused virtual size_t + count_utf16be(const char16_t *input, size_t length) const noexcept = 0; /** * Count the number of code points (characters) in the string assuming that @@ -3628,135 +4319,174 @@ class implementation { * @param length the length of the string in bytes * @return number of code points */ - simdutf_warn_unused virtual size_t count_utf8(const char * input, size_t length) const noexcept = 0; + simdutf_warn_unused virtual size_t + count_utf8(const char *input, size_t length) const noexcept = 0; /** * Provide the maximal binary length in bytes given the base64 input. - * In general, if the input contains ASCII spaces, the result will be less than - * the maximum length. It is acceptable to pass invalid base64 strings but in such cases - * the result is implementation defined. + * In general, if the input contains ASCII spaces, the result will be less + * than the maximum length. It is acceptable to pass invalid base64 strings + * but in such cases the result is implementation defined. * * @param input the base64 input to process * @param length the length of the base64 input in bytes * @return maximal number of binary bytes */ - simdutf_warn_unused virtual size_t maximal_binary_length_from_base64(const char * input, size_t length) const noexcept = 0; + simdutf_warn_unused virtual size_t + maximal_binary_length_from_base64(const char *input, + size_t length) const noexcept = 0; /** * Provide the maximal binary length in bytes given the base64 input. - * In general, if the input contains ASCII spaces, the result will be less than - * the maximum length. It is acceptable to pass invalid base64 strings but in such cases - * the result is implementation defined. + * In general, if the input contains ASCII spaces, the result will be less + * than the maximum length. It is acceptable to pass invalid base64 strings + * but in such cases the result is implementation defined. * - * @param input the base64 input to process, in ASCII stored as 16-bit units + * @param input the base64 input to process, in ASCII stored as 16-bit + * units * @param length the length of the base64 input in 16-bit units * @return maximal number of binary bytes */ - simdutf_warn_unused virtual size_t maximal_binary_length_from_base64(const char16_t * input, size_t length) const noexcept = 0; + simdutf_warn_unused virtual size_t + maximal_binary_length_from_base64(const char16_t *input, + size_t length) const noexcept = 0; /** * Convert a base64 input to a binary output. * - * This function follows the WHATWG forgiving-base64 format, which means that it will - * ignore any ASCII spaces in the input. You may provide a padded input (with one or two - * equal signs at the end) or an unpadded input (without any equal signs at the end). + * This function follows the WHATWG forgiving-base64 format, which means that + * it will ignore any ASCII spaces in the input. You may provide a padded + * input (with one or two equal signs at the end) or an unpadded input + * (without any equal signs at the end). * * See https://infra.spec.whatwg.org/#forgiving-base64-decode * - * This function will fail in case of invalid input. There are two possible reasons for - * failure: the input contains a number of base64 characters that when divided by 4, leaves - * a single remainder character (BASE64_INPUT_REMAINDER), or the input contains a character - * that is not a valid base64 character (INVALID_BASE64_CHARACTER). + * This function will fail in case of invalid input. There are two possible + * reasons for failure: the input contains a number of base64 characters that + * when divided by 4, leaves a single remainder character + * (BASE64_INPUT_REMAINDER), or the input contains a character that is not a + * valid base64 character (INVALID_BASE64_CHARACTER). * - * You should call this function with a buffer that is at least maximal_binary_length_from_base64(input, length) bytes long. - * If you fail to provide that much space, the function may cause a buffer overflow. + * You should call this function with a buffer that is at least + * maximal_binary_length_from_base64(input, length) bytes long. If you fail to + * provide that much space, the function may cause a buffer overflow. * * @param input the base64 string to process * @param length the length of the string in bytes - * @param output the pointer to buffer that can hold the conversion result (should be at least maximal_binary_length_from_base64(input, length) bytes long). - * @param options the base64 options to use, can be base64_default or base64_url, is base64_default by default. - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and either position of the error (in the input in bytes) if any, or the number of bytes written if successful. + * @param output the pointer to buffer that can hold the conversion + * result (should be at least maximal_binary_length_from_base64(input, length) + * bytes long). + * @param options the base64 options to use, can be base64_default or + * base64_url, is base64_default by default. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and either position of the error + * (in the input in bytes) if any, or the number of bytes written if + * successful. */ - simdutf_warn_unused virtual result base64_to_binary(const char * input, size_t length, char* output, base64_options options = base64_default) const noexcept = 0; + simdutf_warn_unused virtual result + base64_to_binary(const char *input, size_t length, char *output, + base64_options options = base64_default, + last_chunk_handling_options last_chunk_options = + last_chunk_handling_options::loose) const noexcept = 0; /** * Convert a base64 input to a binary output. * - * This function follows the WHATWG forgiving-base64 format, which means that it will - * ignore any ASCII spaces in the input. You may provide a padded input (with one or two - * equal signs at the end) or an unpadded input (without any equal signs at the end). + * This function follows the WHATWG forgiving-base64 format, which means that + * it will ignore any ASCII spaces in the input. You may provide a padded + * input (with one or two equal signs at the end) or an unpadded input + * (without any equal signs at the end). * * See https://infra.spec.whatwg.org/#forgiving-base64-decode * - * This function will fail in case of invalid input. There are two possible reasons for - * failure: the input contains a number of base64 characters that when divided by 4, leaves - * a single remainder character (BASE64_INPUT_REMAINDER), or the input contains a character - * that is not a valid base64 character (INVALID_BASE64_CHARACTER). + * This function will fail in case of invalid input. There are two possible + * reasons for failure: the input contains a number of base64 characters that + * when divided by 4, leaves a single remainder character + * (BASE64_INPUT_REMAINDER), or the input contains a character that is not a + * valid base64 character (INVALID_BASE64_CHARACTER). * - * You should call this function with a buffer that is at least maximal_binary_length_from_utf6_base64(input, length) bytes long. - * If you fail to provide that much space, the function may cause a buffer overflow. + * You should call this function with a buffer that is at least + * maximal_binary_length_from_utf6_base64(input, length) bytes long. If you + * fail to provide that much space, the function may cause a buffer overflow. * - * @param input the base64 string to process, in ASCII stored as 16-bit units + * @param input the base64 string to process, in ASCII stored as + * 16-bit units * @param length the length of the string in 16-bit units - * @param output the pointer to buffer that can hold the conversion result (should be at least maximal_binary_length_from_base64(input, length) bytes long). - * @param options the base64 options to use, can be base64_default or base64_url, is base64_default by default. - * @return a result pair struct (of type simdutf::error containing the two fields error and count) with an error code and position of the INVALID_BASE64_CHARACTER error (in the input in units) if any, or the number of bytes written if successful. + * @param output the pointer to buffer that can hold the conversion + * result (should be at least maximal_binary_length_from_base64(input, length) + * bytes long). + * @param options the base64 options to use, can be base64_default or + * base64_url, is base64_default by default. + * @return a result pair struct (of type simdutf::error containing the two + * fields error and count) with an error code and position of the + * INVALID_BASE64_CHARACTER error (in the input in units) if any, or the + * number of bytes written if successful. */ - simdutf_warn_unused virtual result base64_to_binary(const char16_t * input, size_t length, char* output, base64_options options = base64_default) const noexcept = 0; + simdutf_warn_unused virtual result + base64_to_binary(const char16_t *input, size_t length, char *output, + base64_options options = base64_default, + last_chunk_handling_options last_chunk_options = + last_chunk_handling_options::loose) const noexcept = 0; /** * Provide the base64 length in bytes given the length of a binary input. * * @param length the length of the input in bytes - * @parem options the base64 options to use, can be base64_default or base64_url, is base64_default by default. + * @parem options the base64 options to use, can be base64_default or + * base64_url, is base64_default by default. * @return number of base64 bytes */ - simdutf_warn_unused virtual size_t base64_length_from_binary(size_t length, base64_options options = base64_default) const noexcept = 0; + simdutf_warn_unused virtual size_t base64_length_from_binary( + size_t length, + base64_options options = base64_default) const noexcept = 0; /** * Convert a binary input to a base64 output. * - * The default option (simdutf::base64_default) uses the characters `+` and `/` as part of its alphabet. - * Further, it adds padding (`=`) at the end of the output to ensure that the output length is a multiple of four. + * The default option (simdutf::base64_default) uses the characters `+` and + * `/` as part of its alphabet. Further, it adds padding (`=`) at the end of + * the output to ensure that the output length is a multiple of four. * - * The URL option (simdutf::base64_url) uses the characters `-` and `_` as part of its alphabet. No padding - * is added at the end of the output. + * The URL option (simdutf::base64_url) uses the characters `-` and `_` as + * part of its alphabet. No padding is added at the end of the output. * * This function always succeeds. * * @param input the binary to process * @param length the length of the input in bytes - * @param output the pointer to buffer that can hold the conversion result (should be at least base64_length_from_binary(length) bytes long) - * @param options the base64 options to use, can be base64_default or base64_url, is base64_default by default. - * @return number of written bytes, will be equal to base64_length_from_binary(length, options) + * @param output the pointer to buffer that can hold the conversion + * result (should be at least base64_length_from_binary(length) bytes long) + * @param options the base64 options to use, can be base64_default or + * base64_url, is base64_default by default. + * @return number of written bytes, will be equal to + * base64_length_from_binary(length, options) */ - virtual size_t binary_to_base64(const char * input, size_t length, char* output, base64_options options = base64_default) const noexcept = 0; - + virtual size_t + binary_to_base64(const char *input, size_t length, char *output, + base64_options options = base64_default) const noexcept = 0; protected: - /** @private Construct an implementation with the given name and description. For subclasses. */ - simdutf_really_inline implementation( - const char* name, - const char* description, - uint32_t required_instruction_sets - ) : - _name(name), - _description(description), - _required_instruction_sets(required_instruction_sets) - { - } + /** @private Construct an implementation with the given name and description. + * For subclasses. */ + simdutf_really_inline implementation(const char *name, + const char *description, + uint32_t required_instruction_sets) + : _name(name), _description(description), + _required_instruction_sets(required_instruction_sets) {} + protected: ~implementation() = default; + private: /** * The name of this implementation. */ - const char* _name; + const char *_name; /** * The description of this implementation. */ - const char* _description; + const char *_description; /** * Instruction sets required for this implementation. @@ -3777,26 +4507,28 @@ class available_implementation_list { /** Number of implementations */ size_t size() const noexcept; /** STL const begin() iterator */ - const implementation * const *begin() const noexcept; + const implementation *const *begin() const noexcept; /** STL const end() iterator */ - const implementation * const *end() const noexcept; + const implementation *const *end() const noexcept; /** * Get the implementation with the given name. * * Case sensitive. * - * const implementation *impl = simdutf::available_implementations["westmere"]; - * if (!impl) { exit(1); } - * if (!imp->supported_by_runtime_system()) { exit(1); } + * const implementation *impl = + * simdutf::available_implementations["westmere"]; if (!impl) { exit(1); } if + * (!imp->supported_by_runtime_system()) { exit(1); } * simdutf::active_implementation = impl; * * @param name the implementation to find, e.g. "westmere", "haswell", "arm64" * @return the implementation, or nullptr if the parse failed. */ - const implementation * operator[](const std::string &name) const noexcept { - for (const implementation * impl : *this) { - if (impl->name() == name) { return impl; } + const implementation *operator[](const std::string &name) const noexcept { + for (const implementation *impl : *this) { + if (impl->name() == name) { + return impl; + } } return nullptr; } @@ -3806,48 +4538,54 @@ class available_implementation_list { * * This is used to initialize the implementation on startup. * - * const implementation *impl = simdutf::available_implementation::detect_best_supported(); + * const implementation *impl = + * simdutf::available_implementation::detect_best_supported(); * simdutf::active_implementation = impl; * - * @return the most advanced supported implementation for the current host, or an - * implementation that returns UNSUPPORTED_ARCHITECTURE if there is no supported - * implementation. Will never return nullptr. + * @return the most advanced supported implementation for the current host, or + * an implementation that returns UNSUPPORTED_ARCHITECTURE if there is no + * supported implementation. Will never return nullptr. */ const implementation *detect_best_supported() const noexcept; }; -template -class atomic_ptr { +template class atomic_ptr { public: atomic_ptr(T *_ptr) : ptr{_ptr} {} #if defined(SIMDUTF_NO_THREADS) - operator const T*() const { return ptr; } - const T& operator*() const { return *ptr; } - const T* operator->() const { return ptr; } - - operator T*() { return ptr; } - T& operator*() { return *ptr; } - T* operator->() { return ptr; } - atomic_ptr& operator=(T *_ptr) { ptr = _ptr; return *this; } + operator const T *() const { return ptr; } + const T &operator*() const { return *ptr; } + const T *operator->() const { return ptr; } + + operator T *() { return ptr; } + T &operator*() { return *ptr; } + T *operator->() { return ptr; } + atomic_ptr &operator=(T *_ptr) { + ptr = _ptr; + return *this; + } #else - operator const T*() const { return ptr.load(); } - const T& operator*() const { return *ptr; } - const T* operator->() const { return ptr.load(); } - - operator T*() { return ptr.load(); } - T& operator*() { return *ptr; } - T* operator->() { return ptr.load(); } - atomic_ptr& operator=(T *_ptr) { ptr = _ptr; return *this; } + operator const T *() const { return ptr.load(); } + const T &operator*() const { return *ptr; } + const T *operator->() const { return ptr.load(); } + + operator T *() { return ptr.load(); } + T &operator*() { return *ptr; } + T *operator->() { return ptr.load(); } + atomic_ptr &operator=(T *_ptr) { + ptr = _ptr; + return *this; + } #endif private: #if defined(SIMDUTF_NO_THREADS) - T* ptr; + T *ptr; #else - std::atomic ptr; + std::atomic ptr; #endif }; @@ -3858,27 +4596,28 @@ class detect_best_supported_implementation_on_first_use; /** * The list of available implementations compiled into simdutf. */ -extern SIMDUTF_DLLIMPORTEXPORT const internal::available_implementation_list& get_available_implementations(); +extern SIMDUTF_DLLIMPORTEXPORT const internal::available_implementation_list & +get_available_implementations(); /** - * The active implementation. - * - * Automatically initialized on first use to the most advanced implementation supported by this hardware. - */ -extern SIMDUTF_DLLIMPORTEXPORT internal::atomic_ptr& get_active_implementation(); - + * The active implementation. + * + * Automatically initialized on first use to the most advanced implementation + * supported by this hardware. + */ +extern SIMDUTF_DLLIMPORTEXPORT internal::atomic_ptr & +get_active_implementation(); } // namespace simdutf #endif // SIMDUTF_IMPLEMENTATION_H /* end file include/simdutf/implementation.h */ - -// Implementation-internal files (must be included before the implementations themselves, to keep -// amalgamation working--otherwise, the first time a file is included, it might be put inside the -// #ifdef SIMDUTF_IMPLEMENTATION_ARM64/FALLBACK/etc., which means the other implementations can't -// compile unless that implementation is turned on). - +// Implementation-internal files (must be included before the implementations +// themselves, to keep amalgamation working--otherwise, the first time a file is +// included, it might be put inside the #ifdef +// SIMDUTF_IMPLEMENTATION_ARM64/FALLBACK/etc., which means the other +// implementations can't compile unless that implementation is turned on). SIMDUTF_POP_DISABLE_WARNINGS From 22d77773fd5e8b6feba74b6c293c3d4887f14ecb Mon Sep 17 00:00:00 2001 From: Wei Zhu Date: Wed, 16 Oct 2024 05:32:07 +1030 Subject: [PATCH 31/93] esm: fix inconsistency with `importAssertion` in `resolve` hook As the documentation states, the `context.importAssertion` should be still supported and emit a warning. This is true for the `load` hook, but not correct for context of the `resolve` hook. This commit fixes the inconsistency. PR-URL: https://github.com/nodejs/node/pull/55365 Reviewed-By: Antoine du Hamel Reviewed-By: Matteo Collina --- lib/internal/modules/esm/hooks.js | 2 +- test/es-module/test-esm-import-assertion-warning.mjs | 9 +++++++-- test/fixtures/es-module-loaders/hooks-input.mjs | 4 +++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/internal/modules/esm/hooks.js b/lib/internal/modules/esm/hooks.js index 5984c707f16c4f..4571922ed5a0e9 100644 --- a/lib/internal/modules/esm/hooks.js +++ b/lib/internal/modules/esm/hooks.js @@ -237,7 +237,7 @@ class Hooks { const nextResolve = nextHookFactory(chain[chain.length - 1], meta, { validateArgs, validateOutput }); - const resolution = await nextResolve(originalSpecifier, context); + const resolution = await nextResolve(originalSpecifier, defineImportAssertionAlias(context)); const { hookErrIdentifier } = meta; // Retrieve the value after all settled validateOutput(hookErrIdentifier, resolution); diff --git a/test/es-module/test-esm-import-assertion-warning.mjs b/test/es-module/test-esm-import-assertion-warning.mjs index a11b5164cebffc..2f9b7348a2d97a 100644 --- a/test/es-module/test-esm-import-assertion-warning.mjs +++ b/test/es-module/test-esm-import-assertion-warning.mjs @@ -7,6 +7,11 @@ await Promise.all([ `data:text/javascript,export ${encodeURIComponent(function resolve() { return { shortCircuit: true, url: 'data:application/json,1', importAssertions: { type: 'json' } }; })}`, + // Using importAssertions on the context object of the resolve hook should warn but still work. + `data:text/javascript,export ${encodeURIComponent(function resolve(s, c, n) { + const type = c.importAssertions.type; + return { shortCircuit: true, url: 'data:application/json,1', importAttributes: { type: type ?? 'json' } }; + })}`, // Setting importAssertions on the context object of the load hook should warn but still work. `data:text/javascript,export ${encodeURIComponent(function load(u, c, n) { c.importAssertions = { type: 'json' }; @@ -22,9 +27,9 @@ await Promise.all([ '--eval', ` import assert from 'node:assert'; import { register } from 'node:module'; - + register(${JSON.stringify(loaderURL)}); - + assert.deepStrictEqual( { ...await import('data:') }, { default: 1 } diff --git a/test/fixtures/es-module-loaders/hooks-input.mjs b/test/fixtures/es-module-loaders/hooks-input.mjs index 1d3759f458224e..854b8e619281e4 100644 --- a/test/fixtures/es-module-loaders/hooks-input.mjs +++ b/test/fixtures/es-module-loaders/hooks-input.mjs @@ -37,6 +37,7 @@ export async function resolve(specifier, context, next) { 'conditions', 'importAttributes', 'parentURL', + 'importAssertions', ]); assert.ok(Array.isArray(context.conditions)); assert.strictEqual(typeof next, 'function'); @@ -71,9 +72,10 @@ export async function load(url, context, next) { assert.ok(new URL(url)); // Ensure `context` has all and only the properties it's supposed to - assert.deepStrictEqual(Object.keys(context), [ + assert.deepStrictEqual(Reflect.ownKeys(context), [ 'format', 'importAttributes', + 'importAssertions', ]); assert.strictEqual(context.format, 'test'); assert.strictEqual(typeof next, 'function'); From 69ee56aacd68a7e0c1940894d834cb5bd9450919 Mon Sep 17 00:00:00 2001 From: Erick Wendel Date: Tue, 15 Oct 2024 17:36:09 -0300 Subject: [PATCH 32/93] test_runner: add support for scheduler.wait on mock timers This adds support for nodetimers.promises.scheduler.wait on Mocktimers Refs: https://github.com/nodejs/node/pull/55244 PR-URL: https://github.com/nodejs/node/pull/55244 Reviewed-By: Benjamin Gruenbaum Reviewed-By: Chemi Atlow Reviewed-By: James M Snell Reviewed-By: Rafael Gonzaga --- lib/internal/test_runner/mock/mock_timers.js | 49 ++++++-- test/parallel/test-runner-mock-timers.js | 120 +++++++++++++++++++ 2 files changed, 157 insertions(+), 12 deletions(-) diff --git a/lib/internal/test_runner/mock/mock_timers.js b/lib/internal/test_runner/mock/mock_timers.js index ed3108f5539b09..935a419d83d0e4 100644 --- a/lib/internal/test_runner/mock/mock_timers.js +++ b/lib/internal/test_runner/mock/mock_timers.js @@ -64,9 +64,9 @@ function abortIt(signal) { } /** - * @enum {('setTimeout'|'setInterval'|'setImmediate'|'Date')[]} Supported timers + * @enum {('setTimeout'|'setInterval'|'setImmediate'|'Date', 'scheduler.wait')[]} Supported timers */ -const SUPPORTED_APIS = ['setTimeout', 'setInterval', 'setImmediate', 'Date']; +const SUPPORTED_APIS = ['setTimeout', 'setInterval', 'setImmediate', 'Date', 'scheduler.wait']; const TIMERS_DEFAULT_INTERVAL = { __proto__: null, setImmediate: -1, @@ -108,6 +108,7 @@ class MockTimers { #realPromisifiedSetTimeout; #realPromisifiedSetInterval; + #realTimersPromisifiedSchedulerWait; #realTimersSetTimeout; #realTimersClearTimeout; @@ -192,6 +193,13 @@ class MockTimers { ); } + #restoreOriginalSchedulerWait() { + nodeTimersPromises.scheduler.wait = FunctionPrototypeBind( + this.#realTimersPromisifiedSchedulerWait, + this, + ); + } + #restoreOriginalSetTimeout() { ObjectDefineProperty( globalThis, @@ -266,6 +274,14 @@ class MockTimers { ); } + #storeOriginalSchedulerWait() { + + this.#realTimersPromisifiedSchedulerWait = FunctionPrototypeBind( + nodeTimersPromises.scheduler.wait, + this, + ); + } + #storeOriginalSetTimeout() { this.#realSetTimeout = ObjectGetOwnPropertyDescriptor( globalThis, @@ -562,8 +578,14 @@ class MockTimers { const options = { __proto__: null, toFake: { - __proto__: null, - setTimeout: () => { + '__proto__': null, + 'scheduler.wait': () => { + this.#storeOriginalSchedulerWait(); + + nodeTimersPromises.scheduler.wait = (delay, options) => + this.#setTimeoutPromisified(delay, undefined, options); + }, + 'setTimeout': () => { this.#storeOriginalSetTimeout(); globalThis.setTimeout = this.#setTimeout; @@ -577,7 +599,7 @@ class MockTimers { this, ); }, - setInterval: () => { + 'setInterval': () => { this.#storeOriginalSetInterval(); globalThis.setInterval = this.#setInterval; @@ -591,7 +613,7 @@ class MockTimers { this, ); }, - setImmediate: () => { + 'setImmediate': () => { this.#storeOriginalSetImmediate(); // setImmediate functions needs to bind MockTimers @@ -615,23 +637,26 @@ class MockTimers { this, ); }, - Date: () => { + 'Date': () => { this.#nativeDateDescriptor = ObjectGetOwnPropertyDescriptor(globalThis, 'Date'); globalThis.Date = this.#createDate(); }, }, toReal: { - __proto__: null, - setTimeout: () => { + '__proto__': null, + 'scheduler.wait': () => { + this.#restoreOriginalSchedulerWait(); + }, + 'setTimeout': () => { this.#restoreOriginalSetTimeout(); }, - setInterval: () => { + 'setInterval': () => { this.#restoreOriginalSetInterval(); }, - setImmediate: () => { + 'setImmediate': () => { this.#restoreSetImmediate(); }, - Date: () => { + 'Date': () => { ObjectDefineProperty(globalThis, 'Date', this.#nativeDateDescriptor); }, }, diff --git a/test/parallel/test-runner-mock-timers.js b/test/parallel/test-runner-mock-timers.js index 9e1bc7e62cc5b2..e438b2636b832a 100644 --- a/test/parallel/test-runner-mock-timers.js +++ b/test/parallel/test-runner-mock-timers.js @@ -791,6 +791,126 @@ describe('Mock Timers Test Suite', () => { }); }); + describe('scheduler Suite', () => { + describe('scheduler.wait', () => { + it('should advance in time and trigger timers when calling the .tick function', (t) => { + t.mock.timers.enable({ apis: ['scheduler.wait'] }); + + const now = Date.now(); + const durationAtMost = 100; + + const p = nodeTimersPromises.scheduler.wait(4000); + t.mock.timers.tick(4000); + + return p.then(common.mustCall((result) => { + assert.strictEqual(result, undefined); + assert.ok( + Date.now() - now < durationAtMost, + `time should be advanced less than the ${durationAtMost}ms` + ); + })); + }); + + it('should advance in time and trigger timers when calling the .tick function multiple times', async (t) => { + t.mock.timers.enable({ apis: ['scheduler.wait'] }); + + const fn = t.mock.fn(); + + nodeTimersPromises.scheduler.wait(9999).then(fn); + + t.mock.timers.tick(8999); + assert.strictEqual(fn.mock.callCount(), 0); + t.mock.timers.tick(500); + + await nodeTimersPromises.setImmediate(); + + assert.strictEqual(fn.mock.callCount(), 0); + t.mock.timers.tick(500); + + await nodeTimersPromises.setImmediate(); + assert.strictEqual(fn.mock.callCount(), 1); + }); + + it('should work with the same params as the original timers/promises/scheduler.wait', async (t) => { + t.mock.timers.enable({ apis: ['scheduler.wait'] }); + const controller = new AbortController(); + const p = nodeTimersPromises.scheduler.wait(2000, { + ref: true, + signal: controller.signal, + }); + + t.mock.timers.tick(1000); + t.mock.timers.tick(500); + t.mock.timers.tick(500); + t.mock.timers.tick(500); + + const result = await p; + assert.strictEqual(result, undefined); + }); + + it('should abort operation if timers/promises/scheduler.wait received an aborted signal', async (t) => { + t.mock.timers.enable({ apis: ['scheduler.wait'] }); + const controller = new AbortController(); + const p = nodeTimersPromises.scheduler.wait(2000, { + ref: true, + signal: controller.signal, + }); + + t.mock.timers.tick(1000); + controller.abort(); + t.mock.timers.tick(500); + t.mock.timers.tick(500); + t.mock.timers.tick(500); + + await assert.rejects(() => p, { + name: 'AbortError', + }); + }); + it('should abort operation even if the .tick was not called', async (t) => { + t.mock.timers.enable({ apis: ['scheduler.wait'] }); + const controller = new AbortController(); + const p = nodeTimersPromises.scheduler.wait(2000, { + ref: true, + signal: controller.signal, + }); + + controller.abort(); + + await assert.rejects(() => p, { + name: 'AbortError', + }); + }); + + it('should abort operation when .abort is called before calling setInterval', async (t) => { + t.mock.timers.enable({ apis: ['scheduler.wait'] }); + const controller = new AbortController(); + controller.abort(); + const p = nodeTimersPromises.scheduler.wait(2000, { + ref: true, + signal: controller.signal, + }); + + await assert.rejects(() => p, { + name: 'AbortError', + }); + }); + + it('should reject given an an invalid signal instance', async (t) => { + t.mock.timers.enable({ apis: ['scheduler.wait'] }); + const p = nodeTimersPromises.scheduler.wait(2000, { + ref: true, + signal: {}, + }); + + await assert.rejects(() => p, { + name: 'TypeError', + code: 'ERR_INVALID_ARG_TYPE', + }); + }); + + }); + }); + describe('Date Suite', () => { it('should return the initial UNIX epoch if not specified', (t) => { t.mock.timers.enable({ apis: ['Date'] }); From e15f779794376164b362cd6be017417359a79950 Mon Sep 17 00:00:00 2001 From: Jan Martin Date: Mon, 30 Sep 2024 11:08:35 -0700 Subject: [PATCH 33/93] doc: spell out condition restrictions PR-URL: https://github.com/nodejs/node/pull/55187 Reviewed-By: Matteo Collina --- doc/api/packages.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/doc/api/packages.md b/doc/api/packages.md index e8ca611b379b3a..6c5f8e8cbea912 100644 --- a/doc/api/packages.md +++ b/doc/api/packages.md @@ -755,6 +755,20 @@ exports, while resolving the existing `"node"`, `"node-addons"`, `"default"`, Any number of custom conditions can be set with repeat flags. +Typical conditions should only contain alphanumerical characters, +using ":", "-", or "=" as separators if necessary. Anything else may run +into compability issues outside of node. + +In node, conditions have very few restrictions, but specifically these include: + +1. They must contain at least one character. +2. They cannot start with "." since they may appear in places that also + allow relative paths. +3. They cannot contain "," since they may be parsed as a comma-separated + list by some CLI tools. +4. They cannot be integer property keys like "10" since that can have + unexpected effects on property key ordering for JS objects. + ### Community Conditions Definitions Condition strings other than the `"import"`, `"require"`, `"node"`, `"module-sync"`, From 1da41684865c645811caf14a495ee69859ed0072 Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Thu, 17 Oct 2024 12:37:54 +0200 Subject: [PATCH 34/93] tools: add `polyfilled` option to `prefer-primordials` rule MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/55318 Reviewed-By: Michaël Zasso --- .../test-eslint-prefer-primordials.js | 16 ++++++++++++++ tools/eslint-rules/prefer-primordials.js | 22 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/test/parallel/test-eslint-prefer-primordials.js b/test/parallel/test-eslint-prefer-primordials.js index 61c84cbaddf520..b6633c08e56a92 100644 --- a/test/parallel/test-eslint-prefer-primordials.js +++ b/test/parallel/test-eslint-prefer-primordials.js @@ -177,6 +177,22 @@ new RuleTester({ options: [{ name: 'Symbol' }], errors: [{ message: /const { SymbolIterator } = primordials/ }] }, + { + code: ` + const { SymbolAsyncDispose } = primordials; + const a = { [SymbolAsyncDispose] () {} } + `, + options: [{ name: 'Symbol', polyfilled: ['asyncDispose', 'dispose'] }], + errors: [{ message: /const { SymbolAsyncDispose } = require\("internal\/util"\)/ }] + }, + { + code: ` + const { SymbolDispose } = primordials; + const a = { [SymbolDispose] () {} } + `, + options: [{ name: 'Symbol', polyfilled: ['asyncDispose', 'dispose'] }], + errors: [{ message: /const { SymbolDispose } = require\("internal\/util"\)/ }] + }, { code: ` const { ObjectDefineProperty, Symbol } = primordials; diff --git a/tools/eslint-rules/prefer-primordials.js b/tools/eslint-rules/prefer-primordials.js index 48b351b46ae270..4f109748716cd6 100644 --- a/tools/eslint-rules/prefer-primordials.js +++ b/tools/eslint-rules/prefer-primordials.js @@ -74,6 +74,7 @@ module.exports = { meta: { messages: { error: 'Use `const { {{name}} } = primordials;` instead of the global.', + errorPolyfill: 'Use `const { {{name}} } = require("internal/util");` instead of the primordial.', }, schema: { type: 'array', @@ -88,6 +89,10 @@ module.exports = { items: { type: 'string' }, }, into: { type: 'string' }, + polyfilled: { + type: 'array', + items: { type: 'string' }, + }, }, additionalProperties: false, }, @@ -99,6 +104,7 @@ module.exports = { const nameMap = new Map(); const renameMap = new Map(); + const polyfilledSet = new Set(); for (const option of context.options) { const names = option.ignore || []; @@ -109,6 +115,11 @@ module.exports = { if (option.into) { renameMap.set(option.name, option.into); } + if (option.polyfilled) { + for (const propertyName of option.polyfilled) { + polyfilledSet.add(`${option.name}${propertyName[0].toUpperCase()}${propertyName.slice(1)}`); + } + } } let reported; @@ -186,6 +197,17 @@ module.exports = { }, VariableDeclarator(node) { const name = node.init?.name; + if (name === 'primordials' && node.id.type === 'ObjectPattern') { + const name = node.id.properties.find(({ key }) => polyfilledSet.has(key.name))?.key.name; + if (name) { + context.report({ + node, + messageId: 'errorPolyfill', + data: { name }, + }); + return; + } + } if (name !== undefined && isTarget(nameMap, name) && node.id.type === 'Identifier' && !globalScope.set.get(name)?.defs.length) { From f48d30eb9fdfdac6d82551dae59ad8667a1b412a Mon Sep 17 00:00:00 2001 From: Mohammed Keyvanzadeh Date: Thu, 17 Oct 2024 16:35:02 +0330 Subject: [PATCH 35/93] build: fix path concatenation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - The `Path` class does not support concatenation with the `+` operator, so use the `/` operator instead. - When concatenating paths, if the operand is an absolute path the previous path is ignored, so change `/include` to `include`. PR-URL: https://github.com/nodejs/node/pull/55387 Reviewed-By: Yagiz Nizipli Reviewed-By: Michaël Zasso Reviewed-By: Richard Lau Reviewed-By: Luigi Pinca --- configure.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.py b/configure.py index 12faf7abaa8c96..a5f47af1748903 100755 --- a/configure.py +++ b/configure.py @@ -1356,7 +1356,7 @@ def configure_zos(o): o['variables']['node_static_zoslib'] = b(True) if options.static_zoslib_gyp: # Apply to all Node.js components for now - o['variables']['zoslib_include_dir'] = Path(options.static_zoslib_gyp).parent + '/include' + o['variables']['zoslib_include_dir'] = Path(options.static_zoslib_gyp).parent / 'include' o['include_dirs'] += [o['variables']['zoslib_include_dir']] else: raise Exception('--static-zoslib-gyp= is required.') From b4b6ddb7770baaca11b9b5dadfa095c642f77061 Mon Sep 17 00:00:00 2001 From: Luigi Pinca Date: Thu, 17 Oct 2024 15:18:28 +0200 Subject: [PATCH 36/93] dns: honor the order option Fixes: https://github.com/nodejs/node/issues/55391 PR-URL: https://github.com/nodejs/node/pull/55392 Reviewed-By: Matteo Collina Reviewed-By: Tim Perry Reviewed-By: Richard Lau Reviewed-By: Yagiz Nizipli Reviewed-By: Feng Yu Reviewed-By: Jake Yuesong Li --- lib/dns.js | 2 +- test/parallel/test-dns-default-order-verbatim.js | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/dns.js b/lib/dns.js index 219934f00d84cd..a2564b903b44da 100644 --- a/lib/dns.js +++ b/lib/dns.js @@ -193,7 +193,7 @@ function lookup(hostname, options, callback) { } if (options?.order != null) { validateOneOf(options.order, 'options.order', ['ipv4first', 'ipv6first', 'verbatim']); - dnsOrder = options.dnsOrder; + dnsOrder = options.order; } } diff --git a/test/parallel/test-dns-default-order-verbatim.js b/test/parallel/test-dns-default-order-verbatim.js index 0c45728782d20a..12b666191b9ef5 100644 --- a/test/parallel/test-dns-default-order-verbatim.js +++ b/test/parallel/test-dns-default-order-verbatim.js @@ -46,4 +46,14 @@ function allowFailed(fn) { await allowFailed(dnsPromises.lookup('example.org', {})); checkParameter(cares.DNS_ORDER_VERBATIM); + + await allowFailed( + promisify(dns.lookup)('example.org', { order: 'ipv4first' }) + ); + checkParameter(cares.DNS_ORDER_IPV4_FIRST); + + await allowFailed( + promisify(dns.lookup)('example.org', { order: 'ipv6first' }) + ); + checkParameter(cares.DNS_ORDER_IPV6_FIRST); })().then(common.mustCall()); From 9b7b4a6b25e11efd2f469599c26b4766bbd5a5d8 Mon Sep 17 00:00:00 2001 From: Luigi Pinca Date: Thu, 17 Oct 2024 15:43:02 +0200 Subject: [PATCH 37/93] test: remove duplicate tests `test/parallel/test-dns-default-verbatim-false.js` is a duplicate of `test/parallel/test-dns-default-order-ipv4.js` and `test/parallel/test-dns-default-verbatim-true.js` is a duplicate of `test/parallel/test-dns-default-order-verbatim.js`. PR-URL: https://github.com/nodejs/node/pull/55393 Reviewed-By: Yagiz Nizipli Reviewed-By: Richard Lau Reviewed-By: Marco Ippolito Reviewed-By: Jake Yuesong Li --- .../test-dns-default-verbatim-false.js | 51 ------------------- .../test-dns-default-verbatim-true.js | 51 ------------------- 2 files changed, 102 deletions(-) delete mode 100644 test/parallel/test-dns-default-verbatim-false.js delete mode 100644 test/parallel/test-dns-default-verbatim-true.js diff --git a/test/parallel/test-dns-default-verbatim-false.js b/test/parallel/test-dns-default-verbatim-false.js deleted file mode 100644 index 76f6ef0bcabd82..00000000000000 --- a/test/parallel/test-dns-default-verbatim-false.js +++ /dev/null @@ -1,51 +0,0 @@ -// Flags: --expose-internals --dns-result-order=ipv4first -'use strict'; -const common = require('../common'); -const assert = require('assert'); -const { internalBinding } = require('internal/test/binding'); -const cares = internalBinding('cares_wrap'); -const { promisify } = require('util'); - -// Test that --dns-result-order=ipv4first works as expected. - -const originalGetaddrinfo = cares.getaddrinfo; -const calls = []; -cares.getaddrinfo = common.mustCallAtLeast((...args) => { - calls.push(args); - originalGetaddrinfo(...args); -}, 1); - -const dns = require('dns'); -const dnsPromises = dns.promises; - -let verbatim; - -// We want to test the parameter of verbatim only so that we -// ignore possible errors here. -function allowFailed(fn) { - return fn.catch((_err) => { - // - }); -} - -(async () => { - let callsLength = 0; - const checkParameter = (expected) => { - assert.strictEqual(calls.length, callsLength + 1); - verbatim = calls[callsLength][4]; - assert.strictEqual(verbatim, expected); - callsLength += 1; - }; - - await allowFailed(promisify(dns.lookup)('example.org')); - checkParameter(cares.DNS_ORDER_IPV4_FIRST); - - await allowFailed(dnsPromises.lookup('example.org')); - checkParameter(cares.DNS_ORDER_IPV4_FIRST); - - await allowFailed(promisify(dns.lookup)('example.org', {})); - checkParameter(cares.DNS_ORDER_IPV4_FIRST); - - await allowFailed(dnsPromises.lookup('example.org', {})); - checkParameter(cares.DNS_ORDER_IPV4_FIRST); -})().then(common.mustCall()); diff --git a/test/parallel/test-dns-default-verbatim-true.js b/test/parallel/test-dns-default-verbatim-true.js deleted file mode 100644 index dfa0640f446412..00000000000000 --- a/test/parallel/test-dns-default-verbatim-true.js +++ /dev/null @@ -1,51 +0,0 @@ -// Flags: --expose-internals --dns-result-order=verbatim -'use strict'; -const common = require('../common'); -const assert = require('assert'); -const { internalBinding } = require('internal/test/binding'); -const cares = internalBinding('cares_wrap'); -const { promisify } = require('util'); - -// Test that --dns-result-order=verbatim works as expected. - -const originalGetaddrinfo = cares.getaddrinfo; -const calls = []; -cares.getaddrinfo = common.mustCallAtLeast((...args) => { - calls.push(args); - originalGetaddrinfo(...args); -}, 1); - -const dns = require('dns'); -const dnsPromises = dns.promises; - -let verbatim; - -// We want to test the parameter of verbatim only so that we -// ignore possible errors here. -function allowFailed(fn) { - return fn.catch((_err) => { - // - }); -} - -(async () => { - let callsLength = 0; - const checkParameter = (expected) => { - assert.strictEqual(calls.length, callsLength + 1); - verbatim = calls[callsLength][4]; - assert.strictEqual(verbatim, expected); - callsLength += 1; - }; - - await allowFailed(promisify(dns.lookup)('example.org')); - checkParameter(cares.DNS_ORDER_VERBATIM); - - await allowFailed(dnsPromises.lookup('example.org')); - checkParameter(cares.DNS_ORDER_VERBATIM); - - await allowFailed(promisify(dns.lookup)('example.org', {})); - checkParameter(cares.DNS_ORDER_VERBATIM); - - await allowFailed(dnsPromises.lookup('example.org', {})); - checkParameter(cares.DNS_ORDER_VERBATIM); -})().then(common.mustCall()); From db18aca47ac708ed2015535bfbf753e487c96244 Mon Sep 17 00:00:00 2001 From: theanarkh Date: Thu, 17 Oct 2024 23:11:41 +0800 Subject: [PATCH 38/93] lib: add flag to drop connection when running in cluster mode PR-URL: https://github.com/nodejs/node/pull/54927 Refs: https://github.com/nodejs/node/issues/54882 Reviewed-By: Matteo Collina --- doc/api/net.md | 17 +++++++++++++-- lib/internal/cluster/child.js | 4 +++- ...-net-server-drop-connections-in-cluster.js | 21 +++++++++++++++++++ 3 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 test/parallel/test-net-server-drop-connections-in-cluster.js diff --git a/doc/api/net.md b/doc/api/net.md index 9d7ad185549cb7..272705e80edea0 100644 --- a/doc/api/net.md +++ b/doc/api/net.md @@ -603,12 +603,25 @@ changes: * {integer} -Set this property to reject connections when the server's connection count gets -high. +When the number of connections reaches the `server.maxConnections` threshold: + +1. If the process is not running in cluster mode, Node.js will close the connection. + +2. If the process is running in cluster mode, Node.js will, by default, route the connection to another worker process. To close the connection instead, set \[`server.dropMaxConnection`]\[] to `true`. It is not recommended to use this option once a socket has been sent to a child with [`child_process.fork()`][]. +### `server.dropMaxConnection` + + + +* {boolean} + +Set this property to `true` to begin closing connections once the number of connections reaches the \[`server.maxConnections`]\[] threshold. This setting is only effective in cluster mode. + ### `server.ref()` -> Stability: 1 - Experimental +> Stability: 2 - Stable Mocking timers is a technique commonly used in software testing to simulate and control the behavior of timers, such as `setInterval` and `setTimeout`, diff --git a/lib/internal/test_runner/mock/mock_timers.js b/lib/internal/test_runner/mock/mock_timers.js index 935a419d83d0e4..66375c6688e038 100644 --- a/lib/internal/test_runner/mock/mock_timers.js +++ b/lib/internal/test_runner/mock/mock_timers.js @@ -27,9 +27,6 @@ const { validateStringArray, } = require('internal/validators'); -const { - emitExperimentalWarning, -} = require('internal/util'); const { AbortError, codes: { @@ -133,10 +130,6 @@ class MockTimers { #clearInterval = FunctionPrototypeBind(this.#clearTimer, this); #clearImmediate = FunctionPrototypeBind(this.#clearTimer, this); - constructor() { - emitExperimentalWarning('The MockTimers API'); - } - #restoreSetImmediate() { ObjectDefineProperty( globalThis, From 0be3a7505f83404353071f3aa9ad0fe478d3db69 Mon Sep 17 00:00:00 2001 From: Erick Wendel Date: Wed, 16 Oct 2024 10:22:36 -0300 Subject: [PATCH 43/93] doc: add changelog for mocktimers Signed-off-by: Erick Wendel PR-URL: https://github.com/nodejs/node/pull/55398 Reviewed-By: Colin Ihrig Reviewed-By: Marco Ippolito Reviewed-By: Matteo Collina Reviewed-By: Moshe Atlow Reviewed-By: Jake Yuesong Li Reviewed-By: Chemi Atlow --- doc/api/test.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/api/test.md b/doc/api/test.md index 1b6619c6575cf7..7b7dc4b2c64118 100644 --- a/doc/api/test.md +++ b/doc/api/test.md @@ -2222,6 +2222,10 @@ set to `true`. added: - v20.4.0 - v18.19.0 +changes: + - version: REPLACEME + pr-url: https://github.com/nodejs/node/pull/55398 + description: The Mock Timers is now stable. --> > Stability: 2 - Stable From 2967471f67107f8bfa7a05a4c542f0d9f3d2bf1d Mon Sep 17 00:00:00 2001 From: RafaelGSS Date: Tue, 15 Oct 2024 18:20:40 -0300 Subject: [PATCH 44/93] doc: move Beth Griggs keys to old gpg keys MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refs: https://github.com/nodejs/Release/issues/1042 PR-URL: https://github.com/nodejs/node/pull/55399 Refs: https://github.com/nodejs/Release/issues/1036 Reviewed-By: Antoine du Hamel Reviewed-By: Marco Ippolito Reviewed-By: Richard Lau Reviewed-By: Ulises Gascón Reviewed-By: Ruy Adorno Reviewed-By: Luigi Pinca --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index db5b5c221c83a5..f6852922deacc8 100644 --- a/README.md +++ b/README.md @@ -770,8 +770,6 @@ Primary GPG keys for Node.js Releasers (some Releasers sign with subkeys): * **Antoine du Hamel** <> `C0D6248439F1D5604AAFFB4021D900FFDB233756` -* **Beth Griggs** <> - `4ED778F539E3634C779C87C6D7062848A1AB005C` * **Bryan English** <> `141F07595B7B3FFE74309A937405533BE57C7D57` * **Danielle Adams** <> @@ -796,7 +794,6 @@ to sign releases): ```bash gpg --keyserver hkps://keys.openpgp.org --recv-keys C0D6248439F1D5604AAFFB4021D900FFDB233756 # Antoine du Hamel -gpg --keyserver hkps://keys.openpgp.org --recv-keys 4ED778F539E3634C779C87C6D7062848A1AB005C # Beth Griggs gpg --keyserver hkps://keys.openpgp.org --recv-keys 141F07595B7B3FFE74309A937405533BE57C7D57 # Bryan English gpg --keyserver hkps://keys.openpgp.org --recv-keys 74F12602B6F1C4E913FAA37AD3A89613643B6201 # Danielle Adams gpg --keyserver hkps://keys.openpgp.org --recv-keys DD792F5973C6DE52C432CBDAC77ABFA00DDBF2B7 # Juan José Arboleda @@ -815,6 +812,8 @@ verify a downloaded file. Other keys used to sign some previous releases +* **Beth Griggs** <> + `4ED778F539E3634C779C87C6D7062848A1AB005C` * **Chris Dickinson** <> `9554F04D7259F04124DE6B476D5A82AC7E37093B` * **Colin Ihrig** <> From 7d5bb097eb173f46b061730db83ea720f1733418 Mon Sep 17 00:00:00 2001 From: RafaelGSS Date: Tue, 15 Oct 2024 18:21:56 -0300 Subject: [PATCH 45/93] doc: move Bryan English key to old gpg keys MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refs: https://github.com/nodejs/Release/issues/1040 PR-URL: https://github.com/nodejs/node/pull/55399 Refs: https://github.com/nodejs/Release/issues/1036 Reviewed-By: Antoine du Hamel Reviewed-By: Marco Ippolito Reviewed-By: Richard Lau Reviewed-By: Ulises Gascón Reviewed-By: Ruy Adorno Reviewed-By: Luigi Pinca --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f6852922deacc8..58d51410bc0c8c 100644 --- a/README.md +++ b/README.md @@ -770,8 +770,6 @@ Primary GPG keys for Node.js Releasers (some Releasers sign with subkeys): * **Antoine du Hamel** <> `C0D6248439F1D5604AAFFB4021D900FFDB233756` -* **Bryan English** <> - `141F07595B7B3FFE74309A937405533BE57C7D57` * **Danielle Adams** <> `74F12602B6F1C4E913FAA37AD3A89613643B6201` * **Juan José Arboleda** <> @@ -794,7 +792,6 @@ to sign releases): ```bash gpg --keyserver hkps://keys.openpgp.org --recv-keys C0D6248439F1D5604AAFFB4021D900FFDB233756 # Antoine du Hamel -gpg --keyserver hkps://keys.openpgp.org --recv-keys 141F07595B7B3FFE74309A937405533BE57C7D57 # Bryan English gpg --keyserver hkps://keys.openpgp.org --recv-keys 74F12602B6F1C4E913FAA37AD3A89613643B6201 # Danielle Adams gpg --keyserver hkps://keys.openpgp.org --recv-keys DD792F5973C6DE52C432CBDAC77ABFA00DDBF2B7 # Juan José Arboleda gpg --keyserver hkps://keys.openpgp.org --recv-keys CC68F5A3106FF448322E48ED27F5E38D5B0A215F # Marco Ippolito @@ -814,6 +811,8 @@ verify a downloaded file. * **Beth Griggs** <> `4ED778F539E3634C779C87C6D7062848A1AB005C` +* **Bryan English** <> + `141F07595B7B3FFE74309A937405533BE57C7D57` * **Chris Dickinson** <> `9554F04D7259F04124DE6B476D5A82AC7E37093B` * **Colin Ihrig** <> From 1ec25e85738e97012dbb7a20db53aae50229d111 Mon Sep 17 00:00:00 2001 From: RafaelGSS Date: Tue, 15 Oct 2024 18:22:20 -0300 Subject: [PATCH 46/93] doc: move Danielle Adams key to old gpg keys MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refs: https://github.com/nodejs/Release/issues/1041 PR-URL: https://github.com/nodejs/node/pull/55399 Refs: https://github.com/nodejs/Release/issues/1036 Reviewed-By: Antoine du Hamel Reviewed-By: Marco Ippolito Reviewed-By: Richard Lau Reviewed-By: Ulises Gascón Reviewed-By: Ruy Adorno Reviewed-By: Luigi Pinca --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 58d51410bc0c8c..b60e3c5df619a4 100644 --- a/README.md +++ b/README.md @@ -770,8 +770,6 @@ Primary GPG keys for Node.js Releasers (some Releasers sign with subkeys): * **Antoine du Hamel** <> `C0D6248439F1D5604AAFFB4021D900FFDB233756` -* **Danielle Adams** <> - `74F12602B6F1C4E913FAA37AD3A89613643B6201` * **Juan José Arboleda** <> `DD792F5973C6DE52C432CBDAC77ABFA00DDBF2B7` * **Marco Ippolito** <> @@ -792,7 +790,6 @@ to sign releases): ```bash gpg --keyserver hkps://keys.openpgp.org --recv-keys C0D6248439F1D5604AAFFB4021D900FFDB233756 # Antoine du Hamel -gpg --keyserver hkps://keys.openpgp.org --recv-keys 74F12602B6F1C4E913FAA37AD3A89613643B6201 # Danielle Adams gpg --keyserver hkps://keys.openpgp.org --recv-keys DD792F5973C6DE52C432CBDAC77ABFA00DDBF2B7 # Juan José Arboleda gpg --keyserver hkps://keys.openpgp.org --recv-keys CC68F5A3106FF448322E48ED27F5E38D5B0A215F # Marco Ippolito gpg --keyserver hkps://keys.openpgp.org --recv-keys 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 # Michaël Zasso @@ -819,6 +816,7 @@ verify a downloaded file. `94AE36675C464D64BAFA68DD7434390BDBE9B9C5` * **Danielle Adams** <> `1C050899334244A8AF75E53792EF661D867B9DFA` + `74F12602B6F1C4E913FAA37AD3A89613643B6201` * **Evan Lucas** <> `B9AE9905FFD7803F25714661B63B535A4C206CA9` * **Gibson Fahnestock** <> From dd5a08d02257f9bdf0eddcfd0656d78bf949017c Mon Sep 17 00:00:00 2001 From: Aviv Keller Date: Fri, 18 Oct 2024 02:25:48 -0400 Subject: [PATCH 47/93] test: update `console` wpt PR-URL: https://github.com/nodejs/node/pull/55192 Reviewed-By: Luigi Pinca Reviewed-By: Matteo Collina Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater Reviewed-By: Ethan Arrowood --- test/fixtures/wpt/README.md | 2 +- .../wpt/console/console-countReset-logging-manual.html | 6 +++++- .../wpt/console/console-log-large-array.any.js | 8 ++++++++ test/fixtures/wpt/console/console-log-symbol.any.js | 10 ++++++++++ test/fixtures/wpt/versions.json | 2 +- 5 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 test/fixtures/wpt/console/console-log-large-array.any.js create mode 100644 test/fixtures/wpt/console/console-log-symbol.any.js diff --git a/test/fixtures/wpt/README.md b/test/fixtures/wpt/README.md index fe5486edb75474..70075e77097cc1 100644 --- a/test/fixtures/wpt/README.md +++ b/test/fixtures/wpt/README.md @@ -12,7 +12,7 @@ Last update: - common: https://github.com/web-platform-tests/wpt/tree/dbd648158d/common - compression: https://github.com/web-platform-tests/wpt/tree/da8d6860b2/compression -- console: https://github.com/web-platform-tests/wpt/tree/767ae35464/console +- console: https://github.com/web-platform-tests/wpt/tree/e48251b778/console - dom/abort: https://github.com/web-platform-tests/wpt/tree/0143fe244b/dom/abort - dom/events: https://github.com/web-platform-tests/wpt/tree/0a811c5161/dom/events - encoding: https://github.com/web-platform-tests/wpt/tree/1ac8deee08/encoding diff --git a/test/fixtures/wpt/console/console-countReset-logging-manual.html b/test/fixtures/wpt/console/console-countReset-logging-manual.html index 7fe01f50edbfa1..f0a9358fba5d74 100644 --- a/test/fixtures/wpt/console/console-countReset-logging-manual.html +++ b/test/fixtures/wpt/console/console-countReset-logging-manual.html @@ -24,21 +24,25 @@ console.count(); console.countReset(); console.count(); +console.countReset(); console.count(undefined); console.countReset(undefined); console.count(undefined); +console.countReset(undefined); console.count("default"); console.countReset("default"); console.count("default"); +console.countReset("default"); console.count({toString() {return "default"}}); console.countReset({toString() {return "default"}}); console.count({toString() {return "default"}}); +console.countReset({toString() {return "default"}}); console.count("a label"); -console.countReset(); +console.countReset("a label"); console.count("a label"); console.countReset("b"); // should produce a warning diff --git a/test/fixtures/wpt/console/console-log-large-array.any.js b/test/fixtures/wpt/console/console-log-large-array.any.js new file mode 100644 index 00000000000000..e5cb92d9d36d4a --- /dev/null +++ b/test/fixtures/wpt/console/console-log-large-array.any.js @@ -0,0 +1,8 @@ +// META: global=window,dedicatedworker,shadowrealm +"use strict"; +// https://console.spec.whatwg.org/ + +test(() => { + console.log(new Array(10000000).fill("x")); + console.log(new Uint8Array(10000000)); +}, "Logging large arrays works"); diff --git a/test/fixtures/wpt/console/console-log-symbol.any.js b/test/fixtures/wpt/console/console-log-symbol.any.js new file mode 100644 index 00000000000000..a2facb6c64e864 --- /dev/null +++ b/test/fixtures/wpt/console/console-log-symbol.any.js @@ -0,0 +1,10 @@ +// META: global=window,dedicatedworker,shadowrealm +"use strict"; +// https://console.spec.whatwg.org/ + +test(() => { + console.log(Symbol()); + console.log(Symbol("abc")); + console.log(Symbol.for("def")); + console.log(Symbol.isConcatSpreadable); +}, "Logging a symbol doesn't throw"); diff --git a/test/fixtures/wpt/versions.json b/test/fixtures/wpt/versions.json index bc907734cdb7c9..2821834ba60b33 100644 --- a/test/fixtures/wpt/versions.json +++ b/test/fixtures/wpt/versions.json @@ -8,7 +8,7 @@ "path": "compression" }, "console": { - "commit": "767ae354642bee1e4d90b28df4480475b9260e14", + "commit": "e48251b77834f9689e9df3f49b93b3387dee72d6", "path": "console" }, "dom/abort": { From d9494a7641ab5d5565d63de87b775665d5012670 Mon Sep 17 00:00:00 2001 From: jazelly Date: Mon, 7 Oct 2024 10:25:31 +1030 Subject: [PATCH 48/93] fs: use `wstring` on Windows paths Co-authored-by: Antoine du Hamel PR-URL: https://github.com/nodejs/node/pull/55171 Reviewed-By: Rafael Gonzaga --- src/node_file.cc | 115 +++++++++++++++++++++++------------ test/parallel/test-fs-cp.mjs | 2 +- 2 files changed, 76 insertions(+), 41 deletions(-) diff --git a/src/node_file.cc b/src/node_file.cc index c69e0e0ea290ed..dfdc25fd1d8986 100644 --- a/src/node_file.cc +++ b/src/node_file.cc @@ -3127,6 +3127,55 @@ static void GetFormatOfExtensionlessFile( return args.GetReturnValue().Set(EXTENSIONLESS_FORMAT_JAVASCRIPT); } +#ifdef _WIN32 +std::wstring ConvertToWideString(const std::string& str) { + int size_needed = MultiByteToWideChar( + CP_UTF8, 0, &str[0], static_cast(str.size()), nullptr, 0); + std::wstring wstrTo(size_needed, 0); + MultiByteToWideChar(CP_UTF8, + 0, + &str[0], + static_cast(str.size()), + &wstrTo[0], + size_needed); + return wstrTo; +} + +#define BufferValueToPath(str) \ + std::filesystem::path(ConvertToWideString(str.ToString())) + +std::string ConvertWideToUTF8(const std::wstring& wstr) { + if (wstr.empty()) return std::string(); + + int size_needed = WideCharToMultiByte(CP_UTF8, + 0, + &wstr[0], + static_cast(wstr.size()), + nullptr, + 0, + nullptr, + nullptr); + std::string strTo(size_needed, 0); + WideCharToMultiByte(CP_UTF8, + 0, + &wstr[0], + static_cast(wstr.size()), + &strTo[0], + size_needed, + nullptr, + nullptr); + return strTo; +} + +#define PathToString(path) ConvertWideToUTF8(path.wstring()); + +#else // _WIN32 + +#define BufferValueToPath(str) std::filesystem::path(str.ToStringView()); +#define PathToString(path) path.native(); + +#endif // _WIN32 + static void CpSyncCheckPaths(const FunctionCallbackInfo& args) { Environment* env = Environment::GetCurrent(args); Isolate* isolate = env->isolate(); @@ -3139,7 +3188,7 @@ static void CpSyncCheckPaths(const FunctionCallbackInfo& args) { THROW_IF_INSUFFICIENT_PERMISSIONS( env, permission::PermissionScope::kFileSystemRead, src.ToStringView()); - auto src_path = std::filesystem::path(src.ToU8StringView()); + auto src_path = BufferValueToPath(src); BufferValue dest(isolate, args[1]); CHECK_NOT_NULL(*dest); @@ -3147,7 +3196,7 @@ static void CpSyncCheckPaths(const FunctionCallbackInfo& args) { THROW_IF_INSUFFICIENT_PERMISSIONS( env, permission::PermissionScope::kFileSystemWrite, dest.ToStringView()); - auto dest_path = std::filesystem::path(dest.ToU8StringView()); + auto dest_path = BufferValueToPath(dest); bool dereference = args[2]->IsTrue(); bool recursive = args[3]->IsTrue(); @@ -3176,47 +3225,41 @@ static void CpSyncCheckPaths(const FunctionCallbackInfo& args) { (src_status.type() == std::filesystem::file_type::directory) || (dereference && src_status.type() == std::filesystem::file_type::symlink); + auto src_path_str = PathToString(src_path); + auto dest_path_str = PathToString(dest_path); + if (!error_code) { // Check if src and dest are identical. if (std::filesystem::equivalent(src_path, dest_path)) { - std::u8string message = - u8"src and dest cannot be the same " + dest_path.u8string(); - return THROW_ERR_FS_CP_EINVAL( - env, reinterpret_cast(message.c_str())); + std::string message = "src and dest cannot be the same %s"; + return THROW_ERR_FS_CP_EINVAL(env, message.c_str(), dest_path_str); } const bool dest_is_dir = dest_status.type() == std::filesystem::file_type::directory; - if (src_is_dir && !dest_is_dir) { - std::u8string message = u8"Cannot overwrite non-directory " + - src_path.u8string() + u8" with directory " + - dest_path.u8string(); + std::string message = + "Cannot overwrite non-directory %s with directory %s"; return THROW_ERR_FS_CP_DIR_TO_NON_DIR( - env, reinterpret_cast(message.c_str())); + env, message.c_str(), src_path_str, dest_path_str); } if (!src_is_dir && dest_is_dir) { - std::u8string message = u8"Cannot overwrite directory " + - dest_path.u8string() + u8" with non-directory " + - src_path.u8string(); + std::string message = + "Cannot overwrite directory %s with non-directory %s"; return THROW_ERR_FS_CP_NON_DIR_TO_DIR( - env, reinterpret_cast(message.c_str())); + env, message.c_str(), dest_path_str, src_path_str); } } - std::u8string dest_path_str = dest_path.u8string(); - std::u8string src_path_str = src_path.u8string(); if (!src_path_str.ends_with(std::filesystem::path::preferred_separator)) { src_path_str += std::filesystem::path::preferred_separator; } // Check if dest_path is a subdirectory of src_path. if (src_is_dir && dest_path_str.starts_with(src_path_str)) { - std::u8string message = u8"Cannot copy " + src_path.u8string() + - u8" to a subdirectory of self " + - dest_path.u8string(); + std::string message = "Cannot copy %s to a subdirectory of self %s"; return THROW_ERR_FS_CP_EINVAL( - env, reinterpret_cast(message.c_str())); + env, message.c_str(), src_path_str, dest_path_str); } auto dest_parent = dest_path.parent_path(); @@ -3227,11 +3270,9 @@ static void CpSyncCheckPaths(const FunctionCallbackInfo& args) { dest_parent.parent_path() != dest_parent) { if (std::filesystem::equivalent( src_path, dest_path.parent_path(), error_code)) { - std::u8string message = u8"Cannot copy " + src_path.u8string() + - u8" to a subdirectory of self " + - dest_path.u8string(); + std::string message = "Cannot copy %s to a subdirectory of self %s"; return THROW_ERR_FS_CP_EINVAL( - env, reinterpret_cast(message.c_str())); + env, message.c_str(), src_path_str, dest_path_str); } // If equivalent fails, it's highly likely that dest_parent does not exist @@ -3243,29 +3284,23 @@ static void CpSyncCheckPaths(const FunctionCallbackInfo& args) { } if (src_is_dir && !recursive) { - std::u8string message = - u8"Recursive option not enabled, cannot copy a directory: " + - src_path.u8string(); - return THROW_ERR_FS_EISDIR(env, - reinterpret_cast(message.c_str())); + std::string message = + "Recursive option not enabled, cannot copy a directory: %s"; + return THROW_ERR_FS_EISDIR(env, message.c_str(), src_path_str); } switch (src_status.type()) { case std::filesystem::file_type::socket: { - std::u8string message = u8"Cannot copy a socket file: " + dest_path_str; - return THROW_ERR_FS_CP_SOCKET( - env, reinterpret_cast(message.c_str())); + std::string message = "Cannot copy a socket file: %s"; + return THROW_ERR_FS_CP_SOCKET(env, message.c_str(), dest_path_str); } case std::filesystem::file_type::fifo: { - std::u8string message = u8"Cannot copy a FIFO pipe: " + dest_path_str; - return THROW_ERR_FS_CP_FIFO_PIPE( - env, reinterpret_cast(message.c_str())); + std::string message = "Cannot copy a FIFO pipe: %s"; + return THROW_ERR_FS_CP_FIFO_PIPE(env, message.c_str(), dest_path_str); } case std::filesystem::file_type::unknown: { - std::u8string message = - u8"Cannot copy an unknown file type: " + dest_path_str; - return THROW_ERR_FS_CP_UNKNOWN( - env, reinterpret_cast(message.c_str())); + std::string message = "Cannot copy an unknown file type: %s"; + return THROW_ERR_FS_CP_UNKNOWN(env, message.c_str(), dest_path_str); } default: break; diff --git a/test/parallel/test-fs-cp.mjs b/test/parallel/test-fs-cp.mjs index d34160aa5ace37..0f3274ada62975 100644 --- a/test/parallel/test-fs-cp.mjs +++ b/test/parallel/test-fs-cp.mjs @@ -25,7 +25,7 @@ tmpdir.refresh(); let dirc = 0; function nextdir(dirname) { - return tmpdir.resolve(dirname || `copy_${++dirc}`); + return tmpdir.resolve(dirname || `copy_%${++dirc}`); } // Synchronous implementation of copy. From 7b3e38b855df917999ef84e10eca557c4e567d7b Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Fri, 18 Oct 2024 09:20:43 +0200 Subject: [PATCH 49/93] url: handle "unsafe" characters properly in `pathToFileURL` Co-authored-by: EarlyRiser42 PR-URL: https://github.com/nodejs/node/pull/54545 Fixes: https://github.com/nodejs/node/issues/54515 Reviewed-By: Benjamin Gruenbaum Reviewed-By: James M Snell Reviewed-By: Matteo Collina --- lib/internal/process/execution.js | 2 +- lib/internal/url.js | 94 +++++++++++++++---------- test/parallel/test-url-pathtofileurl.js | 13 ++-- 3 files changed, 67 insertions(+), 42 deletions(-) diff --git a/lib/internal/process/execution.js b/lib/internal/process/execution.js index 7834ce9aa74e8c..68b267b61c39b1 100644 --- a/lib/internal/process/execution.js +++ b/lib/internal/process/execution.js @@ -49,7 +49,7 @@ function tryGetCwd() { let evalIndex = 0; function getEvalModuleUrl() { - return pathToFileURL(`${process.cwd()}/[eval${++evalIndex}]`).href; + return `${pathToFileURL(process.cwd())}/[eval${++evalIndex}]`; } /** diff --git a/lib/internal/url.js b/lib/internal/url.js index b62766b02987d1..b05b75ac1c809c 100644 --- a/lib/internal/url.js +++ b/lib/internal/url.js @@ -1498,44 +1498,75 @@ function fileURLToPath(path, options = kEmptyObject) { return (windows ?? isWindows) ? getPathFromURLWin32(path) : getPathFromURLPosix(path); } -// The following characters are percent-encoded when converting from file path -// to URL: -// - %: The percent character is the only character not encoded by the -// `pathname` setter. -// - \: Backslash is encoded on non-windows platforms since it's a valid -// character but the `pathname` setters replaces it by a forward slash. -// - LF: The newline character is stripped out by the `pathname` setter. -// (See whatwg/url#419) -// - CR: The carriage return character is also stripped out by the `pathname` -// setter. -// - TAB: The tab character is also stripped out by the `pathname` setter. +// RFC1738 defines the following chars as "unsafe" for URLs +// @see https://www.ietf.org/rfc/rfc1738.txt 2.2. URL Character Encoding Issues const percentRegEx = /%/g; -const backslashRegEx = /\\/g; const newlineRegEx = /\n/g; const carriageReturnRegEx = /\r/g; const tabRegEx = /\t/g; -const questionRegex = /\?/g; +const quoteRegEx = /"/g; const hashRegex = /#/g; +const spaceRegEx = / /g; +const questionMarkRegex = /\?/g; +const openSquareBracketRegEx = /\[/g; +const backslashRegEx = /\\/g; +const closeSquareBracketRegEx = /]/g; +const caretRegEx = /\^/g; +const verticalBarRegEx = /\|/g; +const tildeRegEx = /~/g; function encodePathChars(filepath, options = kEmptyObject) { - const windows = options?.windows; - if (StringPrototypeIndexOf(filepath, '%') !== -1) + if (StringPrototypeIncludes(filepath, '%')) { filepath = RegExpPrototypeSymbolReplace(percentRegEx, filepath, '%25'); - // In posix, backslash is a valid character in paths: - if (!(windows ?? isWindows) && StringPrototypeIndexOf(filepath, '\\') !== -1) - filepath = RegExpPrototypeSymbolReplace(backslashRegEx, filepath, '%5C'); - if (StringPrototypeIndexOf(filepath, '\n') !== -1) + } + + if (StringPrototypeIncludes(filepath, '\t')) { + filepath = RegExpPrototypeSymbolReplace(tabRegEx, filepath, '%09'); + } + if (StringPrototypeIncludes(filepath, '\n')) { filepath = RegExpPrototypeSymbolReplace(newlineRegEx, filepath, '%0A'); - if (StringPrototypeIndexOf(filepath, '\r') !== -1) + } + if (StringPrototypeIncludes(filepath, '\r')) { filepath = RegExpPrototypeSymbolReplace(carriageReturnRegEx, filepath, '%0D'); - if (StringPrototypeIndexOf(filepath, '\t') !== -1) - filepath = RegExpPrototypeSymbolReplace(tabRegEx, filepath, '%09'); + } + if (StringPrototypeIncludes(filepath, ' ')) { + filepath = RegExpPrototypeSymbolReplace(spaceRegEx, filepath, '%20'); + } + if (StringPrototypeIncludes(filepath, '"')) { + filepath = RegExpPrototypeSymbolReplace(quoteRegEx, filepath, '%22'); + } + if (StringPrototypeIncludes(filepath, '#')) { + filepath = RegExpPrototypeSymbolReplace(hashRegex, filepath, '%23'); + } + if (StringPrototypeIncludes(filepath, '?')) { + filepath = RegExpPrototypeSymbolReplace(questionMarkRegex, filepath, '%3F'); + } + if (StringPrototypeIncludes(filepath, '[')) { + filepath = RegExpPrototypeSymbolReplace(openSquareBracketRegEx, filepath, '%5B'); + } + // Back-slashes must be special-cased on Windows, where they are treated as path separator. + if (!options.windows && StringPrototypeIncludes(filepath, '\\')) { + filepath = RegExpPrototypeSymbolReplace(backslashRegEx, filepath, '%5C'); + } + if (StringPrototypeIncludes(filepath, ']')) { + filepath = RegExpPrototypeSymbolReplace(closeSquareBracketRegEx, filepath, '%5D'); + } + if (StringPrototypeIncludes(filepath, '^')) { + filepath = RegExpPrototypeSymbolReplace(caretRegEx, filepath, '%5E'); + } + if (StringPrototypeIncludes(filepath, '|')) { + filepath = RegExpPrototypeSymbolReplace(verticalBarRegEx, filepath, '%7C'); + } + if (StringPrototypeIncludes(filepath, '~')) { + filepath = RegExpPrototypeSymbolReplace(tildeRegEx, filepath, '%7E'); + } + return filepath; } function pathToFileURL(filepath, options = kEmptyObject) { - const windows = options?.windows; - if ((windows ?? isWindows) && StringPrototypeStartsWith(filepath, '\\\\')) { + const windows = options?.windows ?? isWindows; + if (windows && StringPrototypeStartsWith(filepath, '\\\\')) { const outURL = new URL('file://'); // UNC path format: \\server\share\resource // Handle extended UNC path and standard UNC path @@ -1566,20 +1597,9 @@ function pathToFileURL(filepath, options = kEmptyObject) { ); return outURL; } - let resolved = (windows ?? isWindows) ? path.win32.resolve(filepath) : path.posix.resolve(filepath); - - // Call encodePathChars first to avoid encoding % again for ? and #. - resolved = encodePathChars(resolved, { windows }); + const resolved = windows ? path.win32.resolve(filepath) : path.posix.resolve(filepath); - // Question and hash character should be included in pathname. - // Therefore, encoding is required to eliminate parsing them in different states. - // This is done as an optimization to not creating a URL instance and - // later triggering pathname setter, which impacts performance - if (StringPrototypeIndexOf(resolved, '?') !== -1) - resolved = RegExpPrototypeSymbolReplace(questionRegex, resolved, '%3F'); - if (StringPrototypeIndexOf(resolved, '#') !== -1) - resolved = RegExpPrototypeSymbolReplace(hashRegex, resolved, '%23'); - return new URL(`file://${resolved}`); + return new URL(`file://${encodePathChars(resolved, { windows })}`); } function toPathIfFileURL(fileURLOrPath) { diff --git a/test/parallel/test-url-pathtofileurl.js b/test/parallel/test-url-pathtofileurl.js index 20609eb0ff5c9f..9c506e353f49e5 100644 --- a/test/parallel/test-url-pathtofileurl.js +++ b/test/parallel/test-url-pathtofileurl.js @@ -13,10 +13,7 @@ const url = require('url'); { const fileURL = url.pathToFileURL('test\\').href; assert.ok(fileURL.startsWith('file:///')); - if (isWindows) - assert.ok(fileURL.endsWith('/')); - else - assert.ok(fileURL.endsWith('%5C')); + assert.match(fileURL, isWindows ? /\/$/ : /%5C$/); } { @@ -104,6 +101,12 @@ const windowsTestCases = [ { path: 'C:\\€', expected: 'file:///C:/%E2%82%AC' }, // Rocket emoji (non-BMP code point) { path: 'C:\\🚀', expected: 'file:///C:/%F0%9F%9A%80' }, + // caret + { path: 'C:\\foo^bar', expected: 'file:///C:/foo%5Ebar' }, + // left bracket + { path: 'C:\\foo[bar', expected: 'file:///C:/foo%5Bbar' }, + // right bracket + { path: 'C:\\foo]bar', expected: 'file:///C:/foo%5Dbar' }, // Local extended path { path: '\\\\?\\C:\\path\\to\\file.txt', expected: 'file:///C:/path/to/file.txt' }, // UNC path (see https://docs.microsoft.com/en-us/archive/blogs/ie/file-uris-in-windows) @@ -154,6 +157,8 @@ const posixTestCases = [ { path: '/€', expected: 'file:///%E2%82%AC' }, // Rocket emoji (non-BMP code point) { path: '/🚀', expected: 'file:///%F0%9F%9A%80' }, + // "unsafe" chars + { path: '/foo\r\n\t<>"#%{}|^[\\~]`?bar', expected: 'file:///foo%0D%0A%09%3C%3E%22%23%25%7B%7D%7C%5E%5B%5C%7E%5D%60%3Fbar' }, ]; for (const { path, expected } of windowsTestCases) { From aca03d90839597ec6a2be8929004d38a8a2cbb4d Mon Sep 17 00:00:00 2001 From: Rafael Gonzaga Date: Fri, 18 Oct 2024 12:33:58 -0300 Subject: [PATCH 50/93] benchmark: add --runs support to run.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/55158 Reviewed-By: Vinícius Lourenço Claro Cardoso --- benchmark/run.js | 83 +++++++++++-------- .../writing-and-running-benchmarks.md | 10 +++ 2 files changed, 57 insertions(+), 36 deletions(-) diff --git a/benchmark/run.js b/benchmark/run.js index 6a61df71221710..ea0dc415e91ec6 100644 --- a/benchmark/run.js +++ b/benchmark/run.js @@ -12,6 +12,8 @@ const cli = new CLI(`usage: ./node run.js [options] [--] ... (can be repeated) --exclude pattern excludes scripts matching (can be repeated) + --runs variable=value set the amount of benchmark suite execution. + Default: 1 --set variable=value set benchmark variable (can be repeated) --format [simple|csv] optional value that specifies the output format test only run a single configuration from the options @@ -45,8 +47,7 @@ if (format === 'csv') { console.log('"filename", "configuration", "rate", "time"'); } -(function recursive(i) { - const filename = benchmarks[i]; +function runBenchmark(filename) { const scriptPath = path.resolve(__dirname, filename); const args = cli.test ? ['--test'] : cli.optional.set; @@ -63,42 +64,52 @@ if (format === 'csv') { ); } - if (format !== 'csv') { - console.log(); - console.log(filename); - } - - child.on('message', (data) => { - if (data.type !== 'report') { - return; - } - // Construct configuration string, " A=a, B=b, ..." - let conf = ''; - for (const key of Object.keys(data.conf)) { - if (conf !== '') - conf += ' '; - conf += `${key}=${JSON.stringify(data.conf[key])}`; - } - if (format === 'csv') { - // Escape quotes (") for correct csv formatting - conf = conf.replace(/"/g, '""'); - console.log(`"${data.name}", "${conf}", ${data.rate}, ${data.time}`); - } else { - let rate = data.rate.toString().split('.'); - rate[0] = rate[0].replace(/(\d)(?=(?:\d\d\d)+(?!\d))/g, '$1,'); - rate = (rate[1] ? rate.join('.') : rate[0]); - console.log(`${data.name} ${conf}: ${rate}`); - } + return new Promise((resolve, reject) => { + child.on('message', (data) => { + if (data.type !== 'report') { + return; + } + // Construct configuration string, " A=a, B=b, ..." + let conf = ''; + for (const key of Object.keys(data.conf)) { + if (conf !== '') + conf += ' '; + conf += `${key}=${JSON.stringify(data.conf[key])}`; + } + if (format === 'csv') { + // Escape quotes (") for correct csv formatting + conf = conf.replace(/"/g, '""'); + console.log(`"${data.name}", "${conf}", ${data.rate}, ${data.time}`); + } else { + let rate = data.rate.toString().split('.'); + rate[0] = rate[0].replace(/(\d)(?=(?:\d\d\d)+(?!\d))/g, '$1,'); + rate = (rate[1] ? rate.join('.') : rate[0]); + console.log(`${data.name} ${conf}: ${rate}`); + } + }); + child.once('close', (code) => { + if (code) { + reject(code); + } else { + resolve(code); + } + }); }); +} - child.once('close', (code) => { - if (code) { - process.exit(code); +async function run() { + for (let i = 0; i < benchmarks.length; ++i) { + let runs = cli.optional.runs ?? 1; + const filename = benchmarks[i]; + if (format !== 'csv') { + console.log(); + console.log(filename); } - // If there are more benchmarks execute the next - if (i + 1 < benchmarks.length) { - recursive(i + 1); + while (runs-- > 0) { + await runBenchmark(filename); } - }); -})(0); + } +} + +run(); diff --git a/doc/contributing/writing-and-running-benchmarks.md b/doc/contributing/writing-and-running-benchmarks.md index c258280ce9572b..3d16c7d14fc033 100644 --- a/doc/contributing/writing-and-running-benchmarks.md +++ b/doc/contributing/writing-and-running-benchmarks.md @@ -174,6 +174,16 @@ It is possible to execute more groups by adding extra process arguments. node benchmark/run.js assert async_hooks ``` +It's also possible to execute the benchmark more than once using the +`--runs` flag. + +```bash +node benchmark/run.js --runs 10 assert async_hooks +``` + +This command will run the benchmark files in `benchmark/assert` and `benchmark/async_hooks` +10 times each. + #### Specifying CPU Cores for Benchmarks with run.js When using `run.js` to execute a group of benchmarks, From 89c96ade532921fada1fe403bb1251d4f6997841 Mon Sep 17 00:00:00 2001 From: Yagiz Nizipli Date: Fri, 18 Oct 2024 12:47:50 -0400 Subject: [PATCH 51/93] src: remove icu based `ToASCII` and `ToUnicode` PR-URL: https://github.com/nodejs/node/pull/55156 Reviewed-By: James M Snell Reviewed-By: Matthew Aitken Reviewed-By: Daniel Lemire Reviewed-By: Richard Lau --- src/node_i18n.cc | 172 +----------------------- src/node_i18n.h | 13 -- test/fixtures/icu-punycode-toascii.json | 149 -------------------- test/parallel/test-icu-punycode.js | 57 -------- 4 files changed, 2 insertions(+), 389 deletions(-) delete mode 100644 test/fixtures/icu-punycode-toascii.json delete mode 100644 test/parallel/test-icu-punycode.js diff --git a/src/node_i18n.cc b/src/node_i18n.cc index 43bb68351bf0a6..0bcf10a0b35acc 100644 --- a/src/node_i18n.cc +++ b/src/node_i18n.cc @@ -60,19 +60,17 @@ #include #include #include -#include -#include #include #include -#include #include -#include #include #include #include #include "nbytes.h" #ifdef NODE_HAVE_SMALL_ICU +#include + /* if this is defined, we have a 'secondary' entry point. compare following to utypes.h defs for U_ICUDATA_ENTRY_POINT */ #define SMALL_ICUDATA_ENTRY_POINT \ @@ -96,7 +94,6 @@ using v8::Int32; using v8::Isolate; using v8::Local; using v8::MaybeLocal; -using v8::NewStringType; using v8::Object; using v8::ObjectTemplate; using v8::String; @@ -583,167 +580,6 @@ void SetDefaultTimeZone(const char* tzid) { CHECK(U_SUCCESS(status)); } -int32_t ToUnicode(MaybeStackBuffer* buf, - const char* input, - size_t length) { - UErrorCode status = U_ZERO_ERROR; - uint32_t options = UIDNA_NONTRANSITIONAL_TO_UNICODE; - UIDNA* uidna = uidna_openUTS46(options, &status); - if (U_FAILURE(status)) - return -1; - UIDNAInfo info = UIDNA_INFO_INITIALIZER; - - int32_t len = uidna_nameToUnicodeUTF8(uidna, - input, length, - **buf, buf->capacity(), - &info, - &status); - - // Do not check info.errors like we do with ToASCII since ToUnicode always - // returns a string, despite any possible errors that may have occurred. - - if (status == U_BUFFER_OVERFLOW_ERROR) { - status = U_ZERO_ERROR; - buf->AllocateSufficientStorage(len); - len = uidna_nameToUnicodeUTF8(uidna, - input, length, - **buf, buf->capacity(), - &info, - &status); - } - - // info.errors is ignored as UTS #46 ToUnicode always produces a Unicode - // string, regardless of whether an error occurred. - - if (U_FAILURE(status)) { - len = -1; - buf->SetLength(0); - } else { - buf->SetLength(len); - } - - uidna_close(uidna); - return len; -} - -int32_t ToASCII(MaybeStackBuffer* buf, - const char* input, - size_t length, - idna_mode mode) { - UErrorCode status = U_ZERO_ERROR; - uint32_t options = // CheckHyphens = false; handled later - UIDNA_CHECK_BIDI | // CheckBidi = true - UIDNA_CHECK_CONTEXTJ | // CheckJoiners = true - UIDNA_NONTRANSITIONAL_TO_ASCII; // Nontransitional_Processing - if (mode == idna_mode::kStrict) { - options |= UIDNA_USE_STD3_RULES; // UseSTD3ASCIIRules = beStrict - // VerifyDnsLength = beStrict; - // handled later - } - - UIDNA* uidna = uidna_openUTS46(options, &status); - if (U_FAILURE(status)) - return -1; - UIDNAInfo info = UIDNA_INFO_INITIALIZER; - - int32_t len = uidna_nameToASCII_UTF8(uidna, - input, length, - **buf, buf->capacity(), - &info, - &status); - - if (status == U_BUFFER_OVERFLOW_ERROR) { - status = U_ZERO_ERROR; - buf->AllocateSufficientStorage(len); - len = uidna_nameToASCII_UTF8(uidna, - input, length, - **buf, buf->capacity(), - &info, - &status); - } - - // In UTS #46 which specifies ToASCII, certain error conditions are - // configurable through options, and the WHATWG URL Standard promptly elects - // to disable some of them to accommodate for real-world use cases. - // Unfortunately, ICU4C's IDNA module does not support disabling some of - // these options through `options` above, and thus continues throwing - // unnecessary errors. To counter this situation, we just filter out the - // errors that may have happened afterwards, before deciding whether to - // return an error from this function. - - // CheckHyphens = false - // (Specified in the current UTS #46 draft rev. 18.) - // Refs: - // - https://github.com/whatwg/url/issues/53 - // - https://github.com/whatwg/url/pull/309 - // - http://www.unicode.org/review/pri317/ - // - http://www.unicode.org/reports/tr46/tr46-18.html - // - https://www.icann.org/news/announcement-2000-01-07-en - info.errors &= ~UIDNA_ERROR_HYPHEN_3_4; - info.errors &= ~UIDNA_ERROR_LEADING_HYPHEN; - info.errors &= ~UIDNA_ERROR_TRAILING_HYPHEN; - - if (mode != idna_mode::kStrict) { - // VerifyDnsLength = beStrict - info.errors &= ~UIDNA_ERROR_EMPTY_LABEL; - info.errors &= ~UIDNA_ERROR_LABEL_TOO_LONG; - info.errors &= ~UIDNA_ERROR_DOMAIN_NAME_TOO_LONG; - } - - if (U_FAILURE(status) || (mode != idna_mode::kLenient && info.errors != 0)) { - len = -1; - buf->SetLength(0); - } else { - buf->SetLength(len); - } - - uidna_close(uidna); - return len; -} - -static void ToUnicode(const FunctionCallbackInfo& args) { - Environment* env = Environment::GetCurrent(args); - CHECK_GE(args.Length(), 1); - CHECK(args[0]->IsString()); - Utf8Value val(env->isolate(), args[0]); - - MaybeStackBuffer buf; - int32_t len = ToUnicode(&buf, *val, val.length()); - - if (len < 0) { - return THROW_ERR_INVALID_ARG_VALUE(env, "Cannot convert name to Unicode"); - } - - args.GetReturnValue().Set( - String::NewFromUtf8(env->isolate(), - *buf, - NewStringType::kNormal, - len).ToLocalChecked()); -} - -static void ToASCII(const FunctionCallbackInfo& args) { - Environment* env = Environment::GetCurrent(args); - CHECK_GE(args.Length(), 1); - CHECK(args[0]->IsString()); - Utf8Value val(env->isolate(), args[0]); - // optional arg - bool lenient = args[1]->BooleanValue(env->isolate()); - idna_mode mode = lenient ? idna_mode::kLenient : idna_mode::kDefault; - - MaybeStackBuffer buf; - int32_t len = ToASCII(&buf, *val, val.length(), mode); - - if (len < 0) { - return THROW_ERR_INVALID_ARG_VALUE(env, "Cannot convert name to ASCII"); - } - - args.GetReturnValue().Set( - String::NewFromUtf8(env->isolate(), - *buf, - NewStringType::kNormal, - len).ToLocalChecked()); -} - // This is similar to wcwidth except that it takes the current unicode // character properties database into consideration, allowing it to // correctly calculate the column widths of things like emoji's and @@ -850,8 +686,6 @@ static void CreatePerIsolateProperties(IsolateData* isolate_data, Local target) { Isolate* isolate = isolate_data->isolate(); - SetMethod(isolate, target, "toUnicode", ToUnicode); - SetMethod(isolate, target, "toASCII", ToASCII); SetMethod(isolate, target, "getStringWidth", GetStringWidth); // One-shot converters @@ -880,8 +714,6 @@ void CreatePerContextProperties(Local target, void* priv) {} void RegisterExternalReferences(ExternalReferenceRegistry* registry) { - registry->Register(ToUnicode); - registry->Register(ToASCII); registry->Register(GetStringWidth); registry->Register(ICUErrorName); registry->Register(Transcode); diff --git a/src/node_i18n.h b/src/node_i18n.h index e516282865fb18..6ba3c41fc4f056 100644 --- a/src/node_i18n.h +++ b/src/node_i18n.h @@ -53,19 +53,6 @@ enum class idna_mode { kStrict }; -// Implements the WHATWG URL Standard "domain to ASCII" algorithm. -// https://url.spec.whatwg.org/#concept-domain-to-ascii -int32_t ToASCII(MaybeStackBuffer* buf, - const char* input, - size_t length, - idna_mode mode = idna_mode::kDefault); - -// Implements the WHATWG URL Standard "domain to Unicode" algorithm. -// https://url.spec.whatwg.org/#concept-domain-to-unicode -int32_t ToUnicode(MaybeStackBuffer* buf, - const char* input, - size_t length); - struct ConverterDeleter { void operator()(UConverter* pointer) const { ucnv_close(pointer); } }; diff --git a/test/fixtures/icu-punycode-toascii.json b/test/fixtures/icu-punycode-toascii.json deleted file mode 100644 index 814f06e794866d..00000000000000 --- a/test/fixtures/icu-punycode-toascii.json +++ /dev/null @@ -1,149 +0,0 @@ -[ - "This resource is focused on highlighting issues with UTS #46 ToASCII", - { - "comment": "Label with hyphens in 3rd and 4th position", - "input": "aa--", - "output": "aa--" - }, - { - "input": "a†--", - "output": "xn--a---kp0a" - }, - { - "input": "ab--c", - "output": "ab--c" - }, - { - "comment": "Label with leading hyphen", - "input": "-x", - "output": "-x" - }, - { - "input": "-†", - "output": "xn----xhn" - }, - { - "input": "-x.xn--nxa", - "output": "-x.xn--nxa" - }, - { - "input": "-x.β", - "output": "-x.xn--nxa" - }, - { - "comment": "Label with trailing hyphen", - "input": "x-.xn--nxa", - "output": "x-.xn--nxa" - }, - { - "input": "x-.β", - "output": "x-.xn--nxa" - }, - { - "comment": "Empty labels", - "input": "x..xn--nxa", - "output": "x..xn--nxa" - }, - { - "input": "x..β", - "output": "x..xn--nxa" - }, - { - "comment": "Invalid Punycode", - "input": "xn--a", - "output": null - }, - { - "input": "xn--a.xn--nxa", - "output": null - }, - { - "input": "xn--a.β", - "output": null - }, - { - "comment": "Valid Punycode", - "input": "xn--nxa.xn--nxa", - "output": "xn--nxa.xn--nxa" - }, - { - "comment": "Mixed", - "input": "xn--nxa.β", - "output": "xn--nxa.xn--nxa" - }, - { - "input": "ab--c.xn--nxa", - "output": "ab--c.xn--nxa" - }, - { - "input": "ab--c.β", - "output": "ab--c.xn--nxa" - }, - { - "comment": "CheckJoiners is true", - "input": "\u200D.example", - "output": null - }, - { - "input": "xn--1ug.example", - "output": null - }, - { - "comment": "CheckBidi is true", - "input": "يa", - "output": null - }, - { - "input": "xn--a-yoc", - "output": null - }, - { - "comment": "processing_option is Nontransitional_Processing", - "input": "ශ්‍රී", - "output": "xn--10cl1a0b660p" - }, - { - "input": "نامه‌ای", - "output": "xn--mgba3gch31f060k" - }, - { - "comment": "U+FFFD", - "input": "\uFFFD.com", - "output": null - }, - { - "comment": "U+FFFD character encoded in Punycode", - "input": "xn--zn7c.com", - "output": null - }, - { - "comment": "Label longer than 63 code points", - "input": "x01234567890123456789012345678901234567890123456789012345678901x", - "output": "x01234567890123456789012345678901234567890123456789012345678901x" - }, - { - "input": "x01234567890123456789012345678901234567890123456789012345678901†", - "output": "xn--x01234567890123456789012345678901234567890123456789012345678901-6963b" - }, - { - "input": "x01234567890123456789012345678901234567890123456789012345678901x.xn--nxa", - "output": "x01234567890123456789012345678901234567890123456789012345678901x.xn--nxa" - }, - { - "input": "x01234567890123456789012345678901234567890123456789012345678901x.β", - "output": "x01234567890123456789012345678901234567890123456789012345678901x.xn--nxa" - }, - { - "comment": "Domain excluding TLD longer than 253 code points", - "input": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.x", - "output": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.x" - }, - { - "input": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.xn--nxa", - "output": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.xn--nxa" - }, - { - "input": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.β", - "output": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.xn--nxa" - } -] diff --git a/test/parallel/test-icu-punycode.js b/test/parallel/test-icu-punycode.js deleted file mode 100644 index 29e88f9b9a6262..00000000000000 --- a/test/parallel/test-icu-punycode.js +++ /dev/null @@ -1,57 +0,0 @@ -'use strict'; -// Flags: --expose-internals -const common = require('../common'); - -if (!common.hasIntl) - common.skip('missing Intl'); - -const { internalBinding } = require('internal/test/binding'); -const icu = internalBinding('icu'); -const assert = require('assert'); - -// Test hasConverter method -assert(icu.hasConverter('utf-8'), - 'hasConverter should report converter exists for utf-8'); -assert(!icu.hasConverter('x'), - 'hasConverter should report converter does not exist for x'); - -const tests = require('../fixtures/url-idna.js'); -const fixtures = require('../fixtures/icu-punycode-toascii.json'); - -{ - for (const [i, { ascii, unicode }] of tests.entries()) { - assert.strictEqual(ascii, icu.toASCII(unicode), `toASCII(${i + 1})`); - assert.strictEqual(unicode, icu.toUnicode(ascii), `toUnicode(${i + 1})`); - assert.strictEqual(ascii, icu.toASCII(icu.toUnicode(ascii)), - `toASCII(toUnicode(${i + 1}))`); - assert.strictEqual(unicode, icu.toUnicode(icu.toASCII(unicode)), - `toUnicode(toASCII(${i + 1}))`); - } -} - -{ - for (const [i, test] of fixtures.entries()) { - if (typeof test === 'string') - continue; // skip comments - const { comment, input, output } = test; - let caseComment = `case ${i + 1}`; - if (comment) - caseComment += ` (${comment})`; - if (output === null) { - assert.throws( - () => icu.toASCII(input), - { - code: 'ERR_INVALID_ARG_VALUE', - name: 'TypeError', - message: 'Cannot convert name to ASCII' - } - ); - icu.toASCII(input, true); // Should not throw. - } else { - assert.strictEqual(icu.toASCII(input), output, `ToASCII ${caseComment}`); - assert.strictEqual(icu.toASCII(input, true), output, - `ToASCII ${caseComment} in lenient mode`); - } - icu.toUnicode(input); // Should not throw. - } -} From 4e5c90bb41b857f5c4789c7859e887e57f6f1de7 Mon Sep 17 00:00:00 2001 From: Yagiz Nizipli Date: Sat, 19 Oct 2024 04:13:58 -0400 Subject: [PATCH 52/93] lib: replace `createDeferredPromise` util with `Promise.withResolvers` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/54836 Reviewed-By: Michaël Zasso Reviewed-By: Benjamin Gruenbaum Reviewed-By: Luigi Pinca Reviewed-By: Chemi Atlow Reviewed-By: Moshe Atlow Reviewed-By: Antoine du Hamel Reviewed-By: Robert Nagy Reviewed-By: Trivikram Kamat --- lib/child_process.js | 4 +-- lib/internal/abort_controller.js | 4 +-- lib/internal/blob.js | 6 ++--- lib/internal/fs/watchers.js | 6 ++--- lib/internal/streams/duplexify.js | 6 ++--- lib/internal/test_runner/harness.js | 4 +-- lib/internal/test_runner/runner.js | 4 +-- lib/internal/test_runner/test.js | 6 ++--- lib/internal/test_runner/utils.js | 4 +-- lib/internal/util.js | 12 --------- lib/internal/webstreams/adapters.js | 12 ++++----- lib/internal/webstreams/readablestream.js | 26 +++++++++---------- lib/internal/webstreams/transfer.js | 9 +++---- lib/internal/webstreams/transformstream.js | 12 ++++----- lib/internal/webstreams/writablestream.js | 22 ++++++++-------- test/parallel/test-runner-run-watch.mjs | 6 ++--- .../test-runner-watch-mode-complex.mjs | 6 ++--- test/parallel/test-runner-watch-mode.mjs | 6 ++--- typings/primordials.d.ts | 1 + 19 files changed, 68 insertions(+), 88 deletions(-) diff --git a/lib/child_process.js b/lib/child_process.js index 2b2b6f083f1469..3fb21f755be3d7 100644 --- a/lib/child_process.js +++ b/lib/child_process.js @@ -37,6 +37,7 @@ const { ObjectAssign, ObjectDefineProperty, ObjectPrototypeHasOwnProperty, + PromiseWithResolvers, RegExpPrototypeExec, SafeSet, StringPrototypeIncludes, @@ -47,7 +48,6 @@ const { const { convertToValidSignal, - createDeferredPromise, getSystemErrorName, kEmptyObject, promisify, @@ -237,7 +237,7 @@ function exec(command, options, callback) { const customPromiseExecFunction = (orig) => { return (...args) => { - const { promise, resolve, reject } = createDeferredPromise(); + const { promise, resolve, reject } = PromiseWithResolvers(); promise.child = orig(...args, (err, stdout, stderr) => { if (err !== null) { diff --git a/lib/internal/abort_controller.js b/lib/internal/abort_controller.js index 25293a7c2e56f7..b812f588c23e99 100644 --- a/lib/internal/abort_controller.js +++ b/lib/internal/abort_controller.js @@ -10,6 +10,7 @@ const { ObjectDefineProperty, ObjectSetPrototypeOf, PromiseResolve, + PromiseWithResolvers, SafeFinalizationRegistry, SafeSet, SafeWeakRef, @@ -28,7 +29,6 @@ const { kWeakHandler, } = require('internal/event_target'); const { - createDeferredPromise, customInspectSymbol, kEmptyObject, kEnumerableProperty, @@ -486,7 +486,7 @@ async function aborted(signal, resource) { validateObject(resource, 'resource', kValidateObjectAllowObjects); if (signal.aborted) return PromiseResolve(); - const abortPromise = createDeferredPromise(); + const abortPromise = PromiseWithResolvers(); const opts = { __proto__: null, [kWeakHandler]: resource, once: true, [kResistStopPropagation]: true }; signal.addEventListener('abort', abortPromise.resolve, opts); return abortPromise.promise; diff --git a/lib/internal/blob.js b/lib/internal/blob.js index 1ec619f2bdbfcc..43a7ae5ac34d9c 100644 --- a/lib/internal/blob.js +++ b/lib/internal/blob.js @@ -9,6 +9,7 @@ const { ObjectSetPrototypeOf, PromisePrototypeThen, PromiseReject, + PromiseWithResolvers, RegExpPrototypeExec, RegExpPrototypeSymbolReplace, StringPrototypeSplit, @@ -47,7 +48,6 @@ const { } = require('internal/util/types'); const { - createDeferredPromise, customInspectSymbol: kInspect, kEmptyObject, kEnumerableProperty, @@ -325,7 +325,7 @@ class Blob { this.pendingPulls = []; }, pull(c) { - const { promise, resolve, reject } = createDeferredPromise(); + const { promise, resolve, reject } = PromiseWithResolvers(); this.pendingPulls.push({ resolve, reject }); const readNext = () => { reader.pull((status, buffer) => { @@ -478,7 +478,7 @@ function createBlobFromFilePath(path, options) { } function arrayBuffer(blob) { - const { promise, resolve, reject } = createDeferredPromise(); + const { promise, resolve, reject } = PromiseWithResolvers(); const reader = blob[kHandle].getReader(); const buffers = []; const readNext = () => { diff --git a/lib/internal/fs/watchers.js b/lib/internal/fs/watchers.js index f5ecc15159f457..efa8dd85c64bfb 100644 --- a/lib/internal/fs/watchers.js +++ b/lib/internal/fs/watchers.js @@ -4,6 +4,7 @@ const { FunctionPrototypeCall, ObjectDefineProperty, ObjectSetPrototypeOf, + PromiseWithResolvers, Symbol, } = primordials; @@ -15,7 +16,6 @@ const { }, } = require('internal/errors'); const { - createDeferredPromise, kEmptyObject, } = require('internal/util'); @@ -325,7 +325,7 @@ async function* watch(filename, options = kEmptyObject) { throw new AbortError(undefined, { cause: signal?.reason }); const handle = new FSEvent(); - let { promise, resolve, reject } = createDeferredPromise(); + let { promise, resolve, reject } = PromiseWithResolvers(); const oncancel = () => { handle.close(); reject(new AbortError(undefined, { cause: signal?.reason })); @@ -368,7 +368,7 @@ async function* watch(filename, options = kEmptyObject) { while (!signal?.aborted) { yield await promise; - ({ promise, resolve, reject } = createDeferredPromise()); + ({ promise, resolve, reject } = PromiseWithResolvers()); } throw new AbortError(undefined, { cause: signal?.reason }); } finally { diff --git a/lib/internal/streams/duplexify.js b/lib/internal/streams/duplexify.js index 4498f0f3905be2..3e026352f20432 100644 --- a/lib/internal/streams/duplexify.js +++ b/lib/internal/streams/duplexify.js @@ -2,6 +2,7 @@ const { FunctionPrototypeCall, + PromiseWithResolvers, } = primordials; const { @@ -27,7 +28,6 @@ const { destroyer } = require('internal/streams/destroy'); const Duplex = require('internal/streams/duplex'); const Readable = require('internal/streams/readable'); const Writable = require('internal/streams/writable'); -const { createDeferredPromise } = require('internal/util'); const from = require('internal/streams/from'); const { @@ -209,7 +209,7 @@ module.exports = function duplexify(body, name) { }; function fromAsyncGen(fn) { - let { promise, resolve } = createDeferredPromise(); + let { promise, resolve } = PromiseWithResolvers(); const ac = new AbortController(); const signal = ac.signal; const value = fn(async function*() { @@ -221,7 +221,7 @@ function fromAsyncGen(fn) { if (done) return; if (signal.aborted) throw new AbortError(undefined, { cause: signal.reason }); - ({ promise, resolve } = createDeferredPromise()); + ({ promise, resolve } = PromiseWithResolvers()); yield chunk; } }(), { signal }); diff --git a/lib/internal/test_runner/harness.js b/lib/internal/test_runner/harness.js index 9109495fef03f3..e9356cbc0100bb 100644 --- a/lib/internal/test_runner/harness.js +++ b/lib/internal/test_runner/harness.js @@ -4,6 +4,7 @@ const { ArrayPrototypePush, FunctionPrototypeBind, PromiseResolve, + PromiseWithResolvers, SafeMap, SafePromiseAllReturnVoid, } = primordials; @@ -26,7 +27,6 @@ const { shouldColorizeTestFiles, } = require('internal/test_runner/utils'); const { queueMicrotask } = require('internal/process/task_queues'); -const { createDeferredPromise } = require('internal/util'); const { bigint: hrtime } = process.hrtime; const resolvedPromise = PromiseResolve(); const testResources = new SafeMap(); @@ -35,7 +35,7 @@ let globalRoot; testResources.set(reporterScope.asyncId(), reporterScope); function createTestTree(rootTestOptions, globalOptions) { - const buildPhaseDeferred = createDeferredPromise(); + const buildPhaseDeferred = PromiseWithResolvers(); const isFilteringByName = globalOptions.testNamePatterns || globalOptions.testSkipPatterns; const isFilteringByOnly = (globalOptions.isolation === 'process' || process.env.NODE_TEST_CONTEXT) ? diff --git a/lib/internal/test_runner/runner.js b/lib/internal/test_runner/runner.js index 18940ffdbe8b58..0ba40d7ba7f71f 100644 --- a/lib/internal/test_runner/runner.js +++ b/lib/internal/test_runner/runner.js @@ -18,6 +18,7 @@ const { ObjectAssign, PromisePrototypeThen, PromiseResolve, + PromiseWithResolvers, SafeMap, SafePromiseAll, SafePromiseAllReturnVoid, @@ -63,7 +64,6 @@ const { getInspectPort, isUsingInspector, isInspectorMessage } = require('intern const { isRegExp } = require('internal/util/types'); const { pathToFileURL } = require('internal/url'); const { - createDeferredPromise, kEmptyObject, } = require('internal/util'); const { kEmitMessage } = require('internal/test_runner/tests_stream'); @@ -744,7 +744,7 @@ function run(options = kEmptyObject) { }; } else { runFiles = async () => { - const { promise, resolve: finishBootstrap } = createDeferredPromise(); + const { promise, resolve: finishBootstrap } = PromiseWithResolvers(); await root.runInAsyncScope(async () => { const parentURL = pathToFileURL(cwd + sep).href; diff --git a/lib/internal/test_runner/test.js b/lib/internal/test_runner/test.js index 80d301cca00ae8..b679410c5561e5 100644 --- a/lib/internal/test_runner/test.js +++ b/lib/internal/test_runner/test.js @@ -18,6 +18,7 @@ const { Promise, PromisePrototypeThen, PromiseResolve, + PromiseWithResolvers, ReflectApply, RegExpPrototypeExec, SafeMap, @@ -53,7 +54,6 @@ const { reporterScope, } = require('internal/test_runner/utils'); const { - createDeferredPromise, kEmptyObject, once: runOnce, } = require('internal/util'); @@ -137,7 +137,7 @@ function lazyAssertObject(harness) { } function stopTest(timeout, signal) { - const deferred = createDeferredPromise(); + const deferred = PromiseWithResolvers(); const abortListener = addAbortListener(signal, deferred.resolve); let timer; let disposeFunction; @@ -822,7 +822,7 @@ class Test extends AsyncResource { // pending for later execution. this.reporter.enqueue(this.nesting, this.loc, this.name); if (this.root.harness.buildPromise || !this.parent.hasConcurrency()) { - const deferred = createDeferredPromise(); + const deferred = PromiseWithResolvers(); deferred.test = this; this.parent.addPendingSubtest(deferred); diff --git a/lib/internal/test_runner/utils.js b/lib/internal/test_runner/utils.js index f61e0450c2a7b1..243b648795a7ef 100644 --- a/lib/internal/test_runner/utils.js +++ b/lib/internal/test_runner/utils.js @@ -14,6 +14,7 @@ const { NumberParseInt, NumberPrototypeToFixed, ObjectGetOwnPropertyDescriptor, + PromiseWithResolvers, RegExp, RegExpPrototypeExec, SafeMap, @@ -29,7 +30,6 @@ const { AsyncResource } = require('async_hooks'); const { relative, sep } = require('path'); const { createWriteStream } = require('fs'); const { pathToFileURL } = require('internal/url'); -const { createDeferredPromise } = require('internal/util'); const { getOptionValue } = require('internal/options'); const { green, yellow, red, white, shouldColorize } = require('internal/util/colors'); @@ -62,7 +62,7 @@ const kDefaultPattern = `**/{${ArrayPrototypeJoin(kPatterns, ',')}}.{${ArrayProt function createDeferredCallback() { let calledCount = 0; - const { promise, resolve, reject } = createDeferredPromise(); + const { promise, resolve, reject } = PromiseWithResolvers(); const cb = (err) => { calledCount++; diff --git a/lib/internal/util.js b/lib/internal/util.js index fb09e5331222f4..8a009850aeb0fc 100644 --- a/lib/internal/util.js +++ b/lib/internal/util.js @@ -543,17 +543,6 @@ function sleep(msec) { _sleep(msec); } -function createDeferredPromise() { - let resolve; - let reject; - const promise = new Promise((res, rej) => { - resolve = res; - reject = rej; - }); - - return { promise, resolve, reject }; -} - // https://heycam.github.io/webidl/#define-the-operations function defineOperation(target, name, method) { ObjectDefineProperty(target, name, { @@ -872,7 +861,6 @@ module.exports = { cachedResult, convertToValidSignal, createClassWrapper, - createDeferredPromise, decorateErrorStack, defineOperation, defineLazyProperties, diff --git a/lib/internal/webstreams/adapters.js b/lib/internal/webstreams/adapters.js index 14f0f65b275b60..4e99d56aa4be7e 100644 --- a/lib/internal/webstreams/adapters.js +++ b/lib/internal/webstreams/adapters.js @@ -7,6 +7,7 @@ const { ObjectEntries, PromisePrototypeThen, PromiseResolve, + PromiseWithResolvers, SafePromiseAll, SafePromisePrototypeFinally, SafeSet, @@ -64,7 +65,6 @@ const { } = require('internal/errors'); const { - createDeferredPromise, kEmptyObject, normalizeEncoding, } = require('internal/util'); @@ -213,7 +213,7 @@ function newWritableStreamFromStreamWritable(streamWritable) { write(chunk) { if (streamWritable.writableNeedDrain || !streamWritable.write(chunk)) { - backpressurePromise = createDeferredPromise(); + backpressurePromise = PromiseWithResolvers(); return SafePromisePrototypeFinally( backpressurePromise.promise, () => { backpressurePromise = undefined; @@ -227,7 +227,7 @@ function newWritableStreamFromStreamWritable(streamWritable) { close() { if (closed === undefined && !isWritableEnded(streamWritable)) { - closed = createDeferredPromise(); + closed = PromiseWithResolvers(); streamWritable.end(); return closed.promise; } @@ -900,7 +900,7 @@ function newWritableStreamFromStreamBase(streamBase, strategy) { } function doWrite(chunk, controller) { - const promise = createDeferredPromise(); + const promise = PromiseWithResolvers(); let ret; let req; try { @@ -933,7 +933,7 @@ function newWritableStreamFromStreamBase(streamBase, strategy) { }, close() { - const promise = createDeferredPromise(); + const promise = PromiseWithResolvers(); const req = new ShutdownWrap(); req.oncomplete = () => promise.resolve(); const err = streamBase.shutdown(req); @@ -1000,7 +1000,7 @@ function newReadableStreamFromStreamBase(streamBase, strategy, options = kEmptyO }, cancel() { - const promise = createDeferredPromise(); + const promise = PromiseWithResolvers(); try { ondone(); } catch (error) { diff --git a/lib/internal/webstreams/readablestream.js b/lib/internal/webstreams/readablestream.js index 5d9379287e9605..2369175733c115 100644 --- a/lib/internal/webstreams/readablestream.js +++ b/lib/internal/webstreams/readablestream.js @@ -19,6 +19,7 @@ const { PromisePrototypeThen, PromiseReject, PromiseResolve, + PromiseWithResolvers, SafePromiseAll, Symbol, SymbolAsyncIterator, @@ -50,7 +51,6 @@ const { } = require('internal/util/types'); const { - createDeferredPromise, customInspectSymbol: kInspect, kEmptyObject, kEnumerableProperty, @@ -252,7 +252,7 @@ class ReadableStream { validateObject(strategy, 'strategy', kValidateObjectAllowObjectsAndNull); this[kState] = createReadableStreamState(); - this[kIsClosedPromise] = createDeferredPromise(); + this[kIsClosedPromise] = PromiseWithResolvers(); this[kControllerErrorFunction] = () => {}; // The spec requires handling of the strategy first @@ -486,7 +486,7 @@ class ReadableStream { new ERR_INVALID_STATE.TypeError( 'The reader is not bound to a ReadableStream')); } - const promise = createDeferredPromise(); + const promise = PromiseWithResolvers(); // eslint-disable-next-line no-use-before-define readableStreamDefaultReaderRead(reader, new ReadableStreamAsyncIteratorReadRequest(reader, state, promise)); @@ -643,7 +643,7 @@ function InternalTransferredReadableStream() { this[kType] = 'ReadableStream'; this[kState] = createReadableStreamState(); - this[kIsClosedPromise] = createDeferredPromise(); + this[kIsClosedPromise] = PromiseWithResolvers(); } ObjectSetPrototypeOf(InternalTransferredReadableStream.prototype, ReadableStream.prototype); @@ -786,7 +786,7 @@ class ReadableStreamAsyncIteratorReadRequest { class DefaultReadRequest { constructor() { - this[kState] = createDeferredPromise(); + this[kState] = PromiseWithResolvers(); } [kChunk](value) { @@ -806,7 +806,7 @@ class DefaultReadRequest { class ReadIntoRequest { constructor() { - this[kState] = createDeferredPromise(); + this[kState] = PromiseWithResolvers(); } [kChunk](value) { @@ -1230,7 +1230,7 @@ function InternalReadableStream(start, pull, cancel, highWaterMark, size) { markTransferMode(this, false, true); this[kType] = 'ReadableStream'; this[kState] = createReadableStreamState(); - this[kIsClosedPromise] = createDeferredPromise(); + this[kIsClosedPromise] = PromiseWithResolvers(); const controller = new ReadableStreamDefaultController(kSkipThrow); setupReadableStreamDefaultController( this, @@ -1258,7 +1258,7 @@ function InternalReadableByteStream(start, pull, cancel) { markTransferMode(this, false, true); this[kType] = 'ReadableStream'; this[kState] = createReadableStreamState(); - this[kIsClosedPromise] = createDeferredPromise(); + this[kIsClosedPromise] = PromiseWithResolvers(); const controller = new ReadableByteStreamController(kSkipThrow); setupReadableByteStreamController( this, @@ -1392,7 +1392,7 @@ function readableStreamPipeTo( } } - const promise = createDeferredPromise(); + const promise = PromiseWithResolvers(); const state = { currentWrite: PromiseResolve(), @@ -1509,7 +1509,7 @@ function readableStreamPipeTo( await writer[kState].ready.promise; - const promise = createDeferredPromise(); + const promise = PromiseWithResolvers(); // eslint-disable-next-line no-use-before-define readableStreamDefaultReaderRead(reader, new PipeToReadableStreamReadRequest(writer, state, promise)); @@ -1613,7 +1613,7 @@ function readableStreamDefaultTee(stream, cloneForBranch2) { let reason2; let branch1; let branch2; - const cancelPromise = createDeferredPromise(); + const cancelPromise = PromiseWithResolvers(); async function pullAlgorithm() { if (reading) return; @@ -1712,7 +1712,7 @@ function readableByteStreamTee(stream) { let reason2; let branch1; let branch2; - const cancelDeferred = createDeferredPromise(); + const cancelDeferred = PromiseWithResolvers(); function forwardReaderError(thisReader) { PromisePrototypeThen( @@ -2159,7 +2159,7 @@ function readableStreamReaderGenericInitialize(reader, stream) { stream[kState].reader = reader; switch (stream[kState].state) { case 'readable': - reader[kState].close = createDeferredPromise(); + reader[kState].close = PromiseWithResolvers(); break; case 'closed': reader[kState].close = { diff --git a/lib/internal/webstreams/transfer.js b/lib/internal/webstreams/transfer.js index 9835e6ab272c98..9ce3f249ffd2bd 100644 --- a/lib/internal/webstreams/transfer.js +++ b/lib/internal/webstreams/transfer.js @@ -3,6 +3,7 @@ const { ObjectDefineProperties, PromiseResolve, + PromiseWithResolvers, ReflectConstruct, } = primordials; @@ -28,10 +29,6 @@ const { writableStreamDefaultControllerErrorIfNeeded, } = require('internal/webstreams/writablestream'); -const { - createDeferredPromise, -} = require('internal/util'); - const assert = require('internal/assert'); const { @@ -181,7 +178,7 @@ class CrossRealmTransformWritableSink { this[kState] = { port, controller: undefined, - backpressurePromise: createDeferredPromise(), + backpressurePromise: PromiseWithResolvers(), unref, }; @@ -239,7 +236,7 @@ class CrossRealmTransformWritableSink { }; } await this[kState].backpressurePromise.promise; - this[kState].backpressurePromise = createDeferredPromise(); + this[kState].backpressurePromise = PromiseWithResolvers(); try { this[kState].port.postMessage({ type: 'chunk', value: chunk }); } catch (error) { diff --git a/lib/internal/webstreams/transformstream.js b/lib/internal/webstreams/transformstream.js index 9e26387b3b6110..cd3c96d68a59b8 100644 --- a/lib/internal/webstreams/transformstream.js +++ b/lib/internal/webstreams/transformstream.js @@ -5,6 +5,7 @@ const { ObjectDefineProperties, ObjectSetPrototypeOf, PromisePrototypeThen, + PromiseWithResolvers, Symbol, SymbolToStringTag, } = primordials; @@ -23,7 +24,6 @@ const { } = internalBinding('messaging'); const { - createDeferredPromise, customInspectSymbol: kInspect, kEmptyObject, kEnumerableProperty, @@ -161,7 +161,7 @@ class TransformStream { extractHighWaterMark(writableHighWaterMark, 1); const actualWritableSize = extractSizeAlgorithm(writableSize); - const startPromise = createDeferredPromise(); + const startPromise = PromiseWithResolvers(); initializeTransformStream( this, @@ -439,7 +439,7 @@ function transformStreamSetBackpressure(stream, backpressure) { assert(stream[kState].backpressure !== backpressure); if (stream[kState].backpressureChange.promise !== undefined) stream[kState].backpressureChange.resolve?.(); - stream[kState].backpressureChange = createDeferredPromise(); + stream[kState].backpressureChange = PromiseWithResolvers(); stream[kState].backpressure = backpressure; } @@ -583,7 +583,7 @@ async function transformStreamDefaultSinkAbortAlgorithm(stream, reason) { return controller[kState].finishPromise; } - const { promise, resolve, reject } = createDeferredPromise(); + const { promise, resolve, reject } = PromiseWithResolvers(); controller[kState].finishPromise = promise; const cancelPromise = controller[kState].cancelAlgorithm(reason); transformStreamDefaultControllerClearAlgorithms(controller); @@ -616,7 +616,7 @@ function transformStreamDefaultSinkCloseAlgorithm(stream) { if (controller[kState].finishPromise !== undefined) { return controller[kState].finishPromise; } - const { promise, resolve, reject } = createDeferredPromise(); + const { promise, resolve, reject } = PromiseWithResolvers(); controller[kState].finishPromise = promise; const flushPromise = controller[kState].flushAlgorithm(controller); transformStreamDefaultControllerClearAlgorithms(controller); @@ -654,7 +654,7 @@ function transformStreamDefaultSourceCancelAlgorithm(stream, reason) { return controller[kState].finishPromise; } - const { promise, resolve, reject } = createDeferredPromise(); + const { promise, resolve, reject } = PromiseWithResolvers(); controller[kState].finishPromise = promise; const cancelPromise = controller[kState].cancelAlgorithm(reason); transformStreamDefaultControllerClearAlgorithms(controller); diff --git a/lib/internal/webstreams/writablestream.js b/lib/internal/webstreams/writablestream.js index ba1461fc70e95f..5baaf20c30ba26 100644 --- a/lib/internal/webstreams/writablestream.js +++ b/lib/internal/webstreams/writablestream.js @@ -11,6 +11,7 @@ const { PromisePrototypeThen, PromiseReject, PromiseResolve, + PromiseWithResolvers, Symbol, SymbolToStringTag, } = primordials; @@ -30,7 +31,6 @@ const { } = internalBinding('messaging'); const { - createDeferredPromise, customInspectSymbol: kInspect, kEmptyObject, kEnumerableProperty, @@ -170,7 +170,7 @@ class WritableStream { this[kState] = createWritableStreamState(); - this[kIsClosedPromise] = createDeferredPromise(); + this[kIsClosedPromise] = PromiseWithResolvers(); this[kControllerErrorFunction] = () => {}; const size = extractSizeAlgorithm(strategy?.size); @@ -305,7 +305,7 @@ function InternalTransferredWritableStream() { this[kType] = 'WritableStream'; this[kState] = createWritableStreamState(); - this[kIsClosedPromise] = createDeferredPromise(); + this[kIsClosedPromise] = PromiseWithResolvers(); } ObjectSetPrototypeOf(InternalTransferredWritableStream.prototype, WritableStream.prototype); @@ -521,7 +521,7 @@ function InternalWritableStream(start, write, close, abort, highWaterMark, size) markTransferMode(this, false, true); this[kType] = 'WritableStream'; this[kState] = createWritableStreamState(); - this[kIsClosedPromise] = createDeferredPromise(); + this[kIsClosedPromise] = PromiseWithResolvers(); const controller = new WritableStreamDefaultController(kSkipThrow); setupWritableStreamDefaultController( @@ -557,7 +557,7 @@ const isWritableStreamDefaultController = function createWritableStreamState() { return { __proto__: null, - close: createDeferredPromise(), + close: PromiseWithResolvers(), closeRequest: { __proto__: null, promise: undefined, @@ -616,7 +616,7 @@ function setupWritableStreamDefaultWriter(writer, stream) { case 'writable': if (!writableStreamCloseQueuedOrInFlight(stream) && stream[kState].backpressure) { - writer[kState].ready = createDeferredPromise(); + writer[kState].ready = PromiseWithResolvers(); } else { writer[kState].ready = { promise: PromiseResolve(), @@ -663,7 +663,7 @@ function setupWritableStreamDefaultWriter(writer, stream) { } function setClosedPromiseToNewPromise() { - writer[kState].close = createDeferredPromise(); + writer[kState].close = PromiseWithResolvers(); } } @@ -688,7 +688,7 @@ function writableStreamAbort(stream, reason) { reason = undefined; } - const abort = createDeferredPromise(); + const abort = PromiseWithResolvers(); stream[kState].pendingAbortRequest = { abort, @@ -715,7 +715,7 @@ function writableStreamClose(stream) { } assert(state === 'writable' || state === 'erroring'); assert(!writableStreamCloseQueuedOrInFlight(stream)); - stream[kState].closeRequest = createDeferredPromise(); + stream[kState].closeRequest = PromiseWithResolvers(); const { promise } = stream[kState].closeRequest; if (writer !== undefined && backpressure && state === 'writable') writer[kState].ready.resolve?.(); @@ -731,7 +731,7 @@ function writableStreamUpdateBackpressure(stream, backpressure) { } = stream[kState]; if (writer !== undefined && stream[kState].backpressure !== backpressure) { if (backpressure) { - writer[kState].ready = createDeferredPromise(); + writer[kState].ready = PromiseWithResolvers(); } else { writer[kState].ready.resolve?.(); } @@ -961,7 +961,7 @@ function writableStreamAddWriteRequest(stream) { promise, resolve, reject, - } = createDeferredPromise(); + } = PromiseWithResolvers(); ArrayPrototypePush( stream[kState].writeRequests, { diff --git a/test/parallel/test-runner-run-watch.mjs b/test/parallel/test-runner-run-watch.mjs index fca8b492bc3ad0..83e8524f44a338 100644 --- a/test/parallel/test-runner-run-watch.mjs +++ b/test/parallel/test-runner-run-watch.mjs @@ -1,11 +1,9 @@ -// Flags: --expose-internals import * as common from '../common/index.mjs'; import { describe, it, beforeEach, run } from 'node:test'; import assert from 'node:assert'; import { spawn } from 'node:child_process'; import { once } from 'node:events'; import { writeFileSync, renameSync, unlinkSync, existsSync } from 'node:fs'; -import util from 'internal/util'; import tmpdir from '../common/tmpdir.js'; import { join } from 'node:path'; @@ -52,8 +50,8 @@ async function testWatch( isolation } ) { - const ran1 = util.createDeferredPromise(); - const ran2 = util.createDeferredPromise(); + const ran1 = Promise.withResolvers(); + const ran2 = Promise.withResolvers(); const args = [runner]; if (file) args.push('--file', file); if (runnerCwd) args.push('--cwd', runnerCwd); diff --git a/test/parallel/test-runner-watch-mode-complex.mjs b/test/parallel/test-runner-watch-mode-complex.mjs index bd33be61c7d058..daa37e04d67903 100644 --- a/test/parallel/test-runner-watch-mode-complex.mjs +++ b/test/parallel/test-runner-watch-mode-complex.mjs @@ -1,11 +1,9 @@ -// Flags: --expose-internals import * as common from '../common/index.mjs'; import { describe, it } from 'node:test'; import assert from 'node:assert'; import { spawn } from 'node:child_process'; import { writeFile, unlink } from 'node:fs/promises'; import { setTimeout } from 'node:timers/promises'; -import util from 'internal/util'; import tmpdir from '../common/tmpdir.js'; if (common.isIBMi) @@ -56,8 +54,8 @@ await setupFixtures(); describe('test runner watch mode with more complex setup', () => { it('should run tests when a dependency changed after a watched test file being deleted', async () => { - const ran1 = util.createDeferredPromise(); - const ran2 = util.createDeferredPromise(); + const ran1 = Promise.withResolvers(); + const ran2 = Promise.withResolvers(); const child = spawn(process.execPath, ['--watch', '--test'], { encoding: 'utf8', stdio: 'pipe', cwd: tmpdir.path }); diff --git a/test/parallel/test-runner-watch-mode.mjs b/test/parallel/test-runner-watch-mode.mjs index 0c56e4c20e5b37..697e5435a8491e 100644 --- a/test/parallel/test-runner-watch-mode.mjs +++ b/test/parallel/test-runner-watch-mode.mjs @@ -1,4 +1,3 @@ -// Flags: --expose-internals import * as common from '../common/index.mjs'; import { describe, it, beforeEach } from 'node:test'; import { once } from 'node:events'; @@ -6,7 +5,6 @@ import assert from 'node:assert'; import { spawn } from 'node:child_process'; import { writeFileSync, renameSync, unlinkSync } from 'node:fs'; import { setTimeout } from 'node:timers/promises'; -import util from 'internal/util'; import tmpdir from '../common/tmpdir.js'; if (common.isIBMi) @@ -45,8 +43,8 @@ async function testWatch({ fileToCreate, isolation, }) { - const ran1 = util.createDeferredPromise(); - const ran2 = util.createDeferredPromise(); + const ran1 = Promise.withResolvers(); + const ran2 = Promise.withResolvers(); const child = spawn(process.execPath, ['--watch', '--test', '--test-reporter=spec', isolation ? `--experimental-test-isolation=${isolation}` : '', diff --git a/typings/primordials.d.ts b/typings/primordials.d.ts index da00d43f515286..387a53025fde9d 100644 --- a/typings/primordials.d.ts +++ b/typings/primordials.d.ts @@ -531,6 +531,7 @@ declare namespace primordials { export const PromisePrototypeThen: UncurryThis export const PromisePrototypeCatch: UncurryThis export const PromisePrototypeFinally: UncurryThis + export const PromiseWithResolvers: typeof Promise.withResolvers export import Proxy = globalThis.Proxy import _globalThis = globalThis export { _globalThis as globalThis } From 714f272423396d94323c33baa3da8fa8022a2935 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCrg=C3=BCn=20Day=C4=B1o=C4=9Flu?= Date: Sat, 19 Oct 2024 12:18:10 +0200 Subject: [PATCH 53/93] lib: remove startsWith/endsWith primordials for char checks PR-URL: https://github.com/nodejs/node/pull/55407 Reviewed-By: Jacob Smith Reviewed-By: Antoine du Hamel Reviewed-By: Matteo Collina Reviewed-By: Mattias Buelens Reviewed-By: Ethan Arrowood --- lib/_http_agent.js | 2 +- lib/internal/main/watch_mode.js | 2 +- lib/internal/modules/esm/fetch_module.js | 7 +++---- lib/internal/modules/esm/resolve.js | 5 +++-- lib/internal/modules/helpers.js | 2 +- lib/internal/process/per_thread.js | 3 +-- lib/internal/process/pre_execution.js | 4 +--- lib/internal/repl/utils.js | 5 +---- lib/internal/url.js | 2 +- lib/internal/util/inspect.js | 5 +++-- lib/repl.js | 2 +- 11 files changed, 17 insertions(+), 22 deletions(-) diff --git a/lib/_http_agent.js b/lib/_http_agent.js index fb20b4780ba332..e8d31d83c26c51 100644 --- a/lib/_http_agent.js +++ b/lib/_http_agent.js @@ -341,7 +341,7 @@ function calculateServerName(options, req) { // abc:123 => abc // [::1] => ::1 // [::1]:123 => ::1 - if (hostHeader.startsWith('[')) { + if (hostHeader[0] === '[') { const index = hostHeader.indexOf(']'); if (index === -1) { // Leading '[', but no ']'. Need to do something... diff --git a/lib/internal/main/watch_mode.js b/lib/internal/main/watch_mode.js index 2fb689bd7d5abe..6e2528e64737c7 100644 --- a/lib/internal/main/watch_mode.js +++ b/lib/internal/main/watch_mode.js @@ -46,7 +46,7 @@ for (let i = 0; i < process.execArgv.length; i++) { if (StringPrototypeStartsWith(arg, '--watch')) { i++; const nextArg = process.execArgv[i]; - if (nextArg && StringPrototypeStartsWith(nextArg, '-')) { + if (nextArg && nextArg[0] === '-') { ArrayPrototypePush(argsWithoutWatchOptions, nextArg); } continue; diff --git a/lib/internal/modules/esm/fetch_module.js b/lib/internal/modules/esm/fetch_module.js index 07904e685becf8..097a2713f09c61 100644 --- a/lib/internal/modules/esm/fetch_module.js +++ b/lib/internal/modules/esm/fetch_module.js @@ -3,9 +3,7 @@ const { ObjectPrototypeHasOwnProperty, PromisePrototypeThen, SafeMap, - StringPrototypeEndsWith, StringPrototypeSlice, - StringPrototypeStartsWith, } = primordials; const { Buffer: { concat: BufferConcat }, @@ -248,8 +246,9 @@ allowList.addRange('127.0.0.1', '127.255.255.255'); async function isLocalAddress(hostname) { try { if ( - StringPrototypeStartsWith(hostname, '[') && - StringPrototypeEndsWith(hostname, ']') + hostname.length && + hostname[0] === '[' && + hostname[hostname.length - 1] === ']' ) { hostname = StringPrototypeSlice(hostname, 1, -1); } diff --git a/lib/internal/modules/esm/resolve.js b/lib/internal/modules/esm/resolve.js index 35925ef0817273..09c0265c8be2a2 100644 --- a/lib/internal/modules/esm/resolve.js +++ b/lib/internal/modules/esm/resolve.js @@ -373,8 +373,9 @@ function resolvePackageTargetString( } if (!StringPrototypeStartsWith(target, './')) { - if (internal && !StringPrototypeStartsWith(target, '../') && - !StringPrototypeStartsWith(target, '/')) { + if (internal && + target[0] !== '/' && + !StringPrototypeStartsWith(target, '../')) { // No need to convert target to string, since it's already presumed to be if (!URLCanParse(target)) { const exportTarget = pattern ? diff --git a/lib/internal/modules/helpers.js b/lib/internal/modules/helpers.js index 172f0fdc02a686..62c7dff1450a64 100644 --- a/lib/internal/modules/helpers.js +++ b/lib/internal/modules/helpers.js @@ -202,7 +202,7 @@ function addBuiltinLibsToObject(object, dummyModuleName) { ArrayPrototypeForEach(builtinModules, (name) => { // Neither add underscored modules, nor ones that contain slashes (e.g., // 'fs/promises') or ones that are already defined. - if (StringPrototypeStartsWith(name, '_') || + if (name[0] === '_' || StringPrototypeIncludes(name, '/') || ObjectPrototypeHasOwnProperty(object, name)) { return; diff --git a/lib/internal/process/per_thread.js b/lib/internal/process/per_thread.js index 9995dadfc648eb..54fde20e220ce4 100644 --- a/lib/internal/process/per_thread.js +++ b/lib/internal/process/per_thread.js @@ -25,7 +25,6 @@ const { StringPrototypeEndsWith, StringPrototypeReplace, StringPrototypeSlice, - StringPrototypeStartsWith, Symbol, SymbolIterator, } = primordials; @@ -296,7 +295,7 @@ function buildAllowedFlags() { } function isAccepted(to) { - if (!StringPrototypeStartsWith(to, '-') || to === '--') return true; + if (!to.length || to[0] !== '-' || to === '--') return true; const recursiveExpansion = aliases.get(to); if (recursiveExpansion) { if (recursiveExpansion[0] === to) diff --git a/lib/internal/process/pre_execution.js b/lib/internal/process/pre_execution.js index dfb672b49b4114..08945a62d4277b 100644 --- a/lib/internal/process/pre_execution.js +++ b/lib/internal/process/pre_execution.js @@ -13,7 +13,6 @@ const { ObjectDefineProperty, ObjectFreeze, String, - StringPrototypeStartsWith, globalThis, } = primordials; @@ -206,8 +205,7 @@ function patchProcessObject(expandArgv1) { let mainEntry; // If requested, update process.argv[1] to replace whatever the user provided with the resolved absolute file path of // the entry point. - if (expandArgv1 && process.argv[1] && - !StringPrototypeStartsWith(process.argv[1], '-')) { + if (expandArgv1 && process.argv[1] && process.argv[1][0] !== '-') { // Expand process.argv[1] into a full path. const path = require('path'); try { diff --git a/lib/internal/repl/utils.js b/lib/internal/repl/utils.js index 27e1011ec9daf6..126f8ae85d0977 100644 --- a/lib/internal/repl/utils.js +++ b/lib/internal/repl/utils.js @@ -10,12 +10,10 @@ const { RegExpPrototypeExec, SafeSet, SafeStringIterator, - StringPrototypeEndsWith, StringPrototypeIndexOf, StringPrototypeLastIndexOf, StringPrototypeReplaceAll, StringPrototypeSlice, - StringPrototypeStartsWith, StringPrototypeToLowerCase, StringPrototypeTrim, Symbol, @@ -298,8 +296,7 @@ function setupPreview(repl, contextSymbol, bufferSymbol, active) { function getInputPreview(input, callback) { // For similar reasons as `defaultEval`, wrap expressions starting with a // curly brace with parenthesis. - if (StringPrototypeStartsWith(input, '{') && - !StringPrototypeEndsWith(input, ';') && !wrapped) { + if (!wrapped && input[0] === '{' && input[input.length - 1] !== ';') { input = `(${input})`; wrapped = true; } diff --git a/lib/internal/url.js b/lib/internal/url.js index b05b75ac1c809c..dbddadfc8b401a 100644 --- a/lib/internal/url.js +++ b/lib/internal/url.js @@ -1416,7 +1416,7 @@ function urlToHttpOptions(url) { __proto__: null, ...url, // In case the url object was extended by the user. protocol: url.protocol, - hostname: hostname && StringPrototypeStartsWith(hostname, '[') ? + hostname: hostname && hostname[0] === '[' ? StringPrototypeSlice(hostname, 1, -1) : hostname, hash: url.hash, diff --git a/lib/internal/util/inspect.js b/lib/internal/util/inspect.js index ade91b3c5a6711..9480bcb2619bb1 100644 --- a/lib/internal/util/inspect.js +++ b/lib/internal/util/inspect.js @@ -1190,7 +1190,7 @@ function getClassBase(value, constructor, tag) { function getFunctionBase(value, constructor, tag) { const stringified = FunctionPrototypeToString(value); - if (StringPrototypeStartsWith(stringified, 'class') && StringPrototypeEndsWith(stringified, '}')) { + if (StringPrototypeStartsWith(stringified, 'class') && stringified[stringified.length - 1] === '}') { const slice = StringPrototypeSlice(stringified, 5, -1); const bracketIndex = StringPrototypeIndexOf(slice, '{'); if (bracketIndex !== -1 && @@ -1573,7 +1573,8 @@ function handleMaxCallStackSize(ctx, err, constructorName, indentationLvl) { function addNumericSeparator(integerString) { let result = ''; let i = integerString.length; - const start = StringPrototypeStartsWith(integerString, '-') ? 1 : 0; + assert(i !== 0); + const start = integerString[0] === '-' ? 1 : 0; for (; i >= start + 4; i -= 3) { result = `_${StringPrototypeSlice(integerString, i - 3, i)}${result}`; } diff --git a/lib/repl.js b/lib/repl.js index bbdf3e916daeb6..37b34af2917643 100644 --- a/lib/repl.js +++ b/lib/repl.js @@ -130,7 +130,7 @@ const { shouldColorize } = require('internal/util/colors'); const CJSModule = require('internal/modules/cjs/loader').Module; let _builtinLibs = ArrayPrototypeFilter( CJSModule.builtinModules, - (e) => !StringPrototypeStartsWith(e, '_'), + (e) => e[0] !== '_', ); const nodeSchemeBuiltinLibs = ArrayPrototypeMap( _builtinLibs, (lib) => `node:${lib}`); From adead268152af194e1a83ffce768341cf6fb807d Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Sat, 19 Oct 2024 16:42:29 +0200 Subject: [PATCH 54/93] crypto: include openssl/rand.h explicitly PR-URL: https://github.com/nodejs/node/pull/55425 Reviewed-By: James M Snell Reviewed-By: Richard Lau Reviewed-By: Marco Ippolito Reviewed-By: Yagiz Nizipli Reviewed-By: Anna Henningsen Reviewed-By: Luigi Pinca --- deps/ncrypto/ncrypto.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/deps/ncrypto/ncrypto.cc b/deps/ncrypto/ncrypto.cc index 457bd2f6c5b189..a38b4a280a3263 100644 --- a/deps/ncrypto/ncrypto.cc +++ b/deps/ncrypto/ncrypto.cc @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #if OPENSSL_VERSION_MAJOR >= 3 From 1b63a822ac73c71603d463f5622c968a329dcb8e Mon Sep 17 00:00:00 2001 From: Filip Skokan Date: Sat, 19 Oct 2024 23:14:05 +0100 Subject: [PATCH 55/93] test,crypto: update WebCryptoAPI WPT PR-URL: https://github.com/nodejs/node/pull/55427 Reviewed-By: Luigi Pinca Reviewed-By: Yagiz Nizipli --- test/fixtures/wpt/README.md | 2 +- .../ec_importKey_failures_ECDH.https.any.js | 10 + .../ec_importKey_failures_ECDSA.https.any.js | 10 + .../ec_importKey_failures_fixtures.js | 203 +++++++++ ...tKey_failures.js => importKey_failures.js} | 30 +- .../import_export/okp_importKey.js | 80 ++-- ...kp_importKey_failures_Ed25519.https.any.js | 107 +---- .../okp_importKey_failures_Ed448.https.any.js | 107 +---- ...okp_importKey_failures_X25519.https.any.js | 106 +---- .../okp_importKey_failures_X448.https.any.js | 107 +---- .../okp_importKey_failures_fixtures.js | 414 ++++++++++++++++++ test/fixtures/wpt/versions.json | 2 +- 12 files changed, 707 insertions(+), 471 deletions(-) create mode 100644 test/fixtures/wpt/WebCryptoAPI/import_export/ec_importKey_failures_ECDH.https.any.js create mode 100644 test/fixtures/wpt/WebCryptoAPI/import_export/ec_importKey_failures_ECDSA.https.any.js create mode 100644 test/fixtures/wpt/WebCryptoAPI/import_export/ec_importKey_failures_fixtures.js rename test/fixtures/wpt/WebCryptoAPI/import_export/{okp_importKey_failures.js => importKey_failures.js} (86%) create mode 100644 test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures_fixtures.js diff --git a/test/fixtures/wpt/README.md b/test/fixtures/wpt/README.md index 70075e77097cc1..c08f47c4a51173 100644 --- a/test/fixtures/wpt/README.md +++ b/test/fixtures/wpt/README.md @@ -32,7 +32,7 @@ Last update: - user-timing: https://github.com/web-platform-tests/wpt/tree/5ae85bf826/user-timing - wasm/jsapi: https://github.com/web-platform-tests/wpt/tree/cde25e7e3c/wasm/jsapi - wasm/webapi: https://github.com/web-platform-tests/wpt/tree/fd1b23eeaa/wasm/webapi -- WebCryptoAPI: https://github.com/web-platform-tests/wpt/tree/203d2ac459/WebCryptoAPI +- WebCryptoAPI: https://github.com/web-platform-tests/wpt/tree/bef6fa3566/WebCryptoAPI - webidl/ecmascript-binding/es-exceptions: https://github.com/web-platform-tests/wpt/tree/a370aad338/webidl/ecmascript-binding/es-exceptions - webmessaging/broadcastchannel: https://github.com/web-platform-tests/wpt/tree/e97fac4791/webmessaging/broadcastchannel - webstorage: https://github.com/web-platform-tests/wpt/tree/9dafa89214/webstorage diff --git a/test/fixtures/wpt/WebCryptoAPI/import_export/ec_importKey_failures_ECDH.https.any.js b/test/fixtures/wpt/WebCryptoAPI/import_export/ec_importKey_failures_ECDH.https.any.js new file mode 100644 index 00000000000000..423d399f19def4 --- /dev/null +++ b/test/fixtures/wpt/WebCryptoAPI/import_export/ec_importKey_failures_ECDH.https.any.js @@ -0,0 +1,10 @@ +// META: title=WebCryptoAPI: importKey() for Failures +// META: timeout=long +// META: script=../util/helpers.js +// META: script=ec_importKey_failures_fixtures.js +// META: script=importKey_failures.js + +// Setup: define the correct behaviors that should be sought, and create +// helper functions that generate all possible test parameters for +// different situations. +run_test(["ECDH"]); diff --git a/test/fixtures/wpt/WebCryptoAPI/import_export/ec_importKey_failures_ECDSA.https.any.js b/test/fixtures/wpt/WebCryptoAPI/import_export/ec_importKey_failures_ECDSA.https.any.js new file mode 100644 index 00000000000000..527940798a42a5 --- /dev/null +++ b/test/fixtures/wpt/WebCryptoAPI/import_export/ec_importKey_failures_ECDSA.https.any.js @@ -0,0 +1,10 @@ +// META: title=WebCryptoAPI: importKey() for Failures +// META: timeout=long +// META: script=../util/helpers.js +// META: script=ec_importKey_failures_fixtures.js +// META: script=importKey_failures.js + +// Setup: define the correct behaviors that should be sought, and create +// helper functions that generate all possible test parameters for +// different situations. +run_test(["ECDSA"]); diff --git a/test/fixtures/wpt/WebCryptoAPI/import_export/ec_importKey_failures_fixtures.js b/test/fixtures/wpt/WebCryptoAPI/import_export/ec_importKey_failures_fixtures.js new file mode 100644 index 00000000000000..796db364c2e2dc --- /dev/null +++ b/test/fixtures/wpt/WebCryptoAPI/import_export/ec_importKey_failures_fixtures.js @@ -0,0 +1,203 @@ +// Setup: define the correct behaviors that should be sought, and create +// helper functions that generate all possible test parameters for +// different situations. +function getValidKeyData(algorithm) { + return validKeyData[algorithm.namedCurve]; +} + +function getBadKeyLengthData(algorithm) { + return badKeyLengthData[algorithm.namedCurve]; +} + +function getMissingJWKFieldKeyData(algorithm) { + // The curve doesn't affect when testing for missing JWK fields. + return missingJWKFieldKeyData["P-521"]; +} + +function getMismatchedJWKKeyData(algorithm) { + // TODO: Implement test cases where the public key doesn't match the private key. + return []; +} + +var validKeyData = { + "P-521": [ + { + format: "spki", + data: new Uint8Array([48, 129, 155, 48, 16, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 5, 43, 129, 4, 0, 35, 3, 129, 134, 0, 4, 1, 86, 244, 121, 248, 223, 30, 32, 167, 255, 192, 76, 228, 32, 195, 225, 84, 174, 37, 25, 150, 190, 228, 47, 3, 75, 132, 212, 27, 116, 63, 52, 228, 95, 49, 27, 129, 58, 156, 222, 200, 205, 165, 155, 187, 189, 49, 212, 96, 179, 41, 37, 33, 231, 193, 183, 34, 229, 102, 124, 3, 219, 47, 174, 117, 63, 1, 80, 23, 54, 207, 226, 71, 57, 67, 32, 216, 228, 175, 194, 253, 57, 181, 169, 51, 16, 97, 184, 30, 34, 65, 40, 43, 158, 23, 137, 24, 34, 181, 183, 158, 5, 47, 69, 151, 181, 150, 67, 253, 57, 55, 156, 81, 189, 81, 37, 196, 244, 139, 195, 240, 37, 206, 60, 211, 105, 83, 40, 108, 203, 56, 251]), + }, + { + format: "raw", + data: new Uint8Array([4, 1, 86, 244, 121, 248, 223, 30, 32, 167, 255, 192, 76, 228, 32, 195, 225, 84, 174, 37, 25, 150, 190, 228, 47, 3, 75, 132, 212, 27, 116, 63, 52, 228, 95, 49, 27, 129, 58, 156, 222, 200, 205, 165, 155, 187, 189, 49, 212, 96, 179, 41, 37, 33, 231, 193, 183, 34, 229, 102, 124, 3, 219, 47, 174, 117, 63, 1, 80, 23, 54, 207, 226, 71, 57, 67, 32, 216, 228, 175, 194, 253, 57, 181, 169, 51, 16, 97, 184, 30, 34, 65, 40, 43, 158, 23, 137, 24, 34, 181, 183, 158, 5, 47, 69, 151, 181, 150, 67, 253, 57, 55, 156, 81, 189, 81, 37, 196, 244, 139, 195, 240, 37, 206, 60, 211, 105, 83, 40, 108, 203, 56, 251]), + }, + { + format:"pkcs8", + data: new Uint8Array([48, 129, 238, 2, 1, 0, 48, 16, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 5, 43, 129, 4, 0, 35, 4, 129, 214, 48, 129, 211, 2, 1, 1, 4, 66, 0, 244, 8, 117, 131, 104, 186, 147, 15, 48, 247, 106, 224, 84, 254, 92, 210, 206, 127, 218, 44, 159, 118, 166, 212, 54, 207, 117, 214, 108, 68, 11, 254, 99, 49, 199, 193, 114, 161, 36, 120, 25, 60, 130, 81, 72, 123, 201, 18, 99, 250, 80, 33, 127, 133, 255, 99, 111, 89, 205, 84, 110, 58, 180, 131, 180, 161, 129, 137, 3, 129, 134, 0, 4, 1, 86, 244, 121, 248, 223, 30, 32, 167, 255, 192, 76, 228, 32, 195, 225, 84, 174, 37, 25, 150, 190, 228, 47, 3, 75, 132, 212, 27, 116, 63, 52, 228, 95, 49, 27, 129, 58, 156, 222, 200, 205, 165, 155, 187, 189, 49, 212, 96, 179, 41, 37, 33, 231, 193, 183, 34, 229, 102, 124, 3, 219, 47, 174, 117, 63, 1, 80, 23, 54, 207, 226, 71, 57, 67, 32, 216, 228, 175, 194, 253, 57, 181, 169, 51, 16, 97, 184, 30, 34, 65, 40, 43, 158, 23, 137, 24, 34, 181, 183, 158, 5, 47, 69, 151, 181, 150, 67, 253, 57, 55, 156, 81, 189, 81, 37, 196, 244, 139, 195, 240, 37, 206, 60, 211, 105, 83, 40, 108, 203, 56, 251]), + }, + { + format: "jwk", + data: { + kty: "EC", + crv: "P-521", + x: "AVb0efjfHiCn_8BM5CDD4VSuJRmWvuQvA0uE1Bt0PzTkXzEbgTqc3sjNpZu7vTHUYLMpJSHnwbci5WZ8A9svrnU_", + y: "AVAXNs_iRzlDINjkr8L9ObWpMxBhuB4iQSgrnheJGCK1t54FL0WXtZZD_Tk3nFG9USXE9IvD8CXOPNNpUyhsyzj7", + d: "APQIdYNoupMPMPdq4FT-XNLOf9osn3am1DbPddZsRAv-YzHHwXKhJHgZPIJRSHvJEmP6UCF_hf9jb1nNVG46tIO0" + } + } + ], + "P-256": [ + { + format: "spki", + data: new Uint8Array([48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7, 3, 66, 0, 4, 210, 16, 176, 166, 249, 217, 240, 18, 134, 128, 88, 180, 63, 164, 244, 113, 1, 133, 67, 187, 160, 12, 146, 80, 223, 146, 87, 194, 172, 174, 93, 209, 206, 3, 117, 82, 212, 129, 69, 12, 227, 155, 77, 16, 149, 112, 27, 23, 91, 250, 179, 75, 142, 108, 9, 158, 24, 241, 193, 152, 53, 131, 97, 232]), + }, + { + format: "raw", + data: new Uint8Array([4, 210, 16, 176, 166, 249, 217, 240, 18, 134, 128, 88, 180, 63, 164, 244, 113, 1, 133, 67, 187, 160, 12, 146, 80, 223, 146, 87, 194, 172, 174, 93, 209, 206, 3, 117, 82, 212, 129, 69, 12, 227, 155, 77, 16, 149, 112, 27, 23, 91, 250, 179, 75, 142, 108, 9, 158, 24, 241, 193, 152, 53, 131, 97, 232]), + }, + { + format: "pkcs8", + data: new Uint8Array([48, 129, 135, 2, 1, 0, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7, 4, 109, 48, 107, 2, 1, 1, 4, 32, 19, 211, 58, 45, 90, 191, 156, 249, 235, 178, 31, 248, 96, 212, 174, 254, 110, 86, 231, 119, 144, 244, 222, 233, 180, 8, 132, 235, 211, 53, 68, 234, 161, 68, 3, 66, 0, 4, 210, 16, 176, 166, 249, 217, 240, 18, 134, 128, 88, 180, 63, 164, 244, 113, 1, 133, 67, 187, 160, 12, 146, 80, 223, 146, 87, 194, 172, 174, 93, 209, 206, 3, 117, 82, 212, 129, 69, 12, 227, 155, 77, 16, 149, 112, 27, 23, 91, 250, 179, 75, 142, 108, 9, 158, 24, 241, 193, 152, 53, 131, 97, 232]), + }, + { + format: "jwk", + data: { + kty: "EC", + crv: "P-256", + x: "0hCwpvnZ8BKGgFi0P6T0cQGFQ7ugDJJQ35JXwqyuXdE", + y: "zgN1UtSBRQzjm00QlXAbF1v6s0uObAmeGPHBmDWDYeg", + d: "E9M6LVq_nPnrsh_4YNSu_m5W53eQ9N7ptAiE69M1ROo" + } + }, + ], + "P-384": [ + { + format: "spki", + data: new Uint8Array([48, 118, 48, 16, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 5, 43, 129, 4, 0, 34, 3, 98, 0, 4, 33, 156, 20, 214, 102, 23, 179, 110, 198, 216, 133, 107, 56, 91, 115, 167, 77, 52, 79, 216, 174, 117, 239, 4, 100, 53, 221, 165, 78, 59, 68, 189, 95, 189, 235, 209, 208, 141, 214, 158, 45, 125, 193, 220, 33, 140, 180, 53, 189, 40, 19, 140, 199, 120, 51, 122, 132, 47, 107, 214, 27, 36, 14, 116, 36, 159, 36, 102, 124, 42, 88, 16, 167, 107, 252, 40, 224, 51, 95, 136, 166, 80, 29, 236, 1, 151, 109, 168, 90, 251, 0, 134, 156, 182, 172, 232]), + }, + { + format: "raw", + data: new Uint8Array([4, 33, 156, 20, 214, 102, 23, 179, 110, 198, 216, 133, 107, 56, 91, 115, 167, 77, 52, 79, 216, 174, 117, 239, 4, 100, 53, 221, 165, 78, 59, 68, 189, 95, 189, 235, 209, 208, 141, 214, 158, 45, 125, 193, 220, 33, 140, 180, 53, 189, 40, 19, 140, 199, 120, 51, 122, 132, 47, 107, 214, 27, 36, 14, 116, 36, 159, 36, 102, 124, 42, 88, 16, 167, 107, 252, 40, 224, 51, 95, 136, 166, 80, 29, 236, 1, 151, 109, 168, 90, 251, 0, 134, 156, 182, 172, 232]), + }, + { + format: "pkcs8", + data: new Uint8Array([48, 129, 182, 2, 1, 0, 48, 16, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 5, 43, 129, 4, 0, 34, 4, 129, 158, 48, 129, 155, 2, 1, 1, 4, 48, 69, 55, 181, 153, 7, 132, 211, 194, 210, 46, 150, 168, 249, 47, 161, 170, 73, 46, 232, 115, 229, 118, 164, 21, 130, 225, 68, 24, 60, 152, 136, 209, 14, 107, 158, 180, 206, 212, 178, 204, 64, 18, 228, 172, 94, 168, 64, 115, 161, 100, 3, 98, 0, 4, 33, 156, 20, 214, 102, 23, 179, 110, 198, 216, 133, 107, 56, 91, 115, 167, 77, 52, 79, 216, 174, 117, 239, 4, 100, 53, 221, 165, 78, 59, 68, 189, 95, 189, 235, 209, 208, 141, 214, 158, 45, 125, 193, 220, 33, 140, 180, 53, 189, 40, 19, 140, 199, 120, 51, 122, 132, 47, 107, 214, 27, 36, 14, 116, 36, 159, 36, 102, 124, 42, 88, 16, 167, 107, 252, 40, 224, 51, 95, 136, 166, 80, 29, 236, 1, 151, 109, 168, 90, 251, 0, 134, 156, 182, 172, 232]), + }, + { + format: "jwk", + data: { + kty: "EC", + crv: "P-384", + x: "IZwU1mYXs27G2IVrOFtzp000T9iude8EZDXdpU47RL1fvevR0I3Wni19wdwhjLQ1", + y: "vSgTjMd4M3qEL2vWGyQOdCSfJGZ8KlgQp2v8KOAzX4imUB3sAZdtqFr7AIactqzo", + d: "RTe1mQeE08LSLpao-S-hqkku6HPldqQVguFEGDyYiNEOa560ztSyzEAS5KxeqEBz" + } + } + ] +}; + +// Removed just the last byte. +var badKeyLengthData = { + "P-521": [ + { + format: "spki", + data: new Uint8Array([48, 129, 155, 48, 16, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 5, 43, 129, 4, 0, 35, 3, 129, 134, 0, 4, 1, 86, 244, 121, 248, 223, 30, 32, 167, 255, 192, 76, 228, 32, 195, 225, 84, 174, 37, 25, 150, 190, 228, 47, 3, 75, 132, 212, 27, 116, 63, 52, 228, 95, 49, 27, 129, 58, 156, 222, 200, 205, 165, 155, 187, 189, 49, 212, 96, 179, 41, 37, 33, 231, 193, 183, 34, 229, 102, 124, 3, 219, 47, 174, 117, 63, 1, 80, 23, 54, 207, 226, 71, 57, 67, 32, 216, 228, 175, 194, 253, 57, 181, 169, 51, 16, 97, 184, 30, 34, 65, 40, 43, 158, 23, 137, 24, 34, 181, 183, 158, 5, 47, 69, 151, 181, 150, 67, 253, 57, 55, 156, 81, 189, 81, 37, 196, 244, 139, 195, 240, 37, 206, 60, 211, 105, 83, 40, 108, 203, 56]), + }, + { + format: "raw", + data: new Uint8Array([4, 1, 86, 244, 121, 248, 223, 30, 32, 167, 255, 192, 76, 228, 32, 195, 225, 84, 174, 37, 25, 150, 190, 228, 47, 3, 75, 132, 212, 27, 116, 63, 52, 228, 95, 49, 27, 129, 58, 156, 222, 200, 205, 165, 155, 187, 189, 49, 212, 96, 179, 41, 37, 33, 231, 193, 183, 34, 229, 102, 124, 3, 219, 47, 174, 117, 63, 1, 80, 23, 54, 207, 226, 71, 57, 67, 32, 216, 228, 175, 194, 253, 57, 181, 169, 51, 16, 97, 184, 30, 34, 65, 40, 43, 158, 23, 137, 24, 34, 181, 183, 158, 5, 47, 69, 151, 181, 150, 67, 253, 57, 55, 156, 81, 189, 81, 37, 196, 244, 139, 195, 240, 37, 206, 60, 211, 105, 83, 40, 108, 203, 56]), + }, + { + format:"pkcs8", + data: new Uint8Array([48, 129, 238, 2, 1, 0, 48, 16, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 5, 43, 129, 4, 0, 35, 4, 129, 214, 48, 129, 211, 2, 1, 1, 4, 66, 0, 244, 8, 117, 131, 104, 186, 147, 15, 48, 247, 106, 224, 84, 254, 92, 210, 206, 127, 218, 44, 159, 118, 166, 212, 54, 207, 117, 214, 108, 68, 11, 254, 99, 49, 199, 193, 114, 161, 36, 120, 25, 60, 130, 81, 72, 123, 201, 18, 99, 250, 80, 33, 127, 133, 255, 99, 111, 89, 205, 84, 110, 58, 180, 131, 180, 161, 129, 137, 3, 129, 134, 0, 4, 1, 86, 244, 121, 248, 223, 30, 32, 167, 255, 192, 76, 228, 32, 195, 225, 84, 174, 37, 25, 150, 190, 228, 47, 3, 75, 132, 212, 27, 116, 63, 52, 228, 95, 49, 27, 129, 58, 156, 222, 200, 205, 165, 155, 187, 189, 49, 212, 96, 179, 41, 37, 33, 231, 193, 183, 34, 229, 102, 124, 3, 219, 47, 174, 117, 63, 1, 80, 23, 54, 207, 226, 71, 57, 67, 32, 216, 228, 175, 194, 253, 57, 181, 169, 51, 16, 97, 184, 30, 34, 65, 40, 43, 158, 23, 137, 24, 34, 181, 183, 158, 5, 47, 69, 151, 181, 150, 67, 253, 57, 55, 156, 81, 189, 81, 37, 196, 244, 139, 195, 240, 37, 206, 60, 211, 105, 83, 40, 108, 203, 56]), + }, + { + format: "jwk", + data: { + kty: "EC", + crv: "P-521", + x: "AVb0efjfHiCn_8BM5CDD4VSuJRmWvuQvA0uE1Bt0PzTkXzEbgTqc3sjNpZu7vTHUYLMpJSHnwbci5WZ8A9svrnU", + y: "AVAXNs_iRzlDINjkr8L9ObWpMxBhuB4iQSgrnheJGCK1t54FL0WXtZZD_Tk3nFG9USXE9IvD8CXOPNNpUyhsyzj7", + d: "APQIdYNoupMPMPdq4FT-XNLOf9osn3am1DbPddZsRAv-YzHHwXKhJHgZPIJRSHvJEmP6UCF_hf9jb1nNVG46tIO0" + } + } + ], + "P-256": [ + { + format: "spki", + data: new Uint8Array([48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7, 3, 66, 0, 4, 210, 16, 176, 166, 249, 217, 240, 18, 134, 128, 88, 180, 63, 164, 244, 113, 1, 133, 67, 187, 160, 12, 146, 80, 223, 146, 87, 194, 172, 174, 93, 209, 206, 3, 117, 82, 212, 129, 69, 12, 227, 155, 77, 16, 149, 112, 27, 23, 91, 250, 179, 75, 142, 108, 9, 158, 24, 241, 193, 152, 53, 131, 97]), + }, + { + format: "raw", + data: new Uint8Array([4, 210, 16, 176, 166, 249, 217, 240, 18, 134, 128, 88, 180, 63, 164, 244, 113, 1, 133, 67, 187, 160, 12, 146, 80, 223, 146, 87, 194, 172, 174, 93, 209, 206, 3, 117, 82, 212, 129, 69, 12, 227, 155, 77, 16, 149, 112, 27, 23, 91, 250, 179, 75, 142, 108, 9, 158, 24, 241, 193, 152, 53, 131, 97]), + }, + { + format: "pkcs8", + data: new Uint8Array([48, 129, 135, 2, 1, 0, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7, 4, 109, 48, 107, 2, 1, 1, 4, 32, 19, 211, 58, 45, 90, 191, 156, 249, 235, 178, 31, 248, 96, 212, 174, 254, 110, 86, 231, 119, 144, 244, 222, 233, 180, 8, 132, 235, 211, 53, 68, 234, 161, 68, 3, 66, 0, 4, 210, 16, 176, 166, 249, 217, 240, 18, 134, 128, 88, 180, 63, 164, 244, 113, 1, 133, 67, 187, 160, 12, 146, 80, 223, 146, 87, 194, 172, 174, 93, 209, 206, 3, 117, 82, 212, 129, 69, 12, 227, 155, 77, 16, 149, 112, 27, 23, 91, 250, 179, 75, 142, 108, 9, 158, 24, 241, 193, 152, 53, 131, 97]), + }, + { + format: "jwk", + data: { + kty: "EC", + crv: "P-256", + x: "0hCwpvnZ8BKGgFi0P6T0cQGFQ7ugDJJQ35JXwqyuXd", + y: "zgN1UtSBRQzjm00QlXAbF1v6s0uObAmeGPHBmDWDYeg", + d: "E9M6LVq_nPnrsh_4YNSu_m5W53eQ9N7ptAiE69M1ROo" + } + }, + ], + "P-384": [ + { + format: "spki", + data: new Uint8Array([48, 118, 48, 16, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 5, 43, 129, 4, 0, 34, 3, 98, 0, 4, 33, 156, 20, 214, 102, 23, 179, 110, 198, 216, 133, 107, 56, 91, 115, 167, 77, 52, 79, 216, 174, 117, 239, 4, 100, 53, 221, 165, 78, 59, 68, 189, 95, 189, 235, 209, 208, 141, 214, 158, 45, 125, 193, 220, 33, 140, 180, 53, 189, 40, 19, 140, 199, 120, 51, 122, 132, 47, 107, 214, 27, 36, 14, 116, 36, 159, 36, 102, 124, 42, 88, 16, 167, 107, 252, 40, 224, 51, 95, 136, 166, 80, 29, 236, 1, 151, 109, 168, 90, 251, 0, 134, 156, 182, 172]), + }, + { + format: "raw", + data: new Uint8Array([4, 33, 156, 20, 214, 102, 23, 179, 110, 198, 216, 133, 107, 56, 91, 115, 167, 77, 52, 79, 216, 174, 117, 239, 4, 100, 53, 221, 165, 78, 59, 68, 189, 95, 189, 235, 209, 208, 141, 214, 158, 45, 125, 193, 220, 33, 140, 180, 53, 189, 40, 19, 140, 199, 120, 51, 122, 132, 47, 107, 214, 27, 36, 14, 116, 36, 159, 36, 102, 124, 42, 88, 16, 167, 107, 252, 40, 224, 51, 95, 136, 166, 80, 29, 236, 1, 151, 109, 168, 90, 251, 0, 134, 156, 182, 172]), + }, + { + format: "pkcs8", + data: new Uint8Array([48, 129, 182, 2, 1, 0, 48, 16, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 5, 43, 129, 4, 0, 34, 4, 129, 158, 48, 129, 155, 2, 1, 1, 4, 48, 69, 55, 181, 153, 7, 132, 211, 194, 210, 46, 150, 168, 249, 47, 161, 170, 73, 46, 232, 115, 229, 118, 164, 21, 130, 225, 68, 24, 60, 152, 136, 209, 14, 107, 158, 180, 206, 212, 178, 204, 64, 18, 228, 172, 94, 168, 64, 115, 161, 100, 3, 98, 0, 4, 33, 156, 20, 214, 102, 23, 179, 110, 198, 216, 133, 107, 56, 91, 115, 167, 77, 52, 79, 216, 174, 117, 239, 4, 100, 53, 221, 165, 78, 59, 68, 189, 95, 189, 235, 209, 208, 141, 214, 158, 45, 125, 193, 220, 33, 140, 180, 53, 189, 40, 19, 140, 199, 120, 51, 122, 132, 47, 107, 214, 27, 36, 14, 116, 36, 159, 36, 102, 124, 42, 88, 16, 167, 107, 252, 40, 224, 51, 95, 136, 166, 80, 29, 236, 1, 151, 109, 168, 90, 251, 0, 134, 156, 182, 172]), + }, + { + format: "jwk", + data: { + kty: "EC", + crv: "P-384", + x: "IZwU1mYXs27G2IVrOFtzp000T9iude8EZDXdpU47RL1fvevR0I3Wni19wdwhjLQ", + y: "vSgTjMd4M3qEL2vWGyQOdCSfJGZ8KlgQp2v8KOAzX4imUB3sAZdtqFr7AIactqzo", + d: "RTe1mQeE08LSLpao-S-hqkku6HPldqQVguFEGDyYiNEOa560ztSyzEAS5KxeqEBz" + } + } + ] +}; + +var missingJWKFieldKeyData = { + "P-521": [ + { + param: "x", + data: { + kty: "EC", + crv: "P-521", + y: "AVAXNs_iRzlDINjkr8L9ObWpMxBhuB4iQSgrnheJGCK1t54FL0WXtZZD_Tk3nFG9USXE9IvD8CXOPNNpUyhsyzj7", + d: "APQIdYNoupMPMPdq4FT-XNLOf9osn3am1DbPddZsRAv-YzHHwXKhJHgZPIJRSHvJEmP6UCF_hf9jb1nNVG46tIO0" + } + }, + { + param: "kty", + data: { + crv: "P-521", + x: "AVb0efjfHiCn_8BM5CDD4VSuJRmWvuQvA0uE1Bt0PzTkXzEbgTqc3sjNpZu7vTHUYLMpJSHnwbci5WZ8A9svrnU_", + y: "AVAXNs_iRzlDINjkr8L9ObWpMxBhuB4iQSgrnheJGCK1t54FL0WXtZZD_Tk3nFG9USXE9IvD8CXOPNNpUyhsyzj7", + d: "APQIdYNoupMPMPdq4FT-XNLOf9osn3am1DbPddZsRAv-YzHHwXKhJHgZPIJRSHvJEmP6UCF_hf9jb1nNVG46tIO0" + } + }, + { + param: "crv", + data: { + kty: "EC", + x: "AVb0efjfHiCn_8BM5CDD4VSuJRmWvuQvA0uE1Bt0PzTkXzEbgTqc3sjNpZu7vTHUYLMpJSHnwbci5WZ8A9svrnU_", + y: "AVAXNs_iRzlDINjkr8L9ObWpMxBhuB4iQSgrnheJGCK1t54FL0WXtZZD_Tk3nFG9USXE9IvD8CXOPNNpUyhsyzj7", + d: "APQIdYNoupMPMPdq4FT-XNLOf9osn3am1DbPddZsRAv-YzHHwXKhJHgZPIJRSHvJEmP6UCF_hf9jb1nNVG46tIO0" + } + } + ] +}; diff --git a/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures.js b/test/fixtures/wpt/WebCryptoAPI/import_export/importKey_failures.js similarity index 86% rename from test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures.js rename to test/fixtures/wpt/WebCryptoAPI/import_export/importKey_failures.js index ebdb73616d6581..bba48401e616a5 100644 --- a/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures.js +++ b/test/fixtures/wpt/WebCryptoAPI/import_export/importKey_failures.js @@ -20,8 +20,10 @@ function run_test(algorithmNames) { var allTestVectors = [ // Parameters that should work for importKey / exportKey {name: "Ed25519", privateUsages: ["sign"], publicUsages: ["verify"]}, {name: "Ed448", privateUsages: ["sign"], publicUsages: ["verify"]}, + {name: "ECDSA", privateUsages: ["sign"], publicUsages: ["verify"]}, {name: "X25519", privateUsages: ["deriveKey", "deriveBits"], publicUsages: []}, {name: "X448", privateUsages: ["deriveKey", "deriveBits"], publicUsages: []}, + {name: "ECDH", privateUsages: ["deriveKey", "deriveBits"], publicUsages: []} ]; var testVectors = []; @@ -109,6 +111,10 @@ function run_test(algorithmNames) { return []; } + function isPrivateKey(data) { + return data.d !== undefined; + } + // Now test for properly handling errors // - Unsupported algorithm // - Bad usages for algorithm @@ -121,8 +127,8 @@ function run_test(algorithmNames) { // due to SyntaxError testVectors.forEach(function(vector) { var name = vector.name; - validKeyData.forEach(function(test) { - allAlgorithmSpecifiersFor(name).forEach(function(algorithm) { + allAlgorithmSpecifiersFor(name).forEach(function(algorithm) { + getValidKeyData(algorithm).forEach(function(test) { invalidUsages(validUsages(vector, test.format, test.data)).forEach(function(usages) { [true, false].forEach(function(extractable) { testError(test.format, algorithm, test.data, name, usages, extractable, "SyntaxError", "Bad usages"); @@ -136,8 +142,8 @@ function run_test(algorithmNames) { // Should fail due to SyntaxError testVectors.forEach(function(vector) { var name = vector.name; - validKeyData.filter((test) => test.format === 'pkcs8' || (test.format === 'jwk' && test.data.d)).forEach(function(test) { - allAlgorithmSpecifiersFor(name).forEach(function(algorithm) { + allAlgorithmSpecifiersFor(name).forEach(function(algorithm) { + getValidKeyData(algorithm).filter((test) => test.format === 'pkcs8' || (test.format === 'jwk' && isPrivateKey(test.data))).forEach(function(test) { [true, false].forEach(function(extractable) { testError(test.format, algorithm, test.data, name, [/* Empty usages */], extractable, "SyntaxError", "Empty usages"); }); @@ -145,11 +151,11 @@ function run_test(algorithmNames) { }); }); - // Algorithms normalize okay, usages ok. The length of the key must thouw a DataError exception. + // Algorithms normalize okay, usages ok. The length of the key must throw a DataError exception. testVectors.forEach(function(vector) { var name = vector.name; - badKeyLengthData.forEach(function(test) { - allAlgorithmSpecifiersFor(name).forEach(function(algorithm) { + allAlgorithmSpecifiersFor(name).forEach(function(algorithm) { + getBadKeyLengthData(algorithm).forEach(function(test) { allValidUsages(validUsages(vector, test.format, test.data)).forEach(function(usages) { [true, false].forEach(function(extractable) { testError(test.format, algorithm, test.data, name, usages, extractable, "DataError", "Bad key length"); @@ -159,11 +165,11 @@ function run_test(algorithmNames) { }); }); - // Algorithms normalize okay, usages ok and valid key. The lack of the mandatory JWK parameter must throw a syntax error. + // Algorithms normalize okay, usages ok and valid key. The lack of the mandatory JWK parameter must throw a DataError exception. testVectors.forEach(function(vector) { var name = vector.name; - missingJWKFieldKeyData.forEach(function(test) { - allAlgorithmSpecifiersFor(name).forEach(function(algorithm) { + allAlgorithmSpecifiersFor(name).forEach(function(algorithm) { + getMissingJWKFieldKeyData(algorithm).forEach(function(test) { allValidUsages(validUsages(vector, 'jwk', test.data)).forEach(function(usages) { [true, false].forEach(function(extractable) { testError('jwk', algorithm, test.data, name, usages, extractable, "DataError", "Missing JWK '" + test.param + "' parameter"); @@ -176,8 +182,8 @@ function run_test(algorithmNames) { // Algorithms normalize okay, usages ok and valid key. The public key is not compatible with the private key. testVectors.forEach(function(vector) { var name = vector.name; - invalidJWKKeyData.forEach(function(data) { - allAlgorithmSpecifiersFor(name).forEach(function(algorithm) { + allAlgorithmSpecifiersFor(name).forEach(function(algorithm) { + getMismatchedJWKKeyData(algorithm).forEach(function(data) { allValidUsages(vector.privateUsages).forEach(function(usages) { [true].forEach(function(extractable) { testError('jwk', algorithm, data, name, usages, extractable, "DataError", "Invalid key pair"); diff --git a/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey.js b/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey.js index 5699341d9e49d4..0e6a016fe20960 100644 --- a/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey.js +++ b/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey.js @@ -40,51 +40,55 @@ function runTests(algorithmName) { // Test importKey with a given key format and other parameters. If // extrable is true, export the key and verify that it matches the input. function testFormat(format, algorithm, keyData, keySize, usages, extractable) { - promise_test(function(test) { - return subtle.importKey(format, keyData[format], algorithm, extractable, usages). - then(function(key) { - assert_equals(key.constructor, CryptoKey, "Imported a CryptoKey object"); - assert_goodCryptoKey(key, algorithm, extractable, usages, (format === 'pkcs8' || (format === 'jwk' && keyData[format].d)) ? 'private' : 'public'); - if (!extractable) { - return; - } + [algorithm, algorithm.name].forEach((alg) => { + promise_test(function(test) { + return subtle.importKey(format, keyData[format], alg, extractable, usages). + then(function(key) { + assert_equals(key.constructor, CryptoKey, "Imported a CryptoKey object"); + assert_goodCryptoKey(key, algorithm, extractable, usages, (format === 'pkcs8' || (format === 'jwk' && keyData[format].d)) ? 'private' : 'public'); + if (!extractable) { + return; + } - return subtle.exportKey(format, key). - then(function(result) { - if (format !== "jwk") { - assert_true(equalBuffers(keyData[format], result), "Round trip works"); - } else { - assert_true(equalJwk(keyData[format], result), "Round trip works"); - } - }, function(err) { - assert_unreached("Threw an unexpected error: " + err.toString()); - }); - }, function(err) { - assert_unreached("Threw an unexpected error: " + err.toString()); - }); - }, "Good parameters: " + keySize.toString() + " bits " + parameterString(format, keyData[format], algorithm, extractable, usages)); + return subtle.exportKey(format, key). + then(function(result) { + if (format !== "jwk") { + assert_true(equalBuffers(keyData[format], result), "Round trip works"); + } else { + assert_true(equalJwk(keyData[format], result), "Round trip works"); + } + }, function(err) { + assert_unreached("Threw an unexpected error: " + err.toString()); + }); + }, function(err) { + assert_unreached("Threw an unexpected error: " + err.toString()); + }); + }, "Good parameters: " + keySize.toString() + " bits " + parameterString(format, keyData[format], alg, extractable, usages)); + }); } // Test importKey/exportKey "alg" behaviours, alg is ignored upon import and alg is missing for Ed25519 and Ed448 JWK export // https://github.com/WICG/webcrypto-secure-curves/pull/24 function testJwkAlgBehaviours(algorithm, keyData, crv, usages) { - promise_test(function(test) { - return subtle.importKey('jwk', { ...keyData, alg: 'this is ignored' }, algorithm, true, usages). - then(function(key) { - assert_equals(key.constructor, CryptoKey, "Imported a CryptoKey object"); - - return subtle.exportKey('jwk', key). - then(function(result) { - assert_equals(Object.keys(result).length, keyData.d ? 6 : 5, "Correct number of JWK members"); - assert_equals(result.alg, undefined, 'No JWK "alg" member is present'); - assert_true(equalJwk(keyData, result), "Round trip works"); - }, function(err) { + [algorithm, algorithm.name].forEach((alg) => { + promise_test(function(test) { + return subtle.importKey('jwk', { ...keyData, alg: 'this is ignored' }, alg, true, usages). + then(function(key) { + assert_equals(key.constructor, CryptoKey, "Imported a CryptoKey object"); + + return subtle.exportKey('jwk', key). + then(function(result) { + assert_equals(Object.keys(result).length, keyData.d ? 6 : 5, "Correct number of JWK members"); + assert_equals(result.alg, undefined, 'No JWK "alg" member is present'); + assert_true(equalJwk(keyData, result), "Round trip works"); + }, function(err) { assert_unreached("Threw an unexpected error: " + err.toString()); - }); - }, function(err) { - assert_unreached("Threw an unexpected error: " + err.toString()); - }); - }, "Good parameters with ignored JWK alg: " + crv.toString() + " " + parameterString('jwk', keyData, algorithm, true, usages)); + }); + }, function(err) { + assert_unreached("Threw an unexpected error: " + err.toString()); + }); + }, "Good parameters with ignored JWK alg: " + crv.toString() + " " + parameterString('jwk', keyData, alg, true, usages)); + }); } diff --git a/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures_Ed25519.https.any.js b/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures_Ed25519.https.any.js index 7453a3a55052b3..e07b796df83d19 100644 --- a/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures_Ed25519.https.any.js +++ b/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures_Ed25519.https.any.js @@ -1,110 +1,7 @@ // META: title=WebCryptoAPI: importKey() for Failures // META: timeout=long // META: script=../util/helpers.js -// META: script=okp_importKey_failures.js - -// Setup: define the correct behaviors that should be sought, and create -// helper functions that generate all possible test parameters for -// different situations. -var validKeyData = [ - { - format: "spki", - data: new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 112, 3, 33, 0, 216, 225, 137, 99, 216, 9, 212, 135, 217, 84, 154, 204, 174, 198, 116, 46, 126, 235, 162, 77, 138, 13, 59, 20, 183, 227, 202, 234, 6, 137, 61, 204]) - }, - { - format: "pkcs8", - data: new Uint8Array([48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 112, 4, 34, 4, 32, 243, 200, 244, 196, 141, 248, 120, 20, 110, 140, 211, 191, 109, 244, 229, 14, 56, 155, 167, 7, 78, 21, 194, 53, 45, 205, 93, 48, 141, 76, 168, 31]) - }, - { - format: "raw", - data: new Uint8Array([216, 225, 137, 99, 216, 9, 212, 135, 217, 84, 154, 204, 174, 198, 116, 46, 126, 235, 162, 77, 138, 13, 59, 20, 183, 227, 202, 234, 6, 137, 61, 204]) - }, - { - format: "jwk", - data: { - crv: "Ed25519", - d: "88j0xI34eBRujNO_bfTlDjibpwdOFcI1Lc1dMI1MqB8", - x: "2OGJY9gJ1IfZVJrMrsZ0Ln7rok2KDTsUt-PK6gaJPcw", - kty: "OKP" - }, - }, - { - format: "jwk", - data: { - crv: "Ed25519", - x: "2OGJY9gJ1IfZVJrMrsZ0Ln7rok2KDTsUt-PK6gaJPcw", - kty: "OKP" - }, - }, -]; - -// Removed just the last byte. -var badKeyLengthData = [ - { - format: "spki", - data: new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 112, 3, 33, 0, 216, 225, 137, 99, 216, 9, 212, 135, 217, 84, 154, 204, 174, 198, 116, 46, 126, 235, 162, 77, 138, 13, 59, 20, 183, 227, 202, 234, 6, 137, 61]) - }, - { - format: "pkcs8", - data: new Uint8Array([48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 112, 4, 34, 4, 32, 243, 200, 244, 196, 141, 248, 120, 20, 110, 140, 211, 191, 109, 244, 229, 14, 56, 155, 167, 7, 78, 21, 194, 53, 45, 205, 93, 48, 141, 76, 168]) - }, - { - format: "raw", - data: new Uint8Array([216, 225, 137, 99, 216, 9, 212, 135, 217, 84, 154, 204, 174, 198, 116, 46, 126, 235, 162, 77, 138, 13, 59, 20, 183, 227, 202, 234, 6, 137, 61]) - }, - { - format: "jwk", - data: { - crv: "Ed25519", - d: "88j0xI34eBRujNO_bfTlDjibpwdOFcI1Lc1dMI1MqB", - x: "2OGJY9gJ1IfZVJrMrsZ0Ln7rok2KDTsUt-PK6gaJPcw", - kty: "OKP" - } - }, - { - format: "jwk", - data: { - crv: "Ed25519", - x: "2OGJY9gJ1IfZVJrMrsZ0Ln7rok2KDTsUt-PK6gaJPc", - kty: "OKP" - } - }, -]; - -var missingJWKFieldKeyData = [ - { - param: "x", - data: { - crv: "Ed25519", - d: "88j0xI34eBRujNO_bfTlDjibpwdOFcI1Lc1dMI1MqB8", - kty: "OKP" - }, - }, - { - param: "kty", - data: { - crv: "Ed25519", - x: "11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo", - d: "88j0xI34eBRujNO_bfTlDjibpwdOFcI1Lc1dMI1MqB8", - }, - }, - { - param: "crv", - data: { - x: "11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo", - kty: "OKP" - }, - } -]; - -// The public key doesn't match the private key. -var invalidJWKKeyData = [ - { - crv: "Ed25519", - d: "88j0xI34eBRujNO_bfTlDjibpwdOFcI1Lc1dMI1MqB8", - x: "11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo", - kty: "OKP" - }, -]; +// META: script=okp_importKey_failures_fixtures.js +// META: script=importKey_failures.js run_test(["Ed25519"]); diff --git a/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures_Ed448.https.any.js b/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures_Ed448.https.any.js index db2d47827af329..8ff3de5c79d3ab 100644 --- a/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures_Ed448.https.any.js +++ b/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures_Ed448.https.any.js @@ -1,111 +1,8 @@ // META: title=WebCryptoAPI: importKey() for Failures // META: timeout=long // META: script=../util/helpers.js -// META: script=okp_importKey_failures.js +// META: script=okp_importKey_failures_fixtures.js +// META: script=importKey_failures.js -// Setup: define the correct behaviors that should be sought, and create -// helper functions that generate all possible test parameters for -// different situations. -var validKeyData = [ - { - format: "spki", - data: new Uint8Array([48, 67, 48, 5, 6, 3, 43, 101, 113, 3, 58, 0, 171, 75, 184, 133, 253, 125, 44, 90, 242, 78, 131, 113, 12, 255, 160, 199, 74, 87, 226, 116, 128, 29, 178, 5, 123, 11, 220, 94, 160, 50, 182, 254, 107, 199, 139, 128, 69, 54, 90, 235, 38, 232, 110, 31, 20, 253, 52, 157, 7, 196, 132, 149, 245, 164, 106, 90, 128]), - }, - { - format: "pkcs8", - data: new Uint8Array([48, 71, 2, 1, 0, 48, 5, 6, 3, 43, 101, 113, 4, 59, 4, 57, 14, 255, 3, 69, 140, 40, 224, 23, 156, 82, 29, 227, 18, 201, 105, 183, 131, 67, 72, 236, 171, 153, 26, 96, 227, 178, 233, 167, 158, 76, 217, 228, 128, 239, 41, 23, 18, 210, 200, 61, 4, 114, 114, 213, 201, 244, 40, 102, 79, 105, 109, 38, 112, 69, 143, 29, 46]), - }, - { - format: "raw", - data: new Uint8Array([171, 75, 184, 133, 253, 125, 44, 90, 242, 78, 131, 113, 12, 255, 160, 199, 74, 87, 226, 116, 128, 29, 178, 5, 123, 11, 220, 94, 160, 50, 182, 254, 107, 199, 139, 128, 69, 54, 90, 235, 38, 232, 110, 31, 20, 253, 52, 157, 7, 196, 132, 149, 245, 164, 106, 90, 128]), - }, - { - format: "jwk", - data: { - crv: "Ed448", - d: "Dv8DRYwo4BecUh3jEslpt4NDSOyrmRpg47Lpp55M2eSA7ykXEtLIPQRyctXJ9ChmT2ltJnBFjx0u", - x: "q0u4hf19LFryToNxDP-gx0pX4nSAHbIFewvcXqAytv5rx4uARTZa6ybobh8U_TSdB8SElfWkalqA", - kty: "OKP" - }, - }, - { - format: "jwk", - data: { - crv: "Ed448", - x: "q0u4hf19LFryToNxDP-gx0pX4nSAHbIFewvcXqAytv5rx4uARTZa6ybobh8U_TSdB8SElfWkalqA", - kty: "OKP" - }, - }, -]; - -// Removed just the last byte. -var badKeyLengthData = [ - { - format: "spki", - data: new Uint8Array([48, 67, 48, 5, 6, 3, 43, 101, 113, 3, 58, 0, 171, 75, 184, 133, 253, 125, 44, 90, 242, 78, 131, 113, 12, 255, 160, 199, 74, 87, 226, 116, 128, 29, 178, 5, 123, 11, 220, 94, 160, 50, 182, 254, 107, 199, 139, 128, 69, 54, 90, 235, 38, 232, 110, 31, 20, 253, 52, 157, 7, 196, 132, 149, 245, 164, 106, 90]), - }, - { - format: "pkcs8", - data: new Uint8Array([48, 71, 2, 1, 0, 48, 5, 6, 3, 43, 101, 113, 4, 59, 4, 57, 14, 255, 3, 69, 140, 40, 224, 23, 156, 82, 29, 227, 18, 201, 105, 183, 131, 67, 72, 236, 171, 153, 26, 96, 227, 178, 233, 167, 158, 76, 217, 228, 128, 239, 41, 23, 18, 210, 200, 61, 4, 114, 114, 213, 201, 244, 40, 102, 79, 105, 109, 38, 112, 69, 143, 29]), - }, - { - format: "raw", - data: new Uint8Array([171, 75, 184, 133, 253, 125, 44, 90, 242, 78, 131, 113, 12, 255, 160, 199, 74, 87, 226, 116, 128, 29, 178, 5, 123, 11, 220, 94, 160, 50, 182, 254, 107, 199, 139, 128, 69, 54, 90, 235, 38, 232, 110, 31, 20, 253, 52, 157, 7, 196, 132, 149, 245, 164, 106, 90]), - }, - { - format: "jwk", - data: { - crv: "Ed448", - d: "Dv8DRYwo4BecUh3jEslpt4NDSOyrmRpg47Lpp55M2eSA7ykXEtLIPQRyctXJ9ChmT2ltJnBFjx0", - x: "q0u4hf19LFryToNxDP-gx0pX4nSAHbIFewvcXqAytv5rx4uARTZa6ybobh8U_TSdB8SElfWkalqA", - kty: "OKP" - }, - }, - { - format: "jwk", - data: { - crv: "Ed448", - x: "q0u4hf19LFryToNxDP-gx0pX4nSAHbIFewvcXqAytv5rx4uARTZa6ybobh8U_TSdB8SElfWkalq", - kty: "OKP" - }, - }, -]; - -var missingJWKFieldKeyData = [ - { - param: "x", - data: { - crv: "Ed448", - d: "Dv8DRYwo4BecUh3jEslpt4NDSOyrmRpg47Lpp55M2eSA7ykXEtLIPQRyctXJ9ChmT2ltJnBFjx0u", - kty: "OKP" - } - }, - { - param: "kty", - data: { - crv: "Ed448", - d: "Dv8DRYwo4BecUh3jEslpt4NDSOyrmRpg47Lpp55M2eSA7ykXEtLIPQRyctXJ9ChmT2ltJnBFjx0u", - x: "q0u4hf19LFryToNxDP-gx0pX4nSAHbIFewvcXqAytv5rx4uARTZa6ybobh8U_TSdB8SElfWkalqA", - } - }, - { - param: "crv", - data: { - d: "Dv8DRYwo4BecUh3jEslpt4NDSOyrmRpg47Lpp55M2eSA7ykXEtLIPQRyctXJ9ChmT2ltJnBFjx0u", - x: "q0u4hf19LFryToNxDP-gx0pX4nSAHbIFewvcXqAytv5rx4uARTZa6ybobh8U_TSdB8SElfWkalqA", - kty: "OKP" - } - } -]; - -// The public key doesn't match the private key. -var invalidJWKKeyData = [ - { - crv: "Ed448", - d: "Dv8DRYwo4BecUh3jEslpt4NDSOyrmRpg47Lpp55M2eSA7ykXEtLIPQRyctXJ9ChmT2ltJnBFjx0u", - x: "X9dEm1m0Yf0s54fsYWrUah2hNCSFpw4fig6nXYDpZ3jt8SR2m0bHBhvWeD3x5Q9s0foavq_oJWGA", - kty: "OKP" - }, -]; run_test(["Ed448"]); diff --git a/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X25519.https.any.js b/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X25519.https.any.js index d4d099f7656033..a0116bee888512 100644 --- a/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X25519.https.any.js +++ b/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X25519.https.any.js @@ -1,110 +1,8 @@ // META: title=WebCryptoAPI: importKey() for Failures // META: timeout=long // META: script=../util/helpers.js -// META: script=okp_importKey_failures.js +// META: script=okp_importKey_failures_fixtures.js +// META: script=importKey_failures.js -// Setup: define the correct behaviors that should be sought, and create -// helper functions that generate all possible test parameters for -// different situations. -var validKeyData = [ - { - format: "spki", - data: new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 110, 3, 33, 0, 28, 242, 177, 230, 2, 46, 197, 55, 55, 30, 215, 245, 62, 84, 250, 17, 84, 216, 62, 152, 235, 100, 234, 81, 250, 229, 179, 48, 124, 254, 151, 6]), - }, - { - format: "pkcs8", - data: new Uint8Array([48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 110, 4, 34, 4, 32, 200, 131, 142, 118, 208, 87, 223, 183, 216, 201, 90, 105, 225, 56, 22, 10, 221, 99, 115, 253, 113, 164, 210, 118, 187, 86, 227, 168, 27, 100, 255, 97]), - }, - { - format: "raw", - data: new Uint8Array([28, 242, 177, 230, 2, 46, 197, 55, 55, 30, 215, 245, 62, 84, 250, 17, 84, 216, 62, 152, 235, 100, 234, 81, 250, 229, 179, 48, 124, 254, 151, 6]), - }, - { - format: "jwk", - data: { - crv: "X25519", - d: "yIOOdtBX37fYyVpp4TgWCt1jc_1xpNJ2u1bjqBtk_2E", - x: "HPKx5gIuxTc3Htf1PlT6EVTYPpjrZOpR-uWzMHz-lwY", - kty: "OKP" - }, - }, - { - format: "jwk", - data: { - crv: "X25519", - x: "HPKx5gIuxTc3Htf1PlT6EVTYPpjrZOpR-uWzMHz-lwY", - kty: "OKP" - }, - }, -]; - -// Removed just the last byte. -var badKeyLengthData = [ - { - format: "spki", - data: new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 110, 3, 33, 0, 28, 242, 177, 230, 2, 46, 197, 55, 55, 30, 215, 245, 62, 84, 250, 17, 84, 216, 62, 152, 235, 100, 234, 81, 250, 229, 179, 48, 124, 254, 151]), - }, - { - format: "pkcs8", - data: new Uint8Array([48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 110, 4, 34, 4, 32, 200, 131, 142, 118, 208, 87, 223, 183, 216, 201, 90, 105, 225, 56, 22, 10, 221, 99, 115, 253, 113, 164, 210, 118, 187, 86, 227, 168, 27, 100, 255]), - }, - { - format: "raw", - data: new Uint8Array([28, 242, 177, 230, 2, 46, 197, 55, 55, 30, 215, 245, 62, 84, 250, 17, 84, 216, 62, 152, 235, 100, 234, 81, 250, 229, 179, 48, 124, 254, 151]), - }, - { - format: "jwk", - data: { - crv: "X25519", - x: "HPKx5gIuxTc3Htf1PlT6EVTYPpjrZOpR-uWzMHz-lw", - kty: "OKP" - } - }, - { - format: "jwk", - data: { - crv: "X25519", - d: "yIOOdtBX37fYyVpp4TgWCt1jc_1xpNJ2u1bjqBtk_2", - x: "HPKx5gIuxTc3Htf1PlT6EVTYPpjrZOpR-uWzMHz-lwY", - kty: "OKP" - }, - }, -]; - -var missingJWKFieldKeyData = [ - { - param: "x", - data: { - crv: "X25519", - d: "yIOOdtBX37fYyVpp4TgWCt1jc_1xpNJ2u1bjqBtk_2E", - kty: "OKP" - }, - }, - { - param: "kty", - data: { - crv: "X25519", - d: "yIOOdtBX37fYyVpp4TgWCt1jc_1xpNJ2u1bjqBtk_2E", - x: "HPKx5gIuxTc3Htf1PlT6EVTYPpjrZOpR-uWzMHz-lwY", - }, - }, - { - param: "crv", - data: { - x: "HPKx5gIuxTc3Htf1PlT6EVTYPpjrZOpR-uWzMHz-lwY", - kty: "OKP" - }, - } -]; - -// The public key doesn't match the private key. -var invalidJWKKeyData = [ - { - crv: "X25519", - d: "yIOOdtBX37fYyVpp4TgWCt1jc_1xpNJ2u1bjqBtk_2E", - x: "hSDwCYkwp1R0i33ctD73Wg2_Og0mOBr066SpjqqbTmo", - kty: "OKP" - }, -]; run_test(["X25519"]); diff --git a/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.js b/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.js index d8ac902e672566..eccce68fac731c 100644 --- a/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.js +++ b/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.js @@ -1,111 +1,8 @@ // META: title=WebCryptoAPI: importKey() for Failures // META: timeout=long // META: script=../util/helpers.js -// META: script=okp_importKey_failures.js +// META: script=okp_importKey_failures_fixtures.js +// META: script=importKey_failures.js -// Setup: define the correct behaviors that should be sought, and create -// helper functions that generate all possible test parameters for -// different situations. -var validKeyData = [ - { - format: "spki", - data: new Uint8Array([48, 66, 48, 5, 6, 3, 43, 101, 111, 3, 57, 0, 182, 4, 161, 209, 165, 205, 29, 148, 38, 213, 97, 239, 99, 10, 158, 177, 108, 190, 105, 213, 185, 202, 97, 94, 220, 83, 99, 62, 251, 82, 234, 49, 230, 230, 160, 161, 219, 172, 198, 231, 108, 188, 230, 72, 45, 126, 75, 163, 213, 93, 158, 128, 39, 101, 206, 111]), - }, - { - format: "pkcs8", - data: new Uint8Array([48, 70, 2, 1, 0, 48, 5, 6, 3, 43, 101, 111, 4, 58, 4, 56, 88, 199, 210, 154, 62, 181, 25, 178, 157, 0, 207, 177, 145, 187, 100, 252, 109, 138, 66, 216, 241, 113, 118, 39, 43, 137, 242, 39, 45, 24, 25, 41, 92, 101, 37, 192, 130, 150, 113, 176, 82, 239, 7, 39, 83, 15, 24, 142, 49, 208, 204, 83, 191, 38, 146, 158]), - }, - { - format: "raw", - data: new Uint8Array([182, 4, 161, 209, 165, 205, 29, 148, 38, 213, 97, 239, 99, 10, 158, 177, 108, 190, 105, 213, 185, 202, 97, 94, 220, 83, 99, 62, 251, 82, 234, 49, 230, 230, 160, 161, 219, 172, 198, 231, 108, 188, 230, 72, 45, 126, 75, 163, 213, 93, 158, 128, 39, 101, 206, 111]), - }, - { - format: "jwk", - data: { - crv: "X448", - d: "WMfSmj61GbKdAM-xkbtk_G2KQtjxcXYnK4nyJy0YGSlcZSXAgpZxsFLvBydTDxiOMdDMU78mkp4", - x: "tgSh0aXNHZQm1WHvYwqesWy-adW5ymFe3FNjPvtS6jHm5qCh26zG52y85kgtfkuj1V2egCdlzm8", - kty: "OKP" - }, - }, - { - format: "jwk", - data: { - crv: "X448", - x: "tgSh0aXNHZQm1WHvYwqesWy-adW5ymFe3FNjPvtS6jHm5qCh26zG52y85kgtfkuj1V2egCdlzm8", - kty: "OKP" - }, - }, -]; - -// Removed just the last byte. -var badKeyLengthData = [ - { - format: "spki", - data: new Uint8Array([48, 66, 48, 5, 6, 3, 43, 101, 111, 3, 57, 0, 182, 4, 161, 209, 165, 205, 29, 148, 38, 213, 97, 239, 99, 10, 158, 177, 108, 190, 105, 213, 185, 202, 97, 94, 220, 83, 99, 62, 251, 82, 234, 49, 230, 230, 160, 161, 219, 172, 198, 231, 108, 188, 230, 72, 45, 126, 75, 163, 213, 93, 158, 128, 39, 101, 206]), - }, - { - format: "pkcs8", - data: new Uint8Array([48, 70, 2, 1, 0, 48, 5, 6, 3, 43, 101, 111, 4, 58, 4, 56, 88, 199, 210, 154, 62, 181, 25, 178, 157, 0, 207, 177, 145, 187, 100, 252, 109, 138, 66, 216, 241, 113, 118, 39, 43, 137, 242, 39, 45, 24, 25, 41, 92, 101, 37, 192, 130, 150, 113, 176, 82, 239, 7, 39, 83, 15, 24, 142, 49, 208, 204, 83, 191, 38, 146]), - }, - { - format: "raw", - data: new Uint8Array([182, 4, 161, 209, 165, 205, 29, 148, 38, 213, 97, 239, 99, 10, 158, 177, 108, 190, 105, 213, 185, 202, 97, 94, 220, 83, 99, 62, 251, 82, 234, 49, 230, 230, 160, 161, 219, 172, 198, 231, 108, 188, 230, 72, 45, 126, 75, 163, 213, 93, 158, 128, 39, 101, 206]), - }, - { - format: "jwk", - data: { - crv: "X448", - d: "WMfSmj61GbKdAM-xkbtk_G2KQtjxcXYnK4nyJy0YGSlcZSXAgpZxsFLvBydTDxiOMdDMU78mkp", - x: "tgSh0aXNHZQm1WHvYwqesWy-adW5ymFe3FNjPvtS6jHm5qCh26zG52y85kgtfkuj1V2egCdlzm8", - kty: "OKP" - }, - }, - { - format: "jwk", - data: { - crv: "X448", - x: "tgSh0aXNHZQm1WHvYwqesWy-adW5ymFe3FNjPvtS6jHm5qCh26zG52y85kgtfkuj1V2egCdlzm", - kty: "OKP" - }, - }, -]; - -var missingJWKFieldKeyData = [ - { - param: "x", - data: { - crv: "X448", - d: "WMfSmj61GbKdAM-xkbtk_G2KQtjxcXYnK4nyJy0YGSlcZSXAgpZxsFLvBydTDxiOMdDMU78mkp4", - kty: "OKP" - } - }, - { - param: "kty", - data: { - crv: "X448", - d: "WMfSmj61GbKdAM-xkbtk_G2KQtjxcXYnK4nyJy0YGSlcZSXAgpZxsFLvBydTDxiOMdDMU78mkp4", - x: "tgSh0aXNHZQm1WHvYwqesWy-adW5ymFe3FNjPvtS6jHm5qCh26zG52y85kgtfkuj1V2egCdlzm8", - } - }, - { - param: "crv", - data: { - x: "tgSh0aXNHZQm1WHvYwqesWy-adW5ymFe3FNjPvtS6jHm5qCh26zG52y85kgtfkuj1V2egCdlzm8", - kty: "OKP" - } - } -]; - -// The public key doesn't match the private key. -var invalidJWKKeyData = [ - { - - crv: "X448", - kty: "OKP", - d: "WMfSmj61GbKdAM-xkbtk_G2KQtjxcXYnK4nyJy0YGSlcZSXAgpZxsFLvBydTDxiOMdDMU78mkp4", - x: "mwj3zDG34+Z9ItWuoSEHSic70rg94Jxj+qc9LCLF2bvINmRyQdlT1AxbEtqIEg1TF3+A5TLEH6A", - }, -]; run_test(["X448"]); diff --git a/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures_fixtures.js b/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures_fixtures.js new file mode 100644 index 00000000000000..88f552291cdf6b --- /dev/null +++ b/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey_failures_fixtures.js @@ -0,0 +1,414 @@ +// Setup: define the correct behaviors that should be sought, and create +// helper functions that generate all possible test parameters for +// different situations. +function getValidKeyData(algorithm) { + return validKeyData[algorithm.name]; +} + +function getBadKeyLengthData(algorithm) { + return badKeyLengthData[algorithm.name]; +} + +function getMissingJWKFieldKeyData(algorithm) { + return missingJWKFieldKeyData[algorithm.name]; +} + +function getMismatchedJWKKeyData(algorithm) { + return mismatchedJWKKeyData[algorithm.name]; +} + +var validKeyData = { + "Ed25519": [ + { + format: "spki", + data: new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 112, 3, 33, 0, 216, 225, 137, 99, 216, 9, 212, 135, 217, 84, 154, 204, 174, 198, 116, 46, 126, 235, 162, 77, 138, 13, 59, 20, 183, 227, 202, 234, 6, 137, 61, 204]) + }, + { + format: "pkcs8", + data: new Uint8Array([48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 112, 4, 34, 4, 32, 243, 200, 244, 196, 141, 248, 120, 20, 110, 140, 211, 191, 109, 244, 229, 14, 56, 155, 167, 7, 78, 21, 194, 53, 45, 205, 93, 48, 141, 76, 168, 31]) + }, + { + format: "raw", + data: new Uint8Array([216, 225, 137, 99, 216, 9, 212, 135, 217, 84, 154, 204, 174, 198, 116, 46, 126, 235, 162, 77, 138, 13, 59, 20, 183, 227, 202, 234, 6, 137, 61, 204]) + }, + { + format: "jwk", + data: { + crv: "Ed25519", + d: "88j0xI34eBRujNO_bfTlDjibpwdOFcI1Lc1dMI1MqB8", + x: "2OGJY9gJ1IfZVJrMrsZ0Ln7rok2KDTsUt-PK6gaJPcw", + kty: "OKP" + }, + }, + { + format: "jwk", + data: { + crv: "Ed25519", + x: "2OGJY9gJ1IfZVJrMrsZ0Ln7rok2KDTsUt-PK6gaJPcw", + kty: "OKP" + }, + } + ], + "Ed448": [ + { + format: "spki", + data: new Uint8Array([48, 67, 48, 5, 6, 3, 43, 101, 113, 3, 58, 0, 171, 75, 184, 133, 253, 125, 44, 90, 242, 78, 131, 113, 12, 255, 160, 199, 74, 87, 226, 116, 128, 29, 178, 5, 123, 11, 220, 94, 160, 50, 182, 254, 107, 199, 139, 128, 69, 54, 90, 235, 38, 232, 110, 31, 20, 253, 52, 157, 7, 196, 132, 149, 245, 164, 106, 90, 128]), + }, + { + format: "pkcs8", + data: new Uint8Array([48, 71, 2, 1, 0, 48, 5, 6, 3, 43, 101, 113, 4, 59, 4, 57, 14, 255, 3, 69, 140, 40, 224, 23, 156, 82, 29, 227, 18, 201, 105, 183, 131, 67, 72, 236, 171, 153, 26, 96, 227, 178, 233, 167, 158, 76, 217, 228, 128, 239, 41, 23, 18, 210, 200, 61, 4, 114, 114, 213, 201, 244, 40, 102, 79, 105, 109, 38, 112, 69, 143, 29, 46]), + }, + { + format: "raw", + data: new Uint8Array([171, 75, 184, 133, 253, 125, 44, 90, 242, 78, 131, 113, 12, 255, 160, 199, 74, 87, 226, 116, 128, 29, 178, 5, 123, 11, 220, 94, 160, 50, 182, 254, 107, 199, 139, 128, 69, 54, 90, 235, 38, 232, 110, 31, 20, 253, 52, 157, 7, 196, 132, 149, 245, 164, 106, 90, 128]), + }, + { + format: "jwk", + data: { + crv: "Ed448", + d: "Dv8DRYwo4BecUh3jEslpt4NDSOyrmRpg47Lpp55M2eSA7ykXEtLIPQRyctXJ9ChmT2ltJnBFjx0u", + x: "q0u4hf19LFryToNxDP-gx0pX4nSAHbIFewvcXqAytv5rx4uARTZa6ybobh8U_TSdB8SElfWkalqA", + kty: "OKP" + }, + }, + { + format: "jwk", + data: { + crv: "Ed448", + x: "q0u4hf19LFryToNxDP-gx0pX4nSAHbIFewvcXqAytv5rx4uARTZa6ybobh8U_TSdB8SElfWkalqA", + kty: "OKP" + }, + }, + ], + "X25519": [ + { + format: "spki", + data: new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 110, 3, 33, 0, 28, 242, 177, 230, 2, 46, 197, 55, 55, 30, 215, 245, 62, 84, 250, 17, 84, 216, 62, 152, 235, 100, 234, 81, 250, 229, 179, 48, 124, 254, 151, 6]), + }, + { + format: "pkcs8", + data: new Uint8Array([48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 110, 4, 34, 4, 32, 200, 131, 142, 118, 208, 87, 223, 183, 216, 201, 90, 105, 225, 56, 22, 10, 221, 99, 115, 253, 113, 164, 210, 118, 187, 86, 227, 168, 27, 100, 255, 97]), + }, + { + format: "raw", + data: new Uint8Array([28, 242, 177, 230, 2, 46, 197, 55, 55, 30, 215, 245, 62, 84, 250, 17, 84, 216, 62, 152, 235, 100, 234, 81, 250, 229, 179, 48, 124, 254, 151, 6]), + }, + { + format: "jwk", + data: { + crv: "X25519", + d: "yIOOdtBX37fYyVpp4TgWCt1jc_1xpNJ2u1bjqBtk_2E", + x: "HPKx5gIuxTc3Htf1PlT6EVTYPpjrZOpR-uWzMHz-lwY", + kty: "OKP" + }, + }, + { + format: "jwk", + data: { + crv: "X25519", + x: "HPKx5gIuxTc3Htf1PlT6EVTYPpjrZOpR-uWzMHz-lwY", + kty: "OKP" + }, + }, + ], + "X448": [ + { + format: "spki", + data: new Uint8Array([48, 66, 48, 5, 6, 3, 43, 101, 111, 3, 57, 0, 182, 4, 161, 209, 165, 205, 29, 148, 38, 213, 97, 239, 99, 10, 158, 177, 108, 190, 105, 213, 185, 202, 97, 94, 220, 83, 99, 62, 251, 82, 234, 49, 230, 230, 160, 161, 219, 172, 198, 231, 108, 188, 230, 72, 45, 126, 75, 163, 213, 93, 158, 128, 39, 101, 206, 111]), + }, + { + format: "pkcs8", + data: new Uint8Array([48, 70, 2, 1, 0, 48, 5, 6, 3, 43, 101, 111, 4, 58, 4, 56, 88, 199, 210, 154, 62, 181, 25, 178, 157, 0, 207, 177, 145, 187, 100, 252, 109, 138, 66, 216, 241, 113, 118, 39, 43, 137, 242, 39, 45, 24, 25, 41, 92, 101, 37, 192, 130, 150, 113, 176, 82, 239, 7, 39, 83, 15, 24, 142, 49, 208, 204, 83, 191, 38, 146, 158]), + }, + { + format: "raw", + data: new Uint8Array([182, 4, 161, 209, 165, 205, 29, 148, 38, 213, 97, 239, 99, 10, 158, 177, 108, 190, 105, 213, 185, 202, 97, 94, 220, 83, 99, 62, 251, 82, 234, 49, 230, 230, 160, 161, 219, 172, 198, 231, 108, 188, 230, 72, 45, 126, 75, 163, 213, 93, 158, 128, 39, 101, 206, 111]), + }, + { + format: "jwk", + data: { + crv: "X448", + d: "WMfSmj61GbKdAM-xkbtk_G2KQtjxcXYnK4nyJy0YGSlcZSXAgpZxsFLvBydTDxiOMdDMU78mkp4", + x: "tgSh0aXNHZQm1WHvYwqesWy-adW5ymFe3FNjPvtS6jHm5qCh26zG52y85kgtfkuj1V2egCdlzm8", + kty: "OKP" + }, + }, + { + format: "jwk", + data: { + crv: "X448", + x: "tgSh0aXNHZQm1WHvYwqesWy-adW5ymFe3FNjPvtS6jHm5qCh26zG52y85kgtfkuj1V2egCdlzm8", + kty: "OKP" + }, + }, + ], +}; + +// Removed just the last byte. +var badKeyLengthData = { + "Ed25519": [ + { + format: "spki", + data: new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 112, 3, 33, 0, 216, 225, 137, 99, 216, 9, 212, 135, 217, 84, 154, 204, 174, 198, 116, 46, 126, 235, 162, 77, 138, 13, 59, 20, 183, 227, 202, 234, 6, 137, 61]) + }, + { + format: "pkcs8", + data: new Uint8Array([48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 112, 4, 34, 4, 32, 243, 200, 244, 196, 141, 248, 120, 20, 110, 140, 211, 191, 109, 244, 229, 14, 56, 155, 167, 7, 78, 21, 194, 53, 45, 205, 93, 48, 141, 76, 168]) + }, + { + format: "raw", + data: new Uint8Array([216, 225, 137, 99, 216, 9, 212, 135, 217, 84, 154, 204, 174, 198, 116, 46, 126, 235, 162, 77, 138, 13, 59, 20, 183, 227, 202, 234, 6, 137, 61]) + }, + { + format: "jwk", + data: { + crv: "Ed25519", + d: "88j0xI34eBRujNO_bfTlDjibpwdOFcI1Lc1dMI1MqB", + x: "2OGJY9gJ1IfZVJrMrsZ0Ln7rok2KDTsUt-PK6gaJPcw", + kty: "OKP" + } + }, + { + format: "jwk", + data: { + crv: "Ed25519", + x: "2OGJY9gJ1IfZVJrMrsZ0Ln7rok2KDTsUt-PK6gaJPc", + kty: "OKP" + } + } + ], + "Ed448": [ + { + format: "spki", + data: new Uint8Array([48, 67, 48, 5, 6, 3, 43, 101, 113, 3, 58, 0, 171, 75, 184, 133, 253, 125, 44, 90, 242, 78, 131, 113, 12, 255, 160, 199, 74, 87, 226, 116, 128, 29, 178, 5, 123, 11, 220, 94, 160, 50, 182, 254, 107, 199, 139, 128, 69, 54, 90, 235, 38, 232, 110, 31, 20, 253, 52, 157, 7, 196, 132, 149, 245, 164, 106, 90]), + }, + { + format: "pkcs8", + data: new Uint8Array([48, 71, 2, 1, 0, 48, 5, 6, 3, 43, 101, 113, 4, 59, 4, 57, 14, 255, 3, 69, 140, 40, 224, 23, 156, 82, 29, 227, 18, 201, 105, 183, 131, 67, 72, 236, 171, 153, 26, 96, 227, 178, 233, 167, 158, 76, 217, 228, 128, 239, 41, 23, 18, 210, 200, 61, 4, 114, 114, 213, 201, 244, 40, 102, 79, 105, 109, 38, 112, 69, 143, 29]), + }, + { + format: "raw", + data: new Uint8Array([171, 75, 184, 133, 253, 125, 44, 90, 242, 78, 131, 113, 12, 255, 160, 199, 74, 87, 226, 116, 128, 29, 178, 5, 123, 11, 220, 94, 160, 50, 182, 254, 107, 199, 139, 128, 69, 54, 90, 235, 38, 232, 110, 31, 20, 253, 52, 157, 7, 196, 132, 149, 245, 164, 106, 90]), + }, + { + format: "jwk", + data: { + crv: "Ed448", + d: "Dv8DRYwo4BecUh3jEslpt4NDSOyrmRpg47Lpp55M2eSA7ykXEtLIPQRyctXJ9ChmT2ltJnBFjx0", + x: "q0u4hf19LFryToNxDP-gx0pX4nSAHbIFewvcXqAytv5rx4uARTZa6ybobh8U_TSdB8SElfWkalqA", + kty: "OKP" + }, + }, + { + format: "jwk", + data: { + crv: "Ed448", + x: "q0u4hf19LFryToNxDP-gx0pX4nSAHbIFewvcXqAytv5rx4uARTZa6ybobh8U_TSdB8SElfWkalq", + kty: "OKP" + }, + }, + ], + "X25519": [ + { + format: "spki", + data: new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 110, 3, 33, 0, 28, 242, 177, 230, 2, 46, 197, 55, 55, 30, 215, 245, 62, 84, 250, 17, 84, 216, 62, 152, 235, 100, 234, 81, 250, 229, 179, 48, 124, 254, 151]), + }, + { + format: "pkcs8", + data: new Uint8Array([48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 110, 4, 34, 4, 32, 200, 131, 142, 118, 208, 87, 223, 183, 216, 201, 90, 105, 225, 56, 22, 10, 221, 99, 115, 253, 113, 164, 210, 118, 187, 86, 227, 168, 27, 100, 255]), + }, + { + format: "raw", + data: new Uint8Array([28, 242, 177, 230, 2, 46, 197, 55, 55, 30, 215, 245, 62, 84, 250, 17, 84, 216, 62, 152, 235, 100, 234, 81, 250, 229, 179, 48, 124, 254, 151]), + }, + { + format: "jwk", + data: { + crv: "X25519", + x: "HPKx5gIuxTc3Htf1PlT6EVTYPpjrZOpR-uWzMHz-lw", + kty: "OKP" + } + }, + { + format: "jwk", + data: { + crv: "X25519", + d: "yIOOdtBX37fYyVpp4TgWCt1jc_1xpNJ2u1bjqBtk_2", + x: "HPKx5gIuxTc3Htf1PlT6EVTYPpjrZOpR-uWzMHz-lwY", + kty: "OKP" + }, + }, + ], + "X448": [ + { + format: "spki", + data: new Uint8Array([48, 66, 48, 5, 6, 3, 43, 101, 111, 3, 57, 0, 182, 4, 161, 209, 165, 205, 29, 148, 38, 213, 97, 239, 99, 10, 158, 177, 108, 190, 105, 213, 185, 202, 97, 94, 220, 83, 99, 62, 251, 82, 234, 49, 230, 230, 160, 161, 219, 172, 198, 231, 108, 188, 230, 72, 45, 126, 75, 163, 213, 93, 158, 128, 39, 101, 206]), + }, + { + format: "pkcs8", + data: new Uint8Array([48, 70, 2, 1, 0, 48, 5, 6, 3, 43, 101, 111, 4, 58, 4, 56, 88, 199, 210, 154, 62, 181, 25, 178, 157, 0, 207, 177, 145, 187, 100, 252, 109, 138, 66, 216, 241, 113, 118, 39, 43, 137, 242, 39, 45, 24, 25, 41, 92, 101, 37, 192, 130, 150, 113, 176, 82, 239, 7, 39, 83, 15, 24, 142, 49, 208, 204, 83, 191, 38, 146]), + }, + { + format: "raw", + data: new Uint8Array([182, 4, 161, 209, 165, 205, 29, 148, 38, 213, 97, 239, 99, 10, 158, 177, 108, 190, 105, 213, 185, 202, 97, 94, 220, 83, 99, 62, 251, 82, 234, 49, 230, 230, 160, 161, 219, 172, 198, 231, 108, 188, 230, 72, 45, 126, 75, 163, 213, 93, 158, 128, 39, 101, 206]), + }, + { + format: "jwk", + data: { + crv: "X448", + d: "WMfSmj61GbKdAM-xkbtk_G2KQtjxcXYnK4nyJy0YGSlcZSXAgpZxsFLvBydTDxiOMdDMU78mkp", + x: "tgSh0aXNHZQm1WHvYwqesWy-adW5ymFe3FNjPvtS6jHm5qCh26zG52y85kgtfkuj1V2egCdlzm8", + kty: "OKP" + }, + }, + { + format: "jwk", + data: { + crv: "X448", + x: "tgSh0aXNHZQm1WHvYwqesWy-adW5ymFe3FNjPvtS6jHm5qCh26zG52y85kgtfkuj1V2egCdlzm", + kty: "OKP" + }, + }, + ], +}; + +var missingJWKFieldKeyData = { + "Ed25519": [ + { + param: "x", + data: { + crv: "Ed25519", + d: "88j0xI34eBRujNO_bfTlDjibpwdOFcI1Lc1dMI1MqB8", + kty: "OKP" + }, + }, + { + param: "kty", + data: { + crv: "Ed25519", + x: "11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo", + d: "88j0xI34eBRujNO_bfTlDjibpwdOFcI1Lc1dMI1MqB8", + }, + }, + { + param: "crv", + data: { + x: "11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo", + kty: "OKP" + }, + } + ], + "Ed448": [ + { + param: "x", + data: { + crv: "Ed448", + d: "Dv8DRYwo4BecUh3jEslpt4NDSOyrmRpg47Lpp55M2eSA7ykXEtLIPQRyctXJ9ChmT2ltJnBFjx0u", + kty: "OKP" + } + }, + { + param: "kty", + data: { + crv: "Ed448", + d: "Dv8DRYwo4BecUh3jEslpt4NDSOyrmRpg47Lpp55M2eSA7ykXEtLIPQRyctXJ9ChmT2ltJnBFjx0u", + x: "q0u4hf19LFryToNxDP-gx0pX4nSAHbIFewvcXqAytv5rx4uARTZa6ybobh8U_TSdB8SElfWkalqA", + } + }, + { + param: "crv", + data: { + d: "Dv8DRYwo4BecUh3jEslpt4NDSOyrmRpg47Lpp55M2eSA7ykXEtLIPQRyctXJ9ChmT2ltJnBFjx0u", + x: "q0u4hf19LFryToNxDP-gx0pX4nSAHbIFewvcXqAytv5rx4uARTZa6ybobh8U_TSdB8SElfWkalqA", + kty: "OKP" + } + } + ], + "X25519": [ + { + param: "x", + data: { + crv: "X25519", + d: "yIOOdtBX37fYyVpp4TgWCt1jc_1xpNJ2u1bjqBtk_2E", + kty: "OKP" + }, + }, + { + param: "kty", + data: { + crv: "X25519", + d: "yIOOdtBX37fYyVpp4TgWCt1jc_1xpNJ2u1bjqBtk_2E", + x: "HPKx5gIuxTc3Htf1PlT6EVTYPpjrZOpR-uWzMHz-lwY", + }, + }, + { + param: "crv", + data: { + x: "HPKx5gIuxTc3Htf1PlT6EVTYPpjrZOpR-uWzMHz-lwY", + kty: "OKP" + }, + } + ], + "X448": [ + { + param: "x", + data: { + crv: "X448", + d: "WMfSmj61GbKdAM-xkbtk_G2KQtjxcXYnK4nyJy0YGSlcZSXAgpZxsFLvBydTDxiOMdDMU78mkp4", + kty: "OKP" + } + }, + { + param: "kty", + data: { + crv: "X448", + d: "WMfSmj61GbKdAM-xkbtk_G2KQtjxcXYnK4nyJy0YGSlcZSXAgpZxsFLvBydTDxiOMdDMU78mkp4", + x: "tgSh0aXNHZQm1WHvYwqesWy-adW5ymFe3FNjPvtS6jHm5qCh26zG52y85kgtfkuj1V2egCdlzm8", + } + }, + { + param: "crv", + data: { + x: "tgSh0aXNHZQm1WHvYwqesWy-adW5ymFe3FNjPvtS6jHm5qCh26zG52y85kgtfkuj1V2egCdlzm8", + kty: "OKP" + } + } + ], +}; + +// The public key doesn't match the private key. +var mismatchedJWKKeyData = { + "Ed25519": [ + { + crv: "Ed25519", + d: "88j0xI34eBRujNO_bfTlDjibpwdOFcI1Lc1dMI1MqB8", + x: "11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo", + kty: "OKP" + }, + ], + "Ed448": [ + { + crv: "Ed448", + d: "Dv8DRYwo4BecUh3jEslpt4NDSOyrmRpg47Lpp55M2eSA7ykXEtLIPQRyctXJ9ChmT2ltJnBFjx0u", + x: "X9dEm1m0Yf0s54fsYWrUah2hNCSFpw4fig6nXYDpZ3jt8SR2m0bHBhvWeD3x5Q9s0foavq_oJWGA", + kty: "OKP" + }, + ], + "X25519": [ + { + crv: "X25519", + d: "yIOOdtBX37fYyVpp4TgWCt1jc_1xpNJ2u1bjqBtk_2E", + x: "hSDwCYkwp1R0i33ctD73Wg2_Og0mOBr066SpjqqbTmo", + kty: "OKP" + }, + ], + "X448": [ + { + + crv: "X448", + kty: "OKP", + d: "WMfSmj61GbKdAM-xkbtk_G2KQtjxcXYnK4nyJy0YGSlcZSXAgpZxsFLvBydTDxiOMdDMU78mkp4", + x: "mwj3zDG34+Z9ItWuoSEHSic70rg94Jxj+qc9LCLF2bvINmRyQdlT1AxbEtqIEg1TF3+A5TLEH6A", + }, + ], +} diff --git a/test/fixtures/wpt/versions.json b/test/fixtures/wpt/versions.json index 2821834ba60b33..37b8e94caafeae 100644 --- a/test/fixtures/wpt/versions.json +++ b/test/fixtures/wpt/versions.json @@ -88,7 +88,7 @@ "path": "wasm/webapi" }, "WebCryptoAPI": { - "commit": "203d2ac45900139633d4f3f29750ea4b5e06d6f5", + "commit": "bef6fa3566074bdde49e7ccc95ea0d76d08ed6ba", "path": "WebCryptoAPI" }, "webidl/ecmascript-binding/es-exceptions": { From 0da1632937313490baf11e02ce4dfe63a500907c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9?= Date: Sat, 19 Oct 2024 18:15:16 -0500 Subject: [PATCH 56/93] src,lib: introduce `util.getSystemErrorMessage(err)` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch adds a new utility function which provides human-readable string description of the given system error code. Signed-off-by: Juan José Arboleda PR-URL: https://github.com/nodejs/node/pull/54075 Reviewed-By: James M Snell Reviewed-By: Luigi Pinca Reviewed-By: Yagiz Nizipli --- doc/api/util.md | 20 ++++++++++++++++++++ lib/internal/util.js | 5 +++++ lib/util.js | 14 ++++++++++++++ src/uv.cc | 14 ++++++++++++-- test/parallel/test-uv-errno.js | 5 +++++ 5 files changed, 56 insertions(+), 2 deletions(-) diff --git a/doc/api/util.md b/doc/api/util.md index 8623ab88c9ecfd..3d61e24d148596 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -463,6 +463,26 @@ fs.access('file/that/does/not/exist', (err) => { }); ``` +## `util.getSystemErrorMessage(err)` + + + +* `err` {number} +* Returns: {string} + +Returns the string message for a numeric error code that comes from a Node.js +API. +The mapping between error codes and string messages is platform-dependent. + +```js +fs.access('file/that/does/not/exist', (err) => { + const name = util.getSystemErrorMessage(err.errno); + console.error(name); // no such file or directory +}); +``` + ## `util.inherits(constructor, superConstructor)` + +* `value` {any} +* Returns: {boolean} + +Returns `true` if the value is a BigInt object, e.g. created +by `Object(BigInt(123))`. + +```js +util.types.isBigIntObject(Object(BigInt(123))); // Returns true +util.types.isBigIntObject(BigInt(123)); // Returns false +util.types.isBigIntObject(123); // Returns false +``` + ### `util.types.isBigUint64Array(value)` - -Prior to the introduction of support for ES modules in Node.js, it was a common -pattern for package authors to include both CommonJS and ES module JavaScript -sources in their package, with `package.json` [`"main"`][] specifying the -CommonJS entry point and `package.json` `"module"` specifying the ES module -entry point. -This enabled Node.js to run the CommonJS entry point while build tools such as -bundlers used the ES module entry point, since Node.js ignored (and still -ignores) the top-level `"module"` field. - -Node.js can now run ES module entry points, and a package can contain both -CommonJS and ES module entry points (either via separate specifiers such as -`'pkg'` and `'pkg/es-module'`, or both at the same specifier via [Conditional -exports][]). Unlike in the scenario where top-level `"module"` field is only used by bundlers, -or ES module files are transpiled into CommonJS on the fly before evaluation by -Node.js, the files referenced by the ES module entry point are evaluated as ES -modules. - -### Dual package hazard - -When an application is using a package that provides both CommonJS and ES module -sources, there is a risk of certain bugs if both versions of the package get -loaded. This potential comes from the fact that the `pkgInstance` created by -`const pkgInstance = require('pkg')` is not the same as the `pkgInstance` -created by `import pkgInstance from 'pkg'` (or an alternative main path like -`'pkg/module'`). This is the “dual package hazard,” where two versions of the -same package can be loaded within the same runtime environment. While it is -unlikely that an application or package would intentionally load both versions -directly, it is common for an application to load one version while a dependency -of the application loads the other version. This hazard can happen because -Node.js supports intermixing CommonJS and ES modules, and can lead to unexpected -behavior. - -If the package main export is a constructor, an `instanceof` comparison of -instances created by the two versions returns `false`, and if the export is an -object, properties added to one (like `pkgInstance.foo = 3`) are not present on -the other. This differs from how `import` and `require` statements work in -all-CommonJS or all-ES module environments, respectively, and therefore is -surprising to users. It also differs from the behavior users are familiar with -when using transpilation via tools like [Babel][] or [`esm`][]. - -### Writing dual packages while avoiding or minimizing hazards - -First, the hazard described in the previous section occurs when a package -contains both CommonJS and ES module sources and both sources are provided for -use in Node.js, either via separate main entry points or exported paths. A -package might instead be written where any version of Node.js receives only -CommonJS sources, and any separate ES module sources the package might contain -are intended only for other environments such as browsers. Such a package -would be usable by any version of Node.js, since `import` can refer to CommonJS -files; but it would not provide any of the advantages of using ES module syntax. - -A package might also switch from CommonJS to ES module syntax in a [breaking -change](https://semver.org/) version bump. This has the disadvantage that the -newest version of the package would only be usable in ES module-supporting -versions of Node.js. - -Every pattern has tradeoffs, but there are two broad approaches that satisfy the -following conditions: - -1. The package is usable via both `require` and `import`. -2. The package is usable in both current Node.js and older versions of Node.js - that lack support for ES modules. -3. The package main entry point, e.g. `'pkg'` can be used by both `require` to - resolve to a CommonJS file and by `import` to resolve to an ES module file. - (And likewise for exported paths, e.g. `'pkg/feature'`.) -4. The package provides named exports, e.g. `import { name } from 'pkg'` rather - than `import pkg from 'pkg'; pkg.name`. -5. The package is potentially usable in other ES module environments such as - browsers. -6. The hazards described in the previous section are avoided or minimized. - -#### Approach #1: Use an ES module wrapper - -Write the package in CommonJS or transpile ES module sources into CommonJS, and -create an ES module wrapper file that defines the named exports. Using -[Conditional exports][], the ES module wrapper is used for `import` and the -CommonJS entry point for `require`. - -```json -// ./node_modules/pkg/package.json -{ - "type": "module", - "exports": { - "import": "./wrapper.mjs", - "require": "./index.cjs" - } -} -``` - -The preceding example uses explicit extensions `.mjs` and `.cjs`. -If your files use the `.js` extension, `"type": "module"` will cause such files -to be treated as ES modules, just as `"type": "commonjs"` would cause them -to be treated as CommonJS. -See [Enabling](esm.md#enabling). - -```cjs -// ./node_modules/pkg/index.cjs -exports.name = 'value'; -``` - -```js -// ./node_modules/pkg/wrapper.mjs -import cjsModule from './index.cjs'; -export const name = cjsModule.name; -``` - -In this example, the `name` from `import { name } from 'pkg'` is the same -singleton as the `name` from `const { name } = require('pkg')`. Therefore `===` -returns `true` when comparing the two `name`s and the divergent specifier hazard -is avoided. - -If the module is not simply a list of named exports, but rather contains a -unique function or object export like `module.exports = function () { ... }`, -or if support in the wrapper for the `import pkg from 'pkg'` pattern is desired, -then the wrapper would instead be written to export the default optionally -along with any named exports as well: - -```js -import cjsModule from './index.cjs'; -export const name = cjsModule.name; -export default cjsModule; -``` - -This approach is appropriate for any of the following use cases: - -* The package is currently written in CommonJS and the author would prefer not - to refactor it into ES module syntax, but wishes to provide named exports for - ES module consumers. -* The package has other packages that depend on it, and the end user might - install both this package and those other packages. For example a `utilities` - package is used directly in an application, and a `utilities-plus` package - adds a few more functions to `utilities`. Because the wrapper exports - underlying CommonJS files, it doesn't matter if `utilities-plus` is written in - CommonJS or ES module syntax; it will work either way. -* The package stores internal state, and the package author would prefer not to - refactor the package to isolate its state management. See the next section. - -A variant of this approach not requiring conditional exports for consumers could -be to add an export, e.g. `"./module"`, to point to an all-ES module-syntax -version of the package. This could be used via `import 'pkg/module'` by users -who are certain that the CommonJS version will not be loaded anywhere in the -application, such as by dependencies; or if the CommonJS version can be loaded -but doesn't affect the ES module version (for example, because the package is -stateless): - -```json -// ./node_modules/pkg/package.json -{ - "type": "module", - "exports": { - ".": "./index.cjs", - "./module": "./wrapper.mjs" - } -} -``` - -#### Approach #2: Isolate state - -A [`package.json`][] file can define the separate CommonJS and ES module entry -points directly: - -```json -// ./node_modules/pkg/package.json -{ - "type": "module", - "exports": { - "import": "./index.mjs", - "require": "./index.cjs" - } -} -``` - -This can be done if both the CommonJS and ES module versions of the package are -equivalent, for example because one is the transpiled output of the other; and -the package's management of state is carefully isolated (or the package is -stateless). - -The reason that state is an issue is because both the CommonJS and ES module -versions of the package might get used within an application; for example, the -user's application code could `import` the ES module version while a dependency -`require`s the CommonJS version. If that were to occur, two copies of the -package would be loaded in memory and therefore two separate states would be -present. This would likely cause hard-to-troubleshoot bugs. - -Aside from writing a stateless package (if JavaScript's `Math` were a package, -for example, it would be stateless as all of its methods are static), there are -some ways to isolate state so that it's shared between the potentially loaded -CommonJS and ES module instances of the package: - -1. If possible, contain all state within an instantiated object. JavaScript's - `Date`, for example, needs to be instantiated to contain state; if it were a - package, it would be used like this: - - ```js - import Date from 'date'; - const someDate = new Date(); - // someDate contains state; Date does not - ``` - - The `new` keyword isn't required; a package's function can return a new - object, or modify a passed-in object, to keep the state external to the - package. - -2. Isolate the state in one or more CommonJS files that are shared between the - CommonJS and ES module versions of the package. For example, if the CommonJS - and ES module entry points are `index.cjs` and `index.mjs`, respectively: - - ```cjs - // ./node_modules/pkg/index.cjs - const state = require('./state.cjs'); - module.exports.state = state; - ``` - - ```js - // ./node_modules/pkg/index.mjs - import state from './state.cjs'; - export { - state, - }; - ``` - - Even if `pkg` is used via both `require` and `import` in an application (for - example, via `import` in application code and via `require` by a dependency) - each reference of `pkg` will contain the same state; and modifying that - state from either module system will apply to both. - -Any plugins that attach to the package's singleton would need to separately -attach to both the CommonJS and ES module singletons. - -This approach is appropriate for any of the following use cases: - -* The package is currently written in ES module syntax and the package author - wants that version to be used wherever such syntax is supported. -* The package is stateless or its state can be isolated without too much - difficulty. -* The package is unlikely to have other public packages that depend on it, or if - it does, the package is stateless or has state that need not be shared between - dependencies or with the overall application. - -Even with isolated state, there is still the cost of possible extra code -execution between the CommonJS and ES module versions of a package. - -As with the previous approach, a variant of this approach not requiring -conditional exports for consumers could be to add an export, e.g. -`"./module"`, to point to an all-ES module-syntax version of the package: - -```json -// ./node_modules/pkg/package.json -{ - "type": "module", - "exports": { - ".": "./index.cjs", - "./module": "./index.mjs" - } -} -``` +See [the package examples repository][] for details. ## Node.js `package.json` field definitions @@ -1412,7 +1146,6 @@ Package imports permit mapping to external packages. This field defines [subpath imports][] for the current package. -[Babel]: https://babeljs.io/ [CommonJS]: modules.md [Conditional exports]: #conditional-exports [Corepack]: corepack.md @@ -1432,7 +1165,6 @@ This field defines [subpath imports][] for the current package. [`--experimental-default-type`]: cli.md#--experimental-default-typetype [`--no-addons` flag]: cli.md#--no-addons [`ERR_PACKAGE_PATH_NOT_EXPORTED`]: errors.md#err_package_path_not_exported -[`esm`]: https://github.com/standard-things/esm#readme [`package.json`]: #nodejs-packagejson-field-definitions [entry points]: #package-entry-points [folders as modules]: modules.md#folders-as-modules @@ -1446,3 +1178,4 @@ This field defines [subpath imports][] for the current package. [supported package managers]: corepack.md#supported-package-managers [the dual CommonJS/ES module packages section]: #dual-commonjses-module-packages [the full specifier path]: esm.md#mandatory-file-extensions +[the package examples repository]: https://github.com/nodejs/package-examples From 194bb0fca58ab481a8e81f44e5d4025ac02f1fd0 Mon Sep 17 00:00:00 2001 From: Cheng Date: Wed, 23 Oct 2024 12:48:59 +0900 Subject: [PATCH 88/93] build: fix GN build for cares/uv deps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/55477 Reviewed-By: Juan José Arboleda Reviewed-By: Luigi Pinca Reviewed-By: Rafael Gonzaga Reviewed-By: Michael Dawson --- deps/cares/unofficial.gni | 8 ++++---- deps/uv/unofficial.gni | 1 + unofficial.gni | 1 + 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/deps/cares/unofficial.gni b/deps/cares/unofficial.gni index 9296548239fcde..e02d7f425194c9 100644 --- a/deps/cares/unofficial.gni +++ b/deps/cares/unofficial.gni @@ -38,7 +38,10 @@ template("cares_gn_build") { ] } - include_dirs = [ "src/lib" ] + include_dirs = [ + "src/lib", + "src/lib/include", + ] if (is_win) { include_dirs += [ "config/win32" ] } else if (is_linux) { @@ -55,9 +58,6 @@ template("cares_gn_build") { } sources = gypi_values.cares_sources_common - if (is_win) { - sources += gypi_values.cares_sources_win - } if (is_linux) { sources += [ "config/linux/ares_config.h" ] } diff --git a/deps/uv/unofficial.gni b/deps/uv/unofficial.gni index ce30341044e907..7a73f891e3fc32 100644 --- a/deps/uv/unofficial.gni +++ b/deps/uv/unofficial.gni @@ -40,6 +40,7 @@ template("uv_gn_build") { "-Wno-extra-semi", "-Wno-implicit-fallthrough", "-Wno-missing-braces", + "-Wno-sign-compare", "-Wno-string-conversion", "-Wno-shadow", "-Wno-unreachable-code", diff --git a/unofficial.gni b/unofficial.gni index 3ff9815357dd36..4a2eeed18766b1 100644 --- a/unofficial.gni +++ b/unofficial.gni @@ -68,6 +68,7 @@ template("node_gn_build") { "-Wno-extra-semi", "-Wno-implicit-fallthrough", "-Wno-macro-redefined", + "-Wno-missing-braces", "-Wno-return-type", "-Wno-shadow", "-Wno-sometimes-uninitialized", From 0f1d13e35935496bdcd96ebb24dd2dc8c6d75406 Mon Sep 17 00:00:00 2001 From: Pietro Marchini Date: Wed, 23 Oct 2024 08:51:50 +0200 Subject: [PATCH 89/93] lib: ensure FORCE_COLOR forces color output in non-TTY environments PR-URL: https://github.com/nodejs/node/pull/55404 Reviewed-By: Luigi Pinca Reviewed-By: Jake Yuesong Li Reviewed-By: Matteo Collina Reviewed-By: Chemi Atlow Reviewed-By: Moshe Atlow Reviewed-By: James M Snell --- lib/internal/util/colors.js | 22 +++++------ .../output/assertion-color-tty.mjs | 6 +++ .../output/assertion-color-tty.snapshot | 37 +++++++++++++++++++ .../output/non-tty-forced-color-output.js | 6 +++ .../non-tty-forced-color-output.snapshot | 9 +++++ test/parallel/test-runner-output.mjs | 10 +++++ 6 files changed, 78 insertions(+), 12 deletions(-) create mode 100644 test/fixtures/test-runner/output/assertion-color-tty.mjs create mode 100644 test/fixtures/test-runner/output/assertion-color-tty.snapshot create mode 100644 test/fixtures/test-runner/output/non-tty-forced-color-output.js create mode 100644 test/fixtures/test-runner/output/non-tty-forced-color-output.snapshot diff --git a/lib/internal/util/colors.js b/lib/internal/util/colors.js index 054f9c4b4090d8..812048c923bee7 100644 --- a/lib/internal/util/colors.js +++ b/lib/internal/util/colors.js @@ -24,18 +24,16 @@ module.exports = { stream.getColorDepth() > 2 : true); }, refresh() { - if (process.stderr.isTTY) { - const hasColors = module.exports.shouldColorize(process.stderr); - module.exports.blue = hasColors ? '\u001b[34m' : ''; - module.exports.green = hasColors ? '\u001b[32m' : ''; - module.exports.white = hasColors ? '\u001b[39m' : ''; - module.exports.yellow = hasColors ? '\u001b[33m' : ''; - module.exports.red = hasColors ? '\u001b[31m' : ''; - module.exports.gray = hasColors ? '\u001b[90m' : ''; - module.exports.clear = hasColors ? '\u001bc' : ''; - module.exports.reset = hasColors ? '\u001b[0m' : ''; - module.exports.hasColors = hasColors; - } + const hasColors = module.exports.shouldColorize(process.stderr); + module.exports.blue = hasColors ? '\u001b[34m' : ''; + module.exports.green = hasColors ? '\u001b[32m' : ''; + module.exports.white = hasColors ? '\u001b[39m' : ''; + module.exports.yellow = hasColors ? '\u001b[33m' : ''; + module.exports.red = hasColors ? '\u001b[31m' : ''; + module.exports.gray = hasColors ? '\u001b[90m' : ''; + module.exports.clear = hasColors ? '\u001bc' : ''; + module.exports.reset = hasColors ? '\u001b[0m' : ''; + module.exports.hasColors = hasColors; }, }; diff --git a/test/fixtures/test-runner/output/assertion-color-tty.mjs b/test/fixtures/test-runner/output/assertion-color-tty.mjs new file mode 100644 index 00000000000000..28845882c10002 --- /dev/null +++ b/test/fixtures/test-runner/output/assertion-color-tty.mjs @@ -0,0 +1,6 @@ +import assert from 'node:assert/strict' +import { test } from 'node:test' + +test('failing assertion', () => { + assert.strictEqual('!Hello World', 'Hello World!') +}) diff --git a/test/fixtures/test-runner/output/assertion-color-tty.snapshot b/test/fixtures/test-runner/output/assertion-color-tty.snapshot new file mode 100644 index 00000000000000..2909d909351743 --- /dev/null +++ b/test/fixtures/test-runner/output/assertion-color-tty.snapshot @@ -0,0 +1,37 @@ +[31m✖ failing assertion [90m(*ms)[39m[39m + [AssertionError [ERR_ASSERTION]: Expected values to be strictly equal: + [32mactual[39m [31mexpected[39m + + [39m'[39m[32m![39m[39mH[39m[39me[39m[39ml[39m[39ml[39m[39mo[39m[39m [39m[39mW[39m[39mo[39m[39mr[39m[39ml[39m[39md[39m[31m![39m[39m'[39m + ] { + generatedMessage: [33mtrue[39m, + code: [32m'ERR_ASSERTION'[39m, + actual: [32m'!Hello World'[39m, + expected: [32m'Hello World!'[39m, + operator: [32m'strictEqual'[39m + } + +[34mℹ tests 1[39m +[34mℹ suites 0[39m +[34mℹ pass 0[39m +[34mℹ fail 1[39m +[34mℹ cancelled 0[39m +[34mℹ skipped 0[39m +[34mℹ todo 0[39m +[34mℹ duration_ms *[39m + +[31m✖ failing tests:[39m + +* +[31m✖ failing assertion [90m(*ms)[39m[39m + [AssertionError [ERR_ASSERTION]: Expected values to be strictly equal: + [32mactual[39m [31mexpected[39m + + [39m'[39m[32m![39m[39mH[39m[39me[39m[39ml[39m[39ml[39m[39mo[39m[39m [39m[39mW[39m[39mo[39m[39mr[39m[39ml[39m[39md[39m[31m![39m[39m'[39m + ] { + generatedMessage: [33mtrue[39m, + code: [32m'ERR_ASSERTION'[39m, + actual: [32m'!Hello World'[39m, + expected: [32m'Hello World!'[39m, + operator: [32m'strictEqual'[39m + } diff --git a/test/fixtures/test-runner/output/non-tty-forced-color-output.js b/test/fixtures/test-runner/output/non-tty-forced-color-output.js new file mode 100644 index 00000000000000..4d3c9de969a13f --- /dev/null +++ b/test/fixtures/test-runner/output/non-tty-forced-color-output.js @@ -0,0 +1,6 @@ +'use strict'; + +process.env.FORCE_COLOR = 1; + +const test = require('node:test'); +test('passing test', () => {}); diff --git a/test/fixtures/test-runner/output/non-tty-forced-color-output.snapshot b/test/fixtures/test-runner/output/non-tty-forced-color-output.snapshot new file mode 100644 index 00000000000000..3d1f593832fe77 --- /dev/null +++ b/test/fixtures/test-runner/output/non-tty-forced-color-output.snapshot @@ -0,0 +1,9 @@ +✔ passing test (*ms) +ℹ tests 1 +ℹ suites 0 +ℹ pass 1 +ℹ fail 0 +ℹ cancelled 0 +ℹ skipped 0 +ℹ todo 0 +ℹ duration_ms * diff --git a/test/parallel/test-runner-output.mjs b/test/parallel/test-runner-output.mjs index 72bd42ff73e163..4f745a5d4a9be7 100644 --- a/test/parallel/test-runner-output.mjs +++ b/test/parallel/test-runner-output.mjs @@ -203,6 +203,16 @@ const tests = [ name: 'test-runner/output/arbitrary-output.js', flags: ['--test-reporter=tap'], }, + { + name: 'test-runner/output/non-tty-forced-color-output.js', + transform: specTransform, + }, + canColorize ? { + name: 'test-runner/output/assertion-color-tty.mjs', + flags: ['--test', '--stack-trace-limit=0'], + transform: specTransform, + tty: true, + } : false, { name: 'test-runner/output/async-test-scheduling.mjs', flags: ['--test-reporter=tap'], From 37352cef7f269b7a92202376631bb3d4d1718ead Mon Sep 17 00:00:00 2001 From: adriancuadrado <29214635+adriancuadrado@users.noreply.github.com> Date: Wed, 23 Oct 2024 14:06:41 +0200 Subject: [PATCH 90/93] doc: changed the command used to verify SHASUMS256 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/55420 Reviewed-By: Antoine du Hamel Reviewed-By: Ulises Gascón --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2bb65e5dcc4d6d..efbd31e03f9bdb 100644 --- a/README.md +++ b/README.md @@ -104,11 +104,10 @@ To download `SHASUMS256.txt` using `curl`: curl -O https://nodejs.org/dist/vx.y.z/SHASUMS256.txt ``` -To check that a downloaded file matches the checksum, run -it through `sha256sum` with a command such as: +To check that downloaded files match the checksum, use `sha256sum`: ```bash -grep node-vx.y.z.tar.gz SHASUMS256.txt | sha256sum -c - +sha256sum -c SHASUMS256.txt --ignore-missing ``` For Current and LTS, the GPG detached signature of `SHASUMS256.txt` is in From df2f1adf9ec688188f26b0a4bbe01ecb41a22cf4 Mon Sep 17 00:00:00 2001 From: Chengzhong Wu Date: Mon, 21 Oct 2024 13:33:55 +0100 Subject: [PATCH 91/93] deps: V8: cherry-pick f915fa4c9f41 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Original commit message: [osr] Ensure trying to osr does not skip loop interrupts Fixed: 374013413 Change-Id: I52d7b4e165e0abd0bd517a81d2e8ef3f1f802bfb Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/5946288 Commit-Queue: Darius Mercadier Auto-Submit: Olivier Flückiger Reviewed-by: Darius Mercadier Cr-Commit-Position: refs/heads/main@{#96708} Refs: https://github.com/v8/v8/commit/f915fa4c9f4162dd9258535eee03b1b0484bf38e PR-URL: https://github.com/nodejs/node/pull/55484 Reviewed-By: Richard Lau Reviewed-By: Luigi Pinca --- common.gypi | 2 +- deps/v8/src/codegen/compiler.cc | 9 ++++++++- .../v8/test/debugger/regress/regress-374013413.js | 15 +++++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 deps/v8/test/debugger/regress/regress-374013413.js diff --git a/common.gypi b/common.gypi index 350b54ad9d54cd..23196aae451f6a 100644 --- a/common.gypi +++ b/common.gypi @@ -36,7 +36,7 @@ # Reset this number to 0 on major V8 upgrades. # Increment by one for each non-official patch applied to deps/v8. - 'v8_embedder_string': '-node.10', + 'v8_embedder_string': '-node.11', ##### V8 defaults for Node.js ##### diff --git a/deps/v8/src/codegen/compiler.cc b/deps/v8/src/codegen/compiler.cc index a6407a56aa8d6d..ce82b744f327d5 100644 --- a/deps/v8/src/codegen/compiler.cc +++ b/deps/v8/src/codegen/compiler.cc @@ -1338,7 +1338,14 @@ MaybeHandle GetOrCompileOptimized( } // Do not optimize when debugger needs to hook into every call. - if (isolate->debug()->needs_check_on_function_call()) return {}; + if (isolate->debug()->needs_check_on_function_call()) { + // Reset the OSR urgency to avoid triggering this compilation request on + // every iteration and thereby skipping other interrupts. + if (IsOSR(osr_offset)) { + function->feedback_vector()->reset_osr_urgency(); + } + return {}; + } // Do not optimize if we need to be able to set break points. if (shared->HasBreakInfo(isolate)) return {}; diff --git a/deps/v8/test/debugger/regress/regress-374013413.js b/deps/v8/test/debugger/regress/regress-374013413.js new file mode 100644 index 00000000000000..d414dfdffa8e6d --- /dev/null +++ b/deps/v8/test/debugger/regress/regress-374013413.js @@ -0,0 +1,15 @@ +// Copyright 2024 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --enable-inspector + +var Debug = debug.Debug; +Debug.sendMessageForMethodChecked('Runtime.enable', {}); +const {msgid, msg} = Debug.createMessage('Runtime.evaluate', { + expression: 'while(true) {}', + throwOnSideEffect: true, + timeout: 1000, +}) +Debug.sendMessage(msg); +Debug.takeReplyChecked(msgid).toString(); From 4dc2791cdd530e7105f8321aef04484a084ec269 Mon Sep 17 00:00:00 2001 From: Chengzhong Wu Date: Mon, 21 Oct 2024 13:52:36 +0100 Subject: [PATCH 92/93] test: add repl preview timeout test PR-URL: https://github.com/nodejs/node/pull/55484 Refs: https://github.com/v8/v8/commit/f915fa4c9f4162dd9258535eee03b1b0484bf38e Reviewed-By: Richard Lau Reviewed-By: Luigi Pinca --- test/parallel/test-repl-preview-timeout.js | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 test/parallel/test-repl-preview-timeout.js diff --git a/test/parallel/test-repl-preview-timeout.js b/test/parallel/test-repl-preview-timeout.js new file mode 100644 index 00000000000000..df6a8cf2b1cba7 --- /dev/null +++ b/test/parallel/test-repl-preview-timeout.js @@ -0,0 +1,27 @@ +'use strict'; + +const common = require('../common'); +const ArrayStream = require('../common/arraystream'); +const assert = require('assert'); +const repl = require('repl'); + +common.skipIfInspectorDisabled(); + +const inputStream = new ArrayStream(); +const outputStream = new ArrayStream(); +repl.start({ + input: inputStream, + output: outputStream, + useGlobal: false, + terminal: true, + useColors: true +}); + +let output = ''; +outputStream.write = (chunk) => output += chunk; + +// Input without '\n' triggering actual run. +const input = 'while (true) {}'; +inputStream.emit('data', input); +// No preview available when timed out. +assert.strictEqual(output, input); From 17fae65c72321659390c4cbcd9ddaf248accb953 Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Thu, 24 Oct 2024 11:19:18 +0200 Subject: [PATCH 93/93] 2024-10-24, Version 23.1.0 (Current) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Notable changes: assert: * (SEMVER-MINOR) make `assertion_error` use Myers diff algorithm (Giovanni Bucci) https://github.com/nodejs/node/pull/54862 buffer: * (SEMVER-MINOR) make `Buffer` work with resizable `ArrayBuffer` (James M Snell) https://github.com/nodejs/node/pull/55377 esm: * mark import attributes and JSON module as stable (Nicolò Ribaudo) https://github.com/nodejs/node/pull/55333 lib: * (SEMVER-MINOR) add `UV_UDP_REUSEPORT` for udp (theanarkh) https://github.com/nodejs/node/pull/55403 net: * (SEMVER-MINOR) add `UV_TCP_REUSEPORT` for tcp (theanarkh) https://github.com/nodejs/node/pull/55408 test_runner: * mark `MockTimers` as stable (Erick Wendel) https://github.com/nodejs/node/pull/55398 PR-URL: https://github.com/nodejs/node/pull/55513 --- CHANGELOG.md | 3 +- doc/api/dgram.md | 2 +- doc/api/net.md | 4 +- doc/api/test.md | 2 +- doc/api/util.md | 2 +- doc/changelogs/CHANGELOG_V23.md | 152 ++++++++++++++++++++++++++++++++ src/node_version.h | 6 +- 7 files changed, 162 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b5e4aee43f193a..86c2eb38464cb7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,7 +38,8 @@ release. 18 (LTS) -23.0.0
+23.1.0
+23.0.0
22.9.0
diff --git a/doc/api/dgram.md b/doc/api/dgram.md index 3fa7f6472f096c..2243b6abdea9bc 100644 --- a/doc/api/dgram.md +++ b/doc/api/dgram.md @@ -918,7 +918,7 @@ chained. * {boolean} diff --git a/doc/api/test.md b/doc/api/test.md index 7b7dc4b2c64118..e7896b35fc0a8f 100644 --- a/doc/api/test.md +++ b/doc/api/test.md @@ -2223,7 +2223,7 @@ added: - v20.4.0 - v18.19.0 changes: - - version: REPLACEME + - version: v23.1.0 pr-url: https://github.com/nodejs/node/pull/55398 description: The Mock Timers is now stable. --> diff --git a/doc/api/util.md b/doc/api/util.md index 3306407b85968b..12527b794d0948 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -466,7 +466,7 @@ fs.access('file/that/does/not/exist', (err) => { ## `util.getSystemErrorMessage(err)` * `err` {number} diff --git a/doc/changelogs/CHANGELOG_V23.md b/doc/changelogs/CHANGELOG_V23.md index 2dc053e21035a8..0d851e09655999 100644 --- a/doc/changelogs/CHANGELOG_V23.md +++ b/doc/changelogs/CHANGELOG_V23.md @@ -8,6 +8,7 @@ +23.1.0
23.0.0
@@ -38,6 +39,157 @@ * [io.js](CHANGELOG_IOJS.md) * [Archive](CHANGELOG_ARCHIVE.md) + + +## 2024-10-24, Version 23.1.0 (Current), @aduh95 + +### Notable Changes + +#### `Buffer` now work with resizable `ArrayBuffer` + +When a `Buffer` is created using a resizable `ArrayBuffer`, the `Buffer` length +will now correctly change as the underlying `ArrayBuffer` size is changed. + +```js +const ab = new ArrayBuffer(10, { maxByteLength: 20 }); +const buffer = Buffer.from(ab); +console.log(buffer.byteLength); 10 +ab.resize(15); +console.log(buffer.byteLength); 15 +ab.resize(5); +console.log(buffer.byteLength); 5 +``` + +Contributed by James M Snell in [#55377](https://github.com/nodejs/node/pull/55377). + +#### `MockTimers` test runner API is now stable + +`MockTimers`, introduced in April 2023, has just reached **stable status**. This +API provides comprehensive support for mocking `Date` and all major timers in +Node.js, including `setTimeout`, `setInterval`, and `setImmediate`, both from +the `node:timers`, `node:timers/promises` modules and global objects. After +months of refinement, developers can now fully rely on `MockTimers` for testing +time-based operations with confidence, ensuring better control over asynchronous +behavior in their Node.js applications. + +Example usage with initial `Date` object as time set: + +```mjs +import { mock } from 'node:test'; +mock.timers.enable({ apis: ['Date'], now: new Date('1970-01-01') }); +``` + +Contributed by Erick Wendel in [#55398](https://github.com/nodejs/node/pull/55398). + +#### JSON modules and import attributes are now stable + +The two proposals reached stage 4 of the TC39 process, at the October 2024 +meeting. The Node.js implementation already matches exactly the semantics +required by the proposals. + +Contributed by Nicolò Ribaudo by [#55333](https://github.com/nodejs/node/pull/55333). + +#### Other Notable Changes + +* \[[`4ba31b7f20`](https://github.com/nodejs/node/commit/4ba31b7f20)] - **(SEMVER-MINOR)** **assert**: make `assertion_error` use Myers diff algorithm (Giovanni Bucci) [#54862](https://github.com/nodejs/node/pull/54862) +* \[[`dcbc5fbe65`](https://github.com/nodejs/node/commit/dcbc5fbe65)] - **(SEMVER-MINOR)** **lib**: add `UV_UDP_REUSEPORT` for udp (theanarkh) [#55403](https://github.com/nodejs/node/pull/55403) +* \[[`ec867ac7ce`](https://github.com/nodejs/node/commit/ec867ac7ce)] - **(SEMVER-MINOR)** **net**: add `UV_TCP_REUSEPORT` for tcp (theanarkh) [#55408](https://github.com/nodejs/node/pull/55408) + +### Commits + +* \[[`4ba31b7f20`](https://github.com/nodejs/node/commit/4ba31b7f20)] - **(SEMVER-MINOR)** **assert**: make assertion\_error use Myers diff algorithm (Giovanni Bucci) [#54862](https://github.com/nodejs/node/pull/54862) +* \[[`fe667bea28`](https://github.com/nodejs/node/commit/fe667bea28)] - **assert**: fix deepEqual always return true on URL (Xuguang Mei) [#50853](https://github.com/nodejs/node/pull/50853) +* \[[`aca03d9083`](https://github.com/nodejs/node/commit/aca03d9083)] - **benchmark**: add --runs support to run.js (Rafael Gonzaga) [#55158](https://github.com/nodejs/node/pull/55158) +* \[[`c5abf50692`](https://github.com/nodejs/node/commit/c5abf50692)] - **benchmark**: adjust byte size for buffer-copy (Rafael Gonzaga) [#55295](https://github.com/nodejs/node/pull/55295) +* \[[`d3618b2334`](https://github.com/nodejs/node/commit/d3618b2334)] - **benchmark**: adjust config for deepEqual object (Rafael Gonzaga) [#55254](https://github.com/nodejs/node/pull/55254) +* \[[`c05582da3d`](https://github.com/nodejs/node/commit/c05582da3d)] - **(SEMVER-MINOR)** **buffer**: make Buffer work with resizable ArrayBuffer (James M Snell) [#55377](https://github.com/nodejs/node/pull/55377) +* \[[`194bb0fca5`](https://github.com/nodejs/node/commit/194bb0fca5)] - **build**: fix GN build for cares/uv deps (Cheng) [#55477](https://github.com/nodejs/node/pull/55477) +* \[[`8eb5359592`](https://github.com/nodejs/node/commit/8eb5359592)] - **build**: fix uninstall script for AIX 7.1 (Cloorc) [#55438](https://github.com/nodejs/node/pull/55438) +* \[[`32f7d5ad1c`](https://github.com/nodejs/node/commit/32f7d5ad1c)] - **build**: conditionally compile bundled sqlite (Richard Lau) [#55409](https://github.com/nodejs/node/pull/55409) +* \[[`2147e496e7`](https://github.com/nodejs/node/commit/2147e496e7)] - **build**: tidy up cares.gyp (Richard Lau) [#55445](https://github.com/nodejs/node/pull/55445) +* \[[`2beae50c77`](https://github.com/nodejs/node/commit/2beae50c77)] - **build**: synchronize list of c-ares source files (Richard Lau) [#55445](https://github.com/nodejs/node/pull/55445) +* \[[`f48d30eb9f`](https://github.com/nodejs/node/commit/f48d30eb9f)] - **build**: fix path concatenation (Mohammed Keyvanzadeh) [#55387](https://github.com/nodejs/node/pull/55387) +* \[[`d42522eec5`](https://github.com/nodejs/node/commit/d42522eec5)] - **build**: fix make errors that occur in Makefile (minkyu\_kim) [#55287](https://github.com/nodejs/node/pull/55287) +* \[[`52da293471`](https://github.com/nodejs/node/commit/52da293471)] - **cli**: add `--heap-prof` flag available to `NODE_OPTIONS` (Juan José) [#54259](https://github.com/nodejs/node/pull/54259) +* \[[`adead26815`](https://github.com/nodejs/node/commit/adead26815)] - **crypto**: include openssl/rand.h explicitly (Shelley Vohr) [#55425](https://github.com/nodejs/node/pull/55425) +* \[[`df2f1adf9e`](https://github.com/nodejs/node/commit/df2f1adf9e)] - **deps**: V8: cherry-pick f915fa4c9f41 (Chengzhong Wu) [#55484](https://github.com/nodejs/node/pull/55484) +* \[[`bfc10a975f`](https://github.com/nodejs/node/commit/bfc10a975f)] - **deps**: update googletest to df1544b (Node.js GitHub Bot) [#55465](https://github.com/nodejs/node/pull/55465) +* \[[`45ef1809bd`](https://github.com/nodejs/node/commit/45ef1809bd)] - **deps**: update c-ares to v1.34.2 (Node.js GitHub Bot) [#55463](https://github.com/nodejs/node/pull/55463) +* \[[`c2b5ebfeca`](https://github.com/nodejs/node/commit/c2b5ebfeca)] - **deps**: update ada to 2.9.1 (Node.js GitHub Bot) [#54679](https://github.com/nodejs/node/pull/54679) +* \[[`903863cafa`](https://github.com/nodejs/node/commit/903863cafa)] - **deps**: update simdutf to 5.6.0 (Node.js GitHub Bot) [#55379](https://github.com/nodejs/node/pull/55379) +* \[[`008fb5f7f4`](https://github.com/nodejs/node/commit/008fb5f7f4)] - **deps**: patch V8 to 12.9.202.28 (Node.js GitHub Bot) [#55371](https://github.com/nodejs/node/pull/55371) +* \[[`8b282228ae`](https://github.com/nodejs/node/commit/8b282228ae)] - **deps**: update c-ares to v1.34.1 (Node.js GitHub Bot) [#55369](https://github.com/nodejs/node/pull/55369) +* \[[`54d55f2337`](https://github.com/nodejs/node/commit/54d55f2337)] - _**Revert**_ "**deps**: disable io\_uring support in libuv by default" (Santiago Gimeno) [#55114](https://github.com/nodejs/node/pull/55114) +* \[[`bfb3c621c4`](https://github.com/nodejs/node/commit/bfb3c621c4)] - **deps**: update libuv to 1.49.1 (Santiago Gimeno) [#55114](https://github.com/nodejs/node/pull/55114) +* \[[`055d2b8919`](https://github.com/nodejs/node/commit/055d2b8919)] - **deps**: update amaro to 0.1.9 (Node.js GitHub Bot) [#55348](https://github.com/nodejs/node/pull/55348) +* \[[`c028d21b44`](https://github.com/nodejs/node/commit/c028d21b44)] - **diagnostics\_channel**: fix unsubscribe during publish (simon-id) [#55116](https://github.com/nodejs/node/pull/55116) +* \[[`b4b6ddb777`](https://github.com/nodejs/node/commit/b4b6ddb777)] - **dns**: honor the order option (Luigi Pinca) [#55392](https://github.com/nodejs/node/pull/55392) +* \[[`37352cef7f`](https://github.com/nodejs/node/commit/37352cef7f)] - **doc**: changed the command used to verify SHASUMS256 (adriancuadrado) [#55420](https://github.com/nodejs/node/pull/55420) +* \[[`66bcf4c065`](https://github.com/nodejs/node/commit/66bcf4c065)] - **doc**: move dual package shipping docs to separate repo (Joyee Cheung) [#55444](https://github.com/nodejs/node/pull/55444) +* \[[`04b41bda03`](https://github.com/nodejs/node/commit/04b41bda03)] - **doc**: add note about stdio streams in child\_process (Ederin (Ed) Igharoro) [#55322](https://github.com/nodejs/node/pull/55322) +* \[[`689d3a3e41`](https://github.com/nodejs/node/commit/689d3a3e41)] - **doc**: add `isBigIntObject` to documentation (leviscar) [#55450](https://github.com/nodejs/node/pull/55450) +* \[[`784c825a27`](https://github.com/nodejs/node/commit/784c825a27)] - **doc**: remove outdated remarks about `highWaterMark` in fs (Ian Kerins) [#55462](https://github.com/nodejs/node/pull/55462) +* \[[`1ec25e8573`](https://github.com/nodejs/node/commit/1ec25e8573)] - **doc**: move Danielle Adams key to old gpg keys (RafaelGSS) [#55399](https://github.com/nodejs/node/pull/55399) +* \[[`7d5bb097eb`](https://github.com/nodejs/node/commit/7d5bb097eb)] - **doc**: move Bryan English key to old gpg keys (RafaelGSS) [#55399](https://github.com/nodejs/node/pull/55399) +* \[[`2967471f67`](https://github.com/nodejs/node/commit/2967471f67)] - **doc**: move Beth Griggs keys to old gpg keys (RafaelGSS) [#55399](https://github.com/nodejs/node/pull/55399) +* \[[`0be3a7505f`](https://github.com/nodejs/node/commit/0be3a7505f)] - **doc**: add changelog for mocktimers (Erick Wendel) [#55398](https://github.com/nodejs/node/pull/55398) +* \[[`e15f779794`](https://github.com/nodejs/node/commit/e15f779794)] - **doc**: spell out condition restrictions (Jan Martin) [#55187](https://github.com/nodejs/node/pull/55187) +* \[[`c3f2216a7d`](https://github.com/nodejs/node/commit/c3f2216a7d)] - **doc**: add instructions for WinGet build (Hüseyin Açacak) [#55356](https://github.com/nodejs/node/pull/55356) +* \[[`bdc2c3bb94`](https://github.com/nodejs/node/commit/bdc2c3bb94)] - **doc**: add missing return values in buffer docs (Karl Horky) [#55273](https://github.com/nodejs/node/pull/55273) +* \[[`41f68f59af`](https://github.com/nodejs/node/commit/41f68f59af)] - **doc**: fix ambasador markdown list (Rafael Gonzaga) [#55361](https://github.com/nodejs/node/pull/55361) +* \[[`bbd5318729`](https://github.com/nodejs/node/commit/bbd5318729)] - **esm**: add a fallback when importer in not a file (Antoine du Hamel) [#55471](https://github.com/nodejs/node/pull/55471) +* \[[`22d77773fd`](https://github.com/nodejs/node/commit/22d77773fd)] - **esm**: fix inconsistency with `importAssertion` in `resolve` hook (Wei Zhu) [#55365](https://github.com/nodejs/node/pull/55365) +* \[[`48bb87b059`](https://github.com/nodejs/node/commit/48bb87b059)] - **esm**: mark import attributes and JSON module as stable (Nicolò Ribaudo) [#55333](https://github.com/nodejs/node/pull/55333) +* \[[`8ceefebaf2`](https://github.com/nodejs/node/commit/8ceefebaf2)] - **events**: optimize EventTarget.addEventListener (Robert Nagy) [#55312](https://github.com/nodejs/node/pull/55312) +* \[[`45f960cab6`](https://github.com/nodejs/node/commit/45f960cab6)] - **fs**: pass correct path to `DirentFromStats` during `glob` (Aviv Keller) [#55071](https://github.com/nodejs/node/pull/55071) +* \[[`d9494a7641`](https://github.com/nodejs/node/commit/d9494a7641)] - **fs**: use `wstring` on Windows paths (jazelly) [#55171](https://github.com/nodejs/node/pull/55171) +* \[[`0f1d13e359`](https://github.com/nodejs/node/commit/0f1d13e359)] - **lib**: ensure FORCE\_COLOR forces color output in non-TTY environments (Pietro Marchini) [#55404](https://github.com/nodejs/node/pull/55404) +* \[[`dcbc5fbe65`](https://github.com/nodejs/node/commit/dcbc5fbe65)] - **(SEMVER-MINOR)** **lib**: add UV\_UDP\_REUSEPORT for udp (theanarkh) [#55403](https://github.com/nodejs/node/pull/55403) +* \[[`714f272423`](https://github.com/nodejs/node/commit/714f272423)] - **lib**: remove startsWith/endsWith primordials for char checks (Gürgün Dayıoğlu) [#55407](https://github.com/nodejs/node/pull/55407) +* \[[`4e5c90bb41`](https://github.com/nodejs/node/commit/4e5c90bb41)] - **lib**: replace `createDeferredPromise` util with `Promise.withResolvers` (Yagiz Nizipli) [#54836](https://github.com/nodejs/node/pull/54836) +* \[[`db18aca47a`](https://github.com/nodejs/node/commit/db18aca47a)] - **lib**: add flag to drop connection when running in cluster mode (theanarkh) [#54927](https://github.com/nodejs/node/pull/54927) +* \[[`dd848f2d1e`](https://github.com/nodejs/node/commit/dd848f2d1e)] - **lib**: test\_runner#mock:timers respeced timeout\_max behaviour (BadKey) [#55375](https://github.com/nodejs/node/pull/55375) +* \[[`a9473bb8e3`](https://github.com/nodejs/node/commit/a9473bb8e3)] - **lib**: remove settled dependant signals when they are GCed (Edigleysson Silva (Edy)) [#55354](https://github.com/nodejs/node/pull/55354) +* \[[`07ad987aa1`](https://github.com/nodejs/node/commit/07ad987aa1)] - **lib**: convert transfer sequence to array in js (Jason Zhang) [#55317](https://github.com/nodejs/node/pull/55317) +* \[[`d54d3b24c3`](https://github.com/nodejs/node/commit/d54d3b24c3)] - **meta**: move one or more collaborators to emeritus (Node.js GitHub Bot) [#55381](https://github.com/nodejs/node/pull/55381) +* \[[`12d709bd27`](https://github.com/nodejs/node/commit/12d709bd27)] - **meta**: assign CODEOWNERS for /deps/ncrypto/\* (Filip Skokan) [#55426](https://github.com/nodejs/node/pull/55426) +* \[[`0130780eec`](https://github.com/nodejs/node/commit/0130780eec)] - **meta**: change color to blue notify review-wanted (Rafael Gonzaga) [#55423](https://github.com/nodejs/node/pull/55423) +* \[[`335a507027`](https://github.com/nodejs/node/commit/335a507027)] - **meta**: bump codecov/codecov-action from 4.5.0 to 4.6.0 (dependabot\[bot]) [#55222](https://github.com/nodejs/node/pull/55222) +* \[[`5ffc721d09`](https://github.com/nodejs/node/commit/5ffc721d09)] - **meta**: bump github/codeql-action from 3.26.6 to 3.26.10 (dependabot\[bot]) [#55221](https://github.com/nodejs/node/pull/55221) +* \[[`d9fde2c45b`](https://github.com/nodejs/node/commit/d9fde2c45b)] - **meta**: bump step-security/harden-runner from 2.9.1 to 2.10.1 (dependabot\[bot]) [#55220](https://github.com/nodejs/node/pull/55220) +* \[[`2c960a212e`](https://github.com/nodejs/node/commit/2c960a212e)] - **module**: include module information in require(esm) warning (Joyee Cheung) [#55397](https://github.com/nodejs/node/pull/55397) +* \[[`a12dbf03d9`](https://github.com/nodejs/node/commit/a12dbf03d9)] - **module**: simplify ts under node\_modules check (Marco Ippolito) [#55440](https://github.com/nodejs/node/pull/55440) +* \[[`ec867ac7ce`](https://github.com/nodejs/node/commit/ec867ac7ce)] - **(SEMVER-MINOR)** **net**: add UV\_TCP\_REUSEPORT for tcp (theanarkh) [#55408](https://github.com/nodejs/node/pull/55408) +* \[[`9e320279a2`](https://github.com/nodejs/node/commit/9e320279a2)] - _**Revert**_ "**path**: fix bugs and inconsistencies" (Aviv Keller) [#55414](https://github.com/nodejs/node/pull/55414) +* \[[`1ce8928db3`](https://github.com/nodejs/node/commit/1ce8928db3)] - **sqlite**: cache column names in stmt.all() (Fedor Indutny) [#55373](https://github.com/nodejs/node/pull/55373) +* \[[`cc775d314a`](https://github.com/nodejs/node/commit/cc775d314a)] - **src**: switch from `Get/SetPrototype` to `Get/SetPrototypeV2` (Aviv Keller) [#55453](https://github.com/nodejs/node/pull/55453) +* \[[`89c96ade53`](https://github.com/nodejs/node/commit/89c96ade53)] - **src**: remove icu based `ToASCII` and `ToUnicode` (Yagiz Nizipli) [#55156](https://github.com/nodejs/node/pull/55156) +* \[[`57dbbf8402`](https://github.com/nodejs/node/commit/57dbbf8402)] - **src**: fix winapi\_strerror error string (Hüseyin Açacak) [#55207](https://github.com/nodejs/node/pull/55207) +* \[[`a490bb8745`](https://github.com/nodejs/node/commit/a490bb8745)] - **src**: remove uv\_\_node\_patch\_is\_using\_io\_uring (Santiago Gimeno) [#55114](https://github.com/nodejs/node/pull/55114) +* \[[`0da1632937`](https://github.com/nodejs/node/commit/0da1632937)] - **src,lib**: introduce `util.getSystemErrorMessage(err)` (Juan José) [#54075](https://github.com/nodejs/node/pull/54075) +* \[[`6764273127`](https://github.com/nodejs/node/commit/6764273127)] - **stream**: propagate AbortSignal reason (Marvin ROGER) [#55473](https://github.com/nodejs/node/pull/55473) +* \[[`4dc2791cdd`](https://github.com/nodejs/node/commit/4dc2791cdd)] - **test**: add repl preview timeout test (Chengzhong Wu) [#55484](https://github.com/nodejs/node/pull/55484) +* \[[`8634e054d4`](https://github.com/nodejs/node/commit/8634e054d4)] - **test**: make test-node-output-v8-warning more flexible (Shelley Vohr) [#55401](https://github.com/nodejs/node/pull/55401) +* \[[`6c8564b55d`](https://github.com/nodejs/node/commit/6c8564b55d)] - **test**: fix addons and node-api test assumptions (Antoine du Hamel) [#55441](https://github.com/nodejs/node/pull/55441) +* \[[`94e863cdb7`](https://github.com/nodejs/node/commit/94e863cdb7)] - **test**: update wpt test for webmessaging/broadcastchannel (devstone) [#55205](https://github.com/nodejs/node/pull/55205) +* \[[`c10c6715cd`](https://github.com/nodejs/node/commit/c10c6715cd)] - **test**: deflake `test-cluster-shared-handle-bind-privileged-port` (Aviv Keller) [#55378](https://github.com/nodejs/node/pull/55378) +* \[[`6f7379a048`](https://github.com/nodejs/node/commit/6f7379a048)] - **test**: fix invalid `file:` URL in `test-fs-path-dir` (Antoine du Hamel) [#55454](https://github.com/nodejs/node/pull/55454) +* \[[`dd5a08d022`](https://github.com/nodejs/node/commit/dd5a08d022)] - **test**: update `console` wpt (Aviv Keller) [#55192](https://github.com/nodejs/node/pull/55192) +* \[[`9b7b4a6b25`](https://github.com/nodejs/node/commit/9b7b4a6b25)] - **test**: remove duplicate tests (Luigi Pinca) [#55393](https://github.com/nodejs/node/pull/55393) +* \[[`eb2fab3da1`](https://github.com/nodejs/node/commit/eb2fab3da1)] - **test**: update test\_util.cc for coverage (minkyu\_kim) [#55291](https://github.com/nodejs/node/pull/55291) +* \[[`59923d137e`](https://github.com/nodejs/node/commit/59923d137e)] - **test**: update `compression` wpt (Aviv Keller) [#55191](https://github.com/nodejs/node/pull/55191) +* \[[`1b63a822ac`](https://github.com/nodejs/node/commit/1b63a822ac)] - **test,crypto**: update WebCryptoAPI WPT (Filip Skokan) [#55427](https://github.com/nodejs/node/pull/55427) +* \[[`97c6448f63`](https://github.com/nodejs/node/commit/97c6448f63)] - **test\_runner**: mark mockTimers as stable (Erick Wendel) [#55398](https://github.com/nodejs/node/pull/55398) +* \[[`69ee56aacd`](https://github.com/nodejs/node/commit/69ee56aacd)] - **test\_runner**: add support for scheduler.wait on mock timers (Erick Wendel) [#55244](https://github.com/nodejs/node/pull/55244) +* \[[`d9f0407cf6`](https://github.com/nodejs/node/commit/d9f0407cf6)] - **test\_runner**: require `--enable-source-maps` for sourcemap coverage (Aviv Keller) [#55359](https://github.com/nodejs/node/pull/55359) +* \[[`2ac2c5a7e7`](https://github.com/nodejs/node/commit/2ac2c5a7e7)] - **tools**: update lint-md-dependencies (Node.js GitHub Bot) [#55470](https://github.com/nodejs/node/pull/55470) +* \[[`10f6b90f7d`](https://github.com/nodejs/node/commit/10f6b90f7d)] - **tools**: update gyp-next to 0.18.3 (Node.js GitHub Bot) [#55464](https://github.com/nodejs/node/pull/55464) +* \[[`65936a8bb6`](https://github.com/nodejs/node/commit/65936a8bb6)] - **tools**: add script to synch c-ares source lists (Richard Lau) [#55445](https://github.com/nodejs/node/pull/55445) +* \[[`1da4168486`](https://github.com/nodejs/node/commit/1da4168486)] - **tools**: add `polyfilled` option to `prefer-primordials` rule (Antoine du Hamel) [#55318](https://github.com/nodejs/node/pull/55318) +* \[[`3b2b3a8df2`](https://github.com/nodejs/node/commit/3b2b3a8df2)] - **tools**: fix typos (Nathan Baulch) [#55061](https://github.com/nodejs/node/pull/55061) +* \[[`736c085a5d`](https://github.com/nodejs/node/commit/736c085a5d)] - **typings**: add missing type of `ArrayBufferPrototypeGetByteLength` (Wuli Zuo) [#55439](https://github.com/nodejs/node/pull/55439) +* \[[`7b3e38b855`](https://github.com/nodejs/node/commit/7b3e38b855)] - **url**: handle "unsafe" characters properly in `pathToFileURL` (Antoine du Hamel) [#54545](https://github.com/nodejs/node/pull/54545) + ## 2024-10-16, Version 23.0.0 (Current), @RafaelGSS diff --git a/src/node_version.h b/src/node_version.h index 9b13e7208b49fc..e597736d924ba9 100644 --- a/src/node_version.h +++ b/src/node_version.h @@ -23,13 +23,13 @@ #define SRC_NODE_VERSION_H_ #define NODE_MAJOR_VERSION 23 -#define NODE_MINOR_VERSION 0 -#define NODE_PATCH_VERSION 1 +#define NODE_MINOR_VERSION 1 +#define NODE_PATCH_VERSION 0 #define NODE_VERSION_IS_LTS 0 #define NODE_VERSION_LTS_CODENAME "" -#define NODE_VERSION_IS_RELEASE 0 +#define NODE_VERSION_IS_RELEASE 1 #ifndef NODE_STRINGIFY #define NODE_STRINGIFY(n) NODE_STRINGIFY_HELPER(n)