diff --git a/.github/update.log b/.github/update.log index a02b5e2c66..97e2a5a6b5 100644 --- a/.github/update.log +++ b/.github/update.log @@ -969,3 +969,4 @@ Update On Mon Apr 7 20:36:09 CEST 2025 Update On Tue Apr 8 20:36:39 CEST 2025 Update On Wed Apr 9 20:37:31 CEST 2025 Update On Thu Apr 10 20:34:13 CEST 2025 +Update On Fri Apr 11 20:36:10 CEST 2025 diff --git a/clash-meta/adapter/outbound/util.go b/clash-meta/adapter/outbound/util.go index ea39db1f5d..f84193a5bb 100644 --- a/clash-meta/adapter/outbound/util.go +++ b/clash-meta/adapter/outbound/util.go @@ -54,6 +54,8 @@ func resolveUDPAddr(ctx context.Context, network, address string, prefer C.DNSPr if err != nil { return nil, err } + + ip, port = resolver.LookupIP4P(ip, port) return net.ResolveUDPAddr(network, net.JoinHostPort(ip.String(), port)) } diff --git a/clash-meta/component/dialer/dialer.go b/clash-meta/component/dialer/dialer.go index 0ecccdf8cf..6e1f242661 100644 --- a/clash-meta/component/dialer/dialer.go +++ b/clash-meta/component/dialer/dialer.go @@ -7,14 +7,12 @@ import ( "net" "net/netip" "os" - "strconv" "strings" "sync" "time" "github.com/metacubex/mihomo/component/keepalive" "github.com/metacubex/mihomo/component/resolver" - "github.com/metacubex/mihomo/log" ) const ( @@ -138,9 +136,7 @@ func GetTcpConcurrent() bool { func dialContext(ctx context.Context, network string, destination netip.Addr, port string, opt *option) (net.Conn, error) { var address string - if IP4PEnable { - destination, port = lookupIP4P(destination, port) - } + destination, port = resolver.LookupIP4P(destination, port) address = net.JoinHostPort(destination.String(), port) netDialer := opt.netDialer @@ -396,21 +392,3 @@ func NewDialer(options ...Option) Dialer { opt := applyOptions(options...) return Dialer{Opt: *opt} } - -func GetIP4PEnable(enableIP4PConvert bool) { - IP4PEnable = enableIP4PConvert -} - -// kanged from https://github.com/heiher/frp/blob/ip4p/client/ip4p.go - -func lookupIP4P(addr netip.Addr, port string) (netip.Addr, string) { - ip := addr.AsSlice() - if ip[0] == 0x20 && ip[1] == 0x01 && - ip[2] == 0x00 && ip[3] == 0x00 { - addr = netip.AddrFrom4([4]byte{ip[12], ip[13], ip[14], ip[15]}) - port = strconv.Itoa(int(ip[10])<<8 + int(ip[11])) - log.Debugln("Convert IP4P address %s to %s", ip, net.JoinHostPort(addr.String(), port)) - return addr, port - } - return addr, port -} diff --git a/clash-meta/component/resolver/ip4p.go b/clash-meta/component/resolver/ip4p.go new file mode 100644 index 0000000000..e910929a3d --- /dev/null +++ b/clash-meta/component/resolver/ip4p.go @@ -0,0 +1,37 @@ +package resolver + +import ( + "net" + "net/netip" + "strconv" + + "github.com/metacubex/mihomo/log" +) + +var ( + ip4PEnable bool +) + +func GetIP4PEnable() bool { + return ip4PEnable +} + +func SetIP4PEnable(enableIP4PConvert bool) { + ip4PEnable = enableIP4PConvert +} + +// kanged from https://github.com/heiher/frp/blob/ip4p/client/ip4p.go + +func LookupIP4P(addr netip.Addr, port string) (netip.Addr, string) { + if ip4PEnable { + ip := addr.AsSlice() + if ip[0] == 0x20 && ip[1] == 0x01 && + ip[2] == 0x00 && ip[3] == 0x00 { + addr = netip.AddrFrom4([4]byte{ip[12], ip[13], ip[14], ip[15]}) + port = strconv.Itoa(int(ip[10])<<8 + int(ip[11])) + log.Debugln("Convert IP4P address %s to %s", ip, net.JoinHostPort(addr.String(), port)) + return addr, port + } + } + return addr, port +} diff --git a/clash-meta/hub/executor/executor.go b/clash-meta/hub/executor/executor.go index 3fed360c90..d046223e72 100644 --- a/clash-meta/hub/executor/executor.go +++ b/clash-meta/hub/executor/executor.go @@ -221,7 +221,7 @@ func updateExperimental(c *config.Experimental) { if c.QUICGoDisableECN { _ = os.Setenv("QUIC_GO_DISABLE_ECN", strconv.FormatBool(true)) } - dialer.GetIP4PEnable(c.IP4PEnable) + resolver.SetIP4PEnable(c.IP4PEnable) } func updateNTP(c *config.NTP) { diff --git a/clash-nyanpasu/manifest/version.json b/clash-nyanpasu/manifest/version.json index d539dceb62..de860a1ca5 100644 --- a/clash-nyanpasu/manifest/version.json +++ b/clash-nyanpasu/manifest/version.json @@ -2,7 +2,7 @@ "manifest_version": 1, "latest": { "mihomo": "v1.19.4", - "mihomo_alpha": "alpha-bfd06eb", + "mihomo_alpha": "alpha-8085c68", "clash_rs": "v0.7.6", "clash_premium": "2023-09-05-gdcc8d87", "clash_rs_alpha": "0.7.6-alpha+sha.484a3ab" @@ -69,5 +69,5 @@ "linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf" } }, - "updated_at": "2025-04-09T22:21:05.112Z" + "updated_at": "2025-04-10T22:21:07.689Z" } diff --git a/clash-verge-rev/src-tauri/src/cmd/app.rs b/clash-verge-rev/src-tauri/src/cmd/app.rs index f428069fec..5bc4f51891 100644 --- a/clash-verge-rev/src-tauri/src/cmd/app.rs +++ b/clash-verge-rev/src-tauri/src/cmd/app.rs @@ -49,7 +49,7 @@ pub fn open_devtools(app_handle: tauri::AppHandle) { /// 退出应用 #[tauri::command] pub fn exit_app() { - feat::quit(Some(0)); + feat::quit(); } /// 重启应用 diff --git a/clash-verge-rev/src-tauri/src/cmd/clash.rs b/clash-verge-rev/src-tauri/src/cmd/clash.rs index 8f61f0f92e..e07f84e955 100644 --- a/clash-verge-rev/src-tauri/src/cmd/clash.rs +++ b/clash-verge-rev/src-tauri/src/cmd/clash.rs @@ -1,5 +1,7 @@ use super::CmdResult; -use crate::{config::*, core::*, feat, module::mihomo::MihomoManager, wrap_err}; +use crate::{ + config::*, core::*, feat, module::mihomo::MihomoManager, process::AsyncHandler, wrap_err, +}; use serde_yaml::Mapping; /// 复制Clash环境变量 @@ -104,10 +106,9 @@ pub fn apply_dns_config(apply: bool) -> CmdResult { core::{handle, CoreManager}, utils::dirs, }; - use tauri::async_runtime; // 使用spawn来处理异步操作 - async_runtime::spawn(async move { + AsyncHandler::spawn(move || async move { if apply { // 读取DNS配置文件 let dns_path = match dirs::app_home_dir() { diff --git a/clash-verge-rev/src-tauri/src/config/config.rs b/clash-verge-rev/src-tauri/src/config/config.rs index 6e32e59c85..7cefb5d199 100644 --- a/clash-verge-rev/src-tauri/src/config/config.rs +++ b/clash-verge-rev/src-tauri/src/config/config.rs @@ -3,6 +3,7 @@ use crate::{ config::PrfItem, core::{handle, CoreManager}, enhance, logging, + process::AsyncHandler, utils::{dirs, help, logging::Type}, }; use anyhow::{anyhow, Result}; @@ -117,7 +118,7 @@ impl Config { // 在单独的任务中发送通知 if let Some((msg_type, msg_content)) = validation_result { - tauri::async_runtime::spawn(async move { + AsyncHandler::spawn(move || async move { sleep(Duration::from_secs(2)).await; handle::Handle::notice_message(msg_type, &msg_content); }); diff --git a/clash-verge-rev/src-tauri/src/core/handle.rs b/clash-verge-rev/src-tauri/src/core/handle.rs index f887c1a7fb..6140c1c363 100644 --- a/clash-verge-rev/src-tauri/src/core/handle.rs +++ b/clash-verge-rev/src-tauri/src/core/handle.rs @@ -3,7 +3,7 @@ use parking_lot::RwLock; use std::{sync::Arc, time::Duration}; use tauri::{AppHandle, Emitter, Manager, WebviewWindow}; -use crate::{logging, logging_error, utils::logging::Type}; +use crate::{logging, logging_error, process::AsyncHandler, utils::logging::Type}; /// 存储启动期间的错误消息 #[derive(Debug, Clone)] @@ -152,7 +152,7 @@ impl Handle { let window_clone = window.clone(); let errors_clone = errors.clone(); - tauri::async_runtime::spawn(async move { + AsyncHandler::spawn(move || async move { tokio::time::sleep(Duration::from_secs(2)).await; for error in errors_clone { diff --git a/clash-verge-rev/src-tauri/src/core/hotkey.rs b/clash-verge-rev/src-tauri/src/core/hotkey.rs index 3379078e4b..aafaca35e3 100755 --- a/clash-verge-rev/src-tauri/src/core/hotkey.rs +++ b/clash-verge-rev/src-tauri/src/core/hotkey.rs @@ -3,13 +3,14 @@ use crate::{ core::handle, feat, logging, logging_error, module::lightweight::entry_lightweight_mode, + process::AsyncHandler, utils::{logging::Type, resolve}, }; use anyhow::{bail, Result}; use once_cell::sync::OnceCell; use parking_lot::Mutex; use std::{collections::HashMap, sync::Arc}; -use tauri::{async_runtime, Manager}; +use tauri::Manager; use tauri_plugin_global_shortcut::{Code, GlobalShortcutExt, ShortcutState}; pub struct Hotkey { @@ -153,7 +154,7 @@ impl Hotkey { ); // 使用 spawn_blocking 来确保在正确的线程上执行 - async_runtime::spawn_blocking(|| { + AsyncHandler::spawn_blocking(|| { logging!(debug, Type::Hotkey, "Toggle dashboard window visibility"); // 检查窗口是否存在 @@ -195,7 +196,7 @@ impl Hotkey { "toggle_system_proxy" => || feat::toggle_system_proxy(), "toggle_tun_mode" => || feat::toggle_tun_mode(None), "entry_lightweight_mode" => || entry_lightweight_mode(), - "quit" => || feat::quit(Some(0)), + "quit" => || feat::quit(), #[cfg(target_os = "macos")] "hide" => || feat::hide(), diff --git a/clash-verge-rev/src-tauri/src/core/sysopt.rs b/clash-verge-rev/src-tauri/src/core/sysopt.rs index 7194c3b6ed..9f31a4726c 100644 --- a/clash-verge-rev/src-tauri/src/core/sysopt.rs +++ b/clash-verge-rev/src-tauri/src/core/sysopt.rs @@ -2,6 +2,7 @@ use crate::{ config::{Config, IVerge}, core::handle::Handle, logging, logging_error, + process::AsyncHandler, utils::logging::Type, }; use anyhow::Result; @@ -248,7 +249,7 @@ impl Sysopt { fn guard_proxy(&self) { let _lock = self.guard_state.lock(); - tauri::async_runtime::spawn(async move { + AsyncHandler::spawn(move || async move { // default duration is 10s let mut wait_secs = 10u64; diff --git a/clash-verge-rev/src-tauri/src/core/tray/mod.rs b/clash-verge-rev/src-tauri/src/core/tray/mod.rs index 5f18905e52..274ba672d4 100644 --- a/clash-verge-rev/src-tauri/src/core/tray/mod.rs +++ b/clash-verge-rev/src-tauri/src/core/tray/mod.rs @@ -7,6 +7,7 @@ use crate::{ config::Config, feat, module::{lightweight::entry_lightweight_mode, mihomo::Rate}, + process::AsyncHandler, resolve, utils::{dirs::find_target_icons, i18n::t, logging::Type, resolve::VERSION}, }; @@ -386,42 +387,46 @@ impl Tray { let speed_rate = Arc::clone(&self.speed_rate); let is_subscribed = Arc::clone(&self.is_subscribed); - tauri::async_runtime::spawn(async move { + AsyncHandler::spawn(move || { let mut shutdown = shutdown_rx; + let speed_rate = speed_rate.clone(); // 确保 Arc 被正确克隆 + let is_subscribed = is_subscribed.clone(); - 'outer: loop { - match Traffic::get_traffic_stream().await { - Ok(mut stream) => loop { - tokio::select! { - Some(traffic) = stream.next() => { - if let Ok(traffic) = traffic { - let guard = speed_rate.lock(); - let enable_tray_speed: bool = Config::verge().latest().enable_tray_speed.unwrap_or(true); - if !enable_tray_speed { - continue; - } - if let Some(sr) = guard.as_ref() { - if let Some(rate) = sr.update_and_check_changed(traffic.up, traffic.down) { - let _ = Tray::global().update_icon(Some(rate)); + Box::pin(async move { + 'outer: loop { + match Traffic::get_traffic_stream().await { + Ok(mut stream) => loop { + tokio::select! { + Some(traffic) = stream.next() => { + if let Ok(traffic) = traffic { + let guard = speed_rate.lock(); + let enable_tray_speed: bool = Config::verge() + .latest() + .enable_tray_speed + .unwrap_or(true); + if !enable_tray_speed { + continue; + } + if let Some(sr) = guard.as_ref() { + if let Some(rate) = sr.update_and_check_changed(traffic.up, traffic.down) { + let _ = Tray::global().update_icon(Some(rate)); + } } } } + _ = shutdown.recv() => break 'outer, + } + }, + Err(e) => { + log::error!(target: "app", "Failed to get traffic stream: {}", e); + tokio::time::sleep(std::time::Duration::from_secs(1)).await; + if !*is_subscribed.read() { + break; } - _ = shutdown.recv() => break 'outer, - } - }, - Err(e) => { - log::error!(target: "app", "Failed to get traffic stream: {}", e); - // 如果获取流失败,等待一段时间后重试 - tokio::time::sleep(std::time::Duration::from_secs(1)).await; - - // 检查是否应该继续重试 - if !*is_subscribed.read() { - break; } } } - } + }) }); Ok(()) @@ -686,7 +691,7 @@ fn on_menu_event(_: &AppHandle, event: MenuEvent) { "restart_app" => feat::restart_app(), "entry_lightweight_mode" => entry_lightweight_mode(), "quit" => { - feat::quit(Some(0)); + feat::quit(); } id if id.starts_with("profiles_") => { let profile_index = &id["profiles_".len()..]; diff --git a/clash-verge-rev/src-tauri/src/feat/clash.rs b/clash-verge-rev/src-tauri/src/feat/clash.rs index 5950806e6a..e58b2453d5 100644 --- a/clash-verge-rev/src-tauri/src/feat/clash.rs +++ b/clash-verge-rev/src-tauri/src/feat/clash.rs @@ -3,6 +3,7 @@ use crate::{ core::{handle, tray, CoreManager}, logging_error, module::mihomo::MihomoManager, + process::AsyncHandler, utils::{logging::Type, resolve}, }; use serde_yaml::{Mapping, Value}; @@ -10,7 +11,7 @@ use tauri::Manager; /// Restart the Clash core pub fn restart_clash_core() { - tauri::async_runtime::spawn(async { + AsyncHandler::spawn(move || async move { match CoreManager::global().restart_core().await { Ok(_) => { handle::Handle::refresh_clash(); @@ -26,19 +27,17 @@ pub fn restart_clash_core() { /// Restart the application pub fn restart_app() { - tauri::async_runtime::spawn_blocking(|| { - tauri::async_runtime::block_on(async { - logging_error!(Type::Core, true, CoreManager::global().stop_core().await); - resolve::resolve_reset_async().await; - let app_handle = handle::Handle::global().app_handle().unwrap(); - std::thread::sleep(std::time::Duration::from_secs(1)); - tauri::process::restart(&app_handle.env()); - }); + AsyncHandler::spawn(move || async move { + logging_error!(Type::Core, true, CoreManager::global().stop_core().await); + resolve::resolve_reset_async().await; + let app_handle = handle::Handle::global().app_handle().unwrap(); + std::thread::sleep(std::time::Duration::from_secs(1)); + tauri::process::restart(&app_handle.env()); }); } fn after_change_clash_mode() { - tauri::async_runtime::spawn(async { + AsyncHandler::spawn(move || async { match MihomoManager::global().get_connections().await { Ok(connections) => { if let Some(connections_array) = connections["connections"].as_array() { @@ -64,7 +63,7 @@ pub fn change_clash_mode(mode: String) { let json_value = serde_json::json!({ "mode": mode }); - tauri::async_runtime::spawn(async move { + AsyncHandler::spawn(move || async move { log::debug!(target: "app", "change clash mode to {mode}"); match MihomoManager::global().patch_configs(json_value).await { Ok(_) => { diff --git a/clash-verge-rev/src-tauri/src/feat/profile.rs b/clash-verge-rev/src-tauri/src/feat/profile.rs index ffe34c4d6d..f03e33fb82 100644 --- a/clash-verge-rev/src-tauri/src/feat/profile.rs +++ b/clash-verge-rev/src-tauri/src/feat/profile.rs @@ -2,12 +2,13 @@ use crate::{ cmd, config::{Config, PrfItem, PrfOption}, core::{handle, CoreManager, *}, + process::AsyncHandler, }; use anyhow::{bail, Result}; /// Toggle proxy profile pub fn toggle_proxy_profile(profile_index: String) { - tauri::async_runtime::spawn(async move { + AsyncHandler::spawn(|| async move { let app_handle = handle::Handle::global().app_handle().unwrap(); match cmd::patch_profiles_config_by_profile_index(app_handle, profile_index).await { Ok(_) => { diff --git a/clash-verge-rev/src-tauri/src/feat/proxy.rs b/clash-verge-rev/src-tauri/src/feat/proxy.rs index d5afe0cbc6..5e24c3a071 100644 --- a/clash-verge-rev/src-tauri/src/feat/proxy.rs +++ b/clash-verge-rev/src-tauri/src/feat/proxy.rs @@ -1,6 +1,7 @@ use crate::{ config::{Config, IVerge}, core::handle, + process::AsyncHandler, }; use std::env; use tauri_plugin_clipboard_manager::ClipboardExt; @@ -10,7 +11,7 @@ pub fn toggle_system_proxy() { let enable = Config::verge().draft().enable_system_proxy; let enable = enable.unwrap_or(false); - tauri::async_runtime::spawn(async move { + AsyncHandler::spawn(move || async move { match super::patch_verge( IVerge { enable_system_proxy: Some(!enable), @@ -28,7 +29,7 @@ pub fn toggle_system_proxy() { /// Toggle TUN mode on/off pub fn toggle_tun_mode(not_save_file: Option) { - // tauri::async_runtime::spawn(async move { + // AsyncHandler::spawn(async { // logging!( // info, // Type::Service, @@ -44,7 +45,7 @@ pub fn toggle_tun_mode(not_save_file: Option) { let enable = Config::verge().data().enable_tun_mode; let enable = enable.unwrap_or(false); - tauri::async_runtime::spawn(async move { + AsyncHandler::spawn(async move || { match super::patch_verge( IVerge { enable_tun_mode: Some(!enable), diff --git a/clash-verge-rev/src-tauri/src/feat/window.rs b/clash-verge-rev/src-tauri/src/feat/window.rs index 3a9f71610c..d44b0a38e0 100644 --- a/clash-verge-rev/src-tauri/src/feat/window.rs +++ b/clash-verge-rev/src-tauri/src/feat/window.rs @@ -50,7 +50,7 @@ pub fn open_or_close_dashboard() { } /// 优化的应用退出函数 -pub fn quit(code: Option) { +pub fn quit() { log::debug!(target: "app", "启动退出流程"); // 获取应用句柄并设置退出标志 @@ -64,47 +64,46 @@ pub fn quit(code: Option) { // 在单独线程中处理资源清理,避免阻塞主线程 std::thread::spawn(move || { - // 使用tokio运行时执行异步清理任务 - tauri::async_runtime::block_on(async { - // 使用超时机制处理清理操作 - use tokio::time::{timeout, Duration}; - - // 1. 直接关闭TUN模式 (优先处理,通常最容易卡住) - if Config::verge().data().enable_tun_mode.unwrap_or(false) { - let disable = serde_json::json!({ + use tokio::time::{timeout, Duration}; + let rt = tokio::runtime::Runtime::new().unwrap(); + let cleanup_result = rt.block_on(async { + // 1. 处理TUN模式 + let tun_success = if Config::verge().data().enable_tun_mode.unwrap_or(false) { + let disable_tun = serde_json::json!({ "tun": { "enable": false } }); - - // 设置1秒超时 - let _ = timeout( + timeout( Duration::from_secs(1), - MihomoManager::global().patch_configs(disable), + MihomoManager::global().patch_configs(disable_tun), ) - .await; - } + .await + .is_ok() + } else { + true + }; - // 2. 并行处理系统代理和核心进程清理 - let proxy_future = timeout( + // 2. 顺序执行关键清理 + let proxy_res = timeout( Duration::from_secs(1), sysopt::Sysopt::global().reset_sysproxy(), - ); + ) + .await; - let core_future = timeout(Duration::from_secs(1), CoreManager::global().stop_core()); + let core_res = timeout(Duration::from_secs(1), CoreManager::global().stop_core()).await; - // 同时等待两个任务完成 - let _ = futures::join!(proxy_future, core_future); - - // 3. 处理macOS特定清理 + // 3. 平台特定清理 #[cfg(target_os = "macos")] - { - let _ = timeout(Duration::from_millis(500), resolve::restore_public_dns()).await; - } + let _dns_res = timeout(Duration::from_millis(500), resolve::restore_public_dns()).await; + + tun_success && proxy_res.is_ok() && core_res.is_ok() }); - // 无论清理结果如何,确保应用退出 - app_handle.exit(code.unwrap_or(0)); + app_handle.exit(match cleanup_result { + true => 0, + false => 1, + }); }); } diff --git a/clash-verge-rev/src-tauri/src/lib.rs b/clash-verge-rev/src-tauri/src/lib.rs index 46e4e532da..4fcd7eff97 100644 --- a/clash-verge-rev/src-tauri/src/lib.rs +++ b/clash-verge-rev/src-tauri/src/lib.rs @@ -5,9 +5,11 @@ mod enhance; mod error; mod feat; mod module; +mod process; mod utils; use crate::{ core::hotkey, + process::AsyncHandler, utils::{resolve, resolve::resolve_scheme, server}, }; use config::Config; @@ -84,7 +86,7 @@ impl AppHandleManager { #[allow(clippy::panic)] pub fn run() { // 单例检测 - let app_exists: bool = tauri::async_runtime::block_on(async move { + let app_exists: bool = AsyncHandler::block_on(move || async move { if server::check_singleton().await.is_err() { println!("app exists"); true @@ -121,16 +123,18 @@ pub fn run() { use tauri_plugin_deep_link::DeepLinkExt; logging_error!(Type::System, true, app.deep_link().register_all()); } - app.deep_link().on_open_url(|event| { - tauri::async_runtime::spawn(async move { - if let Some(url) = event.urls().first() { - logging_error!(Type::Setup, true, resolve_scheme(url.to_string()).await); + AsyncHandler::spawn(move || { + let url = event.urls().first().map(|u| u.to_string()); + async move { + if let Some(url) = url { + logging_error!(Type::Setup, true, resolve_scheme(url).await); + } } }); }); - tauri::async_runtime::block_on(async move { + AsyncHandler::block_on(move || async move { resolve::resolve_setup(app).await; }); diff --git a/clash-verge-rev/src-tauri/src/process/async_handler.rs b/clash-verge-rev/src-tauri/src/process/async_handler.rs new file mode 100644 index 0000000000..104e75c7f9 --- /dev/null +++ b/clash-verge-rev/src-tauri/src/process/async_handler.rs @@ -0,0 +1,30 @@ +use std::future::Future; +use tauri::{async_runtime, async_runtime::JoinHandle}; + +pub struct AsyncHandler; + +impl AsyncHandler { + pub fn spawn(f: F) -> JoinHandle<()> + where + F: FnOnce() -> Fut + Send + 'static, + Fut: Future + Send + 'static, + { + async_runtime::spawn(f()) + } + + pub fn spawn_blocking(f: F) -> JoinHandle + where + F: FnOnce() -> R + Send + 'static, + R: Send + 'static, + { + async_runtime::spawn_blocking(f) + } + + pub fn block_on(f: F) -> R + where + F: FnOnce() -> Fut, + Fut: Future, + { + async_runtime::block_on(f()) + } +} diff --git a/clash-verge-rev/src-tauri/src/process/mod.rs b/clash-verge-rev/src-tauri/src/process/mod.rs new file mode 100644 index 0000000000..ac83ecc0d1 --- /dev/null +++ b/clash-verge-rev/src-tauri/src/process/mod.rs @@ -0,0 +1,2 @@ +mod async_handler; +pub use async_handler::AsyncHandler; diff --git a/clash-verge-rev/src-tauri/src/utils/resolve.rs b/clash-verge-rev/src-tauri/src/utils/resolve.rs index 8f86f790cc..e46fd435dd 100644 --- a/clash-verge-rev/src-tauri/src/utils/resolve.rs +++ b/clash-verge-rev/src-tauri/src/utils/resolve.rs @@ -5,6 +5,7 @@ use crate::{ core::*, logging, logging_error, module::lightweight, + process::AsyncHandler, utils::{error, init, logging::Type, server}, wrap_err, }; @@ -211,7 +212,7 @@ pub fn create_window(is_showup: bool) { // 标记前端UI已准备就绪,向前端发送启动完成事件 let app_handle_clone = app_handle.clone(); - tauri::async_runtime::spawn(async move { + AsyncHandler::spawn(move || async move { use tauri::Emitter; logging!(info, Type::Window, true, "UI gets ready."); diff --git a/clash-verge-rev/src-tauri/src/utils/server.rs b/clash-verge-rev/src-tauri/src/utils/server.rs index 618704731c..39d40c3754 100644 --- a/clash-verge-rev/src-tauri/src/utils/server.rs +++ b/clash-verge-rev/src-tauri/src/utils/server.rs @@ -4,6 +4,7 @@ use super::resolve; use crate::{ config::{Config, IVerge, DEFAULT_PAC}, logging_error, + process::AsyncHandler, utils::logging::Type, }; use anyhow::{bail, Result}; @@ -47,7 +48,7 @@ pub async fn check_singleton() -> Result<()> { pub fn embed_server() { let port = IVerge::get_singleton_port(); - tauri::async_runtime::spawn(async move { + AsyncHandler::spawn(move || async move { let visible = warp::path!("commands" / "visible").map(move || { resolve::create_window(false); "ok" diff --git a/lede/package/firmware/linux-firmware/Makefile b/lede/package/firmware/linux-firmware/Makefile index 6a03233a24..694ba9e09a 100644 --- a/lede/package/firmware/linux-firmware/Makefile +++ b/lede/package/firmware/linux-firmware/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=linux-firmware -PKG_VERSION:=20250211 +PKG_VERSION:=20250311 PKG_RELEASE:=1 PKG_SOURCE_URL:=@KERNEL/linux/kernel/firmware PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz -PKG_HASH:=2de1345897bf839d532c5de0fdb348770ca2a5f4edfb21971582597abb45297d +PKG_HASH:=b1083a36f19aea46f661dcfd4cd462d13933dcb4e7f0dc809525552dd5c3541d PKG_MAINTAINER:=Felix Fietkau diff --git a/lede/package/kernel/mac80211/patches/build/993-add-new-EHT-TLV-definition-for-11be-standard.patch b/lede/package/kernel/mac80211/patches/build/993-add-new-EHT-TLV-definition-for-11be-standard.patch new file mode 100644 index 0000000000..ec2c0646c7 --- /dev/null +++ b/lede/package/kernel/mac80211/patches/build/993-add-new-EHT-TLV-definition-for-11be-standard.patch @@ -0,0 +1,223 @@ +Signed-off-by: Mordechay Goodstein +Signed-off-by: Gregory Greenman +--- + include/net/ieee80211_radiotap.h | 187 ++++++++++++++++++++++++++++++- + 1 file changed, 185 insertions(+), 2 deletions(-) + +diff --git a/include/net/ieee80211_radiotap.h b/include/net/ieee80211_radiotap.h +index 598f53d2a3a0..0fc2667a9a5d 100644 +--- a/include/net/ieee80211_radiotap.h ++++ b/include/net/ieee80211_radiotap.h +@@ -1,6 +1,6 @@ + /* + * Copyright (c) 2017 Intel Deutschland GmbH +- * Copyright (c) 2018-2019, 2021 Intel Corporation ++ * Copyright (c) 2018-2019, 2021-2022 Intel Corporation + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above +@@ -82,11 +82,14 @@ enum ieee80211_radiotap_presence { + IEEE80211_RADIOTAP_HE_MU = 24, + IEEE80211_RADIOTAP_ZERO_LEN_PSDU = 26, + IEEE80211_RADIOTAP_LSIG = 27, ++ IEEE80211_RADIOTAP_TLV = 28, + + /* valid in every it_present bitmap, even vendor namespaces */ + IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE = 29, + IEEE80211_RADIOTAP_VENDOR_NAMESPACE = 30, +- IEEE80211_RADIOTAP_EXT = 31 ++ IEEE80211_RADIOTAP_EXT = 31, ++ IEEE80211_RADIOTAP_EHT_USIG = 33, ++ IEEE80211_RADIOTAP_EHT = 34, + }; + + /* for IEEE80211_RADIOTAP_FLAGS */ +@@ -360,6 +363,186 @@ enum ieee80211_radiotap_zero_len_psdu_type { + IEEE80211_RADIOTAP_ZERO_LEN_PSDU_VENDOR = 0xff, + }; + ++struct ieee80211_radiotap_tlv { ++ __le16 type; ++ __le16 len; ++ u8 data[]; ++} __packed; ++ ++/* ieee80211_radiotap_eht_usig - content of U-SIG tlv (type 33) ++ * see www.radiotap.org/fields/U-SIG.html for details ++ */ ++struct ieee80211_radiotap_eht_usig { ++ __le32 common; ++ __le32 value; ++ __le32 mask; ++} __packed; ++ ++/* ieee80211_radiotap_eht - content of EHT tlv (type 34) ++ * see www.radiotap.org/fields/EHT.html for details ++ */ ++struct ieee80211_radiotap_eht { ++ __le32 known; ++ __le32 data[9]; ++ __le32 user_info[]; ++} __packed; ++ ++/* Known field for EHT TLV ++ * The ending defines for what the field applies as following ++ * O - OFDMA (including TB), M - MU-MIMO, S - EHT sounding. ++ */ ++enum ieee80211_radiotap_eht_known { ++ IEEE80211_RADIOTAP_EHT_KNOWN_SPATIAL_REUSE = 0x00000002, ++ IEEE80211_RADIOTAP_EHT_KNOWN_GI = 0x00000004, ++ IEEE80211_RADIOTAP_EHT_KNOWN_EHT_LTF = 0x00000010, ++ IEEE80211_RADIOTAP_EHT_KNOWN_LDPC_EXTRA_SYM_OM = 0x00000020, ++ IEEE80211_RADIOTAP_EHT_KNOWN_PRE_PADD_FACOR_OM = 0x00000040, ++ IEEE80211_RADIOTAP_EHT_KNOWN_PE_DISAMBIGUITY_OM = 0x00000080, ++ IEEE80211_RADIOTAP_EHT_KNOWN_DISREGARD_O = 0x00000100, ++ IEEE80211_RADIOTAP_EHT_KNOWN_DISREGARD_S = 0x00000200, ++ IEEE80211_RADIOTAP_EHT_KNOWN_CRC1 = 0x00002000, ++ IEEE80211_RADIOTAP_EHT_KNOWN_TAIL1 = 0x00004000, ++ IEEE80211_RADIOTAP_EHT_KNOWN_CRC2_O = 0x00008000, ++ IEEE80211_RADIOTAP_EHT_KNOWN_TAIL2_O = 0x00010000, ++ IEEE80211_RADIOTAP_EHT_KNOWN_NSS_S = 0x00020000, ++ IEEE80211_RADIOTAP_EHT_KNOWN_BEAMFORMED_S = 0x00040000, ++ IEEE80211_RADIOTAP_EHT_KNOWN_NR_NON_OFDMA_USERS_M = 0x00080000, ++ IEEE80211_RADIOTAP_EHT_KNOWN_ENCODING_BLOCK_CRC_M = 0x00100000, ++ IEEE80211_RADIOTAP_EHT_KNOWN_ENCODING_BLOCK_TAIL_M = 0x00200000, ++ IEEE80211_RADIOTAP_EHT_KNOWN_RU_MRU_SIZE_OM = 0x00400000, ++ IEEE80211_RADIOTAP_EHT_KNOWN_RU_MRU_INDEX_OM = 0x00800000, ++ IEEE80211_RADIOTAP_EHT_KNOWN_RU_ALLOC_TB_FMT = 0x01000000, ++ IEEE80211_RADIOTAP_EHT_KNOWN_PRIMARY_80 = 0x02000000, ++}; ++ ++enum ieee80211_radiotap_eht_data { ++ /* Data 0 */ ++ IEEE80211_RADIOTAP_EHT_DATA0_SPATIAL_REUSE = 0x00000078, ++ IEEE80211_RADIOTAP_EHT_DATA0_GI = 0x00000180, ++ IEEE80211_RADIOTAP_EHT_DATA0_LTF = 0x00000600, ++ IEEE80211_RADIOTAP_EHT_DATA0_EHT_LTF = 0x00003800, ++ IEEE80211_RADIOTAP_EHT_DATA0_LDPC_EXTRA_SYM_OM = 0x00004000, ++ IEEE80211_RADIOTAP_EHT_DATA0_PRE_PADD_FACOR_OM = 0x00018000, ++ IEEE80211_RADIOTAP_EHT_DATA0_PE_DISAMBIGUITY_OM = 0x00020000, ++ IEEE80211_RADIOTAP_EHT_DATA0_DISREGARD_S = 0x000c0000, ++ IEEE80211_RADIOTAP_EHT_DATA0_DISREGARD_O = 0x003c0000, ++ IEEE80211_RADIOTAP_EHT_DATA0_CRC1_O = 0x03c00000, ++ IEEE80211_RADIOTAP_EHT_DATA0_TAIL1_O = 0xfc000000, ++ /* Data 1 */ ++ IEEE80211_RADIOTAP_EHT_DATA1_RU_SIZE = 0x0000001f, ++ IEEE80211_RADIOTAP_EHT_DATA1_RU_INDEX = 0x00001fe0, ++ IEEE80211_RADIOTAP_EHT_DATA1_RU_ALLOC_CC_1_1_1 = 0x003fe000, ++ IEEE80211_RADIOTAP_EHT_DATA1_RU_ALLOC_CC_1_1_1_KNOWN = 0x00400000, ++ IEEE80211_RADIOTAP_EHT_DATA1_PRIMARY_80 = 0xc0000000, ++ /* Data 2 */ ++ IEEE80211_RADIOTAP_EHT_DATA2_RU_ALLOC_CC_2_1_1 = 0x000001ff, ++ IEEE80211_RADIOTAP_EHT_DATA2_RU_ALLOC_CC_2_1_1_KNOWN = 0x00000200, ++ IEEE80211_RADIOTAP_EHT_DATA2_RU_ALLOC_CC_1_1_2 = 0x0007fc00, ++ IEEE80211_RADIOTAP_EHT_DATA2_RU_ALLOC_CC_1_1_2_KNOWN = 0x00080000, ++ IEEE80211_RADIOTAP_EHT_DATA2_RU_ALLOC_CC_2_1_2 = 0x1ff00000, ++ IEEE80211_RADIOTAP_EHT_DATA2_RU_ALLOC_CC_2_1_2_KNOWN = 0x20000000, ++ /* Data 3 */ ++ IEEE80211_RADIOTAP_EHT_DATA3_RU_ALLOC_CC_1_2_1 = 0x000001ff, ++ IEEE80211_RADIOTAP_EHT_DATA3_RU_ALLOC_CC_1_2_1_KNOWN = 0x00000200, ++ IEEE80211_RADIOTAP_EHT_DATA3_RU_ALLOC_CC_2_2_1 = 0x0007fc00, ++ IEEE80211_RADIOTAP_EHT_DATA3_RU_ALLOC_CC_2_2_1_KNOWN = 0x00080000, ++ IEEE80211_RADIOTAP_EHT_DATA3_RU_ALLOC_CC_1_2_2 = 0x1ff00000, ++ IEEE80211_RADIOTAP_EHT_DATA3_RU_ALLOC_CC_1_2_2_KNOWN = 0x20000000, ++ /* Data 4 */ ++ IEEE80211_RADIOTAP_EHT_DATA4_RU_ALLOC_CC_2_2_2 = 0x000001ff, ++ IEEE80211_RADIOTAP_EHT_DATA4_RU_ALLOC_CC_2_2_2_KNOWN = 0x00000200, ++ IEEE80211_RADIOTAP_EHT_DATA4_RU_ALLOC_CC_1_2_3 = 0x0007fc00, ++ IEEE80211_RADIOTAP_EHT_DATA4_RU_ALLOC_CC_1_2_3_KNOWN = 0x00080000, ++ IEEE80211_RADIOTAP_EHT_DATA4_RU_ALLOC_CC_2_2_3 = 0x1ff00000, ++ IEEE80211_RADIOTAP_EHT_DATA4_RU_ALLOC_CC_2_2_3_KNOWN = 0x20000000, ++ /* Data 5 */ ++ IEEE80211_RADIOTAP_EHT_DATA5_RU_ALLOC_CC_1_2_4 = 0x000001ff, ++ IEEE80211_RADIOTAP_EHT_DATA5_RU_ALLOC_CC_1_2_4_KNOWN = 0x00000200, ++ IEEE80211_RADIOTAP_EHT_DATA5_RU_ALLOC_CC_2_2_4 = 0x0007fc00, ++ IEEE80211_RADIOTAP_EHT_DATA5_RU_ALLOC_CC_2_2_4_KNOWN = 0x00080000, ++ IEEE80211_RADIOTAP_EHT_DATA5_RU_ALLOC_CC_1_2_5 = 0x1ff00000, ++ IEEE80211_RADIOTAP_EHT_DATA5_RU_ALLOC_CC_1_2_5_KNOWN = 0x20000000, ++ /* Data 6 */ ++ IEEE80211_RADIOTAP_EHT_DATA6_RU_ALLOC_CC_2_2_5 = 0x000001ff, ++ IEEE80211_RADIOTAP_EHT_DATA6_RU_ALLOC_CC_2_2_5_KNOWN = 0x00000200, ++ IEEE80211_RADIOTAP_EHT_DATA6_RU_ALLOC_CC_1_2_6 = 0x0007fc00, ++ IEEE80211_RADIOTAP_EHT_DATA6_RU_ALLOC_CC_1_2_6_KNOWN = 0x00080000, ++ IEEE80211_RADIOTAP_EHT_DATA6_RU_ALLOC_CC_2_2_6 = 0x1ff00000, ++ IEEE80211_RADIOTAP_EHT_DATA6_RU_ALLOC_CC_2_2_6_KNOWN = 0x20000000, ++ /* Data 7 */ ++ IEEE80211_RADIOTAP_EHT_DATA7_CRC2_O = 0x0000000f, ++ IEEE80211_RADIOTAP_EHT_DATA7_TAIL_2_O = 0x000003f0, ++ IEEE80211_RADIOTAP_EHT_DATA7_NSS_S = 0x0000f000, ++ IEEE80211_RADIOTAP_EHT_DATA7_BEAMFORMED_S = 0x00010000, ++ IEEE80211_RADIOTAP_EHT_DATA7_NUM_OF_NON_OFDMA_USERS = 0x000e0000, ++ IEEE80211_RADIOTAP_EHT_DATA7_USER_ENCODING_BLOCK_CRC = 0x00f00000, ++ IEEE80211_RADIOTAP_EHT_DATA7_USER_ENCODING_BLOCK_TAIL = 0x3f000000, ++ /* Data 8 */ ++ IEEE80211_RADIOTAP_EHT_DATA8_RU_ALLOC_TB_FMT_PS_160 = 0x00000001, ++ IEEE80211_RADIOTAP_EHT_DATA8_RU_ALLOC_TB_FMT_B0 = 0x00000002, ++ IEEE80211_RADIOTAP_EHT_DATA8_RU_ALLOC_TB_FMT_B7_B1 = 0x000001fc, ++}; ++ ++enum ieee80211_radiotap_eht_user_info { ++ IEEE80211_RADIOTAP_EHT_USER_INFO_STA_ID_KNOWN = 0x00000001, ++ IEEE80211_RADIOTAP_EHT_USER_INFO_MCS_KNOWN = 0x00000002, ++ IEEE80211_RADIOTAP_EHT_USER_INFO_CODING_KNOWN = 0x00000004, ++ IEEE80211_RADIOTAP_EHT_USER_INFO_NSS_KNOWN_O = 0x00000010, ++ IEEE80211_RADIOTAP_EHT_USER_INFO_BEAMFORMING_KNOWN_O = 0x00000020, ++ IEEE80211_RADIOTAP_EHT_USER_INFO_SPATIAL_CONFIG_KNOWN_M = 0x00000040, ++ IEEE80211_RADIOTAP_EHT_USER_INFO_DATA_FOR_USER = 0x00000080, ++ IEEE80211_RADIOTAP_EHT_USER_INFO_STA_ID = 0x0007ff00, ++ IEEE80211_RADIOTAP_EHT_USER_INFO_CODING = 0x00080000, ++ IEEE80211_RADIOTAP_EHT_USER_INFO_MCS = 0x00f00000, ++ IEEE80211_RADIOTAP_EHT_USER_INFO_NSS_O = 0x0f000000, ++ IEEE80211_RADIOTAP_EHT_USER_INFO_BEAMFORMING_O = 0x20000000, ++ IEEE80211_RADIOTAP_EHT_USER_INFO_SPATIAL_CONFIG_M = 0x3f000000, ++ IEEE80211_RADIOTAP_EHT_USER_INFO_RESEVED_c0000000 = 0xc0000000, ++}; ++ ++enum ieee80211_radiotap_eht_usig_common { ++ IEEE80211_RADIOTAP_EHT_USIG_COMMON_PHY_VER_KNOWN = 0x00000001, ++ IEEE80211_RADIOTAP_EHT_USIG_COMMON_BW_KNOWN = 0x00000002, ++ IEEE80211_RADIOTAP_EHT_USIG_COMMON_UL_DL_KNOWN = 0x00000004, ++ IEEE80211_RADIOTAP_EHT_USIG_COMMON_BSS_COLOR_KNOWN = 0x00000008, ++ IEEE80211_RADIOTAP_EHT_USIG_COMMON_TXOP_KNOWN = 0x00000010, ++ IEEE80211_RADIOTAP_EHT_USIG_COMMON_BAD_USIG_CRC = 0x00000020, ++ IEEE80211_RADIOTAP_EHT_USIG_COMMON_PHY_VER = 0x00007000, ++ IEEE80211_RADIOTAP_EHT_USIG_COMMON_BW = 0x00038000, ++ IEEE80211_RADIOTAP_EHT_USIG_COMMON_UL_DL = 0x00040000, ++ IEEE80211_RADIOTAP_EHT_USIG_COMMON_BSS_COLOR = 0x01f80000, ++ IEEE80211_RADIOTAP_EHT_USIG_COMMON_TXOP = 0xfe000000, ++}; ++ ++enum ieee80211_radiotap_eht_usig_mu { ++ /* MU-USIG-1 */ ++ IEEE80211_RADIOTAP_EHT_USIG1_MU_B20_B24_DISREGARD = 0x0000001f, ++ IEEE80211_RADIOTAP_EHT_USIG1_MU_B25_VALIDATE = 0x00000020, ++ /* MU-USIG-2 */ ++ IEEE80211_RADIOTAP_EHT_USIG2_MU_B0_B1_PPDU_TYPE = 0x000000c0, ++ IEEE80211_RADIOTAP_EHT_USIG2_MU_B2_VALIDATE = 0x00000100, ++ IEEE80211_RADIOTAP_EHT_USIG2_MU_B3_B7_PUNCTURED_INFO = 0x00003e00, ++ IEEE80211_RADIOTAP_EHT_USIG2_MU_B8_VALIDATE = 0x00004000, ++ IEEE80211_RADIOTAP_EHT_USIG2_MU_B9_B10_SIG_MCS = 0x00018000, ++ IEEE80211_RADIOTAP_EHT_USIG2_MU_B11_B15_EHT_SIG_SYMBOLS = 0x003e0000, ++ IEEE80211_RADIOTAP_EHT_USIG2_MU_B16_B19_CRC = 0x03c00000, ++ IEEE80211_RADIOTAP_EHT_USIG2_MU_B20_B25_TAIL = 0xfc000000, ++}; ++ ++enum ieee80211_radiotap_eht_usig_tb { ++ /* TB-USIG-1 */ ++ IEEE80211_RADIOTAP_EHT_USIG1_TB_B20_B25_DISREGARD = 0x0000001f, ++ ++ /* TB-USIG-2 */ ++ IEEE80211_RADIOTAP_EHT_USIG2_TB_B0_B1_PPDU_TYPE = 0x000000c0, ++ IEEE80211_RADIOTAP_EHT_USIG2_TB_B2_VALIDATE = 0x00000100, ++ IEEE80211_RADIOTAP_EHT_USIG2_TB_B3_B6_SPATIAL_REUSE_1 = 0x00001e00, ++ IEEE80211_RADIOTAP_EHT_USIG2_TB_B7_B10_SPATIAL_REUSE_2 = 0x0001e000, ++ IEEE80211_RADIOTAP_EHT_USIG2_TB_B11_B15_DISREGARD = 0x003e0000, ++ IEEE80211_RADIOTAP_EHT_USIG2_TB_B16_B19_CRC = 0x03c00000, ++ IEEE80211_RADIOTAP_EHT_USIG2_TB_B20_B25_TAIL = 0xfc000000, ++}; ++ + /** + * ieee80211_get_radiotap_len - get radiotap header length + */ +-- +2.38.1 \ No newline at end of file diff --git a/lede/package/kernel/mt76/Makefile b/lede/package/kernel/mt76/Makefile index 339610521e..f19fcbf769 100644 --- a/lede/package/kernel/mt76/Makefile +++ b/lede/package/kernel/mt76/Makefile @@ -15,19 +15,19 @@ PKG_SOURCE_VERSION:=5b509e80384ab019ac11aa90c81ec0dbb5b0d7f2 PKG_MIRROR_HASH:=6fc25df4d28becd010ff4971b23731c08b53e69381a9e4c868091899712f78a9 PATCH_DIR:=./patches-5.4 else ifdef CONFIG_LINUX_6_1 -PKG_SOURCE_DATE:=2024-04-04 -PKG_SOURCE_VERSION:=8f301a5c5fe3d998b50666bde1d35d412833be89 -PKG_MIRROR_HASH:=49291145ccceeac2964c9a43a46bed88298e5c1da63c6f3c2c1f6b3c1902a61e +PKG_SOURCE_DATE:=2024-05-17 +PKG_SOURCE_VERSION:=513c131c6309712a51502870b041f45b4bd6a6d4 +PKG_MIRROR_HASH:=9f5d7a846912e7deafa216c2aabb038ec58666ecbf8a394e947b144001994d78 PATCH_DIR:=./patches-6.x else ifdef CONFIG_LINUX_6_6 -PKG_SOURCE_DATE:=2024-04-04 -PKG_SOURCE_VERSION:=8f301a5c5fe3d998b50666bde1d35d412833be89 -PKG_MIRROR_HASH:=49291145ccceeac2964c9a43a46bed88298e5c1da63c6f3c2c1f6b3c1902a61e +PKG_SOURCE_DATE:=2024-05-17 +PKG_SOURCE_VERSION:=513c131c6309712a51502870b041f45b4bd6a6d4 +PKG_MIRROR_HASH:=9f5d7a846912e7deafa216c2aabb038ec58666ecbf8a394e947b144001994d78 PATCH_DIR:=./patches-6.x else ifdef CONFIG_LINUX_6_12 -PKG_SOURCE_DATE:=2024-04-04 -PKG_SOURCE_VERSION:=8f301a5c5fe3d998b50666bde1d35d412833be89 -PKG_MIRROR_HASH:=49291145ccceeac2964c9a43a46bed88298e5c1da63c6f3c2c1f6b3c1902a61e +PKG_SOURCE_DATE:=2024-05-17 +PKG_SOURCE_VERSION:=513c131c6309712a51502870b041f45b4bd6a6d4 +PKG_MIRROR_HASH:=9f5d7a846912e7deafa216c2aabb038ec58666ecbf8a394e947b144001994d78 PATCH_DIR:=./patches-6.x else PKG_SOURCE_DATE:=2023-09-18 diff --git a/lede/package/kernel/mt76/patches-6.x/002-mt7603-fix-mixed-code.patch b/lede/package/kernel/mt76/patches-6.x/002-mt7603-fix-mixed-code.patch deleted file mode 100644 index 92befe4afa..0000000000 --- a/lede/package/kernel/mt76/patches-6.x/002-mt7603-fix-mixed-code.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 513c131c6309712a51502870b041f45b4bd6a6d4 Mon Sep 17 00:00:00 2001 -From: Felix Fietkau -Date: Fri, 17 May 2024 13:51:22 +0200 -Subject: [PATCH] mt76: mt7603: fix mixed declarations and code - -Move the qid variable declaration further up - -Fixes: b473c0e47f04 ("wifi: mt76: mt7603: fix tx queue of loopback packets") -Signed-off-by: Felix Fietkau ---- - mt7603/dma.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - ---- a/mt7603/dma.c -+++ b/mt7603/dma.c -@@ -29,7 +29,7 @@ mt7603_rx_loopback_skb(struct mt7603_dev - struct ieee80211_sta *sta; - struct mt7603_sta *msta; - struct mt76_wcid *wcid; -- u8 tid = 0, hwq = 0; -+ u8 qid, tid = 0, hwq = 0; - void *priv; - int idx; - u32 val; -@@ -57,7 +57,7 @@ mt7603_rx_loopback_skb(struct mt7603_dev - if (ieee80211_is_data_qos(hdr->frame_control)) { - tid = *ieee80211_get_qos_ctl(hdr) & - IEEE80211_QOS_CTL_TAG1D_MASK; -- u8 qid = tid_to_ac[tid]; -+ qid = tid_to_ac[tid]; - hwq = wmm_queue_map[qid]; - skb_set_queue_mapping(skb, qid); - } else if (ieee80211_is_data(hdr->frame_control)) { diff --git a/lede/package/kernel/mt76/patches-6.x/102-fix-mt76-connac3-build.patch b/lede/package/kernel/mt76/patches-6.x/102-fix-mt76-connac3-build.patch new file mode 100644 index 0000000000..1c8c6c727f --- /dev/null +++ b/lede/package/kernel/mt76/patches-6.x/102-fix-mt76-connac3-build.patch @@ -0,0 +1,11 @@ +--- a/mt76_connac3_mac.c ++++ b/mt76_connac3_mac.c +@@ -215,7 +215,7 @@ + usig = mt76_connac3_mac_radiotap_push_tlv(skb, IEEE80211_RADIOTAP_EHT_USIG, + sizeof(*usig)); + +- status->flag |= RX_FLAG_RADIOTAP_TLV_AT_END; ++ status->flag |= RX_FLAG_RADIOTAP_VENDOR_DATA; + + eht->known |= EHT_BITS(KNOWN_SPATIAL_REUSE) | + EHT_BITS(KNOWN_GI) | diff --git a/lede/package/kernel/r8127/Makefile b/lede/package/kernel/r8127/Makefile new file mode 100644 index 0000000000..bb0c5e0a6c --- /dev/null +++ b/lede/package/kernel/r8127/Makefile @@ -0,0 +1,47 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=r8127 +PKG_VERSION:=11.014.00 +PKG_RELEASE:=1 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 +PKG_SOURCE_URL:=https://github.com/openwrt/rtl8127/releases/download/$(PKG_VERSION) +PKG_HASH:=f496bc16c32d2e8f9482c57d006604c70d9e8d55b4f1f999b88c602de9104094 + +PKG_BUILD_PARALLEL:=1 +PKG_LICENSE:=GPLv2 +PKG_MAINTAINER:=Alvaro Fernandez Rojas + +include $(INCLUDE_DIR)/kernel.mk +include $(INCLUDE_DIR)/package.mk + +define KernelPackage/r8127 + SUBMENU:=Network Devices + TITLE:=Realtek RTL8127 PCI 10 Gigabit Ethernet driver + DEPENDS:=@PCI_SUPPORT +kmod-libphy + FILES:=$(PKG_BUILD_DIR)/src/r8127.ko + AUTOLOAD:=$(call AutoProbe,r8127) + PROVIDES:=kmod-r8169 + VARIANT:=regular +endef + +define KernelPackage/r8127-rss +$(call KernelPackage/r8127) + CONFLICTS:=kmod-r8127 + TITLE+= (RSS) + VARIANT:=rss +endef + +ifeq ($(BUILD_VARIANT),rss) + PKG_MAKE_FLAGS += ENABLE_RSS_SUPPORT=y +endif + +define Build/Compile + +$(KERNEL_MAKE) $(PKG_JOBS) \ + $(PKG_MAKE_FLAGS) \ + M="$(PKG_BUILD_DIR)/src" \ + modules +endef + +$(eval $(call KernelPackage,r8127)) +$(eval $(call KernelPackage,r8127-rss)) diff --git a/lede/package/kernel/r8127/patches/200-r8127-print-link-speed-and-duplex-mode.patch b/lede/package/kernel/r8127/patches/200-r8127-print-link-speed-and-duplex-mode.patch new file mode 100644 index 0000000000..71ee75a02d --- /dev/null +++ b/lede/package/kernel/r8127/patches/200-r8127-print-link-speed-and-duplex-mode.patch @@ -0,0 +1,106 @@ +From 5ca1d47e065c0318774a946ffdf76010c78cc164 Mon Sep 17 00:00:00 2001 +From: Álvaro Fernández Rojas +Date: Sat, 10 Aug 2024 20:16:32 +0800 +Subject: [PATCH] r8127: print link speed and duplex mode +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Like other Ethernet drivers, print link speed and duplex mode +when the interface is up. Formatting output at the same time. + +Signed-off-by: Álvaro Fernández Rojas +--- + src/r8127.h | 2 ++ + src/r8127_n.c | 48 +++++++++++++++++++++++++++++++++++++++++++++--- + 2 files changed, 47 insertions(+), 3 deletions(-) + +--- a/src/r8127.h ++++ b/src/r8127.h +@@ -1753,6 +1753,11 @@ enum RTL8127_register_content { + LinkStatus = 0x02, + FullDup = 0x01, + ++#define RTL8127_FULL_DUPLEX_MASK (_10000bpsF | _5000bpsF | _2500bpsF | _1000bpsF | FullDup) ++#define RTL8127_SPEED_1000_MASK (_1000bpsF | _1000bpsL | _2500bpsL) ++#define RTL8127_SPEED_2500_MASK (_2500bpsF | _5000bpsL) ++#define RTL8127_SPEED_5000_MASK (_5000bpsF | _10000bpsL) ++ + /* DBG_reg */ + Fix_Nak_1 = (1 << 4), + Fix_Nak_2 = (1 << 3), +--- a/src/r8127_n.c ++++ b/src/r8127_n.c +@@ -39,6 +39,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -4746,6 +4747,42 @@ rtl8127_link_down_patch(struct net_devic + #endif + } + ++static unsigned int rtl8127_phy_duplex(u32 status) ++{ ++ unsigned int duplex = DUPLEX_UNKNOWN; ++ ++ if (status & LinkStatus) { ++ if (status & RTL8127_FULL_DUPLEX_MASK) ++ duplex = DUPLEX_FULL; ++ else ++ duplex = DUPLEX_HALF; ++ } ++ ++ return duplex; ++} ++ ++static int rtl8127_phy_speed(u32 status) ++{ ++ int speed = SPEED_UNKNOWN; ++ ++ if (status & LinkStatus) { ++ if (status & _10000bpsF) ++ speed = SPEED_10000; ++ else if (status & RTL8127_SPEED_5000_MASK) ++ speed = SPEED_5000; ++ else if (status & RTL8127_SPEED_2500_MASK) ++ speed = SPEED_2500; ++ else if (status & RTL8127_SPEED_1000_MASK) ++ speed = SPEED_1000; ++ else if (status & _100bps) ++ speed = SPEED_100; ++ else if (status & _10bps) ++ speed = SPEED_10; ++ } ++ ++ return speed; ++} ++ + static void + _rtl8127_check_link_status(struct net_device *dev, unsigned int link_state) + { +@@ -4758,11 +4795,18 @@ _rtl8127_check_link_status(struct net_de + if (link_state == R8127_LINK_STATE_ON) { + rtl8127_link_on_patch(dev); + +- if (netif_msg_ifup(tp)) +- printk(KERN_INFO PFX "%s: link up\n", dev->name); ++ if (netif_msg_ifup(tp)) { ++ const u32 phy_status = RTL_R32(tp, PHYstatus); ++ const unsigned int phy_duplex = rtl8127_phy_duplex(phy_status); ++ const int phy_speed = rtl8127_phy_speed(phy_status); ++ printk(KERN_INFO PFX "%s: Link is Up - %s/%s\n", ++ dev->name, ++ phy_speed_to_str(phy_speed), ++ phy_duplex_to_str(phy_duplex)); ++ } + } else { + if (netif_msg_ifdown(tp)) +- printk(KERN_INFO PFX "%s: link down\n", dev->name); ++ printk(KERN_INFO PFX "%s: Link is Down\n", dev->name); + + rtl8127_link_down_patch(dev); + } diff --git a/lede/package/libs/udebug/Makefile b/lede/package/libs/udebug/Makefile new file mode 100644 index 0000000000..0a54515e74 --- /dev/null +++ b/lede/package/libs/udebug/Makefile @@ -0,0 +1,82 @@ +# +# Copyright (C) 2023 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=udebug +CMAKE_INSTALL:=1 +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL=$(PROJECT_GIT)/project/udebug.git +PKG_MIRROR_HASH:=553a58a14b59dc7b22755557acbc74f0655a431442a4faca56d28cdb1ef14fb4 +PKG_SOURCE_DATE:=2023-12-06 +PKG_SOURCE_VERSION:=6d3f51f9fda706f0cf4732c762e4dbe8c21e12cf +PKG_ABI_VERSION:=$(call abi_version_str,$(PKG_SOURCE_DATE)) + +PKG_LICENSE:=GPL-2.0 +PKG_MAINTAINER:=Felix Fietkau + +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/cmake.mk + +define Package/libudebug + SECTION:=libs + CATEGORY:=Libraries + TITLE:=udebug client library + DEPENDS:=+libubox +libubus +endef + +define Package/udebugd + SECTION:=utils + CATEGORY:=Utilities + TITLE:=OpenWrt debug service + DEPENDS:=+libudebug +endef + +define Package/udebugd/conffiles +/etc/config/udebug +endef + +define Package/ucode-mod-udebug + SECTION:=utils + CATEGORY:=Utilities + TITLE:=ucode udebug module + DEPENDS:=+libucode +libudebug +endef + +define Package/udebug-cli + SECTION:=utils + CATEGORY:=Utilities + TITLE:=OpenWrt debug service CLI + DEPENDS:=+udebugd +ucode-mod-udebug +endef + +define Package/libudebug/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so* $(1)/usr/lib +endef + +define Package/ucode-mod-udebug/install + $(INSTALL_DIR) $(1)/usr/lib/ucode + $(CP) $(PKG_INSTALL_DIR)/usr/lib/ucode/*.so $(1)/usr/lib/ucode +endef + +define Package/udebugd/install + $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/init.d $(1)/etc/config + $(INSTALL_BIN) ./files/udebug.config $(1)/etc/config/udebug + $(INSTALL_BIN) ./files/udebug.init $(1)/etc/init.d/udebug + $(CP) $(PKG_INSTALL_DIR)/usr/sbin/udebugd $(1)/usr/sbin +endef + +define Package/udebug-cli/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/udebug-cli $(1)/usr/sbin/udebug +endef + +$(eval $(call BuildPackage,libudebug)) +$(eval $(call BuildPackage,udebugd)) +$(eval $(call BuildPackage,ucode-mod-udebug)) +$(eval $(call BuildPackage,udebug-cli)) diff --git a/lede/package/libs/udebug/files/udebug.config b/lede/package/libs/udebug/files/udebug.config new file mode 100644 index 0000000000..68ddefe6cd --- /dev/null +++ b/lede/package/libs/udebug/files/udebug.config @@ -0,0 +1,30 @@ +config service procd + option enabled 0 + +config service log + option enabled 0 + option debug 0 + option kernel 1 + option syslog 1 + +config service hostapd + option enabled 0 + option wpa_log 1 + option wpa_nl_rx 0 + option wpa_nl_tx 0 + option wpa_nl_ctrl 0 + +config service wpa_supplicant + option enabled 0 + option wpa_log 1 + option wpa_nl_rx 0 + option wpa_nl_tx 0 + option wpa_nl_ctrl 0 + +config service netifd + option enabled 0 + option netifd_log 1 + option netifd_nl 0 + +config service umdns + option enabled 0 diff --git a/lede/package/libs/udebug/files/udebug.init b/lede/package/libs/udebug/files/udebug.init new file mode 100755 index 0000000000..a9c92eee8f --- /dev/null +++ b/lede/package/libs/udebug/files/udebug.init @@ -0,0 +1,55 @@ +#!/bin/sh /etc/rc.common +# Copyright (c) 2021 OpenWrt.org + +START=11 + +USE_PROCD=1 +PROG=/usr/sbin/udebugd + +start_service() { + procd_open_instance + procd_set_param command "$PROG" + procd_set_param respawn + procd_close_instance +} + +get_vars() { + local cfg="$1" + uci show "udebug.$cfg" | while read LINE; do + cur="${LINE##udebug.$1.}" + [[ "$cur" = "$LINE" ]] && continue + var="${cur%%=*}" + [[ "$cur" = "$var" ]] && continue + echo "$var" + done +} + +add_debug_service() { + local cfg="$1" + + json_add_object "$cfg" + for var in $(get_vars "$cfg"); do + config_get val "$cfg" "$var" + json_add_string "$var" "$val" + done + json_close_object "$cfg" +} + +reload_service() { + config_load udebug + + json_init + json_add_object service + config_foreach add_debug_service service + json_close_object + ubus call udebug set_config "$(json_dump)" +} + +service_triggers() { + procd_add_reload_trigger udebug +} + +service_running() { + ubus -t 10 wait_for udebug + [ $? = 0 ] && reload_service +} diff --git a/lede/package/utils/ucode/Makefile b/lede/package/utils/ucode/Makefile index 3913fd2aa4..277bf2f368 100644 --- a/lede/package/utils/ucode/Makefile +++ b/lede/package/utils/ucode/Makefile @@ -12,21 +12,36 @@ PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=https://github.com/jow-/ucode.git -PKG_SOURCE_DATE:=2023-01-09 -PKG_SOURCE_VERSION:=8dad974baa4696fcba85837fa70cde8b68dd7c12 -PKG_MIRROR_HASH:=91494352ac298ac2735d62355837a1f18e366999c9e940613e6fa3265edc0364 +PKG_SOURCE_DATE:=2025-03-24 +PKG_SOURCE_VERSION:=b27d70c977ab4381f4094a0b1208e2a13fc5123f +PKG_MIRROR_HASH:=c2285ab8e473a12a1795864323af15779ef42a72dfe8a77c740cf99c316a2ac7 PKG_MAINTAINER:=Jo-Philipp Wich PKG_LICENSE:=ISC -PKG_ABI_VERSION:=20220812 +PKG_ABI_VERSION:=20230711 +PKG_BUILD_DEPENDS:=libmd +HOST_BUILD_DEPENDS:=libjson-c/host include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/host-build.mk include $(INCLUDE_DIR)/cmake.mk -CMAKE_OPTIONS += -DSOVERSION=$(PKG_ABI_VERSION) +CMAKE_OPTIONS += \ + -DSOVERSION=$(PKG_ABI_VERSION) + +CMAKE_HOST_OPTIONS += \ + -DCMAKE_SKIP_RPATH=FALSE \ + -DCMAKE_INSTALL_RPATH="${STAGING_DIR_HOSTPKG}/lib" + +ifeq ($(HOST_OS),Darwin) + CMAKE_HOST_OPTIONS += \ + -DCMAKE_MACOSX_RPATH=1 +else + CMAKE_HOST_OPTIONS += \ + -DUSE_RPATH="${STAGING_DIR_HOSTPKG}/lib" +endif + CMAKE_HOST_OPTIONS += \ - -DSOVERSION=$(PKG_ABI_VERSION) \ -DFS_SUPPORT=ON \ -DMATH_SUPPORT=ON \ -DNL80211_SUPPORT=OFF \ @@ -35,13 +50,17 @@ CMAKE_HOST_OPTIONS += \ -DSTRUCT_SUPPORT=ON \ -DUBUS_SUPPORT=OFF \ -DUCI_SUPPORT=OFF \ - -DULOOP_SUPPORT=OFF + -DULOOP_SUPPORT=OFF \ + -DDEBUG_SUPPORT=ON \ + -DLOG_SUPPORT=OFF \ + -DDIGEST_SUPPORT=OFF define Package/ucode/default - SECTION:=utils - CATEGORY:=Utilities - TITLE:=ucode - Tiny scripting and templating language + SUBMENU:=ucode + SECTION:=lang + CATEGORY:=Languages + TITLE:=Tiny scripting and templating language endef define Package/ucode @@ -57,7 +76,10 @@ endef define Package/libucode $(Package/ucode/default) - TITLE+= - runtime library + SUBMENU:= + SECTION:=libs + CATEGORY:=Libraries + TITLE+= (library) ABI_VERSION:=$(PKG_ABI_VERSION) DEPENDS:=+libjson-c endef @@ -66,105 +88,29 @@ define Package/libucode/description The libucode package provides the shared runtime library for the ucode interpreter. endef +# 1: name +# 2: cmake symbol +# 3: depends +# 4: description +define UcodeModule + UCODE_MODULES += ucode-mod-$(strip $(1)) + CMAKE_OPTIONS += -D$(strip $(2))=$(if $(CONFIG_PACKAGE_ucode-mod-$(strip $(1))),ON,OFF) + PKG_CONFIG_DEPENDS += CONFIG_PACKAGE_ucode-mod-$(strip $(1)) -define Package/ucode-mod-fs + define Package/ucode-mod-$(strip $(1)) $(Package/ucode/default) - TITLE+= (filesystem module) - DEPENDS:=ucode -endef + TITLE+= ($(strip $(1)) module) + DEPENDS:=+ucode $(3) + endef -define Package/ucode-mod-fs/description - The filesystem plugin module allows interaction with the local file system. -endef + define Package/ucode-mod-$(strip $(1))/description + $(strip $(4)) + endef - -define Package/ucode-mod-math - $(Package/ucode/default) - TITLE+= (math module) - DEPENDS:=ucode -endef - -define Package/ucode-mod-math/description - The math plugin provides access to various procedures. -endef - - -define Package/ucode-mod-nl80211 - $(Package/ucode/default) - TITLE+= (nl80211 module) - DEPENDS:=ucode +libnl-tiny -endef - -define Package/ucode-mod-nl80211/description - The nl80211 plugin provides access to the Linux wireless 802.11 netlink API. -endef - - -define Package/ucode-mod-resolv - $(Package/ucode/default) - TITLE+= (resolv module) - DEPENDS:=ucode -endef - -define Package/ucode-mod-resolv/description - The resolv plugin implements simple DNS resolving. -endef - - -define Package/ucode-mod-rtnl - $(Package/ucode/default) - TITLE+= (rtnl module) - DEPENDS:=ucode +libnl-tiny -endef - -define Package/ucode-mod-rtnl/description - The rtnl plugin provides access to the Linux routing netlink API. -endef - - -define Package/ucode-mod-struct - $(Package/ucode/default) - TITLE+= (struct module) - DEPENDS:=ucode -endef - -define Package/ucode-mod-struct/description - The struct plugin implemnts Python 3 compatible struct.pack/unpack functionality. -endef - - -define Package/ucode-mod-ubus - $(Package/ucode/default) - TITLE+= (ubus module) - DEPENDS:=ucode +libubus +libblobmsg-json -endef - -define Package/ucode-mod-ubus/description - The ubus module allows ucode template scripts to enumerate and invoke ubus - procedures. -endef - - -define Package/ucode-mod-uci - $(Package/ucode/default) - TITLE+= (uci module) - DEPENDS:=ucode +libuci -endef - -define Package/ucode-mod-uci/description - The uci module allows templates to read and modify uci configuration. -endef - - -define Package/ucode-mod-uloop - $(Package/ucode/default) - TITLE+= (uloop module) - DEPENDS:=ucode +libubox -endef - -define Package/ucode-mod-uloop/description - The uloop module allows ucode scripts to interact with OpenWrt uloop event - loop implementation. + define Package/ucode-mod-$(strip $(1))/install + $(INSTALL_DIR) $$(1)/usr/lib/ucode + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/$(strip $(1)).so $$(1)/usr/lib/ucode/ + endef endef @@ -185,60 +131,63 @@ define Package/libucode/install $(CP) $(PKG_INSTALL_DIR)/usr/lib/libucode.so.* $(1)/usr/lib/ endef -define Package/ucode-mod-fs/install - $(INSTALL_DIR) $(1)/usr/lib/ucode - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/fs.so $(1)/usr/lib/ucode/ -endef -define Package/ucode-mod-math/install - $(INSTALL_DIR) $(1)/usr/lib/ucode - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/math.so $(1)/usr/lib/ucode/ -endef +$(eval $(call UcodeModule, \ + debug, DEBUG_SUPPORT, +libubox +libucode, \ + The debug plugin module provides runtime debugging and introspection facilities.)) -define Package/ucode-mod-nl80211/install - $(INSTALL_DIR) $(1)/usr/lib/ucode - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/nl80211.so $(1)/usr/lib/ucode/ -endef +$(eval $(call UcodeModule, \ + fs, FS_SUPPORT, , \ + The filesystem plugin module allows interaction with the local file system.)) -define Package/ucode-mod-resolv/install - $(INSTALL_DIR) $(1)/usr/lib/ucode - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/resolv.so $(1)/usr/lib/ucode/ -endef +$(eval $(call UcodeModule, \ + log, LOG_SUPPORT, +libubox, \ + The log plugin module provides access to the syslog and libubox ulog APIs.)) -define Package/ucode-mod-rtnl/install - $(INSTALL_DIR) $(1)/usr/lib/ucode - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/rtnl.so $(1)/usr/lib/ucode/ -endef +$(eval $(call UcodeModule, \ + math, MATH_SUPPORT, , \ + The math plugin provides access to various procedures.)) -define Package/ucode-mod-struct/install - $(INSTALL_DIR) $(1)/usr/lib/ucode - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/struct.so $(1)/usr/lib/ucode/ -endef +$(eval $(call UcodeModule, \ + nl80211, NL80211_SUPPORT, +libnl-tiny +libubox, \ + The nl80211 plugin provides access to the Linux wireless 802.11 netlink API.)) -define Package/ucode-mod-ubus/install - $(INSTALL_DIR) $(1)/usr/lib/ucode - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/ubus.so $(1)/usr/lib/ucode/ -endef +$(eval $(call UcodeModule, \ + resolv, RESOLV_SUPPORT, , \ + The resolv plugin implements simple DNS resolving.)) -define Package/ucode-mod-uci/install - $(INSTALL_DIR) $(1)/usr/lib/ucode - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/uci.so $(1)/usr/lib/ucode/ -endef +$(eval $(call UcodeModule, \ + rtnl, RTNL_SUPPORT, +libnl-tiny +libubox, \ + The rtnl plugin provides access to the Linux routing netlink API.)) -define Package/ucode-mod-uloop/install - $(INSTALL_DIR) $(1)/usr/lib/ucode - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/uloop.so $(1)/usr/lib/ucode/ -endef +$(eval $(call UcodeModule, \ + socket, SOCKET_SUPPORT, , \ + The socket plugin provides access to IPv4, IPv6, Unix and packet socket APIs.)) + +$(eval $(call UcodeModule, \ + struct, STRUCT_SUPPORT, , \ + The struct plugin implements Python 3 compatible struct.pack/unpack functionality.)) + +$(eval $(call UcodeModule, \ + ubus, UBUS_SUPPORT, +libubus +libblobmsg-json, \ + The ubus module allows ucode template scripts to enumerate and invoke ubus procedures.)) + +$(eval $(call UcodeModule, \ + uci, UCI_SUPPORT, +libuci, \ + The uci module allows templates to read and modify uci configuration.)) + +$(eval $(call UcodeModule, \ + uloop, ULOOP_SUPPORT, +libubox, \ + The uloop module allows ucode scripts to interact with OpenWrt uloop event loop implementation.)) + +$(eval $(call UcodeModule, \ + digest, DIGEST_SUPPORT, , \ + The digest module allows ucode scripts to use libmd digests.)) $(eval $(call BuildPackage,libucode)) $(eval $(call BuildPackage,ucode)) -$(eval $(call BuildPackage,ucode-mod-fs)) -$(eval $(call BuildPackage,ucode-mod-math)) -$(eval $(call BuildPackage,ucode-mod-nl80211)) -$(eval $(call BuildPackage,ucode-mod-resolv)) -$(eval $(call BuildPackage,ucode-mod-rtnl)) -$(eval $(call BuildPackage,ucode-mod-struct)) -$(eval $(call BuildPackage,ucode-mod-ubus)) -$(eval $(call BuildPackage,ucode-mod-uci)) -$(eval $(call BuildPackage,ucode-mod-uloop)) -$(eval $(call HostBuild)) + +$(foreach mod,$(UCODE_MODULES), \ + $(eval $(call BuildPackage,$(mod)))) + +$(eval $(call HostBuild)) \ No newline at end of file diff --git a/lede/target/linux/generic/files/drivers/net/phy/b53/b53_common.c b/lede/target/linux/generic/files/drivers/net/phy/b53/b53_common.c index 3ed70ce31a..34f92abe2d 100644 --- a/lede/target/linux/generic/files/drivers/net/phy/b53/b53_common.c +++ b/lede/target/linux/generic/files/drivers/net/phy/b53/b53_common.c @@ -227,7 +227,7 @@ static void b53_set_vlan_entry(struct b53_device *dev, u16 vid, u16 members, } } -void b53_set_forwarding(struct b53_device *dev, int enable) +static void b53_set_forwarding(struct b53_device *dev, int enable) { u8 mgmt; diff --git a/lede/target/linux/rockchip/files/drivers/phy/rockchip/p3phy.fw b/lede/target/linux/rockchip/files/drivers/phy/rockchip/p3phy.fw new file mode 100644 index 0000000000..301c42837a --- /dev/null +++ b/lede/target/linux/rockchip/files/drivers/phy/rockchip/p3phy.fw @@ -0,0 +1,8192 @@ +0x081D, +0xFFFF, +0x33AF, +0x33AE, +0x0C4F, +0xD10D, +0x0D0F, +0xD306, +0x0C8F, +0xDB06, +0x33AF, +0xD38D, +0x01AC, +0x2000, +0x0C1E, +0x014A, +0x2800, +0x1B80, +0xA0B2, +0x0806, +0x0016, +0x8CC7, +0xD1AE, +0x0C2E, +0x1B75, +0x33AE, +0xA01C, +0x8026, +0x0C2F, +0xD375, +0x33AF, +0x1B81, +0xA022, +0x8026, +0x0D8F, +0x03A6, +0x0003, +0x33AF, +0x0C6F, +0xDBA6, +0x33AF, +0x0C4F, +0xD10D, +0x33AF, +0x0D8F, +0xDBA6, +0x33AF, +0x1B81, +0xA032, +0x8048, +0xDB87, +0x038D, +0x0020, +0xD310, +0x080F, +0x0020, +0xD106, +0x33AF, +0xDB8B, +0xDB8C, +0x1B0F, +0xA03A, +0x0807, +0x0044, +0x33FE, +0x0C01, +0x0C3F, +0x80BA, +0x0C4F, +0xD30E, +0x33AF, +0xD38D, +0x1B82, +0xA04B, +0x8061, +0xDB88, +0x080F, +0x0020, +0xD106, +0x33AF, +0x1B8E, +0xA053, +0x8061, +0x1BA7, +0xA056, +0x8053, +0x0807, +0x005C, +0x33FE, +0x0C01, +0x0C3F, +0x80BA, +0xDB8F, +0x0C2E, +0x1B09, +0xA05D, +0x33AE, +0x1B86, +0xA07B, +0x1B85, +0xA0A7, +0x080E, +0x0200, +0x1BF6, +0x33AE, +0xA074, +0x1B5E, +0xA06D, +0x8077, +0x0C4E, +0x1BF6, +0x33AE, +0xA077, +0x0806, +0x0000, +0x89A4, +0x0C4F, +0xDBF6, +0x33AF, +0x1B2F, +0xA07A, +0x89DF, +0x8000, +0x080F, +0x0020, +0xD106, +0x33AF, +0x0807, +0x0085, +0x33FE, +0x0C01, +0x0C3F, +0x80BA, +0xD35E, +0x038D, +0x0020, +0xD10D, +0x010D, +0x0002, +0x0C8F, +0xDB06, +0x33AF, +0x0D0F, +0xDB06, +0x33AF, +0x0C2E, +0x1919, +0xA095, +0x8092, +0x33AE, +0x0C8F, +0xD306, +0x33AF, +0x0C2E, +0x1919, +0xA09D, +0x33AE, +0x0D0F, +0xD306, +0x33AF, +0xD10D, +0xD38D, +0xDB10, +0xDB8C, +0xDB8B, +0xD310, +0x8000, +0xDB8B, +0xD35E, +0x0806, +0x0000, +0x1B28, +0xA995, +0x0806, +0x0000, +0x038D, +0x0020, +0x86F1, +0xD380, +0x1B59, +0xA19E, +0x80C8, +0x0C4F, +0xD3F6, +0x33AF, +0x080E, +0x01FC, +0x1BF6, +0x33AE, +0xA0C3, +0x080F, +0x01FC, +0x03F6, +0x0032, +0x33AF, +0x0806, +0x0157, +0x1B27, +0xA641, +0x822B, +0x0367, +0x003F, +0x0368, +0x0C09, +0x0369, +0x7928, +0xD36A, +0x036B, +0x007F, +0x036C, +0x0C13, +0x036D, +0x7803, +0xD36E, +0x037C, +0x003F, +0x037D, +0x0C01, +0x037E, +0x7818, +0xD37F, +0x03E0, +0x007F, +0x03E1, +0x0C2F, +0x03E2, +0x7828, +0x03E3, +0x36DC, +0x03E4, +0x007F, +0x03E5, +0x0C09, +0x03E6, +0x7818, +0x03E7, +0x124A, +0x080E, +0xFF00, +0x191E, +0x33AE, +0x080F, +0x00FF, +0x291D, +0x0CCF, +0xD11D, +0x080F, +0x0100, +0xD91D, +0x33AF, +0x0C2F, +0xD375, +0x33AF, +0x0349, +0x0017, +0x0353, +0x0017, +0x1B4A, +0x29B4, +0xD9B8, +0x0229, +0x1060, +0x022A, +0x0E24, +0x080E, +0x4000, +0x1B09, +0xA108, +0x0C2E, +0x1B02, +0xA10C, +0x33AE, +0xD317, +0x1B29, +0xA115, +0x705E, +0x8115, +0x1B2D, +0xA118, +0x811A, +0x014B, +0x2DAB, +0x1B2E, +0xA11D, +0x811F, +0x014C, +0x004B, +0x1B2A, +0xA123, +0x0125, +0x065A, +0x1B2B, +0xA126, +0x8128, +0x0127, +0x0D07, +0x0063, +0x7F00, +0x0073, +0x7F00, +0x1A28, +0xA145, +0xDA28, +0x1B29, +0xA137, +0x0060, +0x0008, +0x0070, +0x0008, +0xDBA8, +0x8140, +0x0C2F, +0xD881, +0x080F, +0xFFFF, +0xDBA8, +0x0061, +0x0018, +0x0071, +0x0018, +0x0301, +0x0F05, +0x03A0, +0x0007, +0x8147, +0x0301, +0x0F05, +0x1B2C, +0xA14C, +0x0144, +0x0100, +0x8152, +0x080F, +0x0200, +0xD944, +0x33AF, +0x0145, +0x6DB4, +0x0306, +0x0006, +0x1B0F, +0xA154, +0x80B6, +0x0305, +0x000C, +0x0306, +0x0007, +0x0317, +0x0003, +0x0306, +0x0006, +0x1B0F, +0xA15F, +0x0306, +0x0004, +0xDB87, +0x1A28, +0x5C6D, +0xA168, +0x816E, +0x13A3, +0x5CEC, +0xA168, +0x0228, +0x0003, +0x816E, +0x0C2E, +0x1A11, +0x33AE, +0xA177, +0x1867, +0x080C, +0x0100, +0x518D, +0x2B54, +0x0C4E, +0x1A11, +0x33AE, +0xA180, +0x1877, +0x080C, +0x0100, +0x518D, +0x2B55, +0x1867, +0x2868, +0x1877, +0x2878, +0x1886, +0x2B56, +0x1888, +0x2B58, +0x1887, +0x2B57, +0x0060, +0x0018, +0x0070, +0x0018, +0xDA12, +0xD3A0, +0xD3A8, +0xDB59, +0x7005, +0x0C4F, +0xD081, +0x080F, +0xFFFF, +0x0C8F, +0xD303, +0x33AF, +0x0C4F, +0xD30E, +0x33AF, +0x8000, +0x1B54, +0x2868, +0x1B55, +0x2878, +0x705E, +0x1B2D, +0xA1A6, +0x81A8, +0x014B, +0x2DAB, +0x1B2E, +0xA1AB, +0x81AD, +0x014C, +0x004B, +0x1B29, +0xA1B0, +0x81B8, +0x0C2F, +0xD881, +0x080F, +0xFFFF, +0x0061, +0x0018, +0x0071, +0x0018, +0x1B56, +0x2883, +0x1B58, +0x2885, +0x1B57, +0x2884, +0x0301, +0x0F05, +0xD9AE, +0x01AD, +0x0080, +0xD1AF, +0xD9B6, +0x1B40, +0x29AD, +0xD9AF, +0xD9B6, +0x1B41, +0x29AD, +0x01AF, +0x0002, +0xD9B6, +0x1B42, +0x29AD, +0x01AF, +0x0003, +0xD9B6, +0x1B45, +0x29AD, +0x01AF, +0x0014, +0xD9B6, +0x1B46, +0x29AD, +0x01AF, +0x0015, +0xD9B6, +0x01A8, +0x0140, +0x1B4B, +0x2973, +0x1B4C, +0x2974, +0x1B51, +0x2979, +0x1B4D, +0x2975, +0x1B4E, +0x2976, +0x1B52, +0x297A, +0x1BF2, +0x5C6D, +0xA1F1, +0x0C4F, +0xD9BA, +0x33AF, +0x0C8E, +0x1B24, +0x33AE, +0xA1F6, +0x81F9, +0x0C2F, +0xD9BA, +0x33AF, +0x1B4F, +0x080F, +0xFF00, +0x297F, +0x080F, +0xFFFF, +0x1B50, +0x080F, +0x00FF, +0x297F, +0x080F, +0xFFFF, +0x1B4A, +0x29B4, +0xD9B8, +0xD1AE, +0xD1A8, +0x018E, +0x0019, +0x0305, +0x000C, +0xD306, +0x1B0F, +0xA20F, +0x1B2C, +0xA214, +0x821A, +0x080F, +0x0200, +0xD944, +0x33AF, +0x0145, +0x6DB4, +0x1B04, +0xA21A, +0x1B2A, +0xA220, +0x0125, +0x065A, +0x1B2B, +0xA223, +0x8225, +0x0127, +0x0D07, +0xDA12, +0x0229, +0x1060, +0x022A, +0xE24 , +0x8193, +0x01A8, +0x0140, +0x0100, +0x0004, +0x018E, +0x0019, +0xD9AE, +0xD9B6, +0x01B0, +0x0B37, +0x01B1, +0x00FA, +0xD9B7, +0x0180, +0x03FF, +0xD981, +0xD182, +0xD183, +0x0184, +0x4000, +0x0185, +0x2408, +0x1B31, +0xA254, +0x01A8, +0x0140, +0xD1B5, +0x01AC, +0xA060, +0xD9AF, +0x0340, +0x0080, +0x0800, +0x0340, +0x01AD, +0x0080, +0xD9B6, +0x0807, +0x0254, +0x0C03, +0x864B, +0x1B31, +0xA268, +0x01A8, +0x0140, +0xD1B5, +0x01AC, +0xA080, +0x01AF, +0x0002, +0x0341, +0x0080, +0x0800, +0x0341, +0x01AD, +0x0080, +0xD9B6, +0x0807, +0x0268, +0x0C03, +0x864B, +0x01B1, +0x0062, +0xD9B7, +0x1B31, +0xA27E, +0x01A8, +0x0140, +0xD1B5, +0x01AC, +0xA080, +0xD9AF, +0x0340, +0x0080, +0x0800, +0x0340, +0x01AD, +0x0080, +0xD9B6, +0x0807, +0x027E, +0x0C03, +0x864B, +0x1B31, +0xA292, +0x01A8, +0x0140, +0xD1B5, +0x01AC, +0xA0C0, +0x01AF, +0x0003, +0x0342, +0x0080, +0x0800, +0x0342, +0x01AD, +0x0080, +0xD9B6, +0x0807, +0x0292, +0x0C03, +0x864B, +0x080E, +0xF800, +0x1B0C, +0x31A1, +0x080E, +0x07FF, +0x1B0C, +0x31A2, +0xD11D, +0x0CEE, +0x1B0D, +0x31A3, +0x33AE, +0x304D, +0x080F, +0x07FF, +0x29B0, +0x33AF, +0x302D, +0x080F, +0x00F8, +0x29B1, +0x33AF, +0x306D, +0x0CEF, +0x29B1, +0x33AF, +0xD9B7, +0x0C2E, +0x1BF6, +0x33AE, +0xA2CD, +0x0180, +0x03FF, +0xD981, +0xD182, +0xD183, +0x0184, +0x4000, +0x0185, +0x2408, +0x01A8, +0x0140, +0xD1B5, +0x01AC, +0xB080, +0x01AF, +0x0002, +0x03F7, +0x0080, +0x0800, +0x03F7, +0x01AD, +0x0080, +0xD9B6, +0x0807, +0x02CD, +0x0C03, +0x864B, +0x0C8E, +0x1BF4, +0x33AE, +0xA2EC, +0x0180, +0x03FF, +0xD981, +0xD182, +0xD183, +0x0184, +0x4000, +0x0185, +0x2408, +0x01A8, +0x0140, +0xD1B5, +0x01AC, +0xB0C0, +0x01AF, +0x0003, +0x03EC, +0x0080, +0x0800, +0x03EC, +0x01AD, +0x0080, +0xD9B6, +0x0807, +0x02EC, +0x0C03, +0x864B, +0x01B3, +0x0177, +0xD3F2, +0x0C2E, +0x1BF4, +0x33AE, +0xA313, +0x0180, +0x01FF, +0x0181, +0xAAAA, +0x0182, +0x2800, +0xD183, +0x0184, +0x6C00, +0x0185, +0x2408, +0x0807, +0x0301, +0x8DC7, +0x01A8, +0x0140, +0xD1B5, +0x01AC, +0x3000, +0x01AF, +0x0016, +0x0179, +0x0080, +0x0800, +0x0179, +0x01AD, +0x0080, +0xD9B6, +0x0807, +0x0313, +0x0C23, +0x864B, +0x0800, +0x0179, +0x3801, +0x0802, +0x003F, +0x0803, +0x00C0, +0x5461, +0xB31F, +0x5422, +0xB31F, +0x8329, +0x0C4E, +0x19BA, +0x33AE, +0xA329, +0x1B33, +0xA329, +0x0C4F, +0xD9BA, +0x33AF, +0x82EF, +0x0C2E, +0x1BF4, +0x33AE, +0xA34D, +0x0180, +0x01FF, +0x0181, +0x5555, +0x0182, +0x1400, +0xD183, +0x0184, +0x6C00, +0x0185, +0x2408, +0x0807, +0x033B, +0x8E5B, +0x01A8, +0x0140, +0xD1B5, +0x01AC, +0x3000, +0x01AF, +0x0018, +0x017A, +0x0080, +0x0800, +0x017A, +0x01AD, +0x0080, +0xD9B6, +0x0807, +0x034D, +0x0C23, +0x864B, +0x0800, +0x017A, +0x3801, +0x0802, +0x003F, +0x0803, +0x00C0, +0x5461, +0xB359, +0x5422, +0xB359, +0x8363, +0x0C4E, +0x19BA, +0x33AE, +0xA363, +0x1B33, +0xA363, +0x0C4F, +0xD9BA, +0x33AF, +0x82EF, +0x080E, +0x0400, +0x1B6F, +0x33AE, +0xA38D, +0x0C4E, +0x19BA, +0x33AE, +0xA38B, +0x0800, +0x009B, +0x1979, +0x31A1, +0x197A, +0x31A2, +0x5420, +0xB375, +0x8379, +0x5440, +0xB379, +0xDBF2, +0x838D, +0x5420, +0xB381, +0x5440, +0xB37E, +0x8381, +0x03F2, +0x0002, +0x838D, +0x5420, +0xB38D, +0x5440, +0xB38D, +0x03F2, +0x0003, +0x0C4F, +0xD9BA, +0x33AF, +0x82EF, +0x03F2, +0x0003, +0x1BF2, +0x5C6D, +0xA395, +0x03ED, +0x0025, +0x03EE, +0x0025, +0x8399, +0x03ED, +0x0037, +0x03EE, +0x0037, +0x1B32, +0xA3BB, +0x0180, +0x01FF, +0x0181, +0xAAAA, +0x0182, +0x2800, +0xD183, +0x0184, +0x7000, +0x0185, +0x2408, +0x0807, +0x03A9, +0x8D7D, +0x01A8, +0x0140, +0xD1B5, +0x01AC, +0x3000, +0x01AF, +0x0010, +0x0173, +0x0080, +0x0800, +0x0173, +0x01AD, +0x0080, +0xD9B6, +0x0807, +0x03BB, +0x0C23, +0x864B, +0x0800, +0x0173, +0x3801, +0x0802, +0x003F, +0x0803, +0x00C0, +0x5423, +0xB3C5, +0x83C7, +0x5441, +0xB3D1, +0x0C4E, +0x19BA, +0x33AE, +0xA3D1, +0x1B33, +0xA3D1, +0x0C4F, +0xD9BA, +0x33AF, +0x82EF, +0x1B32, +0xA3F3, +0x0180, +0x01FF, +0x0181, +0xAAAA, +0x0182, +0x2800, +0xD183, +0x0184, +0x7000, +0x0185, +0x2408, +0x0807, +0x03E1, +0x8DA1, +0x01A8, +0x0140, +0xD1B5, +0x01AC, +0x3000, +0x01AF, +0x0011, +0x0174, +0x0080, +0x0800, +0x0174, +0x01AD, +0x0080, +0xD9B6, +0x0807, +0x03F3, +0x0C23, +0x864B, +0x0800, +0x0174, +0x3801, +0x0802, +0x003F, +0x0803, +0x00C0, +0x5423, +0xB3FD, +0x83FF, +0x5441, +0xB409, +0x0C4E, +0x19BA, +0x33AE, +0xA409, +0x1B33, +0xA409, +0x0C4F, +0xD9BA, +0x33AF, +0x82EF, +0x1B32, +0xA42B, +0x0180, +0x01FF, +0x0181, +0x5555, +0x0182, +0x1400, +0xD183, +0x0184, +0x7000, +0x0185, +0x2408, +0x0807, +0x0419, +0x8E11, +0x01A8, +0x0140, +0xD1B5, +0x01AC, +0x3000, +0x01AF, +0x0012, +0x0175, +0x0080, +0x0800, +0x0175, +0x01AD, +0x0080, +0xD9B6, +0x0807, +0x042B, +0x0C23, +0x864B, +0x0800, +0x0175, +0x3801, +0x0802, +0x003F, +0x0803, +0x00C0, +0x5423, +0xB435, +0x8437, +0x5441, +0xB441, +0x0C4E, +0x19BA, +0x33AE, +0xA441, +0x1B33, +0xA441, +0x0C4F, +0xD9BA, +0x33AF, +0x82EF, +0x1B32, +0xA463, +0x0180, +0x01FF, +0x0181, +0x5555, +0x0182, +0x1400, +0xD183, +0x0184, +0x7000, +0x0185, +0x2408, +0x0807, +0x0451, +0x8E35, +0x01A8, +0x0140, +0xD1B5, +0x01AC, +0x3000, +0x01AF, +0x0013, +0x0176, +0x0080, +0x0800, +0x0176, +0x01AD, +0x0080, +0xD9B6, +0x0807, +0x0463, +0x0C23, +0x864B, +0x0800, +0x0176, +0x3801, +0x0802, +0x003F, +0x0803, +0x00C0, +0x5423, +0xB46D, +0x846F, +0x5441, +0xB479, +0x0C4E, +0x19BA, +0x33AE, +0xA479, +0x1B33, +0xA479, +0x0C4F, +0xD9BA, +0x33AF, +0x82EF, +0x0C8F, +0xD324, +0x33AF, +0x1B3D, +0xA49E, +0x0180, +0x01FF, +0x0181, +0xAAAA, +0x0182, +0x2800, +0xD183, +0x0184, +0x6800, +0x0185, +0x2408, +0x0807, +0x048C, +0x8DEC, +0x01A8, +0x0140, +0xD1B5, +0x01AC, +0x3000, +0x01AF, +0x0014, +0x0345, +0x0080, +0x0800, +0x0345, +0x01AD, +0x0080, +0xD9B6, +0x0807, +0x049E, +0x0C23, +0x864B, +0x1B3D, +0xA4C0, +0x0180, +0x01FF, +0x0181, +0x5555, +0x0182, +0x1400, +0xD183, +0x0184, +0x6800, +0x0185, +0x2408, +0x0807, +0x04AE, +0x8E80, +0x01A8, +0x0140, +0xD1B5, +0x01AC, +0x3000, +0x01AF, +0x0015, +0x0346, +0x0080, +0x0800, +0x0346, +0x01AD, +0x0080, +0xD9B6, +0x0807, +0x04C0, +0x0C23, +0x864B, +0x1B3E, +0xA4DD, +0x0800, +0x00FB, +0x1B45, +0x31A1, +0x1B46, +0x31A2, +0x5401, +0xB4D2, +0x5402, +0xB4D2, +0x0C80, +0x5420, +0xB4D2, +0x5440, +0xB4D2, +0x84DD, +0x0C2E, +0x19BA, +0x33AE, +0xA4DD, +0x0C8F, +0xDB24, +0x33AF, +0x0C2F, +0xD9BA, +0x33AF, +0x847C, +0x0C4E, +0x1BF4, +0x33AE, +0xA508, +0x0180, +0x01FF, +0x0181, +0xAAAA, +0x0182, +0x2800, +0xD183, +0x0184, +0x7000, +0x0185, +0x2408, +0x01A8, +0x0140, +0xD1B5, +0x01AC, +0x3000, +0x01AF, +0x0010, +0x0807, +0x04F6, +0x8EA5, +0x01A8, +0x0100, +0xD1B5, +0x01AC, +0x3000, +0x01AF, +0x0010, +0x034F, +0x0080, +0x0800, +0x034F, +0x01AD, +0x0080, +0xD9B6, +0x0807, +0x0508, +0x0C23, +0x864B, +0x1B4F, +0x080F, +0xFF00, +0x297F, +0x080F, +0xFFFF, +0x0C4E, +0x1BF4, +0x33AE, +0xA539, +0x0180, +0x01FF, +0x0181, +0x5555, +0x0182, +0x1400, +0xD183, +0x0184, +0x7000, +0x0185, +0x2408, +0x01A8, +0x0140, +0xD1B5, +0x01AC, +0x3000, +0x01AF, +0x0012, +0x0807, +0x0527, +0x8EC9, +0x01A8, +0x0100, +0xD1B5, +0x01AC, +0x3000, +0x01AF, +0x0012, +0x0350, +0x0080, +0x0800, +0x0350, +0x01AD, +0x0080, +0xD9B6, +0x0807, +0x0539, +0x0C23, +0x864B, +0x1B50, +0x080F, +0x00FF, +0x297F, +0x080F, +0xFFFF, +0x0C2E, +0x1B6F, +0x33AE, +0xA5CF, +0x0CEE, +0x1B0C, +0x33AE, +0x0800, +0x0080, +0x51A0, +0x080F, +0x07FF, +0x29B0, +0x33AF, +0xD9B7, +0x0800, +0x0080, +0x1BED, +0x51A0, +0x2969, +0x31A0, +0x01AF, +0x0016, +0x21AD, +0xD9B6, +0x0180, +0x03FF, +0xD981, +0xD182, +0xD183, +0x0184, +0x4000, +0x0185, +0x2408, +0x01A8, +0x0100, +0xD1B5, +0x01AC, +0x9346, +0x01AF, +0x001B, +0x03FC, +0x0080, +0x0800, +0x03FC, +0x01AD, +0x0080, +0xD9B6, +0x0807, +0x0573, +0x0C23, +0x864B, +0x01A8, +0x0100, +0xD1B5, +0x01AC, +0x90DA, +0x01AF, +0x0003, +0x03FD, +0x0080, +0x0800, +0x03FD, +0x01AD, +0x0080, +0xD9B6, +0x0807, +0x0585, +0x0C03, +0x864B, +0x0180, +0x01FF, +0x0181, +0xAAAA, +0x0182, +0x2800, +0xD183, +0x0184, +0x6C00, +0x0185, +0x2408, +0x0807, +0x0593, +0x8DC7, +0x01A8, +0x0140, +0xD1B5, +0x01AC, +0x3000, +0x01AF, +0x0016, +0x03ED, +0x0080, +0x0800, +0x03ED, +0x01AD, +0x0080, +0xD9B6, +0x0807, +0x05A5, +0x0C23, +0x864B, +0x0180, +0x01FF, +0x0181, +0x5555, +0x0182, +0x1400, +0xD183, +0x0184, +0x6C00, +0x0185, +0x2408, +0x0807, +0x05B3, +0x8E5B, +0x01A8, +0x0140, +0xD1B5, +0x01AC, +0x3000, +0x01AF, +0x0018, +0x03EE, +0x0080, +0x0800, +0x03EE, +0x01AD, +0x0080, +0xD9B6, +0x0807, +0x05C5, +0x0C23, +0x864B, +0x1BEE, +0x31A0, +0x1BED, +0x31A1, +0x197A, +0x55A0, +0x2BEE, +0x1979, +0x55A1, +0x2BED, +0x080E, +0x07F8, +0x1B0C, +0x33AE, +0x080F, +0x07F8, +0x29B0, +0x33AF, +0xD9B7, +0x080F, +0x0800, +0xD1B0, +0x33AF, +0xD9B7, +0x01A8, +0x0140, +0x1973, +0x29AD, +0x01AF, +0x0010, +0xD9B6, +0x1974, +0x29AD, +0x01AF, +0x0011, +0xD9B6, +0x1979, +0x29AD, +0x01AF, +0x0016, +0xD9B6, +0x1B45, +0x29AD, +0x01AF, +0x0014, +0xD9B6, +0x1975, +0x29AD, +0x01AF, +0x0012, +0xD9B6, +0x1976, +0x29AD, +0x01AF, +0x0013, +0xD9B6, +0x197A, +0x29AD, +0x01AF, +0x0018, +0xD9B6, +0x1B46, +0x29AD, +0x01AF, +0x0015, +0xD9B6, +0x1973, +0x2B4B, +0x1974, +0x2B4C, +0x1979, +0x2B51, +0x080F, +0xFF00, +0x2BEF, +0x080F, +0x00FF, +0x2BEF, +0x33AF, +0x1975, +0x2B4D, +0x1976, +0x2B4E, +0x197A, +0x2B52, +0x080F, +0xFF00, +0x2BF0, +0x080F, +0x00FF, +0x2BF0, +0x33AF, +0x01A8, +0x0100, +0x1B4F, +0x29AD, +0x01AF, +0x0010, +0xD9B6, +0x1B50, +0x29AD, +0x01AF, +0x0012, +0xD9B6, +0x1B41, +0x29AD, +0x01AF, +0x0002, +0xD9B6, +0x1B42, +0x29AD, +0x01AF, +0x0003, +0xD9B6, +0x33FE, +0x0C3F, +0x804B, +0xD1AC, +0x01B3, +0x0077, +0xD100, +0xD1A8, +0xD1AE, +0x8646, +0x33FE, +0x0C3F, +0x804D, +0xD1A8, +0xD9B6, +0x080F, +0x0400, +0xD185, +0x33AF, +0x9006, +0x0804, +0x0040, +0x5C03, +0xA650, +0x8653, +0x0CE1, +0x7080, +0x8655, +0x0CC1, +0x7080, +0x6660, +0x0C42, +0x5443, +0xB65B, +0x6260, +0x8678, +0xA669, +0x080E, +0x7FFF, +0x198A, +0x33AE, +0x31A2, +0x4022, +0x080E, +0x7FFF, +0x1986, +0x33AE, +0x426D, +0x55A2, +0x8678, +0x080E, +0x7FFF, +0x1986, +0x33AE, +0x31A2, +0x4022, +0x426D, +0x55A2, +0x31A2, +0x080E, +0x7FFF, +0x198A, +0x33AE, +0x402D, +0x544D, +0xB680, +0x0C02, +0x55A2, +0x31A5, +0x380D, +0x3802, +0x548D, +0x8686, +0x31A5, +0x3802, +0xA684, +0x8691, +0x380D, +0x508D, +0x35A0, +0x29AD, +0xD9B6, +0x5C03, +0xA68E, +0x0C37, +0x700F, +0x8693, +0x0C17, +0x700F, +0x8693, +0x31A5, +0x3802, +0x4224, +0x5C21, +0xA655, +0x0C81, +0x6660, +0x0C44, +0x5483, +0xB69D, +0x6260, +0x86BA, +0xA6AB, +0x080E, +0x7FFF, +0x198A, +0x33AE, +0x31A4, +0x4024, +0x080E, +0x7FFF, +0x1986, +0x33AE, +0x426D, +0x55A4, +0x86BA, +0x080E, +0x7FFF, +0x1986, +0x33AE, +0x31A4, +0x4024, +0x426D, +0x55A4, +0x31A4, +0x080E, +0x7FFF, +0x198A, +0x33AE, +0x402D, +0x548D, +0x31A4, +0xB6CD, +0x0C04, +0x55A4, +0x31A4, +0x54A4, +0xB6C3, +0x3085, +0x3802, +0x32ED, +0xA6C8, +0x380D, +0x5C2D, +0x86CA, +0x380D, +0x5C4D, +0x31A4, +0xB6DB, +0x86EF, +0x54A4, +0xB6D1, +0x3085, +0x3802, +0x32ED, +0xA6D6, +0x380D, +0x582D, +0x86D8, +0x380D, +0x584D, +0x31A4, +0x430D, +0xA6EF, +0x5C21, +0xA6E4, +0x3804, +0x5482, +0xA6E1, +0x86EF, +0x3440, +0x304D, +0x86E6, +0x3480, +0x308D, +0x29AD, +0xD9B6, +0x5C03, +0xA6EC, +0x700F, +0x86ED, +0x700F, +0x5C01, +0xA697, +0x33DF, +0x9007, +0x1B36, +0xA709, +0xD35E, +0x038D, +0x0030, +0xD10D, +0x010D, +0x0002, +0x0306, +0x000C, +0x0C2E, +0x1919, +0x33AE, +0xA700, +0x86FB, +0x0306, +0x0008, +0x0C2E, +0x1919, +0x33AE, +0xA702, +0x0305, +0x000C, +0xD10D, +0x038D, +0x0030, +0x1B38, +0xA711, +0x080F, +0x0080, +0xD37B, +0x33AF, +0xD38D, +0x1B38, +0xA716, +0x0C6C, +0x871E, +0x1B34, +0xA71D, +0x080E, +0x01E0, +0x131C, +0x33AE, +0x871E, +0x0C0C, +0x33FE, +0x0C3F, +0x8946, +0x1B49, +0x2B47, +0x038D, +0x0030, +0xD1A8, +0xD161, +0x0162, +0x0042, +0x0163, +0x0060, +0xD164, +0xD165, +0x0167, +0x21A2, +0x1BEE, +0x2BCD, +0x1BED, +0x2BCC, +0x13CD, +0x1B52, +0x518D, +0x31AC, +0x430D, +0xA73B, +0x318D, +0x873D, +0x080D, +0x00FF, +0x31A1, +0x080F, +0xFF00, +0x2969, +0x33AF, +0x13CC, +0x1B51, +0x518D, +0x31AC, +0x430D, +0xA74A, +0x318D, +0x874C, +0x080D, +0x00FF, +0x31A1, +0x080F, +0x00FF, +0x2969, +0x33AF, +0x0181, +0xFFFF, +0x0182, +0x3C02, +0x0183, +0x0800, +0x0184, +0x7060, +0x0185, +0x2402, +0x1B67, +0x2980, +0x1B68, +0x2960, +0x1B69, +0x2966, +0x1B6A, +0x2968, +0x1B36, +0xA76B, +0x0807, +0x076A, +0x33FE, +0x0C1F, +0x89C5, +0x6C00, +0xD162, +0x0163, +0x001F, +0x0182, +0x3C23, +0x0183, +0x0087, +0x0184, +0x7068, +0x0185, +0x247C, +0x1B6B, +0x2980, +0x1B6C, +0x2960, +0x1B6D, +0x2966, +0x1B6E, +0x2968, +0x1B36, +0xA781, +0x6C00, +0x0182, +0x3C02, +0x0183, +0x0800, +0x0184, +0x7060, +0x0185, +0x2402, +0x0162, +0x0042, +0x0163, +0x0060, +0x0167, +0x39C0, +0x1B7C, +0x2980, +0x1B7D, +0x2960, +0x1B7E, +0x2966, +0x1B7F, +0x2968, +0x1B36, +0xA7E0, +0x0807, +0x079E, +0x33FE, +0x0C1F, +0x89C5, +0x6C00, +0x080E, +0x4000, +0x1B6F, +0x33AE, +0xA7E0, +0x080E, +0x03C0, +0x196C, +0x33AE, +0x5CED, +0xB7E0, +0x0180, +0x01FF, +0x080F, +0x03E0, +0x0182, +0x0002, +0x33AF, +0x6620, +0xB7B4, +0x87E0, +0xA7B6, +0x87E0, +0x080F, +0x3FFF, +0xD160, +0x33AF, +0x080F, +0x0038, +0x0166, +0x0005, +0x33AF, +0x080E, +0x03C0, +0x196C, +0x33AE, +0x402D, +0x31A0, +0x080E, +0x003F, +0x196C, +0x33AE, +0xA7CC, +0x5820, +0x87CD, +0x5840, +0x31A0, +0x080F, +0x7C00, +0x2167, +0x080F, +0x03E0, +0x2167, +0x33AF, +0x1169, +0x3181, +0x080F, +0x1000, +0xD166, +0x33AF, +0x0169, +0xFFFF, +0x6C00, +0x302D, +0x2969, +0x1969, +0x2BF7, +0x080E, +0x0020, +0x1B6F, +0x33AE, +0xA7EA, +0x33FE, +0x0C3F, +0x8BA3, +0x080F, +0x7C00, +0xD3F6, +0x33AF, +0xD3F8, +0xD3F9, +0xD3FA, +0x080E, +0x8000, +0x1BF6, +0x33AE, +0xA891, +0x0CC0, +0x0D61, +0x0C22, +0x0C23, +0x0804, +0x00F5, +0x0807, +0x0801, +0x33FE, +0x0C3F, +0x89E6, +0x31B8, +0x080F, +0xFF00, +0x2BF8, +0x33AF, +0x0CC0, +0x0D61, +0x0C22, +0x0C23, +0x0804, +0x00F5, +0x0807, +0x0811, +0x33FE, +0x0C3F, +0x8A57, +0x31B9, +0x080F, +0x00FF, +0x2BF8, +0x33AF, +0x0C40, +0x0D61, +0x0C22, +0x0C23, +0x0804, +0x00F5, +0x0807, +0x0821, +0x33FE, +0x0C3F, +0x89E6, +0x31BA, +0x080F, +0xFF00, +0x2BF9, +0x33AF, +0x0C40, +0x0D61, +0x0C22, +0x0C23, +0x0804, +0x00F5, +0x0807, +0x0831, +0x33FE, +0x0C3F, +0x8A57, +0x31BB, +0x080F, +0x00FF, +0x2BF9, +0x33AF, +0x0807, +0x083B, +0x33FE, +0x0C3F, +0x8AC8, +0x080E, +0x0400, +0x1BF6, +0x33AE, +0xA841, +0x8891, +0x080E, +0x6000, +0x1BF6, +0x33AE, +0x5C2D, +0xA848, +0x8868, +0x0CC0, +0x0C61, +0x0D02, +0x0C03, +0x0804, +0x00FF, +0x0807, +0x0853, +0x33FE, +0x0C3F, +0x89E6, +0x31B8, +0x080F, +0xFF00, +0x2BFA, +0x33AF, +0x0C80, +0x0D61, +0x0D02, +0x0C03, +0x0C04, +0x0807, +0x0862, +0x33FE, +0x0C3F, +0x89E6, +0x31BA, +0x080F, +0x00FF, +0x2BFA, +0x33AF, +0x8887, +0x0CC0, +0x0C61, +0x0D02, +0x0C03, +0x0804, +0x00FF, +0x0807, +0x0873, +0x33FE, +0x0C3F, +0x8A57, +0x31B9, +0x080F, +0xFF00, +0x2BFA, +0x33AF, +0x0C80, +0x0D61, +0x0D02, +0x0C03, +0x0C04, +0x0807, +0x0882, +0x33FE, +0x0C3F, +0x8A57, +0x31BB, +0x080F, +0x00FF, +0x2BFA, +0x33AF, +0x0807, +0x088C, +0x33FE, +0x0C3F, +0x8B11, +0x0807, +0x0891, +0x33FE, +0x0C3F, +0x8B34, +0x080E, +0x0400, +0x1BF6, +0x33AE, +0xA8E9, +0x0181, +0xFFFF, +0x0182, +0x3C06, +0x0183, +0x0800, +0x0184, +0x7060, +0x0185, +0x247E, +0x0161, +0x0009, +0x0162, +0x00C2, +0x0163, +0x7F80, +0xD164, +0xD165, +0x0167, +0x21A2, +0x1BF7, +0x2969, +0x1BE0, +0x2980, +0x1BE1, +0x2960, +0x1BE2, +0x2966, +0x1BE3, +0x2968, +0x1B37, +0xA8E9, +0x0807, +0x08BB, +0x33FE, +0x0C1F, +0x89C5, +0x6C00, +0x080E, +0xFF00, +0x197B, +0x33AE, +0x31A1, +0x080E, +0x4000, +0x1963, +0x33AE, +0xA8C7, +0x88D0, +0x0807, +0x08CA, +0x8D52, +0x31A2, +0xA8CE, +0x5461, +0x88CF, +0x5061, +0x31A1, +0x1351, +0x302D, +0x558D, +0x2BCC, +0x080E, +0x00FF, +0x197B, +0x33AE, +0x31A1, +0x080E, +0x4000, +0x1963, +0x33AE, +0xA8DF, +0x88E5, +0x304D, +0xA8E3, +0x5461, +0x88E4, +0x5061, +0x31A1, +0x1352, +0x302D, +0x558D, +0x2BCD, +0x33FE, +0x0C3F, +0x86CB, +0x0182, +0x3C06, +0x0183, +0x0800, +0x0185, +0x247E, +0x0163, +0x7F80, +0x1BE4, +0x2980, +0x1BE5, +0x2960, +0x1BE6, +0x2966, +0x1BE7, +0x2968, +0x080E, +0x0400, +0x1BF6, +0x33AE, +0xA902, +0x891D, +0x080F, +0x0F80, +0x0163, +0x001E, +0x33AF, +0x080E, +0x0800, +0x1BF6, +0x33AE, +0xA912, +0x080E, +0x1000, +0x1BF6, +0x33AE, +0xA918, +0x891D, +0x080F, +0x03E0, +0x0182, +0x0002, +0x33AF, +0x891D, +0x080F, +0x03E0, +0x0182, +0x0006, +0x33AF, +0x1B37, +0xA962, +0x13CD, +0x410C, +0x1BCC, +0x518D, +0x31A1, +0x1352, +0x410C, +0x502C, +0x31A2, +0x1352, +0x410C, +0x502C, +0x31A2, +0x1351, +0x504C, +0x2969, +0x0807, +0x0934, +0x33FE, +0x0C1F, +0x89C5, +0x6C00, +0x080E, +0xFF00, +0x197B, +0x33AE, +0x31A1, +0x080E, +0x4000, +0x1963, +0x33AE, +0xA940, +0x8949, +0x0807, +0x0943, +0x8D52, +0x31A2, +0xA947, +0x5461, +0x8948, +0x5061, +0x31A1, +0x1351, +0x302D, +0x558D, +0x2BCC, +0x080E, +0x00FF, +0x197B, +0x33AE, +0x31A1, +0x080E, +0x4000, +0x1963, +0x33AE, +0xA958, +0x895E, +0x304D, +0xA95C, +0x5461, +0x895D, +0x5061, +0x31A1, +0x1352, +0x302D, +0x558D, +0x2BCD, +0x080E, +0x0020, +0x1B6F, +0x33AE, +0xA96A, +0x33FE, +0x0C3F, +0x8C25, +0x080E, +0x0020, +0x1B6F, +0x33AE, +0xA976, +0x33FE, +0x0C3F, +0x8D47, +0x2BCB, +0x13CB, +0x3180, +0x2311, +0x33FE, +0x0C3F, +0x80F0, +0x038D, +0x0030, +0xDB5E, +0x1B38, +0xA982, +0x080F, +0x0080, +0xDB7B, +0x33AF, +0xD10D, +0x010D, +0x0002, +0x0306, +0x000C, +0x0C2E, +0x1919, +0x33AE, +0xA98C, +0x8987, +0xD306, +0x0C2E, +0x1919, +0x33AE, +0xA98D, +0x0305, +0x000C, +0xD10D, +0x8998, +0x038D, +0x0030, +0xDB5E, +0xD38D, +0xDB10, +0x1B86, +0xA99D, +0x899A, +0xD310, +0xDB8C, +0x080F, +0x0400, +0xD185, +0x33AF, +0x9006, +0x038D, +0x0029, +0x1BC5, +0xA9A9, +0x89BE, +0x1B5E, +0xA9AC, +0x89BE, +0x0D0E, +0x1913, +0x33AE, +0xA9AC, +0x080E, +0x01FC, +0x1BF6, +0x33AE, +0x31B7, +0xAA12, +0x89BB, +0x0C2D, +0x55B7, +0x31B7, +0xAA1C, +0x0C4F, +0xDBF6, +0x33AF, +0x080F, +0x0400, +0xD185, +0x33AF, +0x8A77, +0x0167, +0x21A2, +0x1B33, +0xA9DD, +0x0C21, +0x0C42, +0x13F2, +0x542C, +0xA9D4, +0x0181, +0xAAAA, +0x080F, +0x3C00, +0x0182, +0x000A, +0x33AF, +0x89DD, +0x544C, +0xA9DD, +0x0181, +0x5555, +0x080F, +0x3C00, +0x0182, +0x0005, +0x33AF, +0x33DF, +0x9007, +0x038D, +0x0029, +0x1BC5, +0xA9E6, +0x1BC6, +0xA9E6, +0x8A09, +0x7FFF, +0x0D0E, +0x1913, +0x33AE, +0xA9E7, +0x1BC5, +0xA9EE, +0x89F1, +0x0806, +0x09F1, +0x8A0F, +0x1BC6, +0xA9F4, +0x8A09, +0x1BF1, +0x31BC, +0x2BCC, +0x430D, +0x2BCD, +0x0806, +0x0A03, +0x080E, +0x0020, +0x1BF3, +0x33AE, +0xAA03, +0x33FE, +0x0C3F, +0x82BD, +0x0806, +0x0A08, +0x1B30, +0xAA08, +0x8AB4, +0x8EED, +0xD38D, +0x080F, +0x0400, +0xD185, +0x33AF, +0x807A, +0x1B59, +0xAA12, +0x8A09, +0x0C2F, +0xDB75, +0x33AF, +0x0C6F, +0x010D, +0x0002, +0x33AF, +0xD3A6, +0x03A6, +0x000A, +0x0180, +0x7D00, +0xD981, +0xD182, +0xD183, +0xD184, +0x0185, +0x2408, +0x01AC, +0xA080, +0x01AF, +0x0002, +0x0800, +0x0341, +0x0C01, +0x0C62, +0xD9AE, +0x0807, +0x0A32, +0x1B3A, +0xAA32, +0x8A82, +0x01AC, +0xA0C0, +0x01AF, +0x0003, +0x0800, +0x0342, +0x0C01, +0x0C62, +0x0807, +0x0A3F, +0x1B3A, +0xAA3F, +0x8A82, +0x0C4E, +0x1BF6, +0x33AE, +0xAA45, +0x1B5E, +0xA9B7, +0x01AC, +0x2000, +0x0180, +0x7D00, +0x0181, +0x5555, +0x0182, +0x1446, +0x0183, +0x010D, +0x0184, +0x2800, +0x0185, +0x6410, +0xD1AC, +0x01AF, +0x0014, +0x0800, +0x0345, +0x0C21, +0x0C62, +0x0807, +0x0A5F, +0x1B39, +0xAA5F, +0x8A82, +0x0180, +0x7D00, +0x0181, +0xAAAA, +0x0182, +0x2846, +0x0183, +0x010D, +0x0184, +0x2800, +0x0185, +0x6410, +0xD1AC, +0x01AF, +0x0015, +0x0800, +0x0346, +0x0C21, +0x0C62, +0x0807, +0x0A77, +0x1B39, +0xAA77, +0x8A82, +0xD1AE, +0xD1AC, +0xD3A6, +0x7000, +0x0C6F, +0xD10D, +0x33AF, +0x0C2F, +0xD375, +0x33AF, +0x9006, +0x380D, +0x29AD, +0xD9B6, +0x7080, +0x667C, +0x302D, +0xAA8F, +0x080E, +0x7FFF, +0x198A, +0x1186, +0x33AE, +0x8A94, +0x080E, +0x7FFF, +0x198B, +0x1186, +0x33AE, +0x402D, +0x31A3, +0x3184, +0x3185, +0x304D, +0xAA9B, +0x8A9E, +0x4225, +0x5C22, +0x8A98, +0x5085, +0x546D, +0xBAA2, +0x8AAB, +0x54A4, +0x55A3, +0xBAA6, +0x8AA7, +0x9007, +0x5E20, +0xBAB0, +0x3580, +0x9007, +0x5A20, +0x31A2, +0x430D, +0xAAA9, +0x304D, +0x29AD, +0xD9B6, +0x700F, +0x9007, +0x1B5E, +0xAAB7, +0x8A09, +0x080E, +0x8000, +0x1BEB, +0x33AE, +0xAB44, +0x0180, +0x7D00, +0x0181, +0xFFFF, +0x0182, +0x3C23, +0x0183, +0x0087, +0x0184, +0x3068, +0x0185, +0x647C, +0xD160, +0xD161, +0xD162, +0x0163, +0x001F, +0x0164, +0x000A, +0xD165, +0x0166, +0x7800, +0x0167, +0x21A2, +0xD168, +0x0169, +0xB7B7, +0x0D0C, +0x080E, +0x03E0, +0x196D, +0x33AE, +0x55AC, +0xAB42, +0x0180, +0x1964, +0x6620, +0x0C00, +0x0C01, +0x080E, +0x7FFF, +0x1186, +0x33AE, +0x080D, +0x0100, +0x518D, +0x31AC, +0x0C2E, +0x1963, +0x33AE, +0xAAF0, +0x8AF8, +0x080E, +0x7FFF, +0x1989, +0x33AE, +0x500D, +0x31A0, +0x5181, +0x31A1, +0x0C4E, +0x1963, +0x33AE, +0xAAFD, +0x8B05, +0x080E, +0x7FFF, +0x198A, +0x33AE, +0x500D, +0x31A0, +0x5181, +0x31A1, +0x0C8E, +0x1963, +0x33AE, +0xAB0A, +0x8B12, +0x080E, +0x7FFF, +0x198B, +0x33AE, +0x500D, +0x31A0, +0x5181, +0x31A1, +0x0D0E, +0x1963, +0x33AE, +0xAB17, +0x8B1F, +0x080E, +0x7FFF, +0x198C, +0x33AE, +0x500D, +0x31A0, +0x5181, +0x31A1, +0x0E0E, +0x1963, +0x33AE, +0xAB24, +0x8B2C, +0x080E, +0x7FFF, +0x198D, +0x33AE, +0x500D, +0x31A0, +0x5181, +0x31A1, +0x422D, +0x540D, +0xBB44, +0x080F, +0x03FF, +0x0182, +0x0084, +0x33AF, +0x0C2F, +0xD183, +0x33AF, +0x080F, +0x0020, +0xD184, +0x33AF, +0x0FEF, +0xD963, +0x33AF, +0x0180, +0x7D00, +0x6C00, +0x8B44, +0xBB44, +0x6C00, +0x13EE, +0x319A, +0x410C, +0x1BED, +0x31BB, +0x518D, +0x31BC, +0x1B3C, +0xAC2C, +0x0180, +0x07FF, +0x0181, +0xFFFF, +0x0182, +0x3C06, +0x0183, +0x0800, +0x0184, +0x3060, +0x0185, +0x6402, +0x0160, +0x0C07, +0xD161, +0x0162, +0x0042, +0x0163, +0x3000, +0xD164, +0xD165, +0x0166, +0x7828, +0x0167, +0x21A2, +0xD168, +0x0807, +0x0B6C, +0x33FE, +0x0C1F, +0x89C5, +0x0FEF, +0x0182, +0x0002, +0x33AF, +0x1352, +0x1BEE, +0x518D, +0x31AC, +0x430D, +0xAB78, +0x318D, +0x8B7A, +0x080D, +0x00FF, +0x31A1, +0x080F, +0xFF00, +0x2969, +0x33AF, +0x1351, +0x1BED, +0x518D, +0x31AC, +0x430D, +0xAB87, +0x318D, +0x8B89, +0x080D, +0x00FF, +0x31A1, +0x080F, +0x00FF, +0x2969, +0x33AF, +0x6C00, +0x1351, +0x080E, +0xFF00, +0x197B, +0x33AE, +0x558D, +0xBB98, +0x0C1B, +0x8B99, +0x31BB, +0x1352, +0x080E, +0x00FF, +0x197B, +0x33AE, +0x558D, +0xBBA2, +0x0C1A, +0x8BA3, +0x31BA, +0x0180, +0x7D00, +0x0181, +0xFFFF, +0x0182, +0x3C02, +0x0183, +0x0800, +0x0184, +0x3060, +0x0185, +0x6402, +0xD160, +0xD161, +0x0162, +0x0042, +0x0163, +0x0060, +0x0164, +0x00D0, +0xD165, +0x0166, +0x7800, +0x0167, +0x21A2, +0xD168, +0x13CD, +0x1B52, +0x518D, +0x31AC, +0x430D, +0xABC5, +0x318D, +0x8BC7, +0x080D, +0x00FF, +0x31A1, +0x080F, +0xFF00, +0x2969, +0x33AF, +0x13CC, +0x1B51, +0x518D, +0x31AC, +0x430D, +0xABD4, +0x318D, +0x8BD6, +0x080D, +0x00FF, +0x31A1, +0x080F, +0x00FF, +0x2969, +0x33AF, +0x0807, +0x0BE0, +0x33FE, +0x0C1F, +0x89C5, +0xD160, +0x080F, +0x0038, +0x0166, +0x0005, +0x080F, +0x1000, +0xD166, +0x080F, +0x0E00, +0x0166, +0x0004, +0x33AF, +0x1BED, +0x31A2, +0x545B, +0xBC0E, +0x080E, +0x03C0, +0x196C, +0x33AE, +0x402D, +0x31A0, +0x080E, +0x003F, +0x196C, +0x33AE, +0xABFE, +0x5820, +0x8BFF, +0x5840, +0x31A0, +0x0DC4, +0x5404, +0xBC04, +0x0DC0, +0x080F, +0x7C00, +0x2167, +0x080F, +0x03E0, +0x2167, +0x33AF, +0x0169, +0xFFFF, +0x8C2B, +0x1BED, +0x590D, +0x576D, +0xBC2C, +0x080E, +0x03C0, +0x196C, +0x33AE, +0x402D, +0x31A0, +0x080E, +0x003F, +0x196C, +0x33AE, +0xAC21, +0x5C20, +0xBC20, +0x0C0D, +0x31A0, +0x080F, +0x7C00, +0x2167, +0x080F, +0x03E0, +0x2167, +0x0FEF, +0x2167, +0x33AF, +0xD169, +0x6C00, +0x1B3B, +0xAC7E, +0x0180, +0x07FF, +0x0181, +0xFFFF, +0x0182, +0x3C06, +0x0183, +0x0800, +0x0184, +0x3060, +0x0185, +0x6402, +0x0160, +0x0C07, +0xD161, +0x0162, +0x0042, +0x0163, +0x3000, +0xD164, +0xD165, +0x0166, +0x7828, +0x0167, +0x21A2, +0xD168, +0x1352, +0x519A, +0x31AC, +0x430D, +0xAC4F, +0x318D, +0x8C51, +0x080D, +0x00FF, +0x31A1, +0x080F, +0xFF00, +0x2969, +0x33AF, +0x1351, +0x519B, +0x31AC, +0x430D, +0xAC5D, +0x318D, +0x8C5F, +0x080D, +0x00FF, +0x31A1, +0x080F, +0x00FF, +0x2969, +0x33AF, +0x0807, +0x0C69, +0x33FE, +0x0C1F, +0x89C5, +0x6C00, +0x1351, +0x080E, +0xFF00, +0x197B, +0x33AE, +0x558D, +0xBC73, +0x0C1B, +0x8C74, +0x31BB, +0x1352, +0x080E, +0x00FF, +0x197B, +0x33AE, +0x558D, +0xBC7D, +0x0C1A, +0x8C7E, +0x31BA, +0x080E, +0x0040, +0x1BF3, +0x33AE, +0xACB2, +0x0180, +0x7D00, +0x0181, +0xFFFF, +0x0182, +0x3C06, +0x0183, +0x0800, +0x0184, +0x3060, +0x0185, +0x647C, +0xD160, +0x0161, +0x0009, +0x0162, +0x0042, +0x0163, +0x0F00, +0x0164, +0xA000, +0x0165, +0x0999, +0x0166, +0x7800, +0x0167, +0x21A2, +0xD168, +0x334C, +0x410C, +0x336D, +0x518D, +0x31BC, +0x1352, +0x410C, +0x3381, +0x502C, +0x31A2, +0x1351, +0x504C, +0x2969, +0x0807, +0x0CB1, +0x33FE, +0x0C1F, +0x89C5, +0x6C00, +0x196B, +0x2B5A, +0x196D, +0x2B5C, +0x196C, +0x2B5B, +0x196E, +0x2B5D, +0x196F, +0x2B60, +0x1970, +0x2B61, +0x1971, +0x2B62, +0x1972, +0x2B63, +0x8CC3, +0x33FE, +0x0C3F, +0x8000, +0x9006, +0x080E, +0x3000, +0x1913, +0x080E, +0xFFFF, +0xACCE, +0x9006, +0x19B3, +0x0800, +0x0077, +0x540D, +0xACD4, +0x8D51, +0xD9AE, +0x01AF, +0x0010, +0x0800, +0x0348, +0x0801, +0x0347, +0x0802, +0x034B, +0x3C40, +0x0807, +0x0CE1, +0x8D52, +0x0807, +0x0CE5, +0x0C04, +0x8D64, +0x01AF, +0x0012, +0x0800, +0x0348, +0x0801, +0x0348, +0x0802, +0x034D, +0x3C40, +0x0807, +0x0CF1, +0x8D52, +0x0807, +0x0CF5, +0x0C04, +0x8D64, +0x01AF, +0x0011, +0x0800, +0x0348, +0x0801, +0x0347, +0x0802, +0x034C, +0x3C40, +0x0807, +0x0D01, +0x8D52, +0x0807, +0x0D05, +0x0C24, +0x8D64, +0x01AF, +0x0013, +0x0800, +0x0348, +0x0801, +0x0348, +0x0802, +0x034E, +0x3C40, +0x0807, +0x0D11, +0x8D52, +0x0807, +0x0D15, +0x0C24, +0x8D64, +0x19B3, +0x31A4, +0x0805, +0x01EE, +0x54A4, +0xAD1C, +0x8D3F, +0x0805, +0x01CC, +0x54A4, +0xAD21, +0x8D41, +0x0805, +0x0144, +0x54A4, +0xAD26, +0x8D43, +0x0805, +0x0188, +0x54A4, +0xAD2B, +0x8D46, +0x0805, +0x0100, +0x54A4, +0xAD30, +0x8D48, +0x0805, +0x0111, +0x54A4, +0xAD35, +0x8D4A, +0x0805, +0x0155, +0x54A4, +0xAD3A, +0x8D4C, +0x0805, +0x0177, +0x54A4, +0xAD4E, +0x8D4E, +0x01B3, +0x01CC, +0x01B3, +0x0144, +0x01B3, +0x0155, +0x8D4C, +0x01B3, +0x0100, +0x01B3, +0x0111, +0x01B3, +0x0155, +0x01B3, +0x0177, +0x01B3, +0x0077, +0xD1AE, +0x9006, +0x080E, +0x1FE0, +0x196E, +0x33AE, +0x31A3, +0x080E, +0x1000, +0x196E, +0x33AE, +0x31A4, +0xAD5E, +0x8D62, +0x080D, +0x0100, +0x546D, +0x31A3, +0x308D, +0x9007, +0xAD68, +0x308D, +0xAD72, +0x8D6B, +0x308D, +0xAD6B, +0x8D72, +0x3805, +0x5065, +0x31A4, +0x430D, +0xAD79, +0x308D, +0x8D76, +0x3805, +0x5465, +0xBD76, +0x8D79, +0x3C02, +0x35A1, +0x8D7A, +0x384D, +0x29AD, +0xD9B6, +0x9007, +0x01AF, +0x0010, +0x01AD, +0x0080, +0xD9B6, +0x01AF, +0x0011, +0xD1AD, +0xD9B6, +0x01AF, +0x0016, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0014, +0xD1AD, +0xD9B6, +0x01AF, +0x0012, +0xD1AD, +0xD9B6, +0x01AF, +0x0013, +0xD1AD, +0xD9B6, +0x01AF, +0x0018, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0015, +0xD1AD, +0xD9B6, +0x9007, +0x01AF, +0x0010, +0xD1AD, +0xD9B6, +0x01AF, +0x0011, +0x01AD, +0x0080, +0xD9B6, +0x01AF, +0x0016, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0014, +0xD1AD, +0xD9B6, +0x01AF, +0x0012, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0013, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0018, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0015, +0xD1AD, +0xD9B6, +0x9007, +0x01AF, +0x0010, +0xD1AD, +0xD9B6, +0x01AF, +0x0011, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0016, +0x01AD, +0x0080, +0xD9B6, +0x01AF, +0x0014, +0xD1AD, +0xD9B6, +0x01AF, +0x0012, +0xD1AD, +0xD9B6, +0x01AF, +0x0013, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0018, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0015, +0xD1AD, +0xD9B6, +0x9007, +0x01AF, +0x0010, +0xD1AD, +0xD9B6, +0x01AF, +0x0011, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0016, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0014, +0x01AD, +0x0080, +0xD9B6, +0x01AF, +0x0012, +0xD1AD, +0xD9B6, +0x01AF, +0x0013, +0xD1AD, +0xD9B6, +0x01AF, +0x0018, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0015, +0xD1AD, +0xD9B6, +0x9007, +0x01AF, +0x0010, +0xD1AD, +0xD9B6, +0x01AF, +0x0011, +0xD1AD, +0xD9B6, +0x01AF, +0x0016, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0014, +0xD1AD, +0xD9B6, +0x01AF, +0x0012, +0x01AD, +0x0080, +0xD9B6, +0x01AF, +0x0013, +0xD1AD, +0xD9B6, +0x01AF, +0x0018, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0015, +0xD1AD, +0xD9B6, +0x9007, +0x01AF, +0x0010, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0011, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0016, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0014, +0xD1AD, +0xD9B6, +0x01AF, +0x0012, +0xD1AD, +0xD9B6, +0x01AF, +0x0013, +0x01AD, +0x0080, +0xD9B6, +0x01AF, +0x0018, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0015, +0xD1AD, +0xD9B6, +0x9007, +0x01AF, +0x0010, +0xD1AD, +0xD9B6, +0x01AF, +0x0011, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0016, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0014, +0xD1AD, +0xD9B6, +0x01AF, +0x0012, +0xD1AD, +0xD9B6, +0x01AF, +0x0013, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0018, +0x01AD, +0x0080, +0xD9B6, +0x01AF, +0x0015, +0xD1AD, +0xD9B6, +0x9007, +0x01AF, +0x0010, +0xD1AD, +0xD9B6, +0x01AF, +0x0011, +0xD1AD, +0xD9B6, +0x01AF, +0x0016, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0014, +0xD1AD, +0xD9B6, +0x01AF, +0x0012, +0xD1AD, +0xD9B6, +0x01AF, +0x0013, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0018, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0015, +0x01AD, +0x0080, +0xD9B6, +0x9007, +0x01AF, +0x0010, +0x01AD, +0x0080, +0xD9B6, +0x01AF, +0x0011, +0xD1AD, +0xD9B6, +0x01AF, +0x0016, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0014, +0xD1AD, +0xD9B6, +0x01AF, +0x0012, +0xD1AD, +0xD9B6, +0x01AF, +0x0013, +0xD1AD, +0xD9B6, +0x01AF, +0x0018, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0015, +0xD1AD, +0xD9B6, +0x9007, +0x01AF, +0x0010, +0xD1AD, +0xD9B6, +0x01AF, +0x0011, +0xD1AD, +0xD9B6, +0x01AF, +0x0016, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0014, +0xD1AD, +0xD9B6, +0x01AF, +0x0012, +0x01AD, +0x0080, +0xD9B6, +0x01AF, +0x0013, +0xD1AD, +0xD9B6, +0x01AF, +0x0018, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0015, +0xD1AD, +0xD9B6, +0x9007, +0x0C4E, +0x1B24, +0x33AE, +0xAEF2, +0x8F27, +0x038D, +0x0029, +0x0C2F, +0xDB75, +0x33AF, +0x0C6F, +0x010D, +0x0002, +0x33AF, +0xD3A6, +0x03A6, +0x000A, +0x0C2E, +0x1B24, +0x33AE, +0xAF10, +0xD9AE, +0x01AF, +0x0016, +0xD1AD, +0xD9B6, +0x01AF, +0x0018, +0x01AD, +0x00FF, +0xD9B6, +0x0C2F, +0xDB24, +0x33AF, +0x8F1D, +0xD9AE, +0x01AF, +0x0016, +0x01AD, +0x00FF, +0xD9B6, +0x01AF, +0x0018, +0xD1AD, +0xD9B6, +0x0C2F, +0xD324, +0x33AF, +0xD1AE, +0xD3A6, +0x7000, +0x0C6F, +0xD10D, +0x33AF, +0x0C2F, +0xD375, +0x33AF, +0xD38D, +0x8A09, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0180, +0x7D00, +0x0181, +0xAAAA, +0x0182, +0x2802, +0x0183, +0x0800, +0x0184, +0x3060, +0x0185, +0x6402, +0x0160, +0x0C1F, +0xD161, +0x0162, +0x0042, +0x0163, +0x3000, +0xD164, +0x0165, +0x3000, +0x0166, +0x7828, +0x0167, +0x21A2, +0xD168, +0x0169, +0xB7B7, +0x6E00, +0x197B, +0x430D, +0x31BA, +0x0180, +0x7D00, +0x0181, +0xAAAA, +0x0182, +0x2802, +0x0183, +0x0800, +0x0184, +0x3060, +0x0185, +0x6402, +0x0160, +0x0C1F, +0xD161, +0xD162, +0x0163, +0x3000, +0xD164, +0x0165, +0xB000, +0x0166, +0x7828, +0x0167, +0x21A2, +0xD168, +0x0169, +0x4949, +0x6E00, +0x197B, +0x430D, +0x55BA, +0xB043, +0x0C0D, +0x080F, +0x00FF, +0x2BE9, +0x33AE, +0x8D47, +0x2BCA, +0x33DF, +0x8CC6, +0x01A8, +0x0140, +0xD9B5, +0x01AC, +0xA200, +0x0180, +0x03FF, +0xD981, +0xD182, +0xD183, +0x0184, +0x4000, +0x0185, +0x2408, +0x0800, +0x0349, +0x0802, +0x034A, +0x0803, +0x01B4, +0x080E, +0x01E0, +0x1B1C, +0x33AE, +0x31A4, +0x0EED, +0x35A0, +0x3C43, +0xD9B8, +0x0816, +0x006B, +0x8071, +0xD1B5, +0x33DF, +0x1B27, +0xA070, +0x863A, +0x8644, +0x7080, +0x1B27, +0xA084, +0x1B35, +0xA084, +0x0801, +0x0022, +0x3805, +0x0DCD, +0x54AD, +0xA07D, +0x8081, +0x5E20, +0x3C43, +0xD9B8, +0x8078, +0x6670, +0xB084, +0x80AF, +0x380D, +0x2B53, +0x1B34, +0xA0AE, +0x308D, +0xA08B, +0x80AE, +0x3805, +0x0CED, +0x54AD, +0xA090, +0x80A3, +0x0DED, +0x54AD, +0xA094, +0x80A3, +0x0EED, +0x54AD, +0xA098, +0x80A3, +0x0FED, +0x54AD, +0xA09C, +0x80A3, +0x080D, +0x0027, +0x54AD, +0xA0A1, +0x80A3, +0x5C24, +0x31A4, +0x5A20, +0x3805, +0x0818, +0x002F, +0x54B8, +0xB0AB, +0x5E20, +0x80AE, +0x3C43, +0xD9B8, +0x8088, +0x9016, +0x5A20, +0x55A1, +0xB0B6, +0x3580, +0x318D, +0x2B53, +0x8084, +0x3C43, +0xD9B8, +0x700F, +0x8081, +0x0800, +0x0349, +0x0802, +0x034A, +0x0803, +0x01B4, +0x302D, +0xA0C4, +0x13C9, +0x80C5, +0x308C, +0x80CB, +0x3C43, +0xD9B8, +0xD1B5, +0x33DF, +0x9007, +0x3804, +0x5584, +0xB0E0, +0x548C, +0x31A4, +0x0801, +0x002F, +0x308D, +0xA0D5, +0x80DF, +0x5C24, +0x31A4, +0x5A20, +0x3805, +0x54A1, +0xB0DC, +0x80DF, +0x3C43, +0xD9B8, +0x80D2, +0x80C6, +0x31A4, +0x0C01, +0x308D, +0xA0E5, +0x80EF, +0x5C24, +0x31A4, +0x5E20, +0x3805, +0x5425, +0xB0EC, +0x80EF, +0x3C43, +0xD9B8, +0x80E2, +0x80C6, +0x0E0E, +0x1B6F, +0x33AE, +0xA275, +0x0180, +0x03FF, +0x0181, +0xFFFF, +0x0182, +0x3C46, +0xD183, +0x0184, +0x7020, +0x0185, +0x2404, +0x0160, +0x0C10, +0x0161, +0x0009, +0x0162, +0x00C2, +0xD163, +0xD164, +0xD165, +0x0166, +0x792B, +0x0167, +0x21A2, +0x0168, +0x4925, +0xD169, +0x1B33, +0xA127, +0x0C21, +0x0C42, +0x13F2, +0x542C, +0xA11E, +0x0181, +0xAAAA, +0x080F, +0x3C00, +0x0182, +0x000A, +0x33AF, +0x8127, +0x544C, +0xA127, +0x0181, +0x5555, +0x080F, +0x3C00, +0x0182, +0x0005, +0x33AF, +0x080E, +0x8000, +0x1963, +0x33AE, +0xA131, +0x080E, +0x0FE0, +0x116E, +0x33AE, +0x8135, +0x080E, +0x0FC0, +0x116E, +0x33AE, +0x3184, +0x080E, +0x1000, +0x116E, +0x33AE, +0x3185, +0x13CC, +0x3181, +0x1351, +0x502C, +0x31AC, +0x0C23, +0x5465, +0xB148, +0x548C, +0x31A2, +0xB15C, +0x0C02, +0x815C, +0x080E, +0x8000, +0x1963, +0x33AE, +0xA150, +0x0803, +0x0080, +0x8152, +0x0803, +0x0040, +0x548C, +0x506D, +0x31A2, +0x0803, +0x0100, +0x546D, +0xB15A, +0x815C, +0x0802, +0x00FF, +0x0C2F, +0xDB75, +0x33AF, +0x0C6F, +0x010D, +0x0002, +0x33AF, +0xD3A6, +0x03A6, +0x000A, +0x4102, +0x4302, +0x304D, +0xD9AE, +0x29AD, +0x01AF, +0x0016, +0xD9B6, +0x13CD, +0x3181, +0x1352, +0x502C, +0x31AC, +0x0C23, +0x5465, +0xB17B, +0x548C, +0x31A2, +0xB18F, +0x0C02, +0x818F, +0x080E, +0x8000, +0x1963, +0x33AE, +0xA183, +0x0803, +0x0080, +0x8185, +0x0803, +0x0040, +0x548C, +0x506D, +0x31A2, +0x0803, +0x0100, +0x546D, +0xB18D, +0x818F, +0x0802, +0x00FF, +0x4102, +0x4302, +0x304D, +0x29AD, +0x01AF, +0x0018, +0xD9B6, +0xD1AE, +0xD3A6, +0x7000, +0x0C6F, +0xD10D, +0x33AF, +0x0C2F, +0xD375, +0x33AF, +0x6647, +0x080E, +0x7FFF, +0x1989, +0x33AE, +0x402D, +0x31A3, +0x080E, +0x7FFF, +0x1986, +0x31A2, +0x31A4, +0x31AC, +0x080E, +0x01E0, +0x1B76, +0x33AE, +0xA1B2, +0x81B5, +0x422C, +0x5C2D, +0x81B0, +0x3181, +0x4282, +0x0C05, +0x0DEE, +0x1B76, +0x33AE, +0x31B7, +0xA1BE, +0x81C3, +0x5045, +0x31A5, +0x5C37, +0x31B7, +0x81BC, +0x0E0E, +0x1B76, +0x33AE, +0xA1CA, +0x50A4, +0x31A2, +0x81CC, +0x54A4, +0x31A2, +0x5022, +0x546D, +0xB1D0, +0x81D6, +0x5422, +0xB1D3, +0x81DB, +0x55A3, +0xB1DB, +0x81D8, +0xDB12, +0x81DC, +0x0312, +0x0002, +0x81DC, +0xD312, +0x080E, +0x0038, +0x1B77, +0x33AE, +0x31AC, +0x0CEE, +0x1B77, +0x33AE, +0x31A0, +0x080E, +0x00F0, +0x1B78, +0x33AE, +0x31A1, +0x0DEE, +0x1B78, +0x33AE, +0x31A2, +0x080E, +0x00E0, +0x196B, +0x33AE, +0x31A3, +0x080E, +0x03C0, +0x196C, +0x33AE, +0x31A4, +0x4024, +0x080E, +0x003F, +0x196C, +0x33AE, +0xA1FF, +0x8201, +0x5824, +0x31A4, +0x546C, +0xB206, +0x5444, +0xB206, +0x820B, +0x5403, +0xB210, +0x5481, +0xB210, +0x820E, +0x0313, +0x0002, +0x8211, +0xDB13, +0x8211, +0xD313, +0x080E, +0x03E0, +0x1379, +0x33AE, +0x3180, +0x0FEE, +0x1379, +0x33AE, +0x3181, +0x080E, +0x7F00, +0x137A, +0x33AE, +0x3184, +0x080E, +0x8000, +0x137A, +0x33AE, +0x3197, +0x080E, +0x007F, +0x137A, +0x33AE, +0x3185, +0x080E, +0x0080, +0x137A, +0x33AE, +0x3198, +0x080E, +0x03E0, +0x116D, +0x33AE, +0x3182, +0x0807, +0x0236, +0x82AB, +0x5440, +0xB239, +0x8272, +0x332D, +0xA241, +0x32ED, +0xA240, +0x5464, +0xB247, +0x8272, +0x8272, +0x32ED, +0xA244, +0x8247, +0x5483, +0xB247, +0x8272, +0x5422, +0xB24A, +0x826F, +0x332D, +0xA251, +0x330D, +0xA257, +0x54A3, +0xB257, +0x826F, +0x330D, +0xA254, +0x826F, +0x5465, +0xB257, +0x826F, +0x080E, +0x03C0, +0x196C, +0x33AE, +0x5CED, +0xA274, +0x1BED, +0x5C8D, +0x31AC, +0x1BCC, +0x55AC, +0xA264, +0x8266, +0xB26F, +0x8266, +0x1BEE, +0x5C8D, +0x31AC, +0x1BCD, +0x55AC, +0xA26D, +0x8274, +0xB26F, +0x8274, +0x0314, +0x0002, +0x8275, +0xDB14, +0x8275, +0xD314, +0x0C2F, +0xDB75, +0x33AF, +0x0C6F, +0x010D, +0x0002, +0x33AF, +0xD3A6, +0x03A6, +0x000A, +0x1B51, +0x1352, +0x3180, +0xD9AE, +0x29AD, +0x01AF, +0x0016, +0xD9B6, +0x21AD, +0x01AF, +0x0018, +0xD9B6, +0xD1AE, +0xD3A6, +0x7000, +0x0C6F, +0xD10D, +0x33AF, +0x0C2F, +0xD375, +0x33AF, +0x196B, +0x2B5A, +0x196D, +0x2B5C, +0x196C, +0x2B5B, +0x196E, +0x2B5D, +0x196F, +0x2B60, +0x1970, +0x2B61, +0x1971, +0x2B62, +0x1972, +0x2B63, +0x13CD, +0x410C, +0x1BCC, +0x518D, +0x2BF1, +0x33DF, +0x8979, +0x080E, +0x1FE0, +0x196E, +0x33AE, +0x31A3, +0x080E, +0x1000, +0x196E, +0x33AE, +0x31B9, +0xA2B7, +0x82BB, +0x080D, +0x0100, +0x546D, +0x31A3, +0x332D, +0x9007, +0x0C2F, +0xDB75, +0x33AF, +0x0C6F, +0x010D, +0x0002, +0x33AF, +0xD3A6, +0x03A6, +0x000A, +0x01B3, +0x0177, +0xD9AE, +0x82FB, +0x01B3, +0x0155, +0x01B3, +0x0144, +0x01B3, +0x01CC, +0x01B3, +0x01EE, +0x83DA, +0x01B3, +0x01CC, +0x01B3, +0x0144, +0x01B3, +0x0155, +0x01B3, +0x0177, +0x84AB, +0x01B3, +0x0155, +0x01B3, +0x0111, +0x01B3, +0x0100, +0x01B3, +0x0188, +0x859D, +0x01B3, +0x0100, +0x01B3, +0x0111, +0x01B3, +0x0155, +0x01B3, +0x0177, +0x01B3, +0x0077, +0xD1AE, +0xD3A6, +0x7000, +0x0C6F, +0xD10D, +0x33AF, +0x0C2F, +0xD375, +0x33AF, +0x0C1F, +0x9006, +0x0180, +0x7D00, +0x0181, +0xAAAA, +0x0182, +0x28C6, +0xD183, +0x0184, +0x2C00, +0x0185, +0x6408, +0x0800, +0x01AD, +0x01AD, +0x0080, +0x01AF, +0x0016, +0xD9B6, +0x0807, +0x0313, +0x33FE, +0x0C1F, +0x0C63, +0x864B, +0x19AD, +0x2B47, +0x0180, +0x7D00, +0x0181, +0xAAAA, +0x0182, +0x2886, +0xD183, +0x0184, +0x2C00, +0x0185, +0x6408, +0x0800, +0x01AD, +0x01AD, +0x0080, +0x01AF, +0x0016, +0xD9B6, +0x0807, +0x032D, +0x33FE, +0x0C1F, +0x0C43, +0x864B, +0x0807, +0x0330, +0x868A, +0x31A5, +0x0801, +0x0020, +0x5023, +0x31A1, +0x080E, +0x00FF, +0x13EF, +0x33AE, +0x3180, +0x2179, +0x2348, +0x5581, +0x43ED, +0x31B8, +0x080D, +0x00FF, +0x542D, +0x55AC, +0x43ED, +0x31B9, +0x0800, +0x0179, +0x30AD, +0x0807, +0x034C, +0x0C04, +0x86B5, +0x080E, +0x00FF, +0x1BEF, +0x33AE, +0x2B48, +0x0800, +0x0348, +0x0801, +0x0347, +0x0807, +0x0358, +0x866E, +0x1B48, +0x080F, +0x00FF, +0x2BEF, +0x33AF, +0x0800, +0x0348, +0x0801, +0x0347, +0x0802, +0x0179, +0x0807, +0x0366, +0x868A, +0x0807, +0x036A, +0x0C04, +0x869C, +0x0180, +0x7D00, +0x0181, +0x5555, +0x0182, +0x14C6, +0xD183, +0x0184, +0x2C00, +0x0185, +0x6408, +0x0800, +0x01AD, +0x01AD, +0x0080, +0x01AF, +0x0018, +0xD9B6, +0x0807, +0x0382, +0x33FE, +0x0C1F, +0x0C63, +0x864B, +0x19AD, +0x2B47, +0x0180, +0x7D00, +0x0181, +0x5555, +0x0182, +0x1486, +0xD183, +0x0184, +0x2C00, +0x0185, +0x6408, +0x0800, +0x01AD, +0x01AD, +0x0080, +0x01AF, +0x0018, +0xD9B6, +0x0807, +0x039C, +0x33FE, +0x0C1F, +0x0C43, +0x864B, +0x0807, +0x039F, +0x868A, +0x31A5, +0x0801, +0x0020, +0x5023, +0x31A1, +0x080E, +0x00FF, +0x13F0, +0x33AE, +0x3180, +0x217A, +0x2348, +0x5581, +0x43ED, +0x31B8, +0x080D, +0x00FF, +0x542D, +0x55AC, +0x43ED, +0x31B9, +0x0800, +0x017A, +0x30AD, +0x0807, +0x03BB, +0x0C04, +0x86B5, +0x080E, +0x00FF, +0x1BF0, +0x33AE, +0x2B48, +0x0800, +0x0348, +0x0801, +0x0347, +0x0807, +0x03C7, +0x866E, +0x1B48, +0x080F, +0x00FF, +0x2BF0, +0x33AF, +0x0800, +0x0348, +0x0801, +0x0347, +0x0802, +0x017A, +0x0807, +0x03D5, +0x868A, +0x0807, +0x03D9, +0x0C04, +0x869C, +0x82CB, +0x0180, +0x7D00, +0x0181, +0xAAAA, +0x0182, +0x28C6, +0xD183, +0x0184, +0x2C00, +0x0185, +0x6408, +0x0800, +0x01AD, +0x01AD, +0x0080, +0x01AF, +0x0010, +0xD9B6, +0x0807, +0x03F2, +0x33FE, +0x0C1F, +0x0C63, +0x864B, +0x19AD, +0x2B47, +0x0180, +0x7D00, +0x0181, +0xAAAA, +0x0182, +0x2886, +0xD183, +0x0184, +0x2C00, +0x0185, +0x6408, +0x0800, +0x01AD, +0x01AD, +0x0080, +0x01AF, +0x0010, +0xD9B6, +0x0807, +0x040C, +0x33FE, +0x0C1F, +0x0C43, +0x864B, +0x0807, +0x040F, +0x868A, +0x31A5, +0x0801, +0x0020, +0x5023, +0x134B, +0x3180, +0x2173, +0x2348, +0x558D, +0x43ED, +0x31B8, +0x0801, +0x0020, +0x5061, +0x0801, +0x00FF, +0x55A1, +0x55AC, +0x43ED, +0x31B9, +0x0800, +0x0173, +0x30AD, +0x0807, +0x042A, +0x0C04, +0x86B5, +0x1B4B, +0x2B48, +0x0800, +0x0348, +0x0801, +0x0347, +0x0807, +0x0433, +0x866E, +0x1B48, +0x2B4B, +0x0800, +0x0348, +0x0801, +0x0347, +0x0802, +0x0173, +0x0807, +0x043E, +0x868A, +0x0807, +0x0442, +0x0C04, +0x869C, +0x0180, +0x7D00, +0x0181, +0x5555, +0x0182, +0x14C6, +0xD183, +0x0184, +0x2C00, +0x0185, +0x6408, +0x0800, +0x01AD, +0x01AD, +0x0080, +0x01AF, +0x0012, +0xD9B6, +0x0807, +0x045A, +0x33FE, +0x0C1F, +0x0C63, +0x864B, +0x19AD, +0x2B47, +0x0180, +0x7D00, +0x0181, +0x5555, +0x0182, +0x1486, +0xD183, +0x0184, +0x2C00, +0x0185, +0x6408, +0x0800, +0x01AD, +0x01AD, +0x0080, +0x01AF, +0x0012, +0xD9B6, +0x0807, +0x0474, +0x33FE, +0x0C1F, +0x0C43, +0x864B, +0x0807, +0x0477, +0x868A, +0x31A5, +0x0801, +0x0020, +0x5023, +0x134D, +0x3180, +0x2175, +0x2348, +0x558D, +0x43ED, +0x31B8, +0x0801, +0x0020, +0x5061, +0x0801, +0x00FF, +0x55A1, +0x55AC, +0x43ED, +0x31B9, +0x0800, +0x0175, +0x30AD, +0x0807, +0x0492, +0x0C04, +0x86B5, +0x1B4D, +0x2B48, +0x0800, +0x0348, +0x0801, +0x0347, +0x0807, +0x049B, +0x866E, +0x1B48, +0x2B4D, +0x0800, +0x0348, +0x0801, +0x0347, +0x0802, +0x0175, +0x0807, +0x04A6, +0x868A, +0x0807, +0x04AA, +0x0C04, +0x869C, +0x82D4, +0x0180, +0x7D00, +0x0181, +0xAAAA, +0x0182, +0x2846, +0xD183, +0x0184, +0x2C00, +0x0185, +0x6408, +0x0800, +0x01AD, +0x01AD, +0x0080, +0x01AF, +0x0016, +0xD9B6, +0x0807, +0x04C3, +0x33FE, +0x0C1F, +0x0C63, +0x864B, +0x19AD, +0x2B47, +0x0180, +0x7D00, +0x0181, +0xAAAA, +0x0182, +0x2806, +0xD183, +0x0184, +0x2C00, +0x0185, +0x6408, +0x0800, +0x01AD, +0x01AD, +0x0080, +0x01AF, +0x0016, +0xD9B6, +0x0807, +0x04DD, +0x33FE, +0x0C1F, +0x0C43, +0x864B, +0x0807, +0x04E0, +0x868A, +0x31A5, +0x0801, +0x0020, +0x5023, +0x080E, +0xFF00, +0x13EF, +0x33AE, +0x3180, +0x2179, +0x2348, +0x558D, +0x43ED, +0x31B8, +0x080D, +0x00FF, +0x542D, +0x55AC, +0x43ED, +0x31B9, +0x0800, +0x0179, +0x30AD, +0x0807, +0x04FB, +0x0C24, +0x86B5, +0x080E, +0xFF00, +0x1BEF, +0x33AE, +0x2B48, +0x0800, +0x0348, +0x0801, +0x0347, +0x0807, +0x0507, +0x866E, +0x1B48, +0x080F, +0xFF00, +0x2BEF, +0x33AF, +0x0800, +0x0348, +0x0801, +0x0347, +0x0802, +0x0179, +0x0807, +0x0515, +0x868A, +0x0807, +0x0519, +0x0C24, +0x869C, +0x0180, +0x7D00, +0x0181, +0x5555, +0x0182, +0x1446, +0xD183, +0x0184, +0x2C00, +0x0185, +0x6408, +0x0800, +0x01AD, +0x01AD, +0x0080, +0x01AF, +0x0018, +0xD9B6, +0x0807, +0x0531, +0x33FE, +0x0C1F, +0x0C63, +0x864B, +0x19AD, +0x2B47, +0x0180, +0x7D00, +0x0181, +0x5555, +0x0182, +0x1406, +0xD183, +0x0184, +0x2C00, +0x0185, +0x6408, +0x0800, +0x01AD, +0x01AD, +0x0080, +0x01AF, +0x0018, +0xD9B6, +0x0807, +0x054B, +0x33FE, +0x0C1F, +0x0C43, +0x864B, +0x0807, +0x054E, +0x868A, +0x31A5, +0x0801, +0x0020, +0x5023, +0x31A1, +0x080E, +0xFF00, +0x13F0, +0x33AE, +0x3180, +0x217A, +0x2348, +0x5581, +0x43ED, +0x31B8, +0x080D, +0x00FF, +0x542D, +0x55AC, +0x43ED, +0x31B9, +0x0800, +0x017A, +0x30AD, +0x0807, +0x056A, +0x0C24, +0x86B5, +0x080E, +0xFF00, +0x1BF0, +0x33AE, +0x2B48, +0x0800, +0x0348, +0x0801, +0x0347, +0x0807, +0x0576, +0x866E, +0x1B48, +0x080F, +0xFF00, +0x2BF0, +0x33AF, +0x0800, +0x0348, +0x0801, +0x0347, +0x0802, +0x017A, +0x0807, +0x0584, +0x868A, +0x0807, +0x0588, +0x0C24, +0x869C, +0x080E, +0xFF00, +0x1BEF, +0x080E, +0x00FF, +0x13EF, +0x33AE, +0x518D, +0x422D, +0x2B51, +0x080E, +0xFF00, +0x1BF0, +0x080E, +0x00FF, +0x13F0, +0x33AE, +0x518D, +0x422D, +0x2B52, +0x82DD, +0x0180, +0x7D00, +0x0181, +0xAAAA, +0x0182, +0x2846, +0xD183, +0x0184, +0x2C00, +0x0185, +0x6408, +0x0800, +0x01AD, +0x01AD, +0x0080, +0x01AF, +0x0011, +0xD9B6, +0x0807, +0x05B5, +0x33FE, +0x0C1F, +0x0C63, +0x864B, +0x19AD, +0x2B47, +0x0180, +0x7D00, +0x0181, +0xAAAA, +0x0182, +0x2806, +0xD183, +0x0184, +0x2C00, +0x0185, +0x6408, +0x0800, +0x01AD, +0x01AD, +0x0080, +0x01AF, +0x0011, +0xD9B6, +0x0807, +0x05CF, +0x33FE, +0x0C1F, +0x0C43, +0x864B, +0x0807, +0x05D2, +0x868A, +0x31A5, +0x0801, +0x0020, +0x5023, +0x134C, +0x3180, +0x2174, +0x2348, +0x558D, +0x43ED, +0x31B8, +0x0801, +0x0020, +0x5061, +0x0801, +0x00FF, +0x55A1, +0x55AC, +0x43ED, +0x31B9, +0x0800, +0x0174, +0x30AD, +0x0807, +0x05ED, +0x0C24, +0x86B5, +0x1B4C, +0x2B48, +0x0800, +0x0348, +0x0801, +0x0347, +0x0807, +0x05F6, +0x866E, +0x1B48, +0x2B4C, +0x0800, +0x0348, +0x0801, +0x0347, +0x0802, +0x0174, +0x0807, +0x0601, +0x868A, +0x0807, +0x0605, +0x0C24, +0x869C, +0x0180, +0x7D00, +0x0181, +0x5555, +0x0182, +0x1446, +0xD183, +0x0184, +0x2C00, +0x0185, +0x6408, +0x0800, +0x01AD, +0x01AD, +0x0080, +0x01AF, +0x0013, +0xD9B6, +0x0807, +0x061D, +0x33FE, +0x0C1F, +0x0C63, +0x864B, +0x19AD, +0x2B47, +0x0180, +0x7D00, +0x0181, +0x5555, +0x0182, +0x1406, +0xD183, +0x0184, +0x2C00, +0x0185, +0x6408, +0x0800, +0x01AD, +0x01AD, +0x0080, +0x01AF, +0x0013, +0xD9B6, +0x0807, +0x0637, +0x33FE, +0x0C1F, +0x0C43, +0x864B, +0x0807, +0x063A, +0x868A, +0x31A5, +0x0801, +0x0020, +0x5023, +0x134E, +0x3180, +0x2176, +0x2348, +0x558D, +0x43ED, +0x31B8, +0x0801, +0x0020, +0x5061, +0x0801, +0x00FF, +0x55A1, +0x55AC, +0x43ED, +0x31B9, +0x0800, +0x0176, +0x30AD, +0x0807, +0x0655, +0x0C24, +0x86B5, +0x1B4E, +0x2B48, +0x0800, +0x0348, +0x0801, +0x0347, +0x0807, +0x065E, +0x866E, +0x1B48, +0x2B4E, +0x0800, +0x0348, +0x0801, +0x0347, +0x0802, +0x0176, +0x0807, +0x0669, +0x868A, +0x0807, +0x066D, +0x0C24, +0x869C, +0x82E6, +0x19AD, +0x31A4, +0x3825, +0x5085, +0x31A5, +0x4225, +0x3C01, +0x338D, +0x55A5, +0xB67B, +0x330D, +0xA67E, +0x8689, +0xA682, +0x380D, +0x8689, +0x5E20, +0xB689, +0x3580, +0x8689, +0x332D, +0xA685, +0x8689, +0x5A20, +0x31A2, +0x430D, +0xA680, +0x9007, +0x080E, +0x1FE0, +0x196E, +0x33AE, +0x31A3, +0x080E, +0x1000, +0x196E, +0x33AE, +0x31A4, +0xA696, +0x869A, +0x080D, +0x0100, +0x546D, +0x31A3, +0x308D, +0x9007, +0xA6A0, +0x308D, +0xA6AA, +0x86A3, +0x308D, +0xA6A3, +0x86AA, +0x3805, +0x5065, +0x31A4, +0x430D, +0xA6B1, +0x308D, +0x86AE, +0x3805, +0x5465, +0xB6AE, +0x86B1, +0x3C02, +0x35A1, +0x86B2, +0x384D, +0x29AD, +0xD9B6, +0x9007, +0xA6B9, +0x308D, +0xA6C3, +0x86BC, +0x308D, +0xA6BC, +0x86C3, +0x3805, +0x5065, +0x31A4, +0x430D, +0xA6C9, +0x308D, +0x86C7, +0x3805, +0x5465, +0xB6C7, +0x86C9, +0x31BC, +0x86CA, +0x30BC, +0x9007, +0x0180, +0x00FF, +0x0181, +0xAAAA, +0x0182, +0x2806, +0x0183, +0x0800, +0x0184, +0x7060, +0x0185, +0x2402, +0x0160, +0x0C07, +0xD161, +0x0162, +0x00C6, +0x0163, +0x1000, +0xD164, +0x0165, +0x3000, +0x0166, +0x7828, +0x0167, +0x21A2, +0xD168, +0x1B38, +0xA712, +0x1BCC, +0x31A1, +0x1B51, +0x502D, +0x31A1, +0x0807, +0x06F0, +0x8DF4, +0xA6F3, +0x5061, +0x86F4, +0x5461, +0xB6F6, +0x86FE, +0x31A1, +0x430D, +0xA6FB, +0x302D, +0x86FF, +0x080D, +0x00FF, +0x86FF, +0x0C0D, +0x080F, +0x00FF, +0x2969, +0x33AF, +0x1BCD, +0x31A1, +0x1B52, +0x502D, +0x31A1, +0x080F, +0xFF00, +0x2969, +0x33AF, +0x6C00, +0x080E, +0xFF00, +0x197B, +0x33AE, +0x31B8, +0x0180, +0x00FF, +0x0162, +0x0084, +0x0165, +0xB000, +0x1B38, +0xA73B, +0x1B51, +0x31A1, +0x13CC, +0x0807, +0x0720, +0x8DF4, +0xA724, +0x5061, +0x558D, +0x8726, +0x506C, +0x55A1, +0x31A1, +0xB729, +0x8730, +0x430D, +0xA72D, +0x302D, +0x8731, +0x080D, +0x00FF, +0x8731, +0x0C0D, +0x080F, +0x00FF, +0x2969, +0x33AF, +0x6C00, +0x080E, +0xFF00, +0x197B, +0x33AE, +0x31B9, +0x0180, +0x00FF, +0x0181, +0x5555, +0x0182, +0x1406, +0x0162, +0x00C6, +0x0163, +0x2000, +0x0165, +0x3000, +0x080F, +0x03FF, +0xD960, +0x33AF, +0x1B38, +0xA759, +0x1352, +0x1B51, +0x55B8, +0x518D, +0x410D, +0x2969, +0x6C00, +0x080E, +0x00FF, +0x197B, +0x33AE, +0x31BA, +0x0180, +0x00FF, +0x0162, +0x0084, +0x0165, +0xB000, +0x080F, +0x03FF, +0xD960, +0x33AF, +0x1B38, +0xA793, +0x1352, +0x1B51, +0x55B9, +0x51AC, +0x410D, +0x2969, +0x6C00, +0x080E, +0x00FF, +0x197B, +0x33AE, +0x31BB, +0x0C2F, +0xDB75, +0x33AF, +0x0C6F, +0x010D, +0x0002, +0x33AF, +0xD3A6, +0x03A6, +0x000A, +0x5738, +0x424D, +0x532D, +0xD9AE, +0x29AD, +0x01AF, +0x0016, +0xD9B6, +0x577A, +0x424D, +0x536D, +0x29AD, +0x01AF, +0x0018, +0xD9B6, +0xD1AE, +0xD3A6, +0x7000, +0x0C6F, +0xD10D, +0x33AF, +0x0C2F, +0xD375, +0x33AF, +0x0180, +0x01FF, +0x0181, +0xFFFF, +0x0182, +0x3C86, +0xD183, +0x0160, +0x0C10, +0x0161, +0x0009, +0x0162, +0x00C2, +0xD163, +0xD165, +0x0166, +0x792B, +0x0168, +0x4925, +0x1B38, +0xA82D, +0x0807, +0x07AD, +0x33FE, +0x0C1F, +0x89C5, +0x1959, +0x1959, +0x31B6, +0x0807, +0x07B3, +0x8931, +0x081C, +0x0349, +0x0EA1, +0x0C17, +0x3B85, +0x080D, +0x002F, +0x5C2D, +0x54AD, +0xB7BE, +0x87F9, +0x302D, +0xA7C1, +0x87F9, +0x3B85, +0x0CED, +0x54AD, +0xA7C6, +0x87DB, +0x0DED, +0x54AD, +0xA7CA, +0x87DB, +0x0EED, +0x54AD, +0xA7CE, +0x87DB, +0x0FED, +0x54AD, +0xA7D2, +0x87DB, +0x080D, +0x0027, +0x54AD, +0xA7D7, +0x87DB, +0x5C21, +0x31A1, +0x5837, +0x31B7, +0x5A3C, +0x1B4A, +0x29B4, +0xD9B8, +0x1959, +0x1959, +0x31A2, +0x5444, +0xB7E5, +0x87F9, +0x5462, +0xB7E8, +0x87F9, +0x6620, +0x080E, +0x7FFF, +0x1988, +0x33AE, +0x31A2, +0x4022, +0x080E, +0x7FFF, +0x1986, +0x33AE, +0x31A5, +0x4025, +0x426D, +0x55A5, +0x55A2, +0xB7B7, +0x32E0, +0x3B81, +0x1B47, +0x55A1, +0xA7FF, +0x8807, +0xB802, +0x5A3C, +0x8803, +0x5E3C, +0x1B4A, +0x29B4, +0xD9B8, +0x87FA, +0x0C17, +0x1959, +0x1959, +0x31A2, +0x5444, +0xB80E, +0x8810, +0x5462, +0xB813, +0x0807, +0x0813, +0x8917, +0x1959, +0x1959, +0x31A2, +0x5444, +0xB81F, +0x5E3C, +0x1B4A, +0x29B4, +0xD9B8, +0x5E3C, +0x5857, +0x8827, +0x5462, +0xB82D, +0x5A3C, +0x1B4A, +0x29B4, +0xD9B8, +0x5A3C, +0x5840, +0x1B4A, +0x29B4, +0xD9B8, +0x0807, +0x082D, +0x8917, +0x0180, +0x01FF, +0x0182, +0x3CC6, +0x1B38, +0xA8BF, +0x0807, +0x0838, +0x33FE, +0x0C1F, +0x89C5, +0x0C2F, +0xDB75, +0x33AF, +0x0C6F, +0x010D, +0x0002, +0x33AF, +0xD3A6, +0x03A6, +0x000A, +0x5738, +0x424D, +0x55B8, +0xD9AE, +0x29AD, +0x01AF, +0x0016, +0xD9B6, +0x577A, +0x424D, +0x55BA, +0x29AD, +0x01AF, +0x0018, +0xD9B6, +0xD1AE, +0xD3A6, +0x7000, +0x0C6F, +0xD10D, +0x33AF, +0x0C2F, +0xD375, +0x33AF, +0x081C, +0x0349, +0x0EA1, +0x3B85, +0x0C0D, +0x582D, +0x55A5, +0xB863, +0x889C, +0x302D, +0xA866, +0x889C, +0x3B85, +0x0D0D, +0x54AD, +0xA86B, +0x8881, +0x0E0D, +0x54AD, +0xA86F, +0x8881, +0x0F0D, +0x54AD, +0xA873, +0x8881, +0x080D, +0x0020, +0x54AD, +0xA878, +0x8881, +0x080D, +0x0028, +0x54AD, +0xA87D, +0x8881, +0x5C21, +0x31A1, +0x5837, +0x31B7, +0x5E3C, +0x1B4A, +0x29B4, +0xD9B8, +0x1959, +0x1959, +0x31A2, +0x5444, +0xB88B, +0x889C, +0x5462, +0xB88E, +0x889C, +0x6620, +0x080E, +0x7FFF, +0x1988, +0x33AE, +0x31A2, +0x4022, +0x080E, +0x7FFF, +0x1986, +0x33AE, +0x426D, +0x544D, +0xB85D, +0x32ED, +0x300D, +0x080F, +0xFF00, +0x2BEA, +0x33AF, +0x32ED, +0x080F, +0x00FF, +0x2BEA, +0x33AF, +0x56E0, +0xB8B5, +0x5417, +0x5C2D, +0x422D, +0x31A0, +0x5C6D, +0xB8B3, +0x0C6C, +0x540C, +0x31AC, +0x88B9, +0x0C0C, +0x88BE, +0x582D, +0x422D, +0x586D, +0x31AC, +0x5D2D, +0xB8BC, +0x88BE, +0x0D2C, +0x88BE, +0x8998, +0x1B38, +0xA8D3, +0x3B8D, +0x331C, +0x31B8, +0x2B7B, +0x0807, +0x08C9, +0x32CD, +0x8931, +0x1959, +0x1959, +0x31A2, +0x5482, +0xB8D0, +0x5462, +0xB8D3, +0x0807, +0x08D3, +0x8917, +0x0807, +0x08D6, +0x8DF4, +0x31A2, +0xA8E0, +0x573C, +0xB8DC, +0x462D, +0x88DD, +0x422D, +0x532D, +0x546D, +0x88E7, +0x573C, +0xB8E4, +0x462D, +0x88E5, +0x422D, +0x532D, +0x506D, +0x31A1, +0xB8EB, +0x0C0D, +0x88F1, +0x430D, +0xA8EF, +0x302D, +0x88F1, +0x080D, +0x00FF, +0x080F, +0x00FF, +0x2BE8, +0x33AF, +0x304D, +0xA8FF, +0x577A, +0xB8FB, +0x462D, +0x88FC, +0x422D, +0x536D, +0x546D, +0x8906, +0x577A, +0xB903, +0x462D, +0x8904, +0x422D, +0x536D, +0x506D, +0x31A1, +0xB90A, +0x0C0D, +0x8910, +0x430D, +0xA90E, +0x302D, +0x8910, +0x080D, +0x00FF, +0x080F, +0xFF00, +0x2BE8, +0x33AF, +0x0C1F, +0x33FE, +0x88EC, +0x32CD, +0x2959, +0x080F, +0x0020, +0xD906, +0x33AF, +0x0E0F, +0xD106, +0x33AF, +0x0C8E, +0x1919, +0x33AE, +0xA920, +0x0E0F, +0xD906, +0x33AF, +0x0C8E, +0x1919, +0x33AE, +0xA92C, +0x8927, +0x080F, +0x0020, +0xD106, +0x33AF, +0x9007, +0x31A0, +0x0803, +0x1000, +0x546D, +0xB938, +0x0C03, +0x8939, +0x31A3, +0x0804, +0x1000, +0x5080, +0x31A0, +0x0804, +0x4000, +0x55A4, +0xB944, +0x0804, +0x4000, +0x8945, +0x3004, +0x9007, +0x1B53, +0x31A5, +0x3181, +0x302D, +0xA94C, +0x8965, +0x0CED, +0x54AD, +0xA950, +0x8963, +0x0DED, +0x54AD, +0xA954, +0x8963, +0x0EED, +0x54AD, +0xA958, +0x8963, +0x0FED, +0x54AD, +0xA95C, +0x8963, +0x080D, +0x0027, +0x54AD, +0xA961, +0x8963, +0x5C21, +0x31A1, +0x5825, +0x8949, +0x1B49, +0x31A0, +0x54AD, +0xB981, +0x5405, +0x31A1, +0x081C, +0x0349, +0x3B85, +0x080D, +0x002F, +0x5C2D, +0x54AD, +0xB974, +0x897E, +0x302D, +0xA977, +0x897E, +0x5C21, +0x31A1, +0x5A3C, +0x1B4A, +0x29B4, +0xD9B8, +0x896D, +0x0C1F, +0x33FE, +0x8721, +0x54A0, +0x31A1, +0x081C, +0x0349, +0x3B85, +0x0C0D, +0x582D, +0x55A5, +0xB98B, +0x8995, +0x302D, +0xA98E, +0x8995, +0x5C21, +0x31A1, +0x5E3C, +0x1B4A, +0x29B4, +0xD9B8, +0x8985, +0x0C1F, +0x33FE, +0x8721, +0x1B53, +0x31A5, +0x3181, +0x302D, +0xA99E, +0x89B7, +0x0CED, +0x54AD, +0xA9A2, +0x89B5, +0x0DED, +0x54AD, +0xA9A6, +0x89B5, +0x0EED, +0x54AD, +0xA9AA, +0x89B5, +0x0FED, +0x54AD, +0xA9AE, +0x89B5, +0x080D, +0x0027, +0x54AD, +0xA9B3, +0x89B5, +0x5C21, +0x31A1, +0x5825, +0x899B, +0x1B49, +0x31A0, +0x54AD, +0xB9D1, +0x5405, +0x31A1, +0x081C, +0x0349, +0x3B85, +0x080D, +0x002F, +0x5C2D, +0x54AD, +0xB9C6, +0x89D0, +0x302D, +0xA9C9, +0x89D0, +0x5C21, +0x31A1, +0x5A3C, +0x1B4A, +0x29B4, +0xD9B8, +0x89BF, +0x88BF, +0x54A0, +0x31A1, +0x081C, +0x0349, +0x3B85, +0x0C0D, +0x582D, +0x55A5, +0xB9DB, +0x89E5, +0x302D, +0xA9DE, +0x89E5, +0x5C21, +0x31A1, +0x5E3C, +0x1B4A, +0x29B4, +0xD9B8, +0x89D5, +0x88BF, +0x0180, +0x00FF, +0x0181, +0xAAAA, +0x0182, +0x2806, +0x0183, +0x0800, +0x0184, +0x7060, +0x0185, +0x2402, +0x300D, +0x080F, +0x03E0, +0x2982, +0x33AF, +0x0FEF, +0x0182, +0x0006, +0x33AF, +0x080F, +0x0800, +0xD183, +0x33AF, +0x0160, +0x0C07, +0xD161, +0x0162, +0x00C6, +0x0163, +0x1000, +0xD164, +0x0165, +0x3000, +0x0166, +0x7828, +0x0167, +0x21A2, +0xD168, +0x302D, +0x080F, +0xF000, +0x2965, +0x33AF, +0x304D, +0x080F, +0x03FF, +0x2960, +0x33AF, +0x306D, +0xAA4B, +0x300D, +0x5CCD, +0xAA1E, +0x8A21, +0x300D, +0x5C4D, +0xAA33, +0x1B51, +0x13CC, +0x518D, +0x31B7, +0x430D, +0xAA2B, +0x32ED, +0xBA2D, +0x0C17, +0x8A2D, +0x0817, +0x00FF, +0x32ED, +0x080F, +0x00FF, +0x2969, +0x33AF, +0x8A50, +0x300D, +0x5C8D, +0xAA37, +0x8A39, +0x300D, +0xAA50, +0x1B51, +0x13CC, +0x558D, +0x31B7, +0xBA40, +0x0C17, +0x8A45, +0x430D, +0xAA43, +0x8A45, +0x0817, +0x00FF, +0x32ED, +0x080F, +0x00FF, +0x2969, +0x33AF, +0x8A50, +0x308D, +0x080F, +0x00FF, +0x2969, +0x33AF, +0x6C00, +0x080E, +0xFF00, +0x197B, +0x33AE, +0x0C1F, +0x9007, +0x0180, +0x00FF, +0x0181, +0x5555, +0x0182, +0x1406, +0x0183, +0x0800, +0x0184, +0x7060, +0x0185, +0x2402, +0x300D, +0x080F, +0x03E0, +0x2982, +0x33AF, +0x0FEF, +0x0182, +0x0006, +0x33AF, +0x080F, +0x0800, +0xD183, +0x33AF, +0x0160, +0x0C07, +0xD161, +0x0162, +0x00C6, +0x0163, +0x2000, +0xD164, +0x0165, +0x3000, +0x0166, +0x7828, +0x0167, +0x21A2, +0xD168, +0x302D, +0x080F, +0xF000, +0x2965, +0x33AF, +0x304D, +0x080F, +0x03FF, +0x2960, +0x33AF, +0x306D, +0xAABC, +0x300D, +0x5CCD, +0xAA8F, +0x8A92, +0x300D, +0x5C4D, +0xAAA4, +0x1B52, +0x13CD, +0x518D, +0x31B7, +0x430D, +0xAA9C, +0x32ED, +0xBA9E, +0x0C17, +0x8A9E, +0x0817, +0x00FF, +0x32ED, +0x080F, +0xFF00, +0x2969, +0x33AF, +0x8AC1, +0x300D, +0x5C8D, +0xAAA8, +0x8AAA, +0x300D, +0xAAC1, +0x1B52, +0x13CD, +0x558D, +0x31B7, +0xBAB1, +0x0C17, +0x8AB6, +0x430D, +0xAAB4, +0x8AB6, +0x0817, +0x00FF, +0x32ED, +0x080F, +0xFF00, +0x2969, +0x33AF, +0x8AC1, +0x308D, +0x080F, +0xFF00, +0x2969, +0x33AF, +0x6C00, +0x080E, +0x00FF, +0x197B, +0x33AE, +0x0C1F, +0x9007, +0x0800, +0x00F5, +0x5418, +0xBACF, +0x5419, +0xBACF, +0x8AD5, +0x080F, +0x1C00, +0x03F6, +0x0003, +0x33AF, +0x8AE3, +0x541A, +0xBADE, +0x541B, +0xBADE, +0x080F, +0x1C00, +0xD3F6, +0x33AF, +0x8AE3, +0x080F, +0x1C00, +0x03F6, +0x0005, +0x33AF, +0x0800, +0x00F5, +0x5418, +0xBAEA, +0x541A, +0xBAEA, +0x8AF3, +0x5419, +0xBAF3, +0x541B, +0xBAF3, +0x080F, +0x6000, +0xDBF6, +0x33AF, +0x8B0F, +0x5419, +0xBAF8, +0x541B, +0xBAF8, +0x8B02, +0x5418, +0xBB02, +0x541A, +0xBB02, +0x080F, +0x6000, +0x03F6, +0x0002, +0x33AF, +0x8B0F, +0x571A, +0xBB06, +0x3302, +0x8B07, +0x3342, +0x573B, +0xBB0B, +0x3323, +0x8B0C, +0x3363, +0x5443, +0xBAFC, +0x8AEE, +0x0C1F, +0x9007, +0x080E, +0x6000, +0x1BF6, +0x33AE, +0x5C2D, +0xAB1C, +0x1352, +0x5379, +0x422D, +0x558D, +0x8B27, +0x080E, +0x6000, +0x1BF6, +0x33AE, +0x5C4D, +0xAB27, +0x1351, +0x5358, +0x422D, +0x558D, +0x8B27, +0xBB2C, +0x410D, +0x430D, +0x31B7, +0x8B32, +0x31B7, +0x430D, +0xAB30, +0x8B32, +0x0817, +0x00FF, +0x0C1F, +0x9007, +0x080E, +0x00FF, +0x196B, +0x33AE, +0x42AD, +0x0CEF, +0x290B, +0x33AF, +0x080E, +0x03E0, +0x196D, +0x33AE, +0x080F, +0xF800, +0x290B, +0x33AF, +0x080E, +0x1C00, +0x196D, +0x33AE, +0x0CEF, +0x290C, +0x33AF, +0x080E, +0x03C0, +0x196C, +0x33AE, +0x31A0, +0x080F, +0x0078, +0x290B, +0x33AF, +0x080E, +0x003F, +0x196C, +0x33AE, +0xAB5A, +0x8B5C, +0x5820, +0x31A0, +0x300D, +0x080F, +0x0780, +0x290B, +0x33AF, +0x32ED, +0x080F, +0x07F8, +0x290C, +0x33AF, +0x080E, +0x0FFF, +0x196F, +0x33AE, +0x42AD, +0x080F, +0x007F, +0x291A, +0x33AF, +0x080E, +0x0FFF, +0x1970, +0x33AE, +0x42AD, +0x080F, +0x3F80, +0x291A, +0x33AF, +0x080E, +0x0FFF, +0x1971, +0x33AE, +0x42AD, +0x080F, +0x007F, +0x291B, +0x33AF, +0x080E, +0x0FFF, +0x1972, +0x33AE, +0x42AD, +0x080F, +0x3F80, +0x291B, +0x33AF, +0x080F, +0x0800, +0xD90C, +0x33AF, +0x0C4F, +0xD90D, +0x33AF, +0x0306, +0x000C, +0x0C2E, +0x1919, +0x33AE, +0xAB98, +0x8B93, +0x0306, +0x0008, +0x080F, +0x0800, +0xD10C, +0x33AF, +0x0C4F, +0xD10D, +0x33AF, +0x0C1F, +0x9007, +0x080E, +0x0020, +0x1B6F, +0x33AE, +0xABF4, +0x8BF7, +0x1B53, +0x31A1, +0x1B49, +0x31B7, +0x0802, +0x0349, +0x0C25, +0x0807, +0x0BB3, +0x8C0F, +0x0180, +0x003F, +0x0181, +0xAAAA, +0x0182, +0x2802, +0x0183, +0x0800, +0x0184, +0x7060, +0x0185, +0x2402, +0x0807, +0x0BC4, +0x33FE, +0x0C1F, +0x89C5, +0x0160, +0x0C07, +0xD161, +0x0162, +0x0042, +0x0163, +0x3000, +0xD164, +0x0165, +0x3000, +0x0166, +0x7828, +0x0167, +0x21A2, +0xD168, +0x330D, +0x410D, +0x530D, +0x2969, +0x6E00, +0x197B, +0x430D, +0x31BA, +0xD162, +0x0165, +0xB000, +0x332D, +0x410D, +0x532D, +0x2969, +0x6E00, +0x197B, +0x430D, +0x31BB, +0x577A, +0xBBE9, +0x0C0D, +0x080F, +0x00FF, +0x2BE9, +0x33AE, +0x32E1, +0x0C05, +0x0802, +0x0349, +0x0807, +0x0BF4, +0x8C0F, +0x33FE, +0x0C1F, +0x87EA, +0x1BF2, +0x5C4D, +0xABFD, +0x1B52, +0x13CD, +0x8BFF, +0x1B51, +0x13CC, +0x31A1, +0x518D, +0x31A0, +0x430D, +0xAC06, +0x300D, +0x8C08, +0x080D, +0x00FF, +0x31B8, +0x302D, +0x558D, +0xBC0D, +0x0C0D, +0x31B9, +0x8BA9, +0x1B49, +0x31A0, +0x30AD, +0xAC18, +0x5401, +0xAC16, +0x8C24, +0xBC1D, +0x8C24, +0x5420, +0xAC1B, +0x8C24, +0xBC1F, +0x8C24, +0x5A22, +0x8C20, +0x5E22, +0x1B4A, +0x29B4, +0xD9B8, +0x8C0F, +0x9007, +0x080F, +0xFF00, +0xD3E9, +0x33AF, +0x080E, +0x00FF, +0x13E8, +0x33AE, +0x0D4D, +0x518D, +0x31A2, +0x080E, +0xFF00, +0x13E8, +0x33AE, +0x0D4D, +0x518D, +0x31A5, +0x0807, +0x0C3A, +0x8DF4, +0xAC40, +0x5062, +0x31A2, +0x5065, +0x31A5, +0x8C48, +0x5462, +0x31A2, +0xBC44, +0x0C02, +0x5465, +0x31A5, +0xBC48, +0x0C05, +0x304D, +0x430D, +0xAC4C, +0x8C4E, +0x0802, +0x00FF, +0x30AD, +0x430D, +0xAC52, +0x8C54, +0x0805, +0x00FF, +0x0807, +0x0C57, +0x8CCB, +0x0800, +0x0349, +0x0802, +0x034A, +0x0803, +0x01B4, +0x3818, +0x0C01, +0x0CA4, +0x0C37, +0x0807, +0x0C64, +0x8D18, +0x080F, +0x03E0, +0x0182, +0x0006, +0x33AF, +0x0807, +0x0C6C, +0x8CD9, +0x080E, +0x00FF, +0x13E8, +0x33AE, +0x0D4D, +0x55AC, +0x31A2, +0x080E, +0xFF00, +0x13E8, +0x33AE, +0x0D4D, +0x55AC, +0x31A5, +0x0807, +0x0C7D, +0x8DF4, +0xAC83, +0x5062, +0x31A2, +0x5065, +0x31A5, +0x8C8B, +0x5462, +0x31A2, +0xBC87, +0x0C02, +0x5465, +0x31A5, +0xBC8B, +0x0C05, +0x0C0D, +0x304D, +0x43ED, +0xAC96, +0x304D, +0x430D, +0xAC93, +0x8C97, +0x0802, +0x00FF, +0x8C97, +0x0C02, +0x30AD, +0x43ED, +0xACA1, +0x30AD, +0x430D, +0xAC9E, +0x8CA2, +0x0805, +0x00FF, +0x8CA2, +0x0C05, +0x0807, +0x0CA5, +0x8CCB, +0x0800, +0x0349, +0x0802, +0x034A, +0x0803, +0x01B4, +0x3818, +0x0801, +0x002F, +0x0D44, +0x0C17, +0x0807, +0x0CB3, +0x8D18, +0x080F, +0x03E0, +0x0182, +0x0004, +0x33AF, +0x0807, +0x0CBB, +0x8CD9, +0x0800, +0x0349, +0x0802, +0x034A, +0x0803, +0x01B4, +0x3818, +0x0C01, +0x0CA4, +0x0C37, +0x0807, +0x0CC8, +0x8D18, +0x33FE, +0x0C1F, +0x896A, +0xD9AE, +0x01AF, +0x0016, +0x304D, +0x29AD, +0xD9B6, +0x01AF, +0x0018, +0x30AD, +0x29AD, +0xD9B6, +0x700F, +0xD1AE, +0x9007, +0x080F, +0x7FFF, +0x0180, +0x07CF, +0x33AF, +0x0181, +0xFFFF, +0x0FEF, +0x0182, +0x0006, +0x080F, +0x4000, +0xD984, +0x080F, +0x1C00, +0x0184, +0x0004, +0x080F, +0x0020, +0xD984, +0x0F0F, +0xD184, +0x33AF, +0x080F, +0x03C0, +0xD184, +0x33AF, +0x080F, +0x0800, +0xD183, +0x33AF, +0x0E81, +0x6660, +0x080E, +0x7FFF, +0x198A, +0x33AE, +0x31A2, +0x080E, +0x7FFF, +0x1986, +0x33AE, +0x544D, +0x31A2, +0x080E, +0xFF00, +0x1BE9, +0x33AE, +0x504D, +0x31A2, +0x430D, +0xAD0E, +0x8D10, +0x0802, +0x00FF, +0x304D, +0x080F, +0xFF00, +0x2BE9, +0x33AF, +0x5C21, +0xACF9, +0x9007, +0x3805, +0x0CED, +0x52ED, +0x54AD, +0xAD1E, +0x8D39, +0x0DED, +0x52ED, +0x54AD, +0xAD23, +0x8D39, +0x0EED, +0x52ED, +0x54AD, +0xAD28, +0x8D39, +0x0FED, +0x52ED, +0x54AD, +0xAD2D, +0x8D39, +0x080D, +0x0027, +0x52ED, +0x54AD, +0xAD33, +0x8D39, +0x308D, +0xAD36, +0x8D46, +0x5C24, +0x31A4, +0x8D3E, +0x32ED, +0xAD3E, +0x308D, +0xAD3E, +0x8D46, +0x32ED, +0xAD42, +0x5A20, +0x8D43, +0x5E20, +0x3C43, +0xD9B8, +0x8D18, +0x9007, +0x1959, +0x1959, +0x31A1, +0x0800, +0x3000, +0x5401, +0xBD54, +0x0800, +0x1000, +0x5420, +0xBD54, +0x0C25, +0x8D5C, +0x1B5E, +0xAD59, +0x0807, +0x0D59, +0x8917, +0x0C05, +0x0C04, +0x8DEC, +0x080E, +0x00FF, +0x1BE9, +0x33AE, +0x31A0, +0x080E, +0xFF00, +0x13EA, +0x080E, +0x00FF, +0x1BEA, +0x33AE, +0x51AC, +0xBD6C, +0x0C01, +0x8D73, +0x31A1, +0x0804, +0x002A, +0x55A4, +0xBD73, +0x0801, +0x002A, +0x302D, +0x080F, +0x00FF, +0x2BEB, +0x33AF, +0x0807, +0x0D7B, +0x8DF4, +0xAD7E, +0x0C03, +0x8D7F, +0x4223, +0x080E, +0x0FE0, +0x196F, +0x33AE, +0x31A2, +0x0804, +0x0040, +0x5482, +0xBD89, +0x0C0D, +0x31A2, +0x4222, +0x5062, +0x55A0, +0x31A0, +0x0C04, +0x0C2E, +0x1BEB, +0xAD93, +0x8D96, +0x300D, +0x51A4, +0x31A4, +0x0C4E, +0x1BEB, +0xAD9A, +0x8D9E, +0x300D, +0x442D, +0x51A4, +0x31A4, +0x0C8E, +0x1BEB, +0xADA2, +0x8DA6, +0x300D, +0x444D, +0x51A4, +0x31A4, +0x0D0E, +0x1BEB, +0xADAA, +0x8DAE, +0x300D, +0x446D, +0x51A4, +0x31A4, +0x0E0E, +0x1BEB, +0xADB2, +0x8DB6, +0x300D, +0x448D, +0x51A4, +0x31A4, +0x080E, +0x0020, +0x1BEB, +0xADBB, +0x8DBF, +0x300D, +0x44AD, +0x51A4, +0x31A4, +0x33AE, +0x308D, +0x46AD, +0x31A4, +0x080E, +0xFF00, +0x1BE9, +0x33AE, +0x31A1, +0x1B5E, +0xADDC, +0x0CA0, +0x5401, +0xBDD0, +0x0805, +0x0060, +0x8DDD, +0x0D40, +0x5401, +0xBDD6, +0x0805, +0x0040, +0x8DDD, +0x0DE0, +0x5401, +0xBDDC, +0x0805, +0x0020, +0x8DDD, +0x0C05, +0x5085, +0x31A4, +0x0C0D, +0x308D, +0x43ED, +0xADE4, +0x8DE6, +0x0C04, +0x8DEC, +0x308D, +0x430D, +0xADEA, +0x8DEC, +0x0804, +0x00FF, +0x1B5E, +0xADF2, +0x308D, +0x33FE, +0x0C1F, +0x8972, +0x308D, +0x8048, +0x080E, +0x1FE0, +0x196E, +0x33AE, +0x31A3, +0x080E, +0x1000, +0x196E, +0x33AE, +0x31A4, +0xAE00, +0x8E04, +0x080D, +0x0100, +0x546D, +0x31A3, +0x308D, +0x9007, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000 diff --git a/lede/target/linux/rockchip/patches-6.6/700-phy-rockchip-snps-pcie3-rk3568-update-fw-when-init.patch b/lede/target/linux/rockchip/patches-6.6/700-phy-rockchip-snps-pcie3-rk3568-update-fw-when-init.patch new file mode 100644 index 0000000000..f587f5d671 --- /dev/null +++ b/lede/target/linux/rockchip/patches-6.6/700-phy-rockchip-snps-pcie3-rk3568-update-fw-when-init.patch @@ -0,0 +1,92 @@ +From 91802f44a959582842bdbbd0190e68337ad4c60c Mon Sep 17 00:00:00 2001 +From: Kever Yang +Date: Mon, 11 Jul 2022 20:35:52 +0800 +Subject: [PATCH] phy: rockchip-snps-pcie3: rk3568: update fw when init + +This fw fix some RX issue: +1. connect detect error; +2. transfer error in ssd huge data write(more than 10GB). + +Signed-off-by: Kever Yang +Change-Id: I6624b6af2ede3c2fca61c0f753a08a33ce69a6d2 +--- + drivers/phy/phy-rockchip-snps-pcie3.c | 36 +- + drivers/phy/phy-rockchip-snps-pcie3.fw | 8192 ++++++++++++++++++++++++ + 2 files changed, 8225 insertions(+), 3 deletions(-) + create mode 100644 drivers/phy/phy-rockchip-snps-pcie3.fw + +--- a/drivers/phy/rockchip/phy-rockchip-snps-pcie3.c ++++ b/drivers/phy/rockchip/phy-rockchip-snps-pcie3.c +@@ -21,6 +21,7 @@ + + /* Register for RK3568 */ + #define GRF_PCIE30PHY_CON1 0x4 ++#define GRF_PCIE30PHY_CON4 0x10 + #define GRF_PCIE30PHY_CON6 0x18 + #define GRF_PCIE30PHY_CON9 0x24 + #define GRF_PCIE30PHY_DA_OCM (BIT(15) | BIT(31)) +@@ -73,6 +74,10 @@ struct rockchip_p3phy_ops { + int (*phy_init)(struct rockchip_p3phy_priv *priv); + }; + ++static u16 phy_fw[] = { ++ #include "p3phy.fw" ++}; ++ + static int rockchip_p3phy_set_mode(struct phy *phy, enum phy_mode mode, int submode) + { + struct rockchip_p3phy_priv *priv = phy_get_drvdata(phy); +@@ -97,13 +102,14 @@ static int rockchip_p3phy_rk3568_init(st + { + struct phy *phy = priv->phy; + bool bifurcation = false; ++ int i; + int ret; + u32 reg; + + /* Deassert PCIe PMA output clamp mode */ + regmap_write(priv->phy_grf, GRF_PCIE30PHY_CON9, GRF_PCIE30PHY_DA_OCM); + +- for (int i = 0; i < priv->num_lanes; i++) { ++ for (i = 0; i < priv->num_lanes; i++) { + dev_info(&phy->dev, "lane number %d, val %d\n", i, priv->lanes[i]); + if (priv->lanes[i] > 1) + bifurcation = true; +@@ -122,16 +128,35 @@ static int rockchip_p3phy_rk3568_init(st + GRF_PCIE30PHY_WR_EN & ~RK3568_BIFURCATION_LANE_0_1); + } + ++ regmap_write(priv->phy_grf, GRF_PCIE30PHY_CON4, ++ (0x0 << 14) | (0x1 << (14 + 16))); //sdram_ld_done ++ regmap_write(priv->phy_grf, GRF_PCIE30PHY_CON4, ++ (0x0 << 13) | (0x1 << (13 + 16))); //sdram_bypass ++ + reset_control_deassert(priv->p30phy); + + ret = regmap_read_poll_timeout(priv->phy_grf, + GRF_PCIE30PHY_STATUS0, + reg, SRAM_INIT_DONE(reg), + 0, 500); +- if (ret) ++ if (ret) { + dev_err(&priv->phy->dev, "%s: lock failed 0x%x, check input refclk and power supply\n", + __func__, reg); +- return ret; ++ return ret; ++ } ++ ++ regmap_write(priv->phy_grf, GRF_PCIE30PHY_CON9, ++ (0x3 << 8) | (0x3 << (8 + 16))); //map to access sram ++ for (i = 0; i < 8192; i++) ++ writel(phy_fw[i], priv->mmio + (i<<2)); ++ ++ regmap_write(priv->phy_grf, GRF_PCIE30PHY_CON9, ++ (0x0 << 8) | (0x3 << (8 + 16))); ++ regmap_write(priv->phy_grf, GRF_PCIE30PHY_CON4, ++ (0x1 << 14) | (0x1 << (14 + 16))); //sdram_ld_done ++ ++ dev_info(&priv->phy->dev, "p3phy (fw-d54d0eb) initialized\n"); ++ return 0; + } + + static const struct rockchip_p3phy_ops rk3568_ops = { diff --git a/mihomo/adapter/outbound/util.go b/mihomo/adapter/outbound/util.go index ea39db1f5d..f84193a5bb 100644 --- a/mihomo/adapter/outbound/util.go +++ b/mihomo/adapter/outbound/util.go @@ -54,6 +54,8 @@ func resolveUDPAddr(ctx context.Context, network, address string, prefer C.DNSPr if err != nil { return nil, err } + + ip, port = resolver.LookupIP4P(ip, port) return net.ResolveUDPAddr(network, net.JoinHostPort(ip.String(), port)) } diff --git a/mihomo/component/dialer/dialer.go b/mihomo/component/dialer/dialer.go index 0ecccdf8cf..6e1f242661 100644 --- a/mihomo/component/dialer/dialer.go +++ b/mihomo/component/dialer/dialer.go @@ -7,14 +7,12 @@ import ( "net" "net/netip" "os" - "strconv" "strings" "sync" "time" "github.com/metacubex/mihomo/component/keepalive" "github.com/metacubex/mihomo/component/resolver" - "github.com/metacubex/mihomo/log" ) const ( @@ -138,9 +136,7 @@ func GetTcpConcurrent() bool { func dialContext(ctx context.Context, network string, destination netip.Addr, port string, opt *option) (net.Conn, error) { var address string - if IP4PEnable { - destination, port = lookupIP4P(destination, port) - } + destination, port = resolver.LookupIP4P(destination, port) address = net.JoinHostPort(destination.String(), port) netDialer := opt.netDialer @@ -396,21 +392,3 @@ func NewDialer(options ...Option) Dialer { opt := applyOptions(options...) return Dialer{Opt: *opt} } - -func GetIP4PEnable(enableIP4PConvert bool) { - IP4PEnable = enableIP4PConvert -} - -// kanged from https://github.com/heiher/frp/blob/ip4p/client/ip4p.go - -func lookupIP4P(addr netip.Addr, port string) (netip.Addr, string) { - ip := addr.AsSlice() - if ip[0] == 0x20 && ip[1] == 0x01 && - ip[2] == 0x00 && ip[3] == 0x00 { - addr = netip.AddrFrom4([4]byte{ip[12], ip[13], ip[14], ip[15]}) - port = strconv.Itoa(int(ip[10])<<8 + int(ip[11])) - log.Debugln("Convert IP4P address %s to %s", ip, net.JoinHostPort(addr.String(), port)) - return addr, port - } - return addr, port -} diff --git a/mihomo/component/resolver/ip4p.go b/mihomo/component/resolver/ip4p.go new file mode 100644 index 0000000000..e910929a3d --- /dev/null +++ b/mihomo/component/resolver/ip4p.go @@ -0,0 +1,37 @@ +package resolver + +import ( + "net" + "net/netip" + "strconv" + + "github.com/metacubex/mihomo/log" +) + +var ( + ip4PEnable bool +) + +func GetIP4PEnable() bool { + return ip4PEnable +} + +func SetIP4PEnable(enableIP4PConvert bool) { + ip4PEnable = enableIP4PConvert +} + +// kanged from https://github.com/heiher/frp/blob/ip4p/client/ip4p.go + +func LookupIP4P(addr netip.Addr, port string) (netip.Addr, string) { + if ip4PEnable { + ip := addr.AsSlice() + if ip[0] == 0x20 && ip[1] == 0x01 && + ip[2] == 0x00 && ip[3] == 0x00 { + addr = netip.AddrFrom4([4]byte{ip[12], ip[13], ip[14], ip[15]}) + port = strconv.Itoa(int(ip[10])<<8 + int(ip[11])) + log.Debugln("Convert IP4P address %s to %s", ip, net.JoinHostPort(addr.String(), port)) + return addr, port + } + } + return addr, port +} diff --git a/mihomo/hub/executor/executor.go b/mihomo/hub/executor/executor.go index 3fed360c90..d046223e72 100644 --- a/mihomo/hub/executor/executor.go +++ b/mihomo/hub/executor/executor.go @@ -221,7 +221,7 @@ func updateExperimental(c *config.Experimental) { if c.QUICGoDisableECN { _ = os.Setenv("QUIC_GO_DISABLE_ECN", strconv.FormatBool(true)) } - dialer.GetIP4PEnable(c.IP4PEnable) + resolver.SetIP4PEnable(c.IP4PEnable) } func updateNTP(c *config.NTP) { diff --git a/openwrt-passwall2/luci-app-passwall2/Makefile b/openwrt-passwall2/luci-app-passwall2/Makefile index aeab088bd0..24180c5d27 100644 --- a/openwrt-passwall2/luci-app-passwall2/Makefile +++ b/openwrt-passwall2/luci-app-passwall2/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall2 -PKG_VERSION:=25.4.1 +PKG_VERSION:=25.4.11 PKG_RELEASE:=1 PKG_CONFIG_DEPENDS:= \ diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/hysteria2.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/hysteria2.lua index 3f1e283637..7b6bd7d1ff 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/hysteria2.lua +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/hysteria2.lua @@ -26,7 +26,8 @@ o = s:option(Value, _n("address"), translate("Address (Support Domain Name)")) o = s:option(Value, _n("port"), translate("Port")) o.datatype = "port" -o = s:option(Value, _n("hop"), translate("Additional ports for hysteria hop")) +o = s:option(Value, _n("hop"), translate("Port hopping range")) +o.description = translate("Format as 1000:2000 or 1000-2000 Multiple groups are separated by commas (,).") o.rewrite_option = o.option o = s:option(Value, _n("obfs"), translate("Obfs Password")) diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua index 64bf75712a..3becc9cc79 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua @@ -31,6 +31,9 @@ local xray_version = api.get_app_version("xray") -- [[ Xray ]] s.fields["type"]:value(type_name, "Xray") +if not s.fields["type"].default then + s.fields["type"].default = type_name +end o = s:option(ListValue, _n("protocol"), translate("Protocol")) o:value("vmess", translate("Vmess")) @@ -631,6 +634,7 @@ o = s:option(Flag, _n("xmux"), "XUDP Mux") o.default = 1 o:depends({ [_n("protocol")] = "vless", [_n("flow")] = "xtls-rprx-vision" }) o:depends({ [_n("protocol")] = "vless", [_n("flow")] = "xtls-rprx-vision-udp443" }) +o:depends({ [_n("protocol")] = "shadowsocks" }) o = s:option(Value, _n("xudp_concurrency"), translate("XUDP Mux concurrency")) o.default = 8 diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua index a5da553a62..3859e57ce9 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua @@ -33,6 +33,9 @@ local security_list = { "none", "auto", "aes-128-gcm", "chacha20-poly1305", "zer -- [[ sing-box ]] s.fields["type"]:value(type_name, translate("Sing-Box")) +if not s.fields["type"].default then + s.fields["type"].default = type_name +end o = s:option(ListValue, _n("protocol"), translate("Protocol")) o:value("socks", "Socks") @@ -401,8 +404,8 @@ if singbox_tags:find("with_quic") then end if singbox_tags:find("with_quic") then - o = s:option(Value, _n("hysteria2_ports"), translate("Port hopping range")) - o.description = translate("Format as 1000:2000 Multiple groups are separated by commas (,).") + o = s:option(Value, _n("hysteria2_hop"), translate("Port hopping range")) + o.description = translate("Format as 1000:2000 or 1000-2000 Multiple groups are separated by commas (,).") o:depends({ [_n("protocol")] = "hysteria2" }) o = s:option(Value, _n("hysteria2_up_mbps"), translate("Max upload Mbps")) diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua index 9cc5cbdb18..08246bfc56 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua @@ -25,6 +25,9 @@ local header_type_list = { -- [[ Xray ]] s.fields["type"]:value(type_name, "Xray") +if not s.fields["type"].default then + s.fields["type"].default = type_name +end o = s:option(ListValue, _n("protocol"), translate("Protocol")) o:value("vmess", "Vmess") diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/sing-box.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/sing-box.lua index cafa4b583d..dbb4138c17 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/sing-box.lua +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/sing-box.lua @@ -26,6 +26,9 @@ local ss_method_list = { -- [[ Sing-Box ]] s.fields["type"]:value(type_name, "Sing-Box") +if not s.fields["type"].default then + s.fields["type"].default = type_name +end o = s:option(ListValue, _n("protocol"), translate("Protocol")) o:value("mixed", "Mixed") diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_hysteria2.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_hysteria2.lua index 1d084a8620..2065cb01a1 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_hysteria2.lua +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_hysteria2.lua @@ -54,7 +54,7 @@ function gen_config(var) local server = server_host .. ":" .. server_port if (node.hysteria2_hop) then - server = server .. "," .. node.hysteria2_hop + server = server .. "," .. string.gsub(node.hysteria2_hop, ":", "-") end local config = { diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua index 99590a809b..06ebb558bd 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua @@ -350,8 +350,9 @@ function gen_outbound(flag, node, tag, proxy_table) if node.protocol == "hysteria2" then local server_ports = {} - if node.hysteria2_ports then - for range in node.hysteria2_ports:gmatch("([^,]+)") do + if node.hysteria2_hop then + node.hysteria2_hop = string.gsub(node.hysteria2_hop, "-", ":") + for range in node.hysteria2_hop:gmatch("([^,]+)") do if range:match("^%d+:%d+$") then table.insert(server_ports, range) end diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/link_add_node.htm b/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/link_add_node.htm index 6a1bec7e79..1a42aa8eda 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/link_add_node.htm +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/link_add_node.htm @@ -2,22 +2,6 @@ local api = require "luci.passwall2.api" -%> - -