diff --git a/apps/demo/src/app.ts b/apps/demo/src/app.ts index 517a7184c..46065b31a 100644 --- a/apps/demo/src/app.ts +++ b/apps/demo/src/app.ts @@ -2,11 +2,10 @@ Helpers.initialize(); require('@nativescript/canvas-polyfill'); */ -const TextDecoderO = TextDecoder; import '@nativescript/canvas-polyfill'; // require('@nativescript/canvas-polyfill'); -import { Svg } from '@nativescript/canvas-svg'; -import { Canvas } from '@nativescript/canvas'; +// import { Svg } from '@nativescript/canvas-svg'; +// import { Canvas } from '@nativescript/canvas'; declare const jp, GDPerformanceMonitor, android, java, UIColor; let monitor; import { Application, path as filePath, knownFolders, Utils, path as nsPath, ImageSource, Trace, Screen } from '@nativescript/core'; @@ -21,152 +20,6 @@ Application.on('uncaughtError', (args) => { global.process = {} as any; global.process.env = {} as any; -// 0.253ms 1 -// 0.438ms 10 -// 17.375ms 100 -// 27.237ms 1000 - -/// 35764.462ms 1_000_000 - -/// 2.068ms 1 -// 0.354ms 10 -// 0.600ms 100 -// 3.155ms 1000 - -// 4243.135ms 1_000_000 -// 3631.408ms 1_000_000 ... before ctor update - -/* -JSI - JS: CONSOLE TIME: TextEncoder: 2.423ms - JS: CONSOLE TIME: TextDecoder: 0.646ms -*/ - -// const call = ` -// function f(x, y) { return global.divide(x, y); } -// %PrepareFunctionForOptimization(f); -// f(100,50); -// %OptimizeFunctionOnNextCall(f); -// f(100,50); -// `; - -// eval(call); - -// : CONSOLE TIME: data: 4.250ms image data - -/* - -let url = new URL("https://example.com?foo=1&bar=2"); -let params = new URLSearchParams(url.search); - -//Add a second foo parameter. -params.append("foo", 4 as any); -//Query string is now: 'foo=1&bar=2&foo=4' - -console.log(url.search); - -url = new URL('https://example.com/?name=Jonathan%20Smith&age=18'); -params = url.searchParams; - -const name = params.get("name"); // is the string "Jonathan Smith". -const age = parseInt(params.get("age") as any); // is the number 18 - - -*/ -// url: 5804.647ms - -// other url: 648.170ms - -// try loading our custom font - -// const font = nsPath.join(knownFolders.currentApp().path, 'fonts/Creepster-Regular.ttf'); - -// global.CanvasModule.__addFontFamily('creepster', [font]); - -// Canvas.useSurface = true; - -// const path = new Path2D(); - -// slow 0.484 -// eval(` -// function arc(x, y) { return path.arc(x, y); } -// global.arc = arc; -// %PrepareFunctionForOptimization(arc); -// `); - -// path.arc(100, 75, 50, 0, 2 * Math.PI); - -// console.time('slow'); -// for (let i = 0; i < 1_000; i++) { -// path.arc(100, 75, 50, 0, 2 * Math.PI); -// } -// console.timeEnd('slow'); - -// for (let i = 0; i < 5000; i++) { -// path.arc(100, 75, 50, 0, 2 * Math.PI); -// } - -// eval(`%OptimizeFunctionOnNextCall(global.arc);`); - -// console.time('fast'); -// for (let i = 0; i < 1_000; i++) { -// path.arc(100, 75, 50, 0, 2 * Math.PI); -// } -// console.timeEnd('fast'); - -// console.time('fast'); -// for (let i = 0; i < 1_000; i++) { -// path.arc(100, 75, 50, 0, 2 * Math.PI); -// } -// console.timeEnd('fast'); - -// console.time('fast'); -// for (let i = 0; i < 1_000; i++) { -// path.arc(100, 75, 50, 0, 2 * Math.PI); -// } -// console.timeEnd('fast'); - -// const pathToAdd = new Path2D(); -// pathToAdd.arc(100, 75, 50, 0, 2 * Math.PI); -// const path1 = new Path2D(); -// console.time('fast:addPath'); -// path1.addPath(pathToAdd); -// console.timeEnd('fast:addPath'); - -// eval(` -// const pathToAdd = new Path2D(); -// pathToAdd.arc(100, 75, 50, 0, 2 * Math.PI); -// const path = new Path2D(); -// %OptimizeFunctionOnNextCall(path.addPath); -// console.time('fast:addPath'); -// path.addPath(pathToAdd); -// console.timeEnd('fast:addPath'); -// `); - -// eval(` -// const pathToAdd = new Path2D(); -// pathToAdd.arc(100, 75, 50, 0, 2 * Math.PI); -// const path = new Path2D(); -// %OptimizeFunctionOnNextCall(path.addPath); -// console.time('fast:addPath'); -// path.addPath(pathToAdd); -// console.timeEnd('fast:addPath'); -// `); - -// for (let i = 0; i < 1_000; i++) { -// path2.addPath(path); -// } - -// console.time('url'); -// for (let i = 0; i < 1_000_000; i++) { -// const url = new URL('https://example.com/?name=Jonathan%20Smith&age=18'); -// } -// console.timeEnd('url'); - -// const url = new URL('https://example.com/?name=Jonathan%20Smith&age=18'); - -// console.log('canParse', URL.canParse('asdasd'), URL.canParse('https://example.com/?name=Jonathan%20Smith&age=18')); - Application.on('uncaughtError', (args) => { console.log('uncaughtError: error', args.error); console.log('uncaughtError: platform error', args.android ?? args.ios); @@ -177,14 +30,14 @@ Application.on('launch', (args) => { if (global.isAndroid) { // jp.wasabeef.takt.Takt.stock(Utils.android.getApplicationContext()).seat(jp.wasabeef.takt.Seat.TOP_CENTER).color(-65536); } else { - // monitor = GDPerformanceMonitor.new(); - // monitor.startMonitoringWithConfiguration((label) => { - // label.backgroundColor = UIColor.blackColor; - // label.textColor = UIColor.whiteColor; - // label.layer.borderColor = UIColor.redColor; - // }); - // monitor.appVersionHidden = true; - // monitor.deviceVersionHidden = true; + monitor = GDPerformanceMonitor.new(); + monitor.startMonitoringWithConfiguration((label) => { + label.backgroundColor = UIColor.blackColor; + label.textColor = UIColor.whiteColor; + label.layer.borderColor = UIColor.redColor; + }); + monitor.appVersionHidden = true; + monitor.deviceVersionHidden = true; } }); Application.run({ moduleName: 'app-root' }); diff --git a/apps/demo/src/plugin-demos/canvas.ts b/apps/demo/src/plugin-demos/canvas.ts index d91d925ef..b04d73716 100644 --- a/apps/demo/src/plugin-demos/canvas.ts +++ b/apps/demo/src/plugin-demos/canvas.ts @@ -95,7 +95,6 @@ export class DemoModel extends DemoSharedCanvas { sprites = []; constructor() { super(); - this.image.fromFile('~/assets/file-assets/webgl/svh.jpeg'); } domLoaded(event) { diff --git a/apps/demo/webpack.config.js b/apps/demo/webpack.config.js index 5ab17e3ec..4d4baa4f5 100644 --- a/apps/demo/webpack.config.js +++ b/apps/demo/webpack.config.js @@ -14,6 +14,14 @@ module.exports = (env) => { webpack.Utils.addCopyRule('**/*.svg') webpack.Utils.addCopyRule('**/*.mp4') webpack.Utils.addCopyRule('**/*.so') + webpack.Utils.addCopyRule('**/*.wgsl') + + webpack.Utils.addCopyRule({ + from: '../../../tools/demo/canvas/webgpu/shaders', + to: 'webgpu/shaders', + context: webpack.Utils.project.getProjectFilePath('node_modules') + }); + webpack.Utils.addCopyRule({ from: '../../../tools/demo/canvas/assets', diff --git a/crates/canvas-c/src/lib.rs b/crates/canvas-c/src/lib.rs index 6238a85e5..ab8d24662 100644 --- a/crates/canvas-c/src/lib.rs +++ b/crates/canvas-c/src/lib.rs @@ -101,7 +101,7 @@ pub static API_LEVEL: OnceCell = OnceCell::new(); #[cfg(target_os = "android")] pub mod choreographer; -mod buffers; +pub mod buffers; #[cfg(any(target_os = "android", target_os = "ios"))] mod raf; diff --git a/crates/canvas-c/src/webgpu/enums.rs b/crates/canvas-c/src/webgpu/enums.rs index fa86774dd..143128d23 100644 --- a/crates/canvas-c/src/webgpu/enums.rs +++ b/crates/canvas-c/src/webgpu/enums.rs @@ -665,15 +665,7 @@ impl Into for CanvasGPUTextureFormat { } } } - -#[repr(C)] -#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)] -pub enum CanvasOptionsGPUTextureFormat { - None, - Some(CanvasGPUTextureFormat), -} - -impl From> for CanvasOptionsGPUTextureFormat { +impl From> for CanvasOptionalGPUTextureFormat { fn from(value: Option) -> Self { match value { Some(value) => { @@ -685,11 +677,11 @@ impl From> for CanvasOptionsGPUTextureFormat { } } -impl Into> for CanvasOptionsGPUTextureFormat { +impl Into> for CanvasOptionalGPUTextureFormat { fn into(self) -> Option { match self { - CanvasOptionsGPUTextureFormat::None => None, - CanvasOptionsGPUTextureFormat::Some(value) => { + CanvasOptionalGPUTextureFormat::None => None, + CanvasOptionalGPUTextureFormat::Some(value) => { let value: wgpu_types::TextureFormat = value.into(); Some(value) } @@ -919,6 +911,7 @@ pub extern "C" fn canvas_native_webgpu_enum_gpu_texture_to_string( } #[repr(C)] +#[derive(Copy, Clone, Eq, PartialEq)] pub enum CanvasOptionalGPUTextureFormat { None, Some(CanvasGPUTextureFormat), @@ -2285,4 +2278,10 @@ impl From> for CanvasOptionalCompareFunction Some(value) => Self::Some(value.into()) } } -} \ No newline at end of file +} + +pub const CanvasGPUTextureUsageCopySrc: u32 = 1 << 0; +pub const CanvasGPUTextureUsageCopyDst: u32 = 1 << 1; +pub const CanvasGPUTextureUsageTextureBinding: u32 = 1 << 2; +pub const CanvasGPUTextureUsageStorageBinding: u32 = 1 << 3; +pub const CanvasGPUTextureUsageRenderAttachment: u32 = 1 << 4; diff --git a/crates/canvas-c/src/webgpu/error.rs b/crates/canvas-c/src/webgpu/error.rs index d285438ce..4bb138c5f 100644 --- a/crates/canvas-c/src/webgpu/error.rs +++ b/crates/canvas-c/src/webgpu/error.rs @@ -78,6 +78,8 @@ pub(crate) fn handle_error_fatal( // ); let error = cause.to_string(); + println!("error ? {:?}", error); + // log::error!("Error in {operation}: {f}", // f = error); diff --git a/crates/canvas-c/src/webgpu/gpu.rs b/crates/canvas-c/src/webgpu/gpu.rs index a5832ef70..ddea4e5be 100644 --- a/crates/canvas-c/src/webgpu/gpu.rs +++ b/crates/canvas-c/src/webgpu/gpu.rs @@ -134,6 +134,7 @@ pub unsafe extern "C" fn canvas_native_webgpu_request_adapter( wgpu_core::instance::AdapterInputs::Mask(backends, |b| None), ); + let adapter = adapter.map(|adapter_id| { let features = gfx_select!(adapter_id => global.adapter_features(adapter_id)) .map(build_features) diff --git a/crates/canvas-c/src/webgpu/gpu_adapter.rs b/crates/canvas-c/src/webgpu/gpu_adapter.rs index 8172aa6cb..d4f6ecbaf 100644 --- a/crates/canvas-c/src/webgpu/gpu_adapter.rs +++ b/crates/canvas-c/src/webgpu/gpu_adapter.rs @@ -4,7 +4,8 @@ use std::{ , }; use std::sync::Arc; - +use wgpu_core::instance::InvalidAdapter; +use wgpu_types::DownlevelCapabilities; use crate::buffers::StringBuffer; use crate::webgpu::gpu_device::{DEFAULT_DEVICE_LOST_HANDLER, ErrorSinkRaw}; use crate::webgpu::gpu_queue::QueueId; @@ -132,18 +133,14 @@ pub extern "C" fn canvas_native_webgpu_adapter_request_device( unsafe { *required_limits }.into() }; - let label = if !label.is_null() { - Some(unsafe { CStr::from_ptr(label).to_string_lossy() }) - } else { - None - }; + let label = ptr_into_label(label); let callback = callback as i64; let callback_data = callback_data as i64; let adapter_id = adapter.adapter; let instance = adapter.instance.clone(); std::thread::spawn(move || { - let descriptor = wgpu_types::DeviceDescriptor { + let mut descriptor = wgpu_types::DeviceDescriptor { label, required_features: features, required_limits: limits, diff --git a/crates/canvas-c/src/webgpu/gpu_command_encoder.rs b/crates/canvas-c/src/webgpu/gpu_command_encoder.rs index 5cf2701ee..7ff8a850d 100644 --- a/crates/canvas-c/src/webgpu/gpu_command_encoder.rs +++ b/crates/canvas-c/src/webgpu/gpu_command_encoder.rs @@ -130,7 +130,7 @@ pub extern "C" fn canvas_native_webgpu_command_encoder_begin_compute_pass( let pass_encoder = CanvasGPUComputePassEncoder { label, instance: command_encoder.instance.clone(), - pass: Box::into_raw(Box::new(pass)), + pass: parking_lot::Mutex::new(Some(pass)), error_sink: command_encoder.error_sink.clone(), }; Arc::into_raw(Arc::new(pass_encoder)) diff --git a/crates/canvas-c/src/webgpu/gpu_compute_pass_encoder.rs b/crates/canvas-c/src/webgpu/gpu_compute_pass_encoder.rs index f9e2f0e6f..cfbe81c1d 100644 --- a/crates/canvas-c/src/webgpu/gpu_compute_pass_encoder.rs +++ b/crates/canvas-c/src/webgpu/gpu_compute_pass_encoder.rs @@ -16,19 +16,19 @@ pub struct CanvasGPUComputePassEncoder { pub(crate) label: Option>, pub(crate) instance: Arc, #[cfg(any(target_os = "android"))] - pub(crate) pass: *mut wgpu_core::command::ComputePass, + pub(crate) pass: parking_lot::Mutex>>, #[cfg(any(target_os = "ios", target_os = "macos"))] - pub(crate) pass: *mut wgpu_core::command::ComputePass, + pub(crate) pass: parking_lot::Mutex>>, pub(crate) error_sink: super::gpu_device::ErrorSink, } -impl Drop for CanvasGPUComputePassEncoder { - fn drop(&mut self) { - if !std::thread::panicking() { - drop(unsafe { Box::from_raw(self.pass) }); - } - } -} +// impl Drop for CanvasGPUComputePassEncoder { +// fn drop(&mut self) { +// if !std::thread::panicking() { +// drop(unsafe { Box::from_raw(self.pass) }); +// } +// } +// } // CanvasGPUComputePassEncoder is thread-unsafe unsafe impl Send for CanvasGPUComputePassEncoder {} unsafe impl Sync for CanvasGPUComputePassEncoder {} @@ -67,18 +67,19 @@ pub unsafe extern "C" fn canvas_native_webgpu_compute_pass_encoder_dispatch_work let compute_pass = &*compute_pass; let global = compute_pass.instance.global(); let error_sink = compute_pass.error_sink.as_ref(); - let compute_pass = &mut *compute_pass.pass; - - - if let Err(cause) = compute_pass.dispatch_workgroups(global, workgroup_count_x, workgroup_count_y, workgroup_count_z) { - handle_error( - global, - error_sink, - cause, - "encoder", - None, - "canvas_native_webgpu_compute_pass_encoder_dispatch_workgroups", - ); + + let mut lock = compute_pass.pass.lock(); + if let Some(compute_pass) = lock.as_mut() { + if let Err(cause) = compute_pass.dispatch_workgroups(global, workgroup_count_x, workgroup_count_y, workgroup_count_z) { + handle_error( + global, + error_sink, + cause, + "encoder", + None, + "canvas_native_webgpu_compute_pass_encoder_dispatch_workgroups", + ); + } } } @@ -96,20 +97,21 @@ pub unsafe extern "C" fn canvas_native_webgpu_compute_pass_encoder_dispatch_work let compute_pass = &*compute_pass; let global = compute_pass.instance.global(); let error_sink = compute_pass.error_sink.as_ref(); - let compute_pass = &mut *compute_pass.pass; - - let indirect_buffer = &*indirect_buffer; - let indirect_buffer = indirect_buffer.buffer; - - if let Err(cause) = compute_pass.dispatch_workgroups_indirect(global, indirect_buffer, indirect_offset as u64) { - handle_error( - global, - error_sink, - cause, - "encoder", - None, - "canvas_native_webgpu_compute_pass_encoder_dispatch_workgroups_indirect", - ); + let mut lock = compute_pass.pass.lock(); + if let Some(compute_pass) = lock.as_mut() { + let indirect_buffer = &*indirect_buffer; + let indirect_buffer = indirect_buffer.buffer; + + if let Err(cause) = compute_pass.dispatch_workgroups_indirect(global, indirect_buffer, indirect_offset as u64) { + handle_error( + global, + error_sink, + cause, + "encoder", + None, + "canvas_native_webgpu_compute_pass_encoder_dispatch_workgroups_indirect", + ); + } } } @@ -128,17 +130,23 @@ pub unsafe extern "C" fn canvas_native_webgpu_compute_pass_encoder_end( let global = compute_pass.instance.global(); - let compute_pass = &mut *compute_pass.pass; - - if let Err(cause) = compute_pass.end(global) { - handle_error( - global, - error_sink, - cause, - "encoder", - label, - "canvas_native_webgpu_compute_pass_end", - ); + let mut lock = compute_pass.pass.lock(); + + if let Some(compute_pass) = lock.as_mut() { + if let Err(cause) = compute_pass.end(global) { + handle_error( + global, + error_sink, + cause, + "encoder", + label, + "canvas_native_webgpu_compute_pass_end", + ); + } + if let Some(pass) = lock.take() { + drop(pass); + } + } } @@ -155,21 +163,23 @@ pub unsafe extern "C" fn canvas_native_webgpu_compute_pass_encoder_insert_debug_ let compute_pass = &*compute_pass; let global = compute_pass.instance.global(); let error_sink = compute_pass.error_sink.as_ref(); - let compute_pass = &mut *compute_pass.pass; let label = CStr::from_ptr(label); let label = label.to_string_lossy(); - if let Err(cause) = compute_pass.insert_debug_marker(global, label.as_ref(), - 0) { - handle_error( - global, - error_sink, - cause, - "encoder", - None, - "canvas_native_webgpu_compute_pass_encoder_insert_debug_marker", - ); + let mut lock = compute_pass.pass.lock(); + if let Some(compute_pass) = lock.as_mut() { + if let Err(cause) = compute_pass.insert_debug_marker(global, label.as_ref(), + 0) { + handle_error( + global, + error_sink, + cause, + "encoder", + None, + "canvas_native_webgpu_compute_pass_encoder_insert_debug_marker", + ); + } } } @@ -184,17 +194,19 @@ pub unsafe extern "C" fn canvas_native_webgpu_compute_pass_encoder_pop_debug_gro let compute_pass = &*compute_pass; let global = compute_pass.instance.global(); let error_sink = compute_pass.error_sink.as_ref(); - let compute_pass = &mut *compute_pass.pass; - - if let Err(cause) = compute_pass.pop_debug_group(global) { - handle_error( - global, - error_sink, - cause, - "encoder", - None, - "canvas_native_webgpu_compute_pass_encoder_pop_debug_group", - ); + + let mut lock = compute_pass.pass.lock(); + if let Some(compute_pass) = lock.as_mut() { + if let Err(cause) = compute_pass.pop_debug_group(global) { + handle_error( + global, + error_sink, + cause, + "encoder", + None, + "canvas_native_webgpu_compute_pass_encoder_pop_debug_group", + ); + } } } @@ -210,21 +222,23 @@ pub unsafe extern "C" fn canvas_native_webgpu_compute_pass_encoder_push_debug_gr let compute_pass = &*compute_pass; let global = compute_pass.instance.global(); let error_sink = compute_pass.error_sink.as_ref(); - let compute_pass = &mut *compute_pass.pass; - let label = CStr::from_ptr(label); - let label = label.to_string_lossy(); + let mut lock = compute_pass.pass.lock(); + if let Some(compute_pass) = lock.as_mut() { + let label = CStr::from_ptr(label); + let label = label.to_string_lossy(); - if let Err(cause) = compute_pass.push_debug_group(global, label.as_ref(), - 0) { - handle_error( - global, - error_sink, - cause, - "encoder", - None, - "canvas_native_webgpu_compute_pass_encoder_push_debug_group", - ); + if let Err(cause) = compute_pass.push_debug_group(global, label.as_ref(), + 0) { + handle_error( + global, + error_sink, + cause, + "encoder", + None, + "canvas_native_webgpu_compute_pass_encoder_push_debug_group", + ); + } } } @@ -246,46 +260,48 @@ pub unsafe extern "C" fn canvas_native_webgpu_compute_pass_encoder_set_bind_grou let compute_pass = &*compute_pass; let global = compute_pass.instance.global(); let error_sink = compute_pass.error_sink.as_ref(); - let compute_pass = &mut *compute_pass.pass; - - let bind_group = &*bind_group; - let bind_group_id = bind_group.group; - - if !dynamic_offsets.is_null() && dynamic_offsets_size > 0 { - let dynamic_offsets = std::slice::from_raw_parts(dynamic_offsets, dynamic_offsets_size); - - let start = dynamic_offsets_start; - let len = dynamic_offsets_length; - // Assert that length and start are both in bounds - assert!(start <= dynamic_offsets.len()); - assert!(len <= dynamic_offsets.len() - start); - - let dynamic_offsets: &[u32] = &dynamic_offsets[start..start + len]; - - if let Err(cause) = compute_pass.set_bind_group(global, index, - bind_group_id, - dynamic_offsets) { - handle_error( - global, - error_sink, - cause, - "encoder", - None, - "canvas_native_webgpu_compute_pass_encoder_set_bind_group", - ); - } - } else { - if let Err(cause) = compute_pass.set_bind_group(global, index, - bind_group_id, &[]) { - handle_error( - global, - error_sink, - cause, - "encoder", - None, - "canvas_native_webgpu_compute_pass_encoder_set_bind_group", - ); + let mut lock = compute_pass.pass.lock(); + if let Some(compute_pass) = lock.as_mut() { + let bind_group = &*bind_group; + let bind_group_id = bind_group.group; + + if !dynamic_offsets.is_null() && dynamic_offsets_size > 0 { + let dynamic_offsets = std::slice::from_raw_parts(dynamic_offsets, dynamic_offsets_size); + + let start = dynamic_offsets_start; + let len = dynamic_offsets_length; + + // Assert that length and start are both in bounds + assert!(start <= dynamic_offsets.len()); + assert!(len <= dynamic_offsets.len() - start); + + let dynamic_offsets: &[u32] = &dynamic_offsets[start..start + len]; + + if let Err(cause) = compute_pass.set_bind_group(global, index, + bind_group_id, + dynamic_offsets) { + handle_error( + global, + error_sink, + cause, + "encoder", + None, + "canvas_native_webgpu_compute_pass_encoder_set_bind_group", + ); + } + } else { + if let Err(cause) = compute_pass.set_bind_group(global, index, + bind_group_id, &[]) { + handle_error( + global, + error_sink, + cause, + "encoder", + None, + "canvas_native_webgpu_compute_pass_encoder_set_bind_group", + ); + } } } } @@ -303,19 +319,21 @@ pub unsafe extern "C" fn canvas_native_webgpu_compute_pass_encoder_set_pipeline( let compute_pass = &*compute_pass; let global = compute_pass.instance.global(); let error_sink = compute_pass.error_sink.as_ref(); - let compute_pass = &mut *compute_pass.pass; - - let pipeline = &*pipeline; - let pipeline_id = pipeline.pipeline; - - if let Err(cause) = compute_pass.set_pipeline(global, pipeline_id) { - handle_error( - global, - error_sink, - cause, - "encoder", - None, - "canvas_native_webgpu_compute_pass_encoder_set_pipeline", - ); + + let mut lock = compute_pass.pass.lock(); + if let Some(compute_pass) = lock.as_mut() { + let pipeline = &*pipeline; + let pipeline_id = pipeline.pipeline; + + if let Err(cause) = compute_pass.set_pipeline(global, pipeline_id) { + handle_error( + global, + error_sink, + cause, + "encoder", + None, + "canvas_native_webgpu_compute_pass_encoder_set_pipeline", + ); + } } } diff --git a/crates/canvas-c/src/webgpu/gpu_device.rs b/crates/canvas-c/src/webgpu/gpu_device.rs index 96af154de..ec978b90f 100644 --- a/crates/canvas-c/src/webgpu/gpu_device.rs +++ b/crates/canvas-c/src/webgpu/gpu_device.rs @@ -1763,17 +1763,17 @@ pub unsafe extern "C" fn canvas_native_webgpu_device_create_render_pipeline_asyn #[repr(C)] pub struct CanvasCreateTextureDescriptor { - label: *const c_char, - dimension: CanvasTextureDimension, - format: CanvasGPUTextureFormat, - mipLevelCount: u32, - sampleCount: u32, - width: u32, - height: u32, - depthOrArrayLayers: u32, - usage: u32, - view_formats: *const CanvasGPUTextureFormat, - view_formats_size: usize, + pub label: *const c_char, + pub dimension: CanvasTextureDimension, + pub format: CanvasGPUTextureFormat, + pub mipLevelCount: u32, + pub sampleCount: u32, + pub width: u32, + pub height: u32, + pub depthOrArrayLayers: u32, + pub usage: u32, + pub view_formats: *const CanvasGPUTextureFormat, + pub view_formats_size: usize, } #[no_mangle] @@ -1855,17 +1855,17 @@ pub extern "C" fn canvas_native_webgpu_device_create_texture( #[repr(C)] pub struct CanvasCreateSamplerDescriptor { - label: *const c_char, - address_mode_u: CanvasAddressMode, - address_mode_v: CanvasAddressMode, - address_mode_w: CanvasAddressMode, - mag_filter: CanvasFilterMode, - min_filter: CanvasFilterMode, - mipmap_filter: CanvasFilterMode, // TODO: GPUMipmapFilterMode - lod_min_clamp: f32, - lod_max_clamp: f32, - compare: CanvasOptionalCompareFunction, - max_anisotropy: u16, + pub label: *const c_char, + pub address_mode_u: CanvasAddressMode, + pub address_mode_v: CanvasAddressMode, + pub address_mode_w: CanvasAddressMode, + pub mag_filter: CanvasFilterMode, + pub min_filter: CanvasFilterMode, + pub mipmap_filter: CanvasFilterMode, // TODO: GPUMipmapFilterMode + pub lod_min_clamp: f32, + pub lod_max_clamp: f32, + pub compare: CanvasOptionalCompareFunction, + pub max_anisotropy: u16, } diff --git a/crates/canvas-c/src/webgpu/gpu_queue.rs b/crates/canvas-c/src/webgpu/gpu_queue.rs index 8851d09bc..c4844f28a 100644 --- a/crates/canvas-c/src/webgpu/gpu_queue.rs +++ b/crates/canvas-c/src/webgpu/gpu_queue.rs @@ -116,12 +116,16 @@ pub unsafe extern "C" fn canvas_native_webgpu_queue_copy_external_image_to_textu let data = std::slice::from_raw_parts(source.source, source.source_size); + let bytesPerRow = source.source_size / (source.width as usize * source.height as usize); + let data_layout = wgpu_types::ImageDataLayout { offset: 0, - bytes_per_row: None, - rows_per_image: None, + bytes_per_row: Some(source.width * bytesPerRow as u32), + rows_per_image: Some(source.height), }; + + let destination = wgpu_types::ImageCopyTexture { texture: destination_texture_id, mip_level: destination.mip_level, diff --git a/crates/canvas-c/src/webgpu/gpu_render_pass_encoder.rs b/crates/canvas-c/src/webgpu/gpu_render_pass_encoder.rs index 7fd9b1443..17388cada 100644 --- a/crates/canvas-c/src/webgpu/gpu_render_pass_encoder.rs +++ b/crates/canvas-c/src/webgpu/gpu_render_pass_encoder.rs @@ -240,8 +240,10 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_end( label, "canvas_native_webgpu_render_pass_encoder_end", ); - } else { - let _ = lock.take(); + } + + if let Some(pass) = lock.take() { + drop(pass); } } } diff --git a/crates/canvas-c/src/webgpu/gpu_texture.rs b/crates/canvas-c/src/webgpu/gpu_texture.rs index 4d968e65e..68149f9e1 100644 --- a/crates/canvas-c/src/webgpu/gpu_texture.rs +++ b/crates/canvas-c/src/webgpu/gpu_texture.rs @@ -7,7 +7,7 @@ use crate::webgpu::prelude::ptr_into_label; use super::{ enums::{ CanvasGPUTextureFormat, CanvasOptionalTextureViewDimension, - CanvasOptionsGPUTextureFormat, CanvasTextureDimension, + CanvasOptionalGPUTextureFormat, CanvasTextureDimension, }, gpu::CanvasWebGPUInstance, gpu_texture_view::CanvasGPUTextureView, @@ -57,9 +57,8 @@ impl Drop for CanvasGPUTexture { #[repr(C)] pub struct CanvasCreateTextureViewDescriptor { - texture: *const CanvasGPUTexture, label: *const c_char, - format: CanvasOptionsGPUTextureFormat, + format: CanvasOptionalGPUTextureFormat, dimension: CanvasOptionalTextureViewDimension, range: *const CanvasImageSubresourceRange, } diff --git a/crates/canvas-c/src/webgpu/mod.rs b/crates/canvas-c/src/webgpu/mod.rs index 0918ad91b..efe4c2f53 100644 --- a/crates/canvas-c/src/webgpu/mod.rs +++ b/crates/canvas-c/src/webgpu/mod.rs @@ -60,7 +60,7 @@ pub mod structs; pub mod gpu_render_bundle; pub mod gpu_render_pipeline; pub mod gpu_pipeline_layout; -mod error; -mod gpu_compute_pipeline; -mod gpu_sampler; -mod gpu_render_bundle_encoder; \ No newline at end of file +pub mod error; +pub mod gpu_compute_pipeline; +pub mod gpu_sampler; +pub mod gpu_render_bundle_encoder; \ No newline at end of file diff --git a/crates/playground/src/Di-3d.png b/crates/playground/src/Di-3d.png new file mode 100644 index 000000000..ebbff45ea Binary files /dev/null and b/crates/playground/src/Di-3d.png differ diff --git a/crates/playground/src/blur.wgsl b/crates/playground/src/blur.wgsl new file mode 100644 index 000000000..ef4184f0f --- /dev/null +++ b/crates/playground/src/blur.wgsl @@ -0,0 +1,81 @@ +struct Params { + filterDim : i32, + blockDim : u32, +} + +@group(0) @binding(0) var samp : sampler; +@group(0) @binding(1) var params : Params; +@group(1) @binding(1) var inputTex : texture_2d; +@group(1) @binding(2) var outputTex : texture_storage_2d; + +struct Flip { + value : u32, +} +@group(1) @binding(3) var flip : Flip; + +// This shader blurs the input texture in one direction, depending on whether +// |flip.value| is 0 or 1. +// It does so by running (128 / 4) threads per workgroup to load 128 +// texels into 4 rows of shared memory. Each thread loads a +// 4 x 4 block of texels to take advantage of the texture sampling +// hardware. +// Then, each thread computes the blur result by averaging the adjacent texel values +// in shared memory. +// Because we're operating on a subset of the texture, we cannot compute all of the +// results since not all of the neighbors are available in shared memory. +// Specifically, with 128 x 128 tiles, we can only compute and write out +// square blocks of size 128 - (filterSize - 1). We compute the number of blocks +// needed in Javascript and dispatch that amount. + +var tile : array, 4>; + +@compute @workgroup_size(32, 1, 1) +fn main( + @builtin(workgroup_id) WorkGroupID : vec3u, + @builtin(local_invocation_id) LocalInvocationID : vec3u +) { + let filterOffset = (params.filterDim - 1) / 2; + let dims = vec2i(textureDimensions(inputTex, 0)); + let baseIndex = vec2i(WorkGroupID.xy * vec2(params.blockDim, 4) + + LocalInvocationID.xy * vec2(4, 1)) + - vec2(filterOffset, 0); + + for (var r = 0; r < 4; r++) { + for (var c = 0; c < 4; c++) { + var loadIndex = baseIndex + vec2(c, r); + if (flip.value != 0u) { + loadIndex = loadIndex.yx; + } + + tile[r][4 * LocalInvocationID.x + u32(c)] = textureSampleLevel( + inputTex, + samp, + (vec2f(loadIndex) + vec2f(0.25, 0.25)) / vec2f(dims), + 0.0 + ).rgb; + } + } + + workgroupBarrier(); + + for (var r = 0; r < 4; r++) { + for (var c = 0; c < 4; c++) { + var writeIndex = baseIndex + vec2(c, r); + if (flip.value != 0) { + writeIndex = writeIndex.yx; + } + + let center = i32(4 * LocalInvocationID.x) + c; + if (center >= filterOffset && + center < 128 - filterOffset && + all(writeIndex < dims)) { + var acc = vec3(0.0, 0.0, 0.0); + for (var f = 0; f < params.filterDim; f++) { + var i = center + f - filterOffset; + acc = acc + (1.0 / f32(params.filterDim)) * tile[r][i]; + } + textureStore(outputTex, writeIndex, vec4(acc, 1.0)); + } + } + } +} diff --git a/crates/playground/src/fullscreenTexturedQuad.wgsl b/crates/playground/src/fullscreenTexturedQuad.wgsl new file mode 100644 index 000000000..af4fe0d97 --- /dev/null +++ b/crates/playground/src/fullscreenTexturedQuad.wgsl @@ -0,0 +1,38 @@ +@group(0) @binding(0) var mySampler : sampler; +@group(0) @binding(1) var myTexture : texture_2d; + +struct VertexOutput { + @builtin(position) Position : vec4f, + @location(0) fragUV : vec2f, +} + +@vertex +fn vert_main(@builtin(vertex_index) VertexIndex : u32) -> VertexOutput { + var pos = array, 6>( + vec2( 1.0, 1.0), + vec2( 1.0, -1.0), + vec2(-1.0, -1.0), + vec2( 1.0, 1.0), + vec2(-1.0, -1.0), + vec2(-1.0, 1.0), + ); + + var uv = array, 6>( + vec2(1.0, 0.0), + vec2(1.0, 1.0), + vec2(0.0, 1.0), + vec2(1.0, 0.0), + vec2(0.0, 1.0), + vec2(0.0, 0.0), + ); + + var output : VertexOutput; + output.Position = vec4(pos[VertexIndex], 0.0, 1.0); + output.fragUV = uv[VertexIndex]; + return output; +} + +@fragment +fn frag_main(@location(0) fragUV : vec2f) -> @location(0) vec4f { + return textureSample(myTexture, mySampler, fragUV); +} \ No newline at end of file diff --git a/crates/playground/src/main.rs b/crates/playground/src/main.rs index 9c1e43222..6d70f496d 100644 --- a/crates/playground/src/main.rs +++ b/crates/playground/src/main.rs @@ -1,13 +1,13 @@ -use std::ffi::CString; +use std::ffi::{CStr, CString}; use std::fmt::Formatter; +use std::os::raw::{c_char, c_void}; +use std::ptr; use chrono::Timelike; use glutin::display::GetGlDisplay; use glutin::prelude::*; use rand::Rng; -use raw_window_handle::{ - HasRawWindowHandle, RawWindowHandle, -}; +use raw_window_handle::{AppKitWindowHandle, HasRawWindowHandle, RawWindowHandle}; use winit::event::{Event, WindowEvent}; use winit::event_loop::EventLoop; use winit::window::WindowBuilder; @@ -16,8 +16,15 @@ use canvas_2d::context::compositing::composite_operation_type::CompositeOperatio use canvas_2d::context::ContextWrapper; use canvas_2d::context::fill_and_stroke_styles::paint::PaintStyle; use canvas_2d::context::line_styles::line_cap::LineCap; +use canvas_c::webgpu::enums::{CanvasAddressMode, CanvasBindGroupEntry, CanvasBindGroupEntryResource, CanvasBufferBinding, CanvasCullMode, CanvasFilterMode, CanvasFrontFace, CanvasGPUTextureFormat, CanvasGPUTextureUsageCopyDst, CanvasGPUTextureUsageRenderAttachment, CanvasGPUTextureUsageStorageBinding, CanvasGPUTextureUsageTextureBinding, CanvasOptionalCompareFunction, CanvasOptionalIndexFormat, CanvasPrimitiveTopology, CanvasTextureAspect, CanvasTextureDimension}; +use canvas_c::webgpu::error::CanvasGPUErrorType; use canvas_c::webgpu::gpu_adapter::CanvasGPUAdapter; -use canvas_c::webgpu::gpu_device::CanvasGPUDevice; +use canvas_c::webgpu::gpu_buffer::CanvasGPUBuffer; +use canvas_c::webgpu::gpu_command_encoder::CanvasImageCopyTexture; +use canvas_c::webgpu::gpu_device::{canvas_native_webgpu_device_get_queue, CanvasCreateRenderPipelineDescriptor, CanvasCreateSamplerDescriptor, CanvasCreateTextureDescriptor, CanvasFragmentState, CanvasGPUAutoLayoutMode, CanvasGPUDevice, CanvasGPUPipelineLayoutOrGPUAutoLayoutMode, CanvasPrimitiveState, CanvasProgrammableStage, CanvasVertexState}; +use canvas_c::webgpu::gpu_queue::canvas_native_webgpu_queue_release; +use canvas_c::webgpu::gpu_texture::canvas_native_webgpu_texture_create_texture_view; +use canvas_c::webgpu::structs::{CanvasColor, CanvasColorTargetState, CanvasExtent3d, CanvasImageCopyExternalImage, CanvasLoadOp, CanvasOptionalBlendState, CanvasOrigin2d, CanvasOrigin3d, CanvasPassChannelColor, CanvasRenderPassColorAttachment, CanvasStoreOp}; use canvas_core::gl::get_shader_info_log; use canvas_core::image_asset::ImageAsset; use canvas_webgl::prelude::{WebGLResult, WebGLState}; @@ -576,6 +583,536 @@ pub extern "C" fn my_callback(adapter: *const CanvasGPUAdapter, data: *mut std:: ) } +fn webgpu_triangle(data: *mut Data, window: AppKitWindowHandle) { + let SHADERS = r#" + struct VertexOut { + @builtin(position) position : vec4f, + @location(0) color : vec4f + } + + @vertex + fn vertex_main(@location(0) position: vec4f, + @location(1) color: vec4f) -> VertexOut + { + var output : VertexOut; + output.position = position; + output.color = color; + return output; + } + + @fragment + fn fragment_main(fragData: VertexOut) -> @location(0) vec4f + { + return fragData.color; + } + "#; + + let source = CString::new(SHADERS).unwrap(); + + let data = unsafe { &mut *data }; + + let device = data.device.unwrap(); + + let module = canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_shader_module( + device, + std::ptr::null(), + source.as_ptr(), + ); + + + let instance = data.instance; + + let context = unsafe { + canvas_c::webgpu::gpu_canvas_context::canvas_native_webgpu_context_create_nsview( + instance, + window.ns_view.as_ptr(), + data.width, + data.height, + ) + }; + + let RENDER_ATTACHMENT = 1 << 4 as u32; + + let config = canvas_c::webgpu::gpu_canvas_context::CanvasGPUSurfaceConfiguration { alphaMode: canvas_c::webgpu::gpu_canvas_context::CanvasGPUSurfaceAlphaMode::PostMultiplied, usage: RENDER_ATTACHMENT, presentMode: canvas_c::webgpu::gpu_canvas_context::CanvasGPUPresentMode::Fifo, view_formats: std::ptr::null(), view_formats_size: 0 }; + + unsafe { canvas_c::webgpu::gpu_canvas_context::canvas_native_webgpu_context_configure(context, device, &config); } + + let texture = canvas_c::webgpu::gpu_canvas_context::canvas_native_webgpu_context_get_current_texture(context); + + let desc = std::ptr::null() as _; + + let view = unsafe { canvas_native_webgpu_texture_create_texture_view(texture, desc) }; + + + let vertices: Vec = vec![0.0, 0.6, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, -0.5, -0.6, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.5, -0.6, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0]; + + let usage: u32 = 0x0020 | 0x0008; + let buffer = canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_buffer(device, std::ptr::null(), vertices.len() as u64 * 4, usage, false); + + + let queue = canvas_native_webgpu_device_get_queue(device); + unsafe { canvas_c::webgpu::gpu_queue::canvas_native_webgpu_queue_write_buffer(queue, buffer, 0, vertices.as_ptr() as _, vertices.len() * 4, 0, -1) } + + let vertext_entry_point = CString::new("vertex_main").unwrap(); + + let vertex_attributes = vec![ + canvas_c::webgpu::structs::CanvasVertexAttribute { format: canvas_c::webgpu::enums::CanvasVertexFormat::Float32x4, offset: 0, shader_location: 0 }, + canvas_c::webgpu::structs::CanvasVertexAttribute { format: canvas_c::webgpu::enums::CanvasVertexFormat::Float32x4, offset: 16, shader_location: 1 }, + ]; + + let buffers = vec![canvas_c::webgpu::gpu_device::CanvasVertexBufferLayout { array_stride: 32, step_mode: canvas_c::webgpu::enums::CanvasVertexStepMode::Vertex, attributes: vertex_attributes.as_ptr(), attributes_size: vertex_attributes.len() }]; + let vertex = canvas_c::webgpu::gpu_device::CanvasVertexState { module: module, entry_point: vertext_entry_point.as_ptr(), constants: std::ptr::null(), buffers: buffers.as_ptr(), buffers_size: buffers.len() }; + + let primitive = canvas_c::webgpu::gpu_device::CanvasPrimitiveState { topology: canvas_c::webgpu::enums::CanvasPrimitiveTopology::TriangleList, strip_index_format: canvas_c::webgpu::enums::CanvasOptionalIndexFormat::None, front_face: canvas_c::webgpu::enums::CanvasFrontFace::Ccw, cull_mode: canvas_c::webgpu::enums::CanvasCullMode::None, unclipped_depth: false }; + + let fragment_entry_point = CString::new("fragment_main").unwrap(); + let fragment_targets = vec![canvas_c::webgpu::structs::CanvasColorTargetState { format: canvas_c::webgpu::enums::CanvasGPUTextureFormat::Bgra8Unorm, blend: canvas_c::webgpu::structs::CanvasOptionalBlendState::None, write_mask: 0xF }]; + let fragment = canvas_c::webgpu::gpu_device::CanvasFragmentState { targets: fragment_targets.as_ptr(), targets_size: fragment_targets.len(), module: module, entry_point: fragment_entry_point.as_ptr(), constants: std::ptr::null() }; + + let descriptor = canvas_c::webgpu::gpu_device::CanvasCreateRenderPipelineDescriptor { label: std::ptr::null(), layout: canvas_c::webgpu::gpu_device::CanvasGPUPipelineLayoutOrGPUAutoLayoutMode::Auto(canvas_c::webgpu::gpu_device::CanvasGPUAutoLayoutMode::Auto), vertex: &vertex, primitive: &primitive, depth_stencil: std::ptr::null(), multisample: std::ptr::null(), fragment: &fragment }; + let pipeline = unsafe { canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_render_pipeline(device, &descriptor) }; + + let command_encoder = canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_command_encoder(device, std::ptr::null()); + + let color_attachments = vec![canvas_c::webgpu::structs::CanvasRenderPassColorAttachment { view: view, resolve_target: std::ptr::null() as _, channel: canvas_c::webgpu::structs::CanvasPassChannelColor { load_op: canvas_c::webgpu::structs::CanvasLoadOp::Clear, store_op: canvas_c::webgpu::structs::CanvasStoreOp::Store, clear_value: canvas_c::webgpu::structs::CanvasColor { r: 0., g: 0.5, b: 1., a: 1. }, read_only: false } }]; + + let render_pass = unsafe { canvas_c::webgpu::gpu_command_encoder::canvas_native_webgpu_command_encoder_begin_render_pass(command_encoder, std::ptr::null(), color_attachments.as_ptr(), color_attachments.len(), std::ptr::null(), std::ptr::null(), std::ptr::null(), -1, -1) }; + + unsafe { canvas_c::webgpu::gpu_render_pass_encoder::canvas_native_webgpu_render_pass_encoder_set_pipeline(render_pass, pipeline) } + + + unsafe { canvas_c::webgpu::gpu_render_pass_encoder::canvas_native_webgpu_render_pass_encoder_set_vertex_buffer(render_pass, 0, buffer, 0, -1) } + + + unsafe { canvas_c::webgpu::gpu_render_pass_encoder::canvas_native_webgpu_render_pass_encoder_draw(render_pass, 3, 1, 0, 0) } + + + unsafe { canvas_c::webgpu::gpu_render_pass_encoder::canvas_native_webgpu_render_pass_encoder_end(render_pass) }; + + + let exe = unsafe { canvas_c::webgpu::gpu_command_encoder::canvas_native_webgpu_command_encoder_finish(command_encoder, std::ptr::null()) }; + + let command_buffers = vec![exe]; + + unsafe { canvas_c::webgpu::gpu_queue::canvas_native_webgpu_queue_submit(queue, command_buffers.as_ptr() as _, command_buffers.len()) }; + + + unsafe { canvas_c::webgpu::gpu_canvas_context::canvas_native_webgpu_context_present_surface(context, texture) } +} + +struct BlurSettings { + filterSize: u32, + iterations: u32, + blockDim: u32, +} +fn update_blur_settings(blur_settings: &mut BlurSettings, device: *const CanvasGPUDevice, buffer: *const CanvasGPUBuffer) { + let tile_dim = 128; + blur_settings.blockDim = tile_dim - blur_settings.filterSize - 1; + let queue = canvas_native_webgpu_device_get_queue(device); + let data = [blur_settings.filterSize, blur_settings.blockDim]; + unsafe { + canvas_c::webgpu::gpu_queue::canvas_native_webgpu_queue_write_buffer(queue, buffer, 0, data.as_ptr() as *const u8, data.len() * 4, 0, 0); + } + unsafe { canvas_native_webgpu_queue_release(queue) } +} + + +unsafe extern "C" fn handle_error(type_: CanvasGPUErrorType, msg: *mut c_char, user_data: *mut c_void) { + println!("uncap type {:?}:- {}", type_, CStr::from_ptr(msg).to_string_lossy()); +} + +unsafe fn webgpu_blur(data: *mut Data, window: AppKitWindowHandle) { + let di_3d = include_bytes!("./Di-3d.png"); + let blurWGSL = CString::new(include_str!("./blur.wgsl").to_string()).unwrap(); + let fullscreenTexturedQuadWGSL = CString::new(include_str!("./fullscreenTexturedQuad.wgsl").to_string()).unwrap(); + + let user_data = data as *mut c_void; + let data = unsafe { &mut *data }; + + let device = data.device.unwrap(); + + canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_set_uncaptured_error_callback(device, Some(handle_error), user_data); + + let instance = data.instance; + + let context = unsafe { + canvas_c::webgpu::gpu_canvas_context::canvas_native_webgpu_context_create_nsview( + instance, + window.ns_view.as_ptr(), + data.width, + data.height, + ) + }; + + let RENDER_ATTACHMENT = 1 << 4 as u32; + + let config = canvas_c::webgpu::gpu_canvas_context::CanvasGPUSurfaceConfiguration { alphaMode: canvas_c::webgpu::gpu_canvas_context::CanvasGPUSurfaceAlphaMode::PostMultiplied, usage: RENDER_ATTACHMENT, presentMode: canvas_c::webgpu::gpu_canvas_context::CanvasGPUPresentMode::Fifo, view_formats: std::ptr::null(), view_formats_size: 0 }; + + canvas_c::webgpu::gpu_canvas_context::canvas_native_webgpu_context_configure(context, device, &config); + + let layout = CanvasGPUPipelineLayoutOrGPUAutoLayoutMode::Auto(CanvasGPUAutoLayoutMode::Auto); + + let compute_module = canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_shader_module(device, ptr::null(), blurWGSL.as_ptr()); + + let compute = CanvasProgrammableStage { + module: compute_module, + entry_point: c"main".as_ptr(), + constants: ptr::null_mut(), + }; + + let blurPipeline = canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_compute_pipeline( + device, ptr::null_mut(), + layout, + &compute, + ); + + + let targets = [ + CanvasColorTargetState { + format: CanvasGPUTextureFormat::Bgra8Unorm, + blend: CanvasOptionalBlendState::None, + write_mask: 0xF, + } + ]; + + let render_fragment_module = canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_shader_module(device, ptr::null(), fullscreenTexturedQuadWGSL.as_ptr()); + + + let fragment = CanvasFragmentState { + targets: targets.as_ptr(), + targets_size: targets.len(), + module: render_fragment_module, + entry_point: c"frag_main".as_ptr(), + constants: ptr::null_mut(), + }; + + let vertex = CanvasVertexState { + module: render_fragment_module, + entry_point: c"vert_main".as_ptr(), + constants: ptr::null_mut(), + buffers: ptr::null_mut(), + buffers_size: 0, + }; + + let primitive = CanvasPrimitiveState { + topology: CanvasPrimitiveTopology::TriangleList, + strip_index_format: CanvasOptionalIndexFormat::None, + front_face: CanvasFrontFace::Ccw, + cull_mode: CanvasCullMode::None, + unclipped_depth: false, + }; + + let desc = CanvasCreateRenderPipelineDescriptor { + label: ptr::null_mut(), + layout: CanvasGPUPipelineLayoutOrGPUAutoLayoutMode::Auto(CanvasGPUAutoLayoutMode::Auto), + vertex: &vertex, + primitive: &primitive, + depth_stencil: ptr::null_mut(), + multisample: ptr::null_mut(), + fragment: &fragment, + }; + + let fullscreenQuadPipeline = canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_render_pipeline(device, &desc); + + let sampler_desc = CanvasCreateSamplerDescriptor { + label: ptr::null_mut(), + address_mode_u: CanvasAddressMode::ClampToEdge, + address_mode_v: CanvasAddressMode::ClampToEdge, + address_mode_w: CanvasAddressMode::ClampToEdge, + mag_filter: CanvasFilterMode::Linear, + min_filter: CanvasFilterMode::Linear, + mipmap_filter: CanvasFilterMode::Nearest, + lod_min_clamp: 0.0, + lod_max_clamp: 32f32, + compare: CanvasOptionalCompareFunction::None, + max_anisotropy: 1, + }; + + let sampler = canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_sampler(device, &sampler_desc); + + let image_bitmap = canvas_c::canvas_native_image_asset_create(); + canvas_c::canvas_native_image_asset_load_from_raw(image_bitmap, di_3d.as_ptr(), di_3d.len()); + + + let srcWidth = canvas_c::canvas_native_image_asset_width(image_bitmap); + let srcHeight = canvas_c::canvas_native_image_asset_height(image_bitmap); + + let mut texture_desc = CanvasCreateTextureDescriptor { + label: ptr::null_mut(), + dimension: CanvasTextureDimension::D2, + format: CanvasGPUTextureFormat::R8Unorm, + mipLevelCount: 1, + sampleCount: 1, + width: 0, + height: 1, + depthOrArrayLayers: 1, + usage: 0, + view_formats: ptr::null_mut(), + view_formats_size: 0, + }; + + texture_desc.width = srcWidth; + texture_desc.height = srcHeight; + texture_desc.format = CanvasGPUTextureFormat::Rgba8Unorm; + texture_desc.usage = CanvasGPUTextureUsageTextureBinding | CanvasGPUTextureUsageCopyDst | CanvasGPUTextureUsageRenderAttachment; + + let cubeTexture = canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_texture(device, &texture_desc); + + let queue = canvas_native_webgpu_device_get_queue(device); + + let source_buffer = canvas_c::canvas_native_image_asset_get_data(image_bitmap); + + let source_bytes = canvas_c::buffers::canvas_native_u8_buffer_get_bytes(source_buffer); + + let source_size = canvas_c::buffers::canvas_native_u8_buffer_get_length(source_buffer); + + let source = CanvasImageCopyExternalImage { + source: source_bytes, + source_size, + origin: CanvasOrigin2d { + x: 0, + y: 0, + }, + flip_y: false, + width: srcWidth, + height: srcHeight, + }; + + let destination = CanvasImageCopyTexture { + texture: cubeTexture, + origin: CanvasOrigin3d { + x: 0, + y: 0, + z: 0, + }, + aspect: CanvasTextureAspect::All, + mip_level: 0, + }; + + let ex = CanvasExtent3d { + width: srcWidth, + height: srcHeight, + depth_or_array_layers: 1, + }; + + canvas_c::webgpu::gpu_queue::canvas_native_webgpu_queue_copy_external_image_to_texture(queue, &source, &destination, &ex); + + let textures = [0, 1].into_iter() + .map(|_| { + let texture_desc = CanvasCreateTextureDescriptor { + label: ptr::null_mut(), + dimension: CanvasTextureDimension::D2, + format: CanvasGPUTextureFormat::Rgba8Unorm, + mipLevelCount: 1, + sampleCount: 1, + width: srcWidth, + height: srcHeight, + depthOrArrayLayers: 1, + usage: CanvasGPUTextureUsageTextureBinding | CanvasGPUTextureUsageCopyDst | CanvasGPUTextureUsageStorageBinding, + view_formats: ptr::null_mut(), + view_formats_size: 0, + }; + canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_texture(device, &texture_desc) + }).collect::>(); + + let buffer0 = { + let buffer = canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_buffer(device, ptr::null_mut(), 4, 0x0040, true); + let ptr = canvas_c::webgpu::gpu_buffer::canvas_native_webgpu_buffer_get_mapped_range(buffer, -1, -1); + let slice = std::slice::from_raw_parts_mut(ptr as *mut u32, 4); + slice[0] = 0; + canvas_c::webgpu::gpu_buffer::canvas_native_webgpu_buffer_unmap(buffer); + buffer + }; + + let buffer1 = { + let buffer = canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_buffer(device, ptr::null_mut(), 4, 0x0040, true); + let ptr = canvas_c::webgpu::gpu_buffer::canvas_native_webgpu_buffer_get_mapped_range(buffer, -1, -1); + let slice = std::slice::from_raw_parts_mut(ptr as *mut u32, 4); + slice[0] = 1; + canvas_c::webgpu::gpu_buffer::canvas_native_webgpu_buffer_unmap(buffer); + buffer + }; + + let blurParamsBuffer = canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_buffer(device, ptr::null_mut(), 8, 0x0008 | 0x0040, false); + + let compute_constants_layout = canvas_c::webgpu::gpu_compute_pipeline::canvas_native_webgpu_compute_pipeline_get_bind_group_layout(blurPipeline, 0); + + let compute_consts_entries = [ + CanvasBindGroupEntry { binding: 0, resource: CanvasBindGroupEntryResource::Sampler(sampler) }, + CanvasBindGroupEntry { + binding: 1, + resource: CanvasBindGroupEntryResource::Buffer(CanvasBufferBinding { + buffer: blurParamsBuffer, + offset: -1, + size: -1, + }), + } + ]; + + let computeConstants = canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_bind_group(device, ptr::null_mut(), compute_constants_layout, compute_consts_entries.as_ptr(), compute_consts_entries.len()); + + let compute_bind_group0_layout = canvas_c::webgpu::gpu_compute_pipeline::canvas_native_webgpu_compute_pipeline_get_bind_group_layout(blurPipeline, 1); + + let cube_texture_view = canvas_native_webgpu_texture_create_texture_view(cubeTexture, ptr::null()); + + let texture_0_texture_view = canvas_native_webgpu_texture_create_texture_view(textures[0], ptr::null()); + + let compute_bind_group0_entries = [ + CanvasBindGroupEntry { binding: 1, resource: CanvasBindGroupEntryResource::TextureView(cube_texture_view) }, + CanvasBindGroupEntry { binding: 2, resource: CanvasBindGroupEntryResource::TextureView(texture_0_texture_view) }, + CanvasBindGroupEntry { + binding: 3, + resource: CanvasBindGroupEntryResource::Buffer(CanvasBufferBinding { + buffer: buffer0, + offset: -1, + size: -1, + }), + } + ]; + + let computeBindGroup0 = canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_bind_group(device, ptr::null_mut(), compute_bind_group0_layout, compute_bind_group0_entries.as_ptr(), compute_bind_group0_entries.len()); + + let compute_bind_group1_layout = canvas_c::webgpu::gpu_compute_pipeline::canvas_native_webgpu_compute_pipeline_get_bind_group_layout(blurPipeline, 1); + + let texture_0_group1_texture_view = canvas_native_webgpu_texture_create_texture_view(textures[0], ptr::null()); + + let texture_1_group1_texture_view = canvas_native_webgpu_texture_create_texture_view(textures[1], ptr::null()); + + let compute_bind_group1_entries = [ + CanvasBindGroupEntry { binding: 1, resource: CanvasBindGroupEntryResource::TextureView(texture_0_group1_texture_view) }, + CanvasBindGroupEntry { binding: 2, resource: CanvasBindGroupEntryResource::TextureView(texture_1_group1_texture_view) }, + CanvasBindGroupEntry { + binding: 3, + resource: CanvasBindGroupEntryResource::Buffer(CanvasBufferBinding { + buffer: buffer1, + offset: -1, + size: -1, + }), + } + ]; + + let computeBindGroup1 = canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_bind_group(device, ptr::null_mut(), compute_bind_group1_layout, compute_bind_group1_entries.as_ptr(), compute_bind_group1_entries.len()); + + let compute_bind_group2_layout = canvas_c::webgpu::gpu_compute_pipeline::canvas_native_webgpu_compute_pipeline_get_bind_group_layout(blurPipeline, 1); + + let texture_0_group2_texture_view = canvas_native_webgpu_texture_create_texture_view(textures[0], ptr::null()); + + let texture_1_group2_texture_view = canvas_native_webgpu_texture_create_texture_view(textures[1], ptr::null()); + + let compute_bind_group2_entries = [ + CanvasBindGroupEntry { binding: 1, resource: CanvasBindGroupEntryResource::TextureView(texture_1_group2_texture_view) }, + CanvasBindGroupEntry { binding: 2, resource: CanvasBindGroupEntryResource::TextureView(texture_0_group2_texture_view) }, + CanvasBindGroupEntry { + binding: 3, + resource: CanvasBindGroupEntryResource::Buffer(CanvasBufferBinding { + buffer: buffer0, + offset: -1, + size: -1, + }), + } + ]; + + let computeBindGroup2 = canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_bind_group(device, ptr::null_mut(), compute_bind_group2_layout, compute_bind_group2_entries.as_ptr(), compute_bind_group2_entries.len()); + + let show_result_group_layout = canvas_c::webgpu::gpu_render_pipeline::canvas_native_webgpu_render_pipeline_get_bind_group_layout(fullscreenQuadPipeline, 0); + + let texture_1_result_group_texture_view = canvas_native_webgpu_texture_create_texture_view(textures[1], ptr::null()); + + let show_result_group_entries = [ + CanvasBindGroupEntry { binding: 0, resource: CanvasBindGroupEntryResource::Sampler(sampler) }, + CanvasBindGroupEntry { binding: 1, resource: CanvasBindGroupEntryResource::TextureView(texture_1_result_group_texture_view) }, + ]; + + let showResultBindGroup = canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_bind_group( + device, ptr::null_mut(), show_result_group_layout, show_result_group_entries.as_ptr(), show_result_group_entries.len(), + ); + + let mut settings = BlurSettings { + filterSize: 15, + iterations: 2, + blockDim: 0, + }; + + update_blur_settings(&mut settings, device, blurParamsBuffer); + + + let commandEncoder = canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_command_encoder(device, ptr::null()); + + let computePass = canvas_c::webgpu::gpu_command_encoder::canvas_native_webgpu_command_encoder_begin_compute_pass(commandEncoder, ptr::null(), ptr::null(), -1, -1); + + canvas_c::webgpu::gpu_compute_pass_encoder::canvas_native_webgpu_compute_pass_encoder_set_pipeline(computePass, blurPipeline); + + canvas_c::webgpu::gpu_compute_pass_encoder::canvas_native_webgpu_compute_pass_encoder_set_bind_group(computePass, 0, computeConstants, ptr::null(), 0, 0, 0); + + + let blockDim = settings.blockDim; + + let batch = [4, 4]; + + canvas_c::webgpu::gpu_compute_pass_encoder::canvas_native_webgpu_compute_pass_encoder_set_bind_group(computePass, 1, computeBindGroup0, ptr::null(), 0, 0, 0); + + canvas_c::webgpu::gpu_compute_pass_encoder::canvas_native_webgpu_compute_pass_encoder_dispatch_workgroups(computePass, srcWidth.div_ceil(blockDim), srcHeight.div_ceil(batch[1]), 1); + + canvas_c::webgpu::gpu_compute_pass_encoder::canvas_native_webgpu_compute_pass_encoder_set_bind_group(computePass, 1, computeBindGroup1, ptr::null(), 0, 0, 0); + + canvas_c::webgpu::gpu_compute_pass_encoder::canvas_native_webgpu_compute_pass_encoder_dispatch_workgroups(computePass, srcHeight.div_ceil(batch[1]), srcWidth.div_ceil(blockDim), 1); + + for i in 0..settings.iterations - 1 { + canvas_c::webgpu::gpu_compute_pass_encoder::canvas_native_webgpu_compute_pass_encoder_set_bind_group(computePass, 1, computeBindGroup2, ptr::null(), 0, 0, 0); + + canvas_c::webgpu::gpu_compute_pass_encoder::canvas_native_webgpu_compute_pass_encoder_dispatch_workgroups(computePass, srcWidth.div_ceil(blockDim), srcHeight.div_ceil(batch[1]), 1); + + + canvas_c::webgpu::gpu_compute_pass_encoder::canvas_native_webgpu_compute_pass_encoder_set_bind_group(computePass, 1, computeBindGroup1, ptr::null(), 0, 0, 0); + + canvas_c::webgpu::gpu_compute_pass_encoder::canvas_native_webgpu_compute_pass_encoder_dispatch_workgroups(computePass, srcHeight.div_ceil(batch[1]), srcWidth.div_ceil(blockDim), 1); + } + + canvas_c::webgpu::gpu_compute_pass_encoder::canvas_native_webgpu_compute_pass_encoder_end(computePass); + + + let texture = canvas_c::webgpu::gpu_canvas_context::canvas_native_webgpu_context_get_current_texture(context); + + let texture_view = canvas_native_webgpu_texture_create_texture_view(texture, ptr::null()); + + let colorAttachments = [ + CanvasRenderPassColorAttachment { + view: texture_view, + resolve_target: ptr::null(), + channel: CanvasPassChannelColor { + load_op: CanvasLoadOp::Clear, + store_op: CanvasStoreOp::Store, + clear_value: CanvasColor { + r: 0.0, + g: 0.0, + b: 0.0, + a: 1.0, + }, + read_only: false, + }, + } + ]; + + let passEncoder = canvas_c::webgpu::gpu_command_encoder::canvas_native_webgpu_command_encoder_begin_render_pass(commandEncoder, ptr::null(), colorAttachments.as_ptr(), colorAttachments.len(), ptr::null(), ptr::null(), ptr::null(), -1, -1); + + canvas_c::webgpu::gpu_render_pass_encoder::canvas_native_webgpu_render_pass_encoder_set_pipeline(passEncoder, fullscreenQuadPipeline); + + canvas_c::webgpu::gpu_render_pass_encoder::canvas_native_webgpu_render_pass_encoder_set_bind_group(passEncoder, 0, showResultBindGroup, ptr::null(), 0, 0, 0); + + canvas_c::webgpu::gpu_render_pass_encoder::canvas_native_webgpu_render_pass_encoder_draw(passEncoder, 6, 1, 0, 0); + + canvas_c::webgpu::gpu_render_pass_encoder::canvas_native_webgpu_render_pass_encoder_end(passEncoder); + + let command_buffers = [ + canvas_c::webgpu::gpu_command_encoder::canvas_native_webgpu_command_encoder_finish(commandEncoder, ptr::null()) + ]; + + canvas_c::webgpu::gpu_queue::canvas_native_webgpu_queue_submit(queue, command_buffers.as_ptr(), command_buffers.len()); + + + canvas_c::webgpu::gpu_canvas_context::canvas_native_webgpu_context_present_surface(context, texture); +} + fn main() { let event_loop = EventLoop::new().unwrap(); let window_builder = WindowBuilder::new(); @@ -771,154 +1308,21 @@ fn main() { Event::WindowEvent { event, .. } => { match event { WindowEvent::Resized(resized) => { - println!("Resized {:?}", resized); + let data_ = unsafe { &*data }; - let SHADERS = r#" - struct VertexOut { - @builtin(position) position : vec4f, - @location(0) color : vec4f - } - - @vertex - fn vertex_main(@location(0) position: vec4f, - @location(1) color: vec4f) -> VertexOut - { - var output : VertexOut; - output.position = position; - output.color = color; - return output; - } - - @fragment - fn fragment_main(fragData: VertexOut) -> @location(0) vec4f - { - return fragData.color; - } - "#; - - let source = CString::new(SHADERS).unwrap(); - - let data = unsafe { &mut *data }; - - let device = data.device.unwrap(); - - let module = canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_shader_module( - device, - std::ptr::null(), - source.as_ptr(), - ); - - - let instance = data.instance; - match data.window { + match data_.window { RawWindowHandle::AppKit(window) => { - let context = unsafe { - canvas_c::webgpu::gpu_canvas_context::canvas_native_webgpu_context_create_nsview( - instance, - window.ns_view.as_ptr(), - data.width, - data.height, - ) - }; - - let RENDER_ATTACHMENT = 1 << 4 as u32; - - let config = canvas_c::webgpu::gpu_canvas_context::CanvasGPUSurfaceConfiguration { alphaMode: canvas_c::webgpu::gpu_canvas_context::CanvasGPUSurfaceAlphaMode::PostMultiplied, usage: RENDER_ATTACHMENT, presentMode: canvas_c::webgpu::gpu_canvas_context::CanvasGPUPresentMode::Fifo, view_formats: std::ptr::null(), view_formats_size: 0 }; - - unsafe { canvas_c::webgpu::gpu_canvas_context::canvas_native_webgpu_context_configure(context, device, &config); } - - - let texture = canvas_c::webgpu::gpu_canvas_context::canvas_native_webgpu_context_get_current_texture(context); - - let desc = std::ptr::null() as _; - - let view = unsafe { canvas_c::webgpu::gpu_texture::canvas_native_webgpu_texture_create_texture_view(texture, desc) }; - - - let vertices: Vec = vec![0.0, 0.6, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, -0.5, -0.6, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.5, -0.6, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0]; - - - /* - - MAP_READ = 0x0001, - MAP_WRITE = 0x0002, - COPY_SRC = 0x0004, - COPY_DST = 0x0008, - INDEX = 0x0010, - VERTEX = 0x0020, - UNIFORM = 0x0040, - STORAGE = 0x0080, - INDIRECT = 0x0100, - QUERY_RESOLVE = 0x0200, - } - - */ - let usage: u32 = 0x0020 | 0x0008; - let buffer = canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_buffer(device, std::ptr::null(), vertices.len() as u64 * 4, usage, false); - - - let queue = canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_get_queue(device); - unsafe { canvas_c::webgpu::gpu_queue::canvas_native_webgpu_queue_write_buffer(queue, buffer, 0, vertices.as_ptr() as _, vertices.len() * 4, 0, -1) } - - let vertext_entry_point = CString::new("vertex_main").unwrap(); - - let vertex_attributes = vec![ - canvas_c::webgpu::structs::CanvasVertexAttribute { format: canvas_c::webgpu::enums::CanvasVertexFormat::Float32x4, offset: 0, shader_location: 0 }, - canvas_c::webgpu::structs::CanvasVertexAttribute { format: canvas_c::webgpu::enums::CanvasVertexFormat::Float32x4, offset: 16, shader_location: 1 }, - ]; - - let buffers = vec![canvas_c::webgpu::gpu_device::CanvasVertexBufferLayout { array_stride: 32, step_mode: canvas_c::webgpu::enums::CanvasVertexStepMode::Vertex, attributes: vertex_attributes.as_ptr(), attributes_size: vertex_attributes.len() }]; - let vertex = canvas_c::webgpu::gpu_device::CanvasVertexState { module: module, entry_point: vertext_entry_point.as_ptr(), constants: std::ptr::null(), buffers: buffers.as_ptr(), buffers_size: buffers.len() }; - - let primitive = canvas_c::webgpu::gpu_device::CanvasPrimitiveState { topology: canvas_c::webgpu::enums::CanvasPrimitiveTopology::TriangleList, strip_index_format: canvas_c::webgpu::enums::CanvasOptionalIndexFormat::None, front_face: canvas_c::webgpu::enums::CanvasFrontFace::Ccw, cull_mode: canvas_c::webgpu::enums::CanvasCullMode::None, unclipped_depth: false }; - - let fragment_entry_point = CString::new("fragment_main").unwrap(); - let fragment_targets = vec![canvas_c::webgpu::structs::CanvasColorTargetState { format: canvas_c::webgpu::enums::CanvasGPUTextureFormat::Bgra8Unorm, blend: canvas_c::webgpu::structs::CanvasOptionalBlendState::None, write_mask: 0xF }]; - let fragment = canvas_c::webgpu::gpu_device::CanvasFragmentState { targets: fragment_targets.as_ptr(), targets_size: fragment_targets.len(), module: module, entry_point: fragment_entry_point.as_ptr(), constants: std::ptr::null() }; - - let descriptor = canvas_c::webgpu::gpu_device::CanvasCreateRenderPipelineDescriptor { label: std::ptr::null(), layout: canvas_c::webgpu::gpu_device::CanvasGPUPipelineLayoutOrGPUAutoLayoutMode::Auto(canvas_c::webgpu::gpu_device::CanvasGPUAutoLayoutMode::Auto), vertex: &vertex, primitive: &primitive, depth_stencil: std::ptr::null(), multisample: std::ptr::null(), fragment: &fragment }; - let pipeline = unsafe { canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_render_pipeline(device, &descriptor) }; - - let command_encoder = canvas_c::webgpu::gpu_device::canvas_native_webgpu_device_create_command_encoder(device, std::ptr::null()); - - let color_attachments = vec![canvas_c::webgpu::structs::CanvasRenderPassColorAttachment { view: view, resolve_target: std::ptr::null() as _, channel: canvas_c::webgpu::structs::CanvasPassChannelColor { load_op: canvas_c::webgpu::structs::CanvasLoadOp::Clear, store_op: canvas_c::webgpu::structs::CanvasStoreOp::Store, clear_value: canvas_c::webgpu::structs::CanvasColor { r: 0., g: 0.5, b: 1., a: 1. }, read_only: false } }]; - - let render_pass = unsafe { canvas_c::webgpu::gpu_command_encoder::canvas_native_webgpu_command_encoder_begin_render_pass(command_encoder, std::ptr::null(), color_attachments.as_ptr(), color_attachments.len(), std::ptr::null(), std::ptr::null(), std::ptr::null(), -1, -1) }; - - unsafe { canvas_c::webgpu::gpu_render_pass_encoder::canvas_native_webgpu_render_pass_encoder_set_pipeline(render_pass, pipeline) } - - - unsafe { canvas_c::webgpu::gpu_render_pass_encoder::canvas_native_webgpu_render_pass_encoder_set_vertex_buffer(render_pass, 0, buffer, 0, -1) } - - - unsafe { canvas_c::webgpu::gpu_render_pass_encoder::canvas_native_webgpu_render_pass_encoder_draw(render_pass, 3, 1, 0, 0) } - - - unsafe { canvas_c::webgpu::gpu_render_pass_encoder::canvas_native_webgpu_render_pass_encoder_end(render_pass) }; - - - // unsafe { - // canvas_c::webgpu::gpu_render_pass_encoder::canvas_native_webgpu_render_pass_encoder_release(render_pass); - // } - - - let exe = unsafe { canvas_c::webgpu::gpu_command_encoder::canvas_native_webgpu_command_encoder_finish(command_encoder, std::ptr::null()) }; - - let command_buffers = vec![exe]; - - unsafe { canvas_c::webgpu::gpu_queue::canvas_native_webgpu_queue_submit(queue, command_buffers.as_ptr() as _, command_buffers.len()) }; - - - unsafe { canvas_c::webgpu::gpu_canvas_context::canvas_native_webgpu_context_present_surface(context, texture) } + println!("Resized {:?}", resized); + // webgpu_triangle(data, window); + unsafe { webgpu_blur(data, window); } + } + _ => {} + } - println!("finish {:?}", exe); - } - _ => todo!(), - } /* canvas_webgl::webgl::canvas_native_webgl_viewport( 0, diff --git a/package.json b/package.json index bbeca0936..3f10294eb 100644 --- a/package.json +++ b/package.json @@ -60,9 +60,9 @@ "phaser": "^3.55.2", "phaser-ce": "^2.20.0", "pixi-filters": "~5.3.0", + "pixi-viewport": "^5.0.2", "pixi.js": "~7.3.1", "pixi.js-legacy": "~7.3.1", - "pixi-viewport": "^5.0.2", "playcanvas": "^1.66.1", "query-selector": "2.0.0", "react-nativescript": "^4.0.0", @@ -73,6 +73,7 @@ "typescript": "~4.8.0", "util": "~0.12.5", "vexflow": "^4.2.3", + "wgpu-matrix": "^3.0.1", "zen-3d": "0.0.3", "zone.js": "~0.13.0" }, diff --git a/packages/canvas-media/platforms/android/canvas_media.aar b/packages/canvas-media/platforms/android/canvas_media.aar index 1568ace76..1c25b22cb 100644 Binary files a/packages/canvas-media/platforms/android/canvas_media.aar and b/packages/canvas-media/platforms/android/canvas_media.aar differ diff --git a/packages/canvas-polyfill/platforms/android/canvas_polyfill.aar b/packages/canvas-polyfill/platforms/android/canvas_polyfill.aar index fb01dc54e..f6e081d36 100644 Binary files a/packages/canvas-polyfill/platforms/android/canvas_polyfill.aar and b/packages/canvas-polyfill/platforms/android/canvas_polyfill.aar differ diff --git a/packages/canvas/Canvas/index.d.ts b/packages/canvas/Canvas/index.d.ts index d067f01d1..719ef0337 100644 --- a/packages/canvas/Canvas/index.d.ts +++ b/packages/canvas/Canvas/index.d.ts @@ -3,6 +3,7 @@ import {CanvasBase} from './common'; import {CanvasRenderingContext2D} from '../Canvas2D/CanvasRenderingContext2D'; import {WebGLRenderingContext} from '../WebGL/WebGLRenderingContext'; import {WebGL2RenderingContext} from '../WebGL2/WebGL2RenderingContext'; +import { GPUCanvasContext } from '../WebGPU'; export declare function createSVGMatrix(): DOMMatrix; @@ -50,7 +51,9 @@ export declare class Canvas extends CanvasBase { getContext(type: 'webgl2', options?: any): WebGL2RenderingContext | null; - getContext(type: string, options?: any): CanvasRenderingContext2D | WebGLRenderingContext | WebGL2RenderingContext | null; + getContext(type: 'webgpu', options?: any): GPUCanvasContext | null; + + getContext(type: string, options?: any): CanvasRenderingContext2D | WebGLRenderingContext | WebGL2RenderingContext | GPUCanvasContext | null; getBoundingClientRect(): { x: number; diff --git a/packages/canvas/Canvas/index.ios.ts b/packages/canvas/Canvas/index.ios.ts index d5a2df1b4..1f7c0f0b3 100644 --- a/packages/canvas/Canvas/index.ios.ts +++ b/packages/canvas/Canvas/index.ios.ts @@ -7,8 +7,6 @@ import { ImageSource, Utils, profile, Screen, PercentLength } from '@nativescrip import { GPUCanvasContext } from '../WebGPU'; declare var NSCCanvas, NSCCanvasListener; -export * from './common'; - export function createSVGMatrix(): DOMMatrix { return new DOMMatrix(); } diff --git a/packages/canvas/WebGPU/GPUCanvasContext.ts b/packages/canvas/WebGPU/GPUCanvasContext.ts index 02d6cf609..64cb57888 100644 --- a/packages/canvas/WebGPU/GPUCanvasContext.ts +++ b/packages/canvas/WebGPU/GPUCanvasContext.ts @@ -1,9 +1,9 @@ import { Helpers } from '../helpers'; import { contextPtr_, native_ } from './Constants'; -import { GPUDevice } from './GPUDevice'; +import type { GPUDevice } from './GPUDevice'; import { GPUTexture } from './GPUTexture'; -import { GPUAdapter } from './GPUAdapter'; -import { GPUTextureFormat } from './Types'; +import type { GPUAdapter } from './GPUAdapter'; +import type { GPUTextureFormat } from './Types'; export class GPUCanvasContext { _type; static { @@ -41,7 +41,7 @@ export class GPUCanvasContext { return this[native_]; } - configure(options: { device: GPUDevice; format: any; usage?: number /* default=0x10 - GPUTextureUsage.RENDER_ATTACHMENT */; viewFormats?: number[] /* default=[] */; colorSpace?: 'display-p3' | 'srgb' /* default="srgb" */; alphaMode?: 'opaque' | 'premultiplied' }) { + configure(options: { device: GPUDevice; format: any; usage?: number /* default=0x10 - GPUTextureUsage.RENDER_ATTACHMENT */; viewFormats?: number[] /* default=[] */; colorSpace?: 'display-p3' | 'srgb' /* default="srgb" */; alphaMode?: 'opaque' | 'premultiplied' | 'postmultiplied' | 'inherit'; presentModes?: 'autoVsync' | 'autoNoVsync' | 'fifo' | 'fifoRelaxed' | 'immediate' | 'mailbox' }) { const opts = { usage: global.GPUTextureUsage.RENDER_ATTACHMENT, colorSpace: 'srgb', @@ -67,7 +67,7 @@ export class GPUCanvasContext { return null; } - presentSurface(texture) { + presentSurface(texture: GPUTexture) { this[native_].presentSurface(texture?.[native_]); } diff --git a/packages/canvas/WebGPU/GPUDevice.ts b/packages/canvas/WebGPU/GPUDevice.ts index 6f48b1076..30b919323 100644 --- a/packages/canvas/WebGPU/GPUDevice.ts +++ b/packages/canvas/WebGPU/GPUDevice.ts @@ -14,8 +14,8 @@ import { GPUBindGroupLayout } from './GPUBindGroupLayout'; import { GPUTextureView } from './GPUTextureView'; import { GPUSampler } from './GPUSampler'; import { GPUExternalTexture } from './GPUExternalTexture'; -import { GPUAddressMode, GPUCompareFunction, GPUErrorFilter, GPUFilterMode, GPUMipmapFilterMode, GPUQueryType, GPUTextureFormat, GPUTextureSampleType, GPUTextureViewDimension } from './Types'; -import { GPUDepthStencilState, GPUExternalTextureBindingLayout, GPUFragmentState, GPUMultisampleState, GPUPrimitiveState, GPUProgrammableStage, GPUVertexState } from './Interfaces'; +import type { GPUAddressMode, GPUCompareFunction, GPUErrorFilter, GPUFilterMode, GPUMipmapFilterMode, GPUQueryType, GPUTextureFormat, GPUTextureSampleType, GPUTextureViewDimension } from './Types'; +import type { GPUDepthStencilState, GPUExternalTextureBindingLayout, GPUFragmentState, GPUMultisampleState, GPUPrimitiveState, GPUProgrammableStage, GPUVertexState } from './Interfaces'; import { GPUComputePipeline } from './GPUComputePipeline'; import { GPUQuerySet } from './GPUQuerySet'; import { GPURenderBundleEncoder } from './GPURenderBundleEncoder'; @@ -151,6 +151,7 @@ export class GPUDevice extends EventTarget { } return null; } + get lost() { if (!this._lostPromise) { this._lostPromise = new Promise((resolve, reject) => { @@ -444,12 +445,7 @@ export class GPUDevice extends EventTarget { depthOrArrayLayers: sizeIsArray ? descriptor.size[2] ?? 1 : (descriptor.size)?.depthOrArrayLayers ?? 1, }; - const texture = this.native.createTexture(opts); - - if (texture) { - return GPUTexture.fromNative(texture); - } - return undefined; + return GPUTexture.fromNative(this.native.createTexture(opts)); } popErrorScope() { @@ -482,7 +478,7 @@ export class GPUDevice extends EventTarget { this.native.pushErrorScope(filter); } - private _queue; + private _queue: GPUQueue; get queue() { if (!this._queue) { this._queue = GPUQueue.fromNative(this[native_].queue); diff --git a/packages/canvas/WebGPU/GPUQueue.ts b/packages/canvas/WebGPU/GPUQueue.ts index cfc097abb..f2b692659 100644 --- a/packages/canvas/WebGPU/GPUQueue.ts +++ b/packages/canvas/WebGPU/GPUQueue.ts @@ -23,6 +23,8 @@ export class GPUQueue { source.source = (source.source as any).native; } else if (source.source instanceof ImageData) { source.source = (source.source as any).native; + } else if (source.source instanceof ImageAsset) { + source.source = source.source.native; } else if (typeof source.source.tagName === 'string' && (source.source.tagName === 'IMG' || source.source.tagName === 'IMAGE')) { if (source.source._asset instanceof ImageAsset) { source.source = source.source._asset.native; @@ -59,9 +61,13 @@ export class GPUQueue { }); } - writeBuffer(buffer: GPUBuffer, bufferOffset: number, data: Uint8Array | Array, dataOffset: number, size?: number) { + writeBuffer(buffer: GPUBuffer, bufferOffset: number, data: BufferSource | Array, dataOffset?: number, size?: number) { if (Array.isArray(data)) { data = new Uint8Array(data); + } else if (ArrayBuffer.isView(data)) { + data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + } else if ((data as any) instanceof ArrayBuffer) { + data = new Uint8Array(data); } this[native_].writeBuffer(buffer?.[native_], bufferOffset ?? 0, data, dataOffset ?? 0, size ?? -1); diff --git a/packages/canvas/WebGPU/GPUTexture.ts b/packages/canvas/WebGPU/GPUTexture.ts index 6f0d6cb0f..241a09f6a 100644 --- a/packages/canvas/WebGPU/GPUTexture.ts +++ b/packages/canvas/WebGPU/GPUTexture.ts @@ -1,5 +1,6 @@ import { native_ } from './Constants'; import { GPUTextureView } from './GPUTextureView'; +import type { GPUTextureViewDescriptor } from './Interfaces'; export class GPUTexture { [native_]; @@ -37,7 +38,7 @@ export class GPUTexture { return null; } - createView(desc?) { + createView(desc?: GPUTextureViewDescriptor) { const view = this[native_].createView(desc); return GPUTextureView.fromNative(view); } diff --git a/packages/canvas/WebGPU/Interfaces.ts b/packages/canvas/WebGPU/Interfaces.ts index 93766c6c7..6a614a873 100644 --- a/packages/canvas/WebGPU/Interfaces.ts +++ b/packages/canvas/WebGPU/Interfaces.ts @@ -3,7 +3,7 @@ import type { GPUQuerySet } from './GPUQuerySet'; import type { GPUShaderModule } from './GPUShaderModule'; import type { GPUTexture } from './GPUTexture'; import type { GPUTextureView } from './GPUTextureView'; -import { GPUBlendFactor, GPUBlendOperation, GPUColor, GPUCompareFunction, GPUCullMode, GPUFrontFace, GPUIndexFormat, GPULoadOp, GPUOrigin2D, GPUOrigin3D, GPUPrimitiveTopology, GPUStencilOperation, GPUStoreOp, GPUTextureAspect, GPUTextureFormat, GPUVertexFormat, GPUVertexStepMode } from './Types'; +import type { GPUBlendFactor, GPUBlendOperation, GPUColor, GPUCompareFunction, GPUCullMode, GPUFrontFace, GPUIndexFormat, GPULoadOp, GPUOrigin2D, GPUOrigin3D, GPUPrimitiveTopology, GPUStencilOperation, GPUStoreOp, GPUTextureAspect, GPUTextureFormat, GPUTextureViewDimension, GPUVertexFormat, GPUVertexStepMode } from './Types'; export interface GPUExternalTextureBindingLayout {} export interface GPUProgrammableStage { @@ -163,3 +163,14 @@ export interface GPUImageDataLayout { offset?: number; rowsPerImage?: number; } + +export interface GPUTextureViewDescriptor { + arrayLayerCount?: number; + aspect?: GPUTextureAspect; + baseArrayLayer?: number; + baseMipLevel?: number; + dimension: GPUTextureViewDimension; + format?: GPUTextureFormat; + label?: string; + mipLevelCount?: number; +} diff --git a/packages/canvas/WebGPU/Types.ts b/packages/canvas/WebGPU/Types.ts index de7b5494c..89118a273 100644 --- a/packages/canvas/WebGPU/Types.ts +++ b/packages/canvas/WebGPU/Types.ts @@ -1,7 +1,7 @@ import { GPUColorDict } from './Interfaces'; // export type GPUImageCopyExternalImageSource = ImageBitmap | ImageData | HTMLImageElement | HTMLVideoElement | VideoFrame | HTMLCanvasElement | OffscreenCanvas; export type GPUOrigin2D = [number, number] | { x?: number; y?: number }; -export type GPUExtent3D = [number, number, number] | { depthOrArrayLayers?: number; height?: number; width: number }; +export type GPUExtent3D = [number, number, number] | [number, number] | { depthOrArrayLayers?: number; height?: number; width: number }; export type GPUOrigin3D = [number, number, number] | { x: number; y: number; z: number }; export type GPUTextureAspect = 'all' | 'stencil-only' | 'depth-only'; export type GPULoadOp = 'load' | 'clear'; diff --git a/packages/canvas/WebGPU/index.ts b/packages/canvas/WebGPU/index.ts index 82b348568..f5ee2a4d3 100644 --- a/packages/canvas/WebGPU/index.ts +++ b/packages/canvas/WebGPU/index.ts @@ -1,4 +1,8 @@ export * from './GPU'; export * from './GPUCanvasContext'; export * from './GPUDevice'; -export * from './Errors'; \ No newline at end of file +export * from './Errors'; +export * from './GPUTexture'; + +export * from './GPUQuerySet'; +export { GPUBufferUsage, GPUMapMode, GPUTextureUsage } from './Constants'; diff --git a/packages/canvas/platforms/android/canvas-release.aar b/packages/canvas/platforms/android/canvas-release.aar index 7539066bc..b00bb354e 100644 Binary files a/packages/canvas/platforms/android/canvas-release.aar and b/packages/canvas/platforms/android/canvas-release.aar differ diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/CanvasNative b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/CanvasNative index 0d4f9888b..5c0725713 100755 Binary files a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/CanvasNative and b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/CanvasNative differ diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/canvas_native.h b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/canvas_native.h index 22391179f..7780cf624 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/canvas_native.h +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/canvas_native.h @@ -8,6 +8,16 @@ #include #include +#define CanvasGPUTextureUsageCopySrc (1 << 0) + +#define CanvasGPUTextureUsageCopyDst (1 << 1) + +#define CanvasGPUTextureUsageTextureBinding (1 << 2) + +#define CanvasGPUTextureUsageStorageBinding (1 << 3) + +#define CanvasGPUTextureUsageRenderAttachment (1 << 4) + typedef enum CanvasAddressMode { /** * Clamp the value to the edge of the texture @@ -1731,20 +1741,6 @@ typedef struct CanvasSurfaceCapabilities { uint32_t usages; } CanvasSurfaceCapabilities; -typedef enum CanvasOptionsGPUTextureFormat_Tag { - CanvasOptionsGPUTextureFormatNone, - CanvasOptionsGPUTextureFormatSome, -} CanvasOptionsGPUTextureFormat_Tag; - -typedef struct CanvasOptionsGPUTextureFormat { - CanvasOptionsGPUTextureFormat_Tag tag; - union { - struct { - struct CanvasGPUTextureFormat some; - }; - }; -} CanvasOptionsGPUTextureFormat; - typedef struct CanvasImageSubresourceRange { enum CanvasTextureAspect aspect; uint32_t base_mip_level; @@ -1754,9 +1750,8 @@ typedef struct CanvasImageSubresourceRange { } CanvasImageSubresourceRange; typedef struct CanvasCreateTextureViewDescriptor { - const struct CanvasGPUTexture *texture; const char *label; - struct CanvasOptionsGPUTextureFormat format; + struct CanvasOptionalGPUTextureFormat format; enum CanvasOptionalTextureViewDimension dimension; const struct CanvasImageSubresourceRange *range; } CanvasCreateTextureViewDescriptor; diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative index 6b51640a3..031f56014 100644 Binary files a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative and b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative differ diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml index 526203e38..c66f2f834 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml @@ -2,606 +2,606 @@ triple: 'arm64-apple-darwin' binary-path: '/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/dist/Release-iphoneos/CanvasNative.framework/CanvasNative' relocations: - - { offsetInCU: 0x34, offset: 0x7794A, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionString, symObjAddr: 0x0, symBinAddr: 0x971000, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x7797F, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionNumber, symObjAddr: 0x38, symBinAddr: 0x971038, symSize: 0x0 } - - { offsetInCU: 0x3F, offset: 0x779D4, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x28, symBinAddr: 0x4028, symSize: 0xC } - - { offsetInCU: 0x53, offset: 0x779E8, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x34, symBinAddr: 0x4034, symSize: 0x4 } - - { offsetInCU: 0x67, offset: 0x779FC, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x38, symBinAddr: 0x4038, symSize: 0x20 } - - { offsetInCU: 0x7B, offset: 0x77A10, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x58, symBinAddr: 0x4058, symSize: 0x28 } - - { offsetInCU: 0x8F, offset: 0x77A24, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwCP', symObjAddr: 0x94, symBinAddr: 0x4094, symSize: 0x30 } - - { offsetInCU: 0xA3, offset: 0x77A38, size: 0x8, addend: 0x0, symName: ___swift_memcpy32_8, symObjAddr: 0xC4, symBinAddr: 0x40C4, symSize: 0xC } - - { offsetInCU: 0xB7, offset: 0x77A4C, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwet', symObjAddr: 0xD0, symBinAddr: 0x40D0, symSize: 0x20 } - - { offsetInCU: 0xCB, offset: 0x77A60, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwst', symObjAddr: 0xF0, symBinAddr: 0x40F0, symSize: 0x2C } - - { offsetInCU: 0x4F, offset: 0x77C49, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC11_WriteQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2AE8, symBinAddr: 0x116E7E0, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x77C63, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10_ReadQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2AF0, symBinAddr: 0x116E7E8, symSize: 0x0 } - - { offsetInCU: 0x9D, offset: 0x77C97, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTo', symObjAddr: 0x4, symBinAddr: 0x4194, symSize: 0x38 } - - { offsetInCU: 0xF3, offset: 0x77CED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x40, symBinAddr: 0x41D0, symSize: 0x70 } - - { offsetInCU: 0x144, offset: 0x77D3E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0xB4, symBinAddr: 0x4244, symSize: 0x44 } - - { offsetInCU: 0x19F, offset: 0x77D99, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0xFC, symBinAddr: 0x428C, symSize: 0x50 } - - { offsetInCU: 0x204, offset: 0x77DFE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0x150, symBinAddr: 0x42E0, symSize: 0x68 } - - { offsetInCU: 0x27D, offset: 0x77E77, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x1BC, symBinAddr: 0x434C, symSize: 0x98 } - - { offsetInCU: 0x2DA, offset: 0x77ED4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x258, symBinAddr: 0x43E8, symSize: 0x14 } - - { offsetInCU: 0x35C, offset: 0x77F56, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x270, symBinAddr: 0x4400, symSize: 0x14 } - - { offsetInCU: 0x40B, offset: 0x78005, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZTo', symObjAddr: 0x2C8, symBinAddr: 0x4458, symSize: 0x50 } - - { offsetInCU: 0x4DC, offset: 0x780D6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZTo', symObjAddr: 0x364, symBinAddr: 0x44F4, symSize: 0x58 } - - { offsetInCU: 0x5B6, offset: 0x781B0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZTo', symObjAddr: 0x404, symBinAddr: 0x4594, symSize: 0x58 } - - { offsetInCU: 0x695, offset: 0x7828F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZTo', symObjAddr: 0x4AC, symBinAddr: 0x463C, symSize: 0x60 } - - { offsetInCU: 0x741, offset: 0x7833B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZTo', symObjAddr: 0x510, symBinAddr: 0x46A0, symSize: 0x8 } - - { offsetInCU: 0x7AA, offset: 0x783A4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZTo', symObjAddr: 0x51C, symBinAddr: 0x46AC, symSize: 0x8 } - - { offsetInCU: 0x801, offset: 0x783FB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZTo', symObjAddr: 0x538, symBinAddr: 0x46C8, symSize: 0x8 } - - { offsetInCU: 0x858, offset: 0x78452, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZTo', symObjAddr: 0x544, symBinAddr: 0x46D4, symSize: 0x8 } - - { offsetInCU: 0x8AF, offset: 0x784A9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZTo', symObjAddr: 0x550, symBinAddr: 0x46E0, symSize: 0x8 } - - { offsetInCU: 0x906, offset: 0x78500, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZTo', symObjAddr: 0x55C, symBinAddr: 0x46EC, symSize: 0x8 } - - { offsetInCU: 0x985, offset: 0x7857F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZTo', symObjAddr: 0x56C, symBinAddr: 0x46FC, symSize: 0x24 } - - { offsetInCU: 0xA36, offset: 0x78630, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZTo', symObjAddr: 0x594, symBinAddr: 0x4724, symSize: 0x14 } - - { offsetInCU: 0xAA9, offset: 0x786A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZTo', symObjAddr: 0x5AC, symBinAddr: 0x473C, symSize: 0x8 } - - { offsetInCU: 0xB00, offset: 0x786FA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZTo', symObjAddr: 0x60C, symBinAddr: 0x479C, symSize: 0x74 } - - { offsetInCU: 0xB8B, offset: 0x78785, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTo', symObjAddr: 0x814, symBinAddr: 0x49A4, symSize: 0xA0 } - - { offsetInCU: 0xBDC, offset: 0x787D6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZTo', symObjAddr: 0xB1C, symBinAddr: 0x4CAC, symSize: 0x98 } - - { offsetInCU: 0xC2D, offset: 0x78827, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZTo', symObjAddr: 0xE70, symBinAddr: 0x5000, symSize: 0x98 } - - { offsetInCU: 0xC89, offset: 0x78883, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTo', symObjAddr: 0x1298, symBinAddr: 0x5428, symSize: 0xD8 } - - { offsetInCU: 0xCD1, offset: 0x788CB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTo', symObjAddr: 0x1374, symBinAddr: 0x5504, symSize: 0x34 } - - { offsetInCU: 0xD31, offset: 0x7892B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfcTo', symObjAddr: 0x13F8, symBinAddr: 0x5588, symSize: 0x3C } - - { offsetInCU: 0xD82, offset: 0x7897C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTf4nd_n', symObjAddr: 0x1468, symBinAddr: 0x55F8, symSize: 0x2AC } - - { offsetInCU: 0xFB6, offset: 0x78BB0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTf4nnnd_n', symObjAddr: 0x1714, symBinAddr: 0x58A4, symSize: 0x264 } - - { offsetInCU: 0x11B0, offset: 0x78DAA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTf4nnd_n', symObjAddr: 0x1978, symBinAddr: 0x5B08, symSize: 0xEC } - - { offsetInCU: 0x12AD, offset: 0x78EA7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTf4nnnnd_n', symObjAddr: 0x1A64, symBinAddr: 0x5BF4, symSize: 0x1B4 } - - { offsetInCU: 0x1422, offset: 0x7901C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTf4nnnnnnd_n', symObjAddr: 0x1C18, symBinAddr: 0x5DA8, symSize: 0x1CC } - - { offsetInCU: 0x15B7, offset: 0x791B1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTf4nnnnnnnnnnd_n', symObjAddr: 0x1DE4, symBinAddr: 0x5F74, symSize: 0x1E0 } - - { offsetInCU: 0x17A3, offset: 0x7939D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTf4nnnd_n', symObjAddr: 0x1FC4, symBinAddr: 0x6154, symSize: 0x1B4 } - - { offsetInCU: 0x186D, offset: 0x79467, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTf4nnnnd_n', symObjAddr: 0x231C, symBinAddr: 0x64AC, symSize: 0x1D4 } - - { offsetInCU: 0x194E, offset: 0x79548, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTf4d_n', symObjAddr: 0x24F0, symBinAddr: 0x6680, symSize: 0x114 } - - { offsetInCU: 0x19F9, offset: 0x795F3, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TR', symObjAddr: 0x8B4, symBinAddr: 0x4A44, symSize: 0x78 } - - { offsetInCU: 0x1A11, offset: 0x7960B, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TR', symObjAddr: 0xBB4, symBinAddr: 0x4D44, symSize: 0x54 } - - { offsetInCU: 0x1A7E, offset: 0x79678, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfETo', symObjAddr: 0x1464, symBinAddr: 0x55F4, symSize: 0x4 } - - { offsetInCU: 0x1B09, offset: 0x79703, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCMa', symObjAddr: 0x2604, symBinAddr: 0x6794, symSize: 0x20 } - - { offsetInCU: 0x1B1D, offset: 0x79717, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TRTA', symObjAddr: 0x2648, symBinAddr: 0x67D8, symSize: 0x8 } - - { offsetInCU: 0x1B3C, offset: 0x79736, size: 0x8, addend: 0x0, symName: '_$sSo7NSErrorCSg10ObjectiveC8ObjCBoolVIeyByy_ACSbIeggy_TRTA', symObjAddr: 0x2650, symBinAddr: 0x67E0, symSize: 0x18 } - - { offsetInCU: 0x1B65, offset: 0x7975F, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TRTA', symObjAddr: 0x2668, symBinAddr: 0x67F8, symSize: 0x8 } - - { offsetInCU: 0x1B79, offset: 0x79773, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCMa', symObjAddr: 0x2670, symBinAddr: 0x6800, symSize: 0x3C } - - { offsetInCU: 0x1B8D, offset: 0x79787, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_TA', symObjAddr: 0x26F0, symBinAddr: 0x6880, symSize: 0x34 } - - { offsetInCU: 0x1BA1, offset: 0x7979B, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x2724, symBinAddr: 0x68B4, symSize: 0x10 } - - { offsetInCU: 0x1BB5, offset: 0x797AF, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x2734, symBinAddr: 0x68C4, symSize: 0x8 } - - { offsetInCU: 0x1BC9, offset: 0x797C3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2760, symBinAddr: 0x68F0, symSize: 0x40 } - - { offsetInCU: 0x1BFD, offset: 0x797F7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x27E4, symBinAddr: 0x6974, symSize: 0x40 } - - { offsetInCU: 0x1C3B, offset: 0x79835, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2824, symBinAddr: 0x69B4, symSize: 0x28 } - - { offsetInCU: 0x1C6F, offset: 0x79869, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x28A4, symBinAddr: 0x6A34, symSize: 0x3C } - - { offsetInCU: 0x1CA3, offset: 0x7989D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x290C, symBinAddr: 0x6A9C, symSize: 0x30 } - - { offsetInCU: 0x1CDF, offset: 0x798D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_TA', symObjAddr: 0x2978, symBinAddr: 0x6B08, symSize: 0x10 } - - { offsetInCU: 0x1CF3, offset: 0x798ED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2988, symBinAddr: 0x6B18, symSize: 0x40 } - - { offsetInCU: 0x21C0, offset: 0x79DBA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZ', symObjAddr: 0x0, symBinAddr: 0x4190, symSize: 0x4 } - - { offsetInCU: 0x21DB, offset: 0x79DD5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x3C, symBinAddr: 0x41CC, symSize: 0x4 } - - { offsetInCU: 0x21F6, offset: 0x79DF0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0xB0, symBinAddr: 0x4240, symSize: 0x4 } - - { offsetInCU: 0x2217, offset: 0x79E11, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0xF8, symBinAddr: 0x4288, symSize: 0x4 } - - { offsetInCU: 0x2232, offset: 0x79E2C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0x14C, symBinAddr: 0x42DC, symSize: 0x4 } - - { offsetInCU: 0x224D, offset: 0x79E47, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x1B8, symBinAddr: 0x4348, symSize: 0x4 } - - { offsetInCU: 0x2268, offset: 0x79E62, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x254, symBinAddr: 0x43E4, symSize: 0x4 } - - { offsetInCU: 0x22F6, offset: 0x79EF0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x26C, symBinAddr: 0x43FC, symSize: 0x4 } - - { offsetInCU: 0x2375, offset: 0x79F6F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZ', symObjAddr: 0x284, symBinAddr: 0x4414, symSize: 0x44 } - - { offsetInCU: 0x24B3, offset: 0x7A0AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZ', symObjAddr: 0x318, symBinAddr: 0x44A8, symSize: 0x4C } - - { offsetInCU: 0x25FC, offset: 0x7A1F6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZ', symObjAddr: 0x3BC, symBinAddr: 0x454C, symSize: 0x48 } - - { offsetInCU: 0x2744, offset: 0x7A33E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZ', symObjAddr: 0x45C, symBinAddr: 0x45EC, symSize: 0x50 } - - { offsetInCU: 0x28A1, offset: 0x7A49B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZ', symObjAddr: 0x50C, symBinAddr: 0x469C, symSize: 0x4 } - - { offsetInCU: 0x2913, offset: 0x7A50D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZ', symObjAddr: 0x518, symBinAddr: 0x46A8, symSize: 0x4 } - - { offsetInCU: 0x2956, offset: 0x7A550, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZ', symObjAddr: 0x524, symBinAddr: 0x46B4, symSize: 0x14 } - - { offsetInCU: 0x299B, offset: 0x7A595, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZ', symObjAddr: 0x540, symBinAddr: 0x46D0, symSize: 0x4 } - - { offsetInCU: 0x29DE, offset: 0x7A5D8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZ', symObjAddr: 0x54C, symBinAddr: 0x46DC, symSize: 0x4 } - - { offsetInCU: 0x2A21, offset: 0x7A61B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZ', symObjAddr: 0x558, symBinAddr: 0x46E8, symSize: 0x4 } - - { offsetInCU: 0x2A64, offset: 0x7A65E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZ', symObjAddr: 0x564, symBinAddr: 0x46F4, symSize: 0x8 } - - { offsetInCU: 0x2B4B, offset: 0x7A745, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ', symObjAddr: 0x590, symBinAddr: 0x4720, symSize: 0x4 } - - { offsetInCU: 0x2BCA, offset: 0x7A7C4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZ', symObjAddr: 0x5A8, symBinAddr: 0x4738, symSize: 0x4 } - - { offsetInCU: 0x2C0D, offset: 0x7A807, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZ', symObjAddr: 0x5B4, symBinAddr: 0x4744, symSize: 0x58 } - - { offsetInCU: 0x2CCE, offset: 0x7A8C8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZ', symObjAddr: 0x680, symBinAddr: 0x4810, symSize: 0x4 } - - { offsetInCU: 0x2CE2, offset: 0x7A8DC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_', symObjAddr: 0x684, symBinAddr: 0x4814, symSize: 0x190 } - - { offsetInCU: 0x2D82, offset: 0x7A97C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZ', symObjAddr: 0x92C, symBinAddr: 0x4ABC, symSize: 0x2C } - - { offsetInCU: 0x2D96, offset: 0x7A990, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_', symObjAddr: 0x958, symBinAddr: 0x4AE8, symSize: 0x1C4 } - - { offsetInCU: 0x2E80, offset: 0x7AA7A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZ', symObjAddr: 0xC08, symBinAddr: 0x4D98, symSize: 0x2C } - - { offsetInCU: 0x2E94, offset: 0x7AA8E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_', symObjAddr: 0xC34, symBinAddr: 0x4DC4, symSize: 0x23C } - - { offsetInCU: 0x2F48, offset: 0x7AB42, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZ', symObjAddr: 0xF08, symBinAddr: 0x5098, symSize: 0x4 } - - { offsetInCU: 0x2F5C, offset: 0x7AB56, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_', symObjAddr: 0xF0C, symBinAddr: 0x509C, symSize: 0x38C } - - { offsetInCU: 0x31F3, offset: 0x7ADED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZ', symObjAddr: 0x1370, symBinAddr: 0x5500, symSize: 0x4 } - - { offsetInCU: 0x320E, offset: 0x7AE08, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfC', symObjAddr: 0x13A8, symBinAddr: 0x5538, symSize: 0x20 } - - { offsetInCU: 0x3222, offset: 0x7AE1C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfc', symObjAddr: 0x13C8, symBinAddr: 0x5558, symSize: 0x30 } - - { offsetInCU: 0x3258, offset: 0x7AE52, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfD', symObjAddr: 0x1434, symBinAddr: 0x55C4, symSize: 0x30 } - - { offsetInCU: 0x4F, offset: 0x7B08A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LLSo7GLKViewCvpZ', symObjAddr: 0x5550, symBinAddr: 0x116E820, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x7B0A4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15_shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvpZ', symObjAddr: 0x5558, symBinAddr: 0x116E828, symSize: 0x0 } - - { offsetInCU: 0x83, offset: 0x7B0BE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5storeSo19NSMutableDictionaryCvpZ', symObjAddr: 0x5560, symBinAddr: 0x116E830, symSize: 0x0 } - - { offsetInCU: 0x9D, offset: 0x7B0D8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LLSo10NSMapTableCySo8NSStringCACGvpZ', symObjAddr: 0x5568, symBinAddr: 0x116E838, symSize: 0x0 } - - { offsetInCU: 0xAB, offset: 0x7B0E6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0x0, symBinAddr: 0x6C40, symSize: 0x40 } - - { offsetInCU: 0xF0, offset: 0x7B12B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5store_WZ', symObjAddr: 0x40, symBinAddr: 0x6C80, symSize: 0x30 } - - { offsetInCU: 0x135, offset: 0x7B170, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0xA8, symBinAddr: 0x6CE8, symSize: 0x40 } - - { offsetInCU: 0x187, offset: 0x7B1C2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x194, symBinAddr: 0x6DD4, symSize: 0x10 } - - { offsetInCU: 0x1A7, offset: 0x7B1E2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x194, symBinAddr: 0x6DD4, symSize: 0x10 } - - { offsetInCU: 0x1DD, offset: 0x7B218, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x1A4, symBinAddr: 0x6DE4, symSize: 0x10 } - - { offsetInCU: 0x1FD, offset: 0x7B238, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x1A4, symBinAddr: 0x6DE4, symSize: 0x10 } - - { offsetInCU: 0x236, offset: 0x7B271, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x1B4, symBinAddr: 0x6DF4, symSize: 0x10 } - - { offsetInCU: 0x256, offset: 0x7B291, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x1B4, symBinAddr: 0x6DF4, symSize: 0x10 } - - { offsetInCU: 0x28C, offset: 0x7B2C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x1C4, symBinAddr: 0x6E04, symSize: 0x10 } - - { offsetInCU: 0x2AC, offset: 0x7B2E7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x1C4, symBinAddr: 0x6E04, symSize: 0x10 } - - { offsetInCU: 0x2E5, offset: 0x7B320, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvgTo', symObjAddr: 0x29C, symBinAddr: 0x6EDC, symSize: 0x44 } - - { offsetInCU: 0x322, offset: 0x7B35D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvsTo', symObjAddr: 0x324, symBinAddr: 0x6F64, symSize: 0x30 } - - { offsetInCU: 0x3B1, offset: 0x7B3EC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvgTo', symObjAddr: 0x578, symBinAddr: 0x71B8, symSize: 0x44 } - - { offsetInCU: 0x409, offset: 0x7B444, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvsTo', symObjAddr: 0x600, symBinAddr: 0x7240, symSize: 0x48 } - - { offsetInCU: 0x464, offset: 0x7B49F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvgTo', symObjAddr: 0x648, symBinAddr: 0x7288, symSize: 0x44 } - - { offsetInCU: 0x4BC, offset: 0x7B4F7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvsTo', symObjAddr: 0x6D0, symBinAddr: 0x7310, symSize: 0x48 } - - { offsetInCU: 0x517, offset: 0x7B552, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0x718, symBinAddr: 0x7358, symSize: 0x10 } - - { offsetInCU: 0x537, offset: 0x7B572, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0x718, symBinAddr: 0x7358, symSize: 0x10 } - - { offsetInCU: 0x56D, offset: 0x7B5A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0x728, symBinAddr: 0x7368, symSize: 0x10 } - - { offsetInCU: 0x58D, offset: 0x7B5C8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0x728, symBinAddr: 0x7368, symSize: 0x10 } - - { offsetInCU: 0x5C6, offset: 0x7B601, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0x738, symBinAddr: 0x7378, symSize: 0x10 } - - { offsetInCU: 0x5E6, offset: 0x7B621, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0x738, symBinAddr: 0x7378, symSize: 0x10 } - - { offsetInCU: 0x61E, offset: 0x7B659, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvsTo', symObjAddr: 0x748, symBinAddr: 0x7388, symSize: 0x34 } - - { offsetInCU: 0x677, offset: 0x7B6B2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x77C, symBinAddr: 0x73BC, symSize: 0x10 } - - { offsetInCU: 0x697, offset: 0x7B6D2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x77C, symBinAddr: 0x73BC, symSize: 0x10 } - - { offsetInCU: 0x6CF, offset: 0x7B70A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvsTo', symObjAddr: 0x78C, symBinAddr: 0x73CC, symSize: 0x34 } - - { offsetInCU: 0x728, offset: 0x7B763, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x7C0, symBinAddr: 0x7400, symSize: 0x10 } - - { offsetInCU: 0x748, offset: 0x7B783, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x7C0, symBinAddr: 0x7400, symSize: 0x10 } - - { offsetInCU: 0x77E, offset: 0x7B7B9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x7D0, symBinAddr: 0x7410, symSize: 0x10 } - - { offsetInCU: 0x79E, offset: 0x7B7D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x7D0, symBinAddr: 0x7410, symSize: 0x10 } - - { offsetInCU: 0x7D7, offset: 0x7B812, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvgTo', symObjAddr: 0x7E0, symBinAddr: 0x7420, symSize: 0x10 } - - { offsetInCU: 0x7F7, offset: 0x7B832, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvgTo', symObjAddr: 0x7E0, symBinAddr: 0x7420, symSize: 0x10 } - - { offsetInCU: 0x82D, offset: 0x7B868, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvsTo', symObjAddr: 0x7F0, symBinAddr: 0x7430, symSize: 0x10 } - - { offsetInCU: 0x84D, offset: 0x7B888, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvsTo', symObjAddr: 0x7F0, symBinAddr: 0x7430, symSize: 0x10 } - - { offsetInCU: 0x870, offset: 0x7B8AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivgTo', symObjAddr: 0x800, symBinAddr: 0x7440, symSize: 0x34 } - - { offsetInCU: 0x8A2, offset: 0x7B8DD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivgTo', symObjAddr: 0x904, symBinAddr: 0x7544, symSize: 0x34 } - - { offsetInCU: 0x8EA, offset: 0x7B925, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvgTo', symObjAddr: 0xA08, symBinAddr: 0x7648, symSize: 0x20 } - - { offsetInCU: 0x952, offset: 0x7B98D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvgTo', symObjAddr: 0xA4C, symBinAddr: 0x768C, symSize: 0x20 } - - { offsetInCU: 0x9F1, offset: 0x7BA2C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btFTo', symObjAddr: 0xAB4, symBinAddr: 0x76F4, symSize: 0xC4 } - - { offsetInCU: 0xAB4, offset: 0x7BAEF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VFTo', symObjAddr: 0xD10, symBinAddr: 0x7950, symSize: 0x30 } - - { offsetInCU: 0xB64, offset: 0x7BB9F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x15C8, symBinAddr: 0x8208, symSize: 0xC4 } - - { offsetInCU: 0xBCE, offset: 0x7BC09, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtFTo', symObjAddr: 0x18E4, symBinAddr: 0x8524, symSize: 0xB0 } - - { offsetInCU: 0xC0B, offset: 0x7BC46, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x1A54, symBinAddr: 0x8694, symSize: 0xB8 } - - { offsetInCU: 0xC83, offset: 0x7BCBE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbFTo', symObjAddr: 0x1BF0, symBinAddr: 0x8830, symSize: 0x3C } - - { offsetInCU: 0xCB6, offset: 0x7BCF1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1C2C, symBinAddr: 0x886C, symSize: 0x10 } - - { offsetInCU: 0xCD6, offset: 0x7BD11, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1C2C, symBinAddr: 0x886C, symSize: 0x10 } - - { offsetInCU: 0xD10, offset: 0x7BD4B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvsTo', symObjAddr: 0x1C3C, symBinAddr: 0x887C, symSize: 0x34 } - - { offsetInCU: 0xD6B, offset: 0x7BDA6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyFTo', symObjAddr: 0x1CB8, symBinAddr: 0x88F8, symSize: 0x48 } - - { offsetInCU: 0xE05, offset: 0x7BE40, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VFTo', symObjAddr: 0x1D4C, symBinAddr: 0x898C, symSize: 0x64 } - - { offsetInCU: 0xECA, offset: 0x7BF05, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VFTo', symObjAddr: 0x1E08, symBinAddr: 0x8A48, symSize: 0x94 } - - { offsetInCU: 0xF57, offset: 0x7BF92, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC23enterBackgroundListeneryycSgvsTo', symObjAddr: 0x1EDC, symBinAddr: 0x8B1C, symSize: 0x6C } - - { offsetInCU: 0xFB9, offset: 0x7BFF4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC20becomeActiveListeneryycSgvsTo', symObjAddr: 0x1FEC, symBinAddr: 0x8C2C, symSize: 0x6C } - - { offsetInCU: 0x1016, offset: 0x7C051, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvgTo', symObjAddr: 0x2058, symBinAddr: 0x8C98, symSize: 0xB0 } - - { offsetInCU: 0x1068, offset: 0x7C0A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvsTo', symObjAddr: 0x21D8, symBinAddr: 0x8E18, symSize: 0x94 } - - { offsetInCU: 0x10FA, offset: 0x7C135, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x2E74, symBinAddr: 0x9AB4, symSize: 0x28 } - - { offsetInCU: 0x114F, offset: 0x7C18A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x38BC, symBinAddr: 0xA4FC, symSize: 0x20 } - - { offsetInCU: 0x1182, offset: 0x7C1BD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x38DC, symBinAddr: 0xA51C, symSize: 0x10 } - - { offsetInCU: 0x11A2, offset: 0x7C1DD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x38DC, symBinAddr: 0xA51C, symSize: 0x10 } - - { offsetInCU: 0x11DA, offset: 0x7C215, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvsTo', symObjAddr: 0x38EC, symBinAddr: 0xA52C, symSize: 0x34 } - - { offsetInCU: 0x1248, offset: 0x7C283, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvgTo', symObjAddr: 0x39A0, symBinAddr: 0xA5E0, symSize: 0x20 } - - { offsetInCU: 0x12A2, offset: 0x7C2DD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvsTo', symObjAddr: 0x39C0, symBinAddr: 0xA600, symSize: 0x34 } - - { offsetInCU: 0x1302, offset: 0x7C33D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgFTo', symObjAddr: 0x3A24, symBinAddr: 0xA664, symSize: 0x34 } - - { offsetInCU: 0x1446, offset: 0x7C481, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFTo', symObjAddr: 0x3D70, symBinAddr: 0xA9B0, symSize: 0x28 } - - { offsetInCU: 0x1479, offset: 0x7C4B4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfDTo', symObjAddr: 0x409C, symBinAddr: 0xACDC, symSize: 0x24 } - - { offsetInCU: 0x14B4, offset: 0x7C4EF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTo', symObjAddr: 0x4188, symBinAddr: 0xADC8, symSize: 0x34 } - - { offsetInCU: 0x14E7, offset: 0x7C522, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvgZTf4d_n', symObjAddr: 0x4B24, symBinAddr: 0xB764, symSize: 0x2A8 } - - { offsetInCU: 0x1664, offset: 0x7C69F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTf4nnd_n', symObjAddr: 0x4E90, symBinAddr: 0xBAD0, symSize: 0xA0 } - - { offsetInCU: 0x18E0, offset: 0x7C91B, size: 0x8, addend: 0x0, symName: '_$sIeg_IeyB_TR', symObjAddr: 0x1EB0, symBinAddr: 0x8AF0, symSize: 0x2C } - - { offsetInCU: 0x18F8, offset: 0x7C933, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_So8NSStringCABIeyByy_TR', symObjAddr: 0x2160, symBinAddr: 0x8DA0, symSize: 0x78 } - - { offsetInCU: 0x1910, offset: 0x7C94B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTK', symObjAddr: 0x22C8, symBinAddr: 0x8F08, symSize: 0x94 } - - { offsetInCU: 0x1948, offset: 0x7C983, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTk', symObjAddr: 0x235C, symBinAddr: 0x8F9C, symSize: 0xB8 } - - { offsetInCU: 0x198A, offset: 0x7C9C5, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TR', symObjAddr: 0x2414, symBinAddr: 0x9054, symSize: 0x6C } - - { offsetInCU: 0x1A3A, offset: 0x7CA75, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfETo', symObjAddr: 0x40C0, symBinAddr: 0xAD00, symSize: 0xC4 } - - { offsetInCU: 0x1A6A, offset: 0x7CAA5, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOy', symObjAddr: 0x41BC, symBinAddr: 0xADFC, symSize: 0x10 } - - { offsetInCU: 0x1A7E, offset: 0x7CAB9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCMa', symObjAddr: 0x41CC, symBinAddr: 0xAE0C, symSize: 0x20 } - - { offsetInCU: 0x1A92, offset: 0x7CACD, size: 0x8, addend: 0x0, symName: '_$ss29getContiguousArrayStorageType3fors01_bcD0CyxGmxm_tlFSo18NSLayoutConstraintC_Tgm5', symObjAddr: 0x41EC, symBinAddr: 0xAE2C, symSize: 0x64 } - - { offsetInCU: 0x1C99, offset: 0x7CCD4, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x4DCC, symBinAddr: 0xBA0C, symSize: 0x40 } - - { offsetInCU: 0x1CAD, offset: 0x7CCE8, size: 0x8, addend: 0x0, symName: '_$sypSgWOh', symObjAddr: 0x4E0C, symBinAddr: 0xBA4C, symSize: 0x40 } - - { offsetInCU: 0x1CC1, offset: 0x7CCFC, size: 0x8, addend: 0x0, symName: ___swift_project_boxed_opaque_existential_0, symObjAddr: 0x4E4C, symBinAddr: 0xBA8C, symSize: 0x24 } - - { offsetInCU: 0x1CD5, offset: 0x7CD10, size: 0x8, addend: 0x0, symName: ___swift_destroy_boxed_opaque_existential_0, symObjAddr: 0x4E70, symBinAddr: 0xBAB0, symSize: 0x20 } - - { offsetInCU: 0x1CF4, offset: 0x7CD2F, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSo19UIGestureRecognizerCIeyByy_SSADIeggg_TRTA', symObjAddr: 0x535C, symBinAddr: 0xBF9C, symSize: 0x48 } - - { offsetInCU: 0x1D1D, offset: 0x7CD58, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x53A4, symBinAddr: 0xBFE4, symSize: 0x10 } - - { offsetInCU: 0x1D31, offset: 0x7CD6C, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x53B4, symBinAddr: 0xBFF4, symSize: 0x8 } - - { offsetInCU: 0x1D45, offset: 0x7CD80, size: 0x8, addend: 0x0, symName: '_$sIeg_SgWOe', symObjAddr: 0x53BC, symBinAddr: 0xBFFC, symSize: 0x10 } - - { offsetInCU: 0x1D64, offset: 0x7CD9F, size: 0x8, addend: 0x0, symName: '_$sIeyB_Ieg_TRTA', symObjAddr: 0x53CC, symBinAddr: 0xC00C, symSize: 0xC } - - { offsetInCU: 0x1D8D, offset: 0x7CDC8, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TRTA', symObjAddr: 0x53FC, symBinAddr: 0xC03C, symSize: 0x8 } - - { offsetInCU: 0x1DAC, offset: 0x7CDE7, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SSABytIegnnr_TRTA', symObjAddr: 0x5404, symBinAddr: 0xC044, symSize: 0x30 } - - { offsetInCU: 0x1DD5, offset: 0x7CE10, size: 0x8, addend: 0x0, symName: '_$sypWOb', symObjAddr: 0x5434, symBinAddr: 0xC074, symSize: 0x10 } - - { offsetInCU: 0x1DE9, offset: 0x7CE24, size: 0x8, addend: 0x0, symName: '_$sypWOc', symObjAddr: 0x547C, symBinAddr: 0xC0BC, symSize: 0x3C } - - { offsetInCU: 0x206E, offset: 0x7D0A9, size: 0x8, addend: 0x0, symName: '_$sSD17dictionaryLiteralSDyxq_Gx_q_td_tcfCSS_ypTgm5Tf4g_n', symObjAddr: 0x4A0C, symBinAddr: 0xB64C, symSize: 0x118 } - - { offsetInCU: 0x2514, offset: 0x7D54F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvg', symObjAddr: 0x2E0, symBinAddr: 0x6F20, symSize: 0x44 } - - { offsetInCU: 0x2547, offset: 0x7D582, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvs', symObjAddr: 0x354, symBinAddr: 0x6F94, symSize: 0xEC } - - { offsetInCU: 0x2593, offset: 0x7D5CE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM', symObjAddr: 0x440, symBinAddr: 0x7080, symSize: 0x58 } - - { offsetInCU: 0x25B8, offset: 0x7D5F3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM.resume.0', symObjAddr: 0x498, symBinAddr: 0x70D8, symSize: 0xE0 } - - { offsetInCU: 0x25F9, offset: 0x7D634, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64Vvg', symObjAddr: 0x5BC, symBinAddr: 0x71FC, symSize: 0x44 } - - { offsetInCU: 0x2651, offset: 0x7D68C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg', symObjAddr: 0x68C, symBinAddr: 0x72CC, symSize: 0x44 } - - { offsetInCU: 0x27BF, offset: 0x7D7FA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivg', symObjAddr: 0x834, symBinAddr: 0x7474, symSize: 0xD0 } - - { offsetInCU: 0x28E4, offset: 0x7D91F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivg', symObjAddr: 0x938, symBinAddr: 0x7578, symSize: 0xD0 } - - { offsetInCU: 0x2A2A, offset: 0x7DA65, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvg', symObjAddr: 0xA28, symBinAddr: 0x7668, symSize: 0x24 } - - { offsetInCU: 0x2A72, offset: 0x7DAAD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvg', symObjAddr: 0xA6C, symBinAddr: 0x76AC, symSize: 0x24 } - - { offsetInCU: 0x2AA6, offset: 0x7DAE1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btF', symObjAddr: 0xA90, symBinAddr: 0x76D0, symSize: 0x24 } - - { offsetInCU: 0x2C34, offset: 0x7DC6F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VF', symObjAddr: 0xB78, symBinAddr: 0x77B8, symSize: 0x198 } - - { offsetInCU: 0x3027, offset: 0x7E062, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btF', symObjAddr: 0xD40, symBinAddr: 0x7980, symSize: 0x888 } - - { offsetInCU: 0x382A, offset: 0x7E865, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtF', symObjAddr: 0x168C, symBinAddr: 0x82CC, symSize: 0x258 } - - { offsetInCU: 0x3C5C, offset: 0x7EC97, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x1994, symBinAddr: 0x85D4, symSize: 0xC0 } - - { offsetInCU: 0x3CED, offset: 0x7ED28, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbF', symObjAddr: 0x1B0C, symBinAddr: 0x874C, symSize: 0xE4 } - - { offsetInCU: 0x3E48, offset: 0x7EE83, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyF', symObjAddr: 0x1C70, symBinAddr: 0x88B0, symSize: 0x48 } - - { offsetInCU: 0x3ECE, offset: 0x7EF09, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF', symObjAddr: 0x1D00, symBinAddr: 0x8940, symSize: 0x4C } - - { offsetInCU: 0x3FEF, offset: 0x7F02A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VF', symObjAddr: 0x1DB0, symBinAddr: 0x89F0, symSize: 0x58 } - - { offsetInCU: 0x40E5, offset: 0x7F120, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvg', symObjAddr: 0x2108, symBinAddr: 0x8D48, symSize: 0x58 } - - { offsetInCU: 0x4131, offset: 0x7F16C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvs', symObjAddr: 0x226C, symBinAddr: 0x8EAC, symSize: 0x5C } - - { offsetInCU: 0x415A, offset: 0x7F195, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM', symObjAddr: 0x2480, symBinAddr: 0x90C0, symSize: 0x44 } - - { offsetInCU: 0x4180, offset: 0x7F1BB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM.resume.0', symObjAddr: 0x24C4, symBinAddr: 0x9104, symSize: 0x4 } - - { offsetInCU: 0x4242, offset: 0x7F27D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x24C8, symBinAddr: 0x9108, symSize: 0x9AC } - - { offsetInCU: 0x4447, offset: 0x7F482, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfC', symObjAddr: 0x2E9C, symBinAddr: 0x9ADC, symSize: 0x50 } - - { offsetInCU: 0x4470, offset: 0x7F4AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfc', symObjAddr: 0x2EEC, symBinAddr: 0x9B2C, symSize: 0x9D0 } - - { offsetInCU: 0x4696, offset: 0x7F6D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvW', symObjAddr: 0x3920, symBinAddr: 0xA560, symSize: 0x80 } - - { offsetInCU: 0x478C, offset: 0x7F7C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgF', symObjAddr: 0x39F4, symBinAddr: 0xA634, symSize: 0x30 } - - { offsetInCU: 0x482A, offset: 0x7F865, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6resize33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x3A58, symBinAddr: 0xA698, symSize: 0x144 } - - { offsetInCU: 0x4A2B, offset: 0x7FA66, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyF', symObjAddr: 0x3B9C, symBinAddr: 0xA7DC, symSize: 0x1D4 } - - { offsetInCU: 0x4CA8, offset: 0x7FCE3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfD', symObjAddr: 0x3D98, symBinAddr: 0xA9D8, symSize: 0x304 } - - { offsetInCU: 0x4D38, offset: 0x7FD73, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZ', symObjAddr: 0x4184, symBinAddr: 0xADC4, symSize: 0x4 } - - { offsetInCU: 0x4D60, offset: 0x7FD9B, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4findys10_HashTableV6BucketV6bucket_Sb5foundtxSHRzlFSS_Tg5', symObjAddr: 0x4250, symBinAddr: 0xAE90, symSize: 0x64 } - - { offsetInCU: 0x4DBA, offset: 0x7FDF5, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV7_insert2at3key5valueys10_HashTableV6BucketV_xnq_ntFSS_ypTg5', symObjAddr: 0x42B4, symBinAddr: 0xAEF4, symSize: 0x6C } - - { offsetInCU: 0x4E3A, offset: 0x7FE75, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV12mutatingFind_8isUniques10_HashTableV6BucketV6bucket_Sb5foundtx_SbtFSS_ypTg5', symObjAddr: 0x4320, symBinAddr: 0xAF60, symSize: 0xD8 } - - { offsetInCU: 0x4E77, offset: 0x7FEB2, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4find_9hashValues10_HashTableV6BucketV6bucket_Sb5foundtx_SitSHRzlFSS_Tg5', symObjAddr: 0x43F8, symBinAddr: 0xB038, symSize: 0xE0 } - - { offsetInCU: 0x4EF2, offset: 0x7FF2D, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV4copyyyFSS_ypTg5', symObjAddr: 0x44D8, symBinAddr: 0xB118, symSize: 0x1F4 } - - { offsetInCU: 0x4FAE, offset: 0x7FFE9, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV20_copyOrMoveAndResize8capacity12moveElementsySi_SbtFSS_ypTg5', symObjAddr: 0x46CC, symBinAddr: 0xB30C, symSize: 0x340 } - - { offsetInCU: 0x27, offset: 0x80236, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xC15C, symSize: 0x10 } - - { offsetInCU: 0x62, offset: 0x80271, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCMa', symObjAddr: 0x10, symBinAddr: 0xC16C, symSize: 0x20 } - - { offsetInCU: 0x1AF, offset: 0x803BE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xC15C, symSize: 0x10 } - - { offsetInCU: 0x65, offset: 0x8044D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvgTo', symObjAddr: 0x0, symBinAddr: 0xC18C, symSize: 0x10 } - - { offsetInCU: 0x85, offset: 0x8046D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvgTo', symObjAddr: 0x0, symBinAddr: 0xC18C, symSize: 0x10 } - - { offsetInCU: 0xBB, offset: 0x804A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvsTo', symObjAddr: 0x10, symBinAddr: 0xC19C, symSize: 0x10 } - - { offsetInCU: 0xDB, offset: 0x804C3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvsTo', symObjAddr: 0x10, symBinAddr: 0xC19C, symSize: 0x10 } - - { offsetInCU: 0x114, offset: 0x804FC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvgTo', symObjAddr: 0x20, symBinAddr: 0xC1AC, symSize: 0x44 } - - { offsetInCU: 0x16C, offset: 0x80554, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvsTo', symObjAddr: 0x64, symBinAddr: 0xC1F0, symSize: 0x48 } - - { offsetInCU: 0x1C7, offset: 0x805AF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvgTo', symObjAddr: 0xAC, symBinAddr: 0xC238, symSize: 0x44 } - - { offsetInCU: 0x21F, offset: 0x80607, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvsTo', symObjAddr: 0xF0, symBinAddr: 0xC27C, symSize: 0x48 } - - { offsetInCU: 0x27A, offset: 0x80662, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivgTo', symObjAddr: 0x138, symBinAddr: 0xC2C4, symSize: 0x10 } - - { offsetInCU: 0x29A, offset: 0x80682, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivgTo', symObjAddr: 0x138, symBinAddr: 0xC2C4, symSize: 0x10 } - - { offsetInCU: 0x2D0, offset: 0x806B8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivsTo', symObjAddr: 0x148, symBinAddr: 0xC2D4, symSize: 0x10 } - - { offsetInCU: 0x2F0, offset: 0x806D8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivsTo', symObjAddr: 0x148, symBinAddr: 0xC2D4, symSize: 0x10 } - - { offsetInCU: 0x329, offset: 0x80711, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivgTo', symObjAddr: 0x158, symBinAddr: 0xC2E4, symSize: 0x10 } - - { offsetInCU: 0x349, offset: 0x80731, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivgTo', symObjAddr: 0x158, symBinAddr: 0xC2E4, symSize: 0x10 } - - { offsetInCU: 0x37F, offset: 0x80767, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivsTo', symObjAddr: 0x168, symBinAddr: 0xC2F4, symSize: 0x10 } - - { offsetInCU: 0x39F, offset: 0x80787, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivsTo', symObjAddr: 0x168, symBinAddr: 0xC2F4, symSize: 0x10 } - - { offsetInCU: 0x3D8, offset: 0x807C0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvgTo', symObjAddr: 0x178, symBinAddr: 0xC304, symSize: 0x44 } - - { offsetInCU: 0x430, offset: 0x80818, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvsTo', symObjAddr: 0x1BC, symBinAddr: 0xC348, symSize: 0x48 } - - { offsetInCU: 0x48B, offset: 0x80873, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvgTo', symObjAddr: 0x204, symBinAddr: 0xC390, symSize: 0x10 } - - { offsetInCU: 0x4AB, offset: 0x80893, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvgTo', symObjAddr: 0x204, symBinAddr: 0xC390, symSize: 0x10 } - - { offsetInCU: 0x4E1, offset: 0x808C9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvsTo', symObjAddr: 0x214, symBinAddr: 0xC3A0, symSize: 0x10 } - - { offsetInCU: 0x501, offset: 0x808E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvsTo', symObjAddr: 0x214, symBinAddr: 0xC3A0, symSize: 0x10 } - - { offsetInCU: 0x53A, offset: 0x80922, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvgTo', symObjAddr: 0x224, symBinAddr: 0xC3B0, symSize: 0x10 } - - { offsetInCU: 0x55A, offset: 0x80942, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvgTo', symObjAddr: 0x224, symBinAddr: 0xC3B0, symSize: 0x10 } - - { offsetInCU: 0x590, offset: 0x80978, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvsTo', symObjAddr: 0x234, symBinAddr: 0xC3C0, symSize: 0x10 } - - { offsetInCU: 0x5B0, offset: 0x80998, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvsTo', symObjAddr: 0x234, symBinAddr: 0xC3C0, symSize: 0x10 } - - { offsetInCU: 0x5E9, offset: 0x809D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvgTo', symObjAddr: 0x244, symBinAddr: 0xC3D0, symSize: 0x48 } - - { offsetInCU: 0x63F, offset: 0x80A27, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvsTo', symObjAddr: 0x28C, symBinAddr: 0xC418, symSize: 0x40 } - - { offsetInCU: 0x682, offset: 0x80A6A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13SIZE_OF_FLOATSivgZTo', symObjAddr: 0x2CC, symBinAddr: 0xC458, symSize: 0x8 } - - { offsetInCU: 0x69E, offset: 0x80A86, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13VERTEX_SHADERSSvgZTo', symObjAddr: 0x2D4, symBinAddr: 0xC460, symSize: 0x2C } - - { offsetInCU: 0x6D0, offset: 0x80AB8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvgTo', symObjAddr: 0x300, symBinAddr: 0xC48C, symSize: 0x10 } - - { offsetInCU: 0x6F0, offset: 0x80AD8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvgTo', symObjAddr: 0x300, symBinAddr: 0xC48C, symSize: 0x10 } - - { offsetInCU: 0x728, offset: 0x80B10, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvsTo', symObjAddr: 0x310, symBinAddr: 0xC49C, symSize: 0x34 } - - { offsetInCU: 0x781, offset: 0x80B69, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvgTo', symObjAddr: 0x418, symBinAddr: 0xC5A4, symSize: 0x10 } - - { offsetInCU: 0x7A1, offset: 0x80B89, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvgTo', symObjAddr: 0x418, symBinAddr: 0xC5A4, symSize: 0x10 } - - { offsetInCU: 0x7D7, offset: 0x80BBF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvsTo', symObjAddr: 0x428, symBinAddr: 0xC5B4, symSize: 0x10 } - - { offsetInCU: 0x7F7, offset: 0x80BDF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvsTo', symObjAddr: 0x428, symBinAddr: 0xC5B4, symSize: 0x10 } - - { offsetInCU: 0x846, offset: 0x80C2E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfcTo', symObjAddr: 0x5BC, symBinAddr: 0xC708, symSize: 0x20 } - - { offsetInCU: 0x878, offset: 0x80C60, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyFTo', symObjAddr: 0x720, symBinAddr: 0xC86C, symSize: 0x28 } - - { offsetInCU: 0x8D0, offset: 0x80CB8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTo', symObjAddr: 0x75C, symBinAddr: 0xC8A8, symSize: 0x88 } - - { offsetInCU: 0x934, offset: 0x80D1C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTo', symObjAddr: 0x7E4, symBinAddr: 0xC930, symSize: 0x7C } - - { offsetInCU: 0x9D6, offset: 0x80DBE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyFTo', symObjAddr: 0xC0C, symBinAddr: 0xCD58, symSize: 0x28 } - - { offsetInCU: 0xAC0, offset: 0x80EA8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCMa', symObjAddr: 0x59C, symBinAddr: 0xC6E8, symSize: 0x20 } - - { offsetInCU: 0xB34, offset: 0x80F1C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfETo', symObjAddr: 0xC64, symBinAddr: 0xCDB0, symSize: 0x58 } - - { offsetInCU: 0x123B, offset: 0x81623, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfC', symObjAddr: 0x438, symBinAddr: 0xC5C4, symSize: 0x20 } - - { offsetInCU: 0x1255, offset: 0x8163D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfc', symObjAddr: 0x458, symBinAddr: 0xC5E4, symSize: 0x104 } - - { offsetInCU: 0x1287, offset: 0x8166F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyF', symObjAddr: 0x5DC, symBinAddr: 0xC728, symSize: 0x144 } - - { offsetInCU: 0x1442, offset: 0x8182A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtF', symObjAddr: 0x748, symBinAddr: 0xC894, symSize: 0x14 } - - { offsetInCU: 0x14F3, offset: 0x818DB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyF', symObjAddr: 0x860, symBinAddr: 0xC9AC, symSize: 0x3AC } - - { offsetInCU: 0x1863, offset: 0x81C4B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfD', symObjAddr: 0xC34, symBinAddr: 0xCD80, symSize: 0x30 } - - { offsetInCU: 0x194E, offset: 0x81D36, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTf4ddnndnndn_n', symObjAddr: 0xCBC, symBinAddr: 0xCE08, symSize: 0x65C } - - { offsetInCU: 0x214C, offset: 0x82534, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTf4nnnnndn_n', symObjAddr: 0x135C, symBinAddr: 0xD4A8, symSize: 0x6C8 } - - { offsetInCU: 0x10C, offset: 0x82EF4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfcTo', symObjAddr: 0xED4, symBinAddr: 0xEA1C, symSize: 0x68 } - - { offsetInCU: 0x19C, offset: 0x82F84, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCfETo', symObjAddr: 0xF48, symBinAddr: 0xEA90, symSize: 0x10 } - - { offsetInCU: 0x1CB, offset: 0x82FB3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6handleyySo19UIGestureRecognizerCFTo', symObjAddr: 0xF58, symBinAddr: 0xEAA0, symSize: 0x4 } - - { offsetInCU: 0x368, offset: 0x83150, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCACycfcTo', symObjAddr: 0x16DC, symBinAddr: 0xF224, symSize: 0x2C } - - { offsetInCU: 0x5D4, offset: 0x833BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCfETo', symObjAddr: 0x1744, symBinAddr: 0xF28C, symSize: 0x68 } - - { offsetInCU: 0x603, offset: 0x833EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCMa', symObjAddr: 0x17AC, symBinAddr: 0xF2F4, symSize: 0x20 } - - { offsetInCU: 0x617, offset: 0x833FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCMa', symObjAddr: 0x17CC, symBinAddr: 0xF314, symSize: 0x20 } - - { offsetInCU: 0x62B, offset: 0x83413, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwCP', symObjAddr: 0x17EC, symBinAddr: 0xF334, symSize: 0x30 } - - { offsetInCU: 0x63F, offset: 0x83427, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwxx', symObjAddr: 0x181C, symBinAddr: 0xF364, symSize: 0x8 } - - { offsetInCU: 0x653, offset: 0x8343B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwcp', symObjAddr: 0x1824, symBinAddr: 0xF36C, symSize: 0x3C } - - { offsetInCU: 0x667, offset: 0x8344F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwca', symObjAddr: 0x1860, symBinAddr: 0xF3A8, symSize: 0x50 } - - { offsetInCU: 0x67B, offset: 0x83463, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwta', symObjAddr: 0x18BC, symBinAddr: 0xF3F8, symSize: 0x40 } - - { offsetInCU: 0x68F, offset: 0x83477, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwet', symObjAddr: 0x18FC, symBinAddr: 0xF438, symSize: 0x48 } - - { offsetInCU: 0x6A3, offset: 0x8348B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwst', symObjAddr: 0x1944, symBinAddr: 0xF480, symSize: 0x40 } - - { offsetInCU: 0x6B7, offset: 0x8349F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVMa', symObjAddr: 0x1984, symBinAddr: 0xF4C0, symSize: 0x10 } - - { offsetInCU: 0x6CB, offset: 0x834B3, size: 0x8, addend: 0x0, symName: '_$sypSgWOc', symObjAddr: 0x1994, symBinAddr: 0xF4D0, symSize: 0x48 } - - { offsetInCU: 0x6DF, offset: 0x834C7, size: 0x8, addend: 0x0, symName: '_$sSo7UITouchCSo8NSObjectCSH10ObjectiveCWl', symObjAddr: 0x1AA0, symBinAddr: 0xF518, symSize: 0x58 } - - { offsetInCU: 0x6F3, offset: 0x834DB, size: 0x8, addend: 0x0, symName: '_$sSh8IteratorV8_VariantOyx__GSHRzlWOe', symObjAddr: 0x1AF8, symBinAddr: 0xF570, symSize: 0x8 } - - { offsetInCU: 0x761, offset: 0x83549, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOe', symObjAddr: 0x1DEC, symBinAddr: 0xF864, symSize: 0x10 } - - { offsetInCU: 0xCBB, offset: 0x83AA3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesBegan_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x0, symBinAddr: 0xDB70, symSize: 0x540 } - - { offsetInCU: 0xF57, offset: 0x83D3F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesMoved_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x54C, symBinAddr: 0xE0BC, symSize: 0xE0 } - - { offsetInCU: 0xFD6, offset: 0x83DBE, size: 0x8, addend: 0x0, symName: '_$sSa6remove2atxSi_tF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x6F0, symBinAddr: 0xE24C, symSize: 0x9C } - - { offsetInCU: 0x1069, offset: 0x83E51, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfc', symObjAddr: 0xDCC, symBinAddr: 0xE914, symSize: 0x108 } - - { offsetInCU: 0x11B3, offset: 0x83F9B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6onMove33_044DDF836BDB3B89B481C6F58BB6EF6BLLyySo19UIGestureRecognizerC_ShySo7UITouchCGSgtF', symObjAddr: 0x12D0, symBinAddr: 0xEE18, symSize: 0x40C } - - { offsetInCU: 0x18C9, offset: 0x846B1, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNewAByxGyF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x1B00, symBinAddr: 0xF578, symSize: 0x14 } - - { offsetInCU: 0x1968, offset: 0x84750, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6canvasAcA9NSCCanvasC_tcfcTf4gn_n', symObjAddr: 0x1B14, symBinAddr: 0xF58C, symSize: 0x1E4 } - - { offsetInCU: 0x27, offset: 0x8492D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xF874, symSize: 0x2C } - - { offsetInCU: 0x4B, offset: 0x84951, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvpZ', symObjAddr: 0x2D8, symBinAddr: 0x116EB48, symSize: 0x0 } - - { offsetInCU: 0x65, offset: 0x8496B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xF874, symSize: 0x2C } - - { offsetInCU: 0x98, offset: 0x8499E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZTo', symObjAddr: 0x178, symBinAddr: 0xF9EC, symSize: 0x40 } - - { offsetInCU: 0x104, offset: 0x84A0A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfcTo', symObjAddr: 0x228, symBinAddr: 0xFA9C, symSize: 0x3C } - - { offsetInCU: 0x156, offset: 0x84A5C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queue_WZ', symObjAddr: 0x2C, symBinAddr: 0xF8A0, symSize: 0x10C } - - { offsetInCU: 0x181, offset: 0x84A87, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCMa', symObjAddr: 0x208, symBinAddr: 0xFA7C, symSize: 0x20 } - - { offsetInCU: 0x195, offset: 0x84A9B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfETo', symObjAddr: 0x294, symBinAddr: 0xFB08, symSize: 0x4 } - - { offsetInCU: 0x1C0, offset: 0x84AC6, size: 0x8, addend: 0x0, symName: '_$sSo17OS_dispatch_queueCMa', symObjAddr: 0x298, symBinAddr: 0xFB0C, symSize: 0x3C } - - { offsetInCU: 0x348, offset: 0x84C4E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZ', symObjAddr: 0x138, symBinAddr: 0xF9AC, symSize: 0x40 } - - { offsetInCU: 0x388, offset: 0x84C8E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfC', symObjAddr: 0x1B8, symBinAddr: 0xFA2C, symSize: 0x20 } - - { offsetInCU: 0x39C, offset: 0x84CA2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfc', symObjAddr: 0x1D8, symBinAddr: 0xFA4C, symSize: 0x30 } - - { offsetInCU: 0x3D8, offset: 0x84CDE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfD', symObjAddr: 0x264, symBinAddr: 0xFAD8, symSize: 0x30 } - - { offsetInCU: 0x2B, offset: 0x84D2C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xFB48, symSize: 0xA4 } - - { offsetInCU: 0x66, offset: 0x84D67, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZTo', symObjAddr: 0xA4, symBinAddr: 0xFBEC, symSize: 0xA4 } - - { offsetInCU: 0xF9, offset: 0x84DFA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZTo', symObjAddr: 0x1D8, symBinAddr: 0xFD20, symSize: 0x110 } - - { offsetInCU: 0x1A2, offset: 0x84EA3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZTo', symObjAddr: 0x30C, symBinAddr: 0xFE54, symSize: 0x28 } - - { offsetInCU: 0x222, offset: 0x84F23, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTo', symObjAddr: 0x338, symBinAddr: 0xFE80, symSize: 0xA0 } - - { offsetInCU: 0x29B, offset: 0x84F9C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZTo', symObjAddr: 0x4D0, symBinAddr: 0x10018, symSize: 0x15C } - - { offsetInCU: 0x330, offset: 0x85031, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfcTo', symObjAddr: 0x67C, symBinAddr: 0x101C4, symSize: 0x3C } - - { offsetInCU: 0x381, offset: 0x85082, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTf4nnnnnndd_n', symObjAddr: 0x6E8, symBinAddr: 0x10230, symSize: 0x160 } - - { offsetInCU: 0x4DF, offset: 0x851E0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC7getFile33_F00B23A4165DD6ABFCD23C8811C7DF43LLyS2SKFZTf4nd_g', symObjAddr: 0x848, symBinAddr: 0x10390, symSize: 0x2E4 } - - { offsetInCU: 0x5AE, offset: 0x852AF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCMa', symObjAddr: 0xB2C, symBinAddr: 0x10674, symSize: 0x20 } - - { offsetInCU: 0x5C2, offset: 0x852C3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOAEs5ErrorAAWl', symObjAddr: 0xB4C, symBinAddr: 0x10694, symSize: 0x44 } - - { offsetInCU: 0x5D6, offset: 0x852D7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwCP', symObjAddr: 0xB90, symBinAddr: 0x106D8, symSize: 0x2C } - - { offsetInCU: 0x5EA, offset: 0x852EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwxx', symObjAddr: 0xBBC, symBinAddr: 0x10704, symSize: 0x8 } - - { offsetInCU: 0x5FE, offset: 0x852FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwca', symObjAddr: 0xBC4, symBinAddr: 0x1070C, symSize: 0x40 } - - { offsetInCU: 0x612, offset: 0x85313, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwta', symObjAddr: 0xC10, symBinAddr: 0x1074C, symSize: 0x30 } - - { offsetInCU: 0x626, offset: 0x85327, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwet', symObjAddr: 0xC40, symBinAddr: 0x1077C, symSize: 0x48 } - - { offsetInCU: 0x63A, offset: 0x8533B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwst', symObjAddr: 0xC88, symBinAddr: 0x107C4, symSize: 0x3C } - - { offsetInCU: 0x64E, offset: 0x8534F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwug', symObjAddr: 0xCC4, symBinAddr: 0x10800, symSize: 0x8 } - - { offsetInCU: 0x662, offset: 0x85363, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwup', symObjAddr: 0xCCC, symBinAddr: 0x10808, symSize: 0x4 } - - { offsetInCU: 0x676, offset: 0x85377, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwui', symObjAddr: 0xCD0, symBinAddr: 0x1080C, symSize: 0x4 } - - { offsetInCU: 0x68A, offset: 0x8538B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOMa', symObjAddr: 0xCD4, symBinAddr: 0x10810, symSize: 0x10 } - - { offsetInCU: 0x712, offset: 0x85413, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP7_domainSSvgTW', symObjAddr: 0x3D8, symBinAddr: 0xFF20, symSize: 0x4 } - - { offsetInCU: 0x72E, offset: 0x8542F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP5_codeSivgTW', symObjAddr: 0x3DC, symBinAddr: 0xFF24, symSize: 0x4 } - - { offsetInCU: 0x74A, offset: 0x8544B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP9_userInfoyXlSgvgTW', symObjAddr: 0x3E0, symBinAddr: 0xFF28, symSize: 0x4 } - - { offsetInCU: 0x766, offset: 0x85467, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP19_getEmbeddedNSErroryXlSgyFTW', symObjAddr: 0x3E4, symBinAddr: 0xFF2C, symSize: 0x4 } - - { offsetInCU: 0xA14, offset: 0x85715, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xFB48, symSize: 0xA4 } - - { offsetInCU: 0xAAA, offset: 0x857AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZ', symObjAddr: 0x148, symBinAddr: 0xFC90, symSize: 0x90 } - - { offsetInCU: 0xC31, offset: 0x85932, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZ', symObjAddr: 0x2E8, symBinAddr: 0xFE30, symSize: 0x24 } - - { offsetInCU: 0xC7B, offset: 0x8597C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZ', symObjAddr: 0x334, symBinAddr: 0xFE7C, symSize: 0x4 } - - { offsetInCU: 0xC9D, offset: 0x8599E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZ', symObjAddr: 0x3E8, symBinAddr: 0xFF30, symSize: 0xE8 } - - { offsetInCU: 0xD4D, offset: 0x85A4E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfC', symObjAddr: 0x62C, symBinAddr: 0x10174, symSize: 0x20 } - - { offsetInCU: 0xD61, offset: 0x85A62, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfc', symObjAddr: 0x64C, symBinAddr: 0x10194, symSize: 0x30 } - - { offsetInCU: 0xD97, offset: 0x85A98, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCfD', symObjAddr: 0x6B8, symBinAddr: 0x10200, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x85BB1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x10824, symSize: 0x4 } - - { offsetInCU: 0x71, offset: 0x85BFB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x4, symBinAddr: 0x10828, symSize: 0x70 } - - { offsetInCU: 0xF6, offset: 0x85C80, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x78, symBinAddr: 0x1089C, symSize: 0x50 } - - { offsetInCU: 0x191, offset: 0x85D1B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0xCC, symBinAddr: 0x108F0, symSize: 0x68 } - - { offsetInCU: 0x254, offset: 0x85DDE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x138, symBinAddr: 0x1095C, symSize: 0x98 } - - { offsetInCU: 0x323, offset: 0x85EAD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfcTo', symObjAddr: 0x220, symBinAddr: 0x10A44, symSize: 0x3C } - - { offsetInCU: 0x375, offset: 0x85EFF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCMa', symObjAddr: 0x28C, symBinAddr: 0x10AB0, symSize: 0x20 } - - { offsetInCU: 0x4E5, offset: 0x8606F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x10824, symSize: 0x4 } - - { offsetInCU: 0x51D, offset: 0x860A7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x10824, symSize: 0x4 } - - { offsetInCU: 0x588, offset: 0x86112, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0x10898, symSize: 0x4 } - - { offsetInCU: 0x5C8, offset: 0x86152, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0x10898, symSize: 0x4 } - - { offsetInCU: 0x62A, offset: 0x861B4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xC8, symBinAddr: 0x108EC, symSize: 0x4 } - - { offsetInCU: 0x67C, offset: 0x86206, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xC8, symBinAddr: 0x108EC, symSize: 0x4 } - - { offsetInCU: 0x6F1, offset: 0x8627B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x134, symBinAddr: 0x10958, symSize: 0x4 } - - { offsetInCU: 0x767, offset: 0x862F1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x134, symBinAddr: 0x10958, symSize: 0x4 } - - { offsetInCU: 0x805, offset: 0x8638F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfC', symObjAddr: 0x1D0, symBinAddr: 0x109F4, symSize: 0x20 } - - { offsetInCU: 0x819, offset: 0x863A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfc', symObjAddr: 0x1F0, symBinAddr: 0x10A14, symSize: 0x30 } - - { offsetInCU: 0x84F, offset: 0x863D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCfD', symObjAddr: 0x25C, symBinAddr: 0x10A80, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x86423, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x10AD0, symSize: 0x14 } - - { offsetInCU: 0xA9, offset: 0x864A5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x14, symBinAddr: 0x10AE4, symSize: 0x38 } - - { offsetInCU: 0x1A2, offset: 0x8659E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x68, symBinAddr: 0x10B38, symSize: 0x40 } - - { offsetInCU: 0x284, offset: 0x86680, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfcTo', symObjAddr: 0x118, symBinAddr: 0x10BE8, symSize: 0x3C } - - { offsetInCU: 0x2D6, offset: 0x866D2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCMa', symObjAddr: 0xF8, symBinAddr: 0x10BC8, symSize: 0x20 } - - { offsetInCU: 0x480, offset: 0x8687C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x10AD0, symSize: 0x14 } - - { offsetInCU: 0x5C4, offset: 0x869C0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x4C, symBinAddr: 0x10B1C, symSize: 0x1C } - - { offsetInCU: 0x6FA, offset: 0x86AF6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfC', symObjAddr: 0xA8, symBinAddr: 0x10B78, symSize: 0x20 } - - { offsetInCU: 0x70E, offset: 0x86B0A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfc', symObjAddr: 0xC8, symBinAddr: 0x10B98, symSize: 0x30 } - - { offsetInCU: 0x744, offset: 0x86B40, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCfD', symObjAddr: 0x154, symBinAddr: 0x10C24, symSize: 0x30 } - - { offsetInCU: 0x61, offset: 0x86BC4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0x10C58, symSize: 0x10 } - - { offsetInCU: 0x81, offset: 0x86BE4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0x10C58, symSize: 0x10 } - - { offsetInCU: 0xB7, offset: 0x86C1A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0x10C68, symSize: 0x10 } - - { offsetInCU: 0xD7, offset: 0x86C3A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0x10C68, symSize: 0x10 } - - { offsetInCU: 0x110, offset: 0x86C73, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvgTo', symObjAddr: 0x24, symBinAddr: 0x10C78, symSize: 0x48 } - - { offsetInCU: 0x168, offset: 0x86CCB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvsTo', symObjAddr: 0xB4, symBinAddr: 0x10D08, symSize: 0x50 } - - { offsetInCU: 0x1C3, offset: 0x86D26, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0x10D58, symSize: 0x10 } - - { offsetInCU: 0x1E3, offset: 0x86D46, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0x10D58, symSize: 0x10 } - - { offsetInCU: 0x219, offset: 0x86D7C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0x10D68, symSize: 0x10 } - - { offsetInCU: 0x239, offset: 0x86D9C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0x10D68, symSize: 0x10 } - - { offsetInCU: 0x272, offset: 0x86DD5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfcTo', symObjAddr: 0x1B0, symBinAddr: 0x10E04, symSize: 0x78 } - - { offsetInCU: 0x2C8, offset: 0x86E2B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x2D4, symBinAddr: 0x10F28, symSize: 0xB0 } - - { offsetInCU: 0x32A, offset: 0x86E8D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x43C, symBinAddr: 0x11090, symSize: 0x28 } - - { offsetInCU: 0x35C, offset: 0x86EBF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC12bindDrawableyyFTo', symObjAddr: 0x4E0, symBinAddr: 0x110B8, symSize: 0xA0 } - - { offsetInCU: 0x3DD, offset: 0x86F40, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC14deleteDrawableyyFTo', symObjAddr: 0x5BC, symBinAddr: 0x11158, symSize: 0x60 } - - { offsetInCU: 0x44D, offset: 0x86FB0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTo', symObjAddr: 0x620, symBinAddr: 0x111BC, symSize: 0x4C } - - { offsetInCU: 0x4BF, offset: 0x87022, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfcTo', symObjAddr: 0x70C, symBinAddr: 0x112A8, symSize: 0x34 } - - { offsetInCU: 0x533, offset: 0x87096, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCMa', symObjAddr: 0x190, symBinAddr: 0x10DE4, symSize: 0x20 } - - { offsetInCU: 0x55D, offset: 0x870C0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCfETo', symObjAddr: 0x74C, symBinAddr: 0x112E8, symSize: 0x10 } - - { offsetInCU: 0x65B, offset: 0x871BE, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VFTo', symObjAddr: 0xA08, symBinAddr: 0x115A4, symSize: 0x74 } - - { offsetInCU: 0x699, offset: 0x871FC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA7C, symBinAddr: 0x11618, symSize: 0x10 } - - { offsetInCU: 0x6B9, offset: 0x8721C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA7C, symBinAddr: 0x11618, symSize: 0x10 } - - { offsetInCU: 0x6EF, offset: 0x87252, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA8C, symBinAddr: 0x11628, symSize: 0x10 } - - { offsetInCU: 0x70F, offset: 0x87272, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA8C, symBinAddr: 0x11628, symSize: 0x10 } - - { offsetInCU: 0x748, offset: 0x872AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvgTo', symObjAddr: 0xA9C, symBinAddr: 0x11638, symSize: 0x20 } - - { offsetInCU: 0x7A0, offset: 0x87303, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvsTo', symObjAddr: 0xABC, symBinAddr: 0x11658, symSize: 0x14 } - - { offsetInCU: 0x7FB, offset: 0x8735E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvgTo', symObjAddr: 0xAD0, symBinAddr: 0x1166C, symSize: 0x44 } - - { offsetInCU: 0x853, offset: 0x873B6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvsTo', symObjAddr: 0xB58, symBinAddr: 0x116F4, symSize: 0x48 } - - { offsetInCU: 0x8E8, offset: 0x8744B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfcTo', symObjAddr: 0xCBC, symBinAddr: 0x11858, symSize: 0x78 } - - { offsetInCU: 0x93E, offset: 0x874A1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0xE34, symBinAddr: 0x119D0, symSize: 0xB0 } - - { offsetInCU: 0x9A0, offset: 0x87503, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0xF90, symBinAddr: 0x11B2C, symSize: 0x28 } - - { offsetInCU: 0x9D2, offset: 0x87535, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC11deviceScaleSfyFTo', symObjAddr: 0xFB8, symBinAddr: 0x11B54, symSize: 0xB8 } - - { offsetInCU: 0xA53, offset: 0x875B6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTo', symObjAddr: 0x1074, symBinAddr: 0x11C0C, symSize: 0x28 } - - { offsetInCU: 0xAB1, offset: 0x87614, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCfETo', symObjAddr: 0x10D8, symBinAddr: 0x11C70, symSize: 0x10 } - - { offsetInCU: 0xC63, offset: 0x877C6, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfC12CanvasNative15NSCTouchHandlerC7PointerV_Tgm5', symObjAddr: 0x130C, symBinAddr: 0x11DF0, symSize: 0x80 } - - { offsetInCU: 0xCE6, offset: 0x87849, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCs5UInt8V_Tgm5', symObjAddr: 0x140C, symBinAddr: 0x11E70, symSize: 0x6C } - - { offsetInCU: 0xD6A, offset: 0x878CD, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOy', symObjAddr: 0x1630, symBinAddr: 0x12094, symSize: 0x44 } - - { offsetInCU: 0xD7E, offset: 0x878E1, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOe', symObjAddr: 0x1674, symBinAddr: 0x120D8, symSize: 0x44 } - - { offsetInCU: 0xD92, offset: 0x878F5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCMa', symObjAddr: 0x16B8, symBinAddr: 0x1211C, symSize: 0x20 } - - { offsetInCU: 0xE6C, offset: 0x879CF, size: 0x8, addend: 0x0, symName: '_$sSaySayxGqd__c7ElementQyd__RszSTRd__lufCs5UInt8V_10Foundation4DataVTgm5Tf4g_n', symObjAddr: 0x14FC, symBinAddr: 0x11F60, symSize: 0x124 } - - { offsetInCU: 0x112B, offset: 0x87C8E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvg', symObjAddr: 0x6C, symBinAddr: 0x10CC0, symSize: 0x48 } - - { offsetInCU: 0x11A8, offset: 0x87D0B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfc', symObjAddr: 0x124, symBinAddr: 0x10D78, symSize: 0x6C } - - { offsetInCU: 0x11EF, offset: 0x87D52, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0x228, symBinAddr: 0x10E7C, symSize: 0xAC } - - { offsetInCU: 0x1253, offset: 0x87DB6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x384, symBinAddr: 0x10FD8, symSize: 0xB8 } - - { offsetInCU: 0x12DE, offset: 0x87E41, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtF', symObjAddr: 0x61C, symBinAddr: 0x111B8, symSize: 0x4 } - - { offsetInCU: 0x12FF, offset: 0x87E62, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfC', symObjAddr: 0x66C, symBinAddr: 0x11208, symSize: 0x74 } - - { offsetInCU: 0x1313, offset: 0x87E76, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfc', symObjAddr: 0x6E0, symBinAddr: 0x1127C, symSize: 0x2C } - - { offsetInCU: 0x142C, offset: 0x87F8F, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VF', symObjAddr: 0x75C, symBinAddr: 0x112F8, symSize: 0x2AC } - - { offsetInCU: 0x17D6, offset: 0x88339, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvg', symObjAddr: 0xB14, symBinAddr: 0x116B0, symSize: 0x44 } - - { offsetInCU: 0x1815, offset: 0x88378, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvs', symObjAddr: 0xBA0, symBinAddr: 0x1173C, symSize: 0x48 } - - { offsetInCU: 0x183A, offset: 0x8839D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM', symObjAddr: 0xBE8, symBinAddr: 0x11784, symSize: 0x44 } - - { offsetInCU: 0x185F, offset: 0x883C2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM.resume.0', symObjAddr: 0xC2C, symBinAddr: 0x117C8, symSize: 0x4 } - - { offsetInCU: 0x1886, offset: 0x883E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfC', symObjAddr: 0xC30, symBinAddr: 0x117CC, symSize: 0x20 } - - { offsetInCU: 0x189A, offset: 0x883FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfc', symObjAddr: 0xC50, symBinAddr: 0x117EC, symSize: 0x6C } - - { offsetInCU: 0x18E1, offset: 0x88444, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0xD88, symBinAddr: 0x11924, symSize: 0xAC } - - { offsetInCU: 0x1940, offset: 0x884A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0xEE4, symBinAddr: 0x11A80, symSize: 0xAC } - - { offsetInCU: 0x19DE, offset: 0x88541, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x10E8, symBinAddr: 0x11C80, symSize: 0xBC } - - { offsetInCU: 0x1AC0, offset: 0x88623, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFs5UInt8V_Tg5', symObjAddr: 0x1258, symBinAddr: 0x11D3C, symSize: 0xB4 } - - { offsetInCU: 0x1BCC, offset: 0x8872F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTf4ddn_n', symObjAddr: 0x1478, symBinAddr: 0x11EDC, symSize: 0x84 } - - { offsetInCU: 0x1CC5, offset: 0x88828, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTf4dn_n', symObjAddr: 0x16D8, symBinAddr: 0x1213C, symSize: 0x360 } - - { offsetInCU: 0x4F, offset: 0x88C66, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LLSo012OS_dispatch_E0CvpZ', symObjAddr: 0x980, symBinAddr: 0x116EC90, symSize: 0x0 } - - { offsetInCU: 0x5D, offset: 0x88C74, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x12688, symSize: 0x2C } - - { offsetInCU: 0x75, offset: 0x88C8C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LL_WZ', symObjAddr: 0x2C, symBinAddr: 0x126B4, symSize: 0x10C } - - { offsetInCU: 0xBC, offset: 0x88CD3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0x13C, symBinAddr: 0x127C4, symSize: 0x44 } - - { offsetInCU: 0x132, offset: 0x88D49, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTo', symObjAddr: 0x3E4, symBinAddr: 0x12A6C, symSize: 0x80 } - - { offsetInCU: 0x191, offset: 0x88DA8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfcTo', symObjAddr: 0x4B4, symBinAddr: 0x12B3C, symSize: 0x3C } - - { offsetInCU: 0x1E2, offset: 0x88DF9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTf4nnnd_n', symObjAddr: 0x524, symBinAddr: 0x12BAC, symSize: 0x214 } - - { offsetInCU: 0x261, offset: 0x88E78, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfETo', symObjAddr: 0x520, symBinAddr: 0x12BA8, symSize: 0x4 } - - { offsetInCU: 0x29D, offset: 0x88EB4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCMa', symObjAddr: 0x738, symBinAddr: 0x12DC0, symSize: 0x20 } - - { offsetInCU: 0x2BC, offset: 0x88ED3, size: 0x8, addend: 0x0, symName: '_$s10ObjectiveC8ObjCBoolVIeyBy_SbIegy_TRTA', symObjAddr: 0x77C, symBinAddr: 0x12E04, symSize: 0x14 } - - { offsetInCU: 0x2E5, offset: 0x88EFC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_TA', symObjAddr: 0x7BC, symBinAddr: 0x12E44, symSize: 0xC } - - { offsetInCU: 0x2F9, offset: 0x88F10, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x7C8, symBinAddr: 0x12E50, symSize: 0x10 } - - { offsetInCU: 0x30D, offset: 0x88F24, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x7D8, symBinAddr: 0x12E60, symSize: 0x8 } - - { offsetInCU: 0x321, offset: 0x88F38, size: 0x8, addend: 0x0, symName: '_$sSay8Dispatch0A13WorkItemFlagsVGMa', symObjAddr: 0x860, symBinAddr: 0x12EA8, symSize: 0x54 } - - { offsetInCU: 0x335, offset: 0x88F4C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0x8F0, symBinAddr: 0x12EFC, symSize: 0x24 } - - { offsetInCU: 0x369, offset: 0x88F80, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU_TA', symObjAddr: 0x938, symBinAddr: 0x12F44, symSize: 0x24 } - - { offsetInCU: 0x4FE, offset: 0x89115, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x127C0, symSize: 0x4 } - - { offsetInCU: 0x52C, offset: 0x89143, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x127C0, symSize: 0x4 } - - { offsetInCU: 0x58B, offset: 0x891A2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZ', symObjAddr: 0x180, symBinAddr: 0x12808, symSize: 0x4 } - - { offsetInCU: 0x59F, offset: 0x891B6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_', symObjAddr: 0x184, symBinAddr: 0x1280C, symSize: 0x260 } - - { offsetInCU: 0x678, offset: 0x8928F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfC', symObjAddr: 0x464, symBinAddr: 0x12AEC, symSize: 0x20 } - - { offsetInCU: 0x68C, offset: 0x892A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfc', symObjAddr: 0x484, symBinAddr: 0x12B0C, symSize: 0x30 } - - { offsetInCU: 0x6C2, offset: 0x892D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfD', symObjAddr: 0x4F0, symBinAddr: 0x12B78, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x8937F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x12F7C, symSize: 0x20 } - - { offsetInCU: 0x77, offset: 0x893CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfcTo', symObjAddr: 0x70, symBinAddr: 0x12FEC, symSize: 0x3C } - - { offsetInCU: 0xC9, offset: 0x89421, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCMa', symObjAddr: 0x50, symBinAddr: 0x12FCC, symSize: 0x20 } - - { offsetInCU: 0x214, offset: 0x8956C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x12F7C, symSize: 0x20 } - - { offsetInCU: 0x228, offset: 0x89580, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfc', symObjAddr: 0x20, symBinAddr: 0x12F9C, symSize: 0x30 } - - { offsetInCU: 0x264, offset: 0x895BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCfD', symObjAddr: 0xAC, symBinAddr: 0x13028, symSize: 0x30 } - - { offsetInCU: 0x26, offset: 0x89605, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x33AC14, symSize: 0x265C } - - { offsetInCU: 0x40, offset: 0x8961F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9DE0, symBinAddr: 0xA37310, symSize: 0x0 } - - { offsetInCU: 0x92, offset: 0x89671, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFDE0, symBinAddr: 0xA3D310, symSize: 0x0 } - - { offsetInCU: 0xF6, offset: 0x896D5, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFE08, symBinAddr: 0xA3D338, symSize: 0x0 } - - { offsetInCU: 0x10C, offset: 0x896EB, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x10210, symBinAddr: 0xA3D740, symSize: 0x0 } - - { offsetInCU: 0x123, offset: 0x89702, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFE50, symBinAddr: 0xA3D380, symSize: 0x0 } - - { offsetInCU: 0x9C2, offset: 0x89FA1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x33AC14, symSize: 0x265C } - - { offsetInCU: 0x45CD, offset: 0x8DBAC, size: 0x8, addend: 0x0, symName: _fe_frombytes, symObjAddr: 0x265C, symBinAddr: 0x33D270, symSize: 0x134 } - - { offsetInCU: 0x46F3, offset: 0x8DCD2, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x9918, symBinAddr: 0x34452C, symSize: 0x21C } - - { offsetInCU: 0x4922, offset: 0x8DF01, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4FDC, symBinAddr: 0x33FBF0, symSize: 0x1B8 } - - { offsetInCU: 0x530F, offset: 0x8E8EE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x2790, symBinAddr: 0x33D3A4, symSize: 0x5BC } - - { offsetInCU: 0x5F72, offset: 0x8F551, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2D4C, symBinAddr: 0x33D960, symSize: 0x7F8 } - - { offsetInCU: 0x642A, offset: 0x8FA09, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3544, symBinAddr: 0x33E158, symSize: 0x208 } - - { offsetInCU: 0x69F8, offset: 0x8FFD7, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x374C, symBinAddr: 0x33E360, symSize: 0x7B0 } - - { offsetInCU: 0x77D8, offset: 0x90DB7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3EFC, symBinAddr: 0x33EB10, symSize: 0x634 } - - { offsetInCU: 0x8199, offset: 0x91778, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x4530, symBinAddr: 0x33F144, symSize: 0xAAC } - - { offsetInCU: 0x956A, offset: 0x92B49, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x5298, symBinAddr: 0x33FEAC, symSize: 0x23F8 } - - { offsetInCU: 0xCABB, offset: 0x9609A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x5194, symBinAddr: 0x33FDA8, symSize: 0x104 } - - { offsetInCU: 0xCD03, offset: 0x962E2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x7690, symBinAddr: 0x3422A4, symSize: 0x30 } - - { offsetInCU: 0xCDF4, offset: 0x963D3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x76C0, symBinAddr: 0x3422D4, symSize: 0x58 } - - { offsetInCU: 0xCE69, offset: 0x96448, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7718, symBinAddr: 0x34232C, symSize: 0x4 } - - { offsetInCU: 0xCEB1, offset: 0x96490, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7718, symBinAddr: 0x34232C, symSize: 0x4 } - - { offsetInCU: 0xCEE0, offset: 0x964BF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7718, symBinAddr: 0x34232C, symSize: 0x4 } - - { offsetInCU: 0xCF04, offset: 0x964E3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x771C, symBinAddr: 0x342330, symSize: 0x8C } - - { offsetInCU: 0xD039, offset: 0x96618, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x77A8, symBinAddr: 0x3423BC, symSize: 0x4 } - - { offsetInCU: 0xD072, offset: 0x96651, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x77A8, symBinAddr: 0x3423BC, symSize: 0x4 } - - { offsetInCU: 0xD30B, offset: 0x968EA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x77AC, symBinAddr: 0x3423C0, symSize: 0x1598 } - - { offsetInCU: 0x10654, offset: 0x99C33, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x9B34, symBinAddr: 0x344748, symSize: 0x218 } - - { offsetInCU: 0x10C86, offset: 0x9A265, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8D44, symBinAddr: 0x343958, symSize: 0x20 } - - { offsetInCU: 0x11123, offset: 0x9A702, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8D64, symBinAddr: 0x343978, symSize: 0xBB4 } - - { offsetInCU: 0x26, offset: 0x9B4E5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x344960, symSize: 0x1F4 } - - { offsetInCU: 0x1D2, offset: 0x9B691, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x344960, symSize: 0x1F4 } - - { offsetInCU: 0x26, offset: 0x9B92C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x344B54, symSize: 0x3C } - - { offsetInCU: 0x34, offset: 0x9B93A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x344B54, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0x9BA4A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x344B90, symSize: 0x98 } - - { offsetInCU: 0x34, offset: 0x9BA58, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x344B90, symSize: 0x98 } - - { offsetInCU: 0x86, offset: 0x9BBBB, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1100, symBinAddr: 0xA3D7F0, symSize: 0x0 } - - { offsetInCU: 0xB8, offset: 0x9BBED, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1090, symBinAddr: 0xA3D780, symSize: 0x0 } - - { offsetInCU: 0xDA, offset: 0x9BC0F, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x10C0, symBinAddr: 0xA3D7B0, symSize: 0x0 } - - { offsetInCU: 0xF0, offset: 0x9BC25, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x10F0, symBinAddr: 0xA3D7E0, symSize: 0x0 } - - { offsetInCU: 0x3B7, offset: 0x9BEEC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x344C28, symSize: 0x18 } - - { offsetInCU: 0x3FB, offset: 0x9BF30, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x344C28, symSize: 0x18 } - - { offsetInCU: 0x594, offset: 0x9C0C9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0x344C40, symSize: 0x18 } - - { offsetInCU: 0x63F, offset: 0x9C174, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0x344C58, symSize: 0x320 } - - { offsetInCU: 0x1199, offset: 0x9CCCE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x5B0, symBinAddr: 0x344F78, symSize: 0xAC } - - { offsetInCU: 0x148F, offset: 0x9CFC4, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x65C, symBinAddr: 0x345024, symSize: 0x500 } - - { offsetInCU: 0x268C, offset: 0x9E1C1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB5C, symBinAddr: 0x345524, symSize: 0x2C8 } - - { offsetInCU: 0x2CDB, offset: 0x9E810, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xE24, symBinAddr: 0x3457EC, symSize: 0xF4 } - - { offsetInCU: 0x2EED, offset: 0x9EA22, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xF18, symBinAddr: 0x3458E0, symSize: 0x168 } - - { offsetInCU: 0x26, offset: 0x9ED87, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x345A48, symSize: 0x38 } - - { offsetInCU: 0xFA, offset: 0x9EE5B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x345A48, symSize: 0x38 } - - { offsetInCU: 0x12C, offset: 0x9EE8D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x345A48, symSize: 0x38 } - - { offsetInCU: 0x199, offset: 0x9EEFA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x345A80, symSize: 0x3C } - - { offsetInCU: 0x1F3, offset: 0x9EF54, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x345A80, symSize: 0x3C } - - { offsetInCU: 0x31B, offset: 0x9F07C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0x345ABC, symSize: 0x5C } - - { offsetInCU: 0x517, offset: 0x9F278, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0x345B18, symSize: 0x1C } - - { offsetInCU: 0x636, offset: 0x9F397, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0x345B34, symSize: 0x54 } - - { offsetInCU: 0x6D9, offset: 0x9F43A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0x345B88, symSize: 0x4C } - - { offsetInCU: 0x8A7, offset: 0x9F608, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x345BD4, symSize: 0xA8 } - - { offsetInCU: 0x90B, offset: 0x9F66C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x345BD4, symSize: 0xA8 } - - { offsetInCU: 0xBAA, offset: 0x9F90B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0x345C7C, symSize: 0x110 } - - { offsetInCU: 0xC4C, offset: 0x9F9AD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0x345C7C, symSize: 0x110 } - - { offsetInCU: 0xEDE, offset: 0x9FC3F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x344, symBinAddr: 0x345D8C, symSize: 0xB0 } - - { offsetInCU: 0xF5E, offset: 0x9FCBF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x344, symBinAddr: 0x345D8C, symSize: 0xB0 } - - { offsetInCU: 0x10E1, offset: 0x9FE42, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x3F4, symBinAddr: 0x345E3C, symSize: 0x178 } - - { offsetInCU: 0x13AB, offset: 0xA010C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x56C, symBinAddr: 0x345FB4, symSize: 0x1F4 } - - { offsetInCU: 0x1500, offset: 0xA0261, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x760, symBinAddr: 0x3461A8, symSize: 0x18 } - - { offsetInCU: 0x1567, offset: 0xA02C8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x778, symBinAddr: 0x3461C0, symSize: 0xC } - - { offsetInCU: 0x15A0, offset: 0xA0301, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x784, symBinAddr: 0x3461CC, symSize: 0x8 } - - { offsetInCU: 0x1624, offset: 0xA0385, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x78C, symBinAddr: 0x3461D4, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0xA0538, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x346210, symSize: 0x170 } - - { offsetInCU: 0x34, offset: 0xA0546, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x346210, symSize: 0x170 } - - { offsetInCU: 0x34, offset: 0xA064C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x374, symBinAddr: 0x1175FD0, symSize: 0x0 } - - { offsetInCU: 0x26, offset: 0xA068E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x346380, symSize: 0x388 } - - { offsetInCU: 0x76, offset: 0xA06DE, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0xA3E000, symSize: 0x0 } - - { offsetInCU: 0xFA, offset: 0xA0762, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0xA63000, symSize: 0x0 } - - { offsetInCU: 0x35B, offset: 0xA09C3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x346380, symSize: 0x388 } - - { offsetInCU: 0xC66, offset: 0xA12CE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x388, symBinAddr: 0x346708, symSize: 0x204 } - - { offsetInCU: 0x1171, offset: 0xA17D9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x58C, symBinAddr: 0x34690C, symSize: 0x1BC } - - { offsetInCU: 0x10, offset: 0xA1BAE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x346AE0, symSize: 0x1A0 } - - { offsetInCU: 0x50, offset: 0xA1BEE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x346AE0, symSize: 0x1A0 } - - { offsetInCU: 0x5E, offset: 0xA1BFC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0x346C80, symSize: 0x60 } - - { offsetInCU: 0x81, offset: 0xA1C1F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0x346CE0, symSize: 0x288 } - - { offsetInCU: 0x10, offset: 0xA1C10, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x346F70, symSize: 0x130 } - - { offsetInCU: 0x48, offset: 0xA1C48, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x346F70, symSize: 0x130 } - - { offsetInCU: 0x5F, offset: 0xA1C5F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0x3470A0, symSize: 0x70 } - - { offsetInCU: 0x75, offset: 0xA1C75, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0x347110, symSize: 0x160 } - - { offsetInCU: 0x7A, offset: 0xA1C7A, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0x347270, symSize: 0x378 } - - { offsetInCU: 0x10, offset: 0xA1C88, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x347600, symSize: 0x3A0 } - - { offsetInCU: 0x48, offset: 0xA1CC0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x347600, symSize: 0x3A0 } - - { offsetInCU: 0x4C, offset: 0xA1CC4, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0x3479A0, symSize: 0x6C0 } - - { offsetInCU: 0x66, offset: 0xA1CDE, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0x348060, symSize: 0x1138 } - - { offsetInCU: 0x50, offset: 0xA1D2A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0x349300, symSize: 0x1180 } - - { offsetInCU: 0x66, offset: 0xA1D40, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0x34A480, symSize: 0x1410 } - - { offsetInCU: 0x10, offset: 0xA1D36, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x34B8A0, symSize: 0x240 } - - { offsetInCU: 0x45, offset: 0xA1D6B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x34B8A0, symSize: 0x240 } - - { offsetInCU: 0x4D, offset: 0xA1D73, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0x34BAE0, symSize: 0x9E0 } - - { offsetInCU: 0x63, offset: 0xA1D89, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0x34C4C0, symSize: 0x650 } - - { offsetInCU: 0x10, offset: 0xA1D98, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x34CB20, symSize: 0x40 } - - { offsetInCU: 0x47, offset: 0xA1DCF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x34CB20, symSize: 0x40 } - - { offsetInCU: 0x5D, offset: 0xA1DE5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0x34CB60, symSize: 0x40 } - - { offsetInCU: 0x76, offset: 0xA1DFE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0x34CBA0, symSize: 0x40 } - - { offsetInCU: 0x81, offset: 0xA1E09, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0x34CBE0, symSize: 0x1E0 } - - { offsetInCU: 0x97, offset: 0xA1E1F, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0x34CDC0, symSize: 0x170 } - - { offsetInCU: 0xAB, offset: 0xA1E33, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0x34CF30, symSize: 0x50 } - - { offsetInCU: 0xC3, offset: 0xA1E4B, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0x34CF80, symSize: 0x50 } - - { offsetInCU: 0xD9, offset: 0xA1E61, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0x34CFD0, symSize: 0x50 } - - { offsetInCU: 0xEF, offset: 0xA1E77, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0x34D020, symSize: 0x60 } - - { offsetInCU: 0x111, offset: 0xA1E99, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0x34D080, symSize: 0x1E0 } - - { offsetInCU: 0x124, offset: 0xA1EAC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0x34D260, symSize: 0x360 } - - { offsetInCU: 0x141, offset: 0xA1EC9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0x34D5C0, symSize: 0x2D0 } - - { offsetInCU: 0x156, offset: 0xA1EDE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0x34D890, symSize: 0x2B0 } - - { offsetInCU: 0x170, offset: 0xA1EF8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0x34DB40, symSize: 0x250 } - - { offsetInCU: 0x184, offset: 0xA1F0C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0x34DD90, symSize: 0x60 } - - { offsetInCU: 0x19A, offset: 0xA1F22, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0x34DDF0, symSize: 0x44 } - - { offsetInCU: 0x10, offset: 0xA1F18, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x34DE40, symSize: 0xB90 } - - { offsetInCU: 0x4C, offset: 0xA1F54, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x34DE40, symSize: 0xB90 } - - { offsetInCU: 0x62, offset: 0xA1F6A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0x34E9D0, symSize: 0xB98 } - - { offsetInCU: 0x10, offset: 0xA1F64, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x34F580, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA1FA5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x34F580, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA1FA5, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x3503C0, symSize: 0x7E0 } - - { offsetInCU: 0x10, offset: 0xA1FB0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x350BC0, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA1FF1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x350BC0, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA1FF1, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x351A00, symSize: 0x1F0 } + - { offsetInCU: 0x34, offset: 0x778CB, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionString, symObjAddr: 0x0, symBinAddr: 0x971000, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0x77900, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionNumber, symObjAddr: 0x38, symBinAddr: 0x971038, symSize: 0x0 } + - { offsetInCU: 0x3F, offset: 0x77955, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x28, symBinAddr: 0x4028, symSize: 0xC } + - { offsetInCU: 0x53, offset: 0x77969, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x34, symBinAddr: 0x4034, symSize: 0x4 } + - { offsetInCU: 0x67, offset: 0x7797D, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x38, symBinAddr: 0x4038, symSize: 0x20 } + - { offsetInCU: 0x7B, offset: 0x77991, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x58, symBinAddr: 0x4058, symSize: 0x28 } + - { offsetInCU: 0x8F, offset: 0x779A5, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwCP', symObjAddr: 0x94, symBinAddr: 0x4094, symSize: 0x30 } + - { offsetInCU: 0xA3, offset: 0x779B9, size: 0x8, addend: 0x0, symName: ___swift_memcpy32_8, symObjAddr: 0xC4, symBinAddr: 0x40C4, symSize: 0xC } + - { offsetInCU: 0xB7, offset: 0x779CD, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwet', symObjAddr: 0xD0, symBinAddr: 0x40D0, symSize: 0x20 } + - { offsetInCU: 0xCB, offset: 0x779E1, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwst', symObjAddr: 0xF0, symBinAddr: 0x40F0, symSize: 0x2C } + - { offsetInCU: 0x4F, offset: 0x77BCA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC11_WriteQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2AE8, symBinAddr: 0x116E800, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0x77BE4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10_ReadQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2AF0, symBinAddr: 0x116E808, symSize: 0x0 } + - { offsetInCU: 0x9D, offset: 0x77C18, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTo', symObjAddr: 0x4, symBinAddr: 0x4194, symSize: 0x38 } + - { offsetInCU: 0xF3, offset: 0x77C6E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x40, symBinAddr: 0x41D0, symSize: 0x70 } + - { offsetInCU: 0x144, offset: 0x77CBF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0xB4, symBinAddr: 0x4244, symSize: 0x44 } + - { offsetInCU: 0x19F, offset: 0x77D1A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0xFC, symBinAddr: 0x428C, symSize: 0x50 } + - { offsetInCU: 0x204, offset: 0x77D7F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0x150, symBinAddr: 0x42E0, symSize: 0x68 } + - { offsetInCU: 0x27D, offset: 0x77DF8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x1BC, symBinAddr: 0x434C, symSize: 0x98 } + - { offsetInCU: 0x2DA, offset: 0x77E55, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x258, symBinAddr: 0x43E8, symSize: 0x14 } + - { offsetInCU: 0x35C, offset: 0x77ED7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x270, symBinAddr: 0x4400, symSize: 0x14 } + - { offsetInCU: 0x40B, offset: 0x77F86, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZTo', symObjAddr: 0x2C8, symBinAddr: 0x4458, symSize: 0x50 } + - { offsetInCU: 0x4DC, offset: 0x78057, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZTo', symObjAddr: 0x364, symBinAddr: 0x44F4, symSize: 0x58 } + - { offsetInCU: 0x5B6, offset: 0x78131, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZTo', symObjAddr: 0x404, symBinAddr: 0x4594, symSize: 0x58 } + - { offsetInCU: 0x695, offset: 0x78210, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZTo', symObjAddr: 0x4AC, symBinAddr: 0x463C, symSize: 0x60 } + - { offsetInCU: 0x741, offset: 0x782BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZTo', symObjAddr: 0x510, symBinAddr: 0x46A0, symSize: 0x8 } + - { offsetInCU: 0x7AA, offset: 0x78325, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZTo', symObjAddr: 0x51C, symBinAddr: 0x46AC, symSize: 0x8 } + - { offsetInCU: 0x801, offset: 0x7837C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZTo', symObjAddr: 0x538, symBinAddr: 0x46C8, symSize: 0x8 } + - { offsetInCU: 0x858, offset: 0x783D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZTo', symObjAddr: 0x544, symBinAddr: 0x46D4, symSize: 0x8 } + - { offsetInCU: 0x8AF, offset: 0x7842A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZTo', symObjAddr: 0x550, symBinAddr: 0x46E0, symSize: 0x8 } + - { offsetInCU: 0x906, offset: 0x78481, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZTo', symObjAddr: 0x55C, symBinAddr: 0x46EC, symSize: 0x8 } + - { offsetInCU: 0x985, offset: 0x78500, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZTo', symObjAddr: 0x56C, symBinAddr: 0x46FC, symSize: 0x24 } + - { offsetInCU: 0xA36, offset: 0x785B1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZTo', symObjAddr: 0x594, symBinAddr: 0x4724, symSize: 0x14 } + - { offsetInCU: 0xAA9, offset: 0x78624, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZTo', symObjAddr: 0x5AC, symBinAddr: 0x473C, symSize: 0x8 } + - { offsetInCU: 0xB00, offset: 0x7867B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZTo', symObjAddr: 0x60C, symBinAddr: 0x479C, symSize: 0x74 } + - { offsetInCU: 0xB8B, offset: 0x78706, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTo', symObjAddr: 0x814, symBinAddr: 0x49A4, symSize: 0xA0 } + - { offsetInCU: 0xBDC, offset: 0x78757, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZTo', symObjAddr: 0xB1C, symBinAddr: 0x4CAC, symSize: 0x98 } + - { offsetInCU: 0xC2D, offset: 0x787A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZTo', symObjAddr: 0xE70, symBinAddr: 0x5000, symSize: 0x98 } + - { offsetInCU: 0xC89, offset: 0x78804, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTo', symObjAddr: 0x1298, symBinAddr: 0x5428, symSize: 0xD8 } + - { offsetInCU: 0xCD1, offset: 0x7884C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTo', symObjAddr: 0x1374, symBinAddr: 0x5504, symSize: 0x34 } + - { offsetInCU: 0xD31, offset: 0x788AC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfcTo', symObjAddr: 0x13F8, symBinAddr: 0x5588, symSize: 0x3C } + - { offsetInCU: 0xD82, offset: 0x788FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTf4nd_n', symObjAddr: 0x1468, symBinAddr: 0x55F8, symSize: 0x2AC } + - { offsetInCU: 0xFB6, offset: 0x78B31, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTf4nnnd_n', symObjAddr: 0x1714, symBinAddr: 0x58A4, symSize: 0x264 } + - { offsetInCU: 0x11B0, offset: 0x78D2B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTf4nnd_n', symObjAddr: 0x1978, symBinAddr: 0x5B08, symSize: 0xEC } + - { offsetInCU: 0x12AD, offset: 0x78E28, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTf4nnnnd_n', symObjAddr: 0x1A64, symBinAddr: 0x5BF4, symSize: 0x1B4 } + - { offsetInCU: 0x1422, offset: 0x78F9D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTf4nnnnnnd_n', symObjAddr: 0x1C18, symBinAddr: 0x5DA8, symSize: 0x1CC } + - { offsetInCU: 0x15B7, offset: 0x79132, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTf4nnnnnnnnnnd_n', symObjAddr: 0x1DE4, symBinAddr: 0x5F74, symSize: 0x1E0 } + - { offsetInCU: 0x17A3, offset: 0x7931E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTf4nnnd_n', symObjAddr: 0x1FC4, symBinAddr: 0x6154, symSize: 0x1B4 } + - { offsetInCU: 0x186D, offset: 0x793E8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTf4nnnnd_n', symObjAddr: 0x231C, symBinAddr: 0x64AC, symSize: 0x1D4 } + - { offsetInCU: 0x194E, offset: 0x794C9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTf4d_n', symObjAddr: 0x24F0, symBinAddr: 0x6680, symSize: 0x114 } + - { offsetInCU: 0x19F9, offset: 0x79574, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TR', symObjAddr: 0x8B4, symBinAddr: 0x4A44, symSize: 0x78 } + - { offsetInCU: 0x1A11, offset: 0x7958C, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TR', symObjAddr: 0xBB4, symBinAddr: 0x4D44, symSize: 0x54 } + - { offsetInCU: 0x1A7E, offset: 0x795F9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfETo', symObjAddr: 0x1464, symBinAddr: 0x55F4, symSize: 0x4 } + - { offsetInCU: 0x1B09, offset: 0x79684, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCMa', symObjAddr: 0x2604, symBinAddr: 0x6794, symSize: 0x20 } + - { offsetInCU: 0x1B1D, offset: 0x79698, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TRTA', symObjAddr: 0x2648, symBinAddr: 0x67D8, symSize: 0x8 } + - { offsetInCU: 0x1B3C, offset: 0x796B7, size: 0x8, addend: 0x0, symName: '_$sSo7NSErrorCSg10ObjectiveC8ObjCBoolVIeyByy_ACSbIeggy_TRTA', symObjAddr: 0x2650, symBinAddr: 0x67E0, symSize: 0x18 } + - { offsetInCU: 0x1B65, offset: 0x796E0, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TRTA', symObjAddr: 0x2668, symBinAddr: 0x67F8, symSize: 0x8 } + - { offsetInCU: 0x1B79, offset: 0x796F4, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCMa', symObjAddr: 0x2670, symBinAddr: 0x6800, symSize: 0x3C } + - { offsetInCU: 0x1B8D, offset: 0x79708, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_TA', symObjAddr: 0x26F0, symBinAddr: 0x6880, symSize: 0x34 } + - { offsetInCU: 0x1BA1, offset: 0x7971C, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x2724, symBinAddr: 0x68B4, symSize: 0x10 } + - { offsetInCU: 0x1BB5, offset: 0x79730, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x2734, symBinAddr: 0x68C4, symSize: 0x8 } + - { offsetInCU: 0x1BC9, offset: 0x79744, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2760, symBinAddr: 0x68F0, symSize: 0x40 } + - { offsetInCU: 0x1BFD, offset: 0x79778, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x27E4, symBinAddr: 0x6974, symSize: 0x40 } + - { offsetInCU: 0x1C3B, offset: 0x797B6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2824, symBinAddr: 0x69B4, symSize: 0x28 } + - { offsetInCU: 0x1C6F, offset: 0x797EA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x28A4, symBinAddr: 0x6A34, symSize: 0x3C } + - { offsetInCU: 0x1CA3, offset: 0x7981E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x290C, symBinAddr: 0x6A9C, symSize: 0x30 } + - { offsetInCU: 0x1CDF, offset: 0x7985A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_TA', symObjAddr: 0x2978, symBinAddr: 0x6B08, symSize: 0x10 } + - { offsetInCU: 0x1CF3, offset: 0x7986E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2988, symBinAddr: 0x6B18, symSize: 0x40 } + - { offsetInCU: 0x21C0, offset: 0x79D3B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZ', symObjAddr: 0x0, symBinAddr: 0x4190, symSize: 0x4 } + - { offsetInCU: 0x21DB, offset: 0x79D56, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x3C, symBinAddr: 0x41CC, symSize: 0x4 } + - { offsetInCU: 0x21F6, offset: 0x79D71, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0xB0, symBinAddr: 0x4240, symSize: 0x4 } + - { offsetInCU: 0x2217, offset: 0x79D92, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0xF8, symBinAddr: 0x4288, symSize: 0x4 } + - { offsetInCU: 0x2232, offset: 0x79DAD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0x14C, symBinAddr: 0x42DC, symSize: 0x4 } + - { offsetInCU: 0x224D, offset: 0x79DC8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x1B8, symBinAddr: 0x4348, symSize: 0x4 } + - { offsetInCU: 0x2268, offset: 0x79DE3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x254, symBinAddr: 0x43E4, symSize: 0x4 } + - { offsetInCU: 0x22F6, offset: 0x79E71, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x26C, symBinAddr: 0x43FC, symSize: 0x4 } + - { offsetInCU: 0x2375, offset: 0x79EF0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZ', symObjAddr: 0x284, symBinAddr: 0x4414, symSize: 0x44 } + - { offsetInCU: 0x24B3, offset: 0x7A02E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZ', symObjAddr: 0x318, symBinAddr: 0x44A8, symSize: 0x4C } + - { offsetInCU: 0x25FC, offset: 0x7A177, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZ', symObjAddr: 0x3BC, symBinAddr: 0x454C, symSize: 0x48 } + - { offsetInCU: 0x2744, offset: 0x7A2BF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZ', symObjAddr: 0x45C, symBinAddr: 0x45EC, symSize: 0x50 } + - { offsetInCU: 0x28A1, offset: 0x7A41C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZ', symObjAddr: 0x50C, symBinAddr: 0x469C, symSize: 0x4 } + - { offsetInCU: 0x2913, offset: 0x7A48E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZ', symObjAddr: 0x518, symBinAddr: 0x46A8, symSize: 0x4 } + - { offsetInCU: 0x2956, offset: 0x7A4D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZ', symObjAddr: 0x524, symBinAddr: 0x46B4, symSize: 0x14 } + - { offsetInCU: 0x299B, offset: 0x7A516, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZ', symObjAddr: 0x540, symBinAddr: 0x46D0, symSize: 0x4 } + - { offsetInCU: 0x29DE, offset: 0x7A559, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZ', symObjAddr: 0x54C, symBinAddr: 0x46DC, symSize: 0x4 } + - { offsetInCU: 0x2A21, offset: 0x7A59C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZ', symObjAddr: 0x558, symBinAddr: 0x46E8, symSize: 0x4 } + - { offsetInCU: 0x2A64, offset: 0x7A5DF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZ', symObjAddr: 0x564, symBinAddr: 0x46F4, symSize: 0x8 } + - { offsetInCU: 0x2B4B, offset: 0x7A6C6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ', symObjAddr: 0x590, symBinAddr: 0x4720, symSize: 0x4 } + - { offsetInCU: 0x2BCA, offset: 0x7A745, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZ', symObjAddr: 0x5A8, symBinAddr: 0x4738, symSize: 0x4 } + - { offsetInCU: 0x2C0D, offset: 0x7A788, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZ', symObjAddr: 0x5B4, symBinAddr: 0x4744, symSize: 0x58 } + - { offsetInCU: 0x2CCE, offset: 0x7A849, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZ', symObjAddr: 0x680, symBinAddr: 0x4810, symSize: 0x4 } + - { offsetInCU: 0x2CE2, offset: 0x7A85D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_', symObjAddr: 0x684, symBinAddr: 0x4814, symSize: 0x190 } + - { offsetInCU: 0x2D82, offset: 0x7A8FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZ', symObjAddr: 0x92C, symBinAddr: 0x4ABC, symSize: 0x2C } + - { offsetInCU: 0x2D96, offset: 0x7A911, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_', symObjAddr: 0x958, symBinAddr: 0x4AE8, symSize: 0x1C4 } + - { offsetInCU: 0x2E80, offset: 0x7A9FB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZ', symObjAddr: 0xC08, symBinAddr: 0x4D98, symSize: 0x2C } + - { offsetInCU: 0x2E94, offset: 0x7AA0F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_', symObjAddr: 0xC34, symBinAddr: 0x4DC4, symSize: 0x23C } + - { offsetInCU: 0x2F48, offset: 0x7AAC3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZ', symObjAddr: 0xF08, symBinAddr: 0x5098, symSize: 0x4 } + - { offsetInCU: 0x2F5C, offset: 0x7AAD7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_', symObjAddr: 0xF0C, symBinAddr: 0x509C, symSize: 0x38C } + - { offsetInCU: 0x31F3, offset: 0x7AD6E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZ', symObjAddr: 0x1370, symBinAddr: 0x5500, symSize: 0x4 } + - { offsetInCU: 0x320E, offset: 0x7AD89, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfC', symObjAddr: 0x13A8, symBinAddr: 0x5538, symSize: 0x20 } + - { offsetInCU: 0x3222, offset: 0x7AD9D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfc', symObjAddr: 0x13C8, symBinAddr: 0x5558, symSize: 0x30 } + - { offsetInCU: 0x3258, offset: 0x7ADD3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfD', symObjAddr: 0x1434, symBinAddr: 0x55C4, symSize: 0x30 } + - { offsetInCU: 0x4F, offset: 0x7B00B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LLSo7GLKViewCvpZ', symObjAddr: 0x5550, symBinAddr: 0x116E840, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0x7B025, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15_shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvpZ', symObjAddr: 0x5558, symBinAddr: 0x116E848, symSize: 0x0 } + - { offsetInCU: 0x83, offset: 0x7B03F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5storeSo19NSMutableDictionaryCvpZ', symObjAddr: 0x5560, symBinAddr: 0x116E850, symSize: 0x0 } + - { offsetInCU: 0x9D, offset: 0x7B059, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LLSo10NSMapTableCySo8NSStringCACGvpZ', symObjAddr: 0x5568, symBinAddr: 0x116E858, symSize: 0x0 } + - { offsetInCU: 0xAB, offset: 0x7B067, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0x0, symBinAddr: 0x6C40, symSize: 0x40 } + - { offsetInCU: 0xF0, offset: 0x7B0AC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5store_WZ', symObjAddr: 0x40, symBinAddr: 0x6C80, symSize: 0x30 } + - { offsetInCU: 0x135, offset: 0x7B0F1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0xA8, symBinAddr: 0x6CE8, symSize: 0x40 } + - { offsetInCU: 0x187, offset: 0x7B143, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x194, symBinAddr: 0x6DD4, symSize: 0x10 } + - { offsetInCU: 0x1A7, offset: 0x7B163, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x194, symBinAddr: 0x6DD4, symSize: 0x10 } + - { offsetInCU: 0x1DD, offset: 0x7B199, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x1A4, symBinAddr: 0x6DE4, symSize: 0x10 } + - { offsetInCU: 0x1FD, offset: 0x7B1B9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x1A4, symBinAddr: 0x6DE4, symSize: 0x10 } + - { offsetInCU: 0x236, offset: 0x7B1F2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x1B4, symBinAddr: 0x6DF4, symSize: 0x10 } + - { offsetInCU: 0x256, offset: 0x7B212, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x1B4, symBinAddr: 0x6DF4, symSize: 0x10 } + - { offsetInCU: 0x28C, offset: 0x7B248, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x1C4, symBinAddr: 0x6E04, symSize: 0x10 } + - { offsetInCU: 0x2AC, offset: 0x7B268, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x1C4, symBinAddr: 0x6E04, symSize: 0x10 } + - { offsetInCU: 0x2E5, offset: 0x7B2A1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvgTo', symObjAddr: 0x29C, symBinAddr: 0x6EDC, symSize: 0x44 } + - { offsetInCU: 0x322, offset: 0x7B2DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvsTo', symObjAddr: 0x324, symBinAddr: 0x6F64, symSize: 0x30 } + - { offsetInCU: 0x3B1, offset: 0x7B36D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvgTo', symObjAddr: 0x578, symBinAddr: 0x71B8, symSize: 0x44 } + - { offsetInCU: 0x409, offset: 0x7B3C5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvsTo', symObjAddr: 0x600, symBinAddr: 0x7240, symSize: 0x48 } + - { offsetInCU: 0x464, offset: 0x7B420, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvgTo', symObjAddr: 0x648, symBinAddr: 0x7288, symSize: 0x44 } + - { offsetInCU: 0x4BC, offset: 0x7B478, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvsTo', symObjAddr: 0x6D0, symBinAddr: 0x7310, symSize: 0x48 } + - { offsetInCU: 0x517, offset: 0x7B4D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0x718, symBinAddr: 0x7358, symSize: 0x10 } + - { offsetInCU: 0x537, offset: 0x7B4F3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0x718, symBinAddr: 0x7358, symSize: 0x10 } + - { offsetInCU: 0x56D, offset: 0x7B529, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0x728, symBinAddr: 0x7368, symSize: 0x10 } + - { offsetInCU: 0x58D, offset: 0x7B549, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0x728, symBinAddr: 0x7368, symSize: 0x10 } + - { offsetInCU: 0x5C6, offset: 0x7B582, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0x738, symBinAddr: 0x7378, symSize: 0x10 } + - { offsetInCU: 0x5E6, offset: 0x7B5A2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0x738, symBinAddr: 0x7378, symSize: 0x10 } + - { offsetInCU: 0x61E, offset: 0x7B5DA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvsTo', symObjAddr: 0x748, symBinAddr: 0x7388, symSize: 0x34 } + - { offsetInCU: 0x677, offset: 0x7B633, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x77C, symBinAddr: 0x73BC, symSize: 0x10 } + - { offsetInCU: 0x697, offset: 0x7B653, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x77C, symBinAddr: 0x73BC, symSize: 0x10 } + - { offsetInCU: 0x6CF, offset: 0x7B68B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvsTo', symObjAddr: 0x78C, symBinAddr: 0x73CC, symSize: 0x34 } + - { offsetInCU: 0x728, offset: 0x7B6E4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x7C0, symBinAddr: 0x7400, symSize: 0x10 } + - { offsetInCU: 0x748, offset: 0x7B704, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x7C0, symBinAddr: 0x7400, symSize: 0x10 } + - { offsetInCU: 0x77E, offset: 0x7B73A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x7D0, symBinAddr: 0x7410, symSize: 0x10 } + - { offsetInCU: 0x79E, offset: 0x7B75A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x7D0, symBinAddr: 0x7410, symSize: 0x10 } + - { offsetInCU: 0x7D7, offset: 0x7B793, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvgTo', symObjAddr: 0x7E0, symBinAddr: 0x7420, symSize: 0x10 } + - { offsetInCU: 0x7F7, offset: 0x7B7B3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvgTo', symObjAddr: 0x7E0, symBinAddr: 0x7420, symSize: 0x10 } + - { offsetInCU: 0x82D, offset: 0x7B7E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvsTo', symObjAddr: 0x7F0, symBinAddr: 0x7430, symSize: 0x10 } + - { offsetInCU: 0x84D, offset: 0x7B809, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvsTo', symObjAddr: 0x7F0, symBinAddr: 0x7430, symSize: 0x10 } + - { offsetInCU: 0x870, offset: 0x7B82C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivgTo', symObjAddr: 0x800, symBinAddr: 0x7440, symSize: 0x34 } + - { offsetInCU: 0x8A2, offset: 0x7B85E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivgTo', symObjAddr: 0x904, symBinAddr: 0x7544, symSize: 0x34 } + - { offsetInCU: 0x8EA, offset: 0x7B8A6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvgTo', symObjAddr: 0xA08, symBinAddr: 0x7648, symSize: 0x20 } + - { offsetInCU: 0x952, offset: 0x7B90E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvgTo', symObjAddr: 0xA4C, symBinAddr: 0x768C, symSize: 0x20 } + - { offsetInCU: 0x9F1, offset: 0x7B9AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btFTo', symObjAddr: 0xAB4, symBinAddr: 0x76F4, symSize: 0xC4 } + - { offsetInCU: 0xAB4, offset: 0x7BA70, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VFTo', symObjAddr: 0xD10, symBinAddr: 0x7950, symSize: 0x30 } + - { offsetInCU: 0xB64, offset: 0x7BB20, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x15C8, symBinAddr: 0x8208, symSize: 0xC4 } + - { offsetInCU: 0xBCE, offset: 0x7BB8A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtFTo', symObjAddr: 0x18E4, symBinAddr: 0x8524, symSize: 0xB0 } + - { offsetInCU: 0xC0B, offset: 0x7BBC7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x1A54, symBinAddr: 0x8694, symSize: 0xB8 } + - { offsetInCU: 0xC83, offset: 0x7BC3F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbFTo', symObjAddr: 0x1BF0, symBinAddr: 0x8830, symSize: 0x3C } + - { offsetInCU: 0xCB6, offset: 0x7BC72, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1C2C, symBinAddr: 0x886C, symSize: 0x10 } + - { offsetInCU: 0xCD6, offset: 0x7BC92, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1C2C, symBinAddr: 0x886C, symSize: 0x10 } + - { offsetInCU: 0xD10, offset: 0x7BCCC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvsTo', symObjAddr: 0x1C3C, symBinAddr: 0x887C, symSize: 0x34 } + - { offsetInCU: 0xD6B, offset: 0x7BD27, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyFTo', symObjAddr: 0x1CB8, symBinAddr: 0x88F8, symSize: 0x48 } + - { offsetInCU: 0xE05, offset: 0x7BDC1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VFTo', symObjAddr: 0x1D4C, symBinAddr: 0x898C, symSize: 0x64 } + - { offsetInCU: 0xECA, offset: 0x7BE86, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VFTo', symObjAddr: 0x1E08, symBinAddr: 0x8A48, symSize: 0x94 } + - { offsetInCU: 0xF57, offset: 0x7BF13, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC23enterBackgroundListeneryycSgvsTo', symObjAddr: 0x1EDC, symBinAddr: 0x8B1C, symSize: 0x6C } + - { offsetInCU: 0xFB9, offset: 0x7BF75, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC20becomeActiveListeneryycSgvsTo', symObjAddr: 0x1FEC, symBinAddr: 0x8C2C, symSize: 0x6C } + - { offsetInCU: 0x1016, offset: 0x7BFD2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvgTo', symObjAddr: 0x2058, symBinAddr: 0x8C98, symSize: 0xB0 } + - { offsetInCU: 0x1068, offset: 0x7C024, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvsTo', symObjAddr: 0x21D8, symBinAddr: 0x8E18, symSize: 0x94 } + - { offsetInCU: 0x10FA, offset: 0x7C0B6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x2E74, symBinAddr: 0x9AB4, symSize: 0x28 } + - { offsetInCU: 0x114F, offset: 0x7C10B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x38BC, symBinAddr: 0xA4FC, symSize: 0x20 } + - { offsetInCU: 0x1182, offset: 0x7C13E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x38DC, symBinAddr: 0xA51C, symSize: 0x10 } + - { offsetInCU: 0x11A2, offset: 0x7C15E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x38DC, symBinAddr: 0xA51C, symSize: 0x10 } + - { offsetInCU: 0x11DA, offset: 0x7C196, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvsTo', symObjAddr: 0x38EC, symBinAddr: 0xA52C, symSize: 0x34 } + - { offsetInCU: 0x1248, offset: 0x7C204, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvgTo', symObjAddr: 0x39A0, symBinAddr: 0xA5E0, symSize: 0x20 } + - { offsetInCU: 0x12A2, offset: 0x7C25E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvsTo', symObjAddr: 0x39C0, symBinAddr: 0xA600, symSize: 0x34 } + - { offsetInCU: 0x1302, offset: 0x7C2BE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgFTo', symObjAddr: 0x3A24, symBinAddr: 0xA664, symSize: 0x34 } + - { offsetInCU: 0x1446, offset: 0x7C402, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFTo', symObjAddr: 0x3D70, symBinAddr: 0xA9B0, symSize: 0x28 } + - { offsetInCU: 0x1479, offset: 0x7C435, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfDTo', symObjAddr: 0x409C, symBinAddr: 0xACDC, symSize: 0x24 } + - { offsetInCU: 0x14B4, offset: 0x7C470, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTo', symObjAddr: 0x4188, symBinAddr: 0xADC8, symSize: 0x34 } + - { offsetInCU: 0x14E7, offset: 0x7C4A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvgZTf4d_n', symObjAddr: 0x4B24, symBinAddr: 0xB764, symSize: 0x2A8 } + - { offsetInCU: 0x1664, offset: 0x7C620, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTf4nnd_n', symObjAddr: 0x4E90, symBinAddr: 0xBAD0, symSize: 0xA0 } + - { offsetInCU: 0x18E0, offset: 0x7C89C, size: 0x8, addend: 0x0, symName: '_$sIeg_IeyB_TR', symObjAddr: 0x1EB0, symBinAddr: 0x8AF0, symSize: 0x2C } + - { offsetInCU: 0x18F8, offset: 0x7C8B4, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_So8NSStringCABIeyByy_TR', symObjAddr: 0x2160, symBinAddr: 0x8DA0, symSize: 0x78 } + - { offsetInCU: 0x1910, offset: 0x7C8CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTK', symObjAddr: 0x22C8, symBinAddr: 0x8F08, symSize: 0x94 } + - { offsetInCU: 0x1948, offset: 0x7C904, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTk', symObjAddr: 0x235C, symBinAddr: 0x8F9C, symSize: 0xB8 } + - { offsetInCU: 0x198A, offset: 0x7C946, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TR', symObjAddr: 0x2414, symBinAddr: 0x9054, symSize: 0x6C } + - { offsetInCU: 0x1A3A, offset: 0x7C9F6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfETo', symObjAddr: 0x40C0, symBinAddr: 0xAD00, symSize: 0xC4 } + - { offsetInCU: 0x1A6A, offset: 0x7CA26, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOy', symObjAddr: 0x41BC, symBinAddr: 0xADFC, symSize: 0x10 } + - { offsetInCU: 0x1A7E, offset: 0x7CA3A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCMa', symObjAddr: 0x41CC, symBinAddr: 0xAE0C, symSize: 0x20 } + - { offsetInCU: 0x1A92, offset: 0x7CA4E, size: 0x8, addend: 0x0, symName: '_$ss29getContiguousArrayStorageType3fors01_bcD0CyxGmxm_tlFSo18NSLayoutConstraintC_Tgm5', symObjAddr: 0x41EC, symBinAddr: 0xAE2C, symSize: 0x64 } + - { offsetInCU: 0x1C99, offset: 0x7CC55, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x4DCC, symBinAddr: 0xBA0C, symSize: 0x40 } + - { offsetInCU: 0x1CAD, offset: 0x7CC69, size: 0x8, addend: 0x0, symName: '_$sypSgWOh', symObjAddr: 0x4E0C, symBinAddr: 0xBA4C, symSize: 0x40 } + - { offsetInCU: 0x1CC1, offset: 0x7CC7D, size: 0x8, addend: 0x0, symName: ___swift_project_boxed_opaque_existential_0, symObjAddr: 0x4E4C, symBinAddr: 0xBA8C, symSize: 0x24 } + - { offsetInCU: 0x1CD5, offset: 0x7CC91, size: 0x8, addend: 0x0, symName: ___swift_destroy_boxed_opaque_existential_0, symObjAddr: 0x4E70, symBinAddr: 0xBAB0, symSize: 0x20 } + - { offsetInCU: 0x1CF4, offset: 0x7CCB0, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSo19UIGestureRecognizerCIeyByy_SSADIeggg_TRTA', symObjAddr: 0x535C, symBinAddr: 0xBF9C, symSize: 0x48 } + - { offsetInCU: 0x1D1D, offset: 0x7CCD9, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x53A4, symBinAddr: 0xBFE4, symSize: 0x10 } + - { offsetInCU: 0x1D31, offset: 0x7CCED, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x53B4, symBinAddr: 0xBFF4, symSize: 0x8 } + - { offsetInCU: 0x1D45, offset: 0x7CD01, size: 0x8, addend: 0x0, symName: '_$sIeg_SgWOe', symObjAddr: 0x53BC, symBinAddr: 0xBFFC, symSize: 0x10 } + - { offsetInCU: 0x1D64, offset: 0x7CD20, size: 0x8, addend: 0x0, symName: '_$sIeyB_Ieg_TRTA', symObjAddr: 0x53CC, symBinAddr: 0xC00C, symSize: 0xC } + - { offsetInCU: 0x1D8D, offset: 0x7CD49, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TRTA', symObjAddr: 0x53FC, symBinAddr: 0xC03C, symSize: 0x8 } + - { offsetInCU: 0x1DAC, offset: 0x7CD68, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SSABytIegnnr_TRTA', symObjAddr: 0x5404, symBinAddr: 0xC044, symSize: 0x30 } + - { offsetInCU: 0x1DD5, offset: 0x7CD91, size: 0x8, addend: 0x0, symName: '_$sypWOb', symObjAddr: 0x5434, symBinAddr: 0xC074, symSize: 0x10 } + - { offsetInCU: 0x1DE9, offset: 0x7CDA5, size: 0x8, addend: 0x0, symName: '_$sypWOc', symObjAddr: 0x547C, symBinAddr: 0xC0BC, symSize: 0x3C } + - { offsetInCU: 0x206E, offset: 0x7D02A, size: 0x8, addend: 0x0, symName: '_$sSD17dictionaryLiteralSDyxq_Gx_q_td_tcfCSS_ypTgm5Tf4g_n', symObjAddr: 0x4A0C, symBinAddr: 0xB64C, symSize: 0x118 } + - { offsetInCU: 0x2514, offset: 0x7D4D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvg', symObjAddr: 0x2E0, symBinAddr: 0x6F20, symSize: 0x44 } + - { offsetInCU: 0x2547, offset: 0x7D503, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvs', symObjAddr: 0x354, symBinAddr: 0x6F94, symSize: 0xEC } + - { offsetInCU: 0x2593, offset: 0x7D54F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM', symObjAddr: 0x440, symBinAddr: 0x7080, symSize: 0x58 } + - { offsetInCU: 0x25B8, offset: 0x7D574, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM.resume.0', symObjAddr: 0x498, symBinAddr: 0x70D8, symSize: 0xE0 } + - { offsetInCU: 0x25F9, offset: 0x7D5B5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64Vvg', symObjAddr: 0x5BC, symBinAddr: 0x71FC, symSize: 0x44 } + - { offsetInCU: 0x2651, offset: 0x7D60D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg', symObjAddr: 0x68C, symBinAddr: 0x72CC, symSize: 0x44 } + - { offsetInCU: 0x27BF, offset: 0x7D77B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivg', symObjAddr: 0x834, symBinAddr: 0x7474, symSize: 0xD0 } + - { offsetInCU: 0x28E4, offset: 0x7D8A0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivg', symObjAddr: 0x938, symBinAddr: 0x7578, symSize: 0xD0 } + - { offsetInCU: 0x2A2A, offset: 0x7D9E6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvg', symObjAddr: 0xA28, symBinAddr: 0x7668, symSize: 0x24 } + - { offsetInCU: 0x2A72, offset: 0x7DA2E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvg', symObjAddr: 0xA6C, symBinAddr: 0x76AC, symSize: 0x24 } + - { offsetInCU: 0x2AA6, offset: 0x7DA62, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btF', symObjAddr: 0xA90, symBinAddr: 0x76D0, symSize: 0x24 } + - { offsetInCU: 0x2C34, offset: 0x7DBF0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VF', symObjAddr: 0xB78, symBinAddr: 0x77B8, symSize: 0x198 } + - { offsetInCU: 0x3027, offset: 0x7DFE3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btF', symObjAddr: 0xD40, symBinAddr: 0x7980, symSize: 0x888 } + - { offsetInCU: 0x382A, offset: 0x7E7E6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtF', symObjAddr: 0x168C, symBinAddr: 0x82CC, symSize: 0x258 } + - { offsetInCU: 0x3C5C, offset: 0x7EC18, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x1994, symBinAddr: 0x85D4, symSize: 0xC0 } + - { offsetInCU: 0x3CED, offset: 0x7ECA9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbF', symObjAddr: 0x1B0C, symBinAddr: 0x874C, symSize: 0xE4 } + - { offsetInCU: 0x3E48, offset: 0x7EE04, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyF', symObjAddr: 0x1C70, symBinAddr: 0x88B0, symSize: 0x48 } + - { offsetInCU: 0x3ECE, offset: 0x7EE8A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF', symObjAddr: 0x1D00, symBinAddr: 0x8940, symSize: 0x4C } + - { offsetInCU: 0x3FEF, offset: 0x7EFAB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VF', symObjAddr: 0x1DB0, symBinAddr: 0x89F0, symSize: 0x58 } + - { offsetInCU: 0x40E5, offset: 0x7F0A1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvg', symObjAddr: 0x2108, symBinAddr: 0x8D48, symSize: 0x58 } + - { offsetInCU: 0x4131, offset: 0x7F0ED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvs', symObjAddr: 0x226C, symBinAddr: 0x8EAC, symSize: 0x5C } + - { offsetInCU: 0x415A, offset: 0x7F116, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM', symObjAddr: 0x2480, symBinAddr: 0x90C0, symSize: 0x44 } + - { offsetInCU: 0x4180, offset: 0x7F13C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM.resume.0', symObjAddr: 0x24C4, symBinAddr: 0x9104, symSize: 0x4 } + - { offsetInCU: 0x4242, offset: 0x7F1FE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x24C8, symBinAddr: 0x9108, symSize: 0x9AC } + - { offsetInCU: 0x4447, offset: 0x7F403, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfC', symObjAddr: 0x2E9C, symBinAddr: 0x9ADC, symSize: 0x50 } + - { offsetInCU: 0x4470, offset: 0x7F42C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfc', symObjAddr: 0x2EEC, symBinAddr: 0x9B2C, symSize: 0x9D0 } + - { offsetInCU: 0x4696, offset: 0x7F652, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvW', symObjAddr: 0x3920, symBinAddr: 0xA560, symSize: 0x80 } + - { offsetInCU: 0x478C, offset: 0x7F748, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgF', symObjAddr: 0x39F4, symBinAddr: 0xA634, symSize: 0x30 } + - { offsetInCU: 0x482A, offset: 0x7F7E6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6resize33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x3A58, symBinAddr: 0xA698, symSize: 0x144 } + - { offsetInCU: 0x4A2B, offset: 0x7F9E7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyF', symObjAddr: 0x3B9C, symBinAddr: 0xA7DC, symSize: 0x1D4 } + - { offsetInCU: 0x4CA8, offset: 0x7FC64, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfD', symObjAddr: 0x3D98, symBinAddr: 0xA9D8, symSize: 0x304 } + - { offsetInCU: 0x4D38, offset: 0x7FCF4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZ', symObjAddr: 0x4184, symBinAddr: 0xADC4, symSize: 0x4 } + - { offsetInCU: 0x4D60, offset: 0x7FD1C, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4findys10_HashTableV6BucketV6bucket_Sb5foundtxSHRzlFSS_Tg5', symObjAddr: 0x4250, symBinAddr: 0xAE90, symSize: 0x64 } + - { offsetInCU: 0x4DBA, offset: 0x7FD76, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV7_insert2at3key5valueys10_HashTableV6BucketV_xnq_ntFSS_ypTg5', symObjAddr: 0x42B4, symBinAddr: 0xAEF4, symSize: 0x6C } + - { offsetInCU: 0x4E3A, offset: 0x7FDF6, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV12mutatingFind_8isUniques10_HashTableV6BucketV6bucket_Sb5foundtx_SbtFSS_ypTg5', symObjAddr: 0x4320, symBinAddr: 0xAF60, symSize: 0xD8 } + - { offsetInCU: 0x4E77, offset: 0x7FE33, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4find_9hashValues10_HashTableV6BucketV6bucket_Sb5foundtx_SitSHRzlFSS_Tg5', symObjAddr: 0x43F8, symBinAddr: 0xB038, symSize: 0xE0 } + - { offsetInCU: 0x4EF2, offset: 0x7FEAE, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV4copyyyFSS_ypTg5', symObjAddr: 0x44D8, symBinAddr: 0xB118, symSize: 0x1F4 } + - { offsetInCU: 0x4FAE, offset: 0x7FF6A, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV20_copyOrMoveAndResize8capacity12moveElementsySi_SbtFSS_ypTg5', symObjAddr: 0x46CC, symBinAddr: 0xB30C, symSize: 0x340 } + - { offsetInCU: 0x27, offset: 0x801B7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xC15C, symSize: 0x10 } + - { offsetInCU: 0x62, offset: 0x801F2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCMa', symObjAddr: 0x10, symBinAddr: 0xC16C, symSize: 0x20 } + - { offsetInCU: 0x1AF, offset: 0x8033F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xC15C, symSize: 0x10 } + - { offsetInCU: 0x65, offset: 0x803CE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvgTo', symObjAddr: 0x0, symBinAddr: 0xC18C, symSize: 0x10 } + - { offsetInCU: 0x85, offset: 0x803EE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvgTo', symObjAddr: 0x0, symBinAddr: 0xC18C, symSize: 0x10 } + - { offsetInCU: 0xBB, offset: 0x80424, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvsTo', symObjAddr: 0x10, symBinAddr: 0xC19C, symSize: 0x10 } + - { offsetInCU: 0xDB, offset: 0x80444, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvsTo', symObjAddr: 0x10, symBinAddr: 0xC19C, symSize: 0x10 } + - { offsetInCU: 0x114, offset: 0x8047D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvgTo', symObjAddr: 0x20, symBinAddr: 0xC1AC, symSize: 0x44 } + - { offsetInCU: 0x16C, offset: 0x804D5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvsTo', symObjAddr: 0x64, symBinAddr: 0xC1F0, symSize: 0x48 } + - { offsetInCU: 0x1C7, offset: 0x80530, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvgTo', symObjAddr: 0xAC, symBinAddr: 0xC238, symSize: 0x44 } + - { offsetInCU: 0x21F, offset: 0x80588, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvsTo', symObjAddr: 0xF0, symBinAddr: 0xC27C, symSize: 0x48 } + - { offsetInCU: 0x27A, offset: 0x805E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivgTo', symObjAddr: 0x138, symBinAddr: 0xC2C4, symSize: 0x10 } + - { offsetInCU: 0x29A, offset: 0x80603, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivgTo', symObjAddr: 0x138, symBinAddr: 0xC2C4, symSize: 0x10 } + - { offsetInCU: 0x2D0, offset: 0x80639, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivsTo', symObjAddr: 0x148, symBinAddr: 0xC2D4, symSize: 0x10 } + - { offsetInCU: 0x2F0, offset: 0x80659, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivsTo', symObjAddr: 0x148, symBinAddr: 0xC2D4, symSize: 0x10 } + - { offsetInCU: 0x329, offset: 0x80692, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivgTo', symObjAddr: 0x158, symBinAddr: 0xC2E4, symSize: 0x10 } + - { offsetInCU: 0x349, offset: 0x806B2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivgTo', symObjAddr: 0x158, symBinAddr: 0xC2E4, symSize: 0x10 } + - { offsetInCU: 0x37F, offset: 0x806E8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivsTo', symObjAddr: 0x168, symBinAddr: 0xC2F4, symSize: 0x10 } + - { offsetInCU: 0x39F, offset: 0x80708, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivsTo', symObjAddr: 0x168, symBinAddr: 0xC2F4, symSize: 0x10 } + - { offsetInCU: 0x3D8, offset: 0x80741, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvgTo', symObjAddr: 0x178, symBinAddr: 0xC304, symSize: 0x44 } + - { offsetInCU: 0x430, offset: 0x80799, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvsTo', symObjAddr: 0x1BC, symBinAddr: 0xC348, symSize: 0x48 } + - { offsetInCU: 0x48B, offset: 0x807F4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvgTo', symObjAddr: 0x204, symBinAddr: 0xC390, symSize: 0x10 } + - { offsetInCU: 0x4AB, offset: 0x80814, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvgTo', symObjAddr: 0x204, symBinAddr: 0xC390, symSize: 0x10 } + - { offsetInCU: 0x4E1, offset: 0x8084A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvsTo', symObjAddr: 0x214, symBinAddr: 0xC3A0, symSize: 0x10 } + - { offsetInCU: 0x501, offset: 0x8086A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvsTo', symObjAddr: 0x214, symBinAddr: 0xC3A0, symSize: 0x10 } + - { offsetInCU: 0x53A, offset: 0x808A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvgTo', symObjAddr: 0x224, symBinAddr: 0xC3B0, symSize: 0x10 } + - { offsetInCU: 0x55A, offset: 0x808C3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvgTo', symObjAddr: 0x224, symBinAddr: 0xC3B0, symSize: 0x10 } + - { offsetInCU: 0x590, offset: 0x808F9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvsTo', symObjAddr: 0x234, symBinAddr: 0xC3C0, symSize: 0x10 } + - { offsetInCU: 0x5B0, offset: 0x80919, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvsTo', symObjAddr: 0x234, symBinAddr: 0xC3C0, symSize: 0x10 } + - { offsetInCU: 0x5E9, offset: 0x80952, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvgTo', symObjAddr: 0x244, symBinAddr: 0xC3D0, symSize: 0x48 } + - { offsetInCU: 0x63F, offset: 0x809A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvsTo', symObjAddr: 0x28C, symBinAddr: 0xC418, symSize: 0x40 } + - { offsetInCU: 0x682, offset: 0x809EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13SIZE_OF_FLOATSivgZTo', symObjAddr: 0x2CC, symBinAddr: 0xC458, symSize: 0x8 } + - { offsetInCU: 0x69E, offset: 0x80A07, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13VERTEX_SHADERSSvgZTo', symObjAddr: 0x2D4, symBinAddr: 0xC460, symSize: 0x2C } + - { offsetInCU: 0x6D0, offset: 0x80A39, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvgTo', symObjAddr: 0x300, symBinAddr: 0xC48C, symSize: 0x10 } + - { offsetInCU: 0x6F0, offset: 0x80A59, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvgTo', symObjAddr: 0x300, symBinAddr: 0xC48C, symSize: 0x10 } + - { offsetInCU: 0x728, offset: 0x80A91, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvsTo', symObjAddr: 0x310, symBinAddr: 0xC49C, symSize: 0x34 } + - { offsetInCU: 0x781, offset: 0x80AEA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvgTo', symObjAddr: 0x418, symBinAddr: 0xC5A4, symSize: 0x10 } + - { offsetInCU: 0x7A1, offset: 0x80B0A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvgTo', symObjAddr: 0x418, symBinAddr: 0xC5A4, symSize: 0x10 } + - { offsetInCU: 0x7D7, offset: 0x80B40, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvsTo', symObjAddr: 0x428, symBinAddr: 0xC5B4, symSize: 0x10 } + - { offsetInCU: 0x7F7, offset: 0x80B60, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvsTo', symObjAddr: 0x428, symBinAddr: 0xC5B4, symSize: 0x10 } + - { offsetInCU: 0x846, offset: 0x80BAF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfcTo', symObjAddr: 0x5BC, symBinAddr: 0xC708, symSize: 0x20 } + - { offsetInCU: 0x878, offset: 0x80BE1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyFTo', symObjAddr: 0x720, symBinAddr: 0xC86C, symSize: 0x28 } + - { offsetInCU: 0x8D0, offset: 0x80C39, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTo', symObjAddr: 0x75C, symBinAddr: 0xC8A8, symSize: 0x88 } + - { offsetInCU: 0x934, offset: 0x80C9D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTo', symObjAddr: 0x7E4, symBinAddr: 0xC930, symSize: 0x7C } + - { offsetInCU: 0x9D6, offset: 0x80D3F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyFTo', symObjAddr: 0xC0C, symBinAddr: 0xCD58, symSize: 0x28 } + - { offsetInCU: 0xAC0, offset: 0x80E29, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCMa', symObjAddr: 0x59C, symBinAddr: 0xC6E8, symSize: 0x20 } + - { offsetInCU: 0xB34, offset: 0x80E9D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfETo', symObjAddr: 0xC64, symBinAddr: 0xCDB0, symSize: 0x58 } + - { offsetInCU: 0x123B, offset: 0x815A4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfC', symObjAddr: 0x438, symBinAddr: 0xC5C4, symSize: 0x20 } + - { offsetInCU: 0x1255, offset: 0x815BE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfc', symObjAddr: 0x458, symBinAddr: 0xC5E4, symSize: 0x104 } + - { offsetInCU: 0x1287, offset: 0x815F0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyF', symObjAddr: 0x5DC, symBinAddr: 0xC728, symSize: 0x144 } + - { offsetInCU: 0x1442, offset: 0x817AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtF', symObjAddr: 0x748, symBinAddr: 0xC894, symSize: 0x14 } + - { offsetInCU: 0x14F3, offset: 0x8185C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyF', symObjAddr: 0x860, symBinAddr: 0xC9AC, symSize: 0x3AC } + - { offsetInCU: 0x1863, offset: 0x81BCC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfD', symObjAddr: 0xC34, symBinAddr: 0xCD80, symSize: 0x30 } + - { offsetInCU: 0x194E, offset: 0x81CB7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTf4ddnndnndn_n', symObjAddr: 0xCBC, symBinAddr: 0xCE08, symSize: 0x65C } + - { offsetInCU: 0x214C, offset: 0x824B5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTf4nnnnndn_n', symObjAddr: 0x135C, symBinAddr: 0xD4A8, symSize: 0x6C8 } + - { offsetInCU: 0x10C, offset: 0x82E75, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfcTo', symObjAddr: 0xED4, symBinAddr: 0xEA1C, symSize: 0x68 } + - { offsetInCU: 0x19C, offset: 0x82F05, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCfETo', symObjAddr: 0xF48, symBinAddr: 0xEA90, symSize: 0x10 } + - { offsetInCU: 0x1CB, offset: 0x82F34, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6handleyySo19UIGestureRecognizerCFTo', symObjAddr: 0xF58, symBinAddr: 0xEAA0, symSize: 0x4 } + - { offsetInCU: 0x368, offset: 0x830D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCACycfcTo', symObjAddr: 0x16DC, symBinAddr: 0xF224, symSize: 0x2C } + - { offsetInCU: 0x5D4, offset: 0x8333D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCfETo', symObjAddr: 0x1744, symBinAddr: 0xF28C, symSize: 0x68 } + - { offsetInCU: 0x603, offset: 0x8336C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCMa', symObjAddr: 0x17AC, symBinAddr: 0xF2F4, symSize: 0x20 } + - { offsetInCU: 0x617, offset: 0x83380, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCMa', symObjAddr: 0x17CC, symBinAddr: 0xF314, symSize: 0x20 } + - { offsetInCU: 0x62B, offset: 0x83394, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwCP', symObjAddr: 0x17EC, symBinAddr: 0xF334, symSize: 0x30 } + - { offsetInCU: 0x63F, offset: 0x833A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwxx', symObjAddr: 0x181C, symBinAddr: 0xF364, symSize: 0x8 } + - { offsetInCU: 0x653, offset: 0x833BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwcp', symObjAddr: 0x1824, symBinAddr: 0xF36C, symSize: 0x3C } + - { offsetInCU: 0x667, offset: 0x833D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwca', symObjAddr: 0x1860, symBinAddr: 0xF3A8, symSize: 0x50 } + - { offsetInCU: 0x67B, offset: 0x833E4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwta', symObjAddr: 0x18BC, symBinAddr: 0xF3F8, symSize: 0x40 } + - { offsetInCU: 0x68F, offset: 0x833F8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwet', symObjAddr: 0x18FC, symBinAddr: 0xF438, symSize: 0x48 } + - { offsetInCU: 0x6A3, offset: 0x8340C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwst', symObjAddr: 0x1944, symBinAddr: 0xF480, symSize: 0x40 } + - { offsetInCU: 0x6B7, offset: 0x83420, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVMa', symObjAddr: 0x1984, symBinAddr: 0xF4C0, symSize: 0x10 } + - { offsetInCU: 0x6CB, offset: 0x83434, size: 0x8, addend: 0x0, symName: '_$sypSgWOc', symObjAddr: 0x1994, symBinAddr: 0xF4D0, symSize: 0x48 } + - { offsetInCU: 0x6DF, offset: 0x83448, size: 0x8, addend: 0x0, symName: '_$sSo7UITouchCSo8NSObjectCSH10ObjectiveCWl', symObjAddr: 0x1AA0, symBinAddr: 0xF518, symSize: 0x58 } + - { offsetInCU: 0x6F3, offset: 0x8345C, size: 0x8, addend: 0x0, symName: '_$sSh8IteratorV8_VariantOyx__GSHRzlWOe', symObjAddr: 0x1AF8, symBinAddr: 0xF570, symSize: 0x8 } + - { offsetInCU: 0x761, offset: 0x834CA, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOe', symObjAddr: 0x1DEC, symBinAddr: 0xF864, symSize: 0x10 } + - { offsetInCU: 0xCBB, offset: 0x83A24, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesBegan_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x0, symBinAddr: 0xDB70, symSize: 0x540 } + - { offsetInCU: 0xF57, offset: 0x83CC0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesMoved_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x54C, symBinAddr: 0xE0BC, symSize: 0xE0 } + - { offsetInCU: 0xFD6, offset: 0x83D3F, size: 0x8, addend: 0x0, symName: '_$sSa6remove2atxSi_tF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x6F0, symBinAddr: 0xE24C, symSize: 0x9C } + - { offsetInCU: 0x1069, offset: 0x83DD2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfc', symObjAddr: 0xDCC, symBinAddr: 0xE914, symSize: 0x108 } + - { offsetInCU: 0x11B3, offset: 0x83F1C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6onMove33_044DDF836BDB3B89B481C6F58BB6EF6BLLyySo19UIGestureRecognizerC_ShySo7UITouchCGSgtF', symObjAddr: 0x12D0, symBinAddr: 0xEE18, symSize: 0x40C } + - { offsetInCU: 0x18C9, offset: 0x84632, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNewAByxGyF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x1B00, symBinAddr: 0xF578, symSize: 0x14 } + - { offsetInCU: 0x1968, offset: 0x846D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6canvasAcA9NSCCanvasC_tcfcTf4gn_n', symObjAddr: 0x1B14, symBinAddr: 0xF58C, symSize: 0x1E4 } + - { offsetInCU: 0x27, offset: 0x848AE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xF874, symSize: 0x2C } + - { offsetInCU: 0x4B, offset: 0x848D2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvpZ', symObjAddr: 0x2D8, symBinAddr: 0x116EB68, symSize: 0x0 } + - { offsetInCU: 0x65, offset: 0x848EC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xF874, symSize: 0x2C } + - { offsetInCU: 0x98, offset: 0x8491F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZTo', symObjAddr: 0x178, symBinAddr: 0xF9EC, symSize: 0x40 } + - { offsetInCU: 0x104, offset: 0x8498B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfcTo', symObjAddr: 0x228, symBinAddr: 0xFA9C, symSize: 0x3C } + - { offsetInCU: 0x156, offset: 0x849DD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queue_WZ', symObjAddr: 0x2C, symBinAddr: 0xF8A0, symSize: 0x10C } + - { offsetInCU: 0x181, offset: 0x84A08, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCMa', symObjAddr: 0x208, symBinAddr: 0xFA7C, symSize: 0x20 } + - { offsetInCU: 0x195, offset: 0x84A1C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfETo', symObjAddr: 0x294, symBinAddr: 0xFB08, symSize: 0x4 } + - { offsetInCU: 0x1C0, offset: 0x84A47, size: 0x8, addend: 0x0, symName: '_$sSo17OS_dispatch_queueCMa', symObjAddr: 0x298, symBinAddr: 0xFB0C, symSize: 0x3C } + - { offsetInCU: 0x348, offset: 0x84BCF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZ', symObjAddr: 0x138, symBinAddr: 0xF9AC, symSize: 0x40 } + - { offsetInCU: 0x388, offset: 0x84C0F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfC', symObjAddr: 0x1B8, symBinAddr: 0xFA2C, symSize: 0x20 } + - { offsetInCU: 0x39C, offset: 0x84C23, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfc', symObjAddr: 0x1D8, symBinAddr: 0xFA4C, symSize: 0x30 } + - { offsetInCU: 0x3D8, offset: 0x84C5F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfD', symObjAddr: 0x264, symBinAddr: 0xFAD8, symSize: 0x30 } + - { offsetInCU: 0x2B, offset: 0x84CAD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xFB48, symSize: 0xA4 } + - { offsetInCU: 0x66, offset: 0x84CE8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZTo', symObjAddr: 0xA4, symBinAddr: 0xFBEC, symSize: 0xA4 } + - { offsetInCU: 0xF9, offset: 0x84D7B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZTo', symObjAddr: 0x1D8, symBinAddr: 0xFD20, symSize: 0x110 } + - { offsetInCU: 0x1A2, offset: 0x84E24, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZTo', symObjAddr: 0x30C, symBinAddr: 0xFE54, symSize: 0x28 } + - { offsetInCU: 0x222, offset: 0x84EA4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTo', symObjAddr: 0x338, symBinAddr: 0xFE80, symSize: 0xA0 } + - { offsetInCU: 0x29B, offset: 0x84F1D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZTo', symObjAddr: 0x4D0, symBinAddr: 0x10018, symSize: 0x15C } + - { offsetInCU: 0x330, offset: 0x84FB2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfcTo', symObjAddr: 0x67C, symBinAddr: 0x101C4, symSize: 0x3C } + - { offsetInCU: 0x381, offset: 0x85003, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTf4nnnnnndd_n', symObjAddr: 0x6E8, symBinAddr: 0x10230, symSize: 0x160 } + - { offsetInCU: 0x4DF, offset: 0x85161, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC7getFile33_F00B23A4165DD6ABFCD23C8811C7DF43LLyS2SKFZTf4nd_g', symObjAddr: 0x848, symBinAddr: 0x10390, symSize: 0x2E4 } + - { offsetInCU: 0x5AE, offset: 0x85230, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCMa', symObjAddr: 0xB2C, symBinAddr: 0x10674, symSize: 0x20 } + - { offsetInCU: 0x5C2, offset: 0x85244, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOAEs5ErrorAAWl', symObjAddr: 0xB4C, symBinAddr: 0x10694, symSize: 0x44 } + - { offsetInCU: 0x5D6, offset: 0x85258, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwCP', symObjAddr: 0xB90, symBinAddr: 0x106D8, symSize: 0x2C } + - { offsetInCU: 0x5EA, offset: 0x8526C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwxx', symObjAddr: 0xBBC, symBinAddr: 0x10704, symSize: 0x8 } + - { offsetInCU: 0x5FE, offset: 0x85280, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwca', symObjAddr: 0xBC4, symBinAddr: 0x1070C, symSize: 0x40 } + - { offsetInCU: 0x612, offset: 0x85294, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwta', symObjAddr: 0xC10, symBinAddr: 0x1074C, symSize: 0x30 } + - { offsetInCU: 0x626, offset: 0x852A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwet', symObjAddr: 0xC40, symBinAddr: 0x1077C, symSize: 0x48 } + - { offsetInCU: 0x63A, offset: 0x852BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwst', symObjAddr: 0xC88, symBinAddr: 0x107C4, symSize: 0x3C } + - { offsetInCU: 0x64E, offset: 0x852D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwug', symObjAddr: 0xCC4, symBinAddr: 0x10800, symSize: 0x8 } + - { offsetInCU: 0x662, offset: 0x852E4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwup', symObjAddr: 0xCCC, symBinAddr: 0x10808, symSize: 0x4 } + - { offsetInCU: 0x676, offset: 0x852F8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwui', symObjAddr: 0xCD0, symBinAddr: 0x1080C, symSize: 0x4 } + - { offsetInCU: 0x68A, offset: 0x8530C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOMa', symObjAddr: 0xCD4, symBinAddr: 0x10810, symSize: 0x10 } + - { offsetInCU: 0x712, offset: 0x85394, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP7_domainSSvgTW', symObjAddr: 0x3D8, symBinAddr: 0xFF20, symSize: 0x4 } + - { offsetInCU: 0x72E, offset: 0x853B0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP5_codeSivgTW', symObjAddr: 0x3DC, symBinAddr: 0xFF24, symSize: 0x4 } + - { offsetInCU: 0x74A, offset: 0x853CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP9_userInfoyXlSgvgTW', symObjAddr: 0x3E0, symBinAddr: 0xFF28, symSize: 0x4 } + - { offsetInCU: 0x766, offset: 0x853E8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP19_getEmbeddedNSErroryXlSgyFTW', symObjAddr: 0x3E4, symBinAddr: 0xFF2C, symSize: 0x4 } + - { offsetInCU: 0xA14, offset: 0x85696, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xFB48, symSize: 0xA4 } + - { offsetInCU: 0xAAA, offset: 0x8572C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZ', symObjAddr: 0x148, symBinAddr: 0xFC90, symSize: 0x90 } + - { offsetInCU: 0xC31, offset: 0x858B3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZ', symObjAddr: 0x2E8, symBinAddr: 0xFE30, symSize: 0x24 } + - { offsetInCU: 0xC7B, offset: 0x858FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZ', symObjAddr: 0x334, symBinAddr: 0xFE7C, symSize: 0x4 } + - { offsetInCU: 0xC9D, offset: 0x8591F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZ', symObjAddr: 0x3E8, symBinAddr: 0xFF30, symSize: 0xE8 } + - { offsetInCU: 0xD4D, offset: 0x859CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfC', symObjAddr: 0x62C, symBinAddr: 0x10174, symSize: 0x20 } + - { offsetInCU: 0xD61, offset: 0x859E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfc', symObjAddr: 0x64C, symBinAddr: 0x10194, symSize: 0x30 } + - { offsetInCU: 0xD97, offset: 0x85A19, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCfD', symObjAddr: 0x6B8, symBinAddr: 0x10200, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0x85B32, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x10824, symSize: 0x4 } + - { offsetInCU: 0x71, offset: 0x85B7C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x4, symBinAddr: 0x10828, symSize: 0x70 } + - { offsetInCU: 0xF6, offset: 0x85C01, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x78, symBinAddr: 0x1089C, symSize: 0x50 } + - { offsetInCU: 0x191, offset: 0x85C9C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0xCC, symBinAddr: 0x108F0, symSize: 0x68 } + - { offsetInCU: 0x254, offset: 0x85D5F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x138, symBinAddr: 0x1095C, symSize: 0x98 } + - { offsetInCU: 0x323, offset: 0x85E2E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfcTo', symObjAddr: 0x220, symBinAddr: 0x10A44, symSize: 0x3C } + - { offsetInCU: 0x375, offset: 0x85E80, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCMa', symObjAddr: 0x28C, symBinAddr: 0x10AB0, symSize: 0x20 } + - { offsetInCU: 0x4E5, offset: 0x85FF0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x10824, symSize: 0x4 } + - { offsetInCU: 0x51D, offset: 0x86028, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x10824, symSize: 0x4 } + - { offsetInCU: 0x588, offset: 0x86093, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0x10898, symSize: 0x4 } + - { offsetInCU: 0x5C8, offset: 0x860D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0x10898, symSize: 0x4 } + - { offsetInCU: 0x62A, offset: 0x86135, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xC8, symBinAddr: 0x108EC, symSize: 0x4 } + - { offsetInCU: 0x67C, offset: 0x86187, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xC8, symBinAddr: 0x108EC, symSize: 0x4 } + - { offsetInCU: 0x6F1, offset: 0x861FC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x134, symBinAddr: 0x10958, symSize: 0x4 } + - { offsetInCU: 0x767, offset: 0x86272, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x134, symBinAddr: 0x10958, symSize: 0x4 } + - { offsetInCU: 0x805, offset: 0x86310, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfC', symObjAddr: 0x1D0, symBinAddr: 0x109F4, symSize: 0x20 } + - { offsetInCU: 0x819, offset: 0x86324, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfc', symObjAddr: 0x1F0, symBinAddr: 0x10A14, symSize: 0x30 } + - { offsetInCU: 0x84F, offset: 0x8635A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCfD', symObjAddr: 0x25C, symBinAddr: 0x10A80, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0x863A4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x10AD0, symSize: 0x14 } + - { offsetInCU: 0xA9, offset: 0x86426, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x14, symBinAddr: 0x10AE4, symSize: 0x38 } + - { offsetInCU: 0x1A2, offset: 0x8651F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x68, symBinAddr: 0x10B38, symSize: 0x40 } + - { offsetInCU: 0x284, offset: 0x86601, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfcTo', symObjAddr: 0x118, symBinAddr: 0x10BE8, symSize: 0x3C } + - { offsetInCU: 0x2D6, offset: 0x86653, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCMa', symObjAddr: 0xF8, symBinAddr: 0x10BC8, symSize: 0x20 } + - { offsetInCU: 0x480, offset: 0x867FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x10AD0, symSize: 0x14 } + - { offsetInCU: 0x5C4, offset: 0x86941, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x4C, symBinAddr: 0x10B1C, symSize: 0x1C } + - { offsetInCU: 0x6FA, offset: 0x86A77, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfC', symObjAddr: 0xA8, symBinAddr: 0x10B78, symSize: 0x20 } + - { offsetInCU: 0x70E, offset: 0x86A8B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfc', symObjAddr: 0xC8, symBinAddr: 0x10B98, symSize: 0x30 } + - { offsetInCU: 0x744, offset: 0x86AC1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCfD', symObjAddr: 0x154, symBinAddr: 0x10C24, symSize: 0x30 } + - { offsetInCU: 0x61, offset: 0x86B45, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0x10C58, symSize: 0x10 } + - { offsetInCU: 0x81, offset: 0x86B65, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0x10C58, symSize: 0x10 } + - { offsetInCU: 0xB7, offset: 0x86B9B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0x10C68, symSize: 0x10 } + - { offsetInCU: 0xD7, offset: 0x86BBB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0x10C68, symSize: 0x10 } + - { offsetInCU: 0x110, offset: 0x86BF4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvgTo', symObjAddr: 0x24, symBinAddr: 0x10C78, symSize: 0x48 } + - { offsetInCU: 0x168, offset: 0x86C4C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvsTo', symObjAddr: 0xB4, symBinAddr: 0x10D08, symSize: 0x50 } + - { offsetInCU: 0x1C3, offset: 0x86CA7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0x10D58, symSize: 0x10 } + - { offsetInCU: 0x1E3, offset: 0x86CC7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0x10D58, symSize: 0x10 } + - { offsetInCU: 0x219, offset: 0x86CFD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0x10D68, symSize: 0x10 } + - { offsetInCU: 0x239, offset: 0x86D1D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0x10D68, symSize: 0x10 } + - { offsetInCU: 0x272, offset: 0x86D56, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfcTo', symObjAddr: 0x1B0, symBinAddr: 0x10E04, symSize: 0x78 } + - { offsetInCU: 0x2C8, offset: 0x86DAC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x2D4, symBinAddr: 0x10F28, symSize: 0xB0 } + - { offsetInCU: 0x32A, offset: 0x86E0E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x43C, symBinAddr: 0x11090, symSize: 0x28 } + - { offsetInCU: 0x35C, offset: 0x86E40, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC12bindDrawableyyFTo', symObjAddr: 0x4E0, symBinAddr: 0x110B8, symSize: 0xA0 } + - { offsetInCU: 0x3DD, offset: 0x86EC1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC14deleteDrawableyyFTo', symObjAddr: 0x5BC, symBinAddr: 0x11158, symSize: 0x60 } + - { offsetInCU: 0x44D, offset: 0x86F31, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTo', symObjAddr: 0x620, symBinAddr: 0x111BC, symSize: 0x4C } + - { offsetInCU: 0x4BF, offset: 0x86FA3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfcTo', symObjAddr: 0x70C, symBinAddr: 0x112A8, symSize: 0x34 } + - { offsetInCU: 0x533, offset: 0x87017, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCMa', symObjAddr: 0x190, symBinAddr: 0x10DE4, symSize: 0x20 } + - { offsetInCU: 0x55D, offset: 0x87041, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCfETo', symObjAddr: 0x74C, symBinAddr: 0x112E8, symSize: 0x10 } + - { offsetInCU: 0x65B, offset: 0x8713F, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VFTo', symObjAddr: 0xA08, symBinAddr: 0x115A4, symSize: 0x74 } + - { offsetInCU: 0x699, offset: 0x8717D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA7C, symBinAddr: 0x11618, symSize: 0x10 } + - { offsetInCU: 0x6B9, offset: 0x8719D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA7C, symBinAddr: 0x11618, symSize: 0x10 } + - { offsetInCU: 0x6EF, offset: 0x871D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA8C, symBinAddr: 0x11628, symSize: 0x10 } + - { offsetInCU: 0x70F, offset: 0x871F3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA8C, symBinAddr: 0x11628, symSize: 0x10 } + - { offsetInCU: 0x748, offset: 0x8722C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvgTo', symObjAddr: 0xA9C, symBinAddr: 0x11638, symSize: 0x20 } + - { offsetInCU: 0x7A0, offset: 0x87284, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvsTo', symObjAddr: 0xABC, symBinAddr: 0x11658, symSize: 0x14 } + - { offsetInCU: 0x7FB, offset: 0x872DF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvgTo', symObjAddr: 0xAD0, symBinAddr: 0x1166C, symSize: 0x44 } + - { offsetInCU: 0x853, offset: 0x87337, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvsTo', symObjAddr: 0xB58, symBinAddr: 0x116F4, symSize: 0x48 } + - { offsetInCU: 0x8E8, offset: 0x873CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfcTo', symObjAddr: 0xCBC, symBinAddr: 0x11858, symSize: 0x78 } + - { offsetInCU: 0x93E, offset: 0x87422, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0xE34, symBinAddr: 0x119D0, symSize: 0xB0 } + - { offsetInCU: 0x9A0, offset: 0x87484, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0xF90, symBinAddr: 0x11B2C, symSize: 0x28 } + - { offsetInCU: 0x9D2, offset: 0x874B6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC11deviceScaleSfyFTo', symObjAddr: 0xFB8, symBinAddr: 0x11B54, symSize: 0xB8 } + - { offsetInCU: 0xA53, offset: 0x87537, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTo', symObjAddr: 0x1074, symBinAddr: 0x11C0C, symSize: 0x28 } + - { offsetInCU: 0xAB1, offset: 0x87595, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCfETo', symObjAddr: 0x10D8, symBinAddr: 0x11C70, symSize: 0x10 } + - { offsetInCU: 0xC63, offset: 0x87747, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfC12CanvasNative15NSCTouchHandlerC7PointerV_Tgm5', symObjAddr: 0x130C, symBinAddr: 0x11DF0, symSize: 0x80 } + - { offsetInCU: 0xCE6, offset: 0x877CA, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCs5UInt8V_Tgm5', symObjAddr: 0x140C, symBinAddr: 0x11E70, symSize: 0x6C } + - { offsetInCU: 0xD6A, offset: 0x8784E, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOy', symObjAddr: 0x1630, symBinAddr: 0x12094, symSize: 0x44 } + - { offsetInCU: 0xD7E, offset: 0x87862, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOe', symObjAddr: 0x1674, symBinAddr: 0x120D8, symSize: 0x44 } + - { offsetInCU: 0xD92, offset: 0x87876, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCMa', symObjAddr: 0x16B8, symBinAddr: 0x1211C, symSize: 0x20 } + - { offsetInCU: 0xE6C, offset: 0x87950, size: 0x8, addend: 0x0, symName: '_$sSaySayxGqd__c7ElementQyd__RszSTRd__lufCs5UInt8V_10Foundation4DataVTgm5Tf4g_n', symObjAddr: 0x14FC, symBinAddr: 0x11F60, symSize: 0x124 } + - { offsetInCU: 0x112B, offset: 0x87C0F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvg', symObjAddr: 0x6C, symBinAddr: 0x10CC0, symSize: 0x48 } + - { offsetInCU: 0x11A8, offset: 0x87C8C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfc', symObjAddr: 0x124, symBinAddr: 0x10D78, symSize: 0x6C } + - { offsetInCU: 0x11EF, offset: 0x87CD3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0x228, symBinAddr: 0x10E7C, symSize: 0xAC } + - { offsetInCU: 0x1253, offset: 0x87D37, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x384, symBinAddr: 0x10FD8, symSize: 0xB8 } + - { offsetInCU: 0x12DE, offset: 0x87DC2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtF', symObjAddr: 0x61C, symBinAddr: 0x111B8, symSize: 0x4 } + - { offsetInCU: 0x12FF, offset: 0x87DE3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfC', symObjAddr: 0x66C, symBinAddr: 0x11208, symSize: 0x74 } + - { offsetInCU: 0x1313, offset: 0x87DF7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfc', symObjAddr: 0x6E0, symBinAddr: 0x1127C, symSize: 0x2C } + - { offsetInCU: 0x142C, offset: 0x87F10, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VF', symObjAddr: 0x75C, symBinAddr: 0x112F8, symSize: 0x2AC } + - { offsetInCU: 0x17D6, offset: 0x882BA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvg', symObjAddr: 0xB14, symBinAddr: 0x116B0, symSize: 0x44 } + - { offsetInCU: 0x1815, offset: 0x882F9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvs', symObjAddr: 0xBA0, symBinAddr: 0x1173C, symSize: 0x48 } + - { offsetInCU: 0x183A, offset: 0x8831E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM', symObjAddr: 0xBE8, symBinAddr: 0x11784, symSize: 0x44 } + - { offsetInCU: 0x185F, offset: 0x88343, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM.resume.0', symObjAddr: 0xC2C, symBinAddr: 0x117C8, symSize: 0x4 } + - { offsetInCU: 0x1886, offset: 0x8836A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfC', symObjAddr: 0xC30, symBinAddr: 0x117CC, symSize: 0x20 } + - { offsetInCU: 0x189A, offset: 0x8837E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfc', symObjAddr: 0xC50, symBinAddr: 0x117EC, symSize: 0x6C } + - { offsetInCU: 0x18E1, offset: 0x883C5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0xD88, symBinAddr: 0x11924, symSize: 0xAC } + - { offsetInCU: 0x1940, offset: 0x88424, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0xEE4, symBinAddr: 0x11A80, symSize: 0xAC } + - { offsetInCU: 0x19DE, offset: 0x884C2, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x10E8, symBinAddr: 0x11C80, symSize: 0xBC } + - { offsetInCU: 0x1AC0, offset: 0x885A4, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFs5UInt8V_Tg5', symObjAddr: 0x1258, symBinAddr: 0x11D3C, symSize: 0xB4 } + - { offsetInCU: 0x1BCC, offset: 0x886B0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTf4ddn_n', symObjAddr: 0x1478, symBinAddr: 0x11EDC, symSize: 0x84 } + - { offsetInCU: 0x1CC5, offset: 0x887A9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTf4dn_n', symObjAddr: 0x16D8, symBinAddr: 0x1213C, symSize: 0x360 } + - { offsetInCU: 0x4F, offset: 0x88BE7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LLSo012OS_dispatch_E0CvpZ', symObjAddr: 0x980, symBinAddr: 0x116ECB0, symSize: 0x0 } + - { offsetInCU: 0x5D, offset: 0x88BF5, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x12688, symSize: 0x2C } + - { offsetInCU: 0x75, offset: 0x88C0D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LL_WZ', symObjAddr: 0x2C, symBinAddr: 0x126B4, symSize: 0x10C } + - { offsetInCU: 0xBC, offset: 0x88C54, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0x13C, symBinAddr: 0x127C4, symSize: 0x44 } + - { offsetInCU: 0x132, offset: 0x88CCA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTo', symObjAddr: 0x3E4, symBinAddr: 0x12A6C, symSize: 0x80 } + - { offsetInCU: 0x191, offset: 0x88D29, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfcTo', symObjAddr: 0x4B4, symBinAddr: 0x12B3C, symSize: 0x3C } + - { offsetInCU: 0x1E2, offset: 0x88D7A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTf4nnnd_n', symObjAddr: 0x524, symBinAddr: 0x12BAC, symSize: 0x214 } + - { offsetInCU: 0x261, offset: 0x88DF9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfETo', symObjAddr: 0x520, symBinAddr: 0x12BA8, symSize: 0x4 } + - { offsetInCU: 0x29D, offset: 0x88E35, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCMa', symObjAddr: 0x738, symBinAddr: 0x12DC0, symSize: 0x20 } + - { offsetInCU: 0x2BC, offset: 0x88E54, size: 0x8, addend: 0x0, symName: '_$s10ObjectiveC8ObjCBoolVIeyBy_SbIegy_TRTA', symObjAddr: 0x77C, symBinAddr: 0x12E04, symSize: 0x14 } + - { offsetInCU: 0x2E5, offset: 0x88E7D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_TA', symObjAddr: 0x7BC, symBinAddr: 0x12E44, symSize: 0xC } + - { offsetInCU: 0x2F9, offset: 0x88E91, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x7C8, symBinAddr: 0x12E50, symSize: 0x10 } + - { offsetInCU: 0x30D, offset: 0x88EA5, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x7D8, symBinAddr: 0x12E60, symSize: 0x8 } + - { offsetInCU: 0x321, offset: 0x88EB9, size: 0x8, addend: 0x0, symName: '_$sSay8Dispatch0A13WorkItemFlagsVGMa', symObjAddr: 0x860, symBinAddr: 0x12EA8, symSize: 0x54 } + - { offsetInCU: 0x335, offset: 0x88ECD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0x8F0, symBinAddr: 0x12EFC, symSize: 0x24 } + - { offsetInCU: 0x369, offset: 0x88F01, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU_TA', symObjAddr: 0x938, symBinAddr: 0x12F44, symSize: 0x24 } + - { offsetInCU: 0x4FE, offset: 0x89096, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x127C0, symSize: 0x4 } + - { offsetInCU: 0x52C, offset: 0x890C4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x127C0, symSize: 0x4 } + - { offsetInCU: 0x58B, offset: 0x89123, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZ', symObjAddr: 0x180, symBinAddr: 0x12808, symSize: 0x4 } + - { offsetInCU: 0x59F, offset: 0x89137, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_', symObjAddr: 0x184, symBinAddr: 0x1280C, symSize: 0x260 } + - { offsetInCU: 0x678, offset: 0x89210, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfC', symObjAddr: 0x464, symBinAddr: 0x12AEC, symSize: 0x20 } + - { offsetInCU: 0x68C, offset: 0x89224, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfc', symObjAddr: 0x484, symBinAddr: 0x12B0C, symSize: 0x30 } + - { offsetInCU: 0x6C2, offset: 0x8925A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfD', symObjAddr: 0x4F0, symBinAddr: 0x12B78, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0x89300, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x12F7C, symSize: 0x20 } + - { offsetInCU: 0x77, offset: 0x89350, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfcTo', symObjAddr: 0x70, symBinAddr: 0x12FEC, symSize: 0x3C } + - { offsetInCU: 0xC9, offset: 0x893A2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCMa', symObjAddr: 0x50, symBinAddr: 0x12FCC, symSize: 0x20 } + - { offsetInCU: 0x214, offset: 0x894ED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x12F7C, symSize: 0x20 } + - { offsetInCU: 0x228, offset: 0x89501, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfc', symObjAddr: 0x20, symBinAddr: 0x12F9C, symSize: 0x30 } + - { offsetInCU: 0x264, offset: 0x8953D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCfD', symObjAddr: 0xAC, symBinAddr: 0x13028, symSize: 0x30 } + - { offsetInCU: 0x26, offset: 0x89586, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x33B96C, symSize: 0x265C } + - { offsetInCU: 0x40, offset: 0x895A0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9DE0, symBinAddr: 0xA372E0, symSize: 0x0 } + - { offsetInCU: 0x92, offset: 0x895F2, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFDE0, symBinAddr: 0xA3D2E0, symSize: 0x0 } + - { offsetInCU: 0xF6, offset: 0x89656, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFE08, symBinAddr: 0xA3D308, symSize: 0x0 } + - { offsetInCU: 0x10C, offset: 0x8966C, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x10210, symBinAddr: 0xA3D710, symSize: 0x0 } + - { offsetInCU: 0x123, offset: 0x89683, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFE50, symBinAddr: 0xA3D350, symSize: 0x0 } + - { offsetInCU: 0x9C2, offset: 0x89F22, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x33B96C, symSize: 0x265C } + - { offsetInCU: 0x45CD, offset: 0x8DB2D, size: 0x8, addend: 0x0, symName: _fe_frombytes, symObjAddr: 0x265C, symBinAddr: 0x33DFC8, symSize: 0x134 } + - { offsetInCU: 0x46F3, offset: 0x8DC53, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x9918, symBinAddr: 0x345284, symSize: 0x21C } + - { offsetInCU: 0x4922, offset: 0x8DE82, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4FDC, symBinAddr: 0x340948, symSize: 0x1B8 } + - { offsetInCU: 0x530F, offset: 0x8E86F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x2790, symBinAddr: 0x33E0FC, symSize: 0x5BC } + - { offsetInCU: 0x5F72, offset: 0x8F4D2, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2D4C, symBinAddr: 0x33E6B8, symSize: 0x7F8 } + - { offsetInCU: 0x642A, offset: 0x8F98A, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3544, symBinAddr: 0x33EEB0, symSize: 0x208 } + - { offsetInCU: 0x69F8, offset: 0x8FF58, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x374C, symBinAddr: 0x33F0B8, symSize: 0x7B0 } + - { offsetInCU: 0x77D8, offset: 0x90D38, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3EFC, symBinAddr: 0x33F868, symSize: 0x634 } + - { offsetInCU: 0x8199, offset: 0x916F9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x4530, symBinAddr: 0x33FE9C, symSize: 0xAAC } + - { offsetInCU: 0x956A, offset: 0x92ACA, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x5298, symBinAddr: 0x340C04, symSize: 0x23F8 } + - { offsetInCU: 0xCABB, offset: 0x9601B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x5194, symBinAddr: 0x340B00, symSize: 0x104 } + - { offsetInCU: 0xCD03, offset: 0x96263, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x7690, symBinAddr: 0x342FFC, symSize: 0x30 } + - { offsetInCU: 0xCDF4, offset: 0x96354, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x76C0, symBinAddr: 0x34302C, symSize: 0x58 } + - { offsetInCU: 0xCE69, offset: 0x963C9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7718, symBinAddr: 0x343084, symSize: 0x4 } + - { offsetInCU: 0xCEB1, offset: 0x96411, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7718, symBinAddr: 0x343084, symSize: 0x4 } + - { offsetInCU: 0xCEE0, offset: 0x96440, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7718, symBinAddr: 0x343084, symSize: 0x4 } + - { offsetInCU: 0xCF04, offset: 0x96464, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x771C, symBinAddr: 0x343088, symSize: 0x8C } + - { offsetInCU: 0xD039, offset: 0x96599, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x77A8, symBinAddr: 0x343114, symSize: 0x4 } + - { offsetInCU: 0xD072, offset: 0x965D2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x77A8, symBinAddr: 0x343114, symSize: 0x4 } + - { offsetInCU: 0xD30B, offset: 0x9686B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x77AC, symBinAddr: 0x343118, symSize: 0x1598 } + - { offsetInCU: 0x10654, offset: 0x99BB4, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x9B34, symBinAddr: 0x3454A0, symSize: 0x218 } + - { offsetInCU: 0x10C86, offset: 0x9A1E6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8D44, symBinAddr: 0x3446B0, symSize: 0x20 } + - { offsetInCU: 0x11123, offset: 0x9A683, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8D64, symBinAddr: 0x3446D0, symSize: 0xBB4 } + - { offsetInCU: 0x26, offset: 0x9B466, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x3456B8, symSize: 0x1F4 } + - { offsetInCU: 0x1D2, offset: 0x9B612, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x3456B8, symSize: 0x1F4 } + - { offsetInCU: 0x26, offset: 0x9B8AD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x3458AC, symSize: 0x3C } + - { offsetInCU: 0x34, offset: 0x9B8BB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x3458AC, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0x9B9CB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x3458E8, symSize: 0x98 } + - { offsetInCU: 0x34, offset: 0x9B9D9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x3458E8, symSize: 0x98 } + - { offsetInCU: 0x86, offset: 0x9BB3C, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1100, symBinAddr: 0xA3D7C0, symSize: 0x0 } + - { offsetInCU: 0xB8, offset: 0x9BB6E, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1090, symBinAddr: 0xA3D750, symSize: 0x0 } + - { offsetInCU: 0xDA, offset: 0x9BB90, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x10C0, symBinAddr: 0xA3D780, symSize: 0x0 } + - { offsetInCU: 0xF0, offset: 0x9BBA6, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x10F0, symBinAddr: 0xA3D7B0, symSize: 0x0 } + - { offsetInCU: 0x3B7, offset: 0x9BE6D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x345980, symSize: 0x18 } + - { offsetInCU: 0x3FB, offset: 0x9BEB1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x345980, symSize: 0x18 } + - { offsetInCU: 0x594, offset: 0x9C04A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0x345998, symSize: 0x18 } + - { offsetInCU: 0x63F, offset: 0x9C0F5, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0x3459B0, symSize: 0x320 } + - { offsetInCU: 0x1199, offset: 0x9CC4F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x5B0, symBinAddr: 0x345CD0, symSize: 0xAC } + - { offsetInCU: 0x148F, offset: 0x9CF45, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x65C, symBinAddr: 0x345D7C, symSize: 0x500 } + - { offsetInCU: 0x268C, offset: 0x9E142, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB5C, symBinAddr: 0x34627C, symSize: 0x2C8 } + - { offsetInCU: 0x2CDB, offset: 0x9E791, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xE24, symBinAddr: 0x346544, symSize: 0xF4 } + - { offsetInCU: 0x2EED, offset: 0x9E9A3, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xF18, symBinAddr: 0x346638, symSize: 0x168 } + - { offsetInCU: 0x26, offset: 0x9ED08, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x3467A0, symSize: 0x38 } + - { offsetInCU: 0xFA, offset: 0x9EDDC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x3467A0, symSize: 0x38 } + - { offsetInCU: 0x12C, offset: 0x9EE0E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x3467A0, symSize: 0x38 } + - { offsetInCU: 0x199, offset: 0x9EE7B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x3467D8, symSize: 0x3C } + - { offsetInCU: 0x1F3, offset: 0x9EED5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x3467D8, symSize: 0x3C } + - { offsetInCU: 0x31B, offset: 0x9EFFD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0x346814, symSize: 0x5C } + - { offsetInCU: 0x517, offset: 0x9F1F9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0x346870, symSize: 0x1C } + - { offsetInCU: 0x636, offset: 0x9F318, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0x34688C, symSize: 0x54 } + - { offsetInCU: 0x6D9, offset: 0x9F3BB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0x3468E0, symSize: 0x4C } + - { offsetInCU: 0x8A7, offset: 0x9F589, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x34692C, symSize: 0xA8 } + - { offsetInCU: 0x90B, offset: 0x9F5ED, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x34692C, symSize: 0xA8 } + - { offsetInCU: 0xBAA, offset: 0x9F88C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0x3469D4, symSize: 0x110 } + - { offsetInCU: 0xC4C, offset: 0x9F92E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0x3469D4, symSize: 0x110 } + - { offsetInCU: 0xEDE, offset: 0x9FBC0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x344, symBinAddr: 0x346AE4, symSize: 0xB0 } + - { offsetInCU: 0xF5E, offset: 0x9FC40, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x344, symBinAddr: 0x346AE4, symSize: 0xB0 } + - { offsetInCU: 0x10E1, offset: 0x9FDC3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x3F4, symBinAddr: 0x346B94, symSize: 0x178 } + - { offsetInCU: 0x13AB, offset: 0xA008D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x56C, symBinAddr: 0x346D0C, symSize: 0x1F4 } + - { offsetInCU: 0x1500, offset: 0xA01E2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x760, symBinAddr: 0x346F00, symSize: 0x18 } + - { offsetInCU: 0x1567, offset: 0xA0249, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x778, symBinAddr: 0x346F18, symSize: 0xC } + - { offsetInCU: 0x15A0, offset: 0xA0282, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x784, symBinAddr: 0x346F24, symSize: 0x8 } + - { offsetInCU: 0x1624, offset: 0xA0306, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x78C, symBinAddr: 0x346F2C, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0xA04B9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x346F68, symSize: 0x170 } + - { offsetInCU: 0x34, offset: 0xA04C7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x346F68, symSize: 0x170 } + - { offsetInCU: 0x34, offset: 0xA05CD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x374, symBinAddr: 0x1175FF0, symSize: 0x0 } + - { offsetInCU: 0x26, offset: 0xA060F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x3470D8, symSize: 0x388 } + - { offsetInCU: 0x76, offset: 0xA065F, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0xA3E000, symSize: 0x0 } + - { offsetInCU: 0xFA, offset: 0xA06E3, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0xA63000, symSize: 0x0 } + - { offsetInCU: 0x35B, offset: 0xA0944, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x3470D8, symSize: 0x388 } + - { offsetInCU: 0xC66, offset: 0xA124F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x388, symBinAddr: 0x347460, symSize: 0x204 } + - { offsetInCU: 0x1171, offset: 0xA175A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x58C, symBinAddr: 0x347664, symSize: 0x1BC } + - { offsetInCU: 0x10, offset: 0xA1B2F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x347820, symSize: 0x1A0 } + - { offsetInCU: 0x50, offset: 0xA1B6F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x347820, symSize: 0x1A0 } + - { offsetInCU: 0x5E, offset: 0xA1B7D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0x3479C0, symSize: 0x60 } + - { offsetInCU: 0x81, offset: 0xA1BA0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0x347A20, symSize: 0x288 } + - { offsetInCU: 0x10, offset: 0xA1B91, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x347CB0, symSize: 0x130 } + - { offsetInCU: 0x48, offset: 0xA1BC9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x347CB0, symSize: 0x130 } + - { offsetInCU: 0x5F, offset: 0xA1BE0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0x347DE0, symSize: 0x70 } + - { offsetInCU: 0x75, offset: 0xA1BF6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0x347E50, symSize: 0x160 } + - { offsetInCU: 0x7A, offset: 0xA1BFB, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0x347FB0, symSize: 0x378 } + - { offsetInCU: 0x10, offset: 0xA1C09, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x348340, symSize: 0x3A0 } + - { offsetInCU: 0x48, offset: 0xA1C41, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x348340, symSize: 0x3A0 } + - { offsetInCU: 0x4C, offset: 0xA1C45, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0x3486E0, symSize: 0x6C0 } + - { offsetInCU: 0x66, offset: 0xA1C5F, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0x348DA0, symSize: 0x1138 } + - { offsetInCU: 0x50, offset: 0xA1CAB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0x34A040, symSize: 0x1180 } + - { offsetInCU: 0x66, offset: 0xA1CC1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0x34B1C0, symSize: 0x1410 } + - { offsetInCU: 0x10, offset: 0xA1CB7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x34C5E0, symSize: 0x240 } + - { offsetInCU: 0x45, offset: 0xA1CEC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x34C5E0, symSize: 0x240 } + - { offsetInCU: 0x4D, offset: 0xA1CF4, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0x34C820, symSize: 0x9E0 } + - { offsetInCU: 0x63, offset: 0xA1D0A, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0x34D200, symSize: 0x650 } + - { offsetInCU: 0x10, offset: 0xA1D19, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x34D860, symSize: 0x40 } + - { offsetInCU: 0x47, offset: 0xA1D50, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x34D860, symSize: 0x40 } + - { offsetInCU: 0x5D, offset: 0xA1D66, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0x34D8A0, symSize: 0x40 } + - { offsetInCU: 0x76, offset: 0xA1D7F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0x34D8E0, symSize: 0x40 } + - { offsetInCU: 0x81, offset: 0xA1D8A, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0x34D920, symSize: 0x1E0 } + - { offsetInCU: 0x97, offset: 0xA1DA0, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0x34DB00, symSize: 0x170 } + - { offsetInCU: 0xAB, offset: 0xA1DB4, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0x34DC70, symSize: 0x50 } + - { offsetInCU: 0xC3, offset: 0xA1DCC, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0x34DCC0, symSize: 0x50 } + - { offsetInCU: 0xD9, offset: 0xA1DE2, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0x34DD10, symSize: 0x50 } + - { offsetInCU: 0xEF, offset: 0xA1DF8, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0x34DD60, symSize: 0x60 } + - { offsetInCU: 0x111, offset: 0xA1E1A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0x34DDC0, symSize: 0x1E0 } + - { offsetInCU: 0x124, offset: 0xA1E2D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0x34DFA0, symSize: 0x360 } + - { offsetInCU: 0x141, offset: 0xA1E4A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0x34E300, symSize: 0x2D0 } + - { offsetInCU: 0x156, offset: 0xA1E5F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0x34E5D0, symSize: 0x2B0 } + - { offsetInCU: 0x170, offset: 0xA1E79, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0x34E880, symSize: 0x250 } + - { offsetInCU: 0x184, offset: 0xA1E8D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0x34EAD0, symSize: 0x60 } + - { offsetInCU: 0x19A, offset: 0xA1EA3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0x34EB30, symSize: 0x44 } + - { offsetInCU: 0x10, offset: 0xA1E99, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x34EB80, symSize: 0xB90 } + - { offsetInCU: 0x4C, offset: 0xA1ED5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x34EB80, symSize: 0xB90 } + - { offsetInCU: 0x62, offset: 0xA1EEB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0x34F710, symSize: 0xB98 } + - { offsetInCU: 0x10, offset: 0xA1EE5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x3502C0, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xA1F26, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x3502C0, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xA1F26, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x351100, symSize: 0x7E0 } + - { offsetInCU: 0x10, offset: 0xA1F31, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x351900, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xA1F72, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x351900, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xA1F72, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x352740, symSize: 0x1F0 } ... diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/CanvasNative b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/CanvasNative index 77b9e09eb..615d0464d 100755 Binary files a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/CanvasNative and b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/CanvasNative differ diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/canvas_native.h b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/canvas_native.h index 22391179f..7780cf624 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/canvas_native.h +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/canvas_native.h @@ -8,6 +8,16 @@ #include #include +#define CanvasGPUTextureUsageCopySrc (1 << 0) + +#define CanvasGPUTextureUsageCopyDst (1 << 1) + +#define CanvasGPUTextureUsageTextureBinding (1 << 2) + +#define CanvasGPUTextureUsageStorageBinding (1 << 3) + +#define CanvasGPUTextureUsageRenderAttachment (1 << 4) + typedef enum CanvasAddressMode { /** * Clamp the value to the edge of the texture @@ -1731,20 +1741,6 @@ typedef struct CanvasSurfaceCapabilities { uint32_t usages; } CanvasSurfaceCapabilities; -typedef enum CanvasOptionsGPUTextureFormat_Tag { - CanvasOptionsGPUTextureFormatNone, - CanvasOptionsGPUTextureFormatSome, -} CanvasOptionsGPUTextureFormat_Tag; - -typedef struct CanvasOptionsGPUTextureFormat { - CanvasOptionsGPUTextureFormat_Tag tag; - union { - struct { - struct CanvasGPUTextureFormat some; - }; - }; -} CanvasOptionsGPUTextureFormat; - typedef struct CanvasImageSubresourceRange { enum CanvasTextureAspect aspect; uint32_t base_mip_level; @@ -1754,9 +1750,8 @@ typedef struct CanvasImageSubresourceRange { } CanvasImageSubresourceRange; typedef struct CanvasCreateTextureViewDescriptor { - const struct CanvasGPUTexture *texture; const char *label; - struct CanvasOptionsGPUTextureFormat format; + struct CanvasOptionalGPUTextureFormat format; enum CanvasOptionalTextureViewDimension dimension; const struct CanvasImageSubresourceRange *range; } CanvasCreateTextureViewDescriptor; diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/_CodeSignature/CodeResources b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/_CodeSignature/CodeResources index e2314277f..86d9e4ab5 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/_CodeSignature/CodeResources +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/_CodeSignature/CodeResources @@ -18,7 +18,7 @@ Headers/canvas_native.h - TCp4raXxKi7M5mSfVnDJ3HBqGoI= + FrSWw+k1QL7lxYQfhSYLNPZEpAk= Info.plist @@ -108,7 +108,7 @@ hash2 - EhvCU38ipoXK/gfvMZ9eQIHJ8kUgxhZO+CNwrQRsiuc= + /sJIUBOB6pLtcqbQaG8iX/5MASV6BmkqsEQ9pVeiAzU= Modules/CanvasNative.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative index 7160238e3..f043d8507 100644 Binary files a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative and b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative differ diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml index 97bb571b5..562980fc9 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml @@ -2,608 +2,608 @@ triple: 'arm64-apple-darwin' binary-path: '/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/dist/Release-iphonesimulator/CanvasNative.framework/CanvasNative' relocations: - - { offsetInCU: 0x34, offset: 0x77E47, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionString, symObjAddr: 0x0, symBinAddr: 0x963000, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x77E7C, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionNumber, symObjAddr: 0x38, symBinAddr: 0x963038, symSize: 0x0 } - - { offsetInCU: 0x3F, offset: 0x77ED1, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x28, symBinAddr: 0x2F28, symSize: 0xC } - - { offsetInCU: 0x53, offset: 0x77EE5, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x34, symBinAddr: 0x2F34, symSize: 0x4 } - - { offsetInCU: 0x67, offset: 0x77EF9, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x38, symBinAddr: 0x2F38, symSize: 0x20 } - - { offsetInCU: 0x7B, offset: 0x77F0D, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x58, symBinAddr: 0x2F58, symSize: 0x28 } - - { offsetInCU: 0x8F, offset: 0x77F21, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwCP', symObjAddr: 0x94, symBinAddr: 0x2F94, symSize: 0x30 } - - { offsetInCU: 0xA3, offset: 0x77F35, size: 0x8, addend: 0x0, symName: ___swift_memcpy32_8, symObjAddr: 0xC4, symBinAddr: 0x2FC4, symSize: 0xC } - - { offsetInCU: 0xB7, offset: 0x77F49, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwet', symObjAddr: 0xD0, symBinAddr: 0x2FD0, symSize: 0x20 } - - { offsetInCU: 0xCB, offset: 0x77F5D, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwst', symObjAddr: 0xF0, symBinAddr: 0x2FF0, symSize: 0x2C } - - { offsetInCU: 0x4F, offset: 0x78146, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC11_WriteQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2AE8, symBinAddr: 0x115FD00, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x78160, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10_ReadQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2AF0, symBinAddr: 0x115FD08, symSize: 0x0 } - - { offsetInCU: 0x9D, offset: 0x78194, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTo', symObjAddr: 0x4, symBinAddr: 0x3094, symSize: 0x38 } - - { offsetInCU: 0xF3, offset: 0x781EA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x40, symBinAddr: 0x30D0, symSize: 0x70 } - - { offsetInCU: 0x144, offset: 0x7823B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0xB4, symBinAddr: 0x3144, symSize: 0x44 } - - { offsetInCU: 0x19F, offset: 0x78296, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0xFC, symBinAddr: 0x318C, symSize: 0x50 } - - { offsetInCU: 0x204, offset: 0x782FB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0x150, symBinAddr: 0x31E0, symSize: 0x68 } - - { offsetInCU: 0x27D, offset: 0x78374, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x1BC, symBinAddr: 0x324C, symSize: 0x98 } - - { offsetInCU: 0x2DA, offset: 0x783D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x258, symBinAddr: 0x32E8, symSize: 0x14 } - - { offsetInCU: 0x35C, offset: 0x78453, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x270, symBinAddr: 0x3300, symSize: 0x14 } - - { offsetInCU: 0x40B, offset: 0x78502, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZTo', symObjAddr: 0x2C8, symBinAddr: 0x3358, symSize: 0x50 } - - { offsetInCU: 0x4DC, offset: 0x785D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZTo', symObjAddr: 0x364, symBinAddr: 0x33F4, symSize: 0x58 } - - { offsetInCU: 0x5B6, offset: 0x786AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZTo', symObjAddr: 0x404, symBinAddr: 0x3494, symSize: 0x58 } - - { offsetInCU: 0x695, offset: 0x7878C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZTo', symObjAddr: 0x4AC, symBinAddr: 0x353C, symSize: 0x60 } - - { offsetInCU: 0x741, offset: 0x78838, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZTo', symObjAddr: 0x510, symBinAddr: 0x35A0, symSize: 0x8 } - - { offsetInCU: 0x7AA, offset: 0x788A1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZTo', symObjAddr: 0x51C, symBinAddr: 0x35AC, symSize: 0x8 } - - { offsetInCU: 0x801, offset: 0x788F8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZTo', symObjAddr: 0x538, symBinAddr: 0x35C8, symSize: 0x8 } - - { offsetInCU: 0x858, offset: 0x7894F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZTo', symObjAddr: 0x544, symBinAddr: 0x35D4, symSize: 0x8 } - - { offsetInCU: 0x8AF, offset: 0x789A6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZTo', symObjAddr: 0x550, symBinAddr: 0x35E0, symSize: 0x8 } - - { offsetInCU: 0x906, offset: 0x789FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZTo', symObjAddr: 0x55C, symBinAddr: 0x35EC, symSize: 0x8 } - - { offsetInCU: 0x985, offset: 0x78A7C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZTo', symObjAddr: 0x56C, symBinAddr: 0x35FC, symSize: 0x24 } - - { offsetInCU: 0xA36, offset: 0x78B2D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZTo', symObjAddr: 0x594, symBinAddr: 0x3624, symSize: 0x14 } - - { offsetInCU: 0xAA9, offset: 0x78BA0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZTo', symObjAddr: 0x5AC, symBinAddr: 0x363C, symSize: 0x8 } - - { offsetInCU: 0xB00, offset: 0x78BF7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZTo', symObjAddr: 0x60C, symBinAddr: 0x369C, symSize: 0x74 } - - { offsetInCU: 0xB8B, offset: 0x78C82, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTo', symObjAddr: 0x814, symBinAddr: 0x38A4, symSize: 0xA0 } - - { offsetInCU: 0xBDC, offset: 0x78CD3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZTo', symObjAddr: 0xB1C, symBinAddr: 0x3BAC, symSize: 0x98 } - - { offsetInCU: 0xC2D, offset: 0x78D24, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZTo', symObjAddr: 0xE70, symBinAddr: 0x3F00, symSize: 0x98 } - - { offsetInCU: 0xC89, offset: 0x78D80, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTo', symObjAddr: 0x1298, symBinAddr: 0x4328, symSize: 0xD8 } - - { offsetInCU: 0xCD1, offset: 0x78DC8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTo', symObjAddr: 0x1374, symBinAddr: 0x4404, symSize: 0x34 } - - { offsetInCU: 0xD31, offset: 0x78E28, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfcTo', symObjAddr: 0x13F8, symBinAddr: 0x4488, symSize: 0x3C } - - { offsetInCU: 0xD82, offset: 0x78E79, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTf4nd_n', symObjAddr: 0x1468, symBinAddr: 0x44F8, symSize: 0x2AC } - - { offsetInCU: 0xFB6, offset: 0x790AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTf4nnnd_n', symObjAddr: 0x1714, symBinAddr: 0x47A4, symSize: 0x264 } - - { offsetInCU: 0x11B0, offset: 0x792A7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTf4nnd_n', symObjAddr: 0x1978, symBinAddr: 0x4A08, symSize: 0xEC } - - { offsetInCU: 0x12AD, offset: 0x793A4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTf4nnnnd_n', symObjAddr: 0x1A64, symBinAddr: 0x4AF4, symSize: 0x1B4 } - - { offsetInCU: 0x1422, offset: 0x79519, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTf4nnnnnnd_n', symObjAddr: 0x1C18, symBinAddr: 0x4CA8, symSize: 0x1CC } - - { offsetInCU: 0x15B7, offset: 0x796AE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTf4nnnnnnnnnnd_n', symObjAddr: 0x1DE4, symBinAddr: 0x4E74, symSize: 0x1E0 } - - { offsetInCU: 0x17A3, offset: 0x7989A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTf4nnnd_n', symObjAddr: 0x1FC4, symBinAddr: 0x5054, symSize: 0x1B4 } - - { offsetInCU: 0x186D, offset: 0x79964, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTf4nnnnd_n', symObjAddr: 0x231C, symBinAddr: 0x53AC, symSize: 0x1D4 } - - { offsetInCU: 0x194E, offset: 0x79A45, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTf4d_n', symObjAddr: 0x24F0, symBinAddr: 0x5580, symSize: 0x114 } - - { offsetInCU: 0x19F9, offset: 0x79AF0, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TR', symObjAddr: 0x8B4, symBinAddr: 0x3944, symSize: 0x78 } - - { offsetInCU: 0x1A11, offset: 0x79B08, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TR', symObjAddr: 0xBB4, symBinAddr: 0x3C44, symSize: 0x54 } - - { offsetInCU: 0x1A7E, offset: 0x79B75, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfETo', symObjAddr: 0x1464, symBinAddr: 0x44F4, symSize: 0x4 } - - { offsetInCU: 0x1B09, offset: 0x79C00, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCMa', symObjAddr: 0x2604, symBinAddr: 0x5694, symSize: 0x20 } - - { offsetInCU: 0x1B1D, offset: 0x79C14, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TRTA', symObjAddr: 0x2648, symBinAddr: 0x56D8, symSize: 0x8 } - - { offsetInCU: 0x1B3C, offset: 0x79C33, size: 0x8, addend: 0x0, symName: '_$sSo7NSErrorCSg10ObjectiveC8ObjCBoolVIeyByy_ACSbIeggy_TRTA', symObjAddr: 0x2650, symBinAddr: 0x56E0, symSize: 0x18 } - - { offsetInCU: 0x1B65, offset: 0x79C5C, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TRTA', symObjAddr: 0x2668, symBinAddr: 0x56F8, symSize: 0x8 } - - { offsetInCU: 0x1B79, offset: 0x79C70, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCMa', symObjAddr: 0x2670, symBinAddr: 0x5700, symSize: 0x3C } - - { offsetInCU: 0x1B8D, offset: 0x79C84, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_TA', symObjAddr: 0x26F0, symBinAddr: 0x5780, symSize: 0x34 } - - { offsetInCU: 0x1BA1, offset: 0x79C98, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x2724, symBinAddr: 0x57B4, symSize: 0x10 } - - { offsetInCU: 0x1BB5, offset: 0x79CAC, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x2734, symBinAddr: 0x57C4, symSize: 0x8 } - - { offsetInCU: 0x1BC9, offset: 0x79CC0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2760, symBinAddr: 0x57F0, symSize: 0x40 } - - { offsetInCU: 0x1BFD, offset: 0x79CF4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x27E4, symBinAddr: 0x5874, symSize: 0x40 } - - { offsetInCU: 0x1C3B, offset: 0x79D32, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2824, symBinAddr: 0x58B4, symSize: 0x28 } - - { offsetInCU: 0x1C6F, offset: 0x79D66, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x28A4, symBinAddr: 0x5934, symSize: 0x3C } - - { offsetInCU: 0x1CA3, offset: 0x79D9A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x290C, symBinAddr: 0x599C, symSize: 0x30 } - - { offsetInCU: 0x1CDF, offset: 0x79DD6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_TA', symObjAddr: 0x2978, symBinAddr: 0x5A08, symSize: 0x10 } - - { offsetInCU: 0x1CF3, offset: 0x79DEA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2988, symBinAddr: 0x5A18, symSize: 0x40 } - - { offsetInCU: 0x21C0, offset: 0x7A2B7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZ', symObjAddr: 0x0, symBinAddr: 0x3090, symSize: 0x4 } - - { offsetInCU: 0x21DB, offset: 0x7A2D2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x3C, symBinAddr: 0x30CC, symSize: 0x4 } - - { offsetInCU: 0x21F6, offset: 0x7A2ED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0xB0, symBinAddr: 0x3140, symSize: 0x4 } - - { offsetInCU: 0x2217, offset: 0x7A30E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0xF8, symBinAddr: 0x3188, symSize: 0x4 } - - { offsetInCU: 0x2232, offset: 0x7A329, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0x14C, symBinAddr: 0x31DC, symSize: 0x4 } - - { offsetInCU: 0x224D, offset: 0x7A344, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x1B8, symBinAddr: 0x3248, symSize: 0x4 } - - { offsetInCU: 0x2268, offset: 0x7A35F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x254, symBinAddr: 0x32E4, symSize: 0x4 } - - { offsetInCU: 0x22F6, offset: 0x7A3ED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x26C, symBinAddr: 0x32FC, symSize: 0x4 } - - { offsetInCU: 0x2375, offset: 0x7A46C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZ', symObjAddr: 0x284, symBinAddr: 0x3314, symSize: 0x44 } - - { offsetInCU: 0x24B3, offset: 0x7A5AA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZ', symObjAddr: 0x318, symBinAddr: 0x33A8, symSize: 0x4C } - - { offsetInCU: 0x25FC, offset: 0x7A6F3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZ', symObjAddr: 0x3BC, symBinAddr: 0x344C, symSize: 0x48 } - - { offsetInCU: 0x2744, offset: 0x7A83B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZ', symObjAddr: 0x45C, symBinAddr: 0x34EC, symSize: 0x50 } - - { offsetInCU: 0x28A1, offset: 0x7A998, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZ', symObjAddr: 0x50C, symBinAddr: 0x359C, symSize: 0x4 } - - { offsetInCU: 0x2913, offset: 0x7AA0A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZ', symObjAddr: 0x518, symBinAddr: 0x35A8, symSize: 0x4 } - - { offsetInCU: 0x2956, offset: 0x7AA4D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZ', symObjAddr: 0x524, symBinAddr: 0x35B4, symSize: 0x14 } - - { offsetInCU: 0x299B, offset: 0x7AA92, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZ', symObjAddr: 0x540, symBinAddr: 0x35D0, symSize: 0x4 } - - { offsetInCU: 0x29DE, offset: 0x7AAD5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZ', symObjAddr: 0x54C, symBinAddr: 0x35DC, symSize: 0x4 } - - { offsetInCU: 0x2A21, offset: 0x7AB18, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZ', symObjAddr: 0x558, symBinAddr: 0x35E8, symSize: 0x4 } - - { offsetInCU: 0x2A64, offset: 0x7AB5B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZ', symObjAddr: 0x564, symBinAddr: 0x35F4, symSize: 0x8 } - - { offsetInCU: 0x2B4B, offset: 0x7AC42, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ', symObjAddr: 0x590, symBinAddr: 0x3620, symSize: 0x4 } - - { offsetInCU: 0x2BCA, offset: 0x7ACC1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZ', symObjAddr: 0x5A8, symBinAddr: 0x3638, symSize: 0x4 } - - { offsetInCU: 0x2C0D, offset: 0x7AD04, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZ', symObjAddr: 0x5B4, symBinAddr: 0x3644, symSize: 0x58 } - - { offsetInCU: 0x2CCE, offset: 0x7ADC5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZ', symObjAddr: 0x680, symBinAddr: 0x3710, symSize: 0x4 } - - { offsetInCU: 0x2CE2, offset: 0x7ADD9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_', symObjAddr: 0x684, symBinAddr: 0x3714, symSize: 0x190 } - - { offsetInCU: 0x2D82, offset: 0x7AE79, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZ', symObjAddr: 0x92C, symBinAddr: 0x39BC, symSize: 0x2C } - - { offsetInCU: 0x2D96, offset: 0x7AE8D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_', symObjAddr: 0x958, symBinAddr: 0x39E8, symSize: 0x1C4 } - - { offsetInCU: 0x2E80, offset: 0x7AF77, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZ', symObjAddr: 0xC08, symBinAddr: 0x3C98, symSize: 0x2C } - - { offsetInCU: 0x2E94, offset: 0x7AF8B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_', symObjAddr: 0xC34, symBinAddr: 0x3CC4, symSize: 0x23C } - - { offsetInCU: 0x2F48, offset: 0x7B03F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZ', symObjAddr: 0xF08, symBinAddr: 0x3F98, symSize: 0x4 } - - { offsetInCU: 0x2F5C, offset: 0x7B053, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_', symObjAddr: 0xF0C, symBinAddr: 0x3F9C, symSize: 0x38C } - - { offsetInCU: 0x31F3, offset: 0x7B2EA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZ', symObjAddr: 0x1370, symBinAddr: 0x4400, symSize: 0x4 } - - { offsetInCU: 0x320E, offset: 0x7B305, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfC', symObjAddr: 0x13A8, symBinAddr: 0x4438, symSize: 0x20 } - - { offsetInCU: 0x3222, offset: 0x7B319, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfc', symObjAddr: 0x13C8, symBinAddr: 0x4458, symSize: 0x30 } - - { offsetInCU: 0x3258, offset: 0x7B34F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfD', symObjAddr: 0x1434, symBinAddr: 0x44C4, symSize: 0x30 } - - { offsetInCU: 0x4F, offset: 0x7B587, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LLSo7GLKViewCvpZ', symObjAddr: 0x5520, symBinAddr: 0x115FD40, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x7B5A1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15_shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvpZ', symObjAddr: 0x5528, symBinAddr: 0x115FD48, symSize: 0x0 } - - { offsetInCU: 0x83, offset: 0x7B5BB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5storeSo19NSMutableDictionaryCvpZ', symObjAddr: 0x5530, symBinAddr: 0x115FD50, symSize: 0x0 } - - { offsetInCU: 0x9D, offset: 0x7B5D5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LLSo10NSMapTableCySo8NSStringCACGvpZ', symObjAddr: 0x5538, symBinAddr: 0x115FD58, symSize: 0x0 } - - { offsetInCU: 0xAB, offset: 0x7B5E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0x0, symBinAddr: 0x5B40, symSize: 0x40 } - - { offsetInCU: 0xF0, offset: 0x7B628, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5store_WZ', symObjAddr: 0x40, symBinAddr: 0x5B80, symSize: 0x30 } - - { offsetInCU: 0x135, offset: 0x7B66D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0xA8, symBinAddr: 0x5BE8, symSize: 0x40 } - - { offsetInCU: 0x187, offset: 0x7B6BF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x194, symBinAddr: 0x5CD4, symSize: 0x10 } - - { offsetInCU: 0x1A7, offset: 0x7B6DF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x194, symBinAddr: 0x5CD4, symSize: 0x10 } - - { offsetInCU: 0x1DD, offset: 0x7B715, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x1A4, symBinAddr: 0x5CE4, symSize: 0x10 } - - { offsetInCU: 0x1FD, offset: 0x7B735, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x1A4, symBinAddr: 0x5CE4, symSize: 0x10 } - - { offsetInCU: 0x236, offset: 0x7B76E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x1B4, symBinAddr: 0x5CF4, symSize: 0x10 } - - { offsetInCU: 0x256, offset: 0x7B78E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x1B4, symBinAddr: 0x5CF4, symSize: 0x10 } - - { offsetInCU: 0x28C, offset: 0x7B7C4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x1C4, symBinAddr: 0x5D04, symSize: 0x10 } - - { offsetInCU: 0x2AC, offset: 0x7B7E4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x1C4, symBinAddr: 0x5D04, symSize: 0x10 } - - { offsetInCU: 0x2E5, offset: 0x7B81D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvgTo', symObjAddr: 0x29C, symBinAddr: 0x5DDC, symSize: 0x44 } - - { offsetInCU: 0x322, offset: 0x7B85A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvsTo', symObjAddr: 0x324, symBinAddr: 0x5E64, symSize: 0x30 } - - { offsetInCU: 0x3B1, offset: 0x7B8E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvgTo', symObjAddr: 0x578, symBinAddr: 0x60B8, symSize: 0x44 } - - { offsetInCU: 0x409, offset: 0x7B941, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvsTo', symObjAddr: 0x600, symBinAddr: 0x6140, symSize: 0x48 } - - { offsetInCU: 0x464, offset: 0x7B99C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvgTo', symObjAddr: 0x648, symBinAddr: 0x6188, symSize: 0x44 } - - { offsetInCU: 0x4BC, offset: 0x7B9F4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvsTo', symObjAddr: 0x6D0, symBinAddr: 0x6210, symSize: 0x48 } - - { offsetInCU: 0x517, offset: 0x7BA4F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0x718, symBinAddr: 0x6258, symSize: 0x10 } - - { offsetInCU: 0x537, offset: 0x7BA6F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0x718, symBinAddr: 0x6258, symSize: 0x10 } - - { offsetInCU: 0x56D, offset: 0x7BAA5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0x728, symBinAddr: 0x6268, symSize: 0x10 } - - { offsetInCU: 0x58D, offset: 0x7BAC5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0x728, symBinAddr: 0x6268, symSize: 0x10 } - - { offsetInCU: 0x5C6, offset: 0x7BAFE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0x738, symBinAddr: 0x6278, symSize: 0x10 } - - { offsetInCU: 0x5E6, offset: 0x7BB1E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0x738, symBinAddr: 0x6278, symSize: 0x10 } - - { offsetInCU: 0x61E, offset: 0x7BB56, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvsTo', symObjAddr: 0x748, symBinAddr: 0x6288, symSize: 0x34 } - - { offsetInCU: 0x677, offset: 0x7BBAF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x77C, symBinAddr: 0x62BC, symSize: 0x10 } - - { offsetInCU: 0x697, offset: 0x7BBCF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x77C, symBinAddr: 0x62BC, symSize: 0x10 } - - { offsetInCU: 0x6CF, offset: 0x7BC07, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvsTo', symObjAddr: 0x78C, symBinAddr: 0x62CC, symSize: 0x34 } - - { offsetInCU: 0x728, offset: 0x7BC60, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x7C0, symBinAddr: 0x6300, symSize: 0x10 } - - { offsetInCU: 0x748, offset: 0x7BC80, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x7C0, symBinAddr: 0x6300, symSize: 0x10 } - - { offsetInCU: 0x77E, offset: 0x7BCB6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x7D0, symBinAddr: 0x6310, symSize: 0x10 } - - { offsetInCU: 0x79E, offset: 0x7BCD6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x7D0, symBinAddr: 0x6310, symSize: 0x10 } - - { offsetInCU: 0x7D7, offset: 0x7BD0F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvgTo', symObjAddr: 0x7E0, symBinAddr: 0x6320, symSize: 0x10 } - - { offsetInCU: 0x7F7, offset: 0x7BD2F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvgTo', symObjAddr: 0x7E0, symBinAddr: 0x6320, symSize: 0x10 } - - { offsetInCU: 0x82D, offset: 0x7BD65, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvsTo', symObjAddr: 0x7F0, symBinAddr: 0x6330, symSize: 0x10 } - - { offsetInCU: 0x84D, offset: 0x7BD85, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvsTo', symObjAddr: 0x7F0, symBinAddr: 0x6330, symSize: 0x10 } - - { offsetInCU: 0x870, offset: 0x7BDA8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivgTo', symObjAddr: 0x800, symBinAddr: 0x6340, symSize: 0x34 } - - { offsetInCU: 0x8A2, offset: 0x7BDDA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivgTo', symObjAddr: 0x904, symBinAddr: 0x6444, symSize: 0x34 } - - { offsetInCU: 0x8EA, offset: 0x7BE22, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvgTo', symObjAddr: 0xA08, symBinAddr: 0x6548, symSize: 0x20 } - - { offsetInCU: 0x952, offset: 0x7BE8A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvgTo', symObjAddr: 0xA4C, symBinAddr: 0x658C, symSize: 0x20 } - - { offsetInCU: 0x9F1, offset: 0x7BF29, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btFTo', symObjAddr: 0xAB4, symBinAddr: 0x65F4, symSize: 0xC4 } - - { offsetInCU: 0xAB4, offset: 0x7BFEC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VFTo', symObjAddr: 0xD10, symBinAddr: 0x6850, symSize: 0x30 } - - { offsetInCU: 0xB64, offset: 0x7C09C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x15B0, symBinAddr: 0x70F0, symSize: 0xC4 } - - { offsetInCU: 0xBCE, offset: 0x7C106, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtFTo', symObjAddr: 0x18CC, symBinAddr: 0x740C, symSize: 0xB0 } - - { offsetInCU: 0xC0B, offset: 0x7C143, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x1A3C, symBinAddr: 0x757C, symSize: 0xB8 } - - { offsetInCU: 0xC83, offset: 0x7C1BB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbFTo', symObjAddr: 0x1BD8, symBinAddr: 0x7718, symSize: 0x3C } - - { offsetInCU: 0xCB6, offset: 0x7C1EE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1C14, symBinAddr: 0x7754, symSize: 0x10 } - - { offsetInCU: 0xCD6, offset: 0x7C20E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1C14, symBinAddr: 0x7754, symSize: 0x10 } - - { offsetInCU: 0xD10, offset: 0x7C248, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvsTo', symObjAddr: 0x1C24, symBinAddr: 0x7764, symSize: 0x34 } - - { offsetInCU: 0xD6B, offset: 0x7C2A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyFTo', symObjAddr: 0x1CA0, symBinAddr: 0x77E0, symSize: 0x48 } - - { offsetInCU: 0xE05, offset: 0x7C33D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VFTo', symObjAddr: 0x1D34, symBinAddr: 0x7874, symSize: 0x64 } - - { offsetInCU: 0xECA, offset: 0x7C402, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VFTo', symObjAddr: 0x1DF0, symBinAddr: 0x7930, symSize: 0x94 } - - { offsetInCU: 0xF57, offset: 0x7C48F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC23enterBackgroundListeneryycSgvsTo', symObjAddr: 0x1EC4, symBinAddr: 0x7A04, symSize: 0x6C } - - { offsetInCU: 0xFB9, offset: 0x7C4F1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC20becomeActiveListeneryycSgvsTo', symObjAddr: 0x1FD4, symBinAddr: 0x7B14, symSize: 0x6C } - - { offsetInCU: 0x1016, offset: 0x7C54E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvgTo', symObjAddr: 0x2040, symBinAddr: 0x7B80, symSize: 0xB0 } - - { offsetInCU: 0x1068, offset: 0x7C5A0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvsTo', symObjAddr: 0x21C0, symBinAddr: 0x7D00, symSize: 0x94 } - - { offsetInCU: 0x10FA, offset: 0x7C632, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x2E5C, symBinAddr: 0x899C, symSize: 0x28 } - - { offsetInCU: 0x114F, offset: 0x7C687, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x38A4, symBinAddr: 0x93E4, symSize: 0x20 } - - { offsetInCU: 0x1182, offset: 0x7C6BA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x38C4, symBinAddr: 0x9404, symSize: 0x10 } - - { offsetInCU: 0x11A2, offset: 0x7C6DA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x38C4, symBinAddr: 0x9404, symSize: 0x10 } - - { offsetInCU: 0x11DA, offset: 0x7C712, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvsTo', symObjAddr: 0x38D4, symBinAddr: 0x9414, symSize: 0x34 } - - { offsetInCU: 0x1248, offset: 0x7C780, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvgTo', symObjAddr: 0x3988, symBinAddr: 0x94C8, symSize: 0x20 } - - { offsetInCU: 0x12A2, offset: 0x7C7DA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvsTo', symObjAddr: 0x39A8, symBinAddr: 0x94E8, symSize: 0x34 } - - { offsetInCU: 0x1302, offset: 0x7C83A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgFTo', symObjAddr: 0x3A0C, symBinAddr: 0x954C, symSize: 0x34 } - - { offsetInCU: 0x1446, offset: 0x7C97E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFTo', symObjAddr: 0x3D58, symBinAddr: 0x9898, symSize: 0x28 } - - { offsetInCU: 0x1479, offset: 0x7C9B1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfDTo', symObjAddr: 0x4084, symBinAddr: 0x9BC4, symSize: 0x24 } - - { offsetInCU: 0x14B4, offset: 0x7C9EC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTo', symObjAddr: 0x4170, symBinAddr: 0x9CB0, symSize: 0x34 } - - { offsetInCU: 0x14E7, offset: 0x7CA1F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvgZTf4d_n', symObjAddr: 0x4B04, symBinAddr: 0xA644, symSize: 0x298 } - - { offsetInCU: 0x1664, offset: 0x7CB9C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTf4nnd_n', symObjAddr: 0x4E60, symBinAddr: 0xA9A0, symSize: 0xA0 } - - { offsetInCU: 0x18E0, offset: 0x7CE18, size: 0x8, addend: 0x0, symName: '_$sIeg_IeyB_TR', symObjAddr: 0x1E98, symBinAddr: 0x79D8, symSize: 0x2C } - - { offsetInCU: 0x18F8, offset: 0x7CE30, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_So8NSStringCABIeyByy_TR', symObjAddr: 0x2148, symBinAddr: 0x7C88, symSize: 0x78 } - - { offsetInCU: 0x1910, offset: 0x7CE48, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTK', symObjAddr: 0x22B0, symBinAddr: 0x7DF0, symSize: 0x94 } - - { offsetInCU: 0x1948, offset: 0x7CE80, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTk', symObjAddr: 0x2344, symBinAddr: 0x7E84, symSize: 0xB8 } - - { offsetInCU: 0x198A, offset: 0x7CEC2, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TR', symObjAddr: 0x23FC, symBinAddr: 0x7F3C, symSize: 0x6C } - - { offsetInCU: 0x1A3A, offset: 0x7CF72, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfETo', symObjAddr: 0x40A8, symBinAddr: 0x9BE8, symSize: 0xC4 } - - { offsetInCU: 0x1A6A, offset: 0x7CFA2, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOy', symObjAddr: 0x41A4, symBinAddr: 0x9CE4, symSize: 0x10 } - - { offsetInCU: 0x1A7E, offset: 0x7CFB6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCMa', symObjAddr: 0x41B4, symBinAddr: 0x9CF4, symSize: 0x20 } - - { offsetInCU: 0x1A92, offset: 0x7CFCA, size: 0x8, addend: 0x0, symName: '_$ss29getContiguousArrayStorageType3fors01_bcD0CyxGmxm_tlFSo18NSLayoutConstraintC_Tgm5', symObjAddr: 0x41D4, symBinAddr: 0x9D14, symSize: 0x64 } - - { offsetInCU: 0x1C99, offset: 0x7D1D1, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x4D9C, symBinAddr: 0xA8DC, symSize: 0x40 } - - { offsetInCU: 0x1CAD, offset: 0x7D1E5, size: 0x8, addend: 0x0, symName: '_$sypSgWOh', symObjAddr: 0x4DDC, symBinAddr: 0xA91C, symSize: 0x40 } - - { offsetInCU: 0x1CC1, offset: 0x7D1F9, size: 0x8, addend: 0x0, symName: ___swift_project_boxed_opaque_existential_0, symObjAddr: 0x4E1C, symBinAddr: 0xA95C, symSize: 0x24 } - - { offsetInCU: 0x1CD5, offset: 0x7D20D, size: 0x8, addend: 0x0, symName: ___swift_destroy_boxed_opaque_existential_0, symObjAddr: 0x4E40, symBinAddr: 0xA980, symSize: 0x20 } - - { offsetInCU: 0x1CF4, offset: 0x7D22C, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSo19UIGestureRecognizerCIeyByy_SSADIeggg_TRTA', symObjAddr: 0x532C, symBinAddr: 0xAE6C, symSize: 0x48 } - - { offsetInCU: 0x1D1D, offset: 0x7D255, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x5374, symBinAddr: 0xAEB4, symSize: 0x10 } - - { offsetInCU: 0x1D31, offset: 0x7D269, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x5384, symBinAddr: 0xAEC4, symSize: 0x8 } - - { offsetInCU: 0x1D45, offset: 0x7D27D, size: 0x8, addend: 0x0, symName: '_$sIeg_SgWOe', symObjAddr: 0x538C, symBinAddr: 0xAECC, symSize: 0x10 } - - { offsetInCU: 0x1D64, offset: 0x7D29C, size: 0x8, addend: 0x0, symName: '_$sIeyB_Ieg_TRTA', symObjAddr: 0x539C, symBinAddr: 0xAEDC, symSize: 0xC } - - { offsetInCU: 0x1D8D, offset: 0x7D2C5, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TRTA', symObjAddr: 0x53CC, symBinAddr: 0xAF0C, symSize: 0x8 } - - { offsetInCU: 0x1DAC, offset: 0x7D2E4, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SSABytIegnnr_TRTA', symObjAddr: 0x53D4, symBinAddr: 0xAF14, symSize: 0x30 } - - { offsetInCU: 0x1DD5, offset: 0x7D30D, size: 0x8, addend: 0x0, symName: '_$sypWOb', symObjAddr: 0x5404, symBinAddr: 0xAF44, symSize: 0x10 } - - { offsetInCU: 0x1DE9, offset: 0x7D321, size: 0x8, addend: 0x0, symName: '_$sypWOc', symObjAddr: 0x544C, symBinAddr: 0xAF8C, symSize: 0x3C } - - { offsetInCU: 0x206E, offset: 0x7D5A6, size: 0x8, addend: 0x0, symName: '_$sSD17dictionaryLiteralSDyxq_Gx_q_td_tcfCSS_ypTgm5Tf4g_n', symObjAddr: 0x49F4, symBinAddr: 0xA534, symSize: 0x110 } - - { offsetInCU: 0x251C, offset: 0x7DA54, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvg', symObjAddr: 0x2E0, symBinAddr: 0x5E20, symSize: 0x44 } - - { offsetInCU: 0x254F, offset: 0x7DA87, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvs', symObjAddr: 0x354, symBinAddr: 0x5E94, symSize: 0xEC } - - { offsetInCU: 0x259B, offset: 0x7DAD3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM', symObjAddr: 0x440, symBinAddr: 0x5F80, symSize: 0x58 } - - { offsetInCU: 0x25C0, offset: 0x7DAF8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM.resume.0', symObjAddr: 0x498, symBinAddr: 0x5FD8, symSize: 0xE0 } - - { offsetInCU: 0x2601, offset: 0x7DB39, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64Vvg', symObjAddr: 0x5BC, symBinAddr: 0x60FC, symSize: 0x44 } - - { offsetInCU: 0x2659, offset: 0x7DB91, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg', symObjAddr: 0x68C, symBinAddr: 0x61CC, symSize: 0x44 } - - { offsetInCU: 0x27C7, offset: 0x7DCFF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivg', symObjAddr: 0x834, symBinAddr: 0x6374, symSize: 0xD0 } - - { offsetInCU: 0x28EC, offset: 0x7DE24, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivg', symObjAddr: 0x938, symBinAddr: 0x6478, symSize: 0xD0 } - - { offsetInCU: 0x2A32, offset: 0x7DF6A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvg', symObjAddr: 0xA28, symBinAddr: 0x6568, symSize: 0x24 } - - { offsetInCU: 0x2A7A, offset: 0x7DFB2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvg', symObjAddr: 0xA6C, symBinAddr: 0x65AC, symSize: 0x24 } - - { offsetInCU: 0x2AAE, offset: 0x7DFE6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btF', symObjAddr: 0xA90, symBinAddr: 0x65D0, symSize: 0x24 } - - { offsetInCU: 0x2C3C, offset: 0x7E174, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VF', symObjAddr: 0xB78, symBinAddr: 0x66B8, symSize: 0x198 } - - { offsetInCU: 0x302F, offset: 0x7E567, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btF', symObjAddr: 0xD40, symBinAddr: 0x6880, symSize: 0x870 } - - { offsetInCU: 0x3832, offset: 0x7ED6A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtF', symObjAddr: 0x1674, symBinAddr: 0x71B4, symSize: 0x258 } - - { offsetInCU: 0x3C64, offset: 0x7F19C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x197C, symBinAddr: 0x74BC, symSize: 0xC0 } - - { offsetInCU: 0x3CF5, offset: 0x7F22D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbF', symObjAddr: 0x1AF4, symBinAddr: 0x7634, symSize: 0xE4 } - - { offsetInCU: 0x3E50, offset: 0x7F388, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyF', symObjAddr: 0x1C58, symBinAddr: 0x7798, symSize: 0x48 } - - { offsetInCU: 0x3ED6, offset: 0x7F40E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF', symObjAddr: 0x1CE8, symBinAddr: 0x7828, symSize: 0x4C } - - { offsetInCU: 0x3FF7, offset: 0x7F52F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VF', symObjAddr: 0x1D98, symBinAddr: 0x78D8, symSize: 0x58 } - - { offsetInCU: 0x40ED, offset: 0x7F625, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvg', symObjAddr: 0x20F0, symBinAddr: 0x7C30, symSize: 0x58 } - - { offsetInCU: 0x4139, offset: 0x7F671, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvs', symObjAddr: 0x2254, symBinAddr: 0x7D94, symSize: 0x5C } - - { offsetInCU: 0x4162, offset: 0x7F69A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM', symObjAddr: 0x2468, symBinAddr: 0x7FA8, symSize: 0x44 } - - { offsetInCU: 0x4188, offset: 0x7F6C0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM.resume.0', symObjAddr: 0x24AC, symBinAddr: 0x7FEC, symSize: 0x4 } - - { offsetInCU: 0x424A, offset: 0x7F782, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x24B0, symBinAddr: 0x7FF0, symSize: 0x9AC } - - { offsetInCU: 0x444F, offset: 0x7F987, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfC', symObjAddr: 0x2E84, symBinAddr: 0x89C4, symSize: 0x50 } - - { offsetInCU: 0x4478, offset: 0x7F9B0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfc', symObjAddr: 0x2ED4, symBinAddr: 0x8A14, symSize: 0x9D0 } - - { offsetInCU: 0x469E, offset: 0x7FBD6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvW', symObjAddr: 0x3908, symBinAddr: 0x9448, symSize: 0x80 } - - { offsetInCU: 0x4794, offset: 0x7FCCC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgF', symObjAddr: 0x39DC, symBinAddr: 0x951C, symSize: 0x30 } - - { offsetInCU: 0x4832, offset: 0x7FD6A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6resize33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x3A40, symBinAddr: 0x9580, symSize: 0x144 } - - { offsetInCU: 0x4A33, offset: 0x7FF6B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyF', symObjAddr: 0x3B84, symBinAddr: 0x96C4, symSize: 0x1D4 } - - { offsetInCU: 0x4CB0, offset: 0x801E8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfD', symObjAddr: 0x3D80, symBinAddr: 0x98C0, symSize: 0x304 } - - { offsetInCU: 0x4D40, offset: 0x80278, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZ', symObjAddr: 0x416C, symBinAddr: 0x9CAC, symSize: 0x4 } - - { offsetInCU: 0x4D68, offset: 0x802A0, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4findys10_HashTableV6BucketV6bucket_Sb5foundtxSHRzlFSS_Tg5', symObjAddr: 0x4238, symBinAddr: 0x9D78, symSize: 0x64 } - - { offsetInCU: 0x4DC2, offset: 0x802FA, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV7_insert2at3key5valueys10_HashTableV6BucketV_xnq_ntFSS_ypTg5', symObjAddr: 0x429C, symBinAddr: 0x9DDC, symSize: 0x6C } - - { offsetInCU: 0x4E42, offset: 0x8037A, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV12mutatingFind_8isUniques10_HashTableV6BucketV6bucket_Sb5foundtx_SbtFSS_ypTg5', symObjAddr: 0x4308, symBinAddr: 0x9E48, symSize: 0xD8 } - - { offsetInCU: 0x4E7F, offset: 0x803B7, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4find_9hashValues10_HashTableV6BucketV6bucket_Sb5foundtx_SitSHRzlFSS_Tg5', symObjAddr: 0x43E0, symBinAddr: 0x9F20, symSize: 0xE0 } - - { offsetInCU: 0x4EFA, offset: 0x80432, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV4copyyyFSS_ypTg5', symObjAddr: 0x44C0, symBinAddr: 0xA000, symSize: 0x1F4 } - - { offsetInCU: 0x4FB6, offset: 0x804EE, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV20_copyOrMoveAndResize8capacity12moveElementsySi_SbtFSS_ypTg5', symObjAddr: 0x46B4, symBinAddr: 0xA1F4, symSize: 0x340 } - - { offsetInCU: 0x27, offset: 0x8073B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xB02C, symSize: 0x10 } - - { offsetInCU: 0x62, offset: 0x80776, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCMa', symObjAddr: 0x10, symBinAddr: 0xB03C, symSize: 0x20 } - - { offsetInCU: 0x1AF, offset: 0x808C3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xB02C, symSize: 0x10 } - - { offsetInCU: 0x65, offset: 0x80952, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvgTo', symObjAddr: 0x0, symBinAddr: 0xB05C, symSize: 0x10 } - - { offsetInCU: 0x85, offset: 0x80972, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvgTo', symObjAddr: 0x0, symBinAddr: 0xB05C, symSize: 0x10 } - - { offsetInCU: 0xBB, offset: 0x809A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvsTo', symObjAddr: 0x10, symBinAddr: 0xB06C, symSize: 0x10 } - - { offsetInCU: 0xDB, offset: 0x809C8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvsTo', symObjAddr: 0x10, symBinAddr: 0xB06C, symSize: 0x10 } - - { offsetInCU: 0x114, offset: 0x80A01, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvgTo', symObjAddr: 0x20, symBinAddr: 0xB07C, symSize: 0x44 } - - { offsetInCU: 0x16C, offset: 0x80A59, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvsTo', symObjAddr: 0x64, symBinAddr: 0xB0C0, symSize: 0x48 } - - { offsetInCU: 0x1C7, offset: 0x80AB4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvgTo', symObjAddr: 0xAC, symBinAddr: 0xB108, symSize: 0x44 } - - { offsetInCU: 0x21F, offset: 0x80B0C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvsTo', symObjAddr: 0xF0, symBinAddr: 0xB14C, symSize: 0x48 } - - { offsetInCU: 0x27A, offset: 0x80B67, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivgTo', symObjAddr: 0x138, symBinAddr: 0xB194, symSize: 0x10 } - - { offsetInCU: 0x29A, offset: 0x80B87, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivgTo', symObjAddr: 0x138, symBinAddr: 0xB194, symSize: 0x10 } - - { offsetInCU: 0x2D0, offset: 0x80BBD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivsTo', symObjAddr: 0x148, symBinAddr: 0xB1A4, symSize: 0x10 } - - { offsetInCU: 0x2F0, offset: 0x80BDD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivsTo', symObjAddr: 0x148, symBinAddr: 0xB1A4, symSize: 0x10 } - - { offsetInCU: 0x329, offset: 0x80C16, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivgTo', symObjAddr: 0x158, symBinAddr: 0xB1B4, symSize: 0x10 } - - { offsetInCU: 0x349, offset: 0x80C36, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivgTo', symObjAddr: 0x158, symBinAddr: 0xB1B4, symSize: 0x10 } - - { offsetInCU: 0x37F, offset: 0x80C6C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivsTo', symObjAddr: 0x168, symBinAddr: 0xB1C4, symSize: 0x10 } - - { offsetInCU: 0x39F, offset: 0x80C8C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivsTo', symObjAddr: 0x168, symBinAddr: 0xB1C4, symSize: 0x10 } - - { offsetInCU: 0x3D8, offset: 0x80CC5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvgTo', symObjAddr: 0x178, symBinAddr: 0xB1D4, symSize: 0x44 } - - { offsetInCU: 0x430, offset: 0x80D1D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvsTo', symObjAddr: 0x1BC, symBinAddr: 0xB218, symSize: 0x48 } - - { offsetInCU: 0x48B, offset: 0x80D78, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvgTo', symObjAddr: 0x204, symBinAddr: 0xB260, symSize: 0x10 } - - { offsetInCU: 0x4AB, offset: 0x80D98, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvgTo', symObjAddr: 0x204, symBinAddr: 0xB260, symSize: 0x10 } - - { offsetInCU: 0x4E1, offset: 0x80DCE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvsTo', symObjAddr: 0x214, symBinAddr: 0xB270, symSize: 0x10 } - - { offsetInCU: 0x501, offset: 0x80DEE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvsTo', symObjAddr: 0x214, symBinAddr: 0xB270, symSize: 0x10 } - - { offsetInCU: 0x53A, offset: 0x80E27, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvgTo', symObjAddr: 0x224, symBinAddr: 0xB280, symSize: 0x10 } - - { offsetInCU: 0x55A, offset: 0x80E47, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvgTo', symObjAddr: 0x224, symBinAddr: 0xB280, symSize: 0x10 } - - { offsetInCU: 0x590, offset: 0x80E7D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvsTo', symObjAddr: 0x234, symBinAddr: 0xB290, symSize: 0x10 } - - { offsetInCU: 0x5B0, offset: 0x80E9D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvsTo', symObjAddr: 0x234, symBinAddr: 0xB290, symSize: 0x10 } - - { offsetInCU: 0x5E9, offset: 0x80ED6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvgTo', symObjAddr: 0x244, symBinAddr: 0xB2A0, symSize: 0x48 } - - { offsetInCU: 0x63F, offset: 0x80F2C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvsTo', symObjAddr: 0x28C, symBinAddr: 0xB2E8, symSize: 0x40 } - - { offsetInCU: 0x682, offset: 0x80F6F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13SIZE_OF_FLOATSivgZTo', symObjAddr: 0x2CC, symBinAddr: 0xB328, symSize: 0x8 } - - { offsetInCU: 0x69E, offset: 0x80F8B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13VERTEX_SHADERSSvgZTo', symObjAddr: 0x2D4, symBinAddr: 0xB330, symSize: 0x2C } - - { offsetInCU: 0x6D0, offset: 0x80FBD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvgTo', symObjAddr: 0x300, symBinAddr: 0xB35C, symSize: 0x10 } - - { offsetInCU: 0x6F0, offset: 0x80FDD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvgTo', symObjAddr: 0x300, symBinAddr: 0xB35C, symSize: 0x10 } - - { offsetInCU: 0x728, offset: 0x81015, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvsTo', symObjAddr: 0x310, symBinAddr: 0xB36C, symSize: 0x34 } - - { offsetInCU: 0x781, offset: 0x8106E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvgTo', symObjAddr: 0x418, symBinAddr: 0xB474, symSize: 0x10 } - - { offsetInCU: 0x7A1, offset: 0x8108E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvgTo', symObjAddr: 0x418, symBinAddr: 0xB474, symSize: 0x10 } - - { offsetInCU: 0x7D7, offset: 0x810C4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvsTo', symObjAddr: 0x428, symBinAddr: 0xB484, symSize: 0x10 } - - { offsetInCU: 0x7F7, offset: 0x810E4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvsTo', symObjAddr: 0x428, symBinAddr: 0xB484, symSize: 0x10 } - - { offsetInCU: 0x846, offset: 0x81133, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfcTo', symObjAddr: 0x5A4, symBinAddr: 0xB5C0, symSize: 0x20 } - - { offsetInCU: 0x878, offset: 0x81165, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyFTo', symObjAddr: 0x708, symBinAddr: 0xB724, symSize: 0x28 } - - { offsetInCU: 0x8D0, offset: 0x811BD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTo', symObjAddr: 0x744, symBinAddr: 0xB760, symSize: 0x88 } - - { offsetInCU: 0x934, offset: 0x81221, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTo', symObjAddr: 0x7CC, symBinAddr: 0xB7E8, symSize: 0x7C } - - { offsetInCU: 0x9D6, offset: 0x812C3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyFTo', symObjAddr: 0xBF4, symBinAddr: 0xBC10, symSize: 0x28 } - - { offsetInCU: 0xAC0, offset: 0x813AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCMa', symObjAddr: 0x584, symBinAddr: 0xB5A0, symSize: 0x20 } - - { offsetInCU: 0xB34, offset: 0x81421, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfETo', symObjAddr: 0xC4C, symBinAddr: 0xBC68, symSize: 0x58 } - - { offsetInCU: 0x123B, offset: 0x81B28, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfC', symObjAddr: 0x438, symBinAddr: 0xB494, symSize: 0x20 } - - { offsetInCU: 0x1255, offset: 0x81B42, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfc', symObjAddr: 0x458, symBinAddr: 0xB4B4, symSize: 0xEC } - - { offsetInCU: 0x128D, offset: 0x81B7A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyF', symObjAddr: 0x5C4, symBinAddr: 0xB5E0, symSize: 0x144 } - - { offsetInCU: 0x1448, offset: 0x81D35, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtF', symObjAddr: 0x730, symBinAddr: 0xB74C, symSize: 0x14 } - - { offsetInCU: 0x14F9, offset: 0x81DE6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyF', symObjAddr: 0x848, symBinAddr: 0xB864, symSize: 0x3AC } - - { offsetInCU: 0x1869, offset: 0x82156, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfD', symObjAddr: 0xC1C, symBinAddr: 0xBC38, symSize: 0x30 } - - { offsetInCU: 0x1954, offset: 0x82241, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTf4ddnndnndn_n', symObjAddr: 0xCA4, symBinAddr: 0xBCC0, symSize: 0x65C } - - { offsetInCU: 0x2152, offset: 0x82A3F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTf4nnnnndn_n', symObjAddr: 0x1344, symBinAddr: 0xC360, symSize: 0x6C8 } - - { offsetInCU: 0x10C, offset: 0x833FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfcTo', symObjAddr: 0xED4, symBinAddr: 0xD8D4, symSize: 0x68 } - - { offsetInCU: 0x19C, offset: 0x8348F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCfETo', symObjAddr: 0xF48, symBinAddr: 0xD948, symSize: 0x10 } - - { offsetInCU: 0x1CB, offset: 0x834BE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6handleyySo19UIGestureRecognizerCFTo', symObjAddr: 0xF58, symBinAddr: 0xD958, symSize: 0x4 } - - { offsetInCU: 0x368, offset: 0x8365B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCACycfcTo', symObjAddr: 0x16DC, symBinAddr: 0xE0DC, symSize: 0x2C } - - { offsetInCU: 0x5D4, offset: 0x838C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCfETo', symObjAddr: 0x1744, symBinAddr: 0xE144, symSize: 0x68 } - - { offsetInCU: 0x603, offset: 0x838F6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCMa', symObjAddr: 0x17AC, symBinAddr: 0xE1AC, symSize: 0x20 } - - { offsetInCU: 0x617, offset: 0x8390A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCMa', symObjAddr: 0x17CC, symBinAddr: 0xE1CC, symSize: 0x20 } - - { offsetInCU: 0x62B, offset: 0x8391E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwCP', symObjAddr: 0x17EC, symBinAddr: 0xE1EC, symSize: 0x30 } - - { offsetInCU: 0x63F, offset: 0x83932, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwxx', symObjAddr: 0x181C, symBinAddr: 0xE21C, symSize: 0x8 } - - { offsetInCU: 0x653, offset: 0x83946, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwcp', symObjAddr: 0x1824, symBinAddr: 0xE224, symSize: 0x3C } - - { offsetInCU: 0x667, offset: 0x8395A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwca', symObjAddr: 0x1860, symBinAddr: 0xE260, symSize: 0x50 } - - { offsetInCU: 0x67B, offset: 0x8396E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwta', symObjAddr: 0x18BC, symBinAddr: 0xE2B0, symSize: 0x40 } - - { offsetInCU: 0x68F, offset: 0x83982, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwet', symObjAddr: 0x18FC, symBinAddr: 0xE2F0, symSize: 0x48 } - - { offsetInCU: 0x6A3, offset: 0x83996, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwst', symObjAddr: 0x1944, symBinAddr: 0xE338, symSize: 0x40 } - - { offsetInCU: 0x6B7, offset: 0x839AA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVMa', symObjAddr: 0x1984, symBinAddr: 0xE378, symSize: 0x10 } - - { offsetInCU: 0x6CB, offset: 0x839BE, size: 0x8, addend: 0x0, symName: '_$sypSgWOc', symObjAddr: 0x1994, symBinAddr: 0xE388, symSize: 0x48 } - - { offsetInCU: 0x6DF, offset: 0x839D2, size: 0x8, addend: 0x0, symName: '_$sSo7UITouchCSo8NSObjectCSH10ObjectiveCWl', symObjAddr: 0x1AA0, symBinAddr: 0xE3D0, symSize: 0x58 } - - { offsetInCU: 0x6F3, offset: 0x839E6, size: 0x8, addend: 0x0, symName: '_$sSh8IteratorV8_VariantOyx__GSHRzlWOe', symObjAddr: 0x1AF8, symBinAddr: 0xE428, symSize: 0x8 } - - { offsetInCU: 0x761, offset: 0x83A54, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOe', symObjAddr: 0x1DE4, symBinAddr: 0xE714, symSize: 0x10 } - - { offsetInCU: 0xCBB, offset: 0x83FAE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesBegan_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x0, symBinAddr: 0xCA28, symSize: 0x540 } - - { offsetInCU: 0xF57, offset: 0x8424A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesMoved_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x54C, symBinAddr: 0xCF74, symSize: 0xE0 } - - { offsetInCU: 0xFD6, offset: 0x842C9, size: 0x8, addend: 0x0, symName: '_$sSa6remove2atxSi_tF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x6F0, symBinAddr: 0xD104, symSize: 0x9C } - - { offsetInCU: 0x1069, offset: 0x8435C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfc', symObjAddr: 0xDCC, symBinAddr: 0xD7CC, symSize: 0x108 } - - { offsetInCU: 0x11B3, offset: 0x844A6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6onMove33_044DDF836BDB3B89B481C6F58BB6EF6BLLyySo19UIGestureRecognizerC_ShySo7UITouchCGSgtF', symObjAddr: 0x12D0, symBinAddr: 0xDCD0, symSize: 0x40C } - - { offsetInCU: 0x18C9, offset: 0x84BBC, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNewAByxGyF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x1B00, symBinAddr: 0xE430, symSize: 0x14 } - - { offsetInCU: 0x1968, offset: 0x84C5B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6canvasAcA9NSCCanvasC_tcfcTf4gn_n', symObjAddr: 0x1B14, symBinAddr: 0xE444, symSize: 0x1DC } - - { offsetInCU: 0x27, offset: 0x84E38, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xE724, symSize: 0x2C } - - { offsetInCU: 0x4B, offset: 0x84E5C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvpZ', symObjAddr: 0x2D8, symBinAddr: 0x1160068, symSize: 0x0 } - - { offsetInCU: 0x65, offset: 0x84E76, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xE724, symSize: 0x2C } - - { offsetInCU: 0x98, offset: 0x84EA9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZTo', symObjAddr: 0x178, symBinAddr: 0xE89C, symSize: 0x40 } - - { offsetInCU: 0x104, offset: 0x84F15, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfcTo', symObjAddr: 0x228, symBinAddr: 0xE94C, symSize: 0x3C } - - { offsetInCU: 0x156, offset: 0x84F67, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queue_WZ', symObjAddr: 0x2C, symBinAddr: 0xE750, symSize: 0x10C } - - { offsetInCU: 0x181, offset: 0x84F92, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCMa', symObjAddr: 0x208, symBinAddr: 0xE92C, symSize: 0x20 } - - { offsetInCU: 0x195, offset: 0x84FA6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfETo', symObjAddr: 0x294, symBinAddr: 0xE9B8, symSize: 0x4 } - - { offsetInCU: 0x1C0, offset: 0x84FD1, size: 0x8, addend: 0x0, symName: '_$sSo17OS_dispatch_queueCMa', symObjAddr: 0x298, symBinAddr: 0xE9BC, symSize: 0x3C } - - { offsetInCU: 0x348, offset: 0x85159, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZ', symObjAddr: 0x138, symBinAddr: 0xE85C, symSize: 0x40 } - - { offsetInCU: 0x388, offset: 0x85199, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfC', symObjAddr: 0x1B8, symBinAddr: 0xE8DC, symSize: 0x20 } - - { offsetInCU: 0x39C, offset: 0x851AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfc', symObjAddr: 0x1D8, symBinAddr: 0xE8FC, symSize: 0x30 } - - { offsetInCU: 0x3D8, offset: 0x851E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfD', symObjAddr: 0x264, symBinAddr: 0xE988, symSize: 0x30 } - - { offsetInCU: 0x2B, offset: 0x85237, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xE9F8, symSize: 0xA4 } - - { offsetInCU: 0x66, offset: 0x85272, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZTo', symObjAddr: 0xA4, symBinAddr: 0xEA9C, symSize: 0xA4 } - - { offsetInCU: 0xF9, offset: 0x85305, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZTo', symObjAddr: 0x1D8, symBinAddr: 0xEBD0, symSize: 0x110 } - - { offsetInCU: 0x1A2, offset: 0x853AE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZTo', symObjAddr: 0x30C, symBinAddr: 0xED04, symSize: 0x28 } - - { offsetInCU: 0x222, offset: 0x8542E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTo', symObjAddr: 0x338, symBinAddr: 0xED30, symSize: 0xA0 } - - { offsetInCU: 0x29B, offset: 0x854A7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZTo', symObjAddr: 0x4D0, symBinAddr: 0xEEC8, symSize: 0x15C } - - { offsetInCU: 0x330, offset: 0x8553C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfcTo', symObjAddr: 0x67C, symBinAddr: 0xF074, symSize: 0x3C } - - { offsetInCU: 0x381, offset: 0x8558D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTf4nnnnnndd_n', symObjAddr: 0x6E8, symBinAddr: 0xF0E0, symSize: 0x160 } - - { offsetInCU: 0x4DF, offset: 0x856EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC7getFile33_F00B23A4165DD6ABFCD23C8811C7DF43LLyS2SKFZTf4nd_g', symObjAddr: 0x848, symBinAddr: 0xF240, symSize: 0x2E4 } - - { offsetInCU: 0x5AE, offset: 0x857BA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCMa', symObjAddr: 0xB2C, symBinAddr: 0xF524, symSize: 0x20 } - - { offsetInCU: 0x5C2, offset: 0x857CE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOAEs5ErrorAAWl', symObjAddr: 0xB4C, symBinAddr: 0xF544, symSize: 0x44 } - - { offsetInCU: 0x5D6, offset: 0x857E2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwCP', symObjAddr: 0xB90, symBinAddr: 0xF588, symSize: 0x2C } - - { offsetInCU: 0x5EA, offset: 0x857F6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwxx', symObjAddr: 0xBBC, symBinAddr: 0xF5B4, symSize: 0x8 } - - { offsetInCU: 0x5FE, offset: 0x8580A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwca', symObjAddr: 0xBC4, symBinAddr: 0xF5BC, symSize: 0x40 } - - { offsetInCU: 0x612, offset: 0x8581E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwta', symObjAddr: 0xC10, symBinAddr: 0xF5FC, symSize: 0x30 } - - { offsetInCU: 0x626, offset: 0x85832, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwet', symObjAddr: 0xC40, symBinAddr: 0xF62C, symSize: 0x48 } - - { offsetInCU: 0x63A, offset: 0x85846, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwst', symObjAddr: 0xC88, symBinAddr: 0xF674, symSize: 0x3C } - - { offsetInCU: 0x64E, offset: 0x8585A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwug', symObjAddr: 0xCC4, symBinAddr: 0xF6B0, symSize: 0x8 } - - { offsetInCU: 0x662, offset: 0x8586E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwup', symObjAddr: 0xCCC, symBinAddr: 0xF6B8, symSize: 0x4 } - - { offsetInCU: 0x676, offset: 0x85882, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwui', symObjAddr: 0xCD0, symBinAddr: 0xF6BC, symSize: 0x4 } - - { offsetInCU: 0x68A, offset: 0x85896, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOMa', symObjAddr: 0xCD4, symBinAddr: 0xF6C0, symSize: 0x10 } - - { offsetInCU: 0x712, offset: 0x8591E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP7_domainSSvgTW', symObjAddr: 0x3D8, symBinAddr: 0xEDD0, symSize: 0x4 } - - { offsetInCU: 0x72E, offset: 0x8593A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP5_codeSivgTW', symObjAddr: 0x3DC, symBinAddr: 0xEDD4, symSize: 0x4 } - - { offsetInCU: 0x74A, offset: 0x85956, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP9_userInfoyXlSgvgTW', symObjAddr: 0x3E0, symBinAddr: 0xEDD8, symSize: 0x4 } - - { offsetInCU: 0x766, offset: 0x85972, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP19_getEmbeddedNSErroryXlSgyFTW', symObjAddr: 0x3E4, symBinAddr: 0xEDDC, symSize: 0x4 } - - { offsetInCU: 0xA14, offset: 0x85C20, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xE9F8, symSize: 0xA4 } - - { offsetInCU: 0xAAA, offset: 0x85CB6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZ', symObjAddr: 0x148, symBinAddr: 0xEB40, symSize: 0x90 } - - { offsetInCU: 0xC31, offset: 0x85E3D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZ', symObjAddr: 0x2E8, symBinAddr: 0xECE0, symSize: 0x24 } - - { offsetInCU: 0xC7B, offset: 0x85E87, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZ', symObjAddr: 0x334, symBinAddr: 0xED2C, symSize: 0x4 } - - { offsetInCU: 0xC9D, offset: 0x85EA9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZ', symObjAddr: 0x3E8, symBinAddr: 0xEDE0, symSize: 0xE8 } - - { offsetInCU: 0xD4D, offset: 0x85F59, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfC', symObjAddr: 0x62C, symBinAddr: 0xF024, symSize: 0x20 } - - { offsetInCU: 0xD61, offset: 0x85F6D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfc', symObjAddr: 0x64C, symBinAddr: 0xF044, symSize: 0x30 } - - { offsetInCU: 0xD97, offset: 0x85FA3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCfD', symObjAddr: 0x6B8, symBinAddr: 0xF0B0, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x860BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0xF6D4, symSize: 0x4 } - - { offsetInCU: 0x71, offset: 0x86106, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x4, symBinAddr: 0xF6D8, symSize: 0x70 } - - { offsetInCU: 0xF6, offset: 0x8618B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x78, symBinAddr: 0xF74C, symSize: 0x50 } - - { offsetInCU: 0x191, offset: 0x86226, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0xCC, symBinAddr: 0xF7A0, symSize: 0x68 } - - { offsetInCU: 0x254, offset: 0x862E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x138, symBinAddr: 0xF80C, symSize: 0x98 } - - { offsetInCU: 0x323, offset: 0x863B8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfcTo', symObjAddr: 0x220, symBinAddr: 0xF8F4, symSize: 0x3C } - - { offsetInCU: 0x375, offset: 0x8640A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCMa', symObjAddr: 0x28C, symBinAddr: 0xF960, symSize: 0x20 } - - { offsetInCU: 0x4E5, offset: 0x8657A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0xF6D4, symSize: 0x4 } - - { offsetInCU: 0x51D, offset: 0x865B2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0xF6D4, symSize: 0x4 } - - { offsetInCU: 0x588, offset: 0x8661D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0xF748, symSize: 0x4 } - - { offsetInCU: 0x5C8, offset: 0x8665D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0xF748, symSize: 0x4 } - - { offsetInCU: 0x62A, offset: 0x866BF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xC8, symBinAddr: 0xF79C, symSize: 0x4 } - - { offsetInCU: 0x67C, offset: 0x86711, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xC8, symBinAddr: 0xF79C, symSize: 0x4 } - - { offsetInCU: 0x6F1, offset: 0x86786, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x134, symBinAddr: 0xF808, symSize: 0x4 } - - { offsetInCU: 0x767, offset: 0x867FC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x134, symBinAddr: 0xF808, symSize: 0x4 } - - { offsetInCU: 0x805, offset: 0x8689A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfC', symObjAddr: 0x1D0, symBinAddr: 0xF8A4, symSize: 0x20 } - - { offsetInCU: 0x819, offset: 0x868AE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfc', symObjAddr: 0x1F0, symBinAddr: 0xF8C4, symSize: 0x30 } - - { offsetInCU: 0x84F, offset: 0x868E4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCfD', symObjAddr: 0x25C, symBinAddr: 0xF930, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x8692E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0xF980, symSize: 0x14 } - - { offsetInCU: 0xA9, offset: 0x869B0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x14, symBinAddr: 0xF994, symSize: 0x38 } - - { offsetInCU: 0x1A2, offset: 0x86AA9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x68, symBinAddr: 0xF9E8, symSize: 0x40 } - - { offsetInCU: 0x284, offset: 0x86B8B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfcTo', symObjAddr: 0x118, symBinAddr: 0xFA98, symSize: 0x3C } - - { offsetInCU: 0x2D6, offset: 0x86BDD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCMa', symObjAddr: 0xF8, symBinAddr: 0xFA78, symSize: 0x20 } - - { offsetInCU: 0x480, offset: 0x86D87, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0xF980, symSize: 0x14 } - - { offsetInCU: 0x5C4, offset: 0x86ECB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x4C, symBinAddr: 0xF9CC, symSize: 0x1C } - - { offsetInCU: 0x6FA, offset: 0x87001, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfC', symObjAddr: 0xA8, symBinAddr: 0xFA28, symSize: 0x20 } - - { offsetInCU: 0x70E, offset: 0x87015, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfc', symObjAddr: 0xC8, symBinAddr: 0xFA48, symSize: 0x30 } - - { offsetInCU: 0x744, offset: 0x8704B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCfD', symObjAddr: 0x154, symBinAddr: 0xFAD4, symSize: 0x30 } - - { offsetInCU: 0x61, offset: 0x870CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0xFB08, symSize: 0x10 } - - { offsetInCU: 0x81, offset: 0x870EF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0xFB08, symSize: 0x10 } - - { offsetInCU: 0xB7, offset: 0x87125, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0xFB18, symSize: 0x10 } - - { offsetInCU: 0xD7, offset: 0x87145, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0xFB18, symSize: 0x10 } - - { offsetInCU: 0x110, offset: 0x8717E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvgTo', symObjAddr: 0x24, symBinAddr: 0xFB28, symSize: 0x48 } - - { offsetInCU: 0x168, offset: 0x871D6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvsTo', symObjAddr: 0xB4, symBinAddr: 0xFBB8, symSize: 0x50 } - - { offsetInCU: 0x1C3, offset: 0x87231, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0xFC08, symSize: 0x10 } - - { offsetInCU: 0x1E3, offset: 0x87251, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0xFC08, symSize: 0x10 } - - { offsetInCU: 0x219, offset: 0x87287, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0xFC18, symSize: 0x10 } - - { offsetInCU: 0x239, offset: 0x872A7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0xFC18, symSize: 0x10 } - - { offsetInCU: 0x272, offset: 0x872E0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfcTo', symObjAddr: 0x1B0, symBinAddr: 0xFCB4, symSize: 0x78 } - - { offsetInCU: 0x2C8, offset: 0x87336, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x2D4, symBinAddr: 0xFDD8, symSize: 0xB0 } - - { offsetInCU: 0x32A, offset: 0x87398, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x43C, symBinAddr: 0xFF40, symSize: 0x28 } - - { offsetInCU: 0x35C, offset: 0x873CA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC12bindDrawableyyFTo', symObjAddr: 0x4E0, symBinAddr: 0xFF68, symSize: 0xA0 } - - { offsetInCU: 0x3DD, offset: 0x8744B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC14deleteDrawableyyFTo', symObjAddr: 0x5BC, symBinAddr: 0x10008, symSize: 0x60 } - - { offsetInCU: 0x44D, offset: 0x874BB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTo', symObjAddr: 0x620, symBinAddr: 0x1006C, symSize: 0x4C } - - { offsetInCU: 0x4BF, offset: 0x8752D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfcTo', symObjAddr: 0x70C, symBinAddr: 0x10158, symSize: 0x34 } - - { offsetInCU: 0x533, offset: 0x875A1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCMa', symObjAddr: 0x190, symBinAddr: 0xFC94, symSize: 0x20 } - - { offsetInCU: 0x55D, offset: 0x875CB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCfETo', symObjAddr: 0x74C, symBinAddr: 0x10198, symSize: 0x10 } - - { offsetInCU: 0x65B, offset: 0x876C9, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VFTo', symObjAddr: 0xA08, symBinAddr: 0x10454, symSize: 0x74 } - - { offsetInCU: 0x699, offset: 0x87707, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA7C, symBinAddr: 0x104C8, symSize: 0x10 } - - { offsetInCU: 0x6B9, offset: 0x87727, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA7C, symBinAddr: 0x104C8, symSize: 0x10 } - - { offsetInCU: 0x6EF, offset: 0x8775D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA8C, symBinAddr: 0x104D8, symSize: 0x10 } - - { offsetInCU: 0x70F, offset: 0x8777D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA8C, symBinAddr: 0x104D8, symSize: 0x10 } - - { offsetInCU: 0x748, offset: 0x877B6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvgTo', symObjAddr: 0xA9C, symBinAddr: 0x104E8, symSize: 0x20 } - - { offsetInCU: 0x7A0, offset: 0x8780E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvsTo', symObjAddr: 0xABC, symBinAddr: 0x10508, symSize: 0x14 } - - { offsetInCU: 0x7FB, offset: 0x87869, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvgTo', symObjAddr: 0xAD0, symBinAddr: 0x1051C, symSize: 0x44 } - - { offsetInCU: 0x853, offset: 0x878C1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvsTo', symObjAddr: 0xB58, symBinAddr: 0x105A4, symSize: 0x48 } - - { offsetInCU: 0x8E8, offset: 0x87956, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfcTo', symObjAddr: 0xCBC, symBinAddr: 0x10708, symSize: 0x78 } - - { offsetInCU: 0x93E, offset: 0x879AC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0xE34, symBinAddr: 0x10880, symSize: 0xB0 } - - { offsetInCU: 0x9A0, offset: 0x87A0E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0xF90, symBinAddr: 0x109DC, symSize: 0x28 } - - { offsetInCU: 0x9D2, offset: 0x87A40, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC11deviceScaleSfyFTo', symObjAddr: 0xFB8, symBinAddr: 0x10A04, symSize: 0xB8 } - - { offsetInCU: 0xA53, offset: 0x87AC1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTo', symObjAddr: 0x1074, symBinAddr: 0x10ABC, symSize: 0x28 } - - { offsetInCU: 0xAB1, offset: 0x87B1F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCfETo', symObjAddr: 0x10D8, symBinAddr: 0x10B20, symSize: 0x10 } - - { offsetInCU: 0xC88, offset: 0x87CF6, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCs5UInt8V_Tgmq5', symObjAddr: 0x13D0, symBinAddr: 0x10D1C, symSize: 0x64 } - - { offsetInCU: 0xCD9, offset: 0x87D47, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOy', symObjAddr: 0x15D8, symBinAddr: 0x10F24, symSize: 0x44 } - - { offsetInCU: 0xCED, offset: 0x87D5B, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOe', symObjAddr: 0x161C, symBinAddr: 0x10F68, symSize: 0x44 } - - { offsetInCU: 0xD01, offset: 0x87D6F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCMa', symObjAddr: 0x1660, symBinAddr: 0x10FAC, symSize: 0x20 } - - { offsetInCU: 0xDDB, offset: 0x87E49, size: 0x8, addend: 0x0, symName: '_$sSaySayxGqd__c7ElementQyd__RszSTRd__lufCs5UInt8V_10Foundation4DataVTgm5Tf4g_n', symObjAddr: 0x14B8, symBinAddr: 0x10E04, symSize: 0x110 } - - { offsetInCU: 0x1086, offset: 0x880F4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvg', symObjAddr: 0x6C, symBinAddr: 0xFB70, symSize: 0x48 } - - { offsetInCU: 0x1103, offset: 0x88171, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfc', symObjAddr: 0x124, symBinAddr: 0xFC28, symSize: 0x6C } - - { offsetInCU: 0x114A, offset: 0x881B8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0x228, symBinAddr: 0xFD2C, symSize: 0xAC } - - { offsetInCU: 0x11AE, offset: 0x8821C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x384, symBinAddr: 0xFE88, symSize: 0xB8 } - - { offsetInCU: 0x1239, offset: 0x882A7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtF', symObjAddr: 0x61C, symBinAddr: 0x10068, symSize: 0x4 } - - { offsetInCU: 0x125A, offset: 0x882C8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfC', symObjAddr: 0x66C, symBinAddr: 0x100B8, symSize: 0x74 } - - { offsetInCU: 0x126E, offset: 0x882DC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfc', symObjAddr: 0x6E0, symBinAddr: 0x1012C, symSize: 0x2C } - - { offsetInCU: 0x1387, offset: 0x883F5, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VF', symObjAddr: 0x75C, symBinAddr: 0x101A8, symSize: 0x2AC } - - { offsetInCU: 0x1731, offset: 0x8879F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvg', symObjAddr: 0xB14, symBinAddr: 0x10560, symSize: 0x44 } - - { offsetInCU: 0x1770, offset: 0x887DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvs', symObjAddr: 0xBA0, symBinAddr: 0x105EC, symSize: 0x48 } - - { offsetInCU: 0x1795, offset: 0x88803, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM', symObjAddr: 0xBE8, symBinAddr: 0x10634, symSize: 0x44 } - - { offsetInCU: 0x17BA, offset: 0x88828, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM.resume.0', symObjAddr: 0xC2C, symBinAddr: 0x10678, symSize: 0x4 } - - { offsetInCU: 0x17E1, offset: 0x8884F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfC', symObjAddr: 0xC30, symBinAddr: 0x1067C, symSize: 0x20 } - - { offsetInCU: 0x17F5, offset: 0x88863, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfc', symObjAddr: 0xC50, symBinAddr: 0x1069C, symSize: 0x6C } - - { offsetInCU: 0x183C, offset: 0x888AA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0xD88, symBinAddr: 0x107D4, symSize: 0xAC } - - { offsetInCU: 0x189B, offset: 0x88909, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0xEE4, symBinAddr: 0x10930, symSize: 0xAC } - - { offsetInCU: 0x1940, offset: 0x889AE, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x10E8, symBinAddr: 0x10B30, symSize: 0x104 } - - { offsetInCU: 0x1A6F, offset: 0x88ADD, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFs5UInt8V_Tg5', symObjAddr: 0x12E8, symBinAddr: 0x10C34, symSize: 0xE8 } - - { offsetInCU: 0x1BB3, offset: 0x88C21, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTf4ddn_n', symObjAddr: 0x1434, symBinAddr: 0x10D80, symSize: 0x84 } - - { offsetInCU: 0x1CAC, offset: 0x88D1A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTf4dn_n', symObjAddr: 0x1680, symBinAddr: 0x10FCC, symSize: 0x360 } - - { offsetInCU: 0x2B, offset: 0x89134, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x11518, symSize: 0x2C } - - { offsetInCU: 0x4F, offset: 0x89158, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LLSo012OS_dispatch_E0CvpZ', symObjAddr: 0x958, symBinAddr: 0x11601B0, symSize: 0x0 } - - { offsetInCU: 0x5D, offset: 0x89166, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x11518, symSize: 0x2C } - - { offsetInCU: 0x75, offset: 0x8917E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LL_WZ', symObjAddr: 0x2C, symBinAddr: 0x11544, symSize: 0x10C } - - { offsetInCU: 0xBC, offset: 0x891C5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0x13C, symBinAddr: 0x11654, symSize: 0x44 } - - { offsetInCU: 0x132, offset: 0x8923B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTo', symObjAddr: 0x3AC, symBinAddr: 0x118C4, symSize: 0x80 } - - { offsetInCU: 0x191, offset: 0x8929A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfcTo', symObjAddr: 0x47C, symBinAddr: 0x11994, symSize: 0x3C } - - { offsetInCU: 0x1E2, offset: 0x892EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTf4nnnd_n', symObjAddr: 0x4EC, symBinAddr: 0x11A04, symSize: 0x1DC } - - { offsetInCU: 0x269, offset: 0x89372, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfETo', symObjAddr: 0x4E8, symBinAddr: 0x11A00, symSize: 0x4 } - - { offsetInCU: 0x2A5, offset: 0x893AE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCMa', symObjAddr: 0x6C8, symBinAddr: 0x11BE0, symSize: 0x20 } - - { offsetInCU: 0x2C4, offset: 0x893CD, size: 0x8, addend: 0x0, symName: '_$s10ObjectiveC8ObjCBoolVIeyBy_SbIegy_TRTA', symObjAddr: 0x70C, symBinAddr: 0x11C24, symSize: 0x14 } - - { offsetInCU: 0x2ED, offset: 0x893F6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_TA', symObjAddr: 0x74C, symBinAddr: 0x11C64, symSize: 0xC } - - { offsetInCU: 0x301, offset: 0x8940A, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x758, symBinAddr: 0x11C70, symSize: 0x10 } - - { offsetInCU: 0x315, offset: 0x8941E, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x768, symBinAddr: 0x11C80, symSize: 0x8 } - - { offsetInCU: 0x329, offset: 0x89432, size: 0x8, addend: 0x0, symName: '_$s8Dispatch0A13WorkItemFlagsVACs10SetAlgebraAAWl', symObjAddr: 0x770, symBinAddr: 0x11C88, symSize: 0x48 } - - { offsetInCU: 0x33D, offset: 0x89446, size: 0x8, addend: 0x0, symName: '_$sSay8Dispatch0A13WorkItemFlagsVGSayxGSTsWl', symObjAddr: 0x7F8, symBinAddr: 0x11CD0, symSize: 0x4C } - - { offsetInCU: 0x351, offset: 0x8945A, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledNameAbstract, symObjAddr: 0x844, symBinAddr: 0x11D1C, symSize: 0x44 } - - { offsetInCU: 0x365, offset: 0x8946E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0x8C4, symBinAddr: 0x11D60, symSize: 0x24 } - - { offsetInCU: 0x399, offset: 0x894A2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU_TA', symObjAddr: 0x90C, symBinAddr: 0x11DA8, symSize: 0x24 } - - { offsetInCU: 0x52E, offset: 0x89637, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x11650, symSize: 0x4 } - - { offsetInCU: 0x55C, offset: 0x89665, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x11650, symSize: 0x4 } - - { offsetInCU: 0x5BB, offset: 0x896C4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZ', symObjAddr: 0x180, symBinAddr: 0x11698, symSize: 0x4 } - - { offsetInCU: 0x5CF, offset: 0x896D8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_', symObjAddr: 0x184, symBinAddr: 0x1169C, symSize: 0x228 } - - { offsetInCU: 0x6A8, offset: 0x897B1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfC', symObjAddr: 0x42C, symBinAddr: 0x11944, symSize: 0x20 } - - { offsetInCU: 0x6BC, offset: 0x897C5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfc', symObjAddr: 0x44C, symBinAddr: 0x11964, symSize: 0x30 } - - { offsetInCU: 0x6F2, offset: 0x897FB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfD', symObjAddr: 0x4B8, symBinAddr: 0x119D0, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x898A1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x11DE0, symSize: 0x20 } - - { offsetInCU: 0x77, offset: 0x898F1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfcTo', symObjAddr: 0x70, symBinAddr: 0x11E50, symSize: 0x3C } - - { offsetInCU: 0xC9, offset: 0x89943, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCMa', symObjAddr: 0x50, symBinAddr: 0x11E30, symSize: 0x20 } - - { offsetInCU: 0x214, offset: 0x89A8E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x11DE0, symSize: 0x20 } - - { offsetInCU: 0x228, offset: 0x89AA2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfc', symObjAddr: 0x20, symBinAddr: 0x11E00, symSize: 0x30 } - - { offsetInCU: 0x264, offset: 0x89ADE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCfD', symObjAddr: 0xAC, symBinAddr: 0x11E8C, symSize: 0x30 } - - { offsetInCU: 0x26, offset: 0x89B27, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x335044, symSize: 0x265C } - - { offsetInCU: 0x40, offset: 0x89B41, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9E20, symBinAddr: 0xA29310, symSize: 0x0 } - - { offsetInCU: 0x92, offset: 0x89B93, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFE20, symBinAddr: 0xA2F310, symSize: 0x0 } - - { offsetInCU: 0xF6, offset: 0x89BF7, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFE48, symBinAddr: 0xA2F338, symSize: 0x0 } - - { offsetInCU: 0x10C, offset: 0x89C0D, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x10250, symBinAddr: 0xA2F740, symSize: 0x0 } - - { offsetInCU: 0x123, offset: 0x89C24, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFE90, symBinAddr: 0xA2F380, symSize: 0x0 } - - { offsetInCU: 0x9C2, offset: 0x8A4C3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x335044, symSize: 0x265C } - - { offsetInCU: 0x45D1, offset: 0x8E0D2, size: 0x8, addend: 0x0, symName: _fe_frombytes, symObjAddr: 0x265C, symBinAddr: 0x3376A0, symSize: 0x134 } - - { offsetInCU: 0x46F7, offset: 0x8E1F8, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x9954, symBinAddr: 0x33E998, symSize: 0x21C } - - { offsetInCU: 0x4926, offset: 0x8E427, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4FE0, symBinAddr: 0x33A024, symSize: 0x1B8 } - - { offsetInCU: 0x5313, offset: 0x8EE14, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x2790, symBinAddr: 0x3377D4, symSize: 0x5BC } - - { offsetInCU: 0x5F76, offset: 0x8FA77, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2D4C, symBinAddr: 0x337D90, symSize: 0x7F8 } - - { offsetInCU: 0x642E, offset: 0x8FF2F, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3544, symBinAddr: 0x338588, symSize: 0x208 } - - { offsetInCU: 0x69FC, offset: 0x904FD, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x374C, symBinAddr: 0x338790, symSize: 0x7B4 } - - { offsetInCU: 0x77D5, offset: 0x912D6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3F00, symBinAddr: 0x338F44, symSize: 0x634 } - - { offsetInCU: 0x8196, offset: 0x91C97, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x4534, symBinAddr: 0x339578, symSize: 0xAAC } - - { offsetInCU: 0x9567, offset: 0x93068, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x529C, symBinAddr: 0x33A2E0, symSize: 0x23F8 } - - { offsetInCU: 0xCAB8, offset: 0x965B9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x5198, symBinAddr: 0x33A1DC, symSize: 0x104 } - - { offsetInCU: 0xCD20, offset: 0x96821, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x7694, symBinAddr: 0x33C6D8, symSize: 0x30 } - - { offsetInCU: 0xCE11, offset: 0x96912, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x76C4, symBinAddr: 0x33C708, symSize: 0x58 } - - { offsetInCU: 0xCE86, offset: 0x96987, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x771C, symBinAddr: 0x33C760, symSize: 0x4 } - - { offsetInCU: 0xCECE, offset: 0x969CF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x771C, symBinAddr: 0x33C760, symSize: 0x4 } - - { offsetInCU: 0xCEFD, offset: 0x969FE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x771C, symBinAddr: 0x33C760, symSize: 0x4 } - - { offsetInCU: 0xCF21, offset: 0x96A22, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x7720, symBinAddr: 0x33C764, symSize: 0x8C } - - { offsetInCU: 0xD056, offset: 0x96B57, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x77AC, symBinAddr: 0x33C7F0, symSize: 0x4 } - - { offsetInCU: 0xD08F, offset: 0x96B90, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x77AC, symBinAddr: 0x33C7F0, symSize: 0x4 } - - { offsetInCU: 0xD328, offset: 0x96E29, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x77B0, symBinAddr: 0x33C7F4, symSize: 0x15D8 } - - { offsetInCU: 0x10671, offset: 0x9A172, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x9B70, symBinAddr: 0x33EBB4, symSize: 0x218 } - - { offsetInCU: 0x10CA3, offset: 0x9A7A4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8D88, symBinAddr: 0x33DDCC, symSize: 0x20 } - - { offsetInCU: 0x11140, offset: 0x9AC41, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8DA8, symBinAddr: 0x33DDEC, symSize: 0xBAC } - - { offsetInCU: 0x26, offset: 0x9BA0C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x33EDCC, symSize: 0x1F4 } - - { offsetInCU: 0x1D2, offset: 0x9BBB8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x33EDCC, symSize: 0x1F4 } - - { offsetInCU: 0x26, offset: 0x9BE53, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x33EFC0, symSize: 0x3C } - - { offsetInCU: 0x34, offset: 0x9BE61, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x33EFC0, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0x9BF71, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x33EFFC, symSize: 0x98 } - - { offsetInCU: 0x34, offset: 0x9BF7F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x33EFFC, symSize: 0x98 } - - { offsetInCU: 0x86, offset: 0x9C0E2, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1100, symBinAddr: 0xA2F7F0, symSize: 0x0 } - - { offsetInCU: 0xB8, offset: 0x9C114, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1090, symBinAddr: 0xA2F780, symSize: 0x0 } - - { offsetInCU: 0xDA, offset: 0x9C136, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x10C0, symBinAddr: 0xA2F7B0, symSize: 0x0 } - - { offsetInCU: 0xF0, offset: 0x9C14C, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x10F0, symBinAddr: 0xA2F7E0, symSize: 0x0 } - - { offsetInCU: 0x3B7, offset: 0x9C413, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x33F094, symSize: 0x18 } - - { offsetInCU: 0x3FB, offset: 0x9C457, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x33F094, symSize: 0x18 } - - { offsetInCU: 0x594, offset: 0x9C5F0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0x33F0AC, symSize: 0x18 } - - { offsetInCU: 0x63F, offset: 0x9C69B, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0x33F0C4, symSize: 0x320 } - - { offsetInCU: 0x1173, offset: 0x9D1CF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x5B0, symBinAddr: 0x33F3E4, symSize: 0xAC } - - { offsetInCU: 0x1469, offset: 0x9D4C5, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x65C, symBinAddr: 0x33F490, symSize: 0x500 } - - { offsetInCU: 0x2666, offset: 0x9E6C2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB5C, symBinAddr: 0x33F990, symSize: 0x2C8 } - - { offsetInCU: 0x2CB5, offset: 0x9ED11, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xE24, symBinAddr: 0x33FC58, symSize: 0xF4 } - - { offsetInCU: 0x2EC7, offset: 0x9EF23, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xF18, symBinAddr: 0x33FD4C, symSize: 0x168 } - - { offsetInCU: 0x26, offset: 0x9F24E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x33FEB4, symSize: 0x38 } - - { offsetInCU: 0xFA, offset: 0x9F322, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x33FEB4, symSize: 0x38 } - - { offsetInCU: 0x12C, offset: 0x9F354, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x33FEB4, symSize: 0x38 } - - { offsetInCU: 0x199, offset: 0x9F3C1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x33FEEC, symSize: 0x3C } - - { offsetInCU: 0x1F3, offset: 0x9F41B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x33FEEC, symSize: 0x3C } - - { offsetInCU: 0x31B, offset: 0x9F543, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0x33FF28, symSize: 0x5C } - - { offsetInCU: 0x517, offset: 0x9F73F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0x33FF84, symSize: 0x1C } - - { offsetInCU: 0x636, offset: 0x9F85E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0x33FFA0, symSize: 0x54 } - - { offsetInCU: 0x6D9, offset: 0x9F901, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0x33FFF4, symSize: 0x4C } - - { offsetInCU: 0x8A7, offset: 0x9FACF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x340040, symSize: 0xA8 } - - { offsetInCU: 0x90B, offset: 0x9FB33, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x340040, symSize: 0xA8 } - - { offsetInCU: 0xBAA, offset: 0x9FDD2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0x3400E8, symSize: 0x110 } - - { offsetInCU: 0xC4C, offset: 0x9FE74, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0x3400E8, symSize: 0x110 } - - { offsetInCU: 0xEDE, offset: 0xA0106, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x344, symBinAddr: 0x3401F8, symSize: 0xB0 } - - { offsetInCU: 0xF5E, offset: 0xA0186, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x344, symBinAddr: 0x3401F8, symSize: 0xB0 } - - { offsetInCU: 0x10E1, offset: 0xA0309, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x3F4, symBinAddr: 0x3402A8, symSize: 0x198 } - - { offsetInCU: 0x13AB, offset: 0xA05D3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x58C, symBinAddr: 0x340440, symSize: 0x290 } - - { offsetInCU: 0x1500, offset: 0xA0728, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x81C, symBinAddr: 0x3406D0, symSize: 0x18 } - - { offsetInCU: 0x1567, offset: 0xA078F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x834, symBinAddr: 0x3406E8, symSize: 0xC } - - { offsetInCU: 0x15A0, offset: 0xA07C8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x840, symBinAddr: 0x3406F4, symSize: 0x8 } - - { offsetInCU: 0x1624, offset: 0xA084C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x848, symBinAddr: 0x3406FC, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0xA09FF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x340738, symSize: 0x190 } - - { offsetInCU: 0x34, offset: 0xA0A0D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x340738, symSize: 0x190 } - - { offsetInCU: 0x34, offset: 0xA0B13, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x398, symBinAddr: 0x1167288, symSize: 0x0 } - - { offsetInCU: 0x26, offset: 0xA0B55, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x3408C8, symSize: 0x388 } - - { offsetInCU: 0x76, offset: 0xA0BA5, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0xA30000, symSize: 0x0 } - - { offsetInCU: 0xFA, offset: 0xA0C29, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0xA55000, symSize: 0x0 } - - { offsetInCU: 0x35B, offset: 0xA0E8A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x3408C8, symSize: 0x388 } - - { offsetInCU: 0xC66, offset: 0xA1795, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x388, symBinAddr: 0x340C50, symSize: 0x204 } - - { offsetInCU: 0x1163, offset: 0xA1C92, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x58C, symBinAddr: 0x340E54, symSize: 0x1BC } - - { offsetInCU: 0x10, offset: 0xA2067, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x341020, symSize: 0x1A0 } - - { offsetInCU: 0x50, offset: 0xA20A7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x341020, symSize: 0x1A0 } - - { offsetInCU: 0x5E, offset: 0xA20B5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0x3411C0, symSize: 0x60 } - - { offsetInCU: 0x81, offset: 0xA20D8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0x341220, symSize: 0x288 } - - { offsetInCU: 0x10, offset: 0xA20C9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x3414B0, symSize: 0x130 } - - { offsetInCU: 0x48, offset: 0xA2101, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x3414B0, symSize: 0x130 } - - { offsetInCU: 0x5F, offset: 0xA2118, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0x3415E0, symSize: 0x70 } - - { offsetInCU: 0x75, offset: 0xA212E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0x341650, symSize: 0x160 } - - { offsetInCU: 0x7A, offset: 0xA2133, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0x3417B0, symSize: 0x378 } - - { offsetInCU: 0x10, offset: 0xA2141, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x341B40, symSize: 0x3A0 } - - { offsetInCU: 0x48, offset: 0xA2179, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x341B40, symSize: 0x3A0 } - - { offsetInCU: 0x4C, offset: 0xA217D, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0x341EE0, symSize: 0x6C0 } - - { offsetInCU: 0x66, offset: 0xA2197, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0x3425A0, symSize: 0x1138 } - - { offsetInCU: 0x50, offset: 0xA21E3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0x343840, symSize: 0x1180 } - - { offsetInCU: 0x66, offset: 0xA21F9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0x3449C0, symSize: 0x1410 } - - { offsetInCU: 0x10, offset: 0xA21EF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x345DE0, symSize: 0x240 } - - { offsetInCU: 0x45, offset: 0xA2224, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x345DE0, symSize: 0x240 } - - { offsetInCU: 0x4D, offset: 0xA222C, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0x346020, symSize: 0x9E0 } - - { offsetInCU: 0x63, offset: 0xA2242, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0x346A00, symSize: 0x650 } - - { offsetInCU: 0x10, offset: 0xA2251, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x347060, symSize: 0x40 } - - { offsetInCU: 0x47, offset: 0xA2288, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x347060, symSize: 0x40 } - - { offsetInCU: 0x5D, offset: 0xA229E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0x3470A0, symSize: 0x40 } - - { offsetInCU: 0x76, offset: 0xA22B7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0x3470E0, symSize: 0x40 } - - { offsetInCU: 0x81, offset: 0xA22C2, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0x347120, symSize: 0x1E0 } - - { offsetInCU: 0x97, offset: 0xA22D8, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0x347300, symSize: 0x170 } - - { offsetInCU: 0xAB, offset: 0xA22EC, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0x347470, symSize: 0x50 } - - { offsetInCU: 0xC3, offset: 0xA2304, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0x3474C0, symSize: 0x50 } - - { offsetInCU: 0xD9, offset: 0xA231A, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0x347510, symSize: 0x50 } - - { offsetInCU: 0xEF, offset: 0xA2330, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0x347560, symSize: 0x60 } - - { offsetInCU: 0x111, offset: 0xA2352, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0x3475C0, symSize: 0x1E0 } - - { offsetInCU: 0x124, offset: 0xA2365, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0x3477A0, symSize: 0x360 } - - { offsetInCU: 0x141, offset: 0xA2382, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0x347B00, symSize: 0x2D0 } - - { offsetInCU: 0x156, offset: 0xA2397, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0x347DD0, symSize: 0x2B0 } - - { offsetInCU: 0x170, offset: 0xA23B1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0x348080, symSize: 0x250 } - - { offsetInCU: 0x184, offset: 0xA23C5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0x3482D0, symSize: 0x60 } - - { offsetInCU: 0x19A, offset: 0xA23DB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0x348330, symSize: 0x44 } - - { offsetInCU: 0x10, offset: 0xA23D1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x348380, symSize: 0xB90 } - - { offsetInCU: 0x4C, offset: 0xA240D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x348380, symSize: 0xB90 } - - { offsetInCU: 0x62, offset: 0xA2423, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0x348F10, symSize: 0xB98 } - - { offsetInCU: 0x10, offset: 0xA241D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x349AC0, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA245E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x349AC0, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA245E, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x34A900, symSize: 0x7E0 } - - { offsetInCU: 0x10, offset: 0xA2469, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x34B100, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA24AA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x34B100, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA24AA, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x34BF40, symSize: 0x1F0 } + - { offsetInCU: 0x34, offset: 0x77DC8, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionString, symObjAddr: 0x0, symBinAddr: 0x963000, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0x77DFD, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionNumber, symObjAddr: 0x38, symBinAddr: 0x963038, symSize: 0x0 } + - { offsetInCU: 0x3F, offset: 0x77E52, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x28, symBinAddr: 0x24E8, symSize: 0xC } + - { offsetInCU: 0x53, offset: 0x77E66, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x34, symBinAddr: 0x24F4, symSize: 0x4 } + - { offsetInCU: 0x67, offset: 0x77E7A, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x38, symBinAddr: 0x24F8, symSize: 0x20 } + - { offsetInCU: 0x7B, offset: 0x77E8E, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x58, symBinAddr: 0x2518, symSize: 0x28 } + - { offsetInCU: 0x8F, offset: 0x77EA2, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwCP', symObjAddr: 0x94, symBinAddr: 0x2554, symSize: 0x30 } + - { offsetInCU: 0xA3, offset: 0x77EB6, size: 0x8, addend: 0x0, symName: ___swift_memcpy32_8, symObjAddr: 0xC4, symBinAddr: 0x2584, symSize: 0xC } + - { offsetInCU: 0xB7, offset: 0x77ECA, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwet', symObjAddr: 0xD0, symBinAddr: 0x2590, symSize: 0x20 } + - { offsetInCU: 0xCB, offset: 0x77EDE, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwst', symObjAddr: 0xF0, symBinAddr: 0x25B0, symSize: 0x2C } + - { offsetInCU: 0x4F, offset: 0x780C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC11_WriteQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2AE8, symBinAddr: 0x115FD00, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0x780E1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10_ReadQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2AF0, symBinAddr: 0x115FD08, symSize: 0x0 } + - { offsetInCU: 0x9D, offset: 0x78115, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTo', symObjAddr: 0x4, symBinAddr: 0x2654, symSize: 0x38 } + - { offsetInCU: 0xF3, offset: 0x7816B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x40, symBinAddr: 0x2690, symSize: 0x70 } + - { offsetInCU: 0x144, offset: 0x781BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0xB4, symBinAddr: 0x2704, symSize: 0x44 } + - { offsetInCU: 0x19F, offset: 0x78217, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0xFC, symBinAddr: 0x274C, symSize: 0x50 } + - { offsetInCU: 0x204, offset: 0x7827C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0x150, symBinAddr: 0x27A0, symSize: 0x68 } + - { offsetInCU: 0x27D, offset: 0x782F5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x1BC, symBinAddr: 0x280C, symSize: 0x98 } + - { offsetInCU: 0x2DA, offset: 0x78352, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x258, symBinAddr: 0x28A8, symSize: 0x14 } + - { offsetInCU: 0x35C, offset: 0x783D4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x270, symBinAddr: 0x28C0, symSize: 0x14 } + - { offsetInCU: 0x40B, offset: 0x78483, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZTo', symObjAddr: 0x2C8, symBinAddr: 0x2918, symSize: 0x50 } + - { offsetInCU: 0x4DC, offset: 0x78554, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZTo', symObjAddr: 0x364, symBinAddr: 0x29B4, symSize: 0x58 } + - { offsetInCU: 0x5B6, offset: 0x7862E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZTo', symObjAddr: 0x404, symBinAddr: 0x2A54, symSize: 0x58 } + - { offsetInCU: 0x695, offset: 0x7870D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZTo', symObjAddr: 0x4AC, symBinAddr: 0x2AFC, symSize: 0x60 } + - { offsetInCU: 0x741, offset: 0x787B9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZTo', symObjAddr: 0x510, symBinAddr: 0x2B60, symSize: 0x8 } + - { offsetInCU: 0x7AA, offset: 0x78822, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZTo', symObjAddr: 0x51C, symBinAddr: 0x2B6C, symSize: 0x8 } + - { offsetInCU: 0x801, offset: 0x78879, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZTo', symObjAddr: 0x538, symBinAddr: 0x2B88, symSize: 0x8 } + - { offsetInCU: 0x858, offset: 0x788D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZTo', symObjAddr: 0x544, symBinAddr: 0x2B94, symSize: 0x8 } + - { offsetInCU: 0x8AF, offset: 0x78927, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZTo', symObjAddr: 0x550, symBinAddr: 0x2BA0, symSize: 0x8 } + - { offsetInCU: 0x906, offset: 0x7897E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZTo', symObjAddr: 0x55C, symBinAddr: 0x2BAC, symSize: 0x8 } + - { offsetInCU: 0x985, offset: 0x789FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZTo', symObjAddr: 0x56C, symBinAddr: 0x2BBC, symSize: 0x24 } + - { offsetInCU: 0xA36, offset: 0x78AAE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZTo', symObjAddr: 0x594, symBinAddr: 0x2BE4, symSize: 0x14 } + - { offsetInCU: 0xAA9, offset: 0x78B21, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZTo', symObjAddr: 0x5AC, symBinAddr: 0x2BFC, symSize: 0x8 } + - { offsetInCU: 0xB00, offset: 0x78B78, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZTo', symObjAddr: 0x60C, symBinAddr: 0x2C5C, symSize: 0x74 } + - { offsetInCU: 0xB8B, offset: 0x78C03, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTo', symObjAddr: 0x814, symBinAddr: 0x2E64, symSize: 0xA0 } + - { offsetInCU: 0xBDC, offset: 0x78C54, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZTo', symObjAddr: 0xB1C, symBinAddr: 0x316C, symSize: 0x98 } + - { offsetInCU: 0xC2D, offset: 0x78CA5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZTo', symObjAddr: 0xE70, symBinAddr: 0x34C0, symSize: 0x98 } + - { offsetInCU: 0xC89, offset: 0x78D01, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTo', symObjAddr: 0x1298, symBinAddr: 0x38E8, symSize: 0xD8 } + - { offsetInCU: 0xCD1, offset: 0x78D49, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTo', symObjAddr: 0x1374, symBinAddr: 0x39C4, symSize: 0x34 } + - { offsetInCU: 0xD31, offset: 0x78DA9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfcTo', symObjAddr: 0x13F8, symBinAddr: 0x3A48, symSize: 0x3C } + - { offsetInCU: 0xD82, offset: 0x78DFA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTf4nd_n', symObjAddr: 0x1468, symBinAddr: 0x3AB8, symSize: 0x2AC } + - { offsetInCU: 0xFB6, offset: 0x7902E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTf4nnnd_n', symObjAddr: 0x1714, symBinAddr: 0x3D64, symSize: 0x264 } + - { offsetInCU: 0x11B0, offset: 0x79228, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTf4nnd_n', symObjAddr: 0x1978, symBinAddr: 0x3FC8, symSize: 0xEC } + - { offsetInCU: 0x12AD, offset: 0x79325, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTf4nnnnd_n', symObjAddr: 0x1A64, symBinAddr: 0x40B4, symSize: 0x1B4 } + - { offsetInCU: 0x1422, offset: 0x7949A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTf4nnnnnnd_n', symObjAddr: 0x1C18, symBinAddr: 0x4268, symSize: 0x1CC } + - { offsetInCU: 0x15B7, offset: 0x7962F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTf4nnnnnnnnnnd_n', symObjAddr: 0x1DE4, symBinAddr: 0x4434, symSize: 0x1E0 } + - { offsetInCU: 0x17A3, offset: 0x7981B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTf4nnnd_n', symObjAddr: 0x1FC4, symBinAddr: 0x4614, symSize: 0x1B4 } + - { offsetInCU: 0x186D, offset: 0x798E5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTf4nnnnd_n', symObjAddr: 0x231C, symBinAddr: 0x496C, symSize: 0x1D4 } + - { offsetInCU: 0x194E, offset: 0x799C6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTf4d_n', symObjAddr: 0x24F0, symBinAddr: 0x4B40, symSize: 0x114 } + - { offsetInCU: 0x19F9, offset: 0x79A71, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TR', symObjAddr: 0x8B4, symBinAddr: 0x2F04, symSize: 0x78 } + - { offsetInCU: 0x1A11, offset: 0x79A89, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TR', symObjAddr: 0xBB4, symBinAddr: 0x3204, symSize: 0x54 } + - { offsetInCU: 0x1A7E, offset: 0x79AF6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfETo', symObjAddr: 0x1464, symBinAddr: 0x3AB4, symSize: 0x4 } + - { offsetInCU: 0x1B09, offset: 0x79B81, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCMa', symObjAddr: 0x2604, symBinAddr: 0x4C54, symSize: 0x20 } + - { offsetInCU: 0x1B1D, offset: 0x79B95, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TRTA', symObjAddr: 0x2648, symBinAddr: 0x4C98, symSize: 0x8 } + - { offsetInCU: 0x1B3C, offset: 0x79BB4, size: 0x8, addend: 0x0, symName: '_$sSo7NSErrorCSg10ObjectiveC8ObjCBoolVIeyByy_ACSbIeggy_TRTA', symObjAddr: 0x2650, symBinAddr: 0x4CA0, symSize: 0x18 } + - { offsetInCU: 0x1B65, offset: 0x79BDD, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TRTA', symObjAddr: 0x2668, symBinAddr: 0x4CB8, symSize: 0x8 } + - { offsetInCU: 0x1B79, offset: 0x79BF1, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCMa', symObjAddr: 0x2670, symBinAddr: 0x4CC0, symSize: 0x3C } + - { offsetInCU: 0x1B8D, offset: 0x79C05, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_TA', symObjAddr: 0x26F0, symBinAddr: 0x4D40, symSize: 0x34 } + - { offsetInCU: 0x1BA1, offset: 0x79C19, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x2724, symBinAddr: 0x4D74, symSize: 0x10 } + - { offsetInCU: 0x1BB5, offset: 0x79C2D, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x2734, symBinAddr: 0x4D84, symSize: 0x8 } + - { offsetInCU: 0x1BC9, offset: 0x79C41, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2760, symBinAddr: 0x4DB0, symSize: 0x40 } + - { offsetInCU: 0x1BFD, offset: 0x79C75, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x27E4, symBinAddr: 0x4E34, symSize: 0x40 } + - { offsetInCU: 0x1C3B, offset: 0x79CB3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2824, symBinAddr: 0x4E74, symSize: 0x28 } + - { offsetInCU: 0x1C6F, offset: 0x79CE7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x28A4, symBinAddr: 0x4EF4, symSize: 0x3C } + - { offsetInCU: 0x1CA3, offset: 0x79D1B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x290C, symBinAddr: 0x4F5C, symSize: 0x30 } + - { offsetInCU: 0x1CDF, offset: 0x79D57, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_TA', symObjAddr: 0x2978, symBinAddr: 0x4FC8, symSize: 0x10 } + - { offsetInCU: 0x1CF3, offset: 0x79D6B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2988, symBinAddr: 0x4FD8, symSize: 0x40 } + - { offsetInCU: 0x21C0, offset: 0x7A238, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZ', symObjAddr: 0x0, symBinAddr: 0x2650, symSize: 0x4 } + - { offsetInCU: 0x21DB, offset: 0x7A253, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x3C, symBinAddr: 0x268C, symSize: 0x4 } + - { offsetInCU: 0x21F6, offset: 0x7A26E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0xB0, symBinAddr: 0x2700, symSize: 0x4 } + - { offsetInCU: 0x2217, offset: 0x7A28F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0xF8, symBinAddr: 0x2748, symSize: 0x4 } + - { offsetInCU: 0x2232, offset: 0x7A2AA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0x14C, symBinAddr: 0x279C, symSize: 0x4 } + - { offsetInCU: 0x224D, offset: 0x7A2C5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x1B8, symBinAddr: 0x2808, symSize: 0x4 } + - { offsetInCU: 0x2268, offset: 0x7A2E0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x254, symBinAddr: 0x28A4, symSize: 0x4 } + - { offsetInCU: 0x22F6, offset: 0x7A36E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x26C, symBinAddr: 0x28BC, symSize: 0x4 } + - { offsetInCU: 0x2375, offset: 0x7A3ED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZ', symObjAddr: 0x284, symBinAddr: 0x28D4, symSize: 0x44 } + - { offsetInCU: 0x24B3, offset: 0x7A52B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZ', symObjAddr: 0x318, symBinAddr: 0x2968, symSize: 0x4C } + - { offsetInCU: 0x25FC, offset: 0x7A674, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZ', symObjAddr: 0x3BC, symBinAddr: 0x2A0C, symSize: 0x48 } + - { offsetInCU: 0x2744, offset: 0x7A7BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZ', symObjAddr: 0x45C, symBinAddr: 0x2AAC, symSize: 0x50 } + - { offsetInCU: 0x28A1, offset: 0x7A919, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZ', symObjAddr: 0x50C, symBinAddr: 0x2B5C, symSize: 0x4 } + - { offsetInCU: 0x2913, offset: 0x7A98B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZ', symObjAddr: 0x518, symBinAddr: 0x2B68, symSize: 0x4 } + - { offsetInCU: 0x2956, offset: 0x7A9CE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZ', symObjAddr: 0x524, symBinAddr: 0x2B74, symSize: 0x14 } + - { offsetInCU: 0x299B, offset: 0x7AA13, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZ', symObjAddr: 0x540, symBinAddr: 0x2B90, symSize: 0x4 } + - { offsetInCU: 0x29DE, offset: 0x7AA56, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZ', symObjAddr: 0x54C, symBinAddr: 0x2B9C, symSize: 0x4 } + - { offsetInCU: 0x2A21, offset: 0x7AA99, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZ', symObjAddr: 0x558, symBinAddr: 0x2BA8, symSize: 0x4 } + - { offsetInCU: 0x2A64, offset: 0x7AADC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZ', symObjAddr: 0x564, symBinAddr: 0x2BB4, symSize: 0x8 } + - { offsetInCU: 0x2B4B, offset: 0x7ABC3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ', symObjAddr: 0x590, symBinAddr: 0x2BE0, symSize: 0x4 } + - { offsetInCU: 0x2BCA, offset: 0x7AC42, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZ', symObjAddr: 0x5A8, symBinAddr: 0x2BF8, symSize: 0x4 } + - { offsetInCU: 0x2C0D, offset: 0x7AC85, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZ', symObjAddr: 0x5B4, symBinAddr: 0x2C04, symSize: 0x58 } + - { offsetInCU: 0x2CCE, offset: 0x7AD46, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZ', symObjAddr: 0x680, symBinAddr: 0x2CD0, symSize: 0x4 } + - { offsetInCU: 0x2CE2, offset: 0x7AD5A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_', symObjAddr: 0x684, symBinAddr: 0x2CD4, symSize: 0x190 } + - { offsetInCU: 0x2D82, offset: 0x7ADFA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZ', symObjAddr: 0x92C, symBinAddr: 0x2F7C, symSize: 0x2C } + - { offsetInCU: 0x2D96, offset: 0x7AE0E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_', symObjAddr: 0x958, symBinAddr: 0x2FA8, symSize: 0x1C4 } + - { offsetInCU: 0x2E80, offset: 0x7AEF8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZ', symObjAddr: 0xC08, symBinAddr: 0x3258, symSize: 0x2C } + - { offsetInCU: 0x2E94, offset: 0x7AF0C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_', symObjAddr: 0xC34, symBinAddr: 0x3284, symSize: 0x23C } + - { offsetInCU: 0x2F48, offset: 0x7AFC0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZ', symObjAddr: 0xF08, symBinAddr: 0x3558, symSize: 0x4 } + - { offsetInCU: 0x2F5C, offset: 0x7AFD4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_', symObjAddr: 0xF0C, symBinAddr: 0x355C, symSize: 0x38C } + - { offsetInCU: 0x31F3, offset: 0x7B26B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZ', symObjAddr: 0x1370, symBinAddr: 0x39C0, symSize: 0x4 } + - { offsetInCU: 0x320E, offset: 0x7B286, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfC', symObjAddr: 0x13A8, symBinAddr: 0x39F8, symSize: 0x20 } + - { offsetInCU: 0x3222, offset: 0x7B29A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfc', symObjAddr: 0x13C8, symBinAddr: 0x3A18, symSize: 0x30 } + - { offsetInCU: 0x3258, offset: 0x7B2D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfD', symObjAddr: 0x1434, symBinAddr: 0x3A84, symSize: 0x30 } + - { offsetInCU: 0x4F, offset: 0x7B508, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LLSo7GLKViewCvpZ', symObjAddr: 0x5520, symBinAddr: 0x115FD40, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0x7B522, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15_shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvpZ', symObjAddr: 0x5528, symBinAddr: 0x115FD48, symSize: 0x0 } + - { offsetInCU: 0x83, offset: 0x7B53C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5storeSo19NSMutableDictionaryCvpZ', symObjAddr: 0x5530, symBinAddr: 0x115FD50, symSize: 0x0 } + - { offsetInCU: 0x9D, offset: 0x7B556, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LLSo10NSMapTableCySo8NSStringCACGvpZ', symObjAddr: 0x5538, symBinAddr: 0x115FD58, symSize: 0x0 } + - { offsetInCU: 0xAB, offset: 0x7B564, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0x0, symBinAddr: 0x5100, symSize: 0x40 } + - { offsetInCU: 0xF0, offset: 0x7B5A9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5store_WZ', symObjAddr: 0x40, symBinAddr: 0x5140, symSize: 0x30 } + - { offsetInCU: 0x135, offset: 0x7B5EE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0xA8, symBinAddr: 0x51A8, symSize: 0x40 } + - { offsetInCU: 0x187, offset: 0x7B640, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x194, symBinAddr: 0x5294, symSize: 0x10 } + - { offsetInCU: 0x1A7, offset: 0x7B660, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x194, symBinAddr: 0x5294, symSize: 0x10 } + - { offsetInCU: 0x1DD, offset: 0x7B696, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x1A4, symBinAddr: 0x52A4, symSize: 0x10 } + - { offsetInCU: 0x1FD, offset: 0x7B6B6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x1A4, symBinAddr: 0x52A4, symSize: 0x10 } + - { offsetInCU: 0x236, offset: 0x7B6EF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x1B4, symBinAddr: 0x52B4, symSize: 0x10 } + - { offsetInCU: 0x256, offset: 0x7B70F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x1B4, symBinAddr: 0x52B4, symSize: 0x10 } + - { offsetInCU: 0x28C, offset: 0x7B745, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x1C4, symBinAddr: 0x52C4, symSize: 0x10 } + - { offsetInCU: 0x2AC, offset: 0x7B765, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x1C4, symBinAddr: 0x52C4, symSize: 0x10 } + - { offsetInCU: 0x2E5, offset: 0x7B79E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvgTo', symObjAddr: 0x29C, symBinAddr: 0x539C, symSize: 0x44 } + - { offsetInCU: 0x322, offset: 0x7B7DB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvsTo', symObjAddr: 0x324, symBinAddr: 0x5424, symSize: 0x30 } + - { offsetInCU: 0x3B1, offset: 0x7B86A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvgTo', symObjAddr: 0x578, symBinAddr: 0x5678, symSize: 0x44 } + - { offsetInCU: 0x409, offset: 0x7B8C2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvsTo', symObjAddr: 0x600, symBinAddr: 0x5700, symSize: 0x48 } + - { offsetInCU: 0x464, offset: 0x7B91D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvgTo', symObjAddr: 0x648, symBinAddr: 0x5748, symSize: 0x44 } + - { offsetInCU: 0x4BC, offset: 0x7B975, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvsTo', symObjAddr: 0x6D0, symBinAddr: 0x57D0, symSize: 0x48 } + - { offsetInCU: 0x517, offset: 0x7B9D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0x718, symBinAddr: 0x5818, symSize: 0x10 } + - { offsetInCU: 0x537, offset: 0x7B9F0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0x718, symBinAddr: 0x5818, symSize: 0x10 } + - { offsetInCU: 0x56D, offset: 0x7BA26, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0x728, symBinAddr: 0x5828, symSize: 0x10 } + - { offsetInCU: 0x58D, offset: 0x7BA46, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0x728, symBinAddr: 0x5828, symSize: 0x10 } + - { offsetInCU: 0x5C6, offset: 0x7BA7F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0x738, symBinAddr: 0x5838, symSize: 0x10 } + - { offsetInCU: 0x5E6, offset: 0x7BA9F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0x738, symBinAddr: 0x5838, symSize: 0x10 } + - { offsetInCU: 0x61E, offset: 0x7BAD7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvsTo', symObjAddr: 0x748, symBinAddr: 0x5848, symSize: 0x34 } + - { offsetInCU: 0x677, offset: 0x7BB30, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x77C, symBinAddr: 0x587C, symSize: 0x10 } + - { offsetInCU: 0x697, offset: 0x7BB50, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x77C, symBinAddr: 0x587C, symSize: 0x10 } + - { offsetInCU: 0x6CF, offset: 0x7BB88, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvsTo', symObjAddr: 0x78C, symBinAddr: 0x588C, symSize: 0x34 } + - { offsetInCU: 0x728, offset: 0x7BBE1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x7C0, symBinAddr: 0x58C0, symSize: 0x10 } + - { offsetInCU: 0x748, offset: 0x7BC01, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x7C0, symBinAddr: 0x58C0, symSize: 0x10 } + - { offsetInCU: 0x77E, offset: 0x7BC37, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x7D0, symBinAddr: 0x58D0, symSize: 0x10 } + - { offsetInCU: 0x79E, offset: 0x7BC57, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x7D0, symBinAddr: 0x58D0, symSize: 0x10 } + - { offsetInCU: 0x7D7, offset: 0x7BC90, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvgTo', symObjAddr: 0x7E0, symBinAddr: 0x58E0, symSize: 0x10 } + - { offsetInCU: 0x7F7, offset: 0x7BCB0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvgTo', symObjAddr: 0x7E0, symBinAddr: 0x58E0, symSize: 0x10 } + - { offsetInCU: 0x82D, offset: 0x7BCE6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvsTo', symObjAddr: 0x7F0, symBinAddr: 0x58F0, symSize: 0x10 } + - { offsetInCU: 0x84D, offset: 0x7BD06, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvsTo', symObjAddr: 0x7F0, symBinAddr: 0x58F0, symSize: 0x10 } + - { offsetInCU: 0x870, offset: 0x7BD29, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivgTo', symObjAddr: 0x800, symBinAddr: 0x5900, symSize: 0x34 } + - { offsetInCU: 0x8A2, offset: 0x7BD5B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivgTo', symObjAddr: 0x904, symBinAddr: 0x5A04, symSize: 0x34 } + - { offsetInCU: 0x8EA, offset: 0x7BDA3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvgTo', symObjAddr: 0xA08, symBinAddr: 0x5B08, symSize: 0x20 } + - { offsetInCU: 0x952, offset: 0x7BE0B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvgTo', symObjAddr: 0xA4C, symBinAddr: 0x5B4C, symSize: 0x20 } + - { offsetInCU: 0x9F1, offset: 0x7BEAA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btFTo', symObjAddr: 0xAB4, symBinAddr: 0x5BB4, symSize: 0xC4 } + - { offsetInCU: 0xAB4, offset: 0x7BF6D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VFTo', symObjAddr: 0xD10, symBinAddr: 0x5E10, symSize: 0x30 } + - { offsetInCU: 0xB64, offset: 0x7C01D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x15B0, symBinAddr: 0x66B0, symSize: 0xC4 } + - { offsetInCU: 0xBCE, offset: 0x7C087, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtFTo', symObjAddr: 0x18CC, symBinAddr: 0x69CC, symSize: 0xB0 } + - { offsetInCU: 0xC0B, offset: 0x7C0C4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x1A3C, symBinAddr: 0x6B3C, symSize: 0xB8 } + - { offsetInCU: 0xC83, offset: 0x7C13C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbFTo', symObjAddr: 0x1BD8, symBinAddr: 0x6CD8, symSize: 0x3C } + - { offsetInCU: 0xCB6, offset: 0x7C16F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1C14, symBinAddr: 0x6D14, symSize: 0x10 } + - { offsetInCU: 0xCD6, offset: 0x7C18F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1C14, symBinAddr: 0x6D14, symSize: 0x10 } + - { offsetInCU: 0xD10, offset: 0x7C1C9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvsTo', symObjAddr: 0x1C24, symBinAddr: 0x6D24, symSize: 0x34 } + - { offsetInCU: 0xD6B, offset: 0x7C224, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyFTo', symObjAddr: 0x1CA0, symBinAddr: 0x6DA0, symSize: 0x48 } + - { offsetInCU: 0xE05, offset: 0x7C2BE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VFTo', symObjAddr: 0x1D34, symBinAddr: 0x6E34, symSize: 0x64 } + - { offsetInCU: 0xECA, offset: 0x7C383, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VFTo', symObjAddr: 0x1DF0, symBinAddr: 0x6EF0, symSize: 0x94 } + - { offsetInCU: 0xF57, offset: 0x7C410, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC23enterBackgroundListeneryycSgvsTo', symObjAddr: 0x1EC4, symBinAddr: 0x6FC4, symSize: 0x6C } + - { offsetInCU: 0xFB9, offset: 0x7C472, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC20becomeActiveListeneryycSgvsTo', symObjAddr: 0x1FD4, symBinAddr: 0x70D4, symSize: 0x6C } + - { offsetInCU: 0x1016, offset: 0x7C4CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvgTo', symObjAddr: 0x2040, symBinAddr: 0x7140, symSize: 0xB0 } + - { offsetInCU: 0x1068, offset: 0x7C521, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvsTo', symObjAddr: 0x21C0, symBinAddr: 0x72C0, symSize: 0x94 } + - { offsetInCU: 0x10FA, offset: 0x7C5B3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x2E5C, symBinAddr: 0x7F5C, symSize: 0x28 } + - { offsetInCU: 0x114F, offset: 0x7C608, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x38A4, symBinAddr: 0x89A4, symSize: 0x20 } + - { offsetInCU: 0x1182, offset: 0x7C63B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x38C4, symBinAddr: 0x89C4, symSize: 0x10 } + - { offsetInCU: 0x11A2, offset: 0x7C65B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x38C4, symBinAddr: 0x89C4, symSize: 0x10 } + - { offsetInCU: 0x11DA, offset: 0x7C693, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvsTo', symObjAddr: 0x38D4, symBinAddr: 0x89D4, symSize: 0x34 } + - { offsetInCU: 0x1248, offset: 0x7C701, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvgTo', symObjAddr: 0x3988, symBinAddr: 0x8A88, symSize: 0x20 } + - { offsetInCU: 0x12A2, offset: 0x7C75B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvsTo', symObjAddr: 0x39A8, symBinAddr: 0x8AA8, symSize: 0x34 } + - { offsetInCU: 0x1302, offset: 0x7C7BB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgFTo', symObjAddr: 0x3A0C, symBinAddr: 0x8B0C, symSize: 0x34 } + - { offsetInCU: 0x1446, offset: 0x7C8FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFTo', symObjAddr: 0x3D58, symBinAddr: 0x8E58, symSize: 0x28 } + - { offsetInCU: 0x1479, offset: 0x7C932, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfDTo', symObjAddr: 0x4084, symBinAddr: 0x9184, symSize: 0x24 } + - { offsetInCU: 0x14B4, offset: 0x7C96D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTo', symObjAddr: 0x4170, symBinAddr: 0x9270, symSize: 0x34 } + - { offsetInCU: 0x14E7, offset: 0x7C9A0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvgZTf4d_n', symObjAddr: 0x4B04, symBinAddr: 0x9C04, symSize: 0x298 } + - { offsetInCU: 0x1664, offset: 0x7CB1D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTf4nnd_n', symObjAddr: 0x4E60, symBinAddr: 0x9F60, symSize: 0xA0 } + - { offsetInCU: 0x18E0, offset: 0x7CD99, size: 0x8, addend: 0x0, symName: '_$sIeg_IeyB_TR', symObjAddr: 0x1E98, symBinAddr: 0x6F98, symSize: 0x2C } + - { offsetInCU: 0x18F8, offset: 0x7CDB1, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_So8NSStringCABIeyByy_TR', symObjAddr: 0x2148, symBinAddr: 0x7248, symSize: 0x78 } + - { offsetInCU: 0x1910, offset: 0x7CDC9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTK', symObjAddr: 0x22B0, symBinAddr: 0x73B0, symSize: 0x94 } + - { offsetInCU: 0x1948, offset: 0x7CE01, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTk', symObjAddr: 0x2344, symBinAddr: 0x7444, symSize: 0xB8 } + - { offsetInCU: 0x198A, offset: 0x7CE43, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TR', symObjAddr: 0x23FC, symBinAddr: 0x74FC, symSize: 0x6C } + - { offsetInCU: 0x1A3A, offset: 0x7CEF3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfETo', symObjAddr: 0x40A8, symBinAddr: 0x91A8, symSize: 0xC4 } + - { offsetInCU: 0x1A6A, offset: 0x7CF23, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOy', symObjAddr: 0x41A4, symBinAddr: 0x92A4, symSize: 0x10 } + - { offsetInCU: 0x1A7E, offset: 0x7CF37, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCMa', symObjAddr: 0x41B4, symBinAddr: 0x92B4, symSize: 0x20 } + - { offsetInCU: 0x1A92, offset: 0x7CF4B, size: 0x8, addend: 0x0, symName: '_$ss29getContiguousArrayStorageType3fors01_bcD0CyxGmxm_tlFSo18NSLayoutConstraintC_Tgm5', symObjAddr: 0x41D4, symBinAddr: 0x92D4, symSize: 0x64 } + - { offsetInCU: 0x1C99, offset: 0x7D152, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x4D9C, symBinAddr: 0x9E9C, symSize: 0x40 } + - { offsetInCU: 0x1CAD, offset: 0x7D166, size: 0x8, addend: 0x0, symName: '_$sypSgWOh', symObjAddr: 0x4DDC, symBinAddr: 0x9EDC, symSize: 0x40 } + - { offsetInCU: 0x1CC1, offset: 0x7D17A, size: 0x8, addend: 0x0, symName: ___swift_project_boxed_opaque_existential_0, symObjAddr: 0x4E1C, symBinAddr: 0x9F1C, symSize: 0x24 } + - { offsetInCU: 0x1CD5, offset: 0x7D18E, size: 0x8, addend: 0x0, symName: ___swift_destroy_boxed_opaque_existential_0, symObjAddr: 0x4E40, symBinAddr: 0x9F40, symSize: 0x20 } + - { offsetInCU: 0x1CF4, offset: 0x7D1AD, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSo19UIGestureRecognizerCIeyByy_SSADIeggg_TRTA', symObjAddr: 0x532C, symBinAddr: 0xA42C, symSize: 0x48 } + - { offsetInCU: 0x1D1D, offset: 0x7D1D6, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x5374, symBinAddr: 0xA474, symSize: 0x10 } + - { offsetInCU: 0x1D31, offset: 0x7D1EA, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x5384, symBinAddr: 0xA484, symSize: 0x8 } + - { offsetInCU: 0x1D45, offset: 0x7D1FE, size: 0x8, addend: 0x0, symName: '_$sIeg_SgWOe', symObjAddr: 0x538C, symBinAddr: 0xA48C, symSize: 0x10 } + - { offsetInCU: 0x1D64, offset: 0x7D21D, size: 0x8, addend: 0x0, symName: '_$sIeyB_Ieg_TRTA', symObjAddr: 0x539C, symBinAddr: 0xA49C, symSize: 0xC } + - { offsetInCU: 0x1D8D, offset: 0x7D246, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TRTA', symObjAddr: 0x53CC, symBinAddr: 0xA4CC, symSize: 0x8 } + - { offsetInCU: 0x1DAC, offset: 0x7D265, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SSABytIegnnr_TRTA', symObjAddr: 0x53D4, symBinAddr: 0xA4D4, symSize: 0x30 } + - { offsetInCU: 0x1DD5, offset: 0x7D28E, size: 0x8, addend: 0x0, symName: '_$sypWOb', symObjAddr: 0x5404, symBinAddr: 0xA504, symSize: 0x10 } + - { offsetInCU: 0x1DE9, offset: 0x7D2A2, size: 0x8, addend: 0x0, symName: '_$sypWOc', symObjAddr: 0x544C, symBinAddr: 0xA54C, symSize: 0x3C } + - { offsetInCU: 0x206E, offset: 0x7D527, size: 0x8, addend: 0x0, symName: '_$sSD17dictionaryLiteralSDyxq_Gx_q_td_tcfCSS_ypTgm5Tf4g_n', symObjAddr: 0x49F4, symBinAddr: 0x9AF4, symSize: 0x110 } + - { offsetInCU: 0x251C, offset: 0x7D9D5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvg', symObjAddr: 0x2E0, symBinAddr: 0x53E0, symSize: 0x44 } + - { offsetInCU: 0x254F, offset: 0x7DA08, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvs', symObjAddr: 0x354, symBinAddr: 0x5454, symSize: 0xEC } + - { offsetInCU: 0x259B, offset: 0x7DA54, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM', symObjAddr: 0x440, symBinAddr: 0x5540, symSize: 0x58 } + - { offsetInCU: 0x25C0, offset: 0x7DA79, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM.resume.0', symObjAddr: 0x498, symBinAddr: 0x5598, symSize: 0xE0 } + - { offsetInCU: 0x2601, offset: 0x7DABA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64Vvg', symObjAddr: 0x5BC, symBinAddr: 0x56BC, symSize: 0x44 } + - { offsetInCU: 0x2659, offset: 0x7DB12, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg', symObjAddr: 0x68C, symBinAddr: 0x578C, symSize: 0x44 } + - { offsetInCU: 0x27C7, offset: 0x7DC80, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivg', symObjAddr: 0x834, symBinAddr: 0x5934, symSize: 0xD0 } + - { offsetInCU: 0x28EC, offset: 0x7DDA5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivg', symObjAddr: 0x938, symBinAddr: 0x5A38, symSize: 0xD0 } + - { offsetInCU: 0x2A32, offset: 0x7DEEB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvg', symObjAddr: 0xA28, symBinAddr: 0x5B28, symSize: 0x24 } + - { offsetInCU: 0x2A7A, offset: 0x7DF33, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvg', symObjAddr: 0xA6C, symBinAddr: 0x5B6C, symSize: 0x24 } + - { offsetInCU: 0x2AAE, offset: 0x7DF67, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btF', symObjAddr: 0xA90, symBinAddr: 0x5B90, symSize: 0x24 } + - { offsetInCU: 0x2C3C, offset: 0x7E0F5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VF', symObjAddr: 0xB78, symBinAddr: 0x5C78, symSize: 0x198 } + - { offsetInCU: 0x302F, offset: 0x7E4E8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btF', symObjAddr: 0xD40, symBinAddr: 0x5E40, symSize: 0x870 } + - { offsetInCU: 0x3832, offset: 0x7ECEB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtF', symObjAddr: 0x1674, symBinAddr: 0x6774, symSize: 0x258 } + - { offsetInCU: 0x3C64, offset: 0x7F11D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x197C, symBinAddr: 0x6A7C, symSize: 0xC0 } + - { offsetInCU: 0x3CF5, offset: 0x7F1AE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbF', symObjAddr: 0x1AF4, symBinAddr: 0x6BF4, symSize: 0xE4 } + - { offsetInCU: 0x3E50, offset: 0x7F309, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyF', symObjAddr: 0x1C58, symBinAddr: 0x6D58, symSize: 0x48 } + - { offsetInCU: 0x3ED6, offset: 0x7F38F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF', symObjAddr: 0x1CE8, symBinAddr: 0x6DE8, symSize: 0x4C } + - { offsetInCU: 0x3FF7, offset: 0x7F4B0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VF', symObjAddr: 0x1D98, symBinAddr: 0x6E98, symSize: 0x58 } + - { offsetInCU: 0x40ED, offset: 0x7F5A6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvg', symObjAddr: 0x20F0, symBinAddr: 0x71F0, symSize: 0x58 } + - { offsetInCU: 0x4139, offset: 0x7F5F2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvs', symObjAddr: 0x2254, symBinAddr: 0x7354, symSize: 0x5C } + - { offsetInCU: 0x4162, offset: 0x7F61B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM', symObjAddr: 0x2468, symBinAddr: 0x7568, symSize: 0x44 } + - { offsetInCU: 0x4188, offset: 0x7F641, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM.resume.0', symObjAddr: 0x24AC, symBinAddr: 0x75AC, symSize: 0x4 } + - { offsetInCU: 0x424A, offset: 0x7F703, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x24B0, symBinAddr: 0x75B0, symSize: 0x9AC } + - { offsetInCU: 0x444F, offset: 0x7F908, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfC', symObjAddr: 0x2E84, symBinAddr: 0x7F84, symSize: 0x50 } + - { offsetInCU: 0x4478, offset: 0x7F931, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfc', symObjAddr: 0x2ED4, symBinAddr: 0x7FD4, symSize: 0x9D0 } + - { offsetInCU: 0x469E, offset: 0x7FB57, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvW', symObjAddr: 0x3908, symBinAddr: 0x8A08, symSize: 0x80 } + - { offsetInCU: 0x4794, offset: 0x7FC4D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgF', symObjAddr: 0x39DC, symBinAddr: 0x8ADC, symSize: 0x30 } + - { offsetInCU: 0x4832, offset: 0x7FCEB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6resize33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x3A40, symBinAddr: 0x8B40, symSize: 0x144 } + - { offsetInCU: 0x4A33, offset: 0x7FEEC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyF', symObjAddr: 0x3B84, symBinAddr: 0x8C84, symSize: 0x1D4 } + - { offsetInCU: 0x4CB0, offset: 0x80169, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfD', symObjAddr: 0x3D80, symBinAddr: 0x8E80, symSize: 0x304 } + - { offsetInCU: 0x4D40, offset: 0x801F9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZ', symObjAddr: 0x416C, symBinAddr: 0x926C, symSize: 0x4 } + - { offsetInCU: 0x4D68, offset: 0x80221, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4findys10_HashTableV6BucketV6bucket_Sb5foundtxSHRzlFSS_Tg5', symObjAddr: 0x4238, symBinAddr: 0x9338, symSize: 0x64 } + - { offsetInCU: 0x4DC2, offset: 0x8027B, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV7_insert2at3key5valueys10_HashTableV6BucketV_xnq_ntFSS_ypTg5', symObjAddr: 0x429C, symBinAddr: 0x939C, symSize: 0x6C } + - { offsetInCU: 0x4E42, offset: 0x802FB, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV12mutatingFind_8isUniques10_HashTableV6BucketV6bucket_Sb5foundtx_SbtFSS_ypTg5', symObjAddr: 0x4308, symBinAddr: 0x9408, symSize: 0xD8 } + - { offsetInCU: 0x4E7F, offset: 0x80338, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4find_9hashValues10_HashTableV6BucketV6bucket_Sb5foundtx_SitSHRzlFSS_Tg5', symObjAddr: 0x43E0, symBinAddr: 0x94E0, symSize: 0xE0 } + - { offsetInCU: 0x4EFA, offset: 0x803B3, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV4copyyyFSS_ypTg5', symObjAddr: 0x44C0, symBinAddr: 0x95C0, symSize: 0x1F4 } + - { offsetInCU: 0x4FB6, offset: 0x8046F, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV20_copyOrMoveAndResize8capacity12moveElementsySi_SbtFSS_ypTg5', symObjAddr: 0x46B4, symBinAddr: 0x97B4, symSize: 0x340 } + - { offsetInCU: 0x27, offset: 0x806BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xA5EC, symSize: 0x10 } + - { offsetInCU: 0x62, offset: 0x806F7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCMa', symObjAddr: 0x10, symBinAddr: 0xA5FC, symSize: 0x20 } + - { offsetInCU: 0x1AF, offset: 0x80844, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xA5EC, symSize: 0x10 } + - { offsetInCU: 0x65, offset: 0x808D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvgTo', symObjAddr: 0x0, symBinAddr: 0xA61C, symSize: 0x10 } + - { offsetInCU: 0x85, offset: 0x808F3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvgTo', symObjAddr: 0x0, symBinAddr: 0xA61C, symSize: 0x10 } + - { offsetInCU: 0xBB, offset: 0x80929, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvsTo', symObjAddr: 0x10, symBinAddr: 0xA62C, symSize: 0x10 } + - { offsetInCU: 0xDB, offset: 0x80949, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvsTo', symObjAddr: 0x10, symBinAddr: 0xA62C, symSize: 0x10 } + - { offsetInCU: 0x114, offset: 0x80982, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvgTo', symObjAddr: 0x20, symBinAddr: 0xA63C, symSize: 0x44 } + - { offsetInCU: 0x16C, offset: 0x809DA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvsTo', symObjAddr: 0x64, symBinAddr: 0xA680, symSize: 0x48 } + - { offsetInCU: 0x1C7, offset: 0x80A35, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvgTo', symObjAddr: 0xAC, symBinAddr: 0xA6C8, symSize: 0x44 } + - { offsetInCU: 0x21F, offset: 0x80A8D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvsTo', symObjAddr: 0xF0, symBinAddr: 0xA70C, symSize: 0x48 } + - { offsetInCU: 0x27A, offset: 0x80AE8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivgTo', symObjAddr: 0x138, symBinAddr: 0xA754, symSize: 0x10 } + - { offsetInCU: 0x29A, offset: 0x80B08, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivgTo', symObjAddr: 0x138, symBinAddr: 0xA754, symSize: 0x10 } + - { offsetInCU: 0x2D0, offset: 0x80B3E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivsTo', symObjAddr: 0x148, symBinAddr: 0xA764, symSize: 0x10 } + - { offsetInCU: 0x2F0, offset: 0x80B5E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivsTo', symObjAddr: 0x148, symBinAddr: 0xA764, symSize: 0x10 } + - { offsetInCU: 0x329, offset: 0x80B97, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivgTo', symObjAddr: 0x158, symBinAddr: 0xA774, symSize: 0x10 } + - { offsetInCU: 0x349, offset: 0x80BB7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivgTo', symObjAddr: 0x158, symBinAddr: 0xA774, symSize: 0x10 } + - { offsetInCU: 0x37F, offset: 0x80BED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivsTo', symObjAddr: 0x168, symBinAddr: 0xA784, symSize: 0x10 } + - { offsetInCU: 0x39F, offset: 0x80C0D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivsTo', symObjAddr: 0x168, symBinAddr: 0xA784, symSize: 0x10 } + - { offsetInCU: 0x3D8, offset: 0x80C46, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvgTo', symObjAddr: 0x178, symBinAddr: 0xA794, symSize: 0x44 } + - { offsetInCU: 0x430, offset: 0x80C9E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvsTo', symObjAddr: 0x1BC, symBinAddr: 0xA7D8, symSize: 0x48 } + - { offsetInCU: 0x48B, offset: 0x80CF9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvgTo', symObjAddr: 0x204, symBinAddr: 0xA820, symSize: 0x10 } + - { offsetInCU: 0x4AB, offset: 0x80D19, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvgTo', symObjAddr: 0x204, symBinAddr: 0xA820, symSize: 0x10 } + - { offsetInCU: 0x4E1, offset: 0x80D4F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvsTo', symObjAddr: 0x214, symBinAddr: 0xA830, symSize: 0x10 } + - { offsetInCU: 0x501, offset: 0x80D6F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvsTo', symObjAddr: 0x214, symBinAddr: 0xA830, symSize: 0x10 } + - { offsetInCU: 0x53A, offset: 0x80DA8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvgTo', symObjAddr: 0x224, symBinAddr: 0xA840, symSize: 0x10 } + - { offsetInCU: 0x55A, offset: 0x80DC8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvgTo', symObjAddr: 0x224, symBinAddr: 0xA840, symSize: 0x10 } + - { offsetInCU: 0x590, offset: 0x80DFE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvsTo', symObjAddr: 0x234, symBinAddr: 0xA850, symSize: 0x10 } + - { offsetInCU: 0x5B0, offset: 0x80E1E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvsTo', symObjAddr: 0x234, symBinAddr: 0xA850, symSize: 0x10 } + - { offsetInCU: 0x5E9, offset: 0x80E57, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvgTo', symObjAddr: 0x244, symBinAddr: 0xA860, symSize: 0x48 } + - { offsetInCU: 0x63F, offset: 0x80EAD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvsTo', symObjAddr: 0x28C, symBinAddr: 0xA8A8, symSize: 0x40 } + - { offsetInCU: 0x682, offset: 0x80EF0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13SIZE_OF_FLOATSivgZTo', symObjAddr: 0x2CC, symBinAddr: 0xA8E8, symSize: 0x8 } + - { offsetInCU: 0x69E, offset: 0x80F0C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13VERTEX_SHADERSSvgZTo', symObjAddr: 0x2D4, symBinAddr: 0xA8F0, symSize: 0x2C } + - { offsetInCU: 0x6D0, offset: 0x80F3E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvgTo', symObjAddr: 0x300, symBinAddr: 0xA91C, symSize: 0x10 } + - { offsetInCU: 0x6F0, offset: 0x80F5E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvgTo', symObjAddr: 0x300, symBinAddr: 0xA91C, symSize: 0x10 } + - { offsetInCU: 0x728, offset: 0x80F96, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvsTo', symObjAddr: 0x310, symBinAddr: 0xA92C, symSize: 0x34 } + - { offsetInCU: 0x781, offset: 0x80FEF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvgTo', symObjAddr: 0x418, symBinAddr: 0xAA34, symSize: 0x10 } + - { offsetInCU: 0x7A1, offset: 0x8100F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvgTo', symObjAddr: 0x418, symBinAddr: 0xAA34, symSize: 0x10 } + - { offsetInCU: 0x7D7, offset: 0x81045, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvsTo', symObjAddr: 0x428, symBinAddr: 0xAA44, symSize: 0x10 } + - { offsetInCU: 0x7F7, offset: 0x81065, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvsTo', symObjAddr: 0x428, symBinAddr: 0xAA44, symSize: 0x10 } + - { offsetInCU: 0x846, offset: 0x810B4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfcTo', symObjAddr: 0x5A4, symBinAddr: 0xAB80, symSize: 0x20 } + - { offsetInCU: 0x878, offset: 0x810E6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyFTo', symObjAddr: 0x708, symBinAddr: 0xACE4, symSize: 0x28 } + - { offsetInCU: 0x8D0, offset: 0x8113E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTo', symObjAddr: 0x744, symBinAddr: 0xAD20, symSize: 0x88 } + - { offsetInCU: 0x934, offset: 0x811A2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTo', symObjAddr: 0x7CC, symBinAddr: 0xADA8, symSize: 0x7C } + - { offsetInCU: 0x9D6, offset: 0x81244, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyFTo', symObjAddr: 0xBF4, symBinAddr: 0xB1D0, symSize: 0x28 } + - { offsetInCU: 0xAC0, offset: 0x8132E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCMa', symObjAddr: 0x584, symBinAddr: 0xAB60, symSize: 0x20 } + - { offsetInCU: 0xB34, offset: 0x813A2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfETo', symObjAddr: 0xC4C, symBinAddr: 0xB228, symSize: 0x58 } + - { offsetInCU: 0x123B, offset: 0x81AA9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfC', symObjAddr: 0x438, symBinAddr: 0xAA54, symSize: 0x20 } + - { offsetInCU: 0x1255, offset: 0x81AC3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfc', symObjAddr: 0x458, symBinAddr: 0xAA74, symSize: 0xEC } + - { offsetInCU: 0x128D, offset: 0x81AFB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyF', symObjAddr: 0x5C4, symBinAddr: 0xABA0, symSize: 0x144 } + - { offsetInCU: 0x1448, offset: 0x81CB6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtF', symObjAddr: 0x730, symBinAddr: 0xAD0C, symSize: 0x14 } + - { offsetInCU: 0x14F9, offset: 0x81D67, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyF', symObjAddr: 0x848, symBinAddr: 0xAE24, symSize: 0x3AC } + - { offsetInCU: 0x1869, offset: 0x820D7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfD', symObjAddr: 0xC1C, symBinAddr: 0xB1F8, symSize: 0x30 } + - { offsetInCU: 0x1954, offset: 0x821C2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTf4ddnndnndn_n', symObjAddr: 0xCA4, symBinAddr: 0xB280, symSize: 0x65C } + - { offsetInCU: 0x2152, offset: 0x829C0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTf4nnnnndn_n', symObjAddr: 0x1344, symBinAddr: 0xB920, symSize: 0x6C8 } + - { offsetInCU: 0x10C, offset: 0x83380, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfcTo', symObjAddr: 0xED4, symBinAddr: 0xCE94, symSize: 0x68 } + - { offsetInCU: 0x19C, offset: 0x83410, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCfETo', symObjAddr: 0xF48, symBinAddr: 0xCF08, symSize: 0x10 } + - { offsetInCU: 0x1CB, offset: 0x8343F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6handleyySo19UIGestureRecognizerCFTo', symObjAddr: 0xF58, symBinAddr: 0xCF18, symSize: 0x4 } + - { offsetInCU: 0x368, offset: 0x835DC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCACycfcTo', symObjAddr: 0x16DC, symBinAddr: 0xD69C, symSize: 0x2C } + - { offsetInCU: 0x5D4, offset: 0x83848, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCfETo', symObjAddr: 0x1744, symBinAddr: 0xD704, symSize: 0x68 } + - { offsetInCU: 0x603, offset: 0x83877, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCMa', symObjAddr: 0x17AC, symBinAddr: 0xD76C, symSize: 0x20 } + - { offsetInCU: 0x617, offset: 0x8388B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCMa', symObjAddr: 0x17CC, symBinAddr: 0xD78C, symSize: 0x20 } + - { offsetInCU: 0x62B, offset: 0x8389F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwCP', symObjAddr: 0x17EC, symBinAddr: 0xD7AC, symSize: 0x30 } + - { offsetInCU: 0x63F, offset: 0x838B3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwxx', symObjAddr: 0x181C, symBinAddr: 0xD7DC, symSize: 0x8 } + - { offsetInCU: 0x653, offset: 0x838C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwcp', symObjAddr: 0x1824, symBinAddr: 0xD7E4, symSize: 0x3C } + - { offsetInCU: 0x667, offset: 0x838DB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwca', symObjAddr: 0x1860, symBinAddr: 0xD820, symSize: 0x50 } + - { offsetInCU: 0x67B, offset: 0x838EF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwta', symObjAddr: 0x18BC, symBinAddr: 0xD870, symSize: 0x40 } + - { offsetInCU: 0x68F, offset: 0x83903, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwet', symObjAddr: 0x18FC, symBinAddr: 0xD8B0, symSize: 0x48 } + - { offsetInCU: 0x6A3, offset: 0x83917, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwst', symObjAddr: 0x1944, symBinAddr: 0xD8F8, symSize: 0x40 } + - { offsetInCU: 0x6B7, offset: 0x8392B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVMa', symObjAddr: 0x1984, symBinAddr: 0xD938, symSize: 0x10 } + - { offsetInCU: 0x6CB, offset: 0x8393F, size: 0x8, addend: 0x0, symName: '_$sypSgWOc', symObjAddr: 0x1994, symBinAddr: 0xD948, symSize: 0x48 } + - { offsetInCU: 0x6DF, offset: 0x83953, size: 0x8, addend: 0x0, symName: '_$sSo7UITouchCSo8NSObjectCSH10ObjectiveCWl', symObjAddr: 0x1AA0, symBinAddr: 0xD990, symSize: 0x58 } + - { offsetInCU: 0x6F3, offset: 0x83967, size: 0x8, addend: 0x0, symName: '_$sSh8IteratorV8_VariantOyx__GSHRzlWOe', symObjAddr: 0x1AF8, symBinAddr: 0xD9E8, symSize: 0x8 } + - { offsetInCU: 0x761, offset: 0x839D5, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOe', symObjAddr: 0x1DE4, symBinAddr: 0xDCD4, symSize: 0x10 } + - { offsetInCU: 0xCBB, offset: 0x83F2F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesBegan_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x0, symBinAddr: 0xBFE8, symSize: 0x540 } + - { offsetInCU: 0xF57, offset: 0x841CB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesMoved_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x54C, symBinAddr: 0xC534, symSize: 0xE0 } + - { offsetInCU: 0xFD6, offset: 0x8424A, size: 0x8, addend: 0x0, symName: '_$sSa6remove2atxSi_tF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x6F0, symBinAddr: 0xC6C4, symSize: 0x9C } + - { offsetInCU: 0x1069, offset: 0x842DD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfc', symObjAddr: 0xDCC, symBinAddr: 0xCD8C, symSize: 0x108 } + - { offsetInCU: 0x11B3, offset: 0x84427, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6onMove33_044DDF836BDB3B89B481C6F58BB6EF6BLLyySo19UIGestureRecognizerC_ShySo7UITouchCGSgtF', symObjAddr: 0x12D0, symBinAddr: 0xD290, symSize: 0x40C } + - { offsetInCU: 0x18C9, offset: 0x84B3D, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNewAByxGyF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x1B00, symBinAddr: 0xD9F0, symSize: 0x14 } + - { offsetInCU: 0x1968, offset: 0x84BDC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6canvasAcA9NSCCanvasC_tcfcTf4gn_n', symObjAddr: 0x1B14, symBinAddr: 0xDA04, symSize: 0x1DC } + - { offsetInCU: 0x27, offset: 0x84DB9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xDCE4, symSize: 0x2C } + - { offsetInCU: 0x4B, offset: 0x84DDD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvpZ', symObjAddr: 0x2D8, symBinAddr: 0x1160068, symSize: 0x0 } + - { offsetInCU: 0x65, offset: 0x84DF7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xDCE4, symSize: 0x2C } + - { offsetInCU: 0x98, offset: 0x84E2A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZTo', symObjAddr: 0x178, symBinAddr: 0xDE5C, symSize: 0x40 } + - { offsetInCU: 0x104, offset: 0x84E96, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfcTo', symObjAddr: 0x228, symBinAddr: 0xDF0C, symSize: 0x3C } + - { offsetInCU: 0x156, offset: 0x84EE8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queue_WZ', symObjAddr: 0x2C, symBinAddr: 0xDD10, symSize: 0x10C } + - { offsetInCU: 0x181, offset: 0x84F13, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCMa', symObjAddr: 0x208, symBinAddr: 0xDEEC, symSize: 0x20 } + - { offsetInCU: 0x195, offset: 0x84F27, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfETo', symObjAddr: 0x294, symBinAddr: 0xDF78, symSize: 0x4 } + - { offsetInCU: 0x1C0, offset: 0x84F52, size: 0x8, addend: 0x0, symName: '_$sSo17OS_dispatch_queueCMa', symObjAddr: 0x298, symBinAddr: 0xDF7C, symSize: 0x3C } + - { offsetInCU: 0x348, offset: 0x850DA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZ', symObjAddr: 0x138, symBinAddr: 0xDE1C, symSize: 0x40 } + - { offsetInCU: 0x388, offset: 0x8511A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfC', symObjAddr: 0x1B8, symBinAddr: 0xDE9C, symSize: 0x20 } + - { offsetInCU: 0x39C, offset: 0x8512E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfc', symObjAddr: 0x1D8, symBinAddr: 0xDEBC, symSize: 0x30 } + - { offsetInCU: 0x3D8, offset: 0x8516A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfD', symObjAddr: 0x264, symBinAddr: 0xDF48, symSize: 0x30 } + - { offsetInCU: 0x2B, offset: 0x851B8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xDFB8, symSize: 0xA4 } + - { offsetInCU: 0x66, offset: 0x851F3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZTo', symObjAddr: 0xA4, symBinAddr: 0xE05C, symSize: 0xA4 } + - { offsetInCU: 0xF9, offset: 0x85286, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZTo', symObjAddr: 0x1D8, symBinAddr: 0xE190, symSize: 0x110 } + - { offsetInCU: 0x1A2, offset: 0x8532F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZTo', symObjAddr: 0x30C, symBinAddr: 0xE2C4, symSize: 0x28 } + - { offsetInCU: 0x222, offset: 0x853AF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTo', symObjAddr: 0x338, symBinAddr: 0xE2F0, symSize: 0xA0 } + - { offsetInCU: 0x29B, offset: 0x85428, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZTo', symObjAddr: 0x4D0, symBinAddr: 0xE488, symSize: 0x15C } + - { offsetInCU: 0x330, offset: 0x854BD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfcTo', symObjAddr: 0x67C, symBinAddr: 0xE634, symSize: 0x3C } + - { offsetInCU: 0x381, offset: 0x8550E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTf4nnnnnndd_n', symObjAddr: 0x6E8, symBinAddr: 0xE6A0, symSize: 0x160 } + - { offsetInCU: 0x4DF, offset: 0x8566C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC7getFile33_F00B23A4165DD6ABFCD23C8811C7DF43LLyS2SKFZTf4nd_g', symObjAddr: 0x848, symBinAddr: 0xE800, symSize: 0x2E4 } + - { offsetInCU: 0x5AE, offset: 0x8573B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCMa', symObjAddr: 0xB2C, symBinAddr: 0xEAE4, symSize: 0x20 } + - { offsetInCU: 0x5C2, offset: 0x8574F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOAEs5ErrorAAWl', symObjAddr: 0xB4C, symBinAddr: 0xEB04, symSize: 0x44 } + - { offsetInCU: 0x5D6, offset: 0x85763, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwCP', symObjAddr: 0xB90, symBinAddr: 0xEB48, symSize: 0x2C } + - { offsetInCU: 0x5EA, offset: 0x85777, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwxx', symObjAddr: 0xBBC, symBinAddr: 0xEB74, symSize: 0x8 } + - { offsetInCU: 0x5FE, offset: 0x8578B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwca', symObjAddr: 0xBC4, symBinAddr: 0xEB7C, symSize: 0x40 } + - { offsetInCU: 0x612, offset: 0x8579F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwta', symObjAddr: 0xC10, symBinAddr: 0xEBBC, symSize: 0x30 } + - { offsetInCU: 0x626, offset: 0x857B3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwet', symObjAddr: 0xC40, symBinAddr: 0xEBEC, symSize: 0x48 } + - { offsetInCU: 0x63A, offset: 0x857C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwst', symObjAddr: 0xC88, symBinAddr: 0xEC34, symSize: 0x3C } + - { offsetInCU: 0x64E, offset: 0x857DB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwug', symObjAddr: 0xCC4, symBinAddr: 0xEC70, symSize: 0x8 } + - { offsetInCU: 0x662, offset: 0x857EF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwup', symObjAddr: 0xCCC, symBinAddr: 0xEC78, symSize: 0x4 } + - { offsetInCU: 0x676, offset: 0x85803, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwui', symObjAddr: 0xCD0, symBinAddr: 0xEC7C, symSize: 0x4 } + - { offsetInCU: 0x68A, offset: 0x85817, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOMa', symObjAddr: 0xCD4, symBinAddr: 0xEC80, symSize: 0x10 } + - { offsetInCU: 0x712, offset: 0x8589F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP7_domainSSvgTW', symObjAddr: 0x3D8, symBinAddr: 0xE390, symSize: 0x4 } + - { offsetInCU: 0x72E, offset: 0x858BB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP5_codeSivgTW', symObjAddr: 0x3DC, symBinAddr: 0xE394, symSize: 0x4 } + - { offsetInCU: 0x74A, offset: 0x858D7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP9_userInfoyXlSgvgTW', symObjAddr: 0x3E0, symBinAddr: 0xE398, symSize: 0x4 } + - { offsetInCU: 0x766, offset: 0x858F3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP19_getEmbeddedNSErroryXlSgyFTW', symObjAddr: 0x3E4, symBinAddr: 0xE39C, symSize: 0x4 } + - { offsetInCU: 0xA14, offset: 0x85BA1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xDFB8, symSize: 0xA4 } + - { offsetInCU: 0xAAA, offset: 0x85C37, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZ', symObjAddr: 0x148, symBinAddr: 0xE100, symSize: 0x90 } + - { offsetInCU: 0xC31, offset: 0x85DBE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZ', symObjAddr: 0x2E8, symBinAddr: 0xE2A0, symSize: 0x24 } + - { offsetInCU: 0xC7B, offset: 0x85E08, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZ', symObjAddr: 0x334, symBinAddr: 0xE2EC, symSize: 0x4 } + - { offsetInCU: 0xC9D, offset: 0x85E2A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZ', symObjAddr: 0x3E8, symBinAddr: 0xE3A0, symSize: 0xE8 } + - { offsetInCU: 0xD4D, offset: 0x85EDA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfC', symObjAddr: 0x62C, symBinAddr: 0xE5E4, symSize: 0x20 } + - { offsetInCU: 0xD61, offset: 0x85EEE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfc', symObjAddr: 0x64C, symBinAddr: 0xE604, symSize: 0x30 } + - { offsetInCU: 0xD97, offset: 0x85F24, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCfD', symObjAddr: 0x6B8, symBinAddr: 0xE670, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0x8603D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0xEC94, symSize: 0x4 } + - { offsetInCU: 0x71, offset: 0x86087, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x4, symBinAddr: 0xEC98, symSize: 0x70 } + - { offsetInCU: 0xF6, offset: 0x8610C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x78, symBinAddr: 0xED0C, symSize: 0x50 } + - { offsetInCU: 0x191, offset: 0x861A7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0xCC, symBinAddr: 0xED60, symSize: 0x68 } + - { offsetInCU: 0x254, offset: 0x8626A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x138, symBinAddr: 0xEDCC, symSize: 0x98 } + - { offsetInCU: 0x323, offset: 0x86339, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfcTo', symObjAddr: 0x220, symBinAddr: 0xEEB4, symSize: 0x3C } + - { offsetInCU: 0x375, offset: 0x8638B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCMa', symObjAddr: 0x28C, symBinAddr: 0xEF20, symSize: 0x20 } + - { offsetInCU: 0x4E5, offset: 0x864FB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0xEC94, symSize: 0x4 } + - { offsetInCU: 0x51D, offset: 0x86533, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0xEC94, symSize: 0x4 } + - { offsetInCU: 0x588, offset: 0x8659E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0xED08, symSize: 0x4 } + - { offsetInCU: 0x5C8, offset: 0x865DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0xED08, symSize: 0x4 } + - { offsetInCU: 0x62A, offset: 0x86640, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xC8, symBinAddr: 0xED5C, symSize: 0x4 } + - { offsetInCU: 0x67C, offset: 0x86692, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xC8, symBinAddr: 0xED5C, symSize: 0x4 } + - { offsetInCU: 0x6F1, offset: 0x86707, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x134, symBinAddr: 0xEDC8, symSize: 0x4 } + - { offsetInCU: 0x767, offset: 0x8677D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x134, symBinAddr: 0xEDC8, symSize: 0x4 } + - { offsetInCU: 0x805, offset: 0x8681B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfC', symObjAddr: 0x1D0, symBinAddr: 0xEE64, symSize: 0x20 } + - { offsetInCU: 0x819, offset: 0x8682F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfc', symObjAddr: 0x1F0, symBinAddr: 0xEE84, symSize: 0x30 } + - { offsetInCU: 0x84F, offset: 0x86865, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCfD', symObjAddr: 0x25C, symBinAddr: 0xEEF0, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0x868AF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0xEF40, symSize: 0x14 } + - { offsetInCU: 0xA9, offset: 0x86931, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x14, symBinAddr: 0xEF54, symSize: 0x38 } + - { offsetInCU: 0x1A2, offset: 0x86A2A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x68, symBinAddr: 0xEFA8, symSize: 0x40 } + - { offsetInCU: 0x284, offset: 0x86B0C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfcTo', symObjAddr: 0x118, symBinAddr: 0xF058, symSize: 0x3C } + - { offsetInCU: 0x2D6, offset: 0x86B5E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCMa', symObjAddr: 0xF8, symBinAddr: 0xF038, symSize: 0x20 } + - { offsetInCU: 0x480, offset: 0x86D08, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0xEF40, symSize: 0x14 } + - { offsetInCU: 0x5C4, offset: 0x86E4C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x4C, symBinAddr: 0xEF8C, symSize: 0x1C } + - { offsetInCU: 0x6FA, offset: 0x86F82, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfC', symObjAddr: 0xA8, symBinAddr: 0xEFE8, symSize: 0x20 } + - { offsetInCU: 0x70E, offset: 0x86F96, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfc', symObjAddr: 0xC8, symBinAddr: 0xF008, symSize: 0x30 } + - { offsetInCU: 0x744, offset: 0x86FCC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCfD', symObjAddr: 0x154, symBinAddr: 0xF094, symSize: 0x30 } + - { offsetInCU: 0x61, offset: 0x87050, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0xF0C8, symSize: 0x10 } + - { offsetInCU: 0x81, offset: 0x87070, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0xF0C8, symSize: 0x10 } + - { offsetInCU: 0xB7, offset: 0x870A6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0xF0D8, symSize: 0x10 } + - { offsetInCU: 0xD7, offset: 0x870C6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0xF0D8, symSize: 0x10 } + - { offsetInCU: 0x110, offset: 0x870FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvgTo', symObjAddr: 0x24, symBinAddr: 0xF0E8, symSize: 0x48 } + - { offsetInCU: 0x168, offset: 0x87157, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvsTo', symObjAddr: 0xB4, symBinAddr: 0xF178, symSize: 0x50 } + - { offsetInCU: 0x1C3, offset: 0x871B2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0xF1C8, symSize: 0x10 } + - { offsetInCU: 0x1E3, offset: 0x871D2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0xF1C8, symSize: 0x10 } + - { offsetInCU: 0x219, offset: 0x87208, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0xF1D8, symSize: 0x10 } + - { offsetInCU: 0x239, offset: 0x87228, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0xF1D8, symSize: 0x10 } + - { offsetInCU: 0x272, offset: 0x87261, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfcTo', symObjAddr: 0x1B0, symBinAddr: 0xF274, symSize: 0x78 } + - { offsetInCU: 0x2C8, offset: 0x872B7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x2D4, symBinAddr: 0xF398, symSize: 0xB0 } + - { offsetInCU: 0x32A, offset: 0x87319, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x43C, symBinAddr: 0xF500, symSize: 0x28 } + - { offsetInCU: 0x35C, offset: 0x8734B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC12bindDrawableyyFTo', symObjAddr: 0x4E0, symBinAddr: 0xF528, symSize: 0xA0 } + - { offsetInCU: 0x3DD, offset: 0x873CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC14deleteDrawableyyFTo', symObjAddr: 0x5BC, symBinAddr: 0xF5C8, symSize: 0x60 } + - { offsetInCU: 0x44D, offset: 0x8743C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTo', symObjAddr: 0x620, symBinAddr: 0xF62C, symSize: 0x4C } + - { offsetInCU: 0x4BF, offset: 0x874AE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfcTo', symObjAddr: 0x70C, symBinAddr: 0xF718, symSize: 0x34 } + - { offsetInCU: 0x533, offset: 0x87522, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCMa', symObjAddr: 0x190, symBinAddr: 0xF254, symSize: 0x20 } + - { offsetInCU: 0x55D, offset: 0x8754C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCfETo', symObjAddr: 0x74C, symBinAddr: 0xF758, symSize: 0x10 } + - { offsetInCU: 0x65B, offset: 0x8764A, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VFTo', symObjAddr: 0xA08, symBinAddr: 0xFA14, symSize: 0x74 } + - { offsetInCU: 0x699, offset: 0x87688, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA7C, symBinAddr: 0xFA88, symSize: 0x10 } + - { offsetInCU: 0x6B9, offset: 0x876A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA7C, symBinAddr: 0xFA88, symSize: 0x10 } + - { offsetInCU: 0x6EF, offset: 0x876DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA8C, symBinAddr: 0xFA98, symSize: 0x10 } + - { offsetInCU: 0x70F, offset: 0x876FE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA8C, symBinAddr: 0xFA98, symSize: 0x10 } + - { offsetInCU: 0x748, offset: 0x87737, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvgTo', symObjAddr: 0xA9C, symBinAddr: 0xFAA8, symSize: 0x20 } + - { offsetInCU: 0x7A0, offset: 0x8778F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvsTo', symObjAddr: 0xABC, symBinAddr: 0xFAC8, symSize: 0x14 } + - { offsetInCU: 0x7FB, offset: 0x877EA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvgTo', symObjAddr: 0xAD0, symBinAddr: 0xFADC, symSize: 0x44 } + - { offsetInCU: 0x853, offset: 0x87842, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvsTo', symObjAddr: 0xB58, symBinAddr: 0xFB64, symSize: 0x48 } + - { offsetInCU: 0x8E8, offset: 0x878D7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfcTo', symObjAddr: 0xCBC, symBinAddr: 0xFCC8, symSize: 0x78 } + - { offsetInCU: 0x93E, offset: 0x8792D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0xE34, symBinAddr: 0xFE40, symSize: 0xB0 } + - { offsetInCU: 0x9A0, offset: 0x8798F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0xF90, symBinAddr: 0xFF9C, symSize: 0x28 } + - { offsetInCU: 0x9D2, offset: 0x879C1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC11deviceScaleSfyFTo', symObjAddr: 0xFB8, symBinAddr: 0xFFC4, symSize: 0xB8 } + - { offsetInCU: 0xA53, offset: 0x87A42, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTo', symObjAddr: 0x1074, symBinAddr: 0x1007C, symSize: 0x28 } + - { offsetInCU: 0xAB1, offset: 0x87AA0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCfETo', symObjAddr: 0x10D8, symBinAddr: 0x100E0, symSize: 0x10 } + - { offsetInCU: 0xC88, offset: 0x87C77, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCs5UInt8V_Tgmq5', symObjAddr: 0x13D0, symBinAddr: 0x102DC, symSize: 0x64 } + - { offsetInCU: 0xCD9, offset: 0x87CC8, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOy', symObjAddr: 0x15D8, symBinAddr: 0x104E4, symSize: 0x44 } + - { offsetInCU: 0xCED, offset: 0x87CDC, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOe', symObjAddr: 0x161C, symBinAddr: 0x10528, symSize: 0x44 } + - { offsetInCU: 0xD01, offset: 0x87CF0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCMa', symObjAddr: 0x1660, symBinAddr: 0x1056C, symSize: 0x20 } + - { offsetInCU: 0xDDB, offset: 0x87DCA, size: 0x8, addend: 0x0, symName: '_$sSaySayxGqd__c7ElementQyd__RszSTRd__lufCs5UInt8V_10Foundation4DataVTgm5Tf4g_n', symObjAddr: 0x14B8, symBinAddr: 0x103C4, symSize: 0x110 } + - { offsetInCU: 0x1086, offset: 0x88075, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvg', symObjAddr: 0x6C, symBinAddr: 0xF130, symSize: 0x48 } + - { offsetInCU: 0x1103, offset: 0x880F2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfc', symObjAddr: 0x124, symBinAddr: 0xF1E8, symSize: 0x6C } + - { offsetInCU: 0x114A, offset: 0x88139, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0x228, symBinAddr: 0xF2EC, symSize: 0xAC } + - { offsetInCU: 0x11AE, offset: 0x8819D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x384, symBinAddr: 0xF448, symSize: 0xB8 } + - { offsetInCU: 0x1239, offset: 0x88228, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtF', symObjAddr: 0x61C, symBinAddr: 0xF628, symSize: 0x4 } + - { offsetInCU: 0x125A, offset: 0x88249, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfC', symObjAddr: 0x66C, symBinAddr: 0xF678, symSize: 0x74 } + - { offsetInCU: 0x126E, offset: 0x8825D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfc', symObjAddr: 0x6E0, symBinAddr: 0xF6EC, symSize: 0x2C } + - { offsetInCU: 0x1387, offset: 0x88376, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VF', symObjAddr: 0x75C, symBinAddr: 0xF768, symSize: 0x2AC } + - { offsetInCU: 0x1731, offset: 0x88720, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvg', symObjAddr: 0xB14, symBinAddr: 0xFB20, symSize: 0x44 } + - { offsetInCU: 0x1770, offset: 0x8875F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvs', symObjAddr: 0xBA0, symBinAddr: 0xFBAC, symSize: 0x48 } + - { offsetInCU: 0x1795, offset: 0x88784, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM', symObjAddr: 0xBE8, symBinAddr: 0xFBF4, symSize: 0x44 } + - { offsetInCU: 0x17BA, offset: 0x887A9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM.resume.0', symObjAddr: 0xC2C, symBinAddr: 0xFC38, symSize: 0x4 } + - { offsetInCU: 0x17E1, offset: 0x887D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfC', symObjAddr: 0xC30, symBinAddr: 0xFC3C, symSize: 0x20 } + - { offsetInCU: 0x17F5, offset: 0x887E4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfc', symObjAddr: 0xC50, symBinAddr: 0xFC5C, symSize: 0x6C } + - { offsetInCU: 0x183C, offset: 0x8882B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0xD88, symBinAddr: 0xFD94, symSize: 0xAC } + - { offsetInCU: 0x189B, offset: 0x8888A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0xEE4, symBinAddr: 0xFEF0, symSize: 0xAC } + - { offsetInCU: 0x1940, offset: 0x8892F, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x10E8, symBinAddr: 0x100F0, symSize: 0x104 } + - { offsetInCU: 0x1A6F, offset: 0x88A5E, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFs5UInt8V_Tg5', symObjAddr: 0x12E8, symBinAddr: 0x101F4, symSize: 0xE8 } + - { offsetInCU: 0x1BB3, offset: 0x88BA2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTf4ddn_n', symObjAddr: 0x1434, symBinAddr: 0x10340, symSize: 0x84 } + - { offsetInCU: 0x1CAC, offset: 0x88C9B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTf4dn_n', symObjAddr: 0x1680, symBinAddr: 0x1058C, symSize: 0x360 } + - { offsetInCU: 0x2B, offset: 0x890B5, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x10AD8, symSize: 0x2C } + - { offsetInCU: 0x4F, offset: 0x890D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LLSo012OS_dispatch_E0CvpZ', symObjAddr: 0x958, symBinAddr: 0x11601B0, symSize: 0x0 } + - { offsetInCU: 0x5D, offset: 0x890E7, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x10AD8, symSize: 0x2C } + - { offsetInCU: 0x75, offset: 0x890FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LL_WZ', symObjAddr: 0x2C, symBinAddr: 0x10B04, symSize: 0x10C } + - { offsetInCU: 0xBC, offset: 0x89146, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0x13C, symBinAddr: 0x10C14, symSize: 0x44 } + - { offsetInCU: 0x132, offset: 0x891BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTo', symObjAddr: 0x3AC, symBinAddr: 0x10E84, symSize: 0x80 } + - { offsetInCU: 0x191, offset: 0x8921B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfcTo', symObjAddr: 0x47C, symBinAddr: 0x10F54, symSize: 0x3C } + - { offsetInCU: 0x1E2, offset: 0x8926C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTf4nnnd_n', symObjAddr: 0x4EC, symBinAddr: 0x10FC4, symSize: 0x1DC } + - { offsetInCU: 0x269, offset: 0x892F3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfETo', symObjAddr: 0x4E8, symBinAddr: 0x10FC0, symSize: 0x4 } + - { offsetInCU: 0x2A5, offset: 0x8932F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCMa', symObjAddr: 0x6C8, symBinAddr: 0x111A0, symSize: 0x20 } + - { offsetInCU: 0x2C4, offset: 0x8934E, size: 0x8, addend: 0x0, symName: '_$s10ObjectiveC8ObjCBoolVIeyBy_SbIegy_TRTA', symObjAddr: 0x70C, symBinAddr: 0x111E4, symSize: 0x14 } + - { offsetInCU: 0x2ED, offset: 0x89377, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_TA', symObjAddr: 0x74C, symBinAddr: 0x11224, symSize: 0xC } + - { offsetInCU: 0x301, offset: 0x8938B, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x758, symBinAddr: 0x11230, symSize: 0x10 } + - { offsetInCU: 0x315, offset: 0x8939F, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x768, symBinAddr: 0x11240, symSize: 0x8 } + - { offsetInCU: 0x329, offset: 0x893B3, size: 0x8, addend: 0x0, symName: '_$s8Dispatch0A13WorkItemFlagsVACs10SetAlgebraAAWl', symObjAddr: 0x770, symBinAddr: 0x11248, symSize: 0x48 } + - { offsetInCU: 0x33D, offset: 0x893C7, size: 0x8, addend: 0x0, symName: '_$sSay8Dispatch0A13WorkItemFlagsVGSayxGSTsWl', symObjAddr: 0x7F8, symBinAddr: 0x11290, symSize: 0x4C } + - { offsetInCU: 0x351, offset: 0x893DB, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledNameAbstract, symObjAddr: 0x844, symBinAddr: 0x112DC, symSize: 0x44 } + - { offsetInCU: 0x365, offset: 0x893EF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0x8C4, symBinAddr: 0x11320, symSize: 0x24 } + - { offsetInCU: 0x399, offset: 0x89423, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU_TA', symObjAddr: 0x90C, symBinAddr: 0x11368, symSize: 0x24 } + - { offsetInCU: 0x52E, offset: 0x895B8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x10C10, symSize: 0x4 } + - { offsetInCU: 0x55C, offset: 0x895E6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x10C10, symSize: 0x4 } + - { offsetInCU: 0x5BB, offset: 0x89645, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZ', symObjAddr: 0x180, symBinAddr: 0x10C58, symSize: 0x4 } + - { offsetInCU: 0x5CF, offset: 0x89659, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_', symObjAddr: 0x184, symBinAddr: 0x10C5C, symSize: 0x228 } + - { offsetInCU: 0x6A8, offset: 0x89732, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfC', symObjAddr: 0x42C, symBinAddr: 0x10F04, symSize: 0x20 } + - { offsetInCU: 0x6BC, offset: 0x89746, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfc', symObjAddr: 0x44C, symBinAddr: 0x10F24, symSize: 0x30 } + - { offsetInCU: 0x6F2, offset: 0x8977C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfD', symObjAddr: 0x4B8, symBinAddr: 0x10F90, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0x89822, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x113A0, symSize: 0x20 } + - { offsetInCU: 0x77, offset: 0x89872, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfcTo', symObjAddr: 0x70, symBinAddr: 0x11410, symSize: 0x3C } + - { offsetInCU: 0xC9, offset: 0x898C4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCMa', symObjAddr: 0x50, symBinAddr: 0x113F0, symSize: 0x20 } + - { offsetInCU: 0x214, offset: 0x89A0F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x113A0, symSize: 0x20 } + - { offsetInCU: 0x228, offset: 0x89A23, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfc', symObjAddr: 0x20, symBinAddr: 0x113C0, symSize: 0x30 } + - { offsetInCU: 0x264, offset: 0x89A5F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCfD', symObjAddr: 0xAC, symBinAddr: 0x1144C, symSize: 0x30 } + - { offsetInCU: 0x26, offset: 0x89AA8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x335050, symSize: 0x265C } + - { offsetInCU: 0x40, offset: 0x89AC2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9E20, symBinAddr: 0xA292E0, symSize: 0x0 } + - { offsetInCU: 0x92, offset: 0x89B14, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFE20, symBinAddr: 0xA2F2E0, symSize: 0x0 } + - { offsetInCU: 0xF6, offset: 0x89B78, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFE48, symBinAddr: 0xA2F308, symSize: 0x0 } + - { offsetInCU: 0x10C, offset: 0x89B8E, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x10250, symBinAddr: 0xA2F710, symSize: 0x0 } + - { offsetInCU: 0x123, offset: 0x89BA5, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFE90, symBinAddr: 0xA2F350, symSize: 0x0 } + - { offsetInCU: 0x9C2, offset: 0x8A444, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x335050, symSize: 0x265C } + - { offsetInCU: 0x45D1, offset: 0x8E053, size: 0x8, addend: 0x0, symName: _fe_frombytes, symObjAddr: 0x265C, symBinAddr: 0x3376AC, symSize: 0x134 } + - { offsetInCU: 0x46F7, offset: 0x8E179, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x9954, symBinAddr: 0x33E9A4, symSize: 0x21C } + - { offsetInCU: 0x4926, offset: 0x8E3A8, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4FE0, symBinAddr: 0x33A030, symSize: 0x1B8 } + - { offsetInCU: 0x5313, offset: 0x8ED95, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x2790, symBinAddr: 0x3377E0, symSize: 0x5BC } + - { offsetInCU: 0x5F76, offset: 0x8F9F8, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2D4C, symBinAddr: 0x337D9C, symSize: 0x7F8 } + - { offsetInCU: 0x642E, offset: 0x8FEB0, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3544, symBinAddr: 0x338594, symSize: 0x208 } + - { offsetInCU: 0x69FC, offset: 0x9047E, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x374C, symBinAddr: 0x33879C, symSize: 0x7B4 } + - { offsetInCU: 0x77D5, offset: 0x91257, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3F00, symBinAddr: 0x338F50, symSize: 0x634 } + - { offsetInCU: 0x8196, offset: 0x91C18, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x4534, symBinAddr: 0x339584, symSize: 0xAAC } + - { offsetInCU: 0x9567, offset: 0x92FE9, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x529C, symBinAddr: 0x33A2EC, symSize: 0x23F8 } + - { offsetInCU: 0xCAB8, offset: 0x9653A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x5198, symBinAddr: 0x33A1E8, symSize: 0x104 } + - { offsetInCU: 0xCD20, offset: 0x967A2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x7694, symBinAddr: 0x33C6E4, symSize: 0x30 } + - { offsetInCU: 0xCE11, offset: 0x96893, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x76C4, symBinAddr: 0x33C714, symSize: 0x58 } + - { offsetInCU: 0xCE86, offset: 0x96908, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x771C, symBinAddr: 0x33C76C, symSize: 0x4 } + - { offsetInCU: 0xCECE, offset: 0x96950, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x771C, symBinAddr: 0x33C76C, symSize: 0x4 } + - { offsetInCU: 0xCEFD, offset: 0x9697F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x771C, symBinAddr: 0x33C76C, symSize: 0x4 } + - { offsetInCU: 0xCF21, offset: 0x969A3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x7720, symBinAddr: 0x33C770, symSize: 0x8C } + - { offsetInCU: 0xD056, offset: 0x96AD8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x77AC, symBinAddr: 0x33C7FC, symSize: 0x4 } + - { offsetInCU: 0xD08F, offset: 0x96B11, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x77AC, symBinAddr: 0x33C7FC, symSize: 0x4 } + - { offsetInCU: 0xD328, offset: 0x96DAA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x77B0, symBinAddr: 0x33C800, symSize: 0x15D8 } + - { offsetInCU: 0x10671, offset: 0x9A0F3, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x9B70, symBinAddr: 0x33EBC0, symSize: 0x218 } + - { offsetInCU: 0x10CA3, offset: 0x9A725, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8D88, symBinAddr: 0x33DDD8, symSize: 0x20 } + - { offsetInCU: 0x11140, offset: 0x9ABC2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8DA8, symBinAddr: 0x33DDF8, symSize: 0xBAC } + - { offsetInCU: 0x26, offset: 0x9B98D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x33EDD8, symSize: 0x1F4 } + - { offsetInCU: 0x1D2, offset: 0x9BB39, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x33EDD8, symSize: 0x1F4 } + - { offsetInCU: 0x26, offset: 0x9BDD4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x33EFCC, symSize: 0x3C } + - { offsetInCU: 0x34, offset: 0x9BDE2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x33EFCC, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0x9BEF2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x33F008, symSize: 0x98 } + - { offsetInCU: 0x34, offset: 0x9BF00, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x33F008, symSize: 0x98 } + - { offsetInCU: 0x86, offset: 0x9C063, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1100, symBinAddr: 0xA2F7C0, symSize: 0x0 } + - { offsetInCU: 0xB8, offset: 0x9C095, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1090, symBinAddr: 0xA2F750, symSize: 0x0 } + - { offsetInCU: 0xDA, offset: 0x9C0B7, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x10C0, symBinAddr: 0xA2F780, symSize: 0x0 } + - { offsetInCU: 0xF0, offset: 0x9C0CD, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x10F0, symBinAddr: 0xA2F7B0, symSize: 0x0 } + - { offsetInCU: 0x3B7, offset: 0x9C394, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x33F0A0, symSize: 0x18 } + - { offsetInCU: 0x3FB, offset: 0x9C3D8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x33F0A0, symSize: 0x18 } + - { offsetInCU: 0x594, offset: 0x9C571, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0x33F0B8, symSize: 0x18 } + - { offsetInCU: 0x63F, offset: 0x9C61C, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0x33F0D0, symSize: 0x320 } + - { offsetInCU: 0x1173, offset: 0x9D150, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x5B0, symBinAddr: 0x33F3F0, symSize: 0xAC } + - { offsetInCU: 0x1469, offset: 0x9D446, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x65C, symBinAddr: 0x33F49C, symSize: 0x500 } + - { offsetInCU: 0x2666, offset: 0x9E643, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB5C, symBinAddr: 0x33F99C, symSize: 0x2C8 } + - { offsetInCU: 0x2CB5, offset: 0x9EC92, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xE24, symBinAddr: 0x33FC64, symSize: 0xF4 } + - { offsetInCU: 0x2EC7, offset: 0x9EEA4, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xF18, symBinAddr: 0x33FD58, symSize: 0x168 } + - { offsetInCU: 0x26, offset: 0x9F1CF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x33FEC0, symSize: 0x38 } + - { offsetInCU: 0xFA, offset: 0x9F2A3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x33FEC0, symSize: 0x38 } + - { offsetInCU: 0x12C, offset: 0x9F2D5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x33FEC0, symSize: 0x38 } + - { offsetInCU: 0x199, offset: 0x9F342, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x33FEF8, symSize: 0x3C } + - { offsetInCU: 0x1F3, offset: 0x9F39C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x33FEF8, symSize: 0x3C } + - { offsetInCU: 0x31B, offset: 0x9F4C4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0x33FF34, symSize: 0x5C } + - { offsetInCU: 0x517, offset: 0x9F6C0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0x33FF90, symSize: 0x1C } + - { offsetInCU: 0x636, offset: 0x9F7DF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0x33FFAC, symSize: 0x54 } + - { offsetInCU: 0x6D9, offset: 0x9F882, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0x340000, symSize: 0x4C } + - { offsetInCU: 0x8A7, offset: 0x9FA50, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x34004C, symSize: 0xA8 } + - { offsetInCU: 0x90B, offset: 0x9FAB4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x34004C, symSize: 0xA8 } + - { offsetInCU: 0xBAA, offset: 0x9FD53, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0x3400F4, symSize: 0x110 } + - { offsetInCU: 0xC4C, offset: 0x9FDF5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0x3400F4, symSize: 0x110 } + - { offsetInCU: 0xEDE, offset: 0xA0087, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x344, symBinAddr: 0x340204, symSize: 0xB0 } + - { offsetInCU: 0xF5E, offset: 0xA0107, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x344, symBinAddr: 0x340204, symSize: 0xB0 } + - { offsetInCU: 0x10E1, offset: 0xA028A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x3F4, symBinAddr: 0x3402B4, symSize: 0x198 } + - { offsetInCU: 0x13AB, offset: 0xA0554, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x58C, symBinAddr: 0x34044C, symSize: 0x290 } + - { offsetInCU: 0x1500, offset: 0xA06A9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x81C, symBinAddr: 0x3406DC, symSize: 0x18 } + - { offsetInCU: 0x1567, offset: 0xA0710, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x834, symBinAddr: 0x3406F4, symSize: 0xC } + - { offsetInCU: 0x15A0, offset: 0xA0749, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x840, symBinAddr: 0x340700, symSize: 0x8 } + - { offsetInCU: 0x1624, offset: 0xA07CD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x848, symBinAddr: 0x340708, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0xA0980, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x340744, symSize: 0x190 } + - { offsetInCU: 0x34, offset: 0xA098E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x340744, symSize: 0x190 } + - { offsetInCU: 0x34, offset: 0xA0A94, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x398, symBinAddr: 0x1167288, symSize: 0x0 } + - { offsetInCU: 0x26, offset: 0xA0AD6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x3408D4, symSize: 0x388 } + - { offsetInCU: 0x76, offset: 0xA0B26, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0xA30000, symSize: 0x0 } + - { offsetInCU: 0xFA, offset: 0xA0BAA, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0xA55000, symSize: 0x0 } + - { offsetInCU: 0x35B, offset: 0xA0E0B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x3408D4, symSize: 0x388 } + - { offsetInCU: 0xC66, offset: 0xA1716, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x388, symBinAddr: 0x340C5C, symSize: 0x204 } + - { offsetInCU: 0x1163, offset: 0xA1C13, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x58C, symBinAddr: 0x340E60, symSize: 0x1BC } + - { offsetInCU: 0x10, offset: 0xA1FE8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x341020, symSize: 0x1A0 } + - { offsetInCU: 0x50, offset: 0xA2028, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x341020, symSize: 0x1A0 } + - { offsetInCU: 0x5E, offset: 0xA2036, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0x3411C0, symSize: 0x60 } + - { offsetInCU: 0x81, offset: 0xA2059, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0x341220, symSize: 0x288 } + - { offsetInCU: 0x10, offset: 0xA204A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x3414B0, symSize: 0x130 } + - { offsetInCU: 0x48, offset: 0xA2082, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x3414B0, symSize: 0x130 } + - { offsetInCU: 0x5F, offset: 0xA2099, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0x3415E0, symSize: 0x70 } + - { offsetInCU: 0x75, offset: 0xA20AF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0x341650, symSize: 0x160 } + - { offsetInCU: 0x7A, offset: 0xA20B4, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0x3417B0, symSize: 0x378 } + - { offsetInCU: 0x10, offset: 0xA20C2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x341B40, symSize: 0x3A0 } + - { offsetInCU: 0x48, offset: 0xA20FA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x341B40, symSize: 0x3A0 } + - { offsetInCU: 0x4C, offset: 0xA20FE, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0x341EE0, symSize: 0x6C0 } + - { offsetInCU: 0x66, offset: 0xA2118, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0x3425A0, symSize: 0x1138 } + - { offsetInCU: 0x50, offset: 0xA2164, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0x343840, symSize: 0x1180 } + - { offsetInCU: 0x66, offset: 0xA217A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0x3449C0, symSize: 0x1410 } + - { offsetInCU: 0x10, offset: 0xA2170, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x345DE0, symSize: 0x240 } + - { offsetInCU: 0x45, offset: 0xA21A5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x345DE0, symSize: 0x240 } + - { offsetInCU: 0x4D, offset: 0xA21AD, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0x346020, symSize: 0x9E0 } + - { offsetInCU: 0x63, offset: 0xA21C3, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0x346A00, symSize: 0x650 } + - { offsetInCU: 0x10, offset: 0xA21D2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x347060, symSize: 0x40 } + - { offsetInCU: 0x47, offset: 0xA2209, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x347060, symSize: 0x40 } + - { offsetInCU: 0x5D, offset: 0xA221F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0x3470A0, symSize: 0x40 } + - { offsetInCU: 0x76, offset: 0xA2238, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0x3470E0, symSize: 0x40 } + - { offsetInCU: 0x81, offset: 0xA2243, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0x347120, symSize: 0x1E0 } + - { offsetInCU: 0x97, offset: 0xA2259, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0x347300, symSize: 0x170 } + - { offsetInCU: 0xAB, offset: 0xA226D, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0x347470, symSize: 0x50 } + - { offsetInCU: 0xC3, offset: 0xA2285, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0x3474C0, symSize: 0x50 } + - { offsetInCU: 0xD9, offset: 0xA229B, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0x347510, symSize: 0x50 } + - { offsetInCU: 0xEF, offset: 0xA22B1, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0x347560, symSize: 0x60 } + - { offsetInCU: 0x111, offset: 0xA22D3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0x3475C0, symSize: 0x1E0 } + - { offsetInCU: 0x124, offset: 0xA22E6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0x3477A0, symSize: 0x360 } + - { offsetInCU: 0x141, offset: 0xA2303, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0x347B00, symSize: 0x2D0 } + - { offsetInCU: 0x156, offset: 0xA2318, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0x347DD0, symSize: 0x2B0 } + - { offsetInCU: 0x170, offset: 0xA2332, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0x348080, symSize: 0x250 } + - { offsetInCU: 0x184, offset: 0xA2346, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0x3482D0, symSize: 0x60 } + - { offsetInCU: 0x19A, offset: 0xA235C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0x348330, symSize: 0x44 } + - { offsetInCU: 0x10, offset: 0xA2352, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x348380, symSize: 0xB90 } + - { offsetInCU: 0x4C, offset: 0xA238E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x348380, symSize: 0xB90 } + - { offsetInCU: 0x62, offset: 0xA23A4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0x348F10, symSize: 0xB98 } + - { offsetInCU: 0x10, offset: 0xA239E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x349AC0, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xA23DF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x349AC0, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xA23DF, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x34A900, symSize: 0x7E0 } + - { offsetInCU: 0x10, offset: 0xA23EA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x34B100, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xA242B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x34B100, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xA242B, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x34BF40, symSize: 0x1F0 } ... diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasNative.yml b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasNative.yml index 161bd4ee7..bc48adcea 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasNative.yml +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasNative.yml @@ -2,642 +2,642 @@ triple: 'x86_64-apple-darwin' binary-path: '/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/dist/Release-iphonesimulator/CanvasNative.framework/CanvasNative' relocations: - - { offsetInCU: 0x34, offset: 0x796A4, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionString, symObjAddr: 0x0, symBinAddr: 0xAB0000, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x796D9, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionNumber, symObjAddr: 0x38, symBinAddr: 0xAB0038, symSize: 0x0 } - - { offsetInCU: 0x3F, offset: 0x7972E, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x40, symBinAddr: 0x2340, symSize: 0x10 } - - { offsetInCU: 0x53, offset: 0x79742, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x50, symBinAddr: 0x2350, symSize: 0x10 } - - { offsetInCU: 0x67, offset: 0x79756, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x60, symBinAddr: 0x2360, symSize: 0x20 } - - { offsetInCU: 0x7B, offset: 0x7976A, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x80, symBinAddr: 0x2380, symSize: 0x30 } - - { offsetInCU: 0x8F, offset: 0x7977E, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwCP', symObjAddr: 0xD0, symBinAddr: 0x23D0, symSize: 0x30 } - - { offsetInCU: 0xA3, offset: 0x79792, size: 0x8, addend: 0x0, symName: ___swift_memcpy32_8, symObjAddr: 0x100, symBinAddr: 0x2400, symSize: 0x20 } - - { offsetInCU: 0xB7, offset: 0x797A6, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwet', symObjAddr: 0x120, symBinAddr: 0x2420, symSize: 0x20 } - - { offsetInCU: 0xCB, offset: 0x797BA, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwst', symObjAddr: 0x140, symBinAddr: 0x2440, symSize: 0x30 } - - { offsetInCU: 0x4F, offset: 0x799A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC11_WriteQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x30B0, symBinAddr: 0x1378C90, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x799BD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10_ReadQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x30B8, symBinAddr: 0x1378C98, symSize: 0x0 } - - { offsetInCU: 0x9D, offset: 0x799F1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTo', symObjAddr: 0x10, symBinAddr: 0x2510, symSize: 0x40 } - - { offsetInCU: 0xF3, offset: 0x79A47, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x60, symBinAddr: 0x2560, symSize: 0x60 } - - { offsetInCU: 0x144, offset: 0x79A98, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0xD0, symBinAddr: 0x25D0, symSize: 0x40 } - - { offsetInCU: 0x19F, offset: 0x79AF3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x120, symBinAddr: 0x2620, symSize: 0x50 } - - { offsetInCU: 0x204, offset: 0x79B58, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0x180, symBinAddr: 0x2680, symSize: 0x60 } - - { offsetInCU: 0x27D, offset: 0x79BD1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x1F0, symBinAddr: 0x26F0, symSize: 0x90 } - - { offsetInCU: 0x2DA, offset: 0x79C2E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x290, symBinAddr: 0x2790, symSize: 0x20 } - - { offsetInCU: 0x35C, offset: 0x79CB0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x2C0, symBinAddr: 0x27C0, symSize: 0x20 } - - { offsetInCU: 0x40B, offset: 0x79D5F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZTo', symObjAddr: 0x350, symBinAddr: 0x2850, symSize: 0x80 } - - { offsetInCU: 0x4D0, offset: 0x79E24, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZTo', symObjAddr: 0x440, symBinAddr: 0x2940, symSize: 0x80 } - - { offsetInCU: 0x59F, offset: 0x79EF3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZTo', symObjAddr: 0x530, symBinAddr: 0x2A30, symSize: 0x80 } - - { offsetInCU: 0x669, offset: 0x79FBD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZTo', symObjAddr: 0x630, symBinAddr: 0x2B30, symSize: 0x90 } - - { offsetInCU: 0x701, offset: 0x7A055, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZTo', symObjAddr: 0x6D0, symBinAddr: 0x2BD0, symSize: 0x10 } - - { offsetInCU: 0x768, offset: 0x7A0BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZTo', symObjAddr: 0x6F0, symBinAddr: 0x2BF0, symSize: 0x10 } - - { offsetInCU: 0x7BF, offset: 0x7A113, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZTo', symObjAddr: 0x710, symBinAddr: 0x2C10, symSize: 0x10 } - - { offsetInCU: 0x816, offset: 0x7A16A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZTo', symObjAddr: 0x730, symBinAddr: 0x2C30, symSize: 0x10 } - - { offsetInCU: 0x86D, offset: 0x7A1C1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZTo', symObjAddr: 0x750, symBinAddr: 0x2C50, symSize: 0x10 } - - { offsetInCU: 0x8C4, offset: 0x7A218, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZTo', symObjAddr: 0x770, symBinAddr: 0x2C70, symSize: 0x10 } - - { offsetInCU: 0x943, offset: 0x7A297, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZTo', symObjAddr: 0x790, symBinAddr: 0x2C90, symSize: 0x40 } - - { offsetInCU: 0x9EE, offset: 0x7A342, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZTo', symObjAddr: 0x7E0, symBinAddr: 0x2CE0, symSize: 0x20 } - - { offsetInCU: 0xA61, offset: 0x7A3B5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZTo', symObjAddr: 0x810, symBinAddr: 0x2D10, symSize: 0x10 } - - { offsetInCU: 0xAB8, offset: 0x7A40C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZTo', symObjAddr: 0x880, symBinAddr: 0x2D80, symSize: 0x70 } - - { offsetInCU: 0xB43, offset: 0x7A497, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTo', symObjAddr: 0xA90, symBinAddr: 0x2F90, symSize: 0xA0 } - - { offsetInCU: 0xB94, offset: 0x7A4E8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZTo', symObjAddr: 0xD90, symBinAddr: 0x3290, symSize: 0xA0 } - - { offsetInCU: 0xBE5, offset: 0x7A539, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZTo', symObjAddr: 0x10F0, symBinAddr: 0x35F0, symSize: 0xA0 } - - { offsetInCU: 0xC41, offset: 0x7A595, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTo', symObjAddr: 0x1540, symBinAddr: 0x3A40, symSize: 0xD0 } - - { offsetInCU: 0xC89, offset: 0x7A5DD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTo', symObjAddr: 0x1620, symBinAddr: 0x3B20, symSize: 0x40 } - - { offsetInCU: 0xCE9, offset: 0x7A63D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfcTo', symObjAddr: 0x16B0, symBinAddr: 0x3BB0, symSize: 0x30 } - - { offsetInCU: 0xD3C, offset: 0x7A690, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTf4nd_n', symObjAddr: 0x1720, symBinAddr: 0x3C20, symSize: 0x300 } - - { offsetInCU: 0xF6C, offset: 0x7A8C0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTf4nnnd_n', symObjAddr: 0x1A20, symBinAddr: 0x3F20, symSize: 0x260 } - - { offsetInCU: 0x1166, offset: 0x7AABA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTf4nnd_n', symObjAddr: 0x1C80, symBinAddr: 0x4180, symSize: 0xD0 } - - { offsetInCU: 0x1263, offset: 0x7ABB7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTf4nnnnd_n', symObjAddr: 0x1D50, symBinAddr: 0x4250, symSize: 0x1B0 } - - { offsetInCU: 0x13D8, offset: 0x7AD2C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTf4nnnnnnd_n', symObjAddr: 0x1F00, symBinAddr: 0x4400, symSize: 0x1D0 } - - { offsetInCU: 0x156D, offset: 0x7AEC1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTf4nnnnnnnnnnd_n', symObjAddr: 0x20D0, symBinAddr: 0x45D0, symSize: 0x200 } - - { offsetInCU: 0x1759, offset: 0x7B0AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTf4nnnd_n', symObjAddr: 0x22D0, symBinAddr: 0x47D0, symSize: 0x1D0 } - - { offsetInCU: 0x1823, offset: 0x7B177, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTf4nnnnd_n', symObjAddr: 0x2660, symBinAddr: 0x4B60, symSize: 0x200 } - - { offsetInCU: 0x1904, offset: 0x7B258, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTf4d_n', symObjAddr: 0x2860, symBinAddr: 0x4D60, symSize: 0x110 } - - { offsetInCU: 0x19AF, offset: 0x7B303, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TR', symObjAddr: 0xB30, symBinAddr: 0x3030, symSize: 0x70 } - - { offsetInCU: 0x19C7, offset: 0x7B31B, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TR', symObjAddr: 0xE30, symBinAddr: 0x3330, symSize: 0x50 } - - { offsetInCU: 0x1A34, offset: 0x7B388, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfETo', symObjAddr: 0x1710, symBinAddr: 0x3C10, symSize: 0x10 } - - { offsetInCU: 0x1ABF, offset: 0x7B413, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCMa', symObjAddr: 0x2970, symBinAddr: 0x4E70, symSize: 0x20 } - - { offsetInCU: 0x1AD3, offset: 0x7B427, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TRTA', symObjAddr: 0x29B0, symBinAddr: 0x4EB0, symSize: 0x10 } - - { offsetInCU: 0x1AF2, offset: 0x7B446, size: 0x8, addend: 0x0, symName: '_$sSo7NSErrorCSg10ObjectiveC8ObjCBoolVIeyByy_ACSbIeggy_TRTA', symObjAddr: 0x29C0, symBinAddr: 0x4EC0, symSize: 0x20 } - - { offsetInCU: 0x1B1B, offset: 0x7B46F, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TRTA', symObjAddr: 0x29E0, symBinAddr: 0x4EE0, symSize: 0x10 } - - { offsetInCU: 0x1B2F, offset: 0x7B483, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCMa', symObjAddr: 0x29F0, symBinAddr: 0x4EF0, symSize: 0x30 } - - { offsetInCU: 0x1B43, offset: 0x7B497, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_TA', symObjAddr: 0x2A70, symBinAddr: 0x4F70, symSize: 0x40 } - - { offsetInCU: 0x1B57, offset: 0x7B4AB, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x2AB0, symBinAddr: 0x4FB0, symSize: 0x20 } - - { offsetInCU: 0x1B6B, offset: 0x7B4BF, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x2AD0, symBinAddr: 0x4FD0, symSize: 0x10 } - - { offsetInCU: 0x1B7F, offset: 0x7B4D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2B00, symBinAddr: 0x5000, symSize: 0x40 } - - { offsetInCU: 0x1BB3, offset: 0x7B507, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2BC0, symBinAddr: 0x50C0, symSize: 0x40 } - - { offsetInCU: 0x1BF1, offset: 0x7B545, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2C00, symBinAddr: 0x5100, symSize: 0x20 } - - { offsetInCU: 0x1C25, offset: 0x7B579, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2CB0, symBinAddr: 0x51B0, symSize: 0x40 } - - { offsetInCU: 0x1C59, offset: 0x7B5AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2D20, symBinAddr: 0x5220, symSize: 0x30 } - - { offsetInCU: 0x1C95, offset: 0x7B5E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_TA', symObjAddr: 0x2DA0, symBinAddr: 0x52A0, symSize: 0x30 } - - { offsetInCU: 0x1CA9, offset: 0x7B5FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2DD0, symBinAddr: 0x52D0, symSize: 0x40 } - - { offsetInCU: 0x2176, offset: 0x7BACA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZ', symObjAddr: 0x0, symBinAddr: 0x2500, symSize: 0x10 } - - { offsetInCU: 0x2191, offset: 0x7BAE5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x50, symBinAddr: 0x2550, symSize: 0x10 } - - { offsetInCU: 0x21AC, offset: 0x7BB00, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0xC0, symBinAddr: 0x25C0, symSize: 0x10 } - - { offsetInCU: 0x21CD, offset: 0x7BB21, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x110, symBinAddr: 0x2610, symSize: 0x10 } - - { offsetInCU: 0x21E8, offset: 0x7BB3C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0x170, symBinAddr: 0x2670, symSize: 0x10 } - - { offsetInCU: 0x2203, offset: 0x7BB57, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x1E0, symBinAddr: 0x26E0, symSize: 0x10 } - - { offsetInCU: 0x221E, offset: 0x7BB72, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x280, symBinAddr: 0x2780, symSize: 0x10 } - - { offsetInCU: 0x22AC, offset: 0x7BC00, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x2B0, symBinAddr: 0x27B0, symSize: 0x10 } - - { offsetInCU: 0x232B, offset: 0x7BC7F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZ', symObjAddr: 0x2E0, symBinAddr: 0x27E0, symSize: 0x70 } - - { offsetInCU: 0x247D, offset: 0x7BDD1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZ', symObjAddr: 0x3D0, symBinAddr: 0x28D0, symSize: 0x70 } - - { offsetInCU: 0x25DB, offset: 0x7BF2F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZ', symObjAddr: 0x4C0, symBinAddr: 0x29C0, symSize: 0x70 } - - { offsetInCU: 0x2739, offset: 0x7C08D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZ', symObjAddr: 0x5B0, symBinAddr: 0x2AB0, symSize: 0x80 } - - { offsetInCU: 0x28AD, offset: 0x7C201, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZ', symObjAddr: 0x6C0, symBinAddr: 0x2BC0, symSize: 0x10 } - - { offsetInCU: 0x291D, offset: 0x7C271, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZ', symObjAddr: 0x6E0, symBinAddr: 0x2BE0, symSize: 0x10 } - - { offsetInCU: 0x2960, offset: 0x7C2B4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZ', symObjAddr: 0x700, symBinAddr: 0x2C00, symSize: 0x10 } - - { offsetInCU: 0x29A5, offset: 0x7C2F9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZ', symObjAddr: 0x720, symBinAddr: 0x2C20, symSize: 0x10 } - - { offsetInCU: 0x29E8, offset: 0x7C33C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZ', symObjAddr: 0x740, symBinAddr: 0x2C40, symSize: 0x10 } - - { offsetInCU: 0x2A2B, offset: 0x7C37F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZ', symObjAddr: 0x760, symBinAddr: 0x2C60, symSize: 0x10 } - - { offsetInCU: 0x2A6E, offset: 0x7C3C2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZ', symObjAddr: 0x780, symBinAddr: 0x2C80, symSize: 0x10 } - - { offsetInCU: 0x2B54, offset: 0x7C4A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ', symObjAddr: 0x7D0, symBinAddr: 0x2CD0, symSize: 0x10 } - - { offsetInCU: 0x2BD3, offset: 0x7C527, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZ', symObjAddr: 0x800, symBinAddr: 0x2D00, symSize: 0x10 } - - { offsetInCU: 0x2C16, offset: 0x7C56A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZ', symObjAddr: 0x820, symBinAddr: 0x2D20, symSize: 0x60 } - - { offsetInCU: 0x2CD7, offset: 0x7C62B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZ', symObjAddr: 0x8F0, symBinAddr: 0x2DF0, symSize: 0x10 } - - { offsetInCU: 0x2CEB, offset: 0x7C63F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_', symObjAddr: 0x900, symBinAddr: 0x2E00, symSize: 0x190 } - - { offsetInCU: 0x2D8B, offset: 0x7C6DF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZ', symObjAddr: 0xBA0, symBinAddr: 0x30A0, symSize: 0x30 } - - { offsetInCU: 0x2D9F, offset: 0x7C6F3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_', symObjAddr: 0xBD0, symBinAddr: 0x30D0, symSize: 0x1C0 } - - { offsetInCU: 0x2E89, offset: 0x7C7DD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZ', symObjAddr: 0xE80, symBinAddr: 0x3380, symSize: 0x30 } - - { offsetInCU: 0x2E9D, offset: 0x7C7F1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_', symObjAddr: 0xEB0, symBinAddr: 0x33B0, symSize: 0x240 } - - { offsetInCU: 0x2F51, offset: 0x7C8A5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZ', symObjAddr: 0x1190, symBinAddr: 0x3690, symSize: 0x10 } - - { offsetInCU: 0x2F65, offset: 0x7C8B9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_', symObjAddr: 0x11A0, symBinAddr: 0x36A0, symSize: 0x3A0 } - - { offsetInCU: 0x31FB, offset: 0x7CB4F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZ', symObjAddr: 0x1610, symBinAddr: 0x3B10, symSize: 0x10 } - - { offsetInCU: 0x3216, offset: 0x7CB6A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfC', symObjAddr: 0x1660, symBinAddr: 0x3B60, symSize: 0x20 } - - { offsetInCU: 0x322A, offset: 0x7CB7E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfc', symObjAddr: 0x1680, symBinAddr: 0x3B80, symSize: 0x30 } - - { offsetInCU: 0x3260, offset: 0x7CBB4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfD', symObjAddr: 0x16E0, symBinAddr: 0x3BE0, symSize: 0x30 } - - { offsetInCU: 0x4F, offset: 0x7CDEC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LLSo7GLKViewCvpZ', symObjAddr: 0x5BA8, symBinAddr: 0x1378CD0, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x7CE06, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15_shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvpZ', symObjAddr: 0x5BB0, symBinAddr: 0x1378CD8, symSize: 0x0 } - - { offsetInCU: 0x83, offset: 0x7CE20, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5storeSo19NSMutableDictionaryCvpZ', symObjAddr: 0x5BB8, symBinAddr: 0x1378CE0, symSize: 0x0 } - - { offsetInCU: 0x9D, offset: 0x7CE3A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LLSo10NSMapTableCySo8NSStringCACGvpZ', symObjAddr: 0x5BC0, symBinAddr: 0x1378CE8, symSize: 0x0 } - - { offsetInCU: 0xAB, offset: 0x7CE48, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0x0, symBinAddr: 0x55A0, symSize: 0x60 } - - { offsetInCU: 0xF0, offset: 0x7CE8D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5store_WZ', symObjAddr: 0x60, symBinAddr: 0x5600, symSize: 0x30 } - - { offsetInCU: 0x135, offset: 0x7CED2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0xD0, symBinAddr: 0x5670, symSize: 0x40 } - - { offsetInCU: 0x187, offset: 0x7CF24, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x1B0, symBinAddr: 0x5750, symSize: 0x20 } - - { offsetInCU: 0x1DD, offset: 0x7CF7A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x1D0, symBinAddr: 0x5770, symSize: 0x20 } - - { offsetInCU: 0x236, offset: 0x7CFD3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x1F0, symBinAddr: 0x5790, symSize: 0x20 } - - { offsetInCU: 0x28C, offset: 0x7D029, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x210, symBinAddr: 0x57B0, symSize: 0x20 } - - { offsetInCU: 0x2E5, offset: 0x7D082, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvgTo', symObjAddr: 0x320, symBinAddr: 0x58C0, symSize: 0x40 } - - { offsetInCU: 0x320, offset: 0x7D0BD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvsTo', symObjAddr: 0x390, symBinAddr: 0x5930, symSize: 0x30 } - - { offsetInCU: 0x3AF, offset: 0x7D14C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvgTo', symObjAddr: 0x5D0, symBinAddr: 0x5B70, symSize: 0x40 } - - { offsetInCU: 0x405, offset: 0x7D1A2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvsTo', symObjAddr: 0x640, symBinAddr: 0x5BE0, symSize: 0x40 } - - { offsetInCU: 0x45E, offset: 0x7D1FB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvgTo', symObjAddr: 0x680, symBinAddr: 0x5C20, symSize: 0x40 } - - { offsetInCU: 0x4B4, offset: 0x7D251, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvsTo', symObjAddr: 0x6F0, symBinAddr: 0x5C90, symSize: 0x40 } - - { offsetInCU: 0x50D, offset: 0x7D2AA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0x730, symBinAddr: 0x5CD0, symSize: 0x20 } - - { offsetInCU: 0x563, offset: 0x7D300, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0x750, symBinAddr: 0x5CF0, symSize: 0x20 } - - { offsetInCU: 0x5BC, offset: 0x7D359, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0x770, symBinAddr: 0x5D10, symSize: 0x20 } - - { offsetInCU: 0x614, offset: 0x7D3B1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvsTo', symObjAddr: 0x790, symBinAddr: 0x5D30, symSize: 0x30 } - - { offsetInCU: 0x66D, offset: 0x7D40A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x7C0, symBinAddr: 0x5D60, symSize: 0x20 } - - { offsetInCU: 0x6C5, offset: 0x7D462, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvsTo', symObjAddr: 0x7E0, symBinAddr: 0x5D80, symSize: 0x30 } - - { offsetInCU: 0x71E, offset: 0x7D4BB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x810, symBinAddr: 0x5DB0, symSize: 0x20 } - - { offsetInCU: 0x774, offset: 0x7D511, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x830, symBinAddr: 0x5DD0, symSize: 0x10 } - - { offsetInCU: 0x7CD, offset: 0x7D56A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvgTo', symObjAddr: 0x840, symBinAddr: 0x5DE0, symSize: 0x20 } - - { offsetInCU: 0x823, offset: 0x7D5C0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvsTo', symObjAddr: 0x860, symBinAddr: 0x5E00, symSize: 0x10 } - - { offsetInCU: 0x866, offset: 0x7D603, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivgTo', symObjAddr: 0x870, symBinAddr: 0x5E10, symSize: 0x30 } - - { offsetInCU: 0x898, offset: 0x7D635, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivgTo', symObjAddr: 0x960, symBinAddr: 0x5F00, symSize: 0x30 } - - { offsetInCU: 0x8E0, offset: 0x7D67D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvgTo', symObjAddr: 0xA50, symBinAddr: 0x5FF0, symSize: 0x30 } - - { offsetInCU: 0x948, offset: 0x7D6E5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvgTo', symObjAddr: 0xAB0, symBinAddr: 0x6050, symSize: 0x30 } - - { offsetInCU: 0x9E7, offset: 0x7D784, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btFTo', symObjAddr: 0xB20, symBinAddr: 0x60C0, symSize: 0xD0 } - - { offsetInCU: 0xA96, offset: 0x7D833, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VFTo', symObjAddr: 0xDA0, symBinAddr: 0x6340, symSize: 0x30 } - - { offsetInCU: 0xB46, offset: 0x7D8E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x1760, symBinAddr: 0x6D00, symSize: 0xD0 } - - { offsetInCU: 0xBB0, offset: 0x7D94D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtFTo', symObjAddr: 0x1A70, symBinAddr: 0x7010, symSize: 0x90 } - - { offsetInCU: 0xBED, offset: 0x7D98A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x1BF0, symBinAddr: 0x7190, symSize: 0x100 } - - { offsetInCU: 0xC6B, offset: 0x7DA08, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbFTo', symObjAddr: 0x1DC0, symBinAddr: 0x7360, symSize: 0x40 } - - { offsetInCU: 0xC9E, offset: 0x7DA3B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1E00, symBinAddr: 0x73A0, symSize: 0x20 } - - { offsetInCU: 0xCF8, offset: 0x7DA95, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvsTo', symObjAddr: 0x1E20, symBinAddr: 0x73C0, symSize: 0x30 } - - { offsetInCU: 0xD53, offset: 0x7DAF0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyFTo', symObjAddr: 0x1E90, symBinAddr: 0x7430, symSize: 0x40 } - - { offsetInCU: 0xDE9, offset: 0x7DB86, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VFTo', symObjAddr: 0x1F10, symBinAddr: 0x74B0, symSize: 0x60 } - - { offsetInCU: 0xEAE, offset: 0x7DC4B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VFTo', symObjAddr: 0x1FD0, symBinAddr: 0x7570, symSize: 0xA0 } - - { offsetInCU: 0xF3B, offset: 0x7DCD8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC23enterBackgroundListeneryycSgvsTo', symObjAddr: 0x20C0, symBinAddr: 0x7660, symSize: 0x70 } - - { offsetInCU: 0xF9D, offset: 0x7DD3A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC20becomeActiveListeneryycSgvsTo', symObjAddr: 0x21D0, symBinAddr: 0x7770, symSize: 0x70 } - - { offsetInCU: 0xFFA, offset: 0x7DD97, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvgTo', symObjAddr: 0x2240, symBinAddr: 0x77E0, symSize: 0xB0 } - - { offsetInCU: 0x104A, offset: 0x7DDE7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvsTo', symObjAddr: 0x23B0, symBinAddr: 0x7950, symSize: 0x90 } - - { offsetInCU: 0x10DA, offset: 0x7DE77, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x3110, symBinAddr: 0x86B0, symSize: 0x30 } - - { offsetInCU: 0x112F, offset: 0x7DECC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x3C90, symBinAddr: 0x9230, symSize: 0x30 } - - { offsetInCU: 0x1162, offset: 0x7DEFF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x3CC0, symBinAddr: 0x9260, symSize: 0x20 } - - { offsetInCU: 0x11BA, offset: 0x7DF57, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvsTo', symObjAddr: 0x3CE0, symBinAddr: 0x9280, symSize: 0x30 } - - { offsetInCU: 0x1228, offset: 0x7DFC5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvgTo', symObjAddr: 0x3D90, symBinAddr: 0x9330, symSize: 0x30 } - - { offsetInCU: 0x1282, offset: 0x7E01F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvsTo', symObjAddr: 0x3DC0, symBinAddr: 0x9360, symSize: 0x30 } - - { offsetInCU: 0x12E2, offset: 0x7E07F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgFTo', symObjAddr: 0x3E20, symBinAddr: 0x93C0, symSize: 0x30 } - - { offsetInCU: 0x1426, offset: 0x7E1C3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFTo', symObjAddr: 0x4200, symBinAddr: 0x97A0, symSize: 0x30 } - - { offsetInCU: 0x1459, offset: 0x7E1F6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfDTo', symObjAddr: 0x4520, symBinAddr: 0x9AC0, symSize: 0x20 } - - { offsetInCU: 0x1494, offset: 0x7E231, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTo', symObjAddr: 0x4610, symBinAddr: 0x9BB0, symSize: 0x30 } - - { offsetInCU: 0x14C7, offset: 0x7E264, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvgZTf4d_n', symObjAddr: 0x5040, symBinAddr: 0xA5E0, symSize: 0x2A0 } - - { offsetInCU: 0x162F, offset: 0x7E3CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTf4nnd_n', symObjAddr: 0x53B0, symBinAddr: 0xA950, symSize: 0xC0 } - - { offsetInCU: 0x184B, offset: 0x7E5E8, size: 0x8, addend: 0x0, symName: '_$sIeg_IeyB_TR', symObjAddr: 0x2090, symBinAddr: 0x7630, symSize: 0x30 } - - { offsetInCU: 0x1863, offset: 0x7E600, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_So8NSStringCABIeyByy_TR', symObjAddr: 0x2340, symBinAddr: 0x78E0, symSize: 0x70 } - - { offsetInCU: 0x187B, offset: 0x7E618, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTK', symObjAddr: 0x24A0, symBinAddr: 0x7A40, symSize: 0x90 } - - { offsetInCU: 0x18B3, offset: 0x7E650, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTk', symObjAddr: 0x2530, symBinAddr: 0x7AD0, symSize: 0xC0 } - - { offsetInCU: 0x18F3, offset: 0x7E690, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TR', symObjAddr: 0x25F0, symBinAddr: 0x7B90, symSize: 0x70 } - - { offsetInCU: 0x19A3, offset: 0x7E740, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfETo', symObjAddr: 0x4540, symBinAddr: 0x9AE0, symSize: 0xC0 } - - { offsetInCU: 0x19D3, offset: 0x7E770, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOy', symObjAddr: 0x4640, symBinAddr: 0x9BE0, symSize: 0x20 } - - { offsetInCU: 0x19E7, offset: 0x7E784, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCMa', symObjAddr: 0x4660, symBinAddr: 0x9C00, symSize: 0x20 } - - { offsetInCU: 0x19FB, offset: 0x7E798, size: 0x8, addend: 0x0, symName: '_$ss29getContiguousArrayStorageType3fors01_bcD0CyxGmxm_tlFSo18NSLayoutConstraintC_Tgm5', symObjAddr: 0x4680, symBinAddr: 0x9C20, symSize: 0x60 } - - { offsetInCU: 0x1C02, offset: 0x7E99F, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x52E0, symBinAddr: 0xA880, symSize: 0x40 } - - { offsetInCU: 0x1C16, offset: 0x7E9B3, size: 0x8, addend: 0x0, symName: '_$sypSgWOh', symObjAddr: 0x5320, symBinAddr: 0xA8C0, symSize: 0x30 } - - { offsetInCU: 0x1C2A, offset: 0x7E9C7, size: 0x8, addend: 0x0, symName: ___swift_project_boxed_opaque_existential_0, symObjAddr: 0x5350, symBinAddr: 0xA8F0, symSize: 0x30 } - - { offsetInCU: 0x1C3E, offset: 0x7E9DB, size: 0x8, addend: 0x0, symName: ___swift_destroy_boxed_opaque_existential_0, symObjAddr: 0x5380, symBinAddr: 0xA920, symSize: 0x30 } - - { offsetInCU: 0x1C5D, offset: 0x7E9FA, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSo19UIGestureRecognizerCIeyByy_SSADIeggg_TRTA', symObjAddr: 0x5910, symBinAddr: 0xAEB0, symSize: 0x40 } - - { offsetInCU: 0x1C86, offset: 0x7EA23, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x5950, symBinAddr: 0xAEF0, symSize: 0x20 } - - { offsetInCU: 0x1C9A, offset: 0x7EA37, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x5970, symBinAddr: 0xAF10, symSize: 0x10 } - - { offsetInCU: 0x1CAE, offset: 0x7EA4B, size: 0x8, addend: 0x0, symName: '_$sIeg_SgWOe', symObjAddr: 0x5980, symBinAddr: 0xAF20, symSize: 0x20 } - - { offsetInCU: 0x1CCD, offset: 0x7EA6A, size: 0x8, addend: 0x0, symName: '_$sIeyB_Ieg_TRTA', symObjAddr: 0x59A0, symBinAddr: 0xAF40, symSize: 0x10 } - - { offsetInCU: 0x1CF6, offset: 0x7EA93, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TRTA', symObjAddr: 0x59D0, symBinAddr: 0xAF70, symSize: 0x20 } - - { offsetInCU: 0x1D15, offset: 0x7EAB2, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SSABytIegnnr_TRTA', symObjAddr: 0x59F0, symBinAddr: 0xAF90, symSize: 0x30 } - - { offsetInCU: 0x1D3E, offset: 0x7EADB, size: 0x8, addend: 0x0, symName: '_$sypWOb', symObjAddr: 0x5A20, symBinAddr: 0xAFC0, symSize: 0x20 } - - { offsetInCU: 0x1D52, offset: 0x7EAEF, size: 0x8, addend: 0x0, symName: '_$sypWOc', symObjAddr: 0x5A70, symBinAddr: 0xB010, symSize: 0x30 } - - { offsetInCU: 0x1FD7, offset: 0x7ED74, size: 0x8, addend: 0x0, symName: '_$sSD17dictionaryLiteralSDyxq_Gx_q_td_tcfCSS_ypTgm5Tf4g_n', symObjAddr: 0x4F50, symBinAddr: 0xA4F0, symSize: 0xF0 } - - { offsetInCU: 0x2469, offset: 0x7F206, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvg', symObjAddr: 0x360, symBinAddr: 0x5900, symSize: 0x30 } - - { offsetInCU: 0x249A, offset: 0x7F237, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvs', symObjAddr: 0x3C0, symBinAddr: 0x5960, symSize: 0xE0 } - - { offsetInCU: 0x24E4, offset: 0x7F281, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM', symObjAddr: 0x4A0, symBinAddr: 0x5A40, symSize: 0x50 } - - { offsetInCU: 0x2507, offset: 0x7F2A4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM.resume.0', symObjAddr: 0x4F0, symBinAddr: 0x5A90, symSize: 0xE0 } - - { offsetInCU: 0x2548, offset: 0x7F2E5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64Vvg', symObjAddr: 0x610, symBinAddr: 0x5BB0, symSize: 0x30 } - - { offsetInCU: 0x259E, offset: 0x7F33B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg', symObjAddr: 0x6C0, symBinAddr: 0x5C60, symSize: 0x30 } - - { offsetInCU: 0x270A, offset: 0x7F4A7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivg', symObjAddr: 0x8A0, symBinAddr: 0x5E40, symSize: 0xC0 } - - { offsetInCU: 0x282F, offset: 0x7F5CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivg', symObjAddr: 0x990, symBinAddr: 0x5F30, symSize: 0xC0 } - - { offsetInCU: 0x2975, offset: 0x7F712, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvg', symObjAddr: 0xA80, symBinAddr: 0x6020, symSize: 0x30 } - - { offsetInCU: 0x29BB, offset: 0x7F758, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvg', symObjAddr: 0xAE0, symBinAddr: 0x6080, symSize: 0x30 } - - { offsetInCU: 0x29ED, offset: 0x7F78A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btF', symObjAddr: 0xB10, symBinAddr: 0x60B0, symSize: 0x10 } - - { offsetInCU: 0x2B6A, offset: 0x7F907, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VF', symObjAddr: 0xBF0, symBinAddr: 0x6190, symSize: 0x1B0 } - - { offsetInCU: 0x2F4D, offset: 0x7FCEA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btF', symObjAddr: 0xDD0, symBinAddr: 0x6370, symSize: 0x990 } - - { offsetInCU: 0x36DB, offset: 0x80478, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtF', symObjAddr: 0x1830, symBinAddr: 0x6DD0, symSize: 0x240 } - - { offsetInCU: 0x3B67, offset: 0x80904, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x1B00, symBinAddr: 0x70A0, symSize: 0xF0 } - - { offsetInCU: 0x3BF6, offset: 0x80993, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbF', symObjAddr: 0x1CF0, symBinAddr: 0x7290, symSize: 0xD0 } - - { offsetInCU: 0x3D4F, offset: 0x80AEC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyF', symObjAddr: 0x1E50, symBinAddr: 0x73F0, symSize: 0x40 } - - { offsetInCU: 0x3DD3, offset: 0x80B70, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF', symObjAddr: 0x1ED0, symBinAddr: 0x7470, symSize: 0x40 } - - { offsetInCU: 0x3EF2, offset: 0x80C8F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VF', symObjAddr: 0x1F70, symBinAddr: 0x7510, symSize: 0x60 } - - { offsetInCU: 0x3FE8, offset: 0x80D85, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvg', symObjAddr: 0x22F0, symBinAddr: 0x7890, symSize: 0x50 } - - { offsetInCU: 0x4032, offset: 0x80DCF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvs', symObjAddr: 0x2440, symBinAddr: 0x79E0, symSize: 0x60 } - - { offsetInCU: 0x4059, offset: 0x80DF6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM', symObjAddr: 0x2660, symBinAddr: 0x7C00, symSize: 0x40 } - - { offsetInCU: 0x407F, offset: 0x80E1C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM.resume.0', symObjAddr: 0x26A0, symBinAddr: 0x7C40, symSize: 0x10 } - - { offsetInCU: 0x4141, offset: 0x80EDE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x26B0, symBinAddr: 0x7C50, symSize: 0xA60 } - - { offsetInCU: 0x4348, offset: 0x810E5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfC', symObjAddr: 0x3140, symBinAddr: 0x86E0, symSize: 0x80 } - - { offsetInCU: 0x4371, offset: 0x8110E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfc', symObjAddr: 0x31C0, symBinAddr: 0x8760, symSize: 0xAD0 } - - { offsetInCU: 0x4599, offset: 0x81336, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvW', symObjAddr: 0x3D10, symBinAddr: 0x92B0, symSize: 0x80 } - - { offsetInCU: 0x468F, offset: 0x8142C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgF', symObjAddr: 0x3DF0, symBinAddr: 0x9390, symSize: 0x30 } - - { offsetInCU: 0x472B, offset: 0x814C8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6resize33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x3E50, symBinAddr: 0x93F0, symSize: 0x110 } - - { offsetInCU: 0x497C, offset: 0x81719, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyF', symObjAddr: 0x3F60, symBinAddr: 0x9500, symSize: 0x2A0 } - - { offsetInCU: 0x4BD8, offset: 0x81975, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfD', symObjAddr: 0x4230, symBinAddr: 0x97D0, symSize: 0x2F0 } - - { offsetInCU: 0x4C66, offset: 0x81A03, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZ', symObjAddr: 0x4600, symBinAddr: 0x9BA0, symSize: 0x10 } - - { offsetInCU: 0x4C8E, offset: 0x81A2B, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4findys10_HashTableV6BucketV6bucket_Sb5foundtxSHRzlFSS_Tg5', symObjAddr: 0x46E0, symBinAddr: 0x9C80, symSize: 0x60 } - - { offsetInCU: 0x4CE8, offset: 0x81A85, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV7_insert2at3key5valueys10_HashTableV6BucketV_xnq_ntFSS_ypTg5', symObjAddr: 0x4740, symBinAddr: 0x9CE0, symSize: 0x60 } - - { offsetInCU: 0x4D54, offset: 0x81AF1, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV12mutatingFind_8isUniques10_HashTableV6BucketV6bucket_Sb5foundtx_SbtFSS_ypTg5', symObjAddr: 0x47A0, symBinAddr: 0x9D40, symSize: 0xB0 } - - { offsetInCU: 0x4D91, offset: 0x81B2E, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4find_9hashValues10_HashTableV6BucketV6bucket_Sb5foundtx_SitSHRzlFSS_Tg5', symObjAddr: 0x4850, symBinAddr: 0x9DF0, symSize: 0xE0 } - - { offsetInCU: 0x4DFC, offset: 0x81B99, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV4copyyyFSS_ypTg5', symObjAddr: 0x4930, symBinAddr: 0x9ED0, symSize: 0x260 } - - { offsetInCU: 0x4EA4, offset: 0x81C41, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV20_copyOrMoveAndResize8capacity12moveElementsySi_SbtFSS_ypTg5', symObjAddr: 0x4B90, symBinAddr: 0xA130, symSize: 0x3C0 } - - { offsetInCU: 0x27, offset: 0x81E7A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xB0F0, symSize: 0x20 } - - { offsetInCU: 0x62, offset: 0x81EB5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCMa', symObjAddr: 0x20, symBinAddr: 0xB110, symSize: 0x14 } - - { offsetInCU: 0x1AF, offset: 0x82002, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xB0F0, symSize: 0x20 } - - { offsetInCU: 0x65, offset: 0x8208F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvgTo', symObjAddr: 0x0, symBinAddr: 0xB130, symSize: 0x10 } - - { offsetInCU: 0xBB, offset: 0x820E5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvsTo', symObjAddr: 0x10, symBinAddr: 0xB140, symSize: 0x10 } - - { offsetInCU: 0x114, offset: 0x8213E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvgTo', symObjAddr: 0x20, symBinAddr: 0xB150, symSize: 0x40 } - - { offsetInCU: 0x16A, offset: 0x82194, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvsTo', symObjAddr: 0x60, symBinAddr: 0xB190, symSize: 0x40 } - - { offsetInCU: 0x1C3, offset: 0x821ED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvgTo', symObjAddr: 0xA0, symBinAddr: 0xB1D0, symSize: 0x40 } - - { offsetInCU: 0x219, offset: 0x82243, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvsTo', symObjAddr: 0xE0, symBinAddr: 0xB210, symSize: 0x40 } - - { offsetInCU: 0x272, offset: 0x8229C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivgTo', symObjAddr: 0x120, symBinAddr: 0xB250, symSize: 0x20 } - - { offsetInCU: 0x2C8, offset: 0x822F2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivsTo', symObjAddr: 0x140, symBinAddr: 0xB270, symSize: 0x20 } - - { offsetInCU: 0x321, offset: 0x8234B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivgTo', symObjAddr: 0x160, symBinAddr: 0xB290, symSize: 0x20 } - - { offsetInCU: 0x377, offset: 0x823A1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivsTo', symObjAddr: 0x180, symBinAddr: 0xB2B0, symSize: 0x20 } - - { offsetInCU: 0x3D0, offset: 0x823FA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvgTo', symObjAddr: 0x1A0, symBinAddr: 0xB2D0, symSize: 0x40 } - - { offsetInCU: 0x426, offset: 0x82450, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvsTo', symObjAddr: 0x1E0, symBinAddr: 0xB310, symSize: 0x40 } - - { offsetInCU: 0x47F, offset: 0x824A9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvgTo', symObjAddr: 0x220, symBinAddr: 0xB350, symSize: 0x10 } - - { offsetInCU: 0x4D5, offset: 0x824FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvsTo', symObjAddr: 0x230, symBinAddr: 0xB360, symSize: 0x10 } - - { offsetInCU: 0x52E, offset: 0x82558, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvgTo', symObjAddr: 0x240, symBinAddr: 0xB370, symSize: 0x10 } - - { offsetInCU: 0x584, offset: 0x825AE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvsTo', symObjAddr: 0x250, symBinAddr: 0xB380, symSize: 0x10 } - - { offsetInCU: 0x5DD, offset: 0x82607, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvgTo', symObjAddr: 0x260, symBinAddr: 0xB390, symSize: 0x40 } - - { offsetInCU: 0x633, offset: 0x8265D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvsTo', symObjAddr: 0x2A0, symBinAddr: 0xB3D0, symSize: 0x40 } - - { offsetInCU: 0x676, offset: 0x826A0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13SIZE_OF_FLOATSivgZTo', symObjAddr: 0x2E0, symBinAddr: 0xB410, symSize: 0x10 } - - { offsetInCU: 0x692, offset: 0x826BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13VERTEX_SHADERSSvgZTo', symObjAddr: 0x2F0, symBinAddr: 0xB420, symSize: 0x30 } - - { offsetInCU: 0x6C4, offset: 0x826EE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvgTo', symObjAddr: 0x320, symBinAddr: 0xB450, symSize: 0x20 } - - { offsetInCU: 0x71C, offset: 0x82746, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvsTo', symObjAddr: 0x340, symBinAddr: 0xB470, symSize: 0x30 } - - { offsetInCU: 0x775, offset: 0x8279F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvgTo', symObjAddr: 0x490, symBinAddr: 0xB5C0, symSize: 0x20 } - - { offsetInCU: 0x7CB, offset: 0x827F5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvsTo', symObjAddr: 0x4B0, symBinAddr: 0xB5E0, symSize: 0x20 } - - { offsetInCU: 0x83A, offset: 0x82864, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfcTo', symObjAddr: 0x680, symBinAddr: 0xB770, symSize: 0x20 } - - { offsetInCU: 0x86C, offset: 0x82896, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyFTo', symObjAddr: 0x7E0, symBinAddr: 0xB8D0, symSize: 0x30 } - - { offsetInCU: 0x8C4, offset: 0x828EE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTo', symObjAddr: 0x830, symBinAddr: 0xB920, symSize: 0x80 } - - { offsetInCU: 0x928, offset: 0x82952, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTo', symObjAddr: 0x8B0, symBinAddr: 0xB9A0, symSize: 0x80 } - - { offsetInCU: 0x9CA, offset: 0x829F4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyFTo', symObjAddr: 0xCE0, symBinAddr: 0xBDD0, symSize: 0x30 } - - { offsetInCU: 0xAB4, offset: 0x82ADE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCMa', symObjAddr: 0x660, symBinAddr: 0xB750, symSize: 0x20 } - - { offsetInCU: 0xB33, offset: 0x82B5D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfETo', symObjAddr: 0xD40, symBinAddr: 0xBE30, symSize: 0x60 } - - { offsetInCU: 0x1271, offset: 0x8329B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfC', symObjAddr: 0x4D0, symBinAddr: 0xB600, symSize: 0x20 } - - { offsetInCU: 0x128B, offset: 0x832B5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfc', symObjAddr: 0x4F0, symBinAddr: 0xB620, symSize: 0x130 } - - { offsetInCU: 0x12BB, offset: 0x832E5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyF', symObjAddr: 0x6A0, symBinAddr: 0xB790, symSize: 0x140 } - - { offsetInCU: 0x1474, offset: 0x8349E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtF', symObjAddr: 0x810, symBinAddr: 0xB900, symSize: 0x20 } - - { offsetInCU: 0x1525, offset: 0x8354F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyF', symObjAddr: 0x930, symBinAddr: 0xBA20, symSize: 0x3B0 } - - { offsetInCU: 0x18BB, offset: 0x838E5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfD', symObjAddr: 0xD10, symBinAddr: 0xBE00, symSize: 0x30 } - - { offsetInCU: 0x19B4, offset: 0x839DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTf4ddnndnndn_n', symObjAddr: 0xDA0, symBinAddr: 0xBE90, symSize: 0x720 } - - { offsetInCU: 0x231C, offset: 0x84346, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTf4nnnnndn_n', symObjAddr: 0x1520, symBinAddr: 0xC610, symSize: 0x7EC } - - { offsetInCU: 0x10C, offset: 0x84EEF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfcTo', symObjAddr: 0x1120, symBinAddr: 0xDEE0, symSize: 0x60 } - - { offsetInCU: 0x19C, offset: 0x84F7F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCfETo', symObjAddr: 0x11A0, symBinAddr: 0xDF60, symSize: 0x20 } - - { offsetInCU: 0x1CB, offset: 0x84FAE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6handleyySo19UIGestureRecognizerCFTo', symObjAddr: 0x11C0, symBinAddr: 0xDF80, symSize: 0x10 } - - { offsetInCU: 0x368, offset: 0x8514B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCACycfcTo', symObjAddr: 0x1A40, symBinAddr: 0xE800, symSize: 0x30 } - - { offsetInCU: 0x5E4, offset: 0x853C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCfETo', symObjAddr: 0x1AC0, symBinAddr: 0xE880, symSize: 0x60 } - - { offsetInCU: 0x613, offset: 0x853F6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCMa', symObjAddr: 0x1B20, symBinAddr: 0xE8E0, symSize: 0x20 } - - { offsetInCU: 0x627, offset: 0x8540A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCMa', symObjAddr: 0x1B40, symBinAddr: 0xE900, symSize: 0x20 } - - { offsetInCU: 0x63B, offset: 0x8541E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwCP', symObjAddr: 0x1B60, symBinAddr: 0xE920, symSize: 0x30 } - - { offsetInCU: 0x64F, offset: 0x85432, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwxx', symObjAddr: 0x1B90, symBinAddr: 0xE950, symSize: 0x10 } - - { offsetInCU: 0x663, offset: 0x85446, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwcp', symObjAddr: 0x1BA0, symBinAddr: 0xE960, symSize: 0x30 } - - { offsetInCU: 0x677, offset: 0x8545A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwca', symObjAddr: 0x1BD0, symBinAddr: 0xE990, symSize: 0x50 } - - { offsetInCU: 0x68B, offset: 0x8546E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwta', symObjAddr: 0x1C40, symBinAddr: 0xE9E0, symSize: 0x40 } - - { offsetInCU: 0x69F, offset: 0x85482, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwet', symObjAddr: 0x1C80, symBinAddr: 0xEA20, symSize: 0x40 } - - { offsetInCU: 0x6B3, offset: 0x85496, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwst', symObjAddr: 0x1CC0, symBinAddr: 0xEA60, symSize: 0x50 } - - { offsetInCU: 0x6C7, offset: 0x854AA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVMa', symObjAddr: 0x1D10, symBinAddr: 0xEAB0, symSize: 0x10 } - - { offsetInCU: 0x6DB, offset: 0x854BE, size: 0x8, addend: 0x0, symName: '_$sypSgWOc', symObjAddr: 0x1D20, symBinAddr: 0xEAC0, symSize: 0x40 } - - { offsetInCU: 0x6EF, offset: 0x854D2, size: 0x8, addend: 0x0, symName: '_$sSo7UITouchCSo8NSObjectCSH10ObjectiveCWl', symObjAddr: 0x1E30, symBinAddr: 0xEB00, symSize: 0x50 } - - { offsetInCU: 0x703, offset: 0x854E6, size: 0x8, addend: 0x0, symName: '_$sSh8IteratorV8_VariantOyx__GSHRzlWOe', symObjAddr: 0x1E80, symBinAddr: 0xEB50, symSize: 0x20 } - - { offsetInCU: 0x761, offset: 0x85544, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOe', symObjAddr: 0x21A0, symBinAddr: 0xEE70, symSize: 0x14 } - - { offsetInCU: 0xCB4, offset: 0x85A97, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesBegan_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x0, symBinAddr: 0xCE00, symSize: 0x630 } - - { offsetInCU: 0xF39, offset: 0x85D1C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesMoved_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x650, symBinAddr: 0xD450, symSize: 0xE0 } - - { offsetInCU: 0xFB8, offset: 0x85D9B, size: 0x8, addend: 0x0, symName: '_$sSa6remove2atxSi_tF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x800, symBinAddr: 0xD5E0, symSize: 0xB0 } - - { offsetInCU: 0x102A, offset: 0x85E0D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfc', symObjAddr: 0x1030, symBinAddr: 0xDDF0, symSize: 0xF0 } - - { offsetInCU: 0x1179, offset: 0x85F5C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6onMove33_044DDF836BDB3B89B481C6F58BB6EF6BLLyySo19UIGestureRecognizerC_ShySo7UITouchCGSgtF', symObjAddr: 0x1590, symBinAddr: 0xE350, symSize: 0x4B0 } - - { offsetInCU: 0x18C2, offset: 0x866A5, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNewAByxGyF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x1EA0, symBinAddr: 0xEB70, symSize: 0x20 } - - { offsetInCU: 0x195A, offset: 0x8673D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6canvasAcA9NSCCanvasC_tcfcTf4gn_n', symObjAddr: 0x1EC0, symBinAddr: 0xEB90, symSize: 0x1F0 } - - { offsetInCU: 0x27, offset: 0x86906, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xEE90, symSize: 0x30 } - - { offsetInCU: 0x4B, offset: 0x8692A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvpZ', symObjAddr: 0x2A0, symBinAddr: 0x1378FF8, symSize: 0x0 } - - { offsetInCU: 0x65, offset: 0x86944, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xEE90, symSize: 0x30 } - - { offsetInCU: 0x98, offset: 0x86977, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZTo', symObjAddr: 0x160, symBinAddr: 0xEFF0, symSize: 0x30 } - - { offsetInCU: 0x104, offset: 0x869E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfcTo', symObjAddr: 0x200, symBinAddr: 0xF090, symSize: 0x30 } - - { offsetInCU: 0x158, offset: 0x86A37, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queue_WZ', symObjAddr: 0x30, symBinAddr: 0xEEC0, symSize: 0xF0 } - - { offsetInCU: 0x183, offset: 0x86A62, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCMa', symObjAddr: 0x1E0, symBinAddr: 0xF070, symSize: 0x20 } - - { offsetInCU: 0x197, offset: 0x86A76, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfETo', symObjAddr: 0x260, symBinAddr: 0xF0F0, symSize: 0x10 } - - { offsetInCU: 0x1C2, offset: 0x86AA1, size: 0x8, addend: 0x0, symName: '_$sSo17OS_dispatch_queueCMa', symObjAddr: 0x270, symBinAddr: 0xF100, symSize: 0x2F } - - { offsetInCU: 0x34A, offset: 0x86C29, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZ', symObjAddr: 0x120, symBinAddr: 0xEFB0, symSize: 0x40 } - - { offsetInCU: 0x38A, offset: 0x86C69, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfC', symObjAddr: 0x190, symBinAddr: 0xF020, symSize: 0x20 } - - { offsetInCU: 0x39E, offset: 0x86C7D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfc', symObjAddr: 0x1B0, symBinAddr: 0xF040, symSize: 0x30 } - - { offsetInCU: 0x3DA, offset: 0x86CB9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfD', symObjAddr: 0x230, symBinAddr: 0xF0C0, symSize: 0x30 } - - { offsetInCU: 0x2B, offset: 0x86D07, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xF130, symSize: 0xA0 } - - { offsetInCU: 0x66, offset: 0x86D42, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZTo', symObjAddr: 0xA0, symBinAddr: 0xF1D0, symSize: 0xA0 } - - { offsetInCU: 0xF9, offset: 0x86DD5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZTo', symObjAddr: 0x1D0, symBinAddr: 0xF300, symSize: 0x100 } - - { offsetInCU: 0x1AD, offset: 0x86E89, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZTo', symObjAddr: 0x300, symBinAddr: 0xF430, symSize: 0x30 } - - { offsetInCU: 0x22D, offset: 0x86F09, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTo', symObjAddr: 0x340, symBinAddr: 0xF470, symSize: 0x90 } - - { offsetInCU: 0x2A6, offset: 0x86F82, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZTo', symObjAddr: 0x4E0, symBinAddr: 0xF610, symSize: 0x140 } - - { offsetInCU: 0x345, offset: 0x87021, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfcTo', symObjAddr: 0x670, symBinAddr: 0xF7A0, symSize: 0x30 } - - { offsetInCU: 0x398, offset: 0x87074, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTf4nnnnnndd_n', symObjAddr: 0x6D0, symBinAddr: 0xF800, symSize: 0x170 } - - { offsetInCU: 0x50B, offset: 0x871E7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC7getFile33_F00B23A4165DD6ABFCD23C8811C7DF43LLyS2SKFZTf4nd_g', symObjAddr: 0x840, symBinAddr: 0xF970, symSize: 0x310 } - - { offsetInCU: 0x5EA, offset: 0x872C6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCMa', symObjAddr: 0xB50, symBinAddr: 0xFC80, symSize: 0x20 } - - { offsetInCU: 0x5FE, offset: 0x872DA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOAEs5ErrorAAWl', symObjAddr: 0xB70, symBinAddr: 0xFCA0, symSize: 0x30 } - - { offsetInCU: 0x612, offset: 0x872EE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwCP', symObjAddr: 0xBA0, symBinAddr: 0xFCD0, symSize: 0x30 } - - { offsetInCU: 0x626, offset: 0x87302, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwxx', symObjAddr: 0xBD0, symBinAddr: 0xFD00, symSize: 0x10 } - - { offsetInCU: 0x63A, offset: 0x87316, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwca', symObjAddr: 0xBE0, symBinAddr: 0xFD10, symSize: 0x40 } - - { offsetInCU: 0x64E, offset: 0x8732A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwta', symObjAddr: 0xC30, symBinAddr: 0xFD50, symSize: 0x30 } - - { offsetInCU: 0x662, offset: 0x8733E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwet', symObjAddr: 0xC60, symBinAddr: 0xFD80, symSize: 0x40 } - - { offsetInCU: 0x676, offset: 0x87352, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwst', symObjAddr: 0xCA0, symBinAddr: 0xFDC0, symSize: 0x40 } - - { offsetInCU: 0x68A, offset: 0x87366, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwug', symObjAddr: 0xCE0, symBinAddr: 0xFE00, symSize: 0x10 } - - { offsetInCU: 0x69E, offset: 0x8737A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwup', symObjAddr: 0xCF0, symBinAddr: 0xFE10, symSize: 0x10 } - - { offsetInCU: 0x6B2, offset: 0x8738E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwui', symObjAddr: 0xD00, symBinAddr: 0xFE20, symSize: 0x10 } - - { offsetInCU: 0x6C6, offset: 0x873A2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOMa', symObjAddr: 0xD10, symBinAddr: 0xFE30, symSize: 0x10 } - - { offsetInCU: 0x74E, offset: 0x8742A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP7_domainSSvgTW', symObjAddr: 0x3D0, symBinAddr: 0xF500, symSize: 0x10 } - - { offsetInCU: 0x76A, offset: 0x87446, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP5_codeSivgTW', symObjAddr: 0x3E0, symBinAddr: 0xF510, symSize: 0x10 } - - { offsetInCU: 0x786, offset: 0x87462, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP9_userInfoyXlSgvgTW', symObjAddr: 0x3F0, symBinAddr: 0xF520, symSize: 0x10 } - - { offsetInCU: 0x7A2, offset: 0x8747E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP19_getEmbeddedNSErroryXlSgyFTW', symObjAddr: 0x400, symBinAddr: 0xF530, symSize: 0x10 } - - { offsetInCU: 0xA56, offset: 0x87732, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xF130, symSize: 0xA0 } - - { offsetInCU: 0xAEC, offset: 0x877C8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZ', symObjAddr: 0x140, symBinAddr: 0xF270, symSize: 0x90 } - - { offsetInCU: 0xC71, offset: 0x8794D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZ', symObjAddr: 0x2D0, symBinAddr: 0xF400, symSize: 0x30 } - - { offsetInCU: 0xCBB, offset: 0x87997, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZ', symObjAddr: 0x330, symBinAddr: 0xF460, symSize: 0x10 } - - { offsetInCU: 0xCDD, offset: 0x879B9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZ', symObjAddr: 0x410, symBinAddr: 0xF540, symSize: 0xD0 } - - { offsetInCU: 0xD8D, offset: 0x87A69, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfC', symObjAddr: 0x620, symBinAddr: 0xF750, symSize: 0x20 } - - { offsetInCU: 0xDA1, offset: 0x87A7D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfc', symObjAddr: 0x640, symBinAddr: 0xF770, symSize: 0x30 } - - { offsetInCU: 0xDD7, offset: 0x87AB3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCfD', symObjAddr: 0x6A0, symBinAddr: 0xF7D0, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x87BD3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0xFE50, symSize: 0x10 } - - { offsetInCU: 0x71, offset: 0x87C1D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x10, symBinAddr: 0xFE60, symSize: 0x60 } - - { offsetInCU: 0xF6, offset: 0x87CA2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x80, symBinAddr: 0xFED0, symSize: 0x50 } - - { offsetInCU: 0x193, offset: 0x87D3F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0xE0, symBinAddr: 0xFF30, symSize: 0x60 } - - { offsetInCU: 0x25C, offset: 0x87E08, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x150, symBinAddr: 0xFFA0, symSize: 0x90 } - - { offsetInCU: 0x339, offset: 0x87EE5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfcTo', symObjAddr: 0x230, symBinAddr: 0x10080, symSize: 0x30 } - - { offsetInCU: 0x38D, offset: 0x87F39, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCMa', symObjAddr: 0x290, symBinAddr: 0x100E0, symSize: 0x14 } - - { offsetInCU: 0x4FD, offset: 0x880A9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0xFE50, symSize: 0x10 } - - { offsetInCU: 0x5A0, offset: 0x8814C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x70, symBinAddr: 0xFEC0, symSize: 0x10 } - - { offsetInCU: 0x640, offset: 0x881EC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xD0, symBinAddr: 0xFF20, symSize: 0x10 } - - { offsetInCU: 0x703, offset: 0x882AF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x140, symBinAddr: 0xFF90, symSize: 0x10 } - - { offsetInCU: 0x80F, offset: 0x883BB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfC', symObjAddr: 0x1E0, symBinAddr: 0x10030, symSize: 0x20 } - - { offsetInCU: 0x823, offset: 0x883CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfc', symObjAddr: 0x200, symBinAddr: 0x10050, symSize: 0x30 } - - { offsetInCU: 0x859, offset: 0x88405, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCfD', symObjAddr: 0x260, symBinAddr: 0x100B0, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x8844F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x10100, symSize: 0x30 } - - { offsetInCU: 0xA9, offset: 0x884D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x30, symBinAddr: 0x10130, symSize: 0x50 } - - { offsetInCU: 0x1A6, offset: 0x885CE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0xC0, symBinAddr: 0x101C0, symSize: 0x50 } - - { offsetInCU: 0x289, offset: 0x886B1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfcTo', symObjAddr: 0x180, symBinAddr: 0x10280, symSize: 0x30 } - - { offsetInCU: 0x2DD, offset: 0x88705, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCMa', symObjAddr: 0x160, symBinAddr: 0x10260, symSize: 0x20 } - - { offsetInCU: 0x487, offset: 0x888AF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x10100, symSize: 0x30 } - - { offsetInCU: 0x5DD, offset: 0x88A05, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x80, symBinAddr: 0x10180, symSize: 0x40 } - - { offsetInCU: 0x725, offset: 0x88B4D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfC', symObjAddr: 0x110, symBinAddr: 0x10210, symSize: 0x20 } - - { offsetInCU: 0x739, offset: 0x88B61, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfc', symObjAddr: 0x130, symBinAddr: 0x10230, symSize: 0x30 } - - { offsetInCU: 0x76F, offset: 0x88B97, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCfD', symObjAddr: 0x1B0, symBinAddr: 0x102B0, symSize: 0x2B } - - { offsetInCU: 0x61, offset: 0x88C1B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x10, symBinAddr: 0x102F0, symSize: 0x20 } - - { offsetInCU: 0xB7, offset: 0x88C71, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x30, symBinAddr: 0x10310, symSize: 0x10 } - - { offsetInCU: 0x110, offset: 0x88CCA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvgTo', symObjAddr: 0x40, symBinAddr: 0x10320, symSize: 0x40 } - - { offsetInCU: 0x168, offset: 0x88D22, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvsTo', symObjAddr: 0xC0, symBinAddr: 0x103A0, symSize: 0x40 } - - { offsetInCU: 0x1C3, offset: 0x88D7D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x100, symBinAddr: 0x103E0, symSize: 0x10 } - - { offsetInCU: 0x219, offset: 0x88DD3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x110, symBinAddr: 0x103F0, symSize: 0x10 } - - { offsetInCU: 0x272, offset: 0x88E2C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfcTo', symObjAddr: 0x1C0, symBinAddr: 0x104A0, symSize: 0x80 } - - { offsetInCU: 0x2CA, offset: 0x88E84, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x300, symBinAddr: 0x105E0, symSize: 0xA0 } - - { offsetInCU: 0x32C, offset: 0x88EE6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x470, symBinAddr: 0x10750, symSize: 0x30 } - - { offsetInCU: 0x35E, offset: 0x88F18, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC12bindDrawableyyFTo', symObjAddr: 0x520, symBinAddr: 0x10780, symSize: 0xA0 } - - { offsetInCU: 0x3DF, offset: 0x88F99, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC14deleteDrawableyyFTo', symObjAddr: 0x600, symBinAddr: 0x10820, symSize: 0x60 } - - { offsetInCU: 0x44F, offset: 0x89009, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTo', symObjAddr: 0x670, symBinAddr: 0x10890, symSize: 0x50 } - - { offsetInCU: 0x4C1, offset: 0x8907B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfcTo', symObjAddr: 0x780, symBinAddr: 0x109A0, symSize: 0x30 } - - { offsetInCU: 0x535, offset: 0x890EF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCMa', symObjAddr: 0x1A0, symBinAddr: 0x10480, symSize: 0x20 } - - { offsetInCU: 0x55F, offset: 0x89119, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCfETo', symObjAddr: 0x7D0, symBinAddr: 0x109F0, symSize: 0x20 } - - { offsetInCU: 0x65D, offset: 0x89217, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VFTo', symObjAddr: 0xAF0, symBinAddr: 0x10D10, symSize: 0x80 } - - { offsetInCU: 0x69B, offset: 0x89255, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xB70, symBinAddr: 0x10D90, symSize: 0x20 } - - { offsetInCU: 0x6F1, offset: 0x892AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xB90, symBinAddr: 0x10DB0, symSize: 0x10 } - - { offsetInCU: 0x74A, offset: 0x89304, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvgTo', symObjAddr: 0xBA0, symBinAddr: 0x10DC0, symSize: 0x20 } - - { offsetInCU: 0x7A2, offset: 0x8935C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvsTo', symObjAddr: 0xBC0, symBinAddr: 0x10DE0, symSize: 0x20 } - - { offsetInCU: 0x7FD, offset: 0x893B7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvgTo', symObjAddr: 0xBE0, symBinAddr: 0x10E00, symSize: 0x40 } - - { offsetInCU: 0x853, offset: 0x8940D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvsTo', symObjAddr: 0xC50, symBinAddr: 0x10E70, symSize: 0x40 } - - { offsetInCU: 0x8E6, offset: 0x894A0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfcTo', symObjAddr: 0xDC0, symBinAddr: 0x10FE0, symSize: 0x80 } - - { offsetInCU: 0x93E, offset: 0x894F8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0xF90, symBinAddr: 0x111B0, symSize: 0xA0 } - - { offsetInCU: 0x9A0, offset: 0x8955A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x10E0, symBinAddr: 0x11300, symSize: 0x30 } - - { offsetInCU: 0x9D2, offset: 0x8958C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC11deviceScaleSfyFTo', symObjAddr: 0x1110, symBinAddr: 0x11330, symSize: 0xB0 } - - { offsetInCU: 0xA53, offset: 0x8960D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTo', symObjAddr: 0x11D0, symBinAddr: 0x113E0, symSize: 0x30 } - - { offsetInCU: 0xAB1, offset: 0x8966B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCfETo', symObjAddr: 0x1250, symBinAddr: 0x11460, symSize: 0x20 } - - { offsetInCU: 0xC63, offset: 0x8981D, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfC12CanvasNative15NSCTouchHandlerC7PointerV_Tgm5', symObjAddr: 0x1470, symBinAddr: 0x115D0, symSize: 0x80 } - - { offsetInCU: 0xCE6, offset: 0x898A0, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCs5UInt8V_Tgm5', symObjAddr: 0x1570, symBinAddr: 0x11650, symSize: 0x70 } - - { offsetInCU: 0xD6A, offset: 0x89924, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOy', symObjAddr: 0x1750, symBinAddr: 0x11830, symSize: 0x40 } - - { offsetInCU: 0xD7E, offset: 0x89938, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOe', symObjAddr: 0x1790, symBinAddr: 0x11870, symSize: 0x40 } - - { offsetInCU: 0xD92, offset: 0x8994C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCMa', symObjAddr: 0x17D0, symBinAddr: 0x118B0, symSize: 0x20 } - - { offsetInCU: 0xE6C, offset: 0x89A26, size: 0x8, addend: 0x0, symName: '_$sSaySayxGqd__c7ElementQyd__RszSTRd__lufCs5UInt8V_10Foundation4DataVTgm5Tf4g_n', symObjAddr: 0x1650, symBinAddr: 0x11730, symSize: 0x100 } - - { offsetInCU: 0x112B, offset: 0x89CE5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvg', symObjAddr: 0x80, symBinAddr: 0x10360, symSize: 0x40 } - - { offsetInCU: 0x11A8, offset: 0x89D62, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfc', symObjAddr: 0x120, symBinAddr: 0x10400, symSize: 0x80 } - - { offsetInCU: 0x11EF, offset: 0x89DA9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0x240, symBinAddr: 0x10520, symSize: 0xC0 } - - { offsetInCU: 0x1251, offset: 0x89E0B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x3A0, symBinAddr: 0x10680, symSize: 0xD0 } - - { offsetInCU: 0x12DA, offset: 0x89E94, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtF', symObjAddr: 0x660, symBinAddr: 0x10880, symSize: 0x10 } - - { offsetInCU: 0x12FB, offset: 0x89EB5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfC', symObjAddr: 0x6C0, symBinAddr: 0x108E0, symSize: 0x90 } - - { offsetInCU: 0x130F, offset: 0x89EC9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfc', symObjAddr: 0x750, symBinAddr: 0x10970, symSize: 0x30 } - - { offsetInCU: 0x1428, offset: 0x89FE2, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VF', symObjAddr: 0x7F0, symBinAddr: 0x10A10, symSize: 0x300 } - - { offsetInCU: 0x17D2, offset: 0x8A38C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvg', symObjAddr: 0xC20, symBinAddr: 0x10E40, symSize: 0x30 } - - { offsetInCU: 0x180F, offset: 0x8A3C9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvs', symObjAddr: 0xC90, symBinAddr: 0x10EB0, symSize: 0x40 } - - { offsetInCU: 0x1836, offset: 0x8A3F0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM', symObjAddr: 0xCD0, symBinAddr: 0x10EF0, symSize: 0x40 } - - { offsetInCU: 0x185B, offset: 0x8A415, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM.resume.0', symObjAddr: 0xD10, symBinAddr: 0x10F30, symSize: 0x10 } - - { offsetInCU: 0x1882, offset: 0x8A43C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfC', symObjAddr: 0xD20, symBinAddr: 0x10F40, symSize: 0x20 } - - { offsetInCU: 0x1896, offset: 0x8A450, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfc', symObjAddr: 0xD40, symBinAddr: 0x10F60, symSize: 0x80 } - - { offsetInCU: 0x18DD, offset: 0x8A497, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0xED0, symBinAddr: 0x110F0, symSize: 0xC0 } - - { offsetInCU: 0x193A, offset: 0x8A4F4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x1030, symBinAddr: 0x11250, symSize: 0xB0 } - - { offsetInCU: 0x19D6, offset: 0x8A590, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x1270, symBinAddr: 0x11480, symSize: 0xB0 } - - { offsetInCU: 0x1AB8, offset: 0x8A672, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFs5UInt8V_Tg5', symObjAddr: 0x13D0, symBinAddr: 0x11530, symSize: 0xA0 } - - { offsetInCU: 0x1BC4, offset: 0x8A77E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTf4ddn_n', symObjAddr: 0x15E0, symBinAddr: 0x116C0, symSize: 0x70 } - - { offsetInCU: 0x1CBF, offset: 0x8A879, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTf4dn_n', symObjAddr: 0x17F0, symBinAddr: 0x118D0, symSize: 0x410 } - - { offsetInCU: 0x4F, offset: 0x8AC91, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LLSo012OS_dispatch_E0CvpZ', symObjAddr: 0x980, symBinAddr: 0x1379140, symSize: 0x0 } - - { offsetInCU: 0x5D, offset: 0x8AC9F, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x11ED0, symSize: 0x30 } - - { offsetInCU: 0x75, offset: 0x8ACB7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LL_WZ', symObjAddr: 0x30, symBinAddr: 0x11F00, symSize: 0xF0 } - - { offsetInCU: 0xBC, offset: 0x8ACFE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0x130, symBinAddr: 0x12000, symSize: 0x40 } - - { offsetInCU: 0x130, offset: 0x8AD72, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTo', symObjAddr: 0x3C0, symBinAddr: 0x12290, symSize: 0x80 } - - { offsetInCU: 0x18F, offset: 0x8ADD1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfcTo', symObjAddr: 0x490, symBinAddr: 0x12360, symSize: 0x30 } - - { offsetInCU: 0x1E2, offset: 0x8AE24, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTf4nnnd_n', symObjAddr: 0x500, symBinAddr: 0x123D0, symSize: 0x200 } - - { offsetInCU: 0x261, offset: 0x8AEA3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfETo', symObjAddr: 0x4F0, symBinAddr: 0x123C0, symSize: 0x10 } - - { offsetInCU: 0x29D, offset: 0x8AEDF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCMa', symObjAddr: 0x700, symBinAddr: 0x125D0, symSize: 0x20 } - - { offsetInCU: 0x2BC, offset: 0x8AEFE, size: 0x8, addend: 0x0, symName: '_$s10ObjectiveC8ObjCBoolVIeyBy_SbIegy_TRTA', symObjAddr: 0x740, symBinAddr: 0x12610, symSize: 0x20 } - - { offsetInCU: 0x2E5, offset: 0x8AF27, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_TA', symObjAddr: 0x790, symBinAddr: 0x12660, symSize: 0x20 } - - { offsetInCU: 0x2F9, offset: 0x8AF3B, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x7B0, symBinAddr: 0x12680, symSize: 0x20 } - - { offsetInCU: 0x30D, offset: 0x8AF4F, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x7D0, symBinAddr: 0x126A0, symSize: 0x10 } - - { offsetInCU: 0x321, offset: 0x8AF63, size: 0x8, addend: 0x0, symName: '_$sSay8Dispatch0A13WorkItemFlagsVGMa', symObjAddr: 0x850, symBinAddr: 0x126E0, symSize: 0x50 } - - { offsetInCU: 0x335, offset: 0x8AF77, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0x8D0, symBinAddr: 0x12730, symSize: 0x20 } - - { offsetInCU: 0x369, offset: 0x8AFAB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU_TA', symObjAddr: 0x910, symBinAddr: 0x12770, symSize: 0x20 } - - { offsetInCU: 0x4FE, offset: 0x8B140, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x120, symBinAddr: 0x11FF0, symSize: 0x10 } - - { offsetInCU: 0x58B, offset: 0x8B1CD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZ', symObjAddr: 0x170, symBinAddr: 0x12040, symSize: 0x10 } - - { offsetInCU: 0x59F, offset: 0x8B1E1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_', symObjAddr: 0x180, symBinAddr: 0x12050, symSize: 0x240 } - - { offsetInCU: 0x678, offset: 0x8B2BA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfC', symObjAddr: 0x440, symBinAddr: 0x12310, symSize: 0x20 } - - { offsetInCU: 0x68C, offset: 0x8B2CE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfc', symObjAddr: 0x460, symBinAddr: 0x12330, symSize: 0x30 } - - { offsetInCU: 0x6C2, offset: 0x8B304, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfD', symObjAddr: 0x4C0, symBinAddr: 0x12390, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x8B3AA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x127E0, symSize: 0x20 } - - { offsetInCU: 0x77, offset: 0x8B3FA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfcTo', symObjAddr: 0x70, symBinAddr: 0x12850, symSize: 0x30 } - - { offsetInCU: 0xCB, offset: 0x8B44E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCMa', symObjAddr: 0x50, symBinAddr: 0x12830, symSize: 0x20 } - - { offsetInCU: 0x216, offset: 0x8B599, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x127E0, symSize: 0x20 } - - { offsetInCU: 0x22A, offset: 0x8B5AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfc', symObjAddr: 0x20, symBinAddr: 0x12800, symSize: 0x30 } - - { offsetInCU: 0x266, offset: 0x8B5E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCfD', symObjAddr: 0xA0, symBinAddr: 0x12880, symSize: 0x2B } - - { offsetInCU: 0x26, offset: 0x8B632, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x3D5F80, symSize: 0x3990 } - - { offsetInCU: 0x40, offset: 0x8B64C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0xEEC0, symBinAddr: 0xB71A20, symSize: 0x0 } - - { offsetInCU: 0x92, offset: 0x8B69E, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0x14EC0, symBinAddr: 0xB77A20, symSize: 0x0 } - - { offsetInCU: 0xF6, offset: 0x8B702, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0x14EE8, symBinAddr: 0xB77A48, symSize: 0x0 } - - { offsetInCU: 0x10C, offset: 0x8B718, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x152F0, symBinAddr: 0xB77E50, symSize: 0x0 } - - { offsetInCU: 0x123, offset: 0x8B72F, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0x14F30, symBinAddr: 0xB77A90, symSize: 0x0 } - - { offsetInCU: 0xE22, offset: 0x8C42E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x3D5F80, symSize: 0x3990 } - - { offsetInCU: 0x4DAE, offset: 0x903BA, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0xE6E0, symBinAddr: 0x3E4660, symSize: 0x3E0 } - - { offsetInCU: 0x4FF1, offset: 0x905FD, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x7C20, symBinAddr: 0x3DDBA0, symSize: 0x270 } - - { offsetInCU: 0x582C, offset: 0x90E38, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x3990, symBinAddr: 0x3D9910, symSize: 0xA10 } - - { offsetInCU: 0x684B, offset: 0x91E57, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x43A0, symBinAddr: 0x3DA320, symSize: 0xA10 } - - { offsetInCU: 0x6EE9, offset: 0x924F5, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x4DB0, symBinAddr: 0x3DAD30, symSize: 0x2B0 } - - { offsetInCU: 0x74BC, offset: 0x92AC8, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x5060, symBinAddr: 0x3DAFE0, symSize: 0xCD0 } - - { offsetInCU: 0x83FE, offset: 0x93A0A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x5D30, symBinAddr: 0x3DBCB0, symSize: 0xB40 } - - { offsetInCU: 0x8F67, offset: 0x94573, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x6870, symBinAddr: 0x3DC7F0, symSize: 0x13B0 } - - { offsetInCU: 0xA567, offset: 0x95B73, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x7FF0, symBinAddr: 0x3DDF70, symSize: 0x2A30 } - - { offsetInCU: 0xDC6D, offset: 0x99279, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x7E90, symBinAddr: 0x3DDE10, symSize: 0x160 } - - { offsetInCU: 0xDEE7, offset: 0x994F3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0xAA20, symBinAddr: 0x3E09A0, symSize: 0x30 } - - { offsetInCU: 0xDFDC, offset: 0x995E8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0xAA50, symBinAddr: 0x3E09D0, symSize: 0x50 } - - { offsetInCU: 0xE051, offset: 0x9965D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0xAAA0, symBinAddr: 0x3E0A20, symSize: 0x10 } - - { offsetInCU: 0xE0EC, offset: 0x996F8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0xAAB0, symBinAddr: 0x3E0A30, symSize: 0xB0 } - - { offsetInCU: 0xE217, offset: 0x99823, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0xAB60, symBinAddr: 0x3E0AE0, symSize: 0x10 } - - { offsetInCU: 0xE4E9, offset: 0x99AF5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0xAB70, symBinAddr: 0x3E0AF0, symSize: 0x21A0 } - - { offsetInCU: 0x1118F, offset: 0x9C79B, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0xEAC0, symBinAddr: 0x3E4A40, symSize: 0x2D1 } - - { offsetInCU: 0x117CF, offset: 0x9CDDB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0xCD10, symBinAddr: 0x3E2C90, symSize: 0x20 } - - { offsetInCU: 0x11C6C, offset: 0x9D278, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0xCD30, symBinAddr: 0x3E2CB0, symSize: 0x19B0 } - - { offsetInCU: 0x26, offset: 0x9E328, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x3E4D20, symSize: 0x800 } - - { offsetInCU: 0x41, offset: 0x9E343, size: 0x8, addend: 0x0, symName: _aes_nohw_rcon, symObjAddr: 0x1B10, symBinAddr: 0xB77F30, symSize: 0x0 } - - { offsetInCU: 0x484, offset: 0x9E786, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x3E4D20, symSize: 0x800 } - - { offsetInCU: 0x1B2B, offset: 0x9FE2D, size: 0x8, addend: 0x0, symName: _aes_nohw_sub_bytes, symObjAddr: 0x15F0, symBinAddr: 0x3E6310, symSize: 0x300 } - - { offsetInCU: 0x32EE, offset: 0xA15F0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_encrypt, symObjAddr: 0x800, symBinAddr: 0x3E5520, symSize: 0x80 } - - { offsetInCU: 0x33DC, offset: 0xA16DE, size: 0x8, addend: 0x0, symName: _aes_nohw_expand_round_keys, symObjAddr: 0x880, symBinAddr: 0x3E55A0, symSize: 0x1A0 } - - { offsetInCU: 0x386D, offset: 0xA1B6F, size: 0x8, addend: 0x0, symName: _aes_nohw_to_batch, symObjAddr: 0xA20, symBinAddr: 0x3E5740, symSize: 0x420 } - - { offsetInCU: 0x3D7D, offset: 0xA207F, size: 0x8, addend: 0x0, symName: _aes_nohw_encrypt_batch, symObjAddr: 0xE40, symBinAddr: 0x3E5B60, symSize: 0x380 } - - { offsetInCU: 0x424C, offset: 0xA254E, size: 0x8, addend: 0x0, symName: _aes_nohw_from_batch, symObjAddr: 0x11C0, symBinAddr: 0x3E5EE0, symSize: 0x250 } - - { offsetInCU: 0x498D, offset: 0xA2C8F, size: 0x8, addend: 0x0, symName: _aes_nohw_shift_rows, symObjAddr: 0x18F0, symBinAddr: 0x3E6610, symSize: 0x149 } - - { offsetInCU: 0x4BF9, offset: 0xA2EFB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_ctr32_encrypt_blocks, symObjAddr: 0x1410, symBinAddr: 0x3E6130, symSize: 0x1E0 } - - { offsetInCU: 0x26, offset: 0xA331C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x3E6760, symSize: 0x2DC } - - { offsetInCU: 0x1D2, offset: 0xA34C8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x3E6760, symSize: 0x2DC } - - { offsetInCU: 0x26, offset: 0xA3721, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x3E6A40, symSize: 0x87 } - - { offsetInCU: 0x34, offset: 0xA372F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x3E6A40, symSize: 0x87 } - - { offsetInCU: 0x26, offset: 0xA383F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x3E6AD0, symSize: 0x46 } - - { offsetInCU: 0x34, offset: 0xA384D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x3E6AD0, symSize: 0x46 } - - { offsetInCU: 0x86, offset: 0xA39B0, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x15F0, symBinAddr: 0xB77FB0, symSize: 0x0 } - - { offsetInCU: 0xB8, offset: 0xA39E2, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1580, symBinAddr: 0xB77F40, symSize: 0x0 } - - { offsetInCU: 0xDA, offset: 0xA3A04, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x15B0, symBinAddr: 0xB77F70, symSize: 0x0 } - - { offsetInCU: 0xF0, offset: 0xA3A1A, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x15E0, symBinAddr: 0xB77FA0, symSize: 0x0 } - - { offsetInCU: 0x3B7, offset: 0xA3CE1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x150, symBinAddr: 0x3E6B20, symSize: 0x20 } - - { offsetInCU: 0x594, offset: 0xA3EBE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x250, symBinAddr: 0x3E6B40, symSize: 0x20 } - - { offsetInCU: 0x63F, offset: 0xA3F69, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x340, symBinAddr: 0x3E6B60, symSize: 0x3A0 } - - { offsetInCU: 0x11A7, offset: 0xA4AD1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x6E0, symBinAddr: 0x3E6F00, symSize: 0x140 } - - { offsetInCU: 0x14A2, offset: 0xA4DCC, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x820, symBinAddr: 0x3E7040, symSize: 0x6B0 } - - { offsetInCU: 0x26DA, offset: 0xA6004, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xED0, symBinAddr: 0x3E76F0, symSize: 0x380 } - - { offsetInCU: 0x2D37, offset: 0xA6661, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0x1250, symBinAddr: 0x3E7A70, symSize: 0x170 } - - { offsetInCU: 0x2F2F, offset: 0xA6859, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0x13C0, symBinAddr: 0x3E7BE0, symSize: 0x1BF } - - { offsetInCU: 0x26, offset: 0xA6BA4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x3E7DA0, symSize: 0x50 } - - { offsetInCU: 0xFA, offset: 0xA6C78, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x3E7DA0, symSize: 0x50 } - - { offsetInCU: 0x18D, offset: 0xA6D0B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x50, symBinAddr: 0x3E7DF0, symSize: 0x60 } - - { offsetInCU: 0x2F1, offset: 0xA6E6F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0xB0, symBinAddr: 0x3E7E50, symSize: 0x90 } - - { offsetInCU: 0x4C6, offset: 0xA7044, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0x140, symBinAddr: 0x3E7EE0, symSize: 0x20 } - - { offsetInCU: 0x5E3, offset: 0xA7161, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0x160, symBinAddr: 0x3E7F00, symSize: 0xB0 } - - { offsetInCU: 0x696, offset: 0xA7214, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x210, symBinAddr: 0x3E7FB0, symSize: 0x70 } - - { offsetInCU: 0x861, offset: 0xA73DF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x280, symBinAddr: 0x3E8020, symSize: 0x170 } - - { offsetInCU: 0xB67, offset: 0xA76E5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x3F0, symBinAddr: 0x3E8190, symSize: 0x270 } - - { offsetInCU: 0xE6A, offset: 0xA79E8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x660, symBinAddr: 0x3E8400, symSize: 0x1A0 } - - { offsetInCU: 0x105D, offset: 0xA7BDB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x800, symBinAddr: 0x3E85A0, symSize: 0x280 } - - { offsetInCU: 0x128C, offset: 0xA7E0A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0xC20, symBinAddr: 0x3E8820, symSize: 0x20 } - - { offsetInCU: 0x12F3, offset: 0xA7E71, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0xC40, symBinAddr: 0x3E8840, symSize: 0x20 } - - { offsetInCU: 0x132A, offset: 0xA7EA8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0xC60, symBinAddr: 0x3E8860, symSize: 0x10 } - - { offsetInCU: 0x13AC, offset: 0xA7F2A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0xC70, symBinAddr: 0x3E8870, symSize: 0x4A } - - { offsetInCU: 0x26, offset: 0xA80B6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x3E88C0, symSize: 0x129 } - - { offsetInCU: 0x34, offset: 0xA80C4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x3E88C0, symSize: 0x129 } - - { offsetInCU: 0x34, offset: 0xA81C6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_ia32cap_P, symObjAddr: 0x3F0, symBinAddr: 0x13804C0, symSize: 0x0 } - - { offsetInCU: 0x26, offset: 0xA821B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0x3E89F0, symSize: 0xF8 } - - { offsetInCU: 0xD5, offset: 0xA82CA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0x3E89F0, symSize: 0xF8 } - - { offsetInCU: 0x26, offset: 0xA841F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0x3E8AF0, symSize: 0x1210 } - - { offsetInCU: 0x92E, offset: 0xA8D27, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0x3E8AF0, symSize: 0x1210 } - - { offsetInCU: 0x5347, offset: 0xAD740, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base_adx, symObjAddr: 0x1210, symBinAddr: 0x3E9D00, symSize: 0x1E50 } - - { offsetInCU: 0x9B2F, offset: 0xB1F28, size: 0x8, addend: 0x0, symName: _inline_x25519_ge_dbl_4, symObjAddr: 0x3060, symBinAddr: 0x3EBB50, symSize: 0x361 } - - { offsetInCU: 0x26, offset: 0xB3315, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0x3EBEC0, symSize: 0xD0 } - - { offsetInCU: 0x303, offset: 0xB35F2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0x3EBEC0, symSize: 0xD0 } - - { offsetInCU: 0x5A4, offset: 0xB3893, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_update, symObjAddr: 0xD0, symBinAddr: 0x3EBF90, symSize: 0x1C0 } - - { offsetInCU: 0x764, offset: 0xB3A53, size: 0x8, addend: 0x0, symName: _poly1305_blocks, symObjAddr: 0x5F0, symBinAddr: 0x3EC4B0, symSize: 0x780 } - - { offsetInCU: 0x903, offset: 0xB3BF2, size: 0x8, addend: 0x0, symName: _poly1305_first_block, symObjAddr: 0x290, symBinAddr: 0x3EC150, symSize: 0x360 } - - { offsetInCU: 0xEFC, offset: 0xB41EB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_finish, symObjAddr: 0xD70, symBinAddr: 0x3ECC30, symSize: 0xAA2 } - - { offsetInCU: 0x10, offset: 0xB4974, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0x3ED6D2, symSize: 0x2AF } - - { offsetInCU: 0x51, offset: 0xB49B5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0x3ED6D2, symSize: 0x2AF } - - { offsetInCU: 0x10, offset: 0xB49AA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0x3ED981, symSize: 0x1F4 } - - { offsetInCU: 0x54, offset: 0xB49EE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0x3ED981, symSize: 0x1F4 } - - { offsetInCU: 0x26, offset: 0xB49F6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x3EDB80, symSize: 0x490 } - - { offsetInCU: 0x76, offset: 0xB4A46, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0xB79000, symSize: 0x0 } - - { offsetInCU: 0xFA, offset: 0xB4ACA, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0xB9E000, symSize: 0x0 } - - { offsetInCU: 0x35B, offset: 0xB4D2B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x3EDB80, symSize: 0x490 } - - { offsetInCU: 0xC5A, offset: 0xB562A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x490, symBinAddr: 0x3EE010, symSize: 0x300 } - - { offsetInCU: 0x1135, offset: 0xB5B05, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x790, symBinAddr: 0x3EE310, symSize: 0x25D } - - { offsetInCU: 0x10, offset: 0xB5ECA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x3EE580, symSize: 0x3A0 } - - { offsetInCU: 0x48, offset: 0xB5F02, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x3EE580, symSize: 0x3A0 } - - { offsetInCU: 0x4D, offset: 0xB5F07, size: 0x8, addend: 0x0, symName: ChaCha20_ssse3, symObjAddr: 0x3A0, symBinAddr: 0x3EE920, symSize: 0x220 } - - { offsetInCU: 0x60, offset: 0xB5F1A, size: 0x8, addend: 0x0, symName: ChaCha20_4x, symObjAddr: 0x5C0, symBinAddr: 0x3EEB40, symSize: 0xA20 } - - { offsetInCU: 0x76, offset: 0xB5F30, size: 0x8, addend: 0x0, symName: ChaCha20_8x, symObjAddr: 0xFE0, symBinAddr: 0x3EF560, symSize: 0xB4C } - - { offsetInCU: 0x10, offset: 0xB5F42, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0x3F00C0, symSize: 0x40 } - - { offsetInCU: 0x48, offset: 0xB5F7A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0x3F00C0, symSize: 0x40 } - - { offsetInCU: 0x4D, offset: 0xB5F7F, size: 0x8, addend: 0x0, symName: _aesni_encrypt2, symObjAddr: 0x40, symBinAddr: 0x3F0100, symSize: 0x60 } - - { offsetInCU: 0x63, offset: 0xB5F95, size: 0x8, addend: 0x0, symName: _aesni_encrypt3, symObjAddr: 0xA0, symBinAddr: 0x3F0160, symSize: 0x70 } - - { offsetInCU: 0x79, offset: 0xB5FAB, size: 0x8, addend: 0x0, symName: _aesni_encrypt4, symObjAddr: 0x110, symBinAddr: 0x3F01D0, symSize: 0x90 } - - { offsetInCU: 0x8F, offset: 0xB5FC1, size: 0x8, addend: 0x0, symName: _aesni_encrypt6, symObjAddr: 0x1A0, symBinAddr: 0x3F0260, symSize: 0xE0 } - - { offsetInCU: 0xA5, offset: 0xB5FD7, size: 0x8, addend: 0x0, symName: _aesni_encrypt8, symObjAddr: 0x280, symBinAddr: 0x3F0340, symSize: 0x110 } - - { offsetInCU: 0xD9, offset: 0xB600B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x390, symBinAddr: 0x3F0450, symSize: 0x940 } - - { offsetInCU: 0xEA, offset: 0xB601C, size: 0x8, addend: 0x0, symName: __aesni_set_encrypt_key, symObjAddr: 0xCD0, symBinAddr: 0x3F0D90, symSize: 0x44D } - - { offsetInCU: 0x10, offset: 0xB6012, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0x3F11E0, symSize: 0x160 } - - { offsetInCU: 0x3B, offset: 0xB603D, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0x3F11E0, symSize: 0x160 } - - { offsetInCU: 0x54, offset: 0xB6056, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core_2x, symObjAddr: 0x160, symBinAddr: 0x3F1340, symSize: 0x290 } - - { offsetInCU: 0x68, offset: 0xB606A, size: 0x8, addend: 0x0, symName: _vpaes_schedule_core, symObjAddr: 0x3F0, symBinAddr: 0x3F15D0, symSize: 0xF0 } - - { offsetInCU: 0x7F, offset: 0xB6081, size: 0x8, addend: 0x0, symName: _vpaes_schedule_round, symObjAddr: 0x4E0, symBinAddr: 0x3F16C0, symSize: 0x21 } - - { offsetInCU: 0x99, offset: 0xB609B, size: 0x8, addend: 0x0, symName: _vpaes_schedule_low_round, symObjAddr: 0x501, symBinAddr: 0x3F16E1, symSize: 0x9F } - - { offsetInCU: 0xAF, offset: 0xB60B1, size: 0x8, addend: 0x0, symName: _vpaes_schedule_transform, symObjAddr: 0x5A0, symBinAddr: 0x3F1780, symSize: 0x30 } - - { offsetInCU: 0xC2, offset: 0xB60C4, size: 0x8, addend: 0x0, symName: _vpaes_schedule_mangle, symObjAddr: 0x5D0, symBinAddr: 0x3F17B0, symSize: 0x50 } - - { offsetInCU: 0xE9, offset: 0xB60EB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_set_encrypt_key, symObjAddr: 0x620, symBinAddr: 0x3F1800, symSize: 0x30 } - - { offsetInCU: 0xF7, offset: 0xB60F9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_encrypt, symObjAddr: 0x650, symBinAddr: 0x3F1830, symSize: 0x20 } - - { offsetInCU: 0x11A, offset: 0xB611C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_ctr32_encrypt_blocks, symObjAddr: 0x670, symBinAddr: 0x3F1850, symSize: 0xD0 } - - { offsetInCU: 0x112, offset: 0xB6114, size: 0x8, addend: 0x0, symName: _vpaes_preheat, symObjAddr: 0x740, symBinAddr: 0x3F1920, symSize: 0x31 } - - { offsetInCU: 0x10, offset: 0xB6124, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x3F1960, symSize: 0x2A0 } - - { offsetInCU: 0x45, offset: 0xB6159, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x3F1960, symSize: 0x2A0 } - - { offsetInCU: 0x4C, offset: 0xB6160, size: 0x8, addend: 0x0, symName: bn_mul4x_mont, symObjAddr: 0x2A0, symBinAddr: 0x3F1C00, symSize: 0x560 } - - { offsetInCU: 0x62, offset: 0xB6176, size: 0x8, addend: 0x0, symName: bn_sqr8x_mont, symObjAddr: 0x800, symBinAddr: 0x3F2160, symSize: 0x220 } - - { offsetInCU: 0x79, offset: 0xB618D, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont, symObjAddr: 0xA20, symBinAddr: 0x3F2380, symSize: 0x570 } - - { offsetInCU: 0x10, offset: 0xB619C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0x3F2900, symSize: 0x660 } - - { offsetInCU: 0x4D, offset: 0xB61D9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0x3F2900, symSize: 0x660 } - - { offsetInCU: 0x54, offset: 0xB61E0, size: 0x8, addend: 0x0, symName: bn_mul4x_mont_gather5, symObjAddr: 0x660, symBinAddr: 0x3F2F60, symSize: 0x100 } - - { offsetInCU: 0x63, offset: 0xB61EF, size: 0x8, addend: 0x0, symName: mul4x_internal, symObjAddr: 0x760, symBinAddr: 0x3F3060, symSize: 0x7E0 } - - { offsetInCU: 0x85, offset: 0xB6211, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_power5, symObjAddr: 0xF40, symBinAddr: 0x3F3840, symSize: 0x180 } - - { offsetInCU: 0xA3, offset: 0xB622F, size: 0x8, addend: 0x0, symName: __bn_sqr8x_internal, symObjAddr: 0x10C0, symBinAddr: 0x3F39C0, symSize: 0x579 } - - { offsetInCU: 0xAA, offset: 0xB6236, size: 0x8, addend: 0x0, symName: __bn_sqr8x_reduction, symObjAddr: 0x1639, symBinAddr: 0x3F3F39, symSize: 0x347 } - - { offsetInCU: 0xC0, offset: 0xB624C, size: 0x8, addend: 0x0, symName: __bn_post4x_internal, symObjAddr: 0x1980, symBinAddr: 0x3F4280, symSize: 0xA0 } - - { offsetInCU: 0xD9, offset: 0xB6265, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont_gather5, symObjAddr: 0x1A20, symBinAddr: 0x3F4320, symSize: 0xE0 } - - { offsetInCU: 0xE8, offset: 0xB6274, size: 0x8, addend: 0x0, symName: mulx4x_internal, symObjAddr: 0x1B00, symBinAddr: 0x3F4400, symSize: 0x7E0 } - - { offsetInCU: 0xF9, offset: 0xB6285, size: 0x8, addend: 0x0, symName: bn_powerx5, symObjAddr: 0x22E0, symBinAddr: 0x3F4BE0, symSize: 0x160 } - - { offsetInCU: 0x128, offset: 0xB62B4, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_internal, symObjAddr: 0x2440, symBinAddr: 0x3F4D40, symSize: 0x637 } - - { offsetInCU: 0x12F, offset: 0xB62BB, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_reduction, symObjAddr: 0x2A77, symBinAddr: 0x3F5377, symSize: 0x329 } - - { offsetInCU: 0x145, offset: 0xB62D1, size: 0x8, addend: 0x0, symName: __bn_postx4x_internal, symObjAddr: 0x2DA0, symBinAddr: 0x3F56A0, symSize: 0x90 } - - { offsetInCU: 0x163, offset: 0xB62EF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_scatter5, symObjAddr: 0x2E30, symBinAddr: 0x3F5730, symSize: 0x30 } - - { offsetInCU: 0x178, offset: 0xB6304, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_gather5, symObjAddr: 0x2E60, symBinAddr: 0x3F5760, symSize: 0x27F } - - { offsetInCU: 0x10, offset: 0xB6306, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0x3F59E0, symSize: 0x80 } - - { offsetInCU: 0x4A, offset: 0xB6340, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0x3F59E0, symSize: 0x80 } - - { offsetInCU: 0x64, offset: 0xB635A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0x80, symBinAddr: 0x3F5A60, symSize: 0x360 } - - { offsetInCU: 0x7E, offset: 0xB6374, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x3E0, symBinAddr: 0x3F5DC0, symSize: 0x300 } - - { offsetInCU: 0x85, offset: 0xB637B, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_mul_montx, symObjAddr: 0x6E0, symBinAddr: 0x3F60C0, symSize: 0x3C0 } - - { offsetInCU: 0x9B, offset: 0xB6391, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_sqr_montx, symObjAddr: 0xAA0, symBinAddr: 0x3F6480, symSize: 0x320 } - - { offsetInCU: 0xB5, offset: 0xB63AB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0xDC0, symBinAddr: 0x3F67A0, symSize: 0xA0 } - - { offsetInCU: 0xC4, offset: 0xB63BA, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montq, symObjAddr: 0xE60, symBinAddr: 0x3F6840, symSize: 0x240 } - - { offsetInCU: 0xE1, offset: 0xB63D7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x10A0, symBinAddr: 0x3F6A80, symSize: 0x80 } - - { offsetInCU: 0xF0, offset: 0xB63E6, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montq, symObjAddr: 0x1120, symBinAddr: 0x3F6B00, symSize: 0x1A0 } - - { offsetInCU: 0x106, offset: 0xB63FC, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montx, symObjAddr: 0x12C0, symBinAddr: 0x3F6CA0, symSize: 0x260 } - - { offsetInCU: 0x11C, offset: 0xB6412, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montx, symObjAddr: 0x1520, symBinAddr: 0x3F6F00, symSize: 0x1C0 } - - { offsetInCU: 0x142, offset: 0xB6438, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x16E0, symBinAddr: 0x3F70C0, symSize: 0xE0 } - - { offsetInCU: 0x158, offset: 0xB644E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x17C0, symBinAddr: 0x3F71A0, symSize: 0xC0 } - - { offsetInCU: 0x162, offset: 0xB6458, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w5, symObjAddr: 0x1880, symBinAddr: 0x3F7260, symSize: 0xC0 } - - { offsetInCU: 0x178, offset: 0xB646E, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w7, symObjAddr: 0x1940, symBinAddr: 0x3F7320, symSize: 0xE0 } - - { offsetInCU: 0x188, offset: 0xB647E, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_toq, symObjAddr: 0x1A20, symBinAddr: 0x3F7400, symSize: 0x60 } - - { offsetInCU: 0x1A0, offset: 0xB6496, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromq, symObjAddr: 0x1A80, symBinAddr: 0x3F7460, symSize: 0x60 } - - { offsetInCU: 0x1B1, offset: 0xB64A7, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subq, symObjAddr: 0x1AE0, symBinAddr: 0x3F74C0, symSize: 0x40 } - - { offsetInCU: 0x1CC, offset: 0xB64C2, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2q, symObjAddr: 0x1B20, symBinAddr: 0x3F7500, symSize: 0x60 } - - { offsetInCU: 0x1ED, offset: 0xB64E3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x1B80, symBinAddr: 0x3F7560, symSize: 0x320 } - - { offsetInCU: 0x200, offset: 0xB64F6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x1EA0, symBinAddr: 0x3F7880, symSize: 0x780 } - - { offsetInCU: 0x21D, offset: 0xB6513, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0x2620, symBinAddr: 0x3F8000, symSize: 0x580 } - - { offsetInCU: 0x222, offset: 0xB6518, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_tox, symObjAddr: 0x2BA0, symBinAddr: 0x3F8580, symSize: 0x60 } - - { offsetInCU: 0x23A, offset: 0xB6530, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromx, symObjAddr: 0x2C00, symBinAddr: 0x3F85E0, symSize: 0x60 } - - { offsetInCU: 0x24B, offset: 0xB6541, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subx, symObjAddr: 0x2C60, symBinAddr: 0x3F8640, symSize: 0x60 } - - { offsetInCU: 0x266, offset: 0xB655C, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2x, symObjAddr: 0x2CC0, symBinAddr: 0x3F86A0, symSize: 0x60 } - - { offsetInCU: 0x27F, offset: 0xB6575, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_doublex, symObjAddr: 0x2D20, symBinAddr: 0x3F8700, symSize: 0x320 } - - { offsetInCU: 0x292, offset: 0xB6588, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_addx, symObjAddr: 0x3040, symBinAddr: 0x3F8A20, symSize: 0x760 } - - { offsetInCU: 0x2AF, offset: 0xB65A5, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_add_affinex, symObjAddr: 0x37A0, symBinAddr: 0x3F9180, symSize: 0x555 } - - { offsetInCU: 0x10, offset: 0xB65A4, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0x3F96E0, symSize: 0x5A0 } - - { offsetInCU: 0x3D, offset: 0xB65D1, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0x3F96E0, symSize: 0x5A0 } - - { offsetInCU: 0x61, offset: 0xB65F5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_decrypt, symObjAddr: 0x5A0, symBinAddr: 0x3F9C80, symSize: 0x140 } - - { offsetInCU: 0x63, offset: 0xB65F7, size: 0x8, addend: 0x0, symName: _aesni_ctr32_6x, symObjAddr: 0x6E0, symBinAddr: 0x3F9DC0, symSize: 0x180 } - - { offsetInCU: 0x8D, offset: 0xB6621, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_encrypt, symObjAddr: 0x860, symBinAddr: 0x3F9F40, symSize: 0x423 } - - { offsetInCU: 0x10, offset: 0xB661C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x3FA380, symSize: 0x260 } - - { offsetInCU: 0x48, offset: 0xB6654, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x3FA380, symSize: 0x260 } - - { offsetInCU: 0x5F, offset: 0xB666B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x260, symBinAddr: 0x3FA5E0, symSize: 0xC0 } - - { offsetInCU: 0x75, offset: 0xB6681, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x320, symBinAddr: 0x3FA6A0, symSize: 0x660 } - - { offsetInCU: 0x88, offset: 0xB6694, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_avx, symObjAddr: 0x980, symBinAddr: 0x3FAD00, symSize: 0x1A0 } - - { offsetInCU: 0x9F, offset: 0xB66AB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_avx, symObjAddr: 0xB20, symBinAddr: 0x3FAEA0, symSize: 0x697 } - - { offsetInCU: 0x10, offset: 0xB66AA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x3FB540, symSize: 0x1240 } - - { offsetInCU: 0x51, offset: 0xB66EB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x3FB540, symSize: 0x1240 } - - { offsetInCU: 0x5A, offset: 0xB66F4, size: 0x8, addend: 0x0, symName: sha512_block_data_order_avx, symObjAddr: 0x1240, symBinAddr: 0x3FC780, symSize: 0x1176 } - - { offsetInCU: 0x10, offset: 0xB66F6, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0x3FD900, symSize: 0x200 } - - { offsetInCU: 0x44, offset: 0xB672A, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0x3FD900, symSize: 0x200 } - - { offsetInCU: 0x66, offset: 0xB674C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x200, symBinAddr: 0x3FDB00, symSize: 0x21C0 } - - { offsetInCU: 0x7C, offset: 0xB6762, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x23C0, symBinAddr: 0x3FFCC0, symSize: 0x1D2D } - - { offsetInCU: 0x83, offset: 0xB6769, size: 0x8, addend: 0x0, symName: process_extra_in_trailer, symObjAddr: 0x40ED, symBinAddr: 0x4019ED, symSize: 0x553 } - - { offsetInCU: 0x9C, offset: 0xB6782, size: 0x8, addend: 0x0, symName: chacha20_poly1305_open_avx2, symObjAddr: 0x4640, symBinAddr: 0x401F40, symSize: 0x25C0 } - - { offsetInCU: 0xB2, offset: 0xB6798, size: 0x8, addend: 0x0, symName: chacha20_poly1305_seal_avx2, symObjAddr: 0x6C00, symBinAddr: 0x404500, symSize: 0x2F01 } - - { offsetInCU: 0x10, offset: 0xB679A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x407440, symSize: 0x1200 } - - { offsetInCU: 0x51, offset: 0xB67DB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x407440, symSize: 0x1200 } - - { offsetInCU: 0x5D, offset: 0xB67E7, size: 0x8, addend: 0x0, symName: sha256_block_data_order_shaext, symObjAddr: 0x1200, symBinAddr: 0x408640, symSize: 0x340 } - - { offsetInCU: 0x72, offset: 0xB67FC, size: 0x8, addend: 0x0, symName: sha256_block_data_order_ssse3, symObjAddr: 0x1540, symBinAddr: 0x408980, symSize: 0xEC0 } - - { offsetInCU: 0x86, offset: 0xB6810, size: 0x8, addend: 0x0, symName: sha256_block_data_order_avx, symObjAddr: 0x2400, symBinAddr: 0x409840, symSize: 0xEF7 } + - { offsetInCU: 0x34, offset: 0x79625, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionString, symObjAddr: 0x0, symBinAddr: 0xAB1000, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0x7965A, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionNumber, symObjAddr: 0x38, symBinAddr: 0xAB1038, symSize: 0x0 } + - { offsetInCU: 0x3F, offset: 0x796AF, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x40, symBinAddr: 0x2840, symSize: 0x10 } + - { offsetInCU: 0x53, offset: 0x796C3, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x50, symBinAddr: 0x2850, symSize: 0x10 } + - { offsetInCU: 0x67, offset: 0x796D7, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x60, symBinAddr: 0x2860, symSize: 0x20 } + - { offsetInCU: 0x7B, offset: 0x796EB, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x80, symBinAddr: 0x2880, symSize: 0x30 } + - { offsetInCU: 0x8F, offset: 0x796FF, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwCP', symObjAddr: 0xD0, symBinAddr: 0x28D0, symSize: 0x30 } + - { offsetInCU: 0xA3, offset: 0x79713, size: 0x8, addend: 0x0, symName: ___swift_memcpy32_8, symObjAddr: 0x100, symBinAddr: 0x2900, symSize: 0x20 } + - { offsetInCU: 0xB7, offset: 0x79727, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwet', symObjAddr: 0x120, symBinAddr: 0x2920, symSize: 0x20 } + - { offsetInCU: 0xCB, offset: 0x7973B, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwst', symObjAddr: 0x140, symBinAddr: 0x2940, symSize: 0x30 } + - { offsetInCU: 0x4F, offset: 0x79924, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC11_WriteQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x30B0, symBinAddr: 0x1379CD0, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0x7993E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10_ReadQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x30B8, symBinAddr: 0x1379CD8, symSize: 0x0 } + - { offsetInCU: 0x9D, offset: 0x79972, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTo', symObjAddr: 0x10, symBinAddr: 0x2A10, symSize: 0x40 } + - { offsetInCU: 0xF3, offset: 0x799C8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x60, symBinAddr: 0x2A60, symSize: 0x60 } + - { offsetInCU: 0x144, offset: 0x79A19, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0xD0, symBinAddr: 0x2AD0, symSize: 0x40 } + - { offsetInCU: 0x19F, offset: 0x79A74, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x120, symBinAddr: 0x2B20, symSize: 0x50 } + - { offsetInCU: 0x204, offset: 0x79AD9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0x180, symBinAddr: 0x2B80, symSize: 0x60 } + - { offsetInCU: 0x27D, offset: 0x79B52, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x1F0, symBinAddr: 0x2BF0, symSize: 0x90 } + - { offsetInCU: 0x2DA, offset: 0x79BAF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x290, symBinAddr: 0x2C90, symSize: 0x20 } + - { offsetInCU: 0x35C, offset: 0x79C31, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x2C0, symBinAddr: 0x2CC0, symSize: 0x20 } + - { offsetInCU: 0x40B, offset: 0x79CE0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZTo', symObjAddr: 0x350, symBinAddr: 0x2D50, symSize: 0x80 } + - { offsetInCU: 0x4D0, offset: 0x79DA5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZTo', symObjAddr: 0x440, symBinAddr: 0x2E40, symSize: 0x80 } + - { offsetInCU: 0x59F, offset: 0x79E74, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZTo', symObjAddr: 0x530, symBinAddr: 0x2F30, symSize: 0x80 } + - { offsetInCU: 0x669, offset: 0x79F3E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZTo', symObjAddr: 0x630, symBinAddr: 0x3030, symSize: 0x90 } + - { offsetInCU: 0x701, offset: 0x79FD6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZTo', symObjAddr: 0x6D0, symBinAddr: 0x30D0, symSize: 0x10 } + - { offsetInCU: 0x768, offset: 0x7A03D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZTo', symObjAddr: 0x6F0, symBinAddr: 0x30F0, symSize: 0x10 } + - { offsetInCU: 0x7BF, offset: 0x7A094, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZTo', symObjAddr: 0x710, symBinAddr: 0x3110, symSize: 0x10 } + - { offsetInCU: 0x816, offset: 0x7A0EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZTo', symObjAddr: 0x730, symBinAddr: 0x3130, symSize: 0x10 } + - { offsetInCU: 0x86D, offset: 0x7A142, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZTo', symObjAddr: 0x750, symBinAddr: 0x3150, symSize: 0x10 } + - { offsetInCU: 0x8C4, offset: 0x7A199, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZTo', symObjAddr: 0x770, symBinAddr: 0x3170, symSize: 0x10 } + - { offsetInCU: 0x943, offset: 0x7A218, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZTo', symObjAddr: 0x790, symBinAddr: 0x3190, symSize: 0x40 } + - { offsetInCU: 0x9EE, offset: 0x7A2C3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZTo', symObjAddr: 0x7E0, symBinAddr: 0x31E0, symSize: 0x20 } + - { offsetInCU: 0xA61, offset: 0x7A336, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZTo', symObjAddr: 0x810, symBinAddr: 0x3210, symSize: 0x10 } + - { offsetInCU: 0xAB8, offset: 0x7A38D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZTo', symObjAddr: 0x880, symBinAddr: 0x3280, symSize: 0x70 } + - { offsetInCU: 0xB43, offset: 0x7A418, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTo', symObjAddr: 0xA90, symBinAddr: 0x3490, symSize: 0xA0 } + - { offsetInCU: 0xB94, offset: 0x7A469, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZTo', symObjAddr: 0xD90, symBinAddr: 0x3790, symSize: 0xA0 } + - { offsetInCU: 0xBE5, offset: 0x7A4BA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZTo', symObjAddr: 0x10F0, symBinAddr: 0x3AF0, symSize: 0xA0 } + - { offsetInCU: 0xC41, offset: 0x7A516, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTo', symObjAddr: 0x1540, symBinAddr: 0x3F40, symSize: 0xD0 } + - { offsetInCU: 0xC89, offset: 0x7A55E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTo', symObjAddr: 0x1620, symBinAddr: 0x4020, symSize: 0x40 } + - { offsetInCU: 0xCE9, offset: 0x7A5BE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfcTo', symObjAddr: 0x16B0, symBinAddr: 0x40B0, symSize: 0x30 } + - { offsetInCU: 0xD3C, offset: 0x7A611, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTf4nd_n', symObjAddr: 0x1720, symBinAddr: 0x4120, symSize: 0x300 } + - { offsetInCU: 0xF6C, offset: 0x7A841, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTf4nnnd_n', symObjAddr: 0x1A20, symBinAddr: 0x4420, symSize: 0x260 } + - { offsetInCU: 0x1166, offset: 0x7AA3B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTf4nnd_n', symObjAddr: 0x1C80, symBinAddr: 0x4680, symSize: 0xD0 } + - { offsetInCU: 0x1263, offset: 0x7AB38, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTf4nnnnd_n', symObjAddr: 0x1D50, symBinAddr: 0x4750, symSize: 0x1B0 } + - { offsetInCU: 0x13D8, offset: 0x7ACAD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTf4nnnnnnd_n', symObjAddr: 0x1F00, symBinAddr: 0x4900, symSize: 0x1D0 } + - { offsetInCU: 0x156D, offset: 0x7AE42, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTf4nnnnnnnnnnd_n', symObjAddr: 0x20D0, symBinAddr: 0x4AD0, symSize: 0x200 } + - { offsetInCU: 0x1759, offset: 0x7B02E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTf4nnnd_n', symObjAddr: 0x22D0, symBinAddr: 0x4CD0, symSize: 0x1D0 } + - { offsetInCU: 0x1823, offset: 0x7B0F8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTf4nnnnd_n', symObjAddr: 0x2660, symBinAddr: 0x5060, symSize: 0x200 } + - { offsetInCU: 0x1904, offset: 0x7B1D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTf4d_n', symObjAddr: 0x2860, symBinAddr: 0x5260, symSize: 0x110 } + - { offsetInCU: 0x19AF, offset: 0x7B284, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TR', symObjAddr: 0xB30, symBinAddr: 0x3530, symSize: 0x70 } + - { offsetInCU: 0x19C7, offset: 0x7B29C, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TR', symObjAddr: 0xE30, symBinAddr: 0x3830, symSize: 0x50 } + - { offsetInCU: 0x1A34, offset: 0x7B309, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfETo', symObjAddr: 0x1710, symBinAddr: 0x4110, symSize: 0x10 } + - { offsetInCU: 0x1ABF, offset: 0x7B394, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCMa', symObjAddr: 0x2970, symBinAddr: 0x5370, symSize: 0x20 } + - { offsetInCU: 0x1AD3, offset: 0x7B3A8, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TRTA', symObjAddr: 0x29B0, symBinAddr: 0x53B0, symSize: 0x10 } + - { offsetInCU: 0x1AF2, offset: 0x7B3C7, size: 0x8, addend: 0x0, symName: '_$sSo7NSErrorCSg10ObjectiveC8ObjCBoolVIeyByy_ACSbIeggy_TRTA', symObjAddr: 0x29C0, symBinAddr: 0x53C0, symSize: 0x20 } + - { offsetInCU: 0x1B1B, offset: 0x7B3F0, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TRTA', symObjAddr: 0x29E0, symBinAddr: 0x53E0, symSize: 0x10 } + - { offsetInCU: 0x1B2F, offset: 0x7B404, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCMa', symObjAddr: 0x29F0, symBinAddr: 0x53F0, symSize: 0x30 } + - { offsetInCU: 0x1B43, offset: 0x7B418, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_TA', symObjAddr: 0x2A70, symBinAddr: 0x5470, symSize: 0x40 } + - { offsetInCU: 0x1B57, offset: 0x7B42C, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x2AB0, symBinAddr: 0x54B0, symSize: 0x20 } + - { offsetInCU: 0x1B6B, offset: 0x7B440, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x2AD0, symBinAddr: 0x54D0, symSize: 0x10 } + - { offsetInCU: 0x1B7F, offset: 0x7B454, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2B00, symBinAddr: 0x5500, symSize: 0x40 } + - { offsetInCU: 0x1BB3, offset: 0x7B488, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2BC0, symBinAddr: 0x55C0, symSize: 0x40 } + - { offsetInCU: 0x1BF1, offset: 0x7B4C6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2C00, symBinAddr: 0x5600, symSize: 0x20 } + - { offsetInCU: 0x1C25, offset: 0x7B4FA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2CB0, symBinAddr: 0x56B0, symSize: 0x40 } + - { offsetInCU: 0x1C59, offset: 0x7B52E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2D20, symBinAddr: 0x5720, symSize: 0x30 } + - { offsetInCU: 0x1C95, offset: 0x7B56A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_TA', symObjAddr: 0x2DA0, symBinAddr: 0x57A0, symSize: 0x30 } + - { offsetInCU: 0x1CA9, offset: 0x7B57E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2DD0, symBinAddr: 0x57D0, symSize: 0x40 } + - { offsetInCU: 0x2176, offset: 0x7BA4B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZ', symObjAddr: 0x0, symBinAddr: 0x2A00, symSize: 0x10 } + - { offsetInCU: 0x2191, offset: 0x7BA66, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x50, symBinAddr: 0x2A50, symSize: 0x10 } + - { offsetInCU: 0x21AC, offset: 0x7BA81, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0xC0, symBinAddr: 0x2AC0, symSize: 0x10 } + - { offsetInCU: 0x21CD, offset: 0x7BAA2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x110, symBinAddr: 0x2B10, symSize: 0x10 } + - { offsetInCU: 0x21E8, offset: 0x7BABD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0x170, symBinAddr: 0x2B70, symSize: 0x10 } + - { offsetInCU: 0x2203, offset: 0x7BAD8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x1E0, symBinAddr: 0x2BE0, symSize: 0x10 } + - { offsetInCU: 0x221E, offset: 0x7BAF3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x280, symBinAddr: 0x2C80, symSize: 0x10 } + - { offsetInCU: 0x22AC, offset: 0x7BB81, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x2B0, symBinAddr: 0x2CB0, symSize: 0x10 } + - { offsetInCU: 0x232B, offset: 0x7BC00, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZ', symObjAddr: 0x2E0, symBinAddr: 0x2CE0, symSize: 0x70 } + - { offsetInCU: 0x247D, offset: 0x7BD52, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZ', symObjAddr: 0x3D0, symBinAddr: 0x2DD0, symSize: 0x70 } + - { offsetInCU: 0x25DB, offset: 0x7BEB0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZ', symObjAddr: 0x4C0, symBinAddr: 0x2EC0, symSize: 0x70 } + - { offsetInCU: 0x2739, offset: 0x7C00E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZ', symObjAddr: 0x5B0, symBinAddr: 0x2FB0, symSize: 0x80 } + - { offsetInCU: 0x28AD, offset: 0x7C182, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZ', symObjAddr: 0x6C0, symBinAddr: 0x30C0, symSize: 0x10 } + - { offsetInCU: 0x291D, offset: 0x7C1F2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZ', symObjAddr: 0x6E0, symBinAddr: 0x30E0, symSize: 0x10 } + - { offsetInCU: 0x2960, offset: 0x7C235, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZ', symObjAddr: 0x700, symBinAddr: 0x3100, symSize: 0x10 } + - { offsetInCU: 0x29A5, offset: 0x7C27A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZ', symObjAddr: 0x720, symBinAddr: 0x3120, symSize: 0x10 } + - { offsetInCU: 0x29E8, offset: 0x7C2BD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZ', symObjAddr: 0x740, symBinAddr: 0x3140, symSize: 0x10 } + - { offsetInCU: 0x2A2B, offset: 0x7C300, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZ', symObjAddr: 0x760, symBinAddr: 0x3160, symSize: 0x10 } + - { offsetInCU: 0x2A6E, offset: 0x7C343, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZ', symObjAddr: 0x780, symBinAddr: 0x3180, symSize: 0x10 } + - { offsetInCU: 0x2B54, offset: 0x7C429, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ', symObjAddr: 0x7D0, symBinAddr: 0x31D0, symSize: 0x10 } + - { offsetInCU: 0x2BD3, offset: 0x7C4A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZ', symObjAddr: 0x800, symBinAddr: 0x3200, symSize: 0x10 } + - { offsetInCU: 0x2C16, offset: 0x7C4EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZ', symObjAddr: 0x820, symBinAddr: 0x3220, symSize: 0x60 } + - { offsetInCU: 0x2CD7, offset: 0x7C5AC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZ', symObjAddr: 0x8F0, symBinAddr: 0x32F0, symSize: 0x10 } + - { offsetInCU: 0x2CEB, offset: 0x7C5C0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_', symObjAddr: 0x900, symBinAddr: 0x3300, symSize: 0x190 } + - { offsetInCU: 0x2D8B, offset: 0x7C660, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZ', symObjAddr: 0xBA0, symBinAddr: 0x35A0, symSize: 0x30 } + - { offsetInCU: 0x2D9F, offset: 0x7C674, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_', symObjAddr: 0xBD0, symBinAddr: 0x35D0, symSize: 0x1C0 } + - { offsetInCU: 0x2E89, offset: 0x7C75E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZ', symObjAddr: 0xE80, symBinAddr: 0x3880, symSize: 0x30 } + - { offsetInCU: 0x2E9D, offset: 0x7C772, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_', symObjAddr: 0xEB0, symBinAddr: 0x38B0, symSize: 0x240 } + - { offsetInCU: 0x2F51, offset: 0x7C826, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZ', symObjAddr: 0x1190, symBinAddr: 0x3B90, symSize: 0x10 } + - { offsetInCU: 0x2F65, offset: 0x7C83A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_', symObjAddr: 0x11A0, symBinAddr: 0x3BA0, symSize: 0x3A0 } + - { offsetInCU: 0x31FB, offset: 0x7CAD0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZ', symObjAddr: 0x1610, symBinAddr: 0x4010, symSize: 0x10 } + - { offsetInCU: 0x3216, offset: 0x7CAEB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfC', symObjAddr: 0x1660, symBinAddr: 0x4060, symSize: 0x20 } + - { offsetInCU: 0x322A, offset: 0x7CAFF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfc', symObjAddr: 0x1680, symBinAddr: 0x4080, symSize: 0x30 } + - { offsetInCU: 0x3260, offset: 0x7CB35, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfD', symObjAddr: 0x16E0, symBinAddr: 0x40E0, symSize: 0x30 } + - { offsetInCU: 0x4F, offset: 0x7CD6D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LLSo7GLKViewCvpZ', symObjAddr: 0x5BA8, symBinAddr: 0x1379D10, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0x7CD87, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15_shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvpZ', symObjAddr: 0x5BB0, symBinAddr: 0x1379D18, symSize: 0x0 } + - { offsetInCU: 0x83, offset: 0x7CDA1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5storeSo19NSMutableDictionaryCvpZ', symObjAddr: 0x5BB8, symBinAddr: 0x1379D20, symSize: 0x0 } + - { offsetInCU: 0x9D, offset: 0x7CDBB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LLSo10NSMapTableCySo8NSStringCACGvpZ', symObjAddr: 0x5BC0, symBinAddr: 0x1379D28, symSize: 0x0 } + - { offsetInCU: 0xAB, offset: 0x7CDC9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0x0, symBinAddr: 0x5AA0, symSize: 0x60 } + - { offsetInCU: 0xF0, offset: 0x7CE0E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5store_WZ', symObjAddr: 0x60, symBinAddr: 0x5B00, symSize: 0x30 } + - { offsetInCU: 0x135, offset: 0x7CE53, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0xD0, symBinAddr: 0x5B70, symSize: 0x40 } + - { offsetInCU: 0x187, offset: 0x7CEA5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x1B0, symBinAddr: 0x5C50, symSize: 0x20 } + - { offsetInCU: 0x1DD, offset: 0x7CEFB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x1D0, symBinAddr: 0x5C70, symSize: 0x20 } + - { offsetInCU: 0x236, offset: 0x7CF54, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x1F0, symBinAddr: 0x5C90, symSize: 0x20 } + - { offsetInCU: 0x28C, offset: 0x7CFAA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x210, symBinAddr: 0x5CB0, symSize: 0x20 } + - { offsetInCU: 0x2E5, offset: 0x7D003, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvgTo', symObjAddr: 0x320, symBinAddr: 0x5DC0, symSize: 0x40 } + - { offsetInCU: 0x320, offset: 0x7D03E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvsTo', symObjAddr: 0x390, symBinAddr: 0x5E30, symSize: 0x30 } + - { offsetInCU: 0x3AF, offset: 0x7D0CD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvgTo', symObjAddr: 0x5D0, symBinAddr: 0x6070, symSize: 0x40 } + - { offsetInCU: 0x405, offset: 0x7D123, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvsTo', symObjAddr: 0x640, symBinAddr: 0x60E0, symSize: 0x40 } + - { offsetInCU: 0x45E, offset: 0x7D17C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvgTo', symObjAddr: 0x680, symBinAddr: 0x6120, symSize: 0x40 } + - { offsetInCU: 0x4B4, offset: 0x7D1D2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvsTo', symObjAddr: 0x6F0, symBinAddr: 0x6190, symSize: 0x40 } + - { offsetInCU: 0x50D, offset: 0x7D22B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0x730, symBinAddr: 0x61D0, symSize: 0x20 } + - { offsetInCU: 0x563, offset: 0x7D281, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0x750, symBinAddr: 0x61F0, symSize: 0x20 } + - { offsetInCU: 0x5BC, offset: 0x7D2DA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0x770, symBinAddr: 0x6210, symSize: 0x20 } + - { offsetInCU: 0x614, offset: 0x7D332, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvsTo', symObjAddr: 0x790, symBinAddr: 0x6230, symSize: 0x30 } + - { offsetInCU: 0x66D, offset: 0x7D38B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x7C0, symBinAddr: 0x6260, symSize: 0x20 } + - { offsetInCU: 0x6C5, offset: 0x7D3E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvsTo', symObjAddr: 0x7E0, symBinAddr: 0x6280, symSize: 0x30 } + - { offsetInCU: 0x71E, offset: 0x7D43C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x810, symBinAddr: 0x62B0, symSize: 0x20 } + - { offsetInCU: 0x774, offset: 0x7D492, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x830, symBinAddr: 0x62D0, symSize: 0x10 } + - { offsetInCU: 0x7CD, offset: 0x7D4EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvgTo', symObjAddr: 0x840, symBinAddr: 0x62E0, symSize: 0x20 } + - { offsetInCU: 0x823, offset: 0x7D541, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvsTo', symObjAddr: 0x860, symBinAddr: 0x6300, symSize: 0x10 } + - { offsetInCU: 0x866, offset: 0x7D584, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivgTo', symObjAddr: 0x870, symBinAddr: 0x6310, symSize: 0x30 } + - { offsetInCU: 0x898, offset: 0x7D5B6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivgTo', symObjAddr: 0x960, symBinAddr: 0x6400, symSize: 0x30 } + - { offsetInCU: 0x8E0, offset: 0x7D5FE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvgTo', symObjAddr: 0xA50, symBinAddr: 0x64F0, symSize: 0x30 } + - { offsetInCU: 0x948, offset: 0x7D666, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvgTo', symObjAddr: 0xAB0, symBinAddr: 0x6550, symSize: 0x30 } + - { offsetInCU: 0x9E7, offset: 0x7D705, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btFTo', symObjAddr: 0xB20, symBinAddr: 0x65C0, symSize: 0xD0 } + - { offsetInCU: 0xA96, offset: 0x7D7B4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VFTo', symObjAddr: 0xDA0, symBinAddr: 0x6840, symSize: 0x30 } + - { offsetInCU: 0xB46, offset: 0x7D864, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x1760, symBinAddr: 0x7200, symSize: 0xD0 } + - { offsetInCU: 0xBB0, offset: 0x7D8CE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtFTo', symObjAddr: 0x1A70, symBinAddr: 0x7510, symSize: 0x90 } + - { offsetInCU: 0xBED, offset: 0x7D90B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x1BF0, symBinAddr: 0x7690, symSize: 0x100 } + - { offsetInCU: 0xC6B, offset: 0x7D989, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbFTo', symObjAddr: 0x1DC0, symBinAddr: 0x7860, symSize: 0x40 } + - { offsetInCU: 0xC9E, offset: 0x7D9BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1E00, symBinAddr: 0x78A0, symSize: 0x20 } + - { offsetInCU: 0xCF8, offset: 0x7DA16, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvsTo', symObjAddr: 0x1E20, symBinAddr: 0x78C0, symSize: 0x30 } + - { offsetInCU: 0xD53, offset: 0x7DA71, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyFTo', symObjAddr: 0x1E90, symBinAddr: 0x7930, symSize: 0x40 } + - { offsetInCU: 0xDE9, offset: 0x7DB07, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VFTo', symObjAddr: 0x1F10, symBinAddr: 0x79B0, symSize: 0x60 } + - { offsetInCU: 0xEAE, offset: 0x7DBCC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VFTo', symObjAddr: 0x1FD0, symBinAddr: 0x7A70, symSize: 0xA0 } + - { offsetInCU: 0xF3B, offset: 0x7DC59, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC23enterBackgroundListeneryycSgvsTo', symObjAddr: 0x20C0, symBinAddr: 0x7B60, symSize: 0x70 } + - { offsetInCU: 0xF9D, offset: 0x7DCBB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC20becomeActiveListeneryycSgvsTo', symObjAddr: 0x21D0, symBinAddr: 0x7C70, symSize: 0x70 } + - { offsetInCU: 0xFFA, offset: 0x7DD18, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvgTo', symObjAddr: 0x2240, symBinAddr: 0x7CE0, symSize: 0xB0 } + - { offsetInCU: 0x104A, offset: 0x7DD68, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvsTo', symObjAddr: 0x23B0, symBinAddr: 0x7E50, symSize: 0x90 } + - { offsetInCU: 0x10DA, offset: 0x7DDF8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x3110, symBinAddr: 0x8BB0, symSize: 0x30 } + - { offsetInCU: 0x112F, offset: 0x7DE4D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x3C90, symBinAddr: 0x9730, symSize: 0x30 } + - { offsetInCU: 0x1162, offset: 0x7DE80, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x3CC0, symBinAddr: 0x9760, symSize: 0x20 } + - { offsetInCU: 0x11BA, offset: 0x7DED8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvsTo', symObjAddr: 0x3CE0, symBinAddr: 0x9780, symSize: 0x30 } + - { offsetInCU: 0x1228, offset: 0x7DF46, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvgTo', symObjAddr: 0x3D90, symBinAddr: 0x9830, symSize: 0x30 } + - { offsetInCU: 0x1282, offset: 0x7DFA0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvsTo', symObjAddr: 0x3DC0, symBinAddr: 0x9860, symSize: 0x30 } + - { offsetInCU: 0x12E2, offset: 0x7E000, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgFTo', symObjAddr: 0x3E20, symBinAddr: 0x98C0, symSize: 0x30 } + - { offsetInCU: 0x1426, offset: 0x7E144, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFTo', symObjAddr: 0x4200, symBinAddr: 0x9CA0, symSize: 0x30 } + - { offsetInCU: 0x1459, offset: 0x7E177, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfDTo', symObjAddr: 0x4520, symBinAddr: 0x9FC0, symSize: 0x20 } + - { offsetInCU: 0x1494, offset: 0x7E1B2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTo', symObjAddr: 0x4610, symBinAddr: 0xA0B0, symSize: 0x30 } + - { offsetInCU: 0x14C7, offset: 0x7E1E5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvgZTf4d_n', symObjAddr: 0x5040, symBinAddr: 0xAAE0, symSize: 0x2A0 } + - { offsetInCU: 0x162F, offset: 0x7E34D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTf4nnd_n', symObjAddr: 0x53B0, symBinAddr: 0xAE50, symSize: 0xC0 } + - { offsetInCU: 0x184B, offset: 0x7E569, size: 0x8, addend: 0x0, symName: '_$sIeg_IeyB_TR', symObjAddr: 0x2090, symBinAddr: 0x7B30, symSize: 0x30 } + - { offsetInCU: 0x1863, offset: 0x7E581, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_So8NSStringCABIeyByy_TR', symObjAddr: 0x2340, symBinAddr: 0x7DE0, symSize: 0x70 } + - { offsetInCU: 0x187B, offset: 0x7E599, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTK', symObjAddr: 0x24A0, symBinAddr: 0x7F40, symSize: 0x90 } + - { offsetInCU: 0x18B3, offset: 0x7E5D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTk', symObjAddr: 0x2530, symBinAddr: 0x7FD0, symSize: 0xC0 } + - { offsetInCU: 0x18F3, offset: 0x7E611, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TR', symObjAddr: 0x25F0, symBinAddr: 0x8090, symSize: 0x70 } + - { offsetInCU: 0x19A3, offset: 0x7E6C1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfETo', symObjAddr: 0x4540, symBinAddr: 0x9FE0, symSize: 0xC0 } + - { offsetInCU: 0x19D3, offset: 0x7E6F1, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOy', symObjAddr: 0x4640, symBinAddr: 0xA0E0, symSize: 0x20 } + - { offsetInCU: 0x19E7, offset: 0x7E705, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCMa', symObjAddr: 0x4660, symBinAddr: 0xA100, symSize: 0x20 } + - { offsetInCU: 0x19FB, offset: 0x7E719, size: 0x8, addend: 0x0, symName: '_$ss29getContiguousArrayStorageType3fors01_bcD0CyxGmxm_tlFSo18NSLayoutConstraintC_Tgm5', symObjAddr: 0x4680, symBinAddr: 0xA120, symSize: 0x60 } + - { offsetInCU: 0x1C02, offset: 0x7E920, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x52E0, symBinAddr: 0xAD80, symSize: 0x40 } + - { offsetInCU: 0x1C16, offset: 0x7E934, size: 0x8, addend: 0x0, symName: '_$sypSgWOh', symObjAddr: 0x5320, symBinAddr: 0xADC0, symSize: 0x30 } + - { offsetInCU: 0x1C2A, offset: 0x7E948, size: 0x8, addend: 0x0, symName: ___swift_project_boxed_opaque_existential_0, symObjAddr: 0x5350, symBinAddr: 0xADF0, symSize: 0x30 } + - { offsetInCU: 0x1C3E, offset: 0x7E95C, size: 0x8, addend: 0x0, symName: ___swift_destroy_boxed_opaque_existential_0, symObjAddr: 0x5380, symBinAddr: 0xAE20, symSize: 0x30 } + - { offsetInCU: 0x1C5D, offset: 0x7E97B, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSo19UIGestureRecognizerCIeyByy_SSADIeggg_TRTA', symObjAddr: 0x5910, symBinAddr: 0xB3B0, symSize: 0x40 } + - { offsetInCU: 0x1C86, offset: 0x7E9A4, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x5950, symBinAddr: 0xB3F0, symSize: 0x20 } + - { offsetInCU: 0x1C9A, offset: 0x7E9B8, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x5970, symBinAddr: 0xB410, symSize: 0x10 } + - { offsetInCU: 0x1CAE, offset: 0x7E9CC, size: 0x8, addend: 0x0, symName: '_$sIeg_SgWOe', symObjAddr: 0x5980, symBinAddr: 0xB420, symSize: 0x20 } + - { offsetInCU: 0x1CCD, offset: 0x7E9EB, size: 0x8, addend: 0x0, symName: '_$sIeyB_Ieg_TRTA', symObjAddr: 0x59A0, symBinAddr: 0xB440, symSize: 0x10 } + - { offsetInCU: 0x1CF6, offset: 0x7EA14, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TRTA', symObjAddr: 0x59D0, symBinAddr: 0xB470, symSize: 0x20 } + - { offsetInCU: 0x1D15, offset: 0x7EA33, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SSABytIegnnr_TRTA', symObjAddr: 0x59F0, symBinAddr: 0xB490, symSize: 0x30 } + - { offsetInCU: 0x1D3E, offset: 0x7EA5C, size: 0x8, addend: 0x0, symName: '_$sypWOb', symObjAddr: 0x5A20, symBinAddr: 0xB4C0, symSize: 0x20 } + - { offsetInCU: 0x1D52, offset: 0x7EA70, size: 0x8, addend: 0x0, symName: '_$sypWOc', symObjAddr: 0x5A70, symBinAddr: 0xB510, symSize: 0x30 } + - { offsetInCU: 0x1FD7, offset: 0x7ECF5, size: 0x8, addend: 0x0, symName: '_$sSD17dictionaryLiteralSDyxq_Gx_q_td_tcfCSS_ypTgm5Tf4g_n', symObjAddr: 0x4F50, symBinAddr: 0xA9F0, symSize: 0xF0 } + - { offsetInCU: 0x2469, offset: 0x7F187, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvg', symObjAddr: 0x360, symBinAddr: 0x5E00, symSize: 0x30 } + - { offsetInCU: 0x249A, offset: 0x7F1B8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvs', symObjAddr: 0x3C0, symBinAddr: 0x5E60, symSize: 0xE0 } + - { offsetInCU: 0x24E4, offset: 0x7F202, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM', symObjAddr: 0x4A0, symBinAddr: 0x5F40, symSize: 0x50 } + - { offsetInCU: 0x2507, offset: 0x7F225, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM.resume.0', symObjAddr: 0x4F0, symBinAddr: 0x5F90, symSize: 0xE0 } + - { offsetInCU: 0x2548, offset: 0x7F266, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64Vvg', symObjAddr: 0x610, symBinAddr: 0x60B0, symSize: 0x30 } + - { offsetInCU: 0x259E, offset: 0x7F2BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg', symObjAddr: 0x6C0, symBinAddr: 0x6160, symSize: 0x30 } + - { offsetInCU: 0x270A, offset: 0x7F428, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivg', symObjAddr: 0x8A0, symBinAddr: 0x6340, symSize: 0xC0 } + - { offsetInCU: 0x282F, offset: 0x7F54D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivg', symObjAddr: 0x990, symBinAddr: 0x6430, symSize: 0xC0 } + - { offsetInCU: 0x2975, offset: 0x7F693, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvg', symObjAddr: 0xA80, symBinAddr: 0x6520, symSize: 0x30 } + - { offsetInCU: 0x29BB, offset: 0x7F6D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvg', symObjAddr: 0xAE0, symBinAddr: 0x6580, symSize: 0x30 } + - { offsetInCU: 0x29ED, offset: 0x7F70B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btF', symObjAddr: 0xB10, symBinAddr: 0x65B0, symSize: 0x10 } + - { offsetInCU: 0x2B6A, offset: 0x7F888, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VF', symObjAddr: 0xBF0, symBinAddr: 0x6690, symSize: 0x1B0 } + - { offsetInCU: 0x2F4D, offset: 0x7FC6B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btF', symObjAddr: 0xDD0, symBinAddr: 0x6870, symSize: 0x990 } + - { offsetInCU: 0x36DB, offset: 0x803F9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtF', symObjAddr: 0x1830, symBinAddr: 0x72D0, symSize: 0x240 } + - { offsetInCU: 0x3B67, offset: 0x80885, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x1B00, symBinAddr: 0x75A0, symSize: 0xF0 } + - { offsetInCU: 0x3BF6, offset: 0x80914, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbF', symObjAddr: 0x1CF0, symBinAddr: 0x7790, symSize: 0xD0 } + - { offsetInCU: 0x3D4F, offset: 0x80A6D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyF', symObjAddr: 0x1E50, symBinAddr: 0x78F0, symSize: 0x40 } + - { offsetInCU: 0x3DD3, offset: 0x80AF1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF', symObjAddr: 0x1ED0, symBinAddr: 0x7970, symSize: 0x40 } + - { offsetInCU: 0x3EF2, offset: 0x80C10, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VF', symObjAddr: 0x1F70, symBinAddr: 0x7A10, symSize: 0x60 } + - { offsetInCU: 0x3FE8, offset: 0x80D06, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvg', symObjAddr: 0x22F0, symBinAddr: 0x7D90, symSize: 0x50 } + - { offsetInCU: 0x4032, offset: 0x80D50, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvs', symObjAddr: 0x2440, symBinAddr: 0x7EE0, symSize: 0x60 } + - { offsetInCU: 0x4059, offset: 0x80D77, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM', symObjAddr: 0x2660, symBinAddr: 0x8100, symSize: 0x40 } + - { offsetInCU: 0x407F, offset: 0x80D9D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM.resume.0', symObjAddr: 0x26A0, symBinAddr: 0x8140, symSize: 0x10 } + - { offsetInCU: 0x4141, offset: 0x80E5F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x26B0, symBinAddr: 0x8150, symSize: 0xA60 } + - { offsetInCU: 0x4348, offset: 0x81066, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfC', symObjAddr: 0x3140, symBinAddr: 0x8BE0, symSize: 0x80 } + - { offsetInCU: 0x4371, offset: 0x8108F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfc', symObjAddr: 0x31C0, symBinAddr: 0x8C60, symSize: 0xAD0 } + - { offsetInCU: 0x4599, offset: 0x812B7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvW', symObjAddr: 0x3D10, symBinAddr: 0x97B0, symSize: 0x80 } + - { offsetInCU: 0x468F, offset: 0x813AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgF', symObjAddr: 0x3DF0, symBinAddr: 0x9890, symSize: 0x30 } + - { offsetInCU: 0x472B, offset: 0x81449, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6resize33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x3E50, symBinAddr: 0x98F0, symSize: 0x110 } + - { offsetInCU: 0x497C, offset: 0x8169A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyF', symObjAddr: 0x3F60, symBinAddr: 0x9A00, symSize: 0x2A0 } + - { offsetInCU: 0x4BD8, offset: 0x818F6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfD', symObjAddr: 0x4230, symBinAddr: 0x9CD0, symSize: 0x2F0 } + - { offsetInCU: 0x4C66, offset: 0x81984, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZ', symObjAddr: 0x4600, symBinAddr: 0xA0A0, symSize: 0x10 } + - { offsetInCU: 0x4C8E, offset: 0x819AC, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4findys10_HashTableV6BucketV6bucket_Sb5foundtxSHRzlFSS_Tg5', symObjAddr: 0x46E0, symBinAddr: 0xA180, symSize: 0x60 } + - { offsetInCU: 0x4CE8, offset: 0x81A06, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV7_insert2at3key5valueys10_HashTableV6BucketV_xnq_ntFSS_ypTg5', symObjAddr: 0x4740, symBinAddr: 0xA1E0, symSize: 0x60 } + - { offsetInCU: 0x4D54, offset: 0x81A72, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV12mutatingFind_8isUniques10_HashTableV6BucketV6bucket_Sb5foundtx_SbtFSS_ypTg5', symObjAddr: 0x47A0, symBinAddr: 0xA240, symSize: 0xB0 } + - { offsetInCU: 0x4D91, offset: 0x81AAF, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4find_9hashValues10_HashTableV6BucketV6bucket_Sb5foundtx_SitSHRzlFSS_Tg5', symObjAddr: 0x4850, symBinAddr: 0xA2F0, symSize: 0xE0 } + - { offsetInCU: 0x4DFC, offset: 0x81B1A, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV4copyyyFSS_ypTg5', symObjAddr: 0x4930, symBinAddr: 0xA3D0, symSize: 0x260 } + - { offsetInCU: 0x4EA4, offset: 0x81BC2, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV20_copyOrMoveAndResize8capacity12moveElementsySi_SbtFSS_ypTg5', symObjAddr: 0x4B90, symBinAddr: 0xA630, symSize: 0x3C0 } + - { offsetInCU: 0x27, offset: 0x81DFB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xB5F0, symSize: 0x20 } + - { offsetInCU: 0x62, offset: 0x81E36, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCMa', symObjAddr: 0x20, symBinAddr: 0xB610, symSize: 0x14 } + - { offsetInCU: 0x1AF, offset: 0x81F83, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xB5F0, symSize: 0x20 } + - { offsetInCU: 0x65, offset: 0x82010, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvgTo', symObjAddr: 0x0, symBinAddr: 0xB630, symSize: 0x10 } + - { offsetInCU: 0xBB, offset: 0x82066, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvsTo', symObjAddr: 0x10, symBinAddr: 0xB640, symSize: 0x10 } + - { offsetInCU: 0x114, offset: 0x820BF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvgTo', symObjAddr: 0x20, symBinAddr: 0xB650, symSize: 0x40 } + - { offsetInCU: 0x16A, offset: 0x82115, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvsTo', symObjAddr: 0x60, symBinAddr: 0xB690, symSize: 0x40 } + - { offsetInCU: 0x1C3, offset: 0x8216E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvgTo', symObjAddr: 0xA0, symBinAddr: 0xB6D0, symSize: 0x40 } + - { offsetInCU: 0x219, offset: 0x821C4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvsTo', symObjAddr: 0xE0, symBinAddr: 0xB710, symSize: 0x40 } + - { offsetInCU: 0x272, offset: 0x8221D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivgTo', symObjAddr: 0x120, symBinAddr: 0xB750, symSize: 0x20 } + - { offsetInCU: 0x2C8, offset: 0x82273, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivsTo', symObjAddr: 0x140, symBinAddr: 0xB770, symSize: 0x20 } + - { offsetInCU: 0x321, offset: 0x822CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivgTo', symObjAddr: 0x160, symBinAddr: 0xB790, symSize: 0x20 } + - { offsetInCU: 0x377, offset: 0x82322, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivsTo', symObjAddr: 0x180, symBinAddr: 0xB7B0, symSize: 0x20 } + - { offsetInCU: 0x3D0, offset: 0x8237B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvgTo', symObjAddr: 0x1A0, symBinAddr: 0xB7D0, symSize: 0x40 } + - { offsetInCU: 0x426, offset: 0x823D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvsTo', symObjAddr: 0x1E0, symBinAddr: 0xB810, symSize: 0x40 } + - { offsetInCU: 0x47F, offset: 0x8242A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvgTo', symObjAddr: 0x220, symBinAddr: 0xB850, symSize: 0x10 } + - { offsetInCU: 0x4D5, offset: 0x82480, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvsTo', symObjAddr: 0x230, symBinAddr: 0xB860, symSize: 0x10 } + - { offsetInCU: 0x52E, offset: 0x824D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvgTo', symObjAddr: 0x240, symBinAddr: 0xB870, symSize: 0x10 } + - { offsetInCU: 0x584, offset: 0x8252F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvsTo', symObjAddr: 0x250, symBinAddr: 0xB880, symSize: 0x10 } + - { offsetInCU: 0x5DD, offset: 0x82588, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvgTo', symObjAddr: 0x260, symBinAddr: 0xB890, symSize: 0x40 } + - { offsetInCU: 0x633, offset: 0x825DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvsTo', symObjAddr: 0x2A0, symBinAddr: 0xB8D0, symSize: 0x40 } + - { offsetInCU: 0x676, offset: 0x82621, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13SIZE_OF_FLOATSivgZTo', symObjAddr: 0x2E0, symBinAddr: 0xB910, symSize: 0x10 } + - { offsetInCU: 0x692, offset: 0x8263D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13VERTEX_SHADERSSvgZTo', symObjAddr: 0x2F0, symBinAddr: 0xB920, symSize: 0x30 } + - { offsetInCU: 0x6C4, offset: 0x8266F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvgTo', symObjAddr: 0x320, symBinAddr: 0xB950, symSize: 0x20 } + - { offsetInCU: 0x71C, offset: 0x826C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvsTo', symObjAddr: 0x340, symBinAddr: 0xB970, symSize: 0x30 } + - { offsetInCU: 0x775, offset: 0x82720, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvgTo', symObjAddr: 0x490, symBinAddr: 0xBAC0, symSize: 0x20 } + - { offsetInCU: 0x7CB, offset: 0x82776, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvsTo', symObjAddr: 0x4B0, symBinAddr: 0xBAE0, symSize: 0x20 } + - { offsetInCU: 0x83A, offset: 0x827E5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfcTo', symObjAddr: 0x680, symBinAddr: 0xBC70, symSize: 0x20 } + - { offsetInCU: 0x86C, offset: 0x82817, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyFTo', symObjAddr: 0x7E0, symBinAddr: 0xBDD0, symSize: 0x30 } + - { offsetInCU: 0x8C4, offset: 0x8286F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTo', symObjAddr: 0x830, symBinAddr: 0xBE20, symSize: 0x80 } + - { offsetInCU: 0x928, offset: 0x828D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTo', symObjAddr: 0x8B0, symBinAddr: 0xBEA0, symSize: 0x80 } + - { offsetInCU: 0x9CA, offset: 0x82975, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyFTo', symObjAddr: 0xCE0, symBinAddr: 0xC2D0, symSize: 0x30 } + - { offsetInCU: 0xAB4, offset: 0x82A5F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCMa', symObjAddr: 0x660, symBinAddr: 0xBC50, symSize: 0x20 } + - { offsetInCU: 0xB33, offset: 0x82ADE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfETo', symObjAddr: 0xD40, symBinAddr: 0xC330, symSize: 0x60 } + - { offsetInCU: 0x1271, offset: 0x8321C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfC', symObjAddr: 0x4D0, symBinAddr: 0xBB00, symSize: 0x20 } + - { offsetInCU: 0x128B, offset: 0x83236, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfc', symObjAddr: 0x4F0, symBinAddr: 0xBB20, symSize: 0x130 } + - { offsetInCU: 0x12BB, offset: 0x83266, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyF', symObjAddr: 0x6A0, symBinAddr: 0xBC90, symSize: 0x140 } + - { offsetInCU: 0x1474, offset: 0x8341F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtF', symObjAddr: 0x810, symBinAddr: 0xBE00, symSize: 0x20 } + - { offsetInCU: 0x1525, offset: 0x834D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyF', symObjAddr: 0x930, symBinAddr: 0xBF20, symSize: 0x3B0 } + - { offsetInCU: 0x18BB, offset: 0x83866, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfD', symObjAddr: 0xD10, symBinAddr: 0xC300, symSize: 0x30 } + - { offsetInCU: 0x19B4, offset: 0x8395F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTf4ddnndnndn_n', symObjAddr: 0xDA0, symBinAddr: 0xC390, symSize: 0x720 } + - { offsetInCU: 0x231C, offset: 0x842C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTf4nnnnndn_n', symObjAddr: 0x1520, symBinAddr: 0xCB10, symSize: 0x7EC } + - { offsetInCU: 0x10C, offset: 0x84E70, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfcTo', symObjAddr: 0x1120, symBinAddr: 0xE3E0, symSize: 0x60 } + - { offsetInCU: 0x19C, offset: 0x84F00, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCfETo', symObjAddr: 0x11A0, symBinAddr: 0xE460, symSize: 0x20 } + - { offsetInCU: 0x1CB, offset: 0x84F2F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6handleyySo19UIGestureRecognizerCFTo', symObjAddr: 0x11C0, symBinAddr: 0xE480, symSize: 0x10 } + - { offsetInCU: 0x368, offset: 0x850CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCACycfcTo', symObjAddr: 0x1A40, symBinAddr: 0xED00, symSize: 0x30 } + - { offsetInCU: 0x5E4, offset: 0x85348, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCfETo', symObjAddr: 0x1AC0, symBinAddr: 0xED80, symSize: 0x60 } + - { offsetInCU: 0x613, offset: 0x85377, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCMa', symObjAddr: 0x1B20, symBinAddr: 0xEDE0, symSize: 0x20 } + - { offsetInCU: 0x627, offset: 0x8538B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCMa', symObjAddr: 0x1B40, symBinAddr: 0xEE00, symSize: 0x20 } + - { offsetInCU: 0x63B, offset: 0x8539F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwCP', symObjAddr: 0x1B60, symBinAddr: 0xEE20, symSize: 0x30 } + - { offsetInCU: 0x64F, offset: 0x853B3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwxx', symObjAddr: 0x1B90, symBinAddr: 0xEE50, symSize: 0x10 } + - { offsetInCU: 0x663, offset: 0x853C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwcp', symObjAddr: 0x1BA0, symBinAddr: 0xEE60, symSize: 0x30 } + - { offsetInCU: 0x677, offset: 0x853DB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwca', symObjAddr: 0x1BD0, symBinAddr: 0xEE90, symSize: 0x50 } + - { offsetInCU: 0x68B, offset: 0x853EF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwta', symObjAddr: 0x1C40, symBinAddr: 0xEEE0, symSize: 0x40 } + - { offsetInCU: 0x69F, offset: 0x85403, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwet', symObjAddr: 0x1C80, symBinAddr: 0xEF20, symSize: 0x40 } + - { offsetInCU: 0x6B3, offset: 0x85417, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwst', symObjAddr: 0x1CC0, symBinAddr: 0xEF60, symSize: 0x50 } + - { offsetInCU: 0x6C7, offset: 0x8542B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVMa', symObjAddr: 0x1D10, symBinAddr: 0xEFB0, symSize: 0x10 } + - { offsetInCU: 0x6DB, offset: 0x8543F, size: 0x8, addend: 0x0, symName: '_$sypSgWOc', symObjAddr: 0x1D20, symBinAddr: 0xEFC0, symSize: 0x40 } + - { offsetInCU: 0x6EF, offset: 0x85453, size: 0x8, addend: 0x0, symName: '_$sSo7UITouchCSo8NSObjectCSH10ObjectiveCWl', symObjAddr: 0x1E30, symBinAddr: 0xF000, symSize: 0x50 } + - { offsetInCU: 0x703, offset: 0x85467, size: 0x8, addend: 0x0, symName: '_$sSh8IteratorV8_VariantOyx__GSHRzlWOe', symObjAddr: 0x1E80, symBinAddr: 0xF050, symSize: 0x20 } + - { offsetInCU: 0x761, offset: 0x854C5, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOe', symObjAddr: 0x21A0, symBinAddr: 0xF370, symSize: 0x14 } + - { offsetInCU: 0xCB4, offset: 0x85A18, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesBegan_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x0, symBinAddr: 0xD300, symSize: 0x630 } + - { offsetInCU: 0xF39, offset: 0x85C9D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesMoved_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x650, symBinAddr: 0xD950, symSize: 0xE0 } + - { offsetInCU: 0xFB8, offset: 0x85D1C, size: 0x8, addend: 0x0, symName: '_$sSa6remove2atxSi_tF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x800, symBinAddr: 0xDAE0, symSize: 0xB0 } + - { offsetInCU: 0x102A, offset: 0x85D8E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfc', symObjAddr: 0x1030, symBinAddr: 0xE2F0, symSize: 0xF0 } + - { offsetInCU: 0x1179, offset: 0x85EDD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6onMove33_044DDF836BDB3B89B481C6F58BB6EF6BLLyySo19UIGestureRecognizerC_ShySo7UITouchCGSgtF', symObjAddr: 0x1590, symBinAddr: 0xE850, symSize: 0x4B0 } + - { offsetInCU: 0x18C2, offset: 0x86626, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNewAByxGyF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x1EA0, symBinAddr: 0xF070, symSize: 0x20 } + - { offsetInCU: 0x195A, offset: 0x866BE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6canvasAcA9NSCCanvasC_tcfcTf4gn_n', symObjAddr: 0x1EC0, symBinAddr: 0xF090, symSize: 0x1F0 } + - { offsetInCU: 0x27, offset: 0x86887, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xF390, symSize: 0x30 } + - { offsetInCU: 0x4B, offset: 0x868AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvpZ', symObjAddr: 0x2A0, symBinAddr: 0x137A038, symSize: 0x0 } + - { offsetInCU: 0x65, offset: 0x868C5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xF390, symSize: 0x30 } + - { offsetInCU: 0x98, offset: 0x868F8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZTo', symObjAddr: 0x160, symBinAddr: 0xF4F0, symSize: 0x30 } + - { offsetInCU: 0x104, offset: 0x86964, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfcTo', symObjAddr: 0x200, symBinAddr: 0xF590, symSize: 0x30 } + - { offsetInCU: 0x158, offset: 0x869B8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queue_WZ', symObjAddr: 0x30, symBinAddr: 0xF3C0, symSize: 0xF0 } + - { offsetInCU: 0x183, offset: 0x869E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCMa', symObjAddr: 0x1E0, symBinAddr: 0xF570, symSize: 0x20 } + - { offsetInCU: 0x197, offset: 0x869F7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfETo', symObjAddr: 0x260, symBinAddr: 0xF5F0, symSize: 0x10 } + - { offsetInCU: 0x1C2, offset: 0x86A22, size: 0x8, addend: 0x0, symName: '_$sSo17OS_dispatch_queueCMa', symObjAddr: 0x270, symBinAddr: 0xF600, symSize: 0x2F } + - { offsetInCU: 0x34A, offset: 0x86BAA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZ', symObjAddr: 0x120, symBinAddr: 0xF4B0, symSize: 0x40 } + - { offsetInCU: 0x38A, offset: 0x86BEA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfC', symObjAddr: 0x190, symBinAddr: 0xF520, symSize: 0x20 } + - { offsetInCU: 0x39E, offset: 0x86BFE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfc', symObjAddr: 0x1B0, symBinAddr: 0xF540, symSize: 0x30 } + - { offsetInCU: 0x3DA, offset: 0x86C3A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfD', symObjAddr: 0x230, symBinAddr: 0xF5C0, symSize: 0x30 } + - { offsetInCU: 0x2B, offset: 0x86C88, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xF630, symSize: 0xA0 } + - { offsetInCU: 0x66, offset: 0x86CC3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZTo', symObjAddr: 0xA0, symBinAddr: 0xF6D0, symSize: 0xA0 } + - { offsetInCU: 0xF9, offset: 0x86D56, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZTo', symObjAddr: 0x1D0, symBinAddr: 0xF800, symSize: 0x100 } + - { offsetInCU: 0x1AD, offset: 0x86E0A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZTo', symObjAddr: 0x300, symBinAddr: 0xF930, symSize: 0x30 } + - { offsetInCU: 0x22D, offset: 0x86E8A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTo', symObjAddr: 0x340, symBinAddr: 0xF970, symSize: 0x90 } + - { offsetInCU: 0x2A6, offset: 0x86F03, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZTo', symObjAddr: 0x4E0, symBinAddr: 0xFB10, symSize: 0x140 } + - { offsetInCU: 0x345, offset: 0x86FA2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfcTo', symObjAddr: 0x670, symBinAddr: 0xFCA0, symSize: 0x30 } + - { offsetInCU: 0x398, offset: 0x86FF5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTf4nnnnnndd_n', symObjAddr: 0x6D0, symBinAddr: 0xFD00, symSize: 0x170 } + - { offsetInCU: 0x50B, offset: 0x87168, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC7getFile33_F00B23A4165DD6ABFCD23C8811C7DF43LLyS2SKFZTf4nd_g', symObjAddr: 0x840, symBinAddr: 0xFE70, symSize: 0x310 } + - { offsetInCU: 0x5EA, offset: 0x87247, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCMa', symObjAddr: 0xB50, symBinAddr: 0x10180, symSize: 0x20 } + - { offsetInCU: 0x5FE, offset: 0x8725B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOAEs5ErrorAAWl', symObjAddr: 0xB70, symBinAddr: 0x101A0, symSize: 0x30 } + - { offsetInCU: 0x612, offset: 0x8726F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwCP', symObjAddr: 0xBA0, symBinAddr: 0x101D0, symSize: 0x30 } + - { offsetInCU: 0x626, offset: 0x87283, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwxx', symObjAddr: 0xBD0, symBinAddr: 0x10200, symSize: 0x10 } + - { offsetInCU: 0x63A, offset: 0x87297, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwca', symObjAddr: 0xBE0, symBinAddr: 0x10210, symSize: 0x40 } + - { offsetInCU: 0x64E, offset: 0x872AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwta', symObjAddr: 0xC30, symBinAddr: 0x10250, symSize: 0x30 } + - { offsetInCU: 0x662, offset: 0x872BF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwet', symObjAddr: 0xC60, symBinAddr: 0x10280, symSize: 0x40 } + - { offsetInCU: 0x676, offset: 0x872D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwst', symObjAddr: 0xCA0, symBinAddr: 0x102C0, symSize: 0x40 } + - { offsetInCU: 0x68A, offset: 0x872E7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwug', symObjAddr: 0xCE0, symBinAddr: 0x10300, symSize: 0x10 } + - { offsetInCU: 0x69E, offset: 0x872FB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwup', symObjAddr: 0xCF0, symBinAddr: 0x10310, symSize: 0x10 } + - { offsetInCU: 0x6B2, offset: 0x8730F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwui', symObjAddr: 0xD00, symBinAddr: 0x10320, symSize: 0x10 } + - { offsetInCU: 0x6C6, offset: 0x87323, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOMa', symObjAddr: 0xD10, symBinAddr: 0x10330, symSize: 0x10 } + - { offsetInCU: 0x74E, offset: 0x873AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP7_domainSSvgTW', symObjAddr: 0x3D0, symBinAddr: 0xFA00, symSize: 0x10 } + - { offsetInCU: 0x76A, offset: 0x873C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP5_codeSivgTW', symObjAddr: 0x3E0, symBinAddr: 0xFA10, symSize: 0x10 } + - { offsetInCU: 0x786, offset: 0x873E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP9_userInfoyXlSgvgTW', symObjAddr: 0x3F0, symBinAddr: 0xFA20, symSize: 0x10 } + - { offsetInCU: 0x7A2, offset: 0x873FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP19_getEmbeddedNSErroryXlSgyFTW', symObjAddr: 0x400, symBinAddr: 0xFA30, symSize: 0x10 } + - { offsetInCU: 0xA56, offset: 0x876B3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xF630, symSize: 0xA0 } + - { offsetInCU: 0xAEC, offset: 0x87749, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZ', symObjAddr: 0x140, symBinAddr: 0xF770, symSize: 0x90 } + - { offsetInCU: 0xC71, offset: 0x878CE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZ', symObjAddr: 0x2D0, symBinAddr: 0xF900, symSize: 0x30 } + - { offsetInCU: 0xCBB, offset: 0x87918, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZ', symObjAddr: 0x330, symBinAddr: 0xF960, symSize: 0x10 } + - { offsetInCU: 0xCDD, offset: 0x8793A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZ', symObjAddr: 0x410, symBinAddr: 0xFA40, symSize: 0xD0 } + - { offsetInCU: 0xD8D, offset: 0x879EA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfC', symObjAddr: 0x620, symBinAddr: 0xFC50, symSize: 0x20 } + - { offsetInCU: 0xDA1, offset: 0x879FE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfc', symObjAddr: 0x640, symBinAddr: 0xFC70, symSize: 0x30 } + - { offsetInCU: 0xDD7, offset: 0x87A34, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCfD', symObjAddr: 0x6A0, symBinAddr: 0xFCD0, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0x87B54, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x10350, symSize: 0x10 } + - { offsetInCU: 0x71, offset: 0x87B9E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x10, symBinAddr: 0x10360, symSize: 0x60 } + - { offsetInCU: 0xF6, offset: 0x87C23, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x80, symBinAddr: 0x103D0, symSize: 0x50 } + - { offsetInCU: 0x193, offset: 0x87CC0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0xE0, symBinAddr: 0x10430, symSize: 0x60 } + - { offsetInCU: 0x25C, offset: 0x87D89, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x150, symBinAddr: 0x104A0, symSize: 0x90 } + - { offsetInCU: 0x339, offset: 0x87E66, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfcTo', symObjAddr: 0x230, symBinAddr: 0x10580, symSize: 0x30 } + - { offsetInCU: 0x38D, offset: 0x87EBA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCMa', symObjAddr: 0x290, symBinAddr: 0x105E0, symSize: 0x14 } + - { offsetInCU: 0x4FD, offset: 0x8802A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x10350, symSize: 0x10 } + - { offsetInCU: 0x5A0, offset: 0x880CD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x70, symBinAddr: 0x103C0, symSize: 0x10 } + - { offsetInCU: 0x640, offset: 0x8816D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xD0, symBinAddr: 0x10420, symSize: 0x10 } + - { offsetInCU: 0x703, offset: 0x88230, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x140, symBinAddr: 0x10490, symSize: 0x10 } + - { offsetInCU: 0x80F, offset: 0x8833C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfC', symObjAddr: 0x1E0, symBinAddr: 0x10530, symSize: 0x20 } + - { offsetInCU: 0x823, offset: 0x88350, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfc', symObjAddr: 0x200, symBinAddr: 0x10550, symSize: 0x30 } + - { offsetInCU: 0x859, offset: 0x88386, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCfD', symObjAddr: 0x260, symBinAddr: 0x105B0, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0x883D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x10600, symSize: 0x30 } + - { offsetInCU: 0xA9, offset: 0x88452, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x30, symBinAddr: 0x10630, symSize: 0x50 } + - { offsetInCU: 0x1A6, offset: 0x8854F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0xC0, symBinAddr: 0x106C0, symSize: 0x50 } + - { offsetInCU: 0x289, offset: 0x88632, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfcTo', symObjAddr: 0x180, symBinAddr: 0x10780, symSize: 0x30 } + - { offsetInCU: 0x2DD, offset: 0x88686, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCMa', symObjAddr: 0x160, symBinAddr: 0x10760, symSize: 0x20 } + - { offsetInCU: 0x487, offset: 0x88830, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x10600, symSize: 0x30 } + - { offsetInCU: 0x5DD, offset: 0x88986, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x80, symBinAddr: 0x10680, symSize: 0x40 } + - { offsetInCU: 0x725, offset: 0x88ACE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfC', symObjAddr: 0x110, symBinAddr: 0x10710, symSize: 0x20 } + - { offsetInCU: 0x739, offset: 0x88AE2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfc', symObjAddr: 0x130, symBinAddr: 0x10730, symSize: 0x30 } + - { offsetInCU: 0x76F, offset: 0x88B18, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCfD', symObjAddr: 0x1B0, symBinAddr: 0x107B0, symSize: 0x2B } + - { offsetInCU: 0x61, offset: 0x88B9C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x10, symBinAddr: 0x107F0, symSize: 0x20 } + - { offsetInCU: 0xB7, offset: 0x88BF2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x30, symBinAddr: 0x10810, symSize: 0x10 } + - { offsetInCU: 0x110, offset: 0x88C4B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvgTo', symObjAddr: 0x40, symBinAddr: 0x10820, symSize: 0x40 } + - { offsetInCU: 0x168, offset: 0x88CA3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvsTo', symObjAddr: 0xC0, symBinAddr: 0x108A0, symSize: 0x40 } + - { offsetInCU: 0x1C3, offset: 0x88CFE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x100, symBinAddr: 0x108E0, symSize: 0x10 } + - { offsetInCU: 0x219, offset: 0x88D54, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x110, symBinAddr: 0x108F0, symSize: 0x10 } + - { offsetInCU: 0x272, offset: 0x88DAD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfcTo', symObjAddr: 0x1C0, symBinAddr: 0x109A0, symSize: 0x80 } + - { offsetInCU: 0x2CA, offset: 0x88E05, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x300, symBinAddr: 0x10AE0, symSize: 0xA0 } + - { offsetInCU: 0x32C, offset: 0x88E67, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x470, symBinAddr: 0x10C50, symSize: 0x30 } + - { offsetInCU: 0x35E, offset: 0x88E99, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC12bindDrawableyyFTo', symObjAddr: 0x520, symBinAddr: 0x10C80, symSize: 0xA0 } + - { offsetInCU: 0x3DF, offset: 0x88F1A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC14deleteDrawableyyFTo', symObjAddr: 0x600, symBinAddr: 0x10D20, symSize: 0x60 } + - { offsetInCU: 0x44F, offset: 0x88F8A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTo', symObjAddr: 0x670, symBinAddr: 0x10D90, symSize: 0x50 } + - { offsetInCU: 0x4C1, offset: 0x88FFC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfcTo', symObjAddr: 0x780, symBinAddr: 0x10EA0, symSize: 0x30 } + - { offsetInCU: 0x535, offset: 0x89070, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCMa', symObjAddr: 0x1A0, symBinAddr: 0x10980, symSize: 0x20 } + - { offsetInCU: 0x55F, offset: 0x8909A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCfETo', symObjAddr: 0x7D0, symBinAddr: 0x10EF0, symSize: 0x20 } + - { offsetInCU: 0x65D, offset: 0x89198, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VFTo', symObjAddr: 0xAF0, symBinAddr: 0x11210, symSize: 0x80 } + - { offsetInCU: 0x69B, offset: 0x891D6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xB70, symBinAddr: 0x11290, symSize: 0x20 } + - { offsetInCU: 0x6F1, offset: 0x8922C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xB90, symBinAddr: 0x112B0, symSize: 0x10 } + - { offsetInCU: 0x74A, offset: 0x89285, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvgTo', symObjAddr: 0xBA0, symBinAddr: 0x112C0, symSize: 0x20 } + - { offsetInCU: 0x7A2, offset: 0x892DD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvsTo', symObjAddr: 0xBC0, symBinAddr: 0x112E0, symSize: 0x20 } + - { offsetInCU: 0x7FD, offset: 0x89338, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvgTo', symObjAddr: 0xBE0, symBinAddr: 0x11300, symSize: 0x40 } + - { offsetInCU: 0x853, offset: 0x8938E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvsTo', symObjAddr: 0xC50, symBinAddr: 0x11370, symSize: 0x40 } + - { offsetInCU: 0x8E6, offset: 0x89421, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfcTo', symObjAddr: 0xDC0, symBinAddr: 0x114E0, symSize: 0x80 } + - { offsetInCU: 0x93E, offset: 0x89479, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0xF90, symBinAddr: 0x116B0, symSize: 0xA0 } + - { offsetInCU: 0x9A0, offset: 0x894DB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x10E0, symBinAddr: 0x11800, symSize: 0x30 } + - { offsetInCU: 0x9D2, offset: 0x8950D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC11deviceScaleSfyFTo', symObjAddr: 0x1110, symBinAddr: 0x11830, symSize: 0xB0 } + - { offsetInCU: 0xA53, offset: 0x8958E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTo', symObjAddr: 0x11D0, symBinAddr: 0x118E0, symSize: 0x30 } + - { offsetInCU: 0xAB1, offset: 0x895EC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCfETo', symObjAddr: 0x1250, symBinAddr: 0x11960, symSize: 0x20 } + - { offsetInCU: 0xC63, offset: 0x8979E, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfC12CanvasNative15NSCTouchHandlerC7PointerV_Tgm5', symObjAddr: 0x1470, symBinAddr: 0x11AD0, symSize: 0x80 } + - { offsetInCU: 0xCE6, offset: 0x89821, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCs5UInt8V_Tgm5', symObjAddr: 0x1570, symBinAddr: 0x11B50, symSize: 0x70 } + - { offsetInCU: 0xD6A, offset: 0x898A5, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOy', symObjAddr: 0x1750, symBinAddr: 0x11D30, symSize: 0x40 } + - { offsetInCU: 0xD7E, offset: 0x898B9, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOe', symObjAddr: 0x1790, symBinAddr: 0x11D70, symSize: 0x40 } + - { offsetInCU: 0xD92, offset: 0x898CD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCMa', symObjAddr: 0x17D0, symBinAddr: 0x11DB0, symSize: 0x20 } + - { offsetInCU: 0xE6C, offset: 0x899A7, size: 0x8, addend: 0x0, symName: '_$sSaySayxGqd__c7ElementQyd__RszSTRd__lufCs5UInt8V_10Foundation4DataVTgm5Tf4g_n', symObjAddr: 0x1650, symBinAddr: 0x11C30, symSize: 0x100 } + - { offsetInCU: 0x112B, offset: 0x89C66, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvg', symObjAddr: 0x80, symBinAddr: 0x10860, symSize: 0x40 } + - { offsetInCU: 0x11A8, offset: 0x89CE3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfc', symObjAddr: 0x120, symBinAddr: 0x10900, symSize: 0x80 } + - { offsetInCU: 0x11EF, offset: 0x89D2A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0x240, symBinAddr: 0x10A20, symSize: 0xC0 } + - { offsetInCU: 0x1251, offset: 0x89D8C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x3A0, symBinAddr: 0x10B80, symSize: 0xD0 } + - { offsetInCU: 0x12DA, offset: 0x89E15, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtF', symObjAddr: 0x660, symBinAddr: 0x10D80, symSize: 0x10 } + - { offsetInCU: 0x12FB, offset: 0x89E36, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfC', symObjAddr: 0x6C0, symBinAddr: 0x10DE0, symSize: 0x90 } + - { offsetInCU: 0x130F, offset: 0x89E4A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfc', symObjAddr: 0x750, symBinAddr: 0x10E70, symSize: 0x30 } + - { offsetInCU: 0x1428, offset: 0x89F63, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VF', symObjAddr: 0x7F0, symBinAddr: 0x10F10, symSize: 0x300 } + - { offsetInCU: 0x17D2, offset: 0x8A30D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvg', symObjAddr: 0xC20, symBinAddr: 0x11340, symSize: 0x30 } + - { offsetInCU: 0x180F, offset: 0x8A34A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvs', symObjAddr: 0xC90, symBinAddr: 0x113B0, symSize: 0x40 } + - { offsetInCU: 0x1836, offset: 0x8A371, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM', symObjAddr: 0xCD0, symBinAddr: 0x113F0, symSize: 0x40 } + - { offsetInCU: 0x185B, offset: 0x8A396, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM.resume.0', symObjAddr: 0xD10, symBinAddr: 0x11430, symSize: 0x10 } + - { offsetInCU: 0x1882, offset: 0x8A3BD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfC', symObjAddr: 0xD20, symBinAddr: 0x11440, symSize: 0x20 } + - { offsetInCU: 0x1896, offset: 0x8A3D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfc', symObjAddr: 0xD40, symBinAddr: 0x11460, symSize: 0x80 } + - { offsetInCU: 0x18DD, offset: 0x8A418, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0xED0, symBinAddr: 0x115F0, symSize: 0xC0 } + - { offsetInCU: 0x193A, offset: 0x8A475, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x1030, symBinAddr: 0x11750, symSize: 0xB0 } + - { offsetInCU: 0x19D6, offset: 0x8A511, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x1270, symBinAddr: 0x11980, symSize: 0xB0 } + - { offsetInCU: 0x1AB8, offset: 0x8A5F3, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFs5UInt8V_Tg5', symObjAddr: 0x13D0, symBinAddr: 0x11A30, symSize: 0xA0 } + - { offsetInCU: 0x1BC4, offset: 0x8A6FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTf4ddn_n', symObjAddr: 0x15E0, symBinAddr: 0x11BC0, symSize: 0x70 } + - { offsetInCU: 0x1CBF, offset: 0x8A7FA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTf4dn_n', symObjAddr: 0x17F0, symBinAddr: 0x11DD0, symSize: 0x410 } + - { offsetInCU: 0x4F, offset: 0x8AC12, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LLSo012OS_dispatch_E0CvpZ', symObjAddr: 0x980, symBinAddr: 0x137A180, symSize: 0x0 } + - { offsetInCU: 0x5D, offset: 0x8AC20, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x123D0, symSize: 0x30 } + - { offsetInCU: 0x75, offset: 0x8AC38, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LL_WZ', symObjAddr: 0x30, symBinAddr: 0x12400, symSize: 0xF0 } + - { offsetInCU: 0xBC, offset: 0x8AC7F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0x130, symBinAddr: 0x12500, symSize: 0x40 } + - { offsetInCU: 0x130, offset: 0x8ACF3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTo', symObjAddr: 0x3C0, symBinAddr: 0x12790, symSize: 0x80 } + - { offsetInCU: 0x18F, offset: 0x8AD52, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfcTo', symObjAddr: 0x490, symBinAddr: 0x12860, symSize: 0x30 } + - { offsetInCU: 0x1E2, offset: 0x8ADA5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTf4nnnd_n', symObjAddr: 0x500, symBinAddr: 0x128D0, symSize: 0x200 } + - { offsetInCU: 0x261, offset: 0x8AE24, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfETo', symObjAddr: 0x4F0, symBinAddr: 0x128C0, symSize: 0x10 } + - { offsetInCU: 0x29D, offset: 0x8AE60, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCMa', symObjAddr: 0x700, symBinAddr: 0x12AD0, symSize: 0x20 } + - { offsetInCU: 0x2BC, offset: 0x8AE7F, size: 0x8, addend: 0x0, symName: '_$s10ObjectiveC8ObjCBoolVIeyBy_SbIegy_TRTA', symObjAddr: 0x740, symBinAddr: 0x12B10, symSize: 0x20 } + - { offsetInCU: 0x2E5, offset: 0x8AEA8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_TA', symObjAddr: 0x790, symBinAddr: 0x12B60, symSize: 0x20 } + - { offsetInCU: 0x2F9, offset: 0x8AEBC, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x7B0, symBinAddr: 0x12B80, symSize: 0x20 } + - { offsetInCU: 0x30D, offset: 0x8AED0, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x7D0, symBinAddr: 0x12BA0, symSize: 0x10 } + - { offsetInCU: 0x321, offset: 0x8AEE4, size: 0x8, addend: 0x0, symName: '_$sSay8Dispatch0A13WorkItemFlagsVGMa', symObjAddr: 0x850, symBinAddr: 0x12BE0, symSize: 0x50 } + - { offsetInCU: 0x335, offset: 0x8AEF8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0x8D0, symBinAddr: 0x12C30, symSize: 0x20 } + - { offsetInCU: 0x369, offset: 0x8AF2C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU_TA', symObjAddr: 0x910, symBinAddr: 0x12C70, symSize: 0x20 } + - { offsetInCU: 0x4FE, offset: 0x8B0C1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x120, symBinAddr: 0x124F0, symSize: 0x10 } + - { offsetInCU: 0x58B, offset: 0x8B14E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZ', symObjAddr: 0x170, symBinAddr: 0x12540, symSize: 0x10 } + - { offsetInCU: 0x59F, offset: 0x8B162, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_', symObjAddr: 0x180, symBinAddr: 0x12550, symSize: 0x240 } + - { offsetInCU: 0x678, offset: 0x8B23B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfC', symObjAddr: 0x440, symBinAddr: 0x12810, symSize: 0x20 } + - { offsetInCU: 0x68C, offset: 0x8B24F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfc', symObjAddr: 0x460, symBinAddr: 0x12830, symSize: 0x30 } + - { offsetInCU: 0x6C2, offset: 0x8B285, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfD', symObjAddr: 0x4C0, symBinAddr: 0x12890, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0x8B32B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x12CE0, symSize: 0x20 } + - { offsetInCU: 0x77, offset: 0x8B37B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfcTo', symObjAddr: 0x70, symBinAddr: 0x12D50, symSize: 0x30 } + - { offsetInCU: 0xCB, offset: 0x8B3CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCMa', symObjAddr: 0x50, symBinAddr: 0x12D30, symSize: 0x20 } + - { offsetInCU: 0x216, offset: 0x8B51A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x12CE0, symSize: 0x20 } + - { offsetInCU: 0x22A, offset: 0x8B52E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfc', symObjAddr: 0x20, symBinAddr: 0x12D00, symSize: 0x30 } + - { offsetInCU: 0x266, offset: 0x8B56A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCfD', symObjAddr: 0xA0, symBinAddr: 0x12D80, symSize: 0x2B } + - { offsetInCU: 0x26, offset: 0x8B5B3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x3D6F80, symSize: 0x3990 } + - { offsetInCU: 0x40, offset: 0x8B5CD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0xEEC0, symBinAddr: 0xB729F0, symSize: 0x0 } + - { offsetInCU: 0x92, offset: 0x8B61F, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0x14EC0, symBinAddr: 0xB789F0, symSize: 0x0 } + - { offsetInCU: 0xF6, offset: 0x8B683, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0x14EE8, symBinAddr: 0xB78A18, symSize: 0x0 } + - { offsetInCU: 0x10C, offset: 0x8B699, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x152F0, symBinAddr: 0xB78E20, symSize: 0x0 } + - { offsetInCU: 0x123, offset: 0x8B6B0, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0x14F30, symBinAddr: 0xB78A60, symSize: 0x0 } + - { offsetInCU: 0xE22, offset: 0x8C3AF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x3D6F80, symSize: 0x3990 } + - { offsetInCU: 0x4DAE, offset: 0x9033B, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0xE6E0, symBinAddr: 0x3E5660, symSize: 0x3E0 } + - { offsetInCU: 0x4FF1, offset: 0x9057E, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x7C20, symBinAddr: 0x3DEBA0, symSize: 0x270 } + - { offsetInCU: 0x582C, offset: 0x90DB9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x3990, symBinAddr: 0x3DA910, symSize: 0xA10 } + - { offsetInCU: 0x684B, offset: 0x91DD8, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x43A0, symBinAddr: 0x3DB320, symSize: 0xA10 } + - { offsetInCU: 0x6EE9, offset: 0x92476, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x4DB0, symBinAddr: 0x3DBD30, symSize: 0x2B0 } + - { offsetInCU: 0x74BC, offset: 0x92A49, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x5060, symBinAddr: 0x3DBFE0, symSize: 0xCD0 } + - { offsetInCU: 0x83FE, offset: 0x9398B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x5D30, symBinAddr: 0x3DCCB0, symSize: 0xB40 } + - { offsetInCU: 0x8F67, offset: 0x944F4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x6870, symBinAddr: 0x3DD7F0, symSize: 0x13B0 } + - { offsetInCU: 0xA567, offset: 0x95AF4, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x7FF0, symBinAddr: 0x3DEF70, symSize: 0x2A30 } + - { offsetInCU: 0xDC6D, offset: 0x991FA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x7E90, symBinAddr: 0x3DEE10, symSize: 0x160 } + - { offsetInCU: 0xDEE7, offset: 0x99474, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0xAA20, symBinAddr: 0x3E19A0, symSize: 0x30 } + - { offsetInCU: 0xDFDC, offset: 0x99569, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0xAA50, symBinAddr: 0x3E19D0, symSize: 0x50 } + - { offsetInCU: 0xE051, offset: 0x995DE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0xAAA0, symBinAddr: 0x3E1A20, symSize: 0x10 } + - { offsetInCU: 0xE0EC, offset: 0x99679, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0xAAB0, symBinAddr: 0x3E1A30, symSize: 0xB0 } + - { offsetInCU: 0xE217, offset: 0x997A4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0xAB60, symBinAddr: 0x3E1AE0, symSize: 0x10 } + - { offsetInCU: 0xE4E9, offset: 0x99A76, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0xAB70, symBinAddr: 0x3E1AF0, symSize: 0x21A0 } + - { offsetInCU: 0x1118F, offset: 0x9C71C, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0xEAC0, symBinAddr: 0x3E5A40, symSize: 0x2D1 } + - { offsetInCU: 0x117CF, offset: 0x9CD5C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0xCD10, symBinAddr: 0x3E3C90, symSize: 0x20 } + - { offsetInCU: 0x11C6C, offset: 0x9D1F9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0xCD30, symBinAddr: 0x3E3CB0, symSize: 0x19B0 } + - { offsetInCU: 0x26, offset: 0x9E2A9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x3E5D20, symSize: 0x800 } + - { offsetInCU: 0x41, offset: 0x9E2C4, size: 0x8, addend: 0x0, symName: _aes_nohw_rcon, symObjAddr: 0x1B10, symBinAddr: 0xB78F00, symSize: 0x0 } + - { offsetInCU: 0x484, offset: 0x9E707, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x3E5D20, symSize: 0x800 } + - { offsetInCU: 0x1B2B, offset: 0x9FDAE, size: 0x8, addend: 0x0, symName: _aes_nohw_sub_bytes, symObjAddr: 0x15F0, symBinAddr: 0x3E7310, symSize: 0x300 } + - { offsetInCU: 0x32EE, offset: 0xA1571, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_encrypt, symObjAddr: 0x800, symBinAddr: 0x3E6520, symSize: 0x80 } + - { offsetInCU: 0x33DC, offset: 0xA165F, size: 0x8, addend: 0x0, symName: _aes_nohw_expand_round_keys, symObjAddr: 0x880, symBinAddr: 0x3E65A0, symSize: 0x1A0 } + - { offsetInCU: 0x386D, offset: 0xA1AF0, size: 0x8, addend: 0x0, symName: _aes_nohw_to_batch, symObjAddr: 0xA20, symBinAddr: 0x3E6740, symSize: 0x420 } + - { offsetInCU: 0x3D7D, offset: 0xA2000, size: 0x8, addend: 0x0, symName: _aes_nohw_encrypt_batch, symObjAddr: 0xE40, symBinAddr: 0x3E6B60, symSize: 0x380 } + - { offsetInCU: 0x424C, offset: 0xA24CF, size: 0x8, addend: 0x0, symName: _aes_nohw_from_batch, symObjAddr: 0x11C0, symBinAddr: 0x3E6EE0, symSize: 0x250 } + - { offsetInCU: 0x498D, offset: 0xA2C10, size: 0x8, addend: 0x0, symName: _aes_nohw_shift_rows, symObjAddr: 0x18F0, symBinAddr: 0x3E7610, symSize: 0x149 } + - { offsetInCU: 0x4BF9, offset: 0xA2E7C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_ctr32_encrypt_blocks, symObjAddr: 0x1410, symBinAddr: 0x3E7130, symSize: 0x1E0 } + - { offsetInCU: 0x26, offset: 0xA329D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x3E7760, symSize: 0x2DC } + - { offsetInCU: 0x1D2, offset: 0xA3449, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x3E7760, symSize: 0x2DC } + - { offsetInCU: 0x26, offset: 0xA36A2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x3E7A40, symSize: 0x87 } + - { offsetInCU: 0x34, offset: 0xA36B0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x3E7A40, symSize: 0x87 } + - { offsetInCU: 0x26, offset: 0xA37C0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x3E7AD0, symSize: 0x46 } + - { offsetInCU: 0x34, offset: 0xA37CE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x3E7AD0, symSize: 0x46 } + - { offsetInCU: 0x86, offset: 0xA3931, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x15F0, symBinAddr: 0xB78F80, symSize: 0x0 } + - { offsetInCU: 0xB8, offset: 0xA3963, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1580, symBinAddr: 0xB78F10, symSize: 0x0 } + - { offsetInCU: 0xDA, offset: 0xA3985, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x15B0, symBinAddr: 0xB78F40, symSize: 0x0 } + - { offsetInCU: 0xF0, offset: 0xA399B, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x15E0, symBinAddr: 0xB78F70, symSize: 0x0 } + - { offsetInCU: 0x3B7, offset: 0xA3C62, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x150, symBinAddr: 0x3E7B20, symSize: 0x20 } + - { offsetInCU: 0x594, offset: 0xA3E3F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x250, symBinAddr: 0x3E7B40, symSize: 0x20 } + - { offsetInCU: 0x63F, offset: 0xA3EEA, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x340, symBinAddr: 0x3E7B60, symSize: 0x3A0 } + - { offsetInCU: 0x11A7, offset: 0xA4A52, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x6E0, symBinAddr: 0x3E7F00, symSize: 0x140 } + - { offsetInCU: 0x14A2, offset: 0xA4D4D, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x820, symBinAddr: 0x3E8040, symSize: 0x6B0 } + - { offsetInCU: 0x26DA, offset: 0xA5F85, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xED0, symBinAddr: 0x3E86F0, symSize: 0x380 } + - { offsetInCU: 0x2D37, offset: 0xA65E2, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0x1250, symBinAddr: 0x3E8A70, symSize: 0x170 } + - { offsetInCU: 0x2F2F, offset: 0xA67DA, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0x13C0, symBinAddr: 0x3E8BE0, symSize: 0x1BF } + - { offsetInCU: 0x26, offset: 0xA6B25, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x3E8DA0, symSize: 0x50 } + - { offsetInCU: 0xFA, offset: 0xA6BF9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x3E8DA0, symSize: 0x50 } + - { offsetInCU: 0x18D, offset: 0xA6C8C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x50, symBinAddr: 0x3E8DF0, symSize: 0x60 } + - { offsetInCU: 0x2F1, offset: 0xA6DF0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0xB0, symBinAddr: 0x3E8E50, symSize: 0x90 } + - { offsetInCU: 0x4C6, offset: 0xA6FC5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0x140, symBinAddr: 0x3E8EE0, symSize: 0x20 } + - { offsetInCU: 0x5E3, offset: 0xA70E2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0x160, symBinAddr: 0x3E8F00, symSize: 0xB0 } + - { offsetInCU: 0x696, offset: 0xA7195, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x210, symBinAddr: 0x3E8FB0, symSize: 0x70 } + - { offsetInCU: 0x861, offset: 0xA7360, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x280, symBinAddr: 0x3E9020, symSize: 0x170 } + - { offsetInCU: 0xB67, offset: 0xA7666, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x3F0, symBinAddr: 0x3E9190, symSize: 0x270 } + - { offsetInCU: 0xE6A, offset: 0xA7969, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x660, symBinAddr: 0x3E9400, symSize: 0x1A0 } + - { offsetInCU: 0x105D, offset: 0xA7B5C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x800, symBinAddr: 0x3E95A0, symSize: 0x280 } + - { offsetInCU: 0x128C, offset: 0xA7D8B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0xC20, symBinAddr: 0x3E9820, symSize: 0x20 } + - { offsetInCU: 0x12F3, offset: 0xA7DF2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0xC40, symBinAddr: 0x3E9840, symSize: 0x20 } + - { offsetInCU: 0x132A, offset: 0xA7E29, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0xC60, symBinAddr: 0x3E9860, symSize: 0x10 } + - { offsetInCU: 0x13AC, offset: 0xA7EAB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0xC70, symBinAddr: 0x3E9870, symSize: 0x4A } + - { offsetInCU: 0x26, offset: 0xA8037, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x3E98C0, symSize: 0x129 } + - { offsetInCU: 0x34, offset: 0xA8045, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x3E98C0, symSize: 0x129 } + - { offsetInCU: 0x34, offset: 0xA8147, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_ia32cap_P, symObjAddr: 0x3F0, symBinAddr: 0x1381500, symSize: 0x0 } + - { offsetInCU: 0x26, offset: 0xA819C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0x3E99F0, symSize: 0xF8 } + - { offsetInCU: 0xD5, offset: 0xA824B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0x3E99F0, symSize: 0xF8 } + - { offsetInCU: 0x26, offset: 0xA83A0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0x3E9AF0, symSize: 0x1210 } + - { offsetInCU: 0x92E, offset: 0xA8CA8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0x3E9AF0, symSize: 0x1210 } + - { offsetInCU: 0x5347, offset: 0xAD6C1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base_adx, symObjAddr: 0x1210, symBinAddr: 0x3EAD00, symSize: 0x1E50 } + - { offsetInCU: 0x9B2F, offset: 0xB1EA9, size: 0x8, addend: 0x0, symName: _inline_x25519_ge_dbl_4, symObjAddr: 0x3060, symBinAddr: 0x3ECB50, symSize: 0x361 } + - { offsetInCU: 0x26, offset: 0xB3296, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0x3ECEC0, symSize: 0xD0 } + - { offsetInCU: 0x303, offset: 0xB3573, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0x3ECEC0, symSize: 0xD0 } + - { offsetInCU: 0x5A4, offset: 0xB3814, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_update, symObjAddr: 0xD0, symBinAddr: 0x3ECF90, symSize: 0x1C0 } + - { offsetInCU: 0x764, offset: 0xB39D4, size: 0x8, addend: 0x0, symName: _poly1305_blocks, symObjAddr: 0x5F0, symBinAddr: 0x3ED4B0, symSize: 0x780 } + - { offsetInCU: 0x903, offset: 0xB3B73, size: 0x8, addend: 0x0, symName: _poly1305_first_block, symObjAddr: 0x290, symBinAddr: 0x3ED150, symSize: 0x360 } + - { offsetInCU: 0xEFC, offset: 0xB416C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_finish, symObjAddr: 0xD70, symBinAddr: 0x3EDC30, symSize: 0xAA2 } + - { offsetInCU: 0x10, offset: 0xB48F5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0x3EE6D2, symSize: 0x2AF } + - { offsetInCU: 0x51, offset: 0xB4936, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0x3EE6D2, symSize: 0x2AF } + - { offsetInCU: 0x10, offset: 0xB492B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0x3EE981, symSize: 0x1F4 } + - { offsetInCU: 0x54, offset: 0xB496F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0x3EE981, symSize: 0x1F4 } + - { offsetInCU: 0x26, offset: 0xB4977, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x3EEB80, symSize: 0x490 } + - { offsetInCU: 0x76, offset: 0xB49C7, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0xB7A000, symSize: 0x0 } + - { offsetInCU: 0xFA, offset: 0xB4A4B, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0xB9F000, symSize: 0x0 } + - { offsetInCU: 0x35B, offset: 0xB4CAC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x3EEB80, symSize: 0x490 } + - { offsetInCU: 0xC5A, offset: 0xB55AB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x490, symBinAddr: 0x3EF010, symSize: 0x300 } + - { offsetInCU: 0x1135, offset: 0xB5A86, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x790, symBinAddr: 0x3EF310, symSize: 0x25D } + - { offsetInCU: 0x10, offset: 0xB5E4B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x3EF580, symSize: 0x3A0 } + - { offsetInCU: 0x48, offset: 0xB5E83, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x3EF580, symSize: 0x3A0 } + - { offsetInCU: 0x4D, offset: 0xB5E88, size: 0x8, addend: 0x0, symName: ChaCha20_ssse3, symObjAddr: 0x3A0, symBinAddr: 0x3EF920, symSize: 0x220 } + - { offsetInCU: 0x60, offset: 0xB5E9B, size: 0x8, addend: 0x0, symName: ChaCha20_4x, symObjAddr: 0x5C0, symBinAddr: 0x3EFB40, symSize: 0xA20 } + - { offsetInCU: 0x76, offset: 0xB5EB1, size: 0x8, addend: 0x0, symName: ChaCha20_8x, symObjAddr: 0xFE0, symBinAddr: 0x3F0560, symSize: 0xB4C } + - { offsetInCU: 0x10, offset: 0xB5EC3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0x3F10C0, symSize: 0x40 } + - { offsetInCU: 0x48, offset: 0xB5EFB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0x3F10C0, symSize: 0x40 } + - { offsetInCU: 0x4D, offset: 0xB5F00, size: 0x8, addend: 0x0, symName: _aesni_encrypt2, symObjAddr: 0x40, symBinAddr: 0x3F1100, symSize: 0x60 } + - { offsetInCU: 0x63, offset: 0xB5F16, size: 0x8, addend: 0x0, symName: _aesni_encrypt3, symObjAddr: 0xA0, symBinAddr: 0x3F1160, symSize: 0x70 } + - { offsetInCU: 0x79, offset: 0xB5F2C, size: 0x8, addend: 0x0, symName: _aesni_encrypt4, symObjAddr: 0x110, symBinAddr: 0x3F11D0, symSize: 0x90 } + - { offsetInCU: 0x8F, offset: 0xB5F42, size: 0x8, addend: 0x0, symName: _aesni_encrypt6, symObjAddr: 0x1A0, symBinAddr: 0x3F1260, symSize: 0xE0 } + - { offsetInCU: 0xA5, offset: 0xB5F58, size: 0x8, addend: 0x0, symName: _aesni_encrypt8, symObjAddr: 0x280, symBinAddr: 0x3F1340, symSize: 0x110 } + - { offsetInCU: 0xD9, offset: 0xB5F8C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x390, symBinAddr: 0x3F1450, symSize: 0x940 } + - { offsetInCU: 0xEA, offset: 0xB5F9D, size: 0x8, addend: 0x0, symName: __aesni_set_encrypt_key, symObjAddr: 0xCD0, symBinAddr: 0x3F1D90, symSize: 0x44D } + - { offsetInCU: 0x10, offset: 0xB5F93, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0x3F21E0, symSize: 0x160 } + - { offsetInCU: 0x3B, offset: 0xB5FBE, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0x3F21E0, symSize: 0x160 } + - { offsetInCU: 0x54, offset: 0xB5FD7, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core_2x, symObjAddr: 0x160, symBinAddr: 0x3F2340, symSize: 0x290 } + - { offsetInCU: 0x68, offset: 0xB5FEB, size: 0x8, addend: 0x0, symName: _vpaes_schedule_core, symObjAddr: 0x3F0, symBinAddr: 0x3F25D0, symSize: 0xF0 } + - { offsetInCU: 0x7F, offset: 0xB6002, size: 0x8, addend: 0x0, symName: _vpaes_schedule_round, symObjAddr: 0x4E0, symBinAddr: 0x3F26C0, symSize: 0x21 } + - { offsetInCU: 0x99, offset: 0xB601C, size: 0x8, addend: 0x0, symName: _vpaes_schedule_low_round, symObjAddr: 0x501, symBinAddr: 0x3F26E1, symSize: 0x9F } + - { offsetInCU: 0xAF, offset: 0xB6032, size: 0x8, addend: 0x0, symName: _vpaes_schedule_transform, symObjAddr: 0x5A0, symBinAddr: 0x3F2780, symSize: 0x30 } + - { offsetInCU: 0xC2, offset: 0xB6045, size: 0x8, addend: 0x0, symName: _vpaes_schedule_mangle, symObjAddr: 0x5D0, symBinAddr: 0x3F27B0, symSize: 0x50 } + - { offsetInCU: 0xE9, offset: 0xB606C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_set_encrypt_key, symObjAddr: 0x620, symBinAddr: 0x3F2800, symSize: 0x30 } + - { offsetInCU: 0xF7, offset: 0xB607A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_encrypt, symObjAddr: 0x650, symBinAddr: 0x3F2830, symSize: 0x20 } + - { offsetInCU: 0x11A, offset: 0xB609D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_ctr32_encrypt_blocks, symObjAddr: 0x670, symBinAddr: 0x3F2850, symSize: 0xD0 } + - { offsetInCU: 0x112, offset: 0xB6095, size: 0x8, addend: 0x0, symName: _vpaes_preheat, symObjAddr: 0x740, symBinAddr: 0x3F2920, symSize: 0x31 } + - { offsetInCU: 0x10, offset: 0xB60A5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x3F2960, symSize: 0x2A0 } + - { offsetInCU: 0x45, offset: 0xB60DA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x3F2960, symSize: 0x2A0 } + - { offsetInCU: 0x4C, offset: 0xB60E1, size: 0x8, addend: 0x0, symName: bn_mul4x_mont, symObjAddr: 0x2A0, symBinAddr: 0x3F2C00, symSize: 0x560 } + - { offsetInCU: 0x62, offset: 0xB60F7, size: 0x8, addend: 0x0, symName: bn_sqr8x_mont, symObjAddr: 0x800, symBinAddr: 0x3F3160, symSize: 0x220 } + - { offsetInCU: 0x79, offset: 0xB610E, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont, symObjAddr: 0xA20, symBinAddr: 0x3F3380, symSize: 0x570 } + - { offsetInCU: 0x10, offset: 0xB611D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0x3F3900, symSize: 0x660 } + - { offsetInCU: 0x4D, offset: 0xB615A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0x3F3900, symSize: 0x660 } + - { offsetInCU: 0x54, offset: 0xB6161, size: 0x8, addend: 0x0, symName: bn_mul4x_mont_gather5, symObjAddr: 0x660, symBinAddr: 0x3F3F60, symSize: 0x100 } + - { offsetInCU: 0x63, offset: 0xB6170, size: 0x8, addend: 0x0, symName: mul4x_internal, symObjAddr: 0x760, symBinAddr: 0x3F4060, symSize: 0x7E0 } + - { offsetInCU: 0x85, offset: 0xB6192, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_power5, symObjAddr: 0xF40, symBinAddr: 0x3F4840, symSize: 0x180 } + - { offsetInCU: 0xA3, offset: 0xB61B0, size: 0x8, addend: 0x0, symName: __bn_sqr8x_internal, symObjAddr: 0x10C0, symBinAddr: 0x3F49C0, symSize: 0x579 } + - { offsetInCU: 0xAA, offset: 0xB61B7, size: 0x8, addend: 0x0, symName: __bn_sqr8x_reduction, symObjAddr: 0x1639, symBinAddr: 0x3F4F39, symSize: 0x347 } + - { offsetInCU: 0xC0, offset: 0xB61CD, size: 0x8, addend: 0x0, symName: __bn_post4x_internal, symObjAddr: 0x1980, symBinAddr: 0x3F5280, symSize: 0xA0 } + - { offsetInCU: 0xD9, offset: 0xB61E6, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont_gather5, symObjAddr: 0x1A20, symBinAddr: 0x3F5320, symSize: 0xE0 } + - { offsetInCU: 0xE8, offset: 0xB61F5, size: 0x8, addend: 0x0, symName: mulx4x_internal, symObjAddr: 0x1B00, symBinAddr: 0x3F5400, symSize: 0x7E0 } + - { offsetInCU: 0xF9, offset: 0xB6206, size: 0x8, addend: 0x0, symName: bn_powerx5, symObjAddr: 0x22E0, symBinAddr: 0x3F5BE0, symSize: 0x160 } + - { offsetInCU: 0x128, offset: 0xB6235, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_internal, symObjAddr: 0x2440, symBinAddr: 0x3F5D40, symSize: 0x637 } + - { offsetInCU: 0x12F, offset: 0xB623C, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_reduction, symObjAddr: 0x2A77, symBinAddr: 0x3F6377, symSize: 0x329 } + - { offsetInCU: 0x145, offset: 0xB6252, size: 0x8, addend: 0x0, symName: __bn_postx4x_internal, symObjAddr: 0x2DA0, symBinAddr: 0x3F66A0, symSize: 0x90 } + - { offsetInCU: 0x163, offset: 0xB6270, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_scatter5, symObjAddr: 0x2E30, symBinAddr: 0x3F6730, symSize: 0x30 } + - { offsetInCU: 0x178, offset: 0xB6285, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_gather5, symObjAddr: 0x2E60, symBinAddr: 0x3F6760, symSize: 0x27F } + - { offsetInCU: 0x10, offset: 0xB6287, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0x3F69E0, symSize: 0x80 } + - { offsetInCU: 0x4A, offset: 0xB62C1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0x3F69E0, symSize: 0x80 } + - { offsetInCU: 0x64, offset: 0xB62DB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0x80, symBinAddr: 0x3F6A60, symSize: 0x360 } + - { offsetInCU: 0x7E, offset: 0xB62F5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x3E0, symBinAddr: 0x3F6DC0, symSize: 0x300 } + - { offsetInCU: 0x85, offset: 0xB62FC, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_mul_montx, symObjAddr: 0x6E0, symBinAddr: 0x3F70C0, symSize: 0x3C0 } + - { offsetInCU: 0x9B, offset: 0xB6312, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_sqr_montx, symObjAddr: 0xAA0, symBinAddr: 0x3F7480, symSize: 0x320 } + - { offsetInCU: 0xB5, offset: 0xB632C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0xDC0, symBinAddr: 0x3F77A0, symSize: 0xA0 } + - { offsetInCU: 0xC4, offset: 0xB633B, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montq, symObjAddr: 0xE60, symBinAddr: 0x3F7840, symSize: 0x240 } + - { offsetInCU: 0xE1, offset: 0xB6358, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x10A0, symBinAddr: 0x3F7A80, symSize: 0x80 } + - { offsetInCU: 0xF0, offset: 0xB6367, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montq, symObjAddr: 0x1120, symBinAddr: 0x3F7B00, symSize: 0x1A0 } + - { offsetInCU: 0x106, offset: 0xB637D, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montx, symObjAddr: 0x12C0, symBinAddr: 0x3F7CA0, symSize: 0x260 } + - { offsetInCU: 0x11C, offset: 0xB6393, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montx, symObjAddr: 0x1520, symBinAddr: 0x3F7F00, symSize: 0x1C0 } + - { offsetInCU: 0x142, offset: 0xB63B9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x16E0, symBinAddr: 0x3F80C0, symSize: 0xE0 } + - { offsetInCU: 0x158, offset: 0xB63CF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x17C0, symBinAddr: 0x3F81A0, symSize: 0xC0 } + - { offsetInCU: 0x162, offset: 0xB63D9, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w5, symObjAddr: 0x1880, symBinAddr: 0x3F8260, symSize: 0xC0 } + - { offsetInCU: 0x178, offset: 0xB63EF, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w7, symObjAddr: 0x1940, symBinAddr: 0x3F8320, symSize: 0xE0 } + - { offsetInCU: 0x188, offset: 0xB63FF, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_toq, symObjAddr: 0x1A20, symBinAddr: 0x3F8400, symSize: 0x60 } + - { offsetInCU: 0x1A0, offset: 0xB6417, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromq, symObjAddr: 0x1A80, symBinAddr: 0x3F8460, symSize: 0x60 } + - { offsetInCU: 0x1B1, offset: 0xB6428, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subq, symObjAddr: 0x1AE0, symBinAddr: 0x3F84C0, symSize: 0x40 } + - { offsetInCU: 0x1CC, offset: 0xB6443, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2q, symObjAddr: 0x1B20, symBinAddr: 0x3F8500, symSize: 0x60 } + - { offsetInCU: 0x1ED, offset: 0xB6464, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x1B80, symBinAddr: 0x3F8560, symSize: 0x320 } + - { offsetInCU: 0x200, offset: 0xB6477, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x1EA0, symBinAddr: 0x3F8880, symSize: 0x780 } + - { offsetInCU: 0x21D, offset: 0xB6494, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0x2620, symBinAddr: 0x3F9000, symSize: 0x580 } + - { offsetInCU: 0x222, offset: 0xB6499, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_tox, symObjAddr: 0x2BA0, symBinAddr: 0x3F9580, symSize: 0x60 } + - { offsetInCU: 0x23A, offset: 0xB64B1, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromx, symObjAddr: 0x2C00, symBinAddr: 0x3F95E0, symSize: 0x60 } + - { offsetInCU: 0x24B, offset: 0xB64C2, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subx, symObjAddr: 0x2C60, symBinAddr: 0x3F9640, symSize: 0x60 } + - { offsetInCU: 0x266, offset: 0xB64DD, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2x, symObjAddr: 0x2CC0, symBinAddr: 0x3F96A0, symSize: 0x60 } + - { offsetInCU: 0x27F, offset: 0xB64F6, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_doublex, symObjAddr: 0x2D20, symBinAddr: 0x3F9700, symSize: 0x320 } + - { offsetInCU: 0x292, offset: 0xB6509, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_addx, symObjAddr: 0x3040, symBinAddr: 0x3F9A20, symSize: 0x760 } + - { offsetInCU: 0x2AF, offset: 0xB6526, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_add_affinex, symObjAddr: 0x37A0, symBinAddr: 0x3FA180, symSize: 0x555 } + - { offsetInCU: 0x10, offset: 0xB6525, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0x3FA6E0, symSize: 0x5A0 } + - { offsetInCU: 0x3D, offset: 0xB6552, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0x3FA6E0, symSize: 0x5A0 } + - { offsetInCU: 0x61, offset: 0xB6576, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_decrypt, symObjAddr: 0x5A0, symBinAddr: 0x3FAC80, symSize: 0x140 } + - { offsetInCU: 0x63, offset: 0xB6578, size: 0x8, addend: 0x0, symName: _aesni_ctr32_6x, symObjAddr: 0x6E0, symBinAddr: 0x3FADC0, symSize: 0x180 } + - { offsetInCU: 0x8D, offset: 0xB65A2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_encrypt, symObjAddr: 0x860, symBinAddr: 0x3FAF40, symSize: 0x423 } + - { offsetInCU: 0x10, offset: 0xB659D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x3FB380, symSize: 0x260 } + - { offsetInCU: 0x48, offset: 0xB65D5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x3FB380, symSize: 0x260 } + - { offsetInCU: 0x5F, offset: 0xB65EC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x260, symBinAddr: 0x3FB5E0, symSize: 0xC0 } + - { offsetInCU: 0x75, offset: 0xB6602, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x320, symBinAddr: 0x3FB6A0, symSize: 0x660 } + - { offsetInCU: 0x88, offset: 0xB6615, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_avx, symObjAddr: 0x980, symBinAddr: 0x3FBD00, symSize: 0x1A0 } + - { offsetInCU: 0x9F, offset: 0xB662C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_avx, symObjAddr: 0xB20, symBinAddr: 0x3FBEA0, symSize: 0x697 } + - { offsetInCU: 0x10, offset: 0xB662B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x3FC540, symSize: 0x1240 } + - { offsetInCU: 0x51, offset: 0xB666C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x3FC540, symSize: 0x1240 } + - { offsetInCU: 0x5A, offset: 0xB6675, size: 0x8, addend: 0x0, symName: sha512_block_data_order_avx, symObjAddr: 0x1240, symBinAddr: 0x3FD780, symSize: 0x1176 } + - { offsetInCU: 0x10, offset: 0xB6677, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0x3FE900, symSize: 0x200 } + - { offsetInCU: 0x44, offset: 0xB66AB, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0x3FE900, symSize: 0x200 } + - { offsetInCU: 0x66, offset: 0xB66CD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x200, symBinAddr: 0x3FEB00, symSize: 0x21C0 } + - { offsetInCU: 0x7C, offset: 0xB66E3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x23C0, symBinAddr: 0x400CC0, symSize: 0x1D2D } + - { offsetInCU: 0x83, offset: 0xB66EA, size: 0x8, addend: 0x0, symName: process_extra_in_trailer, symObjAddr: 0x40ED, symBinAddr: 0x4029ED, symSize: 0x553 } + - { offsetInCU: 0x9C, offset: 0xB6703, size: 0x8, addend: 0x0, symName: chacha20_poly1305_open_avx2, symObjAddr: 0x4640, symBinAddr: 0x402F40, symSize: 0x25C0 } + - { offsetInCU: 0xB2, offset: 0xB6719, size: 0x8, addend: 0x0, symName: chacha20_poly1305_seal_avx2, symObjAddr: 0x6C00, symBinAddr: 0x405500, symSize: 0x2F01 } + - { offsetInCU: 0x10, offset: 0xB671B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x408440, symSize: 0x1200 } + - { offsetInCU: 0x51, offset: 0xB675C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x408440, symSize: 0x1200 } + - { offsetInCU: 0x5D, offset: 0xB6768, size: 0x8, addend: 0x0, symName: sha256_block_data_order_shaext, symObjAddr: 0x1200, symBinAddr: 0x409640, symSize: 0x340 } + - { offsetInCU: 0x72, offset: 0xB677D, size: 0x8, addend: 0x0, symName: sha256_block_data_order_ssse3, symObjAddr: 0x1540, symBinAddr: 0x409980, symSize: 0xEC0 } + - { offsetInCU: 0x86, offset: 0xB6791, size: 0x8, addend: 0x0, symName: sha256_block_data_order_avx, symObjAddr: 0x2400, symBinAddr: 0x40A840, symSize: 0xEF7 } ... diff --git a/packages/canvas/platforms/ios/src/cpp/webgpu/GPUCanvasContextImpl.cpp b/packages/canvas/platforms/ios/src/cpp/webgpu/GPUCanvasContextImpl.cpp index def8bd969..2d538a363 100644 --- a/packages/canvas/platforms/ios/src/cpp/webgpu/GPUCanvasContextImpl.cpp +++ b/packages/canvas/platforms/ios/src/cpp/webgpu/GPUCanvasContextImpl.cpp @@ -23,7 +23,7 @@ void GPUCanvasContextImpl::Init(v8::Local canvasModule, v8::Isolate auto context = isolate->GetCurrentContext(); auto func = ctor->GetFunction(context).ToLocalChecked(); - canvasModule->Set(context, ConvertToV8String(isolate, "GPUCanvasContext"), func).FromJust();; + canvasModule->Set(context, ConvertToV8String(isolate, "GPUCanvasContext"), func).FromJust(); } GPUCanvasContextImpl *GPUCanvasContextImpl::GetPointer(const v8::Local &object) { @@ -287,7 +287,7 @@ void GPUCanvasContextImpl::GetCapabilities(const v8::FunctionCallbackInfoSet(context, ConvertToV8String(isolate, "presentModes"), present_modes); ret->Set(context, ConvertToV8String(isolate, "alphaModes"), alpha_modes); ret->Set(context, ConvertToV8String(isolate, "usages"), - v8::Uint32::New(isolate, cap->usages)); + v8::Uint32::NewFromUnsigned(isolate, cap->usages)); canvas_native_webgpu_struct_surface_capabilities_release(cap); diff --git a/packages/canvas/platforms/ios/src/cpp/webgpu/GPUComputePassEncoderImpl.cpp b/packages/canvas/platforms/ios/src/cpp/webgpu/GPUComputePassEncoderImpl.cpp index cf955fb15..7a1583f4e 100644 --- a/packages/canvas/platforms/ios/src/cpp/webgpu/GPUComputePassEncoderImpl.cpp +++ b/packages/canvas/platforms/ios/src/cpp/webgpu/GPUComputePassEncoderImpl.cpp @@ -230,7 +230,7 @@ void GPUComputePassEncoderImpl::SetBindGroup(const v8::FunctionCallbackInfo(buffer->GetBackingStore()->Data()) + offset; auto size = buf->Length(); auto start = (size_t) dynamicOffsetsStart->NumberValue(context).FromJust(); - auto offset_length = (size_t) dynamicOffsetsStart->NumberValue(context).FromJust(); + auto offset_length = (size_t) dynamicOffsetsLength->NumberValue(context).FromJust(); canvas_native_webgpu_compute_pass_encoder_set_bind_group(ptr->GetComputePass(), index, bindgroup->GetBindGroup(), static_cast(static_cast(data)), diff --git a/packages/canvas/platforms/ios/src/cpp/webgpu/GPUDeviceImpl.cpp b/packages/canvas/platforms/ios/src/cpp/webgpu/GPUDeviceImpl.cpp index b478268a6..ad864d2a1 100644 --- a/packages/canvas/platforms/ios/src/cpp/webgpu/GPUDeviceImpl.cpp +++ b/packages/canvas/platforms/ios/src/cpp/webgpu/GPUDeviceImpl.cpp @@ -1371,8 +1371,6 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfoIsObject()) { @@ -1893,10 +1891,9 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo cullModeValue; - primitiveObj->Get(context, ConvertToV8String(isolate, "cullMode")).ToLocal( - &cullModeValue); - if (!cullModeValue.IsEmpty()) { + if (primitiveObj->Get(context, ConvertToV8String(isolate, "cullMode")).ToLocal( + &cullModeValue)) { if (cullModeValue->IsUint32()) { auto cullMode = cullModeValue.As()->Value(); @@ -1927,10 +1924,9 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo frontFaceValue; - primitiveObj->Get(context, ConvertToV8String(isolate, "frontFace")).ToLocal( - &frontFaceValue); - if (!frontFaceValue.IsEmpty()) { + if (primitiveObj->Get(context, ConvertToV8String(isolate, "frontFace")).ToLocal( + &frontFaceValue)) { if (frontFaceValue->IsUint32()) { auto frontFace = frontFaceValue.As()->Value(); switch (frontFace) { @@ -1955,10 +1951,9 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo stripIndexFormatValue; - primitiveObj->Get(context, ConvertToV8String(isolate, "stripIndexFormat")).ToLocal( - &stripIndexFormatValue); - if (!stripIndexFormatValue.IsEmpty()) { + if (primitiveObj->Get(context, ConvertToV8String(isolate, "stripIndexFormat")).ToLocal( + &stripIndexFormatValue)) { if (stripIndexFormatValue->IsUint32()) { auto stripIndexFormat = stripIndexFormatValue.As()->Value(); switch (stripIndexFormat) { @@ -1997,10 +1992,9 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo topologyValue; - primitiveObj->Get(context, ConvertToV8String(isolate, "topology")).ToLocal( - &topologyValue); - if (!topologyValue.IsEmpty()) { + if (primitiveObj->Get(context, ConvertToV8String(isolate, "topology")).ToLocal( + &topologyValue)) { if (topologyValue->IsUint32()) { auto topology = stripIndexFormatValue.As()->Value(); @@ -2487,10 +2481,9 @@ void GPUDeviceImpl::CreateShaderModule(const v8::FunctionCallbackInfo } v8::Local codeVal; - desc->Get(context, ConvertToV8String(isolate, "code")).ToLocal(&codeVal); std::string code; - if (!codeVal.IsEmpty() && codeVal->IsString()) { + if (desc->Get(context, ConvertToV8String(isolate, "code")).ToLocal(&codeVal) && codeVal->IsString()) { code = ConvertFromV8String(isolate, codeVal); } @@ -2537,37 +2530,33 @@ void GPUDeviceImpl::CreateTexture(const v8::FunctionCallbackInfo &arg if (optionsVal->IsObject()) { auto options = optionsVal.As(); v8::Local depthOrArrayLayersVal; - options->Get(context, ConvertToV8String(isolate, "depthOrArrayLayers")).ToLocal( - &depthOrArrayLayersVal); - if (depthOrArrayLayersVal->IsUint32()) { + if (options->Get(context, ConvertToV8String(isolate, "depthOrArrayLayers")).ToLocal( + &depthOrArrayLayersVal) && depthOrArrayLayersVal->IsUint32()) { descriptor.depthOrArrayLayers = depthOrArrayLayersVal.As()->Value(); } v8::Local widthVal; - options->Get(context, ConvertToV8String(isolate, "width")).ToLocal( - &widthVal); - if (widthVal->IsUint32()) { + if ( options->Get(context, ConvertToV8String(isolate, "width")).ToLocal( + &widthVal) &&widthVal->IsUint32()) { descriptor.width = widthVal.As()->Value(); } v8::Local heightVal; - options->Get(context, ConvertToV8String(isolate, "height")).ToLocal( - &heightVal); - if (heightVal->IsUint32()) { + if (options->Get(context, ConvertToV8String(isolate, "height")).ToLocal( + &heightVal) && heightVal->IsUint32()) { descriptor.height = heightVal.As()->Value(); } v8::Local usageVal; - options->Get(context, ConvertToV8String(isolate, "usage")).ToLocal( - &usageVal); - if (usageVal->IsUint32()) { + if (options->Get(context, ConvertToV8String(isolate, "usage")).ToLocal( + &usageVal) && usageVal->IsUint32()) { descriptor.usage = usageVal.As()->Value(); } @@ -2602,7 +2591,7 @@ void GPUDeviceImpl::CreateTexture(const v8::FunctionCallbackInfo &arg descriptor.dimension = CanvasTextureDimension::CanvasTextureDimensionD1; } else if (dimension == "2d") { descriptor.dimension = CanvasTextureDimension::CanvasTextureDimensionD2; - } else if (dimension == "d3") { + } else if (dimension == "3d") { descriptor.dimension = CanvasTextureDimension::CanvasTextureDimensionD3; } @@ -2617,7 +2606,7 @@ void GPUDeviceImpl::CreateTexture(const v8::FunctionCallbackInfo &arg auto format = ConvertFromV8String(isolate, formatVal); // todo use enum - CanvasGPUTextureFormat fmt{}; + //CanvasGPUTextureFormat fmt{}; auto fmtOpt = canvas_native_webgpu_enum_string_to_gpu_texture(format.c_str()); if (fmtOpt.tag == CanvasOptionalGPUTextureFormatSome) { diff --git a/packages/canvas/platforms/ios/src/cpp/webgpu/GPUQueueImpl.cpp b/packages/canvas/platforms/ios/src/cpp/webgpu/GPUQueueImpl.cpp index ecc1e2c76..c9e0056b8 100644 --- a/packages/canvas/platforms/ios/src/cpp/webgpu/GPUQueueImpl.cpp +++ b/packages/canvas/platforms/ios/src/cpp/webgpu/GPUQueueImpl.cpp @@ -11,6 +11,8 @@ #include "ImageAssetImpl.h" #include "ImageBitmapImpl.h" #include "ImageDataImpl.h" +#include "CanvasRenderingContext2DImpl.h" +#include "WebGLRenderingContextBase.h" GPUQueueImpl::GPUQueueImpl(const CanvasGPUQueue *queue) : queue_(queue) {} @@ -106,16 +108,27 @@ void GPUQueueImpl::CopyExternalImageToTexture(const v8::FunctionCallbackInfo()); buffer = canvas_native_image_asset_get_data(imageAsset->GetImageAsset()); + width = canvas_native_image_asset_width(imageAsset->GetImageAsset()); + height = canvas_native_image_asset_height(imageAsset->GetImageAsset()); } else if (sourceType == NativeType::ImageAsset) { auto imageAsset = ImageAssetImpl::GetPointer(sourceSourceValue.As()); buffer = canvas_native_image_asset_get_data(imageAsset->GetImageAsset()); + width = canvas_native_image_asset_width(imageAsset->GetImageAsset()); + height = canvas_native_image_asset_height(imageAsset->GetImageAsset()); } else if (sourceType == NativeType::ImageData) { auto imageData = ImageDataImpl::GetPointer(sourceSourceValue.As()); buffer = canvas_native_image_data_get_data(imageData->GetImageData()); + width = canvas_native_image_data_get_width(imageData->GetImageData()); + height = canvas_native_image_data_get_height(imageData->GetImageData()); + } else if (sourceType == NativeType::CanvasRenderingContext2D) { + auto c2d = CanvasRenderingContext2DImpl::GetPointer(sourceSourceValue.As()); + } else if (sourceType == NativeType::WebGLRenderingContextBase) { + auto webgl = WebGLRenderingContextBase::GetPointer(sourceSourceValue.As()); } if (buffer == nullptr) { @@ -123,6 +136,37 @@ void GPUQueueImpl::CopyExternalImageToTexture(const v8::FunctionCallbackInfo sourceOriginVal; + if (sourceObj->Get(context, ConvertToV8String(isolate, "origin")).ToLocal( + &sourceOriginVal) && + sourceOriginVal->IsObject()) { + auto sourceOriginObj = sourceOriginVal.As(); + + v8::Local xVal; + if (sourceOriginObj->Get(context, ConvertToV8String(isolate, "x")).ToLocal(&xVal) && + xVal->IsUint32()) { + sourceOrigin.x = xVal->Uint32Value(context).FromJust(); + } + + v8::Local yVal; + if (sourceOriginObj->Get(context, ConvertToV8String(isolate, "y")).ToLocal(&yVal) && + yVal->IsUint32()) { + sourceOrigin.y = yVal->Uint32Value(context).FromJust(); + } + + } + + bool flipY = false; + + v8::Local flipYVal; + if (sourceObj->Get(context, ConvertToV8String(isolate, "flipY")).ToLocal(&flipYVal) && + flipYVal->IsBoolean()) { + flipY = flipYVal->BooleanValue(isolate); + } + auto destinationObj = destinationVal.As(); auto textureVal = destinationObj->Get(context, ConvertToV8String(isolate, @@ -189,12 +233,7 @@ void GPUQueueImpl::CopyExternalImageToTexture(const v8::FunctionCallbackInfo(); @@ -229,8 +268,19 @@ void GPUQueueImpl::CopyExternalImageToTexture(const v8::FunctionCallbackInfoGetGPUQueue(), &destination, &layout, - &extent3D, data, size); + CanvasImageCopyExternalImage source{ + data, + size, + sourceOrigin, + flipY, + width, + height, + }; + + + canvas_native_webgpu_queue_copy_external_image_to_texture(ptr->GetGPUQueue(), &source, + &destination, + &extent3D); } } @@ -444,7 +494,6 @@ void GPUQueueImpl::WriteTexture(const v8::FunctionCallbackInfo &args) origin, aspect }; - auto dataObj = dataVal.As(); auto array = dataVal.As(); auto ab = array->Buffer(); auto offset = array->ByteOffset(); diff --git a/packages/canvas/platforms/ios/src/cpp/webgpu/GPURenderBundleEncoderImpl.cpp b/packages/canvas/platforms/ios/src/cpp/webgpu/GPURenderBundleEncoderImpl.cpp index 21497bf10..4f972b7c7 100644 --- a/packages/canvas/platforms/ios/src/cpp/webgpu/GPURenderBundleEncoderImpl.cpp +++ b/packages/canvas/platforms/ios/src/cpp/webgpu/GPURenderBundleEncoderImpl.cpp @@ -27,7 +27,8 @@ void GPURenderBundleEncoderImpl::Init(v8::Local canvasModule, v8::Is auto context = isolate->GetCurrentContext(); auto func = ctor->GetFunction(context).ToLocalChecked(); - canvasModule->Set(context, ConvertToV8String(isolate, "GPURenderBundleEncoder"), func).FromJust();; + canvasModule->Set(context, ConvertToV8String(isolate, "GPURenderBundleEncoder"), + func).FromJust(); } GPURenderBundleEncoderImpl * @@ -342,7 +343,7 @@ void GPURenderBundleEncoderImpl::SetBindGroup(const v8::FunctionCallbackInfoUint32Value(context).FromJust(); - auto bindgroup = GPUBindGroupImpl::GetPointer(bindGroupVal.As()); + auto bindGroup = GPUBindGroupImpl::GetPointer(bindGroupVal.As()); if (dynamicOffsets->IsUint8Array()) { auto buf = dynamicOffsets.As(); @@ -354,12 +355,12 @@ void GPURenderBundleEncoderImpl::SetBindGroup(const v8::FunctionCallbackInfoNumberValue(context).FromJust(); auto offset_length = (size_t) dynamicOffsetsLength->NumberValue(context).FromJust(); canvas_native_webgpu_render_bundle_encoder_set_bind_group(ptr->GetEncoder(), index, - bindgroup->GetBindGroup(), + bindGroup->GetBindGroup(), static_cast(static_cast(data)), size, start, offset_length); } else { canvas_native_webgpu_render_bundle_encoder_set_bind_group(ptr->GetEncoder(), index, - bindgroup->GetBindGroup(), + bindGroup->GetBindGroup(), nullptr, 0, 0, 0); } } diff --git a/packages/canvas/platforms/ios/src/cpp/webgpu/GPURenderPassEncoderImpl.cpp b/packages/canvas/platforms/ios/src/cpp/webgpu/GPURenderPassEncoderImpl.cpp index 93d1e2a61..0b2ad5fcd 100644 --- a/packages/canvas/platforms/ios/src/cpp/webgpu/GPURenderPassEncoderImpl.cpp +++ b/packages/canvas/platforms/ios/src/cpp/webgpu/GPURenderPassEncoderImpl.cpp @@ -298,7 +298,7 @@ void GPURenderPassEncoderImpl::End(const v8::FunctionCallbackInfo &ar if (ptr == nullptr) { return; } - + canvas_native_webgpu_render_pass_encoder_end(ptr->GetPass()); } diff --git a/packages/canvas/platforms/ios/src/cpp/webgpu/GPUTextureImpl.cpp b/packages/canvas/platforms/ios/src/cpp/webgpu/GPUTextureImpl.cpp index 4e8c9fc2e..139b9cf29 100644 --- a/packages/canvas/platforms/ios/src/cpp/webgpu/GPUTextureImpl.cpp +++ b/packages/canvas/platforms/ios/src/cpp/webgpu/GPUTextureImpl.cpp @@ -22,7 +22,7 @@ void GPUTextureImpl::Init(v8::Local canvasModule, v8::Isolate *isola auto context = isolate->GetCurrentContext(); auto func = ctor->GetFunction(context).ToLocalChecked(); - canvasModule->Set(context, ConvertToV8String(isolate, "GPUTexture"), func).FromJust();; + canvasModule->Set(context, ConvertToV8String(isolate, "GPUTexture"), func).FromJust(); } GPUTextureImpl *GPUTextureImpl::GetPointer(const v8::Local &object) { @@ -115,13 +115,13 @@ GPUTextureImpl::GetDimension(v8::Local name, auto width = canvas_native_webgpu_texture_get_dimension(ptr->GetTexture()); auto isolate = info.GetIsolate(); switch (width) { - case CanvasTextureDimension::CanvasTextureDimensionD1: + case CanvasTextureDimensionD1: info.GetReturnValue().Set(ConvertToV8String(isolate, "1d")); break; - case CanvasTextureDimension::CanvasTextureDimensionD2: - info.GetReturnValue().Set(ConvertToV8String(isolate, "1d")); + case CanvasTextureDimensionD2: + info.GetReturnValue().Set(ConvertToV8String(isolate, "2d")); break; - case CanvasTextureDimension::CanvasTextureDimensionD3: + case CanvasTextureDimensionD3: info.GetReturnValue().Set(ConvertToV8String(isolate, "3d")); break; } @@ -237,14 +237,118 @@ void GPUTextureImpl::CreateView(const v8::FunctionCallbackInfo &args) return; } auto isolate = args.GetIsolate(); + auto context = isolate->GetCurrentContext(); + + auto descVal = args[0]; - auto desc = args[0]; CanvasCreateTextureViewDescriptor *descriptor = nullptr; - if (desc->IsObject()) { + + CanvasTextureAspect aspect = CanvasTextureAspectAll; + + CanvasImageSubresourceRange range = { + aspect, 0, -1, 0, -1 + }; + + + if (descVal->IsObject()) { + descriptor = new CanvasCreateTextureViewDescriptor{}; + descriptor->label = nullptr; + auto descObj = descVal.As(); + + v8::Local aspectVal; + + if (descObj->Get(context, ConvertToV8String(isolate, "aspect")).ToLocal(&aspectVal)) { + auto aspectStr = ConvertFromV8String(isolate, aspectVal); + if (aspectStr == "all") { + aspect = CanvasTextureAspectAll; + } else if (aspectStr == "stencil-only") { + aspect = CanvasTextureAspectStencilOnly; + } else if (aspectStr == "depth-only") { + aspect = CanvasTextureAspectDepthOnly; + } + } + + + + v8::Local arrayLayerCountVal; + if (descObj->Get(context, ConvertToV8String(isolate, "arrayLayerCount")).ToLocal( + &arrayLayerCountVal) && arrayLayerCountVal->IsInt32()) { + range.array_layer_count = arrayLayerCountVal->Int32Value(context).FromJust(); + } + + v8::Local mipLevelCountVal; + if (descObj->Get(context, ConvertToV8String(isolate, "mipLevelCount")).ToLocal( + &mipLevelCountVal) && mipLevelCountVal->IsInt32()) { + range.mip_level_count = mipLevelCountVal->Int32Value(context).FromJust(); + } + + v8::Local baseArrayLayerVal; + if (descObj->Get(context, ConvertToV8String(isolate, "baseArrayLayer")).ToLocal( + &baseArrayLayerVal) && baseArrayLayerVal->IsUint32()) { + range.base_array_layer = baseArrayLayerVal->Uint32Value(context).FromJust(); + } + + v8::Local baseMipLevelVal; + if (descObj->Get(context, ConvertToV8String(isolate, "baseMipLevel")).ToLocal( + &baseMipLevelVal) && baseMipLevelVal->IsUint32()) { + range.base_mip_level = baseMipLevelVal->Uint32Value(context).FromJust(); + } + + descriptor->range = ⦥ + + + + v8::Local formatVal; + descObj->Get(context, ConvertToV8String(isolate, "format")).ToLocal(&formatVal); + auto formatStr = ConvertFromV8String(isolate, formatVal); + + descriptor->format = CanvasOptionalGPUTextureFormat { + CanvasOptionalGPUTextureFormatNone + }; + + if (!formatStr.empty()){ + auto format = canvas_native_webgpu_enum_string_to_gpu_texture(formatStr.c_str()); + descriptor->format = format; + } + + auto dimension = CanvasOptionalTextureViewDimensionNone; + + + v8::Local labelVal; + descObj->Get(context, ConvertToV8String(isolate, "label")).ToLocal(&labelVal); + + if (!labelVal.IsEmpty() && labelVal->IsString()) { + descriptor->label = *v8::String::Utf8Value(isolate, labelVal); + } + + v8::Local dimensionVal; + if (descObj->Get(context, ConvertToV8String(isolate, "dimension")).ToLocal(&dimensionVal)) { + auto dimensionStr = ConvertFromV8String(isolate, dimensionVal); + if (dimensionStr == "1d") { + dimension = CanvasOptionalTextureViewDimensionD1; + } else if (dimensionStr == "2d") { + dimension = CanvasOptionalTextureViewDimensionD2; + } else if (dimensionStr == "2d-array") { + dimension = CanvasOptionalTextureViewDimensionD2Array; + } else if (dimensionStr == "cube") { + dimension = CanvasOptionalTextureViewDimensionCube; + } else if (dimensionStr == "cube-array") { + dimension = CanvasOptionalTextureViewDimensionCubeArray; + } else if (dimensionStr == "3d") { + dimension = CanvasOptionalTextureViewDimensionD3; + } + } + + descriptor->dimension = dimension; + } auto view = canvas_native_webgpu_texture_create_texture_view(ptr->GetTexture(), descriptor); + if (descriptor != nullptr) { + delete descriptor; + } + if (view != nullptr) { auto ret = GPUTextureViewImpl::NewInstance(isolate, new GPUTextureViewImpl(view)); args.GetReturnValue().Set(ret); diff --git a/packages/canvas/src-native/canvas-android/canvas/src/main/cpp/include/canvas_native.h b/packages/canvas/src-native/canvas-android/canvas/src/main/cpp/include/canvas_native.h index 22391179f..7780cf624 100644 --- a/packages/canvas/src-native/canvas-android/canvas/src/main/cpp/include/canvas_native.h +++ b/packages/canvas/src-native/canvas-android/canvas/src/main/cpp/include/canvas_native.h @@ -8,6 +8,16 @@ #include #include +#define CanvasGPUTextureUsageCopySrc (1 << 0) + +#define CanvasGPUTextureUsageCopyDst (1 << 1) + +#define CanvasGPUTextureUsageTextureBinding (1 << 2) + +#define CanvasGPUTextureUsageStorageBinding (1 << 3) + +#define CanvasGPUTextureUsageRenderAttachment (1 << 4) + typedef enum CanvasAddressMode { /** * Clamp the value to the edge of the texture @@ -1731,20 +1741,6 @@ typedef struct CanvasSurfaceCapabilities { uint32_t usages; } CanvasSurfaceCapabilities; -typedef enum CanvasOptionsGPUTextureFormat_Tag { - CanvasOptionsGPUTextureFormatNone, - CanvasOptionsGPUTextureFormatSome, -} CanvasOptionsGPUTextureFormat_Tag; - -typedef struct CanvasOptionsGPUTextureFormat { - CanvasOptionsGPUTextureFormat_Tag tag; - union { - struct { - struct CanvasGPUTextureFormat some; - }; - }; -} CanvasOptionsGPUTextureFormat; - typedef struct CanvasImageSubresourceRange { enum CanvasTextureAspect aspect; uint32_t base_mip_level; @@ -1754,9 +1750,8 @@ typedef struct CanvasImageSubresourceRange { } CanvasImageSubresourceRange; typedef struct CanvasCreateTextureViewDescriptor { - const struct CanvasGPUTexture *texture; const char *label; - struct CanvasOptionsGPUTextureFormat format; + struct CanvasOptionalGPUTextureFormat format; enum CanvasOptionalTextureViewDimension dimension; const struct CanvasImageSubresourceRange *range; } CanvasCreateTextureViewDescriptor; diff --git a/packages/canvas/src-native/canvas-ios/CanvasNative/include/canvas_native.h b/packages/canvas/src-native/canvas-ios/CanvasNative/include/canvas_native.h index 22391179f..7780cf624 100644 --- a/packages/canvas/src-native/canvas-ios/CanvasNative/include/canvas_native.h +++ b/packages/canvas/src-native/canvas-ios/CanvasNative/include/canvas_native.h @@ -8,6 +8,16 @@ #include #include +#define CanvasGPUTextureUsageCopySrc (1 << 0) + +#define CanvasGPUTextureUsageCopyDst (1 << 1) + +#define CanvasGPUTextureUsageTextureBinding (1 << 2) + +#define CanvasGPUTextureUsageStorageBinding (1 << 3) + +#define CanvasGPUTextureUsageRenderAttachment (1 << 4) + typedef enum CanvasAddressMode { /** * Clamp the value to the edge of the texture @@ -1731,20 +1741,6 @@ typedef struct CanvasSurfaceCapabilities { uint32_t usages; } CanvasSurfaceCapabilities; -typedef enum CanvasOptionsGPUTextureFormat_Tag { - CanvasOptionsGPUTextureFormatNone, - CanvasOptionsGPUTextureFormatSome, -} CanvasOptionsGPUTextureFormat_Tag; - -typedef struct CanvasOptionsGPUTextureFormat { - CanvasOptionsGPUTextureFormat_Tag tag; - union { - struct { - struct CanvasGPUTextureFormat some; - }; - }; -} CanvasOptionsGPUTextureFormat; - typedef struct CanvasImageSubresourceRange { enum CanvasTextureAspect aspect; uint32_t base_mip_level; @@ -1754,9 +1750,8 @@ typedef struct CanvasImageSubresourceRange { } CanvasImageSubresourceRange; typedef struct CanvasCreateTextureViewDescriptor { - const struct CanvasGPUTexture *texture; const char *label; - struct CanvasOptionsGPUTextureFormat format; + struct CanvasOptionalGPUTextureFormat format; enum CanvasOptionalTextureViewDimension dimension; const struct CanvasImageSubresourceRange *range; } CanvasCreateTextureViewDescriptor; diff --git a/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/CanvasNative b/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/CanvasNative index 0d4f9888b..5c0725713 100755 Binary files a/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/CanvasNative and b/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/CanvasNative differ diff --git a/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/canvas_native.h b/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/canvas_native.h index 22391179f..7780cf624 100644 --- a/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/canvas_native.h +++ b/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/canvas_native.h @@ -8,6 +8,16 @@ #include #include +#define CanvasGPUTextureUsageCopySrc (1 << 0) + +#define CanvasGPUTextureUsageCopyDst (1 << 1) + +#define CanvasGPUTextureUsageTextureBinding (1 << 2) + +#define CanvasGPUTextureUsageStorageBinding (1 << 3) + +#define CanvasGPUTextureUsageRenderAttachment (1 << 4) + typedef enum CanvasAddressMode { /** * Clamp the value to the edge of the texture @@ -1731,20 +1741,6 @@ typedef struct CanvasSurfaceCapabilities { uint32_t usages; } CanvasSurfaceCapabilities; -typedef enum CanvasOptionsGPUTextureFormat_Tag { - CanvasOptionsGPUTextureFormatNone, - CanvasOptionsGPUTextureFormatSome, -} CanvasOptionsGPUTextureFormat_Tag; - -typedef struct CanvasOptionsGPUTextureFormat { - CanvasOptionsGPUTextureFormat_Tag tag; - union { - struct { - struct CanvasGPUTextureFormat some; - }; - }; -} CanvasOptionsGPUTextureFormat; - typedef struct CanvasImageSubresourceRange { enum CanvasTextureAspect aspect; uint32_t base_mip_level; @@ -1754,9 +1750,8 @@ typedef struct CanvasImageSubresourceRange { } CanvasImageSubresourceRange; typedef struct CanvasCreateTextureViewDescriptor { - const struct CanvasGPUTexture *texture; const char *label; - struct CanvasOptionsGPUTextureFormat format; + struct CanvasOptionalGPUTextureFormat format; enum CanvasOptionalTextureViewDimension dimension; const struct CanvasImageSubresourceRange *range; } CanvasCreateTextureViewDescriptor; diff --git a/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative b/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative index 6b51640a3..031f56014 100644 Binary files a/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative and b/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative differ diff --git a/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml b/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml index 526203e38..c66f2f834 100644 --- a/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml +++ b/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml @@ -2,606 +2,606 @@ triple: 'arm64-apple-darwin' binary-path: '/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/dist/Release-iphoneos/CanvasNative.framework/CanvasNative' relocations: - - { offsetInCU: 0x34, offset: 0x7794A, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionString, symObjAddr: 0x0, symBinAddr: 0x971000, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x7797F, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionNumber, symObjAddr: 0x38, symBinAddr: 0x971038, symSize: 0x0 } - - { offsetInCU: 0x3F, offset: 0x779D4, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x28, symBinAddr: 0x4028, symSize: 0xC } - - { offsetInCU: 0x53, offset: 0x779E8, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x34, symBinAddr: 0x4034, symSize: 0x4 } - - { offsetInCU: 0x67, offset: 0x779FC, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x38, symBinAddr: 0x4038, symSize: 0x20 } - - { offsetInCU: 0x7B, offset: 0x77A10, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x58, symBinAddr: 0x4058, symSize: 0x28 } - - { offsetInCU: 0x8F, offset: 0x77A24, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwCP', symObjAddr: 0x94, symBinAddr: 0x4094, symSize: 0x30 } - - { offsetInCU: 0xA3, offset: 0x77A38, size: 0x8, addend: 0x0, symName: ___swift_memcpy32_8, symObjAddr: 0xC4, symBinAddr: 0x40C4, symSize: 0xC } - - { offsetInCU: 0xB7, offset: 0x77A4C, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwet', symObjAddr: 0xD0, symBinAddr: 0x40D0, symSize: 0x20 } - - { offsetInCU: 0xCB, offset: 0x77A60, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwst', symObjAddr: 0xF0, symBinAddr: 0x40F0, symSize: 0x2C } - - { offsetInCU: 0x4F, offset: 0x77C49, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC11_WriteQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2AE8, symBinAddr: 0x116E7E0, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x77C63, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10_ReadQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2AF0, symBinAddr: 0x116E7E8, symSize: 0x0 } - - { offsetInCU: 0x9D, offset: 0x77C97, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTo', symObjAddr: 0x4, symBinAddr: 0x4194, symSize: 0x38 } - - { offsetInCU: 0xF3, offset: 0x77CED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x40, symBinAddr: 0x41D0, symSize: 0x70 } - - { offsetInCU: 0x144, offset: 0x77D3E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0xB4, symBinAddr: 0x4244, symSize: 0x44 } - - { offsetInCU: 0x19F, offset: 0x77D99, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0xFC, symBinAddr: 0x428C, symSize: 0x50 } - - { offsetInCU: 0x204, offset: 0x77DFE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0x150, symBinAddr: 0x42E0, symSize: 0x68 } - - { offsetInCU: 0x27D, offset: 0x77E77, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x1BC, symBinAddr: 0x434C, symSize: 0x98 } - - { offsetInCU: 0x2DA, offset: 0x77ED4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x258, symBinAddr: 0x43E8, symSize: 0x14 } - - { offsetInCU: 0x35C, offset: 0x77F56, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x270, symBinAddr: 0x4400, symSize: 0x14 } - - { offsetInCU: 0x40B, offset: 0x78005, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZTo', symObjAddr: 0x2C8, symBinAddr: 0x4458, symSize: 0x50 } - - { offsetInCU: 0x4DC, offset: 0x780D6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZTo', symObjAddr: 0x364, symBinAddr: 0x44F4, symSize: 0x58 } - - { offsetInCU: 0x5B6, offset: 0x781B0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZTo', symObjAddr: 0x404, symBinAddr: 0x4594, symSize: 0x58 } - - { offsetInCU: 0x695, offset: 0x7828F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZTo', symObjAddr: 0x4AC, symBinAddr: 0x463C, symSize: 0x60 } - - { offsetInCU: 0x741, offset: 0x7833B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZTo', symObjAddr: 0x510, symBinAddr: 0x46A0, symSize: 0x8 } - - { offsetInCU: 0x7AA, offset: 0x783A4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZTo', symObjAddr: 0x51C, symBinAddr: 0x46AC, symSize: 0x8 } - - { offsetInCU: 0x801, offset: 0x783FB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZTo', symObjAddr: 0x538, symBinAddr: 0x46C8, symSize: 0x8 } - - { offsetInCU: 0x858, offset: 0x78452, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZTo', symObjAddr: 0x544, symBinAddr: 0x46D4, symSize: 0x8 } - - { offsetInCU: 0x8AF, offset: 0x784A9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZTo', symObjAddr: 0x550, symBinAddr: 0x46E0, symSize: 0x8 } - - { offsetInCU: 0x906, offset: 0x78500, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZTo', symObjAddr: 0x55C, symBinAddr: 0x46EC, symSize: 0x8 } - - { offsetInCU: 0x985, offset: 0x7857F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZTo', symObjAddr: 0x56C, symBinAddr: 0x46FC, symSize: 0x24 } - - { offsetInCU: 0xA36, offset: 0x78630, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZTo', symObjAddr: 0x594, symBinAddr: 0x4724, symSize: 0x14 } - - { offsetInCU: 0xAA9, offset: 0x786A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZTo', symObjAddr: 0x5AC, symBinAddr: 0x473C, symSize: 0x8 } - - { offsetInCU: 0xB00, offset: 0x786FA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZTo', symObjAddr: 0x60C, symBinAddr: 0x479C, symSize: 0x74 } - - { offsetInCU: 0xB8B, offset: 0x78785, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTo', symObjAddr: 0x814, symBinAddr: 0x49A4, symSize: 0xA0 } - - { offsetInCU: 0xBDC, offset: 0x787D6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZTo', symObjAddr: 0xB1C, symBinAddr: 0x4CAC, symSize: 0x98 } - - { offsetInCU: 0xC2D, offset: 0x78827, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZTo', symObjAddr: 0xE70, symBinAddr: 0x5000, symSize: 0x98 } - - { offsetInCU: 0xC89, offset: 0x78883, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTo', symObjAddr: 0x1298, symBinAddr: 0x5428, symSize: 0xD8 } - - { offsetInCU: 0xCD1, offset: 0x788CB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTo', symObjAddr: 0x1374, symBinAddr: 0x5504, symSize: 0x34 } - - { offsetInCU: 0xD31, offset: 0x7892B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfcTo', symObjAddr: 0x13F8, symBinAddr: 0x5588, symSize: 0x3C } - - { offsetInCU: 0xD82, offset: 0x7897C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTf4nd_n', symObjAddr: 0x1468, symBinAddr: 0x55F8, symSize: 0x2AC } - - { offsetInCU: 0xFB6, offset: 0x78BB0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTf4nnnd_n', symObjAddr: 0x1714, symBinAddr: 0x58A4, symSize: 0x264 } - - { offsetInCU: 0x11B0, offset: 0x78DAA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTf4nnd_n', symObjAddr: 0x1978, symBinAddr: 0x5B08, symSize: 0xEC } - - { offsetInCU: 0x12AD, offset: 0x78EA7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTf4nnnnd_n', symObjAddr: 0x1A64, symBinAddr: 0x5BF4, symSize: 0x1B4 } - - { offsetInCU: 0x1422, offset: 0x7901C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTf4nnnnnnd_n', symObjAddr: 0x1C18, symBinAddr: 0x5DA8, symSize: 0x1CC } - - { offsetInCU: 0x15B7, offset: 0x791B1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTf4nnnnnnnnnnd_n', symObjAddr: 0x1DE4, symBinAddr: 0x5F74, symSize: 0x1E0 } - - { offsetInCU: 0x17A3, offset: 0x7939D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTf4nnnd_n', symObjAddr: 0x1FC4, symBinAddr: 0x6154, symSize: 0x1B4 } - - { offsetInCU: 0x186D, offset: 0x79467, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTf4nnnnd_n', symObjAddr: 0x231C, symBinAddr: 0x64AC, symSize: 0x1D4 } - - { offsetInCU: 0x194E, offset: 0x79548, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTf4d_n', symObjAddr: 0x24F0, symBinAddr: 0x6680, symSize: 0x114 } - - { offsetInCU: 0x19F9, offset: 0x795F3, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TR', symObjAddr: 0x8B4, symBinAddr: 0x4A44, symSize: 0x78 } - - { offsetInCU: 0x1A11, offset: 0x7960B, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TR', symObjAddr: 0xBB4, symBinAddr: 0x4D44, symSize: 0x54 } - - { offsetInCU: 0x1A7E, offset: 0x79678, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfETo', symObjAddr: 0x1464, symBinAddr: 0x55F4, symSize: 0x4 } - - { offsetInCU: 0x1B09, offset: 0x79703, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCMa', symObjAddr: 0x2604, symBinAddr: 0x6794, symSize: 0x20 } - - { offsetInCU: 0x1B1D, offset: 0x79717, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TRTA', symObjAddr: 0x2648, symBinAddr: 0x67D8, symSize: 0x8 } - - { offsetInCU: 0x1B3C, offset: 0x79736, size: 0x8, addend: 0x0, symName: '_$sSo7NSErrorCSg10ObjectiveC8ObjCBoolVIeyByy_ACSbIeggy_TRTA', symObjAddr: 0x2650, symBinAddr: 0x67E0, symSize: 0x18 } - - { offsetInCU: 0x1B65, offset: 0x7975F, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TRTA', symObjAddr: 0x2668, symBinAddr: 0x67F8, symSize: 0x8 } - - { offsetInCU: 0x1B79, offset: 0x79773, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCMa', symObjAddr: 0x2670, symBinAddr: 0x6800, symSize: 0x3C } - - { offsetInCU: 0x1B8D, offset: 0x79787, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_TA', symObjAddr: 0x26F0, symBinAddr: 0x6880, symSize: 0x34 } - - { offsetInCU: 0x1BA1, offset: 0x7979B, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x2724, symBinAddr: 0x68B4, symSize: 0x10 } - - { offsetInCU: 0x1BB5, offset: 0x797AF, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x2734, symBinAddr: 0x68C4, symSize: 0x8 } - - { offsetInCU: 0x1BC9, offset: 0x797C3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2760, symBinAddr: 0x68F0, symSize: 0x40 } - - { offsetInCU: 0x1BFD, offset: 0x797F7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x27E4, symBinAddr: 0x6974, symSize: 0x40 } - - { offsetInCU: 0x1C3B, offset: 0x79835, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2824, symBinAddr: 0x69B4, symSize: 0x28 } - - { offsetInCU: 0x1C6F, offset: 0x79869, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x28A4, symBinAddr: 0x6A34, symSize: 0x3C } - - { offsetInCU: 0x1CA3, offset: 0x7989D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x290C, symBinAddr: 0x6A9C, symSize: 0x30 } - - { offsetInCU: 0x1CDF, offset: 0x798D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_TA', symObjAddr: 0x2978, symBinAddr: 0x6B08, symSize: 0x10 } - - { offsetInCU: 0x1CF3, offset: 0x798ED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2988, symBinAddr: 0x6B18, symSize: 0x40 } - - { offsetInCU: 0x21C0, offset: 0x79DBA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZ', symObjAddr: 0x0, symBinAddr: 0x4190, symSize: 0x4 } - - { offsetInCU: 0x21DB, offset: 0x79DD5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x3C, symBinAddr: 0x41CC, symSize: 0x4 } - - { offsetInCU: 0x21F6, offset: 0x79DF0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0xB0, symBinAddr: 0x4240, symSize: 0x4 } - - { offsetInCU: 0x2217, offset: 0x79E11, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0xF8, symBinAddr: 0x4288, symSize: 0x4 } - - { offsetInCU: 0x2232, offset: 0x79E2C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0x14C, symBinAddr: 0x42DC, symSize: 0x4 } - - { offsetInCU: 0x224D, offset: 0x79E47, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x1B8, symBinAddr: 0x4348, symSize: 0x4 } - - { offsetInCU: 0x2268, offset: 0x79E62, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x254, symBinAddr: 0x43E4, symSize: 0x4 } - - { offsetInCU: 0x22F6, offset: 0x79EF0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x26C, symBinAddr: 0x43FC, symSize: 0x4 } - - { offsetInCU: 0x2375, offset: 0x79F6F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZ', symObjAddr: 0x284, symBinAddr: 0x4414, symSize: 0x44 } - - { offsetInCU: 0x24B3, offset: 0x7A0AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZ', symObjAddr: 0x318, symBinAddr: 0x44A8, symSize: 0x4C } - - { offsetInCU: 0x25FC, offset: 0x7A1F6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZ', symObjAddr: 0x3BC, symBinAddr: 0x454C, symSize: 0x48 } - - { offsetInCU: 0x2744, offset: 0x7A33E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZ', symObjAddr: 0x45C, symBinAddr: 0x45EC, symSize: 0x50 } - - { offsetInCU: 0x28A1, offset: 0x7A49B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZ', symObjAddr: 0x50C, symBinAddr: 0x469C, symSize: 0x4 } - - { offsetInCU: 0x2913, offset: 0x7A50D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZ', symObjAddr: 0x518, symBinAddr: 0x46A8, symSize: 0x4 } - - { offsetInCU: 0x2956, offset: 0x7A550, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZ', symObjAddr: 0x524, symBinAddr: 0x46B4, symSize: 0x14 } - - { offsetInCU: 0x299B, offset: 0x7A595, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZ', symObjAddr: 0x540, symBinAddr: 0x46D0, symSize: 0x4 } - - { offsetInCU: 0x29DE, offset: 0x7A5D8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZ', symObjAddr: 0x54C, symBinAddr: 0x46DC, symSize: 0x4 } - - { offsetInCU: 0x2A21, offset: 0x7A61B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZ', symObjAddr: 0x558, symBinAddr: 0x46E8, symSize: 0x4 } - - { offsetInCU: 0x2A64, offset: 0x7A65E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZ', symObjAddr: 0x564, symBinAddr: 0x46F4, symSize: 0x8 } - - { offsetInCU: 0x2B4B, offset: 0x7A745, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ', symObjAddr: 0x590, symBinAddr: 0x4720, symSize: 0x4 } - - { offsetInCU: 0x2BCA, offset: 0x7A7C4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZ', symObjAddr: 0x5A8, symBinAddr: 0x4738, symSize: 0x4 } - - { offsetInCU: 0x2C0D, offset: 0x7A807, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZ', symObjAddr: 0x5B4, symBinAddr: 0x4744, symSize: 0x58 } - - { offsetInCU: 0x2CCE, offset: 0x7A8C8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZ', symObjAddr: 0x680, symBinAddr: 0x4810, symSize: 0x4 } - - { offsetInCU: 0x2CE2, offset: 0x7A8DC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_', symObjAddr: 0x684, symBinAddr: 0x4814, symSize: 0x190 } - - { offsetInCU: 0x2D82, offset: 0x7A97C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZ', symObjAddr: 0x92C, symBinAddr: 0x4ABC, symSize: 0x2C } - - { offsetInCU: 0x2D96, offset: 0x7A990, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_', symObjAddr: 0x958, symBinAddr: 0x4AE8, symSize: 0x1C4 } - - { offsetInCU: 0x2E80, offset: 0x7AA7A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZ', symObjAddr: 0xC08, symBinAddr: 0x4D98, symSize: 0x2C } - - { offsetInCU: 0x2E94, offset: 0x7AA8E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_', symObjAddr: 0xC34, symBinAddr: 0x4DC4, symSize: 0x23C } - - { offsetInCU: 0x2F48, offset: 0x7AB42, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZ', symObjAddr: 0xF08, symBinAddr: 0x5098, symSize: 0x4 } - - { offsetInCU: 0x2F5C, offset: 0x7AB56, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_', symObjAddr: 0xF0C, symBinAddr: 0x509C, symSize: 0x38C } - - { offsetInCU: 0x31F3, offset: 0x7ADED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZ', symObjAddr: 0x1370, symBinAddr: 0x5500, symSize: 0x4 } - - { offsetInCU: 0x320E, offset: 0x7AE08, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfC', symObjAddr: 0x13A8, symBinAddr: 0x5538, symSize: 0x20 } - - { offsetInCU: 0x3222, offset: 0x7AE1C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfc', symObjAddr: 0x13C8, symBinAddr: 0x5558, symSize: 0x30 } - - { offsetInCU: 0x3258, offset: 0x7AE52, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfD', symObjAddr: 0x1434, symBinAddr: 0x55C4, symSize: 0x30 } - - { offsetInCU: 0x4F, offset: 0x7B08A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LLSo7GLKViewCvpZ', symObjAddr: 0x5550, symBinAddr: 0x116E820, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x7B0A4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15_shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvpZ', symObjAddr: 0x5558, symBinAddr: 0x116E828, symSize: 0x0 } - - { offsetInCU: 0x83, offset: 0x7B0BE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5storeSo19NSMutableDictionaryCvpZ', symObjAddr: 0x5560, symBinAddr: 0x116E830, symSize: 0x0 } - - { offsetInCU: 0x9D, offset: 0x7B0D8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LLSo10NSMapTableCySo8NSStringCACGvpZ', symObjAddr: 0x5568, symBinAddr: 0x116E838, symSize: 0x0 } - - { offsetInCU: 0xAB, offset: 0x7B0E6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0x0, symBinAddr: 0x6C40, symSize: 0x40 } - - { offsetInCU: 0xF0, offset: 0x7B12B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5store_WZ', symObjAddr: 0x40, symBinAddr: 0x6C80, symSize: 0x30 } - - { offsetInCU: 0x135, offset: 0x7B170, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0xA8, symBinAddr: 0x6CE8, symSize: 0x40 } - - { offsetInCU: 0x187, offset: 0x7B1C2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x194, symBinAddr: 0x6DD4, symSize: 0x10 } - - { offsetInCU: 0x1A7, offset: 0x7B1E2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x194, symBinAddr: 0x6DD4, symSize: 0x10 } - - { offsetInCU: 0x1DD, offset: 0x7B218, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x1A4, symBinAddr: 0x6DE4, symSize: 0x10 } - - { offsetInCU: 0x1FD, offset: 0x7B238, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x1A4, symBinAddr: 0x6DE4, symSize: 0x10 } - - { offsetInCU: 0x236, offset: 0x7B271, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x1B4, symBinAddr: 0x6DF4, symSize: 0x10 } - - { offsetInCU: 0x256, offset: 0x7B291, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x1B4, symBinAddr: 0x6DF4, symSize: 0x10 } - - { offsetInCU: 0x28C, offset: 0x7B2C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x1C4, symBinAddr: 0x6E04, symSize: 0x10 } - - { offsetInCU: 0x2AC, offset: 0x7B2E7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x1C4, symBinAddr: 0x6E04, symSize: 0x10 } - - { offsetInCU: 0x2E5, offset: 0x7B320, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvgTo', symObjAddr: 0x29C, symBinAddr: 0x6EDC, symSize: 0x44 } - - { offsetInCU: 0x322, offset: 0x7B35D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvsTo', symObjAddr: 0x324, symBinAddr: 0x6F64, symSize: 0x30 } - - { offsetInCU: 0x3B1, offset: 0x7B3EC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvgTo', symObjAddr: 0x578, symBinAddr: 0x71B8, symSize: 0x44 } - - { offsetInCU: 0x409, offset: 0x7B444, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvsTo', symObjAddr: 0x600, symBinAddr: 0x7240, symSize: 0x48 } - - { offsetInCU: 0x464, offset: 0x7B49F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvgTo', symObjAddr: 0x648, symBinAddr: 0x7288, symSize: 0x44 } - - { offsetInCU: 0x4BC, offset: 0x7B4F7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvsTo', symObjAddr: 0x6D0, symBinAddr: 0x7310, symSize: 0x48 } - - { offsetInCU: 0x517, offset: 0x7B552, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0x718, symBinAddr: 0x7358, symSize: 0x10 } - - { offsetInCU: 0x537, offset: 0x7B572, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0x718, symBinAddr: 0x7358, symSize: 0x10 } - - { offsetInCU: 0x56D, offset: 0x7B5A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0x728, symBinAddr: 0x7368, symSize: 0x10 } - - { offsetInCU: 0x58D, offset: 0x7B5C8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0x728, symBinAddr: 0x7368, symSize: 0x10 } - - { offsetInCU: 0x5C6, offset: 0x7B601, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0x738, symBinAddr: 0x7378, symSize: 0x10 } - - { offsetInCU: 0x5E6, offset: 0x7B621, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0x738, symBinAddr: 0x7378, symSize: 0x10 } - - { offsetInCU: 0x61E, offset: 0x7B659, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvsTo', symObjAddr: 0x748, symBinAddr: 0x7388, symSize: 0x34 } - - { offsetInCU: 0x677, offset: 0x7B6B2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x77C, symBinAddr: 0x73BC, symSize: 0x10 } - - { offsetInCU: 0x697, offset: 0x7B6D2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x77C, symBinAddr: 0x73BC, symSize: 0x10 } - - { offsetInCU: 0x6CF, offset: 0x7B70A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvsTo', symObjAddr: 0x78C, symBinAddr: 0x73CC, symSize: 0x34 } - - { offsetInCU: 0x728, offset: 0x7B763, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x7C0, symBinAddr: 0x7400, symSize: 0x10 } - - { offsetInCU: 0x748, offset: 0x7B783, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x7C0, symBinAddr: 0x7400, symSize: 0x10 } - - { offsetInCU: 0x77E, offset: 0x7B7B9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x7D0, symBinAddr: 0x7410, symSize: 0x10 } - - { offsetInCU: 0x79E, offset: 0x7B7D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x7D0, symBinAddr: 0x7410, symSize: 0x10 } - - { offsetInCU: 0x7D7, offset: 0x7B812, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvgTo', symObjAddr: 0x7E0, symBinAddr: 0x7420, symSize: 0x10 } - - { offsetInCU: 0x7F7, offset: 0x7B832, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvgTo', symObjAddr: 0x7E0, symBinAddr: 0x7420, symSize: 0x10 } - - { offsetInCU: 0x82D, offset: 0x7B868, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvsTo', symObjAddr: 0x7F0, symBinAddr: 0x7430, symSize: 0x10 } - - { offsetInCU: 0x84D, offset: 0x7B888, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvsTo', symObjAddr: 0x7F0, symBinAddr: 0x7430, symSize: 0x10 } - - { offsetInCU: 0x870, offset: 0x7B8AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivgTo', symObjAddr: 0x800, symBinAddr: 0x7440, symSize: 0x34 } - - { offsetInCU: 0x8A2, offset: 0x7B8DD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivgTo', symObjAddr: 0x904, symBinAddr: 0x7544, symSize: 0x34 } - - { offsetInCU: 0x8EA, offset: 0x7B925, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvgTo', symObjAddr: 0xA08, symBinAddr: 0x7648, symSize: 0x20 } - - { offsetInCU: 0x952, offset: 0x7B98D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvgTo', symObjAddr: 0xA4C, symBinAddr: 0x768C, symSize: 0x20 } - - { offsetInCU: 0x9F1, offset: 0x7BA2C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btFTo', symObjAddr: 0xAB4, symBinAddr: 0x76F4, symSize: 0xC4 } - - { offsetInCU: 0xAB4, offset: 0x7BAEF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VFTo', symObjAddr: 0xD10, symBinAddr: 0x7950, symSize: 0x30 } - - { offsetInCU: 0xB64, offset: 0x7BB9F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x15C8, symBinAddr: 0x8208, symSize: 0xC4 } - - { offsetInCU: 0xBCE, offset: 0x7BC09, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtFTo', symObjAddr: 0x18E4, symBinAddr: 0x8524, symSize: 0xB0 } - - { offsetInCU: 0xC0B, offset: 0x7BC46, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x1A54, symBinAddr: 0x8694, symSize: 0xB8 } - - { offsetInCU: 0xC83, offset: 0x7BCBE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbFTo', symObjAddr: 0x1BF0, symBinAddr: 0x8830, symSize: 0x3C } - - { offsetInCU: 0xCB6, offset: 0x7BCF1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1C2C, symBinAddr: 0x886C, symSize: 0x10 } - - { offsetInCU: 0xCD6, offset: 0x7BD11, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1C2C, symBinAddr: 0x886C, symSize: 0x10 } - - { offsetInCU: 0xD10, offset: 0x7BD4B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvsTo', symObjAddr: 0x1C3C, symBinAddr: 0x887C, symSize: 0x34 } - - { offsetInCU: 0xD6B, offset: 0x7BDA6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyFTo', symObjAddr: 0x1CB8, symBinAddr: 0x88F8, symSize: 0x48 } - - { offsetInCU: 0xE05, offset: 0x7BE40, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VFTo', symObjAddr: 0x1D4C, symBinAddr: 0x898C, symSize: 0x64 } - - { offsetInCU: 0xECA, offset: 0x7BF05, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VFTo', symObjAddr: 0x1E08, symBinAddr: 0x8A48, symSize: 0x94 } - - { offsetInCU: 0xF57, offset: 0x7BF92, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC23enterBackgroundListeneryycSgvsTo', symObjAddr: 0x1EDC, symBinAddr: 0x8B1C, symSize: 0x6C } - - { offsetInCU: 0xFB9, offset: 0x7BFF4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC20becomeActiveListeneryycSgvsTo', symObjAddr: 0x1FEC, symBinAddr: 0x8C2C, symSize: 0x6C } - - { offsetInCU: 0x1016, offset: 0x7C051, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvgTo', symObjAddr: 0x2058, symBinAddr: 0x8C98, symSize: 0xB0 } - - { offsetInCU: 0x1068, offset: 0x7C0A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvsTo', symObjAddr: 0x21D8, symBinAddr: 0x8E18, symSize: 0x94 } - - { offsetInCU: 0x10FA, offset: 0x7C135, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x2E74, symBinAddr: 0x9AB4, symSize: 0x28 } - - { offsetInCU: 0x114F, offset: 0x7C18A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x38BC, symBinAddr: 0xA4FC, symSize: 0x20 } - - { offsetInCU: 0x1182, offset: 0x7C1BD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x38DC, symBinAddr: 0xA51C, symSize: 0x10 } - - { offsetInCU: 0x11A2, offset: 0x7C1DD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x38DC, symBinAddr: 0xA51C, symSize: 0x10 } - - { offsetInCU: 0x11DA, offset: 0x7C215, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvsTo', symObjAddr: 0x38EC, symBinAddr: 0xA52C, symSize: 0x34 } - - { offsetInCU: 0x1248, offset: 0x7C283, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvgTo', symObjAddr: 0x39A0, symBinAddr: 0xA5E0, symSize: 0x20 } - - { offsetInCU: 0x12A2, offset: 0x7C2DD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvsTo', symObjAddr: 0x39C0, symBinAddr: 0xA600, symSize: 0x34 } - - { offsetInCU: 0x1302, offset: 0x7C33D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgFTo', symObjAddr: 0x3A24, symBinAddr: 0xA664, symSize: 0x34 } - - { offsetInCU: 0x1446, offset: 0x7C481, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFTo', symObjAddr: 0x3D70, symBinAddr: 0xA9B0, symSize: 0x28 } - - { offsetInCU: 0x1479, offset: 0x7C4B4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfDTo', symObjAddr: 0x409C, symBinAddr: 0xACDC, symSize: 0x24 } - - { offsetInCU: 0x14B4, offset: 0x7C4EF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTo', symObjAddr: 0x4188, symBinAddr: 0xADC8, symSize: 0x34 } - - { offsetInCU: 0x14E7, offset: 0x7C522, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvgZTf4d_n', symObjAddr: 0x4B24, symBinAddr: 0xB764, symSize: 0x2A8 } - - { offsetInCU: 0x1664, offset: 0x7C69F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTf4nnd_n', symObjAddr: 0x4E90, symBinAddr: 0xBAD0, symSize: 0xA0 } - - { offsetInCU: 0x18E0, offset: 0x7C91B, size: 0x8, addend: 0x0, symName: '_$sIeg_IeyB_TR', symObjAddr: 0x1EB0, symBinAddr: 0x8AF0, symSize: 0x2C } - - { offsetInCU: 0x18F8, offset: 0x7C933, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_So8NSStringCABIeyByy_TR', symObjAddr: 0x2160, symBinAddr: 0x8DA0, symSize: 0x78 } - - { offsetInCU: 0x1910, offset: 0x7C94B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTK', symObjAddr: 0x22C8, symBinAddr: 0x8F08, symSize: 0x94 } - - { offsetInCU: 0x1948, offset: 0x7C983, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTk', symObjAddr: 0x235C, symBinAddr: 0x8F9C, symSize: 0xB8 } - - { offsetInCU: 0x198A, offset: 0x7C9C5, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TR', symObjAddr: 0x2414, symBinAddr: 0x9054, symSize: 0x6C } - - { offsetInCU: 0x1A3A, offset: 0x7CA75, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfETo', symObjAddr: 0x40C0, symBinAddr: 0xAD00, symSize: 0xC4 } - - { offsetInCU: 0x1A6A, offset: 0x7CAA5, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOy', symObjAddr: 0x41BC, symBinAddr: 0xADFC, symSize: 0x10 } - - { offsetInCU: 0x1A7E, offset: 0x7CAB9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCMa', symObjAddr: 0x41CC, symBinAddr: 0xAE0C, symSize: 0x20 } - - { offsetInCU: 0x1A92, offset: 0x7CACD, size: 0x8, addend: 0x0, symName: '_$ss29getContiguousArrayStorageType3fors01_bcD0CyxGmxm_tlFSo18NSLayoutConstraintC_Tgm5', symObjAddr: 0x41EC, symBinAddr: 0xAE2C, symSize: 0x64 } - - { offsetInCU: 0x1C99, offset: 0x7CCD4, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x4DCC, symBinAddr: 0xBA0C, symSize: 0x40 } - - { offsetInCU: 0x1CAD, offset: 0x7CCE8, size: 0x8, addend: 0x0, symName: '_$sypSgWOh', symObjAddr: 0x4E0C, symBinAddr: 0xBA4C, symSize: 0x40 } - - { offsetInCU: 0x1CC1, offset: 0x7CCFC, size: 0x8, addend: 0x0, symName: ___swift_project_boxed_opaque_existential_0, symObjAddr: 0x4E4C, symBinAddr: 0xBA8C, symSize: 0x24 } - - { offsetInCU: 0x1CD5, offset: 0x7CD10, size: 0x8, addend: 0x0, symName: ___swift_destroy_boxed_opaque_existential_0, symObjAddr: 0x4E70, symBinAddr: 0xBAB0, symSize: 0x20 } - - { offsetInCU: 0x1CF4, offset: 0x7CD2F, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSo19UIGestureRecognizerCIeyByy_SSADIeggg_TRTA', symObjAddr: 0x535C, symBinAddr: 0xBF9C, symSize: 0x48 } - - { offsetInCU: 0x1D1D, offset: 0x7CD58, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x53A4, symBinAddr: 0xBFE4, symSize: 0x10 } - - { offsetInCU: 0x1D31, offset: 0x7CD6C, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x53B4, symBinAddr: 0xBFF4, symSize: 0x8 } - - { offsetInCU: 0x1D45, offset: 0x7CD80, size: 0x8, addend: 0x0, symName: '_$sIeg_SgWOe', symObjAddr: 0x53BC, symBinAddr: 0xBFFC, symSize: 0x10 } - - { offsetInCU: 0x1D64, offset: 0x7CD9F, size: 0x8, addend: 0x0, symName: '_$sIeyB_Ieg_TRTA', symObjAddr: 0x53CC, symBinAddr: 0xC00C, symSize: 0xC } - - { offsetInCU: 0x1D8D, offset: 0x7CDC8, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TRTA', symObjAddr: 0x53FC, symBinAddr: 0xC03C, symSize: 0x8 } - - { offsetInCU: 0x1DAC, offset: 0x7CDE7, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SSABytIegnnr_TRTA', symObjAddr: 0x5404, symBinAddr: 0xC044, symSize: 0x30 } - - { offsetInCU: 0x1DD5, offset: 0x7CE10, size: 0x8, addend: 0x0, symName: '_$sypWOb', symObjAddr: 0x5434, symBinAddr: 0xC074, symSize: 0x10 } - - { offsetInCU: 0x1DE9, offset: 0x7CE24, size: 0x8, addend: 0x0, symName: '_$sypWOc', symObjAddr: 0x547C, symBinAddr: 0xC0BC, symSize: 0x3C } - - { offsetInCU: 0x206E, offset: 0x7D0A9, size: 0x8, addend: 0x0, symName: '_$sSD17dictionaryLiteralSDyxq_Gx_q_td_tcfCSS_ypTgm5Tf4g_n', symObjAddr: 0x4A0C, symBinAddr: 0xB64C, symSize: 0x118 } - - { offsetInCU: 0x2514, offset: 0x7D54F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvg', symObjAddr: 0x2E0, symBinAddr: 0x6F20, symSize: 0x44 } - - { offsetInCU: 0x2547, offset: 0x7D582, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvs', symObjAddr: 0x354, symBinAddr: 0x6F94, symSize: 0xEC } - - { offsetInCU: 0x2593, offset: 0x7D5CE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM', symObjAddr: 0x440, symBinAddr: 0x7080, symSize: 0x58 } - - { offsetInCU: 0x25B8, offset: 0x7D5F3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM.resume.0', symObjAddr: 0x498, symBinAddr: 0x70D8, symSize: 0xE0 } - - { offsetInCU: 0x25F9, offset: 0x7D634, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64Vvg', symObjAddr: 0x5BC, symBinAddr: 0x71FC, symSize: 0x44 } - - { offsetInCU: 0x2651, offset: 0x7D68C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg', symObjAddr: 0x68C, symBinAddr: 0x72CC, symSize: 0x44 } - - { offsetInCU: 0x27BF, offset: 0x7D7FA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivg', symObjAddr: 0x834, symBinAddr: 0x7474, symSize: 0xD0 } - - { offsetInCU: 0x28E4, offset: 0x7D91F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivg', symObjAddr: 0x938, symBinAddr: 0x7578, symSize: 0xD0 } - - { offsetInCU: 0x2A2A, offset: 0x7DA65, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvg', symObjAddr: 0xA28, symBinAddr: 0x7668, symSize: 0x24 } - - { offsetInCU: 0x2A72, offset: 0x7DAAD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvg', symObjAddr: 0xA6C, symBinAddr: 0x76AC, symSize: 0x24 } - - { offsetInCU: 0x2AA6, offset: 0x7DAE1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btF', symObjAddr: 0xA90, symBinAddr: 0x76D0, symSize: 0x24 } - - { offsetInCU: 0x2C34, offset: 0x7DC6F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VF', symObjAddr: 0xB78, symBinAddr: 0x77B8, symSize: 0x198 } - - { offsetInCU: 0x3027, offset: 0x7E062, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btF', symObjAddr: 0xD40, symBinAddr: 0x7980, symSize: 0x888 } - - { offsetInCU: 0x382A, offset: 0x7E865, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtF', symObjAddr: 0x168C, symBinAddr: 0x82CC, symSize: 0x258 } - - { offsetInCU: 0x3C5C, offset: 0x7EC97, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x1994, symBinAddr: 0x85D4, symSize: 0xC0 } - - { offsetInCU: 0x3CED, offset: 0x7ED28, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbF', symObjAddr: 0x1B0C, symBinAddr: 0x874C, symSize: 0xE4 } - - { offsetInCU: 0x3E48, offset: 0x7EE83, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyF', symObjAddr: 0x1C70, symBinAddr: 0x88B0, symSize: 0x48 } - - { offsetInCU: 0x3ECE, offset: 0x7EF09, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF', symObjAddr: 0x1D00, symBinAddr: 0x8940, symSize: 0x4C } - - { offsetInCU: 0x3FEF, offset: 0x7F02A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VF', symObjAddr: 0x1DB0, symBinAddr: 0x89F0, symSize: 0x58 } - - { offsetInCU: 0x40E5, offset: 0x7F120, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvg', symObjAddr: 0x2108, symBinAddr: 0x8D48, symSize: 0x58 } - - { offsetInCU: 0x4131, offset: 0x7F16C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvs', symObjAddr: 0x226C, symBinAddr: 0x8EAC, symSize: 0x5C } - - { offsetInCU: 0x415A, offset: 0x7F195, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM', symObjAddr: 0x2480, symBinAddr: 0x90C0, symSize: 0x44 } - - { offsetInCU: 0x4180, offset: 0x7F1BB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM.resume.0', symObjAddr: 0x24C4, symBinAddr: 0x9104, symSize: 0x4 } - - { offsetInCU: 0x4242, offset: 0x7F27D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x24C8, symBinAddr: 0x9108, symSize: 0x9AC } - - { offsetInCU: 0x4447, offset: 0x7F482, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfC', symObjAddr: 0x2E9C, symBinAddr: 0x9ADC, symSize: 0x50 } - - { offsetInCU: 0x4470, offset: 0x7F4AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfc', symObjAddr: 0x2EEC, symBinAddr: 0x9B2C, symSize: 0x9D0 } - - { offsetInCU: 0x4696, offset: 0x7F6D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvW', symObjAddr: 0x3920, symBinAddr: 0xA560, symSize: 0x80 } - - { offsetInCU: 0x478C, offset: 0x7F7C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgF', symObjAddr: 0x39F4, symBinAddr: 0xA634, symSize: 0x30 } - - { offsetInCU: 0x482A, offset: 0x7F865, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6resize33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x3A58, symBinAddr: 0xA698, symSize: 0x144 } - - { offsetInCU: 0x4A2B, offset: 0x7FA66, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyF', symObjAddr: 0x3B9C, symBinAddr: 0xA7DC, symSize: 0x1D4 } - - { offsetInCU: 0x4CA8, offset: 0x7FCE3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfD', symObjAddr: 0x3D98, symBinAddr: 0xA9D8, symSize: 0x304 } - - { offsetInCU: 0x4D38, offset: 0x7FD73, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZ', symObjAddr: 0x4184, symBinAddr: 0xADC4, symSize: 0x4 } - - { offsetInCU: 0x4D60, offset: 0x7FD9B, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4findys10_HashTableV6BucketV6bucket_Sb5foundtxSHRzlFSS_Tg5', symObjAddr: 0x4250, symBinAddr: 0xAE90, symSize: 0x64 } - - { offsetInCU: 0x4DBA, offset: 0x7FDF5, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV7_insert2at3key5valueys10_HashTableV6BucketV_xnq_ntFSS_ypTg5', symObjAddr: 0x42B4, symBinAddr: 0xAEF4, symSize: 0x6C } - - { offsetInCU: 0x4E3A, offset: 0x7FE75, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV12mutatingFind_8isUniques10_HashTableV6BucketV6bucket_Sb5foundtx_SbtFSS_ypTg5', symObjAddr: 0x4320, symBinAddr: 0xAF60, symSize: 0xD8 } - - { offsetInCU: 0x4E77, offset: 0x7FEB2, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4find_9hashValues10_HashTableV6BucketV6bucket_Sb5foundtx_SitSHRzlFSS_Tg5', symObjAddr: 0x43F8, symBinAddr: 0xB038, symSize: 0xE0 } - - { offsetInCU: 0x4EF2, offset: 0x7FF2D, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV4copyyyFSS_ypTg5', symObjAddr: 0x44D8, symBinAddr: 0xB118, symSize: 0x1F4 } - - { offsetInCU: 0x4FAE, offset: 0x7FFE9, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV20_copyOrMoveAndResize8capacity12moveElementsySi_SbtFSS_ypTg5', symObjAddr: 0x46CC, symBinAddr: 0xB30C, symSize: 0x340 } - - { offsetInCU: 0x27, offset: 0x80236, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xC15C, symSize: 0x10 } - - { offsetInCU: 0x62, offset: 0x80271, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCMa', symObjAddr: 0x10, symBinAddr: 0xC16C, symSize: 0x20 } - - { offsetInCU: 0x1AF, offset: 0x803BE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xC15C, symSize: 0x10 } - - { offsetInCU: 0x65, offset: 0x8044D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvgTo', symObjAddr: 0x0, symBinAddr: 0xC18C, symSize: 0x10 } - - { offsetInCU: 0x85, offset: 0x8046D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvgTo', symObjAddr: 0x0, symBinAddr: 0xC18C, symSize: 0x10 } - - { offsetInCU: 0xBB, offset: 0x804A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvsTo', symObjAddr: 0x10, symBinAddr: 0xC19C, symSize: 0x10 } - - { offsetInCU: 0xDB, offset: 0x804C3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvsTo', symObjAddr: 0x10, symBinAddr: 0xC19C, symSize: 0x10 } - - { offsetInCU: 0x114, offset: 0x804FC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvgTo', symObjAddr: 0x20, symBinAddr: 0xC1AC, symSize: 0x44 } - - { offsetInCU: 0x16C, offset: 0x80554, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvsTo', symObjAddr: 0x64, symBinAddr: 0xC1F0, symSize: 0x48 } - - { offsetInCU: 0x1C7, offset: 0x805AF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvgTo', symObjAddr: 0xAC, symBinAddr: 0xC238, symSize: 0x44 } - - { offsetInCU: 0x21F, offset: 0x80607, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvsTo', symObjAddr: 0xF0, symBinAddr: 0xC27C, symSize: 0x48 } - - { offsetInCU: 0x27A, offset: 0x80662, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivgTo', symObjAddr: 0x138, symBinAddr: 0xC2C4, symSize: 0x10 } - - { offsetInCU: 0x29A, offset: 0x80682, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivgTo', symObjAddr: 0x138, symBinAddr: 0xC2C4, symSize: 0x10 } - - { offsetInCU: 0x2D0, offset: 0x806B8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivsTo', symObjAddr: 0x148, symBinAddr: 0xC2D4, symSize: 0x10 } - - { offsetInCU: 0x2F0, offset: 0x806D8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivsTo', symObjAddr: 0x148, symBinAddr: 0xC2D4, symSize: 0x10 } - - { offsetInCU: 0x329, offset: 0x80711, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivgTo', symObjAddr: 0x158, symBinAddr: 0xC2E4, symSize: 0x10 } - - { offsetInCU: 0x349, offset: 0x80731, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivgTo', symObjAddr: 0x158, symBinAddr: 0xC2E4, symSize: 0x10 } - - { offsetInCU: 0x37F, offset: 0x80767, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivsTo', symObjAddr: 0x168, symBinAddr: 0xC2F4, symSize: 0x10 } - - { offsetInCU: 0x39F, offset: 0x80787, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivsTo', symObjAddr: 0x168, symBinAddr: 0xC2F4, symSize: 0x10 } - - { offsetInCU: 0x3D8, offset: 0x807C0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvgTo', symObjAddr: 0x178, symBinAddr: 0xC304, symSize: 0x44 } - - { offsetInCU: 0x430, offset: 0x80818, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvsTo', symObjAddr: 0x1BC, symBinAddr: 0xC348, symSize: 0x48 } - - { offsetInCU: 0x48B, offset: 0x80873, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvgTo', symObjAddr: 0x204, symBinAddr: 0xC390, symSize: 0x10 } - - { offsetInCU: 0x4AB, offset: 0x80893, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvgTo', symObjAddr: 0x204, symBinAddr: 0xC390, symSize: 0x10 } - - { offsetInCU: 0x4E1, offset: 0x808C9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvsTo', symObjAddr: 0x214, symBinAddr: 0xC3A0, symSize: 0x10 } - - { offsetInCU: 0x501, offset: 0x808E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvsTo', symObjAddr: 0x214, symBinAddr: 0xC3A0, symSize: 0x10 } - - { offsetInCU: 0x53A, offset: 0x80922, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvgTo', symObjAddr: 0x224, symBinAddr: 0xC3B0, symSize: 0x10 } - - { offsetInCU: 0x55A, offset: 0x80942, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvgTo', symObjAddr: 0x224, symBinAddr: 0xC3B0, symSize: 0x10 } - - { offsetInCU: 0x590, offset: 0x80978, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvsTo', symObjAddr: 0x234, symBinAddr: 0xC3C0, symSize: 0x10 } - - { offsetInCU: 0x5B0, offset: 0x80998, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvsTo', symObjAddr: 0x234, symBinAddr: 0xC3C0, symSize: 0x10 } - - { offsetInCU: 0x5E9, offset: 0x809D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvgTo', symObjAddr: 0x244, symBinAddr: 0xC3D0, symSize: 0x48 } - - { offsetInCU: 0x63F, offset: 0x80A27, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvsTo', symObjAddr: 0x28C, symBinAddr: 0xC418, symSize: 0x40 } - - { offsetInCU: 0x682, offset: 0x80A6A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13SIZE_OF_FLOATSivgZTo', symObjAddr: 0x2CC, symBinAddr: 0xC458, symSize: 0x8 } - - { offsetInCU: 0x69E, offset: 0x80A86, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13VERTEX_SHADERSSvgZTo', symObjAddr: 0x2D4, symBinAddr: 0xC460, symSize: 0x2C } - - { offsetInCU: 0x6D0, offset: 0x80AB8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvgTo', symObjAddr: 0x300, symBinAddr: 0xC48C, symSize: 0x10 } - - { offsetInCU: 0x6F0, offset: 0x80AD8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvgTo', symObjAddr: 0x300, symBinAddr: 0xC48C, symSize: 0x10 } - - { offsetInCU: 0x728, offset: 0x80B10, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvsTo', symObjAddr: 0x310, symBinAddr: 0xC49C, symSize: 0x34 } - - { offsetInCU: 0x781, offset: 0x80B69, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvgTo', symObjAddr: 0x418, symBinAddr: 0xC5A4, symSize: 0x10 } - - { offsetInCU: 0x7A1, offset: 0x80B89, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvgTo', symObjAddr: 0x418, symBinAddr: 0xC5A4, symSize: 0x10 } - - { offsetInCU: 0x7D7, offset: 0x80BBF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvsTo', symObjAddr: 0x428, symBinAddr: 0xC5B4, symSize: 0x10 } - - { offsetInCU: 0x7F7, offset: 0x80BDF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvsTo', symObjAddr: 0x428, symBinAddr: 0xC5B4, symSize: 0x10 } - - { offsetInCU: 0x846, offset: 0x80C2E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfcTo', symObjAddr: 0x5BC, symBinAddr: 0xC708, symSize: 0x20 } - - { offsetInCU: 0x878, offset: 0x80C60, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyFTo', symObjAddr: 0x720, symBinAddr: 0xC86C, symSize: 0x28 } - - { offsetInCU: 0x8D0, offset: 0x80CB8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTo', symObjAddr: 0x75C, symBinAddr: 0xC8A8, symSize: 0x88 } - - { offsetInCU: 0x934, offset: 0x80D1C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTo', symObjAddr: 0x7E4, symBinAddr: 0xC930, symSize: 0x7C } - - { offsetInCU: 0x9D6, offset: 0x80DBE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyFTo', symObjAddr: 0xC0C, symBinAddr: 0xCD58, symSize: 0x28 } - - { offsetInCU: 0xAC0, offset: 0x80EA8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCMa', symObjAddr: 0x59C, symBinAddr: 0xC6E8, symSize: 0x20 } - - { offsetInCU: 0xB34, offset: 0x80F1C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfETo', symObjAddr: 0xC64, symBinAddr: 0xCDB0, symSize: 0x58 } - - { offsetInCU: 0x123B, offset: 0x81623, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfC', symObjAddr: 0x438, symBinAddr: 0xC5C4, symSize: 0x20 } - - { offsetInCU: 0x1255, offset: 0x8163D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfc', symObjAddr: 0x458, symBinAddr: 0xC5E4, symSize: 0x104 } - - { offsetInCU: 0x1287, offset: 0x8166F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyF', symObjAddr: 0x5DC, symBinAddr: 0xC728, symSize: 0x144 } - - { offsetInCU: 0x1442, offset: 0x8182A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtF', symObjAddr: 0x748, symBinAddr: 0xC894, symSize: 0x14 } - - { offsetInCU: 0x14F3, offset: 0x818DB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyF', symObjAddr: 0x860, symBinAddr: 0xC9AC, symSize: 0x3AC } - - { offsetInCU: 0x1863, offset: 0x81C4B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfD', symObjAddr: 0xC34, symBinAddr: 0xCD80, symSize: 0x30 } - - { offsetInCU: 0x194E, offset: 0x81D36, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTf4ddnndnndn_n', symObjAddr: 0xCBC, symBinAddr: 0xCE08, symSize: 0x65C } - - { offsetInCU: 0x214C, offset: 0x82534, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTf4nnnnndn_n', symObjAddr: 0x135C, symBinAddr: 0xD4A8, symSize: 0x6C8 } - - { offsetInCU: 0x10C, offset: 0x82EF4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfcTo', symObjAddr: 0xED4, symBinAddr: 0xEA1C, symSize: 0x68 } - - { offsetInCU: 0x19C, offset: 0x82F84, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCfETo', symObjAddr: 0xF48, symBinAddr: 0xEA90, symSize: 0x10 } - - { offsetInCU: 0x1CB, offset: 0x82FB3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6handleyySo19UIGestureRecognizerCFTo', symObjAddr: 0xF58, symBinAddr: 0xEAA0, symSize: 0x4 } - - { offsetInCU: 0x368, offset: 0x83150, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCACycfcTo', symObjAddr: 0x16DC, symBinAddr: 0xF224, symSize: 0x2C } - - { offsetInCU: 0x5D4, offset: 0x833BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCfETo', symObjAddr: 0x1744, symBinAddr: 0xF28C, symSize: 0x68 } - - { offsetInCU: 0x603, offset: 0x833EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCMa', symObjAddr: 0x17AC, symBinAddr: 0xF2F4, symSize: 0x20 } - - { offsetInCU: 0x617, offset: 0x833FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCMa', symObjAddr: 0x17CC, symBinAddr: 0xF314, symSize: 0x20 } - - { offsetInCU: 0x62B, offset: 0x83413, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwCP', symObjAddr: 0x17EC, symBinAddr: 0xF334, symSize: 0x30 } - - { offsetInCU: 0x63F, offset: 0x83427, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwxx', symObjAddr: 0x181C, symBinAddr: 0xF364, symSize: 0x8 } - - { offsetInCU: 0x653, offset: 0x8343B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwcp', symObjAddr: 0x1824, symBinAddr: 0xF36C, symSize: 0x3C } - - { offsetInCU: 0x667, offset: 0x8344F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwca', symObjAddr: 0x1860, symBinAddr: 0xF3A8, symSize: 0x50 } - - { offsetInCU: 0x67B, offset: 0x83463, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwta', symObjAddr: 0x18BC, symBinAddr: 0xF3F8, symSize: 0x40 } - - { offsetInCU: 0x68F, offset: 0x83477, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwet', symObjAddr: 0x18FC, symBinAddr: 0xF438, symSize: 0x48 } - - { offsetInCU: 0x6A3, offset: 0x8348B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwst', symObjAddr: 0x1944, symBinAddr: 0xF480, symSize: 0x40 } - - { offsetInCU: 0x6B7, offset: 0x8349F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVMa', symObjAddr: 0x1984, symBinAddr: 0xF4C0, symSize: 0x10 } - - { offsetInCU: 0x6CB, offset: 0x834B3, size: 0x8, addend: 0x0, symName: '_$sypSgWOc', symObjAddr: 0x1994, symBinAddr: 0xF4D0, symSize: 0x48 } - - { offsetInCU: 0x6DF, offset: 0x834C7, size: 0x8, addend: 0x0, symName: '_$sSo7UITouchCSo8NSObjectCSH10ObjectiveCWl', symObjAddr: 0x1AA0, symBinAddr: 0xF518, symSize: 0x58 } - - { offsetInCU: 0x6F3, offset: 0x834DB, size: 0x8, addend: 0x0, symName: '_$sSh8IteratorV8_VariantOyx__GSHRzlWOe', symObjAddr: 0x1AF8, symBinAddr: 0xF570, symSize: 0x8 } - - { offsetInCU: 0x761, offset: 0x83549, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOe', symObjAddr: 0x1DEC, symBinAddr: 0xF864, symSize: 0x10 } - - { offsetInCU: 0xCBB, offset: 0x83AA3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesBegan_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x0, symBinAddr: 0xDB70, symSize: 0x540 } - - { offsetInCU: 0xF57, offset: 0x83D3F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesMoved_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x54C, symBinAddr: 0xE0BC, symSize: 0xE0 } - - { offsetInCU: 0xFD6, offset: 0x83DBE, size: 0x8, addend: 0x0, symName: '_$sSa6remove2atxSi_tF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x6F0, symBinAddr: 0xE24C, symSize: 0x9C } - - { offsetInCU: 0x1069, offset: 0x83E51, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfc', symObjAddr: 0xDCC, symBinAddr: 0xE914, symSize: 0x108 } - - { offsetInCU: 0x11B3, offset: 0x83F9B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6onMove33_044DDF836BDB3B89B481C6F58BB6EF6BLLyySo19UIGestureRecognizerC_ShySo7UITouchCGSgtF', symObjAddr: 0x12D0, symBinAddr: 0xEE18, symSize: 0x40C } - - { offsetInCU: 0x18C9, offset: 0x846B1, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNewAByxGyF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x1B00, symBinAddr: 0xF578, symSize: 0x14 } - - { offsetInCU: 0x1968, offset: 0x84750, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6canvasAcA9NSCCanvasC_tcfcTf4gn_n', symObjAddr: 0x1B14, symBinAddr: 0xF58C, symSize: 0x1E4 } - - { offsetInCU: 0x27, offset: 0x8492D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xF874, symSize: 0x2C } - - { offsetInCU: 0x4B, offset: 0x84951, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvpZ', symObjAddr: 0x2D8, symBinAddr: 0x116EB48, symSize: 0x0 } - - { offsetInCU: 0x65, offset: 0x8496B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xF874, symSize: 0x2C } - - { offsetInCU: 0x98, offset: 0x8499E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZTo', symObjAddr: 0x178, symBinAddr: 0xF9EC, symSize: 0x40 } - - { offsetInCU: 0x104, offset: 0x84A0A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfcTo', symObjAddr: 0x228, symBinAddr: 0xFA9C, symSize: 0x3C } - - { offsetInCU: 0x156, offset: 0x84A5C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queue_WZ', symObjAddr: 0x2C, symBinAddr: 0xF8A0, symSize: 0x10C } - - { offsetInCU: 0x181, offset: 0x84A87, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCMa', symObjAddr: 0x208, symBinAddr: 0xFA7C, symSize: 0x20 } - - { offsetInCU: 0x195, offset: 0x84A9B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfETo', symObjAddr: 0x294, symBinAddr: 0xFB08, symSize: 0x4 } - - { offsetInCU: 0x1C0, offset: 0x84AC6, size: 0x8, addend: 0x0, symName: '_$sSo17OS_dispatch_queueCMa', symObjAddr: 0x298, symBinAddr: 0xFB0C, symSize: 0x3C } - - { offsetInCU: 0x348, offset: 0x84C4E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZ', symObjAddr: 0x138, symBinAddr: 0xF9AC, symSize: 0x40 } - - { offsetInCU: 0x388, offset: 0x84C8E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfC', symObjAddr: 0x1B8, symBinAddr: 0xFA2C, symSize: 0x20 } - - { offsetInCU: 0x39C, offset: 0x84CA2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfc', symObjAddr: 0x1D8, symBinAddr: 0xFA4C, symSize: 0x30 } - - { offsetInCU: 0x3D8, offset: 0x84CDE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfD', symObjAddr: 0x264, symBinAddr: 0xFAD8, symSize: 0x30 } - - { offsetInCU: 0x2B, offset: 0x84D2C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xFB48, symSize: 0xA4 } - - { offsetInCU: 0x66, offset: 0x84D67, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZTo', symObjAddr: 0xA4, symBinAddr: 0xFBEC, symSize: 0xA4 } - - { offsetInCU: 0xF9, offset: 0x84DFA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZTo', symObjAddr: 0x1D8, symBinAddr: 0xFD20, symSize: 0x110 } - - { offsetInCU: 0x1A2, offset: 0x84EA3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZTo', symObjAddr: 0x30C, symBinAddr: 0xFE54, symSize: 0x28 } - - { offsetInCU: 0x222, offset: 0x84F23, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTo', symObjAddr: 0x338, symBinAddr: 0xFE80, symSize: 0xA0 } - - { offsetInCU: 0x29B, offset: 0x84F9C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZTo', symObjAddr: 0x4D0, symBinAddr: 0x10018, symSize: 0x15C } - - { offsetInCU: 0x330, offset: 0x85031, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfcTo', symObjAddr: 0x67C, symBinAddr: 0x101C4, symSize: 0x3C } - - { offsetInCU: 0x381, offset: 0x85082, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTf4nnnnnndd_n', symObjAddr: 0x6E8, symBinAddr: 0x10230, symSize: 0x160 } - - { offsetInCU: 0x4DF, offset: 0x851E0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC7getFile33_F00B23A4165DD6ABFCD23C8811C7DF43LLyS2SKFZTf4nd_g', symObjAddr: 0x848, symBinAddr: 0x10390, symSize: 0x2E4 } - - { offsetInCU: 0x5AE, offset: 0x852AF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCMa', symObjAddr: 0xB2C, symBinAddr: 0x10674, symSize: 0x20 } - - { offsetInCU: 0x5C2, offset: 0x852C3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOAEs5ErrorAAWl', symObjAddr: 0xB4C, symBinAddr: 0x10694, symSize: 0x44 } - - { offsetInCU: 0x5D6, offset: 0x852D7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwCP', symObjAddr: 0xB90, symBinAddr: 0x106D8, symSize: 0x2C } - - { offsetInCU: 0x5EA, offset: 0x852EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwxx', symObjAddr: 0xBBC, symBinAddr: 0x10704, symSize: 0x8 } - - { offsetInCU: 0x5FE, offset: 0x852FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwca', symObjAddr: 0xBC4, symBinAddr: 0x1070C, symSize: 0x40 } - - { offsetInCU: 0x612, offset: 0x85313, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwta', symObjAddr: 0xC10, symBinAddr: 0x1074C, symSize: 0x30 } - - { offsetInCU: 0x626, offset: 0x85327, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwet', symObjAddr: 0xC40, symBinAddr: 0x1077C, symSize: 0x48 } - - { offsetInCU: 0x63A, offset: 0x8533B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwst', symObjAddr: 0xC88, symBinAddr: 0x107C4, symSize: 0x3C } - - { offsetInCU: 0x64E, offset: 0x8534F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwug', symObjAddr: 0xCC4, symBinAddr: 0x10800, symSize: 0x8 } - - { offsetInCU: 0x662, offset: 0x85363, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwup', symObjAddr: 0xCCC, symBinAddr: 0x10808, symSize: 0x4 } - - { offsetInCU: 0x676, offset: 0x85377, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwui', symObjAddr: 0xCD0, symBinAddr: 0x1080C, symSize: 0x4 } - - { offsetInCU: 0x68A, offset: 0x8538B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOMa', symObjAddr: 0xCD4, symBinAddr: 0x10810, symSize: 0x10 } - - { offsetInCU: 0x712, offset: 0x85413, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP7_domainSSvgTW', symObjAddr: 0x3D8, symBinAddr: 0xFF20, symSize: 0x4 } - - { offsetInCU: 0x72E, offset: 0x8542F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP5_codeSivgTW', symObjAddr: 0x3DC, symBinAddr: 0xFF24, symSize: 0x4 } - - { offsetInCU: 0x74A, offset: 0x8544B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP9_userInfoyXlSgvgTW', symObjAddr: 0x3E0, symBinAddr: 0xFF28, symSize: 0x4 } - - { offsetInCU: 0x766, offset: 0x85467, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP19_getEmbeddedNSErroryXlSgyFTW', symObjAddr: 0x3E4, symBinAddr: 0xFF2C, symSize: 0x4 } - - { offsetInCU: 0xA14, offset: 0x85715, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xFB48, symSize: 0xA4 } - - { offsetInCU: 0xAAA, offset: 0x857AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZ', symObjAddr: 0x148, symBinAddr: 0xFC90, symSize: 0x90 } - - { offsetInCU: 0xC31, offset: 0x85932, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZ', symObjAddr: 0x2E8, symBinAddr: 0xFE30, symSize: 0x24 } - - { offsetInCU: 0xC7B, offset: 0x8597C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZ', symObjAddr: 0x334, symBinAddr: 0xFE7C, symSize: 0x4 } - - { offsetInCU: 0xC9D, offset: 0x8599E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZ', symObjAddr: 0x3E8, symBinAddr: 0xFF30, symSize: 0xE8 } - - { offsetInCU: 0xD4D, offset: 0x85A4E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfC', symObjAddr: 0x62C, symBinAddr: 0x10174, symSize: 0x20 } - - { offsetInCU: 0xD61, offset: 0x85A62, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfc', symObjAddr: 0x64C, symBinAddr: 0x10194, symSize: 0x30 } - - { offsetInCU: 0xD97, offset: 0x85A98, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCfD', symObjAddr: 0x6B8, symBinAddr: 0x10200, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x85BB1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x10824, symSize: 0x4 } - - { offsetInCU: 0x71, offset: 0x85BFB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x4, symBinAddr: 0x10828, symSize: 0x70 } - - { offsetInCU: 0xF6, offset: 0x85C80, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x78, symBinAddr: 0x1089C, symSize: 0x50 } - - { offsetInCU: 0x191, offset: 0x85D1B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0xCC, symBinAddr: 0x108F0, symSize: 0x68 } - - { offsetInCU: 0x254, offset: 0x85DDE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x138, symBinAddr: 0x1095C, symSize: 0x98 } - - { offsetInCU: 0x323, offset: 0x85EAD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfcTo', symObjAddr: 0x220, symBinAddr: 0x10A44, symSize: 0x3C } - - { offsetInCU: 0x375, offset: 0x85EFF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCMa', symObjAddr: 0x28C, symBinAddr: 0x10AB0, symSize: 0x20 } - - { offsetInCU: 0x4E5, offset: 0x8606F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x10824, symSize: 0x4 } - - { offsetInCU: 0x51D, offset: 0x860A7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x10824, symSize: 0x4 } - - { offsetInCU: 0x588, offset: 0x86112, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0x10898, symSize: 0x4 } - - { offsetInCU: 0x5C8, offset: 0x86152, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0x10898, symSize: 0x4 } - - { offsetInCU: 0x62A, offset: 0x861B4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xC8, symBinAddr: 0x108EC, symSize: 0x4 } - - { offsetInCU: 0x67C, offset: 0x86206, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xC8, symBinAddr: 0x108EC, symSize: 0x4 } - - { offsetInCU: 0x6F1, offset: 0x8627B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x134, symBinAddr: 0x10958, symSize: 0x4 } - - { offsetInCU: 0x767, offset: 0x862F1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x134, symBinAddr: 0x10958, symSize: 0x4 } - - { offsetInCU: 0x805, offset: 0x8638F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfC', symObjAddr: 0x1D0, symBinAddr: 0x109F4, symSize: 0x20 } - - { offsetInCU: 0x819, offset: 0x863A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfc', symObjAddr: 0x1F0, symBinAddr: 0x10A14, symSize: 0x30 } - - { offsetInCU: 0x84F, offset: 0x863D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCfD', symObjAddr: 0x25C, symBinAddr: 0x10A80, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x86423, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x10AD0, symSize: 0x14 } - - { offsetInCU: 0xA9, offset: 0x864A5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x14, symBinAddr: 0x10AE4, symSize: 0x38 } - - { offsetInCU: 0x1A2, offset: 0x8659E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x68, symBinAddr: 0x10B38, symSize: 0x40 } - - { offsetInCU: 0x284, offset: 0x86680, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfcTo', symObjAddr: 0x118, symBinAddr: 0x10BE8, symSize: 0x3C } - - { offsetInCU: 0x2D6, offset: 0x866D2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCMa', symObjAddr: 0xF8, symBinAddr: 0x10BC8, symSize: 0x20 } - - { offsetInCU: 0x480, offset: 0x8687C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x10AD0, symSize: 0x14 } - - { offsetInCU: 0x5C4, offset: 0x869C0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x4C, symBinAddr: 0x10B1C, symSize: 0x1C } - - { offsetInCU: 0x6FA, offset: 0x86AF6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfC', symObjAddr: 0xA8, symBinAddr: 0x10B78, symSize: 0x20 } - - { offsetInCU: 0x70E, offset: 0x86B0A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfc', symObjAddr: 0xC8, symBinAddr: 0x10B98, symSize: 0x30 } - - { offsetInCU: 0x744, offset: 0x86B40, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCfD', symObjAddr: 0x154, symBinAddr: 0x10C24, symSize: 0x30 } - - { offsetInCU: 0x61, offset: 0x86BC4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0x10C58, symSize: 0x10 } - - { offsetInCU: 0x81, offset: 0x86BE4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0x10C58, symSize: 0x10 } - - { offsetInCU: 0xB7, offset: 0x86C1A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0x10C68, symSize: 0x10 } - - { offsetInCU: 0xD7, offset: 0x86C3A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0x10C68, symSize: 0x10 } - - { offsetInCU: 0x110, offset: 0x86C73, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvgTo', symObjAddr: 0x24, symBinAddr: 0x10C78, symSize: 0x48 } - - { offsetInCU: 0x168, offset: 0x86CCB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvsTo', symObjAddr: 0xB4, symBinAddr: 0x10D08, symSize: 0x50 } - - { offsetInCU: 0x1C3, offset: 0x86D26, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0x10D58, symSize: 0x10 } - - { offsetInCU: 0x1E3, offset: 0x86D46, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0x10D58, symSize: 0x10 } - - { offsetInCU: 0x219, offset: 0x86D7C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0x10D68, symSize: 0x10 } - - { offsetInCU: 0x239, offset: 0x86D9C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0x10D68, symSize: 0x10 } - - { offsetInCU: 0x272, offset: 0x86DD5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfcTo', symObjAddr: 0x1B0, symBinAddr: 0x10E04, symSize: 0x78 } - - { offsetInCU: 0x2C8, offset: 0x86E2B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x2D4, symBinAddr: 0x10F28, symSize: 0xB0 } - - { offsetInCU: 0x32A, offset: 0x86E8D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x43C, symBinAddr: 0x11090, symSize: 0x28 } - - { offsetInCU: 0x35C, offset: 0x86EBF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC12bindDrawableyyFTo', symObjAddr: 0x4E0, symBinAddr: 0x110B8, symSize: 0xA0 } - - { offsetInCU: 0x3DD, offset: 0x86F40, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC14deleteDrawableyyFTo', symObjAddr: 0x5BC, symBinAddr: 0x11158, symSize: 0x60 } - - { offsetInCU: 0x44D, offset: 0x86FB0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTo', symObjAddr: 0x620, symBinAddr: 0x111BC, symSize: 0x4C } - - { offsetInCU: 0x4BF, offset: 0x87022, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfcTo', symObjAddr: 0x70C, symBinAddr: 0x112A8, symSize: 0x34 } - - { offsetInCU: 0x533, offset: 0x87096, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCMa', symObjAddr: 0x190, symBinAddr: 0x10DE4, symSize: 0x20 } - - { offsetInCU: 0x55D, offset: 0x870C0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCfETo', symObjAddr: 0x74C, symBinAddr: 0x112E8, symSize: 0x10 } - - { offsetInCU: 0x65B, offset: 0x871BE, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VFTo', symObjAddr: 0xA08, symBinAddr: 0x115A4, symSize: 0x74 } - - { offsetInCU: 0x699, offset: 0x871FC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA7C, symBinAddr: 0x11618, symSize: 0x10 } - - { offsetInCU: 0x6B9, offset: 0x8721C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA7C, symBinAddr: 0x11618, symSize: 0x10 } - - { offsetInCU: 0x6EF, offset: 0x87252, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA8C, symBinAddr: 0x11628, symSize: 0x10 } - - { offsetInCU: 0x70F, offset: 0x87272, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA8C, symBinAddr: 0x11628, symSize: 0x10 } - - { offsetInCU: 0x748, offset: 0x872AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvgTo', symObjAddr: 0xA9C, symBinAddr: 0x11638, symSize: 0x20 } - - { offsetInCU: 0x7A0, offset: 0x87303, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvsTo', symObjAddr: 0xABC, symBinAddr: 0x11658, symSize: 0x14 } - - { offsetInCU: 0x7FB, offset: 0x8735E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvgTo', symObjAddr: 0xAD0, symBinAddr: 0x1166C, symSize: 0x44 } - - { offsetInCU: 0x853, offset: 0x873B6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvsTo', symObjAddr: 0xB58, symBinAddr: 0x116F4, symSize: 0x48 } - - { offsetInCU: 0x8E8, offset: 0x8744B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfcTo', symObjAddr: 0xCBC, symBinAddr: 0x11858, symSize: 0x78 } - - { offsetInCU: 0x93E, offset: 0x874A1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0xE34, symBinAddr: 0x119D0, symSize: 0xB0 } - - { offsetInCU: 0x9A0, offset: 0x87503, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0xF90, symBinAddr: 0x11B2C, symSize: 0x28 } - - { offsetInCU: 0x9D2, offset: 0x87535, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC11deviceScaleSfyFTo', symObjAddr: 0xFB8, symBinAddr: 0x11B54, symSize: 0xB8 } - - { offsetInCU: 0xA53, offset: 0x875B6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTo', symObjAddr: 0x1074, symBinAddr: 0x11C0C, symSize: 0x28 } - - { offsetInCU: 0xAB1, offset: 0x87614, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCfETo', symObjAddr: 0x10D8, symBinAddr: 0x11C70, symSize: 0x10 } - - { offsetInCU: 0xC63, offset: 0x877C6, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfC12CanvasNative15NSCTouchHandlerC7PointerV_Tgm5', symObjAddr: 0x130C, symBinAddr: 0x11DF0, symSize: 0x80 } - - { offsetInCU: 0xCE6, offset: 0x87849, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCs5UInt8V_Tgm5', symObjAddr: 0x140C, symBinAddr: 0x11E70, symSize: 0x6C } - - { offsetInCU: 0xD6A, offset: 0x878CD, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOy', symObjAddr: 0x1630, symBinAddr: 0x12094, symSize: 0x44 } - - { offsetInCU: 0xD7E, offset: 0x878E1, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOe', symObjAddr: 0x1674, symBinAddr: 0x120D8, symSize: 0x44 } - - { offsetInCU: 0xD92, offset: 0x878F5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCMa', symObjAddr: 0x16B8, symBinAddr: 0x1211C, symSize: 0x20 } - - { offsetInCU: 0xE6C, offset: 0x879CF, size: 0x8, addend: 0x0, symName: '_$sSaySayxGqd__c7ElementQyd__RszSTRd__lufCs5UInt8V_10Foundation4DataVTgm5Tf4g_n', symObjAddr: 0x14FC, symBinAddr: 0x11F60, symSize: 0x124 } - - { offsetInCU: 0x112B, offset: 0x87C8E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvg', symObjAddr: 0x6C, symBinAddr: 0x10CC0, symSize: 0x48 } - - { offsetInCU: 0x11A8, offset: 0x87D0B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfc', symObjAddr: 0x124, symBinAddr: 0x10D78, symSize: 0x6C } - - { offsetInCU: 0x11EF, offset: 0x87D52, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0x228, symBinAddr: 0x10E7C, symSize: 0xAC } - - { offsetInCU: 0x1253, offset: 0x87DB6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x384, symBinAddr: 0x10FD8, symSize: 0xB8 } - - { offsetInCU: 0x12DE, offset: 0x87E41, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtF', symObjAddr: 0x61C, symBinAddr: 0x111B8, symSize: 0x4 } - - { offsetInCU: 0x12FF, offset: 0x87E62, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfC', symObjAddr: 0x66C, symBinAddr: 0x11208, symSize: 0x74 } - - { offsetInCU: 0x1313, offset: 0x87E76, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfc', symObjAddr: 0x6E0, symBinAddr: 0x1127C, symSize: 0x2C } - - { offsetInCU: 0x142C, offset: 0x87F8F, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VF', symObjAddr: 0x75C, symBinAddr: 0x112F8, symSize: 0x2AC } - - { offsetInCU: 0x17D6, offset: 0x88339, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvg', symObjAddr: 0xB14, symBinAddr: 0x116B0, symSize: 0x44 } - - { offsetInCU: 0x1815, offset: 0x88378, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvs', symObjAddr: 0xBA0, symBinAddr: 0x1173C, symSize: 0x48 } - - { offsetInCU: 0x183A, offset: 0x8839D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM', symObjAddr: 0xBE8, symBinAddr: 0x11784, symSize: 0x44 } - - { offsetInCU: 0x185F, offset: 0x883C2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM.resume.0', symObjAddr: 0xC2C, symBinAddr: 0x117C8, symSize: 0x4 } - - { offsetInCU: 0x1886, offset: 0x883E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfC', symObjAddr: 0xC30, symBinAddr: 0x117CC, symSize: 0x20 } - - { offsetInCU: 0x189A, offset: 0x883FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfc', symObjAddr: 0xC50, symBinAddr: 0x117EC, symSize: 0x6C } - - { offsetInCU: 0x18E1, offset: 0x88444, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0xD88, symBinAddr: 0x11924, symSize: 0xAC } - - { offsetInCU: 0x1940, offset: 0x884A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0xEE4, symBinAddr: 0x11A80, symSize: 0xAC } - - { offsetInCU: 0x19DE, offset: 0x88541, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x10E8, symBinAddr: 0x11C80, symSize: 0xBC } - - { offsetInCU: 0x1AC0, offset: 0x88623, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFs5UInt8V_Tg5', symObjAddr: 0x1258, symBinAddr: 0x11D3C, symSize: 0xB4 } - - { offsetInCU: 0x1BCC, offset: 0x8872F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTf4ddn_n', symObjAddr: 0x1478, symBinAddr: 0x11EDC, symSize: 0x84 } - - { offsetInCU: 0x1CC5, offset: 0x88828, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTf4dn_n', symObjAddr: 0x16D8, symBinAddr: 0x1213C, symSize: 0x360 } - - { offsetInCU: 0x4F, offset: 0x88C66, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LLSo012OS_dispatch_E0CvpZ', symObjAddr: 0x980, symBinAddr: 0x116EC90, symSize: 0x0 } - - { offsetInCU: 0x5D, offset: 0x88C74, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x12688, symSize: 0x2C } - - { offsetInCU: 0x75, offset: 0x88C8C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LL_WZ', symObjAddr: 0x2C, symBinAddr: 0x126B4, symSize: 0x10C } - - { offsetInCU: 0xBC, offset: 0x88CD3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0x13C, symBinAddr: 0x127C4, symSize: 0x44 } - - { offsetInCU: 0x132, offset: 0x88D49, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTo', symObjAddr: 0x3E4, symBinAddr: 0x12A6C, symSize: 0x80 } - - { offsetInCU: 0x191, offset: 0x88DA8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfcTo', symObjAddr: 0x4B4, symBinAddr: 0x12B3C, symSize: 0x3C } - - { offsetInCU: 0x1E2, offset: 0x88DF9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTf4nnnd_n', symObjAddr: 0x524, symBinAddr: 0x12BAC, symSize: 0x214 } - - { offsetInCU: 0x261, offset: 0x88E78, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfETo', symObjAddr: 0x520, symBinAddr: 0x12BA8, symSize: 0x4 } - - { offsetInCU: 0x29D, offset: 0x88EB4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCMa', symObjAddr: 0x738, symBinAddr: 0x12DC0, symSize: 0x20 } - - { offsetInCU: 0x2BC, offset: 0x88ED3, size: 0x8, addend: 0x0, symName: '_$s10ObjectiveC8ObjCBoolVIeyBy_SbIegy_TRTA', symObjAddr: 0x77C, symBinAddr: 0x12E04, symSize: 0x14 } - - { offsetInCU: 0x2E5, offset: 0x88EFC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_TA', symObjAddr: 0x7BC, symBinAddr: 0x12E44, symSize: 0xC } - - { offsetInCU: 0x2F9, offset: 0x88F10, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x7C8, symBinAddr: 0x12E50, symSize: 0x10 } - - { offsetInCU: 0x30D, offset: 0x88F24, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x7D8, symBinAddr: 0x12E60, symSize: 0x8 } - - { offsetInCU: 0x321, offset: 0x88F38, size: 0x8, addend: 0x0, symName: '_$sSay8Dispatch0A13WorkItemFlagsVGMa', symObjAddr: 0x860, symBinAddr: 0x12EA8, symSize: 0x54 } - - { offsetInCU: 0x335, offset: 0x88F4C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0x8F0, symBinAddr: 0x12EFC, symSize: 0x24 } - - { offsetInCU: 0x369, offset: 0x88F80, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU_TA', symObjAddr: 0x938, symBinAddr: 0x12F44, symSize: 0x24 } - - { offsetInCU: 0x4FE, offset: 0x89115, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x127C0, symSize: 0x4 } - - { offsetInCU: 0x52C, offset: 0x89143, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x127C0, symSize: 0x4 } - - { offsetInCU: 0x58B, offset: 0x891A2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZ', symObjAddr: 0x180, symBinAddr: 0x12808, symSize: 0x4 } - - { offsetInCU: 0x59F, offset: 0x891B6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_', symObjAddr: 0x184, symBinAddr: 0x1280C, symSize: 0x260 } - - { offsetInCU: 0x678, offset: 0x8928F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfC', symObjAddr: 0x464, symBinAddr: 0x12AEC, symSize: 0x20 } - - { offsetInCU: 0x68C, offset: 0x892A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfc', symObjAddr: 0x484, symBinAddr: 0x12B0C, symSize: 0x30 } - - { offsetInCU: 0x6C2, offset: 0x892D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfD', symObjAddr: 0x4F0, symBinAddr: 0x12B78, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x8937F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x12F7C, symSize: 0x20 } - - { offsetInCU: 0x77, offset: 0x893CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfcTo', symObjAddr: 0x70, symBinAddr: 0x12FEC, symSize: 0x3C } - - { offsetInCU: 0xC9, offset: 0x89421, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCMa', symObjAddr: 0x50, symBinAddr: 0x12FCC, symSize: 0x20 } - - { offsetInCU: 0x214, offset: 0x8956C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x12F7C, symSize: 0x20 } - - { offsetInCU: 0x228, offset: 0x89580, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfc', symObjAddr: 0x20, symBinAddr: 0x12F9C, symSize: 0x30 } - - { offsetInCU: 0x264, offset: 0x895BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCfD', symObjAddr: 0xAC, symBinAddr: 0x13028, symSize: 0x30 } - - { offsetInCU: 0x26, offset: 0x89605, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x33AC14, symSize: 0x265C } - - { offsetInCU: 0x40, offset: 0x8961F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9DE0, symBinAddr: 0xA37310, symSize: 0x0 } - - { offsetInCU: 0x92, offset: 0x89671, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFDE0, symBinAddr: 0xA3D310, symSize: 0x0 } - - { offsetInCU: 0xF6, offset: 0x896D5, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFE08, symBinAddr: 0xA3D338, symSize: 0x0 } - - { offsetInCU: 0x10C, offset: 0x896EB, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x10210, symBinAddr: 0xA3D740, symSize: 0x0 } - - { offsetInCU: 0x123, offset: 0x89702, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFE50, symBinAddr: 0xA3D380, symSize: 0x0 } - - { offsetInCU: 0x9C2, offset: 0x89FA1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x33AC14, symSize: 0x265C } - - { offsetInCU: 0x45CD, offset: 0x8DBAC, size: 0x8, addend: 0x0, symName: _fe_frombytes, symObjAddr: 0x265C, symBinAddr: 0x33D270, symSize: 0x134 } - - { offsetInCU: 0x46F3, offset: 0x8DCD2, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x9918, symBinAddr: 0x34452C, symSize: 0x21C } - - { offsetInCU: 0x4922, offset: 0x8DF01, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4FDC, symBinAddr: 0x33FBF0, symSize: 0x1B8 } - - { offsetInCU: 0x530F, offset: 0x8E8EE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x2790, symBinAddr: 0x33D3A4, symSize: 0x5BC } - - { offsetInCU: 0x5F72, offset: 0x8F551, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2D4C, symBinAddr: 0x33D960, symSize: 0x7F8 } - - { offsetInCU: 0x642A, offset: 0x8FA09, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3544, symBinAddr: 0x33E158, symSize: 0x208 } - - { offsetInCU: 0x69F8, offset: 0x8FFD7, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x374C, symBinAddr: 0x33E360, symSize: 0x7B0 } - - { offsetInCU: 0x77D8, offset: 0x90DB7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3EFC, symBinAddr: 0x33EB10, symSize: 0x634 } - - { offsetInCU: 0x8199, offset: 0x91778, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x4530, symBinAddr: 0x33F144, symSize: 0xAAC } - - { offsetInCU: 0x956A, offset: 0x92B49, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x5298, symBinAddr: 0x33FEAC, symSize: 0x23F8 } - - { offsetInCU: 0xCABB, offset: 0x9609A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x5194, symBinAddr: 0x33FDA8, symSize: 0x104 } - - { offsetInCU: 0xCD03, offset: 0x962E2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x7690, symBinAddr: 0x3422A4, symSize: 0x30 } - - { offsetInCU: 0xCDF4, offset: 0x963D3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x76C0, symBinAddr: 0x3422D4, symSize: 0x58 } - - { offsetInCU: 0xCE69, offset: 0x96448, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7718, symBinAddr: 0x34232C, symSize: 0x4 } - - { offsetInCU: 0xCEB1, offset: 0x96490, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7718, symBinAddr: 0x34232C, symSize: 0x4 } - - { offsetInCU: 0xCEE0, offset: 0x964BF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7718, symBinAddr: 0x34232C, symSize: 0x4 } - - { offsetInCU: 0xCF04, offset: 0x964E3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x771C, symBinAddr: 0x342330, symSize: 0x8C } - - { offsetInCU: 0xD039, offset: 0x96618, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x77A8, symBinAddr: 0x3423BC, symSize: 0x4 } - - { offsetInCU: 0xD072, offset: 0x96651, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x77A8, symBinAddr: 0x3423BC, symSize: 0x4 } - - { offsetInCU: 0xD30B, offset: 0x968EA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x77AC, symBinAddr: 0x3423C0, symSize: 0x1598 } - - { offsetInCU: 0x10654, offset: 0x99C33, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x9B34, symBinAddr: 0x344748, symSize: 0x218 } - - { offsetInCU: 0x10C86, offset: 0x9A265, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8D44, symBinAddr: 0x343958, symSize: 0x20 } - - { offsetInCU: 0x11123, offset: 0x9A702, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8D64, symBinAddr: 0x343978, symSize: 0xBB4 } - - { offsetInCU: 0x26, offset: 0x9B4E5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x344960, symSize: 0x1F4 } - - { offsetInCU: 0x1D2, offset: 0x9B691, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x344960, symSize: 0x1F4 } - - { offsetInCU: 0x26, offset: 0x9B92C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x344B54, symSize: 0x3C } - - { offsetInCU: 0x34, offset: 0x9B93A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x344B54, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0x9BA4A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x344B90, symSize: 0x98 } - - { offsetInCU: 0x34, offset: 0x9BA58, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x344B90, symSize: 0x98 } - - { offsetInCU: 0x86, offset: 0x9BBBB, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1100, symBinAddr: 0xA3D7F0, symSize: 0x0 } - - { offsetInCU: 0xB8, offset: 0x9BBED, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1090, symBinAddr: 0xA3D780, symSize: 0x0 } - - { offsetInCU: 0xDA, offset: 0x9BC0F, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x10C0, symBinAddr: 0xA3D7B0, symSize: 0x0 } - - { offsetInCU: 0xF0, offset: 0x9BC25, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x10F0, symBinAddr: 0xA3D7E0, symSize: 0x0 } - - { offsetInCU: 0x3B7, offset: 0x9BEEC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x344C28, symSize: 0x18 } - - { offsetInCU: 0x3FB, offset: 0x9BF30, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x344C28, symSize: 0x18 } - - { offsetInCU: 0x594, offset: 0x9C0C9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0x344C40, symSize: 0x18 } - - { offsetInCU: 0x63F, offset: 0x9C174, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0x344C58, symSize: 0x320 } - - { offsetInCU: 0x1199, offset: 0x9CCCE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x5B0, symBinAddr: 0x344F78, symSize: 0xAC } - - { offsetInCU: 0x148F, offset: 0x9CFC4, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x65C, symBinAddr: 0x345024, symSize: 0x500 } - - { offsetInCU: 0x268C, offset: 0x9E1C1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB5C, symBinAddr: 0x345524, symSize: 0x2C8 } - - { offsetInCU: 0x2CDB, offset: 0x9E810, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xE24, symBinAddr: 0x3457EC, symSize: 0xF4 } - - { offsetInCU: 0x2EED, offset: 0x9EA22, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xF18, symBinAddr: 0x3458E0, symSize: 0x168 } - - { offsetInCU: 0x26, offset: 0x9ED87, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x345A48, symSize: 0x38 } - - { offsetInCU: 0xFA, offset: 0x9EE5B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x345A48, symSize: 0x38 } - - { offsetInCU: 0x12C, offset: 0x9EE8D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x345A48, symSize: 0x38 } - - { offsetInCU: 0x199, offset: 0x9EEFA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x345A80, symSize: 0x3C } - - { offsetInCU: 0x1F3, offset: 0x9EF54, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x345A80, symSize: 0x3C } - - { offsetInCU: 0x31B, offset: 0x9F07C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0x345ABC, symSize: 0x5C } - - { offsetInCU: 0x517, offset: 0x9F278, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0x345B18, symSize: 0x1C } - - { offsetInCU: 0x636, offset: 0x9F397, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0x345B34, symSize: 0x54 } - - { offsetInCU: 0x6D9, offset: 0x9F43A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0x345B88, symSize: 0x4C } - - { offsetInCU: 0x8A7, offset: 0x9F608, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x345BD4, symSize: 0xA8 } - - { offsetInCU: 0x90B, offset: 0x9F66C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x345BD4, symSize: 0xA8 } - - { offsetInCU: 0xBAA, offset: 0x9F90B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0x345C7C, symSize: 0x110 } - - { offsetInCU: 0xC4C, offset: 0x9F9AD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0x345C7C, symSize: 0x110 } - - { offsetInCU: 0xEDE, offset: 0x9FC3F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x344, symBinAddr: 0x345D8C, symSize: 0xB0 } - - { offsetInCU: 0xF5E, offset: 0x9FCBF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x344, symBinAddr: 0x345D8C, symSize: 0xB0 } - - { offsetInCU: 0x10E1, offset: 0x9FE42, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x3F4, symBinAddr: 0x345E3C, symSize: 0x178 } - - { offsetInCU: 0x13AB, offset: 0xA010C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x56C, symBinAddr: 0x345FB4, symSize: 0x1F4 } - - { offsetInCU: 0x1500, offset: 0xA0261, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x760, symBinAddr: 0x3461A8, symSize: 0x18 } - - { offsetInCU: 0x1567, offset: 0xA02C8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x778, symBinAddr: 0x3461C0, symSize: 0xC } - - { offsetInCU: 0x15A0, offset: 0xA0301, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x784, symBinAddr: 0x3461CC, symSize: 0x8 } - - { offsetInCU: 0x1624, offset: 0xA0385, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x78C, symBinAddr: 0x3461D4, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0xA0538, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x346210, symSize: 0x170 } - - { offsetInCU: 0x34, offset: 0xA0546, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x346210, symSize: 0x170 } - - { offsetInCU: 0x34, offset: 0xA064C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x374, symBinAddr: 0x1175FD0, symSize: 0x0 } - - { offsetInCU: 0x26, offset: 0xA068E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x346380, symSize: 0x388 } - - { offsetInCU: 0x76, offset: 0xA06DE, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0xA3E000, symSize: 0x0 } - - { offsetInCU: 0xFA, offset: 0xA0762, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0xA63000, symSize: 0x0 } - - { offsetInCU: 0x35B, offset: 0xA09C3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x346380, symSize: 0x388 } - - { offsetInCU: 0xC66, offset: 0xA12CE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x388, symBinAddr: 0x346708, symSize: 0x204 } - - { offsetInCU: 0x1171, offset: 0xA17D9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x58C, symBinAddr: 0x34690C, symSize: 0x1BC } - - { offsetInCU: 0x10, offset: 0xA1BAE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x346AE0, symSize: 0x1A0 } - - { offsetInCU: 0x50, offset: 0xA1BEE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x346AE0, symSize: 0x1A0 } - - { offsetInCU: 0x5E, offset: 0xA1BFC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0x346C80, symSize: 0x60 } - - { offsetInCU: 0x81, offset: 0xA1C1F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0x346CE0, symSize: 0x288 } - - { offsetInCU: 0x10, offset: 0xA1C10, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x346F70, symSize: 0x130 } - - { offsetInCU: 0x48, offset: 0xA1C48, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x346F70, symSize: 0x130 } - - { offsetInCU: 0x5F, offset: 0xA1C5F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0x3470A0, symSize: 0x70 } - - { offsetInCU: 0x75, offset: 0xA1C75, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0x347110, symSize: 0x160 } - - { offsetInCU: 0x7A, offset: 0xA1C7A, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0x347270, symSize: 0x378 } - - { offsetInCU: 0x10, offset: 0xA1C88, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x347600, symSize: 0x3A0 } - - { offsetInCU: 0x48, offset: 0xA1CC0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x347600, symSize: 0x3A0 } - - { offsetInCU: 0x4C, offset: 0xA1CC4, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0x3479A0, symSize: 0x6C0 } - - { offsetInCU: 0x66, offset: 0xA1CDE, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0x348060, symSize: 0x1138 } - - { offsetInCU: 0x50, offset: 0xA1D2A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0x349300, symSize: 0x1180 } - - { offsetInCU: 0x66, offset: 0xA1D40, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0x34A480, symSize: 0x1410 } - - { offsetInCU: 0x10, offset: 0xA1D36, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x34B8A0, symSize: 0x240 } - - { offsetInCU: 0x45, offset: 0xA1D6B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x34B8A0, symSize: 0x240 } - - { offsetInCU: 0x4D, offset: 0xA1D73, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0x34BAE0, symSize: 0x9E0 } - - { offsetInCU: 0x63, offset: 0xA1D89, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0x34C4C0, symSize: 0x650 } - - { offsetInCU: 0x10, offset: 0xA1D98, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x34CB20, symSize: 0x40 } - - { offsetInCU: 0x47, offset: 0xA1DCF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x34CB20, symSize: 0x40 } - - { offsetInCU: 0x5D, offset: 0xA1DE5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0x34CB60, symSize: 0x40 } - - { offsetInCU: 0x76, offset: 0xA1DFE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0x34CBA0, symSize: 0x40 } - - { offsetInCU: 0x81, offset: 0xA1E09, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0x34CBE0, symSize: 0x1E0 } - - { offsetInCU: 0x97, offset: 0xA1E1F, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0x34CDC0, symSize: 0x170 } - - { offsetInCU: 0xAB, offset: 0xA1E33, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0x34CF30, symSize: 0x50 } - - { offsetInCU: 0xC3, offset: 0xA1E4B, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0x34CF80, symSize: 0x50 } - - { offsetInCU: 0xD9, offset: 0xA1E61, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0x34CFD0, symSize: 0x50 } - - { offsetInCU: 0xEF, offset: 0xA1E77, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0x34D020, symSize: 0x60 } - - { offsetInCU: 0x111, offset: 0xA1E99, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0x34D080, symSize: 0x1E0 } - - { offsetInCU: 0x124, offset: 0xA1EAC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0x34D260, symSize: 0x360 } - - { offsetInCU: 0x141, offset: 0xA1EC9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0x34D5C0, symSize: 0x2D0 } - - { offsetInCU: 0x156, offset: 0xA1EDE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0x34D890, symSize: 0x2B0 } - - { offsetInCU: 0x170, offset: 0xA1EF8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0x34DB40, symSize: 0x250 } - - { offsetInCU: 0x184, offset: 0xA1F0C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0x34DD90, symSize: 0x60 } - - { offsetInCU: 0x19A, offset: 0xA1F22, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0x34DDF0, symSize: 0x44 } - - { offsetInCU: 0x10, offset: 0xA1F18, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x34DE40, symSize: 0xB90 } - - { offsetInCU: 0x4C, offset: 0xA1F54, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x34DE40, symSize: 0xB90 } - - { offsetInCU: 0x62, offset: 0xA1F6A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0x34E9D0, symSize: 0xB98 } - - { offsetInCU: 0x10, offset: 0xA1F64, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x34F580, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA1FA5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x34F580, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA1FA5, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x3503C0, symSize: 0x7E0 } - - { offsetInCU: 0x10, offset: 0xA1FB0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x350BC0, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA1FF1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x350BC0, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA1FF1, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x351A00, symSize: 0x1F0 } + - { offsetInCU: 0x34, offset: 0x778CB, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionString, symObjAddr: 0x0, symBinAddr: 0x971000, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0x77900, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionNumber, symObjAddr: 0x38, symBinAddr: 0x971038, symSize: 0x0 } + - { offsetInCU: 0x3F, offset: 0x77955, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x28, symBinAddr: 0x4028, symSize: 0xC } + - { offsetInCU: 0x53, offset: 0x77969, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x34, symBinAddr: 0x4034, symSize: 0x4 } + - { offsetInCU: 0x67, offset: 0x7797D, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x38, symBinAddr: 0x4038, symSize: 0x20 } + - { offsetInCU: 0x7B, offset: 0x77991, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x58, symBinAddr: 0x4058, symSize: 0x28 } + - { offsetInCU: 0x8F, offset: 0x779A5, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwCP', symObjAddr: 0x94, symBinAddr: 0x4094, symSize: 0x30 } + - { offsetInCU: 0xA3, offset: 0x779B9, size: 0x8, addend: 0x0, symName: ___swift_memcpy32_8, symObjAddr: 0xC4, symBinAddr: 0x40C4, symSize: 0xC } + - { offsetInCU: 0xB7, offset: 0x779CD, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwet', symObjAddr: 0xD0, symBinAddr: 0x40D0, symSize: 0x20 } + - { offsetInCU: 0xCB, offset: 0x779E1, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwst', symObjAddr: 0xF0, symBinAddr: 0x40F0, symSize: 0x2C } + - { offsetInCU: 0x4F, offset: 0x77BCA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC11_WriteQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2AE8, symBinAddr: 0x116E800, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0x77BE4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10_ReadQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2AF0, symBinAddr: 0x116E808, symSize: 0x0 } + - { offsetInCU: 0x9D, offset: 0x77C18, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTo', symObjAddr: 0x4, symBinAddr: 0x4194, symSize: 0x38 } + - { offsetInCU: 0xF3, offset: 0x77C6E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x40, symBinAddr: 0x41D0, symSize: 0x70 } + - { offsetInCU: 0x144, offset: 0x77CBF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0xB4, symBinAddr: 0x4244, symSize: 0x44 } + - { offsetInCU: 0x19F, offset: 0x77D1A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0xFC, symBinAddr: 0x428C, symSize: 0x50 } + - { offsetInCU: 0x204, offset: 0x77D7F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0x150, symBinAddr: 0x42E0, symSize: 0x68 } + - { offsetInCU: 0x27D, offset: 0x77DF8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x1BC, symBinAddr: 0x434C, symSize: 0x98 } + - { offsetInCU: 0x2DA, offset: 0x77E55, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x258, symBinAddr: 0x43E8, symSize: 0x14 } + - { offsetInCU: 0x35C, offset: 0x77ED7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x270, symBinAddr: 0x4400, symSize: 0x14 } + - { offsetInCU: 0x40B, offset: 0x77F86, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZTo', symObjAddr: 0x2C8, symBinAddr: 0x4458, symSize: 0x50 } + - { offsetInCU: 0x4DC, offset: 0x78057, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZTo', symObjAddr: 0x364, symBinAddr: 0x44F4, symSize: 0x58 } + - { offsetInCU: 0x5B6, offset: 0x78131, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZTo', symObjAddr: 0x404, symBinAddr: 0x4594, symSize: 0x58 } + - { offsetInCU: 0x695, offset: 0x78210, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZTo', symObjAddr: 0x4AC, symBinAddr: 0x463C, symSize: 0x60 } + - { offsetInCU: 0x741, offset: 0x782BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZTo', symObjAddr: 0x510, symBinAddr: 0x46A0, symSize: 0x8 } + - { offsetInCU: 0x7AA, offset: 0x78325, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZTo', symObjAddr: 0x51C, symBinAddr: 0x46AC, symSize: 0x8 } + - { offsetInCU: 0x801, offset: 0x7837C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZTo', symObjAddr: 0x538, symBinAddr: 0x46C8, symSize: 0x8 } + - { offsetInCU: 0x858, offset: 0x783D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZTo', symObjAddr: 0x544, symBinAddr: 0x46D4, symSize: 0x8 } + - { offsetInCU: 0x8AF, offset: 0x7842A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZTo', symObjAddr: 0x550, symBinAddr: 0x46E0, symSize: 0x8 } + - { offsetInCU: 0x906, offset: 0x78481, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZTo', symObjAddr: 0x55C, symBinAddr: 0x46EC, symSize: 0x8 } + - { offsetInCU: 0x985, offset: 0x78500, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZTo', symObjAddr: 0x56C, symBinAddr: 0x46FC, symSize: 0x24 } + - { offsetInCU: 0xA36, offset: 0x785B1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZTo', symObjAddr: 0x594, symBinAddr: 0x4724, symSize: 0x14 } + - { offsetInCU: 0xAA9, offset: 0x78624, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZTo', symObjAddr: 0x5AC, symBinAddr: 0x473C, symSize: 0x8 } + - { offsetInCU: 0xB00, offset: 0x7867B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZTo', symObjAddr: 0x60C, symBinAddr: 0x479C, symSize: 0x74 } + - { offsetInCU: 0xB8B, offset: 0x78706, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTo', symObjAddr: 0x814, symBinAddr: 0x49A4, symSize: 0xA0 } + - { offsetInCU: 0xBDC, offset: 0x78757, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZTo', symObjAddr: 0xB1C, symBinAddr: 0x4CAC, symSize: 0x98 } + - { offsetInCU: 0xC2D, offset: 0x787A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZTo', symObjAddr: 0xE70, symBinAddr: 0x5000, symSize: 0x98 } + - { offsetInCU: 0xC89, offset: 0x78804, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTo', symObjAddr: 0x1298, symBinAddr: 0x5428, symSize: 0xD8 } + - { offsetInCU: 0xCD1, offset: 0x7884C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTo', symObjAddr: 0x1374, symBinAddr: 0x5504, symSize: 0x34 } + - { offsetInCU: 0xD31, offset: 0x788AC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfcTo', symObjAddr: 0x13F8, symBinAddr: 0x5588, symSize: 0x3C } + - { offsetInCU: 0xD82, offset: 0x788FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTf4nd_n', symObjAddr: 0x1468, symBinAddr: 0x55F8, symSize: 0x2AC } + - { offsetInCU: 0xFB6, offset: 0x78B31, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTf4nnnd_n', symObjAddr: 0x1714, symBinAddr: 0x58A4, symSize: 0x264 } + - { offsetInCU: 0x11B0, offset: 0x78D2B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTf4nnd_n', symObjAddr: 0x1978, symBinAddr: 0x5B08, symSize: 0xEC } + - { offsetInCU: 0x12AD, offset: 0x78E28, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTf4nnnnd_n', symObjAddr: 0x1A64, symBinAddr: 0x5BF4, symSize: 0x1B4 } + - { offsetInCU: 0x1422, offset: 0x78F9D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTf4nnnnnnd_n', symObjAddr: 0x1C18, symBinAddr: 0x5DA8, symSize: 0x1CC } + - { offsetInCU: 0x15B7, offset: 0x79132, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTf4nnnnnnnnnnd_n', symObjAddr: 0x1DE4, symBinAddr: 0x5F74, symSize: 0x1E0 } + - { offsetInCU: 0x17A3, offset: 0x7931E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTf4nnnd_n', symObjAddr: 0x1FC4, symBinAddr: 0x6154, symSize: 0x1B4 } + - { offsetInCU: 0x186D, offset: 0x793E8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTf4nnnnd_n', symObjAddr: 0x231C, symBinAddr: 0x64AC, symSize: 0x1D4 } + - { offsetInCU: 0x194E, offset: 0x794C9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTf4d_n', symObjAddr: 0x24F0, symBinAddr: 0x6680, symSize: 0x114 } + - { offsetInCU: 0x19F9, offset: 0x79574, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TR', symObjAddr: 0x8B4, symBinAddr: 0x4A44, symSize: 0x78 } + - { offsetInCU: 0x1A11, offset: 0x7958C, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TR', symObjAddr: 0xBB4, symBinAddr: 0x4D44, symSize: 0x54 } + - { offsetInCU: 0x1A7E, offset: 0x795F9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfETo', symObjAddr: 0x1464, symBinAddr: 0x55F4, symSize: 0x4 } + - { offsetInCU: 0x1B09, offset: 0x79684, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCMa', symObjAddr: 0x2604, symBinAddr: 0x6794, symSize: 0x20 } + - { offsetInCU: 0x1B1D, offset: 0x79698, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TRTA', symObjAddr: 0x2648, symBinAddr: 0x67D8, symSize: 0x8 } + - { offsetInCU: 0x1B3C, offset: 0x796B7, size: 0x8, addend: 0x0, symName: '_$sSo7NSErrorCSg10ObjectiveC8ObjCBoolVIeyByy_ACSbIeggy_TRTA', symObjAddr: 0x2650, symBinAddr: 0x67E0, symSize: 0x18 } + - { offsetInCU: 0x1B65, offset: 0x796E0, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TRTA', symObjAddr: 0x2668, symBinAddr: 0x67F8, symSize: 0x8 } + - { offsetInCU: 0x1B79, offset: 0x796F4, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCMa', symObjAddr: 0x2670, symBinAddr: 0x6800, symSize: 0x3C } + - { offsetInCU: 0x1B8D, offset: 0x79708, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_TA', symObjAddr: 0x26F0, symBinAddr: 0x6880, symSize: 0x34 } + - { offsetInCU: 0x1BA1, offset: 0x7971C, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x2724, symBinAddr: 0x68B4, symSize: 0x10 } + - { offsetInCU: 0x1BB5, offset: 0x79730, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x2734, symBinAddr: 0x68C4, symSize: 0x8 } + - { offsetInCU: 0x1BC9, offset: 0x79744, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2760, symBinAddr: 0x68F0, symSize: 0x40 } + - { offsetInCU: 0x1BFD, offset: 0x79778, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x27E4, symBinAddr: 0x6974, symSize: 0x40 } + - { offsetInCU: 0x1C3B, offset: 0x797B6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2824, symBinAddr: 0x69B4, symSize: 0x28 } + - { offsetInCU: 0x1C6F, offset: 0x797EA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x28A4, symBinAddr: 0x6A34, symSize: 0x3C } + - { offsetInCU: 0x1CA3, offset: 0x7981E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x290C, symBinAddr: 0x6A9C, symSize: 0x30 } + - { offsetInCU: 0x1CDF, offset: 0x7985A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_TA', symObjAddr: 0x2978, symBinAddr: 0x6B08, symSize: 0x10 } + - { offsetInCU: 0x1CF3, offset: 0x7986E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2988, symBinAddr: 0x6B18, symSize: 0x40 } + - { offsetInCU: 0x21C0, offset: 0x79D3B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZ', symObjAddr: 0x0, symBinAddr: 0x4190, symSize: 0x4 } + - { offsetInCU: 0x21DB, offset: 0x79D56, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x3C, symBinAddr: 0x41CC, symSize: 0x4 } + - { offsetInCU: 0x21F6, offset: 0x79D71, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0xB0, symBinAddr: 0x4240, symSize: 0x4 } + - { offsetInCU: 0x2217, offset: 0x79D92, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0xF8, symBinAddr: 0x4288, symSize: 0x4 } + - { offsetInCU: 0x2232, offset: 0x79DAD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0x14C, symBinAddr: 0x42DC, symSize: 0x4 } + - { offsetInCU: 0x224D, offset: 0x79DC8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x1B8, symBinAddr: 0x4348, symSize: 0x4 } + - { offsetInCU: 0x2268, offset: 0x79DE3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x254, symBinAddr: 0x43E4, symSize: 0x4 } + - { offsetInCU: 0x22F6, offset: 0x79E71, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x26C, symBinAddr: 0x43FC, symSize: 0x4 } + - { offsetInCU: 0x2375, offset: 0x79EF0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZ', symObjAddr: 0x284, symBinAddr: 0x4414, symSize: 0x44 } + - { offsetInCU: 0x24B3, offset: 0x7A02E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZ', symObjAddr: 0x318, symBinAddr: 0x44A8, symSize: 0x4C } + - { offsetInCU: 0x25FC, offset: 0x7A177, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZ', symObjAddr: 0x3BC, symBinAddr: 0x454C, symSize: 0x48 } + - { offsetInCU: 0x2744, offset: 0x7A2BF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZ', symObjAddr: 0x45C, symBinAddr: 0x45EC, symSize: 0x50 } + - { offsetInCU: 0x28A1, offset: 0x7A41C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZ', symObjAddr: 0x50C, symBinAddr: 0x469C, symSize: 0x4 } + - { offsetInCU: 0x2913, offset: 0x7A48E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZ', symObjAddr: 0x518, symBinAddr: 0x46A8, symSize: 0x4 } + - { offsetInCU: 0x2956, offset: 0x7A4D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZ', symObjAddr: 0x524, symBinAddr: 0x46B4, symSize: 0x14 } + - { offsetInCU: 0x299B, offset: 0x7A516, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZ', symObjAddr: 0x540, symBinAddr: 0x46D0, symSize: 0x4 } + - { offsetInCU: 0x29DE, offset: 0x7A559, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZ', symObjAddr: 0x54C, symBinAddr: 0x46DC, symSize: 0x4 } + - { offsetInCU: 0x2A21, offset: 0x7A59C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZ', symObjAddr: 0x558, symBinAddr: 0x46E8, symSize: 0x4 } + - { offsetInCU: 0x2A64, offset: 0x7A5DF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZ', symObjAddr: 0x564, symBinAddr: 0x46F4, symSize: 0x8 } + - { offsetInCU: 0x2B4B, offset: 0x7A6C6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ', symObjAddr: 0x590, symBinAddr: 0x4720, symSize: 0x4 } + - { offsetInCU: 0x2BCA, offset: 0x7A745, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZ', symObjAddr: 0x5A8, symBinAddr: 0x4738, symSize: 0x4 } + - { offsetInCU: 0x2C0D, offset: 0x7A788, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZ', symObjAddr: 0x5B4, symBinAddr: 0x4744, symSize: 0x58 } + - { offsetInCU: 0x2CCE, offset: 0x7A849, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZ', symObjAddr: 0x680, symBinAddr: 0x4810, symSize: 0x4 } + - { offsetInCU: 0x2CE2, offset: 0x7A85D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_', symObjAddr: 0x684, symBinAddr: 0x4814, symSize: 0x190 } + - { offsetInCU: 0x2D82, offset: 0x7A8FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZ', symObjAddr: 0x92C, symBinAddr: 0x4ABC, symSize: 0x2C } + - { offsetInCU: 0x2D96, offset: 0x7A911, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_', symObjAddr: 0x958, symBinAddr: 0x4AE8, symSize: 0x1C4 } + - { offsetInCU: 0x2E80, offset: 0x7A9FB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZ', symObjAddr: 0xC08, symBinAddr: 0x4D98, symSize: 0x2C } + - { offsetInCU: 0x2E94, offset: 0x7AA0F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_', symObjAddr: 0xC34, symBinAddr: 0x4DC4, symSize: 0x23C } + - { offsetInCU: 0x2F48, offset: 0x7AAC3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZ', symObjAddr: 0xF08, symBinAddr: 0x5098, symSize: 0x4 } + - { offsetInCU: 0x2F5C, offset: 0x7AAD7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_', symObjAddr: 0xF0C, symBinAddr: 0x509C, symSize: 0x38C } + - { offsetInCU: 0x31F3, offset: 0x7AD6E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZ', symObjAddr: 0x1370, symBinAddr: 0x5500, symSize: 0x4 } + - { offsetInCU: 0x320E, offset: 0x7AD89, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfC', symObjAddr: 0x13A8, symBinAddr: 0x5538, symSize: 0x20 } + - { offsetInCU: 0x3222, offset: 0x7AD9D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfc', symObjAddr: 0x13C8, symBinAddr: 0x5558, symSize: 0x30 } + - { offsetInCU: 0x3258, offset: 0x7ADD3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfD', symObjAddr: 0x1434, symBinAddr: 0x55C4, symSize: 0x30 } + - { offsetInCU: 0x4F, offset: 0x7B00B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LLSo7GLKViewCvpZ', symObjAddr: 0x5550, symBinAddr: 0x116E840, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0x7B025, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15_shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvpZ', symObjAddr: 0x5558, symBinAddr: 0x116E848, symSize: 0x0 } + - { offsetInCU: 0x83, offset: 0x7B03F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5storeSo19NSMutableDictionaryCvpZ', symObjAddr: 0x5560, symBinAddr: 0x116E850, symSize: 0x0 } + - { offsetInCU: 0x9D, offset: 0x7B059, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LLSo10NSMapTableCySo8NSStringCACGvpZ', symObjAddr: 0x5568, symBinAddr: 0x116E858, symSize: 0x0 } + - { offsetInCU: 0xAB, offset: 0x7B067, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0x0, symBinAddr: 0x6C40, symSize: 0x40 } + - { offsetInCU: 0xF0, offset: 0x7B0AC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5store_WZ', symObjAddr: 0x40, symBinAddr: 0x6C80, symSize: 0x30 } + - { offsetInCU: 0x135, offset: 0x7B0F1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0xA8, symBinAddr: 0x6CE8, symSize: 0x40 } + - { offsetInCU: 0x187, offset: 0x7B143, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x194, symBinAddr: 0x6DD4, symSize: 0x10 } + - { offsetInCU: 0x1A7, offset: 0x7B163, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x194, symBinAddr: 0x6DD4, symSize: 0x10 } + - { offsetInCU: 0x1DD, offset: 0x7B199, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x1A4, symBinAddr: 0x6DE4, symSize: 0x10 } + - { offsetInCU: 0x1FD, offset: 0x7B1B9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x1A4, symBinAddr: 0x6DE4, symSize: 0x10 } + - { offsetInCU: 0x236, offset: 0x7B1F2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x1B4, symBinAddr: 0x6DF4, symSize: 0x10 } + - { offsetInCU: 0x256, offset: 0x7B212, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x1B4, symBinAddr: 0x6DF4, symSize: 0x10 } + - { offsetInCU: 0x28C, offset: 0x7B248, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x1C4, symBinAddr: 0x6E04, symSize: 0x10 } + - { offsetInCU: 0x2AC, offset: 0x7B268, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x1C4, symBinAddr: 0x6E04, symSize: 0x10 } + - { offsetInCU: 0x2E5, offset: 0x7B2A1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvgTo', symObjAddr: 0x29C, symBinAddr: 0x6EDC, symSize: 0x44 } + - { offsetInCU: 0x322, offset: 0x7B2DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvsTo', symObjAddr: 0x324, symBinAddr: 0x6F64, symSize: 0x30 } + - { offsetInCU: 0x3B1, offset: 0x7B36D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvgTo', symObjAddr: 0x578, symBinAddr: 0x71B8, symSize: 0x44 } + - { offsetInCU: 0x409, offset: 0x7B3C5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvsTo', symObjAddr: 0x600, symBinAddr: 0x7240, symSize: 0x48 } + - { offsetInCU: 0x464, offset: 0x7B420, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvgTo', symObjAddr: 0x648, symBinAddr: 0x7288, symSize: 0x44 } + - { offsetInCU: 0x4BC, offset: 0x7B478, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvsTo', symObjAddr: 0x6D0, symBinAddr: 0x7310, symSize: 0x48 } + - { offsetInCU: 0x517, offset: 0x7B4D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0x718, symBinAddr: 0x7358, symSize: 0x10 } + - { offsetInCU: 0x537, offset: 0x7B4F3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0x718, symBinAddr: 0x7358, symSize: 0x10 } + - { offsetInCU: 0x56D, offset: 0x7B529, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0x728, symBinAddr: 0x7368, symSize: 0x10 } + - { offsetInCU: 0x58D, offset: 0x7B549, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0x728, symBinAddr: 0x7368, symSize: 0x10 } + - { offsetInCU: 0x5C6, offset: 0x7B582, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0x738, symBinAddr: 0x7378, symSize: 0x10 } + - { offsetInCU: 0x5E6, offset: 0x7B5A2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0x738, symBinAddr: 0x7378, symSize: 0x10 } + - { offsetInCU: 0x61E, offset: 0x7B5DA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvsTo', symObjAddr: 0x748, symBinAddr: 0x7388, symSize: 0x34 } + - { offsetInCU: 0x677, offset: 0x7B633, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x77C, symBinAddr: 0x73BC, symSize: 0x10 } + - { offsetInCU: 0x697, offset: 0x7B653, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x77C, symBinAddr: 0x73BC, symSize: 0x10 } + - { offsetInCU: 0x6CF, offset: 0x7B68B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvsTo', symObjAddr: 0x78C, symBinAddr: 0x73CC, symSize: 0x34 } + - { offsetInCU: 0x728, offset: 0x7B6E4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x7C0, symBinAddr: 0x7400, symSize: 0x10 } + - { offsetInCU: 0x748, offset: 0x7B704, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x7C0, symBinAddr: 0x7400, symSize: 0x10 } + - { offsetInCU: 0x77E, offset: 0x7B73A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x7D0, symBinAddr: 0x7410, symSize: 0x10 } + - { offsetInCU: 0x79E, offset: 0x7B75A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x7D0, symBinAddr: 0x7410, symSize: 0x10 } + - { offsetInCU: 0x7D7, offset: 0x7B793, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvgTo', symObjAddr: 0x7E0, symBinAddr: 0x7420, symSize: 0x10 } + - { offsetInCU: 0x7F7, offset: 0x7B7B3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvgTo', symObjAddr: 0x7E0, symBinAddr: 0x7420, symSize: 0x10 } + - { offsetInCU: 0x82D, offset: 0x7B7E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvsTo', symObjAddr: 0x7F0, symBinAddr: 0x7430, symSize: 0x10 } + - { offsetInCU: 0x84D, offset: 0x7B809, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvsTo', symObjAddr: 0x7F0, symBinAddr: 0x7430, symSize: 0x10 } + - { offsetInCU: 0x870, offset: 0x7B82C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivgTo', symObjAddr: 0x800, symBinAddr: 0x7440, symSize: 0x34 } + - { offsetInCU: 0x8A2, offset: 0x7B85E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivgTo', symObjAddr: 0x904, symBinAddr: 0x7544, symSize: 0x34 } + - { offsetInCU: 0x8EA, offset: 0x7B8A6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvgTo', symObjAddr: 0xA08, symBinAddr: 0x7648, symSize: 0x20 } + - { offsetInCU: 0x952, offset: 0x7B90E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvgTo', symObjAddr: 0xA4C, symBinAddr: 0x768C, symSize: 0x20 } + - { offsetInCU: 0x9F1, offset: 0x7B9AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btFTo', symObjAddr: 0xAB4, symBinAddr: 0x76F4, symSize: 0xC4 } + - { offsetInCU: 0xAB4, offset: 0x7BA70, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VFTo', symObjAddr: 0xD10, symBinAddr: 0x7950, symSize: 0x30 } + - { offsetInCU: 0xB64, offset: 0x7BB20, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x15C8, symBinAddr: 0x8208, symSize: 0xC4 } + - { offsetInCU: 0xBCE, offset: 0x7BB8A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtFTo', symObjAddr: 0x18E4, symBinAddr: 0x8524, symSize: 0xB0 } + - { offsetInCU: 0xC0B, offset: 0x7BBC7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x1A54, symBinAddr: 0x8694, symSize: 0xB8 } + - { offsetInCU: 0xC83, offset: 0x7BC3F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbFTo', symObjAddr: 0x1BF0, symBinAddr: 0x8830, symSize: 0x3C } + - { offsetInCU: 0xCB6, offset: 0x7BC72, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1C2C, symBinAddr: 0x886C, symSize: 0x10 } + - { offsetInCU: 0xCD6, offset: 0x7BC92, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1C2C, symBinAddr: 0x886C, symSize: 0x10 } + - { offsetInCU: 0xD10, offset: 0x7BCCC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvsTo', symObjAddr: 0x1C3C, symBinAddr: 0x887C, symSize: 0x34 } + - { offsetInCU: 0xD6B, offset: 0x7BD27, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyFTo', symObjAddr: 0x1CB8, symBinAddr: 0x88F8, symSize: 0x48 } + - { offsetInCU: 0xE05, offset: 0x7BDC1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VFTo', symObjAddr: 0x1D4C, symBinAddr: 0x898C, symSize: 0x64 } + - { offsetInCU: 0xECA, offset: 0x7BE86, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VFTo', symObjAddr: 0x1E08, symBinAddr: 0x8A48, symSize: 0x94 } + - { offsetInCU: 0xF57, offset: 0x7BF13, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC23enterBackgroundListeneryycSgvsTo', symObjAddr: 0x1EDC, symBinAddr: 0x8B1C, symSize: 0x6C } + - { offsetInCU: 0xFB9, offset: 0x7BF75, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC20becomeActiveListeneryycSgvsTo', symObjAddr: 0x1FEC, symBinAddr: 0x8C2C, symSize: 0x6C } + - { offsetInCU: 0x1016, offset: 0x7BFD2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvgTo', symObjAddr: 0x2058, symBinAddr: 0x8C98, symSize: 0xB0 } + - { offsetInCU: 0x1068, offset: 0x7C024, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvsTo', symObjAddr: 0x21D8, symBinAddr: 0x8E18, symSize: 0x94 } + - { offsetInCU: 0x10FA, offset: 0x7C0B6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x2E74, symBinAddr: 0x9AB4, symSize: 0x28 } + - { offsetInCU: 0x114F, offset: 0x7C10B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x38BC, symBinAddr: 0xA4FC, symSize: 0x20 } + - { offsetInCU: 0x1182, offset: 0x7C13E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x38DC, symBinAddr: 0xA51C, symSize: 0x10 } + - { offsetInCU: 0x11A2, offset: 0x7C15E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x38DC, symBinAddr: 0xA51C, symSize: 0x10 } + - { offsetInCU: 0x11DA, offset: 0x7C196, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvsTo', symObjAddr: 0x38EC, symBinAddr: 0xA52C, symSize: 0x34 } + - { offsetInCU: 0x1248, offset: 0x7C204, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvgTo', symObjAddr: 0x39A0, symBinAddr: 0xA5E0, symSize: 0x20 } + - { offsetInCU: 0x12A2, offset: 0x7C25E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvsTo', symObjAddr: 0x39C0, symBinAddr: 0xA600, symSize: 0x34 } + - { offsetInCU: 0x1302, offset: 0x7C2BE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgFTo', symObjAddr: 0x3A24, symBinAddr: 0xA664, symSize: 0x34 } + - { offsetInCU: 0x1446, offset: 0x7C402, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFTo', symObjAddr: 0x3D70, symBinAddr: 0xA9B0, symSize: 0x28 } + - { offsetInCU: 0x1479, offset: 0x7C435, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfDTo', symObjAddr: 0x409C, symBinAddr: 0xACDC, symSize: 0x24 } + - { offsetInCU: 0x14B4, offset: 0x7C470, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTo', symObjAddr: 0x4188, symBinAddr: 0xADC8, symSize: 0x34 } + - { offsetInCU: 0x14E7, offset: 0x7C4A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvgZTf4d_n', symObjAddr: 0x4B24, symBinAddr: 0xB764, symSize: 0x2A8 } + - { offsetInCU: 0x1664, offset: 0x7C620, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTf4nnd_n', symObjAddr: 0x4E90, symBinAddr: 0xBAD0, symSize: 0xA0 } + - { offsetInCU: 0x18E0, offset: 0x7C89C, size: 0x8, addend: 0x0, symName: '_$sIeg_IeyB_TR', symObjAddr: 0x1EB0, symBinAddr: 0x8AF0, symSize: 0x2C } + - { offsetInCU: 0x18F8, offset: 0x7C8B4, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_So8NSStringCABIeyByy_TR', symObjAddr: 0x2160, symBinAddr: 0x8DA0, symSize: 0x78 } + - { offsetInCU: 0x1910, offset: 0x7C8CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTK', symObjAddr: 0x22C8, symBinAddr: 0x8F08, symSize: 0x94 } + - { offsetInCU: 0x1948, offset: 0x7C904, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTk', symObjAddr: 0x235C, symBinAddr: 0x8F9C, symSize: 0xB8 } + - { offsetInCU: 0x198A, offset: 0x7C946, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TR', symObjAddr: 0x2414, symBinAddr: 0x9054, symSize: 0x6C } + - { offsetInCU: 0x1A3A, offset: 0x7C9F6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfETo', symObjAddr: 0x40C0, symBinAddr: 0xAD00, symSize: 0xC4 } + - { offsetInCU: 0x1A6A, offset: 0x7CA26, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOy', symObjAddr: 0x41BC, symBinAddr: 0xADFC, symSize: 0x10 } + - { offsetInCU: 0x1A7E, offset: 0x7CA3A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCMa', symObjAddr: 0x41CC, symBinAddr: 0xAE0C, symSize: 0x20 } + - { offsetInCU: 0x1A92, offset: 0x7CA4E, size: 0x8, addend: 0x0, symName: '_$ss29getContiguousArrayStorageType3fors01_bcD0CyxGmxm_tlFSo18NSLayoutConstraintC_Tgm5', symObjAddr: 0x41EC, symBinAddr: 0xAE2C, symSize: 0x64 } + - { offsetInCU: 0x1C99, offset: 0x7CC55, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x4DCC, symBinAddr: 0xBA0C, symSize: 0x40 } + - { offsetInCU: 0x1CAD, offset: 0x7CC69, size: 0x8, addend: 0x0, symName: '_$sypSgWOh', symObjAddr: 0x4E0C, symBinAddr: 0xBA4C, symSize: 0x40 } + - { offsetInCU: 0x1CC1, offset: 0x7CC7D, size: 0x8, addend: 0x0, symName: ___swift_project_boxed_opaque_existential_0, symObjAddr: 0x4E4C, symBinAddr: 0xBA8C, symSize: 0x24 } + - { offsetInCU: 0x1CD5, offset: 0x7CC91, size: 0x8, addend: 0x0, symName: ___swift_destroy_boxed_opaque_existential_0, symObjAddr: 0x4E70, symBinAddr: 0xBAB0, symSize: 0x20 } + - { offsetInCU: 0x1CF4, offset: 0x7CCB0, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSo19UIGestureRecognizerCIeyByy_SSADIeggg_TRTA', symObjAddr: 0x535C, symBinAddr: 0xBF9C, symSize: 0x48 } + - { offsetInCU: 0x1D1D, offset: 0x7CCD9, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x53A4, symBinAddr: 0xBFE4, symSize: 0x10 } + - { offsetInCU: 0x1D31, offset: 0x7CCED, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x53B4, symBinAddr: 0xBFF4, symSize: 0x8 } + - { offsetInCU: 0x1D45, offset: 0x7CD01, size: 0x8, addend: 0x0, symName: '_$sIeg_SgWOe', symObjAddr: 0x53BC, symBinAddr: 0xBFFC, symSize: 0x10 } + - { offsetInCU: 0x1D64, offset: 0x7CD20, size: 0x8, addend: 0x0, symName: '_$sIeyB_Ieg_TRTA', symObjAddr: 0x53CC, symBinAddr: 0xC00C, symSize: 0xC } + - { offsetInCU: 0x1D8D, offset: 0x7CD49, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TRTA', symObjAddr: 0x53FC, symBinAddr: 0xC03C, symSize: 0x8 } + - { offsetInCU: 0x1DAC, offset: 0x7CD68, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SSABytIegnnr_TRTA', symObjAddr: 0x5404, symBinAddr: 0xC044, symSize: 0x30 } + - { offsetInCU: 0x1DD5, offset: 0x7CD91, size: 0x8, addend: 0x0, symName: '_$sypWOb', symObjAddr: 0x5434, symBinAddr: 0xC074, symSize: 0x10 } + - { offsetInCU: 0x1DE9, offset: 0x7CDA5, size: 0x8, addend: 0x0, symName: '_$sypWOc', symObjAddr: 0x547C, symBinAddr: 0xC0BC, symSize: 0x3C } + - { offsetInCU: 0x206E, offset: 0x7D02A, size: 0x8, addend: 0x0, symName: '_$sSD17dictionaryLiteralSDyxq_Gx_q_td_tcfCSS_ypTgm5Tf4g_n', symObjAddr: 0x4A0C, symBinAddr: 0xB64C, symSize: 0x118 } + - { offsetInCU: 0x2514, offset: 0x7D4D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvg', symObjAddr: 0x2E0, symBinAddr: 0x6F20, symSize: 0x44 } + - { offsetInCU: 0x2547, offset: 0x7D503, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvs', symObjAddr: 0x354, symBinAddr: 0x6F94, symSize: 0xEC } + - { offsetInCU: 0x2593, offset: 0x7D54F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM', symObjAddr: 0x440, symBinAddr: 0x7080, symSize: 0x58 } + - { offsetInCU: 0x25B8, offset: 0x7D574, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM.resume.0', symObjAddr: 0x498, symBinAddr: 0x70D8, symSize: 0xE0 } + - { offsetInCU: 0x25F9, offset: 0x7D5B5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64Vvg', symObjAddr: 0x5BC, symBinAddr: 0x71FC, symSize: 0x44 } + - { offsetInCU: 0x2651, offset: 0x7D60D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg', symObjAddr: 0x68C, symBinAddr: 0x72CC, symSize: 0x44 } + - { offsetInCU: 0x27BF, offset: 0x7D77B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivg', symObjAddr: 0x834, symBinAddr: 0x7474, symSize: 0xD0 } + - { offsetInCU: 0x28E4, offset: 0x7D8A0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivg', symObjAddr: 0x938, symBinAddr: 0x7578, symSize: 0xD0 } + - { offsetInCU: 0x2A2A, offset: 0x7D9E6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvg', symObjAddr: 0xA28, symBinAddr: 0x7668, symSize: 0x24 } + - { offsetInCU: 0x2A72, offset: 0x7DA2E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvg', symObjAddr: 0xA6C, symBinAddr: 0x76AC, symSize: 0x24 } + - { offsetInCU: 0x2AA6, offset: 0x7DA62, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btF', symObjAddr: 0xA90, symBinAddr: 0x76D0, symSize: 0x24 } + - { offsetInCU: 0x2C34, offset: 0x7DBF0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VF', symObjAddr: 0xB78, symBinAddr: 0x77B8, symSize: 0x198 } + - { offsetInCU: 0x3027, offset: 0x7DFE3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btF', symObjAddr: 0xD40, symBinAddr: 0x7980, symSize: 0x888 } + - { offsetInCU: 0x382A, offset: 0x7E7E6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtF', symObjAddr: 0x168C, symBinAddr: 0x82CC, symSize: 0x258 } + - { offsetInCU: 0x3C5C, offset: 0x7EC18, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x1994, symBinAddr: 0x85D4, symSize: 0xC0 } + - { offsetInCU: 0x3CED, offset: 0x7ECA9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbF', symObjAddr: 0x1B0C, symBinAddr: 0x874C, symSize: 0xE4 } + - { offsetInCU: 0x3E48, offset: 0x7EE04, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyF', symObjAddr: 0x1C70, symBinAddr: 0x88B0, symSize: 0x48 } + - { offsetInCU: 0x3ECE, offset: 0x7EE8A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF', symObjAddr: 0x1D00, symBinAddr: 0x8940, symSize: 0x4C } + - { offsetInCU: 0x3FEF, offset: 0x7EFAB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VF', symObjAddr: 0x1DB0, symBinAddr: 0x89F0, symSize: 0x58 } + - { offsetInCU: 0x40E5, offset: 0x7F0A1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvg', symObjAddr: 0x2108, symBinAddr: 0x8D48, symSize: 0x58 } + - { offsetInCU: 0x4131, offset: 0x7F0ED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvs', symObjAddr: 0x226C, symBinAddr: 0x8EAC, symSize: 0x5C } + - { offsetInCU: 0x415A, offset: 0x7F116, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM', symObjAddr: 0x2480, symBinAddr: 0x90C0, symSize: 0x44 } + - { offsetInCU: 0x4180, offset: 0x7F13C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM.resume.0', symObjAddr: 0x24C4, symBinAddr: 0x9104, symSize: 0x4 } + - { offsetInCU: 0x4242, offset: 0x7F1FE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x24C8, symBinAddr: 0x9108, symSize: 0x9AC } + - { offsetInCU: 0x4447, offset: 0x7F403, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfC', symObjAddr: 0x2E9C, symBinAddr: 0x9ADC, symSize: 0x50 } + - { offsetInCU: 0x4470, offset: 0x7F42C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfc', symObjAddr: 0x2EEC, symBinAddr: 0x9B2C, symSize: 0x9D0 } + - { offsetInCU: 0x4696, offset: 0x7F652, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvW', symObjAddr: 0x3920, symBinAddr: 0xA560, symSize: 0x80 } + - { offsetInCU: 0x478C, offset: 0x7F748, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgF', symObjAddr: 0x39F4, symBinAddr: 0xA634, symSize: 0x30 } + - { offsetInCU: 0x482A, offset: 0x7F7E6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6resize33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x3A58, symBinAddr: 0xA698, symSize: 0x144 } + - { offsetInCU: 0x4A2B, offset: 0x7F9E7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyF', symObjAddr: 0x3B9C, symBinAddr: 0xA7DC, symSize: 0x1D4 } + - { offsetInCU: 0x4CA8, offset: 0x7FC64, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfD', symObjAddr: 0x3D98, symBinAddr: 0xA9D8, symSize: 0x304 } + - { offsetInCU: 0x4D38, offset: 0x7FCF4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZ', symObjAddr: 0x4184, symBinAddr: 0xADC4, symSize: 0x4 } + - { offsetInCU: 0x4D60, offset: 0x7FD1C, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4findys10_HashTableV6BucketV6bucket_Sb5foundtxSHRzlFSS_Tg5', symObjAddr: 0x4250, symBinAddr: 0xAE90, symSize: 0x64 } + - { offsetInCU: 0x4DBA, offset: 0x7FD76, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV7_insert2at3key5valueys10_HashTableV6BucketV_xnq_ntFSS_ypTg5', symObjAddr: 0x42B4, symBinAddr: 0xAEF4, symSize: 0x6C } + - { offsetInCU: 0x4E3A, offset: 0x7FDF6, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV12mutatingFind_8isUniques10_HashTableV6BucketV6bucket_Sb5foundtx_SbtFSS_ypTg5', symObjAddr: 0x4320, symBinAddr: 0xAF60, symSize: 0xD8 } + - { offsetInCU: 0x4E77, offset: 0x7FE33, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4find_9hashValues10_HashTableV6BucketV6bucket_Sb5foundtx_SitSHRzlFSS_Tg5', symObjAddr: 0x43F8, symBinAddr: 0xB038, symSize: 0xE0 } + - { offsetInCU: 0x4EF2, offset: 0x7FEAE, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV4copyyyFSS_ypTg5', symObjAddr: 0x44D8, symBinAddr: 0xB118, symSize: 0x1F4 } + - { offsetInCU: 0x4FAE, offset: 0x7FF6A, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV20_copyOrMoveAndResize8capacity12moveElementsySi_SbtFSS_ypTg5', symObjAddr: 0x46CC, symBinAddr: 0xB30C, symSize: 0x340 } + - { offsetInCU: 0x27, offset: 0x801B7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xC15C, symSize: 0x10 } + - { offsetInCU: 0x62, offset: 0x801F2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCMa', symObjAddr: 0x10, symBinAddr: 0xC16C, symSize: 0x20 } + - { offsetInCU: 0x1AF, offset: 0x8033F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xC15C, symSize: 0x10 } + - { offsetInCU: 0x65, offset: 0x803CE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvgTo', symObjAddr: 0x0, symBinAddr: 0xC18C, symSize: 0x10 } + - { offsetInCU: 0x85, offset: 0x803EE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvgTo', symObjAddr: 0x0, symBinAddr: 0xC18C, symSize: 0x10 } + - { offsetInCU: 0xBB, offset: 0x80424, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvsTo', symObjAddr: 0x10, symBinAddr: 0xC19C, symSize: 0x10 } + - { offsetInCU: 0xDB, offset: 0x80444, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvsTo', symObjAddr: 0x10, symBinAddr: 0xC19C, symSize: 0x10 } + - { offsetInCU: 0x114, offset: 0x8047D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvgTo', symObjAddr: 0x20, symBinAddr: 0xC1AC, symSize: 0x44 } + - { offsetInCU: 0x16C, offset: 0x804D5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvsTo', symObjAddr: 0x64, symBinAddr: 0xC1F0, symSize: 0x48 } + - { offsetInCU: 0x1C7, offset: 0x80530, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvgTo', symObjAddr: 0xAC, symBinAddr: 0xC238, symSize: 0x44 } + - { offsetInCU: 0x21F, offset: 0x80588, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvsTo', symObjAddr: 0xF0, symBinAddr: 0xC27C, symSize: 0x48 } + - { offsetInCU: 0x27A, offset: 0x805E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivgTo', symObjAddr: 0x138, symBinAddr: 0xC2C4, symSize: 0x10 } + - { offsetInCU: 0x29A, offset: 0x80603, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivgTo', symObjAddr: 0x138, symBinAddr: 0xC2C4, symSize: 0x10 } + - { offsetInCU: 0x2D0, offset: 0x80639, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivsTo', symObjAddr: 0x148, symBinAddr: 0xC2D4, symSize: 0x10 } + - { offsetInCU: 0x2F0, offset: 0x80659, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivsTo', symObjAddr: 0x148, symBinAddr: 0xC2D4, symSize: 0x10 } + - { offsetInCU: 0x329, offset: 0x80692, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivgTo', symObjAddr: 0x158, symBinAddr: 0xC2E4, symSize: 0x10 } + - { offsetInCU: 0x349, offset: 0x806B2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivgTo', symObjAddr: 0x158, symBinAddr: 0xC2E4, symSize: 0x10 } + - { offsetInCU: 0x37F, offset: 0x806E8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivsTo', symObjAddr: 0x168, symBinAddr: 0xC2F4, symSize: 0x10 } + - { offsetInCU: 0x39F, offset: 0x80708, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivsTo', symObjAddr: 0x168, symBinAddr: 0xC2F4, symSize: 0x10 } + - { offsetInCU: 0x3D8, offset: 0x80741, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvgTo', symObjAddr: 0x178, symBinAddr: 0xC304, symSize: 0x44 } + - { offsetInCU: 0x430, offset: 0x80799, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvsTo', symObjAddr: 0x1BC, symBinAddr: 0xC348, symSize: 0x48 } + - { offsetInCU: 0x48B, offset: 0x807F4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvgTo', symObjAddr: 0x204, symBinAddr: 0xC390, symSize: 0x10 } + - { offsetInCU: 0x4AB, offset: 0x80814, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvgTo', symObjAddr: 0x204, symBinAddr: 0xC390, symSize: 0x10 } + - { offsetInCU: 0x4E1, offset: 0x8084A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvsTo', symObjAddr: 0x214, symBinAddr: 0xC3A0, symSize: 0x10 } + - { offsetInCU: 0x501, offset: 0x8086A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvsTo', symObjAddr: 0x214, symBinAddr: 0xC3A0, symSize: 0x10 } + - { offsetInCU: 0x53A, offset: 0x808A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvgTo', symObjAddr: 0x224, symBinAddr: 0xC3B0, symSize: 0x10 } + - { offsetInCU: 0x55A, offset: 0x808C3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvgTo', symObjAddr: 0x224, symBinAddr: 0xC3B0, symSize: 0x10 } + - { offsetInCU: 0x590, offset: 0x808F9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvsTo', symObjAddr: 0x234, symBinAddr: 0xC3C0, symSize: 0x10 } + - { offsetInCU: 0x5B0, offset: 0x80919, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvsTo', symObjAddr: 0x234, symBinAddr: 0xC3C0, symSize: 0x10 } + - { offsetInCU: 0x5E9, offset: 0x80952, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvgTo', symObjAddr: 0x244, symBinAddr: 0xC3D0, symSize: 0x48 } + - { offsetInCU: 0x63F, offset: 0x809A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvsTo', symObjAddr: 0x28C, symBinAddr: 0xC418, symSize: 0x40 } + - { offsetInCU: 0x682, offset: 0x809EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13SIZE_OF_FLOATSivgZTo', symObjAddr: 0x2CC, symBinAddr: 0xC458, symSize: 0x8 } + - { offsetInCU: 0x69E, offset: 0x80A07, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13VERTEX_SHADERSSvgZTo', symObjAddr: 0x2D4, symBinAddr: 0xC460, symSize: 0x2C } + - { offsetInCU: 0x6D0, offset: 0x80A39, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvgTo', symObjAddr: 0x300, symBinAddr: 0xC48C, symSize: 0x10 } + - { offsetInCU: 0x6F0, offset: 0x80A59, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvgTo', symObjAddr: 0x300, symBinAddr: 0xC48C, symSize: 0x10 } + - { offsetInCU: 0x728, offset: 0x80A91, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvsTo', symObjAddr: 0x310, symBinAddr: 0xC49C, symSize: 0x34 } + - { offsetInCU: 0x781, offset: 0x80AEA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvgTo', symObjAddr: 0x418, symBinAddr: 0xC5A4, symSize: 0x10 } + - { offsetInCU: 0x7A1, offset: 0x80B0A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvgTo', symObjAddr: 0x418, symBinAddr: 0xC5A4, symSize: 0x10 } + - { offsetInCU: 0x7D7, offset: 0x80B40, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvsTo', symObjAddr: 0x428, symBinAddr: 0xC5B4, symSize: 0x10 } + - { offsetInCU: 0x7F7, offset: 0x80B60, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvsTo', symObjAddr: 0x428, symBinAddr: 0xC5B4, symSize: 0x10 } + - { offsetInCU: 0x846, offset: 0x80BAF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfcTo', symObjAddr: 0x5BC, symBinAddr: 0xC708, symSize: 0x20 } + - { offsetInCU: 0x878, offset: 0x80BE1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyFTo', symObjAddr: 0x720, symBinAddr: 0xC86C, symSize: 0x28 } + - { offsetInCU: 0x8D0, offset: 0x80C39, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTo', symObjAddr: 0x75C, symBinAddr: 0xC8A8, symSize: 0x88 } + - { offsetInCU: 0x934, offset: 0x80C9D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTo', symObjAddr: 0x7E4, symBinAddr: 0xC930, symSize: 0x7C } + - { offsetInCU: 0x9D6, offset: 0x80D3F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyFTo', symObjAddr: 0xC0C, symBinAddr: 0xCD58, symSize: 0x28 } + - { offsetInCU: 0xAC0, offset: 0x80E29, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCMa', symObjAddr: 0x59C, symBinAddr: 0xC6E8, symSize: 0x20 } + - { offsetInCU: 0xB34, offset: 0x80E9D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfETo', symObjAddr: 0xC64, symBinAddr: 0xCDB0, symSize: 0x58 } + - { offsetInCU: 0x123B, offset: 0x815A4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfC', symObjAddr: 0x438, symBinAddr: 0xC5C4, symSize: 0x20 } + - { offsetInCU: 0x1255, offset: 0x815BE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfc', symObjAddr: 0x458, symBinAddr: 0xC5E4, symSize: 0x104 } + - { offsetInCU: 0x1287, offset: 0x815F0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyF', symObjAddr: 0x5DC, symBinAddr: 0xC728, symSize: 0x144 } + - { offsetInCU: 0x1442, offset: 0x817AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtF', symObjAddr: 0x748, symBinAddr: 0xC894, symSize: 0x14 } + - { offsetInCU: 0x14F3, offset: 0x8185C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyF', symObjAddr: 0x860, symBinAddr: 0xC9AC, symSize: 0x3AC } + - { offsetInCU: 0x1863, offset: 0x81BCC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfD', symObjAddr: 0xC34, symBinAddr: 0xCD80, symSize: 0x30 } + - { offsetInCU: 0x194E, offset: 0x81CB7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTf4ddnndnndn_n', symObjAddr: 0xCBC, symBinAddr: 0xCE08, symSize: 0x65C } + - { offsetInCU: 0x214C, offset: 0x824B5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTf4nnnnndn_n', symObjAddr: 0x135C, symBinAddr: 0xD4A8, symSize: 0x6C8 } + - { offsetInCU: 0x10C, offset: 0x82E75, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfcTo', symObjAddr: 0xED4, symBinAddr: 0xEA1C, symSize: 0x68 } + - { offsetInCU: 0x19C, offset: 0x82F05, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCfETo', symObjAddr: 0xF48, symBinAddr: 0xEA90, symSize: 0x10 } + - { offsetInCU: 0x1CB, offset: 0x82F34, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6handleyySo19UIGestureRecognizerCFTo', symObjAddr: 0xF58, symBinAddr: 0xEAA0, symSize: 0x4 } + - { offsetInCU: 0x368, offset: 0x830D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCACycfcTo', symObjAddr: 0x16DC, symBinAddr: 0xF224, symSize: 0x2C } + - { offsetInCU: 0x5D4, offset: 0x8333D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCfETo', symObjAddr: 0x1744, symBinAddr: 0xF28C, symSize: 0x68 } + - { offsetInCU: 0x603, offset: 0x8336C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCMa', symObjAddr: 0x17AC, symBinAddr: 0xF2F4, symSize: 0x20 } + - { offsetInCU: 0x617, offset: 0x83380, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCMa', symObjAddr: 0x17CC, symBinAddr: 0xF314, symSize: 0x20 } + - { offsetInCU: 0x62B, offset: 0x83394, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwCP', symObjAddr: 0x17EC, symBinAddr: 0xF334, symSize: 0x30 } + - { offsetInCU: 0x63F, offset: 0x833A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwxx', symObjAddr: 0x181C, symBinAddr: 0xF364, symSize: 0x8 } + - { offsetInCU: 0x653, offset: 0x833BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwcp', symObjAddr: 0x1824, symBinAddr: 0xF36C, symSize: 0x3C } + - { offsetInCU: 0x667, offset: 0x833D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwca', symObjAddr: 0x1860, symBinAddr: 0xF3A8, symSize: 0x50 } + - { offsetInCU: 0x67B, offset: 0x833E4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwta', symObjAddr: 0x18BC, symBinAddr: 0xF3F8, symSize: 0x40 } + - { offsetInCU: 0x68F, offset: 0x833F8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwet', symObjAddr: 0x18FC, symBinAddr: 0xF438, symSize: 0x48 } + - { offsetInCU: 0x6A3, offset: 0x8340C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwst', symObjAddr: 0x1944, symBinAddr: 0xF480, symSize: 0x40 } + - { offsetInCU: 0x6B7, offset: 0x83420, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVMa', symObjAddr: 0x1984, symBinAddr: 0xF4C0, symSize: 0x10 } + - { offsetInCU: 0x6CB, offset: 0x83434, size: 0x8, addend: 0x0, symName: '_$sypSgWOc', symObjAddr: 0x1994, symBinAddr: 0xF4D0, symSize: 0x48 } + - { offsetInCU: 0x6DF, offset: 0x83448, size: 0x8, addend: 0x0, symName: '_$sSo7UITouchCSo8NSObjectCSH10ObjectiveCWl', symObjAddr: 0x1AA0, symBinAddr: 0xF518, symSize: 0x58 } + - { offsetInCU: 0x6F3, offset: 0x8345C, size: 0x8, addend: 0x0, symName: '_$sSh8IteratorV8_VariantOyx__GSHRzlWOe', symObjAddr: 0x1AF8, symBinAddr: 0xF570, symSize: 0x8 } + - { offsetInCU: 0x761, offset: 0x834CA, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOe', symObjAddr: 0x1DEC, symBinAddr: 0xF864, symSize: 0x10 } + - { offsetInCU: 0xCBB, offset: 0x83A24, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesBegan_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x0, symBinAddr: 0xDB70, symSize: 0x540 } + - { offsetInCU: 0xF57, offset: 0x83CC0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesMoved_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x54C, symBinAddr: 0xE0BC, symSize: 0xE0 } + - { offsetInCU: 0xFD6, offset: 0x83D3F, size: 0x8, addend: 0x0, symName: '_$sSa6remove2atxSi_tF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x6F0, symBinAddr: 0xE24C, symSize: 0x9C } + - { offsetInCU: 0x1069, offset: 0x83DD2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfc', symObjAddr: 0xDCC, symBinAddr: 0xE914, symSize: 0x108 } + - { offsetInCU: 0x11B3, offset: 0x83F1C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6onMove33_044DDF836BDB3B89B481C6F58BB6EF6BLLyySo19UIGestureRecognizerC_ShySo7UITouchCGSgtF', symObjAddr: 0x12D0, symBinAddr: 0xEE18, symSize: 0x40C } + - { offsetInCU: 0x18C9, offset: 0x84632, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNewAByxGyF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x1B00, symBinAddr: 0xF578, symSize: 0x14 } + - { offsetInCU: 0x1968, offset: 0x846D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6canvasAcA9NSCCanvasC_tcfcTf4gn_n', symObjAddr: 0x1B14, symBinAddr: 0xF58C, symSize: 0x1E4 } + - { offsetInCU: 0x27, offset: 0x848AE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xF874, symSize: 0x2C } + - { offsetInCU: 0x4B, offset: 0x848D2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvpZ', symObjAddr: 0x2D8, symBinAddr: 0x116EB68, symSize: 0x0 } + - { offsetInCU: 0x65, offset: 0x848EC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xF874, symSize: 0x2C } + - { offsetInCU: 0x98, offset: 0x8491F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZTo', symObjAddr: 0x178, symBinAddr: 0xF9EC, symSize: 0x40 } + - { offsetInCU: 0x104, offset: 0x8498B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfcTo', symObjAddr: 0x228, symBinAddr: 0xFA9C, symSize: 0x3C } + - { offsetInCU: 0x156, offset: 0x849DD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queue_WZ', symObjAddr: 0x2C, symBinAddr: 0xF8A0, symSize: 0x10C } + - { offsetInCU: 0x181, offset: 0x84A08, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCMa', symObjAddr: 0x208, symBinAddr: 0xFA7C, symSize: 0x20 } + - { offsetInCU: 0x195, offset: 0x84A1C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfETo', symObjAddr: 0x294, symBinAddr: 0xFB08, symSize: 0x4 } + - { offsetInCU: 0x1C0, offset: 0x84A47, size: 0x8, addend: 0x0, symName: '_$sSo17OS_dispatch_queueCMa', symObjAddr: 0x298, symBinAddr: 0xFB0C, symSize: 0x3C } + - { offsetInCU: 0x348, offset: 0x84BCF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZ', symObjAddr: 0x138, symBinAddr: 0xF9AC, symSize: 0x40 } + - { offsetInCU: 0x388, offset: 0x84C0F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfC', symObjAddr: 0x1B8, symBinAddr: 0xFA2C, symSize: 0x20 } + - { offsetInCU: 0x39C, offset: 0x84C23, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfc', symObjAddr: 0x1D8, symBinAddr: 0xFA4C, symSize: 0x30 } + - { offsetInCU: 0x3D8, offset: 0x84C5F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfD', symObjAddr: 0x264, symBinAddr: 0xFAD8, symSize: 0x30 } + - { offsetInCU: 0x2B, offset: 0x84CAD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xFB48, symSize: 0xA4 } + - { offsetInCU: 0x66, offset: 0x84CE8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZTo', symObjAddr: 0xA4, symBinAddr: 0xFBEC, symSize: 0xA4 } + - { offsetInCU: 0xF9, offset: 0x84D7B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZTo', symObjAddr: 0x1D8, symBinAddr: 0xFD20, symSize: 0x110 } + - { offsetInCU: 0x1A2, offset: 0x84E24, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZTo', symObjAddr: 0x30C, symBinAddr: 0xFE54, symSize: 0x28 } + - { offsetInCU: 0x222, offset: 0x84EA4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTo', symObjAddr: 0x338, symBinAddr: 0xFE80, symSize: 0xA0 } + - { offsetInCU: 0x29B, offset: 0x84F1D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZTo', symObjAddr: 0x4D0, symBinAddr: 0x10018, symSize: 0x15C } + - { offsetInCU: 0x330, offset: 0x84FB2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfcTo', symObjAddr: 0x67C, symBinAddr: 0x101C4, symSize: 0x3C } + - { offsetInCU: 0x381, offset: 0x85003, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTf4nnnnnndd_n', symObjAddr: 0x6E8, symBinAddr: 0x10230, symSize: 0x160 } + - { offsetInCU: 0x4DF, offset: 0x85161, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC7getFile33_F00B23A4165DD6ABFCD23C8811C7DF43LLyS2SKFZTf4nd_g', symObjAddr: 0x848, symBinAddr: 0x10390, symSize: 0x2E4 } + - { offsetInCU: 0x5AE, offset: 0x85230, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCMa', symObjAddr: 0xB2C, symBinAddr: 0x10674, symSize: 0x20 } + - { offsetInCU: 0x5C2, offset: 0x85244, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOAEs5ErrorAAWl', symObjAddr: 0xB4C, symBinAddr: 0x10694, symSize: 0x44 } + - { offsetInCU: 0x5D6, offset: 0x85258, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwCP', symObjAddr: 0xB90, symBinAddr: 0x106D8, symSize: 0x2C } + - { offsetInCU: 0x5EA, offset: 0x8526C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwxx', symObjAddr: 0xBBC, symBinAddr: 0x10704, symSize: 0x8 } + - { offsetInCU: 0x5FE, offset: 0x85280, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwca', symObjAddr: 0xBC4, symBinAddr: 0x1070C, symSize: 0x40 } + - { offsetInCU: 0x612, offset: 0x85294, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwta', symObjAddr: 0xC10, symBinAddr: 0x1074C, symSize: 0x30 } + - { offsetInCU: 0x626, offset: 0x852A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwet', symObjAddr: 0xC40, symBinAddr: 0x1077C, symSize: 0x48 } + - { offsetInCU: 0x63A, offset: 0x852BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwst', symObjAddr: 0xC88, symBinAddr: 0x107C4, symSize: 0x3C } + - { offsetInCU: 0x64E, offset: 0x852D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwug', symObjAddr: 0xCC4, symBinAddr: 0x10800, symSize: 0x8 } + - { offsetInCU: 0x662, offset: 0x852E4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwup', symObjAddr: 0xCCC, symBinAddr: 0x10808, symSize: 0x4 } + - { offsetInCU: 0x676, offset: 0x852F8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwui', symObjAddr: 0xCD0, symBinAddr: 0x1080C, symSize: 0x4 } + - { offsetInCU: 0x68A, offset: 0x8530C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOMa', symObjAddr: 0xCD4, symBinAddr: 0x10810, symSize: 0x10 } + - { offsetInCU: 0x712, offset: 0x85394, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP7_domainSSvgTW', symObjAddr: 0x3D8, symBinAddr: 0xFF20, symSize: 0x4 } + - { offsetInCU: 0x72E, offset: 0x853B0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP5_codeSivgTW', symObjAddr: 0x3DC, symBinAddr: 0xFF24, symSize: 0x4 } + - { offsetInCU: 0x74A, offset: 0x853CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP9_userInfoyXlSgvgTW', symObjAddr: 0x3E0, symBinAddr: 0xFF28, symSize: 0x4 } + - { offsetInCU: 0x766, offset: 0x853E8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP19_getEmbeddedNSErroryXlSgyFTW', symObjAddr: 0x3E4, symBinAddr: 0xFF2C, symSize: 0x4 } + - { offsetInCU: 0xA14, offset: 0x85696, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xFB48, symSize: 0xA4 } + - { offsetInCU: 0xAAA, offset: 0x8572C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZ', symObjAddr: 0x148, symBinAddr: 0xFC90, symSize: 0x90 } + - { offsetInCU: 0xC31, offset: 0x858B3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZ', symObjAddr: 0x2E8, symBinAddr: 0xFE30, symSize: 0x24 } + - { offsetInCU: 0xC7B, offset: 0x858FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZ', symObjAddr: 0x334, symBinAddr: 0xFE7C, symSize: 0x4 } + - { offsetInCU: 0xC9D, offset: 0x8591F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZ', symObjAddr: 0x3E8, symBinAddr: 0xFF30, symSize: 0xE8 } + - { offsetInCU: 0xD4D, offset: 0x859CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfC', symObjAddr: 0x62C, symBinAddr: 0x10174, symSize: 0x20 } + - { offsetInCU: 0xD61, offset: 0x859E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfc', symObjAddr: 0x64C, symBinAddr: 0x10194, symSize: 0x30 } + - { offsetInCU: 0xD97, offset: 0x85A19, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCfD', symObjAddr: 0x6B8, symBinAddr: 0x10200, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0x85B32, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x10824, symSize: 0x4 } + - { offsetInCU: 0x71, offset: 0x85B7C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x4, symBinAddr: 0x10828, symSize: 0x70 } + - { offsetInCU: 0xF6, offset: 0x85C01, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x78, symBinAddr: 0x1089C, symSize: 0x50 } + - { offsetInCU: 0x191, offset: 0x85C9C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0xCC, symBinAddr: 0x108F0, symSize: 0x68 } + - { offsetInCU: 0x254, offset: 0x85D5F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x138, symBinAddr: 0x1095C, symSize: 0x98 } + - { offsetInCU: 0x323, offset: 0x85E2E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfcTo', symObjAddr: 0x220, symBinAddr: 0x10A44, symSize: 0x3C } + - { offsetInCU: 0x375, offset: 0x85E80, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCMa', symObjAddr: 0x28C, symBinAddr: 0x10AB0, symSize: 0x20 } + - { offsetInCU: 0x4E5, offset: 0x85FF0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x10824, symSize: 0x4 } + - { offsetInCU: 0x51D, offset: 0x86028, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x10824, symSize: 0x4 } + - { offsetInCU: 0x588, offset: 0x86093, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0x10898, symSize: 0x4 } + - { offsetInCU: 0x5C8, offset: 0x860D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0x10898, symSize: 0x4 } + - { offsetInCU: 0x62A, offset: 0x86135, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xC8, symBinAddr: 0x108EC, symSize: 0x4 } + - { offsetInCU: 0x67C, offset: 0x86187, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xC8, symBinAddr: 0x108EC, symSize: 0x4 } + - { offsetInCU: 0x6F1, offset: 0x861FC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x134, symBinAddr: 0x10958, symSize: 0x4 } + - { offsetInCU: 0x767, offset: 0x86272, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x134, symBinAddr: 0x10958, symSize: 0x4 } + - { offsetInCU: 0x805, offset: 0x86310, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfC', symObjAddr: 0x1D0, symBinAddr: 0x109F4, symSize: 0x20 } + - { offsetInCU: 0x819, offset: 0x86324, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfc', symObjAddr: 0x1F0, symBinAddr: 0x10A14, symSize: 0x30 } + - { offsetInCU: 0x84F, offset: 0x8635A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCfD', symObjAddr: 0x25C, symBinAddr: 0x10A80, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0x863A4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x10AD0, symSize: 0x14 } + - { offsetInCU: 0xA9, offset: 0x86426, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x14, symBinAddr: 0x10AE4, symSize: 0x38 } + - { offsetInCU: 0x1A2, offset: 0x8651F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x68, symBinAddr: 0x10B38, symSize: 0x40 } + - { offsetInCU: 0x284, offset: 0x86601, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfcTo', symObjAddr: 0x118, symBinAddr: 0x10BE8, symSize: 0x3C } + - { offsetInCU: 0x2D6, offset: 0x86653, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCMa', symObjAddr: 0xF8, symBinAddr: 0x10BC8, symSize: 0x20 } + - { offsetInCU: 0x480, offset: 0x867FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x10AD0, symSize: 0x14 } + - { offsetInCU: 0x5C4, offset: 0x86941, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x4C, symBinAddr: 0x10B1C, symSize: 0x1C } + - { offsetInCU: 0x6FA, offset: 0x86A77, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfC', symObjAddr: 0xA8, symBinAddr: 0x10B78, symSize: 0x20 } + - { offsetInCU: 0x70E, offset: 0x86A8B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfc', symObjAddr: 0xC8, symBinAddr: 0x10B98, symSize: 0x30 } + - { offsetInCU: 0x744, offset: 0x86AC1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCfD', symObjAddr: 0x154, symBinAddr: 0x10C24, symSize: 0x30 } + - { offsetInCU: 0x61, offset: 0x86B45, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0x10C58, symSize: 0x10 } + - { offsetInCU: 0x81, offset: 0x86B65, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0x10C58, symSize: 0x10 } + - { offsetInCU: 0xB7, offset: 0x86B9B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0x10C68, symSize: 0x10 } + - { offsetInCU: 0xD7, offset: 0x86BBB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0x10C68, symSize: 0x10 } + - { offsetInCU: 0x110, offset: 0x86BF4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvgTo', symObjAddr: 0x24, symBinAddr: 0x10C78, symSize: 0x48 } + - { offsetInCU: 0x168, offset: 0x86C4C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvsTo', symObjAddr: 0xB4, symBinAddr: 0x10D08, symSize: 0x50 } + - { offsetInCU: 0x1C3, offset: 0x86CA7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0x10D58, symSize: 0x10 } + - { offsetInCU: 0x1E3, offset: 0x86CC7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0x10D58, symSize: 0x10 } + - { offsetInCU: 0x219, offset: 0x86CFD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0x10D68, symSize: 0x10 } + - { offsetInCU: 0x239, offset: 0x86D1D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0x10D68, symSize: 0x10 } + - { offsetInCU: 0x272, offset: 0x86D56, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfcTo', symObjAddr: 0x1B0, symBinAddr: 0x10E04, symSize: 0x78 } + - { offsetInCU: 0x2C8, offset: 0x86DAC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x2D4, symBinAddr: 0x10F28, symSize: 0xB0 } + - { offsetInCU: 0x32A, offset: 0x86E0E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x43C, symBinAddr: 0x11090, symSize: 0x28 } + - { offsetInCU: 0x35C, offset: 0x86E40, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC12bindDrawableyyFTo', symObjAddr: 0x4E0, symBinAddr: 0x110B8, symSize: 0xA0 } + - { offsetInCU: 0x3DD, offset: 0x86EC1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC14deleteDrawableyyFTo', symObjAddr: 0x5BC, symBinAddr: 0x11158, symSize: 0x60 } + - { offsetInCU: 0x44D, offset: 0x86F31, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTo', symObjAddr: 0x620, symBinAddr: 0x111BC, symSize: 0x4C } + - { offsetInCU: 0x4BF, offset: 0x86FA3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfcTo', symObjAddr: 0x70C, symBinAddr: 0x112A8, symSize: 0x34 } + - { offsetInCU: 0x533, offset: 0x87017, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCMa', symObjAddr: 0x190, symBinAddr: 0x10DE4, symSize: 0x20 } + - { offsetInCU: 0x55D, offset: 0x87041, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCfETo', symObjAddr: 0x74C, symBinAddr: 0x112E8, symSize: 0x10 } + - { offsetInCU: 0x65B, offset: 0x8713F, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VFTo', symObjAddr: 0xA08, symBinAddr: 0x115A4, symSize: 0x74 } + - { offsetInCU: 0x699, offset: 0x8717D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA7C, symBinAddr: 0x11618, symSize: 0x10 } + - { offsetInCU: 0x6B9, offset: 0x8719D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA7C, symBinAddr: 0x11618, symSize: 0x10 } + - { offsetInCU: 0x6EF, offset: 0x871D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA8C, symBinAddr: 0x11628, symSize: 0x10 } + - { offsetInCU: 0x70F, offset: 0x871F3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA8C, symBinAddr: 0x11628, symSize: 0x10 } + - { offsetInCU: 0x748, offset: 0x8722C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvgTo', symObjAddr: 0xA9C, symBinAddr: 0x11638, symSize: 0x20 } + - { offsetInCU: 0x7A0, offset: 0x87284, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvsTo', symObjAddr: 0xABC, symBinAddr: 0x11658, symSize: 0x14 } + - { offsetInCU: 0x7FB, offset: 0x872DF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvgTo', symObjAddr: 0xAD0, symBinAddr: 0x1166C, symSize: 0x44 } + - { offsetInCU: 0x853, offset: 0x87337, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvsTo', symObjAddr: 0xB58, symBinAddr: 0x116F4, symSize: 0x48 } + - { offsetInCU: 0x8E8, offset: 0x873CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfcTo', symObjAddr: 0xCBC, symBinAddr: 0x11858, symSize: 0x78 } + - { offsetInCU: 0x93E, offset: 0x87422, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0xE34, symBinAddr: 0x119D0, symSize: 0xB0 } + - { offsetInCU: 0x9A0, offset: 0x87484, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0xF90, symBinAddr: 0x11B2C, symSize: 0x28 } + - { offsetInCU: 0x9D2, offset: 0x874B6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC11deviceScaleSfyFTo', symObjAddr: 0xFB8, symBinAddr: 0x11B54, symSize: 0xB8 } + - { offsetInCU: 0xA53, offset: 0x87537, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTo', symObjAddr: 0x1074, symBinAddr: 0x11C0C, symSize: 0x28 } + - { offsetInCU: 0xAB1, offset: 0x87595, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCfETo', symObjAddr: 0x10D8, symBinAddr: 0x11C70, symSize: 0x10 } + - { offsetInCU: 0xC63, offset: 0x87747, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfC12CanvasNative15NSCTouchHandlerC7PointerV_Tgm5', symObjAddr: 0x130C, symBinAddr: 0x11DF0, symSize: 0x80 } + - { offsetInCU: 0xCE6, offset: 0x877CA, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCs5UInt8V_Tgm5', symObjAddr: 0x140C, symBinAddr: 0x11E70, symSize: 0x6C } + - { offsetInCU: 0xD6A, offset: 0x8784E, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOy', symObjAddr: 0x1630, symBinAddr: 0x12094, symSize: 0x44 } + - { offsetInCU: 0xD7E, offset: 0x87862, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOe', symObjAddr: 0x1674, symBinAddr: 0x120D8, symSize: 0x44 } + - { offsetInCU: 0xD92, offset: 0x87876, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCMa', symObjAddr: 0x16B8, symBinAddr: 0x1211C, symSize: 0x20 } + - { offsetInCU: 0xE6C, offset: 0x87950, size: 0x8, addend: 0x0, symName: '_$sSaySayxGqd__c7ElementQyd__RszSTRd__lufCs5UInt8V_10Foundation4DataVTgm5Tf4g_n', symObjAddr: 0x14FC, symBinAddr: 0x11F60, symSize: 0x124 } + - { offsetInCU: 0x112B, offset: 0x87C0F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvg', symObjAddr: 0x6C, symBinAddr: 0x10CC0, symSize: 0x48 } + - { offsetInCU: 0x11A8, offset: 0x87C8C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfc', symObjAddr: 0x124, symBinAddr: 0x10D78, symSize: 0x6C } + - { offsetInCU: 0x11EF, offset: 0x87CD3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0x228, symBinAddr: 0x10E7C, symSize: 0xAC } + - { offsetInCU: 0x1253, offset: 0x87D37, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x384, symBinAddr: 0x10FD8, symSize: 0xB8 } + - { offsetInCU: 0x12DE, offset: 0x87DC2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtF', symObjAddr: 0x61C, symBinAddr: 0x111B8, symSize: 0x4 } + - { offsetInCU: 0x12FF, offset: 0x87DE3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfC', symObjAddr: 0x66C, symBinAddr: 0x11208, symSize: 0x74 } + - { offsetInCU: 0x1313, offset: 0x87DF7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfc', symObjAddr: 0x6E0, symBinAddr: 0x1127C, symSize: 0x2C } + - { offsetInCU: 0x142C, offset: 0x87F10, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VF', symObjAddr: 0x75C, symBinAddr: 0x112F8, symSize: 0x2AC } + - { offsetInCU: 0x17D6, offset: 0x882BA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvg', symObjAddr: 0xB14, symBinAddr: 0x116B0, symSize: 0x44 } + - { offsetInCU: 0x1815, offset: 0x882F9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvs', symObjAddr: 0xBA0, symBinAddr: 0x1173C, symSize: 0x48 } + - { offsetInCU: 0x183A, offset: 0x8831E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM', symObjAddr: 0xBE8, symBinAddr: 0x11784, symSize: 0x44 } + - { offsetInCU: 0x185F, offset: 0x88343, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM.resume.0', symObjAddr: 0xC2C, symBinAddr: 0x117C8, symSize: 0x4 } + - { offsetInCU: 0x1886, offset: 0x8836A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfC', symObjAddr: 0xC30, symBinAddr: 0x117CC, symSize: 0x20 } + - { offsetInCU: 0x189A, offset: 0x8837E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfc', symObjAddr: 0xC50, symBinAddr: 0x117EC, symSize: 0x6C } + - { offsetInCU: 0x18E1, offset: 0x883C5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0xD88, symBinAddr: 0x11924, symSize: 0xAC } + - { offsetInCU: 0x1940, offset: 0x88424, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0xEE4, symBinAddr: 0x11A80, symSize: 0xAC } + - { offsetInCU: 0x19DE, offset: 0x884C2, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x10E8, symBinAddr: 0x11C80, symSize: 0xBC } + - { offsetInCU: 0x1AC0, offset: 0x885A4, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFs5UInt8V_Tg5', symObjAddr: 0x1258, symBinAddr: 0x11D3C, symSize: 0xB4 } + - { offsetInCU: 0x1BCC, offset: 0x886B0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTf4ddn_n', symObjAddr: 0x1478, symBinAddr: 0x11EDC, symSize: 0x84 } + - { offsetInCU: 0x1CC5, offset: 0x887A9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTf4dn_n', symObjAddr: 0x16D8, symBinAddr: 0x1213C, symSize: 0x360 } + - { offsetInCU: 0x4F, offset: 0x88BE7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LLSo012OS_dispatch_E0CvpZ', symObjAddr: 0x980, symBinAddr: 0x116ECB0, symSize: 0x0 } + - { offsetInCU: 0x5D, offset: 0x88BF5, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x12688, symSize: 0x2C } + - { offsetInCU: 0x75, offset: 0x88C0D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LL_WZ', symObjAddr: 0x2C, symBinAddr: 0x126B4, symSize: 0x10C } + - { offsetInCU: 0xBC, offset: 0x88C54, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0x13C, symBinAddr: 0x127C4, symSize: 0x44 } + - { offsetInCU: 0x132, offset: 0x88CCA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTo', symObjAddr: 0x3E4, symBinAddr: 0x12A6C, symSize: 0x80 } + - { offsetInCU: 0x191, offset: 0x88D29, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfcTo', symObjAddr: 0x4B4, symBinAddr: 0x12B3C, symSize: 0x3C } + - { offsetInCU: 0x1E2, offset: 0x88D7A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTf4nnnd_n', symObjAddr: 0x524, symBinAddr: 0x12BAC, symSize: 0x214 } + - { offsetInCU: 0x261, offset: 0x88DF9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfETo', symObjAddr: 0x520, symBinAddr: 0x12BA8, symSize: 0x4 } + - { offsetInCU: 0x29D, offset: 0x88E35, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCMa', symObjAddr: 0x738, symBinAddr: 0x12DC0, symSize: 0x20 } + - { offsetInCU: 0x2BC, offset: 0x88E54, size: 0x8, addend: 0x0, symName: '_$s10ObjectiveC8ObjCBoolVIeyBy_SbIegy_TRTA', symObjAddr: 0x77C, symBinAddr: 0x12E04, symSize: 0x14 } + - { offsetInCU: 0x2E5, offset: 0x88E7D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_TA', symObjAddr: 0x7BC, symBinAddr: 0x12E44, symSize: 0xC } + - { offsetInCU: 0x2F9, offset: 0x88E91, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x7C8, symBinAddr: 0x12E50, symSize: 0x10 } + - { offsetInCU: 0x30D, offset: 0x88EA5, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x7D8, symBinAddr: 0x12E60, symSize: 0x8 } + - { offsetInCU: 0x321, offset: 0x88EB9, size: 0x8, addend: 0x0, symName: '_$sSay8Dispatch0A13WorkItemFlagsVGMa', symObjAddr: 0x860, symBinAddr: 0x12EA8, symSize: 0x54 } + - { offsetInCU: 0x335, offset: 0x88ECD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0x8F0, symBinAddr: 0x12EFC, symSize: 0x24 } + - { offsetInCU: 0x369, offset: 0x88F01, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU_TA', symObjAddr: 0x938, symBinAddr: 0x12F44, symSize: 0x24 } + - { offsetInCU: 0x4FE, offset: 0x89096, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x127C0, symSize: 0x4 } + - { offsetInCU: 0x52C, offset: 0x890C4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x127C0, symSize: 0x4 } + - { offsetInCU: 0x58B, offset: 0x89123, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZ', symObjAddr: 0x180, symBinAddr: 0x12808, symSize: 0x4 } + - { offsetInCU: 0x59F, offset: 0x89137, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_', symObjAddr: 0x184, symBinAddr: 0x1280C, symSize: 0x260 } + - { offsetInCU: 0x678, offset: 0x89210, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfC', symObjAddr: 0x464, symBinAddr: 0x12AEC, symSize: 0x20 } + - { offsetInCU: 0x68C, offset: 0x89224, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfc', symObjAddr: 0x484, symBinAddr: 0x12B0C, symSize: 0x30 } + - { offsetInCU: 0x6C2, offset: 0x8925A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfD', symObjAddr: 0x4F0, symBinAddr: 0x12B78, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0x89300, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x12F7C, symSize: 0x20 } + - { offsetInCU: 0x77, offset: 0x89350, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfcTo', symObjAddr: 0x70, symBinAddr: 0x12FEC, symSize: 0x3C } + - { offsetInCU: 0xC9, offset: 0x893A2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCMa', symObjAddr: 0x50, symBinAddr: 0x12FCC, symSize: 0x20 } + - { offsetInCU: 0x214, offset: 0x894ED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x12F7C, symSize: 0x20 } + - { offsetInCU: 0x228, offset: 0x89501, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfc', symObjAddr: 0x20, symBinAddr: 0x12F9C, symSize: 0x30 } + - { offsetInCU: 0x264, offset: 0x8953D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCfD', symObjAddr: 0xAC, symBinAddr: 0x13028, symSize: 0x30 } + - { offsetInCU: 0x26, offset: 0x89586, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x33B96C, symSize: 0x265C } + - { offsetInCU: 0x40, offset: 0x895A0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9DE0, symBinAddr: 0xA372E0, symSize: 0x0 } + - { offsetInCU: 0x92, offset: 0x895F2, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFDE0, symBinAddr: 0xA3D2E0, symSize: 0x0 } + - { offsetInCU: 0xF6, offset: 0x89656, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFE08, symBinAddr: 0xA3D308, symSize: 0x0 } + - { offsetInCU: 0x10C, offset: 0x8966C, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x10210, symBinAddr: 0xA3D710, symSize: 0x0 } + - { offsetInCU: 0x123, offset: 0x89683, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFE50, symBinAddr: 0xA3D350, symSize: 0x0 } + - { offsetInCU: 0x9C2, offset: 0x89F22, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x33B96C, symSize: 0x265C } + - { offsetInCU: 0x45CD, offset: 0x8DB2D, size: 0x8, addend: 0x0, symName: _fe_frombytes, symObjAddr: 0x265C, symBinAddr: 0x33DFC8, symSize: 0x134 } + - { offsetInCU: 0x46F3, offset: 0x8DC53, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x9918, symBinAddr: 0x345284, symSize: 0x21C } + - { offsetInCU: 0x4922, offset: 0x8DE82, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4FDC, symBinAddr: 0x340948, symSize: 0x1B8 } + - { offsetInCU: 0x530F, offset: 0x8E86F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x2790, symBinAddr: 0x33E0FC, symSize: 0x5BC } + - { offsetInCU: 0x5F72, offset: 0x8F4D2, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2D4C, symBinAddr: 0x33E6B8, symSize: 0x7F8 } + - { offsetInCU: 0x642A, offset: 0x8F98A, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3544, symBinAddr: 0x33EEB0, symSize: 0x208 } + - { offsetInCU: 0x69F8, offset: 0x8FF58, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x374C, symBinAddr: 0x33F0B8, symSize: 0x7B0 } + - { offsetInCU: 0x77D8, offset: 0x90D38, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3EFC, symBinAddr: 0x33F868, symSize: 0x634 } + - { offsetInCU: 0x8199, offset: 0x916F9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x4530, symBinAddr: 0x33FE9C, symSize: 0xAAC } + - { offsetInCU: 0x956A, offset: 0x92ACA, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x5298, symBinAddr: 0x340C04, symSize: 0x23F8 } + - { offsetInCU: 0xCABB, offset: 0x9601B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x5194, symBinAddr: 0x340B00, symSize: 0x104 } + - { offsetInCU: 0xCD03, offset: 0x96263, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x7690, symBinAddr: 0x342FFC, symSize: 0x30 } + - { offsetInCU: 0xCDF4, offset: 0x96354, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x76C0, symBinAddr: 0x34302C, symSize: 0x58 } + - { offsetInCU: 0xCE69, offset: 0x963C9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7718, symBinAddr: 0x343084, symSize: 0x4 } + - { offsetInCU: 0xCEB1, offset: 0x96411, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7718, symBinAddr: 0x343084, symSize: 0x4 } + - { offsetInCU: 0xCEE0, offset: 0x96440, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7718, symBinAddr: 0x343084, symSize: 0x4 } + - { offsetInCU: 0xCF04, offset: 0x96464, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x771C, symBinAddr: 0x343088, symSize: 0x8C } + - { offsetInCU: 0xD039, offset: 0x96599, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x77A8, symBinAddr: 0x343114, symSize: 0x4 } + - { offsetInCU: 0xD072, offset: 0x965D2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x77A8, symBinAddr: 0x343114, symSize: 0x4 } + - { offsetInCU: 0xD30B, offset: 0x9686B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x77AC, symBinAddr: 0x343118, symSize: 0x1598 } + - { offsetInCU: 0x10654, offset: 0x99BB4, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x9B34, symBinAddr: 0x3454A0, symSize: 0x218 } + - { offsetInCU: 0x10C86, offset: 0x9A1E6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8D44, symBinAddr: 0x3446B0, symSize: 0x20 } + - { offsetInCU: 0x11123, offset: 0x9A683, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8D64, symBinAddr: 0x3446D0, symSize: 0xBB4 } + - { offsetInCU: 0x26, offset: 0x9B466, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x3456B8, symSize: 0x1F4 } + - { offsetInCU: 0x1D2, offset: 0x9B612, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x3456B8, symSize: 0x1F4 } + - { offsetInCU: 0x26, offset: 0x9B8AD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x3458AC, symSize: 0x3C } + - { offsetInCU: 0x34, offset: 0x9B8BB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x3458AC, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0x9B9CB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x3458E8, symSize: 0x98 } + - { offsetInCU: 0x34, offset: 0x9B9D9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x3458E8, symSize: 0x98 } + - { offsetInCU: 0x86, offset: 0x9BB3C, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1100, symBinAddr: 0xA3D7C0, symSize: 0x0 } + - { offsetInCU: 0xB8, offset: 0x9BB6E, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1090, symBinAddr: 0xA3D750, symSize: 0x0 } + - { offsetInCU: 0xDA, offset: 0x9BB90, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x10C0, symBinAddr: 0xA3D780, symSize: 0x0 } + - { offsetInCU: 0xF0, offset: 0x9BBA6, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x10F0, symBinAddr: 0xA3D7B0, symSize: 0x0 } + - { offsetInCU: 0x3B7, offset: 0x9BE6D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x345980, symSize: 0x18 } + - { offsetInCU: 0x3FB, offset: 0x9BEB1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x345980, symSize: 0x18 } + - { offsetInCU: 0x594, offset: 0x9C04A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0x345998, symSize: 0x18 } + - { offsetInCU: 0x63F, offset: 0x9C0F5, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0x3459B0, symSize: 0x320 } + - { offsetInCU: 0x1199, offset: 0x9CC4F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x5B0, symBinAddr: 0x345CD0, symSize: 0xAC } + - { offsetInCU: 0x148F, offset: 0x9CF45, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x65C, symBinAddr: 0x345D7C, symSize: 0x500 } + - { offsetInCU: 0x268C, offset: 0x9E142, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB5C, symBinAddr: 0x34627C, symSize: 0x2C8 } + - { offsetInCU: 0x2CDB, offset: 0x9E791, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xE24, symBinAddr: 0x346544, symSize: 0xF4 } + - { offsetInCU: 0x2EED, offset: 0x9E9A3, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xF18, symBinAddr: 0x346638, symSize: 0x168 } + - { offsetInCU: 0x26, offset: 0x9ED08, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x3467A0, symSize: 0x38 } + - { offsetInCU: 0xFA, offset: 0x9EDDC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x3467A0, symSize: 0x38 } + - { offsetInCU: 0x12C, offset: 0x9EE0E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x3467A0, symSize: 0x38 } + - { offsetInCU: 0x199, offset: 0x9EE7B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x3467D8, symSize: 0x3C } + - { offsetInCU: 0x1F3, offset: 0x9EED5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x3467D8, symSize: 0x3C } + - { offsetInCU: 0x31B, offset: 0x9EFFD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0x346814, symSize: 0x5C } + - { offsetInCU: 0x517, offset: 0x9F1F9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0x346870, symSize: 0x1C } + - { offsetInCU: 0x636, offset: 0x9F318, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0x34688C, symSize: 0x54 } + - { offsetInCU: 0x6D9, offset: 0x9F3BB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0x3468E0, symSize: 0x4C } + - { offsetInCU: 0x8A7, offset: 0x9F589, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x34692C, symSize: 0xA8 } + - { offsetInCU: 0x90B, offset: 0x9F5ED, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x34692C, symSize: 0xA8 } + - { offsetInCU: 0xBAA, offset: 0x9F88C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0x3469D4, symSize: 0x110 } + - { offsetInCU: 0xC4C, offset: 0x9F92E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0x3469D4, symSize: 0x110 } + - { offsetInCU: 0xEDE, offset: 0x9FBC0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x344, symBinAddr: 0x346AE4, symSize: 0xB0 } + - { offsetInCU: 0xF5E, offset: 0x9FC40, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x344, symBinAddr: 0x346AE4, symSize: 0xB0 } + - { offsetInCU: 0x10E1, offset: 0x9FDC3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x3F4, symBinAddr: 0x346B94, symSize: 0x178 } + - { offsetInCU: 0x13AB, offset: 0xA008D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x56C, symBinAddr: 0x346D0C, symSize: 0x1F4 } + - { offsetInCU: 0x1500, offset: 0xA01E2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x760, symBinAddr: 0x346F00, symSize: 0x18 } + - { offsetInCU: 0x1567, offset: 0xA0249, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x778, symBinAddr: 0x346F18, symSize: 0xC } + - { offsetInCU: 0x15A0, offset: 0xA0282, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x784, symBinAddr: 0x346F24, symSize: 0x8 } + - { offsetInCU: 0x1624, offset: 0xA0306, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x78C, symBinAddr: 0x346F2C, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0xA04B9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x346F68, symSize: 0x170 } + - { offsetInCU: 0x34, offset: 0xA04C7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x346F68, symSize: 0x170 } + - { offsetInCU: 0x34, offset: 0xA05CD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x374, symBinAddr: 0x1175FF0, symSize: 0x0 } + - { offsetInCU: 0x26, offset: 0xA060F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x3470D8, symSize: 0x388 } + - { offsetInCU: 0x76, offset: 0xA065F, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0xA3E000, symSize: 0x0 } + - { offsetInCU: 0xFA, offset: 0xA06E3, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0xA63000, symSize: 0x0 } + - { offsetInCU: 0x35B, offset: 0xA0944, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x3470D8, symSize: 0x388 } + - { offsetInCU: 0xC66, offset: 0xA124F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x388, symBinAddr: 0x347460, symSize: 0x204 } + - { offsetInCU: 0x1171, offset: 0xA175A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x58C, symBinAddr: 0x347664, symSize: 0x1BC } + - { offsetInCU: 0x10, offset: 0xA1B2F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x347820, symSize: 0x1A0 } + - { offsetInCU: 0x50, offset: 0xA1B6F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x347820, symSize: 0x1A0 } + - { offsetInCU: 0x5E, offset: 0xA1B7D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0x3479C0, symSize: 0x60 } + - { offsetInCU: 0x81, offset: 0xA1BA0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0x347A20, symSize: 0x288 } + - { offsetInCU: 0x10, offset: 0xA1B91, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x347CB0, symSize: 0x130 } + - { offsetInCU: 0x48, offset: 0xA1BC9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x347CB0, symSize: 0x130 } + - { offsetInCU: 0x5F, offset: 0xA1BE0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0x347DE0, symSize: 0x70 } + - { offsetInCU: 0x75, offset: 0xA1BF6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0x347E50, symSize: 0x160 } + - { offsetInCU: 0x7A, offset: 0xA1BFB, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0x347FB0, symSize: 0x378 } + - { offsetInCU: 0x10, offset: 0xA1C09, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x348340, symSize: 0x3A0 } + - { offsetInCU: 0x48, offset: 0xA1C41, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x348340, symSize: 0x3A0 } + - { offsetInCU: 0x4C, offset: 0xA1C45, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0x3486E0, symSize: 0x6C0 } + - { offsetInCU: 0x66, offset: 0xA1C5F, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0x348DA0, symSize: 0x1138 } + - { offsetInCU: 0x50, offset: 0xA1CAB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0x34A040, symSize: 0x1180 } + - { offsetInCU: 0x66, offset: 0xA1CC1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0x34B1C0, symSize: 0x1410 } + - { offsetInCU: 0x10, offset: 0xA1CB7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x34C5E0, symSize: 0x240 } + - { offsetInCU: 0x45, offset: 0xA1CEC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x34C5E0, symSize: 0x240 } + - { offsetInCU: 0x4D, offset: 0xA1CF4, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0x34C820, symSize: 0x9E0 } + - { offsetInCU: 0x63, offset: 0xA1D0A, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0x34D200, symSize: 0x650 } + - { offsetInCU: 0x10, offset: 0xA1D19, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x34D860, symSize: 0x40 } + - { offsetInCU: 0x47, offset: 0xA1D50, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x34D860, symSize: 0x40 } + - { offsetInCU: 0x5D, offset: 0xA1D66, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0x34D8A0, symSize: 0x40 } + - { offsetInCU: 0x76, offset: 0xA1D7F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0x34D8E0, symSize: 0x40 } + - { offsetInCU: 0x81, offset: 0xA1D8A, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0x34D920, symSize: 0x1E0 } + - { offsetInCU: 0x97, offset: 0xA1DA0, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0x34DB00, symSize: 0x170 } + - { offsetInCU: 0xAB, offset: 0xA1DB4, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0x34DC70, symSize: 0x50 } + - { offsetInCU: 0xC3, offset: 0xA1DCC, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0x34DCC0, symSize: 0x50 } + - { offsetInCU: 0xD9, offset: 0xA1DE2, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0x34DD10, symSize: 0x50 } + - { offsetInCU: 0xEF, offset: 0xA1DF8, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0x34DD60, symSize: 0x60 } + - { offsetInCU: 0x111, offset: 0xA1E1A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0x34DDC0, symSize: 0x1E0 } + - { offsetInCU: 0x124, offset: 0xA1E2D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0x34DFA0, symSize: 0x360 } + - { offsetInCU: 0x141, offset: 0xA1E4A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0x34E300, symSize: 0x2D0 } + - { offsetInCU: 0x156, offset: 0xA1E5F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0x34E5D0, symSize: 0x2B0 } + - { offsetInCU: 0x170, offset: 0xA1E79, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0x34E880, symSize: 0x250 } + - { offsetInCU: 0x184, offset: 0xA1E8D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0x34EAD0, symSize: 0x60 } + - { offsetInCU: 0x19A, offset: 0xA1EA3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0x34EB30, symSize: 0x44 } + - { offsetInCU: 0x10, offset: 0xA1E99, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x34EB80, symSize: 0xB90 } + - { offsetInCU: 0x4C, offset: 0xA1ED5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x34EB80, symSize: 0xB90 } + - { offsetInCU: 0x62, offset: 0xA1EEB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0x34F710, symSize: 0xB98 } + - { offsetInCU: 0x10, offset: 0xA1EE5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x3502C0, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xA1F26, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x3502C0, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xA1F26, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x351100, symSize: 0x7E0 } + - { offsetInCU: 0x10, offset: 0xA1F31, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x351900, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xA1F72, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x351900, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xA1F72, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x352740, symSize: 0x1F0 } ... diff --git a/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/CanvasNative b/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/CanvasNative index 77b9e09eb..615d0464d 100755 Binary files a/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/CanvasNative and b/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/CanvasNative differ diff --git a/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/canvas_native.h b/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/canvas_native.h index 22391179f..7780cf624 100644 --- a/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/canvas_native.h +++ b/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/canvas_native.h @@ -8,6 +8,16 @@ #include #include +#define CanvasGPUTextureUsageCopySrc (1 << 0) + +#define CanvasGPUTextureUsageCopyDst (1 << 1) + +#define CanvasGPUTextureUsageTextureBinding (1 << 2) + +#define CanvasGPUTextureUsageStorageBinding (1 << 3) + +#define CanvasGPUTextureUsageRenderAttachment (1 << 4) + typedef enum CanvasAddressMode { /** * Clamp the value to the edge of the texture @@ -1731,20 +1741,6 @@ typedef struct CanvasSurfaceCapabilities { uint32_t usages; } CanvasSurfaceCapabilities; -typedef enum CanvasOptionsGPUTextureFormat_Tag { - CanvasOptionsGPUTextureFormatNone, - CanvasOptionsGPUTextureFormatSome, -} CanvasOptionsGPUTextureFormat_Tag; - -typedef struct CanvasOptionsGPUTextureFormat { - CanvasOptionsGPUTextureFormat_Tag tag; - union { - struct { - struct CanvasGPUTextureFormat some; - }; - }; -} CanvasOptionsGPUTextureFormat; - typedef struct CanvasImageSubresourceRange { enum CanvasTextureAspect aspect; uint32_t base_mip_level; @@ -1754,9 +1750,8 @@ typedef struct CanvasImageSubresourceRange { } CanvasImageSubresourceRange; typedef struct CanvasCreateTextureViewDescriptor { - const struct CanvasGPUTexture *texture; const char *label; - struct CanvasOptionsGPUTextureFormat format; + struct CanvasOptionalGPUTextureFormat format; enum CanvasOptionalTextureViewDimension dimension; const struct CanvasImageSubresourceRange *range; } CanvasCreateTextureViewDescriptor; diff --git a/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/_CodeSignature/CodeResources b/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/_CodeSignature/CodeResources index e2314277f..86d9e4ab5 100644 --- a/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/_CodeSignature/CodeResources +++ b/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/_CodeSignature/CodeResources @@ -18,7 +18,7 @@ Headers/canvas_native.h - TCp4raXxKi7M5mSfVnDJ3HBqGoI= + FrSWw+k1QL7lxYQfhSYLNPZEpAk= Info.plist @@ -108,7 +108,7 @@ hash2 - EhvCU38ipoXK/gfvMZ9eQIHJ8kUgxhZO+CNwrQRsiuc= + /sJIUBOB6pLtcqbQaG8iX/5MASV6BmkqsEQ9pVeiAzU= Modules/CanvasNative.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo diff --git a/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative b/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative index 7160238e3..f043d8507 100644 Binary files a/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative and b/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative differ diff --git a/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml b/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml index 97bb571b5..562980fc9 100644 --- a/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml +++ b/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml @@ -2,608 +2,608 @@ triple: 'arm64-apple-darwin' binary-path: '/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/dist/Release-iphonesimulator/CanvasNative.framework/CanvasNative' relocations: - - { offsetInCU: 0x34, offset: 0x77E47, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionString, symObjAddr: 0x0, symBinAddr: 0x963000, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x77E7C, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionNumber, symObjAddr: 0x38, symBinAddr: 0x963038, symSize: 0x0 } - - { offsetInCU: 0x3F, offset: 0x77ED1, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x28, symBinAddr: 0x2F28, symSize: 0xC } - - { offsetInCU: 0x53, offset: 0x77EE5, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x34, symBinAddr: 0x2F34, symSize: 0x4 } - - { offsetInCU: 0x67, offset: 0x77EF9, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x38, symBinAddr: 0x2F38, symSize: 0x20 } - - { offsetInCU: 0x7B, offset: 0x77F0D, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x58, symBinAddr: 0x2F58, symSize: 0x28 } - - { offsetInCU: 0x8F, offset: 0x77F21, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwCP', symObjAddr: 0x94, symBinAddr: 0x2F94, symSize: 0x30 } - - { offsetInCU: 0xA3, offset: 0x77F35, size: 0x8, addend: 0x0, symName: ___swift_memcpy32_8, symObjAddr: 0xC4, symBinAddr: 0x2FC4, symSize: 0xC } - - { offsetInCU: 0xB7, offset: 0x77F49, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwet', symObjAddr: 0xD0, symBinAddr: 0x2FD0, symSize: 0x20 } - - { offsetInCU: 0xCB, offset: 0x77F5D, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwst', symObjAddr: 0xF0, symBinAddr: 0x2FF0, symSize: 0x2C } - - { offsetInCU: 0x4F, offset: 0x78146, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC11_WriteQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2AE8, symBinAddr: 0x115FD00, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x78160, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10_ReadQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2AF0, symBinAddr: 0x115FD08, symSize: 0x0 } - - { offsetInCU: 0x9D, offset: 0x78194, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTo', symObjAddr: 0x4, symBinAddr: 0x3094, symSize: 0x38 } - - { offsetInCU: 0xF3, offset: 0x781EA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x40, symBinAddr: 0x30D0, symSize: 0x70 } - - { offsetInCU: 0x144, offset: 0x7823B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0xB4, symBinAddr: 0x3144, symSize: 0x44 } - - { offsetInCU: 0x19F, offset: 0x78296, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0xFC, symBinAddr: 0x318C, symSize: 0x50 } - - { offsetInCU: 0x204, offset: 0x782FB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0x150, symBinAddr: 0x31E0, symSize: 0x68 } - - { offsetInCU: 0x27D, offset: 0x78374, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x1BC, symBinAddr: 0x324C, symSize: 0x98 } - - { offsetInCU: 0x2DA, offset: 0x783D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x258, symBinAddr: 0x32E8, symSize: 0x14 } - - { offsetInCU: 0x35C, offset: 0x78453, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x270, symBinAddr: 0x3300, symSize: 0x14 } - - { offsetInCU: 0x40B, offset: 0x78502, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZTo', symObjAddr: 0x2C8, symBinAddr: 0x3358, symSize: 0x50 } - - { offsetInCU: 0x4DC, offset: 0x785D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZTo', symObjAddr: 0x364, symBinAddr: 0x33F4, symSize: 0x58 } - - { offsetInCU: 0x5B6, offset: 0x786AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZTo', symObjAddr: 0x404, symBinAddr: 0x3494, symSize: 0x58 } - - { offsetInCU: 0x695, offset: 0x7878C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZTo', symObjAddr: 0x4AC, symBinAddr: 0x353C, symSize: 0x60 } - - { offsetInCU: 0x741, offset: 0x78838, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZTo', symObjAddr: 0x510, symBinAddr: 0x35A0, symSize: 0x8 } - - { offsetInCU: 0x7AA, offset: 0x788A1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZTo', symObjAddr: 0x51C, symBinAddr: 0x35AC, symSize: 0x8 } - - { offsetInCU: 0x801, offset: 0x788F8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZTo', symObjAddr: 0x538, symBinAddr: 0x35C8, symSize: 0x8 } - - { offsetInCU: 0x858, offset: 0x7894F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZTo', symObjAddr: 0x544, symBinAddr: 0x35D4, symSize: 0x8 } - - { offsetInCU: 0x8AF, offset: 0x789A6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZTo', symObjAddr: 0x550, symBinAddr: 0x35E0, symSize: 0x8 } - - { offsetInCU: 0x906, offset: 0x789FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZTo', symObjAddr: 0x55C, symBinAddr: 0x35EC, symSize: 0x8 } - - { offsetInCU: 0x985, offset: 0x78A7C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZTo', symObjAddr: 0x56C, symBinAddr: 0x35FC, symSize: 0x24 } - - { offsetInCU: 0xA36, offset: 0x78B2D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZTo', symObjAddr: 0x594, symBinAddr: 0x3624, symSize: 0x14 } - - { offsetInCU: 0xAA9, offset: 0x78BA0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZTo', symObjAddr: 0x5AC, symBinAddr: 0x363C, symSize: 0x8 } - - { offsetInCU: 0xB00, offset: 0x78BF7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZTo', symObjAddr: 0x60C, symBinAddr: 0x369C, symSize: 0x74 } - - { offsetInCU: 0xB8B, offset: 0x78C82, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTo', symObjAddr: 0x814, symBinAddr: 0x38A4, symSize: 0xA0 } - - { offsetInCU: 0xBDC, offset: 0x78CD3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZTo', symObjAddr: 0xB1C, symBinAddr: 0x3BAC, symSize: 0x98 } - - { offsetInCU: 0xC2D, offset: 0x78D24, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZTo', symObjAddr: 0xE70, symBinAddr: 0x3F00, symSize: 0x98 } - - { offsetInCU: 0xC89, offset: 0x78D80, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTo', symObjAddr: 0x1298, symBinAddr: 0x4328, symSize: 0xD8 } - - { offsetInCU: 0xCD1, offset: 0x78DC8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTo', symObjAddr: 0x1374, symBinAddr: 0x4404, symSize: 0x34 } - - { offsetInCU: 0xD31, offset: 0x78E28, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfcTo', symObjAddr: 0x13F8, symBinAddr: 0x4488, symSize: 0x3C } - - { offsetInCU: 0xD82, offset: 0x78E79, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTf4nd_n', symObjAddr: 0x1468, symBinAddr: 0x44F8, symSize: 0x2AC } - - { offsetInCU: 0xFB6, offset: 0x790AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTf4nnnd_n', symObjAddr: 0x1714, symBinAddr: 0x47A4, symSize: 0x264 } - - { offsetInCU: 0x11B0, offset: 0x792A7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTf4nnd_n', symObjAddr: 0x1978, symBinAddr: 0x4A08, symSize: 0xEC } - - { offsetInCU: 0x12AD, offset: 0x793A4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTf4nnnnd_n', symObjAddr: 0x1A64, symBinAddr: 0x4AF4, symSize: 0x1B4 } - - { offsetInCU: 0x1422, offset: 0x79519, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTf4nnnnnnd_n', symObjAddr: 0x1C18, symBinAddr: 0x4CA8, symSize: 0x1CC } - - { offsetInCU: 0x15B7, offset: 0x796AE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTf4nnnnnnnnnnd_n', symObjAddr: 0x1DE4, symBinAddr: 0x4E74, symSize: 0x1E0 } - - { offsetInCU: 0x17A3, offset: 0x7989A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTf4nnnd_n', symObjAddr: 0x1FC4, symBinAddr: 0x5054, symSize: 0x1B4 } - - { offsetInCU: 0x186D, offset: 0x79964, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTf4nnnnd_n', symObjAddr: 0x231C, symBinAddr: 0x53AC, symSize: 0x1D4 } - - { offsetInCU: 0x194E, offset: 0x79A45, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTf4d_n', symObjAddr: 0x24F0, symBinAddr: 0x5580, symSize: 0x114 } - - { offsetInCU: 0x19F9, offset: 0x79AF0, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TR', symObjAddr: 0x8B4, symBinAddr: 0x3944, symSize: 0x78 } - - { offsetInCU: 0x1A11, offset: 0x79B08, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TR', symObjAddr: 0xBB4, symBinAddr: 0x3C44, symSize: 0x54 } - - { offsetInCU: 0x1A7E, offset: 0x79B75, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfETo', symObjAddr: 0x1464, symBinAddr: 0x44F4, symSize: 0x4 } - - { offsetInCU: 0x1B09, offset: 0x79C00, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCMa', symObjAddr: 0x2604, symBinAddr: 0x5694, symSize: 0x20 } - - { offsetInCU: 0x1B1D, offset: 0x79C14, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TRTA', symObjAddr: 0x2648, symBinAddr: 0x56D8, symSize: 0x8 } - - { offsetInCU: 0x1B3C, offset: 0x79C33, size: 0x8, addend: 0x0, symName: '_$sSo7NSErrorCSg10ObjectiveC8ObjCBoolVIeyByy_ACSbIeggy_TRTA', symObjAddr: 0x2650, symBinAddr: 0x56E0, symSize: 0x18 } - - { offsetInCU: 0x1B65, offset: 0x79C5C, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TRTA', symObjAddr: 0x2668, symBinAddr: 0x56F8, symSize: 0x8 } - - { offsetInCU: 0x1B79, offset: 0x79C70, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCMa', symObjAddr: 0x2670, symBinAddr: 0x5700, symSize: 0x3C } - - { offsetInCU: 0x1B8D, offset: 0x79C84, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_TA', symObjAddr: 0x26F0, symBinAddr: 0x5780, symSize: 0x34 } - - { offsetInCU: 0x1BA1, offset: 0x79C98, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x2724, symBinAddr: 0x57B4, symSize: 0x10 } - - { offsetInCU: 0x1BB5, offset: 0x79CAC, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x2734, symBinAddr: 0x57C4, symSize: 0x8 } - - { offsetInCU: 0x1BC9, offset: 0x79CC0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2760, symBinAddr: 0x57F0, symSize: 0x40 } - - { offsetInCU: 0x1BFD, offset: 0x79CF4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x27E4, symBinAddr: 0x5874, symSize: 0x40 } - - { offsetInCU: 0x1C3B, offset: 0x79D32, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2824, symBinAddr: 0x58B4, symSize: 0x28 } - - { offsetInCU: 0x1C6F, offset: 0x79D66, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x28A4, symBinAddr: 0x5934, symSize: 0x3C } - - { offsetInCU: 0x1CA3, offset: 0x79D9A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x290C, symBinAddr: 0x599C, symSize: 0x30 } - - { offsetInCU: 0x1CDF, offset: 0x79DD6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_TA', symObjAddr: 0x2978, symBinAddr: 0x5A08, symSize: 0x10 } - - { offsetInCU: 0x1CF3, offset: 0x79DEA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2988, symBinAddr: 0x5A18, symSize: 0x40 } - - { offsetInCU: 0x21C0, offset: 0x7A2B7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZ', symObjAddr: 0x0, symBinAddr: 0x3090, symSize: 0x4 } - - { offsetInCU: 0x21DB, offset: 0x7A2D2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x3C, symBinAddr: 0x30CC, symSize: 0x4 } - - { offsetInCU: 0x21F6, offset: 0x7A2ED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0xB0, symBinAddr: 0x3140, symSize: 0x4 } - - { offsetInCU: 0x2217, offset: 0x7A30E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0xF8, symBinAddr: 0x3188, symSize: 0x4 } - - { offsetInCU: 0x2232, offset: 0x7A329, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0x14C, symBinAddr: 0x31DC, symSize: 0x4 } - - { offsetInCU: 0x224D, offset: 0x7A344, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x1B8, symBinAddr: 0x3248, symSize: 0x4 } - - { offsetInCU: 0x2268, offset: 0x7A35F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x254, symBinAddr: 0x32E4, symSize: 0x4 } - - { offsetInCU: 0x22F6, offset: 0x7A3ED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x26C, symBinAddr: 0x32FC, symSize: 0x4 } - - { offsetInCU: 0x2375, offset: 0x7A46C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZ', symObjAddr: 0x284, symBinAddr: 0x3314, symSize: 0x44 } - - { offsetInCU: 0x24B3, offset: 0x7A5AA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZ', symObjAddr: 0x318, symBinAddr: 0x33A8, symSize: 0x4C } - - { offsetInCU: 0x25FC, offset: 0x7A6F3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZ', symObjAddr: 0x3BC, symBinAddr: 0x344C, symSize: 0x48 } - - { offsetInCU: 0x2744, offset: 0x7A83B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZ', symObjAddr: 0x45C, symBinAddr: 0x34EC, symSize: 0x50 } - - { offsetInCU: 0x28A1, offset: 0x7A998, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZ', symObjAddr: 0x50C, symBinAddr: 0x359C, symSize: 0x4 } - - { offsetInCU: 0x2913, offset: 0x7AA0A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZ', symObjAddr: 0x518, symBinAddr: 0x35A8, symSize: 0x4 } - - { offsetInCU: 0x2956, offset: 0x7AA4D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZ', symObjAddr: 0x524, symBinAddr: 0x35B4, symSize: 0x14 } - - { offsetInCU: 0x299B, offset: 0x7AA92, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZ', symObjAddr: 0x540, symBinAddr: 0x35D0, symSize: 0x4 } - - { offsetInCU: 0x29DE, offset: 0x7AAD5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZ', symObjAddr: 0x54C, symBinAddr: 0x35DC, symSize: 0x4 } - - { offsetInCU: 0x2A21, offset: 0x7AB18, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZ', symObjAddr: 0x558, symBinAddr: 0x35E8, symSize: 0x4 } - - { offsetInCU: 0x2A64, offset: 0x7AB5B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZ', symObjAddr: 0x564, symBinAddr: 0x35F4, symSize: 0x8 } - - { offsetInCU: 0x2B4B, offset: 0x7AC42, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ', symObjAddr: 0x590, symBinAddr: 0x3620, symSize: 0x4 } - - { offsetInCU: 0x2BCA, offset: 0x7ACC1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZ', symObjAddr: 0x5A8, symBinAddr: 0x3638, symSize: 0x4 } - - { offsetInCU: 0x2C0D, offset: 0x7AD04, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZ', symObjAddr: 0x5B4, symBinAddr: 0x3644, symSize: 0x58 } - - { offsetInCU: 0x2CCE, offset: 0x7ADC5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZ', symObjAddr: 0x680, symBinAddr: 0x3710, symSize: 0x4 } - - { offsetInCU: 0x2CE2, offset: 0x7ADD9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_', symObjAddr: 0x684, symBinAddr: 0x3714, symSize: 0x190 } - - { offsetInCU: 0x2D82, offset: 0x7AE79, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZ', symObjAddr: 0x92C, symBinAddr: 0x39BC, symSize: 0x2C } - - { offsetInCU: 0x2D96, offset: 0x7AE8D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_', symObjAddr: 0x958, symBinAddr: 0x39E8, symSize: 0x1C4 } - - { offsetInCU: 0x2E80, offset: 0x7AF77, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZ', symObjAddr: 0xC08, symBinAddr: 0x3C98, symSize: 0x2C } - - { offsetInCU: 0x2E94, offset: 0x7AF8B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_', symObjAddr: 0xC34, symBinAddr: 0x3CC4, symSize: 0x23C } - - { offsetInCU: 0x2F48, offset: 0x7B03F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZ', symObjAddr: 0xF08, symBinAddr: 0x3F98, symSize: 0x4 } - - { offsetInCU: 0x2F5C, offset: 0x7B053, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_', symObjAddr: 0xF0C, symBinAddr: 0x3F9C, symSize: 0x38C } - - { offsetInCU: 0x31F3, offset: 0x7B2EA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZ', symObjAddr: 0x1370, symBinAddr: 0x4400, symSize: 0x4 } - - { offsetInCU: 0x320E, offset: 0x7B305, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfC', symObjAddr: 0x13A8, symBinAddr: 0x4438, symSize: 0x20 } - - { offsetInCU: 0x3222, offset: 0x7B319, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfc', symObjAddr: 0x13C8, symBinAddr: 0x4458, symSize: 0x30 } - - { offsetInCU: 0x3258, offset: 0x7B34F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfD', symObjAddr: 0x1434, symBinAddr: 0x44C4, symSize: 0x30 } - - { offsetInCU: 0x4F, offset: 0x7B587, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LLSo7GLKViewCvpZ', symObjAddr: 0x5520, symBinAddr: 0x115FD40, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x7B5A1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15_shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvpZ', symObjAddr: 0x5528, symBinAddr: 0x115FD48, symSize: 0x0 } - - { offsetInCU: 0x83, offset: 0x7B5BB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5storeSo19NSMutableDictionaryCvpZ', symObjAddr: 0x5530, symBinAddr: 0x115FD50, symSize: 0x0 } - - { offsetInCU: 0x9D, offset: 0x7B5D5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LLSo10NSMapTableCySo8NSStringCACGvpZ', symObjAddr: 0x5538, symBinAddr: 0x115FD58, symSize: 0x0 } - - { offsetInCU: 0xAB, offset: 0x7B5E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0x0, symBinAddr: 0x5B40, symSize: 0x40 } - - { offsetInCU: 0xF0, offset: 0x7B628, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5store_WZ', symObjAddr: 0x40, symBinAddr: 0x5B80, symSize: 0x30 } - - { offsetInCU: 0x135, offset: 0x7B66D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0xA8, symBinAddr: 0x5BE8, symSize: 0x40 } - - { offsetInCU: 0x187, offset: 0x7B6BF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x194, symBinAddr: 0x5CD4, symSize: 0x10 } - - { offsetInCU: 0x1A7, offset: 0x7B6DF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x194, symBinAddr: 0x5CD4, symSize: 0x10 } - - { offsetInCU: 0x1DD, offset: 0x7B715, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x1A4, symBinAddr: 0x5CE4, symSize: 0x10 } - - { offsetInCU: 0x1FD, offset: 0x7B735, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x1A4, symBinAddr: 0x5CE4, symSize: 0x10 } - - { offsetInCU: 0x236, offset: 0x7B76E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x1B4, symBinAddr: 0x5CF4, symSize: 0x10 } - - { offsetInCU: 0x256, offset: 0x7B78E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x1B4, symBinAddr: 0x5CF4, symSize: 0x10 } - - { offsetInCU: 0x28C, offset: 0x7B7C4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x1C4, symBinAddr: 0x5D04, symSize: 0x10 } - - { offsetInCU: 0x2AC, offset: 0x7B7E4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x1C4, symBinAddr: 0x5D04, symSize: 0x10 } - - { offsetInCU: 0x2E5, offset: 0x7B81D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvgTo', symObjAddr: 0x29C, symBinAddr: 0x5DDC, symSize: 0x44 } - - { offsetInCU: 0x322, offset: 0x7B85A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvsTo', symObjAddr: 0x324, symBinAddr: 0x5E64, symSize: 0x30 } - - { offsetInCU: 0x3B1, offset: 0x7B8E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvgTo', symObjAddr: 0x578, symBinAddr: 0x60B8, symSize: 0x44 } - - { offsetInCU: 0x409, offset: 0x7B941, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvsTo', symObjAddr: 0x600, symBinAddr: 0x6140, symSize: 0x48 } - - { offsetInCU: 0x464, offset: 0x7B99C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvgTo', symObjAddr: 0x648, symBinAddr: 0x6188, symSize: 0x44 } - - { offsetInCU: 0x4BC, offset: 0x7B9F4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvsTo', symObjAddr: 0x6D0, symBinAddr: 0x6210, symSize: 0x48 } - - { offsetInCU: 0x517, offset: 0x7BA4F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0x718, symBinAddr: 0x6258, symSize: 0x10 } - - { offsetInCU: 0x537, offset: 0x7BA6F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0x718, symBinAddr: 0x6258, symSize: 0x10 } - - { offsetInCU: 0x56D, offset: 0x7BAA5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0x728, symBinAddr: 0x6268, symSize: 0x10 } - - { offsetInCU: 0x58D, offset: 0x7BAC5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0x728, symBinAddr: 0x6268, symSize: 0x10 } - - { offsetInCU: 0x5C6, offset: 0x7BAFE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0x738, symBinAddr: 0x6278, symSize: 0x10 } - - { offsetInCU: 0x5E6, offset: 0x7BB1E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0x738, symBinAddr: 0x6278, symSize: 0x10 } - - { offsetInCU: 0x61E, offset: 0x7BB56, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvsTo', symObjAddr: 0x748, symBinAddr: 0x6288, symSize: 0x34 } - - { offsetInCU: 0x677, offset: 0x7BBAF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x77C, symBinAddr: 0x62BC, symSize: 0x10 } - - { offsetInCU: 0x697, offset: 0x7BBCF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x77C, symBinAddr: 0x62BC, symSize: 0x10 } - - { offsetInCU: 0x6CF, offset: 0x7BC07, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvsTo', symObjAddr: 0x78C, symBinAddr: 0x62CC, symSize: 0x34 } - - { offsetInCU: 0x728, offset: 0x7BC60, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x7C0, symBinAddr: 0x6300, symSize: 0x10 } - - { offsetInCU: 0x748, offset: 0x7BC80, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x7C0, symBinAddr: 0x6300, symSize: 0x10 } - - { offsetInCU: 0x77E, offset: 0x7BCB6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x7D0, symBinAddr: 0x6310, symSize: 0x10 } - - { offsetInCU: 0x79E, offset: 0x7BCD6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x7D0, symBinAddr: 0x6310, symSize: 0x10 } - - { offsetInCU: 0x7D7, offset: 0x7BD0F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvgTo', symObjAddr: 0x7E0, symBinAddr: 0x6320, symSize: 0x10 } - - { offsetInCU: 0x7F7, offset: 0x7BD2F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvgTo', symObjAddr: 0x7E0, symBinAddr: 0x6320, symSize: 0x10 } - - { offsetInCU: 0x82D, offset: 0x7BD65, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvsTo', symObjAddr: 0x7F0, symBinAddr: 0x6330, symSize: 0x10 } - - { offsetInCU: 0x84D, offset: 0x7BD85, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvsTo', symObjAddr: 0x7F0, symBinAddr: 0x6330, symSize: 0x10 } - - { offsetInCU: 0x870, offset: 0x7BDA8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivgTo', symObjAddr: 0x800, symBinAddr: 0x6340, symSize: 0x34 } - - { offsetInCU: 0x8A2, offset: 0x7BDDA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivgTo', symObjAddr: 0x904, symBinAddr: 0x6444, symSize: 0x34 } - - { offsetInCU: 0x8EA, offset: 0x7BE22, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvgTo', symObjAddr: 0xA08, symBinAddr: 0x6548, symSize: 0x20 } - - { offsetInCU: 0x952, offset: 0x7BE8A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvgTo', symObjAddr: 0xA4C, symBinAddr: 0x658C, symSize: 0x20 } - - { offsetInCU: 0x9F1, offset: 0x7BF29, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btFTo', symObjAddr: 0xAB4, symBinAddr: 0x65F4, symSize: 0xC4 } - - { offsetInCU: 0xAB4, offset: 0x7BFEC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VFTo', symObjAddr: 0xD10, symBinAddr: 0x6850, symSize: 0x30 } - - { offsetInCU: 0xB64, offset: 0x7C09C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x15B0, symBinAddr: 0x70F0, symSize: 0xC4 } - - { offsetInCU: 0xBCE, offset: 0x7C106, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtFTo', symObjAddr: 0x18CC, symBinAddr: 0x740C, symSize: 0xB0 } - - { offsetInCU: 0xC0B, offset: 0x7C143, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x1A3C, symBinAddr: 0x757C, symSize: 0xB8 } - - { offsetInCU: 0xC83, offset: 0x7C1BB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbFTo', symObjAddr: 0x1BD8, symBinAddr: 0x7718, symSize: 0x3C } - - { offsetInCU: 0xCB6, offset: 0x7C1EE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1C14, symBinAddr: 0x7754, symSize: 0x10 } - - { offsetInCU: 0xCD6, offset: 0x7C20E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1C14, symBinAddr: 0x7754, symSize: 0x10 } - - { offsetInCU: 0xD10, offset: 0x7C248, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvsTo', symObjAddr: 0x1C24, symBinAddr: 0x7764, symSize: 0x34 } - - { offsetInCU: 0xD6B, offset: 0x7C2A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyFTo', symObjAddr: 0x1CA0, symBinAddr: 0x77E0, symSize: 0x48 } - - { offsetInCU: 0xE05, offset: 0x7C33D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VFTo', symObjAddr: 0x1D34, symBinAddr: 0x7874, symSize: 0x64 } - - { offsetInCU: 0xECA, offset: 0x7C402, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VFTo', symObjAddr: 0x1DF0, symBinAddr: 0x7930, symSize: 0x94 } - - { offsetInCU: 0xF57, offset: 0x7C48F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC23enterBackgroundListeneryycSgvsTo', symObjAddr: 0x1EC4, symBinAddr: 0x7A04, symSize: 0x6C } - - { offsetInCU: 0xFB9, offset: 0x7C4F1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC20becomeActiveListeneryycSgvsTo', symObjAddr: 0x1FD4, symBinAddr: 0x7B14, symSize: 0x6C } - - { offsetInCU: 0x1016, offset: 0x7C54E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvgTo', symObjAddr: 0x2040, symBinAddr: 0x7B80, symSize: 0xB0 } - - { offsetInCU: 0x1068, offset: 0x7C5A0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvsTo', symObjAddr: 0x21C0, symBinAddr: 0x7D00, symSize: 0x94 } - - { offsetInCU: 0x10FA, offset: 0x7C632, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x2E5C, symBinAddr: 0x899C, symSize: 0x28 } - - { offsetInCU: 0x114F, offset: 0x7C687, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x38A4, symBinAddr: 0x93E4, symSize: 0x20 } - - { offsetInCU: 0x1182, offset: 0x7C6BA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x38C4, symBinAddr: 0x9404, symSize: 0x10 } - - { offsetInCU: 0x11A2, offset: 0x7C6DA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x38C4, symBinAddr: 0x9404, symSize: 0x10 } - - { offsetInCU: 0x11DA, offset: 0x7C712, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvsTo', symObjAddr: 0x38D4, symBinAddr: 0x9414, symSize: 0x34 } - - { offsetInCU: 0x1248, offset: 0x7C780, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvgTo', symObjAddr: 0x3988, symBinAddr: 0x94C8, symSize: 0x20 } - - { offsetInCU: 0x12A2, offset: 0x7C7DA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvsTo', symObjAddr: 0x39A8, symBinAddr: 0x94E8, symSize: 0x34 } - - { offsetInCU: 0x1302, offset: 0x7C83A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgFTo', symObjAddr: 0x3A0C, symBinAddr: 0x954C, symSize: 0x34 } - - { offsetInCU: 0x1446, offset: 0x7C97E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFTo', symObjAddr: 0x3D58, symBinAddr: 0x9898, symSize: 0x28 } - - { offsetInCU: 0x1479, offset: 0x7C9B1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfDTo', symObjAddr: 0x4084, symBinAddr: 0x9BC4, symSize: 0x24 } - - { offsetInCU: 0x14B4, offset: 0x7C9EC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTo', symObjAddr: 0x4170, symBinAddr: 0x9CB0, symSize: 0x34 } - - { offsetInCU: 0x14E7, offset: 0x7CA1F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvgZTf4d_n', symObjAddr: 0x4B04, symBinAddr: 0xA644, symSize: 0x298 } - - { offsetInCU: 0x1664, offset: 0x7CB9C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTf4nnd_n', symObjAddr: 0x4E60, symBinAddr: 0xA9A0, symSize: 0xA0 } - - { offsetInCU: 0x18E0, offset: 0x7CE18, size: 0x8, addend: 0x0, symName: '_$sIeg_IeyB_TR', symObjAddr: 0x1E98, symBinAddr: 0x79D8, symSize: 0x2C } - - { offsetInCU: 0x18F8, offset: 0x7CE30, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_So8NSStringCABIeyByy_TR', symObjAddr: 0x2148, symBinAddr: 0x7C88, symSize: 0x78 } - - { offsetInCU: 0x1910, offset: 0x7CE48, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTK', symObjAddr: 0x22B0, symBinAddr: 0x7DF0, symSize: 0x94 } - - { offsetInCU: 0x1948, offset: 0x7CE80, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTk', symObjAddr: 0x2344, symBinAddr: 0x7E84, symSize: 0xB8 } - - { offsetInCU: 0x198A, offset: 0x7CEC2, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TR', symObjAddr: 0x23FC, symBinAddr: 0x7F3C, symSize: 0x6C } - - { offsetInCU: 0x1A3A, offset: 0x7CF72, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfETo', symObjAddr: 0x40A8, symBinAddr: 0x9BE8, symSize: 0xC4 } - - { offsetInCU: 0x1A6A, offset: 0x7CFA2, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOy', symObjAddr: 0x41A4, symBinAddr: 0x9CE4, symSize: 0x10 } - - { offsetInCU: 0x1A7E, offset: 0x7CFB6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCMa', symObjAddr: 0x41B4, symBinAddr: 0x9CF4, symSize: 0x20 } - - { offsetInCU: 0x1A92, offset: 0x7CFCA, size: 0x8, addend: 0x0, symName: '_$ss29getContiguousArrayStorageType3fors01_bcD0CyxGmxm_tlFSo18NSLayoutConstraintC_Tgm5', symObjAddr: 0x41D4, symBinAddr: 0x9D14, symSize: 0x64 } - - { offsetInCU: 0x1C99, offset: 0x7D1D1, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x4D9C, symBinAddr: 0xA8DC, symSize: 0x40 } - - { offsetInCU: 0x1CAD, offset: 0x7D1E5, size: 0x8, addend: 0x0, symName: '_$sypSgWOh', symObjAddr: 0x4DDC, symBinAddr: 0xA91C, symSize: 0x40 } - - { offsetInCU: 0x1CC1, offset: 0x7D1F9, size: 0x8, addend: 0x0, symName: ___swift_project_boxed_opaque_existential_0, symObjAddr: 0x4E1C, symBinAddr: 0xA95C, symSize: 0x24 } - - { offsetInCU: 0x1CD5, offset: 0x7D20D, size: 0x8, addend: 0x0, symName: ___swift_destroy_boxed_opaque_existential_0, symObjAddr: 0x4E40, symBinAddr: 0xA980, symSize: 0x20 } - - { offsetInCU: 0x1CF4, offset: 0x7D22C, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSo19UIGestureRecognizerCIeyByy_SSADIeggg_TRTA', symObjAddr: 0x532C, symBinAddr: 0xAE6C, symSize: 0x48 } - - { offsetInCU: 0x1D1D, offset: 0x7D255, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x5374, symBinAddr: 0xAEB4, symSize: 0x10 } - - { offsetInCU: 0x1D31, offset: 0x7D269, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x5384, symBinAddr: 0xAEC4, symSize: 0x8 } - - { offsetInCU: 0x1D45, offset: 0x7D27D, size: 0x8, addend: 0x0, symName: '_$sIeg_SgWOe', symObjAddr: 0x538C, symBinAddr: 0xAECC, symSize: 0x10 } - - { offsetInCU: 0x1D64, offset: 0x7D29C, size: 0x8, addend: 0x0, symName: '_$sIeyB_Ieg_TRTA', symObjAddr: 0x539C, symBinAddr: 0xAEDC, symSize: 0xC } - - { offsetInCU: 0x1D8D, offset: 0x7D2C5, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TRTA', symObjAddr: 0x53CC, symBinAddr: 0xAF0C, symSize: 0x8 } - - { offsetInCU: 0x1DAC, offset: 0x7D2E4, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SSABytIegnnr_TRTA', symObjAddr: 0x53D4, symBinAddr: 0xAF14, symSize: 0x30 } - - { offsetInCU: 0x1DD5, offset: 0x7D30D, size: 0x8, addend: 0x0, symName: '_$sypWOb', symObjAddr: 0x5404, symBinAddr: 0xAF44, symSize: 0x10 } - - { offsetInCU: 0x1DE9, offset: 0x7D321, size: 0x8, addend: 0x0, symName: '_$sypWOc', symObjAddr: 0x544C, symBinAddr: 0xAF8C, symSize: 0x3C } - - { offsetInCU: 0x206E, offset: 0x7D5A6, size: 0x8, addend: 0x0, symName: '_$sSD17dictionaryLiteralSDyxq_Gx_q_td_tcfCSS_ypTgm5Tf4g_n', symObjAddr: 0x49F4, symBinAddr: 0xA534, symSize: 0x110 } - - { offsetInCU: 0x251C, offset: 0x7DA54, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvg', symObjAddr: 0x2E0, symBinAddr: 0x5E20, symSize: 0x44 } - - { offsetInCU: 0x254F, offset: 0x7DA87, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvs', symObjAddr: 0x354, symBinAddr: 0x5E94, symSize: 0xEC } - - { offsetInCU: 0x259B, offset: 0x7DAD3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM', symObjAddr: 0x440, symBinAddr: 0x5F80, symSize: 0x58 } - - { offsetInCU: 0x25C0, offset: 0x7DAF8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM.resume.0', symObjAddr: 0x498, symBinAddr: 0x5FD8, symSize: 0xE0 } - - { offsetInCU: 0x2601, offset: 0x7DB39, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64Vvg', symObjAddr: 0x5BC, symBinAddr: 0x60FC, symSize: 0x44 } - - { offsetInCU: 0x2659, offset: 0x7DB91, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg', symObjAddr: 0x68C, symBinAddr: 0x61CC, symSize: 0x44 } - - { offsetInCU: 0x27C7, offset: 0x7DCFF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivg', symObjAddr: 0x834, symBinAddr: 0x6374, symSize: 0xD0 } - - { offsetInCU: 0x28EC, offset: 0x7DE24, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivg', symObjAddr: 0x938, symBinAddr: 0x6478, symSize: 0xD0 } - - { offsetInCU: 0x2A32, offset: 0x7DF6A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvg', symObjAddr: 0xA28, symBinAddr: 0x6568, symSize: 0x24 } - - { offsetInCU: 0x2A7A, offset: 0x7DFB2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvg', symObjAddr: 0xA6C, symBinAddr: 0x65AC, symSize: 0x24 } - - { offsetInCU: 0x2AAE, offset: 0x7DFE6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btF', symObjAddr: 0xA90, symBinAddr: 0x65D0, symSize: 0x24 } - - { offsetInCU: 0x2C3C, offset: 0x7E174, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VF', symObjAddr: 0xB78, symBinAddr: 0x66B8, symSize: 0x198 } - - { offsetInCU: 0x302F, offset: 0x7E567, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btF', symObjAddr: 0xD40, symBinAddr: 0x6880, symSize: 0x870 } - - { offsetInCU: 0x3832, offset: 0x7ED6A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtF', symObjAddr: 0x1674, symBinAddr: 0x71B4, symSize: 0x258 } - - { offsetInCU: 0x3C64, offset: 0x7F19C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x197C, symBinAddr: 0x74BC, symSize: 0xC0 } - - { offsetInCU: 0x3CF5, offset: 0x7F22D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbF', symObjAddr: 0x1AF4, symBinAddr: 0x7634, symSize: 0xE4 } - - { offsetInCU: 0x3E50, offset: 0x7F388, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyF', symObjAddr: 0x1C58, symBinAddr: 0x7798, symSize: 0x48 } - - { offsetInCU: 0x3ED6, offset: 0x7F40E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF', symObjAddr: 0x1CE8, symBinAddr: 0x7828, symSize: 0x4C } - - { offsetInCU: 0x3FF7, offset: 0x7F52F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VF', symObjAddr: 0x1D98, symBinAddr: 0x78D8, symSize: 0x58 } - - { offsetInCU: 0x40ED, offset: 0x7F625, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvg', symObjAddr: 0x20F0, symBinAddr: 0x7C30, symSize: 0x58 } - - { offsetInCU: 0x4139, offset: 0x7F671, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvs', symObjAddr: 0x2254, symBinAddr: 0x7D94, symSize: 0x5C } - - { offsetInCU: 0x4162, offset: 0x7F69A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM', symObjAddr: 0x2468, symBinAddr: 0x7FA8, symSize: 0x44 } - - { offsetInCU: 0x4188, offset: 0x7F6C0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM.resume.0', symObjAddr: 0x24AC, symBinAddr: 0x7FEC, symSize: 0x4 } - - { offsetInCU: 0x424A, offset: 0x7F782, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x24B0, symBinAddr: 0x7FF0, symSize: 0x9AC } - - { offsetInCU: 0x444F, offset: 0x7F987, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfC', symObjAddr: 0x2E84, symBinAddr: 0x89C4, symSize: 0x50 } - - { offsetInCU: 0x4478, offset: 0x7F9B0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfc', symObjAddr: 0x2ED4, symBinAddr: 0x8A14, symSize: 0x9D0 } - - { offsetInCU: 0x469E, offset: 0x7FBD6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvW', symObjAddr: 0x3908, symBinAddr: 0x9448, symSize: 0x80 } - - { offsetInCU: 0x4794, offset: 0x7FCCC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgF', symObjAddr: 0x39DC, symBinAddr: 0x951C, symSize: 0x30 } - - { offsetInCU: 0x4832, offset: 0x7FD6A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6resize33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x3A40, symBinAddr: 0x9580, symSize: 0x144 } - - { offsetInCU: 0x4A33, offset: 0x7FF6B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyF', symObjAddr: 0x3B84, symBinAddr: 0x96C4, symSize: 0x1D4 } - - { offsetInCU: 0x4CB0, offset: 0x801E8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfD', symObjAddr: 0x3D80, symBinAddr: 0x98C0, symSize: 0x304 } - - { offsetInCU: 0x4D40, offset: 0x80278, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZ', symObjAddr: 0x416C, symBinAddr: 0x9CAC, symSize: 0x4 } - - { offsetInCU: 0x4D68, offset: 0x802A0, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4findys10_HashTableV6BucketV6bucket_Sb5foundtxSHRzlFSS_Tg5', symObjAddr: 0x4238, symBinAddr: 0x9D78, symSize: 0x64 } - - { offsetInCU: 0x4DC2, offset: 0x802FA, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV7_insert2at3key5valueys10_HashTableV6BucketV_xnq_ntFSS_ypTg5', symObjAddr: 0x429C, symBinAddr: 0x9DDC, symSize: 0x6C } - - { offsetInCU: 0x4E42, offset: 0x8037A, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV12mutatingFind_8isUniques10_HashTableV6BucketV6bucket_Sb5foundtx_SbtFSS_ypTg5', symObjAddr: 0x4308, symBinAddr: 0x9E48, symSize: 0xD8 } - - { offsetInCU: 0x4E7F, offset: 0x803B7, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4find_9hashValues10_HashTableV6BucketV6bucket_Sb5foundtx_SitSHRzlFSS_Tg5', symObjAddr: 0x43E0, symBinAddr: 0x9F20, symSize: 0xE0 } - - { offsetInCU: 0x4EFA, offset: 0x80432, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV4copyyyFSS_ypTg5', symObjAddr: 0x44C0, symBinAddr: 0xA000, symSize: 0x1F4 } - - { offsetInCU: 0x4FB6, offset: 0x804EE, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV20_copyOrMoveAndResize8capacity12moveElementsySi_SbtFSS_ypTg5', symObjAddr: 0x46B4, symBinAddr: 0xA1F4, symSize: 0x340 } - - { offsetInCU: 0x27, offset: 0x8073B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xB02C, symSize: 0x10 } - - { offsetInCU: 0x62, offset: 0x80776, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCMa', symObjAddr: 0x10, symBinAddr: 0xB03C, symSize: 0x20 } - - { offsetInCU: 0x1AF, offset: 0x808C3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xB02C, symSize: 0x10 } - - { offsetInCU: 0x65, offset: 0x80952, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvgTo', symObjAddr: 0x0, symBinAddr: 0xB05C, symSize: 0x10 } - - { offsetInCU: 0x85, offset: 0x80972, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvgTo', symObjAddr: 0x0, symBinAddr: 0xB05C, symSize: 0x10 } - - { offsetInCU: 0xBB, offset: 0x809A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvsTo', symObjAddr: 0x10, symBinAddr: 0xB06C, symSize: 0x10 } - - { offsetInCU: 0xDB, offset: 0x809C8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvsTo', symObjAddr: 0x10, symBinAddr: 0xB06C, symSize: 0x10 } - - { offsetInCU: 0x114, offset: 0x80A01, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvgTo', symObjAddr: 0x20, symBinAddr: 0xB07C, symSize: 0x44 } - - { offsetInCU: 0x16C, offset: 0x80A59, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvsTo', symObjAddr: 0x64, symBinAddr: 0xB0C0, symSize: 0x48 } - - { offsetInCU: 0x1C7, offset: 0x80AB4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvgTo', symObjAddr: 0xAC, symBinAddr: 0xB108, symSize: 0x44 } - - { offsetInCU: 0x21F, offset: 0x80B0C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvsTo', symObjAddr: 0xF0, symBinAddr: 0xB14C, symSize: 0x48 } - - { offsetInCU: 0x27A, offset: 0x80B67, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivgTo', symObjAddr: 0x138, symBinAddr: 0xB194, symSize: 0x10 } - - { offsetInCU: 0x29A, offset: 0x80B87, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivgTo', symObjAddr: 0x138, symBinAddr: 0xB194, symSize: 0x10 } - - { offsetInCU: 0x2D0, offset: 0x80BBD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivsTo', symObjAddr: 0x148, symBinAddr: 0xB1A4, symSize: 0x10 } - - { offsetInCU: 0x2F0, offset: 0x80BDD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivsTo', symObjAddr: 0x148, symBinAddr: 0xB1A4, symSize: 0x10 } - - { offsetInCU: 0x329, offset: 0x80C16, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivgTo', symObjAddr: 0x158, symBinAddr: 0xB1B4, symSize: 0x10 } - - { offsetInCU: 0x349, offset: 0x80C36, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivgTo', symObjAddr: 0x158, symBinAddr: 0xB1B4, symSize: 0x10 } - - { offsetInCU: 0x37F, offset: 0x80C6C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivsTo', symObjAddr: 0x168, symBinAddr: 0xB1C4, symSize: 0x10 } - - { offsetInCU: 0x39F, offset: 0x80C8C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivsTo', symObjAddr: 0x168, symBinAddr: 0xB1C4, symSize: 0x10 } - - { offsetInCU: 0x3D8, offset: 0x80CC5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvgTo', symObjAddr: 0x178, symBinAddr: 0xB1D4, symSize: 0x44 } - - { offsetInCU: 0x430, offset: 0x80D1D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvsTo', symObjAddr: 0x1BC, symBinAddr: 0xB218, symSize: 0x48 } - - { offsetInCU: 0x48B, offset: 0x80D78, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvgTo', symObjAddr: 0x204, symBinAddr: 0xB260, symSize: 0x10 } - - { offsetInCU: 0x4AB, offset: 0x80D98, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvgTo', symObjAddr: 0x204, symBinAddr: 0xB260, symSize: 0x10 } - - { offsetInCU: 0x4E1, offset: 0x80DCE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvsTo', symObjAddr: 0x214, symBinAddr: 0xB270, symSize: 0x10 } - - { offsetInCU: 0x501, offset: 0x80DEE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvsTo', symObjAddr: 0x214, symBinAddr: 0xB270, symSize: 0x10 } - - { offsetInCU: 0x53A, offset: 0x80E27, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvgTo', symObjAddr: 0x224, symBinAddr: 0xB280, symSize: 0x10 } - - { offsetInCU: 0x55A, offset: 0x80E47, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvgTo', symObjAddr: 0x224, symBinAddr: 0xB280, symSize: 0x10 } - - { offsetInCU: 0x590, offset: 0x80E7D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvsTo', symObjAddr: 0x234, symBinAddr: 0xB290, symSize: 0x10 } - - { offsetInCU: 0x5B0, offset: 0x80E9D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvsTo', symObjAddr: 0x234, symBinAddr: 0xB290, symSize: 0x10 } - - { offsetInCU: 0x5E9, offset: 0x80ED6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvgTo', symObjAddr: 0x244, symBinAddr: 0xB2A0, symSize: 0x48 } - - { offsetInCU: 0x63F, offset: 0x80F2C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvsTo', symObjAddr: 0x28C, symBinAddr: 0xB2E8, symSize: 0x40 } - - { offsetInCU: 0x682, offset: 0x80F6F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13SIZE_OF_FLOATSivgZTo', symObjAddr: 0x2CC, symBinAddr: 0xB328, symSize: 0x8 } - - { offsetInCU: 0x69E, offset: 0x80F8B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13VERTEX_SHADERSSvgZTo', symObjAddr: 0x2D4, symBinAddr: 0xB330, symSize: 0x2C } - - { offsetInCU: 0x6D0, offset: 0x80FBD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvgTo', symObjAddr: 0x300, symBinAddr: 0xB35C, symSize: 0x10 } - - { offsetInCU: 0x6F0, offset: 0x80FDD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvgTo', symObjAddr: 0x300, symBinAddr: 0xB35C, symSize: 0x10 } - - { offsetInCU: 0x728, offset: 0x81015, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvsTo', symObjAddr: 0x310, symBinAddr: 0xB36C, symSize: 0x34 } - - { offsetInCU: 0x781, offset: 0x8106E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvgTo', symObjAddr: 0x418, symBinAddr: 0xB474, symSize: 0x10 } - - { offsetInCU: 0x7A1, offset: 0x8108E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvgTo', symObjAddr: 0x418, symBinAddr: 0xB474, symSize: 0x10 } - - { offsetInCU: 0x7D7, offset: 0x810C4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvsTo', symObjAddr: 0x428, symBinAddr: 0xB484, symSize: 0x10 } - - { offsetInCU: 0x7F7, offset: 0x810E4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvsTo', symObjAddr: 0x428, symBinAddr: 0xB484, symSize: 0x10 } - - { offsetInCU: 0x846, offset: 0x81133, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfcTo', symObjAddr: 0x5A4, symBinAddr: 0xB5C0, symSize: 0x20 } - - { offsetInCU: 0x878, offset: 0x81165, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyFTo', symObjAddr: 0x708, symBinAddr: 0xB724, symSize: 0x28 } - - { offsetInCU: 0x8D0, offset: 0x811BD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTo', symObjAddr: 0x744, symBinAddr: 0xB760, symSize: 0x88 } - - { offsetInCU: 0x934, offset: 0x81221, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTo', symObjAddr: 0x7CC, symBinAddr: 0xB7E8, symSize: 0x7C } - - { offsetInCU: 0x9D6, offset: 0x812C3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyFTo', symObjAddr: 0xBF4, symBinAddr: 0xBC10, symSize: 0x28 } - - { offsetInCU: 0xAC0, offset: 0x813AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCMa', symObjAddr: 0x584, symBinAddr: 0xB5A0, symSize: 0x20 } - - { offsetInCU: 0xB34, offset: 0x81421, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfETo', symObjAddr: 0xC4C, symBinAddr: 0xBC68, symSize: 0x58 } - - { offsetInCU: 0x123B, offset: 0x81B28, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfC', symObjAddr: 0x438, symBinAddr: 0xB494, symSize: 0x20 } - - { offsetInCU: 0x1255, offset: 0x81B42, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfc', symObjAddr: 0x458, symBinAddr: 0xB4B4, symSize: 0xEC } - - { offsetInCU: 0x128D, offset: 0x81B7A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyF', symObjAddr: 0x5C4, symBinAddr: 0xB5E0, symSize: 0x144 } - - { offsetInCU: 0x1448, offset: 0x81D35, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtF', symObjAddr: 0x730, symBinAddr: 0xB74C, symSize: 0x14 } - - { offsetInCU: 0x14F9, offset: 0x81DE6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyF', symObjAddr: 0x848, symBinAddr: 0xB864, symSize: 0x3AC } - - { offsetInCU: 0x1869, offset: 0x82156, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfD', symObjAddr: 0xC1C, symBinAddr: 0xBC38, symSize: 0x30 } - - { offsetInCU: 0x1954, offset: 0x82241, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTf4ddnndnndn_n', symObjAddr: 0xCA4, symBinAddr: 0xBCC0, symSize: 0x65C } - - { offsetInCU: 0x2152, offset: 0x82A3F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTf4nnnnndn_n', symObjAddr: 0x1344, symBinAddr: 0xC360, symSize: 0x6C8 } - - { offsetInCU: 0x10C, offset: 0x833FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfcTo', symObjAddr: 0xED4, symBinAddr: 0xD8D4, symSize: 0x68 } - - { offsetInCU: 0x19C, offset: 0x8348F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCfETo', symObjAddr: 0xF48, symBinAddr: 0xD948, symSize: 0x10 } - - { offsetInCU: 0x1CB, offset: 0x834BE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6handleyySo19UIGestureRecognizerCFTo', symObjAddr: 0xF58, symBinAddr: 0xD958, symSize: 0x4 } - - { offsetInCU: 0x368, offset: 0x8365B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCACycfcTo', symObjAddr: 0x16DC, symBinAddr: 0xE0DC, symSize: 0x2C } - - { offsetInCU: 0x5D4, offset: 0x838C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCfETo', symObjAddr: 0x1744, symBinAddr: 0xE144, symSize: 0x68 } - - { offsetInCU: 0x603, offset: 0x838F6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCMa', symObjAddr: 0x17AC, symBinAddr: 0xE1AC, symSize: 0x20 } - - { offsetInCU: 0x617, offset: 0x8390A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCMa', symObjAddr: 0x17CC, symBinAddr: 0xE1CC, symSize: 0x20 } - - { offsetInCU: 0x62B, offset: 0x8391E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwCP', symObjAddr: 0x17EC, symBinAddr: 0xE1EC, symSize: 0x30 } - - { offsetInCU: 0x63F, offset: 0x83932, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwxx', symObjAddr: 0x181C, symBinAddr: 0xE21C, symSize: 0x8 } - - { offsetInCU: 0x653, offset: 0x83946, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwcp', symObjAddr: 0x1824, symBinAddr: 0xE224, symSize: 0x3C } - - { offsetInCU: 0x667, offset: 0x8395A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwca', symObjAddr: 0x1860, symBinAddr: 0xE260, symSize: 0x50 } - - { offsetInCU: 0x67B, offset: 0x8396E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwta', symObjAddr: 0x18BC, symBinAddr: 0xE2B0, symSize: 0x40 } - - { offsetInCU: 0x68F, offset: 0x83982, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwet', symObjAddr: 0x18FC, symBinAddr: 0xE2F0, symSize: 0x48 } - - { offsetInCU: 0x6A3, offset: 0x83996, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwst', symObjAddr: 0x1944, symBinAddr: 0xE338, symSize: 0x40 } - - { offsetInCU: 0x6B7, offset: 0x839AA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVMa', symObjAddr: 0x1984, symBinAddr: 0xE378, symSize: 0x10 } - - { offsetInCU: 0x6CB, offset: 0x839BE, size: 0x8, addend: 0x0, symName: '_$sypSgWOc', symObjAddr: 0x1994, symBinAddr: 0xE388, symSize: 0x48 } - - { offsetInCU: 0x6DF, offset: 0x839D2, size: 0x8, addend: 0x0, symName: '_$sSo7UITouchCSo8NSObjectCSH10ObjectiveCWl', symObjAddr: 0x1AA0, symBinAddr: 0xE3D0, symSize: 0x58 } - - { offsetInCU: 0x6F3, offset: 0x839E6, size: 0x8, addend: 0x0, symName: '_$sSh8IteratorV8_VariantOyx__GSHRzlWOe', symObjAddr: 0x1AF8, symBinAddr: 0xE428, symSize: 0x8 } - - { offsetInCU: 0x761, offset: 0x83A54, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOe', symObjAddr: 0x1DE4, symBinAddr: 0xE714, symSize: 0x10 } - - { offsetInCU: 0xCBB, offset: 0x83FAE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesBegan_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x0, symBinAddr: 0xCA28, symSize: 0x540 } - - { offsetInCU: 0xF57, offset: 0x8424A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesMoved_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x54C, symBinAddr: 0xCF74, symSize: 0xE0 } - - { offsetInCU: 0xFD6, offset: 0x842C9, size: 0x8, addend: 0x0, symName: '_$sSa6remove2atxSi_tF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x6F0, symBinAddr: 0xD104, symSize: 0x9C } - - { offsetInCU: 0x1069, offset: 0x8435C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfc', symObjAddr: 0xDCC, symBinAddr: 0xD7CC, symSize: 0x108 } - - { offsetInCU: 0x11B3, offset: 0x844A6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6onMove33_044DDF836BDB3B89B481C6F58BB6EF6BLLyySo19UIGestureRecognizerC_ShySo7UITouchCGSgtF', symObjAddr: 0x12D0, symBinAddr: 0xDCD0, symSize: 0x40C } - - { offsetInCU: 0x18C9, offset: 0x84BBC, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNewAByxGyF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x1B00, symBinAddr: 0xE430, symSize: 0x14 } - - { offsetInCU: 0x1968, offset: 0x84C5B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6canvasAcA9NSCCanvasC_tcfcTf4gn_n', symObjAddr: 0x1B14, symBinAddr: 0xE444, symSize: 0x1DC } - - { offsetInCU: 0x27, offset: 0x84E38, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xE724, symSize: 0x2C } - - { offsetInCU: 0x4B, offset: 0x84E5C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvpZ', symObjAddr: 0x2D8, symBinAddr: 0x1160068, symSize: 0x0 } - - { offsetInCU: 0x65, offset: 0x84E76, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xE724, symSize: 0x2C } - - { offsetInCU: 0x98, offset: 0x84EA9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZTo', symObjAddr: 0x178, symBinAddr: 0xE89C, symSize: 0x40 } - - { offsetInCU: 0x104, offset: 0x84F15, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfcTo', symObjAddr: 0x228, symBinAddr: 0xE94C, symSize: 0x3C } - - { offsetInCU: 0x156, offset: 0x84F67, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queue_WZ', symObjAddr: 0x2C, symBinAddr: 0xE750, symSize: 0x10C } - - { offsetInCU: 0x181, offset: 0x84F92, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCMa', symObjAddr: 0x208, symBinAddr: 0xE92C, symSize: 0x20 } - - { offsetInCU: 0x195, offset: 0x84FA6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfETo', symObjAddr: 0x294, symBinAddr: 0xE9B8, symSize: 0x4 } - - { offsetInCU: 0x1C0, offset: 0x84FD1, size: 0x8, addend: 0x0, symName: '_$sSo17OS_dispatch_queueCMa', symObjAddr: 0x298, symBinAddr: 0xE9BC, symSize: 0x3C } - - { offsetInCU: 0x348, offset: 0x85159, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZ', symObjAddr: 0x138, symBinAddr: 0xE85C, symSize: 0x40 } - - { offsetInCU: 0x388, offset: 0x85199, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfC', symObjAddr: 0x1B8, symBinAddr: 0xE8DC, symSize: 0x20 } - - { offsetInCU: 0x39C, offset: 0x851AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfc', symObjAddr: 0x1D8, symBinAddr: 0xE8FC, symSize: 0x30 } - - { offsetInCU: 0x3D8, offset: 0x851E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfD', symObjAddr: 0x264, symBinAddr: 0xE988, symSize: 0x30 } - - { offsetInCU: 0x2B, offset: 0x85237, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xE9F8, symSize: 0xA4 } - - { offsetInCU: 0x66, offset: 0x85272, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZTo', symObjAddr: 0xA4, symBinAddr: 0xEA9C, symSize: 0xA4 } - - { offsetInCU: 0xF9, offset: 0x85305, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZTo', symObjAddr: 0x1D8, symBinAddr: 0xEBD0, symSize: 0x110 } - - { offsetInCU: 0x1A2, offset: 0x853AE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZTo', symObjAddr: 0x30C, symBinAddr: 0xED04, symSize: 0x28 } - - { offsetInCU: 0x222, offset: 0x8542E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTo', symObjAddr: 0x338, symBinAddr: 0xED30, symSize: 0xA0 } - - { offsetInCU: 0x29B, offset: 0x854A7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZTo', symObjAddr: 0x4D0, symBinAddr: 0xEEC8, symSize: 0x15C } - - { offsetInCU: 0x330, offset: 0x8553C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfcTo', symObjAddr: 0x67C, symBinAddr: 0xF074, symSize: 0x3C } - - { offsetInCU: 0x381, offset: 0x8558D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTf4nnnnnndd_n', symObjAddr: 0x6E8, symBinAddr: 0xF0E0, symSize: 0x160 } - - { offsetInCU: 0x4DF, offset: 0x856EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC7getFile33_F00B23A4165DD6ABFCD23C8811C7DF43LLyS2SKFZTf4nd_g', symObjAddr: 0x848, symBinAddr: 0xF240, symSize: 0x2E4 } - - { offsetInCU: 0x5AE, offset: 0x857BA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCMa', symObjAddr: 0xB2C, symBinAddr: 0xF524, symSize: 0x20 } - - { offsetInCU: 0x5C2, offset: 0x857CE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOAEs5ErrorAAWl', symObjAddr: 0xB4C, symBinAddr: 0xF544, symSize: 0x44 } - - { offsetInCU: 0x5D6, offset: 0x857E2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwCP', symObjAddr: 0xB90, symBinAddr: 0xF588, symSize: 0x2C } - - { offsetInCU: 0x5EA, offset: 0x857F6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwxx', symObjAddr: 0xBBC, symBinAddr: 0xF5B4, symSize: 0x8 } - - { offsetInCU: 0x5FE, offset: 0x8580A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwca', symObjAddr: 0xBC4, symBinAddr: 0xF5BC, symSize: 0x40 } - - { offsetInCU: 0x612, offset: 0x8581E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwta', symObjAddr: 0xC10, symBinAddr: 0xF5FC, symSize: 0x30 } - - { offsetInCU: 0x626, offset: 0x85832, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwet', symObjAddr: 0xC40, symBinAddr: 0xF62C, symSize: 0x48 } - - { offsetInCU: 0x63A, offset: 0x85846, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwst', symObjAddr: 0xC88, symBinAddr: 0xF674, symSize: 0x3C } - - { offsetInCU: 0x64E, offset: 0x8585A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwug', symObjAddr: 0xCC4, symBinAddr: 0xF6B0, symSize: 0x8 } - - { offsetInCU: 0x662, offset: 0x8586E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwup', symObjAddr: 0xCCC, symBinAddr: 0xF6B8, symSize: 0x4 } - - { offsetInCU: 0x676, offset: 0x85882, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwui', symObjAddr: 0xCD0, symBinAddr: 0xF6BC, symSize: 0x4 } - - { offsetInCU: 0x68A, offset: 0x85896, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOMa', symObjAddr: 0xCD4, symBinAddr: 0xF6C0, symSize: 0x10 } - - { offsetInCU: 0x712, offset: 0x8591E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP7_domainSSvgTW', symObjAddr: 0x3D8, symBinAddr: 0xEDD0, symSize: 0x4 } - - { offsetInCU: 0x72E, offset: 0x8593A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP5_codeSivgTW', symObjAddr: 0x3DC, symBinAddr: 0xEDD4, symSize: 0x4 } - - { offsetInCU: 0x74A, offset: 0x85956, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP9_userInfoyXlSgvgTW', symObjAddr: 0x3E0, symBinAddr: 0xEDD8, symSize: 0x4 } - - { offsetInCU: 0x766, offset: 0x85972, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP19_getEmbeddedNSErroryXlSgyFTW', symObjAddr: 0x3E4, symBinAddr: 0xEDDC, symSize: 0x4 } - - { offsetInCU: 0xA14, offset: 0x85C20, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xE9F8, symSize: 0xA4 } - - { offsetInCU: 0xAAA, offset: 0x85CB6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZ', symObjAddr: 0x148, symBinAddr: 0xEB40, symSize: 0x90 } - - { offsetInCU: 0xC31, offset: 0x85E3D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZ', symObjAddr: 0x2E8, symBinAddr: 0xECE0, symSize: 0x24 } - - { offsetInCU: 0xC7B, offset: 0x85E87, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZ', symObjAddr: 0x334, symBinAddr: 0xED2C, symSize: 0x4 } - - { offsetInCU: 0xC9D, offset: 0x85EA9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZ', symObjAddr: 0x3E8, symBinAddr: 0xEDE0, symSize: 0xE8 } - - { offsetInCU: 0xD4D, offset: 0x85F59, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfC', symObjAddr: 0x62C, symBinAddr: 0xF024, symSize: 0x20 } - - { offsetInCU: 0xD61, offset: 0x85F6D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfc', symObjAddr: 0x64C, symBinAddr: 0xF044, symSize: 0x30 } - - { offsetInCU: 0xD97, offset: 0x85FA3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCfD', symObjAddr: 0x6B8, symBinAddr: 0xF0B0, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x860BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0xF6D4, symSize: 0x4 } - - { offsetInCU: 0x71, offset: 0x86106, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x4, symBinAddr: 0xF6D8, symSize: 0x70 } - - { offsetInCU: 0xF6, offset: 0x8618B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x78, symBinAddr: 0xF74C, symSize: 0x50 } - - { offsetInCU: 0x191, offset: 0x86226, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0xCC, symBinAddr: 0xF7A0, symSize: 0x68 } - - { offsetInCU: 0x254, offset: 0x862E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x138, symBinAddr: 0xF80C, symSize: 0x98 } - - { offsetInCU: 0x323, offset: 0x863B8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfcTo', symObjAddr: 0x220, symBinAddr: 0xF8F4, symSize: 0x3C } - - { offsetInCU: 0x375, offset: 0x8640A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCMa', symObjAddr: 0x28C, symBinAddr: 0xF960, symSize: 0x20 } - - { offsetInCU: 0x4E5, offset: 0x8657A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0xF6D4, symSize: 0x4 } - - { offsetInCU: 0x51D, offset: 0x865B2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0xF6D4, symSize: 0x4 } - - { offsetInCU: 0x588, offset: 0x8661D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0xF748, symSize: 0x4 } - - { offsetInCU: 0x5C8, offset: 0x8665D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0xF748, symSize: 0x4 } - - { offsetInCU: 0x62A, offset: 0x866BF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xC8, symBinAddr: 0xF79C, symSize: 0x4 } - - { offsetInCU: 0x67C, offset: 0x86711, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xC8, symBinAddr: 0xF79C, symSize: 0x4 } - - { offsetInCU: 0x6F1, offset: 0x86786, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x134, symBinAddr: 0xF808, symSize: 0x4 } - - { offsetInCU: 0x767, offset: 0x867FC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x134, symBinAddr: 0xF808, symSize: 0x4 } - - { offsetInCU: 0x805, offset: 0x8689A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfC', symObjAddr: 0x1D0, symBinAddr: 0xF8A4, symSize: 0x20 } - - { offsetInCU: 0x819, offset: 0x868AE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfc', symObjAddr: 0x1F0, symBinAddr: 0xF8C4, symSize: 0x30 } - - { offsetInCU: 0x84F, offset: 0x868E4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCfD', symObjAddr: 0x25C, symBinAddr: 0xF930, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x8692E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0xF980, symSize: 0x14 } - - { offsetInCU: 0xA9, offset: 0x869B0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x14, symBinAddr: 0xF994, symSize: 0x38 } - - { offsetInCU: 0x1A2, offset: 0x86AA9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x68, symBinAddr: 0xF9E8, symSize: 0x40 } - - { offsetInCU: 0x284, offset: 0x86B8B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfcTo', symObjAddr: 0x118, symBinAddr: 0xFA98, symSize: 0x3C } - - { offsetInCU: 0x2D6, offset: 0x86BDD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCMa', symObjAddr: 0xF8, symBinAddr: 0xFA78, symSize: 0x20 } - - { offsetInCU: 0x480, offset: 0x86D87, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0xF980, symSize: 0x14 } - - { offsetInCU: 0x5C4, offset: 0x86ECB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x4C, symBinAddr: 0xF9CC, symSize: 0x1C } - - { offsetInCU: 0x6FA, offset: 0x87001, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfC', symObjAddr: 0xA8, symBinAddr: 0xFA28, symSize: 0x20 } - - { offsetInCU: 0x70E, offset: 0x87015, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfc', symObjAddr: 0xC8, symBinAddr: 0xFA48, symSize: 0x30 } - - { offsetInCU: 0x744, offset: 0x8704B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCfD', symObjAddr: 0x154, symBinAddr: 0xFAD4, symSize: 0x30 } - - { offsetInCU: 0x61, offset: 0x870CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0xFB08, symSize: 0x10 } - - { offsetInCU: 0x81, offset: 0x870EF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0xFB08, symSize: 0x10 } - - { offsetInCU: 0xB7, offset: 0x87125, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0xFB18, symSize: 0x10 } - - { offsetInCU: 0xD7, offset: 0x87145, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0xFB18, symSize: 0x10 } - - { offsetInCU: 0x110, offset: 0x8717E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvgTo', symObjAddr: 0x24, symBinAddr: 0xFB28, symSize: 0x48 } - - { offsetInCU: 0x168, offset: 0x871D6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvsTo', symObjAddr: 0xB4, symBinAddr: 0xFBB8, symSize: 0x50 } - - { offsetInCU: 0x1C3, offset: 0x87231, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0xFC08, symSize: 0x10 } - - { offsetInCU: 0x1E3, offset: 0x87251, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0xFC08, symSize: 0x10 } - - { offsetInCU: 0x219, offset: 0x87287, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0xFC18, symSize: 0x10 } - - { offsetInCU: 0x239, offset: 0x872A7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0xFC18, symSize: 0x10 } - - { offsetInCU: 0x272, offset: 0x872E0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfcTo', symObjAddr: 0x1B0, symBinAddr: 0xFCB4, symSize: 0x78 } - - { offsetInCU: 0x2C8, offset: 0x87336, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x2D4, symBinAddr: 0xFDD8, symSize: 0xB0 } - - { offsetInCU: 0x32A, offset: 0x87398, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x43C, symBinAddr: 0xFF40, symSize: 0x28 } - - { offsetInCU: 0x35C, offset: 0x873CA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC12bindDrawableyyFTo', symObjAddr: 0x4E0, symBinAddr: 0xFF68, symSize: 0xA0 } - - { offsetInCU: 0x3DD, offset: 0x8744B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC14deleteDrawableyyFTo', symObjAddr: 0x5BC, symBinAddr: 0x10008, symSize: 0x60 } - - { offsetInCU: 0x44D, offset: 0x874BB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTo', symObjAddr: 0x620, symBinAddr: 0x1006C, symSize: 0x4C } - - { offsetInCU: 0x4BF, offset: 0x8752D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfcTo', symObjAddr: 0x70C, symBinAddr: 0x10158, symSize: 0x34 } - - { offsetInCU: 0x533, offset: 0x875A1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCMa', symObjAddr: 0x190, symBinAddr: 0xFC94, symSize: 0x20 } - - { offsetInCU: 0x55D, offset: 0x875CB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCfETo', symObjAddr: 0x74C, symBinAddr: 0x10198, symSize: 0x10 } - - { offsetInCU: 0x65B, offset: 0x876C9, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VFTo', symObjAddr: 0xA08, symBinAddr: 0x10454, symSize: 0x74 } - - { offsetInCU: 0x699, offset: 0x87707, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA7C, symBinAddr: 0x104C8, symSize: 0x10 } - - { offsetInCU: 0x6B9, offset: 0x87727, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA7C, symBinAddr: 0x104C8, symSize: 0x10 } - - { offsetInCU: 0x6EF, offset: 0x8775D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA8C, symBinAddr: 0x104D8, symSize: 0x10 } - - { offsetInCU: 0x70F, offset: 0x8777D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA8C, symBinAddr: 0x104D8, symSize: 0x10 } - - { offsetInCU: 0x748, offset: 0x877B6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvgTo', symObjAddr: 0xA9C, symBinAddr: 0x104E8, symSize: 0x20 } - - { offsetInCU: 0x7A0, offset: 0x8780E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvsTo', symObjAddr: 0xABC, symBinAddr: 0x10508, symSize: 0x14 } - - { offsetInCU: 0x7FB, offset: 0x87869, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvgTo', symObjAddr: 0xAD0, symBinAddr: 0x1051C, symSize: 0x44 } - - { offsetInCU: 0x853, offset: 0x878C1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvsTo', symObjAddr: 0xB58, symBinAddr: 0x105A4, symSize: 0x48 } - - { offsetInCU: 0x8E8, offset: 0x87956, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfcTo', symObjAddr: 0xCBC, symBinAddr: 0x10708, symSize: 0x78 } - - { offsetInCU: 0x93E, offset: 0x879AC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0xE34, symBinAddr: 0x10880, symSize: 0xB0 } - - { offsetInCU: 0x9A0, offset: 0x87A0E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0xF90, symBinAddr: 0x109DC, symSize: 0x28 } - - { offsetInCU: 0x9D2, offset: 0x87A40, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC11deviceScaleSfyFTo', symObjAddr: 0xFB8, symBinAddr: 0x10A04, symSize: 0xB8 } - - { offsetInCU: 0xA53, offset: 0x87AC1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTo', symObjAddr: 0x1074, symBinAddr: 0x10ABC, symSize: 0x28 } - - { offsetInCU: 0xAB1, offset: 0x87B1F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCfETo', symObjAddr: 0x10D8, symBinAddr: 0x10B20, symSize: 0x10 } - - { offsetInCU: 0xC88, offset: 0x87CF6, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCs5UInt8V_Tgmq5', symObjAddr: 0x13D0, symBinAddr: 0x10D1C, symSize: 0x64 } - - { offsetInCU: 0xCD9, offset: 0x87D47, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOy', symObjAddr: 0x15D8, symBinAddr: 0x10F24, symSize: 0x44 } - - { offsetInCU: 0xCED, offset: 0x87D5B, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOe', symObjAddr: 0x161C, symBinAddr: 0x10F68, symSize: 0x44 } - - { offsetInCU: 0xD01, offset: 0x87D6F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCMa', symObjAddr: 0x1660, symBinAddr: 0x10FAC, symSize: 0x20 } - - { offsetInCU: 0xDDB, offset: 0x87E49, size: 0x8, addend: 0x0, symName: '_$sSaySayxGqd__c7ElementQyd__RszSTRd__lufCs5UInt8V_10Foundation4DataVTgm5Tf4g_n', symObjAddr: 0x14B8, symBinAddr: 0x10E04, symSize: 0x110 } - - { offsetInCU: 0x1086, offset: 0x880F4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvg', symObjAddr: 0x6C, symBinAddr: 0xFB70, symSize: 0x48 } - - { offsetInCU: 0x1103, offset: 0x88171, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfc', symObjAddr: 0x124, symBinAddr: 0xFC28, symSize: 0x6C } - - { offsetInCU: 0x114A, offset: 0x881B8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0x228, symBinAddr: 0xFD2C, symSize: 0xAC } - - { offsetInCU: 0x11AE, offset: 0x8821C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x384, symBinAddr: 0xFE88, symSize: 0xB8 } - - { offsetInCU: 0x1239, offset: 0x882A7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtF', symObjAddr: 0x61C, symBinAddr: 0x10068, symSize: 0x4 } - - { offsetInCU: 0x125A, offset: 0x882C8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfC', symObjAddr: 0x66C, symBinAddr: 0x100B8, symSize: 0x74 } - - { offsetInCU: 0x126E, offset: 0x882DC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfc', symObjAddr: 0x6E0, symBinAddr: 0x1012C, symSize: 0x2C } - - { offsetInCU: 0x1387, offset: 0x883F5, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VF', symObjAddr: 0x75C, symBinAddr: 0x101A8, symSize: 0x2AC } - - { offsetInCU: 0x1731, offset: 0x8879F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvg', symObjAddr: 0xB14, symBinAddr: 0x10560, symSize: 0x44 } - - { offsetInCU: 0x1770, offset: 0x887DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvs', symObjAddr: 0xBA0, symBinAddr: 0x105EC, symSize: 0x48 } - - { offsetInCU: 0x1795, offset: 0x88803, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM', symObjAddr: 0xBE8, symBinAddr: 0x10634, symSize: 0x44 } - - { offsetInCU: 0x17BA, offset: 0x88828, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM.resume.0', symObjAddr: 0xC2C, symBinAddr: 0x10678, symSize: 0x4 } - - { offsetInCU: 0x17E1, offset: 0x8884F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfC', symObjAddr: 0xC30, symBinAddr: 0x1067C, symSize: 0x20 } - - { offsetInCU: 0x17F5, offset: 0x88863, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfc', symObjAddr: 0xC50, symBinAddr: 0x1069C, symSize: 0x6C } - - { offsetInCU: 0x183C, offset: 0x888AA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0xD88, symBinAddr: 0x107D4, symSize: 0xAC } - - { offsetInCU: 0x189B, offset: 0x88909, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0xEE4, symBinAddr: 0x10930, symSize: 0xAC } - - { offsetInCU: 0x1940, offset: 0x889AE, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x10E8, symBinAddr: 0x10B30, symSize: 0x104 } - - { offsetInCU: 0x1A6F, offset: 0x88ADD, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFs5UInt8V_Tg5', symObjAddr: 0x12E8, symBinAddr: 0x10C34, symSize: 0xE8 } - - { offsetInCU: 0x1BB3, offset: 0x88C21, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTf4ddn_n', symObjAddr: 0x1434, symBinAddr: 0x10D80, symSize: 0x84 } - - { offsetInCU: 0x1CAC, offset: 0x88D1A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTf4dn_n', symObjAddr: 0x1680, symBinAddr: 0x10FCC, symSize: 0x360 } - - { offsetInCU: 0x2B, offset: 0x89134, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x11518, symSize: 0x2C } - - { offsetInCU: 0x4F, offset: 0x89158, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LLSo012OS_dispatch_E0CvpZ', symObjAddr: 0x958, symBinAddr: 0x11601B0, symSize: 0x0 } - - { offsetInCU: 0x5D, offset: 0x89166, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x11518, symSize: 0x2C } - - { offsetInCU: 0x75, offset: 0x8917E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LL_WZ', symObjAddr: 0x2C, symBinAddr: 0x11544, symSize: 0x10C } - - { offsetInCU: 0xBC, offset: 0x891C5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0x13C, symBinAddr: 0x11654, symSize: 0x44 } - - { offsetInCU: 0x132, offset: 0x8923B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTo', symObjAddr: 0x3AC, symBinAddr: 0x118C4, symSize: 0x80 } - - { offsetInCU: 0x191, offset: 0x8929A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfcTo', symObjAddr: 0x47C, symBinAddr: 0x11994, symSize: 0x3C } - - { offsetInCU: 0x1E2, offset: 0x892EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTf4nnnd_n', symObjAddr: 0x4EC, symBinAddr: 0x11A04, symSize: 0x1DC } - - { offsetInCU: 0x269, offset: 0x89372, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfETo', symObjAddr: 0x4E8, symBinAddr: 0x11A00, symSize: 0x4 } - - { offsetInCU: 0x2A5, offset: 0x893AE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCMa', symObjAddr: 0x6C8, symBinAddr: 0x11BE0, symSize: 0x20 } - - { offsetInCU: 0x2C4, offset: 0x893CD, size: 0x8, addend: 0x0, symName: '_$s10ObjectiveC8ObjCBoolVIeyBy_SbIegy_TRTA', symObjAddr: 0x70C, symBinAddr: 0x11C24, symSize: 0x14 } - - { offsetInCU: 0x2ED, offset: 0x893F6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_TA', symObjAddr: 0x74C, symBinAddr: 0x11C64, symSize: 0xC } - - { offsetInCU: 0x301, offset: 0x8940A, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x758, symBinAddr: 0x11C70, symSize: 0x10 } - - { offsetInCU: 0x315, offset: 0x8941E, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x768, symBinAddr: 0x11C80, symSize: 0x8 } - - { offsetInCU: 0x329, offset: 0x89432, size: 0x8, addend: 0x0, symName: '_$s8Dispatch0A13WorkItemFlagsVACs10SetAlgebraAAWl', symObjAddr: 0x770, symBinAddr: 0x11C88, symSize: 0x48 } - - { offsetInCU: 0x33D, offset: 0x89446, size: 0x8, addend: 0x0, symName: '_$sSay8Dispatch0A13WorkItemFlagsVGSayxGSTsWl', symObjAddr: 0x7F8, symBinAddr: 0x11CD0, symSize: 0x4C } - - { offsetInCU: 0x351, offset: 0x8945A, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledNameAbstract, symObjAddr: 0x844, symBinAddr: 0x11D1C, symSize: 0x44 } - - { offsetInCU: 0x365, offset: 0x8946E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0x8C4, symBinAddr: 0x11D60, symSize: 0x24 } - - { offsetInCU: 0x399, offset: 0x894A2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU_TA', symObjAddr: 0x90C, symBinAddr: 0x11DA8, symSize: 0x24 } - - { offsetInCU: 0x52E, offset: 0x89637, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x11650, symSize: 0x4 } - - { offsetInCU: 0x55C, offset: 0x89665, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x11650, symSize: 0x4 } - - { offsetInCU: 0x5BB, offset: 0x896C4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZ', symObjAddr: 0x180, symBinAddr: 0x11698, symSize: 0x4 } - - { offsetInCU: 0x5CF, offset: 0x896D8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_', symObjAddr: 0x184, symBinAddr: 0x1169C, symSize: 0x228 } - - { offsetInCU: 0x6A8, offset: 0x897B1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfC', symObjAddr: 0x42C, symBinAddr: 0x11944, symSize: 0x20 } - - { offsetInCU: 0x6BC, offset: 0x897C5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfc', symObjAddr: 0x44C, symBinAddr: 0x11964, symSize: 0x30 } - - { offsetInCU: 0x6F2, offset: 0x897FB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfD', symObjAddr: 0x4B8, symBinAddr: 0x119D0, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x898A1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x11DE0, symSize: 0x20 } - - { offsetInCU: 0x77, offset: 0x898F1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfcTo', symObjAddr: 0x70, symBinAddr: 0x11E50, symSize: 0x3C } - - { offsetInCU: 0xC9, offset: 0x89943, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCMa', symObjAddr: 0x50, symBinAddr: 0x11E30, symSize: 0x20 } - - { offsetInCU: 0x214, offset: 0x89A8E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x11DE0, symSize: 0x20 } - - { offsetInCU: 0x228, offset: 0x89AA2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfc', symObjAddr: 0x20, symBinAddr: 0x11E00, symSize: 0x30 } - - { offsetInCU: 0x264, offset: 0x89ADE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCfD', symObjAddr: 0xAC, symBinAddr: 0x11E8C, symSize: 0x30 } - - { offsetInCU: 0x26, offset: 0x89B27, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x335044, symSize: 0x265C } - - { offsetInCU: 0x40, offset: 0x89B41, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9E20, symBinAddr: 0xA29310, symSize: 0x0 } - - { offsetInCU: 0x92, offset: 0x89B93, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFE20, symBinAddr: 0xA2F310, symSize: 0x0 } - - { offsetInCU: 0xF6, offset: 0x89BF7, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFE48, symBinAddr: 0xA2F338, symSize: 0x0 } - - { offsetInCU: 0x10C, offset: 0x89C0D, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x10250, symBinAddr: 0xA2F740, symSize: 0x0 } - - { offsetInCU: 0x123, offset: 0x89C24, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFE90, symBinAddr: 0xA2F380, symSize: 0x0 } - - { offsetInCU: 0x9C2, offset: 0x8A4C3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x335044, symSize: 0x265C } - - { offsetInCU: 0x45D1, offset: 0x8E0D2, size: 0x8, addend: 0x0, symName: _fe_frombytes, symObjAddr: 0x265C, symBinAddr: 0x3376A0, symSize: 0x134 } - - { offsetInCU: 0x46F7, offset: 0x8E1F8, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x9954, symBinAddr: 0x33E998, symSize: 0x21C } - - { offsetInCU: 0x4926, offset: 0x8E427, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4FE0, symBinAddr: 0x33A024, symSize: 0x1B8 } - - { offsetInCU: 0x5313, offset: 0x8EE14, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x2790, symBinAddr: 0x3377D4, symSize: 0x5BC } - - { offsetInCU: 0x5F76, offset: 0x8FA77, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2D4C, symBinAddr: 0x337D90, symSize: 0x7F8 } - - { offsetInCU: 0x642E, offset: 0x8FF2F, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3544, symBinAddr: 0x338588, symSize: 0x208 } - - { offsetInCU: 0x69FC, offset: 0x904FD, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x374C, symBinAddr: 0x338790, symSize: 0x7B4 } - - { offsetInCU: 0x77D5, offset: 0x912D6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3F00, symBinAddr: 0x338F44, symSize: 0x634 } - - { offsetInCU: 0x8196, offset: 0x91C97, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x4534, symBinAddr: 0x339578, symSize: 0xAAC } - - { offsetInCU: 0x9567, offset: 0x93068, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x529C, symBinAddr: 0x33A2E0, symSize: 0x23F8 } - - { offsetInCU: 0xCAB8, offset: 0x965B9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x5198, symBinAddr: 0x33A1DC, symSize: 0x104 } - - { offsetInCU: 0xCD20, offset: 0x96821, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x7694, symBinAddr: 0x33C6D8, symSize: 0x30 } - - { offsetInCU: 0xCE11, offset: 0x96912, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x76C4, symBinAddr: 0x33C708, symSize: 0x58 } - - { offsetInCU: 0xCE86, offset: 0x96987, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x771C, symBinAddr: 0x33C760, symSize: 0x4 } - - { offsetInCU: 0xCECE, offset: 0x969CF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x771C, symBinAddr: 0x33C760, symSize: 0x4 } - - { offsetInCU: 0xCEFD, offset: 0x969FE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x771C, symBinAddr: 0x33C760, symSize: 0x4 } - - { offsetInCU: 0xCF21, offset: 0x96A22, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x7720, symBinAddr: 0x33C764, symSize: 0x8C } - - { offsetInCU: 0xD056, offset: 0x96B57, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x77AC, symBinAddr: 0x33C7F0, symSize: 0x4 } - - { offsetInCU: 0xD08F, offset: 0x96B90, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x77AC, symBinAddr: 0x33C7F0, symSize: 0x4 } - - { offsetInCU: 0xD328, offset: 0x96E29, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x77B0, symBinAddr: 0x33C7F4, symSize: 0x15D8 } - - { offsetInCU: 0x10671, offset: 0x9A172, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x9B70, symBinAddr: 0x33EBB4, symSize: 0x218 } - - { offsetInCU: 0x10CA3, offset: 0x9A7A4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8D88, symBinAddr: 0x33DDCC, symSize: 0x20 } - - { offsetInCU: 0x11140, offset: 0x9AC41, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8DA8, symBinAddr: 0x33DDEC, symSize: 0xBAC } - - { offsetInCU: 0x26, offset: 0x9BA0C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x33EDCC, symSize: 0x1F4 } - - { offsetInCU: 0x1D2, offset: 0x9BBB8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x33EDCC, symSize: 0x1F4 } - - { offsetInCU: 0x26, offset: 0x9BE53, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x33EFC0, symSize: 0x3C } - - { offsetInCU: 0x34, offset: 0x9BE61, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x33EFC0, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0x9BF71, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x33EFFC, symSize: 0x98 } - - { offsetInCU: 0x34, offset: 0x9BF7F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x33EFFC, symSize: 0x98 } - - { offsetInCU: 0x86, offset: 0x9C0E2, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1100, symBinAddr: 0xA2F7F0, symSize: 0x0 } - - { offsetInCU: 0xB8, offset: 0x9C114, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1090, symBinAddr: 0xA2F780, symSize: 0x0 } - - { offsetInCU: 0xDA, offset: 0x9C136, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x10C0, symBinAddr: 0xA2F7B0, symSize: 0x0 } - - { offsetInCU: 0xF0, offset: 0x9C14C, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x10F0, symBinAddr: 0xA2F7E0, symSize: 0x0 } - - { offsetInCU: 0x3B7, offset: 0x9C413, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x33F094, symSize: 0x18 } - - { offsetInCU: 0x3FB, offset: 0x9C457, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x33F094, symSize: 0x18 } - - { offsetInCU: 0x594, offset: 0x9C5F0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0x33F0AC, symSize: 0x18 } - - { offsetInCU: 0x63F, offset: 0x9C69B, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0x33F0C4, symSize: 0x320 } - - { offsetInCU: 0x1173, offset: 0x9D1CF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x5B0, symBinAddr: 0x33F3E4, symSize: 0xAC } - - { offsetInCU: 0x1469, offset: 0x9D4C5, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x65C, symBinAddr: 0x33F490, symSize: 0x500 } - - { offsetInCU: 0x2666, offset: 0x9E6C2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB5C, symBinAddr: 0x33F990, symSize: 0x2C8 } - - { offsetInCU: 0x2CB5, offset: 0x9ED11, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xE24, symBinAddr: 0x33FC58, symSize: 0xF4 } - - { offsetInCU: 0x2EC7, offset: 0x9EF23, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xF18, symBinAddr: 0x33FD4C, symSize: 0x168 } - - { offsetInCU: 0x26, offset: 0x9F24E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x33FEB4, symSize: 0x38 } - - { offsetInCU: 0xFA, offset: 0x9F322, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x33FEB4, symSize: 0x38 } - - { offsetInCU: 0x12C, offset: 0x9F354, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x33FEB4, symSize: 0x38 } - - { offsetInCU: 0x199, offset: 0x9F3C1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x33FEEC, symSize: 0x3C } - - { offsetInCU: 0x1F3, offset: 0x9F41B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x33FEEC, symSize: 0x3C } - - { offsetInCU: 0x31B, offset: 0x9F543, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0x33FF28, symSize: 0x5C } - - { offsetInCU: 0x517, offset: 0x9F73F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0x33FF84, symSize: 0x1C } - - { offsetInCU: 0x636, offset: 0x9F85E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0x33FFA0, symSize: 0x54 } - - { offsetInCU: 0x6D9, offset: 0x9F901, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0x33FFF4, symSize: 0x4C } - - { offsetInCU: 0x8A7, offset: 0x9FACF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x340040, symSize: 0xA8 } - - { offsetInCU: 0x90B, offset: 0x9FB33, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x340040, symSize: 0xA8 } - - { offsetInCU: 0xBAA, offset: 0x9FDD2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0x3400E8, symSize: 0x110 } - - { offsetInCU: 0xC4C, offset: 0x9FE74, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0x3400E8, symSize: 0x110 } - - { offsetInCU: 0xEDE, offset: 0xA0106, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x344, symBinAddr: 0x3401F8, symSize: 0xB0 } - - { offsetInCU: 0xF5E, offset: 0xA0186, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x344, symBinAddr: 0x3401F8, symSize: 0xB0 } - - { offsetInCU: 0x10E1, offset: 0xA0309, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x3F4, symBinAddr: 0x3402A8, symSize: 0x198 } - - { offsetInCU: 0x13AB, offset: 0xA05D3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x58C, symBinAddr: 0x340440, symSize: 0x290 } - - { offsetInCU: 0x1500, offset: 0xA0728, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x81C, symBinAddr: 0x3406D0, symSize: 0x18 } - - { offsetInCU: 0x1567, offset: 0xA078F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x834, symBinAddr: 0x3406E8, symSize: 0xC } - - { offsetInCU: 0x15A0, offset: 0xA07C8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x840, symBinAddr: 0x3406F4, symSize: 0x8 } - - { offsetInCU: 0x1624, offset: 0xA084C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x848, symBinAddr: 0x3406FC, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0xA09FF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x340738, symSize: 0x190 } - - { offsetInCU: 0x34, offset: 0xA0A0D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x340738, symSize: 0x190 } - - { offsetInCU: 0x34, offset: 0xA0B13, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x398, symBinAddr: 0x1167288, symSize: 0x0 } - - { offsetInCU: 0x26, offset: 0xA0B55, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x3408C8, symSize: 0x388 } - - { offsetInCU: 0x76, offset: 0xA0BA5, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0xA30000, symSize: 0x0 } - - { offsetInCU: 0xFA, offset: 0xA0C29, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0xA55000, symSize: 0x0 } - - { offsetInCU: 0x35B, offset: 0xA0E8A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x3408C8, symSize: 0x388 } - - { offsetInCU: 0xC66, offset: 0xA1795, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x388, symBinAddr: 0x340C50, symSize: 0x204 } - - { offsetInCU: 0x1163, offset: 0xA1C92, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x58C, symBinAddr: 0x340E54, symSize: 0x1BC } - - { offsetInCU: 0x10, offset: 0xA2067, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x341020, symSize: 0x1A0 } - - { offsetInCU: 0x50, offset: 0xA20A7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x341020, symSize: 0x1A0 } - - { offsetInCU: 0x5E, offset: 0xA20B5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0x3411C0, symSize: 0x60 } - - { offsetInCU: 0x81, offset: 0xA20D8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0x341220, symSize: 0x288 } - - { offsetInCU: 0x10, offset: 0xA20C9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x3414B0, symSize: 0x130 } - - { offsetInCU: 0x48, offset: 0xA2101, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x3414B0, symSize: 0x130 } - - { offsetInCU: 0x5F, offset: 0xA2118, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0x3415E0, symSize: 0x70 } - - { offsetInCU: 0x75, offset: 0xA212E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0x341650, symSize: 0x160 } - - { offsetInCU: 0x7A, offset: 0xA2133, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0x3417B0, symSize: 0x378 } - - { offsetInCU: 0x10, offset: 0xA2141, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x341B40, symSize: 0x3A0 } - - { offsetInCU: 0x48, offset: 0xA2179, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x341B40, symSize: 0x3A0 } - - { offsetInCU: 0x4C, offset: 0xA217D, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0x341EE0, symSize: 0x6C0 } - - { offsetInCU: 0x66, offset: 0xA2197, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0x3425A0, symSize: 0x1138 } - - { offsetInCU: 0x50, offset: 0xA21E3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0x343840, symSize: 0x1180 } - - { offsetInCU: 0x66, offset: 0xA21F9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0x3449C0, symSize: 0x1410 } - - { offsetInCU: 0x10, offset: 0xA21EF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x345DE0, symSize: 0x240 } - - { offsetInCU: 0x45, offset: 0xA2224, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x345DE0, symSize: 0x240 } - - { offsetInCU: 0x4D, offset: 0xA222C, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0x346020, symSize: 0x9E0 } - - { offsetInCU: 0x63, offset: 0xA2242, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0x346A00, symSize: 0x650 } - - { offsetInCU: 0x10, offset: 0xA2251, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x347060, symSize: 0x40 } - - { offsetInCU: 0x47, offset: 0xA2288, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x347060, symSize: 0x40 } - - { offsetInCU: 0x5D, offset: 0xA229E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0x3470A0, symSize: 0x40 } - - { offsetInCU: 0x76, offset: 0xA22B7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0x3470E0, symSize: 0x40 } - - { offsetInCU: 0x81, offset: 0xA22C2, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0x347120, symSize: 0x1E0 } - - { offsetInCU: 0x97, offset: 0xA22D8, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0x347300, symSize: 0x170 } - - { offsetInCU: 0xAB, offset: 0xA22EC, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0x347470, symSize: 0x50 } - - { offsetInCU: 0xC3, offset: 0xA2304, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0x3474C0, symSize: 0x50 } - - { offsetInCU: 0xD9, offset: 0xA231A, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0x347510, symSize: 0x50 } - - { offsetInCU: 0xEF, offset: 0xA2330, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0x347560, symSize: 0x60 } - - { offsetInCU: 0x111, offset: 0xA2352, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0x3475C0, symSize: 0x1E0 } - - { offsetInCU: 0x124, offset: 0xA2365, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0x3477A0, symSize: 0x360 } - - { offsetInCU: 0x141, offset: 0xA2382, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0x347B00, symSize: 0x2D0 } - - { offsetInCU: 0x156, offset: 0xA2397, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0x347DD0, symSize: 0x2B0 } - - { offsetInCU: 0x170, offset: 0xA23B1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0x348080, symSize: 0x250 } - - { offsetInCU: 0x184, offset: 0xA23C5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0x3482D0, symSize: 0x60 } - - { offsetInCU: 0x19A, offset: 0xA23DB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0x348330, symSize: 0x44 } - - { offsetInCU: 0x10, offset: 0xA23D1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x348380, symSize: 0xB90 } - - { offsetInCU: 0x4C, offset: 0xA240D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x348380, symSize: 0xB90 } - - { offsetInCU: 0x62, offset: 0xA2423, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0x348F10, symSize: 0xB98 } - - { offsetInCU: 0x10, offset: 0xA241D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x349AC0, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA245E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x349AC0, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA245E, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x34A900, symSize: 0x7E0 } - - { offsetInCU: 0x10, offset: 0xA2469, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x34B100, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA24AA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x34B100, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA24AA, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x34BF40, symSize: 0x1F0 } + - { offsetInCU: 0x34, offset: 0x77DC8, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionString, symObjAddr: 0x0, symBinAddr: 0x963000, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0x77DFD, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionNumber, symObjAddr: 0x38, symBinAddr: 0x963038, symSize: 0x0 } + - { offsetInCU: 0x3F, offset: 0x77E52, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x28, symBinAddr: 0x24E8, symSize: 0xC } + - { offsetInCU: 0x53, offset: 0x77E66, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x34, symBinAddr: 0x24F4, symSize: 0x4 } + - { offsetInCU: 0x67, offset: 0x77E7A, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x38, symBinAddr: 0x24F8, symSize: 0x20 } + - { offsetInCU: 0x7B, offset: 0x77E8E, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x58, symBinAddr: 0x2518, symSize: 0x28 } + - { offsetInCU: 0x8F, offset: 0x77EA2, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwCP', symObjAddr: 0x94, symBinAddr: 0x2554, symSize: 0x30 } + - { offsetInCU: 0xA3, offset: 0x77EB6, size: 0x8, addend: 0x0, symName: ___swift_memcpy32_8, symObjAddr: 0xC4, symBinAddr: 0x2584, symSize: 0xC } + - { offsetInCU: 0xB7, offset: 0x77ECA, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwet', symObjAddr: 0xD0, symBinAddr: 0x2590, symSize: 0x20 } + - { offsetInCU: 0xCB, offset: 0x77EDE, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwst', symObjAddr: 0xF0, symBinAddr: 0x25B0, symSize: 0x2C } + - { offsetInCU: 0x4F, offset: 0x780C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC11_WriteQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2AE8, symBinAddr: 0x115FD00, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0x780E1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10_ReadQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2AF0, symBinAddr: 0x115FD08, symSize: 0x0 } + - { offsetInCU: 0x9D, offset: 0x78115, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTo', symObjAddr: 0x4, symBinAddr: 0x2654, symSize: 0x38 } + - { offsetInCU: 0xF3, offset: 0x7816B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x40, symBinAddr: 0x2690, symSize: 0x70 } + - { offsetInCU: 0x144, offset: 0x781BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0xB4, symBinAddr: 0x2704, symSize: 0x44 } + - { offsetInCU: 0x19F, offset: 0x78217, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0xFC, symBinAddr: 0x274C, symSize: 0x50 } + - { offsetInCU: 0x204, offset: 0x7827C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0x150, symBinAddr: 0x27A0, symSize: 0x68 } + - { offsetInCU: 0x27D, offset: 0x782F5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x1BC, symBinAddr: 0x280C, symSize: 0x98 } + - { offsetInCU: 0x2DA, offset: 0x78352, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x258, symBinAddr: 0x28A8, symSize: 0x14 } + - { offsetInCU: 0x35C, offset: 0x783D4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x270, symBinAddr: 0x28C0, symSize: 0x14 } + - { offsetInCU: 0x40B, offset: 0x78483, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZTo', symObjAddr: 0x2C8, symBinAddr: 0x2918, symSize: 0x50 } + - { offsetInCU: 0x4DC, offset: 0x78554, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZTo', symObjAddr: 0x364, symBinAddr: 0x29B4, symSize: 0x58 } + - { offsetInCU: 0x5B6, offset: 0x7862E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZTo', symObjAddr: 0x404, symBinAddr: 0x2A54, symSize: 0x58 } + - { offsetInCU: 0x695, offset: 0x7870D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZTo', symObjAddr: 0x4AC, symBinAddr: 0x2AFC, symSize: 0x60 } + - { offsetInCU: 0x741, offset: 0x787B9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZTo', symObjAddr: 0x510, symBinAddr: 0x2B60, symSize: 0x8 } + - { offsetInCU: 0x7AA, offset: 0x78822, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZTo', symObjAddr: 0x51C, symBinAddr: 0x2B6C, symSize: 0x8 } + - { offsetInCU: 0x801, offset: 0x78879, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZTo', symObjAddr: 0x538, symBinAddr: 0x2B88, symSize: 0x8 } + - { offsetInCU: 0x858, offset: 0x788D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZTo', symObjAddr: 0x544, symBinAddr: 0x2B94, symSize: 0x8 } + - { offsetInCU: 0x8AF, offset: 0x78927, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZTo', symObjAddr: 0x550, symBinAddr: 0x2BA0, symSize: 0x8 } + - { offsetInCU: 0x906, offset: 0x7897E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZTo', symObjAddr: 0x55C, symBinAddr: 0x2BAC, symSize: 0x8 } + - { offsetInCU: 0x985, offset: 0x789FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZTo', symObjAddr: 0x56C, symBinAddr: 0x2BBC, symSize: 0x24 } + - { offsetInCU: 0xA36, offset: 0x78AAE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZTo', symObjAddr: 0x594, symBinAddr: 0x2BE4, symSize: 0x14 } + - { offsetInCU: 0xAA9, offset: 0x78B21, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZTo', symObjAddr: 0x5AC, symBinAddr: 0x2BFC, symSize: 0x8 } + - { offsetInCU: 0xB00, offset: 0x78B78, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZTo', symObjAddr: 0x60C, symBinAddr: 0x2C5C, symSize: 0x74 } + - { offsetInCU: 0xB8B, offset: 0x78C03, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTo', symObjAddr: 0x814, symBinAddr: 0x2E64, symSize: 0xA0 } + - { offsetInCU: 0xBDC, offset: 0x78C54, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZTo', symObjAddr: 0xB1C, symBinAddr: 0x316C, symSize: 0x98 } + - { offsetInCU: 0xC2D, offset: 0x78CA5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZTo', symObjAddr: 0xE70, symBinAddr: 0x34C0, symSize: 0x98 } + - { offsetInCU: 0xC89, offset: 0x78D01, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTo', symObjAddr: 0x1298, symBinAddr: 0x38E8, symSize: 0xD8 } + - { offsetInCU: 0xCD1, offset: 0x78D49, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTo', symObjAddr: 0x1374, symBinAddr: 0x39C4, symSize: 0x34 } + - { offsetInCU: 0xD31, offset: 0x78DA9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfcTo', symObjAddr: 0x13F8, symBinAddr: 0x3A48, symSize: 0x3C } + - { offsetInCU: 0xD82, offset: 0x78DFA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTf4nd_n', symObjAddr: 0x1468, symBinAddr: 0x3AB8, symSize: 0x2AC } + - { offsetInCU: 0xFB6, offset: 0x7902E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTf4nnnd_n', symObjAddr: 0x1714, symBinAddr: 0x3D64, symSize: 0x264 } + - { offsetInCU: 0x11B0, offset: 0x79228, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTf4nnd_n', symObjAddr: 0x1978, symBinAddr: 0x3FC8, symSize: 0xEC } + - { offsetInCU: 0x12AD, offset: 0x79325, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTf4nnnnd_n', symObjAddr: 0x1A64, symBinAddr: 0x40B4, symSize: 0x1B4 } + - { offsetInCU: 0x1422, offset: 0x7949A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTf4nnnnnnd_n', symObjAddr: 0x1C18, symBinAddr: 0x4268, symSize: 0x1CC } + - { offsetInCU: 0x15B7, offset: 0x7962F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTf4nnnnnnnnnnd_n', symObjAddr: 0x1DE4, symBinAddr: 0x4434, symSize: 0x1E0 } + - { offsetInCU: 0x17A3, offset: 0x7981B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTf4nnnd_n', symObjAddr: 0x1FC4, symBinAddr: 0x4614, symSize: 0x1B4 } + - { offsetInCU: 0x186D, offset: 0x798E5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTf4nnnnd_n', symObjAddr: 0x231C, symBinAddr: 0x496C, symSize: 0x1D4 } + - { offsetInCU: 0x194E, offset: 0x799C6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTf4d_n', symObjAddr: 0x24F0, symBinAddr: 0x4B40, symSize: 0x114 } + - { offsetInCU: 0x19F9, offset: 0x79A71, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TR', symObjAddr: 0x8B4, symBinAddr: 0x2F04, symSize: 0x78 } + - { offsetInCU: 0x1A11, offset: 0x79A89, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TR', symObjAddr: 0xBB4, symBinAddr: 0x3204, symSize: 0x54 } + - { offsetInCU: 0x1A7E, offset: 0x79AF6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfETo', symObjAddr: 0x1464, symBinAddr: 0x3AB4, symSize: 0x4 } + - { offsetInCU: 0x1B09, offset: 0x79B81, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCMa', symObjAddr: 0x2604, symBinAddr: 0x4C54, symSize: 0x20 } + - { offsetInCU: 0x1B1D, offset: 0x79B95, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TRTA', symObjAddr: 0x2648, symBinAddr: 0x4C98, symSize: 0x8 } + - { offsetInCU: 0x1B3C, offset: 0x79BB4, size: 0x8, addend: 0x0, symName: '_$sSo7NSErrorCSg10ObjectiveC8ObjCBoolVIeyByy_ACSbIeggy_TRTA', symObjAddr: 0x2650, symBinAddr: 0x4CA0, symSize: 0x18 } + - { offsetInCU: 0x1B65, offset: 0x79BDD, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TRTA', symObjAddr: 0x2668, symBinAddr: 0x4CB8, symSize: 0x8 } + - { offsetInCU: 0x1B79, offset: 0x79BF1, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCMa', symObjAddr: 0x2670, symBinAddr: 0x4CC0, symSize: 0x3C } + - { offsetInCU: 0x1B8D, offset: 0x79C05, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_TA', symObjAddr: 0x26F0, symBinAddr: 0x4D40, symSize: 0x34 } + - { offsetInCU: 0x1BA1, offset: 0x79C19, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x2724, symBinAddr: 0x4D74, symSize: 0x10 } + - { offsetInCU: 0x1BB5, offset: 0x79C2D, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x2734, symBinAddr: 0x4D84, symSize: 0x8 } + - { offsetInCU: 0x1BC9, offset: 0x79C41, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2760, symBinAddr: 0x4DB0, symSize: 0x40 } + - { offsetInCU: 0x1BFD, offset: 0x79C75, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x27E4, symBinAddr: 0x4E34, symSize: 0x40 } + - { offsetInCU: 0x1C3B, offset: 0x79CB3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2824, symBinAddr: 0x4E74, symSize: 0x28 } + - { offsetInCU: 0x1C6F, offset: 0x79CE7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x28A4, symBinAddr: 0x4EF4, symSize: 0x3C } + - { offsetInCU: 0x1CA3, offset: 0x79D1B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x290C, symBinAddr: 0x4F5C, symSize: 0x30 } + - { offsetInCU: 0x1CDF, offset: 0x79D57, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_TA', symObjAddr: 0x2978, symBinAddr: 0x4FC8, symSize: 0x10 } + - { offsetInCU: 0x1CF3, offset: 0x79D6B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2988, symBinAddr: 0x4FD8, symSize: 0x40 } + - { offsetInCU: 0x21C0, offset: 0x7A238, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZ', symObjAddr: 0x0, symBinAddr: 0x2650, symSize: 0x4 } + - { offsetInCU: 0x21DB, offset: 0x7A253, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x3C, symBinAddr: 0x268C, symSize: 0x4 } + - { offsetInCU: 0x21F6, offset: 0x7A26E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0xB0, symBinAddr: 0x2700, symSize: 0x4 } + - { offsetInCU: 0x2217, offset: 0x7A28F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0xF8, symBinAddr: 0x2748, symSize: 0x4 } + - { offsetInCU: 0x2232, offset: 0x7A2AA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0x14C, symBinAddr: 0x279C, symSize: 0x4 } + - { offsetInCU: 0x224D, offset: 0x7A2C5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x1B8, symBinAddr: 0x2808, symSize: 0x4 } + - { offsetInCU: 0x2268, offset: 0x7A2E0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x254, symBinAddr: 0x28A4, symSize: 0x4 } + - { offsetInCU: 0x22F6, offset: 0x7A36E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x26C, symBinAddr: 0x28BC, symSize: 0x4 } + - { offsetInCU: 0x2375, offset: 0x7A3ED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZ', symObjAddr: 0x284, symBinAddr: 0x28D4, symSize: 0x44 } + - { offsetInCU: 0x24B3, offset: 0x7A52B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZ', symObjAddr: 0x318, symBinAddr: 0x2968, symSize: 0x4C } + - { offsetInCU: 0x25FC, offset: 0x7A674, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZ', symObjAddr: 0x3BC, symBinAddr: 0x2A0C, symSize: 0x48 } + - { offsetInCU: 0x2744, offset: 0x7A7BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZ', symObjAddr: 0x45C, symBinAddr: 0x2AAC, symSize: 0x50 } + - { offsetInCU: 0x28A1, offset: 0x7A919, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZ', symObjAddr: 0x50C, symBinAddr: 0x2B5C, symSize: 0x4 } + - { offsetInCU: 0x2913, offset: 0x7A98B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZ', symObjAddr: 0x518, symBinAddr: 0x2B68, symSize: 0x4 } + - { offsetInCU: 0x2956, offset: 0x7A9CE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZ', symObjAddr: 0x524, symBinAddr: 0x2B74, symSize: 0x14 } + - { offsetInCU: 0x299B, offset: 0x7AA13, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZ', symObjAddr: 0x540, symBinAddr: 0x2B90, symSize: 0x4 } + - { offsetInCU: 0x29DE, offset: 0x7AA56, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZ', symObjAddr: 0x54C, symBinAddr: 0x2B9C, symSize: 0x4 } + - { offsetInCU: 0x2A21, offset: 0x7AA99, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZ', symObjAddr: 0x558, symBinAddr: 0x2BA8, symSize: 0x4 } + - { offsetInCU: 0x2A64, offset: 0x7AADC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZ', symObjAddr: 0x564, symBinAddr: 0x2BB4, symSize: 0x8 } + - { offsetInCU: 0x2B4B, offset: 0x7ABC3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ', symObjAddr: 0x590, symBinAddr: 0x2BE0, symSize: 0x4 } + - { offsetInCU: 0x2BCA, offset: 0x7AC42, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZ', symObjAddr: 0x5A8, symBinAddr: 0x2BF8, symSize: 0x4 } + - { offsetInCU: 0x2C0D, offset: 0x7AC85, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZ', symObjAddr: 0x5B4, symBinAddr: 0x2C04, symSize: 0x58 } + - { offsetInCU: 0x2CCE, offset: 0x7AD46, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZ', symObjAddr: 0x680, symBinAddr: 0x2CD0, symSize: 0x4 } + - { offsetInCU: 0x2CE2, offset: 0x7AD5A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_', symObjAddr: 0x684, symBinAddr: 0x2CD4, symSize: 0x190 } + - { offsetInCU: 0x2D82, offset: 0x7ADFA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZ', symObjAddr: 0x92C, symBinAddr: 0x2F7C, symSize: 0x2C } + - { offsetInCU: 0x2D96, offset: 0x7AE0E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_', symObjAddr: 0x958, symBinAddr: 0x2FA8, symSize: 0x1C4 } + - { offsetInCU: 0x2E80, offset: 0x7AEF8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZ', symObjAddr: 0xC08, symBinAddr: 0x3258, symSize: 0x2C } + - { offsetInCU: 0x2E94, offset: 0x7AF0C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_', symObjAddr: 0xC34, symBinAddr: 0x3284, symSize: 0x23C } + - { offsetInCU: 0x2F48, offset: 0x7AFC0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZ', symObjAddr: 0xF08, symBinAddr: 0x3558, symSize: 0x4 } + - { offsetInCU: 0x2F5C, offset: 0x7AFD4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_', symObjAddr: 0xF0C, symBinAddr: 0x355C, symSize: 0x38C } + - { offsetInCU: 0x31F3, offset: 0x7B26B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZ', symObjAddr: 0x1370, symBinAddr: 0x39C0, symSize: 0x4 } + - { offsetInCU: 0x320E, offset: 0x7B286, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfC', symObjAddr: 0x13A8, symBinAddr: 0x39F8, symSize: 0x20 } + - { offsetInCU: 0x3222, offset: 0x7B29A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfc', symObjAddr: 0x13C8, symBinAddr: 0x3A18, symSize: 0x30 } + - { offsetInCU: 0x3258, offset: 0x7B2D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfD', symObjAddr: 0x1434, symBinAddr: 0x3A84, symSize: 0x30 } + - { offsetInCU: 0x4F, offset: 0x7B508, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LLSo7GLKViewCvpZ', symObjAddr: 0x5520, symBinAddr: 0x115FD40, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0x7B522, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15_shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvpZ', symObjAddr: 0x5528, symBinAddr: 0x115FD48, symSize: 0x0 } + - { offsetInCU: 0x83, offset: 0x7B53C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5storeSo19NSMutableDictionaryCvpZ', symObjAddr: 0x5530, symBinAddr: 0x115FD50, symSize: 0x0 } + - { offsetInCU: 0x9D, offset: 0x7B556, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LLSo10NSMapTableCySo8NSStringCACGvpZ', symObjAddr: 0x5538, symBinAddr: 0x115FD58, symSize: 0x0 } + - { offsetInCU: 0xAB, offset: 0x7B564, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0x0, symBinAddr: 0x5100, symSize: 0x40 } + - { offsetInCU: 0xF0, offset: 0x7B5A9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5store_WZ', symObjAddr: 0x40, symBinAddr: 0x5140, symSize: 0x30 } + - { offsetInCU: 0x135, offset: 0x7B5EE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0xA8, symBinAddr: 0x51A8, symSize: 0x40 } + - { offsetInCU: 0x187, offset: 0x7B640, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x194, symBinAddr: 0x5294, symSize: 0x10 } + - { offsetInCU: 0x1A7, offset: 0x7B660, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x194, symBinAddr: 0x5294, symSize: 0x10 } + - { offsetInCU: 0x1DD, offset: 0x7B696, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x1A4, symBinAddr: 0x52A4, symSize: 0x10 } + - { offsetInCU: 0x1FD, offset: 0x7B6B6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x1A4, symBinAddr: 0x52A4, symSize: 0x10 } + - { offsetInCU: 0x236, offset: 0x7B6EF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x1B4, symBinAddr: 0x52B4, symSize: 0x10 } + - { offsetInCU: 0x256, offset: 0x7B70F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x1B4, symBinAddr: 0x52B4, symSize: 0x10 } + - { offsetInCU: 0x28C, offset: 0x7B745, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x1C4, symBinAddr: 0x52C4, symSize: 0x10 } + - { offsetInCU: 0x2AC, offset: 0x7B765, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x1C4, symBinAddr: 0x52C4, symSize: 0x10 } + - { offsetInCU: 0x2E5, offset: 0x7B79E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvgTo', symObjAddr: 0x29C, symBinAddr: 0x539C, symSize: 0x44 } + - { offsetInCU: 0x322, offset: 0x7B7DB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvsTo', symObjAddr: 0x324, symBinAddr: 0x5424, symSize: 0x30 } + - { offsetInCU: 0x3B1, offset: 0x7B86A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvgTo', symObjAddr: 0x578, symBinAddr: 0x5678, symSize: 0x44 } + - { offsetInCU: 0x409, offset: 0x7B8C2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvsTo', symObjAddr: 0x600, symBinAddr: 0x5700, symSize: 0x48 } + - { offsetInCU: 0x464, offset: 0x7B91D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvgTo', symObjAddr: 0x648, symBinAddr: 0x5748, symSize: 0x44 } + - { offsetInCU: 0x4BC, offset: 0x7B975, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvsTo', symObjAddr: 0x6D0, symBinAddr: 0x57D0, symSize: 0x48 } + - { offsetInCU: 0x517, offset: 0x7B9D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0x718, symBinAddr: 0x5818, symSize: 0x10 } + - { offsetInCU: 0x537, offset: 0x7B9F0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0x718, symBinAddr: 0x5818, symSize: 0x10 } + - { offsetInCU: 0x56D, offset: 0x7BA26, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0x728, symBinAddr: 0x5828, symSize: 0x10 } + - { offsetInCU: 0x58D, offset: 0x7BA46, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0x728, symBinAddr: 0x5828, symSize: 0x10 } + - { offsetInCU: 0x5C6, offset: 0x7BA7F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0x738, symBinAddr: 0x5838, symSize: 0x10 } + - { offsetInCU: 0x5E6, offset: 0x7BA9F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0x738, symBinAddr: 0x5838, symSize: 0x10 } + - { offsetInCU: 0x61E, offset: 0x7BAD7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvsTo', symObjAddr: 0x748, symBinAddr: 0x5848, symSize: 0x34 } + - { offsetInCU: 0x677, offset: 0x7BB30, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x77C, symBinAddr: 0x587C, symSize: 0x10 } + - { offsetInCU: 0x697, offset: 0x7BB50, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x77C, symBinAddr: 0x587C, symSize: 0x10 } + - { offsetInCU: 0x6CF, offset: 0x7BB88, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvsTo', symObjAddr: 0x78C, symBinAddr: 0x588C, symSize: 0x34 } + - { offsetInCU: 0x728, offset: 0x7BBE1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x7C0, symBinAddr: 0x58C0, symSize: 0x10 } + - { offsetInCU: 0x748, offset: 0x7BC01, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x7C0, symBinAddr: 0x58C0, symSize: 0x10 } + - { offsetInCU: 0x77E, offset: 0x7BC37, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x7D0, symBinAddr: 0x58D0, symSize: 0x10 } + - { offsetInCU: 0x79E, offset: 0x7BC57, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x7D0, symBinAddr: 0x58D0, symSize: 0x10 } + - { offsetInCU: 0x7D7, offset: 0x7BC90, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvgTo', symObjAddr: 0x7E0, symBinAddr: 0x58E0, symSize: 0x10 } + - { offsetInCU: 0x7F7, offset: 0x7BCB0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvgTo', symObjAddr: 0x7E0, symBinAddr: 0x58E0, symSize: 0x10 } + - { offsetInCU: 0x82D, offset: 0x7BCE6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvsTo', symObjAddr: 0x7F0, symBinAddr: 0x58F0, symSize: 0x10 } + - { offsetInCU: 0x84D, offset: 0x7BD06, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvsTo', symObjAddr: 0x7F0, symBinAddr: 0x58F0, symSize: 0x10 } + - { offsetInCU: 0x870, offset: 0x7BD29, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivgTo', symObjAddr: 0x800, symBinAddr: 0x5900, symSize: 0x34 } + - { offsetInCU: 0x8A2, offset: 0x7BD5B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivgTo', symObjAddr: 0x904, symBinAddr: 0x5A04, symSize: 0x34 } + - { offsetInCU: 0x8EA, offset: 0x7BDA3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvgTo', symObjAddr: 0xA08, symBinAddr: 0x5B08, symSize: 0x20 } + - { offsetInCU: 0x952, offset: 0x7BE0B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvgTo', symObjAddr: 0xA4C, symBinAddr: 0x5B4C, symSize: 0x20 } + - { offsetInCU: 0x9F1, offset: 0x7BEAA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btFTo', symObjAddr: 0xAB4, symBinAddr: 0x5BB4, symSize: 0xC4 } + - { offsetInCU: 0xAB4, offset: 0x7BF6D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VFTo', symObjAddr: 0xD10, symBinAddr: 0x5E10, symSize: 0x30 } + - { offsetInCU: 0xB64, offset: 0x7C01D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x15B0, symBinAddr: 0x66B0, symSize: 0xC4 } + - { offsetInCU: 0xBCE, offset: 0x7C087, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtFTo', symObjAddr: 0x18CC, symBinAddr: 0x69CC, symSize: 0xB0 } + - { offsetInCU: 0xC0B, offset: 0x7C0C4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x1A3C, symBinAddr: 0x6B3C, symSize: 0xB8 } + - { offsetInCU: 0xC83, offset: 0x7C13C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbFTo', symObjAddr: 0x1BD8, symBinAddr: 0x6CD8, symSize: 0x3C } + - { offsetInCU: 0xCB6, offset: 0x7C16F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1C14, symBinAddr: 0x6D14, symSize: 0x10 } + - { offsetInCU: 0xCD6, offset: 0x7C18F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1C14, symBinAddr: 0x6D14, symSize: 0x10 } + - { offsetInCU: 0xD10, offset: 0x7C1C9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvsTo', symObjAddr: 0x1C24, symBinAddr: 0x6D24, symSize: 0x34 } + - { offsetInCU: 0xD6B, offset: 0x7C224, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyFTo', symObjAddr: 0x1CA0, symBinAddr: 0x6DA0, symSize: 0x48 } + - { offsetInCU: 0xE05, offset: 0x7C2BE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VFTo', symObjAddr: 0x1D34, symBinAddr: 0x6E34, symSize: 0x64 } + - { offsetInCU: 0xECA, offset: 0x7C383, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VFTo', symObjAddr: 0x1DF0, symBinAddr: 0x6EF0, symSize: 0x94 } + - { offsetInCU: 0xF57, offset: 0x7C410, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC23enterBackgroundListeneryycSgvsTo', symObjAddr: 0x1EC4, symBinAddr: 0x6FC4, symSize: 0x6C } + - { offsetInCU: 0xFB9, offset: 0x7C472, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC20becomeActiveListeneryycSgvsTo', symObjAddr: 0x1FD4, symBinAddr: 0x70D4, symSize: 0x6C } + - { offsetInCU: 0x1016, offset: 0x7C4CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvgTo', symObjAddr: 0x2040, symBinAddr: 0x7140, symSize: 0xB0 } + - { offsetInCU: 0x1068, offset: 0x7C521, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvsTo', symObjAddr: 0x21C0, symBinAddr: 0x72C0, symSize: 0x94 } + - { offsetInCU: 0x10FA, offset: 0x7C5B3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x2E5C, symBinAddr: 0x7F5C, symSize: 0x28 } + - { offsetInCU: 0x114F, offset: 0x7C608, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x38A4, symBinAddr: 0x89A4, symSize: 0x20 } + - { offsetInCU: 0x1182, offset: 0x7C63B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x38C4, symBinAddr: 0x89C4, symSize: 0x10 } + - { offsetInCU: 0x11A2, offset: 0x7C65B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x38C4, symBinAddr: 0x89C4, symSize: 0x10 } + - { offsetInCU: 0x11DA, offset: 0x7C693, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvsTo', symObjAddr: 0x38D4, symBinAddr: 0x89D4, symSize: 0x34 } + - { offsetInCU: 0x1248, offset: 0x7C701, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvgTo', symObjAddr: 0x3988, symBinAddr: 0x8A88, symSize: 0x20 } + - { offsetInCU: 0x12A2, offset: 0x7C75B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvsTo', symObjAddr: 0x39A8, symBinAddr: 0x8AA8, symSize: 0x34 } + - { offsetInCU: 0x1302, offset: 0x7C7BB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgFTo', symObjAddr: 0x3A0C, symBinAddr: 0x8B0C, symSize: 0x34 } + - { offsetInCU: 0x1446, offset: 0x7C8FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFTo', symObjAddr: 0x3D58, symBinAddr: 0x8E58, symSize: 0x28 } + - { offsetInCU: 0x1479, offset: 0x7C932, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfDTo', symObjAddr: 0x4084, symBinAddr: 0x9184, symSize: 0x24 } + - { offsetInCU: 0x14B4, offset: 0x7C96D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTo', symObjAddr: 0x4170, symBinAddr: 0x9270, symSize: 0x34 } + - { offsetInCU: 0x14E7, offset: 0x7C9A0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvgZTf4d_n', symObjAddr: 0x4B04, symBinAddr: 0x9C04, symSize: 0x298 } + - { offsetInCU: 0x1664, offset: 0x7CB1D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTf4nnd_n', symObjAddr: 0x4E60, symBinAddr: 0x9F60, symSize: 0xA0 } + - { offsetInCU: 0x18E0, offset: 0x7CD99, size: 0x8, addend: 0x0, symName: '_$sIeg_IeyB_TR', symObjAddr: 0x1E98, symBinAddr: 0x6F98, symSize: 0x2C } + - { offsetInCU: 0x18F8, offset: 0x7CDB1, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_So8NSStringCABIeyByy_TR', symObjAddr: 0x2148, symBinAddr: 0x7248, symSize: 0x78 } + - { offsetInCU: 0x1910, offset: 0x7CDC9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTK', symObjAddr: 0x22B0, symBinAddr: 0x73B0, symSize: 0x94 } + - { offsetInCU: 0x1948, offset: 0x7CE01, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTk', symObjAddr: 0x2344, symBinAddr: 0x7444, symSize: 0xB8 } + - { offsetInCU: 0x198A, offset: 0x7CE43, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TR', symObjAddr: 0x23FC, symBinAddr: 0x74FC, symSize: 0x6C } + - { offsetInCU: 0x1A3A, offset: 0x7CEF3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfETo', symObjAddr: 0x40A8, symBinAddr: 0x91A8, symSize: 0xC4 } + - { offsetInCU: 0x1A6A, offset: 0x7CF23, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOy', symObjAddr: 0x41A4, symBinAddr: 0x92A4, symSize: 0x10 } + - { offsetInCU: 0x1A7E, offset: 0x7CF37, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCMa', symObjAddr: 0x41B4, symBinAddr: 0x92B4, symSize: 0x20 } + - { offsetInCU: 0x1A92, offset: 0x7CF4B, size: 0x8, addend: 0x0, symName: '_$ss29getContiguousArrayStorageType3fors01_bcD0CyxGmxm_tlFSo18NSLayoutConstraintC_Tgm5', symObjAddr: 0x41D4, symBinAddr: 0x92D4, symSize: 0x64 } + - { offsetInCU: 0x1C99, offset: 0x7D152, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x4D9C, symBinAddr: 0x9E9C, symSize: 0x40 } + - { offsetInCU: 0x1CAD, offset: 0x7D166, size: 0x8, addend: 0x0, symName: '_$sypSgWOh', symObjAddr: 0x4DDC, symBinAddr: 0x9EDC, symSize: 0x40 } + - { offsetInCU: 0x1CC1, offset: 0x7D17A, size: 0x8, addend: 0x0, symName: ___swift_project_boxed_opaque_existential_0, symObjAddr: 0x4E1C, symBinAddr: 0x9F1C, symSize: 0x24 } + - { offsetInCU: 0x1CD5, offset: 0x7D18E, size: 0x8, addend: 0x0, symName: ___swift_destroy_boxed_opaque_existential_0, symObjAddr: 0x4E40, symBinAddr: 0x9F40, symSize: 0x20 } + - { offsetInCU: 0x1CF4, offset: 0x7D1AD, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSo19UIGestureRecognizerCIeyByy_SSADIeggg_TRTA', symObjAddr: 0x532C, symBinAddr: 0xA42C, symSize: 0x48 } + - { offsetInCU: 0x1D1D, offset: 0x7D1D6, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x5374, symBinAddr: 0xA474, symSize: 0x10 } + - { offsetInCU: 0x1D31, offset: 0x7D1EA, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x5384, symBinAddr: 0xA484, symSize: 0x8 } + - { offsetInCU: 0x1D45, offset: 0x7D1FE, size: 0x8, addend: 0x0, symName: '_$sIeg_SgWOe', symObjAddr: 0x538C, symBinAddr: 0xA48C, symSize: 0x10 } + - { offsetInCU: 0x1D64, offset: 0x7D21D, size: 0x8, addend: 0x0, symName: '_$sIeyB_Ieg_TRTA', symObjAddr: 0x539C, symBinAddr: 0xA49C, symSize: 0xC } + - { offsetInCU: 0x1D8D, offset: 0x7D246, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TRTA', symObjAddr: 0x53CC, symBinAddr: 0xA4CC, symSize: 0x8 } + - { offsetInCU: 0x1DAC, offset: 0x7D265, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SSABytIegnnr_TRTA', symObjAddr: 0x53D4, symBinAddr: 0xA4D4, symSize: 0x30 } + - { offsetInCU: 0x1DD5, offset: 0x7D28E, size: 0x8, addend: 0x0, symName: '_$sypWOb', symObjAddr: 0x5404, symBinAddr: 0xA504, symSize: 0x10 } + - { offsetInCU: 0x1DE9, offset: 0x7D2A2, size: 0x8, addend: 0x0, symName: '_$sypWOc', symObjAddr: 0x544C, symBinAddr: 0xA54C, symSize: 0x3C } + - { offsetInCU: 0x206E, offset: 0x7D527, size: 0x8, addend: 0x0, symName: '_$sSD17dictionaryLiteralSDyxq_Gx_q_td_tcfCSS_ypTgm5Tf4g_n', symObjAddr: 0x49F4, symBinAddr: 0x9AF4, symSize: 0x110 } + - { offsetInCU: 0x251C, offset: 0x7D9D5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvg', symObjAddr: 0x2E0, symBinAddr: 0x53E0, symSize: 0x44 } + - { offsetInCU: 0x254F, offset: 0x7DA08, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvs', symObjAddr: 0x354, symBinAddr: 0x5454, symSize: 0xEC } + - { offsetInCU: 0x259B, offset: 0x7DA54, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM', symObjAddr: 0x440, symBinAddr: 0x5540, symSize: 0x58 } + - { offsetInCU: 0x25C0, offset: 0x7DA79, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM.resume.0', symObjAddr: 0x498, symBinAddr: 0x5598, symSize: 0xE0 } + - { offsetInCU: 0x2601, offset: 0x7DABA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64Vvg', symObjAddr: 0x5BC, symBinAddr: 0x56BC, symSize: 0x44 } + - { offsetInCU: 0x2659, offset: 0x7DB12, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg', symObjAddr: 0x68C, symBinAddr: 0x578C, symSize: 0x44 } + - { offsetInCU: 0x27C7, offset: 0x7DC80, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivg', symObjAddr: 0x834, symBinAddr: 0x5934, symSize: 0xD0 } + - { offsetInCU: 0x28EC, offset: 0x7DDA5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivg', symObjAddr: 0x938, symBinAddr: 0x5A38, symSize: 0xD0 } + - { offsetInCU: 0x2A32, offset: 0x7DEEB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvg', symObjAddr: 0xA28, symBinAddr: 0x5B28, symSize: 0x24 } + - { offsetInCU: 0x2A7A, offset: 0x7DF33, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvg', symObjAddr: 0xA6C, symBinAddr: 0x5B6C, symSize: 0x24 } + - { offsetInCU: 0x2AAE, offset: 0x7DF67, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btF', symObjAddr: 0xA90, symBinAddr: 0x5B90, symSize: 0x24 } + - { offsetInCU: 0x2C3C, offset: 0x7E0F5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VF', symObjAddr: 0xB78, symBinAddr: 0x5C78, symSize: 0x198 } + - { offsetInCU: 0x302F, offset: 0x7E4E8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btF', symObjAddr: 0xD40, symBinAddr: 0x5E40, symSize: 0x870 } + - { offsetInCU: 0x3832, offset: 0x7ECEB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtF', symObjAddr: 0x1674, symBinAddr: 0x6774, symSize: 0x258 } + - { offsetInCU: 0x3C64, offset: 0x7F11D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x197C, symBinAddr: 0x6A7C, symSize: 0xC0 } + - { offsetInCU: 0x3CF5, offset: 0x7F1AE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbF', symObjAddr: 0x1AF4, symBinAddr: 0x6BF4, symSize: 0xE4 } + - { offsetInCU: 0x3E50, offset: 0x7F309, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyF', symObjAddr: 0x1C58, symBinAddr: 0x6D58, symSize: 0x48 } + - { offsetInCU: 0x3ED6, offset: 0x7F38F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF', symObjAddr: 0x1CE8, symBinAddr: 0x6DE8, symSize: 0x4C } + - { offsetInCU: 0x3FF7, offset: 0x7F4B0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VF', symObjAddr: 0x1D98, symBinAddr: 0x6E98, symSize: 0x58 } + - { offsetInCU: 0x40ED, offset: 0x7F5A6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvg', symObjAddr: 0x20F0, symBinAddr: 0x71F0, symSize: 0x58 } + - { offsetInCU: 0x4139, offset: 0x7F5F2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvs', symObjAddr: 0x2254, symBinAddr: 0x7354, symSize: 0x5C } + - { offsetInCU: 0x4162, offset: 0x7F61B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM', symObjAddr: 0x2468, symBinAddr: 0x7568, symSize: 0x44 } + - { offsetInCU: 0x4188, offset: 0x7F641, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM.resume.0', symObjAddr: 0x24AC, symBinAddr: 0x75AC, symSize: 0x4 } + - { offsetInCU: 0x424A, offset: 0x7F703, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x24B0, symBinAddr: 0x75B0, symSize: 0x9AC } + - { offsetInCU: 0x444F, offset: 0x7F908, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfC', symObjAddr: 0x2E84, symBinAddr: 0x7F84, symSize: 0x50 } + - { offsetInCU: 0x4478, offset: 0x7F931, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfc', symObjAddr: 0x2ED4, symBinAddr: 0x7FD4, symSize: 0x9D0 } + - { offsetInCU: 0x469E, offset: 0x7FB57, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvW', symObjAddr: 0x3908, symBinAddr: 0x8A08, symSize: 0x80 } + - { offsetInCU: 0x4794, offset: 0x7FC4D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgF', symObjAddr: 0x39DC, symBinAddr: 0x8ADC, symSize: 0x30 } + - { offsetInCU: 0x4832, offset: 0x7FCEB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6resize33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x3A40, symBinAddr: 0x8B40, symSize: 0x144 } + - { offsetInCU: 0x4A33, offset: 0x7FEEC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyF', symObjAddr: 0x3B84, symBinAddr: 0x8C84, symSize: 0x1D4 } + - { offsetInCU: 0x4CB0, offset: 0x80169, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfD', symObjAddr: 0x3D80, symBinAddr: 0x8E80, symSize: 0x304 } + - { offsetInCU: 0x4D40, offset: 0x801F9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZ', symObjAddr: 0x416C, symBinAddr: 0x926C, symSize: 0x4 } + - { offsetInCU: 0x4D68, offset: 0x80221, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4findys10_HashTableV6BucketV6bucket_Sb5foundtxSHRzlFSS_Tg5', symObjAddr: 0x4238, symBinAddr: 0x9338, symSize: 0x64 } + - { offsetInCU: 0x4DC2, offset: 0x8027B, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV7_insert2at3key5valueys10_HashTableV6BucketV_xnq_ntFSS_ypTg5', symObjAddr: 0x429C, symBinAddr: 0x939C, symSize: 0x6C } + - { offsetInCU: 0x4E42, offset: 0x802FB, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV12mutatingFind_8isUniques10_HashTableV6BucketV6bucket_Sb5foundtx_SbtFSS_ypTg5', symObjAddr: 0x4308, symBinAddr: 0x9408, symSize: 0xD8 } + - { offsetInCU: 0x4E7F, offset: 0x80338, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4find_9hashValues10_HashTableV6BucketV6bucket_Sb5foundtx_SitSHRzlFSS_Tg5', symObjAddr: 0x43E0, symBinAddr: 0x94E0, symSize: 0xE0 } + - { offsetInCU: 0x4EFA, offset: 0x803B3, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV4copyyyFSS_ypTg5', symObjAddr: 0x44C0, symBinAddr: 0x95C0, symSize: 0x1F4 } + - { offsetInCU: 0x4FB6, offset: 0x8046F, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV20_copyOrMoveAndResize8capacity12moveElementsySi_SbtFSS_ypTg5', symObjAddr: 0x46B4, symBinAddr: 0x97B4, symSize: 0x340 } + - { offsetInCU: 0x27, offset: 0x806BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xA5EC, symSize: 0x10 } + - { offsetInCU: 0x62, offset: 0x806F7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCMa', symObjAddr: 0x10, symBinAddr: 0xA5FC, symSize: 0x20 } + - { offsetInCU: 0x1AF, offset: 0x80844, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xA5EC, symSize: 0x10 } + - { offsetInCU: 0x65, offset: 0x808D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvgTo', symObjAddr: 0x0, symBinAddr: 0xA61C, symSize: 0x10 } + - { offsetInCU: 0x85, offset: 0x808F3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvgTo', symObjAddr: 0x0, symBinAddr: 0xA61C, symSize: 0x10 } + - { offsetInCU: 0xBB, offset: 0x80929, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvsTo', symObjAddr: 0x10, symBinAddr: 0xA62C, symSize: 0x10 } + - { offsetInCU: 0xDB, offset: 0x80949, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvsTo', symObjAddr: 0x10, symBinAddr: 0xA62C, symSize: 0x10 } + - { offsetInCU: 0x114, offset: 0x80982, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvgTo', symObjAddr: 0x20, symBinAddr: 0xA63C, symSize: 0x44 } + - { offsetInCU: 0x16C, offset: 0x809DA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvsTo', symObjAddr: 0x64, symBinAddr: 0xA680, symSize: 0x48 } + - { offsetInCU: 0x1C7, offset: 0x80A35, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvgTo', symObjAddr: 0xAC, symBinAddr: 0xA6C8, symSize: 0x44 } + - { offsetInCU: 0x21F, offset: 0x80A8D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvsTo', symObjAddr: 0xF0, symBinAddr: 0xA70C, symSize: 0x48 } + - { offsetInCU: 0x27A, offset: 0x80AE8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivgTo', symObjAddr: 0x138, symBinAddr: 0xA754, symSize: 0x10 } + - { offsetInCU: 0x29A, offset: 0x80B08, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivgTo', symObjAddr: 0x138, symBinAddr: 0xA754, symSize: 0x10 } + - { offsetInCU: 0x2D0, offset: 0x80B3E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivsTo', symObjAddr: 0x148, symBinAddr: 0xA764, symSize: 0x10 } + - { offsetInCU: 0x2F0, offset: 0x80B5E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivsTo', symObjAddr: 0x148, symBinAddr: 0xA764, symSize: 0x10 } + - { offsetInCU: 0x329, offset: 0x80B97, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivgTo', symObjAddr: 0x158, symBinAddr: 0xA774, symSize: 0x10 } + - { offsetInCU: 0x349, offset: 0x80BB7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivgTo', symObjAddr: 0x158, symBinAddr: 0xA774, symSize: 0x10 } + - { offsetInCU: 0x37F, offset: 0x80BED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivsTo', symObjAddr: 0x168, symBinAddr: 0xA784, symSize: 0x10 } + - { offsetInCU: 0x39F, offset: 0x80C0D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivsTo', symObjAddr: 0x168, symBinAddr: 0xA784, symSize: 0x10 } + - { offsetInCU: 0x3D8, offset: 0x80C46, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvgTo', symObjAddr: 0x178, symBinAddr: 0xA794, symSize: 0x44 } + - { offsetInCU: 0x430, offset: 0x80C9E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvsTo', symObjAddr: 0x1BC, symBinAddr: 0xA7D8, symSize: 0x48 } + - { offsetInCU: 0x48B, offset: 0x80CF9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvgTo', symObjAddr: 0x204, symBinAddr: 0xA820, symSize: 0x10 } + - { offsetInCU: 0x4AB, offset: 0x80D19, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvgTo', symObjAddr: 0x204, symBinAddr: 0xA820, symSize: 0x10 } + - { offsetInCU: 0x4E1, offset: 0x80D4F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvsTo', symObjAddr: 0x214, symBinAddr: 0xA830, symSize: 0x10 } + - { offsetInCU: 0x501, offset: 0x80D6F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvsTo', symObjAddr: 0x214, symBinAddr: 0xA830, symSize: 0x10 } + - { offsetInCU: 0x53A, offset: 0x80DA8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvgTo', symObjAddr: 0x224, symBinAddr: 0xA840, symSize: 0x10 } + - { offsetInCU: 0x55A, offset: 0x80DC8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvgTo', symObjAddr: 0x224, symBinAddr: 0xA840, symSize: 0x10 } + - { offsetInCU: 0x590, offset: 0x80DFE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvsTo', symObjAddr: 0x234, symBinAddr: 0xA850, symSize: 0x10 } + - { offsetInCU: 0x5B0, offset: 0x80E1E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvsTo', symObjAddr: 0x234, symBinAddr: 0xA850, symSize: 0x10 } + - { offsetInCU: 0x5E9, offset: 0x80E57, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvgTo', symObjAddr: 0x244, symBinAddr: 0xA860, symSize: 0x48 } + - { offsetInCU: 0x63F, offset: 0x80EAD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvsTo', symObjAddr: 0x28C, symBinAddr: 0xA8A8, symSize: 0x40 } + - { offsetInCU: 0x682, offset: 0x80EF0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13SIZE_OF_FLOATSivgZTo', symObjAddr: 0x2CC, symBinAddr: 0xA8E8, symSize: 0x8 } + - { offsetInCU: 0x69E, offset: 0x80F0C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13VERTEX_SHADERSSvgZTo', symObjAddr: 0x2D4, symBinAddr: 0xA8F0, symSize: 0x2C } + - { offsetInCU: 0x6D0, offset: 0x80F3E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvgTo', symObjAddr: 0x300, symBinAddr: 0xA91C, symSize: 0x10 } + - { offsetInCU: 0x6F0, offset: 0x80F5E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvgTo', symObjAddr: 0x300, symBinAddr: 0xA91C, symSize: 0x10 } + - { offsetInCU: 0x728, offset: 0x80F96, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvsTo', symObjAddr: 0x310, symBinAddr: 0xA92C, symSize: 0x34 } + - { offsetInCU: 0x781, offset: 0x80FEF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvgTo', symObjAddr: 0x418, symBinAddr: 0xAA34, symSize: 0x10 } + - { offsetInCU: 0x7A1, offset: 0x8100F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvgTo', symObjAddr: 0x418, symBinAddr: 0xAA34, symSize: 0x10 } + - { offsetInCU: 0x7D7, offset: 0x81045, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvsTo', symObjAddr: 0x428, symBinAddr: 0xAA44, symSize: 0x10 } + - { offsetInCU: 0x7F7, offset: 0x81065, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvsTo', symObjAddr: 0x428, symBinAddr: 0xAA44, symSize: 0x10 } + - { offsetInCU: 0x846, offset: 0x810B4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfcTo', symObjAddr: 0x5A4, symBinAddr: 0xAB80, symSize: 0x20 } + - { offsetInCU: 0x878, offset: 0x810E6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyFTo', symObjAddr: 0x708, symBinAddr: 0xACE4, symSize: 0x28 } + - { offsetInCU: 0x8D0, offset: 0x8113E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTo', symObjAddr: 0x744, symBinAddr: 0xAD20, symSize: 0x88 } + - { offsetInCU: 0x934, offset: 0x811A2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTo', symObjAddr: 0x7CC, symBinAddr: 0xADA8, symSize: 0x7C } + - { offsetInCU: 0x9D6, offset: 0x81244, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyFTo', symObjAddr: 0xBF4, symBinAddr: 0xB1D0, symSize: 0x28 } + - { offsetInCU: 0xAC0, offset: 0x8132E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCMa', symObjAddr: 0x584, symBinAddr: 0xAB60, symSize: 0x20 } + - { offsetInCU: 0xB34, offset: 0x813A2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfETo', symObjAddr: 0xC4C, symBinAddr: 0xB228, symSize: 0x58 } + - { offsetInCU: 0x123B, offset: 0x81AA9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfC', symObjAddr: 0x438, symBinAddr: 0xAA54, symSize: 0x20 } + - { offsetInCU: 0x1255, offset: 0x81AC3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfc', symObjAddr: 0x458, symBinAddr: 0xAA74, symSize: 0xEC } + - { offsetInCU: 0x128D, offset: 0x81AFB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyF', symObjAddr: 0x5C4, symBinAddr: 0xABA0, symSize: 0x144 } + - { offsetInCU: 0x1448, offset: 0x81CB6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtF', symObjAddr: 0x730, symBinAddr: 0xAD0C, symSize: 0x14 } + - { offsetInCU: 0x14F9, offset: 0x81D67, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyF', symObjAddr: 0x848, symBinAddr: 0xAE24, symSize: 0x3AC } + - { offsetInCU: 0x1869, offset: 0x820D7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfD', symObjAddr: 0xC1C, symBinAddr: 0xB1F8, symSize: 0x30 } + - { offsetInCU: 0x1954, offset: 0x821C2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTf4ddnndnndn_n', symObjAddr: 0xCA4, symBinAddr: 0xB280, symSize: 0x65C } + - { offsetInCU: 0x2152, offset: 0x829C0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTf4nnnnndn_n', symObjAddr: 0x1344, symBinAddr: 0xB920, symSize: 0x6C8 } + - { offsetInCU: 0x10C, offset: 0x83380, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfcTo', symObjAddr: 0xED4, symBinAddr: 0xCE94, symSize: 0x68 } + - { offsetInCU: 0x19C, offset: 0x83410, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCfETo', symObjAddr: 0xF48, symBinAddr: 0xCF08, symSize: 0x10 } + - { offsetInCU: 0x1CB, offset: 0x8343F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6handleyySo19UIGestureRecognizerCFTo', symObjAddr: 0xF58, symBinAddr: 0xCF18, symSize: 0x4 } + - { offsetInCU: 0x368, offset: 0x835DC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCACycfcTo', symObjAddr: 0x16DC, symBinAddr: 0xD69C, symSize: 0x2C } + - { offsetInCU: 0x5D4, offset: 0x83848, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCfETo', symObjAddr: 0x1744, symBinAddr: 0xD704, symSize: 0x68 } + - { offsetInCU: 0x603, offset: 0x83877, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCMa', symObjAddr: 0x17AC, symBinAddr: 0xD76C, symSize: 0x20 } + - { offsetInCU: 0x617, offset: 0x8388B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCMa', symObjAddr: 0x17CC, symBinAddr: 0xD78C, symSize: 0x20 } + - { offsetInCU: 0x62B, offset: 0x8389F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwCP', symObjAddr: 0x17EC, symBinAddr: 0xD7AC, symSize: 0x30 } + - { offsetInCU: 0x63F, offset: 0x838B3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwxx', symObjAddr: 0x181C, symBinAddr: 0xD7DC, symSize: 0x8 } + - { offsetInCU: 0x653, offset: 0x838C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwcp', symObjAddr: 0x1824, symBinAddr: 0xD7E4, symSize: 0x3C } + - { offsetInCU: 0x667, offset: 0x838DB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwca', symObjAddr: 0x1860, symBinAddr: 0xD820, symSize: 0x50 } + - { offsetInCU: 0x67B, offset: 0x838EF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwta', symObjAddr: 0x18BC, symBinAddr: 0xD870, symSize: 0x40 } + - { offsetInCU: 0x68F, offset: 0x83903, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwet', symObjAddr: 0x18FC, symBinAddr: 0xD8B0, symSize: 0x48 } + - { offsetInCU: 0x6A3, offset: 0x83917, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwst', symObjAddr: 0x1944, symBinAddr: 0xD8F8, symSize: 0x40 } + - { offsetInCU: 0x6B7, offset: 0x8392B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVMa', symObjAddr: 0x1984, symBinAddr: 0xD938, symSize: 0x10 } + - { offsetInCU: 0x6CB, offset: 0x8393F, size: 0x8, addend: 0x0, symName: '_$sypSgWOc', symObjAddr: 0x1994, symBinAddr: 0xD948, symSize: 0x48 } + - { offsetInCU: 0x6DF, offset: 0x83953, size: 0x8, addend: 0x0, symName: '_$sSo7UITouchCSo8NSObjectCSH10ObjectiveCWl', symObjAddr: 0x1AA0, symBinAddr: 0xD990, symSize: 0x58 } + - { offsetInCU: 0x6F3, offset: 0x83967, size: 0x8, addend: 0x0, symName: '_$sSh8IteratorV8_VariantOyx__GSHRzlWOe', symObjAddr: 0x1AF8, symBinAddr: 0xD9E8, symSize: 0x8 } + - { offsetInCU: 0x761, offset: 0x839D5, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOe', symObjAddr: 0x1DE4, symBinAddr: 0xDCD4, symSize: 0x10 } + - { offsetInCU: 0xCBB, offset: 0x83F2F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesBegan_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x0, symBinAddr: 0xBFE8, symSize: 0x540 } + - { offsetInCU: 0xF57, offset: 0x841CB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesMoved_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x54C, symBinAddr: 0xC534, symSize: 0xE0 } + - { offsetInCU: 0xFD6, offset: 0x8424A, size: 0x8, addend: 0x0, symName: '_$sSa6remove2atxSi_tF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x6F0, symBinAddr: 0xC6C4, symSize: 0x9C } + - { offsetInCU: 0x1069, offset: 0x842DD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfc', symObjAddr: 0xDCC, symBinAddr: 0xCD8C, symSize: 0x108 } + - { offsetInCU: 0x11B3, offset: 0x84427, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6onMove33_044DDF836BDB3B89B481C6F58BB6EF6BLLyySo19UIGestureRecognizerC_ShySo7UITouchCGSgtF', symObjAddr: 0x12D0, symBinAddr: 0xD290, symSize: 0x40C } + - { offsetInCU: 0x18C9, offset: 0x84B3D, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNewAByxGyF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x1B00, symBinAddr: 0xD9F0, symSize: 0x14 } + - { offsetInCU: 0x1968, offset: 0x84BDC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6canvasAcA9NSCCanvasC_tcfcTf4gn_n', symObjAddr: 0x1B14, symBinAddr: 0xDA04, symSize: 0x1DC } + - { offsetInCU: 0x27, offset: 0x84DB9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xDCE4, symSize: 0x2C } + - { offsetInCU: 0x4B, offset: 0x84DDD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvpZ', symObjAddr: 0x2D8, symBinAddr: 0x1160068, symSize: 0x0 } + - { offsetInCU: 0x65, offset: 0x84DF7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xDCE4, symSize: 0x2C } + - { offsetInCU: 0x98, offset: 0x84E2A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZTo', symObjAddr: 0x178, symBinAddr: 0xDE5C, symSize: 0x40 } + - { offsetInCU: 0x104, offset: 0x84E96, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfcTo', symObjAddr: 0x228, symBinAddr: 0xDF0C, symSize: 0x3C } + - { offsetInCU: 0x156, offset: 0x84EE8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queue_WZ', symObjAddr: 0x2C, symBinAddr: 0xDD10, symSize: 0x10C } + - { offsetInCU: 0x181, offset: 0x84F13, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCMa', symObjAddr: 0x208, symBinAddr: 0xDEEC, symSize: 0x20 } + - { offsetInCU: 0x195, offset: 0x84F27, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfETo', symObjAddr: 0x294, symBinAddr: 0xDF78, symSize: 0x4 } + - { offsetInCU: 0x1C0, offset: 0x84F52, size: 0x8, addend: 0x0, symName: '_$sSo17OS_dispatch_queueCMa', symObjAddr: 0x298, symBinAddr: 0xDF7C, symSize: 0x3C } + - { offsetInCU: 0x348, offset: 0x850DA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZ', symObjAddr: 0x138, symBinAddr: 0xDE1C, symSize: 0x40 } + - { offsetInCU: 0x388, offset: 0x8511A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfC', symObjAddr: 0x1B8, symBinAddr: 0xDE9C, symSize: 0x20 } + - { offsetInCU: 0x39C, offset: 0x8512E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfc', symObjAddr: 0x1D8, symBinAddr: 0xDEBC, symSize: 0x30 } + - { offsetInCU: 0x3D8, offset: 0x8516A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfD', symObjAddr: 0x264, symBinAddr: 0xDF48, symSize: 0x30 } + - { offsetInCU: 0x2B, offset: 0x851B8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xDFB8, symSize: 0xA4 } + - { offsetInCU: 0x66, offset: 0x851F3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZTo', symObjAddr: 0xA4, symBinAddr: 0xE05C, symSize: 0xA4 } + - { offsetInCU: 0xF9, offset: 0x85286, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZTo', symObjAddr: 0x1D8, symBinAddr: 0xE190, symSize: 0x110 } + - { offsetInCU: 0x1A2, offset: 0x8532F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZTo', symObjAddr: 0x30C, symBinAddr: 0xE2C4, symSize: 0x28 } + - { offsetInCU: 0x222, offset: 0x853AF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTo', symObjAddr: 0x338, symBinAddr: 0xE2F0, symSize: 0xA0 } + - { offsetInCU: 0x29B, offset: 0x85428, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZTo', symObjAddr: 0x4D0, symBinAddr: 0xE488, symSize: 0x15C } + - { offsetInCU: 0x330, offset: 0x854BD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfcTo', symObjAddr: 0x67C, symBinAddr: 0xE634, symSize: 0x3C } + - { offsetInCU: 0x381, offset: 0x8550E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTf4nnnnnndd_n', symObjAddr: 0x6E8, symBinAddr: 0xE6A0, symSize: 0x160 } + - { offsetInCU: 0x4DF, offset: 0x8566C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC7getFile33_F00B23A4165DD6ABFCD23C8811C7DF43LLyS2SKFZTf4nd_g', symObjAddr: 0x848, symBinAddr: 0xE800, symSize: 0x2E4 } + - { offsetInCU: 0x5AE, offset: 0x8573B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCMa', symObjAddr: 0xB2C, symBinAddr: 0xEAE4, symSize: 0x20 } + - { offsetInCU: 0x5C2, offset: 0x8574F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOAEs5ErrorAAWl', symObjAddr: 0xB4C, symBinAddr: 0xEB04, symSize: 0x44 } + - { offsetInCU: 0x5D6, offset: 0x85763, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwCP', symObjAddr: 0xB90, symBinAddr: 0xEB48, symSize: 0x2C } + - { offsetInCU: 0x5EA, offset: 0x85777, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwxx', symObjAddr: 0xBBC, symBinAddr: 0xEB74, symSize: 0x8 } + - { offsetInCU: 0x5FE, offset: 0x8578B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwca', symObjAddr: 0xBC4, symBinAddr: 0xEB7C, symSize: 0x40 } + - { offsetInCU: 0x612, offset: 0x8579F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwta', symObjAddr: 0xC10, symBinAddr: 0xEBBC, symSize: 0x30 } + - { offsetInCU: 0x626, offset: 0x857B3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwet', symObjAddr: 0xC40, symBinAddr: 0xEBEC, symSize: 0x48 } + - { offsetInCU: 0x63A, offset: 0x857C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwst', symObjAddr: 0xC88, symBinAddr: 0xEC34, symSize: 0x3C } + - { offsetInCU: 0x64E, offset: 0x857DB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwug', symObjAddr: 0xCC4, symBinAddr: 0xEC70, symSize: 0x8 } + - { offsetInCU: 0x662, offset: 0x857EF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwup', symObjAddr: 0xCCC, symBinAddr: 0xEC78, symSize: 0x4 } + - { offsetInCU: 0x676, offset: 0x85803, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwui', symObjAddr: 0xCD0, symBinAddr: 0xEC7C, symSize: 0x4 } + - { offsetInCU: 0x68A, offset: 0x85817, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOMa', symObjAddr: 0xCD4, symBinAddr: 0xEC80, symSize: 0x10 } + - { offsetInCU: 0x712, offset: 0x8589F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP7_domainSSvgTW', symObjAddr: 0x3D8, symBinAddr: 0xE390, symSize: 0x4 } + - { offsetInCU: 0x72E, offset: 0x858BB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP5_codeSivgTW', symObjAddr: 0x3DC, symBinAddr: 0xE394, symSize: 0x4 } + - { offsetInCU: 0x74A, offset: 0x858D7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP9_userInfoyXlSgvgTW', symObjAddr: 0x3E0, symBinAddr: 0xE398, symSize: 0x4 } + - { offsetInCU: 0x766, offset: 0x858F3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP19_getEmbeddedNSErroryXlSgyFTW', symObjAddr: 0x3E4, symBinAddr: 0xE39C, symSize: 0x4 } + - { offsetInCU: 0xA14, offset: 0x85BA1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xDFB8, symSize: 0xA4 } + - { offsetInCU: 0xAAA, offset: 0x85C37, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZ', symObjAddr: 0x148, symBinAddr: 0xE100, symSize: 0x90 } + - { offsetInCU: 0xC31, offset: 0x85DBE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZ', symObjAddr: 0x2E8, symBinAddr: 0xE2A0, symSize: 0x24 } + - { offsetInCU: 0xC7B, offset: 0x85E08, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZ', symObjAddr: 0x334, symBinAddr: 0xE2EC, symSize: 0x4 } + - { offsetInCU: 0xC9D, offset: 0x85E2A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZ', symObjAddr: 0x3E8, symBinAddr: 0xE3A0, symSize: 0xE8 } + - { offsetInCU: 0xD4D, offset: 0x85EDA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfC', symObjAddr: 0x62C, symBinAddr: 0xE5E4, symSize: 0x20 } + - { offsetInCU: 0xD61, offset: 0x85EEE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfc', symObjAddr: 0x64C, symBinAddr: 0xE604, symSize: 0x30 } + - { offsetInCU: 0xD97, offset: 0x85F24, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCfD', symObjAddr: 0x6B8, symBinAddr: 0xE670, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0x8603D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0xEC94, symSize: 0x4 } + - { offsetInCU: 0x71, offset: 0x86087, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x4, symBinAddr: 0xEC98, symSize: 0x70 } + - { offsetInCU: 0xF6, offset: 0x8610C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x78, symBinAddr: 0xED0C, symSize: 0x50 } + - { offsetInCU: 0x191, offset: 0x861A7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0xCC, symBinAddr: 0xED60, symSize: 0x68 } + - { offsetInCU: 0x254, offset: 0x8626A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x138, symBinAddr: 0xEDCC, symSize: 0x98 } + - { offsetInCU: 0x323, offset: 0x86339, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfcTo', symObjAddr: 0x220, symBinAddr: 0xEEB4, symSize: 0x3C } + - { offsetInCU: 0x375, offset: 0x8638B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCMa', symObjAddr: 0x28C, symBinAddr: 0xEF20, symSize: 0x20 } + - { offsetInCU: 0x4E5, offset: 0x864FB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0xEC94, symSize: 0x4 } + - { offsetInCU: 0x51D, offset: 0x86533, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0xEC94, symSize: 0x4 } + - { offsetInCU: 0x588, offset: 0x8659E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0xED08, symSize: 0x4 } + - { offsetInCU: 0x5C8, offset: 0x865DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0xED08, symSize: 0x4 } + - { offsetInCU: 0x62A, offset: 0x86640, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xC8, symBinAddr: 0xED5C, symSize: 0x4 } + - { offsetInCU: 0x67C, offset: 0x86692, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xC8, symBinAddr: 0xED5C, symSize: 0x4 } + - { offsetInCU: 0x6F1, offset: 0x86707, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x134, symBinAddr: 0xEDC8, symSize: 0x4 } + - { offsetInCU: 0x767, offset: 0x8677D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x134, symBinAddr: 0xEDC8, symSize: 0x4 } + - { offsetInCU: 0x805, offset: 0x8681B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfC', symObjAddr: 0x1D0, symBinAddr: 0xEE64, symSize: 0x20 } + - { offsetInCU: 0x819, offset: 0x8682F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfc', symObjAddr: 0x1F0, symBinAddr: 0xEE84, symSize: 0x30 } + - { offsetInCU: 0x84F, offset: 0x86865, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCfD', symObjAddr: 0x25C, symBinAddr: 0xEEF0, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0x868AF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0xEF40, symSize: 0x14 } + - { offsetInCU: 0xA9, offset: 0x86931, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x14, symBinAddr: 0xEF54, symSize: 0x38 } + - { offsetInCU: 0x1A2, offset: 0x86A2A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x68, symBinAddr: 0xEFA8, symSize: 0x40 } + - { offsetInCU: 0x284, offset: 0x86B0C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfcTo', symObjAddr: 0x118, symBinAddr: 0xF058, symSize: 0x3C } + - { offsetInCU: 0x2D6, offset: 0x86B5E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCMa', symObjAddr: 0xF8, symBinAddr: 0xF038, symSize: 0x20 } + - { offsetInCU: 0x480, offset: 0x86D08, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0xEF40, symSize: 0x14 } + - { offsetInCU: 0x5C4, offset: 0x86E4C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x4C, symBinAddr: 0xEF8C, symSize: 0x1C } + - { offsetInCU: 0x6FA, offset: 0x86F82, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfC', symObjAddr: 0xA8, symBinAddr: 0xEFE8, symSize: 0x20 } + - { offsetInCU: 0x70E, offset: 0x86F96, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfc', symObjAddr: 0xC8, symBinAddr: 0xF008, symSize: 0x30 } + - { offsetInCU: 0x744, offset: 0x86FCC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCfD', symObjAddr: 0x154, symBinAddr: 0xF094, symSize: 0x30 } + - { offsetInCU: 0x61, offset: 0x87050, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0xF0C8, symSize: 0x10 } + - { offsetInCU: 0x81, offset: 0x87070, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0xF0C8, symSize: 0x10 } + - { offsetInCU: 0xB7, offset: 0x870A6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0xF0D8, symSize: 0x10 } + - { offsetInCU: 0xD7, offset: 0x870C6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0xF0D8, symSize: 0x10 } + - { offsetInCU: 0x110, offset: 0x870FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvgTo', symObjAddr: 0x24, symBinAddr: 0xF0E8, symSize: 0x48 } + - { offsetInCU: 0x168, offset: 0x87157, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvsTo', symObjAddr: 0xB4, symBinAddr: 0xF178, symSize: 0x50 } + - { offsetInCU: 0x1C3, offset: 0x871B2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0xF1C8, symSize: 0x10 } + - { offsetInCU: 0x1E3, offset: 0x871D2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0xF1C8, symSize: 0x10 } + - { offsetInCU: 0x219, offset: 0x87208, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0xF1D8, symSize: 0x10 } + - { offsetInCU: 0x239, offset: 0x87228, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0xF1D8, symSize: 0x10 } + - { offsetInCU: 0x272, offset: 0x87261, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfcTo', symObjAddr: 0x1B0, symBinAddr: 0xF274, symSize: 0x78 } + - { offsetInCU: 0x2C8, offset: 0x872B7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x2D4, symBinAddr: 0xF398, symSize: 0xB0 } + - { offsetInCU: 0x32A, offset: 0x87319, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x43C, symBinAddr: 0xF500, symSize: 0x28 } + - { offsetInCU: 0x35C, offset: 0x8734B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC12bindDrawableyyFTo', symObjAddr: 0x4E0, symBinAddr: 0xF528, symSize: 0xA0 } + - { offsetInCU: 0x3DD, offset: 0x873CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC14deleteDrawableyyFTo', symObjAddr: 0x5BC, symBinAddr: 0xF5C8, symSize: 0x60 } + - { offsetInCU: 0x44D, offset: 0x8743C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTo', symObjAddr: 0x620, symBinAddr: 0xF62C, symSize: 0x4C } + - { offsetInCU: 0x4BF, offset: 0x874AE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfcTo', symObjAddr: 0x70C, symBinAddr: 0xF718, symSize: 0x34 } + - { offsetInCU: 0x533, offset: 0x87522, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCMa', symObjAddr: 0x190, symBinAddr: 0xF254, symSize: 0x20 } + - { offsetInCU: 0x55D, offset: 0x8754C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCfETo', symObjAddr: 0x74C, symBinAddr: 0xF758, symSize: 0x10 } + - { offsetInCU: 0x65B, offset: 0x8764A, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VFTo', symObjAddr: 0xA08, symBinAddr: 0xFA14, symSize: 0x74 } + - { offsetInCU: 0x699, offset: 0x87688, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA7C, symBinAddr: 0xFA88, symSize: 0x10 } + - { offsetInCU: 0x6B9, offset: 0x876A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA7C, symBinAddr: 0xFA88, symSize: 0x10 } + - { offsetInCU: 0x6EF, offset: 0x876DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA8C, symBinAddr: 0xFA98, symSize: 0x10 } + - { offsetInCU: 0x70F, offset: 0x876FE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA8C, symBinAddr: 0xFA98, symSize: 0x10 } + - { offsetInCU: 0x748, offset: 0x87737, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvgTo', symObjAddr: 0xA9C, symBinAddr: 0xFAA8, symSize: 0x20 } + - { offsetInCU: 0x7A0, offset: 0x8778F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvsTo', symObjAddr: 0xABC, symBinAddr: 0xFAC8, symSize: 0x14 } + - { offsetInCU: 0x7FB, offset: 0x877EA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvgTo', symObjAddr: 0xAD0, symBinAddr: 0xFADC, symSize: 0x44 } + - { offsetInCU: 0x853, offset: 0x87842, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvsTo', symObjAddr: 0xB58, symBinAddr: 0xFB64, symSize: 0x48 } + - { offsetInCU: 0x8E8, offset: 0x878D7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfcTo', symObjAddr: 0xCBC, symBinAddr: 0xFCC8, symSize: 0x78 } + - { offsetInCU: 0x93E, offset: 0x8792D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0xE34, symBinAddr: 0xFE40, symSize: 0xB0 } + - { offsetInCU: 0x9A0, offset: 0x8798F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0xF90, symBinAddr: 0xFF9C, symSize: 0x28 } + - { offsetInCU: 0x9D2, offset: 0x879C1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC11deviceScaleSfyFTo', symObjAddr: 0xFB8, symBinAddr: 0xFFC4, symSize: 0xB8 } + - { offsetInCU: 0xA53, offset: 0x87A42, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTo', symObjAddr: 0x1074, symBinAddr: 0x1007C, symSize: 0x28 } + - { offsetInCU: 0xAB1, offset: 0x87AA0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCfETo', symObjAddr: 0x10D8, symBinAddr: 0x100E0, symSize: 0x10 } + - { offsetInCU: 0xC88, offset: 0x87C77, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCs5UInt8V_Tgmq5', symObjAddr: 0x13D0, symBinAddr: 0x102DC, symSize: 0x64 } + - { offsetInCU: 0xCD9, offset: 0x87CC8, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOy', symObjAddr: 0x15D8, symBinAddr: 0x104E4, symSize: 0x44 } + - { offsetInCU: 0xCED, offset: 0x87CDC, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOe', symObjAddr: 0x161C, symBinAddr: 0x10528, symSize: 0x44 } + - { offsetInCU: 0xD01, offset: 0x87CF0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCMa', symObjAddr: 0x1660, symBinAddr: 0x1056C, symSize: 0x20 } + - { offsetInCU: 0xDDB, offset: 0x87DCA, size: 0x8, addend: 0x0, symName: '_$sSaySayxGqd__c7ElementQyd__RszSTRd__lufCs5UInt8V_10Foundation4DataVTgm5Tf4g_n', symObjAddr: 0x14B8, symBinAddr: 0x103C4, symSize: 0x110 } + - { offsetInCU: 0x1086, offset: 0x88075, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvg', symObjAddr: 0x6C, symBinAddr: 0xF130, symSize: 0x48 } + - { offsetInCU: 0x1103, offset: 0x880F2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfc', symObjAddr: 0x124, symBinAddr: 0xF1E8, symSize: 0x6C } + - { offsetInCU: 0x114A, offset: 0x88139, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0x228, symBinAddr: 0xF2EC, symSize: 0xAC } + - { offsetInCU: 0x11AE, offset: 0x8819D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x384, symBinAddr: 0xF448, symSize: 0xB8 } + - { offsetInCU: 0x1239, offset: 0x88228, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtF', symObjAddr: 0x61C, symBinAddr: 0xF628, symSize: 0x4 } + - { offsetInCU: 0x125A, offset: 0x88249, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfC', symObjAddr: 0x66C, symBinAddr: 0xF678, symSize: 0x74 } + - { offsetInCU: 0x126E, offset: 0x8825D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfc', symObjAddr: 0x6E0, symBinAddr: 0xF6EC, symSize: 0x2C } + - { offsetInCU: 0x1387, offset: 0x88376, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VF', symObjAddr: 0x75C, symBinAddr: 0xF768, symSize: 0x2AC } + - { offsetInCU: 0x1731, offset: 0x88720, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvg', symObjAddr: 0xB14, symBinAddr: 0xFB20, symSize: 0x44 } + - { offsetInCU: 0x1770, offset: 0x8875F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvs', symObjAddr: 0xBA0, symBinAddr: 0xFBAC, symSize: 0x48 } + - { offsetInCU: 0x1795, offset: 0x88784, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM', symObjAddr: 0xBE8, symBinAddr: 0xFBF4, symSize: 0x44 } + - { offsetInCU: 0x17BA, offset: 0x887A9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM.resume.0', symObjAddr: 0xC2C, symBinAddr: 0xFC38, symSize: 0x4 } + - { offsetInCU: 0x17E1, offset: 0x887D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfC', symObjAddr: 0xC30, symBinAddr: 0xFC3C, symSize: 0x20 } + - { offsetInCU: 0x17F5, offset: 0x887E4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfc', symObjAddr: 0xC50, symBinAddr: 0xFC5C, symSize: 0x6C } + - { offsetInCU: 0x183C, offset: 0x8882B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0xD88, symBinAddr: 0xFD94, symSize: 0xAC } + - { offsetInCU: 0x189B, offset: 0x8888A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0xEE4, symBinAddr: 0xFEF0, symSize: 0xAC } + - { offsetInCU: 0x1940, offset: 0x8892F, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x10E8, symBinAddr: 0x100F0, symSize: 0x104 } + - { offsetInCU: 0x1A6F, offset: 0x88A5E, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFs5UInt8V_Tg5', symObjAddr: 0x12E8, symBinAddr: 0x101F4, symSize: 0xE8 } + - { offsetInCU: 0x1BB3, offset: 0x88BA2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTf4ddn_n', symObjAddr: 0x1434, symBinAddr: 0x10340, symSize: 0x84 } + - { offsetInCU: 0x1CAC, offset: 0x88C9B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTf4dn_n', symObjAddr: 0x1680, symBinAddr: 0x1058C, symSize: 0x360 } + - { offsetInCU: 0x2B, offset: 0x890B5, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x10AD8, symSize: 0x2C } + - { offsetInCU: 0x4F, offset: 0x890D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LLSo012OS_dispatch_E0CvpZ', symObjAddr: 0x958, symBinAddr: 0x11601B0, symSize: 0x0 } + - { offsetInCU: 0x5D, offset: 0x890E7, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x10AD8, symSize: 0x2C } + - { offsetInCU: 0x75, offset: 0x890FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LL_WZ', symObjAddr: 0x2C, symBinAddr: 0x10B04, symSize: 0x10C } + - { offsetInCU: 0xBC, offset: 0x89146, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0x13C, symBinAddr: 0x10C14, symSize: 0x44 } + - { offsetInCU: 0x132, offset: 0x891BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTo', symObjAddr: 0x3AC, symBinAddr: 0x10E84, symSize: 0x80 } + - { offsetInCU: 0x191, offset: 0x8921B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfcTo', symObjAddr: 0x47C, symBinAddr: 0x10F54, symSize: 0x3C } + - { offsetInCU: 0x1E2, offset: 0x8926C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTf4nnnd_n', symObjAddr: 0x4EC, symBinAddr: 0x10FC4, symSize: 0x1DC } + - { offsetInCU: 0x269, offset: 0x892F3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfETo', symObjAddr: 0x4E8, symBinAddr: 0x10FC0, symSize: 0x4 } + - { offsetInCU: 0x2A5, offset: 0x8932F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCMa', symObjAddr: 0x6C8, symBinAddr: 0x111A0, symSize: 0x20 } + - { offsetInCU: 0x2C4, offset: 0x8934E, size: 0x8, addend: 0x0, symName: '_$s10ObjectiveC8ObjCBoolVIeyBy_SbIegy_TRTA', symObjAddr: 0x70C, symBinAddr: 0x111E4, symSize: 0x14 } + - { offsetInCU: 0x2ED, offset: 0x89377, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_TA', symObjAddr: 0x74C, symBinAddr: 0x11224, symSize: 0xC } + - { offsetInCU: 0x301, offset: 0x8938B, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x758, symBinAddr: 0x11230, symSize: 0x10 } + - { offsetInCU: 0x315, offset: 0x8939F, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x768, symBinAddr: 0x11240, symSize: 0x8 } + - { offsetInCU: 0x329, offset: 0x893B3, size: 0x8, addend: 0x0, symName: '_$s8Dispatch0A13WorkItemFlagsVACs10SetAlgebraAAWl', symObjAddr: 0x770, symBinAddr: 0x11248, symSize: 0x48 } + - { offsetInCU: 0x33D, offset: 0x893C7, size: 0x8, addend: 0x0, symName: '_$sSay8Dispatch0A13WorkItemFlagsVGSayxGSTsWl', symObjAddr: 0x7F8, symBinAddr: 0x11290, symSize: 0x4C } + - { offsetInCU: 0x351, offset: 0x893DB, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledNameAbstract, symObjAddr: 0x844, symBinAddr: 0x112DC, symSize: 0x44 } + - { offsetInCU: 0x365, offset: 0x893EF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0x8C4, symBinAddr: 0x11320, symSize: 0x24 } + - { offsetInCU: 0x399, offset: 0x89423, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU_TA', symObjAddr: 0x90C, symBinAddr: 0x11368, symSize: 0x24 } + - { offsetInCU: 0x52E, offset: 0x895B8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x10C10, symSize: 0x4 } + - { offsetInCU: 0x55C, offset: 0x895E6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x10C10, symSize: 0x4 } + - { offsetInCU: 0x5BB, offset: 0x89645, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZ', symObjAddr: 0x180, symBinAddr: 0x10C58, symSize: 0x4 } + - { offsetInCU: 0x5CF, offset: 0x89659, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_', symObjAddr: 0x184, symBinAddr: 0x10C5C, symSize: 0x228 } + - { offsetInCU: 0x6A8, offset: 0x89732, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfC', symObjAddr: 0x42C, symBinAddr: 0x10F04, symSize: 0x20 } + - { offsetInCU: 0x6BC, offset: 0x89746, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfc', symObjAddr: 0x44C, symBinAddr: 0x10F24, symSize: 0x30 } + - { offsetInCU: 0x6F2, offset: 0x8977C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfD', symObjAddr: 0x4B8, symBinAddr: 0x10F90, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0x89822, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x113A0, symSize: 0x20 } + - { offsetInCU: 0x77, offset: 0x89872, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfcTo', symObjAddr: 0x70, symBinAddr: 0x11410, symSize: 0x3C } + - { offsetInCU: 0xC9, offset: 0x898C4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCMa', symObjAddr: 0x50, symBinAddr: 0x113F0, symSize: 0x20 } + - { offsetInCU: 0x214, offset: 0x89A0F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x113A0, symSize: 0x20 } + - { offsetInCU: 0x228, offset: 0x89A23, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfc', symObjAddr: 0x20, symBinAddr: 0x113C0, symSize: 0x30 } + - { offsetInCU: 0x264, offset: 0x89A5F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCfD', symObjAddr: 0xAC, symBinAddr: 0x1144C, symSize: 0x30 } + - { offsetInCU: 0x26, offset: 0x89AA8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x335050, symSize: 0x265C } + - { offsetInCU: 0x40, offset: 0x89AC2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9E20, symBinAddr: 0xA292E0, symSize: 0x0 } + - { offsetInCU: 0x92, offset: 0x89B14, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFE20, symBinAddr: 0xA2F2E0, symSize: 0x0 } + - { offsetInCU: 0xF6, offset: 0x89B78, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFE48, symBinAddr: 0xA2F308, symSize: 0x0 } + - { offsetInCU: 0x10C, offset: 0x89B8E, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x10250, symBinAddr: 0xA2F710, symSize: 0x0 } + - { offsetInCU: 0x123, offset: 0x89BA5, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFE90, symBinAddr: 0xA2F350, symSize: 0x0 } + - { offsetInCU: 0x9C2, offset: 0x8A444, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x335050, symSize: 0x265C } + - { offsetInCU: 0x45D1, offset: 0x8E053, size: 0x8, addend: 0x0, symName: _fe_frombytes, symObjAddr: 0x265C, symBinAddr: 0x3376AC, symSize: 0x134 } + - { offsetInCU: 0x46F7, offset: 0x8E179, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x9954, symBinAddr: 0x33E9A4, symSize: 0x21C } + - { offsetInCU: 0x4926, offset: 0x8E3A8, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4FE0, symBinAddr: 0x33A030, symSize: 0x1B8 } + - { offsetInCU: 0x5313, offset: 0x8ED95, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x2790, symBinAddr: 0x3377E0, symSize: 0x5BC } + - { offsetInCU: 0x5F76, offset: 0x8F9F8, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2D4C, symBinAddr: 0x337D9C, symSize: 0x7F8 } + - { offsetInCU: 0x642E, offset: 0x8FEB0, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3544, symBinAddr: 0x338594, symSize: 0x208 } + - { offsetInCU: 0x69FC, offset: 0x9047E, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x374C, symBinAddr: 0x33879C, symSize: 0x7B4 } + - { offsetInCU: 0x77D5, offset: 0x91257, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3F00, symBinAddr: 0x338F50, symSize: 0x634 } + - { offsetInCU: 0x8196, offset: 0x91C18, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x4534, symBinAddr: 0x339584, symSize: 0xAAC } + - { offsetInCU: 0x9567, offset: 0x92FE9, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x529C, symBinAddr: 0x33A2EC, symSize: 0x23F8 } + - { offsetInCU: 0xCAB8, offset: 0x9653A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x5198, symBinAddr: 0x33A1E8, symSize: 0x104 } + - { offsetInCU: 0xCD20, offset: 0x967A2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x7694, symBinAddr: 0x33C6E4, symSize: 0x30 } + - { offsetInCU: 0xCE11, offset: 0x96893, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x76C4, symBinAddr: 0x33C714, symSize: 0x58 } + - { offsetInCU: 0xCE86, offset: 0x96908, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x771C, symBinAddr: 0x33C76C, symSize: 0x4 } + - { offsetInCU: 0xCECE, offset: 0x96950, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x771C, symBinAddr: 0x33C76C, symSize: 0x4 } + - { offsetInCU: 0xCEFD, offset: 0x9697F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x771C, symBinAddr: 0x33C76C, symSize: 0x4 } + - { offsetInCU: 0xCF21, offset: 0x969A3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x7720, symBinAddr: 0x33C770, symSize: 0x8C } + - { offsetInCU: 0xD056, offset: 0x96AD8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x77AC, symBinAddr: 0x33C7FC, symSize: 0x4 } + - { offsetInCU: 0xD08F, offset: 0x96B11, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x77AC, symBinAddr: 0x33C7FC, symSize: 0x4 } + - { offsetInCU: 0xD328, offset: 0x96DAA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x77B0, symBinAddr: 0x33C800, symSize: 0x15D8 } + - { offsetInCU: 0x10671, offset: 0x9A0F3, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x9B70, symBinAddr: 0x33EBC0, symSize: 0x218 } + - { offsetInCU: 0x10CA3, offset: 0x9A725, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8D88, symBinAddr: 0x33DDD8, symSize: 0x20 } + - { offsetInCU: 0x11140, offset: 0x9ABC2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8DA8, symBinAddr: 0x33DDF8, symSize: 0xBAC } + - { offsetInCU: 0x26, offset: 0x9B98D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x33EDD8, symSize: 0x1F4 } + - { offsetInCU: 0x1D2, offset: 0x9BB39, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x33EDD8, symSize: 0x1F4 } + - { offsetInCU: 0x26, offset: 0x9BDD4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x33EFCC, symSize: 0x3C } + - { offsetInCU: 0x34, offset: 0x9BDE2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x33EFCC, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0x9BEF2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x33F008, symSize: 0x98 } + - { offsetInCU: 0x34, offset: 0x9BF00, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x33F008, symSize: 0x98 } + - { offsetInCU: 0x86, offset: 0x9C063, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1100, symBinAddr: 0xA2F7C0, symSize: 0x0 } + - { offsetInCU: 0xB8, offset: 0x9C095, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1090, symBinAddr: 0xA2F750, symSize: 0x0 } + - { offsetInCU: 0xDA, offset: 0x9C0B7, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x10C0, symBinAddr: 0xA2F780, symSize: 0x0 } + - { offsetInCU: 0xF0, offset: 0x9C0CD, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x10F0, symBinAddr: 0xA2F7B0, symSize: 0x0 } + - { offsetInCU: 0x3B7, offset: 0x9C394, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x33F0A0, symSize: 0x18 } + - { offsetInCU: 0x3FB, offset: 0x9C3D8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x33F0A0, symSize: 0x18 } + - { offsetInCU: 0x594, offset: 0x9C571, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0x33F0B8, symSize: 0x18 } + - { offsetInCU: 0x63F, offset: 0x9C61C, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0x33F0D0, symSize: 0x320 } + - { offsetInCU: 0x1173, offset: 0x9D150, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x5B0, symBinAddr: 0x33F3F0, symSize: 0xAC } + - { offsetInCU: 0x1469, offset: 0x9D446, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x65C, symBinAddr: 0x33F49C, symSize: 0x500 } + - { offsetInCU: 0x2666, offset: 0x9E643, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB5C, symBinAddr: 0x33F99C, symSize: 0x2C8 } + - { offsetInCU: 0x2CB5, offset: 0x9EC92, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xE24, symBinAddr: 0x33FC64, symSize: 0xF4 } + - { offsetInCU: 0x2EC7, offset: 0x9EEA4, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xF18, symBinAddr: 0x33FD58, symSize: 0x168 } + - { offsetInCU: 0x26, offset: 0x9F1CF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x33FEC0, symSize: 0x38 } + - { offsetInCU: 0xFA, offset: 0x9F2A3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x33FEC0, symSize: 0x38 } + - { offsetInCU: 0x12C, offset: 0x9F2D5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x33FEC0, symSize: 0x38 } + - { offsetInCU: 0x199, offset: 0x9F342, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x33FEF8, symSize: 0x3C } + - { offsetInCU: 0x1F3, offset: 0x9F39C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x33FEF8, symSize: 0x3C } + - { offsetInCU: 0x31B, offset: 0x9F4C4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0x33FF34, symSize: 0x5C } + - { offsetInCU: 0x517, offset: 0x9F6C0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0x33FF90, symSize: 0x1C } + - { offsetInCU: 0x636, offset: 0x9F7DF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0x33FFAC, symSize: 0x54 } + - { offsetInCU: 0x6D9, offset: 0x9F882, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0x340000, symSize: 0x4C } + - { offsetInCU: 0x8A7, offset: 0x9FA50, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x34004C, symSize: 0xA8 } + - { offsetInCU: 0x90B, offset: 0x9FAB4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x34004C, symSize: 0xA8 } + - { offsetInCU: 0xBAA, offset: 0x9FD53, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0x3400F4, symSize: 0x110 } + - { offsetInCU: 0xC4C, offset: 0x9FDF5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0x3400F4, symSize: 0x110 } + - { offsetInCU: 0xEDE, offset: 0xA0087, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x344, symBinAddr: 0x340204, symSize: 0xB0 } + - { offsetInCU: 0xF5E, offset: 0xA0107, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x344, symBinAddr: 0x340204, symSize: 0xB0 } + - { offsetInCU: 0x10E1, offset: 0xA028A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x3F4, symBinAddr: 0x3402B4, symSize: 0x198 } + - { offsetInCU: 0x13AB, offset: 0xA0554, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x58C, symBinAddr: 0x34044C, symSize: 0x290 } + - { offsetInCU: 0x1500, offset: 0xA06A9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x81C, symBinAddr: 0x3406DC, symSize: 0x18 } + - { offsetInCU: 0x1567, offset: 0xA0710, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x834, symBinAddr: 0x3406F4, symSize: 0xC } + - { offsetInCU: 0x15A0, offset: 0xA0749, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x840, symBinAddr: 0x340700, symSize: 0x8 } + - { offsetInCU: 0x1624, offset: 0xA07CD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x848, symBinAddr: 0x340708, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0xA0980, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x340744, symSize: 0x190 } + - { offsetInCU: 0x34, offset: 0xA098E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x340744, symSize: 0x190 } + - { offsetInCU: 0x34, offset: 0xA0A94, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x398, symBinAddr: 0x1167288, symSize: 0x0 } + - { offsetInCU: 0x26, offset: 0xA0AD6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x3408D4, symSize: 0x388 } + - { offsetInCU: 0x76, offset: 0xA0B26, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0xA30000, symSize: 0x0 } + - { offsetInCU: 0xFA, offset: 0xA0BAA, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0xA55000, symSize: 0x0 } + - { offsetInCU: 0x35B, offset: 0xA0E0B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x3408D4, symSize: 0x388 } + - { offsetInCU: 0xC66, offset: 0xA1716, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x388, symBinAddr: 0x340C5C, symSize: 0x204 } + - { offsetInCU: 0x1163, offset: 0xA1C13, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x58C, symBinAddr: 0x340E60, symSize: 0x1BC } + - { offsetInCU: 0x10, offset: 0xA1FE8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x341020, symSize: 0x1A0 } + - { offsetInCU: 0x50, offset: 0xA2028, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x341020, symSize: 0x1A0 } + - { offsetInCU: 0x5E, offset: 0xA2036, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0x3411C0, symSize: 0x60 } + - { offsetInCU: 0x81, offset: 0xA2059, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0x341220, symSize: 0x288 } + - { offsetInCU: 0x10, offset: 0xA204A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x3414B0, symSize: 0x130 } + - { offsetInCU: 0x48, offset: 0xA2082, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x3414B0, symSize: 0x130 } + - { offsetInCU: 0x5F, offset: 0xA2099, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0x3415E0, symSize: 0x70 } + - { offsetInCU: 0x75, offset: 0xA20AF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0x341650, symSize: 0x160 } + - { offsetInCU: 0x7A, offset: 0xA20B4, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0x3417B0, symSize: 0x378 } + - { offsetInCU: 0x10, offset: 0xA20C2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x341B40, symSize: 0x3A0 } + - { offsetInCU: 0x48, offset: 0xA20FA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x341B40, symSize: 0x3A0 } + - { offsetInCU: 0x4C, offset: 0xA20FE, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0x341EE0, symSize: 0x6C0 } + - { offsetInCU: 0x66, offset: 0xA2118, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0x3425A0, symSize: 0x1138 } + - { offsetInCU: 0x50, offset: 0xA2164, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0x343840, symSize: 0x1180 } + - { offsetInCU: 0x66, offset: 0xA217A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0x3449C0, symSize: 0x1410 } + - { offsetInCU: 0x10, offset: 0xA2170, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x345DE0, symSize: 0x240 } + - { offsetInCU: 0x45, offset: 0xA21A5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x345DE0, symSize: 0x240 } + - { offsetInCU: 0x4D, offset: 0xA21AD, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0x346020, symSize: 0x9E0 } + - { offsetInCU: 0x63, offset: 0xA21C3, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0x346A00, symSize: 0x650 } + - { offsetInCU: 0x10, offset: 0xA21D2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x347060, symSize: 0x40 } + - { offsetInCU: 0x47, offset: 0xA2209, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x347060, symSize: 0x40 } + - { offsetInCU: 0x5D, offset: 0xA221F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0x3470A0, symSize: 0x40 } + - { offsetInCU: 0x76, offset: 0xA2238, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0x3470E0, symSize: 0x40 } + - { offsetInCU: 0x81, offset: 0xA2243, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0x347120, symSize: 0x1E0 } + - { offsetInCU: 0x97, offset: 0xA2259, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0x347300, symSize: 0x170 } + - { offsetInCU: 0xAB, offset: 0xA226D, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0x347470, symSize: 0x50 } + - { offsetInCU: 0xC3, offset: 0xA2285, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0x3474C0, symSize: 0x50 } + - { offsetInCU: 0xD9, offset: 0xA229B, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0x347510, symSize: 0x50 } + - { offsetInCU: 0xEF, offset: 0xA22B1, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0x347560, symSize: 0x60 } + - { offsetInCU: 0x111, offset: 0xA22D3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0x3475C0, symSize: 0x1E0 } + - { offsetInCU: 0x124, offset: 0xA22E6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0x3477A0, symSize: 0x360 } + - { offsetInCU: 0x141, offset: 0xA2303, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0x347B00, symSize: 0x2D0 } + - { offsetInCU: 0x156, offset: 0xA2318, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0x347DD0, symSize: 0x2B0 } + - { offsetInCU: 0x170, offset: 0xA2332, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0x348080, symSize: 0x250 } + - { offsetInCU: 0x184, offset: 0xA2346, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0x3482D0, symSize: 0x60 } + - { offsetInCU: 0x19A, offset: 0xA235C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0x348330, symSize: 0x44 } + - { offsetInCU: 0x10, offset: 0xA2352, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x348380, symSize: 0xB90 } + - { offsetInCU: 0x4C, offset: 0xA238E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x348380, symSize: 0xB90 } + - { offsetInCU: 0x62, offset: 0xA23A4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0x348F10, symSize: 0xB98 } + - { offsetInCU: 0x10, offset: 0xA239E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x349AC0, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xA23DF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x349AC0, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xA23DF, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x34A900, symSize: 0x7E0 } + - { offsetInCU: 0x10, offset: 0xA23EA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x34B100, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xA242B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x34B100, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xA242B, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x34BF40, symSize: 0x1F0 } ... diff --git a/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasNative.yml b/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasNative.yml index 161bd4ee7..bc48adcea 100644 --- a/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasNative.yml +++ b/packages/canvas/src-native/canvas-ios/dist/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasNative.yml @@ -2,642 +2,642 @@ triple: 'x86_64-apple-darwin' binary-path: '/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/dist/Release-iphonesimulator/CanvasNative.framework/CanvasNative' relocations: - - { offsetInCU: 0x34, offset: 0x796A4, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionString, symObjAddr: 0x0, symBinAddr: 0xAB0000, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x796D9, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionNumber, symObjAddr: 0x38, symBinAddr: 0xAB0038, symSize: 0x0 } - - { offsetInCU: 0x3F, offset: 0x7972E, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x40, symBinAddr: 0x2340, symSize: 0x10 } - - { offsetInCU: 0x53, offset: 0x79742, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x50, symBinAddr: 0x2350, symSize: 0x10 } - - { offsetInCU: 0x67, offset: 0x79756, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x60, symBinAddr: 0x2360, symSize: 0x20 } - - { offsetInCU: 0x7B, offset: 0x7976A, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x80, symBinAddr: 0x2380, symSize: 0x30 } - - { offsetInCU: 0x8F, offset: 0x7977E, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwCP', symObjAddr: 0xD0, symBinAddr: 0x23D0, symSize: 0x30 } - - { offsetInCU: 0xA3, offset: 0x79792, size: 0x8, addend: 0x0, symName: ___swift_memcpy32_8, symObjAddr: 0x100, symBinAddr: 0x2400, symSize: 0x20 } - - { offsetInCU: 0xB7, offset: 0x797A6, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwet', symObjAddr: 0x120, symBinAddr: 0x2420, symSize: 0x20 } - - { offsetInCU: 0xCB, offset: 0x797BA, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwst', symObjAddr: 0x140, symBinAddr: 0x2440, symSize: 0x30 } - - { offsetInCU: 0x4F, offset: 0x799A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC11_WriteQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x30B0, symBinAddr: 0x1378C90, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x799BD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10_ReadQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x30B8, symBinAddr: 0x1378C98, symSize: 0x0 } - - { offsetInCU: 0x9D, offset: 0x799F1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTo', symObjAddr: 0x10, symBinAddr: 0x2510, symSize: 0x40 } - - { offsetInCU: 0xF3, offset: 0x79A47, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x60, symBinAddr: 0x2560, symSize: 0x60 } - - { offsetInCU: 0x144, offset: 0x79A98, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0xD0, symBinAddr: 0x25D0, symSize: 0x40 } - - { offsetInCU: 0x19F, offset: 0x79AF3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x120, symBinAddr: 0x2620, symSize: 0x50 } - - { offsetInCU: 0x204, offset: 0x79B58, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0x180, symBinAddr: 0x2680, symSize: 0x60 } - - { offsetInCU: 0x27D, offset: 0x79BD1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x1F0, symBinAddr: 0x26F0, symSize: 0x90 } - - { offsetInCU: 0x2DA, offset: 0x79C2E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x290, symBinAddr: 0x2790, symSize: 0x20 } - - { offsetInCU: 0x35C, offset: 0x79CB0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x2C0, symBinAddr: 0x27C0, symSize: 0x20 } - - { offsetInCU: 0x40B, offset: 0x79D5F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZTo', symObjAddr: 0x350, symBinAddr: 0x2850, symSize: 0x80 } - - { offsetInCU: 0x4D0, offset: 0x79E24, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZTo', symObjAddr: 0x440, symBinAddr: 0x2940, symSize: 0x80 } - - { offsetInCU: 0x59F, offset: 0x79EF3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZTo', symObjAddr: 0x530, symBinAddr: 0x2A30, symSize: 0x80 } - - { offsetInCU: 0x669, offset: 0x79FBD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZTo', symObjAddr: 0x630, symBinAddr: 0x2B30, symSize: 0x90 } - - { offsetInCU: 0x701, offset: 0x7A055, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZTo', symObjAddr: 0x6D0, symBinAddr: 0x2BD0, symSize: 0x10 } - - { offsetInCU: 0x768, offset: 0x7A0BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZTo', symObjAddr: 0x6F0, symBinAddr: 0x2BF0, symSize: 0x10 } - - { offsetInCU: 0x7BF, offset: 0x7A113, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZTo', symObjAddr: 0x710, symBinAddr: 0x2C10, symSize: 0x10 } - - { offsetInCU: 0x816, offset: 0x7A16A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZTo', symObjAddr: 0x730, symBinAddr: 0x2C30, symSize: 0x10 } - - { offsetInCU: 0x86D, offset: 0x7A1C1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZTo', symObjAddr: 0x750, symBinAddr: 0x2C50, symSize: 0x10 } - - { offsetInCU: 0x8C4, offset: 0x7A218, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZTo', symObjAddr: 0x770, symBinAddr: 0x2C70, symSize: 0x10 } - - { offsetInCU: 0x943, offset: 0x7A297, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZTo', symObjAddr: 0x790, symBinAddr: 0x2C90, symSize: 0x40 } - - { offsetInCU: 0x9EE, offset: 0x7A342, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZTo', symObjAddr: 0x7E0, symBinAddr: 0x2CE0, symSize: 0x20 } - - { offsetInCU: 0xA61, offset: 0x7A3B5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZTo', symObjAddr: 0x810, symBinAddr: 0x2D10, symSize: 0x10 } - - { offsetInCU: 0xAB8, offset: 0x7A40C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZTo', symObjAddr: 0x880, symBinAddr: 0x2D80, symSize: 0x70 } - - { offsetInCU: 0xB43, offset: 0x7A497, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTo', symObjAddr: 0xA90, symBinAddr: 0x2F90, symSize: 0xA0 } - - { offsetInCU: 0xB94, offset: 0x7A4E8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZTo', symObjAddr: 0xD90, symBinAddr: 0x3290, symSize: 0xA0 } - - { offsetInCU: 0xBE5, offset: 0x7A539, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZTo', symObjAddr: 0x10F0, symBinAddr: 0x35F0, symSize: 0xA0 } - - { offsetInCU: 0xC41, offset: 0x7A595, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTo', symObjAddr: 0x1540, symBinAddr: 0x3A40, symSize: 0xD0 } - - { offsetInCU: 0xC89, offset: 0x7A5DD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTo', symObjAddr: 0x1620, symBinAddr: 0x3B20, symSize: 0x40 } - - { offsetInCU: 0xCE9, offset: 0x7A63D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfcTo', symObjAddr: 0x16B0, symBinAddr: 0x3BB0, symSize: 0x30 } - - { offsetInCU: 0xD3C, offset: 0x7A690, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTf4nd_n', symObjAddr: 0x1720, symBinAddr: 0x3C20, symSize: 0x300 } - - { offsetInCU: 0xF6C, offset: 0x7A8C0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTf4nnnd_n', symObjAddr: 0x1A20, symBinAddr: 0x3F20, symSize: 0x260 } - - { offsetInCU: 0x1166, offset: 0x7AABA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTf4nnd_n', symObjAddr: 0x1C80, symBinAddr: 0x4180, symSize: 0xD0 } - - { offsetInCU: 0x1263, offset: 0x7ABB7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTf4nnnnd_n', symObjAddr: 0x1D50, symBinAddr: 0x4250, symSize: 0x1B0 } - - { offsetInCU: 0x13D8, offset: 0x7AD2C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTf4nnnnnnd_n', symObjAddr: 0x1F00, symBinAddr: 0x4400, symSize: 0x1D0 } - - { offsetInCU: 0x156D, offset: 0x7AEC1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTf4nnnnnnnnnnd_n', symObjAddr: 0x20D0, symBinAddr: 0x45D0, symSize: 0x200 } - - { offsetInCU: 0x1759, offset: 0x7B0AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTf4nnnd_n', symObjAddr: 0x22D0, symBinAddr: 0x47D0, symSize: 0x1D0 } - - { offsetInCU: 0x1823, offset: 0x7B177, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTf4nnnnd_n', symObjAddr: 0x2660, symBinAddr: 0x4B60, symSize: 0x200 } - - { offsetInCU: 0x1904, offset: 0x7B258, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTf4d_n', symObjAddr: 0x2860, symBinAddr: 0x4D60, symSize: 0x110 } - - { offsetInCU: 0x19AF, offset: 0x7B303, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TR', symObjAddr: 0xB30, symBinAddr: 0x3030, symSize: 0x70 } - - { offsetInCU: 0x19C7, offset: 0x7B31B, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TR', symObjAddr: 0xE30, symBinAddr: 0x3330, symSize: 0x50 } - - { offsetInCU: 0x1A34, offset: 0x7B388, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfETo', symObjAddr: 0x1710, symBinAddr: 0x3C10, symSize: 0x10 } - - { offsetInCU: 0x1ABF, offset: 0x7B413, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCMa', symObjAddr: 0x2970, symBinAddr: 0x4E70, symSize: 0x20 } - - { offsetInCU: 0x1AD3, offset: 0x7B427, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TRTA', symObjAddr: 0x29B0, symBinAddr: 0x4EB0, symSize: 0x10 } - - { offsetInCU: 0x1AF2, offset: 0x7B446, size: 0x8, addend: 0x0, symName: '_$sSo7NSErrorCSg10ObjectiveC8ObjCBoolVIeyByy_ACSbIeggy_TRTA', symObjAddr: 0x29C0, symBinAddr: 0x4EC0, symSize: 0x20 } - - { offsetInCU: 0x1B1B, offset: 0x7B46F, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TRTA', symObjAddr: 0x29E0, symBinAddr: 0x4EE0, symSize: 0x10 } - - { offsetInCU: 0x1B2F, offset: 0x7B483, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCMa', symObjAddr: 0x29F0, symBinAddr: 0x4EF0, symSize: 0x30 } - - { offsetInCU: 0x1B43, offset: 0x7B497, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_TA', symObjAddr: 0x2A70, symBinAddr: 0x4F70, symSize: 0x40 } - - { offsetInCU: 0x1B57, offset: 0x7B4AB, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x2AB0, symBinAddr: 0x4FB0, symSize: 0x20 } - - { offsetInCU: 0x1B6B, offset: 0x7B4BF, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x2AD0, symBinAddr: 0x4FD0, symSize: 0x10 } - - { offsetInCU: 0x1B7F, offset: 0x7B4D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2B00, symBinAddr: 0x5000, symSize: 0x40 } - - { offsetInCU: 0x1BB3, offset: 0x7B507, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2BC0, symBinAddr: 0x50C0, symSize: 0x40 } - - { offsetInCU: 0x1BF1, offset: 0x7B545, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2C00, symBinAddr: 0x5100, symSize: 0x20 } - - { offsetInCU: 0x1C25, offset: 0x7B579, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2CB0, symBinAddr: 0x51B0, symSize: 0x40 } - - { offsetInCU: 0x1C59, offset: 0x7B5AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2D20, symBinAddr: 0x5220, symSize: 0x30 } - - { offsetInCU: 0x1C95, offset: 0x7B5E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_TA', symObjAddr: 0x2DA0, symBinAddr: 0x52A0, symSize: 0x30 } - - { offsetInCU: 0x1CA9, offset: 0x7B5FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2DD0, symBinAddr: 0x52D0, symSize: 0x40 } - - { offsetInCU: 0x2176, offset: 0x7BACA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZ', symObjAddr: 0x0, symBinAddr: 0x2500, symSize: 0x10 } - - { offsetInCU: 0x2191, offset: 0x7BAE5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x50, symBinAddr: 0x2550, symSize: 0x10 } - - { offsetInCU: 0x21AC, offset: 0x7BB00, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0xC0, symBinAddr: 0x25C0, symSize: 0x10 } - - { offsetInCU: 0x21CD, offset: 0x7BB21, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x110, symBinAddr: 0x2610, symSize: 0x10 } - - { offsetInCU: 0x21E8, offset: 0x7BB3C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0x170, symBinAddr: 0x2670, symSize: 0x10 } - - { offsetInCU: 0x2203, offset: 0x7BB57, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x1E0, symBinAddr: 0x26E0, symSize: 0x10 } - - { offsetInCU: 0x221E, offset: 0x7BB72, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x280, symBinAddr: 0x2780, symSize: 0x10 } - - { offsetInCU: 0x22AC, offset: 0x7BC00, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x2B0, symBinAddr: 0x27B0, symSize: 0x10 } - - { offsetInCU: 0x232B, offset: 0x7BC7F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZ', symObjAddr: 0x2E0, symBinAddr: 0x27E0, symSize: 0x70 } - - { offsetInCU: 0x247D, offset: 0x7BDD1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZ', symObjAddr: 0x3D0, symBinAddr: 0x28D0, symSize: 0x70 } - - { offsetInCU: 0x25DB, offset: 0x7BF2F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZ', symObjAddr: 0x4C0, symBinAddr: 0x29C0, symSize: 0x70 } - - { offsetInCU: 0x2739, offset: 0x7C08D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZ', symObjAddr: 0x5B0, symBinAddr: 0x2AB0, symSize: 0x80 } - - { offsetInCU: 0x28AD, offset: 0x7C201, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZ', symObjAddr: 0x6C0, symBinAddr: 0x2BC0, symSize: 0x10 } - - { offsetInCU: 0x291D, offset: 0x7C271, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZ', symObjAddr: 0x6E0, symBinAddr: 0x2BE0, symSize: 0x10 } - - { offsetInCU: 0x2960, offset: 0x7C2B4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZ', symObjAddr: 0x700, symBinAddr: 0x2C00, symSize: 0x10 } - - { offsetInCU: 0x29A5, offset: 0x7C2F9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZ', symObjAddr: 0x720, symBinAddr: 0x2C20, symSize: 0x10 } - - { offsetInCU: 0x29E8, offset: 0x7C33C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZ', symObjAddr: 0x740, symBinAddr: 0x2C40, symSize: 0x10 } - - { offsetInCU: 0x2A2B, offset: 0x7C37F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZ', symObjAddr: 0x760, symBinAddr: 0x2C60, symSize: 0x10 } - - { offsetInCU: 0x2A6E, offset: 0x7C3C2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZ', symObjAddr: 0x780, symBinAddr: 0x2C80, symSize: 0x10 } - - { offsetInCU: 0x2B54, offset: 0x7C4A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ', symObjAddr: 0x7D0, symBinAddr: 0x2CD0, symSize: 0x10 } - - { offsetInCU: 0x2BD3, offset: 0x7C527, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZ', symObjAddr: 0x800, symBinAddr: 0x2D00, symSize: 0x10 } - - { offsetInCU: 0x2C16, offset: 0x7C56A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZ', symObjAddr: 0x820, symBinAddr: 0x2D20, symSize: 0x60 } - - { offsetInCU: 0x2CD7, offset: 0x7C62B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZ', symObjAddr: 0x8F0, symBinAddr: 0x2DF0, symSize: 0x10 } - - { offsetInCU: 0x2CEB, offset: 0x7C63F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_', symObjAddr: 0x900, symBinAddr: 0x2E00, symSize: 0x190 } - - { offsetInCU: 0x2D8B, offset: 0x7C6DF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZ', symObjAddr: 0xBA0, symBinAddr: 0x30A0, symSize: 0x30 } - - { offsetInCU: 0x2D9F, offset: 0x7C6F3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_', symObjAddr: 0xBD0, symBinAddr: 0x30D0, symSize: 0x1C0 } - - { offsetInCU: 0x2E89, offset: 0x7C7DD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZ', symObjAddr: 0xE80, symBinAddr: 0x3380, symSize: 0x30 } - - { offsetInCU: 0x2E9D, offset: 0x7C7F1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_', symObjAddr: 0xEB0, symBinAddr: 0x33B0, symSize: 0x240 } - - { offsetInCU: 0x2F51, offset: 0x7C8A5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZ', symObjAddr: 0x1190, symBinAddr: 0x3690, symSize: 0x10 } - - { offsetInCU: 0x2F65, offset: 0x7C8B9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_', symObjAddr: 0x11A0, symBinAddr: 0x36A0, symSize: 0x3A0 } - - { offsetInCU: 0x31FB, offset: 0x7CB4F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZ', symObjAddr: 0x1610, symBinAddr: 0x3B10, symSize: 0x10 } - - { offsetInCU: 0x3216, offset: 0x7CB6A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfC', symObjAddr: 0x1660, symBinAddr: 0x3B60, symSize: 0x20 } - - { offsetInCU: 0x322A, offset: 0x7CB7E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfc', symObjAddr: 0x1680, symBinAddr: 0x3B80, symSize: 0x30 } - - { offsetInCU: 0x3260, offset: 0x7CBB4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfD', symObjAddr: 0x16E0, symBinAddr: 0x3BE0, symSize: 0x30 } - - { offsetInCU: 0x4F, offset: 0x7CDEC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LLSo7GLKViewCvpZ', symObjAddr: 0x5BA8, symBinAddr: 0x1378CD0, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x7CE06, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15_shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvpZ', symObjAddr: 0x5BB0, symBinAddr: 0x1378CD8, symSize: 0x0 } - - { offsetInCU: 0x83, offset: 0x7CE20, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5storeSo19NSMutableDictionaryCvpZ', symObjAddr: 0x5BB8, symBinAddr: 0x1378CE0, symSize: 0x0 } - - { offsetInCU: 0x9D, offset: 0x7CE3A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LLSo10NSMapTableCySo8NSStringCACGvpZ', symObjAddr: 0x5BC0, symBinAddr: 0x1378CE8, symSize: 0x0 } - - { offsetInCU: 0xAB, offset: 0x7CE48, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0x0, symBinAddr: 0x55A0, symSize: 0x60 } - - { offsetInCU: 0xF0, offset: 0x7CE8D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5store_WZ', symObjAddr: 0x60, symBinAddr: 0x5600, symSize: 0x30 } - - { offsetInCU: 0x135, offset: 0x7CED2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0xD0, symBinAddr: 0x5670, symSize: 0x40 } - - { offsetInCU: 0x187, offset: 0x7CF24, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x1B0, symBinAddr: 0x5750, symSize: 0x20 } - - { offsetInCU: 0x1DD, offset: 0x7CF7A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x1D0, symBinAddr: 0x5770, symSize: 0x20 } - - { offsetInCU: 0x236, offset: 0x7CFD3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x1F0, symBinAddr: 0x5790, symSize: 0x20 } - - { offsetInCU: 0x28C, offset: 0x7D029, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x210, symBinAddr: 0x57B0, symSize: 0x20 } - - { offsetInCU: 0x2E5, offset: 0x7D082, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvgTo', symObjAddr: 0x320, symBinAddr: 0x58C0, symSize: 0x40 } - - { offsetInCU: 0x320, offset: 0x7D0BD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvsTo', symObjAddr: 0x390, symBinAddr: 0x5930, symSize: 0x30 } - - { offsetInCU: 0x3AF, offset: 0x7D14C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvgTo', symObjAddr: 0x5D0, symBinAddr: 0x5B70, symSize: 0x40 } - - { offsetInCU: 0x405, offset: 0x7D1A2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvsTo', symObjAddr: 0x640, symBinAddr: 0x5BE0, symSize: 0x40 } - - { offsetInCU: 0x45E, offset: 0x7D1FB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvgTo', symObjAddr: 0x680, symBinAddr: 0x5C20, symSize: 0x40 } - - { offsetInCU: 0x4B4, offset: 0x7D251, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvsTo', symObjAddr: 0x6F0, symBinAddr: 0x5C90, symSize: 0x40 } - - { offsetInCU: 0x50D, offset: 0x7D2AA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0x730, symBinAddr: 0x5CD0, symSize: 0x20 } - - { offsetInCU: 0x563, offset: 0x7D300, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0x750, symBinAddr: 0x5CF0, symSize: 0x20 } - - { offsetInCU: 0x5BC, offset: 0x7D359, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0x770, symBinAddr: 0x5D10, symSize: 0x20 } - - { offsetInCU: 0x614, offset: 0x7D3B1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvsTo', symObjAddr: 0x790, symBinAddr: 0x5D30, symSize: 0x30 } - - { offsetInCU: 0x66D, offset: 0x7D40A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x7C0, symBinAddr: 0x5D60, symSize: 0x20 } - - { offsetInCU: 0x6C5, offset: 0x7D462, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvsTo', symObjAddr: 0x7E0, symBinAddr: 0x5D80, symSize: 0x30 } - - { offsetInCU: 0x71E, offset: 0x7D4BB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x810, symBinAddr: 0x5DB0, symSize: 0x20 } - - { offsetInCU: 0x774, offset: 0x7D511, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x830, symBinAddr: 0x5DD0, symSize: 0x10 } - - { offsetInCU: 0x7CD, offset: 0x7D56A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvgTo', symObjAddr: 0x840, symBinAddr: 0x5DE0, symSize: 0x20 } - - { offsetInCU: 0x823, offset: 0x7D5C0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvsTo', symObjAddr: 0x860, symBinAddr: 0x5E00, symSize: 0x10 } - - { offsetInCU: 0x866, offset: 0x7D603, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivgTo', symObjAddr: 0x870, symBinAddr: 0x5E10, symSize: 0x30 } - - { offsetInCU: 0x898, offset: 0x7D635, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivgTo', symObjAddr: 0x960, symBinAddr: 0x5F00, symSize: 0x30 } - - { offsetInCU: 0x8E0, offset: 0x7D67D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvgTo', symObjAddr: 0xA50, symBinAddr: 0x5FF0, symSize: 0x30 } - - { offsetInCU: 0x948, offset: 0x7D6E5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvgTo', symObjAddr: 0xAB0, symBinAddr: 0x6050, symSize: 0x30 } - - { offsetInCU: 0x9E7, offset: 0x7D784, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btFTo', symObjAddr: 0xB20, symBinAddr: 0x60C0, symSize: 0xD0 } - - { offsetInCU: 0xA96, offset: 0x7D833, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VFTo', symObjAddr: 0xDA0, symBinAddr: 0x6340, symSize: 0x30 } - - { offsetInCU: 0xB46, offset: 0x7D8E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x1760, symBinAddr: 0x6D00, symSize: 0xD0 } - - { offsetInCU: 0xBB0, offset: 0x7D94D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtFTo', symObjAddr: 0x1A70, symBinAddr: 0x7010, symSize: 0x90 } - - { offsetInCU: 0xBED, offset: 0x7D98A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x1BF0, symBinAddr: 0x7190, symSize: 0x100 } - - { offsetInCU: 0xC6B, offset: 0x7DA08, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbFTo', symObjAddr: 0x1DC0, symBinAddr: 0x7360, symSize: 0x40 } - - { offsetInCU: 0xC9E, offset: 0x7DA3B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1E00, symBinAddr: 0x73A0, symSize: 0x20 } - - { offsetInCU: 0xCF8, offset: 0x7DA95, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvsTo', symObjAddr: 0x1E20, symBinAddr: 0x73C0, symSize: 0x30 } - - { offsetInCU: 0xD53, offset: 0x7DAF0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyFTo', symObjAddr: 0x1E90, symBinAddr: 0x7430, symSize: 0x40 } - - { offsetInCU: 0xDE9, offset: 0x7DB86, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VFTo', symObjAddr: 0x1F10, symBinAddr: 0x74B0, symSize: 0x60 } - - { offsetInCU: 0xEAE, offset: 0x7DC4B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VFTo', symObjAddr: 0x1FD0, symBinAddr: 0x7570, symSize: 0xA0 } - - { offsetInCU: 0xF3B, offset: 0x7DCD8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC23enterBackgroundListeneryycSgvsTo', symObjAddr: 0x20C0, symBinAddr: 0x7660, symSize: 0x70 } - - { offsetInCU: 0xF9D, offset: 0x7DD3A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC20becomeActiveListeneryycSgvsTo', symObjAddr: 0x21D0, symBinAddr: 0x7770, symSize: 0x70 } - - { offsetInCU: 0xFFA, offset: 0x7DD97, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvgTo', symObjAddr: 0x2240, symBinAddr: 0x77E0, symSize: 0xB0 } - - { offsetInCU: 0x104A, offset: 0x7DDE7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvsTo', symObjAddr: 0x23B0, symBinAddr: 0x7950, symSize: 0x90 } - - { offsetInCU: 0x10DA, offset: 0x7DE77, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x3110, symBinAddr: 0x86B0, symSize: 0x30 } - - { offsetInCU: 0x112F, offset: 0x7DECC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x3C90, symBinAddr: 0x9230, symSize: 0x30 } - - { offsetInCU: 0x1162, offset: 0x7DEFF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x3CC0, symBinAddr: 0x9260, symSize: 0x20 } - - { offsetInCU: 0x11BA, offset: 0x7DF57, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvsTo', symObjAddr: 0x3CE0, symBinAddr: 0x9280, symSize: 0x30 } - - { offsetInCU: 0x1228, offset: 0x7DFC5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvgTo', symObjAddr: 0x3D90, symBinAddr: 0x9330, symSize: 0x30 } - - { offsetInCU: 0x1282, offset: 0x7E01F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvsTo', symObjAddr: 0x3DC0, symBinAddr: 0x9360, symSize: 0x30 } - - { offsetInCU: 0x12E2, offset: 0x7E07F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgFTo', symObjAddr: 0x3E20, symBinAddr: 0x93C0, symSize: 0x30 } - - { offsetInCU: 0x1426, offset: 0x7E1C3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFTo', symObjAddr: 0x4200, symBinAddr: 0x97A0, symSize: 0x30 } - - { offsetInCU: 0x1459, offset: 0x7E1F6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfDTo', symObjAddr: 0x4520, symBinAddr: 0x9AC0, symSize: 0x20 } - - { offsetInCU: 0x1494, offset: 0x7E231, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTo', symObjAddr: 0x4610, symBinAddr: 0x9BB0, symSize: 0x30 } - - { offsetInCU: 0x14C7, offset: 0x7E264, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvgZTf4d_n', symObjAddr: 0x5040, symBinAddr: 0xA5E0, symSize: 0x2A0 } - - { offsetInCU: 0x162F, offset: 0x7E3CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTf4nnd_n', symObjAddr: 0x53B0, symBinAddr: 0xA950, symSize: 0xC0 } - - { offsetInCU: 0x184B, offset: 0x7E5E8, size: 0x8, addend: 0x0, symName: '_$sIeg_IeyB_TR', symObjAddr: 0x2090, symBinAddr: 0x7630, symSize: 0x30 } - - { offsetInCU: 0x1863, offset: 0x7E600, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_So8NSStringCABIeyByy_TR', symObjAddr: 0x2340, symBinAddr: 0x78E0, symSize: 0x70 } - - { offsetInCU: 0x187B, offset: 0x7E618, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTK', symObjAddr: 0x24A0, symBinAddr: 0x7A40, symSize: 0x90 } - - { offsetInCU: 0x18B3, offset: 0x7E650, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTk', symObjAddr: 0x2530, symBinAddr: 0x7AD0, symSize: 0xC0 } - - { offsetInCU: 0x18F3, offset: 0x7E690, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TR', symObjAddr: 0x25F0, symBinAddr: 0x7B90, symSize: 0x70 } - - { offsetInCU: 0x19A3, offset: 0x7E740, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfETo', symObjAddr: 0x4540, symBinAddr: 0x9AE0, symSize: 0xC0 } - - { offsetInCU: 0x19D3, offset: 0x7E770, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOy', symObjAddr: 0x4640, symBinAddr: 0x9BE0, symSize: 0x20 } - - { offsetInCU: 0x19E7, offset: 0x7E784, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCMa', symObjAddr: 0x4660, symBinAddr: 0x9C00, symSize: 0x20 } - - { offsetInCU: 0x19FB, offset: 0x7E798, size: 0x8, addend: 0x0, symName: '_$ss29getContiguousArrayStorageType3fors01_bcD0CyxGmxm_tlFSo18NSLayoutConstraintC_Tgm5', symObjAddr: 0x4680, symBinAddr: 0x9C20, symSize: 0x60 } - - { offsetInCU: 0x1C02, offset: 0x7E99F, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x52E0, symBinAddr: 0xA880, symSize: 0x40 } - - { offsetInCU: 0x1C16, offset: 0x7E9B3, size: 0x8, addend: 0x0, symName: '_$sypSgWOh', symObjAddr: 0x5320, symBinAddr: 0xA8C0, symSize: 0x30 } - - { offsetInCU: 0x1C2A, offset: 0x7E9C7, size: 0x8, addend: 0x0, symName: ___swift_project_boxed_opaque_existential_0, symObjAddr: 0x5350, symBinAddr: 0xA8F0, symSize: 0x30 } - - { offsetInCU: 0x1C3E, offset: 0x7E9DB, size: 0x8, addend: 0x0, symName: ___swift_destroy_boxed_opaque_existential_0, symObjAddr: 0x5380, symBinAddr: 0xA920, symSize: 0x30 } - - { offsetInCU: 0x1C5D, offset: 0x7E9FA, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSo19UIGestureRecognizerCIeyByy_SSADIeggg_TRTA', symObjAddr: 0x5910, symBinAddr: 0xAEB0, symSize: 0x40 } - - { offsetInCU: 0x1C86, offset: 0x7EA23, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x5950, symBinAddr: 0xAEF0, symSize: 0x20 } - - { offsetInCU: 0x1C9A, offset: 0x7EA37, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x5970, symBinAddr: 0xAF10, symSize: 0x10 } - - { offsetInCU: 0x1CAE, offset: 0x7EA4B, size: 0x8, addend: 0x0, symName: '_$sIeg_SgWOe', symObjAddr: 0x5980, symBinAddr: 0xAF20, symSize: 0x20 } - - { offsetInCU: 0x1CCD, offset: 0x7EA6A, size: 0x8, addend: 0x0, symName: '_$sIeyB_Ieg_TRTA', symObjAddr: 0x59A0, symBinAddr: 0xAF40, symSize: 0x10 } - - { offsetInCU: 0x1CF6, offset: 0x7EA93, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TRTA', symObjAddr: 0x59D0, symBinAddr: 0xAF70, symSize: 0x20 } - - { offsetInCU: 0x1D15, offset: 0x7EAB2, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SSABytIegnnr_TRTA', symObjAddr: 0x59F0, symBinAddr: 0xAF90, symSize: 0x30 } - - { offsetInCU: 0x1D3E, offset: 0x7EADB, size: 0x8, addend: 0x0, symName: '_$sypWOb', symObjAddr: 0x5A20, symBinAddr: 0xAFC0, symSize: 0x20 } - - { offsetInCU: 0x1D52, offset: 0x7EAEF, size: 0x8, addend: 0x0, symName: '_$sypWOc', symObjAddr: 0x5A70, symBinAddr: 0xB010, symSize: 0x30 } - - { offsetInCU: 0x1FD7, offset: 0x7ED74, size: 0x8, addend: 0x0, symName: '_$sSD17dictionaryLiteralSDyxq_Gx_q_td_tcfCSS_ypTgm5Tf4g_n', symObjAddr: 0x4F50, symBinAddr: 0xA4F0, symSize: 0xF0 } - - { offsetInCU: 0x2469, offset: 0x7F206, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvg', symObjAddr: 0x360, symBinAddr: 0x5900, symSize: 0x30 } - - { offsetInCU: 0x249A, offset: 0x7F237, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvs', symObjAddr: 0x3C0, symBinAddr: 0x5960, symSize: 0xE0 } - - { offsetInCU: 0x24E4, offset: 0x7F281, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM', symObjAddr: 0x4A0, symBinAddr: 0x5A40, symSize: 0x50 } - - { offsetInCU: 0x2507, offset: 0x7F2A4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM.resume.0', symObjAddr: 0x4F0, symBinAddr: 0x5A90, symSize: 0xE0 } - - { offsetInCU: 0x2548, offset: 0x7F2E5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64Vvg', symObjAddr: 0x610, symBinAddr: 0x5BB0, symSize: 0x30 } - - { offsetInCU: 0x259E, offset: 0x7F33B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg', symObjAddr: 0x6C0, symBinAddr: 0x5C60, symSize: 0x30 } - - { offsetInCU: 0x270A, offset: 0x7F4A7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivg', symObjAddr: 0x8A0, symBinAddr: 0x5E40, symSize: 0xC0 } - - { offsetInCU: 0x282F, offset: 0x7F5CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivg', symObjAddr: 0x990, symBinAddr: 0x5F30, symSize: 0xC0 } - - { offsetInCU: 0x2975, offset: 0x7F712, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvg', symObjAddr: 0xA80, symBinAddr: 0x6020, symSize: 0x30 } - - { offsetInCU: 0x29BB, offset: 0x7F758, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvg', symObjAddr: 0xAE0, symBinAddr: 0x6080, symSize: 0x30 } - - { offsetInCU: 0x29ED, offset: 0x7F78A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btF', symObjAddr: 0xB10, symBinAddr: 0x60B0, symSize: 0x10 } - - { offsetInCU: 0x2B6A, offset: 0x7F907, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VF', symObjAddr: 0xBF0, symBinAddr: 0x6190, symSize: 0x1B0 } - - { offsetInCU: 0x2F4D, offset: 0x7FCEA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btF', symObjAddr: 0xDD0, symBinAddr: 0x6370, symSize: 0x990 } - - { offsetInCU: 0x36DB, offset: 0x80478, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtF', symObjAddr: 0x1830, symBinAddr: 0x6DD0, symSize: 0x240 } - - { offsetInCU: 0x3B67, offset: 0x80904, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x1B00, symBinAddr: 0x70A0, symSize: 0xF0 } - - { offsetInCU: 0x3BF6, offset: 0x80993, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbF', symObjAddr: 0x1CF0, symBinAddr: 0x7290, symSize: 0xD0 } - - { offsetInCU: 0x3D4F, offset: 0x80AEC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyF', symObjAddr: 0x1E50, symBinAddr: 0x73F0, symSize: 0x40 } - - { offsetInCU: 0x3DD3, offset: 0x80B70, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF', symObjAddr: 0x1ED0, symBinAddr: 0x7470, symSize: 0x40 } - - { offsetInCU: 0x3EF2, offset: 0x80C8F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VF', symObjAddr: 0x1F70, symBinAddr: 0x7510, symSize: 0x60 } - - { offsetInCU: 0x3FE8, offset: 0x80D85, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvg', symObjAddr: 0x22F0, symBinAddr: 0x7890, symSize: 0x50 } - - { offsetInCU: 0x4032, offset: 0x80DCF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvs', symObjAddr: 0x2440, symBinAddr: 0x79E0, symSize: 0x60 } - - { offsetInCU: 0x4059, offset: 0x80DF6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM', symObjAddr: 0x2660, symBinAddr: 0x7C00, symSize: 0x40 } - - { offsetInCU: 0x407F, offset: 0x80E1C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM.resume.0', symObjAddr: 0x26A0, symBinAddr: 0x7C40, symSize: 0x10 } - - { offsetInCU: 0x4141, offset: 0x80EDE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x26B0, symBinAddr: 0x7C50, symSize: 0xA60 } - - { offsetInCU: 0x4348, offset: 0x810E5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfC', symObjAddr: 0x3140, symBinAddr: 0x86E0, symSize: 0x80 } - - { offsetInCU: 0x4371, offset: 0x8110E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfc', symObjAddr: 0x31C0, symBinAddr: 0x8760, symSize: 0xAD0 } - - { offsetInCU: 0x4599, offset: 0x81336, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvW', symObjAddr: 0x3D10, symBinAddr: 0x92B0, symSize: 0x80 } - - { offsetInCU: 0x468F, offset: 0x8142C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgF', symObjAddr: 0x3DF0, symBinAddr: 0x9390, symSize: 0x30 } - - { offsetInCU: 0x472B, offset: 0x814C8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6resize33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x3E50, symBinAddr: 0x93F0, symSize: 0x110 } - - { offsetInCU: 0x497C, offset: 0x81719, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyF', symObjAddr: 0x3F60, symBinAddr: 0x9500, symSize: 0x2A0 } - - { offsetInCU: 0x4BD8, offset: 0x81975, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfD', symObjAddr: 0x4230, symBinAddr: 0x97D0, symSize: 0x2F0 } - - { offsetInCU: 0x4C66, offset: 0x81A03, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZ', symObjAddr: 0x4600, symBinAddr: 0x9BA0, symSize: 0x10 } - - { offsetInCU: 0x4C8E, offset: 0x81A2B, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4findys10_HashTableV6BucketV6bucket_Sb5foundtxSHRzlFSS_Tg5', symObjAddr: 0x46E0, symBinAddr: 0x9C80, symSize: 0x60 } - - { offsetInCU: 0x4CE8, offset: 0x81A85, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV7_insert2at3key5valueys10_HashTableV6BucketV_xnq_ntFSS_ypTg5', symObjAddr: 0x4740, symBinAddr: 0x9CE0, symSize: 0x60 } - - { offsetInCU: 0x4D54, offset: 0x81AF1, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV12mutatingFind_8isUniques10_HashTableV6BucketV6bucket_Sb5foundtx_SbtFSS_ypTg5', symObjAddr: 0x47A0, symBinAddr: 0x9D40, symSize: 0xB0 } - - { offsetInCU: 0x4D91, offset: 0x81B2E, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4find_9hashValues10_HashTableV6BucketV6bucket_Sb5foundtx_SitSHRzlFSS_Tg5', symObjAddr: 0x4850, symBinAddr: 0x9DF0, symSize: 0xE0 } - - { offsetInCU: 0x4DFC, offset: 0x81B99, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV4copyyyFSS_ypTg5', symObjAddr: 0x4930, symBinAddr: 0x9ED0, symSize: 0x260 } - - { offsetInCU: 0x4EA4, offset: 0x81C41, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV20_copyOrMoveAndResize8capacity12moveElementsySi_SbtFSS_ypTg5', symObjAddr: 0x4B90, symBinAddr: 0xA130, symSize: 0x3C0 } - - { offsetInCU: 0x27, offset: 0x81E7A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xB0F0, symSize: 0x20 } - - { offsetInCU: 0x62, offset: 0x81EB5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCMa', symObjAddr: 0x20, symBinAddr: 0xB110, symSize: 0x14 } - - { offsetInCU: 0x1AF, offset: 0x82002, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xB0F0, symSize: 0x20 } - - { offsetInCU: 0x65, offset: 0x8208F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvgTo', symObjAddr: 0x0, symBinAddr: 0xB130, symSize: 0x10 } - - { offsetInCU: 0xBB, offset: 0x820E5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvsTo', symObjAddr: 0x10, symBinAddr: 0xB140, symSize: 0x10 } - - { offsetInCU: 0x114, offset: 0x8213E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvgTo', symObjAddr: 0x20, symBinAddr: 0xB150, symSize: 0x40 } - - { offsetInCU: 0x16A, offset: 0x82194, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvsTo', symObjAddr: 0x60, symBinAddr: 0xB190, symSize: 0x40 } - - { offsetInCU: 0x1C3, offset: 0x821ED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvgTo', symObjAddr: 0xA0, symBinAddr: 0xB1D0, symSize: 0x40 } - - { offsetInCU: 0x219, offset: 0x82243, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvsTo', symObjAddr: 0xE0, symBinAddr: 0xB210, symSize: 0x40 } - - { offsetInCU: 0x272, offset: 0x8229C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivgTo', symObjAddr: 0x120, symBinAddr: 0xB250, symSize: 0x20 } - - { offsetInCU: 0x2C8, offset: 0x822F2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivsTo', symObjAddr: 0x140, symBinAddr: 0xB270, symSize: 0x20 } - - { offsetInCU: 0x321, offset: 0x8234B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivgTo', symObjAddr: 0x160, symBinAddr: 0xB290, symSize: 0x20 } - - { offsetInCU: 0x377, offset: 0x823A1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivsTo', symObjAddr: 0x180, symBinAddr: 0xB2B0, symSize: 0x20 } - - { offsetInCU: 0x3D0, offset: 0x823FA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvgTo', symObjAddr: 0x1A0, symBinAddr: 0xB2D0, symSize: 0x40 } - - { offsetInCU: 0x426, offset: 0x82450, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvsTo', symObjAddr: 0x1E0, symBinAddr: 0xB310, symSize: 0x40 } - - { offsetInCU: 0x47F, offset: 0x824A9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvgTo', symObjAddr: 0x220, symBinAddr: 0xB350, symSize: 0x10 } - - { offsetInCU: 0x4D5, offset: 0x824FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvsTo', symObjAddr: 0x230, symBinAddr: 0xB360, symSize: 0x10 } - - { offsetInCU: 0x52E, offset: 0x82558, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvgTo', symObjAddr: 0x240, symBinAddr: 0xB370, symSize: 0x10 } - - { offsetInCU: 0x584, offset: 0x825AE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvsTo', symObjAddr: 0x250, symBinAddr: 0xB380, symSize: 0x10 } - - { offsetInCU: 0x5DD, offset: 0x82607, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvgTo', symObjAddr: 0x260, symBinAddr: 0xB390, symSize: 0x40 } - - { offsetInCU: 0x633, offset: 0x8265D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvsTo', symObjAddr: 0x2A0, symBinAddr: 0xB3D0, symSize: 0x40 } - - { offsetInCU: 0x676, offset: 0x826A0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13SIZE_OF_FLOATSivgZTo', symObjAddr: 0x2E0, symBinAddr: 0xB410, symSize: 0x10 } - - { offsetInCU: 0x692, offset: 0x826BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13VERTEX_SHADERSSvgZTo', symObjAddr: 0x2F0, symBinAddr: 0xB420, symSize: 0x30 } - - { offsetInCU: 0x6C4, offset: 0x826EE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvgTo', symObjAddr: 0x320, symBinAddr: 0xB450, symSize: 0x20 } - - { offsetInCU: 0x71C, offset: 0x82746, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvsTo', symObjAddr: 0x340, symBinAddr: 0xB470, symSize: 0x30 } - - { offsetInCU: 0x775, offset: 0x8279F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvgTo', symObjAddr: 0x490, symBinAddr: 0xB5C0, symSize: 0x20 } - - { offsetInCU: 0x7CB, offset: 0x827F5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvsTo', symObjAddr: 0x4B0, symBinAddr: 0xB5E0, symSize: 0x20 } - - { offsetInCU: 0x83A, offset: 0x82864, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfcTo', symObjAddr: 0x680, symBinAddr: 0xB770, symSize: 0x20 } - - { offsetInCU: 0x86C, offset: 0x82896, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyFTo', symObjAddr: 0x7E0, symBinAddr: 0xB8D0, symSize: 0x30 } - - { offsetInCU: 0x8C4, offset: 0x828EE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTo', symObjAddr: 0x830, symBinAddr: 0xB920, symSize: 0x80 } - - { offsetInCU: 0x928, offset: 0x82952, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTo', symObjAddr: 0x8B0, symBinAddr: 0xB9A0, symSize: 0x80 } - - { offsetInCU: 0x9CA, offset: 0x829F4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyFTo', symObjAddr: 0xCE0, symBinAddr: 0xBDD0, symSize: 0x30 } - - { offsetInCU: 0xAB4, offset: 0x82ADE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCMa', symObjAddr: 0x660, symBinAddr: 0xB750, symSize: 0x20 } - - { offsetInCU: 0xB33, offset: 0x82B5D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfETo', symObjAddr: 0xD40, symBinAddr: 0xBE30, symSize: 0x60 } - - { offsetInCU: 0x1271, offset: 0x8329B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfC', symObjAddr: 0x4D0, symBinAddr: 0xB600, symSize: 0x20 } - - { offsetInCU: 0x128B, offset: 0x832B5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfc', symObjAddr: 0x4F0, symBinAddr: 0xB620, symSize: 0x130 } - - { offsetInCU: 0x12BB, offset: 0x832E5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyF', symObjAddr: 0x6A0, symBinAddr: 0xB790, symSize: 0x140 } - - { offsetInCU: 0x1474, offset: 0x8349E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtF', symObjAddr: 0x810, symBinAddr: 0xB900, symSize: 0x20 } - - { offsetInCU: 0x1525, offset: 0x8354F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyF', symObjAddr: 0x930, symBinAddr: 0xBA20, symSize: 0x3B0 } - - { offsetInCU: 0x18BB, offset: 0x838E5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfD', symObjAddr: 0xD10, symBinAddr: 0xBE00, symSize: 0x30 } - - { offsetInCU: 0x19B4, offset: 0x839DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTf4ddnndnndn_n', symObjAddr: 0xDA0, symBinAddr: 0xBE90, symSize: 0x720 } - - { offsetInCU: 0x231C, offset: 0x84346, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTf4nnnnndn_n', symObjAddr: 0x1520, symBinAddr: 0xC610, symSize: 0x7EC } - - { offsetInCU: 0x10C, offset: 0x84EEF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfcTo', symObjAddr: 0x1120, symBinAddr: 0xDEE0, symSize: 0x60 } - - { offsetInCU: 0x19C, offset: 0x84F7F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCfETo', symObjAddr: 0x11A0, symBinAddr: 0xDF60, symSize: 0x20 } - - { offsetInCU: 0x1CB, offset: 0x84FAE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6handleyySo19UIGestureRecognizerCFTo', symObjAddr: 0x11C0, symBinAddr: 0xDF80, symSize: 0x10 } - - { offsetInCU: 0x368, offset: 0x8514B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCACycfcTo', symObjAddr: 0x1A40, symBinAddr: 0xE800, symSize: 0x30 } - - { offsetInCU: 0x5E4, offset: 0x853C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCfETo', symObjAddr: 0x1AC0, symBinAddr: 0xE880, symSize: 0x60 } - - { offsetInCU: 0x613, offset: 0x853F6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCMa', symObjAddr: 0x1B20, symBinAddr: 0xE8E0, symSize: 0x20 } - - { offsetInCU: 0x627, offset: 0x8540A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCMa', symObjAddr: 0x1B40, symBinAddr: 0xE900, symSize: 0x20 } - - { offsetInCU: 0x63B, offset: 0x8541E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwCP', symObjAddr: 0x1B60, symBinAddr: 0xE920, symSize: 0x30 } - - { offsetInCU: 0x64F, offset: 0x85432, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwxx', symObjAddr: 0x1B90, symBinAddr: 0xE950, symSize: 0x10 } - - { offsetInCU: 0x663, offset: 0x85446, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwcp', symObjAddr: 0x1BA0, symBinAddr: 0xE960, symSize: 0x30 } - - { offsetInCU: 0x677, offset: 0x8545A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwca', symObjAddr: 0x1BD0, symBinAddr: 0xE990, symSize: 0x50 } - - { offsetInCU: 0x68B, offset: 0x8546E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwta', symObjAddr: 0x1C40, symBinAddr: 0xE9E0, symSize: 0x40 } - - { offsetInCU: 0x69F, offset: 0x85482, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwet', symObjAddr: 0x1C80, symBinAddr: 0xEA20, symSize: 0x40 } - - { offsetInCU: 0x6B3, offset: 0x85496, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwst', symObjAddr: 0x1CC0, symBinAddr: 0xEA60, symSize: 0x50 } - - { offsetInCU: 0x6C7, offset: 0x854AA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVMa', symObjAddr: 0x1D10, symBinAddr: 0xEAB0, symSize: 0x10 } - - { offsetInCU: 0x6DB, offset: 0x854BE, size: 0x8, addend: 0x0, symName: '_$sypSgWOc', symObjAddr: 0x1D20, symBinAddr: 0xEAC0, symSize: 0x40 } - - { offsetInCU: 0x6EF, offset: 0x854D2, size: 0x8, addend: 0x0, symName: '_$sSo7UITouchCSo8NSObjectCSH10ObjectiveCWl', symObjAddr: 0x1E30, symBinAddr: 0xEB00, symSize: 0x50 } - - { offsetInCU: 0x703, offset: 0x854E6, size: 0x8, addend: 0x0, symName: '_$sSh8IteratorV8_VariantOyx__GSHRzlWOe', symObjAddr: 0x1E80, symBinAddr: 0xEB50, symSize: 0x20 } - - { offsetInCU: 0x761, offset: 0x85544, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOe', symObjAddr: 0x21A0, symBinAddr: 0xEE70, symSize: 0x14 } - - { offsetInCU: 0xCB4, offset: 0x85A97, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesBegan_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x0, symBinAddr: 0xCE00, symSize: 0x630 } - - { offsetInCU: 0xF39, offset: 0x85D1C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesMoved_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x650, symBinAddr: 0xD450, symSize: 0xE0 } - - { offsetInCU: 0xFB8, offset: 0x85D9B, size: 0x8, addend: 0x0, symName: '_$sSa6remove2atxSi_tF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x800, symBinAddr: 0xD5E0, symSize: 0xB0 } - - { offsetInCU: 0x102A, offset: 0x85E0D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfc', symObjAddr: 0x1030, symBinAddr: 0xDDF0, symSize: 0xF0 } - - { offsetInCU: 0x1179, offset: 0x85F5C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6onMove33_044DDF836BDB3B89B481C6F58BB6EF6BLLyySo19UIGestureRecognizerC_ShySo7UITouchCGSgtF', symObjAddr: 0x1590, symBinAddr: 0xE350, symSize: 0x4B0 } - - { offsetInCU: 0x18C2, offset: 0x866A5, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNewAByxGyF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x1EA0, symBinAddr: 0xEB70, symSize: 0x20 } - - { offsetInCU: 0x195A, offset: 0x8673D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6canvasAcA9NSCCanvasC_tcfcTf4gn_n', symObjAddr: 0x1EC0, symBinAddr: 0xEB90, symSize: 0x1F0 } - - { offsetInCU: 0x27, offset: 0x86906, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xEE90, symSize: 0x30 } - - { offsetInCU: 0x4B, offset: 0x8692A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvpZ', symObjAddr: 0x2A0, symBinAddr: 0x1378FF8, symSize: 0x0 } - - { offsetInCU: 0x65, offset: 0x86944, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xEE90, symSize: 0x30 } - - { offsetInCU: 0x98, offset: 0x86977, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZTo', symObjAddr: 0x160, symBinAddr: 0xEFF0, symSize: 0x30 } - - { offsetInCU: 0x104, offset: 0x869E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfcTo', symObjAddr: 0x200, symBinAddr: 0xF090, symSize: 0x30 } - - { offsetInCU: 0x158, offset: 0x86A37, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queue_WZ', symObjAddr: 0x30, symBinAddr: 0xEEC0, symSize: 0xF0 } - - { offsetInCU: 0x183, offset: 0x86A62, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCMa', symObjAddr: 0x1E0, symBinAddr: 0xF070, symSize: 0x20 } - - { offsetInCU: 0x197, offset: 0x86A76, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfETo', symObjAddr: 0x260, symBinAddr: 0xF0F0, symSize: 0x10 } - - { offsetInCU: 0x1C2, offset: 0x86AA1, size: 0x8, addend: 0x0, symName: '_$sSo17OS_dispatch_queueCMa', symObjAddr: 0x270, symBinAddr: 0xF100, symSize: 0x2F } - - { offsetInCU: 0x34A, offset: 0x86C29, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZ', symObjAddr: 0x120, symBinAddr: 0xEFB0, symSize: 0x40 } - - { offsetInCU: 0x38A, offset: 0x86C69, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfC', symObjAddr: 0x190, symBinAddr: 0xF020, symSize: 0x20 } - - { offsetInCU: 0x39E, offset: 0x86C7D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfc', symObjAddr: 0x1B0, symBinAddr: 0xF040, symSize: 0x30 } - - { offsetInCU: 0x3DA, offset: 0x86CB9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfD', symObjAddr: 0x230, symBinAddr: 0xF0C0, symSize: 0x30 } - - { offsetInCU: 0x2B, offset: 0x86D07, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xF130, symSize: 0xA0 } - - { offsetInCU: 0x66, offset: 0x86D42, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZTo', symObjAddr: 0xA0, symBinAddr: 0xF1D0, symSize: 0xA0 } - - { offsetInCU: 0xF9, offset: 0x86DD5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZTo', symObjAddr: 0x1D0, symBinAddr: 0xF300, symSize: 0x100 } - - { offsetInCU: 0x1AD, offset: 0x86E89, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZTo', symObjAddr: 0x300, symBinAddr: 0xF430, symSize: 0x30 } - - { offsetInCU: 0x22D, offset: 0x86F09, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTo', symObjAddr: 0x340, symBinAddr: 0xF470, symSize: 0x90 } - - { offsetInCU: 0x2A6, offset: 0x86F82, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZTo', symObjAddr: 0x4E0, symBinAddr: 0xF610, symSize: 0x140 } - - { offsetInCU: 0x345, offset: 0x87021, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfcTo', symObjAddr: 0x670, symBinAddr: 0xF7A0, symSize: 0x30 } - - { offsetInCU: 0x398, offset: 0x87074, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTf4nnnnnndd_n', symObjAddr: 0x6D0, symBinAddr: 0xF800, symSize: 0x170 } - - { offsetInCU: 0x50B, offset: 0x871E7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC7getFile33_F00B23A4165DD6ABFCD23C8811C7DF43LLyS2SKFZTf4nd_g', symObjAddr: 0x840, symBinAddr: 0xF970, symSize: 0x310 } - - { offsetInCU: 0x5EA, offset: 0x872C6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCMa', symObjAddr: 0xB50, symBinAddr: 0xFC80, symSize: 0x20 } - - { offsetInCU: 0x5FE, offset: 0x872DA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOAEs5ErrorAAWl', symObjAddr: 0xB70, symBinAddr: 0xFCA0, symSize: 0x30 } - - { offsetInCU: 0x612, offset: 0x872EE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwCP', symObjAddr: 0xBA0, symBinAddr: 0xFCD0, symSize: 0x30 } - - { offsetInCU: 0x626, offset: 0x87302, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwxx', symObjAddr: 0xBD0, symBinAddr: 0xFD00, symSize: 0x10 } - - { offsetInCU: 0x63A, offset: 0x87316, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwca', symObjAddr: 0xBE0, symBinAddr: 0xFD10, symSize: 0x40 } - - { offsetInCU: 0x64E, offset: 0x8732A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwta', symObjAddr: 0xC30, symBinAddr: 0xFD50, symSize: 0x30 } - - { offsetInCU: 0x662, offset: 0x8733E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwet', symObjAddr: 0xC60, symBinAddr: 0xFD80, symSize: 0x40 } - - { offsetInCU: 0x676, offset: 0x87352, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwst', symObjAddr: 0xCA0, symBinAddr: 0xFDC0, symSize: 0x40 } - - { offsetInCU: 0x68A, offset: 0x87366, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwug', symObjAddr: 0xCE0, symBinAddr: 0xFE00, symSize: 0x10 } - - { offsetInCU: 0x69E, offset: 0x8737A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwup', symObjAddr: 0xCF0, symBinAddr: 0xFE10, symSize: 0x10 } - - { offsetInCU: 0x6B2, offset: 0x8738E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwui', symObjAddr: 0xD00, symBinAddr: 0xFE20, symSize: 0x10 } - - { offsetInCU: 0x6C6, offset: 0x873A2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOMa', symObjAddr: 0xD10, symBinAddr: 0xFE30, symSize: 0x10 } - - { offsetInCU: 0x74E, offset: 0x8742A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP7_domainSSvgTW', symObjAddr: 0x3D0, symBinAddr: 0xF500, symSize: 0x10 } - - { offsetInCU: 0x76A, offset: 0x87446, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP5_codeSivgTW', symObjAddr: 0x3E0, symBinAddr: 0xF510, symSize: 0x10 } - - { offsetInCU: 0x786, offset: 0x87462, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP9_userInfoyXlSgvgTW', symObjAddr: 0x3F0, symBinAddr: 0xF520, symSize: 0x10 } - - { offsetInCU: 0x7A2, offset: 0x8747E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP19_getEmbeddedNSErroryXlSgyFTW', symObjAddr: 0x400, symBinAddr: 0xF530, symSize: 0x10 } - - { offsetInCU: 0xA56, offset: 0x87732, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xF130, symSize: 0xA0 } - - { offsetInCU: 0xAEC, offset: 0x877C8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZ', symObjAddr: 0x140, symBinAddr: 0xF270, symSize: 0x90 } - - { offsetInCU: 0xC71, offset: 0x8794D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZ', symObjAddr: 0x2D0, symBinAddr: 0xF400, symSize: 0x30 } - - { offsetInCU: 0xCBB, offset: 0x87997, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZ', symObjAddr: 0x330, symBinAddr: 0xF460, symSize: 0x10 } - - { offsetInCU: 0xCDD, offset: 0x879B9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZ', symObjAddr: 0x410, symBinAddr: 0xF540, symSize: 0xD0 } - - { offsetInCU: 0xD8D, offset: 0x87A69, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfC', symObjAddr: 0x620, symBinAddr: 0xF750, symSize: 0x20 } - - { offsetInCU: 0xDA1, offset: 0x87A7D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfc', symObjAddr: 0x640, symBinAddr: 0xF770, symSize: 0x30 } - - { offsetInCU: 0xDD7, offset: 0x87AB3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCfD', symObjAddr: 0x6A0, symBinAddr: 0xF7D0, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x87BD3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0xFE50, symSize: 0x10 } - - { offsetInCU: 0x71, offset: 0x87C1D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x10, symBinAddr: 0xFE60, symSize: 0x60 } - - { offsetInCU: 0xF6, offset: 0x87CA2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x80, symBinAddr: 0xFED0, symSize: 0x50 } - - { offsetInCU: 0x193, offset: 0x87D3F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0xE0, symBinAddr: 0xFF30, symSize: 0x60 } - - { offsetInCU: 0x25C, offset: 0x87E08, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x150, symBinAddr: 0xFFA0, symSize: 0x90 } - - { offsetInCU: 0x339, offset: 0x87EE5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfcTo', symObjAddr: 0x230, symBinAddr: 0x10080, symSize: 0x30 } - - { offsetInCU: 0x38D, offset: 0x87F39, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCMa', symObjAddr: 0x290, symBinAddr: 0x100E0, symSize: 0x14 } - - { offsetInCU: 0x4FD, offset: 0x880A9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0xFE50, symSize: 0x10 } - - { offsetInCU: 0x5A0, offset: 0x8814C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x70, symBinAddr: 0xFEC0, symSize: 0x10 } - - { offsetInCU: 0x640, offset: 0x881EC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xD0, symBinAddr: 0xFF20, symSize: 0x10 } - - { offsetInCU: 0x703, offset: 0x882AF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x140, symBinAddr: 0xFF90, symSize: 0x10 } - - { offsetInCU: 0x80F, offset: 0x883BB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfC', symObjAddr: 0x1E0, symBinAddr: 0x10030, symSize: 0x20 } - - { offsetInCU: 0x823, offset: 0x883CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfc', symObjAddr: 0x200, symBinAddr: 0x10050, symSize: 0x30 } - - { offsetInCU: 0x859, offset: 0x88405, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCfD', symObjAddr: 0x260, symBinAddr: 0x100B0, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x8844F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x10100, symSize: 0x30 } - - { offsetInCU: 0xA9, offset: 0x884D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x30, symBinAddr: 0x10130, symSize: 0x50 } - - { offsetInCU: 0x1A6, offset: 0x885CE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0xC0, symBinAddr: 0x101C0, symSize: 0x50 } - - { offsetInCU: 0x289, offset: 0x886B1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfcTo', symObjAddr: 0x180, symBinAddr: 0x10280, symSize: 0x30 } - - { offsetInCU: 0x2DD, offset: 0x88705, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCMa', symObjAddr: 0x160, symBinAddr: 0x10260, symSize: 0x20 } - - { offsetInCU: 0x487, offset: 0x888AF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x10100, symSize: 0x30 } - - { offsetInCU: 0x5DD, offset: 0x88A05, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x80, symBinAddr: 0x10180, symSize: 0x40 } - - { offsetInCU: 0x725, offset: 0x88B4D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfC', symObjAddr: 0x110, symBinAddr: 0x10210, symSize: 0x20 } - - { offsetInCU: 0x739, offset: 0x88B61, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfc', symObjAddr: 0x130, symBinAddr: 0x10230, symSize: 0x30 } - - { offsetInCU: 0x76F, offset: 0x88B97, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCfD', symObjAddr: 0x1B0, symBinAddr: 0x102B0, symSize: 0x2B } - - { offsetInCU: 0x61, offset: 0x88C1B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x10, symBinAddr: 0x102F0, symSize: 0x20 } - - { offsetInCU: 0xB7, offset: 0x88C71, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x30, symBinAddr: 0x10310, symSize: 0x10 } - - { offsetInCU: 0x110, offset: 0x88CCA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvgTo', symObjAddr: 0x40, symBinAddr: 0x10320, symSize: 0x40 } - - { offsetInCU: 0x168, offset: 0x88D22, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvsTo', symObjAddr: 0xC0, symBinAddr: 0x103A0, symSize: 0x40 } - - { offsetInCU: 0x1C3, offset: 0x88D7D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x100, symBinAddr: 0x103E0, symSize: 0x10 } - - { offsetInCU: 0x219, offset: 0x88DD3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x110, symBinAddr: 0x103F0, symSize: 0x10 } - - { offsetInCU: 0x272, offset: 0x88E2C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfcTo', symObjAddr: 0x1C0, symBinAddr: 0x104A0, symSize: 0x80 } - - { offsetInCU: 0x2CA, offset: 0x88E84, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x300, symBinAddr: 0x105E0, symSize: 0xA0 } - - { offsetInCU: 0x32C, offset: 0x88EE6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x470, symBinAddr: 0x10750, symSize: 0x30 } - - { offsetInCU: 0x35E, offset: 0x88F18, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC12bindDrawableyyFTo', symObjAddr: 0x520, symBinAddr: 0x10780, symSize: 0xA0 } - - { offsetInCU: 0x3DF, offset: 0x88F99, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC14deleteDrawableyyFTo', symObjAddr: 0x600, symBinAddr: 0x10820, symSize: 0x60 } - - { offsetInCU: 0x44F, offset: 0x89009, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTo', symObjAddr: 0x670, symBinAddr: 0x10890, symSize: 0x50 } - - { offsetInCU: 0x4C1, offset: 0x8907B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfcTo', symObjAddr: 0x780, symBinAddr: 0x109A0, symSize: 0x30 } - - { offsetInCU: 0x535, offset: 0x890EF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCMa', symObjAddr: 0x1A0, symBinAddr: 0x10480, symSize: 0x20 } - - { offsetInCU: 0x55F, offset: 0x89119, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCfETo', symObjAddr: 0x7D0, symBinAddr: 0x109F0, symSize: 0x20 } - - { offsetInCU: 0x65D, offset: 0x89217, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VFTo', symObjAddr: 0xAF0, symBinAddr: 0x10D10, symSize: 0x80 } - - { offsetInCU: 0x69B, offset: 0x89255, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xB70, symBinAddr: 0x10D90, symSize: 0x20 } - - { offsetInCU: 0x6F1, offset: 0x892AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xB90, symBinAddr: 0x10DB0, symSize: 0x10 } - - { offsetInCU: 0x74A, offset: 0x89304, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvgTo', symObjAddr: 0xBA0, symBinAddr: 0x10DC0, symSize: 0x20 } - - { offsetInCU: 0x7A2, offset: 0x8935C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvsTo', symObjAddr: 0xBC0, symBinAddr: 0x10DE0, symSize: 0x20 } - - { offsetInCU: 0x7FD, offset: 0x893B7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvgTo', symObjAddr: 0xBE0, symBinAddr: 0x10E00, symSize: 0x40 } - - { offsetInCU: 0x853, offset: 0x8940D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvsTo', symObjAddr: 0xC50, symBinAddr: 0x10E70, symSize: 0x40 } - - { offsetInCU: 0x8E6, offset: 0x894A0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfcTo', symObjAddr: 0xDC0, symBinAddr: 0x10FE0, symSize: 0x80 } - - { offsetInCU: 0x93E, offset: 0x894F8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0xF90, symBinAddr: 0x111B0, symSize: 0xA0 } - - { offsetInCU: 0x9A0, offset: 0x8955A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x10E0, symBinAddr: 0x11300, symSize: 0x30 } - - { offsetInCU: 0x9D2, offset: 0x8958C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC11deviceScaleSfyFTo', symObjAddr: 0x1110, symBinAddr: 0x11330, symSize: 0xB0 } - - { offsetInCU: 0xA53, offset: 0x8960D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTo', symObjAddr: 0x11D0, symBinAddr: 0x113E0, symSize: 0x30 } - - { offsetInCU: 0xAB1, offset: 0x8966B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCfETo', symObjAddr: 0x1250, symBinAddr: 0x11460, symSize: 0x20 } - - { offsetInCU: 0xC63, offset: 0x8981D, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfC12CanvasNative15NSCTouchHandlerC7PointerV_Tgm5', symObjAddr: 0x1470, symBinAddr: 0x115D0, symSize: 0x80 } - - { offsetInCU: 0xCE6, offset: 0x898A0, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCs5UInt8V_Tgm5', symObjAddr: 0x1570, symBinAddr: 0x11650, symSize: 0x70 } - - { offsetInCU: 0xD6A, offset: 0x89924, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOy', symObjAddr: 0x1750, symBinAddr: 0x11830, symSize: 0x40 } - - { offsetInCU: 0xD7E, offset: 0x89938, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOe', symObjAddr: 0x1790, symBinAddr: 0x11870, symSize: 0x40 } - - { offsetInCU: 0xD92, offset: 0x8994C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCMa', symObjAddr: 0x17D0, symBinAddr: 0x118B0, symSize: 0x20 } - - { offsetInCU: 0xE6C, offset: 0x89A26, size: 0x8, addend: 0x0, symName: '_$sSaySayxGqd__c7ElementQyd__RszSTRd__lufCs5UInt8V_10Foundation4DataVTgm5Tf4g_n', symObjAddr: 0x1650, symBinAddr: 0x11730, symSize: 0x100 } - - { offsetInCU: 0x112B, offset: 0x89CE5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvg', symObjAddr: 0x80, symBinAddr: 0x10360, symSize: 0x40 } - - { offsetInCU: 0x11A8, offset: 0x89D62, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfc', symObjAddr: 0x120, symBinAddr: 0x10400, symSize: 0x80 } - - { offsetInCU: 0x11EF, offset: 0x89DA9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0x240, symBinAddr: 0x10520, symSize: 0xC0 } - - { offsetInCU: 0x1251, offset: 0x89E0B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x3A0, symBinAddr: 0x10680, symSize: 0xD0 } - - { offsetInCU: 0x12DA, offset: 0x89E94, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtF', symObjAddr: 0x660, symBinAddr: 0x10880, symSize: 0x10 } - - { offsetInCU: 0x12FB, offset: 0x89EB5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfC', symObjAddr: 0x6C0, symBinAddr: 0x108E0, symSize: 0x90 } - - { offsetInCU: 0x130F, offset: 0x89EC9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfc', symObjAddr: 0x750, symBinAddr: 0x10970, symSize: 0x30 } - - { offsetInCU: 0x1428, offset: 0x89FE2, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VF', symObjAddr: 0x7F0, symBinAddr: 0x10A10, symSize: 0x300 } - - { offsetInCU: 0x17D2, offset: 0x8A38C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvg', symObjAddr: 0xC20, symBinAddr: 0x10E40, symSize: 0x30 } - - { offsetInCU: 0x180F, offset: 0x8A3C9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvs', symObjAddr: 0xC90, symBinAddr: 0x10EB0, symSize: 0x40 } - - { offsetInCU: 0x1836, offset: 0x8A3F0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM', symObjAddr: 0xCD0, symBinAddr: 0x10EF0, symSize: 0x40 } - - { offsetInCU: 0x185B, offset: 0x8A415, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM.resume.0', symObjAddr: 0xD10, symBinAddr: 0x10F30, symSize: 0x10 } - - { offsetInCU: 0x1882, offset: 0x8A43C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfC', symObjAddr: 0xD20, symBinAddr: 0x10F40, symSize: 0x20 } - - { offsetInCU: 0x1896, offset: 0x8A450, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfc', symObjAddr: 0xD40, symBinAddr: 0x10F60, symSize: 0x80 } - - { offsetInCU: 0x18DD, offset: 0x8A497, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0xED0, symBinAddr: 0x110F0, symSize: 0xC0 } - - { offsetInCU: 0x193A, offset: 0x8A4F4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x1030, symBinAddr: 0x11250, symSize: 0xB0 } - - { offsetInCU: 0x19D6, offset: 0x8A590, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x1270, symBinAddr: 0x11480, symSize: 0xB0 } - - { offsetInCU: 0x1AB8, offset: 0x8A672, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFs5UInt8V_Tg5', symObjAddr: 0x13D0, symBinAddr: 0x11530, symSize: 0xA0 } - - { offsetInCU: 0x1BC4, offset: 0x8A77E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTf4ddn_n', symObjAddr: 0x15E0, symBinAddr: 0x116C0, symSize: 0x70 } - - { offsetInCU: 0x1CBF, offset: 0x8A879, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTf4dn_n', symObjAddr: 0x17F0, symBinAddr: 0x118D0, symSize: 0x410 } - - { offsetInCU: 0x4F, offset: 0x8AC91, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LLSo012OS_dispatch_E0CvpZ', symObjAddr: 0x980, symBinAddr: 0x1379140, symSize: 0x0 } - - { offsetInCU: 0x5D, offset: 0x8AC9F, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x11ED0, symSize: 0x30 } - - { offsetInCU: 0x75, offset: 0x8ACB7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LL_WZ', symObjAddr: 0x30, symBinAddr: 0x11F00, symSize: 0xF0 } - - { offsetInCU: 0xBC, offset: 0x8ACFE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0x130, symBinAddr: 0x12000, symSize: 0x40 } - - { offsetInCU: 0x130, offset: 0x8AD72, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTo', symObjAddr: 0x3C0, symBinAddr: 0x12290, symSize: 0x80 } - - { offsetInCU: 0x18F, offset: 0x8ADD1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfcTo', symObjAddr: 0x490, symBinAddr: 0x12360, symSize: 0x30 } - - { offsetInCU: 0x1E2, offset: 0x8AE24, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTf4nnnd_n', symObjAddr: 0x500, symBinAddr: 0x123D0, symSize: 0x200 } - - { offsetInCU: 0x261, offset: 0x8AEA3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfETo', symObjAddr: 0x4F0, symBinAddr: 0x123C0, symSize: 0x10 } - - { offsetInCU: 0x29D, offset: 0x8AEDF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCMa', symObjAddr: 0x700, symBinAddr: 0x125D0, symSize: 0x20 } - - { offsetInCU: 0x2BC, offset: 0x8AEFE, size: 0x8, addend: 0x0, symName: '_$s10ObjectiveC8ObjCBoolVIeyBy_SbIegy_TRTA', symObjAddr: 0x740, symBinAddr: 0x12610, symSize: 0x20 } - - { offsetInCU: 0x2E5, offset: 0x8AF27, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_TA', symObjAddr: 0x790, symBinAddr: 0x12660, symSize: 0x20 } - - { offsetInCU: 0x2F9, offset: 0x8AF3B, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x7B0, symBinAddr: 0x12680, symSize: 0x20 } - - { offsetInCU: 0x30D, offset: 0x8AF4F, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x7D0, symBinAddr: 0x126A0, symSize: 0x10 } - - { offsetInCU: 0x321, offset: 0x8AF63, size: 0x8, addend: 0x0, symName: '_$sSay8Dispatch0A13WorkItemFlagsVGMa', symObjAddr: 0x850, symBinAddr: 0x126E0, symSize: 0x50 } - - { offsetInCU: 0x335, offset: 0x8AF77, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0x8D0, symBinAddr: 0x12730, symSize: 0x20 } - - { offsetInCU: 0x369, offset: 0x8AFAB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU_TA', symObjAddr: 0x910, symBinAddr: 0x12770, symSize: 0x20 } - - { offsetInCU: 0x4FE, offset: 0x8B140, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x120, symBinAddr: 0x11FF0, symSize: 0x10 } - - { offsetInCU: 0x58B, offset: 0x8B1CD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZ', symObjAddr: 0x170, symBinAddr: 0x12040, symSize: 0x10 } - - { offsetInCU: 0x59F, offset: 0x8B1E1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_', symObjAddr: 0x180, symBinAddr: 0x12050, symSize: 0x240 } - - { offsetInCU: 0x678, offset: 0x8B2BA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfC', symObjAddr: 0x440, symBinAddr: 0x12310, symSize: 0x20 } - - { offsetInCU: 0x68C, offset: 0x8B2CE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfc', symObjAddr: 0x460, symBinAddr: 0x12330, symSize: 0x30 } - - { offsetInCU: 0x6C2, offset: 0x8B304, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfD', symObjAddr: 0x4C0, symBinAddr: 0x12390, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x8B3AA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x127E0, symSize: 0x20 } - - { offsetInCU: 0x77, offset: 0x8B3FA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfcTo', symObjAddr: 0x70, symBinAddr: 0x12850, symSize: 0x30 } - - { offsetInCU: 0xCB, offset: 0x8B44E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCMa', symObjAddr: 0x50, symBinAddr: 0x12830, symSize: 0x20 } - - { offsetInCU: 0x216, offset: 0x8B599, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x127E0, symSize: 0x20 } - - { offsetInCU: 0x22A, offset: 0x8B5AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfc', symObjAddr: 0x20, symBinAddr: 0x12800, symSize: 0x30 } - - { offsetInCU: 0x266, offset: 0x8B5E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCfD', symObjAddr: 0xA0, symBinAddr: 0x12880, symSize: 0x2B } - - { offsetInCU: 0x26, offset: 0x8B632, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x3D5F80, symSize: 0x3990 } - - { offsetInCU: 0x40, offset: 0x8B64C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0xEEC0, symBinAddr: 0xB71A20, symSize: 0x0 } - - { offsetInCU: 0x92, offset: 0x8B69E, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0x14EC0, symBinAddr: 0xB77A20, symSize: 0x0 } - - { offsetInCU: 0xF6, offset: 0x8B702, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0x14EE8, symBinAddr: 0xB77A48, symSize: 0x0 } - - { offsetInCU: 0x10C, offset: 0x8B718, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x152F0, symBinAddr: 0xB77E50, symSize: 0x0 } - - { offsetInCU: 0x123, offset: 0x8B72F, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0x14F30, symBinAddr: 0xB77A90, symSize: 0x0 } - - { offsetInCU: 0xE22, offset: 0x8C42E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x3D5F80, symSize: 0x3990 } - - { offsetInCU: 0x4DAE, offset: 0x903BA, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0xE6E0, symBinAddr: 0x3E4660, symSize: 0x3E0 } - - { offsetInCU: 0x4FF1, offset: 0x905FD, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x7C20, symBinAddr: 0x3DDBA0, symSize: 0x270 } - - { offsetInCU: 0x582C, offset: 0x90E38, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x3990, symBinAddr: 0x3D9910, symSize: 0xA10 } - - { offsetInCU: 0x684B, offset: 0x91E57, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x43A0, symBinAddr: 0x3DA320, symSize: 0xA10 } - - { offsetInCU: 0x6EE9, offset: 0x924F5, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x4DB0, symBinAddr: 0x3DAD30, symSize: 0x2B0 } - - { offsetInCU: 0x74BC, offset: 0x92AC8, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x5060, symBinAddr: 0x3DAFE0, symSize: 0xCD0 } - - { offsetInCU: 0x83FE, offset: 0x93A0A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x5D30, symBinAddr: 0x3DBCB0, symSize: 0xB40 } - - { offsetInCU: 0x8F67, offset: 0x94573, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x6870, symBinAddr: 0x3DC7F0, symSize: 0x13B0 } - - { offsetInCU: 0xA567, offset: 0x95B73, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x7FF0, symBinAddr: 0x3DDF70, symSize: 0x2A30 } - - { offsetInCU: 0xDC6D, offset: 0x99279, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x7E90, symBinAddr: 0x3DDE10, symSize: 0x160 } - - { offsetInCU: 0xDEE7, offset: 0x994F3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0xAA20, symBinAddr: 0x3E09A0, symSize: 0x30 } - - { offsetInCU: 0xDFDC, offset: 0x995E8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0xAA50, symBinAddr: 0x3E09D0, symSize: 0x50 } - - { offsetInCU: 0xE051, offset: 0x9965D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0xAAA0, symBinAddr: 0x3E0A20, symSize: 0x10 } - - { offsetInCU: 0xE0EC, offset: 0x996F8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0xAAB0, symBinAddr: 0x3E0A30, symSize: 0xB0 } - - { offsetInCU: 0xE217, offset: 0x99823, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0xAB60, symBinAddr: 0x3E0AE0, symSize: 0x10 } - - { offsetInCU: 0xE4E9, offset: 0x99AF5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0xAB70, symBinAddr: 0x3E0AF0, symSize: 0x21A0 } - - { offsetInCU: 0x1118F, offset: 0x9C79B, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0xEAC0, symBinAddr: 0x3E4A40, symSize: 0x2D1 } - - { offsetInCU: 0x117CF, offset: 0x9CDDB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0xCD10, symBinAddr: 0x3E2C90, symSize: 0x20 } - - { offsetInCU: 0x11C6C, offset: 0x9D278, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0xCD30, symBinAddr: 0x3E2CB0, symSize: 0x19B0 } - - { offsetInCU: 0x26, offset: 0x9E328, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x3E4D20, symSize: 0x800 } - - { offsetInCU: 0x41, offset: 0x9E343, size: 0x8, addend: 0x0, symName: _aes_nohw_rcon, symObjAddr: 0x1B10, symBinAddr: 0xB77F30, symSize: 0x0 } - - { offsetInCU: 0x484, offset: 0x9E786, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x3E4D20, symSize: 0x800 } - - { offsetInCU: 0x1B2B, offset: 0x9FE2D, size: 0x8, addend: 0x0, symName: _aes_nohw_sub_bytes, symObjAddr: 0x15F0, symBinAddr: 0x3E6310, symSize: 0x300 } - - { offsetInCU: 0x32EE, offset: 0xA15F0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_encrypt, symObjAddr: 0x800, symBinAddr: 0x3E5520, symSize: 0x80 } - - { offsetInCU: 0x33DC, offset: 0xA16DE, size: 0x8, addend: 0x0, symName: _aes_nohw_expand_round_keys, symObjAddr: 0x880, symBinAddr: 0x3E55A0, symSize: 0x1A0 } - - { offsetInCU: 0x386D, offset: 0xA1B6F, size: 0x8, addend: 0x0, symName: _aes_nohw_to_batch, symObjAddr: 0xA20, symBinAddr: 0x3E5740, symSize: 0x420 } - - { offsetInCU: 0x3D7D, offset: 0xA207F, size: 0x8, addend: 0x0, symName: _aes_nohw_encrypt_batch, symObjAddr: 0xE40, symBinAddr: 0x3E5B60, symSize: 0x380 } - - { offsetInCU: 0x424C, offset: 0xA254E, size: 0x8, addend: 0x0, symName: _aes_nohw_from_batch, symObjAddr: 0x11C0, symBinAddr: 0x3E5EE0, symSize: 0x250 } - - { offsetInCU: 0x498D, offset: 0xA2C8F, size: 0x8, addend: 0x0, symName: _aes_nohw_shift_rows, symObjAddr: 0x18F0, symBinAddr: 0x3E6610, symSize: 0x149 } - - { offsetInCU: 0x4BF9, offset: 0xA2EFB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_ctr32_encrypt_blocks, symObjAddr: 0x1410, symBinAddr: 0x3E6130, symSize: 0x1E0 } - - { offsetInCU: 0x26, offset: 0xA331C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x3E6760, symSize: 0x2DC } - - { offsetInCU: 0x1D2, offset: 0xA34C8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x3E6760, symSize: 0x2DC } - - { offsetInCU: 0x26, offset: 0xA3721, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x3E6A40, symSize: 0x87 } - - { offsetInCU: 0x34, offset: 0xA372F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x3E6A40, symSize: 0x87 } - - { offsetInCU: 0x26, offset: 0xA383F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x3E6AD0, symSize: 0x46 } - - { offsetInCU: 0x34, offset: 0xA384D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x3E6AD0, symSize: 0x46 } - - { offsetInCU: 0x86, offset: 0xA39B0, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x15F0, symBinAddr: 0xB77FB0, symSize: 0x0 } - - { offsetInCU: 0xB8, offset: 0xA39E2, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1580, symBinAddr: 0xB77F40, symSize: 0x0 } - - { offsetInCU: 0xDA, offset: 0xA3A04, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x15B0, symBinAddr: 0xB77F70, symSize: 0x0 } - - { offsetInCU: 0xF0, offset: 0xA3A1A, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x15E0, symBinAddr: 0xB77FA0, symSize: 0x0 } - - { offsetInCU: 0x3B7, offset: 0xA3CE1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x150, symBinAddr: 0x3E6B20, symSize: 0x20 } - - { offsetInCU: 0x594, offset: 0xA3EBE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x250, symBinAddr: 0x3E6B40, symSize: 0x20 } - - { offsetInCU: 0x63F, offset: 0xA3F69, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x340, symBinAddr: 0x3E6B60, symSize: 0x3A0 } - - { offsetInCU: 0x11A7, offset: 0xA4AD1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x6E0, symBinAddr: 0x3E6F00, symSize: 0x140 } - - { offsetInCU: 0x14A2, offset: 0xA4DCC, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x820, symBinAddr: 0x3E7040, symSize: 0x6B0 } - - { offsetInCU: 0x26DA, offset: 0xA6004, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xED0, symBinAddr: 0x3E76F0, symSize: 0x380 } - - { offsetInCU: 0x2D37, offset: 0xA6661, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0x1250, symBinAddr: 0x3E7A70, symSize: 0x170 } - - { offsetInCU: 0x2F2F, offset: 0xA6859, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0x13C0, symBinAddr: 0x3E7BE0, symSize: 0x1BF } - - { offsetInCU: 0x26, offset: 0xA6BA4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x3E7DA0, symSize: 0x50 } - - { offsetInCU: 0xFA, offset: 0xA6C78, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x3E7DA0, symSize: 0x50 } - - { offsetInCU: 0x18D, offset: 0xA6D0B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x50, symBinAddr: 0x3E7DF0, symSize: 0x60 } - - { offsetInCU: 0x2F1, offset: 0xA6E6F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0xB0, symBinAddr: 0x3E7E50, symSize: 0x90 } - - { offsetInCU: 0x4C6, offset: 0xA7044, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0x140, symBinAddr: 0x3E7EE0, symSize: 0x20 } - - { offsetInCU: 0x5E3, offset: 0xA7161, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0x160, symBinAddr: 0x3E7F00, symSize: 0xB0 } - - { offsetInCU: 0x696, offset: 0xA7214, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x210, symBinAddr: 0x3E7FB0, symSize: 0x70 } - - { offsetInCU: 0x861, offset: 0xA73DF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x280, symBinAddr: 0x3E8020, symSize: 0x170 } - - { offsetInCU: 0xB67, offset: 0xA76E5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x3F0, symBinAddr: 0x3E8190, symSize: 0x270 } - - { offsetInCU: 0xE6A, offset: 0xA79E8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x660, symBinAddr: 0x3E8400, symSize: 0x1A0 } - - { offsetInCU: 0x105D, offset: 0xA7BDB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x800, symBinAddr: 0x3E85A0, symSize: 0x280 } - - { offsetInCU: 0x128C, offset: 0xA7E0A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0xC20, symBinAddr: 0x3E8820, symSize: 0x20 } - - { offsetInCU: 0x12F3, offset: 0xA7E71, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0xC40, symBinAddr: 0x3E8840, symSize: 0x20 } - - { offsetInCU: 0x132A, offset: 0xA7EA8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0xC60, symBinAddr: 0x3E8860, symSize: 0x10 } - - { offsetInCU: 0x13AC, offset: 0xA7F2A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0xC70, symBinAddr: 0x3E8870, symSize: 0x4A } - - { offsetInCU: 0x26, offset: 0xA80B6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x3E88C0, symSize: 0x129 } - - { offsetInCU: 0x34, offset: 0xA80C4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x3E88C0, symSize: 0x129 } - - { offsetInCU: 0x34, offset: 0xA81C6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_ia32cap_P, symObjAddr: 0x3F0, symBinAddr: 0x13804C0, symSize: 0x0 } - - { offsetInCU: 0x26, offset: 0xA821B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0x3E89F0, symSize: 0xF8 } - - { offsetInCU: 0xD5, offset: 0xA82CA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0x3E89F0, symSize: 0xF8 } - - { offsetInCU: 0x26, offset: 0xA841F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0x3E8AF0, symSize: 0x1210 } - - { offsetInCU: 0x92E, offset: 0xA8D27, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0x3E8AF0, symSize: 0x1210 } - - { offsetInCU: 0x5347, offset: 0xAD740, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base_adx, symObjAddr: 0x1210, symBinAddr: 0x3E9D00, symSize: 0x1E50 } - - { offsetInCU: 0x9B2F, offset: 0xB1F28, size: 0x8, addend: 0x0, symName: _inline_x25519_ge_dbl_4, symObjAddr: 0x3060, symBinAddr: 0x3EBB50, symSize: 0x361 } - - { offsetInCU: 0x26, offset: 0xB3315, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0x3EBEC0, symSize: 0xD0 } - - { offsetInCU: 0x303, offset: 0xB35F2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0x3EBEC0, symSize: 0xD0 } - - { offsetInCU: 0x5A4, offset: 0xB3893, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_update, symObjAddr: 0xD0, symBinAddr: 0x3EBF90, symSize: 0x1C0 } - - { offsetInCU: 0x764, offset: 0xB3A53, size: 0x8, addend: 0x0, symName: _poly1305_blocks, symObjAddr: 0x5F0, symBinAddr: 0x3EC4B0, symSize: 0x780 } - - { offsetInCU: 0x903, offset: 0xB3BF2, size: 0x8, addend: 0x0, symName: _poly1305_first_block, symObjAddr: 0x290, symBinAddr: 0x3EC150, symSize: 0x360 } - - { offsetInCU: 0xEFC, offset: 0xB41EB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_finish, symObjAddr: 0xD70, symBinAddr: 0x3ECC30, symSize: 0xAA2 } - - { offsetInCU: 0x10, offset: 0xB4974, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0x3ED6D2, symSize: 0x2AF } - - { offsetInCU: 0x51, offset: 0xB49B5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0x3ED6D2, symSize: 0x2AF } - - { offsetInCU: 0x10, offset: 0xB49AA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0x3ED981, symSize: 0x1F4 } - - { offsetInCU: 0x54, offset: 0xB49EE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0x3ED981, symSize: 0x1F4 } - - { offsetInCU: 0x26, offset: 0xB49F6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x3EDB80, symSize: 0x490 } - - { offsetInCU: 0x76, offset: 0xB4A46, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0xB79000, symSize: 0x0 } - - { offsetInCU: 0xFA, offset: 0xB4ACA, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0xB9E000, symSize: 0x0 } - - { offsetInCU: 0x35B, offset: 0xB4D2B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x3EDB80, symSize: 0x490 } - - { offsetInCU: 0xC5A, offset: 0xB562A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x490, symBinAddr: 0x3EE010, symSize: 0x300 } - - { offsetInCU: 0x1135, offset: 0xB5B05, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x790, symBinAddr: 0x3EE310, symSize: 0x25D } - - { offsetInCU: 0x10, offset: 0xB5ECA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x3EE580, symSize: 0x3A0 } - - { offsetInCU: 0x48, offset: 0xB5F02, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x3EE580, symSize: 0x3A0 } - - { offsetInCU: 0x4D, offset: 0xB5F07, size: 0x8, addend: 0x0, symName: ChaCha20_ssse3, symObjAddr: 0x3A0, symBinAddr: 0x3EE920, symSize: 0x220 } - - { offsetInCU: 0x60, offset: 0xB5F1A, size: 0x8, addend: 0x0, symName: ChaCha20_4x, symObjAddr: 0x5C0, symBinAddr: 0x3EEB40, symSize: 0xA20 } - - { offsetInCU: 0x76, offset: 0xB5F30, size: 0x8, addend: 0x0, symName: ChaCha20_8x, symObjAddr: 0xFE0, symBinAddr: 0x3EF560, symSize: 0xB4C } - - { offsetInCU: 0x10, offset: 0xB5F42, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0x3F00C0, symSize: 0x40 } - - { offsetInCU: 0x48, offset: 0xB5F7A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0x3F00C0, symSize: 0x40 } - - { offsetInCU: 0x4D, offset: 0xB5F7F, size: 0x8, addend: 0x0, symName: _aesni_encrypt2, symObjAddr: 0x40, symBinAddr: 0x3F0100, symSize: 0x60 } - - { offsetInCU: 0x63, offset: 0xB5F95, size: 0x8, addend: 0x0, symName: _aesni_encrypt3, symObjAddr: 0xA0, symBinAddr: 0x3F0160, symSize: 0x70 } - - { offsetInCU: 0x79, offset: 0xB5FAB, size: 0x8, addend: 0x0, symName: _aesni_encrypt4, symObjAddr: 0x110, symBinAddr: 0x3F01D0, symSize: 0x90 } - - { offsetInCU: 0x8F, offset: 0xB5FC1, size: 0x8, addend: 0x0, symName: _aesni_encrypt6, symObjAddr: 0x1A0, symBinAddr: 0x3F0260, symSize: 0xE0 } - - { offsetInCU: 0xA5, offset: 0xB5FD7, size: 0x8, addend: 0x0, symName: _aesni_encrypt8, symObjAddr: 0x280, symBinAddr: 0x3F0340, symSize: 0x110 } - - { offsetInCU: 0xD9, offset: 0xB600B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x390, symBinAddr: 0x3F0450, symSize: 0x940 } - - { offsetInCU: 0xEA, offset: 0xB601C, size: 0x8, addend: 0x0, symName: __aesni_set_encrypt_key, symObjAddr: 0xCD0, symBinAddr: 0x3F0D90, symSize: 0x44D } - - { offsetInCU: 0x10, offset: 0xB6012, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0x3F11E0, symSize: 0x160 } - - { offsetInCU: 0x3B, offset: 0xB603D, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0x3F11E0, symSize: 0x160 } - - { offsetInCU: 0x54, offset: 0xB6056, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core_2x, symObjAddr: 0x160, symBinAddr: 0x3F1340, symSize: 0x290 } - - { offsetInCU: 0x68, offset: 0xB606A, size: 0x8, addend: 0x0, symName: _vpaes_schedule_core, symObjAddr: 0x3F0, symBinAddr: 0x3F15D0, symSize: 0xF0 } - - { offsetInCU: 0x7F, offset: 0xB6081, size: 0x8, addend: 0x0, symName: _vpaes_schedule_round, symObjAddr: 0x4E0, symBinAddr: 0x3F16C0, symSize: 0x21 } - - { offsetInCU: 0x99, offset: 0xB609B, size: 0x8, addend: 0x0, symName: _vpaes_schedule_low_round, symObjAddr: 0x501, symBinAddr: 0x3F16E1, symSize: 0x9F } - - { offsetInCU: 0xAF, offset: 0xB60B1, size: 0x8, addend: 0x0, symName: _vpaes_schedule_transform, symObjAddr: 0x5A0, symBinAddr: 0x3F1780, symSize: 0x30 } - - { offsetInCU: 0xC2, offset: 0xB60C4, size: 0x8, addend: 0x0, symName: _vpaes_schedule_mangle, symObjAddr: 0x5D0, symBinAddr: 0x3F17B0, symSize: 0x50 } - - { offsetInCU: 0xE9, offset: 0xB60EB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_set_encrypt_key, symObjAddr: 0x620, symBinAddr: 0x3F1800, symSize: 0x30 } - - { offsetInCU: 0xF7, offset: 0xB60F9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_encrypt, symObjAddr: 0x650, symBinAddr: 0x3F1830, symSize: 0x20 } - - { offsetInCU: 0x11A, offset: 0xB611C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_ctr32_encrypt_blocks, symObjAddr: 0x670, symBinAddr: 0x3F1850, symSize: 0xD0 } - - { offsetInCU: 0x112, offset: 0xB6114, size: 0x8, addend: 0x0, symName: _vpaes_preheat, symObjAddr: 0x740, symBinAddr: 0x3F1920, symSize: 0x31 } - - { offsetInCU: 0x10, offset: 0xB6124, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x3F1960, symSize: 0x2A0 } - - { offsetInCU: 0x45, offset: 0xB6159, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x3F1960, symSize: 0x2A0 } - - { offsetInCU: 0x4C, offset: 0xB6160, size: 0x8, addend: 0x0, symName: bn_mul4x_mont, symObjAddr: 0x2A0, symBinAddr: 0x3F1C00, symSize: 0x560 } - - { offsetInCU: 0x62, offset: 0xB6176, size: 0x8, addend: 0x0, symName: bn_sqr8x_mont, symObjAddr: 0x800, symBinAddr: 0x3F2160, symSize: 0x220 } - - { offsetInCU: 0x79, offset: 0xB618D, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont, symObjAddr: 0xA20, symBinAddr: 0x3F2380, symSize: 0x570 } - - { offsetInCU: 0x10, offset: 0xB619C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0x3F2900, symSize: 0x660 } - - { offsetInCU: 0x4D, offset: 0xB61D9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0x3F2900, symSize: 0x660 } - - { offsetInCU: 0x54, offset: 0xB61E0, size: 0x8, addend: 0x0, symName: bn_mul4x_mont_gather5, symObjAddr: 0x660, symBinAddr: 0x3F2F60, symSize: 0x100 } - - { offsetInCU: 0x63, offset: 0xB61EF, size: 0x8, addend: 0x0, symName: mul4x_internal, symObjAddr: 0x760, symBinAddr: 0x3F3060, symSize: 0x7E0 } - - { offsetInCU: 0x85, offset: 0xB6211, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_power5, symObjAddr: 0xF40, symBinAddr: 0x3F3840, symSize: 0x180 } - - { offsetInCU: 0xA3, offset: 0xB622F, size: 0x8, addend: 0x0, symName: __bn_sqr8x_internal, symObjAddr: 0x10C0, symBinAddr: 0x3F39C0, symSize: 0x579 } - - { offsetInCU: 0xAA, offset: 0xB6236, size: 0x8, addend: 0x0, symName: __bn_sqr8x_reduction, symObjAddr: 0x1639, symBinAddr: 0x3F3F39, symSize: 0x347 } - - { offsetInCU: 0xC0, offset: 0xB624C, size: 0x8, addend: 0x0, symName: __bn_post4x_internal, symObjAddr: 0x1980, symBinAddr: 0x3F4280, symSize: 0xA0 } - - { offsetInCU: 0xD9, offset: 0xB6265, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont_gather5, symObjAddr: 0x1A20, symBinAddr: 0x3F4320, symSize: 0xE0 } - - { offsetInCU: 0xE8, offset: 0xB6274, size: 0x8, addend: 0x0, symName: mulx4x_internal, symObjAddr: 0x1B00, symBinAddr: 0x3F4400, symSize: 0x7E0 } - - { offsetInCU: 0xF9, offset: 0xB6285, size: 0x8, addend: 0x0, symName: bn_powerx5, symObjAddr: 0x22E0, symBinAddr: 0x3F4BE0, symSize: 0x160 } - - { offsetInCU: 0x128, offset: 0xB62B4, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_internal, symObjAddr: 0x2440, symBinAddr: 0x3F4D40, symSize: 0x637 } - - { offsetInCU: 0x12F, offset: 0xB62BB, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_reduction, symObjAddr: 0x2A77, symBinAddr: 0x3F5377, symSize: 0x329 } - - { offsetInCU: 0x145, offset: 0xB62D1, size: 0x8, addend: 0x0, symName: __bn_postx4x_internal, symObjAddr: 0x2DA0, symBinAddr: 0x3F56A0, symSize: 0x90 } - - { offsetInCU: 0x163, offset: 0xB62EF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_scatter5, symObjAddr: 0x2E30, symBinAddr: 0x3F5730, symSize: 0x30 } - - { offsetInCU: 0x178, offset: 0xB6304, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_gather5, symObjAddr: 0x2E60, symBinAddr: 0x3F5760, symSize: 0x27F } - - { offsetInCU: 0x10, offset: 0xB6306, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0x3F59E0, symSize: 0x80 } - - { offsetInCU: 0x4A, offset: 0xB6340, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0x3F59E0, symSize: 0x80 } - - { offsetInCU: 0x64, offset: 0xB635A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0x80, symBinAddr: 0x3F5A60, symSize: 0x360 } - - { offsetInCU: 0x7E, offset: 0xB6374, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x3E0, symBinAddr: 0x3F5DC0, symSize: 0x300 } - - { offsetInCU: 0x85, offset: 0xB637B, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_mul_montx, symObjAddr: 0x6E0, symBinAddr: 0x3F60C0, symSize: 0x3C0 } - - { offsetInCU: 0x9B, offset: 0xB6391, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_sqr_montx, symObjAddr: 0xAA0, symBinAddr: 0x3F6480, symSize: 0x320 } - - { offsetInCU: 0xB5, offset: 0xB63AB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0xDC0, symBinAddr: 0x3F67A0, symSize: 0xA0 } - - { offsetInCU: 0xC4, offset: 0xB63BA, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montq, symObjAddr: 0xE60, symBinAddr: 0x3F6840, symSize: 0x240 } - - { offsetInCU: 0xE1, offset: 0xB63D7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x10A0, symBinAddr: 0x3F6A80, symSize: 0x80 } - - { offsetInCU: 0xF0, offset: 0xB63E6, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montq, symObjAddr: 0x1120, symBinAddr: 0x3F6B00, symSize: 0x1A0 } - - { offsetInCU: 0x106, offset: 0xB63FC, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montx, symObjAddr: 0x12C0, symBinAddr: 0x3F6CA0, symSize: 0x260 } - - { offsetInCU: 0x11C, offset: 0xB6412, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montx, symObjAddr: 0x1520, symBinAddr: 0x3F6F00, symSize: 0x1C0 } - - { offsetInCU: 0x142, offset: 0xB6438, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x16E0, symBinAddr: 0x3F70C0, symSize: 0xE0 } - - { offsetInCU: 0x158, offset: 0xB644E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x17C0, symBinAddr: 0x3F71A0, symSize: 0xC0 } - - { offsetInCU: 0x162, offset: 0xB6458, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w5, symObjAddr: 0x1880, symBinAddr: 0x3F7260, symSize: 0xC0 } - - { offsetInCU: 0x178, offset: 0xB646E, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w7, symObjAddr: 0x1940, symBinAddr: 0x3F7320, symSize: 0xE0 } - - { offsetInCU: 0x188, offset: 0xB647E, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_toq, symObjAddr: 0x1A20, symBinAddr: 0x3F7400, symSize: 0x60 } - - { offsetInCU: 0x1A0, offset: 0xB6496, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromq, symObjAddr: 0x1A80, symBinAddr: 0x3F7460, symSize: 0x60 } - - { offsetInCU: 0x1B1, offset: 0xB64A7, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subq, symObjAddr: 0x1AE0, symBinAddr: 0x3F74C0, symSize: 0x40 } - - { offsetInCU: 0x1CC, offset: 0xB64C2, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2q, symObjAddr: 0x1B20, symBinAddr: 0x3F7500, symSize: 0x60 } - - { offsetInCU: 0x1ED, offset: 0xB64E3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x1B80, symBinAddr: 0x3F7560, symSize: 0x320 } - - { offsetInCU: 0x200, offset: 0xB64F6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x1EA0, symBinAddr: 0x3F7880, symSize: 0x780 } - - { offsetInCU: 0x21D, offset: 0xB6513, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0x2620, symBinAddr: 0x3F8000, symSize: 0x580 } - - { offsetInCU: 0x222, offset: 0xB6518, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_tox, symObjAddr: 0x2BA0, symBinAddr: 0x3F8580, symSize: 0x60 } - - { offsetInCU: 0x23A, offset: 0xB6530, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromx, symObjAddr: 0x2C00, symBinAddr: 0x3F85E0, symSize: 0x60 } - - { offsetInCU: 0x24B, offset: 0xB6541, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subx, symObjAddr: 0x2C60, symBinAddr: 0x3F8640, symSize: 0x60 } - - { offsetInCU: 0x266, offset: 0xB655C, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2x, symObjAddr: 0x2CC0, symBinAddr: 0x3F86A0, symSize: 0x60 } - - { offsetInCU: 0x27F, offset: 0xB6575, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_doublex, symObjAddr: 0x2D20, symBinAddr: 0x3F8700, symSize: 0x320 } - - { offsetInCU: 0x292, offset: 0xB6588, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_addx, symObjAddr: 0x3040, symBinAddr: 0x3F8A20, symSize: 0x760 } - - { offsetInCU: 0x2AF, offset: 0xB65A5, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_add_affinex, symObjAddr: 0x37A0, symBinAddr: 0x3F9180, symSize: 0x555 } - - { offsetInCU: 0x10, offset: 0xB65A4, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0x3F96E0, symSize: 0x5A0 } - - { offsetInCU: 0x3D, offset: 0xB65D1, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0x3F96E0, symSize: 0x5A0 } - - { offsetInCU: 0x61, offset: 0xB65F5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_decrypt, symObjAddr: 0x5A0, symBinAddr: 0x3F9C80, symSize: 0x140 } - - { offsetInCU: 0x63, offset: 0xB65F7, size: 0x8, addend: 0x0, symName: _aesni_ctr32_6x, symObjAddr: 0x6E0, symBinAddr: 0x3F9DC0, symSize: 0x180 } - - { offsetInCU: 0x8D, offset: 0xB6621, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_encrypt, symObjAddr: 0x860, symBinAddr: 0x3F9F40, symSize: 0x423 } - - { offsetInCU: 0x10, offset: 0xB661C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x3FA380, symSize: 0x260 } - - { offsetInCU: 0x48, offset: 0xB6654, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x3FA380, symSize: 0x260 } - - { offsetInCU: 0x5F, offset: 0xB666B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x260, symBinAddr: 0x3FA5E0, symSize: 0xC0 } - - { offsetInCU: 0x75, offset: 0xB6681, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x320, symBinAddr: 0x3FA6A0, symSize: 0x660 } - - { offsetInCU: 0x88, offset: 0xB6694, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_avx, symObjAddr: 0x980, symBinAddr: 0x3FAD00, symSize: 0x1A0 } - - { offsetInCU: 0x9F, offset: 0xB66AB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_avx, symObjAddr: 0xB20, symBinAddr: 0x3FAEA0, symSize: 0x697 } - - { offsetInCU: 0x10, offset: 0xB66AA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x3FB540, symSize: 0x1240 } - - { offsetInCU: 0x51, offset: 0xB66EB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x3FB540, symSize: 0x1240 } - - { offsetInCU: 0x5A, offset: 0xB66F4, size: 0x8, addend: 0x0, symName: sha512_block_data_order_avx, symObjAddr: 0x1240, symBinAddr: 0x3FC780, symSize: 0x1176 } - - { offsetInCU: 0x10, offset: 0xB66F6, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0x3FD900, symSize: 0x200 } - - { offsetInCU: 0x44, offset: 0xB672A, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0x3FD900, symSize: 0x200 } - - { offsetInCU: 0x66, offset: 0xB674C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x200, symBinAddr: 0x3FDB00, symSize: 0x21C0 } - - { offsetInCU: 0x7C, offset: 0xB6762, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x23C0, symBinAddr: 0x3FFCC0, symSize: 0x1D2D } - - { offsetInCU: 0x83, offset: 0xB6769, size: 0x8, addend: 0x0, symName: process_extra_in_trailer, symObjAddr: 0x40ED, symBinAddr: 0x4019ED, symSize: 0x553 } - - { offsetInCU: 0x9C, offset: 0xB6782, size: 0x8, addend: 0x0, symName: chacha20_poly1305_open_avx2, symObjAddr: 0x4640, symBinAddr: 0x401F40, symSize: 0x25C0 } - - { offsetInCU: 0xB2, offset: 0xB6798, size: 0x8, addend: 0x0, symName: chacha20_poly1305_seal_avx2, symObjAddr: 0x6C00, symBinAddr: 0x404500, symSize: 0x2F01 } - - { offsetInCU: 0x10, offset: 0xB679A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x407440, symSize: 0x1200 } - - { offsetInCU: 0x51, offset: 0xB67DB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x407440, symSize: 0x1200 } - - { offsetInCU: 0x5D, offset: 0xB67E7, size: 0x8, addend: 0x0, symName: sha256_block_data_order_shaext, symObjAddr: 0x1200, symBinAddr: 0x408640, symSize: 0x340 } - - { offsetInCU: 0x72, offset: 0xB67FC, size: 0x8, addend: 0x0, symName: sha256_block_data_order_ssse3, symObjAddr: 0x1540, symBinAddr: 0x408980, symSize: 0xEC0 } - - { offsetInCU: 0x86, offset: 0xB6810, size: 0x8, addend: 0x0, symName: sha256_block_data_order_avx, symObjAddr: 0x2400, symBinAddr: 0x409840, symSize: 0xEF7 } + - { offsetInCU: 0x34, offset: 0x79625, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionString, symObjAddr: 0x0, symBinAddr: 0xAB1000, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0x7965A, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionNumber, symObjAddr: 0x38, symBinAddr: 0xAB1038, symSize: 0x0 } + - { offsetInCU: 0x3F, offset: 0x796AF, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x40, symBinAddr: 0x2840, symSize: 0x10 } + - { offsetInCU: 0x53, offset: 0x796C3, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x50, symBinAddr: 0x2850, symSize: 0x10 } + - { offsetInCU: 0x67, offset: 0x796D7, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x60, symBinAddr: 0x2860, symSize: 0x20 } + - { offsetInCU: 0x7B, offset: 0x796EB, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x80, symBinAddr: 0x2880, symSize: 0x30 } + - { offsetInCU: 0x8F, offset: 0x796FF, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwCP', symObjAddr: 0xD0, symBinAddr: 0x28D0, symSize: 0x30 } + - { offsetInCU: 0xA3, offset: 0x79713, size: 0x8, addend: 0x0, symName: ___swift_memcpy32_8, symObjAddr: 0x100, symBinAddr: 0x2900, symSize: 0x20 } + - { offsetInCU: 0xB7, offset: 0x79727, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwet', symObjAddr: 0x120, symBinAddr: 0x2920, symSize: 0x20 } + - { offsetInCU: 0xCB, offset: 0x7973B, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwst', symObjAddr: 0x140, symBinAddr: 0x2940, symSize: 0x30 } + - { offsetInCU: 0x4F, offset: 0x79924, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC11_WriteQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x30B0, symBinAddr: 0x1379CD0, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0x7993E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10_ReadQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x30B8, symBinAddr: 0x1379CD8, symSize: 0x0 } + - { offsetInCU: 0x9D, offset: 0x79972, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTo', symObjAddr: 0x10, symBinAddr: 0x2A10, symSize: 0x40 } + - { offsetInCU: 0xF3, offset: 0x799C8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x60, symBinAddr: 0x2A60, symSize: 0x60 } + - { offsetInCU: 0x144, offset: 0x79A19, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0xD0, symBinAddr: 0x2AD0, symSize: 0x40 } + - { offsetInCU: 0x19F, offset: 0x79A74, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x120, symBinAddr: 0x2B20, symSize: 0x50 } + - { offsetInCU: 0x204, offset: 0x79AD9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0x180, symBinAddr: 0x2B80, symSize: 0x60 } + - { offsetInCU: 0x27D, offset: 0x79B52, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x1F0, symBinAddr: 0x2BF0, symSize: 0x90 } + - { offsetInCU: 0x2DA, offset: 0x79BAF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x290, symBinAddr: 0x2C90, symSize: 0x20 } + - { offsetInCU: 0x35C, offset: 0x79C31, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x2C0, symBinAddr: 0x2CC0, symSize: 0x20 } + - { offsetInCU: 0x40B, offset: 0x79CE0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZTo', symObjAddr: 0x350, symBinAddr: 0x2D50, symSize: 0x80 } + - { offsetInCU: 0x4D0, offset: 0x79DA5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZTo', symObjAddr: 0x440, symBinAddr: 0x2E40, symSize: 0x80 } + - { offsetInCU: 0x59F, offset: 0x79E74, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZTo', symObjAddr: 0x530, symBinAddr: 0x2F30, symSize: 0x80 } + - { offsetInCU: 0x669, offset: 0x79F3E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZTo', symObjAddr: 0x630, symBinAddr: 0x3030, symSize: 0x90 } + - { offsetInCU: 0x701, offset: 0x79FD6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZTo', symObjAddr: 0x6D0, symBinAddr: 0x30D0, symSize: 0x10 } + - { offsetInCU: 0x768, offset: 0x7A03D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZTo', symObjAddr: 0x6F0, symBinAddr: 0x30F0, symSize: 0x10 } + - { offsetInCU: 0x7BF, offset: 0x7A094, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZTo', symObjAddr: 0x710, symBinAddr: 0x3110, symSize: 0x10 } + - { offsetInCU: 0x816, offset: 0x7A0EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZTo', symObjAddr: 0x730, symBinAddr: 0x3130, symSize: 0x10 } + - { offsetInCU: 0x86D, offset: 0x7A142, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZTo', symObjAddr: 0x750, symBinAddr: 0x3150, symSize: 0x10 } + - { offsetInCU: 0x8C4, offset: 0x7A199, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZTo', symObjAddr: 0x770, symBinAddr: 0x3170, symSize: 0x10 } + - { offsetInCU: 0x943, offset: 0x7A218, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZTo', symObjAddr: 0x790, symBinAddr: 0x3190, symSize: 0x40 } + - { offsetInCU: 0x9EE, offset: 0x7A2C3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZTo', symObjAddr: 0x7E0, symBinAddr: 0x31E0, symSize: 0x20 } + - { offsetInCU: 0xA61, offset: 0x7A336, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZTo', symObjAddr: 0x810, symBinAddr: 0x3210, symSize: 0x10 } + - { offsetInCU: 0xAB8, offset: 0x7A38D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZTo', symObjAddr: 0x880, symBinAddr: 0x3280, symSize: 0x70 } + - { offsetInCU: 0xB43, offset: 0x7A418, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTo', symObjAddr: 0xA90, symBinAddr: 0x3490, symSize: 0xA0 } + - { offsetInCU: 0xB94, offset: 0x7A469, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZTo', symObjAddr: 0xD90, symBinAddr: 0x3790, symSize: 0xA0 } + - { offsetInCU: 0xBE5, offset: 0x7A4BA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZTo', symObjAddr: 0x10F0, symBinAddr: 0x3AF0, symSize: 0xA0 } + - { offsetInCU: 0xC41, offset: 0x7A516, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTo', symObjAddr: 0x1540, symBinAddr: 0x3F40, symSize: 0xD0 } + - { offsetInCU: 0xC89, offset: 0x7A55E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTo', symObjAddr: 0x1620, symBinAddr: 0x4020, symSize: 0x40 } + - { offsetInCU: 0xCE9, offset: 0x7A5BE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfcTo', symObjAddr: 0x16B0, symBinAddr: 0x40B0, symSize: 0x30 } + - { offsetInCU: 0xD3C, offset: 0x7A611, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTf4nd_n', symObjAddr: 0x1720, symBinAddr: 0x4120, symSize: 0x300 } + - { offsetInCU: 0xF6C, offset: 0x7A841, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTf4nnnd_n', symObjAddr: 0x1A20, symBinAddr: 0x4420, symSize: 0x260 } + - { offsetInCU: 0x1166, offset: 0x7AA3B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTf4nnd_n', symObjAddr: 0x1C80, symBinAddr: 0x4680, symSize: 0xD0 } + - { offsetInCU: 0x1263, offset: 0x7AB38, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZTf4nnnnd_n', symObjAddr: 0x1D50, symBinAddr: 0x4750, symSize: 0x1B0 } + - { offsetInCU: 0x13D8, offset: 0x7ACAD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZTf4nnnnnnd_n', symObjAddr: 0x1F00, symBinAddr: 0x4900, symSize: 0x1D0 } + - { offsetInCU: 0x156D, offset: 0x7AE42, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZTf4nnnnnnnnnnd_n', symObjAddr: 0x20D0, symBinAddr: 0x4AD0, symSize: 0x200 } + - { offsetInCU: 0x1759, offset: 0x7B02E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTf4nnnd_n', symObjAddr: 0x22D0, symBinAddr: 0x4CD0, symSize: 0x1D0 } + - { offsetInCU: 0x1823, offset: 0x7B0F8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTf4nnnnd_n', symObjAddr: 0x2660, symBinAddr: 0x5060, symSize: 0x200 } + - { offsetInCU: 0x1904, offset: 0x7B1D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTf4d_n', symObjAddr: 0x2860, symBinAddr: 0x5260, symSize: 0x110 } + - { offsetInCU: 0x19AF, offset: 0x7B284, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TR', symObjAddr: 0xB30, symBinAddr: 0x3530, symSize: 0x70 } + - { offsetInCU: 0x19C7, offset: 0x7B29C, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TR', symObjAddr: 0xE30, symBinAddr: 0x3830, symSize: 0x50 } + - { offsetInCU: 0x1A34, offset: 0x7B309, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfETo', symObjAddr: 0x1710, symBinAddr: 0x4110, symSize: 0x10 } + - { offsetInCU: 0x1ABF, offset: 0x7B394, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCMa', symObjAddr: 0x2970, symBinAddr: 0x5370, symSize: 0x20 } + - { offsetInCU: 0x1AD3, offset: 0x7B3A8, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TRTA', symObjAddr: 0x29B0, symBinAddr: 0x53B0, symSize: 0x10 } + - { offsetInCU: 0x1AF2, offset: 0x7B3C7, size: 0x8, addend: 0x0, symName: '_$sSo7NSErrorCSg10ObjectiveC8ObjCBoolVIeyByy_ACSbIeggy_TRTA', symObjAddr: 0x29C0, symBinAddr: 0x53C0, symSize: 0x20 } + - { offsetInCU: 0x1B1B, offset: 0x7B3F0, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TRTA', symObjAddr: 0x29E0, symBinAddr: 0x53E0, symSize: 0x10 } + - { offsetInCU: 0x1B2F, offset: 0x7B404, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCMa', symObjAddr: 0x29F0, symBinAddr: 0x53F0, symSize: 0x30 } + - { offsetInCU: 0x1B43, offset: 0x7B418, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_TA', symObjAddr: 0x2A70, symBinAddr: 0x5470, symSize: 0x40 } + - { offsetInCU: 0x1B57, offset: 0x7B42C, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x2AB0, symBinAddr: 0x54B0, symSize: 0x20 } + - { offsetInCU: 0x1B6B, offset: 0x7B440, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x2AD0, symBinAddr: 0x54D0, symSize: 0x10 } + - { offsetInCU: 0x1B7F, offset: 0x7B454, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2B00, symBinAddr: 0x5500, symSize: 0x40 } + - { offsetInCU: 0x1BB3, offset: 0x7B488, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2BC0, symBinAddr: 0x55C0, symSize: 0x40 } + - { offsetInCU: 0x1BF1, offset: 0x7B4C6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2C00, symBinAddr: 0x5600, symSize: 0x20 } + - { offsetInCU: 0x1C25, offset: 0x7B4FA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2CB0, symBinAddr: 0x56B0, symSize: 0x40 } + - { offsetInCU: 0x1C59, offset: 0x7B52E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2D20, symBinAddr: 0x5720, symSize: 0x30 } + - { offsetInCU: 0x1C95, offset: 0x7B56A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_TA', symObjAddr: 0x2DA0, symBinAddr: 0x57A0, symSize: 0x30 } + - { offsetInCU: 0x1CA9, offset: 0x7B57E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2DD0, symBinAddr: 0x57D0, symSize: 0x40 } + - { offsetInCU: 0x2176, offset: 0x7BA4B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZ', symObjAddr: 0x0, symBinAddr: 0x2A00, symSize: 0x10 } + - { offsetInCU: 0x2191, offset: 0x7BA66, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x50, symBinAddr: 0x2A50, symSize: 0x10 } + - { offsetInCU: 0x21AC, offset: 0x7BA81, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0xC0, symBinAddr: 0x2AC0, symSize: 0x10 } + - { offsetInCU: 0x21CD, offset: 0x7BAA2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x110, symBinAddr: 0x2B10, symSize: 0x10 } + - { offsetInCU: 0x21E8, offset: 0x7BABD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0x170, symBinAddr: 0x2B70, symSize: 0x10 } + - { offsetInCU: 0x2203, offset: 0x7BAD8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x1E0, symBinAddr: 0x2BE0, symSize: 0x10 } + - { offsetInCU: 0x221E, offset: 0x7BAF3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x280, symBinAddr: 0x2C80, symSize: 0x10 } + - { offsetInCU: 0x22AC, offset: 0x7BB81, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x2B0, symBinAddr: 0x2CB0, symSize: 0x10 } + - { offsetInCU: 0x232B, offset: 0x7BC00, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZ', symObjAddr: 0x2E0, symBinAddr: 0x2CE0, symSize: 0x70 } + - { offsetInCU: 0x247D, offset: 0x7BD52, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZ', symObjAddr: 0x3D0, symBinAddr: 0x2DD0, symSize: 0x70 } + - { offsetInCU: 0x25DB, offset: 0x7BEB0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZ', symObjAddr: 0x4C0, symBinAddr: 0x2EC0, symSize: 0x70 } + - { offsetInCU: 0x2739, offset: 0x7C00E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZ', symObjAddr: 0x5B0, symBinAddr: 0x2FB0, symSize: 0x80 } + - { offsetInCU: 0x28AD, offset: 0x7C182, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZ', symObjAddr: 0x6C0, symBinAddr: 0x30C0, symSize: 0x10 } + - { offsetInCU: 0x291D, offset: 0x7C1F2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZ', symObjAddr: 0x6E0, symBinAddr: 0x30E0, symSize: 0x10 } + - { offsetInCU: 0x2960, offset: 0x7C235, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZ', symObjAddr: 0x700, symBinAddr: 0x3100, symSize: 0x10 } + - { offsetInCU: 0x29A5, offset: 0x7C27A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZ', symObjAddr: 0x720, symBinAddr: 0x3120, symSize: 0x10 } + - { offsetInCU: 0x29E8, offset: 0x7C2BD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZ', symObjAddr: 0x740, symBinAddr: 0x3140, symSize: 0x10 } + - { offsetInCU: 0x2A2B, offset: 0x7C300, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZ', symObjAddr: 0x760, symBinAddr: 0x3160, symSize: 0x10 } + - { offsetInCU: 0x2A6E, offset: 0x7C343, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZ', symObjAddr: 0x780, symBinAddr: 0x3180, symSize: 0x10 } + - { offsetInCU: 0x2B54, offset: 0x7C429, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ', symObjAddr: 0x7D0, symBinAddr: 0x31D0, symSize: 0x10 } + - { offsetInCU: 0x2BD3, offset: 0x7C4A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZ', symObjAddr: 0x800, symBinAddr: 0x3200, symSize: 0x10 } + - { offsetInCU: 0x2C16, offset: 0x7C4EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZ', symObjAddr: 0x820, symBinAddr: 0x3220, symSize: 0x60 } + - { offsetInCU: 0x2CD7, offset: 0x7C5AC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZ', symObjAddr: 0x8F0, symBinAddr: 0x32F0, symSize: 0x10 } + - { offsetInCU: 0x2CEB, offset: 0x7C5C0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_', symObjAddr: 0x900, symBinAddr: 0x3300, symSize: 0x190 } + - { offsetInCU: 0x2D8B, offset: 0x7C660, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZ', symObjAddr: 0xBA0, symBinAddr: 0x35A0, symSize: 0x30 } + - { offsetInCU: 0x2D9F, offset: 0x7C674, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_', symObjAddr: 0xBD0, symBinAddr: 0x35D0, symSize: 0x1C0 } + - { offsetInCU: 0x2E89, offset: 0x7C75E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZ', symObjAddr: 0xE80, symBinAddr: 0x3880, symSize: 0x30 } + - { offsetInCU: 0x2E9D, offset: 0x7C772, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_', symObjAddr: 0xEB0, symBinAddr: 0x38B0, symSize: 0x240 } + - { offsetInCU: 0x2F51, offset: 0x7C826, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZ', symObjAddr: 0x1190, symBinAddr: 0x3B90, symSize: 0x10 } + - { offsetInCU: 0x2F65, offset: 0x7C83A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_', symObjAddr: 0x11A0, symBinAddr: 0x3BA0, symSize: 0x3A0 } + - { offsetInCU: 0x31FB, offset: 0x7CAD0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZ', symObjAddr: 0x1610, symBinAddr: 0x4010, symSize: 0x10 } + - { offsetInCU: 0x3216, offset: 0x7CAEB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfC', symObjAddr: 0x1660, symBinAddr: 0x4060, symSize: 0x20 } + - { offsetInCU: 0x322A, offset: 0x7CAFF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfc', symObjAddr: 0x1680, symBinAddr: 0x4080, symSize: 0x30 } + - { offsetInCU: 0x3260, offset: 0x7CB35, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfD', symObjAddr: 0x16E0, symBinAddr: 0x40E0, symSize: 0x30 } + - { offsetInCU: 0x4F, offset: 0x7CD6D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LLSo7GLKViewCvpZ', symObjAddr: 0x5BA8, symBinAddr: 0x1379D10, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0x7CD87, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15_shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvpZ', symObjAddr: 0x5BB0, symBinAddr: 0x1379D18, symSize: 0x0 } + - { offsetInCU: 0x83, offset: 0x7CDA1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5storeSo19NSMutableDictionaryCvpZ', symObjAddr: 0x5BB8, symBinAddr: 0x1379D20, symSize: 0x0 } + - { offsetInCU: 0x9D, offset: 0x7CDBB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LLSo10NSMapTableCySo8NSStringCACGvpZ', symObjAddr: 0x5BC0, symBinAddr: 0x1379D28, symSize: 0x0 } + - { offsetInCU: 0xAB, offset: 0x7CDC9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0x0, symBinAddr: 0x5AA0, symSize: 0x60 } + - { offsetInCU: 0xF0, offset: 0x7CE0E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5store_WZ', symObjAddr: 0x60, symBinAddr: 0x5B00, symSize: 0x30 } + - { offsetInCU: 0x135, offset: 0x7CE53, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0xD0, symBinAddr: 0x5B70, symSize: 0x40 } + - { offsetInCU: 0x187, offset: 0x7CEA5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x1B0, symBinAddr: 0x5C50, symSize: 0x20 } + - { offsetInCU: 0x1DD, offset: 0x7CEFB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x1D0, symBinAddr: 0x5C70, symSize: 0x20 } + - { offsetInCU: 0x236, offset: 0x7CF54, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x1F0, symBinAddr: 0x5C90, symSize: 0x20 } + - { offsetInCU: 0x28C, offset: 0x7CFAA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x210, symBinAddr: 0x5CB0, symSize: 0x20 } + - { offsetInCU: 0x2E5, offset: 0x7D003, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvgTo', symObjAddr: 0x320, symBinAddr: 0x5DC0, symSize: 0x40 } + - { offsetInCU: 0x320, offset: 0x7D03E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvsTo', symObjAddr: 0x390, symBinAddr: 0x5E30, symSize: 0x30 } + - { offsetInCU: 0x3AF, offset: 0x7D0CD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvgTo', symObjAddr: 0x5D0, symBinAddr: 0x6070, symSize: 0x40 } + - { offsetInCU: 0x405, offset: 0x7D123, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvsTo', symObjAddr: 0x640, symBinAddr: 0x60E0, symSize: 0x40 } + - { offsetInCU: 0x45E, offset: 0x7D17C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvgTo', symObjAddr: 0x680, symBinAddr: 0x6120, symSize: 0x40 } + - { offsetInCU: 0x4B4, offset: 0x7D1D2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvsTo', symObjAddr: 0x6F0, symBinAddr: 0x6190, symSize: 0x40 } + - { offsetInCU: 0x50D, offset: 0x7D22B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0x730, symBinAddr: 0x61D0, symSize: 0x20 } + - { offsetInCU: 0x563, offset: 0x7D281, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0x750, symBinAddr: 0x61F0, symSize: 0x20 } + - { offsetInCU: 0x5BC, offset: 0x7D2DA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0x770, symBinAddr: 0x6210, symSize: 0x20 } + - { offsetInCU: 0x614, offset: 0x7D332, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvsTo', symObjAddr: 0x790, symBinAddr: 0x6230, symSize: 0x30 } + - { offsetInCU: 0x66D, offset: 0x7D38B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x7C0, symBinAddr: 0x6260, symSize: 0x20 } + - { offsetInCU: 0x6C5, offset: 0x7D3E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvsTo', symObjAddr: 0x7E0, symBinAddr: 0x6280, symSize: 0x30 } + - { offsetInCU: 0x71E, offset: 0x7D43C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x810, symBinAddr: 0x62B0, symSize: 0x20 } + - { offsetInCU: 0x774, offset: 0x7D492, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x830, symBinAddr: 0x62D0, symSize: 0x10 } + - { offsetInCU: 0x7CD, offset: 0x7D4EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvgTo', symObjAddr: 0x840, symBinAddr: 0x62E0, symSize: 0x20 } + - { offsetInCU: 0x823, offset: 0x7D541, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7isMetalSbvsTo', symObjAddr: 0x860, symBinAddr: 0x6300, symSize: 0x10 } + - { offsetInCU: 0x866, offset: 0x7D584, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivgTo', symObjAddr: 0x870, symBinAddr: 0x6310, symSize: 0x30 } + - { offsetInCU: 0x898, offset: 0x7D5B6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivgTo', symObjAddr: 0x960, symBinAddr: 0x6400, symSize: 0x30 } + - { offsetInCU: 0x8E0, offset: 0x7D5FE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvgTo', symObjAddr: 0xA50, symBinAddr: 0x64F0, symSize: 0x30 } + - { offsetInCU: 0x948, offset: 0x7D666, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvgTo', symObjAddr: 0xAB0, symBinAddr: 0x6550, symSize: 0x30 } + - { offsetInCU: 0x9E7, offset: 0x7D705, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btFTo', symObjAddr: 0xB20, symBinAddr: 0x65C0, symSize: 0xD0 } + - { offsetInCU: 0xA96, offset: 0x7D7B4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VFTo', symObjAddr: 0xDA0, symBinAddr: 0x6840, symSize: 0x30 } + - { offsetInCU: 0xB46, offset: 0x7D864, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x1760, symBinAddr: 0x7200, symSize: 0xD0 } + - { offsetInCU: 0xBB0, offset: 0x7D8CE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtFTo', symObjAddr: 0x1A70, symBinAddr: 0x7510, symSize: 0x90 } + - { offsetInCU: 0xBED, offset: 0x7D90B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x1BF0, symBinAddr: 0x7690, symSize: 0x100 } + - { offsetInCU: 0xC6B, offset: 0x7D989, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbFTo', symObjAddr: 0x1DC0, symBinAddr: 0x7860, symSize: 0x40 } + - { offsetInCU: 0xC9E, offset: 0x7D9BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1E00, symBinAddr: 0x78A0, symSize: 0x20 } + - { offsetInCU: 0xCF8, offset: 0x7DA16, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvsTo', symObjAddr: 0x1E20, symBinAddr: 0x78C0, symSize: 0x30 } + - { offsetInCU: 0xD53, offset: 0x7DA71, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyFTo', symObjAddr: 0x1E90, symBinAddr: 0x7930, symSize: 0x40 } + - { offsetInCU: 0xDE9, offset: 0x7DB07, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VFTo', symObjAddr: 0x1F10, symBinAddr: 0x79B0, symSize: 0x60 } + - { offsetInCU: 0xEAE, offset: 0x7DBCC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VFTo', symObjAddr: 0x1FD0, symBinAddr: 0x7A70, symSize: 0xA0 } + - { offsetInCU: 0xF3B, offset: 0x7DC59, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC23enterBackgroundListeneryycSgvsTo', symObjAddr: 0x20C0, symBinAddr: 0x7B60, symSize: 0x70 } + - { offsetInCU: 0xF9D, offset: 0x7DCBB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC20becomeActiveListeneryycSgvsTo', symObjAddr: 0x21D0, symBinAddr: 0x7C70, symSize: 0x70 } + - { offsetInCU: 0xFFA, offset: 0x7DD18, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvgTo', symObjAddr: 0x2240, symBinAddr: 0x7CE0, symSize: 0xB0 } + - { offsetInCU: 0x104A, offset: 0x7DD68, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvsTo', symObjAddr: 0x23B0, symBinAddr: 0x7E50, symSize: 0x90 } + - { offsetInCU: 0x10DA, offset: 0x7DDF8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x3110, symBinAddr: 0x8BB0, symSize: 0x30 } + - { offsetInCU: 0x112F, offset: 0x7DE4D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x3C90, symBinAddr: 0x9730, symSize: 0x30 } + - { offsetInCU: 0x1162, offset: 0x7DE80, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x3CC0, symBinAddr: 0x9760, symSize: 0x20 } + - { offsetInCU: 0x11BA, offset: 0x7DED8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvsTo', symObjAddr: 0x3CE0, symBinAddr: 0x9780, symSize: 0x30 } + - { offsetInCU: 0x1228, offset: 0x7DF46, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvgTo', symObjAddr: 0x3D90, symBinAddr: 0x9830, symSize: 0x30 } + - { offsetInCU: 0x1282, offset: 0x7DFA0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvsTo', symObjAddr: 0x3DC0, symBinAddr: 0x9860, symSize: 0x30 } + - { offsetInCU: 0x12E2, offset: 0x7E000, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgFTo', symObjAddr: 0x3E20, symBinAddr: 0x98C0, symSize: 0x30 } + - { offsetInCU: 0x1426, offset: 0x7E144, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFTo', symObjAddr: 0x4200, symBinAddr: 0x9CA0, symSize: 0x30 } + - { offsetInCU: 0x1459, offset: 0x7E177, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfDTo', symObjAddr: 0x4520, symBinAddr: 0x9FC0, symSize: 0x20 } + - { offsetInCU: 0x1494, offset: 0x7E1B2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTo', symObjAddr: 0x4610, symBinAddr: 0xA0B0, symSize: 0x30 } + - { offsetInCU: 0x14C7, offset: 0x7E1E5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvgZTf4d_n', symObjAddr: 0x5040, symBinAddr: 0xAAE0, symSize: 0x2A0 } + - { offsetInCU: 0x162F, offset: 0x7E34D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTf4nnd_n', symObjAddr: 0x53B0, symBinAddr: 0xAE50, symSize: 0xC0 } + - { offsetInCU: 0x184B, offset: 0x7E569, size: 0x8, addend: 0x0, symName: '_$sIeg_IeyB_TR', symObjAddr: 0x2090, symBinAddr: 0x7B30, symSize: 0x30 } + - { offsetInCU: 0x1863, offset: 0x7E581, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_So8NSStringCABIeyByy_TR', symObjAddr: 0x2340, symBinAddr: 0x7DE0, symSize: 0x70 } + - { offsetInCU: 0x187B, offset: 0x7E599, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTK', symObjAddr: 0x24A0, symBinAddr: 0x7F40, symSize: 0x90 } + - { offsetInCU: 0x18B3, offset: 0x7E5D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTk', symObjAddr: 0x2530, symBinAddr: 0x7FD0, symSize: 0xC0 } + - { offsetInCU: 0x18F3, offset: 0x7E611, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TR', symObjAddr: 0x25F0, symBinAddr: 0x8090, symSize: 0x70 } + - { offsetInCU: 0x19A3, offset: 0x7E6C1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfETo', symObjAddr: 0x4540, symBinAddr: 0x9FE0, symSize: 0xC0 } + - { offsetInCU: 0x19D3, offset: 0x7E6F1, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOy', symObjAddr: 0x4640, symBinAddr: 0xA0E0, symSize: 0x20 } + - { offsetInCU: 0x19E7, offset: 0x7E705, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCMa', symObjAddr: 0x4660, symBinAddr: 0xA100, symSize: 0x20 } + - { offsetInCU: 0x19FB, offset: 0x7E719, size: 0x8, addend: 0x0, symName: '_$ss29getContiguousArrayStorageType3fors01_bcD0CyxGmxm_tlFSo18NSLayoutConstraintC_Tgm5', symObjAddr: 0x4680, symBinAddr: 0xA120, symSize: 0x60 } + - { offsetInCU: 0x1C02, offset: 0x7E920, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x52E0, symBinAddr: 0xAD80, symSize: 0x40 } + - { offsetInCU: 0x1C16, offset: 0x7E934, size: 0x8, addend: 0x0, symName: '_$sypSgWOh', symObjAddr: 0x5320, symBinAddr: 0xADC0, symSize: 0x30 } + - { offsetInCU: 0x1C2A, offset: 0x7E948, size: 0x8, addend: 0x0, symName: ___swift_project_boxed_opaque_existential_0, symObjAddr: 0x5350, symBinAddr: 0xADF0, symSize: 0x30 } + - { offsetInCU: 0x1C3E, offset: 0x7E95C, size: 0x8, addend: 0x0, symName: ___swift_destroy_boxed_opaque_existential_0, symObjAddr: 0x5380, symBinAddr: 0xAE20, symSize: 0x30 } + - { offsetInCU: 0x1C5D, offset: 0x7E97B, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSo19UIGestureRecognizerCIeyByy_SSADIeggg_TRTA', symObjAddr: 0x5910, symBinAddr: 0xB3B0, symSize: 0x40 } + - { offsetInCU: 0x1C86, offset: 0x7E9A4, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x5950, symBinAddr: 0xB3F0, symSize: 0x20 } + - { offsetInCU: 0x1C9A, offset: 0x7E9B8, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x5970, symBinAddr: 0xB410, symSize: 0x10 } + - { offsetInCU: 0x1CAE, offset: 0x7E9CC, size: 0x8, addend: 0x0, symName: '_$sIeg_SgWOe', symObjAddr: 0x5980, symBinAddr: 0xB420, symSize: 0x20 } + - { offsetInCU: 0x1CCD, offset: 0x7E9EB, size: 0x8, addend: 0x0, symName: '_$sIeyB_Ieg_TRTA', symObjAddr: 0x59A0, symBinAddr: 0xB440, symSize: 0x10 } + - { offsetInCU: 0x1CF6, offset: 0x7EA14, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TRTA', symObjAddr: 0x59D0, symBinAddr: 0xB470, symSize: 0x20 } + - { offsetInCU: 0x1D15, offset: 0x7EA33, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SSABytIegnnr_TRTA', symObjAddr: 0x59F0, symBinAddr: 0xB490, symSize: 0x30 } + - { offsetInCU: 0x1D3E, offset: 0x7EA5C, size: 0x8, addend: 0x0, symName: '_$sypWOb', symObjAddr: 0x5A20, symBinAddr: 0xB4C0, symSize: 0x20 } + - { offsetInCU: 0x1D52, offset: 0x7EA70, size: 0x8, addend: 0x0, symName: '_$sypWOc', symObjAddr: 0x5A70, symBinAddr: 0xB510, symSize: 0x30 } + - { offsetInCU: 0x1FD7, offset: 0x7ECF5, size: 0x8, addend: 0x0, symName: '_$sSD17dictionaryLiteralSDyxq_Gx_q_td_tcfCSS_ypTgm5Tf4g_n', symObjAddr: 0x4F50, symBinAddr: 0xA9F0, symSize: 0xF0 } + - { offsetInCU: 0x2469, offset: 0x7F187, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvg', symObjAddr: 0x360, symBinAddr: 0x5E00, symSize: 0x30 } + - { offsetInCU: 0x249A, offset: 0x7F1B8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvs', symObjAddr: 0x3C0, symBinAddr: 0x5E60, symSize: 0xE0 } + - { offsetInCU: 0x24E4, offset: 0x7F202, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM', symObjAddr: 0x4A0, symBinAddr: 0x5F40, symSize: 0x50 } + - { offsetInCU: 0x2507, offset: 0x7F225, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM.resume.0', symObjAddr: 0x4F0, symBinAddr: 0x5F90, symSize: 0xE0 } + - { offsetInCU: 0x2548, offset: 0x7F266, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64Vvg', symObjAddr: 0x610, symBinAddr: 0x60B0, symSize: 0x30 } + - { offsetInCU: 0x259E, offset: 0x7F2BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg', symObjAddr: 0x6C0, symBinAddr: 0x6160, symSize: 0x30 } + - { offsetInCU: 0x270A, offset: 0x7F428, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidthSivg', symObjAddr: 0x8A0, symBinAddr: 0x6340, symSize: 0xC0 } + - { offsetInCU: 0x282F, offset: 0x7F54D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeightSivg', symObjAddr: 0x990, symBinAddr: 0x6430, symSize: 0xC0 } + - { offsetInCU: 0x2975, offset: 0x7F693, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvg', symObjAddr: 0xA80, symBinAddr: 0x6520, symSize: 0x30 } + - { offsetInCU: 0x29BB, offset: 0x7F6D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvg', symObjAddr: 0xAE0, symBinAddr: 0x6580, symSize: 0x30 } + - { offsetInCU: 0x29ED, offset: 0x7F70B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btF', symObjAddr: 0xB10, symBinAddr: 0x65B0, symSize: 0x10 } + - { offsetInCU: 0x2B6A, offset: 0x7F888, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VF', symObjAddr: 0xBF0, symBinAddr: 0x6690, symSize: 0x1B0 } + - { offsetInCU: 0x2F4D, offset: 0x7FC6B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btF', symObjAddr: 0xDD0, symBinAddr: 0x6870, symSize: 0x990 } + - { offsetInCU: 0x36DB, offset: 0x803F9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtF', symObjAddr: 0x1830, symBinAddr: 0x72D0, symSize: 0x240 } + - { offsetInCU: 0x3B67, offset: 0x80885, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x1B00, symBinAddr: 0x75A0, symSize: 0xF0 } + - { offsetInCU: 0x3BF6, offset: 0x80914, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbF', symObjAddr: 0x1CF0, symBinAddr: 0x7790, symSize: 0xD0 } + - { offsetInCU: 0x3D4F, offset: 0x80A6D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyF', symObjAddr: 0x1E50, symBinAddr: 0x78F0, symSize: 0x40 } + - { offsetInCU: 0x3DD3, offset: 0x80AF1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF', symObjAddr: 0x1ED0, symBinAddr: 0x7970, symSize: 0x40 } + - { offsetInCU: 0x3EF2, offset: 0x80C10, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VF', symObjAddr: 0x1F70, symBinAddr: 0x7A10, symSize: 0x60 } + - { offsetInCU: 0x3FE8, offset: 0x80D06, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvg', symObjAddr: 0x22F0, symBinAddr: 0x7D90, symSize: 0x50 } + - { offsetInCU: 0x4032, offset: 0x80D50, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvs', symObjAddr: 0x2440, symBinAddr: 0x7EE0, symSize: 0x60 } + - { offsetInCU: 0x4059, offset: 0x80D77, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM', symObjAddr: 0x2660, symBinAddr: 0x8100, symSize: 0x40 } + - { offsetInCU: 0x407F, offset: 0x80D9D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM.resume.0', symObjAddr: 0x26A0, symBinAddr: 0x8140, symSize: 0x10 } + - { offsetInCU: 0x4141, offset: 0x80E5F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x26B0, symBinAddr: 0x8150, symSize: 0xA60 } + - { offsetInCU: 0x4348, offset: 0x81066, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfC', symObjAddr: 0x3140, symBinAddr: 0x8BE0, symSize: 0x80 } + - { offsetInCU: 0x4371, offset: 0x8108F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfc', symObjAddr: 0x31C0, symBinAddr: 0x8C60, symSize: 0xAD0 } + - { offsetInCU: 0x4599, offset: 0x812B7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvW', symObjAddr: 0x3D10, symBinAddr: 0x97B0, symSize: 0x80 } + - { offsetInCU: 0x468F, offset: 0x813AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgF', symObjAddr: 0x3DF0, symBinAddr: 0x9890, symSize: 0x30 } + - { offsetInCU: 0x472B, offset: 0x81449, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6resize33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x3E50, symBinAddr: 0x98F0, symSize: 0x110 } + - { offsetInCU: 0x497C, offset: 0x8169A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyF', symObjAddr: 0x3F60, symBinAddr: 0x9A00, symSize: 0x2A0 } + - { offsetInCU: 0x4BD8, offset: 0x818F6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfD', symObjAddr: 0x4230, symBinAddr: 0x9CD0, symSize: 0x2F0 } + - { offsetInCU: 0x4C66, offset: 0x81984, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZ', symObjAddr: 0x4600, symBinAddr: 0xA0A0, symSize: 0x10 } + - { offsetInCU: 0x4C8E, offset: 0x819AC, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4findys10_HashTableV6BucketV6bucket_Sb5foundtxSHRzlFSS_Tg5', symObjAddr: 0x46E0, symBinAddr: 0xA180, symSize: 0x60 } + - { offsetInCU: 0x4CE8, offset: 0x81A06, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV7_insert2at3key5valueys10_HashTableV6BucketV_xnq_ntFSS_ypTg5', symObjAddr: 0x4740, symBinAddr: 0xA1E0, symSize: 0x60 } + - { offsetInCU: 0x4D54, offset: 0x81A72, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV12mutatingFind_8isUniques10_HashTableV6BucketV6bucket_Sb5foundtx_SbtFSS_ypTg5', symObjAddr: 0x47A0, symBinAddr: 0xA240, symSize: 0xB0 } + - { offsetInCU: 0x4D91, offset: 0x81AAF, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4find_9hashValues10_HashTableV6BucketV6bucket_Sb5foundtx_SitSHRzlFSS_Tg5', symObjAddr: 0x4850, symBinAddr: 0xA2F0, symSize: 0xE0 } + - { offsetInCU: 0x4DFC, offset: 0x81B1A, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV4copyyyFSS_ypTg5', symObjAddr: 0x4930, symBinAddr: 0xA3D0, symSize: 0x260 } + - { offsetInCU: 0x4EA4, offset: 0x81BC2, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV20_copyOrMoveAndResize8capacity12moveElementsySi_SbtFSS_ypTg5', symObjAddr: 0x4B90, symBinAddr: 0xA630, symSize: 0x3C0 } + - { offsetInCU: 0x27, offset: 0x81DFB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xB5F0, symSize: 0x20 } + - { offsetInCU: 0x62, offset: 0x81E36, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCMa', symObjAddr: 0x20, symBinAddr: 0xB610, symSize: 0x14 } + - { offsetInCU: 0x1AF, offset: 0x81F83, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xB5F0, symSize: 0x20 } + - { offsetInCU: 0x65, offset: 0x82010, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvgTo', symObjAddr: 0x0, symBinAddr: 0xB630, symSize: 0x10 } + - { offsetInCU: 0xBB, offset: 0x82066, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8mPrograms6UInt32VvsTo', symObjAddr: 0x10, symBinAddr: 0xB640, symSize: 0x10 } + - { offsetInCU: 0x114, offset: 0x820BF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvgTo', symObjAddr: 0x20, symBinAddr: 0xB650, symSize: 0x40 } + - { offsetInCU: 0x16A, offset: 0x82115, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3rbos6UInt32VvsTo', symObjAddr: 0x60, symBinAddr: 0xB690, symSize: 0x40 } + - { offsetInCU: 0x1C3, offset: 0x8216E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvgTo', symObjAddr: 0xA0, symBinAddr: 0xB6D0, symSize: 0x40 } + - { offsetInCU: 0x219, offset: 0x821C4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3fbos6UInt32VvsTo', symObjAddr: 0xE0, symBinAddr: 0xB710, symSize: 0x40 } + - { offsetInCU: 0x272, offset: 0x8221D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivgTo', symObjAddr: 0x120, symBinAddr: 0xB750, symSize: 0x20 } + - { offsetInCU: 0x2C8, offset: 0x82273, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC5widthSivsTo', symObjAddr: 0x140, symBinAddr: 0xB770, symSize: 0x20 } + - { offsetInCU: 0x321, offset: 0x822CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivgTo', symObjAddr: 0x160, symBinAddr: 0xB790, symSize: 0x20 } + - { offsetInCU: 0x377, offset: 0x82322, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC6heightSivsTo', symObjAddr: 0x180, symBinAddr: 0xB7B0, symSize: 0x20 } + - { offsetInCU: 0x3D0, offset: 0x8237B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvgTo', symObjAddr: 0x1A0, symBinAddr: 0xB7D0, symSize: 0x40 } + - { offsetInCU: 0x426, offset: 0x823D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC2abs6UInt32VvsTo', symObjAddr: 0x1E0, symBinAddr: 0xB810, symSize: 0x40 } + - { offsetInCU: 0x47F, offset: 0x8242A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvgTo', symObjAddr: 0x220, symBinAddr: 0xB850, symSize: 0x10 } + - { offsetInCU: 0x4D5, offset: 0x82480, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC3poss5Int32VvsTo', symObjAddr: 0x230, symBinAddr: 0xB860, symSize: 0x10 } + - { offsetInCU: 0x52E, offset: 0x824D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvgTo', symObjAddr: 0x240, symBinAddr: 0xB870, symSize: 0x10 } + - { offsetInCU: 0x584, offset: 0x8252F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10samplerPoss5Int32VvsTo', symObjAddr: 0x250, symBinAddr: 0xB880, symSize: 0x10 } + - { offsetInCU: 0x5DD, offset: 0x82588, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvgTo', symObjAddr: 0x260, symBinAddr: 0xB890, symSize: 0x40 } + - { offsetInCU: 0x633, offset: 0x825DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9vextexBufSaySfGvsTo', symObjAddr: 0x2A0, symBinAddr: 0xB8D0, symSize: 0x40 } + - { offsetInCU: 0x676, offset: 0x82621, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13SIZE_OF_FLOATSivgZTo', symObjAddr: 0x2E0, symBinAddr: 0xB910, symSize: 0x10 } + - { offsetInCU: 0x692, offset: 0x8263D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13VERTEX_SHADERSSvgZTo', symObjAddr: 0x2F0, symBinAddr: 0xB920, symSize: 0x30 } + - { offsetInCU: 0x6C4, offset: 0x8266F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvgTo', symObjAddr: 0x320, symBinAddr: 0xB950, symSize: 0x20 } + - { offsetInCU: 0x71C, offset: 0x826C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7surfaceSo9IOSurfaceCSgvsTo', symObjAddr: 0x340, symBinAddr: 0xB970, symSize: 0x30 } + - { offsetInCU: 0x775, offset: 0x82720, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvgTo', symObjAddr: 0x490, symBinAddr: 0xBAC0, symSize: 0x20 } + - { offsetInCU: 0x7CB, offset: 0x82776, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC8pixelBufs9UnmanagedVySo11CVBufferRefaGSgvsTo', symObjAddr: 0x4B0, symBinAddr: 0xBAE0, symSize: 0x20 } + - { offsetInCU: 0x83A, offset: 0x827E5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfcTo', symObjAddr: 0x680, symBinAddr: 0xBC70, symSize: 0x20 } + - { offsetInCU: 0x86C, offset: 0x82817, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyFTo', symObjAddr: 0x7E0, symBinAddr: 0xBDD0, symSize: 0x30 } + - { offsetInCU: 0x8C4, offset: 0x8286F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTo', symObjAddr: 0x830, symBinAddr: 0xBE20, symSize: 0x80 } + - { offsetInCU: 0x928, offset: 0x828D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTo', symObjAddr: 0x8B0, symBinAddr: 0xBEA0, symSize: 0x80 } + - { offsetInCU: 0x9CA, offset: 0x82975, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyFTo', symObjAddr: 0xCE0, symBinAddr: 0xC2D0, symSize: 0x30 } + - { offsetInCU: 0xAB4, offset: 0x82A5F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCMa', symObjAddr: 0x660, symBinAddr: 0xBC50, symSize: 0x20 } + - { offsetInCU: 0xB33, offset: 0x82ADE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfETo', symObjAddr: 0xD40, symBinAddr: 0xC330, symSize: 0x60 } + - { offsetInCU: 0x1271, offset: 0x8321C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfC', symObjAddr: 0x4D0, symBinAddr: 0xBB00, symSize: 0x20 } + - { offsetInCU: 0x128B, offset: 0x83236, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfc', symObjAddr: 0x4F0, symBinAddr: 0xBB20, symSize: 0x130 } + - { offsetInCU: 0x12BB, offset: 0x83266, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC7destroyyyF', symObjAddr: 0x6A0, symBinAddr: 0xBC90, symSize: 0x140 } + - { offsetInCU: 0x1474, offset: 0x8341F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtF', symObjAddr: 0x810, symBinAddr: 0xBE00, symSize: 0x20 } + - { offsetInCU: 0x1525, offset: 0x834D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC13createSurfaceyyF', symObjAddr: 0x930, symBinAddr: 0xBF20, symSize: 0x3B0 } + - { offsetInCU: 0x18BB, offset: 0x83866, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfD', symObjAddr: 0xD10, symBinAddr: 0xC300, symSize: 0x30 } + - { offsetInCU: 0x19B4, offset: 0x8395F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC10texImage2Dyys5Int32V_A4fA9NSCCanvasCAHSbtFTf4ddnndnndn_n', symObjAddr: 0xDA0, symBinAddr: 0xC390, symSize: 0x720 } + - { offsetInCU: 0x231C, offset: 0x842C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFTf4nnnnndn_n', symObjAddr: 0x1520, symBinAddr: 0xCB10, symSize: 0x7EC } + - { offsetInCU: 0x10C, offset: 0x84E70, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfcTo', symObjAddr: 0x1120, symBinAddr: 0xE3E0, symSize: 0x60 } + - { offsetInCU: 0x19C, offset: 0x84F00, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCfETo', symObjAddr: 0x11A0, symBinAddr: 0xE460, symSize: 0x20 } + - { offsetInCU: 0x1CB, offset: 0x84F2F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6handleyySo19UIGestureRecognizerCFTo', symObjAddr: 0x11C0, symBinAddr: 0xE480, symSize: 0x10 } + - { offsetInCU: 0x368, offset: 0x850CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCACycfcTo', symObjAddr: 0x1A40, symBinAddr: 0xED00, symSize: 0x30 } + - { offsetInCU: 0x5E4, offset: 0x85348, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCfETo', symObjAddr: 0x1AC0, symBinAddr: 0xED80, symSize: 0x60 } + - { offsetInCU: 0x613, offset: 0x85377, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCMa', symObjAddr: 0x1B20, symBinAddr: 0xEDE0, symSize: 0x20 } + - { offsetInCU: 0x627, offset: 0x8538B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCMa', symObjAddr: 0x1B40, symBinAddr: 0xEE00, symSize: 0x20 } + - { offsetInCU: 0x63B, offset: 0x8539F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwCP', symObjAddr: 0x1B60, symBinAddr: 0xEE20, symSize: 0x30 } + - { offsetInCU: 0x64F, offset: 0x853B3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwxx', symObjAddr: 0x1B90, symBinAddr: 0xEE50, symSize: 0x10 } + - { offsetInCU: 0x663, offset: 0x853C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwcp', symObjAddr: 0x1BA0, symBinAddr: 0xEE60, symSize: 0x30 } + - { offsetInCU: 0x677, offset: 0x853DB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwca', symObjAddr: 0x1BD0, symBinAddr: 0xEE90, symSize: 0x50 } + - { offsetInCU: 0x68B, offset: 0x853EF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwta', symObjAddr: 0x1C40, symBinAddr: 0xEEE0, symSize: 0x40 } + - { offsetInCU: 0x69F, offset: 0x85403, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwet', symObjAddr: 0x1C80, symBinAddr: 0xEF20, symSize: 0x40 } + - { offsetInCU: 0x6B3, offset: 0x85417, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwst', symObjAddr: 0x1CC0, symBinAddr: 0xEF60, symSize: 0x50 } + - { offsetInCU: 0x6C7, offset: 0x8542B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVMa', symObjAddr: 0x1D10, symBinAddr: 0xEFB0, symSize: 0x10 } + - { offsetInCU: 0x6DB, offset: 0x8543F, size: 0x8, addend: 0x0, symName: '_$sypSgWOc', symObjAddr: 0x1D20, symBinAddr: 0xEFC0, symSize: 0x40 } + - { offsetInCU: 0x6EF, offset: 0x85453, size: 0x8, addend: 0x0, symName: '_$sSo7UITouchCSo8NSObjectCSH10ObjectiveCWl', symObjAddr: 0x1E30, symBinAddr: 0xF000, symSize: 0x50 } + - { offsetInCU: 0x703, offset: 0x85467, size: 0x8, addend: 0x0, symName: '_$sSh8IteratorV8_VariantOyx__GSHRzlWOe', symObjAddr: 0x1E80, symBinAddr: 0xF050, symSize: 0x20 } + - { offsetInCU: 0x761, offset: 0x854C5, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOe', symObjAddr: 0x21A0, symBinAddr: 0xF370, symSize: 0x14 } + - { offsetInCU: 0xCB4, offset: 0x85A18, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesBegan_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x0, symBinAddr: 0xD300, symSize: 0x630 } + - { offsetInCU: 0xF39, offset: 0x85C9D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesMoved_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x650, symBinAddr: 0xD950, symSize: 0xE0 } + - { offsetInCU: 0xFB8, offset: 0x85D1C, size: 0x8, addend: 0x0, symName: '_$sSa6remove2atxSi_tF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x800, symBinAddr: 0xDAE0, symSize: 0xB0 } + - { offsetInCU: 0x102A, offset: 0x85D8E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfc', symObjAddr: 0x1030, symBinAddr: 0xE2F0, symSize: 0xF0 } + - { offsetInCU: 0x1179, offset: 0x85EDD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6onMove33_044DDF836BDB3B89B481C6F58BB6EF6BLLyySo19UIGestureRecognizerC_ShySo7UITouchCGSgtF', symObjAddr: 0x1590, symBinAddr: 0xE850, symSize: 0x4B0 } + - { offsetInCU: 0x18C2, offset: 0x86626, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNewAByxGyF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x1EA0, symBinAddr: 0xF070, symSize: 0x20 } + - { offsetInCU: 0x195A, offset: 0x866BE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6canvasAcA9NSCCanvasC_tcfcTf4gn_n', symObjAddr: 0x1EC0, symBinAddr: 0xF090, symSize: 0x1F0 } + - { offsetInCU: 0x27, offset: 0x86887, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xF390, symSize: 0x30 } + - { offsetInCU: 0x4B, offset: 0x868AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvpZ', symObjAddr: 0x2A0, symBinAddr: 0x137A038, symSize: 0x0 } + - { offsetInCU: 0x65, offset: 0x868C5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xF390, symSize: 0x30 } + - { offsetInCU: 0x98, offset: 0x868F8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZTo', symObjAddr: 0x160, symBinAddr: 0xF4F0, symSize: 0x30 } + - { offsetInCU: 0x104, offset: 0x86964, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfcTo', symObjAddr: 0x200, symBinAddr: 0xF590, symSize: 0x30 } + - { offsetInCU: 0x158, offset: 0x869B8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queue_WZ', symObjAddr: 0x30, symBinAddr: 0xF3C0, symSize: 0xF0 } + - { offsetInCU: 0x183, offset: 0x869E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCMa', symObjAddr: 0x1E0, symBinAddr: 0xF570, symSize: 0x20 } + - { offsetInCU: 0x197, offset: 0x869F7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfETo', symObjAddr: 0x260, symBinAddr: 0xF5F0, symSize: 0x10 } + - { offsetInCU: 0x1C2, offset: 0x86A22, size: 0x8, addend: 0x0, symName: '_$sSo17OS_dispatch_queueCMa', symObjAddr: 0x270, symBinAddr: 0xF600, symSize: 0x2F } + - { offsetInCU: 0x34A, offset: 0x86BAA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZ', symObjAddr: 0x120, symBinAddr: 0xF4B0, symSize: 0x40 } + - { offsetInCU: 0x38A, offset: 0x86BEA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfC', symObjAddr: 0x190, symBinAddr: 0xF520, symSize: 0x20 } + - { offsetInCU: 0x39E, offset: 0x86BFE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfc', symObjAddr: 0x1B0, symBinAddr: 0xF540, symSize: 0x30 } + - { offsetInCU: 0x3DA, offset: 0x86C3A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfD', symObjAddr: 0x230, symBinAddr: 0xF5C0, symSize: 0x30 } + - { offsetInCU: 0x2B, offset: 0x86C88, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xF630, symSize: 0xA0 } + - { offsetInCU: 0x66, offset: 0x86CC3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZTo', symObjAddr: 0xA0, symBinAddr: 0xF6D0, symSize: 0xA0 } + - { offsetInCU: 0xF9, offset: 0x86D56, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZTo', symObjAddr: 0x1D0, symBinAddr: 0xF800, symSize: 0x100 } + - { offsetInCU: 0x1AD, offset: 0x86E0A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZTo', symObjAddr: 0x300, symBinAddr: 0xF930, symSize: 0x30 } + - { offsetInCU: 0x22D, offset: 0x86E8A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTo', symObjAddr: 0x340, symBinAddr: 0xF970, symSize: 0x90 } + - { offsetInCU: 0x2A6, offset: 0x86F03, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZTo', symObjAddr: 0x4E0, symBinAddr: 0xFB10, symSize: 0x140 } + - { offsetInCU: 0x345, offset: 0x86FA2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfcTo', symObjAddr: 0x670, symBinAddr: 0xFCA0, symSize: 0x30 } + - { offsetInCU: 0x398, offset: 0x86FF5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZTf4nnnnnndd_n', symObjAddr: 0x6D0, symBinAddr: 0xFD00, symSize: 0x170 } + - { offsetInCU: 0x50B, offset: 0x87168, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC7getFile33_F00B23A4165DD6ABFCD23C8811C7DF43LLyS2SKFZTf4nd_g', symObjAddr: 0x840, symBinAddr: 0xFE70, symSize: 0x310 } + - { offsetInCU: 0x5EA, offset: 0x87247, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCMa', symObjAddr: 0xB50, symBinAddr: 0x10180, symSize: 0x20 } + - { offsetInCU: 0x5FE, offset: 0x8725B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOAEs5ErrorAAWl', symObjAddr: 0xB70, symBinAddr: 0x101A0, symSize: 0x30 } + - { offsetInCU: 0x612, offset: 0x8726F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwCP', symObjAddr: 0xBA0, symBinAddr: 0x101D0, symSize: 0x30 } + - { offsetInCU: 0x626, offset: 0x87283, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwxx', symObjAddr: 0xBD0, symBinAddr: 0x10200, symSize: 0x10 } + - { offsetInCU: 0x63A, offset: 0x87297, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwca', symObjAddr: 0xBE0, symBinAddr: 0x10210, symSize: 0x40 } + - { offsetInCU: 0x64E, offset: 0x872AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwta', symObjAddr: 0xC30, symBinAddr: 0x10250, symSize: 0x30 } + - { offsetInCU: 0x662, offset: 0x872BF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwet', symObjAddr: 0xC60, symBinAddr: 0x10280, symSize: 0x40 } + - { offsetInCU: 0x676, offset: 0x872D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwst', symObjAddr: 0xCA0, symBinAddr: 0x102C0, symSize: 0x40 } + - { offsetInCU: 0x68A, offset: 0x872E7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwug', symObjAddr: 0xCE0, symBinAddr: 0x10300, symSize: 0x10 } + - { offsetInCU: 0x69E, offset: 0x872FB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwup', symObjAddr: 0xCF0, symBinAddr: 0x10310, symSize: 0x10 } + - { offsetInCU: 0x6B2, offset: 0x8730F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOwui', symObjAddr: 0xD00, symBinAddr: 0x10320, symSize: 0x10 } + - { offsetInCU: 0x6C6, offset: 0x87323, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOMa', symObjAddr: 0xD10, symBinAddr: 0x10330, symSize: 0x10 } + - { offsetInCU: 0x74E, offset: 0x873AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP7_domainSSvgTW', symObjAddr: 0x3D0, symBinAddr: 0xFA00, symSize: 0x10 } + - { offsetInCU: 0x76A, offset: 0x873C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP5_codeSivgTW', symObjAddr: 0x3E0, symBinAddr: 0xFA10, symSize: 0x10 } + - { offsetInCU: 0x786, offset: 0x873E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP9_userInfoyXlSgvgTW', symObjAddr: 0x3F0, symBinAddr: 0xFA20, symSize: 0x10 } + - { offsetInCU: 0x7A2, offset: 0x873FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC8NSCErrorOs5ErrorAAsAFP19_getEmbeddedNSErroryXlSgyFTW', symObjAddr: 0x400, symBinAddr: 0xFA30, symSize: 0x10 } + - { offsetInCU: 0xA56, offset: 0x876B3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC18createTextureCacheSo017CVOpenGLESTextureF3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xF630, symSize: 0xA0 } + - { offsetInCU: 0xAEC, offset: 0x87749, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheG0a_AFSo012CFDictionaryG0aSgs6UInt32Vs5Int32VA2p2NSitFZ', symObjAddr: 0x140, symBinAddr: 0xF770, symSize: 0x90 } + - { offsetInCU: 0xC71, offset: 0x878CE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11setupRenderAA9NSCRenderCyFZ', symObjAddr: 0x2D0, symBinAddr: 0xF900, symSize: 0x30 } + - { offsetInCU: 0xCBB, offset: 0x87918, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC9drawFrameyySo8AVPlayerC_So0F15ItemVideoOutputCSo6CGSizeVAA9NSCRenderCs5Int32VANSbtFZ', symObjAddr: 0x330, symBinAddr: 0xF960, symSize: 0x10 } + - { offsetInCU: 0xCDD, offset: 0x8793A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsC11writeToFileyySo6NSDataC_SStKFZ', symObjAddr: 0x410, symBinAddr: 0xFA40, symSize: 0xD0 } + - { offsetInCU: 0xD8D, offset: 0x879EA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfC', symObjAddr: 0x620, symBinAddr: 0xFC50, symSize: 0x20 } + - { offsetInCU: 0xDA1, offset: 0x879FE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCACycfc', symObjAddr: 0x640, symBinAddr: 0xFC70, symSize: 0x30 } + - { offsetInCU: 0xDD7, offset: 0x87A34, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative5UtilsCfD', symObjAddr: 0x6A0, symBinAddr: 0xFCD0, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0x87B54, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x10350, symSize: 0x10 } + - { offsetInCU: 0x71, offset: 0x87B9E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x10, symBinAddr: 0x10360, symSize: 0x60 } + - { offsetInCU: 0xF6, offset: 0x87C23, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x80, symBinAddr: 0x103D0, symSize: 0x50 } + - { offsetInCU: 0x193, offset: 0x87CC0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0xE0, symBinAddr: 0x10430, symSize: 0x60 } + - { offsetInCU: 0x25C, offset: 0x87D89, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x150, symBinAddr: 0x104A0, symSize: 0x90 } + - { offsetInCU: 0x339, offset: 0x87E66, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfcTo', symObjAddr: 0x230, symBinAddr: 0x10580, symSize: 0x30 } + - { offsetInCU: 0x38D, offset: 0x87EBA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCMa', symObjAddr: 0x290, symBinAddr: 0x105E0, symSize: 0x14 } + - { offsetInCU: 0x4FD, offset: 0x8802A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x10350, symSize: 0x10 } + - { offsetInCU: 0x5A0, offset: 0x880CD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x70, symBinAddr: 0x103C0, symSize: 0x10 } + - { offsetInCU: 0x640, offset: 0x8816D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xD0, symBinAddr: 0x10420, symSize: 0x10 } + - { offsetInCU: 0x703, offset: 0x88230, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageyys5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x140, symBinAddr: 0x10490, symSize: 0x10 } + - { offsetInCU: 0x80F, offset: 0x8833C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfC', symObjAddr: 0x1E0, symBinAddr: 0x10530, symSize: 0x20 } + - { offsetInCU: 0x823, offset: 0x88350, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfc', symObjAddr: 0x200, symBinAddr: 0x10550, symSize: 0x30 } + - { offsetInCU: 0x859, offset: 0x88386, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCfD', symObjAddr: 0x260, symBinAddr: 0x105B0, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0x883D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x10600, symSize: 0x30 } + - { offsetInCU: 0xA9, offset: 0x88452, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x30, symBinAddr: 0x10630, symSize: 0x50 } + - { offsetInCU: 0x1A6, offset: 0x8854F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0xC0, symBinAddr: 0x106C0, symSize: 0x50 } + - { offsetInCU: 0x289, offset: 0x88632, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfcTo', symObjAddr: 0x180, symBinAddr: 0x10780, symSize: 0x30 } + - { offsetInCU: 0x2DD, offset: 0x88686, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCMa', symObjAddr: 0x160, symBinAddr: 0x10760, symSize: 0x20 } + - { offsetInCU: 0x487, offset: 0x88830, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x10600, symSize: 0x30 } + - { offsetInCU: 0x5DD, offset: 0x88986, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x80, symBinAddr: 0x10680, symSize: 0x40 } + - { offsetInCU: 0x725, offset: 0x88ACE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfC', symObjAddr: 0x110, symBinAddr: 0x10710, symSize: 0x20 } + - { offsetInCU: 0x739, offset: 0x88AE2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfc', symObjAddr: 0x130, symBinAddr: 0x10730, symSize: 0x30 } + - { offsetInCU: 0x76F, offset: 0x88B18, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCfD', symObjAddr: 0x1B0, symBinAddr: 0x107B0, symSize: 0x2B } + - { offsetInCU: 0x61, offset: 0x88B9C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x10, symBinAddr: 0x107F0, symSize: 0x20 } + - { offsetInCU: 0xB7, offset: 0x88BF2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x30, symBinAddr: 0x10810, symSize: 0x10 } + - { offsetInCU: 0x110, offset: 0x88C4B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvgTo', symObjAddr: 0x40, symBinAddr: 0x10820, symSize: 0x40 } + - { offsetInCU: 0x168, offset: 0x88CA3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvsTo', symObjAddr: 0xC0, symBinAddr: 0x108A0, symSize: 0x40 } + - { offsetInCU: 0x1C3, offset: 0x88CFE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x100, symBinAddr: 0x108E0, symSize: 0x10 } + - { offsetInCU: 0x219, offset: 0x88D54, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x110, symBinAddr: 0x108F0, symSize: 0x10 } + - { offsetInCU: 0x272, offset: 0x88DAD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfcTo', symObjAddr: 0x1C0, symBinAddr: 0x109A0, symSize: 0x80 } + - { offsetInCU: 0x2CA, offset: 0x88E05, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x300, symBinAddr: 0x10AE0, symSize: 0xA0 } + - { offsetInCU: 0x32C, offset: 0x88E67, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x470, symBinAddr: 0x10C50, symSize: 0x30 } + - { offsetInCU: 0x35E, offset: 0x88E99, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC12bindDrawableyyFTo', symObjAddr: 0x520, symBinAddr: 0x10C80, symSize: 0xA0 } + - { offsetInCU: 0x3DF, offset: 0x88F1A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC14deleteDrawableyyFTo', symObjAddr: 0x600, symBinAddr: 0x10D20, symSize: 0x60 } + - { offsetInCU: 0x44F, offset: 0x88F8A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTo', symObjAddr: 0x670, symBinAddr: 0x10D90, symSize: 0x50 } + - { offsetInCU: 0x4C1, offset: 0x88FFC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfcTo', symObjAddr: 0x780, symBinAddr: 0x10EA0, symSize: 0x30 } + - { offsetInCU: 0x535, offset: 0x89070, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCMa', symObjAddr: 0x1A0, symBinAddr: 0x10980, symSize: 0x20 } + - { offsetInCU: 0x55F, offset: 0x8909A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCfETo', symObjAddr: 0x7D0, symBinAddr: 0x10EF0, symSize: 0x20 } + - { offsetInCU: 0x65D, offset: 0x89198, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VFTo', symObjAddr: 0xAF0, symBinAddr: 0x11210, symSize: 0x80 } + - { offsetInCU: 0x69B, offset: 0x891D6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xB70, symBinAddr: 0x11290, symSize: 0x20 } + - { offsetInCU: 0x6F1, offset: 0x8922C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xB90, symBinAddr: 0x112B0, symSize: 0x10 } + - { offsetInCU: 0x74A, offset: 0x89285, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvgTo', symObjAddr: 0xBA0, symBinAddr: 0x112C0, symSize: 0x20 } + - { offsetInCU: 0x7A2, offset: 0x892DD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvsTo', symObjAddr: 0xBC0, symBinAddr: 0x112E0, symSize: 0x20 } + - { offsetInCU: 0x7FD, offset: 0x89338, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvgTo', symObjAddr: 0xBE0, symBinAddr: 0x11300, symSize: 0x40 } + - { offsetInCU: 0x853, offset: 0x8938E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvsTo', symObjAddr: 0xC50, symBinAddr: 0x11370, symSize: 0x40 } + - { offsetInCU: 0x8E6, offset: 0x89421, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfcTo', symObjAddr: 0xDC0, symBinAddr: 0x114E0, symSize: 0x80 } + - { offsetInCU: 0x93E, offset: 0x89479, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0xF90, symBinAddr: 0x116B0, symSize: 0xA0 } + - { offsetInCU: 0x9A0, offset: 0x894DB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x10E0, symBinAddr: 0x11800, symSize: 0x30 } + - { offsetInCU: 0x9D2, offset: 0x8950D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC11deviceScaleSfyFTo', symObjAddr: 0x1110, symBinAddr: 0x11830, symSize: 0xB0 } + - { offsetInCU: 0xA53, offset: 0x8958E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTo', symObjAddr: 0x11D0, symBinAddr: 0x118E0, symSize: 0x30 } + - { offsetInCU: 0xAB1, offset: 0x895EC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCfETo', symObjAddr: 0x1250, symBinAddr: 0x11960, symSize: 0x20 } + - { offsetInCU: 0xC63, offset: 0x8979E, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfC12CanvasNative15NSCTouchHandlerC7PointerV_Tgm5', symObjAddr: 0x1470, symBinAddr: 0x11AD0, symSize: 0x80 } + - { offsetInCU: 0xCE6, offset: 0x89821, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCs5UInt8V_Tgm5', symObjAddr: 0x1570, symBinAddr: 0x11B50, symSize: 0x70 } + - { offsetInCU: 0xD6A, offset: 0x898A5, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOy', symObjAddr: 0x1750, symBinAddr: 0x11D30, symSize: 0x40 } + - { offsetInCU: 0xD7E, offset: 0x898B9, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOe', symObjAddr: 0x1790, symBinAddr: 0x11D70, symSize: 0x40 } + - { offsetInCU: 0xD92, offset: 0x898CD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCMa', symObjAddr: 0x17D0, symBinAddr: 0x11DB0, symSize: 0x20 } + - { offsetInCU: 0xE6C, offset: 0x899A7, size: 0x8, addend: 0x0, symName: '_$sSaySayxGqd__c7ElementQyd__RszSTRd__lufCs5UInt8V_10Foundation4DataVTgm5Tf4g_n', symObjAddr: 0x1650, symBinAddr: 0x11C30, symSize: 0x100 } + - { offsetInCU: 0x112B, offset: 0x89C66, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvg', symObjAddr: 0x80, symBinAddr: 0x10860, symSize: 0x40 } + - { offsetInCU: 0x11A8, offset: 0x89CE3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfc', symObjAddr: 0x120, symBinAddr: 0x10900, symSize: 0x80 } + - { offsetInCU: 0x11EF, offset: 0x89D2A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0x240, symBinAddr: 0x10A20, symSize: 0xC0 } + - { offsetInCU: 0x1251, offset: 0x89D8C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x3A0, symBinAddr: 0x10B80, symSize: 0xD0 } + - { offsetInCU: 0x12DA, offset: 0x89E15, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtF', symObjAddr: 0x660, symBinAddr: 0x10D80, symSize: 0x10 } + - { offsetInCU: 0x12FB, offset: 0x89E36, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfC', symObjAddr: 0x6C0, symBinAddr: 0x10DE0, symSize: 0x90 } + - { offsetInCU: 0x130F, offset: 0x89E4A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfc', symObjAddr: 0x750, symBinAddr: 0x10E70, symSize: 0x30 } + - { offsetInCU: 0x1428, offset: 0x89F63, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VF', symObjAddr: 0x7F0, symBinAddr: 0x10F10, symSize: 0x300 } + - { offsetInCU: 0x17D2, offset: 0x8A30D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvg', symObjAddr: 0xC20, symBinAddr: 0x11340, symSize: 0x30 } + - { offsetInCU: 0x180F, offset: 0x8A34A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvs', symObjAddr: 0xC90, symBinAddr: 0x113B0, symSize: 0x40 } + - { offsetInCU: 0x1836, offset: 0x8A371, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM', symObjAddr: 0xCD0, symBinAddr: 0x113F0, symSize: 0x40 } + - { offsetInCU: 0x185B, offset: 0x8A396, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM.resume.0', symObjAddr: 0xD10, symBinAddr: 0x11430, symSize: 0x10 } + - { offsetInCU: 0x1882, offset: 0x8A3BD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfC', symObjAddr: 0xD20, symBinAddr: 0x11440, symSize: 0x20 } + - { offsetInCU: 0x1896, offset: 0x8A3D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfc', symObjAddr: 0xD40, symBinAddr: 0x11460, symSize: 0x80 } + - { offsetInCU: 0x18DD, offset: 0x8A418, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0xED0, symBinAddr: 0x115F0, symSize: 0xC0 } + - { offsetInCU: 0x193A, offset: 0x8A475, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x1030, symBinAddr: 0x11750, symSize: 0xB0 } + - { offsetInCU: 0x19D6, offset: 0x8A511, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x1270, symBinAddr: 0x11980, symSize: 0xB0 } + - { offsetInCU: 0x1AB8, offset: 0x8A5F3, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFs5UInt8V_Tg5', symObjAddr: 0x13D0, symBinAddr: 0x11A30, symSize: 0xA0 } + - { offsetInCU: 0x1BC4, offset: 0x8A6FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTf4ddn_n', symObjAddr: 0x15E0, symBinAddr: 0x11BC0, symSize: 0x70 } + - { offsetInCU: 0x1CBF, offset: 0x8A7FA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTf4dn_n', symObjAddr: 0x17F0, symBinAddr: 0x11DD0, symSize: 0x410 } + - { offsetInCU: 0x4F, offset: 0x8AC12, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LLSo012OS_dispatch_E0CvpZ', symObjAddr: 0x980, symBinAddr: 0x137A180, symSize: 0x0 } + - { offsetInCU: 0x5D, offset: 0x8AC20, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x123D0, symSize: 0x30 } + - { offsetInCU: 0x75, offset: 0x8AC38, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LL_WZ', symObjAddr: 0x30, symBinAddr: 0x12400, symSize: 0xF0 } + - { offsetInCU: 0xBC, offset: 0x8AC7F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0x130, symBinAddr: 0x12500, symSize: 0x40 } + - { offsetInCU: 0x130, offset: 0x8ACF3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTo', symObjAddr: 0x3C0, symBinAddr: 0x12790, symSize: 0x80 } + - { offsetInCU: 0x18F, offset: 0x8AD52, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfcTo', symObjAddr: 0x490, symBinAddr: 0x12860, symSize: 0x30 } + - { offsetInCU: 0x1E2, offset: 0x8ADA5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTf4nnnd_n', symObjAddr: 0x500, symBinAddr: 0x128D0, symSize: 0x200 } + - { offsetInCU: 0x261, offset: 0x8AE24, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfETo', symObjAddr: 0x4F0, symBinAddr: 0x128C0, symSize: 0x10 } + - { offsetInCU: 0x29D, offset: 0x8AE60, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCMa', symObjAddr: 0x700, symBinAddr: 0x12AD0, symSize: 0x20 } + - { offsetInCU: 0x2BC, offset: 0x8AE7F, size: 0x8, addend: 0x0, symName: '_$s10ObjectiveC8ObjCBoolVIeyBy_SbIegy_TRTA', symObjAddr: 0x740, symBinAddr: 0x12B10, symSize: 0x20 } + - { offsetInCU: 0x2E5, offset: 0x8AEA8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_TA', symObjAddr: 0x790, symBinAddr: 0x12B60, symSize: 0x20 } + - { offsetInCU: 0x2F9, offset: 0x8AEBC, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x7B0, symBinAddr: 0x12B80, symSize: 0x20 } + - { offsetInCU: 0x30D, offset: 0x8AED0, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x7D0, symBinAddr: 0x12BA0, symSize: 0x10 } + - { offsetInCU: 0x321, offset: 0x8AEE4, size: 0x8, addend: 0x0, symName: '_$sSay8Dispatch0A13WorkItemFlagsVGMa', symObjAddr: 0x850, symBinAddr: 0x12BE0, symSize: 0x50 } + - { offsetInCU: 0x335, offset: 0x8AEF8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0x8D0, symBinAddr: 0x12C30, symSize: 0x20 } + - { offsetInCU: 0x369, offset: 0x8AF2C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU_TA', symObjAddr: 0x910, symBinAddr: 0x12C70, symSize: 0x20 } + - { offsetInCU: 0x4FE, offset: 0x8B0C1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x120, symBinAddr: 0x124F0, symSize: 0x10 } + - { offsetInCU: 0x58B, offset: 0x8B14E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZ', symObjAddr: 0x170, symBinAddr: 0x12540, symSize: 0x10 } + - { offsetInCU: 0x59F, offset: 0x8B162, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_', symObjAddr: 0x180, symBinAddr: 0x12550, symSize: 0x240 } + - { offsetInCU: 0x678, offset: 0x8B23B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfC', symObjAddr: 0x440, symBinAddr: 0x12810, symSize: 0x20 } + - { offsetInCU: 0x68C, offset: 0x8B24F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfc', symObjAddr: 0x460, symBinAddr: 0x12830, symSize: 0x30 } + - { offsetInCU: 0x6C2, offset: 0x8B285, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfD', symObjAddr: 0x4C0, symBinAddr: 0x12890, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0x8B32B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x12CE0, symSize: 0x20 } + - { offsetInCU: 0x77, offset: 0x8B37B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfcTo', symObjAddr: 0x70, symBinAddr: 0x12D50, symSize: 0x30 } + - { offsetInCU: 0xCB, offset: 0x8B3CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCMa', symObjAddr: 0x50, symBinAddr: 0x12D30, symSize: 0x20 } + - { offsetInCU: 0x216, offset: 0x8B51A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x12CE0, symSize: 0x20 } + - { offsetInCU: 0x22A, offset: 0x8B52E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfc', symObjAddr: 0x20, symBinAddr: 0x12D00, symSize: 0x30 } + - { offsetInCU: 0x266, offset: 0x8B56A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCfD', symObjAddr: 0xA0, symBinAddr: 0x12D80, symSize: 0x2B } + - { offsetInCU: 0x26, offset: 0x8B5B3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x3D6F80, symSize: 0x3990 } + - { offsetInCU: 0x40, offset: 0x8B5CD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0xEEC0, symBinAddr: 0xB729F0, symSize: 0x0 } + - { offsetInCU: 0x92, offset: 0x8B61F, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0x14EC0, symBinAddr: 0xB789F0, symSize: 0x0 } + - { offsetInCU: 0xF6, offset: 0x8B683, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0x14EE8, symBinAddr: 0xB78A18, symSize: 0x0 } + - { offsetInCU: 0x10C, offset: 0x8B699, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x152F0, symBinAddr: 0xB78E20, symSize: 0x0 } + - { offsetInCU: 0x123, offset: 0x8B6B0, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0x14F30, symBinAddr: 0xB78A60, symSize: 0x0 } + - { offsetInCU: 0xE22, offset: 0x8C3AF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x3D6F80, symSize: 0x3990 } + - { offsetInCU: 0x4DAE, offset: 0x9033B, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0xE6E0, symBinAddr: 0x3E5660, symSize: 0x3E0 } + - { offsetInCU: 0x4FF1, offset: 0x9057E, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x7C20, symBinAddr: 0x3DEBA0, symSize: 0x270 } + - { offsetInCU: 0x582C, offset: 0x90DB9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x3990, symBinAddr: 0x3DA910, symSize: 0xA10 } + - { offsetInCU: 0x684B, offset: 0x91DD8, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x43A0, symBinAddr: 0x3DB320, symSize: 0xA10 } + - { offsetInCU: 0x6EE9, offset: 0x92476, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x4DB0, symBinAddr: 0x3DBD30, symSize: 0x2B0 } + - { offsetInCU: 0x74BC, offset: 0x92A49, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x5060, symBinAddr: 0x3DBFE0, symSize: 0xCD0 } + - { offsetInCU: 0x83FE, offset: 0x9398B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x5D30, symBinAddr: 0x3DCCB0, symSize: 0xB40 } + - { offsetInCU: 0x8F67, offset: 0x944F4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x6870, symBinAddr: 0x3DD7F0, symSize: 0x13B0 } + - { offsetInCU: 0xA567, offset: 0x95AF4, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x7FF0, symBinAddr: 0x3DEF70, symSize: 0x2A30 } + - { offsetInCU: 0xDC6D, offset: 0x991FA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x7E90, symBinAddr: 0x3DEE10, symSize: 0x160 } + - { offsetInCU: 0xDEE7, offset: 0x99474, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0xAA20, symBinAddr: 0x3E19A0, symSize: 0x30 } + - { offsetInCU: 0xDFDC, offset: 0x99569, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0xAA50, symBinAddr: 0x3E19D0, symSize: 0x50 } + - { offsetInCU: 0xE051, offset: 0x995DE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0xAAA0, symBinAddr: 0x3E1A20, symSize: 0x10 } + - { offsetInCU: 0xE0EC, offset: 0x99679, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0xAAB0, symBinAddr: 0x3E1A30, symSize: 0xB0 } + - { offsetInCU: 0xE217, offset: 0x997A4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0xAB60, symBinAddr: 0x3E1AE0, symSize: 0x10 } + - { offsetInCU: 0xE4E9, offset: 0x99A76, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0xAB70, symBinAddr: 0x3E1AF0, symSize: 0x21A0 } + - { offsetInCU: 0x1118F, offset: 0x9C71C, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0xEAC0, symBinAddr: 0x3E5A40, symSize: 0x2D1 } + - { offsetInCU: 0x117CF, offset: 0x9CD5C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0xCD10, symBinAddr: 0x3E3C90, symSize: 0x20 } + - { offsetInCU: 0x11C6C, offset: 0x9D1F9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0xCD30, symBinAddr: 0x3E3CB0, symSize: 0x19B0 } + - { offsetInCU: 0x26, offset: 0x9E2A9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x3E5D20, symSize: 0x800 } + - { offsetInCU: 0x41, offset: 0x9E2C4, size: 0x8, addend: 0x0, symName: _aes_nohw_rcon, symObjAddr: 0x1B10, symBinAddr: 0xB78F00, symSize: 0x0 } + - { offsetInCU: 0x484, offset: 0x9E707, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x3E5D20, symSize: 0x800 } + - { offsetInCU: 0x1B2B, offset: 0x9FDAE, size: 0x8, addend: 0x0, symName: _aes_nohw_sub_bytes, symObjAddr: 0x15F0, symBinAddr: 0x3E7310, symSize: 0x300 } + - { offsetInCU: 0x32EE, offset: 0xA1571, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_encrypt, symObjAddr: 0x800, symBinAddr: 0x3E6520, symSize: 0x80 } + - { offsetInCU: 0x33DC, offset: 0xA165F, size: 0x8, addend: 0x0, symName: _aes_nohw_expand_round_keys, symObjAddr: 0x880, symBinAddr: 0x3E65A0, symSize: 0x1A0 } + - { offsetInCU: 0x386D, offset: 0xA1AF0, size: 0x8, addend: 0x0, symName: _aes_nohw_to_batch, symObjAddr: 0xA20, symBinAddr: 0x3E6740, symSize: 0x420 } + - { offsetInCU: 0x3D7D, offset: 0xA2000, size: 0x8, addend: 0x0, symName: _aes_nohw_encrypt_batch, symObjAddr: 0xE40, symBinAddr: 0x3E6B60, symSize: 0x380 } + - { offsetInCU: 0x424C, offset: 0xA24CF, size: 0x8, addend: 0x0, symName: _aes_nohw_from_batch, symObjAddr: 0x11C0, symBinAddr: 0x3E6EE0, symSize: 0x250 } + - { offsetInCU: 0x498D, offset: 0xA2C10, size: 0x8, addend: 0x0, symName: _aes_nohw_shift_rows, symObjAddr: 0x18F0, symBinAddr: 0x3E7610, symSize: 0x149 } + - { offsetInCU: 0x4BF9, offset: 0xA2E7C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_ctr32_encrypt_blocks, symObjAddr: 0x1410, symBinAddr: 0x3E7130, symSize: 0x1E0 } + - { offsetInCU: 0x26, offset: 0xA329D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x3E7760, symSize: 0x2DC } + - { offsetInCU: 0x1D2, offset: 0xA3449, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x3E7760, symSize: 0x2DC } + - { offsetInCU: 0x26, offset: 0xA36A2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x3E7A40, symSize: 0x87 } + - { offsetInCU: 0x34, offset: 0xA36B0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x3E7A40, symSize: 0x87 } + - { offsetInCU: 0x26, offset: 0xA37C0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x3E7AD0, symSize: 0x46 } + - { offsetInCU: 0x34, offset: 0xA37CE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x3E7AD0, symSize: 0x46 } + - { offsetInCU: 0x86, offset: 0xA3931, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x15F0, symBinAddr: 0xB78F80, symSize: 0x0 } + - { offsetInCU: 0xB8, offset: 0xA3963, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1580, symBinAddr: 0xB78F10, symSize: 0x0 } + - { offsetInCU: 0xDA, offset: 0xA3985, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x15B0, symBinAddr: 0xB78F40, symSize: 0x0 } + - { offsetInCU: 0xF0, offset: 0xA399B, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x15E0, symBinAddr: 0xB78F70, symSize: 0x0 } + - { offsetInCU: 0x3B7, offset: 0xA3C62, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x150, symBinAddr: 0x3E7B20, symSize: 0x20 } + - { offsetInCU: 0x594, offset: 0xA3E3F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x250, symBinAddr: 0x3E7B40, symSize: 0x20 } + - { offsetInCU: 0x63F, offset: 0xA3EEA, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x340, symBinAddr: 0x3E7B60, symSize: 0x3A0 } + - { offsetInCU: 0x11A7, offset: 0xA4A52, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x6E0, symBinAddr: 0x3E7F00, symSize: 0x140 } + - { offsetInCU: 0x14A2, offset: 0xA4D4D, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x820, symBinAddr: 0x3E8040, symSize: 0x6B0 } + - { offsetInCU: 0x26DA, offset: 0xA5F85, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xED0, symBinAddr: 0x3E86F0, symSize: 0x380 } + - { offsetInCU: 0x2D37, offset: 0xA65E2, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0x1250, symBinAddr: 0x3E8A70, symSize: 0x170 } + - { offsetInCU: 0x2F2F, offset: 0xA67DA, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0x13C0, symBinAddr: 0x3E8BE0, symSize: 0x1BF } + - { offsetInCU: 0x26, offset: 0xA6B25, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x3E8DA0, symSize: 0x50 } + - { offsetInCU: 0xFA, offset: 0xA6BF9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x3E8DA0, symSize: 0x50 } + - { offsetInCU: 0x18D, offset: 0xA6C8C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x50, symBinAddr: 0x3E8DF0, symSize: 0x60 } + - { offsetInCU: 0x2F1, offset: 0xA6DF0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0xB0, symBinAddr: 0x3E8E50, symSize: 0x90 } + - { offsetInCU: 0x4C6, offset: 0xA6FC5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0x140, symBinAddr: 0x3E8EE0, symSize: 0x20 } + - { offsetInCU: 0x5E3, offset: 0xA70E2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0x160, symBinAddr: 0x3E8F00, symSize: 0xB0 } + - { offsetInCU: 0x696, offset: 0xA7195, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x210, symBinAddr: 0x3E8FB0, symSize: 0x70 } + - { offsetInCU: 0x861, offset: 0xA7360, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x280, symBinAddr: 0x3E9020, symSize: 0x170 } + - { offsetInCU: 0xB67, offset: 0xA7666, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x3F0, symBinAddr: 0x3E9190, symSize: 0x270 } + - { offsetInCU: 0xE6A, offset: 0xA7969, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x660, symBinAddr: 0x3E9400, symSize: 0x1A0 } + - { offsetInCU: 0x105D, offset: 0xA7B5C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x800, symBinAddr: 0x3E95A0, symSize: 0x280 } + - { offsetInCU: 0x128C, offset: 0xA7D8B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0xC20, symBinAddr: 0x3E9820, symSize: 0x20 } + - { offsetInCU: 0x12F3, offset: 0xA7DF2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0xC40, symBinAddr: 0x3E9840, symSize: 0x20 } + - { offsetInCU: 0x132A, offset: 0xA7E29, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0xC60, symBinAddr: 0x3E9860, symSize: 0x10 } + - { offsetInCU: 0x13AC, offset: 0xA7EAB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0xC70, symBinAddr: 0x3E9870, symSize: 0x4A } + - { offsetInCU: 0x26, offset: 0xA8037, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x3E98C0, symSize: 0x129 } + - { offsetInCU: 0x34, offset: 0xA8045, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x3E98C0, symSize: 0x129 } + - { offsetInCU: 0x34, offset: 0xA8147, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_ia32cap_P, symObjAddr: 0x3F0, symBinAddr: 0x1381500, symSize: 0x0 } + - { offsetInCU: 0x26, offset: 0xA819C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0x3E99F0, symSize: 0xF8 } + - { offsetInCU: 0xD5, offset: 0xA824B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0x3E99F0, symSize: 0xF8 } + - { offsetInCU: 0x26, offset: 0xA83A0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0x3E9AF0, symSize: 0x1210 } + - { offsetInCU: 0x92E, offset: 0xA8CA8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0x3E9AF0, symSize: 0x1210 } + - { offsetInCU: 0x5347, offset: 0xAD6C1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base_adx, symObjAddr: 0x1210, symBinAddr: 0x3EAD00, symSize: 0x1E50 } + - { offsetInCU: 0x9B2F, offset: 0xB1EA9, size: 0x8, addend: 0x0, symName: _inline_x25519_ge_dbl_4, symObjAddr: 0x3060, symBinAddr: 0x3ECB50, symSize: 0x361 } + - { offsetInCU: 0x26, offset: 0xB3296, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0x3ECEC0, symSize: 0xD0 } + - { offsetInCU: 0x303, offset: 0xB3573, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0x3ECEC0, symSize: 0xD0 } + - { offsetInCU: 0x5A4, offset: 0xB3814, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_update, symObjAddr: 0xD0, symBinAddr: 0x3ECF90, symSize: 0x1C0 } + - { offsetInCU: 0x764, offset: 0xB39D4, size: 0x8, addend: 0x0, symName: _poly1305_blocks, symObjAddr: 0x5F0, symBinAddr: 0x3ED4B0, symSize: 0x780 } + - { offsetInCU: 0x903, offset: 0xB3B73, size: 0x8, addend: 0x0, symName: _poly1305_first_block, symObjAddr: 0x290, symBinAddr: 0x3ED150, symSize: 0x360 } + - { offsetInCU: 0xEFC, offset: 0xB416C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_finish, symObjAddr: 0xD70, symBinAddr: 0x3EDC30, symSize: 0xAA2 } + - { offsetInCU: 0x10, offset: 0xB48F5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0x3EE6D2, symSize: 0x2AF } + - { offsetInCU: 0x51, offset: 0xB4936, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0x3EE6D2, symSize: 0x2AF } + - { offsetInCU: 0x10, offset: 0xB492B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0x3EE981, symSize: 0x1F4 } + - { offsetInCU: 0x54, offset: 0xB496F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0x3EE981, symSize: 0x1F4 } + - { offsetInCU: 0x26, offset: 0xB4977, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x3EEB80, symSize: 0x490 } + - { offsetInCU: 0x76, offset: 0xB49C7, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0xB7A000, symSize: 0x0 } + - { offsetInCU: 0xFA, offset: 0xB4A4B, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0xB9F000, symSize: 0x0 } + - { offsetInCU: 0x35B, offset: 0xB4CAC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x3EEB80, symSize: 0x490 } + - { offsetInCU: 0xC5A, offset: 0xB55AB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x490, symBinAddr: 0x3EF010, symSize: 0x300 } + - { offsetInCU: 0x1135, offset: 0xB5A86, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x790, symBinAddr: 0x3EF310, symSize: 0x25D } + - { offsetInCU: 0x10, offset: 0xB5E4B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x3EF580, symSize: 0x3A0 } + - { offsetInCU: 0x48, offset: 0xB5E83, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x3EF580, symSize: 0x3A0 } + - { offsetInCU: 0x4D, offset: 0xB5E88, size: 0x8, addend: 0x0, symName: ChaCha20_ssse3, symObjAddr: 0x3A0, symBinAddr: 0x3EF920, symSize: 0x220 } + - { offsetInCU: 0x60, offset: 0xB5E9B, size: 0x8, addend: 0x0, symName: ChaCha20_4x, symObjAddr: 0x5C0, symBinAddr: 0x3EFB40, symSize: 0xA20 } + - { offsetInCU: 0x76, offset: 0xB5EB1, size: 0x8, addend: 0x0, symName: ChaCha20_8x, symObjAddr: 0xFE0, symBinAddr: 0x3F0560, symSize: 0xB4C } + - { offsetInCU: 0x10, offset: 0xB5EC3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0x3F10C0, symSize: 0x40 } + - { offsetInCU: 0x48, offset: 0xB5EFB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0x3F10C0, symSize: 0x40 } + - { offsetInCU: 0x4D, offset: 0xB5F00, size: 0x8, addend: 0x0, symName: _aesni_encrypt2, symObjAddr: 0x40, symBinAddr: 0x3F1100, symSize: 0x60 } + - { offsetInCU: 0x63, offset: 0xB5F16, size: 0x8, addend: 0x0, symName: _aesni_encrypt3, symObjAddr: 0xA0, symBinAddr: 0x3F1160, symSize: 0x70 } + - { offsetInCU: 0x79, offset: 0xB5F2C, size: 0x8, addend: 0x0, symName: _aesni_encrypt4, symObjAddr: 0x110, symBinAddr: 0x3F11D0, symSize: 0x90 } + - { offsetInCU: 0x8F, offset: 0xB5F42, size: 0x8, addend: 0x0, symName: _aesni_encrypt6, symObjAddr: 0x1A0, symBinAddr: 0x3F1260, symSize: 0xE0 } + - { offsetInCU: 0xA5, offset: 0xB5F58, size: 0x8, addend: 0x0, symName: _aesni_encrypt8, symObjAddr: 0x280, symBinAddr: 0x3F1340, symSize: 0x110 } + - { offsetInCU: 0xD9, offset: 0xB5F8C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x390, symBinAddr: 0x3F1450, symSize: 0x940 } + - { offsetInCU: 0xEA, offset: 0xB5F9D, size: 0x8, addend: 0x0, symName: __aesni_set_encrypt_key, symObjAddr: 0xCD0, symBinAddr: 0x3F1D90, symSize: 0x44D } + - { offsetInCU: 0x10, offset: 0xB5F93, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0x3F21E0, symSize: 0x160 } + - { offsetInCU: 0x3B, offset: 0xB5FBE, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0x3F21E0, symSize: 0x160 } + - { offsetInCU: 0x54, offset: 0xB5FD7, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core_2x, symObjAddr: 0x160, symBinAddr: 0x3F2340, symSize: 0x290 } + - { offsetInCU: 0x68, offset: 0xB5FEB, size: 0x8, addend: 0x0, symName: _vpaes_schedule_core, symObjAddr: 0x3F0, symBinAddr: 0x3F25D0, symSize: 0xF0 } + - { offsetInCU: 0x7F, offset: 0xB6002, size: 0x8, addend: 0x0, symName: _vpaes_schedule_round, symObjAddr: 0x4E0, symBinAddr: 0x3F26C0, symSize: 0x21 } + - { offsetInCU: 0x99, offset: 0xB601C, size: 0x8, addend: 0x0, symName: _vpaes_schedule_low_round, symObjAddr: 0x501, symBinAddr: 0x3F26E1, symSize: 0x9F } + - { offsetInCU: 0xAF, offset: 0xB6032, size: 0x8, addend: 0x0, symName: _vpaes_schedule_transform, symObjAddr: 0x5A0, symBinAddr: 0x3F2780, symSize: 0x30 } + - { offsetInCU: 0xC2, offset: 0xB6045, size: 0x8, addend: 0x0, symName: _vpaes_schedule_mangle, symObjAddr: 0x5D0, symBinAddr: 0x3F27B0, symSize: 0x50 } + - { offsetInCU: 0xE9, offset: 0xB606C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_set_encrypt_key, symObjAddr: 0x620, symBinAddr: 0x3F2800, symSize: 0x30 } + - { offsetInCU: 0xF7, offset: 0xB607A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_encrypt, symObjAddr: 0x650, symBinAddr: 0x3F2830, symSize: 0x20 } + - { offsetInCU: 0x11A, offset: 0xB609D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_ctr32_encrypt_blocks, symObjAddr: 0x670, symBinAddr: 0x3F2850, symSize: 0xD0 } + - { offsetInCU: 0x112, offset: 0xB6095, size: 0x8, addend: 0x0, symName: _vpaes_preheat, symObjAddr: 0x740, symBinAddr: 0x3F2920, symSize: 0x31 } + - { offsetInCU: 0x10, offset: 0xB60A5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x3F2960, symSize: 0x2A0 } + - { offsetInCU: 0x45, offset: 0xB60DA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x3F2960, symSize: 0x2A0 } + - { offsetInCU: 0x4C, offset: 0xB60E1, size: 0x8, addend: 0x0, symName: bn_mul4x_mont, symObjAddr: 0x2A0, symBinAddr: 0x3F2C00, symSize: 0x560 } + - { offsetInCU: 0x62, offset: 0xB60F7, size: 0x8, addend: 0x0, symName: bn_sqr8x_mont, symObjAddr: 0x800, symBinAddr: 0x3F3160, symSize: 0x220 } + - { offsetInCU: 0x79, offset: 0xB610E, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont, symObjAddr: 0xA20, symBinAddr: 0x3F3380, symSize: 0x570 } + - { offsetInCU: 0x10, offset: 0xB611D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0x3F3900, symSize: 0x660 } + - { offsetInCU: 0x4D, offset: 0xB615A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0x3F3900, symSize: 0x660 } + - { offsetInCU: 0x54, offset: 0xB6161, size: 0x8, addend: 0x0, symName: bn_mul4x_mont_gather5, symObjAddr: 0x660, symBinAddr: 0x3F3F60, symSize: 0x100 } + - { offsetInCU: 0x63, offset: 0xB6170, size: 0x8, addend: 0x0, symName: mul4x_internal, symObjAddr: 0x760, symBinAddr: 0x3F4060, symSize: 0x7E0 } + - { offsetInCU: 0x85, offset: 0xB6192, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_power5, symObjAddr: 0xF40, symBinAddr: 0x3F4840, symSize: 0x180 } + - { offsetInCU: 0xA3, offset: 0xB61B0, size: 0x8, addend: 0x0, symName: __bn_sqr8x_internal, symObjAddr: 0x10C0, symBinAddr: 0x3F49C0, symSize: 0x579 } + - { offsetInCU: 0xAA, offset: 0xB61B7, size: 0x8, addend: 0x0, symName: __bn_sqr8x_reduction, symObjAddr: 0x1639, symBinAddr: 0x3F4F39, symSize: 0x347 } + - { offsetInCU: 0xC0, offset: 0xB61CD, size: 0x8, addend: 0x0, symName: __bn_post4x_internal, symObjAddr: 0x1980, symBinAddr: 0x3F5280, symSize: 0xA0 } + - { offsetInCU: 0xD9, offset: 0xB61E6, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont_gather5, symObjAddr: 0x1A20, symBinAddr: 0x3F5320, symSize: 0xE0 } + - { offsetInCU: 0xE8, offset: 0xB61F5, size: 0x8, addend: 0x0, symName: mulx4x_internal, symObjAddr: 0x1B00, symBinAddr: 0x3F5400, symSize: 0x7E0 } + - { offsetInCU: 0xF9, offset: 0xB6206, size: 0x8, addend: 0x0, symName: bn_powerx5, symObjAddr: 0x22E0, symBinAddr: 0x3F5BE0, symSize: 0x160 } + - { offsetInCU: 0x128, offset: 0xB6235, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_internal, symObjAddr: 0x2440, symBinAddr: 0x3F5D40, symSize: 0x637 } + - { offsetInCU: 0x12F, offset: 0xB623C, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_reduction, symObjAddr: 0x2A77, symBinAddr: 0x3F6377, symSize: 0x329 } + - { offsetInCU: 0x145, offset: 0xB6252, size: 0x8, addend: 0x0, symName: __bn_postx4x_internal, symObjAddr: 0x2DA0, symBinAddr: 0x3F66A0, symSize: 0x90 } + - { offsetInCU: 0x163, offset: 0xB6270, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_scatter5, symObjAddr: 0x2E30, symBinAddr: 0x3F6730, symSize: 0x30 } + - { offsetInCU: 0x178, offset: 0xB6285, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_gather5, symObjAddr: 0x2E60, symBinAddr: 0x3F6760, symSize: 0x27F } + - { offsetInCU: 0x10, offset: 0xB6287, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0x3F69E0, symSize: 0x80 } + - { offsetInCU: 0x4A, offset: 0xB62C1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0x3F69E0, symSize: 0x80 } + - { offsetInCU: 0x64, offset: 0xB62DB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0x80, symBinAddr: 0x3F6A60, symSize: 0x360 } + - { offsetInCU: 0x7E, offset: 0xB62F5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x3E0, symBinAddr: 0x3F6DC0, symSize: 0x300 } + - { offsetInCU: 0x85, offset: 0xB62FC, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_mul_montx, symObjAddr: 0x6E0, symBinAddr: 0x3F70C0, symSize: 0x3C0 } + - { offsetInCU: 0x9B, offset: 0xB6312, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_sqr_montx, symObjAddr: 0xAA0, symBinAddr: 0x3F7480, symSize: 0x320 } + - { offsetInCU: 0xB5, offset: 0xB632C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0xDC0, symBinAddr: 0x3F77A0, symSize: 0xA0 } + - { offsetInCU: 0xC4, offset: 0xB633B, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montq, symObjAddr: 0xE60, symBinAddr: 0x3F7840, symSize: 0x240 } + - { offsetInCU: 0xE1, offset: 0xB6358, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x10A0, symBinAddr: 0x3F7A80, symSize: 0x80 } + - { offsetInCU: 0xF0, offset: 0xB6367, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montq, symObjAddr: 0x1120, symBinAddr: 0x3F7B00, symSize: 0x1A0 } + - { offsetInCU: 0x106, offset: 0xB637D, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montx, symObjAddr: 0x12C0, symBinAddr: 0x3F7CA0, symSize: 0x260 } + - { offsetInCU: 0x11C, offset: 0xB6393, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montx, symObjAddr: 0x1520, symBinAddr: 0x3F7F00, symSize: 0x1C0 } + - { offsetInCU: 0x142, offset: 0xB63B9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x16E0, symBinAddr: 0x3F80C0, symSize: 0xE0 } + - { offsetInCU: 0x158, offset: 0xB63CF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x17C0, symBinAddr: 0x3F81A0, symSize: 0xC0 } + - { offsetInCU: 0x162, offset: 0xB63D9, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w5, symObjAddr: 0x1880, symBinAddr: 0x3F8260, symSize: 0xC0 } + - { offsetInCU: 0x178, offset: 0xB63EF, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w7, symObjAddr: 0x1940, symBinAddr: 0x3F8320, symSize: 0xE0 } + - { offsetInCU: 0x188, offset: 0xB63FF, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_toq, symObjAddr: 0x1A20, symBinAddr: 0x3F8400, symSize: 0x60 } + - { offsetInCU: 0x1A0, offset: 0xB6417, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromq, symObjAddr: 0x1A80, symBinAddr: 0x3F8460, symSize: 0x60 } + - { offsetInCU: 0x1B1, offset: 0xB6428, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subq, symObjAddr: 0x1AE0, symBinAddr: 0x3F84C0, symSize: 0x40 } + - { offsetInCU: 0x1CC, offset: 0xB6443, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2q, symObjAddr: 0x1B20, symBinAddr: 0x3F8500, symSize: 0x60 } + - { offsetInCU: 0x1ED, offset: 0xB6464, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x1B80, symBinAddr: 0x3F8560, symSize: 0x320 } + - { offsetInCU: 0x200, offset: 0xB6477, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x1EA0, symBinAddr: 0x3F8880, symSize: 0x780 } + - { offsetInCU: 0x21D, offset: 0xB6494, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0x2620, symBinAddr: 0x3F9000, symSize: 0x580 } + - { offsetInCU: 0x222, offset: 0xB6499, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_tox, symObjAddr: 0x2BA0, symBinAddr: 0x3F9580, symSize: 0x60 } + - { offsetInCU: 0x23A, offset: 0xB64B1, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromx, symObjAddr: 0x2C00, symBinAddr: 0x3F95E0, symSize: 0x60 } + - { offsetInCU: 0x24B, offset: 0xB64C2, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subx, symObjAddr: 0x2C60, symBinAddr: 0x3F9640, symSize: 0x60 } + - { offsetInCU: 0x266, offset: 0xB64DD, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2x, symObjAddr: 0x2CC0, symBinAddr: 0x3F96A0, symSize: 0x60 } + - { offsetInCU: 0x27F, offset: 0xB64F6, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_doublex, symObjAddr: 0x2D20, symBinAddr: 0x3F9700, symSize: 0x320 } + - { offsetInCU: 0x292, offset: 0xB6509, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_addx, symObjAddr: 0x3040, symBinAddr: 0x3F9A20, symSize: 0x760 } + - { offsetInCU: 0x2AF, offset: 0xB6526, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_add_affinex, symObjAddr: 0x37A0, symBinAddr: 0x3FA180, symSize: 0x555 } + - { offsetInCU: 0x10, offset: 0xB6525, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0x3FA6E0, symSize: 0x5A0 } + - { offsetInCU: 0x3D, offset: 0xB6552, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0x3FA6E0, symSize: 0x5A0 } + - { offsetInCU: 0x61, offset: 0xB6576, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_decrypt, symObjAddr: 0x5A0, symBinAddr: 0x3FAC80, symSize: 0x140 } + - { offsetInCU: 0x63, offset: 0xB6578, size: 0x8, addend: 0x0, symName: _aesni_ctr32_6x, symObjAddr: 0x6E0, symBinAddr: 0x3FADC0, symSize: 0x180 } + - { offsetInCU: 0x8D, offset: 0xB65A2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_encrypt, symObjAddr: 0x860, symBinAddr: 0x3FAF40, symSize: 0x423 } + - { offsetInCU: 0x10, offset: 0xB659D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x3FB380, symSize: 0x260 } + - { offsetInCU: 0x48, offset: 0xB65D5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x3FB380, symSize: 0x260 } + - { offsetInCU: 0x5F, offset: 0xB65EC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x260, symBinAddr: 0x3FB5E0, symSize: 0xC0 } + - { offsetInCU: 0x75, offset: 0xB6602, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x320, symBinAddr: 0x3FB6A0, symSize: 0x660 } + - { offsetInCU: 0x88, offset: 0xB6615, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_avx, symObjAddr: 0x980, symBinAddr: 0x3FBD00, symSize: 0x1A0 } + - { offsetInCU: 0x9F, offset: 0xB662C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_avx, symObjAddr: 0xB20, symBinAddr: 0x3FBEA0, symSize: 0x697 } + - { offsetInCU: 0x10, offset: 0xB662B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x3FC540, symSize: 0x1240 } + - { offsetInCU: 0x51, offset: 0xB666C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x3FC540, symSize: 0x1240 } + - { offsetInCU: 0x5A, offset: 0xB6675, size: 0x8, addend: 0x0, symName: sha512_block_data_order_avx, symObjAddr: 0x1240, symBinAddr: 0x3FD780, symSize: 0x1176 } + - { offsetInCU: 0x10, offset: 0xB6677, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0x3FE900, symSize: 0x200 } + - { offsetInCU: 0x44, offset: 0xB66AB, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0x3FE900, symSize: 0x200 } + - { offsetInCU: 0x66, offset: 0xB66CD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x200, symBinAddr: 0x3FEB00, symSize: 0x21C0 } + - { offsetInCU: 0x7C, offset: 0xB66E3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x23C0, symBinAddr: 0x400CC0, symSize: 0x1D2D } + - { offsetInCU: 0x83, offset: 0xB66EA, size: 0x8, addend: 0x0, symName: process_extra_in_trailer, symObjAddr: 0x40ED, symBinAddr: 0x4029ED, symSize: 0x553 } + - { offsetInCU: 0x9C, offset: 0xB6703, size: 0x8, addend: 0x0, symName: chacha20_poly1305_open_avx2, symObjAddr: 0x4640, symBinAddr: 0x402F40, symSize: 0x25C0 } + - { offsetInCU: 0xB2, offset: 0xB6719, size: 0x8, addend: 0x0, symName: chacha20_poly1305_seal_avx2, symObjAddr: 0x6C00, symBinAddr: 0x405500, symSize: 0x2F01 } + - { offsetInCU: 0x10, offset: 0xB671B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x408440, symSize: 0x1200 } + - { offsetInCU: 0x51, offset: 0xB675C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x408440, symSize: 0x1200 } + - { offsetInCU: 0x5D, offset: 0xB6768, size: 0x8, addend: 0x0, symName: sha256_block_data_order_shaext, symObjAddr: 0x1200, symBinAddr: 0x409640, symSize: 0x340 } + - { offsetInCU: 0x72, offset: 0xB677D, size: 0x8, addend: 0x0, symName: sha256_block_data_order_ssse3, symObjAddr: 0x1540, symBinAddr: 0x409980, symSize: 0xEC0 } + - { offsetInCU: 0x86, offset: 0xB6791, size: 0x8, addend: 0x0, symName: sha256_block_data_order_avx, symObjAddr: 0x2400, symBinAddr: 0x40A840, symSize: 0xEF7 } ... diff --git a/tools/assets/App_Resources/iOS/Info.plist b/tools/assets/App_Resources/iOS/Info.plist index 213ef2c90..c2c065700 100644 --- a/tools/assets/App_Resources/iOS/Info.plist +++ b/tools/assets/App_Resources/iOS/Info.plist @@ -43,6 +43,7 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + CADisableMinimumFrameDurationOnPhone ITSAppUsesNonExemptEncryption NSAppTransportSecurity diff --git a/tools/demo/canvas/assets/webgpu/Di-3d.png b/tools/demo/canvas/assets/webgpu/Di-3d.png new file mode 100644 index 000000000..ebbff45ea Binary files /dev/null and b/tools/demo/canvas/assets/webgpu/Di-3d.png differ diff --git a/tools/demo/canvas/assets/webgpu/cubemap/credit.txt b/tools/demo/canvas/assets/webgpu/cubemap/credit.txt new file mode 100644 index 000000000..de98f1c6b --- /dev/null +++ b/tools/demo/canvas/assets/webgpu/cubemap/credit.txt @@ -0,0 +1 @@ +Cubemap image available under a Creative Commons Attribution 3.0 Unported License at https://www.humus.name/index.php?page=Textures&ID=58 diff --git a/tools/demo/canvas/assets/webgpu/cubemap/negx.jpg b/tools/demo/canvas/assets/webgpu/cubemap/negx.jpg new file mode 100644 index 000000000..992fde512 Binary files /dev/null and b/tools/demo/canvas/assets/webgpu/cubemap/negx.jpg differ diff --git a/tools/demo/canvas/assets/webgpu/cubemap/negy.jpg b/tools/demo/canvas/assets/webgpu/cubemap/negy.jpg new file mode 100644 index 000000000..a51a38dc7 Binary files /dev/null and b/tools/demo/canvas/assets/webgpu/cubemap/negy.jpg differ diff --git a/tools/demo/canvas/assets/webgpu/cubemap/negz.jpg b/tools/demo/canvas/assets/webgpu/cubemap/negz.jpg new file mode 100644 index 000000000..c463f0d5b Binary files /dev/null and b/tools/demo/canvas/assets/webgpu/cubemap/negz.jpg differ diff --git a/tools/demo/canvas/assets/webgpu/cubemap/posx.jpg b/tools/demo/canvas/assets/webgpu/cubemap/posx.jpg new file mode 100644 index 000000000..106d3a68f Binary files /dev/null and b/tools/demo/canvas/assets/webgpu/cubemap/posx.jpg differ diff --git a/tools/demo/canvas/assets/webgpu/cubemap/posy.jpg b/tools/demo/canvas/assets/webgpu/cubemap/posy.jpg new file mode 100644 index 000000000..1ea42cd20 Binary files /dev/null and b/tools/demo/canvas/assets/webgpu/cubemap/posy.jpg differ diff --git a/tools/demo/canvas/assets/webgpu/cubemap/posz.jpg b/tools/demo/canvas/assets/webgpu/cubemap/posz.jpg new file mode 100644 index 000000000..69463d06a Binary files /dev/null and b/tools/demo/canvas/assets/webgpu/cubemap/posz.jpg differ diff --git a/tools/demo/canvas/assets/webgpu/cubemap/readme.txt b/tools/demo/canvas/assets/webgpu/cubemap/readme.txt new file mode 100644 index 000000000..0ce9e3d25 --- /dev/null +++ b/tools/demo/canvas/assets/webgpu/cubemap/readme.txt @@ -0,0 +1,20 @@ +Author +====== + +This is the work of Emil Persson, aka Humus. +http://www.humus.name +humus@comhem.se + + + +Legal stuff +=========== + +This work is free and may be used by anyone for any purpose +and may be distributed freely to anyone using any distribution +media or distribution method as long as this file is included. +Distribution without this file is allowed if it's distributed +with free non-commercial software; however, fair credit of the +original author is expected. +Any commercial distribution of this software requires the written +approval of Emil Persson. diff --git a/tools/demo/canvas/assets/webgpu/webgpu.png b/tools/demo/canvas/assets/webgpu/webgpu.png new file mode 100644 index 000000000..a44b73ead Binary files /dev/null and b/tools/demo/canvas/assets/webgpu/webgpu.png differ diff --git a/tools/demo/canvas/index.ts b/tools/demo/canvas/index.ts index 3b07215f2..1f614177b 100644 --- a/tools/demo/canvas/index.ts +++ b/tools/demo/canvas/index.ts @@ -457,28 +457,8 @@ export class DemoSharedCanvas extends DemoSharedBase { } async webgpuTriangle() { - if (navigator.gpu) { - const adapter = await navigator.gpu.requestAdapter(); - const device = await adapter.requestDevice(); - - // device.addEventListener("uncapturederror", (event: any) => { - // // Re-surface the error - // console.error("A WebGPU error was not captured:", event.error.message); - // }); - - const context = this.canvas.getContext('webgpu') as GPUCanvasContext; - const capabilities = (context as any).getCapabilities(adapter); - const presentationFormat = navigator.gpu.getPreferredCanvasFormat(); //capabilities.format[0]; - const alphaMode = capabilities.alphaModes[0]; - - context.configure({ - device, - format: presentationFormat, - alphaMode - }); - - const tri = `@vertex + const tri = `@vertex fn main( @builtin(vertex_index) VertexIndex : u32 ) -> @builtin(position) vec4f { @@ -496,6 +476,27 @@ fn main() -> @location(0) vec4f { return vec4(1.0, 0.0, 0.0, 1.0); }`; + if (navigator.gpu) { + const adapter = await navigator.gpu.requestAdapter(); + const device = await adapter.requestDevice(); + + device.addEventListener("uncapturederror", (event: any) => { + console.error("A WebGPU error was not captured:", event.error.message); + }); + + const context = this.canvas.getContext('webgpu') as GPUCanvasContext; + + const capabilities = (context as any).getCapabilities(adapter); + const presentationFormat = navigator.gpu.getPreferredCanvasFormat(); //capabilities.format[0]; + const alphaMode = capabilities.alphaModes[0]; + + context.configure({ + device, + format: presentationFormat, + alphaMode + }); + + const pipeline = device.createRenderPipeline({ layout: 'auto', vertex: { @@ -554,7 +555,29 @@ fn main() -> @location(0) vec4f { draw() { //this.webgpuTest(); - this.webgpuTriangle(); + //this.webgpuTriangle(); + // const rc = require('./webgpu/rotatingCube'); + // rc.run(this.canvas); + // const particles = require('./webgpu/particles'); + // particles.run(this.canvas); + + // const texturedCube = require('./webgpu/texturedCube'); + // texturedCube.run(this.canvas); + + // const imageBlur = require('./webgpu/imageBlur'); + // imageBlur.run(this.canvas); + + + // const cubeMap = require('./webgpu/cubeMap'); + // cubeMap.run(this.canvas); + + // const instancedCube = require('./webgpu/instancedCube'); + // instancedCube.run(this.canvas); + + + const computeBoids = require('./webgpu/computeBoids'); + computeBoids.run(this.canvas); + //this.drawChart(this.canvas); //this.drawSVG(this.canvas); // const ctx = this.canvas.getContext('2d'); diff --git a/tools/demo/canvas/webgpu/computeBoids.ts b/tools/demo/canvas/webgpu/computeBoids.ts new file mode 100644 index 000000000..88a258008 --- /dev/null +++ b/tools/demo/canvas/webgpu/computeBoids.ts @@ -0,0 +1,314 @@ +import { Canvas, GPUBufferUsage, GPUCanvasContext, GPUDevice, GPUMapMode, GPUQuerySet, GPUTexture, GPUTextureUsage, ImageAsset } from '@nativescript/canvas'; + +import { File, knownFolders } from '@nativescript/core'; + +export async function run(canvas: Canvas) { + const adapter = await navigator.gpu?.requestAdapter(); + const hasTimestampQuery = adapter!.features.has('timestamp-query'); + const device: GPUDevice = (await adapter?.requestDevice({ + requiredFeatures: hasTimestampQuery ? ['timestamp-query'] : [], + })) as never; + + const context = canvas.getContext('webgpu') as never as GPUCanvasContext; + + const devicePixelRatio = window.devicePixelRatio; + const presentationFormat = navigator.gpu.getPreferredCanvasFormat(); + + const path = knownFolders.currentApp().path; + + const spriteWGSL = File.fromPath(path + '/webgpu/shaders/sprite.wgsl').readTextSync(); + const updateSpritesWGSL = File.fromPath(path + '/webgpu/shaders/updateSprites.wgsl').readTextSync(); + + context.configure({ + device, + format: presentationFormat, + alphaMode: 'postmultiplied', + }); + + let perfText = hasTimestampQuery ? 'Collecting samples...' : 'timestamp-query not supported on this device'; + + context.configure({ + device, + format: presentationFormat, + alphaMode: 'postmultiplied', + }); + + const spriteShaderModule = device.createShaderModule({ code: spriteWGSL }); + const renderPipeline = device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: spriteShaderModule, + entryPoint: 'vert_main', + buffers: [ + { + // instanced particles buffer + arrayStride: 4 * 4, + stepMode: 'instance', + attributes: [ + { + // instance position + shaderLocation: 0, + offset: 0, + format: 'float32x2', + }, + { + // instance velocity + shaderLocation: 1, + offset: 2 * 4, + format: 'float32x2', + }, + ], + }, + { + // vertex buffer + arrayStride: 2 * 4, + stepMode: 'vertex', + attributes: [ + { + // vertex positions + shaderLocation: 2, + offset: 0, + format: 'float32x2', + }, + ], + }, + ], + }, + fragment: { + module: spriteShaderModule, + entryPoint: 'frag_main', + targets: [ + { + format: presentationFormat, + }, + ], + }, + primitive: { + topology: 'triangle-list', + }, + }); + + const computePipeline = device.createComputePipeline({ + layout: 'auto', + compute: { + module: device.createShaderModule({ + code: updateSpritesWGSL, + }), + entryPoint: 'main', + }, + }); + + const renderPassDescriptor: GPURenderPassDescriptor = { + colorAttachments: [ + { + view: undefined as unknown as GPUTextureView, // Assigned later + clearValue: [0, 0, 0, 1], + loadOp: 'clear' as const, + storeOp: 'store' as const, + }, + ], + }; + + const computePassDescriptor: GPUComputePassDescriptor = {}; + + /** Storage for timestamp query results */ + let querySet: GPUQuerySet | undefined = undefined; + /** Timestamps are resolved into this buffer */ + let resolveBuffer: GPUBuffer | undefined = undefined; + /** Pool of spare buffers for MAP_READing the timestamps back to CPU. A buffer + * is taken from the pool (if available) when a readback is needed, and placed + * back into the pool once the readback is done and it's unmapped. */ + const spareResultBuffers: GPUBuffer[] = []; + + if (hasTimestampQuery) { + querySet = device.createQuerySet({ + type: 'timestamp', + count: 4, + }); + resolveBuffer = device.createBuffer({ + size: 4 * BigInt64Array.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.QUERY_RESOLVE | GPUBufferUsage.COPY_SRC, + }); + computePassDescriptor.timestampWrites = { + querySet: querySet as never, + beginningOfPassWriteIndex: 0, + endOfPassWriteIndex: 1, + }; + renderPassDescriptor.timestampWrites = { + querySet: querySet as never, + beginningOfPassWriteIndex: 2, + endOfPassWriteIndex: 3, + }; + } + + // prettier-ignore + const vertexBufferData = new Float32Array([ + -0.01, -0.02, 0.01, + -0.02, 0.0, 0.02, + ]); + + const spriteVertexBuffer = device.createBuffer({ + size: vertexBufferData.byteLength, + usage: GPUBufferUsage.VERTEX, + mappedAtCreation: true, + }); + new Float32Array(spriteVertexBuffer.getMappedRange()).set(vertexBufferData); + spriteVertexBuffer.unmap(); + + const simParams = { + deltaT: 0.04, + rule1Distance: 0.1, + rule2Distance: 0.025, + rule3Distance: 0.025, + rule1Scale: 0.02, + rule2Scale: 0.05, + rule3Scale: 0.005, + }; + + const simParamBufferSize = 7 * Float32Array.BYTES_PER_ELEMENT; + const simParamBuffer = device.createBuffer({ + size: simParamBufferSize, + usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST, + }); + + function updateSimParams() { + device.queue.writeBuffer(simParamBuffer, 0, new Float32Array([simParams.deltaT, simParams.rule1Distance, simParams.rule2Distance, simParams.rule3Distance, simParams.rule1Scale, simParams.rule2Scale, simParams.rule3Scale])); + } + + // const gui = new GUI(); + updateSimParams(); + // Object.keys(simParams).forEach((k) => { + // const key = k as keyof typeof simParams; + // gui.add(simParams, key).onFinishChange(updateSimParams); + // }); + + const numParticles = 1500; + const initialParticleData = new Float32Array(numParticles * 4); + for (let i = 0; i < numParticles; ++i) { + initialParticleData[4 * i + 0] = 2 * (Math.random() - 0.5); + initialParticleData[4 * i + 1] = 2 * (Math.random() - 0.5); + initialParticleData[4 * i + 2] = 2 * (Math.random() - 0.5) * 0.1; + initialParticleData[4 * i + 3] = 2 * (Math.random() - 0.5) * 0.1; + } + + const particleBuffers: GPUBuffer[] = new Array(2); + const particleBindGroups: GPUBindGroup[] = new Array(2); + for (let i = 0; i < 2; ++i) { + particleBuffers[i] = device.createBuffer({ + size: initialParticleData.byteLength, + usage: GPUBufferUsage.VERTEX | GPUBufferUsage.STORAGE, + mappedAtCreation: true, + }); + new Float32Array(particleBuffers[i]!.getMappedRange()).set(initialParticleData); + particleBuffers[i]!.unmap(); + } + + for (let i = 0; i < 2; ++i) { + particleBindGroups[i] = device.createBindGroup({ + layout: computePipeline.getBindGroupLayout(0), + entries: [ + { + binding: 0, + resource: { + buffer: simParamBuffer, + }, + }, + { + binding: 1, + resource: { + buffer: particleBuffers[i] as never, + offset: 0, + size: initialParticleData.byteLength, + }, + }, + { + binding: 2, + resource: { + buffer: particleBuffers[(i + 1) % 2] as never, + offset: 0, + size: initialParticleData.byteLength, + }, + }, + ], + }) as never; + } + + let t = 0; + let computePassDurationSum = 0; + let renderPassDurationSum = 0; + let timerSamples = 0; + function frame() { + const framebuffer = context.getCurrentTexture(); + + renderPassDescriptor.colorAttachments[0].view = framebuffer.createView() as never; + + const commandEncoder = device.createCommandEncoder(); + { + const passEncoder = commandEncoder.beginComputePass(computePassDescriptor as never); + passEncoder.setPipeline(computePipeline); + passEncoder.setBindGroup(0, particleBindGroups[t % 2] as never); + passEncoder.dispatchWorkgroups(Math.ceil(numParticles / 64)); + passEncoder.end(); + } + { + const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor as never); + passEncoder.setPipeline(renderPipeline); + passEncoder.setVertexBuffer(0, particleBuffers[(t + 1) % 2] as never); + passEncoder.setVertexBuffer(1, spriteVertexBuffer); + passEncoder.draw(3, numParticles, 0, 0); + passEncoder.end(); + } + + let resultBuffer: GPUBuffer | undefined = undefined; + if (hasTimestampQuery) { + resultBuffer = + spareResultBuffers.pop() || + device.createBuffer({ + size: 4 * BigInt64Array.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ, + }); + commandEncoder.resolveQuerySet(querySet!, 0, 4, resolveBuffer as never, 0); + commandEncoder.copyBufferToBuffer(resolveBuffer as never, 0, resultBuffer as never, 0, resultBuffer!.size); + } + + device.queue.submit([commandEncoder.finish()]); + + context.presentSurface(framebuffer); + + if (hasTimestampQuery) { + resultBuffer!.mapAsync(GPUMapMode.READ).then(() => { + const times = new BigInt64Array(resultBuffer!.getMappedRange()); + const computePassDuration = Number(times[1]! - times[0]!); + const renderPassDuration = Number(times[3]! - times[2]!); + + // In some cases the timestamps may wrap around and produce a negative + // number as the GPU resets it's timings. These can safely be ignored. + if (computePassDuration > 0 && renderPassDuration > 0) { + computePassDurationSum += computePassDuration; + renderPassDurationSum += renderPassDuration; + timerSamples++; + } + resultBuffer!.unmap(); + + // Periodically update the text for the timer stats + const kNumTimerSamplesPerUpdate = 10; + if (timerSamples >= kNumTimerSamplesPerUpdate) { + const avgComputeMicroseconds = Math.round(computePassDurationSum / timerSamples / 1000); + const avgRenderMicroseconds = Math.round(renderPassDurationSum / timerSamples / 1000); + perfText = `\ +avg compute pass duration: ${avgComputeMicroseconds}µs +avg render pass duration: ${avgRenderMicroseconds}µs +spare readback buffers: ${spareResultBuffers.length}`; + computePassDurationSum = 0; + renderPassDurationSum = 0; + timerSamples = 0; + } + spareResultBuffers.push(resultBuffer!); + }); + } + + ++t; + requestAnimationFrame(frame); + } + requestAnimationFrame(frame); +} diff --git a/tools/demo/canvas/webgpu/cubeMap.ts b/tools/demo/canvas/webgpu/cubeMap.ts new file mode 100644 index 000000000..4b21b2c04 --- /dev/null +++ b/tools/demo/canvas/webgpu/cubeMap.ts @@ -0,0 +1,228 @@ +import { Canvas, GPUBufferUsage, GPUCanvasContext, GPUDevice, GPUTexture, GPUTextureUsage, ImageAsset } from '@nativescript/canvas'; + +import { mat4, vec3 } from '../../wgpu-matrix/wgpu-matrix'; + +import { cubeVertexArray, cubeVertexSize, cubeUVOffset, cubePositionOffset, cubeVertexCount } from './meshes/cube'; + +import { File, knownFolders } from '@nativescript/core'; + +export async function run(canvas: Canvas) { + const adapter = await navigator.gpu?.requestAdapter(); + const device: GPUDevice = (await adapter?.requestDevice()) as never; + + const context = canvas.getContext('webgpu') as never as GPUCanvasContext; + + const devicePixelRatio = window.devicePixelRatio; + const presentationFormat = navigator.gpu.getPreferredCanvasFormat(); + + const path = knownFolders.currentApp().path; + + const basicVertWGSL = File.fromPath(path + '/webgpu/shaders/basic.vert.wgsl').readTextSync(); + const sampleCubemapWGSL = File.fromPath(path + '/webgpu/shaders/sampleCubemap.frag.wgsl').readTextSync(); + + context.configure({ + device, + format: presentationFormat, + alphaMode: 'postmultiplied', + }); + + // Create a vertex buffer from the cube data. + const verticesBuffer = device.createBuffer({ + size: cubeVertexArray.byteLength, + usage: GPUBufferUsage.VERTEX, + mappedAtCreation: true, + }); + new Float32Array(verticesBuffer.getMappedRange()).set(cubeVertexArray); + verticesBuffer.unmap(); + + const pipeline = device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: device.createShaderModule({ + code: basicVertWGSL, + }), + buffers: [ + { + arrayStride: cubeVertexSize, + attributes: [ + { + // position + shaderLocation: 0, + offset: cubePositionOffset, + format: 'float32x4', + }, + { + // uv + shaderLocation: 1, + offset: cubeUVOffset, + format: 'float32x2', + }, + ], + }, + ], + entryPoint: 'main', + }, + fragment: { + module: device.createShaderModule({ + code: sampleCubemapWGSL, + }), + targets: [ + { + format: presentationFormat, + }, + ], + entryPoint: 'main', + }, + primitive: { + topology: 'triangle-list', + + // Since we are seeing from inside of the cube + // and we are using the regular cube geomtry data with outward-facing normals, + // the cullMode should be 'front' or 'none'. + cullMode: 'none', + }, + + // Enable depth testing so that the fragment closest to the camera + // is rendered in front. + depthStencil: { + depthWriteEnabled: true, + depthCompare: 'less', + format: 'depth24plus', + }, + }); + + const depthTexture = device.createTexture({ + size: [(canvas.width as number) * devicePixelRatio, (canvas.height as number) * devicePixelRatio], + format: 'depth24plus', + usage: GPUTextureUsage.RENDER_ATTACHMENT, + }); + + // Fetch the 6 separate images for negative/positive x, y, z axis of a cubemap + // and upload it into a GPUTexture. + let cubemapTexture: GPUTexture; + let imageBitmaps; + { + const root = '~/assets/file-assets/webgpu/cubemap/'; + // The order of the array layers is [+X, -X, +Y, -Y, +Z, -Z] + const imgSrcs = [root + 'posx.jpg', root + 'negx.jpg', root + 'posy.jpg', root + 'negy.jpg', root + 'posz.jpg', root + 'negz.jpg']; + const promises = imgSrcs.map(async (src) => { + // const response = await fetch(src); + // return createImageBitmap(await response.blob()); + const asset = new ImageAsset(); + return asset.fromFile(src).then((done) => { + return asset; + }); + }); + imageBitmaps = await Promise.all(promises); + + cubemapTexture = device.createTexture({ + dimension: '2d', + // Create a 2d array texture. + // Assume each image has the same size. + size: [imageBitmaps[0].width, imageBitmaps[0].height, 6], + format: 'rgba8unorm', + usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, + }); + + for (let i = 0; i < imageBitmaps.length; i++) { + const imageBitmap = imageBitmaps[i]; + device.queue.copyExternalImageToTexture({ source: imageBitmap }, { texture: cubemapTexture, origin: [0, 0, i] }, [imageBitmap.width, imageBitmap.height]); + } + } + + const uniformBufferSize = 4 * 16; // 4x4 matrix + const uniformBuffer = device.createBuffer({ + size: uniformBufferSize, + usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST, + }); + + const sampler = device.createSampler({ + magFilter: 'linear', + minFilter: 'linear', + }); + + const uniformBindGroup = device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [ + { + binding: 0, + resource: { + buffer: uniformBuffer, + offset: 0, + size: uniformBufferSize, + }, + }, + { + binding: 1, + resource: sampler, + }, + { + binding: 2, + resource: cubemapTexture.createView({ + dimension: 'cube', + }), + }, + ], + }); + + const renderPassDescriptor = { + colorAttachments: [ + { + view: undefined, // Assigned later + loadOp: 'clear', + storeOp: 'store', + }, + ], + depthStencilAttachment: { + view: depthTexture.createView(), + + depthClearValue: 1.0, + depthLoadOp: 'clear', + depthStoreOp: 'store', + }, + }; + + const aspect = (canvas.width as number) / (canvas.height as number); + const projectionMatrix = mat4.perspective((2 * Math.PI) / 5, aspect, 1, 3000); + + const modelMatrix = mat4.scaling(vec3.fromValues(1000, 1000, 1000)); + const modelViewProjectionMatrix = mat4.create(); + const viewMatrix = mat4.identity(); + + const tmpMat4 = mat4.create(); + + // Comppute camera movement: + // It rotates around Y axis with a slight pitch movement. + function updateTransformationMatrix() { + const now = Date.now() / 800; + + mat4.rotate(viewMatrix, vec3.fromValues(1, 0, 0), (Math.PI / 10) * Math.sin(now), tmpMat4); + mat4.rotate(tmpMat4, vec3.fromValues(0, 1, 0), now * 0.2, tmpMat4); + + mat4.multiply(tmpMat4, modelMatrix, modelViewProjectionMatrix); + mat4.multiply(projectionMatrix, modelViewProjectionMatrix, modelViewProjectionMatrix); + } + + function frame() { + updateTransformationMatrix(); + device.queue.writeBuffer(uniformBuffer, 0, modelViewProjectionMatrix.buffer, modelViewProjectionMatrix.byteOffset, modelViewProjectionMatrix.byteLength); + + const texture = context.getCurrentTexture(); + + renderPassDescriptor.colorAttachments[0].view = texture.createView(); + + const commandEncoder = device.createCommandEncoder(); + const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor as never); + passEncoder.setPipeline(pipeline); + passEncoder.setVertexBuffer(0, verticesBuffer); + passEncoder.setBindGroup(0, uniformBindGroup); + passEncoder.draw(cubeVertexCount); + passEncoder.end(); + device.queue.submit([commandEncoder.finish()]); + + (context).presentSurface(texture); + + requestAnimationFrame(frame); + } + requestAnimationFrame(frame); +} diff --git a/tools/demo/canvas/webgpu/imageBlur.ts b/tools/demo/canvas/webgpu/imageBlur.ts new file mode 100644 index 000000000..6a3f669a3 --- /dev/null +++ b/tools/demo/canvas/webgpu/imageBlur.ts @@ -0,0 +1,273 @@ +import { Canvas, GPUBufferUsage, GPUDevice, GPUTextureUsage, ImageAsset } from '@nativescript/canvas'; +import { knownFolders, File } from '@nativescript/core'; +//import { GUI } from 'dat.gui'; + +export async function run(canvas: Canvas) { + const appPath = knownFolders.currentApp().path; + const blurWGSL = File.fromPath(appPath + '/webgpu/shaders/blur.wgsl').readTextSync(); + const fullscreenTexturedQuadWGSL = File.fromPath(appPath + '/webgpu/shaders/fullscreenTexturedQuad.wgsl').readTextSync(); + + // Contants from the blur.wgsl shader. + const tileDim = 128; + const batch = [4, 4]; + const adapter = await navigator.gpu?.requestAdapter(); + const device: GPUDevice = (await adapter?.requestDevice()) as never; + + const context = canvas.getContext('webgpu'); + + const devicePixelRatio = window.devicePixelRatio; + // canvas.width = canvas.clientWidth * devicePixelRatio; + // canvas.height = canvas.clientHeight * devicePixelRatio; + const presentationFormat = navigator.gpu.getPreferredCanvasFormat(); + + context.configure({ + device, + format: presentationFormat, + alphaMode: 'postmultiplied', + }); + + const blurPipeline = device.createComputePipeline({ + layout: 'auto', + compute: { + module: device.createShaderModule({ + code: blurWGSL, + }), + entryPoint: 'main', + }, + }); + + const fullscreenQuadPipeline = device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: device.createShaderModule({ + code: fullscreenTexturedQuadWGSL, + }), + entryPoint: 'vert_main', + }, + fragment: { + module: device.createShaderModule({ + code: fullscreenTexturedQuadWGSL, + }), + targets: [ + { + format: presentationFormat, + }, + ], + entryPoint: 'frag_main', + }, + primitive: { + topology: 'triangle-list', + }, + }); + + const sampler = device.createSampler({ + magFilter: 'linear', + minFilter: 'linear', + }); + + // const response = await fetch('../../assets/img/Di-3d.png'); + // const imageBitmap = await createImageBitmap(await response.blob()); + + const imageBitmap = new ImageAsset(); + imageBitmap.fromFileSync('~/assets/file-assets/webgpu/Di-3d.png'); + + const [srcWidth, srcHeight] = [imageBitmap.width, imageBitmap.height]; + const cubeTexture = device.createTexture({ + size: [srcWidth, srcHeight, 1], + format: 'rgba8unorm', + usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, + }); + device.queue.copyExternalImageToTexture({ source: imageBitmap }, { texture: cubeTexture }, [imageBitmap.width, imageBitmap.height]); + + const textures = [0, 1].map(() => { + return device.createTexture({ + size: { + width: srcWidth, + height: srcHeight, + }, + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING, + }); + }); + + const buffer0 = (() => { + const buffer = device.createBuffer({ + size: 4, + mappedAtCreation: true, + usage: GPUBufferUsage.UNIFORM, + }); + new Uint32Array(buffer.getMappedRange())[0] = 0; + buffer.unmap(); + return buffer; + })(); + + const buffer1 = (() => { + const buffer = device.createBuffer({ + size: 4, + mappedAtCreation: true, + usage: GPUBufferUsage.UNIFORM, + }); + new Uint32Array(buffer.getMappedRange())[0] = 1; + buffer.unmap(); + return buffer; + })(); + + const blurParamsBuffer = device.createBuffer({ + size: 8, + usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.UNIFORM, + }); + + const computeConstants = device.createBindGroup({ + layout: blurPipeline.getBindGroupLayout(0), + entries: [ + { + binding: 0, + resource: sampler, + }, + { + binding: 1, + resource: { + buffer: blurParamsBuffer, + }, + }, + ], + }); + + const computeBindGroup0 = device.createBindGroup({ + layout: blurPipeline.getBindGroupLayout(1), + entries: [ + { + binding: 1, + resource: cubeTexture.createView(), + }, + { + binding: 2, + resource: textures[0].createView(), + }, + { + binding: 3, + resource: { + buffer: buffer0, + }, + }, + ], + }); + + const computeBindGroup1 = device.createBindGroup({ + layout: blurPipeline.getBindGroupLayout(1), + entries: [ + { + binding: 1, + resource: textures[0].createView(), + }, + { + binding: 2, + resource: textures[1].createView(), + }, + { + binding: 3, + resource: { + buffer: buffer1, + }, + }, + ], + }); + + const computeBindGroup2 = device.createBindGroup({ + layout: blurPipeline.getBindGroupLayout(1), + entries: [ + { + binding: 1, + resource: textures[1].createView(), + }, + { + binding: 2, + resource: textures[0].createView(), + }, + { + binding: 3, + resource: { + buffer: buffer0, + }, + }, + ], + }); + + const showResultBindGroup = device.createBindGroup({ + layout: fullscreenQuadPipeline.getBindGroupLayout(0), + entries: [ + { + binding: 0, + resource: sampler, + }, + { + binding: 1, + resource: textures[1].createView(), + }, + ], + }); + + const settings = { + filterSize: 15, + iterations: 2, + }; + + let blockDim: number; + const updateSettings = () => { + blockDim = tileDim - (settings.filterSize - 1); + device.queue.writeBuffer(blurParamsBuffer, 0, new Uint32Array([settings.filterSize, blockDim])); + }; + // const gui = new GUI(); + // gui.add(settings, 'filterSize', 1, 33).step(2).onChange(updateSettings); + // gui.add(settings, 'iterations', 1, 10).step(1); + + updateSettings(); + + function frame() { + const commandEncoder = device.createCommandEncoder(); + + const computePass = commandEncoder.beginComputePass(); + computePass.setPipeline(blurPipeline); + computePass.setBindGroup(0, computeConstants); + + computePass.setBindGroup(1, computeBindGroup0); + computePass.dispatchWorkgroups(Math.ceil(srcWidth / blockDim), Math.ceil(srcHeight / batch[1])); + + computePass.setBindGroup(1, computeBindGroup1); + computePass.dispatchWorkgroups(Math.ceil(srcHeight / blockDim), Math.ceil(srcWidth / batch[1])); + + for (let i = 0; i < settings.iterations - 1; ++i) { + computePass.setBindGroup(1, computeBindGroup2); + computePass.dispatchWorkgroups(Math.ceil(srcWidth / blockDim), Math.ceil(srcHeight / batch[1])); + + computePass.setBindGroup(1, computeBindGroup1); + computePass.dispatchWorkgroups(Math.ceil(srcHeight / blockDim), Math.ceil(srcWidth / batch[1])); + } + + computePass.end(); + + const texture = context.getCurrentTexture(); + + const passEncoder = commandEncoder.beginRenderPass({ + colorAttachments: [ + { + view: texture.createView(), + clearValue: [0, 0, 0, 1], + loadOp: 'clear', + storeOp: 'store', + }, + ], + }); + + passEncoder.setPipeline(fullscreenQuadPipeline); + passEncoder.setBindGroup(0, showResultBindGroup); + passEncoder.draw(6); + passEncoder.end(); + device.queue.submit([commandEncoder.finish()]); + + (context).presentSurface(texture); + + requestAnimationFrame(frame); + } + requestAnimationFrame(frame); +} diff --git a/tools/demo/canvas/webgpu/instancedCube.ts b/tools/demo/canvas/webgpu/instancedCube.ts new file mode 100644 index 000000000..6c9a3576b --- /dev/null +++ b/tools/demo/canvas/webgpu/instancedCube.ts @@ -0,0 +1,207 @@ +import { Canvas, GPUBufferUsage, GPUCanvasContext, GPUDevice, GPUTexture, GPUTextureUsage, ImageAsset } from '@nativescript/canvas'; + +import { mat4, Mat4, vec3 } from '../../wgpu-matrix/wgpu-matrix'; + +import { cubeVertexArray, cubeVertexSize, cubeUVOffset, cubePositionOffset, cubeVertexCount } from './meshes/cube'; + +import { File, knownFolders } from '@nativescript/core'; + +export async function run(canvas: Canvas) { + const path = knownFolders.currentApp().path; + + const instancedVertWGSL = File.fromPath(path + '/webgpu/shaders/instanced.vert.wgsl').readTextSync(); + const vertexPositionColorWGSL = File.fromPath(path + '/webgpu/shaders/vertexPositionColor.frag.wgsl').readTextSync(); + + const adapter = await navigator.gpu.requestAdapter(); + const device: GPUDevice = (await adapter!.requestDevice()) as never; + + const presentationFormat = navigator.gpu.getPreferredCanvasFormat(); + + const context = canvas.getContext('webgpu') as never as GPUCanvasContext; + + context.configure({ + device, + format: presentationFormat, + alphaMode: 'postmultiplied', + }); + + // Create a vertex buffer from the cube data. + const verticesBuffer = device.createBuffer({ + size: cubeVertexArray.byteLength, + usage: GPUBufferUsage.VERTEX, + mappedAtCreation: true, + }); + new Float32Array(verticesBuffer.getMappedRange()).set(cubeVertexArray); + verticesBuffer.unmap(); + + const pipeline = device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: device.createShaderModule({ + code: instancedVertWGSL, + }), + entryPoint: 'main', + buffers: [ + { + arrayStride: cubeVertexSize, + attributes: [ + { + // position + shaderLocation: 0, + offset: cubePositionOffset, + format: 'float32x4', + }, + { + // uv + shaderLocation: 1, + offset: cubeUVOffset, + format: 'float32x2', + }, + ], + }, + ], + }, + fragment: { + module: device.createShaderModule({ + code: vertexPositionColorWGSL, + }), + entryPoint: 'main', + targets: [ + { + format: presentationFormat, + }, + ], + }, + primitive: { + topology: 'triangle-list', + + // Backface culling since the cube is solid piece of geometry. + // Faces pointing away from the camera will be occluded by faces + // pointing toward the camera. + cullMode: 'back', + }, + + // Enable depth testing so that the fragment closest to the camera + // is rendered in front. + depthStencil: { + depthWriteEnabled: true, + depthCompare: 'less', + format: 'depth24plus', + }, + }); + + const depthTexture = device.createTexture({ + size: [(canvas.width as number) * window.devicePixelRatio, (canvas.height as number) * window.devicePixelRatio], + format: 'depth24plus', + usage: GPUTextureUsage.RENDER_ATTACHMENT, + }); + + const xCount = 4; + const yCount = 4; + const numInstances = xCount * yCount; + const matrixFloatCount = 16; // 4x4 matrix + const matrixSize = 4 * matrixFloatCount; + const uniformBufferSize = numInstances * matrixSize; + + // Allocate a buffer large enough to hold transforms for every + // instance. + const uniformBuffer = device.createBuffer({ + size: uniformBufferSize, + usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST, + }); + + const uniformBindGroup = device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [ + { + binding: 0, + resource: { + buffer: uniformBuffer, + }, + }, + ], + }); + + const aspect = (canvas.width as number) / (canvas.height as number); + const projectionMatrix = mat4.perspective((2 * Math.PI) / 5, aspect, 1, 100.0); + + const modelMatrices = new Array(numInstances); + const mvpMatricesData = new Float32Array(matrixFloatCount * numInstances); + + const step = 4.0; + + // Initialize the matrix data for every instance. + let m = 0; + for (let x = 0; x < xCount; x++) { + for (let y = 0; y < yCount; y++) { + modelMatrices[m] = mat4.translation(vec3.fromValues(step * (x - xCount / 2 + 0.5), step * (y - yCount / 2 + 0.5), 0)); + m++; + } + } + + const viewMatrix = mat4.translation(vec3.fromValues(0, 0, -12)); + + const tmpMat4 = mat4.create(); + + // Update the transformation matrix data for each instance. + function updateTransformationMatrix() { + const now = Date.now() / 1000; + + let m = 0, + i = 0; + for (let x = 0; x < xCount; x++) { + for (let y = 0; y < yCount; y++) { + mat4.rotate(modelMatrices[i]!, vec3.fromValues(Math.sin((x + 0.5) * now), Math.cos((y + 0.5) * now), 0), 1, tmpMat4); + + mat4.multiply(viewMatrix, tmpMat4, tmpMat4); + mat4.multiply(projectionMatrix, tmpMat4, tmpMat4); + + mvpMatricesData.set(tmpMat4, m); + + i++; + m += matrixFloatCount; + } + } + } + + const renderPassDescriptor = { + colorAttachments: [ + { + view: null, + + clearValue: [0.5, 0.5, 0.5, 1.0], + loadOp: 'clear', + storeOp: 'store', + }, + ], + depthStencilAttachment: { + view: depthTexture.createView(), + + depthClearValue: 1.0, + depthLoadOp: 'clear', + depthStoreOp: 'store', + }, + }; + + function frame() { + const framebuffer = context.getCurrentTexture(); + + updateTransformationMatrix(); + device.queue.writeBuffer(uniformBuffer, 0, mvpMatricesData.buffer, mvpMatricesData.byteOffset, mvpMatricesData.byteLength); + + renderPassDescriptor.colorAttachments[0].view = framebuffer.createView(); + + const commandEncoder = device.createCommandEncoder(); + const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor as never); + passEncoder.setPipeline(pipeline); + passEncoder.setBindGroup(0, uniformBindGroup); + passEncoder.setVertexBuffer(0, verticesBuffer); + passEncoder.draw(cubeVertexCount, numInstances, 0, 0); + passEncoder.end(); + device.queue.submit([commandEncoder.finish()]); + + context.presentSurface(framebuffer); + requestAnimationFrame(frame); + } + requestAnimationFrame(frame); +} diff --git a/tools/demo/canvas/webgpu/meshes/cube.ts b/tools/demo/canvas/webgpu/meshes/cube.ts new file mode 100644 index 000000000..9953984e8 --- /dev/null +++ b/tools/demo/canvas/webgpu/meshes/cube.ts @@ -0,0 +1,51 @@ +export const cubeVertexSize = 4 * 10; // Byte size of one cube vertex. +export const cubePositionOffset = 0; +export const cubeColorOffset = 4 * 4; // Byte offset of cube vertex color attribute. +export const cubeUVOffset = 4 * 8; +export const cubeVertexCount = 36; + +// prettier-ignore +export const cubeVertexArray = new Float32Array([ + // float4 position, float4 color, float2 uv, + 1, -1, 1, 1, 1, 0, 1, 1, 0, 1, + -1, -1, 1, 1, 0, 0, 1, 1, 1, 1, + -1, -1, -1, 1, 0, 0, 0, 1, 1, 0, + 1, -1, -1, 1, 1, 0, 0, 1, 0, 0, + 1, -1, 1, 1, 1, 0, 1, 1, 0, 1, + -1, -1, -1, 1, 0, 0, 0, 1, 1, 0, + + 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, + 1, -1, 1, 1, 1, 0, 1, 1, 1, 1, + 1, -1, -1, 1, 1, 0, 0, 1, 1, 0, + 1, 1, -1, 1, 1, 1, 0, 1, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, + 1, -1, -1, 1, 1, 0, 0, 1, 1, 0, + + -1, 1, 1, 1, 0, 1, 1, 1, 0, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, -1, 1, 1, 1, 0, 1, 1, 0, + -1, 1, -1, 1, 0, 1, 0, 1, 0, 0, + -1, 1, 1, 1, 0, 1, 1, 1, 0, 1, + 1, 1, -1, 1, 1, 1, 0, 1, 1, 0, + + -1, -1, 1, 1, 0, 0, 1, 1, 0, 1, + -1, 1, 1, 1, 0, 1, 1, 1, 1, 1, + -1, 1, -1, 1, 0, 1, 0, 1, 1, 0, + -1, -1, -1, 1, 0, 0, 0, 1, 0, 0, + -1, -1, 1, 1, 0, 0, 1, 1, 0, 1, + -1, 1, -1, 1, 0, 1, 0, 1, 1, 0, + + 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, + -1, 1, 1, 1, 0, 1, 1, 1, 1, 1, + -1, -1, 1, 1, 0, 0, 1, 1, 1, 0, + -1, -1, 1, 1, 0, 0, 1, 1, 1, 0, + 1, -1, 1, 1, 1, 0, 1, 1, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, + + 1, -1, -1, 1, 1, 0, 0, 1, 0, 1, + -1, -1, -1, 1, 0, 0, 0, 1, 1, 1, + -1, 1, -1, 1, 0, 1, 0, 1, 1, 0, + 1, 1, -1, 1, 1, 1, 0, 1, 0, 0, + 1, -1, -1, 1, 1, 0, 0, 1, 0, 1, + -1, 1, -1, 1, 0, 1, 0, 1, 1, 0, +]); diff --git a/tools/demo/canvas/webgpu/particles.ts b/tools/demo/canvas/webgpu/particles.ts new file mode 100644 index 000000000..cece72280 --- /dev/null +++ b/tools/demo/canvas/webgpu/particles.ts @@ -0,0 +1,446 @@ +import { Canvas, GPUCanvasContext, GPUDevice, GPUTexture, ImageAsset } from '@nativescript/canvas'; +import { mat4, vec3 } from '../../wgpu-matrix/wgpu-matrix'; +import { File, knownFolders } from '@nativescript/core'; +// import { GUI } from 'dat.gui'; + +export async function run(canvas: Canvas) { + const path = knownFolders.currentApp().path; + const particleWGSL = File.fromPath(path + '/webgpu/shaders/particle.wgsl').readTextSync(); + const probabilityMapWGSL = File.fromPath(path + '/webgpu/shaders/probabilityMap.wgsl').readTextSync(); + + const numParticles = 50000; + const particlePositionOffset = 0; + const particleColorOffset = 4 * 4; + const particleInstanceByteSize = + 3 * 4 + // position + 1 * 4 + // lifetime + 4 * 4 + // color + 3 * 4 + // velocity + 1 * 4 + // padding + 0; + + const adapter = await navigator.gpu.requestAdapter(); + const device: GPUDevice = (await adapter.requestDevice()) as never; + + device.addEventListener('uncapturederror', event =>{ + console.log(event); + console.log(event.error); + }); + + const context: GPUCanvasContext = canvas.getContext('webgpu') as never; + + const devicePixelRatio = window.devicePixelRatio; + //canvas.width = canvas.clientWidth * devicePixelRatio; + //canvas.height = canvas.clientHeight * devicePixelRatio; + + const capabilities = (context as any).getCapabilities(adapter); + const presentationFormat = navigator.gpu.getPreferredCanvasFormat(); //capabilities.format[0]; + const alphaMode = capabilities.alphaModes[0]; + + context.configure({ + device, + format: presentationFormat, + alphaMode: 'postmultiplied', + }); + + const particlesBuffer = device.createBuffer({ + size: numParticles * particleInstanceByteSize, + usage: global.GPUBufferUsage.VERTEX | global.GPUBufferUsage.STORAGE, + }); + + const renderPipeline = device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: device.createShaderModule({ + code: particleWGSL, + }), + buffers: [ + { + // instanced particles buffer + arrayStride: particleInstanceByteSize, + stepMode: 'instance', + attributes: [ + { + // position + shaderLocation: 0, + offset: particlePositionOffset, + format: 'float32x3', + }, + { + // color + shaderLocation: 1, + offset: particleColorOffset, + format: 'float32x4', + }, + ], + }, + { + // quad vertex buffer + arrayStride: 2 * 4, // vec2f + stepMode: 'vertex', + attributes: [ + { + // vertex positions + shaderLocation: 2, + offset: 0, + format: 'float32x2', + }, + ], + }, + ], + entryPoint: 'vs_main', + }, + fragment: { + module: device.createShaderModule({ + code: particleWGSL, + }), + targets: [ + { + format: presentationFormat, + blend: { + color: { + srcFactor: 'src-alpha', + dstFactor: 'one', + operation: 'add', + }, + alpha: { + srcFactor: 'zero', + dstFactor: 'one', + operation: 'add', + }, + }, + }, + ], + entryPoint: 'fs_main', + }, + primitive: { + topology: 'triangle-list', + }, + + depthStencil: { + depthWriteEnabled: false, + depthCompare: 'less', + format: 'depth24plus', + }, + }); + + const depthTexture = device.createTexture({ + size: [(canvas.width as number) * devicePixelRatio, Math.floor((canvas.height as number) * devicePixelRatio)], + format: 'depth24plus', + usage: global.GPUTextureUsage.RENDER_ATTACHMENT, + }); + + const uniformBufferSize = + 4 * 4 * 4 + // modelViewProjectionMatrix : mat4x4f + 3 * 4 + // right : vec3f + 4 + // padding + 3 * 4 + // up : vec3f + 4 + // padding + 0; + const uniformBuffer = device.createBuffer({ + size: uniformBufferSize, + usage: global.GPUBufferUsage.UNIFORM | global.GPUBufferUsage.COPY_DST, + }); + + const uniformBindGroup = device.createBindGroup({ + layout: renderPipeline.getBindGroupLayout(0), + entries: [ + { + binding: 0, + resource: { + buffer: uniformBuffer, + }, + }, + ], + }); + + const renderPassDescriptor = { + colorAttachments: [ + { + view: undefined, // Assigned later + clearValue: [0, 0, 0, 1], + loadOp: 'clear', + storeOp: 'store', + }, + ], + depthStencilAttachment: { + view: depthTexture.createView(), + + depthClearValue: 1.0, + depthLoadOp: 'clear', + depthStoreOp: 'store', + }, + }; + + ////////////////////////////////////////////////////////////////////////////// + // Quad vertex buffer + ////////////////////////////////////////////////////////////////////////////// + const quadVertexBuffer = device.createBuffer({ + size: 6 * 2 * 4, // 6x vec2f + usage: global.GPUBufferUsage.VERTEX, + mappedAtCreation: true, + }); + // prettier-ignore + const vertexData = [ + -1.0, -1.0, +1.0, -1.0, -1.0, +1.0, -1.0, +1.0, +1.0, -1.0, +1.0, +1.0, + ]; + new Float32Array(quadVertexBuffer.getMappedRange()).set(vertexData); + quadVertexBuffer.unmap(); + + ////////////////////////////////////////////////////////////////////////////// + // Texture + ////////////////////////////////////////////////////////////////////////////// + let texture: GPUTexture; + let textureWidth = 1; + let textureHeight = 1; + let numMipLevels = 1; + { + // const response = await fetch('../../assets/img/webgpu.png'); + // const imageBitmap = await createImageBitmap(await response.blob()); + + const imageBitmap = new ImageAsset(); + imageBitmap.fromFileSync('~/assets/file-assets/webgpu/webgpu.png'); + + + // Calculate number of mip levels required to generate the probability map + while (textureWidth < imageBitmap.width || textureHeight < imageBitmap.height) { + textureWidth *= 2; + textureHeight *= 2; + numMipLevels++; + } + texture = device.createTexture({ + size: [imageBitmap.width, imageBitmap.height, 1], + mipLevelCount: numMipLevels, + format: 'rgba8unorm', + usage: global.GPUTextureUsage.TEXTURE_BINDING | global.GPUTextureUsage.STORAGE_BINDING | global.GPUTextureUsage.COPY_DST | global.GPUTextureUsage.RENDER_ATTACHMENT, + }); + + device.queue.copyExternalImageToTexture({ source: imageBitmap }, { texture: texture }, [imageBitmap.width, imageBitmap.height]); + } + + ////////////////////////////////////////////////////////////////////////////// + // Probability map generation + // The 0'th mip level of texture holds the color data and spawn-probability in + // the alpha channel. The mip levels 1..N are generated to hold spawn + // probabilities up to the top 1x1 mip level. + ////////////////////////////////////////////////////////////////////////////// + { + const probabilityMapImportLevelPipeline = device.createComputePipeline({ + layout: 'auto', + compute: { + module: device.createShaderModule({ code: probabilityMapWGSL }), + entryPoint: 'import_level', + }, + }); + const probabilityMapExportLevelPipeline = device.createComputePipeline({ + layout: 'auto', + compute: { + module: device.createShaderModule({ code: probabilityMapWGSL }), + entryPoint: 'export_level', + }, + }); + + const probabilityMapUBOBufferSize = + 1 * 4 + // stride + 3 * 4 + // padding + 0; + const probabilityMapUBOBuffer = device.createBuffer({ + size: probabilityMapUBOBufferSize, + usage: global.GPUBufferUsage.UNIFORM | global.GPUBufferUsage.COPY_DST, + }); + const buffer_a = device.createBuffer({ + size: textureWidth * textureHeight * 4, + usage: global.GPUBufferUsage.STORAGE, + }); + const buffer_b = device.createBuffer({ + size: textureWidth * textureHeight * 4, + usage: global.GPUBufferUsage.STORAGE, + }); + + device.queue.writeBuffer(probabilityMapUBOBuffer, 0, new Int32Array([textureWidth])); + const commandEncoder = device.createCommandEncoder(); + + for (let level = 0; level < numMipLevels; level++) { + const levelWidth = textureWidth >> level; + const levelHeight = textureHeight >> level; + const pipeline = level == 0 ? probabilityMapImportLevelPipeline.getBindGroupLayout(0) : probabilityMapExportLevelPipeline.getBindGroupLayout(0); + + const probabilityMapBindGroup = device.createBindGroup({ + layout: pipeline, + entries: [ + { + // ubo + binding: 0, + resource: { buffer: probabilityMapUBOBuffer }, + }, + { + // buf_in + binding: 1, + resource: { buffer: level & 1 ? buffer_a : buffer_b }, + }, + { + // buf_out + binding: 2, + resource: { buffer: level & 1 ? buffer_b : buffer_a }, + }, + { + // tex_in / tex_out + binding: 3, + resource: texture.createView({ + format: 'bgra8unorm', + dimension: '2d', + baseMipLevel: level, + mipLevelCount: 1, + }), + }, + ], + }); + + if (level == 0) { + const passEncoder = commandEncoder.beginComputePass(); + passEncoder.setPipeline(probabilityMapImportLevelPipeline); + passEncoder.setBindGroup(0, probabilityMapBindGroup); + passEncoder.dispatchWorkgroups(Math.ceil(levelWidth / 64), levelHeight); + passEncoder.end(); + } else { + const passEncoder = commandEncoder.beginComputePass(); + passEncoder.setPipeline(probabilityMapExportLevelPipeline); + passEncoder.setBindGroup(0, probabilityMapBindGroup); + passEncoder.dispatchWorkgroups(Math.ceil(levelWidth / 64), levelHeight); + passEncoder.end(); + } + } + device.queue.submit([commandEncoder.finish()]); + } + + ////////////////////////////////////////////////////////////////////////////// + // Simulation compute pipeline + ////////////////////////////////////////////////////////////////////////////// + const simulationParams = { + simulate: true, + deltaTime: 0.04, + }; + + const simulationUBOBufferSize = + 1 * 4 + // deltaTime + 3 * 4 + // padding + 4 * 4 + // seed + 0; + const simulationUBOBuffer = device.createBuffer({ + size: simulationUBOBufferSize, + usage: global.GPUBufferUsage.UNIFORM | global.GPUBufferUsage.COPY_DST, + }); + + // const gui = new GUI(); + // gui.add(simulationParams, 'simulate'); + // gui.add(simulationParams, 'deltaTime'); + + const computePipeline = device.createComputePipeline({ + layout: 'auto', + compute: { + module: device.createShaderModule({ + code: particleWGSL, + }), + entryPoint: 'simulate', + }, + }); + const computeBindGroup = device.createBindGroup({ + layout: computePipeline.getBindGroupLayout(0), + entries: [ + { + binding: 0, + resource: { + buffer: simulationUBOBuffer, + }, + }, + { + binding: 1, + resource: { + buffer: particlesBuffer, + offset: 0, + size: numParticles * particleInstanceByteSize, + }, + }, + { + binding: 2, + resource: texture.createView(), + }, + ], + }); + + const aspect = (canvas.width as number) / (canvas.height as number); + const projection = mat4.perspective((2 * Math.PI) / 5, aspect, 1, 100.0); + const view = mat4.create(); + const mvp = mat4.create(); + + function frame() { + device.queue.writeBuffer( + simulationUBOBuffer, + 0, + new Float32Array([ + simulationParams.simulate ? simulationParams.deltaTime : 0.0, + 0.0, + 0.0, + 0.0, // padding + Math.random() * 100, + Math.random() * 100, // seed.xy + 1 + Math.random(), + 1 + Math.random(), // seed.zw + ]) + ); + + mat4.identity(view); + mat4.translate(view, vec3.fromValues(0, 0, -3), view); + mat4.rotateX(view, Math.PI * -0.2, view); + mat4.multiply(projection, view, mvp); + + // prettier-ignore + device.queue.writeBuffer( + uniformBuffer, + 0, + new Float32Array([ + // modelViewProjectionMatrix + mvp[0], mvp[1], mvp[2], mvp[3], + mvp[4], mvp[5], mvp[6], mvp[7], + mvp[8], mvp[9], mvp[10], mvp[11], + mvp[12], mvp[13], mvp[14], mvp[15], + + view[0], view[4], view[8], // right + + 0, // padding + + view[1], view[5], view[9], // up + + 0, // padding + ]) + ); + const swapChainTexture = context.getCurrentTexture(); + // prettier-ignore + renderPassDescriptor.colorAttachments[0].view = swapChainTexture.createView(); + + const commandEncoder = device.createCommandEncoder(); + { + const passEncoder = commandEncoder.beginComputePass(); + passEncoder.setPipeline(computePipeline); + passEncoder.setBindGroup(0, computeBindGroup); + passEncoder.dispatchWorkgroups(Math.ceil(numParticles / 64)); + passEncoder.end(); + } + { + const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor as never); + passEncoder.setPipeline(renderPipeline); + passEncoder.setBindGroup(0, uniformBindGroup); + passEncoder.setVertexBuffer(0, particlesBuffer); + passEncoder.setVertexBuffer(1, quadVertexBuffer); + passEncoder.draw(6, numParticles, 0, 0); + passEncoder.end(); + } + + device.queue.submit([commandEncoder.finish()]); + + (context).presentSurface(swapChainTexture); + + requestAnimationFrame(frame); + } + requestAnimationFrame(frame); +} diff --git a/tools/demo/canvas/webgpu/rotatingCube.ts b/tools/demo/canvas/webgpu/rotatingCube.ts new file mode 100644 index 000000000..54109537b --- /dev/null +++ b/tools/demo/canvas/webgpu/rotatingCube.ts @@ -0,0 +1,181 @@ +import * as wgpuMatrix from '../../wgpu-matrix/wgpu-matrix'; + +import { cubeVertexArray, cubeVertexSize, cubeUVOffset, cubePositionOffset, cubeVertexCount } from './meshes/cube'; +import { File, knownFolders } from '@nativescript/core'; + +import { Canvas } from '@nativescript/canvas'; +import type { GPUDevice } from '@nativescript/canvas'; + +export async function run(canvas: Canvas) { + const adapter = await navigator.gpu.requestAdapter(); + const device: GPUDevice = (await adapter.requestDevice()) as never; + + const context = canvas.getContext('webgpu'); + + const devicePixelRatio = window.devicePixelRatio; + // canvas.width = canvas.clientWidth * devicePixelRatio; + // canvas.height = canvas.clientHeight * devicePixelRatio; + + const capabilities = (context as any).getCapabilities(adapter); + const presentationFormat = navigator.gpu.getPreferredCanvasFormat(); //capabilities.format[0]; + const alphaMode = capabilities.alphaModes[0]; + const presentModes = capabilities.presentModes[0]; + + const appPath = knownFolders.currentApp().path; + const basicVertWGSLFile = File.fromPath(appPath + '/webgpu/shaders/basic.vert.wgsl'); + + // readText async fails on android + const basicVertWGSL = basicVertWGSLFile.readTextSync(); + const vertexPositionColorWGSLFile = File.fromPath(appPath + '/webgpu/shaders/vertexPositionColor.frag.wgsl'); + const vertexPositionColorWGSL = vertexPositionColorWGSLFile.readTextSync(); + + context.configure({ + device, + format: presentationFormat, + alphaMode, + presentModes, + }); + // Create a vertex buffer from the cube data. + const verticesBuffer = device.createBuffer({ + size: cubeVertexArray.byteLength, + usage: global.GPUBufferUsage.VERTEX, + mappedAtCreation: true, + }); + new Float32Array(verticesBuffer.getMappedRange()).set(cubeVertexArray); + + verticesBuffer.unmap(); + + const pipeline = device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: device.createShaderModule({ + code: basicVertWGSL, + }), + buffers: [ + { + arrayStride: cubeVertexSize, + attributes: [ + { + // position + shaderLocation: 0, + offset: cubePositionOffset, + format: 'float32x4', + }, + { + // uv + shaderLocation: 1, + offset: cubeUVOffset, + format: 'float32x2', + }, + ], + }, + ], + entryPoint: 'main', + }, + fragment: { + module: device.createShaderModule({ + code: vertexPositionColorWGSL, + }), + targets: [ + { + format: presentationFormat, + }, + ], + entryPoint: 'main', + }, + primitive: { + topology: 'triangle-list', + + // Backface culling since the cube is solid piece of geometry. + // Faces pointing away from the camera will be occluded by faces + // pointing toward the camera. + cullMode: 'back', + }, + + // Enable depth testing so that the fragment closest to the camera + // is rendered in front. + depthStencil: { + depthWriteEnabled: true, + depthCompare: 'less', + format: 'depth24plus', + }, + }); + + const depthTexture = device.createTexture({ + size: [(canvas.width as number) * devicePixelRatio, (canvas.height as number) * devicePixelRatio], + format: 'depth24plus', + usage: global.GPUTextureUsage.RENDER_ATTACHMENT, + }); + + const uniformBufferSize = 4 * 16; // 4x4 matrix + const uniformBuffer = device.createBuffer({ + size: uniformBufferSize, + usage: global.GPUBufferUsage.UNIFORM | global.GPUBufferUsage.COPY_DST, + }); + + const uniformBindGroup = device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [ + { + binding: 0, + resource: { + buffer: uniformBuffer, + }, + }, + ], + }); + + const renderPassDescriptor = { + colorAttachments: [ + { + view: undefined, // Assigned later + + clearValue: [0.5, 0.5, 0.5, 1.0], + loadOp: 'clear', + storeOp: 'store', + }, + ], + depthStencilAttachment: { + view: depthTexture.createView(), + + depthClearValue: 1.0, + depthLoadOp: 'clear', + depthStoreOp: 'store', + }, + }; + + const aspect = (canvas.width as number) / (canvas.height as number); + const projectionMatrix = wgpuMatrix.mat4.perspective((2 * Math.PI) / 5, aspect, 1, 100.0); + const modelViewProjectionMatrix = wgpuMatrix.mat4.create(); + + function getTransformationMatrix() { + const viewMatrix = wgpuMatrix.mat4.identity(); + wgpuMatrix.mat4.translate(viewMatrix, wgpuMatrix.vec3.fromValues(0, 0, -4), viewMatrix); + const now = Date.now() / 1000; + wgpuMatrix.mat4.rotate(viewMatrix, wgpuMatrix.vec3.fromValues(Math.sin(now), Math.cos(now), 0), 1, viewMatrix); + + wgpuMatrix.mat4.multiply(projectionMatrix, viewMatrix, modelViewProjectionMatrix); + + return modelViewProjectionMatrix; + } + + function frame() { + const framebuffer = context.getCurrentTexture(); + const transformationMatrix = getTransformationMatrix(); + device.queue.writeBuffer(uniformBuffer, 0, transformationMatrix.buffer, transformationMatrix.byteOffset, transformationMatrix.byteLength); + renderPassDescriptor.colorAttachments[0].view = framebuffer.createView(); + + const commandEncoder = device.createCommandEncoder(); + const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor as never); + passEncoder.setPipeline(pipeline); + passEncoder.setBindGroup(0, uniformBindGroup); + passEncoder.setVertexBuffer(0, verticesBuffer); + passEncoder.draw(cubeVertexCount); + passEncoder.end(); + device.queue.submit([commandEncoder.finish()]); + (context).presentSurface(framebuffer); + + requestAnimationFrame(frame); + } + requestAnimationFrame(frame); +} diff --git a/tools/demo/canvas/webgpu/shaders/basic.vert.wgsl b/tools/demo/canvas/webgpu/shaders/basic.vert.wgsl new file mode 100644 index 000000000..640524072 --- /dev/null +++ b/tools/demo/canvas/webgpu/shaders/basic.vert.wgsl @@ -0,0 +1,22 @@ +struct Uniforms { + modelViewProjectionMatrix : mat4x4f, +} +@binding(0) @group(0) var uniforms : Uniforms; + +struct VertexOutput { + @builtin(position) Position : vec4f, + @location(0) fragUV : vec2f, + @location(1) fragPosition: vec4f, +} + +@vertex +fn main( + @location(0) position : vec4f, + @location(1) uv : vec2f +) -> VertexOutput { + var output : VertexOutput; + output.Position = uniforms.modelViewProjectionMatrix * position; + output.fragUV = uv; + output.fragPosition = 0.5 * (position + vec4(1.0, 1.0, 1.0, 1.0)); + return output; +} diff --git a/tools/demo/canvas/webgpu/shaders/blur.wgsl b/tools/demo/canvas/webgpu/shaders/blur.wgsl new file mode 100644 index 000000000..ef4184f0f --- /dev/null +++ b/tools/demo/canvas/webgpu/shaders/blur.wgsl @@ -0,0 +1,81 @@ +struct Params { + filterDim : i32, + blockDim : u32, +} + +@group(0) @binding(0) var samp : sampler; +@group(0) @binding(1) var params : Params; +@group(1) @binding(1) var inputTex : texture_2d; +@group(1) @binding(2) var outputTex : texture_storage_2d; + +struct Flip { + value : u32, +} +@group(1) @binding(3) var flip : Flip; + +// This shader blurs the input texture in one direction, depending on whether +// |flip.value| is 0 or 1. +// It does so by running (128 / 4) threads per workgroup to load 128 +// texels into 4 rows of shared memory. Each thread loads a +// 4 x 4 block of texels to take advantage of the texture sampling +// hardware. +// Then, each thread computes the blur result by averaging the adjacent texel values +// in shared memory. +// Because we're operating on a subset of the texture, we cannot compute all of the +// results since not all of the neighbors are available in shared memory. +// Specifically, with 128 x 128 tiles, we can only compute and write out +// square blocks of size 128 - (filterSize - 1). We compute the number of blocks +// needed in Javascript and dispatch that amount. + +var tile : array, 4>; + +@compute @workgroup_size(32, 1, 1) +fn main( + @builtin(workgroup_id) WorkGroupID : vec3u, + @builtin(local_invocation_id) LocalInvocationID : vec3u +) { + let filterOffset = (params.filterDim - 1) / 2; + let dims = vec2i(textureDimensions(inputTex, 0)); + let baseIndex = vec2i(WorkGroupID.xy * vec2(params.blockDim, 4) + + LocalInvocationID.xy * vec2(4, 1)) + - vec2(filterOffset, 0); + + for (var r = 0; r < 4; r++) { + for (var c = 0; c < 4; c++) { + var loadIndex = baseIndex + vec2(c, r); + if (flip.value != 0u) { + loadIndex = loadIndex.yx; + } + + tile[r][4 * LocalInvocationID.x + u32(c)] = textureSampleLevel( + inputTex, + samp, + (vec2f(loadIndex) + vec2f(0.25, 0.25)) / vec2f(dims), + 0.0 + ).rgb; + } + } + + workgroupBarrier(); + + for (var r = 0; r < 4; r++) { + for (var c = 0; c < 4; c++) { + var writeIndex = baseIndex + vec2(c, r); + if (flip.value != 0) { + writeIndex = writeIndex.yx; + } + + let center = i32(4 * LocalInvocationID.x) + c; + if (center >= filterOffset && + center < 128 - filterOffset && + all(writeIndex < dims)) { + var acc = vec3(0.0, 0.0, 0.0); + for (var f = 0; f < params.filterDim; f++) { + var i = center + f - filterOffset; + acc = acc + (1.0 / f32(params.filterDim)) * tile[r][i]; + } + textureStore(outputTex, writeIndex, vec4(acc, 1.0)); + } + } + } +} diff --git a/tools/demo/canvas/webgpu/shaders/fullscreenTexturedQuad.wgsl b/tools/demo/canvas/webgpu/shaders/fullscreenTexturedQuad.wgsl new file mode 100644 index 000000000..e6d9a8992 --- /dev/null +++ b/tools/demo/canvas/webgpu/shaders/fullscreenTexturedQuad.wgsl @@ -0,0 +1,38 @@ +@group(0) @binding(0) var mySampler : sampler; +@group(0) @binding(1) var myTexture : texture_2d; + +struct VertexOutput { + @builtin(position) Position : vec4f, + @location(0) fragUV : vec2f, +} + +@vertex +fn vert_main(@builtin(vertex_index) VertexIndex : u32) -> VertexOutput { + var pos = array( + vec2( 1.0, 1.0), + vec2( 1.0, -1.0), + vec2(-1.0, -1.0), + vec2( 1.0, 1.0), + vec2(-1.0, -1.0), + vec2(-1.0, 1.0), + ); + + var uv = array( + vec2(1.0, 0.0), + vec2(1.0, 1.0), + vec2(0.0, 1.0), + vec2(1.0, 0.0), + vec2(0.0, 1.0), + vec2(0.0, 0.0), + ); + + var output : VertexOutput; + output.Position = vec4(pos[VertexIndex], 0.0, 1.0); + output.fragUV = uv[VertexIndex]; + return output; +} + +@fragment +fn frag_main(@location(0) fragUV : vec2f) -> @location(0) vec4f { + return textureSample(myTexture, mySampler, fragUV); +} \ No newline at end of file diff --git a/tools/demo/canvas/webgpu/shaders/instanced.vert.wgsl b/tools/demo/canvas/webgpu/shaders/instanced.vert.wgsl new file mode 100644 index 000000000..cc52b7e75 --- /dev/null +++ b/tools/demo/canvas/webgpu/shaders/instanced.vert.wgsl @@ -0,0 +1,24 @@ +struct Uniforms { + modelViewProjectionMatrix : array, +} + +@binding(0) @group(0) var uniforms : Uniforms; + +struct VertexOutput { + @builtin(position) Position : vec4f, + @location(0) fragUV : vec2f, + @location(1) fragPosition: vec4f, +} + +@vertex +fn main( + @builtin(instance_index) instanceIdx : u32, + @location(0) position : vec4f, + @location(1) uv : vec2f +) -> VertexOutput { + var output : VertexOutput; + output.Position = uniforms.modelViewProjectionMatrix[instanceIdx] * position; + output.fragUV = uv; + output.fragPosition = 0.5 * (position + vec4(1.0)); + return output; +} \ No newline at end of file diff --git a/tools/demo/canvas/webgpu/shaders/particle.wgsl b/tools/demo/canvas/webgpu/shaders/particle.wgsl new file mode 100644 index 000000000..d405e7d09 --- /dev/null +++ b/tools/demo/canvas/webgpu/shaders/particle.wgsl @@ -0,0 +1,136 @@ +//////////////////////////////////////////////////////////////////////////////// +// Utilities +//////////////////////////////////////////////////////////////////////////////// +var rand_seed : vec2f; + +fn init_rand(invocation_id : u32, seed : vec4f) { + rand_seed = seed.xz; + rand_seed = fract(rand_seed * cos(35.456 + f32(invocation_id) * seed.yw)); + rand_seed = fract(rand_seed * cos(41.235 + f32(invocation_id) * seed.xw)); +} + +fn rand() -> f32 { + rand_seed.x = fract(cos(dot(rand_seed, vec2f(23.14077926, 232.61690225))) * 136.8168); + rand_seed.y = fract(cos(dot(rand_seed, vec2f(54.47856553, 345.84153136))) * 534.7645); + return rand_seed.y; +} + +//////////////////////////////////////////////////////////////////////////////// +// Vertex shader +//////////////////////////////////////////////////////////////////////////////// +struct RenderParams { + modelViewProjectionMatrix : mat4x4f, + right : vec3f, + up : vec3f +} +@binding(0) @group(0) var render_params : RenderParams; + +struct VertexInput { + @location(0) position : vec3f, + @location(1) color : vec4f, + @location(2) quad_pos : vec2f, // -1..+1 +} + +struct VertexOutput { + @builtin(position) position : vec4f, + @location(0) color : vec4f, + @location(1) quad_pos : vec2f, // -1..+1 +} + +@vertex +fn vs_main(in : VertexInput) -> VertexOutput { + var quad_pos = mat2x3f(render_params.right, render_params.up) * in.quad_pos; + var position = in.position + quad_pos * 0.01; + var out : VertexOutput; + out.position = render_params.modelViewProjectionMatrix * vec4f(position, 1.0); + out.color = in.color; + out.quad_pos = in.quad_pos; + return out; +} + +//////////////////////////////////////////////////////////////////////////////// +// Fragment shader +//////////////////////////////////////////////////////////////////////////////// +@fragment +fn fs_main(in : VertexOutput) -> @location(0) vec4f { + var color = in.color; + // Apply a circular particle alpha mask + color.a = color.a * max(1.0 - length(in.quad_pos), 0.0); + return color; +} + +//////////////////////////////////////////////////////////////////////////////// +// Simulation Compute shader +//////////////////////////////////////////////////////////////////////////////// +struct SimulationParams { + deltaTime : f32, + seed : vec4f, +} + +struct Particle { + position : vec3f, + lifetime : f32, + color : vec4f, + velocity : vec3f, +} + +struct Particles { + particles : array, +} + +@binding(0) @group(0) var sim_params : SimulationParams; +@binding(1) @group(0) var data : Particles; +@binding(2) @group(0) var texture : texture_2d; + +@compute @workgroup_size(64) +fn simulate(@builtin(global_invocation_id) global_invocation_id : vec3u) { + let idx = global_invocation_id.x; + + init_rand(idx, sim_params.seed); + + var particle = data.particles[idx]; + + // Apply gravity + particle.velocity.z = particle.velocity.z - sim_params.deltaTime * 0.5; + + // Basic velocity integration + particle.position = particle.position + sim_params.deltaTime * particle.velocity; + + // Age each particle. Fade out before vanishing. + particle.lifetime = particle.lifetime - sim_params.deltaTime; + particle.color.a = smoothstep(0.0, 0.5, particle.lifetime); + + // If the lifetime has gone negative, then the particle is dead and should be + // respawned. + if (particle.lifetime < 0.0) { + // Use the probability map to find where the particle should be spawned. + // Starting with the 1x1 mip level. + var coord = vec2i(0); + for (var level = i32(textureNumLevels(texture) - 1); level > 0; level--) { + // Load the probability value from the mip-level + // Generate a random number and using the probabilty values, pick the + // next texel in the next largest mip level: + // + // 0.0 probabilites.r probabilites.g probabilites.b 1.0 + // | | | | | + // | TOP-LEFT | TOP-RIGHT | BOTTOM-LEFT | BOTTOM_RIGHT | + // + let probabilites = textureLoad(texture, coord, level); + let value = vec4f(rand()); + let mask = (value >= vec4f(0.0, probabilites.xyz)) & (value < probabilites); + coord = coord * 2; + coord.x = coord.x + select(0, 1, any(mask.yw)); // x y + coord.y = coord.y + select(0, 1, any(mask.zw)); // z w + } + let uv = vec2f(coord) / vec2f(textureDimensions(texture)); + particle.position = vec3f((uv - 0.5) * 3.0 * vec2f(1.0, -1.0), 0.0); + particle.color = textureLoad(texture, coord, 0); + particle.velocity.x = (rand() - 0.5) * 0.1; + particle.velocity.y = (rand() - 0.5) * 0.1; + particle.velocity.z = rand() * 0.3; + particle.lifetime = 0.5 + rand() * 3.0; + } + + // Store the new particle value + data.particles[idx] = particle; +} \ No newline at end of file diff --git a/tools/demo/canvas/webgpu/shaders/probabilityMap.wgsl b/tools/demo/canvas/webgpu/shaders/probabilityMap.wgsl new file mode 100644 index 000000000..0cf341885 --- /dev/null +++ b/tools/demo/canvas/webgpu/shaders/probabilityMap.wgsl @@ -0,0 +1,54 @@ +struct UBO { + width : u32, +} + +struct Buffer { + weights : array, +} + +@binding(0) @group(0) var ubo : UBO; +@binding(1) @group(0) var buf_in : Buffer; +@binding(2) @group(0) var buf_out : Buffer; +@binding(3) @group(0) var tex_in : texture_2d; +@binding(3) @group(0) var tex_out : texture_storage_2d; + + +//////////////////////////////////////////////////////////////////////////////// +// import_level +// +// Loads the alpha channel from a texel of the source image, and writes it to +// the buf_out.weights. +//////////////////////////////////////////////////////////////////////////////// +@compute @workgroup_size(64) +fn import_level(@builtin(global_invocation_id) coord : vec3u) { + _ = &buf_in; + let offset = coord.x + coord.y * ubo.width; + buf_out.weights[offset] = textureLoad(tex_in, vec2i(coord.xy), 0).w; +} + +//////////////////////////////////////////////////////////////////////////////// +// export_level +// +// Loads 4 f32 weight values from buf_in.weights, and stores summed value into +// buf_out.weights, along with the calculated 'probabilty' vec4 values into the +// mip level of tex_out. See simulate() in particle.wgsl to understand the +// probability logic. +//////////////////////////////////////////////////////////////////////////////// +@compute @workgroup_size(64) +fn export_level(@builtin(global_invocation_id) coord : vec3u) { + if (all(coord.xy < vec2u(textureDimensions(tex_out)))) { + let dst_offset = coord.x + coord.y * ubo.width; + let src_offset = coord.x*2u + coord.y*2u * ubo.width; + + let a = buf_in.weights[src_offset + 0u]; + let b = buf_in.weights[src_offset + 1u]; + let c = buf_in.weights[src_offset + 0u + ubo.width]; + let d = buf_in.weights[src_offset + 1u + ubo.width]; + let sum = dot(vec4f(a, b, c, d), vec4f(1.0)); + + buf_out.weights[dst_offset] = sum / 4.0; + + let probabilities = vec4f(a, a+b, a+b+c, sum) / max(sum, 0.0001); + textureStore(tex_out, vec2i(coord.xy), probabilities); + } +} \ No newline at end of file diff --git a/tools/demo/canvas/webgpu/shaders/sampleCubemap.frag.wgsl b/tools/demo/canvas/webgpu/shaders/sampleCubemap.frag.wgsl new file mode 100644 index 000000000..1567a4224 --- /dev/null +++ b/tools/demo/canvas/webgpu/shaders/sampleCubemap.frag.wgsl @@ -0,0 +1,18 @@ +@group(0) @binding(1) var mySampler: sampler; +@group(0) @binding(2) var myTexture: texture_cube; + +@fragment +fn main( + @location(0) fragUV: vec2f, + @location(1) fragPosition: vec4f +) -> @location(0) vec4f { + // Our camera and the skybox cube are both centered at (0, 0, 0) + // so we can use the cube geometry position to get viewing vector to sample + // the cube texture. The magnitude of the vector doesn't matter. + var cubemapVec = fragPosition.xyz - vec3(0.5); + // When viewed from the inside, cubemaps are left-handed (z away from viewer), + // but common camera matrix convention results in a right-handed world space + // (z toward viewer), so we have to flip it. + cubemapVec.z *= -1.0; + return textureSample(myTexture, mySampler, cubemapVec); +} \ No newline at end of file diff --git a/tools/demo/canvas/webgpu/shaders/sampleTextureMixColor.frag.wgsl b/tools/demo/canvas/webgpu/shaders/sampleTextureMixColor.frag.wgsl new file mode 100644 index 000000000..8f0165c3c --- /dev/null +++ b/tools/demo/canvas/webgpu/shaders/sampleTextureMixColor.frag.wgsl @@ -0,0 +1,10 @@ +@group(0) @binding(1) var mySampler: sampler; +@group(0) @binding(2) var myTexture: texture_2d; + +@fragment +fn main( + @location(0) fragUV: vec2f, + @location(1) fragPosition: vec4f +) -> @location(0) vec4f { + return textureSample(myTexture, mySampler, fragUV) * fragPosition; +} diff --git a/tools/demo/canvas/webgpu/shaders/sprite.wgsl b/tools/demo/canvas/webgpu/shaders/sprite.wgsl new file mode 100644 index 000000000..b71f8b898 --- /dev/null +++ b/tools/demo/canvas/webgpu/shaders/sprite.wgsl @@ -0,0 +1,31 @@ +struct VertexOutput { + @builtin(position) position : vec4f, + @location(4) color : vec4f, +} + +@vertex +fn vert_main( + @location(0) a_particlePos : vec2f, + @location(1) a_particleVel : vec2f, + @location(2) a_pos : vec2f +) -> VertexOutput { + let angle = -atan2(a_particleVel.x, a_particleVel.y); + let pos = vec2( + (a_pos.x * cos(angle)) - (a_pos.y * sin(angle)), + (a_pos.x * sin(angle)) + (a_pos.y * cos(angle)) + ); + + var output : VertexOutput; + output.position = vec4(pos + a_particlePos, 0.0, 1.0); + output.color = vec4( + 1.0 - sin(angle + 1.0) - a_particleVel.y, + pos.x * 100.0 - a_particleVel.y + 0.1, + a_particleVel.x + cos(angle + 0.5), + 1.0); + return output; +} + +@fragment +fn frag_main(@location(4) color : vec4f) -> @location(0) vec4f { + return color; +} \ No newline at end of file diff --git a/tools/demo/canvas/webgpu/shaders/updateSprites.wgsl b/tools/demo/canvas/webgpu/shaders/updateSprites.wgsl new file mode 100644 index 000000000..dcdc92750 --- /dev/null +++ b/tools/demo/canvas/webgpu/shaders/updateSprites.wgsl @@ -0,0 +1,83 @@ +struct Particle { + pos : vec2f, + vel : vec2f, +} +struct SimParams { + deltaT : f32, + rule1Distance : f32, + rule2Distance : f32, + rule3Distance : f32, + rule1Scale : f32, + rule2Scale : f32, + rule3Scale : f32, +} +struct Particles { + particles : array, +} +@binding(0) @group(0) var params : SimParams; +@binding(1) @group(0) var particlesA : Particles; +@binding(2) @group(0) var particlesB : Particles; + +// https://github.com/austinEng/Project6-Vulkan-Flocking/blob/master/data/shaders/computeparticles/particle.comp +@compute @workgroup_size(64) +fn main(@builtin(global_invocation_id) GlobalInvocationID : vec3u) { + var index = GlobalInvocationID.x; + + var vPos = particlesA.particles[index].pos; + var vVel = particlesA.particles[index].vel; + var cMass = vec2(0.0); + var cVel = vec2(0.0); + var colVel = vec2(0.0); + var cMassCount = 0u; + var cVelCount = 0u; + var pos : vec2f; + var vel : vec2f; + + for (var i = 0u; i < arrayLength(&particlesA.particles); i++) { + if (i == index) { + continue; + } + + pos = particlesA.particles[i].pos.xy; + vel = particlesA.particles[i].vel.xy; + if (distance(pos, vPos) < params.rule1Distance) { + cMass += pos; + cMassCount++; + } + if (distance(pos, vPos) < params.rule2Distance) { + colVel -= pos - vPos; + } + if (distance(pos, vPos) < params.rule3Distance) { + cVel += vel; + cVelCount++; + } + } + if (cMassCount > 0) { + cMass = (cMass / vec2(f32(cMassCount))) - vPos; + } + if (cVelCount > 0) { + cVel /= f32(cVelCount); + } + vVel += (cMass * params.rule1Scale) + (colVel * params.rule2Scale) + (cVel * params.rule3Scale); + + // clamp velocity for a more pleasing simulation + vVel = normalize(vVel) * clamp(length(vVel), 0.0, 0.1); + // kinematic update + vPos = vPos + (vVel * params.deltaT); + // Wrap around boundary + if (vPos.x < -1.0) { + vPos.x = 1.0; + } + if (vPos.x > 1.0) { + vPos.x = -1.0; + } + if (vPos.y < -1.0) { + vPos.y = 1.0; + } + if (vPos.y > 1.0) { + vPos.y = -1.0; + } + // Write back + particlesB.particles[index].pos = vPos; + particlesB.particles[index].vel = vVel; +} \ No newline at end of file diff --git a/tools/demo/canvas/webgpu/shaders/vertexPositionColor.frag.wgsl b/tools/demo/canvas/webgpu/shaders/vertexPositionColor.frag.wgsl new file mode 100644 index 000000000..fec300855 --- /dev/null +++ b/tools/demo/canvas/webgpu/shaders/vertexPositionColor.frag.wgsl @@ -0,0 +1,7 @@ +@fragment +fn main( + @location(0) fragUV: vec2f, + @location(1) fragPosition: vec4f +) -> @location(0) vec4f { + return fragPosition; +} \ No newline at end of file diff --git a/tools/demo/canvas/webgpu/texturedCube.ts b/tools/demo/canvas/webgpu/texturedCube.ts new file mode 100644 index 000000000..c12dc56d0 --- /dev/null +++ b/tools/demo/canvas/webgpu/texturedCube.ts @@ -0,0 +1,210 @@ +import { Canvas, GPUBufferUsage, GPUCanvasContext, GPUDevice, GPUTextureUsage, GPUTexture, ImageAsset } from '@nativescript/canvas'; + +import { mat4, vec3 } from '../../wgpu-matrix/wgpu-matrix'; + +import { cubeVertexArray, cubeVertexSize, cubeUVOffset, cubePositionOffset, cubeVertexCount } from './meshes/cube'; +import { knownFolders, File } from '@nativescript/core'; + +export async function run(canvas: Canvas) { + const adapter = await navigator.gpu?.requestAdapter(); + const device: GPUDevice = (await adapter?.requestDevice()) as never; + + const context: GPUCanvasContext = canvas.getContext('webgpu') as never; + + const devicePixelRatio = window.devicePixelRatio; + // canvas.width = canvas.clientWidth * devicePixelRatio; + // canvas.height = canvas.clientHeight * devicePixelRatio; + const presentationFormat = navigator.gpu.getPreferredCanvasFormat(); + + const appPath = knownFolders.currentApp().path; + const basicVertWGSLFile = File.fromPath(appPath + '/webgpu/shaders/basic.vert.wgsl'); + + // readText async fails on android + const basicVertWGSL = basicVertWGSLFile.readTextSync(); + + const sampleTextureMixColorWGSLFile = File.fromPath(appPath + '/webgpu/shaders/sampleTextureMixColor.frag.wgsl'); + + const sampleTextureMixColorWGSL = sampleTextureMixColorWGSLFile.readTextSync(); + + context.configure({ + device, + format: presentationFormat, + alphaMode: 'postmultiplied', + }); + + // Create a vertex buffer from the cube data. + const verticesBuffer = device.createBuffer({ + size: cubeVertexArray.byteLength, + usage: global.GPUBufferUsage.VERTEX, + mappedAtCreation: true, + }); + new Float32Array(verticesBuffer.getMappedRange()).set(cubeVertexArray); + verticesBuffer.unmap(); + + const pipeline = device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: device.createShaderModule({ + code: basicVertWGSL, + }), + buffers: [ + { + arrayStride: cubeVertexSize, + attributes: [ + { + // position + shaderLocation: 0, + offset: cubePositionOffset, + format: 'float32x4', + }, + { + // uv + shaderLocation: 1, + offset: cubeUVOffset, + format: 'float32x2', + }, + ], + }, + ], + entryPoint: 'main', + }, + fragment: { + module: device.createShaderModule({ + code: sampleTextureMixColorWGSL, + }), + targets: [ + { + format: presentationFormat, + }, + ], + entryPoint: 'main', + }, + primitive: { + topology: 'triangle-list', + + // Backface culling since the cube is solid piece of geometry. + // Faces pointing away from the camera will be occluded by faces + // pointing toward the camera. + cullMode: 'back', + }, + + // Enable depth testing so that the fragment closest to the camera + // is rendered in front. + depthStencil: { + depthWriteEnabled: true, + depthCompare: 'less', + format: 'depth24plus', + }, + }); + + const depthTexture = device.createTexture({ + size: [(canvas.width as number) * devicePixelRatio, (canvas.height as number) * devicePixelRatio], + format: 'depth24plus', + usage: GPUTextureUsage.RENDER_ATTACHMENT, + }); + + const uniformBufferSize = 4 * 16; // 4x4 matrix + const uniformBuffer = device.createBuffer({ + size: uniformBufferSize, + usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST, + }); + + // Fetch the image and upload it into a GPUTexture. + let cubeTexture: GPUTexture; + { + // const response = await fetch('../../assets/img/Di-3d.png'); + // const imageBitmap = await createImageBitmap(await response.blob()); + + const imageBitmap = new ImageAsset(); + imageBitmap.fromFileSync('~/assets/file-assets/webgpu/webgpu.png'); + + + cubeTexture = device.createTexture({ + size: [imageBitmap.width, imageBitmap.height, 1], + format: 'rgba8unorm', + usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, + }); + device.queue.copyExternalImageToTexture({ source: imageBitmap }, { texture: cubeTexture }, [imageBitmap.width, imageBitmap.height]); + } + + // Create a sampler with linear filtering for smooth interpolation. + const sampler = device.createSampler({ + magFilter: 'linear', + minFilter: 'linear', + }); + + const uniformBindGroup = device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [ + { + binding: 0, + resource: { + buffer: uniformBuffer, + }, + }, + { + binding: 1, + resource: sampler, + }, + { + binding: 2, + resource: cubeTexture.createView(), + }, + ], + }); + + const renderPassDescriptor = { + colorAttachments: [ + { + view: undefined, // Assigned later + + clearValue: [0.5, 0.5, 0.5, 1.0], + loadOp: 'clear', + storeOp: 'store', + }, + ], + depthStencilAttachment: { + view: depthTexture.createView(), + + depthClearValue: 1.0, + depthLoadOp: 'clear', + depthStoreOp: 'store', + }, + }; + + const aspect = (canvas.width as number) / (canvas.height as number); + const projectionMatrix = mat4.perspective((2 * Math.PI) / 5, aspect, 1, 100.0); + const modelViewProjectionMatrix = mat4.create(); + + function getTransformationMatrix() { + const viewMatrix = mat4.identity(); + mat4.translate(viewMatrix, vec3.fromValues(0, 0, -4), viewMatrix); + const now = Date.now() / 1000; + mat4.rotate(viewMatrix, vec3.fromValues(Math.sin(now), Math.cos(now), 0), 1, viewMatrix); + + mat4.multiply(projectionMatrix, viewMatrix, modelViewProjectionMatrix); + + return modelViewProjectionMatrix; + } + + function frame() { + const transformationMatrix = getTransformationMatrix(); + device.queue.writeBuffer(uniformBuffer, 0, transformationMatrix.buffer, transformationMatrix.byteOffset, transformationMatrix.byteLength); + const texture = context.getCurrentTexture(); + renderPassDescriptor.colorAttachments[0].view = texture.createView(); + + const commandEncoder = device.createCommandEncoder(); + const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor as never); + passEncoder.setPipeline(pipeline); + passEncoder.setBindGroup(0, uniformBindGroup); + passEncoder.setVertexBuffer(0, verticesBuffer); + passEncoder.draw(cubeVertexCount); + passEncoder.end(); + device.queue.submit([commandEncoder.finish()]); + + (context).presentSurface(texture); + + requestAnimationFrame(frame); + } + requestAnimationFrame(frame); +} diff --git a/tools/demo/wgpu-matrix/mat3-impl.ts b/tools/demo/wgpu-matrix/mat3-impl.ts new file mode 100644 index 000000000..5a4d6a972 --- /dev/null +++ b/tools/demo/wgpu-matrix/mat3-impl.ts @@ -0,0 +1,776 @@ +/* + * Copyright 2022 Gregg Tavares + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +import * as utils from './utils'; +import { QuatArg } from './quat'; +import { Mat3Arg, Mat3Type } from './mat3'; +import { Mat4Arg } from './mat4'; +import { Vec2Arg } from './vec2'; +import { getAPI as getVec2API } from './vec2-impl'; +import { BaseArgType } from './types'; + +export { Mat3Arg, Mat3Type }; + +type Mat3Ctor = new (n: number) => T; + +/** + * Generates a typed API for Mat3 + * */ +function getAPIImpl(Ctor: Mat3Ctor) { + const vec2 = getVec2API(Ctor); + +/** + * Create a Mat3 from values + * + * Note: Since passing in a raw JavaScript array + * is valid in all circumstances, if you want to + * force a JavaScript array into a Mat3's specified type + * it would be faster to use + * + * ``` + * const m = mat3.clone(someJSArray); + * ``` + * + * @param v0 - value for element 0 + * @param v1 - value for element 1 + * @param v2 - value for element 2 + * @param v3 - value for element 3 + * @param v4 - value for element 4 + * @param v5 - value for element 5 + * @param v6 - value for element 6 + * @param v7 - value for element 7 + * @param v8 - value for element 8 + * @returns matrix created from values. + */ +function create( + v0?: number, v1?: number, v2?: number, + v3?: number, v4?: number, v5?: number, + v6?: number, v7?: number, v8?: number) { + const newDst = new Ctor(12); + // to make the array homogenous + newDst[3] = 0; + newDst[7] = 0; + newDst[11] = 0; + + if (v0 !== undefined) { + newDst[0] = v0; + if (v1 !== undefined) { + newDst[1] = v1; + if (v2 !== undefined) { + newDst[2] = v2; + if (v3 !== undefined) { + newDst[4] = v3; + if (v4 !== undefined) { + newDst[5] = v4; + if (v5 !== undefined) { + newDst[6] = v5; + if (v6 !== undefined) { + newDst[8] = v6; + if (v7 !== undefined) { + newDst[9] = v7; + if (v8 !== undefined) { + newDst[10] = v8; + } + } + } + } + } + } + } + } + } + + return newDst; +} + +/** + * Sets the values of a Mat3 + * Also see {@link mat3.create} and {@link mat3.copy} + * + * @param v0 - value for element 0 + * @param v1 - value for element 1 + * @param v2 - value for element 2 + * @param v3 - value for element 3 + * @param v4 - value for element 4 + * @param v5 - value for element 5 + * @param v6 - value for element 6 + * @param v7 - value for element 7 + * @param v8 - value for element 8 + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns Mat3 set from values. + */ +function set( + v0: number, v1: number, v2: number, + v3: number, v4: number, v5: number, + v6: number, v7: number, v8: number, dst?: T) { + const newDst = (dst ?? new Ctor(12)) as T; + + newDst[0] = v0; newDst[1] = v1; newDst[ 2] = v2; newDst[ 3] = 0; + newDst[4] = v3; newDst[5] = v4; newDst[ 6] = v5; newDst[ 7] = 0; + newDst[8] = v6; newDst[9] = v7; newDst[10] = v8; newDst[11] = 0; + + return newDst; +} + +/** + * Creates a Mat3 from the upper left 3x3 part of a Mat4 + * @param m4 - source matrix + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns Mat3 made from m4 + */ +function fromMat4(m4: Mat4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(12)) as T; + newDst[0] = m4[0]; newDst[1] = m4[1]; newDst[ 2] = m4[ 2]; newDst[ 3] = 0; + newDst[4] = m4[4]; newDst[5] = m4[5]; newDst[ 6] = m4[ 6]; newDst[ 7] = 0; + newDst[8] = m4[8]; newDst[9] = m4[9]; newDst[10] = m4[10]; newDst[11] = 0; + return newDst; +} + +/** + * Creates a Mat3 rotation matrix from a quaternion + * @param q - quaternion to create matrix from + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns Mat3 made from q + */ +function fromQuat(q: QuatArg, dst?: T) { + const newDst = (dst ?? new Ctor(12)) as T; + + const x = q[0]; const y = q[1]; const z = q[2]; const w = q[3]; + const x2 = x + x; const y2 = y + y; const z2 = z + z; + + const xx = x * x2; + const yx = y * x2; + const yy = y * y2; + const zx = z * x2; + const zy = z * y2; + const zz = z * z2; + const wx = w * x2; + const wy = w * y2; + const wz = w * z2; + + newDst[ 0] = 1 - yy - zz; newDst[ 1] = yx + wz; newDst[ 2] = zx - wy; newDst[ 3] = 0; + newDst[ 4] = yx - wz; newDst[ 5] = 1 - xx - zz; newDst[ 6] = zy + wx; newDst[ 7] = 0; + newDst[ 8] = zx + wy; newDst[ 9] = zy - wx; newDst[10] = 1 - xx - yy; newDst[11] = 0; + + return newDst; +} + +/** + * Negates a matrix. + * @param m - The matrix. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns -m. + */ +function negate(m: Mat3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(12)) as T; + + newDst[ 0] = -m[ 0]; newDst[ 1] = -m[ 1]; newDst[ 2] = -m[ 2]; + newDst[ 4] = -m[ 4]; newDst[ 5] = -m[ 5]; newDst[ 6] = -m[ 6]; + newDst[ 8] = -m[ 8]; newDst[ 9] = -m[ 9]; newDst[10] = -m[10]; + + return newDst; +} + +/** + * Copies a matrix. (same as {@link mat3.clone}) + * Also see {@link mat3.create} and {@link mat3.set} + * @param m - The matrix. + * @param dst - The matrix. If not passed a new one is created. + * @returns A copy of m. + */ +function copy(m: Mat3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(12)) as T; + + newDst[ 0] = m[ 0]; newDst[ 1] = m[ 1]; newDst[ 2] = m[ 2]; + newDst[ 4] = m[ 4]; newDst[ 5] = m[ 5]; newDst[ 6] = m[ 6]; + newDst[ 8] = m[ 8]; newDst[ 9] = m[ 9]; newDst[10] = m[10]; + + return newDst; +} + +/** + * Copies a matrix (same as {@link mat3.copy}) + * Also see {@link mat3.create} and {@link mat3.set} + * @param m - The matrix. + * @param dst - The matrix. If not passed a new one is created. + * @returns A copy of m. + */ +const clone = copy; + +/** + * Check if 2 matrices are approximately equal + * @param a Operand matrix. + * @param b Operand matrix. + * @returns true if matrices are approximately equal + */ +function equalsApproximately(a: Mat3Arg, b: Mat3Arg): boolean { + return Math.abs(a[ 0] - b[ 0]) < utils.EPSILON && + Math.abs(a[ 1] - b[ 1]) < utils.EPSILON && + Math.abs(a[ 2] - b[ 2]) < utils.EPSILON && + Math.abs(a[ 4] - b[ 4]) < utils.EPSILON && + Math.abs(a[ 5] - b[ 5]) < utils.EPSILON && + Math.abs(a[ 6] - b[ 6]) < utils.EPSILON && + Math.abs(a[ 8] - b[ 8]) < utils.EPSILON && + Math.abs(a[ 9] - b[ 9]) < utils.EPSILON && + Math.abs(a[10] - b[10]) < utils.EPSILON; +} + +/** + * Check if 2 matrices are exactly equal + * @param a Operand matrix. + * @param b Operand matrix. + * @returns true if matrices are exactly equal + */ +function equals(a: Mat3Arg, b: Mat3Arg): boolean { + return a[ 0] === b[ 0] && + a[ 1] === b[ 1] && + a[ 2] === b[ 2] && + a[ 4] === b[ 4] && + a[ 5] === b[ 5] && + a[ 6] === b[ 6] && + a[ 8] === b[ 8] && + a[ 9] === b[ 9] && + a[10] === b[10]; +} + +/** + * Creates a 3-by-3 identity matrix. + * + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns A 3-by-3 identity matrix. + */ +function identity(dst?: T) { + const newDst = (dst ?? new Ctor(12)) as T; + + newDst[ 0] = 1; newDst[ 1] = 0; newDst[ 2] = 0; + newDst[ 4] = 0; newDst[ 5] = 1; newDst[ 6] = 0; + newDst[ 8] = 0; newDst[ 9] = 0; newDst[10] = 1; + + return newDst; +} + +/** + * Takes the transpose of a matrix. + * @param m - The matrix. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The transpose of m. + */ +function transpose(m: Mat3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(12)) as T; + if (newDst === m) { + let t: number; + + // 0 1 2 + // 4 5 6 + // 8 9 10 + + t = m[1]; + m[1] = m[4]; + m[4] = t; + + t = m[2]; + m[2] = m[8]; + m[8] = t; + + t = m[6]; + m[6] = m[9]; + m[9] = t; + + return newDst; + } + + const m00 = m[0 * 4 + 0]; + const m01 = m[0 * 4 + 1]; + const m02 = m[0 * 4 + 2]; + const m10 = m[1 * 4 + 0]; + const m11 = m[1 * 4 + 1]; + const m12 = m[1 * 4 + 2]; + const m20 = m[2 * 4 + 0]; + const m21 = m[2 * 4 + 1]; + const m22 = m[2 * 4 + 2]; + + newDst[ 0] = m00; newDst[ 1] = m10; newDst[ 2] = m20; + newDst[ 4] = m01; newDst[ 5] = m11; newDst[ 6] = m21; + newDst[ 8] = m02; newDst[ 9] = m12; newDst[10] = m22; + + return newDst; +} + +/** + * Computes the inverse of a 3-by-3 matrix. + * @param m - The matrix. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The inverse of m. + */ +function inverse(m: Mat3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(12)) as T; + + const m00 = m[0 * 4 + 0]; + const m01 = m[0 * 4 + 1]; + const m02 = m[0 * 4 + 2]; + const m10 = m[1 * 4 + 0]; + const m11 = m[1 * 4 + 1]; + const m12 = m[1 * 4 + 2]; + const m20 = m[2 * 4 + 0]; + const m21 = m[2 * 4 + 1]; + const m22 = m[2 * 4 + 2]; + + const b01 = m22 * m11 - m12 * m21; + const b11 = -m22 * m10 + m12 * m20; + const b21 = m21 * m10 - m11 * m20; + + const invDet = 1 / (m00 * b01 + m01 * b11 + m02 * b21); + + newDst[ 0] = b01 * invDet; + newDst[ 1] = (-m22 * m01 + m02 * m21) * invDet; + newDst[ 2] = ( m12 * m01 - m02 * m11) * invDet; + newDst[ 4] = b11 * invDet; + newDst[ 5] = ( m22 * m00 - m02 * m20) * invDet; + newDst[ 6] = (-m12 * m00 + m02 * m10) * invDet; + newDst[ 8] = b21 * invDet; + newDst[ 9] = (-m21 * m00 + m01 * m20) * invDet; + newDst[10] = ( m11 * m00 - m01 * m10) * invDet; + + return newDst; +} + +/** + * Compute the determinant of a matrix + * @param m - the matrix + * @returns the determinant + */ +function determinant(m: Mat3Arg): number { + const m00 = m[0 * 4 + 0]; + const m01 = m[0 * 4 + 1]; + const m02 = m[0 * 4 + 2]; + const m10 = m[1 * 4 + 0]; + const m11 = m[1 * 4 + 1]; + const m12 = m[1 * 4 + 2]; + const m20 = m[2 * 4 + 0]; + const m21 = m[2 * 4 + 1]; + const m22 = m[2 * 4 + 2]; + + return m00 * (m11 * m22 - m21 * m12) - + m10 * (m01 * m22 - m21 * m02) + + m20 * (m01 * m12 - m11 * m02); +} + +/** + * Computes the inverse of a 3-by-3 matrix. (same as inverse) + * @param m - The matrix. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The inverse of m. + */ +const invert = inverse; + +/** + * Multiplies two 3-by-3 matrices with a on the left and b on the right + * @param a - The matrix on the left. + * @param b - The matrix on the right. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The matrix product of a and b. + */ +function multiply(a: Mat3Arg, b: Mat3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(12)) as T; + + const a00 = a[0]; + const a01 = a[1]; + const a02 = a[2]; + const a10 = a[ 4 + 0]; + const a11 = a[ 4 + 1]; + const a12 = a[ 4 + 2]; + const a20 = a[ 8 + 0]; + const a21 = a[ 8 + 1]; + const a22 = a[ 8 + 2]; + const b00 = b[0]; + const b01 = b[1]; + const b02 = b[2]; + const b10 = b[ 4 + 0]; + const b11 = b[ 4 + 1]; + const b12 = b[ 4 + 2]; + const b20 = b[ 8 + 0]; + const b21 = b[ 8 + 1]; + const b22 = b[ 8 + 2]; + + newDst[ 0] = a00 * b00 + a10 * b01 + a20 * b02; + newDst[ 1] = a01 * b00 + a11 * b01 + a21 * b02; + newDst[ 2] = a02 * b00 + a12 * b01 + a22 * b02; + newDst[ 4] = a00 * b10 + a10 * b11 + a20 * b12; + newDst[ 5] = a01 * b10 + a11 * b11 + a21 * b12; + newDst[ 6] = a02 * b10 + a12 * b11 + a22 * b12; + newDst[ 8] = a00 * b20 + a10 * b21 + a20 * b22; + newDst[ 9] = a01 * b20 + a11 * b21 + a21 * b22; + newDst[10] = a02 * b20 + a12 * b21 + a22 * b22; + + return newDst; +} + +/** + * Multiplies two 3-by-3 matrices with a on the left and b on the right (same as multiply) + * @param a - The matrix on the left. + * @param b - The matrix on the right. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The matrix product of a and b. + */ +const mul = multiply; + +/** + * Sets the translation component of a 3-by-3 matrix to the given + * vector. + * @param a - The matrix. + * @param v - The vector. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The matrix with translation set. + */ +function setTranslation(a: Mat3Arg, v: Vec2Arg, dst?: T) { + const newDst = (dst ?? identity()) as T; + if (a !== newDst) { + newDst[ 0] = a[ 0]; + newDst[ 1] = a[ 1]; + newDst[ 2] = a[ 2]; + newDst[ 4] = a[ 4]; + newDst[ 5] = a[ 5]; + newDst[ 6] = a[ 6]; + } + newDst[ 8] = v[0]; + newDst[ 9] = v[1]; + newDst[10] = 1; + return newDst; +} + +/** + * Returns the translation component of a 3-by-3 matrix as a vector with 3 + * entries. + * @param m - The matrix. + * @param dst - vector to hold result. If not passed a new one is created. + * @returns The translation component of m. + */ +function getTranslation(m: Mat3Arg, dst?: T) { + const newDst = (dst ?? vec2.create()) as T; + newDst[0] = m[8]; + newDst[1] = m[9]; + return newDst; +} + +/** + * Returns an axis of a 3x3 matrix as a vector with 2 entries + * @param m - The matrix. + * @param axis - The axis 0 = x, 1 = y, + * @returns The axis component of m. + */ +function getAxis(m: Mat3Arg, axis: number, dst?: T) { + const newDst = (dst ?? vec2.create()) as T; + const off = axis * 4; + newDst[0] = m[off + 0]; + newDst[1] = m[off + 1]; + return newDst; +} + +/** + * Sets an axis of a 3x3 matrix as a vector with 2 entries + * @param m - The matrix. + * @param v - the axis vector + * @param axis - The axis 0 = x, 1 = y; + * @param dst - The matrix to set. If not passed a new one is created. + * @returns The matrix with axis set. + */ +function setAxis(m: Mat3Arg, v: Vec2Arg, axis: number, dst?: T) { + const newDst = (dst === m ? m : copy(m, dst)) as T; + + const off = axis * 4; + newDst[off + 0] = v[0]; + newDst[off + 1] = v[1]; + return newDst; +} + +///** +// * Returns the scaling component of the matrix +// * @param m - The Matrix +// * @param dst - The vector to set. If not passed a new one is created. +// */ +function getScaling(m: Mat3Arg, dst?: T) { + const newDst = (dst ?? vec2.create()); + + const xx = m[0]; + const xy = m[1]; + const yx = m[4]; + const yy = m[5]; + + newDst[0] = Math.sqrt(xx * xx + xy * xy); + newDst[1] = Math.sqrt(yx * yx + yy * yy); + + return newDst; +} + +/** + * Creates a 3-by-3 matrix which translates by the given vector v. + * @param v - The vector by which to translate. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The translation matrix. + */ +function translation(v: Vec2Arg, dst?: T) { + const newDst = (dst ?? new Ctor(12)) as T; + + newDst[ 0] = 1; newDst[ 1] = 0; newDst[ 2] = 0; + newDst[ 4] = 0; newDst[ 5] = 1; newDst[ 6] = 0; + newDst[ 8] = v[0]; newDst[ 9] = v[1]; newDst[10] = 1; + + return newDst; +} + +/** + * Translates the given 3-by-3 matrix by the given vector v. + * @param m - The matrix. + * @param v - The vector by which to translate. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The translated matrix. + */ +function translate(m: Mat3Arg, v: Vec2Arg, dst?: T) { + const newDst = (dst ?? new Ctor(12)) as T; + + const v0 = v[0]; + const v1 = v[1]; + + const m00 = m[0]; + const m01 = m[1]; + const m02 = m[2]; + const m10 = m[1 * 4 + 0]; + const m11 = m[1 * 4 + 1]; + const m12 = m[1 * 4 + 2]; + const m20 = m[2 * 4 + 0]; + const m21 = m[2 * 4 + 1]; + const m22 = m[2 * 4 + 2]; + + if (m !== newDst) { + newDst[ 0] = m00; + newDst[ 1] = m01; + newDst[ 2] = m02; + newDst[ 4] = m10; + newDst[ 5] = m11; + newDst[ 6] = m12; + } + + newDst[ 8] = m00 * v0 + m10 * v1 + m20; + newDst[ 9] = m01 * v0 + m11 * v1 + m21; + newDst[10] = m02 * v0 + m12 * v1 + m22; + + return newDst; +} + +/** + * Creates a 3-by-3 matrix which rotates by the given angle. + * @param angleInRadians - The angle by which to rotate (in radians). + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The rotation matrix. + */ +function rotation(angleInRadians: number, dst?: T) { + const newDst = (dst ?? new Ctor(12)) as T; + + const c = Math.cos(angleInRadians); + const s = Math.sin(angleInRadians); + + newDst[ 0] = c; newDst[ 1] = s; newDst[ 2] = 0; + newDst[ 4] = -s; newDst[ 5] = c; newDst[ 6] = 0; + newDst[ 8] = 0; newDst[ 9] = 0; newDst[10] = 1; + + return newDst; +} + +/** + * Rotates the given 3-by-3 matrix by the given angle. + * @param m - The matrix. + * @param angleInRadians - The angle by which to rotate (in radians). + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The rotated matrix. + */ +function rotate(m: Mat3Arg, angleInRadians: number, dst?: T) { + const newDst = (dst ?? new Ctor(12)) as T; + + const m00 = m[0 * 4 + 0]; + const m01 = m[0 * 4 + 1]; + const m02 = m[0 * 4 + 2]; + const m10 = m[1 * 4 + 0]; + const m11 = m[1 * 4 + 1]; + const m12 = m[1 * 4 + 2]; + const c = Math.cos(angleInRadians); + const s = Math.sin(angleInRadians); + + newDst[ 0] = c * m00 + s * m10; + newDst[ 1] = c * m01 + s * m11; + newDst[ 2] = c * m02 + s * m12; + + newDst[ 4] = c * m10 - s * m00; + newDst[ 5] = c * m11 - s * m01; + newDst[ 6] = c * m12 - s * m02; + + + if (m !== newDst) { + newDst[ 8] = m[ 8]; + newDst[ 9] = m[ 9]; + newDst[10] = m[10]; + } + + return newDst; +} + +/** + * Creates a 3-by-3 matrix which scales in each dimension by an amount given by + * the corresponding entry in the given vector; assumes the vector has three + * entries. + * @param v - A vector of + * 2 entries specifying the factor by which to scale in each dimension. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The scaling matrix. + */ +function scaling(v: Vec2Arg, dst?: T) { + const newDst = (dst ?? new Ctor(12)) as T; + + newDst[ 0] = v[0]; newDst[ 1] = 0; newDst[ 2] = 0; + newDst[ 4] = 0; newDst[ 5] = v[1]; newDst[ 6] = 0; + newDst[ 8] = 0; newDst[ 9] = 0; newDst[10] = 1; + + return newDst; +} + +/** + * Scales the given 3-by-3 matrix in each dimension by an amount + * given by the corresponding entry in the given vector; assumes the vector has + * three entries. + * @param m - The matrix to be modified. + * @param v - A vector of 2 entries specifying the + * factor by which to scale in each dimension. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The scaled matrix. + */ +function scale(m: Mat3Arg, v: Vec2Arg, dst?: T) { + const newDst = (dst ?? new Ctor(12)) as T; + + const v0 = v[0]; + const v1 = v[1]; + + newDst[ 0] = v0 * m[0 * 4 + 0]; + newDst[ 1] = v0 * m[0 * 4 + 1]; + newDst[ 2] = v0 * m[0 * 4 + 2]; + + newDst[ 4] = v1 * m[1 * 4 + 0]; + newDst[ 5] = v1 * m[1 * 4 + 1]; + newDst[ 6] = v1 * m[1 * 4 + 2]; + + if (m !== newDst) { + newDst[ 8] = m[ 8]; + newDst[ 9] = m[ 9]; + newDst[10] = m[10]; + } + + return newDst; +} + +/** + * Creates a 3-by-3 matrix which scales uniformly in each dimension + * @param s - Amount to scale + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The scaling matrix. + */ +function uniformScaling(s: number, dst?: T) { + const newDst = (dst ?? new Ctor(12)) as T; + + newDst[ 0] = s; newDst[ 1] = 0; newDst[ 2] = 0; + newDst[ 4] = 0; newDst[ 5] = s; newDst[ 6] = 0; + newDst[ 8] = 0; newDst[ 9] = 0; newDst[10] = 1; + + return newDst; +} + +/** + * Scales the given 3-by-3 matrix in each dimension by an amount + * given. + * @param m - The matrix to be modified. + * @param s - Amount to scale. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The scaled matrix. + */ +function uniformScale(m: Mat3Arg, s: number, dst?: T) { + const newDst = (dst ?? new Ctor(12)) as T; + + newDst[ 0] = s * m[0 * 4 + 0]; + newDst[ 1] = s * m[0 * 4 + 1]; + newDst[ 2] = s * m[0 * 4 + 2]; + + newDst[ 4] = s * m[1 * 4 + 0]; + newDst[ 5] = s * m[1 * 4 + 1]; + newDst[ 6] = s * m[1 * 4 + 2]; + + if (m !== newDst) { + newDst[ 8] = m[ 8]; + newDst[ 9] = m[ 9]; + newDst[10] = m[10]; + } + + return newDst; +} + +return { + clone, + create, + set, + fromMat4, + fromQuat, + negate, + copy, + equalsApproximately, + equals, + identity, + transpose, + inverse, + invert, + determinant, + mul, + multiply, + setTranslation, + getTranslation, + getAxis, + setAxis, + getScaling, + translation, + translate, + rotation, + rotate, + scaling, + scale, + uniformScaling, + uniformScale, +}; + +} + +type API = ReturnType>; + +const cache = new Map(); + +export function getAPI(Ctor: Mat3Ctor) { + let api = cache.get(Ctor); + if (!api) { + api = getAPIImpl(Ctor); + cache.set(Ctor, api); + } + return api as API; +} diff --git a/tools/demo/wgpu-matrix/mat3.ts b/tools/demo/wgpu-matrix/mat3.ts new file mode 100644 index 000000000..86b7b499a --- /dev/null +++ b/tools/demo/wgpu-matrix/mat3.ts @@ -0,0 +1,34 @@ +/* + * Copyright 2022 Gregg Tavares + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +import { BaseArgType } from "./types"; + +/** + * A JavaScript array with 12 values, a Float32Array with 12 values, or a Float64Array with 12 values. + */ +export type Mat3Arg = BaseArgType; + +/** + * A specific concrete 3x3 element vector. + */ +export type Mat3Type = T; + diff --git a/tools/demo/wgpu-matrix/mat4-impl.ts b/tools/demo/wgpu-matrix/mat4-impl.ts new file mode 100644 index 000000000..6822b0236 --- /dev/null +++ b/tools/demo/wgpu-matrix/mat4-impl.ts @@ -0,0 +1,1643 @@ +import { Mat4Arg, Mat4Type } from './mat4'; +import { Mat3Arg } from './mat3'; +import { QuatArg } from './quat'; +import { Vec3Arg } from './vec3'; +import { getAPI as getVec3API } from './vec3-impl'; +import { BaseArgType } from './types'; +import * as utils from './utils'; + +export { Mat4Arg, Mat4Type }; + +type Mat4Ctor = new (n: number) => T; + +/** + * Generates a typed API for Mat4 + * */ +function getAPIImpl(Ctor: Mat4Ctor) { + const vec3 = getVec3API(Ctor); + +/** + * 4x4 Matrix math math functions. + * + * Almost all functions take an optional `newDst` argument. If it is not passed in the + * functions will create a new matrix. In other words you can do this + * + * const mat = mat4.translation([1, 2, 3]); // Creates a new translation matrix + * + * or + * + * const mat = mat4.create(); + * mat4.translation([1, 2, 3], mat); // Puts translation matrix in mat. + * + * The first style is often easier but depending on where it's used it generates garbage where + * as there is almost never allocation with the second style. + * + * It is always save to pass any matrix as the destination. So for example + * + * const mat = mat4.identity(); + * const trans = mat4.translation([1, 2, 3]); + * mat4.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat. + * + */ + + +/** + * Create a Mat4 from values + * + * Note: Since passing in a raw JavaScript array + * is valid in all circumstances, if you want to + * force a JavaScript array into a Mat4's specified type + * it would be faster to use + * + * ``` + * const m = mat4.clone(someJSArray); + * ``` + * + * @param v0 - value for element 0 + * @param v1 - value for element 1 + * @param v2 - value for element 2 + * @param v3 - value for element 3 + * @param v4 - value for element 4 + * @param v5 - value for element 5 + * @param v6 - value for element 6 + * @param v7 - value for element 7 + * @param v8 - value for element 8 + * @param v9 - value for element 9 + * @param v10 - value for element 10 + * @param v11 - value for element 11 + * @param v12 - value for element 12 + * @param v13 - value for element 13 + * @param v14 - value for element 14 + * @param v15 - value for element 15 + * @returns created from values. + */ +function create( + v0?: number, v1?: number, v2?: number, v3?: number, + v4?: number, v5?: number, v6?: number, v7?: number, + v8?: number, v9?: number, v10?: number, v11?: number, + v12?: number, v13?: number, v14?: number, v15?: number) { + const newDst = new Ctor(16); + if (v0 !== undefined) { + newDst[0] = v0; + if (v1 !== undefined) { + newDst[1] = v1; + if (v2 !== undefined) { + newDst[2] = v2; + if (v3 !== undefined) { + newDst[3] = v3; + if (v4 !== undefined) { + newDst[4] = v4; + if (v5 !== undefined) { + newDst[5] = v5; + if (v6 !== undefined) { + newDst[6] = v6; + if (v7 !== undefined) { + newDst[7] = v7; + if (v8 !== undefined) { + newDst[8] = v8; + if (v9 !== undefined) { + newDst[9] = v9; + if (v10 !== undefined) { + newDst[10] = v10; + if (v11 !== undefined) { + newDst[11] = v11; + if (v12 !== undefined) { + newDst[12] = v12; + if (v13 !== undefined) { + newDst[13] = v13; + if (v14 !== undefined) { + newDst[14] = v14; + if (v15 !== undefined) { + newDst[15] = v15; + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + return newDst; +} + +/** + * Sets the values of a Mat4 + * Also see {@link mat4.create} and {@link mat4.copy} + * + * @param v0 - value for element 0 + * @param v1 - value for element 1 + * @param v2 - value for element 2 + * @param v3 - value for element 3 + * @param v4 - value for element 4 + * @param v5 - value for element 5 + * @param v6 - value for element 6 + * @param v7 - value for element 7 + * @param v8 - value for element 8 + * @param v9 - value for element 9 + * @param v10 - value for element 10 + * @param v11 - value for element 11 + * @param v12 - value for element 12 + * @param v13 - value for element 13 + * @param v14 - value for element 14 + * @param v15 - value for element 15 + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns Mat4 created from values. + */ +function set( + v0: number, v1: number, v2: number, v3: number, + v4: number, v5: number, v6: number, v7: number, + v8: number, v9: number, v10: number, v11: number, + v12: number, v13: number, v14: number, v15: number, + dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + newDst[ 0] = v0; newDst[ 1] = v1; newDst[ 2] = v2; newDst[ 3] = v3; + newDst[ 4] = v4; newDst[ 5] = v5; newDst[ 6] = v6; newDst[ 7] = v7; + newDst[ 8] = v8; newDst[ 9] = v9; newDst[10] = v10; newDst[11] = v11; + newDst[12] = v12; newDst[13] = v13; newDst[14] = v14; newDst[15] = v15; + + return newDst; +} + +/** + * Creates a Mat4 from a Mat3 + * @param m3 - source matrix + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns Mat4 made from m3 + */ +function fromMat3(m3: Mat3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + newDst[ 0] = m3[0]; newDst[ 1] = m3[1]; newDst[ 2] = m3[ 2]; newDst[ 3] = 0; + newDst[ 4] = m3[4]; newDst[ 5] = m3[5]; newDst[ 6] = m3[ 6]; newDst[ 7] = 0; + newDst[ 8] = m3[8]; newDst[ 9] = m3[9]; newDst[10] = m3[10]; newDst[11] = 0; + newDst[12] = 0; newDst[13] = 0; newDst[14] = 0; newDst[15] = 1; + + return newDst; +} + +/** + * Creates a Mat4 rotation matrix from a quaternion + * @param q - quaternion to create matrix from + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns Mat4 made from q + */ +function fromQuat(q: QuatArg, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + const x = q[0]; const y = q[1]; const z = q[2]; const w = q[3]; + const x2 = x + x; const y2 = y + y; const z2 = z + z; + + const xx = x * x2; + const yx = y * x2; + const yy = y * y2; + const zx = z * x2; + const zy = z * y2; + const zz = z * z2; + const wx = w * x2; + const wy = w * y2; + const wz = w * z2; + + newDst[ 0] = 1 - yy - zz; newDst[ 1] = yx + wz; newDst[ 2] = zx - wy; newDst[ 3] = 0; + newDst[ 4] = yx - wz; newDst[ 5] = 1 - xx - zz; newDst[ 6] = zy + wx; newDst[ 7] = 0; + newDst[ 8] = zx + wy; newDst[ 9] = zy - wx; newDst[10] = 1 - xx - yy; newDst[11] = 0; + newDst[12] = 0; newDst[13] = 0; newDst[14] = 0; newDst[15] = 1; + + return newDst; +} + +/** + * Negates a matrix. + * @param m - The matrix. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns -m. + */ +function negate(m: Mat4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + newDst[ 0] = -m[ 0]; newDst[ 1] = -m[ 1]; newDst[ 2] = -m[ 2]; newDst[ 3] = -m[ 3]; + newDst[ 4] = -m[ 4]; newDst[ 5] = -m[ 5]; newDst[ 6] = -m[ 6]; newDst[ 7] = -m[ 7]; + newDst[ 8] = -m[ 8]; newDst[ 9] = -m[ 9]; newDst[10] = -m[10]; newDst[11] = -m[11]; + newDst[12] = -m[12]; newDst[13] = -m[13]; newDst[14] = -m[14]; newDst[15] = -m[15]; + + return newDst; +} + +/** + * Copies a matrix. (same as {@link mat4.clone}) + * Also see {@link mat4.create} and {@link mat4.set} + * @param m - The matrix. + * @param dst - The matrix. If not passed a new one is created. + * @returns A copy of m. + */ +function copy(m: Mat4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + newDst[ 0] = m[ 0]; newDst[ 1] = m[ 1]; newDst[ 2] = m[ 2]; newDst[ 3] = m[ 3]; + newDst[ 4] = m[ 4]; newDst[ 5] = m[ 5]; newDst[ 6] = m[ 6]; newDst[ 7] = m[ 7]; + newDst[ 8] = m[ 8]; newDst[ 9] = m[ 9]; newDst[10] = m[10]; newDst[11] = m[11]; + newDst[12] = m[12]; newDst[13] = m[13]; newDst[14] = m[14]; newDst[15] = m[15]; + + return newDst; +} + +/** + * Copies a matrix (same as {@link mat4.copy}) + * Also see {@link mat4.create} and {@link mat4.set} + * @param m - The matrix. + * @param dst - The matrix. If not passed a new one is created. + * @returns A copy of m. + */ +const clone = copy; + +/** + * Check if 2 matrices are approximately equal + * @param a - Operand matrix. + * @param b - Operand matrix. + * @returns true if matrices are approximately equal + */ +function equalsApproximately(a: Mat4Arg, b: Mat4Arg): boolean { + return Math.abs(a[ 0] - b[ 0]) < utils.EPSILON && + Math.abs(a[ 1] - b[ 1]) < utils.EPSILON && + Math.abs(a[ 2] - b[ 2]) < utils.EPSILON && + Math.abs(a[ 3] - b[ 3]) < utils.EPSILON && + Math.abs(a[ 4] - b[ 4]) < utils.EPSILON && + Math.abs(a[ 5] - b[ 5]) < utils.EPSILON && + Math.abs(a[ 6] - b[ 6]) < utils.EPSILON && + Math.abs(a[ 7] - b[ 7]) < utils.EPSILON && + Math.abs(a[ 8] - b[ 8]) < utils.EPSILON && + Math.abs(a[ 9] - b[ 9]) < utils.EPSILON && + Math.abs(a[10] - b[10]) < utils.EPSILON && + Math.abs(a[11] - b[11]) < utils.EPSILON && + Math.abs(a[12] - b[12]) < utils.EPSILON && + Math.abs(a[13] - b[13]) < utils.EPSILON && + Math.abs(a[14] - b[14]) < utils.EPSILON && + Math.abs(a[15] - b[15]) < utils.EPSILON; +} + +/** + * Check if 2 matrices are exactly equal + * @param a - Operand matrix. + * @param b - Operand matrix. + * @returns true if matrices are exactly equal + */ +function equals(a: Mat4Arg, b: Mat4Arg): boolean { + return a[ 0] === b[ 0] && + a[ 1] === b[ 1] && + a[ 2] === b[ 2] && + a[ 3] === b[ 3] && + a[ 4] === b[ 4] && + a[ 5] === b[ 5] && + a[ 6] === b[ 6] && + a[ 7] === b[ 7] && + a[ 8] === b[ 8] && + a[ 9] === b[ 9] && + a[10] === b[10] && + a[11] === b[11] && + a[12] === b[12] && + a[13] === b[13] && + a[14] === b[14] && + a[15] === b[15]; +} + +/** + * Creates a 4-by-4 identity matrix. + * + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns A 4-by-4 identity matrix. + */ +function identity(dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + newDst[ 0] = 1; newDst[ 1] = 0; newDst[ 2] = 0; newDst[ 3] = 0; + newDst[ 4] = 0; newDst[ 5] = 1; newDst[ 6] = 0; newDst[ 7] = 0; + newDst[ 8] = 0; newDst[ 9] = 0; newDst[10] = 1; newDst[11] = 0; + newDst[12] = 0; newDst[13] = 0; newDst[14] = 0; newDst[15] = 1; + + return newDst; +} + +/** + * Takes the transpose of a matrix. + * @param m - The matrix. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The transpose of m. + */ +function transpose(m: Mat4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + if (newDst === m) { + let t; + + t = m[1]; + m[1] = m[4]; + m[4] = t; + + t = m[2]; + m[2] = m[8]; + m[8] = t; + + t = m[3]; + m[3] = m[12]; + m[12] = t; + + t = m[6]; + m[6] = m[9]; + m[9] = t; + + t = m[7]; + m[7] = m[13]; + m[13] = t; + + t = m[11]; + m[11] = m[14]; + m[14] = t; + return newDst; + } + + const m00 = m[0 * 4 + 0]; + const m01 = m[0 * 4 + 1]; + const m02 = m[0 * 4 + 2]; + const m03 = m[0 * 4 + 3]; + const m10 = m[1 * 4 + 0]; + const m11 = m[1 * 4 + 1]; + const m12 = m[1 * 4 + 2]; + const m13 = m[1 * 4 + 3]; + const m20 = m[2 * 4 + 0]; + const m21 = m[2 * 4 + 1]; + const m22 = m[2 * 4 + 2]; + const m23 = m[2 * 4 + 3]; + const m30 = m[3 * 4 + 0]; + const m31 = m[3 * 4 + 1]; + const m32 = m[3 * 4 + 2]; + const m33 = m[3 * 4 + 3]; + + newDst[ 0] = m00; newDst[ 1] = m10; newDst[ 2] = m20; newDst[ 3] = m30; + newDst[ 4] = m01; newDst[ 5] = m11; newDst[ 6] = m21; newDst[ 7] = m31; + newDst[ 8] = m02; newDst[ 9] = m12; newDst[10] = m22; newDst[11] = m32; + newDst[12] = m03; newDst[13] = m13; newDst[14] = m23; newDst[15] = m33; + + return newDst; +} + +/** + * Computes the inverse of a 4-by-4 matrix. + * @param m - The matrix. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The inverse of m. + */ +function inverse(m: Mat4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + const m00 = m[0 * 4 + 0]; + const m01 = m[0 * 4 + 1]; + const m02 = m[0 * 4 + 2]; + const m03 = m[0 * 4 + 3]; + const m10 = m[1 * 4 + 0]; + const m11 = m[1 * 4 + 1]; + const m12 = m[1 * 4 + 2]; + const m13 = m[1 * 4 + 3]; + const m20 = m[2 * 4 + 0]; + const m21 = m[2 * 4 + 1]; + const m22 = m[2 * 4 + 2]; + const m23 = m[2 * 4 + 3]; + const m30 = m[3 * 4 + 0]; + const m31 = m[3 * 4 + 1]; + const m32 = m[3 * 4 + 2]; + const m33 = m[3 * 4 + 3]; + const tmp0 = m22 * m33; + const tmp1 = m32 * m23; + const tmp2 = m12 * m33; + const tmp3 = m32 * m13; + const tmp4 = m12 * m23; + const tmp5 = m22 * m13; + const tmp6 = m02 * m33; + const tmp7 = m32 * m03; + const tmp8 = m02 * m23; + const tmp9 = m22 * m03; + const tmp10 = m02 * m13; + const tmp11 = m12 * m03; + const tmp12 = m20 * m31; + const tmp13 = m30 * m21; + const tmp14 = m10 * m31; + const tmp15 = m30 * m11; + const tmp16 = m10 * m21; + const tmp17 = m20 * m11; + const tmp18 = m00 * m31; + const tmp19 = m30 * m01; + const tmp20 = m00 * m21; + const tmp21 = m20 * m01; + const tmp22 = m00 * m11; + const tmp23 = m10 * m01; + + const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) - + (tmp1 * m11 + tmp2 * m21 + tmp5 * m31); + const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) - + (tmp0 * m01 + tmp7 * m21 + tmp8 * m31); + const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) - + (tmp3 * m01 + tmp6 * m11 + tmp11 * m31); + const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) - + (tmp4 * m01 + tmp9 * m11 + tmp10 * m21); + + const d = 1 / (m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3); + + newDst[ 0] = d * t0; + newDst[ 1] = d * t1; + newDst[ 2] = d * t2; + newDst[ 3] = d * t3; + newDst[ 4] = d * ((tmp1 * m10 + tmp2 * m20 + tmp5 * m30) - + (tmp0 * m10 + tmp3 * m20 + tmp4 * m30)); + newDst[ 5] = d * ((tmp0 * m00 + tmp7 * m20 + tmp8 * m30) - + (tmp1 * m00 + tmp6 * m20 + tmp9 * m30)); + newDst[ 6] = d * ((tmp3 * m00 + tmp6 * m10 + tmp11 * m30) - + (tmp2 * m00 + tmp7 * m10 + tmp10 * m30)); + newDst[ 7] = d * ((tmp4 * m00 + tmp9 * m10 + tmp10 * m20) - + (tmp5 * m00 + tmp8 * m10 + tmp11 * m20)); + newDst[ 8] = d * ((tmp12 * m13 + tmp15 * m23 + tmp16 * m33) - + (tmp13 * m13 + tmp14 * m23 + tmp17 * m33)); + newDst[ 9] = d * ((tmp13 * m03 + tmp18 * m23 + tmp21 * m33) - + (tmp12 * m03 + tmp19 * m23 + tmp20 * m33)); + newDst[10] = d * ((tmp14 * m03 + tmp19 * m13 + tmp22 * m33) - + (tmp15 * m03 + tmp18 * m13 + tmp23 * m33)); + newDst[11] = d * ((tmp17 * m03 + tmp20 * m13 + tmp23 * m23) - + (tmp16 * m03 + tmp21 * m13 + tmp22 * m23)); + newDst[12] = d * ((tmp14 * m22 + tmp17 * m32 + tmp13 * m12) - + (tmp16 * m32 + tmp12 * m12 + tmp15 * m22)); + newDst[13] = d * ((tmp20 * m32 + tmp12 * m02 + tmp19 * m22) - + (tmp18 * m22 + tmp21 * m32 + tmp13 * m02)); + newDst[14] = d * ((tmp18 * m12 + tmp23 * m32 + tmp15 * m02) - + (tmp22 * m32 + tmp14 * m02 + tmp19 * m12)); + newDst[15] = d * ((tmp22 * m22 + tmp16 * m02 + tmp21 * m12) - + (tmp20 * m12 + tmp23 * m22 + tmp17 * m02)); + + return newDst; +} + +/** + * Compute the determinant of a matrix + * @param m - the matrix + * @returns the determinant + */ +function determinant(m: Mat4Arg): number { + const m00 = m[0 * 4 + 0]; + const m01 = m[0 * 4 + 1]; + const m02 = m[0 * 4 + 2]; + const m03 = m[0 * 4 + 3]; + const m10 = m[1 * 4 + 0]; + const m11 = m[1 * 4 + 1]; + const m12 = m[1 * 4 + 2]; + const m13 = m[1 * 4 + 3]; + const m20 = m[2 * 4 + 0]; + const m21 = m[2 * 4 + 1]; + const m22 = m[2 * 4 + 2]; + const m23 = m[2 * 4 + 3]; + const m30 = m[3 * 4 + 0]; + const m31 = m[3 * 4 + 1]; + const m32 = m[3 * 4 + 2]; + const m33 = m[3 * 4 + 3]; + + const tmp0 = m22 * m33; + const tmp1 = m32 * m23; + const tmp2 = m12 * m33; + const tmp3 = m32 * m13; + const tmp4 = m12 * m23; + const tmp5 = m22 * m13; + const tmp6 = m02 * m33; + const tmp7 = m32 * m03; + const tmp8 = m02 * m23; + const tmp9 = m22 * m03; + const tmp10 = m02 * m13; + const tmp11 = m12 * m03; + + const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) - + (tmp1 * m11 + tmp2 * m21 + tmp5 * m31); + const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) - + (tmp0 * m01 + tmp7 * m21 + tmp8 * m31); + const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) - + (tmp3 * m01 + tmp6 * m11 + tmp11 * m31); + const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) - + (tmp4 * m01 + tmp9 * m11 + tmp10 * m21); + + return m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3; +} + +/** + * Computes the inverse of a 4-by-4 matrix. (same as inverse) + * @param m - The matrix. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The inverse of m. + */ +const invert = inverse; + +/** + * Multiplies two 4-by-4 matrices with a on the left and b on the right + * @param a - The matrix on the left. + * @param b - The matrix on the right. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The matrix product of a and b. + */ +function multiply(a: Mat4Arg, b: Mat4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + const a00 = a[0]; + const a01 = a[1]; + const a02 = a[2]; + const a03 = a[3]; + const a10 = a[ 4 + 0]; + const a11 = a[ 4 + 1]; + const a12 = a[ 4 + 2]; + const a13 = a[ 4 + 3]; + const a20 = a[ 8 + 0]; + const a21 = a[ 8 + 1]; + const a22 = a[ 8 + 2]; + const a23 = a[ 8 + 3]; + const a30 = a[12 + 0]; + const a31 = a[12 + 1]; + const a32 = a[12 + 2]; + const a33 = a[12 + 3]; + const b00 = b[0]; + const b01 = b[1]; + const b02 = b[2]; + const b03 = b[3]; + const b10 = b[ 4 + 0]; + const b11 = b[ 4 + 1]; + const b12 = b[ 4 + 2]; + const b13 = b[ 4 + 3]; + const b20 = b[ 8 + 0]; + const b21 = b[ 8 + 1]; + const b22 = b[ 8 + 2]; + const b23 = b[ 8 + 3]; + const b30 = b[12 + 0]; + const b31 = b[12 + 1]; + const b32 = b[12 + 2]; + const b33 = b[12 + 3]; + + newDst[ 0] = a00 * b00 + a10 * b01 + a20 * b02 + a30 * b03; + newDst[ 1] = a01 * b00 + a11 * b01 + a21 * b02 + a31 * b03; + newDst[ 2] = a02 * b00 + a12 * b01 + a22 * b02 + a32 * b03; + newDst[ 3] = a03 * b00 + a13 * b01 + a23 * b02 + a33 * b03; + newDst[ 4] = a00 * b10 + a10 * b11 + a20 * b12 + a30 * b13; + newDst[ 5] = a01 * b10 + a11 * b11 + a21 * b12 + a31 * b13; + newDst[ 6] = a02 * b10 + a12 * b11 + a22 * b12 + a32 * b13; + newDst[ 7] = a03 * b10 + a13 * b11 + a23 * b12 + a33 * b13; + newDst[ 8] = a00 * b20 + a10 * b21 + a20 * b22 + a30 * b23; + newDst[ 9] = a01 * b20 + a11 * b21 + a21 * b22 + a31 * b23; + newDst[10] = a02 * b20 + a12 * b21 + a22 * b22 + a32 * b23; + newDst[11] = a03 * b20 + a13 * b21 + a23 * b22 + a33 * b23; + newDst[12] = a00 * b30 + a10 * b31 + a20 * b32 + a30 * b33; + newDst[13] = a01 * b30 + a11 * b31 + a21 * b32 + a31 * b33; + newDst[14] = a02 * b30 + a12 * b31 + a22 * b32 + a32 * b33; + newDst[15] = a03 * b30 + a13 * b31 + a23 * b32 + a33 * b33; + + return newDst; +} + +/** + * Multiplies two 4-by-4 matrices with a on the left and b on the right (same as multiply) + * @param a - The matrix on the left. + * @param b - The matrix on the right. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The matrix product of a and b. + */ +const mul = multiply; + +/** + * Sets the translation component of a 4-by-4 matrix to the given + * vector. + * @param a - The matrix. + * @param v - The vector. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The matrix with translation set. + */ +function setTranslation(a: Mat4Arg, v: Vec3Arg, dst?: T) { + const newDst = (dst ?? identity()) as T; + if (a !== newDst) { + newDst[ 0] = a[ 0]; + newDst[ 1] = a[ 1]; + newDst[ 2] = a[ 2]; + newDst[ 3] = a[ 3]; + newDst[ 4] = a[ 4]; + newDst[ 5] = a[ 5]; + newDst[ 6] = a[ 6]; + newDst[ 7] = a[ 7]; + newDst[ 8] = a[ 8]; + newDst[ 9] = a[ 9]; + newDst[10] = a[10]; + newDst[11] = a[11]; + } + newDst[12] = v[0]; + newDst[13] = v[1]; + newDst[14] = v[2]; + newDst[15] = 1; + return newDst; +} + +///** +// * Returns the translation component of a 4-by-4 matrix as a vector with 3 +// * entries. +// * @param m - The matrix. +// * @param dst - vector to hold result. If not passed a new one is created. +// * @returns The translation component of m. +// */ +function getTranslation(m: Mat4Arg, dst?: T) { + const newDst = (dst ?? vec3.create()) as T; + newDst[0] = m[12]; + newDst[1] = m[13]; + newDst[2] = m[14]; + return newDst; +} + +/** + * Returns an axis of a 4x4 matrix as a vector with 3 entries + * @param m - The matrix. + * @param axis - The axis 0 = x, 1 = y, 2 = z; + * @returns The axis component of m. + */ +function getAxis(m: Mat4Arg, axis: number, dst?: T) { + const newDst = (dst ?? vec3.create()); + const off = axis * 4; + newDst[0] = m[off + 0]; + newDst[1] = m[off + 1]; + newDst[2] = m[off + 2]; + return newDst; +} + +/** + * Sets an axis of a 4x4 matrix as a vector with 3 entries + * @param m - The matrix. + * @param v - the axis vector + * @param axis - The axis 0 = x, 1 = y, 2 = z; + * @param dst - The matrix to set. If not passed a new one is created. + * @returns The matrix with axis set. + */ +function setAxis(m: Mat4Arg, v: Vec3Arg, axis: number, dst: T) { + const newDst = (dst === m) ? dst : copy(m, dst); + + const off = axis * 4; + newDst[off + 0] = v[0]; + newDst[off + 1] = v[1]; + newDst[off + 2] = v[2]; + return newDst; +} + +///** +// * Returns the scaling component of the matrix +// * @param m - The Matrix +// * @param dst - The vector to set. If not passed a new one is created. +// */ +function getScaling(m: Mat4Arg, dst?: T) { + const newDst = (dst ?? vec3.create()) as T; + + const xx = m[0]; + const xy = m[1]; + const xz = m[2]; + const yx = m[4]; + const yy = m[5]; + const yz = m[6]; + const zx = m[8]; + const zy = m[9]; + const zz = m[10]; + + newDst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz); + newDst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz); + newDst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz); + + return newDst; +} + +/** + * Computes a 4-by-4 perspective transformation matrix given the angular height + * of the frustum, the aspect ratio, and the near and far clipping planes. The + * arguments define a frustum extending in the negative z direction. The given + * angle is the vertical angle of the frustum, and the horizontal angle is + * determined to produce the given aspect ratio. The arguments near and far are + * the distances to the near and far clipping planes. Note that near and far + * are not z coordinates, but rather they are distances along the negative + * z-axis. The matrix generated sends the viewing frustum to the unit box. + * We assume a unit box extending from -1 to 1 in the x and y dimensions and + * from 0 to 1 in the z dimension. + * + * Note: If you pass `Infinity` for zFar then it will produce a projection matrix + * returns -Infinity for Z when transforming coordinates with Z <= 0 and +Infinity for Z + * otherwise. + * + * @param fieldOfViewYInRadians - The camera angle from top to bottom (in radians). + * @param aspect - The aspect ratio width / height. + * @param zNear - The depth (negative z coordinate) + * of the near clipping plane. + * @param zFar - The depth (negative z coordinate) + * of the far clipping plane. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The perspective matrix. + */ +function perspective(fieldOfViewYInRadians: number, aspect: number, zNear: number, zFar: number, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + const f = Math.tan(Math.PI * 0.5 - 0.5 * fieldOfViewYInRadians); + + newDst[0] = f / aspect; + newDst[1] = 0; + newDst[2] = 0; + newDst[3] = 0; + + newDst[4] = 0; + newDst[5] = f; + newDst[6] = 0; + newDst[7] = 0; + + newDst[8] = 0; + newDst[9] = 0; + newDst[11] = -1; + + newDst[12] = 0; + newDst[13] = 0; + newDst[15] = 0; + + if (Number.isFinite(zFar)) { + const rangeInv = 1 / (zNear - zFar); + newDst[10] = zFar * rangeInv; + newDst[14] = zFar * zNear * rangeInv; + } else { + newDst[10] = -1; + newDst[14] = -zNear; + } + + return newDst; +} + +/** + * Computes a 4-by-4 reverse-z perspective transformation matrix given the angular height + * of the frustum, the aspect ratio, and the near and far clipping planes. The + * arguments define a frustum extending in the negative z direction. The given + * angle is the vertical angle of the frustum, and the horizontal angle is + * determined to produce the given aspect ratio. The arguments near and far are + * the distances to the near and far clipping planes. Note that near and far + * are not z coordinates, but rather they are distances along the negative + * z-axis. The matrix generated sends the viewing frustum to the unit box. + * We assume a unit box extending from -1 to 1 in the x and y dimensions and + * from 1 (at -zNear) to 0 (at -zFar) in the z dimension. + * + * @param fieldOfViewYInRadians - The camera angle from top to bottom (in radians). + * @param aspect - The aspect ratio width / height. + * @param zNear - The depth (negative z coordinate) + * of the near clipping plane. + * @param zFar - The depth (negative z coordinate) + * of the far clipping plane. (default = Infinity) + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The perspective matrix. + */function perspectiveReverseZ(fieldOfViewYInRadians: number, aspect: number, zNear: number, zFar = Infinity, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + const f = 1 / Math.tan(fieldOfViewYInRadians * 0.5); + + newDst[ 0] = f / aspect; + newDst[ 1] = 0; + newDst[ 2] = 0; + newDst[ 3] = 0; + + newDst[ 4] = 0; + newDst[ 5] = f; + newDst[ 6] = 0; + newDst[ 7] = 0; + + newDst[ 8] = 0; + newDst[ 9] = 0; + newDst[11] = -1; + + newDst[12] = 0; + newDst[13] = 0; + newDst[15] = 0; + + if (zFar === Infinity) { + newDst[10] = 0; + newDst[14] = zNear; + } else { + const rangeInv = 1 / (zFar - zNear); + newDst[10] = zNear * rangeInv; + newDst[14] = zFar * zNear * rangeInv; + } + + return newDst; +} + +/** + * Computes a 4-by-4 orthogonal transformation matrix that transforms from + * the given the left, right, bottom, and top dimensions to -1 +1 in x, and y + * and 0 to +1 in z. + * @param left - Left side of the near clipping plane viewport. + * @param right - Right side of the near clipping plane viewport. + * @param bottom - Bottom of the near clipping plane viewport. + * @param top - Top of the near clipping plane viewport. + * @param near - The depth (negative z coordinate) + * of the near clipping plane. + * @param far - The depth (negative z coordinate) + * of the far clipping plane. + * @param dst - Output matrix. If not passed a new one is created. + * @returns The orthographic projection matrix. + */ +function ortho(left: number, right: number, bottom: number, top: number, near: number, far: number, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + newDst[0] = 2 / (right - left); + newDst[1] = 0; + newDst[2] = 0; + newDst[3] = 0; + + newDst[4] = 0; + newDst[5] = 2 / (top - bottom); + newDst[6] = 0; + newDst[7] = 0; + + newDst[8] = 0; + newDst[9] = 0; + newDst[10] = 1 / (near - far); + newDst[11] = 0; + + newDst[12] = (right + left) / (left - right); + newDst[13] = (top + bottom) / (bottom - top); + newDst[14] = near / (near - far); + newDst[15] = 1; + + return newDst; +} + +/** + * Computes a 4-by-4 perspective transformation matrix given the left, right, + * top, bottom, near and far clipping planes. The arguments define a frustum + * extending in the negative z direction. The arguments near and far are the + * distances to the near and far clipping planes. Note that near and far are not + * z coordinates, but rather they are distances along the negative z-axis. The + * matrix generated sends the viewing frustum to the unit box. We assume a unit + * box extending from -1 to 1 in the x and y dimensions and from 0 to 1 in the z + * dimension. + * @param left - The x coordinate of the left plane of the box. + * @param right - The x coordinate of the right plane of the box. + * @param bottom - The y coordinate of the bottom plane of the box. + * @param top - The y coordinate of the right plane of the box. + * @param near - The negative z coordinate of the near plane of the box. + * @param far - The negative z coordinate of the far plane of the box. + * @param dst - Output matrix. If not passed a new one is created. + * @returns The perspective projection matrix. + */ +function frustum(left: number, right: number, bottom: number, top: number, near: number, far: number, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + const dx = (right - left); + const dy = (top - bottom); + const dz = (near - far); + + newDst[ 0] = 2 * near / dx; + newDst[ 1] = 0; + newDst[ 2] = 0; + newDst[ 3] = 0; + newDst[ 4] = 0; + newDst[ 5] = 2 * near / dy; + newDst[ 6] = 0; + newDst[ 7] = 0; + newDst[ 8] = (left + right) / dx; + newDst[ 9] = (top + bottom) / dy; + newDst[10] = far / dz; + newDst[11] = -1; + newDst[12] = 0; + newDst[13] = 0; + newDst[14] = near * far / dz; + newDst[15] = 0; + + return newDst; +} + +/** + * Computes a 4-by-4 reverse-z perspective transformation matrix given the left, right, + * top, bottom, near and far clipping planes. The arguments define a frustum + * extending in the negative z direction. The arguments near and far are the + * distances to the near and far clipping planes. Note that near and far are not + * z coordinates, but rather they are distances along the negative z-axis. The + * matrix generated sends the viewing frustum to the unit box. We assume a unit + * box extending from -1 to 1 in the x and y dimensions and from 1 (-near) to 0 (-far) in the z + * dimension. + * @param left - The x coordinate of the left plane of the box. + * @param right - The x coordinate of the right plane of the box. + * @param bottom - The y coordinate of the bottom plane of the box. + * @param top - The y coordinate of the right plane of the box. + * @param near - The negative z coordinate of the near plane of the box. + * @param far - The negative z coordinate of the far plane of the box. + * @param dst - Output matrix. If not passed a new one is created. + * @returns The perspective projection matrix. + */ +function frustumReverseZ(left: number, right: number, bottom: number, top: number, near: number, far = Infinity, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + const dx = (right - left); + const dy = (top - bottom); + + newDst[ 0] = 2 * near / dx; + newDst[ 1] = 0; + newDst[ 2] = 0; + newDst[ 3] = 0; + newDst[ 4] = 0; + newDst[ 5] = 2 * near / dy; + newDst[ 6] = 0; + newDst[ 7] = 0; + newDst[ 8] = (left + right) / dx; + newDst[ 9] = (top + bottom) / dy; + newDst[11] = -1; + newDst[12] = 0; + newDst[13] = 0; + newDst[15] = 0; + + if (far === Infinity) { + newDst[10] = 0; + newDst[14] = near; + } else { + const rangeInv = 1 / (far - near); + newDst[10] = near * rangeInv; + newDst[14] = far * near * rangeInv; + } + + return newDst; +} + +const xAxis = vec3.create(); +const yAxis = vec3.create(); +const zAxis = vec3.create(); + +/** + * Computes a 4-by-4 aim transformation. + * + * This is a matrix which positions an object aiming down positive Z. + * toward the target. + * + * Note: this is **NOT** the inverse of lookAt as lookAt looks at negative Z. + * + * @param position - The position of the object. + * @param target - The position meant to be aimed at. + * @param up - A vector pointing up. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The aim matrix. + */ +function aim(position: Vec3Arg, target: Vec3Arg, up: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + vec3.normalize(vec3.subtract(target, position, zAxis), zAxis); + vec3.normalize(vec3.cross(up, zAxis, xAxis), xAxis); + vec3.normalize(vec3.cross(zAxis, xAxis, yAxis), yAxis); + + newDst[ 0] = xAxis[0]; newDst[ 1] = xAxis[1]; newDst[ 2] = xAxis[2]; newDst[ 3] = 0; + newDst[ 4] = yAxis[0]; newDst[ 5] = yAxis[1]; newDst[ 6] = yAxis[2]; newDst[ 7] = 0; + newDst[ 8] = zAxis[0]; newDst[ 9] = zAxis[1]; newDst[10] = zAxis[2]; newDst[11] = 0; + newDst[12] = position[0]; newDst[13] = position[1]; newDst[14] = position[2]; newDst[15] = 1; + + return newDst; +} + +/** + * Computes a 4-by-4 camera aim transformation. + * + * This is a matrix which positions an object aiming down negative Z. + * toward the target. + * + * Note: this is the inverse of `lookAt` + * + * @param eye - The position of the object. + * @param target - The position meant to be aimed at. + * @param up - A vector pointing up. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The aim matrix. + */ +function cameraAim(eye: Vec3Arg, target: Vec3Arg, up: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + vec3.normalize(vec3.subtract(eye, target, zAxis), zAxis); + vec3.normalize(vec3.cross(up, zAxis, xAxis), xAxis); + vec3.normalize(vec3.cross(zAxis, xAxis, yAxis), yAxis); + + newDst[ 0] = xAxis[0]; newDst[ 1] = xAxis[1]; newDst[ 2] = xAxis[2]; newDst[ 3] = 0; + newDst[ 4] = yAxis[0]; newDst[ 5] = yAxis[1]; newDst[ 6] = yAxis[2]; newDst[ 7] = 0; + newDst[ 8] = zAxis[0]; newDst[ 9] = zAxis[1]; newDst[10] = zAxis[2]; newDst[11] = 0; + newDst[12] = eye[0]; newDst[13] = eye[1]; newDst[14] = eye[2]; newDst[15] = 1; + + return newDst; +} + +/** + * Computes a 4-by-4 view transformation. + * + * This is a view matrix which transforms all other objects + * to be in the space of the view defined by the parameters. + * + * @param eye - The position of the object. + * @param target - The position meant to be aimed at. + * @param up - A vector pointing up. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The look-at matrix. + */ +function lookAt(eye: Vec3Arg, target: Vec3Arg, up: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + vec3.normalize(vec3.subtract(eye, target, zAxis), zAxis); + vec3.normalize(vec3.cross(up, zAxis, xAxis), xAxis); + vec3.normalize(vec3.cross(zAxis, xAxis, yAxis), yAxis); + + newDst[ 0] = xAxis[0]; newDst[ 1] = yAxis[0]; newDst[ 2] = zAxis[0]; newDst[ 3] = 0; + newDst[ 4] = xAxis[1]; newDst[ 5] = yAxis[1]; newDst[ 6] = zAxis[1]; newDst[ 7] = 0; + newDst[ 8] = xAxis[2]; newDst[ 9] = yAxis[2]; newDst[10] = zAxis[2]; newDst[11] = 0; + + newDst[12] = -(xAxis[0] * eye[0] + xAxis[1] * eye[1] + xAxis[2] * eye[2]); + newDst[13] = -(yAxis[0] * eye[0] + yAxis[1] * eye[1] + yAxis[2] * eye[2]); + newDst[14] = -(zAxis[0] * eye[0] + zAxis[1] * eye[1] + zAxis[2] * eye[2]); + newDst[15] = 1; + + return newDst; +} + +/** + * Creates a 4-by-4 matrix which translates by the given vector v. + * @param v - The vector by + * which to translate. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The translation matrix. + */ +function translation(v: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + newDst[ 0] = 1; newDst[ 1] = 0; newDst[ 2] = 0; newDst[ 3] = 0; + newDst[ 4] = 0; newDst[ 5] = 1; newDst[ 6] = 0; newDst[ 7] = 0; + newDst[ 8] = 0; newDst[ 9] = 0; newDst[10] = 1; newDst[11] = 0; + newDst[12] = v[0]; newDst[13] = v[1]; newDst[14] = v[2]; newDst[15] = 1; + + return newDst; +} + +/** + * Translates the given 4-by-4 matrix by the given vector v. + * @param m - The matrix. + * @param v - The vector by + * which to translate. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The translated matrix. + */ +function translate(m: Mat4Arg, v: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + const v0 = v[0]; + const v1 = v[1]; + const v2 = v[2]; + const m00 = m[0]; + const m01 = m[1]; + const m02 = m[2]; + const m03 = m[3]; + const m10 = m[1 * 4 + 0]; + const m11 = m[1 * 4 + 1]; + const m12 = m[1 * 4 + 2]; + const m13 = m[1 * 4 + 3]; + const m20 = m[2 * 4 + 0]; + const m21 = m[2 * 4 + 1]; + const m22 = m[2 * 4 + 2]; + const m23 = m[2 * 4 + 3]; + const m30 = m[3 * 4 + 0]; + const m31 = m[3 * 4 + 1]; + const m32 = m[3 * 4 + 2]; + const m33 = m[3 * 4 + 3]; + + if (m !== newDst) { + newDst[ 0] = m00; + newDst[ 1] = m01; + newDst[ 2] = m02; + newDst[ 3] = m03; + newDst[ 4] = m10; + newDst[ 5] = m11; + newDst[ 6] = m12; + newDst[ 7] = m13; + newDst[ 8] = m20; + newDst[ 9] = m21; + newDst[10] = m22; + newDst[11] = m23; + } + + newDst[12] = m00 * v0 + m10 * v1 + m20 * v2 + m30; + newDst[13] = m01 * v0 + m11 * v1 + m21 * v2 + m31; + newDst[14] = m02 * v0 + m12 * v1 + m22 * v2 + m32; + newDst[15] = m03 * v0 + m13 * v1 + m23 * v2 + m33; + + return newDst; +} + +/** + * Creates a 4-by-4 matrix which rotates around the x-axis by the given angle. + * @param angleInRadians - The angle by which to rotate (in radians). + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The rotation matrix. + */ +function rotationX(angleInRadians: number, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + const c = Math.cos(angleInRadians); + const s = Math.sin(angleInRadians); + + newDst[ 0] = 1; newDst[ 1] = 0; newDst[ 2] = 0; newDst[ 3] = 0; + newDst[ 4] = 0; newDst[ 5] = c; newDst[ 6] = s; newDst[ 7] = 0; + newDst[ 8] = 0; newDst[ 9] = -s; newDst[10] = c; newDst[11] = 0; + newDst[12] = 0; newDst[13] = 0; newDst[14] = 0; newDst[15] = 1; + + return newDst; +} + +/** + * Rotates the given 4-by-4 matrix around the x-axis by the given + * angle. + * @param m - The matrix. + * @param angleInRadians - The angle by which to rotate (in radians). + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The rotated matrix. + */ +function rotateX(m: Mat4Arg, angleInRadians: number, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + const m10 = m[4]; + const m11 = m[5]; + const m12 = m[6]; + const m13 = m[7]; + const m20 = m[8]; + const m21 = m[9]; + const m22 = m[10]; + const m23 = m[11]; + const c = Math.cos(angleInRadians); + const s = Math.sin(angleInRadians); + + newDst[4] = c * m10 + s * m20; + newDst[5] = c * m11 + s * m21; + newDst[6] = c * m12 + s * m22; + newDst[7] = c * m13 + s * m23; + newDst[8] = c * m20 - s * m10; + newDst[9] = c * m21 - s * m11; + newDst[10] = c * m22 - s * m12; + newDst[11] = c * m23 - s * m13; + + if (m !== newDst) { + newDst[ 0] = m[ 0]; + newDst[ 1] = m[ 1]; + newDst[ 2] = m[ 2]; + newDst[ 3] = m[ 3]; + newDst[12] = m[12]; + newDst[13] = m[13]; + newDst[14] = m[14]; + newDst[15] = m[15]; + } + + return newDst; +} + +/** + * Creates a 4-by-4 matrix which rotates around the y-axis by the given angle. + * @param angleInRadians - The angle by which to rotate (in radians). + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The rotation matrix. + */ +function rotationY(angleInRadians: number, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + const c = Math.cos(angleInRadians); + const s = Math.sin(angleInRadians); + + newDst[ 0] = c; newDst[ 1] = 0; newDst[ 2] = -s; newDst[ 3] = 0; + newDst[ 4] = 0; newDst[ 5] = 1; newDst[ 6] = 0; newDst[ 7] = 0; + newDst[ 8] = s; newDst[ 9] = 0; newDst[10] = c; newDst[11] = 0; + newDst[12] = 0; newDst[13] = 0; newDst[14] = 0; newDst[15] = 1; + + return newDst; +} + +/** + * Rotates the given 4-by-4 matrix around the y-axis by the given + * angle. + * @param m - The matrix. + * @param angleInRadians - The angle by which to rotate (in radians). + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The rotated matrix. + */ +function rotateY(m: Mat4Arg, angleInRadians: number, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + const m00 = m[0 * 4 + 0]; + const m01 = m[0 * 4 + 1]; + const m02 = m[0 * 4 + 2]; + const m03 = m[0 * 4 + 3]; + const m20 = m[2 * 4 + 0]; + const m21 = m[2 * 4 + 1]; + const m22 = m[2 * 4 + 2]; + const m23 = m[2 * 4 + 3]; + const c = Math.cos(angleInRadians); + const s = Math.sin(angleInRadians); + + newDst[ 0] = c * m00 - s * m20; + newDst[ 1] = c * m01 - s * m21; + newDst[ 2] = c * m02 - s * m22; + newDst[ 3] = c * m03 - s * m23; + newDst[ 8] = c * m20 + s * m00; + newDst[ 9] = c * m21 + s * m01; + newDst[10] = c * m22 + s * m02; + newDst[11] = c * m23 + s * m03; + + if (m !== newDst) { + newDst[ 4] = m[ 4]; + newDst[ 5] = m[ 5]; + newDst[ 6] = m[ 6]; + newDst[ 7] = m[ 7]; + newDst[12] = m[12]; + newDst[13] = m[13]; + newDst[14] = m[14]; + newDst[15] = m[15]; + } + + return newDst; +} + +/** + * Creates a 4-by-4 matrix which rotates around the z-axis by the given angle. + * @param angleInRadians - The angle by which to rotate (in radians). + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The rotation matrix. + */ +function rotationZ(angleInRadians: number, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + const c = Math.cos(angleInRadians); + const s = Math.sin(angleInRadians); + + newDst[ 0] = c; newDst[ 1] = s; newDst[ 2] = 0; newDst[ 3] = 0; + newDst[ 4] = -s; newDst[ 5] = c; newDst[ 6] = 0; newDst[ 7] = 0; + newDst[ 8] = 0; newDst[ 9] = 0; newDst[10] = 1; newDst[11] = 0; + newDst[12] = 0; newDst[13] = 0; newDst[14] = 0; newDst[15] = 1; + + return newDst; +} + +/** + * Rotates the given 4-by-4 matrix around the z-axis by the given + * angle. + * @param m - The matrix. + * @param angleInRadians - The angle by which to rotate (in radians). + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The rotated matrix. + */ +function rotateZ(m: Mat4Arg, angleInRadians: number, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + const m00 = m[0 * 4 + 0]; + const m01 = m[0 * 4 + 1]; + const m02 = m[0 * 4 + 2]; + const m03 = m[0 * 4 + 3]; + const m10 = m[1 * 4 + 0]; + const m11 = m[1 * 4 + 1]; + const m12 = m[1 * 4 + 2]; + const m13 = m[1 * 4 + 3]; + const c = Math.cos(angleInRadians); + const s = Math.sin(angleInRadians); + + newDst[ 0] = c * m00 + s * m10; + newDst[ 1] = c * m01 + s * m11; + newDst[ 2] = c * m02 + s * m12; + newDst[ 3] = c * m03 + s * m13; + newDst[ 4] = c * m10 - s * m00; + newDst[ 5] = c * m11 - s * m01; + newDst[ 6] = c * m12 - s * m02; + newDst[ 7] = c * m13 - s * m03; + + if (m !== newDst) { + newDst[ 8] = m[ 8]; + newDst[ 9] = m[ 9]; + newDst[10] = m[10]; + newDst[11] = m[11]; + newDst[12] = m[12]; + newDst[13] = m[13]; + newDst[14] = m[14]; + newDst[15] = m[15]; + } + + return newDst; +} + +/** + * Creates a 4-by-4 matrix which rotates around the given axis by the given + * angle. + * @param axis - The axis + * about which to rotate. + * @param angleInRadians - The angle by which to rotate (in radians). + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns A matrix which rotates angle radians + * around the axis. + */ +function axisRotation(axis: Vec3Arg, angleInRadians: number, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + let x = axis[0]; + let y = axis[1]; + let z = axis[2]; + const n = Math.sqrt(x * x + y * y + z * z); + x /= n; + y /= n; + z /= n; + const xx = x * x; + const yy = y * y; + const zz = z * z; + const c = Math.cos(angleInRadians); + const s = Math.sin(angleInRadians); + const oneMinusCosine = 1 - c; + + newDst[ 0] = xx + (1 - xx) * c; + newDst[ 1] = x * y * oneMinusCosine + z * s; + newDst[ 2] = x * z * oneMinusCosine - y * s; + newDst[ 3] = 0; + newDst[ 4] = x * y * oneMinusCosine - z * s; + newDst[ 5] = yy + (1 - yy) * c; + newDst[ 6] = y * z * oneMinusCosine + x * s; + newDst[ 7] = 0; + newDst[ 8] = x * z * oneMinusCosine + y * s; + newDst[ 9] = y * z * oneMinusCosine - x * s; + newDst[10] = zz + (1 - zz) * c; + newDst[11] = 0; + newDst[12] = 0; + newDst[13] = 0; + newDst[14] = 0; + newDst[15] = 1; + + return newDst; +} + +/** + * Creates a 4-by-4 matrix which rotates around the given axis by the given + * angle. (same as axisRotation) + * @param axis - The axis + * about which to rotate. + * @param angleInRadians - The angle by which to rotate (in radians). + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns A matrix which rotates angle radians + * around the axis. + */ +const rotation = axisRotation; + +/** + * Rotates the given 4-by-4 matrix around the given axis by the + * given angle. + * @param m - The matrix. + * @param axis - The axis + * about which to rotate. + * @param angleInRadians - The angle by which to rotate (in radians). + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The rotated matrix. + */ +function axisRotate(m: Mat4Arg, axis: Vec3Arg, angleInRadians: number, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + let x = axis[0]; + let y = axis[1]; + let z = axis[2]; + const n = Math.sqrt(x * x + y * y + z * z); + x /= n; + y /= n; + z /= n; + const xx = x * x; + const yy = y * y; + const zz = z * z; + const c = Math.cos(angleInRadians); + const s = Math.sin(angleInRadians); + const oneMinusCosine = 1 - c; + + const r00 = xx + (1 - xx) * c; + const r01 = x * y * oneMinusCosine + z * s; + const r02 = x * z * oneMinusCosine - y * s; + const r10 = x * y * oneMinusCosine - z * s; + const r11 = yy + (1 - yy) * c; + const r12 = y * z * oneMinusCosine + x * s; + const r20 = x * z * oneMinusCosine + y * s; + const r21 = y * z * oneMinusCosine - x * s; + const r22 = zz + (1 - zz) * c; + + const m00 = m[0]; + const m01 = m[1]; + const m02 = m[2]; + const m03 = m[3]; + const m10 = m[4]; + const m11 = m[5]; + const m12 = m[6]; + const m13 = m[7]; + const m20 = m[8]; + const m21 = m[9]; + const m22 = m[10]; + const m23 = m[11]; + + newDst[ 0] = r00 * m00 + r01 * m10 + r02 * m20; + newDst[ 1] = r00 * m01 + r01 * m11 + r02 * m21; + newDst[ 2] = r00 * m02 + r01 * m12 + r02 * m22; + newDst[ 3] = r00 * m03 + r01 * m13 + r02 * m23; + newDst[ 4] = r10 * m00 + r11 * m10 + r12 * m20; + newDst[ 5] = r10 * m01 + r11 * m11 + r12 * m21; + newDst[ 6] = r10 * m02 + r11 * m12 + r12 * m22; + newDst[ 7] = r10 * m03 + r11 * m13 + r12 * m23; + newDst[ 8] = r20 * m00 + r21 * m10 + r22 * m20; + newDst[ 9] = r20 * m01 + r21 * m11 + r22 * m21; + newDst[10] = r20 * m02 + r21 * m12 + r22 * m22; + newDst[11] = r20 * m03 + r21 * m13 + r22 * m23; + + if (m !== newDst) { + newDst[12] = m[12]; + newDst[13] = m[13]; + newDst[14] = m[14]; + newDst[15] = m[15]; + } + + return newDst; +} + +/** + * Rotates the given 4-by-4 matrix around the given axis by the + * given angle. (same as rotate) + * @param m - The matrix. + * @param axis - The axis + * about which to rotate. + * @param angleInRadians - The angle by which to rotate (in radians). + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The rotated matrix. + */ +const rotate = axisRotate; + +/** + * Creates a 4-by-4 matrix which scales in each dimension by an amount given by + * the corresponding entry in the given vector; assumes the vector has three + * entries. + * @param v - A vector of + * three entries specifying the factor by which to scale in each dimension. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The scaling matrix. + */ +function scaling(v: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + newDst[ 0] = v[0]; newDst[ 1] = 0; newDst[ 2] = 0; newDst[ 3] = 0; + newDst[ 4] = 0; newDst[ 5] = v[1]; newDst[ 6] = 0; newDst[ 7] = 0; + newDst[ 8] = 0; newDst[ 9] = 0; newDst[10] = v[2]; newDst[11] = 0; + newDst[12] = 0; newDst[13] = 0; newDst[14] = 0; newDst[15] = 1; + + return newDst; +} + +/** + * Scales the given 4-by-4 matrix in each dimension by an amount + * given by the corresponding entry in the given vector; assumes the vector has + * three entries. + * @param m - The matrix to be modified. + * @param v - A vector of three entries specifying the + * factor by which to scale in each dimension. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The scaled matrix. + */ +function scale(m: Mat4Arg, v: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + const v0 = v[0]; + const v1 = v[1]; + const v2 = v[2]; + + newDst[ 0] = v0 * m[0 * 4 + 0]; + newDst[ 1] = v0 * m[0 * 4 + 1]; + newDst[ 2] = v0 * m[0 * 4 + 2]; + newDst[ 3] = v0 * m[0 * 4 + 3]; + newDst[ 4] = v1 * m[1 * 4 + 0]; + newDst[ 5] = v1 * m[1 * 4 + 1]; + newDst[ 6] = v1 * m[1 * 4 + 2]; + newDst[ 7] = v1 * m[1 * 4 + 3]; + newDst[ 8] = v2 * m[2 * 4 + 0]; + newDst[ 9] = v2 * m[2 * 4 + 1]; + newDst[10] = v2 * m[2 * 4 + 2]; + newDst[11] = v2 * m[2 * 4 + 3]; + + if (m !== newDst) { + newDst[12] = m[12]; + newDst[13] = m[13]; + newDst[14] = m[14]; + newDst[15] = m[15]; + } + + return newDst; +} + +/** + * Creates a 4-by-4 matrix which scales a uniform amount in each dimension. + * @param s - the amount to scale + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The scaling matrix. + */ +function uniformScaling(s: number, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + newDst[ 0] = s; newDst[ 1] = 0; newDst[ 2] = 0; newDst[ 3] = 0; + newDst[ 4] = 0; newDst[ 5] = s; newDst[ 6] = 0; newDst[ 7] = 0; + newDst[ 8] = 0; newDst[ 9] = 0; newDst[10] = s; newDst[11] = 0; + newDst[12] = 0; newDst[13] = 0; newDst[14] = 0; newDst[15] = 1; + + return newDst; +} + +/** + * Scales the given 4-by-4 matrix in each dimension by a uniform scale. + * @param m - The matrix to be modified. + * @param s - The amount to scale. + * @param dst - matrix to hold result. If not passed a new one is created. + * @returns The scaled matrix. + */ +function uniformScale(m: Mat4Arg, s: number, dst?: T) { + const newDst = (dst ?? new Ctor(16)) as T; + + newDst[ 0] = s * m[0 * 4 + 0]; + newDst[ 1] = s * m[0 * 4 + 1]; + newDst[ 2] = s * m[0 * 4 + 2]; + newDst[ 3] = s * m[0 * 4 + 3]; + newDst[ 4] = s * m[1 * 4 + 0]; + newDst[ 5] = s * m[1 * 4 + 1]; + newDst[ 6] = s * m[1 * 4 + 2]; + newDst[ 7] = s * m[1 * 4 + 3]; + newDst[ 8] = s * m[2 * 4 + 0]; + newDst[ 9] = s * m[2 * 4 + 1]; + newDst[10] = s * m[2 * 4 + 2]; + newDst[11] = s * m[2 * 4 + 3]; + + if (m !== newDst) { + newDst[12] = m[12]; + newDst[13] = m[13]; + newDst[14] = m[14]; + newDst[15] = m[15]; + } + + return newDst; +} + +return { + create, + set, + fromMat3, + fromQuat, + negate, + copy, + clone, + equalsApproximately, + equals, + identity, + transpose, + inverse, + determinant, + invert, + multiply, + mul, + setTranslation, + getTranslation, + getAxis, + setAxis, + getScaling, + perspective, + perspectiveReverseZ, + ortho, + frustum, + frustumReverseZ, + aim, + cameraAim, + lookAt, + translation, + translate, + rotationX, + rotateX, + rotationY, + rotateY, + rotationZ, + rotateZ, + axisRotation, + rotation, + axisRotate, + rotate, + scaling, + scale, + uniformScaling, + uniformScale, +}; + +} + + +type API = ReturnType>; + +const cache = new Map(); + +export function getAPI(Ctor: Mat4Ctor) { + let api = cache.get(Ctor); + if (!api) { + api = getAPIImpl(Ctor); + cache.set(Ctor, api); + } + return api as API; +} diff --git a/tools/demo/wgpu-matrix/mat4.ts b/tools/demo/wgpu-matrix/mat4.ts new file mode 100644 index 000000000..6dcc89974 --- /dev/null +++ b/tools/demo/wgpu-matrix/mat4.ts @@ -0,0 +1,33 @@ +/* + * Copyright 2022 Gregg Tavares + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ +import { BaseArgType } from "./types"; + +/** + * A JavaScript array with 16 values, a Float32Array with 16 values, or a Float64Array with 16 values. + */ +export type Mat4Arg = BaseArgType; + +/** + * A specific concrete 4x4 Matrix Type + */ +export type Mat4Type = T; + diff --git a/tools/demo/wgpu-matrix/quat-impl.ts b/tools/demo/wgpu-matrix/quat-impl.ts new file mode 100644 index 000000000..75f6d89c6 --- /dev/null +++ b/tools/demo/wgpu-matrix/quat-impl.ts @@ -0,0 +1,924 @@ +/* + * Copyright 2022 Gregg Tavares + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ +import * as utils from './utils'; +import { QuatArg, QuatType } from './quat'; +import { Mat3Arg } from './mat3.js'; +import { Mat4Arg } from './mat4.js'; +import { Vec3Arg } from './vec3.js'; +import { getAPI as getVec3API } from './vec3-impl'; +import { BaseArgType } from './types'; + +export { QuatArg, QuatType }; + +type QuatCtor = new (n: number) => T; + +export type RotationOrder = 'xyz' | 'xzy' | 'yxz' | 'yzx' | 'zxy' | 'zyx'; + +/** + * Generates am typed API for Qud + * */ +function getAPIImpl(Ctor: QuatCtor) { + const vec3 = getVec3API(Ctor); + +/** + * Creates a quat4; may be called with x, y, z to set initial values. + * @param x - Initial x value. + * @param y - Initial y value. + * @param z - Initial z value. + * @param w - Initial w value. + * @returns the created vector + */ +function create(x?: number, y?: number, z?: number, w?: number) { + const newDst = new Ctor(4); + if (x !== undefined) { + newDst[0] = x; + if (y !== undefined) { + newDst[1] = y; + if (z !== undefined) { + newDst[2] = z; + if (w !== undefined) { + newDst[3] = w; + } + } + } + } + return newDst; +} + +/** + * Creates a Quat; may be called with x, y, z to set initial values. (same as create) + * @param x - Initial x value. + * @param y - Initial y value. + * @param z - Initial z value. + * @param z - Initial w value. + * @returns the created vector + */ +const fromValues = create; + +/** + * Sets the values of a Quat + * Also see {@link quat.create} and {@link quat.copy} + * + * @param x first value + * @param y second value + * @param z third value + * @param w fourth value + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector with its elements set. + */ +function set(x: number, y: number, z: number, w: number, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = x; + newDst[1] = y; + newDst[2] = z; + newDst[3] = w; + + return newDst; +} + +/** + * Sets a quaternion from the given angle and axis, + * then returns it. + * + * @param axis - the axis to rotate around + * @param angleInRadians - the angle + * @param dst - quaternion to hold result. If not passed in a new one is created. + * @returns The quaternion that represents the given axis and angle + **/ +function fromAxisAngle(axis: Vec3Arg, angleInRadians: number, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + const halfAngle = angleInRadians * 0.5; + const s = Math.sin(halfAngle); + + newDst[0] = s * axis[0]; + newDst[1] = s * axis[1]; + newDst[2] = s * axis[2]; + newDst[3] = Math.cos(halfAngle); + + return newDst; +} + +/** + * Gets the rotation axis and angle + * @param q - quaternion to compute from + * @param dst - Vec3 to hold result. If not passed in a new one is created. + * @return angle and axis + */ +function toAxisAngle(q: QuatArg, dst?: T): { angle: number, axis: T } { + const newDst = (dst ?? vec3.create(3)) as T; + + const angle = Math.acos(q[3]) * 2; + const s = Math.sin(angle * 0.5); + if (s > utils.EPSILON) { + newDst[0] = q[0] / s; + newDst[1] = q[1] / s; + newDst[2] = q[2] / s; + } else { + newDst[0] = 1; + newDst[1] = 0; + newDst[2] = 0; + } + + return { angle, axis: newDst }; +} + +/** + * Returns the angle in degrees between two rotations a and b. + * @param a - quaternion a + * @param b - quaternion b + * @return angle in radians between the two quaternions + */ +function angle(a: QuatArg, b: QuatArg) { + const d = dot(a, b); + return Math.acos(2 * d * d - 1); +} + +/** + * Multiplies two quaternions + * + * @param a - the first quaternion + * @param b - the second quaternion + * @param dst - quaternion to hold result. If not passed in a new one is created. + * @returns A quaternion that is the result of a * b + */ +function multiply(a: QuatArg, b: QuatArg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + const ax = a[0]; + const ay = a[1]; + const az = a[2]; + const aw = a[3]; + + const bx = b[0]; + const by = b[1]; + const bz = b[2]; + const bw = b[3]; + + newDst[0] = ax * bw + aw * bx + ay * bz - az * by; + newDst[1] = ay * bw + aw * by + az * bx - ax * bz; + newDst[2] = az * bw + aw * bz + ax * by - ay * bx; + newDst[3] = aw * bw - ax * bx - ay * by - az * bz; + + return newDst; +} + +/** + * Multiplies two quaternions + * + * @param a - the first quaternion + * @param b - the second quaternion + * @param dst - quaternion to hold result. If not passed in a new one is created. + * @returns A quaternion that is the result of a * b + */ +const mul = multiply; + +/** + * Rotates the given quaternion around the X axis by the given angle. + * @param q - quaternion to rotate + * @param angleInRadians - The angle by which to rotate + * @param dst - quaternion to hold result. If not passed in a new one is created. + * @returns A quaternion that is the result of a * b + */ +function rotateX(q: QuatArg, angleInRadians: number, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + const halfAngle = angleInRadians * 0.5; + + const qx = q[0]; + const qy = q[1]; + const qz = q[2]; + const qw = q[3]; + + const bx = Math.sin(halfAngle); + const bw = Math.cos(halfAngle); + + newDst[0] = qx * bw + qw * bx; + newDst[1] = qy * bw + qz * bx; + newDst[2] = qz * bw - qy * bx; + newDst[3] = qw * bw - qx * bx; + + return newDst; +} + +/** + * Rotates the given quaternion around the Y axis by the given angle. + * @param q - quaternion to rotate + * @param angleInRadians - The angle by which to rotate + * @param dst - quaternion to hold result. If not passed in a new one is created. + * @returns A quaternion that is the result of a * b + */ +function rotateY(q: QuatArg, angleInRadians: number, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + const halfAngle = angleInRadians * 0.5; + + const qx = q[0]; + const qy = q[1]; + const qz = q[2]; + const qw = q[3]; + + const by = Math.sin(halfAngle); + const bw = Math.cos(halfAngle); + + newDst[0] = qx * bw - qz * by; + newDst[1] = qy * bw + qw * by; + newDst[2] = qz * bw + qx * by; + newDst[3] = qw * bw - qy * by; + + return newDst; +} + +/** + * Rotates the given quaternion around the Z axis by the given angle. + * @param q - quaternion to rotate + * @param angleInRadians - The angle by which to rotate + * @param dst - quaternion to hold result. If not passed in a new one is created. + * @returns A quaternion that is the result of a * b + */ +function rotateZ(q: QuatArg, angleInRadians: number, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + const halfAngle = angleInRadians * 0.5; + + const qx = q[0]; + const qy = q[1]; + const qz = q[2]; + const qw = q[3]; + + const bz = Math.sin(halfAngle); + const bw = Math.cos(halfAngle); + + newDst[0] = qx * bw + qy * bz; + newDst[1] = qy * bw - qx * bz; + newDst[2] = qz * bw + qw * bz; + newDst[3] = qw * bw - qz * bz; + + return newDst; +} + +/** + * Spherically linear interpolate between two quaternions + * + * @param a - starting value + * @param b - ending value + * @param t - value where 0 = a and 1 = b + * @param dst - quaternion to hold result. If not passed in a new one is created. + * @returns A quaternion that is the result of a * b + */ +function slerp(a: QuatArg, b: QuatArg, t: number, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + const ax = a[0]; + const ay = a[1]; + const az = a[2]; + const aw = a[3]; + + let bx = b[0]; + let by = b[1]; + let bz = b[2]; + let bw = b[3]; + + let cosOmega = ax * bx + ay * by + az * bz + aw * bw; + + if (cosOmega < 0) { + cosOmega = -cosOmega; + bx = -bx; + by = -by; + bz = -bz; + bw = -bw; + } + + let scale0; + let scale1; + + if (1.0 - cosOmega > utils.EPSILON) { + const omega = Math.acos(cosOmega); + const sinOmega = Math.sin(omega); + scale0 = Math.sin((1 - t) * omega) / sinOmega; + scale1 = Math.sin(t * omega) / sinOmega; + } else { + scale0 = 1.0 - t; + scale1 = t; + } + + newDst[0] = scale0 * ax + scale1 * bx; + newDst[1] = scale0 * ay + scale1 * by; + newDst[2] = scale0 * az + scale1 * bz; + newDst[3] = scale0 * aw + scale1 * bw; + + return newDst; +} + +/** + * Compute the inverse of a quaternion + * + * @param q - quaternion to compute the inverse of + * @returns A quaternion that is the result of a * b + */ +function inverse(q: QuatArg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + const a0 = q[0]; + const a1 = q[1]; + const a2 = q[2]; + const a3 = q[3]; + + const dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3; + const invDot = dot ? 1 / dot : 0; + + newDst[0] = -a0 * invDot; + newDst[1] = -a1 * invDot; + newDst[2] = -a2 * invDot; + newDst[3] = a3 * invDot; + + return newDst; +} + +/** + * Compute the conjugate of a quaternion + * For quaternions with a magnitude of 1 (a unit quaternion) + * this returns the same as the inverse but is faster to calculate. + * + * @param q - quaternion to compute the conjugate of. + * @param dst - quaternion to hold result. If not passed in a new one is created. + * @returns The conjugate of q + */ +function conjugate(q: QuatArg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = -q[0]; + newDst[1] = -q[1]; + newDst[2] = -q[2]; + newDst[3] = q[3]; + + return newDst; +} + +/** + * Creates a quaternion from the given rotation matrix. + * + * The created quaternion is not normalized. + * + * @param m - rotation matrix + * @param dst - quaternion to hold result. If not passed in a new one is created. + * @returns the result + */ +function fromMat(m: Mat3Arg | Mat4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + /* + 0 1 2 + 3 4 5 + 6 7 8 + + 0 1 2 + 4 5 6 + 8 9 10 + */ + + // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes + // article "Quaternion Calculus and Fast Animation". + const trace = m[0] + m[5] + m[10]; + + if (trace > 0.0) { + // |w| > 1/2, may as well choose w > 1/2 + const root = Math.sqrt(trace + 1); // 2w + newDst[3] = 0.5 * root; + const invRoot = 0.5 / root; // 1/(4w) + + newDst[0] = (m[6] - m[9]) * invRoot; + newDst[1] = (m[8] - m[2]) * invRoot; + newDst[2] = (m[1] - m[4]) * invRoot; + } else { + // |w| <= 1/2 + let i = 0; + + if (m[5] > m[0]) { + i = 1; + } + if (m[10] > m[i * 4 + i]) { + i = 2; + } + + const j = (i + 1) % 3; + const k = (i + 2) % 3; + + const root = Math.sqrt(m[i * 4 + i] - m[j * 4 + j] - m[k * 4 + k] + 1.0); + newDst[i] = 0.5 * root; + + const invRoot = 0.5 / root; + + newDst[3] = (m[j * 4 + k] - m[k * 4 + j]) * invRoot; + newDst[j] = (m[j * 4 + i] + m[i * 4 + j]) * invRoot; + newDst[k] = (m[k * 4 + i] + m[i * 4 + k]) * invRoot; + } + + return newDst; +} + +/** + * Creates a quaternion from the given euler angle x, y, z using the provided intrinsic order for the conversion. + * + * @param xAngleInRadians - angle to rotate around X axis in radians. + * @param yAngleInRadians - angle to rotate around Y axis in radians. + * @param zAngleInRadians - angle to rotate around Z axis in radians. + * @param order - order to apply euler angles + * @param dst - quaternion to hold result. If not passed in a new one is created. + * @returns A quaternion representing the same rotation as the euler angles applied in the given order + */ +function fromEuler( + xAngleInRadians: number, + yAngleInRadians: number, + zAngleInRadians: number, + order: RotationOrder, + dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + const xHalfAngle = xAngleInRadians * 0.5; + const yHalfAngle = yAngleInRadians * 0.5; + const zHalfAngle = zAngleInRadians * 0.5; + + const sx = Math.sin(xHalfAngle); + const cx = Math.cos(xHalfAngle); + const sy = Math.sin(yHalfAngle); + const cy = Math.cos(yHalfAngle); + const sz = Math.sin(zHalfAngle); + const cz = Math.cos(zHalfAngle); + + switch (order) { + case 'xyz': + newDst[0] = sx * cy * cz + cx * sy * sz; + newDst[1] = cx * sy * cz - sx * cy * sz; + newDst[2] = cx * cy * sz + sx * sy * cz; + newDst[3] = cx * cy * cz - sx * sy * sz; + break; + + case 'xzy': + newDst[0] = sx * cy * cz - cx * sy * sz; + newDst[1] = cx * sy * cz - sx * cy * sz; + newDst[2] = cx * cy * sz + sx * sy * cz; + newDst[3] = cx * cy * cz + sx * sy * sz; + break; + + case 'yxz': + newDst[0] = sx * cy * cz + cx * sy * sz; + newDst[1] = cx * sy * cz - sx * cy * sz; + newDst[2] = cx * cy * sz - sx * sy * cz; + newDst[3] = cx * cy * cz + sx * sy * sz; + break; + + case 'yzx': + newDst[0] = sx * cy * cz + cx * sy * sz; + newDst[1] = cx * sy * cz + sx * cy * sz; + newDst[2] = cx * cy * sz - sx * sy * cz; + newDst[3] = cx * cy * cz - sx * sy * sz; + break; + + case 'zxy': + newDst[0] = sx * cy * cz - cx * sy * sz; + newDst[1] = cx * sy * cz + sx * cy * sz; + newDst[2] = cx * cy * sz + sx * sy * cz; + newDst[3] = cx * cy * cz - sx * sy * sz; + break; + + case 'zyx': + newDst[0] = sx * cy * cz - cx * sy * sz; + newDst[1] = cx * sy * cz + sx * cy * sz; + newDst[2] = cx * cy * sz - sx * sy * cz; + newDst[3] = cx * cy * cz + sx * sy * sz; + break; + + default: + throw new Error(`Unknown rotation order: ${order}`); + } + + return newDst; +} + +/** + * Copies a quaternion. (same as {@link quat.clone}) + * Also see {@link quat.create} and {@link quat.set} + * @param q - The quaternion. + * @param dst - quaternion to hold result. If not passed in a new one is created. + * @returns A quaternion that is a copy of q + */ +function copy(q: QuatArg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = q[0]; + newDst[1] = q[1]; + newDst[2] = q[2]; + newDst[3] = q[3]; + + return newDst; +} + +/** + * Clones a quaternion. (same as {@link quat.copy}) + * Also see {@link quat.create} and {@link quat.set} + * @param q - The quaternion. + * @param dst - quaternion to hold result. If not passed in a new one is created. + * @returns A copy of q. + */ +const clone = copy; + +/** + * Adds two quaternions; assumes a and b have the same dimension. + * @param a - Operand quaternion. + * @param b - Operand quaternion. + * @param dst - quaternion to hold result. If not passed in a new one is created. + * @returns A quaternion that is the sum of a and b. + */ +function add(a: QuatArg, b: QuatArg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = a[0] + b[0]; + newDst[1] = a[1] + b[1]; + newDst[2] = a[2] + b[2]; + newDst[3] = a[3] + b[3]; + + return newDst; +} + +/** + * Subtracts two quaternions. + * @param a - Operand quaternion. + * @param b - Operand quaternion. + * @param dst - quaternion to hold result. If not passed in a new one is created. + * @returns A quaternion that is the difference of a and b. + */ +function subtract(a: QuatArg, b: QuatArg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = a[0] - b[0]; + newDst[1] = a[1] - b[1]; + newDst[2] = a[2] - b[2]; + newDst[3] = a[3] - b[3]; + + return newDst; +} + +/** + * Subtracts two quaternions. + * @param a - Operand quaternion. + * @param b - Operand quaternion. + * @param dst - quaternion to hold result. If not passed in a new one is created. + * @returns A quaternion that is the difference of a and b. + */ +const sub = subtract; + +/** + * Multiplies a quaternion by a scalar. + * @param v - The quaternion. + * @param k - The scalar. + * @param dst - quaternion to hold result. If not passed in a new one is created. + * @returns The scaled quaternion. + */ +function mulScalar(v: QuatArg, k: number, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = v[0] * k; + newDst[1] = v[1] * k; + newDst[2] = v[2] * k; + newDst[3] = v[3] * k; + + return newDst; +} + +/** + * Multiplies a quaternion by a scalar. (same as mulScalar) + * @param v - The quaternion. + * @param k - The scalar. + * @param dst - quaternion to hold result. If not passed in a new one is created. + * @returns The scaled quaternion. + */ +const scale = mulScalar; + +/** + * Divides a vector by a scalar. + * @param v - The vector. + * @param k - The scalar. + * @param dst - quaternion to hold result. If not passed in a new one is created. + * @returns The scaled quaternion. + */ +function divScalar(v: QuatArg, k: number, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = v[0] / k; + newDst[1] = v[1] / k; + newDst[2] = v[2] / k; + newDst[3] = v[3] / k; + + return newDst; +} + +/** + * Computes the dot product of two quaternions + * @param a - Operand quaternion. + * @param b - Operand quaternion. + * @returns dot product + */ +function dot(a: QuatArg, b: QuatArg): number { + return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]); +} + +/** + * Performs linear interpolation on two quaternions. + * Given quaternions a and b and interpolation coefficient t, returns + * a + t * (b - a). + * @param a - Operand quaternion. + * @param b - Operand quaternion. + * @param t - Interpolation coefficient. + * @param dst - quaternion to hold result. If not passed in a new one is created. + * @returns The linear interpolated result. + */ +function lerp(a: QuatArg, b: QuatArg, t: number, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = a[0] + t * (b[0] - a[0]); + newDst[1] = a[1] + t * (b[1] - a[1]); + newDst[2] = a[2] + t * (b[2] - a[2]); + newDst[3] = a[3] + t * (b[3] - a[3]); + + return newDst; +} + +/** + * Computes the length of quaternion + * @param v - quaternion. + * @returns length of quaternion. + */ +function length(v: QuatArg): number { + const v0 = v[0]; + const v1 = v[1]; + const v2 = v[2]; + const v3 = v[3]; + return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3); +} + +/** + * Computes the length of quaternion (same as length) + * @param v - quaternion. + * @returns length of quaternion. + */ +const len = length; + +/** + * Computes the square of the length of quaternion + * @param v - quaternion. + * @returns square of the length of quaternion. + */ +function lengthSq(v: QuatArg): number { + const v0 = v[0]; + const v1 = v[1]; + const v2 = v[2]; + const v3 = v[3]; + return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3; +} + +/** + * Computes the square of the length of quaternion (same as lengthSq) + * @param v - quaternion. + * @returns square of the length of quaternion. + */ +const lenSq = lengthSq; + +/** + * Divides a quaternion by its Euclidean length and returns the quotient. + * @param v - The quaternion. + * @param dst - quaternion to hold result. If not passed in a new one is created. + * @returns The normalized quaternion. + */ +function normalize(v: QuatArg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + const v0 = v[0]; + const v1 = v[1]; + const v2 = v[2]; + const v3 = v[3]; + const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3); + + if (len > 0.00001) { + newDst[0] = v0 / len; + newDst[1] = v1 / len; + newDst[2] = v2 / len; + newDst[3] = v3 / len; + } else { + newDst[0] = 0; + newDst[1] = 0; + newDst[2] = 0; + newDst[3] = 0; + } + + return newDst; +} + +/** + * Check if 2 quaternions are approximately equal + * @param a - Operand quaternion. + * @param b - Operand quaternion. + * @returns true if quaternions are approximately equal + */ +function equalsApproximately(a: QuatArg, b: QuatArg): boolean { + return Math.abs(a[0] - b[0]) < utils.EPSILON && + Math.abs(a[1] - b[1]) < utils.EPSILON && + Math.abs(a[2] - b[2]) < utils.EPSILON && + Math.abs(a[3] - b[3]) < utils.EPSILON; +} + +/** + * Check if 2 quaternions are exactly equal + * @param a - Operand quaternion. + * @param b - Operand quaternion. + * @returns true if quaternions are exactly equal + */ +function equals(a: QuatArg, b: QuatArg): boolean { + return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3]; +} + +/** + * Creates an identity quaternion + * @param dst - quaternion to hold result. If not passed in a new one is created. + * @returns an identity quaternion + */ +function identity(dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = 0; + newDst[1] = 0; + newDst[2] = 0; + newDst[3] = 1; + + return newDst; +} + +const tempVec3 = vec3.create(); +const xUnitVec3 = vec3.create(); +const yUnitVec3 = vec3.create(); + +/** + * Computes a quaternion to represent the shortest rotation from one vector to another. + * + * @param aUnit - the start vector + * @param bUnit - the end vector + * @param dst - quaternion to hold result. If not passed in a new one is created. + * @returns the result + */ +function rotationTo(aUnit: Vec3Arg, bUnit: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + const dot = vec3.dot(aUnit, bUnit); + if (dot < -0.999999) { + vec3.cross(xUnitVec3, aUnit, tempVec3); + if (vec3.len(tempVec3) < 0.000001) { + vec3.cross(yUnitVec3, aUnit, tempVec3); + } + + vec3.normalize(tempVec3, tempVec3); + fromAxisAngle(tempVec3, Math.PI, newDst); + + return newDst; + } else if (dot > 0.999999) { + newDst[0] = 0; + newDst[1] = 0; + newDst[2] = 0; + newDst[3] = 1; + + return newDst; + } else { + vec3.cross(aUnit, bUnit, tempVec3); + + newDst[0] = tempVec3[0]; + newDst[1] = tempVec3[1]; + newDst[2] = tempVec3[2]; + newDst[3] = 1 + dot; + + return normalize(newDst, newDst); + } +} + +const tempQuat1 = new Ctor(4); +const tempQuat2 = new Ctor(4); + +/** + * Performs a spherical linear interpolation with two control points + * + * @param a - the first quaternion + * @param b - the second quaternion + * @param c - the third quaternion + * @param d - the fourth quaternion + * @param t - Interpolation coefficient 0 to 1 + * @returns result + */ +function sqlerp( + a: QuatArg, + b: QuatArg, + c: QuatArg, + d: QuatArg, + t: number, + dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + slerp(a, d, t, tempQuat1); + slerp(b, c, t, tempQuat2); + slerp(tempQuat1, tempQuat2, 2 * t * (1 - t), newDst); + + return newDst; +} + +return { + create, + fromValues, + set, + fromAxisAngle, + toAxisAngle, + angle, + multiply, + mul, + rotateX, + rotateY, + rotateZ, + slerp, + inverse, + conjugate, + fromMat, + fromEuler, + copy, + clone, + add, + subtract, + sub, + mulScalar, + scale, + divScalar, + dot, + lerp, + length, + len, + lengthSq, + lenSq, + normalize, + equalsApproximately, + equals, + identity, + rotationTo, + sqlerp, +}; + +} + +type API = ReturnType>; + +const cache = new Map(); + +/** + * + * Quat4 math functions. + * + * Almost all functions take an optional `newDst` argument. If it is not passed in the + * functions will create a new `Quat4`. In other words you can do this + * + * const v = quat4.cross(v1, v2); // Creates a new Quat4 with the cross product of v1 x v2. + * + * or + * + * const v = quat4.create(); + * quat4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v + * + * The first style is often easier but depending on where it's used it generates garbage where + * as there is almost never allocation with the second style. + * + * It is always safe to pass any vector as the destination. So for example + * + * quat4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1 + * + */ +export function getAPI(Ctor: QuatCtor) { + let api = cache.get(Ctor); + if (!api) { + api = getAPIImpl(Ctor); + cache.set(Ctor, api); + } + return api as API; +} diff --git a/tools/demo/wgpu-matrix/quat.ts b/tools/demo/wgpu-matrix/quat.ts new file mode 100644 index 000000000..f8935f712 --- /dev/null +++ b/tools/demo/wgpu-matrix/quat.ts @@ -0,0 +1,34 @@ +/* + * Copyright 2022 Gregg Tavares + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +import { BaseArgType } from "./types"; + +/** + * A JavaScript array with 4 values, a Float32Array with 4 values, or a Float64Array with 4 values. + */ +export type QuatArg = BaseArgType; + +/** + * A specific concrete 4x4 Matrix Type + */ +export type QuatType = T; + diff --git a/tools/demo/wgpu-matrix/types.ts b/tools/demo/wgpu-matrix/types.ts new file mode 100644 index 000000000..87cb587aa --- /dev/null +++ b/tools/demo/wgpu-matrix/types.ts @@ -0,0 +1,20 @@ +/** + * The types you can pass to most functions that take an + * array of numbers. + */ +export type BaseArgType = Float32Array | Float64Array | number[]; + +function wrapConstructor any>( + OriginalConstructor: T, + modifier: (instance: InstanceType) => void +): T { + return class extends OriginalConstructor { + constructor(...args: any[]) { + super(...args); + modifier(this as InstanceType); + } + } as T; // Type assertion is necessary here +} + +export const ZeroArray = wrapConstructor(Array, a => a.fill(0)); + diff --git a/tools/demo/wgpu-matrix/utils.ts b/tools/demo/wgpu-matrix/utils.ts new file mode 100644 index 000000000..96595ba07 --- /dev/null +++ b/tools/demo/wgpu-matrix/utils.ts @@ -0,0 +1,98 @@ +/* + * Copyright 2022 Gregg Tavares + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +export let EPSILON = 0.000001; + +/** + * Set the value for EPSILON for various checks + * @param v - Value to use for EPSILON. + * @returns previous value of EPSILON; + */ +export function setEpsilon(v: number): number { + const old = EPSILON; + EPSILON = v; + return old; +} + +/** + * Convert degrees to radians + * @param degrees - Angle in degrees + * @returns angle converted to radians + */ +export function degToRad(degrees: number): number { + return degrees * Math.PI / 180; +} + +/** + * Convert radians to degrees + * @param radians - Angle in radians + * @returns angle converted to degrees + */ +export function radToDeg(radians: number): number { + return radians * 180 / Math.PI; +} + +/** + * Lerps between a and b via t + * @param a - starting value + * @param b - ending value + * @param t - value where 0 = a and 1 = b + * @returns a + (b - a) * t + */ +export function lerp(a: number, b: number, t: number): number { + return a + (b - a) * t; +} + +/** + * Compute the opposite of lerp. Given a and b and a value between + * a and b returns a value between 0 and 1. 0 if a, 1 if b. + * Note: no clamping is done. + * @param a - start value + * @param b - end value + * @param v - value between a and b + * @returns (v - a) / (b - a) + */ +export function inverseLerp(a: number, b: number, v: number): number { + const d = b - a; + return (Math.abs(b - a) < EPSILON) + ? a + : (v - a) / d; +} + +/** + * Compute the euclidean modulo + * + * ``` + * // table for n / 3 + * -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 <- n + * ------------------------------------ + * -2 -1 -0 -2 -1 0, 1, 2, 0, 1, 2 <- n % 3 + * 1 2 0 1 2 0, 1, 2, 0, 1, 2 <- euclideanModule(n, 3) + * ``` + * + * @param n - dividend + * @param m - divisor + * @returns the euclidean modulo of n / m + */ +export function euclideanModulo(n: number, m: number) { + return ((n % m) + m) % m; +} \ No newline at end of file diff --git a/tools/demo/wgpu-matrix/vec2-impl.ts b/tools/demo/wgpu-matrix/vec2-impl.ts new file mode 100644 index 000000000..94f28e56a --- /dev/null +++ b/tools/demo/wgpu-matrix/vec2-impl.ts @@ -0,0 +1,811 @@ +/* + * Copyright 2022 Gregg Tavares + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ +import * as utils from './utils'; +import { Mat3Arg } from './mat3'; +import { Mat4Arg } from './mat4'; +import { Vec2Arg, Vec2Type } from './vec2'; +import { Vec3Arg } from './vec3'; +import { BaseArgType } from './types'; + +export { Vec2Arg, Vec2Type }; + +type Vec2Ctor = new (n: number) => T; + +/** + * Generates am typed API for Vec3 + */ +function getAPIImpl(Ctor: Vec2Ctor) { + +/** + * Creates a Vec2; may be called with x, y, z to set initial values. + * + * Note: Since passing in a raw JavaScript array + * is valid in all circumstances, if you want to + * force a JavaScript array into a Vec2's specified type + * it would be faster to use + * + * ``` + * const v = vec2.clone(someJSArray); + * ``` + * + * @param x - Initial x value. + * @param y - Initial y value. + * @returns the created vector + */ +function create(x = 0, y = 0) { + const newDst = new Ctor(2); + if (x !== undefined) { + newDst[0] = x; + if (y !== undefined) { + newDst[1] = y; + } + } + return newDst; +} + +/** + * Creates a Vec2; may be called with x, y, z to set initial values. (same as create) + * @param x - Initial x value. + * @param y - Initial y value. + * @returns the created vector + */ +const fromValues = create; + +/** + * Sets the values of a Vec2 + * Also see {@link vec2.create} and {@link vec2.copy} + * + * @param x first value + * @param y second value + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector with its elements set. + */ +function set(x: number, y: number, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + newDst[0] = x; + newDst[1] = y; + + return newDst; +} + +/** + * Applies Math.ceil to each element of vector + * @param v - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that is the ceil of each element of v. + */ +function ceil(v: Vec2Arg, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + newDst[0] = Math.ceil(v[0]); + newDst[1] = Math.ceil(v[1]); + + return newDst; +} + +/** + * Applies Math.floor to each element of vector + * @param v - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that is the floor of each element of v. + */ +function floor(v: Vec2Arg, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + newDst[0] = Math.floor(v[0]); + newDst[1] = Math.floor(v[1]); + + return newDst; +} + +/** + * Applies Math.round to each element of vector + * @param v - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that is the round of each element of v. + */ +function round(v: Vec2Arg, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + newDst[0] = Math.round(v[0]); + newDst[1] = Math.round(v[1]); + + return newDst; +} + +/** + * Clamp each element of vector between min and max + * @param v - Operand vector. + * @param max - Min value, default 0 + * @param min - Max value, default 1 + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that the clamped value of each element of v. + */ +function clamp(v: Vec2Arg, min = 0, max = 1, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + newDst[0] = Math.min(max, Math.max(min, v[0])); + newDst[1] = Math.min(max, Math.max(min, v[1])); + + return newDst; +} + +/** + * Adds two vectors; assumes a and b have the same dimension. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that is the sum of a and b. + */ +function add(a: Vec2Arg, b: Vec2Arg, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + newDst[0] = a[0] + b[0]; + newDst[1] = a[1] + b[1]; + + return newDst; +} + +/** + * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension. + * @param a - Operand vector. + * @param b - Operand vector. + * @param scale - Amount to scale b + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that is the sum of a + b * scale. + */ +function addScaled(a: Vec2Arg, b: Vec2Arg, scale: number, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + newDst[0] = a[0] + b[0] * scale; + newDst[1] = a[1] + b[1] * scale; + + return newDst; +} + +/** + * Returns the angle in radians between two vectors. + * @param a - Operand vector. + * @param b - Operand vector. + * @returns The angle in radians between the 2 vectors. + */ +function angle(a: Vec2Arg, b: Vec2Arg): number { + const ax = a[0]; + const ay = a[1]; + const bx = b[0]; + const by = b[1]; + const mag1 = Math.sqrt(ax * ax + ay * ay); + const mag2 = Math.sqrt(bx * bx + by * by); + const mag = mag1 * mag2; + const cosine = mag && dot(a, b) / mag; + return Math.acos(cosine); +} + +/** + * Subtracts two vectors. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that is the difference of a and b. + */ +function subtract(a: Vec2Arg, b: Vec2Arg, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + newDst[0] = a[0] - b[0]; + newDst[1] = a[1] - b[1]; + + return newDst; +} + +/** + * Subtracts two vectors. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that is the difference of a and b. + */ +const sub = subtract; + +/** + * Check if 2 vectors are approximately equal + * @param a - Operand vector. + * @param b - Operand vector. + * @returns true if vectors are approximately equal + */ +function equalsApproximately(a: Vec2Arg, b: Vec2Arg): boolean { + return Math.abs(a[0] - b[0]) < utils.EPSILON && + Math.abs(a[1] - b[1]) < utils.EPSILON; +} + +/** + * Check if 2 vectors are exactly equal + * @param a - Operand vector. + * @param b - Operand vector. + * @returns true if vectors are exactly equal + */ +function equals(a: Vec2Arg, b: Vec2Arg): boolean { + return a[0] === b[0] && a[1] === b[1]; +} + +/** + * Performs linear interpolation on two vectors. + * Given vectors a and b and interpolation coefficient t, returns + * a + t * (b - a). + * @param a - Operand vector. + * @param b - Operand vector. + * @param t - Interpolation coefficient. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The linear interpolated result. + */ +function lerp(a: Vec2Arg, b: Vec2Arg, t: number, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + newDst[0] = a[0] + t * (b[0] - a[0]); + newDst[1] = a[1] + t * (b[1] - a[1]); + + return newDst; +} + +/** + * Performs linear interpolation on two vectors. + * Given vectors a and b and interpolation coefficient vector t, returns + * a + t * (b - a). + * @param a - Operand vector. + * @param b - Operand vector. + * @param t - Interpolation coefficients vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns the linear interpolated result. + */ +function lerpV(a: Vec2Arg, b: Vec2Arg, t: Vec2Arg, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + newDst[0] = a[0] + t[0] * (b[0] - a[0]); + newDst[1] = a[1] + t[1] * (b[1] - a[1]); + + return newDst; +} + +/** + * Return max values of two vectors. + * Given vectors a and b returns + * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])]. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The max components vector. + */ +function max(a: Vec2Arg, b: Vec2Arg, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + newDst[0] = Math.max(a[0], b[0]); + newDst[1] = Math.max(a[1], b[1]); + + return newDst; +} + +/** + * Return min values of two vectors. + * Given vectors a and b returns + * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])]. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The min components vector. + */ +function min(a: Vec2Arg, b: Vec2Arg, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + newDst[0] = Math.min(a[0], b[0]); + newDst[1] = Math.min(a[1], b[1]); + + return newDst; +} + +/** + * Multiplies a vector by a scalar. + * @param v - The vector. + * @param k - The scalar. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The scaled vector. + */ +function mulScalar(v: Vec2Arg, k: number, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + newDst[0] = v[0] * k; + newDst[1] = v[1] * k; + + return newDst; +} + +/** + * Multiplies a vector by a scalar. (same as mulScalar) + * @param v - The vector. + * @param k - The scalar. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The scaled vector. + */ +const scale = mulScalar; + +/** + * Divides a vector by a scalar. + * @param v - The vector. + * @param k - The scalar. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The scaled vector. + */ +function divScalar(v: Vec2Arg, k: number, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + newDst[0] = v[0] / k; + newDst[1] = v[1] / k; + + return newDst; +} + +/** + * Inverse a vector. + * @param v - The vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The inverted vector. + */ +function inverse(v: Vec2Arg, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + newDst[0] = 1 / v[0]; + newDst[1] = 1 / v[1]; + + return newDst; +} + +/** + * Invert a vector. (same as inverse) + * @param v - The vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The inverted vector. + */ +const invert = inverse; + +/** + * Computes the cross product of two vectors; assumes both vectors have + * three entries. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The vector of a cross b. + */ +function cross(a: Vec2Arg, b: Vec2Arg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + const z = a[0] * b[1] - a[1] * b[0]; + newDst[0] = 0; + newDst[1] = 0; + newDst[2] = z; + + return newDst; +} + +/** + * Computes the dot product of two vectors; assumes both vectors have + * three entries. + * @param a - Operand vector. + * @param b - Operand vector. + * @returns dot product + */ +function dot(a: Vec2Arg, b: Vec2Arg): number { + return a[0] * b[0] + a[1] * b[1]; +} + +/** + * Computes the length of vector + * @param v - vector. + * @returns length of vector. + */ +function length(v: Vec2Arg): number { + const v0 = v[0]; + const v1 = v[1]; + return Math.sqrt(v0 * v0 + v1 * v1); +} + +/** + * Computes the length of vector (same as length) + * @param v - vector. + * @returns length of vector. + */ +const len = length; + +/** + * Computes the square of the length of vector + * @param v - vector. + * @returns square of the length of vector. + */ +function lengthSq(v: Vec2Arg): number { + const v0 = v[0]; + const v1 = v[1]; + return v0 * v0 + v1 * v1; +} + +/** + * Computes the square of the length of vector (same as lengthSq) + * @param v - vector. + * @returns square of the length of vector. + */ +const lenSq = lengthSq; + +/** + * Computes the distance between 2 points + * @param a - vector. + * @param b - vector. + * @returns distance between a and b + */ +function distance(a: Vec2Arg, b: Vec2Arg): number { + const dx = a[0] - b[0]; + const dy = a[1] - b[1]; + return Math.sqrt(dx * dx + dy * dy); +} + +/** + * Computes the distance between 2 points (same as distance) + * @param a - vector. + * @param b - vector. + * @returns distance between a and b + */ +const dist = distance; + +/** + * Computes the square of the distance between 2 points + * @param a - vector. + * @param b - vector. + * @returns square of the distance between a and b + */ +function distanceSq(a: Vec2Arg, b: Vec2Arg): number { + const dx = a[0] - b[0]; + const dy = a[1] - b[1]; + return dx * dx + dy * dy; +} + +/** + * Computes the square of the distance between 2 points (same as distanceSq) + * @param a - vector. + * @param b - vector. + * @returns square of the distance between a and b + */ +const distSq = distanceSq; + +/** + * Divides a vector by its Euclidean length and returns the quotient. + * @param v - The vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The normalized vector. + */ +function normalize(v: Vec2Arg, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + const v0 = v[0]; + const v1 = v[1]; + const len = Math.sqrt(v0 * v0 + v1 * v1); + + if (len > 0.00001) { + newDst[0] = v0 / len; + newDst[1] = v1 / len; + } else { + newDst[0] = 0; + newDst[1] = 0; + } + + return newDst; +} + +/** + * Negates a vector. + * @param v - The vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns -v. + */ +function negate(v: Vec2Arg, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + newDst[0] = -v[0]; + newDst[1] = -v[1]; + + return newDst; +} + +/** + * Copies a vector. (same as {@link vec2.clone}) + * Also see {@link vec2.create} and {@link vec2.set} + * @param v - The vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A copy of v. + */ +function copy(v: Vec2Arg, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + newDst[0] = v[0]; + newDst[1] = v[1]; + + return newDst; +} + +/** + * Clones a vector. (same as {@link vec2.copy}) + * Also see {@link vec2.create} and {@link vec2.set} + * @param v - The vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A copy of v. + */ +const clone = copy; + +/** + * Multiplies a vector by another vector (component-wise); assumes a and + * b have the same length. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The vector of products of entries of a and b. + */ +function multiply(a: Vec2Arg, b: Vec2Arg, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + newDst[0] = a[0] * b[0]; + newDst[1] = a[1] * b[1]; + + return newDst; +} + +/** + * Multiplies a vector by another vector (component-wise); assumes a and + * b have the same length. (same as mul) + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The vector of products of entries of a and b. + */ +const mul = multiply; + +/** + * Divides a vector by another vector (component-wise); assumes a and + * b have the same length. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The vector of quotients of entries of a and b. + */ +function divide(a: Vec2Arg, b: Vec2Arg, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + newDst[0] = a[0] / b[0]; + newDst[1] = a[1] / b[1]; + + return newDst; +} + +/** + * Divides a vector by another vector (component-wise); assumes a and + * b have the same length. (same as divide) + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The vector of quotients of entries of a and b. + */ +const div = divide; + +/** + * Creates a random unit vector * scale + * @param scale - Default 1 + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The random vector. + */ +function random(scale = 1, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + const angle = Math.random() * 2 * Math.PI; + newDst[0] = Math.cos(angle) * scale; + newDst[1] = Math.sin(angle) * scale; + + return newDst; +} + +/** + * Zero's a vector + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The zeroed vector. + */ +function zero(dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + newDst[0] = 0; + newDst[1] = 0; + + return newDst; +} + + +/** + * transform Vec2 by 4x4 matrix + * @param v - the vector + * @param m - The matrix. + * @param dst - optional Vec2 to store result. If not passed a new one is created. + * @returns the transformed vector + */ +function transformMat4(v: Vec2Arg, m: Mat4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + const x = v[0]; + const y = v[1]; + + newDst[0] = x * m[0] + y * m[4] + m[12]; + newDst[1] = x * m[1] + y * m[5] + m[13]; + + return newDst; +} + +/** + * Transforms vec4 by 3x3 matrix + * + * @param v - the vector + * @param m - The matrix. + * @param dst - optional Vec2 to store result. If not passed a new one is created. + * @returns the transformed vector + */ +function transformMat3(v: Vec2Arg, m: Mat3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + const x = v[0]; + const y = v[1]; + + newDst[0] = m[0] * x + m[4] * y + m[8]; + newDst[1] = m[1] * x + m[5] * y + m[9]; + + return newDst; +} + +/** + * Rotate a 2D vector + * + * @param a The vec2 point to rotate + * @param b The origin of the rotation + * @param rad The angle of rotation in radians + * @returns the rotated vector + */ +function rotate(a: Vec2Arg, b: Vec2Arg, rad: number, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + // Translate point to the origin + const p0 = a[0] - b[0]; + const p1 = a[1] - b[1]; + const sinC = Math.sin(rad); + const cosC = Math.cos(rad); + + //perform rotation and translate to correct position + newDst[0] = p0 * cosC - p1 * sinC + b[0]; + newDst[1] = p0 * sinC + p1 * cosC + b[1]; + + return newDst; +} + +/** + * Treat a 2D vector as a direction and set it's length + * + * @param a The vec2 to lengthen + * @param len The length of the resulting vector + * @returns The lengthened vector + */ +function setLength(a: Vec2Arg, len: number, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + normalize(a, newDst); + return mulScalar(newDst, len, newDst); +} + +/** + * Ensure a vector is not longer than a max length + * + * @param a The vec2 to limit + * @param maxLen The longest length of the resulting vector + * @returns The vector, shortened to maxLen if it's too long + */ +function truncate(a: Vec2Arg, maxLen: number, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + + if (length(a) > maxLen) { + return setLength(a, maxLen, newDst); + } + + return copy(a, newDst); +} + +/** + * Return the vector exactly between 2 endpoint vectors + * + * @param a Endpoint 1 + * @param b Endpoint 2 + * @returns The vector exactly residing between endpoints 1 and 2 + */ +function midpoint(a: Vec2Arg, b: Vec2Arg, dst?: T) { + const newDst = (dst ?? new Ctor(2)) as T; + return lerp(a, b, 0.5, newDst); +} + +return { + create, + fromValues, + set, + ceil, + floor, + round, + clamp, + add, + addScaled, + angle, + subtract, + sub, + equalsApproximately, + equals, + lerp, + lerpV, + max, + min, + mulScalar, + scale, + divScalar, + inverse, + invert, + cross, + dot, + length, + len, + lengthSq, + lenSq, + distance, + dist, + distanceSq, + distSq, + normalize, + negate, + copy, + clone, + multiply, + mul, + divide, + div, + random, + zero, + transformMat4, + transformMat3, + rotate, + setLength, + truncate, + midpoint, +}; +} + +type API = ReturnType>; + +const cache = new Map(); + +export function getAPI(Ctor: Vec2Ctor) { + let api = cache.get(Ctor); + if (!api) { + api = getAPIImpl(Ctor); + cache.set(Ctor, api); + } + return api as API; +} diff --git a/tools/demo/wgpu-matrix/vec2.ts b/tools/demo/wgpu-matrix/vec2.ts new file mode 100644 index 000000000..f31485921 --- /dev/null +++ b/tools/demo/wgpu-matrix/vec2.ts @@ -0,0 +1,33 @@ +/* + * Copyright 2022 Gregg Tavares + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +import { BaseArgType } from "./types"; + +/** + * A JavaScript array with 2 values, a Float32Array with 2 values, or a Float64Array with 2 values. + */ +export type Vec2Arg = BaseArgType; + +/** + * A specific concrete 2 element vector. + */ +export type Vec2Type = T; diff --git a/tools/demo/wgpu-matrix/vec3-impl.ts b/tools/demo/wgpu-matrix/vec3-impl.ts new file mode 100644 index 000000000..39cbe780e --- /dev/null +++ b/tools/demo/wgpu-matrix/vec3-impl.ts @@ -0,0 +1,1029 @@ +/* + * Copyright 2022 Gregg Tavares + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ +import * as utils from './utils'; +import { Vec3Arg, Vec3Type } from './vec3'; +import { Mat3Arg } from './mat3'; +import { Mat4Arg } from './mat4'; +import { QuatArg } from './quat'; +import { BaseArgType } from './types'; + +export { Vec3Arg, Vec3Type }; + +type Vec3Ctor = new (n: number) => T; + +/** + * Generates am typed API for Vec3 + * */ +function getAPIImpl(Ctor: Vec3Ctor) { + +/** + * Creates a vec3; may be called with x, y, z to set initial values. + * @param x - Initial x value. + * @param y - Initial y value. + * @param z - Initial z value. + * @returns the created vector + */ +function create(x?: number, y?: number, z?: number) { + const newDst = new Ctor(3); + if (x !== undefined) { + newDst[0] = x; + if (y !== undefined) { + newDst[1] = y; + if (z !== undefined) { + newDst[2] = z; + } + } + } + return newDst; +} + +/** + * Creates a vec3; may be called with x, y, z to set initial values. (same as create) + * @param x - Initial x value. + * @param y - Initial y value. + * @param z - Initial z value. + * @returns the created vector + */ +const fromValues = create; + +/** + * Sets the values of a Vec3 + * Also see {@link vec3.create} and {@link vec3.copy} + * + * @param x first value + * @param y second value + * @param z third value + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector with its elements set. + */ +function set(x: number, y: number, z: number, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + newDst[0] = x; + newDst[1] = y; + newDst[2] = z; + + return newDst; +} + +/** + * Applies Math.ceil to each element of vector + * @param v - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that is the ceil of each element of v. + */ +function ceil(v: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + newDst[0] = Math.ceil(v[0]); + newDst[1] = Math.ceil(v[1]); + newDst[2] = Math.ceil(v[2]); + + return newDst; +} + +/** + * Applies Math.floor to each element of vector + * @param v - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that is the floor of each element of v. + */ +function floor(v: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + newDst[0] = Math.floor(v[0]); + newDst[1] = Math.floor(v[1]); + newDst[2] = Math.floor(v[2]); + + return newDst; +} + +/** + * Applies Math.round to each element of vector + * @param v - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that is the round of each element of v. + */ +function round(v: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + newDst[0] = Math.round(v[0]); + newDst[1] = Math.round(v[1]); + newDst[2] = Math.round(v[2]); + + return newDst; +} + +/** + * Clamp each element of vector between min and max + * @param v - Operand vector. + * @param max - Min value, default 0 + * @param min - Max value, default 1 + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that the clamped value of each element of v. + */ +function clamp(v: Vec3Arg, min = 0, max = 1, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + newDst[0] = Math.min(max, Math.max(min, v[0])); + newDst[1] = Math.min(max, Math.max(min, v[1])); + newDst[2] = Math.min(max, Math.max(min, v[2])); + + return newDst; +} + +/** + * Adds two vectors; assumes a and b have the same dimension. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that is the sum of a and b. + */ +function add(a: Vec3Arg, b: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + newDst[0] = a[0] + b[0]; + newDst[1] = a[1] + b[1]; + newDst[2] = a[2] + b[2]; + + return newDst; +} + +/** + * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension. + * @param a - Operand vector. + * @param b - Operand vector. + * @param scale - Amount to scale b + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that is the sum of a + b * scale. + */ +function addScaled(a: Vec3Arg, b: Vec3Arg, scale: number, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + newDst[0] = a[0] + b[0] * scale; + newDst[1] = a[1] + b[1] * scale; + newDst[2] = a[2] + b[2] * scale; + + return newDst; +} + +/** + * Returns the angle in radians between two vectors. + * @param a - Operand vector. + * @param b - Operand vector. + * @returns The angle in radians between the 2 vectors. + */ +function angle(a: Vec3Arg, b: Vec3Arg): number { + const ax = a[0]; + const ay = a[1]; + const az = a[2]; + const bx = b[0]; + const by = b[1]; + const bz = b[2]; + const mag1 = Math.sqrt(ax * ax + ay * ay + az * az); + const mag2 = Math.sqrt(bx * bx + by * by + bz * bz); + const mag = mag1 * mag2; + const cosine = mag && dot(a, b) / mag; + return Math.acos(cosine); +} + +/** + * Subtracts two vectors. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that is the difference of a and b. + */ +function subtract(a: Vec3Arg, b: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + newDst[0] = a[0] - b[0]; + newDst[1] = a[1] - b[1]; + newDst[2] = a[2] - b[2]; + + return newDst; +} + +/** + * Subtracts two vectors. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that is the difference of a and b. + */ +const sub = subtract; + +/** + * Check if 2 vectors are approximately equal + * @param a - Operand vector. + * @param b - Operand vector. + * @returns true if vectors are approximately equal + */ +function equalsApproximately(a: Vec3Arg, b: Vec3Arg): boolean { + return Math.abs(a[0] - b[0]) < utils.EPSILON && + Math.abs(a[1] - b[1]) < utils.EPSILON && + Math.abs(a[2] - b[2]) < utils.EPSILON; +} + +/** + * Check if 2 vectors are exactly equal + * @param a - Operand vector. + * @param b - Operand vector. + * @returns true if vectors are exactly equal + */ +function equals(a: Vec3Arg, b: Vec3Arg): boolean { + return a[0] === b[0] && a[1] === b[1] && a[2] === b[2]; +} + +/** + * Performs linear interpolation on two vectors. + * Given vectors a and b and interpolation coefficient t, returns + * a + t * (b - a). + * @param a - Operand vector. + * @param b - Operand vector. + * @param t - Interpolation coefficient. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The linear interpolated result. + */ +function lerp(a: Vec3Arg, b: Vec3Arg, t: number, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + newDst[0] = a[0] + t * (b[0] - a[0]); + newDst[1] = a[1] + t * (b[1] - a[1]); + newDst[2] = a[2] + t * (b[2] - a[2]); + + return newDst; +} + +/** + * Performs linear interpolation on two vectors. + * Given vectors a and b and interpolation coefficient vector t, returns + * a + t * (b - a). + * @param a - Operand vector. + * @param b - Operand vector. + * @param t - Interpolation coefficients vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns the linear interpolated result. + */ +function lerpV(a: Vec3Arg, b: Vec3Arg, t: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + newDst[0] = a[0] + t[0] * (b[0] - a[0]); + newDst[1] = a[1] + t[1] * (b[1] - a[1]); + newDst[2] = a[2] + t[2] * (b[2] - a[2]); + + return newDst; +} + +/** + * Return max values of two vectors. + * Given vectors a and b returns + * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])]. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The max components vector. + */ +function max(a: Vec3Arg, b: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + newDst[0] = Math.max(a[0], b[0]); + newDst[1] = Math.max(a[1], b[1]); + newDst[2] = Math.max(a[2], b[2]); + + return newDst; +} + +/** + * Return min values of two vectors. + * Given vectors a and b returns + * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])]. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The min components vector. + */ +function min(a: Vec3Arg, b: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + newDst[0] = Math.min(a[0], b[0]); + newDst[1] = Math.min(a[1], b[1]); + newDst[2] = Math.min(a[2], b[2]); + + return newDst; +} + +/** + * Multiplies a vector by a scalar. + * @param v - The vector. + * @param k - The scalar. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The scaled vector. + */ +function mulScalar(v: Vec3Arg, k: number, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + newDst[0] = v[0] * k; + newDst[1] = v[1] * k; + newDst[2] = v[2] * k; + + return newDst; +} + +/** + * Multiplies a vector by a scalar. (same as mulScalar) + * @param v - The vector. + * @param k - The scalar. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The scaled vector. + */ +const scale = mulScalar; + +/** + * Divides a vector by a scalar. + * @param v - The vector. + * @param k - The scalar. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The scaled vector. + */ +function divScalar(v: Vec3Arg, k: number, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + newDst[0] = v[0] / k; + newDst[1] = v[1] / k; + newDst[2] = v[2] / k; + + return newDst; +} + +/** + * Inverse a vector. + * @param v - The vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The inverted vector. + */ +function inverse(v: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + newDst[0] = 1 / v[0]; + newDst[1] = 1 / v[1]; + newDst[2] = 1 / v[2]; + + return newDst; +} + +/** + * Invert a vector. (same as inverse) + * @param v - The vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The inverted vector. + */ +const invert = inverse; + +/** + * Computes the cross product of two vectors; assumes both vectors have + * three entries. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The vector of a cross b. + */ +function cross(a: Vec3Arg, b: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + const t1 = a[2] * b[0] - a[0] * b[2]; + const t2 = a[0] * b[1] - a[1] * b[0]; + newDst[0] = a[1] * b[2] - a[2] * b[1]; + newDst[1] = t1; + newDst[2] = t2; + + return newDst; +} + +/** + * Computes the dot product of two vectors; assumes both vectors have + * three entries. + * @param a - Operand vector. + * @param b - Operand vector. + * @returns dot product + */ +function dot(a: Vec3Arg, b: Vec3Arg): number { + return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]); +} + +/** + * Computes the length of vector + * @param v - vector. + * @returns length of vector. + */ +function length(v: Vec3Arg): number { + const v0 = v[0]; + const v1 = v[1]; + const v2 = v[2]; + return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2); +} + +/** + * Computes the length of vector (same as length) + * @param v - vector. + * @returns length of vector. + */ +const len = length; + +/** + * Computes the square of the length of vector + * @param v - vector. + * @returns square of the length of vector. + */ +function lengthSq(v: Vec3Arg): number { + const v0 = v[0]; + const v1 = v[1]; + const v2 = v[2]; + return v0 * v0 + v1 * v1 + v2 * v2; +} + +/** + * Computes the square of the length of vector (same as lengthSq) + * @param v - vector. + * @returns square of the length of vector. + */ +const lenSq = lengthSq; + +/** + * Computes the distance between 2 points + * @param a - vector. + * @param b - vector. + * @returns distance between a and b + */ +function distance(a: Vec3Arg, b: Vec3Arg): number { + const dx = a[0] - b[0]; + const dy = a[1] - b[1]; + const dz = a[2] - b[2]; + return Math.sqrt(dx * dx + dy * dy + dz * dz); +} + +/** + * Computes the distance between 2 points (same as distance) + * @param a - vector. + * @param b - vector. + * @returns distance between a and b + */ +const dist = distance; + +/** + * Computes the square of the distance between 2 points + * @param a - vector. + * @param b - vector. + * @returns square of the distance between a and b + */ +function distanceSq(a: Vec3Arg, b: Vec3Arg): number { + const dx = a[0] - b[0]; + const dy = a[1] - b[1]; + const dz = a[2] - b[2]; + return dx * dx + dy * dy + dz * dz; +} + +/** + * Computes the square of the distance between 2 points (same as distanceSq) + * @param a - vector. + * @param b - vector. + * @returns square of the distance between a and b + */ +const distSq = distanceSq; + +/** + * Divides a vector by its Euclidean length and returns the quotient. + * @param v - The vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The normalized vector. + */ +function normalize(v: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + const v0 = v[0]; + const v1 = v[1]; + const v2 = v[2]; + const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2); + + if (len > 0.00001) { + newDst[0] = v0 / len; + newDst[1] = v1 / len; + newDst[2] = v2 / len; + } else { + newDst[0] = 0; + newDst[1] = 0; + newDst[2] = 0; + } + + + return newDst; +} + +/** + * Negates a vector. + * @param v - The vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns -v. + */ +function negate(v: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + newDst[0] = -v[0]; + newDst[1] = -v[1]; + newDst[2] = -v[2]; + + return newDst; +} + +/** + * Copies a vector. (same as {@link vec3.clone}) + * Also see {@link vec3.create} and {@link vec3.set} + * @param v - The vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A copy of v. + */ +function copy(v: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + newDst[0] = v[0]; + newDst[1] = v[1]; + newDst[2] = v[2]; + + return newDst; +} + +/** + * Clones a vector. (same as {@link vec3.copy}) + * Also see {@link vec3.create} and {@link vec3.set} + * @param v - The vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A copy of v. + */ +const clone = copy; + +/** + * Multiplies a vector by another vector (component-wise); assumes a and + * b have the same length. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The vector of products of entries of a and b. + */ +function multiply(a: Vec3Arg, b: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + newDst[0] = a[0] * b[0]; + newDst[1] = a[1] * b[1]; + newDst[2] = a[2] * b[2]; + + return newDst; +} + +/** + * Multiplies a vector by another vector (component-wise); assumes a and + * b have the same length. (same as mul) + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The vector of products of entries of a and b. + */ +const mul = multiply; + +/** + * Divides a vector by another vector (component-wise); assumes a and + * b have the same length. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The vector of quotients of entries of a and b. + */ +function divide(a: Vec3Arg, b: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + newDst[0] = a[0] / b[0]; + newDst[1] = a[1] / b[1]; + newDst[2] = a[2] / b[2]; + + return newDst; +} + +/** + * Divides a vector by another vector (component-wise); assumes a and + * b have the same length. (same as divide) + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The vector of quotients of entries of a and b. + */ +const div = divide; + +/** + * Creates a random vector + * @param scale - Default 1 + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The random vector. + */ +function random(scale = 1, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + const angle = Math.random() * 2 * Math.PI; + const z = Math.random() * 2 - 1; + const zScale = Math.sqrt(1 - z * z) * scale; + newDst[0] = Math.cos(angle) * zScale; + newDst[1] = Math.sin(angle) * zScale; + newDst[2] = z * scale; + + return newDst; +} + +/** + * Zero's a vector + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The zeroed vector. + */ +function zero(dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + newDst[0] = 0; + newDst[1] = 0; + newDst[2] = 0; + + return newDst; +} + + +/** + * transform vec3 by 4x4 matrix + * @param v - the vector + * @param m - The matrix. + * @param dst - optional vec3 to store result. If not passed a new one is created. + * @returns the transformed vector + */ +function transformMat4(v: Vec3Arg, m: Mat4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + const x = v[0]; + const y = v[1]; + const z = v[2]; + const w = (m[3] * x + m[7] * y + m[11] * z + m[15]) || 1; + + newDst[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w; + newDst[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w; + newDst[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w; + + return newDst; +} + +/** + * Transform vec3 by upper 3x3 matrix inside 4x4 matrix. + * @param v - The direction. + * @param m - The matrix. + * @param dst - optional vec3 to store result. If not passed a new one is created. + * @returns The transformed vector. + */ +function transformMat4Upper3x3(v: Vec3Arg, m: Mat4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + const v0 = v[0]; + const v1 = v[1]; + const v2 = v[2]; + + newDst[0] = v0 * m[0 * 4 + 0] + v1 * m[1 * 4 + 0] + v2 * m[2 * 4 + 0]; + newDst[1] = v0 * m[0 * 4 + 1] + v1 * m[1 * 4 + 1] + v2 * m[2 * 4 + 1]; + newDst[2] = v0 * m[0 * 4 + 2] + v1 * m[1 * 4 + 2] + v2 * m[2 * 4 + 2]; + + return newDst; +} + +/** + * Transforms vec3 by 3x3 matrix + * + * @param v - the vector + * @param m - The matrix. + * @param dst - optional vec3 to store result. If not passed a new one is created. + * @returns the transformed vector + */ +function transformMat3(v: Vec3Arg, m: Mat3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + const x = v[0]; + const y = v[1]; + const z = v[2]; + + newDst[0] = x * m[0] + y * m[4] + z * m[8]; + newDst[1] = x * m[1] + y * m[5] + z * m[9]; + newDst[2] = x * m[2] + y * m[6] + z * m[10]; + + return newDst; +} + +/** + * Transforms vec3 by Quaternion + * @param v - the vector to transform + * @param q - the quaternion to transform by + * @param dst - optional vec3 to store result. If not passed a new one is created. + * @returns the transformed + */ +function transformQuat(v: Vec3Arg, q: QuatArg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + const qx = q[0]; + const qy = q[1]; + const qz = q[2]; + const w2 = q[3] * 2; + + const x = v[0]; + const y = v[1]; + const z = v[2]; + + const uvX = qy * z - qz * y; + const uvY = qz * x - qx * z; + const uvZ = qx * y - qy * x; + + newDst[0] = x + uvX * w2 + (qy * uvZ - qz * uvY) * 2; + newDst[1] = y + uvY * w2 + (qz * uvX - qx * uvZ) * 2; + newDst[2] = z + uvZ * w2 + (qx * uvY - qy * uvX) * 2; + + return newDst; +} + +/** + * Returns the translation component of a 4-by-4 matrix as a vector with 3 + * entries. + * @param m - The matrix. + * @param dst - vector to hold result. If not passed a new one is created. + * @returns The translation component of m. + */ +function getTranslation(m: Mat3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + newDst[0] = m[12]; + newDst[1] = m[13]; + newDst[2] = m[14]; + return newDst; +} +/** + * Returns an axis of a 4x4 matrix as a vector with 3 entries + * @param m - The matrix. + * @param axis - The axis 0 = x, 1 = y, 2 = z; + * @returns The axis component of m. + */ +function getAxis(m: Mat4Arg, axis: number, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + const off = axis * 4; + newDst[0] = m[off + 0]; + newDst[1] = m[off + 1]; + newDst[2] = m[off + 2]; + return newDst; +} +/** + * Returns the scaling component of the matrix + * @param m - The Matrix + * @param dst - The vector to set. If not passed a new one is created. + */ +function getScaling(m: Mat4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + const xx = m[0]; + const xy = m[1]; + const xz = m[2]; + const yx = m[4]; + const yy = m[5]; + const yz = m[6]; + const zx = m[8]; + const zy = m[9]; + const zz = m[10]; + newDst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz); + newDst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz); + newDst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz); + return newDst; +} + +/** + * Rotate a 3D vector around the x-axis + * + * @param {ReadonlyVec3} a The vec3 point to rotate + * @param {ReadonlyVec3} b The origin of the rotation + * @param {Number} rad The angle of rotation in radians + * @param dst - The vector to set. If not passed a new one is created. + * @returns the rotated vector + */ +function rotateX(a: Vec3Arg, b: Vec3Arg, rad: number, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + const p = []; + const r = []; + + //Translate point to the origin + p[0] = a[0] - b[0]; + p[1] = a[1] - b[1]; + p[2] = a[2] - b[2]; + + //perform rotation + r[0] = p[0]; + r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad); + r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad); + + //translate to correct position + newDst[0] = r[0] + b[0]; + newDst[1] = r[1] + b[1]; + newDst[2] = r[2] + b[2]; + + return newDst; +} + +/** + * Rotate a 3D vector around the y-axis + * + * @param {ReadonlyVec3} a The vec3 point to rotate + * @param {ReadonlyVec3} b The origin of the rotation + * @param {Number} rad The angle of rotation in radians + * @param dst - The vector to set. If not passed a new one is created. + * @returns the rotated vector + */ +function rotateY(a: Vec3Arg, b: Vec3Arg, rad: number, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + const p = []; + const r = []; + + // translate point to the origin + p[0] = a[0] - b[0]; + p[1] = a[1] - b[1]; + p[2] = a[2] - b[2]; + + // perform rotation + r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad); + r[1] = p[1]; + r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad); + + // translate to correct position + newDst[0] = r[0] + b[0]; + newDst[1] = r[1] + b[1]; + newDst[2] = r[2] + b[2]; + + return newDst; +} + +/** + * Rotate a 3D vector around the z-axis + * + * @param {ReadonlyVec3} a The vec3 point to rotate + * @param {ReadonlyVec3} b The origin of the rotation + * @param {Number} rad The angle of rotation in radians + * @param dst - The vector to set. If not passed a new one is created. + * @returns {vec3} out + */ +function rotateZ(a: Vec3Arg, b: Vec3Arg, rad: number, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + const p = []; + const r = []; + + // translate point to the origin + p[0] = a[0] - b[0]; + p[1] = a[1] - b[1]; + p[2] = a[2] - b[2]; + + // perform rotation + r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad); + r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad); + r[2] = p[2]; + + // translate to correct position + newDst[0] = r[0] + b[0]; + newDst[1] = r[1] + b[1]; + newDst[2] = r[2] + b[2]; + + return newDst; +} + +/** + * Treat a 3D vector as a direction and set it's length + * + * @param a The vec3 to lengthen + * @param len The length of the resulting vector + * @returns The lengthened vector + */ +function setLength(a: Vec3Arg, len: number, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + normalize(a, newDst); + return mulScalar(newDst, len, newDst); +} + +/** + * Ensure a vector is not longer than a max length + * + * @param a The vec3 to limit + * @param maxLen The longest length of the resulting vector + * @returns The vector, shortened to maxLen if it's too long + */ +function truncate(a: Vec3Arg, maxLen: number, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + + if (length(a) > maxLen) { + return setLength(a, maxLen, newDst); + } + + return copy(a, newDst); +} + +/** + * Return the vector exactly between 2 endpoint vectors + * + * @param a Endpoint 1 + * @param b Endpoint 2 + * @returns The vector exactly residing between endpoints 1 and 2 + */ +function midpoint(a: Vec3Arg, b: Vec3Arg, dst?: T) { + const newDst = (dst ?? new Ctor(3)) as T; + return lerp(a, b, 0.5, newDst); +} + +return { + create, + fromValues, + set, + ceil, + floor, + round, + clamp, + add, + addScaled, + angle, + subtract, + sub, + equalsApproximately, + equals, + lerp, + lerpV, + max, + min, + mulScalar, + scale, + divScalar, + inverse, + invert, + cross, + dot, + length, + len, + lengthSq, + lenSq, + distance, + dist, + distanceSq, + distSq, + normalize, + negate, + copy, + clone, + multiply, + mul, + divide, + div, + random, + zero, + transformMat4, + transformMat4Upper3x3, + transformMat3, + transformQuat, + getTranslation, + getAxis, + getScaling, + rotateX, + rotateY, + rotateZ, + setLength, + truncate, + midpoint, +}; + +} + +type API = ReturnType>; + +const cache = new Map(); + +export function getAPI(Ctor: Vec3Ctor) { + let api = cache.get(Ctor); + if (!api) { + api = getAPIImpl(Ctor); + cache.set(Ctor, api); + } + return api as API; +} diff --git a/tools/demo/wgpu-matrix/vec3.ts b/tools/demo/wgpu-matrix/vec3.ts new file mode 100644 index 000000000..d5501d3d8 --- /dev/null +++ b/tools/demo/wgpu-matrix/vec3.ts @@ -0,0 +1,33 @@ +/* + * Copyright 2022 Gregg Tavares + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +import { BaseArgType } from "./types"; + +/** + * A JavaScript array with 3 values, a Float32Array with 3 values, or a Float64Array with 3 values. + */ +export type Vec3Arg = BaseArgType; + +/** + * A specific concrete 3 element vector. + */ +export type Vec3Type = T; diff --git a/tools/demo/wgpu-matrix/vec4-impl.ts b/tools/demo/wgpu-matrix/vec4-impl.ts new file mode 100644 index 000000000..d940b4f3e --- /dev/null +++ b/tools/demo/wgpu-matrix/vec4-impl.ts @@ -0,0 +1,793 @@ +/* + * Copyright 2022 Gregg Tavares + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ +import * as utils from './utils'; +import { Vec4Arg, Vec4Type } from './vec4'; +import { Mat4Arg } from './mat4'; +import { BaseArgType } from './types'; + +export { Vec4Arg, Vec4Type }; + +type Vec4Ctor = new (n: number) => T; + +/** + * Generates am typed API for Vec4 + * */ +function getAPIImpl(Ctor: Vec4Ctor) { + +/** + * Creates a vec4; may be called with x, y, z to set initial values. + * @param x - Initial x value. + * @param y - Initial y value. + * @param z - Initial z value. + * @param w - Initial w value. + * @returns the created vector + */ +function create(x?: number, y?: number, z?: number, w?: number) { + const newDst = new Ctor(4); + if (x !== undefined) { + newDst[0] = x; + if (y !== undefined) { + newDst[1] = y; + if (z !== undefined) { + newDst[2] = z; + if (w !== undefined) { + newDst[3] = w; + } + } + } + } + return newDst; +} + +/** + * Creates a vec4; may be called with x, y, z to set initial values. (same as create) + * @param x - Initial x value. + * @param y - Initial y value. + * @param z - Initial z value. + * @param z - Initial w value. + * @returns the created vector + */ +const fromValues = create; + +/** + * Sets the values of a Vec4 + * Also see {@link vec4.create} and {@link vec4.copy} + * + * @param x first value + * @param y second value + * @param z third value + * @param w fourth value + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector with its elements set. + */ +function set(x: number, y: number, z: number, w: number, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = x; + newDst[1] = y; + newDst[2] = z; + newDst[3] = w; + + return newDst; +} + +/** + * Applies Math.ceil to each element of vector + * @param v - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that is the ceil of each element of v. + */ +function ceil(v: Vec4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = Math.ceil(v[0]); + newDst[1] = Math.ceil(v[1]); + newDst[2] = Math.ceil(v[2]); + newDst[3] = Math.ceil(v[3]); + + return newDst; +} + +/** + * Applies Math.floor to each element of vector + * @param v - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that is the floor of each element of v. + */ +function floor(v: Vec4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = Math.floor(v[0]); + newDst[1] = Math.floor(v[1]); + newDst[2] = Math.floor(v[2]); + newDst[3] = Math.floor(v[3]); + + return newDst; +} + +/** + * Applies Math.round to each element of vector + * @param v - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that is the round of each element of v. + */ +function round(v: Vec4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = Math.round(v[0]); + newDst[1] = Math.round(v[1]); + newDst[2] = Math.round(v[2]); + newDst[3] = Math.round(v[3]); + + return newDst; +} + +/** + * Clamp each element of vector between min and max + * @param v - Operand vector. + * @param max - Min value, default 0 + * @param min - Max value, default 1 + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that the clamped value of each element of v. + */ +function clamp(v: Vec4Arg, min = 0, max = 1, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = Math.min(max, Math.max(min, v[0])); + newDst[1] = Math.min(max, Math.max(min, v[1])); + newDst[2] = Math.min(max, Math.max(min, v[2])); + newDst[3] = Math.min(max, Math.max(min, v[3])); + + return newDst; +} + +/** + * Adds two vectors; assumes a and b have the same dimension. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that is the sum of a and b. + */ +function add(a: Vec4Arg, b: Vec4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = a[0] + b[0]; + newDst[1] = a[1] + b[1]; + newDst[2] = a[2] + b[2]; + newDst[3] = a[3] + b[3]; + + return newDst; +} + +/** + * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension. + * @param a - Operand vector. + * @param b - Operand vector. + * @param scale - Amount to scale b + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that is the sum of a + b * scale. + */ +function addScaled(a: Vec4Arg, b: Vec4Arg, scale: number, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = a[0] + b[0] * scale; + newDst[1] = a[1] + b[1] * scale; + newDst[2] = a[2] + b[2] * scale; + newDst[3] = a[3] + b[3] * scale; + + return newDst; +} + +/** + * Subtracts two vectors. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that is the difference of a and b. + */ +function subtract(a: Vec4Arg, b: Vec4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = a[0] - b[0]; + newDst[1] = a[1] - b[1]; + newDst[2] = a[2] - b[2]; + newDst[3] = a[3] - b[3]; + + return newDst; +} + +/** + * Subtracts two vectors. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A vector that is the difference of a and b. + */ +const sub = subtract; + +/** + * Check if 2 vectors are approximately equal + * @param a - Operand vector. + * @param b - Operand vector. + * @returns true if vectors are approximately equal + */ +function equalsApproximately(a: Vec4Arg, b: Vec4Arg): boolean { + return Math.abs(a[0] - b[0]) < utils.EPSILON && + Math.abs(a[1] - b[1]) < utils.EPSILON && + Math.abs(a[2] - b[2]) < utils.EPSILON && + Math.abs(a[3] - b[3]) < utils.EPSILON; +} + +/** + * Check if 2 vectors are exactly equal + * @param a - Operand vector. + * @param b - Operand vector. + * @returns true if vectors are exactly equal + */ +function equals(a: Vec4Arg, b: Vec4Arg): boolean { + return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3]; +} + +/** + * Performs linear interpolation on two vectors. + * Given vectors a and b and interpolation coefficient t, returns + * a + t * (b - a). + * @param a - Operand vector. + * @param b - Operand vector. + * @param t - Interpolation coefficient. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The linear interpolated result. + */ +function lerp(a: Vec4Arg, b: Vec4Arg, t: number, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = a[0] + t * (b[0] - a[0]); + newDst[1] = a[1] + t * (b[1] - a[1]); + newDst[2] = a[2] + t * (b[2] - a[2]); + newDst[3] = a[3] + t * (b[3] - a[3]); + + return newDst; +} + +/** + * Performs linear interpolation on two vectors. + * Given vectors a and b and interpolation coefficient vector t, returns + * a + t * (b - a). + * @param a - Operand vector. + * @param b - Operand vector. + * @param t - Interpolation coefficients vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns the linear interpolated result. + */ +function lerpV(a: Vec4Arg, b: Vec4Arg, t: Vec4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = a[0] + t[0] * (b[0] - a[0]); + newDst[1] = a[1] + t[1] * (b[1] - a[1]); + newDst[2] = a[2] + t[2] * (b[2] - a[2]); + newDst[3] = a[3] + t[3] * (b[3] - a[3]); + + return newDst; +} + +/** + * Return max values of two vectors. + * Given vectors a and b returns + * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])]. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The max components vector. + */ +function max(a: Vec4Arg, b: Vec4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = Math.max(a[0], b[0]); + newDst[1] = Math.max(a[1], b[1]); + newDst[2] = Math.max(a[2], b[2]); + newDst[3] = Math.max(a[3], b[3]); + + return newDst; +} + +/** + * Return min values of two vectors. + * Given vectors a and b returns + * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])]. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The min components vector. + */ +function min(a: Vec4Arg, b: Vec4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = Math.min(a[0], b[0]); + newDst[1] = Math.min(a[1], b[1]); + newDst[2] = Math.min(a[2], b[2]); + newDst[3] = Math.min(a[3], b[3]); + + return newDst; +} + +/** + * Multiplies a vector by a scalar. + * @param v - The vector. + * @param k - The scalar. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The scaled vector. + */ +function mulScalar(v: Vec4Arg, k: number, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = v[0] * k; + newDst[1] = v[1] * k; + newDst[2] = v[2] * k; + newDst[3] = v[3] * k; + + return newDst; +} + +/** + * Multiplies a vector by a scalar. (same as mulScalar) + * @param v - The vector. + * @param k - The scalar. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The scaled vector. + */ +const scale = mulScalar; + +/** + * Divides a vector by a scalar. + * @param v - The vector. + * @param k - The scalar. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The scaled vector. + */ +function divScalar(v: Vec4Arg, k: number, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = v[0] / k; + newDst[1] = v[1] / k; + newDst[2] = v[2] / k; + newDst[3] = v[3] / k; + + return newDst; +} + +/** + * Inverse a vector. + * @param v - The vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The inverted vector. + */ +function inverse(v: Vec4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = 1 / v[0]; + newDst[1] = 1 / v[1]; + newDst[2] = 1 / v[2]; + newDst[3] = 1 / v[3]; + + return newDst; +} + +/** + * Invert a vector. (same as inverse) + * @param v - The vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The inverted vector. + */ +const invert = inverse; + +/** + * Computes the dot product of two vectors + * @param a - Operand vector. + * @param b - Operand vector. + * @returns dot product + */ +function dot(a: Vec4Arg, b: Vec4Arg): number { + return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]); +} + +/** + * Computes the length of vector + * @param v - vector. + * @returns length of vector. + */ +function length(v: Vec4Arg): number { + const v0 = v[0]; + const v1 = v[1]; + const v2 = v[2]; + const v3 = v[3]; + return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3); +} + +/** + * Computes the length of vector (same as length) + * @param v - vector. + * @returns length of vector. + */ +const len = length; + +/** + * Computes the square of the length of vector + * @param v - vector. + * @returns square of the length of vector. + */ +function lengthSq(v: Vec4Arg): number { + const v0 = v[0]; + const v1 = v[1]; + const v2 = v[2]; + const v3 = v[3]; + return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3; +} + +/** + * Computes the square of the length of vector (same as lengthSq) + * @param v - vector. + * @returns square of the length of vector. + */ +const lenSq = lengthSq; + +/** + * Computes the distance between 2 points + * @param a - vector. + * @param b - vector. + * @returns distance between a and b + */ +function distance(a: Vec4Arg, b: Vec4Arg): number { + const dx = a[0] - b[0]; + const dy = a[1] - b[1]; + const dz = a[2] - b[2]; + const dw = a[3] - b[3]; + return Math.sqrt(dx * dx + dy * dy + dz * dz + dw * dw); +} + +/** + * Computes the distance between 2 points (same as distance) + * @param a - vector. + * @param b - vector. + * @returns distance between a and b + */ +const dist = distance; + +/** + * Computes the square of the distance between 2 points + * @param a - vector. + * @param b - vector. + * @returns square of the distance between a and b + */ +function distanceSq(a: Vec4Arg, b: Vec4Arg): number { + const dx = a[0] - b[0]; + const dy = a[1] - b[1]; + const dz = a[2] - b[2]; + const dw = a[3] - b[3]; + return dx * dx + dy * dy + dz * dz + dw * dw; +} + +/** + * Computes the square of the distance between 2 points (same as distanceSq) + * @param a - vector. + * @param b - vector. + * @returns square of the distance between a and b + */ +const distSq = distanceSq; + +/** + * Divides a vector by its Euclidean length and returns the quotient. + * @param v - The vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The normalized vector. + */ +function normalize(v: Vec4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + const v0 = v[0]; + const v1 = v[1]; + const v2 = v[2]; + const v3 = v[3]; + const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3); + + if (len > 0.00001) { + newDst[0] = v0 / len; + newDst[1] = v1 / len; + newDst[2] = v2 / len; + newDst[3] = v3 / len; + } else { + newDst[0] = 0; + newDst[1] = 0; + newDst[2] = 0; + newDst[3] = 0; + } + + return newDst; +} + +/** + * Negates a vector. + * @param v - The vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns -v. + */ +function negate(v: Vec4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = -v[0]; + newDst[1] = -v[1]; + newDst[2] = -v[2]; + newDst[3] = -v[3]; + + return newDst; +} + +/** + * Copies a vector. (same as {@link vec4.clone}) + * Also see {@link vec4.create} and {@link vec4.set} + * @param v - The vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A copy of v. + */ +function copy(v: Vec4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = v[0]; + newDst[1] = v[1]; + newDst[2] = v[2]; + newDst[3] = v[3]; + + return newDst; +} + +/** + * Clones a vector. (same as {@link vec4.copy}) + * Also see {@link vec4.create} and {@link vec4.set} + * @param v - The vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns A copy of v. + */ +const clone = copy; + +/** + * Multiplies a vector by another vector (component-wise); assumes a and + * b have the same length. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The vector of products of entries of a and b. + */ +function multiply(a: Vec4Arg, b: Vec4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = a[0] * b[0]; + newDst[1] = a[1] * b[1]; + newDst[2] = a[2] * b[2]; + newDst[3] = a[3] * b[3]; + + return newDst; +} + +/** + * Multiplies a vector by another vector (component-wise); assumes a and + * b have the same length. (same as mul) + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The vector of products of entries of a and b. + */ +const mul = multiply; + +/** + * Divides a vector by another vector (component-wise); assumes a and + * b have the same length. + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The vector of quotients of entries of a and b. + */ +function divide(a: Vec4Arg, b: Vec4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = a[0] / b[0]; + newDst[1] = a[1] / b[1]; + newDst[2] = a[2] / b[2]; + newDst[3] = a[3] / b[3]; + + return newDst; +} + +/** + * Divides a vector by another vector (component-wise); assumes a and + * b have the same length. (same as divide) + * @param a - Operand vector. + * @param b - Operand vector. + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The vector of quotients of entries of a and b. + */ +const div = divide; + +/** + * Zero's a vector + * @param dst - vector to hold result. If not passed in a new one is created. + * @returns The zeroed vector. + */ +function zero(dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + newDst[0] = 0; + newDst[1] = 0; + newDst[2] = 0; + newDst[3] = 0; + + return newDst; +} + + +/** + * transform vec4 by 4x4 matrix + * @param v - the vector + * @param m - The matrix. + * @param dst - optional vec4 to store result. If not passed a new one is created. + * @returns the transformed vector + */ +function transformMat4(v: Vec4Arg, m: Mat4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + const x = v[0]; + const y = v[1]; + const z = v[2]; + const w = v[3]; + + newDst[0] = m[0] * x + m[4] * y + m[ 8] * z + m[12] * w; + newDst[1] = m[1] * x + m[5] * y + m[ 9] * z + m[13] * w; + newDst[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w; + newDst[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w; + + return newDst; +} + + +/** + * Treat a 4D vector as a direction and set it's length + * + * @param a The vec4 to lengthen + * @param len The length of the resulting vector + * @returns The lengthened vector + */ +function setLength(a: Vec4Arg, len: number, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + normalize(a, newDst); + return mulScalar(newDst, len, newDst); +} + +/** + * Ensure a vector is not longer than a max length + * + * @param a The vec4 to limit + * @param maxLen The longest length of the resulting vector + * @returns The vector, shortened to maxLen if it's too long + */ +function truncate(a: Vec4Arg, maxLen: number, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + + if (length(a) > maxLen) { + return setLength(a, maxLen, newDst); + } + + return copy(a, newDst); +} + +/** + * Return the vector exactly between 2 endpoint vectors + * + * @param a Endpoint 1 + * @param b Endpoint 2 + * @returns The vector exactly residing between endpoints 1 and 2 + */ +function midpoint(a: Vec4Arg, b: Vec4Arg, dst?: T) { + const newDst = (dst ?? new Ctor(4)) as T; + return lerp(a, b, 0.5, newDst); +} + +return { + create, + fromValues, + set, + ceil, + floor, + round, + clamp, + add, + addScaled, + subtract, + sub, + equalsApproximately, + equals, + lerp, + lerpV, + max, + min, + mulScalar, + scale, + divScalar, + inverse, + invert, + dot, + length, + len, + lengthSq, + lenSq, + distance, + dist, + distanceSq, + distSq, + normalize, + negate, + copy, + clone, + multiply, + mul, + divide, + div, + zero, + transformMat4, + setLength, + truncate, + midpoint, +}; +} + +type API = ReturnType>; + +const cache = new Map(); + +/** + * + * Vec4 math functions. + * + * Almost all functions take an optional `newDst` argument. If it is not passed in the + * functions will create a new `Vec4`. In other words you can do this + * + * const v = vec4.cross(v1, v2); // Creates a new Vec4 with the cross product of v1 x v2. + * + * or + * + * const v = vec4.create(); + * vec4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v + * + * The first style is often easier but depending on where it's used it generates garbage where + * as there is almost never allocation with the second style. + * + * It is always safe to pass any vector as the destination. So for example + * + * vec4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1 + * + */ +export function getAPI(Ctor: Vec4Ctor) { + let api = cache.get(Ctor); + if (!api) { + api = getAPIImpl(Ctor); + cache.set(Ctor, api); + } + return api as API; +} + diff --git a/tools/demo/wgpu-matrix/vec4.ts b/tools/demo/wgpu-matrix/vec4.ts new file mode 100644 index 000000000..2fad69a63 --- /dev/null +++ b/tools/demo/wgpu-matrix/vec4.ts @@ -0,0 +1,33 @@ +/* + * Copyright 2022 Gregg Tavares + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +import { BaseArgType } from "./types"; + +/** + * A JavaScript array with 4 values, a Float32Array with 4 values, or a Float64Array with 4 values. + */ +export type Vec4Arg = BaseArgType; + +/** + * A specific concrete 4 element vector. + */ +export type Vec4Type = T; diff --git a/tools/demo/wgpu-matrix/wgpu-matrix.ts b/tools/demo/wgpu-matrix/wgpu-matrix.ts new file mode 100644 index 000000000..055a28340 --- /dev/null +++ b/tools/demo/wgpu-matrix/wgpu-matrix.ts @@ -0,0 +1,195 @@ +/** + * Some docs + * @namespace wgpu-matrix + */ +import {BaseArgType, ZeroArray} from './types'; +import {Mat3Arg, Mat3Type, getAPI as getMat3API} from './mat3-impl'; +import {Mat4Arg, Mat4Type, getAPI as getMat4API} from './mat4-impl'; +import {QuatArg, QuatType, getAPI as getQuatAPI, RotationOrder} from './quat-impl'; +import {Vec2Arg, Vec2Type, getAPI as getVec2API} from './vec2-impl'; +import {Vec3Arg, Vec3Type, getAPI as getVec3API} from './vec3-impl'; +import {Vec4Arg, Vec4Type, getAPI as getVec4API} from './vec4-impl'; +import * as utils from './utils'; + +export { + RotationOrder, + utils, + + BaseArgType, + + Mat3Arg, + Mat4Arg, + QuatArg, + Vec2Arg, + Vec3Arg, + Vec4Arg, + + Mat3Type, + Mat4Type, + QuatType, + Vec2Type, + Vec3Type, + Vec4Type, +}; + +export type BaseCtor = new (n: number) => T; + +export type Mat3 = Mat3Type; +export type Mat4 = Mat4Type; +export type Quat = QuatType; +export type Vec2 = Vec2Type; +export type Vec3 = Vec3Type; +export type Vec4 = Vec4Type; + +export type Mat3d = Mat3Type; +export type Mat4d = Mat4Type; +export type Quatd = QuatType; +export type Vec2d = Vec2Type; +export type Vec3d = Vec3Type; +export type Vec4d = Vec4Type; + +export type Mat3n = Mat3Type; +export type Mat4n = Mat4Type; +export type Quatn = QuatType; +export type Vec2n = Vec2Type; +export type Vec3n = Vec3Type; +export type Vec4n = Vec4Type; + +/** + * Generate wgpu-matrix API for type + */ +function wgpuMatrixAPI< + Mat3 extends BaseArgType, + Mat4 extends BaseArgType, + Quat extends BaseArgType, + Vec2 extends BaseArgType, + Vec3 extends BaseArgType, + Vec4 extends BaseArgType, +>( + Mat3Ctor: BaseCtor, + Mat4Ctor: BaseCtor, + QuatCtor: BaseCtor, + Vec2Ctor: BaseCtor, + Vec3Ctor: BaseCtor, + Vec4Ctor: BaseCtor, +) { + return { + /** @namespace mat4 */ + mat4: getMat4API(Mat3Ctor), + /** @namespace mat3 */ + mat3: getMat3API(Mat4Ctor), + /** @namespace quat */ + quat: getQuatAPI(QuatCtor), + /** @namespace vec2 */ + vec2: getVec2API(Vec2Ctor), + /** @namespace vec3 */ + vec3: getVec3API(Vec3Ctor), + /** @namespace vec4 */ + vec4: getVec4API(Vec4Ctor), + }; +} + +export const { + /** + * 4x4 Matrix functions that default to returning `Float32Array` + * @namespace + */ + mat4, + /** + * 3x3 Matrix functions that default to returning `Float32Array` + * @namespace + */ + mat3, + /** + * Quaternion functions that default to returning `Float32Array` + * @namespace + */ + quat, + /** + * Vec2 functions that default to returning `Float32Array` + * @namespace + */ + vec2, + /** + * Vec3 functions that default to returning `Float32Array` + * @namespace + */ + vec3, + /** + * Vec3 functions that default to returning `Float32Array` + * @namespace + */ + vec4, +} = wgpuMatrixAPI< + Mat3, Mat4, Quat, Vec2, Vec3, Vec4>( + Float32Array, Float32Array, Float32Array, Float32Array, Float32Array, Float32Array); + +export const { + /** + * 4x4 Matrix functions that default to returning `Float64Array` + * @namespace + */ + mat4: mat4d, + /** + * 3x3 Matrix functions that default to returning `Float64Array` + * @namespace + */ + mat3: mat3d, + /** + * Quaternion functions that default to returning `Float64Array` + * @namespace + */ + quat: quatd, + /** + * Vec2 functions that default to returning `Float64Array` + * @namespace + */ + vec2: vec2d, + /** + * Vec3 functions that default to returning `Float64Array` + * @namespace + */ + vec3: vec3d, + /** + * Vec3 functions that default to returning `Float64Array` + * @namespace + */ + vec4: vec4d, +} = wgpuMatrixAPI< + Mat3d, Mat4d, Quatd, Vec2d, Vec3d, Vec4d>( + Float64Array, Float64Array, Float64Array, Float64Array, Float64Array, Float64Array); + +export const { + /** + * 4x4 Matrix functions that default to returning `number[]` + * @namespace + */ + mat4: mat4n, + /** + * 3x3 Matrix functions that default to returning `number[]` + * @namespace + */ + mat3: mat3n, + /** + * Quaternion functions that default to returning `number[]` + * @namespace + */ + quat: quatn, + /** + * Vec2 functions that default to returning `number[]` + * @namespace + */ + vec2: vec2n, + /** + * Vec3 functions that default to returning `number[]` + * @namespace + */ + vec3: vec3n, + /** + * Vec3 functions that default to returning `number[]` + * @namespace + */ + vec4: vec4n, +} = wgpuMatrixAPI< + Mat3n, Mat4n, Quatn, Vec2n, Vec3n, Vec4n>( + ZeroArray, Array, Array, Array, Array, Array);