@deriv-com/smartcharts-champion 1.3.9 → 1.3.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -17,7 +17,7 @@ concurrency:
17
17
  env:
18
18
  FLUTTER_VERSION: '3.24.1'
19
19
  FLUTTER_WEB_RENDERER: 'html'
20
- NODE_VERSION: '20.x'
20
+ NODE_VERSION: '22.x'
21
21
 
22
22
  permissions:
23
23
  contents: read
@@ -17,7 +17,7 @@ concurrency:
17
17
  env:
18
18
  FLUTTER_VERSION: '3.24.1'
19
19
  FLUTTER_WEB_RENDERER: 'html'
20
- NODE_VERSION: '20.x'
20
+ NODE_VERSION: '22.x'
21
21
  permissions:
22
22
  contents: read
23
23
  jobs:
@@ -38,7 +38,7 @@ jobs:
38
38
  - name: Setup node
39
39
  uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8
40
40
  with:
41
- node-version: 20.x
41
+ node-version: 22.x
42
42
 
43
43
  - name: Setup smartcharts-champion
44
44
  run: cd smartcharts-champion && npm install
package/CHANGELOG.md CHANGED
@@ -1,11 +1,24 @@
1
- ## [1.3.9](https://github.com/deriv-com/smartcharts-champion/compare/v1.3.8...v1.3.9) (2025-11-28)
1
+ ## [1.3.10](https://github.com/deriv-com/smartcharts-champion/compare/v1.3.9...v1.3.10) (2025-12-16)
2
+
3
+
4
+ ### ♻️ Chores
5
+
6
+ * Added Claude.md file to the project ([ef51a7f](https://github.com/deriv-com/smartcharts-champion/commit/ef51a7f99152934fb5cf472045bf27ef5dc6212b))
7
+ * update node version in GitHub workflow from 20.x to 22.x ([658dbc0](https://github.com/deriv-com/smartcharts-champion/commit/658dbc08356f67e8bc452352ce927cbb70e7e77b))
8
+
9
+
10
+ ### ⚙️ Continuous Integrations
11
+
12
+ * update node version in deploy preview & deploy production ([5100273](https://github.com/deriv-com/smartcharts-champion/commit/51002732858668e69cfa9534ee69883aff027f88))
13
+ * upgrade node version from 20.x to 22.x ([36664d8](https://github.com/deriv-com/smartcharts-champion/commit/36664d89b80721720115ea14c17910cc02648e54))
2
14
 
3
15
 
4
16
  ### 🐛 Bug Fixes
5
17
 
6
- * crash issue when Accumulators contract is finished ([338f47f](https://github.com/deriv-com/smartcharts-champion/commit/338f47f43bbd9fe9903c7a3f3a1f2610a88fb1f0))
7
- * fix the depricated defaultProps ([ae34c5c](https://github.com/deriv-com/smartcharts-champion/commit/ae34c5c5b64cd46188c74a0c6a0d6853bfa8bd81))
8
- * fix the depricated warning ([343044b](https://github.com/deriv-com/smartcharts-champion/commit/343044bbdf73216a6c9cad91cd5289c8c5833716))
9
- * implement the review comments ([43d12c5](https://github.com/deriv-com/smartcharts-champion/commit/43d12c5bd1ffd2fa92f36d6b09f6169bf346f061))
10
- * remove the default props to remove two console errors ([fa0083e](https://github.com/deriv-com/smartcharts-champion/commit/fa0083eed908f26d7b2f2661769a4faf1be4592b))
11
- * update marker properties with default values in ChartConfigModel ([826dc2b](https://github.com/deriv-com/smartcharts-champion/commit/826dc2bb4ae060e52dffc68ec475b34bf227a8f4))
18
+ * add crosshair persistency and state management in Chart and CrosshairStore ([d18b44c](https://github.com/deriv-com/smartcharts-champion/commit/d18b44c15f98afd39f87f9839bce7b5615527d6a))
19
+ * change crosshair prop to boolean type ([f07074a](https://github.com/deriv-com/smartcharts-champion/commit/f07074af2bc30e399be325cb0fd0a7ec74a4aa13))
20
+ * ensure localStorage checks for crosshair state management ([4cf5e7f](https://github.com/deriv-com/smartcharts-champion/commit/4cf5e7fce1ae0ab796bd525cfe998607e5916627))
21
+ * fix the security ([a52fb77](https://github.com/deriv-com/smartcharts-champion/commit/a52fb779b61b55d870bcc94b0c305451756add16))
22
+ * fix the security ([325a7f6](https://github.com/deriv-com/smartcharts-champion/commit/325a7f65b9612da60bcfc9170c39e55ffd66ada2))
23
+ * localStorage error handling in CrosshairStore ([285bea3](https://github.com/deriv-com/smartcharts-champion/commit/285bea34583b45d7640627942d338cff8e81ede9))
24
+ * Race Condition with Chart Initialization ([a71402a](https://github.com/deriv-com/smartcharts-champion/commit/a71402a203c426a58a4274cdc81ec8c34c13d9f8))
package/CLAUDE.md ADDED
@@ -0,0 +1,237 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## Project Overview
6
+
7
+ SmartCharts is a React-based charting library published as `@deriv-com/smartcharts-champion` on npm. It provides interactive financial charts with real-time data streaming, technical indicators, drawing tools, and customizable UI components. The library uses TypeScript, MobX for state management, and integrates with a Flutter-based chart rendering engine.
8
+
9
+ ## Common Development Commands
10
+
11
+ ### Development
12
+
13
+ - `npm start` - Start webpack dev server for the sample app (runs on http://localhost:8080)
14
+ - `npm run watch '../path/to/node_modules/@deriv-com/smartcharts-champion/dist'` - Watch mode that builds directly into another project's node_modules (useful for testing library changes)
15
+
16
+ ### Building
17
+
18
+ - `npm run build` - Build the library for production (outputs to `dist/`)
19
+ - `npm run build:app` - Build the sample app (outputs to `dist/`)
20
+ - Note: Both commands output `smartcharts.js` and `smartcharts.css`, but they are different files (library vs app)
21
+
22
+ ### Testing
23
+
24
+ - `npm test` - Run unit tests with Mocha
25
+ - `npm run coverage` - Generate test coverage report
26
+ - Test files are located in `__tests__` directories with `.spec.ts` extension
27
+ - Uses Mocha + Chai + Sinon for testing
28
+
29
+ ### Code Quality
30
+
31
+ - `npm run prettify` - Format code with Prettier
32
+ - ESLint runs automatically during webpack builds
33
+ - StyleLint runs automatically during webpack builds
34
+ - Husky pre-commit hooks run lint-staged
35
+
36
+ ### Analysis
37
+
38
+ - `npm run analyze` - Run webpack-bundle-analyzer to visualize bundle size
39
+
40
+ ### Translations
41
+
42
+ - `npm run translations` - Extract translation strings from the built library
43
+ - `npm run translations:download` - Download translations from Crowdin
44
+
45
+ ## Architecture Overview
46
+
47
+ ### Directory Structure
48
+
49
+ ```
50
+ src/
51
+ ├── components/ # React UI components (templates)
52
+ ├── store/ # MobX stores (state management)
53
+ ├── feed/ # Data feed and subscription management
54
+ ├── binaryapi/ # Binary API integration (TradingTimes, etc.)
55
+ ├── types/ # TypeScript type definitions
56
+ ├── utils/ # Utility functions
57
+ ├── hooks/ # React custom hooks
58
+ ├── constants/ # Constants and configuration
59
+ ├── flutter-chart/ # Flutter chart integration layer
60
+ └── index.ts # Library entry point
61
+ ```
62
+
63
+ ### State Management Pattern (Mobdux)
64
+
65
+ SmartCharts uses a variation of Mobdux pattern combining MobX and Redux-like architecture. Each component consists of:
66
+
67
+ 1. **Template** (`.tsx` file) - React component
68
+ 2. **Store** (`*Store.ts` file) - MobX state management
69
+
70
+ There are three types of components:
71
+
72
+ #### 1. Main Components
73
+
74
+ - Tied directly to the main store tree
75
+ - Only one instance per `<SmartChart />` component
76
+ - Examples: `ChartTitle`, `TimePeriod`, `Views`
77
+ - Connection done in the `.tsx` file using `connect(mapperFunction)`
78
+ - Should be Stateless Functional Components (SFC)
79
+
80
+ #### 2. Subcomponents
81
+
82
+ - Multiple instances can exist in the same state tree
83
+ - Connected inside parent store's constructor
84
+ - Examples: `Menu`, `List`, `CategoricalDisplay`
85
+ - Store has its own `connect` method
86
+ - Passed as props from parent component
87
+
88
+ #### 3. Independent Components
89
+
90
+ - Not managed by main store lifecycle
91
+ - Manage their own lifecycle (constructor, updateProps, destructor)
92
+ - Can access main store but main store doesn't control them
93
+ - Examples: `Barrier`, `ChartMode`, `FastMarker`
94
+ - Connection requires both mapperFunction and store class: `connect(mapperFunction, StoreClass)`
95
+
96
+ ### Key Stores
97
+
98
+ - `MainStore` - Root store that orchestrates all other stores
99
+ - `ChartStore` - Core chart state and operations
100
+ - `ChartState` - Chart configuration, settings, and layout management
101
+ - `ChartAdapterStore` - Flutter chart integration layer
102
+ - `Feed` - Data subscription and quote management
103
+ - `BarrierStore` - Chart barriers (price lines, shading)
104
+ - `DrawToolsStore` - Drawing tools and annotations
105
+ - `CrosshairStore` - Crosshair visibility and interaction state
106
+
107
+ ### Data Flow
108
+
109
+ 1. **Historical Data**: Host app provides `getQuotes` function
110
+ 2. **Real-time Data**: Host app provides `subscribeQuotes` and `unsubscribeQuotes`
111
+ 3. **Market Data**: Optionally passed via `chartData` prop (activeSymbols, tradingTimes)
112
+ 4. **Chart Rendering**: TypeScript → Flutter chart layer → Canvas rendering
113
+
114
+ SmartCharts does NOT fetch data directly - it delegates to the host application.
115
+
116
+ ## TypeScript Configuration
117
+
118
+ - Target: ES5
119
+ - Module: ES2020
120
+ - JSX: react-jsx
121
+ - Strict mode enabled
122
+ - Path alias: `@deriv-com/smartcharts` maps to `src/`
123
+ - Includes all `.ts` and `.tsx` files
124
+ - Excludes all `.js` and `.jsx` files
125
+
126
+ ## Webpack Build Modes
127
+
128
+ The build system has two modes controlled by `BUILD_MODE` environment variable:
129
+
130
+ - `BUILD_MODE=app` - Builds the sample app (entry: `app/index.tsx`)
131
+ - Default (no BUILD_MODE) - Builds the library (entry: `src/index.ts`)
132
+
133
+ Library build outputs:
134
+
135
+ - UMD module format
136
+ - Library name: `smartcharts`
137
+ - Chunks: `[name]-[chunkhash:6].smartcharts.js`
138
+ - Assets must be copied to host application
139
+
140
+ ## Working with SVGs
141
+
142
+ 1. **CSS Background SVGs** - Inlined via postcss-inline-svg (used for loader)
143
+ 2. **External SVGs** - Bundled into sprite sheet via svg-sprite-loader
144
+ - Can control stroke and fill color via CSS
145
+ - Remove stroke/fill attributes from SVG files to enable CSS control
146
+ - Cached by browser using shadow DOM
147
+
148
+ ## Key Integration Points
149
+
150
+ ### Flutter Chart
151
+
152
+ - Chart rendering is handled by Flutter web application in `chart_app/`
153
+ - Flutter build output is in `chart_app/build/web`
154
+ - TypeScript interfaces bridge to Flutter via `chartAdapter.flutterChart`
155
+ - Methods like `updateCrosshairVisibility()` update Flutter chart state
156
+
157
+ ### Library Usage by Host Apps
158
+
159
+ - Host must copy chunks (`*.smartcharts.*`) and CSS from `dist/`
160
+ - Host must call `setSmartChartsPublicPath()` to configure chunk loading
161
+ - Host must copy `dist/chart/assets` folder
162
+ - Example using CopyWebpackPlugin is in README
163
+
164
+ ## Component Development Guidelines
165
+
166
+ ### Temporary Crosshair Disable Pattern
167
+
168
+ When UI interactions should temporarily hide the crosshair:
169
+
170
+ ```typescript
171
+ onMouseEnter = () => this.crosshairStore.setTemporaryDisabled(true);
172
+ onMouseLeave = () => this.crosshairStore.setTemporaryDisabled(false);
173
+ ```
174
+
175
+ ### Icon and Label UX Pattern
176
+
177
+ - Icon represents **current state**
178
+ - Label describes **available action**
179
+ - Tooltips disabled on mobile
180
+
181
+ ### MobX Best Practices
182
+
183
+ - Use `makeObservable` in store constructors
184
+ - Wrap components with `observer` for reactivity
185
+ - Use computed properties for derived state
186
+ - Always use `isFunctionallyActive` for crosshair state (not `isEnabled` directly)
187
+
188
+ ## Testing
189
+
190
+ - Test framework: Mocha with Chai assertions
191
+ - Test runner uses ts-node with CommonJS module compilation
192
+ - Test pattern: `src|app/**/__tests__/*.spec.ts`
193
+ - Use Sinon for mocking and spies
194
+ - Coverage reporting via nyc (Istanbul)
195
+
196
+ ## Release Management
197
+
198
+ - Uses semantic-release for automated versioning
199
+ - Configuration in `release.config.cjs`
200
+ - Changelog generation via @semantic-release/changelog
201
+ - NPM publishing via @semantic-release/npm
202
+ - GitHub releases via @semantic-release/github
203
+
204
+ To publish manually:
205
+
206
+ ```bash
207
+ npm run build && npm publish
208
+ ```
209
+
210
+ ## Git Workflow
211
+
212
+ - Main branch: `master`
213
+ - Husky pre-commit hooks enforce lint-staged rules
214
+ - Conventional commits enforced via commitlint
215
+ - Use `npm run commit` for guided commit messages
216
+
217
+ ## Translation System
218
+
219
+ - All user-facing strings must be wrapped in `t.translate()`
220
+ - Translation keys support interpolation: `t.translate('[currency] [amount] payout', { currency: 'USD', amount: 43.12 })`
221
+ - Change language: `t.setLanguage('fr', callback)`
222
+ - Translations managed via Crowdin
223
+
224
+ ## Important Notes
225
+
226
+ - **Node version**: >=18.0.0
227
+ - **NPM version**: >=9.0.0
228
+ - Library exports are in `src/index.ts` - this defines the public API
229
+ - The `id` prop enables persistence of indicators, symbol, and layout to localStorage
230
+ - Chart state persistence uses key pattern: `layout-{id}`
231
+ - Component-specific documentation available in `docs/` directory
232
+
233
+ ## Reference Documentation
234
+
235
+ - [Crosshair Maintainer's Guide](docs/CROSSHAIR_MAINTAINERS_GUIDE.md) - Comprehensive guide for crosshair functionality
236
+ - [SmartChart Guide](docs/SmartChart-Guide.md) - Usage guide
237
+ - [README.md](README.md) - Complete API documentation and usage examples
@@ -1 +1 @@
1
- (()=>{var e={hasImageCodecs:!(typeof ImageDecoder>"u"||"Google Inc."!==navigator.vendor&&"Edg/"!==navigator.agent),hasChromiumBreakIterators:typeof Intl.v8BreakIterator<"u"&&typeof Intl.Segmenter<"u",supportsWasmGC:WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,95,1,120,0])),crossOriginIsolated:window.crossOriginIsolated};function t(...e){return new URL(r(...e),document.baseURI).toString()}function r(...e){return e.filter(e=>!!e).map((e,t)=>0===t?i(e):function(e){let t=0;for(;t<e.length&&"/"===e.charAt(t);)t++;return e.substring(t)}(i(e))).filter(e=>e.length).join("/")}function i(e){let t=e.length;for(;t>0&&"/"===e.charAt(t-1);)t--;return e.substring(0,t)}var n=class{constructor(){this._scriptLoaded=!1}setTrustedTypesPolicy(e){this._ttPolicy=e}async loadEntrypoint(e){let{entrypointUrl:r=t("main.dart.js"),onEntrypointLoaded:i,nonce:n}=e||{};return this._loadJSEntrypoint(r,i,n)}async load(e,r,i,n,a){a??=e=>{e.initializeEngine(i).then(e=>e.runApp())};let{entryPointBaseUrl:o}=i;if("dart2wasm"===e.compileTarget)return this._loadWasmEntrypoint(e,r,o,a);{let r=t(o,e.mainJsPath??"main.dart.js");return this._loadJSEntrypoint(r,a,n)}}didCreateEngineInitializer(e){"function"==typeof this._didCreateEngineInitializerResolve&&(this._didCreateEngineInitializerResolve(e),this._didCreateEngineInitializerResolve=null,delete _flutter.loader.didCreateEngineInitializer),"function"==typeof this._onEntrypointLoaded&&this._onEntrypointLoaded(e)}_loadJSEntrypoint(e,t,r){let i="function"==typeof t;if(!this._scriptLoaded){this._scriptLoaded=!0;let n=this._createScriptTag(e,r);if(!i)return new Promise((e,t)=>{console.debug("Injecting <script> tag. Using Promises. Use the callback approach instead!"),this._didCreateEngineInitializerResolve=e,n.addEventListener("error",t),document.head.append(n)});console.debug("Injecting <script> tag. Using callback."),this._onEntrypointLoaded=t,document.head.append(n)}}async _loadWasmEntrypoint(e,r,i,n){if(!this._scriptLoaded){this._scriptLoaded=!0,this._onEntrypointLoaded=n;let{mainWasmPath:a,jsSupportRuntimePath:o}=e,s=t(i,a),l=t(i,o);null!=this._ttPolicy&&(l=this._ttPolicy.createScriptURL(l));let c,d=WebAssembly.compileStreaming(fetch(s)),u=await import(l);c="skwasm"===e.renderer?(async()=>{let e=await r.skwasm;return window._flutter_skwasmInstance=e,{skwasm:e.wasmExports,skwasmWrapper:e,ffi:{memory:e.wasmMemory}}})():{};let p=await u.instantiate(d,c);await u.invoke(p)}}_createScriptTag(e,t){let r=document.createElement("script");r.type="application/javascript",t&&(r.nonce=t);let i=e;return null!=this._ttPolicy&&(i=this._ttPolicy.createScriptURL(e)),r.src=i,r}};async function a(e,t,r){if(t<0)return e;let i,n=new Promise((e,n)=>{i=setTimeout(()=>{n(new Error(`${r} took more than ${t}ms to resolve. Moving on.`,{cause:a}))},t)});return Promise.race([e,n]).finally(()=>{clearTimeout(i)})}var o=class{setTrustedTypesPolicy(e){this._ttPolicy=e}loadServiceWorker(e){if(!e)return console.debug("Null serviceWorker configuration. Skipping."),Promise.resolve();if(!("serviceWorker"in navigator)){let e="Service Worker API unavailable.";return window.isSecureContext||(e+="\nThe current context is NOT secure.",e+="\nRead more: https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts"),Promise.reject(new Error(e))}let{serviceWorkerVersion:r,serviceWorkerUrl:i=t(`flutter_service_worker.js?v=${r}`),timeoutMillis:n=4e3}=e,o=i;return null!=this._ttPolicy&&(o=this._ttPolicy.createScriptURL(o)),a(navigator.serviceWorker.register(o).then(e=>this._getNewServiceWorker(e,r)).then(this._waitForServiceWorkerActivation),n,"prepareServiceWorker")}async _getNewServiceWorker(e,t){if(!e.active&&(e.installing||e.waiting))return console.debug("Installing/Activating first service worker."),e.installing||e.waiting;if(e.active.scriptURL.endsWith(t))return console.debug("Loading from existing service worker."),e.active;{let t=await e.update();return console.debug("Updating service worker."),t.installing||t.waiting||t.active}}async _waitForServiceWorkerActivation(e){if(!e||"activated"===e.state){if(e)return void console.debug("Service worker already active.");throw new Error("Cannot activate a null service worker!")}return new Promise((t,r)=>{e.addEventListener("statechange",()=>{"activated"===e.state&&(console.debug("Activated new service worker."),t())})})}},s=class{constructor(e,t="flutter-js"){let r=e||[/\.js$/,/\.mjs$/];window.trustedTypes&&(this.policy=trustedTypes.createPolicy(t,{createScriptURL:function(e){if(e.startsWith("blob:"))return e;let i=new URL(e,window.location),n=i.pathname.split("/").pop();if(r.some(e=>e.test(n)))return i.toString();console.error("URL rejected by TrustedTypes policy",t,":",e,"(download prevented)")}}))}},l=e=>{let t=WebAssembly.compileStreaming(fetch(e));return(e,r)=>((async()=>{let i=await t,n=await WebAssembly.instantiate(i,e);r(n,i)})(),{})};window._flutter||(window._flutter={}),window._flutter.loader||(window._flutter.loader=new class{async loadEntrypoint(e){let{serviceWorker:t,...r}=e||{},i=new s,a=new o;a.setTrustedTypesPolicy(i.policy),await a.loadServiceWorker(t).catch(e=>{console.warn("Exception while loading service worker:",e)});let l=new n;return l.setTrustedTypesPolicy(i.policy),this.didCreateEngineInitializer=l.didCreateEngineInitializer.bind(l),l.loadEntrypoint(r)}async load({serviceWorkerSettings:i,onEntrypointLoaded:a,nonce:c,config:d}={}){d??={};let u=_flutter.buildConfig;if(!u)throw"FlutterLoader.load requires _flutter.buildConfig to be set";let p=u.builds.find(t=>!("dart2wasm"===t.compileTarget&&!e.supportsWasmGC||d.renderer&&!((e,t)=>"auto"===e.renderer?"canvaskit"==t||"html"==t:e.renderer==t)(t,d.renderer))&&(t=>"skwasm"!==t||e.crossOriginIsolated&&e.hasChromiumBreakIterators&&e.hasImageCodecs&&e.supportsWasmGC)(t.renderer));if(!p)throw"FlutterLoader could not find a build compatible with configuration and environment.";let w={};w.flutterTT=new s,i&&(w.serviceWorkerLoader=new o,w.serviceWorkerLoader.setTrustedTypesPolicy(w.flutterTT.policy),await w.serviceWorkerLoader.loadServiceWorker(i).catch(e=>{console.warn("Exception while loading service worker:",e)}));let m=function(e,t){return e.canvasKitBaseUrl?e.canvasKitBaseUrl:t.engineRevision&&!t.useLocalCanvasKit?r("https://www.gstatic.com/flutter-canvaskit",t.engineRevision):"canvaskit"}(d,u);"canvaskit"===p.renderer?w.canvasKit=((e,r,i,n)=>(window.flutterCanvasKitLoaded=(async()=>{if(window.flutterCanvasKit)return window.flutterCanvasKit;let a=i.hasChromiumBreakIterators&&i.hasImageCodecs;if(!a&&"chromium"==r.canvasKitVariant)throw"Chromium CanvasKit variant specifically requested, but unsupported in this browser";let o=a&&"full"!==r.canvasKitVariant,s=n;o&&(s=t(s,"chromium"));let c=t(s,"canvaskit.js");e.flutterTT.policy&&(c=e.flutterTT.policy.createScriptURL(c));let d=l(t(s,"canvaskit.wasm")),u=await import(c);return window.flutterCanvasKit=await u.default({instantiateWasm:d}),window.flutterCanvasKit})(),window.flutterCanvasKitLoaded))(w,d,e,m):"skwasm"===p.renderer&&(w.skwasm=(async(e,r,i,n)=>{let a=t(n,"skwasm.js"),o=a;e.flutterTT.policy&&(o=e.flutterTT.policy.createScriptURL(o));let s=l(t(n,"skwasm.wasm"));return await(await import(o)).default({instantiateWasm:s,locateFile:(e,t)=>{let r=t+e;return r.endsWith(".worker.js")?URL.createObjectURL(new Blob([`importScripts('${r}');`],{type:"application/javascript"})):r},mainScriptUrlOrBlob:a})})(w,0,0,m));let v=new n;return v.setTrustedTypesPolicy(w.flutterTT.policy),this.didCreateEngineInitializer=v.didCreateEngineInitializer.bind(v),v.load(p,w,d,c,a)}})})(),window._flutter||(window._flutter={}),_flutter.buildConfig={engineRevision:"c9b9d5780da342eb3f0f5e439a7db06f7d112575",builds:[{compileTarget:"dart2js",renderer:"html",mainJsPath:"main.dart.js"}]},_flutter.loader.load({serviceWorkerSettings:{serviceWorkerVersion:"179156368"}});
1
+ (()=>{var e={hasImageCodecs:!(typeof ImageDecoder>"u"||"Google Inc."!==navigator.vendor&&"Edg/"!==navigator.agent),hasChromiumBreakIterators:typeof Intl.v8BreakIterator<"u"&&typeof Intl.Segmenter<"u",supportsWasmGC:WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,95,1,120,0])),crossOriginIsolated:window.crossOriginIsolated};function t(...e){return new URL(r(...e),document.baseURI).toString()}function r(...e){return e.filter(e=>!!e).map((e,t)=>0===t?i(e):function(e){let t=0;for(;t<e.length&&"/"===e.charAt(t);)t++;return e.substring(t)}(i(e))).filter(e=>e.length).join("/")}function i(e){let t=e.length;for(;t>0&&"/"===e.charAt(t-1);)t--;return e.substring(0,t)}var n=class{constructor(){this._scriptLoaded=!1}setTrustedTypesPolicy(e){this._ttPolicy=e}async loadEntrypoint(e){let{entrypointUrl:r=t("main.dart.js"),onEntrypointLoaded:i,nonce:n}=e||{};return this._loadJSEntrypoint(r,i,n)}async load(e,r,i,n,a){a??=e=>{e.initializeEngine(i).then(e=>e.runApp())};let{entryPointBaseUrl:o}=i;if("dart2wasm"===e.compileTarget)return this._loadWasmEntrypoint(e,r,o,a);{let r=t(o,e.mainJsPath??"main.dart.js");return this._loadJSEntrypoint(r,a,n)}}didCreateEngineInitializer(e){"function"==typeof this._didCreateEngineInitializerResolve&&(this._didCreateEngineInitializerResolve(e),this._didCreateEngineInitializerResolve=null,delete _flutter.loader.didCreateEngineInitializer),"function"==typeof this._onEntrypointLoaded&&this._onEntrypointLoaded(e)}_loadJSEntrypoint(e,t,r){let i="function"==typeof t;if(!this._scriptLoaded){this._scriptLoaded=!0;let n=this._createScriptTag(e,r);if(!i)return new Promise((e,t)=>{console.debug("Injecting <script> tag. Using Promises. Use the callback approach instead!"),this._didCreateEngineInitializerResolve=e,n.addEventListener("error",t),document.head.append(n)});console.debug("Injecting <script> tag. Using callback."),this._onEntrypointLoaded=t,document.head.append(n)}}async _loadWasmEntrypoint(e,r,i,n){if(!this._scriptLoaded){this._scriptLoaded=!0,this._onEntrypointLoaded=n;let{mainWasmPath:a,jsSupportRuntimePath:o}=e,s=t(i,a),l=t(i,o);null!=this._ttPolicy&&(l=this._ttPolicy.createScriptURL(l));let c,d=WebAssembly.compileStreaming(fetch(s)),u=await import(l);c="skwasm"===e.renderer?(async()=>{let e=await r.skwasm;return window._flutter_skwasmInstance=e,{skwasm:e.wasmExports,skwasmWrapper:e,ffi:{memory:e.wasmMemory}}})():{};let p=await u.instantiate(d,c);await u.invoke(p)}}_createScriptTag(e,t){let r=document.createElement("script");r.type="application/javascript",t&&(r.nonce=t);let i=e;return null!=this._ttPolicy&&(i=this._ttPolicy.createScriptURL(e)),r.src=i,r}};async function a(e,t,r){if(t<0)return e;let i,n=new Promise((e,n)=>{i=setTimeout(()=>{n(new Error(`${r} took more than ${t}ms to resolve. Moving on.`,{cause:a}))},t)});return Promise.race([e,n]).finally(()=>{clearTimeout(i)})}var o=class{setTrustedTypesPolicy(e){this._ttPolicy=e}loadServiceWorker(e){if(!e)return console.debug("Null serviceWorker configuration. Skipping."),Promise.resolve();if(!("serviceWorker"in navigator)){let e="Service Worker API unavailable.";return window.isSecureContext||(e+="\nThe current context is NOT secure.",e+="\nRead more: https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts"),Promise.reject(new Error(e))}let{serviceWorkerVersion:r,serviceWorkerUrl:i=t(`flutter_service_worker.js?v=${r}`),timeoutMillis:n=4e3}=e,o=i;return null!=this._ttPolicy&&(o=this._ttPolicy.createScriptURL(o)),a(navigator.serviceWorker.register(o).then(e=>this._getNewServiceWorker(e,r)).then(this._waitForServiceWorkerActivation),n,"prepareServiceWorker")}async _getNewServiceWorker(e,t){if(!e.active&&(e.installing||e.waiting))return console.debug("Installing/Activating first service worker."),e.installing||e.waiting;if(e.active.scriptURL.endsWith(t))return console.debug("Loading from existing service worker."),e.active;{let t=await e.update();return console.debug("Updating service worker."),t.installing||t.waiting||t.active}}async _waitForServiceWorkerActivation(e){if(!e||"activated"===e.state){if(e)return void console.debug("Service worker already active.");throw new Error("Cannot activate a null service worker!")}return new Promise((t,r)=>{e.addEventListener("statechange",()=>{"activated"===e.state&&(console.debug("Activated new service worker."),t())})})}},s=class{constructor(e,t="flutter-js"){let r=e||[/\.js$/,/\.mjs$/];window.trustedTypes&&(this.policy=trustedTypes.createPolicy(t,{createScriptURL:function(e){if(e.startsWith("blob:"))return e;let i=new URL(e,window.location),n=i.pathname.split("/").pop();if(r.some(e=>e.test(n)))return i.toString();console.error("URL rejected by TrustedTypes policy",t,":",e,"(download prevented)")}}))}},l=e=>{let t=WebAssembly.compileStreaming(fetch(e));return(e,r)=>((async()=>{let i=await t,n=await WebAssembly.instantiate(i,e);r(n,i)})(),{})};window._flutter||(window._flutter={}),window._flutter.loader||(window._flutter.loader=new class{async loadEntrypoint(e){let{serviceWorker:t,...r}=e||{},i=new s,a=new o;a.setTrustedTypesPolicy(i.policy),await a.loadServiceWorker(t).catch(e=>{console.warn("Exception while loading service worker:",e)});let l=new n;return l.setTrustedTypesPolicy(i.policy),this.didCreateEngineInitializer=l.didCreateEngineInitializer.bind(l),l.loadEntrypoint(r)}async load({serviceWorkerSettings:i,onEntrypointLoaded:a,nonce:c,config:d}={}){d??={};let u=_flutter.buildConfig;if(!u)throw"FlutterLoader.load requires _flutter.buildConfig to be set";let p=u.builds.find(t=>!("dart2wasm"===t.compileTarget&&!e.supportsWasmGC||d.renderer&&!((e,t)=>"auto"===e.renderer?"canvaskit"==t||"html"==t:e.renderer==t)(t,d.renderer))&&(t=>"skwasm"!==t||e.crossOriginIsolated&&e.hasChromiumBreakIterators&&e.hasImageCodecs&&e.supportsWasmGC)(t.renderer));if(!p)throw"FlutterLoader could not find a build compatible with configuration and environment.";let w={};w.flutterTT=new s,i&&(w.serviceWorkerLoader=new o,w.serviceWorkerLoader.setTrustedTypesPolicy(w.flutterTT.policy),await w.serviceWorkerLoader.loadServiceWorker(i).catch(e=>{console.warn("Exception while loading service worker:",e)}));let m=function(e,t){return e.canvasKitBaseUrl?e.canvasKitBaseUrl:t.engineRevision&&!t.useLocalCanvasKit?r("https://www.gstatic.com/flutter-canvaskit",t.engineRevision):"canvaskit"}(d,u);"canvaskit"===p.renderer?w.canvasKit=((e,r,i,n)=>(window.flutterCanvasKitLoaded=(async()=>{if(window.flutterCanvasKit)return window.flutterCanvasKit;let a=i.hasChromiumBreakIterators&&i.hasImageCodecs;if(!a&&"chromium"==r.canvasKitVariant)throw"Chromium CanvasKit variant specifically requested, but unsupported in this browser";let o=a&&"full"!==r.canvasKitVariant,s=n;o&&(s=t(s,"chromium"));let c=t(s,"canvaskit.js");e.flutterTT.policy&&(c=e.flutterTT.policy.createScriptURL(c));let d=l(t(s,"canvaskit.wasm")),u=await import(c);return window.flutterCanvasKit=await u.default({instantiateWasm:d}),window.flutterCanvasKit})(),window.flutterCanvasKitLoaded))(w,d,e,m):"skwasm"===p.renderer&&(w.skwasm=(async(e,r,i,n)=>{let a=t(n,"skwasm.js"),o=a;e.flutterTT.policy&&(o=e.flutterTT.policy.createScriptURL(o));let s=l(t(n,"skwasm.wasm"));return await(await import(o)).default({instantiateWasm:s,locateFile:(e,t)=>{let r=t+e;return r.endsWith(".worker.js")?URL.createObjectURL(new Blob([`importScripts('${r}');`],{type:"application/javascript"})):r},mainScriptUrlOrBlob:a})})(w,0,0,m));let v=new n;return v.setTrustedTypesPolicy(w.flutterTT.policy),this.didCreateEngineInitializer=v.didCreateEngineInitializer.bind(v),v.load(p,w,d,c,a)}})})(),window._flutter||(window._flutter={}),_flutter.buildConfig={engineRevision:"c9b9d5780da342eb3f0f5e439a7db06f7d112575",builds:[{compileTarget:"dart2js",renderer:"html",mainJsPath:"main.dart.js"}]},_flutter.loader.load({serviceWorkerSettings:{serviceWorkerVersion:"1301399031"}});
@@ -1 +1 @@
1
- "use strict";const MANIFEST="flutter-app-manifest",TEMP="flutter-temp-cache",CACHE_NAME="flutter-app-cache",RESOURCES={"flutter.js":"f393d3c16b631f36852323de8e583132","manifest.json":"a06b13fcde5dfd1e240278072e116d12","index.html":"c23216a6a59a204ea771a4181451c35f","/":"c23216a6a59a204ea771a4181451c35f","assets/shaders/ink_sparkle.frag":"ecc85a2e95f5e9f53123dcaf8cb9b6ce","assets/AssetManifest.bin.json":"c29b161ad32814a02d8fd4f6311b9362","assets/fonts/IBMPlexSans-Bold.woff2":"19210a59bf50a6ba73fa97433170b4cf","assets/fonts/IBMPlexSans-Regular.woff2":"4bb247144b2962b752857093491454e7","assets/fonts/MaterialIcons-Regular.otf":"e7069dfd19b331be16bed984668fe080","assets/NOTICES":"f2f295fcde21b2b29cac32a02aa91755","assets/packages/deriv_chart/assets/icons/icon_placeholder.png":"23e9167e0fd2be2b618b589ed8401a1a","assets/packages/deriv_chart/assets/icons/symbols/cryltcusd.png":"d961cacac37de35b0c6f9d4fc55b7a1a","assets/packages/deriv_chart/assets/icons/symbols/otc_spc.png":"88a8304d175de2a69aea8e3a14072ec2","assets/packages/deriv_chart/assets/icons/symbols/stprng3.png":"115ea1648f1be8b5bb8d0a2db9d18c87","assets/packages/deriv_chart/assets/icons/symbols/crash900.png":"29db0d9e0d030a327586822c236e4f80","assets/packages/deriv_chart/assets/icons/symbols/jd10.png":"5827fe4e43bff971d2c3291e207ee8d7","assets/packages/deriv_chart/assets/icons/symbols/cryethusd.png":"d4520def9dba50f3758cbe869db8ce0f","assets/packages/deriv_chart/assets/icons/symbols/otc_dji.png":"faa508c0bfd406385ab03605d881b3c6","assets/packages/deriv_chart/assets/icons/symbols/jd75.png":"9b1491e264dff3e6331059975fa69d4b","assets/packages/deriv_chart/assets/icons/symbols/dshusd.png":"d5e83cc9d822d803830d238f28357b9b","assets/packages/deriv_chart/assets/icons/symbols/frxnzdjpy.png":"f7e9bdd69b05f1e03f0639d159d00a71","assets/packages/deriv_chart/assets/icons/symbols/frxeuraud.png":"74165ef668f66beabacb69e6e475b43d","assets/packages/deriv_chart/assets/icons/symbols/boom1000.png":"658219fb4846c9733a1aaf1b6196eafd","assets/packages/deriv_chart/assets/icons/symbols/1hz10v.png":"33928dfb84047f43a7f4a1c4965fdc47","assets/packages/deriv_chart/assets/icons/symbols/btcusd.png":"822ecfb1d3138c3b30c08d8de090c3b5","assets/packages/deriv_chart/assets/icons/symbols/zecusd.png":"0585b34fb4febfffa9d61cb1c95e9f55","assets/packages/deriv_chart/assets/icons/symbols/bchusd.png":"1433535ddc1ae0fec062c6cc8e5840d6","assets/packages/deriv_chart/assets/icons/symbols/frxusdchf.png":"73c02e4807d10f708314a493f0e68a95","assets/packages/deriv_chart/assets/icons/symbols/stprng.png":"7b0a1573c077dbdd99ab250b97ad6baf","assets/packages/deriv_chart/assets/icons/symbols/rdbear.png":"9f8e0320e8ece5613c760e5f19a8ed8e","assets/packages/deriv_chart/assets/icons/symbols/eosusd.png":"c1ab7f666c4bc67dfa6cccf9746165d1","assets/packages/deriv_chart/assets/icons/symbols/boom900.png":"cd9ee7eb5a89465bbde2ff06ddfbf160","assets/packages/deriv_chart/assets/icons/symbols/frxeurgbp.png":"64f2f86f9299d5408e355711023eca39","assets/packages/deriv_chart/assets/icons/symbols/frxxptusd.png":"547157baf2cb6a7e59dceb47e7a64af7","assets/packages/deriv_chart/assets/icons/symbols/frxeurcad.png":"dbfeb90340a097fac57fe24e439d57d8","assets/packages/deriv_chart/assets/icons/symbols/boom300n.png":"99ef1bfce27f82daddd9afd1b369c869","assets/packages/deriv_chart/assets/icons/symbols/1hz100v.png":"748c68b512a4829ed27c6a2091007188","assets/packages/deriv_chart/assets/icons/symbols/otc_sx5e.png":"32025efa989108bf7a08050d8319aa1d","assets/packages/deriv_chart/assets/icons/symbols/frxaudchf.png":"774fdfbacb2fb4d90515ce21b60d6df2","assets/packages/deriv_chart/assets/icons/symbols/otc_ndx.png":"024822877caaae778907d7e0a8bd23cc","assets/packages/deriv_chart/assets/icons/symbols/xrpusd.png":"3c1edf55f4b1e20ac79ef9eeb0171545","assets/packages/deriv_chart/assets/icons/symbols/otc_gdaxi.png":"795474c76bbb1467d97e98ab728e4d29","assets/packages/deriv_chart/assets/icons/symbols/frxeurusd.png":"87d65825df117aa6320059e251870c85","assets/packages/deriv_chart/assets/icons/symbols/crash1000.png":"c395945dc308c217c0297de8456b99ba","assets/packages/deriv_chart/assets/icons/symbols/crybchusd.png":"e61eedb43a2f79f2c2c8b4c892c5f5fc","assets/packages/deriv_chart/assets/icons/symbols/1hz200v.png":"07beabc8c1e3db87cc1a85a1c95d0aee","assets/packages/deriv_chart/assets/icons/symbols/boom500.png":"528b46320ba6105fe33d26fe3449c915","assets/packages/deriv_chart/assets/icons/symbols/wldgbp.png":"4959c5698faf8daf0ce9704ffd5ab1eb","assets/packages/deriv_chart/assets/icons/symbols/cryeosusd.png":"43ae4baee03d269a0b9fb525781173b9","assets/packages/deriv_chart/assets/icons/symbols/1hz300v.png":"866689205aabb376470a4e98a2be9736","assets/packages/deriv_chart/assets/icons/symbols/1hz25v.png":"15ac231c2c2bb0fa05dd91bb5e242799","assets/packages/deriv_chart/assets/icons/symbols/frxaudcad.png":"827bb3e47b0e64ddbf1bb5ae61a01033","assets/packages/deriv_chart/assets/icons/symbols/frxusdmxn.png":"f08040e1eefd9b94d74982301d7e4713","assets/packages/deriv_chart/assets/icons/symbols/1hz50v.png":"40eb9bc93e6e7feedbd74bfcf1683109","assets/packages/deriv_chart/assets/icons/symbols/r_50.png":"1d4f5fe7ecf5377a2e02235452917745","assets/packages/deriv_chart/assets/icons/symbols/otc_n225.png":"580d5ca62d48d9b7e345c4b1c7d3ddba","assets/packages/deriv_chart/assets/icons/symbols/otc_hsi.png":"188c16a5fd0aaf5549cb4b699cebd56d","assets/packages/deriv_chart/assets/icons/symbols/frxaudusd.png":"028051074b041db767963ab238dc3cd1","assets/packages/deriv_chart/assets/icons/symbols/crash500.png":"39f28e0d0a27526cf64341020c9cd9e9","assets/packages/deriv_chart/assets/icons/symbols/frxgbpnzd.png":"cb7dd4cdb203d45e80e4faaf5e940217","assets/packages/deriv_chart/assets/icons/symbols/otc_ftse.png":"73b5bf8e5ec68efee95e5db958098f79","assets/packages/deriv_chart/assets/icons/symbols/wldaud.png":"8b616a51d3c5a4bcc380fba175e00c41","assets/packages/deriv_chart/assets/icons/symbols/otc_fchi.png":"ab5ad3ff51b8cd40b533f36731b31dc9","assets/packages/deriv_chart/assets/icons/symbols/wldusd.png":"3b8ed9884c5d71e58676115ee69a0810","assets/packages/deriv_chart/assets/icons/symbols/frxbrousd.png":"db8cdc3fb067e7ede3c34671f4729c06","assets/packages/deriv_chart/assets/icons/symbols/jd25.png":"cd01e3e8b4b6c125df94e0d264da0b22","assets/packages/deriv_chart/assets/icons/symbols/jd100.png":"7f92baac7278160fe76f6f4048205ee8","assets/packages/deriv_chart/assets/icons/symbols/boom600.png":"e7d0fe0010a9abf09b36d61a7f24a807","assets/packages/deriv_chart/assets/icons/symbols/frxgbpusd.png":"8e568a6f779c412f5cd1baf6c3e3aa5a","assets/packages/deriv_chart/assets/icons/symbols/frxusdnok.png":"d957fdfa55248112e72ee6eb0ad166b7","assets/packages/deriv_chart/assets/icons/symbols/crash300n.png":"811fe625af9befa1eb3116fe170da9d5","assets/packages/deriv_chart/assets/icons/symbols/ltcusd.png":"49c0bf02c99cc70f164329d4c794b884","assets/packages/deriv_chart/assets/icons/symbols/frxaudjpy.png":"605d3cdb4e33aa0730a52749583e2d62","assets/packages/deriv_chart/assets/icons/symbols/frxgbpaud.png":"b093bacf9b6b37256cbb7454d5c0c618","assets/packages/deriv_chart/assets/icons/symbols/cryxmrusd.png":"272edb110a2628fc60d2fb0bd237cc50","assets/packages/deriv_chart/assets/icons/symbols/xmrusd.png":"ecdce25fe2272992147875c80aa5564c","assets/packages/deriv_chart/assets/icons/symbols/frxeurnzd.png":"5e6997f168d3f146c492d0eed9503b0b","assets/packages/deriv_chart/assets/icons/symbols/otc_aex.png":"64a73c5aaa260a3602a1ca15dea3dd20","assets/packages/deriv_chart/assets/icons/symbols/r_75.png":"f4eb1ee786942ebbb7e848110908f7fb","assets/packages/deriv_chart/assets/icons/symbols/rdbull.png":"12af5d77b14beee08abe5e393c1a7ad7","assets/packages/deriv_chart/assets/icons/symbols/frxgbpjpy.png":"42bb921c4580882c07be30471ae97372","assets/packages/deriv_chart/assets/icons/symbols/1hz250v.png":"29cf175d192812b50c29135b62663d12","assets/packages/deriv_chart/assets/icons/symbols/crybtcusd.png":"02fb37d758a94ce064225cc50345ea93","assets/packages/deriv_chart/assets/icons/symbols/otc_ssmi.png":"1561a92a36989a64f85c7221384c4957","assets/packages/deriv_chart/assets/icons/symbols/frxgbpcad.png":"be914c3dd3192d404b79e5f7d3f943f9","assets/packages/deriv_chart/assets/icons/symbols/frxxauusd.png":"cbb4e956663bc0b6b98c57d1cac9068e","assets/packages/deriv_chart/assets/icons/symbols/crybnbusd.png":"372740ee2ae319f26fde7ef7a81ac359","assets/packages/deriv_chart/assets/icons/symbols/frxxpdusd.png":"a0e35bd0c63db9ba0c421a236a06e76a","assets/packages/deriv_chart/assets/icons/symbols/stprng4.png":"59f21b9ca82cd242c7babc32f829584b","assets/packages/deriv_chart/assets/icons/symbols/cryzecusd.png":"ea36d64aa57f4e1d44bc9c5ce9284ad9","assets/packages/deriv_chart/assets/icons/symbols/cryxrpusd.png":"5d0c030de1adb482f7796945ae149117","assets/packages/deriv_chart/assets/icons/symbols/1hz75v.png":"00e0249936eeb2d0b6bef1eef367e1bd","assets/packages/deriv_chart/assets/icons/symbols/frxnzdusd.png":"bc348f3842a0451f56bd8bb3e734204b","assets/packages/deriv_chart/assets/icons/symbols/jd150.png":"3e60df618ae2f598dd50e0488b075861","assets/packages/deriv_chart/assets/icons/symbols/frxusdpln.png":"d980230b5ea98c9b5d002a3cb8c84c13","assets/packages/deriv_chart/assets/icons/symbols/bnbusd.png":"3d5b95e1f0195528fc798ea8be00ca14","assets/packages/deriv_chart/assets/icons/symbols/jd50.png":"8e492b906a94357dbf50db14385c527a","assets/packages/deriv_chart/assets/icons/symbols/r_10.png":"1b9cb2c68df961025c42572a2034add9","assets/packages/deriv_chart/assets/icons/symbols/frxgbpchf.png":"226b953b636290e10055d14bca9b5bc0","assets/packages/deriv_chart/assets/icons/symbols/wldxau.png":"b2ce679571222597252272b0e06ce6fc","assets/packages/deriv_chart/assets/icons/symbols/frxxagusd.png":"3e87df9dd6cc2fc9cfc9871e0c624465","assets/packages/deriv_chart/assets/icons/symbols/frxaudnzd.png":"8a0984ff7646f0d9b97496bb4e8099a8","assets/packages/deriv_chart/assets/icons/symbols/jd200.png":"71c8b672dafa03ff61e437067bda3145","assets/packages/deriv_chart/assets/icons/symbols/ethusd.png":"bcdd0cd2cfcaa223c3d4ccef318fd503","assets/packages/deriv_chart/assets/icons/symbols/wldeur.png":"a03b5ef547219641244d7951fe0717b3","assets/packages/deriv_chart/assets/icons/symbols/frxusdsek.png":"de4d5275c29f934ade5b7528186aafa2","assets/packages/deriv_chart/assets/icons/symbols/otc_as51.png":"2d461c07e758cec3817d4981d7dcbb4f","assets/packages/deriv_chart/assets/icons/symbols/frxusdcad.png":"e8c3bf13c091879e68111700e9ec74e6","assets/packages/deriv_chart/assets/icons/symbols/1hz150v.png":"3740f1b30922d9b1bcf242484e1f6756","assets/packages/deriv_chart/assets/icons/symbols/crydshusd.png":"d1b4a516dbf4bf2a01f781e4bdd340af","assets/packages/deriv_chart/assets/icons/symbols/stprng2.png":"52ef0246327a78ba16cadeebb0e72218","assets/packages/deriv_chart/assets/icons/symbols/crash600.png":"5b1df8ebe581015213efb91483eb3a4a","assets/packages/deriv_chart/assets/icons/symbols/r_100.png":"5ae8eea5b3daa45c76ce1caf01d2acfc","assets/packages/deriv_chart/assets/icons/symbols/frxusdjpy.png":"2a27170f100f619036d79e164566e005","assets/packages/deriv_chart/assets/icons/symbols/frxgbpnok.png":"b8c7d9f5574f84e68351fb8a139408f0","assets/packages/deriv_chart/assets/icons/symbols/frxeurchf.png":"1a66826ef57b967efeb3e67673609eac","assets/packages/deriv_chart/assets/icons/symbols/r_25.png":"8ca61698280cfcf332914b2a47626b38","assets/packages/deriv_chart/assets/icons/symbols/frxeurjpy.png":"aeb0d0b3064206ade4551fb584fa28aa","assets/packages/deriv_chart/assets/icons/symbols/stprng5.png":"f5dc31bfa50f73421d15d43555d61906","assets/packages/deriv_chart/assets/fonts/quill_icons.ttf":"03494ad65f94a60634d32c3ab65fa178","assets/FontManifest.json":"84fa087dba170bffc9f3713aeebe836c","assets/AssetManifest.bin":"d7b436aa92de7ddda07c1129b0a82161","assets/AssetManifest.json":"6bb85219f59197eca57320f5729bffea","canvaskit/chromium/canvaskit.wasm":"b1ac05b29c127d86df4bcfbf50dd902a","canvaskit/chromium/canvaskit.js":"671c6b4f8fcc199dcc551c7bb125f239","canvaskit/chromium/canvaskit.js.symbols":"a012ed99ccba193cf96bb2643003f6fc","canvaskit/skwasm.worker.js":"89990e8c92bcb123999aa81f7e203b1c","canvaskit/skwasm.js":"694fda5704053957c2594de355805228","canvaskit/canvaskit.wasm":"1f237a213d7370cf95f443d896176460","canvaskit/canvaskit.js":"66177750aff65a66cb07bb44b8c6422b","canvaskit/skwasm.wasm":"9f0c0c02b82a910d12ce0543ec130e60","canvaskit/canvaskit.js.symbols":"48c83a2ce573d9692e8d970e288d75f7","canvaskit/skwasm.js.symbols":"262f4827a1317abb59d71d6c587a93e2","favicon.png":"5dcef449791fa27946b3d35ad8803796","flutter_bootstrap.js":"9a15f650e6bfb399eb678fc3e3116174","version.json":"1756499d77011c0be564a414e567db76","main.dart.js":"3cbd42949dce056bc6e22721f34e3916"},CORE=["main.dart.js","index.html","flutter_bootstrap.js","assets/AssetManifest.bin.json","assets/FontManifest.json"];async function downloadOffline(){var s=[],a=await caches.open(CACHE_NAME),e={};for(var c of await a.keys()){var t=c.url.substring(origin.length+1);""==t&&(t="/"),e[t]=!0}for(var d of Object.keys(RESOURCES))e[d]||s.push(d);return a.addAll(s)}function onlineFirst(s){return s.respondWith(fetch(s.request).then(a=>caches.open(CACHE_NAME).then(e=>(e.put(s.request,a.clone()),a))).catch(a=>caches.open(CACHE_NAME).then(e=>e.match(s.request).then(s=>{if(null!=s)return s;throw a}))))}self.addEventListener("install",s=>(self.skipWaiting(),s.waitUntil(caches.open(TEMP).then(s=>s.addAll(CORE.map(s=>new Request(s,{cache:"reload"}))))))),self.addEventListener("activate",function(s){return s.waitUntil(async function(){try{var s=await caches.open(CACHE_NAME),a=await caches.open(TEMP),e=await caches.open(MANIFEST),c=await e.match("manifest");if(!c){for(var t of(await caches.delete(CACHE_NAME),s=await caches.open(CACHE_NAME),await a.keys())){var d=await a.match(t);await s.put(t,d)}return await caches.delete(TEMP),await e.put("manifest",new Response(JSON.stringify(RESOURCES))),void self.clients.claim()}var b=await c.json(),r=self.location.origin;for(var t of await s.keys()){var n=t.url.substring(r.length+1);""==n&&(n="/"),RESOURCES[n]&&RESOURCES[n]==b[n]||await s.delete(t)}for(var t of await a.keys())d=await a.match(t),await s.put(t,d);return await caches.delete(TEMP),await e.put("manifest",new Response(JSON.stringify(RESOURCES))),void self.clients.claim()}catch(s){console.error("Failed to upgrade service worker: "+s),await caches.delete(CACHE_NAME),await caches.delete(TEMP),await caches.delete(MANIFEST)}}())}),self.addEventListener("fetch",s=>{if("GET"===s.request.method){var a=self.location.origin,e=s.request.url.substring(a.length+1);if(-1!=e.indexOf("?v=")&&(e=e.split("?v=")[0]),(s.request.url==a||s.request.url.startsWith(a+"/#")||""==e)&&(e="/"),RESOURCES[e])return"/"==e?onlineFirst(s):void s.respondWith(caches.open(CACHE_NAME).then(a=>a.match(s.request).then(e=>e||fetch(s.request).then(e=>(e&&Boolean(e.ok)&&a.put(s.request,e.clone()),e)))))}}),self.addEventListener("message",s=>{"skipWaiting"!==s.data?"downloadOffline"!==s.data||downloadOffline():self.skipWaiting()});
1
+ "use strict";const MANIFEST="flutter-app-manifest",TEMP="flutter-temp-cache",CACHE_NAME="flutter-app-cache",RESOURCES={"flutter.js":"f393d3c16b631f36852323de8e583132","manifest.json":"a06b13fcde5dfd1e240278072e116d12","index.html":"c30a00d1b55dd61373bbf768d8519698","/":"c30a00d1b55dd61373bbf768d8519698","assets/shaders/ink_sparkle.frag":"ecc85a2e95f5e9f53123dcaf8cb9b6ce","assets/AssetManifest.bin.json":"c29b161ad32814a02d8fd4f6311b9362","assets/fonts/IBMPlexSans-Bold.woff2":"19210a59bf50a6ba73fa97433170b4cf","assets/fonts/IBMPlexSans-Regular.woff2":"4bb247144b2962b752857093491454e7","assets/fonts/MaterialIcons-Regular.otf":"e7069dfd19b331be16bed984668fe080","assets/NOTICES":"f2f295fcde21b2b29cac32a02aa91755","assets/packages/deriv_chart/assets/icons/icon_placeholder.png":"23e9167e0fd2be2b618b589ed8401a1a","assets/packages/deriv_chart/assets/icons/symbols/cryltcusd.png":"d961cacac37de35b0c6f9d4fc55b7a1a","assets/packages/deriv_chart/assets/icons/symbols/otc_spc.png":"88a8304d175de2a69aea8e3a14072ec2","assets/packages/deriv_chart/assets/icons/symbols/stprng3.png":"115ea1648f1be8b5bb8d0a2db9d18c87","assets/packages/deriv_chart/assets/icons/symbols/crash900.png":"29db0d9e0d030a327586822c236e4f80","assets/packages/deriv_chart/assets/icons/symbols/jd10.png":"5827fe4e43bff971d2c3291e207ee8d7","assets/packages/deriv_chart/assets/icons/symbols/cryethusd.png":"d4520def9dba50f3758cbe869db8ce0f","assets/packages/deriv_chart/assets/icons/symbols/otc_dji.png":"faa508c0bfd406385ab03605d881b3c6","assets/packages/deriv_chart/assets/icons/symbols/jd75.png":"9b1491e264dff3e6331059975fa69d4b","assets/packages/deriv_chart/assets/icons/symbols/dshusd.png":"d5e83cc9d822d803830d238f28357b9b","assets/packages/deriv_chart/assets/icons/symbols/frxnzdjpy.png":"f7e9bdd69b05f1e03f0639d159d00a71","assets/packages/deriv_chart/assets/icons/symbols/frxeuraud.png":"74165ef668f66beabacb69e6e475b43d","assets/packages/deriv_chart/assets/icons/symbols/boom1000.png":"658219fb4846c9733a1aaf1b6196eafd","assets/packages/deriv_chart/assets/icons/symbols/1hz10v.png":"33928dfb84047f43a7f4a1c4965fdc47","assets/packages/deriv_chart/assets/icons/symbols/btcusd.png":"822ecfb1d3138c3b30c08d8de090c3b5","assets/packages/deriv_chart/assets/icons/symbols/zecusd.png":"0585b34fb4febfffa9d61cb1c95e9f55","assets/packages/deriv_chart/assets/icons/symbols/bchusd.png":"1433535ddc1ae0fec062c6cc8e5840d6","assets/packages/deriv_chart/assets/icons/symbols/frxusdchf.png":"73c02e4807d10f708314a493f0e68a95","assets/packages/deriv_chart/assets/icons/symbols/stprng.png":"7b0a1573c077dbdd99ab250b97ad6baf","assets/packages/deriv_chart/assets/icons/symbols/rdbear.png":"9f8e0320e8ece5613c760e5f19a8ed8e","assets/packages/deriv_chart/assets/icons/symbols/eosusd.png":"c1ab7f666c4bc67dfa6cccf9746165d1","assets/packages/deriv_chart/assets/icons/symbols/boom900.png":"cd9ee7eb5a89465bbde2ff06ddfbf160","assets/packages/deriv_chart/assets/icons/symbols/frxeurgbp.png":"64f2f86f9299d5408e355711023eca39","assets/packages/deriv_chart/assets/icons/symbols/frxxptusd.png":"547157baf2cb6a7e59dceb47e7a64af7","assets/packages/deriv_chart/assets/icons/symbols/frxeurcad.png":"dbfeb90340a097fac57fe24e439d57d8","assets/packages/deriv_chart/assets/icons/symbols/boom300n.png":"99ef1bfce27f82daddd9afd1b369c869","assets/packages/deriv_chart/assets/icons/symbols/1hz100v.png":"748c68b512a4829ed27c6a2091007188","assets/packages/deriv_chart/assets/icons/symbols/otc_sx5e.png":"32025efa989108bf7a08050d8319aa1d","assets/packages/deriv_chart/assets/icons/symbols/frxaudchf.png":"774fdfbacb2fb4d90515ce21b60d6df2","assets/packages/deriv_chart/assets/icons/symbols/otc_ndx.png":"024822877caaae778907d7e0a8bd23cc","assets/packages/deriv_chart/assets/icons/symbols/xrpusd.png":"3c1edf55f4b1e20ac79ef9eeb0171545","assets/packages/deriv_chart/assets/icons/symbols/otc_gdaxi.png":"795474c76bbb1467d97e98ab728e4d29","assets/packages/deriv_chart/assets/icons/symbols/frxeurusd.png":"87d65825df117aa6320059e251870c85","assets/packages/deriv_chart/assets/icons/symbols/crash1000.png":"c395945dc308c217c0297de8456b99ba","assets/packages/deriv_chart/assets/icons/symbols/crybchusd.png":"e61eedb43a2f79f2c2c8b4c892c5f5fc","assets/packages/deriv_chart/assets/icons/symbols/1hz200v.png":"07beabc8c1e3db87cc1a85a1c95d0aee","assets/packages/deriv_chart/assets/icons/symbols/boom500.png":"528b46320ba6105fe33d26fe3449c915","assets/packages/deriv_chart/assets/icons/symbols/wldgbp.png":"4959c5698faf8daf0ce9704ffd5ab1eb","assets/packages/deriv_chart/assets/icons/symbols/cryeosusd.png":"43ae4baee03d269a0b9fb525781173b9","assets/packages/deriv_chart/assets/icons/symbols/1hz300v.png":"866689205aabb376470a4e98a2be9736","assets/packages/deriv_chart/assets/icons/symbols/1hz25v.png":"15ac231c2c2bb0fa05dd91bb5e242799","assets/packages/deriv_chart/assets/icons/symbols/frxaudcad.png":"827bb3e47b0e64ddbf1bb5ae61a01033","assets/packages/deriv_chart/assets/icons/symbols/frxusdmxn.png":"f08040e1eefd9b94d74982301d7e4713","assets/packages/deriv_chart/assets/icons/symbols/1hz50v.png":"40eb9bc93e6e7feedbd74bfcf1683109","assets/packages/deriv_chart/assets/icons/symbols/r_50.png":"1d4f5fe7ecf5377a2e02235452917745","assets/packages/deriv_chart/assets/icons/symbols/otc_n225.png":"580d5ca62d48d9b7e345c4b1c7d3ddba","assets/packages/deriv_chart/assets/icons/symbols/otc_hsi.png":"188c16a5fd0aaf5549cb4b699cebd56d","assets/packages/deriv_chart/assets/icons/symbols/frxaudusd.png":"028051074b041db767963ab238dc3cd1","assets/packages/deriv_chart/assets/icons/symbols/crash500.png":"39f28e0d0a27526cf64341020c9cd9e9","assets/packages/deriv_chart/assets/icons/symbols/frxgbpnzd.png":"cb7dd4cdb203d45e80e4faaf5e940217","assets/packages/deriv_chart/assets/icons/symbols/otc_ftse.png":"73b5bf8e5ec68efee95e5db958098f79","assets/packages/deriv_chart/assets/icons/symbols/wldaud.png":"8b616a51d3c5a4bcc380fba175e00c41","assets/packages/deriv_chart/assets/icons/symbols/otc_fchi.png":"ab5ad3ff51b8cd40b533f36731b31dc9","assets/packages/deriv_chart/assets/icons/symbols/wldusd.png":"3b8ed9884c5d71e58676115ee69a0810","assets/packages/deriv_chart/assets/icons/symbols/frxbrousd.png":"db8cdc3fb067e7ede3c34671f4729c06","assets/packages/deriv_chart/assets/icons/symbols/jd25.png":"cd01e3e8b4b6c125df94e0d264da0b22","assets/packages/deriv_chart/assets/icons/symbols/jd100.png":"7f92baac7278160fe76f6f4048205ee8","assets/packages/deriv_chart/assets/icons/symbols/boom600.png":"e7d0fe0010a9abf09b36d61a7f24a807","assets/packages/deriv_chart/assets/icons/symbols/frxgbpusd.png":"8e568a6f779c412f5cd1baf6c3e3aa5a","assets/packages/deriv_chart/assets/icons/symbols/frxusdnok.png":"d957fdfa55248112e72ee6eb0ad166b7","assets/packages/deriv_chart/assets/icons/symbols/crash300n.png":"811fe625af9befa1eb3116fe170da9d5","assets/packages/deriv_chart/assets/icons/symbols/ltcusd.png":"49c0bf02c99cc70f164329d4c794b884","assets/packages/deriv_chart/assets/icons/symbols/frxaudjpy.png":"605d3cdb4e33aa0730a52749583e2d62","assets/packages/deriv_chart/assets/icons/symbols/frxgbpaud.png":"b093bacf9b6b37256cbb7454d5c0c618","assets/packages/deriv_chart/assets/icons/symbols/cryxmrusd.png":"272edb110a2628fc60d2fb0bd237cc50","assets/packages/deriv_chart/assets/icons/symbols/xmrusd.png":"ecdce25fe2272992147875c80aa5564c","assets/packages/deriv_chart/assets/icons/symbols/frxeurnzd.png":"5e6997f168d3f146c492d0eed9503b0b","assets/packages/deriv_chart/assets/icons/symbols/otc_aex.png":"64a73c5aaa260a3602a1ca15dea3dd20","assets/packages/deriv_chart/assets/icons/symbols/r_75.png":"f4eb1ee786942ebbb7e848110908f7fb","assets/packages/deriv_chart/assets/icons/symbols/rdbull.png":"12af5d77b14beee08abe5e393c1a7ad7","assets/packages/deriv_chart/assets/icons/symbols/frxgbpjpy.png":"42bb921c4580882c07be30471ae97372","assets/packages/deriv_chart/assets/icons/symbols/1hz250v.png":"29cf175d192812b50c29135b62663d12","assets/packages/deriv_chart/assets/icons/symbols/crybtcusd.png":"02fb37d758a94ce064225cc50345ea93","assets/packages/deriv_chart/assets/icons/symbols/otc_ssmi.png":"1561a92a36989a64f85c7221384c4957","assets/packages/deriv_chart/assets/icons/symbols/frxgbpcad.png":"be914c3dd3192d404b79e5f7d3f943f9","assets/packages/deriv_chart/assets/icons/symbols/frxxauusd.png":"cbb4e956663bc0b6b98c57d1cac9068e","assets/packages/deriv_chart/assets/icons/symbols/crybnbusd.png":"372740ee2ae319f26fde7ef7a81ac359","assets/packages/deriv_chart/assets/icons/symbols/frxxpdusd.png":"a0e35bd0c63db9ba0c421a236a06e76a","assets/packages/deriv_chart/assets/icons/symbols/stprng4.png":"59f21b9ca82cd242c7babc32f829584b","assets/packages/deriv_chart/assets/icons/symbols/cryzecusd.png":"ea36d64aa57f4e1d44bc9c5ce9284ad9","assets/packages/deriv_chart/assets/icons/symbols/cryxrpusd.png":"5d0c030de1adb482f7796945ae149117","assets/packages/deriv_chart/assets/icons/symbols/1hz75v.png":"00e0249936eeb2d0b6bef1eef367e1bd","assets/packages/deriv_chart/assets/icons/symbols/frxnzdusd.png":"bc348f3842a0451f56bd8bb3e734204b","assets/packages/deriv_chart/assets/icons/symbols/jd150.png":"3e60df618ae2f598dd50e0488b075861","assets/packages/deriv_chart/assets/icons/symbols/frxusdpln.png":"d980230b5ea98c9b5d002a3cb8c84c13","assets/packages/deriv_chart/assets/icons/symbols/bnbusd.png":"3d5b95e1f0195528fc798ea8be00ca14","assets/packages/deriv_chart/assets/icons/symbols/jd50.png":"8e492b906a94357dbf50db14385c527a","assets/packages/deriv_chart/assets/icons/symbols/r_10.png":"1b9cb2c68df961025c42572a2034add9","assets/packages/deriv_chart/assets/icons/symbols/frxgbpchf.png":"226b953b636290e10055d14bca9b5bc0","assets/packages/deriv_chart/assets/icons/symbols/wldxau.png":"b2ce679571222597252272b0e06ce6fc","assets/packages/deriv_chart/assets/icons/symbols/frxxagusd.png":"3e87df9dd6cc2fc9cfc9871e0c624465","assets/packages/deriv_chart/assets/icons/symbols/frxaudnzd.png":"8a0984ff7646f0d9b97496bb4e8099a8","assets/packages/deriv_chart/assets/icons/symbols/jd200.png":"71c8b672dafa03ff61e437067bda3145","assets/packages/deriv_chart/assets/icons/symbols/ethusd.png":"bcdd0cd2cfcaa223c3d4ccef318fd503","assets/packages/deriv_chart/assets/icons/symbols/wldeur.png":"a03b5ef547219641244d7951fe0717b3","assets/packages/deriv_chart/assets/icons/symbols/frxusdsek.png":"de4d5275c29f934ade5b7528186aafa2","assets/packages/deriv_chart/assets/icons/symbols/otc_as51.png":"2d461c07e758cec3817d4981d7dcbb4f","assets/packages/deriv_chart/assets/icons/symbols/frxusdcad.png":"e8c3bf13c091879e68111700e9ec74e6","assets/packages/deriv_chart/assets/icons/symbols/1hz150v.png":"3740f1b30922d9b1bcf242484e1f6756","assets/packages/deriv_chart/assets/icons/symbols/crydshusd.png":"d1b4a516dbf4bf2a01f781e4bdd340af","assets/packages/deriv_chart/assets/icons/symbols/stprng2.png":"52ef0246327a78ba16cadeebb0e72218","assets/packages/deriv_chart/assets/icons/symbols/crash600.png":"5b1df8ebe581015213efb91483eb3a4a","assets/packages/deriv_chart/assets/icons/symbols/r_100.png":"5ae8eea5b3daa45c76ce1caf01d2acfc","assets/packages/deriv_chart/assets/icons/symbols/frxusdjpy.png":"2a27170f100f619036d79e164566e005","assets/packages/deriv_chart/assets/icons/symbols/frxgbpnok.png":"b8c7d9f5574f84e68351fb8a139408f0","assets/packages/deriv_chart/assets/icons/symbols/frxeurchf.png":"1a66826ef57b967efeb3e67673609eac","assets/packages/deriv_chart/assets/icons/symbols/r_25.png":"8ca61698280cfcf332914b2a47626b38","assets/packages/deriv_chart/assets/icons/symbols/frxeurjpy.png":"aeb0d0b3064206ade4551fb584fa28aa","assets/packages/deriv_chart/assets/icons/symbols/stprng5.png":"f5dc31bfa50f73421d15d43555d61906","assets/packages/deriv_chart/assets/fonts/quill_icons.ttf":"03494ad65f94a60634d32c3ab65fa178","assets/FontManifest.json":"84fa087dba170bffc9f3713aeebe836c","assets/AssetManifest.bin":"d7b436aa92de7ddda07c1129b0a82161","assets/AssetManifest.json":"6bb85219f59197eca57320f5729bffea","canvaskit/chromium/canvaskit.wasm":"b1ac05b29c127d86df4bcfbf50dd902a","canvaskit/chromium/canvaskit.js":"671c6b4f8fcc199dcc551c7bb125f239","canvaskit/chromium/canvaskit.js.symbols":"a012ed99ccba193cf96bb2643003f6fc","canvaskit/skwasm.worker.js":"89990e8c92bcb123999aa81f7e203b1c","canvaskit/skwasm.js":"694fda5704053957c2594de355805228","canvaskit/canvaskit.wasm":"1f237a213d7370cf95f443d896176460","canvaskit/canvaskit.js":"66177750aff65a66cb07bb44b8c6422b","canvaskit/skwasm.wasm":"9f0c0c02b82a910d12ce0543ec130e60","canvaskit/canvaskit.js.symbols":"48c83a2ce573d9692e8d970e288d75f7","canvaskit/skwasm.js.symbols":"262f4827a1317abb59d71d6c587a93e2","favicon.png":"5dcef449791fa27946b3d35ad8803796","flutter_bootstrap.js":"c9fa38e038b7bd877152f08685d821e9","version.json":"1756499d77011c0be564a414e567db76","main.dart.js":"34b3dd36c7b86f6db5207960471d0d81"},CORE=["main.dart.js","index.html","flutter_bootstrap.js","assets/AssetManifest.bin.json","assets/FontManifest.json"];async function downloadOffline(){var s=[],a=await caches.open(CACHE_NAME),e={};for(var c of await a.keys()){var t=c.url.substring(origin.length+1);""==t&&(t="/"),e[t]=!0}for(var d of Object.keys(RESOURCES))e[d]||s.push(d);return a.addAll(s)}function onlineFirst(s){return s.respondWith(fetch(s.request).then(a=>caches.open(CACHE_NAME).then(e=>(e.put(s.request,a.clone()),a))).catch(a=>caches.open(CACHE_NAME).then(e=>e.match(s.request).then(s=>{if(null!=s)return s;throw a}))))}self.addEventListener("install",s=>(self.skipWaiting(),s.waitUntil(caches.open(TEMP).then(s=>s.addAll(CORE.map(s=>new Request(s,{cache:"reload"}))))))),self.addEventListener("activate",function(s){return s.waitUntil(async function(){try{var s=await caches.open(CACHE_NAME),a=await caches.open(TEMP),e=await caches.open(MANIFEST),c=await e.match("manifest");if(!c){for(var t of(await caches.delete(CACHE_NAME),s=await caches.open(CACHE_NAME),await a.keys())){var d=await a.match(t);await s.put(t,d)}return await caches.delete(TEMP),await e.put("manifest",new Response(JSON.stringify(RESOURCES))),void self.clients.claim()}var b=await c.json(),r=self.location.origin;for(var t of await s.keys()){var n=t.url.substring(r.length+1);""==n&&(n="/"),RESOURCES[n]&&RESOURCES[n]==b[n]||await s.delete(t)}for(var t of await a.keys())d=await a.match(t),await s.put(t,d);return await caches.delete(TEMP),await e.put("manifest",new Response(JSON.stringify(RESOURCES))),void self.clients.claim()}catch(s){console.error("Failed to upgrade service worker: "+s),await caches.delete(CACHE_NAME),await caches.delete(TEMP),await caches.delete(MANIFEST)}}())}),self.addEventListener("fetch",s=>{if("GET"===s.request.method){var a=self.location.origin,e=s.request.url.substring(a.length+1);if(-1!=e.indexOf("?v=")&&(e=e.split("?v=")[0]),(s.request.url==a||s.request.url.startsWith(a+"/#")||""==e)&&(e="/"),RESOURCES[e])return"/"==e?onlineFirst(s):void s.respondWith(caches.open(CACHE_NAME).then(a=>a.match(s.request).then(e=>e||fetch(s.request).then(e=>(e&&Boolean(e.ok)&&a.put(s.request,e.clone()),e)))))}}),self.addEventListener("message",s=>{"skipWaiting"!==s.data?"downloadOffline"!==s.data||downloadOffline():self.skipWaiting()});