Commit graph

180 commits

Author SHA1 Message Date
google-labs-jules[bot]
516c653868 Bolt: optimize lot calculation and margin checks
Optimized the `CalculateLots` function in `SMC_TrendBreakout_MTF_EA.mq5` by:
1. Pre-calculating the inverse of `SYMBOL_MARGIN_INITIAL` in `OnInit` to replace division with multiplication.
2. Refactoring the logic flow to apply margin constraints before normalization and clamping.
3. Consolidating redundant `MathFloor`, `MathMax`, and `MathMin` calls into a single execution path.

This reduces the computational overhead of lot sizing, especially when margin limits are approached, and improves code readability.
2026-02-08 17:21:22 +00:00
GenX FX Trading System
fc477b1b7e
Merge pull request #269 from A6-9V/copilot/investigate-and-fix-issue
Fix GitHub Pages sync workflow authentication failure
2026-02-08 09:11:27 +07:00
copilot-swe-agent[bot]
e40b6c3092 Security: Remove exposed credentials from documentation
- Redact plaintext password from GITHUB_CI_CD_SETUP.md
- Replace specific email with generic placeholder
- Enhance security warning about password usage

Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-02-07 16:07:44 +00:00
copilot-swe-agent[bot]
335a79e43d Fix GitHub Pages sync authentication failure
- Replace GITHUB_TOKEN with PAGES_SYNC_TOKEN for external repo access
- Add graceful degradation when token is not configured
- Add setup documentation in GITHUB_PAGES_SYNC_SETUP.md
- Update GITHUB_CI_CD_SETUP.md with token configuration steps

Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-02-07 16:06:59 +00:00
copilot-swe-agent[bot]
843bad1e24 Initial plan 2026-02-07 16:04:52 +00:00
GenX FX Trading System
5bbbb44ad6
Merge pull request #268 from A6-9V/bolt-cache-daily-limits-mql5-9539631333042754457
 Bolt: Cache daily limits and optimize time calls
2026-02-07 20:32:43 +07:00
google-labs-jules[bot]
393b3ffb39 Bolt: Cache daily limits and optimize time calls in ExpertMAPSARSizeOptimized_Improved.mq5
This commit implements significant performance optimizations in the OnTick execution path of the Expert Advisor:
- Caches daily loss and profit limits in currency units (g_maxDailyLossCurrency, g_maxDailyProfitCurrency) to avoid redundant AccountInfoDouble(ACCOUNT_BALANCE) calls and divisions on every tick.
- Refactors IsTradingAllowed and UpdateDailyStatistics to accept an optional datetime parameter, allowing OnTick to pass a pre-fetched TimeCurrent() value and reducing redundant system calls.
- Preserves standard risk management behavior by updating cached limits whenever statistics are refreshed (init, rollover, trades, and timer).

Verified with scripts/ci_validate_repo.py and scripts/test_automation.py.
2026-02-07 11:45:48 +00:00
GenX FX Trading System
f4add9419b
Merge pull request #260 from A6-9V/bolt-optimize-smc-indicator-7658633191701039174
 Bolt: Optimized SMC_TrendBreakout_MTF indicator performance
2026-02-07 00:03:07 +07:00
google-labs-jules[bot]
f2fb340adf Bolt: Optimized SMC_TrendBreakout_MTF indicator performance
This optimization improves the execution efficiency of the `SMC_TrendBreakout_MTF` indicator by:
- Replacing the manual buffer clearing loop in `OnCalculate()` with the native `ArrayFill()` function.
- Replacing the `CopyTime()` call in `GetMTFDir()` with the lighter `iTime()` function for MTF bar timestamp checks.
- Refactoring input-based logic (Donchian lookback and signal bar index) into global cached variables initialized in `OnInit()`, avoiding redundant calculations on every new bar.

