{"ScriptPreparationCode":"function bytesToBase64ByFileReader(bytes) {\r\n return new Promise(r =\u003E {\r\n const reader = new FileReader()\r\n reader.onload = () =\u003E r(reader.result)\r\n reader.readAsDataURL(new Blob([bytes]))\r\n }).then(url =\u003E url.slice(url.indexOf(\u0022,\u0022) \u002B 1));\r\n}\r\n\r\nfunction bytesToBase64ByBtoa(bytes) {\r\n return btoa(bytes.reduce((data, byte) =\u003E data \u002B String.fromCharCode(byte), \u0022\u0022));\r\n}\r\n\r\nfunction base64UrlEncodeConcat(bytes) {\r\n let binary = \u0027\u0027;\r\n for (let i = 0; i \u003C bytes.length; i\u002B\u002B)\r\n binary \u002B= String.fromCharCode(bytes[i]);\r\n return btoa(binary);\r\n}\r\n\r\nfunction base64UrlEncodeSpread(bytes) {\r\n let binary = String.fromCharCode(...bytes);\r\n return btoa(binary);\r\n}\r\n\r\nfunction base64UrlEncodeApply(bytes) {\r\n let binary = String.fromCharCode.apply(null, bytes);\r\n return btoa(binary);\r\n}\r\n\r\nfunction base64UrlEncodeChunk(bytes) {\r\n let binaryString = \u0027\u0027;\r\n for (let i = 0; i \u003C bytes.length; i \u002B= 49152) { // Use chunk size divisible by 3\r\n binaryString \u002B= String.fromCharCode.apply(null, bytes.subarray(i, i \u002B 49152));\r\n }\r\n return btoa(binaryString);\r\n}\r\n\r\nconst bytes1K = new Uint8Array(1024);\r\nfor (const bytes of [bytes1K])\r\n for (let i = 0; i \u003C bytes.length; i \u002B= 65536)\r\n crypto.getRandomValues(bytes.subarray(i, i \u002B 65536));","TestCases":[{"Name":"FileReader","Code":"await bytesToBase64ByFileReader(bytes1K);\r\ndeferred.resolve();","IsDeferred":true},{"Name":"btoa","Code":"bytesToBase64ByBtoa(bytes1K);","IsDeferred":false},{"Name":"Concat","Code":"base64UrlEncodeConcat(bytes1K);","IsDeferred":false},{"Name":"Spread","Code":"base64UrlEncodeSpread(bytes1K);","IsDeferred":false},{"Name":"Apply","Code":"base64UrlEncodeApply(bytes1K);","IsDeferred":false},{"Name":"Chunk","Code":"base64UrlEncodeChunk(bytes1K);","IsDeferred":false}]}