diff --git a/bench/snippets/zlib.mjs b/bench/snippets/zlib.mjs new file mode 100644 index 00000000000000..8bfc87e3082d79 --- /dev/null +++ b/bench/snippets/zlib.mjs @@ -0,0 +1,62 @@ +import { bench, run } from "../runner.mjs"; +import zlib from "node:zlib"; +import { promisify } from "node:util"; + +const deflate = promisify(zlib.deflate); +const inflate = promisify(zlib.inflate); + +const short = "Hello World!"; +const long = "Hello World!".repeat(1024); +const veryLong = "Hello World!".repeat(10240); + +// Pre-compress some data for decompression tests +const shortBuf = Buffer.from(short); +const longBuf = Buffer.from(long); +const veryLongBuf = Buffer.from(veryLong); + +let [shortCompressed, longCompressed, veryLongCompressed] = await Promise.all([ + deflate(shortBuf, { level: 6 }), + deflate(longBuf, { level: 6 }), + deflate(veryLongBuf, { level: 6 }), +]); + +const format = new Intl.NumberFormat("en-US", { notation: "compact", unit: "byte" }); +// Compression tests at different levels +bench(`deflate ${format.format(short.length)}B (level 1)`, async () => { + await deflate(shortBuf, { level: 1 }); +}); + +bench(`deflate ${format.format(short.length)} (level 6)`, async () => { + await deflate(shortBuf, { level: 6 }); +}); + +bench(`deflate ${format.format(long.length)} (level 1)`, async () => { + await deflate(longBuf, { level: 1 }); +}); + +bench(`deflate ${format.format(long.length)} (level 6)`, async () => { + await deflate(longBuf, { level: 6 }); +}); + +bench(`deflate ${format.format(veryLong.length)} (level 1)`, async () => { + await deflate(veryLongBuf, { level: 1 }); +}); + +bench(`deflate ${format.format(veryLong.length)} (level 6)`, async () => { + await deflate(veryLongBuf, { level: 6 }); +}); + +// Decompression tests +bench(`inflate ${format.format(short.length)}`, async () => { + await inflate(shortCompressed); +}); + +bench(`inflate ${format.format(long.length)}`, async () => { + await inflate(longCompressed); +}); + +bench(`inflate ${format.format(veryLong.length)}`, async () => { + await inflate(veryLongCompressed); +}); + +await run(); diff --git a/cmake/targets/BuildBun.cmake b/cmake/targets/BuildBun.cmake index 11759e2f7a9418..35949d5239e97f 100644 --- a/cmake/targets/BuildBun.cmake +++ b/cmake/targets/BuildBun.cmake @@ -860,7 +860,7 @@ endif() if(WIN32) target_link_options(${bun} PUBLIC - /STACK:0x1200000,0x100000 + /STACK:0x1200000,0x200000 /errorlimit:0 ) if(RELEASE) diff --git a/misctools/gen-unicode-table.js b/misctools/gen-unicode-table.js deleted file mode 100644 index 1696a4b9e8d1ba..00000000000000 --- a/misctools/gen-unicode-table.js +++ /dev/null @@ -1,172 +0,0 @@ -// Thank you @evanw for this code!!! -const fs = require("fs"); -const path = require("path"); - -// ES5 reference: https://es5.github.io/ -// -// A conforming implementation of this International standard shall interpret -// characters in conformance with the Unicode Standard, Version 3.0 or later -// and ISO/IEC 10646-1 with either UCS-2 or UTF-16 as the adopted encoding -// form, implementation level 3. If the adopted ISO/IEC 10646-1 subset is not -// otherwise specified, it is presumed to be the BMP subset, collection 300. -// -// UnicodeLetter: any character in the Unicode categories “Uppercase letter (Lu)”, -// “Lowercase letter (Ll)”, “Titlecase letter (Lt)”, “Modifier letter (Lm)”, -// “Other letter (Lo)”, or “Letter number (Nl)”. -const idStartES5 = [] - .concat( - require("@unicode/unicode-3.0.0/General_Category/Uppercase_Letter/code-points"), - require("@unicode/unicode-3.0.0/General_Category/Lowercase_Letter/code-points"), - require("@unicode/unicode-3.0.0/General_Category/Titlecase_Letter/code-points"), - require("@unicode/unicode-3.0.0/General_Category/Modifier_Letter/code-points"), - require("@unicode/unicode-3.0.0/General_Category/Other_Letter/code-points"), - - // The "letter number" category is not included because old versions of Safari - // had a bug where they didn't include it. This means it does not match ES5. - // We need to make sure we escape these characters so Safari can read them. - // See https://github.com/evanw/esbuild/issues/1349 for more information. - // require('@unicode/unicode-3.0.0/General_Category/Letter_Number/code-points'), - ) - .sort((a, b) => a - b); - -// UnicodeCombiningMark: any character in the Unicode categories “Non-spacing mark (Mn)” -// or “Combining spacing mark (Mc)” -// UnicodeDigit: any character in the Unicode category “Decimal number (Nd)” -// UnicodeConnectorPunctuation: any character in the Unicode category “Connector punctuation (Pc)” -const idContinueES5 = idStartES5 - .concat( - require("@unicode/unicode-3.0.0/General_Category/Nonspacing_Mark/code-points"), - require("@unicode/unicode-3.0.0/General_Category/Spacing_Mark/code-points"), - require("@unicode/unicode-3.0.0/General_Category/Decimal_Number/code-points"), - require("@unicode/unicode-3.0.0/General_Category/Connector_Punctuation/code-points"), - ) - .sort((a, b) => a - b); - -// ESNext reference: https://tc39.es/ecma262/ -// -// A conforming implementation of ECMAScript must interpret source text input -// in conformance with the Unicode Standard, Version 5.1.0 or later and ISO/IEC -// 10646. If the adopted ISO/IEC 10646-1 subset is not otherwise specified, it -// is presumed to be the Unicode set, collection 10646. -// -// UnicodeIDStart: any Unicode code point with the Unicode property “ID_Start” -const idStartESNext = require("@unicode/unicode-13.0.0/Binary_Property/ID_Start/code-points"); -const idStartESNextSet = new Set(idStartESNext); - -// UnicodeIDContinue: any Unicode code point with the Unicode property “ID_Continue” -const idContinueESNext = require("@unicode/unicode-13.0.0/Binary_Property/ID_Continue/code-points"); -const idContinueESNextSet = new Set(idContinueESNext); - -// These identifiers are valid in both ES5 and ES6+ (i.e. an intersection of both) -const idStartES5AndESNext = idStartES5.filter(n => idStartESNextSet.has(n)); -const idContinueES5AndESNext = idContinueES5.filter(n => idContinueESNextSet.has(n)); - -// These identifiers are valid in either ES5 or ES6+ (i.e. a union of both) -const idStartES5OrESNext = [...new Set(idStartES5.concat(idStartESNext))].sort((a, b) => a - b); -const idContinueES5OrESNext = [...new Set(idContinueES5.concat(idContinueESNext))].sort((a, b) => a - b); - -function generateRangeTable(codePoints) { - let lines = []; - let index = 0; - let latinOffset = 0; - - while (latinOffset < codePoints.length && codePoints[latinOffset] <= 0xff) { - latinOffset++; - } - - lines.push(`RangeTable.init(`, ` ${latinOffset},`, ` &[_]R16Range{`); - - // 16-bit code points - while (index < codePoints.length && codePoints[index] < 0x1000) { - let start = codePoints[index]; - index++; - while (index < codePoints.length && codePoints[index] < 0x1000 && codePoints[index] === codePoints[index - 1] + 1) { - index++; - } - let end = codePoints[index - 1]; - lines.push(` .{0x${start.toString(16)}, 0x${end.toString(16)}},`); - } - - lines.push(` },`, `&[_]R32Range{`); - - // 32-bit code points - while (index < codePoints.length) { - let start = codePoints[index]; - index++; - while (index < codePoints.length && codePoints[index] === codePoints[index - 1] + 1) { - index++; - } - let end = codePoints[index - 1]; - lines.push(` .{0x${start.toString(16)}, 0x${end.toString(16)}},`); - } - - lines.push(` },`, `);`); - return lines.join("\n"); -} - -function generateBigSwitchStatement(codePoints) { - let lines = []; - let index = 0; - let latinOffset = 0; - - while (latinOffset < codePoints.length && codePoints[latinOffset] <= 0xff) { - latinOffset++; - } - - lines.push(`return switch(codepoint) {`); - - // 16-bit code points - while (index < codePoints.length && codePoints[index] < 0x1000) { - let start = codePoints[index]; - index++; - while (index < codePoints.length && codePoints[index] < 0x1000 && codePoints[index] === codePoints[index - 1] + 1) { - index++; - } - let end = codePoints[index - 1]; - lines.push(`0x${start.toString(16)}...0x${end.toString(16)},`); - } - - // 32-bit code points - while (index < codePoints.length) { - let start = codePoints[index]; - index++; - while (index < codePoints.length && codePoints[index] === codePoints[index - 1] + 1) { - index++; - } - let end = codePoints[index - 1]; - lines.push(` 0x${start.toString(16)}...0x${end.toString(16)},`); - } - - lines.push(` => true, - else => false -};`); - return lines.join("\n"); -} - -fs.writeFileSync( - path.join(__dirname, "..", "src", "js_lexer", "unicode.zig"), - `// This file was automatically generated by ${path.basename(__filename)}. Do not edit. - - const RangeTable = @import("./range_table.zig"); - - -// ES5 || ESNext -pub const id_start = ${generateRangeTable(idStartES5OrESNext)} - -// ES5 || ESNext -pub const id_continue = ${generateRangeTable(idContinueES5OrESNext)} - -pub const printable_id_start = ${generateRangeTable(idStartESNext)} -pub const printable_id_continue = ${generateRangeTable(idContinueESNext)} - -pub fn isIdentifierStart(comptime Codepoint: type, codepoint: Codepoint) bool{ - ${generateBigSwitchStatement(idStartES5OrESNext)} -} - -pub fn isIdentifierContinue(comptime Codepoint: type, codepoint: Codepoint) bool{ - ${generateBigSwitchStatement(idContinueES5OrESNext)} -} - - -`, -); diff --git a/misctools/gen-unicode-table.ts b/misctools/gen-unicode-table.ts new file mode 100644 index 00000000000000..5bf5d9deadaa63 --- /dev/null +++ b/misctools/gen-unicode-table.ts @@ -0,0 +1,108 @@ +import { Generator, Context } from "./unicode-generator"; + +// Create sets for fast lookups +const idStartES5Set = new Set([ + ...require("@unicode/unicode-3.0.0/General_Category/Uppercase_Letter/code-points"), + ...require("@unicode/unicode-3.0.0/General_Category/Lowercase_Letter/code-points"), + ...require("@unicode/unicode-3.0.0/General_Category/Titlecase_Letter/code-points"), + ...require("@unicode/unicode-3.0.0/General_Category/Modifier_Letter/code-points"), + ...require("@unicode/unicode-3.0.0/General_Category/Other_Letter/code-points"), +]); + +const idContinueES5Set = new Set([ + ...idStartES5Set, + ...require("@unicode/unicode-3.0.0/General_Category/Nonspacing_Mark/code-points"), + ...require("@unicode/unicode-3.0.0/General_Category/Spacing_Mark/code-points"), + ...require("@unicode/unicode-3.0.0/General_Category/Decimal_Number/code-points"), + ...require("@unicode/unicode-3.0.0/General_Category/Connector_Punctuation/code-points"), +]); + +const idStartESNextSet = new Set(require("@unicode/unicode-15.1.0/Binary_Property/ID_Start/code-points")); +const idContinueESNextSet = new Set(require("@unicode/unicode-15.1.0/Binary_Property/ID_Continue/code-points")); + +// Exclude known problematic codepoints +const ID_Continue_mistake = new Set([0x30fb, 0xff65]); + +function bitsToU64Array(bits: number[]): bigint[] { + const result: bigint[] = []; + for (let i = 0; i < bits.length; i += 64) { + let value = 0n; + for (let j = 0; j < 64 && i + j < bits.length; j++) { + if (bits[i + j]) { + value |= 1n << BigInt(j); + } + } + result.push(value); + } + return result; +} + +async function generateTable(table: string, name: string, checkFn: (cp: number) => boolean) { + const context: Context = { + get: (cp: number) => checkFn(cp), + eql: (a: boolean, b: boolean) => a === b, + }; + + const generator = new Generator(context); + const tables = await generator.generate(); + + return ` +pub fn ${name}(cp: u21) bool { + if (cp > 0x10FFFF) return false; + const high = cp >> 8; + const low = cp & 0xFF; + const stage2_idx = ${table}.stage1[high]; + const bit_pos = stage2_idx + low; + const u64_idx = bit_pos >> 6; + const bit_idx = @as(u6, @intCast(bit_pos & 63)); + return (${table}.stage2[u64_idx] & (@as(u64, 1) << bit_idx)) != 0; +} +const ${table} = struct { + pub const stage1 = [_]u16{${tables.stage1.join(",")}}; + pub const stage2 = [_]u64{${bitsToU64Array(tables.stage2) + .map(n => n.toString()) + .join(",")}}; +}; + +`; +} + +async function main() { + const functions = [ + { + name: "isIDStartES5", + table: "idStartES5", + check: (cp: number) => idStartES5Set.has(cp), + }, + { + name: "isIDContinueES5", + table: "idContinueES5", + check: (cp: number) => idContinueES5Set.has(cp), + }, + { + name: "isIDStartESNext", + table: "idStartESNext", + check: (cp: number) => idStartESNextSet.has(cp), + }, + { + name: "isIDContinueESNext", + table: "idContinueESNext", + check: (cp: number) => idContinueESNextSet.has(cp) && !ID_Continue_mistake.has(cp), + }, + ]; + + const results = await Promise.all( + functions.map(async ({ name, check, table }) => { + const code = await generateTable(table, name, check); + return ` +/// ${name} checks if a codepoint is valid in the ${name} category +${code}`; + }), + ); + + console.log(`/// This file is auto-generated. Do not edit. + +${results.join("\n\n")}`); +} + +main(); diff --git a/misctools/generate-add-completions.ts b/misctools/generate-add-completions.ts new file mode 100644 index 00000000000000..8605cae027d8cf --- /dev/null +++ b/misctools/generate-add-completions.ts @@ -0,0 +1,231 @@ +import * as fs from "fs"; +import path from "path"; +import { execSync } from "child_process"; + +interface LetterGroup { + offset: number; + length: number; + packages: string[]; +} + +// Read and parse input file +const content = fs.readFileSync(path.join(__dirname, "..", "src", "cli", "add_completions.txt"), "utf8"); +const packages = content + .split("\n") + .map(line => line.trim()) + .filter(line => line.length > 0) + .sort(); + +// Group packages by first letter +const letterGroups = new Map(); +let currentOffset = 0; +let maxListSize = 0; + +for (const pkg of packages) { + if (pkg.length === 0) continue; + const firstLetter = pkg[0].toLowerCase(); + if (!letterGroups.has(firstLetter)) { + letterGroups.set(firstLetter, { + offset: currentOffset, + length: 0, + packages: [], + }); + } + const group = letterGroups.get(firstLetter)!; + group.packages.push(pkg); + group.length++; + maxListSize = Math.max(maxListSize, group.length); +} + +// Helper to ensure temp dir exists +const tmpDir = path.join(__dirname, "tmp"); +if (!fs.existsSync(tmpDir)) { + fs.mkdirSync(tmpDir); +} + +// Create a single buffer with all package data +const dataChunks: Buffer[] = []; +let totalUncompressed = 0; + +// Store total package count first +const totalCountBuf = Buffer.alloc(4); +totalCountBuf.writeUInt32LE(packages.length, 0); +dataChunks.push(totalCountBuf); +totalUncompressed += 4; + +// Then all packages with length prefixes +for (const pkg of packages) { + const lenBuf = Buffer.alloc(2); + lenBuf.writeUInt16LE(pkg.length, 0); + dataChunks.push(lenBuf); + dataChunks.push(Buffer.from(pkg, "utf8")); + totalUncompressed += 2 + pkg.length; +} + +const uncompressedData = Buffer.concat(dataChunks); + +// Write to temp file and compress with zstd +const uncompressedPath = path.join(tmpDir, "packages.bin"); +const compressedPath = path.join(tmpDir, "packages.bin.zst"); + +fs.writeFileSync(uncompressedPath, uncompressedData); +execSync(`zstd -1 --rm -f "${uncompressedPath}" -o "${compressedPath}"`); + +// Read back compressed data +const compressedData = fs.readFileSync(compressedPath); +fs.unlinkSync(compressedPath); + +// Calculate compression ratio +const totalCompressed = compressedData.length; +const ratio = ((totalCompressed / totalUncompressed) * 100).toFixed(1); + +console.log("\nCompression statistics:"); +console.log(`Uncompressed size: ${totalUncompressed} bytes`); +console.log(`Compressed size: ${totalCompressed} bytes`); +console.log(`Compression ratio: ${ratio}%`); + +// Generate Zig code +const chunks: string[] = []; + +// Header with comments and imports +chunks.push(`// Auto-generated file. Do not edit. +// To regenerate this file, run: +// +// bun misctools/generate-add-completions.ts +// +// If you update add_completions.txt, then you should run this script again. +// +// This used to be a comptime block, but it made the build too slow. +// Compressing the completions list saves about 100 KB of binary size. +const std = @import("std"); +const bun = @import("root").bun; +const zstd = bun.zstd; +const Environment = bun.Environment; + +pub const FirstLetter = enum(u8) { + a = 'a', + b = 'b', + c = 'c', + d = 'd', + e = 'e', + f = 'f', + g = 'g', + h = 'h', + i = 'i', + j = 'j', + k = 'k', + l = 'l', + m = 'm', + n = 'n', + o = 'o', + p = 'p', + q = 'q', + r = 'r', + s = 's', + t = 't', + u = 'u', + v = 'v', + w = 'w', + x = 'x', + y = 'y', + z = 'z', +};`); + +// Add the compressed data +chunks.push(`const compressed_data = [_]u8{${[...compressedData].join(",")}};`); + +// Add uncompressed size constant +chunks.push(`const uncompressed_size: usize = ${totalUncompressed};`); + +// Generate index entries +const indexEntries: string[] = []; +let offset = 0; +for (const letter of "abcdefghijklmnopqrstuvwxyz") { + const group = letterGroups.get(letter); + if (group) { + indexEntries.push(` .${letter} = .{ .offset = ${offset}, .length = ${group.length} }`); + offset += group.length; + } else { + indexEntries.push(` .${letter} = .{ .offset = ${offset}, .length = 0 }`); + } +} + +// Generate index type and instance +chunks.push(`pub const IndexEntry = struct { + offset: usize, + length: usize, +}; + +pub const Index = std.EnumArray(FirstLetter, IndexEntry); + +pub const index = Index.init(.{ +${indexEntries.join(",\n")} + });`); + +// Generate the decompression and access function +chunks.push(`var decompressed_data: ?[]u8 = null; +var packages_list: ?[][]const u8 = null; + +pub fn init(allocator: std.mem.Allocator) !void { + // Decompress data + var data = try allocator.alloc(u8, uncompressed_size); + errdefer allocator.free(data); + + const result = zstd.decompress(data, &compressed_data); + decompressed_data = data[0..result.success]; + + // Parse package list + const total_count = std.mem.readInt(u32, data[0..4], .little); + var packages = try allocator.alloc([]const u8, total_count); + errdefer allocator.free(packages); + + var pos: usize = 4; + var i: usize = 0; + while (i < total_count) : (i += 1) { + const len = std.mem.readInt(u16, data[pos..][0..2], .little); + pos += 2; + packages[i] = data[pos..pos + len]; + pos += len; + } + + packages_list = packages; +} + +pub fn deinit(allocator: std.mem.Allocator) void { + if (packages_list) |pkgs| { + allocator.free(pkgs); + packages_list = null; + } + + if (decompressed_data) |data| { + allocator.free(data); + decompressed_data = null; + } +} + +pub fn getPackages(letter: FirstLetter) []const []const u8 { + const entry = index.get(letter); + if (entry.length == 0) return &[_][]const u8{}; + + return packages_list.?[entry.offset..entry.offset + entry.length]; +}`); + +// Add biggest_list constant +chunks.push(`pub const biggest_list: usize = ${maxListSize};`); + +// Write the output +let zigCode = chunks.join("\n\n"); + +zigCode = execSync("zig fmt --stdin", { + input: zigCode, + encoding: "utf8", +}).toString(); + +fs.writeFileSync(path.join(__dirname, "..", "src", "cli", "add_completions.zig"), zigCode); + +// Clean up temp dir +try { + fs.rmdirSync(tmpDir); +} catch {} + +console.log(`\nGenerated Zig completions for ${packages.length} packages`); diff --git a/misctools/package.json b/misctools/package.json index 18a85e85e4a1e2..725cff6ac3eb6c 100644 --- a/misctools/package.json +++ b/misctools/package.json @@ -5,7 +5,10 @@ "license": "MIT", "devDependencies": { "@unicode/unicode-13.0.0": "^1.2.1", - "@unicode/unicode-3.0.0": "^1.2.1", + "@unicode/unicode-3.0.0": "^1.6.5", "semver": "^7.3.7" + }, + "dependencies": { + "@unicode/unicode-15.1.0": "^1.6.5" } } \ No newline at end of file diff --git a/misctools/unicode-generator.ts b/misctools/unicode-generator.ts new file mode 100644 index 00000000000000..5d4260e5007b39 --- /dev/null +++ b/misctools/unicode-generator.ts @@ -0,0 +1,138 @@ +import crypto from "crypto"; + +// Types to mirror Zig's structures +interface Context { + get(codepoint: number): Promise | Elem; + eql(a: Elem, b: Elem): boolean; +} + +interface Tables { + stage1: number[]; + stage2: number[]; + stage3: Elem[]; +} + +class Generator { + private static readonly BLOCK_SIZE = 256; + private readonly ctx: Context; + private readonly blockMap = new Map(); + + constructor(ctx: Context) { + this.ctx = ctx; + } + + private hashBlock(block: number[]): string { + const hash = crypto.createHash("sha256"); + hash.update(Buffer.from(new Uint16Array(block).buffer)); + return hash.digest("hex"); + } + + async generate(): Promise> { + const stage1: number[] = []; + const stage2: number[] = []; + const stage3: Elem[] = []; + + let block = new Array(Generator.BLOCK_SIZE).fill(0); + let blockLen = 0; + + // Maximum Unicode codepoint is 0x10FFFF + for (let cp = 0; cp <= 0x10ffff; cp++) { + // Get the mapping for this codepoint + const elem = await this.ctx.get(cp); + + // Find or add the element in stage3 + let blockIdx = stage3.findIndex(item => this.ctx.eql(item, elem)); + if (blockIdx === -1) { + blockIdx = stage3.length; + stage3.push(elem); + } + + if (blockIdx > 0xffff) { + throw new Error("Block index too large"); + } + + // Add to current block + block[blockLen] = blockIdx; + blockLen++; + + // Check if we need to finalize this block + if (blockLen < Generator.BLOCK_SIZE && cp !== 0x10ffff) { + continue; + } + + // Fill remaining block space with zeros if needed + if (blockLen < Generator.BLOCK_SIZE) { + block.fill(0, blockLen); + } + + // Get or create stage2 index for this block + const blockHash = this.hashBlock(block); + let stage2Idx = this.blockMap.get(blockHash); + + if (stage2Idx === undefined) { + stage2Idx = stage2.length; + this.blockMap.set(blockHash, stage2Idx); + stage2.push(...block.slice(0, blockLen)); + } + + if (stage2Idx > 0xffff) { + throw new Error("Stage2 index too large"); + } + + // Add mapping to stage1 + stage1.push(stage2Idx); + + // Reset block + block = new Array(Generator.BLOCK_SIZE).fill(0); + blockLen = 0; + } + + return { stage1, stage2, stage3 }; + } + + // Generates Zig code for the lookup tables + static writeZig(tableName: string, tables: Tables, elemToString: (elem: Elem) => string): string { + let output = `/// Auto-generated. Do not edit.\n`; + output += `fn ${tableName}(comptime Elem: type) type {\n`; + output += " return struct {\n"; + + // Stage 1 + output += `pub const stage1: [${tables.stage1.length}]u16 = .{`; + output += tables.stage1.join(","); + output += "};\n\n"; + + // Stage 2 + output += `pub const stage2: [${tables.stage2.length}]u8 = .{`; + output += tables.stage2.join(","); + output += "};\n\n"; + + // Stage 3 + output += `pub const stage3: [${tables.stage3.length}]Elem = .{`; + output += tables.stage3.map(elemToString).join(","); + output += "};\n"; + + output += " };\n}\n"; + return output; + } +} + +// Example usage: +async function example() { + // Example context that maps codepoints to their category + const ctx: Context = { + get: async (cp: number) => { + // This would normally look up the actual Unicode category + return "Lu"; + }, + eql: (a: string, b: string) => a === b, + }; + + const generator = new Generator(ctx); + const tables = await generator.generate(); + + // Generate Zig code + const zigCode = Generator.writeZig(tables, (elem: string) => `"${elem}"`); + console.log(zigCode); +} + +export { Generator, type Context, type Tables }; diff --git a/src/bit_set.zig b/src/bit_set.zig index 245dbd09e6ed34..2ecd5b3591f12d 100644 --- a/src/bit_set.zig +++ b/src/bit_set.zig @@ -1,3 +1,8 @@ +//! This is a fork of Zig standard library bit_set.zig +//! - https://github.com/ziglang/zig/pull/14129 +//! - AutoBitset which optimally chooses between a dynamic or static bitset. +//! Prefer our fork over std.bit_set.zig. +//! //! This file defines several variants of bit sets. A bit set //! is a densely stored set of integers with a known maximum, //! in which each integer gets a single bit. Bit sets have very @@ -402,7 +407,7 @@ pub fn ArrayBitSet(comptime MaskIntType: type, comptime size: usize) type { /// Returns true if the bit at the specified index /// is present in the set, false otherwise. - pub inline fn isSet(self: *const Self, index: usize) bool { + pub fn isSet(self: *const Self, index: usize) bool { if (comptime Environment.allow_assert) bun.assert(index < bit_length); if (num_masks == 0) return false; // doesn't compile in this case return (self.masks[maskIndex(index)] & maskBit(index)) != 0; diff --git a/src/bun.js/ConsoleObject.zig b/src/bun.js/ConsoleObject.zig index 12a2506a4132e0..b6f05770b60443 100644 --- a/src/bun.js/ConsoleObject.zig +++ b/src/bun.js/ConsoleObject.zig @@ -299,6 +299,8 @@ pub const TablePrinter = struct { .quote_strings = false, .single_line = true, .max_depth = 5, + .can_throw_stack_overflow = true, + .stack_check = bun.StackCheck.init(), }, }; } @@ -481,8 +483,12 @@ pub const TablePrinter = struct { defer { if (value_formatter.map_node) |node| { - node.data = value_formatter.map; - node.data.clearRetainingCapacity(); + this.value_formatter.map_node = null; + if (node.data.capacity() > 512) { + node.data.clearAndFree(); + } else { + node.data.clearRetainingCapacity(); + } node.release(); } } @@ -767,17 +773,9 @@ pub fn format2( writer: Writer, options: FormatOptions, ) void { - var fmt: ConsoleObject.Formatter = undefined; - defer { - if (fmt.map_node) |node| { - node.data = fmt.map; - node.data.clearRetainingCapacity(); - node.release(); - } - } - if (len == 1) { - fmt = ConsoleObject.Formatter{ + // initialized later in this function. + var fmt = ConsoleObject.Formatter{ .remaining_values = &[_]JSValue{}, .globalThis = global, .ordered_properties = options.ordered_properties, @@ -785,7 +783,10 @@ pub fn format2( .max_depth = options.max_depth, .single_line = options.single_line, .indent = options.default_indent, + .stack_check = bun.StackCheck.init(), + .can_throw_stack_overflow = true, }; + defer fmt.deinit(); const tag = ConsoleObject.Formatter.Tag.get(vals[0], global); fmt.writeIndent(Writer, writer) catch return; @@ -858,14 +859,17 @@ pub fn format2( } var this_value: JSValue = vals[0]; - fmt = ConsoleObject.Formatter{ + var fmt = ConsoleObject.Formatter{ .remaining_values = vals[0..len][1..], .globalThis = global, .ordered_properties = options.ordered_properties, .quote_strings = options.quote_strings, .single_line = options.single_line, .indent = options.default_indent, + .stack_check = bun.StackCheck.init(), + .can_throw_stack_overflow = true, }; + defer fmt.deinit(); var tag: ConsoleObject.Formatter.Tag.Result = undefined; fmt.writeIndent(Writer, writer) catch return; @@ -942,6 +946,21 @@ pub const Formatter = struct { single_line: bool = false, ordered_properties: bool = false, custom_formatted_object: CustomFormattedObject = .{}, + disable_inspect_custom: bool = false, + stack_check: bun.StackCheck = .{ .cached_stack_end = std.math.maxInt(usize) }, + can_throw_stack_overflow: bool = false, + + pub fn deinit(this: *Formatter) void { + if (bun.take(&this.map_node)) |node| { + node.data = this.map; + if (node.data.capacity() > 512) { + node.data.clearAndFree(); + } else { + node.data.clearRetainingCapacity(); + } + node.release(); + } + } pub fn goodTimeForANewLine(this: *@This()) bool { if (this.estimated_line_length > 80) { @@ -1052,8 +1071,11 @@ pub const Formatter = struct { }; } - pub inline fn canHaveCircularReferences(tag: Tag) bool { - return tag == .Array or tag == .Object or tag == .Map or tag == .Set; + pub fn canHaveCircularReferences(tag: Tag) bool { + return switch (tag) { + .Function, .Array, .Object, .Map, .Set, .Error, .Class, .Event => true, + else => false, + }; } const Result = struct { @@ -1106,8 +1128,10 @@ pub const Formatter = struct { return getAdvanced(value, globalThis, .{ .hide_global = false }); } - pub const Options = struct { + // It sounds silly to make this packed, but Tag.getAdvanced is extremely recursive. + pub const Options = packed struct { hide_global: bool = false, + disable_inspect_custom: bool = false, }; pub fn getAdvanced(value: JSValue, globalThis: *JSGlobalObject, opts: Options) Result { @@ -1154,7 +1178,7 @@ pub const Formatter = struct { }; } - if (js_type.canGet() and js_type != .ProxyObject) { + if (js_type.canGet() and js_type != .ProxyObject and !opts.disable_inspect_custom) { // Attempt to get custom formatter if (value.fastGet(globalThis, .inspectCustom)) |callback_value| { if (callback_value.isCallable(globalThis.vm())) { @@ -1181,7 +1205,7 @@ pub const Formatter = struct { // If we check an Object has a method table and it does not // it will crash - if (js_type != .Object and value.isCallable(globalThis.vm())) { + if (js_type != .Object and js_type != .ProxyObject and value.isCallable(globalThis.vm())) { if (value.isClass(globalThis)) { return .{ .tag = .{ .Class = {} }, @@ -1544,11 +1568,17 @@ pub const Formatter = struct { } pub fn WrappedWriter(comptime Writer: type) type { + if (@hasDecl(Writer, "is_wrapped_writer")) { + @compileError("Do not nest WrappedWriter"); + } + return struct { ctx: Writer, failed: bool = false, estimated_line_length: *usize, + pub const is_wrapped_writer = true; + pub fn print(self: *@This(), comptime fmt: string, args: anytype) void { self.ctx.print(fmt, args) catch { self.failed = true; @@ -1642,16 +1672,16 @@ pub const Formatter = struct { }; } + const indentation_buf = [_]u8{' '} ** 64; pub fn writeIndent( this: *ConsoleObject.Formatter, comptime Writer: type, writer: Writer, ) !void { - var buf = [_]u8{' '} ** 64; var total_remain: u32 = this.indent; while (total_remain > 0) { const written: u8 = @min(32, total_remain); - try writer.writeAll(buf[0 .. written * 2]); + try writer.writeAll(indentation_buf[0 .. written * 2]); total_remain -|= written; } } @@ -1668,6 +1698,7 @@ pub const Formatter = struct { count: usize = 0, pub fn forEach(_: [*c]JSC.VM, globalObject: *JSGlobalObject, ctx: ?*anyopaque, nextValue: JSValue) callconv(.C) void { var this: *@This() = bun.cast(*@This(), ctx orelse return); + if (this.formatter.failed) return; if (single_line and this.count > 0) { this.formatter.printComma(Writer, this.writer, enable_ansi_colors) catch unreachable; this.writer.writeAll(" ") catch unreachable; @@ -1679,7 +1710,10 @@ pub const Formatter = struct { if (!single_line) { this.formatter.writeIndent(Writer, this.writer) catch unreachable; } - const key_tag = Tag.getAdvanced(key, globalObject, .{ .hide_global = true }); + const key_tag = Tag.getAdvanced(key, globalObject, .{ + .hide_global = true, + .disable_inspect_custom = this.formatter.disable_inspect_custom, + }); this.formatter.format( key_tag, @@ -1690,7 +1724,10 @@ pub const Formatter = struct { enable_ansi_colors, ); this.writer.writeAll(": ") catch unreachable; - const value_tag = Tag.getAdvanced(value, globalObject, .{ .hide_global = true }); + const value_tag = Tag.getAdvanced(value, globalObject, .{ + .hide_global = true, + .disable_inspect_custom = this.formatter.disable_inspect_custom, + }); this.formatter.format( value_tag, Writer, @@ -1704,7 +1741,10 @@ pub const Formatter = struct { this.writer.writeAll("\n") catch unreachable; this.formatter.writeIndent(Writer, this.writer) catch unreachable; } - const tag = Tag.getAdvanced(nextValue, globalObject, .{ .hide_global = true }); + const tag = Tag.getAdvanced(nextValue, globalObject, .{ + .hide_global = true, + .disable_inspect_custom = this.formatter.disable_inspect_custom, + }); this.formatter.format( tag, Writer, @@ -1732,6 +1772,7 @@ pub const Formatter = struct { is_first: bool = true, pub fn forEach(_: [*c]JSC.VM, globalObject: *JSGlobalObject, ctx: ?*anyopaque, nextValue: JSValue) callconv(.C) void { var this: *@This() = bun.cast(*@This(), ctx orelse return); + if (this.formatter.failed) return; if (single_line) { if (!this.is_first) { this.formatter.printComma(Writer, this.writer, enable_ansi_colors) catch unreachable; @@ -1741,7 +1782,10 @@ pub const Formatter = struct { } else { this.formatter.writeIndent(Writer, this.writer) catch {}; } - const key_tag = Tag.getAdvanced(nextValue, globalObject, .{ .hide_global = true }); + const key_tag = Tag.getAdvanced(nextValue, globalObject, .{ + .hide_global = true, + .disable_inspect_custom = this.formatter.disable_inspect_custom, + }); this.formatter.format( key_tag, Writer, @@ -1807,6 +1851,7 @@ pub const Formatter = struct { var ctx: *@This() = bun.cast(*@This(), ctx_ptr orelse return); var this = ctx.formatter; + if (this.failed) return; const writer_ = ctx.writer; var writer = WrappedWriter(Writer){ .ctx = writer_, @@ -1814,7 +1859,10 @@ pub const Formatter = struct { .estimated_line_length = &this.estimated_line_length, }; - const tag = Tag.getAdvanced(value, globalThis, .{ .hide_global = true }); + const tag = Tag.getAdvanced(value, globalThis, .{ + .hide_global = true, + .disable_inspect_custom = this.disable_inspect_custom, + }); if (tag.cell.isHidden()) return; if (ctx.i == 0) { @@ -1949,6 +1997,11 @@ pub const Formatter = struct { ) void { if (this.failed) return; + if (this.globalThis.hasException()) { + this.failed = true; + return; + } + var writer = WrappedWriter(Writer){ .ctx = writer_, .estimated_line_length = &this.estimated_line_length }; defer { if (writer.failed) { @@ -1956,6 +2009,14 @@ pub const Formatter = struct { } } if (comptime Format.canHaveCircularReferences()) { + if (!this.stack_check.isSafeToRecurse()) { + this.failed = true; + if (this.can_throw_stack_overflow) { + this.globalThis.throwStackOverflow(); + } + return; + } + if (this.map_node == null) { this.map_node = Visited.Pool.get(default_allocator); this.map_node.?.data.clearRetainingCapacity(); @@ -2156,6 +2217,7 @@ pub const Formatter = struct { value, null, null, + this, Writer, writer_, enable_ansi_colors, @@ -2270,7 +2332,10 @@ pub const Formatter = struct { first: { const element = value.getDirectIndex(this.globalThis, 0); - const tag = Tag.getAdvanced(element, this.globalThis, .{ .hide_global = true }); + const tag = Tag.getAdvanced(element, this.globalThis, .{ + .hide_global = true, + .disable_inspect_custom = this.disable_inspect_custom, + }); was_good_time = was_good_time or !tag.tag.isPrimitive() or this.goodTimeForANewLine(); @@ -2291,6 +2356,10 @@ pub const Formatter = struct { } this.format(tag, Writer, writer_, element, this.globalThis, enable_ansi_colors); + if (this.globalThis.hasException()) { + this.failed = true; + } + if (this.failed) return; if (tag.cell.isStringLike()) { if (comptime enable_ansi_colors) { @@ -2350,9 +2419,13 @@ pub const Formatter = struct { writer.space(); } - const tag = Tag.getAdvanced(element, this.globalThis, .{ .hide_global = true }); + const tag = Tag.getAdvanced(element, this.globalThis, .{ + .hide_global = true, + .disable_inspect_custom = this.disable_inspect_custom, + }); this.format(tag, Writer, writer_, element, this.globalThis, enable_ansi_colors); + if (this.failed) return; if (tag.cell.isStringLike()) { if (comptime enable_ansi_colors) { @@ -2395,6 +2468,10 @@ pub const Formatter = struct { .i = i, }; value.forEachPropertyNonIndexed(this.globalThis, &iter, Iterator.forEach); + if (this.globalThis.hasException()) { + this.failed = true; + } + if (this.failed) return; } } @@ -2581,6 +2658,7 @@ pub const Formatter = struct { .writer = writer_, }; value.forEach(this.globalThis, &iter, @TypeOf(iter).forEach); + if (this.failed) return; if (single_line and iter.count > 0) { writer.writeAll(" "); } @@ -2610,6 +2688,7 @@ pub const Formatter = struct { .writer = writer_, }; value.forEach(this.globalThis, &iter, @TypeOf(iter).forEach); + if (this.failed) return; if (iter.count > 0) { if (single_line) { writer.writeAll(" "); @@ -2643,6 +2722,7 @@ pub const Formatter = struct { .writer = writer_, }; value.forEach(this.globalThis, &iter, @TypeOf(iter).forEach); + if (this.failed) return; if (iter.count > 0 and !single_line) { writer.writeAll("\n"); } @@ -2689,6 +2769,7 @@ pub const Formatter = struct { .writer = writer_, }; value.forEach(this.globalThis, &iter, @TypeOf(iter).forEach); + if (this.failed) return; if (single_line and !iter.is_first) { writer.writeAll(" "); } @@ -2794,8 +2875,12 @@ pub const Formatter = struct { .{}, ); - const tag = Tag.getAdvanced(message_value, this.globalThis, .{ .hide_global = true }); + const tag = Tag.getAdvanced(message_value, this.globalThis, .{ + .hide_global = true, + .disable_inspect_custom = this.disable_inspect_custom, + }); this.format(tag, Writer, writer_, message_value, this.globalThis, enable_ansi_colors); + if (this.failed) return; this.printComma(Writer, writer_, enable_ansi_colors) catch unreachable; if (!this.single_line) { writer.writeAll("\n"); @@ -2814,8 +2899,12 @@ pub const Formatter = struct { .{}, ); const data = value.fastGet(this.globalThis, .data) orelse JSValue.undefined; - const tag = Tag.getAdvanced(data, this.globalThis, .{ .hide_global = true }); + const tag = Tag.getAdvanced(data, this.globalThis, .{ + .hide_global = true, + .disable_inspect_custom = this.disable_inspect_custom, + }); this.format(tag, Writer, writer_, data, this.globalThis, enable_ansi_colors); + if (this.failed) return; this.printComma(Writer, writer_, enable_ansi_colors) catch unreachable; if (!this.single_line) { writer.writeAll("\n"); @@ -2832,8 +2921,12 @@ pub const Formatter = struct { .{}, ); - const tag = Tag.getAdvanced(error_value, this.globalThis, .{ .hide_global = true }); + const tag = Tag.getAdvanced(error_value, this.globalThis, .{ + .hide_global = true, + .disable_inspect_custom = this.disable_inspect_custom, + }); this.format(tag, Writer, writer_, error_value, this.globalThis, enable_ansi_colors); + if (this.failed) return; this.printComma(Writer, writer_, enable_ansi_colors) catch unreachable; if (!this.single_line) { writer.writeAll("\n"); @@ -2863,7 +2956,10 @@ pub const Formatter = struct { defer if (tag_name_slice.isAllocated()) tag_name_slice.deinit(); if (value.get_unsafe(this.globalThis, "type")) |type_value| { - const _tag = Tag.getAdvanced(type_value, this.globalThis, .{ .hide_global = true }); + const _tag = Tag.getAdvanced(type_value, this.globalThis, .{ + .hide_global = true, + .disable_inspect_custom = this.disable_inspect_custom, + }); if (_tag.cell == .Symbol) {} else if (_tag.cell.isStringLike()) { type_value.toZigString(&tag_name_str, this.globalThis); @@ -2903,7 +2999,10 @@ pub const Formatter = struct { this.quote_strings = true; defer this.quote_strings = old_quote_strings; - this.format(Tag.getAdvanced(key_value, this.globalThis, .{ .hide_global = true }), Writer, writer_, key_value, this.globalThis, enable_ansi_colors); + this.format(Tag.getAdvanced(key_value, this.globalThis, .{ + .hide_global = true, + .disable_inspect_custom = this.disable_inspect_custom, + }), Writer, writer_, key_value, this.globalThis, enable_ansi_colors); needs_space = true; } @@ -2933,7 +3032,10 @@ pub const Formatter = struct { continue; const property_value = props_iter.value; - const tag = Tag.getAdvanced(property_value, this.globalThis, .{ .hide_global = true }); + const tag = Tag.getAdvanced(property_value, this.globalThis, .{ + .hide_global = true, + .disable_inspect_custom = this.disable_inspect_custom, + }); if (tag.cell.isHidden()) continue; @@ -3037,7 +3139,10 @@ pub const Formatter = struct { var j: usize = 0; while (j < length) : (j += 1) { const child = children.getIndex(this.globalThis, @as(u32, @intCast(j))); - this.format(Tag.getAdvanced(child, this.globalThis, .{ .hide_global = true }), Writer, writer_, child, this.globalThis, enable_ansi_colors); + this.format(Tag.getAdvanced(child, this.globalThis, .{ + .hide_global = true, + .disable_inspect_custom = this.disable_inspect_custom, + }), Writer, writer_, child, this.globalThis, enable_ansi_colors); if (j + 1 < length) { writer.writeAll("\n"); this.writeIndent(Writer, writer_) catch unreachable; @@ -3129,6 +3234,11 @@ pub const Formatter = struct { value.forEachProperty(this.globalThis, &iter, Iterator.forEach); } + if (this.globalThis.hasException()) { + this.failed = true; + } + if (this.failed) return; + if (iter.i == 0) { if (value.isClass(this.globalThis)) this.printAs(.Class, Writer, writer_, value, jsType, enable_ansi_colors) @@ -3446,6 +3556,8 @@ pub fn timeLog( .globalThis = global, .ordered_properties = false, .quote_strings = false, + .stack_check = bun.StackCheck.init(), + .can_throw_stack_overflow = true, }; var console = global.bunVM().console; var writer = console.error_writer.writer(); diff --git a/src/bun.js/api/BunObject.zig b/src/bun.js/api/BunObject.zig index 13d6f66d791805..259e741f33b6a0 100644 --- a/src/bun.js/api/BunObject.zig +++ b/src/bun.js/api/BunObject.zig @@ -344,7 +344,8 @@ pub fn braces(global: *JSC.JSGlobalObject, brace_str: bun.String, opts: gen.Brac pub fn which(globalThis: *JSC.JSGlobalObject, callframe: *JSC.CallFrame) bun.JSError!JSC.JSValue { const arguments_ = callframe.arguments_old(2); - var path_buf: bun.PathBuffer = undefined; + const path_buf = bun.PathBufferPool.get(); + defer bun.PathBufferPool.put(path_buf); var arguments = JSC.Node.ArgumentsSlice.init(globalThis.bunVM(), arguments_.slice()); defer arguments.deinit(); const path_arg = arguments.nextEat() orelse { @@ -397,7 +398,7 @@ pub fn which(globalThis: *JSC.JSGlobalObject, callframe: *JSC.CallFrame) bun.JSE } if (Which.which( - &path_buf, + path_buf, path_str.slice(), cwd_str.slice(), bin_str.slice(), @@ -506,6 +507,7 @@ pub fn inspect(globalThis: *JSC.JSGlobalObject, callframe: *JSC.CallFrame) bun.J // very stable memory address var array = MutableString.init(getAllocator(globalThis), 0) catch unreachable; + defer array.deinit(); var buffered_writer_ = MutableString.BufferedWriter{ .context = &array }; var buffered_writer = &buffered_writer_; @@ -523,15 +525,19 @@ pub fn inspect(globalThis: *JSC.JSGlobalObject, callframe: *JSC.CallFrame) bun.J writer, formatOptions, ); + if (globalThis.hasException()) { + return .zero; + } + buffered_writer.flush() catch { - return .undefined; + return globalThis.throwOutOfMemory(); }; // we are going to always clone to keep things simple for now // the common case here will be stack-allocated, so it should be fine var out = ZigString.init(array.slice()).withEncoding(); const ret = out.toJS(globalThis); - array.deinit(); + return ret; } diff --git a/src/bun.js/api/bun/subprocess.zig b/src/bun.js/api/bun/subprocess.zig index 143b87fb2544de..7c8774d54839d9 100644 --- a/src/bun.js/api/bun/subprocess.zig +++ b/src/bun.js/api/bun/subprocess.zig @@ -1703,15 +1703,58 @@ pub const Subprocess = struct { return spawnMaybeSync(globalThis, args, secondaryArgsValue, true); } + // This is split into a separate function to conserve stack space. + // On Windows, a single path buffer can take 64 KB. + fn getArgv0(globalThis: *JSC.JSGlobalObject, PATH: []const u8, cwd: []const u8, argv0: ?[*:0]const u8, first_cmd: JSValue, allocator: std.mem.Allocator) bun.JSError!struct { + argv0: [:0]const u8, + arg0: [:0]u8, + } { + var arg0 = try first_cmd.toSliceOrNullWithAllocator(globalThis, allocator); + defer arg0.deinit(); + // Heap allocate it to ensure we don't run out of stack space. + const path_buf: *bun.PathBuffer = try bun.default_allocator.create(bun.PathBuffer); + defer bun.default_allocator.destroy(path_buf); + + var actual_argv0: [:0]const u8 = ""; + + if (argv0 == null) { + const resolved = Which.which(path_buf, PATH, cwd, arg0.slice()) orelse { + return throwCommandNotFound(globalThis, arg0.slice()); + }; + actual_argv0 = try allocator.dupeZ(u8, resolved); + } else { + const resolved = Which.which(path_buf, PATH, cwd, bun.sliceTo(argv0.?, 0)) orelse { + return throwCommandNotFound(globalThis, arg0.slice()); + }; + actual_argv0 = try allocator.dupeZ(u8, resolved); + } + + return .{ + .argv0 = actual_argv0, + .arg0 = try allocator.dupeZ(u8, arg0.slice()), + }; + } + pub fn spawnMaybeSync( globalThis: *JSC.JSGlobalObject, args_: JSValue, secondaryArgsValue: ?JSValue, comptime is_sync: bool, ) bun.JSError!JSValue { + if (comptime is_sync) { + // We skip this on Windows due to test failures. + if (comptime !Environment.isWindows) { + // Since the event loop is recursively called, we need to check if it's safe to recurse. + if (!bun.StackCheck.init().isSafeToRecurse()) { + globalThis.throwStackOverflow(); + return error.JSError; + } + } + } + var arena = bun.ArenaAllocator.init(bun.default_allocator); defer arena.deinit(); - var allocator = arena.allocator(); + const allocator = arena.allocator(); var override_env = false; var env_array = std.ArrayListUnmanaged(?[*:0]const u8){}; @@ -1801,33 +1844,16 @@ pub const Subprocess = struct { return globalThis.throwInvalidArguments("cmd must not be empty", .{}); } - { - var first_cmd = cmds_array.next().?; - var arg0 = try first_cmd.toSliceOrNullWithAllocator(globalThis, allocator); - defer arg0.deinit(); - - if (argv0 == null) { - var path_buf: bun.PathBuffer = undefined; - const resolved = Which.which(&path_buf, PATH, cwd, arg0.slice()) orelse { - return throwCommandNotFound(globalThis, arg0.slice()); - }; - argv0 = try allocator.dupeZ(u8, resolved); - } else { - var path_buf: bun.PathBuffer = undefined; - const resolved = Which.which(&path_buf, PATH, cwd, bun.sliceTo(argv0.?, 0)) orelse { - return throwCommandNotFound(globalThis, arg0.slice()); - }; - argv0 = try allocator.dupeZ(u8, resolved); - } - - argv.appendAssumeCapacity(try allocator.dupeZ(u8, arg0.slice())); - } + const argv0_result = try getArgv0(globalThis, PATH, cwd, argv0, cmds_array.next().?, allocator); + argv0 = argv0_result.argv0.ptr; + argv.appendAssumeCapacity(argv0_result.arg0.ptr); while (cmds_array.next()) |value| { - const arg = value.getZigString(globalThis); + const arg = try value.toBunString2(globalThis); + defer arg.deref(); // if the string is empty, ignore it, don't add it to the argv - if (arg.len == 0) { + if (arg.isEmpty()) { continue; } argv.appendAssumeCapacity(try arg.toOwnedSliceZ(allocator)); diff --git a/src/bun.js/bindings/BunString.cpp b/src/bun.js/bindings/BunString.cpp index 17200b35c30552..319041594197f8 100644 --- a/src/bun.js/bindings/BunString.cpp +++ b/src/bun.js/bindings/BunString.cpp @@ -13,6 +13,7 @@ #include "ZigGlobalObject.h" #include "IDLTypes.h" +#include #include #include #include @@ -34,6 +35,7 @@ #include "GCDefferalContext.h" #include "wtf/text/StringImpl.h" +#include "wtf/text/StringToIntegerConversion.h" extern "C" void mi_free(void* ptr); @@ -90,6 +92,22 @@ extern "C" BunString BunString__tryCreateAtom(const char* bytes, size_t length) return { BunStringTag::Dead, {} }; } +// int64_t max to say "not a number" +extern "C" int64_t BunString__toInt32(BunString* bunString) +{ + if (bunString->tag == BunStringTag::Empty || bunString->tag == BunStringTag::Dead) { + return std::numeric_limits::max(); + } + + String str = bunString->toWTFString(); + auto val = WTF::parseIntegerAllowingTrailingJunk(str); + if (val) { + return val.value(); + } + + return std::numeric_limits::max(); +} + namespace Bun { JSC::JSValue toJS(JSC::JSGlobalObject* globalObject, BunString bunString) { diff --git a/src/bun.js/bindings/ErrorCode.ts b/src/bun.js/bindings/ErrorCode.ts index d04c096ae62c28..a4b54170546a4d 100644 --- a/src/bun.js/bindings/ErrorCode.ts +++ b/src/bun.js/bindings/ErrorCode.ts @@ -95,4 +95,7 @@ export default [ ["ERR_ASYNC_TYPE", TypeError], ["ERR_INVALID_ASYNC_ID", RangeError], ["ERR_ASYNC_CALLBACK", TypeError], + + // Postgres + ["ERR_POSTGRES_ERROR_RESPONSE", Error, "PostgresError"], ] as ErrorCodeMapping; diff --git a/src/bun.js/bindings/JSPropertyIterator.cpp b/src/bun.js/bindings/JSPropertyIterator.cpp index e386c6cc5a2c84..8d4657f469a9c8 100644 --- a/src/bun.js/bindings/JSPropertyIterator.cpp +++ b/src/bun.js/bindings/JSPropertyIterator.cpp @@ -1,7 +1,8 @@ - - #include "root.h" +#include "BunClientData.h" +#include "ZigGlobalObject.h" +#include "JavaScriptCore/JSType.h" #include "JavaScriptCore/EnumerationMode.h" #include "JavaScriptCore/ExceptionScope.h" #include "JavaScriptCore/ThrowScope.h" @@ -11,6 +12,7 @@ #include "wtf/Assertions.h" #include "wtf/FastMalloc.h" #include "headers-handwritten.h" +#include "ObjectBindings.h" namespace Bun { using namespace JSC; @@ -25,6 +27,7 @@ class JSPropertyIterator { RefPtr properties; Ref vm; + bool isSpecialProxy = false; static JSPropertyIterator* create(JSC::VM& vm, RefPtr data) { return new JSPropertyIterator(vm, data); @@ -33,7 +36,7 @@ class JSPropertyIterator { WTF_MAKE_FAST_ALLOCATED; }; -extern "C" JSPropertyIterator* Bun__JSPropertyIterator__create(JSC::JSGlobalObject* globalObject, JSC::EncodedJSValue encodedValue, size_t* count) +extern "C" JSPropertyIterator* Bun__JSPropertyIterator__create(JSC::JSGlobalObject* globalObject, JSC::EncodedJSValue encodedValue, size_t* count, bool own_properties_only, bool only_non_index_properties) { JSC::VM& vm = globalObject->vm(); JSC::JSValue value = JSValue::decode(encodedValue); @@ -41,7 +44,42 @@ extern "C" JSPropertyIterator* Bun__JSPropertyIterator__create(JSC::JSGlobalObje auto scope = DECLARE_THROW_SCOPE(vm); JSC::PropertyNameArray array(vm, PropertyNameMode::StringsAndSymbols, PrivateSymbolMode::Exclude); - object->getPropertyNames(globalObject, array, DontEnumPropertiesMode::Exclude); + +#if OS(WINDOWS) + if (UNLIKELY(object->type() == JSC::ProxyObjectType)) { + // Check if we're actually iterating through the JSEnvironmentVariableMap's proxy. + auto* zigGlobal = defaultGlobalObject(globalObject); + if (zigGlobal->m_processEnvObject.isInitialized()) { + if (object == zigGlobal->m_processEnvObject.get(zigGlobal)) { + object->methodTable()->getOwnPropertyNames( + object, + globalObject, + array, + DontEnumPropertiesMode::Exclude); + RETURN_IF_EXCEPTION(scope, nullptr); + + *count = array.size(); + if (array.size() == 0) { + return nullptr; + } + + auto* iter = JSPropertyIterator::create(vm, array.releaseData()); + iter->isSpecialProxy = true; + return iter; + } + } + } +#endif + + if (own_properties_only) { + if (only_non_index_properties) { + object->getOwnNonIndexPropertyNames(globalObject, array, DontEnumPropertiesMode::Exclude); + } else { + object->getOwnPropertyNames(object, globalObject, array, DontEnumPropertiesMode::Exclude); + } + } else { + object->getPropertyNames(globalObject, array, DontEnumPropertiesMode::Exclude); + } RETURN_IF_EXCEPTION(scope, nullptr); *count = array.size(); @@ -52,13 +90,79 @@ extern "C" JSPropertyIterator* Bun__JSPropertyIterator__create(JSC::JSGlobalObje return JSPropertyIterator::create(vm, array.releaseData()); } +extern "C" size_t Bun__JSPropertyIterator__getLongestPropertyName(JSPropertyIterator* iter, JSC::JSGlobalObject* globalObject, JSC::JSObject* object) +{ + size_t longest = 0; + for (const auto& prop : iter->properties->propertyNameVector()) { + if (prop.length() > longest) { + longest = prop.length(); + } + } + + return longest; +} + +static EncodedJSValue getOwnProxyObject(JSPropertyIterator* iter, JSObject* object, const JSC::Identifier& prop, BunString* propertyName) +{ + auto& vm = iter->vm; + auto scope = DECLARE_THROW_SCOPE(vm); + + PropertySlot slot(object, PropertySlot::InternalMethodType::GetOwnProperty, nullptr); + auto* globalObject = object->globalObject(); + if (!object->methodTable()->getOwnPropertySlot(object, globalObject, prop, slot)) { + return {}; + } + RETURN_IF_EXCEPTION(scope, {}); + + JSValue result = slot.getValue(globalObject, prop); + RETURN_IF_EXCEPTION(scope, {}); + + *propertyName = Bun::toString(prop.impl()); + return JSValue::encode(result); +} + extern "C" EncodedJSValue Bun__JSPropertyIterator__getNameAndValue(JSPropertyIterator* iter, JSC::JSGlobalObject* globalObject, JSC::JSObject* object, BunString* propertyName, size_t i) { const auto& prop = iter->properties->propertyNameVector()[i]; + if (UNLIKELY(iter->isSpecialProxy)) { + return getOwnProxyObject(iter, object, prop, propertyName); + } + + auto& vm = iter->vm; + auto scope = DECLARE_THROW_SCOPE(vm); + PropertySlot slot(object, PropertySlot::InternalMethodType::GetOwnProperty); + if (!object->getOwnPropertySlot(object, globalObject, prop, slot)) { + return {}; + } + RETURN_IF_EXCEPTION(scope, {}); - auto scope = DECLARE_THROW_SCOPE(iter->vm); - JSValue result = object->get(globalObject, prop); + JSValue result = slot.getValue(globalObject, prop); + RETURN_IF_EXCEPTION(scope, {}); + + *propertyName = Bun::toString(prop.impl()); + return JSValue::encode(result); +} + +extern "C" EncodedJSValue Bun__JSPropertyIterator__getNameAndValueNonObservable(JSPropertyIterator* iter, JSC::JSGlobalObject* globalObject, JSC::JSObject* object, BunString* propertyName, size_t i) +{ + const auto& prop = iter->properties->propertyNameVector()[i]; + if (UNLIKELY(iter->isSpecialProxy)) { + return getOwnProxyObject(iter, object, prop, propertyName); + } + auto& vm = iter->vm; + auto scope = DECLARE_THROW_SCOPE(vm); + + PropertySlot slot(object, PropertySlot::InternalMethodType::VMInquiry, vm.ptr()); + if (!object->getNonIndexPropertySlot(globalObject, prop, slot)) { + return {}; + } + RETURN_IF_EXCEPTION(scope, {}); + + if (slot.isAccessor() || slot.isCustom()) { + return {}; + } + JSValue result = slot.getPureResult(); RETURN_IF_EXCEPTION(scope, {}); *propertyName = Bun::toString(prop.impl()); diff --git a/src/bun.js/bindings/JSPropertyIterator.zig b/src/bun.js/bindings/JSPropertyIterator.zig index f5361cc3ae0fe7..ff4a4e77f6c776 100644 --- a/src/bun.js/bindings/JSPropertyIterator.zig +++ b/src/bun.js/bindings/JSPropertyIterator.zig @@ -2,14 +2,19 @@ const bun = @import("root").bun; const JSC = bun.JSC; //extern "C" EncodedJSValue Bun__JSPropertyIterator__getNameAndValue(JSPropertyIterator* iter, JSC::JSGlobalObject* globalObject, JSC::JSObject* object, BunString* propertyName, size_t i) -extern "C" fn Bun__JSPropertyIterator__create(globalObject: *JSC.JSGlobalObject, encodedValue: JSC.JSValue, *usize) ?*anyopaque; +extern "C" fn Bun__JSPropertyIterator__create(globalObject: *JSC.JSGlobalObject, encodedValue: JSC.JSValue, *usize, own_properties_only: bool, only_non_index_properties: bool) ?*anyopaque; extern "C" fn Bun__JSPropertyIterator__getNameAndValue(iter: ?*anyopaque, globalObject: *JSC.JSGlobalObject, object: *anyopaque, propertyName: *bun.String, i: usize) JSC.JSValue; +extern "C" fn Bun__JSPropertyIterator__getNameAndValueNonObservable(iter: ?*anyopaque, globalObject: *JSC.JSGlobalObject, object: *anyopaque, propertyName: *bun.String, i: usize) JSC.JSValue; extern "C" fn Bun__JSPropertyIterator__getName(iter: ?*anyopaque, propertyName: *bun.String, i: usize) void; extern "C" fn Bun__JSPropertyIterator__deinit(iter: ?*anyopaque) void; +extern "C" fn Bun__JSPropertyIterator__getLongestPropertyName(iter: ?*anyopaque, globalObject: *JSC.JSGlobalObject, object: *anyopaque) usize; pub const JSPropertyIteratorOptions = struct { skip_empty_name: bool, include_value: bool, + own_properties_only: bool = true, + observable: bool = true, + only_non_index_properties: bool = false, }; pub fn JSPropertyIterator(comptime options: JSPropertyIteratorOptions) type { @@ -23,6 +28,11 @@ pub fn JSPropertyIterator(comptime options: JSPropertyIteratorOptions) type { object: *JSC.JSCell = undefined, value: JSC.JSValue = .zero, + pub fn getLongestPropertyName(this: *@This()) usize { + if (this.impl == null) return 0; + return Bun__JSPropertyIterator__getLongestPropertyName(this.impl, this.globalObject, this.object); + } + pub fn deinit(this: *@This()) void { if (this.impl) |impl| { Bun__JSPropertyIterator__deinit(impl); @@ -36,7 +46,7 @@ pub fn JSPropertyIterator(comptime options: JSPropertyIteratorOptions) type { .globalObject = globalObject, }; - iter.impl = Bun__JSPropertyIterator__create(globalObject, object, &iter.len); + iter.impl = Bun__JSPropertyIterator__create(globalObject, object, &iter.len, options.own_properties_only, options.only_non_index_properties); return iter; } @@ -57,7 +67,8 @@ pub fn JSPropertyIterator(comptime options: JSPropertyIteratorOptions) type { this.iter_i += 1; var name = bun.String.dead; if (comptime options.include_value) { - const current = Bun__JSPropertyIterator__getNameAndValue(this.impl, this.globalObject, this.object, &name, i); + const FnToUse = if (options.observable) Bun__JSPropertyIterator__getNameAndValue else Bun__JSPropertyIterator__getNameAndValueNonObservable; + const current = FnToUse(this.impl, this.globalObject, this.object, &name, i); if (current == .zero) { return this.next(); } diff --git a/src/bun.js/bindings/bindings.cpp b/src/bun.js/bindings/bindings.cpp index b4daefa5ef6e61..a58cf6383c8ad8 100644 --- a/src/bun.js/bindings/bindings.cpp +++ b/src/bun.js/bindings/bindings.cpp @@ -1,5 +1,7 @@ + #include "root.h" +#include "JavaScriptCore/CatchScope.h" #include "JavaScriptCore/Exception.h" #include "ErrorCode+List.h" #include "ErrorCode.h" @@ -64,6 +66,7 @@ #include "wtf/Assertions.h" #include "wtf/Compiler.h" +#include "wtf/StackCheck.h" #include "wtf/text/ExternalStringImpl.h" #include "wtf/text/OrdinalNumber.h" #include "wtf/text/StringCommon.h" @@ -126,6 +129,8 @@ #include "ErrorStackTrace.h" #include "ObjectBindings.h" +#include + #if OS(DARWIN) #if BUN_DEBUG #include @@ -5362,6 +5367,12 @@ bool JSC__JSValue__toBoolean(JSC__JSValue JSValue0) return JSValue::decode(JSValue0).pureToBoolean() != TriState::False; } +extern "C" void JSGlobalObject__throwStackOverflow(JSC__JSGlobalObject* globalObject) +{ + auto scope = DECLARE_THROW_SCOPE(globalObject->vm()); + throwStackOverflowError(globalObject, scope); +} + template static void JSC__JSValue__forEachPropertyImpl(JSC__JSValue JSValue0, JSC__JSGlobalObject* globalObject, void* arg2, void (*iter)(JSC__JSGlobalObject* arg0, void* ctx, ZigString* arg2, JSC__JSValue JSValue3, bool isSymbol, bool isPrivateSymbol)) { @@ -5372,9 +5383,15 @@ static void JSC__JSValue__forEachPropertyImpl(JSC__JSValue JSValue0, JSC__JSGlob return; JSC::VM& vm = globalObject->vm(); - auto scope = DECLARE_CATCH_SCOPE(vm); + auto throwScope = DECLARE_THROW_SCOPE(vm); + + if (UNLIKELY(!vm.isSafeToRecurse())) { + throwStackOverflowError(globalObject, throwScope); + return; + } size_t prototypeCount = 0; + auto scope = DECLARE_CATCH_SCOPE(vm); JSC::Structure* structure = object->structure(); bool fast = !nonIndexedOnly && canPerformFastPropertyEnumerationForIterationBun(structure); @@ -5383,6 +5400,7 @@ static void JSC__JSValue__forEachPropertyImpl(JSC__JSValue JSValue0, JSC__JSGlob if (fast) { if (structure->outOfLineSize() == 0 && structure->inlineSize() == 0) { fast = false; + if (JSValue proto = object->getPrototype(vm, globalObject)) { if ((structure = proto.structureOrNull())) { prototypeObject = proto; @@ -5434,6 +5452,7 @@ static void JSC__JSValue__forEachPropertyImpl(JSC__JSValue JSValue0, JSC__JSGlob propertyValue = objectToUse->getIfPropertyExists(globalObject, prop); } + // Ignore exceptions due to getters. if (scope.exception()) scope.clearException(); @@ -5449,14 +5468,21 @@ static void JSC__JSValue__forEachPropertyImpl(JSC__JSValue JSValue0, JSC__JSGlob return true; iter(globalObject, arg2, &key, JSC::JSValue::encode(propertyValue), prop->isSymbol(), isPrivate); + // Propagate exceptions from callbacks. + if (UNLIKELY(scope.exception())) { + return false; + } return true; }); + + // Propagate exceptions from callbacks. if (scope.exception()) { - scope.clearException(); + return; } if (anyHits) { if (prototypeCount++ < 5) { + if (JSValue proto = prototypeObject.getPrototype(globalObject)) { if (!(proto == globalObject->objectPrototype() || proto == globalObject->functionPrototype() || (proto.inherits() && jsCast(proto)->target() != globalObject))) { if ((structure = proto.structureOrNull())) { @@ -5466,6 +5492,10 @@ static void JSC__JSValue__forEachPropertyImpl(JSC__JSValue JSValue0, JSC__JSGlob } } } + // Ignore exceptions from Proxy "getPrototype" trap. + if (UNLIKELY(scope.exception())) { + scope.clearException(); + } } return; } @@ -5484,7 +5514,7 @@ static void JSC__JSValue__forEachPropertyImpl(JSC__JSValue JSValue0, JSC__JSGlob iterating->methodTable()->getOwnPropertyNames(iterating, globalObject, properties, DontEnumPropertiesMode::Include); } - RETURN_IF_EXCEPTION(scope, ); + RETURN_IF_EXCEPTION(scope, void()); for (auto& property : properties) { if (UNLIKELY(property.isEmpty() || property.isNull())) continue; @@ -5502,6 +5532,10 @@ static void JSC__JSValue__forEachPropertyImpl(JSC__JSValue JSValue0, JSC__JSGlob JSC::PropertySlot slot(object, PropertySlot::InternalMethodType::Get); if (!object->getPropertySlot(globalObject, property, slot)) continue; + // Ignore exceptions from "Get" proxy traps. + if (scope.exception()) { + scope.clearException(); + } if ((slot.attributes() & PropertyAttribute::DontEnum) != 0) { if (property == propertyNames->underscoreProto @@ -5548,6 +5582,7 @@ static void JSC__JSValue__forEachPropertyImpl(JSC__JSValue JSValue0, JSC__JSGlob propertyValue = slot.getValue(globalObject, property); } + // Ignore exceptions from getters. if (scope.exception()) { scope.clearException(); propertyValue = jsUndefined(); @@ -5561,6 +5596,9 @@ static void JSC__JSValue__forEachPropertyImpl(JSC__JSValue JSValue0, JSC__JSGlob continue; iter(globalObject, arg2, &key, JSC::JSValue::encode(propertyValue), property.isSymbol(), isPrivate); + + // Propagate exceptions from callbacks. + RETURN_IF_EXCEPTION(scope, void()); } if constexpr (nonIndexedOnly) { break; diff --git a/src/bun.js/bindings/bindings.zig b/src/bun.js/bindings/bindings.zig index e79bf9799f4265..94a0698a29842f 100644 --- a/src/bun.js/bindings/bindings.zig +++ b/src/bun.js/bindings/bindings.zig @@ -3039,7 +3039,10 @@ pub const JSGlobalObject = opaque { pub fn allocator(this: *JSGlobalObject) std.mem.Allocator { return this.bunVM().allocator; } - + extern fn JSGlobalObject__throwStackOverflow(this: *JSGlobalObject) void; + pub fn throwStackOverflow(this: *JSGlobalObject) void { + JSGlobalObject__throwStackOverflow(this); + } extern fn JSGlobalObject__throwOutOfMemoryError(this: *JSGlobalObject) void; pub fn throwOutOfMemory(this: *JSGlobalObject) bun.JSError { JSGlobalObject__throwOutOfMemoryError(this); @@ -5798,10 +5801,10 @@ pub const JSValue = enum(i64) { formatter: *Exports.ConsoleObject.Formatter, ) Exports.ConsoleObject.Formatter.ZigFormatter { formatter.remaining_values = &[_]JSValue{}; - if (formatter.map_node) |node| { - node.release(); - formatter.map_node = null; + if (formatter.map_node != null) { + formatter.deinit(); } + formatter.stack_check.update(); return Exports.ConsoleObject.Formatter.ZigFormatter{ .formatter = formatter, @@ -6809,6 +6812,21 @@ pub fn toJSHostFunction(comptime Function: JSHostZigFunction) JSC.JSHostFunction error.JSError => .zero, error.OutOfMemory => globalThis.throwOutOfMemoryValue(), }; + if (comptime bun.Environment.isDebug) { + if (value != .zero) { + if (globalThis.hasException()) { + bun.Output.prettyErrorln( + \\Assertion failed: Native function returned a non-zero JSValue while an exception is pending + \\ + \\Did you forget to check if an exception is pending? + \\ + \\ if (globalThis.hasException()) return .zero; + \\ + , .{}); + Output.flush(); + } + } + } bun.assert((value == .zero) == globalThis.hasException()); return value; } diff --git a/src/bun.js/bindings/exports.zig b/src/bun.js/bindings/exports.zig index 586f3251782923..b7374f27051857 100644 --- a/src/bun.js/bindings/exports.zig +++ b/src/bun.js/bindings/exports.zig @@ -48,6 +48,10 @@ pub const ZigGlobalObject = extern struct { worker_ptr: ?*anyopaque, ) *JSGlobalObject { const global = shim.cppFn("create", .{ console, context_id, mini_mode, eval_mode, worker_ptr }); + + // JSC might mess with the stack size. + bun.StackCheck.configureThread(); + return global; } diff --git a/src/bun.js/bindings/wtf-bindings.cpp b/src/bun.js/bindings/wtf-bindings.cpp index 52de7d5a7c0b0c..d33725bbaebeeb 100644 --- a/src/bun.js/bindings/wtf-bindings.cpp +++ b/src/bun.js/bindings/wtf-bindings.cpp @@ -1,6 +1,7 @@ #include "root.h" #include "wtf-bindings.h" - +#include +#include #include #include #include @@ -237,4 +238,16 @@ size_t toISOString(JSC::VM& vm, double date, char in[64]) return charactersWritten; } +static thread_local WTF::StackBounds stackBoundsForCurrentThread = WTF::StackBounds::emptyBounds(); + +extern "C" void Bun__StackCheck__initialize() +{ + stackBoundsForCurrentThread = WTF::StackBounds::currentThreadStackBounds(); +} + +extern "C" void* Bun__StackCheck__getMaxStack() +{ + return stackBoundsForCurrentThread.end(); +} + } diff --git a/src/bun.js/javascript.zig b/src/bun.js/javascript.zig index 5db69ffbf25901..b5a2aa70482e46 100644 --- a/src/bun.js/javascript.zig +++ b/src/bun.js/javascript.zig @@ -2916,10 +2916,17 @@ pub const VirtualMachine = struct { writer: Writer, comptime allow_side_effects: bool, ) void { + var formatter = ConsoleObject.Formatter{ + .globalThis = this.global, + .quote_strings = false, + .single_line = false, + .stack_check = bun.StackCheck.init(), + }; + defer formatter.deinit(); if (Output.enable_ansi_colors) { - this.printErrorlikeObject(exception.value(), exception, exception_list, Writer, writer, true, allow_side_effects); + this.printErrorlikeObject(exception.value(), exception, exception_list, &formatter, Writer, writer, true, allow_side_effects); } else { - this.printErrorlikeObject(exception.value(), exception, exception_list, Writer, writer, false, allow_side_effects); + this.printErrorlikeObject(exception.value(), exception, exception_list, &formatter, Writer, writer, false, allow_side_effects); } } @@ -2949,7 +2956,6 @@ pub const VirtualMachine = struct { if (result.isException(this.global.vm())) { const exception = @as(*Exception, @ptrCast(result.asVoid())); - this.printException( exception, exception_list, @@ -2957,10 +2963,17 @@ pub const VirtualMachine = struct { writer, true, ); - } else if (Output.enable_ansi_colors) { - this.printErrorlikeObject(result, null, exception_list, @TypeOf(writer), writer, true, true); } else { - this.printErrorlikeObject(result, null, exception_list, @TypeOf(writer), writer, false, true); + var formatter = ConsoleObject.Formatter{ + .globalThis = this.global, + .quote_strings = false, + .single_line = false, + .stack_check = bun.StackCheck.init(), + }; + defer formatter.deinit(); + switch (Output.enable_ansi_colors) { + inline else => |enable_colors| this.printErrorlikeObject(result, null, exception_list, &formatter, @TypeOf(writer), writer, enable_colors, true), + } } } @@ -3265,14 +3278,8 @@ pub const VirtualMachine = struct { return promise; } - pub fn printErrorLikeObjectSimple(this: *VirtualMachine, value: JSValue, writer: anytype, comptime escape_codes: bool) void { - this.printErrorlikeObject(value, null, null, @TypeOf(writer), writer, escape_codes, false); - } - pub fn printErrorLikeObjectToConsole(this: *VirtualMachine, value: JSValue) void { - switch (Output.enable_ansi_colors_stderr) { - inline else => |colors| this.printErrorLikeObjectSimple(value, Output.errorWriter(), colors), - } + this.runErrorHandler(value, null); } // When the Error-like object is one of our own, it's best to rely on the object directly instead of serializing it to a ZigException. @@ -3287,6 +3294,7 @@ pub const VirtualMachine = struct { value: JSValue, exception: ?*Exception, exception_list: ?*ExceptionList, + formatter: *ConsoleObject.Formatter, comptime Writer: type, writer: Writer, comptime allow_ansi_color: bool, @@ -3324,6 +3332,7 @@ pub const VirtualMachine = struct { const AggregateErrorIterator = struct { writer: Writer, current_exception_list: ?*ExceptionList = null, + formatter: *ConsoleObject.Formatter, pub fn iteratorWithColor(_vm: [*c]VM, globalObject: *JSGlobalObject, ctx: ?*anyopaque, nextValue: JSValue) callconv(.C) void { iterator(_vm, globalObject, nextValue, ctx.?, true); @@ -3333,10 +3342,10 @@ pub const VirtualMachine = struct { } inline fn iterator(_: [*c]VM, _: *JSGlobalObject, nextValue: JSValue, ctx: ?*anyopaque, comptime color: bool) void { const this_ = @as(*@This(), @ptrFromInt(@intFromPtr(ctx))); - VirtualMachine.get().printErrorlikeObject(nextValue, null, this_.current_exception_list, Writer, this_.writer, color, allow_side_effects); + VirtualMachine.get().printErrorlikeObject(nextValue, null, this_.current_exception_list, this_.formatter, Writer, this_.writer, color, allow_side_effects); } }; - var iter = AggregateErrorIterator{ .writer = writer, .current_exception_list = exception_list }; + var iter = AggregateErrorIterator{ .writer = writer, .current_exception_list = exception_list, .formatter = formatter }; if (comptime allow_ansi_color) { value.getErrorsProperty(this.global).forEach(this.global, &iter, AggregateErrorIterator.iteratorWithColor); } else { @@ -3348,6 +3357,7 @@ pub const VirtualMachine = struct { was_internal = this.printErrorFromMaybePrivateData( value, exception_list, + formatter, Writer, writer, allow_ansi_color, @@ -3355,10 +3365,11 @@ pub const VirtualMachine = struct { ); } - pub fn printErrorFromMaybePrivateData( + fn printErrorFromMaybePrivateData( this: *VirtualMachine, value: JSC.JSValue, exception_list: ?*ExceptionList, + formatter: *ConsoleObject.Formatter, comptime Writer: type, writer: Writer, comptime allow_ansi_color: bool, @@ -3407,6 +3418,7 @@ pub const VirtualMachine = struct { this.printErrorInstance( value, exception_list, + formatter, Writer, writer, allow_ansi_color, @@ -3748,7 +3760,7 @@ pub const VirtualMachine = struct { } } - pub fn printErrorInstance(this: *VirtualMachine, error_instance: JSValue, exception_list: ?*ExceptionList, comptime Writer: type, writer: Writer, comptime allow_ansi_color: bool, comptime allow_side_effects: bool) anyerror!void { + fn printErrorInstance(this: *VirtualMachine, error_instance: JSValue, exception_list: ?*ExceptionList, formatter: *ConsoleObject.Formatter, comptime Writer: type, writer: Writer, comptime allow_ansi_color: bool, comptime allow_side_effects: bool) anyerror!void { var exception_holder = ZigException.Holder.init(); var exception = exception_holder.zigException(); defer exception_holder.deinit(this); @@ -3920,32 +3932,6 @@ pub const VirtualMachine = struct { try this.printErrorNameAndMessage(name, message, Writer, writer, allow_ansi_color); } - var add_extra_line = false; - - const Show = struct { - system_code: bool = false, - syscall: bool = false, - errno: bool = false, - path: bool = false, - fd: bool = false, - }; - - const show = Show{ - .system_code = !exception.system_code.eql(name) and !exception.system_code.isEmpty(), - .syscall = !exception.syscall.isEmpty(), - .errno = exception.errno != 0, - .path = !exception.path.isEmpty(), - .fd = exception.fd != -1, - }; - - const extra_fields = .{ - "url", - "info", - "pkg", - "errors", - "cause", - }; - // This is usually unsafe to do, but we are protecting them each time first var errors_to_append = std.ArrayList(JSC.JSValue).init(this.allocator); defer { @@ -3955,82 +3941,146 @@ pub const VirtualMachine = struct { errors_to_append.deinit(); } - if (error_instance != .zero and error_instance.isCell() and error_instance.jsType().canGet()) { - inline for (extra_fields) |field| { - if (try error_instance.getTruthyComptime(this.global, field)) |value| { - const kind = value.jsType(); - if (kind.isStringLike()) { - if (value.toStringOrNull(this.global)) |str| { - var zig_str = str.toSlice(this.global, bun.default_allocator); - defer zig_str.deinit(); - try writer.print(comptime Output.prettyFmt(" {s}: \"{s}\"\n", allow_ansi_color), .{ field, zig_str.slice() }); - add_extra_line = true; + var saw_cause = false; + if (error_instance != .zero) { + const error_instance_type = error_instance.jsType(); + if (error_instance_type == .ErrorInstance) { + const Iterator = JSC.JSPropertyIterator(.{ + .include_value = true, + .skip_empty_name = true, + .own_properties_only = true, + .observable = false, + .only_non_index_properties = true, + }); + var iterator = Iterator.init(this.global, error_instance); + defer iterator.deinit(); + const longest_name = @min(iterator.getLongestPropertyName(), 10); + var is_first_property = true; + while (iterator.next()) |field| { + const value = iterator.value; + if (field.eqlComptime("message") or field.eqlComptime("name") or field.eqlComptime("stack")) { + continue; + } + + // We special-case the code property. Let's avoid printing it twice. + if (field.eqlComptime("code")) { + if (value.isString()) { + const str = value.toBunString(this.global); + if (!str.isEmpty()) { + if (str.eql(name)) { + continue; + } + } } - } else if (kind == .ErrorInstance and + } + + const kind = value.jsType(); + if (kind == .ErrorInstance and // avoid infinite recursion !prev_had_errors) { + if (field.eqlComptime("cause")) { + saw_cause = true; + } value.protect(); try errors_to_append.append(value); - } else if (kind.isObject() or kind.isArray()) { + } else if (kind.isObject() or kind.isArray() or value.isPrimitive() or kind.isStringLike()) { var bun_str = bun.String.empty; defer bun_str.deref(); - value.jsonStringify(this.global, 2, &bun_str); //2 - try writer.print(comptime Output.prettyFmt(" {s}: {}\n", allow_ansi_color), .{ field, bun_str }); - add_extra_line = true; - } - } - } - } + const prev_disable_inspect_custom = formatter.disable_inspect_custom; + const prev_quote_strings = formatter.quote_strings; + const prev_max_depth = formatter.max_depth; + formatter.depth += 1; + defer { + formatter.depth -= 1; + formatter.max_depth = prev_max_depth; + formatter.quote_strings = prev_quote_strings; + formatter.disable_inspect_custom = prev_disable_inspect_custom; + } + formatter.max_depth = 1; + formatter.quote_strings = true; + formatter.disable_inspect_custom = true; - if (show.errno) { - if (show.syscall) { - try writer.writeAll(" "); - } - try writer.print(comptime Output.prettyFmt(" errno: {d}\n", allow_ansi_color), .{exception.errno}); - add_extra_line = true; - } + const pad_left = longest_name -| field.length(); + is_first_property = false; + try writer.writeByteNTimes(' ', pad_left); - if (show.system_code) { - if (show.syscall) { - try writer.writeAll(" "); - } else if (show.errno) { - try writer.writeAll(" "); - } - try writer.print(comptime Output.prettyFmt(" code: \"{}\"\n", allow_ansi_color), .{exception.system_code}); - add_extra_line = true; - } + try writer.print(comptime Output.prettyFmt(" {}: ", allow_ansi_color), .{field}); - if (show.syscall) { - try writer.print(comptime Output.prettyFmt(" syscall: \"{}\"\n", allow_ansi_color), .{exception.syscall}); - add_extra_line = true; - } + // When we're printing errors for a top-level uncaught eception / rejection, suppress further errors here. + if (allow_side_effects) { + if (this.global.hasException()) { + this.global.clearException(); + } + } + + formatter.format( + JSC.Formatter.Tag.getAdvanced( + value, + this.global, + .{ .disable_inspect_custom = true, .hide_global = true }, + ), + Writer, + writer, + value, + this.global, + allow_ansi_color, + ); + + if (allow_side_effects) { + // When we're printing errors for a top-level uncaught eception / rejection, suppress further errors here. + if (this.global.hasException()) { + this.global.clearException(); + } + } else if (this.global.hasException() or formatter.failed) { + return; + } - if (show.path) { - if (show.syscall) { - try writer.writeAll(" "); - } else if (show.errno) { - try writer.writeAll(" "); + try writer.writeAll(comptime Output.prettyFmt(",\n", allow_ansi_color)); + } + } + + if (!is_first_property) { + try writer.writeAll("\n"); + } + } else { + // If you do reportError([1,2,3]] we should still show something at least. + const tag = JSC.Formatter.Tag.getAdvanced( + error_instance, + this.global, + .{ .disable_inspect_custom = true, .hide_global = true }, + ); + if (tag.tag != .NativeCode) { + formatter.format( + tag, + Writer, + writer, + error_instance, + this.global, + allow_ansi_color, + ); + + // Always include a newline in this case + try writer.writeAll("\n"); + } } - try writer.print(comptime Output.prettyFmt(" path: \"{}\"\n", allow_ansi_color), .{exception.path}); - } - if (show.fd) { - if (show.syscall) { - try writer.writeAll(" "); - } else if (show.errno) { - try writer.writeAll(" "); + // "cause" is not enumerable, so the above loop won't see it. + if (!saw_cause and error_instance_type == .ErrorInstance) { + if (error_instance.getOwn(this.global, "cause")) |cause| { + if (cause.jsType() == .ErrorInstance) { + cause.protect(); + try errors_to_append.append(cause); + } + } } - try writer.print(comptime Output.prettyFmt(" fd: {d}\n", allow_ansi_color), .{exception.fd}); } - if (add_extra_line) try writer.writeAll("\n"); - try printStackTrace(@TypeOf(writer), writer, exception.stack, allow_ansi_color); for (errors_to_append.items) |err| { try writer.writeAll("\n"); - try this.printErrorInstance(err, exception_list, Writer, writer, allow_ansi_color, allow_side_effects); + try this.printErrorInstance(err, exception_list, formatter, Writer, writer, allow_ansi_color, allow_side_effects); } } diff --git a/src/bun.js/node/node_fs.zig b/src/bun.js/node/node_fs.zig index dab9d40b98b3d8..80860842090836 100644 --- a/src/bun.js/node/node_fs.zig +++ b/src/bun.js/node/node_fs.zig @@ -3557,10 +3557,12 @@ pub const NodeFS = struct { return Maybe(Return.CopyFile).todo(); } - var src_buf: bun.WPathBuffer = undefined; - var dest_buf: bun.WPathBuffer = undefined; - const src = strings.toWPathNormalizeAutoExtend(&src_buf, args.src.sliceZ(&this.sync_error_buf)); - const dest = strings.toWPathNormalizeAutoExtend(&dest_buf, args.dest.sliceZ(&this.sync_error_buf)); + const src_buf = bun.OSPathBufferPool.get(); + defer bun.OSPathBufferPool.put(src_buf); + const dest_buf = bun.OSPathBufferPool.get(); + defer bun.OSPathBufferPool.put(dest_buf); + const src = strings.toWPathNormalizeAutoExtend(src_buf, args.src.sliceZ(&this.sync_error_buf)); + const dest = strings.toWPathNormalizeAutoExtend(dest_buf, args.dest.sliceZ(&this.sync_error_buf)); if (windows.CopyFileW(src.ptr, dest.ptr, if (args.mode.shouldntOverwrite()) 1 else 0) == windows.FALSE) { if (ret.errnoSysP(0, .copyfile, args.src.slice())) |rest| { return shouldIgnoreEbusy(args.src, args.dest, rest); @@ -3766,11 +3768,12 @@ pub const NodeFS = struct { // TODO: verify this works correctly with unicode codepoints pub fn mkdirRecursiveImpl(this: *NodeFS, args: Arguments.Mkdir, comptime flavor: Flavor, comptime Ctx: type, ctx: Ctx) Maybe(Return.Mkdir) { _ = flavor; - var buf: bun.OSPathBuffer = undefined; + const buf = bun.OSPathBufferPool.get(); + defer bun.OSPathBufferPool.put(buf); const path: bun.OSPathSliceZ = if (Environment.isWindows) - strings.toNTPath(&buf, args.path.slice()) + strings.toNTPath(buf, args.path.slice()) else - args.path.osPath(&buf); + args.path.osPath(buf); // TODO: remove and make it always a comptime argument return switch (args.always_return_none) { @@ -5673,7 +5676,8 @@ pub const NodeFS = struct { pub fn osPathIntoSyncErrorBufOverlap(this: *NodeFS, slice: anytype) []const u8 { if (Environment.isWindows) { - var tmp: bun.WPathBuffer = undefined; + const tmp = bun.OSPathBufferPool.get(); + defer bun.OSPathBufferPool.put(tmp); @memcpy(tmp[0..slice.len], slice); return bun.strings.fromWPath(&this.sync_error_buf, tmp[0..slice.len]); } else {} @@ -6184,8 +6188,9 @@ pub const NodeFS = struct { .err => |err| return .{ .err = err }, .result => |src_fd| src_fd, }; - var wbuf: bun.WPathBuffer = undefined; - const len = bun.windows.GetFinalPathNameByHandleW(handle.cast(), &wbuf, wbuf.len, 0); + const wbuf = bun.OSPathBufferPool.get(); + defer bun.OSPathBufferPool.put(wbuf); + const len = bun.windows.GetFinalPathNameByHandleW(handle.cast(), wbuf, wbuf.len, 0); if (len == 0) { return ret.errnoSysP(0, .copyfile, this.osPathIntoSyncErrorBuf(dest)) orelse dst_enoent_maybe; } diff --git a/src/bun.js/node/types.zig b/src/bun.js/node/types.zig index fda45fe94b7aad..72232be19642b0 100644 --- a/src/bun.js/node/types.zig +++ b/src/bun.js/node/types.zig @@ -1123,7 +1123,7 @@ pub const ArgumentsSlice = struct { arena: bun.ArenaAllocator = bun.ArenaAllocator.init(bun.default_allocator), all: []const JSC.JSValue, threw: bool = false, - protected: std.bit_set.IntegerBitSet(32) = std.bit_set.IntegerBitSet(32).initEmpty(), + protected: bun.bit_set.IntegerBitSet(32) = bun.bit_set.IntegerBitSet(32).initEmpty(), will_be_async: bool = false, pub fn unprotect(this: *ArgumentsSlice) void { @@ -1132,7 +1132,7 @@ pub const ArgumentsSlice = struct { while (iter.next()) |i| { JSC.C.JSValueUnprotect(ctx, this.all[i].asObjectRef()); } - this.protected = std.bit_set.IntegerBitSet(32).initEmpty(); + this.protected = bun.bit_set.IntegerBitSet(32).initEmpty(); } pub fn deinit(this: *ArgumentsSlice) void { @@ -2137,10 +2137,14 @@ pub const Process = struct { pub fn Bun__Process__editWindowsEnvVar(k: bun.String, v: bun.String) callconv(.C) void { if (k.tag == .Empty) return; const wtf1 = k.value.WTFStringImpl; - var buf1: [32768]u16 = undefined; - var buf2: [32768]u16 = undefined; + var fixed_stack_allocator = std.heap.stackFallback(1025, bun.default_allocator); + const allocator = fixed_stack_allocator.get(); + var buf1 = allocator.alloc(u16, k.utf16ByteLength() + 1) catch bun.outOfMemory(); + defer allocator.free(buf1); + var buf2 = allocator.alloc(u16, v.utf16ByteLength() + 1) catch bun.outOfMemory(); + defer allocator.free(buf2); const len1: usize = switch (wtf1.is8Bit()) { - true => bun.strings.copyLatin1IntoUTF16([]u16, &buf1, []const u8, wtf1.latin1Slice()).written, + true => bun.strings.copyLatin1IntoUTF16([]u16, buf1, []const u8, wtf1.latin1Slice()).written, false => b: { @memcpy(buf1[0..wtf1.length()], wtf1.utf16Slice()); break :b wtf1.length(); @@ -2151,7 +2155,7 @@ pub const Process = struct { if (v.tag == .Empty) break :str (&[_]u16{0})[0..0 :0]; const wtf2 = v.value.WTFStringImpl; const len2: usize = switch (wtf2.is8Bit()) { - true => bun.strings.copyLatin1IntoUTF16([]u16, &buf2, []const u8, wtf2.latin1Slice()).written, + true => bun.strings.copyLatin1IntoUTF16([]u16, buf2, []const u8, wtf2.latin1Slice()).written, false => b: { @memcpy(buf2[0..wtf2.length()], wtf2.utf16Slice()); break :b wtf2.length(); diff --git a/src/bun.js/web_worker.zig b/src/bun.js/web_worker.zig index 6fcb6eed62ec30..506d818dc3a929 100644 --- a/src/bun.js/web_worker.zig +++ b/src/bun.js/web_worker.zig @@ -513,15 +513,18 @@ pub const WebWorker = struct { if (loop) |loop_| { loop_.internal_loop_data.jsc_vm = null; } + bun.uws.onThreadExit(); this.deinit(); if (vm_to_deinit) |vm| { vm.deinit(); // NOTE: deinit here isn't implemented, so freeing workers will leak the vm. } + bun.deleteAllPoolsForThreadExit(); if (arena) |*arena_| { arena_.deinit(); } + bun.exitThread(); } diff --git a/src/bun.js/webcore/streams.zig b/src/bun.js/webcore/streams.zig index 165190e6be0e61..d4f61a5c146aa5 100644 --- a/src/bun.js/webcore/streams.zig +++ b/src/bun.js/webcore/streams.zig @@ -1996,7 +1996,7 @@ pub fn NewJSSink(comptime SinkType: type, comptime name_: []const u8) type { // TODO: make this JSGlobalObject local // for better security -const ByteListPool = ObjectPool( +pub const ByteListPool = ObjectPool( bun.ByteList, null, true, @@ -2588,7 +2588,12 @@ pub fn HTTPServerWritable(comptime ssl: bool) type { if (this.pooled_buffer) |pooled| { this.buffer.len = 0; + if (this.buffer.cap > 64 * 1024) { + this.buffer.deinitWithAllocator(bun.default_allocator); + this.buffer = bun.ByteList.init(""); + } pooled.data = this.buffer; + this.buffer = bun.ByteList.init(""); this.pooled_buffer = null; pooled.release(); diff --git a/src/bun.zig b/src/bun.zig index 9c37bf88545be3..b96006c618a5b4 100644 --- a/src/bun.zig +++ b/src/bun.zig @@ -3229,6 +3229,19 @@ pub fn exitThread() noreturn { } } +pub fn deleteAllPoolsForThreadExit() void { + const pools_to_delete = .{ + JSC.WebCore.ByteListPool, + bun.WPathBufferPool, + bun.PathBufferPool, + bun.JSC.ConsoleObject.Formatter.Visited.Pool, + bun.js_parser.StringVoidMap.Pool, + }; + inline for (pools_to_delete) |pool| { + pool.deleteAll(); + } +} + pub const Tmpfile = @import("./tmp.zig").Tmpfile; pub const io = @import("./io/io.zig"); @@ -4122,3 +4135,81 @@ pub inline fn isComptimeKnown(x: anytype) bool { pub inline fn itemOrNull(comptime T: type, slice: []const T, index: usize) ?T { return if (index < slice.len) slice[index] else null; } + +/// To handle stack overflows: +/// 1. StackCheck.init() +/// 2. .isSafeToRecurse() +pub const StackCheck = struct { + cached_stack_end: usize = 0, + + extern fn Bun__StackCheck__initialize() void; + pub fn configureThread() void { + Bun__StackCheck__initialize(); + } + + extern "C" fn Bun__StackCheck__getMaxStack() usize; + fn getStackEnd() usize { + return Bun__StackCheck__getMaxStack(); + } + + pub fn init() StackCheck { + return StackCheck{ .cached_stack_end = getStackEnd() }; + } + + pub fn update(this: *StackCheck) void { + this.cached_stack_end = getStackEnd(); + } + + /// Is there at least 128 KB of stack space available? + pub fn isSafeToRecurse(this: StackCheck) bool { + const stack_ptr: usize = @frameAddress(); + const remaining_stack = stack_ptr -| this.cached_stack_end; + return remaining_stack > 1024 * if (Environment.isWindows) 256 else 128; + } +}; + +// Workaround for lack of branch hints. +pub noinline fn throwStackOverflow() StackOverflow!void { + @setCold(true); + return error.StackOverflow; +} +const StackOverflow = error{StackOverflow}; + +// This pool exists because on Windows, each path buffer costs 64 KB. +// This makes the stack memory usage very unpredictable, which means we can't really know how much stack space we have left. +// This pool is a workaround to make the stack memory usage more predictable. +// We keep up to 4 path buffers alive per thread at a time. +pub fn PathBufferPoolT(comptime T: type) type { + return struct { + const Pool = ObjectPool(PathBuf, null, true, 4); + pub const PathBuf = struct { + bytes: T, + + pub fn deinit(this: *PathBuf) void { + var node: *Pool.Node = @alignCast(@fieldParentPtr("data", this)); + node.release(); + } + }; + + pub fn get() *T { + // use a threadlocal allocator so mimalloc deletes it on thread deinit. + return &Pool.get(bun.threadlocalAllocator()).data.bytes; + } + + pub fn put(buffer: *T) void { + var path_buf: *PathBuf = @alignCast(@fieldParentPtr("bytes", buffer)); + path_buf.deinit(); + } + + pub fn deleteAll() void { + Pool.deleteAll(); + } + }; +} + +pub const PathBufferPool = PathBufferPoolT(bun.PathBuffer); +pub const WPathBufferPool = if (Environment.isWindows) PathBufferPoolT(bun.WPathBuffer) else struct { + // So it can be used in code that deletes all the pools. + pub fn deleteAll() void {} +}; +pub const OSPathBufferPool = if (Environment.isWindows) WPathBufferPool else PathBufferPool; diff --git a/src/bundler/bundle_v2.zig b/src/bundler/bundle_v2.zig index de8fa8ebe503a8..a9d2345bf1cfb3 100644 --- a/src/bundler/bundle_v2.zig +++ b/src/bundler/bundle_v2.zig @@ -6978,7 +6978,7 @@ pub const LinkerContext = struct { } const expr = Expr{ - .data = stmt.data.s_lazy_export, + .data = stmt.data.s_lazy_export.*, .loc = stmt.loc, }; const module_ref = this.graph.ast.items(.module_ref)[source_index]; diff --git a/src/cli.zig b/src/cli.zig index 15eebedb3d0b62..54037e296585a8 100644 --- a/src/cli.zig +++ b/src/cli.zig @@ -1941,7 +1941,6 @@ pub const Command = struct { completions = try RunCommand.completions(ctx, null, &reject_list, .script_and_descriptions); } else if (strings.eqlComptime(filter[0], "a")) { const FirstLetter = AddCompletions.FirstLetter; - const index = AddCompletions.index; outer: { if (filter.len > 1 and filter[1].len > 0) { @@ -1974,7 +1973,8 @@ pub const Command = struct { 'z' => FirstLetter.z, else => break :outer, }; - const results = index.get(first_letter); + AddCompletions.init(bun.default_allocator) catch bun.outOfMemory(); + const results = AddCompletions.getPackages(first_letter); var prefilled_i: usize = 0; for (results) |cur| { diff --git a/src/cli/add_completions.txt b/src/cli/add_completions.txt index 7f2670cf7f7c3a..b7c7b6a1f69402 100644 --- a/src/cli/add_completions.txt +++ b/src/cli/add_completions.txt @@ -2218,6 +2218,7 @@ elm-hot elm-hot-webpack-loader elm-test elm-webpack-loader +elysia email-validator emailjs-base64 emailjs-imap-client @@ -3700,6 +3701,7 @@ homebridge-config-ui-x homedir homedir-polyfill honeybadger-js +hono hook-std hookable hooks diff --git a/src/cli/add_completions.zig b/src/cli/add_completions.zig index b96f1c1e810ab1..70d7e497d909ce 100644 --- a/src/cli/add_completions.zig +++ b/src/cli/add_completions.zig @@ -1,6 +1,16 @@ -pub const add_completions: []const u8 = @embedFile("add_completions.txt"); +// Auto-generated file. Do not edit. +// To regenerate this file, run: +// +// bun misctools/generate-add-completions.ts +// +// If you update add_completions.txt, then you should run this script again. +// +// This used to be a comptime block, but it made the build too slow. +// Compressing the completions list saves about 100 KB of binary size. const std = @import("std"); -const Environment = @import("../env.zig"); +const bun = @import("root").bun; +const zstd = bun.zstd; +const Environment = bun.Environment; pub const FirstLetter = enum(u8) { a = 'a', @@ -31,58 +41,64 @@ pub const FirstLetter = enum(u8) { z = 'z', }; -pub const Index = std.EnumArray(FirstLetter, []const []const u8); -pub const index: Index = if (Environment.isDebug) Index.initFill(&.{"OOMWorkAround"}) else brk: { - var array: Index = Index.initFill(&[_][]const u8{}); - - var i: u8 = 'a'; - var tokenizer = std.mem.tokenize(u8, add_completions, "\n"); - - while (i <= 'z') { - var init_tokenizer = tokenizer; - var count: usize = 0; - @setEvalBranchQuota(9999999); - while (init_tokenizer.next()) |pkg| { - if (pkg.len == 0) continue; - if (pkg[0] == i) { - count += 1; - } else { - break; - } - } - - var record: [count][]const u8 = undefined; - var record_i: usize = 0; - var next_i = i + 1; - - while (tokenizer.next()) |pkg| { - if (pkg.len == 0) continue; - - if (pkg[0] == i) { - record[record_i] = pkg; - record_i += 1; - } else { - next_i = pkg[0]; - break; - } - } - - const cloned = record; - array.set(@as(FirstLetter, @enumFromInt(i)), &cloned); - - @setEvalBranchQuota(999999); - i = next_i; - } - break :brk array; +const compressed_data = [_]u8{ 40, 181, 47, 253, 164, 156, 121, 2, 0, 148, 101, 6, 158, 128, 11, 130, 29, 50, 176, 110, 136, 168, 13, 197, 255, 138, 8, 111, 46, 215, 144, 108, 221, 73, 168, 182, 179, 179, 179, 179, 179, 179, 51, 237, 133, 67, 129, 22, 40, 149, 155, 13, 77, 238, 238, 175, 34, 93, 183, 136, 45, 12, 248, 199, 52, 72, 79, 1, 55, 29, 153, 29, 166, 29, 235, 37, 92, 124, 219, 151, 239, 224, 193, 181, 73, 119, 101, 17, 191, 237, 69, 28, 40, 90, 23, 246, 210, 75, 200, 80, 249, 38, 68, 112, 232, 47, 107, 117, 80, 218, 229, 37, 108, 104, 236, 17, 254, 137, 39, 108, 176, 212, 110, 10, 196, 195, 108, 211, 246, 97, 118, 226, 9, 27, 38, 158, 208, 49, 241, 132, 10, 152, 126, 158, 112, 225, 61, 161, 130, 79, 135, 226, 158, 112, 225, 158, 176, 193, 216, 61, 225, 2, 187, 39, 84, 240, 134, 111, 218, 233, 144, 178, 116, 7, 148, 108, 39, 125, 178, 111, 202, 94, 211, 137, 94, 27, 180, 246, 223, 2, 14, 11, 126, 189, 100, 84, 49, 80, 154, 90, 78, 84, 54, 224, 150, 205, 61, 225, 162, 45, 115, 127, 45, 35, 238, 9, 25, 223, 152, 113, 79, 216, 144, 176, 177, 48, 78, 238, 9, 23, 205, 139, 147, 123, 122, 169, 139, 123, 194, 7, 4, 247, 132, 142, 79, 135, 178, 214, 50, 79, 99, 135, 188, 35, 222, 202, 73, 175, 126, 173, 191, 237, 233, 100, 63, 27, 106, 204, 180, 116, 190, 217, 241, 214, 138, 109, 42, 225, 111, 245, 78, 55, 209, 76, 241, 73, 151, 186, 39, 108, 124, 82, 197, 173, 85, 146, 210, 77, 128, 56, 32, 97, 118, 180, 57, 33, 135, 239, 130, 144, 164, 246, 130, 180, 237, 242, 8, 114, 223, 95, 72, 4, 181, 69, 238, 9, 31, 216, 113, 152, 120, 167, 89, 165, 56, 88, 79, 3, 39, 189, 246, 63, 208, 138, 117, 244, 141, 153, 111, 204, 32, 247, 132, 12, 215, 109, 125, 19, 144, 123, 194, 137, 214, 111, 118, 148, 43, 169, 66, 238, 9, 25, 184, 178, 108, 14, 174, 154, 41, 143, 74, 60, 161, 4, 114, 79, 216, 224, 158, 80, 193, 90, 234, 60, 161, 68, 115, 5, 156, 123, 66, 5, 247, 132, 141, 102, 104, 42, 225, 111, 218, 170, 150, 77, 225, 120, 58, 15, 136, 43, 226, 164, 138, 19, 106, 165, 18, 69, 48, 131, 235, 218, 198, 187, 167, 19, 46, 124, 211, 73, 4, 136, 219, 10, 228, 158, 147, 134, 219, 138, 246, 38, 34, 220, 185, 31, 147, 166, 13, 119, 238, 132, 18, 30, 105, 180, 58, 199, 157, 112, 209, 236, 160, 13, 221, 9, 31, 141, 59, 161, 130, 183, 254, 202, 180, 191, 157, 84, 103, 66, 191, 74, 59, 33, 4, 51, 52, 119, 107, 83, 231, 221, 115, 37, 9, 231, 18, 125, 74, 109, 136, 37, 61, 247, 143, 41, 156, 75, 244, 21, 109, 15, 109, 43, 203, 32, 41, 153, 243, 112, 60, 29, 101, 217, 76, 171, 163, 5, 141, 247, 153, 57, 56, 42, 41, 210, 79, 237, 132, 143, 8, 18, 82, 39, 132, 68, 144, 128, 82, 39, 100, 72, 157, 80, 65, 42, 150, 157, 144, 161, 65, 118, 66, 200, 227, 18, 42, 168, 184, 132, 10, 158, 75, 8, 105, 151, 80, 65, 196, 181, 132, 24, 151, 80, 66, 215, 50, 200, 37, 92, 248, 90, 141, 245, 150, 150, 239, 139, 208, 193, 243, 155, 144, 126, 190, 55, 64, 68, 64, 252, 72, 2, 98, 95, 244, 72, 120, 227, 180, 168, 201, 197, 160, 167, 243, 83, 161, 7, 162, 56, 161, 167, 191, 61, 174, 80, 182, 143, 84, 75, 228, 186, 253, 237, 113, 194, 6, 232, 219, 83, 201, 14, 44, 115, 78, 156, 144, 193, 155, 19, 42, 168, 69, 141, 155, 19, 58, 168, 236, 198, 61, 7, 84, 170, 147, 234, 158, 71, 30, 209, 230, 135, 246, 115, 16, 228, 17, 164, 141, 84, 155, 19, 62, 164, 125, 231, 214, 228, 42, 8, 14, 193, 117, 13, 160, 77, 254, 174, 9, 206, 64, 39, 173, 222, 180, 237, 116, 252, 129, 206, 197, 223, 231, 187, 3, 138, 238, 100, 81, 10, 106, 32, 109, 227, 165, 136, 208, 218, 212, 49, 210, 181, 12, 3, 11, 156, 75, 180, 192, 178, 203, 121, 31, 78, 122, 101, 82, 219, 65, 173, 102, 10, 226, 181, 212, 65, 206, 53, 120, 200, 9, 171, 230, 132, 11, 215, 181, 204, 4, 226, 71, 95, 97, 208, 171, 80, 132, 196, 243, 27, 143, 123, 80, 133, 30, 199, 9, 33, 30, 199, 9, 21, 124, 161, 107, 25, 199, 55, 245, 198, 233, 43, 175, 161, 5, 16, 14, 13, 157, 17, 132, 14, 231, 151, 130, 62, 237, 167, 93, 172, 245, 28, 84, 169, 168, 131, 190, 117, 194, 30, 65, 252, 104, 105, 170, 232, 2, 247, 132, 190, 37, 244, 215, 50, 236, 203, 24, 63, 56, 192, 183, 117, 252, 219, 46, 119, 160, 117, 97, 218, 128, 54, 39, 111, 64, 82, 87, 0, 2, 236, 74, 11, 48, 126, 6, 58, 215, 107, 90, 162, 7, 208, 202, 198, 251, 77, 39, 141, 19, 50, 200, 102, 120, 94, 174, 2, 253, 184, 241, 254, 2, 186, 150, 124, 109, 89, 106, 127, 131, 36, 229, 187, 51, 90, 159, 92, 218, 188, 30, 211, 120, 63, 187, 89, 138, 111, 202, 22, 172, 199, 68, 180, 123, 30, 130, 158, 231, 183, 95, 82, 23, 128, 175, 66, 19, 184, 112, 62, 29, 242, 6, 102, 218, 162, 118, 240, 85, 188, 173, 14, 41, 109, 155, 255, 192, 63, 189, 126, 103, 60, 204, 58, 133, 46, 199, 109, 191, 229, 59, 168, 103, 66, 223, 242, 35, 152, 224, 147, 23, 131, 152, 182, 14, 37, 92, 233, 167, 218, 9, 253, 84, 187, 216, 91, 62, 132, 134, 125, 142, 214, 111, 219, 14, 233, 90, 242, 23, 52, 188, 34, 28, 45, 238, 6, 185, 216, 91, 167, 67, 237, 49, 3, 165, 16, 255, 88, 217, 190, 86, 236, 210, 55, 65, 253, 65, 69, 155, 4, 81, 60, 173, 111, 194, 114, 108, 29, 53, 46, 66, 253, 165, 83, 204, 36, 24, 180, 46, 209, 211, 252, 190, 78, 3, 142, 231, 98, 26, 180, 159, 55, 165, 104, 88, 229, 167, 122, 112, 192, 133, 175, 92, 120, 53, 8, 53, 109, 253, 49, 141, 19, 62, 200, 212, 44, 211, 222, 147, 161, 102, 153, 150, 78, 66, 16, 100, 96, 26, 39, 84, 152, 112, 109, 187, 40, 218, 144, 122, 83, 213, 56, 97, 132, 166, 150, 170, 249, 209, 146, 233, 68, 63, 155, 62, 220, 37, 115, 126, 41, 12, 26, 92, 50, 228, 64, 6, 138, 238, 4, 241, 183, 213, 127, 14, 156, 173, 66, 250, 47, 226, 174, 189, 64, 227, 135, 174, 101, 221, 181, 33, 77, 62, 114, 215, 118, 215, 134, 248, 164, 145, 229, 57, 82, 237, 65, 48, 97, 150, 131, 154, 29, 124, 83, 135, 180, 101, 42, 81, 171, 75, 168, 175, 126, 14, 77, 149, 242, 142, 219, 61, 252, 182, 58, 223, 116, 18, 225, 164, 84, 213, 118, 65, 21, 93, 206, 225, 109, 43, 203, 144, 123, 58, 136, 198, 235, 173, 147, 7, 95, 253, 90, 39, 76, 221, 97, 45, 77, 72, 233, 2, 196, 96, 45, 77, 16, 93, 77, 75, 132, 13, 173, 173, 170, 105, 35, 73, 39, 123, 208, 202, 232, 85, 141, 202, 50, 218, 14, 57, 159, 78, 162, 225, 133, 26, 55, 180, 93, 80, 227, 236, 141, 48, 248, 182, 171, 105, 197, 190, 227, 125, 25, 227, 132, 139, 138, 54, 218, 13, 14, 241, 77, 25, 227, 132, 144, 197, 252, 72, 219, 174, 8, 127, 223, 138, 34, 213, 28, 92, 223, 202, 9, 82, 154, 140, 113, 66, 6, 17, 32, 212, 131, 75, 38, 225, 109, 23, 198, 9, 29, 30, 102, 27, 123, 139, 19, 54, 250, 49, 186, 206, 59, 218, 186, 100, 12, 213, 249, 26, 197, 32, 137, 176, 104, 126, 228, 210, 52, 106, 246, 78, 247, 120, 223, 133, 148, 101, 123, 80, 150, 13, 194, 48, 171, 28, 223, 58, 105, 156, 80, 243, 226, 132, 13, 191, 190, 19, 8, 151, 12, 53, 94, 7, 143, 64, 112, 104, 147, 173, 19, 78, 104, 2, 19, 244, 73, 215, 74, 244, 73, 215, 226, 9, 253, 117, 40, 72, 221, 229, 90, 156, 144, 162, 45, 39, 116, 52, 156, 80, 193, 195, 108, 163, 65, 149, 97, 56, 33, 131, 219, 95, 204, 143, 42, 238, 96, 237, 63, 84, 225, 69, 181, 116, 85, 156, 208, 1, 109, 210, 49, 188, 181, 81, 120, 29, 127, 141, 207, 134, 230, 110, 157, 64, 170, 56, 97, 132, 175, 205, 70, 141, 57, 113, 66, 200, 210, 253, 148, 36, 78, 216, 120, 146, 235, 74, 78, 200, 248, 77, 10, 226, 132, 11, 245, 135, 56, 33, 67, 246, 87, 20, 57, 131, 56, 225, 131, 113, 51, 136, 19, 58, 180, 50, 170, 16, 39, 100, 32, 78, 216, 120, 20, 47, 136, 19, 46, 56, 225, 163, 178, 204, 179, 131, 216, 58, 142, 20, 75, 248, 160, 88, 194, 134, 214, 247, 183, 18, 58, 236, 91, 9, 21, 42, 190, 18, 42, 180, 166, 236, 111, 228, 43, 225, 67, 169, 132, 217, 65, 190, 18, 58, 144, 175, 132, 144, 167, 179, 45, 107, 102, 114, 49, 14, 255, 166, 19, 125, 80, 120, 169, 199, 43, 225, 195, 90, 6, 189, 171, 179, 58, 175, 132, 11, 103, 240, 207, 247, 135, 122, 99, 231, 14, 78, 85, 65, 180, 241, 74, 184, 144, 120, 37, 84, 216, 183, 43, 225, 194, 3, 121, 28, 39, 228, 160, 58, 121, 113, 187, 18, 54, 24, 102, 87, 194, 5, 111, 188, 238, 234, 232, 155, 62, 56, 175, 150, 210, 164, 191, 134, 126, 166, 246, 250, 95, 62, 36, 172, 132, 14, 230, 219, 182, 163, 232, 78, 180, 29, 74, 40, 209, 250, 204, 12, 154, 112, 215, 110, 16, 178, 75, 39, 191, 11, 163, 41, 36, 41, 255, 241, 234, 13, 72, 179, 220, 57, 24, 109, 244, 219, 52, 172, 126, 45, 117, 37, 116, 240, 8, 67, 196, 90, 143, 65, 174, 15, 141, 194, 10, 81, 228, 167, 210, 230, 132, 90, 173, 132, 13, 87, 150, 205, 225, 17, 8, 239, 187, 124, 151, 196, 103, 130, 208, 216, 35, 104, 129, 7, 95, 251, 239, 193, 64, 107, 196, 251, 46, 135, 47, 67, 53, 253, 138, 34, 196, 229, 74, 168, 32, 193, 167, 212, 126, 240, 198, 251, 217, 14, 68, 208, 104, 254, 85, 42, 73, 200, 104, 236, 145, 132, 11, 173, 21, 93, 200, 35, 9, 33, 252, 173, 202, 110, 253, 166, 137, 65, 154, 70, 81, 51, 131, 26, 123, 100, 193, 211, 185, 94, 234, 77, 184, 128, 122, 46, 8, 31, 223, 54, 161, 130, 171, 77, 168, 160, 54, 161, 195, 59, 39, 8, 109, 66, 136, 133, 35, 104, 19, 54, 76, 154, 162, 77, 200, 160, 24, 36, 237, 57, 9, 25, 240, 8, 210, 37, 73, 235, 144, 4, 123, 203, 128, 52, 120, 223, 133, 92, 233, 231, 122, 76, 27, 240, 197, 252, 19, 85, 14, 82, 45, 44, 23, 114, 74, 34, 141, 240, 8, 74, 198, 237, 36, 108, 116, 163, 176, 147, 144, 97, 87, 66, 157, 106, 37, 236, 36, 132, 184, 166, 101, 39, 97, 68, 43, 102, 78, 66, 134, 10, 52, 124, 69, 213, 90, 39, 97, 68, 219, 124, 238, 137, 58, 9, 29, 188, 173, 234, 36, 92, 184, 183, 96, 143, 65, 161, 205, 239, 223, 116, 87, 138, 240, 102, 214, 220, 173, 72, 226, 11, 225, 186, 146, 164, 78, 66, 9, 39, 125, 82, 144, 75, 117, 18, 62, 36, 105, 37, 13, 198, 92, 49, 225, 75, 151, 92, 249, 169, 184, 181, 68, 30, 121, 164, 138, 219, 68, 243, 226, 212, 240, 77, 25, 51, 6, 30, 249, 247, 253, 78, 39, 33, 227, 213, 59, 157, 132, 11, 214, 233, 36, 92, 80, 187, 114, 210, 22, 105, 106, 218, 202, 104, 51, 0, 241, 164, 108, 116, 61, 136, 96, 177, 119, 144, 3, 215, 253, 253, 166, 168, 245, 83, 118, 58, 9, 37, 58, 157, 132, 14, 136, 138, 54, 218, 107, 25, 212, 240, 114, 240, 160, 158, 9, 105, 211, 82, 75, 39, 33, 67, 75, 39, 161, 194, 174, 212, 234, 144, 172, 116, 18, 46, 176, 108, 73, 58, 9, 23, 148, 244, 214, 28, 212, 190, 231, 186, 206, 29, 74, 191, 217, 157, 170, 66, 20, 94, 43, 29, 111, 160, 146, 93, 141, 198, 30, 137, 168, 122, 43, 85, 20, 162, 236, 169, 104, 202, 152, 161, 108, 95, 63, 85, 67, 91, 22, 190, 233, 36, 124, 72, 154, 153, 132, 11, 254, 141, 153, 132, 12, 223, 118, 161, 198, 36, 100, 76, 154, 50, 9, 23, 22, 38, 161, 2, 143, 64, 88, 120, 45, 136, 73, 232, 104, 205, 174, 68, 173, 223, 52, 33, 164, 241, 126, 126, 211, 109, 70, 107, 105, 66, 8, 253, 236, 69, 151, 38, 108, 248, 4, 36, 42, 225, 194, 87, 82, 66, 5, 100, 104, 154, 151, 132, 11, 188, 36, 108, 52, 47, 9, 21, 40, 153, 80, 129, 175, 119, 58, 159, 9, 27, 43, 159, 103, 66, 6, 198, 10, 57, 158, 9, 25, 206, 231, 122, 83, 71, 234, 153, 208, 0, 234, 153, 80, 161, 237, 226, 153, 144, 161, 117, 187, 51, 225, 130, 87, 103, 194, 133, 149, 109, 85, 103, 66, 134, 234, 165, 19, 119, 240, 41, 181, 81, 3, 255, 166, 173, 241, 210, 153, 48, 226, 183, 162, 72, 251, 61, 47, 228, 109, 243, 93, 38, 132, 172, 108, 118, 153, 112, 145, 191, 46, 19, 66, 154, 73, 203, 132, 11, 191, 12, 114, 120, 78, 24, 180, 98, 87, 166, 109, 252, 187, 32, 139, 114, 172, 75, 164, 254, 150, 177, 66, 234, 79, 210, 118, 177, 199, 81, 203, 132, 143, 39, 151, 227, 127, 137, 90, 38, 132, 104, 197, 50, 212, 51, 53, 212, 51, 161, 165, 44, 19, 58, 84, 115, 210, 70, 250, 235, 15, 106, 81, 171, 254, 186, 182, 174, 149, 9, 25, 240, 193, 1, 162, 218, 46, 104, 173, 76, 216, 112, 139, 82, 154, 137, 67, 154, 230, 26, 117, 145, 6, 102, 27, 4, 241, 86, 183, 43, 19, 50, 180, 151, 93, 153, 112, 129, 14, 250, 169, 86, 38, 92, 52, 10, 55, 116, 178, 159, 75, 81, 68, 184, 39, 97, 94, 72, 215, 146, 16, 46, 41, 238, 206, 167, 243, 85, 218, 15, 124, 149, 54, 175, 227, 233, 32, 103, 208, 130, 214, 38, 91, 178, 134, 166, 223, 56, 73, 168, 231, 130, 142, 9, 36, 12, 128, 66, 16, 33, 161, 130, 250, 82, 60, 194, 82, 251, 33, 142, 47, 35, 233, 34, 215, 127, 30, 92, 255, 89, 112, 65, 255, 89, 208, 161, 21, 235, 13, 231, 155, 166, 11, 233, 63, 11, 62, 244, 159, 5, 21, 180, 237, 122, 22, 100, 240, 8, 114, 75, 89, 112, 241, 240, 226, 111, 65, 6, 254, 237, 126, 11, 46, 52, 101, 191, 66, 220, 80, 69, 49, 190, 224, 249, 215, 118, 46, 61, 114, 60, 223, 27, 94, 19, 45, 159, 124, 218, 91, 144, 193, 73, 159, 148, 199, 82, 237, 45, 216, 208, 222, 130, 10, 146, 173, 183, 224, 66, 54, 237, 68, 107, 189, 5, 29, 107, 189, 5, 21, 156, 225, 170, 56, 33, 127, 223, 246, 215, 38, 107, 172, 253, 71, 209, 90, 255, 211, 225, 3, 165, 153, 183, 224, 194, 218, 127, 190, 144, 164, 116, 146, 100, 30, 97, 52, 74, 58, 71, 74, 29, 154, 43, 79, 219, 201, 3, 255, 2, 103, 235, 56, 68, 189, 117, 162, 253, 244, 77, 128, 168, 91, 167, 234, 36, 214, 90, 230, 49, 129, 59, 188, 65, 217, 62, 250, 150, 43, 223, 4, 93, 64, 29, 148, 73, 111, 15, 77, 36, 94, 43, 81, 43, 195, 188, 5, 33, 15, 179, 186, 150, 183, 32, 67, 127, 23, 74, 254, 5, 27, 201, 191, 160, 66, 99, 95, 80, 65, 146, 212, 73, 19, 144, 192, 23, 108, 76, 64, 2, 95, 80, 161, 213, 57, 125, 71, 190, 160, 163, 249, 147, 70, 218, 162, 87, 231, 182, 57, 242, 5, 39, 92, 221, 38, 109, 228, 11, 58, 124, 193, 134, 36, 229, 251, 174, 132, 220, 181, 221, 147, 144, 3, 73, 202, 247, 86, 167, 64, 190, 105, 147, 173, 254, 208, 251, 46, 111, 117, 138, 239, 122, 44, 187, 42, 30, 102, 23, 180, 102, 253, 33, 189, 27, 123, 4, 105, 147, 146, 148, 174, 193, 202, 135, 217, 137, 149, 223, 148, 105, 167, 182, 232, 97, 214, 25, 212, 224, 170, 208, 195, 108, 171, 227, 54, 161, 135, 89, 71, 241, 48, 235, 144, 164, 116, 237, 73, 18, 47, 228, 75, 126, 196, 62, 148, 218, 227, 186, 235, 119, 57, 111, 88, 196, 143, 88, 106, 191, 235, 90, 82, 165, 118, 3, 202, 246, 219, 65, 12, 36, 41, 29, 68, 21, 55, 212, 44, 65, 173, 132, 183, 170, 84, 167, 93, 107, 211, 150, 153, 152, 52, 125, 124, 210, 87, 229, 224, 173, 78, 225, 109, 202, 195, 195, 236, 106, 222, 59, 133, 75, 214, 234, 173, 255, 174, 204, 182, 100, 72, 215, 243, 222, 128, 162, 239, 13, 142, 167, 131, 182, 93, 181, 31, 81, 120, 185, 75, 134, 220, 211, 221, 91, 139, 187, 105, 235, 200, 61, 189, 179, 251, 166, 11, 48, 211, 22, 169, 226, 22, 209, 218, 94, 2, 90, 43, 118, 37, 107, 110, 104, 1, 237, 164, 232, 82, 106, 153, 174, 101, 22, 52, 111, 81, 229, 208, 224, 51, 53, 78, 15, 238, 9, 181, 212, 149, 90, 215, 58, 111, 217, 255, 64, 127, 155, 194, 96, 226, 18, 75, 91, 123, 12, 82, 44, 209, 46, 78, 137, 123, 193, 9, 103, 122, 65, 5, 213, 76, 105, 184, 167, 163, 111, 203, 78, 146, 218, 11, 62, 56, 175, 82, 123, 65, 135, 247, 76, 189, 32, 131, 68, 57, 114, 82, 203, 94, 208, 177, 40, 5, 169, 246, 183, 205, 94, 176, 193, 25, 26, 175, 183, 236, 5, 31, 116, 41, 197, 12, 53, 230, 22, 124, 52, 188, 239, 114, 110, 65, 6, 111, 156, 182, 194, 11, 50, 154, 86, 120, 193, 5, 137, 170, 240, 130, 144, 79, 234, 21, 94, 176, 161, 149, 226, 17, 135, 82, 120, 65, 136, 182, 126, 188, 32, 195, 167, 54, 4, 105, 188, 244, 227, 5, 23, 106, 223, 163, 240, 71, 37, 232, 151, 49, 242, 181, 255, 30, 52, 222, 207, 102, 39, 217, 208, 163, 18, 119, 93, 15, 60, 157, 170, 61, 110, 14, 143, 232, 250, 231, 5, 25, 142, 55, 47, 184, 224, 142, 23, 84, 112, 210, 39, 197, 81, 225, 229, 125, 215, 202, 167, 80, 4, 12, 244, 77, 26, 116, 53, 13, 127, 171, 218, 229, 233, 14, 15, 179, 207, 13, 194, 27, 167, 125, 208, 79, 69, 241, 172, 198, 200, 93, 162, 85, 146, 214, 53, 47, 78, 104, 129, 203, 126, 111, 84, 120, 121, 230, 5, 23, 76, 225, 97, 22, 23, 186, 120, 65, 5, 73, 226, 5, 177, 88, 5, 61, 60, 138, 23, 124, 60, 138, 23, 84, 72, 170, 120, 193, 133, 102, 196, 11, 62, 218, 130, 1, 240, 8, 114, 108, 65, 6, 199, 211, 233, 183, 22, 100, 44, 199, 30, 34, 129, 98, 143, 133, 215, 130, 248, 145, 231, 164, 101, 66, 142, 173, 190, 181, 32, 131, 167, 95, 27, 169, 222, 69, 223, 90, 208, 225, 169, 124, 34, 135, 210, 69, 132, 6, 8, 58, 172, 253, 215, 248, 69, 236, 224, 216, 163, 133, 215, 99, 225, 181, 96, 3, 195, 172, 66, 146, 182, 107, 65, 199, 178, 253, 141, 19, 82, 234, 174, 107, 193, 7, 143, 168, 36, 215, 130, 139, 247, 93, 146, 148, 107, 193, 198, 90, 48, 0, 191, 11, 54, 210, 54, 102, 218, 24, 196, 178, 11, 105, 187, 99, 212, 150, 211, 239, 130, 15, 93, 74, 45, 229, 209, 239, 130, 143, 9, 38, 112, 187, 224, 2, 5, 36, 184, 93, 112, 33, 2, 9, 64, 224, 118, 65, 6, 151, 77, 89, 184, 106, 191, 99, 47, 210, 240, 166, 173, 82, 236, 188, 50, 20, 89, 24, 194, 97, 173, 68, 170, 237, 130, 140, 221, 228, 217, 118, 65, 198, 68, 226, 208, 208, 44, 211, 56, 161, 230, 238, 101, 20, 17, 234, 153, 208, 227, 233, 108, 187, 32, 67, 196, 163, 245, 215, 50, 200, 155, 92, 12, 154, 192, 4, 181, 93, 112, 66, 146, 210, 161, 182, 11, 50, 60, 2, 161, 217, 5, 33, 202, 246, 63, 27, 53, 187, 224, 162, 217, 5, 29, 141, 61, 130, 154, 93, 144, 209, 218, 232, 183, 69, 205, 46, 248, 240, 8, 90, 181, 11, 46, 244, 233, 155, 0, 113, 62, 221, 68, 115, 236, 248, 85, 47, 17, 115, 13, 194, 19, 43, 212, 250, 175, 11, 70, 184, 173, 120, 215, 5, 23, 75, 221, 117, 65, 6, 109, 90, 54, 146, 32, 129, 211, 5, 31, 223, 116, 65, 5, 73, 39, 115, 82, 211, 5, 27, 173, 191, 116, 65, 134, 86, 167, 186, 32, 131, 46, 216, 88, 118, 33, 180, 28, 66, 234, 185, 32, 4, 193, 4, 69, 0, 69, 192, 17, 66, 78, 66, 42, 73, 186, 160, 2, 34, 72, 112, 146, 46, 200, 208, 57, 65, 79, 69, 46, 164, 212, 130, 16, 143, 48, 60, 162, 138, 27, 106, 120, 247, 116, 90, 144, 193, 35, 170, 56, 45, 11, 50, 36, 112, 69, 206, 231, 130, 140, 198, 251, 235, 12, 209, 180, 85, 42, 221, 67, 219, 166, 147, 57, 252, 227, 39, 151, 218, 110, 144, 123, 114, 111, 94, 28, 90, 179, 43, 145, 123, 114, 79, 238, 185, 224, 194, 61, 211, 248, 151, 40, 173, 231, 130, 18, 11, 175, 6, 57, 158, 11, 54, 86, 191, 8, 38, 104, 168, 141, 96, 130, 8, 38, 136, 96, 2, 138, 134, 45, 138, 96, 130, 8, 38, 136, 48, 129, 58, 132, 70, 211, 8, 18, 42, 12, 18, 207, 215, 230, 119, 135, 55, 184, 254, 227, 78, 233, 92, 89, 54, 7, 247, 73, 83, 134, 68, 179, 76, 155, 80, 103, 199, 24, 242, 224, 174, 137, 219, 161, 93, 9, 169, 51, 38, 77, 103, 35, 130, 9, 144, 122, 46, 184, 72, 219, 223, 52, 61, 157, 11, 46, 236, 74, 40, 155, 174, 92, 208, 161, 169, 229, 202, 5, 29, 212, 173, 107, 114, 193, 133, 54, 217, 52, 185, 160, 195, 251, 46, 228, 170, 153, 162, 114, 193, 134, 182, 141, 202, 5, 25, 60, 226, 248, 29, 142, 231, 114, 73, 202, 5, 27, 30, 169, 52, 98, 24, 8, 47, 56, 151, 232, 153, 108, 165, 255, 218, 120, 59, 25, 132, 255, 245, 103, 201, 5, 194, 4, 171, 246, 26, 188, 162, 205, 21, 49, 208, 198, 139, 36, 229, 130, 12, 39, 229, 242, 44, 185, 96, 163, 241, 122, 150, 92, 112, 241, 48, 203, 144, 36, 117, 210, 90, 153, 220, 246, 4, 78, 250, 164, 60, 36, 43, 41, 234, 158, 71, 227, 149, 170, 229, 59, 68, 131, 195, 155, 188, 9, 3, 17, 32, 64, 218, 228, 59, 133, 115, 57, 65, 225, 229, 145, 133, 153, 52, 237, 126, 175, 174, 189, 150, 121, 22, 59, 120, 238, 202, 244, 214, 201, 182, 167, 150, 39, 136, 31, 73, 146, 58, 9, 41, 237, 92, 73, 85, 123, 15, 180, 190, 111, 163, 29, 65, 115, 107, 182, 162, 223, 56, 33, 237, 125, 19, 18, 144, 203, 105, 55, 64, 89, 54, 109, 213, 158, 2, 18, 224, 174, 162, 141, 118, 3, 180, 249, 81, 63, 167, 169, 31, 51, 75, 29, 85, 60, 242, 233, 24, 39, 3, 44, 128, 1, 147, 166, 72, 21, 183, 150, 186, 152, 151, 4, 52, 109, 215, 178, 14, 1, 2, 9, 174, 84, 34, 157, 236, 191, 164, 222, 56, 185, 237, 119, 68, 225, 197, 40, 96, 1, 16, 36, 60, 64, 130, 4, 170, 56, 109, 123, 12, 171, 123, 222, 1, 16, 168, 104, 163, 141, 30, 73, 218, 247, 6, 44, 160, 213, 61, 87, 76, 89, 54, 196, 48, 106, 102, 30, 149, 32, 253, 76, 187, 220, 83, 77, 219, 126, 170, 28, 160, 244, 159, 99, 12, 129, 171, 123, 174, 212, 180, 117, 128, 82, 199, 201, 145, 36, 241, 90, 34, 144, 0, 130, 8, 68, 112, 69, 8, 64, 0, 1, 20, 128, 90, 157, 203, 166, 32, 166, 239, 143, 35, 143, 36, 197, 239, 17, 104, 125, 215, 247, 100, 140, 83, 211, 118, 109, 246, 63, 192, 181, 19, 80, 241, 136, 106, 187, 32, 2, 80, 120, 49, 223, 8, 112, 188, 21, 117, 64, 1, 248, 1, 254, 244, 250, 189, 113, 66, 238, 185, 146, 163, 74, 126, 123, 12, 224, 146, 33, 10, 230, 118, 160, 189, 20, 109, 93, 236, 141, 83, 46, 109, 137, 102, 226, 186, 235, 219, 54, 109, 18, 43, 203, 134, 82, 177, 108, 137, 214, 172, 243, 115, 187, 231, 91, 29, 183, 139, 48, 223, 118, 20, 202, 178, 33, 73, 123, 78, 66, 206, 167, 107, 125, 101, 217, 233, 6, 160, 44, 219, 186, 178, 108, 72, 87, 211, 146, 13, 224, 249, 109, 203, 180, 85, 170, 58, 95, 211, 216, 183, 221, 46, 166, 241, 126, 182, 101, 187, 84, 165, 42, 6, 28, 192, 219, 254, 218, 183, 160, 135, 217, 182, 204, 153, 2, 28, 79, 197, 107, 98, 169, 98, 134, 38, 168, 226, 17, 181, 249, 169, 144, 78, 152, 105, 31, 192, 91, 151, 89, 197, 12, 85, 60, 210, 76, 220, 117, 45, 185, 157, 19, 244, 77, 89, 227, 222, 73, 83, 6, 76, 154, 62, 171, 111, 118, 108, 162, 162, 22, 66, 181, 29, 210, 182, 171, 45, 242, 206, 101, 177, 119, 154, 124, 228, 192, 35, 13, 172, 156, 68, 52, 222, 231, 92, 235, 24, 39, 180, 46, 91, 23, 166, 10, 104, 230, 160, 156, 168, 137, 42, 6, 154, 183, 232, 3, 111, 12, 210, 79, 181, 192, 221, 83, 211, 86, 45, 102, 208, 183, 100, 175, 41, 122, 111, 12, 180, 145, 178, 108, 79, 46, 231, 171, 10, 224, 74, 37, 119, 74, 214, 170, 146, 33, 239, 137, 248, 209, 202, 214, 223, 69, 241, 174, 17, 111, 112, 199, 237, 144, 54, 173, 12, 85, 60, 130, 244, 77, 6, 176, 28, 63, 154, 236, 155, 160, 200, 151, 129, 231, 183, 179, 113, 183, 139, 113, 192, 61, 87, 106, 188, 170, 120, 185, 74, 3, 242, 173, 156, 168, 75, 134, 180, 45, 163, 170, 129, 126, 54, 186, 84, 161, 181, 50, 45, 80, 241, 8, 250, 148, 218, 15, 120, 243, 103, 115, 82, 133, 30, 102, 85, 219, 5, 9, 224, 225, 219, 46, 87, 136, 182, 67, 21, 67, 236, 74, 168, 177, 116, 201, 5, 23, 150, 46, 207, 178, 228, 130, 140, 206, 37, 23, 92, 208, 223, 133, 94, 4, 19, 44, 216, 136, 96, 130, 5, 21, 52, 44, 207, 129, 252, 59, 232, 121, 39, 32, 212, 115, 65, 110, 2, 75, 244, 188, 72, 251, 85, 184, 227, 137, 170, 5, 141, 25, 227, 4, 97, 157, 72, 251, 85, 36, 74, 60, 173, 111, 2, 170, 36, 58, 252, 178, 93, 72, 63, 187, 178, 12, 122, 42, 220, 142, 173, 111, 14, 73, 98, 38, 209, 218, 52, 188, 32, 46, 97, 118, 30, 16, 13, 47, 212, 188, 69, 213, 67, 103, 68, 87, 194, 220, 96, 194, 121, 43, 137, 11, 173, 90, 209, 74, 34, 195, 121, 43, 137, 34, 112, 74, 162, 35, 2, 167, 52, 239, 236, 22, 172, 9, 254, 48, 119, 109, 87, 81, 10, 109, 78, 72, 162, 28, 61, 217, 21, 72, 107, 214, 37, 137, 25, 68, 146, 152, 73, 148, 35, 167, 36, 78, 104, 243, 59, 98, 217, 233, 144, 83, 18, 31, 36, 202, 145, 166, 157, 168, 66, 207, 18, 204, 180, 69, 78, 73, 100, 52, 127, 210, 214, 56, 33, 167, 36, 50, 240, 157, 144, 83, 18, 23, 143, 79, 169, 141, 156, 146, 24, 81, 217, 181, 148, 68, 6, 109, 236, 184, 137, 247, 92, 200, 117, 178, 216, 181, 209, 179, 26, 23, 96, 178, 159, 173, 142, 237, 2, 169, 61, 94, 84, 33, 101, 236, 74, 73, 116, 224, 84, 151, 107, 179, 227, 146, 169, 63, 188, 247, 50, 191, 73, 73, 124, 36, 159, 36, 42, 84, 242, 115, 146, 200, 224, 106, 201, 181, 12, 126, 219, 162, 156, 36, 50, 114, 146, 168, 224, 157, 102, 151, 211, 172, 131, 222, 181, 105, 222, 2, 173, 88, 127, 215, 230, 127, 137, 140, 137, 214, 202, 50, 218, 142, 255, 37, 66, 248, 95, 226, 163, 85, 210, 118, 57, 154, 70, 145, 82, 11, 250, 169, 237, 17, 8, 250, 186, 28, 227, 135, 198, 173, 101, 226, 127, 137, 142, 134, 151, 54, 45, 157, 228, 160, 218, 46, 136, 255, 37, 54, 92, 55, 237, 98, 135, 84, 51, 197, 61, 93, 131, 93, 9, 61, 188, 156, 42, 20, 1, 231, 95, 34, 132, 243, 47, 241, 177, 9, 253, 170, 151, 200, 240, 198, 235, 188, 234, 37, 66, 160, 254, 79, 124, 56, 213, 229, 144, 5, 165, 101, 252, 137, 14, 78, 209, 157, 160, 166, 14, 105, 74, 231, 136, 241, 39, 82, 232, 239, 66, 11, 127, 98, 99, 225, 79, 84, 72, 254, 68, 133, 117, 217, 212, 113, 196, 83, 34, 168, 229, 186, 231, 250, 196, 6, 110, 143, 44, 244, 115, 149, 50, 182, 175, 222, 128, 101, 167, 123, 215, 158, 240, 71, 37, 16, 214, 254, 131, 240, 251, 168, 68, 37, 187, 86, 34, 181, 199, 83, 251, 121, 251, 101, 187, 24, 118, 82, 42, 3, 39, 165, 62, 217, 157, 16, 214, 254, 163, 208, 167, 111, 2, 132, 199, 47, 219, 181, 116, 173, 236, 116, 16, 214, 126, 123, 232, 87, 223, 202, 201, 132, 190, 149, 19, 93, 255, 220, 206, 59, 40, 99, 95, 255, 234, 144, 166, 161, 167, 95, 251, 233, 215, 126, 248, 42, 109, 125, 250, 38, 160, 137, 138, 254, 99, 188, 28, 90, 127, 217, 174, 134, 21, 65, 18, 230, 182, 201, 88, 33, 9, 115, 132, 55, 72, 152, 29, 244, 91, 121, 104, 253, 95, 166, 223, 116, 34, 225, 164, 212, 198, 14, 117, 82, 38, 36, 241, 85, 16, 19, 79, 168, 145, 218, 227, 137, 11, 148, 247, 68, 5, 10, 47, 6, 185, 186, 199, 65, 189, 117, 2, 97, 205, 204, 123, 98, 131, 122, 235, 36, 251, 209, 163, 146, 54, 225, 235, 41, 134, 104, 109, 101, 218, 162, 252, 84, 206, 28, 190, 120, 97, 143, 163, 214, 172, 123, 162, 195, 2, 127, 117, 127, 208, 120, 191, 27, 239, 59, 118, 80, 197, 13, 77, 124, 171, 59, 131, 40, 116, 169, 150, 206, 131, 51, 72, 215, 194, 212, 61, 241, 209, 180, 109, 85, 77, 91, 219, 161, 215, 230, 60, 113, 34, 2, 19, 136, 32, 65, 98, 26, 121, 4, 2, 4, 205, 249, 221, 211, 137, 121, 34, 196, 19, 27, 118, 165, 221, 228, 203, 90, 153, 60, 209, 209, 233, 137, 10, 46, 61, 81, 33, 91, 122, 226, 130, 174, 37, 31, 121, 34, 195, 19, 27, 79, 118, 39, 242, 68, 134, 242, 207, 119, 212, 224, 105, 93, 107, 191, 19, 27, 223, 137, 16, 95, 57, 217, 238, 68, 198, 195, 108, 119, 34, 195, 164, 233, 78, 92, 248, 148, 142, 113, 66, 79, 191, 35, 102, 209, 195, 48, 235, 146, 77, 56, 41, 181, 185, 233, 187, 100, 159, 171, 65, 69, 85, 91, 213, 30, 64, 80, 247, 60, 63, 183, 131, 192, 96, 194, 182, 151, 154, 126, 83, 143, 120, 7, 77, 253, 248, 155, 221, 161, 105, 151, 47, 134, 121, 78, 131, 235, 182, 122, 122, 74, 91, 155, 150, 221, 169, 15, 218, 180, 236, 135, 78, 152, 185, 100, 141, 247, 92, 14, 253, 108, 253, 198, 251, 73, 189, 245, 37, 86, 238, 111, 91, 134, 43, 170, 218, 54, 253, 134, 207, 53, 81, 81, 213, 22, 65, 168, 182, 140, 163, 245, 215, 50, 14, 79, 235, 100, 229, 155, 160, 143, 86, 134, 89, 5, 145, 164, 92, 208, 147, 221, 137, 142, 198, 219, 94, 195, 37, 197, 245, 243, 185, 81, 119, 162, 131, 97, 86, 161, 238, 68, 70, 67, 207, 111, 39, 46, 158, 214, 55, 1, 229, 118, 162, 67, 169, 106, 250, 21, 69, 254, 77, 217, 107, 58, 81, 226, 201, 238, 244, 166, 19, 27, 222, 116, 162, 130, 122, 167, 107, 58, 145, 17, 161, 113, 211, 137, 12, 78, 211, 137, 10, 77, 39, 42, 80, 170, 147, 117, 79, 135, 180, 19, 27, 240, 181, 255, 144, 67, 51, 212, 61, 143, 116, 178, 78, 234, 68, 72, 46, 220, 46, 145, 193, 223, 105, 214, 219, 78, 56, 159, 14, 53, 203, 52, 78, 104, 57, 151, 216, 96, 31, 63, 14, 84, 113, 170, 64, 40, 172, 218, 126, 211, 38, 23, 165, 44, 104, 254, 100, 252, 47, 247, 45, 128, 154, 86, 236, 127, 179, 115, 207, 29, 90, 155, 230, 45, 170, 144, 62, 51, 109, 6, 17, 82, 50, 137, 148, 204, 153, 194, 57, 98, 81, 235, 144, 36, 35, 193, 238, 218, 206, 149, 129, 50, 110, 39, 77, 168, 231, 34, 209, 58, 217, 86, 11, 22, 149, 136, 189, 117, 46, 209, 161, 238, 121, 176, 102, 198, 91, 246, 67, 60, 173, 111, 2, 164, 149, 97, 222, 130, 84, 211, 6, 213, 212, 185, 196, 71, 195, 148, 115, 137, 12, 30, 241, 94, 229, 92, 98, 195, 145, 164, 237, 98, 160, 138, 155, 174, 101, 8, 224, 234, 120, 118, 196, 174, 212, 128, 154, 38, 231, 18, 27, 18, 229, 188, 56, 151, 232, 224, 239, 179, 211, 185, 196, 134, 243, 233, 26, 122, 21, 122, 230, 70, 206, 37, 66, 218, 46, 168, 85, 173, 125, 11, 114, 46, 241, 65, 130, 238, 239, 218, 127, 16, 77, 219, 148, 253, 147, 166, 77, 91, 95, 165, 221, 58, 105, 245, 7, 146, 182, 11, 181, 54, 13, 39, 83, 39, 185, 68, 115, 183, 106, 115, 66, 146, 182, 11, 194, 73, 159, 11, 146, 180, 93, 146, 182, 235, 225, 205, 221, 218, 192, 188, 133, 159, 219, 161, 166, 237, 55, 59, 109, 164, 109, 155, 166, 249, 169, 34, 212, 61, 63, 128, 39, 101, 163, 11, 81, 120, 49, 104, 129, 87, 215, 118, 232, 155, 238, 218, 213, 240, 190, 222, 234, 218, 46, 64, 20, 234, 164, 76, 42, 121, 185, 135, 38, 222, 153, 23, 8, 175, 197, 46, 209, 161, 185, 68, 5, 154, 94, 250, 186, 68, 70, 98, 181, 46, 145, 65, 157, 148, 105, 93, 34, 67, 127, 21, 183, 227, 18, 27, 21, 117, 137, 14, 9, 20, 115, 188, 123, 58, 81, 184, 59, 145, 58, 41, 93, 34, 196, 37, 6, 192, 223, 245, 209, 115, 226, 196, 55, 251, 211, 18, 23, 78, 250, 100, 79, 75, 100, 172, 165, 142, 163, 167, 37, 66, 168, 111, 75, 124, 248, 51, 34, 232, 245, 45, 145, 65, 215, 46, 204, 30, 142, 59, 161, 134, 109, 131, 71, 158, 84, 72, 125, 75, 124, 160, 190, 37, 42, 232, 155, 160, 214, 172, 171, 66, 223, 18, 29, 24, 131, 123, 21, 88, 111, 173, 170, 61, 135, 79, 169, 141, 248, 23, 123, 7, 241, 67, 88, 235, 235, 122, 222, 157, 230, 113, 59, 175, 146, 237, 119, 137, 87, 215, 118, 84, 180, 209, 214, 102, 248, 55, 101, 77, 54, 227, 174, 169, 233, 155, 160, 142, 212, 101, 114, 93, 192, 86, 49, 90, 62, 169, 225, 205, 139, 83, 243, 226, 228, 80, 139, 245, 173, 134, 36, 229, 162, 240, 90, 250, 52, 232, 175, 67, 81, 218, 142, 252, 166, 77, 50, 135, 166, 218, 13, 164, 229, 147, 244, 61, 36, 41, 215, 210, 44, 104, 189, 37, 66, 214, 91, 162, 66, 171, 183, 196, 5, 101, 217, 12, 106, 188, 14, 248, 145, 146, 112, 79, 16, 240, 209, 182, 225, 133, 86, 110, 98, 71, 149, 5, 170, 56, 245, 4, 84, 105, 73, 90, 247, 185, 24, 84, 145, 136, 224, 105, 223, 211, 254, 67, 237, 123, 40, 66, 67, 235, 123, 242, 163, 8, 18, 79, 134, 190, 162, 143, 34, 72, 168, 116, 218, 239, 179, 53, 235, 40, 66, 163, 176, 114, 220, 10, 125, 210, 165, 190, 191, 30, 67, 17, 28, 208, 165, 22, 181, 186, 106, 63, 59, 218, 247, 184, 209, 190, 8, 181, 221, 160, 125, 46, 251, 253, 153, 23, 180, 143, 226, 155, 54, 118, 140, 19, 82, 237, 31, 128, 235, 90, 6, 1, 250, 185, 188, 101, 71, 56, 233, 241, 55, 252, 46, 231, 107, 113, 39, 7, 173, 216, 223, 150, 14, 161, 255, 184, 181, 117, 45, 89, 177, 174, 237, 18, 74, 4, 57, 72, 106, 25, 69, 112, 254, 37, 79, 184, 36, 49, 115, 136, 149, 219, 250, 201, 22, 212, 180, 85, 201, 107, 93, 162, 69, 41, 232, 105, 102, 202, 80, 123, 32, 241, 100, 13, 109, 2, 16, 44, 100, 177, 119, 38, 156, 102, 157, 8, 173, 239, 106, 59, 194, 117, 53, 204, 77, 243, 80, 214, 31, 10, 202, 149, 220, 12, 131, 214, 73, 58, 210, 181, 140, 246, 187, 46, 72, 251, 158, 75, 117, 101, 226, 197, 64, 215, 146, 206, 113, 43, 212, 52, 217, 12, 184, 174, 37, 63, 63, 149, 132, 235, 74, 152, 31, 60, 2, 225, 59, 157, 78, 213, 116, 101, 130, 200, 109, 136, 126, 178, 109, 249, 128, 86, 38, 94, 40, 2, 106, 128, 11, 71, 8, 101, 205, 78, 106, 234, 160, 70, 97, 37, 233, 100, 136, 65, 179, 147, 90, 34, 131, 42, 110, 14, 142, 16, 203, 46, 55, 129, 37, 46, 220, 4, 150, 168, 224, 17, 164, 234, 61, 228, 249, 77, 188, 116, 34, 73, 204, 34, 214, 254, 251, 231, 214, 254, 99, 160, 177, 243, 143, 107, 188, 234, 241, 74, 78, 73, 212, 170, 118, 82, 0, 127, 199, 184, 221, 3, 3, 60, 162, 138, 219, 2, 20, 144, 147, 140, 36, 192, 93, 151, 74, 117, 22, 80, 247, 188, 0, 60, 177, 66, 107, 130, 227, 178, 155, 7, 16, 192, 141, 166, 100, 90, 191, 45, 34, 192, 187, 237, 228, 57, 201, 8, 3, 206, 75, 209, 250, 255, 22, 163, 150, 91, 181, 68, 170, 233, 55, 110, 198, 193, 162, 152, 101, 123, 22, 248, 92, 142, 233, 51, 160, 85, 237, 132, 219, 33, 101, 251, 237, 53, 122, 109, 207, 106, 1, 173, 109, 243, 27, 63, 208, 197, 222, 26, 28, 160, 105, 163, 138, 31, 90, 155, 134, 151, 132, 54, 39, 180, 11, 162, 43, 19, 171, 180, 93, 3, 222, 120, 63, 211, 50, 251, 220, 30, 104, 253, 182, 14, 52, 109, 223, 217, 113, 192, 218, 80, 52, 222, 79, 237, 49, 158, 246, 159, 149, 45, 209, 211, 220, 232, 103, 90, 160, 249, 115, 61, 182, 142, 82, 123, 252, 129, 115, 137, 30, 102, 151, 99, 137, 143, 230, 79, 181, 43, 39, 104, 177, 119, 28, 75, 140, 104, 188, 222, 58, 65, 170, 165, 183, 58, 150, 24, 161, 77, 186, 43, 67, 142, 37, 62, 28, 75, 84, 160, 109, 25, 85, 76, 177, 68, 135, 71, 208, 243, 251, 77, 213, 34, 254, 109, 13, 39, 212, 184, 34, 89, 226, 2, 79, 106, 170, 154, 58, 85, 40, 209, 34, 150, 24, 177, 54, 31, 249, 147, 148, 149, 248, 240, 136, 182, 117, 43, 145, 161, 46, 29, 127, 84, 116, 57, 198, 9, 165, 227, 86, 98, 195, 202, 55, 65, 209, 59, 179, 149, 8, 81, 141, 217, 74, 100, 240, 8, 132, 103, 173, 196, 133, 182, 93, 170, 37, 99, 156, 144, 246, 91, 43, 81, 226, 43, 250, 168, 53, 187, 18, 29, 238, 140, 118, 37, 46, 90, 221, 82, 7, 81, 56, 169, 83, 61, 119, 113, 179, 18, 27, 60, 242, 48, 251, 173, 43, 209, 161, 180, 211, 113, 164, 141, 43, 86, 166, 149, 8, 33, 73, 233, 24, 155, 76, 1, 8, 34, 16, 225, 153, 108, 133, 22, 248, 39, 107, 102, 208, 36, 146, 248, 240, 230, 110, 69, 147, 72, 162, 99, 87, 66, 147, 72, 226, 226, 93, 223, 4, 109, 84, 201, 72, 34, 68, 215, 146, 223, 155, 200, 240, 8, 132, 135, 157, 196, 133, 75, 152, 157, 68, 134, 166, 18, 126, 132, 178, 185, 73, 148, 208, 201, 174, 116, 170, 18, 7, 245, 92, 208, 55, 109, 18, 29, 169, 154, 54, 137, 12, 106, 187, 65, 77, 226, 226, 249, 109, 143, 49, 78, 200, 191, 211, 73, 168, 73, 156, 144, 96, 2, 8, 80, 107, 203, 36, 54, 214, 122, 14, 210, 182, 12, 147, 248, 240, 8, 114, 77, 100, 104, 125, 247, 116, 82, 133, 92, 19, 27, 82, 123, 156, 105, 226, 162, 249, 179, 181, 105, 131, 150, 93, 223, 116, 87, 66, 76, 19, 27, 184, 173, 64, 76, 37, 46, 34, 72, 64, 173, 75, 37, 50, 90, 85, 242, 66, 46, 153, 166, 126, 236, 232, 253, 69, 84, 98, 3, 119, 109, 165, 18, 27, 88, 106, 191, 35, 165, 18, 29, 186, 158, 119, 196, 143, 42, 14, 41, 149, 248, 224, 173, 78, 250, 100, 72, 169, 68, 136, 183, 46, 236, 53, 164, 109, 23, 82, 42, 17, 162, 181, 233, 251, 46, 244, 77, 39, 138, 24, 43, 164, 84, 34, 3, 73, 74, 183, 40, 5, 45, 246, 14, 122, 117, 79, 164, 84, 162, 3, 74, 37, 42, 232, 92, 175, 105, 137, 86, 170, 68, 136, 54, 217, 252, 222, 208, 252, 153, 252, 49, 11, 163, 202, 68, 235, 187, 84, 137, 150, 42, 102, 72, 39, 20, 191, 146, 197, 252, 205, 159, 218, 9, 249, 131, 174, 37, 83, 227, 253, 148, 248, 200, 79, 137, 10, 174, 253, 62, 149, 73, 251, 249, 206, 128, 4, 109, 242, 93, 177, 243, 202, 22, 248, 55, 101, 186, 84, 63, 39, 219, 174, 1, 149, 218, 206, 209, 39, 141, 44, 60, 209, 252, 217, 233, 212, 81, 218, 86, 246, 154, 42, 110, 142, 111, 202, 90, 179, 238, 137, 86, 166, 109, 120, 57, 144, 172, 164, 160, 138, 71, 28, 242, 149, 69, 120, 227, 253, 86, 247, 100, 219, 64, 165, 58, 173, 140, 165, 195, 184, 25, 228, 13, 125, 179, 171, 104, 219, 230, 45, 135, 36, 224, 10, 241, 205, 142, 45, 74, 203, 178, 61, 138, 194, 213, 210, 101, 144, 123, 174, 36, 241, 109, 155, 93, 80, 107, 78, 137, 16, 143, 160, 166, 237, 183, 199, 139, 249, 81, 171, 227, 165, 19, 85, 232, 249, 93, 187, 172, 3, 238, 154, 82, 98, 131, 47, 90, 189, 211, 33, 109, 242, 53, 45, 23, 98, 240, 78, 83, 74, 100, 104, 20, 86, 75, 39, 186, 208, 167, 236, 247, 37, 81, 194, 249, 116, 72, 255, 45, 246, 37, 177, 193, 151, 68, 5, 107, 45, 243, 44, 118, 168, 117, 45, 238, 111, 156, 190, 121, 73, 116, 176, 216, 17, 63, 218, 37, 209, 209, 170, 56, 169, 66, 187, 36, 62, 150, 92, 18, 21, 214, 74, 166, 245, 147, 130, 82, 123, 28, 37, 66, 232, 106, 90, 110, 63, 106, 118, 65, 137, 14, 136, 10, 120, 8, 205, 58, 232, 120, 22, 164, 180, 149, 194, 14, 169, 90, 7, 31, 34, 72, 80, 207, 5, 173, 131, 141, 71, 29, 116, 60, 21, 117, 80, 65, 45, 87, 212, 65, 134, 181, 255, 26, 13, 47, 103, 22, 187, 18, 226, 138, 58, 200, 200, 165, 233, 8, 21, 117, 144, 145, 84, 69, 168, 168, 131, 139, 92, 154, 70, 252, 168, 162, 14, 62, 150, 166, 81, 69, 29, 92, 84, 212, 193, 7, 173, 40, 196, 55, 109, 88, 9, 61, 9, 183, 58, 220, 110, 1, 228, 202, 90, 29, 108, 208, 86, 7, 21, 84, 3, 31, 148, 33, 183, 212, 193, 133, 115, 71, 219, 100, 172, 220, 185, 19, 146, 120, 101, 75, 29, 100, 144, 40, 111, 224, 181, 212, 65, 137, 214, 166, 225, 21, 225, 145, 181, 82, 177, 85, 7, 33, 158, 150, 17, 210, 170, 131, 140, 103, 146, 234, 224, 130, 99, 79, 185, 84, 7, 25, 78, 193, 35, 16, 24, 115, 55, 52, 3, 245, 76, 8, 31, 234, 96, 0, 34, 11, 35, 215, 181, 14, 240, 251, 58, 168, 149, 131, 16, 143, 74, 148, 131, 11, 190, 56, 168, 64, 66, 73, 7, 21, 180, 173, 183, 78, 210, 193, 198, 167, 131, 10, 86, 63, 79, 39, 251, 121, 58, 232, 120, 79, 7, 29, 19, 239, 169, 24, 226, 95, 236, 29, 196, 31, 65, 201, 110, 144, 180, 93, 72, 194, 232, 81, 188, 32, 223, 7, 207, 167, 195, 64, 169, 82, 186, 48, 69, 158, 14, 74, 52, 109, 219, 241, 116, 144, 225, 146, 45, 28, 223, 166, 237, 163, 241, 50, 248, 93, 56, 85, 168, 153, 65, 142, 167, 131, 144, 182, 139, 167, 131, 12, 173, 243, 209, 183, 114, 210, 80, 197, 105, 219, 107, 242, 249, 43, 168, 201, 71, 252, 200, 211, 193, 137, 10, 242, 116, 144, 194, 169, 42, 212, 40, 140, 60, 29, 132, 60, 171, 49, 242, 9, 59, 200, 211, 193, 198, 99, 225, 213, 52, 59, 52, 185, 24, 79, 7, 37, 220, 211, 193, 135, 75, 152, 29, 148, 218, 227, 15, 235, 45, 145, 167, 131, 12, 79, 7, 21, 124, 210, 197, 104, 163, 167, 49, 235, 116, 240, 129, 226, 211, 81, 157, 14, 46, 180, 145, 234, 116, 208, 33, 29, 108, 232, 116, 208, 33, 73, 233, 30, 231, 210, 193, 6, 47, 4, 118, 46, 29, 100, 64, 22, 52, 149, 240, 163, 214, 78, 93, 214, 165, 131, 12, 214, 165, 131, 10, 30, 81, 197, 13, 57, 93, 75, 126, 99, 95, 251, 15, 226, 93, 35, 15, 46, 161, 44, 155, 121, 192, 59, 23, 71, 211, 214, 121, 132, 16, 127, 203, 85, 224, 89, 58, 216, 104, 218, 170, 78, 199, 209, 179, 116, 176, 193, 35, 173, 140, 165, 131, 12, 143, 44, 150, 14, 50, 120, 107, 211, 111, 97, 233, 160, 195, 35, 72, 130, 131, 11, 18, 28, 12, 128, 171, 123, 26, 138, 42, 17, 28, 132, 68, 224, 8, 14, 42, 180, 58, 183, 21, 13, 46, 182, 162, 193, 134, 46, 79, 50, 228, 182, 162, 189, 6, 33, 13, 175, 133, 243, 203, 92, 127, 219, 57, 4, 183, 21, 155, 148, 253, 231, 138, 28, 34, 48, 12, 83, 34, 48, 255, 200, 173, 231, 175, 239, 242, 25, 218, 252, 222, 76, 188, 153, 248, 55, 102, 154, 137, 71, 240, 198, 105, 23, 48, 255, 17, 154, 9, 37, 157, 86, 172, 55, 214, 82, 199, 191, 237, 66, 238, 233, 238, 233, 175, 31, 205, 115, 220, 220, 212, 113, 91, 214, 202, 24, 226, 161, 42, 35, 13, 234, 60, 90, 159, 153, 129, 232, 90, 166, 194, 32, 191, 225, 192, 45, 155, 123, 91, 230, 238, 158, 208, 103, 106, 252, 160, 141, 151, 225, 208, 82, 151, 58, 115, 132, 210, 166, 165, 3, 81, 75, 151, 92, 28, 78, 73, 228, 214, 107, 240, 193, 173, 215, 160, 194, 187, 237, 164, 246, 53, 248, 224, 174, 175, 65, 72, 83, 9, 127, 131, 12, 206, 248, 138, 190, 68, 91, 214, 76, 252, 219, 46, 93, 207, 63, 52, 74, 58, 95, 75, 29, 127, 180, 215, 13, 15, 179, 207, 16, 109, 90, 68, 43, 69, 155, 147, 152, 245, 42, 9, 91, 150, 65, 195, 11, 61, 41, 27, 93, 201, 58, 37, 143, 196, 202, 35, 73, 43, 234, 152, 52, 117, 210, 39, 165, 121, 238, 233, 237, 77, 152, 112, 215, 229, 145, 136, 111, 235, 120, 164, 45, 211, 38, 217, 46, 91, 236, 23, 120, 231, 226, 160, 45, 115, 127, 28, 39, 244, 153, 26, 5, 131, 150, 186, 18, 90, 182, 127, 162, 113, 218, 149, 26, 15, 179, 16, 75, 151, 92, 30, 18, 254, 237, 117, 131, 13, 22, 165, 184, 212, 48, 242, 83, 229, 43, 67, 201, 117, 131, 20, 201, 117, 131, 10, 15, 195, 162, 112, 55, 184, 160, 79, 223, 4, 164, 180, 193, 155, 78, 228, 30, 119, 131, 14, 103, 144, 132, 36, 241, 106, 170, 221, 96, 67, 155, 252, 166, 169, 213, 161, 39, 63, 39, 140, 138, 157, 112, 167, 100, 16, 26, 156, 130, 214, 132, 214, 38, 31, 158, 60, 40, 117, 224, 65, 91, 70, 149, 106, 104, 26, 47, 247, 104, 183, 170, 82, 6, 53, 32, 105, 102, 144, 47, 230, 119, 221, 95, 230, 71, 107, 2, 3, 73, 122, 203, 161, 38, 31, 173, 9, 77, 254, 163, 245, 219, 174, 9, 223, 244, 245, 147, 171, 33, 23, 2, 188, 241, 46, 143, 129, 86, 102, 218, 34, 245, 78, 183, 128, 111, 91, 214, 180, 117, 46, 153, 251, 62, 32, 128, 2, 56, 120, 84, 210, 32, 21, 71, 126, 35, 15, 253, 84, 136, 125, 33, 220, 191, 83, 217, 165, 78, 131, 43, 132, 171, 165, 203, 72, 16, 64, 39, 251, 73, 55, 251, 189, 113, 3, 237, 1, 7, 245, 53, 65, 59, 39, 90, 157, 127, 14, 180, 213, 161, 60, 45, 17, 196, 154, 176, 120, 26, 94, 236, 88, 118, 49, 214, 132, 117, 144, 174, 125, 104, 253, 223, 229, 28, 41, 211, 136, 197, 156, 28, 151, 221, 224, 2, 143, 184, 186, 236, 6, 25, 201, 18, 212, 248, 150, 221, 224, 130, 227, 119, 149, 221, 32, 163, 105, 171, 171, 178, 27, 124, 88, 143, 209, 148, 221, 32, 195, 215, 229, 171, 58, 206, 207, 237, 36, 90, 93, 118, 114, 244, 228, 114, 159, 82, 59, 162, 194, 139, 75, 182, 46, 145, 187, 100, 46, 217, 99, 217, 181, 160, 146, 141, 195, 191, 49, 51, 193, 192, 5, 80, 113, 102, 160, 242, 218, 46, 7, 124, 129, 156, 100, 4, 53, 208, 186, 214, 57, 175, 212, 224, 233, 236, 151, 72, 87, 51, 161, 21, 170, 111, 130, 55, 232, 98, 111, 156, 144, 98, 110, 16, 162, 152, 27, 84, 88, 142, 28, 212, 33, 215, 149, 21, 141, 27, 124, 244, 91, 13, 42, 180, 215, 232, 91, 13, 46, 220, 169, 66, 144, 135, 217, 229, 171, 193, 69, 83, 9, 127, 3, 134, 209, 63, 142, 80, 95, 110, 14, 215, 182, 140, 42, 52, 161, 190, 220, 80, 203, 109, 20, 238, 5, 173, 252, 148, 205, 160, 229, 171, 65, 6, 154, 134, 87, 131, 11, 190, 80, 209, 230, 133, 182, 28, 121, 22, 134, 214, 138, 103, 157, 119, 120, 98, 133, 124, 161, 21, 187, 178, 105, 104, 105, 107, 239, 39, 86, 58, 48, 86, 30, 65, 43, 189, 87, 161, 149, 189, 10, 173, 84, 207, 37, 194, 194, 171, 193, 134, 227, 185, 28, 45, 188, 26, 7, 228, 17, 177, 86, 162, 133, 87, 131, 140, 133, 87, 131, 10, 254, 184, 209, 204, 114, 53, 200, 192, 114, 53, 168, 16, 33, 233, 4, 173, 6, 23, 107, 255, 105, 191, 175, 232, 87, 244, 83, 50, 253, 124, 121, 207, 82, 251, 65, 63, 159, 161, 36, 168, 8, 174, 146, 117, 142, 86, 131, 15, 136, 10, 47, 104, 53, 216, 160, 36, 180, 254, 103, 114, 180, 26, 132, 124, 190, 9, 104, 53, 184, 80, 17, 212, 227, 149, 190, 45, 59, 180, 26, 124, 80, 18, 158, 151, 123, 94, 206, 113, 173, 108, 55, 34, 144, 16, 225, 147, 161, 213, 224, 98, 87, 4, 151, 236, 83, 29, 180, 26, 132, 180, 174, 117, 13, 58, 224, 133, 65, 171, 65, 6, 37, 97, 53, 232, 80, 17, 250, 241, 67, 148, 4, 109, 156, 208, 106, 176, 161, 36, 184, 86, 18, 173, 6, 27, 171, 193, 0, 172, 126, 191, 13, 50, 52, 188, 126, 155, 77, 200, 1, 25, 152, 105, 251, 219, 224, 162, 17, 130, 130, 157, 54, 114, 224, 183, 233, 231, 158, 16, 55, 51, 161, 214, 190, 5, 178, 46, 145, 3, 25, 26, 133, 213, 111, 131, 11, 230, 229, 183, 213, 95, 171, 63, 165, 141, 146, 78, 2, 130, 116, 24, 222, 228, 163, 245, 157, 48, 0, 161, 44, 27, 51, 109, 17, 187, 134, 213, 15, 181, 109, 182, 25, 233, 51, 91, 160, 109, 23, 122, 137, 67, 42, 181, 35, 252, 151, 49, 78, 136, 146, 173, 222, 13, 109, 164, 116, 27, 164, 120, 223, 37, 73, 137, 126, 27, 116, 208, 229, 183, 65, 72, 5, 131, 243, 233, 208, 111, 131, 15, 46, 155, 194, 108, 131, 11, 143, 160, 79, 143, 217, 6, 27, 186, 210, 58, 179, 13, 50, 152, 109, 240, 209, 208, 120, 127, 91, 179, 232, 157, 157, 6, 29, 190, 237, 66, 144, 182, 146, 86, 167, 193, 133, 243, 47, 157, 6, 25, 92, 155, 116, 200, 105, 144, 241, 220, 32, 167, 65, 6, 7, 125, 19, 180, 160, 25, 125, 69, 255, 181, 193, 136, 215, 6, 27, 206, 175, 13, 46, 164, 100, 175, 13, 50, 168, 69, 186, 188, 127, 252, 248, 107, 131, 19, 254, 218, 160, 131, 131, 214, 101, 155, 60, 93, 254, 86, 191, 237, 183, 240, 166, 19, 49, 117, 30, 61, 227, 102, 208, 226, 133, 61, 4, 104, 171, 190, 145, 218, 209, 107, 131, 139, 215, 6, 35, 42, 203, 104, 59, 199, 55, 59, 118, 218, 168, 145, 64, 124, 105, 101, 157, 101, 59, 152, 105, 139, 94, 27, 132, 240, 231, 91, 93, 43, 123, 77, 81, 163, 48, 122, 109, 208, 0, 236, 180, 185, 49, 67, 175, 13, 46, 208, 6, 25, 191, 12, 105, 189, 109, 127, 91, 231, 211, 33, 213, 94, 126, 42, 164, 13, 54, 228, 167, 66, 238, 144, 199, 87, 60, 39, 77, 98, 173, 76, 232, 181, 193, 7, 215, 6, 29, 48, 204, 62, 107, 131, 11, 215, 148, 204, 43, 99, 109, 112, 98, 217, 197, 218, 32, 195, 79, 28, 170, 45, 69, 219, 161, 61, 60, 191, 16, 169, 157, 136, 181, 193, 133, 254, 46, 228, 150, 181, 65, 7, 243, 22, 214, 6, 25, 42, 30, 177, 54, 200, 144, 218, 227, 77, 27, 92, 52, 109, 240, 209, 30, 211, 180, 65, 134, 197, 236, 32, 105, 27, 244, 115, 125, 46, 215, 186, 150, 151, 230, 5, 60, 124, 229, 253, 121, 225, 150, 80, 205, 20, 247, 116, 207, 59, 96, 143, 52, 128, 17, 27, 97, 166, 13, 50, 180, 78, 182, 21, 75, 146, 54, 248, 88, 146, 61, 215, 70, 158, 26, 164, 112, 77, 13, 58, 90, 174, 251, 203, 6, 25, 218, 188, 108, 112, 33, 194, 4, 45, 64, 130, 67, 124, 229, 145, 63, 47, 236, 160, 85, 210, 76, 209, 180, 147, 86, 247, 164, 77, 63, 199, 224, 65, 187, 35, 255, 166, 141, 23, 2, 92, 29, 207, 229, 217, 143, 52, 53, 51, 7, 160, 240, 9, 92, 81, 1, 60, 119, 37, 3, 170, 184, 77, 236, 74, 232, 89, 252, 179, 65, 71, 131, 13, 201, 88, 54, 184, 224, 239, 83, 174, 108, 144, 161, 109, 151, 186, 117, 168, 65, 0, 65, 131, 13, 254, 144, 225, 104, 81, 131, 11, 13, 2, 0, 65, 158, 138, 138, 199, 224, 194, 90, 185, 84, 84, 60, 6, 25, 254, 150, 67, 15, 109, 91, 173, 172, 168, 120, 12, 58, 24, 37, 113, 80, 91, 254, 199, 224, 3, 25, 182, 31, 131, 10, 79, 133, 219, 37, 107, 117, 237, 49, 216, 224, 147, 116, 144, 83, 168, 246, 35, 165, 141, 86, 62, 80, 150, 13, 130, 178, 108, 11, 28, 243, 82, 109, 23, 132, 13, 202, 178, 173, 245, 24, 132, 188, 180, 104, 173, 199, 32, 195, 221, 51, 168, 224, 158, 193, 9, 247, 12, 42, 104, 75, 113, 6, 23, 152, 51, 8, 105, 170, 157, 156, 193, 69, 4, 103, 80, 129, 243, 233, 86, 106, 67, 112, 6, 31, 16, 156, 193, 70, 246, 87, 20, 130, 51, 200, 80, 95, 166, 191, 77, 65, 206, 32, 133, 99, 250, 200, 25, 92, 184, 51, 216, 96, 208, 225, 111, 185, 197, 163, 146, 198, 174, 87, 73, 24, 114, 6, 33, 90, 155, 86, 134, 156, 193, 134, 36, 165, 123, 141, 32, 103, 208, 1, 145, 253, 140, 212, 30, 79, 153, 28, 69, 232, 90, 6, 61, 14, 57, 131, 16, 175, 88, 139, 59, 57, 82, 77, 77, 84, 211, 5, 180, 254, 39, 67, 223, 184, 25, 132, 60, 34, 48, 110, 6, 23, 24, 55, 131, 10, 207, 226, 219, 12, 50, 56, 174, 205, 36, 114, 248, 102, 167, 218, 12, 50, 180, 25, 116, 164, 150, 45, 105, 166, 60, 164, 246, 120, 3, 117, 131, 234, 124, 141, 178, 108, 6, 29, 30, 129, 208, 12, 62, 82, 54, 131, 10, 13, 254, 200, 49, 184, 208, 140, 84, 75, 228, 24, 108, 184, 254, 58, 132, 175, 77, 166, 17, 170, 61, 102, 112, 65, 169, 234, 164, 52, 51, 248, 224, 17, 102, 236, 67, 43, 183, 245, 147, 33, 201, 74, 72, 86, 215, 146, 106, 29, 249, 169, 84, 113, 67, 249, 169, 88, 51, 131, 13, 107, 255, 61, 90, 235, 127, 58, 244, 44, 200, 193, 147, 146, 37, 131, 90, 253, 30, 28, 150, 45, 207, 27, 240, 236, 175, 232, 4, 202, 79, 21, 177, 137, 221, 19, 177, 102, 6, 31, 60, 192, 13, 249, 43, 160, 153, 193, 71, 243, 111, 99, 246, 240, 77, 155, 68, 13, 173, 147, 69, 75, 166, 218, 227, 110, 180, 153, 129, 56, 41, 181, 153, 193, 133, 83, 85, 136, 193, 243, 173, 168, 153, 193, 8, 126, 94, 184, 209, 55, 102, 48, 226, 87, 242, 141, 25, 92, 160, 111, 204, 32, 196, 23, 51, 8, 161, 43, 95, 178, 152, 65, 198, 195, 108, 163, 85, 45, 102, 240, 225, 178, 31, 249, 75, 220, 118, 253, 91, 224, 141, 247, 29, 51, 112, 143, 187, 65, 254, 18, 51, 248, 128, 208, 24, 92, 40, 203, 134, 26, 131, 139, 202, 91, 12, 82, 84, 222, 98, 80, 65, 215, 146, 191, 77, 105, 144, 112, 199, 223, 98, 208, 193, 213, 190, 197, 32, 131, 82, 247, 188, 227, 157, 102, 151, 99, 7, 213, 114, 33, 8, 136, 171, 123, 30, 81, 120, 49, 15, 138, 182, 11, 162, 240, 98, 144, 241, 188, 24, 84, 248, 149, 44, 230, 71, 110, 23, 131, 144, 231, 87, 146, 118, 49, 200, 104, 101, 152, 231, 136, 160, 182, 155, 10, 47, 21, 93, 12, 66, 186, 117, 146, 139, 193, 69, 126, 42, 84, 209, 111, 157, 160, 137, 166, 244, 251, 253, 115, 49, 184, 240, 207, 197, 224, 67, 157, 148, 201, 145, 139, 65, 135, 207, 197, 160, 130, 55, 185, 24, 92, 112, 79, 8, 27, 214, 90, 9, 131, 11, 251, 208, 83, 81, 177, 12, 58, 68, 60, 204, 246, 251, 202, 50, 216, 136, 128, 36, 116, 45, 249, 40, 63, 21, 82, 90, 89, 6, 33, 158, 255, 101, 112, 225, 105, 117, 124, 25, 92, 188, 247, 50, 40, 193, 154, 41, 12, 95, 204, 223, 160, 45, 83, 218, 142, 111, 91, 6, 25, 17, 60, 130, 14, 74, 219, 50, 184, 208, 218, 150, 65, 238, 61, 34, 252, 174, 106, 203, 32, 67, 132, 103, 110, 73, 51, 5, 181, 206, 231, 129, 243, 75, 209, 183, 114, 226, 112, 207, 117, 45, 185, 233, 11, 184, 178, 108, 232, 93, 255, 153, 27, 158, 122, 241, 204, 141, 32, 141, 132, 209, 171, 208, 55, 237, 135, 198, 30, 65, 17, 79, 82, 208, 195, 148, 177, 131, 114, 146, 17, 135, 86, 143, 168, 168, 114, 120, 131, 235, 178, 165, 11, 84, 91, 6, 31, 170, 45, 131, 10, 206, 80, 234, 164, 199, 143, 94, 189, 1, 127, 137, 25, 8, 253, 92, 47, 173, 76, 20, 30, 193, 154, 25, 180, 178, 45, 131, 142, 200, 194, 14, 198, 10, 173, 3, 117, 104, 253, 181, 12, 66, 214, 90, 6, 173, 181, 204, 106, 187, 100, 66, 77, 219, 181, 12, 229, 83, 106, 63, 120, 68, 43, 214, 25, 175, 78, 209, 157, 104, 59, 164, 77, 178, 117, 64, 221, 243, 90, 177, 142, 148, 157, 174, 101, 176, 0, 171, 31, 114, 120, 152, 101, 217, 148, 78, 90, 189, 129, 174, 101, 112, 129, 247, 93, 12, 213, 30, 59, 30, 129, 208, 150, 211, 99, 245, 115, 62, 29, 226, 71, 219, 15, 66, 221, 243, 19, 159, 175, 21, 219, 120, 134, 147, 222, 209, 144, 135, 71, 22, 79, 103, 219, 5, 249, 54, 94, 111, 250, 14, 146, 102, 166, 249, 179, 109, 69, 42, 228, 239, 91, 121, 240, 244, 55, 133, 240, 111, 186, 150, 193, 6, 93, 203, 160, 130, 107, 191, 102, 25, 92, 188, 174, 102, 25, 100, 152, 192, 164, 2, 170, 184, 85, 192, 91, 151, 101, 208, 193, 61, 169, 228, 133, 26, 6, 29, 16, 141, 58, 198, 48, 200, 160, 159, 139, 97, 144, 97, 93, 54, 180, 12, 131, 140, 167, 95, 155, 194, 65, 127, 21, 55, 9, 73, 98, 230, 112, 141, 61, 242, 192, 7, 199, 15, 219, 217, 52, 101, 112, 241, 252, 115, 114, 228, 30, 82, 134, 148, 42, 131, 17, 74, 149, 65, 133, 116, 146, 50, 184, 48, 129, 43, 66, 9, 151, 48, 59, 200, 23, 180, 58, 159, 202, 96, 67, 175, 98, 80, 65, 49, 24, 0, 109, 188, 18, 131, 12, 191, 48, 168, 192, 33, 200, 35, 11, 131, 13, 30, 89, 24, 84, 88, 24, 108, 180, 100, 11, 131, 143, 133, 193, 0, 232, 147, 12, 58, 232, 147, 12, 42, 120, 227, 180, 147, 100, 176, 193, 132, 5, 245, 78, 183, 116, 173, 236, 116, 139, 82, 154, 182, 173, 147, 210, 52, 73, 113, 93, 203, 122, 83, 71, 15, 179, 207, 114, 218, 232, 97, 246, 97, 246, 41, 17, 101, 75, 157, 71, 241, 194, 154, 153, 214, 149, 176, 187, 54, 179, 254, 48, 251, 176, 86, 50, 253, 21, 253, 119, 93, 43, 153, 19, 224, 93, 35, 212, 129, 78, 72, 210, 174, 244, 204, 203, 51, 47, 12, 86, 97, 169, 253, 254, 249, 200, 37, 91, 249, 38, 168, 68, 186, 50, 233, 232, 125, 151, 123, 117, 164, 244, 61, 25, 202, 35, 109, 77, 189, 23, 104, 197, 50, 83, 6, 113, 199, 188, 222, 147, 153, 120, 152, 93, 75, 190, 47, 224, 164, 143, 164, 109, 101, 175, 249, 58, 44, 188, 154, 6, 51, 203, 248, 202, 55, 65, 31, 12, 179, 234, 225, 193, 196, 25, 41, 130, 132, 212, 233, 33, 73, 234, 36, 213, 118, 105, 188, 39, 131, 14, 199, 211, 97, 157, 12, 50, 52, 117, 50, 184, 208, 56, 237, 123, 126, 75, 6, 31, 239, 250, 142, 134, 87, 195, 115, 210, 50, 161, 39, 181, 100, 16, 242, 168, 175, 100, 144, 97, 41, 147, 43, 25, 92, 180, 74, 146, 193, 133, 38, 159, 177, 40, 165, 21, 73, 50, 232, 224, 15, 193, 177, 122, 27, 244, 52, 127, 74, 6, 33, 13, 105, 123, 73, 6, 25, 92, 31, 69, 5, 230, 219, 182, 243, 175, 40, 58, 148, 66, 184, 173, 248, 138, 62, 3, 146, 148, 239, 239, 24, 226, 186, 150, 105, 112, 199, 199, 194, 171, 249, 138, 226, 162, 249, 87, 185, 250, 67, 43, 163, 185, 27, 34, 194, 2, 25, 86, 78, 20, 53, 222, 135, 198, 239, 109, 41, 205, 17, 141, 119, 245, 147, 112, 215, 213, 94, 55, 112, 91, 209, 160, 180, 159, 239, 15, 179, 203, 221, 225, 161, 165, 46, 230, 165, 245, 31, 55, 242, 149, 251, 157, 174, 249, 129, 179, 236, 116, 136, 1, 141, 215, 93, 29, 173, 9, 254, 176, 5, 77, 219, 166, 225, 229, 223, 150, 157, 106, 138, 222, 119, 49, 120, 74, 164, 241, 126, 114, 132, 65, 235, 175, 101, 220, 66, 184, 255, 6, 36, 73, 157, 228, 252, 74, 117, 144, 187, 246, 242, 240, 206, 229, 193, 241, 92, 140, 166, 157, 168, 210, 127, 221, 224, 252, 75, 137, 5, 20, 184, 88, 57, 81, 212, 174, 162, 216, 120, 152, 101, 168, 251, 247, 196, 19, 226, 111, 112, 93, 203, 32, 132, 97, 88, 146, 114, 65, 43, 183, 162, 56, 225, 250, 169, 220, 131, 72, 148, 163, 214, 73, 171, 63, 146, 226, 220, 161, 177, 71, 30, 118, 37, 70, 191, 181, 52, 38, 139, 87, 119, 199, 174, 166, 173, 75, 196, 174, 162, 8, 161, 116, 129, 71, 32, 240, 74, 180, 234, 171, 115, 15, 226, 157, 102, 155, 242, 228, 114, 17, 218, 204, 30, 159, 16, 54, 58, 245, 121, 168, 90, 11, 193, 7, 108, 52, 179, 21, 197, 5, 143, 32, 102, 43, 138, 11, 95, 215, 70, 43, 138, 26, 175, 131, 99, 173, 116, 124, 1, 105, 101, 152, 183, 160, 164, 21, 197, 7, 66, 146, 81, 20, 21, 30, 149, 112, 5, 220, 68, 209, 97, 121, 237, 56, 106, 170, 221, 180, 78, 20, 31, 52, 245, 227, 71, 107, 211, 247, 93, 15, 239, 52, 185, 218, 69, 4, 126, 182, 142, 163, 215, 166, 243, 35, 150, 231, 203, 115, 16, 255, 124, 8, 199, 188, 36, 154, 92, 200, 49, 47, 254, 164, 206, 219, 34, 199, 76, 161, 191, 203, 241, 43, 105, 56, 96, 195, 210, 116, 92, 54, 210, 137, 226, 67, 39, 138, 10, 114, 162, 216, 64, 19, 69, 199, 218, 255, 109, 207, 225, 188, 98, 195, 25, 94, 215, 74, 10, 242, 200, 218, 127, 15, 201, 245, 187, 254, 183, 199, 41, 73, 236, 146, 200, 35, 14, 186, 24, 38, 41, 139, 19, 63, 183, 139, 96, 79, 91, 157, 87, 124, 168, 252, 218, 127, 168, 89, 135, 56, 175, 232, 224, 188, 98, 99, 217, 133, 156, 87, 92, 52, 240, 228, 26, 53, 246, 8, 114, 94, 113, 194, 179, 65, 206, 43, 66, 56, 233, 21, 21, 154, 124, 69, 133, 124, 69, 5, 173, 146, 149, 20, 164, 138, 248, 145, 190, 149, 19, 101, 217, 124, 31, 168, 120, 4, 169, 181, 111, 89, 224, 164, 252, 79, 180, 246, 31, 3, 139, 80, 98, 97, 80, 131, 43, 58, 152, 237, 187, 34, 131, 175, 220, 111, 234, 174, 232, 120, 93, 76, 234, 66, 219, 174, 8, 105, 157, 104, 187, 226, 194, 21, 27, 79, 235, 155, 224, 138, 139, 133, 113, 56, 72, 182, 237, 220, 185, 34, 195, 162, 176, 115, 197, 5, 195, 108, 115, 69, 6, 87, 148, 96, 174, 216, 96, 174, 168, 64, 85, 128, 225, 164, 79, 202, 132, 175, 253, 215, 192, 193, 63, 95, 29, 39, 103, 239, 129, 39, 86, 72, 215, 107, 109, 78, 222, 170, 218, 67, 74, 181, 161, 111, 172, 208, 99, 180, 216, 19, 225, 94, 225, 85, 20, 137, 135, 217, 215, 55, 81, 234, 175, 61, 78, 219, 158, 63, 42, 65, 223, 236, 168, 0, 137, 149, 79, 84, 44, 135, 88, 241, 211, 217, 203, 46, 212, 180, 125, 215, 119, 64, 153, 76, 239, 250, 18, 244, 151, 78, 22, 48, 144, 36, 117, 210, 90, 234, 252, 155, 189, 117, 97, 202, 80, 179, 15, 192, 35, 157, 141, 253, 53, 242, 72, 203, 228, 11, 120, 164, 210, 11, 244, 42, 215, 245, 58, 162, 189, 111, 66, 131, 39, 87, 147, 77, 58, 170, 60, 229, 160, 242, 148, 182, 78, 246, 179, 185, 132, 217, 121, 160, 111, 162, 82, 219, 121, 43, 163, 237, 10, 80, 177, 108, 223, 113, 235, 164, 160, 103, 53, 174, 188, 166, 138, 155, 210, 138, 253, 109, 233, 237, 33, 110, 254, 218, 73, 29, 113, 115, 224, 142, 121, 33, 110, 218, 118, 181, 69, 220, 30, 168, 116, 211, 28, 120, 86, 99, 196, 13, 165, 147, 152, 165, 147, 152, 193, 239, 122, 32, 128, 32, 81, 197, 35, 12, 82, 99, 143, 52, 109, 93, 35, 174, 17, 9, 9, 44, 35, 190, 60, 231, 183, 97, 32, 61, 250, 182, 203, 129, 79, 6, 18, 184, 250, 2, 117, 82, 54, 141, 86, 248, 85, 185, 39, 117, 173, 255, 186, 180, 92, 34, 42, 203, 240, 191, 212, 30, 211, 185, 94, 211, 18, 45, 203, 182, 134, 137, 138, 98, 13, 15, 16, 64, 21, 183, 119, 141, 48, 96, 0, 207, 93, 137, 186, 245, 159, 165, 154, 110, 51, 79, 39, 99, 207, 151, 92, 191, 13, 106, 253, 244, 234, 208, 148, 206, 17, 87, 184, 226, 152, 87, 211, 184, 223, 29, 56, 191, 148, 4, 124, 74, 237, 6, 42, 30, 65, 11, 48, 88, 166, 190, 128, 115, 217, 224, 83, 106, 11, 128, 1, 179, 43, 241, 196, 87, 180, 81, 120, 100, 97, 36, 154, 70, 35, 22, 32, 0, 245, 92, 208, 210, 150, 222, 68, 15, 60, 17, 66, 180, 87, 0, 93, 102, 149, 182, 119, 128, 182, 72, 221, 243, 12, 116, 170, 150, 239, 11, 216, 59, 200, 241, 93, 203, 115, 15, 218, 174, 136, 119, 125, 6, 94, 75, 134, 212, 129, 149, 173, 245, 43, 233, 236, 184, 29, 74, 150, 116, 0, 11, 84, 203, 94, 36, 154, 221, 53, 165, 68, 137, 149, 43, 46, 80, 199, 201, 21, 25, 30, 64, 149, 252, 246, 248, 0, 210, 246, 43, 67, 174, 40, 128, 103, 201, 181, 146, 130, 34, 154, 54, 170, 56, 185, 98, 35, 159, 76, 174, 200, 160, 138, 211, 182, 231, 224, 40, 42, 250, 185, 32, 139, 189, 243, 248, 228, 6, 169, 107, 114, 187, 51, 33, 124, 112, 210, 39, 91, 15, 85, 185, 50, 185, 34, 35, 130, 4, 228, 204, 147, 2, 137, 96, 2, 228, 220, 158, 183, 70, 48, 65, 83, 199, 18, 175, 77, 87, 4, 19, 36, 231, 116, 69, 48, 129, 187, 101, 12, 34, 152, 128, 117, 78, 176, 206, 8, 18, 80, 229, 181, 93, 16, 17, 76, 128, 148, 47, 170, 205, 72, 68, 48, 1, 235, 164, 136, 96, 2, 212, 150, 210, 169, 34, 34, 152, 128, 117, 162, 5, 106, 237, 91, 92, 113, 225, 190, 120, 97, 143, 131, 173, 227, 104, 2, 87, 100, 188, 58, 154, 128, 98, 2, 87, 124, 76, 224, 104, 2, 87, 92, 160, 9, 92, 17, 130, 38, 112, 197, 6, 182, 142, 35, 9, 92, 145, 225, 107, 89, 182, 72, 2, 87, 124, 240, 21, 69, 18, 184, 4, 87, 100, 120, 58, 39, 200, 21, 23, 58, 217, 95, 182, 237, 16, 191, 179, 117, 188, 181, 162, 11, 185, 226, 131, 227, 218, 12, 114, 69, 198, 179, 180, 194, 11, 82, 236, 188, 50, 87, 124, 224, 179, 209, 110, 154, 68, 174, 40, 225, 221, 138, 10, 46, 73, 249, 254, 144, 164, 124, 151, 200, 213, 58, 225, 6, 62, 105, 4, 33, 142, 87, 183, 34, 67, 183, 162, 2, 151, 12, 233, 202, 201, 190, 9, 138, 18, 141, 155, 116, 167, 184, 240, 136, 179, 226, 66, 171, 36, 173, 107, 169, 60, 27, 43, 18, 160, 177, 71, 16, 191, 131, 247, 195, 4, 16, 160, 6, 202, 158, 138, 166, 200, 192, 76, 219, 73, 83, 92, 60, 204, 78, 154, 78, 154, 226, 130, 105, 156, 38, 77, 113, 161, 118, 229, 162, 105, 219, 63, 105, 138, 141, 73, 83, 116, 108, 66, 147, 166, 200, 240, 48, 203, 94, 83, 92, 176, 215, 20, 21, 144, 241, 100, 119, 34, 68, 155, 223, 155, 226, 162, 25, 30, 129, 160, 189, 111, 66, 83, 116, 232, 211, 55, 161, 41, 46, 92, 178, 166, 184, 160, 188, 249, 215, 119, 130, 52, 181, 116, 120, 33, 64, 248, 218, 127, 15, 100, 112, 126, 41, 200, 85, 211, 70, 45, 87, 53, 197, 134, 111, 170, 154, 34, 3, 195, 72, 53, 197, 134, 254, 79, 164, 154, 162, 67, 43, 78, 77, 247, 185, 209, 54, 161, 174, 45, 93, 70, 34, 26, 133, 21, 106, 218, 42, 78, 77, 177, 33, 53, 197, 134, 90, 32, 3, 115, 45, 162, 87, 161, 198, 243, 142, 41, 46, 104, 115, 66, 144, 111, 117, 79, 10, 59, 166, 184, 208, 138, 245, 116, 28, 83, 108, 52, 109, 153, 58, 255, 208, 58, 105, 117, 135, 136, 198, 251, 204, 20, 23, 239, 187, 144, 63, 180, 49, 99, 217, 149, 24, 42, 218, 104, 59, 168, 231, 210, 216, 8, 51, 230, 240, 8, 99, 35, 204, 20, 33, 30, 134, 234, 164, 232, 59, 106, 253, 214, 247, 95, 166, 184, 240, 203, 20, 27, 158, 78, 247, 101, 138, 140, 165, 254, 184, 51, 161, 92, 11, 83, 116, 208, 197, 14, 107, 166, 72, 18, 179, 8, 151, 76, 146, 74, 241, 126, 158, 206, 235, 59, 122, 215, 247, 76, 218, 11, 50, 130, 154, 137, 55, 232, 122, 222, 87, 63, 228, 64, 83, 63, 246, 198, 109, 61, 2, 181, 254, 227, 254, 199, 253, 32, 63, 21, 154, 64, 2, 16, 36, 166, 155, 201, 158, 248, 109, 111, 2, 106, 165, 176, 107, 117, 142, 29, 228, 73, 149, 146, 117, 186, 126, 31, 105, 147, 14, 130, 157, 177, 114, 160, 148, 101, 99, 160, 233, 242, 36, 243, 214, 138, 85, 201, 171, 65, 227, 253, 148, 72, 37, 60, 105, 187, 190, 45, 211, 150, 162, 59, 65, 109, 181, 27, 224, 71, 140, 182, 243, 218, 56, 233, 31, 222, 228, 98, 208, 4, 203, 138, 186, 182, 109, 154, 54, 120, 227, 245, 85, 175, 14, 238, 16, 249, 169, 156, 227, 73, 141, 35, 24, 187, 167, 86, 101, 217, 144, 218, 149, 19, 102, 218, 183, 93, 200, 87, 194, 217, 58, 238, 240, 219, 222, 4, 180, 43, 61, 173, 237, 208, 174, 228, 128, 123, 122, 103, 135, 118, 37, 231, 211, 81, 236, 242, 87, 119, 182, 142, 163, 93, 73, 155, 236, 101, 104, 33, 118, 165, 2, 80, 120, 49, 146, 102, 10, 146, 224, 15, 212, 218, 183, 60, 188, 32, 26, 208, 6, 169, 226, 137, 72, 66, 171, 214, 62, 7, 252, 1, 180, 12, 154, 116, 232, 113, 144, 214, 61, 87, 106, 32, 128, 135, 180, 158, 11, 5, 255, 139, 104, 118, 129, 75, 36, 158, 180, 69, 175, 146, 148, 189, 160, 214, 133, 41, 42, 64, 2, 204, 63, 136, 75, 47, 65, 145, 108, 39, 144, 71, 28, 154, 241, 33, 215, 159, 165, 200, 192, 150, 162, 196, 187, 62, 98, 75, 25, 60, 59, 136, 45, 197, 5, 91, 138, 142, 180, 207, 208, 138, 117, 183, 107, 41, 54, 60, 34, 89, 138, 11, 44, 19, 98, 150, 226, 66, 181, 255, 161, 244, 247, 165, 222, 132, 158, 206, 2, 236, 155, 40, 69, 197, 122, 3, 7, 127, 203, 65, 92, 157, 244, 201, 30, 28, 184, 231, 74, 8, 27, 90, 91, 91, 231, 232, 91, 54, 186, 20, 31, 40, 19, 250, 249, 142, 40, 172, 218, 82, 216, 91, 254, 142, 208, 138, 237, 124, 110, 19, 85, 15, 75, 83, 74, 228, 13, 90, 238, 162, 170, 49, 99, 156, 208, 3, 39, 189, 50, 14, 17, 235, 209, 186, 22, 3, 175, 41, 67, 11, 26, 247, 39, 93, 138, 12, 199, 158, 122, 168, 226, 6, 193, 92, 34, 108, 80, 225, 133, 37, 18, 197, 134, 86, 149, 236, 248, 182, 11, 121, 68, 145, 81, 209, 70, 27, 169, 122, 43, 181, 69, 30, 81, 140, 240, 136, 162, 130, 103, 133, 84, 190, 171, 165, 17, 70, 181, 157, 172, 226, 132, 4, 10, 64, 0, 129, 91, 69, 136, 86, 39, 125, 82, 80, 211, 40, 106, 26, 69, 198, 55, 164, 253, 124, 119, 93, 79, 53, 138, 144, 166, 173, 243, 233, 26, 127, 103, 131, 36, 49, 107, 254, 124, 110, 135, 166, 209, 166, 81, 124, 208, 102, 60, 54, 161, 166, 81, 100, 104, 187, 160, 166, 81, 92, 124, 227, 102, 20, 25, 154, 63, 41, 195, 40, 50, 26, 94, 72, 21, 25, 222, 123, 25, 164, 138, 140, 214, 253, 215, 118, 136, 31, 57, 64, 136, 55, 222, 95, 165, 200, 104, 218, 42, 197, 199, 251, 46, 244, 164, 166, 41, 35, 42, 17, 63, 114, 109, 148, 98, 131, 86, 39, 181, 151, 11, 105, 163, 20, 27, 116, 210, 47, 69, 80, 138, 12, 157, 244, 75, 138, 12, 174, 75, 146, 148, 157, 164, 200, 96, 6, 41, 46, 218, 226, 17, 148, 146, 34, 131, 105, 139, 226, 99, 177, 69, 209, 177, 216, 162, 168, 240, 84, 164, 226, 67, 21, 123, 60, 245, 29, 146, 148, 239, 46, 217, 35, 30, 79, 117, 142, 214, 199, 83, 177, 193, 121, 181, 148, 150, 235, 249, 158, 138, 14, 238, 9, 121, 211, 214, 83, 241, 241, 77, 27, 167, 162, 195, 191, 212, 169, 200, 208, 78, 74, 197, 5, 119, 220, 14, 57, 41, 21, 29, 234, 220, 168, 240, 178, 152, 31, 226, 157, 29, 137, 149, 137, 23, 90, 20, 55, 80, 247, 148, 42, 148, 150, 101, 123, 20, 58, 232, 239, 202, 246, 40, 100, 180, 50, 182, 40, 39, 10, 27, 109, 149, 74, 218, 174, 7, 71, 30, 121, 127, 10, 29, 188, 209, 120, 63, 251, 41, 100, 180, 74, 146, 58, 105, 1, 15, 179, 18, 34, 52, 90, 25, 168, 162, 203, 61, 133, 20, 238, 41, 84, 32, 73, 79, 161, 130, 186, 231, 21, 46, 32, 127, 133, 13, 175, 174, 80, 65, 33, 67, 27, 87, 56, 110, 133, 12, 143, 64, 192, 134, 187, 174, 103, 182, 21, 54, 144, 174, 181, 148, 108, 133, 14, 38, 142, 40, 217, 10, 27, 180, 105, 217, 10, 25, 90, 37, 41, 251, 81, 147, 173, 16, 210, 240, 98, 120, 228, 193, 35, 16, 90, 29, 200, 89, 3, 182, 139, 189, 131, 190, 217, 85, 148, 194, 35, 16, 76, 182, 194, 6, 37, 129, 83, 182, 194, 5, 83, 78, 161, 194, 51, 235, 120, 195, 63, 223, 145, 74, 94, 207, 220, 72, 85, 118, 211, 40, 172, 208, 225, 201, 238, 244, 223, 5, 233, 90, 30, 43, 124, 232, 254, 243, 239, 114, 254, 172, 240, 241, 219, 60, 43, 132, 40, 147, 254, 120, 80, 45, 93, 69, 27, 118, 37, 228, 64, 6, 159, 128, 158, 21, 50, 232, 90, 242, 31, 99, 139, 28, 183, 132, 227, 118, 254, 157, 174, 209, 216, 35, 172, 144, 241, 172, 80, 129, 50, 78, 75, 41, 104, 201, 197, 188, 48, 43, 140, 104, 253, 77, 10, 99, 165, 82, 155, 177, 66, 198, 195, 108, 63, 199, 88, 97, 131, 219, 50, 86, 200, 208, 140, 157, 166, 138, 50, 86, 8, 81, 247, 60, 99, 133, 14, 18, 207, 127, 160, 131, 4, 140, 21, 42, 68, 192, 88, 161, 130, 175, 126, 136, 177, 66, 134, 54, 201, 88, 33, 228, 209, 90, 177, 43, 183, 213, 17, 99, 133, 14, 218, 114, 185, 198, 178, 139, 177, 194, 7, 247, 5, 99, 133, 13, 201, 249, 31, 68, 107, 118, 37, 98, 172, 176, 161, 254, 150, 21, 50, 172, 203, 134, 21, 50, 248, 218, 127, 14, 109, 78, 168, 34, 177, 194, 70, 69, 98, 133, 10, 93, 73, 172, 176, 161, 146, 88, 161, 66, 107, 214, 21, 181, 102, 253, 37, 86, 232, 208, 120, 63, 27, 190, 41, 123, 137, 21, 62, 112, 117, 207, 39, 86, 200, 144, 52, 51, 232, 233, 108, 118, 76, 31, 105, 219, 254, 196, 10, 27, 36, 254, 196, 10, 25, 118, 37, 244, 48, 251, 240, 8, 4, 39, 117, 170, 39, 86, 8, 121, 199, 137, 21, 50, 168, 226, 6, 83, 197, 12, 178, 150, 145, 80, 103, 149, 36, 86, 232, 160, 144, 241, 149, 71, 222, 20, 46, 94, 37, 137, 29, 121, 83, 232, 112, 210, 43, 163, 237, 144, 55, 133, 20, 221, 58, 97, 228, 77, 33, 3, 213, 84, 146, 114, 65, 251, 235, 49, 213, 20, 50, 20, 83, 168, 96, 178, 20, 42, 104, 109, 205, 58, 98, 43, 81, 248, 152, 68, 20, 42, 72, 237, 113, 165, 77, 235, 100, 21, 50, 214, 37, 170, 108, 127, 50, 180, 10, 39, 124, 109, 50, 69, 186, 150, 68, 7, 249, 186, 32, 143, 64, 120, 88, 151, 72, 53, 39, 95, 133, 17, 155, 78, 66, 207, 247, 42, 116, 60, 15, 52, 35, 131, 31, 245, 42, 108, 232, 85, 248, 224, 71, 159, 75, 211, 86, 161, 132, 71, 32, 112, 107, 91, 133, 141, 119, 109, 86, 97, 67, 106, 143, 89, 245, 26, 203, 190, 46, 134, 89, 133, 139, 150, 108, 45, 117, 144, 46, 195, 172, 66, 135, 181, 36, 195, 172, 194, 134, 197, 222, 137, 192, 48, 171, 176, 225, 164, 79, 135, 24, 102, 21, 66, 48, 204, 42, 84, 104, 169, 236, 241, 163, 86, 161, 99, 213, 42, 71, 195, 43, 87, 225, 67, 211, 246, 87, 41, 250, 164, 189, 10, 61, 240, 8, 98, 217, 77, 174, 66, 135, 63, 150, 182, 150, 78, 66, 40, 225, 146, 33, 7, 119, 228, 42, 108, 172, 194, 0, 176, 236, 70, 225, 66, 50, 10, 21, 232, 86, 84, 225, 2, 50, 60, 169, 115, 136, 71, 144, 166, 157, 168, 66, 137, 70, 97, 69, 97, 103, 194, 211, 254, 130, 181, 246, 77, 64, 202, 180, 255, 191, 101, 131, 38, 170, 16, 66, 157, 148, 201, 35, 90, 58, 122, 124, 107, 154, 168, 194, 133, 190, 149, 19, 85, 184, 88, 235, 53, 52, 81, 133, 12, 183, 104, 162, 10, 25, 42, 252, 170, 112, 129, 98, 2, 87, 164, 147, 109, 112, 210, 227, 159, 248, 245, 240, 205, 110, 65, 90, 118, 61, 154, 182, 173, 85, 242, 13, 165, 107, 229, 123, 91, 136, 231, 26, 135, 174, 101, 30, 20, 94, 76, 235, 132, 27, 36, 125, 85, 232, 176, 54, 95, 21, 58, 88, 242, 85, 225, 66, 191, 171, 114, 229, 198, 7, 30, 129, 224, 170, 144, 65, 21, 54, 86, 190, 9, 170, 144, 225, 155, 29, 185, 115, 167, 10, 29, 141, 247, 65, 209, 157, 188, 239, 66, 58, 217, 207, 54, 0, 110, 135, 40, 148, 126, 38, 109, 167, 10, 29, 170, 253, 15, 142, 203, 110, 246, 181, 196, 131, 16, 202, 169, 114, 170, 144, 225, 84, 97, 163, 105, 139, 158, 95, 111, 170, 80, 226, 97, 86, 21, 55, 85, 216, 208, 135, 95, 182, 75, 21, 58, 120, 67, 63, 27, 93, 170, 144, 161, 159, 235, 33, 197, 174, 132, 150, 42, 92, 44, 85, 168, 96, 225, 213, 168, 66, 134, 230, 207, 214, 166, 141, 42, 124, 60, 70, 21, 42, 56, 163, 234, 115, 49, 170, 208, 241, 48, 140, 42, 92, 104, 20, 86, 74, 187, 85, 155, 193, 143, 90, 25, 85, 8, 241, 77, 155, 68, 173, 254, 212, 190, 183, 216, 181, 125, 129, 39, 41, 250, 217, 60, 168, 69, 40, 161, 77, 43, 107, 56, 158, 234, 211, 246, 71, 124, 179, 183, 250, 179, 178, 37, 82, 199, 201, 39, 252, 81, 9, 82, 150, 77, 27, 226, 143, 74, 144, 75, 214, 224, 146, 249, 46, 62, 109, 191, 35, 137, 9, 92, 145, 106, 51, 170, 233, 87, 30, 173, 170, 25, 61, 45, 81, 107, 0, 177, 242, 57, 214, 4, 101, 48, 204, 42, 228, 84, 21, 54, 220, 86, 56, 184, 173, 104, 175, 162, 129, 136, 80, 177, 68, 116, 190, 131, 42, 108, 108, 63, 10, 134, 217, 127, 168, 226, 164, 10, 7, 224, 17, 8, 138, 142, 213, 64, 144, 36, 85, 184, 120, 167, 217, 133, 32, 60, 2, 97, 37, 219, 164, 10, 29, 254, 168, 4, 61, 168, 82, 133, 139, 134, 23, 195, 31, 175, 183, 36, 131, 28, 154, 183, 168, 194, 5, 132, 72, 237, 241, 84, 133, 11, 151, 170, 80, 65, 210, 118, 169, 84, 133, 140, 111, 170, 218, 34, 85, 216, 104, 222, 162, 80, 65, 105, 167, 227, 17, 141, 107, 88, 19, 252, 97, 72, 23, 133, 16, 190, 40, 108, 40, 173, 120, 82, 33, 67, 250, 7, 225, 145, 39, 21, 46, 248, 218, 127, 74, 251, 33, 103, 137, 63, 21, 58, 224, 17, 253, 84, 200, 224, 17, 8, 250, 169, 28, 202, 246, 27, 20, 110, 12, 127, 82, 237, 98, 71, 189, 211, 121, 99, 34, 148, 182, 190, 167, 62, 212, 181, 173, 147, 32, 74, 125, 39, 218, 104, 87, 54, 77, 23, 138, 180, 175, 204, 249, 237, 7, 253, 84, 216, 176, 253, 242, 83, 225, 34, 2, 95, 208, 39, 93, 234, 11, 90, 85, 179, 54, 133, 251, 129, 123, 220, 13, 133, 91, 53, 16, 129, 47, 200, 1, 157, 236, 3, 173, 42, 213, 81, 90, 89, 230, 85, 196, 171, 8, 22, 240, 5, 61, 240, 198, 255, 143, 65, 4, 18, 190, 160, 215, 6, 33, 2, 95, 16, 3, 107, 45, 195, 255, 18, 53, 120, 109, 16, 28, 92, 178, 252, 84, 200, 240, 180, 253, 202, 80, 195, 202, 35, 8, 35, 124, 245, 107, 104, 243, 187, 99, 93, 162, 252, 84, 248, 176, 175, 129, 240, 169, 112, 241, 60, 21, 42, 120, 196, 241, 84, 200, 240, 48, 235, 120, 42, 92, 104, 197, 182, 58, 158, 10, 27, 239, 137, 28, 79, 133, 140, 78, 133, 13, 111, 90, 210, 82, 33, 163, 181, 105, 169, 144, 161, 173, 190, 227, 77, 39, 186, 208, 203, 86, 150, 10, 39, 60, 178, 144, 160, 16, 67, 187, 73, 133, 11, 46, 25, 106, 82, 225, 34, 130, 9, 20, 42, 88, 110, 220, 60, 65, 18, 20, 58, 28, 67, 51, 28, 148, 237, 187, 116, 210, 62, 146, 208, 149, 201, 145, 4, 133, 140, 71, 37, 45, 221, 245, 77, 112, 52, 218, 72, 130, 194, 134, 134, 62, 125, 19, 84, 251, 85, 190, 9, 72, 130, 194, 71, 227, 230, 89, 236, 144, 4, 133, 14, 231, 211, 125, 46, 118, 18, 148, 163, 237, 82, 81, 7, 73, 80, 216, 248, 100, 13, 77, 205, 78, 122, 101, 144, 4, 133, 12, 245, 84, 36, 65, 225, 98, 226, 206, 247, 201, 246, 114, 169, 66, 18, 20, 62, 250, 241, 55, 135, 55, 222, 79, 26, 225, 118, 72, 127, 157, 29, 115, 208, 188, 24, 73, 80, 216, 160, 154, 157, 132, 36, 40, 100, 248, 86, 18, 73, 80, 184, 208, 181, 36, 170, 72, 248, 80, 145, 240, 129, 186, 76, 206, 255, 84, 154, 124, 136, 36, 229, 242, 126, 73, 219, 215, 68, 243, 195, 146, 239, 14, 124, 127, 189, 6, 78, 226, 6, 250, 165, 243, 218, 100, 17, 43, 19, 47, 7, 222, 53, 242, 236, 184, 203, 230, 72, 155, 100, 203, 192, 105, 55, 74, 37, 222, 147, 65, 107, 147, 137, 208, 181, 140, 74, 94, 141, 66, 225, 224, 16, 90, 121, 252, 170, 151, 168, 1, 23, 186, 210, 147, 112, 1, 210, 200, 65, 125, 41, 9, 23, 218, 46, 200, 45, 74, 73, 216, 200, 78, 72, 43, 182, 161, 233, 228, 155, 78, 32, 154, 90, 190, 183, 69, 140, 223, 95, 194, 5, 30, 65, 20, 128, 64, 2, 9, 34, 232, 164, 95, 194, 6, 165, 75, 181, 116, 218, 67, 207, 154, 64, 191, 13, 122, 9, 143, 64, 104, 125, 10, 143, 64, 120, 120, 106, 218, 253, 18, 58, 124, 235, 36, 190, 14, 226, 155, 23, 236, 146, 72, 21, 55, 100, 168, 226, 134, 10, 146, 196, 13, 21, 212, 73, 153, 184, 225, 130, 27, 54, 184, 33, 67, 61, 19, 226, 134, 11, 213, 126, 214, 144, 193, 35, 16, 252, 81, 73, 67, 134, 250, 54, 84, 72, 198, 182, 225, 2, 58, 150, 54, 219, 112, 225, 233, 71, 154, 182, 33, 99, 217, 134, 10, 154, 74, 248, 17, 4, 131, 69, 41, 173, 43, 223, 247, 78, 40, 156, 244, 75, 241, 215, 224, 254, 29, 180, 191, 158, 0, 14, 208, 239, 201, 175, 110, 251, 29, 85, 154, 8, 187, 36, 237, 242, 215, 165, 18, 159, 88, 107, 223, 132, 111, 219, 234, 214, 53, 188, 241, 186, 47, 107, 117, 185, 124, 82, 166, 213, 53, 94, 70, 20, 118, 235, 80, 171, 106, 102, 251, 232, 23, 72, 156, 1, 209, 253, 95, 139, 59, 57, 106, 19, 13, 91, 231, 184, 19, 170, 52, 13, 35, 60, 242, 78, 179, 203, 105, 214, 65, 149, 166, 225, 3, 163, 28, 106, 0, 105, 20, 86, 223, 30, 75, 232, 74, 216, 209, 188, 24, 162, 121, 113, 131, 187, 117, 26, 168, 210, 52, 124, 248, 91, 174, 210, 52, 116, 208, 138, 117, 254, 151, 168, 210, 52, 132, 52, 13, 27, 149, 110, 26, 54, 144, 112, 55, 13, 23, 62, 165, 118, 211, 112, 209, 52, 124, 52, 13, 31, 18, 52, 13, 29, 173, 20, 221, 9, 242, 8, 163, 28, 138, 208, 180, 125, 220, 80, 132, 166, 161, 195, 130, 92, 175, 201, 86, 18, 79, 22, 225, 186, 18, 126, 180, 190, 46, 199, 184, 1, 69, 104, 26, 58, 188, 105, 208, 133, 140, 166, 225, 35, 157, 244, 46, 147, 54, 106, 26, 66, 36, 105, 29, 106, 26, 66, 184, 36, 49, 67, 77, 67, 134, 54, 201, 158, 138, 92, 168, 105, 24, 209, 52, 164, 104, 26, 62, 188, 174, 245, 22, 212, 52, 212, 52, 108, 64, 137, 134, 215, 130, 148, 169, 243, 40, 59, 251, 43, 218, 144, 193, 155, 54, 14, 173, 207, 164, 243, 75, 129, 240, 181, 142, 129, 126, 46, 111, 217, 14, 174, 76, 157, 127, 184, 100, 250, 235, 218, 47, 169, 79, 184, 254, 227, 150, 208, 181, 100, 229, 41, 237, 164, 8, 192, 93, 23, 82, 223, 18, 185, 210, 138, 101, 251, 142, 23, 104, 219, 197, 48, 92, 209, 246, 240, 111, 204, 56, 92, 87, 194, 16, 231, 95, 99, 245, 67, 250, 111, 177, 47, 137, 190, 162, 13, 35, 190, 162, 13, 21, 252, 145, 186, 231, 41, 218, 208, 145, 253, 21, 93, 236, 29, 244, 160, 37, 163, 104, 67, 134, 213, 15, 233, 115, 95, 138, 71, 144, 106, 203, 32, 138, 54, 68, 209, 134, 12, 119, 109, 165, 18, 73, 154, 41, 175, 13, 31, 82, 191, 54, 92, 144, 120, 178, 215, 134, 11, 6, 218, 168, 165, 32, 103, 15, 236, 74, 232, 97, 118, 189, 54, 124, 188, 54, 84, 192, 154, 213, 61, 223, 192, 35, 109, 2, 16, 44, 242, 136, 46, 246, 119, 109, 232, 240, 60, 40, 125, 215, 134, 20, 141, 223, 219, 82, 32, 173, 255, 248, 209, 116, 146, 141, 222, 181, 161, 227, 59, 21, 98, 90, 27, 54, 18, 43, 214, 22, 177, 120, 65, 13, 68, 34, 96, 109, 8, 97, 109, 248, 96, 109, 216, 64, 135, 46, 165, 218, 144, 97, 229, 155, 160, 159, 218, 176, 49, 241, 132, 62, 181, 33, 227, 209, 213, 169, 13, 23, 105, 21, 111, 171, 99, 240, 174, 157, 218, 176, 161, 177, 71, 84, 67, 6, 215, 73, 249, 102, 135, 44, 240, 56, 46, 187, 97, 198, 14, 146, 120, 178, 59, 85, 195, 133, 75, 13, 21, 40, 203, 150, 26, 50, 112, 179, 147, 108, 200, 160, 191, 11, 81, 104, 63, 224, 194, 23, 171, 95, 123, 14, 7, 213, 187, 232, 91, 11, 106, 150, 112, 210, 43, 131, 16, 199, 179, 161, 130, 115, 167, 100, 104, 93, 54, 124, 168, 181, 111, 65, 235, 178, 237, 59, 90, 91, 91, 231, 13, 142, 221, 39, 83, 203, 45, 27, 50, 44, 246, 14, 195, 191, 233, 68, 189, 121, 113, 114, 104, 227, 149, 252, 45, 156, 212, 116, 225, 150, 13, 27, 223, 234, 158, 220, 178, 161, 99, 121, 190, 60, 135, 184, 101, 75, 109, 224, 158, 16, 183, 108, 200, 224, 150, 13, 21, 90, 54, 84, 208, 204, 178, 225, 2, 194, 8, 164, 148, 101, 67, 137, 181, 18, 41, 203, 134, 13, 42, 25, 201, 134, 11, 174, 109, 151, 74, 109, 212, 240, 193, 178, 27, 212, 144, 161, 33, 0, 42, 24, 6, 32, 2, 195, 154, 224, 15, 195, 133, 135, 217, 138, 254, 99, 200, 96, 235, 56, 90, 240, 128, 3, 111, 218, 190, 235, 63, 96, 235, 120, 107, 139, 8, 240, 24, 70, 60, 134, 16, 239, 143, 161, 130, 71, 36, 52, 56, 158, 78, 63, 214, 143, 161, 163, 85, 151, 0, 212, 173, 251, 100, 13, 39, 125, 50, 151, 140, 161, 109, 151, 55, 45, 215, 2, 77, 91, 137, 71, 82, 197, 201, 155, 66, 239, 153, 26, 212, 115, 217, 126, 136, 31, 181, 82, 9, 209, 74, 229, 126, 167, 67, 251, 235, 49, 116, 72, 112, 212, 250, 235, 49, 108, 56, 110, 135, 36, 143, 33, 3, 237, 99, 232, 240, 12, 27, 20, 103, 168, 96, 77, 112, 103, 184, 192, 239, 158, 78, 237, 12, 27, 45, 1, 67, 127, 23, 196, 35, 72, 146, 210, 53, 206, 208, 241, 174, 141, 156, 225, 194, 25, 54, 148, 45, 107, 134, 12, 218, 156, 16, 107, 134, 140, 109, 134, 10, 36, 43, 41, 200, 169, 66, 205, 240, 241, 63, 129, 225, 195, 255, 4, 134, 10, 19, 24, 50, 188, 57, 134, 10, 142, 161, 35, 173, 231, 226, 24, 46, 224, 194, 121, 43, 204, 144, 225, 31, 51, 84, 208, 166, 165, 147, 144, 250, 99, 134, 144, 111, 203, 14, 125, 123, 204, 240, 177, 15, 53, 222, 103, 134, 13, 183, 142, 183, 58, 207, 12, 29, 239, 204, 80, 193, 35, 16, 124, 187, 153, 97, 131, 177, 114, 92, 51, 123, 180, 108, 154, 25, 50, 248, 174, 108, 102, 184, 80, 17, 144, 54, 126, 110, 204, 176, 193, 147, 75, 21, 114, 204, 11, 161, 131, 8, 19, 164, 159, 109, 155, 116, 20, 77, 227, 6, 173, 88, 117, 254, 228, 197, 56, 232, 235, 82, 133, 30, 212, 153, 225, 145, 237, 247, 208, 230, 132, 22, 64, 203, 162, 86, 63, 212, 26, 59, 208, 120, 209, 55, 221, 149, 208, 131, 101, 225, 120, 170, 6, 55, 141, 25, 66, 30, 109, 204, 112, 97, 177, 124, 16, 167, 108, 140, 7, 245, 78, 39, 177, 109, 217, 195, 35, 2, 96, 224, 79, 42, 68, 225, 174, 109, 253, 45, 232, 225, 155, 50, 102, 200, 208, 186, 94, 210, 197, 12, 27, 139, 25, 62, 180, 199, 12, 122, 110, 12, 20, 75, 228, 158, 132, 121, 81, 68, 48, 232, 202, 228, 157, 235, 41, 102, 8, 65, 15, 179, 138, 25, 62, 116, 197, 182, 110, 240, 82, 197, 12, 25, 22, 171, 32, 135, 46, 165, 152, 33, 131, 63, 104, 169, 43, 41, 102, 200, 88, 148, 130, 82, 49, 67, 6, 238, 223, 35, 146, 196, 12, 25, 158, 214, 197, 164, 41, 82, 170, 159, 170, 173, 122, 119, 184, 54, 67, 162, 162, 77, 226, 18, 74, 164, 177, 128, 66, 130, 35, 167, 60, 144, 36, 49, 67, 137, 230, 6, 34, 148, 177, 43, 69, 146, 210, 53, 26, 220, 233, 251, 195, 73, 159, 148, 119, 154, 109, 16, 173, 223, 236, 38, 40, 188, 173, 164, 105, 132, 65, 58, 137, 25, 46, 240, 181, 255, 84, 251, 81, 101, 97, 54, 81, 89, 152, 161, 163, 178, 48, 67, 133, 134, 192, 223, 67, 218, 9, 197, 218, 133, 25, 54, 188, 99, 3, 45, 138, 49, 100, 40, 198, 208, 241, 172, 197, 80, 161, 109, 37, 25, 122, 178, 59, 209, 98, 8, 233, 85, 142, 189, 132, 33, 195, 49, 125, 9, 67, 6, 9, 67, 71, 132, 69, 83, 231, 31, 18, 232, 208, 168, 139, 48, 132, 56, 124, 69, 95, 215, 146, 159, 210, 249, 99, 229, 38, 246, 79, 169, 77, 201, 70, 139, 69, 24, 196, 98, 21, 244, 208, 185, 76, 178, 65, 180, 73, 182, 220, 13, 93, 191, 175, 235, 121, 127, 136, 80, 169, 206, 131, 111, 204, 32, 149, 234, 168, 84, 135, 66, 165, 58, 238, 113, 55, 142, 86, 181, 147, 85, 16, 109, 78, 236, 45, 78, 187, 26, 26, 255, 191, 199, 163, 120, 105, 52, 94, 213, 156, 82, 162, 197, 34, 12, 29, 22, 139, 48, 84, 112, 126, 41, 149, 101, 184, 224, 175, 44, 195, 5, 136, 165, 45, 93, 101, 25, 50, 148, 85, 150, 225, 194, 86, 150, 161, 99, 157, 91, 247, 117, 95, 134, 15, 143, 32, 163, 161, 180, 98, 61, 194, 241, 183, 156, 244, 202, 56, 32, 8, 247, 116, 90, 177, 140, 161, 244, 125, 153, 47, 196, 251, 178, 109, 203, 88, 227, 181, 121, 152, 109, 203, 144, 97, 251, 53, 147, 8, 109, 126, 72, 175, 197, 182, 101, 232, 128, 155, 150, 218, 50, 100, 248, 166, 170, 45, 106, 203, 208, 193, 22, 109, 25, 66, 156, 217, 50, 92, 104, 12, 74, 203, 150, 33, 163, 149, 45, 83, 182, 12, 27, 203, 46, 101, 203, 112, 225, 108, 25, 115, 40, 91, 134, 15, 101, 203, 80, 97, 215, 90, 134, 143, 182, 75, 54, 106, 93, 107, 25, 66, 112, 241, 40, 181, 12, 23, 148, 237, 55, 180, 98, 87, 254, 186, 76, 232, 25, 118, 87, 141, 147, 58, 196, 73, 239, 112, 117, 207, 83, 44, 207, 183, 31, 66, 107, 255, 173, 149, 104, 129, 214, 101, 144, 1, 148, 101, 67, 173, 57, 61, 208, 116, 129, 54, 106, 101, 175, 33, 85, 156, 84, 65, 224, 4, 120, 152, 117, 207, 165, 84, 210, 30, 3, 93, 191, 223, 64, 83, 58, 215, 37, 87, 227, 253, 108, 251, 174, 10, 85, 60, 194, 64, 1, 156, 79, 198, 244, 87, 226, 9, 104, 8, 160, 107, 201, 119, 192, 105, 30, 183, 243, 42, 97, 26, 4, 12, 96, 33, 73, 219, 197, 255, 18, 45, 128, 49, 77, 131, 214, 255, 100, 223, 184, 5, 208, 128, 164, 147, 117, 178, 7, 254, 16, 190, 233, 68, 85, 23, 187, 18, 99, 117, 66, 15, 15, 111, 58, 27, 173, 159, 180, 155, 147, 58, 119, 192, 157, 150, 97, 195, 118, 90, 134, 11, 156, 150, 33, 196, 245, 51, 237, 226, 133, 61, 17, 16, 202, 246, 219, 107, 104, 238, 63, 128, 0, 38, 158, 10, 183, 67, 189, 64, 155, 29, 143, 74, 208, 131, 58, 41, 211, 67, 2, 6, 104, 109, 192, 253, 202, 144, 226, 53, 101, 190, 175, 12, 27, 248, 224, 188, 50, 231, 149, 33, 195, 193, 151, 247, 205, 250, 202, 48, 98, 66, 215, 239, 107, 147, 108, 35, 26, 111, 131, 124, 101, 248, 112, 126, 153, 175, 124, 101, 232, 64, 10, 110, 101, 184, 160, 218, 143, 114, 211, 246, 167, 163, 88, 118, 33, 93, 146, 86, 134, 14, 39, 159, 109, 101, 184, 248, 102, 143, 192, 160, 111, 229, 196, 85, 251, 31, 46, 25, 130, 112, 70, 219, 225, 141, 61, 178, 64, 211, 128, 248, 3, 215, 237, 108, 188, 159, 86, 194, 93, 89, 54, 228, 158, 43, 69, 52, 109, 157, 127, 90, 34, 7, 109, 90, 25, 46, 80, 88, 25, 42, 100, 5, 171, 166, 12, 23, 218, 252, 254, 180, 59, 180, 54, 233, 208, 211, 206, 160, 167, 27, 105, 153, 237, 212, 30, 79, 136, 54, 126, 96, 132, 71, 152, 50, 92, 208, 138, 101, 202, 144, 129, 31, 185, 100, 136, 145, 51, 76, 25, 22, 192, 25, 166, 140, 41, 195, 69, 131, 51, 136, 41, 67, 6, 198, 92, 129, 216, 99, 111, 149, 50, 108, 120, 90, 223, 4, 71, 171, 123, 254, 129, 144, 111, 169, 12, 23, 154, 98, 216, 224, 138, 97, 163, 41, 134, 13, 62, 165, 54, 90, 197, 176, 177, 15, 161, 85, 12, 31, 18, 63, 5, 63, 115, 69, 30, 169, 40, 70, 81, 241, 8, 170, 40, 86, 81, 236, 65, 69, 49, 231, 147, 61, 68, 232, 90, 242, 25, 211, 160, 181, 255, 24, 211, 56, 32, 198, 237, 0, 169, 150, 72, 181, 101, 24, 240, 198, 203, 224, 83, 238, 63, 9, 119, 92, 118, 147, 157, 14, 105, 133, 234, 155, 224, 14, 40, 242, 83, 249, 46, 164, 84, 162, 247, 84, 12, 27, 164, 253, 100, 136, 145, 4, 138, 225, 163, 162, 14, 146, 64, 49, 92, 232, 90, 6, 73, 160, 24, 50, 92, 145, 4, 138, 33, 3, 243, 164, 160, 149, 216, 123, 37, 25, 66, 168, 69, 91, 86, 73, 134, 12, 30, 113, 62, 25, 164, 146, 145, 213, 64, 112, 62, 25, 46, 30, 20, 205, 159, 207, 249, 100, 248, 192, 61, 33, 173, 216, 125, 104, 223, 196, 62, 111, 156, 214, 65, 127, 23, 197, 55, 102, 26, 167, 69, 15, 120, 227, 180, 168, 53, 235, 170, 22, 44, 74, 65, 222, 192, 155, 23, 167, 135, 92, 165, 12, 162, 117, 225, 84, 169, 206, 164, 214, 82, 208, 234, 39, 145, 171, 148, 57, 62, 145, 241, 116, 99, 79, 134, 36, 158, 12, 27, 43, 29, 239, 100, 184, 120, 22, 30, 127, 203, 161, 86, 212, 186, 64, 169, 82, 73, 39, 67, 6, 93, 175, 31, 236, 74, 8, 226, 219, 174, 4, 169, 120, 4, 241, 63, 52, 144, 180, 93, 13, 232, 151, 130, 97, 164, 107, 201, 119, 192, 37, 109, 25, 240, 167, 34, 151, 131, 138, 126, 74, 244, 185, 61, 51, 67, 241, 219, 255, 137, 126, 155, 157, 212, 18, 73, 252, 62, 38, 28, 194, 35, 26, 133, 149, 164, 147, 33, 195, 35, 16, 36, 157, 12, 23, 139, 202, 237, 100, 149, 166, 173, 147, 58, 25, 50, 112, 126, 153, 183, 58, 151, 12, 31, 171, 65, 21, 94, 26, 191, 190, 147, 206, 181, 108, 29, 181, 67, 100, 97, 228, 146, 225, 226, 151, 237, 66, 46, 153, 75, 134, 142, 182, 146, 108, 201, 180, 201, 150, 12, 31, 206, 51, 99, 201, 112, 193, 157, 146, 37, 195, 197, 174, 100, 168, 160, 76, 58, 114, 137, 6, 119, 220, 14, 162, 87, 33, 149, 36, 147, 36, 67, 7, 71, 146, 161, 194, 239, 114, 142, 13, 143, 160, 246, 154, 181, 201, 208, 1, 145, 48, 65, 235, 18, 57, 182, 78, 90, 155, 12, 33, 220, 115, 236, 80, 90, 102, 91, 147, 12, 29, 182, 31, 122, 109, 77, 50, 116, 236, 74, 219, 36, 75, 219, 36, 195, 198, 51, 38, 25, 46, 32, 231, 148, 12, 27, 124, 245, 67, 146, 148, 14, 66, 179, 173, 147, 146, 77, 224, 73, 96, 232, 152, 192, 147, 192, 240, 209, 250, 109, 23, 122, 18, 24, 58, 38, 192, 252, 171, 88, 200, 144, 172, 98, 161, 66, 197, 194, 70, 165, 61, 11, 21, 210, 126, 190, 35, 157, 35, 167, 44, 92, 232, 111, 83, 180, 145, 83, 22, 62, 42, 170, 218, 34, 167, 80, 22, 66, 156, 178, 80, 65, 227, 202, 91, 184, 144, 201, 223, 194, 133, 110, 111, 161, 130, 4, 19, 151, 36, 246, 10, 176, 183, 240, 225, 159, 239, 168, 2, 236, 45, 140, 168, 0, 123, 11, 29, 149, 95, 168, 224, 155, 95, 168, 224, 146, 85, 96, 161, 79, 223, 132, 70, 175, 23, 66, 94, 47, 108, 188, 211, 236, 162, 240, 66, 134, 103, 114, 128, 64, 199, 162, 40, 188, 112, 225, 241, 66, 7, 52, 241, 41, 181, 33, 206, 139, 116, 255, 121, 161, 195, 117, 185, 243, 194, 6, 199, 11, 21, 56, 206, 193, 33, 190, 45, 59, 214, 6, 169, 123, 62, 63, 213, 106, 154, 23, 65, 15, 22, 197, 77, 99, 182, 64, 75, 124, 179, 115, 79, 135, 24, 120, 230, 5, 53, 72, 82, 46, 142, 121, 33, 3, 23, 40, 203, 133, 142, 230, 112, 164, 105, 188, 144, 33, 121, 215, 166, 241, 66, 135, 127, 220, 120, 33, 164, 105, 188, 80, 161, 162, 139, 23, 46, 120, 100, 37, 188, 144, 97, 37, 188, 80, 129, 1, 82, 218, 188, 56, 33, 7, 150, 78, 116, 53, 188, 144, 241, 52, 13, 47, 92, 104, 26, 94, 248, 192, 154, 25, 198, 52, 188, 26, 94, 184, 120, 94, 217, 240, 194, 133, 71, 34, 104, 120, 33, 195, 130, 134, 151, 68, 195, 11, 29, 13, 47, 84, 224, 220, 115, 238, 213, 219, 115, 126, 41, 19, 182, 189, 213, 55, 97, 219, 155, 176, 237, 53, 76, 216, 246, 156, 95, 74, 227, 109, 15, 226, 89, 26, 111, 123, 141, 183, 189, 135, 239, 124, 103, 219, 175, 108, 251, 29, 216, 246, 59, 247, 184, 109, 46, 199, 79, 193, 239, 192, 207, 239, 224, 202, 246, 215, 63, 183, 243, 203, 55, 59, 99, 87, 73, 54, 215, 138, 245, 87, 87, 95, 142, 165, 175, 231, 239, 218, 234, 116, 194, 172, 55, 29, 228, 59, 223, 85, 186, 166, 42, 157, 74, 231, 120, 150, 86, 213, 156, 26, 63, 203, 47, 227, 95, 198, 20, 110, 14, 199, 220, 180, 98, 153, 41, 115, 120, 150, 74, 178, 74, 50, 135, 75, 6, 225, 143, 74, 92, 178, 247, 94, 166, 149, 194, 43, 66, 61, 83, 43, 133, 151, 231, 122, 84, 242, 120, 150, 71, 37, 234, 153, 150, 92, 84, 2, 209, 222, 195, 90, 175, 173, 109, 16, 39, 125, 178, 166, 233, 242, 8, 253, 109, 203, 248, 82, 36, 86, 190, 9, 207, 59, 166, 238, 160, 159, 202, 221, 215, 37, 83, 9, 79, 218, 66, 124, 235, 164, 173, 131, 191, 74, 117, 30, 109, 61, 29, 79, 199, 209, 244, 63, 23, 227, 240, 158, 75, 181, 101, 84, 162, 218, 50, 14, 204, 67, 39, 234, 42, 218, 104, 55, 56, 191, 20, 87, 77, 157, 95, 202, 146, 154, 122, 191, 69, 213, 195, 211, 253, 18, 167, 7, 87, 207, 180, 148, 101, 130, 0, 161, 218, 46, 16, 62, 33, 56, 191, 20, 231, 151, 210, 246, 233, 116, 56, 56, 159, 142, 255, 53, 237, 106, 240, 71, 37, 108, 29, 87, 109, 151, 87, 103, 86, 237, 53, 240, 86, 181, 216, 209, 201, 126, 54, 109, 136, 39, 187, 83, 61, 117, 105, 235, 231, 98, 215, 250, 109, 181, 23, 60, 217, 157, 175, 77, 167, 147, 58, 157, 180, 216, 59, 175, 222, 170, 218, 99, 199, 184, 25, 56, 41, 19, 133, 36, 229, 178, 86, 38, 213, 214, 245, 173, 156, 72, 76, 216, 246, 92, 41, 156, 244, 201, 86, 190, 9, 234, 19, 175, 77, 243, 131, 122, 46, 21, 85, 109, 85, 91, 70, 61, 23, 136, 9, 39, 165, 62, 142, 211, 147, 221, 89, 1, 8, 17, 15, 181, 174, 168, 225, 120, 42, 94, 200, 208, 146, 196, 75, 146, 120, 33, 67, 146, 120, 161, 194, 63, 154, 182, 21, 27, 161, 77, 54, 51, 143, 141, 48, 83, 164, 139, 82, 32, 150, 251, 67, 35, 113, 104, 101, 226, 118, 79, 106, 88, 153, 120, 33, 196, 35, 12, 238, 9, 130, 183, 122, 4, 66, 163, 181, 181, 181, 215, 13, 206, 160, 86, 199, 83, 37, 47, 92, 248, 131, 174, 117, 120, 64, 92, 226, 249, 16, 205, 50, 17, 20, 13, 147, 144, 74, 94, 200, 88, 20, 91, 232, 240, 166, 173, 106, 187, 32, 54, 89, 11, 27, 84, 242, 210, 214, 201, 46, 116, 80, 252, 239, 194, 134, 86, 73, 90, 167, 191, 11, 29, 173, 191, 11, 31, 187, 144, 177, 80, 129, 126, 42, 247, 90, 91, 85, 211, 70, 223, 116, 173, 47, 248, 231, 218, 162, 71, 47, 60, 204, 54, 117, 34, 16, 222, 119, 225, 194, 125, 23, 66, 48, 253, 69, 239, 106, 223, 132, 93, 248, 96, 166, 45, 98, 205, 204, 231, 114, 168, 242, 218, 46, 156, 80, 218, 228, 59, 250, 246, 48, 43, 105, 187, 208, 129, 36, 109, 23, 70, 248, 251, 190, 166, 237, 66, 137, 138, 5, 73, 106, 47, 205, 159, 116, 130, 58, 181, 237, 66, 10, 109, 219, 118, 53, 246, 22, 39, 8, 109, 187, 208, 179, 32, 109, 187, 16, 210, 186, 104, 148, 116, 254, 248, 69, 191, 108, 23, 50, 214, 46, 108, 168, 125, 15, 173, 93, 200, 216, 215, 160, 181, 11, 23, 18, 110, 29, 111, 180, 54, 13, 47, 164, 254, 216, 81, 127, 236, 56, 158, 214, 181, 178, 129, 180, 70, 68, 168, 240, 210, 120, 24, 122, 167, 217, 133, 16, 238, 61, 179, 11, 25, 24, 134, 159, 217, 133, 11, 221, 133, 10, 24, 168, 55, 77, 187, 240, 33, 66, 195, 35, 139, 85, 150, 93, 200, 112, 249, 203, 46, 100, 112, 9, 246, 86, 177, 47, 187, 176, 49, 193, 45, 187, 26, 120, 4, 97, 68, 3, 115, 109, 217, 133, 144, 101, 23, 54, 212, 113, 114, 180, 50, 109, 69, 23, 54, 180, 46, 116, 84, 116, 161, 130, 54, 209, 133, 10, 232, 87, 41, 122, 208, 86, 223, 241, 246, 116, 54, 70, 115, 111, 209, 40, 172, 36, 220, 225, 157, 37, 170, 142, 118, 112, 217, 20, 212, 120, 223, 113, 4, 83, 214, 168, 44, 243, 240, 153, 218, 130, 164, 138, 19, 122, 44, 157, 232, 194, 133, 5, 12, 36, 216, 215, 212, 49, 68, 23, 62, 220, 117, 161, 66, 182, 214, 133, 11, 237, 165, 147, 180, 157, 46, 116, 168, 116, 232, 25, 93, 200, 144, 168, 46, 84, 104, 125, 127, 43, 181, 74, 58, 217, 130, 111, 249, 143, 65, 104, 125, 114, 169, 237, 6, 194, 3, 172, 77, 4, 37, 91, 33, 132, 168, 212, 133, 10, 30, 113, 169, 22, 50, 184, 84, 43, 45, 116, 88, 207, 181, 37, 38, 156, 22, 58, 212, 166, 133, 10, 174, 21, 235, 13, 119, 109, 30, 129, 176, 88, 57, 153, 52, 125, 86, 104, 193, 4, 117, 70, 69, 46, 116, 60, 21, 185, 80, 161, 129, 198, 140, 73, 148, 163, 200, 2, 207, 146, 116, 42, 116, 160, 21, 219, 246, 115, 33, 163, 245, 115, 225, 66, 123, 205, 208, 182, 11, 98, 173, 76, 232, 61, 23, 58, 112, 104, 242, 151, 231, 8, 29, 120, 211, 114, 225, 130, 51, 140, 134, 23, 58, 30, 9, 66, 30, 9, 6, 96, 35, 204, 184, 159, 4, 25, 173, 235, 73, 112, 65, 159, 4, 21, 184, 190, 182, 214, 229, 73, 48, 162, 242, 18, 108, 168, 125, 46, 193, 5, 119, 9, 42, 104, 171, 239, 94, 75, 144, 145, 147, 198, 18, 92, 104, 217, 88, 130, 11, 239, 219, 188, 88, 130, 12, 207, 149, 44, 65, 134, 207, 118, 240, 230, 132, 34, 36, 75, 176, 241, 112, 138, 238, 196, 73, 153, 16, 196, 67, 53, 245, 118, 232, 63, 238, 134, 54, 45, 123, 2, 67, 243, 156, 170, 237, 214, 9, 163, 100, 9, 66, 50, 249, 107, 80, 34, 139, 198, 30, 241, 8, 242, 125, 180, 9, 64, 176, 76, 123, 98, 120, 115, 250, 214, 201, 107, 179, 170, 77, 168, 51, 75, 240, 241, 40, 126, 20, 51, 22, 36, 75, 208, 33, 89, 130, 10, 156, 234, 114, 196, 18, 100, 40, 85, 170, 142, 116, 49, 204, 115, 28, 57, 255, 154, 4, 41, 42, 220, 36, 168, 224, 186, 77, 130, 20, 255, 88, 146, 184, 73, 144, 145, 141, 151, 4, 23, 250, 233, 146, 224, 130, 182, 101, 152, 68, 106, 73, 208, 145, 218, 227, 136, 146, 75, 130, 13, 134, 145, 106, 43, 65, 107, 173, 4, 27, 201, 184, 29, 9, 50, 32, 109, 178, 249, 93, 31, 83, 134, 38, 143, 74, 176, 97, 242, 168, 4, 21, 188, 55, 221, 147, 110, 209, 220, 189, 143, 74, 176, 225, 182, 155, 71, 37, 184, 240, 8, 82, 197, 233, 81, 9, 58, 36, 201, 43, 61, 42, 65, 8, 196, 184, 25, 213, 201, 203, 163, 18, 84, 128, 78, 250, 37, 69, 234, 185, 60, 42, 65, 7, 138, 74, 80, 129, 115, 235, 210, 42, 65, 70, 47, 163, 18, 167, 42, 209, 201, 174, 68, 78, 85, 130, 16, 168, 169, 74, 240, 49, 129, 4, 17, 26, 146, 76, 73, 37, 200, 128, 14, 111, 78, 18, 92, 112, 141, 91, 36, 184, 80, 209, 79, 9, 46, 56, 56, 47, 173, 19, 69, 186, 188, 9, 157, 141, 157, 219, 122, 227, 182, 143, 5, 233, 165, 83, 108, 39, 147, 190, 192, 189, 181, 184, 127, 219, 155, 240, 104, 154, 3, 233, 36, 102, 143, 134, 141, 208, 181, 76, 3, 143, 68, 88, 96, 98, 210, 148, 129, 15, 224, 193, 174, 134, 50, 238, 5, 155, 78, 114, 48, 240, 48, 11, 209, 188, 116, 201, 5, 37, 235, 148, 160, 3, 166, 218, 41, 65, 6, 93, 207, 93, 74, 112, 209, 250, 190, 202, 214, 82, 151, 18, 108, 240, 72, 74, 152, 148, 188, 5, 73, 144, 81, 137, 32, 67, 151, 99, 235, 250, 148, 8, 58, 152, 58, 196, 143, 36, 148, 8, 58, 94, 253, 181, 65, 202, 164, 55, 168, 103, 66, 75, 46, 42, 105, 240, 120, 150, 115, 137, 30, 24, 102, 27, 191, 16, 191, 232, 233, 126, 9, 189, 191, 8, 54, 244, 139, 224, 194, 195, 109, 133, 71, 112, 161, 105, 235, 168, 226, 17, 108, 248, 156, 120, 4, 23, 38, 30, 65, 5, 219, 207, 35, 184, 80, 241, 30, 65, 5, 151, 172, 161, 218, 223, 224, 17, 124, 44, 86, 225, 247, 8, 46, 60, 130, 16, 159, 239, 17, 92, 112, 143, 32, 164, 155, 85, 211, 201, 2, 19, 186, 150, 28, 192, 122, 253, 192, 55, 59, 114, 199, 237, 148, 190, 107, 139, 144, 208, 143, 136, 104, 32, 177, 64, 63, 23, 251, 234, 187, 71, 208, 241, 219, 30, 114, 143, 32, 196, 67, 89, 38, 228, 30, 65, 7, 247, 8, 42, 80, 154, 158, 210, 70, 17, 173, 89, 79, 111, 143, 96, 163, 129, 185, 198, 96, 206, 35, 248, 96, 148, 243, 8, 46, 56, 159, 206, 35, 139, 82, 126, 23, 74, 174, 55, 157, 182, 227, 225, 188, 122, 167, 115, 141, 61, 130, 11, 138, 89, 219, 133, 190, 237, 114, 248, 182, 75, 219, 54, 212, 74, 219, 216, 35, 200, 224, 112, 210, 167, 99, 152, 85, 144, 180, 88, 62, 141, 197, 124, 85, 34, 48, 30, 156, 227, 34, 76, 60, 69, 96, 60, 204, 126, 179, 67, 88, 44, 31, 244, 48, 233, 154, 182, 165, 125, 95, 85, 168, 129, 135, 87, 73, 98, 138, 119, 219, 201, 159, 223, 213, 249, 4, 195, 107, 101, 131, 5, 173, 146, 100, 24, 102, 25, 109, 85, 207, 239, 218, 101, 255, 129, 118, 58, 198, 105, 189, 8, 181, 201, 117, 99, 111, 203, 16, 255, 215, 5, 53, 157, 168, 3, 78, 250, 116, 16, 18, 79, 230, 17, 148, 182, 225, 134, 133, 26, 87, 116, 49, 165, 15, 205, 42, 65, 238, 41, 6, 186, 210, 147, 42, 143, 169, 66, 18, 173, 12, 243, 216, 107, 143, 94, 151, 168, 177, 71, 112, 98, 226, 9, 69, 64, 141, 61, 130, 10, 202, 216, 35, 184, 16, 129, 161, 45, 243, 8, 46, 124, 219, 229, 17, 100, 144, 36, 75, 237, 143, 252, 87, 103, 136, 36, 89, 74, 135, 118, 61, 130, 143, 93, 143, 160, 194, 183, 117, 60, 130, 12, 174, 142, 167, 227, 17, 100, 168, 237, 198, 35, 200, 224, 158, 241, 8, 46, 104, 106, 102, 60, 130, 139, 228, 234, 17, 92, 112, 234, 17, 84, 104, 234, 17, 84, 128, 176, 5, 125, 147, 207, 118, 72, 221, 211, 128, 63, 162, 162, 141, 182, 122, 167, 91, 186, 228, 242, 88, 151, 168, 145, 88, 121, 4, 23, 242, 83, 161, 166, 18, 234, 201, 46, 85, 30, 193, 136, 92, 165, 108, 37, 75, 65, 175, 174, 237, 22, 36, 86, 30, 65, 158, 60, 130, 14, 229, 146, 71, 112, 225, 153, 117, 92, 21, 39, 143, 224, 227, 85, 117, 58, 201, 35, 216, 104, 139, 71, 80, 97, 23, 143, 160, 66, 75, 143, 160, 194, 98, 149, 8, 30, 65, 136, 195, 98, 249, 32, 143, 224, 226, 97, 22, 162, 46, 147, 43, 68, 4, 8, 36, 144, 48, 129, 4, 17, 210, 129, 32, 157, 197, 39, 93, 30, 193, 134, 71, 144, 225, 30, 65, 136, 71, 112, 194, 35, 232, 144, 64, 49, 228, 17, 100, 64, 79, 103, 47, 187, 144, 71, 112, 34, 21, 71, 144, 71, 112, 225, 204, 249, 109, 110, 86, 34, 156, 136, 32, 132, 167, 109, 254, 108, 187, 48, 78, 200, 35, 8, 17, 193, 6, 200, 35, 248, 136, 96, 99, 101, 91, 214, 250, 252, 16, 190, 217, 121, 203, 254, 6, 77, 91, 79, 213, 149, 48, 39, 8, 13, 175, 157, 9, 130, 78, 214, 95, 255, 194, 237, 33, 7, 26, 175, 147, 218, 115, 251, 22, 232, 82, 237, 45, 104, 223, 190, 198, 90, 203, 124, 69, 95, 219, 46, 73, 167, 131, 96, 187, 252, 105, 125, 19, 88, 118, 58, 200, 82, 117, 40, 234, 143, 89, 132, 126, 118, 179, 236, 157, 102, 213, 65, 78, 250, 137, 165, 233, 146, 53, 176, 102, 230, 193, 178, 211, 57, 40, 237, 86, 70, 213, 131, 47, 249, 168, 105, 187, 22, 119, 114, 1, 32, 3, 219, 126, 52, 33, 130, 139, 182, 11, 106, 217, 223, 168, 139, 32, 196, 35, 168, 81, 23, 193, 197, 230, 115, 4, 23, 212, 57, 130, 10, 217, 28, 65, 5, 118, 28, 90, 142, 32, 196, 114, 4, 31, 203, 17, 84, 240, 171, 56, 130, 11, 20, 128, 64, 2, 9, 34, 168, 85, 28, 97, 231, 150, 68, 240, 241, 237, 117, 131, 126, 35, 216, 104, 156, 161, 95, 150, 78, 219, 53, 104, 118, 200, 222, 8, 62, 28, 219, 8, 42, 44, 86, 209, 38, 130, 12, 171, 162, 17, 84, 80, 139, 208, 209, 42, 105, 126, 184, 147, 62, 41, 77, 155, 108, 245, 39, 73, 204, 16, 255, 75, 228, 17, 139, 229, 227, 158, 144, 196, 111, 98, 169, 223, 76, 40, 252, 155, 54, 165, 235, 121, 237, 124, 71, 90, 102, 147, 58, 103, 208, 224, 250, 136, 194, 171, 193, 98, 239, 160, 86, 182, 15, 113, 247, 184, 27, 137, 214, 214, 94, 63, 208, 201, 98, 215, 118, 208, 220, 173, 238, 83, 186, 134, 251, 119, 112, 222, 74, 34, 73, 98, 150, 171, 148, 57, 233, 147, 181, 126, 183, 23, 153, 248, 109, 47, 18, 65, 61, 19, 106, 235, 173, 223, 236, 244, 61, 157, 6, 36, 137, 153, 46, 118, 180, 54, 25, 165, 73, 93, 101, 98, 1, 85, 220, 22, 52, 213, 175, 172, 59, 208, 84, 191, 31, 11, 160, 169, 62, 179, 12, 122, 128, 41, 107, 220, 59, 105, 12, 32, 140, 213, 68, 31, 36, 137, 25, 210, 79, 229, 208, 224, 218, 168, 92, 144, 54, 217, 58, 161, 104, 150, 105, 252, 216, 149, 252, 165, 222, 212, 54, 157, 228, 208, 10, 67, 251, 173, 149, 232, 93, 35, 248, 120, 215, 8, 42, 52, 78, 251, 77, 85, 4, 27, 220, 36, 82, 182, 63, 65, 161, 109, 157, 148, 204, 65, 243, 103, 242, 199, 44, 188, 224, 155, 29, 27, 76, 50, 130, 143, 8, 138, 226, 239, 72, 234, 124, 129, 42, 110, 174, 107, 233, 100, 15, 173, 20, 238, 134, 193, 39, 117, 21, 7, 134, 89, 165, 205, 169, 146, 145, 68, 16, 109, 203, 60, 35, 184, 112, 156, 240, 8, 218, 149, 185, 50, 130, 14, 149, 100, 4, 21, 214, 102, 4, 31, 173, 141, 102, 4, 27, 36, 169, 206, 37, 41, 35, 216, 120, 118, 146, 148, 17, 92, 188, 39, 255, 86, 108, 131, 67, 51, 210, 135, 88, 107, 193, 255, 139, 18, 191, 232, 112, 166, 191, 184, 208, 12, 42, 201, 71, 191, 184, 104, 197, 134, 174, 37, 37, 170, 14, 61, 250, 69, 134, 247, 92, 232, 23, 23, 139, 139, 247, 102, 252, 98, 163, 109, 182, 66, 191, 200, 248, 92, 108, 252, 34, 99, 173, 68, 191, 200, 176, 250, 101, 219, 165, 249, 43, 250, 190, 232, 208, 170, 22, 59, 174, 237, 252, 2, 14, 161, 77, 43, 115, 152, 144, 48, 59, 17, 203, 174, 5, 236, 245, 123, 91, 200, 227, 185, 175, 47, 50, 254, 241, 147, 11, 169, 227, 103, 95, 116, 240, 197, 198, 111, 227, 64, 225, 164, 87, 6, 34, 173, 227, 154, 25, 251, 98, 4, 4, 17, 152, 96, 2, 236, 139, 16, 254, 45, 217, 23, 27, 36, 52, 156, 10, 4, 1, 162, 128, 132, 9, 16, 251, 34, 36, 2, 130, 0, 77, 48, 1, 4, 18, 16, 251, 162, 68, 218, 214, 134, 47, 50, 60, 162, 107, 23, 102, 221, 234, 139, 11, 95, 108, 60, 47, 190, 184, 160, 107, 25, 95, 95, 92, 68, 240, 69, 5, 110, 43, 156, 65, 53, 83, 144, 47, 70, 52, 248, 116, 22, 175, 238, 146, 73, 82, 41, 200, 215, 249, 198, 204, 65, 83, 203, 247, 22, 49, 177, 240, 106, 26, 208, 226, 195, 210, 234, 158, 163, 213, 175, 97, 251, 57, 247, 144, 47, 54, 44, 82, 56, 159, 14, 165, 246, 26, 28, 24, 70, 142, 253, 138, 126, 62, 195, 226, 133, 61, 159, 14, 53, 19, 71, 190, 248, 104, 114, 49, 200, 57, 232, 85, 203, 147, 180, 92, 203, 115, 67, 170, 37, 74, 237, 111, 56, 254, 12, 77, 91, 231, 149, 16, 179, 30, 94, 59, 169, 55, 154, 182, 173, 189, 166, 240, 90, 137, 158, 126, 237, 37, 125, 157, 79, 135, 32, 114, 189, 7, 165, 173, 239, 219, 224, 42, 218, 52, 180, 145, 175, 179, 8, 105, 120, 190, 213, 61, 124, 209, 161, 107, 73, 167, 217, 33, 111, 155, 11, 162, 106, 221, 65, 81, 18, 106, 139, 156, 79, 167, 34, 11, 35, 95, 100, 80, 201, 46, 180, 232, 192, 92, 67, 190, 203, 173, 21, 72, 39, 11, 241, 217, 104, 67, 190, 248, 176, 178, 95, 68, 54, 228, 139, 12, 106, 87, 78, 30, 8, 93, 79, 233, 218, 133, 25, 242, 197, 198, 90, 114, 113, 194, 37, 67, 190, 200, 64, 225, 165, 56, 33, 95, 132, 104, 188, 136, 32, 95, 116, 68, 22, 142, 32, 95, 108, 104, 92, 4, 249, 34, 131, 51, 110, 225, 22, 249, 226, 130, 78, 246, 83, 182, 190, 195, 179, 22, 52, 104, 147, 108, 155, 151, 171, 232, 34, 95, 132, 44, 246, 14, 242, 197, 197, 163, 146, 103, 7, 249, 98, 35, 29, 84, 69, 29, 228, 139, 15, 139, 139, 213, 207, 241, 52, 255, 58, 59, 237, 136, 231, 123, 213, 47, 179, 13, 242, 69, 6, 117, 244, 15, 144, 198, 160, 166, 13, 239, 167, 246, 30, 223, 150, 29, 82, 197, 9, 57, 175, 150, 178, 214, 107, 12, 242, 197, 133, 167, 27, 239, 103, 197, 174, 108, 13, 152, 171, 55, 52, 157, 40, 242, 197, 133, 106, 166, 60, 42, 65, 19, 64, 16, 129, 8, 30, 209, 220, 237, 139, 16, 207, 59, 166, 140, 181, 201, 84, 146, 88, 33, 135, 244, 50, 40, 109, 203, 32, 95, 116, 52, 43, 180, 40, 225, 248, 221, 23, 27, 220, 115, 49, 58, 215, 75, 189, 173, 54, 33, 95, 92, 232, 90, 114, 173, 76, 200, 23, 31, 109, 127, 237, 91, 144, 47, 70, 248, 34, 133, 234, 93, 244, 61, 36, 45, 215, 130, 124, 145, 209, 217, 28, 190, 109, 179, 17, 76, 160, 158, 11, 242, 197, 70, 99, 80, 106, 143, 63, 28, 223, 39, 187, 23, 25, 173, 20, 111, 40, 253, 100, 219, 18, 249, 226, 99, 101, 196, 202, 180, 175, 75, 58, 110, 37, 242, 197, 7, 95, 12, 128, 107, 247, 98, 196, 162, 163, 113, 47, 42, 76, 48, 113, 139, 14, 148, 108, 198, 226, 30, 205, 75, 66, 77, 170, 134, 229, 22, 29, 190, 246, 159, 227, 155, 238, 130, 240, 181, 255, 24, 183, 248, 208, 74, 229, 4, 110, 113, 49, 129, 91, 84, 208, 110, 177, 81, 209, 70, 27, 185, 69, 134, 91, 116, 112, 139, 1, 96, 235, 200, 121, 113, 145, 182, 241, 226, 66, 171, 218, 229, 141, 23, 31, 90, 215, 226, 142, 64, 104, 149, 112, 47, 188, 200, 192, 155, 182, 255, 234, 16, 216, 91, 231, 18, 2, 47, 74, 184, 186, 231, 31, 254, 136, 23, 31, 26, 60, 204, 122, 235, 36, 183, 115, 210, 22, 27, 206, 191, 100, 244, 251, 190, 45, 66, 60, 2, 129, 251, 219, 34, 131, 165, 182, 197, 199, 63, 215, 22, 45, 125, 180, 190, 245, 202, 126, 203, 65, 60, 144, 80, 234, 235, 219, 162, 130, 78, 82, 41, 14, 6, 90, 125, 193, 107, 59, 151, 172, 241, 188, 28, 53, 172, 108, 12, 77, 201, 60, 252, 99, 245, 142, 222, 105, 130, 216, 135, 90, 191, 161, 93, 12, 150, 126, 91, 92, 104, 109, 244, 219, 226, 66, 130, 4, 223, 22, 23, 220, 19, 132, 111, 17, 136, 113, 51, 232, 83, 50, 251, 157, 104, 173, 6, 214, 229, 123, 91, 92, 208, 252, 160, 218, 74, 48, 226, 157, 102, 189, 45, 46, 220, 19, 58, 34, 52, 208, 3, 231, 211, 77, 188, 99, 186, 28, 227, 196, 255, 18, 53, 208, 218, 251, 38, 180, 69, 134, 54, 39, 228, 32, 241, 100, 141, 207, 231, 218, 34, 100, 129, 187, 3, 31, 30, 73, 91, 84, 144, 180, 197, 135, 203, 126, 79, 172, 144, 164, 45, 66, 42, 188, 32, 73, 91, 92, 72, 90, 227, 133, 188, 170, 131, 17, 200, 216, 182, 168, 192, 25, 191, 173, 78, 91, 92, 48, 211, 22, 31, 141, 23, 29, 76, 91, 108, 124, 211, 38, 17, 58, 120, 147, 107, 50, 161, 180, 211, 241, 207, 86, 143, 243, 224, 217, 95, 81, 6, 238, 185, 18, 197, 167, 99, 236, 160, 138, 219, 4, 77, 112, 91, 180, 54, 10, 163, 86, 166, 45, 62, 190, 181, 45, 46, 84, 84, 91, 84, 88, 249, 212, 78, 86, 181, 69, 71, 197, 193, 48, 114, 173, 32, 165, 21, 85, 109, 209, 129, 23, 139, 12, 207, 154, 180, 250, 194, 104, 129, 254, 46, 58, 214, 122, 14, 170, 232, 164, 113, 66, 216, 160, 213, 249, 116, 11, 90, 213, 98, 166, 45, 58, 160, 182, 232, 72, 206, 22, 21, 126, 213, 75, 157, 112, 59, 182, 56, 225, 174, 235, 41, 118, 200, 87, 54, 81, 241, 136, 243, 168, 45, 69, 3, 227, 135, 227, 218, 12, 68, 81, 18, 114, 32, 131, 46, 247, 254, 193, 23, 243, 79, 84, 33, 9, 93, 141, 231, 119, 45, 78, 232, 231, 42, 101, 108, 177, 225, 108, 177, 209, 202, 22, 29, 30, 65, 12, 179, 10, 53, 108, 241, 161, 203, 177, 117, 228, 146, 45, 62, 92, 178, 69, 5, 143, 180, 166, 236, 111, 80, 170, 146, 151, 55, 88, 214, 192, 205, 196, 81, 91, 246, 45, 223, 132, 166, 185, 136, 166, 185, 125, 199, 168, 45, 131, 104, 212, 69, 42, 152, 161, 182, 108, 87, 66, 144, 182, 140, 65, 161, 238, 121, 182, 94, 177, 238, 208, 127, 93, 233, 42, 150, 109, 219, 7, 242, 149, 57, 32, 180, 223, 187, 76, 72, 155, 100, 139, 13, 75, 243, 175, 69, 6, 119, 112, 134, 209, 176, 76, 23, 64, 207, 130, 34, 180, 185, 53, 139, 12, 20, 173, 21, 235, 205, 44, 58, 116, 43, 179, 184, 48, 105, 138, 152, 69, 134, 166, 142, 185, 233, 34, 35, 2, 9, 36, 160, 170, 139, 139, 138, 90, 84, 224, 106, 81, 129, 71, 144, 46, 181, 184, 88, 57, 121, 84, 130, 22, 181, 232, 88, 212, 162, 2, 79, 139, 14, 79, 139, 10, 244, 119, 33, 199, 164, 113, 90, 92, 144, 164, 117, 154, 22, 23, 16, 165, 105, 209, 225, 50, 33, 77, 139, 11, 143, 64, 88, 153, 22, 23, 173, 104, 101, 90, 108, 104, 102, 203, 226, 2, 245, 120, 37, 196, 150, 69, 9, 95, 204, 223, 114, 89, 108, 180, 92, 22, 21, 28, 84, 113, 107, 80, 177, 137, 23, 131, 6, 94, 218, 135, 251, 119, 84, 83, 73, 162, 112, 70, 194, 73, 13, 154, 43, 218, 38, 0, 193, 226, 0, 28, 211, 111, 56, 36, 2, 106, 19, 128, 96, 145, 161, 77, 0, 130, 69, 5, 101, 217, 208, 39, 69, 83, 199, 61, 14, 50, 60, 223, 234, 8, 240, 174, 111, 130, 163, 85, 210, 118, 61, 212, 46, 90, 221, 227, 32, 164, 105, 243, 56, 184, 240, 72, 252, 57, 184, 208, 218, 158, 131, 11, 86, 63, 136, 191, 229, 30, 156, 33, 173, 88, 173, 88, 127, 68, 129, 180, 98, 35, 180, 98, 149, 237, 59, 124, 101, 107, 214, 27, 86, 78, 90, 191, 57, 168, 69, 45, 217, 115, 144, 209, 118, 65, 220, 60, 7, 25, 207, 206, 23, 146, 148, 203, 127, 221, 58, 14, 105, 170, 238, 13, 174, 235, 117, 219, 236, 69, 89, 243, 156, 67, 63, 151, 183, 236, 103, 224, 19, 142, 34, 158, 151, 231, 224, 194, 55, 109, 210, 29, 194, 221, 191, 131, 11, 186, 17, 34, 72, 168, 226, 132, 30, 141, 194, 234, 159, 227, 252, 19, 79, 133, 123, 193, 59, 59, 143, 32, 135, 166, 45, 55, 255, 88, 210, 118, 65, 52, 109, 25, 167, 182, 16, 119, 63, 89, 77, 170, 26, 214, 202, 228, 105, 191, 37, 83, 71, 234, 164, 76, 20, 105, 61, 23, 135, 43, 114, 74, 132, 243, 175, 241, 253, 239, 224, 195, 253, 59, 168, 240, 216, 249, 165, 160, 8, 15, 7, 183, 108, 223, 118, 49, 84, 113, 170, 0, 132, 90, 20, 65, 4, 2, 163, 92, 132, 135, 231, 164, 101, 138, 224, 202, 178, 161, 38, 31, 233, 100, 223, 0, 238, 86, 226, 2, 152, 232, 199, 4, 144, 248, 42, 213, 233, 52, 224, 106, 121, 210, 236, 160, 13, 95, 209, 71, 252, 42, 73, 198, 40, 135, 248, 189, 209, 228, 51, 92, 215, 243, 159, 116, 169, 63, 24, 136, 136, 240, 48, 75, 209, 186, 204, 182, 101, 239, 26, 65, 173, 46, 147, 55, 180, 50, 204, 54, 95, 224, 146, 33, 166, 75, 33, 140, 149, 132, 235, 191, 101, 251, 63, 209, 98, 239, 224, 195, 98, 239, 160, 194, 228, 45, 119, 112, 33, 221, 65, 199, 114, 7, 27, 223, 24, 109, 7, 33, 19, 156, 131, 10, 156, 115, 80, 129, 147, 56, 73, 74, 231, 32, 163, 117, 81, 216, 65, 6, 143, 32, 127, 84, 242, 236, 160, 195, 159, 29, 71, 207, 14, 54, 114, 61, 118, 80, 66, 215, 190, 179, 131, 139, 199, 49, 59, 184, 160, 180, 178, 12, 122, 248, 130, 174, 37, 213, 59, 146, 48, 59, 200, 224, 198, 14, 42, 120, 4, 181, 54, 42, 151, 71, 27, 59, 232, 0, 209, 171, 148, 177, 131, 139, 10, 218, 199, 64, 27, 181, 189, 40, 99, 7, 29, 206, 167, 67, 202, 216, 193, 134, 99, 143, 154, 145, 50, 118, 212, 98, 7, 25, 206, 13, 189, 47, 59, 216, 192, 35, 16, 90, 54, 236, 32, 67, 162, 236, 160, 2, 4, 233, 120, 74, 230, 32, 163, 89, 28, 108, 120, 4, 130, 47, 7, 25, 26, 123, 196, 193, 133, 165, 32, 9, 92, 248, 42, 237, 117, 112, 209, 186, 233, 36, 183, 14, 66, 60, 191, 106, 23, 59, 242, 72, 4, 2, 3, 107, 194, 132, 54, 39, 228, 170, 153, 66, 225, 138, 222, 105, 118, 65, 84, 203, 229, 52, 235, 32, 67, 223, 196, 193, 129, 132, 127, 167, 147, 156, 75, 29, 27, 124, 210, 165, 142, 12, 170, 173, 106, 169, 35, 131, 23, 33, 126, 189, 100, 26, 117, 132, 248, 199, 18, 85, 199, 133, 219, 138, 5, 73, 84, 29, 27, 74, 213, 209, 161, 84, 29, 31, 13, 190, 26, 253, 146, 58, 52, 59, 66, 64, 32, 153, 64, 130, 8, 46, 169, 99, 195, 89, 118, 186, 6, 127, 167, 89, 111, 139, 240, 193, 129, 187, 46, 150, 234, 40, 225, 148, 163, 2, 245, 92, 144, 68, 57, 50, 90, 43, 214, 61, 57, 58, 60, 206, 240, 72, 195, 61, 157, 28, 33, 144, 180, 77, 178, 135, 243, 106, 41, 168, 115, 105, 80, 170, 84, 27, 98, 22, 45, 64, 209, 157, 32, 254, 182, 14, 154, 119, 146, 142, 46, 232, 161, 105, 139, 12, 13, 21, 69, 248, 128, 187, 133, 227, 151, 184, 42, 244, 236, 184, 196, 90, 143, 65, 135, 227, 228, 232, 112, 93, 184, 238, 111, 218, 167, 240, 181, 255, 16, 210, 200, 72, 142, 143, 214, 79, 142, 144, 165, 173, 165, 147, 80, 114, 116, 60, 204, 58, 66, 22, 199, 0, 120, 211, 74, 58, 46, 84, 210, 81, 193, 99, 162, 10, 233, 36, 29, 25, 58, 73, 71, 5, 164, 233, 165, 35, 131, 111, 187, 26, 159, 60, 29, 33, 238, 233, 168, 208, 234, 92, 58, 50, 56, 233, 211, 61, 238, 9, 2, 100, 98, 177, 119, 26, 48, 162, 177, 71, 216, 241, 35, 109, 233, 216, 208, 170, 90, 58, 50, 120, 235, 50, 235, 158, 95, 128, 194, 142, 163, 167, 243, 125, 106, 233, 232, 192, 210, 89, 58, 50, 60, 204, 46, 150, 142, 11, 150, 142, 143, 247, 85, 200, 35, 16, 120, 33, 232, 90, 6, 130, 53, 35, 9, 179, 131, 28, 36, 190, 10, 249, 218, 116, 92, 88, 57, 81, 212, 142, 134, 248, 2, 157, 44, 246, 8, 21, 109, 180, 43, 218, 104, 79, 168, 247, 67, 91, 142, 124, 46, 166, 1, 81, 38, 29, 31, 173, 78, 106, 47, 215, 67, 101, 25, 180, 168, 69, 17, 64, 128, 182, 147, 73, 199, 8, 85, 233, 168, 32, 81, 142, 210, 37, 56, 50, 40, 109, 205, 186, 4, 71, 70, 235, 164, 37, 56, 50, 72, 112, 132, 120, 120, 57, 85, 72, 130, 99, 35, 130, 227, 35, 226, 219, 46, 255, 135, 243, 75, 65, 46, 217, 251, 75, 167, 226, 64, 122, 69, 30, 169, 52, 50, 60, 82, 105, 84, 112, 9, 253, 93, 168, 210, 184, 168, 52, 6, 128, 210, 24, 0, 87, 247, 124, 123, 141, 140, 246, 26, 27, 77, 155, 246, 26, 25, 92, 219, 107, 92, 104, 175, 189, 198, 7, 18, 168, 189, 70, 200, 107, 100, 52, 78, 168, 189, 198, 69, 106, 143, 39, 106, 175, 177, 225, 158, 214, 55, 50, 172, 111, 116, 184, 137, 55, 42, 232, 90, 242, 17, 68, 127, 159, 55, 50, 184, 55, 42, 112, 224, 234, 158, 111, 208, 181, 36, 133, 23, 211, 8, 153, 192, 188, 241, 49, 129, 121, 163, 130, 171, 40, 82, 204, 152, 58, 148, 158, 222, 232, 208, 245, 186, 113, 193, 147, 107, 116, 240, 8, 132, 165, 19, 110, 100, 184, 91, 212, 205, 208, 90, 177, 173, 225, 164, 13, 1, 81, 197, 205, 161, 255, 184, 241, 193, 143, 84, 123, 220, 200, 80, 199, 141, 13, 206, 167, 123, 230, 70, 198, 51, 55, 58, 92, 194, 220, 184, 224, 107, 255, 73, 232, 155, 60, 223, 137, 131, 135, 217, 213, 188, 8, 175, 238, 169, 147, 86, 159, 112, 79, 174, 138, 27, 242, 6, 92, 21, 55, 87, 197, 173, 177, 71, 36, 156, 79, 183, 128, 86, 172, 235, 90, 70, 173, 125, 139, 171, 127, 4, 197, 179, 26, 35, 119, 143, 184, 215, 82, 87, 90, 160, 21, 235, 72, 151, 106, 239, 193, 210, 37, 151, 9, 254, 199, 64, 107, 197, 179, 178, 37, 50, 24, 64, 231, 178, 22, 235, 226, 133, 101, 226, 198, 135, 79, 234, 14, 92, 63, 211, 42, 109, 23, 161, 147, 197, 62, 241, 232, 249, 91, 182, 101, 173, 175, 74, 194, 93, 251, 45, 220, 248, 128, 176, 161, 59, 185, 113, 129, 169, 214, 168, 240, 206, 14, 106, 141, 14, 11, 175, 165, 53, 54, 52, 195, 26, 21, 18, 107, 124, 240, 163, 181, 158, 67, 137, 53, 78, 160, 196, 26, 35, 18, 107, 132, 96, 141, 142, 196, 26, 33, 110, 53, 42, 104, 203, 80, 67, 4, 38, 128, 64, 49, 117, 219, 216, 80, 233, 40, 220, 26, 239, 52, 219, 248, 96, 204, 118, 170, 211, 8, 73, 117, 26, 21, 154, 23, 167, 165, 105, 100, 84, 212, 137, 176, 52, 141, 139, 138, 54, 218, 104, 105, 26, 27, 21, 117, 208, 210, 52, 46, 150, 166, 81, 65, 82, 76, 163, 66, 132, 8, 80, 96, 130, 196, 52, 46, 38, 16, 193, 4, 17, 36, 166, 113, 241, 235, 59, 129, 48, 144, 52, 83, 180, 145, 65, 146, 152, 57, 180, 151, 162, 141, 12, 205, 15, 109, 52, 209, 70, 198, 195, 172, 63, 237, 68, 79, 191, 54, 46, 104, 239, 179, 125, 109, 92, 80, 184, 157, 215, 198, 197, 162, 36, 109, 157, 215, 198, 6, 132, 127, 75, 247, 124, 39, 115, 137, 182, 159, 11, 226, 240, 21, 253, 70, 5, 173, 236, 69, 188, 185, 91, 29, 252, 225, 97, 246, 93, 27, 23, 170, 50, 37, 131, 222, 181, 241, 241, 174, 141, 10, 147, 141, 80, 201, 46, 136, 55, 118, 174, 141, 13, 254, 205, 174, 162, 16, 86, 63, 137, 213, 207, 213, 115, 87, 34, 127, 9, 230, 45, 252, 220, 78, 89, 54, 231, 33, 38, 139, 31, 24, 183, 235, 90, 6, 210, 171, 82, 83, 213, 212, 169, 106, 160, 40, 233, 209, 220, 74, 132, 144, 132, 13, 7, 165, 147, 126, 87, 74, 51, 232, 170, 168, 208, 138, 109, 104, 239, 130, 138, 170, 182, 13, 99, 101, 227, 125, 199, 21, 112, 82, 166, 246, 32, 84, 251, 117, 178, 216, 145, 246, 42, 93, 235, 148, 101, 163, 80, 150, 45, 153, 74, 118, 53, 195, 189, 234, 193, 157, 146, 65, 88, 240, 14, 111, 126, 215, 212, 18, 97, 196, 211, 175, 157, 239, 15, 47, 185, 161, 201, 87, 4, 121, 215, 199, 205, 48, 20, 37, 173, 149, 104, 130, 54, 46, 152, 111, 187, 92, 190, 217, 105, 163, 163, 97, 173, 116, 60, 160, 107, 25, 212, 246, 1, 105, 202, 229, 208, 3, 23, 13, 169, 78, 27, 29, 212, 74, 176, 161, 191, 77, 105, 157, 240, 195, 215, 202, 132, 88, 54, 109, 92, 224, 154, 210, 121, 174, 236, 116, 234, 168, 105, 187, 54, 251, 31, 60, 48, 94, 144, 78, 144, 97, 162, 106, 98, 245, 67, 109, 155, 109, 70, 250, 204, 158, 153, 54, 58, 52, 78, 91, 89, 166, 141, 141, 84, 202, 180, 145, 161, 178, 253, 201, 150, 244, 5, 137, 95, 63, 151, 35, 73, 39, 123, 156, 212, 86, 170, 180, 85, 237, 107, 188, 211, 69, 56, 159, 236, 209, 30, 107, 205, 174, 68, 234, 214, 53, 109, 149, 74, 135, 214, 210, 244, 64, 211, 184, 223, 31, 232, 122, 205, 64, 223, 202, 137, 239, 66, 128, 43, 245, 71, 0, 87, 237, 25, 192, 39, 84, 91, 164, 107, 201, 31, 128, 164, 237, 74, 128, 54, 201, 22, 253, 75, 223, 172, 0, 239, 92, 139, 21, 226, 134, 190, 237, 106, 96, 177, 119, 24, 211, 56, 36, 92, 159, 219, 51, 51, 16, 46, 105, 187, 22, 108, 132, 153, 66, 42, 18, 171, 135, 75, 82, 123, 105, 64, 7, 46, 153, 54, 58, 112, 179, 178, 2, 161, 3, 226, 113, 9, 179, 243, 120, 10, 240, 228, 82, 165, 149, 92, 218, 8, 81, 182, 169, 101, 91, 246, 150, 132, 126, 42, 108, 88, 57, 105, 253, 182, 218, 184, 224, 12, 244, 223, 178, 205, 13, 60, 72, 58, 25, 132, 146, 237, 168, 72, 172, 30, 222, 180, 85, 169, 142, 186, 199, 209, 70, 7, 140, 151, 115, 168, 8, 173, 255, 153, 220, 65, 69, 208, 182, 235, 161, 34, 52, 119, 43, 90, 141, 54, 66, 86, 163, 141, 10, 30, 105, 180, 241, 209, 84, 194, 255, 244, 4, 54, 208, 230, 132, 32, 207, 185, 202, 130, 101, 167, 171, 120, 147, 139, 129, 0, 225, 159, 106, 63, 114, 149, 135, 175, 63, 43, 91, 162, 247, 68, 174, 210, 180, 97, 180, 122, 167, 171, 104, 163, 141, 144, 5, 19, 205, 15, 215, 253, 86, 197, 105, 219, 67, 14, 168, 54, 58, 214, 254, 107, 248, 125, 206, 144, 224, 200, 241, 93, 203, 115, 11, 158, 70, 27, 29, 108, 131, 154, 54, 143, 74, 80, 163, 141, 11, 248, 98, 126, 70, 27, 25, 143, 202, 91, 140, 54, 50, 84, 120, 169, 52, 252, 81, 73, 163, 240, 3, 195, 175, 13, 4, 6, 73, 23, 163, 141, 16, 79, 218, 197, 14, 53, 62, 36, 163, 141, 10, 171, 80, 3, 163, 141, 142, 117, 217, 16, 163, 141, 12, 70, 27, 21, 104, 122, 233, 149, 167, 218, 235, 111, 234, 45, 151, 203, 38, 221, 181, 109, 147, 158, 77, 186, 163, 242, 212, 122, 236, 81, 121, 202, 185, 93, 12, 170, 184, 43, 83, 231, 23, 52, 188, 22, 112, 208, 252, 219, 152, 33, 73, 98, 133, 38, 42, 139, 57, 57, 26, 167, 84, 136, 46, 13, 148, 58, 233, 115, 89, 224, 252, 147, 88, 151, 168, 242, 41, 81, 163, 242, 148, 54, 46, 52, 123, 67, 52, 84, 86, 110, 218, 229, 216, 250, 131, 181, 50, 33, 138, 166, 255, 185, 24, 135, 180, 50, 33, 247, 132, 15, 157, 239, 74, 27, 23, 187, 18, 106, 36, 86, 218, 184, 32, 73, 188, 148, 54, 46, 36, 137, 153, 36, 241, 98, 166, 173, 195, 215, 161, 223, 223, 74, 200, 119, 149, 54, 46, 40, 125, 84, 105, 227, 226, 83, 106, 163, 10, 47, 74, 27, 33, 254, 218, 73, 29, 125, 74, 165, 141, 14, 20, 221, 201, 251, 174, 110, 132, 112, 210, 39, 229, 33, 181, 199, 17, 3, 132, 17, 169, 61, 142, 22, 37, 59, 105, 35, 164, 105, 218, 200, 96, 45, 39, 109, 100, 232, 101, 39, 105, 227, 66, 87, 74, 116, 72, 152, 160, 199, 139, 54, 46, 220, 115, 209, 70, 134, 214, 73, 106, 35, 195, 171, 58, 142, 24, 255, 243, 130, 176, 129, 243, 233, 86, 106, 227, 3, 91, 11, 77, 219, 214, 73, 65, 191, 18, 200, 175, 100, 127, 31, 210, 182, 75, 219, 46, 213, 118, 45, 100, 225, 213, 160, 94, 165, 82, 27, 33, 46, 187, 129, 31, 45, 74, 73, 237, 127, 96, 249, 56, 60, 26, 137, 91, 141, 149, 90, 154, 42, 58, 105, 138, 84, 106, 67, 72, 218, 115, 212, 73, 153, 28, 238, 161, 212, 75, 151, 92, 214, 74, 164, 20, 92, 246, 123, 229, 169, 201, 126, 182, 93, 141, 251, 217, 211, 178, 75, 226, 170, 154, 86, 52, 232, 242, 254, 241, 227, 252, 82, 156, 95, 138, 55, 117, 52, 97, 231, 247, 189, 19, 138, 238, 100, 223, 99, 180, 245, 243, 93, 253, 69, 44, 74, 153, 240, 23, 161, 254, 40, 212, 223, 254, 122, 175, 141, 90, 10, 90, 224, 160, 58, 117, 81, 109, 230, 32, 9, 183, 191, 152, 127, 241, 227, 97, 246, 61, 249, 159, 182, 223, 128, 237, 71, 176, 85, 166, 206, 68, 69, 223, 245, 39, 26, 59, 78, 151, 122, 147, 255, 208, 228, 47, 249, 159, 223, 30, 95, 251, 79, 155, 19, 162, 232, 78, 208, 90, 82, 221, 82, 220, 82, 118, 37, 52, 241, 230, 132, 154, 137, 55, 19, 111, 188, 175, 218, 215, 232, 122, 222, 117, 61, 207, 251, 227, 182, 253, 18, 102, 7, 105, 147, 205, 19, 170, 184, 45, 229, 5, 65, 60, 146, 180, 239, 21, 75, 65, 78, 63, 237, 231, 123, 231, 123, 91, 231, 218, 118, 73, 58, 157, 71, 84, 83, 8, 2, 105, 20, 86, 170, 118, 57, 211, 10, 8, 211, 229, 152, 42, 78, 57, 105, 153, 144, 246, 251, 108, 205, 122, 46, 170, 214, 27, 154, 25, 162, 176, 227, 20, 218, 233, 56, 3, 10, 171, 116, 24, 43, 244, 190, 171, 61, 158, 12, 124, 210, 165, 238, 168, 115, 105, 240, 247, 92, 72, 210, 118, 33, 199, 211, 97, 172, 254, 113, 55, 212, 91, 39, 20, 43, 117, 178, 111, 165, 98, 198, 224, 129, 89, 164, 180, 247, 77, 208, 70, 107, 49, 179, 6, 79, 46, 109, 70, 59, 155, 169, 232, 98, 180, 223, 147, 95, 162, 242, 148, 246, 218, 212, 56, 105, 107, 127, 182, 123, 220, 13, 69, 79, 208, 213, 52, 252, 200, 113, 171, 179, 99, 229, 55, 63, 120, 4, 194, 179, 158, 151, 131, 72, 218, 46, 164, 54, 151, 139, 216, 181, 218, 164, 115, 247, 77, 219, 86, 213, 236, 208, 212, 161, 160, 103, 53, 110, 93, 216, 155, 80, 197, 238, 136, 155, 47, 249, 13, 22, 165, 60, 59, 142, 40, 186, 19, 6, 172, 106, 39, 252, 73, 39, 15, 212, 190, 215, 120, 155, 182, 238, 121, 7, 158, 212, 180, 211, 181, 149, 164, 236, 47, 64, 3, 173, 110, 41, 110, 41, 205, 196, 189, 153, 56, 243, 242, 52, 191, 3, 157, 139, 106, 143, 37, 92, 182, 5, 90, 255, 243, 129, 118, 58, 190, 228, 163, 197, 223, 148, 53, 90, 0, 167, 232, 78, 82, 59, 145, 50, 233, 223, 249, 78, 161, 147, 93, 236, 29, 7, 142, 167, 210, 86, 154, 173, 255, 44, 205, 4, 53, 51, 120, 77, 25, 114, 207, 49, 163, 156, 75, 167, 77, 58, 94, 168, 233, 54, 55, 80, 204, 86, 42, 102, 18, 95, 209, 71, 186, 96, 65, 219, 116, 210, 163, 18, 138, 238, 4, 105, 39, 37, 145, 2, 84, 146, 148, 68, 78, 85, 210, 252, 153, 86, 181, 109, 205, 139, 54, 114, 46, 219, 34, 231, 18, 181, 93, 128, 49, 87, 48, 230, 10, 212, 210, 33, 109, 146, 49, 224, 184, 147, 203, 165, 232, 78, 22, 123, 39, 229, 162, 84, 25, 148, 246, 93, 58, 13, 124, 58, 9, 41, 125, 102, 27, 244, 218, 60, 160, 105, 39, 173, 142, 120, 177, 54, 238, 120, 46, 102, 91, 41, 186, 235, 18, 57, 233, 149, 249, 138, 54, 164, 124, 97, 36, 36, 109, 23, 90, 155, 140, 146, 61, 105, 250, 60, 193, 76, 91, 164, 105, 39, 234, 224, 83, 53, 240, 8, 226, 119, 79, 127, 202, 87, 197, 201, 250, 0, 205, 50, 109, 34, 109, 123, 140, 113, 98, 64, 49, 106, 169, 43, 45, 240, 43, 65, 223, 233, 164, 212, 178, 151, 9, 199, 115, 57, 127, 230, 229, 89, 140, 43, 71, 15, 47, 206, 191, 68, 206, 249, 139, 40, 85, 199, 1, 179, 191, 94, 196, 132, 39, 204, 170, 118, 18, 177, 82, 49, 219, 202, 178, 166, 140, 43, 26, 228, 42, 101, 253, 60, 149, 53, 168, 98, 3, 216, 231, 73, 169, 196, 147, 173, 230, 201, 229, 144, 238, 63, 47, 222, 207, 138, 93, 153, 120, 53, 126, 93, 42, 113, 6, 75, 243, 114, 36, 193, 4, 53, 86, 42, 81, 187, 35, 93, 75, 170, 100, 3, 168, 100, 199, 195, 172, 164, 237, 90, 119, 187, 150, 34, 215, 182, 203, 117, 165, 39, 41, 179, 139, 129, 215, 197, 164, 54, 14, 79, 69, 46, 136, 156, 52, 150, 120, 196, 61, 194, 154, 153, 198, 30, 65, 141, 61, 194, 141, 61, 194, 58, 146, 168, 249, 87, 194, 236, 32, 165, 223, 30, 51, 228, 187, 64, 233, 103, 210, 118, 170, 144, 239, 50, 214, 183, 149, 48, 59, 136, 1, 198, 169, 245, 219, 62, 215, 154, 137, 75, 152, 29, 180, 64, 147, 173, 80, 182, 92, 213, 94, 101, 155, 135, 196, 155, 182, 206, 192, 181, 73, 86, 225, 229, 157, 102, 87, 235, 90, 217, 180, 54, 201, 214, 113, 39, 164, 77, 50, 8, 109, 146, 65, 152, 237, 165, 118, 213, 115, 65, 141, 211, 62, 124, 69, 219, 4, 32, 88, 9, 179, 131, 26, 222, 147, 31, 61, 59, 235, 18, 61, 59, 18, 102, 167, 213, 85, 51, 5, 61, 56, 205, 58, 175, 108, 169, 3, 97, 233, 176, 87, 219, 13, 63, 185, 144, 218, 110, 36, 76, 144, 54, 3, 215, 166, 121, 206, 218, 64, 68, 144, 77, 54, 140, 167, 162, 226, 49, 77, 181, 147, 163, 181, 94, 4, 99, 133, 24, 119, 133, 106, 51, 16, 150, 205, 154, 153, 198, 200, 95, 98, 7, 73, 226, 133, 252, 37, 94, 220, 46, 9, 157, 48, 67, 110, 151, 218, 110, 80, 133, 151, 138, 46, 137, 95, 9, 106, 114, 253, 50, 141, 125, 234, 185, 104, 47, 227, 236, 116, 45, 227, 160, 107, 25, 231, 83, 25, 125, 19, 58, 25, 122, 79, 70, 226, 93, 98, 105, 101, 93, 211, 166, 147, 39, 87, 235, 132, 39, 158, 78, 213, 30, 47, 168, 185, 91, 155, 230, 17, 196, 143, 30, 79, 133, 112, 220, 9, 61, 158, 218, 64, 27, 87, 56, 110, 181, 150, 108, 154, 108, 215, 109, 254, 148, 12, 98, 204, 152, 73, 18, 43, 199, 3, 13, 92, 221, 243, 142, 219, 41, 160, 91, 231, 251, 148, 168, 105, 147, 88, 53, 109, 18, 67, 156, 244, 184, 193, 187, 126, 83, 12, 180, 113, 5, 133, 4, 139, 189, 131, 84, 83, 13, 84, 83, 206, 36, 2, 17, 128, 0, 77, 246, 65, 83, 46, 231, 203, 236, 68, 41, 158, 5, 202, 246, 245, 83, 233, 167, 250, 84, 249, 169, 22, 80, 219, 13, 202, 79, 21, 1, 117, 46, 13, 124, 149, 191, 102, 239, 55, 241, 4, 49, 241, 212, 224, 170, 51, 161, 95, 165, 205, 104, 35, 253, 212, 134, 112, 239, 219, 107, 110, 188, 141, 182, 3, 77, 46, 6, 61, 253, 237, 49, 133, 27, 154, 104, 20, 86, 223, 158, 51, 243, 9, 103, 230, 252, 232, 113, 156, 26, 168, 90, 255, 199, 146, 180, 43, 53, 70, 139, 57, 249, 55, 245, 198, 9, 173, 132, 33, 175, 41, 251, 138, 126, 171, 240, 178, 152, 31, 125, 227, 244, 208, 244, 155, 55, 94, 111, 202, 86, 161, 214, 182, 249, 141, 211, 2, 172, 151, 105, 19, 251, 175, 76, 123, 20, 173, 206, 142, 121, 35, 7, 235, 49, 205, 139, 155, 221, 229, 90, 17, 84, 113, 82, 30, 129, 240, 73, 25, 70, 145, 170, 245, 111, 186, 171, 129, 107, 219, 133, 28, 203, 149, 58, 23, 212, 180, 213, 90, 7, 17, 144, 71, 190, 211, 113, 187, 24, 164, 250, 225, 89, 218, 118, 41, 219, 71, 13, 28, 94, 83, 134, 90, 155, 126, 75, 115, 132, 1, 124, 69, 27, 210, 181, 228, 127, 235, 202, 87, 165, 184, 55, 78, 219, 180, 108, 253, 84, 205, 170, 228, 213, 158, 54, 51, 186, 72, 52, 109, 215, 243, 142, 38, 128, 64, 61, 23, 85, 156, 58, 151, 6, 173, 180, 170, 181, 111, 97, 160, 243, 115, 2, 73, 237, 252, 138, 62, 210, 138, 245, 6, 15, 82, 123, 252, 241, 253, 255, 150, 215, 148, 161, 220, 94, 144, 219, 74, 123, 41, 218, 17, 206, 73, 120, 227, 133, 208, 79, 182, 20, 206, 51, 51, 71, 146, 182, 75, 0, 223, 186, 30, 19, 13, 180, 173, 44, 67, 173, 170, 41, 242, 198, 74, 61, 160, 41, 45, 240, 64, 0, 65, 162, 227, 83, 106, 59, 41, 181, 177, 17, 65, 27, 21, 232, 90, 82, 27, 33, 141, 14, 143, 32, 70, 53, 50, 104, 197, 54, 110, 153, 16, 163, 26, 33, 109, 153, 212, 200, 248, 85, 154, 26, 25, 222, 119, 165, 198, 135, 212, 216, 80, 109, 213, 70, 202, 246, 81, 106, 116, 240, 37, 31, 165, 198, 197, 63, 86, 183, 20, 71, 169, 241, 225, 78, 223, 81, 106, 100, 164, 198, 6, 210, 138, 117, 109, 148, 26, 37, 26, 47, 74, 141, 13, 169, 241, 145, 26, 31, 94, 83, 134, 82, 227, 66, 251, 189, 107, 131, 82, 163, 131, 53, 51, 40, 117, 106, 74, 182, 66, 169, 177, 209, 44, 211, 32, 212, 93, 174, 197, 170, 50, 121, 167, 106, 186, 50, 161, 212, 248, 208, 79, 182, 45, 81, 106, 116, 164, 198, 0, 56, 254, 150, 198, 5, 74, 54, 58, 30, 197, 11, 162, 100, 35, 195, 35, 168, 233, 36, 27, 25, 173, 248, 208, 181, 108, 69, 23, 131, 90, 23, 232, 103, 35, 68, 210, 9, 250, 108, 92, 164, 227, 217, 184, 176, 52, 29, 151, 141, 11, 39, 61, 126, 199, 55, 187, 227, 207, 61, 180, 105, 101, 207, 114, 46, 187, 105, 217, 8, 129, 84, 212, 89, 107, 25, 198, 142, 180, 159, 140, 253, 43, 160, 207, 111, 66, 5, 30, 92, 53, 83, 32, 26, 60, 210, 96, 250, 251, 128, 48, 86, 45, 27, 25, 92, 69, 85, 203, 198, 133, 106, 217, 232, 200, 198, 135, 166, 151, 238, 248, 212, 94, 68, 37, 106, 72, 197, 178, 113, 33, 213, 194, 178, 145, 193, 35, 175, 177, 116, 35, 132, 171, 228, 94, 155, 141, 17, 21, 76, 54, 42, 44, 38, 27, 21, 148, 147, 124, 49, 59, 196, 100, 35, 131, 201, 70, 5, 188, 42, 27, 33, 204, 147, 130, 218, 46, 217, 232, 136, 208, 24, 128, 198, 30, 65, 141, 14, 200, 144, 175, 76, 117, 45, 169, 32, 244, 249, 77, 104, 175, 129, 223, 4, 132, 188, 9, 216, 240, 200, 226, 183, 189, 9, 184, 144, 191, 84, 77, 240, 90, 16, 197, 90, 251, 38, 224, 194, 227, 245, 66, 146, 180, 111, 2, 54, 36, 105, 223, 33, 241, 124, 238, 180, 12, 233, 123, 208, 230, 119, 117, 82, 186, 190, 9, 232, 240, 180, 190, 9, 16, 198, 10, 81, 88, 165, 227, 168, 245, 77, 192, 7, 157, 158, 111, 2, 50, 184, 79, 64, 5, 15, 179, 62, 1, 33, 250, 38, 16, 28, 15, 61, 1, 25, 60, 50, 97, 2, 42, 180, 46, 11, 175, 9, 184, 240, 133, 35, 19, 112, 33, 50, 1, 3, 192, 139, 38, 160, 194, 162, 9, 168, 96, 2, 2, 224, 211, 235, 111, 88, 75, 29, 71, 141, 157, 127, 28, 66, 124, 85, 28, 42, 248, 218, 127, 19, 247, 207, 33, 195, 35, 168, 213, 241, 231, 176, 209, 150, 211, 239, 130, 242, 83, 57, 254, 28, 66, 120, 4, 130, 227, 207, 225, 194, 31, 61, 204, 246, 115, 232, 104, 176, 216, 59, 136, 113, 51, 72, 2, 25, 239, 218, 207, 33, 67, 191, 70, 218, 207, 97, 195, 249, 149, 250, 142, 178, 191, 162, 15, 104, 115, 66, 14, 216, 72, 247, 28, 42, 168, 226, 244, 180, 231, 144, 65, 97, 213, 150, 242, 208, 181, 164, 227, 207, 161, 181, 94, 99, 233, 68, 87, 43, 163, 202, 241, 153, 208, 90, 207, 33, 35, 37, 207, 161, 130, 100, 37, 197, 109, 191, 163, 230, 185, 205, 5, 225, 80, 201, 207, 104, 149, 180, 93, 168, 121, 14, 29, 254, 104, 238, 214, 166, 77, 243, 28, 66, 188, 255, 19, 53, 207, 97, 163, 121, 14, 21, 120, 4, 97, 99, 121, 109, 121, 14, 33, 239, 250, 72, 169, 227, 228, 237, 53, 224, 182, 145, 118, 45, 207, 161, 195, 195, 180, 33, 168, 246, 187, 195, 135, 75, 214, 208, 149, 137, 23, 66, 84, 251, 145, 187, 195, 197, 251, 46, 228, 14, 23, 221, 14, 21, 104, 239, 155, 224, 104, 218, 66, 76, 154, 67, 67, 219, 116, 210, 227, 233, 215, 134, 224, 217, 241, 166, 218, 201, 21, 128, 34, 16, 64, 37, 185, 24, 8, 116, 192, 27, 13, 220, 23, 167, 5, 60, 194, 188, 133, 159, 159, 219, 161, 131, 162, 59, 129, 240, 93, 13, 28, 44, 85, 28, 225, 146, 61, 42, 89, 175, 255, 185, 182, 79, 243, 251, 58, 19, 217, 44, 104, 246, 126, 201, 113, 43, 6, 174, 90, 50, 70, 177, 228, 90, 156, 80, 115, 247, 50, 117, 9, 199, 237, 156, 179, 227, 118, 184, 104, 87, 209, 6, 111, 126, 36, 34, 16, 62, 160, 166, 45, 133, 126, 54, 233, 184, 29, 130, 64, 135, 234, 172, 96, 248, 187, 103, 185, 68, 239, 222, 49, 110, 135, 12, 15, 179, 107, 101, 66, 15, 179, 14, 79, 75, 244, 48, 235, 44, 120, 145, 234, 92, 148, 36, 229, 2, 1, 194, 3, 8, 142, 167, 3, 65, 125, 159, 150, 16, 212, 23, 241, 79, 252, 99, 101, 251, 235, 95, 125, 229, 190, 196, 211, 255, 244, 107, 47, 240, 85, 218, 79, 223, 132, 6, 157, 172, 247, 75, 218, 200, 29, 183, 107, 254, 151, 180, 162, 104, 241, 130, 135, 89, 85, 220, 36, 222, 105, 118, 49, 109, 157, 148, 10, 81, 72, 125, 89, 219, 116, 28, 92, 146, 114, 137, 88, 43, 147, 68, 171, 36, 181, 151, 7, 253, 92, 104, 173, 68, 13, 112, 225, 159, 239, 40, 53, 200, 159, 58, 175, 140, 219, 225, 4, 227, 118, 248, 104, 26, 225, 118, 200, 160, 44, 27, 250, 164, 17, 110, 247, 208, 185, 32, 6, 22, 164, 233, 41, 110, 135, 15, 14, 26, 67, 120, 211, 137, 36, 105, 191, 162, 141, 194, 223, 183, 226, 48, 129, 43, 122, 224, 162, 225, 133, 18, 183, 67, 198, 243, 194, 237, 144, 97, 53, 16, 116, 225, 118, 200, 208, 207, 201, 194, 35, 159, 82, 59, 39, 25, 65, 105, 31, 24, 43, 148, 246, 145, 76, 157, 228, 72, 130, 249, 182, 67, 136, 71, 244, 233, 155, 240, 252, 54, 111, 59, 124, 136, 48, 56, 133, 174, 37, 27, 190, 206, 163, 111, 219, 140, 79, 169, 221, 180, 133, 55, 78, 235, 168, 232, 98, 148, 109, 59, 108, 112, 167, 100, 16, 86, 78, 180, 98, 221, 177, 43, 61, 36, 105, 223, 4, 103, 232, 81, 182, 223, 78, 67, 115, 183, 230, 167, 122, 84, 120, 121, 30, 30, 72, 165, 33, 17, 161, 191, 116, 226, 12, 188, 98, 91, 54, 205, 3, 200, 73, 70, 154, 29, 49, 80, 81, 151, 20, 223, 118, 185, 62, 168, 78, 213, 242, 29, 53, 203, 52, 118, 32, 73, 234, 36, 215, 127, 22, 212, 186, 255, 218, 14, 29, 190, 169, 107, 59, 92, 168, 226, 166, 237, 208, 1, 169, 166, 78, 219, 33, 68, 37, 47, 109, 135, 12, 22, 29, 152, 67, 74, 27, 33, 218, 174, 29, 50, 124, 106, 155, 180, 29, 50, 156, 38, 109, 135, 14, 10, 33, 220, 227, 110, 80, 203, 254, 6, 95, 209, 111, 14, 13, 159, 82, 219, 33, 131, 227, 207, 33, 109, 135, 12, 143, 52, 109, 42, 239, 28, 54, 158, 206, 94, 118, 245, 59, 135, 20, 12, 183, 115, 184, 224, 75, 21, 179, 93, 28, 116, 45, 195, 178, 155, 92, 229, 64, 99, 95, 245, 92, 4, 192, 96, 165, 39, 234, 1, 124, 229, 1, 109, 78, 232, 65, 155, 86, 38, 129, 98, 143, 6, 141, 61, 2, 81, 109, 25, 39, 189, 50, 13, 14, 218, 16, 111, 188, 159, 116, 66, 63, 215, 226, 7, 95, 251, 111, 193, 154, 224, 139, 82, 144, 42, 110, 12, 48, 64, 173, 239, 82, 53, 224, 146, 45, 176, 40, 39, 61, 118, 184, 208, 148, 253, 236, 112, 33, 73, 233, 158, 29, 46, 116, 217, 78, 46, 233, 100, 239, 172, 153, 225, 109, 201, 212, 218, 183, 188, 179, 91, 236, 157, 5, 139, 189, 131, 26, 118, 60, 130, 26, 118, 28, 169, 255, 44, 218, 141, 118, 243, 238, 184, 236, 6, 82, 81, 213, 182, 98, 173, 165, 76, 180, 101, 147, 149, 19, 138, 213, 175, 146, 223, 30, 7, 110, 38, 77, 219, 111, 246, 135, 239, 100, 222, 57, 65, 186, 28, 219, 103, 79, 87, 38, 125, 98, 125, 251, 131, 244, 148, 54, 211, 230, 175, 184, 7, 73, 219, 133, 158, 150, 200, 61, 87, 66, 172, 158, 186, 123, 26, 76, 154, 162, 87, 215, 174, 44, 163, 237, 26, 104, 202, 229, 24, 72, 82, 123, 65, 218, 164, 83, 45, 157, 111, 118, 90, 39, 188, 0, 131, 231, 55, 165, 227, 6, 86, 191, 5, 170, 56, 109, 123, 222, 180, 101, 251, 5, 96, 224, 201, 229, 124, 21, 210, 138, 109, 15, 164, 90, 251, 169, 61, 78, 177, 50, 241, 26, 128, 11, 128, 101, 167, 91, 224, 160, 49, 131, 116, 189, 78, 167, 105, 188, 190, 169, 90, 7, 149, 156, 188, 38, 150, 92, 30, 113, 52, 147, 182, 221, 236, 22, 120, 245, 180, 202, 178, 153, 71, 37, 200, 61, 45, 131, 197, 222, 201, 165, 233, 138, 58, 15, 222, 234, 150, 58, 217, 48, 104, 102, 246, 33, 166, 239, 143, 163, 111, 14, 180, 117, 126, 41, 20, 186, 150, 245, 157, 32, 127, 137, 153, 202, 50, 200, 155, 183, 84, 116, 57, 3, 93, 175, 145, 106, 250, 21, 135, 73, 211, 199, 83, 39, 28, 33, 93, 203, 99, 2, 40, 245, 215, 158, 170, 231, 29, 211, 207, 180, 203, 61, 181, 128, 3, 213, 153, 124, 213, 62, 200, 85, 202, 16, 227, 247, 71, 193, 238, 9, 65, 190, 162, 205, 61, 33, 247, 180, 160, 117, 210, 24, 180, 101, 16, 75, 211, 186, 92, 63, 151, 41, 233, 162, 205, 128, 98, 182, 192, 66, 89, 30, 145, 142, 91, 137, 42, 234, 52, 120, 178, 27, 212, 188, 56, 237, 74, 15, 7, 76, 23, 137, 103, 238, 247, 87, 119, 135, 103, 57, 215, 144, 90, 78, 84, 162, 5, 220, 211, 59, 175, 124, 103, 135, 15, 77, 219, 198, 251, 235, 236, 212, 217, 97, 195, 217, 161, 130, 214, 214, 50, 61, 252, 155, 29, 46, 180, 170, 182, 204, 55, 59, 116, 232, 155, 160, 149, 223, 172, 12, 114, 232, 160, 212, 31, 250, 102, 135, 141, 86, 127, 19, 237, 84, 16, 131, 135, 167, 95, 219, 129, 162, 105, 171, 248, 129, 174, 180, 238, 216, 33, 163, 117, 153, 85, 204, 144, 86, 172, 163, 74, 50, 212, 234, 28, 59, 116, 160, 206, 14, 237, 51, 115, 236, 176, 161, 236, 212, 241, 63, 139, 29, 50, 96, 235, 248, 179, 216, 33, 195, 181, 237, 250, 101, 8, 39, 154, 182, 206, 237, 74, 8, 33, 148, 58, 190, 139, 29, 50, 116, 45, 131, 142, 86, 138, 238, 4, 49, 220, 184, 89, 8, 135, 111, 203, 14, 27, 116, 45, 195, 14, 25, 34, 17, 216, 185, 230, 80, 162, 237, 130, 16, 178, 236, 170, 224, 6, 121, 120, 164, 105, 14, 23, 154, 195, 0, 84, 152, 67, 5, 191, 141, 153, 63, 142, 34, 48, 101, 17, 152, 67, 7, 253, 124, 238, 134, 23, 138, 192, 28, 54, 68, 96, 14, 29, 141, 43, 137, 34, 48, 135, 12, 108, 52, 188, 28, 205, 221, 138, 16, 199, 203, 161, 194, 251, 46, 135, 11, 173, 21, 93, 14, 25, 42, 204, 104, 47, 35, 161, 205, 15, 236, 45, 227, 118, 18, 154, 64, 7, 99, 238, 39, 151, 67, 70, 179, 247, 45, 151, 67, 8, 109, 187, 158, 197, 14, 241, 163, 206, 150, 203, 161, 3, 181, 185, 92, 83, 46, 135, 13, 143, 172, 196, 225, 2, 51, 109, 27, 137, 195, 133, 123, 168, 145, 56, 100, 104, 36, 14, 27, 205, 58, 152, 198, 9, 53, 18, 135, 12, 9, 120, 146, 56, 92, 240, 8, 4, 16, 120, 146, 56, 100, 48, 237, 202, 58, 100, 240, 8, 132, 93, 56, 191, 204, 25, 102, 21, 90, 90, 89, 135, 142, 108, 155, 124, 29, 46, 92, 63, 123, 29, 46, 250, 233, 191, 186, 117, 216, 224, 69, 234, 214, 225, 226, 189, 173, 195, 5, 87, 239, 20, 251, 235, 177, 8, 247, 239, 52, 82, 229, 226, 244, 248, 102, 247, 41, 251, 125, 73, 196, 109, 29, 54, 224, 182, 14, 21, 28, 116, 37, 109, 29, 50, 228, 182, 117, 184, 208, 180, 117, 168, 224, 17, 102, 43, 186, 14, 25, 218, 164, 63, 181, 14, 25, 170, 253, 106, 29, 46, 214, 90, 70, 251, 125, 90, 199, 56, 173, 195, 6, 167, 117, 232, 120, 22, 36, 73, 235, 176, 33, 211, 58, 84, 112, 28, 58, 90, 255, 83, 33, 231, 56, 148, 104, 118, 156, 179, 227, 208, 65, 27, 59, 14, 23, 42, 219, 148, 29, 135, 139, 95, 251, 22, 109, 135, 36, 60, 194, 248, 91, 58, 14, 27, 238, 233, 26, 135, 12, 174, 113, 216, 136, 176, 38, 56, 106, 28, 46, 22, 167, 198, 161, 3, 53, 14, 33, 26, 135, 14, 212, 56, 108, 160, 198, 97, 99, 2, 223, 22, 53, 14, 23, 141, 195, 134, 195, 134, 123, 104, 28, 82, 52, 14, 3, 80, 161, 14, 21, 72, 90, 54, 196, 243, 219, 233, 254, 233, 231, 98, 84, 33, 137, 180, 142, 147, 111, 4, 130, 178, 71, 225, 134, 52, 181, 100, 205, 76, 171, 195, 135, 206, 37, 66, 181, 116, 84, 155, 65, 159, 20, 194, 37, 204, 78, 5, 92, 210, 201, 16, 211, 234, 208, 241, 164, 86, 135, 11, 30, 113, 234, 112, 65, 253, 177, 243, 77, 29, 54, 90, 91, 83, 135, 12, 170, 169, 67, 5, 166, 14, 21, 120, 164, 81, 135, 11, 106, 81, 171, 58, 92, 168, 58, 124, 48, 202, 97, 227, 125, 21, 114, 120, 132, 81, 14, 23, 222, 147, 81, 14, 25, 150, 93, 136, 81, 14, 23, 159, 28, 58, 24, 43, 20, 225, 118, 149, 197, 225, 227, 27, 34, 48, 74, 178, 56, 100, 144, 40, 71, 239, 218, 104, 165, 123, 210, 61, 233, 112, 225, 47, 29, 66, 86, 78, 156, 119, 38, 130, 243, 233, 112, 193, 35, 16, 22, 94, 13, 226, 167, 208, 212, 143, 189, 194, 237, 168, 172, 115, 67, 59, 207, 200, 254, 138, 42, 203, 246, 21, 69, 11, 212, 51, 53, 156, 79, 135, 14, 231, 211, 161, 130, 147, 62, 29, 54, 168, 102, 202, 67, 143, 19, 114, 79, 135, 19, 173, 255, 75, 121, 136, 166, 18, 254, 167, 209, 207, 126, 23, 64, 132, 149, 137, 151, 131, 243, 47, 93, 170, 245, 148, 72, 167, 46, 200, 253, 59, 20, 17, 104, 16, 1, 2, 6, 206, 191, 228, 5, 17, 32, 36, 204, 139, 166, 100, 34, 24, 191, 191, 132, 240, 65, 61, 211, 202, 228, 43, 147, 167, 195, 135, 71, 30, 93, 140, 109, 99, 109, 63, 198, 178, 171, 37, 139, 249, 81, 183, 254, 39, 67, 61, 97, 241, 232, 98, 52, 246, 136, 59, 191, 20, 36, 65, 58, 146, 32, 66, 181, 31, 69, 16, 64, 211, 182, 1, 9, 24, 58, 245, 249, 109, 79, 187, 249, 211, 126, 62, 197, 171, 167, 110, 125, 151, 42, 145, 51, 168, 129, 55, 205, 161, 40, 238, 233, 148, 101, 67, 141, 61, 194, 64, 89, 54, 148, 182, 149, 189, 230, 140, 17, 209, 246, 115, 61, 42, 105, 52, 246, 200, 183, 6, 196, 45, 117, 22, 94, 142, 213, 15, 45, 207, 89, 253, 16, 59, 237, 5, 202, 178, 161, 181, 30, 243, 224, 224, 248, 174, 166, 169, 67, 219, 100, 172, 24, 102, 29, 219, 15, 229, 167, 114, 72, 187, 152, 198, 205, 235, 241, 21, 85, 156, 22, 171, 64, 76, 124, 99, 134, 45, 18, 205, 206, 63, 8, 54, 248, 194, 215, 213, 121, 124, 83, 135, 95, 228, 82, 61, 19, 98, 30, 113, 64, 160, 196, 42, 168, 119, 186, 116, 233, 176, 241, 154, 150, 14, 23, 88, 146, 14, 21, 254, 39, 48, 196, 78, 163, 249, 19, 29, 84, 211, 86, 155, 116, 216, 224, 208, 241, 78, 179, 141, 84, 58, 108, 168, 116, 168, 64, 61, 130, 86, 63, 8, 15, 179, 13, 156, 207, 8, 199, 211, 65, 16, 92, 120, 4, 105, 74, 135, 139, 148, 14, 33, 41, 29, 62, 104, 37, 33, 38, 54, 161, 7, 2, 8, 210, 33, 99, 173, 100, 90, 63, 41, 200, 225, 163, 153, 65, 191, 73, 65, 14, 29, 79, 63, 114, 184, 192, 154, 25, 124, 244, 3, 57, 116, 40, 99, 127, 109, 228, 112, 225, 112, 225, 112, 161, 110, 29, 114, 200, 224, 146, 33, 231, 112, 225, 169, 200, 133, 28, 50, 252, 34, 135, 28, 66, 158, 181, 178, 45, 131, 28, 54, 152, 89, 6, 57, 100, 120, 218, 225, 194, 117, 91, 29, 57, 41, 21, 57, 108, 104, 101, 84, 33, 135, 11, 228, 150, 166, 150, 9, 185, 212, 30, 79, 228, 176, 225, 105, 137, 28, 46, 32, 68, 235, 132, 81, 33, 181, 199, 209, 115, 255, 24, 33, 90, 159, 92, 255, 24, 25, 223, 84, 253, 99, 92, 188, 63, 70, 5, 39, 61, 70, 133, 101, 151, 123, 70, 134, 138, 51, 62, 156, 79, 231, 140, 12, 46, 155, 51, 46, 48, 46, 212, 25, 27, 207, 90, 150, 12, 114, 198, 134, 51, 6, 96, 101, 219, 102, 155, 145, 81, 209, 70, 27, 53, 205, 216, 88, 217, 86, 53, 227, 194, 83, 219, 29, 183, 91, 128, 148, 182, 170, 102, 164, 200, 86, 150, 9, 253, 46, 205, 216, 96, 81, 186, 82, 54, 35, 35, 155, 81, 129, 191, 99, 84, 240, 8, 90, 9, 65, 134, 2, 48, 71, 70, 235, 59, 198, 133, 199, 157, 99, 92, 104, 221, 126, 237, 136, 213, 207, 35, 16, 212, 61, 255, 104, 218, 166, 236, 151, 240, 35, 36, 225, 127, 32, 225, 119, 119, 141, 107, 234, 24, 23, 106, 213, 54, 117, 140, 12, 58, 217, 166, 142, 209, 193, 31, 73, 120, 104, 39, 165, 185, 129, 166, 141, 42, 78, 104, 1, 87, 247, 252, 154, 192, 143, 214, 101, 63, 191, 253, 146, 58, 240, 100, 234, 36, 7, 141, 119, 57, 150, 254, 176, 192, 131, 214, 212, 202, 9, 53, 216, 149, 144, 54, 173, 76, 155, 86, 214, 208, 216, 35, 14, 72, 154, 41, 202, 178, 153, 8, 134, 89, 72, 235, 191, 58, 98, 128, 15, 77, 29, 163, 68, 83, 199, 168, 176, 210, 49, 66, 84, 251, 209, 110, 242, 68, 204, 216, 176, 175, 169, 55, 198, 5, 55, 70, 5, 223, 30, 179, 198, 184, 88, 141, 209, 241, 172, 198, 168, 160, 108, 191, 237, 210, 198, 184, 80, 182, 143, 180, 49, 50, 180, 49, 163, 163, 49, 50, 52, 53, 70, 133, 166, 239, 187, 208, 107, 67, 141, 177, 161, 49, 58, 84, 155, 65, 146, 212, 133, 126, 43, 138, 26, 99, 132, 71, 32, 252, 50, 198, 197, 243, 142, 169, 195, 241, 84, 188, 16, 132, 83, 85, 232, 151, 49, 54, 152, 109, 26, 198, 200, 160, 255, 186, 148, 49, 50, 42, 188, 184, 100, 104, 49, 62, 44, 198, 0, 36, 181, 140, 15, 39, 189, 50, 15, 115, 24, 27, 12, 180, 57, 161, 180, 189, 36, 131, 246, 45, 80, 42, 145, 166, 101, 24, 70, 136, 214, 87, 198, 138, 145, 241, 180, 190, 9, 143, 79, 197, 8, 113, 212, 120, 23, 248, 149, 240, 39, 198, 197, 202, 79, 140, 11, 204, 174, 196, 184, 144, 24, 29, 204, 91, 24, 21, 188, 49, 8, 29, 148, 23, 70, 133, 137, 39, 196, 143, 220, 225, 201, 238, 108, 230, 109, 52, 52, 10, 123, 58, 222, 172, 26, 133, 95, 155, 1, 48, 110, 70, 162, 129, 66, 128, 240, 235, 11, 209, 10, 213, 102, 218, 123, 120, 152, 85, 237, 247, 166, 19, 241, 83, 48, 172, 21, 235, 254, 168, 196, 193, 37, 67, 207, 79, 56, 158, 78, 4, 131, 6, 165, 15, 143, 123, 32, 132, 59, 110, 135, 34, 11, 99, 67, 61, 19, 138, 44, 140, 12, 8, 22, 70, 5, 90, 177, 205, 17, 30, 206, 191, 100, 92, 144, 172, 164, 32, 79, 198, 136, 214, 137, 39, 35, 196, 147, 177, 193, 147, 209, 209, 120, 37, 200, 147, 209, 193, 147, 81, 193, 164, 233, 100, 92, 72, 79, 67, 5, 149, 134, 1, 88, 151, 78, 105, 200, 208, 20, 109, 250, 53, 104, 104, 19, 128, 96, 209, 87, 94, 195, 198, 87, 94, 67, 133, 149, 173, 236, 53, 92, 112, 47, 236, 53, 100, 80, 202, 104, 11, 226, 111, 8, 113, 10, 183, 243, 143, 181, 94, 67, 71, 74, 94, 195, 134, 229, 53, 84, 208, 36, 197, 27, 46, 120, 67, 134, 243, 134, 10, 180, 115, 37, 85, 222, 176, 209, 19, 26, 42, 112, 215, 176, 209, 176, 129, 11, 39, 173, 67, 65, 204, 173, 149, 168, 189, 126, 180, 215, 238, 124, 186, 134, 243, 233, 190, 45, 82, 237, 71, 43, 153, 107, 8, 193, 92, 195, 135, 183, 42, 115, 13, 39, 188, 241, 254, 75, 205, 12, 98, 174, 225, 2, 166, 49, 163, 109, 195, 11, 237, 106, 112, 253, 84, 238, 161, 8, 230, 26, 54, 126, 213, 75, 196, 28, 115, 13, 23, 204, 53, 84, 224, 26, 6, 160, 245, 115, 33, 213, 18, 81, 184, 97, 3, 58, 158, 231, 134, 10, 238, 243, 125, 159, 27, 54, 120, 33, 72, 82, 58, 125, 110, 248, 64, 134, 71, 32, 56, 213, 229, 220, 208, 225, 139, 110, 184, 39, 8, 75, 213, 161, 52, 147, 228, 14, 207, 232, 66, 15, 141, 196, 97, 195, 195, 236, 59, 110, 184, 208, 38, 253, 161, 119, 220, 208, 49, 65, 4, 199, 220, 112, 225, 209, 24, 228, 116, 37, 204, 13, 23, 206, 184, 161, 2, 227, 198, 184, 33, 3, 55, 100, 124, 107, 15, 141, 89, 163, 112, 147, 172, 165, 20, 138, 229, 253, 131, 197, 236, 144, 123, 166, 180, 211, 241, 111, 118, 234, 14, 212, 118, 163, 154, 186, 3, 13, 124, 179, 99, 160, 117, 109, 50, 39, 165, 238, 82, 197, 13, 31, 44, 74, 65, 30, 129, 200, 69, 55, 242, 219, 44, 40, 188, 24, 8, 77, 191, 162, 16, 156, 170, 132, 185, 194, 109, 5, 99, 177, 124, 244, 119, 161, 197, 42, 13, 21, 95, 149, 197, 236, 144, 171, 212, 118, 30, 181, 74, 154, 29, 68, 48, 65, 5, 181, 165, 188, 54, 148, 150, 189, 44, 162, 120, 47, 2, 164, 19, 163, 79, 217, 234, 174, 191, 46, 209, 243, 130, 88, 118, 163, 75, 127, 129, 147, 94, 153, 86, 247, 220, 86, 32, 87, 197, 9, 69, 248, 83, 254, 249, 15, 199, 93, 146, 114, 57, 32, 72, 167, 21, 169, 90, 251, 14, 144, 123, 186, 123, 122, 35, 61, 2, 225, 207, 130, 26, 76, 208, 246, 103, 85, 39, 47, 142, 167, 146, 104, 203, 84, 34, 165, 237, 144, 18, 38, 37, 170, 159, 119, 140, 231, 213, 60, 139, 93, 227, 84, 177, 3, 129, 243, 47, 185, 105, 235, 159, 109, 66, 146, 216, 73, 255, 26, 89, 11, 81, 139, 180, 173, 147, 146, 61, 72, 214, 91, 208, 179, 154, 134, 87, 4, 19, 84, 80, 229, 181, 93, 14, 234, 28, 73, 142, 17, 193, 4, 223, 86, 25, 104, 218, 137, 170, 141, 224, 254, 29, 135, 90, 199, 109, 69, 195, 61, 13, 132, 169, 96, 124, 241, 244, 107, 71, 112, 156, 244, 202, 56, 62, 93, 197, 31, 86, 78, 212, 155, 92, 12, 3, 93, 203, 160, 73, 211, 103, 57, 109, 180, 54, 153, 34, 85, 220, 156, 166, 138, 178, 8, 229, 159, 239, 13, 59, 244, 102, 191, 75, 34, 171, 26, 38, 170, 186, 161, 88, 114, 72, 2, 167, 13, 168, 228, 138, 136, 3, 132, 68, 242, 76, 162, 70, 73, 142, 41, 197, 148, 162, 162, 218, 0, 51, 18, 200, 97, 35, 113, 56, 26, 11, 3, 73, 22, 237, 1, 20, 128, 2, 11, 10, 197, 57, 237, 74, 18, 131, 36, 133, 138, 4, 4, 32, 3, 32, 1, 160, 0, 202, 5, 25, 88, 80, 108, 229, 116, 212, 199, 83, 154, 70, 218, 47, 23, 43, 66, 24, 212, 49, 246, 133, 246, 114, 219, 107, 207, 51, 13, 240, 61, 228, 153, 1, 201, 127, 238, 54, 60, 224, 38, 190, 105, 108, 181, 160, 198, 73, 159, 69, 4, 184, 13, 22, 57, 183, 4, 88, 110, 186, 46, 161, 202, 138, 254, 93, 79, 10, 7, 232, 252, 70, 80, 41, 74, 232, 241, 175, 54, 129, 81, 18, 103, 140, 64, 127, 208, 134, 126, 79, 65, 178, 6, 37, 173, 21, 60, 246, 46, 57, 234, 16, 109, 117, 139, 26, 251, 201, 9, 76, 180, 223, 14, 158, 143, 253, 103, 209, 7, 81, 21, 74, 161, 112, 245, 40, 202, 206, 142, 201, 43, 183, 186, 247, 75, 203, 227, 214, 192, 173, 26, 16, 118, 125, 130, 107, 130, 20, 210, 59, 137, 204, 5, 134, 71, 170, 34, 28, 77, 187, 65, 134, 153, 221, 102, 22, 137, 19, 146, 89, 121, 160, 123, 167, 193, 172, 104, 92, 112, 141, 195, 191, 248, 131, 125, 114, 117, 97, 15, 10, 79, 84, 50, 156, 242, 96, 129, 63, 17, 224, 192, 61, 90, 16, 74, 207, 236, 187, 120, 3, 89, 243, 53, 36, 135, 46, 160, 156, 126, 167, 238, 51, 156, 104, 60, 170, 181, 187, 24, 28, 99, 112, 9, 69, 163, 207, 157, 149, 60, 15, 176, 126, 109, 103, 59, 22, 163, 85, 122, 34, 169, 85, 146, 246, 67, 135, 73, 2, 13, 28, 166, 225, 80, 19, 172, 193, 210, 143, 66, 250, 129, 197, 103, 45, 249, 137, 180, 225, 3, 152, 208, 23, 7, 94, 198, 29, 226, 233, 10, 128, 67, 233, 213, 88, 106, 214, 76, 124, 235, 88, 80, 66, 124, 175, 72, 184, 233, 113, 232, 161, 22, 166, 134, 14, 92, 19, 152, 227, 22, 37, 49, 139, 110, 207, 254, 74, 86, 195, 129, 49, 58, 106, 71, 67, 137, 213, 67, 168, 111, 132, 253, 62, 134, 220, 185, 86, 83, 76, 215, 64, 164, 171, 42, 10, 217, 20, 211, 129, 219, 133, 126, 63, 37, 216, 182, 5, 184, 214, 178, 138, 69, 61, 180, 112, 181, 248, 172, 153, 181, 66, 159, 193, 83, 250, 231, 17, 80, 138, 142, 161, 163, 200, 220, 62, 178, 111, 182, 188, 43, 208, 174, 87, 60, 136, 95, 236, 46, 37, 2, 153, 30, 49, 107, 33, 69, 182, 88, 138, 67, 125, 179, 61, 23, 126, 27, 246, 111, 181, 94, 31, 241, 173, 1, 245, 32, 177, 247, 218, 85, 17, 6, 15, 158, 121, 150, 149, 55, 134, 141, 26, 93, 32, 101, 97, 62, 148, 237, 148, 191, 204, 8, 79, 6, 45, 246, 134, 59, 78, 188, 81, 109, 30, 102, 185, 92, 26, 31, 100, 85, 33, 89, 183, 64, 40, 72, 159, 102, 187, 225, 197, 209, 137, 183, 207, 71, 196, 252, 18, 8, 181, 171, 62, 2, 230, 27, 49, 241, 129, 160, 217, 204, 236, 134, 131, 184, 141, 132, 58, 34, 132, 5, 153, 234, 166, 4, 95, 196, 151, 115, 221, 72, 80, 4, 100, 212, 127, 158, 47, 26, 48, 129, 232, 9, 237, 71, 2, 139, 56, 0, 198, 96, 194, 110, 99, 56, 209, 203, 16, 178, 201, 192, 203, 206, 54, 199, 254, 135, 43, 83, 153, 187, 135, 218, 167, 74, 8, 214, 95, 44, 163, 211, 150, 81, 32, 238, 28, 240, 177, 82, 154, 0, 243, 129, 85, 224, 157, 187, 187, 216, 7, 197, 95, 21, 29, 92, 126, 75, 82, 65, 114, 98, 241, 2, 110, 25, 12, 137, 96, 156, 174, 102, 155, 41, 170, 190, 97, 59, 239, 0, 225, 22, 9, 32, 235, 26, 146, 190, 35, 45, 113, 0, 94, 132, 34, 170, 175, 22, 24, 136, 202, 193, 16, 93, 157, 170, 209, 233, 71, 153, 209, 45, 6, 217, 116, 35, 162, 52, 42, 232, 179, 232, 32, 47, 36, 227, 159, 99, 113, 95, 118, 159, 216, 203, 141, 136, 179, 248, 111, 187, 69, 198, 104, 127, 228, 217, 83, 14, 164, 121, 190, 182, 191, 114, 70, 71, 236, 180, 244, 240, 239, 87, 235, 243, 38, 163, 91, 216, 182, 125, 207, 79, 63, 27, 87, 133, 95, 64, 113, 150, 70, 195, 180, 117, 236, 242, 187, 74, 27, 236, 165, 241, 124, 175, 221, 214, 115, 133, 249, 148, 67, 4, 174, 218, 7, 207, 142, 13, 67, 43, 100, 48, 136, 206, 127, 23, 137, 1, 133, 165, 77, 75, 153, 102, 71, 127, 208, 78, 30, 248, 61, 23, 51, 235, 173, 25, 38, 129, 160, 178, 48, 249, 75, 175, 134, 45, 245, 200, 11, 218, 89, 243, 248, 86, 198, 99, 69, 122, 244, 41, 148, 71, 143, 210, 25, 68, 135, 149, 44, 48, 195, 90, 26, 65, 158, 226, 40, 56, 143, 59, 250, 64, 38, 79, 59, 93, 218, 84, 183, 57, 93, 243, 176, 187, 163, 8, 144, 147, 106, 112, 171, 37, 129, 151, 85, 49, 140, 95, 28, 185, 160, 118, 174, 241, 179, 238, 12, 84, 33, 135, 17, 187, 168, 197, 234, 35, 12, 133, 224, 157, 60, 237, 115, 84, 62, 162, 91, 157, 130, 71, 129, 122, 179, 72, 208, 176, 247, 77, 115, 169, 71, 37, 243, 26, 250, 178, 50, 106, 193, 219, 159, 80, 35, 88, 19, 137, 20, 18, 230, 78, 219, 10, 127, 197, 51, 127, 132, 30, 33, 13, 210, 194, 71, 231, 181, 118, 137, 136, 86, 252, 183, 57, 26, 108, 95, 140, 120, 1, 70, 232, 242, 26, 105, 70, 34, 65, 40, 210, 111, 74, 188, 210, 225, 81, 222, 64, 240, 126, 148, 147, 198, 11, 254, 49, 42, 14, 80, 226, 24, 33, 114, 33, 26, 130, 8, 29, 133, 98, 83, 183, 148, 90, 156, 121, 98, 182, 172, 147, 66, 126, 76, 56, 39, 181, 102, 227, 163, 225, 127, 164, 118, 233, 53, 202, 183, 252, 122, 77, 85, 179, 252, 24, 202, 28, 64, 64, 162, 244, 117, 202, 57, 181, 104, 17, 247, 167, 91, 240, 188, 26, 27, 109, 37, 113, 54, 205, 48, 83, 146, 89, 82, 244, 46, 244, 56, 133, 52, 246, 226, 28, 72, 57, 213, 180, 6, 232, 196, 27, 146, 252, 144, 215, 87, 149, 15, 31, 182, 155, 81, 96, 173, 162, 16, 207, 103, 152, 83, 8, 233, 188, 92, 117, 180, 129, 158, 136, 65, 111, 196, 11, 80, 8, 217, 142, 33, 244, 123, 234, 131, 226, 153, 34, 201, 99, 86, 101, 73, 219, 41, 171, 82, 110, 30, 24, 80, 218, 161, 57, 118, 132, 254, 161, 205, 70, 139, 114, 145, 181, 138, 36, 166, 229, 216, 124, 113, 67, 139, 139, 42, 210, 34, 28, 19, 83, 60, 115, 97, 48, 152, 99, 213, 85, 59, 66, 54, 146, 189, 194, 100, 65, 112, 186, 5, 45, 119, 128, 213, 130, 141, 187, 211, 80, 175, 146, 192, 168, 137, 11, 83, 90, 85, 97, 156, 129, 116, 247, 246, 62, 67, 246, 149, 75, 183, 134, 114, 209, 200, 156, 85, 27, 196, 163, 218, 151, 177, 75, 204, 11, 133, 187, 48, 183, 244, 239, 178, 85, 91, 207, 160, 35, 185, 112, 156, 174, 113, 139, 215, 50, 175, 84, 58, 145, 185, 31, 70, 1, 242, 22, 7, 232, 63, 31, 208, 117, 3, 231, 100, 131, 120, 64, 108, 184, 216, 120, 76, 153, 248, 0, 140, 4, 81, 23, 178, 109, 89, 188, 128, 104, 182, 190, 237, 240, 63, 102, 247, 62, 0, 77, 100, 61, 72, 130, 145, 111, 222, 236, 16, 105, 203, 133, 160, 255, 96, 45, 113, 170, 201, 43, 31, 229, 26, 148, 168, 201, 251, 176, 247, 164, 178, 181, 245, 152, 62, 37, 14, 156, 99, 234, 30, 136, 232, 249, 179, 51, 67, 140, 150, 134, 21, 156, 120, 201, 89, 141, 254, 62, 105, 243, 216, 231, 225, 190, 14, 40, 198, 229, 47, 100, 217, 228, 239, 142, 211, 234, 235, 199, 110, 76, 154, 105, 132, 76, 35, 180, 162, 147, 151, 203, 238, 50, 61, 97, 249, 205, 87, 217, 39, 42, 148, 88, 155, 6, 52, 248, 130, 238, 214, 57, 24, 127, 153, 16, 233, 94, 172, 42, 232, 209, 2, 172, 201, 181, 110, 11, 208, 108, 72, 150, 122, 13, 55, 95, 179, 245, 154, 250, 196, 59, 101, 67, 236, 179, 214, 62, 110, 80, 55, 7, 94, 8, 65, 200, 140, 180, 189, 17, 25, 80, 74, 177, 183, 142, 51, 171, 61, 236, 108, 124, 193, 137, 74, 41, 252, 255, 224, 0, 143, 238, 14, 143, 62, 124, 16, 185, 20, 22, 119, 13, 61, 4, 18, 245, 123, 141, 197, 35, 224, 233, 132, 38, 64, 50, 254, 201, 114, 99, 174, 35, 173, 227, 238, 158, 66, 161, 113, 222, 159, 0, 164, 69, 27, 136, 28, 142, 204, 215, 137, 32, 115, 54, 66, 41, 62, 108, 200, 15, 221, 73, 229, 119, 83, 27, 238, 110, 251, 107, 6, 112, 156, 22, 0, 164, 239, 236, 148, 88, 1, 125, 246, 48, 156, 103, 16, 97, 88, 221, 93, 133, 133, 204, 50, 191, 86, 234, 111, 172, 110, 55, 53, 56, 154, 29, 150, 175, 174, 200, 142, 104, 85, 246, 208, 238, 46, 210, 55, 118, 49, 188, 243, 131, 90, 252, 120, 156, 234, 136, 0, 49, 22, 193, 107, 106, 226, 169, 246, 33, 74, 182, 200, 25, 223, 69, 142, 221, 148, 177, 144, 17, 171, 49, 158, 220, 255, 66, 156, 252, 56, 41, 64, 40, 156, 75, 84, 67, 50, 226, 97, 246, 189, 4, 133, 173, 21, 26, 240, 155, 19, 48, 56, 93, 82, 133, 233, 49, 86, 82, 73, 3, 30, 108, 163, 177, 173, 195, 106, 124, 149, 249, 75, 107, 107, 144, 43, 91, 205, 78, 102, 156, 58, 167, 78, 246, 233, 68, 79, 152, 254, 129, 203, 232, 139, 227, 59, 84, 159, 110, 92, 229, 23, 87, 29, 201, 215, 233, 161, 84, 210, 16, 58, 35, 123, 166, 209, 32, 79, 3, 168, 243, 195, 112, 152, 178, 26, 118, 1, 115, 76, 222, 8, 225, 161, 178, 123, 249, 95, 104, 229, 115, 155, 52, 68, 234, 1, 229, 144, 201, 119, 179, 94, 18, 180, 151, 5, 80, 162, 22, 199, 5, 96, 30, 197, 247, 27, 238, 59, 171, 145, 11, 240, 6, 248, 246, 150, 236, 8, 223, 178, 159, 1, 164, 233, 240, 118, 55, 35, 88, 89, 114, 124, 112, 243, 38, 155, 74, 57, 132, 201, 69, 227, 170, 233, 28, 232, 227, 19, 231, 217, 252, 205, 5, 85, 206, 18, 188, 175, 57, 85, 81, 224, 186, 112, 146, 16, 48, 72, 197, 245, 124, 9, 131, 197, 240, 75, 227, 235, 242, 225, 184, 10, 151, 128, 124, 182, 65, 96, 101, 109, 102, 103, 47, 79, 46, 130, 203, 190, 205, 114, 228, 131, 170, 182, 175, 178, 196, 195, 199, 188, 195, 151, 130, 106, 98, 14, 165, 6, 82, 116, 164, 152, 156, 24, 3, 49, 85, 136, 12, 68, 95, 35, 212, 168, 35, 52, 71, 19, 91, 142, 184, 95, 195, 252, 224, 182, 173, 198, 204, 137, 13, 254, 34, 70, 140, 14, 16, 48, 160, 251, 148, 53, 73, 13, 152, 82, 226, 194, 44, 137, 60, 15, 71, 208, 199, 67, 75, 55, 58, 55, 9, 247, 179, 48, 56, 42, 209, 127, 6, 61, 192, 59, 8, 170, 64, 219, 250, 7, 173, 219, 68, 161, 113, 244, 101, 80, 39, 170, 175, 58, 175, 86, 129, 145, 40, 164, 234, 20, 66, 39, 102, 111, 16, 123, 10, 192, 27, 28, 80, 26, 87, 184, 186, 202, 126, 124, 141, 7, 35, 21, 235, 3, 81, 129, 79, 146, 19, 154, 190, 2, 175, 177, 0, 231, 28, 151, 73, 147, 239, 144, 128, 220, 180, 167, 167, 82, 221, 99, 57, 168, 246, 251, 35, 203, 180, 84, 102, 68, 249, 138, 37, 17, 229, 65, 217, 99, 21, 82, 37, 161, 253, 12, 34, 106, 17, 229, 1, 213, 70, 84, 105, 154, 252, 102, 128, 24, 19, 132, 116, 214, 240, 6, 110, 7, 59, 51, 83, 32, 133, 222, 175, 69, 134, 191, 64, 62, 176, 195, 3, 64, 113, 58, 188, 63, 68, 60, 35, 189, 198, 58, 75, 114, 132, 252, 179, 192, 181, 128, 93, 189, 255, 233, 78, 219, 176, 108, 60, 143, 48, 53, 63, 213, 167, 98, 75, 141, 73, 189, 59, 190, 147, 106, 69, 125, 206, 230, 251, 49, 147, 171, 252, 26, 47, 159, 230, 72, 26, 26, 145, 40, 64, 33, 172, 124, 166, 119, 90, 122, 137, 104, 254, 60, 25, 69, 224, 149, 111, 138, 191, 244, 81, 108, 205, 168, 48, 97, 15, 4, 98, 39, 156, 188, 162, 45, 29, 176, 254, 62, 121, 81, 106, 76, 238, 248, 113, 3, 13, 152, 253, 160, 145, 156, 86, 173, 8, 197, 252, 140, 86, 45, 39, 67, 54, 97, 56, 191, 161, 220, 69, 216, 215, 84, 171, 128, 2, 95, 181, 207, 238, 45, 221, 53, 147, 208, 68, 110, 18, 58, 255, 57, 143, 78, 52, 207, 148, 174, 10, 18, 196, 40, 213, 253, 101, 4, 7, 3, 223, 92, 125, 36, 183, 229, 71, 248, 120, 154, 33, 58, 211, 231, 17, 232, 151, 216, 255, 74, 201, 61, 253, 156, 209, 255, 167, 44, 202, 161, 56, 77, 180, 117, 5, 180, 52, 24, 8, 33, 72, 74, 30, 119, 13, 179, 187, 181, 115, 68, 197, 239, 10, 69, 79, 81, 200, 145, 209, 198, 237, 12, 152, 124, 200, 203, 170, 99, 151, 22, 62, 89, 198, 68, 116, 237, 139, 217, 107, 209, 109, 9, 96, 35, 250, 54, 149, 111, 53, 192, 225, 79, 26, 97, 60, 243, 162, 104, 147, 24, 175, 84, 2, 49, 174, 202, 38, 53, 34, 160, 82, 158, 101, 180, 144, 18, 238, 65, 63, 165, 108, 15, 108, 140, 170, 32, 122, 73, 76, 64, 188, 103, 225, 239, 100, 240, 12, 25, 39, 9, 187, 164, 112, 162, 100, 185, 27, 72, 122, 218, 28, 2, 20, 247, 7, 190, 131, 66, 116, 242, 180, 95, 189, 79, 158, 86, 246, 22, 14, 0, 104, 154, 105, 100, 39, 227, 139, 56, 221, 153, 88, 164, 163, 19, 248, 164, 72, 149, 49, 161, 247, 6, 100, 233, 26, 245, 44, 43, 115, 214, 91, 164, 205, 224, 59, 5, 48, 170, 187, 210, 184, 4, 83, 123, 170, 24, 194, 169, 181, 127, 47, 225, 198, 59, 145, 144, 8, 106, 166, 8, 121, 198, 120, 198, 155, 26, 143, 137, 243, 213, 27, 235, 203, 195, 28, 143, 144, 33, 123, 252, 32, 18, 248, 224, 59, 193, 210, 78, 21, 149, 16, 232, 130, 47, 93, 161, 37, 98, 80, 219, 199, 46, 45, 177, 231, 28, 127, 238, 28, 144, 0, 39, 54, 5, 215, 8, 70, 41, 196, 118, 117, 233, 11, 252, 41, 217, 123, 250, 53, 74, 20, 228, 84, 231, 254, 19, 211, 177, 231, 41, 16, 38, 47, 21, 158, 64, 255, 107, 29, 83, 142, 37, 37, 153, 116, 81, 210, 58, 227, 49, 184, 188, 219, 170, 168, 29, 19, 228, 8, 78, 45, 162, 75, 40, 157, 32, 224, 130, 72, 105, 24, 87, 20, 250, 9, 123, 187, 110, 77, 232, 243, 110, 45, 175, 67, 117, 168, 169, 57, 142, 12, 225, 19, 132, 2, 113, 42, 233, 47, 132, 241, 11, 189, 145, 11, 227, 175, 254, 14, 168, 95, 4, 241, 224, 97, 0, 196, 105, 146, 205, 254, 212, 1, 252, 81, 109, 177, 226, 171, 172, 44, 153, 216, 153, 245, 78, 167, 181, 63, 105, 184, 114, 92, 13, 107, 5, 21, 150, 22, 208, 65, 169, 159, 237, 9, 48, 206, 61, 24, 121, 172, 137, 75, 105, 105, 85, 149, 162, 190, 212, 129, 15, 74, 239, 185, 44, 162, 12, 192, 218, 84, 23, 132, 130, 120, 242, 243, 202, 192, 150, 177, 158, 242, 191, 184, 97, 16, 204, 35, 173, 159, 99, 33, 109, 204, 111, 3, 249, 253, 75, 113, 207, 98, 66, 218, 7, 81, 164, 106, 108, 77, 225, 64, 109, 33, 143, 88, 87, 76, 52, 48, 200, 172, 169, 190, 246, 172, 170, 230, 2, 43, 138, 226, 155, 225, 150, 250, 3, 234, 86, 75, 20, 18, 62, 163, 10, 172, 69, 38, 122, 35, 48, 48, 234, 21, 189, 158, 78, 153, 72, 62, 77, 157, 102, 248, 38, 151, 164, 15, 230, 232, 230, 230, 146, 195, 221, 244, 233, 250, 93, 118, 64, 249, 223, 158, 216, 33, 138, 44, 50, 225, 112, 56, 94, 44, 98, 154, 44, 31, 190, 150, 194, 223, 110, 165, 225, 157, 146, 115, 174, 157, 44, 76, 168, 155, 77, 222, 205, 138, 49, 160, 195, 193, 154, 228, 1, 60, 37, 239, 9, 18, 10, 238, 72, 220, 33, 88, 93, 40, 58, 88, 251, 117, 183, 246, 20, 109, 188, 79, 127, 251, 206, 90, 125, 178, 113, 34, 218, 135, 250, 57, 242, 163, 23, 203, 191, 231, 174, 34, 16, 210, 238, 64, 175, 248, 180, 16, 182, 177, 98, 231, 121, 51, 52, 88, 91, 236, 10, 11, 179, 145, 3, 66, 177, 33, 92, 244, 102, 231, 182, 106, 10, 237, 184, 148, 178, 39, 56, 14, 45, 223, 14, 14, 204, 22, 49, 75, 1, 241, 117, 246, 7, 29, 24, 122, 120, 132, 15, 171, 69, 223, 192, 162, 79, 44, 136, 9, 174, 170, 129, 118, 1, 74, 30, 218, 247, 39, 55, 99, 150, 72, 199, 214, 184, 4, 129, 72, 67, 121, 183, 235, 143, 183, 228, 130, 92, 160, 3, 194, 145, 242, 95, 85, 45, 170, 174, 157, 173, 73, 121, 213, 168, 95, 101, 58, 207, 57, 237, 51, 156, 67, 35, 207, 85, 161, 33, 129, 138, 8, 241, 58, 58, 218, 43, 97, 220, 177, 200, 65, 164, 152, 238, 19, 59, 174, 149, 178, 12, 116, 134, 0, 72, 43, 107, 23, 254, 57, 7, 86, 85, 22, 185, 194, 226, 25, 46, 23, 81, 132, 78, 65, 99, 41, 37, 91, 202, 168, 4, 103, 176, 70, 247, 112, 34, 178, 26, 38, 234, 249, 169, 232, 213, 141, 182, 155, 255, 2, 79, 139, 67, 182, 27, 8, 131, 32, 114, 21, 192, 243, 151, 58, 13, 202, 255, 52, 6, 209, 44, 79, 60, 83, 180, 39, 94, 235, 226, 156, 32, 152, 44, 75, 50, 22, 249, 148, 230, 69, 98, 136, 120, 252, 39, 11, 85, 109, 117, 181, 106, 249, 82, 163, 207, 240, 192, 56, 34, 98, 6, 11, 36, 89, 64, 181, 52, 148, 28, 174, 129, 74, 125, 2, 118, 246, 6, 140, 76, 196, 122, 215, 85, 51, 192, 137, 93, 192, 37, 30, 68, 155, 100, 224, 59, 192, 218, 1, 33, 57, 247, 155, 123, 126, 79, 101, 74, 8, 19, 169, 9, 41, 232, 229, 24, 102, 75, 78, 210, 239, 226, 219, 215, 170, 229, 116, 116, 190, 121, 212, 59, 20, 55, 80, 94, 246, 251, 114, 1, 252, 136, 224, 51, 243, 18, 200, 101, 13, 102, 133, 25, 157, 53, 245, 48, 241, 153, 68, 160, 148, 126, 93, 251, 113, 245, 174, 211, 43, 242, 95, 62, 43, 198, 25, 136, 140, 219, 98, 19, 42, 63, 93, 130, 63, 120, 203, 45, 113, 5, 110, 148, 163, 223, 73, 8, 202, 136, 41, 122, 54, 247, 148, 76, 211, 44, 33, 86, 36, 182, 163, 204, 160, 22, 126, 202, 172, 52, 174, 18, 132, 159, 92, 76, 90, 114, 170, 105, 4, 154, 131, 248, 128, 228, 101, 160, 212, 203, 39, 171, 149, 239, 57, 123, 168, 81, 5, 74, 147, 83, 42, 173, 196, 87, 198, 143, 248, 5, 165, 138, 198, 34, 196, 25, 1, 203, 100, 203, 238, 217, 141, 27, 158, 38, 149, 145, 45, 104, 34, 27, 237, 64, 74, 35, 68, 226, 142, 114, 174, 122, 142, 239, 104, 153, 247, 155, 19, 0, 113, 104, 228, 155, 119, 147, 216, 215, 90, 53, 47, 92, 112, 75, 201, 85, 95, 45, 29, 232, 100, 73, 61, 145, 220, 235, 94, 68, 16, 170, 210, 162, 205, 5, 118, 225, 147, 229, 142, 31, 91, 98, 235, 125, 214, 111, 222, 45, 79, 180, 40, 29, 126, 112, 149, 52, 52, 158, 53, 59, 209, 240, 231, 220, 239, 9, 17, 78, 58, 227, 80, 167, 87, 133, 110, 67, 101, 39, 147, 188, 60, 15, 243, 6, 162, 34, 162, 125, 184, 237, 10, 56, 81, 154, 213, 251, 47, 54, 245, 10, 115, 127, 166, 254, 237, 197, 167, 153, 118, 105, 92, 96, 254, 188, 140, 228, 183, 106, 153, 82, 122, 162, 242, 31, 233, 215, 186, 110, 200, 169, 178, 107, 83, 113, 130, 168, 158, 111, 20, 150, 140, 162, 125, 53, 200, 205, 128, 219, 38, 242, 196, 139, 150, 239, 78, 224, 157, 25, 104, 63, 159, 50, 48, 186, 33, 219, 82, 157, 194, 209, 13, 65, 120, 100, 254, 44, 9, 120, 31, 103, 89, 94, 79, 150, 142, 167, 115, 117, 146, 214, 96, 152, 213, 142, 228, 72, 127, 85, 102, 237, 129, 12, 220, 220, 105, 45, 43, 38, 6, 128, 133, 87, 48, 105, 136, 177, 240, 42, 185, 72, 0, 107, 230, 26, 172, 122, 251, 110, 2, 32, 170, 103, 101, 69, 49, 107, 46, 36, 226, 208, 68, 31, 178, 81, 21, 31, 30, 236, 191, 244, 50, 30, 54, 143, 67, 207, 180, 19, 116, 96, 16, 123, 210, 82, 168, 221, 199, 147, 189, 133, 60, 91, 41, 205, 62, 61, 134, 36, 46, 18, 78, 133, 139, 190, 114, 11, 16, 28, 71, 53, 175, 35, 164, 173, 144, 111, 33, 184, 196, 125, 36, 101, 243, 29, 80, 169, 81, 186, 41, 196, 124, 120, 63, 118, 15, 61, 0, 60, 177, 247, 142, 158, 220, 202, 24, 204, 68, 10, 180, 34, 54, 16, 114, 151, 107, 6, 32, 220, 210, 191, 129, 80, 190, 124, 140, 214, 61, 1, 34, 193, 136, 141, 251, 157, 193, 46, 232, 84, 160, 249, 138, 207, 67, 2, 2, 7, 8, 244, 179, 136, 166, 131, 1, 145, 14, 5, 47, 81, 190, 198, 188, 245, 5, 50, 60, 55, 70, 217, 89, 28, 3, 41, 47, 251, 77, 248, 33, 68, 6, 116, 121, 191, 24, 67, 197, 16, 215, 111, 229, 132, 37, 212, 180, 190, 21, 69, 211, 154, 114, 141, 69, 69, 16, 0, 60, 110, 57, 13, 184, 190, 241, 198, 7, 19, 89, 150, 66, 157, 141, 175, 0, 136, 156, 163, 218, 215, 127, 82, 255, 152, 215, 37, 251, 186, 223, 111, 242, 253, 233, 175, 46, 179, 1, 247, 225, 30, 19, 192, 85, 130, 137, 155, 219, 41, 33, 185, 33, 126, 131, 237, 0, 45, 246, 54, 86, 176, 133, 211, 6, 141, 230, 90, 73, 65, 75, 120, 47, 179, 96, 28, 193, 30, 17, 22, 43, 98, 93, 196, 105, 88, 201, 40, 82, 5, 186, 29, 165, 158, 119, 102, 58, 14, 85, 89, 47, 85, 29, 140, 17, 27, 113, 21, 217, 143, 195, 91, 38, 192, 181, 229, 0, 150, 248, 97, 36, 158, 62, 103, 179, 116, 191, 114, 121, 95, 124, 249, 112, 228, 21, 127, 248, 123, 5, 192, 167, 229, 174, 2, 242, 151, 132, 55, 183, 139, 51, 103, 138, 69, 210, 136, 33, 104, 169, 119, 127, 45, 152, 138, 226, 157, 201, 29, 80, 106, 224, 12, 30, 1, 132, 36, 248, 62, 0, 147, 132, 226, 104, 67, 211, 87, 38, 35, 99, 160, 131, 195, 32, 144, 10, 32, 252, 197, 133, 128, 180, 123, 104, 143, 82, 64, 74, 70, 188, 208, 2, 59, 77, 212, 247, 109, 161, 52, 248, 78, 230, 221, 102, 142, 40, 136, 142, 172, 69, 135, 25, 92, 126, 241, 174, 200, 85, 205, 44, 175, 144, 83, 54, 250, 11, 206, 204, 162, 120, 232, 215, 8, 198, 110, 71, 48, 136, 146, 12, 184, 0, 18, 30, 55, 48, 216, 77, 109, 17, 9, 249, 51, 71, 255, 170, 218, 62, 243, 195, 71, 45, 149, 217, 142, 83, 181, 38, 44, 9, 9, 66, 57, 175, 69, 15, 60, 170, 97, 112, 61, 249, 182, 34, 100, 11, 216, 137, 101, 195, 80, 14, 35, 111, 223, 11, 61, 106, 208, 91, 81, 142, 145, 96, 145, 226, 159, 88, 22, 18, 211, 192, 154, 185, 67, 93, 73, 144, 206, 221, 201, 179, 138, 223, 88, 151, 122, 128, 150, 6, 102, 9, 91, 68, 130, 217, 147, 125, 1, 225, 102, 245, 212, 7, 178, 203, 91, 139, 175, 43, 102, 221, 172, 214, 188, 107, 116, 54, 78, 92, 225, 4, 6, 241, 194, 148, 237, 44, 171, 149, 17, 180, 104, 33, 144, 86, 133, 205, 70, 236, 87, 40, 195, 147, 67, 8, 34, 112, 64, 22, 111, 196, 96, 246, 129, 131, 226, 36, 181, 250, 68, 98, 86, 159, 77, 5, 182, 147, 224, 21, 65, 18, 180, 36, 85, 224, 100, 229, 166, 85, 59, 255, 113, 41, 130, 120, 232, 2, 113, 114, 211, 53, 200, 45, 183, 238, 240, 174, 1, 68, 82, 167, 6, 198, 172, 55, 103, 200, 2, 8, 30, 53, 196, 99, 40, 138, 239, 185, 86, 191, 230, 174, 97, 61, 7, 120, 85, 142, 6, 202, 107, 114, 20, 202, 13, 209, 82, 46, 122, 14, 21, 27, 44, 152, 132, 217, 40, 254, 113, 170, 186, 229, 228, 81, 15, 148, 77, 26, 43, 113, 17, 100, 156, 33, 90, 38, 88, 129, 171, 199, 148, 30, 16, 94, 95, 182, 24, 159, 4, 96, 106, 98, 219, 36, 73, 218, 79, 152, 152, 176, 159, 34, 13, 80, 54, 176, 157, 191, 128, 46, 230, 117, 199, 127, 8, 36, 208, 7, 237, 41, 241, 160, 116, 172, 181, 90, 94, 233, 130, 233, 225, 35, 53, 155, 106, 115, 118, 192, 220, 118, 190, 248, 170, 110, 113, 23, 171, 120, 176, 247, 181, 130, 172, 197, 44, 111, 239, 3, 89, 217, 108, 182, 120, 190, 62, 138, 226, 232, 31, 233, 3, 77, 114, 53, 228, 157, 129, 209, 233, 26, 245, 254, 235, 164, 195, 194, 50, 73, 225, 14, 225, 251, 100, 59, 93, 167, 134, 171, 186, 46, 101, 169, 205, 33, 87, 23, 97, 138, 116, 226, 51, 2, 229, 221, 188, 16, 219, 175, 168, 202, 198, 113, 51, 183, 116, 137, 139, 224, 233, 20, 110, 121, 47, 206, 155, 201, 166, 114, 226, 30, 186, 157, 124, 241, 5, 119, 99, 101, 106, 151, 49, 60, 206, 210, 16, 66, 2, 247, 168, 159, 166, 192, 198, 55, 217, 22, 126, 235, 14, 203, 81, 72, 142, 194, 187, 42, 118, 189, 167, 4, 199, 59, 110, 8, 88, 121, 247, 138, 57, 180, 45, 96, 77, 227, 228, 29, 187, 65, 173, 142, 96, 100, 26, 22, 160, 88, 108, 210, 83, 138, 196, 35, 9, 58, 176, 71, 59, 21, 128, 59, 166, 47, 114, 158, 226, 145, 144, 199, 35, 25, 219, 22, 38, 104, 119, 65, 4, 222, 170, 224, 89, 206, 26, 96, 161, 59, 62, 37, 201, 27, 92, 91, 201, 64, 220, 109, 103, 222, 7, 100, 225, 114, 221, 19, 47, 192, 117, 243, 236, 23, 100, 113, 251, 111, 69, 196, 144, 237, 22, 0, 243, 251, 138, 240, 123, 95, 168, 224, 167, 223, 133, 197, 143, 144, 126, 100, 139, 36, 120, 185, 19, 175, 240, 251, 66, 46, 56, 197, 169, 168, 17, 168, 218, 183, 9, 186, 123, 140, 168, 226, 74, 117, 140, 191, 210, 161, 96, 53, 229, 192, 250, 224, 73, 189, 235, 153, 225, 28, 2, 12, 95, 25, 130, 167, 139, 189, 24, 71, 2, 102, 46, 149, 137, 237, 194, 61, 67, 138, 20, 249, 40, 35, 24, 176, 188, 60, 122, 73, 231, 156, 204, 253, 245, 41, 229, 144, 192, 152, 102, 71, 6, 241, 0, 37, 176, 223, 91, 213, 236, 216, 245, 235, 127, 83, 130, 229, 102, 244, 219, 40, 236, 135, 5, 153, 88, 186, 213, 62, 120, 187, 115, 9, 181, 44, 8, 212, 111, 78, 255, 237, 244, 101, 133, 113, 169, 31, 28, 202, 147, 120, 190, 147, 133, 123, 14, 223, 120, 41, 71, 114, 51, 165, 6, 90, 90, 113, 207, 246, 150, 40, 143, 124, 73, 170, 193, 232, 107, 43, 98, 59, 25, 123, 59, 250, 108, 7, 21, 105, 79, 72, 113, 27, 1, 88, 37, 20, 218, 254, 183, 233, 14, 124, 16, 59, 17, 164, 162, 242, 247, 9, 80, 7, 183, 151, 68, 41, 48, 22, 53, 134, 88, 223, 113, 154, 95, 205, 178, 170, 125, 216, 45, 152, 141, 76, 33, 184, 43, 186, 41, 151, 115, 223, 224, 97, 100, 154, 30, 74, 20, 148, 113, 180, 100, 226, 221, 19, 143, 119, 182, 45, 90, 99, 157, 90, 57, 80, 58, 227, 107, 36, 177, 138, 144, 245, 78, 4, 218, 205, 154, 147, 59, 62, 163, 67, 7, 174, 32, 91, 254, 145, 126, 187, 221, 208, 92, 111, 73, 170, 173, 107, 59, 69, 78, 7, 171, 135, 241, 148, 138, 50, 40, 228, 138, 10, 229, 228, 145, 95, 223, 13, 161, 183, 245, 41, 150, 149, 199, 7, 255, 138, 221, 142, 172, 65, 53, 31, 230, 47, 229, 126, 42, 131, 66, 18, 77, 203, 6, 206, 228, 215, 192, 209, 175, 98, 184, 159, 241, 106, 95, 255, 111, 55, 45, 234, 212, 4, 32, 208, 111, 37, 212, 53, 129, 70, 168, 156, 151, 188, 2, 121, 154, 140, 84, 155, 164, 51, 114, 142, 45, 24, 51, 99, 137, 224, 147, 212, 26, 220, 163, 19, 39, 180, 215, 53, 165, 162, 182, 233, 59, 221, 11, 90, 237, 112, 78, 36, 117, 233, 23, 229, 192, 94, 99, 96, 118, 171, 57, 42, 16, 98, 175, 43, 171, 196, 248, 18, 57, 19, 98, 181, 237, 235, 184, 177, 155, 6, 83, 179, 70, 162, 221, 121, 216, 116, 116, 200, 193, 164, 252, 59, 216, 48, 104, 112, 42, 207, 152, 246, 91, 109, 141, 68, 104, 49, 225, 210, 8, 79, 179, 62, 10, 31, 156, 189, 216, 179, 81, 102, 220, 79, 187, 167, 207, 11, 119, 83, 130, 24, 100, 215, 115, 143, 96, 213, 132, 109, 77, 35, 168, 40, 247, 133, 60, 53, 179, 26, 159, 70, 149, 59, 249, 130, 175, 113, 97, 166, 123, 156, 54, 129, 126, 197, 171, 18, 105, 91, 254, 211, 78, 233, 206, 145, 166, 101, 97, 32, 157, 236, 137, 252, 183, 59, 234, 219, 181, 236, 190, 76, 56, 145, 170, 245, 59, 208, 29, 16, 116, 45, 138, 135, 248, 118, 228, 3, 251, 244, 177, 85, 107, 13, 57, 60, 35, 237, 73, 5, 58, 140, 120, 165, 47, 223, 127, 98, 136, 84, 16, 18, 225, 126, 38, 100, 120, 35, 194, 204, 170, 144, 253, 217, 18, 86, 133, 225, 191, 220, 178, 177, 11, 51, 146, 205, 132, 128, 33, 90, 195, 234, 116, 68, 20, 73, 194, 135, 137, 0, 16, 169, 243, 123, 5, 130, 172, 162, 48, 240, 232, 208, 158, 32, 49, 140, 245, 51, 37, 131, 92, 67, 126, 44, 13, 31, 62, 240, 80, 131, 136, 187, 222, 199, 19, 28, 229, 240, 122, 208, 244, 180, 58, 232, 46, 1, 83, 171, 236, 220, 69, 6, 43, 152, 203, 3, 16, 246, 17, 69, 116, 54, 64, 9, 240, 109, 189, 32, 237, 189, 153, 148, 107, 2, 7, 224, 144, 242, 114, 76, 46, 66, 91, 31, 228, 112, 115, 124, 108, 39, 108, 225, 232, 245, 175, 122, 57, 47, 175, 12, 179, 39, 27, 172, 167, 249, 76, 135, 106, 133, 82, 162, 27, 220, 11, 94, 144, 228, 95, 114, 158, 217, 58, 24, 211, 24, 42, 118, 88, 178, 81, 163, 27, 41, 116, 193, 231, 88, 164, 166, 21, 95, 207, 245, 47, 245, 173, 56, 11, 144, 87, 124, 231, 79, 214, 60, 160, 185, 39, 102, 146, 204, 70, 202, 222, 203, 101, 183, 165, 180, 33, 216, 127, 96, 249, 7, 143, 237, 96, 186, 72, 40, 64, 213, 23, 251, 103, 123, 251, 135, 182, 237, 169, 43, 46, 30, 140, 133, 53, 127, 17, 18, 37, 31, 123, 86, 187, 5, 75, 64, 27, 13, 175, 180, 152, 249, 135, 82, 16, 139, 136, 204, 175, 27, 135, 255, 204, 39, 223, 160, 78, 6, 151, 95, 65, 13, 41, 64, 93, 64, 1, 218, 99, 109, 134, 201, 25, 62, 0, 191, 212, 140, 170, 8, 19, 28, 119, 45, 2, 53, 228, 169, 150, 252, 218, 233, 121, 176, 198, 208, 137, 58, 62, 37, 8, 150, 83, 247, 152, 133, 121, 85, 85, 2, 54, 179, 179, 105, 251, 99, 239, 223, 90, 42, 76, 49, 187, 250, 187, 197, 150, 141, 139, 36, 178, 143, 241, 206, 44, 80, 255, 14, 198, 156, 112, 154, 232, 11, 75, 53, 213, 83, 123, 94, 141, 155, 201, 113, 241, 56, 70, 252, 64, 158, 166, 165, 96, 152, 186, 2, 92, 3, 114, 52, 156, 134, 7, 222, 31, 90, 137, 52, 48, 12, 201, 84, 147, 254, 138, 19, 184, 114, 245, 138, 7, 90, 49, 167, 145, 107, 182, 83, 253, 40, 52, 160, 187, 243, 67, 151, 81, 3, 218, 68, 56, 202, 178, 144, 175, 238, 77, 145, 191, 171, 245, 128, 4, 208, 195, 102, 119, 57, 240, 6, 66, 254, 211, 45, 130, 58, 225, 51, 99, 73, 13, 56, 58, 28, 35, 110, 33, 180, 51, 26, 140, 70, 26, 229, 180, 229, 176, 138, 226, 9, 134, 129, 185, 187, 239, 223, 2, 229, 233, 150, 121, 138, 51, 41, 143, 68, 57, 118, 56, 31, 87, 195, 1, 75, 87, 156, 253, 225, 48, 243, 60, 94, 212, 205, 205, 151, 180, 100, 135, 245, 23, 108, 18, 5, 132, 244, 135, 177, 10, 37, 12, 28, 10, 127, 93, 103, 207, 148, 27, 227, 93, 148, 246, 204, 17, 88, 121, 29, 100, 198, 40, 185, 62, 104, 157, 5, 56, 71, 213, 100, 127, 249, 128, 244, 137, 235, 154, 144, 197, 8, 208, 124, 114, 242, 13, 251, 50, 254, 34, 91, 56, 10, 193, 195, 147, 85, 84, 21, 114, 112, 185, 50, 108, 118, 235, 123, 103, 247, 179, 202, 50, 17, 200, 66, 193, 58, 63, 43, 104, 163, 165, 140, 252, 54, 59, 102, 13, 117, 138, 175, 183, 48, 220, 215, 173, 86, 24, 135, 190, 226, 209, 212, 8, 111, 15, 152, 3, 126, 226, 149, 168, 204, 178, 165, 4, 230, 32, 34, 8, 79, 242, 94, 100, 141, 5, 125, 159, 109, 205, 161, 61, 95, 14, 59, 3, 132, 196, 133, 176, 198, 172, 25, 243, 70, 148, 96, 196, 241, 24, 65, 116, 30, 177, 162, 251, 228, 156, 147, 77, 244, 65, 138, 223, 212, 22, 40, 122, 1, 202, 219, 51, 101, 78, 118, 96, 101, 146, 112, 10, 172, 36, 211, 254, 136, 208, 48, 88, 82, 217, 33, 32, 148, 185, 234, 217, 100, 29, 141, 88, 247, 168, 34, 215, 165, 136, 149, 42, 203, 97, 227, 69, 216, 67, 65, 14, 27, 19, 84, 33, 141, 58, 75, 72, 178, 44, 16, 160, 251, 174, 94, 248, 52, 184, 125, 190, 77, 251, 88, 72, 11, 153, 160, 127, 77, 22, 127, 219, 245, 89, 76, 136, 192, 202, 239, 219, 248, 248, 171, 164, 198, 78, 148, 85, 159, 72, 218, 223, 99, 53, 38, 201, 186, 121, 68, 137, 194, 174, 136, 239, 224, 160, 67, 111, 220, 229, 93, 245, 31, 250, 193, 91, 110, 252, 12, 7, 131, 47, 62, 73, 10, 100, 129, 88, 40, 230, 245, 208, 146, 14, 132, 120, 204, 222, 135, 68, 47, 222, 19, 60, 161, 7, 67, 64, 68, 70, 29, 152, 64, 7, 183, 251, 225, 148, 61, 155, 127, 233, 89, 112, 169, 73, 157, 76, 150, 85, 219, 41, 71, 220, 234, 15, 173, 98, 124, 209, 206, 71, 56, 201, 187, 64, 16, 103, 159, 78, 9, 84, 187, 250, 154, 196, 49, 125, 168, 154, 127, 40, 15, 139, 198, 155, 71, 7, 80, 98, 219, 105, 202, 183, 96, 32, 115, 28, 168, 81, 69, 23, 103, 33, 219, 47, 154, 131, 125, 7, 229, 140, 163, 248, 62, 156, 231, 8, 141, 34, 232, 193, 150, 171, 224, 190, 62, 76, 47, 203, 161, 1, 186, 3, 67, 55, 0, 117, 153, 152, 165, 90, 146, 124, 169, 150, 90, 241, 163, 67, 146, 64, 13, 165, 218, 131, 135, 166, 193, 186, 200, 149, 8, 55, 9, 227, 66, 157, 212, 226, 97, 91, 172, 199, 196, 59, 131, 75, 170, 88, 8, 242, 30, 148, 211, 214, 208, 102, 225, 102, 165, 119, 155, 69, 208, 18, 168, 81, 84, 153, 79, 240, 92, 216, 36, 99, 75, 125, 249, 93, 182, 54, 232, 169, 235, 184, 210, 169, 104, 11, 163, 110, 116, 174, 218, 205, 75, 188, 68, 8, 194, 219, 137, 103, 93, 23, 10, 64, 49, 217, 198, 215, 166, 151, 189, 209, 148, 92, 61, 14, 11, 101, 129, 79, 230, 112, 234, 42, 125, 185, 107, 178, 135, 186, 78, 220, 33, 145, 91, 144, 176, 224, 134, 93, 16, 202, 31, 211, 10, 221, 21, 202, 245, 141, 245, 51, 147, 27, 192, 146, 205, 175, 255, 21, 186, 205, 62, 177, 127, 20, 231, 2, 81, 3, 161, 67, 225, 24, 66, 9, 102, 150, 218, 178, 3, 255, 65, 4, 141, 81, 0, 197, 134, 168, 72, 163, 246, 235, 224, 14, 62, 70, 205, 42, 161, 183, 151, 76, 86, 78, 101, 168, 253, 154, 46, 206, 132, 135, 104, 60, 217, 8, 128, 64, 60, 88, 6, 152, 85, 189, 49, 186, 230, 62, 156, 64, 47, 172, 148, 77, 114, 199, 27, 222, 122, 225, 213, 230, 57, 233, 175, 32, 113, 1, 36, 30, 146, 82, 127, 199, 75, 195, 196, 117, 250, 190, 80, 4, 229, 168, 125, 109, 55, 135, 0, 189, 75, 14, 58, 177, 239, 93, 131, 234, 227, 168, 209, 224, 140, 99, 240, 36, 225, 141, 184, 71, 253, 235, 142, 103, 83, 120, 97, 74, 94, 20, 13, 176, 36, 55, 204, 132, 64, 162, 157, 251, 233, 127, 119, 51, 143, 194, 94, 249, 60, 10, 141, 252, 138, 129, 160, 193, 213, 122, 197, 216, 74, 4, 20, 59, 47, 197, 124, 199, 186, 87, 30, 88, 120, 70, 15, 171, 134, 218, 144, 167, 229, 168, 35, 179, 203, 208, 151, 121, 47, 192, 83, 179, 102, 112, 147, 20, 118, 169, 148, 69, 103, 200, 134, 204, 254, 162, 24, 3, 120, 7, 194, 166, 163, 175, 153, 35, 252, 209, 15, 164, 29, 133, 23, 74, 177, 174, 196, 118, 97, 220, 139, 245, 22, 58, 125, 146, 250, 198, 163, 228, 225, 101, 103, 214, 180, 18, 111, 105, 127, 33, 249, 2, 217, 144, 86, 167, 107, 236, 76, 40, 72, 64, 24, 94, 2, 238, 173, 42, 26, 117, 41, 124, 44, 108, 0, 7, 49, 228, 158, 225, 78, 88, 247, 141, 142, 242, 207, 128, 58, 142, 40, 141, 36, 93, 17, 54, 9, 210, 175, 248, 170, 142, 121, 4, 221, 108, 1, 184, 162, 113, 221, 64, 181, 30, 9, 32, 13, 69, 14, 154, 11, 237, 136, 237, 188, 146, 233, 171, 57, 159, 80, 235, 12, 80, 151, 11, 42, 157, 137, 44, 104, 53, 241, 188, 62, 99, 253, 118, 220, 242, 169, 182, 146, 31, 113, 19, 16, 61, 6, 75, 128, 18, 5, 52, 168, 187, 7, 139, 94, 14, 12, 107, 223, 20, 134, 162, 13, 12, 142, 51, 39, 158, 99, 191, 124, 233, 4, 96, 172, 172, 84, 138, 84, 49, 91, 8, 133, 190, 160, 59, 122, 114, 72, 82, 57, 6, 93, 108, 9, 88, 252, 240, 247, 185, 170, 28, 163, 243, 228, 81, 212, 118, 86, 5, 30, 20, 80, 46, 173, 177, 119, 216, 111, 84, 139, 132, 97, 122, 67, 108, 176, 171, 31, 192, 71, 108, 22, 65, 42, 83, 221, 166, 15, 32, 207, 141, 92, 177, 170, 65, 169, 83, 65, 54, 118, 184, 156, 7, 197, 130, 29, 9, 157, 87, 71, 235, 66, 54, 225, 220, 48, 160, 193, 88, 185, 231, 251, 229, 157, 118, 66, 206, 143, 242, 42, 72, 52, 178, 243, 198, 193, 43, 12, 81, 121, 178, 65, 82, 39, 113, 135, 191, 197, 25, 142, 148, 52, 46, 123, 192, 188, 246, 95, 87, 173, 225, 162, 39, 182, 51, 169, 185, 228, 25, 115, 30, 210, 225, 47, 168, 93, 139, 76, 121, 224, 61, 30, 24, 45, 34, 37, 181, 180, 128, 113, 155, 43, 70, 224, 60, 218, 30, 252, 249, 131, 154, 168, 9, 191, 85, 234, 233, 1, 44, 212, 224, 137, 138, 217, 13, 22, 242, 242, 53, 56, 105, 189, 221, 117, 62, 23, 174, 5, 224, 90, 248, 165, 13, 60, 67, 82, 189, 152, 105, 3, 139, 183, 12, 172, 166, 171, 255, 217, 124, 209, 99, 54, 24, 190, 163, 255, 2, 240, 164, 227, 85, 33, 161, 145, 116, 165, 236, 167, 159, 144, 242, 3, 146, 19, 50, 41, 147, 107, 91, 175, 196, 255, 199, 237, 77, 251, 219, 134, 189, 244, 68, 254, 6, 75, 127, 198, 102, 251, 159, 11, 184, 93, 83, 138, 212, 140, 140, 6, 36, 173, 187, 180, 108, 151, 133, 118, 66, 79, 12, 118, 208, 46, 125, 226, 42, 57, 213, 210, 197, 108, 152, 71, 173, 149, 135, 237, 62, 232, 173, 29, 172, 126, 113, 71, 106, 218, 86, 188, 1, 33, 158, 245, 155, 87, 41, 192, 89, 211, 249, 179, 104, 18, 33, 85, 24, 147, 141, 184, 80, 179, 223, 73, 21, 49, 7, 51, 100, 176, 0, 147, 244, 197, 172, 193, 132, 53, 85, 13, 245, 234, 12, 200, 81, 229, 103, 54, 92, 103, 85, 26, 128, 20, 35, 187, 4, 27, 213, 225, 155, 33, 131, 173, 198, 30, 7, 9, 53, 196, 10, 94, 237, 163, 5, 172, 28, 113, 80, 194, 43, 145, 4, 236, 3, 72, 133, 153, 203, 227, 3, 246, 104, 97, 142, 157, 88, 45, 227, 179, 186, 37, 91, 31, 179, 62, 102, 144, 76, 199, 215, 113, 163, 177, 129, 129, 96, 215, 157, 4, 245, 192, 127, 80, 107, 219, 227, 216, 148, 203, 227, 212, 164, 165, 165, 83, 55, 18, 157, 178, 38, 72, 132, 180, 238, 70, 3, 12, 5, 97, 58, 155, 168, 184, 115, 175, 123, 17, 168, 187, 243, 74, 109, 199, 96, 126, 228, 98, 132, 15, 144, 164, 246, 57, 19, 83, 230, 184, 222, 50, 245, 22, 162, 245, 162, 146, 89, 186, 89, 5, 177, 128, 97, 29, 86, 147, 172, 67, 139, 249, 165, 137, 110, 149, 113, 229, 162, 164, 59, 218, 41, 17, 124, 43, 130, 13, 113, 199, 215, 165, 33, 146, 8, 220, 14, 151, 124, 1, 70, 231, 102, 246, 217, 176, 97, 79, 191, 243, 204, 172, 78, 71, 4, 239, 151, 227, 221, 255, 133, 178, 140, 248, 91, 235, 79, 111, 48, 181, 151, 236, 142, 165, 198, 189, 28, 53, 136, 250, 153, 75, 195, 82, 131, 204, 217, 175, 219, 137, 72, 87, 207, 28, 73, 112, 14, 44, 55, 68, 97, 88, 27, 154, 179, 9, 200, 145, 146, 232, 191, 19, 150, 223, 15, 205, 21, 161, 118, 30, 188, 186, 171, 208, 8, 63, 88, 180, 56, 192, 72, 228, 135, 104, 243, 190, 238, 39, 179, 179, 122, 84, 54, 120, 48, 154, 174, 253, 192, 59, 249, 111, 119, 73, 17, 139, 121, 27, 98, 57, 161, 222, 147, 146, 37, 54, 159, 66, 191, 158, 89, 60, 147, 6, 126, 84, 165, 19, 22, 147, 43, 148, 87, 63, 174, 214, 178, 22, 233, 112, 25, 157, 123, 118, 219, 179, 249, 182, 114, 217, 218, 80, 33, 248, 103, 89, 0, 87, 200, 154, 249, 23, 157, 67, 106, 97, 249, 183, 20, 67, 56, 75, 84, 176, 40, 0, 50, 144, 58, 38, 89, 93, 107, 197, 123, 90, 164, 99, 48, 17, 13, 212, 121, 152, 96, 84, 166, 118, 106, 128, 230, 107, 95, 26, 107, 4, 161, 48, 191, 181, 197, 150, 66, 18, 252, 11, 235, 79, 238, 66, 233, 26, 137, 89, 16, 5, 249, 174, 96, 250, 242, 12, 16, 241, 94, 73, 232, 36, 244, 54, 140, 38, 43, 213, 89, 53, 115, 212, 223, 21, 84, 167, 119, 246, 0, 5, 218, 87, 141, 124, 140, 206, 146, 171, 26, 171, 128, 9, 221, 33, 116, 110, 98, 87, 46, 11, 34, 41, 60, 123, 115, 8, 168, 183, 63, 117, 171, 129, 157, 216, 92, 75, 128, 46, 59, 169, 53, 33, 115, 65, 162, 155, 178, 128, 25, 109, 237, 41, 89, 107, 48, 23, 79, 191, 16, 205, 172, 148, 171, 201, 246, 104, 166, 6, 134, 23, 233, 136, 106, 157, 246, 136, 102, 57, 76, 34, 221, 231, 144, 129, 9, 26, 234, 97, 208, 33, 94, 134, 86, 25, 206, 224, 129, 138, 240, 108, 64, 17, 97, 248, 188, 16, 16, 184, 9, 123, 43, 18, 135, 33, 252, 11, 100, 46, 42, 20, 209, 144, 173, 136, 115, 65, 129, 236, 137, 53, 9, 5, 109, 211, 100, 75, 199, 57, 141, 40, 42, 32, 10, 66, 177, 93, 91, 215, 170, 24, 79, 41, 9, 230, 65, 104, 193, 139, 75, 233, 180, 90, 204, 152, 170, 244, 35, 149, 77, 41, 120, 50, 106, 72, 8, 103, 152, 32, 198, 161, 133, 129, 250, 38, 148, 229, 225, 133, 5, 81, 134, 16, 45, 17, 145, 114, 193, 12, 41, 18, 161, 219, 118, 197, 208, 151, 77, 227, 115, 137, 121, 225, 156, 42, 251, 13, 233, 206, 235, 129, 94, 197, 158, 104, 19, 26, 117, 164, 6, 236, 54, 97, 246, 84, 239, 138, 233, 18, 151, 202, 152, 137, 218, 168, 73, 128, 167, 7, 162, 193, 86, 129, 128, 95, 5, 237, 98, 57, 8, 155, 11, 199, 247, 109, 71, 90, 58, 206, 232, 80, 164, 210, 115, 126, 230, 26, 251, 216, 109, 3, 37, 203, 62, 194, 123, 27, 87, 107, 146, 154, 64, 194, 130, 148, 138, 89, 40, 242, 253, 235, 64, 128, 99, 74, 225, 162, 211, 246, 170, 219, 168, 158, 47, 173, 210, 184, 231, 53, 225, 124, 18, 57, 137, 223, 144, 48, 164, 114, 106, 209, 216, 70, 29, 69, 114, 131, 174, 112, 40, 234, 73, 138, 176, 194, 110, 119, 204, 79, 241, 81, 1, 18, 72, 164, 80, 97, 203, 114, 152, 4, 27, 118, 67, 177, 81, 49, 58, 15, 106, 163, 227, 43, 14, 91, 251, 72, 129, 99, 15, 173, 239, 36, 41, 54, 107, 131, 4, 66, 9, 42, 152, 125, 34, 68, 170, 80, 188, 250, 63, 62, 198, 231, 62, 246, 254, 127, 11, 248, 242, 76, 15, 173, 32, 230, 106, 145, 228, 85, 175, 156, 71, 40, 30, 78, 202, 15, 233, 254, 63, 68, 191, 238, 126, 87, 79, 31, 78, 135, 113, 199, 114, 193, 181, 215, 192, 108, 128, 120, 62, 34, 247, 87, 5, 111, 105, 244, 85, 56, 77, 112, 206, 109, 50, 74, 1, 163, 18, 158, 27, 21, 65, 122, 11, 232, 11, 85, 145, 177, 4, 246, 1, 133, 84, 70, 68, 61, 155, 51, 232, 150, 77, 34, 2, 64, 205, 110, 1, 179, 229, 251, 168, 238, 45, 9, 246, 52, 91, 13, 93, 109, 252, 70, 184, 105, 79, 40, 199, 91, 65, 31, 2, 163, 248, 150, 245, 2, 208, 223, 162, 18, 170, 125, 201, 16, 195, 242, 148, 17, 197, 153, 149, 234, 129, 134, 71, 30, 146, 2, 227, 248, 213, 121, 212, 153, 29, 101, 7, 246, 119, 92, 30, 63, 55, 73, 129, 27, 128, 162, 96, 10, 248, 250, 55, 99, 115, 129, 101, 230, 163, 14, 8, 158, 92, 159, 97, 2, 192, 149, 22, 3, 196, 9, 176, 114, 137, 2, 104, 182, 5, 134, 58, 60, 97, 146, 148, 6, 54, 33, 203, 162, 53, 23, 50, 45, 30, 228, 13, 233, 55, 200, 65, 150, 39, 104, 168, 200, 140, 65, 178, 143, 114, 40, 64, 225, 60, 43, 248, 40, 191, 0, 138, 172, 254, 185, 91, 2, 67, 184, 237, 169, 95, 69, 57, 162, 110, 78, 143, 92, 24, 7, 4, 63, 151, 107, 144, 82, 60, 19, 170, 227, 90, 163, 221, 81, 180, 224, 102, 136, 144, 152, 237, 77, 247, 168, 212, 87, 160, 135, 76, 58, 139, 227, 103, 212, 184, 10, 77, 150, 189, 39, 90, 149, 197, 204, 253, 99, 171, 79, 66, 202, 131, 89, 1, 15, 10, 85, 202, 30, 107, 110, 156, 181, 213, 87, 68, 44, 0, 13, 19, 69, 235, 242, 150, 69, 138, 65, 200, 55, 48, 178, 69, 211, 139, 121, 53, 182, 165, 252, 203, 117, 40, 100, 248, 16, 110, 70, 94, 39, 211, 236, 178, 194, 163, 191, 249, 233, 188, 244, 124, 122, 192, 107, 230, 78, 27, 175, 65, 222, 1, 217, 198, 37, 181, 19, 162, 241, 159, 133, 55, 110, 82, 134, 43, 192, 149, 126, 201, 214, 254, 223, 73, 62, 227, 220, 138, 83, 117, 190, 169, 25, 161, 135, 38, 83, 133, 204, 56, 212, 115, 38, 88, 46, 237, 27, 228, 40, 68, 24, 169, 116, 28, 119, 95, 36, 205, 134, 129, 220, 194, 44, 198, 222, 121, 227, 126, 192, 26, 175, 204, 149, 162, 71, 159, 158, 238, 116, 123, 249, 201, 74, 206, 30, 11, 40, 16, 72, 162, 42, 127, 197, 252, 159, 6, 9, 3, 110, 70, 213, 133, 181, 153, 92, 140, 105, 86, 185, 71, 115, 231, 85, 241, 218, 137, 34, 32, 52, 195, 234, 49, 220, 123, 165, 126, 247, 177, 10, 69, 93, 145, 71, 89, 211, 206, 234, 148, 198, 199, 206, 211, 35, 19, 96, 130, 231, 137, 108, 217, 123, 17, 167, 78, 141, 242, 196, 17, 129, 9, 159, 237, 183, 133, 1, 95, 26, 231, 8, 204, 152, 184, 96, 56, 144, 136, 128, 42, 236, 247, 18, 217, 172, 141, 57, 187, 21, 23, 198, 26, 109, 218, 180, 199, 199, 52, 118, 164, 120, 51, 3, 19, 152, 144, 249, 152, 74, 129, 82, 55, 204, 102, 66, 211, 97, 180, 104, 113, 209, 27, 229, 238, 44, 123, 251, 114, 201, 0, 8, 11, 126, 113, 102, 100, 1, 233, 218, 52, 166, 231, 69, 75, 10, 166, 179, 78, 191, 117, 254, 97, 201, 153, 1, 179, 188, 140, 137, 132, 34, 108, 132, 26, 216, 175, 234, 36, 196, 161, 45, 149, 180, 217, 174, 75, 129, 84, 205, 21, 110, 248, 108, 53, 154, 47, 4, 152, 72, 146, 46, 208, 106, 168, 37, 201, 232, 44, 211, 129, 57, 134, 251, 150, 29, 46, 60, 104, 20, 67, 56, 116, 61, 181, 52, 191, 143, 128, 5, 214, 81, 68, 73, 182, 179, 32, 23, 84, 124, 205, 49, 41, 137, 195, 167, 189, 38, 89, 22, 118, 242, 76, 52, 158, 92, 160, 224, 36, 154, 168, 212, 60, 182, 143, 12, 51, 123, 142, 80, 60, 112, 0, 213, 34, 3, 27, 161, 9, 108, 141, 28, 97, 102, 130, 29, 95, 191, 220, 148, 138, 190, 64, 49, 170, 159, 245, 227, 255, 3, 116, 128, 174, 124, 214, 165, 98, 78, 9, 216, 65, 206, 0, 240, 109, 119, 67, 165, 0, 22, 168, 170, 130, 2, 94, 14, 206, 158, 149, 157, 26, 44, 241, 21, 176, 84, 200, 91, 59, 14, 3, 138, 69, 84, 146, 150, 138, 226, 172, 18, 96, 49, 156, 163, 18, 212, 26, 169, 99, 98, 8, 205, 231, 18, 191, 36, 118, 189, 185, 60, 128, 83, 107, 88, 253, 42, 205, 163, 48, 163, 18, 221, 148, 128, 219, 103, 135, 36, 168, 232, 116, 68, 122, 38, 10, 62, 71, 41, 169, 34, 131, 174, 122, 58, 59, 82, 24, 59, 79, 184, 118, 242, 27, 214, 199, 140, 39, 105, 78, 148, 153, 43, 176, 126, 83, 217, 240, 118, 100, 76, 234, 70, 92, 22, 48, 46, 216, 75, 133, 119, 92, 108, 32, 99, 211, 25, 142, 175, 226, 156, 53, 178, 36, 117, 218, 218, 130, 5, 49, 215, 164, 191, 34, 234, 90, 1, 60, 151, 105, 226, 255, 94, 126, 182, 52, 164, 105, 139, 126, 178, 244, 160, 252, 170, 140, 160, 99, 186, 139, 43, 143, 92, 129, 250, 33, 139, 91, 252, 207, 17, 154, 169, 53, 140, 170, 64, 216, 181, 181, 69, 231, 198, 224, 170, 71, 21, 82, 187, 224, 216, 164, 51, 161, 2, 68, 131, 137, 107, 206, 196, 203, 20, 77, 51, 160, 234, 153, 61, 217, 109, 184, 164, 61, 249, 210, 156, 67, 254, 94, 254, 35, 139, 189, 123, 49, 111, 194, 101, 82, 135, 234, 205, 215, 109, 63, 84, 79, 221, 20, 132, 133, 79, 208, 84, 170, 123, 187, 24, 159, 243, 26, 124, 217, 103, 225, 238, 200, 80, 47, 245, 48, 17, 219, 60, 162, 146, 241, 182, 133, 72, 132, 4, 206, 197, 20, 181, 1, 135, 121, 121, 102, 202, 98, 211, 29, 88, 61, 100, 149, 6, 24, 103, 138, 194, 101, 107, 177, 206, 250, 179, 154, 47, 29, 144, 246, 120, 115, 27, 188, 252, 18, 150, 214, 198, 144, 182, 149, 178, 71, 12, 252, 147, 243, 126, 143, 187, 181, 21, 250, 253, 120, 103, 240, 28, 73, 36, 139, 61, 124, 6, 180, 161, 218, 142, 82, 245, 168, 60, 7, 197, 252, 83, 83, 68, 102, 64, 138, 25, 132, 194, 88, 236, 135, 232, 53, 70, 19, 212, 62, 102, 170, 32, 22, 5, 208, 231, 207, 89, 208, 157, 87, 96, 148, 67, 164, 172, 97, 249, 238, 116, 233, 217, 10, 225, 246, 202, 56, 222, 205, 23, 245, 76, 19, 201, 146, 68, 28, 166, 127, 67, 168, 145, 135, 194, 8, 129, 29, 180, 70, 38, 80, 142, 94, 9, 254, 58, 249, 113, 90, 121, 11, 27, 55, 110, 80, 43, 62, 116, 209, 48, 7, 133, 100, 72, 227, 79, 69, 25, 253, 109, 6, 127, 214, 182, 234, 26, 231, 79, 201, 180, 42, 209, 200, 185, 110, 118, 71, 103, 233, 178, 98, 56, 70, 193, 27, 30, 133, 115, 89, 37, 192, 103, 138, 49, 222, 9, 166, 94, 84, 214, 119, 147, 161, 190, 93, 253, 110, 110, 208, 89, 174, 143, 83, 164, 147, 39, 228, 244, 128, 66, 8, 46, 42, 225, 45, 150, 234, 138, 17, 139, 48, 33, 36, 88, 43, 219, 159, 3, 28, 230, 122, 23, 4, 116, 204, 220, 129, 173, 42, 0, 176, 17, 23, 221, 184, 218, 68, 210, 178, 163, 102, 122, 148, 105, 208, 188, 158, 52, 134, 84, 62, 90, 242, 66, 174, 54, 14, 51, 96, 205, 239, 250, 121, 155, 33, 163, 224, 42, 57, 199, 183, 224, 242, 114, 96, 160, 253, 199, 53, 253, 61, 158, 9, 32, 103, 93, 232, 0, 125, 247, 146, 32, 217, 137, 214, 186, 110, 15, 91, 127, 246, 127, 33, 135, 7, 44, 2, 162, 224, 205, 152, 69, 128, 162, 87, 10, 160, 38, 36, 59, 72, 118, 204, 166, 236, 102, 149, 44, 13, 60, 187, 63, 83, 19, 49, 253, 110, 147, 55, 20, 172, 83, 120, 0, 177, 96, 25, 45, 154, 37, 135, 8, 145, 124, 182, 7, 12, 47, 170, 118, 175, 60, 131, 98, 0, 128, 43, 58, 251, 84, 47, 10, 77, 140, 175, 223, 52, 132, 221, 193, 62, 191, 80, 150, 188, 62, 194, 149, 9, 145, 250, 79, 199, 24, 233, 21, 13, 55, 35, 212, 59, 6, 124, 64, 93, 67, 61, 98, 219, 129, 3, 163, 178, 107, 8, 173, 253, 110, 79, 167, 255, 253, 215, 170, 129, 49, 148, 31, 58, 203, 79, 101, 113, 18, 123, 212, 29, 194, 173, 8, 1, 14, 232, 64, 95, 205, 2, 18, 64, 181, 240, 112, 39, 155, 254, 68, 182, 53, 203, 108, 109, 215, 168, 12, 186, 184, 4, 45, 21, 222, 54, 155, 212, 64, 96, 186, 246, 158, 161, 32, 68, 205, 3, 240, 2, 207, 218, 168, 147, 50, 219, 208, 252, 74, 112, 131, 200, 28, 86, 42, 228, 62, 6, 128, 202, 234, 205, 32, 102, 143, 154, 128, 165, 77, 208, 44, 20, 134, 200, 75, 221, 112, 218, 178, 194, 170, 245, 151, 185, 16, 201, 98, 209, 37, 129, 168, 175, 23, 99, 72, 251, 40, 217, 139, 209, 131, 185, 222, 232, 197, 152, 198, 147, 33, 226, 225, 66, 211, 51, 150, 105, 103, 241, 27, 44, 236, 24, 170, 51, 142, 222, 8, 157, 106, 232, 145, 236, 170, 1, 17, 89, 91, 216, 40, 238, 187, 81, 30, 53, 51, 146, 206, 216, 142, 62, 189, 71, 145, 64, 40, 244, 96, 92, 51, 186, 135, 165, 172, 17, 180, 165, 204, 104, 232, 84, 147, 125, 49, 217, 183, 133, 14, 208, 208, 207, 195, 139, 234, 193, 139, 16, 25, 22, 131, 233, 222, 232, 96, 177, 245, 73, 223, 134, 164, 24, 121, 190, 150, 229, 85, 177, 233, 82, 164, 96, 175, 62, 105, 247, 93, 3, 84, 254, 101, 226, 65, 71, 70, 161, 190, 127, 111, 31, 239, 186, 185, 119, 191, 66, 238, 32, 58, 187, 136, 8, 3, 210, 127, 197, 17, 70, 225, 84, 248, 206, 18, 94, 163, 26, 93, 105, 96, 217, 210, 142, 12, 14, 91, 182, 61, 62, 208, 0, 91, 118, 195, 221, 38, 127, 81, 166, 106, 206, 141, 43, 191, 27, 205, 130, 156, 33, 135, 135, 38, 245, 222, 64, 39, 162, 70, 207, 152, 249, 105, 249, 4, 200, 130, 77, 65, 132, 230, 174, 163, 227, 57, 235, 106, 70, 186, 163, 244, 173, 248, 45, 238, 86, 108, 215, 68, 243, 114, 185, 124, 203, 135, 227, 122, 201, 215, 100, 19, 206, 13, 5, 29, 116, 117, 80, 19, 19, 112, 63, 63, 235, 42, 57, 7, 19, 253, 206, 106, 4, 143, 78, 61, 244, 217, 71, 252, 226, 229, 130, 205, 45, 254, 194, 233, 40, 250, 208, 32, 163, 106, 241, 161, 218, 23, 238, 94, 126, 208, 142, 223, 231, 43, 103, 178, 149, 172, 62, 33, 0, 198, 45, 197, 208, 157, 106, 21, 40, 88, 9, 211, 112, 8, 130, 246, 234, 102, 193, 185, 158, 176, 61, 40, 85, 16, 39, 238, 25, 205, 29, 100, 166, 5, 109, 34, 165, 187, 210, 36, 190, 170, 57, 243, 144, 157, 243, 24, 251, 95, 239, 23, 44, 149, 164, 179, 147, 231, 141, 111, 223, 3, 48, 167, 187, 172, 174, 225, 98, 187, 98, 180, 154, 99, 207, 38, 79, 233, 142, 163, 169, 59, 63, 151, 235, 70, 63, 32, 110, 112, 210, 11, 31, 221, 250, 245, 142, 90, 123, 8, 207, 96, 97, 29, 1, 178, 16, 151, 21, 4, 34, 19, 170, 74, 136, 70, 75, 164, 117, 97, 7, 209, 49, 64, 39, 67, 211, 233, 201, 255, 147, 85, 141, 238, 60, 253, 3, 26, 62, 66, 50, 69, 64, 4, 218, 85, 154, 254, 54, 24, 27, 136, 127, 254, 10, 77, 5, 60, 74, 116, 36, 4, 98, 129, 167, 228, 134, 187, 106, 250, 136, 174, 45, 180, 102, 38, 209, 246, 192, 231, 164, 95, 56, 74, 228, 22, 67, 141, 36, 124, 53, 192, 99, 254, 21, 110, 116, 72, 112, 231, 100, 195, 39, 222, 90, 212, 189, 174, 78, 220, 228, 36, 54, 54, 138, 230, 117, 22, 228, 24, 146, 90, 182, 180, 37, 142, 173, 194, 115, 146, 236, 191, 82, 132, 141, 5, 126, 82, 203, 70, 33, 147, 197, 234, 90, 201, 200, 180, 161, 34, 90, 156, 99, 108, 181, 185, 244, 105, 182, 12, 152, 53, 171, 149, 41, 243, 158, 153, 243, 14, 38, 161, 177, 181, 33, 27, 15, 194, 135, 20, 31, 156, 61, 53, 84, 209, 114, 179, 83, 178, 160, 170, 46, 15, 101, 178, 94, 60, 43, 22, 149, 141, 49, 199, 172, 178, 186, 23, 138, 173, 41, 244, 95, 129, 232, 165, 232, 32, 172, 45, 78, 227, 148, 56, 20, 163, 104, 35, 236, 99, 73, 132, 19, 138, 182, 171, 73, 185, 246, 99, 11, 62, 190, 255, 149, 83, 20, 37, 221, 202, 233, 83, 224, 78, 153, 149, 224, 4, 209, 138, 204, 161, 38, 50, 79, 187, 219, 29, 201, 189, 191, 107, 171, 0, 6, 23, 119, 144, 217, 146, 27, 249, 243, 234, 22, 146, 198, 248, 99, 200, 164, 120, 12, 147, 174, 101, 88, 248, 180, 111, 219, 38, 236, 203, 74, 76, 14, 73, 204, 131, 220, 92, 255, 176, 63, 133, 157, 99, 165, 237, 108, 195, 247, 104, 180, 228, 0, 128, 47, 135, 74, 184, 226, 134, 106, 118, 36, 34, 95, 80, 243, 17, 191, 4, 68, 48, 19, 28, 227, 232, 85, 147, 24, 173, 54, 20, 138, 240, 105, 203, 133, 145, 20, 134, 169, 85, 21, 168, 214, 136, 206, 46, 18, 85, 191, 167, 15, 255, 182, 60, 63, 93, 42, 61, 47, 22, 18, 82, 120, 223, 24, 50, 136, 141, 218, 227, 224, 120, 171, 49, 221, 134, 68, 222, 222, 123, 72, 17, 112, 23, 183, 227, 200, 170, 121, 13, 251, 113, 0, 184, 12, 128, 123, 75, 103, 100, 200, 161, 51, 255, 63, 83, 237, 198, 191, 117, 144, 109, 212, 34, 220, 180, 68, 69, 137, 55, 96, 216, 89, 42, 186, 104, 144, 227, 5, 102, 170, 118, 161, 133, 41, 227, 25, 244, 127, 249, 252, 132, 81, 115, 107, 59, 151, 158, 71, 69, 36, 52, 220, 254, 120, 107, 3, 100, 8, 25, 64, 174, 6, 71, 203, 11, 43, 41, 79, 75, 55, 50, 190, 208, 109, 48, 185, 253, 105, 126, 25, 1, 9, 136, 131, 150, 92, 200, 64, 154, 187, 74, 55, 167, 21, 193, 217, 202, 181, 65, 28, 213, 40, 105, 129, 212, 54, 141, 205, 106, 110, 7, 68, 109, 21, 73, 201, 173, 56, 193, 154, 144, 174, 152, 3, 81, 195, 27, 100, 231, 16, 28, 217, 11, 186, 123, 79, 149, 180, 167, 126, 93, 206, 180, 33, 45, 178, 250, 52, 96, 242, 26, 96, 128, 119, 128, 5, 24, 142, 156, 173, 159, 47, 97, 153, 16, 102, 86, 217, 161, 236, 31, 99, 33, 255, 206, 150, 165, 247, 136, 45, 175, 175, 211, 130, 174, 3, 21, 95, 41, 216, 230, 109, 168, 48, 10, 48, 97, 87, 201, 3, 221, 206, 15, 59, 6, 33, 88, 107, 115, 33, 0, 90, 170, 162, 68, 98, 150, 102, 85, 114, 79, 125, 72, 153, 218, 188, 221, 145, 206, 165, 157, 136, 96, 46, 175, 41, 99, 190, 46, 249, 224, 131, 74, 125, 229, 129, 156, 152, 248, 100, 215, 64, 40, 64, 98, 75, 249, 120, 171, 74, 65, 160, 210, 0, 215, 248, 207, 129, 148, 171, 192, 96, 79, 35, 196, 165, 232, 4, 48, 107, 145, 31, 1, 64, 145, 143, 235, 75, 43, 122, 197, 193, 97, 73, 13, 142, 36, 62, 34, 109, 47, 161, 122, 207, 184, 192, 76, 238, 209, 142, 195, 205, 178, 136, 233, 41, 184, 135, 53, 251, 69, 167, 190, 247, 16, 95, 116, 70, 225, 177, 113, 197, 94, 21, 252, 105, 245, 235, 93, 100, 226, 203, 253, 224, 214, 107, 187, 133, 152, 220, 200, 234, 237, 64, 252, 25, 76, 96, 58, 80, 201, 68, 154, 131, 141, 202, 221, 199, 26, 186, 87, 110, 199, 201, 251, 60, 170, 68, 240, 6, 15, 122, 149, 213, 110, 94, 246, 11, 50, 31, 170, 9, 3, 4, 84, 132, 9, 73, 147, 39, 120, 106, 52, 35, 73, 2, 226, 214, 68, 214, 228, 91, 4, 31, 196, 39, 129, 78, 61, 170, 247, 156, 136, 233, 67, 80, 154, 115, 140, 149, 159, 250, 206, 22, 26, 152, 199, 195, 240, 163, 80, 78, 92, 97, 238, 106, 145, 105, 18, 191, 108, 86, 197, 194, 227, 157, 51, 127, 25, 178, 11, 56, 114, 15, 102, 78, 165, 59, 53, 200, 28, 206, 141, 235, 10, 61, 154, 192, 58, 228, 132, 135, 241, 19, 116, 114, 185, 103, 210, 146, 117, 162, 19, 163, 244, 251, 123, 194, 148, 19, 209, 218, 105, 158, 87, 242, 132, 219, 4, 188, 104, 0, 219, 95, 47, 151, 15, 115, 87, 217, 154, 124, 220, 237, 40, 45, 188, 241, 81, 110, 249, 17, 69, 70, 13, 230, 76, 68, 26, 118, 147, 250, 254, 76, 195, 46, 65, 79, 181, 24, 143, 125, 55, 49, 109, 57, 171, 53, 45, 93, 198, 137, 254, 229, 160, 116, 221, 4, 20, 22, 202, 4, 87, 64, 235, 68, 180, 214, 192, 169, 224, 96, 104, 250, 56, 49, 87, 70, 38, 239, 58, 124, 27, 69, 83, 232, 127, 154, 42, 186, 53, 91, 76, 129, 202, 72, 209, 197, 182, 57, 64, 2, 34, 82, 214, 42, 126, 198, 170, 222, 241, 87, 230, 6, 162, 158, 199, 39, 215, 119, 83, 72, 172, 176, 208, 204, 67, 174, 212, 153, 70, 2, 150, 162, 175, 242, 13, 170, 143, 4, 45, 96, 44, 190, 62, 148, 184, 239, 234, 134, 116, 239, 63, 195, 15, 136, 12, 238, 69, 18, 46, 22, 187, 103, 212, 202, 66, 185, 44, 68, 55, 85, 29, 82, 181, 184, 183, 61, 200, 152, 103, 13, 82, 236, 12, 213, 158, 205, 33, 177, 139, 117, 206, 105, 78, 80, 153, 27, 222, 169, 37, 112, 79, 99, 182, 217, 35, 9, 210, 28, 241, 196, 236, 51, 104, 204, 247, 74, 118, 216, 247, 107, 182, 56, 105, 185, 131, 225, 2, 58, 78, 59, 75, 218, 52, 166, 17, 52, 0, 149, 191, 153, 67, 56, 36, 10, 169, 247, 143, 175, 203, 160, 41, 77, 251, 166, 119, 153, 146, 101, 149, 114, 22, 23, 25, 95, 128, 254, 130, 30, 100, 28, 164, 202, 224, 231, 159, 170, 9, 101, 210, 211, 144, 16, 83, 146, 204, 101, 168, 56, 133, 169, 168, 7, 65, 46, 224, 177, 28, 233, 43, 7, 27, 93, 58, 239, 75, 237, 14, 197, 213, 232, 57, 30, 39, 211, 248, 243, 192, 246, 85, 190, 64, 215, 7, 136, 60, 10, 67, 168, 185, 128, 60, 77, 210, 235, 211, 123, 24, 55, 66, 163, 201, 141, 30, 212, 130, 125, 171, 104, 55, 254, 60, 106, 25, 41, 109, 172, 195, 46, 50, 183, 222, 15, 55, 171, 47, 79, 1, 40, 32, 241, 140, 103, 13, 70, 187, 151, 50, 192, 125, 54, 108, 98, 39, 134, 10, 211, 94, 62, 198, 206, 100, 58, 220, 107, 30, 237, 113, 236, 157, 202, 244, 132, 239, 230, 147, 248, 166, 249, 79, 251, 123, 198, 203, 207, 46, 147, 37, 200, 158, 18, 237, 175, 91, 12, 225, 179, 140, 145, 84, 137, 5, 34, 56, 36, 102, 199, 89, 101, 225, 185, 38, 200, 1, 251, 73, 98, 211, 137, 135, 22, 32, 241, 144, 245, 140, 106, 22, 158, 105, 45, 192, 109, 25, 249, 251, 42, 206, 58, 20, 71, 169, 175, 96, 37, 147, 146, 34, 56, 220, 19, 137, 142, 151, 49, 174, 177, 103, 143, 251, 245, 165, 93, 105, 122, 52, 78, 57, 65, 25, 21, 241, 1, 221, 30, 228, 250, 89, 49, 51, 171, 21, 155, 92, 201, 1, 143, 132, 91, 124, 192, 40, 59, 79, 10, 185, 189, 76, 188, 123, 120, 181, 78, 208, 139, 217, 222, 121, 208, 224, 212, 175, 25, 202, 29, 122, 175, 168, 211, 52, 146, 3, 4, 50, 37, 161, 159, 183, 223, 7, 181, 180, 190, 147, 118, 119, 120, 81, 27, 132, 2, 111, 182, 81, 192, 95, 145, 229, 95, 61, 226, 51, 208, 197, 151, 207, 221, 165, 180, 219, 71, 50, 248, 72, 250, 38, 118, 202, 190, 235, 60, 246, 243, 163, 217, 101, 132, 31, 163, 89, 1, 1, 248, 13, 148, 100, 176, 29, 186, 10, 154, 87, 253, 143, 209, 162, 216, 130, 91, 229, 29, 187, 250, 150, 193, 67, 80, 165, 162, 148, 91, 54, 17, 187, 179, 154, 233, 234, 41, 185, 102, 176, 132, 48, 233, 133, 97, 225, 68, 142, 131, 90, 239, 63, 224, 150, 164, 91, 24, 251, 33, 2, 135, 117, 188, 154, 104, 59, 129, 88, 186, 141, 130, 165, 198, 149, 66, 110, 201, 20, 104, 195, 30, 7, 14, 66, 9, 32, 73, 120, 168, 111, 28, 58, 171, 103, 164, 57, 173, 10, 182, 125, 27, 169, 15, 97, 200, 167, 41, 187, 184, 141, 180, 176, 77, 43, 242, 232, 131, 252, 98, 76, 67, 254, 210, 239, 183, 232, 132, 16, 253, 129, 155, 236, 170, 13, 42, 244, 88, 86, 150, 60, 103, 59, 214, 240, 75, 20, 46, 9, 212, 71, 63, 64, 64, 135, 240, 67, 72, 253, 112, 73, 152, 250, 231, 142, 192, 149, 23, 137, 14, 115, 60, 135, 29, 134, 12, 4, 138, 86, 47, 7, 122, 51, 134, 249, 28, 222, 227, 191, 96, 107, 151, 157, 4, 200, 161, 131, 50, 248, 55, 222, 99, 97, 171, 84, 209, 146, 75, 78, 33, 37, 129, 172, 194, 235, 181, 248, 146, 127, 66, 72, 189, 59, 77, 211, 157, 5, 241, 113, 111, 47, 185, 24, 142, 240, 212, 125, 96, 166, 132, 16, 57, 30, 83, 164, 63, 243, 225, 56, 62, 87, 111, 75, 102, 154, 175, 213, 41, 186, 116, 42, 51, 144, 94, 22, 179, 252, 103, 231, 125, 45, 235, 218, 57, 232, 207, 132, 2, 221, 118, 176, 232, 181, 222, 247, 46, 2, 49, 120, 172, 47, 206, 38, 148, 117, 106, 135, 201, 193, 118, 63, 253, 24, 133, 68, 133, 95, 1, 152, 35, 6, 109, 234, 25, 183, 59, 113, 192, 238, 0, 112, 90, 30, 61, 39, 240, 75, 65, 75, 158, 162, 45, 38, 104, 227, 112, 194, 159, 141, 220, 187, 60, 121, 227, 233, 192, 197, 207, 249, 183, 20, 57, 3, 235, 71, 88, 146, 178, 101, 78, 32, 20, 255, 17, 95, 139, 112, 195, 73, 69, 86, 222, 21, 157, 86, 30, 42, 152, 188, 77, 191, 35, 212, 40, 88, 107, 162, 186, 102, 98, 40, 110, 179, 174, 198, 123, 69, 177, 169, 179, 107, 182, 249, 232, 28, 37, 193, 162, 99, 36, 171, 32, 27, 152, 97, 167, 55, 141, 248, 67, 132, 152, 125, 113, 60, 183, 139, 232, 96, 196, 91, 47, 104, 109, 249, 128, 171, 19, 153, 23, 112, 142, 191, 90, 146, 188, 161, 112, 31, 110, 31, 50, 65, 137, 55, 6, 44, 234, 57, 112, 190, 39, 71, 112, 115, 56, 177, 158, 35, 190, 153, 119, 97, 128, 72, 38, 252, 67, 27, 130, 18, 68, 149, 0, 246, 236, 9, 194, 140, 219, 18, 131, 227, 224, 116, 68, 154, 140, 79, 135, 223, 154, 73, 141, 84, 177, 6, 149, 233, 48, 234, 166, 74, 8, 9, 228, 241, 33, 84, 205, 226, 241, 43, 63, 9, 70, 163, 184, 58, 204, 53, 160, 46, 248, 38, 67, 155, 157, 207, 182, 112, 171, 65, 140, 50, 174, 80, 17, 226, 170, 243, 169, 80, 130, 101, 242, 89, 137, 5, 158, 52, 16, 139, 119, 175, 210, 112, 63, 50, 53, 173, 35, 64, 13, 40, 133, 102, 197, 242, 170, 152, 13, 102, 105, 138, 61, 100, 1, 109, 248, 107, 190, 169, 15, 45, 182, 36, 236, 34, 188, 125, 44, 119, 140, 63, 87, 74, 197, 201, 85, 193, 36, 71, 152, 130, 186, 122, 234, 175, 99, 73, 241, 207, 131, 134, 210, 136, 211, 25, 61, 202, 242, 167, 189, 163, 112, 162, 132, 55, 64, 94, 113, 111, 60, 51, 100, 136, 83, 238, 135, 190, 14, 147, 201, 36, 240, 173, 37, 45, 25, 153, 71, 15, 36, 200, 0, 241, 149, 194, 180, 141, 54, 37, 17, 72, 88, 157, 107, 137, 145, 203, 178, 208, 5, 190, 112, 19, 200, 90, 152, 8, 122, 212, 172, 130, 0, 156, 83, 106, 199, 126, 53, 126, 118, 78, 142, 164, 110, 2, 51, 206, 229, 115, 164, 191, 188, 96, 242, 143, 76, 210, 19, 63, 160, 210, 53, 167, 191, 74, 137, 36, 107, 94, 236, 129, 8, 128, 42, 156, 72, 104, 220, 101, 196, 198, 141, 191, 235, 202, 210, 187, 143, 3, 222, 146, 109, 142, 94, 19, 176, 150, 161, 130, 14, 191, 77, 100, 101, 96, 10, 249, 193, 34, 40, 141, 99, 39, 170, 25, 64, 196, 228, 160, 7, 219, 209, 252, 9, 114, 137, 126, 157, 36, 124, 50, 106, 130, 138, 182, 166, 54, 247, 227, 157, 200, 78, 225, 82, 14, 233, 140, 69, 26, 10, 67, 15, 41, 109, 11, 178, 125, 76, 165, 155, 68, 205, 194, 3, 146, 142, 85, 112, 3, 191, 97, 46, 210, 36, 135, 212, 160, 164, 87, 223, 8, 242, 110, 0, 138, 113, 115, 3, 255, 95, 124, 195, 237, 171, 192, 244, 168, 74, 174, 184, 181, 149, 17, 63, 110, 106, 173, 219, 66, 203, 120, 137, 222, 69, 236, 124, 226, 216, 137, 75, 217, 128, 79, 121, 189, 237, 116, 142, 247, 17, 9, 193, 66, 160, 232, 27, 85, 174, 153, 198, 4, 238, 28, 199, 138, 28, 204, 64, 178, 151, 43, 24, 208, 179, 88, 149, 94, 59, 255, 108, 237, 122, 86, 199, 172, 246, 24, 3, 13, 142, 84, 140, 207, 186, 6, 112, 201, 69, 44, 94, 160, 76, 155, 125, 146, 24, 254, 41, 204, 125, 175, 32, 233, 112, 251, 221, 52, 2, 96, 153, 128, 81, 191, 165, 233, 101, 20, 22, 49, 15, 235, 228, 193, 200, 48, 165, 179, 192, 154, 192, 52, 56, 235, 8, 216, 21, 72, 50, 4, 173, 34, 50, 135, 19, 114, 142, 54, 97, 247, 23, 218, 64, 223, 120, 196, 97, 37, 123, 214, 227, 245, 42, 110, 7, 225, 122, 146, 39, 159, 151, 108, 229, 130, 237, 169, 6, 61, 178, 237, 105, 121, 90, 22, 228, 249, 12, 29, 143, 207, 179, 52, 17, 163, 169, 120, 149, 242, 51, 228, 235, 95, 194, 26, 35, 226, 224, 47, 203, 138, 159, 183, 208, 41, 20, 130, 86, 9, 99, 131, 192, 175, 123, 54, 43, 120, 190, 0, 203, 178, 80, 119, 181, 39, 159, 210, 140, 147, 69, 24, 220, 168, 50, 255, 51, 34, 123, 137, 167, 160, 138, 67, 189, 206, 207, 230, 193, 95, 190, 161, 33, 231, 80, 77, 15, 134, 216, 33, 208, 235, 88, 131, 41, 146, 214, 30, 229, 220, 248, 114, 132, 10, 175, 38, 124, 55, 160, 172, 152, 37, 64, 124, 21, 233, 63, 1, 36, 239, 231, 54, 4, 79, 48, 109, 203, 128, 130, 25, 64, 83, 151, 227, 15, 226, 78, 8, 14, 113, 100, 58, 192, 243, 65, 6, 69, 216, 195, 180, 11, 140, 127, 182, 70, 187, 24, 156, 129, 20, 88, 212, 145, 235, 158, 107, 37, 39, 141, 1, 234, 111, 244, 25, 209, 37, 187, 30, 130, 177, 141, 161, 170, 129, 255, 139, 111, 40, 20, 61, 23, 60, 17, 104, 35, 134, 120, 241, 132, 25, 171, 119, 184, 22, 54, 66, 79, 153, 9, 78, 173, 9, 104, 93, 75, 177, 0, 250, 15, 254, 84, 67, 40, 99, 19, 171, 46, 3, 229, 22, 164, 144, 224, 219, 23, 98, 161, 224, 118, 52, 129, 201, 15, 164, 180, 156, 217, 139, 213, 108, 43, 61, 36, 218, 200, 85, 54, 157, 11, 47, 121, 6, 249, 158, 231, 22, 143, 28, 5, 82, 88, 188, 160, 250, 244, 237, 15, 63, 139, 235, 244, 224, 12, 62, 238, 177, 75, 197, 192, 225, 203, 38, 43, 197, 17, 178, 92, 224, 234, 100, 204, 83, 28, 209, 46, 156, 213, 31, 48, 32, 94, 118, 226, 27, 36, 212, 223, 0, 153, 208, 193, 156, 145, 100, 148, 119, 213, 20, 106, 96, 6, 105, 229, 182, 199, 33, 153, 118, 148, 36, 54, 80, 199, 254, 116, 202, 39, 201, 245, 163, 177, 236, 75, 159, 233, 37, 27, 37, 31, 25, 237, 65, 19, 190, 222, 251, 179, 199, 245, 147, 197, 238, 205, 16, 169, 250, 233, 174, 212, 235, 9, 115, 105, 161, 145, 199, 19, 202, 208, 98, 213, 47, 27, 53, 57, 124, 248, 12, 245, 2, 234, 64, 107, 213, 182, 5, 243, 29, 238, 192, 110, 132, 174, 114, 243, 123, 102, 119, 241, 100, 86, 27, 13, 210, 46, 7, 204, 144, 180, 223, 55, 47, 37, 126, 104, 16, 62, 77, 75, 245, 4, 128, 241, 149, 0, 93, 154, 82, 0, 146, 255, 99, 57, 57, 247, 120, 185, 201, 183, 102, 10, 66, 221, 252, 235, 33, 64, 60, 69, 250, 119, 211, 223, 118, 189, 253, 229, 194, 13, 230, 100, 111, 209, 71, 90, 217, 141, 40, 196, 171, 168, 118, 252, 16, 192, 124, 148, 41, 109, 126, 234, 85, 219, 95, 122, 167, 217, 196, 199, 231, 219, 77, 100, 190, 106, 253, 225, 180, 190, 193, 0, 76, 181, 254, 210, 241, 196, 76, 50, 158, 234, 120, 116, 136, 75, 52, 192, 192, 6, 16, 9, 0, 137, 110, 112, 246, 55, 14, 204, 135, 140, 93, 226, 121, 120, 0, 112, 2, 165, 151, 57, 96, 215, 201, 178, 237, 229, 193, 76, 145, 83, 87, 17, 121, 130, 192, 21, 116, 6, 252, 97, 219, 72, 173, 174, 227, 26, 128, 206, 197, 51, 31, 122, 29, 187, 60, 132, 168, 148, 90, 39, 219, 87, 117, 178, 210, 99, 121, 43, 116, 82, 21, 209, 134, 11, 3, 24, 117, 15, 222, 207, 206, 41, 242, 2, 150, 44, 174, 28, 218, 155, 181, 71, 196, 137, 193, 135, 105, 16, 172, 54, 79, 115, 79, 192, 207, 130, 21, 195, 213, 37, 244, 50, 82, 36, 62, 236, 31, 79, 193, 244, 166, 96, 239, 250, 238, 181, 65, 254, 193, 246, 135, 204, 94, 71, 6, 198, 168, 141, 48, 0, 228, 153, 70, 86, 4, 28, 87, 208, 182, 82, 12, 93, 32, 70, 176, 196, 176, 106, 36, 30, 166, 151, 128, 33, 89, 28, 171, 26, 120, 184, 227, 229, 5, 106, 165, 100, 57, 82, 248, 165, 3, 172, 98, 114, 235, 68, 178, 80, 228, 66, 139, 50, 107, 235, 68, 148, 115, 127, 111, 199, 8, 95, 64, 190, 239, 90, 232, 64, 0, 6, 234, 225, 143, 45, 171, 9, 242, 88, 109, 135, 246, 54, 31, 158, 46, 196, 2, 189, 147, 152, 70, 147, 170, 150, 134, 77, 87, 165, 64, 134, 254, 202, 193, 190, 200, 89, 21, 217, 241, 229, 110, 154, 16, 15, 20, 111, 112, 183, 208, 75, 130, 111, 201, 84, 41, 9, 133, 8, 7, 224, 162, 168, 20, 118, 191, 48, 134, 215, 129, 68, 223, 44, 193, 132, 2, 94, 177, 33, 166, 248, 249, 106, 16, 36, 231, 134, 245, 48, 213, 23, 155, 109, 206, 95, 77, 211, 49, 193, 95, 6, 63, 113, 52, 75, 163, 225, 78, 242, 245, 34, 153, 240, 53, 187, 224, 205, 223, 173, 78, 196, 129, 100, 150, 139, 157, 111, 145, 145, 176, 203, 100, 190, 115, 50, 94, 43, 137, 96, 175, 169, 91, 204, 155, 101, 35, 121, 68, 254, 116, 65, 85, 63, 75, 187, 28, 104, 224, 7, 117, 149, 129, 209, 50, 89, 60, 199, 215, 117, 147, 205, 221, 36, 39, 103, 69, 5, 91, 43, 115, 26, 131, 98, 153, 144, 123, 149, 82, 120, 45, 177, 229, 37, 3, 134, 3, 25, 25, 184, 6, 41, 142, 180, 82, 218, 18, 152, 89, 155, 83, 237, 55, 171, 31, 193, 37, 232, 246, 138, 105, 215, 81, 37, 35, 15, 80, 198, 146, 21, 41, 18, 128, 242, 250, 32, 56, 47, 150, 116, 193, 46, 178, 84, 7, 39, 124, 147, 132, 29, 94, 255, 48, 164, 66, 255, 9, 228, 33, 195, 122, 6, 125, 64, 113, 90, 186, 179, 51, 52, 90, 224, 112, 204, 14, 92, 37, 179, 184, 62, 169, 189, 97, 143, 199, 179, 212, 55, 196, 106, 26, 201, 36, 192, 253, 157, 170, 209, 155, 153, 2, 232, 152, 154, 107, 233, 138, 245, 110, 208, 41, 38, 7, 216, 79, 185, 21, 17, 47, 80, 0, 116, 242, 11, 247, 93, 85, 116, 81, 108, 129, 246, 103, 41, 56, 161, 167, 108, 143, 107, 93, 165, 115, 215, 33, 66, 113, 122, 49, 89, 38, 225, 162, 94, 221, 169, 44, 81, 225, 195, 233, 14, 65, 188, 17, 86, 245, 52, 185, 69, 2, 179, 210, 185, 45, 211, 134, 178, 166, 115, 53, 239, 161, 187, 176, 206, 216, 31, 191, 63, 65, 193, 192, 150, 237, 9, 132, 13, 147, 243, 87, 148, 116, 213, 205, 43, 243, 242, 188, 76, 28, 49, 49, 23, 25, 240, 67, 227, 120, 46, 124, 153, 165, 127, 13, 91, 250, 140, 65, 79, 67, 59, 49, 37, 124, 125, 245, 226, 224, 150, 193, 165, 6, 92, 189, 189, 114, 199, 239, 13, 11, 78, 42, 4, 195, 24, 115, 23, 231, 32, 232, 201, 24, 166, 12, 113, 53, 46, 6, 126, 74, 245, 144, 37, 22, 63, 36, 29, 149, 11, 229, 83, 109, 7, 78, 199, 22, 129, 204, 162, 118, 44, 133, 11, 234, 253, 12, 40, 110, 150, 187, 80, 66, 126, 16, 121, 32, 36, 237, 19, 235, 217, 50, 94, 253, 46, 25, 54, 124, 191, 67, 128, 143, 42, 184, 117, 108, 218, 112, 116, 123, 163, 187, 1, 209, 135, 24, 107, 156, 168, 193, 71, 247, 36, 117, 246, 4, 6, 51, 32, 147, 42, 170, 142, 101, 142, 216, 148, 9, 170, 154, 108, 165, 208, 106, 179, 236, 100, 17, 214, 232, 158, 145, 58, 210, 148, 100, 65, 255, 69, 232, 172, 194, 200, 56, 80, 66, 244, 90, 42, 3, 244, 123, 171, 22, 102, 1, 134, 9, 165, 208, 173, 136, 221, 156, 4, 57, 185, 34, 149, 106, 140, 21, 227, 60, 35, 1, 107, 176, 74, 109, 81, 66, 147, 172, 91, 32, 251, 21, 168, 167, 188, 93, 142, 159, 188, 16, 134, 67, 51, 137, 234, 158, 123, 112, 31, 186, 28, 160, 137, 8, 7, 202, 94, 190, 250, 24, 169, 229, 130, 232, 112, 166, 225, 153, 46, 29, 148, 108, 241, 111, 97, 103, 125, 32, 21, 119, 25, 185, 241, 35, 116, 211, 138, 35, 11, 140, 1, 50, 178, 91, 134, 31, 89, 69, 22, 53, 119, 150, 81, 48, 39, 29, 224, 77, 102, 117, 139, 139, 40, 32, 17, 153, 24, 17, 228, 3, 142, 9, 43, 147, 22, 88, 113, 105, 213, 11, 252, 157, 187, 174, 53, 201, 193, 239, 146, 244, 163, 122, 203, 41, 99, 32, 211, 22, 29, 32, 147, 13, 142, 239, 67, 44, 69, 185, 0, 18, 242, 222, 11, 86, 211, 59, 104, 196, 181, 152, 143, 248, 62, 42, 193, 1, 88, 157, 77, 37, 227, 81, 165, 213, 176, 198, 92, 178, 15, 200, 176, 67, 190, 21, 168, 146, 219, 164, 0, 168, 147, 110, 132, 1, 72, 131, 228, 128, 52, 183, 124, 198, 223, 172, 123, 135, 244, 217, 13, 246, 241, 207, 7, 149, 50, 180, 21, 206, 254, 34, 64, 200, 235, 210, 217, 43, 28, 171, 8, 111, 66, 96, 122, 29, 178, 7, 31, 150, 156, 42, 26, 16, 42, 117, 8, 141, 189, 104, 175, 27, 159, 237, 255, 232, 62, 221, 210, 6, 138, 159, 14, 199, 115, 146, 70, 143, 242, 80, 233, 9, 182, 197, 191, 70, 246, 98, 66, 216, 11, 123, 31, 236, 123, 39, 144, 67, 118, 202, 86, 217, 24, 86, 20, 21, 245, 34, 247, 186, 201, 134, 65, 169, 196, 231, 87, 152, 62, 97, 122, 38, 69, 180, 26, 81, 100, 88, 175, 203, 26, 107, 1, 209, 180, 202, 141, 4, 254, 108, 129, 190, 124, 23, 214, 130, 213, 6, 154, 17, 9, 204, 169, 47, 142, 113, 161, 125, 89, 56, 230, 112, 129, 212, 189, 164, 89, 145, 95, 107, 253, 37, 251, 80, 174, 134, 57, 230, 71, 96, 211, 74, 226, 191, 103, 45, 9, 49, 20, 141, 205, 246, 134, 236, 194, 62, 102, 23, 155, 67, 50, 74, 18, 164, 52, 20, 149, 193, 121, 75, 253, 217, 224, 74, 157, 179, 202, 11, 73, 63, 224, 175, 9, 228, 182, 51, 193, 218, 108, 140, 217, 141, 107, 243, 41, 170, 215, 184, 109, 9, 250, 187, 123, 28, 254, 94, 4, 116, 24, 193, 28, 106, 54, 71, 147, 229, 246, 248, 241, 143, 163, 219, 146, 137, 12, 6, 240, 226, 7, 207, 24, 234, 243, 108, 0, 120, 104, 189, 104, 203, 153, 201, 109, 142, 89, 214, 89, 59, 244, 210, 187, 164, 135, 156, 122, 42, 206, 6, 108, 97, 197, 73, 145, 78, 24, 204, 168, 7, 224, 221, 209, 48, 254, 29, 67, 34, 1, 144, 220, 143, 43, 109, 52, 56, 200, 150, 169, 17, 236, 11, 252, 209, 36, 155, 147, 36, 4, 48, 13, 172, 29, 178, 65, 206, 245, 57, 7, 228, 239, 210, 132, 79, 68, 219, 165, 174, 169, 132, 212, 11, 236, 243, 130, 195, 118, 57, 109, 137, 186, 208, 62, 202, 14, 138, 60, 6, 86, 116, 129, 172, 242, 27, 124, 14, 184, 68, 81, 195, 59, 124, 98, 214, 22, 50, 47, 218, 125, 181, 77, 125, 0, 170, 53, 202, 202, 10, 227, 195, 167, 32, 230, 102, 193, 187, 80, 246, 42, 143, 48, 167, 17, 129, 246, 5, 195, 134, 79, 251, 148, 55, 84, 215, 101, 73, 52, 134, 60, 65, 211, 14, 226, 131, 243, 136, 83, 3, 246, 249, 130, 137, 71, 141, 250, 152, 45, 20, 92, 98, 248, 223, 50, 149, 86, 182, 191, 107, 178, 14, 96, 1, 120, 83, 109, 65, 165, 174, 171, 166, 91, 6, 51, 72, 123, 128, 169, 104, 194, 53, 154, 59, 122, 16, 111, 220, 253, 113, 207, 131, 236, 170, 244, 16, 176, 188, 9, 234, 126, 78, 210, 169, 162, 105, 165, 138, 179, 56, 233, 48, 51, 170, 188, 215, 233, 186, 145, 18, 54, 209, 203, 75, 92, 158, 198, 58, 10, 120, 51, 52, 244, 55, 117, 188, 177, 145, 41, 173, 98, 110, 28, 74, 244, 141, 60, 198, 80, 174, 246, 95, 120, 176, 247, 149, 91, 22, 218, 94, 113, 108, 250, 0, 200, 17, 127, 144, 206, 107, 9, 139, 229, 206, 233, 44, 253, 100, 155, 142, 72, 20, 118, 157, 254, 144, 236, 79, 219, 33, 174, 104, 14, 217, 193, 249, 59, 28, 238, 207, 106, 38, 25, 6, 75, 32, 88, 124, 158, 30, 98, 60, 34, 172, 35, 163, 216, 134, 111, 198, 166, 120, 54, 109, 118, 250, 86, 31, 6, 27, 5, 81, 182, 187, 226, 162, 43, 80, 61, 35, 235, 127, 28, 113, 172, 157, 225, 69, 2, 9, 94, 11, 117, 103, 40, 189, 236, 131, 75, 136, 12, 60, 112, 66, 159, 208, 178, 200, 175, 37, 217, 225, 97, 130, 113, 221, 120, 69, 149, 8, 155, 10, 107, 183, 247, 75, 108, 165, 115, 121, 133, 46, 35, 11, 18, 59, 5, 5, 31, 102, 199, 163, 159, 112, 58, 19, 229, 72, 185, 188, 120, 198, 252, 213, 139, 7, 68, 33, 139, 255, 154, 14, 229, 156, 23, 2, 129, 169, 220, 13, 222, 23, 70, 251, 249, 106, 81, 145, 11, 38, 185, 108, 97, 133, 15, 27, 180, 3, 179, 138, 129, 132, 234, 199, 28, 42, 194, 246, 31, 201, 124, 189, 160, 217, 209, 19, 53, 204, 199, 181, 194, 149, 166, 142, 223, 241, 81, 154, 26, 68, 151, 41, 188, 90, 32, 208, 162, 247, 39, 43, 139, 64, 145, 170, 245, 56, 210, 102, 166, 86, 205, 54, 225, 128, 151, 208, 125, 131, 204, 124, 175, 67, 44, 11, 198, 180, 230, 51, 96, 122, 30, 212, 104, 225, 105, 213, 104, 166, 37, 42, 72, 184, 90, 67, 184, 20, 62, 83, 127, 162, 165, 72, 147, 219, 30, 23, 12, 215, 100, 101, 172, 87, 108, 46, 154, 157, 227, 1, 164, 46, 254, 50, 176, 155, 39, 230, 243, 36, 169, 17, 141, 100, 223, 68, 196, 200, 144, 39, 37, 154, 252, 70, 211, 122, 69, 94, 74, 12, 36, 224, 193, 39, 66, 245, 15, 17, 157, 254, 38, 162, 51, 11, 213, 83, 116, 216, 206, 23, 14, 4, 204, 128, 247, 192, 199, 4, 33, 169, 186, 117, 231, 31, 18, 195, 225, 185, 58, 22, 196, 57, 23, 197, 112, 17, 115, 45, 120, 250, 109, 147, 116, 133, 129, 68, 170, 73, 60, 59, 58, 182, 18, 194, 225, 75, 250, 59, 172, 151, 228, 238, 198, 181, 73, 27, 154, 238, 125, 222, 1, 9, 211, 17, 28, 144, 53, 8, 102, 12, 121, 73, 180, 146, 61, 226, 64, 77, 22, 154, 93, 141, 56, 68, 61, 65, 61, 26, 41, 32, 18, 19, 12, 237, 175, 159, 130, 7, 80, 17, 176, 104, 146, 7, 178, 13, 131, 14, 17, 110, 41, 100, 171, 214, 92, 131, 187, 184, 45, 39, 17, 46, 24, 143, 4, 142, 146, 225, 225, 143, 131, 95, 65, 127, 64, 58, 87, 205, 141, 120, 246, 189, 17, 0, 252, 254, 231, 37, 76, 71, 7, 171, 92, 227, 247, 196, 133, 212, 211, 20, 103, 109, 4, 77, 56, 62, 60, 227, 229, 55, 65, 143, 126, 163, 198, 85, 187, 241, 95, 116, 132, 34, 20, 234, 153, 211, 106, 192, 144, 104, 112, 18, 131, 232, 80, 180, 202, 178, 238, 64, 228, 35, 250, 236, 188, 178, 67, 140, 158, 187, 164, 18, 188, 27, 249, 67, 94, 91, 71, 3, 196, 103, 222, 127, 153, 23, 112, 252, 55, 113, 197, 22, 31, 84, 186, 253, 218, 242, 39, 232, 116, 246, 142, 219, 140, 107, 85, 10, 226, 137, 151, 115, 242, 6, 166, 179, 68, 47, 80, 100, 148, 160, 101, 219, 89, 28, 125, 180, 28, 232, 26, 227, 234, 141, 225, 18, 223, 106, 109, 0, 7, 225, 103, 41, 193, 96, 43, 242, 206, 192, 50, 110, 39, 187, 177, 241, 184, 80, 40, 163, 147, 130, 55, 99, 218, 9, 192, 169, 157, 123, 22, 129, 220, 254, 30, 118, 32, 49, 76, 232, 255, 194, 113, 153, 79, 137, 156, 100, 13, 162, 96, 155, 105, 176, 159, 81, 21, 120, 210, 200, 53, 145, 169, 55, 212, 244, 24, 26, 113, 70, 57, 9, 203, 202, 143, 148, 190, 118, 22, 76, 210, 58, 92, 23, 33, 110, 6, 250, 95, 3, 103, 223, 131, 219, 102, 135, 43, 20, 124, 179, 65, 100, 236, 109, 117, 39, 199, 101, 238, 202, 5, 103, 167, 137, 30, 164, 154, 214, 200, 89, 146, 147, 158, 76, 170, 105, 179, 73, 208, 65, 188, 47, 85, 213, 232, 30, 207, 144, 53, 18, 106, 3, 54, 209, 3, 209, 104, 173, 123, 183, 62, 46, 117, 90, 172, 157, 181, 117, 252, 125, 72, 11, 42, 234, 98, 214, 80, 46, 143, 44, 122, 31, 193, 78, 109, 225, 129, 148, 217, 190, 20, 206, 141, 129, 149, 225, 204, 69, 171, 33, 195, 123, 252, 54, 114, 155, 71, 159, 44, 209, 10, 220, 246, 70, 192, 122, 105, 15, 113, 212, 224, 80, 144, 33, 215, 60, 214, 119, 84, 6, 168, 24, 201, 202, 51, 52, 8, 199, 123, 153, 253, 213, 152, 186, 167, 206, 92, 32, 169, 53, 219, 212, 166, 121, 198, 131, 95, 146, 229, 11, 146, 43, 112, 224, 134, 189, 110, 216, 90, 32, 228, 85, 83, 91, 184, 229, 244, 177, 178, 247, 168, 28, 196, 178, 243, 100, 34, 128, 106, 232, 218, 219, 215, 216, 87, 186, 192, 46, 111, 102, 111, 27, 6, 229, 233, 246, 144, 64, 119, 189, 95, 211, 215, 109, 202, 86, 223, 33, 160, 104, 17, 224, 223, 126, 96, 0, 213, 44, 186, 217, 236, 100, 93, 104, 176, 212, 210, 56, 32, 101, 205, 28, 11, 6, 95, 251, 209, 232, 12, 107, 182, 231, 64, 129, 68, 65, 110, 67, 137, 5, 100, 167, 145, 36, 133, 187, 35, 43, 77, 150, 129, 198, 82, 234, 220, 170, 168, 205, 15, 132, 186, 88, 5, 78, 80, 20, 44, 103, 202, 194, 36, 149, 217, 148, 212, 103, 64, 114, 46, 214, 32, 18, 36, 93, 129, 48, 177, 201, 168, 0, 137, 192, 55, 156, 172, 226, 87, 45, 63, 240, 88, 65, 12, 121, 22, 124, 6, 8, 87, 182, 161, 180, 87, 215, 226, 144, 190, 229, 12, 123, 62, 249, 14, 177, 133, 196, 193, 37, 50, 161, 83, 156, 233, 128, 162, 167, 26, 114, 112, 95, 252, 115, 64, 243, 140, 176, 41, 220, 155, 105, 105, 47, 7, 118, 96, 244, 98, 67, 34, 145, 166, 175, 166, 223, 195, 3, 194, 35, 243, 59, 68, 24, 245, 166, 161, 234, 14, 121, 172, 1, 142, 157, 105, 246, 173, 212, 14, 11, 184, 212, 187, 133, 140, 122, 190, 165, 233, 148, 156, 126, 175, 58, 64, 91, 67, 124, 199, 38, 132, 191, 150, 93, 53, 135, 147, 224, 134, 4, 20, 135, 62, 17, 247, 251, 18, 251, 190, 75, 177, 68, 105, 131, 38, 176, 194, 169, 197, 20, 103, 75, 112, 0, 35, 34, 166, 130, 115, 151, 220, 190, 6, 169, 185, 164, 56, 14, 121, 13, 78, 166, 131, 99, 94, 57, 217, 200, 235, 86, 46, 76, 77, 20, 40, 73, 52, 72, 50, 245, 196, 59, 193, 6, 25, 120, 42, 75, 17, 229, 190, 218, 25, 28, 20, 137, 21, 126, 76, 244, 82, 205, 135, 86, 127, 119, 248, 147, 16, 168, 178, 127, 3, 192, 138, 57, 139, 1, 249, 9, 63, 10, 119, 83, 83, 3, 230, 194, 13, 249, 235, 246, 34, 92, 165, 92, 55, 251, 48, 177, 251, 236, 227, 34, 124, 60, 222, 117, 76, 163, 190, 192, 54, 200, 62, 51, 136, 114, 206, 70, 16, 187, 107, 140, 105, 142, 9, 251, 53, 236, 30, 143, 236, 169, 96, 196, 90, 0, 228, 52, 33, 87, 67, 112, 54, 27, 42, 204, 164, 113, 163, 186, 217, 107, 197, 47, 76, 21, 49, 98, 176, 227, 144, 236, 110, 43, 57, 243, 104, 97, 59, 58, 48, 172, 84, 193, 103, 140, 45, 254, 226, 179, 79, 26, 27, 16, 208, 62, 222, 105, 22, 56, 4, 219, 67, 42, 186, 142, 113, 162, 162, 224, 178, 115, 245, 128, 221, 194, 5, 13, 52, 108, 95, 54, 12, 226, 37, 130, 184, 38, 14, 136, 32, 28, 43, 132, 25, 126, 69, 79, 113, 70, 14, 153, 45, 3, 82, 233, 253, 19, 198, 10, 233, 213, 133, 52, 152, 217, 146, 2, 147, 13, 102, 45, 80, 119, 254, 163, 164, 113, 161, 125, 79, 199, 185, 88, 144, 72, 233, 21, 6, 125, 231, 23, 8, 151, 49, 152, 154, 119, 37, 130, 196, 194, 200, 151, 24, 223, 184, 25, 215, 215, 193, 224, 8, 73, 73, 244, 201, 117, 209, 217, 196, 21, 239, 114, 161, 138, 250, 248, 240, 190, 225, 219, 50, 191, 58, 232, 218, 126, 243, 50, 28, 232, 161, 156, 192, 60, 97, 161, 23, 4, 77, 54, 148, 232, 42, 140, 80, 224, 103, 9, 166, 101, 20, 14, 148, 138, 81, 64, 129, 70, 78, 235, 132, 67, 48, 227, 194, 205, 246, 154, 169, 100, 127, 12, 231, 111, 88, 23, 191, 63, 251, 4, 111, 236, 137, 55, 122, 240, 209, 166, 184, 132, 186, 10, 138, 42, 194, 197, 48, 243, 206, 219, 79, 53, 145, 24, 100, 119, 116, 128, 99, 12, 17, 173, 79, 74, 222, 170, 193, 228, 22, 108, 137, 218, 186, 133, 160, 193, 190, 131, 202, 160, 182, 236, 87, 222, 197, 25, 89, 59, 3, 59, 224, 228, 72, 83, 187, 12, 38, 156, 224, 171, 23, 35, 234, 206, 56, 34, 132, 9, 25, 224, 28, 15, 27, 31, 122, 206, 89, 66, 46, 184, 212, 69, 112, 93, 153, 12, 68, 44, 132, 116, 115, 128, 127, 45, 128, 248, 30, 123, 214, 86, 25, 214, 46, 40, 31, 180, 238, 34, 71, 78, 85, 178, 19, 28, 237, 133, 16, 183, 58, 220, 88, 117, 171, 40, 50, 57, 229, 39, 28, 162, 89, 224, 32, 48, 42, 9, 70, 69, 200, 114, 164, 18, 80, 139, 255, 8, 245, 214, 198, 186, 112, 109, 51, 40, 154, 173, 3, 248, 41, 252, 186, 21, 152, 99, 162, 138, 72, 74, 98, 234, 124, 57, 135, 125, 75, 184, 107, 91, 35, 89, 149, 170, 101, 45, 255, 52, 194, 231, 8, 71, 53, 151, 232, 147, 106, 193, 32, 171, 218, 107, 175, 130, 147, 58, 199, 14, 166, 56, 84, 245, 182, 131, 210, 77, 140, 145, 67, 39, 36, 81, 74, 50, 59, 175, 65, 108, 69, 176, 119, 111, 5, 220, 228, 215, 249, 151, 25, 193, 88, 104, 245, 3, 166, 241, 56, 24, 85, 116, 252, 110, 31, 45, 31, 53, 135, 25, 184, 240, 2, 165, 102, 56, 14, 203, 151, 32, 183, 137, 174, 112, 232, 137, 49, 192, 76, 194, 48, 51, 3, 18, 202, 128, 171, 244, 35, 28, 200, 1, 21, 28, 132, 83, 66, 47, 117, 147, 113, 37, 106, 80, 118, 217, 100, 229, 126, 182, 183, 183, 81, 65, 33, 181, 235, 223, 130, 118, 54, 177, 90, 10, 187, 200, 6, 102, 189, 93, 76, 254, 55, 69, 103, 130, 201, 57, 98, 207, 5, 152, 231, 64, 101, 0, 222, 78, 244, 13, 38, 248, 63, 163, 31, 175, 155, 203, 77, 249, 24, 139, 52, 224, 68, 199, 157, 103, 40, 131, 224, 242, 137, 225, 181, 131, 29, 128, 229, 242, 92, 42, 58, 85, 101, 69, 120, 167, 86, 99, 57, 220, 94, 231, 162, 99, 132, 221, 55, 37, 174, 194, 195, 194, 178, 232, 61, 38, 66, 42, 168, 182, 23, 106, 241, 198, 192, 217, 215, 50, 59, 225, 217, 8, 24, 147, 240, 54, 209, 158, 154, 47, 7, 212, 225, 38, 19, 4, 241, 170, 42, 2, 107, 13, 240, 77, 158, 228, 103, 237, 64, 173, 177, 143, 48, 208, 217, 140, 31, 108, 229, 140, 70, 10, 51, 122, 64, 75, 12, 145, 211, 165, 169, 145, 240, 228, 255, 115, 84, 244, 84, 125, 231, 86, 8, 52, 248, 112, 145, 221, 45, 53, 9, 92, 53, 66, 180, 172, 242, 22, 113, 106, 211, 138, 42, 63, 66, 178, 2, 160, 86, 191, 169, 237, 86, 87, 70, 78, 62, 1, 213, 97, 167, 104, 63, 60, 222, 61, 77, 55, 70, 198, 23, 8, 135, 250, 188, 93, 66, 134, 227, 192, 20, 182, 81, 129, 108, 60, 88, 141, 93, 205, 132, 52, 179, 95, 168, 181, 39, 38, 7, 206, 107, 214, 181, 101, 190, 56, 89, 60, 178, 166, 107, 99, 154, 3, 129, 39, 242, 99, 206, 124, 171, 178, 132, 138, 177, 200, 26, 11, 83, 208, 126, 142, 130, 38, 169, 82, 225, 242, 213, 101, 234, 176, 14, 229, 79, 19, 58, 72, 4, 201, 238, 77, 94, 151, 153, 10, 128, 254, 183, 134, 62, 42, 170, 39, 226, 231, 213, 223, 31, 74, 61, 94, 199, 136, 181, 153, 45, 48, 157, 50, 0, 60, 251, 155, 235, 37, 42, 168, 203, 8, 246, 116, 56, 66, 99, 34, 92, 170, 73, 29, 32, 185, 65, 23, 178, 124, 2, 254, 140, 196, 162, 33, 208, 190, 145, 237, 96, 137, 104, 94, 114, 2, 37, 83, 2, 59, 241, 115, 1, 208, 157, 193, 165, 118, 17, 156, 91, 135, 158, 192, 108, 229, 212, 236, 9, 28, 232, 75, 152, 109, 156, 152, 207, 180, 242, 34, 100, 12, 112, 243, 72, 166, 219, 31, 150, 89, 73, 243, 4, 219, 157, 46, 75, 247, 234, 143, 10, 88, 150, 67, 124, 219, 10, 6, 26, 15, 78, 177, 77, 114, 221, 121, 214, 54, 107, 254, 196, 239, 216, 168, 230, 230, 28, 94, 69, 11, 67, 161, 37, 39, 191, 18, 246, 116, 211, 14, 236, 250, 100, 23, 87, 174, 118, 164, 193, 229, 87, 38, 151, 122, 79, 217, 111, 231, 135, 82, 222, 183, 14, 208, 217, 233, 1, 121, 21, 121, 251, 162, 112, 186, 24, 65, 154, 7, 50, 186, 246, 24, 173, 198, 186, 89, 38, 117, 87, 26, 10, 94, 50, 193, 16, 135, 68, 167, 148, 251, 144, 115, 60, 48, 28, 187, 104, 161, 255, 192, 223, 214, 21, 143, 212, 214, 194, 44, 128, 162, 174, 96, 166, 91, 17, 247, 83, 230, 57, 106, 16, 104, 142, 57, 78, 235, 132, 164, 183, 174, 244, 56, 103, 113, 118, 96, 65, 40, 163, 7, 30, 134, 159, 76, 247, 31, 213, 30, 211, 203, 74, 188, 201, 38, 148, 123, 234, 157, 17, 192, 247, 26, 71, 201, 37, 226, 94, 89, 80, 180, 133, 94, 22, 94, 64, 39, 236, 227, 143, 163, 140, 126, 160, 125, 29, 99, 25, 56, 107, 89, 224, 93, 213, 48, 6, 174, 250, 127, 228, 165, 247, 193, 169, 53, 114, 176, 103, 191, 116, 118, 23, 97, 219, 73, 32, 245, 48, 81, 200, 42, 64, 190, 25, 126, 59, 198, 254, 136, 198, 30, 154, 159, 115, 133, 150, 85, 84, 81, 198, 220, 150, 67, 242, 28, 203, 189, 175, 18, 152, 74, 40, 37, 157, 101, 110, 50, 144, 94, 53, 103, 188, 60, 29, 26, 46, 38, 83, 193, 5, 41, 184, 184, 43, 65, 187, 143, 212, 123, 83, 233, 166, 99, 246, 45, 86, 5, 154, 252, 76, 189, 21, 225, 45, 46, 102, 104, 8, 225, 163, 7, 24, 22, 178, 179, 22, 211, 176, 8, 21, 171, 190, 105, 171, 201, 153, 254, 143, 184, 143, 79, 44, 99, 68, 83, 14, 221, 163, 40, 137, 30, 178, 150, 183, 168, 122, 148, 165, 126, 56, 195, 175, 162, 202, 69, 219, 175, 193, 166, 186, 252, 212, 135, 62, 240, 153, 66, 35, 240, 111, 129, 19, 45, 140, 227, 201, 185, 173, 12, 198, 97, 228, 10, 41, 101, 107, 165, 106, 140, 26, 165, 166, 212, 16, 53, 231, 73, 16, 53, 1, 76, 73, 68, 160, 75, 156, 36, 124, 36, 235, 158, 89, 98, 139, 130, 113, 19, 7, 232, 95, 112, 121, 125, 246, 130, 143, 5, 190, 216, 150, 246, 149, 254, 80, 102, 35, 174, 82, 169, 90, 189, 234, 242, 87, 91, 255, 78, 98, 197, 208, 42, 141, 31, 17, 233, 217, 151, 135, 31, 87, 71, 132, 255, 79, 98, 62, 168, 221, 172, 247, 225, 46, 155, 228, 196, 76, 95, 161, 68, 233, 203, 192, 236, 146, 149, 43, 85, 98, 110, 35, 242, 116, 216, 226, 78, 157, 114, 40, 157, 241, 33, 12, 14, 205, 192, 201, 12, 219, 255, 249, 6, 105, 86, 80, 101, 184, 26, 56, 101, 227, 25, 69, 140, 68, 35, 245, 46, 110, 221, 50, 51, 237, 20, 23, 174, 4, 137, 44, 207, 0, 201, 52, 147, 202, 111, 190, 72, 177, 228, 97, 210, 163, 150, 154, 2, 241, 97, 151, 93, 210, 199, 127, 218, 57, 45, 91, 96, 194, 160, 131, 205, 120, 102, 209, 51, 28, 68, 48, 199, 130, 77, 209, 13, 204, 141, 240, 217, 165, 87, 56, 119, 167, 53, 207, 74, 106, 163, 27, 100, 6, 252, 238, 114, 63, 40, 162, 86, 5, 153, 91, 98, 106, 124, 126, 91, 105, 173, 98, 74, 222, 85, 125, 64, 213, 102, 107, 3, 158, 243, 8, 167, 224, 50, 213, 167, 203, 19, 16, 235, 4, 43, 104, 115, 28, 1, 168, 41, 94, 241, 67, 161, 140, 45, 89, 118, 172, 162, 117, 224, 95, 245, 214, 214, 220, 117, 32, 163, 250, 84, 55, 174, 20, 7, 238, 213, 19, 177, 36, 105, 6, 75, 15, 72, 154, 18, 64, 85, 108, 213, 56, 86, 240, 124, 142, 134, 82, 100, 199, 198, 243, 12, 146, 80, 148, 251, 223, 79, 153, 181, 188, 100, 167, 228, 175, 227, 241, 164, 28, 120, 133, 170, 177, 202, 232, 101, 171, 207, 2, 32, 212, 173, 147, 117, 171, 218, 83, 216, 241, 94, 3, 103, 187, 230, 26, 168, 180, 159, 4, 173, 108, 61, 76, 182, 54, 115, 135, 144, 2, 39, 81, 126, 253, 172, 101, 144, 19, 3, 202, 12, 234, 87, 11, 222, 188, 82, 204, 27, 81, 216, 250, 163, 94, 103, 73, 149, 233, 251, 140, 172, 85, 138, 51, 203, 121, 30, 64, 184, 120, 46, 233, 199, 59, 106, 115, 123, 102, 145, 129, 213, 216, 74, 92, 11, 166, 50, 79, 3, 13, 80, 245, 241, 248, 193, 208, 78, 77, 229, 21, 67, 229, 192, 61, 115, 213, 93, 52, 225, 217, 147, 236, 135, 88, 184, 240, 49, 182, 109, 95, 67, 184, 204, 181, 176, 213, 34, 36, 149, 98, 143, 193, 225, 48, 180, 219, 69, 244, 64, 96, 234, 83, 5, 113, 122, 23, 115, 55, 87, 212, 130, 154, 96, 152, 92, 29, 136, 202, 217, 58, 236, 195, 153, 17, 14, 13, 213, 145, 36, 159, 163, 58, 191, 3, 11, 124, 34, 155, 237, 58, 57, 3, 144, 222, 25, 234, 107, 15, 183, 234, 160, 27, 44, 77, 149, 128, 57, 87, 142, 236, 113, 192, 44, 95, 140, 168, 65, 170, 167, 167, 38, 131, 33, 140, 27, 10, 248, 16, 71, 99, 115, 210, 177, 65, 198, 48, 11, 13, 1, 247, 24, 222, 248, 24, 73, 117, 11, 249, 29, 226, 114, 41, 64, 147, 58, 10, 52, 76, 19, 128, 25, 96, 78, 56, 108, 40, 200, 163, 225, 39, 179, 7, 84, 210, 59, 167, 133, 135, 35, 177, 111, 9, 96, 25, 142, 26, 71, 203, 43, 18, 176, 75, 224, 206, 24, 157, 10, 0, 133, 216, 218, 121, 210, 52, 164, 86, 148, 80, 18, 156, 150, 18, 197, 44, 74, 110, 158, 202, 194, 40, 132, 234, 166, 98, 208, 166, 193, 25, 225, 231, 118, 0, 136, 194, 251, 212, 237, 49, 94, 92, 250, 222, 143, 52, 229, 213, 147, 96, 189, 214, 182, 11, 149, 41, 202, 15, 64, 33, 216, 207, 177, 186, 8, 104, 161, 240, 145, 252, 200, 39, 45, 17, 161, 97, 92, 19, 73, 212, 7, 244, 26, 121, 77, 143, 178, 161, 48, 158, 113, 14, 2, 65, 152, 91, 51, 229, 240, 117, 52, 69, 236, 248, 75, 195, 136, 161, 56, 0, 23, 112, 252, 156, 183, 148, 116, 31, 215, 235, 78, 32, 227, 131, 219, 238, 212, 252, 43, 42, 128, 55, 12, 182, 80, 113, 168, 229, 158, 225, 54, 105, 162, 106, 41, 139, 28, 74, 213, 152, 209, 193, 3, 150, 77, 235, 193, 20, 105, 99, 66, 169, 242, 111, 229, 169, 14, 6, 26, 138, 220, 112, 172, 16, 75, 232, 233, 186, 153, 185, 253, 168, 242, 85, 202, 128, 167, 112, 84, 210, 132, 250, 61, 132, 1, 125, 51, 232, 128, 164, 2, 53, 141, 55, 237, 54, 114, 104, 0, 129, 0, 193, 109, 124, 129, 83, 48, 234, 47, 210, 47, 50, 95, 62, 156, 180, 113, 73, 81, 202, 149, 63, 161, 102, 201, 28, 165, 21, 108, 118, 205, 67, 107, 1, 242, 249, 196, 248, 179, 171, 198, 129, 145, 136, 228, 121, 198, 99, 87, 83, 133, 192, 17, 176, 12, 81, 54, 19, 66, 108, 58, 203, 110, 50, 112, 189, 12, 124, 32, 108, 70, 3, 184, 2, 11, 57, 206, 188, 255, 33, 137, 78, 63, 170, 63, 236, 212, 38, 102, 226, 116, 148, 26, 22, 30, 220, 80, 0, 244, 42, 166, 19, 192, 1, 151, 213, 35, 69, 244, 40, 88, 47, 251, 77, 95, 95, 77, 88, 40, 37, 119, 122, 50, 235, 233, 158, 215, 48, 199, 214, 84, 232, 211, 139, 193, 220, 144, 193, 94, 223, 110, 90, 146, 145, 98, 176, 143, 66, 215, 70, 157, 227, 114, 24, 187, 64, 249, 185, 134, 81, 219, 11, 187, 148, 239, 34, 232, 15, 29, 132, 225, 157, 46, 100, 93, 168, 237, 161, 86, 129, 132, 59, 67, 32, 58, 231, 132, 191, 42, 194, 2, 45, 50, 22, 180, 120, 142, 49, 191, 153, 215, 200, 224, 118, 235, 211, 196, 116, 27, 45, 116, 240, 68, 85, 168, 162, 100, 58, 10, 82, 102, 116, 177, 52, 16, 153, 61, 221, 111, 245, 128, 163, 191, 101, 108, 13, 58, 102, 171, 160, 161, 170, 129, 12, 197, 172, 228, 29, 225, 174, 214, 114, 97, 65, 160, 66, 90, 250, 229, 36, 204, 142, 163, 106, 182, 120, 67, 199, 184, 80, 147, 5, 167, 59, 117, 16, 135, 89, 69, 171, 210, 17, 226, 147, 117, 58, 33, 60, 80, 78, 103, 65, 79, 221, 48, 40, 148, 165, 149, 169, 106, 174, 50, 174, 186, 228, 122, 103, 65, 100, 3, 252, 57, 16, 176, 193, 199, 52, 103, 50, 146, 89, 87, 218, 84, 108, 175, 13, 195, 161, 111, 69, 128, 6, 191, 152, 120, 143, 177, 211, 94, 130, 41, 47, 136, 158, 165, 217, 25, 65, 234, 139, 212, 146, 51, 216, 59, 224, 4, 97, 77, 223, 128, 248, 95, 81, 39, 225, 183, 242, 69, 191, 48, 37, 177, 24, 119, 11, 227, 80, 254, 109, 164, 229, 55, 101, 88, 89, 168, 113, 244, 176, 100, 126, 79, 164, 212, 180, 241, 82, 196, 39, 81, 185, 106, 20, 3, 132, 98, 158, 244, 6, 125, 8, 77, 234, 34, 142, 170, 146, 224, 189, 127, 215, 124, 34, 24, 17, 243, 7, 74, 146, 166, 128, 179, 6, 98, 114, 190, 79, 67, 219, 171, 197, 129, 213, 239, 132, 144, 44, 234, 52, 230, 16, 94, 220, 92, 136, 0, 186, 244, 229, 53, 148, 233, 73, 249, 152, 217, 100, 6, 196, 77, 97, 138, 6, 5, 41, 196, 19, 142, 92, 46, 110, 54, 151, 156, 156, 177, 129, 2, 62, 200, 189, 193, 181, 93, 68, 60, 90, 149, 84, 203, 83, 201, 26, 18, 52, 156, 65, 179, 59, 3, 125, 19, 204, 236, 61, 163, 85, 36, 237, 47, 144, 140, 87, 154, 95, 60, 0, 22, 37, 155, 6, 7, 0, 176, 46, 247, 159, 37, 173, 224, 210, 12, 217, 248, 79, 132, 93, 138, 135, 78, 17, 227, 18, 45, 252, 48, 58, 254, 85, 36, 176, 69, 114, 1, 92, 207, 85, 193, 254, 112, 204, 78, 157, 146, 103, 123, 196, 100, 10, 46, 184, 161, 162, 78, 144, 141, 50, 86, 252, 50, 235, 184, 151, 55, 73, 187, 10, 37, 50, 198, 0, 207, 155, 104, 37, 137, 196, 54, 132, 15, 22, 93, 114, 237, 90, 250, 96, 61, 18, 152, 194, 63, 239, 16, 92, 110, 63, 209, 229, 27, 61, 154, 245, 208, 226, 145, 184, 219, 48, 187, 2, 193, 78, 24, 51, 81, 34, 172, 109, 33, 8, 23, 232, 115, 57, 152, 233, 140, 200, 196, 108, 8, 65, 251, 72, 68, 76, 181, 220, 62, 34, 119, 9, 126, 13, 186, 100, 214, 191, 149, 154, 131, 254, 200, 126, 152, 142, 103, 127, 57, 81, 255, 99, 129, 250, 33, 25, 183, 235, 134, 117, 115, 108, 95, 28, 86, 141, 217, 180, 116, 61, 201, 51, 90, 59, 160, 254, 213, 93, 21, 55, 204, 97, 62, 113, 100, 6, 107, 57, 64, 201, 157, 228, 173, 229, 35, 61, 235, 102, 161, 14, 189, 164, 112, 76, 75, 127, 18, 231, 145, 130, 79, 66, 150, 63, 30, 164, 181, 68, 176, 81, 217, 135, 54, 172, 66, 60, 232, 8, 206, 224, 245, 102, 177, 243, 64, 87, 233, 193, 244, 95, 68, 78, 255, 14, 144, 223, 147, 32, 36, 230, 212, 218, 185, 120, 243, 3, 64, 139, 233, 70, 90, 136, 5, 171, 221, 87, 98, 15, 43, 200, 131, 182, 75, 81, 139, 243, 233, 218, 246, 61, 246, 189, 204, 39, 168, 208, 131, 142, 200, 109, 158, 159, 54, 35, 91, 244, 135, 204, 241, 171, 25, 55, 255, 101, 15, 169, 221, 208, 223, 109, 244, 74, 78, 126, 25, 199, 151, 191, 110, 7, 74, 60, 169, 101, 212, 84, 228, 234, 187, 204, 110, 158, 131, 28, 21, 186, 158, 193, 129, 10, 199, 206, 160, 140, 85, 209, 196, 9, 167, 6, 157, 187, 234, 179, 190, 131, 250, 100, 34, 13, 98, 40, 94, 92, 80, 253, 7, 188, 233, 45, 45, 253, 101, 65, 250, 138, 64, 231, 109, 103, 163, 213, 33, 183, 99, 129, 181, 119, 96, 30, 234, 220, 121, 7, 109, 255, 191, 243, 188, 128, 33, 88, 16, 143, 190, 7, 175, 181, 7, 136, 203, 156, 61, 136, 2, 69, 232, 15, 168, 44, 87, 109, 95, 162, 79, 8, 203, 107, 170, 255, 6, 142, 43, 24, 69, 126, 184, 121, 213, 43, 132, 164, 198, 90, 213, 28, 144, 14, 208, 129, 24, 87, 170, 144, 6, 210, 3, 76, 220, 223, 12, 223, 191, 33, 42, 214, 218, 4, 236, 194, 78, 55, 215, 50, 24, 189, 64, 174, 166, 176, 110, 190, 23, 1, 240, 177, 109, 233, 48, 246, 116, 99, 168, 128, 246, 212, 113, 10, 168, 40, 72, 17, 184, 129, 191, 38, 158, 23, 192, 155, 21, 229, 218, 137, 168, 21, 5, 65, 28, 231, 85, 4, 162, 146, 77, 99, 228, 4, 175, 0, 27, 51, 79, 18, 111, 97, 103, 172, 198, 6, 91, 139, 38, 66, 197, 242, 219, 5, 14, 8, 127, 229, 156, 139, 219, 109, 240, 174, 20, 236, 133, 43, 9, 16, 154, 83, 150, 171, 193, 155, 217, 243, 153, 236, 53, 153, 145, 224, 243, 157, 117, 96, 254, 115, 134, 149, 101, 59, 101, 15, 198, 164, 71, 7, 151, 178, 173, 211, 235, 229, 9, 9, 216, 99, 178, 234, 127, 134, 80, 226, 219, 50, 22, 218, 153, 150, 38, 209, 194, 32, 66, 149, 30, 149, 124, 77, 60, 85, 118, 172, 161, 20, 91, 231, 157, 210, 37, 69, 134, 33, 41, 44, 94, 151, 67, 239, 251, 3, 113, 169, 83, 73, 192, 111, 144, 160, 228, 150, 146, 175, 125, 222, 155, 123, 120, 75, 181, 150, 133, 17, 143, 51, 247, 178, 66, 113, 249, 92, 118, 95, 180, 201, 132, 159, 86, 91, 191, 124, 12, 73, 198, 125, 183, 26, 228, 56, 235, 78, 33, 22, 9, 155, 187, 49, 250, 236, 170, 144, 254, 195, 101, 129, 204, 91, 228, 232, 83, 34, 133, 250, 46, 165, 21, 160, 235, 156, 158, 172, 126, 180, 15, 106, 81, 212, 178, 143, 108, 132, 145, 237, 39, 123, 72, 143, 134, 212, 135, 27, 181, 113, 35, 239, 62, 130, 93, 164, 198, 100, 252, 46, 187, 226, 50, 86, 186, 179, 196, 12, 114, 191, 240, 54, 83, 30, 201, 49, 217, 127, 202, 74, 23, 109, 216, 68, 15, 233, 13, 104, 156, 230, 200, 214, 101, 233, 175, 45, 5, 172, 142, 11, 77, 59, 228, 0, 66, 239, 70, 115, 148, 7, 67, 156, 0, 219, 132, 98, 27, 9, 144, 144, 30, 53, 134, 115, 149, 61, 197, 154, 111, 239, 224, 80, 8, 112, 195, 96, 237, 218, 127, 219, 175, 24, 53, 17, 216, 165, 180, 141, 129, 29, 101, 54, 56, 100, 229, 159, 192, 145, 52, 2, 153, 108, 127, 155, 32, 254, 200, 17, 46, 107, 205, 54, 29, 73, 214, 178, 101, 9, 180, 115, 31, 88, 253, 161, 26, 155, 120, 10, 213, 21, 61, 170, 228, 187, 227, 229, 20, 13, 78, 254, 11, 124, 55, 50, 212, 53, 166, 57, 186, 207, 11, 213, 242, 19, 215, 140, 210, 48, 136, 185, 131, 193, 183, 132, 145, 191, 195, 179, 86, 138, 83, 78, 219, 176, 27, 23, 80, 193, 113, 109, 148, 119, 97, 141, 92, 177, 70, 159, 13, 162, 139, 226, 84, 187, 120, 201, 21, 43, 242, 165, 195, 138, 70, 31, 24, 41, 58, 171, 25, 33, 30, 148, 108, 195, 238, 74, 70, 117, 66, 159, 139, 32, 185, 29, 159, 14, 174, 35, 224, 103, 147, 56, 1, 125, 46, 177, 13, 15, 3, 210, 81, 64, 203, 182, 202, 93, 111, 154, 2, 2, 86, 44, 152, 8, 167, 132, 60, 182, 67, 198, 182, 59, 84, 227, 96, 138, 251, 2, 21, 239, 58, 230, 57, 146, 193, 221, 12, 196, 61, 207, 231, 98, 11, 4, 177, 246, 216, 157, 89, 172, 178, 170, 175, 209, 162, 131, 47, 188, 103, 192, 165, 115, 97, 209, 252, 98, 231, 65, 187, 46, 16, 110, 192, 45, 167, 91, 57, 155, 96, 143, 39, 54, 55, 180, 107, 144, 184, 96, 68, 85, 87, 192, 17, 40, 90, 175, 225, 73, 82, 213, 27, 132, 105, 207, 130, 108, 238, 253, 31, 9, 225, 127, 214, 181, 236, 100, 148, 115, 164, 35, 73, 14, 16, 234, 43, 172, 86, 134, 180, 41, 169, 247, 54, 159, 144, 53, 44, 127, 207, 23, 253, 167, 50, 123, 106, 3, 74, 109, 111, 6, 105, 58, 228, 41, 2, 35, 131, 31, 117, 123, 73, 250, 146, 154, 175, 173, 76, 76, 196, 238, 132, 163, 150, 146, 219, 219, 162, 17, 80, 195, 1, 218, 225, 161, 23, 203, 47, 33, 130, 142, 104, 196, 107, 96, 40, 22, 79, 138, 143, 242, 139, 17, 13, 26, 49, 232, 163, 53, 24, 253, 191, 27, 53, 110, 165, 218, 243, 64, 82, 172, 181, 41, 86, 38, 50, 91, 32, 139, 109, 78, 246, 77, 178, 120, 213, 175, 168, 119, 85, 63, 220, 60, 161, 201, 134, 51, 147, 129, 22, 230, 17, 123, 201, 180, 236, 130, 33, 64, 141, 142, 12, 201, 155, 226, 224, 151, 19, 253, 200, 162, 85, 156, 199, 249, 221, 157, 217, 185, 123, 36, 209, 173, 203, 130, 132, 217, 6, 18, 248, 105, 46, 201, 184, 214, 35, 26, 85, 104, 33, 158, 236, 154, 152, 193, 82, 146, 188, 134, 42, 198, 199, 161, 4, 182, 101, 172, 233, 217, 160, 119, 161, 2, 90, 189, 238, 44, 85, 141, 207, 17, 249, 162, 228, 140, 189, 155, 68, 199, 162, 0, 132, 149, 176, 161, 112, 217, 249, 30, 64, 124, 242, 238, 62, 5, 87, 48, 254, 192, 199, 77, 152, 131, 116, 175, 242, 42, 211, 29, 157, 15, 182, 203, 230, 173, 217, 218, 88, 177, 68, 11, 33, 110, 198, 0, 105, 207, 231, 126, 70, 112, 244, 48, 89, 31, 101, 149, 200, 80, 177, 197, 120, 228, 183, 140, 107, 113, 148, 66, 159, 249, 136, 175, 156, 119, 43, 167, 238, 171, 11, 20, 101, 203, 192, 18, 167, 199, 29, 251, 102, 76, 232, 240, 168, 229, 75, 93, 95, 228, 194, 163, 91, 45, 178, 60, 161, 107, 85, 229, 36, 214, 247, 122, 140, 102, 109, 158, 125, 93, 248, 250, 188, 104, 44, 4, 222, 138, 241, 141, 40, 203, 30, 217, 206, 190, 170, 131, 112, 1, 69, 65, 14, 85, 36, 244, 2, 205, 80, 101, 222, 204, 48, 231, 92, 211, 65, 7, 227, 18, 31, 115, 153, 150, 78, 41, 226, 101, 210, 13, 110, 156, 132, 29, 245, 109, 49, 141, 108, 77, 166, 30, 11, 52, 79, 198, 110, 30, 15, 49, 55, 48, 13, 23, 185, 127, 78, 123, 135, 67, 15, 112, 114, 38, 222, 58, 98, 160, 206, 51, 76, 172, 101, 138, 116, 230, 163, 165, 233, 145, 62, 14, 124, 232, 137, 116, 177, 16, 22, 226, 104, 163, 35, 74, 61, 203, 245, 215, 72, 251, 49, 65, 7, 77, 7, 6, 138, 248, 242, 40, 136, 207, 167, 248, 67, 30, 30, 136, 55, 159, 249, 37, 174, 247, 63, 39, 253, 106, 206, 229, 75, 69, 189, 151, 181, 237, 72, 64, 125, 125, 232, 145, 140, 5, 99, 41, 42, 34, 117, 161, 73, 35, 72, 40, 188, 200, 69, 218, 45, 5, 149, 3, 137, 122, 109, 28, 57, 220, 58, 248, 252, 221, 14, 6, 21, 190, 98, 192, 220, 163, 225, 169, 23, 1, 133, 25, 85, 34, 126, 242, 240, 22, 158, 123, 116, 121, 129, 90, 72, 137, 80, 197, 206, 210, 141, 232, 107, 126, 235, 147, 34, 192, 217, 34, 110, 226, 16, 91, 2, 36, 156, 26, 187, 34, 68, 135, 197, 228, 157, 229, 166, 149, 134, 41, 163, 123, 119, 92, 136, 33, 73, 41, 246, 241, 122, 172, 240, 245, 6, 233, 221, 207, 2, 65, 153, 58, 47, 74, 210, 112, 19, 215, 194, 139, 148, 53, 188, 199, 134, 143, 188, 37, 27, 27, 0, 106, 213, 176, 59, 56, 180, 90, 175, 191, 202, 177, 181, 124, 101, 249, 87, 12, 177, 136, 127, 99, 141, 23, 131, 241, 241, 51, 40, 251, 127, 172, 55, 185, 112, 200, 105, 211, 95, 230, 55, 128, 199, 59, 150, 209, 84, 43, 66, 147, 102, 177, 240, 2, 51, 21, 170, 129, 145, 154, 228, 251, 62, 199, 21, 217, 126, 2, 9, 72, 23, 123, 67, 77, 145, 188, 116, 239, 164, 9, 180, 17, 229, 93, 167, 200, 35, 53, 20, 148, 11, 90, 7, 128, 38, 149, 96, 76, 211, 162, 86, 247, 47, 219, 153, 228, 208, 174, 1, 77, 130, 206, 8, 56, 77, 178, 126, 103, 64, 66, 173, 130, 178, 15, 157, 82, 151, 6, 31, 32, 24, 254, 116, 177, 125, 94, 103, 50, 23, 88, 167, 177, 178, 127, 154, 65, 221, 58, 221, 59, 226, 100, 212, 90, 195, 98, 94, 191, 30, 232, 150, 153, 106, 253, 109, 235, 75, 64, 207, 222, 250, 116, 71, 33, 65, 213, 195, 126, 156, 152, 66, 192, 144, 40, 227, 151, 193, 175, 99, 224, 91, 60, 164, 255, 6, 122, 7, 67, 247, 68, 73, 212, 29, 46, 88, 182, 8, 140, 159, 12, 53, 10, 134, 178, 137, 239, 153, 185, 79, 82, 248, 233, 246, 212, 236, 69, 141, 78, 223, 143, 137, 36, 152, 203, 115, 15, 73, 227, 247, 216, 141, 74, 85, 92, 252, 219, 11, 86, 24, 36, 132, 246, 133, 77, 210, 94, 247, 210, 48, 169, 100, 17, 141, 75, 195, 158, 42, 251, 39, 47, 60, 157, 65, 57, 125, 28, 71, 111, 42, 158, 47, 14, 42, 28, 117, 50, 96, 232, 48, 42, 244, 34, 57, 12, 138, 203, 106, 250, 25, 67, 23, 176, 220, 128, 5, 19, 7, 102, 171, 23, 9, 30, 96, 230, 35, 15, 34, 132, 122, 139, 178, 231, 226, 252, 122, 142, 51, 52, 11, 84, 228, 93, 72, 237, 102, 129, 75, 238, 112, 182, 84, 130, 158, 130, 41, 139, 174, 56, 166, 174, 139, 242, 44, 145, 148, 133, 123, 42, 62, 163, 116, 84, 154, 57, 28, 58, 32, 154, 34, 151, 21, 127, 143, 122, 136, 139, 252, 101, 165, 227, 105, 4, 244, 58, 116, 125, 45, 98, 76, 103, 94, 178, 138, 217, 234, 42, 40, 152, 61, 28, 185, 62, 43, 88, 177, 3, 57, 129, 36, 0, 238, 63, 194, 253, 71, 206, 114, 243, 137, 92, 79, 175, 23, 62, 120, 193, 114, 13, 142, 244, 4, 131, 205, 14, 186, 248, 29, 212, 164, 52, 12, 111, 31, 124, 143, 212, 208, 173, 96, 133, 27, 194, 239, 242, 62, 141, 119, 203, 52, 113, 243, 31, 84, 235, 5, 5, 64, 191, 252, 81, 217, 200, 232, 68, 61, 213, 171, 145, 221, 224, 102, 138, 6, 53, 167, 130, 6, 206, 196, 226, 4, 174, 108, 86, 154, 134, 37, 59, 110, 9, 191, 10, 117, 191, 133, 114, 72, 86, 93, 113, 19, 75, 34, 46, 2, 185, 169, 224, 240, 13, 200, 128, 24, 118, 36, 233, 120, 115, 6, 192, 92, 12, 228, 224, 111, 192, 137, 188, 16, 155, 62, 198, 60, 154, 52, 196, 125, 70, 58, 33, 43, 11, 168, 35, 190, 161, 124, 108, 153, 90, 186, 113, 57, 176, 154, 172, 202, 179, 55, 179, 115, 45, 183, 90, 4, 216, 112, 48, 228, 230, 219, 58, 70, 142, 78, 74, 9, 135, 22, 40, 70, 146, 224, 171, 128, 68, 8, 228, 90, 35, 220, 41, 184, 91, 212, 34, 57, 143, 189, 6, 215, 17, 90, 143, 19, 92, 97, 0, 32, 3, 71, 160, 179, 249, 172, 83, 31, 79, 228, 235, 186, 237, 88, 60, 223, 16, 150, 62, 200, 199, 30, 185, 44, 207, 192, 77, 194, 159, 154, 169, 139, 30, 66, 92, 141, 190, 237, 210, 202, 206, 242, 79, 195, 207, 22, 106, 63, 29, 195, 112, 209, 66, 25, 0, 132, 115, 0, 202, 40, 194, 111, 241, 33, 135, 53, 223, 250, 204, 154, 93, 179, 199, 141, 86, 243, 91, 194, 109, 181, 226, 69, 138, 254, 216, 121, 193, 63, 120, 2, 134, 176, 156, 166, 74, 11, 81, 70, 173, 20, 22, 53, 20, 94, 78, 223, 122, 51, 83, 235, 222, 40, 243, 124, 92, 42, 236, 168, 151, 228, 224, 219, 96, 235, 105, 253, 68, 151, 63, 159, 213, 61, 96, 8, 224, 24, 28, 90, 129, 156, 22, 25, 66, 66, 143, 239, 196, 171, 29, 13, 95, 163, 56, 87, 48, 212, 215, 72, 227, 81, 104, 53, 139, 236, 188, 128, 188, 39, 63, 223, 221, 87, 39, 250, 188, 147, 17, 199, 187, 191, 223, 149, 255, 172, 2, 174, 180, 30, 3, 20, 9, 179, 209, 14, 135, 177, 230, 230, 197, 6, 214, 127, 184, 220, 182, 147, 196, 1, 233, 166, 208, 117, 53, 27, 239, 167, 250, 146, 188, 191, 44, 63, 126, 25, 131, 251, 155, 209, 124, 244, 61, 128, 33, 161, 254, 124, 17, 223, 157, 9, 174, 72, 136, 130, 99, 2, 218, 76, 248, 115, 52, 140, 75, 220, 169, 145, 119, 90, 154, 55, 179, 3, 247, 245, 224, 97, 120, 11, 63, 95, 248, 227, 205, 148, 9, 156, 121, 111, 198, 183, 194, 240, 224, 127, 172, 161, 40, 176, 174, 198, 115, 39, 21, 135, 93, 120, 52, 77, 227, 203, 226, 47, 228, 208, 254, 86, 42, 178, 168, 118, 24, 219, 101, 28, 233, 205, 124, 126, 162, 249, 141, 40, 110, 247, 247, 167, 36, 186, 206, 2, 218, 68, 198, 144, 175, 3, 72, 97, 133, 245, 21, 59, 121, 75, 124, 96, 81, 44, 114, 14, 155, 78, 83, 4, 100, 18, 134, 220, 4, 88, 1, 176, 47, 235, 54, 199, 40, 55, 162, 55, 29, 186, 218, 192, 34, 234, 96, 241, 128, 217, 64, 204, 95, 238, 170, 235, 230, 242, 14, 87, 111, 159, 173, 38, 146, 75, 197, 5, 115, 239, 112, 251, 19, 178, 192, 186, 135, 123, 127, 45, 136, 135, 4, 78, 178, 164, 252, 8, 36, 171, 74, 21, 243, 236, 22, 204, 242, 123, 6, 114, 138, 102, 239, 74, 238, 255, 233, 3, 164, 62, 58, 143, 197, 248, 147, 172, 165, 4, 14, 1, 147, 251, 79, 85, 50, 48, 118, 108, 30, 77, 81, 140, 29, 143, 198, 121, 197, 19, 225, 49, 93, 53, 73, 33, 122, 100, 234, 165, 67, 183, 100, 195, 168, 123, 37, 235, 86, 147, 164, 71, 20, 232, 206, 20, 228, 22, 17, 177, 2, 116, 163, 136, 187, 43, 160, 176, 83, 52, 39, 224, 140, 250, 66, 232, 255, 36, 166, 132, 97, 252, 44, 246, 106, 21, 113, 16, 166, 70, 54, 222, 228, 10, 51, 19, 106, 141, 31, 102, 129, 132, 219, 84, 27, 192, 66, 145, 133, 208, 111, 137, 81, 145, 121, 176, 155, 133, 222, 27, 156, 93, 19, 244, 230, 154, 5, 113, 177, 247, 70, 125, 202, 138, 60, 3, 29, 182, 33, 211, 112, 136, 107, 223, 175, 131, 92, 13, 23, 133, 238, 136, 130, 231, 215, 211, 199, 47, 70, 75, 104, 253, 172, 61, 246, 99, 80, 154, 169, 205, 208, 105, 43, 2, 110, 203, 246, 16, 176, 11, 152, 190, 185, 100, 102, 6, 125, 63, 101, 184, 157, 6, 52, 237, 85, 121, 193, 4, 245, 227, 178, 121, 91, 208, 31, 149, 32, 198, 6, 44, 160, 127, 164, 97, 113, 61, 8, 129, 126, 48, 10, 29, 100, 71, 211, 225, 40, 9, 0, 3, 68, 93, 210, 80, 229, 218, 36, 186, 188, 107, 182, 149, 10, 6, 152, 149, 89, 117, 111, 83, 95, 195, 187, 170, 69, 248, 36, 46, 55, 27, 32, 176, 49, 156, 89, 40, 187, 234, 208, 124, 4, 208, 147, 55, 234, 237, 170, 226, 161, 111, 205, 227, 202, 198, 15, 149, 253, 102, 56, 203, 135, 155, 57, 133, 7, 109, 38, 45, 84, 8, 201, 120, 98, 237, 208, 163, 213, 53, 176, 121, 188, 246, 40, 141, 178, 27, 12, 74, 154, 55, 231, 250, 214, 249, 165, 18, 187, 143, 85, 131, 175, 192, 203, 220, 173, 219, 162, 181, 130, 100, 203, 31, 68, 146, 157, 10, 1, 49, 123, 56, 175, 34, 92, 31, 205, 201, 39, 97, 89, 162, 176, 166, 198, 242, 192, 212, 230, 208, 253, 110, 118, 141, 136, 68, 241, 174, 93, 119, 157, 164, 70, 52, 222, 125, 170, 235, 170, 115, 129, 254, 58, 191, 19, 12, 9, 76, 159, 116, 183, 185, 166, 169, 247, 179, 96, 43, 63, 202, 50, 91, 14, 150, 45, 142, 89, 161, 224, 94, 7, 25, 127, 143, 190, 148, 251, 243, 246, 157, 36, 116, 199, 185, 196, 245, 6, 4, 255, 135, 86, 236, 255, 223, 240, 191, 8, 186, 178, 34, 247, 77, 40, 193, 224, 191, 235, 56, 14, 246, 154, 127, 15, 214, 232, 95, 120, 83, 143, 147, 159, 97, 207, 96, 9, 174, 129, 106, 21, 250, 164, 65, 103, 111, 23, 160, 242, 127, 5, 172, 168, 68, 41, 119, 189, 125, 79, 82, 22, 58, 113, 205, 193, 107, 168, 144, 220, 34, 198, 164, 235, 153, 160, 200, 39, 196, 87, 81, 195, 247, 81, 215, 98, 5, 153, 67, 60, 255, 1, 229, 149, 1, 43, 195, 242, 114, 27, 7, 17, 7, 48, 7, 15, 179, 77, 91, 7, 173, 203, 172, 82, 199, 183, 45, 3, 129, 165, 46, 118, 88, 51, 37, 119, 226, 88, 128, 248, 41, 126, 17, 63, 63, 4, 255, 115, 59, 255, 240, 220, 172, 123, 102, 29, 135, 40, 107, 120, 53, 184, 127, 231, 193, 184, 153, 137, 247, 151, 78, 69, 91, 191, 61, 101, 207, 63, 105, 107, 14, 17, 32, 90, 219, 46, 140, 31, 62, 162, 109, 58, 9, 130, 12, 43, 19, 47, 212, 0, 90, 155, 76, 81, 171, 218, 9, 247, 3, 109, 2, 16, 172, 132, 3, 110, 169, 67, 209, 224, 73, 187, 152, 1, 69, 219, 82, 197, 108, 65, 235, 90, 151, 104, 66, 213, 115, 201, 79, 245, 192, 44, 117, 92, 194, 188, 160, 230, 5, 218, 50, 149, 8, 178, 46, 251, 29, 25, 152, 183, 68, 232, 119, 92, 180, 46, 74, 54, 196, 101, 98, 232, 155, 48, 80, 197, 12, 73, 58, 21, 146, 48, 187, 167, 6, 244, 119, 130, 90, 213, 218, 183, 48, 80, 166, 206, 163, 4, 184, 126, 190, 35, 86, 79, 221, 49, 160, 109, 215, 63, 102, 96, 125, 91, 10, 111, 205, 186, 170, 6, 107, 177, 75, 228, 128, 132, 185, 17, 65, 18, 94, 203, 211, 252, 238, 28, 191, 99, 67, 146, 56, 57, 126, 71, 134, 71, 28, 227, 119, 92, 120, 100, 173, 101, 30, 73, 218, 119, 132, 56, 125, 71, 5, 181, 139, 117, 185, 40, 5, 226, 158, 223, 241, 42, 73, 251, 206, 37, 98, 169, 239, 248, 240, 88, 189, 99, 3, 175, 122, 199, 133, 73, 83, 164, 222, 113, 161, 222, 81, 129, 114, 143, 64, 96, 60, 133, 174, 253, 166, 169, 213, 33, 255, 223, 133, 252, 243, 29, 29, 250, 123, 0, 213, 244, 43, 218, 0, 161, 152, 29, 213, 213, 52, 252, 144, 149, 137, 23, 62, 84, 49, 67, 159, 239, 216, 112, 126, 41, 200, 31, 217, 249, 142, 11, 26, 137, 131, 52, 246, 72, 131, 182, 109, 154, 162, 7, 213, 140, 116, 126, 0, 100, 192, 175, 99, 249, 142, 11, 213, 210, 209, 38, 223, 177, 17, 225, 174, 65, 154, 178, 223, 161, 37, 99, 40, 203, 102, 28, 30, 65, 190, 192, 115, 210, 50, 161, 126, 107, 129, 208, 148, 253, 15, 72, 179, 36, 229, 35, 195, 59, 6, 192, 19, 45, 119, 132, 120, 4, 2, 91, 119, 92, 64, 24, 71, 17, 28, 119, 132, 136, 224, 184, 163, 194, 51, 211, 70, 142, 59, 54, 112, 220, 209, 193, 184, 163, 2, 117, 71, 5, 12, 147, 201, 29, 25, 182, 29, 31, 175, 158, 218, 145, 33, 181, 163, 163, 181, 149, 61, 111, 156, 144, 79, 112, 132, 52, 213, 158, 224, 200, 176, 38, 56, 54, 244, 119, 77, 112, 100, 240, 53, 193, 145, 34, 237, 251, 50, 52, 193, 49, 98, 77, 112, 108, 224, 164, 104, 130, 35, 228, 155, 54, 118, 236, 113, 142, 16, 206, 47, 115, 125, 253, 92, 142, 233, 163, 87, 117, 92, 127, 219, 57, 46, 248, 149, 56, 152, 111, 219, 206, 113, 193, 76, 91, 180, 32, 182, 31, 122, 152, 125, 118, 142, 143, 166, 177, 115, 124, 72, 218, 115, 112, 109, 233, 188, 233, 108, 52, 109, 251, 33, 110, 37, 238, 120, 239, 101, 80, 99, 135, 76, 140, 93, 206, 81, 226, 119, 57, 127, 114, 57, 199, 134, 235, 182, 182, 206, 145, 225, 17, 8, 109, 157, 227, 162, 162, 206, 81, 65, 251, 121, 42, 67, 74, 213, 57, 54, 208, 42, 73, 235, 154, 23, 39, 196, 30, 69, 227, 254, 164, 206, 145, 241, 252, 166, 101, 54, 169, 115, 124, 60, 41, 169, 115, 100, 208, 246, 42, 40, 169, 243, 71, 57, 71, 135, 71, 57, 71, 5, 215, 166, 101, 63, 92, 45, 132, 58, 80, 119, 215, 118, 11, 252, 225, 147, 118, 87, 148, 115, 132, 84, 148, 115, 84, 80, 12, 46, 155, 226, 72, 237, 241, 181, 212, 241, 71, 165, 25, 173, 170, 147, 210, 204, 160, 230, 110, 93, 176, 214, 74, 26, 52, 120, 211, 137, 26, 197, 161, 150, 46, 243, 187, 32, 117, 132, 120, 36, 123, 209, 102, 229, 154, 208, 233, 28, 31, 92, 23, 67, 2, 197, 144, 164, 149, 237, 55, 117, 72, 83, 58, 199, 70, 82, 197, 9, 185, 100, 15, 171, 159, 131, 75, 22, 225, 148, 54, 120, 68, 215, 146, 174, 177, 71, 208, 183, 106, 246, 71, 37, 159, 52, 178, 240, 67, 194, 249, 166, 233, 66, 223, 30, 105, 228, 42, 101, 200, 61, 49, 72, 206, 120, 178, 59, 209, 55, 59, 58, 24, 243, 130, 210, 54, 118, 116, 120, 218, 126, 86, 211, 216, 209, 161, 203, 155, 16, 209, 217, 216, 177, 161, 117, 162, 140, 29, 23, 189, 216, 241, 161, 77, 182, 78, 34, 154, 159, 95, 181, 139, 29, 25, 96, 111, 21, 59, 54, 248, 132, 4, 18, 200, 61, 34, 73, 236, 200, 192, 203, 75, 225, 171, 180, 33, 90, 223, 165, 74, 20, 193, 11, 161, 129, 15, 141, 211, 38, 118, 92, 64, 44, 254, 240, 164, 93, 236, 30, 206, 113, 173, 146, 116, 17, 107, 25, 73, 82, 220, 24, 104, 147, 7, 93, 79, 49, 123, 180, 109, 222, 226, 198, 65, 66, 242, 52, 199, 135, 228, 105, 142, 10, 238, 155, 163, 2, 242, 230, 216, 32, 73, 233, 40, 220, 28, 25, 46, 155, 194, 220, 28, 25, 78, 122, 101, 36, 218, 28, 27, 79, 69, 69, 54, 71, 6, 143, 36, 244, 104, 38, 11, 134, 89, 133, 176, 97, 237, 63, 212, 184, 201, 86, 46, 155, 163, 67, 155, 223, 31, 126, 33, 218, 156, 208, 179, 227, 200, 101, 115, 116, 144, 100, 115, 116, 172, 75, 247, 204, 113, 241, 104, 188, 15, 174, 173, 84, 34, 247, 204, 113, 194, 57, 230, 168, 176, 128, 0, 13, 15, 146, 148, 206, 113, 102, 230, 232, 104, 91, 89, 182, 28, 23, 106, 155, 183, 28, 25, 154, 183, 28, 29, 154, 183, 28, 21, 36, 219, 120, 57, 50, 36, 94, 142, 10, 232, 160, 24, 214, 91, 34, 77, 187, 28, 29, 13, 78, 117, 57, 46, 60, 32, 54, 151, 99, 176, 216, 59, 13, 223, 148, 53, 238, 157, 52, 69, 19, 85, 11, 90, 81, 3, 253, 92, 142, 11, 174, 139, 8, 12, 142, 231, 114, 92, 104, 90, 46, 199, 133, 135, 217, 8, 9, 179, 179, 40, 165, 225, 97, 246, 29, 232, 208, 120, 127, 21, 90, 114, 57, 74, 120, 75, 101, 18, 199, 69, 47, 92, 169, 115, 43, 113, 108, 240, 168, 88, 71, 199, 122, 203, 214, 247, 117, 116, 76, 122, 29, 21, 244, 189, 75, 56, 108, 58, 9, 57, 26, 183, 117, 92, 208, 182, 139, 162, 173, 1, 74, 231, 8, 33, 208, 195, 236, 2, 143, 160, 135, 217, 5, 84, 49, 230, 73, 65, 41, 53, 232, 155, 160, 206, 37, 151, 135, 206, 69, 87, 69, 197, 82, 28, 60, 237, 251, 126, 190, 71, 64, 144, 142, 63, 240, 190, 203, 169, 123, 68, 112, 254, 37, 43, 91, 246, 104, 187, 34, 188, 225, 141, 211, 66, 22, 172, 156, 60, 154, 33, 24, 43, 7, 54, 172, 79, 108, 29, 25, 154, 187, 21, 33, 236, 181, 102, 29, 25, 32, 223, 84, 186, 10, 104, 191, 111, 104, 93, 217, 154, 117, 92, 180, 102, 29, 29, 173, 207, 172, 35, 195, 51, 235, 168, 160, 106, 29, 33, 107, 242, 28, 199, 133, 181, 255, 30, 13, 43, 223, 4, 69, 16, 181, 30, 59, 142, 12, 207, 142, 163, 130, 227, 233, 52, 154, 29, 71, 135, 42, 110, 104, 93, 162, 135, 89, 199, 142, 35, 68, 69, 151, 227, 184, 240, 168, 4, 125, 211, 137, 178, 117, 28, 27, 172, 100, 29, 199, 133, 231, 153, 117, 28, 25, 60, 2, 65, 181, 58, 46, 105, 69, 33, 120, 68, 146, 212, 73, 207, 111, 194, 67, 93, 38, 135, 76, 154, 162, 181, 212, 113, 108, 56, 52, 45, 23, 117, 28, 31, 80, 3, 123, 158, 142, 35, 131, 235, 116, 28, 23, 28, 199, 134, 174, 101, 212, 53, 86, 190, 9, 234, 43, 223, 4, 117, 88, 249, 38, 232, 227, 24, 194, 214, 113, 36, 161, 141, 23, 54, 180, 62, 185, 28, 74, 73, 58, 142, 144, 206, 8, 122, 240, 200, 74, 248, 144, 144, 142, 163, 130, 174, 101, 208, 4, 18, 68, 72, 199, 241, 161, 107, 25, 4, 65, 58, 142, 13, 8, 210, 113, 84, 240, 8, 132, 116, 28, 25, 118, 37, 84, 81, 140, 35, 195, 209, 97, 93, 54, 20, 241, 234, 234, 188, 58, 54, 216, 58, 142, 36, 208, 171, 99, 195, 202, 73, 218, 198, 172, 211, 65, 175, 142, 11, 90, 255, 181, 65, 175, 142, 14, 85, 173, 190, 18, 198, 136, 166, 173, 36, 241, 90, 208, 171, 35, 228, 97, 22, 186, 147, 86, 71, 6, 36, 73, 249, 254, 77, 89, 99, 231, 159, 7, 88, 61, 245, 246, 186, 129, 123, 172, 147, 210, 180, 109, 154, 124, 164, 93, 0, 215, 77, 128, 250, 82, 102, 27, 86, 249, 169, 156, 146, 200, 39, 56, 98, 32, 225, 173, 79, 46, 148, 106, 97, 185, 80, 218, 165, 77, 209, 214, 234, 144, 235, 226, 70, 44, 151, 0, 18, 175, 146, 244, 22, 244, 77, 153, 46, 213, 222, 226, 148, 6, 152, 164, 32, 253, 220, 196, 238, 14, 30, 80, 154, 117, 137, 26, 184, 235, 106, 7, 36, 98, 89, 18, 72, 0, 65, 84, 84, 181, 125, 52, 78, 59, 73, 6, 233, 164, 213, 177, 161, 27, 221, 15, 143, 32, 126, 6, 141, 61, 130, 15, 15, 179, 169, 57, 40, 22, 179, 147, 36, 102, 14, 187, 18, 106, 208, 138, 93, 250, 38, 168, 99, 99, 130, 58, 42, 248, 149, 188, 235, 59, 176, 171, 40, 122, 250, 219, 46, 231, 17, 234, 153, 144, 166, 166, 223, 212, 177, 97, 109, 50, 213, 212, 81, 131, 218, 110, 84, 239, 162, 154, 58, 50, 124, 237, 63, 200, 35, 241, 208, 0, 161, 205, 50, 190, 159, 142, 222, 245, 83, 187, 17, 0, 195, 172, 66, 173, 19, 166, 142, 15, 213, 11, 113, 215, 133, 246, 121, 66, 251, 30, 188, 0, 254, 203, 24, 35, 0, 33, 188, 201, 71, 24, 209, 58, 217, 86, 139, 82, 36, 38, 58, 35, 72, 27, 47, 246, 182, 233, 82, 199, 7, 218, 66, 43, 182, 161, 76, 157, 8, 159, 52, 218, 32, 228, 143, 13, 175, 236, 144, 63, 46, 92, 115, 200, 31, 25, 252, 209, 241, 184, 240, 71, 37, 13, 249, 35, 131, 127, 37, 137, 37, 137, 153, 147, 184, 194, 136, 112, 9, 253, 236, 102, 29, 18, 40, 151, 12, 249, 35, 67, 195, 240, 216, 144, 36, 102, 40, 178, 248, 166, 174, 237, 144, 47, 242, 199, 6, 127, 132, 184, 63, 58, 214, 4, 199, 101, 55, 200, 31, 35, 252, 17, 242, 73, 93, 69, 145, 63, 54, 190, 169, 106, 248, 227, 227, 241, 33, 157, 63, 82, 52, 63, 253, 184, 240, 251, 244, 227, 2, 63, 122, 250, 17, 162, 189, 157, 208, 211, 143, 13, 100, 188, 58, 246, 250, 113, 161, 139, 97, 94, 63, 46, 156, 127, 24, 210, 215, 143, 13, 167, 121, 220, 143, 12, 19, 190, 246, 159, 196, 87, 244, 81, 74, 150, 251, 49, 98, 229, 78, 182, 31, 33, 88, 234, 130, 116, 185, 237, 199, 135, 107, 219, 53, 241, 78, 179, 173, 180, 193, 25, 134, 35, 92, 219, 46, 182, 253, 40, 193, 182, 31, 21, 60, 130, 13, 10, 93, 94, 106, 117, 207, 107, 90, 110, 63, 46, 120, 152, 93, 164, 246, 248, 82, 197, 204, 177, 214, 74, 26, 174, 141, 246, 35, 164, 109, 58, 9, 57, 168, 183, 78, 178, 127, 33, 30, 65, 14, 42, 219, 159, 108, 1, 132, 71, 36, 254, 234, 72, 53, 165, 146, 148, 253, 184, 160, 223, 162, 25, 190, 105, 167, 211, 148, 253, 248, 152, 32, 130, 126, 84, 112, 154, 199, 143, 16, 39, 61, 126, 92, 232, 236, 230, 71, 9, 247, 92, 14, 223, 236, 223, 236, 104, 101, 218, 134, 23, 59, 126, 132, 120, 152, 93, 142, 109, 196, 3, 50, 216, 241, 163, 66, 231, 226, 248, 145, 193, 35, 16, 208, 17, 1, 132, 8, 68, 208, 195, 236, 98, 252, 8, 89, 140, 31, 21, 186, 98, 25, 77, 37, 252, 8, 105, 93, 102, 191, 169, 90, 126, 132, 52, 94, 132, 224, 71, 134, 71, 16, 62, 116, 45, 51, 65, 252, 200, 152, 0, 243, 15, 241, 227, 98, 2, 223, 246, 33, 126, 126, 92, 32, 126, 116, 240, 35, 131, 223, 129, 31, 25, 21, 135, 24, 241, 35, 126, 116, 64, 252, 252, 232, 128, 24, 211, 32, 126, 140, 120, 68, 144, 240, 201, 235, 113, 225, 18, 15, 63, 58, 92, 159, 223, 4, 126, 132, 248, 84, 136, 31, 33, 174, 105, 217, 73, 136, 31, 29, 252, 216, 128, 141, 119, 6, 135, 7, 126, 132, 136, 128, 4, 16, 64, 208, 30, 25, 28, 123, 124, 56, 233, 147, 61, 50, 120, 68, 173, 199, 133, 245, 251, 232, 208, 245, 251, 16, 87, 45, 243, 221, 190, 115, 251, 200, 88, 253, 22, 250, 244, 77, 208, 196, 158, 182, 143, 11, 253, 84, 140, 230, 197, 73, 169, 123, 254, 233, 155, 224, 112, 82, 43, 131, 120, 12, 73, 51, 131, 122, 65, 220, 191, 131, 26, 123, 196, 65, 63, 23, 211, 22, 61, 109, 191, 225, 164, 212, 167, 73, 86, 82, 208, 47, 99, 156, 36, 22, 115, 162, 167, 237, 227, 195, 55, 59, 219, 199, 5, 99, 251, 168, 0, 33, 73, 204, 144, 54, 174, 104, 240, 8, 210, 198, 21, 200, 112, 124, 69, 145, 247, 195, 108, 132, 55, 67, 171, 36, 173, 67, 7, 143, 86, 167, 42, 241, 8, 4, 110, 210, 161, 141, 43, 32, 149, 101, 30, 24, 102, 21, 82, 182, 143, 141, 135, 89, 181, 246, 113, 241, 72, 210, 62, 46, 60, 46, 105, 207, 121, 100, 144, 164, 92, 40, 220, 206, 99, 195, 37, 131, 60, 124, 211, 238, 151, 26, 39, 52, 17, 193, 105, 30, 183, 243, 200, 208, 245, 31, 209, 180, 79, 110, 231, 145, 129, 210, 140, 103, 182, 157, 71, 6, 136, 101, 151, 122, 135, 56, 133, 51, 89, 144, 227, 202, 144, 131, 106, 59, 143, 11, 190, 80, 169, 237, 60, 54, 48, 229, 209, 243, 189, 206, 163, 163, 173, 243, 8, 73, 172, 180, 213, 249, 135, 217, 166, 206, 227, 227, 89, 154, 58, 143, 12, 206, 160, 166, 206, 227, 162, 105, 203, 212, 121, 92, 236, 67, 202, 212, 121, 100, 72, 218, 99, 30, 23, 214, 254, 107, 160, 235, 53, 162, 248, 182, 235, 43, 250, 200, 120, 237, 76, 232, 208, 120, 63, 35, 38, 128, 152, 127, 19, 12, 26, 24, 102, 21, 250, 138, 254, 87, 244, 209, 209, 234, 188, 62, 50, 172, 75, 180, 54, 219, 127, 219, 139, 52, 88, 236, 29, 228, 139, 249, 25, 32, 67, 31, 29, 30, 186, 216, 245, 17, 242, 174, 143, 10, 218, 156, 80, 132, 71, 32, 32, 100, 65, 171, 183, 62, 50, 72, 40, 136, 65, 118, 235, 227, 163, 249, 179, 109, 147, 78, 226, 87, 2, 105, 109, 45, 23, 180, 240, 65, 43, 214, 17, 107, 125, 108, 120, 68, 21, 55, 247, 239, 32, 119, 93, 77, 83, 211, 199, 6, 143, 99, 250, 184, 16, 1, 122, 109, 25, 43, 127, 142, 233, 227, 131, 167, 179, 185, 161, 244, 201, 181, 250, 65, 28, 211, 71, 134, 254, 54, 197, 23, 76, 31, 27, 142, 233, 163, 194, 107, 91, 250, 216, 240, 205, 110, 162, 177, 71, 152, 236, 70, 151, 62, 50, 92, 126, 227, 93, 155, 234, 99, 67, 5, 154, 234, 35, 196, 241, 129, 82, 127, 46, 61, 54, 60, 50, 26, 239, 194, 56, 61, 66, 188, 239, 90, 107, 37, 18, 207, 71, 70, 119, 62, 42, 56, 131, 58, 31, 25, 212, 229, 187, 124, 92, 36, 117, 142, 92, 62, 50, 254, 49, 114, 249, 184, 144, 172, 124, 149, 228, 35, 195, 61, 169, 182, 148, 181, 249, 248, 88, 155, 143, 10, 139, 122, 24, 38, 31, 23, 222, 248, 113, 82, 62, 50, 80, 243, 231, 122, 75, 62, 66, 44, 249, 75, 62, 50, 124, 179, 55, 180, 98, 31, 32, 186, 150, 124, 92, 208, 181, 228, 178, 228, 35, 195, 113, 235, 183, 117, 208, 10, 225, 17, 166, 239, 143, 35, 227, 87, 146, 218, 227, 184, 72, 142, 1, 113, 210, 43, 227, 72, 90, 81, 148, 218, 227, 216, 120, 28, 39, 212, 140, 240, 65, 181, 255, 17, 129, 12, 173, 110, 41, 142, 12, 232, 72, 20, 71, 199, 147, 20, 71, 5, 143, 32, 214, 73, 113, 151, 20, 199, 70, 4, 8, 137, 247, 85, 232, 97, 159, 195, 23, 243, 251, 231, 55, 172, 220, 180, 12, 195, 13, 18, 43, 143, 188, 197, 232, 164, 113, 196, 55, 117, 104, 146, 226, 248, 160, 56, 58, 22, 80, 39, 101, 210, 118, 136, 226, 248, 80, 127, 149, 102, 226, 184, 64, 70, 99, 111, 38, 142, 12, 220, 76, 28, 21, 16, 226, 81, 188, 60, 173, 19, 141, 160, 153, 56, 54, 48, 255, 17, 22, 30, 129, 240, 73, 151, 186, 227, 154, 153, 243, 233, 32, 52, 19, 199, 9, 143, 64, 104, 38, 173, 191, 150, 129, 208, 76, 154, 182, 158, 10, 161, 153, 56, 54, 56, 80, 232, 155, 32, 126, 111, 242, 81, 51, 113, 100, 52, 192, 40, 135, 56, 63, 1, 225, 205, 196, 145, 129, 55, 185, 24, 140, 104, 149, 228, 130, 154, 137, 99, 163, 117, 43, 116, 65, 105, 151, 151, 16, 63, 74, 157, 168, 153, 56, 54, 248, 214, 137, 227, 163, 153, 227, 152, 168, 138, 144, 36, 133, 56, 232, 47, 157, 56, 50, 60, 58, 233, 231, 8, 89, 185, 221, 207, 113, 225, 175, 13, 105, 74, 166, 159, 35, 196, 45, 74, 105, 117, 143, 51, 225, 223, 236, 28, 154, 125, 39, 239, 218, 112, 249, 140, 79, 175, 211, 126, 254, 227, 43, 250, 8, 242, 84, 32, 36, 36, 137, 25, 106, 117, 207, 209, 161, 207, 173, 149, 177, 231, 232, 104, 149, 36, 117, 18, 123, 139, 15, 247, 69, 103, 243, 28, 23, 42, 203, 48, 207, 145, 225, 29, 227, 118, 15, 86, 207, 209, 161, 158, 157, 158, 227, 194, 93, 83, 122, 142, 14, 95, 209, 207, 95, 158, 35, 131, 174, 231, 125, 121, 142, 12, 73, 91, 95, 158, 227, 194, 41, 200, 27, 239, 187, 5, 246, 33, 148, 152, 240, 229, 57, 62, 26, 133, 21, 4, 45, 157, 232, 90, 158, 35, 132, 247, 170, 229, 57, 46, 154, 206, 229, 57, 50, 184, 39, 225, 231, 79, 215, 235, 245, 141, 124, 25, 190, 237, 162, 113, 255, 167, 76, 203, 248, 19, 53, 238, 111, 224, 192, 61, 185, 67, 51, 2, 84, 243, 131, 107, 191, 79, 101, 144, 210, 246, 16, 55, 6, 180, 190, 211, 172, 115, 0, 245, 167, 180, 185, 53, 139, 184, 161, 92, 73, 21, 4, 205, 206, 128, 47, 148, 47, 128, 123, 114, 244, 192, 3, 215, 182, 75, 213, 190, 6, 185, 167, 15, 192, 61, 57, 34, 128, 187, 38, 117, 160, 85, 53, 183, 0, 220, 83, 50, 71, 173, 170, 25, 57, 96, 177, 119, 208, 130, 7, 2, 8, 18, 53, 92, 146, 210, 209, 94, 166, 81, 129, 134, 149, 138, 217, 35, 81, 241, 8, 82, 14, 111, 156, 22, 169, 183, 114, 162, 235, 249, 199, 39, 141, 180, 237, 255, 68, 135, 194, 8, 9, 18, 254, 126, 199, 133, 63, 203, 129, 166, 237, 51, 211, 126, 104, 101, 205, 12, 47, 6, 72, 161, 12, 206, 191, 68, 171, 159, 254, 99, 230, 145, 9, 255, 166, 158, 144, 115, 44, 181, 223, 25, 215, 192, 120, 65, 110, 189, 37, 114, 21, 11, 150, 218, 15, 121, 117, 151, 172, 225, 159, 188, 152, 135, 89, 9, 92, 209, 195, 172, 235, 62, 204, 62, 204, 110, 211, 86, 113, 82, 85, 1, 135, 239, 124, 119, 154, 109, 182, 253, 11, 60, 163, 139, 109, 191, 131, 181, 146, 129, 239, 124, 127, 160, 154, 170, 116, 16, 32, 168, 165, 60, 171, 49, 98, 219, 207, 191, 216, 59, 200, 109, 255, 179, 60, 60, 191, 157, 107, 217, 186, 3, 11, 52, 229, 114, 74, 65, 105, 72, 231, 34, 161, 157, 253, 62, 27, 131, 6, 207, 232, 138, 96, 2, 228, 120, 58, 14, 142, 167, 19, 89, 24, 69, 52, 40, 125, 104, 188, 14, 11, 21, 64, 63, 27, 238, 126, 142, 86, 246, 123, 34, 95, 116, 128, 73, 211, 137, 30, 200, 240, 191, 76, 63, 109, 191, 227, 2, 146, 182, 222, 186, 22, 55, 68, 159, 190, 9, 1, 19, 108, 200, 196, 19, 84, 72, 60, 65, 5, 157, 17, 244, 218, 4, 23, 254, 142, 219, 4, 25, 38, 172, 9, 42, 104, 188, 21, 59, 65, 6, 247, 180, 170, 45, 133, 34, 130, 190, 73, 55, 19, 135, 72, 138, 171, 40, 182, 19, 132, 208, 223, 9, 42, 52, 94, 223, 9, 50, 120, 4, 33, 234, 59, 65, 133, 181, 255, 144, 239, 4, 25, 218, 118, 41, 219, 71, 190, 19, 132, 32, 223, 9, 62, 24, 184, 100, 15, 19, 238, 124, 58, 165, 44, 219, 131, 233, 175, 59, 36, 90, 179, 238, 137, 32, 235, 105, 59, 193, 133, 230, 207, 212, 202, 240, 129, 71, 144, 225, 17, 8, 255, 19, 7, 134, 226, 200, 35, 143, 9, 232, 34, 143, 60, 56, 158, 139, 105, 240, 165, 19, 93, 232, 249, 93, 249, 38, 60, 224, 154, 250, 177, 59, 224, 203, 65, 203, 246, 79, 120, 4, 2, 227, 83, 106, 63, 84, 237, 4, 33, 24, 115, 5, 131, 7, 15, 146, 148, 239, 218, 233, 248, 2, 6, 90, 255, 51, 249, 131, 111, 37, 81, 231, 98, 39, 161, 235, 116, 178, 159, 205, 65, 219, 46, 213, 180, 209, 197, 239, 235, 68, 184, 199, 221, 116, 46, 205, 221, 10, 209, 218, 54, 181, 147, 3, 109, 78, 223, 233, 52, 120, 78, 28, 36, 105, 223, 117, 169, 150, 105, 66, 219, 46, 137, 215, 13, 158, 151, 67, 21, 134, 232, 92, 30, 190, 21, 4, 121, 154, 63, 237, 4, 23, 239, 236, 76, 112, 1, 226, 155, 221, 209, 234, 224, 30, 82, 109, 25, 164, 107, 153, 201, 4, 23, 154, 187, 117, 130, 12, 138, 226, 158, 238, 29, 137, 95, 245, 18, 61, 240, 166, 148, 170, 117, 130, 141, 165, 169, 117, 130, 12, 30, 129, 208, 154, 85, 211, 9, 46, 60, 226, 128, 158, 223, 196, 75, 39, 8, 161, 30, 175, 164, 154, 41, 14, 203, 141, 155, 39, 206, 154, 25, 101, 219, 240, 198, 139, 146, 169, 195, 192, 113, 217, 141, 54, 77, 254, 160, 43, 147, 43, 219, 111, 175, 33, 141, 118, 227, 93, 186, 228, 114, 180, 190, 182, 107, 253, 182, 143, 147, 58, 91, 215, 113, 96, 109, 220, 65, 83, 51, 227, 104, 188, 15, 147, 137, 135, 59, 55, 196, 174, 132, 178, 209, 9, 50, 178, 209, 9, 42, 168, 78, 16, 50, 65, 134, 87, 192, 101, 154, 96, 195, 211, 57, 65, 133, 206, 9, 54, 190, 109, 231, 4, 25, 24, 102, 21, 194, 134, 111, 57, 65, 133, 136, 86, 137, 39, 115, 80, 153, 107, 109, 203, 9, 66, 40, 4, 71, 172, 124, 19, 60, 242, 88, 8, 42, 217, 229, 64, 37, 187, 80, 3, 7, 30, 76, 80, 180, 50, 204, 91, 36, 84, 178, 11, 49, 88, 8, 17, 173, 234, 22, 96, 174, 53, 160, 159, 171, 31, 82, 16, 171, 159, 218, 149, 19, 116, 208, 79, 133, 118, 229, 4, 27, 57, 153, 192, 4, 23, 19, 152, 32, 196, 4, 25, 18, 79, 134, 38, 200, 160, 58, 121, 113, 143, 10, 82, 181, 190, 43, 161, 9, 70, 76, 208, 225, 182, 226, 161, 66, 4, 19, 181, 239, 33, 3, 4, 106, 223, 195, 133, 134, 8, 38, 11, 245, 78, 231, 120, 28, 246, 61, 132, 232, 123, 168, 64, 183, 255, 225, 66, 69, 27, 237, 6, 77, 255, 115, 49, 200, 149, 99, 195, 195, 44, 132, 181, 15, 81, 77, 255, 81, 81, 180, 246, 31, 46, 214, 254, 67, 5, 85, 156, 154, 62, 220, 161, 255, 44, 104, 2, 204, 63, 132, 152, 0, 243, 15, 21, 36, 192, 252, 67, 5, 157, 0, 98, 254, 161, 67, 106, 143, 163, 6, 101, 217, 24, 223, 180, 201, 124, 101, 168, 25, 59, 13, 127, 52, 185, 32, 116, 104, 245, 135, 10, 219, 239, 104, 247, 133, 106, 143, 189, 51, 169, 90, 71, 234, 15, 31, 173, 16, 74, 25, 115, 5, 82, 45, 81, 75, 7, 161, 141, 17, 51, 101, 234, 91, 82, 228, 42, 101, 141, 125, 253, 225, 4, 164, 149, 177, 69, 154, 154, 153, 164, 12, 163, 72, 219, 169, 42, 164, 254, 176, 65, 243, 39, 93, 20, 144, 199, 113, 114, 187, 36, 24, 109, 36, 73, 185, 60, 132, 112, 222, 74, 196, 171, 123, 34, 245, 135, 13, 245, 135, 10, 22, 127, 168, 96, 101, 122, 63, 108, 240, 126, 168, 96, 77, 232, 135, 10, 17, 76, 160, 158, 139, 101, 215, 234, 135, 12, 109, 57, 178, 250, 225, 194, 241, 116, 86, 63, 92, 96, 131, 29, 32, 205, 91, 254, 180, 190, 9, 232, 213, 27, 22, 112, 150, 157, 46, 194, 85, 180, 209, 94, 253, 176, 1, 105, 173, 255, 15, 79, 212, 15, 41, 208, 209, 150, 35, 104, 245, 67, 198, 234, 135, 10, 42, 219, 15, 21, 182, 31, 62, 60, 178, 253, 112, 193, 27, 244, 119, 109, 63, 140, 240, 8, 218, 126, 200, 128, 90, 157, 107, 154, 123, 184, 120, 94, 238, 225, 194, 107, 163, 150, 130, 180, 51, 97, 132, 67, 235, 131, 243, 106, 41, 232, 159, 107, 43, 193, 48, 171, 30, 146, 164, 78, 66, 16, 253, 84, 238, 33, 67, 195, 11, 41, 247, 30, 46, 180, 58, 6, 68, 29, 36, 160, 74, 39, 244, 112, 91, 209, 30, 46, 168, 165, 251, 180, 135, 11, 124, 104, 15, 27, 95, 209, 134, 148, 126, 190, 183, 135, 13, 175, 222, 30, 62, 40, 217, 237, 225, 66, 123, 200, 80, 183, 174, 61, 100, 96, 205, 237, 225, 130, 227, 169, 171, 61, 116, 120, 152, 173, 108, 123, 184, 112, 44, 81, 101, 187, 81, 14, 143, 32, 245, 168, 178, 237, 33, 196, 195, 44, 100, 81, 202, 2, 171, 95, 195, 83, 34, 200, 185, 68, 201, 18, 10, 7, 43, 189, 117, 178, 237, 33, 132, 71, 32, 252, 182, 135, 11, 119, 176, 190, 147, 7, 15, 179, 14, 44, 32, 0, 151, 204, 225, 147, 58, 111, 43, 177, 214, 131, 214, 103, 18, 169, 182, 192, 183, 61, 140, 120, 215, 222, 246, 112, 209, 171, 144, 99, 250, 15, 19, 140, 85, 203, 110, 64, 6, 62, 97, 219, 195, 5, 181, 19, 182, 61, 100, 152, 176, 237, 161, 66, 235, 183, 101, 183, 237, 161, 67, 223, 202, 9, 106, 188, 237, 225, 67, 233, 55, 59, 71, 3, 3, 80, 201, 4, 208, 148, 76, 227, 7, 72, 215, 14, 64, 83, 50, 156, 146, 41, 128, 166, 100, 190, 229, 123, 227, 7, 24, 208, 148, 204, 1, 92, 34, 223, 246, 112, 65, 132, 182, 109, 154, 58, 120, 211, 137, 148, 46, 179, 237, 33, 132, 97, 86, 109, 123, 170, 182, 61, 108, 232, 246, 67, 150, 231, 17, 143, 1, 92, 87, 66, 1, 79, 250, 100, 4, 72, 150, 20, 185, 178, 108, 232, 249, 214, 212, 160, 46, 147, 107, 123, 200, 104, 149, 228, 79, 180, 74, 242, 33, 68, 180, 170, 228, 5, 252, 45, 247, 224, 124, 186, 71, 37, 203, 74, 104, 115, 114, 135, 246, 115, 215, 118, 168, 85, 181, 135, 14, 202, 164, 51, 170, 218, 195, 70, 123, 200, 192, 61, 181, 135, 11, 21, 109, 180, 145, 243, 233, 80, 106, 15, 29, 34, 184, 173, 88, 218, 67, 7, 157, 236, 47, 219, 118, 168, 194, 75, 123, 248, 208, 30, 50, 86, 78, 20, 181, 135, 139, 230, 85, 176, 135, 11, 203, 30, 62, 150, 61, 84, 160, 216, 67, 5, 18, 79, 246, 112, 161, 113, 255, 122, 200, 160, 118, 61, 84, 88, 15, 3, 48, 217, 135, 10, 126, 37, 251, 112, 33, 130, 218, 135, 10, 202, 164, 35, 181, 15, 25, 15, 179, 13, 247, 196, 79, 161, 147, 244, 9, 143, 184, 34, 108, 188, 247, 50, 233, 225, 130, 159, 219, 181, 46, 15, 27, 30, 65, 249, 42, 30, 25, 94, 157, 97, 24, 85, 60, 54, 30, 231, 158, 199, 5, 143, 32, 118, 207, 227, 2, 53, 51, 15, 52, 13, 226, 77, 123, 152, 117, 207, 99, 195, 202, 180, 238, 121, 92, 52, 88, 251, 143, 226, 129, 55, 102, 140, 19, 90, 192, 85, 194, 19, 121, 164, 177, 227, 158, 199, 137, 214, 223, 166, 168, 123, 30, 29, 234, 75, 209, 245, 124, 163, 177, 67, 52, 118, 247, 32, 244, 33, 164, 51, 239, 186, 0, 114, 165, 18, 102, 7, 249, 74, 104, 37, 107, 30, 64, 211, 86, 169, 58, 98, 205, 186, 13, 177, 126, 192, 154, 17, 195, 19, 152, 45, 52, 53, 51, 220, 14, 121, 75, 71, 154, 146, 113, 224, 45, 29, 53, 117, 140, 52, 37, 147, 221, 234, 223, 152, 33, 77, 201, 168, 123, 30, 39, 84, 161, 196, 12, 150, 225, 193, 95, 161, 39, 187, 83, 121, 4, 2, 195, 145, 122, 215, 86, 17, 223, 234, 158, 8, 121, 180, 77, 39, 49, 188, 80, 150, 205, 61, 76, 67, 221, 243, 18, 13, 223, 180, 177, 123, 30, 29, 212, 61, 143, 10, 139, 85, 30, 21, 34, 84, 30, 21, 176, 231, 136, 41, 143, 139, 103, 202, 227, 227, 151, 242, 168, 160, 109, 41, 143, 11, 220, 41, 25, 132, 182, 148, 71, 7, 171, 218, 9, 132, 34, 177, 136, 6, 222, 181, 148, 71, 6, 95, 233, 94, 43, 212, 44, 229, 113, 194, 97, 35, 204, 148, 242, 184, 240, 8, 132, 214, 10, 85, 202, 163, 227, 177, 246, 31, 114, 88, 41, 219, 171, 82, 30, 27, 222, 84, 41, 143, 15, 173, 171, 223, 35, 3, 254, 30, 65, 76, 191, 199, 134, 75, 218, 46, 135, 55, 47, 253, 30, 25, 56, 238, 200, 177, 180, 181, 247, 15, 237, 123, 132, 120, 254, 177, 241, 252, 163, 130, 8, 13, 134, 97, 10, 227, 89, 35, 48, 255, 184, 208, 166, 109, 63, 254, 200, 72, 175, 200, 31, 23, 238, 249, 163, 130, 235, 74, 251, 157, 206, 31, 31, 201, 254, 168, 176, 152, 63, 42, 52, 188, 224, 223, 217, 216, 83, 106, 67, 26, 210, 171, 131, 193, 210, 150, 222, 164, 112, 64, 134, 101, 151, 63, 46, 232, 146, 164, 245, 199, 69, 69, 249, 163, 130, 242, 71, 5, 238, 124, 186, 228, 143, 12, 7, 220, 249, 116, 200, 193, 159, 226, 186, 150, 65, 201, 31, 27, 201, 31, 21, 40, 75, 127, 92, 104, 236, 17, 8, 249, 169, 32, 248, 35, 164, 185, 130, 252, 145, 193, 191, 217, 85, 20, 41, 245, 215, 30, 242, 199, 8, 117, 207, 47, 245, 199, 7, 242, 199, 136, 198, 141, 161, 238, 121, 135, 247, 68, 234, 143, 13, 254, 8, 209, 2, 109, 153, 164, 74, 5, 50, 84, 42, 48, 0, 170, 229, 251, 171, 192, 69, 107, 5, 54, 90, 85, 211, 174, 192, 5, 99, 174, 64, 135, 71, 32, 104, 227, 10, 92, 84, 224, 194, 35, 203, 174, 10, 100, 72, 237, 241, 198, 195, 236, 178, 171, 2, 31, 150, 93, 21, 168, 224, 254, 29, 180, 128, 189, 126, 111, 251, 128, 175, 132, 36, 218, 74, 220, 86, 32, 131, 171, 226, 228, 182, 2, 25, 110, 43, 208, 209, 171, 144, 219, 10, 92, 76, 96, 220, 90, 129, 12, 222, 180, 229, 214, 10, 116, 224, 119, 90, 129, 11, 90, 129, 140, 181, 184, 147, 55, 173, 192, 134, 227, 207, 161, 166, 21, 200, 240, 71, 77, 43, 208, 193, 149, 101, 5, 46, 168, 111, 179, 178, 2, 27, 222, 119, 101, 235, 247, 96, 195, 189, 7, 21, 120, 36, 177, 218, 247, 32, 99, 223, 131, 10, 84, 115, 242, 85, 40, 66, 155, 19, 90, 234, 159, 127, 176, 209, 238, 104, 125, 114, 57, 132, 14, 78, 122, 252, 224, 194, 147, 206, 15, 46, 240, 131, 1, 104, 15, 6, 224, 65, 199, 235, 245, 160, 130, 71, 30, 84, 208, 158, 132, 171, 165, 251, 32, 132, 155, 235, 131, 11, 239, 250, 15, 136, 230, 79, 172, 80, 75, 198, 250, 96, 195, 123, 234, 131, 11, 157, 250, 160, 66, 91, 230, 158, 30, 92, 172, 138, 124, 80, 97, 85, 188, 124, 112, 65, 194, 236, 180, 206, 7, 25, 204, 53, 212, 252, 208, 207, 180, 203, 61, 165, 10, 162, 117, 62, 248, 160, 61, 7, 136, 47, 252, 203, 198, 77, 231, 131, 141, 197, 236, 242, 65, 6, 143, 160, 202, 99, 249, 32, 163, 85, 37, 63, 190, 237, 106, 120, 100, 209, 152, 132, 22, 203, 135, 241, 251, 75, 136, 129, 126, 79, 180, 88, 62, 248, 192, 242, 65, 5, 15, 46, 210, 202, 7, 21, 158, 36, 31, 84, 216, 215, 124, 112, 161, 241, 230, 131, 143, 54, 1, 8, 30, 84, 64, 15, 62, 252, 193, 199, 162, 176, 225, 17, 199, 211, 169, 84, 144, 177, 48, 147, 10, 42, 32, 164, 130, 13, 137, 95, 6, 177, 214, 175, 224, 3, 107, 253, 10, 46, 184, 123, 5, 31, 238, 21, 84, 224, 17, 8, 206, 167, 67, 206, 167, 171, 84, 112, 33, 185, 94, 172, 130, 12, 203, 29, 185, 127, 103, 177, 10, 74, 104, 59, 114, 176, 196, 106, 177, 10, 50, 44, 86, 193, 134, 119, 58, 105, 177, 10, 50, 22, 171, 68, 88, 172, 194, 82, 251, 181, 185, 130, 42, 184, 192, 85, 113, 163, 153, 85, 80, 194, 35, 104, 177, 10, 50, 176, 10, 54, 240, 187, 167, 19, 90, 172, 130, 142, 183, 160, 197, 42, 8, 177, 88, 5, 21, 248, 170, 60, 199, 14, 85, 124, 85, 176, 161, 226, 171, 130, 10, 30, 241, 85, 193, 5, 134, 217, 85, 193, 133, 8, 237, 84, 80, 161, 157, 10, 62, 36, 137, 25, 106, 167, 130, 140, 118, 42, 168, 64, 21, 55, 196, 173, 21, 108, 44, 85, 65, 5, 189, 202, 241, 236, 71, 141, 170, 32, 164, 87, 169, 231, 130, 26, 85, 193, 135, 126, 170, 74, 165, 130, 11, 30, 137, 80, 65, 133, 9, 36, 136, 80, 65, 133, 231, 118, 200, 189, 130, 42, 157, 28, 61, 217, 168, 130, 13, 141, 247, 83, 123, 76, 131, 47, 170, 160, 195, 35, 13, 91, 84, 193, 6, 93, 75, 254, 42, 69, 21, 116, 60, 21, 21, 143, 130, 11, 19, 64, 204, 83, 112, 193, 41, 24, 128, 197, 242, 89, 44, 31, 72, 35, 113, 232, 161, 177, 71, 28, 107, 25, 244, 64, 127, 155, 130, 11, 78, 122, 109, 10, 50, 56, 169, 105, 83, 144, 65, 215, 190, 203, 166, 32, 131, 129, 194, 197, 226, 160, 39, 101, 163, 107, 0, 217, 20, 108, 180, 174, 166, 101, 83, 144, 177, 46, 29, 133, 130, 12, 201, 53, 106, 117, 52, 176, 78, 6, 181, 82, 88, 181, 117, 160, 56, 156, 165, 74, 52, 109, 255, 177, 186, 77, 250, 224, 12, 154, 182, 78, 202, 164, 237, 156, 3, 9, 109, 134, 52, 181, 228, 2, 235, 42, 170, 214, 190, 6, 7, 239, 153, 84, 114, 63, 144, 218, 227, 72, 181, 199, 221, 72, 82, 46, 168, 194, 139, 164, 153, 130, 13, 60, 226, 178, 41, 46, 155, 162, 154, 41, 200, 112, 217, 148, 134, 106, 166, 160, 35, 37, 141, 41, 184, 32, 129, 9, 60, 204, 98, 10, 82, 44, 236, 53, 10, 46, 84, 36, 20, 84, 192, 40, 199, 191, 216, 59, 18, 74, 83, 199, 14, 206, 47, 5, 27, 36, 212, 73, 153, 212, 45, 5, 31, 34, 26, 94, 254, 248, 55, 59, 1, 172, 205, 254, 86, 151, 110, 81, 220, 52, 102, 15, 188, 21, 14, 142, 231, 59, 132, 100, 189, 5, 61, 171, 105, 120, 77, 164, 125, 207, 165, 11, 116, 45, 131, 208, 179, 54, 213, 3, 39, 125, 82, 212, 227, 149, 144, 68, 227, 247, 7, 95, 204, 143, 212, 196, 83, 225, 118, 200, 217, 61, 88, 201, 16, 188, 16, 133, 85, 91, 10, 50, 104, 233, 164, 182, 20, 92, 244, 127, 182, 165, 224, 66, 61, 117, 105, 163, 182, 20, 124, 72, 154, 25, 212, 150, 130, 12, 181, 150, 130, 14, 181, 150, 130, 15, 102, 41, 168, 64, 155, 90, 10, 62, 190, 181, 45, 106, 210, 82, 208, 209, 180, 109, 237, 53, 90, 244, 56, 20, 156, 120, 178, 59, 35, 188, 189, 70, 13, 204, 49, 116, 61, 197, 12, 162, 238, 121, 212, 246, 215, 62, 9, 165, 21, 94, 208, 2, 39, 173, 67, 193, 133, 87, 135, 130, 143, 71, 165, 54, 98, 172, 80, 83, 135, 130, 14, 77, 29, 10, 42, 44, 85, 135, 130, 11, 104, 129, 213, 207, 161, 238, 121, 101, 203, 156, 244, 202, 64, 26, 202, 167, 67, 193, 7, 231, 27, 210, 161, 160, 35, 130, 9, 120, 67, 193, 5, 165, 19, 110, 199, 22, 189, 54, 20, 108, 120, 109, 40, 168, 128, 13, 71, 107, 181, 85, 10, 50, 124, 231, 187, 68, 149, 130, 13, 137, 230, 135, 89, 73, 74, 202, 162, 20, 116, 172, 9, 190, 40, 5, 25, 36, 64, 240, 80, 202, 178, 25, 4, 129, 141, 244, 173, 77, 107, 231, 226, 120, 248, 138, 182, 7, 232, 233, 215, 22, 128, 196, 87, 177, 108, 212, 252, 153, 252, 49, 11, 175, 108, 173, 175, 77, 43, 115, 60, 29, 36, 129, 98, 16, 13, 175, 199, 194, 171, 65, 223, 236, 216, 46, 240, 236, 176, 227, 159, 172, 185, 129, 75, 218, 115, 18, 114, 252, 45, 6, 73, 82, 186, 237, 111, 138, 158, 213, 184, 178, 204, 3, 18, 19, 101, 128, 156, 234, 131, 136, 207, 212, 120, 193, 62, 218, 166, 147, 26, 90, 151, 106, 90, 177, 222, 64, 171, 90, 219, 100, 243, 230, 45, 239, 202, 108, 75, 134, 252, 213, 189, 129, 59, 224, 194, 27, 175, 47, 181, 139, 82, 80, 98, 53, 139, 82, 36, 190, 49, 179, 40, 5, 27, 22, 165, 224, 2, 222, 71, 196, 162, 20, 92, 96, 146, 106, 81, 10, 50, 104, 115, 66, 252, 238, 233, 180, 40, 101, 81, 10, 46, 180, 109, 211, 36, 44, 74, 65, 10, 239, 69, 41, 72, 225, 154, 210, 45, 74, 65, 135, 175, 44, 22, 165, 32, 100, 81, 10, 50, 240, 8, 242, 198, 187, 40, 5, 35, 42, 234, 82, 41, 144, 100, 146, 84, 10, 66, 188, 94, 72, 146, 74, 65, 135, 212, 158, 198, 0, 210, 73, 204, 34, 18, 154, 214, 41, 3, 7, 90, 63, 98, 162, 1, 175, 162, 32, 133, 162, 96, 0, 222, 179, 201, 68, 193, 6, 255, 182, 236, 158, 164, 96, 163, 105, 249, 36, 133, 233, 231, 58, 73, 10, 54, 168, 199, 188, 116, 162, 10, 53, 246, 79, 10, 50, 240, 181, 255, 30, 146, 169, 147, 28, 34, 183, 245, 183, 19, 146, 208, 182, 171, 245, 147, 130, 141, 8, 19, 146, 148, 174, 241, 48, 235, 164, 79, 10, 46, 160, 131, 118, 82, 80, 161, 105, 73, 65, 135, 171, 100, 37, 5, 25, 122, 149, 100, 37, 5, 23, 206, 167, 67, 238, 65, 36, 41, 23, 36, 89, 73, 193, 134, 100, 37, 5, 21, 26, 163, 223, 164, 224, 98, 177, 10, 74, 18, 40, 24, 161, 44, 219, 163, 18, 148, 36, 80, 240, 177, 240, 90, 80, 146, 64, 65, 70, 99, 143, 32, 10, 50, 84, 42, 19, 84, 224, 21, 125, 19, 84, 209, 55, 153, 112, 181, 116, 25, 228, 146, 61, 184, 231, 74, 168, 162, 111, 130, 14, 7, 92, 100, 235, 155, 224, 66, 3, 238, 218, 78, 223, 4, 25, 250, 38, 216, 80, 7, 143, 56, 233, 113, 4, 3, 119, 201, 32, 28, 18, 65, 146, 214, 233, 167, 66, 17, 52, 37, 138, 160, 111, 130, 15, 173, 43, 223, 247, 78, 146, 255, 162, 31, 255, 42, 125, 79, 254, 199, 227, 220, 190, 3, 145, 0, 130, 8, 68, 112, 109, 160, 23, 44, 253, 8, 105, 155, 137, 67, 107, 235, 210, 113, 180, 114, 19, 75, 60, 42, 249, 102, 167, 181, 85, 53, 109, 254, 181, 184, 147, 35, 125, 147, 201, 126, 210, 94, 69, 241, 248, 54, 243, 109, 55, 225, 34, 160, 198, 187, 191, 94, 190, 50, 164, 47, 45, 122, 186, 177, 39, 115, 60, 21, 47, 71, 171, 199, 65, 79, 69, 174, 198, 255, 111, 65, 30, 161, 88, 169, 152, 33, 143, 52, 19, 215, 223, 182, 76, 91, 138, 79, 217, 95, 81, 212, 38, 0, 193, 182, 9, 64, 176, 140, 38, 191, 209, 213, 48, 55, 13, 116, 45, 249, 72, 49, 55, 218, 180, 178, 149, 15, 190, 41, 107, 178, 25, 214, 204, 60, 154, 54, 137, 213, 50, 85, 250, 169, 60, 2, 193, 143, 190, 61, 214, 149, 48, 59, 154, 23, 55, 20, 51, 85, 172, 56, 130, 195, 179, 26, 163, 135, 39, 41, 41, 73, 187, 82, 68, 2, 30, 102, 95, 223, 132, 129, 54, 210, 245, 32, 192, 193, 174, 5, 30, 249, 78, 231, 241, 38, 8, 225, 127, 15, 74, 255, 57, 198, 9, 165, 246, 184, 4, 175, 197, 206, 225, 105, 255, 89, 217, 18, 233, 155, 96, 3, 179, 56, 244, 19, 100, 208, 55, 217, 126, 14, 2, 232, 39, 251, 138, 254, 67, 243, 156, 175, 230, 248, 138, 126, 1, 22, 63, 240, 77, 119, 165, 5, 201, 117, 99, 143, 56, 48, 192, 222, 97, 224, 233, 87, 166, 75, 31, 185, 39, 164, 138, 147, 79, 112, 1, 77, 62, 65, 5, 215, 245, 186, 39, 184, 192, 41, 60, 65, 5, 125, 250, 38, 32, 10, 79, 176, 225, 12, 162, 240, 4, 25, 86, 186, 230, 9, 50, 168, 229, 137, 145, 168, 100, 171, 73, 227, 131, 196, 233, 68, 30, 6, 57, 144, 67, 202, 49, 165, 142, 202, 6, 147, 17, 40, 210, 3, 97, 44, 20, 137, 2, 73, 21, 133, 15, 20, 0, 3, 14, 64, 173, 25, 205, 76, 19, 164, 76, 169, 170, 13, 64, 16, 0, 4, 109, 75, 111, 237, 120, 170, 176, 201, 1, 78, 65, 242, 207, 98, 231, 248, 155, 37, 98, 142, 118, 116, 122, 6, 69, 240, 26, 157, 196, 61, 207, 229, 171, 211, 118, 68, 198, 142, 40, 103, 168, 102, 48, 188, 43, 26, 45, 249, 235, 140, 168, 165, 124, 54, 255, 142, 34, 25, 28, 15, 15, 7, 51, 179, 7, 109, 171, 165, 175, 67, 121, 9, 25, 190, 128, 198, 47, 71, 166, 61, 171, 12, 194, 125, 81, 62, 133, 61, 176, 25, 172, 66, 207, 46, 240, 250, 136, 21, 95, 93, 21, 109, 2, 45, 170, 136, 127, 78, 167, 63, 71, 118, 198, 110, 67, 167, 243, 24, 31, 119, 14, 61, 110, 109, 68, 17, 154, 243, 229, 149, 199, 135, 120, 58, 46, 81, 50, 71, 174, 122, 85, 31, 36, 158, 218, 166, 121, 26, 120, 230, 52, 172, 117, 155, 193, 237, 43, 141, 84, 148, 247, 191, 123, 49, 197, 218, 15, 73, 29, 124, 250, 198, 47, 7, 129, 50, 172, 194, 193, 55, 97, 35, 146, 73, 103, 73, 25, 137, 248, 242, 119, 10, 222, 11, 114, 8, 161, 29, 217, 2, 31, 195, 156, 139, 31, 144, 19, 49, 77, 243, 250, 250, 158, 29, 91, 131, 133, 11, 173, 87, 119, 15, 209, 216, 4, 111, 201, 119, 204, 170, 12, 229, 220, 185, 218, 97, 208, 149, 132, 246, 107, 162, 130, 91, 222, 97, 123, 201, 73, 22, 157, 3, 139, 213, 122, 136, 16, 211, 171, 145, 253, 126, 175, 213, 63, 36, 80, 40, 74, 46, 229, 152, 185, 30, 29, 213, 127, 236, 167, 160, 71, 141, 178, 173, 45, 2, 4, 65, 100, 96, 16, 109, 18, 223, 179, 37, 88, 62, 97, 198, 128, 89, 31, 28, 171, 155, 67, 234, 24, 166, 229, 210, 1, 36, 125, 123, 33, 32, 159, 235, 21, 154, 114, 49, 161, 209, 38, 248, 131, 160, 239, 52, 206, 165, 78, 153, 191, 179, 16, 42, 160, 128, 112, 38, 251, 192, 90, 206, 130, 88, 119, 70, 252, 18, 11, 179, 240, 5, 100, 198, 75, 115, 52, 66, 150, 128, 138, 172, 98, 221, 8, 158, 17, 246, 14, 141, 120, 235, 229, 96, 229, 38, 166, 254, 35, 123, 81, 186, 64, 22, 66, 16, 101, 234, 75, 141, 194, 154, 204, 160, 33, 197, 1, 164, 244, 196, 56, 52, 1, 230, 17, 165, 50, 203, 106, 231, 107, 255, 71, 126, 255, 83, 70, 32, 14, 208, 139, 229, 226, 138, 222, 163, 27, 134, 240, 219, 246, 188, 154, 62, 151, 167, 106, 0, 111, 96, 182, 220, 50, 223, 221, 34, 135, 240, 83, 156, 114, 29, 53, 107, 46, 148, 169, 111, 250, 153, 57, 135, 197, 216, 102, 163, 127, 53, 245, 203, 58, 142, 97, 151, 166, 77, 26, 90, 165, 113, 133, 3, 211, 169, 168, 233, 135, 37, 226, 23, 139, 175, 179, 198, 136, 20, 22, 109, 224, 185, 222, 51, 2, 77, 1, 21, 91, 58, 141, 1, 254, 39, 222, 220, 161, 150, 232, 214, 206, 133, 116, 175, 101, 131, 104, 229, 86, 114, 173, 94, 26, 84, 77, 121, 235, 211, 159, 120, 165, 227, 125, 45, 11, 6, 120, 215, 203, 97, 132, 167, 107, 114, 2, 63, 167, 80, 100, 118, 8, 168, 20, 10, 88, 130, 247, 36, 104, 167, 86, 49, 242, 147, 141, 55, 121, 206, 224, 73, 188, 54, 218, 224, 30, 234, 52, 66, 117, 125, 196, 8, 206, 95, 111, 5, 137, 155, 199, 14, 204, 128, 209, 175, 40, 9, 170, 39, 57, 63, 34, 25, 41, 144, 20, 52, 191, 143, 140, 47, 200, 15, 254, 180, 209, 74, 88, 18, 237, 88, 104, 188, 136, 146, 188, 32, 113, 74, 111, 82, 169, 247, 76, 73, 222, 208, 129, 181, 51, 131, 210, 3, 142, 9, 254, 221, 46, 51, 186, 85, 24, 193, 137, 43, 2, 177, 133, 141, 182, 235, 30, 173, 240, 78, 104, 184, 120, 239, 75, 106, 178, 243, 105, 169, 57, 11, 252, 172, 139, 247, 36, 4, 3, 60, 142, 188, 214, 138, 149, 137, 212, 43, 30, 208, 251, 181, 41, 81, 153, 107, 139, 70, 60, 202, 192, 178, 31, 69, 153, 26, 178, 170, 5, 27, 159, 164, 135, 6, 75, 231, 231, 210, 179, 22, 92, 107, 192, 110, 86, 174, 53, 125, 52, 210, 243, 11, 243, 206, 53, 185, 58, 34, 50, 117, 222, 30, 26, 97, 122, 209, 129, 141, 246, 76, 101, 208, 79, 111, 243, 217, 105, 178, 227, 88, 219, 40, 54, 211, 46, 12, 238, 22, 201, 176, 24, 246, 117, 145, 177, 7, 158, 173, 6, 203, 30, 67, 205, 203, 18, 44, 171, 177, 238, 84, 167, 123, 168, 52, 65, 199, 170, 77, 117, 50, 201, 0, 42, 105, 27, 193, 91, 60, 152, 238, 83, 218, 246, 151, 33, 138, 16, 172, 65, 228, 30, 38, 200, 137, 214, 31, 140, 12, 227, 197, 164, 80, 251, 215, 153, 59, 87, 118, 248, 74, 117, 152, 44, 112, 169, 155, 66, 63, 219, 82, 190, 113, 213, 217, 15, 80, 28, 133, 75, 234, 156, 56, 109, 240, 28, 229, 19, 244, 25, 106, 11, 28, 210, 191, 115, 178, 226, 128, 7, 130, 213, 90, 188, 33, 63, 184, 31, 99, 153, 36, 128, 28, 123, 36, 197, 40, 166, 51, 83, 234, 195, 42, 92, 172, 162, 110, 231, 8, 171, 250, 65, 99, 198, 137, 235, 224, 73, 81, 207, 4, 250, 204, 78, 72, 102, 82, 141, 85, 202, 92, 226, 36, 230, 22, 137, 67, 234, 142, 136, 96, 14, 83, 162, 53, 9, 7, 165, 66, 241, 199, 74, 141, 188, 63, 253, 107, 148, 2, 248, 65, 138, 123, 227, 220, 48, 249, 213, 32, 2, 252, 42, 190, 107, 99, 205, 110, 239, 3, 119, 218, 246, 52, 167, 46, 50, 232, 66, 164, 80, 68, 64, 194, 41, 8, 0, 25, 216, 162, 206, 222, 137, 107, 149, 114, 205, 198, 16, 67, 146, 212, 141, 181, 149, 247, 252, 14, 66, 173, 223, 125, 254, 126, 152, 34, 75, 107, 91, 204, 195, 185, 206, 199, 232, 6, 226, 128, 104, 142, 209, 160, 21, 238, 81, 44, 113, 3, 230, 250, 236, 161, 142, 124, 40, 106, 132, 206, 233, 89, 99, 100, 226, 246, 177, 31, 127, 158, 221, 200, 67, 35, 143, 140, 9, 22, 99, 102, 143, 127, 120, 255, 225, 234, 103, 88, 205, 128, 128, 156, 166, 127, 60, 20, 180, 231, 246, 237, 66, 13, 97, 121, 166, 188, 236, 4, 62, 227, 174, 89, 64, 34, 176, 95, 159, 49, 41, 137, 69, 199, 48, 188, 93, 219, 103, 140, 33, 11, 199, 65, 241, 100, 133, 160, 3, 18, 26, 119, 136, 229, 38, 129, 136, 121, 34, 168, 144, 85, 241, 96, 72, 29, 93, 16, 4, 136, 97, 53, 59, 183, 36, 44, 141, 140, 136, 131, 91, 74, 19, 4, 207, 189, 0, 227, 93, 81, 151, 91, 67, 216, 122, 118, 153, 22, 246, 242, 231, 69, 102, 95, 173, 97, 72, 66, 136, 12, 217, 206, 79, 140, 24, 11, 79, 251, 209, 203, 35, 198, 121, 231, 229, 6, 214, 88, 132, 224, 126, 255, 176, 129, 36, 204, 94, 130, 235, 86, 226, 14, 197, 149, 44, 136, 165, 139, 195, 229, 180, 195, 241, 164, 112, 219, 37, 62, 195, 245, 100, 77, 180, 229, 144, 60, 222, 135, 160, 63, 106, 78, 34, 17, 216, 152, 173, 81, 27, 1, 44, 232, 36, 81, 104, 58, 47, 32, 100, 164, 211, 188, 125, 238, 219, 179, 131, 97, 199, 137, 25, 205, 162, 200, 145, 197, 38, 220, 24, 102, 152, 150, 158, 43, 234, 238, 66, 49, 90, 131, 174, 97, 219, 26, 117, 38, 36, 82, 247, 130, 156, 205, 161, 248, 80, 56, 181, 70, 137, 146, 17, 103, 30, 168, 35, 99, 3, 7, 215, 81, 169, 118, 55, 162, 131, 132, 124, 156, 193, 241, 85, 147, 187, 47, 54, 51, 125, 20, 241, 20, 2, 41, 229, 62, 1, 73, 240, 126, 190, 178, 71, 69, 141, 94, 180, 131, 67, 102, 8, 233, 80, 73, 0, 137, 161, 142, 175, 0, 181, 86, 206, 144, 205, 103, 78, 53, 100, 139, 158, 99, 187, 111, 238, 109, 201, 241, 130, 246, 174, 163, 51, 123, 115, 225, 33, 255, 12, 41, 84, 69, 209, 109, 151, 96, 244, 151, 3, 201, 255, 96, 125, 221, 123, 239, 163, 182, 138, 138, 211, 200, 82, 228, 110, 239, 131, 44, 191, 123, 159, 156, 94, 133, 218, 142, 212, 20, 204, 53, 39, 71, 138, 197, 147, 130, 27, 240, 124, 116, 113, 175, 215, 58, 106, 133, 224, 9, 122, 175, 33, 23, 20, 105, 244, 166, 1, 167, 118, 19, 156, 50, 192, 195, 128, 104, 11, 14, 245, 88, 3, 174, 184, 169, 6, 74, 156, 128, 16, 68, 121, 198, 229, 50, 42, 176, 176, 144, 44, 60, 112, 243, 55, 105, 196, 184, 102, 91, 98, 202, 57, 77, 55, 3, 38, 102, 130, 51, 111, 14, 71, 16, 118, 208, 180, 36, 59, 37, 237, 59, 13, 253, 193, 65, 175, 92, 79, 64, 11, 31, 18, 22, 69, 86, 156, 188, 165, 63, 50, 105, 49, 18, 243, 114, 12, 222, 78, 3, 228, 175, 206, 231, 72, 59, 227, 42, 144, 198, 225, 19, 67, 27, 120, 192, 164, 5, 65, 42, 224, 33, 69, 218, 64, 176, 6, 217, 104, 169, 68, 229, 218, 167, 153, 63, 26, 41, 17, 202, 243, 12, 158, 44, 126, 84, 25, 123, 196, 72, 197, 135, 197, 101, 122, 191, 150, 226, 170, 135, 18, 107, 234, 63, 237, 94, 236, 227, 111, 120, 82, 193, 182, 52, 206, 104, 46, 234, 81, 23, 88, 116, 248, 108, 48, 1, 48, 224, 78, 162, 208, 197, 208, 223, 130, 202, 206, 60, 16, 56, 168, 240, 8, 236, 142, 216, 107, 200, 76, 111, 113, 208, 32, 13, 125, 137, 223, 163, 172, 14, 38, 32, 22, 177, 74, 204, 99, 133, 115, 241, 136, 232, 253, 159, 254, 10, 251, 114, 134, 179, 0, 161, 120, 211, 89, 35, 171, 183, 203, 244, 93, 1, 68, 226, 185, 162, 79, 90, 158, 189, 50, 138, 140, 213, 157, 193, 44, 153, 98, 228, 165, 31, 125, 231, 218, 227, 247, 27, 144, 177, 87, 202, 76, 177, 177, 53, 109, 142, 205, 233, 240, 33, 1, 99, 37, 93, 6, 131, 91, 90, 96, 193, 79, 93, 148, 73, 192, 197, 20, 52, 223, 108, 236, 179, 19, 132, 66, 186, 56, 102, 179, 253, 89, 73, 2, 235, 83, 198, 40, 96, 44, 102, 146, 46, 169, 83, 199, 47, 246, 150, 46, 109, 108, 22, 254, 126, 150, 9, 178, 41, 89, 64, 250, 213, 59, 79, 1, 244, 241, 234, 115, 98, 254, 65, 255, 57, 170, 52, 107, 66, 220, 186, 201, 89, 168, 10, 172, 179, 35, 64, 249, 77, 10, 247, 2, 18, 172, 205, 249, 222, 139, 12, 100, 170, 19, 227, 128, 16, 6, 114, 119, 238, 186, 239, 137, 248, 167, 92, 234, 55, 185, 107, 53, 153, 93, 155, 192, 110, 179, 205, 8, 153, 194, 237, 243, 203, 164, 98, 16, 217, 19, 56, 31, 248, 92, 68, 233, 200, 21, 182, 81, 250, 9, 20, 50, 144, 187, 251, 15, 112, 203, 42, 187, 23, 72, 60, 64, 191, 61, 86, 64, 158, 58, 196, 8, 154, 174, 30, 134, 63, 47, 75, 34, 37, 64, 70, 28, 71, 45, 126, 101, 5, 53, 224, 55, 131, 48, 193, 101, 47, 134, 186, 42, 33, 139, 111, 155, 224, 118, 149, 39, 113, 5, 115, 233, 10, 234, 171, 166, 229, 119, 156, 46, 142, 251, 136, 104, 141, 89, 204, 70, 186, 163, 201, 194, 100, 91, 202, 104, 186, 138, 59, 146, 178, 205, 30, 65, 180, 84, 252, 209, 3, 104, 240, 87, 70, 186, 159, 42, 177, 146, 202, 224, 12, 212, 201, 213, 153, 210, 57, 210, 248, 98, 254, 29, 32, 97, 185, 161, 108, 163, 129, 30, 7, 194, 181, 208, 198, 166, 212, 199, 224, 41, 38, 39, 135, 165, 0, 170, 159, 11, 89, 254, 21, 62, 205, 234, 106, 0, 34, 211, 99, 251, 21, 19, 96, 2, 87, 230, 112, 58, 22, 118, 90, 88, 169, 121, 193, 135, 88, 231, 199, 126, 92, 130, 166, 96, 54, 94, 15, 242, 32, 154, 89, 104, 68, 205, 96, 62, 26, 208, 50, 54, 157, 233, 33, 81, 119, 9, 160, 106, 227, 212, 41, 212, 67, 184, 103, 48, 192, 238, 84, 165, 216, 147, 210, 115, 111, 204, 27, 228, 166, 65, 203, 22, 59, 95, 190, 99, 11, 75, 78, 247, 225, 101, 151, 132, 170, 49, 180, 158, 246, 37, 201, 39, 123, 135, 220, 27, 11, 167, 112, 80, 230, 106, 222, 6, 247, 225, 31, 194, 71, 200, 131, 231, 45, 90, 156, 154, 232, 167, 170, 177, 237, 227, 119, 28, 55, 228, 236, 238, 39, 217, 50, 119, 196, 118, 58, 251, 215, 242, 158, 99, 185, 144, 92, 100, 54, 70, 46, 55, 75, 34, 7, 229, 14, 230, 142, 197, 187, 70, 205, 184, 84, 165, 174, 106, 88, 14, 34, 61, 31, 182, 23, 253, 12, 162, 15, 75, 97, 250, 12, 121, 46, 20, 228, 134, 253, 99, 234, 77, 215, 60, 79, 136, 31, 237, 138, 29, 140, 41, 23, 161, 248, 114, 31, 204, 57, 68, 251, 57, 129, 254, 238, 80, 121, 3, 36, 131, 95, 224, 238, 82, 171, 251, 120, 36, 54, 132, 51, 252, 54, 51, 224, 92, 147, 71, 59, 163, 0, 220, 235, 240, 63, 9, 64, 53, 216, 243, 45, 197, 172, 8, 128, 90, 142, 111, 253, 211, 246, 132, 135, 69, 238, 108, 176, 0, 27, 170, 29, 128, 185, 79, 0, 28, 20, 203, 187, 210, 42, 103, 117, 37, 146, 173, 238, 50, 71, 89, 168, 56, 153, 195, 240, 73, 243, 54, 132, 77, 86, 4, 67, 144, 18, 43, 22, 201, 42, 47, 112, 148, 26, 36, 248, 106, 102, 149, 109, 22, 239, 49, 125, 40, 207, 63, 170, 109, 250, 137, 124, 138, 162, 59, 181, 59, 104, 92, 84, 204, 41, 243, 11, 238, 140, 251, 124, 96, 34, 103, 205, 15, 103, 28, 31, 135, 135, 169, 109, 156, 15, 146, 88, 56, 32, 145, 202, 98, 26, 220, 183, 103, 206, 155, 153, 12, 229, 242, 159, 2, 27, 76, 236, 62, 111, 155, 67, 193, 137, 153, 4, 113, 139, 114, 34, 3, 174, 131, 14, 248, 85, 206, 93, 53, 27, 60, 145, 134, 206, 139, 234, 95, 197, 100, 141, 251, 244, 126, 224, 138, 66, 147, 145, 126, 144, 176, 161, 253, 52, 211, 112, 130, 203, 246, 230, 28, 196, 111, 224, 187, 29, 169, 176, 54, 64, 148, 77, 105, 80, 11, 172, 27, 133, 66, 74, 239, 14, 248, 40, 15, 40, 51, 180, 174, 93, 198, 216, 116, 169, 66, 249, 86, 118, 41, 141, 203, 30, 46, 196, 104, 50, 116, 140, 148, 22, 236, 95, 123, 212, 133, 132, 226, 136, 121, 83, 160, 218, 8, 155, 241, 141, 216, 16, 103, 212, 72, 246, 184, 233, 174, 42, 10, 148, 249, 214, 70, 76, 108, 133, 117, 170, 234, 183, 183, 58, 174, 67, 204, 100, 227, 57, 44, 236, 152, 74, 15, 225, 72, 92, 196, 93, 40, 1, 68, 53, 254, 128, 78, 178, 93, 193, 234, 133, 86, 160, 31, 139, 64, 123, 190, 94, 76, 221, 66, 83, 115, 217, 144, 195, 72, 109, 213, 158, 3, 33, 247, 113, 166, 29, 144, 125, 218, 141, 165, 149, 54, 227, 59, 230, 115, 153, 148, 226, 141, 61, 180, 247, 171, 103, 219, 88, 37, 1, 74, 64, 37, 55, 162, 27, 236, 34, 45, 24, 136, 71, 228, 211, 55, 5, 134, 137, 162, 166, 175, 75, 13, 230, 120, 212, 54, 133, 213, 13, 212, 4, 75, 141, 17, 248, 142, 201, 250, 5, 221, 163, 237, 12, 161, 28, 238, 54, 158, 171, 228, 241, 92, 6, 0, 81, 232, 157, 213, 166, 240, 149, 3, 113, 11, 68, 217, 104, 163, 44, 113, 158, 213, 129, 142, 169, 83, 128, 174, 159, 118, 192, 38, 166, 163, 1, 198, 235, 155, 12, 16, 156, 12, 21, 244, 216, 229, 30, 161, 210, 22, 35, 22, 117, 126, 237, 94, 7, 217, 143, 145, 188, 52, 104, 98, 103, 53, 225, 105, 49, 246, 72, 3, 53, 240, 210, 195, 27, 186, 43, 247, 24, 204, 81, 229, 242, 32, 97, 84, 239, 144, 247, 4, 84, 158, 212, 187, 14, 18, 4, 12, 88, 248, 37, 10, 225, 196, 28, 170, 41, 138, 32, 149, 30, 134, 240, 43, 63, 144, 55, 220, 192, 49, 179, 137, 88, 163, 118, 187, 115, 167, 230, 99, 71, 225, 136, 190, 250, 55, 29, 186, 209, 106, 249, 128, 137, 153, 173, 182, 206, 68, 108, 38, 17, 165, 211, 69, 183, 74, 75, 43, 189, 59, 81, 189, 108, 108, 161, 183, 4, 24, 213, 237, 145, 162, 209, 80, 110, 35, 125, 172, 242, 209, 135, 3, 47, 212, 183, 137, 131, 95, 148, 95, 62, 211, 138, 17, 206, 113, 108, 150, 15, 132, 147, 227, 65, 39, 108, 224, 222, 148, 167, 68, 47, 10, 35, 104, 77, 79, 57, 240, 199, 184, 236, 76, 184, 130, 167, 150, 221, 17, 116, 132, 135, 128, 90, 63, 149, 158, 32, 27, 228, 82, 235, 61, 29, 137, 135, 245, 134, 183, 172, 78, 150, 234, 243, 196, 68, 162, 80, 79, 63, 108, 251, 114, 40, 250, 180, 84, 215, 162, 255, 38, 126, 85, 181, 5, 122, 4, 46, 93, 4, 68, 237, 84, 160, 191, 255, 46, 160, 103, 118, 242, 126, 40, 214, 157, 129, 245, 101, 13, 236, 36, 243, 11, 0, 91, 229, 253, 187, 217, 117, 133, 3, 22, 84, 25, 68, 237, 53, 127, 36, 59, 0, 69, 6, 33, 119, 202, 100, 131, 170, 240, 138, 178, 10, 104, 63, 129, 237, 145, 53, 80, 160, 152, 191, 62, 87, 0, 46, 14, 44, 15, 181, 64, 114, 89, 156, 238, 183, 153, 199, 9, 4, 31, 41, 91, 240, 109, 188, 209, 54, 117, 214, 86, 210, 150, 231, 193, 192, 70, 103, 109, 220, 148, 144, 50, 100, 184, 197, 35, 4, 22, 39, 246, 65, 168, 134, 144, 151, 125, 65, 42, 9, 167, 46, 35, 220, 208, 188, 211, 115, 84, 28, 221, 254, 21, 54, 67, 63, 235, 214, 42, 108, 118, 91, 172, 249, 252, 172, 208, 154, 238, 152, 19, 3, 16, 227, 124, 68, 72, 176, 240, 36, 48, 13, 194, 216, 227, 147, 231, 16, 242, 32, 42, 23, 93, 204, 3, 206, 10, 141, 255, 94, 43, 37, 107, 174, 61, 165, 221, 27, 52, 144, 8, 138, 50, 46, 64, 184, 168, 144, 13, 240, 20, 72, 174, 105, 84, 5, 79, 112, 55, 230, 170, 37, 229, 197, 61, 209, 24, 171, 3, 35, 170, 168, 96, 254, 84, 149, 170, 114, 252, 101, 78, 60, 21, 88, 69, 214, 79, 140, 244, 150, 181, 197, 17, 69, 184, 194, 144, 32, 18, 202, 36, 146, 124, 28, 46, 218, 237, 137, 139, 169, 242, 0, 122, 218, 44, 162, 77, 23, 221, 129, 111, 172, 145, 215, 86, 43, 197, 176, 242, 197, 38, 224, 189, 169, 229, 0, 20, 96, 50, 139, 4, 13, 213, 152, 45, 231, 24, 122, 11, 106, 2, 244, 114, 179, 184, 10, 12, 244, 131, 160, 22, 145, 48, 136, 195, 101, 65, 8, 210, 237, 182, 111, 4, 42, 50, 190, 43, 134, 121, 52, 197, 165, 89, 188, 30, 226, 161, 50, 182, 104, 200, 166, 254, 251, 178, 9, 14, 69, 204, 74, 147, 182, 204, 18, 97, 247, 255, 10, 191, 221, 122, 72, 106, 173, 224, 247, 239, 23, 93, 79, 108, 207, 58, 202, 143, 217, 194, 55, 99, 147, 192, 171, 139, 19, 49, 204, 51, 137, 63, 238, 115, 140, 41, 12, 27, 194, 16, 50, 168, 155, 208, 27, 33, 229, 87, 219, 56, 37, 100, 62, 97, 215, 183, 41, 134, 54, 211, 199, 33, 109, 83, 184, 155, 13, 156, 140, 180, 220, 142, 220, 57, 232, 80, 151, 241, 250, 170, 52, 224, 59, 38, 10, 214, 33, 219, 21, 82, 10, 227, 243, 215, 241, 165, 244, 248, 115, 103, 1, 28, 111, 6, 135, 178, 161, 167, 193, 5, 39, 62, 100, 216, 217, 155, 211, 203, 128, 81, 161, 77, 44, 82, 85, 255, 30, 80, 161, 236, 128, 216, 9, 229, 56, 174, 224, 68, 69, 25, 119, 169, 240, 7, 229, 5, 149, 141, 47, 195, 102, 190, 163, 179, 195, 64, 207, 61, 154, 71, 100, 111, 192, 98, 205, 22, 243, 108, 217, 14, 228, 118, 44, 87, 247, 34, 171, 180, 164, 124, 187, 194, 161, 39, 140, 22, 63, 147, 114, 190, 241, 248, 33, 44, 226, 29, 195, 99, 36, 213, 180, 66, 3, 7, 91, 49, 150, 140, 233, 99, 57, 0, 197, 106, 6, 93, 147, 230, 140, 51, 124, 154, 97, 181, 225, 247, 163, 35, 64, 5, 127, 110, 225, 62, 121, 23, 180, 214, 110, 230, 61, 127, 57, 36, 180, 102, 130, 75, 102, 155, 195, 154, 204, 254, 189, 198, 20, 142, 55, 155, 172, 181, 221, 78, 98, 177, 117, 165, 40, 52, 57, 72, 1, 246, 213, 159, 72, 190, 31, 1, 130, 136, 177, 107, 25, 127, 211, 228, 27, 115, 158, 59, 21, 83, 96, 82, 83, 78, 151, 73, 224, 226, 200, 79, 24, 11, 139, 201, 166, 188, 99, 228, 10, 203, 185, 161, 36, 167, 119, 158, 107, 165, 221, 161, 174, 87, 61, 239, 20, 255, 96, 122, 181, 239, 138, 8, 155, 82, 37, 24, 168, 227, 21, 177, 28, 252, 190, 236, 89, 243, 60, 232, 103, 12, 126, 129, 246, 143, 27, 220, 252, 141, 96, 57, 123, 250, 121, 43, 212, 247, 125, 148, 33, 204, 137, 190, 145, 57, 101, 52, 101, 78, 219, 199, 194, 126, 106, 250, 86, 44, 141, 40, 54, 67, 131, 80, 228, 105, 117, 39, 240, 128, 208, 17, 215, 11, 32, 205, 2, 75, 200, 89, 219, 28, 205, 141, 117, 3, 36, 58, 156, 18, 95, 7, 220, 252, 7, 146, 100, 221, 69, 120, 42, 233, 247, 2, 143, 214, 188, 58, 214, 99, 212, 91, 176, 9, 117, 105, 22, 0, 54, 26, 131, 171, 61, 54, 73, 51, 100, 178, 32, 183, 148, 180, 44, 211, 42, 251, 138, 157, 218, 244, 165, 0, 136, 40, 235, 192, 96, 65, 41, 8, 116, 114, 238, 41, 69, 200, 36, 38, 75, 46, 49, 233, 130, 9, 192, 57, 3, 132, 31, 129, 229, 96, 211, 88, 150, 88, 135, 115, 51, 242, 53, 239, 34, 181, 206, 166, 191, 126, 161, 78, 134, 189, 234, 187, 73, 54, 177, 160, 242, 183, 54, 231, 36, 57, 127, 88, 252, 167, 112, 141, 34, 51, 11, 9, 242, 221, 44, 252, 147, 250, 150, 130, 253, 149, 211, 14, 128, 75, 230, 68, 63, 2, 101, 233, 1, 58, 32, 24, 141, 146, 26, 21, 234, 83, 111, 16, 230, 187, 229, 152, 84, 156, 173, 80, 81, 249, 76, 162, 41, 213, 27, 116, 151, 13, 3, 101, 21, 10, 86, 12, 80, 192, 118, 104, 133, 14, 0, 19, 94, 45, 238, 229, 92, 229, 32, 159, 80, 84, 178, 110, 14, 102, 97, 127, 136, 172, 5, 180, 38, 114, 82, 196, 67, 140, 218, 180, 253, 26, 217, 160, 0, 125, 2, 211, 3, 173, 198, 92, 217, 167, 195, 177, 114, 214, 11, 169, 243, 69, 112, 238, 2, 121, 54, 163, 138, 43, 144, 39, 96, 145, 201, 251, 165, 166, 228, 248, 51, 55, 230, 24, 194, 83, 112, 125, 245, 213, 36, 79, 51, 79, 168, 198, 164, 236, 143, 176, 131, 243, 161, 201, 46, 54, 132, 9, 14, 154, 182, 31, 122, 35, 238, 233, 115, 224, 83, 44, 176, 26, 15, 31, 1, 160, 104, 18, 235, 103, 107, 1, 35, 221, 74, 206, 8, 207, 168, 166, 147, 51, 189, 213, 6, 244, 172, 145, 114, 56, 83, 121, 231, 215, 136, 174, 58, 174, 7, 7, 197, 1, 1, 125, 219, 115, 221, 25, 96, 85, 3, 84, 218, 47, 191, 148, 134, 97, 114, 195, 228, 121, 5, 246, 10, 236, 83, 85, 149, 179, 42, 154, 148, 51, 43, 192, 175, 226, 7, 128, 38, 31, 224, 253, 76, 199, 37, 214, 163, 56, 83, 74, 238, 47, 117, 139, 224, 68, 75, 114, 0, 161, 88, 29, 134, 54, 0, 209, 128, 171, 150, 147, 177, 37, 136, 69, 253, 89, 179, 182, 182, 129, 43, 66, 66, 166, 122, 229, 14, 203, 70, 224, 38, 57, 147, 253, 178, 93, 201, 209, 3, 61, 29, 201, 12, 224, 69, 215, 123, 221, 204, 40, 198, 0, 60, 131, 98, 92, 63, 215, 92, 84, 230, 186, 64, 76, 239, 206, 243, 182, 224, 248, 52, 68, 151, 193, 126, 238, 86, 66, 89, 164, 231, 3, 68, 92, 5, 133, 241, 173, 96, 244, 149, 127, 102, 188, 225, 225, 199, 181, 57, 58, 236, 245, 151, 65, 26, 41, 47, 84, 34, 18, 220, 240, 249, 129, 83, 195, 163, 216, 167, 229, 159, 139, 254, 230, 24, 95, 17, 3, 212, 112, 22, 132, 55, 235, 139, 43, 52, 5, 180, 64, 156, 237, 225, 44, 76, 230, 113, 77, 39, 249, 183, 75, 245, 23, 229, 33, 3, 255, 236, 41, 64, 197, 104, 98, 86, 113, 10, 97, 25, 232, 124, 28, 28, 13, 28, 5, 0, 76, 223, 89, 151, 78, 120, 139, 143, 23, 80, 70, 17, 185, 14, 76, 220, 4, 140, 132, 111, 71, 40, 67, 166, 146, 48, 10, 199, 51, 72, 10, 207, 66, 236, 30, 131, 16, 199, 104, 159, 95, 112, 223, 199, 155, 158, 231, 212, 162, 86, 80, 72, 203, 7, 71, 69, 143, 120, 84, 39, 69, 20, 19, 129, 61, 83, 135, 140, 137, 135, 203, 237, 204, 128, 97, 253, 214, 98, 104, 214, 57, 104, 31, 185, 67, 108, 147, 133, 178, 191, 153, 253, 17, 91, 149, 88, 215, 128, 103, 204, 95, 44, 137, 163, 117, 134, 129, 225, 185, 62, 180, 16, 71, 75, 123, 94, 10, 140, 37, 137, 217, 1, 204, 195, 70, 85, 57, 15, 47, 16, 22, 62, 22, 152, 207, 75, 135, 103, 142, 1, 10, 166, 177, 174, 152, 62, 125, 202, 98, 92, 153, 103, 19, 164, 53, 181, 76, 113, 146, 65, 17, 185, 94, 193, 156, 254, 185, 59, 100, 173, 227, 33, 17, 202, 189, 127, 255, 246, 97, 167, 94, 48, 168, 119, 119, 141, 122, 205, 213, 26, 16, 231, 11, 86, 94, 38, 116, 105, 177, 52, 147, 41, 211, 150, 137, 95, 237, 18, 245, 10, 209, 100, 209, 3, 84, 180, 213, 47, 251, 48, 51, 81, 101, 188, 67, 111, 243, 231, 65, 95, 163, 138, 2, 156, 129, 245, 98, 146, 246, 212, 166, 160, 147, 75, 176, 2, 193, 65, 230, 199, 117, 21, 56, 134, 163, 186, 115, 148, 207, 251, 145, 153, 232, 227, 97, 195, 93, 243, 90, 112, 35, 168, 151, 232, 225, 196, 156, 207, 188, 208, 79, 109, 82, 148, 83, 159, 63, 96, 211, 132, 178, 248, 83, 106, 231, 202, 1, 7, 57, 62, 177, 220, 133, 160, 136, 150, 242, 53, 20, 186, 201, 19, 90, 9, 216, 62, 193, 83, 199, 46, 14, 248, 154, 58, 3, 168, 45, 5, 40, 209, 223, 233, 69, 232, 67, 167, 163, 56, 59, 160, 53, 125, 231, 88, 116, 243, 171, 250, 109, 195, 85, 109, 125, 29, 163, 168, 124, 240, 24, 154, 38, 51, 221, 131, 223, 34, 172, 147, 3, 222, 255, 25, 202, 143, 78, 171, 22, 185, 198, 161, 51, 41, 108, 112, 84, 23, 98, 76, 54, 251, 149, 141, 211, 163, 249, 138, 135, 107, 206, 114, 177, 202, 1, 181, 2, 200, 131, 83, 148, 69, 170, 248, 81, 208, 38, 194, 73, 128, 147, 121, 166, 212, 43, 71, 243, 66, 197, 248, 75, 128, 23, 175, 106, 130, 202, 207, 162, 252, 11, 28, 152, 130, 64, 238, 200, 95, 112, 141, 48, 51, 201, 198, 145, 66, 173, 213, 142, 28, 159, 241, 183, 190, 244, 33, 236, 73, 234, 210, 67, 128, 185, 62, 249, 26, 192, 136, 142, 49, 17, 23, 71, 95, 254, 136, 134, 169, 83, 138, 250, 134, 239, 52, 180, 27, 199, 12, 33, 45, 121, 247, 201, 26, 151, 111, 26, 185, 154, 195, 200, 32, 233, 88, 215, 70, 140, 137, 124, 98, 40, 137, 70, 94, 2, 129, 6, 69, 219, 11, 11, 233, 157, 3, 191, 98, 89, 118, 17, 185, 8, 218, 170, 105, 36, 64, 202, 56, 13, 248, 35, 219, 17, 234, 34, 182, 212, 127, 153, 2, 20, 139, 136, 15, 160, 250, 152, 212, 24, 100, 193, 202, 238, 233, 111, 141, 233, 246, 127, 82, 31, 77, 32, 129, 81, 34, 227, 203, 50, 1, 179, 148, 50, 159, 28, 148, 197, 236, 248, 181, 16, 232, 45, 6, 212, 121, 53, 231, 179, 97, 176, 66, 68, 178, 176, 64, 206, 122, 146, 46, 86, 100, 43, 125, 98, 238, 201, 108, 167, 87, 246, 20, 70, 167, 9, 98, 115, 253, 11, 122, 70, 219, 71, 20, 11, 184, 196, 181, 104, 159, 124, 33, 228, 107, 190, 30, 77, 220, 233, 77, 37, 8, 32, 61, 168, 19, 112, 200, 59, 212, 26, 93, 215, 190, 221, 58, 10, 159, 81, 98, 31, 5, 64, 55, 137, 23, 19, 47, 105, 61, 92, 73, 37, 192, 86, 225, 7, 69, 208, 234, 164, 138, 196, 241, 187, 83, 240, 59, 239, 135, 10, 9, 157, 63, 26, 207, 125, 54, 146, 102, 164, 92, 105, 98, 234, 147, 100, 146, 131, 164, 153, 222, 32, 242, 137, 137, 6, 93, 194, 25, 4, 85, 69, 116, 155, 46, 107, 181, 14, 170, 101, 166, 210, 11, 124, 190, 214, 186, 48, 124, 38, 153, 128, 95, 244, 227, 65, 191, 230, 171, 15, 192, 252, 21, 253, 26, 222, 25, 201, 58, 59, 2, 65, 191, 108, 219, 99, 75, 201, 251, 137, 57, 123, 47, 114, 85, 163, 249, 196, 216, 235, 49, 27, 141, 95, 18, 62, 102, 174, 81, 173, 56, 102, 34, 47, 156, 77, 3, 232, 149, 155, 227, 226, 254, 41, 105, 252, 134, 212, 44, 64, 9, 34, 166, 234, 46, 3, 50, 132, 105, 178, 110, 38, 86, 139, 8, 239, 218, 122, 32, 241, 79, 43, 149, 192, 90, 108, 28, 35, 47, 26, 227, 169, 92, 150, 131, 155, 226, 250, 239, 73, 67, 151, 84, 92, 173, 115, 7, 36, 103, 184, 10, 160, 237, 247, 189, 188, 145, 114, 181, 151, 28, 71, 251, 238, 90, 0, 26, 208, 123, 104, 136, 144, 214, 242, 137, 178, 119, 23, 84, 98, 7, 239, 17, 195, 130, 185, 135, 27, 23, 111, 205, 19, 52, 140, 121, 134, 18, 50, 32, 141, 79, 134, 177, 59, 5, 190, 232, 112, 128, 96, 165, 99, 88, 167, 240, 186, 170, 216, 176, 130, 24, 214, 56, 223, 20, 188, 0, 30, 31, 66, 71, 110, 3, 233, 80, 220, 147, 135, 90, 24, 160, 137, 158, 58, 134, 240, 221, 75, 243, 151, 214, 28, 4, 150, 8, 15, 202, 178, 240, 122, 231, 219, 197, 46, 240, 70, 92, 232, 184, 178, 56, 64, 249, 10, 207, 230, 172, 181, 0, 23, 112, 50, 205, 183, 16, 58, 140, 50, 242, 197, 108, 158, 39, 225, 184, 211, 246, 21, 255, 56, 232, 67, 5, 130, 161, 104, 6, 176, 142, 184, 21, 42, 246, 172, 246, 236, 28, 255, 231, 35, 19, 126, 17, 176, 37, 121, 72, 202, 113, 71, 188, 184, 196, 105, 45, 64, 221, 191, 53, 81, 32, 160, 112, 0, 36, 243, 56, 127, 157, 117, 150, 212, 134, 150, 112, 210, 162, 214, 122, 87, 222, 74, 153, 116, 238, 170, 81, 103, 63, 230, 46, 69, 31, 223, 12, 32, 81, 157, 2, 65, 40, 142, 77, 92, 190, 214, 70, 94, 248, 87, 30, 148, 92, 243, 200, 146, 220, 185, 135, 174, 232, 81, 8, 126, 130, 15, 250, 76, 19, 112, 155, 218, 8, 166, 137, 248, 134, 156, 22, 173, 131, 44, 96, 115, 211, 148, 140, 93, 14, 189, 54, 32, 240, 150, 75, 99, 191, 74, 189, 29, 52, 209, 168, 229, 100, 80, 228, 100, 220, 176, 104, 115, 202, 29, 34, 136, 103, 39, 79, 14, 221, 51, 130, 152, 229, 68, 132, 22, 33, 21 }; + +const uncompressed_size: usize = 162204; + +pub const IndexEntry = struct { + offset: usize, + length: usize, }; -pub const biggest_list: usize = brk: { - var a = index; - var iter = a.iterator(); - var max: usize = 0; - while (iter.next()) |list| { - max = @max(list.value.len, max); + +pub const Index = std.EnumArray(FirstLetter, IndexEntry); + +pub const index = Index.init(.{ .a = .{ .offset = 0, .length = 540 }, .b = .{ .offset = 540, .length = 513 }, .c = .{ .offset = 1053, .length = 691 }, .d = .{ .offset = 1744, .length = 377 }, .e = .{ .offset = 2121, .length = 660 }, .f = .{ .offset = 2781, .length = 344 }, .g = .{ .offset = 3125, .length = 434 }, .h = .{ .offset = 3559, .length = 275 }, .i = .{ .offset = 3834, .length = 391 }, .j = .{ .offset = 4225, .length = 335 }, .k = .{ .offset = 4560, .length = 117 }, .l = .{ .offset = 4677, .length = 398 }, .m = .{ .offset = 5075, .length = 497 }, .n = .{ .offset = 5572, .length = 386 }, .o = .{ .offset = 5958, .length = 149 }, .p = .{ .offset = 6107, .length = 709 }, .q = .{ .offset = 6816, .length = 33 }, .r = .{ .offset = 6849, .length = 1034 }, .s = .{ .offset = 7883, .length = 817 }, .t = .{ .offset = 8700, .length = 417 }, .u = .{ .offset = 9117, .length = 217 }, .v = .{ .offset = 9334, .length = 302 }, .w = .{ .offset = 9636, .length = 220 }, .x = .{ .offset = 9856, .length = 60 }, .y = .{ .offset = 9916, .length = 53 }, .z = .{ .offset = 9969, .length = 30 } }); + +var decompressed_data: ?[]u8 = null; +var packages_list: ?[][]const u8 = null; + +pub fn init(allocator: std.mem.Allocator) !void { + // Decompress data + var data = try allocator.alloc(u8, uncompressed_size); + errdefer allocator.free(data); + + const result = zstd.decompress(data, &compressed_data); + decompressed_data = data[0..result.success]; + + // Parse package list + const total_count = std.mem.readInt(u32, data[0..4], .little); + var packages = try allocator.alloc([]const u8, total_count); + errdefer allocator.free(packages); + + var pos: usize = 4; + var i: usize = 0; + while (i < total_count) : (i += 1) { + const len = std.mem.readInt(u16, data[pos..][0..2], .little); + pos += 2; + packages[i] = data[pos .. pos + len]; + pos += len; } - break :brk max; -}; -const index_blob = "add_completions.index.blob"; + packages_list = packages; +} + +pub fn deinit(allocator: std.mem.Allocator) void { + if (packages_list) |pkgs| { + allocator.free(pkgs); + packages_list = null; + } + + if (decompressed_data) |data| { + allocator.free(data); + decompressed_data = null; + } +} + +pub fn getPackages(letter: FirstLetter) []const []const u8 { + const entry = index.get(letter); + if (entry.length == 0) return &[_][]const u8{}; + + return packages_list.?[entry.offset .. entry.offset + entry.length]; +} + +pub const biggest_list: usize = 1034; diff --git a/src/hive_array.zig b/src/hive_array.zig index c3479da816bdb4..fd9085b03551ca 100644 --- a/src/hive_array.zig +++ b/src/hive_array.zig @@ -11,7 +11,7 @@ pub fn HiveArray(comptime T: type, comptime capacity: u16) type { return struct { const Self = @This(); buffer: [capacity]T = undefined, - available: std.bit_set.IntegerBitSet(capacity) = std.bit_set.IntegerBitSet(capacity).initFull(), + available: bun.bit_set.IntegerBitSet(capacity) = bun.bit_set.IntegerBitSet(capacity).initFull(), pub const size = capacity; pub fn init() Self { diff --git a/src/http/websocket_http_client.zig b/src/http/websocket_http_client.zig index 36fbf8d44558f1..d93e2aff466b5a 100644 --- a/src/http/websocket_http_client.zig +++ b/src/http/websocket_http_client.zig @@ -204,12 +204,6 @@ const CppWebSocket = opaque { } }; -const body_buf_len = 16384 - 16; -const BodyBufBytes = [body_buf_len]u8; - -const BodyBufPool = ObjectPool(BodyBufBytes, null, true, 4); -const BodyBuf = BodyBufPool.Node; - pub fn NewHTTPUpgradeClient(comptime ssl: bool) type { return struct { pub const Socket = uws.NewSocketHandler(ssl); diff --git a/src/install/semver.zig b/src/install/semver.zig index e371344c66fad9..d03e65ae780b48 100644 --- a/src/install/semver.zig +++ b/src/install/semver.zig @@ -2241,7 +2241,7 @@ pub const Query = struct { }; } - pub const FlagsBitSet = std.bit_set.IntegerBitSet(3); + pub const FlagsBitSet = bun.bit_set.IntegerBitSet(3); pub fn isExact(this: *const Group) bool { return this.head.next == null and this.head.head.next == null and !this.head.head.range.hasRight() and this.head.head.range.left.op == .eql; diff --git a/src/js/builtins/shell.ts b/src/js/builtins/shell.ts index 28774036acdb7c..2c3a1db28e0fe7 100644 --- a/src/js/builtins/shell.ts +++ b/src/js/builtins/shell.ts @@ -25,18 +25,25 @@ export function createBunShellTemplateFunction(createShellInterpreter, createPar this.#output = output; this.name = "ShellError"; - // Maybe we should just print all the properties on the Error instance - // instead of speical ones - this.info = { - exitCode: code, - stderr: output.stderr, - stdout: output.stdout, - }; + // We previously added this so that errors would display the "info" property + // We fixed that, but now it displays both. + Object.defineProperty(this, "info", { + value: { + exitCode: code, + stderr: output.stderr, + stdout: output.stdout, + }, + writable: true, + enumerable: false, + configurable: true, + }); this.info.stdout.toJSON = lazyBufferToHumanReadableString; this.info.stderr.toJSON = lazyBufferToHumanReadableString; - Object.assign(this, this.info); + this.stdout = output.stdout; + this.stderr = output.stderr; + this.exitCode = code; } text(encoding) { diff --git a/src/js_ast.zig b/src/js_ast.zig index 02bdd6109445e2..3216d457a1a2b3 100644 --- a/src/js_ast.zig +++ b/src/js_ast.zig @@ -3044,7 +3044,7 @@ pub const Stmt = struct { return Stmt.allocate(allocator, S.SExpr, S.SExpr{ .value = expr }, expr.loc); } - pub const Tag = enum(u6) { + pub const Tag = enum { s_block, s_break, s_class, @@ -3126,7 +3126,13 @@ pub const Stmt = struct { s_empty: S.Empty, // special case, its a zero value type s_debugger: S.Debugger, - s_lazy_export: Expr.Data, + s_lazy_export: *Expr.Data, + + comptime { + if (@sizeOf(Stmt) > 24) { + @compileLog("Expected Stmt to be <= 24 bytes, but it is", @sizeOf(Stmt), " bytes"); + } + } pub const Store = struct { const StoreType = NewStore(&.{ @@ -4564,7 +4570,7 @@ pub const Expr = struct { }; } - pub const Tag = enum(u6) { + pub const Tag = enum { e_array, e_unary, e_binary, diff --git a/src/js_lexer.zig b/src/js_lexer.zig index de7cfc228396f9..1560f026213327 100644 --- a/src/js_lexer.zig +++ b/src/js_lexer.zig @@ -2143,7 +2143,7 @@ fn NewLexer_( const flag_characters = "dgimsuvy"; const min_flag = comptime std.mem.min(u8, flag_characters); const max_flag = comptime std.mem.max(u8, flag_characters); - const RegexpFlags = std.bit_set.IntegerBitSet((max_flag - min_flag) + 1); + const RegexpFlags = bun.bit_set.IntegerBitSet((max_flag - min_flag) + 1); var flags = RegexpFlags.initEmpty(); while (isIdentifierContinue(lexer.code_point)) { switch (lexer.code_point) { @@ -3043,18 +3043,10 @@ pub const Lexer = NewLexer(.{}); const JSIdentifier = @import("./js_lexer/identifier.zig"); pub inline fn isIdentifierStart(codepoint: i32) bool { - if (comptime Environment.isWasm) { - return JSIdentifier.JumpTable.isIdentifierStart(codepoint); - } - - return JSIdentifier.Bitset.isIdentifierStart(codepoint); + return JSIdentifier.isIdentifierStart(codepoint); } pub inline fn isIdentifierContinue(codepoint: i32) bool { - if (comptime Environment.isWasm) { - return JSIdentifier.JumpTable.isIdentifierPart(codepoint); - } - - return JSIdentifier.Bitset.isIdentifierPart(codepoint); + return JSIdentifier.isIdentifierPart(codepoint); } pub fn isWhitespace(codepoint: CodePoint) bool { diff --git a/src/js_lexer/identifier.zig b/src/js_lexer/identifier.zig index b8da1da65faa57..6df764bb725b81 100644 --- a/src/js_lexer/identifier.zig +++ b/src/js_lexer/identifier.zig @@ -1,2024 +1,78 @@ -// This file benchmarks different approaches for determinig whether or not a unicode codepoint is possibly a JS identifier -// these values are copy-pasted from "typescript/lib/typescriptServices.js" const std = @import("std"); -pub const SerializedBitset = extern struct {}; -pub const Bitset = struct { - const Cache = @import("identifier_cache.zig"); - const id_start_range: [2]i32 = Cache.id_start_meta.range; - const id_end_range: [2]i32 = Cache.id_continue_meta.range; - // this is a pointer because otherwise it may be copied onto the stack - // and it's a huge bitset - const id_start = &Cache.id_start; - // this is a pointer because otherwise it may be copied onto the stack - // and it's a huge bitset - const id_continue = &Cache.id_continue; - - pub fn init() void {} - - pub fn isIdentifierStart(codepoint: i32) bool { - return codepoint >= (comptime id_start_range[0]) and - codepoint <= (comptime id_start_range[1]) and - id_start.isSet((comptime @as(usize, @intCast(id_start_range[1]))) - @as( - usize, - @intCast(codepoint), - )); - } - - pub fn isIdentifierPart(codepoint: i32) bool { - return codepoint >= (comptime id_end_range[0]) and - codepoint <= (comptime id_end_range[1]) and - id_continue.isSet( - (comptime @as(usize, @intCast(id_end_range[1]))) - @as( - usize, - @intCast(codepoint), - ), - ); - } +pub fn isIdentifierStart(codepoint: i32) bool { + return switch (codepoint) { + 'a'...'z', 'A'...'Z', '_', '$' => true, + std.math.minInt(i32)...0, 0x10FFFF...std.math.maxInt(i32) => false, + else => isIDStartESNext(@intCast(codepoint)), + }; +} + +pub fn isIdentifierPart(codepoint: i32) bool { + return switch (codepoint) { + 'a'...'z', 'A'...'Z', '0'...'9', '_', '$' => true, + std.math.minInt(i32)...0, 0x10FFFF...std.math.maxInt(i32) => false, + else => isIDContinueESNext(@intCast(codepoint)), + }; +} + +/// This file is auto-generated. Do not edit. +/// isIDStartES5 checks if a codepoint is valid in the isIDStartES5 category +pub fn isIDStartES5(cp: u21) bool { + const high = cp >> 8; + const low = cp & 0xFF; + const stage2_idx = idStartES5.stage1[high]; + const bit_pos = stage2_idx + low; + const u64_idx = bit_pos >> 6; + const bit_idx = @as(u6, @intCast(bit_pos & 63)); + return (idStartES5.stage2[u64_idx] & (@as(u64, 1) << bit_idx)) != 0; +} +const idStartES5 = struct { + pub const stage1 = [_]u16{ 0, 256, 512, 768, 1024, 1280, 1536, 1792, 2048, 2304, 2560, 2816, 3072, 3328, 3584, 3840, 4096, 4352, 4608, 4864, 5120, 256, 5376, 5632, 5888, 2048, 2048, 2048, 2048, 2048, 6144, 6400, 6656, 6912, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 7168, 7424, 2048, 2048, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 7680, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 7936, 256, 256, 256, 256, 8192, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 8448, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 256, 8704, 8960, 256, 9216, 9472, 9728, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048 }; + pub const stage2 = [_]u64{ 0, 576460743847706622, 297241973452963840, 18410715276682199039, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 4503586742468607, 18446744073709486080, 18014187403249451007, 70501888360451, 0, 288230376151711744, 18446744056529672000, 4503599577006079, 18446744073709551615, 18446744073709551615, 18446744073709547523, 234187180623206815, 18446181123756130304, 18446744065161560063, 255, 1979120929931264, 576460743713488896, 18446181123756132351, 18446744073709551615, 2017613045381988351, 35184371892224, 0, 274877906943, 0, 0, 0, 0, 0, 2594073385365405664, 17163157504, 271902628478820320, 844440767823872, 247132830528276448, 7881300924956672, 2589004636761075680, 4295032832, 2579997437506199520, 15837691904, 270153412153034720, 0, 283724577500946400, 12884901888, 283724577500946400, 13958643712, 288228177128316896, 12884901888, 3457638613854978016, 127, 3940649673949182, 127, 2309762420256548246, 805306463, 1, 8796093021951, 3840, 0, 7679401525247, 4128768, 18446744069414584320, 36028797018898495, 18446744073709551615, 18446744071629176831, 18446743008557662207, 288230376151711743, 18446744073709551487, 18446744070446333311, 9168625153884503423, 18446603336212774717, 18446744071549321215, 134217599, 18446744069414584320, 9007199254740991, 18446744073709551614, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 35923243902697471, 18446744069548802046, 8796093022207, 0, 0, 4503599627370495, 0, 18446744069414584320, 72057594037927935, 2199023255551, 0, 18446744073709551615, 18446744073709551615, 18446744069683019775, 288230376151711743, 18446744070475743231, 4611686017001275199, 6908521828386340863, 2295745090394464220, 0, 9223372036854775808, 0, 0, 287031153606524036, 0, 0, 0, 17451448556060768, 18446744073709551614, 18446744066732326911, 8646911284551352319, 18446216308128219104, 18446744073709551615, 72057589742993407, 0, 18446744073709551615, 18446744073709551615, 18014398509481983, 0, 18446744073709551615, 18446744073709551615, 274877906943, 0, 18446744073709551615, 18446744073709551615, 8191, 0, 18446744073709551615, 18446744073709551615, 68719476735, 0, 70368744177663, 0, 0, 0, 6881498030004502655, 18446744073709551579, 1125899906842623, 18446744073709027328, 4611686018427387903, 18446744073709486080, 18446744073709355007, 1152640029630136575, 0, 18435203599664414720, 18446744073709551615, 2305843009213693951, 576460743713488896, 18446743798965862398, 9223372036854775807, 486341884 }; }; -/// In WASM, we use the JumpTable version -pub const JumpTable = struct { - const minInt = @import("std").math.minInt; - const maxInt = @import("std").math.maxInt; - const max_codepoint = 0x10FFFF; - noinline fn isIdentifierPartSlow(codepoint: i32) bool { - @setCold(true); - return switch (codepoint) { - // explicitly tell LLVM's optimizer about values we know will not be in the range of this switch statement - 0xaa...0xffd7 => isIdentifierPartSlow16(@as(u16, @intCast(codepoint))), - (0xffd7 + 1)...0xe01ef => isIdentifierPartSlow32(codepoint), - - else => false, - }; - } - - fn isIdentifierPartSlow16(codepoint: u16) bool { - return switch (codepoint) { - minInt(u16)...(0xaa - 1) => unreachable, - 0xaa...0xaa, 0xb5...0xb5, 0xb7...0xb7, 0xba...0xba, 0xc0...0xd6, 0xd8...0xf6, 0xf8...0x2c1, 0x2c6...0x2d1, 0x2e0...0x2e4, 0x2ec...0x2ec, 0x2ee...0x2ee, 0x300...0x374, 0x376...0x377, 0x37a...0x37d, 0x37f...0x37f, 0x386...0x38a, 0x38c...0x38c, 0x38e...0x3a1, 0x3a3...0x3f5, 0x3f7...0x481, 0x483...0x487, 0x48a...0x52f, 0x531...0x556, 0x559...0x559, 0x560...0x588, 0x591...0x5bd, 0x5bf...0x5bf, 0x5c1...0x5c2, 0x5c4...0x5c5, 0x5c7...0x5c7, 0x5d0...0x5ea, 0x5ef...0x5f2, 0x610...0x61a, 0x620...0x669, 0x66e...0x6d3, 0x6d5...0x6dc, 0x6df...0x6e8, 0x6ea...0x6fc, 0x6ff...0x6ff, 0x710...0x74a, 0x74d...0x7b1, 0x7c0...0x7f5, 0x7fa...0x7fa, 0x7fd...0x7fd, 0x800...0x82d, 0x840...0x85b, 0x860...0x86a, 0x8a0...0x8b4, 0x8b6...0x8c7, 0x8d3...0x8e1, 0x8e3...0x963, 0x966...0x96f, 0x971...0x983, 0x985...0x98c, 0x98f...0x990, 0x993...0x9a8, 0x9aa...0x9b0, 0x9b2...0x9b2, 0x9b6...0x9b9, 0x9bc...0x9c4, 0x9c7...0x9c8, 0x9cb...0x9ce, 0x9d7...0x9d7, 0x9dc...0x9dd, 0x9df...0x9e3, 0x9e6...0x9f1, 0x9fc...0x9fc, 0x9fe...0x9fe, 0xa01...0xa03, 0xa05...0xa0a, 0xa0f...0xa10, 0xa13...0xa28, 0xa2a...0xa30, 0xa32...0xa33, 0xa35...0xa36, 0xa38...0xa39, 0xa3c...0xa3c, 0xa3e...0xa42, 0xa47...0xa48, 0xa4b...0xa4d, 0xa51...0xa51, 0xa59...0xa5c, 0xa5e...0xa5e, 0xa66...0xa75, 0xa81...0xa83, 0xa85...0xa8d, 0xa8f...0xa91, 0xa93...0xaa8, 0xaaa...0xab0, 0xab2...0xab3, 0xab5...0xab9, 0xabc...0xac5, 0xac7...0xac9, 0xacb...0xacd, 0xad0...0xad0, 0xae0...0xae3, 0xae6...0xaef, 0xaf9...0xaff, 0xb01...0xb03, 0xb05...0xb0c, 0xb0f...0xb10, 0xb13...0xb28, 0xb2a...0xb30, 0xb32...0xb33, 0xb35...0xb39, 0xb3c...0xb44, 0xb47...0xb48, 0xb4b...0xb4d, 0xb55...0xb57, 0xb5c...0xb5d, 0xb5f...0xb63, 0xb66...0xb6f, 0xb71...0xb71, 0xb82...0xb83, 0xb85...0xb8a, 0xb8e...0xb90, 0xb92...0xb95, 0xb99...0xb9a, 0xb9c...0xb9c, 0xb9e...0xb9f, 0xba3...0xba4, 0xba8...0xbaa, 0xbae...0xbb9, 0xbbe...0xbc2, 0xbc6...0xbc8, 0xbca...0xbcd, 0xbd0...0xbd0, 0xbd7...0xbd7, 0xbe6...0xbef, 0xc00...0xc0c, 0xc0e...0xc10, 0xc12...0xc28, 0xc2a...0xc39, 0xc3d...0xc44, 0xc46...0xc48, 0xc4a...0xc4d, 0xc55...0xc56, 0xc58...0xc5a, 0xc60...0xc63, 0xc66...0xc6f, 0xc80...0xc83, 0xc85...0xc8c, 0xc8e...0xc90, 0xc92...0xca8, 0xcaa...0xcb3, 0xcb5...0xcb9, 0xcbc...0xcc4, 0xcc6...0xcc8, 0xcca...0xccd, 0xcd5...0xcd6, 0xcde...0xcde, 0xce0...0xce3, 0xce6...0xcef, 0xcf1...0xcf2, 0xd00...0xd0c, 0xd0e...0xd10, 0xd12...0xd44, 0xd46...0xd48, 0xd4a...0xd4e, 0xd54...0xd57, 0xd5f...0xd63, 0xd66...0xd6f, 0xd7a...0xd7f, 0xd81...0xd83, 0xd85...0xd96, 0xd9a...0xdb1, 0xdb3...0xdbb, 0xdbd...0xdbd, 0xdc0...0xdc6, 0xdca...0xdca, 0xdcf...0xdd4, 0xdd6...0xdd6, 0xdd8...0xddf, 0xde6...0xdef, 0xdf2...0xdf3, 0xe01...0xe3a, 0xe40...0xe4e, 0xe50...0xe59, 0xe81...0xe82, 0xe84...0xe84, 0xe86...0xe8a, 0xe8c...0xea3, 0xea5...0xea5, 0xea7...0xebd, 0xec0...0xec4, 0xec6...0xec6, 0xec8...0xecd, 0xed0...0xed9, 0xedc...0xedf, 0xf00...0xf00, 0xf18...0xf19, 0xf20...0xf29, 0xf35...0xf35, 0xf37...0xf37, 0xf39...0xf39, 0xf3e...0xf47, 0xf49...0xf6c, 0xf71...0xf84, 0xf86...0xf97, 0xf99...0xfbc, 0xfc6...0xfc6, 0x1000...0x1049, 0x1050...0x109d, 0x10a0...0x10c5, 0x10c7...0x10c7, 0x10cd...0x10cd, 0x10d0...0x10fa, 0x10fc...0x1248, 0x124a...0x124d, 0x1250...0x1256, 0x1258...0x1258, 0x125a...0x125d, 0x1260...0x1288, 0x128a...0x128d, 0x1290...0x12b0, 0x12b2...0x12b5, 0x12b8...0x12be, 0x12c0...0x12c0, 0x12c2...0x12c5, 0x12c8...0x12d6, 0x12d8...0x1310, 0x1312...0x1315, 0x1318...0x135a, 0x135d...0x135f, 0x1369...0x1371, 0x1380...0x138f, 0x13a0...0x13f5, 0x13f8...0x13fd, 0x1401...0x166c, 0x166f...0x167f, 0x1681...0x169a, 0x16a0...0x16ea, 0x16ee...0x16f8, 0x1700...0x170c, 0x170e...0x1714, 0x1720...0x1734, 0x1740...0x1753, 0x1760...0x176c, 0x176e...0x1770, 0x1772...0x1773, 0x1780...0x17d3, 0x17d7...0x17d7, 0x17dc...0x17dd, 0x17e0...0x17e9, 0x180b...0x180d, 0x1810...0x1819, 0x1820...0x1878, 0x1880...0x18aa, 0x18b0...0x18f5, 0x1900...0x191e, 0x1920...0x192b, 0x1930...0x193b, 0x1946...0x196d, 0x1970...0x1974, 0x1980...0x19ab, 0x19b0...0x19c9, 0x19d0...0x19da, 0x1a00...0x1a1b, 0x1a20...0x1a5e, 0x1a60...0x1a7c, 0x1a7f...0x1a89, 0x1a90...0x1a99, 0x1aa7...0x1aa7, 0x1ab0...0x1abd, 0x1abf...0x1ac0, 0x1b00...0x1b4b, 0x1b50...0x1b59, 0x1b6b...0x1b73, 0x1b80...0x1bf3, 0x1c00...0x1c37, 0x1c40...0x1c49, 0x1c4d...0x1c7d, 0x1c80...0x1c88, 0x1c90...0x1cba, 0x1cbd...0x1cbf, 0x1cd0...0x1cd2, 0x1cd4...0x1cfa, 0x1d00...0x1df9, 0x1dfb...0x1f15, 0x1f18...0x1f1d, 0x1f20...0x1f45, 0x1f48...0x1f4d, 0x1f50...0x1f57, 0x1f59...0x1f59, 0x1f5b...0x1f5b, 0x1f5d...0x1f5d, 0x1f5f...0x1f7d, 0x1f80...0x1fb4, 0x1fb6...0x1fbc, 0x1fbe...0x1fbe, 0x1fc2...0x1fc4, 0x1fc6...0x1fcc, 0x1fd0...0x1fd3, 0x1fd6...0x1fdb, 0x1fe0...0x1fec, 0x1ff2...0x1ff4, 0x1ff6...0x1ffc, 0x203f...0x2040, 0x2054...0x2054, 0x2071...0x2071, 0x207f...0x207f, 0x2090...0x209c, 0x20d0...0x20dc, 0x20e1...0x20e1, 0x20e5...0x20f0, 0x2102...0x2102, 0x2107...0x2107, 0x210a...0x2113, 0x2115...0x2115, 0x2118...0x211d, 0x2124...0x2124, 0x2126...0x2126, 0x2128...0x2128, 0x212a...0x2139, 0x213c...0x213f, 0x2145...0x2149, 0x214e...0x214e, 0x2160...0x2188, 0x2c00...0x2c2e, 0x2c30...0x2c5e, 0x2c60...0x2ce4, 0x2ceb...0x2cf3, 0x2d00...0x2d25, 0x2d27...0x2d27, 0x2d2d...0x2d2d, 0x2d30...0x2d67, 0x2d6f...0x2d6f, 0x2d7f...0x2d96, 0x2da0...0x2da6, 0x2da8...0x2dae, 0x2db0...0x2db6, 0x2db8...0x2dbe, 0x2dc0...0x2dc6, 0x2dc8...0x2dce, 0x2dd0...0x2dd6, 0x2dd8...0x2dde, 0x2de0...0x2dff, 0x3005...0x3007, 0x3021...0x302f, 0x3031...0x3035, 0x3038...0x303c, 0x3041...0x3096, 0x3099...0x309f, 0x30a1...0x30ff, 0x3105...0x312f, 0x3131...0x318e, 0x31a0...0x31bf, 0x31f0...0x31ff, 0x3400...0x4dbf, 0x4e00...0x9ffc, 0xa000...0xa48c, 0xa4d0...0xa4fd, 0xa500...0xa60c, 0xa610...0xa62b, 0xa640...0xa66f, 0xa674...0xa67d, 0xa67f...0xa6f1, 0xa717...0xa71f, 0xa722...0xa788, 0xa78b...0xa7bf, 0xa7c2...0xa7ca, 0xa7f5...0xa827, 0xa82c...0xa82c, 0xa840...0xa873, 0xa880...0xa8c5, 0xa8d0...0xa8d9, 0xa8e0...0xa8f7, 0xa8fb...0xa8fb, 0xa8fd...0xa92d, 0xa930...0xa953, 0xa960...0xa97c, 0xa980...0xa9c0, 0xa9cf...0xa9d9, 0xa9e0...0xa9fe, 0xaa00...0xaa36, 0xaa40...0xaa4d, 0xaa50...0xaa59, 0xaa60...0xaa76, 0xaa7a...0xaac2, 0xaadb...0xaadd, 0xaae0...0xaaef, 0xaaf2...0xaaf6, 0xab01...0xab06, 0xab09...0xab0e, 0xab11...0xab16, 0xab20...0xab26, 0xab28...0xab2e, 0xab30...0xab5a, 0xab5c...0xab69, 0xab70...0xabea, 0xabec...0xabed, 0xabf0...0xabf9, 0xac00...0xd7a3, 0xd7b0...0xd7c6, 0xd7cb...0xd7fb, 0xf900...0xfa6d, 0xfa70...0xfad9, 0xfb00...0xfb06, 0xfb13...0xfb17, 0xfb1d...0xfb28, 0xfb2a...0xfb36, 0xfb38...0xfb3c, 0xfb3e...0xfb3e, 0xfb40...0xfb41, 0xfb43...0xfb44, 0xfb46...0xfbb1, 0xfbd3...0xfd3d, 0xfd50...0xfd8f, 0xfd92...0xfdc7, 0xfdf0...0xfdfb, 0xfe00...0xfe0f, 0xfe20...0xfe2f, 0xfe33...0xfe34, 0xfe4d...0xfe4f, 0xfe70...0xfe74, 0xfe76...0xfefc, 0xff10...0xff19, 0xff21...0xff3a, 0xff3f...0xff3f, 0xff41...0xff5a, 0xff65...0xffbe, 0xffc2...0xffc7, 0xffca...0xffcf, 0xffd2...0xffd7 => true, - else => false, - }; - } - - fn isIdentifierPartSlow32(codepoint: i32) bool { - return switch (codepoint) { - 0xffda...0xffdc, 0x10000...0x1000b, 0x1000d...0x10026, 0x10028...0x1003a, 0x1003c...0x1003d, 0x1003f...0x1004d, 0x10050...0x1005d, 0x10080...0x100fa, 0x10140...0x10174, 0x101fd...0x101fd, 0x10280...0x1029c, 0x102a0...0x102d0, 0x102e0...0x102e0, 0x10300...0x1031f, 0x1032d...0x1034a, 0x10350...0x1037a, 0x10380...0x1039d, 0x103a0...0x103c3, 0x103c8...0x103cf, 0x103d1...0x103d5, 0x10400...0x1049d, 0x104a0...0x104a9, 0x104b0...0x104d3, 0x104d8...0x104fb, 0x10500...0x10527, 0x10530...0x10563, 0x10600...0x10736, 0x10740...0x10755, 0x10760...0x10767, 0x10800...0x10805, 0x10808...0x10808, 0x1080a...0x10835, 0x10837...0x10838, 0x1083c...0x1083c, 0x1083f...0x10855, 0x10860...0x10876, 0x10880...0x1089e, 0x108e0...0x108f2, 0x108f4...0x108f5, 0x10900...0x10915, 0x10920...0x10939, 0x10980...0x109b7, 0x109be...0x109bf, 0x10a00...0x10a03, 0x10a05...0x10a06, 0x10a0c...0x10a13, 0x10a15...0x10a17, 0x10a19...0x10a35, 0x10a38...0x10a3a, 0x10a3f...0x10a3f, 0x10a60...0x10a7c, 0x10a80...0x10a9c, 0x10ac0...0x10ac7, 0x10ac9...0x10ae6, 0x10b00...0x10b35, 0x10b40...0x10b55, 0x10b60...0x10b72, 0x10b80...0x10b91, 0x10c00...0x10c48, 0x10c80...0x10cb2, 0x10cc0...0x10cf2, 0x10d00...0x10d27, 0x10d30...0x10d39, 0x10e80...0x10ea9, 0x10eab...0x10eac, 0x10eb0...0x10eb1, 0x10f00...0x10f1c, 0x10f27...0x10f27, 0x10f30...0x10f50, 0x10fb0...0x10fc4, 0x10fe0...0x10ff6, 0x11000...0x11046, 0x11066...0x1106f, 0x1107f...0x110ba, 0x110d0...0x110e8, 0x110f0...0x110f9, 0x11100...0x11134, 0x11136...0x1113f, 0x11144...0x11147, 0x11150...0x11173, 0x11176...0x11176, 0x11180...0x111c4, 0x111c9...0x111cc, 0x111ce...0x111da, 0x111dc...0x111dc, 0x11200...0x11211, 0x11213...0x11237, 0x1123e...0x1123e, 0x11280...0x11286, 0x11288...0x11288, 0x1128a...0x1128d, 0x1128f...0x1129d, 0x1129f...0x112a8, 0x112b0...0x112ea, 0x112f0...0x112f9, 0x11300...0x11303, 0x11305...0x1130c, 0x1130f...0x11310, 0x11313...0x11328, 0x1132a...0x11330, 0x11332...0x11333, 0x11335...0x11339, 0x1133b...0x11344, 0x11347...0x11348, 0x1134b...0x1134d, 0x11350...0x11350, 0x11357...0x11357, 0x1135d...0x11363, 0x11366...0x1136c, 0x11370...0x11374, 0x11400...0x1144a, 0x11450...0x11459, 0x1145e...0x11461, 0x11480...0x114c5, 0x114c7...0x114c7, 0x114d0...0x114d9, 0x11580...0x115b5, 0x115b8...0x115c0, 0x115d8...0x115dd, 0x11600...0x11640, 0x11644...0x11644, 0x11650...0x11659, 0x11680...0x116b8, 0x116c0...0x116c9, 0x11700...0x1171a, 0x1171d...0x1172b, 0x11730...0x11739, 0x11800...0x1183a, 0x118a0...0x118e9, 0x118ff...0x11906, 0x11909...0x11909, 0x1190c...0x11913, 0x11915...0x11916, 0x11918...0x11935, 0x11937...0x11938, 0x1193b...0x11943, 0x11950...0x11959, 0x119a0...0x119a7, 0x119aa...0x119d7, 0x119da...0x119e1, 0x119e3...0x119e4, 0x11a00...0x11a3e, 0x11a47...0x11a47, 0x11a50...0x11a99, 0x11a9d...0x11a9d, 0x11ac0...0x11af8, 0x11c00...0x11c08, 0x11c0a...0x11c36, 0x11c38...0x11c40, 0x11c50...0x11c59, 0x11c72...0x11c8f, 0x11c92...0x11ca7, 0x11ca9...0x11cb6, 0x11d00...0x11d06, 0x11d08...0x11d09, 0x11d0b...0x11d36, 0x11d3a...0x11d3a, 0x11d3c...0x11d3d, 0x11d3f...0x11d47, 0x11d50...0x11d59, 0x11d60...0x11d65, 0x11d67...0x11d68, 0x11d6a...0x11d8e, 0x11d90...0x11d91, 0x11d93...0x11d98, 0x11da0...0x11da9, 0x11ee0...0x11ef6, 0x11fb0...0x11fb0, 0x12000...0x12399, 0x12400...0x1246e, 0x12480...0x12543, 0x13000...0x1342e, 0x14400...0x14646, 0x16800...0x16a38, 0x16a40...0x16a5e, 0x16a60...0x16a69, 0x16ad0...0x16aed, 0x16af0...0x16af4, 0x16b00...0x16b36, 0x16b40...0x16b43, 0x16b50...0x16b59, 0x16b63...0x16b77, 0x16b7d...0x16b8f, 0x16e40...0x16e7f, 0x16f00...0x16f4a, 0x16f4f...0x16f87, 0x16f8f...0x16f9f, 0x16fe0...0x16fe1, 0x16fe3...0x16fe4, 0x16ff0...0x16ff1, 0x17000...0x187f7, 0x18800...0x18cd5, 0x18d00...0x18d08, 0x1b000...0x1b11e, 0x1b150...0x1b152, 0x1b164...0x1b167, 0x1b170...0x1b2fb, 0x1bc00...0x1bc6a, 0x1bc70...0x1bc7c, 0x1bc80...0x1bc88, 0x1bc90...0x1bc99, 0x1bc9d...0x1bc9e, 0x1d165...0x1d169, 0x1d16d...0x1d172, 0x1d17b...0x1d182, 0x1d185...0x1d18b, 0x1d1aa...0x1d1ad, 0x1d242...0x1d244, 0x1d400...0x1d454, 0x1d456...0x1d49c, 0x1d49e...0x1d49f, 0x1d4a2...0x1d4a2, 0x1d4a5...0x1d4a6, 0x1d4a9...0x1d4ac, 0x1d4ae...0x1d4b9, 0x1d4bb...0x1d4bb, 0x1d4bd...0x1d4c3, 0x1d4c5...0x1d505, 0x1d507...0x1d50a, 0x1d50d...0x1d514, 0x1d516...0x1d51c, 0x1d51e...0x1d539, 0x1d53b...0x1d53e, 0x1d540...0x1d544, 0x1d546...0x1d546, 0x1d54a...0x1d550, 0x1d552...0x1d6a5, 0x1d6a8...0x1d6c0, 0x1d6c2...0x1d6da, 0x1d6dc...0x1d6fa, 0x1d6fc...0x1d714, 0x1d716...0x1d734, 0x1d736...0x1d74e, 0x1d750...0x1d76e, 0x1d770...0x1d788, 0x1d78a...0x1d7a8, 0x1d7aa...0x1d7c2, 0x1d7c4...0x1d7cb, 0x1d7ce...0x1d7ff, 0x1da00...0x1da36, 0x1da3b...0x1da6c, 0x1da75...0x1da75, 0x1da84...0x1da84, 0x1da9b...0x1da9f, 0x1daa1...0x1daaf, 0x1e000...0x1e006, 0x1e008...0x1e018, 0x1e01b...0x1e021, 0x1e023...0x1e024, 0x1e026...0x1e02a, 0x1e100...0x1e12c, 0x1e130...0x1e13d, 0x1e140...0x1e149, 0x1e14e...0x1e14e, 0x1e2c0...0x1e2f9, 0x1e800...0x1e8c4, 0x1e8d0...0x1e8d6, 0x1e900...0x1e94b, 0x1e950...0x1e959, 0x1ee00...0x1ee03, 0x1ee05...0x1ee1f, 0x1ee21...0x1ee22, 0x1ee24...0x1ee24, 0x1ee27...0x1ee27, 0x1ee29...0x1ee32, 0x1ee34...0x1ee37, 0x1ee39...0x1ee39, 0x1ee3b...0x1ee3b, 0x1ee42...0x1ee42, 0x1ee47...0x1ee47, 0x1ee49...0x1ee49, 0x1ee4b...0x1ee4b, 0x1ee4d...0x1ee4f, 0x1ee51...0x1ee52, 0x1ee54...0x1ee54, 0x1ee57...0x1ee57, 0x1ee59...0x1ee59, 0x1ee5b...0x1ee5b, 0x1ee5d...0x1ee5d, 0x1ee5f...0x1ee5f, 0x1ee61...0x1ee62, 0x1ee64...0x1ee64, 0x1ee67...0x1ee6a, 0x1ee6c...0x1ee72, 0x1ee74...0x1ee77, 0x1ee79...0x1ee7c, 0x1ee7e...0x1ee7e, 0x1ee80...0x1ee89, 0x1ee8b...0x1ee9b, 0x1eea1...0x1eea3, 0x1eea5...0x1eea9, 0x1eeab...0x1eebb, 0x1fbf0...0x1fbf9, 0x20000...0x2a6dd, 0x2a700...0x2b734, 0x2b740...0x2b81d, 0x2b820...0x2cea1, 0x2ceb0...0x2ebe0, 0x2f800...0x2fa1d, 0x30000...0x3134a, 0xe0100...0xe01ef => true, - else => false, - }; - } - - fn isIdentifierStartSlow16(codepoint: u16) bool { - return switch (codepoint) { - 0xaa...0xaa, 0xb5...0xb5, 0xba...0xba, 0xc0...0xd6, 0xd8...0xf6, 0xf8...0x2c1, 0x2c6...0x2d1, 0x2e0...0x2e4, 0x2ec...0x2ec, 0x2ee...0x2ee, 0x370...0x374, 0x376...0x377, 0x37a...0x37d, 0x37f...0x37f, 0x386...0x386, 0x388...0x38a, 0x38c...0x38c, 0x38e...0x3a1, 0x3a3...0x3f5, 0x3f7...0x481, 0x48a...0x52f, 0x531...0x556, 0x559...0x559, 0x560...0x588, 0x5d0...0x5ea, 0x5ef...0x5f2, 0x620...0x64a, 0x66e...0x66f, 0x671...0x6d3, 0x6d5...0x6d5, 0x6e5...0x6e6, 0x6ee...0x6ef, 0x6fa...0x6fc, 0x6ff...0x6ff, 0x710...0x710, 0x712...0x72f, 0x74d...0x7a5, 0x7b1...0x7b1, 0x7ca...0x7ea, 0x7f4...0x7f5, 0x7fa...0x7fa, 0x800...0x815, 0x81a...0x81a, 0x824...0x824, 0x828...0x828, 0x840...0x858, 0x860...0x86a, 0x8a0...0x8b4, 0x8b6...0x8c7, 0x904...0x939, 0x93d...0x93d, 0x950...0x950, 0x958...0x961, 0x971...0x980, 0x985...0x98c, 0x98f...0x990, 0x993...0x9a8, 0x9aa...0x9b0, 0x9b2...0x9b2, 0x9b6...0x9b9, 0x9bd...0x9bd, 0x9ce...0x9ce, 0x9dc...0x9dd, 0x9df...0x9e1, 0x9f0...0x9f1, 0x9fc...0x9fc, 0xa05...0xa0a, 0xa0f...0xa10, 0xa13...0xa28, 0xa2a...0xa30, 0xa32...0xa33, 0xa35...0xa36, 0xa38...0xa39, 0xa59...0xa5c, 0xa5e...0xa5e, 0xa72...0xa74, 0xa85...0xa8d, 0xa8f...0xa91, 0xa93...0xaa8, 0xaaa...0xab0, 0xab2...0xab3, 0xab5...0xab9, 0xabd...0xabd, 0xad0...0xad0, 0xae0...0xae1, 0xaf9...0xaf9, 0xb05...0xb0c, 0xb0f...0xb10, 0xb13...0xb28, 0xb2a...0xb30, 0xb32...0xb33, 0xb35...0xb39, 0xb3d...0xb3d, 0xb5c...0xb5d, 0xb5f...0xb61, 0xb71...0xb71, 0xb83...0xb83, 0xb85...0xb8a, 0xb8e...0xb90, 0xb92...0xb95, 0xb99...0xb9a, 0xb9c...0xb9c, 0xb9e...0xb9f, 0xba3...0xba4, 0xba8...0xbaa, 0xbae...0xbb9, 0xbd0...0xbd0, 0xc05...0xc0c, 0xc0e...0xc10, 0xc12...0xc28, 0xc2a...0xc39, 0xc3d...0xc3d, 0xc58...0xc5a, 0xc60...0xc61, 0xc80...0xc80, 0xc85...0xc8c, 0xc8e...0xc90, 0xc92...0xca8, 0xcaa...0xcb3, 0xcb5...0xcb9, 0xcbd...0xcbd, 0xcde...0xcde, 0xce0...0xce1, 0xcf1...0xcf2, 0xd04...0xd0c, 0xd0e...0xd10, 0xd12...0xd3a, 0xd3d...0xd3d, 0xd4e...0xd4e, 0xd54...0xd56, 0xd5f...0xd61, 0xd7a...0xd7f, 0xd85...0xd96, 0xd9a...0xdb1, 0xdb3...0xdbb, 0xdbd...0xdbd, 0xdc0...0xdc6, 0xe01...0xe30, 0xe32...0xe33, 0xe40...0xe46, 0xe81...0xe82, 0xe84...0xe84, 0xe86...0xe8a, 0xe8c...0xea3, 0xea5...0xea5, 0xea7...0xeb0, 0xeb2...0xeb3, 0xebd...0xebd, 0xec0...0xec4, 0xec6...0xec6, 0xedc...0xedf, 0xf00...0xf00, 0xf40...0xf47, 0xf49...0xf6c, 0xf88...0xf8c, 0x1000...0x102a, 0x103f...0x103f, 0x1050...0x1055, 0x105a...0x105d, 0x1061...0x1061, 0x1065...0x1066, 0x106e...0x1070, 0x1075...0x1081, 0x108e...0x108e, 0x10a0...0x10c5, 0x10c7...0x10c7, 0x10cd...0x10cd, 0x10d0...0x10fa, 0x10fc...0x1248, 0x124a...0x124d, 0x1250...0x1256, 0x1258...0x1258, 0x125a...0x125d, 0x1260...0x1288, 0x128a...0x128d, 0x1290...0x12b0, 0x12b2...0x12b5, 0x12b8...0x12be, 0x12c0...0x12c0, 0x12c2...0x12c5, 0x12c8...0x12d6, 0x12d8...0x1310, 0x1312...0x1315, 0x1318...0x135a, 0x1380...0x138f, 0x13a0...0x13f5, 0x13f8...0x13fd, 0x1401...0x166c, 0x166f...0x167f, 0x1681...0x169a, 0x16a0...0x16ea, 0x16ee...0x16f8, 0x1700...0x170c, 0x170e...0x1711, 0x1720...0x1731, 0x1740...0x1751, 0x1760...0x176c, 0x176e...0x1770, 0x1780...0x17b3, 0x17d7...0x17d7, 0x17dc...0x17dc, 0x1820...0x1878, 0x1880...0x18a8, 0x18aa...0x18aa, 0x18b0...0x18f5, 0x1900...0x191e, 0x1950...0x196d, 0x1970...0x1974, 0x1980...0x19ab, 0x19b0...0x19c9, 0x1a00...0x1a16, 0x1a20...0x1a54, 0x1aa7...0x1aa7, 0x1b05...0x1b33, 0x1b45...0x1b4b, 0x1b83...0x1ba0, 0x1bae...0x1baf, 0x1bba...0x1be5, 0x1c00...0x1c23, 0x1c4d...0x1c4f, 0x1c5a...0x1c7d, 0x1c80...0x1c88, 0x1c90...0x1cba, 0x1cbd...0x1cbf, 0x1ce9...0x1cec, 0x1cee...0x1cf3, 0x1cf5...0x1cf6, 0x1cfa...0x1cfa, 0x1d00...0x1dbf, 0x1e00...0x1f15, 0x1f18...0x1f1d, 0x1f20...0x1f45, 0x1f48...0x1f4d, 0x1f50...0x1f57, 0x1f59...0x1f59, 0x1f5b...0x1f5b, 0x1f5d...0x1f5d, 0x1f5f...0x1f7d, 0x1f80...0x1fb4, 0x1fb6...0x1fbc, 0x1fbe...0x1fbe, 0x1fc2...0x1fc4, 0x1fc6...0x1fcc, 0x1fd0...0x1fd3, 0x1fd6...0x1fdb, 0x1fe0...0x1fec, 0x1ff2...0x1ff4, 0x1ff6...0x1ffc, 0x2071...0x2071, 0x207f...0x207f, 0x2090...0x209c, 0x2102...0x2102, 0x2107...0x2107, 0x210a...0x2113, 0x2115...0x2115, 0x2118...0x211d, 0x2124...0x2124, 0x2126...0x2126, 0x2128...0x2128, 0x212a...0x2139, 0x213c...0x213f, 0x2145...0x2149, 0x214e...0x214e, 0x2160...0x2188, 0x2c00...0x2c2e, 0x2c30...0x2c5e, 0x2c60...0x2ce4, 0x2ceb...0x2cee, 0x2cf2...0x2cf3, 0x2d00...0x2d25, 0x2d27...0x2d27, 0x2d2d...0x2d2d, 0x2d30...0x2d67, 0x2d6f...0x2d6f, 0x2d80...0x2d96, 0x2da0...0x2da6, 0x2da8...0x2dae, 0x2db0...0x2db6, 0x2db8...0x2dbe, 0x2dc0...0x2dc6, 0x2dc8...0x2dce, 0x2dd0...0x2dd6, 0x2dd8...0x2dde, 0x3005...0x3007, 0x3021...0x3029, 0x3031...0x3035, 0x3038...0x303c, 0x3041...0x3096, 0x309b...0x309f, 0x30a1...0x30fa, 0x30fc...0x30ff, 0x3105...0x312f, 0x3131...0x318e, 0x31a0...0x31bf, 0x31f0...0x31ff, 0x3400...0x4dbf, 0x4e00...0x9ffc, 0xa000...0xa48c, 0xa4d0...0xa4fd, 0xa500...0xa60c, 0xa610...0xa61f, 0xa62a...0xa62b, 0xa640...0xa66e, 0xa67f...0xa69d, 0xa6a0...0xa6ef, 0xa717...0xa71f, 0xa722...0xa788, 0xa78b...0xa7bf, 0xa7c2...0xa7ca, 0xa7f5...0xa801, 0xa803...0xa805, 0xa807...0xa80a, 0xa80c...0xa822, 0xa840...0xa873, 0xa882...0xa8b3, 0xa8f2...0xa8f7, 0xa8fb...0xa8fb, 0xa8fd...0xa8fe, 0xa90a...0xa925, 0xa930...0xa946, 0xa960...0xa97c, 0xa984...0xa9b2, 0xa9cf...0xa9cf, 0xa9e0...0xa9e4, 0xa9e6...0xa9ef, 0xa9fa...0xa9fe, 0xaa00...0xaa28, 0xaa40...0xaa42, 0xaa44...0xaa4b, 0xaa60...0xaa76, 0xaa7a...0xaa7a, 0xaa7e...0xaaaf, 0xaab1...0xaab1, 0xaab5...0xaab6, 0xaab9...0xaabd, 0xaac0...0xaac0, 0xaac2...0xaac2, 0xaadb...0xaadd, 0xaae0...0xaaea, 0xaaf2...0xaaf4, 0xab01...0xab06, 0xab09...0xab0e, 0xab11...0xab16, 0xab20...0xab26, 0xab28...0xab2e, 0xab30...0xab5a, 0xab5c...0xab69, 0xab70...0xabe2, 0xac00...0xd7a3, 0xd7b0...0xd7c6, 0xd7cb...0xd7fb, 0xf900...0xfa6d, 0xfa70...0xfad9, 0xfb00...0xfb06, 0xfb13...0xfb17, 0xfb1d...0xfb1d, 0xfb1f...0xfb28, 0xfb2a...0xfb36, 0xfb38...0xfb3c, 0xfb3e...0xfb3e, 0xfb40...0xfb41, 0xfb43...0xfb44, 0xfb46...0xfbb1, 0xfbd3...0xfd3d, 0xfd50...0xfd8f, 0xfd92...0xfdc7 => true, - else => false, - }; - } - - fn isIdentifierStartSlow32(codepoint: i32) bool { - return switch (codepoint) { - 0xfdf0...0xfdfb, 0xfe70...0xfe74, 0xfe76...0xfefc, 0xff21...0xff3a, 0xff41...0xff5a, 0xff66...0xffbe, 0xffc2...0xffc7, 0xffca...0xffcf, 0xffd2...0xffd7, 0xffda...0xffdc, 0x10000...0x1000b, 0x1000d...0x10026, 0x10028...0x1003a, 0x1003c...0x1003d, 0x1003f...0x1004d, 0x10050...0x1005d, 0x10080...0x100fa, 0x10140...0x10174, 0x10280...0x1029c, 0x102a0...0x102d0, 0x10300...0x1031f, 0x1032d...0x1034a, 0x10350...0x10375, 0x10380...0x1039d, 0x103a0...0x103c3, 0x103c8...0x103cf, 0x103d1...0x103d5, 0x10400...0x1049d, 0x104b0...0x104d3, 0x104d8...0x104fb, 0x10500...0x10527, 0x10530...0x10563, 0x10600...0x10736, 0x10740...0x10755, 0x10760...0x10767, 0x10800...0x10805, 0x10808...0x10808, 0x1080a...0x10835, 0x10837...0x10838, 0x1083c...0x1083c, 0x1083f...0x10855, 0x10860...0x10876, 0x10880...0x1089e, 0x108e0...0x108f2, 0x108f4...0x108f5, 0x10900...0x10915, 0x10920...0x10939, 0x10980...0x109b7, 0x109be...0x109bf, 0x10a00...0x10a00, 0x10a10...0x10a13, 0x10a15...0x10a17, 0x10a19...0x10a35, 0x10a60...0x10a7c, 0x10a80...0x10a9c, 0x10ac0...0x10ac7, 0x10ac9...0x10ae4, 0x10b00...0x10b35, 0x10b40...0x10b55, 0x10b60...0x10b72, 0x10b80...0x10b91, 0x10c00...0x10c48, 0x10c80...0x10cb2, 0x10cc0...0x10cf2, 0x10d00...0x10d23, 0x10e80...0x10ea9, 0x10eb0...0x10eb1, 0x10f00...0x10f1c, 0x10f27...0x10f27, 0x10f30...0x10f45, 0x10fb0...0x10fc4, 0x10fe0...0x10ff6, 0x11003...0x11037, 0x11083...0x110af, 0x110d0...0x110e8, 0x11103...0x11126, 0x11144...0x11144, 0x11147...0x11147, 0x11150...0x11172, 0x11176...0x11176, 0x11183...0x111b2, 0x111c1...0x111c4, 0x111da...0x111da, 0x111dc...0x111dc, 0x11200...0x11211, 0x11213...0x1122b, 0x11280...0x11286, 0x11288...0x11288, 0x1128a...0x1128d, 0x1128f...0x1129d, 0x1129f...0x112a8, 0x112b0...0x112de, 0x11305...0x1130c, 0x1130f...0x11310, 0x11313...0x11328, 0x1132a...0x11330, 0x11332...0x11333, 0x11335...0x11339, 0x1133d...0x1133d, 0x11350...0x11350, 0x1135d...0x11361, 0x11400...0x11434, 0x11447...0x1144a, 0x1145f...0x11461, 0x11480...0x114af, 0x114c4...0x114c5, 0x114c7...0x114c7, 0x11580...0x115ae, 0x115d8...0x115db, 0x11600...0x1162f, 0x11644...0x11644, 0x11680...0x116aa, 0x116b8...0x116b8, 0x11700...0x1171a, 0x11800...0x1182b, 0x118a0...0x118df, 0x118ff...0x11906, 0x11909...0x11909, 0x1190c...0x11913, 0x11915...0x11916, 0x11918...0x1192f, 0x1193f...0x1193f, 0x11941...0x11941, 0x119a0...0x119a7, 0x119aa...0x119d0, 0x119e1...0x119e1, 0x119e3...0x119e3, 0x11a00...0x11a00, 0x11a0b...0x11a32, 0x11a3a...0x11a3a, 0x11a50...0x11a50, 0x11a5c...0x11a89, 0x11a9d...0x11a9d, 0x11ac0...0x11af8, 0x11c00...0x11c08, 0x11c0a...0x11c2e, 0x11c40...0x11c40, 0x11c72...0x11c8f, 0x11d00...0x11d06, 0x11d08...0x11d09, 0x11d0b...0x11d30, 0x11d46...0x11d46, 0x11d60...0x11d65, 0x11d67...0x11d68, 0x11d6a...0x11d89, 0x11d98...0x11d98, 0x11ee0...0x11ef2, 0x11fb0...0x11fb0, 0x12000...0x12399, 0x12400...0x1246e, 0x12480...0x12543, 0x13000...0x1342e, 0x14400...0x14646, 0x16800...0x16a38, 0x16a40...0x16a5e, 0x16ad0...0x16aed, 0x16b00...0x16b2f, 0x16b40...0x16b43, 0x16b63...0x16b77, 0x16b7d...0x16b8f, 0x16e40...0x16e7f, 0x16f00...0x16f4a, 0x16f50...0x16f50, 0x16f93...0x16f9f, 0x16fe0...0x16fe1, 0x16fe3...0x16fe3, 0x17000...0x187f7, 0x18800...0x18cd5, 0x18d00...0x18d08, 0x1b000...0x1b11e, 0x1b150...0x1b152, 0x1b164...0x1b167, 0x1b170...0x1b2fb, 0x1bc00...0x1bc6a, 0x1bc70...0x1bc7c, 0x1bc80...0x1bc88, 0x1bc90...0x1bc99, 0x1d400...0x1d454, 0x1d456...0x1d49c, 0x1d49e...0x1d49f, 0x1d4a2...0x1d4a2, 0x1d4a5...0x1d4a6, 0x1d4a9...0x1d4ac, 0x1d4ae...0x1d4b9, 0x1d4bb...0x1d4bb, 0x1d4bd...0x1d4c3, 0x1d4c5...0x1d505, 0x1d507...0x1d50a, 0x1d50d...0x1d514, 0x1d516...0x1d51c, 0x1d51e...0x1d539, 0x1d53b...0x1d53e, 0x1d540...0x1d544, 0x1d546...0x1d546, 0x1d54a...0x1d550, 0x1d552...0x1d6a5, 0x1d6a8...0x1d6c0, 0x1d6c2...0x1d6da, 0x1d6dc...0x1d6fa, 0x1d6fc...0x1d714, 0x1d716...0x1d734, 0x1d736...0x1d74e, 0x1d750...0x1d76e, 0x1d770...0x1d788, 0x1d78a...0x1d7a8, 0x1d7aa...0x1d7c2, 0x1d7c4...0x1d7cb, 0x1e100...0x1e12c, 0x1e137...0x1e13d, 0x1e14e...0x1e14e, 0x1e2c0...0x1e2eb, 0x1e800...0x1e8c4, 0x1e900...0x1e943, 0x1e94b...0x1e94b, 0x1ee00...0x1ee03, 0x1ee05...0x1ee1f, 0x1ee21...0x1ee22, 0x1ee24...0x1ee24, 0x1ee27...0x1ee27, 0x1ee29...0x1ee32, 0x1ee34...0x1ee37, 0x1ee39...0x1ee39, 0x1ee3b...0x1ee3b, 0x1ee42...0x1ee42, 0x1ee47...0x1ee47, 0x1ee49...0x1ee49, 0x1ee4b...0x1ee4b, 0x1ee4d...0x1ee4f, 0x1ee51...0x1ee52, 0x1ee54...0x1ee54, 0x1ee57...0x1ee57, 0x1ee59...0x1ee59, 0x1ee5b...0x1ee5b, 0x1ee5d...0x1ee5d, 0x1ee5f...0x1ee5f, 0x1ee61...0x1ee62, 0x1ee64...0x1ee64, 0x1ee67...0x1ee6a, 0x1ee6c...0x1ee72, 0x1ee74...0x1ee77, 0x1ee79...0x1ee7c, 0x1ee7e...0x1ee7e, 0x1ee80...0x1ee89, 0x1ee8b...0x1ee9b, 0x1eea1...0x1eea3, 0x1eea5...0x1eea9, 0x1eeab...0x1eebb, 0x20000...0x2a6dd, 0x2a700...0x2b734, 0x2b740...0x2b81d, 0x2b820...0x2cea1, 0x2ceb0...0x2ebe0, 0x2f800...0x2fa1d, 0x30000...0x3134a => true, - else => false, - }; - } - - noinline fn isIdentifierStartSlow(codepoint: i32) bool { - @setCold(true); - return switch (codepoint) { - // explicitly tell LLVM's optimizer about values we know will not be in the range of this switch statement - - (max_codepoint + 1)...maxInt(i32), minInt(i32)...127 => unreachable, - 128...0xfdc7 => isIdentifierStartSlow16(@as(u16, @intCast(codepoint))), - 0xfdf0...0x3134a => isIdentifierStartSlow32(codepoint), - else => false, - }; - } - - pub inline fn isIdentifierStart(codepoint: i32) bool { - return switch (codepoint) { - 'A'...'Z', 'a'...'z', '$', '_' => true, - else => if (codepoint < 128) - return false - else - return isIdentifierStartSlow(codepoint), - }; - } - - pub inline fn isIdentifierPart(codepoint: i32) bool { - return switch (codepoint) { - 'A'...'Z', 'a'...'z', '0'...'9', '$', '_' => true, - else => if (codepoint < 128) - return false - else if (codepoint == 0x200C or codepoint == 0x200D) - return true - else - return isIdentifierPartSlow(codepoint), - }; - } +/// isIDContinueES5 checks if a codepoint is valid in the isIDContinueES5 category +pub fn isIDContinueES5(cp: u21) bool { + const high = cp >> 8; + const low = cp & 0xFF; + const stage2_idx = idContinueES5.stage1[high]; + const bit_pos = stage2_idx + low; + const u64_idx = bit_pos >> 6; + const bit_idx = @as(u6, @intCast(bit_pos & 63)); + return (idContinueES5.stage2[u64_idx] & (@as(u64, 1) << bit_idx)) != 0; +} +const idContinueES5 = struct { + pub const stage1 = [_]u16{ 0, 256, 512, 768, 1024, 1280, 1536, 1792, 2048, 2304, 2560, 2816, 3072, 3328, 3584, 3840, 4096, 4352, 4608, 4864, 5120, 256, 5376, 5632, 5888, 2048, 2048, 2048, 2048, 2048, 6144, 6400, 6656, 6912, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 7168, 7424, 2048, 2048, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 7680, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 7936, 256, 256, 256, 256, 8192, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 8448, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 256, 8704, 8960, 256, 9216, 9472, 9728, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048 }; + pub const stage2 = [_]u64{ 287948901175001088, 576460745995190270, 297241973452963840, 18410715276682199039, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 4503586742468607, 18446744073709486080, 18014187403249451007, 70501888360451, 18446744073709551615, 288230406216515583, 18446744056529672000, 4503599577006079, 18446744073709551615, 18446744073709551615, 18446744073709547643, 234187180623206815, 18446181123756130304, 18446744065161560063, 13546827661950451967, 1979120929931286, 576460743713488896, 18446466992488579071, 18446744073709551615, 2305629702346244095, 18446497783104864256, 2047, 562949953421311, 0, 0, 0, 0, 0, 17582052945254416366, 281268803551231, 15259882188367831022, 1125692414638495, 15235112390417287140, 9006925953907079, 17576984196650086382, 281204393851839, 17567976997395210222, 281215949093263, 14105211467435198444, 280925229301191, 14118782632783110126, 281212990012895, 14118782632783110124, 281214063754719, 14123286232410480620, 281212992110031, 3457638613854978028, 3377704004977791, 576460752303423486, 67076095, 4323434403644581270, 872365919, 14024213633433600001, 18446189919849152255, 2305843009196855263, 64, 272457864671395839, 67044351, 18446744069414584320, 36028797018898495, 18446744073709551615, 18446744071629176831, 18446743008557662207, 288230376151711743, 18446744073709551487, 18446744070446333311, 9168625153884503423, 18446603336212774717, 18446744071549321215, 1123701017804671, 18446744069414584320, 9007199254740991, 18446744073709551614, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 35923243902697471, 18446744069548802046, 8796093022207, 0, 0, 18446744073709551615, 4393752592383, 18446744069481627648, 72057594037927935, 4398046511103, 0, 18446744073709551615, 18446744073709551615, 18446744069683019775, 288230376151711743, 18446744070475743231, 4611686017001275199, 6908521828386340863, 2295745090394464220, 9223372036854775808, 9223372036854775809, 0, 9126739968, 287031153606524036, 0, 0, 0, 17728525486260320, 18446744073709551614, 18446744066832990207, 9223372036854775807, 18446216308128219104, 18446744073709551615, 72057589742993407, 0, 18446744073709551615, 18446744073709551615, 18014398509481983, 0, 18446744073709551615, 18446744073709551615, 274877906943, 0, 18446744073709551615, 18446744073709551615, 8191, 0, 18446744073709551615, 18446744073709551615, 68719476735, 0, 70368744177663, 0, 0, 0, 6881498031078244479, 18446744073709551579, 1125899906842623, 18446744073709027328, 4611686018427387903, 18446744073709486080, 18446744073709355007, 1152640029630136575, 6755463865565184, 18435203599664472064, 18446744073709551615, 2305843009213693951, 9799832780635308032, 18446743936404815870, 9223372036854775807, 486341884 }; }; -pub const JumpTableInline = struct { - pub inline fn isIdentifierStart(codepoint: i32) bool { - return switch (codepoint) { - 'A'...'Z', 'a'...'z', '$', '_' => true, - - else => switch (codepoint) { - 0x41...0x5a, 0x61...0x7a, 0xaa...0xaa, 0xb5...0xb5, 0xba...0xba, 0xc0...0xd6, 0xd8...0xf6, 0xf8...0x2c1, 0x2c6...0x2d1, 0x2e0...0x2e4, 0x2ec...0x2ec, 0x2ee...0x2ee, 0x370...0x374, 0x376...0x377, 0x37a...0x37d, 0x37f...0x37f, 0x386...0x386, 0x388...0x38a, 0x38c...0x38c, 0x38e...0x3a1, 0x3a3...0x3f5, 0x3f7...0x481, 0x48a...0x52f, 0x531...0x556, 0x559...0x559, 0x560...0x588, 0x5d0...0x5ea, 0x5ef...0x5f2, 0x620...0x64a, 0x66e...0x66f, 0x671...0x6d3, 0x6d5...0x6d5, 0x6e5...0x6e6, 0x6ee...0x6ef, 0x6fa...0x6fc, 0x6ff...0x6ff, 0x710...0x710, 0x712...0x72f, 0x74d...0x7a5, 0x7b1...0x7b1, 0x7ca...0x7ea, 0x7f4...0x7f5, 0x7fa...0x7fa, 0x800...0x815, 0x81a...0x81a, 0x824...0x824, 0x828...0x828, 0x840...0x858, 0x860...0x86a, 0x8a0...0x8b4, 0x8b6...0x8c7, 0x904...0x939, 0x93d...0x93d, 0x950...0x950, 0x958...0x961, 0x971...0x980, 0x985...0x98c, 0x98f...0x990, 0x993...0x9a8, 0x9aa...0x9b0, 0x9b2...0x9b2, 0x9b6...0x9b9, 0x9bd...0x9bd, 0x9ce...0x9ce, 0x9dc...0x9dd, 0x9df...0x9e1, 0x9f0...0x9f1, 0x9fc...0x9fc, 0xa05...0xa0a, 0xa0f...0xa10, 0xa13...0xa28, 0xa2a...0xa30, 0xa32...0xa33, 0xa35...0xa36, 0xa38...0xa39, 0xa59...0xa5c, 0xa5e...0xa5e, 0xa72...0xa74, 0xa85...0xa8d, 0xa8f...0xa91, 0xa93...0xaa8, 0xaaa...0xab0, 0xab2...0xab3, 0xab5...0xab9, 0xabd...0xabd, 0xad0...0xad0, 0xae0...0xae1, 0xaf9...0xaf9, 0xb05...0xb0c, 0xb0f...0xb10, 0xb13...0xb28, 0xb2a...0xb30, 0xb32...0xb33, 0xb35...0xb39, 0xb3d...0xb3d, 0xb5c...0xb5d, 0xb5f...0xb61, 0xb71...0xb71, 0xb83...0xb83, 0xb85...0xb8a, 0xb8e...0xb90, 0xb92...0xb95, 0xb99...0xb9a, 0xb9c...0xb9c, 0xb9e...0xb9f, 0xba3...0xba4, 0xba8...0xbaa, 0xbae...0xbb9, 0xbd0...0xbd0, 0xc05...0xc0c, 0xc0e...0xc10, 0xc12...0xc28, 0xc2a...0xc39, 0xc3d...0xc3d, 0xc58...0xc5a, 0xc60...0xc61, 0xc80...0xc80, 0xc85...0xc8c, 0xc8e...0xc90, 0xc92...0xca8, 0xcaa...0xcb3, 0xcb5...0xcb9, 0xcbd...0xcbd, 0xcde...0xcde, 0xce0...0xce1, 0xcf1...0xcf2, 0xd04...0xd0c, 0xd0e...0xd10, 0xd12...0xd3a, 0xd3d...0xd3d, 0xd4e...0xd4e, 0xd54...0xd56, 0xd5f...0xd61, 0xd7a...0xd7f, 0xd85...0xd96, 0xd9a...0xdb1, 0xdb3...0xdbb, 0xdbd...0xdbd, 0xdc0...0xdc6, 0xe01...0xe30, 0xe32...0xe33, 0xe40...0xe46, 0xe81...0xe82, 0xe84...0xe84, 0xe86...0xe8a, 0xe8c...0xea3, 0xea5...0xea5, 0xea7...0xeb0, 0xeb2...0xeb3, 0xebd...0xebd, 0xec0...0xec4, 0xec6...0xec6, 0xedc...0xedf, 0xf00...0xf00, 0xf40...0xf47, 0xf49...0xf6c, 0xf88...0xf8c, 0x1000...0x102a, 0x103f...0x103f, 0x1050...0x1055, 0x105a...0x105d, 0x1061...0x1061, 0x1065...0x1066, 0x106e...0x1070, 0x1075...0x1081, 0x108e...0x108e, 0x10a0...0x10c5, 0x10c7...0x10c7, 0x10cd...0x10cd, 0x10d0...0x10fa, 0x10fc...0x1248, 0x124a...0x124d, 0x1250...0x1256, 0x1258...0x1258, 0x125a...0x125d, 0x1260...0x1288, 0x128a...0x128d, 0x1290...0x12b0, 0x12b2...0x12b5, 0x12b8...0x12be, 0x12c0...0x12c0, 0x12c2...0x12c5, 0x12c8...0x12d6, 0x12d8...0x1310, 0x1312...0x1315, 0x1318...0x135a, 0x1380...0x138f, 0x13a0...0x13f5, 0x13f8...0x13fd, 0x1401...0x166c, 0x166f...0x167f, 0x1681...0x169a, 0x16a0...0x16ea, 0x16ee...0x16f8, 0x1700...0x170c, 0x170e...0x1711, 0x1720...0x1731, 0x1740...0x1751, 0x1760...0x176c, 0x176e...0x1770, 0x1780...0x17b3, 0x17d7...0x17d7, 0x17dc...0x17dc, 0x1820...0x1878, 0x1880...0x18a8, 0x18aa...0x18aa, 0x18b0...0x18f5, 0x1900...0x191e, 0x1950...0x196d, 0x1970...0x1974, 0x1980...0x19ab, 0x19b0...0x19c9, 0x1a00...0x1a16, 0x1a20...0x1a54, 0x1aa7...0x1aa7, 0x1b05...0x1b33, 0x1b45...0x1b4b, 0x1b83...0x1ba0, 0x1bae...0x1baf, 0x1bba...0x1be5, 0x1c00...0x1c23, 0x1c4d...0x1c4f, 0x1c5a...0x1c7d, 0x1c80...0x1c88, 0x1c90...0x1cba, 0x1cbd...0x1cbf, 0x1ce9...0x1cec, 0x1cee...0x1cf3, 0x1cf5...0x1cf6, 0x1cfa...0x1cfa, 0x1d00...0x1dbf, 0x1e00...0x1f15, 0x1f18...0x1f1d, 0x1f20...0x1f45, 0x1f48...0x1f4d, 0x1f50...0x1f57, 0x1f59...0x1f59, 0x1f5b...0x1f5b, 0x1f5d...0x1f5d, 0x1f5f...0x1f7d, 0x1f80...0x1fb4, 0x1fb6...0x1fbc, 0x1fbe...0x1fbe, 0x1fc2...0x1fc4, 0x1fc6...0x1fcc, 0x1fd0...0x1fd3, 0x1fd6...0x1fdb, 0x1fe0...0x1fec, 0x1ff2...0x1ff4, 0x1ff6...0x1ffc, 0x2071...0x2071, 0x207f...0x207f, 0x2090...0x209c, 0x2102...0x2102, 0x2107...0x2107, 0x210a...0x2113, 0x2115...0x2115, 0x2118...0x211d, 0x2124...0x2124, 0x2126...0x2126, 0x2128...0x2128, 0x212a...0x2139, 0x213c...0x213f, 0x2145...0x2149, 0x214e...0x214e, 0x2160...0x2188, 0x2c00...0x2c2e, 0x2c30...0x2c5e, 0x2c60...0x2ce4, 0x2ceb...0x2cee, 0x2cf2...0x2cf3, 0x2d00...0x2d25, 0x2d27...0x2d27, 0x2d2d...0x2d2d, 0x2d30...0x2d67, 0x2d6f...0x2d6f, 0x2d80...0x2d96, 0x2da0...0x2da6, 0x2da8...0x2dae, 0x2db0...0x2db6, 0x2db8...0x2dbe, 0x2dc0...0x2dc6, 0x2dc8...0x2dce, 0x2dd0...0x2dd6, 0x2dd8...0x2dde, 0x3005...0x3007, 0x3021...0x3029, 0x3031...0x3035, 0x3038...0x303c, 0x3041...0x3096, 0x309b...0x309f, 0x30a1...0x30fa, 0x30fc...0x30ff, 0x3105...0x312f, 0x3131...0x318e, 0x31a0...0x31bf, 0x31f0...0x31ff, 0x3400...0x4dbf, 0x4e00...0x9ffc, 0xa000...0xa48c, 0xa4d0...0xa4fd, 0xa500...0xa60c, 0xa610...0xa61f, 0xa62a...0xa62b, 0xa640...0xa66e, 0xa67f...0xa69d, 0xa6a0...0xa6ef, 0xa717...0xa71f, 0xa722...0xa788, 0xa78b...0xa7bf, 0xa7c2...0xa7ca, 0xa7f5...0xa801, 0xa803...0xa805, 0xa807...0xa80a, 0xa80c...0xa822, 0xa840...0xa873, 0xa882...0xa8b3, 0xa8f2...0xa8f7, 0xa8fb...0xa8fb, 0xa8fd...0xa8fe, 0xa90a...0xa925, 0xa930...0xa946, 0xa960...0xa97c, 0xa984...0xa9b2, 0xa9cf...0xa9cf, 0xa9e0...0xa9e4, 0xa9e6...0xa9ef, 0xa9fa...0xa9fe, 0xaa00...0xaa28, 0xaa40...0xaa42, 0xaa44...0xaa4b, 0xaa60...0xaa76, 0xaa7a...0xaa7a, 0xaa7e...0xaaaf, 0xaab1...0xaab1, 0xaab5...0xaab6, 0xaab9...0xaabd, 0xaac0...0xaac0, 0xaac2...0xaac2, 0xaadb...0xaadd, 0xaae0...0xaaea, 0xaaf2...0xaaf4, 0xab01...0xab06, 0xab09...0xab0e, 0xab11...0xab16, 0xab20...0xab26, 0xab28...0xab2e, 0xab30...0xab5a, 0xab5c...0xab69, 0xab70...0xabe2, 0xac00...0xd7a3, 0xd7b0...0xd7c6, 0xd7cb...0xd7fb, 0xf900...0xfa6d, 0xfa70...0xfad9, 0xfb00...0xfb06, 0xfb13...0xfb17, 0xfb1d...0xfb1d, 0xfb1f...0xfb28, 0xfb2a...0xfb36, 0xfb38...0xfb3c, 0xfb3e...0xfb3e, 0xfb40...0xfb41, 0xfb43...0xfb44, 0xfb46...0xfbb1, 0xfbd3...0xfd3d, 0xfd50...0xfd8f, 0xfd92...0xfdc7, 0xfdf0...0xfdfb, 0xfe70...0xfe74, 0xfe76...0xfefc, 0xff21...0xff3a, 0xff41...0xff5a, 0xff66...0xffbe, 0xffc2...0xffc7, 0xffca...0xffcf, 0xffd2...0xffd7, 0xffda...0xffdc, 0x10000...0x1000b, 0x1000d...0x10026, 0x10028...0x1003a, 0x1003c...0x1003d, 0x1003f...0x1004d, 0x10050...0x1005d, 0x10080...0x100fa, 0x10140...0x10174, 0x10280...0x1029c, 0x102a0...0x102d0, 0x10300...0x1031f, 0x1032d...0x1034a, 0x10350...0x10375, 0x10380...0x1039d, 0x103a0...0x103c3, 0x103c8...0x103cf, 0x103d1...0x103d5, 0x10400...0x1049d, 0x104b0...0x104d3, 0x104d8...0x104fb, 0x10500...0x10527, 0x10530...0x10563, 0x10600...0x10736, 0x10740...0x10755, 0x10760...0x10767, 0x10800...0x10805, 0x10808...0x10808, 0x1080a...0x10835, 0x10837...0x10838, 0x1083c...0x1083c, 0x1083f...0x10855, 0x10860...0x10876, 0x10880...0x1089e, 0x108e0...0x108f2, 0x108f4...0x108f5, 0x10900...0x10915, 0x10920...0x10939, 0x10980...0x109b7, 0x109be...0x109bf, 0x10a00...0x10a00, 0x10a10...0x10a13, 0x10a15...0x10a17, 0x10a19...0x10a35, 0x10a60...0x10a7c, 0x10a80...0x10a9c, 0x10ac0...0x10ac7, 0x10ac9...0x10ae4, 0x10b00...0x10b35, 0x10b40...0x10b55, 0x10b60...0x10b72, 0x10b80...0x10b91, 0x10c00...0x10c48, 0x10c80...0x10cb2, 0x10cc0...0x10cf2, 0x10d00...0x10d23, 0x10e80...0x10ea9, 0x10eb0...0x10eb1, 0x10f00...0x10f1c, 0x10f27...0x10f27, 0x10f30...0x10f45, 0x10fb0...0x10fc4, 0x10fe0...0x10ff6, 0x11003...0x11037, 0x11083...0x110af, 0x110d0...0x110e8, 0x11103...0x11126, 0x11144...0x11144, 0x11147...0x11147, 0x11150...0x11172, 0x11176...0x11176, 0x11183...0x111b2, 0x111c1...0x111c4, 0x111da...0x111da, 0x111dc...0x111dc, 0x11200...0x11211, 0x11213...0x1122b, 0x11280...0x11286, 0x11288...0x11288, 0x1128a...0x1128d, 0x1128f...0x1129d, 0x1129f...0x112a8, 0x112b0...0x112de, 0x11305...0x1130c, 0x1130f...0x11310, 0x11313...0x11328, 0x1132a...0x11330, 0x11332...0x11333, 0x11335...0x11339, 0x1133d...0x1133d, 0x11350...0x11350, 0x1135d...0x11361, 0x11400...0x11434, 0x11447...0x1144a, 0x1145f...0x11461, 0x11480...0x114af, 0x114c4...0x114c5, 0x114c7...0x114c7, 0x11580...0x115ae, 0x115d8...0x115db, 0x11600...0x1162f, 0x11644...0x11644, 0x11680...0x116aa, 0x116b8...0x116b8, 0x11700...0x1171a, 0x11800...0x1182b, 0x118a0...0x118df, 0x118ff...0x11906, 0x11909...0x11909, 0x1190c...0x11913, 0x11915...0x11916, 0x11918...0x1192f, 0x1193f...0x1193f, 0x11941...0x11941, 0x119a0...0x119a7, 0x119aa...0x119d0, 0x119e1...0x119e1, 0x119e3...0x119e3, 0x11a00...0x11a00, 0x11a0b...0x11a32, 0x11a3a...0x11a3a, 0x11a50...0x11a50, 0x11a5c...0x11a89, 0x11a9d...0x11a9d, 0x11ac0...0x11af8, 0x11c00...0x11c08, 0x11c0a...0x11c2e, 0x11c40...0x11c40, 0x11c72...0x11c8f, 0x11d00...0x11d06, 0x11d08...0x11d09, 0x11d0b...0x11d30, 0x11d46...0x11d46, 0x11d60...0x11d65, 0x11d67...0x11d68, 0x11d6a...0x11d89, 0x11d98...0x11d98, 0x11ee0...0x11ef2, 0x11fb0...0x11fb0, 0x12000...0x12399, 0x12400...0x1246e, 0x12480...0x12543, 0x13000...0x1342e, 0x14400...0x14646, 0x16800...0x16a38, 0x16a40...0x16a5e, 0x16ad0...0x16aed, 0x16b00...0x16b2f, 0x16b40...0x16b43, 0x16b63...0x16b77, 0x16b7d...0x16b8f, 0x16e40...0x16e7f, 0x16f00...0x16f4a, 0x16f50...0x16f50, 0x16f93...0x16f9f, 0x16fe0...0x16fe1, 0x16fe3...0x16fe3, 0x17000...0x187f7, 0x18800...0x18cd5, 0x18d00...0x18d08, 0x1b000...0x1b11e, 0x1b150...0x1b152, 0x1b164...0x1b167, 0x1b170...0x1b2fb, 0x1bc00...0x1bc6a, 0x1bc70...0x1bc7c, 0x1bc80...0x1bc88, 0x1bc90...0x1bc99, 0x1d400...0x1d454, 0x1d456...0x1d49c, 0x1d49e...0x1d49f, 0x1d4a2...0x1d4a2, 0x1d4a5...0x1d4a6, 0x1d4a9...0x1d4ac, 0x1d4ae...0x1d4b9, 0x1d4bb...0x1d4bb, 0x1d4bd...0x1d4c3, 0x1d4c5...0x1d505, 0x1d507...0x1d50a, 0x1d50d...0x1d514, 0x1d516...0x1d51c, 0x1d51e...0x1d539, 0x1d53b...0x1d53e, 0x1d540...0x1d544, 0x1d546...0x1d546, 0x1d54a...0x1d550, 0x1d552...0x1d6a5, 0x1d6a8...0x1d6c0, 0x1d6c2...0x1d6da, 0x1d6dc...0x1d6fa, 0x1d6fc...0x1d714, 0x1d716...0x1d734, 0x1d736...0x1d74e, 0x1d750...0x1d76e, 0x1d770...0x1d788, 0x1d78a...0x1d7a8, 0x1d7aa...0x1d7c2, 0x1d7c4...0x1d7cb, 0x1e100...0x1e12c, 0x1e137...0x1e13d, 0x1e14e...0x1e14e, 0x1e2c0...0x1e2eb, 0x1e800...0x1e8c4, 0x1e900...0x1e943, 0x1e94b...0x1e94b, 0x1ee00...0x1ee03, 0x1ee05...0x1ee1f, 0x1ee21...0x1ee22, 0x1ee24...0x1ee24, 0x1ee27...0x1ee27, 0x1ee29...0x1ee32, 0x1ee34...0x1ee37, 0x1ee39...0x1ee39, 0x1ee3b...0x1ee3b, 0x1ee42...0x1ee42, 0x1ee47...0x1ee47, 0x1ee49...0x1ee49, 0x1ee4b...0x1ee4b, 0x1ee4d...0x1ee4f, 0x1ee51...0x1ee52, 0x1ee54...0x1ee54, 0x1ee57...0x1ee57, 0x1ee59...0x1ee59, 0x1ee5b...0x1ee5b, 0x1ee5d...0x1ee5d, 0x1ee5f...0x1ee5f, 0x1ee61...0x1ee62, 0x1ee64...0x1ee64, 0x1ee67...0x1ee6a, 0x1ee6c...0x1ee72, 0x1ee74...0x1ee77, 0x1ee79...0x1ee7c, 0x1ee7e...0x1ee7e, 0x1ee80...0x1ee89, 0x1ee8b...0x1ee9b, 0x1eea1...0x1eea3, 0x1eea5...0x1eea9, 0x1eeab...0x1eebb, 0x20000...0x2a6dd, 0x2a700...0x2b734, 0x2b740...0x2b81d, 0x2b820...0x2cea1, 0x2ceb0...0x2ebe0, 0x2f800...0x2fa1d, 0x30000...0x3134a => true, - else => false, - }, - }; - } - - pub inline fn isIdentifierPart(codepoint: i32) bool { - return switch (codepoint) { - 'A'...'Z', 'a'...'z', '0'...'9', '$', '_' => true, - else => switch (codepoint) { - 0x30...0x39, 0x41...0x5a, 0x5f...0x5f, 0x61...0x7a, 0xaa...0xaa, 0xb5...0xb5, 0xb7...0xb7, 0xba...0xba, 0xc0...0xd6, 0xd8...0xf6, 0xf8...0x2c1, 0x2c6...0x2d1, 0x2e0...0x2e4, 0x2ec...0x2ec, 0x2ee...0x2ee, 0x300...0x374, 0x376...0x377, 0x37a...0x37d, 0x37f...0x37f, 0x386...0x38a, 0x38c...0x38c, 0x38e...0x3a1, 0x3a3...0x3f5, 0x3f7...0x481, 0x483...0x487, 0x48a...0x52f, 0x531...0x556, 0x559...0x559, 0x560...0x588, 0x591...0x5bd, 0x5bf...0x5bf, 0x5c1...0x5c2, 0x5c4...0x5c5, 0x5c7...0x5c7, 0x5d0...0x5ea, 0x5ef...0x5f2, 0x610...0x61a, 0x620...0x669, 0x66e...0x6d3, 0x6d5...0x6dc, 0x6df...0x6e8, 0x6ea...0x6fc, 0x6ff...0x6ff, 0x710...0x74a, 0x74d...0x7b1, 0x7c0...0x7f5, 0x7fa...0x7fa, 0x7fd...0x7fd, 0x800...0x82d, 0x840...0x85b, 0x860...0x86a, 0x8a0...0x8b4, 0x8b6...0x8c7, 0x8d3...0x8e1, 0x8e3...0x963, 0x966...0x96f, 0x971...0x983, 0x985...0x98c, 0x98f...0x990, 0x993...0x9a8, 0x9aa...0x9b0, 0x9b2...0x9b2, 0x9b6...0x9b9, 0x9bc...0x9c4, 0x9c7...0x9c8, 0x9cb...0x9ce, 0x9d7...0x9d7, 0x9dc...0x9dd, 0x9df...0x9e3, 0x9e6...0x9f1, 0x9fc...0x9fc, 0x9fe...0x9fe, 0xa01...0xa03, 0xa05...0xa0a, 0xa0f...0xa10, 0xa13...0xa28, 0xa2a...0xa30, 0xa32...0xa33, 0xa35...0xa36, 0xa38...0xa39, 0xa3c...0xa3c, 0xa3e...0xa42, 0xa47...0xa48, 0xa4b...0xa4d, 0xa51...0xa51, 0xa59...0xa5c, 0xa5e...0xa5e, 0xa66...0xa75, 0xa81...0xa83, 0xa85...0xa8d, 0xa8f...0xa91, 0xa93...0xaa8, 0xaaa...0xab0, 0xab2...0xab3, 0xab5...0xab9, 0xabc...0xac5, 0xac7...0xac9, 0xacb...0xacd, 0xad0...0xad0, 0xae0...0xae3, 0xae6...0xaef, 0xaf9...0xaff, 0xb01...0xb03, 0xb05...0xb0c, 0xb0f...0xb10, 0xb13...0xb28, 0xb2a...0xb30, 0xb32...0xb33, 0xb35...0xb39, 0xb3c...0xb44, 0xb47...0xb48, 0xb4b...0xb4d, 0xb55...0xb57, 0xb5c...0xb5d, 0xb5f...0xb63, 0xb66...0xb6f, 0xb71...0xb71, 0xb82...0xb83, 0xb85...0xb8a, 0xb8e...0xb90, 0xb92...0xb95, 0xb99...0xb9a, 0xb9c...0xb9c, 0xb9e...0xb9f, 0xba3...0xba4, 0xba8...0xbaa, 0xbae...0xbb9, 0xbbe...0xbc2, 0xbc6...0xbc8, 0xbca...0xbcd, 0xbd0...0xbd0, 0xbd7...0xbd7, 0xbe6...0xbef, 0xc00...0xc0c, 0xc0e...0xc10, 0xc12...0xc28, 0xc2a...0xc39, 0xc3d...0xc44, 0xc46...0xc48, 0xc4a...0xc4d, 0xc55...0xc56, 0xc58...0xc5a, 0xc60...0xc63, 0xc66...0xc6f, 0xc80...0xc83, 0xc85...0xc8c, 0xc8e...0xc90, 0xc92...0xca8, 0xcaa...0xcb3, 0xcb5...0xcb9, 0xcbc...0xcc4, 0xcc6...0xcc8, 0xcca...0xccd, 0xcd5...0xcd6, 0xcde...0xcde, 0xce0...0xce3, 0xce6...0xcef, 0xcf1...0xcf2, 0xd00...0xd0c, 0xd0e...0xd10, 0xd12...0xd44, 0xd46...0xd48, 0xd4a...0xd4e, 0xd54...0xd57, 0xd5f...0xd63, 0xd66...0xd6f, 0xd7a...0xd7f, 0xd81...0xd83, 0xd85...0xd96, 0xd9a...0xdb1, 0xdb3...0xdbb, 0xdbd...0xdbd, 0xdc0...0xdc6, 0xdca...0xdca, 0xdcf...0xdd4, 0xdd6...0xdd6, 0xdd8...0xddf, 0xde6...0xdef, 0xdf2...0xdf3, 0xe01...0xe3a, 0xe40...0xe4e, 0xe50...0xe59, 0xe81...0xe82, 0xe84...0xe84, 0xe86...0xe8a, 0xe8c...0xea3, 0xea5...0xea5, 0xea7...0xebd, 0xec0...0xec4, 0xec6...0xec6, 0xec8...0xecd, 0xed0...0xed9, 0xedc...0xedf, 0xf00...0xf00, 0xf18...0xf19, 0xf20...0xf29, 0xf35...0xf35, 0xf37...0xf37, 0xf39...0xf39, 0xf3e...0xf47, 0xf49...0xf6c, 0xf71...0xf84, 0xf86...0xf97, 0xf99...0xfbc, 0xfc6...0xfc6, 0x1000...0x1049, 0x1050...0x109d, 0x10a0...0x10c5, 0x10c7...0x10c7, 0x10cd...0x10cd, 0x10d0...0x10fa, 0x10fc...0x1248, 0x124a...0x124d, 0x1250...0x1256, 0x1258...0x1258, 0x125a...0x125d, 0x1260...0x1288, 0x128a...0x128d, 0x1290...0x12b0, 0x12b2...0x12b5, 0x12b8...0x12be, 0x12c0...0x12c0, 0x12c2...0x12c5, 0x12c8...0x12d6, 0x12d8...0x1310, 0x1312...0x1315, 0x1318...0x135a, 0x135d...0x135f, 0x1369...0x1371, 0x1380...0x138f, 0x13a0...0x13f5, 0x13f8...0x13fd, 0x1401...0x166c, 0x166f...0x167f, 0x1681...0x169a, 0x16a0...0x16ea, 0x16ee...0x16f8, 0x1700...0x170c, 0x170e...0x1714, 0x1720...0x1734, 0x1740...0x1753, 0x1760...0x176c, 0x176e...0x1770, 0x1772...0x1773, 0x1780...0x17d3, 0x17d7...0x17d7, 0x17dc...0x17dd, 0x17e0...0x17e9, 0x180b...0x180d, 0x1810...0x1819, 0x1820...0x1878, 0x1880...0x18aa, 0x18b0...0x18f5, 0x1900...0x191e, 0x1920...0x192b, 0x1930...0x193b, 0x1946...0x196d, 0x1970...0x1974, 0x1980...0x19ab, 0x19b0...0x19c9, 0x19d0...0x19da, 0x1a00...0x1a1b, 0x1a20...0x1a5e, 0x1a60...0x1a7c, 0x1a7f...0x1a89, 0x1a90...0x1a99, 0x1aa7...0x1aa7, 0x1ab0...0x1abd, 0x1abf...0x1ac0, 0x1b00...0x1b4b, 0x1b50...0x1b59, 0x1b6b...0x1b73, 0x1b80...0x1bf3, 0x1c00...0x1c37, 0x1c40...0x1c49, 0x1c4d...0x1c7d, 0x1c80...0x1c88, 0x1c90...0x1cba, 0x1cbd...0x1cbf, 0x1cd0...0x1cd2, 0x1cd4...0x1cfa, 0x1d00...0x1df9, 0x1dfb...0x1f15, 0x1f18...0x1f1d, 0x1f20...0x1f45, 0x1f48...0x1f4d, 0x1f50...0x1f57, 0x1f59...0x1f59, 0x1f5b...0x1f5b, 0x1f5d...0x1f5d, 0x1f5f...0x1f7d, 0x1f80...0x1fb4, 0x1fb6...0x1fbc, 0x1fbe...0x1fbe, 0x1fc2...0x1fc4, 0x1fc6...0x1fcc, 0x1fd0...0x1fd3, 0x1fd6...0x1fdb, 0x1fe0...0x1fec, 0x1ff2...0x1ff4, 0x1ff6...0x1ffc, 0x203f...0x2040, 0x2054...0x2054, 0x2071...0x2071, 0x207f...0x207f, 0x2090...0x209c, 0x20d0...0x20dc, 0x20e1...0x20e1, 0x20e5...0x20f0, 0x2102...0x2102, 0x2107...0x2107, 0x210a...0x2113, 0x2115...0x2115, 0x2118...0x211d, 0x2124...0x2124, 0x2126...0x2126, 0x2128...0x2128, 0x212a...0x2139, 0x213c...0x213f, 0x2145...0x2149, 0x214e...0x214e, 0x2160...0x2188, 0x2c00...0x2c2e, 0x2c30...0x2c5e, 0x2c60...0x2ce4, 0x2ceb...0x2cf3, 0x2d00...0x2d25, 0x2d27...0x2d27, 0x2d2d...0x2d2d, 0x2d30...0x2d67, 0x2d6f...0x2d6f, 0x2d7f...0x2d96, 0x2da0...0x2da6, 0x2da8...0x2dae, 0x2db0...0x2db6, 0x2db8...0x2dbe, 0x2dc0...0x2dc6, 0x2dc8...0x2dce, 0x2dd0...0x2dd6, 0x2dd8...0x2dde, 0x2de0...0x2dff, 0x3005...0x3007, 0x3021...0x302f, 0x3031...0x3035, 0x3038...0x303c, 0x3041...0x3096, 0x3099...0x309f, 0x30a1...0x30ff, 0x3105...0x312f, 0x3131...0x318e, 0x31a0...0x31bf, 0x31f0...0x31ff, 0x3400...0x4dbf, 0x4e00...0x9ffc, 0xa000...0xa48c, 0xa4d0...0xa4fd, 0xa500...0xa60c, 0xa610...0xa62b, 0xa640...0xa66f, 0xa674...0xa67d, 0xa67f...0xa6f1, 0xa717...0xa71f, 0xa722...0xa788, 0xa78b...0xa7bf, 0xa7c2...0xa7ca, 0xa7f5...0xa827, 0xa82c...0xa82c, 0xa840...0xa873, 0xa880...0xa8c5, 0xa8d0...0xa8d9, 0xa8e0...0xa8f7, 0xa8fb...0xa8fb, 0xa8fd...0xa92d, 0xa930...0xa953, 0xa960...0xa97c, 0xa980...0xa9c0, 0xa9cf...0xa9d9, 0xa9e0...0xa9fe, 0xaa00...0xaa36, 0xaa40...0xaa4d, 0xaa50...0xaa59, 0xaa60...0xaa76, 0xaa7a...0xaac2, 0xaadb...0xaadd, 0xaae0...0xaaef, 0xaaf2...0xaaf6, 0xab01...0xab06, 0xab09...0xab0e, 0xab11...0xab16, 0xab20...0xab26, 0xab28...0xab2e, 0xab30...0xab5a, 0xab5c...0xab69, 0xab70...0xabea, 0xabec...0xabed, 0xabf0...0xabf9, 0xac00...0xd7a3, 0xd7b0...0xd7c6, 0xd7cb...0xd7fb, 0xf900...0xfa6d, 0xfa70...0xfad9, 0xfb00...0xfb06, 0xfb13...0xfb17, 0xfb1d...0xfb28, 0xfb2a...0xfb36, 0xfb38...0xfb3c, 0xfb3e...0xfb3e, 0xfb40...0xfb41, 0xfb43...0xfb44, 0xfb46...0xfbb1, 0xfbd3...0xfd3d, 0xfd50...0xfd8f, 0xfd92...0xfdc7, 0xfdf0...0xfdfb, 0xfe00...0xfe0f, 0xfe20...0xfe2f, 0xfe33...0xfe34, 0xfe4d...0xfe4f, 0xfe70...0xfe74, 0xfe76...0xfefc, 0xff10...0xff19, 0xff21...0xff3a, 0xff3f...0xff3f, 0xff41...0xff5a, 0xff65...0xffbe, 0xffc2...0xffc7, 0xffca...0xffcf, 0xffd2...0xffd7, 0xffda...0xffdc, 0x10000...0x1000b, 0x1000d...0x10026, 0x10028...0x1003a, 0x1003c...0x1003d, 0x1003f...0x1004d, 0x10050...0x1005d, 0x10080...0x100fa, 0x10140...0x10174, 0x101fd...0x101fd, 0x10280...0x1029c, 0x102a0...0x102d0, 0x102e0...0x102e0, 0x10300...0x1031f, 0x1032d...0x1034a, 0x10350...0x1037a, 0x10380...0x1039d, 0x103a0...0x103c3, 0x103c8...0x103cf, 0x103d1...0x103d5, 0x10400...0x1049d, 0x104a0...0x104a9, 0x104b0...0x104d3, 0x104d8...0x104fb, 0x10500...0x10527, 0x10530...0x10563, 0x10600...0x10736, 0x10740...0x10755, 0x10760...0x10767, 0x10800...0x10805, 0x10808...0x10808, 0x1080a...0x10835, 0x10837...0x10838, 0x1083c...0x1083c, 0x1083f...0x10855, 0x10860...0x10876, 0x10880...0x1089e, 0x108e0...0x108f2, 0x108f4...0x108f5, 0x10900...0x10915, 0x10920...0x10939, 0x10980...0x109b7, 0x109be...0x109bf, 0x10a00...0x10a03, 0x10a05...0x10a06, 0x10a0c...0x10a13, 0x10a15...0x10a17, 0x10a19...0x10a35, 0x10a38...0x10a3a, 0x10a3f...0x10a3f, 0x10a60...0x10a7c, 0x10a80...0x10a9c, 0x10ac0...0x10ac7, 0x10ac9...0x10ae6, 0x10b00...0x10b35, 0x10b40...0x10b55, 0x10b60...0x10b72, 0x10b80...0x10b91, 0x10c00...0x10c48, 0x10c80...0x10cb2, 0x10cc0...0x10cf2, 0x10d00...0x10d27, 0x10d30...0x10d39, 0x10e80...0x10ea9, 0x10eab...0x10eac, 0x10eb0...0x10eb1, 0x10f00...0x10f1c, 0x10f27...0x10f27, 0x10f30...0x10f50, 0x10fb0...0x10fc4, 0x10fe0...0x10ff6, 0x11000...0x11046, 0x11066...0x1106f, 0x1107f...0x110ba, 0x110d0...0x110e8, 0x110f0...0x110f9, 0x11100...0x11134, 0x11136...0x1113f, 0x11144...0x11147, 0x11150...0x11173, 0x11176...0x11176, 0x11180...0x111c4, 0x111c9...0x111cc, 0x111ce...0x111da, 0x111dc...0x111dc, 0x11200...0x11211, 0x11213...0x11237, 0x1123e...0x1123e, 0x11280...0x11286, 0x11288...0x11288, 0x1128a...0x1128d, 0x1128f...0x1129d, 0x1129f...0x112a8, 0x112b0...0x112ea, 0x112f0...0x112f9, 0x11300...0x11303, 0x11305...0x1130c, 0x1130f...0x11310, 0x11313...0x11328, 0x1132a...0x11330, 0x11332...0x11333, 0x11335...0x11339, 0x1133b...0x11344, 0x11347...0x11348, 0x1134b...0x1134d, 0x11350...0x11350, 0x11357...0x11357, 0x1135d...0x11363, 0x11366...0x1136c, 0x11370...0x11374, 0x11400...0x1144a, 0x11450...0x11459, 0x1145e...0x11461, 0x11480...0x114c5, 0x114c7...0x114c7, 0x114d0...0x114d9, 0x11580...0x115b5, 0x115b8...0x115c0, 0x115d8...0x115dd, 0x11600...0x11640, 0x11644...0x11644, 0x11650...0x11659, 0x11680...0x116b8, 0x116c0...0x116c9, 0x11700...0x1171a, 0x1171d...0x1172b, 0x11730...0x11739, 0x11800...0x1183a, 0x118a0...0x118e9, 0x118ff...0x11906, 0x11909...0x11909, 0x1190c...0x11913, 0x11915...0x11916, 0x11918...0x11935, 0x11937...0x11938, 0x1193b...0x11943, 0x11950...0x11959, 0x119a0...0x119a7, 0x119aa...0x119d7, 0x119da...0x119e1, 0x119e3...0x119e4, 0x11a00...0x11a3e, 0x11a47...0x11a47, 0x11a50...0x11a99, 0x11a9d...0x11a9d, 0x11ac0...0x11af8, 0x11c00...0x11c08, 0x11c0a...0x11c36, 0x11c38...0x11c40, 0x11c50...0x11c59, 0x11c72...0x11c8f, 0x11c92...0x11ca7, 0x11ca9...0x11cb6, 0x11d00...0x11d06, 0x11d08...0x11d09, 0x11d0b...0x11d36, 0x11d3a...0x11d3a, 0x11d3c...0x11d3d, 0x11d3f...0x11d47, 0x11d50...0x11d59, 0x11d60...0x11d65, 0x11d67...0x11d68, 0x11d6a...0x11d8e, 0x11d90...0x11d91, 0x11d93...0x11d98, 0x11da0...0x11da9, 0x11ee0...0x11ef6, 0x11fb0...0x11fb0, 0x12000...0x12399, 0x12400...0x1246e, 0x12480...0x12543, 0x13000...0x1342e, 0x14400...0x14646, 0x16800...0x16a38, 0x16a40...0x16a5e, 0x16a60...0x16a69, 0x16ad0...0x16aed, 0x16af0...0x16af4, 0x16b00...0x16b36, 0x16b40...0x16b43, 0x16b50...0x16b59, 0x16b63...0x16b77, 0x16b7d...0x16b8f, 0x16e40...0x16e7f, 0x16f00...0x16f4a, 0x16f4f...0x16f87, 0x16f8f...0x16f9f, 0x16fe0...0x16fe1, 0x16fe3...0x16fe4, 0x16ff0...0x16ff1, 0x17000...0x187f7, 0x18800...0x18cd5, 0x18d00...0x18d08, 0x1b000...0x1b11e, 0x1b150...0x1b152, 0x1b164...0x1b167, 0x1b170...0x1b2fb, 0x1bc00...0x1bc6a, 0x1bc70...0x1bc7c, 0x1bc80...0x1bc88, 0x1bc90...0x1bc99, 0x1bc9d...0x1bc9e, 0x1d165...0x1d169, 0x1d16d...0x1d172, 0x1d17b...0x1d182, 0x1d185...0x1d18b, 0x1d1aa...0x1d1ad, 0x1d242...0x1d244, 0x1d400...0x1d454, 0x1d456...0x1d49c, 0x1d49e...0x1d49f, 0x1d4a2...0x1d4a2, 0x1d4a5...0x1d4a6, 0x1d4a9...0x1d4ac, 0x1d4ae...0x1d4b9, 0x1d4bb...0x1d4bb, 0x1d4bd...0x1d4c3, 0x1d4c5...0x1d505, 0x1d507...0x1d50a, 0x1d50d...0x1d514, 0x1d516...0x1d51c, 0x1d51e...0x1d539, 0x1d53b...0x1d53e, 0x1d540...0x1d544, 0x1d546...0x1d546, 0x1d54a...0x1d550, 0x1d552...0x1d6a5, 0x1d6a8...0x1d6c0, 0x1d6c2...0x1d6da, 0x1d6dc...0x1d6fa, 0x1d6fc...0x1d714, 0x1d716...0x1d734, 0x1d736...0x1d74e, 0x1d750...0x1d76e, 0x1d770...0x1d788, 0x1d78a...0x1d7a8, 0x1d7aa...0x1d7c2, 0x1d7c4...0x1d7cb, 0x1d7ce...0x1d7ff, 0x1da00...0x1da36, 0x1da3b...0x1da6c, 0x1da75...0x1da75, 0x1da84...0x1da84, 0x1da9b...0x1da9f, 0x1daa1...0x1daaf, 0x1e000...0x1e006, 0x1e008...0x1e018, 0x1e01b...0x1e021, 0x1e023...0x1e024, 0x1e026...0x1e02a, 0x1e100...0x1e12c, 0x1e130...0x1e13d, 0x1e140...0x1e149, 0x1e14e...0x1e14e, 0x1e2c0...0x1e2f9, 0x1e800...0x1e8c4, 0x1e8d0...0x1e8d6, 0x1e900...0x1e94b, 0x1e950...0x1e959, 0x1ee00...0x1ee03, 0x1ee05...0x1ee1f, 0x1ee21...0x1ee22, 0x1ee24...0x1ee24, 0x1ee27...0x1ee27, 0x1ee29...0x1ee32, 0x1ee34...0x1ee37, 0x1ee39...0x1ee39, 0x1ee3b...0x1ee3b, 0x1ee42...0x1ee42, 0x1ee47...0x1ee47, 0x1ee49...0x1ee49, 0x1ee4b...0x1ee4b, 0x1ee4d...0x1ee4f, 0x1ee51...0x1ee52, 0x1ee54...0x1ee54, 0x1ee57...0x1ee57, 0x1ee59...0x1ee59, 0x1ee5b...0x1ee5b, 0x1ee5d...0x1ee5d, 0x1ee5f...0x1ee5f, 0x1ee61...0x1ee62, 0x1ee64...0x1ee64, 0x1ee67...0x1ee6a, 0x1ee6c...0x1ee72, 0x1ee74...0x1ee77, 0x1ee79...0x1ee7c, 0x1ee7e...0x1ee7e, 0x1ee80...0x1ee89, 0x1ee8b...0x1ee9b, 0x1eea1...0x1eea3, 0x1eea5...0x1eea9, 0x1eeab...0x1eebb, 0x1fbf0...0x1fbf9, 0x20000...0x2a6dd, 0x2a700...0x2b734, 0x2b740...0x2b81d, 0x2b820...0x2cea1, 0x2ceb0...0x2ebe0, 0x2f800...0x2fa1d, 0x30000...0x3134a, 0xe0100...0xe01ef => true, - else => false, - }, - }; - } +/// isIDStartESNext checks if a codepoint is valid in the isIDStartESNext category +pub fn isIDStartESNext(cp: u21) bool { + const high = cp >> 8; + const low = cp & 0xFF; + const stage2_idx = idStartESNext.stage1[high]; + const bit_pos = stage2_idx + low; + const u64_idx = bit_pos >> 6; + const bit_idx = @as(u6, @intCast(bit_pos & 63)); + return (idStartESNext.stage2[u64_idx] & (@as(u64, 1) << bit_idx)) != 0; +} +const idStartESNext = struct { + pub const stage1 = [_]u16{ 0, 256, 512, 768, 1024, 1280, 1536, 1792, 2048, 2304, 2560, 2816, 3072, 3328, 3584, 3840, 4096, 256, 4352, 4608, 4864, 256, 5120, 5376, 5632, 5888, 6144, 6400, 6656, 6912, 256, 7168, 7424, 7680, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 8192, 8448, 7936, 7936, 8704, 8960, 7936, 7936, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 6912, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 9216, 256, 9472, 9728, 9984, 10240, 10496, 10752, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 11008, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 256, 11264, 11520, 256, 11776, 12032, 12288, 12544, 12800, 13056, 13312, 13568, 13824, 256, 14080, 14336, 14592, 14848, 15104, 15360, 15616, 15872, 16128, 16384, 16640, 16896, 17152, 17408, 17664, 17920, 18176, 18432, 18688, 18944, 7936, 19200, 19456, 19712, 19968, 256, 256, 256, 20224, 20480, 20736, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 20992, 256, 256, 256, 256, 21248, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 256, 256, 21504, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 256, 256, 21760, 22016, 7936, 7936, 22272, 22528, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 22784, 256, 256, 256, 256, 23040, 23296, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 23552, 256, 23808, 24064, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 24320, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 24576, 24832, 25088, 25344, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 25600, 25856, 26112, 26368, 7936, 26624, 7936, 7936, 26880, 27136, 27392, 7936, 7936, 7936, 7936, 27648, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 27904, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 28160, 28416, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 28672, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 28928, 256, 256, 29184, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 256, 256, 29440, 7936, 7936, 7936, 7936, 7936, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 29696, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 29952, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936, 7936 }; + pub const stage2 = [_]u64{ 0, 576460743847706622, 297241973452963840, 18410715276682199039, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 88094074470339, 0, 13609596598936928256, 18446744056529672000, 18428729675200069631, 18446744073709551615, 18446744073709551615, 18446744073709550595, 18446744073709551615, 18446462598732840959, 18446744069456527359, 511, 2119858418286592, 18446744069414584320, 18446392229988665343, 18446744073709551615, 11241196188469297151, 281474976514048, 18446744073709543424, 563224831328255, 301749971126844416, 1168302407679, 18446471390564450303, 18446744069414616831, 1023, 2594073385365405680, 18446181140919287808, 2577745637692514273, 1153765945374687232, 247132830528276448, 7881300924956672, 2589004636761079776, 144115200960823296, 2589004636760940512, 562965791113216, 288167810662516712, 65536, 2594071186342010848, 13539213312, 2589567586714640353, 1688864355778560, 2882303761516978160, 18158513712597581824, 3457638613854978016, 127, 3940649673949182, 127, 2309783315290257366, 4026531935, 1, 35184372088575, 7936, 0, 9223380832947798015, 18438229877581611008, 18446744069414600707, 17870283321406070975, 18446744073709551615, 18446744070446333439, 9168765891372858879, 18446744073701162813, 18446744073696837631, 134217727, 18446744069414649855, 4557642822898941951, 18446744073709551614, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446638520593285119, 18446744069548802046, 144053615424700415, 1125897759621119, 527761286627327, 4503599627370495, 276824064, 18446744069414584320, 144115188075855871, 18446469195802607615, 18014398509481983, 2147483647, 8796093022142464, 18446480190918885375, 1023, 18446744069422972927, 2097151, 549755813888, 0, 4503599627370464, 8160, 18158724812380307448, 274877906943, 68719476735, 4611686018360336384, 16717361816799216127, 319718190147960832, 18446744073709551615, 18446744073709551615, 18446744073709551615, 0, 18446744070475743231, 4611686017001275199, 6908521828386340863, 2295745090394464220, 0, 9223934986808197120, 536805376, 0, 17582049991377026180, 18446744069414601696, 511, 0, 0, 0, 0, 0, 18446744073709551615, 18446744073709551615, 18446744073709551615, 3509778554814463, 18446498607738650623, 141836999983103, 9187201948305063935, 2139062143, 2251241253188403424, 18446744073709551614, 18446744069288755199, 17870283321406128127, 18446462598732840928, 18446744073709551615, 18446744069414617087, 18446462598732840960, 18446744073709551615, 18446744073709551615, 8191, 4611686018427322368, 13198434443263, 9223512774343131135, 18446744070488326143, 281474976710655, 18446744060816261120, 18446744073709551615, 18446744073709550079, 18445618173868443647, 34359736251, 4503599627370495, 4503599627370492, 7564921474075590656, 18446462873610746880, 2305843004918726783, 2251799813685232, 8935422993945886720, 2199023255551, 14159317224157876215, 4495436853045886975, 7890092085477381, 18446602782178705022, 18446466996645134335, 18446744073709551615, 34359738367, 18446744073709551615, 18446744073709551615, 18446462667452317695, 1152921504606845055, 18446744073709551615, 18446532967477018623, 18446744073709551615, 67108863, 6881498030004502655, 18446744073709551579, 1125899906842623, 18446744073709027328, 4611686018427387903, 18446744073709486080, 18446744073709355007, 1152640029630136575, 0, 18437455399478099968, 18446744073709551615, 2305843009213693951, 576460743713488896, 18446743798965862398, 9223372036854775807, 486341884, 13258596753222922239, 1073692671, 18446744073709551615, 576460752303423487, 0, 9007199254740991, 0, 0, 0, 0, 18446744069951455231, 131071, 18446708893632430079, 18014398509418495, 18446744070488326143, 4128527, 18446744073709551615, 18446744073709551615, 18446462599806582783, 1152921504591118335, 18446463698244468735, 17870001915148894207, 2016486715970549759, 0, 36028797018963967, 1095220854783, 575897802350002111, 0, 10502394331027995967, 36028792728190975, 2147483647, 15762594400829440, 288230371860938751, 0, 13907115649320091647, 0, 18014398491590657, 2305843004918726656, 536870911, 137438953215, 18014398509481983, 2251795522912255, 262143, 0, 18446744073709551615, 511, 2251799813685247, 2251799813685247, 68719476735, 0, 0, 0, 0, 0, 848822976643071, 0, 18446463149025525759, 18446462598732841023, 18446462598732840963, 36028792723996703, 72057594037927928, 10696049115004928, 281474976710648, 2199023190016, 549755813880, 20266198323101840, 2251799813685240, 335544350, 9223389629040558079, 1, 18446464796682337663, 2147483647, 2589004636760940512, 16643063808, 0, 0, 9007199254740991, 15032387456, 281474976710655, 176, 0, 0, 140737488355327, 251658240, 281474976710655, 16, 72066390130950143, 0, 134217727, 127, 0, 0, 17592186044415, 0, 18446744069414584320, 9223372041149743103, 9223653511822045823, 2, 18446740770879700992, 42949804031, 290482175965394945, 18446744073441181696, 18446462599269712895, 144115188075855871, 140737488354815, 18445618173802708993, 65535, 0, 562949953420159, 18446741595513421888, 16778239, 0, 0, 0, 0, 2251795518717952, 4503599627239412, 0, 281474976710656, 0, 18446744073709551615, 18446744073709551615, 67108863, 0, 18446744073709551615, 140737488355327, 18446744073709551615, 18446744073709551615, 18446744073709551615, 15, 0, 0, 0, 0, 18446744073709486080, 562949953421311, 281474976710655, 126, 0, 0, 18446744073709551615, 127, 0, 0, 144115188075855871, 18446462600880324607, 9223372036854775807, 70368744112128, 281474976710655, 16212958624174047247, 65535, 0, 0, 18446744073709551615, 0, 0, 18446744073709551615, 67583, 4294443008, 47244640256, 18446744073709551615, 18446744073709551615, 18446744073709551615, 72057594037927935, 18446744073709551615, 18446744073709551615, 18446744073709551615, 4194303, 511, 0, 0, 0, 0, 0, 0, 8065665457643847680, 1125934266580991, 18446463629527547904, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 1152921504606846975, 18446744073709551615, 2305570330330005503, 67043839, 0, 18446744073709551615, 18446744073707454463, 17005555242810474495, 18446744073709551599, 8935141660164089791, 18446744073709419615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446743249075830783, 17870283321271910397, 18437736874452713471, 18446603336221163519, 18446741874686295551, 4087, 8660801552383, 0, 0, 0, 18446462598732840960, 70368744177663, 0, 0, 4575692405780512767, 16384, 0, 0, 0, 0, 70368744112128, 17592186044415, 0, 0, 0, 17592185978880, 0, 0, 0, 9223213153129594880, 18446744073709551615, 18446744073709551615, 18446744073709551615, 31, 18446744073709551615, 2063, 0, 0, 790380184120328175, 6843210385291930244, 1152917029519358975, 0, 18446744073709551615, 18446744073709551615, 18446744073709551615, 4294967295, 288230376151711743, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744070488326143, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446462615912710143, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446462607322775551, 18446744073709551615, 1073741823, 0, 0, 1073741823, 0, 0, 0, 18446744073709551615, 18446744073709488127, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 281474976710655, 0 }; }; -// // ----- The benchmark ------ - -// const std = @import("std"); - -// const part_codepoints_slice: []const i32 = &start_codepoints; -// const start_codepoints_slice: []const i32 = &part_codepoints; - -// pub const HashTable = struct { -// var starts: std.AutoHashMap(i32, void) = undefined; -// var parts: std.AutoHashMap(i32, void) = undefined; - -// pub fn isIdentifierStart(codepoint: i32) bool { -// if (codepoint > 255) return starts.contains(codepoint); -// return switch (codepoint) { -// 'A'...'Z', 'a'...'z', '$', '_' => true, -// else => false, -// }; -// } - -// pub fn isIdentifierPart(codepoint: i32) bool { -// if (codepoint > 255) return parts.contains(codepoint); -// return switch (codepoint) { -// 'A'...'Z', 'a'...'z', '0'...'9', '$', '_' => true, -// else => false, -// }; -// } - -// pub fn init(allocator: std.mem.Allocator) !void { -// starts = std.AutoHashMap(i32, void).init(allocator); -// parts = std.AutoHashMap(i32, void).init(allocator); - -// var i: i32 = 0; -// var j: i32 = 0; - -// while (i < start_codepoints.len) : (i += 2) { -// j = start_codepoints[i]; -// while (j <= start_codepoints[i + 1]) : (j += 1) { -// try starts.put(j, {}); -// } -// } -// i = 0; -// while (i < part_codepoints.len) : (i += 2) { -// j = part_codepoints[i]; -// while (j <= part_codepoints[i + 1]) : (j += 1) { -// try parts.put(j, {}); -// } -// } -// } -// }; - -// pub const BinarySearch = struct { - -// // "lookupInUnicodeMap" in TypeScript -// // esbuild does something similar -// fn search(comptime map: []const i32, code: i32) bool { -// // Bail out quickly if it couldn't possibly be in the map. -// if (code < map[0]) { -// return false; -// } - -// // Perform binary search in one of the Unicode range maps -// var lo: i32 = 0; -// var hi: i32 = map.len; -// var mid: i32 = undefined; - -// while (lo + 1 < hi) { -// mid = lo + (hi - lo) / 2; -// // mid has to be even to catch a range's beginning -// mid -= mid % 2; -// if (map[mid] <= code and code <= map[mid + 1]) { -// return true; -// } -// if (code < map[mid]) { -// hi = mid; -// } else { -// lo = mid + 2; -// } -// } - -// return false; -// } - -// // https://source.chromium.org/chromium/v8/v8.git/+/master:src/strings/char-predicates-inl.h;l=133 -// pub fn isIdentifierStart(codepoint: i32) bool { -// if (codepoint > 255) return search(start_codepoints_slice, codepoint); -// return switch (codepoint) { -// 'A'...'Z', 'a'...'z', '$', '_' => true, -// else => false, -// }; -// } - -// pub fn isIdentifierPart(codepoint: i32) bool { -// if (codepoint > 255) return search(part_codepoints_slice, codepoint); -// return switch (codepoint) { -// 'A'...'Z', 'a'...'z', '0'...'9', '$', '_' => true, -// else => false, -// }; -// } -// }; - -// const unicode_text: []const u8 = -// \\ -// \\_a["" + "constructor"] = 133 /* ConstructorKeyword */, -// \\_a.debugger = 87 /* DebuggerKeyword */, -// \\_a.declare = 134 /* DeclareKeyword */, -// \\_a.default = 88 /* DefaultKeyword */, -// \\_a.delete = 89 /* DeleteKeyword */, -// \\_a.do = 90 /* DoKeyword */, -// \\_a.else = 91 /* ElseKeyword */, -// \\_a.enum = 92 /* EnumKeyword */, -// \\_a.export = 93 /* ExportKeyword */, -// \\_a.extends = 94 /* ExtendsKeyword */, -// \\_a.false = 95 /* FalseKeyword */, -// \\_a.finally = 96 /* FinallyKeyword */, -// \\_a.for = 97 /* ForKeyword */, -// \\_a.from = 154 /* FromKeyword */, -// \\_a.function = 98 /* FunctionKeyword */, -// \\_a.get = 135 /* GetKeyword */, -// \\_a.if = 99 /* IfKeyword */, -// \\_a.implements = 117 /* ImplementsKeyword */, -// \\_a.import = 100 /* ImportKeyword */, -// \\_a.in = 101 /* InKeyword */, -// \\_a.infer = 136 /* InferKeyword */, -// \\_a.instanceof = 102 /* InstanceOfKeyword */, -// \\_a.interface = 118 /* InterfaceKeyword */, -// \\_a.intrinsic = 137 /* IntrinsicKeyword */, -// \\_a.is = 138 /* IsKeyword */, -// \\_a.keyof = 139 /* KeyOfKeyword */, -// \\_a.let = 119 /* LetKeyword */, -// \\_a.module = 140 /* ModuleKeyword */, -// \\_a.namespace = 141 /* NamespaceKeyword */, -// \\_a.never = 142 /* NeverKeyword */, -// \\_a.new = 103 /* NewKeyword */, -// \\_a.null = 104 /* NullKeyword */, -// \\_a.number = 145 /* NumberKeyword */, -// \\_a.object = 146 /* ObjectKeyword */, -// \\_a.package = 120 /* PackageKeyword */, -// \\_a.private = 121 /* PrivateKeyword */, -// \\_a.protected = 122 /* ProtectedKeyword */, -// \\_a.public = 123 /* PublicKeyword */, -// \\_a.override = 157 /* OverrideKeyword */, -// \\_a.readonly = 143 /* ReadonlyKeyword */, -// \\_a.require = 144 /* RequireKeyword */, -// \\_a.global = 155 /* GlobalKeyword */, -// \\_a.return = 105 /* ReturnKeyword */, -// \\_a.set = 147 /* SetKeyword */, -// \\_a.static = 124 /* StaticKeyword */, -// \\_a.string = 148 /* StringKeyword */, -// \\_a.super = 106 /* SuperKeyword */, -// \\_a.switch = 107 /* SwitchKeyword */, -// \\_a.symbol = 149 /* SymbolKeyword */, -// \\_a.this = 108 /* ThisKeyword */, -// \\_a.throw = 109 /* ThrowKeyword */, -// \\_a.true = 110 /* TrueKeyword */, -// \\_a.try = 111 /* TryKeyword */, -// \\_a.type = 150 /* TypeKeyword */, -// \\_a.typeof = 112 /* TypeOfKeyword */, -// \\_a.undefined = 151 /* UndefinedKeyword */, -// \\_a.unique = 152 /* UniqueKeyword */, -// \\_a.unknown = 153 /* UnknownKeyword */, -// \\_a.var = 113 /* VarKeyword */, -// \\_a.void = 114 /* VoidKeyword */, -// \\_a.while = 115 /* WhileKeyword */, -// \\_a.with = 116 /* WithKeyword */, -// \\_a.yield = 125 /* YieldKeyword */, -// \\_a.async = 130 /* AsyncKeyword */, -// \\_a.await = 131 /* AwaitKeyword */, -// \\_a.of = 158 /* OfKeyword */, -// \\_a); -// \\var textToKeyword = new ts.Map(ts.getEntries(ts.textToKeywordObj)); -// \\var textToToken = new ts.Map(ts.getEntries(__assign(__assign({}, ts.textToKeywordObj), { "{": 18 /* OpenBraceToken */, "}": 19 /* CloseBraceToken */, "(": 20 /* OpenParenToken */, ")": 21 /* CloseParenToken */, "[": 22 /* OpenBracketToken */, "]": 23 /* CloseBracketToken */, ".": 24 /* DotToken */, "...": 25 /* DotDotDotToken */, ";": 26 /* SemicolonToken */, ",": 27 /* CommaToken */, "<": 29 /* LessThanToken */, ">": 31 /* GreaterThanToken */, "<=": 32 /* LessThanEqualsToken */, ">=": 33 /* GreaterThanEqualsToken */, "==": 34 /* EqualsEqualsToken */, "!=": 35 /* ExclamationEqualsToken */, "===": 36 /* EqualsEqualsEqualsToken */, "!==": 37 /* ExclamationEqualsEqualsToken */, "=>": 38 /* EqualsGreaterThanToken */, "+": 39 /* PlusToken */, "-": 40 /* MinusToken */, "**": 42 /* AsteriskAsteriskToken */, "*": 41 /* AsteriskToken */, "/": 43 /* SlashToken */, "%": 44 /* PercentToken */, "++": 45 /* PlusPlusToken */, "--": 46 /* MinusMinusToken */, "<<": 47 /* LessThanLessThanToken */, ">": 48 /* GreaterThanGreaterThanToken */, ">>>": 49 /* GreaterThanGreaterThanGreaterThanToken */, "&": 50 /* AmpersandToken */, "|": 51 /* BarToken */, "^": 52 /* CaretToken */, "!": 53 /* ExclamationToken */, "~": 54 /* TildeToken */, "&&": 55 /* AmpersandAmpersandToken */, "||": 56 /* BarBarToken */, "?": 57 /* QuestionToken */, "??": 60 /* QuestionQuestionToken */, "?.": 28 /* QuestionDotToken */, ":": 58 /* ColonToken */, "=": 63 /* EqualsToken */, "+=": 64 /* PlusEqualsToken */, "-=": 65 /* MinusEqualsToken */, "*=": 66 /* AsteriskEqualsToken */, "**=": 67 /* AsteriskAsteriskEqualsToken */, "/=": 68 /* SlashEqualsToken */, "%=": 69 /* PercentEqualsToken */, "<<=": 70 /* LessThanLessThanEqualsToken */, ">>=": 71 /* GreaterThanGreaterThanEqualsToken */, ">>>=": 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */, "&=": 73 /* AmpersandEqualsToken */, "|=": 74 /* BarEqualsToken */, "^=": 78 /* CaretEqualsToken */, "||=": 75 /* BarBarEqualsToken */, "&&=": 76 /* AmpersandAmpersandEqualsToken */, "??=": 77 /* QuestionQuestionEqualsToken */, "@": 59 /* AtToken */, "#": 62 /* HashToken */, "`": 61 /* BacktickToken */ }))); -// \\/* -// \\As per ECMAScript Language Specification 3th Edition, Section 7.6: Identifiers -// \\IdentifierStart :: -// \\Can contain Unicode 3.0.0 categories: -// \\Uppercase letter (Lu), -// \\Lowercase letter (Ll), -// \\Titlecase letter (Lt), -// \\Modifier letter (Lm), -// \\Other letter (Lo), or -// \\Letter number (Nl). -// \\IdentifierPart :: = -// \\Can contain IdentifierStart + Unicode 3.0.0 categories: -// \\Non-spacing mark (Mn), -// \\Combining spacing mark (Mc), -// \\Decimal number (Nd), or -// \\Connector punctuation (Pc). -// \\ -// \\Codepoint ranges for ES3 Identifiers are extracted from the Unicode 3.0.0 specification at: -// \\http://www.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.txt -// \\*/ -// \\var unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; -// \\var unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; -// \\/* -// \\As per ECMAScript Language Specification 5th Edition, Section 7.6: ISyntaxToken Names and Identifiers -// \\IdentifierStart :: -// \\Can contain Unicode 6.2 categories: -// \\Uppercase letter (Lu), -// \\Lowercase letter (Ll), -// \\Titlecase letter (Lt), -// \\Modifier letter (Lm), -// \\Other letter (Lo), or -// \\Letter number (Nl). -// \\IdentifierPart ::㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ -// \\Can contain IdentifierStart + Unicode 6.2 categories: -// \\Non-spacing mark (Mn), -// \\Combining spacing mark (Mc), -// \\Decimal number (Nd), -// \\Connector punctuation (Pc), -// \\, or -// \\. -// \\ -// \\Codepoint ranges for ES5 Identifiers are extracted from the Unicode 6.2 specification at: -// \\http://www.unicode.org/Public/6.2.0/ucd/UnicodeData.txt -// \\*/ -// \\var unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; -// \\var unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; -// \\/** -// \\* Generated by scripts/regenerate-unicode-identifier-parts.js on node v12.4.0 with unicode 12.1 -// \\* based on http://www.unicode.org/reports/tr31/ and https://www.ecma-international.org/ecma-262/6.0/#sec-names-and-keywords -// \\* unicodeESNextIdentifierSt💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 art corresponds to the ID_Start and Other_ID_Start property, and -// \\* unicodeESNextIdentifierPart corresponds to ID_Continue, Other_ID_Continue, plus ID_Start and Other_ID_Start -// \\*/ -// \\var unicodeESNextIdentifierStart = [65, 90, 97, 122, 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 895, 895, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1488, 1514, 1519, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2144, 2154, 2208, 2228, 2230, 2237, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2432, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2556, 2556, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2809, 2809, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3133, 3160, 3162, 3168, 3169, 3200, 3200, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3412, 3414, 3423, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6264, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6430, 6480, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7401, 7404, 7406, 7411, 7413, 7414, 7418, 7418, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12443, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40943, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42653, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42943, 42946, 42950, 42999, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43261, 43262, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43488, 43492, 43494, 43503, 43514, 43518, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43646, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43879, 43888, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66176, 66204, 66208, 66256, 66304, 66335, 66349, 66378, 66384, 66421, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 67072, 67382, 67392, 67413, 67424, 67431, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68096, 68112, 68115, 68117, 68119, 68121, 68149, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68324, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68899, 69376, 69404, 69415, 69415, 69424, 69445, 69600, 69622, 69635, 69687, 69763, 69807, 69840, 69864, 69891, 69926, 69956, 69956, 69968, 70002, 70006, 70006, 70019, 70066, 70081, 70084, 70106, 70106, 70108, 70108, 70144, 70161, 70163, 70187, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70366, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70461, 70461, 70480, 70480, 70493, 70497, 70656, 70708, 70727, 70730, 70751, 70751, 70784, 70831, 70852, 70853, 70855, 70855, 71040, 71086, 71128, 71131, 71168, 71215, 71236, 71236, 71296, 71338, 71352, 71352, 71424, 71450, 71680, 71723, 71840, 71903, 71935, 71935, 72096, 72103, 72106, 72144, 72161, 72161, 72163, 72163, 72192, 72192, 72203, 72242, 72250, 72250, 72272, 72272, 72284, 72329, 72349, 72349, 72384, 72440, 72704, 72712, 72714, 72750, 72768, 72768, 72818, 72847, 72960, 72966, 72968, 72969, 72971, 73008, 73030, 73030, 73056, 73061, 73063, 73064, 73066, 73097, 73112, 73112, 73440, 73458, 73728, 74649, 74752, 74862, 74880, 75075, 77824, 78894, 82944, 83526, 92160, 92728, 92736, 92766, 92880, 92909, 92928, 92975, 92992, 92995, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94032, 94032, 94099, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101106, 110592, 110878, 110928, 110930, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 123136, 123180, 123191, 123197, 123214, 123214, 123584, 123627, 124928, 125124, 125184, 125251, 125259, 125259, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 178208, 183969, 183984, 191456, 194560, 195101]; -// \\var unicodeESNextIdentifierPart = [48, 57, 65, 90, 95, 95, 97, 122, 170, 170, 181, 181, 183, 183, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 895, 895, 902, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1519, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2045, 2045, 2048, 2093, 2112, 2139, 2144, 2154, 2208, 2228, 2230, 2237, 2259, 2273, 2275, 2403, 2406, 2415, 2417, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2556, 2556, 2558, 2558, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2809, 2815, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3072, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3162, 3168, 3171, 3174, 3183, 3200, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3328, 3331, 3333, 3340, 3342, 3344, 3346, 3396, 3398, 3400, 3402, 3406, 3412, 3415, 3423, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3558, 3567, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4969, 4977, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6264, 6272, 6314, 6320, 6389, 6400, 6430, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6618, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6832, 6845, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7376, 7378, 7380, 7418, 7424, 7673, 7675, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40943, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42737, 42775, 42783, 42786, 42888, 42891, 42943, 42946, 42950, 42999, 43047, 43072, 43123, 43136, 43205, 43216, 43225, 43232, 43255, 43259, 43259, 43261, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43488, 43518, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43879, 43888, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65071, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66045, 66045, 66176, 66204, 66208, 66256, 66272, 66272, 66304, 66335, 66349, 66378, 66384, 66426, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66720, 66729, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 67072, 67382, 67392, 67413, 67424, 67431, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68099, 68101, 68102, 68108, 68115, 68117, 68119, 68121, 68149, 68152, 68154, 68159, 68159, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68326, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68903, 68912, 68921, 69376, 69404, 69415, 69415, 69424, 69456, 69600, 69622, 69632, 69702, 69734, 69743, 69759, 69818, 69840, 69864, 69872, 69881, 69888, 69940, 69942, 69951, 69956, 69958, 69968, 70003, 70006, 70006, 70016, 70084, 70089, 70092, 70096, 70106, 70108, 70108, 70144, 70161, 70163, 70199, 70206, 70206, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70378, 70384, 70393, 70400, 70403, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70459, 70468, 70471, 70472, 70475, 70477, 70480, 70480, 70487, 70487, 70493, 70499, 70502, 70508, 70512, 70516, 70656, 70730, 70736, 70745, 70750, 70751, 70784, 70853, 70855, 70855, 70864, 70873, 71040, 71093, 71096, 71104, 71128, 71133, 71168, 71232, 71236, 71236, 71248, 71257, 71296, 71352, 71360, 71369, 71424, 71450, 71453, 71467, 71472, 71481, 71680, 71738, 71840, 71913, 71935, 71935, 72096, 72103, 72106, 72151, 72154, 72161, 72163, 72164, 72192, 72254, 72263, 72263, 72272, 72345, 72349, 72349, 72384, 72440, 72704, 72712, 72714, 72758, 72760, 72768, 72784, 72793, 72818, 72847, 72850, 72871, 72873, 72886, 72960, 72966, 72968, 72969, 72971, 73014, 73018, 73018, 73020, 73021, 73023, 73031, 73040, 73049, 73056, 73061, 73063, 73064, 73066, 73102, 73104, 73105, 73107, 73112, 73120, 73129, 73440, 73462, 73728, 74649, 74752, 74862, 74880, 75075, 77824, 78894, 82944, 83526, 92160, 92728, 92736, 92766, 92768, 92777, 92880, 92909, 92912, 92916, 92928, 92982, 92992, 92995, 93008, 93017, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94031, 94087, 94095, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101106, 110592, 110878, 110928, 110930, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 113821, 113822, 119141, 119145, 119149, 119154, 119163, 119170, 119173, 119179, 119210, 119213, 119362, 119364, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 120782, 120831, 121344, 121398, 121403, 121452, 121461, 121461, 121476, 121476, 121499, 121503, 121505, 121519, 122880, 122886, 122888, 122904, 122907, 122913, 122915, 122916, 122918, 122922, 123136, 123180, 123184, 123197, 123200, 123209, 123214, 123214, 123584, 123641, 124928, 125124, 125136, 125142, 125184, 125259, 125264, 125273, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 178208, 183969, 183984, 191456, 194560, 195101, 917760, 917999]; -// \\/** -// \\* Test for whether a single line comment with leading whitespace trimmed's text contains a directive. -// \\*/ -// \\var commentDirectiveRegExSingleLine = /^\/\/\/?\s*@(ts-expect-error|ts-ignore)/; -// \\/** -// \\* Test for whether a multi-line comment with leading whitespace trimmed's last line contains a directive. -// \\*/ -// \\var commentDirectiveRegExMultiLine = /^(?:\/|\*)*\s*@(ts-expect-error|ts-ignore)/; -// \\ /** @deprecated Use `factory.updateTaggedTemplate` or the factory supplied by your transformation context instead. */ -// \\ ts.updateTaggedTemplate = ts.Debug.deprecate(function updateTaggedTemplate(node, tag, typeArgumentsOrTemplate, template) { -// \\ var typeArguments; -// \\ if (template) { -// \\ typeArguments = typeArgumentsOrTemplate; -// \\ } -// \\ else { -// \\ template = typeArgumentsOrTemplate; -// \\ } -// \\ return ts.factory.updateTaggedTemplateExpression(node, tag, typeArguments, template); -// \\ }, factoryDeprecation); -// \\ /** @deprecated Use `factory.updateBinary` or the factory supplied by your transformation context instead. */ -// \\ ts.updateBinary = ts.Debug.deprecate(function updateBinary(node, left, right, operator) { -// \\ if (operator === void 0) { operator = node.operatorToken; } -// \\ if (typeof operator === "number") { -// \\ operator = operator === node.operatorToken.kind ? node.operatorToken : ts.factory.createToken(operator); -// \\ } -// \\ return ts.factory.updateBinaryExpression(node, left, operator, right); -// \\ }, factoryDeprecation); -// \\ /** @deprecated Use `factory.createConditional` or the factory supplied by your transformation context instead. */ -// \\ ts.createConditional = ts.Debug.deprecate(function createConditional(condition, questionTokenOrWhenTrue, whenTrueOrWhenFalse, colonToken, whenFalse) { -// \\ return arguments.length === 5 ? ts.factory.createCondit 🤎💬 💭 🗯 ♠️ ♣️ ♥️ ♦️ 🃏 🎴 🀄️ 🕐 🕑 🕒 🕓 🕔 🕕 🕖 🕗 🕘 🕙 🕚 🕛 🕜 🕝 ionalExpression(condition, questionTokenOrWhenTrue, whenTrueOrWhenFalse, colonToken, whenFalse) : -// \\ arguments.length === 3 ? ts.factory.createConditionalExpression(condition, ts.factory.createToken(57 /* QuestionToken */), questionTokenOrWhenTrue, ts.factory.createToken(58 /* ColonToken */), whenTrueOrWhenFalse) : -// \\ ts.Debug.fail("Argument count mismatch"); -// \\ }, factoryDeprecation); -// \\ /** @deprecated Use `factory.createYield` or the factory supplied by your transformation context instead. */ -// \\ ts.createYield = ts.Debug.deprecate(function createYield(asteriskTokenOrExpression, expression) { -// \\ var asteriskToken; -// \\ if (expression) { -// \\ asteriskToken = asteriskTokenOrExpression; -// \\ } -// \\ else { -// \\ expression = asteriskTokenOrExpression; -// \\ } -// \\ return ts.factory.createYieldExpre 🤎💬 💭 🗯 ♠️ ♣️ ♥️ ♦️ 🃏 🎴 🀄️ 🕐 🕑 🕒 🕓 🕔 🕕 🕖 🕗 🕘 🕙 🕚 🕛 🕜 🕝 ssion(asteriskToken, expression); -// \\ }, factoryDeprecation); -// \\ /** @deprecated Use `factory.createClassExpression` or the factory supplied by your transformation context instead. */ -// \\ ts.createClassExpression = ts.Debug.deprecate(function createClassExpression(modifiers, name, typeParameters, heritageClauses, members) { -// \\ return ts.factory.createClassExpression(/*decorators*/ undefined, modifiers, name, typeParameters, heritageClauses, members); -// \\ }, factoryDeprecation); 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ -// \\ /** @deprecated Use `factory.updateClassExpression` or the factory supplied by your transformation context instead. */ -// \\ ts.updateClassExpression = ts.Debug.deprecate(function updateClassExpression(node, modifiers, name, typeParameters, heritageClauses, members) { -// \\ return ts.factory.updateClassExpression(node, /*decorato 🤎💬 💭 🗯 ♠️ ♣️ ♥️ ♦️ 🃏 🎴 🀄️ 🕐 🕑 🕒 🕓 🕔 🕕 🕖 🕗 🕘 🕙 🕚 🕛 🕜 🕝 rs*/ undefined, modifiers, name, typeParameters, heritageClauses, members); -// \\ }, factoryDeprecation); -// \\ /** @deprecated Use `factory.createPropertySignature` or the factory supplied by your transformation context instead. */ -// \\ ts.createPropertySignature = ts.Debug.deprecate(function createPropertySignature(modifiers, name, questionToken, type, initializer) { -// \\ var node = ts.factory.createPropertySignature(modifiers, name, questionToken, type); -// \\ node.initializer = initializer; -// \\ return node; -// \\ }, factoryDeprecation); -// \\ /** @deprecated Use `factory.updatePropertySignature` or the factory supplied by your transformation context instead. */ -// \\ ts.updatePropertySignature = ts.Debug.deprecate(function updatePropertySignature(node, modifiers, name, questionToken, type, initializer) { -// \\ var updated = ts.factory.updatePropertySignature(node, modifiers, name, questionToken, type); -// \\ if (node.initia 💛 💚 💙 💜 🖤 🤍 🤎 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 👁‍🗨 💬 💭 🗯 ♠️ ♣️ ♥️ ♦️ 🃏 🎴 🀄️ 🕐 🕑 🕒 🕓 🕔 🕕 🕖 🕗 🕘 🕙 🕚 🕛 🕜 🕝 🕞 lizer !== initializer) { -// \\ if (updated === node) { -// \\ updated = ts 💚 💙 💜 🖤 🤍 🤎 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 👁‍🗨 💬 💭 🗯 ♠️ ♣️ ♥️ ♦️ 🃏 🎴 🀄️ 🕐 🕑 🕒 🕓 🕔 🕕 🕖 🕗 🕘 🕙 🕚 🕛 🕜 🕝 🕞 .factory.cloneNode(node); -// \\ } -// \\ updated.ini ` 💛 💚 💙 💜 🖤 🤍 🤎 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 👁‍🗨 💬 💭 🗯 ♠️ ♣️ ♥️ ♦️ 🃏 🎴 🀄️ 🕐 🕑 🕒 🕓 🕔 🕕 🕖 🕗 🕘 🕙 🕚 🕛 🕜 🕝 🕞 tializer = initializer; -// \\ } -// \\ return updated;⏏ ♀ 💚 💙 💜 🖤 🤍 🤎📢 👁‍🗨 💬 💭 🗯 ♠️ ♣️ ♥️ ♦️ 🃏 🎴 🀄️ 🕐 🕑 🕒 🕓 🕔 🕕 🕖 🕗 🕘 🕙 🕚 🕛 🕜 🕝 🕞 ♂ ⚕ ♾️ -// \\ }, factoryDeprecation 💛 💚 💙 💜 🖤 🤍🕞 💛⏏ ♀ ♂ ⚕ ♾️ -// \\ /** @deprecated Use⏏ ♀ 💚 💙 💜 🖤 🤍 🤎📢 👁‍🗨 💬 💭 🗯 ♠️ ♣️ ♥️ ♦️ 🃏 🎴 🀄️ 🕐 🕑 🕒 🕓 🕔 🕕 🕖 🕗 🕘 🕙 🕚 🕛 🕜 🕝 🕞 ♂ ⚕ ♾️ -// \\ ts.createExpression ` 💛 💚 💙 💜 🖤 🤍 🤎💭 🗯 ♠️ ♣️ ♥️ ♦️ 🃏 🎴 🀄️ 🕐 🕑 🕒 🕓 🕔 🕕 🕖 🕗 🕘 🕙 🕚 🕛 🕜 🕝 🕞 Wi 💛⏏ ♀ ♂ ⚕ ♾️ -// \\ return ts.factory⏏ 💚 💙 💜 🖤 🤍 🤎 👁‍🗨 💬 💭 🗯 ♠️ ♣️ ♥️ ♦️ 🃏 🎴 🀄️ 🕐 🕑 🕒 🕓 🕔 🕕 🕖 🕗 🕘 🕙 🕚 🕛 🕜 🕝 🕞 ♀ ♂ ⚕ ♾️ -// \\ }, factoryDeprecation 💛⏏ ♀ ♂ ⚕ ♾️ -// \\ /** @deprecated Use⏏ ♀ ♂ ⚕ ♾️ -// \\ ts.updateExpressionWi 💛⏏ ♀ ♂ ⚕ ♾️ -// \\ }, factoryDeprecation);👨🏿‍🎤 👩🏿‍🏫 👨🏿‍🏫 👩🏿‍🏭 👨🏿‍🏭 👩🏿‍💻 👨🏿‍💻 👩🏿‍💼 👨🏿‍💼 👩🏿‍🔧 👨🏿‍🔧 👩🏿‍🔬 👨🏿‍🔬 👩🏿‍🎨 👨🏿‍🎨 👩🏿‍🚒 👨🏿‍🚒 👩🏿‍✈️ 👨🏿‍✈️ 👩🏿‍🚀 👨🏿‍🚀 👩🏿‍⚖️ 👨🏿‍⚖️ 🤶🏿 🎅🏿 👸🏿 🤴🏿 👰🏿 🤵🏿 👼🏿 🤰🏿 🙇🏿‍♀️ 🙇🏿 💁🏿 💁🏿‍♂️ 🙅🏿 🙅🏿‍♂️ 🙆🏿 🙆🏿‍♂️ 🙋🏿 🙋🏿‍♂️ 🤦🏿‍♀️ 🤦🏿‍♂️ 🤷🏿‍♀️ 🤷🏿‍♂️ 🙎🏿 🙎🏿‍♂️ 🙍🏿 🙍🏿‍♂️ 💇🏿 💇🏿‍♂️ 💆🏿 💆🏿‍♂️ 🕴🏿 💃🏿 🕺🏿 🚶🏿‍♀️ 🚶🏿 🏃🏿‍♀️ 🏃🏿 🏋🏿‍♀️ 🏋🏿 🤸🏿‍♀️ 🤸🏿‍♂️ ⛹🏿‍♀️ ⛹🏿 🤾🏿‍♀️ 🤾🏿‍♂️ 🏌🏿‍♀️ 🏌🏿 🏄🏿‍♀️ 🏄🏿 🏊🏿‍♀️ 🏊🏿 🤽🏿‍♀️ 🤽🏿‍♂️ 🚣🏿‍♀️ 🚣🏿 🏇🏿 🚴🏿‍♀️ 🚴🏿 🚵🏿‍♀️ 🚵🏿 🤹🏿‍♀️ 🤹🏿‍♂️ 🛀🏿 🧒🏿 🧑🏿 🧓🏿 🧕🏿 🧔🏿 🤱🏿 🧙🏿‍♀️ 🧙🏿‍♂️ 🧚🏿‍♀️ 🧚🏿‍♂️ 🧛🏿‍♀️ 🧛🏿‍♂️ 🧜🏿‍♀️ 🧜🏿‍♂️ 🧝🏿‍♀️ 🧝🏿‍♂️ 🧖🏿‍♀️ 🧖🏿‍♂️ 🧗🏿‍♀️ 🧗🏿‍♂️ 🧘🏿‍♀️ 🧘🏿‍♂️ 🤟🏿 🤲🏿 💏🏿 💑🏿 🤏🏿 🦻🏿 🧏🏿 🧏🏿‍♂️ 🧏🏿‍♀️ 🧍🏿 🧍🏿‍♂️ 🧍🏿‍♀️ 🧎🏿 🧎🏿‍♂️ 🧎🏿‍♀️ 👨🏿‍🦯 👩🏿‍🦯 👨🏿‍🦼 👩🏿‍🦼 👨🏿‍🦽 👩🏿‍🦽 🧑🏿‍🤝‍🧑🏿 🧑🏿‍🦰 🧑🏿‍🦱 🧑🏿‍🦳 🧑🏿‍🦲 🧑🏿‍⚕️ 🧑🏿‍🎓 🧑🏿‍🏫 🧑🏿‍⚖️ 🧑🏿‍🌾 🧑🏿‍🍳 🧑🏿‍🔧 🧑🏿‍🏭 🧑🏿‍💼 🧑🏿‍🔬 🧑🏿‍💻 🧑🏿‍🎤 🧑🏿‍🎨 🧑🏿‍✈️ 🧑🏿‍🚀 🧑🏿‍🚒 🧑🏿‍🦯 🧑🏿‍🦼 🧑🏿‍🦽 -// \\ /** @deprecated Use `factory.createArrowFunction` or the factory supplied by your transformation context instead. */👨🏿‍🎤 👩🏿‍🏫 👨🏿‍🏫 👩🏿‍🏭 👨🏿‍🏭 👩🏿‍💻 👨🏿‍💻 👩🏿‍💼 👨🏿‍💼 👩🏿‍🔧 👨🏿‍🔧 👩🏿‍🔬 👨🏿‍🔬 👩🏿‍🎨 👨🏿‍🎨 👩🏿‍🚒 👨🏿‍🚒 👩🏿‍✈️ 👨🏿‍✈️ 👩🏿‍🚀 👨🏿‍🚀 👩🏿‍⚖️ 👨🏿‍⚖️ 🤶🏿 🎅🏿 👸🏿 🤴🏿 👰🏿 🤵🏿 👼🏿 🤰🏿 🙇🏿‍♀️ 🙇🏿 💁🏿 💁🏿‍♂️ 🙅🏿 🙅🏿‍♂️ 🙆🏿 🙆🏿‍♂️ 🙋🏿 🙋🏿‍♂️ 🤦🏿‍♀️ 🤦🏿‍♂️ 🤷🏿‍♀️ 🤷🏿‍♂️ 🙎🏿 🙎🏿‍♂️ 🙍🏿 🙍🏿‍♂️ 💇🏿 💇🏿‍♂️ 💆🏿 💆🏿‍♂️ 🕴🏿 💃🏿 🕺🏿 🚶🏿‍♀️ 🚶🏿 🏃🏿‍♀️ 🏃🏿 🏋🏿‍♀️ 🏋🏿 🤸🏿‍♀️ 🤸🏿‍♂️ ⛹🏿‍♀️ ⛹🏿 🤾🏿‍♀️ 🤾🏿‍♂️ 🏌🏿‍♀️ 🏌🏿 🏄🏿‍♀️ 🏄🏿 🏊🏿‍♀️ 🏊🏿 🤽🏿‍♀️ 🤽🏿‍♂️ 🚣🏿‍♀️ 🚣🏿 🏇🏿 🚴🏿‍♀️ 🚴🏿 🚵🏿‍♀️ 🚵🏿 🤹🏿‍♀️ 🤹🏿‍♂️ 🛀🏿 🧒🏿 🧑🏿 🧓🏿 🧕🏿 🧔🏿 🤱🏿 🧙🏿‍♀️ 🧙🏿‍♂️ 🧚🏿‍♀️ 🧚🏿‍♂️ 🧛🏿‍♀️ 🧛🏿‍♂️ 🧜🏿‍♀️ 🧜🏿‍♂️ 🧝🏿‍♀️ 🧝🏿‍♂️ 🧖🏿‍♀️ 🧖🏿‍♂️ 🧗🏿‍♀️ 🧗🏿‍♂️ 🧘🏿‍♀️ 🧘🏿‍♂️ 🤟🏿 🤲🏿 💏🏿 💑🏿 🤏🏿 🦻🏿 🧏🏿 🧏🏿‍♂️ 🧏🏿‍♀️ 🧍🏿 🧍🏿‍♂️ 🧍🏿‍♀️ 🧎🏿 🧎🏿‍♂️ 🧎🏿‍♀️ 👨🏿‍🦯 👩🏿‍🦯 👨🏿‍🦼 👩🏿‍🦼 👨🏿‍🦽 👩🏿‍🦽 🧑🏿‍🤝‍🧑🏿 🧑🏿‍🦰 🧑🏿‍🦱 🧑🏿‍🦳 🧑🏿‍🦲 🧑🏿‍⚕️ 🧑🏿‍🎓 🧑🏿‍🏫 🧑🏿‍⚖️ 🧑🏿‍🌾 🧑🏿‍🍳 🧑🏿‍🔧 🧑🏿‍🏭 🧑🏿‍💼 🧑🏿‍🔬 🧑🏿‍💻 🧑🏿‍🎤 🧑🏿‍🎨 🧑🏿‍✈️ 🧑🏿‍🚀 🧑🏿‍🚒 🧑🏿‍🦯 🧑🏿‍🦼 🧑🏿‍🦽 -// \\ ts.createArrowFunction = ts.Debug.deprecate(function createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanTokenOrBody, body) { -// \\ return arguments.length === 6 ? ts.factory.createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanTokenOrBody, body) : -// \\ arguments.length === 5 ? ts.factory.createA 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 -// \\ 💔 ❣️ 💕 ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 👁‍🗨 -// \\ 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 -// \\ 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 👁‍🗨 💬 -// \\💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 rrowFunction(modifiers, typeParamete👨🏿‍🎤 👩🏿‍🏫 👨🏿‍🏫 👩🏿‍🏭 👨🏿‍🏭 👩🏿‍💻 👨🏿‍💻 👩🏿‍💼 👨🏿‍💼 👩🏿‍🔧 👨🏿‍🔧 👩🏿‍🔬 👨🏿‍🔬 👩🏿‍🎨 👨🏿‍🎨 👩🏿‍🚒 👨🏿‍🚒 👩🏿‍✈️ 👨🏿‍✈️ 👩🏿‍🚀 👨🏿‍🚀 👩🏿‍⚖️ 👨🏿‍⚖️ 🤶🏿 🎅🏿 👸🏿 🤴🏿 👰🏿 🤵🏿 👼🏿 🤰🏿 🙇🏿‍♀️ 🙇🏿 💁🏿 💁🏿‍♂️ 🙅🏿 🙅🏿‍♂️ 🙆🏿 🙆🏿‍♂️ 🙋🏿 🙋🏿‍♂️ 🤦🏿‍♀️ 🤦🏿‍♂️ 🤷🏿‍♀️ 🤷🏿‍♂️ 🙎🏿 🙎🏿‍♂️ 🙍🏿 🙍🏿‍♂️ 💇🏿 💇🏿‍♂️ 💆🏿 💆🏿‍♂️ 🕴🏿 💃🏿 🕺🏿 🚶🏿‍♀️ 🚶🏿 🏃🏿‍♀️ 🏃🏿 🏋🏿‍♀️ 🏋🏿 🤸🏿‍♀️ 🤸🏿‍♂️ ⛹🏿‍♀️ ⛹🏿 🤾🏿‍♀️ 🤾🏿‍♂️ 🏌🏿‍♀️ 🏌🏿 🏄🏿‍♀️ 🏄🏿 🏊🏿‍♀️ 🏊🏿 🤽🏿‍♀️ 🤽🏿‍♂️ 🚣🏿‍♀️ 🚣🏿 🏇🏿 🚴🏿‍♀️ 🚴🏿 🚵🏿‍♀️ 🚵🏿 🤹🏿‍♀️ 🤹🏿‍♂️ 🛀🏿 🧒🏿 🧑🏿 🧓🏿 🧕🏿 🧔🏿 🤱🏿 🧙🏿‍♀️ 🧙🏿‍♂️ 🧚🏿‍♀️ 🧚🏿‍♂️ 🧛🏿‍♀️ 🧛🏿‍♂️ 🧜🏿‍♀️ 🧜🏿‍♂️ 🧝🏿‍♀️ 🧝🏿‍♂️ 🧖🏿‍♀️ 🧖🏿‍♂️ 🧗🏿‍♀️ 🧗🏿‍♂️ 🧘🏿‍♀️ 🧘🏿‍♂️ 🤟🏿 🤲🏿 💏🏿 💑🏿 🤏🏿 🦻🏿 🧏🏿 🧏🏿‍♂️ 🧏🏿‍♀️ 🧍🏿 🧍🏿‍♂️ 🧍🏿‍♀️ 🧎🏿 🧎🏿‍♂️ 🧎🏿‍♀️ 👨🏿‍🦯 👩🏿‍🦯 👨🏿‍🦼 👩🏿‍🦼 👨🏿‍🦽 👩🏿‍🦽 🧑🏿‍🤝‍🧑🏿 🧑🏿‍🦰 🧑🏿‍🦱 🧑🏿‍🦳 🧑🏿‍🦲 🧑🏿‍⚕️ 🧑🏿‍🎓 🧑🏿‍🏫 🧑🏿‍⚖️ 🧑🏿‍🌾 🧑🏿‍🍳 🧑🏿‍🔧 🧑🏿‍🏭 🧑🏿‍💼 🧑🏿‍🔬 🧑🏿‍💻 🧑🏿‍🎤 🧑🏿‍🎨 🧑🏿‍✈️ 🧑🏿‍🚀 🧑🏿‍🚒 🧑🏿‍🦯 🧑🏿‍🦼 🧑🏿‍🦽 -// \\ }, factoryDeprecation); 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 -// \\ 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 👁‍🗨 -// \\ 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 -// \\ 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 👁‍🗨 💬 -// \\💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 -// \\ /** @deprecated Use `factory.updateArrowFunction` o 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 -// \\ 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 👁‍🗨 -// \\ 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ 🐱‍👤 🐱‍🚀 🐱‍🐉 🐱‍💻 🐱‍🏍 ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 -// \\ 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 👁‍🗨 💬 -// \\💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 r the factory supplied by your transformation context instead. */ -// \\ ts.updateArrowFunction = ts.Debug.deprecate(functio 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 -// \\ 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 👁‍🗨 -// \\ 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 -// \\ 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 👁‍🗨 💬 -// \\💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 n updateArrowFunction(node, modifiers, typeParameters, parameters, type, equalsGreaterThanTokenOrBody, body) { -// \\ return arguments.length === 7 ? ts.factory.upda 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 -// \\ 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 👁‍🗨 -// \\ 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 -// \\ 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 👁‍🗨 💬 -// \\💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 teArrowFunction(node, modifiers, typeParameters, parameters, type, equalsGreaterThanTokenOrBody, body) : -// \\ arguments.length === 6 ? ts.factory.updateA 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 -// \\ 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 👁‍🗨 -// \\ 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 -// \\ 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 👁‍🗨 💬 -// \\💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 rrowFunction(node, modifiers, typeParameters, parameters, type, node.equalsGreaterThanToken, equalsGreaterThanTokenOrBody) : -// \\ ts.Debug.fail("Argument count mismatch" 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 -// \\ 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 👁‍🗨 -// \\ 💔 ❣️ 💕 💞 💓 -// \\ 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 👁‍🗨 💬 -// \\💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 );👨🏿‍🎤 👩🏿‍🏫 👨🏿‍🏫 👩🏿‍🏭 👨🏿‍🏭 👩🏿‍💻 👨🏿‍💻 👩🏿‍💼 👨🏿‍💼 👩🏿‍🔧 👨🏿‍🔧 👩🏿‍🔬 👨🏿‍🔬 👩🏿‍🎨 👨🏿‍🎨 👩🏿‍🚒 👨🏿‍🚒 👩🏿‍✈️ 👨🏿‍✈️ 👩🏿‍🚀 👨🏿‍🚀 👩🏿‍⚖️ 👨🏿‍⚖️ 🤶🏿 🎅🏿 👸🏿 🤴🏿 👰🏿 🤵🏿 👼🏿 🤰🏿 🙇🏿‍♀️ 🙇🏿 💁🏿 💁🏿‍♂️ 🙅🏿 🙅🏿‍♂️ 🙆🏿 🙆🏿‍♂️ 🙋🏿 🙋🏿‍♂️ 🤦🏿‍♀️ 🤦🏿‍♂️ 🤷🏿‍♀️ 🤷🏿‍♂️ 🙎🏿 🙎🏿‍♂️ 🙍🏿 🙍🏿‍♂️ 💇🏿 💇🏿‍♂️ 💆🏿 💆🏿‍♂️ 🕴🏿 💃🏿 🕺🏿 🚶🏿‍♀️ 🚶🏿 🏃🏿‍♀️ 🏃🏿 🏋🏿‍♀️ 🏋🏿 🤸🏿‍♀️ 🤸🏿‍♂️ ⛹🏿‍♀️ ⛹🏿 🤾🏿‍♀️ 🤾🏿‍♂️ 🏌🏿‍♀️ 🏌🏿 🏄🏿‍♀️ 🏄🏿 🏊🏿‍♀️ 🏊🏿 🤽🏿‍♀️ 🤽🏿‍♂️ 🚣🏿‍♀️ 🚣🏿 🏇🏿 🚴🏿‍♀️ 🚴🏿 🚵🏿‍♀️ 🚵🏿 🤹🏿‍♀️ 🤹🏿‍♂️ 🛀🏿 🧒🏿 🧑🏿 🧓🏿 🧕🏿 🧔🏿 🤱🏿 🧙🏿‍♀️ 🧙🏿‍♂️ 🧚🏿‍♀️ 🧚🏿‍♂️ 🧛🏿‍♀️ 🧛🏿‍♂️ 🧜🏿‍♀️ 🧜🏿‍♂️ 🧝🏿‍♀️ 🧝🏿‍♂️ 🧖🏿‍♀️ 🧖🏿‍♂️ 🧗🏿‍♀️ 🧗🏿‍♂️ 🧘🏿‍♀️ 🧘🏿‍♂️ 🤟🏿 🤲🏿 💏🏿 💑🏿 🤏🏿 🦻🏿 🧏🏿 🧏🏿‍♂️ 🧏🏿‍♀️ 🧍🏿 🧍🏿‍♂️ 🧍🏿‍♀️ 🧎🏿 🧎🏿‍♂️ 🧎🏿‍♀️ 👨🏿‍🦯 👩🏿‍🦯 👨🏿‍🦼 👩🏿‍🦼 👨🏿‍🦽 👩🏿‍🦽 🧑🏿‍🤝‍🧑🏿 🧑🏿‍🦰 🧑🏿‍🦱 🧑🏿‍🦳 🧑🏿‍🦲 🧑🏿‍⚕️ 🧑🏿‍🎓 🧑🏿‍🏫 🧑🏿‍⚖️ 🧑🏿‍🌾 🧑🏿‍🍳 🧑🏿‍🔧 🧑🏿‍🏭 🧑🏿‍💼 🧑🏿‍🔬 🧑🏿‍💻 🧑🏿‍🎤 🧑🏿‍🎨 🧑🏿‍✈️ 🧑🏿‍🚀 🧑🏿‍🚒 🧑🏿‍🦯 🧑🏿‍🦼 🧑🏿‍🦽eDeclaration(name, exclamationTokenOrType, typeOrInitializer, initializer) { -// \\ return arguments.length === 4 ? ts.factory.createVariableDeclaration(name, exclamationTokenOrType, typeOrInitializer, initializer) :👨🏿‍🎤 👩🏿‍🏫 👨🏿‍🏫 👩🏿‍🏭 👨🏿‍🏭 👩🏿‍💻 👨🏿‍💻 👩🏿‍💼 👨🏿‍💼 👩🏿‍🔧 👨🏿‍🔧 👩🏿‍🔬 👨🏿‍🔬 👩🏿‍🎨 👨🏿‍🎨 👩🏿‍🚒 👨🏿‍🚒 👩🏿‍✈️ 👨🏿‍✈️ 👩🏿‍🚀 👨🏿‍🚀 👩🏿‍⚖️ 👨🏿‍⚖️ 🤶🏿 🎅🏿 👸🏿 🤴🏿 👰🏿 🤵🏿 👼🏿 🤰🏿 🙇🏿‍♀️ 🙇🏿 💁🏿 💁🏿‍♂️ 🙅🏿 🙅🏿‍♂️ 🙆🏿 🙆🏿‍♂️ 🙋🏿 🙋🏿‍♂️ 🤦🏿‍♀️ 🤦🏿‍♂️ 🤷🏿‍♀️ 🤷🏿‍♂️ 🙎🏿 🙎🏿‍♂️ 🙍🏿 🙍🏿‍♂️ 💇🏿 💇🏿‍♂️ 💆🏿 💆🏿‍♂️ 🕴🏿 💃🏿 🕺🏿 🚶🏿‍♀️ 🚶🏿 🏃🏿‍♀️ 🏃🏿 🏋🏿‍♀️ 🏋🏿 🤸🏿‍♀️ 🤸🏿‍♂️ ⛹🏿‍♀️ ⛹🏿 🤾🏿‍♀️ 🤾🏿‍♂️ 🏌🏿‍♀️ 🏌🏿 🏄🏿‍♀️ 🏄🏿 🏊🏿‍♀️ 🏊🏿 🤽🏿‍♀️ 🤽🏿‍♂️ 🚣🏿‍♀️ 🚣🏿 🏇🏿 🚴🏿‍♀️ 🚴🏿 🚵🏿‍♀️ 🚵🏿 🤹🏿‍♀️ 🤹🏿‍♂️ 🛀🏿 🧒🏿 🧑🏿 🧓🏿 🧕🏿 🧔🏿 🤱🏿 🧙🏿‍♀️ 🧙🏿‍♂️ 🧚🏿‍♀️ 🧚🏿‍♂️ 🧛🏿‍♀️ 🧛🏿‍♂️ 🧜🏿‍♀️ 🧜🏿‍♂️ 🧝🏿‍♀️ 🧝🏿‍♂️ 🧖🏿‍♀️ 🧖🏿‍♂️ 🧗🏿‍♀️ 🧗🏿‍♂️ 🧘🏿‍♀️ 🧘🏿‍♂️ 🤟🏿 🤲🏿 💏🏿 💑🏿 🤏🏿 🦻🏿 🧏🏿 🧏🏿‍♂️ 🧏🏿‍♀️ 🧍🏿 🧍🏿‍♂️ 🧍🏿‍♀️ 🧎🏿 🧎🏿‍♂️ 🧎🏿‍♀️ 👨🏿‍🦯 👩🏿‍🦯 👨🏿‍🦼 👩🏿‍🦼 👨🏿‍🦽 👩🏿‍🦽 🧑🏿‍🤝‍🧑🏿 🧑🏿‍🦰 🧑🏿‍🦱 🧑🏿‍🦳 🧑🏿‍🦲 🧑🏿‍⚕️ 🧑🏿‍🎓 🧑🏿‍🏫 🧑🏿‍⚖️ 🧑🏿‍🌾 🧑🏿‍🍳 🧑🏿‍🔧 🧑🏿‍🏭 🧑🏿‍💼 🧑🏿‍🔬 🧑🏿‍💻 🧑🏿‍🎤 🧑🏿‍🎨 🧑🏿‍✈️ 🧑🏿‍🚀 🧑🏿‍🚒 🧑🏿‍🦯 🧑🏿‍🦼 🧑🏿‍🦽 -// \\ argu💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 🚻 🚮 🎦 📶 🈁 🔣 ℹ️ 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🔢 #️⃣ *️⃣ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➕ ➖ ➗ ✖️ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 ments.length >= 1 && arguments.length <= 3 ? ts.factory.createVariableDeclaration(name, /*exclamationToken*/ undefined, exclamationTokenOrType, typeOrInitializer) : -// \\ ts.Debug.fail("Argument count mismatch");👨🏿‍🎤 👩🏿‍🏫 👨🏿‍🏫 👩🏿‍🏭 👨🏿‍🏭 👩🏿‍💻 👨🏿‍💻 👩🏿‍💼 👨🏿‍💼 👩🏿‍🔧 👨🏿‍🔧 👩🏿‍🔬 👨🏿‍🔬 👩🏿‍🎨 👨🏿‍🎨 👩🏿‍🚒 👨🏿‍🚒 👩🏿‍✈️ 👨🏿‍✈️ 👩🏿‍🚀 👨🏿‍🚀 👩🏿‍⚖️ 👨🏿‍⚖️ 🤶🏿 🎅🏿 👸🏿 🤴🏿 👰🏿 🤵🏿 👼🏿 🤰🏿 🙇🏿‍♀️ 🙇🏿 💁🏿 💁🏿‍♂️ 🙅🏿 🙅🏿‍♂️ 🙆🏿 🙆🏿‍♂️ 🙋🏿 🙋🏿‍♂️ 🤦🏿‍♀️ 🤦🏿‍♂️ 🤷🏿‍♀️ 🤷🏿‍♂️ 🙎🏿 🙎🏿‍♂️ 🙍🏿 🙍🏿‍♂️ 💇🏿 💇🏿‍♂️ 💆🏿 💆🏿‍♂️ 🕴🏿 💃🏿 🕺🏿 🚶🏿‍♀️ 🚶🏿 🏃🏿‍♀️ 🏃🏿 🏋🏿‍♀️ 🏋🏿 🤸🏿‍♀️ 🤸🏿‍♂️ ⛹🏿‍♀️ ⛹🏿 🤾🏿‍♀️ 🤾🏿‍♂️ 🏌🏿‍♀️ 🏌🏿 🏄🏿‍♀️ 🏄🏿 🏊🏿‍♀️ 🏊🏿 🤽🏿‍♀️ 🤽🏿‍♂️ 🚣🏿‍♀️ 🚣🏿 🏇🏿 🚴🏿‍♀️ 🚴🏿 🚵🏿‍♀️ 🚵🏿 🤹🏿‍♀️ 🤹🏿‍♂️ 🛀🏿 🧒🏿 🧑🏿 🧓🏿 🧕🏿 🧔🏿 🤱🏿 🧙🏿‍♀️ 🧙🏿‍♂️ 🧚🏿‍♀️ 🧚🏿‍♂️ 🧛🏿‍♀️ 🧛🏿‍♂️ 🧜🏿‍♀️ 🧜🏿‍♂️ 🧝🏿‍♀️ 🧝🏿‍♂️ 🧖🏿‍♀️ 🧖🏿‍♂️ 🧗🏿‍♀️ 🧗🏿‍♂️ 🧘🏿‍♀️ 🧘🏿‍♂️ 🤟🏿 🤲🏿 💏🏿 💑🏿 🤏🏿 🦻🏿 🧏🏿 🧏🏿‍♂️ 🧏🏿‍♀️ 🧍🏿 🧍🏿‍♂️ 🧍🏿‍♀️ 🧎🏿 🧎🏿‍♂️ 🧎🏿‍♀️ 👨🏿‍🦯 👩🏿‍🦯 👨🏿‍🦼 👩🏿‍🦼 👨🏿‍🦽 👩🏿‍🦽 🧑🏿‍🤝‍🧑🏿 🧑🏿‍🦰 🧑🏿‍🦱 🧑🏿‍🦳 🧑🏿‍🦲 🧑🏿‍⚕️ 🧑🏿‍🎓 🧑🏿‍🏫 🧑🏿‍⚖️ 🧑🏿‍🌾 🧑🏿‍🍳 🧑🏿‍🔧 🧑🏿‍🏭 🧑🏿‍💼 🧑🏿‍🔬 🧑🏿‍💻 🧑🏿‍🎤 🧑🏿‍🎨 🧑🏿‍✈️ 🧑🏿‍🚀 🧑🏿‍🚒 🧑🏿‍🦯 🧑🏿‍🦼 🧑🏿‍🦽 -// \\ }, factoryDeprecation); -// \\ /** @deprecated Use `factory.updateVariableDeclaration` or the factory supplied by your transformation context instead. */👨🏿‍🎤 👩🏿‍🏫 👨🏿‍🏫 👩🏿‍🏭 👨🏿‍🏭 👩🏿‍💻 👨🏿‍💻 👩🏿‍💼 👨🏿‍💼 👩🏿‍🔧 👨🏿‍🔧 👩🏿‍🔬 👨🏿‍🔬 👩🏿‍🎨 👨🏿‍🎨 👩🏿‍🚒 👨🏿‍🚒 👩🏿‍✈️ 👨🏿‍✈️ 👩🏿‍🚀 👨🏿‍🚀 👩🏿‍⚖️ 👨🏿‍⚖️ 🤶🏿 🎅🏿 👸🏿 🤴🏿 👰🏿 🤵🏿 👼🏿 🤰🏿 🙇🏿‍♀️ 🙇🏿 💁🏿 💁🏿‍♂️ 🙅🏿 🙅🏿‍♂️ 🙆🏿 🙆🏿‍♂️ 🙋🏿 🙋🏿‍♂️ 🤦🏿‍♀️ 🤦🏿‍♂️ 🤷🏿‍♀️ 🤷🏿‍♂️ 🙎🏿 🙎🏿‍♂️ 🙍🏿 🙍🏿‍♂️ 💇🏿 💇🏿‍♂️ 💆🏿 💆🏿‍♂️ 🕴🏿 💃🏿 🕺🏿 🚶🏿‍♀️ 🚶🏿 🏃🏿‍♀️ 🏃🏿 🏋🏿‍♀️ 🏋🏿 🤸🏿‍♀️ 🤸🏿‍♂️ ⛹🏿‍♀️ ⛹🏿 🤾🏿‍♀️ 🤾🏿‍♂️ 🏌🏿‍♀️ 🏌🏿 🏄🏿‍♀️ 🏄🏿 🏊🏿‍♀️ 🏊🏿 🤽🏿‍♀️ 🤽🏿‍♂️ 🚣🏿‍♀️ 🚣🏿 🏇🏿 🚴🏿‍♀️ 🚴🏿 🚵🏿‍♀️ 🚵🏿 🤹🏿‍♀️ 🤹🏿‍♂️ 🛀🏿 🧒🏿 🧑🏿 🧓🏿 🧕🏿 🧔🏿 🤱🏿 🧙🏿‍♀️ 🧙🏿‍♂️ 🧚🏿‍♀️ 🧚🏿‍♂️ 🧛🏿‍♀️ 🧛🏿‍♂️ 🧜🏿‍♀️ 🧜🏿‍♂️ 🧝🏿‍♀️ 🧝🏿‍♂️ 🧖🏿‍♀️ 🧖🏿‍♂️ 🧗🏿‍♀️ 🧗🏿‍♂️ 🧘🏿‍♀️ 🧘🏿‍♂️ 🤟🏿 🤲🏿 💏🏿 💑🏿 🤏🏿 🦻🏿 🧏🏿 🧏🏿‍♂️ 🧏🏿‍♀️ 🧍🏿 🧍🏿‍♂️ 🧍🏿‍♀️ 🧎🏿 🧎🏿‍♂️ 🧎🏿‍♀️ 👨🏿‍🦯 👩🏿‍🦯 👨🏿‍🦼 👩🏿‍🦼 👨🏿‍🦽 👩🏿‍🦽 🧑🏿‍🤝‍🧑🏿 🧑🏿‍🦰 🧑🏿‍🦱 🧑🏿‍🦳 🧑🏿‍🦲 🧑🏿‍⚕️ 🧑🏿‍🎓 🧑🏿‍🏫 🧑🏿‍⚖️ 🧑🏿‍🌾 🧑🏿‍🍳 🧑🏿‍🔧 🧑🏿‍🏭 🧑🏿‍💼 🧑🏿‍🔬 🧑🏿‍💻 🧑🏿‍🎤 🧑🏿‍🎨 🧑🏿‍✈️ 🧑🏿‍🚀 🧑🏿‍🚒 🧑🏿‍🦯 🧑🏿‍🦼 🧑🏿‍🦽 -// \\ return arguments.length === 5 ? ts.factory.updateVariableDeclaration(node, name, exclamationTokenOrType, typeOrInitializer, initializer) : -// \\ arguments.length === 4 ? ts.factory.updateVariableDeclaration(node, name, node.exclamationToken, exclamationTokenOrType, typeOrInitializer) :👨🏿‍🎤 👩🏿‍🏫 👨🏿‍🏫 👩🏿‍🏭 👨🏿‍🏭 👩🏿‍💻 👨🏿‍💻 👩🏿‍💼 👨🏿‍💼 👩🏿‍🔧 👨🏿‍🔧 👩🏿‍🔬 👨🏿‍🔬 👩🏿‍🎨 👨🏿‍🎨 👩🏿‍🚒 👨🏿‍🚒 👩🏿‍✈️ 👨🏿‍✈️ 👩🏿‍🚀 👨🏿‍🚀 👩🏿‍⚖️ 👨🏿‍⚖️ 🤶🏿 🎅🏿 👸🏿 🤴🏿 👰🏿 🤵🏿 👼🏿 🤰🏿 🙇🏿‍♀️ 🙇🏿 💁🏿 💁🏿‍♂️ 🙅🏿 🙅🏿‍♂️ 🙆🏿 🙆🏿‍♂️ 🙋🏿 🙋🏿‍♂️ 🤦🏿‍♀️ 🤦🏿‍♂️ 🤷🏿‍♀️ 🤷🏿‍♂️ 🙎🏿 🙎🏿‍♂️ 🙍🏿 🙍🏿‍♂️ 💇🏿 💇🏿‍♂️ 💆🏿 💆🏿‍♂️ 🕴🏿 💃🏿 🕺🏿 🚶🏿‍♀️ 🚶🏿 🏃🏿‍♀️ 🏃🏿 🏋🏿‍♀️ 🏋🏿 🤸🏿‍♀️ 🤸🏿‍♂️ ⛹🏿‍♀️ ⛹🏿 🤾🏿‍♀️ 🤾🏿‍♂️ 🏌🏿‍♀️ 🏌🏿 🏄🏿‍♀️ 🏄🏿 🏊🏿‍♀️ 🏊🏿 🤽🏿‍♀️ 🤽🏿‍♂️ 🚣🏿‍♀️ 🚣🏿 🏇🏿 🚴🏿‍♀️ 🚴🏿 🚵🏿‍♀️ 🚵🏿 🤹🏿‍♀️ 🤹🏿‍♂️ 🛀🏿 🧒🏿 🧑🏿 🧓🏿 🧕🏿 🧔🏿 🤱🏿 🧙🏿‍♀️ 🧙🏿‍♂️ 🧚🏿‍♀️ 🧚🏿‍♂️ 🧛🏿‍♀️ 🧛🏿‍♂️ 🧜🏿‍♀️ 🧜🏿‍♂️ 🧝🏿‍♀️ 🧝🏿‍♂️ 🧖🏿‍♀️ 🧖🏿‍♂️ 🧗🏿‍♀️ 🧗🏿‍♂️ 🧘🏿‍♀️ 🧘🏿‍♂️ 🤟🏿 🤲🏿 💏🏿 💑🏿 🤏🏿 🦻🏿 🧏🏿 🧏🏿‍♂️ 🧏🏿‍♀️ 🧍🏿 🧍🏿‍♂️ 🧍🏿‍♀️ 🧎🏿 🧎🏿‍♂️ 🧎🏿‍♀️ 👨🏿‍🦯 👩🏿‍🦯 👨🏿‍🦼 👩🏿‍🦼 👨🏿‍🦽 👩🏿‍🦽 🧑🏿‍🤝‍🧑🏿 🧑🏿‍🦰 🧑🏿‍🦱 🧑🏿‍🦳 🧑🏿‍🦲 🧑🏿‍⚕️ 🧑🏿‍🎓 🧑🏿‍🏫 🧑🏿‍⚖️ 🧑🏿‍🌾 🧑🏿‍🍳 🧑🏿‍🔧 🧑🏿‍🏭 🧑🏿‍💼 🧑🏿‍🔬 🧑🏿‍💻 🧑🏿‍🎤 🧑🏿‍🎨 🧑🏿‍✈️ 🧑🏿‍🚀 🧑🏿‍🚒 🧑🏿‍🦯 🧑🏿‍🦼 🧑🏿‍🦽 -// \\ ts.Debug.fail("Argument count mismatch"); -// \\ }, factoryDeprecation); -// \\ 😀 😃 😄 😁 😆 🤩 😅 😂 🤣 ☺️ 😊 😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 🤪 😜 😝👨🏿‍🎤 👩🏿‍🏫 👨🏿‍🏫 👩🏿‍🏭 👨🏿‍🏭 👩🏿‍💻 👨🏿‍💻 👩🏿‍💼 👨🏿‍💼 👩🏿‍🔧 👨🏿‍🔧 👩🏿‍🔬 👨🏿‍🔬 👩🏿‍🎨 👨🏿‍🎨 👩🏿‍🚒 👨🏿‍🚒 👩🏿‍✈️ 👨🏿‍✈️ 👩🏿‍🚀 👨🏿‍🚀 👩🏿‍⚖️ 👨🏿‍⚖️ 🤶🏿 🎅🏿 👸🏿 🤴🏿 👰🏿 🤵🏿 👼🏿 🤰🏿 🙇🏿‍♀️ 🙇🏿 💁🏿 💁🏿‍♂️ 🙅🏿 🙅🏿‍♂️ 🙆🏿 🙆🏿‍♂️ 🙋🏿 🙋🏿‍♂️ 🤦🏿‍♀️ 🤦🏿‍♂️ 🤷🏿‍♀️ 🤷🏿‍♂️ 🙎🏿 🙎🏿‍♂️ 🙍🏿 🙍🏿‍♂️ 💇🏿 💇🏿‍♂️ 💆🏿 💆🏿‍♂️ 🕴🏿 💃🏿 🕺🏿 🚶🏿‍♀️ 🚶🏿 🏃🏿‍♀️ 🏃🏿 🏋🏿‍♀️ 🏋🏿 🤸🏿‍♀️ 🤸🏿‍♂️ ⛹🏿‍♀️ ⛹🏿 🤾🏿‍♀️ 🤾🏿‍♂️ 🏌🏿‍♀️ 🏌🏿 🏄🏿‍♀️ 🏄🏿 🏊🏿‍♀️ 🏊🏿 🤽🏿‍♀️ 🤽🏿‍♂️ 🚣🏿‍♀️ 🚣🏿 🏇🏿 🚴🏿‍♀️ 🚴🏿 🚵🏿‍♀️ 🚵🏿 🤹🏿‍♀️ 🤹🏿‍♂️ 🛀🏿 🧒🏿 🧑🏿 🧓🏿 🧕🏿 🧔🏿 🤱🏿 🧙🏿‍♀️ 🧙🏿‍♂️ 🧚🏿‍♀️ 🧚🏿‍♂️ 🧛🏿‍♀️ 🧛🏿‍♂️ 🧜🏿‍♀️ 🧜🏿‍♂️ 🧝🏿‍♀️ 🧝🏿‍♂️ 🧖🏿‍♀️ 🧖🏿‍♂️ 🧗🏿‍♀️ 🧗🏿‍♂️ 🧘🏿‍♀️ 🧘🏿‍♂️ 🤟🏿 🤲🏿 💏🏿 💑🏿 🤏🏿 🦻🏿 🧏🏿 🧏🏿‍♂️ 🧏🏿‍♀️ 🧍🏿 🧍🏿‍♂️ 🧍🏿‍♀️ 🧎🏿 🧎🏿‍♂️ 🧎🏿‍♀️ 👨🏿‍🦯 👩🏿‍🦯 👨🏿‍🦼 👩🏿‍🦼 👨🏿‍🦽 👩🏿‍🦽 🧑🏿‍🤝‍🧑🏿 🧑🏿‍🦰 🧑🏿‍🦱 🧑🏿‍🦳 🧑🏿‍🦲 🧑🏿‍⚕️ 🧑🏿‍🎓 🧑🏿‍🏫 🧑🏿‍⚖️ 🧑🏿‍🌾 🧑🏿‍🍳 🧑🏿‍🔧 🧑🏿‍🏭 🧑🏿‍💼 🧑🏿‍🔬 🧑🏿‍💻 🧑🏿‍🎤 🧑🏿‍🎨 🧑🏿‍✈️ 🧑🏿‍🚀 🧑🏿‍🚒 🧑🏿‍🦯 🧑🏿‍🦼 🧑🏿‍🦽😛 🤑 🤗 🤓 😎 🤡 🤠 😏 😒 😞 😔 😟 😕 🙁 ☹️ 😣 😖 😫 😩 😤 😠 😡 🤬 😶 😐 😑 😯 😦 😧 😮 😲 😵 🤯 😳 😱 😨 😰 😢 😥 🤤 😭 😓 😪 😴 🥱 🙄 🤨 🧐 🤔 🤫 🤭 🤥 😬 🤐 🤢 🤮 🤧 😷 🤒 🤕 😈 👿 👹 👺 💩 👻 💀 ☠️ 👽 👾 🤖 🎃 😺 😸 😹 😻 😼 😽 🙀 😿 😾 👐 🙌 👏 🙏 🤲 🤝 👍 👎 👊 ✊ 🤛 🤜 🤞 ✌️ 🤘 🤏 👌 👈 👉 👆 👇 ☝️ ✋ 🤚 🖐 🖖 👋 🤙 💪 🖕 🤟 ✍️ 🤳 💅 🖖 💄 💋 👄 👅 👂 🦻 👃 🦵 🦶 🦾 🦿 👣 👁 👀 🗣 👤 👥 👶 👦 👧 🧒 👨 👩 🧑 👱‍♀️ 👱 🧔 👴 👵 🧓 👲 👳‍♀️ 👳 🧕 👮‍♀️ 👮 👷‍♀️ 👷 💂‍♀️ 💂 🕵️‍♀️ 🕵️ 👩‍⚕️ 👨‍⚕️ 👩‍🌾 👨‍🌾 👩‍🍳 👨‍🍳 👩‍🎓 👨‍🎓 👩‍🎤 👨‍🎤 👩‍🏫 👨‍🏫 👩‍🏭 👨‍🏭 👩‍💻 👨‍💻 👩‍💼 👨‍💼 👩‍🔧 👨‍🔧 👩‍🔬 👨‍🔬 👩‍🎨 👨‍🎨 👩‍🚒 👨‍🚒 👩‍✈️ 👨‍✈️ 👩‍🚀 👨‍🚀 👩‍⚖️ 👨‍⚖️ 🤶 🎅 👸 🤴 👰 🤵 👼 🤰 🤱 🙇‍♀️ 🙇 💁 💁‍♂️ 🙅 🙅‍♂️ 🙆 🙆‍♂️ 🙋 🙋‍♂️ 🤦‍♀️ 🤦‍♂️ 🤷‍♀️ 🤷‍♂️ 🙎 🙎‍♂️ 🙍 🙍‍♂️ 💇 💇‍♂️ 💆 💆‍♂️ 🧖‍♀️ 🧖‍♂️ 🧏 🧏‍♂️ 🧏‍♀️ 🧙‍♀️ 🧙‍♂️ 🧛‍♀️ 🧛‍♂️ 🧟‍♀️ 🧟‍♂️ 🧚‍♀️ 🧚‍♂️ 🧜‍♀️ 🧜‍♂️ 🧝‍♀️ 🧝‍♂️ 🧞‍♀️ 🧞‍♂️ 🕴 💃 🕺 👯 👯‍♂️ 🚶‍♀️ 🚶 🏃‍♀️ 🏃 🧍 🧍‍♂️ 🧍‍♀️ 🧎 🧎‍♂️ 🧎‍♀️ 👨‍🦯 👩‍🦯 👨‍🦼 👩‍🦼 👨‍🦽 👩‍🦽 🧑‍🤝‍🧑 👫 👭 👬 💑 👩‍❤️‍👩 👨‍❤️‍👨 💏 👩‍❤️‍💋‍👩 👨‍❤️‍💋‍👨 👪 👨‍👩‍👧 👨‍👩‍👧‍👦 👨‍👩‍👦‍👦 👨‍👩‍👧‍👧 👩‍👩‍👦 👩‍👩‍👧 👩‍👩‍👧‍👦 👩‍👩‍👦‍👦 👩‍👩‍👧‍👧 👨‍👨‍👦 👨‍👨‍👧 👨‍👨‍👧‍👦 👨‍👨‍👦‍👦 👨‍👨‍👧‍👧 👩‍👦 👩‍👧 👩‍👧‍👦 👩‍👦‍👦 👩‍👧‍👧 👨‍👦 👨‍👧 👨‍👧‍👦 👨‍👦‍👦 👨‍👧‍👧 👚 👕 👖 👔 👗 👙 👘 👠 👡 👢 👞 👟 👒 🎩 🎓 👑 ⛑ 🎒 👝 👛 👜 💼 👓 🕶 🤿 🌂 ☂️ 🧣 🧤 🧥 🦺 🥻 🩱 🩲 🩳 🩰 🧦 🧢 ⛷ 🏂 🏋️‍♀️ 🏋️ 🤺 🤼‍♀️ 🤼‍♂️ 🤸‍♀️ 🤸‍♂️ ⛹️‍♀️ ⛹️ 🤾‍♀️ 🤾‍♂️ 🏌️‍♀️ 🏌️ 🏄‍♀️ 🏄 🏊‍♀️ 🏊 🤽‍♀️ 🤽‍♂️ 🚣‍♀️ 🚣 🏇 🚴‍♀️ 🚴 🚵‍♀️ 🚵 🤹‍♀️ 🤹‍♂️ 🧗‍♀️ 🧗‍♂️ 🧘‍♀️ 🧘‍♂️ 🥰 🥵 🥶 🥳 🥴 🥺 🦸 🦹 🧑‍🦰 🧑‍🦱 🧑‍🦳 🧑‍🦲 🧑‍⚕️ 🧑‍🎓 🧑‍🏫 🧑‍⚖️ 🧑‍🌾 🧑‍🍳 🧑‍🔧 🧑‍🏭 🧑‍💼 🧑‍🔬 🧑‍💻 🧑‍🎤 🧑‍🎨 🧑‍✈️ 🧑‍🚀 🧑‍🚒 🧑‍🦯 🧑‍🦼 🧑‍🦽 🦰 🦱 🦲 🦳 -// \\ /** @deprecated Use `factory.createImportClause` or the factory supplied by your transformation context instead. */ -// \\ ts.createImportClause = ts.Debug.deprecate(function createImportClause(name, namedBindings, isTypeOnly) {👨🏿‍🎤 👩🏿‍🏫 👨🏿‍🏫 👩🏿‍🏭 👨🏿‍🏭 👩🏿‍💻 👨🏿‍💻 👩🏿‍💼 👨🏿‍💼 👩🏿‍🔧 👨🏿‍🔧 👩🏿‍🔬 👨🏿‍🔬 👩🏿‍🎨 👨🏿‍🎨 👩🏿‍🚒 👨🏿‍🚒 👩🏿‍✈️ 👨🏿‍✈️ 👩🏿‍🚀 👨🏿‍🚀 👩🏿‍⚖️ 👨🏿‍⚖️ 🤶🏿 🎅🏿 👸🏿 🤴🏿 👰🏿 🤵🏿 👼🏿 🤰🏿 🙇🏿‍♀️ 🙇🏿 💁🏿 💁🏿‍♂️ 🙅🏿 🙅🏿‍♂️ 🙆🏿 🙆🏿‍♂️ 🙋🏿 🙋🏿‍♂️ 🤦🏿‍♀️ 🤦🏿‍♂️ 🤷🏿‍♀️ 🤷🏿‍♂️ 🙎🏿 🙎🏿‍♂️ 🙍🏿 🙍🏿‍♂️ 💇🏿 💇🏿‍♂️ 💆🏿 💆🏿‍♂️ 🕴🏿 💃🏿 🕺🏿 🚶🏿‍♀️ 🚶🏿 🏃🏿‍♀️ 🏃🏿 🏋🏿‍♀️ 🏋🏿 🤸🏿‍♀️ 🤸🏿‍♂️ ⛹🏿‍♀️ ⛹🏿 🤾🏿‍♀️ 🤾🏿‍♂️ 🏌🏿‍♀️ 🏌🏿 🏄🏿‍♀️ 🏄🏿 🏊🏿‍♀️ 🏊🏿 🤽🏿‍♀️ 🤽🏿‍♂️ 🚣🏿‍♀️ 🚣🏿 🏇🏿 🚴🏿‍♀️ 🚴🏿 🚵🏿‍♀️ 🚵🏿 🤹🏿‍♀️ 🤹🏿‍♂️ 🛀🏿 🧒🏿 🧑🏿 🧓🏿 🧕🏿 🧔🏿 🤱🏿 🧙🏿‍♀️ 🧙🏿‍♂️ 🧚🏿‍♀️ 🧚🏿‍♂️ 🧛🏿‍♀️ 🧛🏿‍♂️ 🧜🏿‍♀️ 🧜🏿‍♂️ 🧝🏿‍♀️ 🧝🏿‍♂️ 🧖🏿‍♀️ 🧖🏿‍♂️ 🧗🏿‍♀️ 🧗🏿‍♂️ 🧘🏿‍♀️ 🧘🏿‍♂️ 🤟🏿 🤲🏿 💏🏿 💑🏿 🤏🏿 🦻🏿 🧏🏿 🧏🏿‍♂️ 🧏🏿‍♀️ 🧍🏿 🧍🏿‍♂️ 🧍🏿‍♀️ 🧎🏿 🧎🏿‍♂️ 🧎🏿‍♀️ 👨🏿‍🦯 👩🏿‍🦯 👨🏿‍🦼 👩🏿‍🦼 👨🏿‍🦽 👩🏿‍🦽 🧑🏿‍🤝‍🧑🏿 🧑🏿‍🦰 🧑🏿‍🦱 🧑🏿‍🦳 🧑🏿‍🦲 🧑🏿‍⚕️ 🧑🏿‍🎓 🧑🏿‍🏫 🧑🏿‍⚖️ 🧑🏿‍🌾 🧑🏿‍🍳 🧑🏿‍🔧 🧑🏿‍🏭 🧑🏿‍💼 🧑🏿‍🔬 🧑🏿‍💻 🧑🏿‍🎤 🧑🏿‍🎨 🧑🏿‍✈️ 🧑🏿‍🚀 🧑🏿‍🚒 🧑🏿‍🦯 🧑🏿‍🦼 🧑🏿‍🦽 -// \\ return ts.factory.createImportClause(isTypeOnly, name, namedBindings); -// \\ }, factoryDeprecation);👨🏿‍🎤 👩🏿‍🏫 👨🏿‍🏫 👩🏿‍🏭 👨🏿‍🏭 👩🏿‍💻 👨🏿‍💻 👩🏿‍💼 👨🏿‍💼 👩🏿‍🔧 👨🏿‍🔧 👩🏿‍🔬 👨🏿‍🔬 👩🏿‍🎨 👨🏿‍🎨 👩🏿‍🚒 👨🏿‍🚒 👩🏿‍✈️ 👨🏿‍✈️ 👩🏿‍🚀 👨🏿‍🚀 👩🏿‍⚖️ 👨🏿‍⚖️ 🤶🏿 🎅🏿 👸🏿 🤴🏿 👰🏿 🤵🏿 👼🏿 🤰🏿 🙇🏿‍♀️ 🙇🏿 💁🏿👨🏿‍🎤 👩🏿‍🏫 👨🏿‍🏫 👩🏿‍🏭 👨🏿‍🏭 👩🏿‍💻 👨🏿‍💻 👩🏿‍💼 👨🏿‍💼 👩🏿‍🔧 👨🏿‍🔧 👩🏿‍🔬 👨🏿‍🔬 👩🏿‍🎨 👨🏿‍🎨 👩🏿‍🚒 👨🏿‍🚒 👩🏿‍✈️ 👨🏿‍✈️ 👩🏿‍🚀 👨🏿‍🚀 👩🏿‍⚖️ 👨🏿‍⚖️ 🤶🏿 🎅🏿 👸🏿 🤴🏿 👰🏿 🤵🏿 👼🏿 🤰🏿 🙇🏿‍♀️ 🙇🏿 💁🏿 💁🏿‍♂️ 🙅🏿 🙅🏿‍♂️ 🙆🏿 🙆🏿‍♂️ 🙋🏿 🙋🏿‍♂️ 🤦🏿‍♀️ 🤦🏿‍♂️ 🤷🏿‍♀️ 🤷🏿‍♂️ 🙎🏿 🙎🏿‍♂️ 🙍🏿 🙍🏿‍♂️ 💇🏿 💇🏿‍♂️ 💆🏿 💆🏿‍♂️ 🕴🏿 💃🏿 🕺🏿 🚶🏿‍♀️ 🚶🏿 🏃🏿‍♀️ 🏃🏿 🏋🏿‍♀️ 🏋🏿 🤸🏿‍♀️ 🤸🏿‍♂️ ⛹🏿‍♀️ ⛹🏿 🤾🏿‍♀️ 🤾🏿‍♂️ 🏌🏿‍♀️ 🏌🏿 🏄🏿‍♀️ 🏄🏿 🏊🏿‍♀️ 🏊🏿 🤽🏿‍♀️ 🤽🏿‍♂️ 🚣🏿‍♀️ 🚣🏿 🏇🏿 🚴🏿‍♀️ 🚴🏿 🚵🏿‍♀️ 🚵🏿 🤹🏿‍♀️ 🤹🏿‍♂️ 🛀🏿 🧒🏿 🧑🏿 🧓🏿 🧕🏿 🧔🏿 🤱🏿 🧙🏿‍♀️ 🧙🏿‍♂️ 🧚🏿‍♀️ 🧚🏿‍♂️ 🧛🏿‍♀️ 🧛🏿‍♂️ 🧜🏿‍♀️ 🧜🏿‍♂️ 🧝🏿‍♀️ 🧝🏿‍♂️ 🧖🏿‍♀️ 🧖🏿‍♂️ 🧗🏿‍♀️ 🧗🏿‍♂️ 🧘🏿‍♀️ 🧘🏿‍♂️ 🤟🏿 🤲🏿 💏🏿 💑🏿 🤏🏿 🦻🏿 🧏🏿 🧏🏿‍♂️ 🧏🏿‍♀️ 🧍🏿 🧍🏿‍♂️ 🧍🏿‍♀️ 🧎🏿 🧎🏿‍♂️ 🧎🏿‍♀️ 👨🏿‍🦯 👩🏿‍🦯 👨🏿‍🦼 👩🏿‍🦼 👨🏿‍🦽 👩🏿‍🦽 🧑🏿‍🤝‍🧑🏿 🧑🏿‍🦰 🧑🏿‍🦱 🧑🏿‍🦳 🧑🏿‍🦲 🧑🏿‍⚕️ 🧑🏿‍🎓 🧑🏿‍🏫 🧑🏿‍⚖️ 🧑🏿‍🌾 🧑🏿‍🍳 🧑🏿‍🔧 🧑🏿‍🏭 🧑🏿‍💼 🧑🏿‍🔬 🧑🏿‍💻 🧑🏿‍🎤 🧑🏿‍🎨 🧑🏿‍✈️ 🧑🏿‍🚀 🧑🏿‍🚒 🧑🏿‍🦯 🧑🏿‍🦼 🧑🏿‍🦽 💁🏿‍♂️ 🙅🏿 🙅🏿‍♂️ 🙆🏿 🙆🏿‍♂️ 🙋🏿 🙋🏿‍♂️ 🤦🏿‍♀️ 🤦🏿‍♂️ 🤷🏿‍♀️ 🤷🏿‍♂️ 🙎🏿 🙎🏿‍♂️ 🙍🏿 🙍🏿‍♂️ 💇🏿 💇🏿‍♂️ 💆🏿 💆🏿‍♂️ 🕴🏿 💃🏿 🕺🏿 🚶🏿‍♀️ 🚶🏿 🏃🏿‍♀️ 🏃🏿 🏋🏿‍♀️ 🏋🏿 🤸🏿‍♀️ 🤸🏿‍♂️ ⛹🏿‍♀️ ⛹🏿 🤾🏿‍♀️ 🤾🏿‍♂️ 🏌🏿‍♀️ 🏌🏿 🏄🏿‍♀️ 🏄🏿 🏊🏿‍♀️ 🏊🏿 🤽🏿‍♀️ 🤽🏿‍♂️ 🚣🏿‍♀️ 🚣🏿 🏇🏿 🚴🏿‍♀️ 🚴🏿 🚵🏿‍♀️ 🚵🏿 🤹🏿‍♀️ 🤹🏿‍♂️ 🛀🏿 🧒🏿 🧑🏿 🧓🏿 🧕🏿 🧔🏿 🤱🏿 🧙🏿‍♀️ 🧙🏿‍♂️ 🧚🏿‍♀️ 🧚🏿‍♂️ 🧛🏿‍♀️ 🧛🏿‍♂️ 🧜🏿‍♀️ 🧜🏿‍♂️ 🧝🏿‍♀️ 🧝🏿‍♂️ 🧖🏿‍♀️ 🧖🏿‍♂️ 🧗🏿‍♀️ 🧗🏿‍♂️ 🧘🏿‍♀️ 🧘🏿‍♂️ 🤟🏿 🤲🏿 💏🏿 💑🏿 🤏🏿 🦻🏿 🧏🏿 🧏🏿‍♂️ 🧏🏿‍♀️ 🧍🏿 🧍🏿‍♂️ 🧍🏿‍♀️ 🧎🏿 🧎🏿‍♂️ 🧎🏿‍♀️ 👨🏿‍🦯 👩🏿‍🦯 👨🏿‍🦼 👩🏿‍🦼 👨🏿‍🦽 👩🏿‍🦽 🧑🏿‍🤝‍🧑🏿 🧑🏿‍🦰 🧑🏿‍🦱 🧑🏿‍🦳 🧑🏿‍🦲 🧑🏿‍⚕️ 🧑🏿‍🎓 🧑🏿‍🏫 🧑🏿‍⚖️ 🧑🏿‍🌾 🧑🏿‍🍳 🧑🏿‍🔧 🧑🏿‍🏭 🧑🏿‍💼 🧑🏿‍🔬 🧑🏿‍💻 🧑🏿‍🎤 🧑🏿‍🎨 🧑🏿‍✈️ 🧑🏿‍🚀 🧑🏿‍🚒 🧑🏿‍🦯 🧑🏿‍🦼 🧑🏿‍🦽ry supplied by your transformation context instead. */ -// \\ ts.updateImportClause = ts.Debug.deprecate(function updateImportClause(node, name, namedBindings, isTypeOnly) { -// \\ return ts.factory.updateImportClause(node, isTypeOnly, name, namedBindings); -// \\ }, factoryDeprecation);👨🏿‍🎤 👩🏿‍🏫 👨🏿‍🏫 👩🏿‍🏭 👨🏿‍🏭 👩🏿‍💻 👨🏿‍💻 👩🏿‍💼 👨🏿‍💼 👩🏿‍🔧 👨🏿‍🔧 👩🏿‍🔬 👨🏿‍🔬 👩🏿‍🎨 👨🏿‍🎨 👩🏿‍🚒 👨🏿‍🚒 👩🏿‍✈️ 👨🏿‍✈️ 👩🏿‍🚀 👨🏿‍🚀 👩🏿‍⚖️ 👨🏿‍⚖️ 🤶🏿 🎅🏿 👸🏿 🤴🏿 👰🏿 🤵🏿 👼🏿 🤰🏿 🙇🏿‍♀️ 🙇🏿 💁🏿 💁🏿‍♂️ 🙅🏿 🙅🏿‍♂️ 🙆🏿 🙆🏿‍♂️ 🙋🏿 🙋🏿‍♂️ 🤦🏿‍♀️ 🤦🏿‍♂️ 🤷🏿‍♀️ 🤷🏿‍♂️ 🙎🏿 🙎🏿‍♂️ 🙍🏿 🙍🏿‍♂️ 💇🏿 💇🏿‍♂️ 💆🏿 💆🏿‍♂️ 🕴🏿 💃🏿 🕺🏿 🚶🏿‍♀️ 🚶🏿 🏃🏿‍♀️ 🏃🏿 🏋🏿‍♀️ 🏋🏿 🤸🏿‍♀️ 🤸🏿‍♂️ ⛹🏿‍♀️ ⛹🏿 🤾🏿‍♀️ 🤾🏿‍♂️ 🏌🏿‍♀️ 🏌🏿 🏄🏿‍♀️ 🏄🏿 🏊🏿‍♀️ 🏊🏿 🤽🏿‍♀️ 🤽🏿‍♂️ 🚣🏿‍♀️ 🚣🏿 🏇🏿 🚴🏿‍♀️ 🚴🏿 🚵🏿‍♀️ 🚵🏿 🤹🏿‍♀️ 🤹🏿‍♂️ 🛀🏿 🧒🏿 🧑🏿 🧓🏿 🧕🏿 🧔🏿 🤱🏿 🧙🏿‍♀️ 🧙🏿‍♂️ 🧚🏿‍♀️ 🧚🏿‍♂️ 🧛🏿‍♀️ 🧛🏿‍♂️ 🧜🏿‍♀️ 🧜🏿‍♂️ 🧝🏿‍♀️ 🧝🏿‍♂️ 🧖🏿‍♀️ 🧖🏿‍♂️ 🧗🏿‍♀️ 🧗🏿‍♂️ 🧘🏿‍♀️ 🧘🏿‍♂️ 🤟🏿 🤲🏿 💏🏿 💑🏿 🤏🏿 🦻🏿 🧏🏿 🧏🏿‍♂️ 🧏🏿‍♀️ 🧍🏿 🧍🏿‍♂️ 🧍🏿‍♀️ 🧎🏿 🧎🏿‍♂️ 🧎🏿‍♀️ 👨🏿‍🦯 👩🏿‍🦯 👨🏿‍🦼 👩🏿‍🦼 👨🏿‍🦽 👩🏿‍🦽 🧑🏿‍🤝‍🧑🏿 🧑🏿‍🦰 🧑🏿‍🦱 🧑🏿‍🦳 🧑🏿‍🦲 🧑🏿‍⚕️ 🧑🏿‍🎓 🧑🏿‍🏫 🧑🏿‍⚖️ 🧑🏿‍🌾 🧑🏿‍🍳 🧑🏿‍🔧 🧑🏿‍🏭 🧑🏿‍💼 🧑🏿‍🔬 🧑🏿‍💻 🧑🏿‍🎤 🧑🏿‍🎨 🧑🏿‍✈️ 🧑🏿‍🚀 🧑🏿‍🚒 🧑🏿‍🦯 🧑🏿‍🦼 🧑🏿‍🦽 -// \\ /** @deprecated Use `factory.createExportDeclaration` or the factory supplied by your transformation context instead. */👨🏿‍🎤 👩🏿‍🏫 👨🏿‍🏫 👩🏿‍🏭 👨🏿‍🏭 👩🏿‍💻 👨🏿‍💻 👩🏿‍💼 👨🏿‍💼 👩🏿‍🔧 👨🏿‍🔧 👩🏿‍🔬 👨🏿‍🔬 👩🏿‍🎨 👨🏿‍🎨 👩🏿‍🚒 👨🏿‍🚒 👩🏿‍✈️ 👨🏿‍✈️ 👩🏿‍🚀 👨🏿‍🚀 👩🏿‍⚖️ 👨🏿‍⚖️ 🤶🏿 🎅🏿 👸🏿 🤴🏿 👰🏿 🤵🏿 👼🏿 🤰🏿 🙇🏿‍♀️ 🙇🏿 💁🏿 💁🏿‍♂️ 🙅🏿 🙅🏿‍♂️ 🙆🏿 🙆🏿‍♂️ 🙋🏿 🙋🏿‍♂️ 🤦🏿‍♀️ 🤦🏿‍♂️ 🤷🏿‍♀️ 🤷🏿‍♂️ 🙎🏿 🙎🏿‍♂️ 🙍🏿 🙍🏿‍♂️ 💇🏿 💇🏿‍♂️ 💆🏿 💆🏿‍♂️ 🕴🏿 💃🏿 🕺🏿 🚶🏿‍♀️ 🚶🏿 🏃🏿‍♀️ 🏃🏿 🏋🏿‍♀️ 🏋🏿 🤸🏿‍♀️ 🤸🏿‍♂️ ⛹🏿‍♀️ ⛹🏿 🤾🏿‍♀️ 🤾🏿‍♂️ 🏌🏿‍♀️ 🏌🏿 🏄🏿‍♀️ 🏄🏿 🏊🏿‍♀️ 🏊🏿 🤽🏿‍♀️ 🤽🏿‍♂️ 🚣🏿‍♀️ 🚣🏿 🏇🏿 🚴🏿‍♀️ 🚴🏿 🚵🏿‍♀️ 🚵🏿 🤹🏿‍♀️ 🤹🏿‍♂️ 🛀🏿 🧒🏿 🧑🏿 🧓🏿 🧕🏿 🧔🏿 🤱🏿 🧙🏿‍♀️ 🧙🏿‍♂️ 🧚🏿‍♀️ 🧚🏿‍♂️ 🧛🏿‍♀️ 🧛🏿‍♂️ 🧜🏿‍♀️ 🧜🏿‍♂️ 🧝🏿‍♀️ 🧝🏿‍♂️ 🧖🏿‍♀️ 🧖🏿‍♂️ 🧗🏿‍♀️ 🧗🏿‍♂️ 🧘🏿‍♀️ 🧘🏿‍♂️ 🤟🏿 🤲🏿 💏🏿 💑🏿 🤏🏿 🦻🏿 🧏🏿 🧏🏿‍♂️ 🧏🏿‍♀️ 🧍🏿 🧍🏿‍♂️ 🧍🏿‍♀️ 🧎🏿 🧎🏿‍♂️ 🧎🏿‍♀️ 👨🏿‍🦯 👩🏿‍🦯 👨🏿‍🦼 👩🏿‍🦼 👨🏿‍🦽 👩🏿‍🦽 🧑🏿‍🤝‍🧑🏿 🧑🏿‍🦰 🧑🏿‍🦱 🧑🏿‍🦳 🧑🏿‍🦲 🧑🏿‍⚕️ 🧑🏿‍🎓 🧑🏿‍🏫 🧑🏿‍⚖️ 🧑🏿‍🌾 🧑🏿‍🍳 🧑🏿‍🔧 🧑🏿‍🏭 🧑🏿‍💼 🧑🏿‍🔬 🧑🏿‍💻 🧑🏿‍🎤 🧑🏿‍🎨 🧑🏿‍✈️ 🧑🏿‍🚀 🧑🏿‍🚒 🧑🏿‍🦯 🧑🏿‍🦼 🧑🏿‍🦽 -// \\ ts.createExportDeclaration = ts.Debug.deprecate(function createExportDeclaration(decorators, modifiers, exportClause, moduleSpecifier, isTypeOnly) { -// \\ if (isTypeOnly === void 0) { isTypeOnly = false; } -// \\ return ts.factory.createExportDeclaration(decorators, modifiers, isTypeOnly, exportClause, moduleSpecifier);😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 🤪 😜 😝 😛 🤑 🤗 🤓 😎 🤡 🤠 😏 😒 😞 😔 😟 😕 🙁 ☹️ 😣 😖 😫 😩 😤 😠 😡 🤬 😶 😐 😑 😯 😦 😧 😮 😲 😵 🤯 😳 😱 😨 😰 😢 -// \\ }, factoryDeprecation); -// \\ /** @deprecated Use `factory.updateExportDeclaration` or the factory supplied by your transformation context instead. */ -// \\ ts.updateEx 🐱‍👤 🐱‍🚀 🐱‍🐉 🐱‍💻 🐱‍🏍portDeclaration = ts.Debug.deprecate(function updateExportDeclaration(node, decorators, modifiers, exportClause, moduleSpecifier, isTypeOnly) { -// \\ return ts.factory.updateExportDeclaration(node, decorators, modifiers, isTypeOnly, exportClause, moduleSpecifier); -// \\ }, factory 🐱‍👤 🐱‍🚀 🐱‍🐉 🐱‍💻 🐱‍🏍Deprecation); -// \\ /** @deprecated Use `factory.createJSDocParameterTag` or the factory supplied by your transformation context instead. */ -// \\ ts.createJSDocPar 🐱‍👤 🐱‍🚀 🐱‍🐉 🐱‍💻 🐱‍🏍amTag = ts.Debug 🐱‍👤 🐱‍🚀 🐱‍🐉 🐱‍💻 🐱‍🏍.deprecate(function createJSDocParamTag(name, isBracketed, typeExpression, comment) { -// \\ return ts.factory.createJSDocParameterTag(/*tagName*/ undefined, name, isBracketed, typeExpression, /*isNameFirst*/ false, comment ? ts.factory.createNodeArray([ts.factory.createJSDocText(comment)]) : undefivned); -// \\ }, factoryDeprecation); -// \\ /** @deprecated Use `factory.createComma` or the factory supplied by your transformation context instead. */ -// \\ ts.createComma = ts.Debug.deprecate(function createComma(left, right) { -// \\ return ts.factory.createComma(left, right); -// \\ 🐱‍👤 🐱‍🚀 🐱‍🐉 🐱‍💻 🐱‍🏍🐱‍🏍 }, factoryDeprecation); -// \\ /** @deprecated 🐱‍👤 🐱‍🚀 🐱‍🐉 🐱‍💻 🐱‍🏍Use `factory.createLessThan` or the factory supplied by your transformation context instead. */ -// \\ ts.createLessThan = ts.Debug.deprecate(function createLessThan(left, right) {😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 🤪 😜 😝 😛 🤑 🤗 🤓 😎 🤡 🤠 😏 😒 😞 😔 😟 😕 🙁 ☹️ 😣 😖 😫 😩 😤 😠 😡 🤬 😶 😐 😑 😯 😦 😧 😮 😲 😵 🤯 😳 😱 😨 😰 😢 -// \\ }, factoryDeprecation); -// \\ /** @ 🐱‍👤 🐱‍🚀 🐱‍🐉 🐱‍💻 🐱‍🏍deprecated Use `factory.createAssignment` or the factory supplied by your transformation context instead. */😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 🤪 😜 😝 😛 🤑 🤗 🤓 😎 🤡 🤠 😏 😒 😞 😔 😟 😕 🙁 ☹️ 😣 😖 😫 😩 😤 😠 😡 🤬 😶 😐 😑 😯 😦 😧 😮 😲 😵 🤯 😳 😱 😨 😰 😢 -// \\ /** @deprecated Use `factory.createStrictEquality` or the factory supplied by your transformation context instead. */ -// \\ ts.createStrictEquality = ts.Debug.dep 🐱‍👤 🐱‍🚀 🐱‍🐉 🐱‍💻 🐱‍🏍recate(function createStrictEquality(left, right) { -// \\ return ts.factory.createStrictEquality(left, right);😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 🤪 😜 😝 😛 🤑 🤗 🤓 😎 🤡 🤠 😏 😒 😞 😔 😟 😕 🙁 ☹️ 😣 😖 😫 😩 😤 😠 😡 🤬 😶 😐 😑 😯 😦 😧 😮 😲 😵 🤯 😳 😱 😨 😰 😢😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 🤪 😜 😝 😛 🤑 🤗 🤓 😎 🤡 🤠 😏 😒 😞 😔 😟 😕 🙁 ☹️ 😣 😖 😫 😩 😤 😠 😡 🤬 😶 😐 😑 😯 😦 😧 😮 😲 😵 🤯 😳 😱 😨 😰 😢 -// \\ }, factoryDeprecation); -// \\ /** @deprecated 🐱‍🐉 🐱‍💻 🐱‍👤 🐱‍🚀Use `factory.createStrictInequality` or the factory supplied by your transformation context instead. */ -// \\ ts.createStrictInequality = ts.Debug.deprecate(function createStrictInequality(left, right) { -// \\ return ts.factory.createStrictInequality(left, right); -// \\ }, factoryDeprecation); -// \\ /** @deprecated Use `factory.createAdd` or the factory supplied b😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 🤪 😜 😝 😛 🤑 🤗 🤓 😎 🤡 🤠 😏 😒 😞 😔 😟 😕 🙁 ☹️ 😣 😖 😫 😩 😤 😠 😡 🤬 😶 😐 😑 😯 😦 😧 😮 😲 😵 🤯 😳 😱 😨 😰 😢 -// \\ return ts.factory.createSubtract(left, right); -// \\ }, factoryDeprecation); -// \\ /** @deprecated Use `factory.createLogicalAnd` or the factory supplied by your transformation context instead. */ -// \\ ts.createLogicalAnd = ts.Debug.deprecate(function createLogicalAnd(left, right) { -// \\ return ts.factory.createLogicalAnd(left, right);😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 🤪 😜 😝 😛 🤑 🤗 🤓 😎 🤡 🤠 😏 😒 😞 😔 😟 😕 🙁 ☹️ 😣 😖 😫 😩 😤 😠 😡 🤬 😶 😐 😑 😯 😦 😧 😮 😲 😵 🤯 😳 😱 😨 😰 😢😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 🤪 😜 😝 😛 🤑 🤗 🤓 😎 🤡 🤠 😏 😒 😞 😔 😟 😕 🙁 ☹️ 😣 😖 😫 😩 😤 😠 😡 🤬 😶 😐 😑 😯 😦 😧 😮 😲 😵 🤯 😳 😱 😨 😰 😢 -// \\ }, factoryDeprecation); -// \\ /** @deprecated Use `factory.createLogicalOr` or the factory supplied by your transformation context instead. */ -// \\ ts.createLogicalOr = ts.Debug.deprecate(function createLogicalOr(left, right) {😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 🤪 😜 😝 😛 🤑 🤗 🤓 😎 🤡 🤠 😏 😒 😞 😔 😟 😕 🙁 ☹️ 😣 😖 😫 😩 😤 😠 😡 🤬 😶 😐 😑 😯 😦 😧 😮 😲 😵 🤯 😳 😱 😨 😰 😢 -// \\ return ts.factory.createLogicalOr(left, right);😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 🤪 😜 😝 😛 🤑 🤗 🤓 😎 🤡 🤠 😏 😒 😞 😔 😟 😕 🙁 ☹️ 😣 😖 😫 😩 😤 😠 😡 🤬 😶 😐 😑 😯 😦 😧 😮 😲 😵 🤯 😳 😱 😨 😰 😢 -// \\ }, factoryDeprecation);😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 🤪 😜 😝 😛 🤑 🤗 🤓 😎 🤡 🤠 😏 😒 😞 😔 😟 😕 🙁 ☹️ 😣 😖 😫 😩 😤 😠 😡 🤬 😶 😐 😑 😯 😦 😧 😮 😲 😵 🤯 😳 😱 😨 😰 😢supplied by your transformation context instead. */ -// \\ ts.createPostfixIncrement = ts.Debug.deprecate(function createPostfixIncrement(operand) {😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 🤪 😜 😝 😛 🤑 🤗 🤓 😎 🤡 🤠 😏 😒 😞 😔 😟 😕 🙁 ☹️ 😣 😖 😫 😩 😤 😠 😡 🤬 😶 😐 😑 😯 😦 😧 😮 😲 😵 🤯 😳 😱 😨 😰 😢 -// \\ return ts.factory.createPostfixIncrement(operand);😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 🤪 😜 😝 😛 🤑 🤗 🤓 😎 🤡 🤠 😏 😒 😞 😔 😟 😕 🙁 ☹️ 😣 😖 😫 😩 😤 😠 😡 🤬 😶 😐 😑 😯 😦 😧 😮 😲 😵 🤯 😳 😱 😨 😰 😢 -// \\ }, factoryDeprecation); -// \\ /** @deprecated Use an appropriate `factory` method instead. */ -// \\ ts.createNode = ts.Debug.deprecate(function createNode(kind, pos, end) { -// \\ if (pos === void 0) { pos = 0; }😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 🤪 😜 😝 😛 🤑 🤗 🤓 😎 🤡 🤠 😏 😒 😞 😔 😟 😕 🙁 ☹️ 😣 😖 😫 😩 😤 😠 😡 🤬 😶 😐 😑 😯 😦 😧 😮 😲 😵 🤯 😳 😱 😨 😰 😢NodeFactory.createBaseSourceFileNode(kind) : -// \\ kind === 79 /* Identifier */ ? ts.parseBaseNodeFactory.createBaseIdentifierNode(kind) : -// \\ kind === 80 /* PrivateIdentifier */ ? ts.parseBaseNodeFactory.createBasePrivateIdentifierNode(kind) : -// \\ !ts.isNodeKind(kind) ? ts.parseBaseNodeFactory.createBaseTokenNode(kind) :😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 🤪 😜 😝 😛 🤑 🤗 🤓 😎 🤡 🤠 😏 😒 😞 😔 😟 😕 🙁 ☹️ 😣 😖 😫 😩 😤 😠 😡 🤬 😶 😐 😑 😯 😦 😧 😮 😲 😵 🤯 😳 😱 😨 😰 😢a node ~for mutation~ with its `pos`, `end`, and `parent` set. -// \\ * -// \\ * NOTE: It is unsafe to change any properties of a `Node` that relate to its AST children, as those changes won't be -// \\ * captured with respect to transformations. -// \\ * -// \\ * @deprecated Use an appropriate `factory.update...` method instead, use `setCommentRange` or `setSourceMapRange`, and avoid setting `parent`.😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 🤪 😜 😝 😛 🤑 🤗 🤓 😎 🤡 🤠 😏 😒 😞 😔 😟 😕 🙁 ☹️ 😣 😖 😫 😩 😤 😠 😡 🤬 😶 😐 😑 😯 😦 😧 😮 😲 😵 🤯 😳 😱 😨 😰 😢 -// \\ ts.setTextRange(clone, node); -// \\ ts.setParent(clone, node.parent); -// \\ return clone;😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 🤪 😜 😝 😛 🤑 🤗 🤓 😎 🤡 🤠 😏 😒 😞 😔 😟 😕 🙁 ☹️ 😣 😖 😫 😩 😤 😠 😡 🤬 😶 😐 😑 😯 😦 😧 😮 😲 😵 🤯 😳 😱 😨 😰 😢 -// \\ }, { since: "4.0", warnAfter: "4.1", message: "Use an appropriate `factory.update...` method instead, use `setCommentRange` or `setSourceMapRange`, and avoid setting `parent`." }); -// \\ // #endregion Node Factory top-level exports -// \\ // DEPRECATION: Renamed node tests -// \\ // DEPRECATION PLAN:🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 -// \\ // - soft: 4.0 -// \\ // - warn: 4.1 -// \\ // - error: TBD -// \\ // #region Renamed node Tests -// \\ /** @deprecated Use `isTypeAssertionExpression` instead. */ -// \\ ts.isTypeAssertion = ts.Debug.deprecate(function isTypeAssertion(node) { -// \\ return node.kind === 209 /* TypeAssertionExpression */; -// \\ }, { -// \\ since: "4.0", -// \\ warnAfter: "4.1", -// \\ message: "Use `isTypeAssertionExpression` instead." -// \\ }); -// \\ // #endregion -// \\ // DEPRECATION: Renamed node tests -// \\ // DEPRECATION PLAN: -// \\ // - soft: 4.2 -// \\ // - warn: 4.3 -// \\ // - error: TBD -// \\ // #region Renamed node Tests -// \\ /** -// \\ * @deprecated Use `isMemberName` instead. -// \\ */ -// \\ ts.isIdentifierOrPrivateIdentifier = ts.Debug.deprecate(function isIdentifierOrPrivateIdentifier(node) { -// \\ return ts.isMemberName(node); -// \\ }, { -// \\ since: "4.2", -// \\ warnAfter: "4.3", -// \\ message: "Use `isMemberName` instead." -// \\ }); -// \\ // #endregion Renamed node Tests -// \\})(ts || (ts = {})); -// ; -// const ascii_text: []const u8 = -// \\ -// \\package js_lexer -// \\ -// \\// The lexer converts a source file to a stream of tokens. Unlike many -// \\// compilers, esbuild does not run the lexer to completion before the parser is -// \\// started. Instead, the lexer is called repeatedly by the parser as the parser -// \\// parses the file. This is because many tokens are context-sensitive and need -// \\// high-level information from the parser. Examples are regular expression -// \\// literals and JSX elements. -// \\// -// \\// For efficiency, the text associated with textual tokens is stored in two -// \\// separate ways depending on the token. Identifiers use UTF-8 encoding which -// \\// allows them to be slices of the input file without allocating extra memory. -// \\// Strings use UTF-16 encoding so they can represent unicode surrogates -// \\// accurately. -// \\ -// \\import ( -// \\"fmt" -// \\"strconv" -// \\"strings" -// \\"unicode" -// \\"unicode/utf8" -// \\ -// \\"github.com/evanw/esbuild/internal/js_ast" -// \\"github.com/evanw/esbuild/internal/logger" -// \\) -// \\ -// \\type T uint -// \\ -// \\// If you add a new token, remember to add it to "tokenToString" too -// \\const ( -// \\TEndOfFile T = iota -// \\TSyntaxError -// \\ -// \\// "#!/usr/bin/env node" -// \\THashbang -// \\ -// \\// Literals -// \\TNoSubstitutionTemplateLiteral // Contents are in lexer.StringLiteral ([]uint16) -// \\TNumericLiteral // Contents are in lexer.Number (float64) -// \\TStringLiteral // Contents are in lexer.StringLiteral ([]uint16) -// \\TBigIntegerLiteral // Contents are in lexer.Identifier (string) -// \\ -// \\// Pseudo-literals -// \\TTemplateHead // Contents are in lexer.StringLiteral ([]uint16) -// \\TTemplateMiddle // Contents are in lexer.StringLiteral ([]uint16) -// \\TTemplateTail // Contents are in lexer.StringLiteral ([]uint16) -// \\ -// \\// Punctuation -// \\TAmpersand -// \\TAmpersandAmpersand -// \\TAsterisk -// \\TAsteriskAsterisk -// \\TAt -// \\TBar -// \\TBarBar -// \\TCaret -// \\TCloseBrace -// \\TCloseBracket -// \\TCloseParen -// \\TColon -// \\TComma -// \\TDot -// \\TDotDotDot -// \\TEqualsEquals -// \\TEqualsEqualsEquals -// \\TEqualsGreaterThan -// \\TExclamation -// \\TExclamationEquals -// \\TExclamationEqualsEquals -// \\TGreaterThan -// \\TGreaterThanEquals -// \\TGreaterThanGreaterThan -// \\TGreaterThanGreaterThanGreaterThan -// \\TLessThan -// \\TLessThanEquals -// \\TLessThanLessThan -// \\TMinus -// \\TMinusMinus -// \\TOpenBrace -// \\TOpenBracket -// \\TOpenParen -// \\TPercent -// \\TPlus -// \\TPlusPlus -// \\TQuestion -// \\TQuestionDot -// \\TQuestionQuestion -// \\TSemicolon -// \\TSlash -// \\TTilde -// \\ -// \\// Assignments (keep in sync with IsAssign() below) -// \\TAmpersandAmpersandEquals -// \\TAmpersandEquals -// \\TAsteriskAsteriskEquals -// \\TAsteriskEquals -// \\TBarBarEquals -// \\TBarEquals -// \\TCaretEquals -// \\TEquals -// \\TGreaterThanGreaterThanEquals -// \\TGreaterThanGreaterThanGreaterThanEquals -// \\TLessThanLessThanEquals -// \\TMinusEquals -// \\TPercentEquals -// \\TPlusEquals -// \\TQuestionQuestionEquals -// \\TSlashEquals -// \\ -// \\// Class-private fields and methods -// \\TPrivateIdentifier -// \\ -// \\// Identifiers -// \\TIdentifier // Contents are in lexer.Identifier (string) -// \\TEscapedKeyword // A keyword that has been escaped as an identifer -// \\ -// \\// Reserved words -// \\TBreak -// \\TCase -// \\TCatch -// \\TClass -// \\TConst -// \\TContinue -// \\TDebugger -// \\TDefault -// \\TDelete -// \\TDo -// \\TElse -// \\TEnum -// \\TExport -// \\TExtends -// \\TFalse -// \\TFinally -// \\TFor -// \\TFunction -// \\TIf -// \\TImport -// \\TIn -// \\TInstanceof -// \\TNew -// \\TNull -// \\TReturn -// \\TSuper -// \\TSwitch -// \\TThis -// \\TThrow -// \\TTrue -// \\TTry -// \\TTypeof -// \\TVar -// \\TVoid -// \\TWhile -// \\TWith -// \\) -// \\ -// \\func (t T) IsAssign() bool { -// \\return t >= TAmpersandAmpersandEquals && t <= TSlashEquals -// \\} -// \\ -// \\var Keywords = map[string]T{ -// \\// Reserved words -// \\"break": TBreak, -// \\"case": TCase, -// \\"catch": TCatch, -// \\"class": TClass, -// \\"const": TConst, -// \\"continue": TContinue, -// \\"debugger": TDebugger, -// \\"default": TDefault, -// \\"delete": TDelete, -// \\"do": TDo, -// \\"else": TElse, -// \\"enum": TEnum, -// \\"export": TExport, -// \\"extends": TExtends, -// \\"false": TFalse, -// \\"finally": TFinally, -// \\"for": TFor, -// \\"function": TFunction, -// \\"if": TIf, -// \\"import": TImport, -// \\"in": TIn, -// \\"instanceof": TInstanceof, -// \\"new": TNew, -// \\"null": TNull, -// \\"return": TReturn, -// \\"super": TSuper, -// \\"switch": TSwitch, -// \\"this": TThis, -// \\"throw": TThrow, -// \\"true": TTrue, -// \\"try": TTry, -// \\"typeof": TTypeof, -// \\"var": TVar, -// \\"void": TVoid, -// \\"while": TWhile, -// \\"with": TWith, -// \\} -// \\ -// \\var StrictModeReservedWords = map[string]bool{ -// \\"implements": true, -// \\"interface": true, -// \\"let": true, -// \\"package": true, -// \\"private": true, -// \\"protected": true, -// \\"public": true, -// \\"static": true, -// \\"yield": true, -// \\} -// \\ -// \\type json struct { -// \\parse bool -// \\allowComments bool -// \\} -// \\ -// \\type Lexer struct { -// \\log logger.Log -// \\source logger.Source -// \\tracker logger.LineColumnTracker -// \\current int -// \\start int -// \\end int -// \\ApproximateNewlineCount int -// \\LegacyOctalLoc logger.Loc -// \\AwaitKeywordLoc logger.Loc -// \\FnOrArrowStartLoc logger.Loc -// \\PreviousBackslashQuoteInJSX logger.Range -// \\LegacyHTMLCommentRange logger.Range -// \\Token T -// \\HasNewlineBefore bool -// \\HasPureCommentBefore bool -// \\PreserveAllCommentsBefore bool -// \\IsLegacyOctalLiteral bool -// \\PrevTokenWasAwaitKeyword bool -// \\CommentsToPreserveBefore []js_ast.Comment -// \\AllOriginalComments []js_ast.Comment -// \\codePoint rune -// \\Identifier string -// \\JSXFactoryPragmaComment logger.Span -// \\JSXFragmentPragmaComment logger.Span -// \\SourceMappingURL logger.Span -// \\Number float64 -// \\rescanCloseBraceAsTemplateToken bool -// \\forGlobalName bool -// \\json json -// \\prevErrorLoc logger.Loc -// \\ -// \\// Escape sequences in string literals are decoded lazily because they are -// \\// not interpreted inside tagged templates, and tagged templates can contain -// \\// invalid escape sequences. If the decoded array is nil, the encoded value -// \\// should be passed to "tryToDecodeEscapeSequences" first. -// \\decodedStringLiteralOrNil []uint16 -// \\encodedStringLiteralStart int -// \\encodedStringLiteralText string -// \\ -// \\// The log is disabled during speculative scans that may backtrack -// \\IsLogDisabled bool -// \\} -// \\ -// \\type LexerPanic struct{} -// \\ -// \\func NewLexer(log logger.Log, source logger.Source) Lexer { -// \\lexer := Lexer{ -// \\log: log, -// \\source: source, -// \\tracker: logger.MakeLineColumnTracker(&source), -// \\prevErrorLoc: logger.Loc{Start: -1}, -// \\FnOrArrowStartLoc: logger.Loc{Start: -1}, -// \\} -// \\lexer.step() -// \\lexer.Next() -// \\return lexer -// \\} -// \\ -// \\func NewLexerGlobalName(log logger.Log, source logger.Source) Lexer { -// \\lexer := Lexer{ -// \\log: log, -// \\source: source, -// \\tracker: logger.MakeLineColumnTracker(&source), -// \\prevErrorLoc: logger.Loc{Start: -1}, -// \\FnOrArrowStartLoc: logger.Loc{Start: -1}, -// \\forGlobalName: true, -// \\} -// \\lexer.step() -// \\lexer.Next() -// \\return lexer -// \\} -// \\ -// \\func NewLexerJSON(log logger.Log, source logger.Source, allowComments bool) Lexer { -// \\lexer := Lexer{ -// \\log: log, -// \\source: source, -// \\tracker: logger.MakeLineColumnTracker(&source), -// \\prevErrorLoc: logger.Loc{Start: -1}, -// \\FnOrArrowStartLoc: logger.Loc{Start: -1}, -// \\json: json{ -// \\parse: true, -// \\allowComments: allowComments, -// \\}, -// \\} -// \\lexer.step() -// \\lexer.Next() -// \\return lexer -// \\} -// \\ -// \\func (lexer *Lexer) Loc() logger.Loc { -// \\return logger.Loc{Start: int32(lexer.start)} -// \\} -// \\ -// \\func (lexer *Lexer) Range() logger.Range { -// \\return logger.Range{Loc: logger.Loc{Start: int32(lexer.start)}, Len: int32(lexer.end - lexer.start)} -// \\} -// \\ -// \\func (lexer *Lexer) Raw() string { -// \\return lexer.source.Contents[lexer.start:lexer.end] -// \\} -// \\ -// \\func (lexer *Lexer) StringLiteral() []uint16 { -// \\if lexer.decodedStringLiteralOrNil == nil { -// \\// Lazily decode escape sequences if needed -// \\if decoded, ok, end := lexer.tryToDecodeEscapeSequences(lexer.encodedStringLiteralStart, lexer.encodedStringLiteralText, true /* reportErrors */); !ok { -// \\lexer.end = end -// \\lexer.SyntaxError() -// \\} else { -// \\lexer.decodedStringLiteralOrNil = decoded -// \\} -// \\} -// \\return lexer.decodedStringLiteralOrNil -// \\} -// \\ -// \\func (lexer *Lexer) CookedAndRawTemplateContents() ([]uint16, string) { -// \\var raw string -// \\ -// \\switch lexer.Token { -// \\case TNoSubstitutionTemplateLiteral, TTemplateTail: -// \\// "`x`" or "}x`" -// \\raw = lexer.source.Contents[lexer.start+1 : lexer.end-1] -// \\ -// \\case TTemplateHead, TTemplateMiddle: -// \\// "`x${" or "}x${" -// \\raw = lexer.source.Contents[lexer.start+1 : lexer.end-2] -// \\} -// \\ -// \\if strings.IndexByte(raw, '\r') != -1 { -// \\// From the specification: -// \\// -// \\// 11.8.6.1 Static Semantics: TV and TRV -// \\// -// \\// TV excludes the code units of LineContinuation while TRV includes -// \\// them. and LineTerminatorSequences are normalized to -// \\// for both TV and TRV. An explicit EscapeSequence is needed to -// \\// include a or sequence. -// \\ -// \\bytes := []byte(raw) -// \\end := 0 -// \\i := 0 -// \\ -// \\for i < len(bytes) { -// \\c := bytes[i] -// \\i++ -// \\ -// \\if c == '\r' { -// \\// Convert '\r\n' into '\n' -// \\if i < len(bytes) && bytes[i] == '\n' { -// \\i++ -// \\} -// \\ -// \\// Convert '\r' into '\n' -// \\c = '\n' -// \\} -// \\ -// \\bytes[end] = c -// \\end++ -// \\} -// \\ -// \\raw = string(bytes[:end]) -// \\} -// \\ -// \\// This will return nil on failure, which will become "undefined" for the tag -// \\cooked, _, _ := lexer.tryToDecodeEscapeSequences(lexer.start+1, raw, false /* reportErrors */) -// \\return cooked, raw -// \\} -// \\ -// \\func (lexer *Lexer) IsIdentifierOrKeyword() bool { -// \\return lexer.Token >= TIdentifier -// \\} -// \\ -// \\func (lexer *Lexer) IsContextualKeyword(text string) bool { -// \\return lexer.Token == TIdentifier && lexer.Raw() == text -// \\} -// \\ -// \\func (lexer *Lexer) ExpectContextualKeyword(text string) { -// \\if !lexer.IsContextualKeyword(text) { -// \\lexer.ExpectedString(fmt.Sprintf("%q", text)) -// \\} -// \\lexer.Next() -// \\} -// \\ -// \\func (lexer *Lexer) SyntaxError() { -// \\loc := logger.Loc{Start: int32(lexer.end)} -// \\message := "Unexpected end of file" -// \\if lexer.end < len(lexer.source.Contents) { -// \\c, _ := utf8.DecodeRuneInString(lexer.source.Contents[lexer.end:]) -// \\if c < 0x20 { -// \\message = fmt.Sprintf("Syntax error \"\\x%02X\"", c) -// \\} else if c >= 0x80 { -// \\message = fmt.Sprintf("Syntax error \"\\u{%x}\"", c) -// \\} else if c != '"' { -// \\message = fmt.Sprintf("Syntax error \"%c\"", c) -// \\} else { -// \\message = "Syntax error '\"'" -// \\} -// \\} -// \\lexer.addError(loc, message) -// \\panic(LexerPanic{}) -// \\} -// \\ -// \\func (lexer *Lexer) ExpectedString(text string) { -// \\// Provide a friendly error message about "await" without "async" -// \\if lexer.PrevTokenWasAwaitKeyword { -// \\var notes []logger.MsgData -// \\if lexer.FnOrArrowStartLoc.Start != -1 { -// \\note := logger.RangeData(&lexer.tracker, logger.Range{Loc: lexer.FnOrArrowStartLoc}, -// \\"Consider adding the \"async\" keyword here") -// \\note.Location.Suggestion = "async" -// \\notes = []logger.MsgData{note} -// \\} -// \\lexer.addRangeErrorWithNotes(RangeOfIdentifier(lexer.source, lexer.AwaitKeywordLoc), -// \\"\"await\" can only be used inside an \"async\" function", -// \\notes) -// \\panic(LexerPanic{}) -// \\} -// \\ -// \\found := fmt.Sprintf("%q", lexer.Raw()) -// \\if lexer.start == len(lexer.source.Contents) { -// \\found = "end of file" -// \\} -// \\lexer.addRangeError(lexer.Range(), fmt.Sprintf("Expected %s but found %s", text, found)) -// \\panic(LexerPanic{}) -// \\} -// \\ -// \\func (lexer *Lexer) Expected(token T) { -// \\if text, ok := tokenToString[token]; ok { -// \\lexer.ExpectedString(text) -// \\} else { -// \\lexer.Unexpected() -// \\} -// \\} -// \\ -// \\func (lexer *Lexer) Unexpected() { -// \\found := fmt.Sprintf("%q", lexer.Raw()) -// \\if lexer.start == len(lexer.source.Contents) { -// \\found = "end of file" -// \\} -// \\lexer.addRangeError(lexer.Range(), fmt.Sprintf("Unexpected %s", found)) -// \\panic(LexerPanic{}) -// \\} -// \\ -// \\func (lexer *Lexer) Expect(token T) { -// \\if lexer.Token != token { -// \\lexer.Expected(token) -// \\} -// \\lexer.Next() -// \\} -// \\ -// \\func (lexer *Lexer) ExpectOrInsertSemicolon() { -// \\if lexer.Token == TSemicolon || (!lexer.HasNewlineBefore && -// \\lexer.Token != TCloseBrace && lexer.Token != TEndOfFile) { -// \\lexer.Expect(TSemicolon) -// \\} -// \\} -// \\func (lexer *Lexer) ExpectLessThan(isInsideJSXElement bool) { -// \\switch lexer.Token { -// \\case TLessThan: -// \\if isInsideJSXElement { -// \\lexer.NextInsideJSXElement() -// \\} else { -// \\lexer.Next() -// \\} -// \\ -// \\case TLessThanEquals: -// \\lexer.Token = TEquals -// \\lexer.start++ -// \\lexer.maybeExpandEquals() -// \\ -// \\case TLessThanLessThan: -// \\lexer.Token = TLessThan -// \\lexer.start++ -// \\ -// \\case TLessThanLessThanEquals: -// \\lexer.Token = TLessThanEquals -// \\lexer.start++ -// \\ -// \\default: -// \\lexer.Expected(TLessThan) -// \\} -// \\} -// \\ -// \\// This parses a single ">" token. If that is the first part of a longer token, -// \\// this function splits off the first ">" and leaves the remainder of the -// \\// current token as another, smaller token. For example, ">>=" becomes ">=". -// \\func (lexer *Lexer) ExpectGreaterThan(isInsideJSXElement bool) { -// \\switch lexer.Token { -// \\case TGreaterThan: -// \\if isInsideJSXElement { -// \\lexer.NextInsideJSXElement() -// \\} else { -// \\lexer.Next() -// \\} -// \\ -// \\case TGreaterThanEquals: -// \\lexer.Token = TEquals -// \\lexer.start++ -// \\lexer.maybeExpandEquals() -// \\ -// \\case TGreaterThanGreaterThan: -// \\lexer.Token = TGreaterThan -// \\lexer.start++ -// \\ -// \\case TGreaterThanGreaterThanEquals: -// \\lexer.Token = TGreaterThanEquals -// \\lexer.start++ -// \\ -// \\case TGreaterThanGreaterThanGreaterThan: -// \\lexer.Token = TGreaterThanGreaterThan -// \\lexer.start++ -// \\ -// \\case TGreaterThanGreaterThanGreaterThanEquals: -// \\lexer.Token = TGreaterThanGreaterThanEquals -// \\lexer.start++ -// \\ -// \\default: -// \\lexer.Expected(TGreaterThan) -// \\} -// \\} -// \\ -// \\func (lexer *Lexer) maybeExpandEquals() { -// \\switch lexer.codePoint { -// \\case '>': -// \\// "=" + ">" = "=>" -// \\lexer.Token = TEqualsGreaterThan -// \\lexer.step() -// \\ -// \\case '=': -// \\// "=" + "=" = "==" -// \\lexer.Token = TEqualsEquals -// \\lexer.step() -// \\ -// \\if lexer.Token == '=' { -// \\// "=" + "==" = "===" -// \\lexer.Token = TEqualsEqualsEquals -// \\lexer.step() -// \\} -// \\} -// \\} -// \\ -// \\func IsIdentifier(text string) bool { -// \\if len(text) == 0 { -// \\return false -// \\} -// \\for i, codePoint := range text { -// \\if i == 0 { -// \\if !IsIdentifierStart(codePoint) { -// \\return false -// \\} -// \\} else { -// \\if !IsIdentifierContinue(codePoint) { -// \\return false -// \\} -// \\} -// \\} -// \\return true -// \\} -// \\ -// \\func IsIdentifierES5AndESNext(text string) bool { -// \\if len(text) == 0 { -// \\return false -// \\} -// \\for i, codePoint := range text { -// \\if i == 0 { -// \\if !IsIdentifierStartES5AndESNext(codePoint) { -// \\return false -// \\} -// \\} else { -// \\if !IsIdentifierContinueES5AndESNext(codePoint) { -// \\return false -// \\} -// \\} -// \\} -// \\return true -// \\} -// \\ -// \\func ForceValidIdentifier(text string) string { -// \\if IsIdentifier(text) { -// \\return text -// \\} -// \\sb := strings.Builder{} -// \\ -// \\// Identifier start -// \\c, width := utf8.DecodeRuneInString(text) -// \\text = text[width:] -// \\if IsIdentifierStart(c) { -// \\sb.WriteRune(c) -// \\} else { -// \\sb.WriteRune('_') -// \\} -// \\ -// \\// Identifier continue -// \\for text != "" { -// \\c, width := utf8.DecodeRuneInString(text) -// \\text = text[width:] -// \\if IsIdentifierContinue(c) { -// \\sb.WriteRune(c) -// \\} else { -// \\sb.WriteRune('_') -// \\} -// \\} -// \\ -// \\return sb.String() -// \\} -// \\ -// \\// This does "IsIdentifier(UTF16ToString(text))" without any allocations -// \\func IsIdentifierUTF16(text []uint16) bool { -// \\n := len(text) -// \\if n == 0 { -// \\return false -// \\} -// \\for i := 0; i < n; i++ { -// \\isStart := i == 0 -// \\r1 := rune(text[i]) -// \\if r1 >= 0xD800 && r1 <= 0xDBFF && i+1 < n { -// \\if r2 := rune(text[i+1]); r2 >= 0xDC00 && r2 <= 0xDFFF { -// \\r1 = (r1 << 10) + r2 + (0x10000 - (0xD800 << 10) - 0xDC00) -// \\i++ -// \\} -// \\} -// \\if isStart { -// \\if !IsIdentifierStart(r1) { -// \\return false -// \\} -// \\} else { -// \\if !IsIdentifierContinue(r1) { -// \\return false -// \\} -// \\} -// \\} -// \\return true -// \\} -// \\ -// \\// This does "IsIdentifierES5AndESNext(UTF16ToString(text))" without any allocations -// \\func IsIdentifierES5AndESNextUTF16(text []uint16) bool { -// \\n := len(text) -// \\if n == 0 { -// \\return false -// \\} -// \\for i := 0; i < n; i++ { -// \\isStart := i == 0 -// \\r1 := rune(text[i]) -// \\if r1 >= 0xD800 && r1 <= 0xDBFF && i+1 < n { -// \\if r2 := rune(text[i+1]); r2 >= 0xDC00 && r2 <= 0xDFFF { -// \\r1 = (r1 << 10) + r2 + (0x10000 - (0xD800 << 10) - 0xDC00) -// \\i++ -// \\} -// \\} -// \\if isStart { -// \\if !IsIdentifierStartES5AndESNext(r1) { -// \\return false -// \\} -// \\} else { -// \\if !IsIdentifierContinueES5AndESNext(r1) { -// \\return false -// \\} -// \\} -// \\} -// \\return true -// \\} -// \\ -// \\func IsIdentifierStart(codePoint rune) bool { -// \\switch codePoint { -// \\case '_', '$', -// \\'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', -// \\'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', -// \\'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', -// \\'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z': -// \\return true -// \\} -// \\ -// \\// All ASCII identifier start code points are listed above -// \\if codePoint < 0x7F { -// \\return false -// \\} -// \\ -// \\return unicode.Is(idStartES5OrESNext, codePoint) -// \\} -// \\ -// \\func IsIdentifierContinue(codePoint rune) bool { -// \\switch codePoint { -// \\case '_', '$', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', -// \\'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', -// \\'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', -// \\'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', -// \\'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z': -// \\return true -// \\} -// \\ -// \\// All ASCII identifier start code points are listed above -// \\if codePoint < 0x7F { -// \\return false -// \\} -// \\ -// \\// ZWNJ and ZWJ are allowed in identifiers -// \\if codePoint == 0x200C || codePoint == 0x200D { -// \\return true -// \\} -// \\ -// \\return unicode.Is(idContinueES5OrESNext, codePoint) -// \\} -// \\ -// \\func IsIdentifierStartES5AndESNext(codePoint rune) bool { -// \\switch codePoint { -// \\case '_', '$', -// \\'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', -// \\'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', -// \\'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', -// \\'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z': -// \\return true -// \\} -// \\ -// \\// All ASCII identifier start code points are listed above -// \\if codePoint < 0x7F { -// \\return false -// \\} -// \\ -// \\return unicode.Is(idStartES5AndESNext, codePoint) -// \\} -// \\ -// \\func IsIdentifierContinueES5AndESNext(codePoint rune) bool { -// \\switch codePoint { -// \\case '_', '$', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', -// \\'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', -// \\'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', -// \\'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', -// \\'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z': -// \\return true -// \\} -// \\ -// \\// All ASCII identifier start code points are listed above -// \\if codePoint < 0x7F { -// \\return false -// \\} -// \\ -// \\// ZWNJ and ZWJ are allowed in identifiers -// \\if codePoint == 0x200C || codePoint == 0x200D { -// \\return true -// \\} -// \\ -// \\return unicode.Is(idContinueES5AndESNext, codePoint) -// \\} -// \\ -// \\// See the "White Space Code Points" table in the ECMAScript standard -// \\func IsWhitespace(codePoint rune) bool { -// \\switch codePoint { -// \\case -// \\'\u0009', // character tabulation -// \\'\u000B', // line tabulation -// \\'\u000C', // form feed -// \\'\u0020', // space -// \\'\u00A0', // no-break space -// \\ -// \\// Unicode "Space_Separator" code points -// \\'\u1680', // ogham space mark -// \\'\u2000', // en quad -// \\'\u2001', // em quad -// \\'\u2002', // en space -// \\'\u2003', // em space -// \\'\u2004', // three-per-em space -// \\'\u2005', // four-per-em space -// \\'\u2006', // six-per-em space -// \\'\u2007', // figure space -// \\'\u2008', // punctuation space -// \\'\u2009', // thin space -// \\'\u200A', // hair space -// \\'\u202F', // narrow no-break space -// \\'\u205F', // medium mathematical space -// \\'\u3000', // ideographic space -// \\ -// \\'\uFEFF': // zero width non-breaking space -// \\return true -// \\ -// \\default: -// \\return false -// \\} -// \\} -// \\ -// \\func RangeOfIdentifier(source logger.Source, loc logger.Loc) logger.Range { -// \\text := source.Contents[loc.Start:] -// \\if len(text) == 0 { -// \\return logger.Range{Loc: loc, Len: 0} -// \\} -// \\ -// \\i := 0 -// \\c, _ := utf8.DecodeRuneInString(text[i:]) -// \\ -// \\// Handle private names -// \\if c == '#' { -// \\i++ -// \\c, _ = utf8.DecodeRuneInString(text[i:]) -// \\} -// \\ -// \\if IsIdentifierStart(c) || c == '\\' { -// \\// Search for the end of the identifier -// \\for i < len(text) { -// \\c2, width2 := utf8.DecodeRuneInString(text[i:]) -// \\if c2 == '\\' { -// \\i += width2 -// \\ -// \\// Skip over bracketed unicode escapes such as "\u{10000}" -// \\if i+2 < len(text) && text[i] == 'u' && text[i+1] == '{' { -// \\i += 2 -// \\for i < len(text) { -// \\if text[i] == '}' { -// \\i++ -// \\break -// \\} -// \\i++ -// \\} -// \\} -// \\} else if !IsIdentifierContinue(c2) { -// \\return logger.Range{Loc: loc, Len: int32(i)} -// \\} else { -// \\i += width2 -// \\} -// \\} -// \\} -// \\ -// \\// When minifying, this identifier may have originally been a string -// \\return source.RangeOfString(loc) -// \\} -// \\ -// \\func (lexer *Lexer) ExpectJSXElementChild(token T) { -// \\if lexer.Token != token { -// \\lexer.Expected(token) -// \\} -// \\lexer.NextJSXElementChild() -// \\} -// \\ -// \\func (lexer *Lexer) NextJSXElementChild() { -// \\lexer.HasNewlineBefore = false -// \\originalStart := lexer.end -// \\ -// \\for { -// \\lexer.start = lexer.end -// \\lexer.Token = 0 -// \\ -// \\switch lexer.codePoint { -// \\case -1: // This indicates the end of the file -// \\lexer.Token = TEndOfFile -// \\ -// \\case '{': -// \\lexer.step() -// \\lexer.Token = TOpenBrace -// \\ -// \\case '<': -// \\lexer.step() -// \\lexer.Token = TLessThan -// \\ -// \\default: -// \\needsFixing := false -// \\ -// \\stringLiteral: -// \\for { -// \\switch lexer.codePoint { -// \\case -1: -// \\// Reaching the end of the file without a closing element is an error -// \\lexer.SyntaxError() -// \\ -// \\case '&', '\r', '\n', '\u2028', '\u2029': -// \\// This needs fixing if it has an entity or if it's a multi-line string -// \\needsFixing = true -// \\lexer.step() -// \\ -// \\case '{', '<': -// \\// Stop when the string ends -// \\break stringLiteral -// \\ -// \\default: -// \\// Non-ASCII strings need the slow path -// \\if lexer.codePoint >= 0x80 { -// \\needsFixing = true -// \\} -// \\lexer.step() -// \\} -// \\} -// \\ -// \\lexer.Token = TStringLiteral -// \\text := lexer.source.Contents[originalStart:lexer.end] -// \\ -// \\if needsFixing { -// \\// Slow path -// \\lexer.decodedStringLiteralOrNil = fixWhitespaceAndDecodeJSXEntities(text) -// \\ -// \\// Skip this token if it turned out to be empty after trimming -// \\if len(lexer.decodedStringLiteralOrNil) == 0 { -// \\lexer.HasNewlineBefore = true -// \\continue -// \\} -// \\} else { -// \\// Fast path -// \\n := len(text) -// \\copy := make([]uint16, n) -// \\for i := 0; i < n; i++ { -// \\copy[i] = uint16(text[i]) -// \\} -// \\lexer.decodedStringLiteralOrNil = copy -// \\} -// \\} -// \\ -// \\break -// \\} -// \\} -// \\ -// \\func (lexer *Lexer) ExpectInsideJSXElement(token T) { -// \\if lexer.Token != token { -// \\lexer.Expected(token) -// \\} -// \\lexer.NextInsideJSXElement() -// \\} -// \\ -// \\func (lexer *Lexer) NextInsideJSXElement() { -// \\lexer.HasNewlineBefore = false -// \\ -// \\for { -// \\lexer.start = lexer.end -// \\lexer.Token = 0 -// \\ -// \\switch lexer.codePoint { -// \\case -1: // This indicates the end of the file -// \\lexer.Token = TEndOfFile -// \\ -// \\case '\r', '\n', '\u2028', '\u2029': -// \\lexer.step() -// \\lexer.HasNewlineBefore = true -// \\continue -// \\ -// \\case '\t', ' ': -// \\lexer.step() -// \\continue -// \\ -// \\case '.': -// \\lexer.step() -// \\lexer.Token = TDot -// \\ -// \\case '=': -// \\lexer.step() -// \\lexer.Token = TEquals -// \\ -// \\case '{': -// \\lexer.step() -// \\lexer.Token = TOpenBrace -// \\ -// \\case '}': -// \\lexer.step() -// \\lexer.Token = TCloseBrace -// \\ -// \\case '<': -// \\lexer.step() -// \\lexer.Token = TLessThan -// \\ -// \\case '>': -// \\lexer.step() -// \\lexer.Token = TGreaterThan -// \\ -// \\case '/': -// \\// '/' or '//' or '/* ... */' -// \\lexer.step() -// \\switch lexer.codePoint { -// \\case '/': -// \\singleLineComment: -// \\for { -// \\lexer.step() -// \\switch lexer.codePoint { -// \\case '\r', '\n', '\u2028', '\u2029': -// \\break singleLineComment -// \\ -// \\case -1: // This indicates the end of the file -// \\break singleLineComment -// \\} -// \\} -// \\continue -// \\ -// \\case '*': -// \\lexer.step() -// \\startRange := lexer.Range() -// \\multiLineComment: -// \\for { -// \\switch lexer.codePoint { -// \\case '*': -// \\lexer.step() -// \\if lexer.codePoint == '/' { -// \\lexer.step() -// \\break multiLineComment -// \\} -// \\ -// \\case '\r', '\n', '\u2028', '\u2029': -// \\lexer.step() -// \\lexer.HasNewlineBefore = true -// \\ -// \\case -1: // This indicates the end of the file -// \\lexer.start = lexer.end -// \\lexer.addErrorWithNotes(lexer.Loc(), "Expected \"*/\" to terminate multi-line comment", -// \\[]logger.MsgData{logger.RangeData(&lexer.tracker, startRange, "The multi-line comment starts here")}) -// \\panic(LexerPanic{}) -// \\ -// \\default: -// \\lexer.step() -// \\} -// \\} -// \\continue -// \\ -// \\default: -// \\lexer.Token = TSlash -// \\} -// \\ -// \\case '\'', '"': -// \\var backslash logger.Range -// \\quote := lexer.codePoint -// \\needsDecode := false -// \\lexer.step() -// \\ -// \\stringLiteral: -// \\for { -// \\switch lexer.codePoint { -// \\case -1: // This indicates the end of the file -// \\lexer.SyntaxError() -// \\ -// \\case '&': -// \\needsDecode = true -// \\lexer.step() -// \\ -// \\case '\\': -// \\backslash = logger.Range{Loc: logger.Loc{Start: int32(lexer.end)}, Len: 1} -// \\lexer.step() -// \\continue -// \\ -// \\case quote: -// \\if backslash.Len > 0 { -// \\backslash.Len++ -// \\lexer.PreviousBackslashQuoteInJSX = backslash -// \\} -// \\lexer.step() -// \\break stringLiteral -// \\ -// \\default: -// \\// Non-ASCII strings need the slow path -// \\if lexer.codePoint >= 0x80 { -// \\needsDecode = true -// \\} -// \\lexer.step() -// \\} -// \\backslash = logger.Range{} -// \\} -// \\ -// \\lexer.Token = TStringLiteral -// \\text := lexer.source.Contents[lexer.start+1 : lexer.end-1] -// \\ -// \\if needsDecode { -// \\// Slow path -// \\lexer.decodedStringLiteralOrNil = decodeJSXEntities([]uint16{}, text) -// \\} else { -// \\// Fast path -// \\n := len(text) -// \\copy := make([]uint16, n) -// \\for i := 0; i < n; i++ { -// \\copy[i] = uint16(text[i]) -// \\} -// \\lexer.decodedStringLiteralOrNil = copy -// \\} -// \\ -// \\default: -// \\// Check for unusual whitespace characters -// \\if IsWhitespace(lexer.codePoint) { -// \\lexer.step() -// \\continue -// \\} -// \\ -// \\if IsIdentifierStart(lexer.codePoint) { -// \\lexer.step() -// \\for IsIdentifierContinue(lexer.codePoint) || lexer.codePoint == '-' { -// \\lexer.step() -// \\} -// \\ -// \\// Parse JSX namespaces. These are not supported by React or TypeScript -// \\// but someone using JSX syntax in more obscure ways may find a use for -// \\// them. A namespaced name is just always turned into a string so you -// \\// can't use this feature to reference JavaScript identifiers. -// \\if lexer.codePoint == ':' { -// \\lexer.step() -// \\if IsIdentifierStart(lexer.codePoint) { -// \\lexer.step() -// \\for IsIdentifierContinue(lexer.codePoint) || lexer.codePoint == '-' { -// \\lexer.step() -// \\} -// \\} else { -// \\lexer.addError(logger.Loc{Start: lexer.Range().End()}, -// \\fmt.Sprintf("Expected identifier after %q in namespaced JSX name", lexer.Raw())) -// \\} -// \\} -// \\ -// \\lexer.Identifier = lexer.Raw() -// \\lexer.Token = TIdentifier -// \\break -// \\} -// \\ -// \\lexer.end = lexer.current -// \\lexer.Token = TSyntaxError -// \\} -// \\ -// \\return -// \\} -// \\} -// \\ -// \\func (lexer *Lexer) Next() { -// \\lexer.HasNewlineBefore = lexer.end == 0 -// \\lexer.HasPureCommentBefore = false -// \\lexer.PrevTokenWasAwaitKeyword = false -// \\lexer.CommentsToPreserveBefore = nil -// \\ -// \\for { -// \\lexer.start = lexer.end -// \\lexer.Token = 0 -// \\ -// \\switch lexer.codePoint { -// \\case -1: // This indicates the end of the file -// \\lexer.Token = TEndOfFile -// \\ -// \\case '#': -// \\if lexer.start == 0 && strings.HasPrefix(lexer.source.Contents, "#!") { -// \\// "#!/usr/bin/env node" -// \\lexer.Token = THashbang -// \\hashbang: -// \\for { -// \\lexer.step() -// \\switch lexer.codePoint { -// \\case '\r', '\n', '\u2028', '\u2029': -// \\break hashbang -// \\ -// \\case -1: // This indicates the end of the file -// \\break hashbang -// \\} -// \\} -// \\lexer.Identifier = lexer.Raw() -// \\} else { -// \\// "#foo" -// \\lexer.step() -// \\} -// ; - -// const repeat_count: usize = 1; -// const loop_count: usize = 1000; - -// pub fn main() anyerror!void { -// try HashTable.init(std.heap.c_allocator); -// Bitset.init(); -// { - -// // Ensure that the optimizer doesn't do something fancy with static memory addresses -// var code = try std.heap.c_allocator.dupe(u8, unicode_text); - -// var iter = std.unicode.Utf8Iterator{ .bytes = code, .i = 0 }; -// var hash_table_count: usize = 0; -// var jump_table_count: usize = 0; -// var jump_table_elapsed: u64 = 0; -// var hash_table_elapsed: u64 = 0; -// var binary_search_elapsed: u64 = 0; -// var binary_search_count: usize = 0; -// var bitset_elapsed: u64 = 0; -// var bitset_count: usize = 0; - -// // change up the order these run in -// var loop_i: usize = 0; -// while (loop_i < loop_count) : (loop_i += 1) { -// { -// var iteration_i: usize = 0; -// var timer = try std.time.Timer.start(); -// while (iteration_i < repeat_count) : (iteration_i += 1) { -// @setEvalBranchQuota(99999); -// iter = std.unicode.Utf8Iterator{ .bytes = code, .i = 0 }; -// hash_table_count = 0; -// while (iter.nextCodepoint()) |cp| { -// hash_table_count += @as(usize, @intFromBool(HashTable.isIdentifierStart(cp) or HashTable.isIdentifierPart(cp))); -// } -// } -// hash_table_elapsed += timer.read(); -// } - -// { -// var iteration_i: usize = 0; -// var timer = try std.time.Timer.start(); -// while (iteration_i < repeat_count) : (iteration_i += 1) { -// @setEvalBranchQuota(99999); -// iter = std.unicode.Utf8Iterator{ .bytes = code, .i = 0 }; -// jump_table_count = 0; -// while (iter.nextCodepoint()) |cp| { -// jump_table_count += @as( -// usize, -// @intFromBool(JumpTable.isIdentifierStart(cp) or JumpTable.isIdentifierPart(cp)), -// ); -// } -// } -// jump_table_elapsed += timer.read(); -// } - -// { -// var iteration_i: usize = 0; -// var timer = try std.time.Timer.start(); -// while (iteration_i < repeat_count) : (iteration_i += 1) { -// @setEvalBranchQuota(99999); -// iter = std.unicode.Utf8Iterator{ .bytes = code, .i = 0 }; -// binary_search_count = 0; -// while (iter.nextCodepoint()) |cp| { -// binary_search_count += @as( -// usize, -// @intFromBool( -// BinarySearch.isIdentifierStart( -// cp, -// ) or BinarySearch.isIdentifierPart( -// cp, -// ), -// ), -// ); -// } -// } -// binary_search_elapsed += timer.read(); -// } - -// { -// var iteration_i: usize = 0; -// var timer = try std.time.Timer.start(); -// while (iteration_i < repeat_count) : (iteration_i += 1) { -// @setEvalBranchQuota(99999); -// iter = std.unicode.Utf8Iterator{ .bytes = code, .i = 0 }; -// bitset_count = 0; -// while (iter.nextCodepoint()) |cp| { -// bitset_count += @as( -// usize, -// @intFromBool( -// Bitset.isIdentifierStart( -// cp, -// ) or Bitset.isIdentifierPart( -// cp, -// ), -// ), -// ); -// } -// } -// bitset_elapsed += timer.read(); -// } -// } - -// .print( -// \\---- Unicode text ----- -// \\ -// \\Timings (sum of running {d} times each, lower is better): -// \\ -// \\ Binary Search : {d}ns -// \\ Hash Table : {d}ns -// \\ Switch statement : {d}ns -// \\ Bitset : {d}ns -// \\ -// \\Match count (these should be the same): -// \\ -// \\ Binary Search : {d} -// \\ Hash Table : {d} -// \\ Switch statement : {d} -// \\ Bitset : {d} -// \\ -// \\ -// , -// .{ -// repeat_count * loop_count, -// binary_search_elapsed, -// hash_table_elapsed, -// jump_table_elapsed, -// bitset_elapsed, - -// binary_search_count, -// hash_table_count, -// jump_table_count, -// bitset_count, -// }, -// ); -// } - -// { - -// // Ensure that the optimizer doesn't do something fancy with static memory addresses -// var code = try std.heap.c_allocator.dupe(u8, ascii_text); - -// var iter = std.unicode.Utf8Iterator{ .bytes = code, .i = 0 }; -// var hash_table_count: usize = 0; -// var jump_table_count: usize = 0; -// var jump_table_elapsed: u64 = 0; -// var hash_table_elapsed: u64 = 0; -// var binary_search_elapsed: u64 = 0; -// var binary_search_count: usize = 0; -// var bitset_count: usize = 0; -// var bitset_elapsed: u64 = 0; - -// // change up the order these run in -// var loop_i: usize = 0; -// while (loop_i < loop_count) : (loop_i += 1) { -// { -// var iteration_i: usize = 0; -// var timer = try std.time.Timer.start(); -// while (iteration_i < repeat_count) : (iteration_i += 1) { -// @setEvalBranchQuota(99999); -// iter = std.unicode.Utf8Iterator{ .bytes = code, .i = 0 }; -// hash_table_count = 0; -// while (iter.nextCodepoint()) |cp| { -// hash_table_count += @as(usize, @intFromBool(HashTable.isIdentifierStart(cp) or HashTable.isIdentifierPart(cp))); -// } -// } -// hash_table_elapsed += timer.read(); -// } - -// { -// var iteration_i: usize = 0; -// var timer = try std.time.Timer.start(); -// while (iteration_i < repeat_count) : (iteration_i += 1) { -// @setEvalBranchQuota(99999); -// iter = std.unicode.Utf8Iterator{ .bytes = code, .i = 0 }; -// jump_table_count = 0; -// while (iter.nextCodepoint()) |cp| { -// jump_table_count += @as( -// usize, -// @intFromBool(JumpTable.isIdentifierStart(cp) or JumpTable.isIdentifierPart(cp)), -// ); -// } -// } -// jump_table_elapsed += timer.read(); -// } - -// { -// var iteration_i: usize = 0; -// var timer = try std.time.Timer.start(); -// while (iteration_i < repeat_count) : (iteration_i += 1) { -// @setEvalBranchQuota(99999); -// iter = std.unicode.Utf8Iterator{ .bytes = code, .i = 0 }; -// binary_search_count = 0; -// while (iter.nextCodepoint()) |cp| { -// binary_search_count += @as( -// usize, -// @intFromBool( -// BinarySearch.isIdentifierStart( -// cp, -// ) or BinarySearch.isIdentifierPart( -// cp, -// ), -// ), -// ); -// } -// } -// binary_search_elapsed += timer.read(); -// } - -// { -// var iteration_i: usize = 0; -// var timer = try std.time.Timer.start(); -// while (iteration_i < repeat_count) : (iteration_i += 1) { -// @setEvalBranchQuota(99999); -// iter = std.unicode.Utf8Iterator{ .bytes = code, .i = 0 }; -// bitset_count = 0; -// while (iter.nextCodepoint()) |cp| { -// bitset_count += @as( -// usize, -// @intFromBool( -// Bitset.isIdentifierStart( -// cp, -// ) or Bitset.isIdentifierPart( -// cp, -// ), -// ), -// ); -// } -// } -// bitset_elapsed += timer.read(); -// } -// } - -// { -// iter = std.unicode.Utf8Iterator{ .bytes = ascii_text, .i = 0 }; -// while (iter.nextCodepoint()) |cp| { -// if (cp > 127) std.debug.panic("This is not ASCII at {d}", .{iter.i}); -// } -// } - -// ( -// \\---- ASCII text ----- -// \\ -// \\Timings (sum of running {d} times each, lower is better): -// \\ -// \\ Binary Search : {d}ns -// \\ Hash Table : {d}ns -// \\ Switch statement : {d}ns -// \\ Bitset : {d}ns -// \\ -// \\Match count (these should be the same): -// \\ -// \\ Binary Search : {d} -// \\ Hash Table : {d} -// \\ Switch statement : {d} -// \\ Bitset : {d} -// \\ -// \\ -// , -// .{ -// repeat_count * loop_count, -// binary_search_elapsed, -// hash_table_elapsed, -// jump_table_elapsed, -// bitset_elapsed, - -// binary_search_count, -// hash_table_count, -// jump_table_count, -// bitset_count, -// }, -// ); -// } -// } +/// isIDContinueESNext checks if a codepoint is valid in the isIDContinueESNext category +pub fn isIDContinueESNext(cp: u21) bool { + const high = cp >> 8; + const low = cp & 0xFF; + const stage2_idx = idContinueESNext.stage1[high]; + const bit_pos = stage2_idx + low; + const u64_idx = bit_pos >> 6; + const bit_idx = @as(u6, @intCast(bit_pos & 63)); + return (idContinueESNext.stage2[u64_idx] & (@as(u64, 1) << bit_idx)) != 0; +} +const idContinueESNext = struct { + pub const stage1 = [_]u16{ 0, 256, 512, 768, 1024, 1280, 1536, 1792, 2048, 2304, 2560, 2816, 3072, 3328, 3584, 3840, 4096, 256, 4352, 4608, 4864, 256, 5120, 5376, 5632, 5888, 6144, 6400, 6656, 256, 256, 6912, 7168, 7424, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7936, 8192, 7680, 7680, 8448, 8704, 7680, 7680, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 8960, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 9216, 256, 9472, 9728, 9984, 10240, 10496, 10752, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 11008, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 256, 11264, 11520, 256, 11776, 12032, 12288, 12544, 12800, 13056, 13312, 13568, 13824, 256, 14080, 14336, 14592, 14848, 15104, 15360, 15616, 15872, 16128, 16384, 16640, 16896, 17152, 17408, 17664, 17920, 18176, 18432, 18688, 18944, 7680, 19200, 19456, 19712, 19968, 256, 256, 256, 20224, 20480, 20736, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 20992, 256, 256, 256, 256, 21248, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 256, 256, 21504, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 256, 256, 21760, 22016, 7680, 7680, 22272, 22528, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 22784, 256, 256, 256, 256, 23040, 23296, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 23552, 256, 23808, 24064, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 24320, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 24576, 7680, 24832, 25088, 7680, 25344, 25600, 25856, 26112, 7680, 7680, 26368, 7680, 7680, 7680, 7680, 26624, 26880, 27136, 27392, 7680, 27648, 7680, 7680, 27904, 28160, 28416, 7680, 7680, 7680, 7680, 28672, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 28928, 7680, 7680, 7680, 7680, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 29184, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 29440, 29696, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 29952, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 30208, 256, 256, 30464, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 256, 256, 30720, 7680, 7680, 7680, 7680, 7680, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 30976, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 31232, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 31488, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680 }; + pub const stage2 = [_]u64{ 287948901175001088, 576460745995190270, 333270770471927808, 18410715276682199039, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 88094074470339, 18446744073709551615, 13609878073913638911, 18446744056529672128, 18428729675200069631, 18446744073709551615, 18446744073709551615, 18446744073709550843, 18446744073709551615, 18446462598732840959, 18446744069456527359, 13835058055282033151, 2119858418286774, 18446744069548736512, 18446678103011885055, 18446744073709551615, 11529212845433552895, 18446744073709486080, 18446744073709545471, 1125899906842623, 2612087783874887679, 70368744177663, 18446471390799331327, 18446744073692806911, 18446744056529682431, 18446744073709551615, 18446462392574410751, 17565725197581524975, 5765733215448889759, 15235112390417287150, 18014125208779143, 17576984196650090478, 18302910150157089727, 17576984196649951214, 844217444219295, 14123225865944680428, 281200107273671, 17582050746231021567, 281265183931871, 17577547146603651055, 4221915814182367, 18446744073709412351, 18158794964244397535, 3457638613854978030, 3658904103781503, 576460752303423486, 67076095, 4611685674830002134, 4093607775, 14024213633433600001, 18446216308128218879, 2305843009196916703, 64, 18446744073709551615, 18446744073709487103, 18446744070488326143, 17870283321406070975, 18446744073709551615, 18446744070446333439, 9168765891372858879, 18446744073701162813, 18446744073696837631, 1123704775901183, 18446744069414649855, 4557642822898941951, 18446744073709551614, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446638520593285119, 18446744069548802046, 144053615424700415, 9007197111451647, 3905461007941631, 18446744073709551615, 4394566287359, 18446744069481674752, 144115188075855871, 18446471394825863167, 18014398509481983, 1152657619668697087, 8796093022207936, 18446480190918885375, 134153215, 18446744069683019775, 11529215043920986111, 13834777130128311295, 32767, 18446744073709551615, 4494803601399807, 18446744073709551615, 4503599627370495, 72057594037927935, 4611686018427380735, 16717361816799216127, 576460752302833664, 18446744070475743231, 4611686017001275199, 6908521828386340863, 2295745090394464220, 9223372036854788096, 9223934986809245697, 536805376, 562821641207808, 17582049991377026180, 18446744069414601696, 511, 0, 0, 0, 0, 0, 18446744073709551615, 18446744073709551615, 18446744073709551615, 4494940973301759, 18446498607738650623, 9223513873854758911, 9187201948305063935, 18446744071553646463, 2251518330118602976, 18446744073709551614, 18446744069389418495, 17870283321406128127, 18446462598732840928, 18446744073709551615, 18446744069414617087, 18446462598732840960, 18446744073709551615, 18446744073709551615, 18446744073709551615, 0, 18446744073709551615, 18446744073709551615, 8191, 4611686018427322368, 17592185987071, 13830835930631503871, 18446744073709551615, 1125899906842623, 18446744060816261120, 18446744073709551615, 18446744073709550079, 18445618173868443647, 18691697672191, 4503599627370495, 18446744073709551615, 16789419406609285183, 18446532967477018623, 2305843004919775231, 18446744073709551615, 9223372032626884609, 36028797018963967, 18194542490348896255, 18446744073709551615, 35184368733388807, 18446602782178705022, 18446466996645134335, 18446744073709551615, 288010473826156543, 18446744073709551615, 18446744073709551615, 18446462667452317695, 1152921504606845055, 18446744073709551615, 18446532967477018623, 18446744073709551615, 67108863, 6881498031078244479, 18446744073709551579, 1125899906842623, 18446744073709027328, 4611686018427387903, 18446744073709486080, 18446744073709355007, 1152640029630136575, 7036870122864639, 18437455399478157312, 18446744073709551615, 2305843009213693951, 9799832780635308032, 18446743798965862398, 9223372036854775807, 486341884, 13258596753222922239, 1073692671, 18446744073709551615, 576460752303423487, 0, 9007199254740991, 0, 2305843009213693952, 0, 0, 18446744069951455231, 4295098367, 18446708893632430079, 576460752303359999, 18446744070488326143, 4128527, 18446744073709551615, 18446744073709551615, 18446466993558126591, 1152921504591118335, 18446463698244468735, 17870001915148894207, 2016486715970549759, 0, 36028797018963967, 1095220854783, 575897802350002111, 0, 10502394331027995967, 36028792728190975, 2147483647, 15762594400829440, 288230371860938751, 0, 13907115649320091647, 0, 9745789593611923567, 2305843004918726656, 536870911, 549755813631, 18014398509481983, 2251795522912255, 262143, 0, 18446744073709551615, 511, 2251799813685247, 2251799813685247, 287950000686628863, 0, 0, 0, 0, 0, 875211255709695, 16140901064495857664, 18446463149025525759, 18446462598732972031, 18446462598732841023, 36028792723996703, 18446744073709551615, 9241386160486350975, 576460752303423487, 287951100198191108, 18437736874454810623, 22517998136787184, 18446744073709551615, 402644511, 13907115649319829503, 3, 18446464796682337663, 287957697268023295, 18153444948953374703, 8760701963286943, 0, 0, 18446744073709551615, 16173172735, 18446744073709551615, 67043519, 0, 0, 18392700878181105663, 1056964609, 18446744073709551615, 67043345, 144115188075855871, 1023, 287966492958392319, 127, 0, 0, 576460752303423487, 0, 18446744069414584320, 9223376434901286911, 17996384110963061375, 67043343, 18446740770879700992, 120208752639, 9223372036854775807, 18446744073709486208, 18446462599336820735, 144115188075855871, 18410715276690587135, 18445618173869752321, 36027697507139583, 0, 13006395723845991295, 18446741595580465407, 4393784803327, 0, 0, 0, 0, 36028792723996672, 14411518807585456127, 67043335, 281474976710656, 0, 18446744073709551615, 18446744073709551615, 67108863, 0, 18446744073709551615, 140737488355327, 18446744073709551615, 18446744073709551615, 18446744073709551615, 15, 0, 0, 0, 0, 18446744073709486080, 562949953421311, 281474976710655, 4194303, 0, 0, 18446744073709551615, 127, 0, 0, 144115188075855871, 18446466994631868415, 9223372036854775807, 8796093022143487, 36028797018963967, 16212958624241090575, 65535, 0, 0, 18446744073709551615, 0, 0, 18446744073709551615, 18446744073709520895, 4294934783, 844540894248960, 18446744073709551615, 18446744073709551615, 18446744073709551615, 72057594037927935, 18446744073709551615, 18446744073709551615, 18446744073709551615, 4194303, 511, 0, 0, 0, 0, 0, 0, 8065665457643847680, 1125934266580991, 18446463629527547904, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 1152921504606846975, 18446744073709551615, 2305570330330005503, 1677656575, 0, 18446532967477018623, 127, 0, 0, 0, 17872504197455282176, 65970697670631, 0, 0, 28, 0, 0, 18446744073709551615, 18446744073707454463, 17005555242810474495, 18446744073709551599, 8935141660164089791, 18446744073709419615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446743249075830783, 17870283321271910397, 18437736874452713471, 18446603336221163519, 18446741874686295551, 18446744073709539319, 17906312118425092095, 9042383626829823, 281470547525648, 0, 8660801552383, 0, 0, 0, 18446471240106377087, 70368744177663, 32768, 0, 4611439727822766079, 17407, 0, 0, 0, 0, 140737488289792, 288230376151711743, 0, 0, 0, 288230376151646208, 0, 0, 0, 9223213153129594880, 18446744073709551615, 18446744073709551615, 18446744073709551615, 8323103, 18446744073709551615, 67047423, 0, 0, 790380184120328175, 6843210385291930244, 1152917029519358975, 0, 0, 0, 0, 287948901175001088, 18446744073709551615, 18446744073709551615, 18446744073709551615, 4294967295, 288230376151711743, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744070488326143, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446462615912710143, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446462607322775551, 18446744073709551615, 1073741823, 0, 0, 1073741823, 0, 0, 0, 18446744073709551615, 18446744073709488127, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 281474976710655, 0, 18446744073709551615, 18446744073709551615, 18446744073709551615, 281474976710655 }; +}; diff --git a/src/js_lexer/identifier_cache.zig b/src/js_lexer/identifier_cache.zig deleted file mode 100644 index de1ea0e7715707..00000000000000 --- a/src/js_lexer/identifier_cache.zig +++ /dev/null @@ -1,22 +0,0 @@ -const std = @import("std"); -const bun = @import("root").bun; -const identifier_data = @import("./identifier_data.zig"); - -pub const CachedBitset = extern struct { - range: [2]i32, - len: u32, - - pub fn fromFile(comptime filename: anytype) CachedBitset { - return comptime @as(CachedBitset, @bitCast(bun.asByteSlice(@embedFile(filename)).ptr[0..@sizeOf(CachedBitset)].*)); - } -}; - -pub fn setMasks(masks: [*:0]const u8, comptime MaskType: type, masky: MaskType) void { - const FieldInfo: std.builtin.Type.StructField = std.meta.fieldInfo(MaskType, "masks"); - masky.masks = @as(masks, @bitCast(FieldInfo.type)); -} - -pub const id_start_meta = identifier_data.id_start_cached; -pub const id_continue_meta = identifier_data.id_continue_cached; -pub const id_start = identifier_data.id_start; -pub const id_continue = identifier_data.id_continue; diff --git a/src/js_lexer/identifier_data.zig b/src/js_lexer/identifier_data.zig deleted file mode 100644 index d82751e6201dbb..00000000000000 --- a/src/js_lexer/identifier_data.zig +++ /dev/null @@ -1,177 +0,0 @@ -const std = @import("std"); - -const ZWJ = .{ 0x200C, 0x200D }; - -// "unicodeESNextIdentifierStart" -pub const start_codepoints = [_]i32{ 65, 90, 97, 122, 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 895, 895, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1488, 1514, 1519, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2144, 2154, 2208, 2228, 2230, 2237, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2432, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2556, 2556, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2809, 2809, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3133, 3160, 3162, 3168, 3169, 3200, 3200, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3412, 3414, 3423, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6264, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6430, 6480, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7401, 7404, 7406, 7411, 7413, 7414, 7418, 7418, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12443, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40943, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42653, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42943, 42946, 42950, 42999, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43261, 43262, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43488, 43492, 43494, 43503, 43514, 43518, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43646, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43879, 43888, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66176, 66204, 66208, 66256, 66304, 66335, 66349, 66378, 66384, 66421, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 67072, 67382, 67392, 67413, 67424, 67431, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68096, 68112, 68115, 68117, 68119, 68121, 68149, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68324, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68899, 69376, 69404, 69415, 69415, 69424, 69445, 69600, 69622, 69635, 69687, 69763, 69807, 69840, 69864, 69891, 69926, 69956, 69956, 69968, 70002, 70006, 70006, 70019, 70066, 70081, 70084, 70106, 70106, 70108, 70108, 70144, 70161, 70163, 70187, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70366, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70461, 70461, 70480, 70480, 70493, 70497, 70656, 70708, 70727, 70730, 70751, 70751, 70784, 70831, 70852, 70853, 70855, 70855, 71040, 71086, 71128, 71131, 71168, 71215, 71236, 71236, 71296, 71338, 71352, 71352, 71424, 71450, 71680, 71723, 71840, 71903, 71935, 71935, 72096, 72103, 72106, 72144, 72161, 72161, 72163, 72163, 72192, 72192, 72203, 72242, 72250, 72250, 72272, 72272, 72284, 72329, 72349, 72349, 72384, 72440, 72704, 72712, 72714, 72750, 72768, 72768, 72818, 72847, 72960, 72966, 72968, 72969, 72971, 73008, 73030, 73030, 73056, 73061, 73063, 73064, 73066, 73097, 73112, 73112, 73440, 73458, 73728, 74649, 74752, 74862, 74880, 75075, 77824, 78894, 82944, 83526, 92160, 92728, 92736, 92766, 92880, 92909, 92928, 92975, 92992, 92995, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94032, 94032, 94099, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101106, 110592, 110878, 110928, 110930, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 123136, 123180, 123191, 123197, 123214, 123214, 123584, 123627, 124928, 125124, 125184, 125251, 125259, 125259, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 178208, 183969, 183984, 191456, 194560, 195101 }; -// "unicodeESNextIdentifierPart" -pub const part_codepoints = ZWJ ++ [_]i32{ 48, 57, 65, 90, 95, 95, 97, 122, 170, 170, 181, 181, 183, 183, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 895, 895, 902, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1519, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2045, 2045, 2048, 2093, 2112, 2139, 2144, 2154, 2208, 2228, 2230, 2237, 2259, 2273, 2275, 2403, 2406, 2415, 2417, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2556, 2556, 2558, 2558, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2809, 2815, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3072, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3162, 3168, 3171, 3174, 3183, 3200, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3328, 3331, 3333, 3340, 3342, 3344, 3346, 3396, 3398, 3400, 3402, 3406, 3412, 3415, 3423, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3558, 3567, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4969, 4977, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6264, 6272, 6314, 6320, 6389, 6400, 6430, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6618, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6832, 6845, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7376, 7378, 7380, 7418, 7424, 7673, 7675, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40943, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42737, 42775, 42783, 42786, 42888, 42891, 42943, 42946, 42950, 42999, 43047, 43072, 43123, 43136, 43205, 43216, 43225, 43232, 43255, 43259, 43259, 43261, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43488, 43518, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43879, 43888, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65071, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66045, 66045, 66176, 66204, 66208, 66256, 66272, 66272, 66304, 66335, 66349, 66378, 66384, 66426, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66720, 66729, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 67072, 67382, 67392, 67413, 67424, 67431, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68099, 68101, 68102, 68108, 68115, 68117, 68119, 68121, 68149, 68152, 68154, 68159, 68159, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68326, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68903, 68912, 68921, 69376, 69404, 69415, 69415, 69424, 69456, 69600, 69622, 69632, 69702, 69734, 69743, 69759, 69818, 69840, 69864, 69872, 69881, 69888, 69940, 69942, 69951, 69956, 69958, 69968, 70003, 70006, 70006, 70016, 70084, 70089, 70092, 70096, 70106, 70108, 70108, 70144, 70161, 70163, 70199, 70206, 70206, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70378, 70384, 70393, 70400, 70403, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70459, 70468, 70471, 70472, 70475, 70477, 70480, 70480, 70487, 70487, 70493, 70499, 70502, 70508, 70512, 70516, 70656, 70730, 70736, 70745, 70750, 70751, 70784, 70853, 70855, 70855, 70864, 70873, 71040, 71093, 71096, 71104, 71128, 71133, 71168, 71232, 71236, 71236, 71248, 71257, 71296, 71352, 71360, 71369, 71424, 71450, 71453, 71467, 71472, 71481, 71680, 71738, 71840, 71913, 71935, 71935, 72096, 72103, 72106, 72151, 72154, 72161, 72163, 72164, 72192, 72254, 72263, 72263, 72272, 72345, 72349, 72349, 72384, 72440, 72704, 72712, 72714, 72758, 72760, 72768, 72784, 72793, 72818, 72847, 72850, 72871, 72873, 72886, 72960, 72966, 72968, 72969, 72971, 73014, 73018, 73018, 73020, 73021, 73023, 73031, 73040, 73049, 73056, 73061, 73063, 73064, 73066, 73102, 73104, 73105, 73107, 73112, 73120, 73129, 73440, 73462, 73728, 74649, 74752, 74862, 74880, 75075, 77824, 78894, 82944, 83526, 92160, 92728, 92736, 92766, 92768, 92777, 92880, 92909, 92912, 92916, 92928, 92982, 92992, 92995, 93008, 93017, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94031, 94087, 94095, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101106, 110592, 110878, 110928, 110930, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 113821, 113822, 119141, 119145, 119149, 119154, 119163, 119170, 119173, 119179, 119210, 119213, 119362, 119364, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 120782, 120831, 121344, 121398, 121403, 121452, 121461, 121461, 121476, 121476, 121499, 121503, 121505, 121519, 122880, 122886, 122888, 122904, 122907, 122913, 122915, 122916, 122918, 122922, 123136, 123180, 123184, 123197, 123200, 123209, 123214, 123214, 123584, 123641, 124928, 125124, 125136, 125142, 125184, 125259, 125264, 125273, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 178208, 183969, 183984, 191456, 194560, 195101, 917760, 917999 }; - -const start_codepoints_including_ascii = [_]i32{ - 'a', - 'z', - 'A', - 'Z', - '_', - '_', - '$', - '$', -} ++ start_codepoints; -const part_codepoints_including_ascii = [_]i32{ - 'a', - 'z', - 'A', - 'Z', - '0', - '9', - '_', - '_', - '$', - '$', -} ++ part_codepoints; - -const id_start_range: [2]i32 = brk: { - var minmax = [2]i32{ std.math.maxInt(i32), 0 }; - - for (start_codepoints_including_ascii) |c| { - @setEvalBranchQuota(9999); - minmax[0] = if (c < minmax[0]) c else minmax[0]; - minmax[1] = if (c > minmax[1]) c else minmax[1]; - } - - break :brk minmax; -}; -const id_start_count = id_start_range[1] - id_start_range[0] + 1; - -const id_end_range: [2]i32 = brk: { - var minmax = [2]i32{ std.math.maxInt(i32), 0 }; - - for (part_codepoints_including_ascii) |c| { - @setEvalBranchQuota(9999); - minmax[0] = if (c < minmax[0]) c else minmax[0]; - minmax[1] = if (c > minmax[1]) c else minmax[1]; - } - - break :brk minmax; -}; - -const id_end_count = id_end_range[1] - id_end_range[0] + 1; - -pub const IDStartType = std.bit_set.StaticBitSet(id_start_count + 1); -pub const IDContinueType = std.bit_set.StaticBitSet(id_end_count + 1); - -pub const id_start: IDStartType = brk: { - var bits: IDStartType = IDStartType.initEmpty(); - var i: usize = 0; - - @setEvalBranchQuota(999999); - while (i < start_codepoints_including_ascii.len) : (i += 2) { - var min = start_codepoints_including_ascii[i]; - const max = start_codepoints_including_ascii[i + 1]; - while (min <= max) : (min += 1) { - @setEvalBranchQuota(999999); - bits.set(id_start_range[1] - min); - } - } - break :brk bits; -}; - -pub const id_continue: IDContinueType = brk: { - var bits: IDContinueType = IDContinueType.initEmpty(); - var i: usize = 0; - - while (i < part_codepoints_including_ascii.len) : (i += 2) { - var min = part_codepoints_including_ascii[i]; - const max = part_codepoints_including_ascii[i + 1]; - @setEvalBranchQuota(999999); - while (min <= max) : (min += 1) { - @setEvalBranchQuota(999999); - bits.set(id_end_range[1] - min); - } - } - break :brk bits; -}; - -const Cache = @import("./identifier_cache.zig"); - -pub const id_start_cached = Cache.CachedBitset{ .range = id_start_range, .len = id_start_count + 1 }; -pub const id_continue_cached = Cache.CachedBitset{ .range = id_end_range, .len = id_end_count + 1 }; - -fn main() anyerror!void { - const id_continue_data = std.mem.asBytes(&id_continue.masks); - const id_start_data = std.mem.asBytes(&id_start.masks); - - try std.posix.chdir(std.fs.path.dirname(@src().file).?); - var start = try std.fs.cwd().createFileZ("id_start_bitset.meta.blob", .{ .truncate = true }); - try start.writeAll(std.mem.asBytes(&id_start_cached)); - start.close(); - - var start_masks = try std.fs.cwd().createFileZ("id_start_bitset.blob", .{ .truncate = true }); - try start_masks.writeAll(id_start_data); - start_masks.close(); - - var continue_meta = try std.fs.cwd().createFileZ("id_continue_bitset.meta.blob", .{ .truncate = true }); - var continue_blob = try std.fs.cwd().createFileZ("id_continue_bitset.blob", .{ .truncate = true }); - - try continue_meta.writeAll(std.mem.asBytes(&id_continue_cached)); - continue_meta.close(); - try continue_blob.writeAll(std.mem.asBytes(id_continue_data)); - continue_blob.close(); -} - -test "Check" { - const id_start_cached_correct = Cache.CachedBitset{ .range = id_start_range, .len = id_start_count + 1 }; - const id_continue_cached_correct = Cache.CachedBitset{ .range = id_end_range, .len = id_end_count + 1 }; - try std.posix.chdir(std.fs.path.dirname(@src().file).?); - var start_cached = try std.fs.cwd().openFileZ("id_start_bitset.meta.blob", .{ .mode = .read_only }); - const start_cached_data = try start_cached.readToEndAlloc(std.heap.c_allocator, 4096); - - try std.testing.expectEqualSlices(u8, start_cached_data, std.mem.asBytes(&id_start_cached_correct)); - - var continue_cached = try std.fs.cwd().openFileZ("id_continue_bitset.meta.blob", .{ .mode = .read_only }); - const continue_cached_data = try continue_cached.readToEndAlloc(std.heap.c_allocator, 4096); - - try std.testing.expectEqualSlices(u8, continue_cached_data, std.mem.asBytes(&id_continue_cached_correct)); - - var start_blob_file = try std.fs.cwd().openFileZ("id_start_bitset.blob", .{ .mode = .read_only }); - const start_blob_data = try start_blob_file.readToEndAlloc(std.heap.c_allocator, try start_blob_file.getEndPos()); - var continue_blob_file = try std.fs.cwd().openFileZ("id_continue_bitset.blob", .{ .mode = .read_only }); - const continue_blob_data = try continue_blob_file.readToEndAlloc(std.heap.c_allocator, try continue_blob_file.getEndPos()); - - try std.testing.expectEqualSlices(u8, start_blob_data, std.mem.asBytes(&id_start.masks)); - try std.testing.expectEqualSlices(u8, continue_blob_data, std.mem.asBytes(&id_continue.masks)); -} - -test "Check #2" { - const id_start_cached_correct = Cache.CachedBitset{ .range = id_start_range, .len = id_start_count + 1 }; - const id_continue_cached_correct = Cache.CachedBitset{ .range = id_end_range, .len = id_end_count + 1 }; - try std.posix.chdir(std.fs.path.dirname(@src().file).?); - const start_cached_data = std.mem.asBytes(&Cache.id_start_meta); - - try std.testing.expectEqualSlices(u8, start_cached_data, std.mem.asBytes(&id_start_cached_correct)); - - const continue_cached_data = std.mem.asBytes(&Cache.id_continue_meta); - - try std.testing.expectEqualSlices(u8, continue_cached_data, std.mem.asBytes(&id_continue_cached_correct)); - - const start_blob_data = Cache.id_start_masks; - const continue_blob_data = Cache.id_continue_masks; - - try std.testing.expectEqualSlices(u8, start_blob_data, std.mem.asBytes(&id_start.masks)); - try std.testing.expectEqualSlices(u8, continue_blob_data, std.mem.asBytes(&id_continue.masks)); -} - -test "Check #3" { - try std.testing.expectEqualSlices(usize, &Cache.id_start.masks, &id_start.masks); - try std.testing.expectEqualSlices(usize, &Cache.id_continue.masks, &id_continue.masks); - - var i: i32 = id_end_range[0]; - while (i < id_end_range[1]) : (i += 1) { - try std.testing.expectEqual(id_continue.isSet(@as(usize, @intCast(id_end_range[1] - i))), Cache.id_continue.isSet(@as(usize, @intCast(id_end_range[1] - i)))); - } - - i = id_start_range[0]; - while (i < id_start_range[1]) : (i += 1) { - try std.testing.expectEqual(id_start.isSet(@as(usize, @intCast(id_start_range[1] - i))), Cache.id_start.isSet(@as(usize, @intCast(id_start_range[1] - i)))); - } -} diff --git a/src/js_parser.zig b/src/js_parser.zig index d225194424de89..db61971b20f712 100644 --- a/src/js_parser.zig +++ b/src/js_parser.zig @@ -197,17 +197,6 @@ const MacroRefData = struct { const MacroRefs = std.AutoArrayHashMap(Ref, MacroRefData); -pub const AllocatedNamesPool = ObjectPool( - std.ArrayList(string), - struct { - pub fn init(allocator: std.mem.Allocator) anyerror!std.ArrayList(string) { - return std.ArrayList(string).init(allocator); - } - }.init, - true, - 4, -); - const Substitution = union(enum) { success: Expr, failure: Expr, @@ -1612,40 +1601,51 @@ pub const SideEffects = enum(u1) { pub fn simplifyBoolean(p: anytype, expr: Expr) Expr { if (!p.options.features.dead_code_elimination) return expr; - switch (expr.data) { - .e_unary => |e| { - if (e.op == .un_not) { - // "!!a" => "a" - if (e.value.data == .e_unary and e.value.data.e_unary.op == .un_not) { - return simplifyBoolean(p, e.value.data.e_unary.value); - } - e.value = simplifyBoolean(p, e.value); - } - }, - .e_binary => |e| { - switch (e.op) { - .bin_logical_and => { - const effects = SideEffects.toBoolean(p, e.right.data); - if (effects.ok and effects.value and effects.side_effects == .no_side_effects) { - // "if (anything && truthyNoSideEffects)" => "if (anything)" - return e.left; - } - }, - .bin_logical_or => { - const effects = SideEffects.toBoolean(p, e.right.data); - if (effects.ok and !effects.value and effects.side_effects == .no_side_effects) { - // "if (anything || falsyNoSideEffects)" => "if (anything)" - return e.left; + var result: Expr = expr; + _simplifyBoolean(p, &result); + return result; + } + + fn _simplifyBoolean(p: anytype, expr: *Expr) void { + while (true) { + switch (expr.data) { + .e_unary => |e| { + if (e.op == .un_not) { + // "!!a" => "a" + if (e.value.data == .e_unary and e.value.data.e_unary.op == .un_not) { + expr.* = e.value.data.e_unary.value; + continue; } - }, - else => {}, - } - }, - else => {}, - } - return expr; + _simplifyBoolean(p, &e.value); + } + }, + .e_binary => |e| { + switch (e.op) { + .bin_logical_and => { + const effects = SideEffects.toBoolean(p, e.right.data); + if (effects.ok and effects.value and effects.side_effects == .no_side_effects) { + // "if (anything && truthyNoSideEffects)" => "if (anything)" + expr.* = e.left; + continue; + } + }, + .bin_logical_or => { + const effects = SideEffects.toBoolean(p, e.right.data); + if (effects.ok and !effects.value and effects.side_effects == .no_side_effects) { + // "if (anything || falsyNoSideEffects)" => "if (anything)" + expr.* = e.left; + continue; + } + }, + else => {}, + } + }, + else => {}, + } + break; + } } pub const toNumber = Expr.Data.toNumber; @@ -2274,10 +2274,18 @@ pub const SideEffects = enum(u1) { } pub fn toBoolean(p: anytype, exp: Expr.Data) Result { + // Only do this check once. if (!p.options.features.dead_code_elimination) { // value should not be read if ok is false, all existing calls to this function already adhere to this return Result{ .ok = false, .value = undefined, .side_effects = .could_have_side_effects }; } + + return toBooleanWithoutDCECheck(exp); + } + + // Avoid passing through *P + // This is a very recursive function. + fn toBooleanWithoutDCECheck(exp: Expr.Data) Result { switch (exp) { .e_null, .e_undefined => { return Result{ .ok = true, .value = false, .side_effects = .no_side_effects }; @@ -2311,10 +2319,9 @@ pub const SideEffects = enum(u1) { return Result{ .ok = true, .value = true, .side_effects = .could_have_side_effects }; }, .un_not => { - var result = toBoolean(p, e_.value.data); + const result = toBooleanWithoutDCECheck(e_.value.data); if (result.ok) { - result.value = !result.value; - return result; + return .{ .ok = true, .value = !result.value, .side_effects = result.side_effects }; } }, else => {}, @@ -2324,21 +2331,21 @@ pub const SideEffects = enum(u1) { switch (e_.op) { .bin_logical_or => { // "anything || truthy" is truthy - const result = toBoolean(p, e_.right.data); + const result = toBooleanWithoutDCECheck(e_.right.data); if (result.value and result.ok) { return Result{ .ok = true, .value = true, .side_effects = .could_have_side_effects }; } }, .bin_logical_and => { // "anything && falsy" is falsy - const result = toBoolean(p, e_.right.data); + const result = toBooleanWithoutDCECheck(e_.right.data); if (!result.value and result.ok) { return Result{ .ok = true, .value = false, .side_effects = .could_have_side_effects }; } }, .bin_comma => { // "anything, truthy/falsy" is truthy/falsy - var result = toBoolean(p, e_.right.data); + var result = toBooleanWithoutDCECheck(e_.right.data); if (result.ok) { result.side_effects = .could_have_side_effects; return result; @@ -2376,7 +2383,7 @@ pub const SideEffects = enum(u1) { } }, .e_inlined_enum => |inlined| { - return toBoolean(p, inlined.value.data); + return toBooleanWithoutDCECheck(inlined.value.data); }, else => {}, } @@ -2611,7 +2618,7 @@ const StmtList = ListManaged(Stmt); // This hash table is used every time we parse function args // Rather than allocating a new hash table each time, we can just reuse the previous allocation -const StringVoidMap = struct { +pub const StringVoidMap = struct { allocator: Allocator, map: bun.StringHashMapUnmanaged(void) = bun.StringHashMapUnmanaged(void){}, @@ -2980,7 +2987,14 @@ pub const Parser = struct { // Which makes sense. // June 4: "Parsing took: 18028000" // June 4: "Rest of this took: 8003000" - _ = try p.parseStmtsUpTo(js_lexer.T.t_end_of_file, &opts); + _ = p.parseStmtsUpTo(js_lexer.T.t_end_of_file, &opts) catch |err| { + if (err == error.StackOverflow) { + // The lexer location won't be totally accurate, but it's kind of helpful. + try p.log.addError(p.source, p.lexer.loc(), "Maximum call stack size exceeded"); + return; + } + return err; + }; // if (comptime ParserType.parser_features.typescript) { @@ -3061,7 +3075,11 @@ pub const Parser = struct { var stmts = try p.allocator.alloc(js_ast.Stmt, 1); stmts[0] = Stmt{ .data = .{ - .s_lazy_export = expr.data, + .s_lazy_export = brk: { + const data = try p.allocator.create(Expr.Data); + data.* = expr.data; + break :brk data; + }, }, .loc = expr.loc, }; @@ -3255,7 +3273,18 @@ pub const Parser = struct { // Which makes sense. // June 4: "Parsing took: 18028000" // June 4: "Rest of this took: 8003000" - const stmts = try p.parseStmtsUpTo(js_lexer.T.t_end_of_file, &opts); + const stmts = p.parseStmtsUpTo(js_lexer.T.t_end_of_file, &opts) catch |err| { + parse_tracer.end(); + if (err == error.StackOverflow) { + // The lexer location won't be totally accurate, but it's kind of helpful. + try p.log.addError(p.source, p.lexer.loc(), "Maximum call stack size exceeded"); + + // Return a SyntaxError so that we reuse existing code for handling erorrs. + return error.SyntaxError; + } + + return err; + }; parse_tracer.end(); @@ -4812,6 +4841,8 @@ fn NewParser_( /// Used by commonjs_at_runtime has_commonjs_export_names: bool = false, + stack_check: bun.StackCheck, + /// When this flag is enabled, we attempt to fold all expressions that /// TypeScript would consider to be "constant expressions". This flag is /// enabled inside each enum body block since TypeScript requires numeric @@ -9495,6 +9526,10 @@ fn NewParser_( } fn parseStmt(p: *P, opts: *ParseStatementOptions) anyerror!Stmt { + if (!p.stack_check.isSafeToRecurse()) { + try bun.throwStackOverflow(); + } + const loc = p.lexer.loc(); switch (p.lexer.token) { @@ -10004,28 +10039,60 @@ fn NewParser_( return p.s(S.Local{ .kind = .k_const, .decls = Decl.List.fromList(decls), .is_export = opts.is_export }, loc); }, .t_if => { - try p.lexer.next(); - try p.lexer.expect(.t_open_paren); - const test_ = try p.parseExpr(.lowest); - try p.lexer.expect(.t_close_paren); - var stmtOpts = ParseStatementOptions{ - .lexical_decl = .allow_fn_inside_if, - }; - const yes = try p.parseStmt(&stmtOpts); - var no: ?Stmt = null; - if (p.lexer.token == .t_else) { + var current_loc = loc; + var root_if: ?Stmt = null; + var current_if: ?*S.If = null; + + while (true) { try p.lexer.next(); - stmtOpts = ParseStatementOptions{ + try p.lexer.expect(.t_open_paren); + const test_ = try p.parseExpr(.lowest); + try p.lexer.expect(.t_close_paren); + var stmtOpts = ParseStatementOptions{ .lexical_decl = .allow_fn_inside_if, }; - no = try p.parseStmt(&stmtOpts); + const yes = try p.parseStmt(&stmtOpts); + + // Create the if node + const if_stmt = p.s(S.If{ + .test_ = test_, + .yes = yes, + .no = null, + }, current_loc); + + // First if statement becomes root + if (root_if == null) { + root_if = if_stmt; + } + + // Link to previous if statement's else branch + if (current_if) |prev_if| { + prev_if.no = if_stmt; + } + + // Set current if for next iteration + current_if = if_stmt.data.s_if; + + if (p.lexer.token != .t_else) { + return root_if.?; + } + + try p.lexer.next(); + + // Handle final else + if (p.lexer.token != .t_if) { + stmtOpts = ParseStatementOptions{ + .lexical_decl = .allow_fn_inside_if, + }; + current_if.?.no = try p.parseStmt(&stmtOpts); + return root_if.?; + } + + // Continue with else if + current_loc = p.lexer.loc(); } - return p.s(S.If{ - .test_ = test_, - .yes = yes, - .no = no, - }, loc); + unreachable; }, .t_do => { try p.lexer.next(); @@ -10145,7 +10212,6 @@ fn NewParser_( var binding: ?js_ast.Binding = null; // The catch binding is optional, and can be omitted - // jarred: TIL! if (p.lexer.token != .t_open_brace) { try p.lexer.expect(.t_open_paren); var value = try p.parseBinding(.{}); @@ -13035,7 +13101,11 @@ fn NewParser_( return try p.parseExprCommon(level, null, flags); } - pub fn parseExprCommon(p: *P, level: Level, errors: ?*DeferredErrors, flags: Expr.EFlags) anyerror!Expr { + fn parseExprCommon(p: *P, level: Level, errors: ?*DeferredErrors, flags: Expr.EFlags) anyerror!Expr { + if (!p.stack_check.isSafeToRecurse()) { + try bun.throwStackOverflow(); + } + const had_pure_comment_before = p.lexer.has_pure_comment_before and !p.options.ignore_dce_annotations; var expr = try p.parsePrefix(level, errors, flags); @@ -15877,15 +15947,19 @@ fn NewParser_( fn bindingCanBeRemovedIfUnused(p: *P, binding: Binding) bool { if (!p.options.features.dead_code_elimination) return false; + return bindingCanBeRemovedIfUnusedWithoutDCECheck(p, binding); + } + + fn bindingCanBeRemovedIfUnusedWithoutDCECheck(p: *P, binding: Binding) bool { switch (binding.data) { .b_array => |bi| { for (bi.items) |*item| { - if (!p.bindingCanBeRemovedIfUnused(item.binding)) { + if (!p.bindingCanBeRemovedIfUnusedWithoutDCECheck(item.binding)) { return false; } if (item.default_value) |*default| { - if (!p.exprCanBeRemovedIfUnused(default)) { + if (!p.exprCanBeRemovedIfUnusedWithoutDCECheck(default)) { return false; } } @@ -15893,16 +15967,16 @@ fn NewParser_( }, .b_object => |bi| { for (bi.properties) |*property| { - if (!property.flags.contains(.is_spread) and !p.exprCanBeRemovedIfUnused(&property.key)) { + if (!property.flags.contains(.is_spread) and !p.exprCanBeRemovedIfUnusedWithoutDCECheck(&property.key)) { return false; } - if (!p.bindingCanBeRemovedIfUnused(property.value)) { + if (!p.bindingCanBeRemovedIfUnusedWithoutDCECheck(property.value)) { return false; } if (property.default_value) |*default| { - if (!p.exprCanBeRemovedIfUnused(default)) { + if (!p.exprCanBeRemovedIfUnusedWithoutDCECheck(default)) { return false; } } @@ -15916,6 +15990,10 @@ fn NewParser_( fn stmtsCanBeRemovedIfUnused(p: *P, stmts: []Stmt) bool { if (!p.options.features.dead_code_elimination) return false; + return stmtsCanBeRemovedifUnusedWithoutDCECheck(p, stmts); + } + + fn stmtsCanBeRemovedifUnusedWithoutDCECheck(p: *P, stmts: []Stmt) bool { for (stmts) |stmt| { switch (stmt.data) { // These never have side effects @@ -15940,7 +16018,7 @@ fn NewParser_( continue; } - if (!p.exprCanBeRemovedIfUnused(&st.value)) { + if (!p.exprCanBeRemovedIfUnusedWithoutDCECheck(&st.value)) { return false; } }, @@ -15950,12 +16028,12 @@ fn NewParser_( if (st.kind == .k_await_using) return false; for (st.decls.slice()) |*decl| { - if (!p.bindingCanBeRemovedIfUnused(decl.binding)) { + if (!p.bindingCanBeRemovedIfUnusedWithoutDCECheck(decl.binding)) { return false; } if (decl.value) |*decl_value| { - if (!p.exprCanBeRemovedIfUnused(decl_value)) { + if (!p.exprCanBeRemovedIfUnusedWithoutDCECheck(decl_value)) { return false; } else if (st.kind == .k_using) { // "using" declarations are only side-effect free if they are initialized to null or undefined @@ -15968,7 +16046,7 @@ fn NewParser_( }, .s_try => |try_| { - if (!p.stmtsCanBeRemovedIfUnused(try_.body) or (try_.finally != null and !p.stmtsCanBeRemovedIfUnused(try_.finally.?.stmts))) { + if (!p.stmtsCanBeRemovedifUnusedWithoutDCECheck(try_.body) or (try_.finally != null and !p.stmtsCanBeRemovedifUnusedWithoutDCECheck(try_.finally.?.stmts))) { return false; } }, @@ -15981,7 +16059,7 @@ fn NewParser_( .stmt => |s2| { switch (s2.data) { .s_expr => |s_expr| { - if (!p.exprCanBeRemovedIfUnused(&s_expr.value)) { + if (!p.exprCanBeRemovedIfUnusedWithoutDCECheck(&s_expr.value)) { return false; } }, @@ -16000,7 +16078,7 @@ fn NewParser_( } }, .expr => |*exp| { - if (!p.exprCanBeRemovedIfUnused(exp)) { + if (!p.exprCanBeRemovedIfUnusedWithoutDCECheck(exp)) { return false; } }, @@ -16050,7 +16128,7 @@ fn NewParser_( } // public for JSNode.JSXWriter usage - pub fn visitExpr(p: *P, expr: Expr) Expr { + pub inline fn visitExpr(p: *P, expr: Expr) Expr { if (only_scan_imports_and_do_not_visit) { @compileError("only_scan_imports_and_do_not_visit must not run this."); } @@ -17811,34 +17889,34 @@ fn NewParser_( return true; } + // This one is never called in places that haven't already checked if DCE is enabled. pub fn classCanBeRemovedIfUnused(p: *P, class: *G.Class) bool { - if (!p.options.features.dead_code_elimination) return false; if (class.extends) |*extends| { - if (!p.exprCanBeRemovedIfUnused(extends)) { + if (!p.exprCanBeRemovedIfUnusedWithoutDCECheck(extends)) { return false; } } for (class.properties) |*property| { if (property.kind == .class_static_block) { - if (!p.stmtsCanBeRemovedIfUnused(property.class_static_block.?.stmts.slice())) { + if (!p.stmtsCanBeRemovedifUnusedWithoutDCECheck(property.class_static_block.?.stmts.slice())) { return false; } continue; } - if (!p.exprCanBeRemovedIfUnused(&(property.key orelse unreachable))) { + if (!p.exprCanBeRemovedIfUnusedWithoutDCECheck(&(property.key orelse unreachable))) { return false; } if (property.value) |*val| { - if (!p.exprCanBeRemovedIfUnused(val)) { + if (!p.exprCanBeRemovedIfUnusedWithoutDCECheck(val)) { return false; } } if (property.initializer) |*val| { - if (!p.exprCanBeRemovedIfUnused(val)) { + if (!p.exprCanBeRemovedIfUnusedWithoutDCECheck(val)) { return false; } } @@ -17852,6 +17930,11 @@ fn NewParser_( // This is to improve the reliability of fast refresh between page loads. pub fn exprCanBeRemovedIfUnused(p: *P, expr: *const Expr) bool { if (!p.options.features.dead_code_elimination) return false; + + return exprCanBeRemovedIfUnusedWithoutDCECheck(p, expr); + } + + fn exprCanBeRemovedIfUnusedWithoutDCECheck(p: *P, expr: *const Expr) bool { switch (expr.data) { .e_null, .e_undefined, @@ -17869,7 +17952,7 @@ fn NewParser_( return true; }, - .e_inlined_enum => |e| return p.exprCanBeRemovedIfUnused(&e.value), + .e_inlined_enum => |e| return p.exprCanBeRemovedIfUnusedWithoutDCECheck(&e.value), .e_dot => |ex| { return ex.can_be_removed_if_unused; @@ -17928,24 +18011,24 @@ fn NewParser_( return true; }, .e_if => |ex| { - return p.exprCanBeRemovedIfUnused(&ex.test_) and + return p.exprCanBeRemovedIfUnusedWithoutDCECheck(&ex.test_) and (p.isSideEffectFreeUnboundIdentifierRef( ex.yes, ex.test_, true, ) or - p.exprCanBeRemovedIfUnused(&ex.yes)) and + p.exprCanBeRemovedIfUnusedWithoutDCECheck(&ex.yes)) and (p.isSideEffectFreeUnboundIdentifierRef( ex.no, ex.test_, false, - ) or p.exprCanBeRemovedIfUnused( + ) or p.exprCanBeRemovedIfUnusedWithoutDCECheck( &ex.no, )); }, .e_array => |ex| { for (ex.items.slice()) |*item| { - if (!p.exprCanBeRemovedIfUnused(item)) { + if (!p.exprCanBeRemovedIfUnusedWithoutDCECheck(item)) { return false; } } @@ -17961,7 +18044,7 @@ fn NewParser_( } if (property.value) |*val| { - if (!p.exprCanBeRemovedIfUnused(val)) { + if (!p.exprCanBeRemovedIfUnusedWithoutDCECheck(val)) { return false; } } @@ -17973,7 +18056,7 @@ fn NewParser_( // can be removed. The annotation causes us to ignore the target. if (ex.can_be_unwrapped_if_unused) { for (ex.args.slice()) |*arg| { - if (!p.exprCanBeRemovedIfUnused(arg)) { + if (!p.exprCanBeRemovedIfUnusedWithoutDCECheck(arg)) { return false; } } @@ -17986,7 +18069,7 @@ fn NewParser_( // can be removed. The annotation causes us to ignore the target. if (ex.can_be_unwrapped_if_unused) { for (ex.args.slice()) |*arg| { - if (!p.exprCanBeRemovedIfUnused(arg)) { + if (!p.exprCanBeRemovedIfUnusedWithoutDCECheck(arg)) { return false; } } @@ -17999,7 +18082,7 @@ fn NewParser_( // These operators must not have any type conversions that can execute code // such as "toString" or "valueOf". They must also never throw any exceptions. .un_void, .un_not => { - return p.exprCanBeRemovedIfUnused(&ex.value); + return p.exprCanBeRemovedIfUnusedWithoutDCECheck(&ex.value); }, // The "typeof" operator doesn't do any type conversions so it can be removed @@ -18017,7 +18100,7 @@ fn NewParser_( return true; } - return p.exprCanBeRemovedIfUnused(&ex.value); + return p.exprCanBeRemovedIfUnusedWithoutDCECheck(&ex.value); }, else => {}, @@ -18031,15 +18114,15 @@ fn NewParser_( .bin_strict_ne, .bin_comma, .bin_nullish_coalescing, - => return p.exprCanBeRemovedIfUnused(&ex.left) and p.exprCanBeRemovedIfUnused(&ex.right), + => return p.exprCanBeRemovedIfUnusedWithoutDCECheck(&ex.left) and p.exprCanBeRemovedIfUnusedWithoutDCECheck(&ex.right), // Special-case "||" to make sure "typeof x === 'undefined' || x" can be removed - .bin_logical_or => return p.exprCanBeRemovedIfUnused(&ex.left) and - (p.isSideEffectFreeUnboundIdentifierRef(ex.right, ex.left, false) or p.exprCanBeRemovedIfUnused(&ex.right)), + .bin_logical_or => return p.exprCanBeRemovedIfUnusedWithoutDCECheck(&ex.left) and + (p.isSideEffectFreeUnboundIdentifierRef(ex.right, ex.left, false) or p.exprCanBeRemovedIfUnusedWithoutDCECheck(&ex.right)), // Special-case "&&" to make sure "typeof x !== 'undefined' && x" can be removed - .bin_logical_and => return p.exprCanBeRemovedIfUnused(&ex.left) and - (p.isSideEffectFreeUnboundIdentifierRef(ex.right, ex.left, true) or p.exprCanBeRemovedIfUnused(&ex.right)), + .bin_logical_and => return p.exprCanBeRemovedIfUnusedWithoutDCECheck(&ex.left) and + (p.isSideEffectFreeUnboundIdentifierRef(ex.right, ex.left, true) or p.exprCanBeRemovedIfUnusedWithoutDCECheck(&ex.right)), // For "==" and "!=", pretend the operator was actually "===" or "!==". If // we know that we can convert it to "==" or "!=", then we can consider the @@ -18051,14 +18134,14 @@ fn NewParser_( ex.left.data, ex.right.data, ) and - p.exprCanBeRemovedIfUnused(&ex.left) and p.exprCanBeRemovedIfUnused(&ex.right), + p.exprCanBeRemovedIfUnusedWithoutDCECheck(&ex.left) and p.exprCanBeRemovedIfUnusedWithoutDCECheck(&ex.right), else => {}, } }, .e_template => |templ| { if (templ.tag == null) { for (templ.parts) |part| { - if (!p.exprCanBeRemovedIfUnused(&part.value) or part.value.knownPrimitive() == .unknown) { + if (!p.exprCanBeRemovedIfUnusedWithoutDCECheck(&part.value) or part.value.knownPrimitive() == .unknown) { return false; } } @@ -18072,7 +18155,7 @@ fn NewParser_( return false; } - // // This is based on exprCanBeRemovedIfUnused. + // // This is based on exprCanBeRemoved // // The main difference: identifiers, functions, arrow functions cause it to return false // pub fn exprCanBeHoistedForJSX(p: *P, expr: *const Expr) bool { // if (comptime jsx_transform_type != .react) { @@ -18984,809 +19067,985 @@ fn NewParser_( const was_after_after_const_local_prefix = p.current_scope.is_after_const_local_prefix; p.current_scope.is_after_const_local_prefix = true; - switch (stmt.data) { - // These don't contain anything to traverse - .s_debugger => { - p.current_scope.is_after_const_local_prefix = was_after_after_const_local_prefix; - if (p.define.drop_debugger) { - return; - } - }, - .s_empty, .s_comment => { + switch (@as(Stmt.Tag, stmt.data)) { + .s_directive, .s_comment, .s_empty => { p.current_scope.is_after_const_local_prefix = was_after_after_const_local_prefix; + try stmts.append(stmt.*); }, .s_type_script => { p.current_scope.is_after_const_local_prefix = was_after_after_const_local_prefix; - // Erase TypeScript constructs from the output completely return; }, - .s_directive => { + .s_debugger => { p.current_scope.is_after_const_local_prefix = was_after_after_const_local_prefix; + if (p.define.drop_debugger) { + return; + } + try stmts.append(stmt.*); }, - .s_import => |data| { - try p.recordDeclaredSymbol(data.namespace_ref); - if (data.default_name) |default_name| { - try p.recordDeclaredSymbol(default_name.ref.?); - } + inline .s_enum, .s_local => |tag| return @field(visitors, @tagName(tag))(p, stmts, stmt, @field(stmt.data, @tagName(tag)), was_after_after_const_local_prefix), + inline else => |tag| return @field(visitors, @tagName(tag))(p, stmts, stmt, @field(stmt.data, @tagName(tag))), - if (data.items.len > 0) { - for (data.items) |*item| { - try p.recordDeclaredSymbol(item.name.ref.?); - } + // Only used by the bundler for lazy export ASTs. + .s_lazy_export => unreachable, + } + } + + const visitors = struct { + pub fn s_import(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.Import) !void { + try p.recordDeclaredSymbol(data.namespace_ref); + + if (data.default_name) |default_name| { + try p.recordDeclaredSymbol(default_name.ref.?); + } + + if (data.items.len > 0) { + for (data.items) |*item| { + try p.recordDeclaredSymbol(item.name.ref.?); } - }, - .s_export_clause => |data| { - // "export {foo}" - var end: usize = 0; - var any_replaced = false; - if (p.options.features.replace_exports.count() > 0) { - for (data.items) |*item| { - const name = p.loadNameFromRef(item.name.ref.?); + } - const symbol = try p.findSymbol(item.alias_loc, name); - const ref = symbol.ref; + try stmts.append(stmt.*); + } + pub fn s_export_clause(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.ExportClause) !void { + // "export {foo}" + var end: usize = 0; + var any_replaced = false; + if (p.options.features.replace_exports.count() > 0) { + for (data.items) |*item| { + const name = p.loadNameFromRef(item.name.ref.?); + + const symbol = try p.findSymbol(item.alias_loc, name); + const ref = symbol.ref; + + if (p.options.features.replace_exports.getPtr(name)) |entry| { + if (entry.* != .replace) p.ignoreUsage(symbol.ref); + _ = p.injectReplacementExport(stmts, symbol.ref, stmt.loc, entry); + any_replaced = true; + continue; + } - if (p.options.features.replace_exports.getPtr(name)) |entry| { - if (entry.* != .replace) p.ignoreUsage(symbol.ref); - _ = p.injectReplacementExport(stmts, symbol.ref, stmt.loc, entry); - any_replaced = true; - continue; + if (p.symbols.items[ref.innerIndex()].kind == .unbound) { + // Silently strip exports of non-local symbols in TypeScript, since + // those likely correspond to type-only exports. But report exports of + // non-local symbols as errors in JavaScript. + if (!is_typescript_enabled) { + const r = js_lexer.rangeOfIdentifier(p.source, item.name.loc); + try p.log.addRangeErrorFmt(p.source, r, p.allocator, "\"{s}\" is not declared in this file", .{name}); } + continue; + } - if (p.symbols.items[ref.innerIndex()].kind == .unbound) { - // Silently strip exports of non-local symbols in TypeScript, since - // those likely correspond to type-only exports. But report exports of - // non-local symbols as errors in JavaScript. - if (!is_typescript_enabled) { - const r = js_lexer.rangeOfIdentifier(p.source, item.name.loc); - try p.log.addRangeErrorFmt(p.source, r, p.allocator, "\"{s}\" is not declared in this file", .{name}); - } + item.name.ref = ref; + data.items[end] = item.*; + end += 1; + } + } else { + for (data.items) |*item| { + const name = p.loadNameFromRef(item.name.ref.?); + const symbol = try p.findSymbol(item.alias_loc, name); + const ref = symbol.ref; + + if (p.symbols.items[ref.innerIndex()].kind == .unbound) { + // Silently strip exports of non-local symbols in TypeScript, since + // those likely correspond to type-only exports. But report exports of + // non-local symbols as errors in JavaScript. + if (!is_typescript_enabled) { + const r = js_lexer.rangeOfIdentifier(p.source, item.name.loc); + try p.log.addRangeErrorFmt(p.source, r, p.allocator, "\"{s}\" is not declared in this file", .{name}); continue; } - - item.name.ref = ref; - data.items[end] = item.*; - end += 1; + continue; } - } else { - for (data.items) |*item| { - const name = p.loadNameFromRef(item.name.ref.?); - const symbol = try p.findSymbol(item.alias_loc, name); - const ref = symbol.ref; - - if (p.symbols.items[ref.innerIndex()].kind == .unbound) { - // Silently strip exports of non-local symbols in TypeScript, since - // those likely correspond to type-only exports. But report exports of - // non-local symbols as errors in JavaScript. - if (!is_typescript_enabled) { - const r = js_lexer.rangeOfIdentifier(p.source, item.name.loc); - try p.log.addRangeErrorFmt(p.source, r, p.allocator, "\"{s}\" is not declared in this file", .{name}); - continue; - } - continue; - } - item.name.ref = ref; - data.items[end] = item.*; - end += 1; - } + item.name.ref = ref; + data.items[end] = item.*; + end += 1; } + } - const remove_for_tree_shaking = any_replaced and end == 0 and data.items.len > 0 and p.options.tree_shaking; - data.items.len = end; + const remove_for_tree_shaking = any_replaced and end == 0 and data.items.len > 0 and p.options.tree_shaking; + data.items.len = end; - if (remove_for_tree_shaking) { - return; - } - }, - .s_export_from => |data| { - // "export {foo} from 'path'" - const name = p.loadNameFromRef(data.namespace_ref); + if (remove_for_tree_shaking) { + return; + } - data.namespace_ref = try p.newSymbol(.other, name); - try p.current_scope.generated.push(p.allocator, data.namespace_ref); - try p.recordDeclaredSymbol(data.namespace_ref); + try stmts.append(stmt.*); + } + pub fn s_export_from(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.ExportFrom) !void { - if (p.options.features.replace_exports.count() > 0) { - var j: usize = 0; - // This is a re-export and the symbols created here are used to reference - for (data.items) |item| { - const old_ref = item.name.ref.?; + // "export {foo} from 'path'" + const name = p.loadNameFromRef(data.namespace_ref); - if (p.options.features.replace_exports.count() > 0) { - if (p.options.features.replace_exports.getPtr(item.alias)) |entry| { - _ = p.injectReplacementExport(stmts, old_ref, logger.Loc.Empty, entry); + data.namespace_ref = try p.newSymbol(.other, name); + try p.current_scope.generated.push(p.allocator, data.namespace_ref); + try p.recordDeclaredSymbol(data.namespace_ref); - continue; - } - } + if (p.options.features.replace_exports.count() > 0) { + var j: usize = 0; + // This is a re-export and the symbols created here are used to reference + for (data.items) |item| { + const old_ref = item.name.ref.?; - const _name = p.loadNameFromRef(old_ref); + if (p.options.features.replace_exports.count() > 0) { + if (p.options.features.replace_exports.getPtr(item.alias)) |entry| { + _ = p.injectReplacementExport(stmts, old_ref, logger.Loc.Empty, entry); - const ref = try p.newSymbol(.import, _name); - try p.current_scope.generated.push(p.allocator, ref); - try p.recordDeclaredSymbol(ref); - data.items[j] = item; - data.items[j].name.ref = ref; - j += 1; + continue; + } } - data.items.len = j; + const _name = p.loadNameFromRef(old_ref); - if (j == 0 and data.items.len > 0) { - return; - } - } else { - // This is a re-export and the symbols created here are used to reference - for (data.items) |*item| { - const _name = p.loadNameFromRef(item.name.ref.?); - const ref = try p.newSymbol(.import, _name); - try p.current_scope.generated.push(p.allocator, ref); - try p.recordDeclaredSymbol(ref); - item.name.ref = ref; - } + const ref = try p.newSymbol(.import, _name); + try p.current_scope.generated.push(p.allocator, ref); + try p.recordDeclaredSymbol(ref); + data.items[j] = item; + data.items[j].name.ref = ref; + j += 1; } - }, - .s_export_star => |data| { - // "export * from 'path'" - const name = p.loadNameFromRef(data.namespace_ref); - data.namespace_ref = try p.newSymbol(.other, name); - try p.current_scope.generated.push(p.allocator, data.namespace_ref); - try p.recordDeclaredSymbol(data.namespace_ref); - - // "export * as ns from 'path'" - if (data.alias) |alias| { - if (p.options.features.replace_exports.count() > 0) { - if (p.options.features.replace_exports.getPtr(alias.original_name)) |entry| { - _ = p.injectReplacementExport(stmts, p.declareSymbol(.other, logger.Loc.Empty, alias.original_name) catch unreachable, logger.Loc.Empty, entry); - return; - } - } + + data.items.len = j; + + if (j == 0 and data.items.len > 0) { + return; } - }, - .s_export_default => |data| { - defer { - if (data.default_name.ref) |ref| { - p.recordDeclaredSymbol(ref) catch unreachable; - } + } else { + // This is a re-export and the symbols created here are used to reference + for (data.items) |*item| { + const _name = p.loadNameFromRef(item.name.ref.?); + const ref = try p.newSymbol(.import, _name); + try p.current_scope.generated.push(p.allocator, ref); + try p.recordDeclaredSymbol(ref); + item.name.ref = ref; } + } + + try stmts.append(stmt.*); + } + pub fn s_export_star(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.ExportStar) !void { - var mark_for_replace: bool = false; + // "export * from 'path'" + const name = p.loadNameFromRef(data.namespace_ref); + data.namespace_ref = try p.newSymbol(.other, name); + try p.current_scope.generated.push(p.allocator, data.namespace_ref); + try p.recordDeclaredSymbol(data.namespace_ref); - const orig_dead = p.is_control_flow_dead; + // "export * as ns from 'path'" + if (data.alias) |alias| { if (p.options.features.replace_exports.count() > 0) { - if (p.options.features.replace_exports.getPtr("default")) |entry| { - p.is_control_flow_dead = p.options.features.dead_code_elimination and (entry.* != .replace); - mark_for_replace = true; + if (p.options.features.replace_exports.getPtr(alias.original_name)) |entry| { + _ = p.injectReplacementExport(stmts, p.declareSymbol(.other, logger.Loc.Empty, alias.original_name) catch unreachable, logger.Loc.Empty, entry); + return; } } + } - defer { - p.is_control_flow_dead = orig_dead; + try stmts.append(stmt.*); + } + pub fn s_export_default(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.ExportDefault) !void { + defer { + if (data.default_name.ref) |ref| { + p.recordDeclaredSymbol(ref) catch unreachable; } + } - switch (data.value) { - .expr => |expr| { - const was_anonymous_named_expr = expr.isAnonymousNamed(); + var mark_for_replace: bool = false; - data.value.expr = p.visitExpr(expr); + const orig_dead = p.is_control_flow_dead; + if (p.options.features.replace_exports.count() > 0) { + if (p.options.features.replace_exports.getPtr("default")) |entry| { + p.is_control_flow_dead = p.options.features.dead_code_elimination and (entry.* != .replace); + mark_for_replace = true; + } + } - if (p.is_control_flow_dead) { - return; - } + defer { + p.is_control_flow_dead = orig_dead; + } - // Optionally preserve the name + switch (data.value) { + .expr => |expr| { + const was_anonymous_named_expr = expr.isAnonymousNamed(); - data.value.expr = p.maybeKeepExprSymbolName(data.value.expr, js_ast.ClauseItem.default_alias, was_anonymous_named_expr); + data.value.expr = p.visitExpr(expr); - // Discard type-only export default statements - if (is_typescript_enabled) { - switch (data.value.expr.data) { - .e_identifier => |ident| { - if (!ident.ref.isSourceContentsSlice()) { - const symbol = p.symbols.items[ident.ref.innerIndex()]; - if (symbol.kind == .unbound) { - if (p.local_type_names.get(symbol.original_name)) |local_type| { - if (local_type) { - // the name points to a type - // don't try to declare this symbol - data.default_name.ref = null; - return; - } + if (p.is_control_flow_dead) { + return; + } + + // Optionally preserve the name + + data.value.expr = p.maybeKeepExprSymbolName(data.value.expr, js_ast.ClauseItem.default_alias, was_anonymous_named_expr); + + // Discard type-only export default statements + if (is_typescript_enabled) { + switch (data.value.expr.data) { + .e_identifier => |ident| { + if (!ident.ref.isSourceContentsSlice()) { + const symbol = p.symbols.items[ident.ref.innerIndex()]; + if (symbol.kind == .unbound) { + if (p.local_type_names.get(symbol.original_name)) |local_type| { + if (local_type) { + // the name points to a type + // don't try to declare this symbol + data.default_name.ref = null; + return; } } } - }, - else => {}, - } + } + }, + else => {}, } + } - if (data.default_name.ref.?.isSourceContentsSlice()) { - data.default_name = createDefaultName(p, data.value.expr.loc) catch unreachable; - } + if (data.default_name.ref.?.isSourceContentsSlice()) { + data.default_name = createDefaultName(p, data.value.expr.loc) catch unreachable; + } - if (p.options.features.server_components.wrapsExports()) { - data.value.expr = p.wrapValueForServerComponentReference(data.value.expr, "default"); - } + if (p.options.features.server_components.wrapsExports()) { + data.value.expr = p.wrapValueForServerComponentReference(data.value.expr, "default"); + } - // If there are lowered "using" declarations, change this into a "var" - if (p.current_scope.parent == null and p.will_wrap_module_in_try_catch_for_using) { - try stmts.ensureUnusedCapacity(2); + // If there are lowered "using" declarations, change this into a "var" + if (p.current_scope.parent == null and p.will_wrap_module_in_try_catch_for_using) { + try stmts.ensureUnusedCapacity(2); - const decls = p.allocator.alloc(G.Decl, 1) catch bun.outOfMemory(); - decls[0] = .{ - .binding = p.b(B.Identifier{ .ref = data.default_name.ref.? }, data.default_name.loc), - .value = data.value.expr, - }; - stmts.appendAssumeCapacity(p.s(S.Local{ - .decls = G.Decl.List.init(decls), - }, stmt.loc)); - const items = p.allocator.alloc(js_ast.ClauseItem, 1) catch bun.outOfMemory(); - items[0] = js_ast.ClauseItem{ - .alias = "default", - .alias_loc = data.default_name.loc, - .name = data.default_name, - }; - stmts.appendAssumeCapacity(p.s(S.ExportClause{ - .items = items, - }, stmt.loc)); + const decls = p.allocator.alloc(G.Decl, 1) catch bun.outOfMemory(); + decls[0] = .{ + .binding = p.b(B.Identifier{ .ref = data.default_name.ref.? }, data.default_name.loc), + .value = data.value.expr, + }; + stmts.appendAssumeCapacity(p.s(S.Local{ + .decls = G.Decl.List.init(decls), + }, stmt.loc)); + const items = p.allocator.alloc(js_ast.ClauseItem, 1) catch bun.outOfMemory(); + items[0] = js_ast.ClauseItem{ + .alias = "default", + .alias_loc = data.default_name.loc, + .name = data.default_name, + }; + stmts.appendAssumeCapacity(p.s(S.ExportClause{ + .items = items, + }, stmt.loc)); + } + + if (mark_for_replace) { + const entry = p.options.features.replace_exports.getPtr("default").?; + if (entry.* == .replace) { + data.value.expr = entry.replace; + } else { + _ = p.injectReplacementExport(stmts, Ref.None, logger.Loc.Empty, entry); + return; } + } + }, - if (mark_for_replace) { - const entry = p.options.features.replace_exports.getPtr("default").?; - if (entry.* == .replace) { - data.value.expr = entry.replace; + .stmt => |s2| { + switch (s2.data) { + .s_function => |func| { + var name: string = ""; + if (func.func.name) |func_loc| { + name = p.loadNameFromRef(func_loc.ref.?); } else { - _ = p.injectReplacementExport(stmts, Ref.None, logger.Loc.Empty, entry); - return; + func.func.name = data.default_name; + name = js_ast.ClauseItem.default_alias; } - } - }, - .stmt => |s2| { - switch (s2.data) { - .s_function => |func| { - var name: string = ""; - if (func.func.name) |func_loc| { - name = p.loadNameFromRef(func_loc.ref.?); - } else { - func.func.name = data.default_name; - name = js_ast.ClauseItem.default_alias; - } + var react_hook_data: ?ReactRefresh.HookContext = null; + const prev = p.react_refresh.hook_ctx_storage; + defer p.react_refresh.hook_ctx_storage = prev; + p.react_refresh.hook_ctx_storage = &react_hook_data; - var react_hook_data: ?ReactRefresh.HookContext = null; - const prev = p.react_refresh.hook_ctx_storage; - defer p.react_refresh.hook_ctx_storage = prev; - p.react_refresh.hook_ctx_storage = &react_hook_data; + func.func = p.visitFunc(func.func, func.func.open_parens_loc); - func.func = p.visitFunc(func.func, func.func.open_parens_loc); + if (react_hook_data) |*hook| { + stmts.append(p.getReactRefreshHookSignalDecl(hook.signature_cb)) catch bun.outOfMemory(); - if (react_hook_data) |*hook| { - stmts.append(p.getReactRefreshHookSignalDecl(hook.signature_cb)) catch bun.outOfMemory(); + data.value = .{ + .expr = p.getReactRefreshHookSignalInit(hook, p.newExpr( + E.Function{ .func = func.func }, + stmt.loc, + )), + }; + } - data.value = .{ - .expr = p.getReactRefreshHookSignalInit(hook, p.newExpr( - E.Function{ .func = func.func }, - stmt.loc, - )), - }; - } + if (p.is_control_flow_dead) { + return; + } - if (p.is_control_flow_dead) { + if (mark_for_replace) { + const entry = p.options.features.replace_exports.getPtr("default").?; + if (entry.* == .replace) { + data.value = .{ .expr = entry.replace }; + } else { + _ = p.injectReplacementExport(stmts, Ref.None, logger.Loc.Empty, entry); return; } + } - if (mark_for_replace) { - const entry = p.options.features.replace_exports.getPtr("default").?; - if (entry.* == .replace) { - data.value = .{ .expr = entry.replace }; - } else { - _ = p.injectReplacementExport(stmts, Ref.None, logger.Loc.Empty, entry); - return; - } - } + if (data.default_name.ref.?.isSourceContentsSlice()) { + data.default_name = createDefaultName(p, stmt.loc) catch unreachable; + } - if (data.default_name.ref.?.isSourceContentsSlice()) { - data.default_name = createDefaultName(p, stmt.loc) catch unreachable; - } + if (p.options.features.server_components.wrapsExports()) { + data.value = .{ .expr = p.wrapValueForServerComponentReference(p.newExpr(E.Function{ .func = func.func }, stmt.loc), "default") }; + } - if (p.options.features.server_components.wrapsExports()) { - data.value = .{ .expr = p.wrapValueForServerComponentReference(p.newExpr(E.Function{ .func = func.func }, stmt.loc), "default") }; - } + stmts.append(stmt.*) catch unreachable; - stmts.append(stmt.*) catch unreachable; + // if (func.func.name != null and func.func.name.?.ref != null) { + // stmts.append(p.keepStmtSymbolName(func.func.name.?.loc, func.func.name.?.ref.?, name)) catch unreachable; + // } + // prevent doubling export default function name + return; + }, + .s_class => |class| { + _ = p.visitClass(s2.loc, &class.class, data.default_name.ref.?); - // if (func.func.name != null and func.func.name.?.ref != null) { - // stmts.append(p.keepStmtSymbolName(func.func.name.?.loc, func.func.name.?.ref.?, name)) catch unreachable; - // } - // prevent doubling export default function name + if (p.is_control_flow_dead) return; - }, - .s_class => |class| { - _ = p.visitClass(s2.loc, &class.class, data.default_name.ref.?); - if (p.is_control_flow_dead) + if (mark_for_replace) { + const entry = p.options.features.replace_exports.getPtr("default").?; + if (entry.* == .replace) { + data.value = .{ .expr = entry.replace }; + } else { + _ = p.injectReplacementExport(stmts, Ref.None, logger.Loc.Empty, entry); return; - - if (mark_for_replace) { - const entry = p.options.features.replace_exports.getPtr("default").?; - if (entry.* == .replace) { - data.value = .{ .expr = entry.replace }; - } else { - _ = p.injectReplacementExport(stmts, Ref.None, logger.Loc.Empty, entry); - return; - } } + } - if (data.default_name.ref.?.isSourceContentsSlice()) { - data.default_name = createDefaultName(p, stmt.loc) catch unreachable; - } + if (data.default_name.ref.?.isSourceContentsSlice()) { + data.default_name = createDefaultName(p, stmt.loc) catch unreachable; + } - // We only inject a name into classes when there is a decorator - if (class.class.has_decorators) { - if (class.class.class_name == null or - class.class.class_name.?.ref == null) - { - class.class.class_name = data.default_name; - } + // We only inject a name into classes when there is a decorator + if (class.class.has_decorators) { + if (class.class.class_name == null or + class.class.class_name.?.ref == null) + { + class.class.class_name = data.default_name; } + } - // This is to handle TS decorators, mostly. - var class_stmts = p.lowerClass(.{ .stmt = s2 }); - bun.assert(class_stmts[0].data == .s_class); + // This is to handle TS decorators, mostly. + var class_stmts = p.lowerClass(.{ .stmt = s2 }); + bun.assert(class_stmts[0].data == .s_class); - if (class_stmts.len > 1) { - data.value.stmt = class_stmts[0]; - stmts.append(stmt.*) catch {}; - stmts.appendSlice(class_stmts[1..]) catch {}; - } else { - data.value.stmt = class_stmts[0]; - stmts.append(stmt.*) catch {}; - } + if (class_stmts.len > 1) { + data.value.stmt = class_stmts[0]; + stmts.append(stmt.*) catch {}; + stmts.appendSlice(class_stmts[1..]) catch {}; + } else { + data.value.stmt = class_stmts[0]; + stmts.append(stmt.*) catch {}; + } - if (p.options.features.server_components.wrapsExports()) { - data.value = .{ .expr = p.wrapValueForServerComponentReference(p.newExpr(class.class, stmt.loc), "default") }; - } + if (p.options.features.server_components.wrapsExports()) { + data.value = .{ .expr = p.wrapValueForServerComponentReference(p.newExpr(class.class, stmt.loc), "default") }; + } - return; - }, - else => {}, - } - }, - } - }, - .s_export_equals => |data| { - // "module.exports = value" - stmts.append( - Stmt.assign( - p.@"module.exports"(stmt.loc), - p.visitExpr(data.value), - ), - ) catch unreachable; - p.recordUsage(p.module_ref); - return; - }, - .s_break => |data| { - if (data.label) |*label| { - const name = p.loadNameFromRef(label.ref orelse p.panicLoc("Expected label to have a ref", .{}, label.loc)); - const res = p.findLabelSymbol(label.loc, name); - if (res.found) { - label.ref = res.ref; - } else { - data.label = null; + return; + }, + else => {}, } - } else if (!p.fn_or_arrow_data_visit.is_inside_loop and !p.fn_or_arrow_data_visit.is_inside_switch) { - const r = js_lexer.rangeOfIdentifier(p.source, stmt.loc); - p.log.addRangeError(p.source, r, "Cannot use \"break\" here") catch unreachable; + }, + } + + try stmts.append(stmt.*); + } + pub fn s_function(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.Function) !void { + // We mark it as dead, but the value may not actually be dead + // We just want to be sure to not increment the usage counts for anything in the function + const mark_as_dead = p.options.features.dead_code_elimination and data.func.flags.contains(.is_export) and + p.options.features.replace_exports.count() > 0 and p.isExportToEliminate(data.func.name.?.ref.?); + const original_is_dead = p.is_control_flow_dead; + + if (mark_as_dead) { + p.is_control_flow_dead = true; + } + defer { + if (mark_as_dead) { + p.is_control_flow_dead = original_is_dead; } - }, - .s_continue => |data| { - if (data.label) |*label| { - const name = p.loadNameFromRef(label.ref orelse p.panicLoc("Expected continue label to have a ref", .{}, label.loc)); - const res = p.findLabelSymbol(label.loc, name); - label.ref = res.ref; - if (res.found and !res.is_loop) { - const r = js_lexer.rangeOfIdentifier(p.source, stmt.loc); - p.log.addRangeErrorFmt(p.source, r, p.allocator, "Cannot \"continue\" to label {s}", .{name}) catch unreachable; - } - } else if (!p.fn_or_arrow_data_visit.is_inside_loop) { - const r = js_lexer.rangeOfIdentifier(p.source, stmt.loc); - p.log.addRangeError(p.source, r, "Cannot use \"continue\" here") catch unreachable; + } + + var react_hook_data: ?ReactRefresh.HookContext = null; + const prev = p.react_refresh.hook_ctx_storage; + defer p.react_refresh.hook_ctx_storage = prev; + p.react_refresh.hook_ctx_storage = &react_hook_data; + + data.func = p.visitFunc(data.func, data.func.open_parens_loc); + + const name_ref = data.func.name.?.ref.?; + bun.assert(name_ref.tag == .symbol); + const name_symbol = &p.symbols.items[name_ref.innerIndex()]; + const original_name = name_symbol.original_name; + + // Handle exporting this function from a namespace + if (data.func.flags.contains(.is_export) and p.enclosing_namespace_arg_ref != null) { + data.func.flags.remove(.is_export); + + const enclosing_namespace_arg_ref = p.enclosing_namespace_arg_ref orelse bun.outOfMemory(); + stmts.ensureUnusedCapacity(3) catch bun.outOfMemory(); + stmts.appendAssumeCapacity(stmt.*); + stmts.appendAssumeCapacity(Stmt.assign( + p.newExpr(E.Dot{ + .target = p.newExpr(E.Identifier{ .ref = enclosing_namespace_arg_ref }, stmt.loc), + .name = original_name, + .name_loc = data.func.name.?.loc, + }, stmt.loc), + p.newExpr(E.Identifier{ .ref = data.func.name.?.ref.? }, data.func.name.?.loc), + )); + } else if (!mark_as_dead) { + if (name_symbol.remove_overwritten_function_declaration) { + return; } - }, - .s_label => |data| { - p.pushScopeForVisitPass(.label, stmt.loc) catch unreachable; - const name = p.loadNameFromRef(data.name.ref.?); - const ref = p.newSymbol(.label, name) catch unreachable; - data.name.ref = ref; - p.current_scope.label_ref = ref; - switch (data.stmt.data) { - .s_for, .s_for_in, .s_for_of, .s_while, .s_do_while => { - p.current_scope.label_stmt_is_loop = true; - }, - else => {}, + + if (p.options.features.server_components.wrapsExports() and data.func.flags.contains(.is_export)) { + // Convert this into `export var = registerClientReference(, ...);` + const name = data.func.name.?; + // From the inner scope, have code reference the wrapped function. + data.func.name = null; + try stmts.append(p.s(S.Local{ + .kind = .k_var, + .is_export = true, + .decls = try G.Decl.List.fromSlice(p.allocator, &.{.{ + .binding = p.b(B.Identifier{ .ref = name_ref }, name.loc), + .value = p.wrapValueForServerComponentReference( + p.newExpr(E.Function{ .func = data.func }, stmt.loc), + original_name, + ), + }}), + }, stmt.loc)); + } else { + stmts.append(stmt.*) catch bun.outOfMemory(); } + } else if (mark_as_dead) { + if (p.options.features.replace_exports.getPtr(original_name)) |replacement| { + _ = p.injectReplacementExport(stmts, name_ref, data.func.name.?.loc, replacement); + } + } - data.stmt = p.visitSingleStmt(data.stmt, StmtsKind.none); - p.popScope(); - }, - .s_local => |data| { - // TODO: Silently remove unsupported top-level "await" in dead code branches - // (this was from 'await using' syntax) + if (p.options.features.react_fast_refresh) { + if (react_hook_data) |*hook| { + try stmts.append(p.getReactRefreshHookSignalDecl(hook.signature_cb)); + try stmts.append(p.s(S.SExpr{ + .value = p.getReactRefreshHookSignalInit(hook, Expr.initIdentifier(name_ref, logger.Loc.Empty)), + }, logger.Loc.Empty)); + } - // Local statements do not end the const local prefix - p.current_scope.is_after_const_local_prefix = was_after_after_const_local_prefix; + if (p.current_scope == p.module_scope) { + try p.handleReactRefreshRegister(stmts, original_name, name_ref); + } + } - const decls_len = if (!(data.is_export and p.options.features.replace_exports.entries.len > 0)) - p.visitDecls(data.decls.slice(), data.kind == .k_const, false) - else - p.visitDecls(data.decls.slice(), data.kind == .k_const, true); + return; + } - const is_now_dead = data.decls.len > 0 and decls_len == 0; - if (is_now_dead) { - return; + pub fn s_class(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.Class) !void { + const mark_as_dead = p.options.features.dead_code_elimination and data.is_export and + p.options.features.replace_exports.count() > 0 and p.isExportToEliminate(data.class.class_name.?.ref.?); + const original_is_dead = p.is_control_flow_dead; + + if (mark_as_dead) { + p.is_control_flow_dead = true; + } + defer { + if (mark_as_dead) { + p.is_control_flow_dead = original_is_dead; } + } - data.decls.len = @as(u32, @truncate(decls_len)); + _ = p.visitClass(stmt.loc, &data.class, Ref.None); - // Handle being exported inside a namespace - if (data.is_export and p.enclosing_namespace_arg_ref != null) { - for (data.decls.slice()) |*d| { - if (d.value) |val| { - p.recordUsage((p.enclosing_namespace_arg_ref orelse unreachable)); - // TODO: is it necessary to lowerAssign? why does esbuild do it _most_ of the time? - stmts.append(p.s(S.SExpr{ - .value = Expr.assign(Binding.toExpr(&d.binding, p.to_expr_wrapper_namespace), val), - }, stmt.loc)) catch unreachable; - } + // Remove the export flag inside a namespace + const was_export_inside_namespace = data.is_export and p.enclosing_namespace_arg_ref != null; + if (was_export_inside_namespace) { + data.is_export = false; + } + + const lowered = p.lowerClass(js_ast.StmtOrExpr{ .stmt = stmt.* }); + + if (!mark_as_dead or was_export_inside_namespace) + // Lower class field syntax for browsers that don't support it + stmts.appendSlice(lowered) catch unreachable + else { + const ref = data.class.class_name.?.ref.?; + if (p.options.features.replace_exports.getPtr(p.loadNameFromRef(ref))) |replacement| { + if (p.injectReplacementExport(stmts, ref, data.class.class_name.?.loc, replacement)) { + p.is_control_flow_dead = original_is_dead; } + } + } - return; + // Handle exporting this class from a namespace + if (was_export_inside_namespace) { + stmts.append( + Stmt.assign( + p.newExpr( + E.Dot{ + .target = p.newExpr( + E.Identifier{ .ref = p.enclosing_namespace_arg_ref.? }, + stmt.loc, + ), + .name = p.symbols.items[data.class.class_name.?.ref.?.innerIndex()].original_name, + .name_loc = data.class.class_name.?.loc, + }, + stmt.loc, + ), + p.newExpr( + E.Identifier{ .ref = data.class.class_name.?.ref.? }, + data.class.class_name.?.loc, + ), + ), + ) catch unreachable; + } + + return; + } + pub fn s_export_equals(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.ExportEquals) !void { + // "module.exports = value" + stmts.append( + Stmt.assign( + p.@"module.exports"(stmt.loc), + p.visitExpr(data.value), + ), + ) catch unreachable; + p.recordUsage(p.module_ref); + return; + } + pub fn s_break(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.Break) !void { + if (data.label) |*label| { + const name = p.loadNameFromRef(label.ref orelse p.panicLoc("Expected label to have a ref", .{}, label.loc)); + const res = p.findLabelSymbol(label.loc, name); + if (res.found) { + label.ref = res.ref; + } else { + data.label = null; } + } else if (!p.fn_or_arrow_data_visit.is_inside_loop and !p.fn_or_arrow_data_visit.is_inside_switch) { + const r = js_lexer.rangeOfIdentifier(p.source, stmt.loc); + p.log.addRangeError(p.source, r, "Cannot use \"break\" here") catch unreachable; + } - // Optimization: Avoid unnecessary "using" machinery by changing ones - // initialized to "null" or "undefined" into a normal variable. Note that - // "await using" still needs the "await", so we can't do it for those. - if (p.options.features.minify_syntax and data.kind == .k_using) { - data.kind = .k_let; - for (data.decls.slice()) |*d| { - if (d.value) |val| { - if (val.data != .e_null and val.data != .e_undefined) { - data.kind = .k_using; - break; - } - } - } + try stmts.append(stmt.*); + } + pub fn s_continue(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.Continue) !void { + if (data.label) |*label| { + const name = p.loadNameFromRef(label.ref orelse p.panicLoc("Expected continue label to have a ref", .{}, label.loc)); + const res = p.findLabelSymbol(label.loc, name); + label.ref = res.ref; + if (res.found and !res.is_loop) { + const r = js_lexer.rangeOfIdentifier(p.source, stmt.loc); + p.log.addRangeErrorFmt(p.source, r, p.allocator, "Cannot \"continue\" to label {s}", .{name}) catch unreachable; } + } else if (!p.fn_or_arrow_data_visit.is_inside_loop) { + const r = js_lexer.rangeOfIdentifier(p.source, stmt.loc); + p.log.addRangeError(p.source, r, "Cannot use \"continue\" here") catch unreachable; + } - // We must relocate vars in order to safely handle removing if/else depending on NODE_ENV. - // Edgecase: - // `export var` is skipped because it's unnecessary. That *should* be a noop, but it loses the `is_export` flag if we're in HMR. - const kind = p.selectLocalKind(data.kind); - if (kind == .k_var and !data.is_export) { - const relocated = p.maybeRelocateVarsToTopLevel(data.decls.slice(), .normal); - if (relocated.ok) { - if (relocated.stmt) |new_stmt| { - stmts.append(new_stmt) catch unreachable; - } + try stmts.append(stmt.*); + } + pub fn s_label(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.Label) !void { + p.pushScopeForVisitPass(.label, stmt.loc) catch unreachable; + const name = p.loadNameFromRef(data.name.ref.?); + const ref = p.newSymbol(.label, name) catch unreachable; + data.name.ref = ref; + p.current_scope.label_ref = ref; + switch (data.stmt.data) { + .s_for, .s_for_in, .s_for_of, .s_while, .s_do_while => { + p.current_scope.label_stmt_is_loop = true; + }, + else => {}, + } - return; + data.stmt = p.visitSingleStmt(data.stmt, StmtsKind.none); + p.popScope(); + + try stmts.append(stmt.*); + } + pub fn s_local(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.Local, was_after_after_const_local_prefix: bool) !void { + // TODO: Silently remove unsupported top-level "await" in dead code branches + // (this was from 'await using' syntax) + + // Local statements do not end the const local prefix + p.current_scope.is_after_const_local_prefix = was_after_after_const_local_prefix; + + const decls_len = if (!(data.is_export and p.options.features.replace_exports.entries.len > 0)) + p.visitDecls(data.decls.slice(), data.kind == .k_const, false) + else + p.visitDecls(data.decls.slice(), data.kind == .k_const, true); + + const is_now_dead = data.decls.len > 0 and decls_len == 0; + if (is_now_dead) { + return; + } + + data.decls.len = @as(u32, @truncate(decls_len)); + + // Handle being exported inside a namespace + if (data.is_export and p.enclosing_namespace_arg_ref != null) { + for (data.decls.slice()) |*d| { + if (d.value) |val| { + p.recordUsage((p.enclosing_namespace_arg_ref orelse unreachable)); + // TODO: is it necessary to lowerAssign? why does esbuild do it _most_ of the time? + stmts.append(p.s(S.SExpr{ + .value = Expr.assign(Binding.toExpr(&d.binding, p.to_expr_wrapper_namespace), val), + }, stmt.loc)) catch unreachable; } } - data.kind = kind; - try stmts.append(stmt.*); + return; + } - if (data.is_export and p.options.features.server_components.wrapsExports()) { - for (data.decls.slice()) |*decl| try_annotate: { - const val = decl.value orelse break :try_annotate; - switch (val.data) { - .e_arrow, .e_function => {}, - else => break :try_annotate, + // Optimization: Avoid unnecessary "using" machinery by changing ones + // initialized to "null" or "undefined" into a normal variable. Note that + // "await using" still needs the "await", so we can't do it for those. + if (p.options.features.minify_syntax and data.kind == .k_using) { + data.kind = .k_let; + for (data.decls.slice()) |*d| { + if (d.value) |val| { + if (val.data != .e_null and val.data != .e_undefined) { + data.kind = .k_using; + break; } - const id = switch (decl.binding.data) { - .b_identifier => |id| id.ref, - else => break :try_annotate, - }; - const original_name = p.symbols.items[id.innerIndex()].original_name; - decl.value = p.wrapValueForServerComponentReference(val, original_name); } } + } - if (p.options.features.react_fast_refresh and p.current_scope == p.module_scope) { - for (data.decls.slice()) |decl| try_register: { - const val = decl.value orelse break :try_register; - switch (val.data) { - .e_arrow, .e_function => {}, - else => break :try_register, - } - const id = switch (decl.binding.data) { - .b_identifier => |id| id.ref, - else => break :try_register, - }; - const original_name = p.symbols.items[id.innerIndex()].original_name; - try p.handleReactRefreshRegister(stmts, original_name, id); + // We must relocate vars in order to safely handle removing if/else depending on NODE_ENV. + // Edgecase: + // `export var` is skipped because it's unnecessary. That *should* be a noop, but it loses the `is_export` flag if we're in HMR. + const kind = p.selectLocalKind(data.kind); + if (kind == .k_var and !data.is_export) { + const relocated = p.maybeRelocateVarsToTopLevel(data.decls.slice(), .normal); + if (relocated.ok) { + if (relocated.stmt) |new_stmt| { + stmts.append(new_stmt) catch unreachable; } + + return; } + } - return; - }, - .s_expr => |data| { - const should_trim_primitive = p.options.features.dead_code_elimination and - (p.options.features.minify_syntax and data.value.isPrimitiveLiteral()); - p.stmt_expr_value = data.value.data; - defer p.stmt_expr_value = .{ .e_missing = .{} }; + data.kind = kind; + try stmts.append(stmt.*); - const is_top_level = p.current_scope == p.module_scope; - if (p.shouldUnwrapCommonJSToESM()) { - p.commonjs_named_exports_needs_conversion = if (is_top_level) - std.math.maxInt(u32) - else - p.commonjs_named_exports_needs_conversion; + if (data.is_export and p.options.features.server_components.wrapsExports()) { + for (data.decls.slice()) |*decl| try_annotate: { + const val = decl.value orelse break :try_annotate; + switch (val.data) { + .e_arrow, .e_function => {}, + else => break :try_annotate, + } + const id = switch (decl.binding.data) { + .b_identifier => |id| id.ref, + else => break :try_annotate, + }; + const original_name = p.symbols.items[id.innerIndex()].original_name; + decl.value = p.wrapValueForServerComponentReference(val, original_name); } + } - data.value = p.visitExpr(data.value); - - if (should_trim_primitive and data.value.isPrimitiveLiteral()) { - return; + if (p.options.features.react_fast_refresh and p.current_scope == p.module_scope) { + for (data.decls.slice()) |decl| try_register: { + const val = decl.value orelse break :try_register; + switch (val.data) { + .e_arrow, .e_function => {}, + else => break :try_register, + } + const id = switch (decl.binding.data) { + .b_identifier => |id| id.ref, + else => break :try_register, + }; + const original_name = p.symbols.items[id.innerIndex()].original_name; + try p.handleReactRefreshRegister(stmts, original_name, id); } + } - // simplify unused - data.value = SideEffects.simplifyUnusedExpr(p, data.value) orelse return; + return; + } + pub fn s_expr(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.SExpr) !void { + const should_trim_primitive = p.options.features.dead_code_elimination and + (p.options.features.minify_syntax and data.value.isPrimitiveLiteral()); + p.stmt_expr_value = data.value.data; + defer p.stmt_expr_value = .{ .e_missing = .{} }; - if (p.shouldUnwrapCommonJSToESM()) { - if (is_top_level) { - if (data.value.data == .e_binary) { - const to_convert = p.commonjs_named_exports_needs_conversion; - if (to_convert != std.math.maxInt(u32)) { - p.commonjs_named_exports_needs_conversion = std.math.maxInt(u32); - convert: { - const bin: *E.Binary = data.value.data.e_binary; - if (bin.op == .bin_assign and bin.left.data == .e_commonjs_export_identifier) { - var last = &p.commonjs_named_exports.values()[to_convert]; - if (!last.needs_decl) break :convert; - last.needs_decl = false; - - var decls = p.allocator.alloc(Decl, 1) catch unreachable; - const ref = bin.left.data.e_commonjs_export_identifier.ref; - decls[0] = .{ - .binding = p.b(B.Identifier{ .ref = ref }, bin.left.loc), - .value = bin.right, - }; - // we have to ensure these are known to be top-level - p.declared_symbols.append(p.allocator, .{ + const is_top_level = p.current_scope == p.module_scope; + if (p.shouldUnwrapCommonJSToESM()) { + p.commonjs_named_exports_needs_conversion = if (is_top_level) + std.math.maxInt(u32) + else + p.commonjs_named_exports_needs_conversion; + } + + data.value = p.visitExpr(data.value); + + if (should_trim_primitive and data.value.isPrimitiveLiteral()) { + return; + } + + // simplify unused + data.value = SideEffects.simplifyUnusedExpr(p, data.value) orelse return; + + if (p.shouldUnwrapCommonJSToESM()) { + if (is_top_level) { + if (data.value.data == .e_binary) { + const to_convert = p.commonjs_named_exports_needs_conversion; + if (to_convert != std.math.maxInt(u32)) { + p.commonjs_named_exports_needs_conversion = std.math.maxInt(u32); + convert: { + const bin: *E.Binary = data.value.data.e_binary; + if (bin.op == .bin_assign and bin.left.data == .e_commonjs_export_identifier) { + var last = &p.commonjs_named_exports.values()[to_convert]; + if (!last.needs_decl) break :convert; + last.needs_decl = false; + + var decls = p.allocator.alloc(Decl, 1) catch unreachable; + const ref = bin.left.data.e_commonjs_export_identifier.ref; + decls[0] = .{ + .binding = p.b(B.Identifier{ .ref = ref }, bin.left.loc), + .value = bin.right, + }; + // we have to ensure these are known to be top-level + p.declared_symbols.append(p.allocator, .{ + .ref = ref, + .is_top_level = true, + }) catch unreachable; + p.esm_export_keyword.loc = stmt.loc; + p.esm_export_keyword.len = 5; + p.had_commonjs_named_exports_this_visit = true; + var clause_items = p.allocator.alloc(js_ast.ClauseItem, 1) catch unreachable; + clause_items[0] = js_ast.ClauseItem{ + // We want the generated name to not conflict + .alias = p.commonjs_named_exports.keys()[to_convert], + .alias_loc = bin.left.loc, + .name = .{ .ref = ref, - .is_top_level = true, - }) catch unreachable; - p.esm_export_keyword.loc = stmt.loc; - p.esm_export_keyword.len = 5; - p.had_commonjs_named_exports_this_visit = true; - var clause_items = p.allocator.alloc(js_ast.ClauseItem, 1) catch unreachable; - clause_items[0] = js_ast.ClauseItem{ - // We want the generated name to not conflict - .alias = p.commonjs_named_exports.keys()[to_convert], - .alias_loc = bin.left.loc, - .name = .{ - .ref = ref, - .loc = last.loc_ref.loc, - }, - }; - stmts.appendSlice( - &[_]Stmt{ - p.s( - S.Local{ - .kind = .k_var, - .is_export = false, - .was_commonjs_export = true, - .decls = G.Decl.List.init(decls), - }, - stmt.loc, - ), - p.s( - S.ExportClause{ - .items = clause_items, - .is_single_line = true, - }, - stmt.loc, - ), - }, - ) catch unreachable; + .loc = last.loc_ref.loc, + }, + }; + stmts.appendSlice( + &[_]Stmt{ + p.s( + S.Local{ + .kind = .k_var, + .is_export = false, + .was_commonjs_export = true, + .decls = G.Decl.List.init(decls), + }, + stmt.loc, + ), + p.s( + S.ExportClause{ + .items = clause_items, + .is_single_line = true, + }, + stmt.loc, + ), + }, + ) catch unreachable; - return; - } - } - } else if (p.commonjs_replacement_stmts.len > 0) { - if (stmts.items.len == 0) { - stmts.items = p.commonjs_replacement_stmts; - stmts.capacity = p.commonjs_replacement_stmts.len; - p.commonjs_replacement_stmts.len = 0; - } else { - stmts.appendSlice(p.commonjs_replacement_stmts) catch unreachable; - p.commonjs_replacement_stmts.len = 0; + return; } - - return; } + } else if (p.commonjs_replacement_stmts.len > 0) { + if (stmts.items.len == 0) { + stmts.items = p.commonjs_replacement_stmts; + stmts.capacity = p.commonjs_replacement_stmts.len; + p.commonjs_replacement_stmts.len = 0; + } else { + stmts.appendSlice(p.commonjs_replacement_stmts) catch unreachable; + p.commonjs_replacement_stmts.len = 0; + } + + return; } } } - }, - .s_throw => |data| { - data.value = p.visitExpr(data.value); - }, - .s_return => |data| { - // Forbid top-level return inside modules with ECMAScript-style exports - if (p.fn_or_arrow_data_visit.is_outside_fn_or_arrow) { - const where = where: { - if (p.esm_export_keyword.len > 0) { - break :where p.esm_export_keyword; - } else if (p.top_level_await_keyword.len > 0) { - break :where p.top_level_await_keyword; - } else { - break :where logger.Range.None; - } - }; + } - if (where.len > 0) { - p.log.addRangeError(p.source, where, "Top-level return cannot be used inside an ECMAScript module") catch unreachable; + try stmts.append(stmt.*); + } + pub fn s_throw(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.Throw) !void { + data.value = p.visitExpr(data.value); + try stmts.append(stmt.*); + } + pub fn s_return(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.Return) !void { + // Forbid top-level return inside modules with ECMAScript-style exports + if (p.fn_or_arrow_data_visit.is_outside_fn_or_arrow) { + const where = where: { + if (p.esm_export_keyword.len > 0) { + break :where p.esm_export_keyword; + } else if (p.top_level_await_keyword.len > 0) { + break :where p.top_level_await_keyword; + } else { + break :where logger.Range.None; } + }; + + if (where.len > 0) { + p.log.addRangeError(p.source, where, "Top-level return cannot be used inside an ECMAScript module") catch unreachable; } + } - if (data.value) |val| { - data.value = p.visitExpr(val); + if (data.value) |val| { + data.value = p.visitExpr(val); - // "return undefined;" can safely just always be "return;" - if (data.value != null and @as(Expr.Tag, data.value.?.data) == .e_undefined) { - // Returning undefined is implicit - data.value = null; - } - } - }, - .s_block => |data| { - { - p.pushScopeForVisitPass(.block, stmt.loc) catch unreachable; - - // Pass the "is loop body" status on to the direct children of a block used - // as a loop body. This is used to enable optimizations specific to the - // topmost scope in a loop body block. - const kind = if (std.meta.eql(p.loop_body, stmt.data)) StmtsKind.loop_body else StmtsKind.none; - var _stmts = ListManaged(Stmt).fromOwnedSlice(p.allocator, data.stmts); - p.visitStmts(&_stmts, kind) catch unreachable; - data.stmts = _stmts.items; - p.popScope(); + // "return undefined;" can safely just always be "return;" + if (data.value != null and @as(Expr.Tag, data.value.?.data) == .e_undefined) { + // Returning undefined is implicit + data.value = null; } + } - if (p.options.features.minify_syntax) { - // // trim empty statements - if (data.stmts.len == 0) { - stmts.append(Stmt{ .data = Prefill.Data.SEmpty, .loc = stmt.loc }) catch unreachable; - return; - } else if (data.stmts.len == 1 and !statementCaresAboutScope(data.stmts[0])) { - // Unwrap blocks containing a single statement - stmts.append(data.stmts[0]) catch unreachable; - return; - } + try stmts.append(stmt.*); + } + pub fn s_block(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.Block) !void { + { + p.pushScopeForVisitPass(.block, stmt.loc) catch unreachable; + + // Pass the "is loop body" status on to the direct children of a block used + // as a loop body. This is used to enable optimizations specific to the + // topmost scope in a loop body block. + const kind = if (std.meta.eql(p.loop_body, stmt.data)) StmtsKind.loop_body else StmtsKind.none; + var _stmts = ListManaged(Stmt).fromOwnedSlice(p.allocator, data.stmts); + p.visitStmts(&_stmts, kind) catch unreachable; + data.stmts = _stmts.items; + p.popScope(); + } + + if (p.options.features.minify_syntax) { + // // trim empty statements + if (data.stmts.len == 0) { + stmts.append(Stmt{ .data = Prefill.Data.SEmpty, .loc = stmt.loc }) catch unreachable; + return; + } else if (data.stmts.len == 1 and !statementCaresAboutScope(data.stmts[0])) { + // Unwrap blocks containing a single statement + stmts.append(data.stmts[0]) catch unreachable; + return; } - }, - .s_with => |data| { - data.value = p.visitExpr(data.value); + } - p.pushScopeForVisitPass(.with, data.body_loc) catch unreachable; + try stmts.append(stmt.*); + } + pub fn s_with(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.With) !void { + data.value = p.visitExpr(data.value); - // This can be many different kinds of statements. - // example code: - // - // with(this.document.defaultView || Object.create(null)) - // with(this.document) - // with(this.form) - // with(this.element) - // - data.body = p.visitSingleStmt(data.body, StmtsKind.none); + p.pushScopeForVisitPass(.with, data.body_loc) catch unreachable; - p.popScope(); - }, - .s_while => |data| { - data.test_ = p.visitExpr(data.test_); - data.body = p.visitLoopBody(data.body); + // This can be many different kinds of statements. + // example code: + // + // with(this.document.defaultView || Object.create(null)) + // with(this.document) + // with(this.form) + // with(this.element) + // + data.body = p.visitSingleStmt(data.body, StmtsKind.none); - data.test_ = SideEffects.simplifyBoolean(p, data.test_); - const result = SideEffects.toBoolean(p, data.test_.data); - if (result.ok and result.side_effects == .no_side_effects) { - data.test_ = p.newExpr(E.Boolean{ .value = result.value }, data.test_.loc); - } - }, - .s_do_while => |data| { - data.body = p.visitLoopBody(data.body); - data.test_ = p.visitExpr(data.test_); + p.popScope(); + try stmts.append(stmt.*); + } + pub fn s_while(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.While) !void { + data.test_ = p.visitExpr(data.test_); + data.body = p.visitLoopBody(data.body); + data.test_ = SideEffects.simplifyBoolean(p, data.test_); + const result = SideEffects.toBoolean(p, data.test_.data); + if (result.ok and result.side_effects == .no_side_effects) { + data.test_ = p.newExpr(E.Boolean{ .value = result.value }, data.test_.loc); + } + + try stmts.append(stmt.*); + } + pub fn s_do_while(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.DoWhile) !void { + data.body = p.visitLoopBody(data.body); + data.test_ = p.visitExpr(data.test_); + + data.test_ = SideEffects.simplifyBoolean(p, data.test_); + try stmts.append(stmt.*); + } + pub fn s_if(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.If) !void { + data.test_ = p.visitExpr(data.test_); + + if (p.options.features.minify_syntax) { data.test_ = SideEffects.simplifyBoolean(p, data.test_); - }, - .s_if => |data| { - data.test_ = p.visitExpr(data.test_); + } - if (p.options.features.minify_syntax) { - data.test_ = SideEffects.simplifyBoolean(p, data.test_); - } + const effects = SideEffects.toBoolean(p, data.test_.data); + if (effects.ok and !effects.value) { + const old = p.is_control_flow_dead; + p.is_control_flow_dead = true; + data.yes = p.visitSingleStmt(data.yes, StmtsKind.none); + p.is_control_flow_dead = old; + } else { + data.yes = p.visitSingleStmt(data.yes, StmtsKind.none); + } - const effects = SideEffects.toBoolean(p, data.test_.data); - if (effects.ok and !effects.value) { + // The "else" clause is optional + if (data.no) |no| { + if (effects.ok and effects.value) { const old = p.is_control_flow_dead; p.is_control_flow_dead = true; - data.yes = p.visitSingleStmt(data.yes, StmtsKind.none); - p.is_control_flow_dead = old; + defer p.is_control_flow_dead = old; + data.no = p.visitSingleStmt(no, .none); } else { - data.yes = p.visitSingleStmt(data.yes, StmtsKind.none); + data.no = p.visitSingleStmt(no, .none); } - // The "else" clause is optional - if (data.no) |no| { - if (effects.ok and effects.value) { - const old = p.is_control_flow_dead; - p.is_control_flow_dead = true; - defer p.is_control_flow_dead = old; - data.no = p.visitSingleStmt(no, .none); - } else { - data.no = p.visitSingleStmt(no, .none); - } - - // Trim unnecessary "else" clauses - if (p.options.features.minify_syntax) { - if (data.no != null and @as(Stmt.Tag, data.no.?.data) == .s_empty) { - data.no = null; - } + // Trim unnecessary "else" clauses + if (p.options.features.minify_syntax) { + if (data.no != null and @as(Stmt.Tag, data.no.?.data) == .s_empty) { + data.no = null; } } + } - if (p.options.features.minify_syntax) { - if (effects.ok) { - if (effects.value) { - if (data.no == null or !SideEffects.shouldKeepStmtInDeadControlFlow(p, data.no.?, p.allocator)) { - if (effects.side_effects == .could_have_side_effects) { - // Keep the condition if it could have side effects (but is still known to be truthy) - if (SideEffects.simplifyUnusedExpr(p, data.test_)) |test_| { - stmts.append(p.s(S.SExpr{ .value = test_ }, test_.loc)) catch unreachable; - } + if (p.options.features.minify_syntax) { + if (effects.ok) { + if (effects.value) { + if (data.no == null or !SideEffects.shouldKeepStmtInDeadControlFlow(p, data.no.?, p.allocator)) { + if (effects.side_effects == .could_have_side_effects) { + // Keep the condition if it could have side effects (but is still known to be truthy) + if (SideEffects.simplifyUnusedExpr(p, data.test_)) |test_| { + stmts.append(p.s(S.SExpr{ .value = test_ }, test_.loc)) catch unreachable; } - - return try p.appendIfBodyPreservingScope(stmts, data.yes); - } else { - // We have to keep the "no" branch } - } else { - // The test is falsy - if (!SideEffects.shouldKeepStmtInDeadControlFlow(p, data.yes, p.allocator)) { - if (effects.side_effects == .could_have_side_effects) { - // Keep the condition if it could have side effects (but is still known to be truthy) - if (SideEffects.simplifyUnusedExpr(p, data.test_)) |test_| { - stmts.append(p.s(S.SExpr{ .value = test_ }, test_.loc)) catch unreachable; - } - } - if (data.no == null) { - return; + return try p.appendIfBodyPreservingScope(stmts, data.yes); + } else { + // We have to keep the "no" branch + } + } else { + // The test is falsy + if (!SideEffects.shouldKeepStmtInDeadControlFlow(p, data.yes, p.allocator)) { + if (effects.side_effects == .could_have_side_effects) { + // Keep the condition if it could have side effects (but is still known to be truthy) + if (SideEffects.simplifyUnusedExpr(p, data.test_)) |test_| { + stmts.append(p.s(S.SExpr{ .value = test_ }, test_.loc)) catch unreachable; } + } - return try p.appendIfBodyPreservingScope(stmts, data.no.?); + if (data.no == null) { + return; } + + return try p.appendIfBodyPreservingScope(stmts, data.no.?); } } + } - // TODO: more if statement syntax minification - const can_remove_test = p.exprCanBeRemovedIfUnused(&data.test_); - switch (data.yes.data) { - .s_expr => |yes_expr| { - if (yes_expr.value.isMissing()) { - if (data.no == null) { - if (can_remove_test) { - return; - } - } else if (data.no.?.isMissingExpr() and can_remove_test) { - return; - } - } - }, - .s_empty => { + // TODO: more if statement syntax minification + const can_remove_test = p.exprCanBeRemovedIfUnused(&data.test_); + switch (data.yes.data) { + .s_expr => |yes_expr| { + if (yes_expr.value.isMissing()) { if (data.no == null) { if (can_remove_test) { return; @@ -19794,590 +20053,457 @@ fn NewParser_( } else if (data.no.?.isMissingExpr() and can_remove_test) { return; } - }, - else => {}, - } + } + }, + .s_empty => { + if (data.no == null) { + if (can_remove_test) { + return; + } + } else if (data.no.?.isMissingExpr() and can_remove_test) { + return; + } + }, + else => {}, } - }, - .s_for => |data| { - p.pushScopeForVisitPass(.block, stmt.loc) catch unreachable; + } - if (data.init) |initst| { - data.init = p.visitForLoopInit(initst, false); - } + try stmts.append(stmt.*); + } + pub fn s_for(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.For) !void { + p.pushScopeForVisitPass(.block, stmt.loc) catch unreachable; + + if (data.init) |initst| { + data.init = p.visitForLoopInit(initst, false); + } - if (data.test_) |test_| { - data.test_ = SideEffects.simplifyBoolean(p, p.visitExpr(test_)); + if (data.test_) |test_| { + data.test_ = SideEffects.simplifyBoolean(p, p.visitExpr(test_)); - const result = SideEffects.toBoolean(p, data.test_.?.data); - if (result.ok and result.value and result.side_effects == .no_side_effects) { - data.test_ = null; - } + const result = SideEffects.toBoolean(p, data.test_.?.data); + if (result.ok and result.value and result.side_effects == .no_side_effects) { + data.test_ = null; } + } - if (data.update) |update| { - data.update = p.visitExpr(update); - } + if (data.update) |update| { + data.update = p.visitExpr(update); + } - data.body = p.visitLoopBody(data.body); + data.body = p.visitLoopBody(data.body); - if (data.init) |for_init| { - if (for_init.data == .s_local) { - // Potentially relocate "var" declarations to the top level. Note that this - // must be done inside the scope of the for loop or they won't be relocated. - if (for_init.data.s_local.kind == .k_var) { - const relocate = p.maybeRelocateVarsToTopLevel(for_init.data.s_local.decls.slice(), .normal); - if (relocate.stmt) |relocated| { - data.init = relocated; - } + if (data.init) |for_init| { + if (for_init.data == .s_local) { + // Potentially relocate "var" declarations to the top level. Note that this + // must be done inside the scope of the for loop or they won't be relocated. + if (for_init.data.s_local.kind == .k_var) { + const relocate = p.maybeRelocateVarsToTopLevel(for_init.data.s_local.decls.slice(), .normal); + if (relocate.stmt) |relocated| { + data.init = relocated; } } } + } - p.popScope(); - }, - .s_for_in => |data| { - { - p.pushScopeForVisitPass(.block, stmt.loc) catch unreachable; - defer p.popScope(); - _ = p.visitForLoopInit(data.init, true); - data.value = p.visitExpr(data.value); - data.body = p.visitLoopBody(data.body); - - // Check for a variable initializer - if (data.init.data == .s_local and data.init.data.s_local.kind == .k_var) { - // Lower for-in variable initializers in case the output is used in strict mode - var local = data.init.data.s_local; - if (local.decls.len == 1) { - var decl: *G.Decl = &local.decls.ptr[0]; - if (decl.binding.data == .b_identifier) { - if (decl.value) |val| { - stmts.append( - Stmt.assign( - Expr.initIdentifier(decl.binding.data.b_identifier.ref, decl.binding.loc), - val, - ), - ) catch unreachable; - decl.value = null; - } - } - } + p.popScope(); - const relocate = p.maybeRelocateVarsToTopLevel(data.init.data.s_local.decls.slice(), RelocateVars.Mode.for_in_or_for_of); - if (relocate.stmt) |relocated_stmt| { - data.init = relocated_stmt; - } - } - } - }, - .s_for_of => |data| { + try stmts.append(stmt.*); + } + pub fn s_for_in(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.ForIn) !void { + { p.pushScopeForVisitPass(.block, stmt.loc) catch unreachable; defer p.popScope(); _ = p.visitForLoopInit(data.init, true); data.value = p.visitExpr(data.value); data.body = p.visitLoopBody(data.body); - if (data.init.data == .s_local) { - if (data.init.data.s_local.kind == .k_var) { - const relocate = p.maybeRelocateVarsToTopLevel(data.init.data.s_local.decls.slice(), RelocateVars.Mode.for_in_or_for_of); - if (relocate.stmt) |relocated_stmt| { - data.init = relocated_stmt; - } - } - - // Handle "for (using x of y)" and "for (await using x of y)" - if (data.init.data == .s_local and data.init.data.s_local.kind.isUsing() and p.options.features.lower_using) { - // fn lowerUsingDeclarationInForOf() - const loc = data.init.loc; - const init2 = data.init.data.s_local; - const binding = init2.decls.at(0).binding; - var id = binding.data.b_identifier; - const temp_ref = p.generateTempRef(p.symbols.items[id.ref.inner_index].original_name); - - const first = p.s(S.Local{ - .kind = init2.kind, - .decls = bindings: { - const decls = p.allocator.alloc(G.Decl, 1) catch bun.outOfMemory(); - decls[0] = .{ - .binding = p.b(B.Identifier{ .ref = id.ref }, loc), - .value = p.newExpr(E.Identifier{ .ref = temp_ref }, loc), - }; - break :bindings G.Decl.List.init(decls); - }, - }, loc); - - const length = if (data.body.data == .s_block) data.body.data.s_block.stmts.len else 1; - const statements = p.allocator.alloc(Stmt, 1 + length) catch bun.outOfMemory(); - statements[0] = first; - if (data.body.data == .s_block) { - @memcpy(statements[1..], data.body.data.s_block.stmts); - } else { - statements[1] = data.body; - } - - var ctx = try P.LowerUsingDeclarationsContext.init(p); - ctx.scanStmts(p, statements); - const visited_stmts = ctx.finalize(p, statements, p.will_wrap_module_in_try_catch_for_using and p.current_scope.parent == null); - if (data.body.data == .s_block) { - data.body.data.s_block.stmts = visited_stmts.items; - } else { - data.body = p.s(S.Block{ - .stmts = visited_stmts.items, - }, loc); - } - id.ref = temp_ref; - init2.kind = .k_const; - } - } - }, - .s_try => |data| { - p.pushScopeForVisitPass(.block, stmt.loc) catch unreachable; - { - var _stmts = ListManaged(Stmt).fromOwnedSlice(p.allocator, data.body); - p.fn_or_arrow_data_visit.try_body_count += 1; - p.visitStmts(&_stmts, StmtsKind.none) catch unreachable; - p.fn_or_arrow_data_visit.try_body_count -= 1; - data.body = _stmts.items; - } - p.popScope(); - - if (data.catch_) |*catch_| { - p.pushScopeForVisitPass(.catch_binding, catch_.loc) catch unreachable; - { - if (catch_.binding) |catch_binding| { - p.visitBinding(catch_binding, null); - } - var _stmts = ListManaged(Stmt).fromOwnedSlice(p.allocator, catch_.body); - p.pushScopeForVisitPass(.block, catch_.body_loc) catch unreachable; - p.visitStmts(&_stmts, StmtsKind.none) catch unreachable; - p.popScope(); - catch_.body = _stmts.items; - } - p.popScope(); - } - - if (data.finally) |*finally| { - p.pushScopeForVisitPass(.block, finally.loc) catch unreachable; - { - var _stmts = ListManaged(Stmt).fromOwnedSlice(p.allocator, finally.stmts); - p.visitStmts(&_stmts, StmtsKind.none) catch unreachable; - finally.stmts = _stmts.items; - } - p.popScope(); - } - }, - .s_switch => |data| { - data.test_ = p.visitExpr(data.test_); - { - p.pushScopeForVisitPass(.block, data.body_loc) catch unreachable; - defer p.popScope(); - const old_is_inside_Swsitch = p.fn_or_arrow_data_visit.is_inside_switch; - p.fn_or_arrow_data_visit.is_inside_switch = true; - defer p.fn_or_arrow_data_visit.is_inside_switch = old_is_inside_Swsitch; - for (data.cases, 0..) |case, i| { - if (case.value) |val| { - data.cases[i].value = p.visitExpr(val); - // TODO: error messages - // Check("case", *c.Value, c.Value.Loc) - // p.warnAboutTypeofAndString(s.Test, *c.Value) + // Check for a variable initializer + if (data.init.data == .s_local and data.init.data.s_local.kind == .k_var) { + // Lower for-in variable initializers in case the output is used in strict mode + var local = data.init.data.s_local; + if (local.decls.len == 1) { + var decl: *G.Decl = &local.decls.ptr[0]; + if (decl.binding.data == .b_identifier) { + if (decl.value) |val| { + stmts.append( + Stmt.assign( + Expr.initIdentifier(decl.binding.data.b_identifier.ref, decl.binding.loc), + val, + ), + ) catch unreachable; + decl.value = null; + } } - var _stmts = ListManaged(Stmt).fromOwnedSlice(p.allocator, case.body); - p.visitStmts(&_stmts, StmtsKind.none) catch unreachable; - data.cases[i].body = _stmts.items; } - } - // TODO: duplicate case checker - - }, - .s_function => |data| { - // We mark it as dead, but the value may not actually be dead - // We just want to be sure to not increment the usage counts for anything in the function - const mark_as_dead = p.options.features.dead_code_elimination and data.func.flags.contains(.is_export) and - p.options.features.replace_exports.count() > 0 and p.isExportToEliminate(data.func.name.?.ref.?); - const original_is_dead = p.is_control_flow_dead; - if (mark_as_dead) { - p.is_control_flow_dead = true; - } - defer { - if (mark_as_dead) { - p.is_control_flow_dead = original_is_dead; + const relocate = p.maybeRelocateVarsToTopLevel(data.init.data.s_local.decls.slice(), RelocateVars.Mode.for_in_or_for_of); + if (relocate.stmt) |relocated_stmt| { + data.init = relocated_stmt; } } + } - var react_hook_data: ?ReactRefresh.HookContext = null; - const prev = p.react_refresh.hook_ctx_storage; - defer p.react_refresh.hook_ctx_storage = prev; - p.react_refresh.hook_ctx_storage = &react_hook_data; - - data.func = p.visitFunc(data.func, data.func.open_parens_loc); - - const name_ref = data.func.name.?.ref.?; - bun.assert(name_ref.tag == .symbol); - const name_symbol = &p.symbols.items[name_ref.innerIndex()]; - const original_name = name_symbol.original_name; - - // Handle exporting this function from a namespace - if (data.func.flags.contains(.is_export) and p.enclosing_namespace_arg_ref != null) { - data.func.flags.remove(.is_export); + try stmts.append(stmt.*); + } + pub fn s_for_of(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.ForOf) !void { + p.pushScopeForVisitPass(.block, stmt.loc) catch unreachable; + defer p.popScope(); + _ = p.visitForLoopInit(data.init, true); + data.value = p.visitExpr(data.value); + data.body = p.visitLoopBody(data.body); + + if (data.init.data == .s_local) { + if (data.init.data.s_local.kind == .k_var) { + const relocate = p.maybeRelocateVarsToTopLevel(data.init.data.s_local.decls.slice(), RelocateVars.Mode.for_in_or_for_of); + if (relocate.stmt) |relocated_stmt| { + data.init = relocated_stmt; + } + } + + // Handle "for (using x of y)" and "for (await using x of y)" + if (data.init.data == .s_local and data.init.data.s_local.kind.isUsing() and p.options.features.lower_using) { + // fn lowerUsingDeclarationInForOf() + const loc = data.init.loc; + const init2 = data.init.data.s_local; + const binding = init2.decls.at(0).binding; + var id = binding.data.b_identifier; + const temp_ref = p.generateTempRef(p.symbols.items[id.ref.inner_index].original_name); + + const first = p.s(S.Local{ + .kind = init2.kind, + .decls = bindings: { + const decls = p.allocator.alloc(G.Decl, 1) catch bun.outOfMemory(); + decls[0] = .{ + .binding = p.b(B.Identifier{ .ref = id.ref }, loc), + .value = p.newExpr(E.Identifier{ .ref = temp_ref }, loc), + }; + break :bindings G.Decl.List.init(decls); + }, + }, loc); - const enclosing_namespace_arg_ref = p.enclosing_namespace_arg_ref orelse bun.outOfMemory(); - stmts.ensureUnusedCapacity(3) catch bun.outOfMemory(); - stmts.appendAssumeCapacity(stmt.*); - stmts.appendAssumeCapacity(Stmt.assign( - p.newExpr(E.Dot{ - .target = p.newExpr(E.Identifier{ .ref = enclosing_namespace_arg_ref }, stmt.loc), - .name = original_name, - .name_loc = data.func.name.?.loc, - }, stmt.loc), - p.newExpr(E.Identifier{ .ref = data.func.name.?.ref.? }, data.func.name.?.loc), - )); - } else if (!mark_as_dead) { - if (name_symbol.remove_overwritten_function_declaration) { - return; + const length = if (data.body.data == .s_block) data.body.data.s_block.stmts.len else 1; + const statements = p.allocator.alloc(Stmt, 1 + length) catch bun.outOfMemory(); + statements[0] = first; + if (data.body.data == .s_block) { + @memcpy(statements[1..], data.body.data.s_block.stmts); + } else { + statements[1] = data.body; } - if (p.options.features.server_components.wrapsExports() and data.func.flags.contains(.is_export)) { - // Convert this into `export var = registerClientReference(, ...);` - const name = data.func.name.?; - // From the inner scope, have code reference the wrapped function. - data.func.name = null; - try stmts.append(p.s(S.Local{ - .kind = .k_var, - .is_export = true, - .decls = try G.Decl.List.fromSlice(p.allocator, &.{.{ - .binding = p.b(B.Identifier{ .ref = name_ref }, name.loc), - .value = p.wrapValueForServerComponentReference( - p.newExpr(E.Function{ .func = data.func }, stmt.loc), - original_name, - ), - }}), - }, stmt.loc)); + var ctx = try P.LowerUsingDeclarationsContext.init(p); + ctx.scanStmts(p, statements); + const visited_stmts = ctx.finalize(p, statements, p.will_wrap_module_in_try_catch_for_using and p.current_scope.parent == null); + if (data.body.data == .s_block) { + data.body.data.s_block.stmts = visited_stmts.items; } else { - stmts.append(stmt.*) catch bun.outOfMemory(); - } - } else if (mark_as_dead) { - if (p.options.features.replace_exports.getPtr(original_name)) |replacement| { - _ = p.injectReplacementExport(stmts, name_ref, data.func.name.?.loc, replacement); + data.body = p.s(S.Block{ + .stmts = visited_stmts.items, + }, loc); } + id.ref = temp_ref; + init2.kind = .k_const; } + } - if (p.options.features.react_fast_refresh) { - if (react_hook_data) |*hook| { - try stmts.append(p.getReactRefreshHookSignalDecl(hook.signature_cb)); - try stmts.append(p.s(S.SExpr{ - .value = p.getReactRefreshHookSignalInit(hook, Expr.initIdentifier(name_ref, logger.Loc.Empty)), - }, logger.Loc.Empty)); - } + try stmts.append(stmt.*); + } + pub fn s_try(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.Try) !void { + p.pushScopeForVisitPass(.block, stmt.loc) catch unreachable; + { + var _stmts = ListManaged(Stmt).fromOwnedSlice(p.allocator, data.body); + p.fn_or_arrow_data_visit.try_body_count += 1; + p.visitStmts(&_stmts, StmtsKind.none) catch unreachable; + p.fn_or_arrow_data_visit.try_body_count -= 1; + data.body = _stmts.items; + } + p.popScope(); - if (p.current_scope == p.module_scope) { - try p.handleReactRefreshRegister(stmts, original_name, name_ref); + if (data.catch_) |*catch_| { + p.pushScopeForVisitPass(.catch_binding, catch_.loc) catch unreachable; + { + if (catch_.binding) |catch_binding| { + p.visitBinding(catch_binding, null); } + var _stmts = ListManaged(Stmt).fromOwnedSlice(p.allocator, catch_.body); + p.pushScopeForVisitPass(.block, catch_.body_loc) catch unreachable; + p.visitStmts(&_stmts, StmtsKind.none) catch unreachable; + p.popScope(); + catch_.body = _stmts.items; } + p.popScope(); + } - return; - }, - .s_class => |data| { - const mark_as_dead = p.options.features.dead_code_elimination and data.is_export and - p.options.features.replace_exports.count() > 0 and p.isExportToEliminate(data.class.class_name.?.ref.?); - const original_is_dead = p.is_control_flow_dead; - - if (mark_as_dead) { - p.is_control_flow_dead = true; - } - defer { - if (mark_as_dead) { - p.is_control_flow_dead = original_is_dead; - } + if (data.finally) |*finally| { + p.pushScopeForVisitPass(.block, finally.loc) catch unreachable; + { + var _stmts = ListManaged(Stmt).fromOwnedSlice(p.allocator, finally.stmts); + p.visitStmts(&_stmts, StmtsKind.none) catch unreachable; + finally.stmts = _stmts.items; } + p.popScope(); + } - _ = p.visitClass(stmt.loc, &data.class, Ref.None); - - // Remove the export flag inside a namespace - const was_export_inside_namespace = data.is_export and p.enclosing_namespace_arg_ref != null; - if (was_export_inside_namespace) { - data.is_export = false; + try stmts.append(stmt.*); + } + pub fn s_switch(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.Switch) !void { + data.test_ = p.visitExpr(data.test_); + { + p.pushScopeForVisitPass(.block, data.body_loc) catch unreachable; + defer p.popScope(); + const old_is_inside_Swsitch = p.fn_or_arrow_data_visit.is_inside_switch; + p.fn_or_arrow_data_visit.is_inside_switch = true; + defer p.fn_or_arrow_data_visit.is_inside_switch = old_is_inside_Swsitch; + for (data.cases, 0..) |case, i| { + if (case.value) |val| { + data.cases[i].value = p.visitExpr(val); + // TODO: error messages + // Check("case", *c.Value, c.Value.Loc) + // p.warnAboutTypeofAndString(s.Test, *c.Value) + } + var _stmts = ListManaged(Stmt).fromOwnedSlice(p.allocator, case.body); + p.visitStmts(&_stmts, StmtsKind.none) catch unreachable; + data.cases[i].body = _stmts.items; } + } + // TODO: duplicate case checker - const lowered = p.lowerClass(js_ast.StmtOrExpr{ .stmt = stmt.* }); + try stmts.append(stmt.*); + } - if (!mark_as_dead or was_export_inside_namespace) - // Lower class field syntax for browsers that don't support it - stmts.appendSlice(lowered) catch unreachable - else { - const ref = data.class.class_name.?.ref.?; - if (p.options.features.replace_exports.getPtr(p.loadNameFromRef(ref))) |replacement| { - if (p.injectReplacementExport(stmts, ref, data.class.class_name.?.loc, replacement)) { - p.is_control_flow_dead = original_is_dead; - } - } - } + pub fn s_enum(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.Enum, was_after_after_const_local_prefix: bool) !void { - // Handle exporting this class from a namespace - if (was_export_inside_namespace) { - stmts.append( - Stmt.assign( - p.newExpr( - E.Dot{ - .target = p.newExpr( - E.Identifier{ .ref = p.enclosing_namespace_arg_ref.? }, - stmt.loc, - ), - .name = p.symbols.items[data.class.class_name.?.ref.?.innerIndex()].original_name, - .name_loc = data.class.class_name.?.loc, - }, - stmt.loc, - ), - p.newExpr( - E.Identifier{ .ref = data.class.class_name.?.ref.? }, - data.class.class_name.?.loc, - ), - ), - ) catch unreachable; - } + // Do not end the const local prefix after TypeScript enums. We process + // them first within their scope so that they are inlined into all code in + // that scope. We don't want that to cause the const local prefix to end. + p.current_scope.is_after_const_local_prefix = was_after_after_const_local_prefix; - return; - }, - .s_enum => |data| { - // Do not end the const local prefix after TypeScript enums. We process - // them first within their scope so that they are inlined into all code in - // that scope. We don't want that to cause the const local prefix to end. - p.current_scope.is_after_const_local_prefix = was_after_after_const_local_prefix; + // Track cross-module enum constants during bundling. This + // part of the code is different from esbuilt in that we are + // only storing a list of enum indexes. At the time of + // referencing, `esbuild` builds a separate hash map of hash + // maps. We are avoiding that to reduce memory usage, since + // enum inlining already uses alot of hash maps. + if (p.current_scope == p.module_scope and p.options.bundle) { + try p.top_level_enums.append(p.allocator, data.name.ref.?); + } - // Track cross-module enum constants during bundling. This - // part of the code is different from esbuilt in that we are - // only storing a list of enum indexes. At the time of - // referencing, `esbuild` builds a separate hash map of hash - // maps. We are avoiding that to reduce memory usage, since - // enum inlining already uses alot of hash maps. - if (p.current_scope == p.module_scope and p.options.bundle) { - try p.top_level_enums.append(p.allocator, data.name.ref.?); + p.recordDeclaredSymbol(data.name.ref.?) catch bun.outOfMemory(); + p.pushScopeForVisitPass(.entry, stmt.loc) catch bun.outOfMemory(); + defer p.popScope(); + p.recordDeclaredSymbol(data.arg) catch bun.outOfMemory(); + + const allocator = p.allocator; + // Scan ahead for any variables inside this namespace. This must be done + // ahead of time before visiting any statements inside the namespace + // because we may end up visiting the uses before the declarations. + // We need to convert the uses into property accesses on the namespace. + for (data.values) |value| { + if (value.ref.isValid()) { + p.is_exported_inside_namespace.put(allocator, value.ref, data.arg) catch bun.outOfMemory(); } + } - p.recordDeclaredSymbol(data.name.ref.?) catch bun.outOfMemory(); - p.pushScopeForVisitPass(.entry, stmt.loc) catch bun.outOfMemory(); - defer p.popScope(); - p.recordDeclaredSymbol(data.arg) catch bun.outOfMemory(); + // Values without initializers are initialized to one more than the + // previous value if the previous value is numeric. Otherwise values + // without initializers are initialized to undefined. + var next_numeric_value: ?f64 = 0.0; - const allocator = p.allocator; - // Scan ahead for any variables inside this namespace. This must be done - // ahead of time before visiting any statements inside the namespace - // because we may end up visiting the uses before the declarations. - // We need to convert the uses into property accesses on the namespace. - for (data.values) |value| { - if (value.ref.isValid()) { - p.is_exported_inside_namespace.put(allocator, value.ref, data.arg) catch bun.outOfMemory(); - } - } + var value_exprs = ListManaged(Expr).initCapacity(allocator, data.values.len) catch bun.outOfMemory(); - // Values without initializers are initialized to one more than the - // previous value if the previous value is numeric. Otherwise values - // without initializers are initialized to undefined. - var next_numeric_value: ?f64 = 0.0; + var all_values_are_pure = true; - var value_exprs = ListManaged(Expr).initCapacity(allocator, data.values.len) catch bun.outOfMemory(); + const exported_members = p.current_scope.ts_namespace.?.exported_members; - var all_values_are_pure = true; + // We normally don't fold numeric constants because they might increase code + // size, but it's important to fold numeric constants inside enums since + // that's what the TypeScript compiler does. + const old_should_fold_typescript_constant_expressions = p.should_fold_typescript_constant_expressions; + p.should_fold_typescript_constant_expressions = true; - const exported_members = p.current_scope.ts_namespace.?.exported_members; + // Create an assignment for each enum value + for (data.values) |*value| { + const name = value.name; - // We normally don't fold numeric constants because they might increase code - // size, but it's important to fold numeric constants inside enums since - // that's what the TypeScript compiler does. - const old_should_fold_typescript_constant_expressions = p.should_fold_typescript_constant_expressions; - p.should_fold_typescript_constant_expressions = true; + var has_string_value = false; + if (value.value) |enum_value| { + next_numeric_value = null; - // Create an assignment for each enum value - for (data.values) |*value| { - const name = value.name; + const visited = p.visitExpr(enum_value); - var has_string_value = false; - if (value.value) |enum_value| { - next_numeric_value = null; + // "See through" any wrapped comments + const underlying_value = if (visited.data == .e_inlined_enum) + visited.data.e_inlined_enum.value + else + visited; + value.value = underlying_value; - const visited = p.visitExpr(enum_value); + switch (underlying_value.data) { + .e_number => |num| { + exported_members.getPtr(name).?.data = .{ .enum_number = num.value }; - // "See through" any wrapped comments - const underlying_value = if (visited.data == .e_inlined_enum) - visited.data.e_inlined_enum.value - else - visited; - value.value = underlying_value; + p.ref_to_ts_namespace_member.put( + p.allocator, + value.ref, + .{ .enum_number = num.value }, + ) catch bun.outOfMemory(); - switch (underlying_value.data) { - .e_number => |num| { - exported_members.getPtr(name).?.data = .{ .enum_number = num.value }; + next_numeric_value = num.value + 1.0; + }, + .e_string => |str| { + has_string_value = true; - p.ref_to_ts_namespace_member.put( - p.allocator, - value.ref, - .{ .enum_number = num.value }, - ) catch bun.outOfMemory(); + exported_members.getPtr(name).?.data = .{ .enum_string = str }; - next_numeric_value = num.value + 1.0; - }, - .e_string => |str| { + p.ref_to_ts_namespace_member.put( + p.allocator, + value.ref, + .{ .enum_string = str }, + ) catch bun.outOfMemory(); + }, + else => { + if (visited.knownPrimitive() == .string) { has_string_value = true; + } - exported_members.getPtr(name).?.data = .{ .enum_string = str }; + if (!p.exprCanBeRemovedIfUnused(&visited)) { + all_values_are_pure = false; + } + }, + } + } else if (next_numeric_value) |num| { + value.value = p.newExpr(E.Number{ .value = num }, value.loc); - p.ref_to_ts_namespace_member.put( - p.allocator, - value.ref, - .{ .enum_string = str }, - ) catch bun.outOfMemory(); - }, - else => { - if (visited.knownPrimitive() == .string) { - has_string_value = true; - } + next_numeric_value = num + 1; - if (!p.exprCanBeRemovedIfUnused(&visited)) { - all_values_are_pure = false; - } - }, - } - } else if (next_numeric_value) |num| { - value.value = p.newExpr(E.Number{ .value = num }, value.loc); + exported_members.getPtr(name).?.data = .{ .enum_number = num }; - next_numeric_value = num + 1; + p.ref_to_ts_namespace_member.put( + p.allocator, + value.ref, + .{ .enum_number = num }, + ) catch bun.outOfMemory(); + } else { + value.value = p.newExpr(E.Undefined{}, value.loc); + } - exported_members.getPtr(name).?.data = .{ .enum_number = num }; + const is_assign_target = p.options.features.minify_syntax and bun.js_lexer.isIdentifier(value.name); - p.ref_to_ts_namespace_member.put( - p.allocator, - value.ref, - .{ .enum_number = num }, - ) catch bun.outOfMemory(); - } else { - value.value = p.newExpr(E.Undefined{}, value.loc); - } + const name_as_e_string = if (!is_assign_target or !has_string_value) + p.newExpr(value.nameAsEString(allocator), value.loc) + else + null; - const is_assign_target = p.options.features.minify_syntax and bun.js_lexer.isIdentifier(value.name); + const assign_target = if (is_assign_target) + // "Enum.Name = value" + Expr.assign( + p.newExpr(E.Dot{ + .target = p.newExpr( + E.Identifier{ .ref = data.arg }, + value.loc, + ), + .name = value.name, + .name_loc = value.loc, + }, value.loc), + value.value.?, + ) + else + // "Enum['Name'] = value" + Expr.assign( + p.newExpr(E.Index{ + .target = p.newExpr( + E.Identifier{ .ref = data.arg }, + value.loc, + ), + .index = name_as_e_string.?, + }, value.loc), + value.value.?, + ); - const name_as_e_string = if (!is_assign_target or !has_string_value) - p.newExpr(value.nameAsEString(allocator), value.loc) - else - null; + p.recordUsage(data.arg); - const assign_target = if (is_assign_target) - // "Enum.Name = value" - Expr.assign( - p.newExpr(E.Dot{ - .target = p.newExpr( - E.Identifier{ .ref = data.arg }, - value.loc, - ), - .name = value.name, - .name_loc = value.loc, - }, value.loc), - value.value.?, - ) - else - // "Enum['Name'] = value" + // String-valued enums do not form a two-way map + if (has_string_value) { + value_exprs.append(assign_target) catch bun.outOfMemory(); + } else { + // "Enum[assignTarget] = 'Name'" + value_exprs.append( Expr.assign( p.newExpr(E.Index{ .target = p.newExpr( E.Identifier{ .ref = data.arg }, value.loc, ), - .index = name_as_e_string.?, + .index = assign_target, }, value.loc), - value.value.?, - ); - + name_as_e_string.?, + ), + ) catch bun.outOfMemory(); p.recordUsage(data.arg); - - // String-valued enums do not form a two-way map - if (has_string_value) { - value_exprs.append(assign_target) catch bun.outOfMemory(); - } else { - // "Enum[assignTarget] = 'Name'" - value_exprs.append( - Expr.assign( - p.newExpr(E.Index{ - .target = p.newExpr( - E.Identifier{ .ref = data.arg }, - value.loc, - ), - .index = assign_target, - }, value.loc), - name_as_e_string.?, - ), - ) catch bun.outOfMemory(); - p.recordUsage(data.arg); - } } + } - p.should_fold_typescript_constant_expressions = old_should_fold_typescript_constant_expressions; + p.should_fold_typescript_constant_expressions = old_should_fold_typescript_constant_expressions; - var value_stmts = ListManaged(Stmt).initCapacity(allocator, value_exprs.items.len) catch unreachable; - // Generate statements from expressions - for (value_exprs.items) |expr| { - value_stmts.appendAssumeCapacity(p.s(S.SExpr{ .value = expr }, expr.loc)); - } - value_exprs.deinit(); - try p.generateClosureForTypeScriptNamespaceOrEnum( - stmts, - stmt.loc, - data.is_export, - data.name.loc, - data.name.ref.?, - data.arg, - value_stmts.items, - all_values_are_pure, - ); - return; - }, - .s_namespace => |data| { - p.recordDeclaredSymbol(data.name.ref.?) catch unreachable; - - // Scan ahead for any variables inside this namespace. This must be done - // ahead of time before visiting any statements inside the namespace - // because we may end up visiting the uses before the declarations. - // We need to convert the uses into property accesses on the namespace. - for (data.stmts) |child_stmt| { - switch (child_stmt.data) { - .s_local => |local| { - if (local.is_export) { - p.markExportedDeclsInsideNamespace(data.arg, local.decls.slice()); - } - }, - else => {}, - } + var value_stmts = ListManaged(Stmt).initCapacity(allocator, value_exprs.items.len) catch unreachable; + // Generate statements from expressions + for (value_exprs.items) |expr| { + value_stmts.appendAssumeCapacity(p.s(S.SExpr{ .value = expr }, expr.loc)); + } + value_exprs.deinit(); + try p.generateClosureForTypeScriptNamespaceOrEnum( + stmts, + stmt.loc, + data.is_export, + data.name.loc, + data.name.ref.?, + data.arg, + value_stmts.items, + all_values_are_pure, + ); + return; + } + pub fn s_namespace(p: *P, stmts: *ListManaged(Stmt), stmt: *Stmt, data: *S.Namespace) !void { + p.recordDeclaredSymbol(data.name.ref.?) catch unreachable; + + // Scan ahead for any variables inside this namespace. This must be done + // ahead of time before visiting any statements inside the namespace + // because we may end up visiting the uses before the declarations. + // We need to convert the uses into property accesses on the namespace. + for (data.stmts) |child_stmt| { + switch (child_stmt.data) { + .s_local => |local| { + if (local.is_export) { + p.markExportedDeclsInsideNamespace(data.arg, local.decls.slice()); + } + }, + else => {}, } + } - var prepend_temp_refs = PrependTempRefsOpts{ .kind = StmtsKind.fn_body }; - var prepend_list = ListManaged(Stmt).fromOwnedSlice(p.allocator, data.stmts); + var prepend_temp_refs = PrependTempRefsOpts{ .kind = StmtsKind.fn_body }; + var prepend_list = ListManaged(Stmt).fromOwnedSlice(p.allocator, data.stmts); - const old_enclosing_namespace_arg_ref = p.enclosing_namespace_arg_ref; - p.enclosing_namespace_arg_ref = data.arg; - p.pushScopeForVisitPass(.entry, stmt.loc) catch unreachable; - p.recordDeclaredSymbol(data.arg) catch unreachable; - try p.visitStmtsAndPrependTempRefs(&prepend_list, &prepend_temp_refs); - p.popScope(); - p.enclosing_namespace_arg_ref = old_enclosing_namespace_arg_ref; - - try p.generateClosureForTypeScriptNamespaceOrEnum( - stmts, - stmt.loc, - data.is_export, - data.name.loc, - data.name.ref.?, - data.arg, - prepend_list.items, - false, - ); - return; - }, - else => { - notimpl(); - }, + const old_enclosing_namespace_arg_ref = p.enclosing_namespace_arg_ref; + p.enclosing_namespace_arg_ref = data.arg; + p.pushScopeForVisitPass(.entry, stmt.loc) catch unreachable; + p.recordDeclaredSymbol(data.arg) catch unreachable; + try p.visitStmtsAndPrependTempRefs(&prepend_list, &prepend_temp_refs); + p.popScope(); + p.enclosing_namespace_arg_ref = old_enclosing_namespace_arg_ref; + + try p.generateClosureForTypeScriptNamespaceOrEnum( + stmts, + stmt.loc, + data.is_export, + data.name.loc, + data.name.ref.?, + data.arg, + prepend_list.items, + false, + ); + return; } - - // if we get this far, it stays - try stmts.append(stmt.*); - } + }; fn isExportToEliminate(p: *P, ref: Ref) bool { const symbol_name = p.loadNameFromRef(ref); @@ -21595,20 +21721,24 @@ fn NewParser_( return res; } + fn visitSingleStmtBlock(p: *P, stmt: Stmt, kind: StmtsKind) Stmt { + var new_stmt = stmt; + p.pushScopeForVisitPass(.block, stmt.loc) catch unreachable; + var stmts = ListManaged(Stmt).initCapacity(p.allocator, stmt.data.s_block.stmts.len) catch unreachable; + stmts.appendSlice(stmt.data.s_block.stmts) catch unreachable; + p.visitStmts(&stmts, kind) catch unreachable; + p.popScope(); + new_stmt.data.s_block.stmts = stmts.items; + if (p.options.features.minify_syntax) { + new_stmt = p.stmtsToSingleStmt(stmt.loc, stmts.items); + } + + return new_stmt; + } + fn visitSingleStmt(p: *P, stmt: Stmt, kind: StmtsKind) Stmt { if (stmt.data == .s_block) { - var new_stmt = stmt; - p.pushScopeForVisitPass(.block, stmt.loc) catch unreachable; - var stmts = ListManaged(Stmt).initCapacity(p.allocator, stmt.data.s_block.stmts.len) catch unreachable; - stmts.appendSlice(stmt.data.s_block.stmts) catch unreachable; - p.visitStmts(&stmts, kind) catch unreachable; - p.popScope(); - new_stmt.data.s_block.stmts = stmts.items; - if (p.options.features.minify_syntax) { - new_stmt = p.stmtsToSingleStmt(stmt.loc, stmts.items); - } - - return new_stmt; + return p.visitSingleStmtBlock(stmt, kind); } const has_if_scope = switch (stmt.data) { @@ -23717,6 +23847,7 @@ fn NewParser_( .named_imports = undefined, .named_exports = .{}, .log = log, + .stack_check = bun.StackCheck.init(), .allocator = allocator, .options = opts, .then_catch_chain = ThenCatchChain{ .next_target = nullExprData }, diff --git a/src/js_printer.zig b/src/js_printer.zig index 2963b96e65cbca..3116a92532ef40 100644 --- a/src/js_printer.zig +++ b/src/js_printer.zig @@ -6003,13 +6003,13 @@ pub fn printWithWriterAndPlatform( printer.printFnArgs(func.open_parens_loc, func.args, func.flags.contains(.has_rest_arg), false); printer.printSpace(); printer.print("{\n"); - if (func.body.stmts[0].data.s_lazy_export != .e_undefined) { + if (func.body.stmts[0].data.s_lazy_export.* != .e_undefined) { printer.indent(); printer.printIndent(); printer.printSymbol(printer.options.commonjs_module_ref); printer.print(".exports = "); printer.printExpr(.{ - .data = func.body.stmts[0].data.s_lazy_export, + .data = func.body.stmts[0].data.s_lazy_export.*, .loc = func.body.stmts[0].loc, }, .comma, .{}); printer.print("; // bun .s_lazy_export\n"); diff --git a/src/main.zig b/src/main.zig index 9c4df6072f75e2..d3b73b7ee552c5 100644 --- a/src/main.zig +++ b/src/main.zig @@ -44,7 +44,7 @@ pub fn main() void { if (Environment.isX64 and Environment.enableSIMD and Environment.isPosix) { bun_warn_avx_missing(@import("./cli/upgrade_command.zig").Version.Bun__githubBaselineURL.ptr); } - + bun.StackCheck.configureThread(); bun.CLI.Cli.start(bun.default_allocator); bun.Global.exit(0); } diff --git a/src/output.zig b/src/output.zig index ec0b60ac2101b4..29fb3019d2b925 100644 --- a/src/output.zig +++ b/src/output.zig @@ -88,6 +88,7 @@ pub const Source = struct { if (source_set) return; bun.debugAssert(stdout_stream_set); source = Source.init(stdout_stream, stderr_stream); + bun.StackCheck.configureThread(); } pub fn configureNamedThread(name: StringTypes.stringZ) void { diff --git a/src/patch.zig b/src/patch.zig index 55b5780a3bbc02..363184f47e282d 100644 --- a/src/patch.zig +++ b/src/patch.zig @@ -915,7 +915,7 @@ const PatchLinesParser = struct { fn parseHunkHeaderLineImpl(text_: []const u8) ParseErr!struct { line_nr: u32, line_count: u32, rest: []const u8 } { var text = text_; const DIGITS = brk: { - var set = std.bit_set.IntegerBitSet(256).initEmpty(); + var set = bun.bit_set.IntegerBitSet(256).initEmpty(); for ('0'..'9' + 1) |c| set.set(c); break :brk set; }; @@ -1026,8 +1026,8 @@ const PatchLinesParser = struct { const delimiter_start = std.mem.indexOf(u8, line, "..") orelse return null; - const VALID_CHARS: std.bit_set.IntegerBitSet(256) = comptime brk: { - var bitset = std.bit_set.IntegerBitSet(256).initEmpty(); + const VALID_CHARS: bun.bit_set.IntegerBitSet(256) = comptime brk: { + var bitset = bun.bit_set.IntegerBitSet(256).initEmpty(); // TODO: the regex uses \w which is [a-zA-Z0-9_] for ('0'..'9' + 1) |c| bitset.set(c); for ('a'..'z' + 1) |c| bitset.set(c); diff --git a/src/pool.zig b/src/pool.zig index 7d994c752f1c69..30e5d3e31facab 100644 --- a/src/pool.zig +++ b/src/pool.zig @@ -233,5 +233,21 @@ pub fn ObjectPool( data().list = LinkedList{ .first = node }; data().loaded = true; } + + pub fn deleteAll() void { + var dat = data(); + if (!dat.loaded) { + return; + } + dat.loaded = false; + dat.count = 0; + var next = dat.list.first; + dat.list.first = null; + while (next) |node| { + next = node.next; + if (std.meta.hasFn(Type, "deinit")) node.data.deinit(); + node.allocator.destroy(node); + } + } }; } diff --git a/src/shell/interpreter.zig b/src/shell/interpreter.zig index 76b94c04d08db4..58a3a915f786d8 100644 --- a/src/shell/interpreter.zig +++ b/src/shell/interpreter.zig @@ -1323,8 +1323,10 @@ pub const Interpreter = struct { break :brk export_env; }; - var pathbuf: bun.PathBuffer = undefined; - const cwd: [:0]const u8 = switch (Syscall.getcwdZ(&pathbuf)) { + // Avoid the large stack allocation on Windows. + const pathbuf = bun.default_allocator.create(bun.PathBuffer) catch bun.outOfMemory(); + defer bun.default_allocator.destroy(pathbuf); + const cwd: [:0]const u8 = switch (Syscall.getcwdZ(pathbuf)) { .result => |cwd| cwd, .err => |err| { return .{ .err = .{ .sys = err.toSystemError() } }; @@ -4883,8 +4885,9 @@ pub const Interpreter = struct { return; } - var path_buf: bun.PathBuffer = undefined; - const resolved = which(&path_buf, spawn_args.PATH, spawn_args.cwd, first_arg_real) orelse blk: { + const path_buf = bun.PathBufferPool.get(); + defer bun.PathBufferPool.put(path_buf); + const resolved = which(path_buf, spawn_args.PATH, spawn_args.cwd, first_arg_real) orelse blk: { if (bun.strings.eqlComptime(first_arg_real, "bun") or bun.strings.eqlComptime(first_arg_real, "bun-debug")) blk2: { break :blk bun.selfExePath() catch break :blk2; } @@ -7158,12 +7161,13 @@ pub const Interpreter = struct { } if (this.bltn.stdout.needsIO() == null) { - var path_buf: bun.PathBuffer = undefined; + const path_buf = bun.PathBufferPool.get(); + defer bun.PathBufferPool.put(path_buf); const PATH = this.bltn.parentCmd().base.shell.export_env.get(EnvStr.initSlice("PATH")) orelse EnvStr.initSlice(""); var had_not_found = false; for (args) |arg_raw| { const arg = arg_raw[0..std.mem.len(arg_raw)]; - const resolved = which(&path_buf, PATH.slice(), this.bltn.parentCmd().base.shell.cwdZ(), arg) orelse { + const resolved = which(path_buf, PATH.slice(), this.bltn.parentCmd().base.shell.cwdZ(), arg) orelse { had_not_found = true; const buf = this.bltn.fmtErrorArena(.which, "{s} not found\n", .{arg}); _ = this.bltn.writeNoIO(.stdout, buf); @@ -7198,10 +7202,11 @@ pub const Interpreter = struct { const arg_raw = multiargs.args_slice[multiargs.arg_idx]; const arg = arg_raw[0..std.mem.len(arg_raw)]; - var path_buf: bun.PathBuffer = undefined; + const path_buf = bun.PathBufferPool.get(); + defer bun.PathBufferPool.put(path_buf); const PATH = this.bltn.parentCmd().base.shell.export_env.get(EnvStr.initSlice("PATH")) orelse EnvStr.initSlice(""); - const resolved = which(&path_buf, PATH.slice(), this.bltn.parentCmd().base.shell.cwdZ(), arg) orelse { + const resolved = which(path_buf, PATH.slice(), this.bltn.parentCmd().base.shell.cwdZ(), arg) orelse { multiargs.had_not_found = true; if (this.bltn.stdout.needsIO()) |safeguard| { multiargs.state = .waiting_write; diff --git a/src/shell/shell.zig b/src/shell/shell.zig index cd63bf42015a91..ae35c27140dda4 100644 --- a/src/shell/shell.zig +++ b/src/shell/shell.zig @@ -3987,8 +3987,8 @@ pub const ShellSrcBuilder = struct { /// Characters that need to escaped const SPECIAL_CHARS = [_]u8{ '~', '[', ']', '#', ';', '\n', '*', '{', ',', '}', '`', '$', '=', '(', ')', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '|', '>', '<', '&', '\'', '"', ' ', '\\' }; -const SPECIAL_CHARS_TABLE: std.bit_set.IntegerBitSet(256) = brk: { - var table = std.bit_set.IntegerBitSet(256).initEmpty(); +const SPECIAL_CHARS_TABLE: bun.bit_set.IntegerBitSet(256) = brk: { + var table = bun.bit_set.IntegerBitSet(256).initEmpty(); for (SPECIAL_CHARS) |c| { table.set(c); } diff --git a/src/string.zig b/src/string.zig index e4497381d1583e..30bc054a53465a 100644 --- a/src/string.zig +++ b/src/string.zig @@ -197,6 +197,14 @@ pub const WTFStringImplStruct = extern struct { return this.is8Bit() and bun.strings.isAllASCII(this.latin1Slice()); } + pub fn utf16ByteLength(this: WTFStringImpl) usize { + if (this.is8Bit()) { + return this.length() * 2; + } else { + return this.length(); + } + } + pub fn utf8ByteLength(this: WTFStringImpl) usize { if (this.is8Bit()) { const input = this.latin1Slice(); @@ -207,11 +215,6 @@ pub const WTFStringImplStruct = extern struct { } } - pub fn utf16ByteLength(this: WTFStringImpl) usize { - // All latin1 characters fit in a single UTF-16 code unit. - return this.length() * 2; - } - pub fn latin1ByteLength(this: WTFStringImpl) usize { // Not all UTF-16 characters fit are representable in latin1. // Those get truncated? diff --git a/src/string_immutable.zig b/src/string_immutable.zig index 2517480e98057f..ab1d7964908809 100644 --- a/src/string_immutable.zig +++ b/src/string_immutable.zig @@ -1949,9 +1949,10 @@ pub fn toWPathNormalizeAutoExtend(wbuf: []u16, utf8: []const u8) [:0]const u16 { } pub fn toWPathNormalized(wbuf: []u16, utf8: []const u8) [:0]const u16 { - var renormalized: bun.PathBuffer = undefined; + const renormalized = bun.PathBufferPool.get(); + defer bun.PathBufferPool.put(renormalized); - var path_to_use = normalizeSlashesOnly(&renormalized, utf8, '\\'); + var path_to_use = normalizeSlashesOnly(renormalized, utf8, '\\'); // is there a trailing slash? Let's remove it before converting to UTF-16 if (path_to_use.len > 3 and bun.path.isSepAny(path_to_use[path_to_use.len - 1])) { @@ -1961,9 +1962,10 @@ pub fn toWPathNormalized(wbuf: []u16, utf8: []const u8) [:0]const u16 { return toWPath(wbuf, path_to_use); } pub fn toPathNormalized(buf: []u8, utf8: []const u8) [:0]const u8 { - var renormalized: bun.PathBuffer = undefined; + const renormalized = bun.PathBufferPool.get(); + defer bun.PathBufferPool.put(renormalized); - var path_to_use = normalizeSlashesOnly(&renormalized, utf8, '\\'); + var path_to_use = normalizeSlashesOnly(renormalized, utf8, '\\'); // is there a trailing slash? Let's remove it before converting to UTF-16 if (path_to_use.len > 3 and bun.path.isSepAny(path_to_use[path_to_use.len - 1])) { @@ -1991,17 +1993,20 @@ pub fn normalizeSlashesOnly(buf: []u8, utf8: []const u8, comptime desired_slash: } pub fn toWDirNormalized(wbuf: []u16, utf8: []const u8) [:0]const u16 { - var renormalized: bun.PathBuffer = undefined; + var renormalized: ?*bun.PathBuffer = null; + defer if (renormalized) |r| bun.PathBufferPool.put(r); + var path_to_use = utf8; if (bun.strings.containsChar(utf8, '/')) { - @memcpy(renormalized[0..utf8.len], utf8); - for (renormalized[0..utf8.len]) |*c| { + renormalized = bun.PathBufferPool.get(); + @memcpy(renormalized.?[0..utf8.len], utf8); + for (renormalized.?[0..utf8.len]) |*c| { if (c.* == '/') { c.* = '\\'; } } - path_to_use = renormalized[0..utf8.len]; + path_to_use = renormalized.?[0..utf8.len]; } return toWDirPath(wbuf, path_to_use); diff --git a/src/sys.zig b/src/sys.zig index 179ed41fecf670..33e98c14de5fa3 100644 --- a/src/sys.zig +++ b/src/sys.zig @@ -466,8 +466,9 @@ pub fn getcwdZ(buf: *bun.PathBuffer) Maybe([:0]const u8) { buf[0] = 0; if (comptime Environment.isWindows) { - var wbuf: bun.WPathBuffer = undefined; - const len: windows.DWORD = kernel32.GetCurrentDirectoryW(wbuf.len, &wbuf); + var wbuf = bun.WPathBufferPool.get(); + defer bun.WPathBufferPool.put(wbuf); + const len: windows.DWORD = kernel32.GetCurrentDirectoryW(wbuf.len, wbuf); if (Result.errnoSys(len, .getcwd)) |err| return err; return Result{ .result = bun.strings.fromWPath(buf, wbuf[0..len]) }; } @@ -555,8 +556,9 @@ pub fn chdir(destination: anytype) Maybe(void) { return chdirOSPath(@as(bun.OSPathSliceZ, destination)); } - var wbuf: bun.WPathBuffer = undefined; - return chdirOSPath(bun.strings.toWDirPath(&wbuf, destination)); + const wbuf = bun.WPathBufferPool.get(); + defer bun.WPathBufferPool.put(wbuf); + return chdirOSPath(bun.strings.toWDirPath(wbuf, destination)); } return Maybe(void).todo(); @@ -626,8 +628,9 @@ pub fn fstat(fd: bun.FileDescriptor) Maybe(bun.Stat) { } pub fn mkdiratA(dir_fd: bun.FileDescriptor, file_path: []const u8) Maybe(void) { - var buf: bun.WPathBuffer = undefined; - return mkdiratW(dir_fd, bun.strings.toWPathNormalized(&buf, file_path)); + const buf = bun.WPathBufferPool.get(); + defer bun.WPathBufferPool.put(buf); + return mkdiratW(dir_fd, bun.strings.toWPathNormalized(buf, file_path)); } pub fn mkdiratZ(dir_fd: bun.FileDescriptor, file_path: [*:0]const u8, mode: mode_t) Maybe(void) { @@ -688,9 +691,10 @@ pub fn mkdir(file_path: [:0]const u8, flags: bun.Mode) Maybe(void) { .linux => Maybe(void).errnoSysP(syscall.mkdir(file_path, flags), .mkdir, file_path) orelse Maybe(void).success, .windows => { - var wbuf: bun.WPathBuffer = undefined; + const wbuf = bun.WPathBufferPool.get(); + defer bun.WPathBufferPool.put(wbuf); return Maybe(void).errnoSysP( - kernel32.CreateDirectoryW(bun.strings.toWPath(&wbuf, file_path).ptr, null), + kernel32.CreateDirectoryW(bun.strings.toWPath(wbuf, file_path).ptr, null), .mkdir, file_path, ) orelse Maybe(void).success; @@ -720,8 +724,9 @@ pub fn mkdirA(file_path: []const u8, flags: bun.Mode) Maybe(void) { } if (comptime Environment.isWindows) { - var wbuf: bun.WPathBuffer = undefined; - const wpath = bun.strings.toWPath(&wbuf, file_path); + const wbuf = bun.WPathBufferPool.get(); + defer bun.WPathBufferPool.put(wbuf); + const wpath = bun.strings.toWPath(wbuf, file_path); assertIsValidWindowsPath(u16, wpath); return Maybe(void).errnoSysP( kernel32.CreateDirectoryW(wpath.ptr, null), @@ -792,8 +797,9 @@ pub fn normalizePathWindows( if (comptime T != u8 and T != u16) { @compileError("normalizePathWindows only supports u8 and u16 character types"); } - var wbuf: if (T == u16) void else bun.WPathBuffer = undefined; - var path = if (T == u16) path_ else bun.strings.convertUTF8toUTF16InBuffer(&wbuf, path_); + const wbuf = if (T != u16) bun.WPathBufferPool.get() else {}; + defer if (T != u16) bun.WPathBufferPool.put(wbuf); + var path = if (T == u16) path_ else bun.strings.convertUTF8toUTF16InBuffer(wbuf, path_); if (std.fs.path.isAbsoluteWindowsWTF16(path)) { // handle the special "nul" device @@ -845,7 +851,8 @@ pub fn normalizePathWindows( path = path[2..]; } - var buf1: bun.WPathBuffer = undefined; + const buf1 = bun.WPathBufferPool.get(); + defer bun.WPathBufferPool.put(buf1); @memcpy(buf1[0..base_path.len], base_path); buf1[base_path.len] = '\\'; @memcpy(buf1[base_path.len + 1 .. base_path.len + 1 + path.len], path); @@ -964,9 +971,10 @@ fn openDirAtWindowsT( path: []const T, options: WindowsOpenDirOptions, ) Maybe(bun.FileDescriptor) { - var wbuf: bun.WPathBuffer = undefined; + const wbuf = bun.WPathBufferPool.get(); + defer bun.WPathBufferPool.put(wbuf); - const norm = switch (normalizePathWindows(T, dirFd, path, &wbuf)) { + const norm = switch (normalizePathWindows(T, dirFd, path, wbuf)) { .err => |err| return .{ .err = err }, .result => |norm| norm, }; @@ -1157,9 +1165,10 @@ pub fn openFileAtWindowsT( disposition: w.ULONG, options: w.ULONG, ) Maybe(bun.FileDescriptor) { - var wbuf: bun.WPathBuffer = undefined; + const wbuf = bun.WPathBufferPool.get(); + defer bun.WPathBufferPool.put(wbuf); - const norm = switch (normalizePathWindows(T, dirFd, path, &wbuf)) { + const norm = switch (normalizePathWindows(T, dirFd, path, wbuf)) { .err => |err| return .{ .err = err }, .result => |norm| norm, }; @@ -1974,14 +1983,18 @@ pub fn renameat2(from_dir: bun.FileDescriptor, from: [:0]const u8, to_dir: bun.F pub fn renameat(from_dir: bun.FileDescriptor, from: [:0]const u8, to_dir: bun.FileDescriptor, to: [:0]const u8) Maybe(void) { if (Environment.isWindows) { - var w_buf_from: bun.WPathBuffer = undefined; - var w_buf_to: bun.WPathBuffer = undefined; + const w_buf_from = bun.WPathBufferPool.get(); + const w_buf_to = bun.WPathBufferPool.get(); + defer { + bun.WPathBufferPool.put(w_buf_from); + bun.WPathBufferPool.put(w_buf_to); + } const rc = bun.C.renameAtW( from_dir, - bun.strings.toNTPath(&w_buf_from, from), + bun.strings.toNTPath(w_buf_from, from), to_dir, - bun.strings.toNTPath(&w_buf_to, to), + bun.strings.toNTPath(w_buf_to, to), true, ); @@ -2053,10 +2066,14 @@ pub fn symlinkOrJunction(dest: [:0]const u8, target: [:0]const u8) Maybe(void) { if (comptime !Environment.isWindows) @compileError("symlinkOrJunction is windows only"); if (!WindowsSymlinkOptions.has_failed_to_create_symlink) { - var sym16: bun.WPathBuffer = undefined; - var target16: bun.WPathBuffer = undefined; - const sym_path = bun.strings.toWPathNormalizeAutoExtend(&sym16, dest); - const target_path = bun.strings.toWPathNormalizeAutoExtend(&target16, target); + const sym16 = bun.WPathBufferPool.get(); + const target16 = bun.WPathBufferPool.get(); + defer { + bun.WPathBufferPool.put(sym16); + bun.WPathBufferPool.put(target16); + } + const sym_path = bun.strings.toWPathNormalizeAutoExtend(sym16, dest); + const target_path = bun.strings.toWPathNormalizeAutoExtend(target16, target); switch (symlinkW(sym_path, target_path, .{ .directory = true })) { .result => { return Maybe(void).success; @@ -2163,8 +2180,9 @@ pub fn unlinkW(from: [:0]const u16) Maybe(void) { pub fn unlink(from: [:0]const u8) Maybe(void) { if (comptime Environment.isWindows) { - var w_buf: bun.WPathBuffer = undefined; - return unlinkW(bun.strings.toNTPath(&w_buf, from)); + const w_buf = bun.WPathBufferPool.get(); + defer bun.WPathBufferPool.put(w_buf); + return unlinkW(bun.strings.toNTPath(w_buf, from)); } while (true) { @@ -2185,8 +2203,9 @@ pub fn rmdirat(dirfd: bun.FileDescriptor, to: anytype) Maybe(void) { pub fn unlinkatWithFlags(dirfd: bun.FileDescriptor, to: anytype, flags: c_uint) Maybe(void) { if (Environment.isWindows) { if (comptime std.meta.Elem(@TypeOf(to)) == u8) { - var w_buf: bun.WPathBuffer = undefined; - return unlinkatWithFlags(dirfd, bun.strings.toNTPath(&w_buf, bun.span(to)), flags); + const w_buf = bun.WPathBufferPool.get(); + defer bun.WPathBufferPool.put(w_buf); + return unlinkatWithFlags(dirfd, bun.strings.toNTPath(w_buf, bun.span(to)), flags); } return bun.windows.DeleteFileBun(to, .{ @@ -2599,8 +2618,9 @@ pub fn getFileAttributes(path: anytype) ?WindowsFileAttributes { const attributes: WindowsFileAttributes = @bitCast(dword); return attributes; } else { - var wbuf: bun.WPathBuffer = undefined; - const path_to_use = bun.strings.toWPath(&wbuf, path); + const wbuf = bun.WPathBufferPool.get(); + defer bun.WPathBufferPool.put(wbuf); + const path_to_use = bun.strings.toWPath(wbuf, path); return getFileAttributes(path_to_use); } } @@ -2678,8 +2698,9 @@ pub fn faccessat(dir_: anytype, subpath: anytype) JSC.Maybe(bool) { pub fn directoryExistsAt(dir_: anytype, subpath: anytype) JSC.Maybe(bool) { const dir_fd = bun.toFD(dir_); if (comptime Environment.isWindows) { - var wbuf: bun.WPathBuffer = undefined; - const path = bun.strings.toNTPath(&wbuf, subpath); + const wbuf = bun.WPathBufferPool.get(); + defer bun.WPathBufferPool.put(wbuf); + const path = bun.strings.toNTPath(wbuf, subpath); const path_len_bytes: u16 = @truncate(path.len * 2); var nt_name = w.UNICODE_STRING{ .Length = path_len_bytes, @@ -2745,8 +2766,9 @@ pub fn existsAt(fd: bun.FileDescriptor, subpath: [:0]const u8) bool { } if (comptime Environment.isWindows) { - var wbuf: bun.WPathBuffer = undefined; - const path = bun.strings.toNTPath(&wbuf, subpath); + const wbuf = bun.WPathBufferPool.get(); + defer bun.WPathBufferPool.put(wbuf); + const path = bun.strings.toNTPath(wbuf, subpath); const path_len_bytes: u16 = @truncate(path.len * 2); var nt_name = w.UNICODE_STRING{ .Length = path_len_bytes, diff --git a/src/url.zig b/src/url.zig index 3e7260aa8ac811..5dafcac0c7a50f 100644 --- a/src/url.zig +++ b/src/url.zig @@ -488,7 +488,7 @@ pub const QueryStringMap = struct { pub const Iterator = struct { // Assume no query string param map will exceed 2048 keys // Browsers typically limit URL lengths to around 64k - const VisitedMap = std.bit_set.ArrayBitSet(usize, 2048); + const VisitedMap = bun.bit_set.ArrayBitSet(usize, 2048); i: usize = 0, map: *const QueryStringMap, diff --git a/src/which.zig b/src/which.zig index 093b141c4f6ced..0470af9d61ea71 100644 --- a/src/which.zig +++ b/src/which.zig @@ -20,8 +20,9 @@ pub fn which(buf: *bun.PathBuffer, path: []const u8, cwd: []const u8, bin: []con bun.Output.scoped(.which, true)("path={s} cwd={s} bin={s}", .{ path, cwd, bin }); if (bun.Environment.os == .windows) { - var convert_buf: bun.WPathBuffer = undefined; - const result = whichWin(&convert_buf, path, cwd, bin) orelse return null; + const convert_buf = bun.WPathBufferPool.get(); + defer bun.WPathBufferPool.put(convert_buf); + const result = whichWin(convert_buf, path, cwd, bin) orelse return null; const result_converted = bun.strings.convertUTF16toUTF8InBuffer(buf, result) catch unreachable; buf[result_converted.len] = 0; bun.assert(result_converted.ptr == buf.ptr); @@ -132,13 +133,14 @@ fn searchBinInPath(buf: *bun.WPathBuffer, path_buf: *bun.PathBuffer, path: []con /// It is similar to Get-Command in powershell. pub fn whichWin(buf: *bun.WPathBuffer, path: []const u8, cwd: []const u8, bin: []const u8) ?[:0]const u16 { if (bin.len == 0) return null; - var path_buf: bun.PathBuffer = undefined; + const path_buf = bun.PathBufferPool.get(); + defer bun.PathBufferPool.put(path_buf); const check_windows_extensions = !endsWithExtension(bin); // handle absolute paths if (std.fs.path.isAbsolute(bin)) { - const normalized_bin = PosixToWinNormalizer.resolveCWDWithExternalBuf(&path_buf, bin) catch return null; + const normalized_bin = PosixToWinNormalizer.resolveCWDWithExternalBuf(path_buf, bin) catch return null; const bin_utf16 = bun.strings.convertUTF8toUTF16InBuffer(buf, normalized_bin); buf[bin_utf16.len] = 0; return searchBin(buf, bin_utf16.len, check_windows_extensions); @@ -148,7 +150,7 @@ pub fn whichWin(buf: *bun.WPathBuffer, path: []const u8, cwd: []const u8, bin: [ if (bun.strings.containsChar(bin, '/') or bun.strings.containsChar(bin, '\\')) { if (searchBinInPath( buf, - &path_buf, + path_buf, cwd, bun.strings.withoutPrefixComptime(bin, "./"), check_windows_extensions, @@ -163,7 +165,7 @@ pub fn whichWin(buf: *bun.WPathBuffer, path: []const u8, cwd: []const u8, bin: [ // iterate over system path delimiter var path_iter = std.mem.tokenizeScalar(u8, path, ';'); while (path_iter.next()) |segment_part| { - if (searchBinInPath(buf, &path_buf, segment_part, bin, check_windows_extensions)) |bin_path| { + if (searchBinInPath(buf, path_buf, segment_part, bin, check_windows_extensions)) |bin_path| { return bin_path; } } diff --git a/test/bundler/transpiler/fixtures/lots-of-for-loop.js b/test/bundler/transpiler/fixtures/lots-of-for-loop.js new file mode 100644 index 00000000000000..096ff28911de89 --- /dev/null +++ b/test/bundler/transpiler/fixtures/lots-of-for-loop.js @@ -0,0 +1,713 @@ +let counter = 0; +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) + +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) + +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) + +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) + +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) + +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) + +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) + +for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) for (let i = 0; i < 1; i++) counter++; +console.log(counter); \ No newline at end of file diff --git a/test/bundler/transpiler/transpiler.test.js b/test/bundler/transpiler/transpiler.test.js index 8757b968ae5e8a..0b0103848fe0f1 100644 --- a/test/bundler/transpiler/transpiler.test.js +++ b/test/bundler/transpiler/transpiler.test.js @@ -3441,3 +3441,19 @@ it("does not crash with 9 comments and typescript type skipping", () => { expect(stdout.toString()).toContain("success!"); expect(exitCode).toBe(0); }); + +it("runtime transpiler stack overflows", async () => { + expect(async () => await import("./fixtures/lots-of-for-loop.js")).toThrow(`Maximum call stack size exceeded`); +}); + +it("Bun.Transpiler.transformSync stack overflows", async () => { + const code = await Bun.file(join(import.meta.dir, "fixtures", "lots-of-for-loop.js")).text(); + const transpiler = new Bun.Transpiler(); + expect(() => transpiler.transformSync(code)).toThrow(`Maximum call stack size exceeded`); +}); + +it("Bun.Transpiler.transform stack overflows", async () => { + const code = await Bun.file(join(import.meta.dir, "fixtures", "lots-of-for-loop.js")).text(); + const transpiler = new Bun.Transpiler(); + expect(async () => await transpiler.transform(code)).toThrow(`Maximum call stack size exceeded`); +}); diff --git a/test/js/bun/test/stack.test.ts b/test/js/bun/test/stack.test.ts index ac3fde49c0ca79..dd32267d49091b 100644 --- a/test/js/bun/test/stack.test.ts +++ b/test/js/bun/test/stack.test.ts @@ -93,11 +93,16 @@ test("throwing inside an error suppresses the error and prints the stack", async const { stderr, exitCode } = result; - expect(stderr.toString().trim()).toStartWith( - `error: My custom error message - at http://example.com/test.js:42 - `.trim(), - ); + expect(stderr.toString().trim().split("\n").slice(0, -1).join("\n").trim()).toMatchInlineSnapshot(` +"error: My custom error message +{ + message: "My custom error message", + name: [Getter], + line: 42, + sourceURL: "http://example.com/test.js", +} + at http://example.com/test.js:42" +`); expect(exitCode).toBe(1); }); @@ -108,8 +113,10 @@ test("throwing inside an error suppresses the error and continues printing prope const { stderr, exitCode } = result; - expect(stderr.toString().trim()).toStartWith( - 'ENOENT: No such file or directory\n errno: -2\n syscall: "open"\n path: "this-file-path-is-bad"'.trim(), - ); + expect(stderr.toString().trim()).toStartWith(`ENOENT: No such file or directory + path: "this-file-path-is-bad", + syscall: "open", + errno: -2, +`); expect(exitCode).toBe(1); }); diff --git a/test/js/bun/util/error-gc-test.test.js b/test/js/bun/util/error-gc-test.test.js index da1cfecb02cf82..19bb1210b9227e 100644 --- a/test/js/bun/util/error-gc-test.test.js +++ b/test/js/bun/util/error-gc-test.test.js @@ -50,9 +50,12 @@ test("error gc test #3", () => { // - The test failure message gets a non-sensical error test("error gc test #4", () => { const tmp = tmpdirSync(); - for (let i = 0; i < 1000; i++) { + const base = Buffer.from(join(tmp, "does", "not", "exist").repeat(10)); + + function iterate() { // Use a long-enough string for it to be obvious if we leak memory - let path = join(tmp, join("does", "not", "exist").repeat(10)); + // Use .toString() on the Buffer to ensure we clone the string every time. + let path = base.toString(); try { readFileSync(path); throw new Error("unreachable"); @@ -61,8 +64,14 @@ test("error gc test #4", () => { throw e; } - const inspected = Bun.inspect(e); + path = path.replaceAll("\\", "/"); + if (e.path) { + e.path = e.path.replaceAll("\\", "/"); + } + + let inspected = Bun.inspect(e); Bun.gc(true); + inspected = inspected.replaceAll("\\", "/"); // Deliberately avoid using .toContain() directly to avoid // BunString shenanigins. @@ -80,4 +89,8 @@ test("error gc test #4", () => { Bun.gc(true); } } + + for (let i = 0; i < 1000; i++) { + iterate(); + } }); diff --git a/test/js/bun/util/reportError.test.ts b/test/js/bun/util/reportError.test.ts index 14f0466af3c660..f1e6008991406a 100644 --- a/test/js/bun/util/reportError.test.ts +++ b/test/js/bun/util/reportError.test.ts @@ -18,5 +18,49 @@ test("reportError", () => { // remove bun version from output output = output.split("\n").slice(0, -2).join("\n"); - expect(output).toMatchSnapshot(); + expect(output.replaceAll("\\", "/").replaceAll("/reportError.ts", "[file]")).toMatchInlineSnapshot( + ` +"1 | reportError(new Error("reportError Test!")); + ^ +error: reportError Test! + at [file]:1:13 +error: true +true +error: false +false +error: null +null +error: 123 +123 +error: Infinity +Infinity +error: NaN +NaN +error: NaN +NaN +error + +error +Uint8Array(1) [ 0 ] +error +Uint8Array(0) [ ] +error +ArrayBuffer(0) [ ] +error +ArrayBuffer(1) [ 0 ] +error: string +string +error +[] +error +[ 123, null ] +error +{} +error +[ + {} +] +" +`, + ); }); diff --git a/test/js/node/util/bun-inspect.test.ts b/test/js/node/util/bun-inspect.test.ts index 57151a7b5b5b1c..115ad1c500a885 100644 --- a/test/js/node/util/bun-inspect.test.ts +++ b/test/js/node/util/bun-inspect.test.ts @@ -47,18 +47,46 @@ describe("Bun.inspect", () => { expect(() => Bun.inspect({}, { depth: -1 })).toThrow(); expect(() => Bun.inspect({}, { depth: -13210 })).toThrow(); }); - it("depth = Infinity works", () => { - function createRecursiveObject(n: number): any { - if (n === 0) return { hi: true }; - return { a: createRecursiveObject(n - 1) }; + for (let base of [new Error("hi"), { a: "hi" }]) { + it(`depth = Infinity works for ${base.constructor.name}`, () => { + function createRecursiveObject(n: number): any { + if (n === 0) { + return { a: base }; + } + return { a: createRecursiveObject(n - 1) }; + } + + const obj = createRecursiveObject(512); + expect(Bun.inspect(obj, { depth: Infinity })).toContain("hi"); + // this gets converted to u16, which if just truncating, will turn into 0 + expect(Bun.inspect(obj, { depth: 0x0fff0000 })).toContain("hi"); + }); + } + + it("stack overflow is thrown when it should be for objects", () => { + var object = { a: { b: { c: { d: 1 } } } }; + for (let i = 0; i < 16 * 1024; i++) { + object = { a: object }; } - const obj = createRecursiveObject(1000); + expect(() => Bun.inspect(object, { depth: Infinity })).toThrowErrorMatchingInlineSnapshot( + `"Maximum call stack size exceeded."`, + ); + }); + + it("stack overflow is thrown when it should be for Error", () => { + var object = { a: { b: { c: { d: 1 } } } }; + for (let i = 0; i < 16 * 1024; i++) { + const err = new Error("hello"); + err.object = object; + object = err; + } - expect(Bun.inspect(obj, { depth: Infinity })).toContain("hi"); - // this gets converted to u16, which if just truncating, will turn into 0 - expect(Bun.inspect(obj, { depth: 0x0fff0000 })).toContain("hi"); + expect(() => Bun.inspect(object, { depth: Infinity })).toThrowErrorMatchingInlineSnapshot( + `"Maximum call stack size exceeded."`, + ); }); + it("depth = 0", () => { expect(Bun.inspect({ a: { b: { c: { d: 1 } } } }, { depth: 0 })).toEqual("{\n a: [Object ...],\n}"); });