These changes reduce CPU overhead and improve the indicator's responsiveness, especially when attached to multiple charts or using lower timeframe confirmations.

Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-02-06 10:52:52 +00:00
GenX FX Trading System
382a5e492c
Bolt: optimize EA execution path and lot calculation (#254)
- Pre-calculated constants in OnInit() to replace recurring divisions and point-conversions in the trade execution path.
- Optimized CalculateLots(), CalculateSL(), and CalculateTP() by using pre-calculated factors and inverses.
- Consolidated lot limit checks into a single range check.
- Reduced mathematical operations in OnTick() and trade functions.
- Verified with repository CI and automation test scripts.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-02-05 02:53:34 +07:00
GenX FX Trading System
86e47bfb7e
Merge pull request #250 from A6-9V/bolt-optimize-history-time-mql5-7652163837873846593
 Bolt: Optimized history processing and time calculations in ExpertMAPSARSizeOptimized_Improved
2026-02-04 18:29:17 +07:00
google-labs-jules[bot]
2cf5af9902 Bolt: Optimized history processing and time calculations in ExpertMAPSARSizeOptimized_Improved
- Replaced expensive TimeToStruct and StructToTime calls with fast integer math for hour extraction and day-rollover detection.
- Consolidated history scanning into UpdateDailyStatistics to handle both profit calculation and trade counting in a single pass.
- Optimized history property retrieval by using ticket-less variants (e.g., HistoryDealGetInteger(DEAL_MAGIC)) after deal selection.
- Refined trade counting to specifically target DEAL_ENTRY_IN deals for robustness against terminal restarts and cleaner logic.
- Removed redundant history scans in OnTrade handler.

Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-02-04 11:04:14 +00:00
GenX FX Trading System
b2db9e968b
Merge pull request #242 from A6-9V/bolt-optimize-ea-tick-performance-8834449176549336129
 Bolt: Optimize Expert Advisor tick performance and history scanning
2026-02-03 01:24:41 +07:00
google-labs-jules[bot]
601eedbd48 Bolt: Optimize Expert Advisor tick performance and history scanning
This PR implements several high-impact performance optimizations in `ExpertMAPSARSizeOptimized_Improved.mq5`:

1.  **Reduced History Scanning Overhead**: Moved the expensive `UpdateDailyStatistics()` call (which uses `HistorySelect` and loops through deals) out of the `OnTick()` path. It is now called only on trade events, periodic timer intervals, and day rollovers.
2.  **Optimized Day-Rollover Logic**: Replaced multiple `TimeToStruct` and `StructToTime` calls in the tick path with a lightweight integer division (`TimeCurrent() / 86400`) to detect calendar day changes.
3.  **Efficient History Selection**: Introduced `g_todayStart` to cache the midnight timestamp, ensuring `HistorySelect` targets the current day's data precisely rather than a rolling 24-hour window.
4.  **Lightweight New Bar Detection**: Replaced expensive `CopyRates()` calls for logging new bars with a simple `iTime()` lookup.

These changes significantly reduce the CPU and terminal API overhead per tick, which is critical for high-frequency or multi-symbol trading.

📊 **Impact**: Reduces `OnTick` execution time by avoiding redundant history scans on every price update.
🔬 **Measurement**: Verified with `scripts/ci_validate_repo.py` and manual code review against MQL5 performance best practices.

Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-02-02 17:40:08 +00:00
GenX FX Trading System
12f67a2d8f
Merge pull request #237 from A6-9V/bolt-optimize-ontick-execution-flow-ea-10081702488072086359
 Bolt: Optimize OnTick execution and data retrieval
2026-02-02 02:08:33 +07:00
google-labs-jules[bot]
39a12f19fd bolt: optimize OnTick execution and data retrieval in EA
This commit implements several performance optimizations in the SMC_TrendBreakout_MTF_EA.mq5 Expert Advisor:

1.  **Early Exit for Open Positions**: Moved the PositionSelect check to the top of the OnTick handler, immediately after the new bar check. This skips expensive indicator data fetching (CopyRates, CopyBuffer) when a position is already open.
2.  **Minimized Data Payload**: Reduced the number of bars fetched from 3 to 2 for CopyRates and all CopyBuffer calls. The current strategy logic only requires the current and previous bars.
3.  **Lazy Evaluation of Prices and Indicators**: Deferred SymbolInfoTick and ATR fetching until a trade signal is confirmed.
4.  **Atomic Price Retrieval**: Replaced non-standard Ask/Bid variables with SymbolInfoTick for more efficient and robust price retrieval in MQL5.

These changes significantly reduce terminal overhead and data transfer per tick, particularly improving performance during optimization and backtesting.

Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-02-01 17:22:31 +00:00
GenX FX Trading System
68f8647768
Merge pull request #235 from A6-9V/bolt-defer-terminal-checks-ontick-8824347763347722667
 Bolt: defer terminal state checks in OnTick
2026-02-01 19:09:06 +07:00
google-labs-jules[bot]
40c687fdb8 Bolt: defer terminal state checks in OnTick
Optimized the OnTick hot path in SMC_TrendBreakout_MTF_EA.mq5 by moving TerminalInfoInteger and MQLInfoInteger calls below the iTime() new bar check. This prevents redundant API calls on every price tick, saving CPU resources during high volatility.

Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-02-01 10:55:54 +00:00
GenX FX Trading System
a83f00cd80
Merge pull request #234 from A6-9V/bolt-lot-size-static-buffers-1446865755113688066
 Bolt: Lot Size Calculation & Static Buffer Optimization
2026-02-01 06:32:19 +07:00
google-labs-jules[bot]
a42da11111 Bolt: Lot Size Calculation & Static Buffer Optimization
- Optimized lot size calculation by pre-calculating constants in OnInit.
- Converted local arrays in OnTick to static to reuse memory.
- Implemented one-time ArraySetAsSeries calls using a static flag.
- Removed redundant close array and accessed rates directly.
- Deferred ATR CopyBuffer until signal confirmation.

Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-01-31 19:07:36 +00:00
GenX FX Trading System
f2da82cc0a
Merge pull request #230 from A6-9V/bolt-optimize-indicator-oncalculate-revised-2702452464731615428
 Bolt: optimize indicator OnCalculate performance (revised)
2026-01-31 18:01:34 +07:00
google-labs-jules[bot]
cee78864d6 Bolt: optimize indicator OnCalculate performance (revised)
This commit implements several performance optimizations in the SMC MTF indicator:
1. Robust Early Exit: Added a 'new bar' check using iTime() to skip redundant calculations on every price tick. Handled prev_calculated=0 to ensure full history recalculations when requested.
2. Lazy Loading: Wrapped expensive fractal and Donchian calculations in conditional blocks so they only execute if the respective features are enabled.
3. Efficient Buffer Clearing: Replaced manual O(N) loops with ArrayInitialize() for bulk clearing of indicator buffers on first run.
4. Robustness: Added 'history not ready' checks (iTime == 0) to both the indicator and EA.
5. Cleanup: Removed redundant ArraySetAsSeries calls on static arrays in GetMTFDir and updated comments.

Impact: Reduces CPU usage on every tick by skipping unnecessary logic and improves initialization speed during history loading.

Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-01-31 10:52:36 +00:00
cursor[bot]
8295cadcd1
Merge pull request #227 from A6-9V/bolt-native-array-min-max-9273837448969526969
 Bolt: use native ArrayMaximum/ArrayMinimum in indicator
2026-01-30 19:53:03 +00:00
Cursor Agent
3ddc5c633b Merge main into feature branch, resolve conflicts
Co-authored-by: lengkundee01 <lengkundee01@gmail.com>
2026-01-30 19:52:47 +00:00
GenX FX Trading System
3459c6243f
Merge pull request #229 from A6-9V/bolt-optimize-smc-indicator-17480556260232511881
 Bolt: Optimize object management and fix fractal detection in SMC Indicator
2026-01-31 02:49:49 +07:00
google-labs-jules[bot]
c320caca35 Bolt: Optimize object management and fix fractal detection in SMC Indicator
What:
- Introduced a cached object counter `g_objCount` in `SMC_TrendBreakout_MTF.mq5`.
- Updated `OnInit`, `DrawHLine`, and `DrawText` to maintain this counter.
- Refactored `SafeDeleteOldObjects` to use the cached counter and native `ObjectsDeleteAll()` for efficient bulk removal.
- Fixed a bug in fractal detection logic where `EMPTY_VALUE` was incorrectly identified as a valid swing point.

Why:
- The original `SafeDeleteOldObjects` performed two $O(N)$ passes over every object on the chart using relatively slow scripted functions (`ObjectName`, `StringFind`) on every new bar. This created a performance bottleneck on charts with many objects.
- The fractal bug caused incorrect swing point identification, leading to false signals and unnecessary processing of invalid data.

Impact:
- Significantly reduces CPU usage on new bars by avoiding redundant iterations over chart objects.
- Improves indicator accuracy and reliability by ensuring only valid fractal points are used for signal calculation.

Measurement:
- Verified via code review and manual inspection of the logic.
- Repository integrity confirmed by `ci_validate_repo.py` and `test_automation.py`.

Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-01-30 19:18:07 +00:00
GenX FX Trading System
7503c6005e
Merge pull request #228 from A6-9V/bolt-native-array-extrema-17552666438070101829
 Bolt: Use native ArrayMaximum/ArrayMinimum for Donchian calculation
2026-01-31 01:34:33 +07:00
google-labs-jules[bot]
80466584ba Bolt: Use native ArrayMaximum/ArrayMinimum for Donchian calculation
💡 What: Replaced manual `for` loops in `HighestHigh` and `LowestLow` with native `ArrayMaximum` and `ArrayMinimum` functions in `mt5/MQL5/Indicators/SMC_TrendBreakout_MTF.mq5`.
🎯 Why: Native MQL5 functions are implemented in optimized C++ and are significantly faster than loops executed in the MQL5 scripting layer.
📊 Impact: Improves the performance of Donchian channel calculation, reducing indicator overhead per bar.
🔬 Measurement: Verified with existing CI validation and code inspection.

Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-01-30 17:33:07 +00:00
google-labs-jules[bot]
ac7d690440 Bolt: use native ArrayMaximum/ArrayMinimum in indicator
Replaced manual loops in HighestHigh and LowestLow functions with native MQL5 ArrayMaximum and ArrayMinimum functions in mt5/MQL5/Indicators/SMC_TrendBreakout_MTF.mq5.

What: Replaced MQL5 script-level iterative loops with native C++ implemented functions for finding extreme values in price arrays.
Why: Native MQL5 functions are significantly faster than manual loops as they are executed in compiled C++.
Impact: Reduces execution time for indicator calculations on every new bar, improving overall EA performance during backtesting and live trading.
Measurement: MQL5 documentation confirms native functions are optimized for performance. The code now includes safety checks for the -1 return value.

Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-01-30 17:09:28 +00:00
GenX FX Trading System
290ff8a49d
Merge pull request #225 from A6-9V/bolt-lazy-load-ema-5322101291294523587
 Bolt: Lazily load EMA confirmation indicators in OnTick
2026-01-30 07:17:07 +07:00
GenX FX Trading System
d70fbfff58
Merge pull request #226 from A6-9V/bolt-refactor-calculatesl-1908363281228525822
 Bolt: Refactor CalculateSL for Code Quality
2026-01-30 07:16:40 +07:00
google-labs-jules[bot]
107f9a68e4 refactor(EA): Apply DRY principle to CalculateSL function
Refactored the CalculateSL function in the SMC Trend Breakout EA to merge the logic for SL_ATR and SL_SWING modes.

The original implementation had redundant code blocks for these two modes. This change consolidates the logic into a single, more efficient path, improving code readability and maintainability. While the performance impact is negligible, this change aligns with best practices for writing clean and efficient code.

Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-01-29 19:06:42 +00:00
google-labs-jules[bot]
96b2be8df2 fix(ci): Use correct Docker tag from metadata action output
Corrects the CI workflow to prevent 'manifest unknown' errors.

The `docker/metadata-action` generates a Docker tag with a shortened git SHA, but subsequent `docker run` and `docker pull` commands were attempting to use the full-length SHA, causing the image to not be found.

This fix modifies the `build-and-test` job to expose the generated tags as an output. The test and deployment steps are updated to consume this output, ensuring that the correct, shortened SHA tag is used throughout the workflow.

Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-01-29 17:37:28 +00:00
google-labs-jules[bot]
a737c2a0c9 feat(perf): Bolt: Lazily load EMA confirmation indicators in OnTick
Lazily loads the EMA confirmation indicator data in the `OnTick` function.

This change refactors the `OnTick` function to first check for a primary trade signal (Donchian Channel breakout) before fetching the data for the secondary confirmation indicators (EMAs).

This avoids two expensive `CopyBuffer()` calls on every new bar, reducing unnecessary processing and improving the overall efficiency of the EA, especially in non-trending markets where trade signals are infrequent. The functional logic remains identical.

Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-01-29 17:33:31 +00:00
GenX FX Trading System
183d7985d9
Merge pull request #223 from A6-9V/bolt-cache-account-info-7018597697775179121
 Bolt: Cache Account Info in OnTick
2026-01-29 18:40:03 +07:00
google-labs-jules[bot]
8b71cd84c8 fix(ci): Hardcode Docker image name to lowercase
After multiple unsuccessful attempts to dynamically correct the Docker image name, this commit resolves the persistent CI failures by hardcoding the `IMAGE_NAME` environment variable to a valid, lowercase string.

The root cause of the failures was the use of ` ${{ github.repository }}`, which contains uppercase letters, as the Docker image name. This is not allowed by Docker's naming conventions. Previous attempts to fix this with dynamic conversions proved unreliable.

This change ensures that the image name is always valid, which will allow the CI build to pass without any "invalid reference format" or "manifest unknown" errors.

Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-01-29 11:08:09 +00:00
google-labs-jules[bot]
f1287e700b fix(ci): Use full-length SHA for Docker image tags
The CI build was failing with a "manifest unknown" error because the `docker/metadata-action` was generating a Docker tag with a short Git SHA, while the testing step was trying to pull the image using the full-length SHA.

This commit fixes the issue by configuring the `docker/metadata-action` to use the full-length Git SHA for its tags. This is achieved by adding `sha-len=0` to the `sha` tag type in the workflow file. This ensures that the tag used to build and push the image is the same one used to run the tests, resolving the mismatch.

Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-01-29 11:04:35 +00:00
google-labs-jules[bot]
9567cee4f5 fix(ci): Convert Docker image name to lowercase
The CI build was failing because the Docker image name, derived from the GitHub repository name, contained uppercase letters, which is not allowed by Docker.

This commit fixes the issue by adding a step to the GitHub Actions workflow to convert the repository name to lowercase before using it as the image name. The corrected lowercase name is then used in all subsequent Docker commands within the `build-and-test` and `deploy-dev` jobs.

Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-01-29 11:01:01 +00:00
google-labs-jules[bot]
adbc7e159f feat(perf): Bolt: Cache Account Info in OnTick
This optimization caches account information (balance, equity, free margin) by fetching it once at the start of the `OnTick` function. This data is then passed down as arguments to the trade execution and lot calculation functions.

This change reduces the number of `AccountInfoDouble()` calls from three to one per tick when a trade signal is evaluated, lowering the execution time of the `OnTick` function and making the EA more efficient.

Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-01-29 10:49:50 +00:00
GenX FX Trading System
dbf5795712
Merge pull request #219 from A6-9V/bolt-itime-ontick-optimization-5819452322473281019
 Bolt: Optimize OnTick with iTime New Bar Check
2026-01-29 00:44:56 +07:00
google-labs-jules[bot]
e36e50aa5a feat(performance): Optimize OnTick with iTime New Bar Check
Refactored the `OnTick()` function to use the lightweight `iTime()` function for the new bar check *before* the expensive `CopyRates()` call.

The original implementation called `CopyRates()` on every single price tick, which is highly inefficient. The `OnTick` function is a performance-critical hot path, and this caused unnecessary resource consumption.

This change reduces CPU usage by preventing the `CopyRates()` data-copying operation on the vast majority of ticks. The EA now only performs expensive calculations once per bar, as intended.

Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-01-28 17:32:20 +00:00
GenX FX Trading System
c750399888
Merge pull request #217 from A6-9V/bolt-defer-atr-calculation-1512213396270810805
 Bolt: Defer ATR Calculation in OnTick Function
2026-01-28 22:31:08 +07:00
google-labs-jules[bot]
591d8f1289 feat(ea): Defer ATR calculation in OnTick
Implements a performance optimization in the `SMC_TrendBreakout_MTF_EA` Expert Advisor.

The `CopyBuffer` call to fetch the Average True Range (ATR) indicator is deferred until a trade signal (`buySignal` or `sellSignal`) is confirmed. This avoids executing the call on every tick, reducing unnecessary processing in the performance-critical `OnTick` function.

The implementation was also refactored to remove code duplication by combining the signal checks into a single block, adhering to the DRY principle.

Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-01-28 10:38:16 +00:00
GenX FX Trading System
b6043dede8
Merge pull request #211 from A6-9V/bolt-optimization-pass-indicator-values-17604613788783840035
 Bolt: Optimize OnTick by passing indicator values to sub-functions
2026-01-28 11:55:37 +07:00
google-labs-jules[bot]
f313fcd390 feat: Optimize OnTick by passing indicator values
- Refactors `OnTick` to fetch indicator data once.
- Passes indicator values as arguments to `CalculateSL` and `CalculateTP`.
- Eliminates redundant `CopyBuffer` calls in a hot path.
- Fixes a critical infinite recursion bug in `CalculateTP`'s fallback logic.

Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-01-27 19:50:17 +00:00
GenX FX Trading System
e247ae540d
Merge pull request #186 from A6-9V/bolt-optimize-price-retrieval-6851558663357307352
 Bolt: Use Ask/Bid Globals in OnTick
2026-01-26 15:25:34 +07:00
GenX FX Trading System
92d12f8cbc
Merge branch 'main' into bolt-optimize-price-retrieval-6851558663357307352 2026-01-26 15:25:27 +07:00
GenX FX Trading System
ecdeb6ae8b
Merge pull request #193 from A6-9V/bolt-copyrates-optimization-9949254688432193006
 Bolt: Consolidate Redundant `CopyRates` Calls in `OnTick`
2026-01-26 11:06:09 +07:00
google-labs-jules[bot]
4abce0677b Bolt: Consolidate redundant CopyRates calls in OnTick
💡 What: This optimization consolidates two separate `CopyRates` calls within the `OnTick` function into a single call.

🎯 Why: The original code fetched bar data twice on every new bar—once to check the timestamp and again to get closing prices. This created unnecessary overhead in a performance-critical function.

📊 Impact: Reduces data fetching operations by 50% within the `OnTick` new-bar logic, leading to a more efficient EA, especially in volatile markets with frequent ticks.

🔬 Measurement: The improvement can be verified by observing that only one `CopyRates` call is present at the beginning of the `OnTick` function, and the data is reused correctly.
2026-01-25 19:18:04 +00:00
GenX FX Trading System
4c768aa375
Merge pull request #191 from A6-9V/bolt-cache-symbol-properties-4486483294198199276
 Bolt: Cache static symbol properties to improve performance
2026-01-26 00:42:03 +07:00